]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blame - bip39-standalone.html
Merge pull request #117 from jonathancross/iancoleman-bip39-bip49
[perso/Immae/Projets/Cryptomonnaies/BIP39.git] / bip39-standalone.html
CommitLineData
ebd8d4e8
IC
1<!DOCTYPE html>
2<html>
3 <head lang="en">
4 <meta charset="utf-8" />
5 <title>BIP39 - Mnemonic Code</title>
ab78acc6 6 <style>/*!
ebd8d4e8
IC
7 * Bootstrap v3.2.0 (http://getbootstrap.com)
8 * Copyright 2011-2014 Twitter, Inc.
9 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
ab78acc6
IC
10 *//*! normalize.css v3.0.1 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:before,:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;width:100% \9;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;width:100% \9;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}cite{font-style:normal}mark,.mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#428bca}a.text-primary:hover{color:#3071a9}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#428bca}a.bg-primary:hover{background-color:#3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}blockquote:before,blockquote:after{content:""}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=radio],input[type=checkbox]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#777;opacity:1}.form-control:-ms-input-placeholder{color:#777}.form-control::-webkit-input-placeholder{color:#777}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:34px;line-height:1.42857143 \0}input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;min-height:20px;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{position:absolute;margin-top:4px \9;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=radio][disabled],input[type=checkbox][disabled],input[type=radio].disabled,input[type=checkbox].disabled,fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm,.form-horizontal .form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.input-lg,.form-horizontal .form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:25px;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{top:0;right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.3px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn:focus,.btn:active:focus,.btn.active:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#3071a9;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#428bca;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#428bca;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn>input[type=radio],[data-toggle=buttons]>.btn>input[type=checkbox]{position:absolute;z-index:-1;filter:alpha(opacity=0);opacity:0}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=radio],.input-group-addon input[type=checkbox]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.navbar-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-15px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}.navbar-text.navbar-right:last-child{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#777}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#777}.navbar-inverse .navbar-nav>li>a{color:#777}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#777}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#777}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#428bca;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#2a6496;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;cursor:default;background-color:#428bca;border-color:#428bca}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-right:auto;margin-left:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar[aria-valuenow="1"],.progress-bar[aria-valuenow="2"]{min-width:30px}.progress-bar[aria-valuenow="0"]{min-width:30px;color:#777;background-color:transparent;background-image:none;-webkit-box-shadow:none;box-shadow:none}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{color:#777;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#428bca}.panel-primary>.panel-heading .badge{color:#428bca;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate3d(0,-25%,0);-o-transform:translate3d(0,-25%,0);transform:translate3d(0,-25%,0)}.modal.in .modal-dialog{-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-size:12px;line-height:1.4;visibility:visible;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{display:table;content:" "}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important;visibility:hidden!important}.affix{position:fixed;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none!important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}</style>
11 <meta content="Mnemonic code for generating deterministic keys" name="description"/>
12 <meta content="width=device-width, initial-scale=1.0" name="viewport" />
13 <meta content="bitcoin mnemonic converter" name="description" />
b630f83d 14 <meta content="Ian Coleman" name="author" />
18f16009 15 <link type="image/x-icon" rel="icon" href="data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAF0lEQVRIx2NgGAWjYBSMglEwCkbBSAcACBAAAeaR9cIAAAAASUVORK5CYII=" />
3af2954a 16
ab78acc6
IC
17 <style>
18 body {
19 padding-bottom: 32px;
20 }
21 .form-control[readonly] {
22 cursor: text;
23 }
24 .feedback-container {
25 position: fixed;
26 top: 0;
27 width: 100%;
28 text-align: center;
29 z-index: 4;
30 }
31 .feedback {
32 display: table;
33 padding: 0.5em 1em;
34 background-color: orange;
35 margin: 0 auto;
36 font-size: 2em;
37 color: #444;
38 border: 2px solid #555;
39 border-top: 0;
40 border-bottom-left-radius: 20px 20px;
41 border-bottom-right-radius: 20px 20px;
42 }
d5dc92fd
IC
43 .no-border {
44 border: 0;
45 box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
46 -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
47 }
0515eeec
IC
48 .phrase {
49 word-break: keep-all;
50 }
2a6dd137 51 .generate-container .strength {
b0818b31
IC
52 /* override mobile width from bootstrap */
53 width: auto!important;
54 display: inline-block;
55 }
ea87f1d3 56 .languages a {
0515eeec
IC
57 padding-left: 10px;
58 }
ea87f1d3
IC
59 .languages a:nth-of-type(1) {
60 margin-left: -12px;
61 padding-left: 0;
62 }
d737abf6
IC
63 .monospace {
64 font-family: monospace;
65 }
2a6dd137
IC
66 .entropy-container .filtered,
67 .entropy-container .binary {
68 word-wrap: break-word;
69 }
70 .entropy-container li {
71 padding-bottom: 5px;
72 }
73 .card-suit {
74 font-size: 19px;
75 line-height: 0;
76 }
77 .card-suit.club {
78 color: #009F00;
79 }
80 .card-suit.diamond {
81 color: #3D5DC4;
82 }
83 .card-suit.heart {
84 color: #F00;
85 }
86 .card-suit.spade {
87 color: #000;
88 }
e00964cc
IC
89 .qr-container {
90 position: fixed;
91 top: 0;
92 right: 0;
93 text-align: center;
94 background-color: #FFF;
95 border: 1px solid #CCC;
96 }
97 .qr-image {
98 margin: 5px;
99 }
52da415f
IC
100 .qr-hint,
101 .qr-warning {
e00964cc 102 padding: 2px;
52da415f
IC
103 max-width: 150px;
104 }
105 .more-info {
106 cursor: help;
107 border-bottom: 1px dashed #000;
108 text-decoration: none;
e00964cc 109 }
920eb591
IC
110 .version {
111 position: absolute;
112 top: 5px;
113 right: 5px;
114 }
ab78acc6
IC
115 </style>
116 </head>
117 <body>
118 <div class="container">
3af2954a 119
ab78acc6 120 <h1 class="text-center">Mnemonic Code Converter</h1>
0a8d06d0 121 <p class="version">v0.2.5</p>
ab78acc6
IC
122 <hr>
123 <div class="row">
124 <div class="col-md-12">
125 <h2>Mnemonic</h2>
126 <form class="form-horizontal" role="form">
ab78acc6 127 <div class="form-group">
c6624d51
IC
128 <div class="col-sm-2"></div>
129 <div class="col-sm-10">
ea87f1d3
IC
130 <p data-translate>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>
131 <p data-translate-html>
132 For more info see the
133 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target="_blank">BIP39 spec</a>.
134 </p>
c6624d51
IC
135 </div>
136 </div>
137 <div class="form-group generate-container">
b0818b31 138 <label class="col-sm-2 control-label"></label>
ab78acc6 139 <div class="col-sm-10">
b0818b31
IC
140 <div class="form-inline">
141 <div class="input-group-inline">
ea87f1d3 142 <span data-translate>Generate a random mnemonic, or enter your own below</span>:
b0818b31 143 <button class="btn generate">Generate</button>
b0818b31
IC
144 <select id="strength" class="strength form-control">
145 <option value="3">3</option>
146 <option value="6">6</option>
147 <option value="9">9</option>
148 <option value="12">12</option>
149 <option value="15" selected>15</option>
150 <option value="18">18</option>
151 <option value="21">21</option>
152 <option value="24">24</option>
153 </select>
ea87f1d3 154 <span data-translate>words</span>
b0818b31
IC
155 </div>
156 </div>
ab78acc6 157 </div>
0515eeec 158 </div>
c6624d51 159 <div class="entropy-container hidden">
2a6dd137 160 <div class="form-group text-danger">
ea87f1d3 161 <label class="col-sm-2 control-label" data-translate>Warning</label>
2a6dd137 162 <div class="col-sm-10 form-control-static">
ea87f1d3
IC
163 <span data-translate>Entropy is an advanced feature. Your mnemonic may be insecure if this feature is used incorrectly.</span>
164 <a href="#entropy-notes" data-translate>Read more</a>
18abe53b
IC
165 </div>
166 </div>
2a6dd137 167 <div class="form-group">
ea87f1d3 168 <label for="entropy" class="col-sm-2 control-label" data-translate>Entropy</label>
2a6dd137 169 <div class="col-sm-7">
ea87f1d3 170 <textarea id="entropy" rows="2" class="entropy form-control" placeholder="Accepts binary, base 6, 6-sided dice, base 10, hexadecimal, cards" data-translate-placeholder></textarea>
95f04905 171 <div class="row">
f1e5d484
IC
172 <label class="col-sm-3 control-label" data-translate><span class="more-info" data-translate-title title="Based on estimates from zxcvbn using Filtered Entropy">Time To Crack</span></label>
173 <div class="crack-time col-sm-3 form-control-static"></div>
ea87f1d3 174 <label class="col-sm-3 control-label" data-translate>Event Count</label>
95f04905
IC
175 <div class="event-count col-sm-3 form-control-static"></div>
176 </div>
177 <div class="row">
ea87f1d3 178 <label class="col-sm-3 control-label" data-translate>Entropy Type</label>
95f04905 179 <div class="type col-sm-3 form-control-static"></div>
ea87f1d3 180 <label class="col-sm-3 control-label" data-translate>Bits Per Event</label>
95f04905
IC
181 <div class="bits-per-event col-sm-3 form-control-static"></div>
182 </div>
183 <div class="row">
f1e5d484 184 <label class="col-sm-3 control-label" data-translate>Raw Entropy Words</label>
95f04905 185 <div class="word-count col-sm-3 form-control-static"></div>
52da415f 186 <label class="col-sm-3 control-label" data-translate><span class="more-info" data-translate-title title="Total bits of entropy may be less than indicated if any entropy event uses a weak source.">Total Bits</span></label>
95f04905
IC
187 <div class="bits col-sm-3 form-control-static"></div>
188 </div>
ea87f1d3 189 <label class="col-sm-3 control-label" data-translate>Filtered Entropy</label>
2a6dd137 190 <div class="filtered col-sm-9 form-control-static"></div>
ea87f1d3 191 <label class="col-sm-3 control-label" data-translate>Raw Binary</label>
2a6dd137 192 <div class="binary col-sm-9 form-control-static"></div>
ea87f1d3 193 <label class="col-sm-3 control-label" data-translate>Mnemonic Length</label>
2a6dd137 194 <div class="col-sm-9">
18abe53b 195 <select class="mnemonic-length form-control">
5ed50bd9 196 <option value="raw" selected data-translate>Use Raw Entropy (3 words per 32 bits)</option>
ea87f1d3 197 <option value="12">12 <span data-translate>Words</span></option>
5ed50bd9 198 <option value="15">15 <span data-translate>Words</option>
ea87f1d3
IC
199 <option value="18">18 <span data-translate>Words</span></option>
200 <option value="21">21 <span data-translate>Words</span></option>
201 <option value="24">24 <span data-translate>Words</span></option>
18abe53b 202 </select>
c6624d51 203 </div>
18abe53b 204 </div>
2a6dd137 205 <div class="col-sm-3">
ea87f1d3 206 <p data-translate>Valid entropy values include:</p>
2a6dd137 207 <ul>
ea87f1d3
IC
208 <li><strong data-translate>Binary</strong> [0-1]<br>101010011</li>
209 <li><strong data-translate>Base 6</strong> [0-5]<br>123434014</li>
210 <li><strong data-translate>Dice</strong> [1-6]<br>62535634</li>
211 <li><strong data-translate>Base 10</strong> [0-9]<br>90834528</li>
212 <li><strong data-translate>Hex</strong> [0-9A-F]<br>4187a8bfd9</li>
213 <li><strong data-translate>Card</strong> [A2-9TJQK][CDHS]<br>ahqs9dtc</li>
2a6dd137
IC
214 </ul>
215 </div>
c6624d51
IC
216 </div>
217 </div>
218 <div class="form-group">
219 <div class="col-sm-2"></div>
220 <div class="col-sm-10 checkbox">
221 <label>
222 <input type="checkbox" class="use-entropy">
ea87f1d3 223 <span data-translate>Supply my own source of entropy</span>
c6624d51
IC
224 </label>
225 </div>
226 </div>
227 <div class="form-group">
ea87f1d3 228 <label class="col-sm-2 control-label" data-translate>Mnemonic Language</label>
0515eeec 229 <div class="col-sm-10 languages">
ea87f1d3
IC
230 <div class="form-control no-border">
231 <a href="#english">English</a>
232 <a href="#japanese" title="Japanese">日本語</a>
233 <a href="#spanish" title="Spanish">Español</a>
234 <a href="#chinese_simplified" title="Chinese (Simplified)">中文(简体)</a>
235 <a href="#chinese_traditional" title="Chinese (Traditional)">中文(繁體)</a>
236 <a href="#french" title="French">Français</a>
237 <a href="#italian" title="Italian">Italiano</a>
238 </div>
0515eeec 239 </div>
ab78acc6
IC
240 </div>
241 <div class="form-group">
ea87f1d3 242 <label for="phrase" class="col-sm-2 control-label" data-translate>BIP39 Mnemonic</label>
ab78acc6 243 <div class="col-sm-10">
e00964cc 244 <textarea id="phrase" class="phrase form-control" data-show-qr></textarea>
ab78acc6
IC
245 </div>
246 </div>
247 <div class="form-group">
ea87f1d3 248 <label for="passphrase" class="col-sm-2 control-label" data-translate>BIP39 Passphrase (optional)</label>
ab78acc6
IC
249 <div class="col-sm-10">
250 <textarea id="passphrase" class="passphrase form-control"></textarea>
251 </div>
252 </div>
73161a92 253 <div class="form-group">
ea87f1d3 254 <label for="seed" class="col-sm-2 control-label" data-translate>BIP39 Seed</label>
73161a92 255 <div class="col-sm-10">
e00964cc 256 <textarea id="seed" class="seed form-control" readonly="readonly" data-show-qr></textarea>
73161a92
IC
257 </div>
258 </div>
ab78acc6 259 <div class="form-group">
ea87f1d3 260 <label for="network-phrase" class="col-sm-2 control-label" data-translate>Coin</label>
ab78acc6
IC
261 <div class="col-sm-10">
262 <select id="network-phrase" class="network form-control">
263 <!-- populated by javascript -->
264 </select>
265 </div>
266 </div>
267 <div class="form-group">
ea87f1d3 268 <label for="root-key" class="col-sm-2 control-label" data-translate>BIP32 Root Key</label>
ab78acc6 269 <div class="col-sm-10">
e00964cc 270 <textarea id="root-key" class="root-key form-control" data-show-qr></textarea>
ab78acc6
IC
271 </div>
272 </div>
8d18f379
IC
273 <div class="form-group litecoin-ltub-container hidden">
274 <label for="litecoin-use-ltub" class="col-sm-2 control-label" data-translate>Prefixes</label>
275 <div class="col-sm-10 checkbox">
276 <label>
277 <input type="checkbox" id="litecoin-use-ltub" class="litecoin-use-ltub">
278 Use <code>Ltpv / Ltub</code> instead of <code>xprv / xpub</code>
279 </label>
280 </div>
281 </div>
ab78acc6
IC
282 </form>
283 </div>
284 </div>
3af2954a 285
ab78acc6 286 <hr>
3af2954a 287
ab78acc6
IC
288 <div class="row">
289 <div class="col-md-12">
290 <h2>Derivation Path</h2>
291 <ul class="derivation-type nav nav-tabs" role="tablist">
9987f0c1
IC
292 <li id="bip32-tab">
293 <a href="#bip32" role="tab" data-toggle="tab">BIP32</a>
294 </li>
d5dc92fd 295 <li id="bip44-tab" class="active">
ab78acc6
IC
296 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a>
297 </li>
9987f0c1
IC
298 <li id="bip49-tab">
299 <a href="#bip49" role="tab" data-toggle="tab">BIP49</a>
ab78acc6
IC
300 </li>
301 </ul>
302 <div class="derivation-type tab-content">
d5dc92fd 303 <div id="bip44" class="tab-pane active">
ab78acc6
IC
304 <form class="form-horizontal" role="form">
305 <br>
306 <div class="col-sm-2"></div>
307 <div class="col-sm-10">
ea87f1d3
IC
308 <p data-translate-html>
309 For more info see the
310 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a>.
311 </p>
ab78acc6
IC
312 </div>
313 <div class="form-group">
314 <label for="purpose" class="col-sm-2 control-label">
ea87f1d3 315 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank" data-translate>Purpose</a>
ab78acc6
IC
316 </label>
317 <div class="col-sm-10">
9987f0c1 318 <input id="purpose" type="text" class="purpose form-control" value="44" readonly>
ab78acc6
IC
319 </div>
320 </div>
321 <div class="form-group">
322 <label for="coin" class="col-sm-2 control-label">
ea87f1d3 323 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank" data-translate>Coin</a>
ab78acc6
IC
324 </label>
325 <div class="col-sm-10">
9987f0c1 326 <input id="coin" type="text" class="coin form-control" value="0" readonly>
ab78acc6
IC
327 </div>
328 </div>
329 <div class="form-group">
330 <label for="account" class="col-sm-2 control-label">
ea87f1d3 331 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank" data-translate>Account</a>
ab78acc6
IC
332 </label>
333 <div class="col-sm-10">
334 <input id="account" type="text" class="account form-control" value="0">
335 </div>
336 </div>
337 <div class="form-group">
338 <label for="change" class="col-sm-2 control-label">
ea87f1d3 339 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank" data-translate>External / Internal</a>
ab78acc6
IC
340 </label>
341 <div class="col-sm-10">
342 <input id="change" type="text" class="change form-control" value="0">
343 </div>
344 </div>
20083ab9
IC
345 <div class="form-group">
346 <label class="col-sm-2 control-label">
347 </label>
348 <div class="col-sm-10">
f3bfd2a5 349 <p data-translate>The account extended keys can be used for importing to most BIP44 compatible wallets, such as mycelium or electrum.</p>
20083ab9
IC
350 </div>
351 </div>
352 <div class="form-group">
353 <label for="account-xprv" class="col-sm-2 control-label">
354 <span data-translate>Account Extended Private Key</span>
355 </label>
356 <div class="col-sm-10">
357 <textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
358 </div>
359 </div>
360 <div class="form-group">
361 <label for="account-xpub" class="col-sm-2 control-label">
362 <span data-translate>Account Extended Public Key</span>
363 </label>
364 <div class="col-sm-10">
365 <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
366 </div>
367 </div>
368 <div class="form-group">
369 <label class="col-sm-2 control-label">
370 </label>
371 <div class="col-sm-10">
372 <p data-translate>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
373 </div>
374 </div>
ab78acc6 375 <div class="form-group">
ea87f1d3 376 <label for="bip44-path" class="col-sm-2 control-label" data-translate>BIP32 Derivation Path</label>
ab78acc6
IC
377 <div class="col-sm-10">
378 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
379 </div>
380 </div>
381 </form>
382 </div>
383 <div id="bip32" class="tab-pane">
384 <form class="form-horizontal" role="form">
385 <br>
386 <div class="col-sm-2"></div>
387 <div class="col-sm-10">
ea87f1d3
IC
388 <p data-translate>
389 For more info see the
390 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a>
391 </p>
ab78acc6 392 </div>
56530adc
IC
393 <div class="form-group">
394 <label for="bip32-client" class="col-sm-2 control-label" data-translate>Client</label>
395 <div class="col-sm-10">
396 <select id="bip32-client" class="client form-control">
397 <option value="custom">Custom derivation path</option>
398 <!-- populated by javascript -->
399 </select>
400 </div>
401 </div>
ab78acc6 402 <div class="form-group">
ea87f1d3 403 <label for="bip32-path" class="col-sm-2 control-label" data-translate>BIP32 Derivation Path</label>
ab78acc6
IC
404 <div class="col-sm-10">
405 <input id="bip32-path" type="text" class="path form-control" value="m/0">
406 </div>
407 </div>
1975bfbc
IC
408 <div class="form-group">
409 <div class="col-sm-2"></div>
410 <label class="col-sm-10">
411 <input class="hardened-addresses" type="checkbox">
ea87f1d3 412 <span data-translate>Use hardened addresses</span>
1975bfbc
IC
413 </label>
414 </div>
0a8d06d0
IC
415 <div class="form-group">
416 <div class="col-sm-2"></div>
417 <label class="col-sm-10">
418 <input class="p2wpkh-nested-in-p2sh" type="checkbox">
419 <span data-translate>Use SegWit addresses (ie P2WPKH Nested In P2SH)</span>
420 </label>
421 </div>
1975bfbc 422 <div class="form-group">
ea87f1d3 423 <label for="core-path" class="col-sm-2 control-label" data-translate>Bitcoin Core</label>
1975bfbc 424 <div class="col-sm-10">
ea87f1d3 425 <p class="form-control no-border" data-translate-html>
1975bfbc 426 Use path <code>m/0'/0'</code> with hardened addresses.
c866242d 427 </p>
ea87f1d3
IC
428 <p class="form-control no-border" data-translate-html>
429 For more info see the
430 <a href="https://github.com/bitcoin/bitcoin/pull/8035" target="_blank">Bitcoin Core BIP32 implementation</a>
1975bfbc
IC
431 </p>
432 </div>
433 </div>
56530adc
IC
434 <div class="form-group">
435 <label for="core-path" class="col-sm-2 control-label" data-translate>Multibit</label>
436 <div class="col-sm-10">
437 <p class="form-control no-border">
438 <span data-translate-html>Use path <code>m/0'/0</code>.</span>
439 </p>
440 <p class="form-control no-border">
441 <span data-translate>For more info see</span>
442 <a href="https://multibit.org/" target="_blank">MultiBit HD</a>
443 </p>
444 </div>
445 </div>
aa51da11 446 <div class="form-group">
ea87f1d3 447 <label class="col-sm-2 control-label" data-translate>Block Explorers</label>
aa51da11
IC
448 <div class="col-sm-10">
449 <p class="form-control no-border">
ea87f1d3
IC
450 <span data-translate-html>Use path <code>m/44'/0'/0'</code>.</span>
451 <span data-translate-html>Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xprv</code> key.</span>
c866242d
IC
452 </p>
453 <p class="form-control no-border">
ea87f1d3
IC
454 <span data-translate>Can be used with</span>:
455 <a href="https://blockchain.info/" target="_blank">blockchain.info</a>
aa51da11
IC
456 </p>
457 </div>
458 </div>
ab78acc6
IC
459 </form>
460 </div>
9987f0c1
IC
461 <div id="bip49" class="tab-pane">
462 <form class="form-horizontal" role="form">
463 <br>
464 <div class="unavailable hidden">
465 <div class="form-group">
466 <div class="col-sm-2"></div>
467 <div class="col-sm-10">
468 <p data-translate>BIP49 is unavailable for this coin.</p>
469 </div>
470 </div>
471 </div>
472 <div class="available">
473 <div class="col-sm-2"></div>
474 <div class="col-sm-10">
475 <p data-translate-html>
476 For more info see the
477 <a href="https://github.com/bitcoin/bips/blob/master/bip-0049.mediawiki" target="_blank">BIP49 spec</a>.
478 </p>
479 </div>
480 <div class="form-group">
481 <label for="purpose" class="col-sm-2 control-label">
482 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank" data-translate>Purpose</a>
483 </label>
484 <div class="col-sm-10">
485 <input id="purpose" type="text" class="purpose form-control" value="49" readonly>
486 </div>
487 </div>
488 <div class="form-group">
489 <label for="coin" class="col-sm-2 control-label">
490 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank" data-translate>Coin</a>
491 </label>
492 <div class="col-sm-10">
493 <input id="coin" type="text" class="coin form-control" value="0" readonly>
494 </div>
495 </div>
496 <div class="form-group">
497 <label for="account" class="col-sm-2 control-label">
498 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank" data-translate>Account</a>
499 </label>
500 <div class="col-sm-10">
501 <input id="account" type="text" class="account form-control" value="0">
502 </div>
503 </div>
504 <div class="form-group">
505 <label for="change" class="col-sm-2 control-label">
506 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank" data-translate>External / Internal</a>
507 </label>
508 <div class="col-sm-10">
509 <input id="change" type="text" class="change form-control" value="0">
510 </div>
511 </div>
512 <div class="form-group">
513 <label class="col-sm-2 control-label">
514 </label>
515 <div class="col-sm-10">
516 <p data-translate>The account extended keys can be used for importing to most BIP49 compatible wallets.</p>
517 </div>
518 </div>
519 <div class="form-group">
520 <label for="account-xprv" class="col-sm-2 control-label">
521 <span data-translate>Account Extended Private Key</span>
522 </label>
523 <div class="col-sm-10">
524 <textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
525 </div>
526 </div>
527 <div class="form-group">
528 <label for="account-xpub" class="col-sm-2 control-label">
529 <span data-translate>Account Extended Public Key</span>
530 </label>
531 <div class="col-sm-10">
532 <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
533 </div>
534 </div>
535 <div class="form-group">
536 <label class="col-sm-2 control-label">
537 </label>
538 <div class="col-sm-10">
539 <p data-translate>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
540 </div>
541 </div>
542 <div class="form-group">
543 <label for="bip49-path" class="col-sm-2 control-label" data-translate>BIP32 Derivation Path</label>
544 <div class="col-sm-10">
545 <input id="bip49-path" type="text" class="path form-control" value="m/49'/0'/0'/0" readonly="readonly">
546 </div>
547 </div>
548 </div>
549 </form>
550 </div>
ab78acc6
IC
551 </div>
552 <form class="form-horizontal" role="form">
553 <div class="form-group">
20083ab9 554 <label for="extended-priv-key" class="col-sm-2 control-label" data-translate>BIP32 Extended Private Key</label>
ab78acc6 555 <div class="col-sm-10">
e00964cc 556 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly" data-show-qr></textarea>
ab78acc6
IC
557 </div>
558 </div>
559 <div class="form-group">
20083ab9 560 <label for="extended-pub-key" class="col-sm-2 control-label" data-translate>BIP32 Extended Public Key</label>
ab78acc6 561 <div class="col-sm-10">
e00964cc 562 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly" data-show-qr></textarea>
ab78acc6
IC
563 </div>
564 </div>
565 </form>
566 </div>
567 </div>
3af2954a 568
ab78acc6 569 <hr>
3af2954a 570
ab78acc6
IC
571 <div class="row">
572 <div class="col-md-12">
573 <h2>Derived Addresses</h2>
ea87f1d3 574 <p data-translate>Note these addreses are derived from the BIP32 Extended Key</p>
ab78acc6
IC
575 <table class="table table-striped">
576 <thead>
577 <th>
578 <div class="input-group">
ea87f1d3
IC
579 <span data-translate>Path</span>&nbsp;&nbsp;
580 <button class="index-toggle" data-translate>Toggle</button>
ab78acc6
IC
581 </div>
582 </th>
583 <th>
584 <div class="input-group">
ea87f1d3
IC
585 <span data-translate>Address</span>&nbsp;&nbsp;
586 <button class="address-toggle" data-translate>Toggle</button>
ab78acc6
IC
587 </div>
588 </th>
1b12b2f5
IC
589 <th>
590 <div class="input-group">
ea87f1d3
IC
591 <span data-translate>Public Key</span>&nbsp;&nbsp;
592 <button class="public-key-toggle" data-translate>Toggle</button>
1b12b2f5
IC
593 </div>
594 </th>
ab78acc6
IC
595 <th>
596 <div class="input-group">
ea87f1d3
IC
597 <span data-translate>Private Key</span>&nbsp;&nbsp;
598 <button class="private-key-toggle" data-translate>Toggle</button>
ab78acc6
IC
599 </div>
600 </th>
601 </thead>
d737abf6 602 <tbody class="addresses monospace">
c866242d
IC
603 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
604 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
605 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
606 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
607 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
ab78acc6
IC
608 </tbody>
609 </table>
610 </div>
611 </div>
ea87f1d3 612 <span data-translate>Show more rows</span>:
ab78acc6 613 <input type="number" class="rows-to-add" value="20">
ea87f1d3 614 <button class="more" data-translate>Show</button>
3af2954a 615
ab78acc6 616 <hr>
3af2954a 617
ab78acc6
IC
618 <div class="row">
619 <div class="col-md-12">
ea87f1d3
IC
620 <h2 data-translate>More info</h2>
621 <h3>BIP39 <span class="small" data-translate>Mnemonic code for generating deterministic keys</span></h3>
622 <p data-translate-html>
ab78acc6
IC
623 Read more at the
624 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
625 </p>
ea87f1d3
IC
626 <h3>BIP32 <span class="small" data-translate>Hierarchical Deterministic Wallets</span></h3>
627 <p data-translate-html>
ab78acc6
IC
628 Read more at the
629 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
ea87f1d3
IC
630 </p>
631 <p data-translate-html>
632 See the demo at
ab78acc6
IC
633 <a href="http://bip32.org/" target="_blank">bip32.org</a>
634 </p>
ea87f1d3
IC
635 <h3>BIP44 <span class="small" data-translate>Multi-Account Hierarchy for Deterministic Wallets</span></h3>
636 <p data-translate-html>
ab78acc6
IC
637 Read more at the
638 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
639 </p>
861750ae
JC
640 <h3>BIP49 <span class="small" data-translate>Derivation scheme for P2WPKH-nested-in-P2SH based accounts</span></h3>
641 <p data-translate-html>
642 Read more at the
643 <a href="https://github.com/bitcoin/bips/blob/master/bip-0049.mediawiki" target="_blank">official BIP49 spec</a>
644 </p>
ea87f1d3 645 <h3 data-translate>Private Keys</h3>
ab78acc6 646 <p>
ea87f1d3
IC
647 <span data-translate-html>
648 Use private keys at
649 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>.
650 </span>
651 <span data-translate>Be careful - it can be easy to make mistakes if you don't know what you're doing.</span>
ab78acc6 652 </p>
ea87f1d3 653 <h3 id="entropy-notes" data-translate>Entropy</h3>
c6624d51 654 <p>
ea87f1d3
IC
655 <span data-translate-html>
656 Entropy values must be sourced from a
657 <a href="https://en.wikipedia.org/wiki/Random_number_generation" target="_blank">strong source of randomness</a>.
658 </span>
659 <span data-translate>This means flipping a fair coin, rolling a fair dice, noise measurements etc.</span>
660 <span data-translate-html>
661 Do <strong>NOT</strong> use phrases from books, lyrics from songs, your birthday or steet address,
662 keyboard mashing, or anything you <i>think</i> is random, because chances are overwhelming it isn't
663 random enough for the needs of this tool.
664 </span>
c6624d51 665 </p>
434caecd
IC
666 <p>
667 <strong><span data-translate>Do not store entropy.</span></strong>
668 </p>
669 <p>
670 <span data-translate>Storing entropy (such as keeping a deck of cards in a specific shuffled order) is unreliable compared to storing a mnemonic.</span>
671 <span data-translate>Instead of storing entropy, store the mnemonic generated from the entropy.</span>
672 <span data-translate-html><a href="https://en.wikipedia.org/wiki/Steganography#Physical" target="_blank">Steganography</a> may be beneficial when storing the mnemonic.</span>
673 </p>
c6624d51 674 <p>
ea87f1d3
IC
675 <span data-translate-html>
676 The random mnemonic generator on this page uses a
677 <a href="https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues" target="_blank">cryptographically secure random number generator</a>.
678 </span>
679 <span data-translate>The built in random generator can generally be trusted more than your own intuition about randomness.</span>
680 <span data-translate>If cryptographic randomness isn't available in your browser, this page will show a warning and the generate button will not work.</span>
681 <span data-translate>In that case you might choose to use your own source of entropy.</span>
c6624d51
IC
682 </p>
683 <p>
ea87f1d3 684 <a href="https://bitcointalk.org/index.php?topic=311000.msg3345309#msg3345309" target="_blank" data-translate>You are not a good source of entropy.</a>
c6624d51 685 </p>
52da415f
IC
686 <h3 data-translate>License</h3>
687 <p>
688 <span data-translate-html>Please refer to <a href="https://github.com/iancoleman/bip39/blob/master/LICENSE" target="_blank">the software license</a> for more detail.
689 </span>
690 </p>
691 <p data-translate>The software is provided "as is", without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software.</p>
ab78acc6
IC
692 </div>
693 </div>
3af2954a 694
ab78acc6 695 <hr>
3af2954a 696
ab78acc6
IC
697 <div class="row">
698 <div class="col-md-12">
3af2954a 699
ea87f1d3 700 <h2 data-translate>Offline Usage</h2>
3af2954a 701
ea87f1d3 702 <p data-translate>
ab78acc6
IC
703 You can use this tool without having to be online.
704 </p>
ea87f1d3 705 <p data-translate>
ab78acc6
IC
706 In your browser, select file save-as, and save this page
707 as a file.
708 </p>
ea87f1d3 709 <p data-translate>
ab78acc6
IC
710 Double-click that file to open it in a browser
711 on any offline computer.
712 </p>
713 <p>
ea87f1d3
IC
714 <span data-translate>Alternatively, download the file from the repository</span>
715 -
716 <a href="https://github.com/iancoleman/bip39">https://github.com/iancoleman/bip39</a>
717 </p>
3af2954a 718
ab78acc6
IC
719 </div>
720 </div>
3af2954a 721
ab78acc6 722 <hr>
3af2954a 723
ab78acc6
IC
724 <div class="row">
725 <div class="col-md-12">
3af2954a 726
ea87f1d3 727 <h2 data-translate>This project is 100% open-source code</h2>
3af2954a 728
ab78acc6 729 <p>
ea87f1d3
IC
730 <span data-translate>Get the source code from the repository</span>
731 -
b630f83d
IC
732 <a href="https://github.com/iancoleman/bip39" target="_blank">
733 https://github.com/iancoleman/bip39
ab78acc6
IC
734 </a>
735 </p>
3af2954a 736
ea87f1d3 737 <h3 data-translate>Libraries</h3>
3af2954a 738
ab78acc6
IC
739 <p>
740 <span>BitcoinJS - </span>
741 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
742 https://github.com/bitcoinjs/bitcoinjs-lib
743 </a>
744 </p>
3af2954a 745
ab78acc6
IC
746 <p>
747 <span>jsBIP39 - </span>
748 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
749 https://github.com/iancoleman/jsbip39
750 </a>
751 </p>
3af2954a 752
ab78acc6
IC
753 <p>
754 <span>sjcl - </span>
755 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
756 https://github.com/bitwiseshiftleft/sjcl
757 </a>
758 </p>
3af2954a 759
ab78acc6
IC
760 <p>
761 <span>jQuery - </span>
762 <a href="https://jquery.com/" target="_blank">
763 https://jquery.com/
764 </a>
765 </p>
3af2954a 766
ab78acc6
IC
767 <p>
768 <span>Twitter Bootstrap - </span>
769 <a href="http://getbootstrap.com/" target="_blank">
770 http://getbootstrap.com/
771 </a>
772 </p>
3af2954a 773
ab78acc6
IC
774 </div>
775 </div>
3af2954a 776
ab78acc6 777 </div>
3af2954a 778
e00964cc 779 <div class="qr-container hidden">
52da415f
IC
780 <div class="qr-hint bg-primary hidden" data-translate>Click field to hide QR</div>
781 <div class="qr-hint bg-primary" data-translate>Click field to show QR</div>
782 <div class="qr-hider hidden">
783 <div class="qr-image"></div>
784 <div class="qr-warning bg-primary" data-translate>Caution: Scanner may keep history</div>
785 </div>
e00964cc
IC
786 </div>
787
ab78acc6
IC
788 <div class="feedback-container">
789 <div class="feedback">Loading...</div>
790 </div>
3af2954a 791
ab78acc6
IC
792 <script type="text/template" id="address-row-template">
793 <tr>
794 <td class="index"><span></span></td>
e00964cc
IC
795 <td class="address"><span data-show-qr></span></td>
796 <td class="pubkey"><span data-show-qr></span></td>
797 <td class="privkey"><span data-show-qr></span></td>
ab78acc6
IC
798 </tr>
799 </script>
8b095871
IC
800 <script>// From
801// https://raw.githubusercontent.com/inexorabletash/polyfill/a6bc6ced78160c994f76a909b6ff6bbbab3d43de/es6.js
802// Required for ethereumjs-utils.js when run in phantomjs-2.1.1
803// but is not required in any modern browsers.
804// For more information, see
805// https://www.bountysource.com/issues/38485709-error-rendering-plot-with-phantomjs
806
807//----------------------------------------------------------------------
808//
809// ECMAScript 2015 Polyfills
810//
811//----------------------------------------------------------------------
563e401a 812
8b095871
IC
813(function (global) {
814 "use strict";
815
816 // Set this to always override native implementations, for testing
817 // the polyfill in browsers with partial/full ES2015 support.
818 var OVERRIDE_NATIVE_FOR_TESTING = false;
819
820 var undefined = (void 0); // Paranoia
821
822 // Helpers
823
824 function strict(o) {
825 return o === global ? undefined : o;
826 }
827
828 function hook(o, p, f) {
829 var op = o[p];
830 console.assert(typeof op === 'function', 'Hooking a non-function');
831 o[p] = function() {
832 var o = strict(this);
833 var r = f.apply(o, arguments);
834 return r !== undefined ? r : op.apply(o, arguments);
835 };
836 }
837
838 function isSymbol(s) {
839 return (typeof s === 'symbol') || ('Symbol' in global && s instanceof global.Symbol);
840 }
841
842 function getPropertyDescriptor(target, name) {
843 var desc = Object.getOwnPropertyDescriptor(target, name);
844 var proto = Object.getPrototypeOf(target);
845 while (!desc && proto) {
846 desc = Object.getOwnPropertyDescriptor(proto, name);
847 proto = Object.getPrototypeOf(proto);
563e401a 848 }
8b095871
IC
849 return desc;
850 }
563e401a 851
8b095871
IC
852 var enqueue = (function(nativePromise, nativeSetImmediate) {
853 if (nativePromise)
854 return function(job) { nativePromise.resolve().then(function() { job(); }); };
855 if (nativeSetImmediate)
856 return function(job) { nativeSetImmediate(job); };
857 return function(job) { setTimeout(job, 0); };
858 }(global['Promise'], global['setImmediate']));
563e401a 859
8b095871
IC
860 function define(o, p, v, override) {
861 if (p in o && !override && !OVERRIDE_NATIVE_FOR_TESTING)
862 return;
863
864 if (typeof v === 'function') {
865 // Sanity check that functions are appropriately named (where possible)
866 console.assert(isSymbol(p) || !('name' in v) || v.name === p || v.name === p + '_', 'Expected function name "' + p.toString() + '", was "' + v.name + '"');
867 Object.defineProperty(o, p, {
868 value: v,
869 configurable: true,
870 enumerable: false,
871 writable: true
872 });
563e401a 873 } else {
8b095871
IC
874 Object.defineProperty(o, p, {
875 value: v,
876 configurable: false,
877 enumerable: false,
878 writable: false
879 });
563e401a 880 }
8b095871 881 }
563e401a 882
8b095871
IC
883 function set_internal(o, p, v) {
884 Object.defineProperty(o, p, {
885 value: v,
886 configurable: false,
887 enumerable: false,
888 writable: true
889 });
890 }
563e401a 891
8b095871
IC
892 // Snapshot intrinsic functions
893 var $isNaN = global.isNaN,
894 $parseInt = global.parseInt,
895 $parseFloat = global.parseFloat;
896
897 var E = Math.E,
898 LOG10E = Math.LOG10E,
899 LOG2E = Math.LOG2E,
900 abs = Math.abs,
901 ceil = Math.ceil,
902 exp = Math.exp,
903 floor = Math.floor,
904 log = Math.log,
905 max = Math.max,
906 min = Math.min,
907 pow = Math.pow,
908 random = Math.random,
909 sqrt = Math.sqrt;
910
911 var orig_match = String.prototype.match,
912 orig_replace = String.prototype.replace,
913 orig_search = String.prototype.search,
914 orig_split = String.prototype.split;
915
916 // These are used for implementing the polyfills, but not exported.
917
918 // Inspired by https://gist.github.com/1638059
919 /** @constructor */
920 function EphemeronTable() {
921 var secretKey = ObjectCreate(null);
922
923 function conceal(o) {
924 var oValueOf = o.valueOf, secrets = ObjectCreate(null);
925 Object.defineProperty(o, 'valueOf', {
926 value: (function(secretKey) {
927 return function (k) {
928 return (k === secretKey) ? secrets : oValueOf.apply(o, arguments);
929 };
930 }(secretKey)),
931 configurable: true,
932 writeable: true,
933 enumerable: false
934 });
935 return secrets;
936 }
563e401a 937
8b095871
IC
938 function reveal(o) {
939 var v = typeof o.valueOf === 'function' && o.valueOf(secretKey);
940 return v === o ? null : v;
941 }
942
943 return {
944 clear: function() {
945 secretKey = ObjectCreate(null);
946 },
947 remove: function(key) {
948 var secrets = reveal(key);
949 if (secrets && HasOwnProperty(secrets, 'value')) {
950 delete secrets.value;
951 return true;
952 }
953 return false;
954 },
955 get: function(key, defaultValue) {
956 var secrets = reveal(key);
957 return (secrets && HasOwnProperty(secrets, 'value')) ? secrets.value : defaultValue;
958 },
959 has: function(key) {
960 var secrets = reveal(key);
961 return Boolean(secrets && HasOwnProperty(secrets, 'value'));
962 },
963 set: function(key, value) {
964 var secrets = reveal(key) || conceal(key);
965 secrets.value = value;
563e401a 966 }
8b095871
IC
967 };
968 }
563e401a 969
8b095871 970 var empty = Object.create(null);
563e401a 971
8b095871
IC
972 //----------------------------------------------------------------------
973 //
974 // ECMAScript 2015
975 // http://www.ecma-international.org/ecma-262/6.0/
976 //
977 //----------------------------------------------------------------------
563e401a 978
8b095871
IC
979 // ---------------------------------------
980 // 19.4 Symbol Objects
981 // ---------------------------------------
563e401a 982
8b095871
IC
983 // NOTE: Symbols are defined here - out of spec order - since we need the
984 // properties and prototype to be populated for other polyfills.
563e401a 985
8b095871 986 // NOTE: Not secure, nor is obj[$$symbol] hidden from Object.keys()
563e401a 987
8b095871
IC
988 var symbolForKey;
989 (function() {
990 var secret = Object.create(null);
991 var symbolMap = {};
992 symbolForKey = function(k) {
993 return symbolMap[k];
994 };
563e401a 995
8b095871 996 var GlobalSymbolRegistry = [];
563e401a 997
8b095871
IC
998 function unique(bits) {
999 return Array(bits + 1).join('x').replace(/x/g, function() {
1000 return random() < 0.5 ? '\u200C' : '\u200D'; // JWNJ / ZWJ
1001 });
1002 }
563e401a 1003
8b095871
IC
1004 // 19.4.1 The Symbol Constructor
1005 // 19.4.1.1 Symbol ( description=undefined )
1006 function Symbol(description) {
1007 if (!(this instanceof Symbol)) return new Symbol(description, secret);
1008 if (this instanceof Symbol && arguments[1] !== secret) throw TypeError();
563e401a 1009
8b095871
IC
1010 var descString = description === undefined ? undefined : String(description);
1011
1012 set_internal(this, '[[SymbolData]]', unique(128));
1013 set_internal(this, '[[Description]]', descString);
1014
1015 symbolMap[this] = this;
1016 return this;
1017 }
1018
1019 if (!('Symbol' in global) || OVERRIDE_NATIVE_FOR_TESTING)
1020 global.Symbol = Symbol;
1021
1022 // 19.4.2 Properties of the Symbol Constructor
1023
1024 // 19.4.2.1 Symbol.for (key)
1025 define(Symbol, 'for', function for_(key) {
1026 var stringKey = String(key);
1027 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
1028 var e = GlobalSymbolRegistry[i];
1029 if (SameValue(e['[[key]]'], stringKey)) return e['[[symbol]]'];
563e401a 1030 }
8b095871
IC
1031 var newSymbol = Symbol(key);
1032 GlobalSymbolRegistry.push({'[[key]]': stringKey, '[[symbol]]': newSymbol});
1033 return newSymbol;
1034 });
563e401a 1035
8b095871
IC
1036 // 19.4.2.2 Symbol.hasInstance
1037 // 19.4.2.3 Symbol.isConcatSpreadable
563e401a 1038
8b095871
IC
1039 // 19.4.2.4 Symbol.iterator
1040 define(global.Symbol, 'iterator', global.Symbol('Symbol.iterator'));
563e401a 1041
8b095871
IC
1042 // 19.4.2.5 Symbol.keyFor (sym)
1043 define(Symbol, 'keyFor', function keyFor(sym) {
1044 if (!(sym instanceof Symbol)) throw TypeError();
1045 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
1046 var e = GlobalSymbolRegistry[i];
1047 if (SameValue(e['[[symbol]]'], sym)) return e['[[key]]'];
1048 }
1049 return undefined;
1050 });
563e401a 1051
8b095871
IC
1052 // 19.4.2.6 Symbol.match
1053 define(global.Symbol, 'match', global.Symbol('Symbol.match'));
563e401a 1054
8b095871 1055 // 19.4.2.7 Symbol.prototype
563e401a 1056
8b095871
IC
1057 // 19.4.2.8 Symbol.replace
1058 define(global.Symbol, 'replace', global.Symbol('Symbol.replace'));
563e401a 1059
8b095871
IC
1060 // 19.4.2.9 Symbol.search
1061 define(global.Symbol, 'search', global.Symbol('Symbol.search'));
563e401a 1062
8b095871 1063 // 19.4.2.10 Symbol.species
563e401a 1064
8b095871
IC
1065 // 19.4.2.11 Symbol.search
1066 define(global.Symbol, 'split', global.Symbol('Symbol.split'));
563e401a 1067
8b095871 1068 // 19.4.2.12 Symbol.toPrimitive
563e401a 1069
8b095871
IC
1070 // 19.4.2.13 Symbol.toStringTag
1071 define(global.Symbol, 'toStringTag', global.Symbol('Symbol.toStringTag'));
1072
1073 // 19.4.2.14 Symbol.unscopables
1074
1075 // 19.4.3 Properties of the Symbol Prototype Object
1076 // 19.4.3.1 Symbol.prototype.constructor
1077
1078 // 19.4.3.2 Symbol.prototype.toString ( )
1079 Object.defineProperty(Symbol.prototype, 'toString', {
1080 value: function toString() {
1081 var s = strict(this);
1082 var desc = s['[[Description]]'];
1083 return 'Symbol(' + (desc === undefined ? '' : desc) + s['[[SymbolData]]'] + ')';
1084 },
1085 configurable: true, writeable: true, enumerable: false });
1086
1087 // 19.4.3.3 Symbol.prototype.valueOf ( )
1088 Object.defineProperty(Symbol.prototype, 'valueOf', {
1089 value: function valueOf() {
1090 // To prevent automatic string conversion:
1091 throw TypeError();
1092
1093 // Spec has approximately the following:
1094 //var s = strict(this);
1095 //if (Type(s) === 'symbol') return s;
1096 //if (Type(s) !== 'object') throw TypeError();
1097 //if (!('[[SymbolData]]' in s)) throw TypeError();
1098 //return s['[[SymbolData]]'];
1099 },
1100 configurable: true, writeable: true, enumerable: false });
1101
1102 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
1103 // (Done later to polyfill partial implementations)
1104
1105 // 19.4.4 Properties of Symbol Instances
1106 }());
1107
1108 console.assert(typeof global.Symbol() === 'symbol' || symbolForKey(String(global.Symbol('x'))));
1109
1110 // Defined here so that other prototypes can reference it
1111 // 25.1.2 The %IteratorPrototype% Object
1112 var $IteratorPrototype$ = {};
1113
1114 //----------------------------------------
1115 // 6 ECMAScript Data Types and Values
1116 //----------------------------------------
1117
1118 // 6.1 ECMAScript Language Types
1119
1120 // "Type(x)" is used as shorthand for "the type of x"...
1121 function Type(v) {
1122 switch (typeof v) {
1123 case 'undefined': return 'undefined';
1124 case 'boolean': return 'boolean';
1125 case 'number': return 'number';
1126 case 'string': return 'string';
1127 case 'symbol': return 'symbol';
1128 default:
1129 if (v === null) return 'null';
1130 if (v instanceof global.Symbol) return 'symbol';
1131 return 'object';
563e401a 1132 }
8b095871 1133 }
563e401a 1134
8b095871
IC
1135 // 6.1.5.1 Well-Known Symbols
1136 var $$iterator = global.Symbol.iterator,
1137 $$match = global.Symbol.match,
1138 $$replace = global.Symbol.replace,
1139 $$search = global.Symbol.search,
1140 $$split = global.Symbol.split,
1141 $$toStringTag = global.Symbol.toStringTag;
563e401a 1142
8b095871
IC
1143 //----------------------------------------
1144 // 7 Abstract Operations
1145 //----------------------------------------
1146
1147 //----------------------------------------
1148 // 7.1 Type Conversion
1149 //----------------------------------------
1150
1151 // 7.1.1 ToPrimitive ( input [, PreferredType] )
1152 // just use valueOf()
1153
1154 // 7.1.2 ToBoolean ( argument )
1155 // just use Boolean()
1156
1157 // 7.1.3 ToNumber ( argument )
1158 // just use Number()
1159
1160 // 7.1.4 ToInteger ( argument )
1161 function ToInteger(n) {
1162 n = Number(n);
1163 if ($isNaN(n)) return 0;
1164 if (n === 0 || n === Infinity || n === -Infinity) return n;
1165 return ((n < 0) ? -1 : 1) * floor(abs(n));
563e401a 1166 }
8b095871
IC
1167
1168 // 7.1.5 ToInt32 ( argument )
1169 function ToInt32(v) { return v >> 0; }
1170
1171 // 7.1.6 ToUint32 ( argument )
1172 function ToUint32(v) { return v >>> 0; }
1173
1174 // 7.1.7 ToInt16 ( argument )
1175 function ToInt16(v) { return (v << 16) >> 16; }
1176
1177 // 7.1.8 ToUint16 ( argument )
1178 function ToUint16(v) { return v & 0xFFFF; }
1179
1180 // 7.1.9 ToInt8 ( argument )
1181 function ToInt8(v) { return (v << 24) >> 24; }
1182
1183 // 7.1.10 ToUint8 ( argument )
1184 function ToUint8(v) { return v & 0xFF; }
1185
1186 // 7.1.11 ToUint8Clamp ( argument )
1187 function ToUint8Clamp(argument) {
1188 var number = Number(argument);
1189 if ($isNaN(number)) return 0;
1190 if (number <= 0) return 0;
1191 if (number >= 255) return 255;
1192 var f = floor(number);
1193 if ((f + 0.5) < number) return f + 1;
1194 if (number < (f + 0.5)) return f;
1195 if (f % 2) return f + 1;
1196 return f;
563e401a 1197 }
8b095871
IC
1198
1199 // 7.1.12 ToString ( argument )
1200 // just use String()
1201
1202 // 7.1.13 ToObject ( argument )
1203 function ToObject(v) {
1204 if (v === null || v === undefined) throw TypeError();
1205 return Object(v);
563e401a 1206 }
563e401a 1207
8b095871
IC
1208 // 7.1.14 ToPropertyKey ( argument )
1209 function ToPropertyKey(v) {
1210 return String(v);
1211 }
3af2954a 1212
8b095871
IC
1213 // 7.1.15 ToLength ( argument )
1214 function ToLength(v) {
1215 var len = ToInteger(v);
1216 if (len <= 0) return 0;
1217 if (len === Infinity) return 0x20000000000000 - 1; // 2^53-1
1218 return min(len, 0x20000000000000 - 1); // 2^53-1
ab78acc6 1219 }
3af2954a 1220
8b095871 1221 // 7.1.16 CanonicalNumericIndexString ( argument )
3af2954a 1222
8b095871
IC
1223 //----------------------------------------
1224 // 7.2 Testing and Comparison Operations
1225 //----------------------------------------
3af2954a 1226
8b095871
IC
1227 // 7.2.1 RequireObjectCoercible ( argument )
1228 // 7.2.2 IsArray ( argument )
3af2954a 1229
8b095871
IC
1230 // 7.2.3 IsCallable ( argument )
1231 function IsCallable(o) { return typeof o === 'function'; }
3af2954a 1232
8b095871
IC
1233 // 7.2.4 IsConstructor ( argument )
1234 function IsConstructor(o) {
1235 // Hacks for Safari 7 TypedArray XXXConstructor objects
1236 if (/Constructor/.test(Object.prototype.toString.call(o))) return true;
1237 if (/Function/.test(Object.prototype.toString.call(o))) return true;
1238 // TODO: Can this be improved on?
1239 return typeof o === 'function';
3af2954a 1240 }
8b095871
IC
1241
1242 // 7.2.5 IsExtensible (O)
1243 // 7.2.6 IsInteger ( argument )
1244
1245 // 7.2.7 IsPropertyKey ( argument )
1246 function IsPropertyKey(argument) {
1247 if (Type(argument) === 'string') return true;
1248 if (Type(argument) === 'symbol') return true;
1249 return false;
3af2954a
IC
1250 }
1251
8b095871
IC
1252 // 7.2.8 IsRegExp ( argument )
1253 // 7.2.5 IsConstructor ( argument )
3af2954a 1254
8b095871
IC
1255 // 7.2.9 SameValue(x, y)
1256 function SameValue(x, y) {
1257 if (typeof x !== typeof y) return false;
1258 switch (typeof x) {
1259 case 'undefined':
1260 return true;
1261 case 'number':
1262 if (x !== x && y !== y) return true;
1263 if (x === 0 && y === 0) return 1/x === 1/y;
1264 return x === y;
1265 case 'boolean':
1266 case 'string':
1267 case 'object':
1268 default:
1269 return x === y;
1270 }
1271 }
3af2954a 1272
8b095871
IC
1273 // 7.2.10 SameValueZero(x, y)
1274 function SameValueZero(x, y) {
1275 if (typeof x !== typeof y) return false;
1276 switch (typeof x) {
1277 case 'undefined':
1278 return true;
1279 case 'number':
1280 if (x !== x && y !== y) return true;
1281 return x === y;
1282 case 'boolean':
1283 case 'string':
1284 case 'object':
1285 default:
1286 return x === y;
1287 }
1288 }
3af2954a 1289
8b095871
IC
1290 //----------------------------------------
1291 // 7.3 Operations on Objects
1292 //----------------------------------------
3af2954a 1293
8b095871
IC
1294 // 7.3.1 Get (O, P)
1295 // - just use o.p or o[p]
3af2954a 1296
8b095871
IC
1297 // 7.3.2 GetV (V, P)
1298 function GetV(v, p) {
1299 var o = ToObject(v);
1300 return o[p];
1301 }
3af2954a 1302
8b095871
IC
1303 // 7.3.3 Set (O, P, V, Throw)
1304 // - just use o.p = v or o[p] = v
3af2954a 1305
3af2954a 1306
3af2954a 1307
3af2954a 1308
8b095871
IC
1309 // 7.3.9 GetMethod (O, P)
1310 function GetMethod(o, p) {
1311 var func = GetV(o, p);
1312 if (func === undefined || func === null) return undefined;
1313 if (!IsCallable(func)) throw TypeError();
1314 return func;
ab78acc6 1315 }
8b095871
IC
1316
1317 // 7.3.10 HasProperty (O, P)
1318 function HasProperty(o, p) {
1319 while (o) {
1320 if (Object.prototype.hasOwnProperty.call(o, p)) return true;
1321 if (Type(o) !== 'object') return false;
1322 o = Object.getPrototypeOf(o);
ab78acc6 1323 }
8b095871 1324 return false;
ab78acc6 1325 }
8b095871
IC
1326
1327 // 7.3.11 HasOwnProperty (O, P)
1328 function HasOwnProperty(o, p) {
1329 return Object.prototype.hasOwnProperty.call(o, p);
ab78acc6 1330 }
3af2954a 1331
8b095871
IC
1332 //----------------------------------------
1333 // 7.4 Operations on Iterator Objects
1334 //----------------------------------------
3af2954a 1335
8b095871
IC
1336 // 7.4.1 GetIterator ( obj, method )
1337 function GetIterator(obj, method) {
1338 if (arguments.length < 2)
1339 method = GetMethod(obj, $$iterator);
1340 var iterator = method.call(obj);
1341 if (Type(iterator) !== 'object') throw TypeError();
1342 return iterator;
3af2954a
IC
1343 }
1344
8b095871
IC
1345 // 7.4.2 IteratorNext ( iterator, value )
1346 function IteratorNext(iterator, value) {
1347 if (arguments.length < 2)
1348 var result = iterator.next();
1349 else
1350 result = iterator.next(value);
1351 if (Type(result) !== 'object') throw TypeError();
1352 return result;
1353 }
3af2954a 1354
8b095871
IC
1355 // 7.4.3 IteratorComplete ( iterResult )
1356 function IteratorComplete(iterResult) {
1357 console.assert(Type(iterResult) === 'object');
1358 return Boolean(iterResult.done);
1359 }
3af2954a 1360
8b095871
IC
1361 // 7.4.4 IteratorValue ( iterResult )
1362 function IteratorValue(iterResult) {
1363 console.assert(Type(iterResult) === 'object');
1364 return iterResult.value;
1365 }
1366
1367 // 7.4.5 IteratorStep ( iterator )
1368 function IteratorStep( iterator, value ) {
1369 var result = IteratorNext(iterator, value);
1370 var done = result['done'];
1371 if (Boolean(done) === true) return false;
1372 return result;
1373 }
1374
1375 // 7.4.6 IteratorClose( iterator, completion )
1376 function IteratorClose( iterator, completion ) {
1377 console.assert(Type(iterator) === 'object');
1378 var _return = GetMethod(iterator, 'return');
1379 if (_return === undefined) return completion;
1380 try {
1381 var innerResult = _return[iterator]();
1382 } catch (result) {
1383 // TODO: If completion.[[type]] is throw, return completion
1384 return result;
1385 }
1386 if (Type(innerResult) !== 'object') throw TypeError();
1387 return completion;
1388 }
1389
1390 // 7.4.7 CreateIterResultObject (value, done)
1391 function CreateIterResultObject(value, done) {
1392 console.assert(Type(done) === 'boolean');
1393 var obj = {};
1394 obj["value"] = value;
1395 obj["done"] = done;
1396 return obj;
1397 }
1398
1399 // 7.4.8 CreateListIterator (list)
1400 // 7.4.8.1 ListIterator next( )
1401 // 7.4.9 CreateCompoundIterator ( iterator1, iterator2 )
1402 // 7.4.9.1 CompoundIterator next( )
1403
1404 //----------------------------------------
1405 // 8 Executable Code and Execution Contexts
1406 //----------------------------------------
1407
1408 //----------------------------------------
1409 // 8.4 Jobs and Job Queues
1410 //----------------------------------------
1411
1412 // 8.4.1 EnqueueJob ( queueName, job, arguments)
1413 function EnqueueJob(queueName, job, args) {
1414 var fn = function() { job.apply(undefined, args); };
1415 enqueue(fn);
1416 }
1417
1418 // 8.4.2 NextJob result
1419 function NextJob(result) {
1420 // no-op
1421 }
1422
1423 //----------------------------------------
1424 // 9 Ordinary and Exotic Objects Behaviors
1425 //----------------------------------------
1426
1427 // 9.1.11 [[Enumerate]] ()
1428 function Enumerate(obj) {
1429 var e = [];
1430 if (Object(obj) !== obj) return e;
1431 var visited = new Set;
1432 while (obj !== null) {
1433 Object.getOwnPropertyNames(obj).forEach(function(name) {
1434 if (!visited.has(name)) {
1435 var desc = Object.getOwnPropertyDescriptor(obj, name);
1436 if (desc) {
1437 visited.add(name);
1438 if (desc.enumerable) e.push(name);
1439 }
1440 }
1441 });
1442 obj = Object.getPrototypeOf(obj);
1443 }
1444 return e[$$iterator]();
1445 }
1446
1447 // 9.1.12 [[OwnPropertyKeys]] ( )
1448 function OwnPropertyKeys(o) {
1449 return Object.getOwnPropertyNames(o);
1450 }
1451
1452 // 9.1.13 ObjectCreate(proto, internalSlotsList)
1453 function ObjectCreate(proto, internalSlotsList) {
1454 return Object.create(proto, internalSlotsList);
1455 }
1456
1457 // ---------------------------------------
1458 // 19 Fundamental Objects
1459 // ---------------------------------------
1460
1461 // ---------------------------------------
1462 // 19.1 Object Objects
1463 // ---------------------------------------
1464
1465 // 19.1.1 The Object Constructor
1466 // 19.1.1.1 Object ( [ value ] )
1467 // 19.1.2 Properties of the Object Constructor
1468 // 19.1.2.1 Object.assign ( target, ...sources )
1469 define(
1470 Object, 'assign',
1471 function assign(target, /*...*/sources) {
1472 var to = ToObject(target);
1473 if (arguments.length < 2) return to;
1474
1475 var sourcesIndex = 1;
1476 while (sourcesIndex < arguments.length) {
1477 var nextSource = arguments[sourcesIndex++];
1478 if (nextSource === undefined || nextSource === null) {
1479 var keys = [];
1480 } else {
1481 var from = ToObject(nextSource);
1482 keys = OwnPropertyKeys(from);
1483 }
1484 for (var keysIndex = 0; keysIndex < keys.length; ++keysIndex) {
1485 var nextKey = keys[keysIndex];
1486 var desc = Object.getOwnPropertyDescriptor(from, nextKey);
1487 if (desc !== undefined && desc.enumerable) {
1488 var propValue = from[nextKey];
1489 to[nextKey] = propValue;
1490 }
1491 }
1492 }
1493 return to;
1494 });
1495
1496 // 19.1.2.2 Object.create ( O [ , Properties ] )
1497 // 19.1.2.3 Object.defineProperties ( O, Properties )
1498 // 19.1.2.4 Object.defineProperty ( O, P, Attributes )
1499 // 19.1.2.5 Object.freeze ( O )
1500 // 19.1.2.6 Object.getOwnPropertyDescriptor ( O, P )
1501
1502 (function() {
1503 var nativeSymbols = (typeof global.Symbol() === 'symbol'),
1504 $getOwnPropertyNames = Object.getOwnPropertyNames,
1505 $keys = Object.keys,
1506 $window_names = (typeof window === 'object' ? $getOwnPropertyNames(window) : []);
1507
1508 function isStringKey(k) { return !symbolForKey(k); }
1509
1510 // 19.1.2.7 Object.getOwnPropertyNames ( O )
1511 define(
1512 Object, 'getOwnPropertyNames',
1513 function getOwnPropertyNames(o) {
1514 if (Object.prototype.toString.call(o) === '[object Window]') {
1515 // Workaround for cross-realm calling by IE itself.
1516 // https://github.com/inexorabletash/polyfill/issues/96
1517 try {
1518 return $getOwnPropertyNames(o).filter(isStringKey);
1519 } catch (_) {
1520 return $window_names.slice();
1521 }
1522 }
1523 return $getOwnPropertyNames(o).filter(isStringKey);
1524 }, !nativeSymbols);
1525
1526 // 19.1.2.8 Object.getOwnPropertySymbols ( O )
1527 define(
1528 Object, 'getOwnPropertySymbols',
1529 function getOwnPropertySymbols(o) {
1530 return $getOwnPropertyNames(o).filter(symbolForKey).map(symbolForKey);
1531 }, !nativeSymbols);
1532
1533 // 19.1.2.14 Object.keys ( O )
1534 define(
1535 Object, 'keys',
1536 function keys(o) {
1537 return $keys(o).filter(isStringKey);
1538 }, !nativeSymbols);
1539 }());
1540
1541 // 19.1.2.9 Object.getPrototypeOf ( O )
1542 // 19.1.2.10 Object.is ( value1, value2 )
1543 define(
1544 Object, 'is',
1545 function is(value1, value2) {
1546 return SameValue(value1, value2);
1547 });
1548
1549 // 19.1.2.11 Object.isExtensible ( O )
1550 // 19.1.2.12 Object.isFrozen ( O )
1551 // 19.1.2.13 Object.isSealed ( O )
1552
1553 // 19.1.2.14 Object.keys ( O )
1554 // see above
1555
1556 // 19.1.2.15 Object.preventExtensions ( O )
1557 // 19.1.2.16 Object.prototype
1558 // 19.1.2.17 Object.seal ( O )
1559
1560 // 19.1.2.18 Object.setPrototypeOf ( O, proto )
1561 define(
1562 Object, 'setPrototypeOf',
1563 function setPrototypeOf(o, proto) {
1564 if (Type(o) !== 'object') throw TypeError();
1565 if (Type(proto) !== 'object' && Type(proto) !== 'null') throw TypeError();
1566 o.__proto__ = proto;
1567 return o;
1568 }
1569 );
1570
1571 // 19.1.3 Properties of the Object Prototype Object
1572 // 19.1.3.1 Object.prototype.constructor
1573 // 19.1.3.2 Object.prototype.hasOwnProperty ( V )
1574 // 19.1.3.3 Object.prototype.isPrototypeOf ( V )
1575 // 19.1.3.4 Object.prototype.propertyIsEnumerable ( V )
1576 // 19.1.3.5 Object.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
1577 // 19.1.3.6 Object.prototype.toString ( )
1578 hook(Object.prototype, 'toString',
1579 function() {
1580 var o = strict(this);
1581 if (o === Object(o) && $$toStringTag in o) {
1582 return '[object ' + o[$$toStringTag] + ']';
1583 }
1584 return undefined;
1585 });
1586
1587 // 19.1.3.7 Object.prototype.valueOf ( )
1588 // 19.1.4 Properties of Object Instances
1589
1590 // ---------------------------------------
1591 // 19.2 Function Objects
1592 // ---------------------------------------
1593
1594 // 19.2.1 The Function Constructor
1595 // 19.2.1.1 Function ( p1, p2, … , pn, body )
1596 // 19.2.2 Properties of the Function Constructor
1597 // 19.2.2.1 Function.length
1598 // 19.2.2.2 Function.prototype
1599 // 19.2.3 Properties of the Function Prototype Object
1600 // 19.2.3.1 Function.prototype.apply ( thisArg, argArray )
1601 // 19.2.3.2 Function.prototype.bind ( thisArg , ...args)
1602 // 19.2.3.3 Function.prototype.call (thisArg , ...args)
1603 // 19.2.3.4 Function.prototype.constructor
1604 // 19.2.3.5 Function.prototype.toString ( )
1605 // 19.2.3.6 Function.prototype[@@hasInstance] ( V )
1606 // 19.2.4 Function Instances
1607 // 19.2.4.1 length
1608 // 19.2.4.2 name
1609 // 19.2.4.3 prototype
1610
1611 // (No polyfillable changes from ES5)
1612
1613 // ---------------------------------------
1614 // 19.3 Boolean Objects
1615 // ---------------------------------------
1616
1617 // 19.3.1 The Boolean Constructor
1618 // 19.3.1.1 Boolean ( value )
1619 // 19.3.2 Properties of the Boolean Constructor
1620 // 19.3.2.1 Boolean.prototype
1621 // 19.3.3 Properties of the Boolean Prototype Object
1622 // 19.3.3.1 Boolean.prototype.constructor
1623 // 19.3.3.2 Boolean.prototype.toString ( )
1624 // 19.3.3.3 Boolean.prototype.valueOf ( )
1625 // 19.3.4 Properties of Boolean Instances
1626
1627 // (No polyfillable changes from ES5)
1628
1629 // ---------------------------------------
1630 // 19.4 Symbol Objects
1631 // ---------------------------------------
1632
1633 // Moved earlier in this script, so that other polyfills can depend on them.
1634
1635 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
1636 define(global.Symbol.prototype, global.Symbol.toStringTag, 'Symbol');
1637
1638 // ---------------------------------------
1639 // 19.5 Error Objects
1640 // ---------------------------------------
1641
1642 // 19.5.1 The Error Constructor
1643 // 19.5.1.1 Error ( message )
1644 // 19.5.1.2 new Error( ...argumentsList )
1645 // 19.5.2 Properties of the Error Constructor
1646 // 19.5.2.1 Error.prototype
1647 // 19.5.3 Properties of the Error Prototype Object
1648 // 19.5.3.1 Error.prototype.constructor
1649 // 19.5.3.2 Error.prototype.message
1650 // 19.5.3.3 Error.prototype.name
1651 // 19.5.3.4 Error.prototype.toString ( )
1652 // 19.5.4 Properties of Error Instances
1653 // 19.5.5 Native Error Types Used in This Standard
1654 // 19.5.5.1 EvalError
1655 // 19.5.5.2 RangeError
1656 // 19.5.5.3 ReferenceError
1657 // 19.5.5.4 SyntaxError
1658 // 19.5.5.5 TypeError
1659 // 19.5.5.6 URIError
1660 // 19.5.6 NativeError Object Structure
1661 // 19.5.6.1 NativeError Constructors
1662 // 19.5.6.1.1 NativeError ( message )
1663 // 19.5.6.1.2 new NativeError ( ...argumentsList )
1664 // 19.5.6.2 Properties of the NativeError Constructors
1665 // 19.5.6.2.1 NativeError.prototype
1666 // 19.5.6.3 Properties of the NativeError Prototype Objects
1667 // 19.5.6.4 Properties of NativeError Instances
1668
1669 // (No polyfillable changes from ES5)
1670
1671 // ---------------------------------------
1672 // 20 Numbers and Dates
1673 // ---------------------------------------
1674
1675 // ---------------------------------------
1676 // 20.1 Number Objects
1677 // ---------------------------------------
1678
1679 // 20.1.1 The Number Constructor
1680 // 20.1.1.1 Number ( [ value ] )
1681 // 20.1.1.2 new Number ( ...argumentsList )
1682 // 20.1.2 Properties of the Number Constructor
1683
1684 // 20.1.2.1 Number.EPSILON
1685 define(
1686 Number, 'EPSILON',
1687 (function () {
1688 var next, result;
1689 for (next = 1; 1 + next !== 1; next = next / 2)
1690 result = next;
1691 return result;
1692 }()));
1693
1694 // 20.1.2.2 Number.isFinite ( number )
1695 define(
1696 Number, 'isFinite',
1697 function isFinite(number) {
1698 if (Type(number) !== 'number') return false;
1699 if (number !== number || number === +Infinity || number === -Infinity) return false;
1700 return true;
1701 });
1702
1703 // 20.1.2.3 Number.isInteger ( number )
1704 define(
1705 Number, 'isInteger',
1706 function isInteger(number) {
1707 if (Type(number) !== 'number') return false;
1708 if (number !== number || number === +Infinity || number === -Infinity) return false;
1709 var integer = ToInteger(number);
1710 if (integer !== number) return false;
1711 return true;
1712 });
1713
1714 // 20.1.2.4 Number.isNaN ( number )
1715 define(
1716 Number, 'isNaN',
1717 function isNaN(number) {
1718 if (Type(number) !== 'number') return false;
1719 if (number !== number) return true;
1720 return false;
1721 });
1722
1723 // 20.1.2.5 Number.isSafeInteger ( number )
1724 define(
1725 Number, 'isSafeInteger',
1726 function isSafeInteger(number) {
1727 if (Type(number) !== 'number') return false;
1728 if (number !== number || number === +Infinity || number === -Infinity) return false;
1729 var integer = ToInteger(number);
1730 if (integer !== number) return false;
1731 if (abs(integer) <= (0x20000000000000 - 1)) // 2^53-1
1732 return true;
1733 return false;
1734 });
1735
1736 // 20.1.2.6 Number.MAX_SAFE_INTEGER
1737 define(
1738 Number, 'MAX_SAFE_INTEGER',
1739 9007199254740991); // 2^53-1
1740
1741 // 20.1.2.7 Number.MAX_VALUE
1742
1743 // 20.1.2.8 Number.MIN_SAFE_INTEGER
1744 define(
1745 Number, 'MIN_SAFE_INTEGER',
1746 -9007199254740991); // -2^53+1
1747
1748 // 20.1.2.9 Number.MIN_VALUE
1749 // 20.1.2.10 Number.NaN
1750 // 20.1.2.11 Number.NEGATIVE_INFINITY
1751
1752 // 20.1.2.12 Number.parseFloat ( string )
1753 define(Number, 'parseFloat', $parseFloat);
1754
1755 // 20.1.2.13 Number.parseInt ( string, radix )
1756 define(Number, 'parseInt', $parseInt);
1757
1758 // 20.1.2.14 Number.POSITIVE_INFINITY
1759 // 20.1.2.15 Number.prototype
1760
1761 // 20.1.3 Properties of the Number Prototype Object
1762 // 20.1.3.1 Number.prototype.constructor
1763 // 20.1.3.2 Number.prototype.toExponential ( fractionDigits )
1764 // 20.1.3.3 Number.prototype.toFixed ( fractionDigits )
1765 // 20.1.3.4 Number.prototype.toLocaleString( [ reserved1 [ , reserved2 ] ])
1766 // 20.1.3.5 Number.prototype.toPrecision ( precision )
1767 // 20.1.3.6 Number.prototype.toString ( [ radix ] )
1768 // 20.1.3.7 Number.prototype.valueOf ( )
1769 // 20.1.4 Properties of Number Instances
1770
1771 // ---------------------------------------
1772 // 20.2 The Math Object
1773 // ---------------------------------------
1774
1775 // 20.2.1 Value Properties of the Math Object
1776 // 20.2.1.1 Math.E
1777 // 20.2.1.2 Math.LN10
1778 // 20.2.1.3 Math.LN2
1779 // 20.2.1.4 Math.LOG10E
1780 // 20.2.1.5 Math.LOG2E
1781 // 20.2.1.6 Math.PI
1782 // 20.2.1.7 Math.SQRT1_2
1783 // 20.2.1.8 Math.SQRT2
1784
1785 // 20.2.1.9 Math [ @@toStringTag ]
1786 define(Math, $$toStringTag, 'Math');
1787
1788 // 20.2.2 Function Properties of the Math Object
1789 // 20.2.2.1 Math.abs ( x )
1790 // 20.2.2.2 Math.acos ( x )
1791
1792 // 20.2.2.3 Math.acosh(x)
1793 define(
1794 Math, 'acosh',
1795 function acosh(x) {
1796 x = Number(x);
1797 return log(x + sqrt(x * x - 1));
1798 });
1799
1800 // 20.2.2.4 Math.asin ( x )
1801
1802 // 20.2.2.5 Math.asinh( x )
1803 define(
1804 Math, 'asinh',
1805 function asinh(x) {
1806 x = Number(x);
1807 if (SameValue(x, -0)) {
1808 return x;
1809 }
1810 var s = sqrt(x * x + 1);
1811 return (s === -x) ? log(0) : log(x + s);
1812 });
1813
1814 // 20.2.2.6 Math.atan ( x )
1815
1816 // 20.2.2.7 Math.atanh( x )
1817 define(
1818 Math, 'atanh',
1819 function atanh(x) {
1820 x = Number(x);
1821 return (x === 0) ? x : log((1 + x) / (1 - x)) / 2;
1822 });
1823
1824 // 20.2.2.8 Math.atan2 ( y, x )
1825
1826 // 20.2.2.9 Math.cbrt ( x )
1827 define(
1828 Math, 'cbrt',
1829 function cbrt(x) {
1830 x = Number(x);
1831 if ($isNaN(x/x)) {
1832 return x;
1833 }
1834 var r = pow(abs(x), 1/3);
1835 var t = x/r/r;
1836 return r + (r * (t-r) / (2*r + t));
1837 });
1838
1839 // 20.2.2.10 Math.ceil ( x )
1840
1841 // 20.2.2.11 Math.clz32 ( x )
1842 define(
1843 Math, 'clz32',
1844 function clz32(x) {
1845 function clz8(x) {
1846 return (x & 0xf0) ? (x & 0x80 ? 0 : x & 0x40 ? 1 : x & 0x20 ? 2 : 3) :
1847 (x & 0x08 ? 4 : x & 0x04 ? 5 : x & 0x02 ? 6 : x & 0x01 ? 7 : 8);
1848 }
1849 x = ToUint32(x);
1850 return x & 0xff000000 ? clz8(x >> 24) :
1851 x & 0xff0000 ? clz8(x >> 16) + 8 :
1852 x & 0xff00 ? clz8(x >> 8) + 16 : clz8(x) + 24;
1853 });
1854
1855
1856
1857 // 20.2.2.12 Math.cos ( x )
1858
1859 // 20.2.2.13 Math.cosh ( x )
1860 define(
1861 Math, 'cosh',
1862 function cosh(x) {
1863 x = Number(x);
1864 return (pow(E, x) + pow(E, -x)) / 2;
1865 });
1866
1867 // 20.2.2.14 Math.exp ( x )
1868
1869 // 20.2.2.15 Math.expm1 ( x )
1870 define(
1871 Math, 'expm1',
1872 function expm1(x) {
1873 x = Number(x);
1874 // from: http://www.johndcook.com/cpp_log1p.html
1875 if (SameValue(x, -0)) {
1876 return -0;
1877 } else if (abs(x) < 1e-5) {
1878 return x + 0.5 * x * x; // two terms of Taylor expansion
1879 } else {
1880 return exp(x) - 1;
1881 }
1882 });
1883
1884 // 20.2.2.16 Math.floor ( x )
1885
1886 // 20.2.2.17 Math.fround ( x )
1887 define(
1888 Math, 'fround',
1889 function fround(x) {
1890 if ($isNaN(x)) {
1891 return NaN;
1892 }
1893 if (1/x === +Infinity || 1/x === -Infinity || x === +Infinity || x === -Infinity) {
1894 return x;
1895 }
1896 return (new Float32Array([x]))[0];
1897 });
1898
1899 // 20.2.2.18 Math.hypot ( value1 [, value2 [ ... ] ] )
1900 define(
1901 Math, 'hypot',
1902 function hypot() {
1903 var values = [];
1904 var m = 0, sawNaN = false;
1905 for (var i = 0; i < arguments.length; ++i) {
1906 var n = abs(Number(arguments[i]));
1907 if (n === Infinity) return n;
1908 if (n !== n) sawNaN = true;
1909 if (n > m) m = n;
1910 values[i] = n;
1911 }
1912 if (sawNaN) return NaN;
1913 if (m === 0) return +0;
1914 var sum = +0;
1915 for (i = 0; i < values.length; ++i) {
1916 var r = values[i] / m;
1917 sum = sum + r * r;
1918 }
1919 return m * sqrt(sum);
1920 });
1921
1922 // 20.2.2.19 Math.imul ( x, y )
1923 define(
1924 Math, 'imul',
1925 function imul(x, y) {
1926 var a = ToUint32(x);
1927 var b = ToUint32(y);
1928 // (slow but accurate)
1929 var ah = (a >>> 16) & 0xffff;
1930 var al = a & 0xffff;
1931 var bh = (b >>> 16) & 0xffff;
1932 var bl = b & 0xffff;
1933 return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0)|0);
1934 }, ('imul' in Math && Math.imul(1, 0x80000000) === 0) // Safari 7 bug
1935 );
1936
1937 // 20.2.2.20 Math.log ( x )
1938
1939 // 20.2.2.21 Math.log1p ( x )
1940 define(
1941 Math, 'log1p',
1942 function log1p(x) {
1943 x = Number(x);
1944 // from: http://www.johndcook.com/cpp_expm1.html
1945 if (x < -1) {
1946 return NaN;
1947 } else if (SameValue(x, -0)) {
1948 return -0;
1949 } else if (abs(x) > 1e-4) {
1950 return log(1 + x);
1951 } else {
1952 return (-0.5 * x + 1) * x;
1953 }
1954 });
1955
1956 // 20.2.2.22 Math.log10 ( x )
1957 define(
1958 Math, 'log10',
1959 function log10(x) {
1960 x = Number(x);
1961 return log(x) * LOG10E;
1962 });
1963
1964 // 20.2.2.23 Math.log2 ( x )
1965 define(
1966 Math, 'log2',
1967 function log2(x) {
1968 x = Number(x);
1969 return log(x) * LOG2E;
1970 });
1971
1972 // 20.2.2.24 Math.max ( value1, value2 , ...values )
1973 // 20.2.2.25 Math.min ( value1, value2 , ...values )
1974 // 20.2.2.26 Math.pow ( x, y )
1975 // 20.2.2.27 Math.random ( )
1976 // 20.2.2.28 Math.round ( x )
1977
1978 // 20.2.2.29 Math.sign(x)
1979 define(
1980 Math, 'sign',
1981 function sign(x) {
1982 x = Number(x);
1983 return x < 0 ? -1 : x > 0 ? 1 : x;
1984 });
1985
1986 // 20.2.2.30 Math.sin ( x )
1987
1988 // 20.2.2.31 Math.sinh( x )
1989 define(
1990 Math, 'sinh',
1991 function sinh(x) {
1992 x = Number(x);
1993 return SameValue(x, -0) ? x : (pow(E, x) - pow(E, -x)) / 2;
1994 });
1995
1996 // 20.2.2.32 Math.sqrt ( x )
1997 // 20.2.2.33 Math.tan ( x )
1998
1999 // 20.2.2.34 Math.tanh ( x )
2000 define(
2001 Math, 'tanh',
2002 function tanh(x) {
2003 x = Number(x);
2004 var n = pow(E, 2 * x) - 1,
2005 d = pow(E, 2 * x) + 1;
2006 if (SameValue(x, -0))
2007 return x;
2008 return (n === d) ? 1 : n / d; // Handle Infinity/Infinity
2009 });
2010
2011 // 20.2.2.35 Math.trunc ( x )
2012 define(
2013 Math, 'trunc',
2014 function trunc(x) {
2015 x = Number(x);
2016 return $isNaN(x) ? NaN :
2017 x < 0 ? ceil(x) : floor(x);
2018 });
2019
2020 // ---------------------------------------
2021 // 20.3 Date Objects
2022 // ---------------------------------------
2023
2024 // 20.3.1 Overview of Date Objects and Definitions of Abstract Operations
2025 // 20.3.1.1 Time Values and Time Range
2026 // 20.3.1.2 Day Number and Time within Day
2027 // 20.3.1.3 Year Number
2028 // 20.3.1.4 Month Number
2029 // 20.3.1.5 Date Number
2030 // 20.3.1.6 Week Day
2031 // 20.3.1.7 Local Time Zone Adjustment
2032 // 20.3.1.8 Daylight Saving Time Adjustment
2033 // 20.3.1.9 Local Time
2034 // 20.3.1.10 Hours, Minutes, Second, and Milliseconds
2035 // 20.3.1.11 MakeTime (hour, min, sec, ms)
2036 // 20.3.1.12 MakeDay (year, month, date)
2037 // 20.3.1.13 MakeDate (day, time)
2038 // 20.3.1.14 TimeClip (time)
2039 // 20.3.1.15 Date Time String Format
2040 // 20.3.1.15.1 Extended years
2041 // 20.3.2 The Date Constructor
2042 // 20.3.2.1 Date ( year, month [, date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
2043 // 20.3.2.2 Date ( value )
2044 // 20.3.2.3 Date ( )
2045 // 20.3.3 Properties of the Date Constructor
2046 // 20.3.3.1 Date.now ( )
2047 // 20.3.3.2 Date.parse (string)
2048 // 20.3.3.3 Date.prototype
2049 // 20.3.3.4 Date.UTC ( year, month [ , date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
2050 // 20.3.4 Properties of the Date Prototype Object
2051 // 20.3.4.1 Date.prototype.constructor
2052 // 20.3.4.2 Date.prototype.getDate ( )
2053 // 20.3.4.3 Date.prototype.getDay ( )
2054 // 20.3.4.4 Date.prototype.getFullYear ( )
2055 // 20.3.4.5 Date.prototype.getHours ( )
2056 // 20.3.4.6 Date.prototype.getMilliseconds ( )
2057 // 20.3.4.7 Date.prototype.getMinutes ( )
2058 // 20.3.4.8 Date.prototype.getMonth ( )
2059 // 20.3.4.9 Date.prototype.getSeconds ( )
2060 // 20.3.4.10 Date.prototype.getTime ( )
2061 // 20.3.4.11 Date.prototype.getTimezoneOffset ( )
2062 // 20.3.4.12 Date.prototype.getUTCDate ( )
2063 // 20.3.4.13 Date.prototype.getUTCDay ( )
2064 // 20.3.4.14 Date.prototype.getUTCFullYear ( )
2065 // 20.3.4.15 Date.prototype.getUTCHours ( )
2066 // 20.3.4.16 Date.prototype.getUTCMilliseconds ( )
2067 // 20.3.4.17 Date.prototype.getUTCMinutes ( )
2068 // 20.3.4.18 Date.prototype.getUTCMonth ( )
2069 // 20.3.4.19 Date.prototype.getUTCSeconds ( )
2070 // 20.3.4.20 Date.prototype.setDate ( date )
2071 // 20.3.4.21 Date.prototype.setFullYear ( year [ , month [ , date ] ] )
2072 // 20.3.4.22 Date.prototype.setHours ( hour [ , min [ , sec [ , ms ] ] ] )
2073 // 20.3.4.23 Date.prototype.setMilliseconds ( ms )
2074 // 20.3.4.24 Date.prototype.setMinutes ( min [ , sec [ , ms ] ] )
2075 // 20.3.4.25 Date.prototype.setMonth ( month [ , date ] )
2076 // 20.3.4.26 Date.prototype.setSeconds ( sec [ , ms ] )
2077 // 20.3.4.27 Date.prototype.setTime ( time )
2078 // 20.3.4.28 Date.prototype.setUTCDate ( date )
2079 // 20.3.4.29 Date.prototype.setUTCFullYear ( year [ , month [ , date ] ] )
2080 // 20.3.4.30 Date.prototype.setUTCHours ( hour [ , min [ , sec [ , ms ] ] ] )
2081 // 20.3.4.31 Date.prototype.setUTCMilliseconds ( ms )
2082 // 20.3.4.32 Date.prototype.setUTCMinutes ( min [ , sec [, ms ] ] )
2083 // 20.3.4.33 Date.prototype.setUTCMonth ( month [ , date ] )
2084 // 20.3.4.34 Date.prototype.setUTCSeconds ( sec [ , ms ] )
2085 // 20.3.4.35 Date.prototype.toDateString ( )
2086 // 20.3.4.36 Date.prototype.toISOString ( )
2087 // 20.3.4.37 Date.prototype.toJSON ( key )
2088 // 20.3.4.38 Date.prototype.toLocaleDateString ( [ reserved1 [ , reserved2 ] ] )
2089 // 20.3.4.39 Date.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
2090 // 20.3.4.40 Date.prototype.toLocaleTimeString ( [ reserved1 [ , reserved2 ] ] )
2091 // 20.3.4.41 Date.prototype.toString ( )
2092 // 20.3.4.42 Date.prototype.toTimeString ( )
2093 // 20.3.4.43 Date.prototype.toUTCString ( )
2094 // 20.3.4.44 Date.prototype.valueOf ( )
2095 // 20.3.4.45 Date.prototype [ @@toPrimitive ] ( hint )
2096 // 20.3.5 Properties of Date Instances
2097
2098 // (No polyfillable changes from ES5)
2099
2100 // ---------------------------------------
2101 // 21 Text Processing
2102 // ---------------------------------------
2103
2104 var string_regexp_dispatch = (function() {
2105 var faux = {}, secret = Symbol();
2106 faux[Symbol.match] = function() { return secret; };
2107 return ("").match(faux) === secret;
2108 }());
2109
2110 // 21.1 String Objects
2111 // 21.1.1 The String Constructor
2112 // 21.1.1.1 String ( value )
2113 // 21.1.2 Properties of the String Constructor
2114 // 21.1.2.1 String.fromCharCode ( ...codeUnits )
2115
2116 // 21.1.2.2 String.fromCodePoint ( ...codePoints )
2117 define(
2118 String, 'fromCodePoint',
2119 function fromCodePoint(/*...codePoints*/) {
2120 var codePoints = arguments,
2121 length = codePoints.length,
2122 elements = [],
2123 nextIndex = 0;
2124 while (nextIndex < length) {
2125 var next = codePoints[nextIndex];
2126 var nextCP = Number(next);
2127 if (!SameValue(nextCP, ToInteger(nextCP)) ||
2128 nextCP < 0 || nextCP > 0x10FFFF) {
2129 throw RangeError('Invalid code point ' + nextCP);
2130 }
2131 if (nextCP < 0x10000) {
2132 elements.push(String.fromCharCode(nextCP));
2133 } else {
2134 nextCP -= 0x10000;
2135 elements.push(String.fromCharCode((nextCP >> 10) + 0xD800));
2136 elements.push(String.fromCharCode((nextCP % 0x400) + 0xDC00));
2137 }
2138 nextIndex += 1;
2139 }
2140 return elements.join('');
2141 });
2142
2143 // 21.1.2.3 String.prototype
2144
2145 // 21.1.2.4 String.raw ( template , ...substitutions )
2146 define(
2147 String, 'raw',
2148 function raw(template /*, ...substitutions*/) {
2149 var substitutions = [].slice.call(arguments, 1);
2150
2151 var cooked = Object(template);
2152 var rawValue = cooked['raw'];
2153 var raw = Object(rawValue);
2154 var len = raw['length'];
2155 var literalSegments = ToLength(len);
2156 if (literalSegments <= 0) return '';
2157 var stringElements = [];
2158 var nextIndex = 0;
2159 while (true) {
2160 var next = raw[nextIndex];
2161 var nextSeg = String(next);
2162 stringElements.push(nextSeg);
2163 if (nextIndex + 1 === literalSegments)
2164 return stringElements.join('');
2165 next = substitutions[nextIndex];
2166 var nextSub = String(next);
2167 stringElements.push(nextSub);
2168 nextIndex = nextIndex + 1;
2169 }
2170 });
2171
2172 // See https://githib.com/inexorabletash/uate for a more useful version.
2173
2174 // 21.1.3 Properties of the String Prototype Object
2175 // 21.1.3.1 String.prototype.charAt ( pos )
2176 // 21.1.3.2 String.prototype.charCodeAt ( pos )
2177
2178 // 21.1.3.3 String.prototype.codePointAt ( pos )
2179 define(
2180 String.prototype, 'codePointAt',
2181 function codePointAt(pos) {
2182 var o = strict(this);
2183 var s = String(o);
2184 var position = ToInteger(pos);
2185 var size = s.length;
2186 if (position < 0 || position >= size) return undefined;
2187 var first = s.charCodeAt(position);
2188 if (first < 0xD800 || first > 0xDBFF || position + 1 === size) return first;
2189 var second = s.charCodeAt(position + 1);
2190 if (second < 0xDC00 || second > 0xDFFF) return first;
2191 return ((first - 0xD800) * 1024) + (second - 0xDC00) + 0x10000;
2192 });
2193
2194 // 21.1.3.4 String.prototype.concat ( ...args )
2195 // 21.1.3.5 String.prototype.constructor
2196
2197 // 21.1.3.6 String.prototype.endsWith ( searchString [ , endPosition] )
2198 define(
2199 String.prototype, 'endsWith',
2200 function endsWith(searchString) {
2201 var endPosition = arguments[1];
2202
2203 var o = strict(this);
2204 var s = String(o);
2205 var searchStr = String(searchString);
2206 var len = s.length;
2207 var pos = (endPosition === undefined) ? len : ToInteger(endPosition);
2208 var end = min(max(pos, 0), len);
2209 var searchLength = searchStr.length;
2210 var start = end - searchLength;
2211 if (start < 0) return false;
2212 if (s.substring(start, start + searchLength) === searchStr) return true;
2213 return false;
2214 });
2215
2216 // 21.1.3.7 String.prototype.includes ( searchString [ , position ] )
2217 define(
2218 String.prototype, 'includes',
2219 function includes(searchString) {
2220 var position = arguments[1];
2221
2222 var o = strict(this);
2223 var s = String(o);
2224 var searchStr = String(searchString);
2225 var pos = ToInteger(position);
2226 var len = s.length;
2227 var start = min(max(pos, 0), len);
2228 return s.indexOf(searchStr, start) !== -1;
2229 });
2230
2231 // 21.1.3.8 String.prototype.indexOf ( searchString [ , position ] )
2232 // 21.1.3.9 String.prototype.lastIndexOf ( searchString [ , position ] )
2233 // 21.1.3.10 String.prototype.localeCompare ( that [, reserved1 [ , reserved2 ] ] )
2234 // 21.1.3.11 String.prototype.match ( regexp )
2235 define(
2236 String.prototype, 'match',
2237 function match(regexp) {
2238 var o = strict(this);
2239 var s = String(o);
2240 if (HasProperty(regexp, $$match)) var rx = regexp;
2241 else rx = new RegExp(regexp);
2242 return rx[$$match](s);
2243 }, !string_regexp_dispatch);
2244
2245 // 21.1.3.12 String.prototype.normalize ( [ form ] )
2246
2247 // Not practical due to table sizes; if needed, pull in:
2248 // https://github.com/walling/unorm/
2249
2250 // 21.1.3.13 String.prototype.repeat ( count )
2251 define(
2252 String.prototype, 'repeat',
2253 function repeat(count) {
2254 var o = strict(this);
2255 var s = String(o);
2256 var n = ToInteger(count);
2257 if (n < 0) throw RangeError();
2258 if (n === Infinity) throw RangeError();
2259 var t = new Array(n + 1).join(s);
2260 return t;
2261 });
2262
2263 // 21.1.3.14 String.prototype.replace (searchValue, replaceValue )
2264 define(
2265 String.prototype, 'replace',
2266 function replace(searchValue, replaceValue) {
2267 var o = strict(this);
2268 if (HasProperty(searchValue, $$replace))
2269 return searchValue[$$replace](o, replaceValue);
2270 return orig_replace.call(o, searchValue, replaceValue);
2271 }, !string_regexp_dispatch);
2272
2273 // 21.1.3.15 String.prototype.search ( regexp )
2274 define(
2275 String.prototype, 'search',
2276 function search(regexp) {
2277 var o = strict(this);
2278 var string = String(o);
2279 if (HasProperty(regexp, $$search)) var rx = regexp;
2280 else rx = new RegExp(regexp);
2281 return rx[$$search](string);
2282 }, !string_regexp_dispatch);
2283
2284 // 21.1.3.16 String.prototype.slice ( start, end )
2285 // 21.1.3.17 String.prototype.split ( separator, limit )
2286 define(
2287 String.prototype, 'split',
2288 function split(separator, limit) {
2289 var o = strict(this);
2290 if (HasProperty(separator, $$split))
2291 return separator[$$split](o, limit);
2292 return orig_split.call(o, separator, limit);
2293 }, !string_regexp_dispatch);
2294
2295 // 21.1.3.18 String.prototype.startsWith ( searchString [, position ] )
2296 define(
2297 String.prototype, 'startsWith',
2298 function startsWith(searchString) {
2299 var position = arguments[1];
2300
2301 var o = strict(this);
2302 var s = String(o);
2303 var searchStr = String(searchString);
2304 var pos = ToInteger(position);
2305 var len = s.length;
2306 var start = min(max(pos, 0), len);
2307 var searchLength = searchStr.length;
2308 if (searchLength + start > len) return false;
2309 if (s.substring(start, start + searchLength) === searchStr) return true;
2310 return false;
2311 });
2312
2313 // 21.1.3.19 String.prototype.substring ( start, end )
2314 // 21.1.3.20 String.prototype.toLocaleLowerCase ( [ reserved1 [ , reserved2 ] ] )
2315 // 21.1.3.21 String.prototype.toLocaleUpperCase ([ reserved1 [ , reserved2 ] ] )
2316 // 21.1.3.22 String.prototype.toLowerCase ( )
2317 // 21.1.3.23 String.prototype.toString ( )
2318 // 21.1.3.24 String.prototype.toUpperCase ( )
2319 // 21.1.3.25 String.prototype.trim ( )
2320 // 21.1.3.26 String.prototype.valueOf ( )
2321
2322 // 21.1.3.27 String.prototype [ @@iterator ]( )
2323 define(
2324 String.prototype, $$iterator,
2325 function entries() {
2326 return CreateStringIterator(this, 'value');
2327 });
2328
2329 // 21.1.4 Properties of String Instances
2330 // 21.1.4.1 length
2331
2332 // 21.1.5 String Iterator Objects
2333 /** @constructor */
2334 function StringIterator() {}
2335
2336 // 21.1.5.1 CreateStringIterator Abstract Operation
2337 function CreateStringIterator(string, kind) {
2338 var s = String(string);
2339 var iterator = new StringIterator;
2340 set_internal(iterator, '[[IteratedString]]', s);
2341 set_internal(iterator, '[[StringIteratorNextIndex]]', 0);
2342 set_internal(iterator, '[[StringIterationKind]]', kind);
2343 return iterator;
2344 }
2345
2346 // 21.1.5.2 The %StringIteratorPrototype% Object
2347 var $StringIteratorPrototype$ = Object.create($IteratorPrototype$);
2348 StringIterator.prototype = $StringIteratorPrototype$;
2349
2350 // 21.1.5.2.1 %StringIteratorPrototype%.next ( )
2351 define(
2352 $StringIteratorPrototype$, 'next',
2353 function next() {
2354 var o = ToObject(this);
2355 var s = String(o['[[IteratedString]]']),
2356 index = o['[[StringIteratorNextIndex]]'],
2357 len = s.length;
2358 if (index >= len) {
2359 set_internal(o, '[[StringIteratorNextIndex]]', Infinity);
2360 return CreateIterResultObject(undefined, true);
2361 }
2362 var cp = s.codePointAt(index);
2363 set_internal(o, '[[StringIteratorNextIndex]]', index + (cp > 0xFFFF ? 2 : 1));
2364 return CreateIterResultObject(String.fromCodePoint(cp), false);
2365 });
2366
2367 // 21.1.5.2.2 %StringIteratorPrototype% [ @@toStringTag ]
2368 define($StringIteratorPrototype$, $$toStringTag, 'String Iterator');
2369
2370 // 21.1.5.3 Properties of String Iterator Instances
2371
2372 // ---------------------------------------
2373 // 21.2 RegExp (Regular Expression) Objects
2374 // ---------------------------------------
2375
2376 // 21.2.1 Patterns
2377 // 21.2.2 Pattern Semantics
2378 // 21.2.2.1 Notation
2379 // 21.2.2.2 Pattern
2380 // 21.2.2.3 Disjunction
2381 // 21.2.2.4 Alternative
2382 // 21.2.2.5 Term
2383 // 21.2.2.6 Assertion
2384 // 21.2.2.7 Quantifier
2385 // 21.2.2.8 Atom
2386 // 21.2.2.9 AtomEscape
2387 // 21.2.2.10 CharacterEscape
2388 // 21.2.2.11 DecimalEscape
2389 // 21.2.2.12 CharacterClassEscape
2390 // 21.2.2.13 CharacterClass
2391 // 21.2.2.14 ClassRanges
2392 // 21.2.2.15 NonemptyClassRanges
2393 // 21.2.2.16 NonemptyClassRangesNoDash
2394 // 21.2.2.17 ClassAtom
2395 // 21.2.2.18 ClassAtomNoDash
2396 // 21.2.2.19 ClassEscape
2397 // 21.2.3 The RegExp Constructor
2398 // 21.2.3.1 RegExp ( pattern, flags )
2399 // 21.2.3.2 new RegExp( ...argumentsList )
2400 // 21.2.3.3 Abstract Operations for the RegExp Constructor
2401 // 21.2.4 Properties of the RegExp Constructor
2402 // 21.2.4.1 RegExp.prototype
2403 // 21.2.5 Properties of the RegExp Prototype Object
2404 // 21.2.5.1 RegExp.prototype.constructor
2405 // 21.2.5.2 RegExp.prototype.exec ( string )
2406
2407 // 21.2.5.3 get RegExp.prototype.flags
2408 if (!('flags' in RegExp.prototype)) {
2409 Object.defineProperty(
2410 RegExp.prototype, 'flags', {
2411 get: function() {
2412 var s = String(this);
2413 return s.substring(s.lastIndexOf('/') + 1);
2414 }
2415 });
2416 }
2417
2418 // 21.2.5.4 get RegExp.prototype.global
2419 // 21.2.5.5 get RegExp.prototype.ignoreCase
2420
2421 // 21.2.5.6 RegExp.prototype [ @@match ] ( string )
2422 define(RegExp.prototype, $$match, function(string) {
2423 var o = strict(this);
2424 return orig_match.call(string, o);
2425 });
2426
2427 // 21.2.5.7 get RegExp.prototype.multiline
2428
2429 // 21.2.5.8 RegExp.prototype [ @@replace ] ( string, replaceValue )
2430 define(RegExp.prototype, $$replace, function(string, replaceValue) {
2431 var o = strict(this);
2432 return orig_replace.call(string, o, replaceValue);
2433 });
2434
2435 // 21.2.5.9 RegExp.prototype [ @@search ] ( string )
2436 define(RegExp.prototype, $$search, function(string) {
2437 var o = strict(this);
2438 return orig_search.call(string, o);
2439 });
2440
2441 // 21.2.5.10 get RegExp.prototype.source
2442
2443 // 21.2.5.11 RegExp.prototype [ @@split ] ( string, limit )
2444 define(RegExp.prototype, $$split, function(string, limit) {
2445 var o = strict(this);
2446 return orig_split.call(string, o, limit);
2447 });
2448
2449 // 21.2.5.12 get RegExp.prototype.sticky
2450 // 21.2.5.13 RegExp.prototype.test( S )
2451 // 21.2.5.14 RegExp.prototype.toString ( )
2452 // 21.2.5.15 get RegExp.prototype.unicode
2453
2454 // 21.2.6 Properties of RegExp Instances
2455 // 21.2.6.1 lastIndex
2456
2457 // (No polyfillable changes from ES5)
2458
2459 // ---------------------------------------
2460 // 22 Indexed Collections
2461 // ---------------------------------------
2462
2463 // ---------------------------------------
2464 // 22.1 Array Objects
2465 // ---------------------------------------
2466
2467 // 22.1.1 The Array Constructor
2468 // 22.1.1.1 Array ( )
2469 // 22.1.1.2 Array (len)
2470 // 22.1.1.3 Array (...items )
2471
2472 // 22.1.2 Properties of the Array Constructor
2473
2474 // 22.1.2.1 Array.from ( items [ , mapfn [ , thisArg ] ] )
2475 define(
2476 Array, 'from',
2477 function from(items) {
2478 var mapfn = arguments[1];
2479 var thisArg = arguments[2];
2480
2481 var c = strict(this);
2482 if (mapfn === undefined) {
2483 var mapping = false;
2484 } else {
2485 if (!IsCallable(mapfn)) throw TypeError();
2486 var t = thisArg;
2487 mapping = true;
2488 }
2489 var usingIterator = GetMethod(items, $$iterator);
2490 if (usingIterator !== undefined) {
2491 if (IsConstructor(c)) {
2492 var a = new c();
2493 } else {
2494 a = new Array(0);
2495 }
2496 var iterator = GetIterator(items, usingIterator);
2497 var k = 0;
2498 while (true) {
2499 var next = IteratorStep(iterator);
2500 if (next === false) {
2501 a.length = k;
2502 return a;
2503 }
2504 var nextValue = IteratorValue(next);
2505 if (mapping)
2506 var mappedValue = mapfn.call(t, nextValue);
2507 else
2508 mappedValue = nextValue;
2509 a[k] = mappedValue;
2510 k += 1;
2511 }
2512 }
2513 var arrayLike = ToObject(items);
2514 var lenValue = arrayLike.length;
2515 var len = ToLength(lenValue);
2516 if (IsConstructor(c)) {
2517 a = new c(len);
2518 } else {
2519 a = new Array(len);
2520 }
2521 k = 0;
2522 while (k < len) {
2523 var kValue = arrayLike[k];
2524 if (mapping)
2525 mappedValue = mapfn.call(t, kValue, k);
2526 else
2527 mappedValue = kValue;
2528 a[k] = mappedValue;
2529 k += 1;
2530 }
2531 a.length = len;
2532 return a;
2533 });
2534
2535 // 22.1.2.2 Array.isArray ( arg )
2536
2537 // 22.1.2.3 Array.of ( ...items )
2538 define(
2539 Array, 'of',
2540 function of() {
2541 var items = arguments;
2542
2543 var lenValue = items.length;
2544 var len = ToUint32(lenValue);
2545 var c = strict(this), a;
2546 if (IsConstructor(c)) {
2547 a = new c(len);
2548 a = ToObject(a);
2549 } else {
2550 a = new Array(len);
2551 }
2552 var k = 0;
2553 while (k < len) {
2554 a[k] = items[k];
2555 k += 1;
2556 }
2557 a.length = len;
2558 return a;
2559 });
2560
2561 // 22.1.2.4 Array.prototype
2562 // 22.1.2.5 get Array [ @@species ]
2563 // 22.1.3 Properties of the Array Prototype Object
2564 // 22.1.3.1 Array.prototype.concat ( ...arguments )
2565 // 22.1.3.1.1 Runtime Semantics: IsConcatSpreadable ( O )
2566 // 22.1.3.2 Array.prototype.constructor
2567 // 22.1.3.3 Array.prototype.copyWithin (target, start [ , end ] )
2568 define(
2569 Array.prototype, 'copyWithin',
2570 function copyWithin(target, start/*, end*/) {
2571 var end = arguments[2];
2572
2573 var o = ToObject(this);
2574 var lenVal = o.length;
2575 var len = ToLength(lenVal);
2576 len = max(len, 0);
2577 var relativeTarget = ToInteger(target);
2578 var to;
2579 if (relativeTarget < 0)
2580 to = max(len + relativeTarget, 0);
2581 else
2582 to = min(relativeTarget, len);
2583 var relativeStart = ToInteger(start);
2584 var from;
2585 if (relativeStart < 0)
2586 from = max(len + relativeStart, 0);
2587 else
2588 from = min(relativeStart, len);
2589 var relativeEnd;
2590 if (end === undefined)
2591 relativeEnd = len;
2592 else
2593 relativeEnd = ToInteger(end);
2594 var final;
2595 if (relativeEnd < 0)
2596 final = max(len + relativeEnd, 0);
2597 else
2598 final = min(relativeEnd, len);
2599 var count = min(final - from, len - to);
2600 var direction;
2601 if (from < to && to < from + count) {
2602 direction = -1;
2603 from = from + count - 1;
2604 to = to + count - 1;
2605 } else {
2606 direction = 1;
2607 }
2608 while (count > 0) {
2609 var fromKey = String(from);
2610 var toKey = String(to);
2611 var fromPresent = HasProperty(o, fromKey);
2612 if (fromPresent) {
2613 var fromVal = o[fromKey];
2614 o[toKey] = fromVal;
2615 } else {
2616 delete o[toKey];
2617 }
2618 from = from + direction;
2619 to = to + direction;
2620 count = count - 1;
2621 }
2622 return o;
2623 });
2624
2625 // 22.1.3.4 Array.prototype.entries ( )
2626 var nativeArrayIteratorMethods =
2627 ('entries' in Array.prototype && 'next' in [].entries());
2628
2629 define(
2630 Array.prototype, 'entries',
2631 function entries() {
2632 return CreateArrayIterator(this, 'key+value');
2633 }, !nativeArrayIteratorMethods);
2634
2635 // 22.1.3.5 Array.prototype.every ( callbackfn [ , thisArg] )
2636
2637 // 22.1.3.6 Array.prototype.fill (value [ , start [ , end ] ] )
2638 define(
2639 Array.prototype, 'fill',
2640 function fill(value/*, start, end*/) {
2641 var start = arguments[1],
2642 end = arguments[2];
2643
2644 var o = ToObject(this);
2645 var lenVal = o.length;
2646 var len = ToLength(lenVal);
2647 len = max(len, 0);
2648 var relativeStart = ToInteger(start);
2649 var k;
2650 if (relativeStart < 0)
2651 k = max((len + relativeStart), 0);
2652 else
2653 k = min(relativeStart, len);
2654 var relativeEnd;
2655 if (end === undefined)
2656 relativeEnd = len;
2657 else
2658 relativeEnd = ToInteger(end);
2659 var final;
2660 if (relativeEnd < 0)
2661 final = max((len + relativeEnd), 0);
2662 else
2663 final = min(relativeEnd, len);
2664 while (k < final) {
2665 var pk = String(k);
2666 o[pk] = value;
2667 k += 1;
2668 }
2669 return o;
2670 });
2671
2672 // 22.1.3.7 Array.prototype.filter ( callbackfn [ , thisArg ] )
2673
2674 // 22.1.3.8 Array.prototype.find ( predicate [ , thisArg ] )
2675 define(
2676 Array.prototype, 'find',
2677 function find(predicate) {
2678 var o = ToObject(this);
2679 var lenValue = o.length;
2680 var len = ToInteger(lenValue);
2681 if (!IsCallable(predicate)) throw TypeError();
2682 var t = arguments.length > 1 ? arguments[1] : undefined;
2683 var k = 0;
2684 while (k < len) {
2685 var pk = String(k);
2686 var kPresent = HasProperty(o, pk);
2687 if (kPresent) {
2688 var kValue = o[pk];
2689 var testResult = predicate.call(t, kValue, k, o);
2690 if (Boolean(testResult)) {
2691 return kValue;
2692 }
2693 }
2694 ++k;
2695 }
2696 return undefined;
2697 });
2698
2699 // 22.1.3.9 Array.prototype.findIndex ( predicate [ , thisArg ] )
2700 define(
2701 Array.prototype, 'findIndex',
2702 function findIndex(predicate) {
2703 var o = ToObject(this);
2704 var lenValue = o.length;
2705 var len = ToLength(lenValue);
2706 if (!IsCallable(predicate)) throw TypeError();
2707 var t = arguments.length > 1 ? arguments[1] : undefined;
2708 var k = 0;
2709 while (k < len) {
2710 var pk = String(k);
2711 var kPresent = HasProperty(o, pk);
2712 if (kPresent) {
2713 var kValue = o[pk];
2714 var testResult = predicate.call(t, kValue, k, o);
2715 if (Boolean(testResult)) {
2716 return k;
2717 }
2718 }
2719 ++k;
2720 }
2721 return -1;
2722 });
2723
2724 // 22.1.3.10 Array.prototype.forEach ( callbackfn [ , thisArg ] )
2725 // 22.1.3.11 Array.prototype.indexOf ( searchElement [ , fromIndex ] )
2726 // 22.1.3.12 Array.prototype.join (separator)
2727
2728 // 22.1.3.13 Array.prototype.keys ( )
2729 define(
2730 Array.prototype, 'keys',
2731 function keys() {
2732 return CreateArrayIterator(this, 'key');
2733 }, !nativeArrayIteratorMethods);
2734
2735 // 22.1.3.14 Array.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
2736 // 22.1.3.15 Array.prototype.map ( callbackfn [ , thisArg ] )
2737 // 22.1.3.16 Array.prototype.pop ( )
2738 // 22.1.3.17 Array.prototype.push ( ...items )
2739 // 22.1.3.18 Array.prototype.reduce ( callbackfn [ , initialValue ] )
2740 // 22.1.3.19 Array.prototype.reduceRight ( callbackfn [ , initialValue ] )
2741 // 22.1.3.20 Array.prototype.reverse ( )
2742 // 22.1.3.21 Array.prototype.shift ( )
2743 // 22.1.3.22 Array.prototype.slice (start, end)
2744 // 22.1.3.23 Array.prototype.some ( callbackfn [ , thisArg ] )
2745 // 22.1.3.24 Array.prototype.sort (comparefn)
2746 // 22.1.3.25 Array.prototype.splice (start, deleteCount , ...items )
2747 // 22.1.3.26 Array.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
2748 // 22.1.3.27 Array.prototype.toString ( )
2749 // 22.1.3.28 Array.prototype.unshift ( ...items )
2750
2751 // 22.1.3.29 Array.prototype.values ( )
2752 define(
2753 Array.prototype, 'values',
2754 function values() {
2755 return CreateArrayIterator(this, 'value');
2756 }, !nativeArrayIteratorMethods);
2757
2758 // 22.1.3.30 Array.prototype [ @@iterator ] ( )
2759 define(
2760 Array.prototype, $$iterator,
2761 Array.prototype.values
2762 );
2763
2764 // 22.1.3.31 Array.prototype [ @@unscopables ]
2765 // 22.1.4 Properties of Array Instances
2766 // 22.1.4.1 length
2767
2768 // 22.1.5 Array Iterator Objects
2769 function ArrayIterator() {}
2770
2771 // 22.1.5.1 CreateArrayIterator Abstract Operation
2772 function CreateArrayIterator(array, kind) {
2773 var o = ToObject(array);
2774 var iterator = new ArrayIterator;
2775 set_internal(iterator, '[[IteratedObject]]', o);
2776 set_internal(iterator, '[[ArrayIteratorNextIndex]]', 0);
2777 set_internal(iterator, '[[ArrayIterationKind]]', kind);
2778 return iterator;
2779 }
2780
2781 // 22.1.5.2 The %ArrayIteratorPrototype% Object
2782 var $ArrayIteratorPrototype$ = Object.create($IteratorPrototype$);
2783 ArrayIterator.prototype = $ArrayIteratorPrototype$;
2784
2785 // 22.1.5.2.1 %ArrayIteratorPrototype%. next( )
2786 define(
2787 $ArrayIteratorPrototype$, 'next',
2788 function next() {
2789 var o = strict(this);
2790 if (Type(o) !== 'object') throw TypeError();
2791 var a = o['[[IteratedObject]]'],
2792 index = o['[[ArrayIteratorNextIndex]]'],
2793 itemKind = o['[[ArrayIterationKind]]'],
2794 lenValue = a.length,
2795 len = ToUint32(lenValue),
2796 elementKey,
2797 elementValue;
2798 if (itemKind.indexOf('sparse') !== -1) {
2799 var found = false;
2800 while (!found && index < len) {
2801 elementKey = String(index);
2802 found = HasProperty(a, elementKey);
2803 if (!found) {
2804 index += 1;
2805 }
2806 }
2807 }
2808 if (index >= len) {
2809 set_internal(o, '[[ArrayIteratorNextIndex]]', Infinity);
2810 return CreateIterResultObject(undefined, true);
2811 }
2812 elementKey = index;
2813 set_internal(o, '[[ArrayIteratorNextIndex]]', index + 1);
2814 if (itemKind.indexOf('value') !== -1)
2815 elementValue = a[elementKey];
2816 if (itemKind.indexOf('key+value') !== -1)
2817 return CreateIterResultObject([elementKey, elementValue], false);
2818 if (itemKind.indexOf('key') !== -1)
2819 return CreateIterResultObject(elementKey, false);
2820 if (itemKind === 'value')
2821 return CreateIterResultObject(elementValue, false);
2822 throw Error('Internal error');
2823 });
2824
2825 // 22.1.5.2.2 %ArrayIteratorPrototype% [ @@toStringTag ]
2826 define($ArrayIteratorPrototype$, $$toStringTag, 'Array Iterator');
2827
2828 // 22.1.5.3 Properties of Array Iterator Instances
2829
2830
2831 // ---------------------------------------
2832 // 22.2 TypedArray Objects
2833 // ---------------------------------------
2834
2835 // See typedarray.js for TypedArray polyfill
2836
2837 ['Int8Array', 'Uint8Array', 'Uint8ClampedArray',
2838 'Int16Array', 'Uint16Array',
2839 'Int32Array', 'Uint32Array',
2840 'Float32Array', 'Float64Array'].forEach(function ($TypedArrayName$) {
2841 if (!($TypedArrayName$ in global))
2842 return;
2843 var $TypedArray$ = global[$TypedArrayName$];
2844
2845 // 22.2.1 The %TypedArray% Intrinsic Object
2846 // 22.2.1.1 %TypedArray% ( length )
2847 // 22.2.1.2 %TypedArray% ( typedArray )
2848 // 22.2.1.3 %TypedArray% ( object )
2849 // 22.2.1.4 %TypedArray% ( buffer [ , byteOffset [ , length ] ] )
2850 // 22.2.1.5 %TypedArray% ( all other argument combinations )
2851 // 22.2.2 Properties of the %TypedArray% Intrinsic Object
2852
2853 // 22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
2854 define(
2855 $TypedArray$, 'from',
2856 function from(source) {
2857 var mapfn = arguments[1];
2858 var thisArg = arguments[2];
2859
2860 var c = strict(this);
2861 if (!IsConstructor(c)) throw TypeError();
2862 if (mapfn === undefined) {
2863 var mapping = false;
2864 } else {
2865 if (IsCallable(mapfn)) throw TypeError();
2866 var t = thisArg;
2867 mapping = true;
2868 }
2869 var usingIterator = GetMethod(source, $$iterator);
2870 if (usingIterator !== undefined) {
2871 var iterator = GetIterator(source, usingIterator);
2872 var values = [];
2873 var next = true;
2874 while (next !== false) {
2875 next = IteratorStep(iterator);
2876 if (next !== false) {
2877 var nextValue = IteratorValue(next);
2878 values.push(nextValue);
2879 }
2880 }
2881 var len = values.length;
2882 var newObj = new c(len);
2883 var k = 0;
2884 while (k < len) {
2885 var kValue = values.shift();
2886 if (mapping) {
2887 var mappedValue = mapfn.call(t, kValue);
2888 } else {
2889 mappedValue = kValue;
2890 }
2891 newObj[k] = mappedValue;
2892 ++k;
2893 }
2894 console.assert(values.length === 0);
2895 return newObj;
2896 }
2897 var arrayLike = ToObject(source);
2898 var lenValue = arrayLike.length;
2899 len = ToLength(lenValue);
2900 newObj = new c(len);
2901 k = 0;
2902 while (k < len) {
2903 kValue = arrayLike[k];
2904 if (mapping) {
2905 mappedValue = mapfn.call(t, kValue, k);
2906 } else {
2907 mappedValue = kValue;
2908 }
2909 newObj[k] = mappedValue;
2910 ++k;
2911 }
2912 return newObj;
2913 });
2914
2915 // 22.2.2.2 %TypedArray%.of ( ...items )
2916 define(
2917 $TypedArray$, 'of',
2918 function of() {
2919 var items = arguments;
2920
2921 var len = items.length;
2922 var c = strict(this);
2923 var newObj = new c(len);
2924 var k = 0;
2925 while (k < len) {
2926 newObj[k] = items[k];
2927 ++k;
2928 }
2929 return newObj;
2930 });
2931
2932 // 22.2.2.3 %TypedArray%.prototype
2933 // 22.2.2.4 get %TypedArray% [ @@species ]
2934 // 22.2.3 Properties of the %TypedArrayPrototype% Object
2935 // 22.2.3.1 get %TypedArray%.prototype.buffer
2936 // 22.2.3.2 get %TypedArray%.prototype.byteLength
2937 // 22.2.3.3 get %TypedArray%.prototype.byteOffset
2938 // 22.2.3.4 %TypedArray%.prototype.constructor
2939
2940 // 22.2.3.5 %TypedArray%.prototype.copyWithin (target, start [, end ] )
2941 define($TypedArray$.prototype, 'copyWithin', Array.prototype.copyWithin);
2942
2943 // 22.2.3.6 %TypedArray%.prototype.entries ( )
2944 define($TypedArray$.prototype, 'entries', Array.prototype.entries);
2945
2946 // 22.2.3.7 %TypedArray%.prototype.every ( callbackfn [ , thisArg ] )
2947 define($TypedArray$.prototype, 'every', Array.prototype.every);
2948
2949 // 22.2.3.8 %TypedArray%.prototype.fill (value [ , start [ , end ] ] )
2950 define(
2951 $TypedArray$.prototype, 'fill',
2952 //Array.prototype.fill // Doesn't work in Safari 7
2953 function fill(value/*, start, end*/) {
2954 var start = arguments[1],
2955 end = arguments[2];
2956
2957 var o = ToObject(this);
2958 var lenVal = o.length;
2959 var len = ToLength(lenVal);
2960 len = max(len, 0);
2961 var relativeStart = ToInteger(start);
2962 var k;
2963 if (relativeStart < 0) k = max((len + relativeStart), 0);
2964 else k = min(relativeStart, len);
2965 var relativeEnd;
2966 if (end === undefined) relativeEnd = len;
2967 else relativeEnd = ToInteger(end);
2968 var final;
2969 if (relativeEnd < 0) final = max((len + relativeEnd), 0);
2970 else final = min(relativeEnd, len);
2971 while (k < final) {
2972 var pk = String(k);
2973 o[pk] = value;
2974 k += 1;
2975 }
2976 return o;
2977 });
2978
2979 // 22.2.3.9 %TypedArray%.prototype.filter ( callbackfn [ , thisArg ] )
2980 define(
2981 $TypedArray$.prototype, 'filter',
2982 function filter(callbackfn) {
2983 var thisArg = arguments[1];
2984
2985 var o = ToObject(this);
2986 var lenVal = o.length;
2987 var len = ToLength(lenVal);
2988 if (!IsCallable(callbackfn)) throw TypeError();
2989 var t = thisArg;
2990 var c = o.constructor;
2991 var kept = [];
2992 var k = 0;
2993 var captured = 0;
2994 while (k < len) {
2995 var kValue = o[k];
2996 var selected = callbackfn.call(t, kValue, k, o);
2997 if (selected) {
2998 kept.push(kValue);
2999 ++captured;
3000 }
3001 ++k;
3002 }
3003 var a = new c(captured);
3004 var n = 0;
3005 for (var i = 0; i < kept.length; ++i) {
3006 var e = kept[i];
3007 a[n] = e;
3008 ++n;
3009 }
3010 return a;
3011 });
3012
3013 // 22.2.3.10 %TypedArray%.prototype.find (predicate [ , thisArg ] )
3014 define($TypedArray$.prototype, 'find', Array.prototype.find);
3015
3016 // 22.2.3.11 %TypedArray%.prototype.findIndex ( predicate [ , thisArg ] )
3017 define($TypedArray$.prototype, 'findIndex', Array.prototype.findIndex);
3018
3019 // 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
3020 define($TypedArray$.prototype, 'forEach', Array.prototype.forEach);
3021
3022 // 22.2.3.13 %TypedArray%.prototype.indexOf (searchElement [ , fromIndex ] )
3023 define($TypedArray$.prototype, 'indexOf', Array.prototype.indexOf);
3024
3025 // 22.2.3.14 %TypedArray%.prototype.join ( separator )
3026 define($TypedArray$.prototype, 'join', Array.prototype.join);
3027
3028 // 22.2.3.15 %TypedArray%.prototype.keys ( )
3029 define($TypedArray$.prototype, 'keys', Array.prototype.keys);
3030
3031 // 22.2.3.16 %TypedArray%.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
3032 define($TypedArray$.prototype, 'lastIndexOf', Array.prototype.lastIndexOf);
3033
3034 // 22.2.3.17 get %TypedArray%.prototype.length
3035
3036 // 22.2.3.18 %TypedArray%.prototype.map ( callbackfn [ , thisArg ] )
3037 define(
3038 $TypedArray$.prototype, 'map',
3039 function map(callbackfn) {
3040 var thisArg = arguments[1];
3041
3042 var o = ToObject(this);
3043 var lenValue = o.length;
3044 var len = ToLength(lenValue);
3045 if (!IsCallable(callbackfn)) throw TypeError();
3046 var t = thisArg;
3047 var a = undefined;
3048 var c = o.constructor;
3049 if (IsConstructor(c))
3050 a = new c(len);
3051 if (a === undefined)
3052 a = new Array(len);
3053 var k = 0;
3054 while (k < len) {
3055 var kPresent = HasProperty(o, k);
3056 if (kPresent) {
3057 var kValue = o[k];
3058 var mappedValue = callbackfn.call(t, kValue, k, o);
3059 a[k] = mappedValue;
3060 }
3061 ++k;
3062 }
3063 return a;
3064 });
3065
3066 // 22.2.3.19 %TypedArray%.prototype.reduce ( callbackfn [, initialValue] )
3067 define($TypedArray$.prototype, 'reduce', Array.prototype.reduce);
3068
3069 // 22.2.3.20 %TypedArray%.prototype.reduceRight ( callbackfn [, initialValue] )
3070 define($TypedArray$.prototype, 'reduceRight', Array.prototype.reduceRight);
3071
3072 // 22.2.3.21 %TypedArray%.prototype.reverse ( )
3073 define($TypedArray$.prototype, 'reverse', Array.prototype.reverse);
3074
3075 // 22.2.3.22 %TypedArray%.prototype.set ( overloaded [ , offset ])
3076 // 22.2.3.22.1 %TypedArray%.prototype.set (array [ , offset ] )
3077 // 22.2.3.22.2 %TypedArray%.prototype.set(typedArray [, offset ] )
3078
3079 // 22.2.3.23 %TypedArray%.prototype.slice ( start, end )
3080 define(
3081 $TypedArray$.prototype, 'slice',
3082 function slice(start, end) {
3083 var o = ToObject(this);
3084 var lenVal = o.length;
3085 var len = ToLength(lenVal);
3086 var relativeStart = ToInteger(start);
3087 var k = (relativeStart < 0) ? max(len + relativeStart, 0) : min(relativeStart, len);
3088 var relativeEnd = (end === undefined) ? len : ToInteger(end);
3089 var final = (relativeEnd < 0) ? max(len + relativeEnd, 0) : min(relativeEnd, len);
3090 var count = final - k;
3091 var c = o.constructor;
3092 if (IsConstructor(c)) {
3093 var a = new c(count);
3094 } else {
3095 throw TypeError();
3096 }
3097 var n = 0;
3098 while (k < final) {
3099 var kValue = o[k];
3100 a[n] = kValue;
3101 ++k;
3102 ++n;
3103 }
3104 return a;
3105 });
3106
3107 // 22.2.3.24 %TypedArray%.prototype.some ( callbackfn [ , thisArg ] )
3108 define($TypedArray$.prototype, 'some', Array.prototype.some);
3109
3110 // 22.2.3.25 %TypedArray%.prototype.sort ( comparefn )
3111 define(
3112 $TypedArray$.prototype, 'sort',
3113 function sort() {
3114 var comparefn = arguments[0];
3115
3116 function sortCompare(x, y) {
3117 console.assert(Type(x) === 'number' && Type(y) === 'number');
3118 if (x !== x && y !== y) return +0;
3119 if (x !== x) return 1;
3120 if (y !== y) return -1;
3121 if (comparefn !== undefined) {
3122 return comparefn(x, y);
3123 }
3124 if (x < y) return -1;
3125 if (x > y) return 1;
3126 return +0;
3127 }
3128 return Array.prototype.sort.call(this, sortCompare);
3129 });
3130
3131 // 22.2.3.26 %TypedArray%.prototype.subarray( [ begin [ , end ] ] )
3132 // 22.2.3.27 %TypedArray%.prototype.toLocaleString ([ reserved1 [ , reserved2 ] ])
3133 // 22.2.3.28 %TypedArray%.prototype.toString ( )
3134
3135 // 22.2.3.29 %TypedArray%.prototype.values ( )
3136 define($TypedArray$.prototype, 'values', Array.prototype.values);
3137
3138 // 22.2.3.30 %TypedArray%.prototype [ @@iterator ] ( )
3139 define(
3140 $TypedArray$.prototype, $$iterator,
3141 $TypedArray$.prototype.values
3142 );
3143
3144 // 22.2.3.31 get %TypedArray%.prototype [ @@toStringTag ]
3145 define($TypedArray$.prototype, $$toStringTag, $TypedArrayName$);
3146
3147 // 22.2.4 The TypedArray Constructors
3148 // 22.2.4.1TypedArray( ... argumentsList)
3149 // 22.2.5 Properties of the TypedArray Constructors
3150 // 22.2.5.1 TypedArray.BYTES_PER_ELEMENT
3151 // 22.2.5.2 TypedArray.prototype
3152 // 22.2.6 Properties of TypedArray Prototype Objects
3153 // 22.2.6.1 TypedArray.prototype.BYTES_PER_ELEMENT
3154 // 22.2.6.2 TypedArray.prototype.constructor
3155 // 22.2.7 Properties of TypedArray Instances
3156 });
3157
3158 // ---------------------------------------
3159 // 23 Keyed Collection
3160 // ---------------------------------------
3161
3162 // ---------------------------------------
3163 // 23.1 Map Objects
3164 // ---------------------------------------
3165
3166 (function() {
3167 // 23.1.1 The Map Constructor
3168
3169 // 23.1.1.1 Map ( [ iterable ] )
3170 /** @constructor */
3171 function Map(/*iterable*/) {
3172 var map = strict(this);
3173 var iterable = arguments[0];
3174
3175 if (Type(map) !== 'object') throw TypeError();
3176 if ('[[MapData]]' in map) throw TypeError();
3177
3178 if (iterable !== undefined) {
3179 var adder = map['set'];
3180 if (!IsCallable(adder)) throw TypeError();
3181 var iter = GetIterator(ToObject(iterable));
3182 }
3183 set_internal(map, '[[MapData]]', { keys: [], values: [] });
3184 if (iter === undefined) return map;
3185 while (true) {
3186 var next = IteratorStep(iter);
3187 if (next === false)
3188 return map;
3189 var nextItem = IteratorValue(next);
3190 if (Type(nextItem) !== 'object') throw TypeError();
3191 var k = nextItem[0];
3192 var v = nextItem[1];
3193 adder.call(map, k, v);
3194 }
3195
3196 return map;
3197 }
3198
3199 if (!('Map' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
3200 (function() { try { new global.Map([]); return false; } catch (_) { return true; } }()) ||
3201 (function() { try { return !new global.Map().entries().next; } catch (_) { return true; } }()) ||
3202 (new global.Map([['a', 1]]).size !== 1))
3203 global.Map = Map;
3204
3205
3206 function MapDataIndexOf(mapData, key) {
3207 var i;
3208 if (key === key) return mapData.keys.indexOf(key);
3209 // Slow case for NaN
3210 for (i = 0; i < mapData.keys.length; i += 1)
3211 if (SameValueZero(mapData.keys[i], key)) return i;
3212 return -1;
3213 }
3214
3215 // 23.1.1.2 new Map ( ... argumentsList )
3216 // 23.1.2 Properties of the Map Constructor
3217 // 23.1.2.1 Map.prototype
3218 var $MapPrototype$ = {};
3219 Map.prototype = $MapPrototype$;
3220
3221 // 23.1.2.2 get Map [ @@species ]
3222
3223 // 23.1.3 Properties of the Map Prototype Object
3224 // 23.1.3.1 Map.prototype.clear ()
3225 define(
3226 Map.prototype, 'clear',
3227 function clear() {
3228 var m = strict(this);
3229 if (Type(m) !== 'object') throw TypeError();
3230 if (!('[[MapData]]' in m)) throw TypeError();
3231 if (m['[[MapData]]'] === undefined) throw TypeError();
3232 var entries = m['[[MapData]]'];
3233 entries.keys.length = 0;
3234 entries.values.length = 0;
3235 return undefined;
3236 });
3237
3238 // 23.1.3.2 Map.prototype.constructor
3239
3240 // 23.1.3.3 Map.prototype.delete ( key )
3241 define(
3242 Map.prototype, 'delete',
3243 function delete_(key) {
3244 var m = strict(this);
3245 if (Type(m) !== 'object') throw TypeError();
3246 if (!('[[MapData]]' in m)) throw TypeError();
3247 if (m['[[MapData]]'] === undefined) throw TypeError();
3248 var entries = m['[[MapData]]'];
3249 var i = MapDataIndexOf(entries, key);
3250 if (i < 0) return false;
3251 entries.keys[i] = empty;
3252 entries.values[i] = empty;
3253 return true;
3254 });
3255
3256 // 23.1.3.4 Map.prototype.entries ( )
3257 define(
3258 Map.prototype, 'entries',
3259 function entries() {
3260 var m = strict(this);
3261 if (Type(m) !== 'object') throw TypeError();
3262 return CreateMapIterator(m, 'key+value');
3263 });
3264
3265 // 23.1.3.5 Map.prototype.forEach ( callbackfn [ , thisArg ] )
3266 define(
3267 Map.prototype, 'forEach',
3268 function forEach(callbackfn /*, thisArg*/) {
3269 var thisArg = arguments[1];
3270
3271 var m = strict(this);
3272 if (Type(m) !== 'object') throw TypeError();
3273 if (!('[[MapData]]' in m)) throw TypeError();
3274 if (m['[[MapData]]'] === undefined) throw TypeError();
3275 var entries = m['[[MapData]]'];
3276
3277 if (!IsCallable(callbackfn)) {
3278 throw TypeError('First argument to forEach is not callable.');
3279 }
3280 for (var i = 0; i < entries.keys.length; ++i) {
3281 if (entries.keys[i] !== empty) {
3282 callbackfn.call(thisArg, entries.values[i], entries.keys[i], m);
3283 }
3284 }
3285 return undefined;
3286 });
3287
3288 // 23.1.3.6 Map.prototype.get ( key )
3289 define(
3290 Map.prototype, 'get',
3291 function get(key) {
3292 var m = strict(this);
3293 if (Type(m) !== 'object') throw TypeError();
3294 if (!('[[MapData]]' in m)) throw TypeError();
3295 if (m['[[MapData]]'] === undefined) throw TypeError();
3296 var entries = m['[[MapData]]'];
3297 var i = MapDataIndexOf(entries, key);
3298 if (i >= 0) return entries.values[i];
3299 return undefined;
3300 });
3301
3302 // 23.1.3.7 Map.prototype.has ( key )
3303 define(
3304 Map.prototype, 'has',
3305 function has(key) {
3306 var m = strict(this);
3307 if (Type(m) !== 'object') throw TypeError();
3308 if (!('[[MapData]]' in m)) throw TypeError();
3309 if (m['[[MapData]]'] === undefined) throw TypeError();
3310 var entries = m['[[MapData]]'];
3311 if (MapDataIndexOf(entries, key) >= 0) return true;
3312 return false;
3313 });
3314
3315 // 23.1.3.8 Map.prototype.keys ( )
3316 define(
3317 Map.prototype, 'keys',
3318 function keys() {
3319 var m = strict(this);
3320 if (Type(m) !== 'object') throw TypeError();
3321 return CreateMapIterator(m, 'key');
3322 });
3323
3324 // 23.1.3.9 Map.prototype.set ( key , value )
3325 define(
3326 Map.prototype, 'set',
3327 function set(key, value) {
3328 var m = strict(this);
3329 if (Type(m) !== 'object') throw TypeError();
3330 if (!('[[MapData]]' in m)) throw TypeError();
3331 if (m['[[MapData]]'] === undefined) throw TypeError();
3332 var entries = m['[[MapData]]'];
3333 var i = MapDataIndexOf(entries, key);
3334 if (i < 0) i = entries.keys.length;
3335 if (SameValue(key, -0)) key = 0;
3336 entries.keys[i] = key;
3337 entries.values[i] = value;
3338 return m;
3339 });
3340
3341 // 23.1.3.10 get Map.prototype.size
3342 Object.defineProperty(
3343 Map.prototype, 'size', {
3344 get: function() {
3345 var m = strict(this);
3346 if (Type(m) !== 'object') throw TypeError();
3347 if (!('[[MapData]]' in m)) throw TypeError();
3348 if (m['[[MapData]]'] === undefined) throw TypeError();
3349 var entries = m['[[MapData]]'];
3350 var count = 0;
3351 for (var i = 0; i < entries.keys.length; ++i) {
3352 if (entries.keys[i] !== empty)
3353 count = count + 1;
3354 }
3355 return count;
3356 }
3357 });
3358
3359 // 23.1.3.11 Map.prototype.values ( )
3360 define(
3361 Map.prototype, 'values',
3362 function values() {
3363 var m = strict(this);
3364 if (Type(m) !== 'object') throw TypeError();
3365 return CreateMapIterator(m, 'value');
3366 });
3367
3368 // 23.1.3.12 Map.prototype [ @@iterator ]( )
3369 define(
3370 Map.prototype, $$iterator,
3371 function() {
3372 var m = strict(this);
3373 if (Type(m) !== 'object') throw TypeError();
3374 return CreateMapIterator(m, 'key+value');
3375 });
3376
3377 // 23.1.3.13 Map.prototype [ @@toStringTag ]
3378 define(global.Map.prototype, $$toStringTag, 'Map');
3379
3380 // 23.1.4 Properties of Map Instances
3381 // 23.1.5 Map Iterator Objects
3382
3383 /** @constructor */
3384 function MapIterator() {}
3385
3386 // 23.1.5.1 CreateMapIterator Abstract Operation
3387 function CreateMapIterator(map, kind) {
3388 if (Type(map) !== 'object') throw TypeError();
3389 if (!('[[MapData]]' in map)) throw TypeError();
3390 if (map['[[MapData]]'] === undefined) throw TypeError();
3391 var iterator = new MapIterator;
3392 set_internal(iterator, '[[Map]]', map);
3393 set_internal(iterator, '[[MapNextIndex]]', 0);
3394 set_internal(iterator, '[[MapIterationKind]]', kind);
3395 return iterator;
3396 }
3397
3398 // 23.1.5.2 The %MapIteratorPrototype% Object
3399 var $MapIteratorPrototype$ = Object.create($IteratorPrototype$);
3400 MapIterator.prototype = $MapIteratorPrototype$;
3401
3402 // 23.1.5.2.1 %MapIteratorPrototype%.next ( )
3403 define(
3404 $MapIteratorPrototype$, 'next',
3405 function next() {
3406 var o = strict(this);
3407 if (Type(o) !== 'object') throw TypeError();
3408 var m = o['[[Map]]'],
3409 index = o['[[MapNextIndex]]'],
3410 itemKind = o['[[MapIterationKind]]'],
3411 entries = m['[[MapData]]'];
3412 while (index < entries.keys.length) {
3413 var e = {key: entries.keys[index], value: entries.values[index]};
3414 index = index += 1;
3415 set_internal(o, '[[MapNextIndex]]', index);
3416 if (e.key !== empty) {
3417 if (itemKind === 'key') {
3418 return CreateIterResultObject(e.key, false);
3419 } else if (itemKind === 'value') {
3420 return CreateIterResultObject(e.value, false);
3421 } else {
3422 return CreateIterResultObject([e.key, e.value], false);
3423 }
3424 }
3425 }
3426 return CreateIterResultObject(undefined, true);
3427 });
3428
3429 // 23.1.5.2.2 %MapIteratorPrototype% [ @@toStringTag ]
3430 define($MapIteratorPrototype$, $$toStringTag, 'Map Iterator');
3431
3432 // 23.1.5.3 Properties of Map Iterator Instances
3433 }());
3434
3435 // ---------------------------------------
3436 // 23.2 Set Objects
3437 // ---------------------------------------
3438
3439 (function() {
3440 // 23.2.1 The Set Constructor
3441 // 23.2.1.1 Set ( [ iterable ] )
3442
3443 /** @constructor */
3444 function Set(/*iterable*/) {
3445 var set = strict(this);
3446 var iterable = arguments[0];
3447
3448 if (Type(set) !== 'object') throw TypeError();
3449 if ('[[SetData]]' in set) throw TypeError();
3450
3451 if (iterable !== undefined) {
3452 var adder = set['add'];
3453 if (!IsCallable(adder)) throw TypeError();
3454 var iter = GetIterator(ToObject(iterable));
3455 }
3456 set_internal(set, '[[SetData]]', []);
3457 if (iter === undefined) return set;
3458 while (true) {
3459 var next = IteratorStep(iter);
3460 if (next === false)
3461 return set;
3462 var nextValue = IteratorValue(next);
3463 adder.call(set, nextValue);
3464 }
3465
3466 return set;
3467 }
3468
3469 if (!('Set' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
3470 (function() { try { return !new global.Set().entries().next; } catch (_) { return true; } }()) ||
3471 (new global.Set([1]).size !== 1))
3472 global.Set = Set;
3473
3474 function SetDataIndexOf(setData, key) {
3475 var i;
3476 if (key === key)
3477 return setData.indexOf(key);
3478 // Slow case for NaN
3479 for (i = 0; i < setData.length; i += 1)
3480 if (SameValueZero(setData[i], key)) return i;
3481 return -1;
3482 }
3483
3484 // 23.2.1.2 new Set ( ...argumentsList )
3485 // 23.2.2 Properties of the Set Constructor
3486
3487 // 23.2.2.1 Set.prototype
3488 var $SetPrototype$ = {};
3489 Set.prototype = $SetPrototype$;
3490
3491 // 23.2.2.2 get Set [ @@species ]
3492 // 23.2.3 Properties of the Set Prototype Object
3493
3494 // 23.2.3.1 Set.prototype.add (value )
3495 define(
3496 Set.prototype, 'add',
3497 function add(value) {
3498 var s = strict(this);
3499 if (Type(s) !== 'object') throw TypeError();
3500 if (!('[[SetData]]' in s)) throw TypeError();
3501 if (s['[[SetData]]'] === undefined) throw TypeError();
3502 if (SameValue(value, -0)) value = 0;
3503 var entries = s['[[SetData]]'];
3504 var i = SetDataIndexOf(entries, value);
3505 if (i < 0) i = s['[[SetData]]'].length;
3506 s['[[SetData]]'][i] = value;
3507
3508 return s;
3509 });
3510
3511 // 23.2.3.2 Set.prototype.clear ()
3512 define(
3513 Set.prototype, 'clear',
3514 function clear() {
3515 var s = strict(this);
3516 if (Type(s) !== 'object') throw TypeError();
3517 if (!('[[SetData]]' in s)) throw TypeError();
3518 if (s['[[SetData]]'] === undefined) throw TypeError();
3519 var entries = s['[[SetData]]'];
3520 entries.length = 0;
3521 return undefined;
3522 });
3523
3524 // 23.2.3.3 Set.prototype.constructor
3525 // 23.2.3.4 Set.prototype.delete ( value )
3526 define(
3527 Set.prototype, 'delete',
3528 function delete_(value) {
3529 var s = strict(this);
3530 if (Type(s) !== 'object') throw TypeError();
3531 if (!('[[SetData]]' in s)) throw TypeError();
3532 if (s['[[SetData]]'] === undefined) throw TypeError();
3533 var entries = s['[[SetData]]'];
3534 var i = SetDataIndexOf(entries, value);
3535 if (i < 0) return false;
3536 entries[i] = empty;
3537 return true;
3538 });
3539
3540 // 23.2.3.5 Set.prototype.entries ( )
3541 define(
3542 Set.prototype, 'entries',
3543 function entries() {
3544 var s = strict(this);
3545 if (Type(s) !== 'object') throw TypeError();
3546 return CreateSetIterator(s, 'key+value');
3547 });
3548
3549 // 23.2.3.6 Set.prototype.forEach ( callbackfn [ , thisArg ] )
3550 define(
3551 Set.prototype, 'forEach',
3552 function forEach(callbackfn/*, thisArg*/) {
3553 var thisArg = arguments[1];
3554
3555 var s = strict(this);
3556 if (Type(s) !== 'object') throw TypeError();
3557 if (!('[[SetData]]' in s)) throw TypeError();
3558 if (s['[[SetData]]'] === undefined) throw TypeError();
3559 var entries = s['[[SetData]]'];
3560
3561 if (!IsCallable(callbackfn)) {
3562 throw TypeError('First argument to forEach is not callable.');
3563 }
3564 for (var i = 0; i < entries.length; ++i) {
3565 if (entries[i] !== empty) {
3566 callbackfn.call(thisArg, entries[i], entries[i], s);
3567 }
3568 }
3569 });
3570
3571 // 23.2.3.7 Set.prototype.has ( value )
3572 define(
3573 Set.prototype, 'has',
3574 function has(key) {
3575 var s = strict(this);
3576 if (Type(s) !== 'object') throw TypeError();
3577 if (!('[[SetData]]' in s)) throw TypeError();
3578 if (s['[[SetData]]'] === undefined) throw TypeError();
3579 var entries = s['[[SetData]]'];
3580 return SetDataIndexOf(entries, key) !== -1;
3581 });
3582
3583 // 23.2.3.8 Set.prototype.keys ( )
3584 // See Set.prototype.values
3585
3586 // 23.2.3.9 get Set.prototype.size
3587 Object.defineProperty(
3588 Set.prototype, 'size', {
3589 get: function() {
3590 var s = strict(this);
3591 if (Type(s) !== 'object') throw TypeError();
3592 if (!('[[SetData]]' in s)) throw TypeError();
3593 if (s['[[SetData]]'] === undefined) throw TypeError();
3594 var entries = s['[[SetData]]'];
3595 var count = 0;
3596 for (var i = 0; i < entries.length; ++i) {
3597 if (entries[i] !== empty)
3598 count = count + 1;
3599 }
3600 return count;
3601 }
3602 });
3603
3604 // 23.2.3.10 Set.prototype.values ( )
3605 define(
3606 Set.prototype, 'values',
3607 function values() {
3608 var s = strict(this);
3609 if (Type(s) !== 'object') throw TypeError();
3610 return CreateSetIterator(s, 'value');
3611 });
3612 // NOTE: function name is still 'values':
3613 Set.prototype.keys = Set.prototype.values;
3614
3615 // 23.2.3.11 Set.prototype [@@iterator ] ( )
3616 define(
3617 Set.prototype, $$iterator,
3618 function() {
3619 var s = strict(this);
3620 if (Type(s) !== 'object') throw TypeError();
3621 return CreateSetIterator(s);
3622 });
3623
3624 // 23.2.3.12 Set.prototype [ @@toStringTag ]
3625 define(global.Set.prototype, $$toStringTag, 'Set');
3626
3627 // 23.2.4 Properties of Set Instances
3628 // 23.2.5 Set Iterator Objects
3629 /** @constructor */
3630 function SetIterator() {}
3631
3632 // 23.2.5.1 CreateSetIterator Abstract Operation
3633 function CreateSetIterator(set, kind) {
3634 if (Type(set) !== 'object') throw TypeError();
3635 if (!('[[SetData]]' in set)) throw TypeError();
3636 if (set['[[SetData]]'] === undefined) throw TypeError();
3637 var iterator = new SetIterator;
3638 set_internal(iterator, '[[IteratedSet]]', set);
3639 set_internal(iterator, '[[SetNextIndex]]', 0);
3640 set_internal(iterator, '[[SetIterationKind]]', kind);
3641 return iterator;
3642 }
3643
3644 // 23.2.5.2 The %SetIteratorPrototype% Object
3645 var $SetIteratorPrototype$ = Object.create($IteratorPrototype$);
3646 SetIterator.prototype = $SetIteratorPrototype$;
3647
3648 // 23.2.5.2.1 %SetIteratorPrototype%.next( )
3649 define(
3650 $SetIteratorPrototype$, 'next',
3651 function next() {
3652 var o = strict(this);
3653 if (Type(o) !== 'object') throw TypeError();
3654 var s = o['[[IteratedSet]]'],
3655 index = o['[[SetNextIndex]]'],
3656 itemKind = o['[[SetIterationKind]]'],
3657 entries = s['[[SetData]]'];
3658 while (index < entries.length) {
3659 var e = entries[index];
3660 index = index += 1;
3661 set_internal(o, '[[SetNextIndex]]', index);
3662 if (e !== empty) {
3663 if (itemKind === 'key+value')
3664 return CreateIterResultObject([e, e], false);
3665 return CreateIterResultObject(e, false);
3666 }
3667 }
3668 return CreateIterResultObject(undefined, true);
3669 });
3670
3671 // 23.2.5.2.2 %SetIteratorPrototype% [ @@toStringTag ]
3672 define($SetIteratorPrototype$, $$toStringTag, 'Set Iterator');
3673
3674 // 23.2.5.3 Properties of Set Iterator Instances
3675
3676 }());
3677
3678 // ---------------------------------------
3679 // 23.3 WeakMap Objects
3680 // ---------------------------------------
3681
3682 (function() {
3683 // 23.3.1 The WeakMap Constructor
3684 // 23.3.1.1 WeakMap ( [ iterable ] )
3685 /** @constructor */
3686 function WeakMap(/*iterable*/) {
3687 var map = strict(this);
3688 var iterable = arguments[0];
3689
3690 if (Type(map) !== 'object') throw TypeError();
3691 if ('[[WeakMapData]]' in map) throw TypeError();
3692
3693 if (iterable !== undefined) {
3694 var adder = map['set'];
3695 if (!IsCallable(adder)) throw TypeError();
3696 var iter = GetIterator(ToObject(iterable));
3697 }
3698 set_internal(map, '[[WeakMapData]]', new EphemeronTable);
3699 if (iter === undefined) return map;
3700 while (true) {
3701 var next = IteratorStep(iter);
3702 if (next === false)
3703 return map;
3704 var nextValue = IteratorValue(next);
3705 if (Type(nextValue) !== 'object') throw TypeError();
3706 var k = nextValue[0];
3707 var v = nextValue[1];
3708 adder.call(map, k, v);
3709 }
3710
3711 return map;
3712 }
3713
3714 if (!('WeakMap' in global) || OVERRIDE_NATIVE_FOR_TESTING)
3715 global.WeakMap = WeakMap;
3716
3717 // 23.3.2 Properties of the WeakMap Constructor
3718 // 23.3.2.1 WeakMap.prototype
3719 var $WeakMapPrototype$ = {};
3720 WeakMap.prototype = $WeakMapPrototype$;
3721
3722
3723
3724 // 23.3.2.2 WeakMap[ @@create ] ( )
3725 // 23.3.3 Properties of the WeakMap Prototype Object
3726
3727 // 23.3.3.1 WeakMap.prototype.constructor
3728
3729 // 23.3.3.2 WeakMap.prototype.delete ( key )
3730 define(
3731 WeakMap.prototype, 'delete',
3732 function delete_(key) {
3733 var M = strict(this);
3734 if (Type(M) !== 'object') throw TypeError();
3735 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3736 if (Type(key) !== 'object') throw TypeError('Expected object');
3737 return M['[[WeakMapData]]'].remove(key);
3738 });
3739
3740 // 23.3.3.3 WeakMap.prototype.get ( key )
3741 define(
3742 WeakMap.prototype, 'get',
3743 function get(key, defaultValue) {
3744 var M = strict(this);
3745 if (Type(M) !== 'object') throw TypeError();
3746 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3747 if (Type(key) !== 'object') throw TypeError('Expected object');
3748 return M['[[WeakMapData]]'].get(key, defaultValue);
3749 });
3750
3751 // 23.3.3.4 WeakMap.prototype.has ( key )
3752 define(
3753 WeakMap.prototype, 'has',
3754 function has(key) {
3755 var M = strict(this);
3756 if (Type(M) !== 'object') throw TypeError();
3757 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3758 if (Type(key) !== 'object') throw TypeError('Expected object');
3759 return M['[[WeakMapData]]'].has(key);
3760 });
3761
3762 // 23.3.3.5 WeakMap.prototype.set ( key , value )
3763 define(
3764 WeakMap.prototype, 'set',
3765 function set(key, value) {
3766 var M = strict(this);
3767 if (Type(M) !== 'object') throw TypeError();
3768 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3769 if (Type(key) !== 'object') throw TypeError('Expected object');
3770 M['[[WeakMapData]]'].set(key, value);
3771 return M;
3772 });
3773
3774 // 23.3.3.6 WeakMap.prototype [ @@toStringTag ]
3775 define(global.WeakMap.prototype, $$toStringTag, 'WeakMap');
3776
3777 // 23.3.4 Properties of WeakMap Instances
3778
3779 // Polyfills for incomplete native implementations:
3780 (function() {
3781 var wm = new global.WeakMap();
3782 var orig = global.WeakMap.prototype.set;
3783 define(global.WeakMap.prototype, 'set', function set() {
3784 orig.apply(this, arguments);
3785 return this;
3786 }, wm.set({}, 0) !== wm);
3787 }());
3788 }());
3789
3790 // ---------------------------------------
3791 // 23.4 WeakSet Objects
3792 // ---------------------------------------
3793
3794 (function() {
3795 // 23.4.1 The WeakSet Constructor
3796 // 23.4.1.1 WeakSet ( [ iterable ] )
3797 /** @constructor */
3798 function WeakSet(/*iterable*/) {
3799 var set = strict(this);
3800 var iterable = arguments[0];
3801
3802 if (Type(set) !== 'object') throw TypeError();
3803 if ('[[WeakSetData]]' in set) throw TypeError();
3804
3805 if (iterable !== undefined) {
3806 var adder = set['add'];
3807 if (!IsCallable(adder)) throw TypeError();
3808 var iter = GetIterator(ToObject(iterable));
3809 }
3810 set_internal(set, '[[WeakSetData]]', new EphemeronTable);
3811 if (iter === undefined) return set;
3812 while (true) {
3813 var next = IteratorStep(iter);
3814 if (next === false)
3815 return set;
3816 var nextValue = IteratorValue(next);
3817 adder.call(set, nextValue);
3818 }
3819
3820 return set;
3821 }
3822
3823 if (!('WeakSet' in global) || OVERRIDE_NATIVE_FOR_TESTING)
3824 global.WeakSet = WeakSet;
3825
3826 // 23.4.2 Properties of the WeakSet Constructor
3827 // 23.4.2.1 WeakSet.prototype
3828 var $WeakSetPrototype$ = {};
3829 WeakSet.prototype = $WeakSetPrototype$;
3830
3831 // 23.4.3 Properties of the WeakSet Prototype Object
3832 // 23.4.3.1 WeakSet.prototype.add (value )
3833 define(
3834 WeakSet.prototype, 'add',
3835 function add(value) {
3836 var S = strict(this);
3837 if (Type(S) !== 'object') throw TypeError();
3838 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3839 if (Type(value) !== 'object') throw TypeError('Expected object');
3840 S['[[WeakSetData]]'].set(value, true);
3841 return S;
3842 });
3843
3844 // 23.4.3.2 WeakSet.prototype.constructor
3845 // 23.4.3.3 WeakSet.prototype.delete ( value )
3846 define(
3847 WeakSet.prototype, 'delete',
3848 function delete_(value) {
3849 var S = strict(this);
3850 if (Type(S) !== 'object') throw TypeError();
3851 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3852 if (Type(value) !== 'object') throw TypeError('Expected object');
3853 return S['[[WeakSetData]]'].remove(value);
3854 });
3855
3856 // 23.4.3.4 WeakSet.prototype.has ( value )
3857 define(
3858 WeakSet.prototype, 'has',
3859 function has(key) {
3860 var S = strict(this);
3861 if (Type(S) !== 'object') throw TypeError();
3862 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3863 if (Type(key) !== 'object') throw TypeError('Expected object');
3864 return S['[[WeakSetData]]'].has(key);
3865 });
3866
3867 // 23.4.3.5 WeakSet.prototype [ @@toStringTag ]
3868 define(global.WeakSet.prototype, $$toStringTag, 'WeakSet');
3869
3870 // 23.4.4 Properties of WeakSet Instances
3871
3872 // Polyfills for incomplete native implementations:
3873 (function() {
3874 var ws = new global.WeakSet();
3875 var orig = global.WeakSet.prototype.add;
3876 define(global.WeakSet.prototype, 'add', function add() {
3877 orig.apply(this, arguments);
3878 return this;
3879 }, ws.add({}) !== ws);
3880 }());
3881 }());
3882
3883 // ---------------------------------------
3884 // 24 Structured Data
3885 // ---------------------------------------
3886
3887 // ---------------------------------------
3888 // 24.1 ArrayBuffer Objects
3889 // ---------------------------------------
3890
3891 // See typedarray.js for TypedArray polyfill
3892
3893 (function() {
3894 if (!('ArrayBuffer' in global))
3895 return;
3896
3897 // 24.1.1 Abstract Operations For ArrayBuffer Objects
3898 // 24.1.1.1 AllocateArrayBuffer( constructor, byteLength )
3899 // 24.1.1.2 IsDetachedBuffer( arrayBuffer )
3900 // 24.1.1.3 DetachArrayBuffer( arrayBuffer )
3901 // 24.1.1.4 CloneArrayBuffer( srcBuffer, srcByteOffset [, cloneConstructor] )
3902 // 24.1.1.5 GetValueFromBuffer ( arrayBuffer, byteIndex, type, isLittleEndian )
3903 // 24.1.1.6 SetValueInBuffer ( arrayBuffer, byteIndex, type, value, isLittleEndian )
3904 // 24.1.2 The ArrayBuffer Constructor
3905 // 24.1.2.1 ArrayBuffer( length )
3906 // 24.1.3 Properties of the ArrayBuffer Constructor
3907
3908 // 24.1.3.1 ArrayBuffer.isView ( arg )
3909 define(
3910 ArrayBuffer, 'isView',
3911 function isView(arg) {
3912 if (Type(arg) !== 'object') return false;
3913 if ('buffer' in arg && arg.buffer instanceof ArrayBuffer) return true;
3914 return false;
3915 });
3916
3917 // 24.1.3.2 ArrayBuffer.prototype
3918 // 24.1.3.3 get ArrayBuffer [ @@species ]
3919 // 24.1.4 Properties of the ArrayBuffer Prototype Object
3920 // 24.1.4.1 get ArrayBuffer.prototype.byteLength
3921 // 24.1.4.2 ArrayBuffer.prototype.constructor
3922 // 24.1.4.3 ArrayBuffer.prototype.slice ( start , end)
3923
3924 // 24.1.4.4 ArrayBuffer.prototype [ @@toStringTag ]
3925 define(ArrayBuffer.prototype, $$toStringTag, 'ArrayBuffer');
3926
3927 // 24.1.5 Properties of the ArrayBuffer Instances
3928 }());
3929
3930 // ---------------------------------------
3931 // 24.2 DataView Objects
3932 // ---------------------------------------
3933
3934 // See typedarray.js for TypedArray polyfill
3935
3936 (function() {
3937 if (!('DataView' in global))
3938 return;
3939
3940 // 24.2.1 Abstract Operations For DataView Objects
3941 // 24.2.1.1 GetViewValue(view, requestIndex, isLittleEndian, type)
3942 // 24.2.1.2 SetViewValue(view, requestIndex, isLittleEndian, type, value)
3943 // 24.2.2 The DataView Constructor
3944 // 24.2.2.1 DataView (buffer [ , byteOffset [ , byteLength ] ] )
3945 // 24.2.3 Properties of the DataView Constructor
3946 // 24.2.3.1 DataView.prototype
3947 // 24.2.4 Properties of the DataView Prototype Object
3948 // 24.2.4.1 get DataView.prototype.buffer
3949 // 24.2.4.2 get DataView.prototype.byteLength
3950 // 24.2.4.3 get DataView.prototype.byteOffset
3951 // 24.2.4.4 DataView.prototype.constructor
3952 // 24.2.4.5 DataView.prototype.getFloat32 ( byteOffset [ , littleEndian ] )
3953 // 24.2.4.6 DataView.prototype.getFloat64 ( byteOffset [ , littleEndian ] )
3954 // 24.2.4.7 DataView.prototype.getInt8 ( byteOffset )
3955 // 24.2.4.8 DataView.prototype.getInt16 ( byteOffset [ , littleEndian ] )
3956 // 24.2.4.9 DataView.prototype.getInt32 ( byteOffset [ , littleEndian ] )
3957 // 24.2.4.10 DataView.prototype.getUint8 ( byteOffset )
3958 // 24.2.4.11 DataView.prototype.getUint16 ( byteOffset [ , littleEndian ] )
3959 // 24.2.4.12 DataView.prototype.getUint32 ( byteOffset [ , littleEndian ] )
3960 // 24.2.4.13 DataView.prototype.setFloat32 ( byteOffset, value [ , littleEndian ] )
3961 // 24.2.4.14 DataView.prototype.setFloat64 ( byteOffset, value [ , littleEndian ] )
3962 // 24.2.4.15 DataView.prototype.setInt8 ( byteOffset, value )
3963 // 24.2.4.16 DataView.prototype.setInt16 ( byteOffset, value [ , littleEndian ] )
3964 // 24.2.4.17 DataView.prototype.setInt32 ( byteOffset, value [ , littleEndian ] )
3965 // 24.2.4.18 DataView.prototype.setUint8 ( byteOffset, value )
3966 // 24.2.4.19 DataView.prototype.setUint16 ( byteOffset, value [ , littleEndian ] )
3967 // 24.2.4.20 DataView.prototype.setUint32 ( byteOffset, value [ , littleEndian ] )
3968
3969 // 24.2.4.21 DataView.prototype[ @@toStringTag ]
3970 define(DataView.prototype, $$toStringTag, 'DataView');
3971
3972 // 24.2.5 Properties of DataView Instances
3973 }());
3974
3975 // ---------------------------------------
3976 // 24.3 The JSON Object
3977 // ---------------------------------------
3978
3979 // 24.3.1 JSON.parse ( text [ , reviver ] )
3980 // 24.3.2 JSON.stringify ( value [ , replacer [ , space ] ] )
3981 // 24.3.3 JSON [ @@toStringTag ]
3982 define(JSON, $$toStringTag, 'JSON');
3983
3984 // ---------------------------------------
3985 // 25.1 Iteration
3986 // ---------------------------------------
3987
3988 // 25.1.1 Common Iteration Interfaces
3989 // 25.1.1.1 The Iterable Interface
3990 // 25.1.1.2 The Iterator Interface
3991 // 25.1.1.3 The IteratorResult Interface
3992
3993 // 25.1.2 The %IteratorPrototype% Object
3994 // Defined earlier, so other prototypes can reference it.
3995 // 25.1.2.1 %IteratorPrototype% [ @@iterator ] ( )
3996 define($IteratorPrototype$, $$iterator, function() {
3997 return this;
3998 });
3999
4000
4001 // ---------------------------------------
4002 // 25.4 Promise Objects
4003 // ---------------------------------------
4004
4005 (function() {
4006 // 25.4 Promise Objects
4007
4008 // 25.4.1 Promise Abstract Operations
4009
4010 // 25.4.1.1 PromiseCapability Records
4011 // 25.4.1.1.1 IfAbruptRejectPromise ( value, capability )
4012
4013 function IfAbruptRejectPromise(value, capability) {
4014 var rejectResult = capability['[[Reject]]'].call(undefined, value);
4015 return capability['[[Promise]]'];
4016 }
4017
4018 // 25.4.1.2 PromiseReaction Records
4019
4020 // 25.4.1.3 CreateResolvingFunctions ( promise )
4021
4022 function CreateResolvingFunctions(promise) {
4023 var alreadyResolved = {'[[value]]': false};
4024 var resolve = PromiseResolveFunction();
4025 set_internal(resolve, '[[Promise]]', promise);
4026 set_internal(resolve, '[[AlreadyResolved]]', alreadyResolved);
4027 var reject = PromiseRejectFunction();
4028 set_internal(reject, '[[Promise]]', promise);
4029 set_internal(reject, '[[AlreadyResolved]]', alreadyResolved);
4030 return { '[[Resolve]]': resolve, '[[Reject]]': reject};
4031 }
4032
4033 // 25.4.1.3.1 Promise Reject Functions
4034
4035 function PromiseRejectFunction() {
4036 var F = function(reason) {
4037 console.assert(Type(F['[[Promise]]']) === 'object');
4038 var promise = F['[[Promise]]'];
4039 var alreadyResolved = F['[[AlreadyResolved]]'];
4040 if (alreadyResolved['[[value]]']) return undefined;
4041 set_internal(alreadyResolved, '[[value]]', true);
4042 return RejectPromise(promise, reason);
4043 };
4044 return F;
4045 }
4046
4047 // 25.4.1.3.2 Promise Resolve Functions
4048
4049 function PromiseResolveFunction() {
4050 var F = function(resolution) {
4051 console.assert(Type(F['[[Promise]]']) === 'object');
4052 var promise = F['[[Promise]]'];
4053 var alreadyResolved = F['[[AlreadyResolved]]'];
4054 if (alreadyResolved['[[value]]']) return undefined;
4055 set_internal(alreadyResolved, '[[value]]', true);
4056
4057 if (SameValue(resolution, promise)) {
4058 var selfResolutionError = TypeError();
4059 return RejectPromise(promise, selfResolutionError);
4060 }
4061 if (Type(resolution) !== 'object')
4062 return FulfillPromise(promise, resolution);
4063 try {
4064 var then = resolution['then'];
4065 } catch(then) {
4066 return RejectPromise(promise, then);
4067 }
4068 if (!IsCallable(then))
4069 return FulfillPromise(promise, resolution);
4070 EnqueueJob('PromiseJobs', PromiseResolveThenableJob, [promise, resolution, then]);
4071 return undefined;
4072 };
4073 return F;
4074 }
4075
4076 // 25.4.1.4 FulfillPromise ( promise, value )
4077
4078 function FulfillPromise(promise, value) {
4079 console.assert(promise['[[PromiseState]]'] === 'pending');
4080 var reactions = promise['[[PromiseFulfillReactions]]'];
4081 set_internal(promise, '[[PromiseResult]]', value);
4082 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
4083 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
4084 set_internal(promise, '[[PromiseState]]', 'fulfilled');
4085 return TriggerPromiseReactions(reactions, value);
4086 }
4087
4088 // 25.4.1.5 NewPromiseCapability ( C )
4089
4090 function NewPromiseCapability(c) {
4091 // To keep Promise hermetic, this doesn't look much like the spec.
4092 return CreatePromiseCapabilityRecord(undefined, c);
4093 }
4094
4095 // 25.4.1.5.1 CreatePromiseCapabilityRecord ( promise, constructor )
4096
4097 function CreatePromiseCapabilityRecord(promise, constructor) {
4098 // To keep Promise hermetic, this doesn't look much like the spec.
4099 console.assert(IsConstructor(constructor));
4100 var promiseCapability = {};
4101 set_internal(promiseCapability, '[[Promise]]', promise);
4102 set_internal(promiseCapability, '[[Resolve]]', undefined);
4103 set_internal(promiseCapability, '[[Reject]]', undefined);
4104 var executor = GetCapabilitiesExecutor();
4105 set_internal(executor, '[[Capability]]', promiseCapability);
4106
4107 // NOTE: Differs from spec; object is constructed here
4108 var constructorResult = promise = new constructor(executor);
4109 set_internal(promiseCapability, '[[Promise]]', promise);
4110
4111 if (!IsCallable(promiseCapability['[[Resolve]]'])) throw TypeError();
4112 if (!IsCallable(promiseCapability['[[Reject]]'])) throw TypeError();
4113 if (Type(constructorResult) === 'object' && !SameValue(promise, constructorResult)) throw TypeError();
4114 return promiseCapability;
4115 }
4116
4117 // 25.4.1.5.2 GetCapabilitiesExecutor Functions
4118
4119 function GetCapabilitiesExecutor() {
4120 var F = function(resolve, reject) {
4121 console.assert(F['[[Capability]]']);
4122 var promiseCapability = F['[[Capability]]'];
4123 if (promiseCapability['[[Resolve]]'] !== undefined) throw TypeError();
4124 if (promiseCapability['[[Reject]]'] !== undefined) throw TypeError();
4125 set_internal(promiseCapability, '[[Resolve]]', resolve);
4126 set_internal(promiseCapability, '[[Reject]]', reject);
4127 return undefined;
4128 };
4129 return F;
4130 }
4131
4132 // 25.4.1.6 IsPromise ( x )
4133
4134 function IsPromise(x) {
4135 if (Type(x) !== 'object') return false;
4136 if (!('[[PromiseState]]' in x)) return false;
4137 if (x['[[PromiseState]]'] === undefined) return false;
4138 return true;
4139 }
4140
4141 // 25.4.1.7 RejectPromise ( promise, reason )
4142
4143 function RejectPromise(promise, reason) {
4144 console.assert(promise['[[PromiseState]]'] === 'pending');
4145 var reactions = promise['[[PromiseRejectReactions]]'];
4146 set_internal(promise, '[[PromiseResult]]', reason);
4147 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
4148 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
4149 set_internal(promise, '[[PromiseState]]', 'rejected');
4150 return TriggerPromiseReactions(reactions, reason);
4151 }
4152
4153 // 25.4.1.8 TriggerPromiseReactions ( reactions, argument )
4154
4155 function TriggerPromiseReactions(reactions, argument) {
4156 for (var i = 0, len = reactions.length; i < len; ++i)
4157 EnqueueJob('PromiseJobs', PromiseReactionJob, [reactions[i], argument]);
4158 return undefined;
4159 }
4160
4161 // 25.4.2 Promise Jobs
4162
4163 // 25.4.2.1 PromiseReactionJob ( reaction, argument )
4164
4165 function PromiseReactionJob(reaction, argument) {
4166 var promiseCapability = reaction['[[Capabilities]]'];
4167 var handler = reaction['[[Handler]]'];
4168 var handlerResult, status;
4169 try {
4170 if (handler === 'Identity') handlerResult = argument;
4171 else if (handler === 'Thrower') throw argument;
4172 else handlerResult = handler.call(undefined, argument);
4173 } catch (handlerResult) {
4174 status = promiseCapability['[[Reject]]'].call(undefined, handlerResult);
4175 NextJob(status); return;
4176 }
4177 status = promiseCapability['[[Resolve]]'].call(undefined, handlerResult);
4178 NextJob(status);
4179 }
4180
4181 // 25.4.2.2 PromiseResolveThenableJob ( promiseToResolve, thenable, then)
4182
4183 function PromiseResolveThenableJob(promiseToResolve, thenable, then) {
4184 // SPEC BUG: promise vs. promiseToResolve
4185 var resolvingFunctions = CreateResolvingFunctions(promiseToResolve);
4186 try {
4187 var thenCallResult = then.call(thenable, resolvingFunctions['[[Resolve]]'],
4188 resolvingFunctions['[[Reject]]']);
4189 } catch (thenCallResult) {
4190 var status = resolvingFunctions['[[Reject]]'].call(undefined, thenCallResult);
4191 NextJob(status); return;
4192 }
4193 NextJob(thenCallResult);
4194 }
4195
4196 // 25.4.3 The Promise Constructor
4197
4198 // 25.4.3.1 Promise ( executor )
4199
4200 function Promise(executor) {
4201 var config = { configurable: false, enumerable: false, writable: true, value: undefined };
4202 Object.defineProperty(this, '[[PromiseState]]', config);
4203 Object.defineProperty(this, '[[PromiseConstructor]]', config);
4204 Object.defineProperty(this, '[[PromiseResult]]', config);
4205 Object.defineProperty(this, '[[PromiseFulfillReactions]]', config);
4206 Object.defineProperty(this, '[[PromiseRejectReactions]]', config);
4207
4208 var promise = this;
4209 if (Type(promise) !== 'object') throw new TypeError();
4210 if (!('[[PromiseState]]' in promise)) throw TypeError();
4211 if (promise['[[PromiseState]]'] !== undefined) throw TypeError();
4212 if (!IsCallable(executor)) throw TypeError();
4213
4214 set_internal(promise, '[[PromiseConstructor]]', Promise);
4215
4216 return InitializePromise(promise, executor);
4217 }
4218
4219 // 25.4.3.1.1 InitializePromise ( promise, executor )
4220
4221 function InitializePromise(promise, executor) {
4222 console.assert('[[PromiseState]]' in promise);
4223 console.assert(IsCallable(executor));
4224 set_internal(promise, '[[PromiseState]]', 'pending');
4225 set_internal(promise, '[[PromiseFulfillReactions]]', []);
4226 set_internal(promise, '[[PromiseRejectReactions]]', []);
4227 var resolvingFunctions = CreateResolvingFunctions(promise);
4228 try {
4229 var completion = executor.call(undefined, resolvingFunctions['[[Resolve]]'],
4230 resolvingFunctions['[[Reject]]']);
4231 } catch (completion) {
4232 var status = resolvingFunctions['[[Reject]]'].call(undefined, completion);
4233 }
4234 return promise;
4235 }
4236
4237 // 25.4.4 Properties of the Promise Constructor
4238 // 25.4.4.1 Promise.all ( iterable )
4239
4240 define(Promise, 'all', function all(iterable) {
4241 var c = strict(this);
4242 var promiseCapability = NewPromiseCapability(c);
4243 try {
4244 var iterator = GetIterator(iterable);
4245 } catch (value) {
4246 promiseCapability['[[Reject]]'].call(undefined, value);
4247 return promiseCapability['[[Promise]]'];
4248 }
4249 var values = [];
4250 var remainingElementsCount = { value: 1 };
4251 var index = 0;
4252 while (true) {
4253 try {
4254 var next = IteratorStep(iterator);
4255 } catch (value) {
4256 promiseCapability['[[Reject]]'].call(undefined, value);
4257 return promiseCapability['[[Promise]]'];
4258 }
4259 if (!next) {
4260 remainingElementsCount.value -= 1;
4261 if (remainingElementsCount.value === 0) {
4262 var resolveResult = promiseCapability['[[Resolve]]'].apply(undefined, values);
4263
4264
4265 }
4266 return promiseCapability['[[Promise]]'];
4267 }
4268 try {
4269 var nextValue = IteratorValue(next);
4270 } catch (value) {
4271 promiseCapability['[[Reject]]'].call(undefined, value);
4272 return promiseCapability['[[Promise]]'];
4273 }
4274 try {
4275 var nextPromise = c.resolve(nextValue);
4276 } catch (value) {
4277 promiseCapability['[[Reject]]'].call(undefined, value);
4278 return promiseCapability['[[Promise]]'];
4279 }
4280 var resolveElement = PromiseAllResolveElementFunction();
4281 set_internal(resolveElement, '[[AlreadyCalled]]', { value: false });
4282 set_internal(resolveElement, '[[Index]]', index);
4283 set_internal(resolveElement, '[[Values]]', values);
4284 set_internal(resolveElement, '[[Capabilities]]', promiseCapability);
4285 set_internal(resolveElement, '[[RemainingElements]]', remainingElementsCount);
4286 remainingElementsCount.value += 1;
4287 try {
4288 var result = nextPromise.then(resolveElement, promiseCapability['[[Reject]]']);
4289 } catch (value) {
4290 promiseCapability['[[Reject]]'].call(undefined, value);
4291 return promiseCapability['[[Promise]]'];
4292 }
4293 index += 1;
4294 }
4295 });
4296
4297 // 25.4.4.1.1 Promise.all Resolve Element Functions
4298
4299 function PromiseAllResolveElementFunction() {
4300 var F = function(x) {
4301 var alreadyCalled = F['[[AlreadyCalled]]'];
4302 if (alreadyCalled.value) return undefined;
4303 alreadyCalled.value = true;
4304 var index = F['[[Index]]'];
4305 var values = F['[[Values]]'];
4306 var promiseCapability = F['[[Capabilities]]'];
4307 var remainingElementsCount = F['[[RemainingElements]]'];
4308 try {
4309 values[index] = x;
4310 } catch (result) {
4311 promiseCapability['[[Reject]]'].call(undefined, result);
4312 return promiseCapability['[[Promise]]'];
4313 }
4314 remainingElementsCount.value -= 1;
4315 if (remainingElementsCount.value === 0)
4316 return promiseCapability['[[Resolve]]'].call(undefined, values);
4317 return undefined;
4318 };
4319 return F;
4320 }
4321
4322 // 25.4.4.2 Promise.prototype
4323
4324 Promise.prototype = {};
4325
4326 // 25.4.4.3 Promise.race ( iterable )
4327
4328 define(Promise, 'race', function race(iterable) {
4329 var c = strict(this);
4330 var promiseCapability = NewPromiseCapability(c);
4331 try {
4332 var iterator = GetIterator(iterable);
4333 } catch (value) {
4334 promiseCapability['[[Reject]]'].call(undefined, value);
4335 return promiseCapability['[[Promise]]'];
4336 }
4337 while (true) {
4338 try {
4339 var next = IteratorStep(iterator);
4340 } catch (value) {
4341 promiseCapability['[[Reject]]'].call(undefined, value);
4342 return promiseCapability['[[Promise]]'];
4343 }
4344 if (!next) return promiseCapability['[[Promise]]'];
4345 try {
4346 var nextValue = IteratorValue(next);
4347 } catch (value) {
4348 promiseCapability['[[Reject]]'].call(undefined, value);
4349 return promiseCapability['[[Promise]]'];
4350 }
4351 try {
4352 var nextPromise = c.resolve(nextValue);
4353 } catch (value) {
4354 promiseCapability['[[Reject]]'].call(undefined, value);
4355 return promiseCapability['[[Promise]]'];
4356 }
4357 try {
4358 nextPromise.then(promiseCapability['[[Resolve]]'], promiseCapability['[[Reject]]']);
4359 } catch (value) {
4360 promiseCapability['[[Reject]]'].call(undefined, value);
4361 return promiseCapability['[[Promise]]'];
4362 }
4363 }
4364 });
4365
4366 // 25.4.4.4 Promise.reject ( r )
4367
4368 define(Promise, 'reject', function reject(r) {
4369 var c = strict(this);
4370 var promiseCapability = NewPromiseCapability(c);
4371 var rejectResult = promiseCapability['[[Reject]]'].call(undefined, r);
4372 return promiseCapability['[[Promise]]'];
4373 });
4374
4375 // 25.4.4.5 Promise.resolve ( x )
4376
4377 define(Promise, 'resolve', function resolve(x) {
4378 var c = strict(this);
4379 if (IsPromise(x)) {
4380 var constructor = x['[[PromiseConstructor]]'];
4381 if (SameValue(constructor, c)) return x;
4382 }
4383 var promiseCapability = NewPromiseCapability(c);
4384 var resolveResult = promiseCapability['[[Resolve]]'].call(undefined, x);
4385 return promiseCapability['[[Promise]]'];
4386 });
4387
4388 // 25.4.4.6 Promise [ @@create ] ( )
4389 // 25.4.4.6.1 AllocatePromise ( constructor )
4390 // 25.4.5 Properties of the Promise Prototype Object
4391 // 25.4.5.1 Promise.prototype.catch ( onRejected )
4392
4393 define(Promise.prototype, 'catch', function catch_(onRejected) {
4394 var promise = this;
4395 return promise.then(undefined, onRejected);
4396 });
4397
4398 // 25.4.5.2 Promise.prototype.constructor
4399
4400 Promise.prototype.constructor = Promise;
4401
4402 // 25.4.5.3 Promise.prototype.then ( onFulfilled , onRejected )
4403
4404 define(Promise.prototype, 'then', function then(onFulfilled, onRejected) {
4405 var promise = this;
4406 if (!IsPromise(promise)) throw TypeError();
4407 if (!IsCallable(onFulfilled)) onFulfilled = 'Identity';
4408 if (!IsCallable(onRejected)) onRejected = 'Thrower';
4409 var c = promise.constructor;
4410 var promiseCapability = NewPromiseCapability(c);
4411 var fulfillReaction = { '[[Capabilities]]': promiseCapability,
4412 '[[Handler]]': onFulfilled };
4413 var rejectReaction = { '[[Capabilities]]': promiseCapability,
4414 '[[Handler]]': onRejected };
4415 if (promise['[[PromiseState]]'] === 'pending') {
4416 promise['[[PromiseFulfillReactions]]'].push(fulfillReaction);
4417 promise['[[PromiseRejectReactions]]'].push(rejectReaction);
4418 } else if (promise['[[PromiseState]]'] === 'fulfilled') {
4419 var value = promise['[[PromiseResult]]'];
4420 EnqueueJob('PromiseJobs', PromiseReactionJob, [fulfillReaction, value]);
4421 } else if (promise['[[PromiseState]]'] === 'rejected') {
4422 var reason = promise['[[PromiseResult]]'];
4423 EnqueueJob('PromiseJobs', PromiseReactionJob, [rejectReaction, reason]);
4424 }
4425 return promiseCapability['[[Promise]]'];
4426 });
4427
4428 // 25.4.6 Properties of Promise Instances
4429
4430 if (!('Promise' in global) || OVERRIDE_NATIVE_FOR_TESTING)
4431 global.Promise = Promise;
4432
4433 // Patch early Promise.cast vs. Promise.resolve implementations
4434 if ('cast' in global.Promise) global.Promise.resolve = global.Promise.cast;
4435 }());
4436
4437 // 25.4.5.1 Promise.prototype [ @@toStringTag ]
4438 define(Promise.prototype, $$toStringTag, 'Promise');
4439
4440 // ---------------------------------------
4441 // 26 Reflection
4442 // ---------------------------------------
4443
4444 (function() {
4445 // 26.1 The Reflect Object
4446 if (!('Reflect' in global) || OVERRIDE_NATIVE_FOR_TESTING)
4447 global.Reflect = {};
4448
4449 // 26.1.1 Reflect.apply ( target, thisArgument, argumentsList )
4450 define(
4451 Reflect, 'apply',
4452 function apply(target, thisArgument, argumentsList) {
4453 if (!IsCallable(target)) throw TypeError();
4454 return Function.prototype.apply.call(target, thisArgument, argumentsList);
4455 });
4456
4457 // 26.1.2 Reflect.construct ( target, argumentsList [, newTarget] )
4458 define(
4459 Reflect, 'construct',
4460 function construct(target, argumentsList) {
4461 return __cons(target, argumentsList);
4462 });
4463
4464 // 26.1.3 Reflect.defineProperty ( target, propertyKey, attributes )
4465 define(
4466 Reflect, 'defineProperty',
4467 function defineProperty(target, propertyKey, attributes) {
4468 try {
4469 Object.defineProperty(target, propertyKey, attributes);
4470 return true;
4471 } catch (_) {
4472 return false;
4473 }
4474 });
4475
4476 // 26.1.4 Reflect.deleteProperty ( target, propertyKey )
4477 define(
4478 Reflect, 'deleteProperty',
4479 function deleteProperty(target,name) {
4480 try {
4481 delete target[name];
4482 return !HasOwnProperty(target, name);
4483 } catch (_) {
4484 return false;
4485 }
4486 });
4487
4488 // 26.1.5 Reflect.enumerate ( target )
4489 define(
4490 Reflect, 'enumerate',
4491 function enumerate(target) {
4492 target = ToObject(target);
4493 var iterator = Enumerate(target);
4494 return iterator;
4495 });
4496
4497 // 26.1.6 Reflect.get ( target, propertyKey [ , receiver ])
4498 define(
4499 Reflect, 'get',
4500 function get(target, name, receiver) {
4501 target = ToObject(target);
4502 name = String(name);
4503 receiver = (receiver === undefined) ? target : ToObject(receiver);
4504 var desc = getPropertyDescriptor(target, name);
4505 if (desc && 'get' in desc)
4506 return Function.prototype.call.call(desc['get'], receiver);
4507 return target[name];
4508 });
4509
4510 // 26.1.7 Reflect.getOwnPropertyDescriptor ( target, propertyKey )
4511 define(
4512 Reflect, 'getOwnPropertyDescriptor',
4513 Object.getOwnPropertyDescriptor);
4514
4515 // 26.1.8 Reflect.getPrototypeOf ( target )
4516 define(
4517 Reflect, 'getPrototypeOf',
4518 Object.getPrototypeOf);
4519
4520 // 26.1.9 Reflect.has ( target, propertyKey )
4521 define(
4522 Reflect, 'has',
4523 function has(target,name) {
4524 return String(name) in ToObject(target);
4525 });
4526
4527 // 26.1.10 Reflect.isExtensible (target)
4528 define(
4529 Reflect, 'isExtensible',
4530 Object.isExtensible);
4531
4532 // 26.1.11 Reflect.ownKeys ( target )
4533 define(
4534 Reflect, 'ownKeys',
4535 function ownKeys(target) {
4536 var obj = ToObject(target);
4537 return Object.getOwnPropertyNames(obj);
4538 });
4539
4540 // 26.1.12 Reflect.preventExtensions ( target )
4541 define(
4542 Reflect, 'preventExtensions',
4543 function preventExtensions(target) {
4544 try { Object.preventExtensions(target); return true; } catch (_) { return false; }
4545 });
4546
4547 // 26.1.13 Reflect.set ( target, propertyKey, V [ , receiver ] )
4548 define(
4549 Reflect, 'set',
4550 function set(target, name, value, receiver) {
4551 target = ToObject(target);
4552 name = String(name);
4553 receiver = (receiver === undefined) ? target : ToObject(receiver);
4554 var desc = getPropertyDescriptor(target, name);
4555 try {
4556 if (desc && 'set' in desc)
4557 Function.prototype.call.call(desc['set'], receiver, value);
4558 else
4559 target[name] = value;
4560 return true;
4561 } catch (_) {
4562 return false;
4563 }
4564 });
4565
4566 // 26.1.14 Reflect.setPrototypeOf ( target, proto )
4567 define(
4568 Reflect, 'setPrototypeOf',
4569 function setPrototypeOf(target, proto) {
4570 try {
4571 target.__proto__ = proto;
4572 return Reflect.getPrototypeOf(target) === proto;
4573 } catch(_) {
4574 return false;
4575 }
4576 });
4577
4578 }());
4579
4580 // ---------------------------------------
4581 // 26.2 Proxy Objects
4582 // ---------------------------------------
4583
4584 // Not polyfillable.
4585
4586}(self));
4587
4588// This helper is defined outside the main scope so that the use of
4589// 'eval' does not taint the scope for minifiers.
4590function __cons(t, a) {
4591 return eval('new t(' + a.map(function(_, i) { return 'a[' + i + ']'; }).join(',') + ')');
4592}
6e0f24b1 4593</script>
8a1f452d 4594 <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.foo = 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){
4595'use strict'
4596
4597exports.byteLength = byteLength
4598exports.toByteArray = toByteArray
4599exports.fromByteArray = fromByteArray
4600
4601var lookup = []
4602var revLookup = []
4603var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
4604
4605var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
4606for (var i = 0, len = code.length; i < len; ++i) {
4607 lookup[i] = code[i]
4608 revLookup[code.charCodeAt(i)] = i
4609}
4610
4611revLookup['-'.charCodeAt(0)] = 62
4612revLookup['_'.charCodeAt(0)] = 63
4613
4614function placeHoldersCount (b64) {
4615 var len = b64.length
4616 if (len % 4 > 0) {
4617 throw new Error('Invalid string. Length must be a multiple of 4')
4618 }
4619
4620 // the number of equal signs (place holders)
4621 // if there are two placeholders, than the two characters before it
4622 // represent one byte
4623 // if there is only one, then the three characters before it represent 2 bytes
4624 // this is just a cheap hack to not do indexOf twice
4625 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
4626}
4627
4628function byteLength (b64) {
4629 // base64 is 4/3 + up to two characters of the original data
4630 return b64.length * 3 / 4 - placeHoldersCount(b64)
4631}
4632
4633function toByteArray (b64) {
4634 var i, j, l, tmp, placeHolders, arr
4635 var len = b64.length
4636 placeHolders = placeHoldersCount(b64)
4637
4638 arr = new Arr(len * 3 / 4 - placeHolders)
4639
4640 // if there are placeholders, only get up to the last complete 4 chars
4641 l = placeHolders > 0 ? len - 4 : len
4642
4643 var L = 0
4644
4645 for (i = 0, j = 0; i < l; i += 4, j += 3) {
4646 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
4647 arr[L++] = (tmp >> 16) & 0xFF
4648 arr[L++] = (tmp >> 8) & 0xFF
4649 arr[L++] = tmp & 0xFF
4650 }
4651
4652 if (placeHolders === 2) {
4653 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
4654 arr[L++] = tmp & 0xFF
4655 } else if (placeHolders === 1) {
4656 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
4657 arr[L++] = (tmp >> 8) & 0xFF
4658 arr[L++] = tmp & 0xFF
4659 }
4660
4661 return arr
4662}
4663
4664function tripletToBase64 (num) {
4665 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
4666}
4667
4668function encodeChunk (uint8, start, end) {
4669 var tmp
4670 var output = []
4671 for (var i = start; i < end; i += 3) {
4672 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
4673 output.push(tripletToBase64(tmp))
4674 }
4675 return output.join('')
4676}
4677
4678function fromByteArray (uint8) {
4679 var tmp
4680 var len = uint8.length
4681 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
4682 var output = ''
4683 var parts = []
4684 var maxChunkLength = 16383 // must be multiple of 3
4685
4686 // go through the array every three bytes, we'll deal with trailing stuff later
4687 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
4688 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
4689 }
4690
4691 // pad the end with zeros, but make sure to not forget the extra bytes
4692 if (extraBytes === 1) {
4693 tmp = uint8[len - 1]
4694 output += lookup[tmp >> 2]
4695 output += lookup[(tmp << 4) & 0x3F]
4696 output += '=='
4697 } else if (extraBytes === 2) {
4698 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
4699 output += lookup[tmp >> 10]
4700 output += lookup[(tmp >> 4) & 0x3F]
4701 output += lookup[(tmp << 2) & 0x3F]
4702 output += '='
4703 }
4704
4705 parts.push(output)
4706
4707 return parts.join('')
4708}
4709
4710},{}],2:[function(require,module,exports){
4711/*!
4712 * The buffer module from node.js, for the browser.
4713 *
4714 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
4715 * @license MIT
4716 */
4717/* eslint-disable no-proto */
4718
4719'use strict'
4720
4721var base64 = require('base64-js')
4722var ieee754 = require('ieee754')
4723
4724exports.Buffer = Buffer
4725exports.SlowBuffer = SlowBuffer
4726exports.INSPECT_MAX_BYTES = 50
4727
4728var K_MAX_LENGTH = 0x7fffffff
4729exports.kMaxLength = K_MAX_LENGTH
4730
4731/**
4732 * If `Buffer.TYPED_ARRAY_SUPPORT`:
4733 * === true Use Uint8Array implementation (fastest)
4734 * === false Print warning and recommend using `buffer` v4.x which has an Object
4735 * implementation (most compatible, even IE6)
4736 *
4737 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
4738 * Opera 11.6+, iOS 4.2+.
4739 *
4740 * We report that the browser does not support typed arrays if the are not subclassable
4741 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
4742 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
4743 * for __proto__ and has a buggy typed array implementation.
4744 */
4745Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
4746
4747if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
4748 typeof console.error === 'function') {
4749 console.error(
4750 'This browser lacks typed array (Uint8Array) support which is required by ' +
4751 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
4752 )
4753}
4754
4755function typedArraySupport () {
4756 // Can typed array instances can be augmented?
4757 try {
4758 var arr = new Uint8Array(1)
4759 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
4760 return arr.foo() === 42
4761 } catch (e) {
4762 return false
4763 }
4764}
4765
4766function createBuffer (length) {
4767 if (length > K_MAX_LENGTH) {
4768 throw new RangeError('Invalid typed array length')
4769 }
4770 // Return an augmented `Uint8Array` instance
4771 var buf = new Uint8Array(length)
4772 buf.__proto__ = Buffer.prototype
4773 return buf
4774}
4775
4776/**
4777 * The Buffer constructor returns instances of `Uint8Array` that have their
4778 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
4779 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
4780 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
4781 * returns a single octet.
4782 *
4783 * The `Uint8Array` prototype remains unmodified.
4784 */
4785
4786function Buffer (arg, encodingOrOffset, length) {
4787 // Common case.
4788 if (typeof arg === 'number') {
4789 if (typeof encodingOrOffset === 'string') {
4790 throw new Error(
4791 'If encoding is specified then the first argument must be a string'
4792 )
4793 }
4794 return allocUnsafe(arg)
4795 }
4796 return from(arg, encodingOrOffset, length)
4797}
4798
4799// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
4800if (typeof Symbol !== 'undefined' && Symbol.species &&
4801 Buffer[Symbol.species] === Buffer) {
4802 Object.defineProperty(Buffer, Symbol.species, {
4803 value: null,
4804 configurable: true,
4805 enumerable: false,
4806 writable: false
4807 })
4808}
4809
4810Buffer.poolSize = 8192 // not used by this implementation
4811
4812function from (value, encodingOrOffset, length) {
4813 if (typeof value === 'number') {
4814 throw new TypeError('"value" argument must not be a number')
4815 }
4816
4817 if (value instanceof ArrayBuffer) {
4818 return fromArrayBuffer(value, encodingOrOffset, length)
4819 }
4820
4821 if (typeof value === 'string') {
4822 return fromString(value, encodingOrOffset)
4823 }
4824
4825 return fromObject(value)
4826}
4827
4828/**
4829 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
4830 * if value is a number.
4831 * Buffer.from(str[, encoding])
4832 * Buffer.from(array)
4833 * Buffer.from(buffer)
4834 * Buffer.from(arrayBuffer[, byteOffset[, length]])
4835 **/
4836Buffer.from = function (value, encodingOrOffset, length) {
4837 return from(value, encodingOrOffset, length)
4838}
4839
4840// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
4841// https://github.com/feross/buffer/pull/148
4842Buffer.prototype.__proto__ = Uint8Array.prototype
4843Buffer.__proto__ = Uint8Array
4844
4845function assertSize (size) {
4846 if (typeof size !== 'number') {
4847 throw new TypeError('"size" argument must be a number')
4848 } else if (size < 0) {
4849 throw new RangeError('"size" argument must not be negative')
4850 }
4851}
4852
4853function alloc (size, fill, encoding) {
4854 assertSize(size)
4855 if (size <= 0) {
4856 return createBuffer(size)
4857 }
4858 if (fill !== undefined) {
4859 // Only pay attention to encoding if it's a string. This
4860 // prevents accidentally sending in a number that would
4861 // be interpretted as a start offset.
4862 return typeof encoding === 'string'
4863 ? createBuffer(size).fill(fill, encoding)
4864 : createBuffer(size).fill(fill)
4865 }
4866 return createBuffer(size)
4867}
4868
4869/**
4870 * Creates a new filled Buffer instance.
4871 * alloc(size[, fill[, encoding]])
4872 **/
4873Buffer.alloc = function (size, fill, encoding) {
4874 return alloc(size, fill, encoding)
4875}
4876
4877function allocUnsafe (size) {
4878 assertSize(size)
4879 return createBuffer(size < 0 ? 0 : checked(size) | 0)
4880}
4881
4882/**
4883 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
4884 * */
4885Buffer.allocUnsafe = function (size) {
4886 return allocUnsafe(size)
4887}
4888/**
4889 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
4890 */
4891Buffer.allocUnsafeSlow = function (size) {
4892 return allocUnsafe(size)
4893}
4894
4895function fromString (string, encoding) {
4896 if (typeof encoding !== 'string' || encoding === '') {
4897 encoding = 'utf8'
4898 }
4899
4900 if (!Buffer.isEncoding(encoding)) {
4901 throw new TypeError('"encoding" must be a valid string encoding')
4902 }
4903
4904 var length = byteLength(string, encoding) | 0
4905 var buf = createBuffer(length)
4906
4907 var actual = buf.write(string, encoding)
4908
4909 if (actual !== length) {
4910 // Writing a hex string, for example, that contains invalid characters will
4911 // cause everything after the first invalid character to be ignored. (e.g.
4912 // 'abxxcd' will be treated as 'ab')
4913 buf = buf.slice(0, actual)
4914 }
4915
4916 return buf
4917}
4918
4919function fromArrayLike (array) {
4920 var length = array.length < 0 ? 0 : checked(array.length) | 0
4921 var buf = createBuffer(length)
4922 for (var i = 0; i < length; i += 1) {
4923 buf[i] = array[i] & 255
4924 }
4925 return buf
4926}
4927
4928function fromArrayBuffer (array, byteOffset, length) {
4929 if (byteOffset < 0 || array.byteLength < byteOffset) {
4930 throw new RangeError('\'offset\' is out of bounds')
4931 }
4932
4933 if (array.byteLength < byteOffset + (length || 0)) {
4934 throw new RangeError('\'length\' is out of bounds')
4935 }
4936
4937 var buf
4938 if (byteOffset === undefined && length === undefined) {
4939 buf = new Uint8Array(array)
4940 } else if (length === undefined) {
4941 buf = new Uint8Array(array, byteOffset)
4942 } else {
4943 buf = new Uint8Array(array, byteOffset, length)
4944 }
4945
4946 // Return an augmented `Uint8Array` instance
4947 buf.__proto__ = Buffer.prototype
4948 return buf
4949}
4950
4951function fromObject (obj) {
4952 if (Buffer.isBuffer(obj)) {
4953 var len = checked(obj.length) | 0
4954 var buf = createBuffer(len)
4955
4956 if (buf.length === 0) {
4957 return buf
4958 }
4959
4960 obj.copy(buf, 0, 0, len)
4961 return buf
4962 }
4963
4964 if (obj) {
4965 if (isArrayBufferView(obj) || 'length' in obj) {
4966 if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
4967 return createBuffer(0)
4968 }
4969 return fromArrayLike(obj)
4970 }
4971
4972 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
4973 return fromArrayLike(obj.data)
4974 }
4975 }
4976
4977 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
4978}
4979
4980function checked (length) {
4981 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
4982 // length is NaN (which is otherwise coerced to zero.)
4983 if (length >= K_MAX_LENGTH) {
4984 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
4985 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
4986 }
4987 return length | 0
4988}
4989
4990function SlowBuffer (length) {
4991 if (+length != length) { // eslint-disable-line eqeqeq
4992 length = 0
4993 }
4994 return Buffer.alloc(+length)
4995}
4996
4997Buffer.isBuffer = function isBuffer (b) {
4998 return b != null && b._isBuffer === true
4999}
5000
5001Buffer.compare = function compare (a, b) {
5002 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
5003 throw new TypeError('Arguments must be Buffers')
5004 }
5005
5006 if (a === b) return 0
5007
5008 var x = a.length
5009 var y = b.length
5010
5011 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
5012 if (a[i] !== b[i]) {
5013 x = a[i]
5014 y = b[i]
5015 break
5016 }
5017 }
5018
5019 if (x < y) return -1
5020 if (y < x) return 1
5021 return 0
5022}
5023
5024Buffer.isEncoding = function isEncoding (encoding) {
5025 switch (String(encoding).toLowerCase()) {
5026 case 'hex':
5027 case 'utf8':
5028 case 'utf-8':
5029 case 'ascii':
5030 case 'latin1':
5031 case 'binary':
5032 case 'base64':
5033 case 'ucs2':
5034 case 'ucs-2':
5035 case 'utf16le':
5036 case 'utf-16le':
5037 return true
5038 default:
5039 return false
5040 }
5041}
5042
5043Buffer.concat = function concat (list, length) {
5044 if (!Array.isArray(list)) {
5045 throw new TypeError('"list" argument must be an Array of Buffers')
5046 }
5047
5048 if (list.length === 0) {
5049 return Buffer.alloc(0)
5050 }
5051
5052 var i
5053 if (length === undefined) {
5054 length = 0
5055 for (i = 0; i < list.length; ++i) {
5056 length += list[i].length
5057 }
5058 }
5059
5060 var buffer = Buffer.allocUnsafe(length)
5061 var pos = 0
5062 for (i = 0; i < list.length; ++i) {
5063 var buf = list[i]
5064 if (!Buffer.isBuffer(buf)) {
5065 throw new TypeError('"list" argument must be an Array of Buffers')
5066 }
5067 buf.copy(buffer, pos)
5068 pos += buf.length
5069 }
5070 return buffer
5071}
5072
5073function byteLength (string, encoding) {
5074 if (Buffer.isBuffer(string)) {
5075 return string.length
5076 }
5077 if (isArrayBufferView(string) || string instanceof ArrayBuffer) {
5078 return string.byteLength
5079 }
5080 if (typeof string !== 'string') {
5081 string = '' + string
5082 }
5083
5084 var len = string.length
5085 if (len === 0) return 0
5086
5087 // Use a for loop to avoid recursion
5088 var loweredCase = false
5089 for (;;) {
5090 switch (encoding) {
5091 case 'ascii':
5092 case 'latin1':
5093 case 'binary':
5094 return len
5095 case 'utf8':
5096 case 'utf-8':
5097 case undefined:
5098 return utf8ToBytes(string).length
5099 case 'ucs2':
5100 case 'ucs-2':
5101 case 'utf16le':
5102 case 'utf-16le':
5103 return len * 2
5104 case 'hex':
5105 return len >>> 1
5106 case 'base64':
5107 return base64ToBytes(string).length
5108 default:
5109 if (loweredCase) return utf8ToBytes(string).length // assume utf8
5110 encoding = ('' + encoding).toLowerCase()
5111 loweredCase = true
5112 }
5113 }
5114}
5115Buffer.byteLength = byteLength
5116
5117function slowToString (encoding, start, end) {
5118 var loweredCase = false
5119
5120 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
5121 // property of a typed array.
5122
5123 // This behaves neither like String nor Uint8Array in that we set start/end
5124 // to their upper/lower bounds if the value passed is out of range.
5125 // undefined is handled specially as per ECMA-262 6th Edition,
5126 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
5127 if (start === undefined || start < 0) {
5128 start = 0
5129 }
5130 // Return early if start > this.length. Done here to prevent potential uint32
5131 // coercion fail below.
5132 if (start > this.length) {
5133 return ''
5134 }
5135
5136 if (end === undefined || end > this.length) {
5137 end = this.length
5138 }
5139
5140 if (end <= 0) {
5141 return ''
5142 }
5143
5144 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
5145 end >>>= 0
5146 start >>>= 0
5147
5148 if (end <= start) {
5149 return ''
5150 }
5151
5152 if (!encoding) encoding = 'utf8'
5153
5154 while (true) {
5155 switch (encoding) {
5156 case 'hex':
5157 return hexSlice(this, start, end)
5158
5159 case 'utf8':
5160 case 'utf-8':
5161 return utf8Slice(this, start, end)
5162
5163 case 'ascii':
5164 return asciiSlice(this, start, end)
5165
5166 case 'latin1':
5167 case 'binary':
5168 return latin1Slice(this, start, end)
5169
5170 case 'base64':
5171 return base64Slice(this, start, end)
5172
5173 case 'ucs2':
5174 case 'ucs-2':
5175 case 'utf16le':
5176 case 'utf-16le':
5177 return utf16leSlice(this, start, end)
5178
5179 default:
5180 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
5181 encoding = (encoding + '').toLowerCase()
5182 loweredCase = true
5183 }
5184 }
5185}
5186
5187// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
5188// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
5189// reliably in a browserify context because there could be multiple different
5190// copies of the 'buffer' package in use. This method works even for Buffer
5191// instances that were created from another copy of the `buffer` package.
5192// See: https://github.com/feross/buffer/issues/154
5193Buffer.prototype._isBuffer = true
5194
5195function swap (b, n, m) {
5196 var i = b[n]
5197 b[n] = b[m]
5198 b[m] = i
5199}
5200
5201Buffer.prototype.swap16 = function swap16 () {
5202 var len = this.length
5203 if (len % 2 !== 0) {
5204 throw new RangeError('Buffer size must be a multiple of 16-bits')
5205 }
5206 for (var i = 0; i < len; i += 2) {
5207 swap(this, i, i + 1)
5208 }
5209 return this
5210}
5211
5212Buffer.prototype.swap32 = function swap32 () {
5213 var len = this.length
5214 if (len % 4 !== 0) {
5215 throw new RangeError('Buffer size must be a multiple of 32-bits')
5216 }
5217 for (var i = 0; i < len; i += 4) {
5218 swap(this, i, i + 3)
5219 swap(this, i + 1, i + 2)
5220 }
5221 return this
5222}
5223
5224Buffer.prototype.swap64 = function swap64 () {
5225 var len = this.length
5226 if (len % 8 !== 0) {
5227 throw new RangeError('Buffer size must be a multiple of 64-bits')
5228 }
5229 for (var i = 0; i < len; i += 8) {
5230 swap(this, i, i + 7)
5231 swap(this, i + 1, i + 6)
5232 swap(this, i + 2, i + 5)
5233 swap(this, i + 3, i + 4)
5234 }
5235 return this
5236}
5237
5238Buffer.prototype.toString = function toString () {
5239 var length = this.length
5240 if (length === 0) return ''
5241 if (arguments.length === 0) return utf8Slice(this, 0, length)
5242 return slowToString.apply(this, arguments)
5243}
5244
5245Buffer.prototype.equals = function equals (b) {
5246 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
5247 if (this === b) return true
5248 return Buffer.compare(this, b) === 0
5249}
5250
5251Buffer.prototype.inspect = function inspect () {
5252 var str = ''
5253 var max = exports.INSPECT_MAX_BYTES
5254 if (this.length > 0) {
5255 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
5256 if (this.length > max) str += ' ... '
5257 }
5258 return '<Buffer ' + str + '>'
5259}
5260
5261Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
5262 if (!Buffer.isBuffer(target)) {
5263 throw new TypeError('Argument must be a Buffer')
5264 }
5265
5266 if (start === undefined) {
5267 start = 0
5268 }
5269 if (end === undefined) {
5270 end = target ? target.length : 0
5271 }
5272 if (thisStart === undefined) {
5273 thisStart = 0
5274 }
5275 if (thisEnd === undefined) {
5276 thisEnd = this.length
5277 }
5278
5279 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
5280 throw new RangeError('out of range index')
5281 }
5282
5283 if (thisStart >= thisEnd && start >= end) {
5284 return 0
5285 }
5286 if (thisStart >= thisEnd) {
5287 return -1
5288 }
5289 if (start >= end) {
5290 return 1
5291 }
5292
5293 start >>>= 0
5294 end >>>= 0
5295 thisStart >>>= 0
5296 thisEnd >>>= 0
5297
5298 if (this === target) return 0
5299
5300 var x = thisEnd - thisStart
5301 var y = end - start
5302 var len = Math.min(x, y)
5303
5304 var thisCopy = this.slice(thisStart, thisEnd)
5305 var targetCopy = target.slice(start, end)
5306
5307 for (var i = 0; i < len; ++i) {
5308 if (thisCopy[i] !== targetCopy[i]) {
5309 x = thisCopy[i]
5310 y = targetCopy[i]
5311 break
5312 }
5313 }
5314
5315 if (x < y) return -1
5316 if (y < x) return 1
5317 return 0
5318}
5319
5320// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
5321// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
5322//
5323// Arguments:
5324// - buffer - a Buffer to search
5325// - val - a string, Buffer, or number
5326// - byteOffset - an index into `buffer`; will be clamped to an int32
5327// - encoding - an optional encoding, relevant is val is a string
5328// - dir - true for indexOf, false for lastIndexOf
5329function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
5330 // Empty buffer means no match
5331 if (buffer.length === 0) return -1
5332
5333 // Normalize byteOffset
5334 if (typeof byteOffset === 'string') {
5335 encoding = byteOffset
5336 byteOffset = 0
5337 } else if (byteOffset > 0x7fffffff) {
5338 byteOffset = 0x7fffffff
5339 } else if (byteOffset < -0x80000000) {
5340 byteOffset = -0x80000000
5341 }
5342 byteOffset = +byteOffset // Coerce to Number.
5343 if (numberIsNaN(byteOffset)) {
5344 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
5345 byteOffset = dir ? 0 : (buffer.length - 1)
5346 }
5347
5348 // Normalize byteOffset: negative offsets start from the end of the buffer
5349 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
5350 if (byteOffset >= buffer.length) {
5351 if (dir) return -1
5352 else byteOffset = buffer.length - 1
5353 } else if (byteOffset < 0) {
5354 if (dir) byteOffset = 0
5355 else return -1
5356 }
5357
5358 // Normalize val
5359 if (typeof val === 'string') {
5360 val = Buffer.from(val, encoding)
5361 }
5362
5363 // Finally, search either indexOf (if dir is true) or lastIndexOf
5364 if (Buffer.isBuffer(val)) {
5365 // Special case: looking for empty string/buffer always fails
5366 if (val.length === 0) {
5367 return -1
5368 }
5369 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
5370 } else if (typeof val === 'number') {
5371 val = val & 0xFF // Search for a byte value [0-255]
5372 if (typeof Uint8Array.prototype.indexOf === 'function') {
5373 if (dir) {
5374 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
5375 } else {
5376 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
5377 }
5378 }
5379 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
5380 }
5381
5382 throw new TypeError('val must be string, number or Buffer')
5383}
5384
5385function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
5386 var indexSize = 1
5387 var arrLength = arr.length
5388 var valLength = val.length
5389
5390 if (encoding !== undefined) {
5391 encoding = String(encoding).toLowerCase()
5392 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
5393 encoding === 'utf16le' || encoding === 'utf-16le') {
5394 if (arr.length < 2 || val.length < 2) {
5395 return -1
5396 }
5397 indexSize = 2
5398 arrLength /= 2
5399 valLength /= 2
5400 byteOffset /= 2
5401 }
5402 }
5403
5404 function read (buf, i) {
5405 if (indexSize === 1) {
5406 return buf[i]
5407 } else {
5408 return buf.readUInt16BE(i * indexSize)
5409 }
5410 }
5411
5412 var i
5413 if (dir) {
5414 var foundIndex = -1
5415 for (i = byteOffset; i < arrLength; i++) {
5416 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
5417 if (foundIndex === -1) foundIndex = i
5418 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
5419 } else {
5420 if (foundIndex !== -1) i -= i - foundIndex
5421 foundIndex = -1
5422 }
5423 }
5424 } else {
5425 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
5426 for (i = byteOffset; i >= 0; i--) {
5427 var found = true
5428 for (var j = 0; j < valLength; j++) {
5429 if (read(arr, i + j) !== read(val, j)) {
5430 found = false
5431 break
5432 }
5433 }
5434 if (found) return i
5435 }
5436 }
5437
5438 return -1
5439}
5440
5441Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
5442 return this.indexOf(val, byteOffset, encoding) !== -1
5443}
5444
5445Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
5446 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
5447}
5448
5449Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
5450 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
5451}
5452
5453function hexWrite (buf, string, offset, length) {
5454 offset = Number(offset) || 0
5455 var remaining = buf.length - offset
5456 if (!length) {
5457 length = remaining
5458 } else {
5459 length = Number(length)
5460 if (length > remaining) {
5461 length = remaining
5462 }
5463 }
5464
5465 // must be an even number of digits
5466 var strLen = string.length
5467 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
5468
5469 if (length > strLen / 2) {
5470 length = strLen / 2
5471 }
5472 for (var i = 0; i < length; ++i) {
5473 var parsed = parseInt(string.substr(i * 2, 2), 16)
5474 if (numberIsNaN(parsed)) return i
5475 buf[offset + i] = parsed
5476 }
5477 return i
5478}
5479
5480function utf8Write (buf, string, offset, length) {
5481 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
5482}
5483
5484function asciiWrite (buf, string, offset, length) {
5485 return blitBuffer(asciiToBytes(string), buf, offset, length)
5486}
5487
5488function latin1Write (buf, string, offset, length) {
5489 return asciiWrite(buf, string, offset, length)
5490}
5491
5492function base64Write (buf, string, offset, length) {
5493 return blitBuffer(base64ToBytes(string), buf, offset, length)
5494}
5495
5496function ucs2Write (buf, string, offset, length) {
5497 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
5498}
5499
5500Buffer.prototype.write = function write (string, offset, length, encoding) {
5501 // Buffer#write(string)
5502 if (offset === undefined) {
5503 encoding = 'utf8'
5504 length = this.length
5505 offset = 0
5506 // Buffer#write(string, encoding)
5507 } else if (length === undefined && typeof offset === 'string') {
5508 encoding = offset
5509 length = this.length
5510 offset = 0
5511 // Buffer#write(string, offset[, length][, encoding])
5512 } else if (isFinite(offset)) {
5513 offset = offset >>> 0
5514 if (isFinite(length)) {
5515 length = length >>> 0
5516 if (encoding === undefined) encoding = 'utf8'
5517 } else {
5518 encoding = length
5519 length = undefined
5520 }
5521 } else {
5522 throw new Error(
5523 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
5524 )
5525 }
5526
5527 var remaining = this.length - offset
5528 if (length === undefined || length > remaining) length = remaining
5529
5530 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
5531 throw new RangeError('Attempt to write outside buffer bounds')
5532 }
5533
5534 if (!encoding) encoding = 'utf8'
5535
5536 var loweredCase = false
5537 for (;;) {
5538 switch (encoding) {
5539 case 'hex':
5540 return hexWrite(this, string, offset, length)
5541
5542 case 'utf8':
5543 case 'utf-8':
5544 return utf8Write(this, string, offset, length)
5545
5546 case 'ascii':
5547 return asciiWrite(this, string, offset, length)
5548
5549 case 'latin1':
5550 case 'binary':
5551 return latin1Write(this, string, offset, length)
5552
5553 case 'base64':
5554 // Warning: maxLength not taken into account in base64Write
5555 return base64Write(this, string, offset, length)
5556
5557 case 'ucs2':
5558 case 'ucs-2':
5559 case 'utf16le':
5560 case 'utf-16le':
5561 return ucs2Write(this, string, offset, length)
5562
5563 default:
5564 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
5565 encoding = ('' + encoding).toLowerCase()
5566 loweredCase = true
5567 }
5568 }
5569}
5570
5571Buffer.prototype.toJSON = function toJSON () {
5572 return {
5573 type: 'Buffer',
5574 data: Array.prototype.slice.call(this._arr || this, 0)
5575 }
5576}
5577
5578function base64Slice (buf, start, end) {
5579 if (start === 0 && end === buf.length) {
5580 return base64.fromByteArray(buf)
5581 } else {
5582 return base64.fromByteArray(buf.slice(start, end))
5583 }
5584}
5585
5586function utf8Slice (buf, start, end) {
5587 end = Math.min(buf.length, end)
5588 var res = []
5589
5590 var i = start
5591 while (i < end) {
5592 var firstByte = buf[i]
5593 var codePoint = null
5594 var bytesPerSequence = (firstByte > 0xEF) ? 4
5595 : (firstByte > 0xDF) ? 3
5596 : (firstByte > 0xBF) ? 2
5597 : 1
5598
5599 if (i + bytesPerSequence <= end) {
5600 var secondByte, thirdByte, fourthByte, tempCodePoint
5601
5602 switch (bytesPerSequence) {
5603 case 1:
5604 if (firstByte < 0x80) {
5605 codePoint = firstByte
5606 }
5607 break
5608 case 2:
5609 secondByte = buf[i + 1]
5610 if ((secondByte & 0xC0) === 0x80) {
5611 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
5612 if (tempCodePoint > 0x7F) {
5613 codePoint = tempCodePoint
5614 }
5615 }
5616 break
5617 case 3:
5618 secondByte = buf[i + 1]
5619 thirdByte = buf[i + 2]
5620 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
5621 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
5622 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
5623 codePoint = tempCodePoint
5624 }
5625 }
5626 break
5627 case 4:
5628 secondByte = buf[i + 1]
5629 thirdByte = buf[i + 2]
5630 fourthByte = buf[i + 3]
5631 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
5632 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
5633 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
5634 codePoint = tempCodePoint
5635 }
5636 }
5637 }
5638 }
5639
5640 if (codePoint === null) {
5641 // we did not generate a valid codePoint so insert a
5642 // replacement char (U+FFFD) and advance only 1 byte
5643 codePoint = 0xFFFD
5644 bytesPerSequence = 1
5645 } else if (codePoint > 0xFFFF) {
5646 // encode to utf16 (surrogate pair dance)
5647 codePoint -= 0x10000
5648 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
5649 codePoint = 0xDC00 | codePoint & 0x3FF
5650 }
5651
5652 res.push(codePoint)
5653 i += bytesPerSequence
5654 }
5655
5656 return decodeCodePointsArray(res)
5657}
5658
5659// Based on http://stackoverflow.com/a/22747272/680742, the browser with
5660// the lowest limit is Chrome, with 0x10000 args.
5661// We go 1 magnitude less, for safety
5662var MAX_ARGUMENTS_LENGTH = 0x1000
5663
5664function decodeCodePointsArray (codePoints) {
5665 var len = codePoints.length
5666 if (len <= MAX_ARGUMENTS_LENGTH) {
5667 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
5668 }
5669
5670 // Decode in chunks to avoid "call stack size exceeded".
5671 var res = ''
5672 var i = 0
5673 while (i < len) {
5674 res += String.fromCharCode.apply(
5675 String,
5676 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
5677 )
5678 }
5679 return res
5680}
5681
5682function asciiSlice (buf, start, end) {
5683 var ret = ''
5684 end = Math.min(buf.length, end)
5685
5686 for (var i = start; i < end; ++i) {
5687 ret += String.fromCharCode(buf[i] & 0x7F)
5688 }
5689 return ret
5690}
5691
5692function latin1Slice (buf, start, end) {
5693 var ret = ''
5694 end = Math.min(buf.length, end)
5695
5696 for (var i = start; i < end; ++i) {
5697 ret += String.fromCharCode(buf[i])
5698 }
5699 return ret
5700}
5701
5702function hexSlice (buf, start, end) {
5703 var len = buf.length
5704
5705 if (!start || start < 0) start = 0
5706 if (!end || end < 0 || end > len) end = len
5707
5708 var out = ''
5709 for (var i = start; i < end; ++i) {
5710 out += toHex(buf[i])
5711 }
5712 return out
5713}
5714
5715function utf16leSlice (buf, start, end) {
5716 var bytes = buf.slice(start, end)
5717 var res = ''
5718 for (var i = 0; i < bytes.length; i += 2) {
5719 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
5720 }
5721 return res
5722}
5723
5724Buffer.prototype.slice = function slice (start, end) {
5725 var len = this.length
5726 start = ~~start
5727 end = end === undefined ? len : ~~end
5728
5729 if (start < 0) {
5730 start += len
5731 if (start < 0) start = 0
5732 } else if (start > len) {
5733 start = len
5734 }
5735
5736 if (end < 0) {
5737 end += len
5738 if (end < 0) end = 0
5739 } else if (end > len) {
5740 end = len
5741 }
5742
5743 if (end < start) end = start
5744
5745 var newBuf = this.subarray(start, end)
5746 // Return an augmented `Uint8Array` instance
5747 newBuf.__proto__ = Buffer.prototype
5748 return newBuf
5749}
5750
5751/*
5752 * Need to make sure that buffer isn't trying to write out of bounds.
5753 */
5754function checkOffset (offset, ext, length) {
5755 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
5756 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
5757}
5758
5759Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
5760 offset = offset >>> 0
5761 byteLength = byteLength >>> 0
5762 if (!noAssert) checkOffset(offset, byteLength, this.length)
5763
5764 var val = this[offset]
5765 var mul = 1
5766 var i = 0
5767 while (++i < byteLength && (mul *= 0x100)) {
5768 val += this[offset + i] * mul
5769 }
5770
5771 return val
5772}
5773
5774Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
5775 offset = offset >>> 0
5776 byteLength = byteLength >>> 0
5777 if (!noAssert) {
5778 checkOffset(offset, byteLength, this.length)
5779 }
5780
5781 var val = this[offset + --byteLength]
5782 var mul = 1
5783 while (byteLength > 0 && (mul *= 0x100)) {
5784 val += this[offset + --byteLength] * mul
5785 }
5786
5787 return val
5788}
5789
5790Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
5791 offset = offset >>> 0
5792 if (!noAssert) checkOffset(offset, 1, this.length)
5793 return this[offset]
5794}
5795
5796Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
5797 offset = offset >>> 0
5798 if (!noAssert) checkOffset(offset, 2, this.length)
5799 return this[offset] | (this[offset + 1] << 8)
5800}
5801
5802Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
5803 offset = offset >>> 0
5804 if (!noAssert) checkOffset(offset, 2, this.length)
5805 return (this[offset] << 8) | this[offset + 1]
5806}
5807
5808Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
5809 offset = offset >>> 0
5810 if (!noAssert) checkOffset(offset, 4, this.length)
5811
5812 return ((this[offset]) |
5813 (this[offset + 1] << 8) |
5814 (this[offset + 2] << 16)) +
5815 (this[offset + 3] * 0x1000000)
5816}
5817
5818Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
5819 offset = offset >>> 0
5820 if (!noAssert) checkOffset(offset, 4, this.length)
5821
5822 return (this[offset] * 0x1000000) +
5823 ((this[offset + 1] << 16) |
5824 (this[offset + 2] << 8) |
5825 this[offset + 3])
5826}
5827
5828Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
5829 offset = offset >>> 0
5830 byteLength = byteLength >>> 0
5831 if (!noAssert) checkOffset(offset, byteLength, this.length)
5832
5833 var val = this[offset]
5834 var mul = 1
5835 var i = 0
5836 while (++i < byteLength && (mul *= 0x100)) {
5837 val += this[offset + i] * mul
5838 }
5839 mul *= 0x80
5840
5841 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
5842
5843 return val
5844}
5845
5846Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
5847 offset = offset >>> 0
5848 byteLength = byteLength >>> 0
5849 if (!noAssert) checkOffset(offset, byteLength, this.length)
5850
5851 var i = byteLength
5852 var mul = 1
5853 var val = this[offset + --i]
5854 while (i > 0 && (mul *= 0x100)) {
5855 val += this[offset + --i] * mul
5856 }
5857 mul *= 0x80
5858
5859 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
5860
5861 return val
5862}
5863
5864Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
5865 offset = offset >>> 0
5866 if (!noAssert) checkOffset(offset, 1, this.length)
5867 if (!(this[offset] & 0x80)) return (this[offset])
5868 return ((0xff - this[offset] + 1) * -1)
5869}
5870
5871Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
5872 offset = offset >>> 0
5873 if (!noAssert) checkOffset(offset, 2, this.length)
5874 var val = this[offset] | (this[offset + 1] << 8)
5875 return (val & 0x8000) ? val | 0xFFFF0000 : val
5876}
5877
5878Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
5879 offset = offset >>> 0
5880 if (!noAssert) checkOffset(offset, 2, this.length)
5881 var val = this[offset + 1] | (this[offset] << 8)
5882 return (val & 0x8000) ? val | 0xFFFF0000 : val
5883}
5884
5885Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
5886 offset = offset >>> 0
5887 if (!noAssert) checkOffset(offset, 4, this.length)
5888
5889 return (this[offset]) |
5890 (this[offset + 1] << 8) |
5891 (this[offset + 2] << 16) |
5892 (this[offset + 3] << 24)
5893}
5894
5895Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
5896 offset = offset >>> 0
5897 if (!noAssert) checkOffset(offset, 4, this.length)
5898
5899 return (this[offset] << 24) |
5900 (this[offset + 1] << 16) |
5901 (this[offset + 2] << 8) |
5902 (this[offset + 3])
5903}
5904
5905Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
5906 offset = offset >>> 0
5907 if (!noAssert) checkOffset(offset, 4, this.length)
5908 return ieee754.read(this, offset, true, 23, 4)
5909}
5910
5911Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
5912 offset = offset >>> 0
5913 if (!noAssert) checkOffset(offset, 4, this.length)
5914 return ieee754.read(this, offset, false, 23, 4)
5915}
5916
5917Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
5918 offset = offset >>> 0
5919 if (!noAssert) checkOffset(offset, 8, this.length)
5920 return ieee754.read(this, offset, true, 52, 8)
5921}
5922
5923Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
5924 offset = offset >>> 0
5925 if (!noAssert) checkOffset(offset, 8, this.length)
5926 return ieee754.read(this, offset, false, 52, 8)
5927}
5928
5929function checkInt (buf, value, offset, ext, max, min) {
5930 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
5931 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
5932 if (offset + ext > buf.length) throw new RangeError('Index out of range')
5933}
5934
5935Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
5936 value = +value
5937 offset = offset >>> 0
5938 byteLength = byteLength >>> 0
5939 if (!noAssert) {
5940 var maxBytes = Math.pow(2, 8 * byteLength) - 1
5941 checkInt(this, value, offset, byteLength, maxBytes, 0)
5942 }
5943
5944 var mul = 1
5945 var i = 0
5946 this[offset] = value & 0xFF
5947 while (++i < byteLength && (mul *= 0x100)) {
5948 this[offset + i] = (value / mul) & 0xFF
5949 }
5950
5951 return offset + byteLength
5952}
5953
5954Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
5955 value = +value
5956 offset = offset >>> 0
5957 byteLength = byteLength >>> 0
5958 if (!noAssert) {
5959 var maxBytes = Math.pow(2, 8 * byteLength) - 1
5960 checkInt(this, value, offset, byteLength, maxBytes, 0)
5961 }
5962
5963 var i = byteLength - 1
5964 var mul = 1
5965 this[offset + i] = value & 0xFF
5966 while (--i >= 0 && (mul *= 0x100)) {
5967 this[offset + i] = (value / mul) & 0xFF
5968 }
5969
5970 return offset + byteLength
5971}
5972
5973Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
5974 value = +value
5975 offset = offset >>> 0
5976 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
5977 this[offset] = (value & 0xff)
5978 return offset + 1
5979}
5980
5981Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
5982 value = +value
5983 offset = offset >>> 0
5984 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
5985 this[offset] = (value & 0xff)
5986 this[offset + 1] = (value >>> 8)
5987 return offset + 2
5988}
5989
5990Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
5991 value = +value
5992 offset = offset >>> 0
5993 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
5994 this[offset] = (value >>> 8)
5995 this[offset + 1] = (value & 0xff)
5996 return offset + 2
5997}
5998
5999Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
6000 value = +value
6001 offset = offset >>> 0
6002 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
6003 this[offset + 3] = (value >>> 24)
6004 this[offset + 2] = (value >>> 16)
6005 this[offset + 1] = (value >>> 8)
6006 this[offset] = (value & 0xff)
6007 return offset + 4
6008}
6009
6010Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
6011 value = +value
6012 offset = offset >>> 0
6013 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
6014 this[offset] = (value >>> 24)
6015 this[offset + 1] = (value >>> 16)
6016 this[offset + 2] = (value >>> 8)
6017 this[offset + 3] = (value & 0xff)
6018 return offset + 4
6019}
6020
6021Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
6022 value = +value
6023 offset = offset >>> 0
6024 if (!noAssert) {
6025 var limit = Math.pow(2, (8 * byteLength) - 1)
6026
6027 checkInt(this, value, offset, byteLength, limit - 1, -limit)
6028 }
6029
6030 var i = 0
6031 var mul = 1
6032 var sub = 0
6033 this[offset] = value & 0xFF
6034 while (++i < byteLength && (mul *= 0x100)) {
6035 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
6036 sub = 1
6037 }
6038 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
6039 }
6040
6041 return offset + byteLength
6042}
6043
6044Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
6045 value = +value
6046 offset = offset >>> 0
6047 if (!noAssert) {
6048 var limit = Math.pow(2, (8 * byteLength) - 1)
6049
6050 checkInt(this, value, offset, byteLength, limit - 1, -limit)
6051 }
6052
6053 var i = byteLength - 1
6054 var mul = 1
6055 var sub = 0
6056 this[offset + i] = value & 0xFF
6057 while (--i >= 0 && (mul *= 0x100)) {
6058 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
6059 sub = 1
6060 }
6061 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
6062 }
6063
6064 return offset + byteLength
6065}
6066
6067Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
6068 value = +value
6069 offset = offset >>> 0
6070 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
6071 if (value < 0) value = 0xff + value + 1
6072 this[offset] = (value & 0xff)
6073 return offset + 1
6074}
6075
6076Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
6077 value = +value
6078 offset = offset >>> 0
6079 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
6080 this[offset] = (value & 0xff)
6081 this[offset + 1] = (value >>> 8)
6082 return offset + 2
6083}
6084
6085Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
6086 value = +value
6087 offset = offset >>> 0
6088 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
6089 this[offset] = (value >>> 8)
6090 this[offset + 1] = (value & 0xff)
6091 return offset + 2
6092}
6093
6094Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
6095 value = +value
6096 offset = offset >>> 0
6097 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
6098 this[offset] = (value & 0xff)
6099 this[offset + 1] = (value >>> 8)
6100 this[offset + 2] = (value >>> 16)
6101 this[offset + 3] = (value >>> 24)
6102 return offset + 4
6103}
6104
6105Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
6106 value = +value
6107 offset = offset >>> 0
6108 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
6109 if (value < 0) value = 0xffffffff + value + 1
6110 this[offset] = (value >>> 24)
6111 this[offset + 1] = (value >>> 16)
6112 this[offset + 2] = (value >>> 8)
6113 this[offset + 3] = (value & 0xff)
6114 return offset + 4
6115}
6116
6117function checkIEEE754 (buf, value, offset, ext, max, min) {
6118 if (offset + ext > buf.length) throw new RangeError('Index out of range')
6119 if (offset < 0) throw new RangeError('Index out of range')
6120}
6121
6122function writeFloat (buf, value, offset, littleEndian, noAssert) {
6123 value = +value
6124 offset = offset >>> 0
6125 if (!noAssert) {
6126 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
6127 }
6128 ieee754.write(buf, value, offset, littleEndian, 23, 4)
6129 return offset + 4
6130}
6131
6132Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
6133 return writeFloat(this, value, offset, true, noAssert)
6134}
6135
6136Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
6137 return writeFloat(this, value, offset, false, noAssert)
6138}
6139
6140function writeDouble (buf, value, offset, littleEndian, noAssert) {
6141 value = +value
6142 offset = offset >>> 0
6143 if (!noAssert) {
6144 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
6145 }
6146 ieee754.write(buf, value, offset, littleEndian, 52, 8)
6147 return offset + 8
6148}
6149
6150Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
6151 return writeDouble(this, value, offset, true, noAssert)
6152}
6153
6154Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
6155 return writeDouble(this, value, offset, false, noAssert)
6156}
6157
6158// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
6159Buffer.prototype.copy = function copy (target, targetStart, start, end) {
6160 if (!start) start = 0
6161 if (!end && end !== 0) end = this.length
6162 if (targetStart >= target.length) targetStart = target.length
6163 if (!targetStart) targetStart = 0
6164 if (end > 0 && end < start) end = start
6165
6166 // Copy 0 bytes; we're done
6167 if (end === start) return 0
6168 if (target.length === 0 || this.length === 0) return 0
6169
6170 // Fatal error conditions
6171 if (targetStart < 0) {
6172 throw new RangeError('targetStart out of bounds')
6173 }
6174 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
6175 if (end < 0) throw new RangeError('sourceEnd out of bounds')
6176
6177 // Are we oob?
6178 if (end > this.length) end = this.length
6179 if (target.length - targetStart < end - start) {
6180 end = target.length - targetStart + start
6181 }
6182
6183 var len = end - start
6184 var i
6185
6186 if (this === target && start < targetStart && targetStart < end) {
6187 // descending copy from end
6188 for (i = len - 1; i >= 0; --i) {
6189 target[i + targetStart] = this[i + start]
6190 }
6191 } else if (len < 1000) {
6192 // ascending copy from start
6193 for (i = 0; i < len; ++i) {
6194 target[i + targetStart] = this[i + start]
6195 }
6196 } else {
6197 Uint8Array.prototype.set.call(
6198 target,
6199 this.subarray(start, start + len),
6200 targetStart
6201 )
6202 }
6203
6204 return len
6205}
6206
6207// Usage:
6208// buffer.fill(number[, offset[, end]])
6209// buffer.fill(buffer[, offset[, end]])
6210// buffer.fill(string[, offset[, end]][, encoding])
6211Buffer.prototype.fill = function fill (val, start, end, encoding) {
6212 // Handle string cases:
6213 if (typeof val === 'string') {
6214 if (typeof start === 'string') {
6215 encoding = start
6216 start = 0
6217 end = this.length
6218 } else if (typeof end === 'string') {
6219 encoding = end
6220 end = this.length
6221 }
6222 if (val.length === 1) {
6223 var code = val.charCodeAt(0)
6224 if (code < 256) {
6225 val = code
6226 }
6227 }
6228 if (encoding !== undefined && typeof encoding !== 'string') {
6229 throw new TypeError('encoding must be a string')
6230 }
6231 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
6232 throw new TypeError('Unknown encoding: ' + encoding)
6233 }
6234 } else if (typeof val === 'number') {
6235 val = val & 255
6236 }
6237
6238 // Invalid ranges are not set to a default, so can range check early.
6239 if (start < 0 || this.length < start || this.length < end) {
6240 throw new RangeError('Out of range index')
6241 }
6242
6243 if (end <= start) {
6244 return this
6245 }
6246
6247 start = start >>> 0
6248 end = end === undefined ? this.length : end >>> 0
6249
6250 if (!val) val = 0
6251
6252 var i
6253 if (typeof val === 'number') {
6254 for (i = start; i < end; ++i) {
6255 this[i] = val
6256 }
6257 } else {
6258 var bytes = Buffer.isBuffer(val)
6259 ? val
6260 : new Buffer(val, encoding)
6261 var len = bytes.length
6262 for (i = 0; i < end - start; ++i) {
6263 this[i + start] = bytes[i % len]
6264 }
6265 }
6266
6267 return this
6268}
6269
6270// HELPER FUNCTIONS
6271// ================
6272
6273var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
6274
6275function base64clean (str) {
6276 // Node strips out invalid characters like \n and \t from the string, base64-js does not
6277 str = str.trim().replace(INVALID_BASE64_RE, '')
6278 // Node converts strings with length < 2 to ''
6279 if (str.length < 2) return ''
6280 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
6281 while (str.length % 4 !== 0) {
6282 str = str + '='
6283 }
6284 return str
6285}
6286
6287function toHex (n) {
6288 if (n < 16) return '0' + n.toString(16)
6289 return n.toString(16)
6290}
6291
6292function utf8ToBytes (string, units) {
6293 units = units || Infinity
6294 var codePoint
6295 var length = string.length
6296 var leadSurrogate = null
6297 var bytes = []
6298
6299 for (var i = 0; i < length; ++i) {
6300 codePoint = string.charCodeAt(i)
6301
6302 // is surrogate component
6303 if (codePoint > 0xD7FF && codePoint < 0xE000) {
6304 // last char was a lead
6305 if (!leadSurrogate) {
6306 // no lead yet
6307 if (codePoint > 0xDBFF) {
6308 // unexpected trail
6309 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
6310 continue
6311 } else if (i + 1 === length) {
6312 // unpaired lead
6313 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
6314 continue
6315 }
6316
6317 // valid lead
6318 leadSurrogate = codePoint
6319
6320 continue
6321 }
6322
6323 // 2 leads in a row
6324 if (codePoint < 0xDC00) {
6325 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
6326 leadSurrogate = codePoint
6327 continue
6328 }
6329
6330 // valid surrogate pair
6331 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
6332 } else if (leadSurrogate) {
6333 // valid bmp char, but last char was a lead
6334 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
6335 }
6336
6337 leadSurrogate = null
6338
6339 // encode utf8
6340 if (codePoint < 0x80) {
6341 if ((units -= 1) < 0) break
6342 bytes.push(codePoint)
6343 } else if (codePoint < 0x800) {
6344 if ((units -= 2) < 0) break
6345 bytes.push(
6346 codePoint >> 0x6 | 0xC0,
6347 codePoint & 0x3F | 0x80
6348 )
6349 } else if (codePoint < 0x10000) {
6350 if ((units -= 3) < 0) break
6351 bytes.push(
6352 codePoint >> 0xC | 0xE0,
6353 codePoint >> 0x6 & 0x3F | 0x80,
6354 codePoint & 0x3F | 0x80
6355 )
6356 } else if (codePoint < 0x110000) {
6357 if ((units -= 4) < 0) break
6358 bytes.push(
6359 codePoint >> 0x12 | 0xF0,
6360 codePoint >> 0xC & 0x3F | 0x80,
6361 codePoint >> 0x6 & 0x3F | 0x80,
6362 codePoint & 0x3F | 0x80
6363 )
6364 } else {
6365 throw new Error('Invalid code point')
6366 }
6367 }
6368
6369 return bytes
6370}
6371
6372function asciiToBytes (str) {
6373 var byteArray = []
6374 for (var i = 0; i < str.length; ++i) {
6375 // Node's code seems to be doing this and not & 0x7F..
6376 byteArray.push(str.charCodeAt(i) & 0xFF)
6377 }
6378 return byteArray
6379}
6380
6381function utf16leToBytes (str, units) {
6382 var c, hi, lo
6383 var byteArray = []
6384 for (var i = 0; i < str.length; ++i) {
6385 if ((units -= 2) < 0) break
6386
6387 c = str.charCodeAt(i)
6388 hi = c >> 8
6389 lo = c % 256
6390 byteArray.push(lo)
6391 byteArray.push(hi)
6392 }
6393
6394 return byteArray
6395}
6396
6397function base64ToBytes (str) {
6398 return base64.toByteArray(base64clean(str))
6399}
6400
6401function blitBuffer (src, dst, offset, length) {
6402 for (var i = 0; i < length; ++i) {
6403 if ((i + offset >= dst.length) || (i >= src.length)) break
6404 dst[i + offset] = src[i]
6405 }
6406 return i
6407}
6408
6409// Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`
6410function isArrayBufferView (obj) {
6411 return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)
6412}
6413
6414function numberIsNaN (obj) {
6415 return obj !== obj // eslint-disable-line no-self-compare
6416}
6417
6418},{"base64-js":1,"ieee754":3}],3:[function(require,module,exports){
6419exports.read = function (buffer, offset, isLE, mLen, nBytes) {
6420 var e, m
6421 var eLen = nBytes * 8 - mLen - 1
6422 var eMax = (1 << eLen) - 1
6423 var eBias = eMax >> 1
6424 var nBits = -7
6425 var i = isLE ? (nBytes - 1) : 0
6426 var d = isLE ? -1 : 1
6427 var s = buffer[offset + i]
6428
6429 i += d
6430
6431 e = s & ((1 << (-nBits)) - 1)
6432 s >>= (-nBits)
6433 nBits += eLen
6434 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
6435
6436 m = e & ((1 << (-nBits)) - 1)
6437 e >>= (-nBits)
6438 nBits += mLen
6439 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
6440
6441 if (e === 0) {
6442 e = 1 - eBias
6443 } else if (e === eMax) {
6444 return m ? NaN : ((s ? -1 : 1) * Infinity)
6445 } else {
6446 m = m + Math.pow(2, mLen)
6447 e = e - eBias
6448 }
6449 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
6450}
6451
6452exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
6453 var e, m, c
6454 var eLen = nBytes * 8 - mLen - 1
6455 var eMax = (1 << eLen) - 1
6456 var eBias = eMax >> 1
6457 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
6458 var i = isLE ? 0 : (nBytes - 1)
6459 var d = isLE ? 1 : -1
6460 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
6461
6462 value = Math.abs(value)
6463
6464 if (isNaN(value) || value === Infinity) {
6465 m = isNaN(value) ? 1 : 0
6466 e = eMax
6467 } else {
6468 e = Math.floor(Math.log(value) / Math.LN2)
6469 if (value * (c = Math.pow(2, -e)) < 1) {
6470 e--
6471 c *= 2
6472 }
6473 if (e + eBias >= 1) {
6474 value += rt / c
6475 } else {
6476 value += rt * Math.pow(2, 1 - eBias)
6477 }
6478 if (value * c >= 2) {
6479 e++
6480 c /= 2
6481 }
6482
6483 if (e + eBias >= eMax) {
6484 m = 0
6485 e = eMax
6486 } else if (e + eBias >= 1) {
6487 m = (value * c - 1) * Math.pow(2, mLen)
6488 e = e + eBias
6489 } else {
6490 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
6491 e = 0
6492 }
6493 }
6494
6495 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
6496
6497 e = (e << mLen) | m
6498 eLen += mLen
6499 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
6500
6501 buffer[offset + i - d] |= s * 128
6502}
6503
6504},{}],4:[function(require,module,exports){
6505window.basex = require('base-x')
6506},{"base-x":5}],5:[function(require,module,exports){
6507// base-x encoding
6508// Forked from https://github.com/cryptocoinjs/bs58
6509// Originally written by Mike Hearn for BitcoinJ
6510// Copyright (c) 2011 Google Inc
6511// Ported to JavaScript by Stefan Thomas
6512// Merged Buffer refactorings from base58-native by Stephen Pair
6513// Copyright (c) 2013 BitPay Inc
6514
6515var Buffer = require('safe-buffer').Buffer
6516
6517module.exports = function base (ALPHABET) {
6518 var ALPHABET_MAP = {}
6519 var BASE = ALPHABET.length
6520 var LEADER = ALPHABET.charAt(0)
6521
6522 // pre-compute lookup table
6523 for (var z = 0; z < ALPHABET.length; z++) {
6524 var x = ALPHABET.charAt(z)
6525
6526 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
6527 ALPHABET_MAP[x] = z
6528 }
6529
6530 function encode (source) {
6531 if (source.length === 0) return ''
6532
6533 var digits = [0]
6534 for (var i = 0; i < source.length; ++i) {
6535 for (var j = 0, carry = source[i]; j < digits.length; ++j) {
6536 carry += digits[j] << 8
6537 digits[j] = carry % BASE
6538 carry = (carry / BASE) | 0
6539 }
6540
6541 while (carry > 0) {
6542 digits.push(carry % BASE)
6543 carry = (carry / BASE) | 0
6544 }
6545 }
6546
6547 var string = ''
6548
6549 // deal with leading zeros
6550 for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += ALPHABET[0]
6551 // convert digits to a string
6552 for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]
6553
6554 return string
6555 }
6556
6557 function decodeUnsafe (string) {
6558 if (string.length === 0) return Buffer.allocUnsafe(0)
6559
6560 var bytes = [0]
6561 for (var i = 0; i < string.length; i++) {
6562 var value = ALPHABET_MAP[string[i]]
6563 if (value === undefined) return
6564
6565 for (var j = 0, carry = value; j < bytes.length; ++j) {
6566 carry += bytes[j] * BASE
6567 bytes[j] = carry & 0xff
6568 carry >>= 8
6569 }
6570
6571 while (carry > 0) {
6572 bytes.push(carry & 0xff)
6573 carry >>= 8
6574 }
6575 }
6576
6577 // deal with leading zeros
6578 for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {
6579 bytes.push(0)
6580 }
6581
6582 return Buffer.from(bytes.reverse())
6583 }
6584
6585 function decode (string) {
6586 var buffer = decodeUnsafe(string)
6587 if (buffer) return buffer
6588
6589 throw new Error('Non-base' + BASE + ' character')
6590 }
6591
6592 return {
6593 encode: encode,
6594 decodeUnsafe: decodeUnsafe,
6595 decode: decode
6596 }
6597}
6598
6599},{"safe-buffer":6}],6:[function(require,module,exports){
6600module.exports = require('buffer')
6601
6602},{"buffer":2}]},{},[4])(4)
6603});</script>
6e0f24b1
IC
6604 <script>(function (root) {
6605 "use strict";
6606
6607/***** unorm.js *****/
6608
6609/*
6610 * UnicodeNormalizer 1.0.0
6611 * Copyright (c) 2008 Matsuza
6612 * Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
6613 * $Date: 2008-06-05 16:44:17 +0200 (Thu, 05 Jun 2008) $
6614 * $Rev: 13309 $
6615 */
6616
6617 var DEFAULT_FEATURE = [null, 0, {}];
6618 var CACHE_THRESHOLD = 10;
6619 var SBase = 0xAC00, LBase = 0x1100, VBase = 0x1161, TBase = 0x11A7, LCount = 19, VCount = 21, TCount = 28;
6620 var NCount = VCount * TCount; // 588
6621 var SCount = LCount * NCount; // 11172
6622
6623 var UChar = function(cp, feature){
6624 this.codepoint = cp;
6625 this.feature = feature;
6626 };
6627
6628 // Strategies
6629 var cache = {};
6630 var cacheCounter = [];
6631 for (var i = 0; i <= 0xFF; ++i){
6632 cacheCounter[i] = 0;
6633 }
6634
6635 function fromCache(next, cp, needFeature){
6636 var ret = cache[cp];
6637 if(!ret){
6638 ret = next(cp, needFeature);
6639 if(!!ret.feature && ++cacheCounter[(cp >> 8) & 0xFF] > CACHE_THRESHOLD){
6640 cache[cp] = ret;
6641 }
6642 }
6643 return ret;
6644 }
6645
6646 function fromData(next, cp, needFeature){
6647 var hash = cp & 0xFF00;
6648 var dunit = UChar.udata[hash] || {};
6649 var f = dunit[cp];
6650 return f ? new UChar(cp, f) : new UChar(cp, DEFAULT_FEATURE);
6651 }
6652 function fromCpOnly(next, cp, needFeature){
6653 return !!needFeature ? next(cp, needFeature) : new UChar(cp, null);
6654 }
6655 function fromRuleBasedJamo(next, cp, needFeature){
6656 var j;
6657 if(cp < LBase || (LBase + LCount <= cp && cp < SBase) || (SBase + SCount < cp)){
6658 return next(cp, needFeature);
6659 }
6660 if(LBase <= cp && cp < LBase + LCount){
6661 var c = {};
6662 var base = (cp - LBase) * VCount;
6663 for (j = 0; j < VCount; ++j){
6664 c[VBase + j] = SBase + TCount * (j + base);
6665 }
6666 return new UChar(cp, [,,c]);
6667 }
6668
6669 var SIndex = cp - SBase;
6670 var TIndex = SIndex % TCount;
6671 var feature = [];
6672 if(TIndex !== 0){
6673 feature[0] = [SBase + SIndex - TIndex, TBase + TIndex];
6674 } else {
6675 feature[0] = [LBase + Math.floor(SIndex / NCount), VBase + Math.floor((SIndex % NCount) / TCount)];
6676 feature[2] = {};
6677 for (j = 1; j < TCount; ++j){
6678 feature[2][TBase + j] = cp + j;
6679 }
6680 }
6681 return new UChar(cp, feature);
6682 }
6683 function fromCpFilter(next, cp, needFeature){
6684 return cp < 60 || 13311 < cp && cp < 42607 ? new UChar(cp, DEFAULT_FEATURE) : next(cp, needFeature);
6685 }
6686
6687 var strategies = [fromCpFilter, fromCache, fromCpOnly, fromRuleBasedJamo, fromData];
6688
6689 UChar.fromCharCode = strategies.reduceRight(function (next, strategy) {
6690 return function (cp, needFeature) {
6691 return strategy(next, cp, needFeature);
6692 };
6693 }, null);
6694
6695 UChar.isHighSurrogate = function(cp){
6696 return cp >= 0xD800 && cp <= 0xDBFF;
6697 };
6698 UChar.isLowSurrogate = function(cp){
6699 return cp >= 0xDC00 && cp <= 0xDFFF;
6700 };
6701
6702 UChar.prototype.prepFeature = function(){
6703 if(!this.feature){
6704 this.feature = UChar.fromCharCode(this.codepoint, true).feature;
6705 }
6706 };
6707
6708 UChar.prototype.toString = function(){
6709 if(this.codepoint < 0x10000){
6710 return String.fromCharCode(this.codepoint);
6711 } else {
6712 var x = this.codepoint - 0x10000;
6713 return String.fromCharCode(Math.floor(x / 0x400) + 0xD800, x % 0x400 + 0xDC00);
6714 }
6715 };
6716
6717 UChar.prototype.getDecomp = function(){
6718 this.prepFeature();
6719 return this.feature[0] || null;
6720 };
6721
6722 UChar.prototype.isCompatibility = function(){
6723 this.prepFeature();
6724 return !!this.feature[1] && (this.feature[1] & (1 << 8));
6725 };
6726 UChar.prototype.isExclude = function(){
6727 this.prepFeature();
6728 return !!this.feature[1] && (this.feature[1] & (1 << 9));
6729 };
6730 UChar.prototype.getCanonicalClass = function(){
6731 this.prepFeature();
6732 return !!this.feature[1] ? (this.feature[1] & 0xff) : 0;
6733 };
6734 UChar.prototype.getComposite = function(following){
6735 this.prepFeature();
6736 if(!this.feature[2]){
6737 return null;
6738 }
6739 var cp = this.feature[2][following.codepoint];
6740 return cp ? UChar.fromCharCode(cp) : null;
6741 };
6742
6743 var UCharIterator = function(str){
6744 this.str = str;
6745 this.cursor = 0;
6746 };
6747 UCharIterator.prototype.next = function(){
6748 if(!!this.str && this.cursor < this.str.length){
6749 var cp = this.str.charCodeAt(this.cursor++);
6750 var d;
6751 if(UChar.isHighSurrogate(cp) && this.cursor < this.str.length && UChar.isLowSurrogate((d = this.str.charCodeAt(this.cursor)))){
6752 cp = (cp - 0xD800) * 0x400 + (d -0xDC00) + 0x10000;
6753 ++this.cursor;
6754 }
6755 return UChar.fromCharCode(cp);
6756 } else {
6757 this.str = null;
6758 return null;
6759 }
6760 };
6761
6762 var RecursDecompIterator = function(it, cano){
6763 this.it = it;
6764 this.canonical = cano;
6765 this.resBuf = [];
6766 };
6767
6768 RecursDecompIterator.prototype.next = function(){
6769 function recursiveDecomp(cano, uchar){
6770 var decomp = uchar.getDecomp();
6771 if(!!decomp && !(cano && uchar.isCompatibility())){
6772 var ret = [];
6773 for(var i = 0; i < decomp.length; ++i){
6774 var a = recursiveDecomp(cano, UChar.fromCharCode(decomp[i]));
6775 ret = ret.concat(a);
6776 }
6777 return ret;
6778 } else {
6779 return [uchar];
6780 }
6781 }
6782 if(this.resBuf.length === 0){
6783 var uchar = this.it.next();
6784 if(!uchar){
6785 return null;
6786 }
6787 this.resBuf = recursiveDecomp(this.canonical, uchar);
6788 }
6789 return this.resBuf.shift();
6790 };
6791
6792 var DecompIterator = function(it){
6793 this.it = it;
6794 this.resBuf = [];
6795 };
6796
6797 DecompIterator.prototype.next = function(){
6798 var cc;
6799 if(this.resBuf.length === 0){
6800 do{
6801 var uchar = this.it.next();
6802 if(!uchar){
6803 break;
6804 }
6805 cc = uchar.getCanonicalClass();
6806 var inspt = this.resBuf.length;
6807 if(cc !== 0){
6808 for(; inspt > 0; --inspt){
6809 var uchar2 = this.resBuf[inspt - 1];
6810 var cc2 = uchar2.getCanonicalClass();
6811 if(cc2 <= cc){
6812 break;
6813 }
6814 }
6815 }
6816 this.resBuf.splice(inspt, 0, uchar);
6817 } while(cc !== 0);
6818 }
6819 return this.resBuf.shift();
6820 };
6821
6822 var CompIterator = function(it){
6823 this.it = it;
6824 this.procBuf = [];
6825 this.resBuf = [];
6826 this.lastClass = null;
6827 };
6828
6829 CompIterator.prototype.next = function(){
6830 while(this.resBuf.length === 0){
6831 var uchar = this.it.next();
6832 if(!uchar){
6833 this.resBuf = this.procBuf;
6834 this.procBuf = [];
6835 break;
6836 }
6837 if(this.procBuf.length === 0){
6838 this.lastClass = uchar.getCanonicalClass();
6839 this.procBuf.push(uchar);
6840 } else {
6841 var starter = this.procBuf[0];
6842 var composite = starter.getComposite(uchar);
6843 var cc = uchar.getCanonicalClass();
6844 if(!!composite && (this.lastClass < cc || this.lastClass === 0)){
6845 this.procBuf[0] = composite;
6846 } else {
6847 if(cc === 0){
6848 this.resBuf = this.procBuf;
6849 this.procBuf = [];
6850 }
6851 this.lastClass = cc;
6852 this.procBuf.push(uchar);
6853 }
6854 }
6855 }
6856 return this.resBuf.shift();
6857 };
6858
6859 var createIterator = function(mode, str){
6860 switch(mode){
6861 case "NFD":
6862 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true));
6863 case "NFKD":
6864 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false));
6865 case "NFC":
6866 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true)));
6867 case "NFKC":
6868 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false)));
6869 }
6870 throw mode + " is invalid";
6871 };
6872 var normalize = function(mode, str){
6873 var it = createIterator(mode, str);
6874 var ret = "";
6875 var uchar;
6876 while(!!(uchar = it.next())){
6877 ret += uchar.toString();
6878 }
6879 return ret;
6880 };
6881
6882 /* API functions */
6883 function nfd(str){
6884 return normalize("NFD", str);
6885 }
6886
6887 function nfkd(str){
6888 return normalize("NFKD", str);
6889 }
6890
6891 function nfc(str){
6892 return normalize("NFC", str);
6893 }
6894
6895 function nfkc(str){
6896 return normalize("NFKC", str);
6897 }
6898
6899/* Unicode data */
6900UChar.udata={
69010:{60:[,,{824:8814}],61:[,,{824:8800}],62:[,,{824:8815}],65:[,,{768:192,769:193,770:194,771:195,772:256,774:258,775:550,776:196,777:7842,778:197,780:461,783:512,785:514,803:7840,805:7680,808:260}],66:[,,{775:7682,803:7684,817:7686}],67:[,,{769:262,770:264,775:266,780:268,807:199}],68:[,,{775:7690,780:270,803:7692,807:7696,813:7698,817:7694}],69:[,,{768:200,769:201,770:202,771:7868,772:274,774:276,775:278,776:203,777:7866,780:282,783:516,785:518,803:7864,807:552,808:280,813:7704,816:7706}],70:[,,{775:7710}],71:[,,{769:500,770:284,772:7712,774:286,775:288,780:486,807:290}],72:[,,{770:292,775:7714,776:7718,780:542,803:7716,807:7720,814:7722}],73:[,,{768:204,769:205,770:206,771:296,772:298,774:300,775:304,776:207,777:7880,780:463,783:520,785:522,803:7882,808:302,816:7724}],74:[,,{770:308}],75:[,,{769:7728,780:488,803:7730,807:310,817:7732}],76:[,,{769:313,780:317,803:7734,807:315,813:7740,817:7738}],77:[,,{769:7742,775:7744,803:7746}],78:[,,{768:504,769:323,771:209,775:7748,780:327,803:7750,807:325,813:7754,817:7752}],79:[,,{768:210,769:211,770:212,771:213,772:332,774:334,775:558,776:214,777:7886,779:336,780:465,783:524,785:526,795:416,803:7884,808:490}],80:[,,{769:7764,775:7766}],82:[,,{769:340,775:7768,780:344,783:528,785:530,803:7770,807:342,817:7774}],83:[,,{769:346,770:348,775:7776,780:352,803:7778,806:536,807:350}],84:[,,{775:7786,780:356,803:7788,806:538,807:354,813:7792,817:7790}],85:[,,{768:217,769:218,770:219,771:360,772:362,774:364,776:220,777:7910,778:366,779:368,780:467,783:532,785:534,795:431,803:7908,804:7794,808:370,813:7798,816:7796}],86:[,,{771:7804,803:7806}],87:[,,{768:7808,769:7810,770:372,775:7814,776:7812,803:7816}],88:[,,{775:7818,776:7820}],89:[,,{768:7922,769:221,770:374,771:7928,772:562,775:7822,776:376,777:7926,803:7924}],90:[,,{769:377,770:7824,775:379,780:381,803:7826,817:7828}],97:[,,{768:224,769:225,770:226,771:227,772:257,774:259,775:551,776:228,777:7843,778:229,780:462,783:513,785:515,803:7841,805:7681,808:261}],98:[,,{775:7683,803:7685,817:7687}],99:[,,{769:263,770:265,775:267,780:269,807:231}],100:[,,{775:7691,780:271,803:7693,807:7697,813:7699,817:7695}],101:[,,{768:232,769:233,770:234,771:7869,772:275,774:277,775:279,776:235,777:7867,780:283,783:517,785:519,803:7865,807:553,808:281,813:7705,816:7707}],102:[,,{775:7711}],103:[,,{769:501,770:285,772:7713,774:287,775:289,780:487,807:291}],104:[,,{770:293,775:7715,776:7719,780:543,803:7717,807:7721,814:7723,817:7830}],105:[,,{768:236,769:237,770:238,771:297,772:299,774:301,776:239,777:7881,780:464,783:521,785:523,803:7883,808:303,816:7725}],106:[,,{770:309,780:496}],107:[,,{769:7729,780:489,803:7731,807:311,817:7733}],108:[,,{769:314,780:318,803:7735,807:316,813:7741,817:7739}],109:[,,{769:7743,775:7745,803:7747}],110:[,,{768:505,769:324,771:241,775:7749,780:328,803:7751,807:326,813:7755,817:7753}],111:[,,{768:242,769:243,770:244,771:245,772:333,774:335,775:559,776:246,777:7887,779:337,780:466,783:525,785:527,795:417,803:7885,808:491}],112:[,,{769:7765,775:7767}],114:[,,{769:341,775:7769,780:345,783:529,785:531,803:7771,807:343,817:7775}],115:[,,{769:347,770:349,775:7777,780:353,803:7779,806:537,807:351}],116:[,,{775:7787,776:7831,780:357,803:7789,806:539,807:355,813:7793,817:7791}],117:[,,{768:249,769:250,770:251,771:361,772:363,774:365,776:252,777:7911,778:367,779:369,780:468,783:533,785:535,795:432,803:7909,804:7795,808:371,813:7799,816:7797}],118:[,,{771:7805,803:7807}],119:[,,{768:7809,769:7811,770:373,775:7815,776:7813,778:7832,803:7817}],120:[,,{775:7819,776:7821}],121:[,,{768:7923,769:253,770:375,771:7929,772:563,775:7823,776:255,777:7927,778:7833,803:7925}],122:[,,{769:378,770:7825,775:380,780:382,803:7827,817:7829}],160:[[32],256],168:[[32,776],256,{768:8173,769:901,834:8129}],170:[[97],256],175:[[32,772],256],178:[[50],256],179:[[51],256],180:[[32,769],256],181:[[956],256],184:[[32,807],256],185:[[49],256],186:[[111],256],188:[[49,8260,52],256],189:[[49,8260,50],256],190:[[51,8260,52],256],192:[[65,768]],193:[[65,769]],194:[[65,770],,{768:7846,769:7844,771:7850,777:7848}],195:[[65,771]],196:[[65,776],,{772:478}],197:[[65,778],,{769:506}],198:[,,{769:508,772:482}],199:[[67,807],,{769:7688}],200:[[69,768]],201:[[69,769]],202:[[69,770],,{768:7872,769:7870,771:7876,777:7874}],203:[[69,776]],204:[[73,768]],205:[[73,769]],206:[[73,770]],207:[[73,776],,{769:7726}],209:[[78,771]],210:[[79,768]],211:[[79,769]],212:[[79,770],,{768:7890,769:7888,771:7894,777:7892}],213:[[79,771],,{769:7756,772:556,776:7758}],214:[[79,776],,{772:554}],216:[,,{769:510}],217:[[85,768]],218:[[85,769]],219:[[85,770]],220:[[85,776],,{768:475,769:471,772:469,780:473}],221:[[89,769]],224:[[97,768]],225:[[97,769]],226:[[97,770],,{768:7847,769:7845,771:7851,777:7849}],227:[[97,771]],228:[[97,776],,{772:479}],229:[[97,778],,{769:507}],230:[,,{769:509,772:483}],231:[[99,807],,{769:7689}],232:[[101,768]],233:[[101,769]],234:[[101,770],,{768:7873,769:7871,771:7877,777:7875}],235:[[101,776]],236:[[105,768]],237:[[105,769]],238:[[105,770]],239:[[105,776],,{769:7727}],241:[[110,771]],242:[[111,768]],243:[[111,769]],244:[[111,770],,{768:7891,769:7889,771:7895,777:7893}],245:[[111,771],,{769:7757,772:557,776:7759}],246:[[111,776],,{772:555}],248:[,,{769:511}],249:[[117,768]],250:[[117,769]],251:[[117,770]],252:[[117,776],,{768:476,769:472,772:470,780:474}],253:[[121,769]],255:[[121,776]]},
6902256:{256:[[65,772]],257:[[97,772]],258:[[65,774],,{768:7856,769:7854,771:7860,777:7858}],259:[[97,774],,{768:7857,769:7855,771:7861,777:7859}],260:[[65,808]],261:[[97,808]],262:[[67,769]],263:[[99,769]],264:[[67,770]],265:[[99,770]],266:[[67,775]],267:[[99,775]],268:[[67,780]],269:[[99,780]],270:[[68,780]],271:[[100,780]],274:[[69,772],,{768:7700,769:7702}],275:[[101,772],,{768:7701,769:7703}],276:[[69,774]],277:[[101,774]],278:[[69,775]],279:[[101,775]],280:[[69,808]],281:[[101,808]],282:[[69,780]],283:[[101,780]],284:[[71,770]],285:[[103,770]],286:[[71,774]],287:[[103,774]],288:[[71,775]],289:[[103,775]],290:[[71,807]],291:[[103,807]],292:[[72,770]],293:[[104,770]],296:[[73,771]],297:[[105,771]],298:[[73,772]],299:[[105,772]],300:[[73,774]],301:[[105,774]],302:[[73,808]],303:[[105,808]],304:[[73,775]],306:[[73,74],256],307:[[105,106],256],308:[[74,770]],309:[[106,770]],310:[[75,807]],311:[[107,807]],313:[[76,769]],314:[[108,769]],315:[[76,807]],316:[[108,807]],317:[[76,780]],318:[[108,780]],319:[[76,183],256],320:[[108,183],256],323:[[78,769]],324:[[110,769]],325:[[78,807]],326:[[110,807]],327:[[78,780]],328:[[110,780]],329:[[700,110],256],332:[[79,772],,{768:7760,769:7762}],333:[[111,772],,{768:7761,769:7763}],334:[[79,774]],335:[[111,774]],336:[[79,779]],337:[[111,779]],340:[[82,769]],341:[[114,769]],342:[[82,807]],343:[[114,807]],344:[[82,780]],345:[[114,780]],346:[[83,769],,{775:7780}],347:[[115,769],,{775:7781}],348:[[83,770]],349:[[115,770]],350:[[83,807]],351:[[115,807]],352:[[83,780],,{775:7782}],353:[[115,780],,{775:7783}],354:[[84,807]],355:[[116,807]],356:[[84,780]],357:[[116,780]],360:[[85,771],,{769:7800}],361:[[117,771],,{769:7801}],362:[[85,772],,{776:7802}],363:[[117,772],,{776:7803}],364:[[85,774]],365:[[117,774]],366:[[85,778]],367:[[117,778]],368:[[85,779]],369:[[117,779]],370:[[85,808]],371:[[117,808]],372:[[87,770]],373:[[119,770]],374:[[89,770]],375:[[121,770]],376:[[89,776]],377:[[90,769]],378:[[122,769]],379:[[90,775]],380:[[122,775]],381:[[90,780]],382:[[122,780]],383:[[115],256,{775:7835}],416:[[79,795],,{768:7900,769:7898,771:7904,777:7902,803:7906}],417:[[111,795],,{768:7901,769:7899,771:7905,777:7903,803:7907}],431:[[85,795],,{768:7914,769:7912,771:7918,777:7916,803:7920}],432:[[117,795],,{768:7915,769:7913,771:7919,777:7917,803:7921}],439:[,,{780:494}],452:[[68,381],256],453:[[68,382],256],454:[[100,382],256],455:[[76,74],256],456:[[76,106],256],457:[[108,106],256],458:[[78,74],256],459:[[78,106],256],460:[[110,106],256],461:[[65,780]],462:[[97,780]],463:[[73,780]],464:[[105,780]],465:[[79,780]],466:[[111,780]],467:[[85,780]],468:[[117,780]],469:[[220,772]],470:[[252,772]],471:[[220,769]],472:[[252,769]],473:[[220,780]],474:[[252,780]],475:[[220,768]],476:[[252,768]],478:[[196,772]],479:[[228,772]],480:[[550,772]],481:[[551,772]],482:[[198,772]],483:[[230,772]],486:[[71,780]],487:[[103,780]],488:[[75,780]],489:[[107,780]],490:[[79,808],,{772:492}],491:[[111,808],,{772:493}],492:[[490,772]],493:[[491,772]],494:[[439,780]],495:[[658,780]],496:[[106,780]],497:[[68,90],256],498:[[68,122],256],499:[[100,122],256],500:[[71,769]],501:[[103,769]],504:[[78,768]],505:[[110,768]],506:[[197,769]],507:[[229,769]],508:[[198,769]],509:[[230,769]],510:[[216,769]],511:[[248,769]],66045:[,220]},
6903512:{512:[[65,783]],513:[[97,783]],514:[[65,785]],515:[[97,785]],516:[[69,783]],517:[[101,783]],518:[[69,785]],519:[[101,785]],520:[[73,783]],521:[[105,783]],522:[[73,785]],523:[[105,785]],524:[[79,783]],525:[[111,783]],526:[[79,785]],527:[[111,785]],528:[[82,783]],529:[[114,783]],530:[[82,785]],531:[[114,785]],532:[[85,783]],533:[[117,783]],534:[[85,785]],535:[[117,785]],536:[[83,806]],537:[[115,806]],538:[[84,806]],539:[[116,806]],542:[[72,780]],543:[[104,780]],550:[[65,775],,{772:480}],551:[[97,775],,{772:481}],552:[[69,807],,{774:7708}],553:[[101,807],,{774:7709}],554:[[214,772]],555:[[246,772]],556:[[213,772]],557:[[245,772]],558:[[79,775],,{772:560}],559:[[111,775],,{772:561}],560:[[558,772]],561:[[559,772]],562:[[89,772]],563:[[121,772]],658:[,,{780:495}],688:[[104],256],689:[[614],256],690:[[106],256],691:[[114],256],692:[[633],256],693:[[635],256],694:[[641],256],695:[[119],256],696:[[121],256],728:[[32,774],256],729:[[32,775],256],730:[[32,778],256],731:[[32,808],256],732:[[32,771],256],733:[[32,779],256],736:[[611],256],737:[[108],256],738:[[115],256],739:[[120],256],740:[[661],256],66272:[,220]},
6904768:{768:[,230],769:[,230],770:[,230],771:[,230],772:[,230],773:[,230],774:[,230],775:[,230],776:[,230,{769:836}],777:[,230],778:[,230],779:[,230],780:[,230],781:[,230],782:[,230],783:[,230],784:[,230],785:[,230],786:[,230],787:[,230],788:[,230],789:[,232],790:[,220],791:[,220],792:[,220],793:[,220],794:[,232],795:[,216],796:[,220],797:[,220],798:[,220],799:[,220],800:[,220],801:[,202],802:[,202],803:[,220],804:[,220],805:[,220],806:[,220],807:[,202],808:[,202],809:[,220],810:[,220],811:[,220],812:[,220],813:[,220],814:[,220],815:[,220],816:[,220],817:[,220],818:[,220],819:[,220],820:[,1],821:[,1],822:[,1],823:[,1],824:[,1],825:[,220],826:[,220],827:[,220],828:[,220],829:[,230],830:[,230],831:[,230],832:[[768],230],833:[[769],230],834:[,230],835:[[787],230],836:[[776,769],230],837:[,240],838:[,230],839:[,220],840:[,220],841:[,220],842:[,230],843:[,230],844:[,230],845:[,220],846:[,220],848:[,230],849:[,230],850:[,230],851:[,220],852:[,220],853:[,220],854:[,220],855:[,230],856:[,232],857:[,220],858:[,220],859:[,230],860:[,233],861:[,234],862:[,234],863:[,233],864:[,234],865:[,234],866:[,233],867:[,230],868:[,230],869:[,230],870:[,230],871:[,230],872:[,230],873:[,230],874:[,230],875:[,230],876:[,230],877:[,230],878:[,230],879:[,230],884:[[697]],890:[[32,837],256],894:[[59]],900:[[32,769],256],901:[[168,769]],902:[[913,769]],903:[[183]],904:[[917,769]],905:[[919,769]],906:[[921,769]],908:[[927,769]],910:[[933,769]],911:[[937,769]],912:[[970,769]],913:[,,{768:8122,769:902,772:8121,774:8120,787:7944,788:7945,837:8124}],917:[,,{768:8136,769:904,787:7960,788:7961}],919:[,,{768:8138,769:905,787:7976,788:7977,837:8140}],921:[,,{768:8154,769:906,772:8153,774:8152,776:938,787:7992,788:7993}],927:[,,{768:8184,769:908,787:8008,788:8009}],929:[,,{788:8172}],933:[,,{768:8170,769:910,772:8169,774:8168,776:939,788:8025}],937:[,,{768:8186,769:911,787:8040,788:8041,837:8188}],938:[[921,776]],939:[[933,776]],940:[[945,769],,{837:8116}],941:[[949,769]],942:[[951,769],,{837:8132}],943:[[953,769]],944:[[971,769]],945:[,,{768:8048,769:940,772:8113,774:8112,787:7936,788:7937,834:8118,837:8115}],949:[,,{768:8050,769:941,787:7952,788:7953}],951:[,,{768:8052,769:942,787:7968,788:7969,834:8134,837:8131}],953:[,,{768:8054,769:943,772:8145,774:8144,776:970,787:7984,788:7985,834:8150}],959:[,,{768:8056,769:972,787:8000,788:8001}],961:[,,{787:8164,788:8165}],965:[,,{768:8058,769:973,772:8161,774:8160,776:971,787:8016,788:8017,834:8166}],969:[,,{768:8060,769:974,787:8032,788:8033,834:8182,837:8179}],970:[[953,776],,{768:8146,769:912,834:8151}],971:[[965,776],,{768:8162,769:944,834:8167}],972:[[959,769]],973:[[965,769]],974:[[969,769],,{837:8180}],976:[[946],256],977:[[952],256],978:[[933],256,{769:979,776:980}],979:[[978,769]],980:[[978,776]],981:[[966],256],982:[[960],256],1008:[[954],256],1009:[[961],256],1010:[[962],256],1012:[[920],256],1013:[[949],256],1017:[[931],256],66422:[,230],66423:[,230],66424:[,230],66425:[,230],66426:[,230]},
69051024:{1024:[[1045,768]],1025:[[1045,776]],1027:[[1043,769]],1030:[,,{776:1031}],1031:[[1030,776]],1036:[[1050,769]],1037:[[1048,768]],1038:[[1059,774]],1040:[,,{774:1232,776:1234}],1043:[,,{769:1027}],1045:[,,{768:1024,774:1238,776:1025}],1046:[,,{774:1217,776:1244}],1047:[,,{776:1246}],1048:[,,{768:1037,772:1250,774:1049,776:1252}],1049:[[1048,774]],1050:[,,{769:1036}],1054:[,,{776:1254}],1059:[,,{772:1262,774:1038,776:1264,779:1266}],1063:[,,{776:1268}],1067:[,,{776:1272}],1069:[,,{776:1260}],1072:[,,{774:1233,776:1235}],1075:[,,{769:1107}],1077:[,,{768:1104,774:1239,776:1105}],1078:[,,{774:1218,776:1245}],1079:[,,{776:1247}],1080:[,,{768:1117,772:1251,774:1081,776:1253}],1081:[[1080,774]],1082:[,,{769:1116}],1086:[,,{776:1255}],1091:[,,{772:1263,774:1118,776:1265,779:1267}],1095:[,,{776:1269}],1099:[,,{776:1273}],1101:[,,{776:1261}],1104:[[1077,768]],1105:[[1077,776]],1107:[[1075,769]],1110:[,,{776:1111}],1111:[[1110,776]],1116:[[1082,769]],1117:[[1080,768]],1118:[[1091,774]],1140:[,,{783:1142}],1141:[,,{783:1143}],1142:[[1140,783]],1143:[[1141,783]],1155:[,230],1156:[,230],1157:[,230],1158:[,230],1159:[,230],1217:[[1046,774]],1218:[[1078,774]],1232:[[1040,774]],1233:[[1072,774]],1234:[[1040,776]],1235:[[1072,776]],1238:[[1045,774]],1239:[[1077,774]],1240:[,,{776:1242}],1241:[,,{776:1243}],1242:[[1240,776]],1243:[[1241,776]],1244:[[1046,776]],1245:[[1078,776]],1246:[[1047,776]],1247:[[1079,776]],1250:[[1048,772]],1251:[[1080,772]],1252:[[1048,776]],1253:[[1080,776]],1254:[[1054,776]],1255:[[1086,776]],1256:[,,{776:1258}],1257:[,,{776:1259}],1258:[[1256,776]],1259:[[1257,776]],1260:[[1069,776]],1261:[[1101,776]],1262:[[1059,772]],1263:[[1091,772]],1264:[[1059,776]],1265:[[1091,776]],1266:[[1059,779]],1267:[[1091,779]],1268:[[1063,776]],1269:[[1095,776]],1272:[[1067,776]],1273:[[1099,776]]},
69061280:{1415:[[1381,1410],256],1425:[,220],1426:[,230],1427:[,230],1428:[,230],1429:[,230],1430:[,220],1431:[,230],1432:[,230],1433:[,230],1434:[,222],1435:[,220],1436:[,230],1437:[,230],1438:[,230],1439:[,230],1440:[,230],1441:[,230],1442:[,220],1443:[,220],1444:[,220],1445:[,220],1446:[,220],1447:[,220],1448:[,230],1449:[,230],1450:[,220],1451:[,230],1452:[,230],1453:[,222],1454:[,228],1455:[,230],1456:[,10],1457:[,11],1458:[,12],1459:[,13],1460:[,14],1461:[,15],1462:[,16],1463:[,17],1464:[,18],1465:[,19],1466:[,19],1467:[,20],1468:[,21],1469:[,22],1471:[,23],1473:[,24],1474:[,25],1476:[,230],1477:[,220],1479:[,18]},
69071536:{1552:[,230],1553:[,230],1554:[,230],1555:[,230],1556:[,230],1557:[,230],1558:[,230],1559:[,230],1560:[,30],1561:[,31],1562:[,32],1570:[[1575,1619]],1571:[[1575,1620]],1572:[[1608,1620]],1573:[[1575,1621]],1574:[[1610,1620]],1575:[,,{1619:1570,1620:1571,1621:1573}],1608:[,,{1620:1572}],1610:[,,{1620:1574}],1611:[,27],1612:[,28],1613:[,29],1614:[,30],1615:[,31],1616:[,32],1617:[,33],1618:[,34],1619:[,230],1620:[,230],1621:[,220],1622:[,220],1623:[,230],1624:[,230],1625:[,230],1626:[,230],1627:[,230],1628:[,220],1629:[,230],1630:[,230],1631:[,220],1648:[,35],1653:[[1575,1652],256],1654:[[1608,1652],256],1655:[[1735,1652],256],1656:[[1610,1652],256],1728:[[1749,1620]],1729:[,,{1620:1730}],1730:[[1729,1620]],1746:[,,{1620:1747}],1747:[[1746,1620]],1749:[,,{1620:1728}],1750:[,230],1751:[,230],1752:[,230],1753:[,230],1754:[,230],1755:[,230],1756:[,230],1759:[,230],1760:[,230],1761:[,230],1762:[,230],1763:[,220],1764:[,230],1767:[,230],1768:[,230],1770:[,220],1771:[,230],1772:[,230],1773:[,220]},
69081792:{1809:[,36],1840:[,230],1841:[,220],1842:[,230],1843:[,230],1844:[,220],1845:[,230],1846:[,230],1847:[,220],1848:[,220],1849:[,220],1850:[,230],1851:[,220],1852:[,220],1853:[,230],1854:[,220],1855:[,230],1856:[,230],1857:[,230],1858:[,220],1859:[,230],1860:[,220],1861:[,230],1862:[,220],1863:[,230],1864:[,220],1865:[,230],1866:[,230],2027:[,230],2028:[,230],2029:[,230],2030:[,230],2031:[,230],2032:[,230],2033:[,230],2034:[,220],2035:[,230]},
69092048:{2070:[,230],2071:[,230],2072:[,230],2073:[,230],2075:[,230],2076:[,230],2077:[,230],2078:[,230],2079:[,230],2080:[,230],2081:[,230],2082:[,230],2083:[,230],2085:[,230],2086:[,230],2087:[,230],2089:[,230],2090:[,230],2091:[,230],2092:[,230],2093:[,230],2137:[,220],2138:[,220],2139:[,220],2276:[,230],2277:[,230],2278:[,220],2279:[,230],2280:[,230],2281:[,220],2282:[,230],2283:[,230],2284:[,230],2285:[,220],2286:[,220],2287:[,220],2288:[,27],2289:[,28],2290:[,29],2291:[,230],2292:[,230],2293:[,230],2294:[,220],2295:[,230],2296:[,230],2297:[,220],2298:[,220],2299:[,230],2300:[,230],2301:[,230],2302:[,230],2303:[,230]},
69102304:{2344:[,,{2364:2345}],2345:[[2344,2364]],2352:[,,{2364:2353}],2353:[[2352,2364]],2355:[,,{2364:2356}],2356:[[2355,2364]],2364:[,7],2381:[,9],2385:[,230],2386:[,220],2387:[,230],2388:[,230],2392:[[2325,2364],512],2393:[[2326,2364],512],2394:[[2327,2364],512],2395:[[2332,2364],512],2396:[[2337,2364],512],2397:[[2338,2364],512],2398:[[2347,2364],512],2399:[[2351,2364],512],2492:[,7],2503:[,,{2494:2507,2519:2508}],2507:[[2503,2494]],2508:[[2503,2519]],2509:[,9],2524:[[2465,2492],512],2525:[[2466,2492],512],2527:[[2479,2492],512]},
69112560:{2611:[[2610,2620],512],2614:[[2616,2620],512],2620:[,7],2637:[,9],2649:[[2582,2620],512],2650:[[2583,2620],512],2651:[[2588,2620],512],2654:[[2603,2620],512],2748:[,7],2765:[,9],68109:[,220],68111:[,230],68152:[,230],68153:[,1],68154:[,220],68159:[,9],68325:[,230],68326:[,220]},
69122816:{2876:[,7],2887:[,,{2878:2891,2902:2888,2903:2892}],2888:[[2887,2902]],2891:[[2887,2878]],2892:[[2887,2903]],2893:[,9],2908:[[2849,2876],512],2909:[[2850,2876],512],2962:[,,{3031:2964}],2964:[[2962,3031]],3014:[,,{3006:3018,3031:3020}],3015:[,,{3006:3019}],3018:[[3014,3006]],3019:[[3015,3006]],3020:[[3014,3031]],3021:[,9]},
69133072:{3142:[,,{3158:3144}],3144:[[3142,3158]],3149:[,9],3157:[,84],3158:[,91],3260:[,7],3263:[,,{3285:3264}],3264:[[3263,3285]],3270:[,,{3266:3274,3285:3271,3286:3272}],3271:[[3270,3285]],3272:[[3270,3286]],3274:[[3270,3266],,{3285:3275}],3275:[[3274,3285]],3277:[,9]},
69143328:{3398:[,,{3390:3402,3415:3404}],3399:[,,{3390:3403}],3402:[[3398,3390]],3403:[[3399,3390]],3404:[[3398,3415]],3405:[,9],3530:[,9],3545:[,,{3530:3546,3535:3548,3551:3550}],3546:[[3545,3530]],3548:[[3545,3535],,{3530:3549}],3549:[[3548,3530]],3550:[[3545,3551]]},
69153584:{3635:[[3661,3634],256],3640:[,103],3641:[,103],3642:[,9],3656:[,107],3657:[,107],3658:[,107],3659:[,107],3763:[[3789,3762],256],3768:[,118],3769:[,118],3784:[,122],3785:[,122],3786:[,122],3787:[,122],3804:[[3755,3737],256],3805:[[3755,3745],256]},
69163840:{3852:[[3851],256],3864:[,220],3865:[,220],3893:[,220],3895:[,220],3897:[,216],3907:[[3906,4023],512],3917:[[3916,4023],512],3922:[[3921,4023],512],3927:[[3926,4023],512],3932:[[3931,4023],512],3945:[[3904,4021],512],3953:[,129],3954:[,130],3955:[[3953,3954],512],3956:[,132],3957:[[3953,3956],512],3958:[[4018,3968],512],3959:[[4018,3969],256],3960:[[4019,3968],512],3961:[[4019,3969],256],3962:[,130],3963:[,130],3964:[,130],3965:[,130],3968:[,130],3969:[[3953,3968],512],3970:[,230],3971:[,230],3972:[,9],3974:[,230],3975:[,230],3987:[[3986,4023],512],3997:[[3996,4023],512],4002:[[4001,4023],512],4007:[[4006,4023],512],4012:[[4011,4023],512],4025:[[3984,4021],512],4038:[,220]},
69174096:{4133:[,,{4142:4134}],4134:[[4133,4142]],4151:[,7],4153:[,9],4154:[,9],4237:[,220],4348:[[4316],256],69702:[,9],69759:[,9],69785:[,,{69818:69786}],69786:[[69785,69818]],69787:[,,{69818:69788}],69788:[[69787,69818]],69797:[,,{69818:69803}],69803:[[69797,69818]],69817:[,9],69818:[,7]},
69184352:{69888:[,230],69889:[,230],69890:[,230],69934:[[69937,69927]],69935:[[69938,69927]],69937:[,,{69927:69934}],69938:[,,{69927:69935}],69939:[,9],69940:[,9],70003:[,7],70080:[,9]},
69194608:{70197:[,9],70198:[,7],70377:[,7],70378:[,9]},
69204864:{4957:[,230],4958:[,230],4959:[,230],70460:[,7],70471:[,,{70462:70475,70487:70476}],70475:[[70471,70462]],70476:[[70471,70487]],70477:[,9],70502:[,230],70503:[,230],70504:[,230],70505:[,230],70506:[,230],70507:[,230],70508:[,230],70512:[,230],70513:[,230],70514:[,230],70515:[,230],70516:[,230]},
69215120:{70841:[,,{70832:70844,70842:70843,70845:70846}],70843:[[70841,70842]],70844:[[70841,70832]],70846:[[70841,70845]],70850:[,9],70851:[,7]},
69225376:{71096:[,,{71087:71098}],71097:[,,{71087:71099}],71098:[[71096,71087]],71099:[[71097,71087]],71103:[,9],71104:[,7]},
69235632:{71231:[,9],71350:[,9],71351:[,7]},
69245888:{5908:[,9],5940:[,9],6098:[,9],6109:[,230]},
69256144:{6313:[,228]},
69266400:{6457:[,222],6458:[,230],6459:[,220]},
69276656:{6679:[,230],6680:[,220],6752:[,9],6773:[,230],6774:[,230],6775:[,230],6776:[,230],6777:[,230],6778:[,230],6779:[,230],6780:[,230],6783:[,220],6832:[,230],6833:[,230],6834:[,230],6835:[,230],6836:[,230],6837:[,220],6838:[,220],6839:[,220],6840:[,220],6841:[,220],6842:[,220],6843:[,230],6844:[,230],6845:[,220]},
69286912:{6917:[,,{6965:6918}],6918:[[6917,6965]],6919:[,,{6965:6920}],6920:[[6919,6965]],6921:[,,{6965:6922}],6922:[[6921,6965]],6923:[,,{6965:6924}],6924:[[6923,6965]],6925:[,,{6965:6926}],6926:[[6925,6965]],6929:[,,{6965:6930}],6930:[[6929,6965]],6964:[,7],6970:[,,{6965:6971}],6971:[[6970,6965]],6972:[,,{6965:6973}],6973:[[6972,6965]],6974:[,,{6965:6976}],6975:[,,{6965:6977}],6976:[[6974,6965]],6977:[[6975,6965]],6978:[,,{6965:6979}],6979:[[6978,6965]],6980:[,9],7019:[,230],7020:[,220],7021:[,230],7022:[,230],7023:[,230],7024:[,230],7025:[,230],7026:[,230],7027:[,230],7082:[,9],7083:[,9],7142:[,7],7154:[,9],7155:[,9]},
69297168:{7223:[,7],7376:[,230],7377:[,230],7378:[,230],7380:[,1],7381:[,220],7382:[,220],7383:[,220],7384:[,220],7385:[,220],7386:[,230],7387:[,230],7388:[,220],7389:[,220],7390:[,220],7391:[,220],7392:[,230],7394:[,1],7395:[,1],7396:[,1],7397:[,1],7398:[,1],7399:[,1],7400:[,1],7405:[,220],7412:[,230],7416:[,230],7417:[,230]},
69307424:{7468:[[65],256],7469:[[198],256],7470:[[66],256],7472:[[68],256],7473:[[69],256],7474:[[398],256],7475:[[71],256],7476:[[72],256],7477:[[73],256],7478:[[74],256],7479:[[75],256],7480:[[76],256],7481:[[77],256],7482:[[78],256],7484:[[79],256],7485:[[546],256],7486:[[80],256],7487:[[82],256],7488:[[84],256],7489:[[85],256],7490:[[87],256],7491:[[97],256],7492:[[592],256],7493:[[593],256],7494:[[7426],256],7495:[[98],256],7496:[[100],256],7497:[[101],256],7498:[[601],256],7499:[[603],256],7500:[[604],256],7501:[[103],256],7503:[[107],256],7504:[[109],256],7505:[[331],256],7506:[[111],256],7507:[[596],256],7508:[[7446],256],7509:[[7447],256],7510:[[112],256],7511:[[116],256],7512:[[117],256],7513:[[7453],256],7514:[[623],256],7515:[[118],256],7516:[[7461],256],7517:[[946],256],7518:[[947],256],7519:[[948],256],7520:[[966],256],7521:[[967],256],7522:[[105],256],7523:[[114],256],7524:[[117],256],7525:[[118],256],7526:[[946],256],7527:[[947],256],7528:[[961],256],7529:[[966],256],7530:[[967],256],7544:[[1085],256],7579:[[594],256],7580:[[99],256],7581:[[597],256],7582:[[240],256],7583:[[604],256],7584:[[102],256],7585:[[607],256],7586:[[609],256],7587:[[613],256],7588:[[616],256],7589:[[617],256],7590:[[618],256],7591:[[7547],256],7592:[[669],256],7593:[[621],256],7594:[[7557],256],7595:[[671],256],7596:[[625],256],7597:[[624],256],7598:[[626],256],7599:[[627],256],7600:[[628],256],7601:[[629],256],7602:[[632],256],7603:[[642],256],7604:[[643],256],7605:[[427],256],7606:[[649],256],7607:[[650],256],7608:[[7452],256],7609:[[651],256],7610:[[652],256],7611:[[122],256],7612:[[656],256],7613:[[657],256],7614:[[658],256],7615:[[952],256],7616:[,230],7617:[,230],7618:[,220],7619:[,230],7620:[,230],7621:[,230],7622:[,230],7623:[,230],7624:[,230],7625:[,230],7626:[,220],7627:[,230],7628:[,230],7629:[,234],7630:[,214],7631:[,220],7632:[,202],7633:[,230],7634:[,230],7635:[,230],7636:[,230],7637:[,230],7638:[,230],7639:[,230],7640:[,230],7641:[,230],7642:[,230],7643:[,230],7644:[,230],7645:[,230],7646:[,230],7647:[,230],7648:[,230],7649:[,230],7650:[,230],7651:[,230],7652:[,230],7653:[,230],7654:[,230],7655:[,230],7656:[,230],7657:[,230],7658:[,230],7659:[,230],7660:[,230],7661:[,230],7662:[,230],7663:[,230],7664:[,230],7665:[,230],7666:[,230],7667:[,230],7668:[,230],7669:[,230],7676:[,233],7677:[,220],7678:[,230],7679:[,220]},
69317680:{7680:[[65,805]],7681:[[97,805]],7682:[[66,775]],7683:[[98,775]],7684:[[66,803]],7685:[[98,803]],7686:[[66,817]],7687:[[98,817]],7688:[[199,769]],7689:[[231,769]],7690:[[68,775]],7691:[[100,775]],7692:[[68,803]],7693:[[100,803]],7694:[[68,817]],7695:[[100,817]],7696:[[68,807]],7697:[[100,807]],7698:[[68,813]],7699:[[100,813]],7700:[[274,768]],7701:[[275,768]],7702:[[274,769]],7703:[[275,769]],7704:[[69,813]],7705:[[101,813]],7706:[[69,816]],7707:[[101,816]],7708:[[552,774]],7709:[[553,774]],7710:[[70,775]],7711:[[102,775]],7712:[[71,772]],7713:[[103,772]],7714:[[72,775]],7715:[[104,775]],7716:[[72,803]],7717:[[104,803]],7718:[[72,776]],7719:[[104,776]],7720:[[72,807]],7721:[[104,807]],7722:[[72,814]],7723:[[104,814]],7724:[[73,816]],7725:[[105,816]],7726:[[207,769]],7727:[[239,769]],7728:[[75,769]],7729:[[107,769]],7730:[[75,803]],7731:[[107,803]],7732:[[75,817]],7733:[[107,817]],7734:[[76,803],,{772:7736}],7735:[[108,803],,{772:7737}],7736:[[7734,772]],7737:[[7735,772]],7738:[[76,817]],7739:[[108,817]],7740:[[76,813]],7741:[[108,813]],7742:[[77,769]],7743:[[109,769]],7744:[[77,775]],7745:[[109,775]],7746:[[77,803]],7747:[[109,803]],7748:[[78,775]],7749:[[110,775]],7750:[[78,803]],7751:[[110,803]],7752:[[78,817]],7753:[[110,817]],7754:[[78,813]],7755:[[110,813]],7756:[[213,769]],7757:[[245,769]],7758:[[213,776]],7759:[[245,776]],7760:[[332,768]],7761:[[333,768]],7762:[[332,769]],7763:[[333,769]],7764:[[80,769]],7765:[[112,769]],7766:[[80,775]],7767:[[112,775]],7768:[[82,775]],7769:[[114,775]],7770:[[82,803],,{772:7772}],7771:[[114,803],,{772:7773}],7772:[[7770,772]],7773:[[7771,772]],7774:[[82,817]],7775:[[114,817]],7776:[[83,775]],7777:[[115,775]],7778:[[83,803],,{775:7784}],7779:[[115,803],,{775:7785}],7780:[[346,775]],7781:[[347,775]],7782:[[352,775]],7783:[[353,775]],7784:[[7778,775]],7785:[[7779,775]],7786:[[84,775]],7787:[[116,775]],7788:[[84,803]],7789:[[116,803]],7790:[[84,817]],7791:[[116,817]],7792:[[84,813]],7793:[[116,813]],7794:[[85,804]],7795:[[117,804]],7796:[[85,816]],7797:[[117,816]],7798:[[85,813]],7799:[[117,813]],7800:[[360,769]],7801:[[361,769]],7802:[[362,776]],7803:[[363,776]],7804:[[86,771]],7805:[[118,771]],7806:[[86,803]],7807:[[118,803]],7808:[[87,768]],7809:[[119,768]],7810:[[87,769]],7811:[[119,769]],7812:[[87,776]],7813:[[119,776]],7814:[[87,775]],7815:[[119,775]],7816:[[87,803]],7817:[[119,803]],7818:[[88,775]],7819:[[120,775]],7820:[[88,776]],7821:[[120,776]],7822:[[89,775]],7823:[[121,775]],7824:[[90,770]],7825:[[122,770]],7826:[[90,803]],7827:[[122,803]],7828:[[90,817]],7829:[[122,817]],7830:[[104,817]],7831:[[116,776]],7832:[[119,778]],7833:[[121,778]],7834:[[97,702],256],7835:[[383,775]],7840:[[65,803],,{770:7852,774:7862}],7841:[[97,803],,{770:7853,774:7863}],7842:[[65,777]],7843:[[97,777]],7844:[[194,769]],7845:[[226,769]],7846:[[194,768]],7847:[[226,768]],7848:[[194,777]],7849:[[226,777]],7850:[[194,771]],7851:[[226,771]],7852:[[7840,770]],7853:[[7841,770]],7854:[[258,769]],7855:[[259,769]],7856:[[258,768]],7857:[[259,768]],7858:[[258,777]],7859:[[259,777]],7860:[[258,771]],7861:[[259,771]],7862:[[7840,774]],7863:[[7841,774]],7864:[[69,803],,{770:7878}],7865:[[101,803],,{770:7879}],7866:[[69,777]],7867:[[101,777]],7868:[[69,771]],7869:[[101,771]],7870:[[202,769]],7871:[[234,769]],7872:[[202,768]],7873:[[234,768]],7874:[[202,777]],7875:[[234,777]],7876:[[202,771]],7877:[[234,771]],7878:[[7864,770]],7879:[[7865,770]],7880:[[73,777]],7881:[[105,777]],7882:[[73,803]],7883:[[105,803]],7884:[[79,803],,{770:7896}],7885:[[111,803],,{770:7897}],7886:[[79,777]],7887:[[111,777]],7888:[[212,769]],7889:[[244,769]],7890:[[212,768]],7891:[[244,768]],7892:[[212,777]],7893:[[244,777]],7894:[[212,771]],7895:[[244,771]],7896:[[7884,770]],7897:[[7885,770]],7898:[[416,769]],7899:[[417,769]],7900:[[416,768]],7901:[[417,768]],7902:[[416,777]],7903:[[417,777]],7904:[[416,771]],7905:[[417,771]],7906:[[416,803]],7907:[[417,803]],7908:[[85,803]],7909:[[117,803]],7910:[[85,777]],7911:[[117,777]],7912:[[431,769]],7913:[[432,769]],7914:[[431,768]],7915:[[432,768]],7916:[[431,777]],7917:[[432,777]],7918:[[431,771]],7919:[[432,771]],7920:[[431,803]],7921:[[432,803]],7922:[[89,768]],7923:[[121,768]],7924:[[89,803]],7925:[[121,803]],7926:[[89,777]],7927:[[121,777]],7928:[[89,771]],7929:[[121,771]]},
69327936:{7936:[[945,787],,{768:7938,769:7940,834:7942,837:8064}],7937:[[945,788],,{768:7939,769:7941,834:7943,837:8065}],7938:[[7936,768],,{837:8066}],7939:[[7937,768],,{837:8067}],7940:[[7936,769],,{837:8068}],7941:[[7937,769],,{837:8069}],7942:[[7936,834],,{837:8070}],7943:[[7937,834],,{837:8071}],7944:[[913,787],,{768:7946,769:7948,834:7950,837:8072}],7945:[[913,788],,{768:7947,769:7949,834:7951,837:8073}],7946:[[7944,768],,{837:8074}],7947:[[7945,768],,{837:8075}],7948:[[7944,769],,{837:8076}],7949:[[7945,769],,{837:8077}],7950:[[7944,834],,{837:8078}],7951:[[7945,834],,{837:8079}],7952:[[949,787],,{768:7954,769:7956}],7953:[[949,788],,{768:7955,769:7957}],7954:[[7952,768]],7955:[[7953,768]],7956:[[7952,769]],7957:[[7953,769]],7960:[[917,787],,{768:7962,769:7964}],7961:[[917,788],,{768:7963,769:7965}],7962:[[7960,768]],7963:[[7961,768]],7964:[[7960,769]],7965:[[7961,769]],7968:[[951,787],,{768:7970,769:7972,834:7974,837:8080}],7969:[[951,788],,{768:7971,769:7973,834:7975,837:8081}],7970:[[7968,768],,{837:8082}],7971:[[7969,768],,{837:8083}],7972:[[7968,769],,{837:8084}],7973:[[7969,769],,{837:8085}],7974:[[7968,834],,{837:8086}],7975:[[7969,834],,{837:8087}],7976:[[919,787],,{768:7978,769:7980,834:7982,837:8088}],7977:[[919,788],,{768:7979,769:7981,834:7983,837:8089}],7978:[[7976,768],,{837:8090}],7979:[[7977,768],,{837:8091}],7980:[[7976,769],,{837:8092}],7981:[[7977,769],,{837:8093}],7982:[[7976,834],,{837:8094}],7983:[[7977,834],,{837:8095}],7984:[[953,787],,{768:7986,769:7988,834:7990}],7985:[[953,788],,{768:7987,769:7989,834:7991}],7986:[[7984,768]],7987:[[7985,768]],7988:[[7984,769]],7989:[[7985,769]],7990:[[7984,834]],7991:[[7985,834]],7992:[[921,787],,{768:7994,769:7996,834:7998}],7993:[[921,788],,{768:7995,769:7997,834:7999}],7994:[[7992,768]],7995:[[7993,768]],7996:[[7992,769]],7997:[[7993,769]],7998:[[7992,834]],7999:[[7993,834]],8000:[[959,787],,{768:8002,769:8004}],8001:[[959,788],,{768:8003,769:8005}],8002:[[8000,768]],8003:[[8001,768]],8004:[[8000,769]],8005:[[8001,769]],8008:[[927,787],,{768:8010,769:8012}],8009:[[927,788],,{768:8011,769:8013}],8010:[[8008,768]],8011:[[8009,768]],8012:[[8008,769]],8013:[[8009,769]],8016:[[965,787],,{768:8018,769:8020,834:8022}],8017:[[965,788],,{768:8019,769:8021,834:8023}],8018:[[8016,768]],8019:[[8017,768]],8020:[[8016,769]],8021:[[8017,769]],8022:[[8016,834]],8023:[[8017,834]],8025:[[933,788],,{768:8027,769:8029,834:8031}],8027:[[8025,768]],8029:[[8025,769]],8031:[[8025,834]],8032:[[969,787],,{768:8034,769:8036,834:8038,837:8096}],8033:[[969,788],,{768:8035,769:8037,834:8039,837:8097}],8034:[[8032,768],,{837:8098}],8035:[[8033,768],,{837:8099}],8036:[[8032,769],,{837:8100}],8037:[[8033,769],,{837:8101}],8038:[[8032,834],,{837:8102}],8039:[[8033,834],,{837:8103}],8040:[[937,787],,{768:8042,769:8044,834:8046,837:8104}],8041:[[937,788],,{768:8043,769:8045,834:8047,837:8105}],8042:[[8040,768],,{837:8106}],8043:[[8041,768],,{837:8107}],8044:[[8040,769],,{837:8108}],8045:[[8041,769],,{837:8109}],8046:[[8040,834],,{837:8110}],8047:[[8041,834],,{837:8111}],8048:[[945,768],,{837:8114}],8049:[[940]],8050:[[949,768]],8051:[[941]],8052:[[951,768],,{837:8130}],8053:[[942]],8054:[[953,768]],8055:[[943]],8056:[[959,768]],8057:[[972]],8058:[[965,768]],8059:[[973]],8060:[[969,768],,{837:8178}],8061:[[974]],8064:[[7936,837]],8065:[[7937,837]],8066:[[7938,837]],8067:[[7939,837]],8068:[[7940,837]],8069:[[7941,837]],8070:[[7942,837]],8071:[[7943,837]],8072:[[7944,837]],8073:[[7945,837]],8074:[[7946,837]],8075:[[7947,837]],8076:[[7948,837]],8077:[[7949,837]],8078:[[7950,837]],8079:[[7951,837]],8080:[[7968,837]],8081:[[7969,837]],8082:[[7970,837]],8083:[[7971,837]],8084:[[7972,837]],8085:[[7973,837]],8086:[[7974,837]],8087:[[7975,837]],8088:[[7976,837]],8089:[[7977,837]],8090:[[7978,837]],8091:[[7979,837]],8092:[[7980,837]],8093:[[7981,837]],8094:[[7982,837]],8095:[[7983,837]],8096:[[8032,837]],8097:[[8033,837]],8098:[[8034,837]],8099:[[8035,837]],8100:[[8036,837]],8101:[[8037,837]],8102:[[8038,837]],8103:[[8039,837]],8104:[[8040,837]],8105:[[8041,837]],8106:[[8042,837]],8107:[[8043,837]],8108:[[8044,837]],8109:[[8045,837]],8110:[[8046,837]],8111:[[8047,837]],8112:[[945,774]],8113:[[945,772]],8114:[[8048,837]],8115:[[945,837]],8116:[[940,837]],8118:[[945,834],,{837:8119}],8119:[[8118,837]],8120:[[913,774]],8121:[[913,772]],8122:[[913,768]],8123:[[902]],8124:[[913,837]],8125:[[32,787],256],8126:[[953]],8127:[[32,787],256,{768:8141,769:8142,834:8143}],8128:[[32,834],256],8129:[[168,834]],8130:[[8052,837]],8131:[[951,837]],8132:[[942,837]],8134:[[951,834],,{837:8135}],8135:[[8134,837]],8136:[[917,768]],8137:[[904]],8138:[[919,768]],8139:[[905]],8140:[[919,837]],8141:[[8127,768]],8142:[[8127,769]],8143:[[8127,834]],8144:[[953,774]],8145:[[953,772]],8146:[[970,768]],8147:[[912]],8150:[[953,834]],8151:[[970,834]],8152:[[921,774]],8153:[[921,772]],8154:[[921,768]],8155:[[906]],8157:[[8190,768]],8158:[[8190,769]],8159:[[8190,834]],8160:[[965,774]],8161:[[965,772]],8162:[[971,768]],8163:[[944]],8164:[[961,787]],8165:[[961,788]],8166:[[965,834]],8167:[[971,834]],8168:[[933,774]],8169:[[933,772]],8170:[[933,768]],8171:[[910]],8172:[[929,788]],8173:[[168,768]],8174:[[901]],8175:[[96]],8178:[[8060,837]],8179:[[969,837]],8180:[[974,837]],8182:[[969,834],,{837:8183}],8183:[[8182,837]],8184:[[927,768]],8185:[[908]],8186:[[937,768]],8187:[[911]],8188:[[937,837]],8189:[[180]],8190:[[32,788],256,{768:8157,769:8158,834:8159}]},
69338192:{8192:[[8194]],8193:[[8195]],8194:[[32],256],8195:[[32],256],8196:[[32],256],8197:[[32],256],8198:[[32],256],8199:[[32],256],8200:[[32],256],8201:[[32],256],8202:[[32],256],8209:[[8208],256],8215:[[32,819],256],8228:[[46],256],8229:[[46,46],256],8230:[[46,46,46],256],8239:[[32],256],8243:[[8242,8242],256],8244:[[8242,8242,8242],256],8246:[[8245,8245],256],8247:[[8245,8245,8245],256],8252:[[33,33],256],8254:[[32,773],256],8263:[[63,63],256],8264:[[63,33],256],8265:[[33,63],256],8279:[[8242,8242,8242,8242],256],8287:[[32],256],8304:[[48],256],8305:[[105],256],8308:[[52],256],8309:[[53],256],8310:[[54],256],8311:[[55],256],8312:[[56],256],8313:[[57],256],8314:[[43],256],8315:[[8722],256],8316:[[61],256],8317:[[40],256],8318:[[41],256],8319:[[110],256],8320:[[48],256],8321:[[49],256],8322:[[50],256],8323:[[51],256],8324:[[52],256],8325:[[53],256],8326:[[54],256],8327:[[55],256],8328:[[56],256],8329:[[57],256],8330:[[43],256],8331:[[8722],256],8332:[[61],256],8333:[[40],256],8334:[[41],256],8336:[[97],256],8337:[[101],256],8338:[[111],256],8339:[[120],256],8340:[[601],256],8341:[[104],256],8342:[[107],256],8343:[[108],256],8344:[[109],256],8345:[[110],256],8346:[[112],256],8347:[[115],256],8348:[[116],256],8360:[[82,115],256],8400:[,230],8401:[,230],8402:[,1],8403:[,1],8404:[,230],8405:[,230],8406:[,230],8407:[,230],8408:[,1],8409:[,1],8410:[,1],8411:[,230],8412:[,230],8417:[,230],8421:[,1],8422:[,1],8423:[,230],8424:[,220],8425:[,230],8426:[,1],8427:[,1],8428:[,220],8429:[,220],8430:[,220],8431:[,220],8432:[,230]},
69348448:{8448:[[97,47,99],256],8449:[[97,47,115],256],8450:[[67],256],8451:[[176,67],256],8453:[[99,47,111],256],8454:[[99,47,117],256],8455:[[400],256],8457:[[176,70],256],8458:[[103],256],8459:[[72],256],8460:[[72],256],8461:[[72],256],8462:[[104],256],8463:[[295],256],8464:[[73],256],8465:[[73],256],8466:[[76],256],8467:[[108],256],8469:[[78],256],8470:[[78,111],256],8473:[[80],256],8474:[[81],256],8475:[[82],256],8476:[[82],256],8477:[[82],256],8480:[[83,77],256],8481:[[84,69,76],256],8482:[[84,77],256],8484:[[90],256],8486:[[937]],8488:[[90],256],8490:[[75]],8491:[[197]],8492:[[66],256],8493:[[67],256],8495:[[101],256],8496:[[69],256],8497:[[70],256],8499:[[77],256],8500:[[111],256],8501:[[1488],256],8502:[[1489],256],8503:[[1490],256],8504:[[1491],256],8505:[[105],256],8507:[[70,65,88],256],8508:[[960],256],8509:[[947],256],8510:[[915],256],8511:[[928],256],8512:[[8721],256],8517:[[68],256],8518:[[100],256],8519:[[101],256],8520:[[105],256],8521:[[106],256],8528:[[49,8260,55],256],8529:[[49,8260,57],256],8530:[[49,8260,49,48],256],8531:[[49,8260,51],256],8532:[[50,8260,51],256],8533:[[49,8260,53],256],8534:[[50,8260,53],256],8535:[[51,8260,53],256],8536:[[52,8260,53],256],8537:[[49,8260,54],256],8538:[[53,8260,54],256],8539:[[49,8260,56],256],8540:[[51,8260,56],256],8541:[[53,8260,56],256],8542:[[55,8260,56],256],8543:[[49,8260],256],8544:[[73],256],8545:[[73,73],256],8546:[[73,73,73],256],8547:[[73,86],256],8548:[[86],256],8549:[[86,73],256],8550:[[86,73,73],256],8551:[[86,73,73,73],256],8552:[[73,88],256],8553:[[88],256],8554:[[88,73],256],8555:[[88,73,73],256],8556:[[76],256],8557:[[67],256],8558:[[68],256],8559:[[77],256],8560:[[105],256],8561:[[105,105],256],8562:[[105,105,105],256],8563:[[105,118],256],8564:[[118],256],8565:[[118,105],256],8566:[[118,105,105],256],8567:[[118,105,105,105],256],8568:[[105,120],256],8569:[[120],256],8570:[[120,105],256],8571:[[120,105,105],256],8572:[[108],256],8573:[[99],256],8574:[[100],256],8575:[[109],256],8585:[[48,8260,51],256],8592:[,,{824:8602}],8594:[,,{824:8603}],8596:[,,{824:8622}],8602:[[8592,824]],8603:[[8594,824]],8622:[[8596,824]],8653:[[8656,824]],8654:[[8660,824]],8655:[[8658,824]],8656:[,,{824:8653}],8658:[,,{824:8655}],8660:[,,{824:8654}]},
69358704:{8707:[,,{824:8708}],8708:[[8707,824]],8712:[,,{824:8713}],8713:[[8712,824]],8715:[,,{824:8716}],8716:[[8715,824]],8739:[,,{824:8740}],8740:[[8739,824]],8741:[,,{824:8742}],8742:[[8741,824]],8748:[[8747,8747],256],8749:[[8747,8747,8747],256],8751:[[8750,8750],256],8752:[[8750,8750,8750],256],8764:[,,{824:8769}],8769:[[8764,824]],8771:[,,{824:8772}],8772:[[8771,824]],8773:[,,{824:8775}],8775:[[8773,824]],8776:[,,{824:8777}],8777:[[8776,824]],8781:[,,{824:8813}],8800:[[61,824]],8801:[,,{824:8802}],8802:[[8801,824]],8804:[,,{824:8816}],8805:[,,{824:8817}],8813:[[8781,824]],8814:[[60,824]],8815:[[62,824]],8816:[[8804,824]],8817:[[8805,824]],8818:[,,{824:8820}],8819:[,,{824:8821}],8820:[[8818,824]],8821:[[8819,824]],8822:[,,{824:8824}],8823:[,,{824:8825}],8824:[[8822,824]],8825:[[8823,824]],8826:[,,{824:8832}],8827:[,,{824:8833}],8828:[,,{824:8928}],8829:[,,{824:8929}],8832:[[8826,824]],8833:[[8827,824]],8834:[,,{824:8836}],8835:[,,{824:8837}],8836:[[8834,824]],8837:[[8835,824]],8838:[,,{824:8840}],8839:[,,{824:8841}],8840:[[8838,824]],8841:[[8839,824]],8849:[,,{824:8930}],8850:[,,{824:8931}],8866:[,,{824:8876}],8872:[,,{824:8877}],8873:[,,{824:8878}],8875:[,,{824:8879}],8876:[[8866,824]],8877:[[8872,824]],8878:[[8873,824]],8879:[[8875,824]],8882:[,,{824:8938}],8883:[,,{824:8939}],8884:[,,{824:8940}],8885:[,,{824:8941}],8928:[[8828,824]],8929:[[8829,824]],8930:[[8849,824]],8931:[[8850,824]],8938:[[8882,824]],8939:[[8883,824]],8940:[[8884,824]],8941:[[8885,824]]},
69368960:{9001:[[12296]],9002:[[12297]]},
69379216:{9312:[[49],256],9313:[[50],256],9314:[[51],256],9315:[[52],256],9316:[[53],256],9317:[[54],256],9318:[[55],256],9319:[[56],256],9320:[[57],256],9321:[[49,48],256],9322:[[49,49],256],9323:[[49,50],256],9324:[[49,51],256],9325:[[49,52],256],9326:[[49,53],256],9327:[[49,54],256],9328:[[49,55],256],9329:[[49,56],256],9330:[[49,57],256],9331:[[50,48],256],9332:[[40,49,41],256],9333:[[40,50,41],256],9334:[[40,51,41],256],9335:[[40,52,41],256],9336:[[40,53,41],256],9337:[[40,54,41],256],9338:[[40,55,41],256],9339:[[40,56,41],256],9340:[[40,57,41],256],9341:[[40,49,48,41],256],9342:[[40,49,49,41],256],9343:[[40,49,50,41],256],9344:[[40,49,51,41],256],9345:[[40,49,52,41],256],9346:[[40,49,53,41],256],9347:[[40,49,54,41],256],9348:[[40,49,55,41],256],9349:[[40,49,56,41],256],9350:[[40,49,57,41],256],9351:[[40,50,48,41],256],9352:[[49,46],256],9353:[[50,46],256],9354:[[51,46],256],9355:[[52,46],256],9356:[[53,46],256],9357:[[54,46],256],9358:[[55,46],256],9359:[[56,46],256],9360:[[57,46],256],9361:[[49,48,46],256],9362:[[49,49,46],256],9363:[[49,50,46],256],9364:[[49,51,46],256],9365:[[49,52,46],256],9366:[[49,53,46],256],9367:[[49,54,46],256],9368:[[49,55,46],256],9369:[[49,56,46],256],9370:[[49,57,46],256],9371:[[50,48,46],256],9372:[[40,97,41],256],9373:[[40,98,41],256],9374:[[40,99,41],256],9375:[[40,100,41],256],9376:[[40,101,41],256],9377:[[40,102,41],256],9378:[[40,103,41],256],9379:[[40,104,41],256],9380:[[40,105,41],256],9381:[[40,106,41],256],9382:[[40,107,41],256],9383:[[40,108,41],256],9384:[[40,109,41],256],9385:[[40,110,41],256],9386:[[40,111,41],256],9387:[[40,112,41],256],9388:[[40,113,41],256],9389:[[40,114,41],256],9390:[[40,115,41],256],9391:[[40,116,41],256],9392:[[40,117,41],256],9393:[[40,118,41],256],9394:[[40,119,41],256],9395:[[40,120,41],256],9396:[[40,121,41],256],9397:[[40,122,41],256],9398:[[65],256],9399:[[66],256],9400:[[67],256],9401:[[68],256],9402:[[69],256],9403:[[70],256],9404:[[71],256],9405:[[72],256],9406:[[73],256],9407:[[74],256],9408:[[75],256],9409:[[76],256],9410:[[77],256],9411:[[78],256],9412:[[79],256],9413:[[80],256],9414:[[81],256],9415:[[82],256],9416:[[83],256],9417:[[84],256],9418:[[85],256],9419:[[86],256],9420:[[87],256],9421:[[88],256],9422:[[89],256],9423:[[90],256],9424:[[97],256],9425:[[98],256],9426:[[99],256],9427:[[100],256],9428:[[101],256],9429:[[102],256],9430:[[103],256],9431:[[104],256],9432:[[105],256],9433:[[106],256],9434:[[107],256],9435:[[108],256],9436:[[109],256],9437:[[110],256],9438:[[111],256],9439:[[112],256],9440:[[113],256],9441:[[114],256],9442:[[115],256],9443:[[116],256],9444:[[117],256],9445:[[118],256],9446:[[119],256],9447:[[120],256],9448:[[121],256],9449:[[122],256],9450:[[48],256]},
693810752:{10764:[[8747,8747,8747,8747],256],10868:[[58,58,61],256],10869:[[61,61],256],10870:[[61,61,61],256],10972:[[10973,824],512]},
693911264:{11388:[[106],256],11389:[[86],256],11503:[,230],11504:[,230],11505:[,230]},
694011520:{11631:[[11617],256],11647:[,9],11744:[,230],11745:[,230],11746:[,230],11747:[,230],11748:[,230],11749:[,230],11750:[,230],11751:[,230],11752:[,230],11753:[,230],11754:[,230],11755:[,230],11756:[,230],11757:[,230],11758:[,230],11759:[,230],11760:[,230],11761:[,230],11762:[,230],11763:[,230],11764:[,230],11765:[,230],11766:[,230],11767:[,230],11768:[,230],11769:[,230],11770:[,230],11771:[,230],11772:[,230],11773:[,230],11774:[,230],11775:[,230]},
694111776:{11935:[[27597],256],12019:[[40863],256]},
694212032:{12032:[[19968],256],12033:[[20008],256],12034:[[20022],256],12035:[[20031],256],12036:[[20057],256],12037:[[20101],256],12038:[[20108],256],12039:[[20128],256],12040:[[20154],256],12041:[[20799],256],12042:[[20837],256],12043:[[20843],256],12044:[[20866],256],12045:[[20886],256],12046:[[20907],256],12047:[[20960],256],12048:[[20981],256],12049:[[20992],256],12050:[[21147],256],12051:[[21241],256],12052:[[21269],256],12053:[[21274],256],12054:[[21304],256],12055:[[21313],256],12056:[[21340],256],12057:[[21353],256],12058:[[21378],256],12059:[[21430],256],12060:[[21448],256],12061:[[21475],256],12062:[[22231],256],12063:[[22303],256],12064:[[22763],256],12065:[[22786],256],12066:[[22794],256],12067:[[22805],256],12068:[[22823],256],12069:[[22899],256],12070:[[23376],256],12071:[[23424],256],12072:[[23544],256],12073:[[23567],256],12074:[[23586],256],12075:[[23608],256],12076:[[23662],256],12077:[[23665],256],12078:[[24027],256],12079:[[24037],256],12080:[[24049],256],12081:[[24062],256],12082:[[24178],256],12083:[[24186],256],12084:[[24191],256],12085:[[24308],256],12086:[[24318],256],12087:[[24331],256],12088:[[24339],256],12089:[[24400],256],12090:[[24417],256],12091:[[24435],256],12092:[[24515],256],12093:[[25096],256],12094:[[25142],256],12095:[[25163],256],12096:[[25903],256],12097:[[25908],256],12098:[[25991],256],12099:[[26007],256],12100:[[26020],256],12101:[[26041],256],12102:[[26080],256],12103:[[26085],256],12104:[[26352],256],12105:[[26376],256],12106:[[26408],256],12107:[[27424],256],12108:[[27490],256],12109:[[27513],256],12110:[[27571],256],12111:[[27595],256],12112:[[27604],256],12113:[[27611],256],12114:[[27663],256],12115:[[27668],256],12116:[[27700],256],12117:[[28779],256],12118:[[29226],256],12119:[[29238],256],12120:[[29243],256],12121:[[29247],256],12122:[[29255],256],12123:[[29273],256],12124:[[29275],256],12125:[[29356],256],12126:[[29572],256],12127:[[29577],256],12128:[[29916],256],12129:[[29926],256],12130:[[29976],256],12131:[[29983],256],12132:[[29992],256],12133:[[30000],256],12134:[[30091],256],12135:[[30098],256],12136:[[30326],256],12137:[[30333],256],12138:[[30382],256],12139:[[30399],256],12140:[[30446],256],12141:[[30683],256],12142:[[30690],256],12143:[[30707],256],12144:[[31034],256],12145:[[31160],256],12146:[[31166],256],12147:[[31348],256],12148:[[31435],256],12149:[[31481],256],12150:[[31859],256],12151:[[31992],256],12152:[[32566],256],12153:[[32593],256],12154:[[32650],256],12155:[[32701],256],12156:[[32769],256],12157:[[32780],256],12158:[[32786],256],12159:[[32819],256],12160:[[32895],256],12161:[[32905],256],12162:[[33251],256],12163:[[33258],256],12164:[[33267],256],12165:[[33276],256],12166:[[33292],256],12167:[[33307],256],12168:[[33311],256],12169:[[33390],256],12170:[[33394],256],12171:[[33400],256],12172:[[34381],256],12173:[[34411],256],12174:[[34880],256],12175:[[34892],256],12176:[[34915],256],12177:[[35198],256],12178:[[35211],256],12179:[[35282],256],12180:[[35328],256],12181:[[35895],256],12182:[[35910],256],12183:[[35925],256],12184:[[35960],256],12185:[[35997],256],12186:[[36196],256],12187:[[36208],256],12188:[[36275],256],12189:[[36523],256],12190:[[36554],256],12191:[[36763],256],12192:[[36784],256],12193:[[36789],256],12194:[[37009],256],12195:[[37193],256],12196:[[37318],256],12197:[[37324],256],12198:[[37329],256],12199:[[38263],256],12200:[[38272],256],12201:[[38428],256],12202:[[38582],256],12203:[[38585],256],12204:[[38632],256],12205:[[38737],256],12206:[[38750],256],12207:[[38754],256],12208:[[38761],256],12209:[[38859],256],12210:[[38893],256],12211:[[38899],256],12212:[[38913],256],12213:[[39080],256],12214:[[39131],256],12215:[[39135],256],12216:[[39318],256],12217:[[39321],256],12218:[[39340],256],12219:[[39592],256],12220:[[39640],256],12221:[[39647],256],12222:[[39717],256],12223:[[39727],256],12224:[[39730],256],12225:[[39740],256],12226:[[39770],256],12227:[[40165],256],12228:[[40565],256],12229:[[40575],256],12230:[[40613],256],12231:[[40635],256],12232:[[40643],256],12233:[[40653],256],12234:[[40657],256],12235:[[40697],256],12236:[[40701],256],12237:[[40718],256],12238:[[40723],256],12239:[[40736],256],12240:[[40763],256],12241:[[40778],256],12242:[[40786],256],12243:[[40845],256],12244:[[40860],256],12245:[[40864],256]},
694312288:{12288:[[32],256],12330:[,218],12331:[,228],12332:[,232],12333:[,222],12334:[,224],12335:[,224],12342:[[12306],256],12344:[[21313],256],12345:[[21316],256],12346:[[21317],256],12358:[,,{12441:12436}],12363:[,,{12441:12364}],12364:[[12363,12441]],12365:[,,{12441:12366}],12366:[[12365,12441]],12367:[,,{12441:12368}],12368:[[12367,12441]],12369:[,,{12441:12370}],12370:[[12369,12441]],12371:[,,{12441:12372}],12372:[[12371,12441]],12373:[,,{12441:12374}],12374:[[12373,12441]],12375:[,,{12441:12376}],12376:[[12375,12441]],12377:[,,{12441:12378}],12378:[[12377,12441]],12379:[,,{12441:12380}],12380:[[12379,12441]],12381:[,,{12441:12382}],12382:[[12381,12441]],12383:[,,{12441:12384}],12384:[[12383,12441]],12385:[,,{12441:12386}],12386:[[12385,12441]],12388:[,,{12441:12389}],12389:[[12388,12441]],12390:[,,{12441:12391}],12391:[[12390,12441]],12392:[,,{12441:12393}],12393:[[12392,12441]],12399:[,,{12441:12400,12442:12401}],12400:[[12399,12441]],12401:[[12399,12442]],12402:[,,{12441:12403,12442:12404}],12403:[[12402,12441]],12404:[[12402,12442]],12405:[,,{12441:12406,12442:12407}],12406:[[12405,12441]],12407:[[12405,12442]],12408:[,,{12441:12409,12442:12410}],12409:[[12408,12441]],12410:[[12408,12442]],12411:[,,{12441:12412,12442:12413}],12412:[[12411,12441]],12413:[[12411,12442]],12436:[[12358,12441]],12441:[,8],12442:[,8],12443:[[32,12441],256],12444:[[32,12442],256],12445:[,,{12441:12446}],12446:[[12445,12441]],12447:[[12424,12426],256],12454:[,,{12441:12532}],12459:[,,{12441:12460}],12460:[[12459,12441]],12461:[,,{12441:12462}],12462:[[12461,12441]],12463:[,,{12441:12464}],12464:[[12463,12441]],12465:[,,{12441:12466}],12466:[[12465,12441]],12467:[,,{12441:12468}],12468:[[12467,12441]],12469:[,,{12441:12470}],12470:[[12469,12441]],12471:[,,{12441:12472}],12472:[[12471,12441]],12473:[,,{12441:12474}],12474:[[12473,12441]],12475:[,,{12441:12476}],12476:[[12475,12441]],12477:[,,{12441:12478}],12478:[[12477,12441]],12479:[,,{12441:12480}],12480:[[12479,12441]],12481:[,,{12441:12482}],12482:[[12481,12441]],12484:[,,{12441:12485}],12485:[[12484,12441]],12486:[,,{12441:12487}],12487:[[12486,12441]],12488:[,,{12441:12489}],12489:[[12488,12441]],12495:[,,{12441:12496,12442:12497}],12496:[[12495,12441]],12497:[[12495,12442]],12498:[,,{12441:12499,12442:12500}],12499:[[12498,12441]],12500:[[12498,12442]],12501:[,,{12441:12502,12442:12503}],12502:[[12501,12441]],12503:[[12501,12442]],12504:[,,{12441:12505,12442:12506}],12505:[[12504,12441]],12506:[[12504,12442]],12507:[,,{12441:12508,12442:12509}],12508:[[12507,12441]],12509:[[12507,12442]],12527:[,,{12441:12535}],12528:[,,{12441:12536}],12529:[,,{12441:12537}],12530:[,,{12441:12538}],12532:[[12454,12441]],12535:[[12527,12441]],12536:[[12528,12441]],12537:[[12529,12441]],12538:[[12530,12441]],12541:[,,{12441:12542}],12542:[[12541,12441]],12543:[[12467,12488],256]},
694412544:{12593:[[4352],256],12594:[[4353],256],12595:[[4522],256],12596:[[4354],256],12597:[[4524],256],12598:[[4525],256],12599:[[4355],256],12600:[[4356],256],12601:[[4357],256],12602:[[4528],256],12603:[[4529],256],12604:[[4530],256],12605:[[4531],256],12606:[[4532],256],12607:[[4533],256],12608:[[4378],256],12609:[[4358],256],12610:[[4359],256],12611:[[4360],256],12612:[[4385],256],12613:[[4361],256],12614:[[4362],256],12615:[[4363],256],12616:[[4364],256],12617:[[4365],256],12618:[[4366],256],12619:[[4367],256],12620:[[4368],256],12621:[[4369],256],12622:[[4370],256],12623:[[4449],256],12624:[[4450],256],12625:[[4451],256],12626:[[4452],256],12627:[[4453],256],12628:[[4454],256],12629:[[4455],256],12630:[[4456],256],12631:[[4457],256],12632:[[4458],256],12633:[[4459],256],12634:[[4460],256],12635:[[4461],256],12636:[[4462],256],12637:[[4463],256],12638:[[4464],256],12639:[[4465],256],12640:[[4466],256],12641:[[4467],256],12642:[[4468],256],12643:[[4469],256],12644:[[4448],256],12645:[[4372],256],12646:[[4373],256],12647:[[4551],256],12648:[[4552],256],12649:[[4556],256],12650:[[4558],256],12651:[[4563],256],12652:[[4567],256],12653:[[4569],256],12654:[[4380],256],12655:[[4573],256],12656:[[4575],256],12657:[[4381],256],12658:[[4382],256],12659:[[4384],256],12660:[[4386],256],12661:[[4387],256],12662:[[4391],256],12663:[[4393],256],12664:[[4395],256],12665:[[4396],256],12666:[[4397],256],12667:[[4398],256],12668:[[4399],256],12669:[[4402],256],12670:[[4406],256],12671:[[4416],256],12672:[[4423],256],12673:[[4428],256],12674:[[4593],256],12675:[[4594],256],12676:[[4439],256],12677:[[4440],256],12678:[[4441],256],12679:[[4484],256],12680:[[4485],256],12681:[[4488],256],12682:[[4497],256],12683:[[4498],256],12684:[[4500],256],12685:[[4510],256],12686:[[4513],256],12690:[[19968],256],12691:[[20108],256],12692:[[19977],256],12693:[[22235],256],12694:[[19978],256],12695:[[20013],256],12696:[[19979],256],12697:[[30002],256],12698:[[20057],256],12699:[[19993],256],12700:[[19969],256],12701:[[22825],256],12702:[[22320],256],12703:[[20154],256]},
694512800:{12800:[[40,4352,41],256],12801:[[40,4354,41],256],12802:[[40,4355,41],256],12803:[[40,4357,41],256],12804:[[40,4358,41],256],12805:[[40,4359,41],256],12806:[[40,4361,41],256],12807:[[40,4363,41],256],12808:[[40,4364,41],256],12809:[[40,4366,41],256],12810:[[40,4367,41],256],12811:[[40,4368,41],256],12812:[[40,4369,41],256],12813:[[40,4370,41],256],12814:[[40,4352,4449,41],256],12815:[[40,4354,4449,41],256],12816:[[40,4355,4449,41],256],12817:[[40,4357,4449,41],256],12818:[[40,4358,4449,41],256],12819:[[40,4359,4449,41],256],12820:[[40,4361,4449,41],256],12821:[[40,4363,4449,41],256],12822:[[40,4364,4449,41],256],12823:[[40,4366,4449,41],256],12824:[[40,4367,4449,41],256],12825:[[40,4368,4449,41],256],12826:[[40,4369,4449,41],256],12827:[[40,4370,4449,41],256],12828:[[40,4364,4462,41],256],12829:[[40,4363,4457,4364,4453,4523,41],256],12830:[[40,4363,4457,4370,4462,41],256],12832:[[40,19968,41],256],12833:[[40,20108,41],256],12834:[[40,19977,41],256],12835:[[40,22235,41],256],12836:[[40,20116,41],256],12837:[[40,20845,41],256],12838:[[40,19971,41],256],12839:[[40,20843,41],256],12840:[[40,20061,41],256],12841:[[40,21313,41],256],12842:[[40,26376,41],256],12843:[[40,28779,41],256],12844:[[40,27700,41],256],12845:[[40,26408,41],256],12846:[[40,37329,41],256],12847:[[40,22303,41],256],12848:[[40,26085,41],256],12849:[[40,26666,41],256],12850:[[40,26377,41],256],12851:[[40,31038,41],256],12852:[[40,21517,41],256],12853:[[40,29305,41],256],12854:[[40,36001,41],256],12855:[[40,31069,41],256],12856:[[40,21172,41],256],12857:[[40,20195,41],256],12858:[[40,21628,41],256],12859:[[40,23398,41],256],12860:[[40,30435,41],256],12861:[[40,20225,41],256],12862:[[40,36039,41],256],12863:[[40,21332,41],256],12864:[[40,31085,41],256],12865:[[40,20241,41],256],12866:[[40,33258,41],256],12867:[[40,33267,41],256],12868:[[21839],256],12869:[[24188],256],12870:[[25991],256],12871:[[31631],256],12880:[[80,84,69],256],12881:[[50,49],256],12882:[[50,50],256],12883:[[50,51],256],12884:[[50,52],256],12885:[[50,53],256],12886:[[50,54],256],12887:[[50,55],256],12888:[[50,56],256],12889:[[50,57],256],12890:[[51,48],256],12891:[[51,49],256],12892:[[51,50],256],12893:[[51,51],256],12894:[[51,52],256],12895:[[51,53],256],12896:[[4352],256],12897:[[4354],256],12898:[[4355],256],12899:[[4357],256],12900:[[4358],256],12901:[[4359],256],12902:[[4361],256],12903:[[4363],256],12904:[[4364],256],12905:[[4366],256],12906:[[4367],256],12907:[[4368],256],12908:[[4369],256],12909:[[4370],256],12910:[[4352,4449],256],12911:[[4354,4449],256],12912:[[4355,4449],256],12913:[[4357,4449],256],12914:[[4358,4449],256],12915:[[4359,4449],256],12916:[[4361,4449],256],12917:[[4363,4449],256],12918:[[4364,4449],256],12919:[[4366,4449],256],12920:[[4367,4449],256],12921:[[4368,4449],256],12922:[[4369,4449],256],12923:[[4370,4449],256],12924:[[4366,4449,4535,4352,4457],256],12925:[[4364,4462,4363,4468],256],12926:[[4363,4462],256],12928:[[19968],256],12929:[[20108],256],12930:[[19977],256],12931:[[22235],256],12932:[[20116],256],12933:[[20845],256],12934:[[19971],256],12935:[[20843],256],12936:[[20061],256],12937:[[21313],256],12938:[[26376],256],12939:[[28779],256],12940:[[27700],256],12941:[[26408],256],12942:[[37329],256],12943:[[22303],256],12944:[[26085],256],12945:[[26666],256],12946:[[26377],256],12947:[[31038],256],12948:[[21517],256],12949:[[29305],256],12950:[[36001],256],12951:[[31069],256],12952:[[21172],256],12953:[[31192],256],12954:[[30007],256],12955:[[22899],256],12956:[[36969],256],12957:[[20778],256],12958:[[21360],256],12959:[[27880],256],12960:[[38917],256],12961:[[20241],256],12962:[[20889],256],12963:[[27491],256],12964:[[19978],256],12965:[[20013],256],12966:[[19979],256],12967:[[24038],256],12968:[[21491],256],12969:[[21307],256],12970:[[23447],256],12971:[[23398],256],12972:[[30435],256],12973:[[20225],256],12974:[[36039],256],12975:[[21332],256],12976:[[22812],256],12977:[[51,54],256],12978:[[51,55],256],12979:[[51,56],256],12980:[[51,57],256],12981:[[52,48],256],12982:[[52,49],256],12983:[[52,50],256],12984:[[52,51],256],12985:[[52,52],256],12986:[[52,53],256],12987:[[52,54],256],12988:[[52,55],256],12989:[[52,56],256],12990:[[52,57],256],12991:[[53,48],256],12992:[[49,26376],256],12993:[[50,26376],256],12994:[[51,26376],256],12995:[[52,26376],256],12996:[[53,26376],256],12997:[[54,26376],256],12998:[[55,26376],256],12999:[[56,26376],256],13000:[[57,26376],256],13001:[[49,48,26376],256],13002:[[49,49,26376],256],13003:[[49,50,26376],256],13004:[[72,103],256],13005:[[101,114,103],256],13006:[[101,86],256],13007:[[76,84,68],256],13008:[[12450],256],13009:[[12452],256],13010:[[12454],256],13011:[[12456],256],13012:[[12458],256],13013:[[12459],256],13014:[[12461],256],13015:[[12463],256],13016:[[12465],256],13017:[[12467],256],13018:[[12469],256],13019:[[12471],256],13020:[[12473],256],13021:[[12475],256],13022:[[12477],256],13023:[[12479],256],13024:[[12481],256],13025:[[12484],256],13026:[[12486],256],13027:[[12488],256],13028:[[12490],256],13029:[[12491],256],13030:[[12492],256],13031:[[12493],256],13032:[[12494],256],13033:[[12495],256],13034:[[12498],256],13035:[[12501],256],13036:[[12504],256],13037:[[12507],256],13038:[[12510],256],13039:[[12511],256],13040:[[12512],256],13041:[[12513],256],13042:[[12514],256],13043:[[12516],256],13044:[[12518],256],13045:[[12520],256],13046:[[12521],256],13047:[[12522],256],13048:[[12523],256],13049:[[12524],256],13050:[[12525],256],13051:[[12527],256],13052:[[12528],256],13053:[[12529],256],13054:[[12530],256]},
694613056:{13056:[[12450,12497,12540,12488],256],13057:[[12450,12523,12501,12449],256],13058:[[12450,12531,12506,12450],256],13059:[[12450,12540,12523],256],13060:[[12452,12491,12531,12464],256],13061:[[12452,12531,12481],256],13062:[[12454,12457,12531],256],13063:[[12456,12473,12463,12540,12489],256],13064:[[12456,12540,12459,12540],256],13065:[[12458,12531,12473],256],13066:[[12458,12540,12512],256],13067:[[12459,12452,12522],256],13068:[[12459,12521,12483,12488],256],13069:[[12459,12525,12522,12540],256],13070:[[12460,12525,12531],256],13071:[[12460,12531,12510],256],13072:[[12462,12460],256],13073:[[12462,12491,12540],256],13074:[[12461,12517,12522,12540],256],13075:[[12462,12523,12480,12540],256],13076:[[12461,12525],256],13077:[[12461,12525,12464,12521,12512],256],13078:[[12461,12525,12513,12540,12488,12523],256],13079:[[12461,12525,12527,12483,12488],256],13080:[[12464,12521,12512],256],13081:[[12464,12521,12512,12488,12531],256],13082:[[12463,12523,12476,12452,12525],256],13083:[[12463,12525,12540,12493],256],13084:[[12465,12540,12473],256],13085:[[12467,12523,12490],256],13086:[[12467,12540,12509],256],13087:[[12469,12452,12463,12523],256],13088:[[12469,12531,12481,12540,12512],256],13089:[[12471,12522,12531,12464],256],13090:[[12475,12531,12481],256],13091:[[12475,12531,12488],256],13092:[[12480,12540,12473],256],13093:[[12487,12471],256],13094:[[12489,12523],256],13095:[[12488,12531],256],13096:[[12490,12494],256],13097:[[12494,12483,12488],256],13098:[[12495,12452,12484],256],13099:[[12497,12540,12475,12531,12488],256],13100:[[12497,12540,12484],256],13101:[[12496,12540,12524,12523],256],13102:[[12500,12450,12473,12488,12523],256],13103:[[12500,12463,12523],256],13104:[[12500,12467],256],13105:[[12499,12523],256],13106:[[12501,12449,12521,12483,12489],256],13107:[[12501,12451,12540,12488],256],13108:[[12502,12483,12471,12455,12523],256],13109:[[12501,12521,12531],256],13110:[[12504,12463,12479,12540,12523],256],13111:[[12506,12477],256],13112:[[12506,12491,12498],256],13113:[[12504,12523,12484],256],13114:[[12506,12531,12473],256],13115:[[12506,12540,12472],256],13116:[[12505,12540,12479],256],13117:[[12509,12452,12531,12488],256],13118:[[12508,12523,12488],256],13119:[[12507,12531],256],13120:[[12509,12531,12489],256],13121:[[12507,12540,12523],256],13122:[[12507,12540,12531],256],13123:[[12510,12452,12463,12525],256],13124:[[12510,12452,12523],256],13125:[[12510,12483,12495],256],13126:[[12510,12523,12463],256],13127:[[12510,12531,12471,12519,12531],256],13128:[[12511,12463,12525,12531],256],13129:[[12511,12522],256],13130:[[12511,12522,12496,12540,12523],256],13131:[[12513,12460],256],13132:[[12513,12460,12488,12531],256],13133:[[12513,12540,12488,12523],256],13134:[[12516,12540,12489],256],13135:[[12516,12540,12523],256],13136:[[12518,12450,12531],256],13137:[[12522,12483,12488,12523],256],13138:[[12522,12521],256],13139:[[12523,12500,12540],256],13140:[[12523,12540,12502,12523],256],13141:[[12524,12512],256],13142:[[12524,12531,12488,12466,12531],256],13143:[[12527,12483,12488],256],13144:[[48,28857],256],13145:[[49,28857],256],13146:[[50,28857],256],13147:[[51,28857],256],13148:[[52,28857],256],13149:[[53,28857],256],13150:[[54,28857],256],13151:[[55,28857],256],13152:[[56,28857],256],13153:[[57,28857],256],13154:[[49,48,28857],256],13155:[[49,49,28857],256],13156:[[49,50,28857],256],13157:[[49,51,28857],256],13158:[[49,52,28857],256],13159:[[49,53,28857],256],13160:[[49,54,28857],256],13161:[[49,55,28857],256],13162:[[49,56,28857],256],13163:[[49,57,28857],256],13164:[[50,48,28857],256],13165:[[50,49,28857],256],13166:[[50,50,28857],256],13167:[[50,51,28857],256],13168:[[50,52,28857],256],13169:[[104,80,97],256],13170:[[100,97],256],13171:[[65,85],256],13172:[[98,97,114],256],13173:[[111,86],256],13174:[[112,99],256],13175:[[100,109],256],13176:[[100,109,178],256],13177:[[100,109,179],256],13178:[[73,85],256],13179:[[24179,25104],256],13180:[[26157,21644],256],13181:[[22823,27491],256],13182:[[26126,27835],256],13183:[[26666,24335,20250,31038],256],13184:[[112,65],256],13185:[[110,65],256],13186:[[956,65],256],13187:[[109,65],256],13188:[[107,65],256],13189:[[75,66],256],13190:[[77,66],256],13191:[[71,66],256],13192:[[99,97,108],256],13193:[[107,99,97,108],256],13194:[[112,70],256],13195:[[110,70],256],13196:[[956,70],256],13197:[[956,103],256],13198:[[109,103],256],13199:[[107,103],256],13200:[[72,122],256],13201:[[107,72,122],256],13202:[[77,72,122],256],13203:[[71,72,122],256],13204:[[84,72,122],256],13205:[[956,8467],256],13206:[[109,8467],256],13207:[[100,8467],256],13208:[[107,8467],256],13209:[[102,109],256],13210:[[110,109],256],13211:[[956,109],256],13212:[[109,109],256],13213:[[99,109],256],13214:[[107,109],256],13215:[[109,109,178],256],13216:[[99,109,178],256],13217:[[109,178],256],13218:[[107,109,178],256],13219:[[109,109,179],256],13220:[[99,109,179],256],13221:[[109,179],256],13222:[[107,109,179],256],13223:[[109,8725,115],256],13224:[[109,8725,115,178],256],13225:[[80,97],256],13226:[[107,80,97],256],13227:[[77,80,97],256],13228:[[71,80,97],256],13229:[[114,97,100],256],13230:[[114,97,100,8725,115],256],13231:[[114,97,100,8725,115,178],256],13232:[[112,115],256],13233:[[110,115],256],13234:[[956,115],256],13235:[[109,115],256],13236:[[112,86],256],13237:[[110,86],256],13238:[[956,86],256],13239:[[109,86],256],13240:[[107,86],256],13241:[[77,86],256],13242:[[112,87],256],13243:[[110,87],256],13244:[[956,87],256],13245:[[109,87],256],13246:[[107,87],256],13247:[[77,87],256],13248:[[107,937],256],13249:[[77,937],256],13250:[[97,46,109,46],256],13251:[[66,113],256],13252:[[99,99],256],13253:[[99,100],256],13254:[[67,8725,107,103],256],13255:[[67,111,46],256],13256:[[100,66],256],13257:[[71,121],256],13258:[[104,97],256],13259:[[72,80],256],13260:[[105,110],256],13261:[[75,75],256],13262:[[75,77],256],13263:[[107,116],256],13264:[[108,109],256],13265:[[108,110],256],13266:[[108,111,103],256],13267:[[108,120],256],13268:[[109,98],256],13269:[[109,105,108],256],13270:[[109,111,108],256],13271:[[80,72],256],13272:[[112,46,109,46],256],13273:[[80,80,77],256],13274:[[80,82],256],13275:[[115,114],256],13276:[[83,118],256],13277:[[87,98],256],13278:[[86,8725,109],256],13279:[[65,8725,109],256],13280:[[49,26085],256],13281:[[50,26085],256],13282:[[51,26085],256],13283:[[52,26085],256],13284:[[53,26085],256],13285:[[54,26085],256],13286:[[55,26085],256],13287:[[56,26085],256],13288:[[57,26085],256],13289:[[49,48,26085],256],13290:[[49,49,26085],256],13291:[[49,50,26085],256],13292:[[49,51,26085],256],13293:[[49,52,26085],256],13294:[[49,53,26085],256],13295:[[49,54,26085],256],13296:[[49,55,26085],256],13297:[[49,56,26085],256],13298:[[49,57,26085],256],13299:[[50,48,26085],256],13300:[[50,49,26085],256],13301:[[50,50,26085],256],13302:[[50,51,26085],256],13303:[[50,52,26085],256],13304:[[50,53,26085],256],13305:[[50,54,26085],256],13306:[[50,55,26085],256],13307:[[50,56,26085],256],13308:[[50,57,26085],256],13309:[[51,48,26085],256],13310:[[51,49,26085],256],13311:[[103,97,108],256]},
694727136:{92912:[,1],92913:[,1],92914:[,1],92915:[,1],92916:[,1]},
694827392:{92976:[,230],92977:[,230],92978:[,230],92979:[,230],92980:[,230],92981:[,230],92982:[,230]},
694942496:{42607:[,230],42612:[,230],42613:[,230],42614:[,230],42615:[,230],42616:[,230],42617:[,230],42618:[,230],42619:[,230],42620:[,230],42621:[,230],42652:[[1098],256],42653:[[1100],256],42655:[,230],42736:[,230],42737:[,230]},
695042752:{42864:[[42863],256],43000:[[294],256],43001:[[339],256]},
695143008:{43014:[,9],43204:[,9],43232:[,230],43233:[,230],43234:[,230],43235:[,230],43236:[,230],43237:[,230],43238:[,230],43239:[,230],43240:[,230],43241:[,230],43242:[,230],43243:[,230],43244:[,230],43245:[,230],43246:[,230],43247:[,230],43248:[,230],43249:[,230]},
695243264:{43307:[,220],43308:[,220],43309:[,220],43347:[,9],43443:[,7],43456:[,9]},
695343520:{43696:[,230],43698:[,230],43699:[,230],43700:[,220],43703:[,230],43704:[,230],43710:[,230],43711:[,230],43713:[,230],43766:[,9]},
695443776:{43868:[[42791],256],43869:[[43831],256],43870:[[619],256],43871:[[43858],256],44013:[,9]},
695548128:{113822:[,1]},
695653504:{119134:[[119127,119141],512],119135:[[119128,119141],512],119136:[[119135,119150],512],119137:[[119135,119151],512],119138:[[119135,119152],512],119139:[[119135,119153],512],119140:[[119135,119154],512],119141:[,216],119142:[,216],119143:[,1],119144:[,1],119145:[,1],119149:[,226],119150:[,216],119151:[,216],119152:[,216],119153:[,216],119154:[,216],119163:[,220],119164:[,220],119165:[,220],119166:[,220],119167:[,220],119168:[,220],119169:[,220],119170:[,220],119173:[,230],119174:[,230],119175:[,230],119176:[,230],119177:[,230],119178:[,220],119179:[,220],119210:[,230],119211:[,230],119212:[,230],119213:[,230],119227:[[119225,119141],512],119228:[[119226,119141],512],119229:[[119227,119150],512],119230:[[119228,119150],512],119231:[[119227,119151],512],119232:[[119228,119151],512]},
695753760:{119362:[,230],119363:[,230],119364:[,230]},
695854272:{119808:[[65],256],119809:[[66],256],119810:[[67],256],119811:[[68],256],119812:[[69],256],119813:[[70],256],119814:[[71],256],119815:[[72],256],119816:[[73],256],119817:[[74],256],119818:[[75],256],119819:[[76],256],119820:[[77],256],119821:[[78],256],119822:[[79],256],119823:[[80],256],119824:[[81],256],119825:[[82],256],119826:[[83],256],119827:[[84],256],119828:[[85],256],119829:[[86],256],119830:[[87],256],119831:[[88],256],119832:[[89],256],119833:[[90],256],119834:[[97],256],119835:[[98],256],119836:[[99],256],119837:[[100],256],119838:[[101],256],119839:[[102],256],119840:[[103],256],119841:[[104],256],119842:[[105],256],119843:[[106],256],119844:[[107],256],119845:[[108],256],119846:[[109],256],119847:[[110],256],119848:[[111],256],119849:[[112],256],119850:[[113],256],119851:[[114],256],119852:[[115],256],119853:[[116],256],119854:[[117],256],119855:[[118],256],119856:[[119],256],119857:[[120],256],119858:[[121],256],119859:[[122],256],119860:[[65],256],119861:[[66],256],119862:[[67],256],119863:[[68],256],119864:[[69],256],119865:[[70],256],119866:[[71],256],119867:[[72],256],119868:[[73],256],119869:[[74],256],119870:[[75],256],119871:[[76],256],119872:[[77],256],119873:[[78],256],119874:[[79],256],119875:[[80],256],119876:[[81],256],119877:[[82],256],119878:[[83],256],119879:[[84],256],119880:[[85],256],119881:[[86],256],119882:[[87],256],119883:[[88],256],119884:[[89],256],119885:[[90],256],119886:[[97],256],119887:[[98],256],119888:[[99],256],119889:[[100],256],119890:[[101],256],119891:[[102],256],119892:[[103],256],119894:[[105],256],119895:[[106],256],119896:[[107],256],119897:[[108],256],119898:[[109],256],119899:[[110],256],119900:[[111],256],119901:[[112],256],119902:[[113],256],119903:[[114],256],119904:[[115],256],119905:[[116],256],119906:[[117],256],119907:[[118],256],119908:[[119],256],119909:[[120],256],119910:[[121],256],119911:[[122],256],119912:[[65],256],119913:[[66],256],119914:[[67],256],119915:[[68],256],119916:[[69],256],119917:[[70],256],119918:[[71],256],119919:[[72],256],119920:[[73],256],119921:[[74],256],119922:[[75],256],119923:[[76],256],119924:[[77],256],119925:[[78],256],119926:[[79],256],119927:[[80],256],119928:[[81],256],119929:[[82],256],119930:[[83],256],119931:[[84],256],119932:[[85],256],119933:[[86],256],119934:[[87],256],119935:[[88],256],119936:[[89],256],119937:[[90],256],119938:[[97],256],119939:[[98],256],119940:[[99],256],119941:[[100],256],119942:[[101],256],119943:[[102],256],119944:[[103],256],119945:[[104],256],119946:[[105],256],119947:[[106],256],119948:[[107],256],119949:[[108],256],119950:[[109],256],119951:[[110],256],119952:[[111],256],119953:[[112],256],119954:[[113],256],119955:[[114],256],119956:[[115],256],119957:[[116],256],119958:[[117],256],119959:[[118],256],119960:[[119],256],119961:[[120],256],119962:[[121],256],119963:[[122],256],119964:[[65],256],119966:[[67],256],119967:[[68],256],119970:[[71],256],119973:[[74],256],119974:[[75],256],119977:[[78],256],119978:[[79],256],119979:[[80],256],119980:[[81],256],119982:[[83],256],119983:[[84],256],119984:[[85],256],119985:[[86],256],119986:[[87],256],119987:[[88],256],119988:[[89],256],119989:[[90],256],119990:[[97],256],119991:[[98],256],119992:[[99],256],119993:[[100],256],119995:[[102],256],119997:[[104],256],119998:[[105],256],119999:[[106],256],120000:[[107],256],120001:[[108],256],120002:[[109],256],120003:[[110],256],120005:[[112],256],120006:[[113],256],120007:[[114],256],120008:[[115],256],120009:[[116],256],120010:[[117],256],120011:[[118],256],120012:[[119],256],120013:[[120],256],120014:[[121],256],120015:[[122],256],120016:[[65],256],120017:[[66],256],120018:[[67],256],120019:[[68],256],120020:[[69],256],120021:[[70],256],120022:[[71],256],120023:[[72],256],120024:[[73],256],120025:[[74],256],120026:[[75],256],120027:[[76],256],120028:[[77],256],120029:[[78],256],120030:[[79],256],120031:[[80],256],120032:[[81],256],120033:[[82],256],120034:[[83],256],120035:[[84],256],120036:[[85],256],120037:[[86],256],120038:[[87],256],120039:[[88],256],120040:[[89],256],120041:[[90],256],120042:[[97],256],120043:[[98],256],120044:[[99],256],120045:[[100],256],120046:[[101],256],120047:[[102],256],120048:[[103],256],120049:[[104],256],120050:[[105],256],120051:[[106],256],120052:[[107],256],120053:[[108],256],120054:[[109],256],120055:[[110],256],120056:[[111],256],120057:[[112],256],120058:[[113],256],120059:[[114],256],120060:[[115],256],120061:[[116],256],120062:[[117],256],120063:[[118],256]},
695954528:{120064:[[119],256],120065:[[120],256],120066:[[121],256],120067:[[122],256],120068:[[65],256],120069:[[66],256],120071:[[68],256],120072:[[69],256],120073:[[70],256],120074:[[71],256],120077:[[74],256],120078:[[75],256],120079:[[76],256],120080:[[77],256],120081:[[78],256],120082:[[79],256],120083:[[80],256],120084:[[81],256],120086:[[83],256],120087:[[84],256],120088:[[85],256],120089:[[86],256],120090:[[87],256],120091:[[88],256],120092:[[89],256],120094:[[97],256],120095:[[98],256],120096:[[99],256],120097:[[100],256],120098:[[101],256],120099:[[102],256],120100:[[103],256],120101:[[104],256],120102:[[105],256],120103:[[106],256],120104:[[107],256],120105:[[108],256],120106:[[109],256],120107:[[110],256],120108:[[111],256],120109:[[112],256],120110:[[113],256],120111:[[114],256],120112:[[115],256],120113:[[116],256],120114:[[117],256],120115:[[118],256],120116:[[119],256],120117:[[120],256],120118:[[121],256],120119:[[122],256],120120:[[65],256],120121:[[66],256],120123:[[68],256],120124:[[69],256],120125:[[70],256],120126:[[71],256],120128:[[73],256],120129:[[74],256],120130:[[75],256],120131:[[76],256],120132:[[77],256],120134:[[79],256],120138:[[83],256],120139:[[84],256],120140:[[85],256],120141:[[86],256],120142:[[87],256],120143:[[88],256],120144:[[89],256],120146:[[97],256],120147:[[98],256],120148:[[99],256],120149:[[100],256],120150:[[101],256],120151:[[102],256],120152:[[103],256],120153:[[104],256],120154:[[105],256],120155:[[106],256],120156:[[107],256],120157:[[108],256],120158:[[109],256],120159:[[110],256],120160:[[111],256],120161:[[112],256],120162:[[113],256],120163:[[114],256],120164:[[115],256],120165:[[116],256],120166:[[117],256],120167:[[118],256],120168:[[119],256],120169:[[120],256],120170:[[121],256],120171:[[122],256],120172:[[65],256],120173:[[66],256],120174:[[67],256],120175:[[68],256],120176:[[69],256],120177:[[70],256],120178:[[71],256],120179:[[72],256],120180:[[73],256],120181:[[74],256],120182:[[75],256],120183:[[76],256],120184:[[77],256],120185:[[78],256],120186:[[79],256],120187:[[80],256],120188:[[81],256],120189:[[82],256],120190:[[83],256],120191:[[84],256],120192:[[85],256],120193:[[86],256],120194:[[87],256],120195:[[88],256],120196:[[89],256],120197:[[90],256],120198:[[97],256],120199:[[98],256],120200:[[99],256],120201:[[100],256],120202:[[101],256],120203:[[102],256],120204:[[103],256],120205:[[104],256],120206:[[105],256],120207:[[106],256],120208:[[107],256],120209:[[108],256],120210:[[109],256],120211:[[110],256],120212:[[111],256],120213:[[112],256],120214:[[113],256],120215:[[114],256],120216:[[115],256],120217:[[116],256],120218:[[117],256],120219:[[118],256],120220:[[119],256],120221:[[120],256],120222:[[121],256],120223:[[122],256],120224:[[65],256],120225:[[66],256],120226:[[67],256],120227:[[68],256],120228:[[69],256],120229:[[70],256],120230:[[71],256],120231:[[72],256],120232:[[73],256],120233:[[74],256],120234:[[75],256],120235:[[76],256],120236:[[77],256],120237:[[78],256],120238:[[79],256],120239:[[80],256],120240:[[81],256],120241:[[82],256],120242:[[83],256],120243:[[84],256],120244:[[85],256],120245:[[86],256],120246:[[87],256],120247:[[88],256],120248:[[89],256],120249:[[90],256],120250:[[97],256],120251:[[98],256],120252:[[99],256],120253:[[100],256],120254:[[101],256],120255:[[102],256],120256:[[103],256],120257:[[104],256],120258:[[105],256],120259:[[106],256],120260:[[107],256],120261:[[108],256],120262:[[109],256],120263:[[110],256],120264:[[111],256],120265:[[112],256],120266:[[113],256],120267:[[114],256],120268:[[115],256],120269:[[116],256],120270:[[117],256],120271:[[118],256],120272:[[119],256],120273:[[120],256],120274:[[121],256],120275:[[122],256],120276:[[65],256],120277:[[66],256],120278:[[67],256],120279:[[68],256],120280:[[69],256],120281:[[70],256],120282:[[71],256],120283:[[72],256],120284:[[73],256],120285:[[74],256],120286:[[75],256],120287:[[76],256],120288:[[77],256],120289:[[78],256],120290:[[79],256],120291:[[80],256],120292:[[81],256],120293:[[82],256],120294:[[83],256],120295:[[84],256],120296:[[85],256],120297:[[86],256],120298:[[87],256],120299:[[88],256],120300:[[89],256],120301:[[90],256],120302:[[97],256],120303:[[98],256],120304:[[99],256],120305:[[100],256],120306:[[101],256],120307:[[102],256],120308:[[103],256],120309:[[104],256],120310:[[105],256],120311:[[106],256],120312:[[107],256],120313:[[108],256],120314:[[109],256],120315:[[110],256],120316:[[111],256],120317:[[112],256],120318:[[113],256],120319:[[114],256]},
696054784:{120320:[[115],256],120321:[[116],256],120322:[[117],256],120323:[[118],256],120324:[[119],256],120325:[[120],256],120326:[[121],256],120327:[[122],256],120328:[[65],256],120329:[[66],256],120330:[[67],256],120331:[[68],256],120332:[[69],256],120333:[[70],256],120334:[[71],256],120335:[[72],256],120336:[[73],256],120337:[[74],256],120338:[[75],256],120339:[[76],256],120340:[[77],256],120341:[[78],256],120342:[[79],256],120343:[[80],256],120344:[[81],256],120345:[[82],256],120346:[[83],256],120347:[[84],256],120348:[[85],256],120349:[[86],256],120350:[[87],256],120351:[[88],256],120352:[[89],256],120353:[[90],256],120354:[[97],256],120355:[[98],256],120356:[[99],256],120357:[[100],256],120358:[[101],256],120359:[[102],256],120360:[[103],256],120361:[[104],256],120362:[[105],256],120363:[[106],256],120364:[[107],256],120365:[[108],256],120366:[[109],256],120367:[[110],256],120368:[[111],256],120369:[[112],256],120370:[[113],256],120371:[[114],256],120372:[[115],256],120373:[[116],256],120374:[[117],256],120375:[[118],256],120376:[[119],256],120377:[[120],256],120378:[[121],256],120379:[[122],256],120380:[[65],256],120381:[[66],256],120382:[[67],256],120383:[[68],256],120384:[[69],256],120385:[[70],256],120386:[[71],256],120387:[[72],256],120388:[[73],256],120389:[[74],256],120390:[[75],256],120391:[[76],256],120392:[[77],256],120393:[[78],256],120394:[[79],256],120395:[[80],256],120396:[[81],256],120397:[[82],256],120398:[[83],256],120399:[[84],256],120400:[[85],256],120401:[[86],256],120402:[[87],256],120403:[[88],256],120404:[[89],256],120405:[[90],256],120406:[[97],256],120407:[[98],256],120408:[[99],256],120409:[[100],256],120410:[[101],256],120411:[[102],256],120412:[[103],256],120413:[[104],256],120414:[[105],256],120415:[[106],256],120416:[[107],256],120417:[[108],256],120418:[[109],256],120419:[[110],256],120420:[[111],256],120421:[[112],256],120422:[[113],256],120423:[[114],256],120424:[[115],256],120425:[[116],256],120426:[[117],256],120427:[[118],256],120428:[[119],256],120429:[[120],256],120430:[[121],256],120431:[[122],256],120432:[[65],256],120433:[[66],256],120434:[[67],256],120435:[[68],256],120436:[[69],256],120437:[[70],256],120438:[[71],256],120439:[[72],256],120440:[[73],256],120441:[[74],256],120442:[[75],256],120443:[[76],256],120444:[[77],256],120445:[[78],256],120446:[[79],256],120447:[[80],256],120448:[[81],256],120449:[[82],256],120450:[[83],256],120451:[[84],256],120452:[[85],256],120453:[[86],256],120454:[[87],256],120455:[[88],256],120456:[[89],256],120457:[[90],256],120458:[[97],256],120459:[[98],256],120460:[[99],256],120461:[[100],256],120462:[[101],256],120463:[[102],256],120464:[[103],256],120465:[[104],256],120466:[[105],256],120467:[[106],256],120468:[[107],256],120469:[[108],256],120470:[[109],256],120471:[[110],256],120472:[[111],256],120473:[[112],256],120474:[[113],256],120475:[[114],256],120476:[[115],256],120477:[[116],256],120478:[[117],256],120479:[[118],256],120480:[[119],256],120481:[[120],256],120482:[[121],256],120483:[[122],256],120484:[[305],256],120485:[[567],256],120488:[[913],256],120489:[[914],256],120490:[[915],256],120491:[[916],256],120492:[[917],256],120493:[[918],256],120494:[[919],256],120495:[[920],256],120496:[[921],256],120497:[[922],256],120498:[[923],256],120499:[[924],256],120500:[[925],256],120501:[[926],256],120502:[[927],256],120503:[[928],256],120504:[[929],256],120505:[[1012],256],120506:[[931],256],120507:[[932],256],120508:[[933],256],120509:[[934],256],120510:[[935],256],120511:[[936],256],120512:[[937],256],120513:[[8711],256],120514:[[945],256],120515:[[946],256],120516:[[947],256],120517:[[948],256],120518:[[949],256],120519:[[950],256],120520:[[951],256],120521:[[952],256],120522:[[953],256],120523:[[954],256],120524:[[955],256],120525:[[956],256],120526:[[957],256],120527:[[958],256],120528:[[959],256],120529:[[960],256],120530:[[961],256],120531:[[962],256],120532:[[963],256],120533:[[964],256],120534:[[965],256],120535:[[966],256],120536:[[967],256],120537:[[968],256],120538:[[969],256],120539:[[8706],256],120540:[[1013],256],120541:[[977],256],120542:[[1008],256],120543:[[981],256],120544:[[1009],256],120545:[[982],256],120546:[[913],256],120547:[[914],256],120548:[[915],256],120549:[[916],256],120550:[[917],256],120551:[[918],256],120552:[[919],256],120553:[[920],256],120554:[[921],256],120555:[[922],256],120556:[[923],256],120557:[[924],256],120558:[[925],256],120559:[[926],256],120560:[[927],256],120561:[[928],256],120562:[[929],256],120563:[[1012],256],120564:[[931],256],120565:[[932],256],120566:[[933],256],120567:[[934],256],120568:[[935],256],120569:[[936],256],120570:[[937],256],120571:[[8711],256],120572:[[945],256],120573:[[946],256],120574:[[947],256],120575:[[948],256]},
696155040:{120576:[[949],256],120577:[[950],256],120578:[[951],256],120579:[[952],256],120580:[[953],256],120581:[[954],256],120582:[[955],256],120583:[[956],256],120584:[[957],256],120585:[[958],256],120586:[[959],256],120587:[[960],256],120588:[[961],256],120589:[[962],256],120590:[[963],256],120591:[[964],256],120592:[[965],256],120593:[[966],256],120594:[[967],256],120595:[[968],256],120596:[[969],256],120597:[[8706],256],120598:[[1013],256],120599:[[977],256],120600:[[1008],256],120601:[[981],256],120602:[[1009],256],120603:[[982],256],120604:[[913],256],120605:[[914],256],120606:[[915],256],120607:[[916],256],120608:[[917],256],120609:[[918],256],120610:[[919],256],120611:[[920],256],120612:[[921],256],120613:[[922],256],120614:[[923],256],120615:[[924],256],120616:[[925],256],120617:[[926],256],120618:[[927],256],120619:[[928],256],120620:[[929],256],120621:[[1012],256],120622:[[931],256],120623:[[932],256],120624:[[933],256],120625:[[934],256],120626:[[935],256],120627:[[936],256],120628:[[937],256],120629:[[8711],256],120630:[[945],256],120631:[[946],256],120632:[[947],256],120633:[[948],256],120634:[[949],256],120635:[[950],256],120636:[[951],256],120637:[[952],256],120638:[[953],256],120639:[[954],256],120640:[[955],256],120641:[[956],256],120642:[[957],256],120643:[[958],256],120644:[[959],256],120645:[[960],256],120646:[[961],256],120647:[[962],256],120648:[[963],256],120649:[[964],256],120650:[[965],256],120651:[[966],256],120652:[[967],256],120653:[[968],256],120654:[[969],256],120655:[[8706],256],120656:[[1013],256],120657:[[977],256],120658:[[1008],256],120659:[[981],256],120660:[[1009],256],120661:[[982],256],120662:[[913],256],120663:[[914],256],120664:[[915],256],120665:[[916],256],120666:[[917],256],120667:[[918],256],120668:[[919],256],120669:[[920],256],120670:[[921],256],120671:[[922],256],120672:[[923],256],120673:[[924],256],120674:[[925],256],120675:[[926],256],120676:[[927],256],120677:[[928],256],120678:[[929],256],120679:[[1012],256],120680:[[931],256],120681:[[932],256],120682:[[933],256],120683:[[934],256],120684:[[935],256],120685:[[936],256],120686:[[937],256],120687:[[8711],256],120688:[[945],256],120689:[[946],256],120690:[[947],256],120691:[[948],256],120692:[[949],256],120693:[[950],256],120694:[[951],256],120695:[[952],256],120696:[[953],256],120697:[[954],256],120698:[[955],256],120699:[[956],256],120700:[[957],256],120701:[[958],256],120702:[[959],256],120703:[[960],256],120704:[[961],256],120705:[[962],256],120706:[[963],256],120707:[[964],256],120708:[[965],256],120709:[[966],256],120710:[[967],256],120711:[[968],256],120712:[[969],256],120713:[[8706],256],120714:[[1013],256],120715:[[977],256],120716:[[1008],256],120717:[[981],256],120718:[[1009],256],120719:[[982],256],120720:[[913],256],120721:[[914],256],120722:[[915],256],120723:[[916],256],120724:[[917],256],120725:[[918],256],120726:[[919],256],120727:[[920],256],120728:[[921],256],120729:[[922],256],120730:[[923],256],120731:[[924],256],120732:[[925],256],120733:[[926],256],120734:[[927],256],120735:[[928],256],120736:[[929],256],120737:[[1012],256],120738:[[931],256],120739:[[932],256],120740:[[933],256],120741:[[934],256],120742:[[935],256],120743:[[936],256],120744:[[937],256],120745:[[8711],256],120746:[[945],256],120747:[[946],256],120748:[[947],256],120749:[[948],256],120750:[[949],256],120751:[[950],256],120752:[[951],256],120753:[[952],256],120754:[[953],256],120755:[[954],256],120756:[[955],256],120757:[[956],256],120758:[[957],256],120759:[[958],256],120760:[[959],256],120761:[[960],256],120762:[[961],256],120763:[[962],256],120764:[[963],256],120765:[[964],256],120766:[[965],256],120767:[[966],256],120768:[[967],256],120769:[[968],256],120770:[[969],256],120771:[[8706],256],120772:[[1013],256],120773:[[977],256],120774:[[1008],256],120775:[[981],256],120776:[[1009],256],120777:[[982],256],120778:[[988],256],120779:[[989],256],120782:[[48],256],120783:[[49],256],120784:[[50],256],120785:[[51],256],120786:[[52],256],120787:[[53],256],120788:[[54],256],120789:[[55],256],120790:[[56],256],120791:[[57],256],120792:[[48],256],120793:[[49],256],120794:[[50],256],120795:[[51],256],120796:[[52],256],120797:[[53],256],120798:[[54],256],120799:[[55],256],120800:[[56],256],120801:[[57],256],120802:[[48],256],120803:[[49],256],120804:[[50],256],120805:[[51],256],120806:[[52],256],120807:[[53],256],120808:[[54],256],120809:[[55],256],120810:[[56],256],120811:[[57],256],120812:[[48],256],120813:[[49],256],120814:[[50],256],120815:[[51],256],120816:[[52],256],120817:[[53],256],120818:[[54],256],120819:[[55],256],120820:[[56],256],120821:[[57],256],120822:[[48],256],120823:[[49],256],120824:[[50],256],120825:[[51],256],120826:[[52],256],120827:[[53],256],120828:[[54],256],120829:[[55],256],120830:[[56],256],120831:[[57],256]},
696259392:{125136:[,220],125137:[,220],125138:[,220],125139:[,220],125140:[,220],125141:[,220],125142:[,220]},
696360928:{126464:[[1575],256],126465:[[1576],256],126466:[[1580],256],126467:[[1583],256],126469:[[1608],256],126470:[[1586],256],126471:[[1581],256],126472:[[1591],256],126473:[[1610],256],126474:[[1603],256],126475:[[1604],256],126476:[[1605],256],126477:[[1606],256],126478:[[1587],256],126479:[[1593],256],126480:[[1601],256],126481:[[1589],256],126482:[[1602],256],126483:[[1585],256],126484:[[1588],256],126485:[[1578],256],126486:[[1579],256],126487:[[1582],256],126488:[[1584],256],126489:[[1590],256],126490:[[1592],256],126491:[[1594],256],126492:[[1646],256],126493:[[1722],256],126494:[[1697],256],126495:[[1647],256],126497:[[1576],256],126498:[[1580],256],126500:[[1607],256],126503:[[1581],256],126505:[[1610],256],126506:[[1603],256],126507:[[1604],256],126508:[[1605],256],126509:[[1606],256],126510:[[1587],256],126511:[[1593],256],126512:[[1601],256],126513:[[1589],256],126514:[[1602],256],126516:[[1588],256],126517:[[1578],256],126518:[[1579],256],126519:[[1582],256],126521:[[1590],256],126523:[[1594],256],126530:[[1580],256],126535:[[1581],256],126537:[[1610],256],126539:[[1604],256],126541:[[1606],256],126542:[[1587],256],126543:[[1593],256],126545:[[1589],256],126546:[[1602],256],126548:[[1588],256],126551:[[1582],256],126553:[[1590],256],126555:[[1594],256],126557:[[1722],256],126559:[[1647],256],126561:[[1576],256],126562:[[1580],256],126564:[[1607],256],126567:[[1581],256],126568:[[1591],256],126569:[[1610],256],126570:[[1603],256],126572:[[1605],256],126573:[[1606],256],126574:[[1587],256],126575:[[1593],256],126576:[[1601],256],126577:[[1589],256],126578:[[1602],256],126580:[[1588],256],126581:[[1578],256],126582:[[1579],256],126583:[[1582],256],126585:[[1590],256],126586:[[1592],256],126587:[[1594],256],126588:[[1646],256],126590:[[1697],256],126592:[[1575],256],126593:[[1576],256],126594:[[1580],256],126595:[[1583],256],126596:[[1607],256],126597:[[1608],256],126598:[[1586],256],126599:[[1581],256],126600:[[1591],256],126601:[[1610],256],126603:[[1604],256],126604:[[1605],256],126605:[[1606],256],126606:[[1587],256],126607:[[1593],256],126608:[[1601],256],126609:[[1589],256],126610:[[1602],256],126611:[[1585],256],126612:[[1588],256],126613:[[1578],256],126614:[[1579],256],126615:[[1582],256],126616:[[1584],256],126617:[[1590],256],126618:[[1592],256],126619:[[1594],256],126625:[[1576],256],126626:[[1580],256],126627:[[1583],256],126629:[[1608],256],126630:[[1586],256],126631:[[1581],256],126632:[[1591],256],126633:[[1610],256],126635:[[1604],256],126636:[[1605],256],126637:[[1606],256],126638:[[1587],256],126639:[[1593],256],126640:[[1601],256],126641:[[1589],256],126642:[[1602],256],126643:[[1585],256],126644:[[1588],256],126645:[[1578],256],126646:[[1579],256],126647:[[1582],256],126648:[[1584],256],126649:[[1590],256],126650:[[1592],256],126651:[[1594],256]},
696461696:{127232:[[48,46],256],127233:[[48,44],256],127234:[[49,44],256],127235:[[50,44],256],127236:[[51,44],256],127237:[[52,44],256],127238:[[53,44],256],127239:[[54,44],256],127240:[[55,44],256],127241:[[56,44],256],127242:[[57,44],256],127248:[[40,65,41],256],127249:[[40,66,41],256],127250:[[40,67,41],256],127251:[[40,68,41],256],127252:[[40,69,41],256],127253:[[40,70,41],256],127254:[[40,71,41],256],127255:[[40,72,41],256],127256:[[40,73,41],256],127257:[[40,74,41],256],127258:[[40,75,41],256],127259:[[40,76,41],256],127260:[[40,77,41],256],127261:[[40,78,41],256],127262:[[40,79,41],256],127263:[[40,80,41],256],127264:[[40,81,41],256],127265:[[40,82,41],256],127266:[[40,83,41],256],127267:[[40,84,41],256],127268:[[40,85,41],256],127269:[[40,86,41],256],127270:[[40,87,41],256],127271:[[40,88,41],256],127272:[[40,89,41],256],127273:[[40,90,41],256],127274:[[12308,83,12309],256],127275:[[67],256],127276:[[82],256],127277:[[67,68],256],127278:[[87,90],256],127280:[[65],256],127281:[[66],256],127282:[[67],256],127283:[[68],256],127284:[[69],256],127285:[[70],256],127286:[[71],256],127287:[[72],256],127288:[[73],256],127289:[[74],256],127290:[[75],256],127291:[[76],256],127292:[[77],256],127293:[[78],256],127294:[[79],256],127295:[[80],256],127296:[[81],256],127297:[[82],256],127298:[[83],256],127299:[[84],256],127300:[[85],256],127301:[[86],256],127302:[[87],256],127303:[[88],256],127304:[[89],256],127305:[[90],256],127306:[[72,86],256],127307:[[77,86],256],127308:[[83,68],256],127309:[[83,83],256],127310:[[80,80,86],256],127311:[[87,67],256],127338:[[77,67],256],127339:[[77,68],256],127376:[[68,74],256]},
696561952:{127488:[[12411,12363],256],127489:[[12467,12467],256],127490:[[12469],256],127504:[[25163],256],127505:[[23383],256],127506:[[21452],256],127507:[[12487],256],127508:[[20108],256],127509:[[22810],256],127510:[[35299],256],127511:[[22825],256],127512:[[20132],256],127513:[[26144],256],127514:[[28961],256],127515:[[26009],256],127516:[[21069],256],127517:[[24460],256],127518:[[20877],256],127519:[[26032],256],127520:[[21021],256],127521:[[32066],256],127522:[[29983],256],127523:[[36009],256],127524:[[22768],256],127525:[[21561],256],127526:[[28436],256],127527:[[25237],256],127528:[[25429],256],127529:[[19968],256],127530:[[19977],256],127531:[[36938],256],127532:[[24038],256],127533:[[20013],256],127534:[[21491],256],127535:[[25351],256],127536:[[36208],256],127537:[[25171],256],127538:[[31105],256],127539:[[31354],256],127540:[[21512],256],127541:[[28288],256],127542:[[26377],256],127543:[[26376],256],127544:[[30003],256],127545:[[21106],256],127546:[[21942],256],127552:[[12308,26412,12309],256],127553:[[12308,19977,12309],256],127554:[[12308,20108,12309],256],127555:[[12308,23433,12309],256],127556:[[12308,28857,12309],256],127557:[[12308,25171,12309],256],127558:[[12308,30423,12309],256],127559:[[12308,21213,12309],256],127560:[[12308,25943,12309],256],127568:[[24471],256],127569:[[21487],256]},
696663488:{194560:[[20029]],194561:[[20024]],194562:[[20033]],194563:[[131362]],194564:[[20320]],194565:[[20398]],194566:[[20411]],194567:[[20482]],194568:[[20602]],194569:[[20633]],194570:[[20711]],194571:[[20687]],194572:[[13470]],194573:[[132666]],194574:[[20813]],194575:[[20820]],194576:[[20836]],194577:[[20855]],194578:[[132380]],194579:[[13497]],194580:[[20839]],194581:[[20877]],194582:[[132427]],194583:[[20887]],194584:[[20900]],194585:[[20172]],194586:[[20908]],194587:[[20917]],194588:[[168415]],194589:[[20981]],194590:[[20995]],194591:[[13535]],194592:[[21051]],194593:[[21062]],194594:[[21106]],194595:[[21111]],194596:[[13589]],194597:[[21191]],194598:[[21193]],194599:[[21220]],194600:[[21242]],194601:[[21253]],194602:[[21254]],194603:[[21271]],194604:[[21321]],194605:[[21329]],194606:[[21338]],194607:[[21363]],194608:[[21373]],194609:[[21375]],194610:[[21375]],194611:[[21375]],194612:[[133676]],194613:[[28784]],194614:[[21450]],194615:[[21471]],194616:[[133987]],194617:[[21483]],194618:[[21489]],194619:[[21510]],194620:[[21662]],194621:[[21560]],194622:[[21576]],194623:[[21608]],194624:[[21666]],194625:[[21750]],194626:[[21776]],194627:[[21843]],194628:[[21859]],194629:[[21892]],194630:[[21892]],194631:[[21913]],194632:[[21931]],194633:[[21939]],194634:[[21954]],194635:[[22294]],194636:[[22022]],194637:[[22295]],194638:[[22097]],194639:[[22132]],194640:[[20999]],194641:[[22766]],194642:[[22478]],194643:[[22516]],194644:[[22541]],194645:[[22411]],194646:[[22578]],194647:[[22577]],194648:[[22700]],194649:[[136420]],194650:[[22770]],194651:[[22775]],194652:[[22790]],194653:[[22810]],194654:[[22818]],194655:[[22882]],194656:[[136872]],194657:[[136938]],194658:[[23020]],194659:[[23067]],194660:[[23079]],194661:[[23000]],194662:[[23142]],194663:[[14062]],194664:[[14076]],194665:[[23304]],194666:[[23358]],194667:[[23358]],194668:[[137672]],194669:[[23491]],194670:[[23512]],194671:[[23527]],194672:[[23539]],194673:[[138008]],194674:[[23551]],194675:[[23558]],194676:[[24403]],194677:[[23586]],194678:[[14209]],194679:[[23648]],194680:[[23662]],194681:[[23744]],194682:[[23693]],194683:[[138724]],194684:[[23875]],194685:[[138726]],194686:[[23918]],194687:[[23915]],194688:[[23932]],194689:[[24033]],194690:[[24034]],194691:[[14383]],194692:[[24061]],194693:[[24104]],194694:[[24125]],194695:[[24169]],194696:[[14434]],194697:[[139651]],194698:[[14460]],194699:[[24240]],194700:[[24243]],194701:[[24246]],194702:[[24266]],194703:[[172946]],194704:[[24318]],194705:[[140081]],194706:[[140081]],194707:[[33281]],194708:[[24354]],194709:[[24354]],194710:[[14535]],194711:[[144056]],194712:[[156122]],194713:[[24418]],194714:[[24427]],194715:[[14563]],194716:[[24474]],194717:[[24525]],194718:[[24535]],194719:[[24569]],194720:[[24705]],194721:[[14650]],194722:[[14620]],194723:[[24724]],194724:[[141012]],194725:[[24775]],194726:[[24904]],194727:[[24908]],194728:[[24910]],194729:[[24908]],194730:[[24954]],194731:[[24974]],194732:[[25010]],194733:[[24996]],194734:[[25007]],194735:[[25054]],194736:[[25074]],194737:[[25078]],194738:[[25104]],194739:[[25115]],194740:[[25181]],194741:[[25265]],194742:[[25300]],194743:[[25424]],194744:[[142092]],194745:[[25405]],194746:[[25340]],194747:[[25448]],194748:[[25475]],194749:[[25572]],194750:[[142321]],194751:[[25634]],194752:[[25541]],194753:[[25513]],194754:[[14894]],194755:[[25705]],194756:[[25726]],194757:[[25757]],194758:[[25719]],194759:[[14956]],194760:[[25935]],194761:[[25964]],194762:[[143370]],194763:[[26083]],194764:[[26360]],194765:[[26185]],194766:[[15129]],194767:[[26257]],194768:[[15112]],194769:[[15076]],194770:[[20882]],194771:[[20885]],194772:[[26368]],194773:[[26268]],194774:[[32941]],194775:[[17369]],194776:[[26391]],194777:[[26395]],194778:[[26401]],194779:[[26462]],194780:[[26451]],194781:[[144323]],194782:[[15177]],194783:[[26618]],194784:[[26501]],194785:[[26706]],194786:[[26757]],194787:[[144493]],194788:[[26766]],194789:[[26655]],194790:[[26900]],194791:[[15261]],194792:[[26946]],194793:[[27043]],194794:[[27114]],194795:[[27304]],194796:[[145059]],194797:[[27355]],194798:[[15384]],194799:[[27425]],194800:[[145575]],194801:[[27476]],194802:[[15438]],194803:[[27506]],194804:[[27551]],194805:[[27578]],194806:[[27579]],194807:[[146061]],194808:[[138507]],194809:[[146170]],194810:[[27726]],194811:[[146620]],194812:[[27839]],194813:[[27853]],194814:[[27751]],194815:[[27926]]},
696763744:{63744:[[35912]],63745:[[26356]],63746:[[36554]],63747:[[36040]],63748:[[28369]],63749:[[20018]],63750:[[21477]],63751:[[40860]],63752:[[40860]],63753:[[22865]],63754:[[37329]],63755:[[21895]],63756:[[22856]],63757:[[25078]],63758:[[30313]],63759:[[32645]],63760:[[34367]],63761:[[34746]],63762:[[35064]],63763:[[37007]],63764:[[27138]],63765:[[27931]],63766:[[28889]],63767:[[29662]],63768:[[33853]],63769:[[37226]],63770:[[39409]],63771:[[20098]],63772:[[21365]],63773:[[27396]],63774:[[29211]],63775:[[34349]],63776:[[40478]],63777:[[23888]],63778:[[28651]],63779:[[34253]],63780:[[35172]],63781:[[25289]],63782:[[33240]],63783:[[34847]],63784:[[24266]],63785:[[26391]],63786:[[28010]],63787:[[29436]],63788:[[37070]],63789:[[20358]],63790:[[20919]],63791:[[21214]],63792:[[25796]],63793:[[27347]],63794:[[29200]],63795:[[30439]],63796:[[32769]],63797:[[34310]],63798:[[34396]],63799:[[36335]],63800:[[38706]],63801:[[39791]],63802:[[40442]],63803:[[30860]],63804:[[31103]],63805:[[32160]],63806:[[33737]],63807:[[37636]],63808:[[40575]],63809:[[35542]],63810:[[22751]],63811:[[24324]],63812:[[31840]],63813:[[32894]],63814:[[29282]],63815:[[30922]],63816:[[36034]],63817:[[38647]],63818:[[22744]],63819:[[23650]],63820:[[27155]],63821:[[28122]],63822:[[28431]],63823:[[32047]],63824:[[32311]],63825:[[38475]],63826:[[21202]],63827:[[32907]],63828:[[20956]],63829:[[20940]],63830:[[31260]],63831:[[32190]],63832:[[33777]],63833:[[38517]],63834:[[35712]],63835:[[25295]],63836:[[27138]],63837:[[35582]],63838:[[20025]],63839:[[23527]],63840:[[24594]],63841:[[29575]],63842:[[30064]],63843:[[21271]],63844:[[30971]],63845:[[20415]],63846:[[24489]],63847:[[19981]],63848:[[27852]],63849:[[25976]],63850:[[32034]],63851:[[21443]],63852:[[22622]],63853:[[30465]],63854:[[33865]],63855:[[35498]],63856:[[27578]],63857:[[36784]],63858:[[27784]],63859:[[25342]],63860:[[33509]],63861:[[25504]],63862:[[30053]],63863:[[20142]],63864:[[20841]],63865:[[20937]],63866:[[26753]],63867:[[31975]],63868:[[33391]],63869:[[35538]],63870:[[37327]],63871:[[21237]],63872:[[21570]],63873:[[22899]],63874:[[24300]],63875:[[26053]],63876:[[28670]],63877:[[31018]],63878:[[38317]],63879:[[39530]],63880:[[40599]],63881:[[40654]],63882:[[21147]],63883:[[26310]],63884:[[27511]],63885:[[36706]],63886:[[24180]],63887:[[24976]],63888:[[25088]],63889:[[25754]],63890:[[28451]],63891:[[29001]],63892:[[29833]],63893:[[31178]],63894:[[32244]],63895:[[32879]],63896:[[36646]],63897:[[34030]],63898:[[36899]],63899:[[37706]],63900:[[21015]],63901:[[21155]],63902:[[21693]],63903:[[28872]],63904:[[35010]],63905:[[35498]],63906:[[24265]],63907:[[24565]],63908:[[25467]],63909:[[27566]],63910:[[31806]],63911:[[29557]],63912:[[20196]],63913:[[22265]],63914:[[23527]],63915:[[23994]],63916:[[24604]],63917:[[29618]],63918:[[29801]],63919:[[32666]],63920:[[32838]],63921:[[37428]],63922:[[38646]],63923:[[38728]],63924:[[38936]],63925:[[20363]],63926:[[31150]],63927:[[37300]],63928:[[38584]],63929:[[24801]],63930:[[20102]],63931:[[20698]],63932:[[23534]],63933:[[23615]],63934:[[26009]],63935:[[27138]],63936:[[29134]],63937:[[30274]],63938:[[34044]],63939:[[36988]],63940:[[40845]],63941:[[26248]],63942:[[38446]],63943:[[21129]],63944:[[26491]],63945:[[26611]],63946:[[27969]],63947:[[28316]],63948:[[29705]],63949:[[30041]],63950:[[30827]],63951:[[32016]],63952:[[39006]],63953:[[20845]],63954:[[25134]],63955:[[38520]],63956:[[20523]],63957:[[23833]],63958:[[28138]],63959:[[36650]],63960:[[24459]],63961:[[24900]],63962:[[26647]],63963:[[29575]],63964:[[38534]],63965:[[21033]],63966:[[21519]],63967:[[23653]],63968:[[26131]],63969:[[26446]],63970:[[26792]],63971:[[27877]],63972:[[29702]],63973:[[30178]],63974:[[32633]],63975:[[35023]],63976:[[35041]],63977:[[37324]],63978:[[38626]],63979:[[21311]],63980:[[28346]],63981:[[21533]],63982:[[29136]],63983:[[29848]],63984:[[34298]],63985:[[38563]],63986:[[40023]],63987:[[40607]],63988:[[26519]],63989:[[28107]],63990:[[33256]],63991:[[31435]],63992:[[31520]],63993:[[31890]],63994:[[29376]],63995:[[28825]],63996:[[35672]],63997:[[20160]],63998:[[33590]],63999:[[21050]],194816:[[27966]],194817:[[28023]],194818:[[27969]],194819:[[28009]],194820:[[28024]],194821:[[28037]],194822:[[146718]],194823:[[27956]],194824:[[28207]],194825:[[28270]],194826:[[15667]],194827:[[28363]],194828:[[28359]],194829:[[147153]],194830:[[28153]],194831:[[28526]],194832:[[147294]],194833:[[147342]],194834:[[28614]],194835:[[28729]],194836:[[28702]],194837:[[28699]],194838:[[15766]],194839:[[28746]],194840:[[28797]],194841:[[28791]],194842:[[28845]],194843:[[132389]],194844:[[28997]],194845:[[148067]],194846:[[29084]],194847:[[148395]],194848:[[29224]],194849:[[29237]],194850:[[29264]],194851:[[149000]],194852:[[29312]],194853:[[29333]],194854:[[149301]],194855:[[149524]],194856:[[29562]],194857:[[29579]],194858:[[16044]],194859:[[29605]],194860:[[16056]],194861:[[16056]],194862:[[29767]],194863:[[29788]],194864:[[29809]],194865:[[29829]],194866:[[29898]],194867:[[16155]],194868:[[29988]],194869:[[150582]],194870:[[30014]],194871:[[150674]],194872:[[30064]],194873:[[139679]],194874:[[30224]],194875:[[151457]],194876:[[151480]],194877:[[151620]],194878:[[16380]],194879:[[16392]],194880:[[30452]],194881:[[151795]],194882:[[151794]],194883:[[151833]],194884:[[151859]],194885:[[30494]],194886:[[30495]],194887:[[30495]],194888:[[30538]],194889:[[16441]],194890:[[30603]],194891:[[16454]],194892:[[16534]],194893:[[152605]],194894:[[30798]],194895:[[30860]],194896:[[30924]],194897:[[16611]],194898:[[153126]],194899:[[31062]],194900:[[153242]],194901:[[153285]],194902:[[31119]],194903:[[31211]],194904:[[16687]],194905:[[31296]],194906:[[31306]],194907:[[31311]],194908:[[153980]],194909:[[154279]],194910:[[154279]],194911:[[31470]],194912:[[16898]],194913:[[154539]],194914:[[31686]],194915:[[31689]],194916:[[16935]],194917:[[154752]],194918:[[31954]],194919:[[17056]],194920:[[31976]],194921:[[31971]],194922:[[32000]],194923:[[155526]],194924:[[32099]],194925:[[17153]],194926:[[32199]],194927:[[32258]],194928:[[32325]],194929:[[17204]],194930:[[156200]],194931:[[156231]],194932:[[17241]],194933:[[156377]],194934:[[32634]],194935:[[156478]],194936:[[32661]],194937:[[32762]],194938:[[32773]],194939:[[156890]],194940:[[156963]],194941:[[32864]],194942:[[157096]],194943:[[32880]],194944:[[144223]],194945:[[17365]],194946:[[32946]],194947:[[33027]],194948:[[17419]],194949:[[33086]],194950:[[23221]],194951:[[157607]],194952:[[157621]],194953:[[144275]],194954:[[144284]],194955:[[33281]],194956:[[33284]],194957:[[36766]],194958:[[17515]],194959:[[33425]],194960:[[33419]],194961:[[33437]],194962:[[21171]],194963:[[33457]],194964:[[33459]],194965:[[33469]],194966:[[33510]],194967:[[158524]],194968:[[33509]],194969:[[33565]],194970:[[33635]],194971:[[33709]],194972:[[33571]],194973:[[33725]],194974:[[33767]],194975:[[33879]],194976:[[33619]],194977:[[33738]],194978:[[33740]],194979:[[33756]],194980:[[158774]],194981:[[159083]],194982:[[158933]],194983:[[17707]],194984:[[34033]],194985:[[34035]],194986:[[34070]],194987:[[160714]],194988:[[34148]],194989:[[159532]],194990:[[17757]],194991:[[17761]],194992:[[159665]],194993:[[159954]],194994:[[17771]],194995:[[34384]],194996:[[34396]],194997:[[34407]],194998:[[34409]],194999:[[34473]],195000:[[34440]],195001:[[34574]],195002:[[34530]],195003:[[34681]],195004:[[34600]],195005:[[34667]],195006:[[34694]],195007:[[17879]],195008:[[34785]],195009:[[34817]],195010:[[17913]],195011:[[34912]],195012:[[34915]],195013:[[161383]],195014:[[35031]],195015:[[35038]],195016:[[17973]],195017:[[35066]],195018:[[13499]],195019:[[161966]],195020:[[162150]],195021:[[18110]],195022:[[18119]],195023:[[35488]],195024:[[35565]],195025:[[35722]],195026:[[35925]],195027:[[162984]],195028:[[36011]],195029:[[36033]],195030:[[36123]],195031:[[36215]],195032:[[163631]],195033:[[133124]],195034:[[36299]],195035:[[36284]],195036:[[36336]],195037:[[133342]],195038:[[36564]],195039:[[36664]],195040:[[165330]],195041:[[165357]],195042:[[37012]],195043:[[37105]],195044:[[37137]],195045:[[165678]],195046:[[37147]],195047:[[37432]],195048:[[37591]],195049:[[37592]],195050:[[37500]],195051:[[37881]],195052:[[37909]],195053:[[166906]],195054:[[38283]],195055:[[18837]],195056:[[38327]],195057:[[167287]],195058:[[18918]],195059:[[38595]],195060:[[23986]],195061:[[38691]],195062:[[168261]],195063:[[168474]],195064:[[19054]],195065:[[19062]],195066:[[38880]],195067:[[168970]],195068:[[19122]],195069:[[169110]],195070:[[38923]],195071:[[38923]]},
696864000:{64000:[[20999]],64001:[[24230]],64002:[[25299]],64003:[[31958]],64004:[[23429]],64005:[[27934]],64006:[[26292]],64007:[[36667]],64008:[[34892]],64009:[[38477]],64010:[[35211]],64011:[[24275]],64012:[[20800]],64013:[[21952]],64016:[[22618]],64018:[[26228]],64021:[[20958]],64022:[[29482]],64023:[[30410]],64024:[[31036]],64025:[[31070]],64026:[[31077]],64027:[[31119]],64028:[[38742]],64029:[[31934]],64030:[[32701]],64032:[[34322]],64034:[[35576]],64037:[[36920]],64038:[[37117]],64042:[[39151]],64043:[[39164]],64044:[[39208]],64045:[[40372]],64046:[[37086]],64047:[[38583]],64048:[[20398]],64049:[[20711]],64050:[[20813]],64051:[[21193]],64052:[[21220]],64053:[[21329]],64054:[[21917]],64055:[[22022]],64056:[[22120]],64057:[[22592]],64058:[[22696]],64059:[[23652]],64060:[[23662]],64061:[[24724]],64062:[[24936]],64063:[[24974]],64064:[[25074]],64065:[[25935]],64066:[[26082]],64067:[[26257]],64068:[[26757]],64069:[[28023]],64070:[[28186]],64071:[[28450]],64072:[[29038]],64073:[[29227]],64074:[[29730]],64075:[[30865]],64076:[[31038]],64077:[[31049]],64078:[[31048]],64079:[[31056]],64080:[[31062]],64081:[[31069]],64082:[[31117]],64083:[[31118]],64084:[[31296]],64085:[[31361]],64086:[[31680]],64087:[[32244]],64088:[[32265]],64089:[[32321]],64090:[[32626]],64091:[[32773]],64092:[[33261]],64093:[[33401]],64094:[[33401]],64095:[[33879]],64096:[[35088]],64097:[[35222]],64098:[[35585]],64099:[[35641]],64100:[[36051]],64101:[[36104]],64102:[[36790]],64103:[[36920]],64104:[[38627]],64105:[[38911]],64106:[[38971]],64107:[[24693]],64108:[[148206]],64109:[[33304]],64112:[[20006]],64113:[[20917]],64114:[[20840]],64115:[[20352]],64116:[[20805]],64117:[[20864]],64118:[[21191]],64119:[[21242]],64120:[[21917]],64121:[[21845]],64122:[[21913]],64123:[[21986]],64124:[[22618]],64125:[[22707]],64126:[[22852]],64127:[[22868]],64128:[[23138]],64129:[[23336]],64130:[[24274]],64131:[[24281]],64132:[[24425]],64133:[[24493]],64134:[[24792]],64135:[[24910]],64136:[[24840]],64137:[[24974]],64138:[[24928]],64139:[[25074]],64140:[[25140]],64141:[[25540]],64142:[[25628]],64143:[[25682]],64144:[[25942]],64145:[[26228]],64146:[[26391]],64147:[[26395]],64148:[[26454]],64149:[[27513]],64150:[[27578]],64151:[[27969]],64152:[[28379]],64153:[[28363]],64154:[[28450]],64155:[[28702]],64156:[[29038]],64157:[[30631]],64158:[[29237]],64159:[[29359]],64160:[[29482]],64161:[[29809]],64162:[[29958]],64163:[[30011]],64164:[[30237]],64165:[[30239]],64166:[[30410]],64167:[[30427]],64168:[[30452]],64169:[[30538]],64170:[[30528]],64171:[[30924]],64172:[[31409]],64173:[[31680]],64174:[[31867]],64175:[[32091]],64176:[[32244]],64177:[[32574]],64178:[[32773]],64179:[[33618]],64180:[[33775]],64181:[[34681]],64182:[[35137]],64183:[[35206]],64184:[[35222]],64185:[[35519]],64186:[[35576]],64187:[[35531]],64188:[[35585]],64189:[[35582]],64190:[[35565]],64191:[[35641]],64192:[[35722]],64193:[[36104]],64194:[[36664]],64195:[[36978]],64196:[[37273]],64197:[[37494]],64198:[[38524]],64199:[[38627]],64200:[[38742]],64201:[[38875]],64202:[[38911]],64203:[[38923]],64204:[[38971]],64205:[[39698]],64206:[[40860]],64207:[[141386]],64208:[[141380]],64209:[[144341]],64210:[[15261]],64211:[[16408]],64212:[[16441]],64213:[[152137]],64214:[[154832]],64215:[[163539]],64216:[[40771]],64217:[[40846]],195072:[[38953]],195073:[[169398]],195074:[[39138]],195075:[[19251]],195076:[[39209]],195077:[[39335]],195078:[[39362]],195079:[[39422]],195080:[[19406]],195081:[[170800]],195082:[[39698]],195083:[[40000]],195084:[[40189]],195085:[[19662]],195086:[[19693]],195087:[[40295]],195088:[[172238]],195089:[[19704]],195090:[[172293]],195091:[[172558]],195092:[[172689]],195093:[[40635]],195094:[[19798]],195095:[[40697]],195096:[[40702]],195097:[[40709]],195098:[[40719]],195099:[[40726]],195100:[[40763]],195101:[[173568]]},
696964256:{64256:[[102,102],256],64257:[[102,105],256],64258:[[102,108],256],64259:[[102,102,105],256],64260:[[102,102,108],256],64261:[[383,116],256],64262:[[115,116],256],64275:[[1396,1398],256],64276:[[1396,1381],256],64277:[[1396,1387],256],64278:[[1406,1398],256],64279:[[1396,1389],256],64285:[[1497,1460],512],64286:[,26],64287:[[1522,1463],512],64288:[[1506],256],64289:[[1488],256],64290:[[1491],256],64291:[[1492],256],64292:[[1499],256],64293:[[1500],256],64294:[[1501],256],64295:[[1512],256],64296:[[1514],256],64297:[[43],256],64298:[[1513,1473],512],64299:[[1513,1474],512],64300:[[64329,1473],512],64301:[[64329,1474],512],64302:[[1488,1463],512],64303:[[1488,1464],512],64304:[[1488,1468],512],64305:[[1489,1468],512],64306:[[1490,1468],512],64307:[[1491,1468],512],64308:[[1492,1468],512],64309:[[1493,1468],512],64310:[[1494,1468],512],64312:[[1496,1468],512],64313:[[1497,1468],512],64314:[[1498,1468],512],64315:[[1499,1468],512],64316:[[1500,1468],512],64318:[[1502,1468],512],64320:[[1504,1468],512],64321:[[1505,1468],512],64323:[[1507,1468],512],64324:[[1508,1468],512],64326:[[1510,1468],512],64327:[[1511,1468],512],64328:[[1512,1468],512],64329:[[1513,1468],512],64330:[[1514,1468],512],64331:[[1493,1465],512],64332:[[1489,1471],512],64333:[[1499,1471],512],64334:[[1508,1471],512],64335:[[1488,1500],256],64336:[[1649],256],64337:[[1649],256],64338:[[1659],256],64339:[[1659],256],64340:[[1659],256],64341:[[1659],256],64342:[[1662],256],64343:[[1662],256],64344:[[1662],256],64345:[[1662],256],64346:[[1664],256],64347:[[1664],256],64348:[[1664],256],64349:[[1664],256],64350:[[1658],256],64351:[[1658],256],64352:[[1658],256],64353:[[1658],256],64354:[[1663],256],64355:[[1663],256],64356:[[1663],256],64357:[[1663],256],64358:[[1657],256],64359:[[1657],256],64360:[[1657],256],64361:[[1657],256],64362:[[1700],256],64363:[[1700],256],64364:[[1700],256],64365:[[1700],256],64366:[[1702],256],64367:[[1702],256],64368:[[1702],256],64369:[[1702],256],64370:[[1668],256],64371:[[1668],256],64372:[[1668],256],64373:[[1668],256],64374:[[1667],256],64375:[[1667],256],64376:[[1667],256],64377:[[1667],256],64378:[[1670],256],64379:[[1670],256],64380:[[1670],256],64381:[[1670],256],64382:[[1671],256],64383:[[1671],256],64384:[[1671],256],64385:[[1671],256],64386:[[1677],256],64387:[[1677],256],64388:[[1676],256],64389:[[1676],256],64390:[[1678],256],64391:[[1678],256],64392:[[1672],256],64393:[[1672],256],64394:[[1688],256],64395:[[1688],256],64396:[[1681],256],64397:[[1681],256],64398:[[1705],256],64399:[[1705],256],64400:[[1705],256],64401:[[1705],256],64402:[[1711],256],64403:[[1711],256],64404:[[1711],256],64405:[[1711],256],64406:[[1715],256],64407:[[1715],256],64408:[[1715],256],64409:[[1715],256],64410:[[1713],256],64411:[[1713],256],64412:[[1713],256],64413:[[1713],256],64414:[[1722],256],64415:[[1722],256],64416:[[1723],256],64417:[[1723],256],64418:[[1723],256],64419:[[1723],256],64420:[[1728],256],64421:[[1728],256],64422:[[1729],256],64423:[[1729],256],64424:[[1729],256],64425:[[1729],256],64426:[[1726],256],64427:[[1726],256],64428:[[1726],256],64429:[[1726],256],64430:[[1746],256],64431:[[1746],256],64432:[[1747],256],64433:[[1747],256],64467:[[1709],256],64468:[[1709],256],64469:[[1709],256],64470:[[1709],256],64471:[[1735],256],64472:[[1735],256],64473:[[1734],256],64474:[[1734],256],64475:[[1736],256],64476:[[1736],256],64477:[[1655],256],64478:[[1739],256],64479:[[1739],256],64480:[[1733],256],64481:[[1733],256],64482:[[1737],256],64483:[[1737],256],64484:[[1744],256],64485:[[1744],256],64486:[[1744],256],64487:[[1744],256],64488:[[1609],256],64489:[[1609],256],64490:[[1574,1575],256],64491:[[1574,1575],256],64492:[[1574,1749],256],64493:[[1574,1749],256],64494:[[1574,1608],256],64495:[[1574,1608],256],64496:[[1574,1735],256],64497:[[1574,1735],256],64498:[[1574,1734],256],64499:[[1574,1734],256],64500:[[1574,1736],256],64501:[[1574,1736],256],64502:[[1574,1744],256],64503:[[1574,1744],256],64504:[[1574,1744],256],64505:[[1574,1609],256],64506:[[1574,1609],256],64507:[[1574,1609],256],64508:[[1740],256],64509:[[1740],256],64510:[[1740],256],64511:[[1740],256]},
697064512:{64512:[[1574,1580],256],64513:[[1574,1581],256],64514:[[1574,1605],256],64515:[[1574,1609],256],64516:[[1574,1610],256],64517:[[1576,1580],256],64518:[[1576,1581],256],64519:[[1576,1582],256],64520:[[1576,1605],256],64521:[[1576,1609],256],64522:[[1576,1610],256],64523:[[1578,1580],256],64524:[[1578,1581],256],64525:[[1578,1582],256],64526:[[1578,1605],256],64527:[[1578,1609],256],64528:[[1578,1610],256],64529:[[1579,1580],256],64530:[[1579,1605],256],64531:[[1579,1609],256],64532:[[1579,1610],256],64533:[[1580,1581],256],64534:[[1580,1605],256],64535:[[1581,1580],256],64536:[[1581,1605],256],64537:[[1582,1580],256],64538:[[1582,1581],256],64539:[[1582,1605],256],64540:[[1587,1580],256],64541:[[1587,1581],256],64542:[[1587,1582],256],64543:[[1587,1605],256],64544:[[1589,1581],256],64545:[[1589,1605],256],64546:[[1590,1580],256],64547:[[1590,1581],256],64548:[[1590,1582],256],64549:[[1590,1605],256],64550:[[1591,1581],256],64551:[[1591,1605],256],64552:[[1592,1605],256],64553:[[1593,1580],256],64554:[[1593,1605],256],64555:[[1594,1580],256],64556:[[1594,1605],256],64557:[[1601,1580],256],64558:[[1601,1581],256],64559:[[1601,1582],256],64560:[[1601,1605],256],64561:[[1601,1609],256],64562:[[1601,1610],256],64563:[[1602,1581],256],64564:[[1602,1605],256],64565:[[1602,1609],256],64566:[[1602,1610],256],64567:[[1603,1575],256],64568:[[1603,1580],256],64569:[[1603,1581],256],64570:[[1603,1582],256],64571:[[1603,1604],256],64572:[[1603,1605],256],64573:[[1603,1609],256],64574:[[1603,1610],256],64575:[[1604,1580],256],64576:[[1604,1581],256],64577:[[1604,1582],256],64578:[[1604,1605],256],64579:[[1604,1609],256],64580:[[1604,1610],256],64581:[[1605,1580],256],64582:[[1605,1581],256],64583:[[1605,1582],256],64584:[[1605,1605],256],64585:[[1605,1609],256],64586:[[1605,1610],256],64587:[[1606,1580],256],64588:[[1606,1581],256],64589:[[1606,1582],256],64590:[[1606,1605],256],64591:[[1606,1609],256],64592:[[1606,1610],256],64593:[[1607,1580],256],64594:[[1607,1605],256],64595:[[1607,1609],256],64596:[[1607,1610],256],64597:[[1610,1580],256],64598:[[1610,1581],256],64599:[[1610,1582],256],64600:[[1610,1605],256],64601:[[1610,1609],256],64602:[[1610,1610],256],64603:[[1584,1648],256],64604:[[1585,1648],256],64605:[[1609,1648],256],64606:[[32,1612,1617],256],64607:[[32,1613,1617],256],64608:[[32,1614,1617],256],64609:[[32,1615,1617],256],64610:[[32,1616,1617],256],64611:[[32,1617,1648],256],64612:[[1574,1585],256],64613:[[1574,1586],256],64614:[[1574,1605],256],64615:[[1574,1606],256],64616:[[1574,1609],256],64617:[[1574,1610],256],64618:[[1576,1585],256],64619:[[1576,1586],256],64620:[[1576,1605],256],64621:[[1576,1606],256],64622:[[1576,1609],256],64623:[[1576,1610],256],64624:[[1578,1585],256],64625:[[1578,1586],256],64626:[[1578,1605],256],64627:[[1578,1606],256],64628:[[1578,1609],256],64629:[[1578,1610],256],64630:[[1579,1585],256],64631:[[1579,1586],256],64632:[[1579,1605],256],64633:[[1579,1606],256],64634:[[1579,1609],256],64635:[[1579,1610],256],64636:[[1601,1609],256],64637:[[1601,1610],256],64638:[[1602,1609],256],64639:[[1602,1610],256],64640:[[1603,1575],256],64641:[[1603,1604],256],64642:[[1603,1605],256],64643:[[1603,1609],256],64644:[[1603,1610],256],64645:[[1604,1605],256],64646:[[1604,1609],256],64647:[[1604,1610],256],64648:[[1605,1575],256],64649:[[1605,1605],256],64650:[[1606,1585],256],64651:[[1606,1586],256],64652:[[1606,1605],256],64653:[[1606,1606],256],64654:[[1606,1609],256],64655:[[1606,1610],256],64656:[[1609,1648],256],64657:[[1610,1585],256],64658:[[1610,1586],256],64659:[[1610,1605],256],64660:[[1610,1606],256],64661:[[1610,1609],256],64662:[[1610,1610],256],64663:[[1574,1580],256],64664:[[1574,1581],256],64665:[[1574,1582],256],64666:[[1574,1605],256],64667:[[1574,1607],256],64668:[[1576,1580],256],64669:[[1576,1581],256],64670:[[1576,1582],256],64671:[[1576,1605],256],64672:[[1576,1607],256],64673:[[1578,1580],256],64674:[[1578,1581],256],64675:[[1578,1582],256],64676:[[1578,1605],256],64677:[[1578,1607],256],64678:[[1579,1605],256],64679:[[1580,1581],256],64680:[[1580,1605],256],64681:[[1581,1580],256],64682:[[1581,1605],256],64683:[[1582,1580],256],64684:[[1582,1605],256],64685:[[1587,1580],256],64686:[[1587,1581],256],64687:[[1587,1582],256],64688:[[1587,1605],256],64689:[[1589,1581],256],64690:[[1589,1582],256],64691:[[1589,1605],256],64692:[[1590,1580],256],64693:[[1590,1581],256],64694:[[1590,1582],256],64695:[[1590,1605],256],64696:[[1591,1581],256],64697:[[1592,1605],256],64698:[[1593,1580],256],64699:[[1593,1605],256],64700:[[1594,1580],256],64701:[[1594,1605],256],64702:[[1601,1580],256],64703:[[1601,1581],256],64704:[[1601,1582],256],64705:[[1601,1605],256],64706:[[1602,1581],256],64707:[[1602,1605],256],64708:[[1603,1580],256],64709:[[1603,1581],256],64710:[[1603,1582],256],64711:[[1603,1604],256],64712:[[1603,1605],256],64713:[[1604,1580],256],64714:[[1604,1581],256],64715:[[1604,1582],256],64716:[[1604,1605],256],64717:[[1604,1607],256],64718:[[1605,1580],256],64719:[[1605,1581],256],64720:[[1605,1582],256],64721:[[1605,1605],256],64722:[[1606,1580],256],64723:[[1606,1581],256],64724:[[1606,1582],256],64725:[[1606,1605],256],64726:[[1606,1607],256],64727:[[1607,1580],256],64728:[[1607,1605],256],64729:[[1607,1648],256],64730:[[1610,1580],256],64731:[[1610,1581],256],64732:[[1610,1582],256],64733:[[1610,1605],256],64734:[[1610,1607],256],64735:[[1574,1605],256],64736:[[1574,1607],256],64737:[[1576,1605],256],64738:[[1576,1607],256],64739:[[1578,1605],256],64740:[[1578,1607],256],64741:[[1579,1605],256],64742:[[1579,1607],256],64743:[[1587,1605],256],64744:[[1587,1607],256],64745:[[1588,1605],256],64746:[[1588,1607],256],64747:[[1603,1604],256],64748:[[1603,1605],256],64749:[[1604,1605],256],64750:[[1606,1605],256],64751:[[1606,1607],256],64752:[[1610,1605],256],64753:[[1610,1607],256],64754:[[1600,1614,1617],256],64755:[[1600,1615,1617],256],64756:[[1600,1616,1617],256],64757:[[1591,1609],256],64758:[[1591,1610],256],64759:[[1593,1609],256],64760:[[1593,1610],256],64761:[[1594,1609],256],64762:[[1594,1610],256],64763:[[1587,1609],256],64764:[[1587,1610],256],64765:[[1588,1609],256],64766:[[1588,1610],256],64767:[[1581,1609],256]},
697164768:{64768:[[1581,1610],256],64769:[[1580,1609],256],64770:[[1580,1610],256],64771:[[1582,1609],256],64772:[[1582,1610],256],64773:[[1589,1609],256],64774:[[1589,1610],256],64775:[[1590,1609],256],64776:[[1590,1610],256],64777:[[1588,1580],256],64778:[[1588,1581],256],64779:[[1588,1582],256],64780:[[1588,1605],256],64781:[[1588,1585],256],64782:[[1587,1585],256],64783:[[1589,1585],256],64784:[[1590,1585],256],64785:[[1591,1609],256],64786:[[1591,1610],256],64787:[[1593,1609],256],64788:[[1593,1610],256],64789:[[1594,1609],256],64790:[[1594,1610],256],64791:[[1587,1609],256],64792:[[1587,1610],256],64793:[[1588,1609],256],64794:[[1588,1610],256],64795:[[1581,1609],256],64796:[[1581,1610],256],64797:[[1580,1609],256],64798:[[1580,1610],256],64799:[[1582,1609],256],64800:[[1582,1610],256],64801:[[1589,1609],256],64802:[[1589,1610],256],64803:[[1590,1609],256],64804:[[1590,1610],256],64805:[[1588,1580],256],64806:[[1588,1581],256],64807:[[1588,1582],256],64808:[[1588,1605],256],64809:[[1588,1585],256],64810:[[1587,1585],256],64811:[[1589,1585],256],64812:[[1590,1585],256],64813:[[1588,1580],256],64814:[[1588,1581],256],64815:[[1588,1582],256],64816:[[1588,1605],256],64817:[[1587,1607],256],64818:[[1588,1607],256],64819:[[1591,1605],256],64820:[[1587,1580],256],64821:[[1587,1581],256],64822:[[1587,1582],256],64823:[[1588,1580],256],64824:[[1588,1581],256],64825:[[1588,1582],256],64826:[[1591,1605],256],64827:[[1592,1605],256],64828:[[1575,1611],256],64829:[[1575,1611],256],64848:[[1578,1580,1605],256],64849:[[1578,1581,1580],256],64850:[[1578,1581,1580],256],64851:[[1578,1581,1605],256],64852:[[1578,1582,1605],256],64853:[[1578,1605,1580],256],64854:[[1578,1605,1581],256],64855:[[1578,1605,1582],256],64856:[[1580,1605,1581],256],64857:[[1580,1605,1581],256],64858:[[1581,1605,1610],256],64859:[[1581,1605,1609],256],64860:[[1587,1581,1580],256],64861:[[1587,1580,1581],256],64862:[[1587,1580,1609],256],64863:[[1587,1605,1581],256],64864:[[1587,1605,1581],256],64865:[[1587,1605,1580],256],64866:[[1587,1605,1605],256],64867:[[1587,1605,1605],256],64868:[[1589,1581,1581],256],64869:[[1589,1581,1581],256],64870:[[1589,1605,1605],256],64871:[[1588,1581,1605],256],64872:[[1588,1581,1605],256],64873:[[1588,1580,1610],256],64874:[[1588,1605,1582],256],64875:[[1588,1605,1582],256],64876:[[1588,1605,1605],256],64877:[[1588,1605,1605],256],64878:[[1590,1581,1609],256],64879:[[1590,1582,1605],256],64880:[[1590,1582,1605],256],64881:[[1591,1605,1581],256],64882:[[1591,1605,1581],256],64883:[[1591,1605,1605],256],64884:[[1591,1605,1610],256],64885:[[1593,1580,1605],256],64886:[[1593,1605,1605],256],64887:[[1593,1605,1605],256],64888:[[1593,1605,1609],256],64889:[[1594,1605,1605],256],64890:[[1594,1605,1610],256],64891:[[1594,1605,1609],256],64892:[[1601,1582,1605],256],64893:[[1601,1582,1605],256],64894:[[1602,1605,1581],256],64895:[[1602,1605,1605],256],64896:[[1604,1581,1605],256],64897:[[1604,1581,1610],256],64898:[[1604,1581,1609],256],64899:[[1604,1580,1580],256],64900:[[1604,1580,1580],256],64901:[[1604,1582,1605],256],64902:[[1604,1582,1605],256],64903:[[1604,1605,1581],256],64904:[[1604,1605,1581],256],64905:[[1605,1581,1580],256],64906:[[1605,1581,1605],256],64907:[[1605,1581,1610],256],64908:[[1605,1580,1581],256],64909:[[1605,1580,1605],256],64910:[[1605,1582,1580],256],64911:[[1605,1582,1605],256],64914:[[1605,1580,1582],256],64915:[[1607,1605,1580],256],64916:[[1607,1605,1605],256],64917:[[1606,1581,1605],256],64918:[[1606,1581,1609],256],64919:[[1606,1580,1605],256],64920:[[1606,1580,1605],256],64921:[[1606,1580,1609],256],64922:[[1606,1605,1610],256],64923:[[1606,1605,1609],256],64924:[[1610,1605,1605],256],64925:[[1610,1605,1605],256],64926:[[1576,1582,1610],256],64927:[[1578,1580,1610],256],64928:[[1578,1580,1609],256],64929:[[1578,1582,1610],256],64930:[[1578,1582,1609],256],64931:[[1578,1605,1610],256],64932:[[1578,1605,1609],256],64933:[[1580,1605,1610],256],64934:[[1580,1581,1609],256],64935:[[1580,1605,1609],256],64936:[[1587,1582,1609],256],64937:[[1589,1581,1610],256],64938:[[1588,1581,1610],256],64939:[[1590,1581,1610],256],64940:[[1604,1580,1610],256],64941:[[1604,1605,1610],256],64942:[[1610,1581,1610],256],64943:[[1610,1580,1610],256],64944:[[1610,1605,1610],256],64945:[[1605,1605,1610],256],64946:[[1602,1605,1610],256],64947:[[1606,1581,1610],256],64948:[[1602,1605,1581],256],64949:[[1604,1581,1605],256],64950:[[1593,1605,1610],256],64951:[[1603,1605,1610],256],64952:[[1606,1580,1581],256],64953:[[1605,1582,1610],256],64954:[[1604,1580,1605],256],64955:[[1603,1605,1605],256],64956:[[1604,1580,1605],256],64957:[[1606,1580,1581],256],64958:[[1580,1581,1610],256],64959:[[1581,1580,1610],256],64960:[[1605,1580,1610],256],64961:[[1601,1605,1610],256],64962:[[1576,1581,1610],256],64963:[[1603,1605,1605],256],64964:[[1593,1580,1605],256],64965:[[1589,1605,1605],256],64966:[[1587,1582,1610],256],64967:[[1606,1580,1610],256],65008:[[1589,1604,1746],256],65009:[[1602,1604,1746],256],65010:[[1575,1604,1604,1607],256],65011:[[1575,1603,1576,1585],256],65012:[[1605,1581,1605,1583],256],65013:[[1589,1604,1593,1605],256],65014:[[1585,1587,1608,1604],256],65015:[[1593,1604,1610,1607],256],65016:[[1608,1587,1604,1605],256],65017:[[1589,1604,1609],256],65018:[[1589,1604,1609,32,1575,1604,1604,1607,32,1593,1604,1610,1607,32,1608,1587,1604,1605],256],65019:[[1580,1604,32,1580,1604,1575,1604,1607],256],65020:[[1585,1740,1575,1604],256]},
697265024:{65040:[[44],256],65041:[[12289],256],65042:[[12290],256],65043:[[58],256],65044:[[59],256],65045:[[33],256],65046:[[63],256],65047:[[12310],256],65048:[[12311],256],65049:[[8230],256],65056:[,230],65057:[,230],65058:[,230],65059:[,230],65060:[,230],65061:[,230],65062:[,230],65063:[,220],65064:[,220],65065:[,220],65066:[,220],65067:[,220],65068:[,220],65069:[,220],65072:[[8229],256],65073:[[8212],256],65074:[[8211],256],65075:[[95],256],65076:[[95],256],65077:[[40],256],65078:[[41],256],65079:[[123],256],65080:[[125],256],65081:[[12308],256],65082:[[12309],256],65083:[[12304],256],65084:[[12305],256],65085:[[12298],256],65086:[[12299],256],65087:[[12296],256],65088:[[12297],256],65089:[[12300],256],65090:[[12301],256],65091:[[12302],256],65092:[[12303],256],65095:[[91],256],65096:[[93],256],65097:[[8254],256],65098:[[8254],256],65099:[[8254],256],65100:[[8254],256],65101:[[95],256],65102:[[95],256],65103:[[95],256],65104:[[44],256],65105:[[12289],256],65106:[[46],256],65108:[[59],256],65109:[[58],256],65110:[[63],256],65111:[[33],256],65112:[[8212],256],65113:[[40],256],65114:[[41],256],65115:[[123],256],65116:[[125],256],65117:[[12308],256],65118:[[12309],256],65119:[[35],256],65120:[[38],256],65121:[[42],256],65122:[[43],256],65123:[[45],256],65124:[[60],256],65125:[[62],256],65126:[[61],256],65128:[[92],256],65129:[[36],256],65130:[[37],256],65131:[[64],256],65136:[[32,1611],256],65137:[[1600,1611],256],65138:[[32,1612],256],65140:[[32,1613],256],65142:[[32,1614],256],65143:[[1600,1614],256],65144:[[32,1615],256],65145:[[1600,1615],256],65146:[[32,1616],256],65147:[[1600,1616],256],65148:[[32,1617],256],65149:[[1600,1617],256],65150:[[32,1618],256],65151:[[1600,1618],256],65152:[[1569],256],65153:[[1570],256],65154:[[1570],256],65155:[[1571],256],65156:[[1571],256],65157:[[1572],256],65158:[[1572],256],65159:[[1573],256],65160:[[1573],256],65161:[[1574],256],65162:[[1574],256],65163:[[1574],256],65164:[[1574],256],65165:[[1575],256],65166:[[1575],256],65167:[[1576],256],65168:[[1576],256],65169:[[1576],256],65170:[[1576],256],65171:[[1577],256],65172:[[1577],256],65173:[[1578],256],65174:[[1578],256],65175:[[1578],256],65176:[[1578],256],65177:[[1579],256],65178:[[1579],256],65179:[[1579],256],65180:[[1579],256],65181:[[1580],256],65182:[[1580],256],65183:[[1580],256],65184:[[1580],256],65185:[[1581],256],65186:[[1581],256],65187:[[1581],256],65188:[[1581],256],65189:[[1582],256],65190:[[1582],256],65191:[[1582],256],65192:[[1582],256],65193:[[1583],256],65194:[[1583],256],65195:[[1584],256],65196:[[1584],256],65197:[[1585],256],65198:[[1585],256],65199:[[1586],256],65200:[[1586],256],65201:[[1587],256],65202:[[1587],256],65203:[[1587],256],65204:[[1587],256],65205:[[1588],256],65206:[[1588],256],65207:[[1588],256],65208:[[1588],256],65209:[[1589],256],65210:[[1589],256],65211:[[1589],256],65212:[[1589],256],65213:[[1590],256],65214:[[1590],256],65215:[[1590],256],65216:[[1590],256],65217:[[1591],256],65218:[[1591],256],65219:[[1591],256],65220:[[1591],256],65221:[[1592],256],65222:[[1592],256],65223:[[1592],256],65224:[[1592],256],65225:[[1593],256],65226:[[1593],256],65227:[[1593],256],65228:[[1593],256],65229:[[1594],256],65230:[[1594],256],65231:[[1594],256],65232:[[1594],256],65233:[[1601],256],65234:[[1601],256],65235:[[1601],256],65236:[[1601],256],65237:[[1602],256],65238:[[1602],256],65239:[[1602],256],65240:[[1602],256],65241:[[1603],256],65242:[[1603],256],65243:[[1603],256],65244:[[1603],256],65245:[[1604],256],65246:[[1604],256],65247:[[1604],256],65248:[[1604],256],65249:[[1605],256],65250:[[1605],256],65251:[[1605],256],65252:[[1605],256],65253:[[1606],256],65254:[[1606],256],65255:[[1606],256],65256:[[1606],256],65257:[[1607],256],65258:[[1607],256],65259:[[1607],256],65260:[[1607],256],65261:[[1608],256],65262:[[1608],256],65263:[[1609],256],65264:[[1609],256],65265:[[1610],256],65266:[[1610],256],65267:[[1610],256],65268:[[1610],256],65269:[[1604,1570],256],65270:[[1604,1570],256],65271:[[1604,1571],256],65272:[[1604,1571],256],65273:[[1604,1573],256],65274:[[1604,1573],256],65275:[[1604,1575],256],65276:[[1604,1575],256]},
697365280:{65281:[[33],256],65282:[[34],256],65283:[[35],256],65284:[[36],256],65285:[[37],256],65286:[[38],256],65287:[[39],256],65288:[[40],256],65289:[[41],256],65290:[[42],256],65291:[[43],256],65292:[[44],256],65293:[[45],256],65294:[[46],256],65295:[[47],256],65296:[[48],256],65297:[[49],256],65298:[[50],256],65299:[[51],256],65300:[[52],256],65301:[[53],256],65302:[[54],256],65303:[[55],256],65304:[[56],256],65305:[[57],256],65306:[[58],256],65307:[[59],256],65308:[[60],256],65309:[[61],256],65310:[[62],256],65311:[[63],256],65312:[[64],256],65313:[[65],256],65314:[[66],256],65315:[[67],256],65316:[[68],256],65317:[[69],256],65318:[[70],256],65319:[[71],256],65320:[[72],256],65321:[[73],256],65322:[[74],256],65323:[[75],256],65324:[[76],256],65325:[[77],256],65326:[[78],256],65327:[[79],256],65328:[[80],256],65329:[[81],256],65330:[[82],256],65331:[[83],256],65332:[[84],256],65333:[[85],256],65334:[[86],256],65335:[[87],256],65336:[[88],256],65337:[[89],256],65338:[[90],256],65339:[[91],256],65340:[[92],256],65341:[[93],256],65342:[[94],256],65343:[[95],256],65344:[[96],256],65345:[[97],256],65346:[[98],256],65347:[[99],256],65348:[[100],256],65349:[[101],256],65350:[[102],256],65351:[[103],256],65352:[[104],256],65353:[[105],256],65354:[[106],256],65355:[[107],256],65356:[[108],256],65357:[[109],256],65358:[[110],256],65359:[[111],256],65360:[[112],256],65361:[[113],256],65362:[[114],256],65363:[[115],256],65364:[[116],256],65365:[[117],256],65366:[[118],256],65367:[[119],256],65368:[[120],256],65369:[[121],256],65370:[[122],256],65371:[[123],256],65372:[[124],256],65373:[[125],256],65374:[[126],256],65375:[[10629],256],65376:[[10630],256],65377:[[12290],256],65378:[[12300],256],65379:[[12301],256],65380:[[12289],256],65381:[[12539],256],65382:[[12530],256],65383:[[12449],256],65384:[[12451],256],65385:[[12453],256],65386:[[12455],256],65387:[[12457],256],65388:[[12515],256],65389:[[12517],256],65390:[[12519],256],65391:[[12483],256],65392:[[12540],256],65393:[[12450],256],65394:[[12452],256],65395:[[12454],256],65396:[[12456],256],65397:[[12458],256],65398:[[12459],256],65399:[[12461],256],65400:[[12463],256],65401:[[12465],256],65402:[[12467],256],65403:[[12469],256],65404:[[12471],256],65405:[[12473],256],65406:[[12475],256],65407:[[12477],256],65408:[[12479],256],65409:[[12481],256],65410:[[12484],256],65411:[[12486],256],65412:[[12488],256],65413:[[12490],256],65414:[[12491],256],65415:[[12492],256],65416:[[12493],256],65417:[[12494],256],65418:[[12495],256],65419:[[12498],256],65420:[[12501],256],65421:[[12504],256],65422:[[12507],256],65423:[[12510],256],65424:[[12511],256],65425:[[12512],256],65426:[[12513],256],65427:[[12514],256],65428:[[12516],256],65429:[[12518],256],65430:[[12520],256],65431:[[12521],256],65432:[[12522],256],65433:[[12523],256],65434:[[12524],256],65435:[[12525],256],65436:[[12527],256],65437:[[12531],256],65438:[[12441],256],65439:[[12442],256],65440:[[12644],256],65441:[[12593],256],65442:[[12594],256],65443:[[12595],256],65444:[[12596],256],65445:[[12597],256],65446:[[12598],256],65447:[[12599],256],65448:[[12600],256],65449:[[12601],256],65450:[[12602],256],65451:[[12603],256],65452:[[12604],256],65453:[[12605],256],65454:[[12606],256],65455:[[12607],256],65456:[[12608],256],65457:[[12609],256],65458:[[12610],256],65459:[[12611],256],65460:[[12612],256],65461:[[12613],256],65462:[[12614],256],65463:[[12615],256],65464:[[12616],256],65465:[[12617],256],65466:[[12618],256],65467:[[12619],256],65468:[[12620],256],65469:[[12621],256],65470:[[12622],256],65474:[[12623],256],65475:[[12624],256],65476:[[12625],256],65477:[[12626],256],65478:[[12627],256],65479:[[12628],256],65482:[[12629],256],65483:[[12630],256],65484:[[12631],256],65485:[[12632],256],65486:[[12633],256],65487:[[12634],256],65490:[[12635],256],65491:[[12636],256],65492:[[12637],256],65493:[[12638],256],65494:[[12639],256],65495:[[12640],256],65498:[[12641],256],65499:[[12642],256],65500:[[12643],256],65504:[[162],256],65505:[[163],256],65506:[[172],256],65507:[[175],256],65508:[[166],256],65509:[[165],256],65510:[[8361],256],65512:[[9474],256],65513:[[8592],256],65514:[[8593],256],65515:[[8594],256],65516:[[8595],256],65517:[[9632],256],65518:[[9675],256]}
6974
6975};
6976
6977 /***** Module to export */
6978 var unorm = {
6979 nfc: nfc,
6980 nfd: nfd,
6981 nfkc: nfkc,
6982 nfkd: nfkd
6983 };
6984
6985 /*globals module:true,define:true*/
6986
6987 // CommonJS
6988 if (typeof module === "object") {
6989 module.exports = unorm;
6990
6991 // AMD
6992 } else if (typeof define === "function" && define.amd) {
6993 define("unorm", function () {
6994 return unorm;
6995 });
6996
6997 // Global
6998 } else {
6999 root.unorm = unorm;
7000 }
7001
7002 /***** Export as shim for String::normalize method *****/
7003 /*
7004 http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts#november_8_2013_draft_rev_21
7005
7006 21.1.3.12 String.prototype.normalize(form="NFC")
7007 When the normalize method is called with one argument form, the following steps are taken:
7008
7009 1. Let O be CheckObjectCoercible(this value).
7010 2. Let S be ToString(O).
7011 3. ReturnIfAbrupt(S).
7012 4. If form is not provided or undefined let form be "NFC".
7013 5. Let f be ToString(form).
7014 6. ReturnIfAbrupt(f).
7015 7. If f is not one of "NFC", "NFD", "NFKC", or "NFKD", then throw a RangeError Exception.
7016 8. Let ns be the String value is the result of normalizing S into the normalization form named by f as specified in Unicode Standard Annex #15, UnicodeNormalizatoin Forms.
7017 9. Return ns.
7018
7019 The length property of the normalize method is 0.
7020
7021 *NOTE* The normalize function is intentionally generic; it does not require that its this value be a String object. Therefore it can be transferred to other kinds of objects for use as a method.
7022 */
7023 unorm.shimApplied = false;
7024
7025 if (!String.prototype.normalize) {
7026 String.prototype.normalize = function(form) {
7027 var str = "" + this;
7028 form = form === undefined ? "NFC" : form;
7029
7030 if (form === "NFC") {
7031 return unorm.nfc(str);
7032 } else if (form === "NFD") {
7033 return unorm.nfd(str);
7034 } else if (form === "NFKC") {
7035 return unorm.nfkc(str);
7036 } else if (form === "NFKD") {
7037 return unorm.nfkd(str);
7038 } else {
7039 throw new RangeError("Invalid normalization form: " + form);
7040 }
7041 };
7042
7043 unorm.shimApplied = true;
7044 }
7045}(this));
8b095871
IC
7046</script>
7047 <script>/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
7048!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)
7049},_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))
7050},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});
7051</script>
7052 <script>/*!
7053 * Bootstrap v3.2.0 (http://getbootstrap.com)
7054 * Copyright 2011-2014 Twitter, Inc.
7055 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
7056 */
7057if("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>
7058 <script>(function() {
7059 'use strict';
7060
7061 /**
7062 * Extend an Object with another Object's properties.
7063 *
7064 * The source objects are specified as additional arguments.
7065 *
7066 * @param dst Object the object to extend.
7067 *
7068 * @return Object the final object.
7069 */
7070 var _extend = function(dst) {
7071 var sources = Array.prototype.slice.call(arguments, 1);
7072 for (var i=0; i<sources.length; ++i) {
7073 var src = sources[i];
7074 for (var p in src) {
7075 if (src.hasOwnProperty(p)) dst[p] = src[p];
7076 }
7077 }
7078 return dst;
7079 };
7080
7081
7082 /**
7083 * Defer execution of given function.
7084 * @param {Function} func
7085 */
7086 var _defer = function(func) {
7087 if (typeof setImmediate === 'function') {
7088 return setImmediate(func);
7089 } else {
7090 return setTimeout(func, 0);
7091 }
7092 };
7093
7094 /**
7095 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
7096 */
7097 var Levenshtein = {
7098 /**
7099 * Calculate levenshtein distance of the two strings.
7100 *
7101 * @param str1 String the first string.
7102 * @param str2 String the second string.
7103 * @return Integer the levenshtein distance (0 and above).
7104 */
7105 get: function(str1, str2) {
7106 // base cases
7107 if (str1 === str2) return 0;
7108 if (str1.length === 0) return str2.length;
7109 if (str2.length === 0) return str1.length;
7110
7111 // two rows
7112 var prevRow = new Array(str2.length + 1),
7113 curCol, nextCol, i, j, tmp;
7114
7115 // initialise previous row
7116 for (i=0; i<prevRow.length; ++i) {
7117 prevRow[i] = i;
7118 }
7119
7120 // calculate current row distance from previous row
7121 for (i=0; i<str1.length; ++i) {
7122 nextCol = i + 1;
7123
7124 for (j=0; j<str2.length; ++j) {
7125 curCol = nextCol;
7126
7127 // substution
7128 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
7129 // insertion
7130 tmp = curCol + 1;
7131 if (nextCol > tmp) {
7132 nextCol = tmp;
7133 }
7134 // deletion
7135 tmp = prevRow[j + 1] + 1;
7136 if (nextCol > tmp) {
7137 nextCol = tmp;
7138 }
7139
7140 // copy current col value into previous (in preparation for next iteration)
7141 prevRow[j] = curCol;
7142 }
7143
7144 // copy last col value into previous (in preparation for next iteration)
7145 prevRow[j] = nextCol;
7146 }
7147
7148 return nextCol;
7149 },
7150
7151 /**
7152 * Asynchronously calculate levenshtein distance of the two strings.
7153 *
7154 * @param str1 String the first string.
7155 * @param str2 String the second string.
7156 * @param cb Function callback function with signature: function(Error err, int distance)
7157 * @param [options] Object additional options.
7158 * @param [options.progress] Function progress callback with signature: function(percentComplete)
7159 */
7160 getAsync: function(str1, str2, cb, options) {
7161 options = _extend({}, {
7162 progress: null
7163 }, options);
7164
7165 // base cases
7166 if (str1 === str2) return cb(null, 0);
7167 if (str1.length === 0) return cb(null, str2.length);
7168 if (str2.length === 0) return cb(null, str1.length);
7169
7170 // two rows
7171 var prevRow = new Array(str2.length + 1),
7172 curCol, nextCol,
7173 i, j, tmp,
7174 startTime, currentTime;
7175
7176 // initialise previous row
7177 for (i=0; i<prevRow.length; ++i) {
7178 prevRow[i] = i;
7179 }
7180
7181 nextCol = 1;
7182 i = 0;
7183 j = -1;
7184
7185 var __calculate = function() {
7186 // reset timer
7187 startTime = new Date().valueOf();
7188 currentTime = startTime;
7189
7190 // keep going until one second has elapsed
7191 while (currentTime - startTime < 1000) {
7192 // reached end of current row?
7193 if (str2.length <= (++j)) {
7194 // copy current into previous (in preparation for next iteration)
7195 prevRow[j] = nextCol;
7196
7197 // if already done all chars
7198 if (str1.length <= (++i)) {
7199 return cb(null, nextCol);
7200 }
7201 // else if we have more left to do
7202 else {
7203 nextCol = i + 1;
7204 j = 0;
7205 }
7206 }
7207
7208 // calculation
7209 curCol = nextCol;
7210
7211 // substution
7212 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
7213 // insertion
7214 tmp = curCol + 1;
7215 if (nextCol > tmp) {
7216 nextCol = tmp;
7217 }
7218 // deletion
7219 tmp = prevRow[j + 1] + 1;
7220 if (nextCol > tmp) {
7221 nextCol = tmp;
7222 }
7223
7224 // copy current into previous (in preparation for next iteration)
7225 prevRow[j] = curCol;
7226
7227 // get current time
7228 currentTime = new Date().valueOf();
7229 }
7230
7231 // send a progress update?
7232 if (null !== options.progress) {
7233 try {
7234 options.progress.call(null, (i * 100.0/ str1.length));
7235 } catch (err) {
7236 return cb('Progress callback: ' + err.toString());
7237 }
7238 }
7239
7240 // next iteration
7241 _defer(__calculate);
7242 };
7243
7244 __calculate();
7245 }
7246
7247 };
7248
7249 // amd
7250 if (typeof define !== "undefined" && define !== null && define.amd) {
7251 define(function() {
7252 return Levenshtein;
7253 });
7254 }
7255 // commonjs
7256 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
7257 module.exports = Levenshtein;
7258 }
7259 // web worker
7260 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
7261 self.Levenshtein = Levenshtein;
7262 }
7263 // browser main thread
7264 else if (typeof window !== "undefined" && window !== null) {
7265 window.Levenshtein = Levenshtein;
7266 }
7267}());
7268
7269</script>
7270 <script>(function(r){r.fn.qrcode=function(h){var s;function u(a){this.mode=s;this.data=a}function o(a,c){this.typeNumber=a;this.errorCorrectLevel=c;this.modules=null;this.moduleCount=0;this.dataCache=null;this.dataList=[]}function q(a,c){if(void 0==a.length)throw Error(a.length+"/"+c);for(var d=0;d<a.length&&0==a[d];)d++;this.num=Array(a.length-d+c);for(var b=0;b<a.length-d;b++)this.num[b]=a[b+d]}function p(a,c){this.totalCount=a;this.dataCount=c}function t(){this.buffer=[];this.length=0}u.prototype={getLength:function(){return this.data.length},
7271write:function(a){for(var c=0;c<this.data.length;c++)a.put(this.data.charCodeAt(c),8)}};o.prototype={addData:function(a){this.dataList.push(new u(a));this.dataCache=null},isDark:function(a,c){if(0>a||this.moduleCount<=a||0>c||this.moduleCount<=c)throw Error(a+","+c);return this.modules[a][c]},getModuleCount:function(){return this.moduleCount},make:function(){if(1>this.typeNumber){for(var a=1,a=1;40>a;a++){for(var c=p.getRSBlocks(a,this.errorCorrectLevel),d=new t,b=0,e=0;e<c.length;e++)b+=c[e].dataCount;
7272for(e=0;e<this.dataList.length;e++)c=this.dataList[e],d.put(c.mode,4),d.put(c.getLength(),j.getLengthInBits(c.mode,a)),c.write(d);if(d.getLengthInBits()<=8*b)break}this.typeNumber=a}this.makeImpl(!1,this.getBestMaskPattern())},makeImpl:function(a,c){this.moduleCount=4*this.typeNumber+17;this.modules=Array(this.moduleCount);for(var d=0;d<this.moduleCount;d++){this.modules[d]=Array(this.moduleCount);for(var b=0;b<this.moduleCount;b++)this.modules[d][b]=null}this.setupPositionProbePattern(0,0);this.setupPositionProbePattern(this.moduleCount-
72737,0);this.setupPositionProbePattern(0,this.moduleCount-7);this.setupPositionAdjustPattern();this.setupTimingPattern();this.setupTypeInfo(a,c);7<=this.typeNumber&&this.setupTypeNumber(a);null==this.dataCache&&(this.dataCache=o.createData(this.typeNumber,this.errorCorrectLevel,this.dataList));this.mapData(this.dataCache,c)},setupPositionProbePattern:function(a,c){for(var d=-1;7>=d;d++)if(!(-1>=a+d||this.moduleCount<=a+d))for(var b=-1;7>=b;b++)-1>=c+b||this.moduleCount<=c+b||(this.modules[a+d][c+b]=
72740<=d&&6>=d&&(0==b||6==b)||0<=b&&6>=b&&(0==d||6==d)||2<=d&&4>=d&&2<=b&&4>=b?!0:!1)},getBestMaskPattern:function(){for(var a=0,c=0,d=0;8>d;d++){this.makeImpl(!0,d);var b=j.getLostPoint(this);if(0==d||a>b)a=b,c=d}return c},createMovieClip:function(a,c,d){a=a.createEmptyMovieClip(c,d);this.make();for(c=0;c<this.modules.length;c++)for(var d=1*c,b=0;b<this.modules[c].length;b++){var e=1*b;this.modules[c][b]&&(a.beginFill(0,100),a.moveTo(e,d),a.lineTo(e+1,d),a.lineTo(e+1,d+1),a.lineTo(e,d+1),a.endFill())}return a},
7275setupTimingPattern:function(){for(var a=8;a<this.moduleCount-8;a++)null==this.modules[a][6]&&(this.modules[a][6]=0==a%2);for(a=8;a<this.moduleCount-8;a++)null==this.modules[6][a]&&(this.modules[6][a]=0==a%2)},setupPositionAdjustPattern:function(){for(var a=j.getPatternPosition(this.typeNumber),c=0;c<a.length;c++)for(var d=0;d<a.length;d++){var b=a[c],e=a[d];if(null==this.modules[b][e])for(var f=-2;2>=f;f++)for(var i=-2;2>=i;i++)this.modules[b+f][e+i]=-2==f||2==f||-2==i||2==i||0==f&&0==i?!0:!1}},setupTypeNumber:function(a){for(var c=
7276j.getBCHTypeNumber(this.typeNumber),d=0;18>d;d++){var b=!a&&1==(c>>d&1);this.modules[Math.floor(d/3)][d%3+this.moduleCount-8-3]=b}for(d=0;18>d;d++)b=!a&&1==(c>>d&1),this.modules[d%3+this.moduleCount-8-3][Math.floor(d/3)]=b},setupTypeInfo:function(a,c){for(var d=j.getBCHTypeInfo(this.errorCorrectLevel<<3|c),b=0;15>b;b++){var e=!a&&1==(d>>b&1);6>b?this.modules[b][8]=e:8>b?this.modules[b+1][8]=e:this.modules[this.moduleCount-15+b][8]=e}for(b=0;15>b;b++)e=!a&&1==(d>>b&1),8>b?this.modules[8][this.moduleCount-
7277b-1]=e:9>b?this.modules[8][15-b-1+1]=e:this.modules[8][15-b-1]=e;this.modules[this.moduleCount-8][8]=!a},mapData:function(a,c){for(var d=-1,b=this.moduleCount-1,e=7,f=0,i=this.moduleCount-1;0<i;i-=2)for(6==i&&i--;;){for(var g=0;2>g;g++)if(null==this.modules[b][i-g]){var n=!1;f<a.length&&(n=1==(a[f]>>>e&1));j.getMask(c,b,i-g)&&(n=!n);this.modules[b][i-g]=n;e--; -1==e&&(f++,e=7)}b+=d;if(0>b||this.moduleCount<=b){b-=d;d=-d;break}}}};o.PAD0=236;o.PAD1=17;o.createData=function(a,c,d){for(var c=p.getRSBlocks(a,
7278c),b=new t,e=0;e<d.length;e++){var f=d[e];b.put(f.mode,4);b.put(f.getLength(),j.getLengthInBits(f.mode,a));f.write(b)}for(e=a=0;e<c.length;e++)a+=c[e].dataCount;if(b.getLengthInBits()>8*a)throw Error("code length overflow. ("+b.getLengthInBits()+">"+8*a+")");for(b.getLengthInBits()+4<=8*a&&b.put(0,4);0!=b.getLengthInBits()%8;)b.putBit(!1);for(;!(b.getLengthInBits()>=8*a);){b.put(o.PAD0,8);if(b.getLengthInBits()>=8*a)break;b.put(o.PAD1,8)}return o.createBytes(b,c)};o.createBytes=function(a,c){for(var d=
72790,b=0,e=0,f=Array(c.length),i=Array(c.length),g=0;g<c.length;g++){var n=c[g].dataCount,h=c[g].totalCount-n,b=Math.max(b,n),e=Math.max(e,h);f[g]=Array(n);for(var k=0;k<f[g].length;k++)f[g][k]=255&a.buffer[k+d];d+=n;k=j.getErrorCorrectPolynomial(h);n=(new q(f[g],k.getLength()-1)).mod(k);i[g]=Array(k.getLength()-1);for(k=0;k<i[g].length;k++)h=k+n.getLength()-i[g].length,i[g][k]=0<=h?n.get(h):0}for(k=g=0;k<c.length;k++)g+=c[k].totalCount;d=Array(g);for(k=n=0;k<b;k++)for(g=0;g<c.length;g++)k<f[g].length&&
7280(d[n++]=f[g][k]);for(k=0;k<e;k++)for(g=0;g<c.length;g++)k<i[g].length&&(d[n++]=i[g][k]);return d};s=4;for(var j={PATTERN_POSITION_TABLE:[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,
728178,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],G15:1335,G18:7973,G15_MASK:21522,getBCHTypeInfo:function(a){for(var c=a<<10;0<=j.getBCHDigit(c)-j.getBCHDigit(j.G15);)c^=j.G15<<j.getBCHDigit(c)-j.getBCHDigit(j.G15);return(a<<10|c)^j.G15_MASK},getBCHTypeNumber:function(a){for(var c=a<<12;0<=j.getBCHDigit(c)-
7282j.getBCHDigit(j.G18);)c^=j.G18<<j.getBCHDigit(c)-j.getBCHDigit(j.G18);return a<<12|c},getBCHDigit:function(a){for(var c=0;0!=a;)c++,a>>>=1;return c},getPatternPosition:function(a){return j.PATTERN_POSITION_TABLE[a-1]},getMask:function(a,c,d){switch(a){case 0:return 0==(c+d)%2;case 1:return 0==c%2;case 2:return 0==d%3;case 3:return 0==(c+d)%3;case 4:return 0==(Math.floor(c/2)+Math.floor(d/3))%2;case 5:return 0==c*d%2+c*d%3;case 6:return 0==(c*d%2+c*d%3)%2;case 7:return 0==(c*d%3+(c+d)%2)%2;default:throw Error("bad maskPattern:"+
7283a);}},getErrorCorrectPolynomial:function(a){for(var c=new q([1],0),d=0;d<a;d++)c=c.multiply(new q([1,l.gexp(d)],0));return c},getLengthInBits:function(a,c){if(1<=c&&10>c)switch(a){case 1:return 10;case 2:return 9;case s:return 8;case 8:return 8;default:throw Error("mode:"+a);}else if(27>c)switch(a){case 1:return 12;case 2:return 11;case s:return 16;case 8:return 10;default:throw Error("mode:"+a);}else if(41>c)switch(a){case 1:return 14;case 2:return 13;case s:return 16;case 8:return 12;default:throw Error("mode:"+
7284a);}else throw Error("type:"+c);},getLostPoint:function(a){for(var c=a.getModuleCount(),d=0,b=0;b<c;b++)for(var e=0;e<c;e++){for(var f=0,i=a.isDark(b,e),g=-1;1>=g;g++)if(!(0>b+g||c<=b+g))for(var h=-1;1>=h;h++)0>e+h||c<=e+h||0==g&&0==h||i==a.isDark(b+g,e+h)&&f++;5<f&&(d+=3+f-5)}for(b=0;b<c-1;b++)for(e=0;e<c-1;e++)if(f=0,a.isDark(b,e)&&f++,a.isDark(b+1,e)&&f++,a.isDark(b,e+1)&&f++,a.isDark(b+1,e+1)&&f++,0==f||4==f)d+=3;for(b=0;b<c;b++)for(e=0;e<c-6;e++)a.isDark(b,e)&&!a.isDark(b,e+1)&&a.isDark(b,e+
72852)&&a.isDark(b,e+3)&&a.isDark(b,e+4)&&!a.isDark(b,e+5)&&a.isDark(b,e+6)&&(d+=40);for(e=0;e<c;e++)for(b=0;b<c-6;b++)a.isDark(b,e)&&!a.isDark(b+1,e)&&a.isDark(b+2,e)&&a.isDark(b+3,e)&&a.isDark(b+4,e)&&!a.isDark(b+5,e)&&a.isDark(b+6,e)&&(d+=40);for(e=f=0;e<c;e++)for(b=0;b<c;b++)a.isDark(b,e)&&f++;a=Math.abs(100*f/c/c-50)/5;return d+10*a}},l={glog:function(a){if(1>a)throw Error("glog("+a+")");return l.LOG_TABLE[a]},gexp:function(a){for(;0>a;)a+=255;for(;256<=a;)a-=255;return l.EXP_TABLE[a]},EXP_TABLE:Array(256),
7286LOG_TABLE:Array(256)},m=0;8>m;m++)l.EXP_TABLE[m]=1<<m;for(m=8;256>m;m++)l.EXP_TABLE[m]=l.EXP_TABLE[m-4]^l.EXP_TABLE[m-5]^l.EXP_TABLE[m-6]^l.EXP_TABLE[m-8];for(m=0;255>m;m++)l.LOG_TABLE[l.EXP_TABLE[m]]=m;q.prototype={get:function(a){return this.num[a]},getLength:function(){return this.num.length},multiply:function(a){for(var c=Array(this.getLength()+a.getLength()-1),d=0;d<this.getLength();d++)for(var b=0;b<a.getLength();b++)c[d+b]^=l.gexp(l.glog(this.get(d))+l.glog(a.get(b)));return new q(c,0)},mod:function(a){if(0>
7287this.getLength()-a.getLength())return this;for(var c=l.glog(this.get(0))-l.glog(a.get(0)),d=Array(this.getLength()),b=0;b<this.getLength();b++)d[b]=this.get(b);for(b=0;b<a.getLength();b++)d[b]^=l.gexp(l.glog(a.get(b))+c);return(new q(d,0)).mod(a)}};p.RS_BLOCK_TABLE=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],
7288[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,
7289116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,
729043,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,
72913,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,
729255,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,
729345,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]];p.getRSBlocks=function(a,c){var d=p.getRsBlockTable(a,c);if(void 0==d)throw Error("bad rs block @ typeNumber:"+a+"/errorCorrectLevel:"+c);for(var b=d.length/3,e=[],f=0;f<b;f++)for(var h=d[3*f+0],g=d[3*f+1],j=d[3*f+2],l=0;l<h;l++)e.push(new p(g,j));return e};p.getRsBlockTable=function(a,c){switch(c){case 1:return p.RS_BLOCK_TABLE[4*(a-1)+0];case 0:return p.RS_BLOCK_TABLE[4*(a-1)+1];case 3:return p.RS_BLOCK_TABLE[4*
7294(a-1)+2];case 2:return p.RS_BLOCK_TABLE[4*(a-1)+3]}};t.prototype={get:function(a){return 1==(this.buffer[Math.floor(a/8)]>>>7-a%8&1)},put:function(a,c){for(var d=0;d<c;d++)this.putBit(1==(a>>>c-d-1&1))},getLengthInBits:function(){return this.length},putBit:function(a){var c=Math.floor(this.length/8);this.buffer.length<=c&&this.buffer.push(0);a&&(this.buffer[c]|=128>>>this.length%8);this.length++}};"string"===typeof h&&(h={text:h});h=r.extend({},{render:"canvas",width:256,height:256,typeNumber:-1,
861750ae 7295correctLevel:3,background:"#ffffff",foreground:"#000000"},h);return this.each(function(){var a;if("canvas"==h.render){a=new o(h.typeNumber,h.correctLevel);a.addData(h.text);a.make();var c=document.createElement("canvas");c.width=h.width;c.height=h.height;for(var d=c.getContext("2d"),b=h.width/a.getModuleCount(),e=h.height/a.getModuleCount(),f=0;f<a.getModuleCount();f++)for(var i=0;i<a.getModuleCount();i++){d.fillStyle=a.isDark(f,i)?h.foreground:h.background;var g=Math.ceil((i+1)*b)-Math.floor(i*b),
8b095871
IC
7296j=Math.ceil((f+1)*b)-Math.floor(f*b);d.fillRect(Math.round(i*b),Math.round(f*e),g,j)}}else{a=new o(h.typeNumber,h.correctLevel);a.addData(h.text);a.make();c=r("<table></table>").css("width",h.width+"px").css("height",h.height+"px").css("border","0px").css("border-collapse","collapse").css("background-color",h.background);d=h.width/a.getModuleCount();b=h.height/a.getModuleCount();for(e=0;e<a.getModuleCount();e++){f=r("<tr></tr>").css("height",b+"px").appendTo(c);for(i=0;i<a.getModuleCount();i++)r("<td></td>").css("width",
7297d+"px").css("background-color",a.isDark(e,i)?h.foreground:h.background).appendTo(f)}}a=c;$(a).appendTo(this)})}})($);
7298</script>
9987f0c1
IC
7299 <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.bitcoinjs = 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){
7300(function (global){
7301'use strict';
8b095871 7302
9987f0c1
IC
7303// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
7304// original notice:
8b095871 7305
9987f0c1
IC
7306/*!
7307 * The buffer module from node.js, for the browser.
7308 *
7309 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
7310 * @license MIT
7311 */
7312function compare(a, b) {
7313 if (a === b) {
7314 return 0;
7315 }
8b095871 7316
9987f0c1
IC
7317 var x = a.length;
7318 var y = b.length;
8b095871 7319
9987f0c1
IC
7320 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
7321 if (a[i] !== b[i]) {
7322 x = a[i];
7323 y = b[i];
7324 break;
7325 }
7326 }
8b095871 7327
9987f0c1
IC
7328 if (x < y) {
7329 return -1;
8b095871 7330 }
9987f0c1
IC
7331 if (y < x) {
7332 return 1;
8b095871 7333 }
9987f0c1 7334 return 0;
8b095871 7335}
9987f0c1
IC
7336function isBuffer(b) {
7337 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
7338 return global.Buffer.isBuffer(b);
8b095871 7339 }
9987f0c1 7340 return !!(b != null && b._isBuffer);
8b095871
IC
7341}
7342
9987f0c1 7343// based on node assert, original notice:
8b095871 7344
9987f0c1
IC
7345// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
7346//
7347// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
7348//
7349// Originally from narwhal.js (http://narwhaljs.org)
7350// Copyright (c) 2009 Thomas Robinson <280north.com>
7351//
7352// Permission is hereby granted, free of charge, to any person obtaining a copy
7353// of this software and associated documentation files (the 'Software'), to
7354// deal in the Software without restriction, including without limitation the
7355// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7356// sell copies of the Software, and to permit persons to whom the Software is
7357// furnished to do so, subject to the following conditions:
7358//
7359// The above copyright notice and this permission notice shall be included in
7360// all copies or substantial portions of the Software.
7361//
7362// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
7363// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
7364// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
7365// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
7366// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
7367// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
8b095871 7368
9987f0c1
IC
7369var util = require('util/');
7370var hasOwn = Object.prototype.hasOwnProperty;
7371var pSlice = Array.prototype.slice;
7372var functionsHaveNames = (function () {
7373 return function foo() {}.name === 'foo';
7374}());
7375function pToString (obj) {
7376 return Object.prototype.toString.call(obj);
8b095871 7377}
9987f0c1
IC
7378function isView(arrbuf) {
7379 if (isBuffer(arrbuf)) {
7380 return false;
7381 }
7382 if (typeof global.ArrayBuffer !== 'function') {
7383 return false;
7384 }
7385 if (typeof ArrayBuffer.isView === 'function') {
7386 return ArrayBuffer.isView(arrbuf);
7387 }
7388 if (!arrbuf) {
7389 return false;
7390 }
7391 if (arrbuf instanceof DataView) {
7392 return true;
7393 }
7394 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
7395 return true;
7396 }
7397 return false;
8b095871 7398}
9987f0c1
IC
7399// 1. The assert module provides functions that throw
7400// AssertionError's when particular conditions are not met. The
7401// assert module must conform to the following interface.
8b095871 7402
9987f0c1 7403var assert = module.exports = ok;
8b095871 7404
9987f0c1
IC
7405// 2. The AssertionError is defined in assert.
7406// new assert.AssertionError({ message: message,
7407// actual: actual,
7408// expected: expected })
8b095871 7409
9987f0c1
IC
7410var regex = /\s*function\s+([^\(\s]*)\s*/;
7411// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
7412function getName(func) {
7413 if (!util.isFunction(func)) {
7414 return;
7415 }
7416 if (functionsHaveNames) {
7417 return func.name;
7418 }
7419 var str = func.toString();
7420 var match = str.match(regex);
7421 return match && match[1];
8b095871 7422}
9987f0c1
IC
7423assert.AssertionError = function AssertionError(options) {
7424 this.name = 'AssertionError';
7425 this.actual = options.actual;
7426 this.expected = options.expected;
7427 this.operator = options.operator;
7428 if (options.message) {
7429 this.message = options.message;
7430 this.generatedMessage = false;
7431 } else {
7432 this.message = getMessage(this);
7433 this.generatedMessage = true;
7434 }
7435 var stackStartFunction = options.stackStartFunction || fail;
7436 if (Error.captureStackTrace) {
7437 Error.captureStackTrace(this, stackStartFunction);
7438 } else {
7439 // non v8 browsers so we can have a stacktrace
7440 var err = new Error();
7441 if (err.stack) {
7442 var out = err.stack;
8b095871 7443
9987f0c1
IC
7444 // try to strip useless frames
7445 var fn_name = getName(stackStartFunction);
7446 var idx = out.indexOf('\n' + fn_name);
7447 if (idx >= 0) {
7448 // once we have located the function frame
7449 // we need to strip out everything before it (and its line)
7450 var next_line = out.indexOf('\n', idx + 1);
7451 out = out.substring(next_line + 1);
7452 }
8b095871 7453
9987f0c1 7454 this.stack = out;
8b095871 7455 }
8b095871 7456 }
9987f0c1 7457};
8b095871 7458
9987f0c1
IC
7459// assert.AssertionError instanceof Error
7460util.inherits(assert.AssertionError, Error);
8b095871 7461
9987f0c1
IC
7462function truncate(s, n) {
7463 if (typeof s === 'string') {
7464 return s.length < n ? s : s.slice(0, n);
7465 } else {
7466 return s;
8b095871 7467 }
8b095871 7468}
9987f0c1
IC
7469function inspect(something) {
7470 if (functionsHaveNames || !util.isFunction(something)) {
7471 return util.inspect(something);
7472 }
7473 var rawname = getName(something);
7474 var name = rawname ? ': ' + rawname : '';
7475 return '[Function' + name + ']';
8b095871 7476}
9987f0c1
IC
7477function getMessage(self) {
7478 return truncate(inspect(self.actual), 128) + ' ' +
7479 self.operator + ' ' +
7480 truncate(inspect(self.expected), 128);
8b095871
IC
7481}
7482
9987f0c1
IC
7483// At present only the three keys mentioned above are used and
7484// understood by the spec. Implementations or sub modules can pass
7485// other keys to the AssertionError's constructor - they will be
7486// ignored.
3af2954a 7487
9987f0c1
IC
7488// 3. All of the following functions must throw an AssertionError
7489// when a corresponding condition is not met, with a message that
7490// may be undefined if not provided. All assertion methods provide
7491// both the actual and expected values to the assertion error for
7492// display purposes.
8b095871 7493
9987f0c1
IC
7494function fail(actual, expected, message, operator, stackStartFunction) {
7495 throw new assert.AssertionError({
7496 message: message,
7497 actual: actual,
7498 expected: expected,
7499 operator: operator,
7500 stackStartFunction: stackStartFunction
7501 });
8b095871
IC
7502}
7503
9987f0c1
IC
7504// EXTENSION! allows for well behaved errors defined elsewhere.
7505assert.fail = fail;
8b095871 7506
9987f0c1
IC
7507// 4. Pure assertion tests whether a value is truthy, as determined
7508// by !!guard.
7509// assert.ok(guard, message_opt);
7510// This statement is equivalent to assert.equal(true, !!guard,
7511// message_opt);. To test strictly for the value true, use
7512// assert.strictEqual(true, guard, message_opt);.
8b095871 7513
9987f0c1
IC
7514function ok(value, message) {
7515 if (!value) fail(value, true, message, '==', assert.ok);
8b095871 7516}
9987f0c1 7517assert.ok = ok;
8b095871 7518
9987f0c1
IC
7519// 5. The equality assertion tests shallow, coercive equality with
7520// ==.
7521// assert.equal(actual, expected, message_opt);
7522
7523assert.equal = function equal(actual, expected, message) {
7524 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
7525};
7526
7527// 6. The non-equality assertion tests for whether two objects are not equal
7528// with != assert.notEqual(actual, expected, message_opt);
7529
7530assert.notEqual = function notEqual(actual, expected, message) {
7531 if (actual == expected) {
7532 fail(actual, expected, message, '!=', assert.notEqual);
8b095871 7533 }
9987f0c1 7534};
8b095871 7535
9987f0c1
IC
7536// 7. The equivalence assertion tests a deep equality relation.
7537// assert.deepEqual(actual, expected, message_opt);
7538
7539assert.deepEqual = function deepEqual(actual, expected, message) {
7540 if (!_deepEqual(actual, expected, false)) {
7541 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
8b095871 7542 }
9987f0c1
IC
7543};
7544
7545assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
7546 if (!_deepEqual(actual, expected, true)) {
7547 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
7548 }
7549};
7550
7551function _deepEqual(actual, expected, strict, memos) {
7552 // 7.1. All identical values are equivalent, as determined by ===.
7553 if (actual === expected) {
7554 return true;
7555 } else if (isBuffer(actual) && isBuffer(expected)) {
7556 return compare(actual, expected) === 0;
7557
7558 // 7.2. If the expected value is a Date object, the actual value is
7559 // equivalent if it is also a Date object that refers to the same time.
7560 } else if (util.isDate(actual) && util.isDate(expected)) {
7561 return actual.getTime() === expected.getTime();
7562
7563 // 7.3 If the expected value is a RegExp object, the actual value is
7564 // equivalent if it is also a RegExp object with the same source and
7565 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
7566 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
7567 return actual.source === expected.source &&
7568 actual.global === expected.global &&
7569 actual.multiline === expected.multiline &&
7570 actual.lastIndex === expected.lastIndex &&
7571 actual.ignoreCase === expected.ignoreCase;
7572
7573 // 7.4. Other pairs that do not both pass typeof value == 'object',
7574 // equivalence is determined by ==.
7575 } else if ((actual === null || typeof actual !== 'object') &&
7576 (expected === null || typeof expected !== 'object')) {
7577 return strict ? actual === expected : actual == expected;
7578
7579 // If both values are instances of typed arrays, wrap their underlying
7580 // ArrayBuffers in a Buffer each to increase performance
7581 // This optimization requires the arrays to have the same type as checked by
7582 // Object.prototype.toString (aka pToString). Never perform binary
7583 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
7584 // bit patterns are not identical.
7585 } else if (isView(actual) && isView(expected) &&
7586 pToString(actual) === pToString(expected) &&
7587 !(actual instanceof Float32Array ||
7588 actual instanceof Float64Array)) {
7589 return compare(new Uint8Array(actual.buffer),
7590 new Uint8Array(expected.buffer)) === 0;
7591
7592 // 7.5 For all other Object pairs, including Array objects, equivalence is
7593 // determined by having the same number of owned properties (as verified
7594 // with Object.prototype.hasOwnProperty.call), the same set of keys
7595 // (although not necessarily the same order), equivalent values for every
7596 // corresponding key, and an identical 'prototype' property. Note: this
7597 // accounts for both named and indexed properties on Arrays.
7598 } else if (isBuffer(actual) !== isBuffer(expected)) {
7599 return false;
7600 } else {
7601 memos = memos || {actual: [], expected: []};
7602
7603 var actualIndex = memos.actual.indexOf(actual);
7604 if (actualIndex !== -1) {
7605 if (actualIndex === memos.expected.indexOf(expected)) {
7606 return true;
7607 }
7608 }
7609
7610 memos.actual.push(actual);
7611 memos.expected.push(expected);
7612
7613 return objEquiv(actual, expected, strict, memos);
7614 }
7615}
7616
7617function isArguments(object) {
7618 return Object.prototype.toString.call(object) == '[object Arguments]';
7619}
7620
7621function objEquiv(a, b, strict, actualVisitedObjects) {
7622 if (a === null || a === undefined || b === null || b === undefined)
7623 return false;
7624 // if one is a primitive, the other must be same
7625 if (util.isPrimitive(a) || util.isPrimitive(b))
7626 return a === b;
7627 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
7628 return false;
7629 var aIsArgs = isArguments(a);
7630 var bIsArgs = isArguments(b);
7631 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
7632 return false;
7633 if (aIsArgs) {
7634 a = pSlice.call(a);
7635 b = pSlice.call(b);
7636 return _deepEqual(a, b, strict);
7637 }
7638 var ka = objectKeys(a);
7639 var kb = objectKeys(b);
7640 var key, i;
7641 // having the same number of owned properties (keys incorporates
7642 // hasOwnProperty)
7643 if (ka.length !== kb.length)
7644 return false;
7645 //the same set of keys (although not necessarily the same order),
7646 ka.sort();
7647 kb.sort();
7648 //~~~cheap key test
7649 for (i = ka.length - 1; i >= 0; i--) {
7650 if (ka[i] !== kb[i])
7651 return false;
7652 }
7653 //equivalent values for every corresponding key, and
7654 //~~~possibly expensive deep test
7655 for (i = ka.length - 1; i >= 0; i--) {
7656 key = ka[i];
7657 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
7658 return false;
7659 }
7660 return true;
7661}
7662
7663// 8. The non-equivalence assertion tests for any deep inequality.
7664// assert.notDeepEqual(actual, expected, message_opt);
7665
7666assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
7667 if (_deepEqual(actual, expected, false)) {
7668 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
7669 }
7670};
7671
7672assert.notDeepStrictEqual = notDeepStrictEqual;
7673function notDeepStrictEqual(actual, expected, message) {
7674 if (_deepEqual(actual, expected, true)) {
7675 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
7676 }
7677}
7678
7679
7680// 9. The strict equality assertion tests strict equality, as determined by ===.
7681// assert.strictEqual(actual, expected, message_opt);
7682
7683assert.strictEqual = function strictEqual(actual, expected, message) {
7684 if (actual !== expected) {
7685 fail(actual, expected, message, '===', assert.strictEqual);
7686 }
7687};
7688
7689// 10. The strict non-equality assertion tests for strict inequality, as
7690// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
7691
7692assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
7693 if (actual === expected) {
7694 fail(actual, expected, message, '!==', assert.notStrictEqual);
7695 }
7696};
7697
7698function expectedException(actual, expected) {
7699 if (!actual || !expected) {
7700 return false;
7701 }
7702
7703 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
7704 return expected.test(actual);
7705 }
7706
7707 try {
7708 if (actual instanceof expected) {
7709 return true;
7710 }
7711 } catch (e) {
7712 // Ignore. The instanceof check doesn't work for arrow functions.
7713 }
7714
7715 if (Error.isPrototypeOf(expected)) {
7716 return false;
7717 }
7718
7719 return expected.call({}, actual) === true;
7720}
7721
7722function _tryBlock(block) {
7723 var error;
7724 try {
7725 block();
7726 } catch (e) {
7727 error = e;
7728 }
7729 return error;
7730}
7731
7732function _throws(shouldThrow, block, expected, message) {
7733 var actual;
7734
7735 if (typeof block !== 'function') {
7736 throw new TypeError('"block" argument must be a function');
7737 }
7738
7739 if (typeof expected === 'string') {
7740 message = expected;
7741 expected = null;
7742 }
7743
7744 actual = _tryBlock(block);
7745
7746 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
7747 (message ? ' ' + message : '.');
7748
7749 if (shouldThrow && !actual) {
7750 fail(actual, expected, 'Missing expected exception' + message);
7751 }
7752
7753 var userProvidedMessage = typeof message === 'string';
7754 var isUnwantedException = !shouldThrow && util.isError(actual);
7755 var isUnexpectedException = !shouldThrow && actual && !expected;
7756
7757 if ((isUnwantedException &&
7758 userProvidedMessage &&
7759 expectedException(actual, expected)) ||
7760 isUnexpectedException) {
7761 fail(actual, expected, 'Got unwanted exception' + message);
7762 }
7763
7764 if ((shouldThrow && actual && expected &&
7765 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
7766 throw actual;
7767 }
7768}
7769
7770// 11. Expected to throw an error:
7771// assert.throws(block, Error_opt, message_opt);
7772
7773assert.throws = function(block, /*optional*/error, /*optional*/message) {
7774 _throws(true, block, error, message);
7775};
7776
7777// EXTENSION! This is annoying to write outside this module.
7778assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
7779 _throws(false, block, error, message);
7780};
7781
7782assert.ifError = function(err) { if (err) throw err; };
7783
7784var objectKeys = Object.keys || function (obj) {
7785 var keys = [];
7786 for (var key in obj) {
7787 if (hasOwn.call(obj, key)) keys.push(key);
7788 }
7789 return keys;
7790};
7791
7792}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
7793},{"util/":32}],2:[function(require,module,exports){
7794'use strict'
7795
7796exports.byteLength = byteLength
7797exports.toByteArray = toByteArray
7798exports.fromByteArray = fromByteArray
7799
7800var lookup = []
7801var revLookup = []
7802var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
7803
7804var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
7805for (var i = 0, len = code.length; i < len; ++i) {
7806 lookup[i] = code[i]
7807 revLookup[code.charCodeAt(i)] = i
7808}
7809
7810revLookup['-'.charCodeAt(0)] = 62
7811revLookup['_'.charCodeAt(0)] = 63
7812
7813function placeHoldersCount (b64) {
7814 var len = b64.length
7815 if (len % 4 > 0) {
7816 throw new Error('Invalid string. Length must be a multiple of 4')
7817 }
7818
7819 // the number of equal signs (place holders)
7820 // if there are two placeholders, than the two characters before it
7821 // represent one byte
7822 // if there is only one, then the three characters before it represent 2 bytes
7823 // this is just a cheap hack to not do indexOf twice
7824 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
7825}
7826
7827function byteLength (b64) {
7828 // base64 is 4/3 + up to two characters of the original data
7829 return (b64.length * 3 / 4) - placeHoldersCount(b64)
7830}
7831
7832function toByteArray (b64) {
7833 var i, l, tmp, placeHolders, arr
7834 var len = b64.length
7835 placeHolders = placeHoldersCount(b64)
7836
7837 arr = new Arr((len * 3 / 4) - placeHolders)
7838
7839 // if there are placeholders, only get up to the last complete 4 chars
7840 l = placeHolders > 0 ? len - 4 : len
7841
7842 var L = 0
7843
7844 for (i = 0; i < l; i += 4) {
7845 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
7846 arr[L++] = (tmp >> 16) & 0xFF
7847 arr[L++] = (tmp >> 8) & 0xFF
7848 arr[L++] = tmp & 0xFF
7849 }
7850
7851 if (placeHolders === 2) {
7852 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
7853 arr[L++] = tmp & 0xFF
7854 } else if (placeHolders === 1) {
7855 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
7856 arr[L++] = (tmp >> 8) & 0xFF
7857 arr[L++] = tmp & 0xFF
7858 }
7859
7860 return arr
7861}
7862
7863function tripletToBase64 (num) {
7864 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
7865}
7866
7867function encodeChunk (uint8, start, end) {
7868 var tmp
7869 var output = []
7870 for (var i = start; i < end; i += 3) {
7871 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
7872 output.push(tripletToBase64(tmp))
7873 }
7874 return output.join('')
7875}
7876
7877function fromByteArray (uint8) {
7878 var tmp
7879 var len = uint8.length
7880 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
7881 var output = ''
7882 var parts = []
7883 var maxChunkLength = 16383 // must be multiple of 3
7884
7885 // go through the array every three bytes, we'll deal with trailing stuff later
7886 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
7887 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
7888 }
7889
7890 // pad the end with zeros, but make sure to not forget the extra bytes
7891 if (extraBytes === 1) {
7892 tmp = uint8[len - 1]
7893 output += lookup[tmp >> 2]
7894 output += lookup[(tmp << 4) & 0x3F]
7895 output += '=='
7896 } else if (extraBytes === 2) {
7897 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
7898 output += lookup[tmp >> 10]
7899 output += lookup[(tmp >> 4) & 0x3F]
7900 output += lookup[(tmp << 2) & 0x3F]
7901 output += '='
7902 }
7903
7904 parts.push(output)
7905
7906 return parts.join('')
7907}
7908
7909},{}],3:[function(require,module,exports){
7910
7911},{}],4:[function(require,module,exports){
7912/*!
7913 * The buffer module from node.js, for the browser.
7914 *
7915 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
7916 * @license MIT
7917 */
7918/* eslint-disable no-proto */
7919
7920'use strict'
7921
7922var base64 = require('base64-js')
7923var ieee754 = require('ieee754')
7924
7925exports.Buffer = Buffer
7926exports.SlowBuffer = SlowBuffer
7927exports.INSPECT_MAX_BYTES = 50
7928
7929var K_MAX_LENGTH = 0x7fffffff
7930exports.kMaxLength = K_MAX_LENGTH
7931
7932/**
7933 * If `Buffer.TYPED_ARRAY_SUPPORT`:
7934 * === true Use Uint8Array implementation (fastest)
7935 * === false Print warning and recommend using `buffer` v4.x which has an Object
7936 * implementation (most compatible, even IE6)
7937 *
7938 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
7939 * Opera 11.6+, iOS 4.2+.
7940 *
7941 * We report that the browser does not support typed arrays if the are not subclassable
7942 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
7943 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
7944 * for __proto__ and has a buggy typed array implementation.
7945 */
7946Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
7947
7948if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
7949 typeof console.error === 'function') {
7950 console.error(
7951 'This browser lacks typed array (Uint8Array) support which is required by ' +
7952 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
7953 )
7954}
7955
7956function typedArraySupport () {
7957 // Can typed array instances can be augmented?
7958 try {
7959 var arr = new Uint8Array(1)
7960 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
7961 return arr.foo() === 42
7962 } catch (e) {
7963 return false
7964 }
7965}
7966
7967function createBuffer (length) {
7968 if (length > K_MAX_LENGTH) {
7969 throw new RangeError('Invalid typed array length')
7970 }
7971 // Return an augmented `Uint8Array` instance
7972 var buf = new Uint8Array(length)
7973 buf.__proto__ = Buffer.prototype
7974 return buf
7975}
7976
7977/**
7978 * The Buffer constructor returns instances of `Uint8Array` that have their
7979 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
7980 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
7981 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
7982 * returns a single octet.
7983 *
7984 * The `Uint8Array` prototype remains unmodified.
7985 */
7986
7987function Buffer (arg, encodingOrOffset, length) {
7988 // Common case.
7989 if (typeof arg === 'number') {
7990 if (typeof encodingOrOffset === 'string') {
7991 throw new Error(
7992 'If encoding is specified then the first argument must be a string'
7993 )
7994 }
7995 return allocUnsafe(arg)
7996 }
7997 return from(arg, encodingOrOffset, length)
7998}
7999
8000// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
8001if (typeof Symbol !== 'undefined' && Symbol.species &&
8002 Buffer[Symbol.species] === Buffer) {
8003 Object.defineProperty(Buffer, Symbol.species, {
8004 value: null,
8005 configurable: true,
8006 enumerable: false,
8007 writable: false
8008 })
8009}
8010
8011Buffer.poolSize = 8192 // not used by this implementation
8012
8013function from (value, encodingOrOffset, length) {
8014 if (typeof value === 'number') {
8015 throw new TypeError('"value" argument must not be a number')
8016 }
8017
8018 if (value instanceof ArrayBuffer) {
8019 return fromArrayBuffer(value, encodingOrOffset, length)
8020 }
8021
8022 if (typeof value === 'string') {
8023 return fromString(value, encodingOrOffset)
8024 }
8025
8026 return fromObject(value)
8027}
8028
8029/**
8030 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
8031 * if value is a number.
8032 * Buffer.from(str[, encoding])
8033 * Buffer.from(array)
8034 * Buffer.from(buffer)
8035 * Buffer.from(arrayBuffer[, byteOffset[, length]])
8036 **/
8037Buffer.from = function (value, encodingOrOffset, length) {
8038 return from(value, encodingOrOffset, length)
8039}
8040
8041// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
8042// https://github.com/feross/buffer/pull/148
8043Buffer.prototype.__proto__ = Uint8Array.prototype
8044Buffer.__proto__ = Uint8Array
8045
8046function assertSize (size) {
8047 if (typeof size !== 'number') {
8048 throw new TypeError('"size" argument must be a number')
8049 } else if (size < 0) {
8050 throw new RangeError('"size" argument must not be negative')
8051 }
8052}
8053
8054function alloc (size, fill, encoding) {
8055 assertSize(size)
8056 if (size <= 0) {
8057 return createBuffer(size)
8058 }
8059 if (fill !== undefined) {
8060 // Only pay attention to encoding if it's a string. This
8061 // prevents accidentally sending in a number that would
8062 // be interpretted as a start offset.
8063 return typeof encoding === 'string'
8064 ? createBuffer(size).fill(fill, encoding)
8065 : createBuffer(size).fill(fill)
8066 }
8067 return createBuffer(size)
8068}
8069
8070/**
8071 * Creates a new filled Buffer instance.
8072 * alloc(size[, fill[, encoding]])
8073 **/
8074Buffer.alloc = function (size, fill, encoding) {
8075 return alloc(size, fill, encoding)
8076}
8077
8078function allocUnsafe (size) {
8079 assertSize(size)
8080 return createBuffer(size < 0 ? 0 : checked(size) | 0)
8081}
8082
8083/**
8084 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
8085 * */
8086Buffer.allocUnsafe = function (size) {
8087 return allocUnsafe(size)
8088}
8089/**
8090 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
8091 */
8092Buffer.allocUnsafeSlow = function (size) {
8093 return allocUnsafe(size)
8094}
8095
8096function fromString (string, encoding) {
8097 if (typeof encoding !== 'string' || encoding === '') {
8098 encoding = 'utf8'
8099 }
8100
8101 if (!Buffer.isEncoding(encoding)) {
8102 throw new TypeError('"encoding" must be a valid string encoding')
8103 }
8104
8105 var length = byteLength(string, encoding) | 0
8106 var buf = createBuffer(length)
8107
8108 var actual = buf.write(string, encoding)
8109
8110 if (actual !== length) {
8111 // Writing a hex string, for example, that contains invalid characters will
8112 // cause everything after the first invalid character to be ignored. (e.g.
8113 // 'abxxcd' will be treated as 'ab')
8114 buf = buf.slice(0, actual)
8115 }
8116
8117 return buf
8118}
8119
8120function fromArrayLike (array) {
8121 var length = array.length < 0 ? 0 : checked(array.length) | 0
8122 var buf = createBuffer(length)
8123 for (var i = 0; i < length; i += 1) {
8124 buf[i] = array[i] & 255
8125 }
8126 return buf
8127}
8128
8129function fromArrayBuffer (array, byteOffset, length) {
8130 if (byteOffset < 0 || array.byteLength < byteOffset) {
8131 throw new RangeError('\'offset\' is out of bounds')
8132 }
8133
8134 if (array.byteLength < byteOffset + (length || 0)) {
8135 throw new RangeError('\'length\' is out of bounds')
8136 }
8137
8138 var buf
8139 if (byteOffset === undefined && length === undefined) {
8140 buf = new Uint8Array(array)
8141 } else if (length === undefined) {
8142 buf = new Uint8Array(array, byteOffset)
8143 } else {
8144 buf = new Uint8Array(array, byteOffset, length)
8145 }
8146
8147 // Return an augmented `Uint8Array` instance
8148 buf.__proto__ = Buffer.prototype
8149 return buf
8150}
8151
8152function fromObject (obj) {
8153 if (Buffer.isBuffer(obj)) {
8154 var len = checked(obj.length) | 0
8155 var buf = createBuffer(len)
8156
8157 if (buf.length === 0) {
8158 return buf
8159 }
8160
8161 obj.copy(buf, 0, 0, len)
8162 return buf
8163 }
8164
8165 if (obj) {
8166 if (isArrayBufferView(obj) || 'length' in obj) {
8167 if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
8168 return createBuffer(0)
8169 }
8170 return fromArrayLike(obj)
8171 }
8172
8173 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
8174 return fromArrayLike(obj.data)
8175 }
8176 }
8177
8178 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
8179}
8180
8181function checked (length) {
8182 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
8183 // length is NaN (which is otherwise coerced to zero.)
8184 if (length >= K_MAX_LENGTH) {
8185 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
8186 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
8187 }
8188 return length | 0
8189}
8190
8191function SlowBuffer (length) {
8192 if (+length != length) { // eslint-disable-line eqeqeq
8193 length = 0
8194 }
8195 return Buffer.alloc(+length)
8196}
8197
8198Buffer.isBuffer = function isBuffer (b) {
8199 return b != null && b._isBuffer === true
8200}
8201
8202Buffer.compare = function compare (a, b) {
8203 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
8204 throw new TypeError('Arguments must be Buffers')
8205 }
8206
8207 if (a === b) return 0
8208
8209 var x = a.length
8210 var y = b.length
8211
8212 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
8213 if (a[i] !== b[i]) {
8214 x = a[i]
8215 y = b[i]
8216 break
8217 }
8b095871 8218 }
9987f0c1
IC
8219
8220 if (x < y) return -1
8221 if (y < x) return 1
8222 return 0
8b095871
IC
8223}
8224
9987f0c1
IC
8225Buffer.isEncoding = function isEncoding (encoding) {
8226 switch (String(encoding).toLowerCase()) {
8227 case 'hex':
8228 case 'utf8':
8229 case 'utf-8':
8230 case 'ascii':
8231 case 'latin1':
8232 case 'binary':
8233 case 'base64':
8234 case 'ucs2':
8235 case 'ucs-2':
8236 case 'utf16le':
8237 case 'utf-16le':
8238 return true
8239 default:
8240 return false
8b095871 8241 }
9987f0c1
IC
8242}
8243
8244Buffer.concat = function concat (list, length) {
8245 if (!Array.isArray(list)) {
8246 throw new TypeError('"list" argument must be an Array of Buffers')
8247 }
8248
8249 if (list.length === 0) {
8250 return Buffer.alloc(0)
8251 }
8252
8253 var i
8254 if (length === undefined) {
8255 length = 0
8256 for (i = 0; i < list.length; ++i) {
8257 length += list[i].length
8b095871 8258 }
9987f0c1
IC
8259 }
8260
8261 var buffer = Buffer.allocUnsafe(length)
8262 var pos = 0
8263 for (i = 0; i < list.length; ++i) {
8264 var buf = list[i]
8265 if (!Buffer.isBuffer(buf)) {
8266 throw new TypeError('"list" argument must be an Array of Buffers')
8b095871 8267 }
9987f0c1
IC
8268 buf.copy(buffer, pos)
8269 pos += buf.length
8b095871 8270 }
9987f0c1 8271 return buffer
8b095871
IC
8272}
8273
9987f0c1
IC
8274function byteLength (string, encoding) {
8275 if (Buffer.isBuffer(string)) {
8276 return string.length
8277 }
8278 if (isArrayBufferView(string) || string instanceof ArrayBuffer) {
8279 return string.byteLength
8280 }
8281 if (typeof string !== 'string') {
8282 string = '' + string
8283 }
8284
8285 var len = string.length
8286 if (len === 0) return 0
8287
8288 // Use a for loop to avoid recursion
8289 var loweredCase = false
8290 for (;;) {
8291 switch (encoding) {
8292 case 'ascii':
8293 case 'latin1':
8294 case 'binary':
8295 return len
8296 case 'utf8':
8297 case 'utf-8':
8298 case undefined:
8299 return utf8ToBytes(string).length
8300 case 'ucs2':
8301 case 'ucs-2':
8302 case 'utf16le':
8303 case 'utf-16le':
8304 return len * 2
8305 case 'hex':
8306 return len >>> 1
8307 case 'base64':
8308 return base64ToBytes(string).length
8309 default:
8310 if (loweredCase) return utf8ToBytes(string).length // assume utf8
8311 encoding = ('' + encoding).toLowerCase()
8312 loweredCase = true
8313 }
8314 }
8b095871 8315}
9987f0c1 8316Buffer.byteLength = byteLength
8b095871 8317
9987f0c1
IC
8318function slowToString (encoding, start, end) {
8319 var loweredCase = false
8320
8321 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
8322 // property of a typed array.
8323
8324 // This behaves neither like String nor Uint8Array in that we set start/end
8325 // to their upper/lower bounds if the value passed is out of range.
8326 // undefined is handled specially as per ECMA-262 6th Edition,
8327 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
8328 if (start === undefined || start < 0) {
8329 start = 0
8330 }
8331 // Return early if start > this.length. Done here to prevent potential uint32
8332 // coercion fail below.
8333 if (start > this.length) {
8334 return ''
8335 }
8336
8337 if (end === undefined || end > this.length) {
8338 end = this.length
8339 }
8340
8341 if (end <= 0) {
8342 return ''
8343 }
8344
8345 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
8346 end >>>= 0
8347 start >>>= 0
8348
8349 if (end <= start) {
8350 return ''
8351 }
8352
8353 if (!encoding) encoding = 'utf8'
8354
8355 while (true) {
8356 switch (encoding) {
8357 case 'hex':
8358 return hexSlice(this, start, end)
8359
8360 case 'utf8':
8361 case 'utf-8':
8362 return utf8Slice(this, start, end)
8363
8364 case 'ascii':
8365 return asciiSlice(this, start, end)
8366
8367 case 'latin1':
8368 case 'binary':
8369 return latin1Slice(this, start, end)
8370
8371 case 'base64':
8372 return base64Slice(this, start, end)
8373
8374 case 'ucs2':
8375 case 'ucs-2':
8376 case 'utf16le':
8377 case 'utf-16le':
8378 return utf16leSlice(this, start, end)
8379
8380 default:
8381 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
8382 encoding = (encoding + '').toLowerCase()
8383 loweredCase = true
8b095871
IC
8384 }
8385 }
8b095871
IC
8386}
8387
9987f0c1
IC
8388// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
8389// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
8390// reliably in a browserify context because there could be multiple different
8391// copies of the 'buffer' package in use. This method works even for Buffer
8392// instances that were created from another copy of the `buffer` package.
8393// See: https://github.com/feross/buffer/issues/154
8394Buffer.prototype._isBuffer = true
8395
8396function swap (b, n, m) {
8397 var i = b[n]
8398 b[n] = b[m]
8399 b[m] = i
8400}
8401
8402Buffer.prototype.swap16 = function swap16 () {
8403 var len = this.length
8404 if (len % 2 !== 0) {
8405 throw new RangeError('Buffer size must be a multiple of 16-bits')
8b095871 8406 }
9987f0c1
IC
8407 for (var i = 0; i < len; i += 2) {
8408 swap(this, i, i + 1)
8b095871 8409 }
9987f0c1
IC
8410 return this
8411}
8412
8413Buffer.prototype.swap32 = function swap32 () {
8414 var len = this.length
8415 if (len % 4 !== 0) {
8416 throw new RangeError('Buffer size must be a multiple of 32-bits')
8b095871 8417 }
9987f0c1
IC
8418 for (var i = 0; i < len; i += 4) {
8419 swap(this, i, i + 3)
8420 swap(this, i + 1, i + 2)
8421 }
8422 return this
8423}
8424
8425Buffer.prototype.swap64 = function swap64 () {
8426 var len = this.length
8427 if (len % 8 !== 0) {
8428 throw new RangeError('Buffer size must be a multiple of 64-bits')
8429 }
8430 for (var i = 0; i < len; i += 8) {
8431 swap(this, i, i + 7)
8432 swap(this, i + 1, i + 6)
8433 swap(this, i + 2, i + 5)
8434 swap(this, i + 3, i + 4)
8435 }
8436 return this
8437}
8438
8439Buffer.prototype.toString = function toString () {
8440 var length = this.length
8441 if (length === 0) return ''
8442 if (arguments.length === 0) return utf8Slice(this, 0, length)
8443 return slowToString.apply(this, arguments)
8444}
8445
8446Buffer.prototype.equals = function equals (b) {
8447 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
8448 if (this === b) return true
8449 return Buffer.compare(this, b) === 0
8450}
8451
8452Buffer.prototype.inspect = function inspect () {
8453 var str = ''
8454 var max = exports.INSPECT_MAX_BYTES
8455 if (this.length > 0) {
8456 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
8457 if (this.length > max) str += ' ... '
8458 }
8459 return '<Buffer ' + str + '>'
8460}
8461
8462Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
8463 if (!Buffer.isBuffer(target)) {
8464 throw new TypeError('Argument must be a Buffer')
8465 }
8466
8467 if (start === undefined) {
8468 start = 0
8469 }
8470 if (end === undefined) {
8471 end = target ? target.length : 0
8472 }
8473 if (thisStart === undefined) {
8474 thisStart = 0
8475 }
8476 if (thisEnd === undefined) {
8477 thisEnd = this.length
8478 }
8479
8480 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
8481 throw new RangeError('out of range index')
8482 }
8483
8484 if (thisStart >= thisEnd && start >= end) {
8485 return 0
8486 }
8487 if (thisStart >= thisEnd) {
8488 return -1
8489 }
8490 if (start >= end) {
8491 return 1
8492 }
8493
8494 start >>>= 0
8495 end >>>= 0
8496 thisStart >>>= 0
8497 thisEnd >>>= 0
8498
8499 if (this === target) return 0
8500
8501 var x = thisEnd - thisStart
8502 var y = end - start
8503 var len = Math.min(x, y)
8504
8505 var thisCopy = this.slice(thisStart, thisEnd)
8506 var targetCopy = target.slice(start, end)
8507
8508 for (var i = 0; i < len; ++i) {
8509 if (thisCopy[i] !== targetCopy[i]) {
8510 x = thisCopy[i]
8511 y = targetCopy[i]
8512 break
8513 }
8514 }
8515
8516 if (x < y) return -1
8517 if (y < x) return 1
8518 return 0
8519}
8520
8521// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
8522// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
8523//
8524// Arguments:
8525// - buffer - a Buffer to search
8526// - val - a string, Buffer, or number
8527// - byteOffset - an index into `buffer`; will be clamped to an int32
8528// - encoding - an optional encoding, relevant is val is a string
8529// - dir - true for indexOf, false for lastIndexOf
8530function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
8531 // Empty buffer means no match
8532 if (buffer.length === 0) return -1
8533
8534 // Normalize byteOffset
8535 if (typeof byteOffset === 'string') {
8536 encoding = byteOffset
8537 byteOffset = 0
8538 } else if (byteOffset > 0x7fffffff) {
8539 byteOffset = 0x7fffffff
8540 } else if (byteOffset < -0x80000000) {
8541 byteOffset = -0x80000000
8542 }
8543 byteOffset = +byteOffset // Coerce to Number.
8544 if (numberIsNaN(byteOffset)) {
8545 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
8546 byteOffset = dir ? 0 : (buffer.length - 1)
8547 }
8548
8549 // Normalize byteOffset: negative offsets start from the end of the buffer
8550 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
8551 if (byteOffset >= buffer.length) {
8552 if (dir) return -1
8553 else byteOffset = buffer.length - 1
8554 } else if (byteOffset < 0) {
8555 if (dir) byteOffset = 0
8556 else return -1
8557 }
8558
8559 // Normalize val
8560 if (typeof val === 'string') {
8561 val = Buffer.from(val, encoding)
8562 }
8563
8564 // Finally, search either indexOf (if dir is true) or lastIndexOf
8565 if (Buffer.isBuffer(val)) {
8566 // Special case: looking for empty string/buffer always fails
8567 if (val.length === 0) {
8568 return -1
8569 }
8570 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
8571 } else if (typeof val === 'number') {
8572 val = val & 0xFF // Search for a byte value [0-255]
8573 if (typeof Uint8Array.prototype.indexOf === 'function') {
8574 if (dir) {
8575 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
8576 } else {
8577 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
8578 }
8579 }
8580 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
8581 }
8582
8583 throw new TypeError('val must be string, number or Buffer')
8584}
8585
8586function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
8587 var indexSize = 1
8588 var arrLength = arr.length
8589 var valLength = val.length
8590
8591 if (encoding !== undefined) {
8592 encoding = String(encoding).toLowerCase()
8593 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
8594 encoding === 'utf16le' || encoding === 'utf-16le') {
8595 if (arr.length < 2 || val.length < 2) {
8596 return -1
8597 }
8598 indexSize = 2
8599 arrLength /= 2
8600 valLength /= 2
8601 byteOffset /= 2
8602 }
8603 }
8604
8605 function read (buf, i) {
8606 if (indexSize === 1) {
8607 return buf[i]
8608 } else {
8609 return buf.readUInt16BE(i * indexSize)
8610 }
8611 }
8612
8613 var i
8614 if (dir) {
8615 var foundIndex = -1
8616 for (i = byteOffset; i < arrLength; i++) {
8617 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
8618 if (foundIndex === -1) foundIndex = i
8619 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
8620 } else {
8621 if (foundIndex !== -1) i -= i - foundIndex
8622 foundIndex = -1
8623 }
8624 }
8625 } else {
8626 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
8627 for (i = byteOffset; i >= 0; i--) {
8628 var found = true
8629 for (var j = 0; j < valLength; j++) {
8630 if (read(arr, i + j) !== read(val, j)) {
8631 found = false
8632 break
8633 }
8634 }
8635 if (found) return i
8b095871
IC
8636 }
8637 }
8b095871 8638
9987f0c1 8639 return -1
8b095871
IC
8640}
8641
9987f0c1
IC
8642Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
8643 return this.indexOf(val, byteOffset, encoding) !== -1
8b095871
IC
8644}
8645
9987f0c1
IC
8646Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
8647 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
8b095871
IC
8648}
8649
9987f0c1
IC
8650Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
8651 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
8b095871
IC
8652}
8653
9987f0c1
IC
8654function hexWrite (buf, string, offset, length) {
8655 offset = Number(offset) || 0
8656 var remaining = buf.length - offset
8657 if (!length) {
8658 length = remaining
8659 } else {
8660 length = Number(length)
8661 if (length > remaining) {
8662 length = remaining
8663 }
8664 }
8b095871 8665
9987f0c1
IC
8666 // must be an even number of digits
8667 var strLen = string.length
8668 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
8b095871 8669
9987f0c1
IC
8670 if (length > strLen / 2) {
8671 length = strLen / 2
8672 }
8673 for (var i = 0; i < length; ++i) {
8674 var parsed = parseInt(string.substr(i * 2, 2), 16)
8675 if (numberIsNaN(parsed)) return i
8676 buf[offset + i] = parsed
8677 }
8678 return i
8b095871
IC
8679}
8680
9987f0c1
IC
8681function utf8Write (buf, string, offset, length) {
8682 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
8683}
8b095871 8684
9987f0c1
IC
8685function asciiWrite (buf, string, offset, length) {
8686 return blitBuffer(asciiToBytes(string), buf, offset, length)
8b095871
IC
8687}
8688
9987f0c1
IC
8689function latin1Write (buf, string, offset, length) {
8690 return asciiWrite(buf, string, offset, length)
8b095871
IC
8691}
8692
9987f0c1
IC
8693function base64Write (buf, string, offset, length) {
8694 return blitBuffer(base64ToBytes(string), buf, offset, length)
8b095871
IC
8695}
8696
9987f0c1
IC
8697function ucs2Write (buf, string, offset, length) {
8698 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
8b095871
IC
8699}
8700
9987f0c1
IC
8701Buffer.prototype.write = function write (string, offset, length, encoding) {
8702 // Buffer#write(string)
8703 if (offset === undefined) {
8704 encoding = 'utf8'
8705 length = this.length
8706 offset = 0
8707 // Buffer#write(string, encoding)
8708 } else if (length === undefined && typeof offset === 'string') {
8709 encoding = offset
8710 length = this.length
8711 offset = 0
8712 // Buffer#write(string, offset[, length][, encoding])
8713 } else if (isFinite(offset)) {
8714 offset = offset >>> 0
8715 if (isFinite(length)) {
8716 length = length >>> 0
8717 if (encoding === undefined) encoding = 'utf8'
8718 } else {
8719 encoding = length
8720 length = undefined
8b095871 8721 }
9987f0c1
IC
8722 } else {
8723 throw new Error(
8724 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
8725 )
8b095871 8726 }
8b095871 8727
9987f0c1
IC
8728 var remaining = this.length - offset
8729 if (length === undefined || length > remaining) length = remaining
8b095871 8730
9987f0c1
IC
8731 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
8732 throw new RangeError('Attempt to write outside buffer bounds')
8733 }
8b095871 8734
9987f0c1 8735 if (!encoding) encoding = 'utf8'
8b095871 8736
9987f0c1
IC
8737 var loweredCase = false
8738 for (;;) {
8739 switch (encoding) {
8740 case 'hex':
8741 return hexWrite(this, string, offset, length)
8b095871 8742
9987f0c1
IC
8743 case 'utf8':
8744 case 'utf-8':
8745 return utf8Write(this, string, offset, length)
8b095871 8746
9987f0c1
IC
8747 case 'ascii':
8748 return asciiWrite(this, string, offset, length)
8b095871 8749
9987f0c1
IC
8750 case 'latin1':
8751 case 'binary':
8752 return latin1Write(this, string, offset, length)
8b095871 8753
9987f0c1
IC
8754 case 'base64':
8755 // Warning: maxLength not taken into account in base64Write
8756 return base64Write(this, string, offset, length)
8b095871 8757
9987f0c1
IC
8758 case 'ucs2':
8759 case 'ucs-2':
8760 case 'utf16le':
8761 case 'utf-16le':
8762 return ucs2Write(this, string, offset, length)
8b095871 8763
9987f0c1
IC
8764 default:
8765 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
8766 encoding = ('' + encoding).toLowerCase()
8767 loweredCase = true
8768 }
8769 }
8b095871
IC
8770}
8771
9987f0c1
IC
8772Buffer.prototype.toJSON = function toJSON () {
8773 return {
8774 type: 'Buffer',
8775 data: Array.prototype.slice.call(this._arr || this, 0)
8776 }
8b095871
IC
8777}
8778
9987f0c1
IC
8779function base64Slice (buf, start, end) {
8780 if (start === 0 && end === buf.length) {
8781 return base64.fromByteArray(buf)
8782 } else {
8783 return base64.fromByteArray(buf.slice(start, end))
8784 }
8b095871
IC
8785}
8786
9987f0c1
IC
8787function utf8Slice (buf, start, end) {
8788 end = Math.min(buf.length, end)
8789 var res = []
8b095871 8790
9987f0c1
IC
8791 var i = start
8792 while (i < end) {
8793 var firstByte = buf[i]
8794 var codePoint = null
8795 var bytesPerSequence = (firstByte > 0xEF) ? 4
8796 : (firstByte > 0xDF) ? 3
8797 : (firstByte > 0xBF) ? 2
8798 : 1
8b095871 8799
9987f0c1
IC
8800 if (i + bytesPerSequence <= end) {
8801 var secondByte, thirdByte, fourthByte, tempCodePoint
8b095871 8802
9987f0c1
IC
8803 switch (bytesPerSequence) {
8804 case 1:
8805 if (firstByte < 0x80) {
8806 codePoint = firstByte
8807 }
8808 break
8809 case 2:
8810 secondByte = buf[i + 1]
8811 if ((secondByte & 0xC0) === 0x80) {
8812 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
8813 if (tempCodePoint > 0x7F) {
8814 codePoint = tempCodePoint
8815 }
8816 }
8817 break
8818 case 3:
8819 secondByte = buf[i + 1]
8820 thirdByte = buf[i + 2]
8821 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
8822 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
8823 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
8824 codePoint = tempCodePoint
8825 }
8826 }
8827 break
8828 case 4:
8829 secondByte = buf[i + 1]
8830 thirdByte = buf[i + 2]
8831 fourthByte = buf[i + 3]
8832 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
8833 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
8834 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
8835 codePoint = tempCodePoint
8836 }
8837 }
8838 }
8b095871 8839 }
9987f0c1
IC
8840
8841 if (codePoint === null) {
8842 // we did not generate a valid codePoint so insert a
8843 // replacement char (U+FFFD) and advance only 1 byte
8844 codePoint = 0xFFFD
8845 bytesPerSequence = 1
8846 } else if (codePoint > 0xFFFF) {
8847 // encode to utf16 (surrogate pair dance)
8848 codePoint -= 0x10000
8849 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
8850 codePoint = 0xDC00 | codePoint & 0x3FF
8b095871 8851 }
9987f0c1
IC
8852
8853 res.push(codePoint)
8854 i += bytesPerSequence
8b095871 8855 }
9987f0c1
IC
8856
8857 return decodeCodePointsArray(res)
8858}
8859
8860// Based on http://stackoverflow.com/a/22747272/680742, the browser with
8861// the lowest limit is Chrome, with 0x10000 args.
8862// We go 1 magnitude less, for safety
8863var MAX_ARGUMENTS_LENGTH = 0x1000
8864
8865function decodeCodePointsArray (codePoints) {
8866 var len = codePoints.length
8867 if (len <= MAX_ARGUMENTS_LENGTH) {
8868 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
8b095871 8869 }
9987f0c1
IC
8870
8871 // Decode in chunks to avoid "call stack size exceeded".
8872 var res = ''
8873 var i = 0
8874 while (i < len) {
8875 res += String.fromCharCode.apply(
8876 String,
8877 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
8878 )
8879 }
8880 return res
8b095871
IC
8881}
8882
9987f0c1
IC
8883function asciiSlice (buf, start, end) {
8884 var ret = ''
8885 end = Math.min(buf.length, end)
8886
8887 for (var i = start; i < end; ++i) {
8888 ret += String.fromCharCode(buf[i] & 0x7F)
8b095871 8889 }
9987f0c1 8890 return ret
8b095871
IC
8891}
8892
9987f0c1
IC
8893function latin1Slice (buf, start, end) {
8894 var ret = ''
8895 end = Math.min(buf.length, end)
8896
8897 for (var i = start; i < end; ++i) {
8898 ret += String.fromCharCode(buf[i])
8b095871 8899 }
9987f0c1 8900 return ret
8b095871
IC
8901}
8902
9987f0c1
IC
8903function hexSlice (buf, start, end) {
8904 var len = buf.length
8b095871 8905
9987f0c1
IC
8906 if (!start || start < 0) start = 0
8907 if (!end || end < 0 || end > len) end = len
8b095871 8908
9987f0c1
IC
8909 var out = ''
8910 for (var i = start; i < end; ++i) {
8911 out += toHex(buf[i])
8912 }
8913 return out
8b095871
IC
8914}
8915
9987f0c1
IC
8916function utf16leSlice (buf, start, end) {
8917 var bytes = buf.slice(start, end)
8918 var res = ''
8919 for (var i = 0; i < bytes.length; i += 2) {
8920 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
8b095871 8921 }
9987f0c1 8922 return res
8b095871
IC
8923}
8924
9987f0c1
IC
8925Buffer.prototype.slice = function slice (start, end) {
8926 var len = this.length
8927 start = ~~start
8928 end = end === undefined ? len : ~~end
8b095871 8929
9987f0c1
IC
8930 if (start < 0) {
8931 start += len
8932 if (start < 0) start = 0
8933 } else if (start > len) {
8934 start = len
8935 }
8b095871 8936
9987f0c1
IC
8937 if (end < 0) {
8938 end += len
8939 if (end < 0) end = 0
8940 } else if (end > len) {
8941 end = len
8942 }
8943
8944 if (end < start) end = start
8945
8946 var newBuf = this.subarray(start, end)
8947 // Return an augmented `Uint8Array` instance
8948 newBuf.__proto__ = Buffer.prototype
8949 return newBuf
8b095871
IC
8950}
8951
9987f0c1
IC
8952/*
8953 * Need to make sure that buffer isn't trying to write out of bounds.
8954 */
8955function checkOffset (offset, ext, length) {
8956 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
8957 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
8b095871
IC
8958}
8959
9987f0c1
IC
8960Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
8961 offset = offset >>> 0
8962 byteLength = byteLength >>> 0
8963 if (!noAssert) checkOffset(offset, byteLength, this.length)
8964
8965 var val = this[offset]
8966 var mul = 1
8967 var i = 0
8968 while (++i < byteLength && (mul *= 0x100)) {
8969 val += this[offset + i] * mul
8970 }
8971
8972 return val
8b095871
IC
8973}
8974
9987f0c1
IC
8975Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
8976 offset = offset >>> 0
8977 byteLength = byteLength >>> 0
8978 if (!noAssert) {
8979 checkOffset(offset, byteLength, this.length)
8980 }
8981
8982 var val = this[offset + --byteLength]
8983 var mul = 1
8984 while (byteLength > 0 && (mul *= 0x100)) {
8985 val += this[offset + --byteLength] * mul
8986 }
8987
8988 return val
8b095871
IC
8989}
8990
9987f0c1
IC
8991Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
8992 offset = offset >>> 0
8993 if (!noAssert) checkOffset(offset, 1, this.length)
8994 return this[offset]
8b095871
IC
8995}
8996
9987f0c1
IC
8997Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
8998 offset = offset >>> 0
8999 if (!noAssert) checkOffset(offset, 2, this.length)
9000 return this[offset] | (this[offset + 1] << 8)
8b095871
IC
9001}
9002
9987f0c1
IC
9003Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
9004 offset = offset >>> 0
9005 if (!noAssert) checkOffset(offset, 2, this.length)
9006 return (this[offset] << 8) | this[offset + 1]
8b095871
IC
9007}
9008
9987f0c1
IC
9009Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
9010 offset = offset >>> 0
9011 if (!noAssert) checkOffset(offset, 4, this.length)
9012
9013 return ((this[offset]) |
9014 (this[offset + 1] << 8) |
9015 (this[offset + 2] << 16)) +
9016 (this[offset + 3] * 0x1000000)
8b095871
IC
9017}
9018
9987f0c1
IC
9019Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
9020 offset = offset >>> 0
9021 if (!noAssert) checkOffset(offset, 4, this.length)
9022
9023 return (this[offset] * 0x1000000) +
9024 ((this[offset + 1] << 16) |
9025 (this[offset + 2] << 8) |
9026 this[offset + 3])
8b095871
IC
9027}
9028
9987f0c1
IC
9029Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
9030 offset = offset >>> 0
9031 byteLength = byteLength >>> 0
9032 if (!noAssert) checkOffset(offset, byteLength, this.length)
9033
9034 var val = this[offset]
9035 var mul = 1
9036 var i = 0
9037 while (++i < byteLength && (mul *= 0x100)) {
9038 val += this[offset + i] * mul
8b095871 9039 }
9987f0c1
IC
9040 mul *= 0x80
9041
9042 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
9043
9044 return val
9045}
9046
9047Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
9048 offset = offset >>> 0
9049 byteLength = byteLength >>> 0
9050 if (!noAssert) checkOffset(offset, byteLength, this.length)
9051
9052 var i = byteLength
9053 var mul = 1
9054 var val = this[offset + --i]
9055 while (i > 0 && (mul *= 0x100)) {
9056 val += this[offset + --i] * mul
8b095871 9057 }
9987f0c1
IC
9058 mul *= 0x80
9059
9060 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
9061
9062 return val
8b095871
IC
9063}
9064
9987f0c1
IC
9065Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
9066 offset = offset >>> 0
9067 if (!noAssert) checkOffset(offset, 1, this.length)
9068 if (!(this[offset] & 0x80)) return (this[offset])
9069 return ((0xff - this[offset] + 1) * -1)
8b095871
IC
9070}
9071
9987f0c1
IC
9072Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
9073 offset = offset >>> 0
9074 if (!noAssert) checkOffset(offset, 2, this.length)
9075 var val = this[offset] | (this[offset + 1] << 8)
9076 return (val & 0x8000) ? val | 0xFFFF0000 : val
8b095871
IC
9077}
9078
9987f0c1
IC
9079Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
9080 offset = offset >>> 0
9081 if (!noAssert) checkOffset(offset, 2, this.length)
9082 var val = this[offset + 1] | (this[offset] << 8)
9083 return (val & 0x8000) ? val | 0xFFFF0000 : val
8b095871
IC
9084}
9085
9987f0c1
IC
9086Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
9087 offset = offset >>> 0
9088 if (!noAssert) checkOffset(offset, 4, this.length)
9089
9090 return (this[offset]) |
9091 (this[offset + 1] << 8) |
9092 (this[offset + 2] << 16) |
9093 (this[offset + 3] << 24)
8b095871
IC
9094}
9095
9987f0c1
IC
9096Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
9097 offset = offset >>> 0
9098 if (!noAssert) checkOffset(offset, 4, this.length)
9099
9100 return (this[offset] << 24) |
9101 (this[offset + 1] << 16) |
9102 (this[offset + 2] << 8) |
9103 (this[offset + 3])
8b095871
IC
9104}
9105
9987f0c1
IC
9106Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
9107 offset = offset >>> 0
9108 if (!noAssert) checkOffset(offset, 4, this.length)
9109 return ieee754.read(this, offset, true, 23, 4)
8b095871
IC
9110}
9111
9987f0c1
IC
9112Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
9113 offset = offset >>> 0
9114 if (!noAssert) checkOffset(offset, 4, this.length)
9115 return ieee754.read(this, offset, false, 23, 4)
8b095871
IC
9116}
9117
9987f0c1
IC
9118Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
9119 offset = offset >>> 0
9120 if (!noAssert) checkOffset(offset, 8, this.length)
9121 return ieee754.read(this, offset, true, 52, 8)
8b095871
IC
9122}
9123
9987f0c1
IC
9124Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
9125 offset = offset >>> 0
9126 if (!noAssert) checkOffset(offset, 8, this.length)
9127 return ieee754.read(this, offset, false, 52, 8)
9128}
8b095871 9129
9987f0c1
IC
9130function checkInt (buf, value, offset, ext, max, min) {
9131 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
9132 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
9133 if (offset + ext > buf.length) throw new RangeError('Index out of range')
9134}
9135
9136Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
9137 value = +value
9138 offset = offset >>> 0
9139 byteLength = byteLength >>> 0
9140 if (!noAssert) {
9141 var maxBytes = Math.pow(2, 8 * byteLength) - 1
9142 checkInt(this, value, offset, byteLength, maxBytes, 0)
8b095871 9143 }
9987f0c1
IC
9144
9145 var mul = 1
9146 var i = 0
9147 this[offset] = value & 0xFF
9148 while (++i < byteLength && (mul *= 0x100)) {
9149 this[offset + i] = (value / mul) & 0xFF
8b095871 9150 }
8b095871 9151
9987f0c1 9152 return offset + byteLength
8b095871
IC
9153}
9154
9987f0c1
IC
9155Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
9156 value = +value
9157 offset = offset >>> 0
9158 byteLength = byteLength >>> 0
9159 if (!noAssert) {
9160 var maxBytes = Math.pow(2, 8 * byteLength) - 1
9161 checkInt(this, value, offset, byteLength, maxBytes, 0)
9162 }
8b095871 9163
9987f0c1
IC
9164 var i = byteLength - 1
9165 var mul = 1
9166 this[offset + i] = value & 0xFF
9167 while (--i >= 0 && (mul *= 0x100)) {
9168 this[offset + i] = (value / mul) & 0xFF
9169 }
9170
9171 return offset + byteLength
8b095871
IC
9172}
9173
9987f0c1
IC
9174Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
9175 value = +value
9176 offset = offset >>> 0
9177 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
9178 this[offset] = (value & 0xff)
9179 return offset + 1
8b095871
IC
9180}
9181
9987f0c1
IC
9182Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
9183 value = +value
9184 offset = offset >>> 0
9185 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
9186 this[offset] = (value & 0xff)
9187 this[offset + 1] = (value >>> 8)
9188 return offset + 2
8b095871
IC
9189}
9190
9987f0c1
IC
9191Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
9192 value = +value
9193 offset = offset >>> 0
9194 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
9195 this[offset] = (value >>> 8)
9196 this[offset + 1] = (value & 0xff)
9197 return offset + 2
8b095871
IC
9198}
9199
9987f0c1
IC
9200Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
9201 value = +value
9202 offset = offset >>> 0
9203 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
9204 this[offset + 3] = (value >>> 24)
9205 this[offset + 2] = (value >>> 16)
9206 this[offset + 1] = (value >>> 8)
9207 this[offset] = (value & 0xff)
9208 return offset + 4
8b095871
IC
9209}
9210
9987f0c1
IC
9211Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
9212 value = +value
9213 offset = offset >>> 0
9214 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
9215 this[offset] = (value >>> 24)
9216 this[offset + 1] = (value >>> 16)
9217 this[offset + 2] = (value >>> 8)
9218 this[offset + 3] = (value & 0xff)
9219 return offset + 4
8b095871
IC
9220}
9221
9987f0c1
IC
9222Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
9223 value = +value
9224 offset = offset >>> 0
9225 if (!noAssert) {
9226 var limit = Math.pow(2, (8 * byteLength) - 1)
9227
9228 checkInt(this, value, offset, byteLength, limit - 1, -limit)
9229 }
9230
9231 var i = 0
9232 var mul = 1
9233 var sub = 0
9234 this[offset] = value & 0xFF
9235 while (++i < byteLength && (mul *= 0x100)) {
9236 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
9237 sub = 1
9238 }
9239 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
8b095871 9240 }
9987f0c1
IC
9241
9242 return offset + byteLength
8b095871
IC
9243}
9244
9987f0c1
IC
9245Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
9246 value = +value
9247 offset = offset >>> 0
9248 if (!noAssert) {
9249 var limit = Math.pow(2, (8 * byteLength) - 1)
8b095871 9250
9987f0c1
IC
9251 checkInt(this, value, offset, byteLength, limit - 1, -limit)
9252 }
9253
9254 var i = byteLength - 1
9255 var mul = 1
9256 var sub = 0
9257 this[offset + i] = value & 0xFF
9258 while (--i >= 0 && (mul *= 0x100)) {
9259 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
9260 sub = 1
9261 }
9262 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
9263 }
9264
9265 return offset + byteLength
8b095871
IC
9266}
9267
9987f0c1
IC
9268Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
9269 value = +value
9270 offset = offset >>> 0
9271 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
9272 if (value < 0) value = 0xff + value + 1
9273 this[offset] = (value & 0xff)
9274 return offset + 1
8b095871
IC
9275}
9276
9987f0c1
IC
9277Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
9278 value = +value
9279 offset = offset >>> 0
9280 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
9281 this[offset] = (value & 0xff)
9282 this[offset + 1] = (value >>> 8)
9283 return offset + 2
8b095871
IC
9284}
9285
9987f0c1
IC
9286Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
9287 value = +value
9288 offset = offset >>> 0
9289 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
9290 this[offset] = (value >>> 8)
9291 this[offset + 1] = (value & 0xff)
9292 return offset + 2
8b095871
IC
9293}
9294
9987f0c1
IC
9295Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
9296 value = +value
9297 offset = offset >>> 0
9298 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
9299 this[offset] = (value & 0xff)
9300 this[offset + 1] = (value >>> 8)
9301 this[offset + 2] = (value >>> 16)
9302 this[offset + 3] = (value >>> 24)
9303 return offset + 4
8b095871
IC
9304}
9305
9987f0c1
IC
9306Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
9307 value = +value
9308 offset = offset >>> 0
9309 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
9310 if (value < 0) value = 0xffffffff + value + 1
9311 this[offset] = (value >>> 24)
9312 this[offset + 1] = (value >>> 16)
9313 this[offset + 2] = (value >>> 8)
9314 this[offset + 3] = (value & 0xff)
9315 return offset + 4
8b095871
IC
9316}
9317
9987f0c1
IC
9318function checkIEEE754 (buf, value, offset, ext, max, min) {
9319 if (offset + ext > buf.length) throw new RangeError('Index out of range')
9320 if (offset < 0) throw new RangeError('Index out of range')
8b095871
IC
9321}
9322
9987f0c1
IC
9323function writeFloat (buf, value, offset, littleEndian, noAssert) {
9324 value = +value
9325 offset = offset >>> 0
9326 if (!noAssert) {
9327 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
8b095871 9328 }
9987f0c1
IC
9329 ieee754.write(buf, value, offset, littleEndian, 23, 4)
9330 return offset + 4
8b095871
IC
9331}
9332
9987f0c1
IC
9333Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
9334 return writeFloat(this, value, offset, true, noAssert)
8b095871
IC
9335}
9336
9987f0c1
IC
9337Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
9338 return writeFloat(this, value, offset, false, noAssert)
9339}
9340
9341function writeDouble (buf, value, offset, littleEndian, noAssert) {
9342 value = +value
9343 offset = offset >>> 0
9344 if (!noAssert) {
9345 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
8b095871 9346 }
9987f0c1
IC
9347 ieee754.write(buf, value, offset, littleEndian, 52, 8)
9348 return offset + 8
8b095871
IC
9349}
9350
9987f0c1
IC
9351Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
9352 return writeDouble(this, value, offset, true, noAssert)
8b095871
IC
9353}
9354
9987f0c1
IC
9355Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
9356 return writeDouble(this, value, offset, false, noAssert)
8b095871
IC
9357}
9358
9987f0c1
IC
9359// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
9360Buffer.prototype.copy = function copy (target, targetStart, start, end) {
9361 if (!start) start = 0
9362 if (!end && end !== 0) end = this.length
9363 if (targetStart >= target.length) targetStart = target.length
9364 if (!targetStart) targetStart = 0
9365 if (end > 0 && end < start) end = start
8b095871 9366
9987f0c1
IC
9367 // Copy 0 bytes; we're done
9368 if (end === start) return 0
9369 if (target.length === 0 || this.length === 0) return 0
8b095871 9370
9987f0c1
IC
9371 // Fatal error conditions
9372 if (targetStart < 0) {
9373 throw new RangeError('targetStart out of bounds')
8b095871 9374 }
9987f0c1
IC
9375 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
9376 if (end < 0) throw new RangeError('sourceEnd out of bounds')
8b095871 9377
9987f0c1
IC
9378 // Are we oob?
9379 if (end > this.length) end = this.length
9380 if (target.length - targetStart < end - start) {
9381 end = target.length - targetStart + start
9382 }
8b095871 9383
9987f0c1
IC
9384 var len = end - start
9385 var i
9386
9387 if (this === target && start < targetStart && targetStart < end) {
9388 // descending copy from end
9389 for (i = len - 1; i >= 0; --i) {
9390 target[i + targetStart] = this[i + start]
8b095871 9391 }
9987f0c1
IC
9392 } else if (len < 1000) {
9393 // ascending copy from start
9394 for (i = 0; i < len; ++i) {
9395 target[i + targetStart] = this[i + start]
8b095871 9396 }
9987f0c1
IC
9397 } else {
9398 Uint8Array.prototype.set.call(
9399 target,
9400 this.subarray(start, start + len),
9401 targetStart
9402 )
9403 }
8b095871 9404
9987f0c1
IC
9405 return len
9406}
9407
9408// Usage:
9409// buffer.fill(number[, offset[, end]])
9410// buffer.fill(buffer[, offset[, end]])
9411// buffer.fill(string[, offset[, end]][, encoding])
9412Buffer.prototype.fill = function fill (val, start, end, encoding) {
9413 // Handle string cases:
9414 if (typeof val === 'string') {
9415 if (typeof start === 'string') {
9416 encoding = start
9417 start = 0
9418 end = this.length
9419 } else if (typeof end === 'string') {
9420 encoding = end
9421 end = this.length
9422 }
9423 if (val.length === 1) {
9424 var code = val.charCodeAt(0)
9425 if (code < 256) {
9426 val = code
8b095871
IC
9427 }
9428 }
9987f0c1
IC
9429 if (encoding !== undefined && typeof encoding !== 'string') {
9430 throw new TypeError('encoding must be a string')
9431 }
9432 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
9433 throw new TypeError('Unknown encoding: ' + encoding)
9434 }
9435 } else if (typeof val === 'number') {
9436 val = val & 255
8b095871 9437 }
8b095871 9438
9987f0c1
IC
9439 // Invalid ranges are not set to a default, so can range check early.
9440 if (start < 0 || this.length < start || this.length < end) {
9441 throw new RangeError('Out of range index')
8b095871 9442 }
9987f0c1
IC
9443
9444 if (end <= start) {
9445 return this
8b095871 9446 }
8b095871 9447
9987f0c1
IC
9448 start = start >>> 0
9449 end = end === undefined ? this.length : end >>> 0
8b095871 9450
9987f0c1
IC
9451 if (!val) val = 0
9452
9453 var i
9454 if (typeof val === 'number') {
9455 for (i = start; i < end; ++i) {
9456 this[i] = val
8b095871 9457 }
9987f0c1
IC
9458 } else {
9459 var bytes = Buffer.isBuffer(val)
9460 ? val
9461 : new Buffer(val, encoding)
9462 var len = bytes.length
9463 for (i = 0; i < end - start; ++i) {
9464 this[i + start] = bytes[i % len]
8b095871
IC
9465 }
9466 }
9987f0c1
IC
9467
9468 return this
8b095871
IC
9469}
9470
9987f0c1
IC
9471// HELPER FUNCTIONS
9472// ================
8b095871 9473
9987f0c1 9474var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
8b095871 9475
9987f0c1
IC
9476function base64clean (str) {
9477 // Node strips out invalid characters like \n and \t from the string, base64-js does not
9478 str = str.trim().replace(INVALID_BASE64_RE, '')
9479 // Node converts strings with length < 2 to ''
9480 if (str.length < 2) return ''
9481 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
9482 while (str.length % 4 !== 0) {
9483 str = str + '='
8b095871 9484 }
9987f0c1
IC
9485 return str
9486}
9487
9488function toHex (n) {
9489 if (n < 16) return '0' + n.toString(16)
9490 return n.toString(16)
9491}
9492
9493function utf8ToBytes (string, units) {
9494 units = units || Infinity
9495 var codePoint
9496 var length = string.length
9497 var leadSurrogate = null
9498 var bytes = []
9499
9500 for (var i = 0; i < length; ++i) {
9501 codePoint = string.charCodeAt(i)
9502
9503 // is surrogate component
9504 if (codePoint > 0xD7FF && codePoint < 0xE000) {
9505 // last char was a lead
9506 if (!leadSurrogate) {
9507 // no lead yet
9508 if (codePoint > 0xDBFF) {
9509 // unexpected trail
9510 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
9511 continue
9512 } else if (i + 1 === length) {
9513 // unpaired lead
9514 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
9515 continue
9516 }
9517
9518 // valid lead
9519 leadSurrogate = codePoint
9520
9521 continue
9522 }
9523
9524 // 2 leads in a row
9525 if (codePoint < 0xDC00) {
9526 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
9527 leadSurrogate = codePoint
9528 continue
9529 }
9530
9531 // valid surrogate pair
9532 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
9533 } else if (leadSurrogate) {
9534 // valid bmp char, but last char was a lead
9535 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
9536 }
9537
9538 leadSurrogate = null
9539
9540 // encode utf8
9541 if (codePoint < 0x80) {
9542 if ((units -= 1) < 0) break
9543 bytes.push(codePoint)
9544 } else if (codePoint < 0x800) {
9545 if ((units -= 2) < 0) break
9546 bytes.push(
9547 codePoint >> 0x6 | 0xC0,
9548 codePoint & 0x3F | 0x80
9549 )
9550 } else if (codePoint < 0x10000) {
9551 if ((units -= 3) < 0) break
9552 bytes.push(
9553 codePoint >> 0xC | 0xE0,
9554 codePoint >> 0x6 & 0x3F | 0x80,
9555 codePoint & 0x3F | 0x80
9556 )
9557 } else if (codePoint < 0x110000) {
9558 if ((units -= 4) < 0) break
9559 bytes.push(
9560 codePoint >> 0x12 | 0xF0,
9561 codePoint >> 0xC & 0x3F | 0x80,
9562 codePoint >> 0x6 & 0x3F | 0x80,
9563 codePoint & 0x3F | 0x80
9564 )
9565 } else {
9566 throw new Error('Invalid code point')
9567 }
8b095871 9568 }
9987f0c1
IC
9569
9570 return bytes
8b095871
IC
9571}
9572
9987f0c1
IC
9573function asciiToBytes (str) {
9574 var byteArray = []
9575 for (var i = 0; i < str.length; ++i) {
9576 // Node's code seems to be doing this and not & 0x7F..
9577 byteArray.push(str.charCodeAt(i) & 0xFF)
8b095871 9578 }
9987f0c1 9579 return byteArray
8b095871
IC
9580}
9581
9987f0c1
IC
9582function utf16leToBytes (str, units) {
9583 var c, hi, lo
9584 var byteArray = []
9585 for (var i = 0; i < str.length; ++i) {
9586 if ((units -= 2) < 0) break
8b095871 9587
9987f0c1
IC
9588 c = str.charCodeAt(i)
9589 hi = c >> 8
9590 lo = c % 256
9591 byteArray.push(lo)
9592 byteArray.push(hi)
9593 }
8b095871 9594
9987f0c1
IC
9595 return byteArray
9596}
8b095871 9597
9987f0c1
IC
9598function base64ToBytes (str) {
9599 return base64.toByteArray(base64clean(str))
9600}
8b095871 9601
9987f0c1
IC
9602function blitBuffer (src, dst, offset, length) {
9603 for (var i = 0; i < length; ++i) {
9604 if ((i + offset >= dst.length) || (i >= src.length)) break
9605 dst[i + offset] = src[i]
9606 }
9607 return i
9608}
9609
9610// Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`
9611function isArrayBufferView (obj) {
9612 return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)
9613}
9614
9615function numberIsNaN (obj) {
9616 return obj !== obj // eslint-disable-line no-self-compare
9617}
8b095871 9618
9987f0c1 9619},{"base64-js":2,"ieee754":7}],5:[function(require,module,exports){
8b095871 9620(function (Buffer){
9987f0c1
IC
9621// Copyright Joyent, Inc. and other Node contributors.
9622//
9623// Permission is hereby granted, free of charge, to any person obtaining a
9624// copy of this software and associated documentation files (the
9625// "Software"), to deal in the Software without restriction, including
9626// without limitation the rights to use, copy, modify, merge, publish,
9627// distribute, sublicense, and/or sell copies of the Software, and to permit
9628// persons to whom the Software is furnished to do so, subject to the
9629// following conditions:
9630//
9631// The above copyright notice and this permission notice shall be included
9632// in all copies or substantial portions of the Software.
9633//
9634// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
9635// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
9636// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
9637// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
9638// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
9639// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
9640// USE OR OTHER DEALINGS IN THE SOFTWARE.
8b095871 9641
9987f0c1
IC
9642// NOTE: These type checking functions intentionally don't use `instanceof`
9643// because it is fragile and can be easily faked with `Object.create()`.
8b095871 9644
9987f0c1
IC
9645function isArray(arg) {
9646 if (Array.isArray) {
9647 return Array.isArray(arg);
9648 }
9649 return objectToString(arg) === '[object Array]';
8b095871 9650}
9987f0c1 9651exports.isArray = isArray;
8b095871 9652
9987f0c1
IC
9653function isBoolean(arg) {
9654 return typeof arg === 'boolean';
8b095871 9655}
9987f0c1 9656exports.isBoolean = isBoolean;
8b095871 9657
9987f0c1
IC
9658function isNull(arg) {
9659 return arg === null;
8b095871 9660}
9987f0c1 9661exports.isNull = isNull;
8b095871 9662
9987f0c1
IC
9663function isNullOrUndefined(arg) {
9664 return arg == null;
9665}
9666exports.isNullOrUndefined = isNullOrUndefined;
8b095871 9667
9987f0c1
IC
9668function isNumber(arg) {
9669 return typeof arg === 'number';
9670}
9671exports.isNumber = isNumber;
8b095871 9672
9987f0c1
IC
9673function isString(arg) {
9674 return typeof arg === 'string';
9675}
9676exports.isString = isString;
8b095871 9677
9987f0c1
IC
9678function isSymbol(arg) {
9679 return typeof arg === 'symbol';
8b095871 9680}
9987f0c1 9681exports.isSymbol = isSymbol;
8b095871 9682
9987f0c1
IC
9683function isUndefined(arg) {
9684 return arg === void 0;
9685}
9686exports.isUndefined = isUndefined;
8b095871 9687
9987f0c1
IC
9688function isRegExp(re) {
9689 return objectToString(re) === '[object RegExp]';
8b095871 9690}
9987f0c1 9691exports.isRegExp = isRegExp;
8b095871 9692
9987f0c1
IC
9693function isObject(arg) {
9694 return typeof arg === 'object' && arg !== null;
9695}
9696exports.isObject = isObject;
8b095871 9697
9987f0c1
IC
9698function isDate(d) {
9699 return objectToString(d) === '[object Date]';
9700}
9701exports.isDate = isDate;
8b095871 9702
9987f0c1
IC
9703function isError(e) {
9704 return (objectToString(e) === '[object Error]' || e instanceof Error);
8b095871 9705}
9987f0c1 9706exports.isError = isError;
8b095871 9707
9987f0c1
IC
9708function isFunction(arg) {
9709 return typeof arg === 'function';
8b095871 9710}
9987f0c1 9711exports.isFunction = isFunction;
8b095871 9712
9987f0c1
IC
9713function isPrimitive(arg) {
9714 return arg === null ||
9715 typeof arg === 'boolean' ||
9716 typeof arg === 'number' ||
9717 typeof arg === 'string' ||
9718 typeof arg === 'symbol' || // ES6 symbol
9719 typeof arg === 'undefined';
9720}
9721exports.isPrimitive = isPrimitive;
8b095871 9722
9987f0c1 9723exports.isBuffer = Buffer.isBuffer;
8b095871 9724
9987f0c1
IC
9725function objectToString(o) {
9726 return Object.prototype.toString.call(o);
8b095871
IC
9727}
9728
9987f0c1
IC
9729}).call(this,{"isBuffer":require("../../is-buffer/index.js")})
9730},{"../../is-buffer/index.js":9}],6:[function(require,module,exports){
9731// Copyright Joyent, Inc. and other Node contributors.
8b095871 9732//
9987f0c1
IC
9733// Permission is hereby granted, free of charge, to any person obtaining a
9734// copy of this software and associated documentation files (the
9735// "Software"), to deal in the Software without restriction, including
9736// without limitation the rights to use, copy, modify, merge, publish,
9737// distribute, sublicense, and/or sell copies of the Software, and to permit
9738// persons to whom the Software is furnished to do so, subject to the
9739// following conditions:
8b095871 9740//
9987f0c1
IC
9741// The above copyright notice and this permission notice shall be included
9742// in all copies or substantial portions of the Software.
8b095871 9743//
9987f0c1
IC
9744// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
9745// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
9746// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
9747// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
9748// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
9749// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
9750// USE OR OTHER DEALINGS IN THE SOFTWARE.
8b095871 9751
9987f0c1
IC
9752function EventEmitter() {
9753 this._events = this._events || {};
9754 this._maxListeners = this._maxListeners || undefined;
9755}
9756module.exports = EventEmitter;
8b095871 9757
9987f0c1
IC
9758// Backwards-compat with node 0.10.x
9759EventEmitter.EventEmitter = EventEmitter;
8b095871 9760
9987f0c1
IC
9761EventEmitter.prototype._events = undefined;
9762EventEmitter.prototype._maxListeners = undefined;
8b095871 9763
9987f0c1
IC
9764// By default EventEmitters will print a warning if more than 10 listeners are
9765// added to it. This is a useful default which helps finding memory leaks.
9766EventEmitter.defaultMaxListeners = 10;
8b095871 9767
9987f0c1
IC
9768// Obviously not all Emitters should be limited to 10. This function allows
9769// that to be increased. Set to zero for unlimited.
9770EventEmitter.prototype.setMaxListeners = function(n) {
9771 if (!isNumber(n) || n < 0 || isNaN(n))
9772 throw TypeError('n must be a positive number');
9773 this._maxListeners = n;
9774 return this;
9775};
8b095871 9776
9987f0c1
IC
9777EventEmitter.prototype.emit = function(type) {
9778 var er, handler, len, args, i, listeners;
9779
9780 if (!this._events)
9781 this._events = {};
9782
9783 // If there is no 'error' event listener then throw.
9784 if (type === 'error') {
9785 if (!this._events.error ||
9786 (isObject(this._events.error) && !this._events.error.length)) {
9787 er = arguments[1];
9788 if (er instanceof Error) {
9789 throw er; // Unhandled 'error' event
9790 } else {
9791 // At least give some kind of context to the user
9792 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
9793 err.context = er;
9794 throw err;
9795 }
9796 }
8b095871 9797 }
8b095871 9798
9987f0c1
IC
9799 handler = this._events[type];
9800
9801 if (isUndefined(handler))
9802 return false;
9803
9804 if (isFunction(handler)) {
9805 switch (arguments.length) {
9806 // fast cases
9807 case 1:
9808 handler.call(this);
9809 break;
9810 case 2:
9811 handler.call(this, arguments[1]);
9812 break;
9813 case 3:
9814 handler.call(this, arguments[1], arguments[2]);
9815 break;
9816 // slower
9817 default:
9818 args = Array.prototype.slice.call(arguments, 1);
9819 handler.apply(this, args);
9820 }
9821 } else if (isObject(handler)) {
9822 args = Array.prototype.slice.call(arguments, 1);
9823 listeners = handler.slice();
9824 len = listeners.length;
9825 for (i = 0; i < len; i++)
9826 listeners[i].apply(this, args);
8b095871 9827 }
8b095871 9828
9987f0c1
IC
9829 return true;
9830};
9831
9832EventEmitter.prototype.addListener = function(type, listener) {
9833 var m;
9834
9835 if (!isFunction(listener))
9836 throw TypeError('listener must be a function');
9837
9838 if (!this._events)
9839 this._events = {};
9840
9841 // To avoid recursion in the case that type === "newListener"! Before
9842 // adding it to the listeners, first emit "newListener".
9843 if (this._events.newListener)
9844 this.emit('newListener', type,
9845 isFunction(listener.listener) ?
9846 listener.listener : listener);
9847
9848 if (!this._events[type])
9849 // Optimize the case of one listener. Don't need the extra array object.
9850 this._events[type] = listener;
9851 else if (isObject(this._events[type]))
9852 // If we've already got an array, just append.
9853 this._events[type].push(listener);
9854 else
9855 // Adding the second element, need to change to array.
9856 this._events[type] = [this._events[type], listener];
8b095871 9857
9987f0c1
IC
9858 // Check for listener leak
9859 if (isObject(this._events[type]) && !this._events[type].warned) {
9860 if (!isUndefined(this._maxListeners)) {
9861 m = this._maxListeners;
9862 } else {
9863 m = EventEmitter.defaultMaxListeners;
8b095871 9864 }
8b095871 9865
9987f0c1
IC
9866 if (m && m > 0 && this._events[type].length > m) {
9867 this._events[type].warned = true;
9868 console.error('(node) warning: possible EventEmitter memory ' +
9869 'leak detected. %d listeners added. ' +
9870 'Use emitter.setMaxListeners() to increase limit.',
9871 this._events[type].length);
9872 if (typeof console.trace === 'function') {
9873 // not supported in IE 10
9874 console.trace();
9875 }
9876 }
8b095871 9877 }
8b095871 9878
9987f0c1
IC
9879 return this;
9880};
8b095871 9881
9987f0c1 9882EventEmitter.prototype.on = EventEmitter.prototype.addListener;
8b095871 9883
9987f0c1
IC
9884EventEmitter.prototype.once = function(type, listener) {
9885 if (!isFunction(listener))
9886 throw TypeError('listener must be a function');
8b095871 9887
9987f0c1 9888 var fired = false;
8b095871 9889
9987f0c1
IC
9890 function g() {
9891 this.removeListener(type, g);
8b095871 9892
9987f0c1
IC
9893 if (!fired) {
9894 fired = true;
9895 listener.apply(this, arguments);
9896 }
9897 }
8b095871 9898
9987f0c1
IC
9899 g.listener = listener;
9900 this.on(type, g);
8b095871 9901
9987f0c1 9902 return this;
8b095871
IC
9903};
9904
9987f0c1
IC
9905// emits a 'removeListener' event iff the listener was removed
9906EventEmitter.prototype.removeListener = function(type, listener) {
9907 var list, position, length, i;
8b095871 9908
9987f0c1
IC
9909 if (!isFunction(listener))
9910 throw TypeError('listener must be a function');
8b095871 9911
9987f0c1
IC
9912 if (!this._events || !this._events[type])
9913 return this;
8b095871 9914
9987f0c1
IC
9915 list = this._events[type];
9916 length = list.length;
9917 position = -1;
8b095871 9918
9987f0c1
IC
9919 if (list === listener ||
9920 (isFunction(list.listener) && list.listener === listener)) {
9921 delete this._events[type];
9922 if (this._events.removeListener)
9923 this.emit('removeListener', type, listener);
8b095871 9924
9987f0c1
IC
9925 } else if (isObject(list)) {
9926 for (i = length; i-- > 0;) {
9927 if (list[i] === listener ||
9928 (list[i].listener && list[i].listener === listener)) {
9929 position = i;
9930 break;
9931 }
8b095871
IC
9932 }
9933
9987f0c1
IC
9934 if (position < 0)
9935 return this;
8b095871 9936
9987f0c1
IC
9937 if (list.length === 1) {
9938 list.length = 0;
9939 delete this._events[type];
9940 } else {
9941 list.splice(position, 1);
9942 }
8b095871 9943
9987f0c1
IC
9944 if (this._events.removeListener)
9945 this.emit('removeListener', type, listener);
9946 }
8b095871 9947
9987f0c1
IC
9948 return this;
9949};
8b095871 9950
9987f0c1
IC
9951EventEmitter.prototype.removeAllListeners = function(type) {
9952 var key, listeners;
8b095871 9953
9987f0c1
IC
9954 if (!this._events)
9955 return this;
8b095871 9956
9987f0c1
IC
9957 // not listening for removeListener, no need to emit
9958 if (!this._events.removeListener) {
9959 if (arguments.length === 0)
9960 this._events = {};
9961 else if (this._events[type])
9962 delete this._events[type];
9963 return this;
8b095871 9964 }
9987f0c1
IC
9965
9966 // emit removeListener for all listeners on all events
9967 if (arguments.length === 0) {
9968 for (key in this._events) {
9969 if (key === 'removeListener') continue;
9970 this.removeAllListeners(key);
9971 }
9972 this.removeAllListeners('removeListener');
9973 this._events = {};
9974 return this;
8b095871 9975 }
8b095871 9976
9987f0c1 9977 listeners = this._events[type];
8b095871 9978
9987f0c1
IC
9979 if (isFunction(listeners)) {
9980 this.removeListener(type, listeners);
9981 } else if (listeners) {
9982 // LIFO order
9983 while (listeners.length)
9984 this.removeListener(type, listeners[listeners.length - 1]);
8b095871 9985 }
9987f0c1 9986 delete this._events[type];
8b095871 9987
9987f0c1
IC
9988 return this;
9989};
8b095871 9990
9987f0c1
IC
9991EventEmitter.prototype.listeners = function(type) {
9992 var ret;
9993 if (!this._events || !this._events[type])
9994 ret = [];
9995 else if (isFunction(this._events[type]))
9996 ret = [this._events[type]];
9997 else
9998 ret = this._events[type].slice();
9999 return ret;
8b095871
IC
10000};
10001
9987f0c1
IC
10002EventEmitter.prototype.listenerCount = function(type) {
10003 if (this._events) {
10004 var evlistener = this._events[type];
8b095871 10005
9987f0c1
IC
10006 if (isFunction(evlistener))
10007 return 1;
10008 else if (evlistener)
10009 return evlistener.length;
8b095871 10010 }
9987f0c1 10011 return 0;
8b095871
IC
10012};
10013
9987f0c1
IC
10014EventEmitter.listenerCount = function(emitter, type) {
10015 return emitter.listenerCount(type);
10016};
8b095871 10017
9987f0c1
IC
10018function isFunction(arg) {
10019 return typeof arg === 'function';
10020}
8b095871 10021
9987f0c1
IC
10022function isNumber(arg) {
10023 return typeof arg === 'number';
8b095871
IC
10024}
10025
9987f0c1
IC
10026function isObject(arg) {
10027 return typeof arg === 'object' && arg !== null;
10028}
8b095871 10029
9987f0c1
IC
10030function isUndefined(arg) {
10031 return arg === void 0;
10032}
8b095871 10033
9987f0c1
IC
10034},{}],7:[function(require,module,exports){
10035exports.read = function (buffer, offset, isLE, mLen, nBytes) {
10036 var e, m
10037 var eLen = nBytes * 8 - mLen - 1
10038 var eMax = (1 << eLen) - 1
10039 var eBias = eMax >> 1
10040 var nBits = -7
10041 var i = isLE ? (nBytes - 1) : 0
10042 var d = isLE ? -1 : 1
10043 var s = buffer[offset + i]
8b095871 10044
9987f0c1 10045 i += d
8b095871 10046
9987f0c1
IC
10047 e = s & ((1 << (-nBits)) - 1)
10048 s >>= (-nBits)
10049 nBits += eLen
10050 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
8b095871 10051
9987f0c1
IC
10052 m = e & ((1 << (-nBits)) - 1)
10053 e >>= (-nBits)
10054 nBits += mLen
10055 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
8b095871 10056
9987f0c1
IC
10057 if (e === 0) {
10058 e = 1 - eBias
10059 } else if (e === eMax) {
10060 return m ? NaN : ((s ? -1 : 1) * Infinity)
10061 } else {
10062 m = m + Math.pow(2, mLen)
10063 e = e - eBias
8b095871 10064 }
9987f0c1 10065 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
8b095871
IC
10066}
10067
9987f0c1
IC
10068exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
10069 var e, m, c
10070 var eLen = nBytes * 8 - mLen - 1
10071 var eMax = (1 << eLen) - 1
10072 var eBias = eMax >> 1
10073 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
10074 var i = isLE ? 0 : (nBytes - 1)
10075 var d = isLE ? 1 : -1
10076 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
8b095871 10077
9987f0c1 10078 value = Math.abs(value)
8b095871 10079
9987f0c1
IC
10080 if (isNaN(value) || value === Infinity) {
10081 m = isNaN(value) ? 1 : 0
10082 e = eMax
10083 } else {
10084 e = Math.floor(Math.log(value) / Math.LN2)
10085 if (value * (c = Math.pow(2, -e)) < 1) {
10086 e--
10087 c *= 2
10088 }
10089 if (e + eBias >= 1) {
10090 value += rt / c
10091 } else {
10092 value += rt * Math.pow(2, 1 - eBias)
10093 }
10094 if (value * c >= 2) {
10095 e++
10096 c /= 2
10097 }
8b095871 10098
9987f0c1
IC
10099 if (e + eBias >= eMax) {
10100 m = 0
10101 e = eMax
10102 } else if (e + eBias >= 1) {
10103 m = (value * c - 1) * Math.pow(2, mLen)
10104 e = e + eBias
10105 } else {
10106 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
10107 e = 0
10108 }
8b095871 10109 }
8b095871 10110
9987f0c1
IC
10111 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
10112
10113 e = (e << mLen) | m
10114 eLen += mLen
10115 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
10116
10117 buffer[offset + i - d] |= s * 128
10118}
8b095871 10119
9987f0c1
IC
10120},{}],8:[function(require,module,exports){
10121if (typeof Object.create === 'function') {
10122 // implementation from standard node.js 'util' module
10123 module.exports = function inherits(ctor, superCtor) {
10124 ctor.super_ = superCtor
10125 ctor.prototype = Object.create(superCtor.prototype, {
10126 constructor: {
10127 value: ctor,
10128 enumerable: false,
10129 writable: true,
10130 configurable: true
10131 }
10132 });
10133 };
10134} else {
10135 // old school shim for old browsers
10136 module.exports = function inherits(ctor, superCtor) {
10137 ctor.super_ = superCtor
10138 var TempCtor = function () {}
10139 TempCtor.prototype = superCtor.prototype
10140 ctor.prototype = new TempCtor()
10141 ctor.prototype.constructor = ctor
10142 }
10143}
10144
10145},{}],9:[function(require,module,exports){
8b095871 10146/*!
9987f0c1 10147 * Determine if an object is a Buffer
8b095871
IC
10148 *
10149 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
10150 * @license MIT
10151 */
10152
9987f0c1
IC
10153// The _isBuffer check is for Safari 5-7 support, because it's missing
10154// Object.prototype.constructor. Remove this eventually
10155module.exports = function (obj) {
10156 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
10157}
8b095871 10158
9987f0c1
IC
10159function isBuffer (obj) {
10160 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
8b095871
IC
10161}
10162
9987f0c1
IC
10163// For Node v0.10 support. Remove this eventually.
10164function isSlowBuffer (obj) {
10165 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
10166}
8b095871 10167
9987f0c1
IC
10168},{}],10:[function(require,module,exports){
10169var toString = {}.toString;
8b095871 10170
9987f0c1
IC
10171module.exports = Array.isArray || function (arr) {
10172 return toString.call(arr) == '[object Array]';
10173};
8b095871 10174
9987f0c1
IC
10175},{}],11:[function(require,module,exports){
10176(function (process){
10177'use strict';
8b095871 10178
9987f0c1
IC
10179if (!process.version ||
10180 process.version.indexOf('v0.') === 0 ||
10181 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
10182 module.exports = nextTick;
10183} else {
10184 module.exports = process.nextTick;
8b095871
IC
10185}
10186
9987f0c1
IC
10187function nextTick(fn, arg1, arg2, arg3) {
10188 if (typeof fn !== 'function') {
10189 throw new TypeError('"callback" argument must be a function');
10190 }
10191 var len = arguments.length;
10192 var args, i;
10193 switch (len) {
10194 case 0:
10195 case 1:
10196 return process.nextTick(fn);
10197 case 2:
10198 return process.nextTick(function afterTickOne() {
10199 fn.call(null, arg1);
10200 });
10201 case 3:
10202 return process.nextTick(function afterTickTwo() {
10203 fn.call(null, arg1, arg2);
10204 });
10205 case 4:
10206 return process.nextTick(function afterTickThree() {
10207 fn.call(null, arg1, arg2, arg3);
10208 });
10209 default:
10210 args = new Array(len - 1);
10211 i = 0;
10212 while (i < args.length) {
10213 args[i++] = arguments[i];
8b095871 10214 }
9987f0c1
IC
10215 return process.nextTick(function afterTick() {
10216 fn.apply(null, args);
10217 });
8b095871 10218 }
8b095871
IC
10219}
10220
9987f0c1
IC
10221}).call(this,require('_process'))
10222},{"_process":12}],12:[function(require,module,exports){
10223// shim for using process in browser
10224var process = module.exports = {};
8b095871 10225
9987f0c1
IC
10226// cached from whatever global is present so that test runners that stub it
10227// don't break things. But we need to wrap it in a try catch in case it is
10228// wrapped in strict mode code which doesn't define any globals. It's inside a
10229// function because try/catches deoptimize in certain engines.
8b095871 10230
9987f0c1
IC
10231var cachedSetTimeout;
10232var cachedClearTimeout;
8b095871 10233
9987f0c1
IC
10234function defaultSetTimout() {
10235 throw new Error('setTimeout has not been defined');
10236}
10237function defaultClearTimeout () {
10238 throw new Error('clearTimeout has not been defined');
10239}
10240(function () {
10241 try {
10242 if (typeof setTimeout === 'function') {
10243 cachedSetTimeout = setTimeout;
10244 } else {
10245 cachedSetTimeout = defaultSetTimout;
10246 }
10247 } catch (e) {
10248 cachedSetTimeout = defaultSetTimout;
10249 }
10250 try {
10251 if (typeof clearTimeout === 'function') {
10252 cachedClearTimeout = clearTimeout;
10253 } else {
10254 cachedClearTimeout = defaultClearTimeout;
10255 }
10256 } catch (e) {
10257 cachedClearTimeout = defaultClearTimeout;
8b095871 10258 }
9987f0c1
IC
10259} ())
10260function runTimeout(fun) {
10261 if (cachedSetTimeout === setTimeout) {
10262 //normal enviroments in sane situations
10263 return setTimeout(fun, 0);
10264 }
10265 // if setTimeout wasn't available but was latter defined
10266 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
10267 cachedSetTimeout = setTimeout;
10268 return setTimeout(fun, 0);
10269 }
10270 try {
10271 // when when somebody has screwed with setTimeout but no I.E. maddness
10272 return cachedSetTimeout(fun, 0);
10273 } catch(e){
10274 try {
10275 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
10276 return cachedSetTimeout.call(null, fun, 0);
10277 } catch(e){
10278 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
10279 return cachedSetTimeout.call(this, fun, 0);
10280 }
8b095871 10281 }
8b095871 10282
8b095871 10283
8b095871 10284}
9987f0c1
IC
10285function runClearTimeout(marker) {
10286 if (cachedClearTimeout === clearTimeout) {
10287 //normal enviroments in sane situations
10288 return clearTimeout(marker);
10289 }
10290 // if clearTimeout wasn't available but was latter defined
10291 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
10292 cachedClearTimeout = clearTimeout;
10293 return clearTimeout(marker);
10294 }
10295 try {
10296 // when when somebody has screwed with setTimeout but no I.E. maddness
10297 return cachedClearTimeout(marker);
10298 } catch (e){
10299 try {
10300 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
10301 return cachedClearTimeout.call(null, marker);
10302 } catch (e){
10303 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
10304 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
10305 return cachedClearTimeout.call(this, marker);
10306 }
10307 }
8b095871 10308
8b095871 10309
8b095871 10310
8b095871 10311}
9987f0c1
IC
10312var queue = [];
10313var draining = false;
10314var currentQueue;
10315var queueIndex = -1;
8b095871 10316
9987f0c1
IC
10317function cleanUpNextTick() {
10318 if (!draining || !currentQueue) {
10319 return;
10320 }
10321 draining = false;
10322 if (currentQueue.length) {
10323 queue = currentQueue.concat(queue);
10324 } else {
10325 queueIndex = -1;
10326 }
10327 if (queue.length) {
10328 drainQueue();
10329 }
8b095871
IC
10330}
10331
9987f0c1
IC
10332function drainQueue() {
10333 if (draining) {
10334 return;
10335 }
10336 var timeout = runTimeout(cleanUpNextTick);
10337 draining = true;
8b095871 10338
9987f0c1
IC
10339 var len = queue.length;
10340 while(len) {
10341 currentQueue = queue;
10342 queue = [];
10343 while (++queueIndex < len) {
10344 if (currentQueue) {
10345 currentQueue[queueIndex].run();
10346 }
10347 }
10348 queueIndex = -1;
10349 len = queue.length;
10350 }
10351 currentQueue = null;
10352 draining = false;
10353 runClearTimeout(timeout);
8b095871
IC
10354}
10355
9987f0c1
IC
10356process.nextTick = function (fun) {
10357 var args = new Array(arguments.length - 1);
10358 if (arguments.length > 1) {
10359 for (var i = 1; i < arguments.length; i++) {
10360 args[i - 1] = arguments[i];
10361 }
10362 }
10363 queue.push(new Item(fun, args));
10364 if (queue.length === 1 && !draining) {
10365 runTimeout(drainQueue);
10366 }
10367};
8b095871 10368
9987f0c1
IC
10369// v8 likes predictible objects
10370function Item(fun, array) {
10371 this.fun = fun;
10372 this.array = array;
8b095871 10373}
9987f0c1
IC
10374Item.prototype.run = function () {
10375 this.fun.apply(null, this.array);
10376};
10377process.title = 'browser';
10378process.browser = true;
10379process.env = {};
10380process.argv = [];
10381process.version = ''; // empty string to avoid regexp issues
10382process.versions = {};
8b095871 10383
9987f0c1 10384function noop() {}
8b095871 10385
9987f0c1
IC
10386process.on = noop;
10387process.addListener = noop;
10388process.once = noop;
10389process.off = noop;
10390process.removeListener = noop;
10391process.removeAllListeners = noop;
10392process.emit = noop;
10393process.prependListener = noop;
10394process.prependOnceListener = noop;
8b095871 10395
9987f0c1 10396process.listeners = function (name) { return [] }
8b095871 10397
9987f0c1
IC
10398process.binding = function (name) {
10399 throw new Error('process.binding is not supported');
10400};
8b095871 10401
9987f0c1
IC
10402process.cwd = function () { return '/' };
10403process.chdir = function (dir) {
10404 throw new Error('process.chdir is not supported');
10405};
10406process.umask = function() { return 0; };
8b095871 10407
9987f0c1
IC
10408},{}],13:[function(require,module,exports){
10409module.exports = require('./lib/_stream_duplex.js');
8b095871 10410
9987f0c1
IC
10411},{"./lib/_stream_duplex.js":14}],14:[function(require,module,exports){
10412// Copyright Joyent, Inc. and other Node contributors.
10413//
10414// Permission is hereby granted, free of charge, to any person obtaining a
10415// copy of this software and associated documentation files (the
10416// "Software"), to deal in the Software without restriction, including
10417// without limitation the rights to use, copy, modify, merge, publish,
10418// distribute, sublicense, and/or sell copies of the Software, and to permit
10419// persons to whom the Software is furnished to do so, subject to the
10420// following conditions:
10421//
10422// The above copyright notice and this permission notice shall be included
10423// in all copies or substantial portions of the Software.
10424//
10425// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
10426// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
10427// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
10428// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
10429// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
10430// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
10431// USE OR OTHER DEALINGS IN THE SOFTWARE.
8b095871 10432
9987f0c1
IC
10433// a duplex stream is just a stream that is both readable and writable.
10434// Since JS doesn't have multiple prototypal inheritance, this class
10435// prototypally inherits from Readable, and then parasitically from
10436// Writable.
8b095871 10437
9987f0c1 10438'use strict';
8b095871 10439
9987f0c1 10440/*<replacement>*/
8b095871 10441
9987f0c1
IC
10442var processNextTick = require('process-nextick-args');
10443/*</replacement>*/
8b095871 10444
9987f0c1
IC
10445/*<replacement>*/
10446var objectKeys = Object.keys || function (obj) {
10447 var keys = [];
10448 for (var key in obj) {
10449 keys.push(key);
10450 }return keys;
10451};
10452/*</replacement>*/
8b095871 10453
9987f0c1 10454module.exports = Duplex;
8b095871 10455
9987f0c1
IC
10456/*<replacement>*/
10457var util = require('core-util-is');
10458util.inherits = require('inherits');
10459/*</replacement>*/
8b095871 10460
9987f0c1
IC
10461var Readable = require('./_stream_readable');
10462var Writable = require('./_stream_writable');
8b095871 10463
9987f0c1 10464util.inherits(Duplex, Readable);
8b095871 10465
9987f0c1
IC
10466var keys = objectKeys(Writable.prototype);
10467for (var v = 0; v < keys.length; v++) {
10468 var method = keys[v];
10469 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
8b095871 10470}
8b095871 10471
9987f0c1
IC
10472function Duplex(options) {
10473 if (!(this instanceof Duplex)) return new Duplex(options);
8b095871 10474
9987f0c1
IC
10475 Readable.call(this, options);
10476 Writable.call(this, options);
8b095871 10477
9987f0c1 10478 if (options && options.readable === false) this.readable = false;
8b095871 10479
9987f0c1 10480 if (options && options.writable === false) this.writable = false;
8b095871 10481
9987f0c1
IC
10482 this.allowHalfOpen = true;
10483 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
8b095871 10484
9987f0c1 10485 this.once('end', onend);
8b095871
IC
10486}
10487
9987f0c1
IC
10488// the no-half-open enforcer
10489function onend() {
10490 // if we allow half-open state, or if the writable side ended,
10491 // then we're ok.
10492 if (this.allowHalfOpen || this._writableState.ended) return;
8b095871 10493
9987f0c1
IC
10494 // no more data can be written.
10495 // But allow more writes to happen in this tick.
10496 processNextTick(onEndNT, this);
8b095871
IC
10497}
10498
9987f0c1
IC
10499function onEndNT(self) {
10500 self.end();
8b095871
IC
10501}
10502
9987f0c1
IC
10503Object.defineProperty(Duplex.prototype, 'destroyed', {
10504 get: function () {
10505 if (this._readableState === undefined || this._writableState === undefined) {
10506 return false;
8b095871 10507 }
9987f0c1
IC
10508 return this._readableState.destroyed && this._writableState.destroyed;
10509 },
10510 set: function (value) {
10511 // we ignore the value if the stream
10512 // has not been initialized yet
10513 if (this._readableState === undefined || this._writableState === undefined) {
10514 return;
8b095871 10515 }
9987f0c1
IC
10516
10517 // backward compatibility, the user is explicitly
10518 // managing destroyed
10519 this._readableState.destroyed = value;
10520 this._writableState.destroyed = value;
8b095871 10521 }
9987f0c1 10522});
8b095871 10523
9987f0c1
IC
10524Duplex.prototype._destroy = function (err, cb) {
10525 this.push(null);
10526 this.end();
8b095871 10527
9987f0c1
IC
10528 processNextTick(cb, err);
10529};
8b095871 10530
9987f0c1
IC
10531function forEach(xs, f) {
10532 for (var i = 0, l = xs.length; i < l; i++) {
10533 f(xs[i], i);
10534 }
8b095871 10535}
9987f0c1
IC
10536},{"./_stream_readable":16,"./_stream_writable":18,"core-util-is":5,"inherits":8,"process-nextick-args":11}],15:[function(require,module,exports){
10537// Copyright Joyent, Inc. and other Node contributors.
10538//
10539// Permission is hereby granted, free of charge, to any person obtaining a
10540// copy of this software and associated documentation files (the
10541// "Software"), to deal in the Software without restriction, including
10542// without limitation the rights to use, copy, modify, merge, publish,
10543// distribute, sublicense, and/or sell copies of the Software, and to permit
10544// persons to whom the Software is furnished to do so, subject to the
10545// following conditions:
10546//
10547// The above copyright notice and this permission notice shall be included
10548// in all copies or substantial portions of the Software.
10549//
10550// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
10551// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
10552// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
10553// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
10554// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
10555// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
10556// USE OR OTHER DEALINGS IN THE SOFTWARE.
8b095871 10557
9987f0c1
IC
10558// a passthrough stream.
10559// basically just the most minimal sort of Transform stream.
10560// Every written chunk gets output as-is.
8b095871 10561
9987f0c1 10562'use strict';
8b095871 10563
9987f0c1 10564module.exports = PassThrough;
8b095871 10565
9987f0c1 10566var Transform = require('./_stream_transform');
8b095871 10567
9987f0c1
IC
10568/*<replacement>*/
10569var util = require('core-util-is');
10570util.inherits = require('inherits');
10571/*</replacement>*/
8b095871 10572
9987f0c1 10573util.inherits(PassThrough, Transform);
8b095871 10574
9987f0c1
IC
10575function PassThrough(options) {
10576 if (!(this instanceof PassThrough)) return new PassThrough(options);
8b095871 10577
9987f0c1 10578 Transform.call(this, options);
8b095871
IC
10579}
10580
9987f0c1
IC
10581PassThrough.prototype._transform = function (chunk, encoding, cb) {
10582 cb(null, chunk);
10583};
10584},{"./_stream_transform":17,"core-util-is":5,"inherits":8}],16:[function(require,module,exports){
10585(function (process,global){
10586// Copyright Joyent, Inc. and other Node contributors.
10587//
10588// Permission is hereby granted, free of charge, to any person obtaining a
10589// copy of this software and associated documentation files (the
10590// "Software"), to deal in the Software without restriction, including
10591// without limitation the rights to use, copy, modify, merge, publish,
10592// distribute, sublicense, and/or sell copies of the Software, and to permit
10593// persons to whom the Software is furnished to do so, subject to the
10594// following conditions:
10595//
10596// The above copyright notice and this permission notice shall be included
10597// in all copies or substantial portions of the Software.
10598//
10599// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
10600// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
10601// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
10602// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
10603// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
10604// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
10605// USE OR OTHER DEALINGS IN THE SOFTWARE.
10606
10607'use strict';
8b095871 10608
9987f0c1 10609/*<replacement>*/
8b095871 10610
9987f0c1
IC
10611var processNextTick = require('process-nextick-args');
10612/*</replacement>*/
8b095871 10613
9987f0c1 10614module.exports = Readable;
8b095871 10615
9987f0c1
IC
10616/*<replacement>*/
10617var isArray = require('isarray');
10618/*</replacement>*/
8b095871 10619
9987f0c1
IC
10620/*<replacement>*/
10621var Duplex;
10622/*</replacement>*/
8b095871 10623
9987f0c1 10624Readable.ReadableState = ReadableState;
8b095871 10625
9987f0c1
IC
10626/*<replacement>*/
10627var EE = require('events').EventEmitter;
8b095871 10628
9987f0c1
IC
10629var EElistenerCount = function (emitter, type) {
10630 return emitter.listeners(type).length;
10631};
10632/*</replacement>*/
8b095871 10633
9987f0c1
IC
10634/*<replacement>*/
10635var Stream = require('./internal/streams/stream');
10636/*</replacement>*/
8b095871 10637
9987f0c1
IC
10638// TODO(bmeurer): Change this back to const once hole checks are
10639// properly optimized away early in Ignition+TurboFan.
10640/*<replacement>*/
10641var Buffer = require('safe-buffer').Buffer;
10642var OurUint8Array = global.Uint8Array || function () {};
10643function _uint8ArrayToBuffer(chunk) {
10644 return Buffer.from(chunk);
10645}
10646function _isUint8Array(obj) {
10647 return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
8b095871 10648}
9987f0c1 10649/*</replacement>*/
8b095871 10650
9987f0c1
IC
10651/*<replacement>*/
10652var util = require('core-util-is');
10653util.inherits = require('inherits');
10654/*</replacement>*/
10655
10656/*<replacement>*/
10657var debugUtil = require('util');
10658var debug = void 0;
10659if (debugUtil && debugUtil.debuglog) {
10660 debug = debugUtil.debuglog('stream');
10661} else {
10662 debug = function () {};
8b095871 10663}
9987f0c1 10664/*</replacement>*/
8b095871 10665
9987f0c1
IC
10666var BufferList = require('./internal/streams/BufferList');
10667var destroyImpl = require('./internal/streams/destroy');
10668var StringDecoder;
10669
10670util.inherits(Readable, Stream);
10671
10672var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
10673
10674function prependListener(emitter, event, fn) {
10675 // Sadly this is not cacheable as some libraries bundle their own
10676 // event emitter implementation with them.
10677 if (typeof emitter.prependListener === 'function') {
10678 return emitter.prependListener(event, fn);
8b095871 10679 } else {
9987f0c1
IC
10680 // This is a hack to make sure that our error handler is attached before any
10681 // userland ones. NEVER DO THIS. This is here only because this code needs
10682 // to continue to work with older versions of Node.js that do not include
10683 // the prependListener() method. The goal is to eventually remove this hack.
10684 if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
8b095871
IC
10685 }
10686}
10687
9987f0c1
IC
10688function ReadableState(options, stream) {
10689 Duplex = Duplex || require('./_stream_duplex');
8b095871 10690
9987f0c1 10691 options = options || {};
8b095871 10692
9987f0c1
IC
10693 // object stream flag. Used to make read(n) ignore n and to
10694 // make all the buffer merging and length checks go away
10695 this.objectMode = !!options.objectMode;
8b095871 10696
9987f0c1 10697 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
8b095871 10698
9987f0c1
IC
10699 // the point at which it stops calling _read() to fill the buffer
10700 // Note: 0 is a valid value, means "don't call _read preemptively ever"
10701 var hwm = options.highWaterMark;
10702 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
10703 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
8b095871 10704
9987f0c1
IC
10705 // cast to ints.
10706 this.highWaterMark = Math.floor(this.highWaterMark);
8b095871 10707
9987f0c1
IC
10708 // A linked list is used to store data chunks instead of an array because the
10709 // linked list can remove elements from the beginning faster than
10710 // array.shift()
10711 this.buffer = new BufferList();
10712 this.length = 0;
10713 this.pipes = null;
10714 this.pipesCount = 0;
10715 this.flowing = null;
10716 this.ended = false;
10717 this.endEmitted = false;
10718 this.reading = false;
8b095871 10719
9987f0c1
IC
10720 // a flag to be able to tell if the event 'readable'/'data' is emitted
10721 // immediately, or on a later tick. We set this to true at first, because
10722 // any actions that shouldn't happen until "later" should generally also
10723 // not happen before the first read call.
10724 this.sync = true;
8b095871 10725
9987f0c1
IC
10726 // whenever we return null, then we set a flag to say
10727 // that we're awaiting a 'readable' event emission.
10728 this.needReadable = false;
10729 this.emittedReadable = false;
10730 this.readableListening = false;
10731 this.resumeScheduled = false;
8b095871 10732
9987f0c1
IC
10733 // has it been destroyed
10734 this.destroyed = false;
8b095871 10735
9987f0c1
IC
10736 // Crypto is kind of old and crusty. Historically, its default string
10737 // encoding is 'binary' so we have to make this configurable.
10738 // Everything else in the universe uses 'utf8', though.
10739 this.defaultEncoding = options.defaultEncoding || 'utf8';
8b095871 10740
9987f0c1
IC
10741 // the number of writers that are awaiting a drain event in .pipe()s
10742 this.awaitDrain = 0;
8b095871 10743
9987f0c1
IC
10744 // if true, a maybeReadMore has been scheduled
10745 this.readingMore = false;
8b095871 10746
9987f0c1
IC
10747 this.decoder = null;
10748 this.encoding = null;
10749 if (options.encoding) {
10750 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
10751 this.decoder = new StringDecoder(options.encoding);
10752 this.encoding = options.encoding;
8b095871 10753 }
8b095871
IC
10754}
10755
9987f0c1
IC
10756function Readable(options) {
10757 Duplex = Duplex || require('./_stream_duplex');
8b095871 10758
9987f0c1 10759 if (!(this instanceof Readable)) return new Readable(options);
8b095871 10760
9987f0c1 10761 this._readableState = new ReadableState(options, this);
8b095871 10762
9987f0c1
IC
10763 // legacy
10764 this.readable = true;
10765
10766 if (options) {
10767 if (typeof options.read === 'function') this._read = options.read;
10768
10769 if (typeof options.destroy === 'function') this._destroy = options.destroy;
8b095871
IC
10770 }
10771
9987f0c1
IC
10772 Stream.call(this);
10773}
8b095871 10774
9987f0c1
IC
10775Object.defineProperty(Readable.prototype, 'destroyed', {
10776 get: function () {
10777 if (this._readableState === undefined) {
10778 return false;
10779 }
10780 return this._readableState.destroyed;
10781 },
10782 set: function (value) {
10783 // we ignore the value if the stream
10784 // has not been initialized yet
10785 if (!this._readableState) {
10786 return;
8b095871 10787 }
9987f0c1
IC
10788
10789 // backward compatibility, the user is explicitly
10790 // managing destroyed
10791 this._readableState.destroyed = value;
8b095871 10792 }
9987f0c1 10793});
8b095871 10794
9987f0c1
IC
10795Readable.prototype.destroy = destroyImpl.destroy;
10796Readable.prototype._undestroy = destroyImpl.undestroy;
10797Readable.prototype._destroy = function (err, cb) {
10798 this.push(null);
10799 cb(err);
10800};
8b095871 10801
9987f0c1
IC
10802// Manually shove something into the read() buffer.
10803// This returns true if the highWaterMark has not been hit yet,
10804// similar to how Writable.write() returns true if you should
10805// write() some more.
10806Readable.prototype.push = function (chunk, encoding) {
10807 var state = this._readableState;
10808 var skipChunkCheck;
10809
10810 if (!state.objectMode) {
10811 if (typeof chunk === 'string') {
10812 encoding = encoding || state.defaultEncoding;
10813 if (encoding !== state.encoding) {
10814 chunk = Buffer.from(chunk, encoding);
10815 encoding = '';
10816 }
10817 skipChunkCheck = true;
10818 }
10819 } else {
10820 skipChunkCheck = true;
10821 }
8b095871 10822
9987f0c1
IC
10823 return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);
10824};
8b095871 10825
9987f0c1
IC
10826// Unshift should *always* be something directly out of read()
10827Readable.prototype.unshift = function (chunk) {
10828 return readableAddChunk(this, chunk, null, true, false);
10829};
8b095871 10830
9987f0c1
IC
10831function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {
10832 var state = stream._readableState;
10833 if (chunk === null) {
10834 state.reading = false;
10835 onEofChunk(stream, state);
10836 } else {
10837 var er;
10838 if (!skipChunkCheck) er = chunkInvalid(state, chunk);
10839 if (er) {
10840 stream.emit('error', er);
10841 } else if (state.objectMode || chunk && chunk.length > 0) {
10842 if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {
10843 chunk = _uint8ArrayToBuffer(chunk);
10844 }
10845
10846 if (addToFront) {
10847 if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);
10848 } else if (state.ended) {
10849 stream.emit('error', new Error('stream.push() after EOF'));
10850 } else {
10851 state.reading = false;
10852 if (state.decoder && !encoding) {
10853 chunk = state.decoder.write(chunk);
10854 if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);
10855 } else {
10856 addChunk(stream, state, chunk, false);
10857 }
10858 }
10859 } else if (!addToFront) {
10860 state.reading = false;
10861 }
8b095871
IC
10862 }
10863
9987f0c1 10864 return needMoreData(state);
8b095871
IC
10865}
10866
9987f0c1
IC
10867function addChunk(stream, state, chunk, addToFront) {
10868 if (state.flowing && state.length === 0 && !state.sync) {
10869 stream.emit('data', chunk);
10870 stream.read(0);
10871 } else {
10872 // update the buffer info.
10873 state.length += state.objectMode ? 1 : chunk.length;
10874 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
8b095871 10875
9987f0c1 10876 if (state.needReadable) emitReadable(stream);
8b095871 10877 }
9987f0c1 10878 maybeReadMore(stream, state);
8b095871
IC
10879}
10880
9987f0c1
IC
10881function chunkInvalid(state, chunk) {
10882 var er;
10883 if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
10884 er = new TypeError('Invalid non-string/buffer chunk');
10885 }
10886 return er;
8b095871
IC
10887}
10888
9987f0c1
IC
10889// if it's past the high water mark, we can push in some more.
10890// Also, if we have no data yet, we can stand some
10891// more bytes. This is to work around cases where hwm=0,
10892// such as the repl. Also, if the push() triggered a
10893// readable event, and the user called read(largeNumber) such that
10894// needReadable was set, then we ought to push more, so that another
10895// 'readable' event will be triggered.
10896function needMoreData(state) {
10897 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
8b095871
IC
10898}
10899
9987f0c1
IC
10900Readable.prototype.isPaused = function () {
10901 return this._readableState.flowing === false;
10902};
8b095871 10903
9987f0c1
IC
10904// backwards compatibility.
10905Readable.prototype.setEncoding = function (enc) {
10906 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
10907 this._readableState.decoder = new StringDecoder(enc);
10908 this._readableState.encoding = enc;
10909 return this;
10910};
8b095871 10911
9987f0c1
IC
10912// Don't raise the hwm > 8MB
10913var MAX_HWM = 0x800000;
10914function computeNewHighWaterMark(n) {
10915 if (n >= MAX_HWM) {
10916 n = MAX_HWM;
10917 } else {
10918 // Get the next highest power of 2 to prevent increasing hwm excessively in
10919 // tiny amounts
10920 n--;
10921 n |= n >>> 1;
10922 n |= n >>> 2;
10923 n |= n >>> 4;
10924 n |= n >>> 8;
10925 n |= n >>> 16;
10926 n++;
10927 }
10928 return n;
8b095871
IC
10929}
10930
9987f0c1
IC
10931// This function is designed to be inlinable, so please take care when making
10932// changes to the function body.
10933function howMuchToRead(n, state) {
10934 if (n <= 0 || state.length === 0 && state.ended) return 0;
10935 if (state.objectMode) return 1;
10936 if (n !== n) {
10937 // Only flow one buffer at a time
10938 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
10939 }
10940 // If we're asking for more than the current hwm, then raise the hwm.
10941 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
10942 if (n <= state.length) return n;
10943 // Don't have enough
10944 if (!state.ended) {
10945 state.needReadable = true;
10946 return 0;
10947 }
10948 return state.length;
8b095871
IC
10949}
10950
9987f0c1
IC
10951// you can override either this method, or the async _read(n) below.
10952Readable.prototype.read = function (n) {
10953 debug('read', n);
10954 n = parseInt(n, 10);
10955 var state = this._readableState;
10956 var nOrig = n;
8b095871 10957
9987f0c1
IC
10958 if (n !== 0) state.emittedReadable = false;
10959
10960 // if we're doing read(0) to trigger a readable event, but we
10961 // already have a bunch of data in the buffer, then just trigger
10962 // the 'readable' event and move on.
10963 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
10964 debug('read: emitReadable', state.length, state.ended);
10965 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
10966 return null;
8b095871 10967 }
8b095871 10968
9987f0c1 10969 n = howMuchToRead(n, state);
8b095871 10970
9987f0c1
IC
10971 // if we've ended, and we're now clear, then finish it up.
10972 if (n === 0 && state.ended) {
10973 if (state.length === 0) endReadable(this);
10974 return null;
10975 }
8b095871 10976
9987f0c1
IC
10977 // All the actual chunk generation logic needs to be
10978 // *below* the call to _read. The reason is that in certain
10979 // synthetic stream cases, such as passthrough streams, _read
10980 // may be a completely synchronous operation which may change
10981 // the state of the read buffer, providing enough data when
10982 // before there was *not* enough.
10983 //
10984 // So, the steps are:
10985 // 1. Figure out what the state of things will be after we do
10986 // a read from the buffer.
10987 //
10988 // 2. If that resulting state will trigger a _read, then call _read.
10989 // Note that this may be asynchronous, or synchronous. Yes, it is
10990 // deeply ugly to write APIs this way, but that still doesn't mean
10991 // that the Readable class should behave improperly, as streams are
10992 // designed to be sync/async agnostic.
10993 // Take note if the _read call is sync or async (ie, if the read call
10994 // has returned yet), so that we know whether or not it's safe to emit
10995 // 'readable' etc.
10996 //
10997 // 3. Actually pull the requested chunks out of the buffer and return.
8b095871 10998
9987f0c1
IC
10999 // if we need a readable event, then we need to do some reading.
11000 var doRead = state.needReadable;
11001 debug('need readable', doRead);
8b095871 11002
9987f0c1
IC
11003 // if we currently have less than the highWaterMark, then also read some
11004 if (state.length === 0 || state.length - n < state.highWaterMark) {
11005 doRead = true;
11006 debug('length less than watermark', doRead);
11007 }
8b095871 11008
9987f0c1
IC
11009 // however, if we've ended, then there's no point, and if we're already
11010 // reading, then it's unnecessary.
11011 if (state.ended || state.reading) {
11012 doRead = false;
11013 debug('reading or ended', doRead);
11014 } else if (doRead) {
11015 debug('do read');
11016 state.reading = true;
11017 state.sync = true;
11018 // if the length is currently zero, then we *need* a readable event.
11019 if (state.length === 0) state.needReadable = true;
11020 // call internal read method
11021 this._read(state.highWaterMark);
11022 state.sync = false;
11023 // If _read pushed data synchronously, then `reading` will be false,
11024 // and we need to re-evaluate how much data we can return to the user.
11025 if (!state.reading) n = howMuchToRead(nOrig, state);
11026 }
8b095871 11027
9987f0c1
IC
11028 var ret;
11029 if (n > 0) ret = fromList(n, state);else ret = null;
8b095871 11030
9987f0c1
IC
11031 if (ret === null) {
11032 state.needReadable = true;
11033 n = 0;
11034 } else {
11035 state.length -= n;
11036 }
8b095871 11037
9987f0c1
IC
11038 if (state.length === 0) {
11039 // If we have nothing in the buffer, then we want to know
11040 // as soon as we *do* get something into the buffer.
11041 if (!state.ended) state.needReadable = true;
8b095871 11042
9987f0c1
IC
11043 // If we tried to read() past the EOF, then emit end on the next tick.
11044 if (nOrig !== n && state.ended) endReadable(this);
11045 }
8b095871 11046
9987f0c1 11047 if (ret !== null) this.emit('data', ret);
8b095871 11048
9987f0c1
IC
11049 return ret;
11050};
8b095871 11051
9987f0c1
IC
11052function onEofChunk(stream, state) {
11053 if (state.ended) return;
11054 if (state.decoder) {
11055 var chunk = state.decoder.end();
11056 if (chunk && chunk.length) {
11057 state.buffer.push(chunk);
11058 state.length += state.objectMode ? 1 : chunk.length;
11059 }
11060 }
11061 state.ended = true;
8b095871 11062
9987f0c1
IC
11063 // emit 'readable' now to make sure it gets picked up.
11064 emitReadable(stream);
8b095871
IC
11065}
11066
9987f0c1
IC
11067// Don't emit readable right away in sync mode, because this can trigger
11068// another read() call => stack overflow. This way, it might trigger
11069// a nextTick recursion warning, but that's not so bad.
11070function emitReadable(stream) {
11071 var state = stream._readableState;
11072 state.needReadable = false;
11073 if (!state.emittedReadable) {
11074 debug('emitReadable', state.flowing);
11075 state.emittedReadable = true;
11076 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
11077 }
8b095871
IC
11078}
11079
9987f0c1
IC
11080function emitReadable_(stream) {
11081 debug('emit readable');
11082 stream.emit('readable');
11083 flow(stream);
8b095871
IC
11084}
11085
9987f0c1
IC
11086// at this point, the user has presumably seen the 'readable' event,
11087// and called read() to consume some data. that may have triggered
11088// in turn another _read(n) call, in which case reading = true if
11089// it's in progress.
11090// However, if we're not ended, or reading, and the length < hwm,
11091// then go ahead and try to read some more preemptively.
11092function maybeReadMore(stream, state) {
11093 if (!state.readingMore) {
11094 state.readingMore = true;
11095 processNextTick(maybeReadMore_, stream, state);
11096 }
8b095871
IC
11097}
11098
9987f0c1
IC
11099function maybeReadMore_(stream, state) {
11100 var len = state.length;
11101 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
11102 debug('maybeReadMore read 0');
11103 stream.read(0);
11104 if (len === state.length)
11105 // didn't get any data, stop spinning.
11106 break;else len = state.length;
11107 }
11108 state.readingMore = false;
8b095871
IC
11109}
11110
9987f0c1
IC
11111// abstract method. to be overridden in specific implementation classes.
11112// call cb(er, data) where data is <= n in length.
11113// for virtual (non-string, non-buffer) streams, "length" is somewhat
11114// arbitrary, and perhaps not very meaningful.
11115Readable.prototype._read = function (n) {
11116 this.emit('error', new Error('_read() is not implemented'));
11117};
8b095871 11118
9987f0c1
IC
11119Readable.prototype.pipe = function (dest, pipeOpts) {
11120 var src = this;
11121 var state = this._readableState;
11122
11123 switch (state.pipesCount) {
11124 case 0:
11125 state.pipes = dest;
11126 break;
11127 case 1:
11128 state.pipes = [state.pipes, dest];
11129 break;
11130 default:
11131 state.pipes.push(dest);
11132 break;
8b095871 11133 }
9987f0c1
IC
11134 state.pipesCount += 1;
11135 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
8b095871 11136
9987f0c1 11137 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
8b095871 11138
9987f0c1
IC
11139 var endFn = doEnd ? onend : unpipe;
11140 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
8b095871 11141
9987f0c1
IC
11142 dest.on('unpipe', onunpipe);
11143 function onunpipe(readable, unpipeInfo) {
11144 debug('onunpipe');
11145 if (readable === src) {
11146 if (unpipeInfo && unpipeInfo.hasUnpiped === false) {
11147 unpipeInfo.hasUnpiped = true;
11148 cleanup();
11149 }
11150 }
8b095871
IC
11151 }
11152
9987f0c1
IC
11153 function onend() {
11154 debug('onend');
11155 dest.end();
11156 }
8b095871 11157
9987f0c1
IC
11158 // when the dest drains, it reduces the awaitDrain counter
11159 // on the source. This would be more elegant with a .once()
11160 // handler in flow(), but adding and removing repeatedly is
11161 // too slow.
11162 var ondrain = pipeOnDrain(src);
11163 dest.on('drain', ondrain);
8b095871 11164
9987f0c1
IC
11165 var cleanedUp = false;
11166 function cleanup() {
11167 debug('cleanup');
11168 // cleanup event handlers once the pipe is broken
11169 dest.removeListener('close', onclose);
11170 dest.removeListener('finish', onfinish);
11171 dest.removeListener('drain', ondrain);
11172 dest.removeListener('error', onerror);
11173 dest.removeListener('unpipe', onunpipe);
11174 src.removeListener('end', onend);
11175 src.removeListener('end', unpipe);
11176 src.removeListener('data', ondata);
8b095871 11177
9987f0c1
IC
11178 cleanedUp = true;
11179
11180 // if the reader is waiting for a drain event from this
11181 // specific writer, then it would cause it to never start
11182 // flowing again.
11183 // So, if this is awaiting a drain, then we just call it now.
11184 // If we don't know, then assume that we are waiting for one.
11185 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
8b095871 11186 }
8b095871 11187
9987f0c1
IC
11188 // If the user pushes more data while we're writing to dest then we'll end up
11189 // in ondata again. However, we only want to increase awaitDrain once because
11190 // dest will only emit one 'drain' event for the multiple writes.
11191 // => Introduce a guard on increasing awaitDrain.
11192 var increasedAwaitDrain = false;
11193 src.on('data', ondata);
11194 function ondata(chunk) {
11195 debug('ondata');
11196 increasedAwaitDrain = false;
11197 var ret = dest.write(chunk);
11198 if (false === ret && !increasedAwaitDrain) {
11199 // If the user unpiped during `dest.write()`, it is possible
11200 // to get stuck in a permanently paused state if that write
11201 // also returned false.
11202 // => Check whether `dest` is still a piping destination.
11203 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
11204 debug('false write response, pause', src._readableState.awaitDrain);
11205 src._readableState.awaitDrain++;
11206 increasedAwaitDrain = true;
11207 }
11208 src.pause();
11209 }
8b095871 11210 }
8b095871 11211
9987f0c1
IC
11212 // if the dest has an error, then stop piping into it.
11213 // however, don't suppress the throwing behavior for this.
11214 function onerror(er) {
11215 debug('onerror', er);
11216 unpipe();
11217 dest.removeListener('error', onerror);
11218 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
8b095871 11219 }
8b095871 11220
9987f0c1
IC
11221 // Make sure our error handler is attached before userland ones.
11222 prependListener(dest, 'error', onerror);
11223
11224 // Both close and finish should trigger unpipe, but only once.
11225 function onclose() {
11226 dest.removeListener('finish', onfinish);
11227 unpipe();
8b095871 11228 }
9987f0c1
IC
11229 dest.once('close', onclose);
11230 function onfinish() {
11231 debug('onfinish');
11232 dest.removeListener('close', onclose);
11233 unpipe();
11234 }
11235 dest.once('finish', onfinish);
8b095871 11236
9987f0c1
IC
11237 function unpipe() {
11238 debug('unpipe');
11239 src.unpipe(dest);
8b095871 11240 }
8b095871 11241
9987f0c1
IC
11242 // tell the dest that it's being piped to
11243 dest.emit('pipe', src);
8b095871 11244
9987f0c1
IC
11245 // start the flow if it hasn't been started already.
11246 if (!state.flowing) {
11247 debug('pipe resume');
11248 src.resume();
8b095871
IC
11249 }
11250
9987f0c1
IC
11251 return dest;
11252};
8b095871 11253
9987f0c1
IC
11254function pipeOnDrain(src) {
11255 return function () {
11256 var state = src._readableState;
11257 debug('pipeOnDrain', state.awaitDrain);
11258 if (state.awaitDrain) state.awaitDrain--;
11259 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
11260 state.flowing = true;
11261 flow(src);
11262 }
11263 };
8b095871
IC
11264}
11265
9987f0c1
IC
11266Readable.prototype.unpipe = function (dest) {
11267 var state = this._readableState;
11268 var unpipeInfo = { hasUnpiped: false };
8b095871 11269
9987f0c1
IC
11270 // if we're not piping anywhere, then do nothing.
11271 if (state.pipesCount === 0) return this;
8b095871 11272
9987f0c1
IC
11273 // just one destination. most common case.
11274 if (state.pipesCount === 1) {
11275 // passed in one, but it's not the right one.
11276 if (dest && dest !== state.pipes) return this;
11277
11278 if (!dest) dest = state.pipes;
11279
11280 // got a match.
11281 state.pipes = null;
11282 state.pipesCount = 0;
11283 state.flowing = false;
11284 if (dest) dest.emit('unpipe', this, unpipeInfo);
11285 return this;
8b095871
IC
11286 }
11287
9987f0c1 11288 // slow case. multiple pipe destinations.
8b095871 11289
9987f0c1
IC
11290 if (!dest) {
11291 // remove all.
11292 var dests = state.pipes;
11293 var len = state.pipesCount;
11294 state.pipes = null;
11295 state.pipesCount = 0;
11296 state.flowing = false;
8b095871 11297
9987f0c1
IC
11298 for (var i = 0; i < len; i++) {
11299 dests[i].emit('unpipe', this, unpipeInfo);
11300 }return this;
8b095871 11301 }
8b095871 11302
9987f0c1
IC
11303 // try to find the right one.
11304 var index = indexOf(state.pipes, dest);
11305 if (index === -1) return this;
8b095871 11306
9987f0c1
IC
11307 state.pipes.splice(index, 1);
11308 state.pipesCount -= 1;
11309 if (state.pipesCount === 1) state.pipes = state.pipes[0];
8b095871 11310
9987f0c1 11311 dest.emit('unpipe', this, unpipeInfo);
8b095871 11312
9987f0c1
IC
11313 return this;
11314};
8b095871 11315
9987f0c1
IC
11316// set up data events if they are asked for
11317// Ensure readable listeners eventually get something
11318Readable.prototype.on = function (ev, fn) {
11319 var res = Stream.prototype.on.call(this, ev, fn);
11320
11321 if (ev === 'data') {
11322 // Start flowing on next tick if stream isn't explicitly paused
11323 if (this._readableState.flowing !== false) this.resume();
11324 } else if (ev === 'readable') {
11325 var state = this._readableState;
11326 if (!state.endEmitted && !state.readableListening) {
11327 state.readableListening = state.needReadable = true;
11328 state.emittedReadable = false;
11329 if (!state.reading) {
11330 processNextTick(nReadingNextTick, this);
11331 } else if (state.length) {
11332 emitReadable(this);
11333 }
11334 }
8b095871 11335 }
8b095871 11336
9987f0c1
IC
11337 return res;
11338};
11339Readable.prototype.addListener = Readable.prototype.on;
8b095871 11340
9987f0c1
IC
11341function nReadingNextTick(self) {
11342 debug('readable nexttick read 0');
11343 self.read(0);
8b095871
IC
11344}
11345
9987f0c1
IC
11346// pause() and resume() are remnants of the legacy readable stream API
11347// If the user uses them, then switch into old mode.
11348Readable.prototype.resume = function () {
11349 var state = this._readableState;
11350 if (!state.flowing) {
11351 debug('resume');
11352 state.flowing = true;
11353 resume(this, state);
11354 }
11355 return this;
11356};
11357
11358function resume(stream, state) {
11359 if (!state.resumeScheduled) {
11360 state.resumeScheduled = true;
11361 processNextTick(resume_, stream, state);
8b095871 11362 }
8b095871
IC
11363}
11364
9987f0c1
IC
11365function resume_(stream, state) {
11366 if (!state.reading) {
11367 debug('resume read 0');
11368 stream.read(0);
11369 }
11370
11371 state.resumeScheduled = false;
11372 state.awaitDrain = 0;
11373 stream.emit('resume');
11374 flow(stream);
11375 if (state.flowing && !state.reading) stream.read(0);
8b095871
IC
11376}
11377
9987f0c1
IC
11378Readable.prototype.pause = function () {
11379 debug('call pause flowing=%j', this._readableState.flowing);
11380 if (false !== this._readableState.flowing) {
11381 debug('pause');
11382 this._readableState.flowing = false;
11383 this.emit('pause');
11384 }
11385 return this;
11386};
11387
11388function flow(stream) {
11389 var state = stream._readableState;
11390 debug('flow', state.flowing);
11391 while (state.flowing && stream.read() !== null) {}
8b095871
IC
11392}
11393
9987f0c1
IC
11394// wrap an old-style stream as the async data source.
11395// This is *not* part of the readable stream interface.
11396// It is an ugly unfortunate mess of history.
11397Readable.prototype.wrap = function (stream) {
11398 var state = this._readableState;
11399 var paused = false;
8b095871 11400
9987f0c1
IC
11401 var self = this;
11402 stream.on('end', function () {
11403 debug('wrapped end');
11404 if (state.decoder && !state.ended) {
11405 var chunk = state.decoder.end();
11406 if (chunk && chunk.length) self.push(chunk);
11407 }
8b095871 11408
9987f0c1
IC
11409 self.push(null);
11410 });
8b095871 11411
9987f0c1
IC
11412 stream.on('data', function (chunk) {
11413 debug('wrapped data');
11414 if (state.decoder) chunk = state.decoder.write(chunk);
8b095871 11415
9987f0c1
IC
11416 // don't skip over falsy values in objectMode
11417 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
8b095871 11418
9987f0c1
IC
11419 var ret = self.push(chunk);
11420 if (!ret) {
11421 paused = true;
11422 stream.pause();
8b095871 11423 }
9987f0c1
IC
11424 });
11425
11426 // proxy all the other methods.
11427 // important when wrapping filters and duplexes.
11428 for (var i in stream) {
11429 if (this[i] === undefined && typeof stream[i] === 'function') {
11430 this[i] = function (method) {
11431 return function () {
11432 return stream[method].apply(stream, arguments);
11433 };
11434 }(i);
8b095871 11435 }
8b095871
IC
11436 }
11437
9987f0c1
IC
11438 // proxy certain important events.
11439 for (var n = 0; n < kProxyEvents.length; n++) {
11440 stream.on(kProxyEvents[n], self.emit.bind(self, kProxyEvents[n]));
11441 }
8b095871 11442
9987f0c1
IC
11443 // when we try to consume some more bytes, simply unpause the
11444 // underlying stream.
11445 self._read = function (n) {
11446 debug('wrapped _read', n);
11447 if (paused) {
11448 paused = false;
11449 stream.resume();
11450 }
11451 };
8b095871 11452
9987f0c1
IC
11453 return self;
11454};
8b095871 11455
9987f0c1
IC
11456// exposed for testing purposes only.
11457Readable._fromList = fromList;
8b095871 11458
9987f0c1
IC
11459// Pluck off n bytes from an array of buffers.
11460// Length is the combined lengths of all the buffers in the list.
11461// This function is designed to be inlinable, so please take care when making
11462// changes to the function body.
11463function fromList(n, state) {
11464 // nothing buffered
11465 if (state.length === 0) return null;
8b095871 11466
9987f0c1
IC
11467 var ret;
11468 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
11469 // read it all, truncate the list
11470 if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);
11471 state.buffer.clear();
8b095871 11472 } else {
9987f0c1
IC
11473 // read part of list
11474 ret = fromListPartial(n, state.buffer, state.decoder);
8b095871
IC
11475 }
11476
9987f0c1 11477 return ret;
8b095871
IC
11478}
11479
9987f0c1
IC
11480// Extracts only enough buffered data to satisfy the amount requested.
11481// This function is designed to be inlinable, so please take care when making
11482// changes to the function body.
11483function fromListPartial(n, list, hasStrings) {
11484 var ret;
11485 if (n < list.head.data.length) {
11486 // slice is the same for buffers and strings
11487 ret = list.head.data.slice(0, n);
11488 list.head.data = list.head.data.slice(n);
11489 } else if (n === list.head.data.length) {
11490 // first chunk is a perfect match
11491 ret = list.shift();
8b095871 11492 } else {
9987f0c1
IC
11493 // result spans more than one buffer
11494 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
8b095871 11495 }
9987f0c1 11496 return ret;
8b095871
IC
11497}
11498
9987f0c1
IC
11499// Copies a specified amount of characters from the list of buffered data
11500// chunks.
11501// This function is designed to be inlinable, so please take care when making
11502// changes to the function body.
11503function copyFromBufferString(n, list) {
11504 var p = list.head;
11505 var c = 1;
11506 var ret = p.data;
11507 n -= ret.length;
11508 while (p = p.next) {
11509 var str = p.data;
11510 var nb = n > str.length ? str.length : n;
11511 if (nb === str.length) ret += str;else ret += str.slice(0, n);
11512 n -= nb;
11513 if (n === 0) {
11514 if (nb === str.length) {
11515 ++c;
11516 if (p.next) list.head = p.next;else list.head = list.tail = null;
11517 } else {
11518 list.head = p;
11519 p.data = str.slice(nb);
11520 }
11521 break;
11522 }
11523 ++c;
8b095871 11524 }
9987f0c1
IC
11525 list.length -= c;
11526 return ret;
8b095871
IC
11527}
11528
9987f0c1
IC
11529// Copies a specified amount of bytes from the list of buffered data chunks.
11530// This function is designed to be inlinable, so please take care when making
11531// changes to the function body.
11532function copyFromBuffer(n, list) {
11533 var ret = Buffer.allocUnsafe(n);
11534 var p = list.head;
11535 var c = 1;
11536 p.data.copy(ret);
11537 n -= p.data.length;
11538 while (p = p.next) {
11539 var buf = p.data;
11540 var nb = n > buf.length ? buf.length : n;
11541 buf.copy(ret, ret.length - n, 0, nb);
11542 n -= nb;
11543 if (n === 0) {
11544 if (nb === buf.length) {
11545 ++c;
11546 if (p.next) list.head = p.next;else list.head = list.tail = null;
11547 } else {
11548 list.head = p;
11549 p.data = buf.slice(nb);
8b095871 11550 }
9987f0c1 11551 break;
8b095871 11552 }
9987f0c1 11553 ++c;
8b095871 11554 }
9987f0c1
IC
11555 list.length -= c;
11556 return ret;
8b095871
IC
11557}
11558
9987f0c1
IC
11559function endReadable(stream) {
11560 var state = stream._readableState;
8b095871 11561
9987f0c1
IC
11562 // If we get here before consuming all the bytes, then that is a
11563 // bug in node. Should never happen.
11564 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
8b095871 11565
9987f0c1
IC
11566 if (!state.endEmitted) {
11567 state.ended = true;
11568 processNextTick(endReadableNT, state, stream);
8b095871 11569 }
9987f0c1 11570}
8b095871 11571
9987f0c1
IC
11572function endReadableNT(state, stream) {
11573 // Check that we didn't get one last unshift.
11574 if (!state.endEmitted && state.length === 0) {
11575 state.endEmitted = true;
11576 stream.readable = false;
11577 stream.emit('end');
11578 }
8b095871
IC
11579}
11580
9987f0c1
IC
11581function forEach(xs, f) {
11582 for (var i = 0, l = xs.length; i < l; i++) {
11583 f(xs[i], i);
11584 }
8b095871
IC
11585}
11586
9987f0c1
IC
11587function indexOf(xs, x) {
11588 for (var i = 0, l = xs.length; i < l; i++) {
11589 if (xs[i] === x) return i;
8b095871 11590 }
9987f0c1 11591 return -1;
8b095871 11592}
9987f0c1
IC
11593}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
11594},{"./_stream_duplex":14,"./internal/streams/BufferList":19,"./internal/streams/destroy":20,"./internal/streams/stream":21,"_process":12,"core-util-is":5,"events":6,"inherits":8,"isarray":10,"process-nextick-args":11,"safe-buffer":26,"string_decoder/":28,"util":3}],17:[function(require,module,exports){
11595// Copyright Joyent, Inc. and other Node contributors.
11596//
11597// Permission is hereby granted, free of charge, to any person obtaining a
11598// copy of this software and associated documentation files (the
11599// "Software"), to deal in the Software without restriction, including
11600// without limitation the rights to use, copy, modify, merge, publish,
11601// distribute, sublicense, and/or sell copies of the Software, and to permit
11602// persons to whom the Software is furnished to do so, subject to the
11603// following conditions:
11604//
11605// The above copyright notice and this permission notice shall be included
11606// in all copies or substantial portions of the Software.
11607//
11608// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11609// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
11610// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
11611// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
11612// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
11613// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
11614// USE OR OTHER DEALINGS IN THE SOFTWARE.
8b095871 11615
9987f0c1
IC
11616// a transform stream is a readable/writable stream where you do
11617// something with the data. Sometimes it's called a "filter",
11618// but that's not a great name for it, since that implies a thing where
11619// some bits pass through, and others are simply ignored. (That would
11620// be a valid example of a transform, of course.)
11621//
11622// While the output is causally related to the input, it's not a
11623// necessarily symmetric or synchronous transformation. For example,
11624// a zlib stream might take multiple plain-text writes(), and then
11625// emit a single compressed chunk some time in the future.
11626//
11627// Here's how this works:
11628//
11629// The Transform stream has all the aspects of the readable and writable
11630// stream classes. When you write(chunk), that calls _write(chunk,cb)
11631// internally, and returns false if there's a lot of pending writes
11632// buffered up. When you call read(), that calls _read(n) until
11633// there's enough pending readable data buffered up.
11634//
11635// In a transform stream, the written data is placed in a buffer. When
11636// _read(n) is called, it transforms the queued up data, calling the
11637// buffered _write cb's as it consumes chunks. If consuming a single
11638// written chunk would result in multiple output chunks, then the first
11639// outputted bit calls the readcb, and subsequent chunks just go into
11640// the read buffer, and will cause it to emit 'readable' if necessary.
11641//
11642// This way, back-pressure is actually determined by the reading side,
11643// since _read has to be called to start processing a new chunk. However,
11644// a pathological inflate type of transform can cause excessive buffering
11645// here. For example, imagine a stream where every byte of input is
11646// interpreted as an integer from 0-255, and then results in that many
11647// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
11648// 1kb of data being output. In this case, you could write a very small
11649// amount of input, and end up with a very large amount of output. In
11650// such a pathological inflating mechanism, there'd be no way to tell
11651// the system to stop doing the transform. A single 4MB write could
11652// cause the system to run out of memory.
11653//
11654// However, even in such a pathological case, only a single written chunk
11655// would be consumed, and then the rest would wait (un-transformed) until
11656// the results of the previous transformed chunk were consumed.
8b095871 11657
9987f0c1 11658'use strict';
8b095871 11659
9987f0c1 11660module.exports = Transform;
8b095871 11661
9987f0c1 11662var Duplex = require('./_stream_duplex');
8b095871 11663
9987f0c1
IC
11664/*<replacement>*/
11665var util = require('core-util-is');
11666util.inherits = require('inherits');
11667/*</replacement>*/
8b095871 11668
9987f0c1 11669util.inherits(Transform, Duplex);
8b095871 11670
9987f0c1
IC
11671function TransformState(stream) {
11672 this.afterTransform = function (er, data) {
11673 return afterTransform(stream, er, data);
11674 };
8b095871 11675
9987f0c1
IC
11676 this.needTransform = false;
11677 this.transforming = false;
11678 this.writecb = null;
11679 this.writechunk = null;
11680 this.writeencoding = null;
11681}
8b095871 11682
9987f0c1
IC
11683function afterTransform(stream, er, data) {
11684 var ts = stream._transformState;
11685 ts.transforming = false;
8b095871 11686
9987f0c1 11687 var cb = ts.writecb;
8b095871 11688
9987f0c1
IC
11689 if (!cb) {
11690 return stream.emit('error', new Error('write callback called multiple times'));
11691 }
8b095871 11692
9987f0c1
IC
11693 ts.writechunk = null;
11694 ts.writecb = null;
8b095871 11695
9987f0c1 11696 if (data !== null && data !== undefined) stream.push(data);
8b095871 11697
9987f0c1 11698 cb(er);
8b095871 11699
9987f0c1
IC
11700 var rs = stream._readableState;
11701 rs.reading = false;
11702 if (rs.needReadable || rs.length < rs.highWaterMark) {
11703 stream._read(rs.highWaterMark);
11704 }
11705}
8b095871 11706
9987f0c1
IC
11707function Transform(options) {
11708 if (!(this instanceof Transform)) return new Transform(options);
8b095871 11709
9987f0c1 11710 Duplex.call(this, options);
8b095871 11711
9987f0c1 11712 this._transformState = new TransformState(this);
8b095871 11713
9987f0c1 11714 var stream = this;
8b095871 11715
9987f0c1
IC
11716 // start out asking for a readable event once data is transformed.
11717 this._readableState.needReadable = true;
8b095871 11718
9987f0c1
IC
11719 // we have implemented the _read method, and done the other things
11720 // that Readable wants before the first _read call, so unset the
11721 // sync guard flag.
11722 this._readableState.sync = false;
8b095871 11723
9987f0c1
IC
11724 if (options) {
11725 if (typeof options.transform === 'function') this._transform = options.transform;
8b095871 11726
9987f0c1 11727 if (typeof options.flush === 'function') this._flush = options.flush;
8b095871 11728 }
8b095871 11729
9987f0c1
IC
11730 // When the writable side finishes, then flush out anything remaining.
11731 this.once('prefinish', function () {
11732 if (typeof this._flush === 'function') this._flush(function (er, data) {
11733 done(stream, er, data);
11734 });else done(stream);
11735 });
11736}
8b095871 11737
9987f0c1
IC
11738Transform.prototype.push = function (chunk, encoding) {
11739 this._transformState.needTransform = false;
11740 return Duplex.prototype.push.call(this, chunk, encoding);
11741};
8b095871 11742
9987f0c1
IC
11743// This is the part where you do stuff!
11744// override this function in implementation classes.
11745// 'chunk' is an input chunk.
11746//
11747// Call `push(newChunk)` to pass along transformed output
11748// to the readable side. You may call 'push' zero or more times.
11749//
11750// Call `cb(err)` when you are done with this chunk. If you pass
11751// an error, then that'll put the hurt on the whole operation. If you
11752// never call cb(), then you'll never get another chunk.
11753Transform.prototype._transform = function (chunk, encoding, cb) {
11754 throw new Error('_transform() is not implemented');
11755};
8b095871 11756
9987f0c1
IC
11757Transform.prototype._write = function (chunk, encoding, cb) {
11758 var ts = this._transformState;
11759 ts.writecb = cb;
11760 ts.writechunk = chunk;
11761 ts.writeencoding = encoding;
11762 if (!ts.transforming) {
11763 var rs = this._readableState;
11764 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
8b095871 11765 }
9987f0c1 11766};
8b095871 11767
9987f0c1
IC
11768// Doesn't matter what the args are here.
11769// _transform does all the work.
11770// That we got here means that the readable side wants more data.
11771Transform.prototype._read = function (n) {
11772 var ts = this._transformState;
8b095871 11773
9987f0c1
IC
11774 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
11775 ts.transforming = true;
11776 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
11777 } else {
11778 // mark that we need a transform, so that any data that comes in
11779 // will get processed, now that we've asked for it.
11780 ts.needTransform = true;
11781 }
11782};
8b095871 11783
9987f0c1
IC
11784Transform.prototype._destroy = function (err, cb) {
11785 var _this = this;
8b095871 11786
9987f0c1
IC
11787 Duplex.prototype._destroy.call(this, err, function (err2) {
11788 cb(err2);
11789 _this.emit('close');
11790 });
11791};
8b095871 11792
9987f0c1
IC
11793function done(stream, er, data) {
11794 if (er) return stream.emit('error', er);
8b095871 11795
9987f0c1 11796 if (data !== null && data !== undefined) stream.push(data);
8b095871 11797
9987f0c1
IC
11798 // if there's nothing in the write buffer, then that means
11799 // that nothing more will ever be provided
11800 var ws = stream._writableState;
11801 var ts = stream._transformState;
8b095871 11802
9987f0c1 11803 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
8b095871 11804
9987f0c1
IC
11805 if (ts.transforming) throw new Error('Calling transform done when still transforming');
11806
11807 return stream.push(null);
11808}
11809},{"./_stream_duplex":14,"core-util-is":5,"inherits":8}],18:[function(require,module,exports){
11810(function (process,global){
8b095871
IC
11811// Copyright Joyent, Inc. and other Node contributors.
11812//
11813// Permission is hereby granted, free of charge, to any person obtaining a
11814// copy of this software and associated documentation files (the
11815// "Software"), to deal in the Software without restriction, including
11816// without limitation the rights to use, copy, modify, merge, publish,
11817// distribute, sublicense, and/or sell copies of the Software, and to permit
11818// persons to whom the Software is furnished to do so, subject to the
11819// following conditions:
11820//
11821// The above copyright notice and this permission notice shall be included
11822// in all copies or substantial portions of the Software.
11823//
11824// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11825// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
11826// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
11827// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
11828// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
11829// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
11830// USE OR OTHER DEALINGS IN THE SOFTWARE.
11831
9987f0c1
IC
11832// A bit simpler than readable streams.
11833// Implement an async ._write(chunk, encoding, cb), and it'll handle all
11834// the drain event emission and buffering.
11835
11836'use strict';
11837
11838/*<replacement>*/
11839
11840var processNextTick = require('process-nextick-args');
11841/*</replacement>*/
11842
11843module.exports = Writable;
11844
11845/* <replacement> */
11846function WriteReq(chunk, encoding, cb) {
11847 this.chunk = chunk;
11848 this.encoding = encoding;
11849 this.callback = cb;
11850 this.next = null;
8b095871 11851}
8b095871 11852
9987f0c1
IC
11853// It seems a linked list but it is not
11854// there will be only 2 of these for each stream
11855function CorkedRequest(state) {
11856 var _this = this;
8b095871 11857
9987f0c1
IC
11858 this.next = null;
11859 this.entry = null;
11860 this.finish = function () {
11861 onCorkedFinish(_this, state);
11862 };
11863}
11864/* </replacement> */
8b095871 11865
9987f0c1
IC
11866/*<replacement>*/
11867var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
11868/*</replacement>*/
8b095871 11869
9987f0c1
IC
11870/*<replacement>*/
11871var Duplex;
11872/*</replacement>*/
11873
11874Writable.WritableState = WritableState;
11875
11876/*<replacement>*/
11877var util = require('core-util-is');
11878util.inherits = require('inherits');
11879/*</replacement>*/
11880
11881/*<replacement>*/
11882var internalUtil = {
11883 deprecate: require('util-deprecate')
8b095871 11884};
9987f0c1 11885/*</replacement>*/
8b095871 11886
9987f0c1
IC
11887/*<replacement>*/
11888var Stream = require('./internal/streams/stream');
11889/*</replacement>*/
8b095871 11890
9987f0c1
IC
11891/*<replacement>*/
11892var Buffer = require('safe-buffer').Buffer;
11893var OurUint8Array = global.Uint8Array || function () {};
11894function _uint8ArrayToBuffer(chunk) {
11895 return Buffer.from(chunk);
11896}
11897function _isUint8Array(obj) {
11898 return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
11899}
11900/*</replacement>*/
8b095871 11901
9987f0c1 11902var destroyImpl = require('./internal/streams/destroy');
8b095871 11903
9987f0c1 11904util.inherits(Writable, Stream);
8b095871 11905
9987f0c1 11906function nop() {}
8b095871 11907
9987f0c1
IC
11908function WritableState(options, stream) {
11909 Duplex = Duplex || require('./_stream_duplex');
8b095871 11910
9987f0c1 11911 options = options || {};
8b095871 11912
9987f0c1
IC
11913 // object stream flag to indicate whether or not this stream
11914 // contains buffers or objects.
11915 this.objectMode = !!options.objectMode;
8b095871 11916
9987f0c1 11917 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
8b095871 11918
9987f0c1
IC
11919 // the point at which write() starts returning false
11920 // Note: 0 is a valid value, means that we always return false if
11921 // the entire buffer is not flushed immediately on write()
11922 var hwm = options.highWaterMark;
11923 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
11924 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
8b095871 11925
9987f0c1
IC
11926 // cast to ints.
11927 this.highWaterMark = Math.floor(this.highWaterMark);
8b095871 11928
9987f0c1
IC
11929 // if _final has been called
11930 this.finalCalled = false;
8b095871 11931
9987f0c1
IC
11932 // drain event flag.
11933 this.needDrain = false;
11934 // at the start of calling end()
11935 this.ending = false;
11936 // when end() has been called, and returned
11937 this.ended = false;
11938 // when 'finish' is emitted
11939 this.finished = false;
8b095871 11940
9987f0c1
IC
11941 // has it been destroyed
11942 this.destroyed = false;
8b095871 11943
9987f0c1
IC
11944 // should we decode strings into buffers before passing to _write?
11945 // this is here so that some node-core streams can optimize string
11946 // handling at a lower level.
11947 var noDecode = options.decodeStrings === false;
11948 this.decodeStrings = !noDecode;
8b095871 11949
9987f0c1
IC
11950 // Crypto is kind of old and crusty. Historically, its default string
11951 // encoding is 'binary' so we have to make this configurable.
11952 // Everything else in the universe uses 'utf8', though.
11953 this.defaultEncoding = options.defaultEncoding || 'utf8';
8b095871 11954
9987f0c1
IC
11955 // not an actual buffer we keep track of, but a measurement
11956 // of how much we're waiting to get pushed to some underlying
11957 // socket or file.
11958 this.length = 0;
8b095871 11959
9987f0c1
IC
11960 // a flag to see when we're in the middle of a write.
11961 this.writing = false;
8b095871 11962
9987f0c1
IC
11963 // when true all writes will be buffered until .uncork() call
11964 this.corked = 0;
8b095871 11965
9987f0c1
IC
11966 // a flag to be able to tell if the onwrite cb is called immediately,
11967 // or on a later tick. We set this to true at first, because any
11968 // actions that shouldn't happen until "later" should generally also
11969 // not happen before the first write call.
11970 this.sync = true;
8b095871 11971
9987f0c1
IC
11972 // a flag to know if we're processing previously buffered items, which
11973 // may call the _write() callback in the same tick, so that we don't
11974 // end up in an overlapped onwrite situation.
11975 this.bufferProcessing = false;
8b095871 11976
9987f0c1
IC
11977 // the callback that's passed to _write(chunk,cb)
11978 this.onwrite = function (er) {
11979 onwrite(stream, er);
11980 };
8b095871 11981
9987f0c1
IC
11982 // the callback that the user supplies to write(chunk,encoding,cb)
11983 this.writecb = null;
8b095871 11984
9987f0c1
IC
11985 // the amount that is being written when _write is called.
11986 this.writelen = 0;
8b095871 11987
9987f0c1
IC
11988 this.bufferedRequest = null;
11989 this.lastBufferedRequest = null;
8b095871 11990
9987f0c1
IC
11991 // number of pending user-supplied write callbacks
11992 // this must be 0 before 'finish' can be emitted
11993 this.pendingcb = 0;
8b095871 11994
9987f0c1
IC
11995 // emit prefinish if the only thing we're waiting for is _write cbs
11996 // This is relevant for synchronous Transform streams
11997 this.prefinished = false;
8b095871 11998
9987f0c1
IC
11999 // True if the error was already emitted and should not be thrown again
12000 this.errorEmitted = false;
8b095871 12001
9987f0c1
IC
12002 // count buffered requests
12003 this.bufferedRequestCount = 0;
8b095871 12004
9987f0c1
IC
12005 // allocate the first CorkedRequest, there is always
12006 // one allocated and free to use, and we maintain at most two
12007 this.corkedRequestsFree = new CorkedRequest(this);
12008}
8b095871 12009
9987f0c1
IC
12010WritableState.prototype.getBuffer = function getBuffer() {
12011 var current = this.bufferedRequest;
12012 var out = [];
12013 while (current) {
12014 out.push(current);
12015 current = current.next;
12016 }
12017 return out;
12018};
12019
12020(function () {
12021 try {
12022 Object.defineProperty(WritableState.prototype, 'buffer', {
12023 get: internalUtil.deprecate(function () {
12024 return this.getBuffer();
12025 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')
12026 });
12027 } catch (_) {}
12028})();
12029
12030// Test _writableState for inheritance to account for Duplex streams,
12031// whose prototype chain only points to Readable.
12032var realHasInstance;
12033if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
12034 realHasInstance = Function.prototype[Symbol.hasInstance];
12035 Object.defineProperty(Writable, Symbol.hasInstance, {
12036 value: function (object) {
12037 if (realHasInstance.call(this, object)) return true;
12038
12039 return object && object._writableState instanceof WritableState;
8b095871 12040 }
9987f0c1
IC
12041 });
12042} else {
12043 realHasInstance = function (object) {
12044 return object instanceof this;
12045 };
12046}
8b095871 12047
9987f0c1
IC
12048function Writable(options) {
12049 Duplex = Duplex || require('./_stream_duplex');
12050
12051 // Writable ctor is applied to Duplexes, too.
12052 // `realHasInstance` is necessary because using plain `instanceof`
12053 // would return false, as no `_writableState` property is attached.
12054
12055 // Trying to use the custom `instanceof` for Writable here will also break the
12056 // Node.js LazyTransform implementation, which has a non-trivial getter for
12057 // `_writableState` that would lead to infinite recursion.
12058 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
12059 return new Writable(options);
8b095871
IC
12060 }
12061
9987f0c1
IC
12062 this._writableState = new WritableState(options, this);
12063
12064 // legacy.
12065 this.writable = true;
12066
12067 if (options) {
12068 if (typeof options.write === 'function') this._write = options.write;
12069
12070 if (typeof options.writev === 'function') this._writev = options.writev;
12071
12072 if (typeof options.destroy === 'function') this._destroy = options.destroy;
12073
12074 if (typeof options.final === 'function') this._final = options.final;
12075 }
12076
12077 Stream.call(this);
12078}
12079
12080// Otherwise people can pipe Writable streams, which is just wrong.
12081Writable.prototype.pipe = function () {
12082 this.emit('error', new Error('Cannot pipe, not readable'));
8b095871
IC
12083};
12084
9987f0c1
IC
12085function writeAfterEnd(stream, cb) {
12086 var er = new Error('write after end');
12087 // TODO: defer error events consistently everywhere, not just the cb
12088 stream.emit('error', er);
12089 processNextTick(cb, er);
12090}
8b095871 12091
9987f0c1
IC
12092// Checks that a user-supplied chunk is valid, especially for the particular
12093// mode the stream is in. Currently this means that `null` is never accepted
12094// and undefined/non-string values are only allowed in object mode.
12095function validChunk(stream, state, chunk, cb) {
12096 var valid = true;
12097 var er = false;
8b095871 12098
9987f0c1
IC
12099 if (chunk === null) {
12100 er = new TypeError('May not write null values to stream');
12101 } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
12102 er = new TypeError('Invalid non-string/buffer chunk');
12103 }
12104 if (er) {
12105 stream.emit('error', er);
12106 processNextTick(cb, er);
12107 valid = false;
8b095871 12108 }
9987f0c1
IC
12109 return valid;
12110}
8b095871 12111
9987f0c1
IC
12112Writable.prototype.write = function (chunk, encoding, cb) {
12113 var state = this._writableState;
12114 var ret = false;
12115 var isBuf = _isUint8Array(chunk) && !state.objectMode;
12116
12117 if (isBuf && !Buffer.isBuffer(chunk)) {
12118 chunk = _uint8ArrayToBuffer(chunk);
8b095871
IC
12119 }
12120
9987f0c1
IC
12121 if (typeof encoding === 'function') {
12122 cb = encoding;
12123 encoding = null;
12124 }
8b095871 12125
9987f0c1
IC
12126 if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
12127
12128 if (typeof cb !== 'function') cb = nop;
12129
12130 if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
12131 state.pendingcb++;
12132 ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
8b095871 12133 }
8b095871 12134
9987f0c1 12135 return ret;
8b095871
IC
12136};
12137
9987f0c1
IC
12138Writable.prototype.cork = function () {
12139 var state = this._writableState;
12140
12141 state.corked++;
8b095871
IC
12142};
12143
9987f0c1
IC
12144Writable.prototype.uncork = function () {
12145 var state = this._writableState;
12146
12147 if (state.corked) {
12148 state.corked--;
12149
12150 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
12151 }
8b095871
IC
12152};
12153
9987f0c1
IC
12154Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
12155 // node::ParseEncoding() requires lower case.
12156 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
12157 if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);
12158 this._writableState.defaultEncoding = encoding;
12159 return this;
12160};
8b095871 12161
9987f0c1
IC
12162function decodeChunk(state, chunk, encoding) {
12163 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
12164 chunk = Buffer.from(chunk, encoding);
12165 }
12166 return chunk;
8b095871
IC
12167}
12168
9987f0c1
IC
12169// if we're already writing something, then just put this
12170// in the queue, and wait our turn. Otherwise, call _write
12171// If we return false, then we need a drain event, so set that flag.
12172function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
12173 if (!isBuf) {
12174 var newChunk = decodeChunk(state, chunk, encoding);
12175 if (chunk !== newChunk) {
12176 isBuf = true;
12177 encoding = 'buffer';
12178 chunk = newChunk;
12179 }
12180 }
12181 var len = state.objectMode ? 1 : chunk.length;
8b095871 12182
9987f0c1 12183 state.length += len;
8b095871 12184
9987f0c1
IC
12185 var ret = state.length < state.highWaterMark;
12186 // we must ensure that previous needDrain will not be reset to false.
12187 if (!ret) state.needDrain = true;
12188
12189 if (state.writing || state.corked) {
12190 var last = state.lastBufferedRequest;
12191 state.lastBufferedRequest = {
12192 chunk: chunk,
12193 encoding: encoding,
12194 isBuf: isBuf,
12195 callback: cb,
12196 next: null
12197 };
12198 if (last) {
12199 last.next = state.lastBufferedRequest;
12200 } else {
12201 state.bufferedRequest = state.lastBufferedRequest;
12202 }
12203 state.bufferedRequestCount += 1;
12204 } else {
12205 doWrite(stream, state, false, len, chunk, encoding, cb);
8b095871 12206 }
9987f0c1
IC
12207
12208 return ret;
8b095871
IC
12209}
12210
9987f0c1
IC
12211function doWrite(stream, state, writev, len, chunk, encoding, cb) {
12212 state.writelen = len;
12213 state.writecb = cb;
12214 state.writing = true;
12215 state.sync = true;
12216 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
12217 state.sync = false;
12218}
8b095871 12219
9987f0c1
IC
12220function onwriteError(stream, state, sync, er, cb) {
12221 --state.pendingcb;
8b095871 12222
9987f0c1
IC
12223 if (sync) {
12224 // defer the callback if we are being called synchronously
12225 // to avoid piling up things on the stack
12226 processNextTick(cb, er);
12227 // this can emit finish, and it will always happen
12228 // after error
12229 processNextTick(finishMaybe, stream, state);
12230 stream._writableState.errorEmitted = true;
12231 stream.emit('error', er);
12232 } else {
12233 // the caller expect this to happen before if
12234 // it is async
12235 cb(er);
12236 stream._writableState.errorEmitted = true;
12237 stream.emit('error', er);
12238 // this can emit finish, but finish must
12239 // always follow error
12240 finishMaybe(stream, state);
12241 }
12242}
8b095871 12243
9987f0c1
IC
12244function onwriteStateUpdate(state) {
12245 state.writing = false;
12246 state.writecb = null;
12247 state.length -= state.writelen;
12248 state.writelen = 0;
8b095871
IC
12249}
12250
9987f0c1
IC
12251function onwrite(stream, er) {
12252 var state = stream._writableState;
12253 var sync = state.sync;
12254 var cb = state.writecb;
8b095871 12255
9987f0c1 12256 onwriteStateUpdate(state);
8b095871 12257
9987f0c1
IC
12258 if (er) onwriteError(stream, state, sync, er, cb);else {
12259 // Check if we're actually ready to finish, but don't emit yet
12260 var finished = needFinish(state);
12261
12262 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
12263 clearBuffer(stream, state);
8b095871 12264 }
9987f0c1
IC
12265
12266 if (sync) {
12267 /*<replacement>*/
12268 asyncWrite(afterWrite, stream, state, finished, cb);
12269 /*</replacement>*/
12270 } else {
12271 afterWrite(stream, state, finished, cb);
8b095871 12272 }
9987f0c1
IC
12273 }
12274}
8b095871 12275
9987f0c1
IC
12276function afterWrite(stream, state, finished, cb) {
12277 if (!finished) onwriteDrain(stream, state);
12278 state.pendingcb--;
12279 cb();
12280 finishMaybe(stream, state);
8b095871 12281}
8b095871 12282
9987f0c1
IC
12283// Must force callback to be called on nextTick, so that we don't
12284// emit 'drain' before the write() consumer gets the 'false' return
12285// value, and has a chance to attach a 'drain' listener.
12286function onwriteDrain(stream, state) {
12287 if (state.length === 0 && state.needDrain) {
12288 state.needDrain = false;
12289 stream.emit('drain');
12290 }
12291}
8b095871 12292
9987f0c1
IC
12293// if there's something in the buffer waiting, then process it
12294function clearBuffer(stream, state) {
12295 state.bufferProcessing = true;
12296 var entry = state.bufferedRequest;
8b095871 12297
9987f0c1
IC
12298 if (stream._writev && entry && entry.next) {
12299 // Fast case, write everything using _writev()
12300 var l = state.bufferedRequestCount;
12301 var buffer = new Array(l);
12302 var holder = state.corkedRequestsFree;
12303 holder.entry = entry;
8b095871 12304
9987f0c1
IC
12305 var count = 0;
12306 var allBuffers = true;
12307 while (entry) {
12308 buffer[count] = entry;
12309 if (!entry.isBuf) allBuffers = false;
12310 entry = entry.next;
12311 count += 1;
12312 }
12313 buffer.allBuffers = allBuffers;
8b095871 12314
9987f0c1 12315 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
8b095871 12316
9987f0c1
IC
12317 // doWrite is almost always async, defer these to save a bit of time
12318 // as the hot path ends with doWrite
12319 state.pendingcb++;
12320 state.lastBufferedRequest = null;
12321 if (holder.next) {
12322 state.corkedRequestsFree = holder.next;
12323 holder.next = null;
12324 } else {
12325 state.corkedRequestsFree = new CorkedRequest(state);
12326 }
12327 } else {
12328 // Slow case, write chunks one-by-one
12329 while (entry) {
12330 var chunk = entry.chunk;
12331 var encoding = entry.encoding;
12332 var cb = entry.callback;
12333 var len = state.objectMode ? 1 : chunk.length;
8b095871 12334
9987f0c1
IC
12335 doWrite(stream, state, false, len, chunk, encoding, cb);
12336 entry = entry.next;
12337 // if we didn't call the onwrite immediately, then
12338 // it means that we need to wait until it does.
12339 // also, that means that the chunk and cb are currently
12340 // being processed, so move the buffer counter past them.
12341 if (state.writing) {
12342 break;
12343 }
12344 }
8b095871 12345
9987f0c1
IC
12346 if (entry === null) state.lastBufferedRequest = null;
12347 }
8b095871 12348
9987f0c1
IC
12349 state.bufferedRequestCount = 0;
12350 state.bufferedRequest = entry;
12351 state.bufferProcessing = false;
8b095871 12352}
8b095871 12353
9987f0c1
IC
12354Writable.prototype._write = function (chunk, encoding, cb) {
12355 cb(new Error('_write() is not implemented'));
12356};
8b095871 12357
9987f0c1 12358Writable.prototype._writev = null;
8b095871 12359
9987f0c1
IC
12360Writable.prototype.end = function (chunk, encoding, cb) {
12361 var state = this._writableState;
8b095871 12362
9987f0c1
IC
12363 if (typeof chunk === 'function') {
12364 cb = chunk;
12365 chunk = null;
12366 encoding = null;
12367 } else if (typeof encoding === 'function') {
12368 cb = encoding;
12369 encoding = null;
12370 }
8b095871 12371
9987f0c1 12372 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
8b095871 12373
9987f0c1
IC
12374 // .end() fully uncorks
12375 if (state.corked) {
12376 state.corked = 1;
12377 this.uncork();
12378 }
8b095871 12379
9987f0c1
IC
12380 // ignore unnecessary end() calls.
12381 if (!state.ending && !state.finished) endWritable(this, state, cb);
12382};
8b095871 12383
9987f0c1
IC
12384function needFinish(state) {
12385 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
12386}
12387function callFinal(stream, state) {
12388 stream._final(function (err) {
12389 state.pendingcb--;
12390 if (err) {
12391 stream.emit('error', err);
12392 }
12393 state.prefinished = true;
12394 stream.emit('prefinish');
12395 finishMaybe(stream, state);
12396 });
12397}
12398function prefinish(stream, state) {
12399 if (!state.prefinished && !state.finalCalled) {
12400 if (typeof stream._final === 'function') {
12401 state.pendingcb++;
12402 state.finalCalled = true;
12403 processNextTick(callFinal, stream, state);
12404 } else {
12405 state.prefinished = true;
12406 stream.emit('prefinish');
12407 }
12408 }
8b095871
IC
12409}
12410
9987f0c1
IC
12411function finishMaybe(stream, state) {
12412 var need = needFinish(state);
12413 if (need) {
12414 prefinish(stream, state);
12415 if (state.pendingcb === 0) {
12416 state.finished = true;
12417 stream.emit('finish');
12418 }
12419 }
12420 return need;
8b095871
IC
12421}
12422
9987f0c1
IC
12423function endWritable(stream, state, cb) {
12424 state.ending = true;
12425 finishMaybe(stream, state);
12426 if (cb) {
12427 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
8b095871 12428 }
9987f0c1
IC
12429 state.ended = true;
12430 stream.writable = false;
8b095871
IC
12431}
12432
9987f0c1
IC
12433function onCorkedFinish(corkReq, state, err) {
12434 var entry = corkReq.entry;
12435 corkReq.entry = null;
12436 while (entry) {
12437 var cb = entry.callback;
12438 state.pendingcb--;
12439 cb(err);
12440 entry = entry.next;
12441 }
12442 if (state.corkedRequestsFree) {
12443 state.corkedRequestsFree.next = corkReq;
12444 } else {
12445 state.corkedRequestsFree = corkReq;
12446 }
12447}
8b095871 12448
9987f0c1
IC
12449Object.defineProperty(Writable.prototype, 'destroyed', {
12450 get: function () {
12451 if (this._writableState === undefined) {
12452 return false;
12453 }
12454 return this._writableState.destroyed;
12455 },
12456 set: function (value) {
12457 // we ignore the value if the stream
12458 // has not been initialized yet
12459 if (!this._writableState) {
12460 return;
12461 }
8b095871 12462
9987f0c1
IC
12463 // backward compatibility, the user is explicitly
12464 // managing destroyed
12465 this._writableState.destroyed = value;
12466 }
12467});
8b095871 12468
9987f0c1
IC
12469Writable.prototype.destroy = destroyImpl.destroy;
12470Writable.prototype._undestroy = destroyImpl.undestroy;
12471Writable.prototype._destroy = function (err, cb) {
12472 this.end();
12473 cb(err);
12474};
12475}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
12476},{"./_stream_duplex":14,"./internal/streams/destroy":20,"./internal/streams/stream":21,"_process":12,"core-util-is":5,"inherits":8,"process-nextick-args":11,"safe-buffer":26,"util-deprecate":29}],19:[function(require,module,exports){
12477'use strict';
8b095871
IC
12478
12479/*<replacement>*/
8b095871 12480
9987f0c1 12481function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
8b095871 12482
9987f0c1
IC
12483var Buffer = require('safe-buffer').Buffer;
12484/*</replacement>*/
8b095871 12485
9987f0c1
IC
12486function copyBuffer(src, target, offset) {
12487 src.copy(target, offset);
8b095871
IC
12488}
12489
9987f0c1
IC
12490module.exports = function () {
12491 function BufferList() {
12492 _classCallCheck(this, BufferList);
8b095871 12493
9987f0c1
IC
12494 this.head = null;
12495 this.tail = null;
12496 this.length = 0;
12497 }
8b095871 12498
9987f0c1
IC
12499 BufferList.prototype.push = function push(v) {
12500 var entry = { data: v, next: null };
12501 if (this.length > 0) this.tail.next = entry;else this.head = entry;
12502 this.tail = entry;
12503 ++this.length;
12504 };
8b095871 12505
9987f0c1
IC
12506 BufferList.prototype.unshift = function unshift(v) {
12507 var entry = { data: v, next: this.head };
12508 if (this.length === 0) this.tail = entry;
12509 this.head = entry;
12510 ++this.length;
12511 };
8b095871 12512
9987f0c1
IC
12513 BufferList.prototype.shift = function shift() {
12514 if (this.length === 0) return;
12515 var ret = this.head.data;
12516 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
12517 --this.length;
12518 return ret;
12519 };
8b095871 12520
9987f0c1
IC
12521 BufferList.prototype.clear = function clear() {
12522 this.head = this.tail = null;
12523 this.length = 0;
12524 };
8b095871 12525
9987f0c1
IC
12526 BufferList.prototype.join = function join(s) {
12527 if (this.length === 0) return '';
12528 var p = this.head;
12529 var ret = '' + p.data;
12530 while (p = p.next) {
12531 ret += s + p.data;
12532 }return ret;
12533 };
8b095871 12534
9987f0c1
IC
12535 BufferList.prototype.concat = function concat(n) {
12536 if (this.length === 0) return Buffer.alloc(0);
12537 if (this.length === 1) return this.head.data;
12538 var ret = Buffer.allocUnsafe(n >>> 0);
12539 var p = this.head;
12540 var i = 0;
12541 while (p) {
12542 copyBuffer(p.data, ret, i);
12543 i += p.data.length;
12544 p = p.next;
12545 }
12546 return ret;
12547 };
8b095871 12548
9987f0c1
IC
12549 return BufferList;
12550}();
12551},{"safe-buffer":26}],20:[function(require,module,exports){
12552'use strict';
8b095871
IC
12553
12554/*<replacement>*/
9987f0c1
IC
12555
12556var processNextTick = require('process-nextick-args');
8b095871
IC
12557/*</replacement>*/
12558
9987f0c1
IC
12559// undocumented cb() API, needed for core, not for public API
12560function destroy(err, cb) {
12561 var _this = this;
8b095871 12562
9987f0c1
IC
12563 var readableDestroyed = this._readableState && this._readableState.destroyed;
12564 var writableDestroyed = this._writableState && this._writableState.destroyed;
8b095871 12565
9987f0c1
IC
12566 if (readableDestroyed || writableDestroyed) {
12567 if (cb) {
12568 cb(err);
12569 } else if (err && (!this._writableState || !this._writableState.errorEmitted)) {
12570 processNextTick(emitErrorNT, this, err);
12571 }
12572 return;
12573 }
8b095871 12574
9987f0c1
IC
12575 // we set destroyed to true before firing error callbacks in order
12576 // to make it re-entrance safe in case destroy() is called within callbacks
8b095871 12577
9987f0c1
IC
12578 if (this._readableState) {
12579 this._readableState.destroyed = true;
12580 }
8b095871 12581
9987f0c1
IC
12582 // if this is a duplex stream mark the writable part as destroyed as well
12583 if (this._writableState) {
12584 this._writableState.destroyed = true;
12585 }
8b095871 12586
9987f0c1
IC
12587 this._destroy(err || null, function (err) {
12588 if (!cb && err) {
12589 processNextTick(emitErrorNT, _this, err);
12590 if (_this._writableState) {
12591 _this._writableState.errorEmitted = true;
12592 }
12593 } else if (cb) {
12594 cb(err);
12595 }
12596 });
12597}
8b095871 12598
9987f0c1
IC
12599function undestroy() {
12600 if (this._readableState) {
12601 this._readableState.destroyed = false;
12602 this._readableState.reading = false;
12603 this._readableState.ended = false;
12604 this._readableState.endEmitted = false;
12605 }
8b095871 12606
9987f0c1
IC
12607 if (this._writableState) {
12608 this._writableState.destroyed = false;
12609 this._writableState.ended = false;
12610 this._writableState.ending = false;
12611 this._writableState.finished = false;
12612 this._writableState.errorEmitted = false;
12613 }
12614}
8b095871 12615
9987f0c1
IC
12616function emitErrorNT(self, err) {
12617 self.emit('error', err);
12618}
8b095871 12619
9987f0c1
IC
12620module.exports = {
12621 destroy: destroy,
12622 undestroy: undestroy
12623};
12624},{"process-nextick-args":11}],21:[function(require,module,exports){
12625module.exports = require('events').EventEmitter;
8b095871 12626
9987f0c1
IC
12627},{"events":6}],22:[function(require,module,exports){
12628module.exports = require('./readable').PassThrough
8b095871 12629
9987f0c1
IC
12630},{"./readable":23}],23:[function(require,module,exports){
12631exports = module.exports = require('./lib/_stream_readable.js');
12632exports.Stream = exports;
12633exports.Readable = exports;
12634exports.Writable = require('./lib/_stream_writable.js');
12635exports.Duplex = require('./lib/_stream_duplex.js');
12636exports.Transform = require('./lib/_stream_transform.js');
12637exports.PassThrough = require('./lib/_stream_passthrough.js');
8b095871 12638
9987f0c1
IC
12639},{"./lib/_stream_duplex.js":14,"./lib/_stream_passthrough.js":15,"./lib/_stream_readable.js":16,"./lib/_stream_transform.js":17,"./lib/_stream_writable.js":18}],24:[function(require,module,exports){
12640module.exports = require('./readable').Transform
8b095871 12641
9987f0c1
IC
12642},{"./readable":23}],25:[function(require,module,exports){
12643module.exports = require('./lib/_stream_writable.js');
8b095871 12644
9987f0c1
IC
12645},{"./lib/_stream_writable.js":18}],26:[function(require,module,exports){
12646/* eslint-disable node/no-deprecated-api */
12647var buffer = require('buffer')
12648var Buffer = buffer.Buffer
8b095871 12649
9987f0c1
IC
12650// alternative to using Object.keys for old browsers
12651function copyProps (src, dst) {
12652 for (var key in src) {
12653 dst[key] = src[key]
12654 }
12655}
12656if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
12657 module.exports = buffer
12658} else {
12659 // Copy properties from require('buffer')
12660 copyProps(buffer, exports)
12661 exports.Buffer = SafeBuffer
12662}
8b095871 12663
9987f0c1
IC
12664function SafeBuffer (arg, encodingOrOffset, length) {
12665 return Buffer(arg, encodingOrOffset, length)
12666}
8b095871 12667
9987f0c1
IC
12668// Copy static methods from Buffer
12669copyProps(Buffer, SafeBuffer)
8b095871 12670
9987f0c1
IC
12671SafeBuffer.from = function (arg, encodingOrOffset, length) {
12672 if (typeof arg === 'number') {
12673 throw new TypeError('Argument must not be a number')
8b095871 12674 }
9987f0c1 12675 return Buffer(arg, encodingOrOffset, length)
8b095871
IC
12676}
12677
9987f0c1
IC
12678SafeBuffer.alloc = function (size, fill, encoding) {
12679 if (typeof size !== 'number') {
12680 throw new TypeError('Argument must be a number')
12681 }
12682 var buf = Buffer(size)
12683 if (fill !== undefined) {
12684 if (typeof encoding === 'string') {
12685 buf.fill(fill, encoding)
12686 } else {
12687 buf.fill(fill)
12688 }
12689 } else {
12690 buf.fill(0)
12691 }
12692 return buf
12693}
8b095871 12694
9987f0c1
IC
12695SafeBuffer.allocUnsafe = function (size) {
12696 if (typeof size !== 'number') {
12697 throw new TypeError('Argument must be a number')
12698 }
12699 return Buffer(size)
12700}
8b095871 12701
9987f0c1
IC
12702SafeBuffer.allocUnsafeSlow = function (size) {
12703 if (typeof size !== 'number') {
12704 throw new TypeError('Argument must be a number')
12705 }
12706 return buffer.SlowBuffer(size)
12707}
12708
12709},{"buffer":4}],27:[function(require,module,exports){
12710// Copyright Joyent, Inc. and other Node contributors.
12711//
12712// Permission is hereby granted, free of charge, to any person obtaining a
12713// copy of this software and associated documentation files (the
12714// "Software"), to deal in the Software without restriction, including
12715// without limitation the rights to use, copy, modify, merge, publish,
12716// distribute, sublicense, and/or sell copies of the Software, and to permit
12717// persons to whom the Software is furnished to do so, subject to the
12718// following conditions:
12719//
12720// The above copyright notice and this permission notice shall be included
12721// in all copies or substantial portions of the Software.
12722//
12723// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
12724// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
12725// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
12726// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
12727// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
12728// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
12729// USE OR OTHER DEALINGS IN THE SOFTWARE.
8b095871 12730
9987f0c1 12731module.exports = Stream;
8b095871 12732
9987f0c1
IC
12733var EE = require('events').EventEmitter;
12734var inherits = require('inherits');
8b095871 12735
9987f0c1
IC
12736inherits(Stream, EE);
12737Stream.Readable = require('readable-stream/readable.js');
12738Stream.Writable = require('readable-stream/writable.js');
12739Stream.Duplex = require('readable-stream/duplex.js');
12740Stream.Transform = require('readable-stream/transform.js');
12741Stream.PassThrough = require('readable-stream/passthrough.js');
8b095871 12742
9987f0c1
IC
12743// Backwards-compat with node 0.4.x
12744Stream.Stream = Stream;
8b095871 12745
8b095871 12746
8b095871 12747
9987f0c1
IC
12748// old-style streams. Note that the pipe method (the only relevant
12749// part of this class) is overridden in the Readable class.
8b095871 12750
9987f0c1
IC
12751function Stream() {
12752 EE.call(this);
12753}
8b095871 12754
9987f0c1
IC
12755Stream.prototype.pipe = function(dest, options) {
12756 var source = this;
8b095871 12757
9987f0c1
IC
12758 function ondata(chunk) {
12759 if (dest.writable) {
12760 if (false === dest.write(chunk) && source.pause) {
12761 source.pause();
8b095871 12762 }
8b095871 12763 }
8b095871
IC
12764 }
12765
9987f0c1 12766 source.on('data', ondata);
8b095871 12767
9987f0c1
IC
12768 function ondrain() {
12769 if (source.readable && source.resume) {
12770 source.resume();
12771 }
12772 }
8b095871 12773
9987f0c1 12774 dest.on('drain', ondrain);
8b095871 12775
9987f0c1
IC
12776 // If the 'end' option is not supplied, dest.end() will be called when
12777 // source gets the 'end' or 'close' events. Only dest.end() once.
12778 if (!dest._isStdio && (!options || options.end !== false)) {
12779 source.on('end', onend);
12780 source.on('close', onclose);
12781 }
8b095871 12782
9987f0c1
IC
12783 var didOnEnd = false;
12784 function onend() {
12785 if (didOnEnd) return;
12786 didOnEnd = true;
8b095871 12787
9987f0c1 12788 dest.end();
8b095871 12789 }
8b095871 12790
8b095871 12791
9987f0c1
IC
12792 function onclose() {
12793 if (didOnEnd) return;
12794 didOnEnd = true;
8b095871 12795
9987f0c1 12796 if (typeof dest.destroy === 'function') dest.destroy();
8b095871
IC
12797 }
12798
9987f0c1
IC
12799 // don't leave dangling pipes when there are errors.
12800 function onerror(er) {
12801 cleanup();
12802 if (EE.listenerCount(this, 'error') === 0) {
12803 throw er; // Unhandled stream error in pipe.
12804 }
8b095871
IC
12805 }
12806
9987f0c1
IC
12807 source.on('error', onerror);
12808 dest.on('error', onerror);
8b095871 12809
9987f0c1
IC
12810 // remove all the event listeners that were added.
12811 function cleanup() {
12812 source.removeListener('data', ondata);
12813 dest.removeListener('drain', ondrain);
8b095871 12814
9987f0c1
IC
12815 source.removeListener('end', onend);
12816 source.removeListener('close', onclose);
8b095871 12817
9987f0c1
IC
12818 source.removeListener('error', onerror);
12819 dest.removeListener('error', onerror);
8b095871 12820
9987f0c1
IC
12821 source.removeListener('end', cleanup);
12822 source.removeListener('close', cleanup);
8b095871 12823
9987f0c1 12824 dest.removeListener('close', cleanup);
8b095871
IC
12825 }
12826
9987f0c1
IC
12827 source.on('end', cleanup);
12828 source.on('close', cleanup);
8b095871 12829
9987f0c1 12830 dest.on('close', cleanup);
8b095871 12831
9987f0c1 12832 dest.emit('pipe', source);
8b095871 12833
9987f0c1
IC
12834 // Allow for unix-like usage: A.pipe(B).pipe(C)
12835 return dest;
12836};
8b095871 12837
9987f0c1
IC
12838},{"events":6,"inherits":8,"readable-stream/duplex.js":13,"readable-stream/passthrough.js":22,"readable-stream/readable.js":23,"readable-stream/transform.js":24,"readable-stream/writable.js":25}],28:[function(require,module,exports){
12839'use strict';
8b095871 12840
9987f0c1 12841var Buffer = require('safe-buffer').Buffer;
8b095871 12842
9987f0c1
IC
12843var isEncoding = Buffer.isEncoding || function (encoding) {
12844 encoding = '' + encoding;
12845 switch (encoding && encoding.toLowerCase()) {
12846 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':
12847 return true;
12848 default:
12849 return false;
12850 }
12851};
8b095871 12852
9987f0c1
IC
12853function _normalizeEncoding(enc) {
12854 if (!enc) return 'utf8';
12855 var retried;
12856 while (true) {
12857 switch (enc) {
12858 case 'utf8':
12859 case 'utf-8':
12860 return 'utf8';
12861 case 'ucs2':
12862 case 'ucs-2':
12863 case 'utf16le':
12864 case 'utf-16le':
12865 return 'utf16le';
12866 case 'latin1':
12867 case 'binary':
12868 return 'latin1';
12869 case 'base64':
12870 case 'ascii':
12871 case 'hex':
12872 return enc;
12873 default:
12874 if (retried) return; // undefined
12875 enc = ('' + enc).toLowerCase();
12876 retried = true;
12877 }
8b095871 12878 }
9987f0c1 12879};
8b095871 12880
9987f0c1
IC
12881// Do not cache `Buffer.isEncoding` when checking encoding names as some
12882// modules monkey-patch it to support additional encodings
12883function normalizeEncoding(enc) {
12884 var nenc = _normalizeEncoding(enc);
12885 if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
12886 return nenc || enc;
12887}
8b095871 12888
9987f0c1
IC
12889// StringDecoder provides an interface for efficiently splitting a series of
12890// buffers into a series of JS strings without breaking apart multi-byte
12891// characters.
12892exports.StringDecoder = StringDecoder;
12893function StringDecoder(encoding) {
12894 this.encoding = normalizeEncoding(encoding);
12895 var nb;
12896 switch (this.encoding) {
12897 case 'utf16le':
12898 this.text = utf16Text;
12899 this.end = utf16End;
12900 nb = 4;
12901 break;
12902 case 'utf8':
12903 this.fillLast = utf8FillLast;
12904 nb = 4;
12905 break;
12906 case 'base64':
12907 this.text = base64Text;
12908 this.end = base64End;
12909 nb = 3;
12910 break;
12911 default:
12912 this.write = simpleWrite;
12913 this.end = simpleEnd;
12914 return;
12915 }
12916 this.lastNeed = 0;
12917 this.lastTotal = 0;
12918 this.lastChar = Buffer.allocUnsafe(nb);
12919}
8b095871 12920
9987f0c1
IC
12921StringDecoder.prototype.write = function (buf) {
12922 if (buf.length === 0) return '';
12923 var r;
12924 var i;
12925 if (this.lastNeed) {
12926 r = this.fillLast(buf);
12927 if (r === undefined) return '';
12928 i = this.lastNeed;
12929 this.lastNeed = 0;
12930 } else {
12931 i = 0;
12932 }
12933 if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
12934 return r || '';
12935};
8b095871 12936
9987f0c1 12937StringDecoder.prototype.end = utf8End;
8b095871 12938
9987f0c1
IC
12939// Returns only complete characters in a Buffer
12940StringDecoder.prototype.text = utf8Text;
8b095871 12941
9987f0c1
IC
12942// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
12943StringDecoder.prototype.fillLast = function (buf) {
12944 if (this.lastNeed <= buf.length) {
12945 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
12946 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
8b095871 12947 }
9987f0c1
IC
12948 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
12949 this.lastNeed -= buf.length;
12950};
8b095871 12951
9987f0c1
IC
12952// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
12953// continuation byte.
12954function utf8CheckByte(byte) {
12955 if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;
12956 return -1;
12957}
8b095871 12958
9987f0c1
IC
12959// Checks at most 3 bytes at the end of a Buffer in order to detect an
12960// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
12961// needed to complete the UTF-8 character (if applicable) are returned.
12962function utf8CheckIncomplete(self, buf, i) {
12963 var j = buf.length - 1;
12964 if (j < i) return 0;
12965 var nb = utf8CheckByte(buf[j]);
12966 if (nb >= 0) {
12967 if (nb > 0) self.lastNeed = nb - 1;
12968 return nb;
12969 }
12970 if (--j < i) return 0;
12971 nb = utf8CheckByte(buf[j]);
12972 if (nb >= 0) {
12973 if (nb > 0) self.lastNeed = nb - 2;
12974 return nb;
12975 }
12976 if (--j < i) return 0;
12977 nb = utf8CheckByte(buf[j]);
12978 if (nb >= 0) {
12979 if (nb > 0) {
12980 if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
8b095871 12981 }
9987f0c1 12982 return nb;
8b095871 12983 }
9987f0c1
IC
12984 return 0;
12985}
8b095871 12986
9987f0c1
IC
12987// Validates as many continuation bytes for a multi-byte UTF-8 character as
12988// needed or are available. If we see a non-continuation byte where we expect
12989// one, we "replace" the validated continuation bytes we've seen so far with
12990// UTF-8 replacement characters ('\ufffd'), to match v8's UTF-8 decoding
12991// behavior. The continuation byte check is included three times in the case
12992// where all of the continuation bytes for a character exist in the same buffer.
12993// It is also done this way as a slight performance increase instead of using a
12994// loop.
12995function utf8CheckExtraBytes(self, buf, p) {
12996 if ((buf[0] & 0xC0) !== 0x80) {
12997 self.lastNeed = 0;
12998 return '\ufffd'.repeat(p);
12999 }
13000 if (self.lastNeed > 1 && buf.length > 1) {
13001 if ((buf[1] & 0xC0) !== 0x80) {
13002 self.lastNeed = 1;
13003 return '\ufffd'.repeat(p + 1);
13004 }
13005 if (self.lastNeed > 2 && buf.length > 2) {
13006 if ((buf[2] & 0xC0) !== 0x80) {
13007 self.lastNeed = 2;
13008 return '\ufffd'.repeat(p + 2);
13009 }
13010 }
13011 }
8b095871
IC
13012}
13013
9987f0c1
IC
13014// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
13015function utf8FillLast(buf) {
13016 var p = this.lastTotal - this.lastNeed;
13017 var r = utf8CheckExtraBytes(this, buf, p);
13018 if (r !== undefined) return r;
13019 if (this.lastNeed <= buf.length) {
13020 buf.copy(this.lastChar, p, 0, this.lastNeed);
13021 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
8b095871 13022 }
9987f0c1
IC
13023 buf.copy(this.lastChar, p, 0, buf.length);
13024 this.lastNeed -= buf.length;
8b095871
IC
13025}
13026
9987f0c1
IC
13027// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
13028// partial character, the character's bytes are buffered until the required
13029// number of bytes are available.
13030function utf8Text(buf, i) {
13031 var total = utf8CheckIncomplete(this, buf, i);
13032 if (!this.lastNeed) return buf.toString('utf8', i);
13033 this.lastTotal = total;
13034 var end = buf.length - (total - this.lastNeed);
13035 buf.copy(this.lastChar, 0, end);
13036 return buf.toString('utf8', i, end);
8b095871
IC
13037}
13038
9987f0c1
IC
13039// For UTF-8, a replacement character for each buffered byte of a (partial)
13040// character needs to be added to the output.
13041function utf8End(buf) {
13042 var r = buf && buf.length ? this.write(buf) : '';
13043 if (this.lastNeed) return r + '\ufffd'.repeat(this.lastTotal - this.lastNeed);
13044 return r;
13045}
8b095871 13046
9987f0c1
IC
13047// UTF-16LE typically needs two bytes per character, but even if we have an even
13048// number of bytes available, we need to check if we end on a leading/high
13049// surrogate. In that case, we need to wait for the next two bytes in order to
13050// decode the last character properly.
13051function utf16Text(buf, i) {
13052 if ((buf.length - i) % 2 === 0) {
13053 var r = buf.toString('utf16le', i);
13054 if (r) {
13055 var c = r.charCodeAt(r.length - 1);
13056 if (c >= 0xD800 && c <= 0xDBFF) {
13057 this.lastNeed = 2;
13058 this.lastTotal = 4;
13059 this.lastChar[0] = buf[buf.length - 2];
13060 this.lastChar[1] = buf[buf.length - 1];
13061 return r.slice(0, -1);
13062 }
13063 }
13064 return r;
8b095871 13065 }
9987f0c1
IC
13066 this.lastNeed = 1;
13067 this.lastTotal = 2;
13068 this.lastChar[0] = buf[buf.length - 1];
13069 return buf.toString('utf16le', i, buf.length - 1);
8b095871
IC
13070}
13071
9987f0c1
IC
13072// For UTF-16LE we do not explicitly append special replacement characters if we
13073// end on a partial character, we simply let v8 handle that.
13074function utf16End(buf) {
13075 var r = buf && buf.length ? this.write(buf) : '';
13076 if (this.lastNeed) {
13077 var end = this.lastTotal - this.lastNeed;
13078 return r + this.lastChar.toString('utf16le', 0, end);
8b095871 13079 }
9987f0c1 13080 return r;
8b095871
IC
13081}
13082
9987f0c1
IC
13083function base64Text(buf, i) {
13084 var n = (buf.length - i) % 3;
13085 if (n === 0) return buf.toString('base64', i);
13086 this.lastNeed = 3 - n;
13087 this.lastTotal = 3;
13088 if (n === 1) {
13089 this.lastChar[0] = buf[buf.length - 1];
13090 } else {
13091 this.lastChar[0] = buf[buf.length - 2];
13092 this.lastChar[1] = buf[buf.length - 1];
13093 }
13094 return buf.toString('base64', i, buf.length - n);
13095}
8b095871 13096
9987f0c1
IC
13097function base64End(buf) {
13098 var r = buf && buf.length ? this.write(buf) : '';
13099 if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
13100 return r;
13101}
8b095871 13102
9987f0c1
IC
13103// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
13104function simpleWrite(buf) {
13105 return buf.toString(this.encoding);
13106}
8b095871 13107
9987f0c1
IC
13108function simpleEnd(buf) {
13109 return buf && buf.length ? this.write(buf) : '';
13110}
13111},{"safe-buffer":26}],29:[function(require,module,exports){
13112(function (global){
8b095871 13113
9987f0c1
IC
13114/**
13115 * Module exports.
13116 */
8b095871 13117
9987f0c1
IC
13118module.exports = deprecate;
13119
13120/**
13121 * Mark that a method should not be used.
13122 * Returns a modified function which warns once by default.
13123 *
13124 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
13125 *
13126 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
13127 * will throw an Error when invoked.
13128 *
13129 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
13130 * will invoke `console.trace()` instead of `console.error()`.
13131 *
13132 * @param {Function} fn - the function to deprecate
13133 * @param {String} msg - the string to print to the console when `fn` is invoked
13134 * @returns {Function} a new "deprecated" version of `fn`
13135 * @api public
13136 */
13137
13138function deprecate (fn, msg) {
13139 if (config('noDeprecation')) {
13140 return fn;
8b095871
IC
13141 }
13142
9987f0c1
IC
13143 var warned = false;
13144 function deprecated() {
13145 if (!warned) {
13146 if (config('throwDeprecation')) {
13147 throw new Error(msg);
13148 } else if (config('traceDeprecation')) {
13149 console.trace(msg);
13150 } else {
13151 console.warn(msg);
13152 }
13153 warned = true;
13154 }
13155 return fn.apply(this, arguments);
8b095871
IC
13156 }
13157
9987f0c1
IC
13158 return deprecated;
13159}
8b095871 13160
9987f0c1
IC
13161/**
13162 * Checks `localStorage` for boolean values for the given `name`.
13163 *
13164 * @param {String} name
13165 * @returns {Boolean}
13166 * @api private
13167 */
8b095871 13168
9987f0c1
IC
13169function config (name) {
13170 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
13171 try {
13172 if (!global.localStorage) return false;
13173 } catch (_) {
13174 return false;
8b095871 13175 }
9987f0c1
IC
13176 var val = global.localStorage[name];
13177 if (null == val) return false;
13178 return String(val).toLowerCase() === 'true';
13179}
8b095871 13180
9987f0c1
IC
13181}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
13182},{}],30:[function(require,module,exports){
13183arguments[4][8][0].apply(exports,arguments)
13184},{"dup":8}],31:[function(require,module,exports){
13185module.exports = function isBuffer(arg) {
13186 return arg && typeof arg === 'object'
13187 && typeof arg.copy === 'function'
13188 && typeof arg.fill === 'function'
13189 && typeof arg.readUInt8 === 'function';
13190}
13191},{}],32:[function(require,module,exports){
13192(function (process,global){
13193// Copyright Joyent, Inc. and other Node contributors.
13194//
13195// Permission is hereby granted, free of charge, to any person obtaining a
13196// copy of this software and associated documentation files (the
13197// "Software"), to deal in the Software without restriction, including
13198// without limitation the rights to use, copy, modify, merge, publish,
13199// distribute, sublicense, and/or sell copies of the Software, and to permit
13200// persons to whom the Software is furnished to do so, subject to the
13201// following conditions:
13202//
13203// The above copyright notice and this permission notice shall be included
13204// in all copies or substantial portions of the Software.
13205//
13206// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
13207// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
13208// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
13209// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
13210// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
13211// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
13212// USE OR OTHER DEALINGS IN THE SOFTWARE.
13213
13214var formatRegExp = /%[sdj%]/g;
13215exports.format = function(f) {
13216 if (!isString(f)) {
13217 var objects = [];
13218 for (var i = 0; i < arguments.length; i++) {
13219 objects.push(inspect(arguments[i]));
8b095871 13220 }
9987f0c1 13221 return objects.join(' ');
8b095871
IC
13222 }
13223
9987f0c1
IC
13224 var i = 1;
13225 var args = arguments;
13226 var len = args.length;
13227 var str = String(f).replace(formatRegExp, function(x) {
13228 if (x === '%%') return '%';
13229 if (i >= len) return x;
13230 switch (x) {
13231 case '%s': return String(args[i++]);
13232 case '%d': return Number(args[i++]);
13233 case '%j':
13234 try {
13235 return JSON.stringify(args[i++]);
13236 } catch (_) {
13237 return '[Circular]';
13238 }
13239 default:
13240 return x;
13241 }
13242 });
13243 for (var x = args[i]; i < len; x = args[++i]) {
13244 if (isNull(x) || !isObject(x)) {
13245 str += ' ' + x;
13246 } else {
13247 str += ' ' + inspect(x);
13248 }
13249 }
13250 return str;
13251};
8b095871
IC
13252
13253
9987f0c1
IC
13254// Mark that a method should not be used.
13255// Returns a modified function which warns once by default.
13256// If --no-deprecation is set, then it is a no-op.
13257exports.deprecate = function(fn, msg) {
13258 // Allow for deprecating things in the process of starting up.
13259 if (isUndefined(global.process)) {
13260 return function() {
13261 return exports.deprecate(fn, msg).apply(this, arguments);
13262 };
8b095871 13263 }
8b095871 13264
9987f0c1
IC
13265 if (process.noDeprecation === true) {
13266 return fn;
8b095871
IC
13267 }
13268
9987f0c1
IC
13269 var warned = false;
13270 function deprecated() {
13271 if (!warned) {
13272 if (process.throwDeprecation) {
13273 throw new Error(msg);
13274 } else if (process.traceDeprecation) {
13275 console.trace(msg);
13276 } else {
13277 console.error(msg);
13278 }
13279 warned = true;
13280 }
13281 return fn.apply(this, arguments);
8b095871
IC
13282 }
13283
9987f0c1 13284 return deprecated;
8b095871
IC
13285};
13286
8b095871 13287
9987f0c1
IC
13288var debugs = {};
13289var debugEnviron;
13290exports.debuglog = function(set) {
13291 if (isUndefined(debugEnviron))
13292 debugEnviron = process.env.NODE_DEBUG || '';
13293 set = set.toUpperCase();
13294 if (!debugs[set]) {
13295 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
13296 var pid = process.pid;
13297 debugs[set] = function() {
13298 var msg = exports.format.apply(exports, arguments);
13299 console.error('%s %d: %s', set, pid, msg);
13300 };
13301 } else {
13302 debugs[set] = function() {};
13303 }
13304 }
13305 return debugs[set];
13306};
8b095871 13307
8b095871 13308
9987f0c1
IC
13309/**
13310 * Echos the value of a value. Trys to print the value out
13311 * in the best way possible given the different types.
13312 *
13313 * @param {Object} obj The object to print out.
13314 * @param {Object} opts Optional options object that alters the output.
13315 */
13316/* legacy: obj, showHidden, depth, colors*/
13317function inspect(obj, opts) {
13318 // default options
13319 var ctx = {
13320 seen: [],
13321 stylize: stylizeNoColor
13322 };
13323 // legacy...
13324 if (arguments.length >= 3) ctx.depth = arguments[2];
13325 if (arguments.length >= 4) ctx.colors = arguments[3];
13326 if (isBoolean(opts)) {
13327 // legacy...
13328 ctx.showHidden = opts;
13329 } else if (opts) {
13330 // got an "options" object
13331 exports._extend(ctx, opts);
13332 }
13333 // set default options
13334 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
13335 if (isUndefined(ctx.depth)) ctx.depth = 2;
13336 if (isUndefined(ctx.colors)) ctx.colors = false;
13337 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
13338 if (ctx.colors) ctx.stylize = stylizeWithColor;
13339 return formatValue(ctx, obj, ctx.depth);
13340}
13341exports.inspect = inspect;
8b095871 13342
8b095871 13343
9987f0c1
IC
13344// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
13345inspect.colors = {
13346 'bold' : [1, 22],
13347 'italic' : [3, 23],
13348 'underline' : [4, 24],
13349 'inverse' : [7, 27],
13350 'white' : [37, 39],
13351 'grey' : [90, 39],
13352 'black' : [30, 39],
13353 'blue' : [34, 39],
13354 'cyan' : [36, 39],
13355 'green' : [32, 39],
13356 'magenta' : [35, 39],
13357 'red' : [31, 39],
13358 'yellow' : [33, 39]
13359};
8b095871 13360
9987f0c1
IC
13361// Don't use 'blue' not visible on cmd.exe
13362inspect.styles = {
13363 'special': 'cyan',
13364 'number': 'yellow',
13365 'boolean': 'yellow',
13366 'undefined': 'grey',
13367 'null': 'bold',
13368 'string': 'green',
13369 'date': 'magenta',
13370 // "name": intentionally not styling
13371 'regexp': 'red'
13372};
8b095871 13373
8b095871 13374
9987f0c1
IC
13375function stylizeWithColor(str, styleType) {
13376 var style = inspect.styles[styleType];
8b095871 13377
9987f0c1
IC
13378 if (style) {
13379 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
13380 '\u001b[' + inspect.colors[style][1] + 'm';
13381 } else {
13382 return str;
8b095871 13383 }
9987f0c1 13384}
8b095871 13385
8b095871 13386
9987f0c1
IC
13387function stylizeNoColor(str, styleType) {
13388 return str;
13389}
8b095871 13390
8b095871 13391
9987f0c1
IC
13392function arrayToHash(array) {
13393 var hash = {};
8b095871 13394
9987f0c1
IC
13395 array.forEach(function(val, idx) {
13396 hash[val] = true;
13397 });
8b095871 13398
9987f0c1
IC
13399 return hash;
13400}
8b095871 13401
8b095871 13402
9987f0c1
IC
13403function formatValue(ctx, value, recurseTimes) {
13404 // Provide a hook for user-specified inspect functions.
13405 // Check that value is an object with an inspect function on it
13406 if (ctx.customInspect &&
13407 value &&
13408 isFunction(value.inspect) &&
13409 // Filter out the util module, it's inspect function is special
13410 value.inspect !== exports.inspect &&
13411 // Also filter out any prototype objects using the circular check.
13412 !(value.constructor && value.constructor.prototype === value)) {
13413 var ret = value.inspect(recurseTimes, ctx);
13414 if (!isString(ret)) {
13415 ret = formatValue(ctx, ret, recurseTimes);
8b095871 13416 }
9987f0c1 13417 return ret;
8b095871 13418 }
8b095871 13419
9987f0c1
IC
13420 // Primitive types cannot have properties
13421 var primitive = formatPrimitive(ctx, value);
13422 if (primitive) {
13423 return primitive;
8b095871 13424 }
8b095871 13425
9987f0c1
IC
13426 // Look up the keys of the object.
13427 var keys = Object.keys(value);
13428 var visibleKeys = arrayToHash(keys);
8b095871 13429
9987f0c1
IC
13430 if (ctx.showHidden) {
13431 keys = Object.getOwnPropertyNames(value);
8b095871 13432 }
8b095871 13433
9987f0c1
IC
13434 // IE doesn't make error fields non-enumerable
13435 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
13436 if (isError(value)
13437 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
13438 return formatError(value);
8b095871 13439 }
8b095871 13440
9987f0c1
IC
13441 // Some type of object without properties can be shortcutted.
13442 if (keys.length === 0) {
13443 if (isFunction(value)) {
13444 var name = value.name ? ': ' + value.name : '';
13445 return ctx.stylize('[Function' + name + ']', 'special');
8b095871 13446 }
9987f0c1
IC
13447 if (isRegExp(value)) {
13448 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
8b095871 13449 }
9987f0c1
IC
13450 if (isDate(value)) {
13451 return ctx.stylize(Date.prototype.toString.call(value), 'date');
13452 }
13453 if (isError(value)) {
13454 return formatError(value);
8b095871
IC
13455 }
13456 }
13457
9987f0c1 13458 var base = '', array = false, braces = ['{', '}'];
8b095871 13459
9987f0c1
IC
13460 // Make Array say that they are Array
13461 if (isArray(value)) {
13462 array = true;
13463 braces = ['[', ']'];
13464 }
8b095871 13465
9987f0c1
IC
13466 // Make functions say that they are functions
13467 if (isFunction(value)) {
13468 var n = value.name ? ': ' + value.name : '';
13469 base = ' [Function' + n + ']';
13470 }
8b095871 13471
9987f0c1
IC
13472 // Make RegExps say that they are RegExps
13473 if (isRegExp(value)) {
13474 base = ' ' + RegExp.prototype.toString.call(value);
13475 }
8b095871 13476
9987f0c1
IC
13477 // Make dates with properties first say the date
13478 if (isDate(value)) {
13479 base = ' ' + Date.prototype.toUTCString.call(value);
13480 }
8b095871 13481
9987f0c1
IC
13482 // Make error with message first say the error
13483 if (isError(value)) {
13484 base = ' ' + formatError(value);
13485 }
8b095871 13486
9987f0c1
IC
13487 if (keys.length === 0 && (!array || value.length == 0)) {
13488 return braces[0] + base + braces[1];
13489 }
8b095871 13490
9987f0c1
IC
13491 if (recurseTimes < 0) {
13492 if (isRegExp(value)) {
13493 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
8b095871 13494 } else {
9987f0c1
IC
13495 return ctx.stylize('[Object]', 'special');
13496 }
13497 }
8b095871 13498
9987f0c1 13499 ctx.seen.push(value);
8b095871 13500
9987f0c1
IC
13501 var output;
13502 if (array) {
13503 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
13504 } else {
13505 output = keys.map(function(key) {
13506 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
13507 });
8b095871
IC
13508 }
13509
9987f0c1 13510 ctx.seen.pop();
8b095871 13511
9987f0c1
IC
13512 return reduceToSingleString(output, base, braces);
13513}
8b095871 13514
8b095871 13515
9987f0c1
IC
13516function formatPrimitive(ctx, value) {
13517 if (isUndefined(value))
13518 return ctx.stylize('undefined', 'undefined');
13519 if (isString(value)) {
13520 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
13521 .replace(/'/g, "\\'")
13522 .replace(/\\"/g, '"') + '\'';
13523 return ctx.stylize(simple, 'string');
8b095871 13524 }
9987f0c1
IC
13525 if (isNumber(value))
13526 return ctx.stylize('' + value, 'number');
13527 if (isBoolean(value))
13528 return ctx.stylize('' + value, 'boolean');
13529 // For some reason typeof null is "object", so special case here.
13530 if (isNull(value))
13531 return ctx.stylize('null', 'null');
8b095871
IC
13532}
13533
9987f0c1
IC
13534
13535function formatError(value) {
13536 return '[' + Error.prototype.toString.call(value) + ']';
8b095871
IC
13537}
13538
9987f0c1
IC
13539
13540function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
13541 var output = [];
13542 for (var i = 0, l = value.length; i < l; ++i) {
13543 if (hasOwnProperty(value, String(i))) {
13544 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
13545 String(i), true));
13546 } else {
13547 output.push('');
13548 }
8b095871 13549 }
9987f0c1
IC
13550 keys.forEach(function(key) {
13551 if (!key.match(/^\d+$/)) {
13552 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
13553 key, true));
13554 }
13555 });
13556 return output;
8b095871
IC
13557}
13558
8b095871 13559
9987f0c1
IC
13560function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
13561 var name, str, desc;
13562 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
13563 if (desc.get) {
13564 if (desc.set) {
13565 str = ctx.stylize('[Getter/Setter]', 'special');
13566 } else {
13567 str = ctx.stylize('[Getter]', 'special');
13568 }
13569 } else {
13570 if (desc.set) {
13571 str = ctx.stylize('[Setter]', 'special');
13572 }
13573 }
13574 if (!hasOwnProperty(visibleKeys, key)) {
13575 name = '[' + key + ']';
13576 }
13577 if (!str) {
13578 if (ctx.seen.indexOf(desc.value) < 0) {
13579 if (isNull(recurseTimes)) {
13580 str = formatValue(ctx, desc.value, null);
13581 } else {
13582 str = formatValue(ctx, desc.value, recurseTimes - 1);
13583 }
13584 if (str.indexOf('\n') > -1) {
13585 if (array) {
13586 str = str.split('\n').map(function(line) {
13587 return ' ' + line;
13588 }).join('\n').substr(2);
13589 } else {
13590 str = '\n' + str.split('\n').map(function(line) {
13591 return ' ' + line;
13592 }).join('\n');
13593 }
13594 }
13595 } else {
13596 str = ctx.stylize('[Circular]', 'special');
13597 }
13598 }
13599 if (isUndefined(name)) {
13600 if (array && key.match(/^\d+$/)) {
13601 return str;
13602 }
13603 name = JSON.stringify('' + key);
13604 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
13605 name = name.substr(1, name.length - 2);
13606 name = ctx.stylize(name, 'name');
13607 } else {
13608 name = name.replace(/'/g, "\\'")
13609 .replace(/\\"/g, '"')
13610 .replace(/(^"|"$)/g, "'");
13611 name = ctx.stylize(name, 'string');
13612 }
13613 }
8b095871 13614
9987f0c1
IC
13615 return name + ': ' + str;
13616}
8b095871 13617
8b095871 13618
9987f0c1
IC
13619function reduceToSingleString(output, base, braces) {
13620 var numLinesEst = 0;
13621 var length = output.reduce(function(prev, cur) {
13622 numLinesEst++;
13623 if (cur.indexOf('\n') >= 0) numLinesEst++;
13624 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
13625 }, 0);
8b095871 13626
9987f0c1
IC
13627 if (length > 60) {
13628 return braces[0] +
13629 (base === '' ? '' : base + '\n ') +
13630 ' ' +
13631 output.join(',\n ') +
13632 ' ' +
13633 braces[1];
13634 }
8b095871 13635
9987f0c1
IC
13636 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
13637}
8b095871 13638
8b095871 13639
9987f0c1
IC
13640// NOTE: These type checking functions intentionally don't use `instanceof`
13641// because it is fragile and can be easily faked with `Object.create()`.
13642function isArray(ar) {
13643 return Array.isArray(ar);
8b095871 13644}
9987f0c1 13645exports.isArray = isArray;
8b095871 13646
9987f0c1
IC
13647function isBoolean(arg) {
13648 return typeof arg === 'boolean';
13649}
13650exports.isBoolean = isBoolean;
8b095871 13651
9987f0c1
IC
13652function isNull(arg) {
13653 return arg === null;
13654}
13655exports.isNull = isNull;
8b095871 13656
9987f0c1
IC
13657function isNullOrUndefined(arg) {
13658 return arg == null;
13659}
13660exports.isNullOrUndefined = isNullOrUndefined;
8b095871 13661
9987f0c1
IC
13662function isNumber(arg) {
13663 return typeof arg === 'number';
13664}
13665exports.isNumber = isNumber;
8b095871 13666
9987f0c1
IC
13667function isString(arg) {
13668 return typeof arg === 'string';
13669}
13670exports.isString = isString;
8b095871 13671
9987f0c1
IC
13672function isSymbol(arg) {
13673 return typeof arg === 'symbol';
13674}
13675exports.isSymbol = isSymbol;
8b095871 13676
9987f0c1
IC
13677function isUndefined(arg) {
13678 return arg === void 0;
8b095871 13679}
9987f0c1 13680exports.isUndefined = isUndefined;
8b095871 13681
9987f0c1
IC
13682function isRegExp(re) {
13683 return isObject(re) && objectToString(re) === '[object RegExp]';
13684}
13685exports.isRegExp = isRegExp;
8b095871 13686
9987f0c1
IC
13687function isObject(arg) {
13688 return typeof arg === 'object' && arg !== null;
13689}
13690exports.isObject = isObject;
8b095871 13691
9987f0c1
IC
13692function isDate(d) {
13693 return isObject(d) && objectToString(d) === '[object Date]';
13694}
13695exports.isDate = isDate;
8b095871 13696
9987f0c1
IC
13697function isError(e) {
13698 return isObject(e) &&
13699 (objectToString(e) === '[object Error]' || e instanceof Error);
13700}
13701exports.isError = isError;
8b095871 13702
9987f0c1
IC
13703function isFunction(arg) {
13704 return typeof arg === 'function';
13705}
13706exports.isFunction = isFunction;
8b095871 13707
9987f0c1
IC
13708function isPrimitive(arg) {
13709 return arg === null ||
13710 typeof arg === 'boolean' ||
13711 typeof arg === 'number' ||
13712 typeof arg === 'string' ||
13713 typeof arg === 'symbol' || // ES6 symbol
13714 typeof arg === 'undefined';
13715}
13716exports.isPrimitive = isPrimitive;
8b095871 13717
9987f0c1 13718exports.isBuffer = require('./support/isBuffer');
8b095871 13719
9987f0c1
IC
13720function objectToString(o) {
13721 return Object.prototype.toString.call(o);
8b095871
IC
13722}
13723
8b095871 13724
9987f0c1
IC
13725function pad(n) {
13726 return n < 10 ? '0' + n.toString(10) : n.toString(10);
13727}
8b095871 13728
8b095871 13729
9987f0c1
IC
13730var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
13731 'Oct', 'Nov', 'Dec'];
8b095871 13732
9987f0c1
IC
13733// 26 Feb 16:19:34
13734function timestamp() {
13735 var d = new Date();
13736 var time = [pad(d.getHours()),
13737 pad(d.getMinutes()),
13738 pad(d.getSeconds())].join(':');
13739 return [d.getDate(), months[d.getMonth()], time].join(' ');
13740}
13741
13742
13743// log is just a thin wrapper to console.log that prepends a timestamp
13744exports.log = function() {
13745 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
8b095871
IC
13746};
13747
13748
9987f0c1
IC
13749/**
13750 * Inherit the prototype methods from one constructor into another.
13751 *
13752 * The Function.prototype.inherits from lang.js rewritten as a standalone
13753 * function (not on Function.prototype). NOTE: If this file is to be loaded
13754 * during bootstrapping this function needs to be rewritten using some native
13755 * functions as prototype setup using normal JavaScript does not work as
13756 * expected during bootstrapping (see mirror.js in r114903).
13757 *
13758 * @param {function} ctor Constructor function which needs to inherit the
13759 * prototype.
13760 * @param {function} superCtor Constructor function to inherit prototype from.
13761 */
13762exports.inherits = require('inherits');
8b095871 13763
9987f0c1
IC
13764exports._extend = function(origin, add) {
13765 // Don't do anything if add isn't an object
13766 if (!add || !isObject(add)) return origin;
8b095871 13767
9987f0c1
IC
13768 var keys = Object.keys(add);
13769 var i = keys.length;
13770 while (i--) {
13771 origin[keys[i]] = add[keys[i]];
13772 }
13773 return origin;
13774};
8b095871 13775
9987f0c1
IC
13776function hasOwnProperty(obj, prop) {
13777 return Object.prototype.hasOwnProperty.call(obj, prop);
13778}
8b095871 13779
9987f0c1
IC
13780}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
13781},{"./support/isBuffer":31,"_process":12,"inherits":30}],33:[function(require,module,exports){
13782module.exports = {
13783 base58: require('bs58'),
13784 bitcoin: require('bitcoinjs-lib'),
13785 ecurve: require('ecurve'),
13786 BigInteger: require('bigi')
8b095871
IC
13787}
13788
9987f0c1
IC
13789},{"bigi":37,"bitcoinjs-lib":50,"bs58":79,"ecurve":89}],34:[function(require,module,exports){
13790// base-x encoding
13791// Forked from https://github.com/cryptocoinjs/bs58
13792// Originally written by Mike Hearn for BitcoinJ
13793// Copyright (c) 2011 Google Inc
13794// Ported to JavaScript by Stefan Thomas
13795// Merged Buffer refactorings from base58-native by Stephen Pair
13796// Copyright (c) 2013 BitPay Inc
8b095871 13797
9987f0c1 13798var Buffer = require('safe-buffer').Buffer
8b095871 13799
9987f0c1
IC
13800module.exports = function base (ALPHABET) {
13801 var ALPHABET_MAP = {}
13802 var BASE = ALPHABET.length
13803 var LEADER = ALPHABET.charAt(0)
8b095871 13804
9987f0c1
IC
13805 // pre-compute lookup table
13806 for (var z = 0; z < ALPHABET.length; z++) {
13807 var x = ALPHABET.charAt(z)
8b095871 13808
9987f0c1
IC
13809 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
13810 ALPHABET_MAP[x] = z
13811 }
8b095871 13812
9987f0c1
IC
13813 function encode (source) {
13814 if (source.length === 0) return ''
8b095871 13815
9987f0c1
IC
13816 var digits = [0]
13817 for (var i = 0; i < source.length; ++i) {
13818 for (var j = 0, carry = source[i]; j < digits.length; ++j) {
13819 carry += digits[j] << 8
13820 digits[j] = carry % BASE
13821 carry = (carry / BASE) | 0
13822 }
8b095871 13823
9987f0c1
IC
13824 while (carry > 0) {
13825 digits.push(carry % BASE)
13826 carry = (carry / BASE) | 0
13827 }
13828 }
8b095871 13829
9987f0c1 13830 var string = ''
8b095871 13831
9987f0c1
IC
13832 // deal with leading zeros
13833 for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += ALPHABET[0]
13834 // convert digits to a string
13835 for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]
8b095871 13836
9987f0c1
IC
13837 return string
13838 }
8b095871 13839
9987f0c1
IC
13840 function decodeUnsafe (string) {
13841 if (string.length === 0) return Buffer.allocUnsafe(0)
8b095871 13842
9987f0c1
IC
13843 var bytes = [0]
13844 for (var i = 0; i < string.length; i++) {
13845 var value = ALPHABET_MAP[string[i]]
13846 if (value === undefined) return
8b095871 13847
9987f0c1
IC
13848 for (var j = 0, carry = value; j < bytes.length; ++j) {
13849 carry += bytes[j] * BASE
13850 bytes[j] = carry & 0xff
13851 carry >>= 8
13852 }
8b095871 13853
9987f0c1
IC
13854 while (carry > 0) {
13855 bytes.push(carry & 0xff)
13856 carry >>= 8
13857 }
13858 }
8b095871 13859
9987f0c1
IC
13860 // deal with leading zeros
13861 for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {
13862 bytes.push(0)
13863 }
8b095871 13864
9987f0c1
IC
13865 return Buffer.from(bytes.reverse())
13866 }
8b095871 13867
9987f0c1
IC
13868 function decode (string) {
13869 var buffer = decodeUnsafe(string)
13870 if (buffer) return buffer
8b095871 13871
9987f0c1
IC
13872 throw new Error('Non-base' + BASE + ' character')
13873 }
8b095871 13874
9987f0c1
IC
13875 return {
13876 encode: encode,
13877 decodeUnsafe: decodeUnsafe,
13878 decode: decode
13879 }
13880}
8b095871 13881
9987f0c1
IC
13882},{"safe-buffer":98}],35:[function(require,module,exports){
13883// (public) Constructor
13884function BigInteger(a, b, c) {
13885 if (!(this instanceof BigInteger))
13886 return new BigInteger(a, b, c)
8b095871 13887
9987f0c1
IC
13888 if (a != null) {
13889 if ("number" == typeof a) this.fromNumber(a, b, c)
13890 else if (b == null && "string" != typeof a) this.fromString(a, 256)
13891 else this.fromString(a, b)
13892 }
13893}
8b095871 13894
9987f0c1 13895var proto = BigInteger.prototype
8b095871 13896
9987f0c1
IC
13897// duck-typed isBigInteger
13898proto.__bigi = require('../package.json').version
13899BigInteger.isBigInteger = function (obj, check_ver) {
13900 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
13901}
8b095871 13902
9987f0c1
IC
13903// Bits per digit
13904var dbits
8b095871 13905
9987f0c1
IC
13906// am: Compute w_j += (x*this_i), propagate carries,
13907// c is initial carry, returns final carry.
13908// c < 3*dvalue, x < 2*dvalue, this_i < dvalue
13909// We need to select the fastest one that works in this environment.
8b095871 13910
9987f0c1
IC
13911// am1: use a single mult and divide to get the high bits,
13912// max digit bits should be 26 because
13913// max internal value = 2*dvalue^2-2*dvalue (< 2^53)
13914function am1(i, x, w, j, c, n) {
13915 while (--n >= 0) {
13916 var v = x * this[i++] + w[j] + c
13917 c = Math.floor(v / 0x4000000)
13918 w[j++] = v & 0x3ffffff
13919 }
13920 return c
13921}
13922// am2 avoids a big mult-and-extract completely.
13923// Max digit bits should be <= 30 because we do bitwise ops
13924// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
13925function am2(i, x, w, j, c, n) {
13926 var xl = x & 0x7fff,
13927 xh = x >> 15
13928 while (--n >= 0) {
13929 var l = this[i] & 0x7fff
13930 var h = this[i++] >> 15
13931 var m = xh * l + h * xl
13932 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
13933 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
13934 w[j++] = l & 0x3fffffff
13935 }
13936 return c
13937}
13938// Alternately, set max digit bits to 28 since some
13939// browsers slow down when dealing with 32-bit numbers.
13940function am3(i, x, w, j, c, n) {
13941 var xl = x & 0x3fff,
13942 xh = x >> 14
13943 while (--n >= 0) {
13944 var l = this[i] & 0x3fff
13945 var h = this[i++] >> 14
13946 var m = xh * l + h * xl
13947 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
13948 c = (l >> 28) + (m >> 14) + xh * h
13949 w[j++] = l & 0xfffffff
13950 }
13951 return c
13952}
8b095871 13953
9987f0c1
IC
13954// wtf?
13955BigInteger.prototype.am = am1
13956dbits = 26
8b095871 13957
9987f0c1
IC
13958BigInteger.prototype.DB = dbits
13959BigInteger.prototype.DM = ((1 << dbits) - 1)
13960var DV = BigInteger.prototype.DV = (1 << dbits)
8b095871 13961
9987f0c1
IC
13962var BI_FP = 52
13963BigInteger.prototype.FV = Math.pow(2, BI_FP)
13964BigInteger.prototype.F1 = BI_FP - dbits
13965BigInteger.prototype.F2 = 2 * dbits - BI_FP
8b095871 13966
9987f0c1
IC
13967// Digit conversions
13968var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
13969var BI_RC = new Array()
13970var rr, vv
13971rr = "0".charCodeAt(0)
13972for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
13973rr = "a".charCodeAt(0)
13974for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
13975rr = "A".charCodeAt(0)
13976for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
8b095871 13977
9987f0c1
IC
13978function int2char(n) {
13979 return BI_RM.charAt(n)
13980}
8b095871 13981
9987f0c1
IC
13982function intAt(s, i) {
13983 var c = BI_RC[s.charCodeAt(i)]
13984 return (c == null) ? -1 : c
13985}
8b095871 13986
9987f0c1
IC
13987// (protected) copy this to r
13988function bnpCopyTo(r) {
13989 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
13990 r.t = this.t
13991 r.s = this.s
13992}
8b095871 13993
9987f0c1
IC
13994// (protected) set from integer value x, -DV <= x < DV
13995function bnpFromInt(x) {
13996 this.t = 1
13997 this.s = (x < 0) ? -1 : 0
13998 if (x > 0) this[0] = x
13999 else if (x < -1) this[0] = x + DV
14000 else this.t = 0
14001}
8b095871 14002
9987f0c1
IC
14003// return bigint initialized to value
14004function nbv(i) {
14005 var r = new BigInteger()
14006 r.fromInt(i)
14007 return r
8b095871
IC
14008}
14009
9987f0c1
IC
14010// (protected) set from string and radix
14011function bnpFromString(s, b) {
14012 var self = this
8b095871 14013
9987f0c1
IC
14014 var k
14015 if (b == 16) k = 4
14016 else if (b == 8) k = 3
14017 else if (b == 256) k = 8; // byte array
14018 else if (b == 2) k = 1
14019 else if (b == 32) k = 5
14020 else if (b == 4) k = 2
14021 else {
14022 self.fromRadix(s, b)
14023 return
14024 }
14025 self.t = 0
14026 self.s = 0
14027 var i = s.length,
14028 mi = false,
14029 sh = 0
14030 while (--i >= 0) {
14031 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
14032 if (x < 0) {
14033 if (s.charAt(i) == "-") mi = true
14034 continue
14035 }
14036 mi = false
14037 if (sh == 0)
14038 self[self.t++] = x
14039 else if (sh + k > self.DB) {
14040 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
14041 self[self.t++] = (x >> (self.DB - sh))
14042 } else
14043 self[self.t - 1] |= x << sh
14044 sh += k
14045 if (sh >= self.DB) sh -= self.DB
14046 }
14047 if (k == 8 && (s[0] & 0x80) != 0) {
14048 self.s = -1
14049 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
14050 }
14051 self.clamp()
14052 if (mi) BigInteger.ZERO.subTo(self, self)
14053}
8b095871 14054
9987f0c1
IC
14055// (protected) clamp off excess high words
14056function bnpClamp() {
14057 var c = this.s & this.DM
14058 while (this.t > 0 && this[this.t - 1] == c)--this.t
8b095871
IC
14059}
14060
9987f0c1
IC
14061// (public) return string representation in given radix
14062function bnToString(b) {
14063 var self = this
14064 if (self.s < 0) return "-" + self.negate()
14065 .toString(b)
14066 var k
14067 if (b == 16) k = 4
14068 else if (b == 8) k = 3
14069 else if (b == 2) k = 1
14070 else if (b == 32) k = 5
14071 else if (b == 4) k = 2
14072 else return self.toRadix(b)
14073 var km = (1 << k) - 1,
14074 d, m = false,
14075 r = "",
14076 i = self.t
14077 var p = self.DB - (i * self.DB) % k
14078 if (i-- > 0) {
14079 if (p < self.DB && (d = self[i] >> p) > 0) {
14080 m = true
14081 r = int2char(d)
14082 }
14083 while (i >= 0) {
14084 if (p < k) {
14085 d = (self[i] & ((1 << p) - 1)) << (k - p)
14086 d |= self[--i] >> (p += self.DB - k)
14087 } else {
14088 d = (self[i] >> (p -= k)) & km
14089 if (p <= 0) {
14090 p += self.DB
14091 --i
14092 }
14093 }
14094 if (d > 0) m = true
14095 if (m) r += int2char(d)
14096 }
8b095871 14097 }
9987f0c1 14098 return m ? r : "0"
8b095871
IC
14099}
14100
9987f0c1
IC
14101// (public) -this
14102function bnNegate() {
14103 var r = new BigInteger()
14104 BigInteger.ZERO.subTo(this, r)
14105 return r
14106}
8b095871 14107
9987f0c1
IC
14108// (public) |this|
14109function bnAbs() {
14110 return (this.s < 0) ? this.negate() : this
14111}
8b095871 14112
9987f0c1
IC
14113// (public) return + if this > a, - if this < a, 0 if equal
14114function bnCompareTo(a) {
14115 var r = this.s - a.s
14116 if (r != 0) return r
14117 var i = this.t
14118 r = i - a.t
14119 if (r != 0) return (this.s < 0) ? -r : r
14120 while (--i >= 0)
14121 if ((r = this[i] - a[i]) != 0) return r
14122 return 0
14123}
8b095871 14124
9987f0c1
IC
14125// returns bit length of the integer x
14126function nbits(x) {
14127 var r = 1,
14128 t
14129 if ((t = x >>> 16) != 0) {
14130 x = t
14131 r += 16
14132 }
14133 if ((t = x >> 8) != 0) {
14134 x = t
14135 r += 8
14136 }
14137 if ((t = x >> 4) != 0) {
14138 x = t
14139 r += 4
14140 }
14141 if ((t = x >> 2) != 0) {
14142 x = t
14143 r += 2
14144 }
14145 if ((t = x >> 1) != 0) {
14146 x = t
14147 r += 1
8b095871 14148 }
9987f0c1
IC
14149 return r
14150}
8b095871 14151
9987f0c1
IC
14152// (public) return the number of bits in "this"
14153function bnBitLength() {
14154 if (this.t <= 0) return 0
14155 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
14156}
8b095871 14157
9987f0c1
IC
14158// (public) return the number of bytes in "this"
14159function bnByteLength() {
14160 return this.bitLength() >> 3
14161}
8b095871 14162
9987f0c1
IC
14163// (protected) r = this << n*DB
14164function bnpDLShiftTo(n, r) {
14165 var i
14166 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
14167 for (i = n - 1; i >= 0; --i) r[i] = 0
14168 r.t = this.t + n
14169 r.s = this.s
14170}
8b095871 14171
9987f0c1
IC
14172// (protected) r = this >> n*DB
14173function bnpDRShiftTo(n, r) {
14174 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
14175 r.t = Math.max(this.t - n, 0)
14176 r.s = this.s
14177}
8b095871 14178
9987f0c1
IC
14179// (protected) r = this << n
14180function bnpLShiftTo(n, r) {
14181 var self = this
14182 var bs = n % self.DB
14183 var cbs = self.DB - bs
14184 var bm = (1 << cbs) - 1
14185 var ds = Math.floor(n / self.DB),
14186 c = (self.s << bs) & self.DM,
14187 i
14188 for (i = self.t - 1; i >= 0; --i) {
14189 r[i + ds + 1] = (self[i] >> cbs) | c
14190 c = (self[i] & bm) << bs
14191 }
14192 for (i = ds - 1; i >= 0; --i) r[i] = 0
14193 r[ds] = c
14194 r.t = self.t + ds + 1
14195 r.s = self.s
14196 r.clamp()
14197}
8b095871 14198
9987f0c1
IC
14199// (protected) r = this >> n
14200function bnpRShiftTo(n, r) {
14201 var self = this
14202 r.s = self.s
14203 var ds = Math.floor(n / self.DB)
14204 if (ds >= self.t) {
14205 r.t = 0
14206 return
8b095871 14207 }
9987f0c1
IC
14208 var bs = n % self.DB
14209 var cbs = self.DB - bs
14210 var bm = (1 << bs) - 1
14211 r[0] = self[ds] >> bs
14212 for (var i = ds + 1; i < self.t; ++i) {
14213 r[i - ds - 1] |= (self[i] & bm) << cbs
14214 r[i - ds] = self[i] >> bs
14215 }
14216 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
14217 r.t = self.t - ds
14218 r.clamp()
14219}
8b095871 14220
9987f0c1
IC
14221// (protected) r = this - a
14222function bnpSubTo(a, r) {
14223 var self = this
14224 var i = 0,
14225 c = 0,
14226 m = Math.min(a.t, self.t)
14227 while (i < m) {
14228 c += self[i] - a[i]
14229 r[i++] = c & self.DM
14230 c >>= self.DB
8b095871 14231 }
9987f0c1
IC
14232 if (a.t < self.t) {
14233 c -= a.s
14234 while (i < self.t) {
14235 c += self[i]
14236 r[i++] = c & self.DM
14237 c >>= self.DB
14238 }
14239 c += self.s
14240 } else {
14241 c += self.s
14242 while (i < a.t) {
14243 c -= a[i]
14244 r[i++] = c & self.DM
14245 c >>= self.DB
14246 }
14247 c -= a.s
14248 }
14249 r.s = (c < 0) ? -1 : 0
14250 if (c < -1) r[i++] = self.DV + c
14251 else if (c > 0) r[i++] = c
14252 r.t = i
14253 r.clamp()
8b095871
IC
14254}
14255
9987f0c1
IC
14256// (protected) r = this * a, r != this,a (HAC 14.12)
14257// "this" should be the larger one if appropriate.
14258function bnpMultiplyTo(a, r) {
14259 var x = this.abs(),
14260 y = a.abs()
14261 var i = x.t
14262 r.t = i + y.t
14263 while (--i >= 0) r[i] = 0
14264 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
14265 r.s = 0
14266 r.clamp()
14267 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
14268}
8b095871 14269
9987f0c1
IC
14270// (protected) r = this^2, r != this (HAC 14.16)
14271function bnpSquareTo(r) {
14272 var x = this.abs()
14273 var i = r.t = 2 * x.t
14274 while (--i >= 0) r[i] = 0
14275 for (i = 0; i < x.t - 1; ++i) {
14276 var c = x.am(i, x[i], r, 2 * i, 0, 1)
14277 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
14278 r[i + x.t] -= x.DV
14279 r[i + x.t + 1] = 1
14280 }
14281 }
14282 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
14283 r.s = 0
14284 r.clamp()
14285}
8b095871 14286
9987f0c1
IC
14287// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
14288// r != q, this != m. q or r may be null.
14289function bnpDivRemTo(m, q, r) {
14290 var self = this
14291 var pm = m.abs()
14292 if (pm.t <= 0) return
14293 var pt = self.abs()
14294 if (pt.t < pm.t) {
14295 if (q != null) q.fromInt(0)
14296 if (r != null) self.copyTo(r)
14297 return
14298 }
14299 if (r == null) r = new BigInteger()
14300 var y = new BigInteger(),
14301 ts = self.s,
14302 ms = m.s
14303 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
14304 if (nsh > 0) {
14305 pm.lShiftTo(nsh, y)
14306 pt.lShiftTo(nsh, r)
14307 } else {
14308 pm.copyTo(y)
14309 pt.copyTo(r)
14310 }
14311 var ys = y.t
14312 var y0 = y[ys - 1]
14313 if (y0 == 0) return
14314 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
14315 var d1 = self.FV / yt,
14316 d2 = (1 << self.F1) / yt,
14317 e = 1 << self.F2
14318 var i = r.t,
14319 j = i - ys,
14320 t = (q == null) ? new BigInteger() : q
14321 y.dlShiftTo(j, t)
14322 if (r.compareTo(t) >= 0) {
14323 r[r.t++] = 1
14324 r.subTo(t, r)
14325 }
14326 BigInteger.ONE.dlShiftTo(ys, t)
14327 t.subTo(y, y); // "negative" y so we can replace sub with am later
14328 while (y.t < ys) y[y.t++] = 0
14329 while (--j >= 0) {
14330 // Estimate quotient digit
14331 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
14332 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
14333 y.dlShiftTo(j, t)
14334 r.subTo(t, r)
14335 while (r[i] < --qd) r.subTo(t, r)
14336 }
14337 }
14338 if (q != null) {
14339 r.drShiftTo(ys, q)
14340 if (ts != ms) BigInteger.ZERO.subTo(q, q)
14341 }
14342 r.t = ys
14343 r.clamp()
14344 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
14345 if (ts < 0) BigInteger.ZERO.subTo(r, r)
14346}
8b095871 14347
9987f0c1
IC
14348// (public) this mod a
14349function bnMod(a) {
14350 var r = new BigInteger()
14351 this.abs()
14352 .divRemTo(a, null, r)
14353 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
14354 return r
14355}
8b095871 14356
9987f0c1
IC
14357// Modular reduction using "classic" algorithm
14358function Classic(m) {
14359 this.m = m
8b095871
IC
14360}
14361
9987f0c1
IC
14362function cConvert(x) {
14363 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
14364 else return x
8b095871
IC
14365}
14366
9987f0c1
IC
14367function cRevert(x) {
14368 return x
14369}
8b095871 14370
9987f0c1
IC
14371function cReduce(x) {
14372 x.divRemTo(this.m, null, x)
8b095871
IC
14373}
14374
9987f0c1
IC
14375function cMulTo(x, y, r) {
14376 x.multiplyTo(y, r)
14377 this.reduce(r)
8b095871
IC
14378}
14379
9987f0c1
IC
14380function cSqrTo(x, r) {
14381 x.squareTo(r)
14382 this.reduce(r)
14383}
8b095871 14384
9987f0c1
IC
14385Classic.prototype.convert = cConvert
14386Classic.prototype.revert = cRevert
14387Classic.prototype.reduce = cReduce
14388Classic.prototype.mulTo = cMulTo
14389Classic.prototype.sqrTo = cSqrTo
8b095871 14390
9987f0c1
IC
14391// (protected) return "-1/this % 2^DB"; useful for Mont. reduction
14392// justification:
14393// xy == 1 (mod m)
14394// xy = 1+km
14395// xy(2-xy) = (1+km)(1-km)
14396// x[y(2-xy)] = 1-k^2m^2
14397// x[y(2-xy)] == 1 (mod m^2)
14398// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
14399// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
14400// JS multiply "overflows" differently from C/C++, so care is needed here.
14401function bnpInvDigit() {
14402 if (this.t < 1) return 0
14403 var x = this[0]
14404 if ((x & 1) == 0) return 0
14405 var y = x & 3; // y == 1/x mod 2^2
14406 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
14407 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
14408 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
14409 // last step - calculate inverse mod DV directly
14410 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
14411 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
14412 // we really want the negative inverse, and -DV < y < DV
14413 return (y > 0) ? this.DV - y : -y
14414}
8b095871 14415
9987f0c1
IC
14416// Montgomery reduction
14417function Montgomery(m) {
14418 this.m = m
14419 this.mp = m.invDigit()
14420 this.mpl = this.mp & 0x7fff
14421 this.mph = this.mp >> 15
14422 this.um = (1 << (m.DB - 15)) - 1
14423 this.mt2 = 2 * m.t
14424}
8b095871 14425
9987f0c1
IC
14426// xR mod m
14427function montConvert(x) {
14428 var r = new BigInteger()
14429 x.abs()
14430 .dlShiftTo(this.m.t, r)
14431 r.divRemTo(this.m, null, r)
14432 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
14433 return r
8b095871
IC
14434}
14435
9987f0c1
IC
14436// x/R mod m
14437function montRevert(x) {
14438 var r = new BigInteger()
14439 x.copyTo(r)
14440 this.reduce(r)
14441 return r
8b095871
IC
14442}
14443
9987f0c1
IC
14444// x = x/R mod m (HAC 14.32)
14445function montReduce(x) {
14446 while (x.t <= this.mt2) // pad x so am has enough room later
14447 x[x.t++] = 0
14448 for (var i = 0; i < this.m.t; ++i) {
14449 // faster way of calculating u0 = x[i]*mp mod DV
14450 var j = x[i] & 0x7fff
14451 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
14452 // use am to combine the multiply-shift-add into one call
14453 j = i + this.m.t
14454 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
14455 // propagate carry
14456 while (x[j] >= x.DV) {
14457 x[j] -= x.DV
14458 x[++j]++
14459 }
8b095871 14460 }
9987f0c1
IC
14461 x.clamp()
14462 x.drShiftTo(this.m.t, x)
14463 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
8b095871
IC
14464}
14465
9987f0c1
IC
14466// r = "x^2/R mod m"; x != r
14467function montSqrTo(x, r) {
14468 x.squareTo(r)
14469 this.reduce(r)
14470}
8b095871 14471
9987f0c1
IC
14472// r = "xy/R mod m"; x,y != r
14473function montMulTo(x, y, r) {
14474 x.multiplyTo(y, r)
14475 this.reduce(r)
14476}
8b095871 14477
9987f0c1
IC
14478Montgomery.prototype.convert = montConvert
14479Montgomery.prototype.revert = montRevert
14480Montgomery.prototype.reduce = montReduce
14481Montgomery.prototype.mulTo = montMulTo
14482Montgomery.prototype.sqrTo = montSqrTo
8b095871 14483
9987f0c1
IC
14484// (protected) true iff this is even
14485function bnpIsEven() {
14486 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
14487}
8b095871 14488
9987f0c1
IC
14489// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
14490function bnpExp(e, z) {
14491 if (e > 0xffffffff || e < 1) return BigInteger.ONE
14492 var r = new BigInteger(),
14493 r2 = new BigInteger(),
14494 g = z.convert(this),
14495 i = nbits(e) - 1
14496 g.copyTo(r)
14497 while (--i >= 0) {
14498 z.sqrTo(r, r2)
14499 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
14500 else {
14501 var t = r
14502 r = r2
14503 r2 = t
8b095871 14504 }
8b095871 14505 }
9987f0c1 14506 return z.revert(r)
8b095871
IC
14507}
14508
9987f0c1
IC
14509// (public) this^e % m, 0 <= e < 2^32
14510function bnModPowInt(e, m) {
14511 var z
14512 if (e < 256 || m.isEven()) z = new Classic(m)
14513 else z = new Montgomery(m)
14514 return this.exp(e, z)
14515}
8b095871 14516
9987f0c1
IC
14517// protected
14518proto.copyTo = bnpCopyTo
14519proto.fromInt = bnpFromInt
14520proto.fromString = bnpFromString
14521proto.clamp = bnpClamp
14522proto.dlShiftTo = bnpDLShiftTo
14523proto.drShiftTo = bnpDRShiftTo
14524proto.lShiftTo = bnpLShiftTo
14525proto.rShiftTo = bnpRShiftTo
14526proto.subTo = bnpSubTo
14527proto.multiplyTo = bnpMultiplyTo
14528proto.squareTo = bnpSquareTo
14529proto.divRemTo = bnpDivRemTo
14530proto.invDigit = bnpInvDigit
14531proto.isEven = bnpIsEven
14532proto.exp = bnpExp
8b095871 14533
9987f0c1
IC
14534// public
14535proto.toString = bnToString
14536proto.negate = bnNegate
14537proto.abs = bnAbs
14538proto.compareTo = bnCompareTo
14539proto.bitLength = bnBitLength
14540proto.byteLength = bnByteLength
14541proto.mod = bnMod
14542proto.modPowInt = bnModPowInt
8b095871 14543
9987f0c1
IC
14544// (public)
14545function bnClone() {
14546 var r = new BigInteger()
14547 this.copyTo(r)
14548 return r
14549}
8b095871 14550
9987f0c1
IC
14551// (public) return value as integer
14552function bnIntValue() {
14553 if (this.s < 0) {
14554 if (this.t == 1) return this[0] - this.DV
14555 else if (this.t == 0) return -1
14556 } else if (this.t == 1) return this[0]
14557 else if (this.t == 0) return 0
14558 // assumes 16 < DB < 32
14559 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
14560}
8b095871 14561
9987f0c1
IC
14562// (public) return value as byte
14563function bnByteValue() {
14564 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
14565}
8b095871 14566
9987f0c1
IC
14567// (public) return value as short (assumes DB>=16)
14568function bnShortValue() {
14569 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
14570}
8b095871 14571
9987f0c1
IC
14572// (protected) return x s.t. r^x < DV
14573function bnpChunkSize(r) {
14574 return Math.floor(Math.LN2 * this.DB / Math.log(r))
8b095871
IC
14575}
14576
9987f0c1
IC
14577// (public) 0 if this == 0, 1 if this > 0
14578function bnSigNum() {
14579 if (this.s < 0) return -1
14580 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
14581 else return 1
8b095871
IC
14582}
14583
9987f0c1
IC
14584// (protected) convert to radix string
14585function bnpToRadix(b) {
14586 if (b == null) b = 10
14587 if (this.signum() == 0 || b < 2 || b > 36) return "0"
14588 var cs = this.chunkSize(b)
14589 var a = Math.pow(b, cs)
14590 var d = nbv(a),
14591 y = new BigInteger(),
14592 z = new BigInteger(),
14593 r = ""
14594 this.divRemTo(d, y, z)
14595 while (y.signum() > 0) {
14596 r = (a + z.intValue())
14597 .toString(b)
14598 .substr(1) + r
14599 y.divRemTo(d, y, z)
8b095871 14600 }
9987f0c1
IC
14601 return z.intValue()
14602 .toString(b) + r
8b095871
IC
14603}
14604
9987f0c1
IC
14605// (protected) convert from radix string
14606function bnpFromRadix(s, b) {
14607 var self = this
14608 self.fromInt(0)
14609 if (b == null) b = 10
14610 var cs = self.chunkSize(b)
14611 var d = Math.pow(b, cs),
14612 mi = false,
14613 j = 0,
14614 w = 0
14615 for (var i = 0; i < s.length; ++i) {
14616 var x = intAt(s, i)
14617 if (x < 0) {
14618 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
14619 continue
14620 }
14621 w = b * w + x
14622 if (++j >= cs) {
14623 self.dMultiply(d)
14624 self.dAddOffset(w, 0)
14625 j = 0
14626 w = 0
14627 }
8b095871 14628 }
9987f0c1
IC
14629 if (j > 0) {
14630 self.dMultiply(Math.pow(b, j))
14631 self.dAddOffset(w, 0)
14632 }
14633 if (mi) BigInteger.ZERO.subTo(self, self)
8b095871
IC
14634}
14635
9987f0c1
IC
14636// (protected) alternate constructor
14637function bnpFromNumber(a, b, c) {
14638 var self = this
14639 if ("number" == typeof b) {
14640 // new BigInteger(int,int,RNG)
14641 if (a < 2) self.fromInt(1)
14642 else {
14643 self.fromNumber(a, c)
14644 if (!self.testBit(a - 1)) // force MSB set
14645 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
14646 if (self.isEven()) self.dAddOffset(1, 0); // force odd
14647 while (!self.isProbablePrime(b)) {
14648 self.dAddOffset(2, 0)
14649 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
14650 }
14651 }
14652 } else {
14653 // new BigInteger(int,RNG)
14654 var x = new Array(),
14655 t = a & 7
14656 x.length = (a >> 3) + 1
14657 b.nextBytes(x)
14658 if (t > 0) x[0] &= ((1 << t) - 1)
14659 else x[0] = 0
14660 self.fromString(x, 256)
14661 }
8b095871 14662}
8b095871 14663
9987f0c1
IC
14664// (public) convert to bigendian byte array
14665function bnToByteArray() {
14666 var self = this
14667 var i = self.t,
14668 r = new Array()
14669 r[0] = self.s
14670 var p = self.DB - (i * self.DB) % 8,
14671 d, k = 0
14672 if (i-- > 0) {
14673 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
14674 r[k++] = d | (self.s << (self.DB - p))
14675 while (i >= 0) {
14676 if (p < 8) {
14677 d = (self[i] & ((1 << p) - 1)) << (8 - p)
14678 d |= self[--i] >> (p += self.DB - 8)
14679 } else {
14680 d = (self[i] >> (p -= 8)) & 0xff
14681 if (p <= 0) {
14682 p += self.DB
14683 --i
14684 }
14685 }
14686 if ((d & 0x80) != 0) d |= -256
14687 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
14688 if (k > 0 || d != self.s) r[k++] = d
14689 }
14690 }
14691 return r
8b095871 14692}
8b095871 14693
9987f0c1
IC
14694function bnEquals(a) {
14695 return (this.compareTo(a) == 0)
8b095871 14696}
8b095871 14697
9987f0c1
IC
14698function bnMin(a) {
14699 return (this.compareTo(a) < 0) ? this : a
8b095871 14700}
8b095871 14701
9987f0c1
IC
14702function bnMax(a) {
14703 return (this.compareTo(a) > 0) ? this : a
8b095871 14704}
8b095871 14705
9987f0c1
IC
14706// (protected) r = this op a (bitwise)
14707function bnpBitwiseTo(a, op, r) {
14708 var self = this
14709 var i, f, m = Math.min(a.t, self.t)
14710 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
14711 if (a.t < self.t) {
14712 f = a.s & self.DM
14713 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
14714 r.t = self.t
14715 } else {
14716 f = self.s & self.DM
14717 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
14718 r.t = a.t
14719 }
14720 r.s = op(self.s, a.s)
14721 r.clamp()
8b095871 14722}
8b095871 14723
9987f0c1
IC
14724// (public) this & a
14725function op_and(x, y) {
14726 return x & y
8b095871 14727}
8b095871 14728
9987f0c1
IC
14729function bnAnd(a) {
14730 var r = new BigInteger()
14731 this.bitwiseTo(a, op_and, r)
14732 return r
8b095871 14733}
8b095871 14734
9987f0c1
IC
14735// (public) this | a
14736function op_or(x, y) {
14737 return x | y
8b095871 14738}
8b095871 14739
9987f0c1
IC
14740function bnOr(a) {
14741 var r = new BigInteger()
14742 this.bitwiseTo(a, op_or, r)
14743 return r
8b095871 14744}
8b095871 14745
9987f0c1
IC
14746// (public) this ^ a
14747function op_xor(x, y) {
14748 return x ^ y
8b095871 14749}
8b095871 14750
9987f0c1
IC
14751function bnXor(a) {
14752 var r = new BigInteger()
14753 this.bitwiseTo(a, op_xor, r)
14754 return r
8b095871 14755}
8b095871 14756
9987f0c1
IC
14757// (public) this & ~a
14758function op_andnot(x, y) {
14759 return x & ~y
8b095871 14760}
8b095871 14761
9987f0c1
IC
14762function bnAndNot(a) {
14763 var r = new BigInteger()
14764 this.bitwiseTo(a, op_andnot, r)
14765 return r
8b095871 14766}
8b095871 14767
9987f0c1
IC
14768// (public) ~this
14769function bnNot() {
14770 var r = new BigInteger()
14771 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
14772 r.t = this.t
14773 r.s = ~this.s
14774 return r
8b095871 14775}
8b095871 14776
9987f0c1
IC
14777// (public) this << n
14778function bnShiftLeft(n) {
14779 var r = new BigInteger()
14780 if (n < 0) this.rShiftTo(-n, r)
14781 else this.lShiftTo(n, r)
14782 return r
8b095871 14783}
8b095871 14784
9987f0c1
IC
14785// (public) this >> n
14786function bnShiftRight(n) {
14787 var r = new BigInteger()
14788 if (n < 0) this.lShiftTo(-n, r)
14789 else this.rShiftTo(n, r)
14790 return r
8b095871
IC
14791}
14792
9987f0c1
IC
14793// return index of lowest 1-bit in x, x < 2^31
14794function lbit(x) {
14795 if (x == 0) return -1
14796 var r = 0
14797 if ((x & 0xffff) == 0) {
14798 x >>= 16
14799 r += 16
8b095871 14800 }
9987f0c1
IC
14801 if ((x & 0xff) == 0) {
14802 x >>= 8
14803 r += 8
8b095871 14804 }
9987f0c1
IC
14805 if ((x & 0xf) == 0) {
14806 x >>= 4
14807 r += 4
8b095871 14808 }
9987f0c1
IC
14809 if ((x & 3) == 0) {
14810 x >>= 2
14811 r += 2
14812 }
14813 if ((x & 1) == 0)++r
14814 return r
14815}
8b095871 14816
9987f0c1
IC
14817// (public) returns index of lowest 1-bit (or -1 if none)
14818function bnGetLowestSetBit() {
14819 for (var i = 0; i < this.t; ++i)
14820 if (this[i] != 0) return i * this.DB + lbit(this[i])
14821 if (this.s < 0) return this.t * this.DB
14822 return -1
14823}
8b095871 14824
9987f0c1
IC
14825// return number of 1 bits in x
14826function cbit(x) {
14827 var r = 0
14828 while (x != 0) {
14829 x &= x - 1
14830 ++r
8b095871 14831 }
9987f0c1
IC
14832 return r
14833}
8b095871 14834
9987f0c1
IC
14835// (public) return number of set bits
14836function bnBitCount() {
14837 var r = 0,
14838 x = this.s & this.DM
14839 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
14840 return r
14841}
8b095871 14842
9987f0c1
IC
14843// (public) true iff nth bit is set
14844function bnTestBit(n) {
14845 var j = Math.floor(n / this.DB)
14846 if (j >= this.t) return (this.s != 0)
14847 return ((this[j] & (1 << (n % this.DB))) != 0)
14848}
8b095871 14849
9987f0c1
IC
14850// (protected) this op (1<<n)
14851function bnpChangeBit(n, op) {
14852 var r = BigInteger.ONE.shiftLeft(n)
14853 this.bitwiseTo(r, op, r)
14854 return r
14855}
8b095871 14856
9987f0c1
IC
14857// (public) this | (1<<n)
14858function bnSetBit(n) {
14859 return this.changeBit(n, op_or)
14860}
8b095871 14861
9987f0c1
IC
14862// (public) this & ~(1<<n)
14863function bnClearBit(n) {
14864 return this.changeBit(n, op_andnot)
14865}
8b095871 14866
9987f0c1
IC
14867// (public) this ^ (1<<n)
14868function bnFlipBit(n) {
14869 return this.changeBit(n, op_xor)
14870}
8b095871 14871
9987f0c1
IC
14872// (protected) r = this + a
14873function bnpAddTo(a, r) {
14874 var self = this
8b095871 14875
9987f0c1
IC
14876 var i = 0,
14877 c = 0,
14878 m = Math.min(a.t, self.t)
14879 while (i < m) {
14880 c += self[i] + a[i]
14881 r[i++] = c & self.DM
14882 c >>= self.DB
14883 }
14884 if (a.t < self.t) {
14885 c += a.s
14886 while (i < self.t) {
14887 c += self[i]
14888 r[i++] = c & self.DM
14889 c >>= self.DB
14890 }
14891 c += self.s
14892 } else {
14893 c += self.s
14894 while (i < a.t) {
14895 c += a[i]
14896 r[i++] = c & self.DM
14897 c >>= self.DB
14898 }
14899 c += a.s
14900 }
14901 r.s = (c < 0) ? -1 : 0
14902 if (c > 0) r[i++] = c
14903 else if (c < -1) r[i++] = self.DV + c
14904 r.t = i
14905 r.clamp()
14906}
8b095871 14907
9987f0c1
IC
14908// (public) this + a
14909function bnAdd(a) {
14910 var r = new BigInteger()
14911 this.addTo(a, r)
14912 return r
14913}
8b095871 14914
9987f0c1
IC
14915// (public) this - a
14916function bnSubtract(a) {
14917 var r = new BigInteger()
14918 this.subTo(a, r)
14919 return r
14920}
8b095871 14921
9987f0c1
IC
14922// (public) this * a
14923function bnMultiply(a) {
14924 var r = new BigInteger()
14925 this.multiplyTo(a, r)
14926 return r
14927}
8b095871 14928
9987f0c1
IC
14929// (public) this^2
14930function bnSquare() {
14931 var r = new BigInteger()
14932 this.squareTo(r)
14933 return r
14934}
8b095871 14935
9987f0c1
IC
14936// (public) this / a
14937function bnDivide(a) {
14938 var r = new BigInteger()
14939 this.divRemTo(a, r, null)
14940 return r
14941}
8b095871 14942
9987f0c1
IC
14943// (public) this % a
14944function bnRemainder(a) {
14945 var r = new BigInteger()
14946 this.divRemTo(a, null, r)
14947 return r
14948}
8b095871 14949
9987f0c1
IC
14950// (public) [this/a,this%a]
14951function bnDivideAndRemainder(a) {
14952 var q = new BigInteger(),
14953 r = new BigInteger()
14954 this.divRemTo(a, q, r)
14955 return new Array(q, r)
14956}
8b095871 14957
9987f0c1
IC
14958// (protected) this *= n, this >= 0, 1 < n < DV
14959function bnpDMultiply(n) {
14960 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
14961 ++this.t
14962 this.clamp()
8b095871
IC
14963}
14964
9987f0c1
IC
14965// (protected) this += n << w words, this >= 0
14966function bnpDAddOffset(n, w) {
14967 if (n == 0) return
14968 while (this.t <= w) this[this.t++] = 0
14969 this[w] += n
14970 while (this[w] >= this.DV) {
14971 this[w] -= this.DV
14972 if (++w >= this.t) this[this.t++] = 0
14973 ++this[w]
8b095871 14974 }
9987f0c1 14975}
8b095871 14976
9987f0c1
IC
14977// A "null" reducer
14978function NullExp() {}
8b095871 14979
9987f0c1
IC
14980function nNop(x) {
14981 return x
14982}
8b095871 14983
9987f0c1
IC
14984function nMulTo(x, y, r) {
14985 x.multiplyTo(y, r)
14986}
8b095871 14987
9987f0c1
IC
14988function nSqrTo(x, r) {
14989 x.squareTo(r)
14990}
8b095871 14991
9987f0c1
IC
14992NullExp.prototype.convert = nNop
14993NullExp.prototype.revert = nNop
14994NullExp.prototype.mulTo = nMulTo
14995NullExp.prototype.sqrTo = nSqrTo
8b095871 14996
9987f0c1
IC
14997// (public) this^e
14998function bnPow(e) {
14999 return this.exp(e, new NullExp())
15000}
8b095871 15001
9987f0c1
IC
15002// (protected) r = lower n words of "this * a", a.t <= n
15003// "this" should be the larger one if appropriate.
15004function bnpMultiplyLowerTo(a, n, r) {
15005 var i = Math.min(this.t + a.t, n)
15006 r.s = 0; // assumes a,this >= 0
15007 r.t = i
15008 while (i > 0) r[--i] = 0
15009 var j
15010 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
15011 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
15012 r.clamp()
15013}
8b095871 15014
9987f0c1
IC
15015// (protected) r = "this * a" without lower n words, n > 0
15016// "this" should be the larger one if appropriate.
15017function bnpMultiplyUpperTo(a, n, r) {
15018 --n
15019 var i = r.t = this.t + a.t - n
15020 r.s = 0; // assumes a,this >= 0
15021 while (--i >= 0) r[i] = 0
15022 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
15023 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
15024 r.clamp()
15025 r.drShiftTo(1, r)
15026}
8b095871 15027
9987f0c1
IC
15028// Barrett modular reduction
15029function Barrett(m) {
15030 // setup Barrett
15031 this.r2 = new BigInteger()
15032 this.q3 = new BigInteger()
15033 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
15034 this.mu = this.r2.divide(m)
15035 this.m = m
15036}
8b095871 15037
9987f0c1
IC
15038function barrettConvert(x) {
15039 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
15040 else if (x.compareTo(this.m) < 0) return x
15041 else {
15042 var r = new BigInteger()
15043 x.copyTo(r)
15044 this.reduce(r)
15045 return r
8b095871 15046 }
9987f0c1 15047}
8b095871 15048
9987f0c1
IC
15049function barrettRevert(x) {
15050 return x
15051}
8b095871 15052
9987f0c1
IC
15053// x = x mod m (HAC 14.42)
15054function barrettReduce(x) {
15055 var self = this
15056 x.drShiftTo(self.m.t - 1, self.r2)
15057 if (x.t > self.m.t + 1) {
15058 x.t = self.m.t + 1
15059 x.clamp()
8b095871 15060 }
9987f0c1
IC
15061 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
15062 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
15063 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
15064 x.subTo(self.r2, x)
15065 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
15066}
8b095871 15067
9987f0c1
IC
15068// r = x^2 mod m; x != r
15069function barrettSqrTo(x, r) {
15070 x.squareTo(r)
15071 this.reduce(r)
15072}
8b095871 15073
9987f0c1
IC
15074// r = x*y mod m; x,y != r
15075function barrettMulTo(x, y, r) {
15076 x.multiplyTo(y, r)
15077 this.reduce(r)
15078}
8b095871 15079
9987f0c1
IC
15080Barrett.prototype.convert = barrettConvert
15081Barrett.prototype.revert = barrettRevert
15082Barrett.prototype.reduce = barrettReduce
15083Barrett.prototype.mulTo = barrettMulTo
15084Barrett.prototype.sqrTo = barrettSqrTo
8b095871 15085
9987f0c1
IC
15086// (public) this^e % m (HAC 14.85)
15087function bnModPow(e, m) {
15088 var i = e.bitLength(),
15089 k, r = nbv(1),
15090 z
15091 if (i <= 0) return r
15092 else if (i < 18) k = 1
15093 else if (i < 48) k = 3
15094 else if (i < 144) k = 4
15095 else if (i < 768) k = 5
15096 else k = 6
15097 if (i < 8)
15098 z = new Classic(m)
15099 else if (m.isEven())
15100 z = new Barrett(m)
15101 else
15102 z = new Montgomery(m)
8b095871 15103
9987f0c1
IC
15104 // precomputation
15105 var g = new Array(),
15106 n = 3,
15107 k1 = k - 1,
15108 km = (1 << k) - 1
15109 g[1] = z.convert(this)
15110 if (k > 1) {
15111 var g2 = new BigInteger()
15112 z.sqrTo(g[1], g2)
15113 while (n <= km) {
15114 g[n] = new BigInteger()
15115 z.mulTo(g2, g[n - 2], g[n])
15116 n += 2
8b095871 15117 }
9987f0c1 15118 }
8b095871 15119
9987f0c1
IC
15120 var j = e.t - 1,
15121 w, is1 = true,
15122 r2 = new BigInteger(),
15123 t
15124 i = nbits(e[j]) - 1
15125 while (j >= 0) {
15126 if (i >= k1) w = (e[j] >> (i - k1)) & km
15127 else {
15128 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
15129 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
8b095871
IC
15130 }
15131
9987f0c1
IC
15132 n = k
15133 while ((w & 1) == 0) {
15134 w >>= 1
15135 --n
15136 }
15137 if ((i -= n) < 0) {
15138 i += this.DB
15139 --j
15140 }
15141 if (is1) { // ret == 1, don't bother squaring or multiplying it
15142 g[w].copyTo(r)
15143 is1 = false
15144 } else {
15145 while (n > 1) {
15146 z.sqrTo(r, r2)
15147 z.sqrTo(r2, r)
15148 n -= 2
15149 }
15150 if (n > 0) z.sqrTo(r, r2)
15151 else {
15152 t = r
15153 r = r2
15154 r2 = t
15155 }
15156 z.mulTo(r2, g[w], r)
8b095871 15157 }
8b095871 15158
9987f0c1
IC
15159 while (j >= 0 && (e[j] & (1 << i)) == 0) {
15160 z.sqrTo(r, r2)
15161 t = r
15162 r = r2
15163 r2 = t
15164 if (--i < 0) {
15165 i = this.DB - 1
15166 --j
15167 }
15168 }
15169 }
15170 return z.revert(r)
8b095871
IC
15171}
15172
9987f0c1
IC
15173// (public) gcd(this,a) (HAC 14.54)
15174function bnGCD(a) {
15175 var x = (this.s < 0) ? this.negate() : this.clone()
15176 var y = (a.s < 0) ? a.negate() : a.clone()
15177 if (x.compareTo(y) < 0) {
15178 var t = x
15179 x = y
15180 y = t
15181 }
15182 var i = x.getLowestSetBit(),
15183 g = y.getLowestSetBit()
15184 if (g < 0) return x
15185 if (i < g) g = i
15186 if (g > 0) {
15187 x.rShiftTo(g, x)
15188 y.rShiftTo(g, y)
15189 }
15190 while (x.signum() > 0) {
15191 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
15192 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
15193 if (x.compareTo(y) >= 0) {
15194 x.subTo(y, x)
15195 x.rShiftTo(1, x)
15196 } else {
15197 y.subTo(x, y)
15198 y.rShiftTo(1, y)
15199 }
15200 }
15201 if (g > 0) y.lShiftTo(g, y)
15202 return y
8b095871
IC
15203}
15204
9987f0c1
IC
15205// (protected) this % n, n < 2^26
15206function bnpModInt(n) {
15207 if (n <= 0) return 0
15208 var d = this.DV % n,
15209 r = (this.s < 0) ? n - 1 : 0
15210 if (this.t > 0)
15211 if (d == 0) r = this[0] % n
15212 else
15213 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
15214 return r
8b095871 15215}
8b095871 15216
9987f0c1
IC
15217// (public) 1/this % m (HAC 14.61)
15218function bnModInverse(m) {
15219 var ac = m.isEven()
15220 if (this.signum() === 0) throw new Error('division by zero')
15221 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
15222 var u = m.clone(),
15223 v = this.clone()
15224 var a = nbv(1),
15225 b = nbv(0),
15226 c = nbv(0),
15227 d = nbv(1)
15228 while (u.signum() != 0) {
15229 while (u.isEven()) {
15230 u.rShiftTo(1, u)
15231 if (ac) {
15232 if (!a.isEven() || !b.isEven()) {
15233 a.addTo(this, a)
15234 b.subTo(m, b)
15235 }
15236 a.rShiftTo(1, a)
15237 } else if (!b.isEven()) b.subTo(m, b)
15238 b.rShiftTo(1, b)
8b095871 15239 }
9987f0c1
IC
15240 while (v.isEven()) {
15241 v.rShiftTo(1, v)
15242 if (ac) {
15243 if (!c.isEven() || !d.isEven()) {
15244 c.addTo(this, c)
15245 d.subTo(m, d)
8b095871 15246 }
9987f0c1
IC
15247 c.rShiftTo(1, c)
15248 } else if (!d.isEven()) d.subTo(m, d)
15249 d.rShiftTo(1, d)
8b095871 15250 }
9987f0c1
IC
15251 if (u.compareTo(v) >= 0) {
15252 u.subTo(v, u)
15253 if (ac) a.subTo(c, a)
15254 b.subTo(d, b)
8b095871 15255 } else {
9987f0c1
IC
15256 v.subTo(u, v)
15257 if (ac) c.subTo(a, c)
15258 d.subTo(b, d)
8b095871
IC
15259 }
15260 }
9987f0c1
IC
15261 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
15262 while (d.compareTo(m) >= 0) d.subTo(m, d)
15263 while (d.signum() < 0) d.addTo(m, d)
15264 return d
15265}
8b095871 15266
9987f0c1
IC
15267var lowprimes = [
15268 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
15269 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
15270 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
15271 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
15272 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
15273 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
15274 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
15275 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
15276 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
15277 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
15278 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
15279]
8b095871 15280
9987f0c1 15281var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
8b095871 15282
9987f0c1
IC
15283// (public) test primality with certainty >= 1-.5^t
15284function bnIsProbablePrime(t) {
15285 var i, x = this.abs()
15286 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
15287 for (i = 0; i < lowprimes.length; ++i)
15288 if (x[0] == lowprimes[i]) return true
15289 return false
8b095871 15290 }
9987f0c1
IC
15291 if (x.isEven()) return false
15292 i = 1
15293 while (i < lowprimes.length) {
15294 var m = lowprimes[i],
15295 j = i + 1
15296 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
15297 m = x.modInt(m)
15298 while (i < j) if (m % lowprimes[i++] == 0) return false
15299 }
15300 return x.millerRabin(t)
15301}
8b095871 15302
9987f0c1
IC
15303// (protected) true if probably prime (HAC 4.24, Miller-Rabin)
15304function bnpMillerRabin(t) {
15305 var n1 = this.subtract(BigInteger.ONE)
15306 var k = n1.getLowestSetBit()
15307 if (k <= 0) return false
15308 var r = n1.shiftRight(k)
15309 t = (t + 1) >> 1
15310 if (t > lowprimes.length) t = lowprimes.length
15311 var a = new BigInteger(null)
15312 var j, bases = []
15313 for (var i = 0; i < t; ++i) {
15314 for (;;) {
15315 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
15316 if (bases.indexOf(j) == -1) break
15317 }
15318 bases.push(j)
15319 a.fromInt(j)
15320 var y = a.modPow(r, this)
15321 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
15322 var j = 1
15323 while (j++ < k && y.compareTo(n1) != 0) {
15324 y = y.modPowInt(2, this)
15325 if (y.compareTo(BigInteger.ONE) == 0) return false
8b095871 15326 }
9987f0c1 15327 if (y.compareTo(n1) != 0) return false
8b095871 15328 }
8b095871 15329 }
9987f0c1
IC
15330 return true
15331}
8b095871 15332
9987f0c1
IC
15333// protected
15334proto.chunkSize = bnpChunkSize
15335proto.toRadix = bnpToRadix
15336proto.fromRadix = bnpFromRadix
15337proto.fromNumber = bnpFromNumber
15338proto.bitwiseTo = bnpBitwiseTo
15339proto.changeBit = bnpChangeBit
15340proto.addTo = bnpAddTo
15341proto.dMultiply = bnpDMultiply
15342proto.dAddOffset = bnpDAddOffset
15343proto.multiplyLowerTo = bnpMultiplyLowerTo
15344proto.multiplyUpperTo = bnpMultiplyUpperTo
15345proto.modInt = bnpModInt
15346proto.millerRabin = bnpMillerRabin
8b095871 15347
9987f0c1
IC
15348// public
15349proto.clone = bnClone
15350proto.intValue = bnIntValue
15351proto.byteValue = bnByteValue
15352proto.shortValue = bnShortValue
15353proto.signum = bnSigNum
15354proto.toByteArray = bnToByteArray
15355proto.equals = bnEquals
15356proto.min = bnMin
15357proto.max = bnMax
15358proto.and = bnAnd
15359proto.or = bnOr
15360proto.xor = bnXor
15361proto.andNot = bnAndNot
15362proto.not = bnNot
15363proto.shiftLeft = bnShiftLeft
15364proto.shiftRight = bnShiftRight
15365proto.getLowestSetBit = bnGetLowestSetBit
15366proto.bitCount = bnBitCount
15367proto.testBit = bnTestBit
15368proto.setBit = bnSetBit
15369proto.clearBit = bnClearBit
15370proto.flipBit = bnFlipBit
15371proto.add = bnAdd
15372proto.subtract = bnSubtract
15373proto.multiply = bnMultiply
15374proto.divide = bnDivide
15375proto.remainder = bnRemainder
15376proto.divideAndRemainder = bnDivideAndRemainder
15377proto.modPow = bnModPow
15378proto.modInverse = bnModInverse
15379proto.pow = bnPow
15380proto.gcd = bnGCD
15381proto.isProbablePrime = bnIsProbablePrime
8b095871 15382
9987f0c1
IC
15383// JSBN-specific extension
15384proto.square = bnSquare
15385
15386// constants
15387BigInteger.ZERO = nbv(0)
15388BigInteger.ONE = nbv(1)
15389BigInteger.valueOf = nbv
8b095871 15390
9987f0c1
IC
15391module.exports = BigInteger
15392
15393},{"../package.json":38}],36:[function(require,module,exports){
15394(function (Buffer){
15395// FIXME: Kind of a weird way to throw exceptions, consider removing
15396var assert = require('assert')
15397var BigInteger = require('./bigi')
8b095871
IC
15398
15399/**
9987f0c1 15400 * Turns a byte array into a big integer.
8b095871 15401 *
9987f0c1
IC
15402 * This function will interpret a byte array as a big integer in big
15403 * endian notation.
8b095871 15404 */
9987f0c1
IC
15405BigInteger.fromByteArrayUnsigned = function(byteArray) {
15406 // BigInteger expects a DER integer conformant byte array
15407 if (byteArray[0] & 0x80) {
15408 return new BigInteger([0].concat(byteArray))
8b095871 15409 }
8b095871 15410
9987f0c1
IC
15411 return new BigInteger(byteArray)
15412}
8b095871 15413
9987f0c1
IC
15414/**
15415 * Returns a byte array representation of the big integer.
15416 *
15417 * This returns the absolute of the contained value in big endian
15418 * form. A value of zero results in an empty array.
15419 */
15420BigInteger.prototype.toByteArrayUnsigned = function() {
15421 var byteArray = this.toByteArray()
15422 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
15423}
8b095871 15424
9987f0c1
IC
15425BigInteger.fromDERInteger = function(byteArray) {
15426 return new BigInteger(byteArray)
15427}
8b095871 15428
9987f0c1
IC
15429/*
15430 * Converts BigInteger to a DER integer representation.
15431 *
15432 * The format for this value uses the most significant bit as a sign
15433 * bit. If the most significant bit is already set and the integer is
15434 * positive, a 0x00 is prepended.
15435 *
15436 * Examples:
15437 *
15438 * 0 => 0x00
15439 * 1 => 0x01
15440 * -1 => 0xff
15441 * 127 => 0x7f
15442 * -127 => 0x81
15443 * 128 => 0x0080
15444 * -128 => 0x80
15445 * 255 => 0x00ff
15446 * -255 => 0xff01
15447 * 16300 => 0x3fac
15448 * -16300 => 0xc054
15449 * 62300 => 0x00f35c
15450 * -62300 => 0xff0ca4
15451*/
15452BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
8b095871 15453
9987f0c1
IC
15454BigInteger.fromBuffer = function(buffer) {
15455 // BigInteger expects a DER integer conformant byte array
15456 if (buffer[0] & 0x80) {
15457 var byteArray = Array.prototype.slice.call(buffer)
8b095871 15458
9987f0c1 15459 return new BigInteger([0].concat(byteArray))
8b095871 15460 }
9987f0c1
IC
15461
15462 return new BigInteger(buffer)
8b095871
IC
15463}
15464
9987f0c1
IC
15465BigInteger.fromHex = function(hex) {
15466 if (hex === '') return BigInteger.ZERO
8b095871 15467
9987f0c1
IC
15468 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
15469 assert.equal(hex.length % 2, 0, 'Incomplete hex')
15470 return new BigInteger(hex, 16)
8b095871
IC
15471}
15472
9987f0c1
IC
15473BigInteger.prototype.toBuffer = function(size) {
15474 var byteArray = this.toByteArrayUnsigned()
15475 var zeros = []
8b095871 15476
9987f0c1
IC
15477 var padding = size - byteArray.length
15478 while (zeros.length < padding) zeros.push(0)
8b095871 15479
9987f0c1
IC
15480 return new Buffer(zeros.concat(byteArray))
15481}
8b095871 15482
9987f0c1
IC
15483BigInteger.prototype.toHex = function(size) {
15484 return this.toBuffer(size).toString('hex')
8b095871
IC
15485}
15486
9987f0c1
IC
15487}).call(this,require("buffer").Buffer)
15488},{"./bigi":35,"assert":1,"buffer":4}],37:[function(require,module,exports){
15489var BigInteger = require('./bigi')
8b095871 15490
9987f0c1
IC
15491//addons
15492require('./convert')
15493
15494module.exports = BigInteger
15495},{"./bigi":35,"./convert":36}],38:[function(require,module,exports){
15496module.exports={
15497 "_args": [
15498 [
15499 "bigi",
15500 "/home/ian/git/bitcoin/bitcoinjs-lib-browser"
15501 ]
15502 ],
15503 "_from": "bigi@latest",
15504 "_id": "bigi@1.4.2",
15505 "_inCache": true,
15506 "_installable": true,
15507 "_location": "/bigi",
15508 "_nodeVersion": "6.1.0",
15509 "_npmOperationalInternal": {
15510 "host": "packages-12-west.internal.npmjs.com",
15511 "tmp": "tmp/bigi-1.4.2.tgz_1469584192413_0.6801238611806184"
15512 },
15513 "_npmUser": {
15514 "email": "jprichardson@gmail.com",
15515 "name": "jprichardson"
15516 },
15517 "_npmVersion": "3.8.6",
15518 "_phantomChildren": {},
15519 "_requested": {
15520 "name": "bigi",
15521 "raw": "bigi",
15522 "rawSpec": "",
15523 "scope": null,
15524 "spec": "latest",
15525 "type": "tag"
15526 },
15527 "_requiredBy": [
15528 "#USER",
15529 "/bitcoinjs-lib",
15530 "/ecurve"
15531 ],
15532 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz",
15533 "_shasum": "9c665a95f88b8b08fc05cfd731f561859d725825",
15534 "_shrinkwrap": null,
15535 "_spec": "bigi",
15536 "_where": "/home/ian/git/bitcoin/bitcoinjs-lib-browser",
15537 "bugs": {
15538 "url": "https://github.com/cryptocoinjs/bigi/issues"
15539 },
15540 "dependencies": {},
15541 "description": "Big integers.",
15542 "devDependencies": {
15543 "coveralls": "^2.11.2",
15544 "istanbul": "^0.3.5",
15545 "jshint": "^2.5.1",
15546 "mocha": "^2.1.0",
15547 "mochify": "^2.1.0"
15548 },
15549 "directories": {},
15550 "dist": {
15551 "shasum": "9c665a95f88b8b08fc05cfd731f561859d725825",
15552 "tarball": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz"
15553 },
15554 "gitHead": "c25308081c896ff84702303722bf5ecd8b3f78e3",
15555 "homepage": "https://github.com/cryptocoinjs/bigi#readme",
15556 "keywords": [
15557 "cryptography",
15558 "math",
15559 "bitcoin",
15560 "arbitrary",
15561 "precision",
15562 "arithmetic",
15563 "big",
15564 "integer",
15565 "int",
15566 "number",
15567 "biginteger",
15568 "bigint",
15569 "bignumber",
15570 "decimal",
15571 "float"
15572 ],
15573 "main": "./lib/index.js",
15574 "maintainers": [
15575 {
15576 "email": "boydb@midnightdesign.ws",
15577 "name": "midnightlightning"
15578 },
15579 {
15580 "email": "sidazhang89@gmail.com",
15581 "name": "sidazhang"
15582 },
15583 {
15584 "email": "npm@shesek.info",
15585 "name": "nadav"
15586 },
15587 {
15588 "email": "jprichardson@gmail.com",
15589 "name": "jprichardson"
8b095871 15590 }
9987f0c1
IC
15591 ],
15592 "name": "bigi",
15593 "optionalDependencies": {},
15594 "readme": "ERROR: No README data found!",
15595 "repository": {
15596 "type": "git",
15597 "url": "git+https://github.com/cryptocoinjs/bigi.git"
15598 },
15599 "scripts": {
15600 "browser-test": "mochify --wd -R spec",
15601 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
15602 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info",
15603 "jshint": "jshint --config jshint.json lib/*.js ; true",
15604 "test": "_mocha -- test/*.js",
15605 "unit": "mocha"
15606 },
15607 "testling": {
15608 "browsers": [
15609 "ie/9..latest",
15610 "firefox/latest",
15611 "chrome/latest",
15612 "safari/6.0..latest",
15613 "iphone/6.0..latest",
15614 "android-browser/4.2..latest"
15615 ],
15616 "files": "test/*.js",
15617 "harness": "mocha"
15618 },
15619 "version": "1.4.2"
15620}
8b095871 15621
9987f0c1
IC
15622},{}],39:[function(require,module,exports){
15623// Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki
15624// Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
15625// NOTE: SIGHASH byte ignored AND restricted, truncate before use
8b095871 15626
9987f0c1 15627var Buffer = require('safe-buffer').Buffer
8b095871 15628
9987f0c1
IC
15629function check (buffer) {
15630 if (buffer.length < 8) return false
15631 if (buffer.length > 72) return false
15632 if (buffer[0] !== 0x30) return false
15633 if (buffer[1] !== buffer.length - 2) return false
15634 if (buffer[2] !== 0x02) return false
8b095871 15635
9987f0c1
IC
15636 var lenR = buffer[3]
15637 if (lenR === 0) return false
15638 if (5 + lenR >= buffer.length) return false
15639 if (buffer[4 + lenR] !== 0x02) return false
8b095871 15640
9987f0c1
IC
15641 var lenS = buffer[5 + lenR]
15642 if (lenS === 0) return false
15643 if ((6 + lenR + lenS) !== buffer.length) return false
8b095871 15644
9987f0c1
IC
15645 if (buffer[4] & 0x80) return false
15646 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false
8b095871 15647
9987f0c1
IC
15648 if (buffer[lenR + 6] & 0x80) return false
15649 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false
15650 return true
15651}
8b095871 15652
9987f0c1
IC
15653function decode (buffer) {
15654 if (buffer.length < 8) throw new Error('DER sequence length is too short')
15655 if (buffer.length > 72) throw new Error('DER sequence length is too long')
15656 if (buffer[0] !== 0x30) throw new Error('Expected DER sequence')
15657 if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid')
15658 if (buffer[2] !== 0x02) throw new Error('Expected DER integer')
8b095871 15659
9987f0c1
IC
15660 var lenR = buffer[3]
15661 if (lenR === 0) throw new Error('R length is zero')
15662 if (5 + lenR >= buffer.length) throw new Error('R length is too long')
15663 if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)')
8b095871 15664
9987f0c1
IC
15665 var lenS = buffer[5 + lenR]
15666 if (lenS === 0) throw new Error('S length is zero')
15667 if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid')
8b095871 15668
9987f0c1
IC
15669 if (buffer[4] & 0x80) throw new Error('R value is negative')
15670 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded')
8b095871 15671
9987f0c1
IC
15672 if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative')
15673 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded')
8b095871 15674
9987f0c1
IC
15675 // non-BIP66 - extract R, S values
15676 return {
15677 r: buffer.slice(4, 4 + lenR),
15678 s: buffer.slice(6 + lenR)
8b095871 15679 }
9987f0c1 15680}
8b095871 15681
9987f0c1
IC
15682/*
15683 * Expects r and s to be positive DER integers.
15684 *
15685 * The DER format uses the most significant bit as a sign bit (& 0x80).
15686 * If the significant bit is set AND the integer is positive, a 0x00 is prepended.
15687 *
15688 * Examples:
15689 *
15690 * 0 => 0x00
15691 * 1 => 0x01
15692 * -1 => 0xff
15693 * 127 => 0x7f
15694 * -127 => 0x81
15695 * 128 => 0x0080
15696 * -128 => 0x80
15697 * 255 => 0x00ff
15698 * -255 => 0xff01
15699 * 16300 => 0x3fac
15700 * -16300 => 0xc054
15701 * 62300 => 0x00f35c
15702 * -62300 => 0xff0ca4
15703*/
15704function encode (r, s) {
15705 var lenR = r.length
15706 var lenS = s.length
15707 if (lenR === 0) throw new Error('R length is zero')
15708 if (lenS === 0) throw new Error('S length is zero')
15709 if (lenR > 33) throw new Error('R length is too long')
15710 if (lenS > 33) throw new Error('S length is too long')
15711 if (r[0] & 0x80) throw new Error('R value is negative')
15712 if (s[0] & 0x80) throw new Error('S value is negative')
15713 if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded')
15714 if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded')
8b095871 15715
9987f0c1 15716 var signature = Buffer.allocUnsafe(6 + lenR + lenS)
8b095871 15717
9987f0c1
IC
15718 // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
15719 signature[0] = 0x30
15720 signature[1] = signature.length - 2
15721 signature[2] = 0x02
15722 signature[3] = r.length
15723 r.copy(signature, 4)
15724 signature[4 + lenR] = 0x02
15725 signature[5 + lenR] = s.length
15726 s.copy(signature, 6 + lenR)
8b095871 15727
9987f0c1 15728 return signature
8b095871
IC
15729}
15730
9987f0c1
IC
15731module.exports = {
15732 check: check,
15733 decode: decode,
15734 encode: encode
8b095871
IC
15735}
15736
9987f0c1
IC
15737},{"safe-buffer":98}],40:[function(require,module,exports){
15738module.exports={
15739 "OP_FALSE": 0,
15740 "OP_0": 0,
15741 "OP_PUSHDATA1": 76,
15742 "OP_PUSHDATA2": 77,
15743 "OP_PUSHDATA4": 78,
15744 "OP_1NEGATE": 79,
15745 "OP_RESERVED": 80,
15746 "OP_1": 81,
15747 "OP_TRUE": 81,
15748 "OP_2": 82,
15749 "OP_3": 83,
15750 "OP_4": 84,
15751 "OP_5": 85,
15752 "OP_6": 86,
15753 "OP_7": 87,
15754 "OP_8": 88,
15755 "OP_9": 89,
15756 "OP_10": 90,
15757 "OP_11": 91,
15758 "OP_12": 92,
15759 "OP_13": 93,
15760 "OP_14": 94,
15761 "OP_15": 95,
15762 "OP_16": 96,
15763
15764 "OP_NOP": 97,
15765 "OP_VER": 98,
15766 "OP_IF": 99,
15767 "OP_NOTIF": 100,
15768 "OP_VERIF": 101,
15769 "OP_VERNOTIF": 102,
15770 "OP_ELSE": 103,
15771 "OP_ENDIF": 104,
15772 "OP_VERIFY": 105,
15773 "OP_RETURN": 106,
15774
15775 "OP_TOALTSTACK": 107,
15776 "OP_FROMALTSTACK": 108,
15777 "OP_2DROP": 109,
15778 "OP_2DUP": 110,
15779 "OP_3DUP": 111,
15780 "OP_2OVER": 112,
15781 "OP_2ROT": 113,
15782 "OP_2SWAP": 114,
15783 "OP_IFDUP": 115,
15784 "OP_DEPTH": 116,
15785 "OP_DROP": 117,
15786 "OP_DUP": 118,
15787 "OP_NIP": 119,
15788 "OP_OVER": 120,
15789 "OP_PICK": 121,
15790 "OP_ROLL": 122,
15791 "OP_ROT": 123,
15792 "OP_SWAP": 124,
15793 "OP_TUCK": 125,
15794
15795 "OP_CAT": 126,
15796 "OP_SUBSTR": 127,
15797 "OP_LEFT": 128,
15798 "OP_RIGHT": 129,
15799 "OP_SIZE": 130,
15800
15801 "OP_INVERT": 131,
15802 "OP_AND": 132,
15803 "OP_OR": 133,
15804 "OP_XOR": 134,
15805 "OP_EQUAL": 135,
15806 "OP_EQUALVERIFY": 136,
15807 "OP_RESERVED1": 137,
15808 "OP_RESERVED2": 138,
15809
15810 "OP_1ADD": 139,
15811 "OP_1SUB": 140,
15812 "OP_2MUL": 141,
15813 "OP_2DIV": 142,
15814 "OP_NEGATE": 143,
15815 "OP_ABS": 144,
15816 "OP_NOT": 145,
15817 "OP_0NOTEQUAL": 146,
15818 "OP_ADD": 147,
15819 "OP_SUB": 148,
15820 "OP_MUL": 149,
15821 "OP_DIV": 150,
15822 "OP_MOD": 151,
15823 "OP_LSHIFT": 152,
15824 "OP_RSHIFT": 153,
15825
15826 "OP_BOOLAND": 154,
15827 "OP_BOOLOR": 155,
15828 "OP_NUMEQUAL": 156,
15829 "OP_NUMEQUALVERIFY": 157,
15830 "OP_NUMNOTEQUAL": 158,
15831 "OP_LESSTHAN": 159,
15832 "OP_GREATERTHAN": 160,
15833 "OP_LESSTHANOREQUAL": 161,
15834 "OP_GREATERTHANOREQUAL": 162,
15835 "OP_MIN": 163,
15836 "OP_MAX": 164,
15837
15838 "OP_WITHIN": 165,
15839
15840 "OP_RIPEMD160": 166,
15841 "OP_SHA1": 167,
15842 "OP_SHA256": 168,
15843 "OP_HASH160": 169,
15844 "OP_HASH256": 170,
15845 "OP_CODESEPARATOR": 171,
15846 "OP_CHECKSIG": 172,
15847 "OP_CHECKSIGVERIFY": 173,
15848 "OP_CHECKMULTISIG": 174,
15849 "OP_CHECKMULTISIGVERIFY": 175,
15850
15851 "OP_NOP1": 176,
15852 "OP_NOP2": 177,
15853 "OP_CHECKLOCKTIMEVERIFY": 177,
15854
15855 "OP_NOP3": 178,
15856 "OP_NOP4": 179,
15857 "OP_NOP5": 180,
15858 "OP_NOP6": 181,
15859 "OP_NOP7": 182,
15860 "OP_NOP8": 183,
15861 "OP_NOP9": 184,
15862 "OP_NOP10": 185,
15863
15864 "OP_PUBKEYHASH": 253,
15865 "OP_PUBKEY": 254,
15866 "OP_INVALIDOPCODE": 255
15867}
15868
15869},{}],41:[function(require,module,exports){
15870var OPS = require('./index.json')
15871
15872var map = {}
15873for (var op in OPS) {
15874 var code = OPS[op]
15875 map[code] = op
15876}
15877
15878module.exports = map
15879
15880},{"./index.json":40}],42:[function(require,module,exports){
15881var Buffer = require('safe-buffer').Buffer
15882var bs58check = require('bs58check')
15883var bscript = require('./script')
15884var networks = require('./networks')
15885var typeforce = require('typeforce')
15886var types = require('./types')
8b095871 15887
9987f0c1
IC
15888function fromBase58Check (address) {
15889 var payload = bs58check.decode(address)
15890 if (payload.length < 21) throw new TypeError(address + ' is too short')
15891 if (payload.length > 21) throw new TypeError(address + ' is too long')
8b095871 15892
9987f0c1
IC
15893 var version = payload.readUInt8(0)
15894 var hash = payload.slice(1)
8b095871 15895
9987f0c1 15896 return { hash: hash, version: version }
8b095871
IC
15897}
15898
9987f0c1
IC
15899function toBase58Check (hash, version) {
15900 typeforce(types.tuple(types.Hash160bit, types.UInt8), arguments)
8b095871 15901
9987f0c1
IC
15902 var payload = Buffer.allocUnsafe(21)
15903 payload.writeUInt8(version, 0)
15904 hash.copy(payload, 1)
8b095871 15905
9987f0c1 15906 return bs58check.encode(payload)
8b095871
IC
15907}
15908
9987f0c1
IC
15909function fromOutputScript (outputScript, network) {
15910 network = network || networks.bitcoin
8b095871 15911
9987f0c1
IC
15912 if (bscript.pubKeyHash.output.check(outputScript)) return toBase58Check(bscript.compile(outputScript).slice(3, 23), network.pubKeyHash)
15913 if (bscript.scriptHash.output.check(outputScript)) return toBase58Check(bscript.compile(outputScript).slice(2, 22), network.scriptHash)
8b095871 15914
9987f0c1 15915 throw new Error(bscript.toASM(outputScript) + ' has no matching Address')
8b095871
IC
15916}
15917
9987f0c1
IC
15918function toOutputScript (address, network) {
15919 network = network || networks.bitcoin
8b095871 15920
9987f0c1
IC
15921 var decode = fromBase58Check(address)
15922 if (decode.version === network.pubKeyHash) return bscript.pubKeyHash.output.encode(decode.hash)
15923 if (decode.version === network.scriptHash) return bscript.scriptHash.output.encode(decode.hash)
8b095871 15924
9987f0c1 15925 throw new Error(address + ' has no matching Script')
8b095871 15926}
8b095871 15927
9987f0c1
IC
15928module.exports = {
15929 fromBase58Check: fromBase58Check,
15930 fromOutputScript: fromOutputScript,
15931 toBase58Check: toBase58Check,
15932 toOutputScript: toOutputScript
8b095871 15933}
8b095871 15934
9987f0c1
IC
15935},{"./networks":51,"./script":52,"./types":78,"bs58check":80,"safe-buffer":98,"typeforce":109}],43:[function(require,module,exports){
15936var Buffer = require('safe-buffer').Buffer
15937var bcrypto = require('./crypto')
15938var fastMerkleRoot = require('merkle-lib/fastRoot')
15939var typeforce = require('typeforce')
15940var types = require('./types')
15941var varuint = require('varuint-bitcoin')
8b095871 15942
9987f0c1 15943var Transaction = require('./transaction')
8b095871 15944
9987f0c1
IC
15945function Block () {
15946 this.version = 1
15947 this.prevHash = null
15948 this.merkleRoot = null
15949 this.timestamp = 0
15950 this.bits = 0
15951 this.nonce = 0
8b095871 15952}
8b095871 15953
9987f0c1
IC
15954Block.fromBuffer = function (buffer) {
15955 if (buffer.length < 80) throw new Error('Buffer too small (< 80 bytes)')
8b095871 15956
9987f0c1
IC
15957 var offset = 0
15958 function readSlice (n) {
15959 offset += n
15960 return buffer.slice(offset - n, offset)
15961 }
8b095871 15962
9987f0c1
IC
15963 function readUInt32 () {
15964 var i = buffer.readUInt32LE(offset)
15965 offset += 4
15966 return i
15967 }
8b095871 15968
9987f0c1
IC
15969 function readInt32 () {
15970 var i = buffer.readInt32LE(offset)
15971 offset += 4
15972 return i
15973 }
8b095871 15974
9987f0c1
IC
15975 var block = new Block()
15976 block.version = readInt32()
15977 block.prevHash = readSlice(32)
15978 block.merkleRoot = readSlice(32)
15979 block.timestamp = readUInt32()
15980 block.bits = readUInt32()
15981 block.nonce = readUInt32()
8b095871 15982
9987f0c1 15983 if (buffer.length === 80) return block
8b095871 15984
9987f0c1
IC
15985 function readVarInt () {
15986 var vi = varuint.decode(buffer, offset)
15987 offset += varuint.decode.bytes
15988 return vi
15989 }
8b095871 15990
9987f0c1
IC
15991 function readTransaction () {
15992 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
15993 offset += tx.byteLength()
15994 return tx
15995 }
8b095871 15996
9987f0c1
IC
15997 var nTransactions = readVarInt()
15998 block.transactions = []
8b095871 15999
9987f0c1
IC
16000 for (var i = 0; i < nTransactions; ++i) {
16001 var tx = readTransaction()
16002 block.transactions.push(tx)
16003 }
8b095871 16004
9987f0c1 16005 return block
8b095871
IC
16006}
16007
9987f0c1
IC
16008Block.prototype.byteLength = function (headersOnly) {
16009 if (headersOnly || !this.transactions) return 80
8b095871 16010
9987f0c1
IC
16011 return 80 + varuint.encodingLength(this.transactions.length) + this.transactions.reduce(function (a, x) {
16012 return a + x.byteLength()
16013 }, 0)
8b095871
IC
16014}
16015
9987f0c1
IC
16016Block.fromHex = function (hex) {
16017 return Block.fromBuffer(Buffer.from(hex, 'hex'))
16018}
8b095871 16019
9987f0c1
IC
16020Block.prototype.getHash = function () {
16021 return bcrypto.hash256(this.toBuffer(true))
16022}
8b095871 16023
9987f0c1
IC
16024Block.prototype.getId = function () {
16025 return this.getHash().reverse().toString('hex')
8b095871
IC
16026}
16027
9987f0c1
IC
16028Block.prototype.getUTCDate = function () {
16029 var date = new Date(0) // epoch
16030 date.setUTCSeconds(this.timestamp)
8b095871 16031
9987f0c1 16032 return date
8b095871 16033}
8b095871 16034
9987f0c1
IC
16035// TODO: buffer, offset compatibility
16036Block.prototype.toBuffer = function (headersOnly) {
16037 var buffer = Buffer.allocUnsafe(this.byteLength(headersOnly))
16038
16039 var offset = 0
16040 function writeSlice (slice) {
16041 slice.copy(buffer, offset)
16042 offset += slice.length
16043 }
8b095871 16044
9987f0c1
IC
16045 function writeInt32 (i) {
16046 buffer.writeInt32LE(i, offset)
16047 offset += 4
16048 }
16049 function writeUInt32 (i) {
16050 buffer.writeUInt32LE(i, offset)
16051 offset += 4
16052 }
8b095871 16053
9987f0c1
IC
16054 writeInt32(this.version)
16055 writeSlice(this.prevHash)
16056 writeSlice(this.merkleRoot)
16057 writeUInt32(this.timestamp)
16058 writeUInt32(this.bits)
16059 writeUInt32(this.nonce)
8b095871 16060
9987f0c1 16061 if (headersOnly || !this.transactions) return buffer
8b095871 16062
9987f0c1
IC
16063 varuint.encode(this.transactions.length, buffer, offset)
16064 offset += varuint.encode.bytes
8b095871 16065
9987f0c1
IC
16066 this.transactions.forEach(function (tx) {
16067 var txSize = tx.byteLength() // TODO: extract from toBuffer?
16068 tx.toBuffer(buffer, offset)
16069 offset += txSize
16070 })
8b095871 16071
9987f0c1
IC
16072 return buffer
16073}
8b095871 16074
9987f0c1
IC
16075Block.prototype.toHex = function (headersOnly) {
16076 return this.toBuffer(headersOnly).toString('hex')
16077}
8b095871 16078
9987f0c1
IC
16079Block.calculateTarget = function (bits) {
16080 var exponent = ((bits & 0xff000000) >> 24) - 3
16081 var mantissa = bits & 0x007fffff
16082 var target = Buffer.alloc(32, 0)
16083 target.writeUInt32BE(mantissa, 28 - exponent)
16084 return target
8b095871
IC
16085}
16086
9987f0c1
IC
16087Block.calculateMerkleRoot = function (transactions) {
16088 typeforce([{ getHash: types.Function }], transactions)
16089 if (transactions.length === 0) throw TypeError('Cannot compute merkle root for zero transactions')
8b095871 16090
9987f0c1
IC
16091 var hashes = transactions.map(function (transaction) {
16092 return transaction.getHash()
16093 })
8b095871 16094
9987f0c1
IC
16095 return fastMerkleRoot(hashes, bcrypto.hash256)
16096}
8b095871 16097
9987f0c1
IC
16098Block.prototype.checkMerkleRoot = function () {
16099 if (!this.transactions) return false
8b095871 16100
9987f0c1
IC
16101 var actualMerkleRoot = Block.calculateMerkleRoot(this.transactions)
16102 return this.merkleRoot.compare(actualMerkleRoot) === 0
16103}
8b095871 16104
9987f0c1
IC
16105Block.prototype.checkProofOfWork = function () {
16106 var hash = this.getHash().reverse()
16107 var target = Block.calculateTarget(this.bits)
8b095871 16108
9987f0c1
IC
16109 return hash.compare(target) <= 0
16110}
8b095871 16111
9987f0c1 16112module.exports = Block
8b095871 16113
9987f0c1
IC
16114},{"./crypto":45,"./transaction":76,"./types":78,"merkle-lib/fastRoot":94,"safe-buffer":98,"typeforce":109,"varuint-bitcoin":111}],44:[function(require,module,exports){
16115var pushdata = require('pushdata-bitcoin')
16116var varuint = require('varuint-bitcoin')
8b095871 16117
9987f0c1
IC
16118// https://github.com/feross/buffer/blob/master/index.js#L1127
16119function verifuint (value, max) {
16120 if (typeof value !== 'number') throw new Error('cannot write a non-number as a number')
16121 if (value < 0) throw new Error('specified a negative value for writing an unsigned value')
16122 if (value > max) throw new Error('RangeError: value out of range')
16123 if (Math.floor(value) !== value) throw new Error('value has a fractional component')
8b095871
IC
16124}
16125
9987f0c1
IC
16126function readUInt64LE (buffer, offset) {
16127 var a = buffer.readUInt32LE(offset)
16128 var b = buffer.readUInt32LE(offset + 4)
16129 b *= 0x100000000
8b095871 16130
9987f0c1 16131 verifuint(b + a, 0x001fffffffffffff)
8b095871 16132
9987f0c1 16133 return b + a
8b095871
IC
16134}
16135
9987f0c1
IC
16136function writeUInt64LE (buffer, value, offset) {
16137 verifuint(value, 0x001fffffffffffff)
8b095871 16138
9987f0c1
IC
16139 buffer.writeInt32LE(value & -1, offset)
16140 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
16141 return offset + 8
8b095871
IC
16142}
16143
9987f0c1
IC
16144// TODO: remove in 4.0.0?
16145function readVarInt (buffer, offset) {
16146 var result = varuint.decode(buffer, offset)
8b095871 16147
9987f0c1
IC
16148 return {
16149 number: result,
16150 size: varuint.decode.bytes
8b095871 16151 }
9987f0c1 16152}
8b095871 16153
9987f0c1
IC
16154// TODO: remove in 4.0.0?
16155function writeVarInt (buffer, number, offset) {
16156 varuint.encode(number, buffer, offset)
16157 return varuint.encode.bytes
8b095871
IC
16158}
16159
16160module.exports = {
9987f0c1
IC
16161 pushDataSize: pushdata.encodingLength,
16162 readPushDataInt: pushdata.decode,
16163 readUInt64LE: readUInt64LE,
16164 readVarInt: readVarInt,
16165 varIntBuffer: varuint.encode,
16166 varIntSize: varuint.encodingLength,
16167 writePushDataInt: pushdata.encode,
16168 writeUInt64LE: writeUInt64LE,
16169 writeVarInt: writeVarInt
8b095871
IC
16170}
16171
9987f0c1
IC
16172},{"pushdata-bitcoin":95,"varuint-bitcoin":111}],45:[function(require,module,exports){
16173var createHash = require('create-hash')
8b095871 16174
9987f0c1
IC
16175function ripemd160 (buffer) {
16176 return createHash('rmd160').update(buffer).digest()
16177}
8b095871 16178
9987f0c1
IC
16179function sha1 (buffer) {
16180 return createHash('sha1').update(buffer).digest()
8b095871
IC
16181}
16182
9987f0c1
IC
16183function sha256 (buffer) {
16184 return createHash('sha256').update(buffer).digest()
16185}
8b095871 16186
9987f0c1
IC
16187function hash160 (buffer) {
16188 return ripemd160(sha256(buffer))
16189}
8b095871 16190
9987f0c1
IC
16191function hash256 (buffer) {
16192 return sha256(sha256(buffer))
8b095871
IC
16193}
16194
9987f0c1
IC
16195module.exports = {
16196 hash160: hash160,
16197 hash256: hash256,
16198 ripemd160: ripemd160,
16199 sha1: sha1,
16200 sha256: sha256
8b095871
IC
16201}
16202
9987f0c1
IC
16203},{"create-hash":82}],46:[function(require,module,exports){
16204var Buffer = require('safe-buffer').Buffer
16205var createHmac = require('create-hmac')
16206var typeforce = require('typeforce')
16207var types = require('./types')
8b095871 16208
9987f0c1
IC
16209var BigInteger = require('bigi')
16210var ECSignature = require('./ecsignature')
8b095871 16211
9987f0c1
IC
16212var ZERO = Buffer.alloc(1, 0)
16213var ONE = Buffer.alloc(1, 1)
8b095871 16214
9987f0c1
IC
16215var ecurve = require('ecurve')
16216var secp256k1 = ecurve.getCurveByName('secp256k1')
8b095871 16217
9987f0c1
IC
16218// https://tools.ietf.org/html/rfc6979#section-3.2
16219function deterministicGenerateK (hash, x, checkSig) {
16220 typeforce(types.tuple(
16221 types.Hash256bit,
16222 types.Buffer256bit,
16223 types.Function
16224 ), arguments)
8b095871 16225
9987f0c1
IC
16226 // Step A, ignored as hash already provided
16227 // Step B
16228 // Step C
16229 var k = Buffer.alloc(32, 0)
16230 var v = Buffer.alloc(32, 1)
8b095871 16231
9987f0c1
IC
16232 // Step D
16233 k = createHmac('sha256', k)
16234 .update(v)
16235 .update(ZERO)
16236 .update(x)
16237 .update(hash)
16238 .digest()
8b095871 16239
9987f0c1
IC
16240 // Step E
16241 v = createHmac('sha256', k).update(v).digest()
8b095871 16242
9987f0c1
IC
16243 // Step F
16244 k = createHmac('sha256', k)
16245 .update(v)
16246 .update(ONE)
16247 .update(x)
16248 .update(hash)
16249 .digest()
8b095871 16250
9987f0c1
IC
16251 // Step G
16252 v = createHmac('sha256', k).update(v).digest()
8b095871 16253
9987f0c1
IC
16254 // Step H1/H2a, ignored as tlen === qlen (256 bit)
16255 // Step H2b
16256 v = createHmac('sha256', k).update(v).digest()
8b095871 16257
9987f0c1 16258 var T = BigInteger.fromBuffer(v)
8b095871 16259
9987f0c1
IC
16260 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
16261 while (T.signum() <= 0 || T.compareTo(secp256k1.n) >= 0 || !checkSig(T)) {
16262 k = createHmac('sha256', k)
16263 .update(v)
16264 .update(ZERO)
16265 .digest()
16266
16267 v = createHmac('sha256', k).update(v).digest()
16268
16269 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
16270 // Step H2b again
16271 v = createHmac('sha256', k).update(v).digest()
16272 T = BigInteger.fromBuffer(v)
8b095871
IC
16273 }
16274
9987f0c1 16275 return T
8b095871
IC
16276}
16277
9987f0c1 16278var N_OVER_TWO = secp256k1.n.shiftRight(1)
8b095871 16279
9987f0c1
IC
16280function sign (hash, d) {
16281 typeforce(types.tuple(types.Hash256bit, types.BigInt), arguments)
8b095871 16282
9987f0c1
IC
16283 var x = d.toBuffer(32)
16284 var e = BigInteger.fromBuffer(hash)
16285 var n = secp256k1.n
16286 var G = secp256k1.G
8b095871 16287
9987f0c1
IC
16288 var r, s
16289 deterministicGenerateK(hash, x, function (k) {
16290 var Q = G.multiply(k)
8b095871 16291
9987f0c1 16292 if (secp256k1.isInfinity(Q)) return false
8b095871 16293
9987f0c1
IC
16294 r = Q.affineX.mod(n)
16295 if (r.signum() === 0) return false
8b095871 16296
9987f0c1
IC
16297 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
16298 if (s.signum() === 0) return false
8b095871 16299
9987f0c1
IC
16300 return true
16301 })
16302
16303 // enforce low S values, see bip62: 'low s values in signatures'
16304 if (s.compareTo(N_OVER_TWO) > 0) {
16305 s = n.subtract(s)
8b095871 16306 }
8b095871 16307
9987f0c1 16308 return new ECSignature(r, s)
8b095871 16309}
8b095871 16310
9987f0c1
IC
16311function verify (hash, signature, Q) {
16312 typeforce(types.tuple(
16313 types.Hash256bit,
16314 types.ECSignature,
16315 types.ECPoint
16316 ), arguments)
8b095871 16317
9987f0c1
IC
16318 var n = secp256k1.n
16319 var G = secp256k1.G
8b095871 16320
9987f0c1
IC
16321 var r = signature.r
16322 var s = signature.s
8b095871 16323
9987f0c1
IC
16324 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
16325 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
16326 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
8b095871 16327
9987f0c1
IC
16328 // 1.4.2 H = Hash(M), already done by the user
16329 // 1.4.3 e = H
16330 var e = BigInteger.fromBuffer(hash)
8b095871 16331
9987f0c1
IC
16332 // Compute s^-1
16333 var sInv = s.modInverse(n)
8b095871 16334
9987f0c1
IC
16335 // 1.4.4 Compute u1 = es^−1 mod n
16336 // u2 = rs^−1 mod n
16337 var u1 = e.multiply(sInv).mod(n)
16338 var u2 = r.multiply(sInv).mod(n)
8b095871 16339
9987f0c1
IC
16340 // 1.4.5 Compute R = (xR, yR)
16341 // R = u1G + u2Q
16342 var R = G.multiplyTwo(u1, Q, u2)
8b095871 16343
9987f0c1
IC
16344 // 1.4.5 (cont.) Enforce R is not at infinity
16345 if (secp256k1.isInfinity(R)) return false
8b095871 16346
9987f0c1
IC
16347 // 1.4.6 Convert the field element R.x to an integer
16348 var xR = R.affineX
8b095871 16349
9987f0c1
IC
16350 // 1.4.7 Set v = xR mod n
16351 var v = xR.mod(n)
8b095871 16352
9987f0c1
IC
16353 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
16354 return v.equals(r)
8b095871
IC
16355}
16356
9987f0c1
IC
16357module.exports = {
16358 deterministicGenerateK: deterministicGenerateK,
16359 sign: sign,
16360 verify: verify,
8b095871 16361
9987f0c1
IC
16362 // TODO: remove
16363 __curve: secp256k1
16364}
8b095871 16365
9987f0c1
IC
16366},{"./ecsignature":48,"./types":78,"bigi":37,"create-hmac":85,"ecurve":89,"safe-buffer":98,"typeforce":109}],47:[function(require,module,exports){
16367var baddress = require('./address')
16368var bcrypto = require('./crypto')
16369var ecdsa = require('./ecdsa')
16370var randomBytes = require('randombytes')
16371var typeforce = require('typeforce')
16372var types = require('./types')
16373var wif = require('wif')
8b095871 16374
9987f0c1
IC
16375var NETWORKS = require('./networks')
16376var BigInteger = require('bigi')
8b095871 16377
9987f0c1
IC
16378var ecurve = require('ecurve')
16379var secp256k1 = ecdsa.__curve
8b095871 16380
9987f0c1
IC
16381function ECPair (d, Q, options) {
16382 if (options) {
16383 typeforce({
16384 compressed: types.maybe(types.Boolean),
16385 network: types.maybe(types.Network)
16386 }, options)
16387 }
8b095871 16388
9987f0c1 16389 options = options || {}
8b095871 16390
9987f0c1
IC
16391 if (d) {
16392 if (d.signum() <= 0) throw new Error('Private key must be greater than 0')
16393 if (d.compareTo(secp256k1.n) >= 0) throw new Error('Private key must be less than the curve order')
16394 if (Q) throw new TypeError('Unexpected publicKey parameter')
8b095871 16395
9987f0c1
IC
16396 this.d = d
16397 } else {
16398 typeforce(types.ECPoint, Q)
8b095871 16399
9987f0c1 16400 this.__Q = Q
8b095871 16401 }
8b095871 16402
9987f0c1
IC
16403 this.compressed = options.compressed === undefined ? true : options.compressed
16404 this.network = options.network || NETWORKS.bitcoin
8b095871
IC
16405}
16406
9987f0c1
IC
16407Object.defineProperty(ECPair.prototype, 'Q', {
16408 get: function () {
16409 if (!this.__Q && this.d) {
16410 this.__Q = secp256k1.G.multiply(this.d)
16411 }
8b095871 16412
9987f0c1 16413 return this.__Q
8b095871 16414 }
9987f0c1 16415})
8b095871 16416
9987f0c1
IC
16417ECPair.fromPublicKeyBuffer = function (buffer, network) {
16418 var Q = ecurve.Point.decodeFrom(secp256k1, buffer)
8b095871 16419
9987f0c1
IC
16420 return new ECPair(null, Q, {
16421 compressed: Q.compressed,
16422 network: network
16423 })
16424}
8b095871 16425
9987f0c1
IC
16426ECPair.fromWIF = function (string, network) {
16427 var decoded = wif.decode(string)
16428 var version = decoded.version
8b095871 16429
9987f0c1
IC
16430 // list of networks?
16431 if (types.Array(network)) {
16432 network = network.filter(function (x) {
16433 return version === x.wif
16434 }).pop()
16435
16436 if (!network) throw new Error('Unknown network version')
16437
16438 // otherwise, assume a network object (or default to bitcoin)
16439 } else {
16440 network = network || NETWORKS.bitcoin
16441
16442 if (version !== network.wif) throw new Error('Invalid network version')
8b095871
IC
16443 }
16444
9987f0c1
IC
16445 var d = BigInteger.fromBuffer(decoded.privateKey)
16446
16447 return new ECPair(d, null, {
16448 compressed: decoded.compressed,
16449 network: network
16450 })
8b095871
IC
16451}
16452
9987f0c1
IC
16453ECPair.makeRandom = function (options) {
16454 options = options || {}
16455
16456 var rng = options.rng || randomBytes
16457
16458 var d
16459 do {
16460 var buffer = rng(32)
16461 typeforce(types.Buffer256bit, buffer)
16462
16463 d = BigInteger.fromBuffer(buffer)
16464 } while (d.signum() <= 0 || d.compareTo(secp256k1.n) >= 0)
16465
16466 return new ECPair(d, null, options)
8b095871
IC
16467}
16468
9987f0c1
IC
16469ECPair.prototype.getAddress = function () {
16470 return baddress.toBase58Check(bcrypto.hash160(this.getPublicKeyBuffer()), this.getNetwork().pubKeyHash)
8b095871
IC
16471}
16472
9987f0c1
IC
16473ECPair.prototype.getNetwork = function () {
16474 return this.network
8b095871
IC
16475}
16476
9987f0c1
IC
16477ECPair.prototype.getPublicKeyBuffer = function () {
16478 return this.Q.getEncoded(this.compressed)
8b095871
IC
16479}
16480
9987f0c1
IC
16481ECPair.prototype.sign = function (hash) {
16482 if (!this.d) throw new Error('Missing private key')
16483
16484 return ecdsa.sign(hash, this.d)
8b095871
IC
16485}
16486
9987f0c1
IC
16487ECPair.prototype.toWIF = function () {
16488 if (!this.d) throw new Error('Missing private key')
16489
16490 return wif.encode(this.network.wif, this.d.toBuffer(32), this.compressed)
8b095871
IC
16491}
16492
9987f0c1
IC
16493ECPair.prototype.verify = function (hash, signature) {
16494 return ecdsa.verify(hash, signature, this.Q)
16495}
8b095871 16496
9987f0c1 16497module.exports = ECPair
8b095871 16498
9987f0c1
IC
16499},{"./address":42,"./crypto":45,"./ecdsa":46,"./networks":51,"./types":78,"bigi":37,"ecurve":89,"randombytes":96,"typeforce":109,"wif":112}],48:[function(require,module,exports){
16500(function (Buffer){
16501var bip66 = require('bip66')
16502var typeforce = require('typeforce')
16503var types = require('./types')
8b095871 16504
9987f0c1 16505var BigInteger = require('bigi')
8b095871 16506
9987f0c1
IC
16507function ECSignature (r, s) {
16508 typeforce(types.tuple(types.BigInt, types.BigInt), arguments)
8b095871 16509
9987f0c1
IC
16510 this.r = r
16511 this.s = s
16512}
16513
16514ECSignature.parseCompact = function (buffer) {
16515 if (buffer.length !== 65) throw new Error('Invalid signature length')
16516
16517 var flagByte = buffer.readUInt8(0) - 27
16518 if (flagByte !== (flagByte & 7)) throw new Error('Invalid signature parameter')
16519
16520 var compressed = !!(flagByte & 4)
16521 var recoveryParam = flagByte & 3
16522
16523 var r = BigInteger.fromBuffer(buffer.slice(1, 33))
16524 var s = BigInteger.fromBuffer(buffer.slice(33))
16525
16526 return {
16527 compressed: compressed,
16528 i: recoveryParam,
16529 signature: new ECSignature(r, s)
8b095871 16530 }
9987f0c1 16531}
8b095871 16532
9987f0c1
IC
16533ECSignature.fromDER = function (buffer) {
16534 var decode = bip66.decode(buffer)
16535 var r = BigInteger.fromDERInteger(decode.r)
16536 var s = BigInteger.fromDERInteger(decode.s)
8b095871 16537
9987f0c1
IC
16538 return new ECSignature(r, s)
16539}
16540
16541// BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
16542ECSignature.parseScriptSignature = function (buffer) {
16543 var hashType = buffer.readUInt8(buffer.length - 1)
16544 var hashTypeMod = hashType & ~0x80
16545
16546 if (hashTypeMod <= 0x00 || hashTypeMod >= 0x04) throw new Error('Invalid hashType ' + hashType)
16547
16548 return {
16549 signature: ECSignature.fromDER(buffer.slice(0, -1)),
16550 hashType: hashType
8b095871 16551 }
9987f0c1 16552}
8b095871 16553
9987f0c1
IC
16554ECSignature.prototype.toCompact = function (i, compressed) {
16555 if (compressed) {
16556 i += 4
16557 }
16558
16559 i += 27
16560
16561 var buffer = Buffer.alloc(65)
16562 buffer.writeUInt8(i, 0)
16563 this.r.toBuffer(32).copy(buffer, 1)
16564 this.s.toBuffer(32).copy(buffer, 33)
16565
16566 return buffer
8b095871
IC
16567}
16568
9987f0c1
IC
16569ECSignature.prototype.toDER = function () {
16570 var r = Buffer.from(this.r.toDERInteger())
16571 var s = Buffer.from(this.s.toDERInteger())
16572
16573 return bip66.encode(r, s)
16574}
16575
16576ECSignature.prototype.toScriptSignature = function (hashType) {
16577 var hashTypeMod = hashType & ~0x80
16578 if (hashTypeMod <= 0 || hashTypeMod >= 4) throw new Error('Invalid hashType ' + hashType)
16579
16580 var hashTypeBuffer = Buffer.alloc(1)
16581 hashTypeBuffer.writeUInt8(hashType, 0)
16582
16583 return Buffer.concat([this.toDER(), hashTypeBuffer])
16584}
16585
16586module.exports = ECSignature
8b095871
IC
16587
16588}).call(this,require("buffer").Buffer)
9987f0c1
IC
16589},{"./types":78,"bigi":37,"bip66":39,"buffer":4,"typeforce":109}],49:[function(require,module,exports){
16590var Buffer = require('safe-buffer').Buffer
16591var base58check = require('bs58check')
16592var bcrypto = require('./crypto')
16593var createHmac = require('create-hmac')
16594var typeforce = require('typeforce')
16595var types = require('./types')
16596var NETWORKS = require('./networks')
16597
16598var BigInteger = require('bigi')
16599var ECPair = require('./ecpair')
16600
16601var ecurve = require('ecurve')
16602var curve = ecurve.getCurveByName('secp256k1')
16603
16604function HDNode (keyPair, chainCode) {
16605 typeforce(types.tuple('ECPair', types.Buffer256bit), arguments)
16606
16607 if (!keyPair.compressed) throw new TypeError('BIP32 only allows compressed keyPairs')
16608
16609 this.keyPair = keyPair
16610 this.chainCode = chainCode
16611 this.depth = 0
16612 this.index = 0
16613 this.parentFingerprint = 0x00000000
8b095871
IC
16614}
16615
9987f0c1
IC
16616HDNode.HIGHEST_BIT = 0x80000000
16617HDNode.LENGTH = 78
16618HDNode.MASTER_SECRET = Buffer.from('Bitcoin seed', 'utf8')
8b095871 16619
9987f0c1
IC
16620HDNode.fromSeedBuffer = function (seed, network) {
16621 typeforce(types.tuple(types.Buffer, types.maybe(types.Network)), arguments)
8b095871 16622
9987f0c1
IC
16623 if (seed.length < 16) throw new TypeError('Seed should be at least 128 bits')
16624 if (seed.length > 64) throw new TypeError('Seed should be at most 512 bits')
8b095871 16625
9987f0c1
IC
16626 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
16627 var IL = I.slice(0, 32)
16628 var IR = I.slice(32)
8b095871 16629
9987f0c1
IC
16630 // In case IL is 0 or >= n, the master key is invalid
16631 // This is handled by the ECPair constructor
16632 var pIL = BigInteger.fromBuffer(IL)
16633 var keyPair = new ECPair(pIL, null, {
16634 network: network
16635 })
8b095871 16636
9987f0c1
IC
16637 return new HDNode(keyPair, IR)
16638}
8b095871 16639
9987f0c1
IC
16640HDNode.fromSeedHex = function (hex, network) {
16641 return HDNode.fromSeedBuffer(Buffer.from(hex, 'hex'), network)
8b095871
IC
16642}
16643
9987f0c1
IC
16644HDNode.fromBase58 = function (string, networks) {
16645 var buffer = base58check.decode(string)
16646 if (buffer.length !== 78) throw new Error('Invalid buffer length')
8b095871 16647
9987f0c1
IC
16648 // 4 bytes: version bytes
16649 var version = buffer.readUInt32BE(0)
16650 var network
8b095871 16651
9987f0c1
IC
16652 // list of networks?
16653 if (Array.isArray(networks)) {
16654 network = networks.filter(function (x) {
16655 return version === x.bip32.private ||
16656 version === x.bip32.public
16657 }).pop()
8b095871 16658
9987f0c1
IC
16659 if (!network) throw new Error('Unknown network version')
16660
16661 // otherwise, assume a network object (or default to bitcoin)
16662 } else {
16663 network = networks || NETWORKS.bitcoin
8b095871
IC
16664 }
16665
9987f0c1
IC
16666 if (version !== network.bip32.private &&
16667 version !== network.bip32.public) throw new Error('Invalid network version')
8b095871 16668
9987f0c1
IC
16669 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
16670 var depth = buffer[4]
8b095871 16671
9987f0c1
IC
16672 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
16673 var parentFingerprint = buffer.readUInt32BE(5)
16674 if (depth === 0) {
16675 if (parentFingerprint !== 0x00000000) throw new Error('Invalid parent fingerprint')
16676 }
8b095871 16677
9987f0c1
IC
16678 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
16679 // This is encoded in MSB order. (0x00000000 if master key)
16680 var index = buffer.readUInt32BE(9)
16681 if (depth === 0 && index !== 0) throw new Error('Invalid index')
16682
16683 // 32 bytes: the chain code
16684 var chainCode = buffer.slice(13, 45)
16685 var keyPair
16686
16687 // 33 bytes: private key data (0x00 + k)
16688 if (version === network.bip32.private) {
16689 if (buffer.readUInt8(45) !== 0x00) throw new Error('Invalid private key')
16690
16691 var d = BigInteger.fromBuffer(buffer.slice(46, 78))
16692 keyPair = new ECPair(d, null, { network: network })
16693
16694 // 33 bytes: public key data (0x02 + X or 0x03 + X)
16695 } else {
16696 var Q = ecurve.Point.decodeFrom(curve, buffer.slice(45, 78))
16697 // Q.compressed is assumed, if somehow this assumption is broken, `new HDNode` will throw
16698
16699 // Verify that the X coordinate in the public point corresponds to a point on the curve.
16700 // If not, the extended public key is invalid.
16701 curve.validate(Q)
16702
16703 keyPair = new ECPair(null, Q, { network: network })
16704 }
16705
16706 var hd = new HDNode(keyPair, chainCode)
16707 hd.depth = depth
16708 hd.index = index
16709 hd.parentFingerprint = parentFingerprint
16710
16711 return hd
8b095871
IC
16712}
16713
9987f0c1
IC
16714HDNode.prototype.getAddress = function () {
16715 return this.keyPair.getAddress()
16716}
8b095871 16717
9987f0c1
IC
16718HDNode.prototype.getIdentifier = function () {
16719 return bcrypto.hash160(this.keyPair.getPublicKeyBuffer())
16720}
8b095871 16721
9987f0c1
IC
16722HDNode.prototype.getFingerprint = function () {
16723 return this.getIdentifier().slice(0, 4)
16724}
8b095871 16725
9987f0c1
IC
16726HDNode.prototype.getNetwork = function () {
16727 return this.keyPair.getNetwork()
8b095871
IC
16728}
16729
9987f0c1
IC
16730HDNode.prototype.getPublicKeyBuffer = function () {
16731 return this.keyPair.getPublicKeyBuffer()
16732}
8b095871 16733
9987f0c1
IC
16734HDNode.prototype.neutered = function () {
16735 var neuteredKeyPair = new ECPair(null, this.keyPair.Q, {
16736 network: this.keyPair.network
16737 })
8b095871 16738
9987f0c1
IC
16739 var neutered = new HDNode(neuteredKeyPair, this.chainCode)
16740 neutered.depth = this.depth
16741 neutered.index = this.index
16742 neutered.parentFingerprint = this.parentFingerprint
8b095871 16743
9987f0c1
IC
16744 return neutered
16745}
8b095871 16746
9987f0c1
IC
16747HDNode.prototype.sign = function (hash) {
16748 return this.keyPair.sign(hash)
16749}
8b095871 16750
9987f0c1
IC
16751HDNode.prototype.verify = function (hash, signature) {
16752 return this.keyPair.verify(hash, signature)
8b095871
IC
16753}
16754
9987f0c1
IC
16755HDNode.prototype.toBase58 = function (__isPrivate) {
16756 if (__isPrivate !== undefined) throw new TypeError('Unsupported argument in 2.0.0')
8b095871 16757
9987f0c1
IC
16758 // Version
16759 var network = this.keyPair.network
16760 var version = (!this.isNeutered()) ? network.bip32.private : network.bip32.public
16761 var buffer = Buffer.allocUnsafe(78)
8b095871 16762
9987f0c1
IC
16763 // 4 bytes: version bytes
16764 buffer.writeUInt32BE(version, 0)
8b095871 16765
9987f0c1
IC
16766 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
16767 buffer.writeUInt8(this.depth, 4)
16768
16769 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
16770 buffer.writeUInt32BE(this.parentFingerprint, 5)
16771
16772 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
16773 // This is encoded in big endian. (0x00000000 if master key)
16774 buffer.writeUInt32BE(this.index, 9)
16775
16776 // 32 bytes: the chain code
16777 this.chainCode.copy(buffer, 13)
16778
16779 // 33 bytes: the public key or private key data
16780 if (!this.isNeutered()) {
16781 // 0x00 + k for private keys
16782 buffer.writeUInt8(0, 45)
16783 this.keyPair.d.toBuffer(32).copy(buffer, 46)
16784
16785 // 33 bytes: the public key
16786 } else {
16787 // X9.62 encoding for public keys
16788 this.keyPair.getPublicKeyBuffer().copy(buffer, 45)
16789 }
16790
16791 return base58check.encode(buffer)
8b095871
IC
16792}
16793
9987f0c1
IC
16794// https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
16795HDNode.prototype.derive = function (index) {
16796 typeforce(types.UInt32, index)
16797
16798 var isHardened = index >= HDNode.HIGHEST_BIT
16799 var data = Buffer.allocUnsafe(37)
16800
16801 // Hardened child
16802 if (isHardened) {
16803 if (this.isNeutered()) throw new TypeError('Could not derive hardened child key')
8b095871 16804
9987f0c1
IC
16805 // data = 0x00 || ser256(kpar) || ser32(index)
16806 data[0] = 0x00
16807 this.keyPair.d.toBuffer(32).copy(data, 1)
16808 data.writeUInt32BE(index, 33)
8b095871 16809
9987f0c1
IC
16810 // Normal child
16811 } else {
16812 // data = serP(point(kpar)) || ser32(index)
16813 // = serP(Kpar) || ser32(index)
16814 this.keyPair.getPublicKeyBuffer().copy(data, 0)
16815 data.writeUInt32BE(index, 33)
16816 }
8b095871 16817
9987f0c1
IC
16818 var I = createHmac('sha512', this.chainCode).update(data).digest()
16819 var IL = I.slice(0, 32)
16820 var IR = I.slice(32)
8b095871 16821
9987f0c1 16822 var pIL = BigInteger.fromBuffer(IL)
8b095871 16823
9987f0c1
IC
16824 // In case parse256(IL) >= n, proceed with the next value for i
16825 if (pIL.compareTo(curve.n) >= 0) {
16826 return this.derive(index + 1)
8b095871
IC
16827 }
16828
9987f0c1
IC
16829 // Private parent key -> private child key
16830 var derivedKeyPair
16831 if (!this.isNeutered()) {
16832 // ki = parse256(IL) + kpar (mod n)
16833 var ki = pIL.add(this.keyPair.d).mod(curve.n)
8b095871 16834
9987f0c1
IC
16835 // In case ki == 0, proceed with the next value for i
16836 if (ki.signum() === 0) {
16837 return this.derive(index + 1)
16838 }
16839
16840 derivedKeyPair = new ECPair(ki, null, {
16841 network: this.keyPair.network
16842 })
16843
16844 // Public parent key -> public child key
16845 } else {
16846 // Ki = point(parse256(IL)) + Kpar
16847 // = G*IL + Kpar
16848 var Ki = curve.G.multiply(pIL).add(this.keyPair.Q)
16849
16850 // In case Ki is the point at infinity, proceed with the next value for i
16851 if (curve.isInfinity(Ki)) {
16852 return this.derive(index + 1)
16853 }
16854
16855 derivedKeyPair = new ECPair(null, Ki, {
16856 network: this.keyPair.network
16857 })
16858 }
16859
16860 var hd = new HDNode(derivedKeyPair, IR)
16861 hd.depth = this.depth + 1
16862 hd.index = index
16863 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
16864
16865 return hd
8b095871
IC
16866}
16867
9987f0c1
IC
16868HDNode.prototype.deriveHardened = function (index) {
16869 typeforce(types.UInt31, index)
8b095871 16870
9987f0c1
IC
16871 // Only derives hardened private keys by default
16872 return this.derive(index + HDNode.HIGHEST_BIT)
16873}
8b095871 16874
9987f0c1
IC
16875// Private === not neutered
16876// Public === neutered
16877HDNode.prototype.isNeutered = function () {
16878 return !(this.keyPair.d)
8b095871
IC
16879}
16880
9987f0c1
IC
16881HDNode.prototype.derivePath = function (path) {
16882 typeforce(types.BIP32Path, path)
8b095871 16883
9987f0c1
IC
16884 var splitPath = path.split('/')
16885 if (splitPath[0] === 'm') {
16886 if (this.parentFingerprint) {
16887 throw new Error('Not a master node')
16888 }
8b095871 16889
9987f0c1
IC
16890 splitPath = splitPath.slice(1)
16891 }
8b095871 16892
9987f0c1
IC
16893 return splitPath.reduce(function (prevHd, indexStr) {
16894 var index
16895 if (indexStr.slice(-1) === "'") {
16896 index = parseInt(indexStr.slice(0, -1), 10)
16897 return prevHd.deriveHardened(index)
16898 } else {
16899 index = parseInt(indexStr, 10)
16900 return prevHd.derive(index)
16901 }
16902 }, this)
16903}
8b095871 16904
9987f0c1 16905module.exports = HDNode
8b095871 16906
9987f0c1
IC
16907},{"./crypto":45,"./ecpair":47,"./networks":51,"./types":78,"bigi":37,"bs58check":80,"create-hmac":85,"ecurve":89,"safe-buffer":98,"typeforce":109}],50:[function(require,module,exports){
16908module.exports = {
16909 Block: require('./block'),
16910 ECPair: require('./ecpair'),
16911 ECSignature: require('./ecsignature'),
16912 HDNode: require('./hdnode'),
16913 Transaction: require('./transaction'),
16914 TransactionBuilder: require('./transaction_builder'),
8b095871 16915
9987f0c1
IC
16916 address: require('./address'),
16917 bufferutils: require('./bufferutils'), // TODO: remove in 4.0.0
16918 crypto: require('./crypto'),
16919 networks: require('./networks'),
16920 opcodes: require('bitcoin-ops'),
16921 script: require('./script')
8b095871
IC
16922}
16923
9987f0c1
IC
16924},{"./address":42,"./block":43,"./bufferutils":44,"./crypto":45,"./ecpair":47,"./ecsignature":48,"./hdnode":49,"./networks":51,"./script":52,"./transaction":76,"./transaction_builder":77,"bitcoin-ops":40}],51:[function(require,module,exports){
16925// https://en.bitcoin.it/wiki/List_of_address_prefixes
16926// Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
8b095871 16927
9987f0c1
IC
16928module.exports = {
16929 bitcoin: {
16930 messagePrefix: '\x18Bitcoin Signed Message:\n',
16931 bip32: {
16932 public: 0x0488b21e,
16933 private: 0x0488ade4
16934 },
16935 pubKeyHash: 0x00,
16936 scriptHash: 0x05,
16937 wif: 0x80
16938 },
16939 testnet: {
16940 messagePrefix: '\x18Bitcoin Signed Message:\n',
16941 bip32: {
16942 public: 0x043587cf,
16943 private: 0x04358394
16944 },
16945 pubKeyHash: 0x6f,
16946 scriptHash: 0xc4,
16947 wif: 0xef
16948 },
16949 litecoin: {
8d18f379
IC
16950 messagePrefix: '\x19Litecoin Signed Message:\n',
16951 bip32: {
16952 public: 0x0488b21e,
16953 private: 0x0488ade4,
16954 },
16955 pubKeyHash: 0x30,
16956 scriptHash: 0x32,
16957 wif: 0xb0
16958 },
16959 litecoinLtub: {
9987f0c1
IC
16960 messagePrefix: '\x19Litecoin Signed Message:\n',
16961 bip32: {
16962 public: 0x019da462,
16963 private: 0x019d9cfe
16964 },
16965 pubKeyHash: 0x30,
16966 scriptHash: 0x32,
16967 wif: 0xb0
16968 }
16969}
8b095871 16970
9987f0c1
IC
16971},{}],52:[function(require,module,exports){
16972var Buffer = require('safe-buffer').Buffer
16973var bip66 = require('bip66')
16974var pushdata = require('pushdata-bitcoin')
16975var typeforce = require('typeforce')
16976var types = require('./types')
16977var scriptNumber = require('./script_number')
16978
16979var OPS = require('bitcoin-ops')
16980var REVERSE_OPS = require('bitcoin-ops/map')
16981var OP_INT_BASE = OPS.OP_RESERVED // OP_1 - 1
16982
16983function isOPInt (value) {
16984 return types.Number(value) &&
16985 ((value === OPS.OP_0) ||
16986 (value >= OPS.OP_1 && value <= OPS.OP_16) ||
16987 (value === OPS.OP_1NEGATE))
8b095871
IC
16988}
16989
9987f0c1
IC
16990function isPushOnlyChunk (value) {
16991 return types.Buffer(value) || isOPInt(value)
8b095871
IC
16992}
16993
9987f0c1
IC
16994function isPushOnly (value) {
16995 return types.Array(value) && value.every(isPushOnlyChunk)
16996}
8b095871 16997
9987f0c1
IC
16998function compile (chunks) {
16999 // TODO: remove me
17000 if (Buffer.isBuffer(chunks)) return chunks
8b095871 17001
9987f0c1 17002 typeforce(types.Array, chunks)
8b095871 17003
9987f0c1
IC
17004 var bufferSize = chunks.reduce(function (accum, chunk) {
17005 // data chunk
17006 if (Buffer.isBuffer(chunk)) {
17007 // adhere to BIP62.3, minimal push policy
17008 if (chunk.length === 1 && (chunk[0] === 0x81 || (chunk[0] >= 1 && chunk[0] <= 16))) {
17009 return accum + 1
17010 }
8b095871 17011
9987f0c1
IC
17012 return accum + pushdata.encodingLength(chunk.length) + chunk.length
17013 }
8b095871 17014
9987f0c1
IC
17015 // opcode
17016 return accum + 1
17017 }, 0.0)
8b095871 17018
9987f0c1
IC
17019 var buffer = Buffer.allocUnsafe(bufferSize)
17020 var offset = 0
8b095871 17021
9987f0c1
IC
17022 chunks.forEach(function (chunk) {
17023 // data chunk
17024 if (Buffer.isBuffer(chunk)) {
17025 // adhere to BIP62.3, minimal push policy
17026 if (chunk.length === 1 && chunk[0] >= 1 && chunk[0] <= 16) {
17027 var opcode = OP_INT_BASE + chunk[0]
17028 buffer.writeUInt8(opcode, offset)
17029 offset += 1
17030 return
17031 }
8b095871 17032
9987f0c1
IC
17033 if (chunk.length === 1 && chunk[0] === 0x81) {
17034 buffer.writeUInt8(OPS.OP_1NEGATE, offset)
17035 offset += 1
17036 return
17037 }
8b095871 17038
9987f0c1 17039 offset += pushdata.encode(buffer, chunk.length, offset)
8b095871 17040
9987f0c1
IC
17041 chunk.copy(buffer, offset)
17042 offset += chunk.length
8b095871 17043
9987f0c1
IC
17044 // opcode
17045 } else {
17046 buffer.writeUInt8(chunk, offset)
17047 offset += 1
17048 }
17049 })
8b095871 17050
9987f0c1
IC
17051 if (offset !== buffer.length) throw new Error('Could not decode chunks')
17052 return buffer
17053}
8b095871 17054
9987f0c1
IC
17055function decompile (buffer) {
17056 // TODO: remove me
17057 if (types.Array(buffer)) return buffer
8b095871 17058
9987f0c1 17059 typeforce(types.Buffer, buffer)
8b095871 17060
9987f0c1
IC
17061 var chunks = []
17062 var i = 0
8b095871 17063
9987f0c1
IC
17064 while (i < buffer.length) {
17065 var opcode = buffer[i]
8b095871 17066
9987f0c1
IC
17067 // data chunk
17068 if ((opcode > OPS.OP_0) && (opcode <= OPS.OP_PUSHDATA4)) {
17069 var d = pushdata.decode(buffer, i)
8b095871 17070
9987f0c1
IC
17071 // did reading a pushDataInt fail? empty script
17072 if (d === null) return []
17073 i += d.size
8b095871 17074
9987f0c1
IC
17075 // attempt to read too much data? empty script
17076 if (i + d.number > buffer.length) return []
8b095871 17077
9987f0c1
IC
17078 var data = buffer.slice(i, i + d.number)
17079 i += d.number
8b095871 17080
9987f0c1 17081 chunks.push(data)
8b095871 17082
9987f0c1
IC
17083 // opcode
17084 } else {
17085 chunks.push(opcode)
8b095871 17086
9987f0c1
IC
17087 i += 1
17088 }
17089 }
17090
17091 return chunks
8b095871
IC
17092}
17093
9987f0c1
IC
17094function toASM (chunks) {
17095 if (Buffer.isBuffer(chunks)) {
17096 chunks = decompile(chunks)
17097 }
8b095871 17098
9987f0c1
IC
17099 return chunks.map(function (chunk) {
17100 // data?
17101 if (Buffer.isBuffer(chunk)) return chunk.toString('hex')
8b095871 17102
9987f0c1
IC
17103 // opcode!
17104 return REVERSE_OPS[chunk]
17105 }).join(' ')
17106}
8b095871 17107
9987f0c1
IC
17108function fromASM (asm) {
17109 typeforce(types.String, asm)
8b095871 17110
9987f0c1
IC
17111 return compile(asm.split(' ').map(function (chunkStr) {
17112 // opcode?
17113 if (OPS[chunkStr] !== undefined) return OPS[chunkStr]
17114 typeforce(types.Hex, chunkStr)
8b095871 17115
9987f0c1
IC
17116 // data!
17117 return Buffer.from(chunkStr, 'hex')
17118 }))
17119}
8b095871 17120
9987f0c1
IC
17121function toStack (chunks) {
17122 chunks = decompile(chunks)
17123 typeforce(isPushOnly, chunks)
8b095871 17124
9987f0c1
IC
17125 return chunks.map(function (op) {
17126 if (Buffer.isBuffer(op)) return op
17127 if (op === OPS.OP_0) return Buffer.allocUnsafe(0)
17128
17129 return scriptNumber.encode(op - OP_INT_BASE)
17130 })
8b095871
IC
17131}
17132
9987f0c1
IC
17133function isCanonicalPubKey (buffer) {
17134 if (!Buffer.isBuffer(buffer)) return false
17135 if (buffer.length < 33) return false
8b095871 17136
9987f0c1
IC
17137 switch (buffer[0]) {
17138 case 0x02:
17139 case 0x03:
17140 return buffer.length === 33
17141 case 0x04:
17142 return buffer.length === 65
17143 }
8b095871 17144
9987f0c1 17145 return false
8b095871
IC
17146}
17147
9987f0c1
IC
17148function isDefinedHashType (hashType) {
17149 var hashTypeMod = hashType & ~0x80
8b095871 17150
9987f0c1
IC
17151// return hashTypeMod > SIGHASH_ALL && hashTypeMod < SIGHASH_SINGLE
17152 return hashTypeMod > 0x00 && hashTypeMod < 0x04
8b095871
IC
17153}
17154
9987f0c1
IC
17155function isCanonicalSignature (buffer) {
17156 if (!Buffer.isBuffer(buffer)) return false
17157 if (!isDefinedHashType(buffer[buffer.length - 1])) return false
8b095871 17158
9987f0c1 17159 return bip66.check(buffer.slice(0, -1))
8b095871
IC
17160}
17161
9987f0c1
IC
17162module.exports = {
17163 compile: compile,
17164 decompile: decompile,
17165 fromASM: fromASM,
17166 toASM: toASM,
17167 toStack: toStack,
8b095871 17168
9987f0c1 17169 number: require('./script_number'),
8b095871 17170
9987f0c1
IC
17171 isCanonicalPubKey: isCanonicalPubKey,
17172 isCanonicalSignature: isCanonicalSignature,
17173 isPushOnly: isPushOnly,
17174 isDefinedHashType: isDefinedHashType
8b095871
IC
17175}
17176
9987f0c1
IC
17177var templates = require('./templates')
17178for (var key in templates) {
17179 module.exports[key] = templates[key]
8b095871
IC
17180}
17181
9987f0c1
IC
17182},{"./script_number":53,"./templates":54,"./types":78,"bip66":39,"bitcoin-ops":40,"bitcoin-ops/map":41,"pushdata-bitcoin":95,"safe-buffer":98,"typeforce":109}],53:[function(require,module,exports){
17183var Buffer = require('safe-buffer').Buffer
8b095871 17184
9987f0c1
IC
17185function decode (buffer, maxLength, minimal) {
17186 maxLength = maxLength || 4
17187 minimal = minimal === undefined ? true : minimal
8b095871 17188
9987f0c1
IC
17189 var length = buffer.length
17190 if (length === 0) return 0
17191 if (length > maxLength) throw new TypeError('Script number overflow')
17192 if (minimal) {
17193 if ((buffer[length - 1] & 0x7f) === 0) {
17194 if (length <= 1 || (buffer[length - 2] & 0x80) === 0) throw new Error('Non-minimally encoded script number')
17195 }
17196 }
8b095871 17197
9987f0c1
IC
17198 // 40-bit
17199 if (length === 5) {
17200 var a = buffer.readUInt32LE(0)
17201 var b = buffer.readUInt8(4)
8b095871 17202
9987f0c1
IC
17203 if (b & 0x80) return -(((b & ~0x80) * 0x100000000) + a)
17204 return (b * 0x100000000) + a
17205 }
8b095871 17206
9987f0c1 17207 var result = 0
8b095871 17208
9987f0c1
IC
17209 // 32-bit / 24-bit / 16-bit / 8-bit
17210 for (var i = 0; i < length; ++i) {
17211 result |= buffer[i] << (8 * i)
8b095871
IC
17212 }
17213
9987f0c1
IC
17214 if (buffer[length - 1] & 0x80) return -(result & ~(0x80 << (8 * (length - 1))))
17215 return result
17216}
8b095871 17217
9987f0c1
IC
17218function scriptNumSize (i) {
17219 return i > 0x7fffffff ? 5
17220 : i > 0x7fffff ? 4
17221 : i > 0x7fff ? 3
17222 : i > 0x7f ? 2
17223 : i > 0x00 ? 1
17224 : 0
8b095871
IC
17225}
17226
9987f0c1
IC
17227function encode (number) {
17228 var value = Math.abs(number)
17229 var size = scriptNumSize(value)
17230 var buffer = Buffer.allocUnsafe(size)
17231 var negative = number < 0
8b095871 17232
9987f0c1
IC
17233 for (var i = 0; i < size; ++i) {
17234 buffer.writeUInt8(value & 0xff, i)
17235 value >>= 8
17236 }
8b095871 17237
9987f0c1
IC
17238 if (buffer[size - 1] & 0x80) {
17239 buffer.writeUInt8(negative ? 0x80 : 0x00, size - 1)
17240 } else if (negative) {
17241 buffer[size - 1] |= 0x80
17242 }
17243
17244 return buffer
8b095871
IC
17245}
17246
9987f0c1
IC
17247module.exports = {
17248 decode: decode,
17249 encode: encode
17250}
8b095871 17251
9987f0c1
IC
17252},{"safe-buffer":98}],54:[function(require,module,exports){
17253var decompile = require('../script').decompile
17254var multisig = require('./multisig')
17255var nullData = require('./nulldata')
17256var pubKey = require('./pubkey')
17257var pubKeyHash = require('./pubkeyhash')
17258var scriptHash = require('./scripthash')
17259var witnessPubKeyHash = require('./witnesspubkeyhash')
17260var witnessScriptHash = require('./witnessscripthash')
17261var witnessCommitment = require('./witnesscommitment')
17262
17263var types = {
17264 MULTISIG: 'multisig',
17265 NONSTANDARD: 'nonstandard',
17266 NULLDATA: 'nulldata',
17267 P2PK: 'pubkey',
17268 P2PKH: 'pubkeyhash',
17269 P2SH: 'scripthash',
17270 P2WPKH: 'witnesspubkeyhash',
17271 P2WSH: 'witnessscripthash',
17272 WITNESS_COMMITMENT: 'witnesscommitment'
17273}
8b095871 17274
9987f0c1
IC
17275function classifyOutput (script) {
17276 if (witnessPubKeyHash.output.check(script)) return types.P2WPKH
17277 if (witnessScriptHash.output.check(script)) return types.P2WSH
17278 if (pubKeyHash.output.check(script)) return types.P2PKH
17279 if (scriptHash.output.check(script)) return types.P2SH
8b095871 17280
9987f0c1
IC
17281 // XXX: optimization, below functions .decompile before use
17282 var chunks = decompile(script)
17283 if (multisig.output.check(chunks)) return types.MULTISIG
17284 if (pubKey.output.check(chunks)) return types.P2PK
17285 if (witnessCommitment.output.check(chunks)) return types.WITNESS_COMMITMENT
17286 if (nullData.output.check(chunks)) return types.NULLDATA
8b095871 17287
9987f0c1 17288 return types.NONSTANDARD
8b095871
IC
17289}
17290
9987f0c1
IC
17291function classifyInput (script, allowIncomplete) {
17292 // XXX: optimization, below functions .decompile before use
17293 var chunks = decompile(script)
8b095871 17294
9987f0c1
IC
17295 if (pubKeyHash.input.check(chunks)) return types.P2PKH
17296 if (scriptHash.input.check(chunks, allowIncomplete)) return types.P2SH
17297 if (multisig.input.check(chunks, allowIncomplete)) return types.MULTISIG
17298 if (pubKey.input.check(chunks)) return types.P2PK
8b095871 17299
9987f0c1 17300 return types.NONSTANDARD
8b095871
IC
17301}
17302
9987f0c1
IC
17303function classifyWitness (script, allowIncomplete) {
17304 // XXX: optimization, below functions .decompile before use
17305 var chunks = decompile(script)
8b095871 17306
9987f0c1
IC
17307 if (witnessPubKeyHash.input.check(chunks)) return types.P2WPKH
17308 if (witnessScriptHash.input.check(chunks, allowIncomplete)) return types.P2WSH
8b095871 17309
9987f0c1
IC
17310 return types.NONSTANDARD
17311}
8b095871 17312
9987f0c1
IC
17313module.exports = {
17314 classifyInput: classifyInput,
17315 classifyOutput: classifyOutput,
17316 classifyWitness: classifyWitness,
17317 multisig: multisig,
17318 nullData: nullData,
17319 pubKey: pubKey,
17320 pubKeyHash: pubKeyHash,
17321 scriptHash: scriptHash,
17322 witnessPubKeyHash: witnessPubKeyHash,
17323 witnessScriptHash: witnessScriptHash,
17324 witnessCommitment: witnessCommitment,
17325 types: types
17326}
17327
17328},{"../script":52,"./multisig":55,"./nulldata":58,"./pubkey":59,"./pubkeyhash":62,"./scripthash":65,"./witnesscommitment":68,"./witnesspubkeyhash":70,"./witnessscripthash":73}],55:[function(require,module,exports){
17329module.exports = {
17330 input: require('./input'),
17331 output: require('./output')
8b095871
IC
17332}
17333
9987f0c1
IC
17334},{"./input":56,"./output":57}],56:[function(require,module,exports){
17335// OP_0 [signatures ...]
8b095871 17336
9987f0c1
IC
17337var Buffer = require('safe-buffer').Buffer
17338var bscript = require('../../script')
17339var typeforce = require('typeforce')
17340var OPS = require('bitcoin-ops')
8b095871 17341
9987f0c1
IC
17342function partialSignature (value) {
17343 return value === OPS.OP_0 || bscript.isCanonicalSignature(value)
17344}
8b095871 17345
9987f0c1
IC
17346function check (script, allowIncomplete) {
17347 var chunks = bscript.decompile(script)
17348 if (chunks.length < 2) return false
17349 if (chunks[0] !== OPS.OP_0) return false
8b095871 17350
9987f0c1
IC
17351 if (allowIncomplete) {
17352 return chunks.slice(1).every(partialSignature)
17353 }
8b095871 17354
9987f0c1 17355 return chunks.slice(1).every(bscript.isCanonicalSignature)
8b095871 17356}
9987f0c1 17357check.toJSON = function () { return 'multisig input' }
8b095871 17358
9987f0c1 17359var EMPTY_BUFFER = Buffer.allocUnsafe(0)
8b095871 17360
9987f0c1
IC
17361function encodeStack (signatures, scriptPubKey) {
17362 typeforce([partialSignature], signatures)
8b095871 17363
9987f0c1
IC
17364 if (scriptPubKey) {
17365 var scriptData = bscript.multisig.output.decode(scriptPubKey)
17366
17367 if (signatures.length < scriptData.m) {
17368 throw new TypeError('Not enough signatures provided')
17369 }
8b095871 17370
9987f0c1
IC
17371 if (signatures.length > scriptData.pubKeys.length) {
17372 throw new TypeError('Too many signatures provided')
17373 }
17374 }
17375
17376 return [].concat(EMPTY_BUFFER, signatures)
8b095871
IC
17377}
17378
9987f0c1
IC
17379function encode (signatures, scriptPubKey) {
17380 return bscript.compile(encodeStack(signatures, scriptPubKey))
8b095871
IC
17381}
17382
9987f0c1
IC
17383function decodeStack (stack, allowIncomplete) {
17384 typeforce(check, stack, allowIncomplete)
17385 return stack.slice(1)
8b095871
IC
17386}
17387
9987f0c1
IC
17388function decode (buffer, allowIncomplete) {
17389 var stack = bscript.decompile(buffer)
17390 return decodeStack(stack, allowIncomplete)
17391}
8b095871 17392
9987f0c1
IC
17393module.exports = {
17394 check: check,
17395 decode: decode,
17396 decodeStack: decodeStack,
17397 encode: encode,
17398 encodeStack: encodeStack
17399}
8b095871 17400
9987f0c1
IC
17401},{"../../script":52,"bitcoin-ops":40,"safe-buffer":98,"typeforce":109}],57:[function(require,module,exports){
17402// m [pubKeys ...] n OP_CHECKMULTISIG
8b095871 17403
9987f0c1
IC
17404var bscript = require('../../script')
17405var types = require('../../types')
17406var typeforce = require('typeforce')
17407var OPS = require('bitcoin-ops')
17408var OP_INT_BASE = OPS.OP_RESERVED // OP_1 - 1
17409
17410function check (script, allowIncomplete) {
17411 var chunks = bscript.decompile(script)
17412
17413 if (chunks.length < 4) return false
17414 if (chunks[chunks.length - 1] !== OPS.OP_CHECKMULTISIG) return false
17415 if (!types.Number(chunks[0])) return false
17416 if (!types.Number(chunks[chunks.length - 2])) return false
17417 var m = chunks[0] - OP_INT_BASE
17418 var n = chunks[chunks.length - 2] - OP_INT_BASE
17419
17420 if (m <= 0) return false
17421 if (n > 16) return false
17422 if (m > n) return false
17423 if (n !== chunks.length - 3) return false
17424 if (allowIncomplete) return true
17425
17426 var keys = chunks.slice(1, -2)
17427 return keys.every(bscript.isCanonicalPubKey)
17428}
17429check.toJSON = function () { return 'multi-sig output' }
17430
17431function encode (m, pubKeys) {
17432 typeforce({
17433 m: types.Number,
17434 pubKeys: [bscript.isCanonicalPubKey]
17435 }, {
17436 m: m,
17437 pubKeys: pubKeys
17438 })
8b095871 17439
9987f0c1
IC
17440 var n = pubKeys.length
17441 if (n < m) throw new TypeError('Not enough pubKeys provided')
8b095871 17442
9987f0c1
IC
17443 return bscript.compile([].concat(
17444 OP_INT_BASE + m,
17445 pubKeys,
17446 OP_INT_BASE + n,
17447 OPS.OP_CHECKMULTISIG
17448 ))
17449}
8b095871 17450
9987f0c1
IC
17451function decode (buffer, allowIncomplete) {
17452 var chunks = bscript.decompile(buffer)
17453 typeforce(check, chunks, allowIncomplete)
8b095871 17454
9987f0c1
IC
17455 return {
17456 m: chunks[0] - OP_INT_BASE,
17457 pubKeys: chunks.slice(1, -2)
8b095871 17458 }
9987f0c1 17459}
8b095871 17460
9987f0c1
IC
17461module.exports = {
17462 check: check,
17463 decode: decode,
17464 encode: encode
17465}
8b095871 17466
9987f0c1
IC
17467},{"../../script":52,"../../types":78,"bitcoin-ops":40,"typeforce":109}],58:[function(require,module,exports){
17468// OP_RETURN {data}
8b095871 17469
9987f0c1
IC
17470var bscript = require('../script')
17471var types = require('../types')
17472var typeforce = require('typeforce')
17473var OPS = require('bitcoin-ops')
8b095871 17474
9987f0c1
IC
17475function check (script) {
17476 var buffer = bscript.compile(script)
8b095871 17477
9987f0c1
IC
17478 return buffer.length > 1 &&
17479 buffer[0] === OPS.OP_RETURN
17480}
17481check.toJSON = function () { return 'null data output' }
8b095871 17482
9987f0c1
IC
17483function encode (data) {
17484 typeforce(types.Buffer, data)
8b095871 17485
9987f0c1
IC
17486 return bscript.compile([OPS.OP_RETURN, data])
17487}
8b095871 17488
9987f0c1
IC
17489function decode (buffer) {
17490 typeforce(check, buffer)
17491
17492 return buffer.slice(2)
17493}
8b095871 17494
9987f0c1
IC
17495module.exports = {
17496 output: {
17497 check: check,
17498 decode: decode,
17499 encode: encode
8b095871 17500 }
9987f0c1 17501}
8b095871 17502
9987f0c1
IC
17503},{"../script":52,"../types":78,"bitcoin-ops":40,"typeforce":109}],59:[function(require,module,exports){
17504arguments[4][55][0].apply(exports,arguments)
17505},{"./input":60,"./output":61,"dup":55}],60:[function(require,module,exports){
17506// {signature}
8b095871 17507
9987f0c1
IC
17508var bscript = require('../../script')
17509var types = require('../../types')
17510var typeforce = require('typeforce')
8b095871 17511
9987f0c1
IC
17512function check (script) {
17513 var chunks = bscript.decompile(script)
8b095871 17514
9987f0c1
IC
17515 return chunks.length === 1 &&
17516 bscript.isCanonicalSignature(chunks[0])
17517}
17518check.toJSON = function () { return 'pubKey input' }
8b095871 17519
9987f0c1
IC
17520function encodeStack (signature) {
17521 typeforce(types.Buffer, signature)
17522 return [signature]
8b095871
IC
17523}
17524
9987f0c1
IC
17525function encode (signature) {
17526 return bscript.compile(encodeStack(signature))
17527}
8b095871 17528
9987f0c1
IC
17529function decodeStack (stack) {
17530 typeforce(check, stack)
17531 return stack[0]
17532}
8b095871 17533
9987f0c1
IC
17534function decode (buffer) {
17535 var stack = bscript.decompile(buffer)
17536 return decodeStack(stack)
17537}
8b095871 17538
9987f0c1
IC
17539module.exports = {
17540 check: check,
17541 decode: decode,
17542 decodeStack: decodeStack,
17543 encode: encode,
17544 encodeStack: encodeStack
8b095871
IC
17545}
17546
9987f0c1
IC
17547},{"../../script":52,"../../types":78,"typeforce":109}],61:[function(require,module,exports){
17548// {pubKey} OP_CHECKSIG
8b095871 17549
9987f0c1
IC
17550var bscript = require('../../script')
17551var typeforce = require('typeforce')
17552var OPS = require('bitcoin-ops')
8b095871 17553
9987f0c1
IC
17554function check (script) {
17555 var chunks = bscript.decompile(script)
8b095871 17556
9987f0c1
IC
17557 return chunks.length === 2 &&
17558 bscript.isCanonicalPubKey(chunks[0]) &&
17559 chunks[1] === OPS.OP_CHECKSIG
17560}
17561check.toJSON = function () { return 'pubKey output' }
8b095871 17562
9987f0c1
IC
17563function encode (pubKey) {
17564 typeforce(bscript.isCanonicalPubKey, pubKey)
8b095871 17565
9987f0c1
IC
17566 return bscript.compile([pubKey, OPS.OP_CHECKSIG])
17567}
8b095871 17568
9987f0c1
IC
17569function decode (buffer) {
17570 var chunks = bscript.decompile(buffer)
17571 typeforce(check, chunks)
8b095871 17572
9987f0c1
IC
17573 return chunks[0]
17574}
8b095871 17575
9987f0c1
IC
17576module.exports = {
17577 check: check,
17578 decode: decode,
17579 encode: encode
17580}
8b095871 17581
9987f0c1
IC
17582},{"../../script":52,"bitcoin-ops":40,"typeforce":109}],62:[function(require,module,exports){
17583arguments[4][55][0].apply(exports,arguments)
17584},{"./input":63,"./output":64,"dup":55}],63:[function(require,module,exports){
17585// {signature} {pubKey}
8b095871 17586
9987f0c1
IC
17587var bscript = require('../../script')
17588var types = require('../../types')
17589var typeforce = require('typeforce')
8b095871 17590
9987f0c1
IC
17591function check (script) {
17592 var chunks = bscript.decompile(script)
8b095871 17593
9987f0c1
IC
17594 return chunks.length === 2 &&
17595 bscript.isCanonicalSignature(chunks[0]) &&
17596 bscript.isCanonicalPubKey(chunks[1])
8b095871 17597}
9987f0c1 17598check.toJSON = function () { return 'pubKeyHash input' }
8b095871 17599
9987f0c1
IC
17600function encodeStack (signature, pubKey) {
17601 typeforce({
17602 signature: types.Buffer, pubKey: types.Buffer
17603 }, {
17604 signature: signature, pubKey: pubKey
17605 })
8b095871 17606
9987f0c1 17607 return [signature, pubKey]
8b095871
IC
17608}
17609
9987f0c1
IC
17610function encode (signature, pubKey) {
17611 return bscript.compile(encodeStack(signature, pubKey))
8b095871
IC
17612}
17613
9987f0c1
IC
17614function decodeStack (stack) {
17615 typeforce(check, stack)
8b095871 17616
9987f0c1
IC
17617 return {
17618 signature: stack[0],
17619 pubKey: stack[1]
17620 }
8b095871
IC
17621}
17622
9987f0c1
IC
17623function decode (buffer) {
17624 var stack = bscript.decompile(buffer)
17625 return decodeStack(stack)
8b095871
IC
17626}
17627
9987f0c1
IC
17628module.exports = {
17629 check: check,
17630 decode: decode,
17631 decodeStack: decodeStack,
17632 encode: encode,
17633 encodeStack: encodeStack
8b095871
IC
17634}
17635
9987f0c1
IC
17636},{"../../script":52,"../../types":78,"typeforce":109}],64:[function(require,module,exports){
17637// OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
8b095871 17638
9987f0c1
IC
17639var bscript = require('../../script')
17640var types = require('../../types')
17641var typeforce = require('typeforce')
17642var OPS = require('bitcoin-ops')
8b095871 17643
9987f0c1
IC
17644function check (script) {
17645 var buffer = bscript.compile(script)
8b095871 17646
9987f0c1
IC
17647 return buffer.length === 25 &&
17648 buffer[0] === OPS.OP_DUP &&
17649 buffer[1] === OPS.OP_HASH160 &&
17650 buffer[2] === 0x14 &&
17651 buffer[23] === OPS.OP_EQUALVERIFY &&
17652 buffer[24] === OPS.OP_CHECKSIG
8b095871 17653}
9987f0c1 17654check.toJSON = function () { return 'pubKeyHash output' }
8b095871 17655
9987f0c1
IC
17656function encode (pubKeyHash) {
17657 typeforce(types.Hash160bit, pubKeyHash)
8b095871 17658
9987f0c1
IC
17659 return bscript.compile([
17660 OPS.OP_DUP,
17661 OPS.OP_HASH160,
17662 pubKeyHash,
17663 OPS.OP_EQUALVERIFY,
17664 OPS.OP_CHECKSIG
17665 ])
8b095871
IC
17666}
17667
9987f0c1
IC
17668function decode (buffer) {
17669 typeforce(check, buffer)
8b095871 17670
9987f0c1 17671 return buffer.slice(3, 23)
8b095871
IC
17672}
17673
9987f0c1
IC
17674module.exports = {
17675 check: check,
17676 decode: decode,
17677 encode: encode
8b095871
IC
17678}
17679
9987f0c1
IC
17680},{"../../script":52,"../../types":78,"bitcoin-ops":40,"typeforce":109}],65:[function(require,module,exports){
17681arguments[4][55][0].apply(exports,arguments)
17682},{"./input":66,"./output":67,"dup":55}],66:[function(require,module,exports){
17683// <scriptSig> {serialized scriptPubKey script}
8b095871 17684
9987f0c1
IC
17685var Buffer = require('safe-buffer').Buffer
17686var bscript = require('../../script')
17687var typeforce = require('typeforce')
8b095871 17688
9987f0c1
IC
17689function check (script, allowIncomplete) {
17690 var chunks = bscript.decompile(script)
17691 if (chunks.length < 1) return false
8b095871 17692
9987f0c1
IC
17693 var lastChunk = chunks[chunks.length - 1]
17694 if (!Buffer.isBuffer(lastChunk)) return false
8b095871 17695
9987f0c1
IC
17696 var scriptSigChunks = bscript.decompile(bscript.compile(chunks.slice(0, -1)))
17697 var redeemScriptChunks = bscript.decompile(lastChunk)
8b095871 17698
9987f0c1
IC
17699 // is redeemScript a valid script?
17700 if (redeemScriptChunks.length === 0) return false
17701
17702 // is redeemScriptSig push only?
17703 if (!bscript.isPushOnly(scriptSigChunks)) return false
17704
17705 var inputType = bscript.classifyInput(scriptSigChunks, allowIncomplete)
17706 var outputType = bscript.classifyOutput(redeemScriptChunks)
17707 if (chunks.length === 1) {
17708 return outputType === bscript.types.P2WSH || outputType === bscript.types.P2WPKH
17709 }
17710 return inputType === outputType
8b095871 17711}
9987f0c1 17712check.toJSON = function () { return 'scriptHash input' }
8b095871 17713
9987f0c1
IC
17714function encodeStack (redeemScriptStack, redeemScript) {
17715 var serializedScriptPubKey = bscript.compile(redeemScript)
8b095871 17716
9987f0c1
IC
17717 return [].concat(redeemScriptStack, serializedScriptPubKey)
17718}
8b095871 17719
9987f0c1
IC
17720function encode (redeemScriptSig, redeemScript) {
17721 var redeemScriptStack = bscript.decompile(redeemScriptSig)
8b095871 17722
9987f0c1
IC
17723 return bscript.compile(encodeStack(redeemScriptStack, redeemScript))
17724}
8b095871 17725
9987f0c1
IC
17726function decodeStack (stack) {
17727 typeforce(check, stack)
17728
17729 return {
17730 redeemScriptStack: stack.slice(0, -1),
17731 redeemScript: stack[stack.length - 1]
17732 }
8b095871
IC
17733}
17734
9987f0c1
IC
17735function decode (buffer) {
17736 var stack = bscript.decompile(buffer)
17737 var result = decodeStack(stack)
17738 result.redeemScriptSig = bscript.compile(result.redeemScriptStack)
17739 delete result.redeemScriptStack
17740 return result
17741}
8b095871 17742
9987f0c1
IC
17743module.exports = {
17744 check: check,
17745 decode: decode,
17746 decodeStack: decodeStack,
17747 encode: encode,
17748 encodeStack: encodeStack
17749}
8b095871 17750
9987f0c1
IC
17751},{"../../script":52,"safe-buffer":98,"typeforce":109}],67:[function(require,module,exports){
17752// OP_HASH160 {scriptHash} OP_EQUAL
8b095871 17753
9987f0c1
IC
17754var bscript = require('../../script')
17755var types = require('../../types')
17756var typeforce = require('typeforce')
17757var OPS = require('bitcoin-ops')
8b095871 17758
9987f0c1
IC
17759function check (script) {
17760 var buffer = bscript.compile(script)
8b095871 17761
9987f0c1
IC
17762 return buffer.length === 23 &&
17763 buffer[0] === OPS.OP_HASH160 &&
17764 buffer[1] === 0x14 &&
17765 buffer[22] === OPS.OP_EQUAL
8b095871 17766}
9987f0c1 17767check.toJSON = function () { return 'scriptHash output' }
8b095871 17768
9987f0c1
IC
17769function encode (scriptHash) {
17770 typeforce(types.Hash160bit, scriptHash)
8b095871 17771
9987f0c1
IC
17772 return bscript.compile([OPS.OP_HASH160, scriptHash, OPS.OP_EQUAL])
17773}
8b095871 17774
9987f0c1
IC
17775function decode (buffer) {
17776 typeforce(check, buffer)
8b095871 17777
9987f0c1
IC
17778 return buffer.slice(2, 22)
17779}
8b095871 17780
9987f0c1
IC
17781module.exports = {
17782 check: check,
17783 decode: decode,
17784 encode: encode
8b095871
IC
17785}
17786
9987f0c1
IC
17787},{"../../script":52,"../../types":78,"bitcoin-ops":40,"typeforce":109}],68:[function(require,module,exports){
17788module.exports = {
17789 output: require('./output')
17790}
8b095871 17791
9987f0c1
IC
17792},{"./output":69}],69:[function(require,module,exports){
17793// OP_RETURN {aa21a9ed} {commitment}
8b095871 17794
9987f0c1
IC
17795var Buffer = require('safe-buffer').Buffer
17796var bscript = require('../../script')
17797var types = require('../../types')
17798var typeforce = require('typeforce')
17799var OPS = require('bitcoin-ops')
8b095871 17800
9987f0c1 17801var HEADER = Buffer.from('aa21a9ed', 'hex')
8b095871 17802
9987f0c1
IC
17803function check (script) {
17804 var buffer = bscript.compile(script)
17805
17806 return buffer.length > 37 &&
17807 buffer[0] === OPS.OP_RETURN &&
17808 buffer[1] === 0x24 &&
17809 buffer.slice(2, 6).equals(HEADER)
8b095871
IC
17810}
17811
9987f0c1 17812check.toJSON = function () { return 'Witness commitment output' }
8b095871 17813
9987f0c1
IC
17814function encode (commitment) {
17815 typeforce(types.Hash256bit, commitment)
8b095871 17816
9987f0c1
IC
17817 var buffer = Buffer.allocUnsafe(36)
17818 HEADER.copy(buffer, 0)
17819 commitment.copy(buffer, 4)
8b095871 17820
9987f0c1
IC
17821 return bscript.compile([OPS.OP_RETURN, buffer])
17822}
8b095871 17823
9987f0c1
IC
17824function decode (buffer) {
17825 typeforce(check, buffer)
8b095871 17826
9987f0c1
IC
17827 return bscript.decompile(buffer)[1].slice(4, 36)
17828}
8b095871 17829
9987f0c1
IC
17830module.exports = {
17831 check: check,
17832 decode: decode,
17833 encode: encode
17834}
8b095871 17835
9987f0c1
IC
17836},{"../../script":52,"../../types":78,"bitcoin-ops":40,"safe-buffer":98,"typeforce":109}],70:[function(require,module,exports){
17837arguments[4][55][0].apply(exports,arguments)
17838},{"./input":71,"./output":72,"dup":55}],71:[function(require,module,exports){
17839// {signature} {pubKey}
8b095871 17840
9987f0c1 17841var pkh = require('../pubkeyhash/input')
8b095871 17842
9987f0c1
IC
17843module.exports = {
17844 check: pkh.check,
17845 decodeStack: pkh.decodeStack,
17846 encodeStack: pkh.encodeStack
8b095871
IC
17847}
17848
9987f0c1
IC
17849},{"../pubkeyhash/input":63}],72:[function(require,module,exports){
17850// OP_0 {pubKeyHash}
8b095871 17851
9987f0c1
IC
17852var bscript = require('../../script')
17853var types = require('../../types')
17854var typeforce = require('typeforce')
17855var OPS = require('bitcoin-ops')
8b095871 17856
9987f0c1
IC
17857function check (script) {
17858 var buffer = bscript.compile(script)
8b095871 17859
9987f0c1
IC
17860 return buffer.length === 22 &&
17861 buffer[0] === OPS.OP_0 &&
17862 buffer[1] === 0x14
17863}
17864check.toJSON = function () { return 'Witness pubKeyHash output' }
8b095871 17865
9987f0c1
IC
17866function encode (pubKeyHash) {
17867 typeforce(types.Hash160bit, pubKeyHash)
8b095871 17868
9987f0c1
IC
17869 return bscript.compile([OPS.OP_0, pubKeyHash])
17870}
8b095871 17871
9987f0c1
IC
17872function decode (buffer) {
17873 typeforce(check, buffer)
17874
17875 return buffer.slice(2)
8b095871
IC
17876}
17877
9987f0c1
IC
17878module.exports = {
17879 check: check,
17880 decode: decode,
17881 encode: encode
17882}
8b095871 17883
9987f0c1
IC
17884},{"../../script":52,"../../types":78,"bitcoin-ops":40,"typeforce":109}],73:[function(require,module,exports){
17885arguments[4][55][0].apply(exports,arguments)
17886},{"./input":74,"./output":75,"dup":55}],74:[function(require,module,exports){
17887// {signature} {pubKey}
8b095871 17888
9987f0c1 17889var p2sh = require('../scripthash/input')
8b095871 17890
9987f0c1
IC
17891module.exports = {
17892 check: p2sh.check,
17893 decodeStack: p2sh.decodeStack,
17894 encodeStack: p2sh.encodeStack
17895}
8b095871 17896
9987f0c1
IC
17897},{"../scripthash/input":66}],75:[function(require,module,exports){
17898// OP_0 {scriptHash}
8b095871 17899
9987f0c1
IC
17900var bscript = require('../../script')
17901var types = require('../../types')
17902var typeforce = require('typeforce')
17903var OPS = require('bitcoin-ops')
8b095871 17904
9987f0c1
IC
17905function check (script) {
17906 var buffer = bscript.compile(script)
17907
17908 return buffer.length === 34 &&
17909 buffer[0] === OPS.OP_0 &&
17910 buffer[1] === 0x20
8b095871 17911}
9987f0c1 17912check.toJSON = function () { return 'Witness scriptHash output' }
8b095871 17913
9987f0c1
IC
17914function encode (scriptHash) {
17915 typeforce(types.Hash256bit, scriptHash)
8b095871 17916
9987f0c1
IC
17917 return bscript.compile([OPS.OP_0, scriptHash])
17918}
8b095871 17919
9987f0c1
IC
17920function decode (buffer) {
17921 typeforce(check, buffer)
8b095871 17922
9987f0c1
IC
17923 return buffer.slice(2)
17924}
8b095871 17925
9987f0c1
IC
17926module.exports = {
17927 check: check,
17928 decode: decode,
17929 encode: encode
17930}
8b095871 17931
9987f0c1
IC
17932},{"../../script":52,"../../types":78,"bitcoin-ops":40,"typeforce":109}],76:[function(require,module,exports){
17933var Buffer = require('safe-buffer').Buffer
17934var bcrypto = require('./crypto')
17935var bscript = require('./script')
17936var bufferutils = require('./bufferutils')
17937var opcodes = require('bitcoin-ops')
17938var typeforce = require('typeforce')
17939var types = require('./types')
17940var varuint = require('varuint-bitcoin')
8b095871 17941
9987f0c1
IC
17942function varSliceSize (someScript) {
17943 var length = someScript.length
8b095871 17944
9987f0c1
IC
17945 return varuint.encodingLength(length) + length
17946}
8b095871 17947
9987f0c1
IC
17948function vectorSize (someVector) {
17949 var length = someVector.length
17950
17951 return varuint.encodingLength(length) + someVector.reduce(function (sum, witness) {
17952 return sum + varSliceSize(witness)
17953 }, 0)
8b095871
IC
17954}
17955
9987f0c1
IC
17956function Transaction () {
17957 this.version = 1
17958 this.locktime = 0
17959 this.ins = []
17960 this.outs = []
17961}
8b095871 17962
9987f0c1
IC
17963Transaction.DEFAULT_SEQUENCE = 0xffffffff
17964Transaction.SIGHASH_ALL = 0x01
17965Transaction.SIGHASH_NONE = 0x02
17966Transaction.SIGHASH_SINGLE = 0x03
17967Transaction.SIGHASH_ANYONECANPAY = 0x80
17968Transaction.ADVANCED_TRANSACTION_MARKER = 0x00
17969Transaction.ADVANCED_TRANSACTION_FLAG = 0x01
8b095871 17970
9987f0c1
IC
17971var EMPTY_SCRIPT = Buffer.allocUnsafe(0)
17972var EMPTY_WITNESS = []
17973var ZERO = Buffer.from('0000000000000000000000000000000000000000000000000000000000000000', 'hex')
17974var ONE = Buffer.from('0000000000000000000000000000000000000000000000000000000000000001', 'hex')
17975var VALUE_UINT64_MAX = Buffer.from('ffffffffffffffff', 'hex')
17976var BLANK_OUTPUT = {
17977 script: EMPTY_SCRIPT,
17978 valueBuffer: VALUE_UINT64_MAX
17979}
8b095871 17980
9987f0c1
IC
17981Transaction.fromBuffer = function (buffer, __noStrict) {
17982 var offset = 0
17983 function readSlice (n) {
17984 offset += n
17985 return buffer.slice(offset - n, offset)
17986 }
8b095871 17987
9987f0c1
IC
17988 function readUInt32 () {
17989 var i = buffer.readUInt32LE(offset)
17990 offset += 4
17991 return i
17992 }
8b095871 17993
9987f0c1
IC
17994 function readInt32 () {
17995 var i = buffer.readInt32LE(offset)
17996 offset += 4
17997 return i
17998 }
8b095871 17999
9987f0c1
IC
18000 function readUInt64 () {
18001 var i = bufferutils.readUInt64LE(buffer, offset)
18002 offset += 8
18003 return i
8b095871
IC
18004 }
18005
9987f0c1
IC
18006 function readVarInt () {
18007 var vi = varuint.decode(buffer, offset)
18008 offset += varuint.decode.bytes
18009 return vi
18010 }
8b095871 18011
9987f0c1
IC
18012 function readVarSlice () {
18013 return readSlice(readVarInt())
18014 }
8b095871 18015
9987f0c1
IC
18016 function readVector () {
18017 var count = readVarInt()
18018 var vector = []
18019 for (var i = 0; i < count; i++) vector.push(readVarSlice())
18020 return vector
18021 }
8b095871 18022
9987f0c1
IC
18023 var tx = new Transaction()
18024 tx.version = readInt32()
8b095871 18025
9987f0c1
IC
18026 var marker = buffer.readUInt8(offset)
18027 var flag = buffer.readUInt8(offset + 1)
8b095871 18028
9987f0c1
IC
18029 var hasWitnesses = false
18030 if (marker === Transaction.ADVANCED_TRANSACTION_MARKER &&
18031 flag === Transaction.ADVANCED_TRANSACTION_FLAG) {
18032 offset += 2
18033 hasWitnesses = true
18034 }
8b095871 18035
9987f0c1
IC
18036 var vinLen = readVarInt()
18037 for (var i = 0; i < vinLen; ++i) {
18038 tx.ins.push({
18039 hash: readSlice(32),
18040 index: readUInt32(),
18041 script: readVarSlice(),
18042 sequence: readUInt32(),
18043 witness: EMPTY_WITNESS
18044 })
18045 }
8b095871 18046
9987f0c1
IC
18047 var voutLen = readVarInt()
18048 for (i = 0; i < voutLen; ++i) {
18049 tx.outs.push({
18050 value: readUInt64(),
18051 script: readVarSlice()
18052 })
8b095871
IC
18053 }
18054
9987f0c1
IC
18055 if (hasWitnesses) {
18056 for (i = 0; i < vinLen; ++i) {
18057 tx.ins[i].witness = readVector()
18058 }
8b095871 18059
9987f0c1
IC
18060 // was this pointless?
18061 if (!tx.hasWitnesses()) throw new Error('Transaction has superfluous witness data')
18062 }
8b095871 18063
9987f0c1 18064 tx.locktime = readUInt32()
8b095871 18065
9987f0c1
IC
18066 if (__noStrict) return tx
18067 if (offset !== buffer.length) throw new Error('Transaction has unexpected data')
8b095871 18068
9987f0c1
IC
18069 return tx
18070}
8b095871 18071
9987f0c1
IC
18072Transaction.fromHex = function (hex) {
18073 return Transaction.fromBuffer(Buffer.from(hex, 'hex'))
8b095871 18074}
8b095871 18075
9987f0c1
IC
18076Transaction.isCoinbaseHash = function (buffer) {
18077 typeforce(types.Hash256bit, buffer)
18078 for (var i = 0; i < 32; ++i) {
18079 if (buffer[i] !== 0) return false
8b095871 18080 }
9987f0c1 18081 return true
8b095871 18082}
9987f0c1
IC
18083
18084Transaction.prototype.isCoinbase = function () {
18085 return this.ins.length === 1 && Transaction.isCoinbaseHash(this.ins[0].hash)
8b095871
IC
18086}
18087
9987f0c1
IC
18088Transaction.prototype.addInput = function (hash, index, sequence, scriptSig) {
18089 typeforce(types.tuple(
18090 types.Hash256bit,
18091 types.UInt32,
18092 types.maybe(types.UInt32),
18093 types.maybe(types.Buffer)
18094 ), arguments)
8b095871 18095
9987f0c1
IC
18096 if (types.Null(sequence)) {
18097 sequence = Transaction.DEFAULT_SEQUENCE
18098 }
18099
18100 // Add the input and return the input's index
18101 return (this.ins.push({
18102 hash: hash,
18103 index: index,
18104 script: scriptSig || EMPTY_SCRIPT,
18105 sequence: sequence,
18106 witness: EMPTY_WITNESS
18107 }) - 1)
8b095871
IC
18108}
18109
9987f0c1
IC
18110Transaction.prototype.addOutput = function (scriptPubKey, value) {
18111 typeforce(types.tuple(types.Buffer, types.Satoshi), arguments)
8b095871 18112
9987f0c1
IC
18113 // Add the output and return the output's index
18114 return (this.outs.push({
18115 script: scriptPubKey,
18116 value: value
18117 }) - 1)
8b095871
IC
18118}
18119
9987f0c1
IC
18120Transaction.prototype.hasWitnesses = function () {
18121 return this.ins.some(function (x) {
18122 return x.witness.length !== 0
18123 })
18124}
8b095871 18125
9987f0c1
IC
18126Transaction.prototype.weight = function () {
18127 var base = this.__byteLength(false)
18128 var total = this.__byteLength(true)
18129 return base * 3 + total
8b095871
IC
18130}
18131
9987f0c1
IC
18132Transaction.prototype.virtualSize = function () {
18133 return Math.ceil(this.weight() / 4)
18134}
8b095871 18135
9987f0c1
IC
18136Transaction.prototype.byteLength = function () {
18137 return this.__byteLength(true)
8b095871
IC
18138}
18139
9987f0c1
IC
18140Transaction.prototype.__byteLength = function (__allowWitness) {
18141 var hasWitnesses = __allowWitness && this.hasWitnesses()
18142
18143 return (
18144 (hasWitnesses ? 10 : 8) +
18145 varuint.encodingLength(this.ins.length) +
18146 varuint.encodingLength(this.outs.length) +
18147 this.ins.reduce(function (sum, input) { return sum + 40 + varSliceSize(input.script) }, 0) +
18148 this.outs.reduce(function (sum, output) { return sum + 8 + varSliceSize(output.script) }, 0) +
18149 (hasWitnesses ? this.ins.reduce(function (sum, input) { return sum + vectorSize(input.witness) }, 0) : 0)
18150 )
8b095871
IC
18151}
18152
9987f0c1
IC
18153Transaction.prototype.clone = function () {
18154 var newTx = new Transaction()
18155 newTx.version = this.version
18156 newTx.locktime = this.locktime
18157
18158 newTx.ins = this.ins.map(function (txIn) {
18159 return {
18160 hash: txIn.hash,
18161 index: txIn.index,
18162 script: txIn.script,
18163 sequence: txIn.sequence,
18164 witness: txIn.witness
8b095871 18165 }
9987f0c1 18166 })
8b095871 18167
9987f0c1
IC
18168 newTx.outs = this.outs.map(function (txOut) {
18169 return {
18170 script: txOut.script,
18171 value: txOut.value
18172 }
18173 })
8b095871 18174
9987f0c1
IC
18175 return newTx
18176}
18177
18178/**
18179 * Hash transaction for signing a specific input.
18180 *
18181 * Bitcoin uses a different hash for each signed transaction input.
18182 * This method copies the transaction, makes the necessary changes based on the
18183 * hashType, and then hashes the result.
18184 * This hash can then be used to sign the provided transaction input.
18185 */
18186Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
18187 typeforce(types.tuple(types.UInt32, types.Buffer, /* types.UInt8 */ types.Number), arguments)
18188
18189 // https://github.com/bitcoin/bitcoin/blob/master/src/test/sighash_tests.cpp#L29
18190 if (inIndex >= this.ins.length) return ONE
18191
18192 // ignore OP_CODESEPARATOR
18193 var ourScript = bscript.compile(bscript.decompile(prevOutScript).filter(function (x) {
18194 return x !== opcodes.OP_CODESEPARATOR
18195 }))
18196
18197 var txTmp = this.clone()
18198
18199 // SIGHASH_NONE: ignore all outputs? (wildcard payee)
18200 if ((hashType & 0x1f) === Transaction.SIGHASH_NONE) {
18201 txTmp.outs = []
18202
18203 // ignore sequence numbers (except at inIndex)
18204 txTmp.ins.forEach(function (input, i) {
18205 if (i === inIndex) return
18206
18207 input.sequence = 0
18208 })
18209
18210 // SIGHASH_SINGLE: ignore all outputs, except at the same index?
18211 } else if ((hashType & 0x1f) === Transaction.SIGHASH_SINGLE) {
18212 // https://github.com/bitcoin/bitcoin/blob/master/src/test/sighash_tests.cpp#L60
18213 if (inIndex >= this.outs.length) return ONE
18214
18215 // truncate outputs after
18216 txTmp.outs.length = inIndex + 1
18217
18218 // "blank" outputs before
18219 for (var i = 0; i < inIndex; i++) {
18220 txTmp.outs[i] = BLANK_OUTPUT
8b095871
IC
18221 }
18222
9987f0c1
IC
18223 // ignore sequence numbers (except at inIndex)
18224 txTmp.ins.forEach(function (input, y) {
18225 if (y === inIndex) return
8b095871 18226
9987f0c1
IC
18227 input.sequence = 0
18228 })
8b095871 18229 }
8b095871 18230
9987f0c1
IC
18231 // SIGHASH_ANYONECANPAY: ignore inputs entirely?
18232 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
18233 txTmp.ins = [txTmp.ins[inIndex]]
18234 txTmp.ins[0].script = ourScript
18235
18236 // SIGHASH_ALL: only ignore input scripts
18237 } else {
18238 // "blank" others input scripts
18239 txTmp.ins.forEach(function (input) { input.script = EMPTY_SCRIPT })
18240 txTmp.ins[inIndex].script = ourScript
18241 }
18242
18243 // serialize and hash
18244 var buffer = Buffer.allocUnsafe(txTmp.__byteLength(false) + 4)
18245 buffer.writeInt32LE(hashType, buffer.length - 4)
18246 txTmp.__toBuffer(buffer, 0, false)
18247
18248 return bcrypto.hash256(buffer)
8b095871
IC
18249}
18250
9987f0c1
IC
18251Transaction.prototype.hashForWitnessV0 = function (inIndex, prevOutScript, value, hashType) {
18252 typeforce(types.tuple(types.UInt32, types.Buffer, types.Satoshi, types.UInt32), arguments)
18253
18254 var tbuffer, toffset
18255 function writeSlice (slice) { toffset += slice.copy(tbuffer, toffset) }
18256 function writeUInt32 (i) { toffset = tbuffer.writeUInt32LE(i, toffset) }
18257 function writeUInt64 (i) { toffset = bufferutils.writeUInt64LE(tbuffer, i, toffset) }
18258 function writeVarInt (i) {
18259 varuint.encode(i, tbuffer, toffset)
18260 toffset += varuint.encode.bytes
18261 }
18262 function writeVarSlice (slice) { writeVarInt(slice.length); writeSlice(slice) }
18263
18264 var hashOutputs = ZERO
18265 var hashPrevouts = ZERO
18266 var hashSequence = ZERO
18267
18268 if (!(hashType & Transaction.SIGHASH_ANYONECANPAY)) {
18269 tbuffer = Buffer.allocUnsafe(36 * this.ins.length)
18270 toffset = 0
18271
18272 this.ins.forEach(function (txIn) {
18273 writeSlice(txIn.hash)
18274 writeUInt32(txIn.index)
18275 })
18276
18277 hashPrevouts = bcrypto.hash256(tbuffer)
18278 }
18279
18280 if (!(hashType & Transaction.SIGHASH_ANYONECANPAY) &&
18281 (hashType & 0x1f) !== Transaction.SIGHASH_SINGLE &&
18282 (hashType & 0x1f) !== Transaction.SIGHASH_NONE) {
18283 tbuffer = Buffer.allocUnsafe(4 * this.ins.length)
18284 toffset = 0
18285
18286 this.ins.forEach(function (txIn) {
18287 writeUInt32(txIn.sequence)
18288 })
18289
18290 hashSequence = bcrypto.hash256(tbuffer)
18291 }
18292
18293 if ((hashType & 0x1f) !== Transaction.SIGHASH_SINGLE &&
18294 (hashType & 0x1f) !== Transaction.SIGHASH_NONE) {
18295 var txOutsSize = this.outs.reduce(function (sum, output) {
18296 return sum + 8 + varSliceSize(output.script)
18297 }, 0)
18298
18299 tbuffer = Buffer.allocUnsafe(txOutsSize)
18300 toffset = 0
18301
18302 this.outs.forEach(function (out) {
18303 writeUInt64(out.value)
18304 writeVarSlice(out.script)
18305 })
18306
18307 hashOutputs = bcrypto.hash256(tbuffer)
18308 } else if ((hashType & 0x1f) === Transaction.SIGHASH_SINGLE && inIndex < this.outs.length) {
18309 var output = this.outs[inIndex]
18310
18311 tbuffer = Buffer.allocUnsafe(8 + varSliceSize(output.script))
18312 toffset = 0
18313 writeUInt64(output.value)
18314 writeVarSlice(output.script)
18315
18316 hashOutputs = bcrypto.hash256(tbuffer)
18317 }
18318
18319 tbuffer = Buffer.allocUnsafe(156 + varSliceSize(prevOutScript))
18320 toffset = 0
18321
18322 var input = this.ins[inIndex]
18323 writeUInt32(this.version)
18324 writeSlice(hashPrevouts)
18325 writeSlice(hashSequence)
18326 writeSlice(input.hash)
18327 writeUInt32(input.index)
18328 writeVarSlice(prevOutScript)
18329 writeUInt64(value)
18330 writeUInt32(input.sequence)
18331 writeSlice(hashOutputs)
18332 writeUInt32(this.locktime)
18333 writeUInt32(hashType)
18334 return bcrypto.hash256(tbuffer)
8b095871
IC
18335}
18336
9987f0c1
IC
18337Transaction.prototype.getHash = function () {
18338 return bcrypto.hash256(this.__toBuffer(undefined, undefined, false))
18339}
8b095871 18340
9987f0c1
IC
18341Transaction.prototype.getId = function () {
18342 // transaction hash's are displayed in reverse order
18343 return this.getHash().reverse().toString('hex')
18344}
8b095871 18345
9987f0c1
IC
18346Transaction.prototype.toBuffer = function (buffer, initialOffset) {
18347 return this.__toBuffer(buffer, initialOffset, true)
18348}
8b095871 18349
9987f0c1
IC
18350Transaction.prototype.__toBuffer = function (buffer, initialOffset, __allowWitness) {
18351 if (!buffer) buffer = Buffer.allocUnsafe(this.__byteLength(__allowWitness))
8b095871 18352
9987f0c1
IC
18353 var offset = initialOffset || 0
18354 function writeSlice (slice) { offset += slice.copy(buffer, offset) }
18355 function writeUInt8 (i) { offset = buffer.writeUInt8(i, offset) }
18356 function writeUInt32 (i) { offset = buffer.writeUInt32LE(i, offset) }
18357 function writeInt32 (i) { offset = buffer.writeInt32LE(i, offset) }
18358 function writeUInt64 (i) { offset = bufferutils.writeUInt64LE(buffer, i, offset) }
18359 function writeVarInt (i) {
18360 varuint.encode(i, buffer, offset)
18361 offset += varuint.encode.bytes
18362 }
18363 function writeVarSlice (slice) { writeVarInt(slice.length); writeSlice(slice) }
18364 function writeVector (vector) { writeVarInt(vector.length); vector.forEach(writeVarSlice) }
8b095871 18365
9987f0c1 18366 writeInt32(this.version)
8b095871 18367
9987f0c1 18368 var hasWitnesses = __allowWitness && this.hasWitnesses()
8b095871 18369
9987f0c1
IC
18370 if (hasWitnesses) {
18371 writeUInt8(Transaction.ADVANCED_TRANSACTION_MARKER)
18372 writeUInt8(Transaction.ADVANCED_TRANSACTION_FLAG)
18373 }
8b095871 18374
9987f0c1 18375 writeVarInt(this.ins.length)
8b095871 18376
9987f0c1
IC
18377 this.ins.forEach(function (txIn) {
18378 writeSlice(txIn.hash)
18379 writeUInt32(txIn.index)
18380 writeVarSlice(txIn.script)
18381 writeUInt32(txIn.sequence)
18382 })
8b095871 18383
9987f0c1
IC
18384 writeVarInt(this.outs.length)
18385 this.outs.forEach(function (txOut) {
18386 if (!txOut.valueBuffer) {
18387 writeUInt64(txOut.value)
18388 } else {
18389 writeSlice(txOut.valueBuffer)
8b095871 18390 }
8b095871 18391
9987f0c1
IC
18392 writeVarSlice(txOut.script)
18393 })
8b095871 18394
9987f0c1
IC
18395 if (hasWitnesses) {
18396 this.ins.forEach(function (input) {
18397 writeVector(input.witness)
18398 })
18399 }
8b095871 18400
9987f0c1 18401 writeUInt32(this.locktime)
8b095871 18402
9987f0c1
IC
18403 // avoid slicing unless necessary
18404 if (initialOffset !== undefined) return buffer.slice(initialOffset, offset)
18405 return buffer
18406}
8b095871 18407
9987f0c1
IC
18408Transaction.prototype.toHex = function () {
18409 return this.toBuffer().toString('hex')
18410}
8b095871 18411
9987f0c1
IC
18412Transaction.prototype.setInputScript = function (index, scriptSig) {
18413 typeforce(types.tuple(types.Number, types.Buffer), arguments)
8b095871 18414
9987f0c1
IC
18415 this.ins[index].script = scriptSig
18416}
8b095871 18417
9987f0c1
IC
18418Transaction.prototype.setWitness = function (index, witness) {
18419 typeforce(types.tuple(types.Number, [types.Buffer]), arguments)
18420
18421 this.ins[index].witness = witness
18422}
18423
18424module.exports = Transaction
18425
18426},{"./bufferutils":44,"./crypto":45,"./script":52,"./types":78,"bitcoin-ops":40,"safe-buffer":98,"typeforce":109,"varuint-bitcoin":111}],77:[function(require,module,exports){
18427var Buffer = require('safe-buffer').Buffer
18428var baddress = require('./address')
18429var bcrypto = require('./crypto')
18430var bscript = require('./script')
18431var networks = require('./networks')
18432var ops = require('bitcoin-ops')
18433var typeforce = require('typeforce')
18434var types = require('./types')
18435var scriptTypes = bscript.types
18436var SIGNABLE = [bscript.types.P2PKH, bscript.types.P2PK, bscript.types.MULTISIG]
18437var P2SH = SIGNABLE.concat([bscript.types.P2WPKH, bscript.types.P2WSH])
18438
18439var ECPair = require('./ecpair')
18440var ECSignature = require('./ecsignature')
18441var Transaction = require('./transaction')
18442
18443function extractChunks (type, chunks, script) {
18444 var pubKeys = []
18445 var signatures = []
18446 switch (type) {
18447 case scriptTypes.P2PKH:
18448 // if (redeemScript) throw new Error('Nonstandard... P2SH(P2PKH)')
18449 pubKeys = chunks.slice(1)
18450 signatures = chunks.slice(0, 1)
18451 break
18452
18453 case scriptTypes.P2PK:
18454 pubKeys[0] = script ? bscript.pubKey.output.decode(script) : undefined
18455 signatures = chunks.slice(0, 1)
18456 break
18457
18458 case scriptTypes.MULTISIG:
18459 if (script) {
18460 var multisig = bscript.multisig.output.decode(script)
18461 pubKeys = multisig.pubKeys
18462 }
18463
18464 signatures = chunks.slice(1).map(function (chunk) {
18465 return chunk.length === 0 ? undefined : chunk
18466 })
18467 break
18468 }
18469
18470 return {
18471 pubKeys: pubKeys,
18472 signatures: signatures
18473 }
18474}
18475function expandInput (scriptSig, witnessStack) {
18476 if (scriptSig.length === 0 && witnessStack.length === 0) return {}
18477
18478 var prevOutScript
18479 var prevOutType
18480 var scriptType
18481 var script
18482 var redeemScript
18483 var witnessScript
18484 var witnessScriptType
18485 var redeemScriptType
18486 var witness = false
18487 var p2wsh = false
18488 var p2sh = false
18489 var witnessProgram
18490 var chunks
18491
18492 var scriptSigChunks = bscript.decompile(scriptSig)
18493 var sigType = bscript.classifyInput(scriptSigChunks, true)
18494 if (sigType === scriptTypes.P2SH) {
18495 p2sh = true
18496 redeemScript = scriptSigChunks[scriptSigChunks.length - 1]
18497 redeemScriptType = bscript.classifyOutput(redeemScript)
18498 prevOutScript = bscript.scriptHash.output.encode(bcrypto.hash160(redeemScript))
18499 prevOutType = scriptTypes.P2SH
18500 script = redeemScript
18501 }
18502
18503 var classifyWitness = bscript.classifyWitness(witnessStack)
18504 if (classifyWitness === scriptTypes.P2WSH) {
18505 witnessScript = witnessStack[witnessStack.length - 1]
18506 witnessScriptType = bscript.classifyOutput(witnessScript)
18507 p2wsh = true
18508 if (scriptSig.length === 0) {
18509 prevOutScript = bscript.witnessScriptHash.output.encode(bcrypto.sha256(witnessScript))
18510 prevOutType = scriptTypes.P2WSH
18511 if (typeof redeemScript !== 'undefined') {
18512 throw new Error('Redeem script given when unnecessary')
18513 }
18514 // bare witness
18515 } else {
18516 if (!redeemScript) {
18517 throw new Error('No redeemScript provided for P2WSH, but scriptSig non-empty')
18518 }
18519 witnessProgram = bscript.witnessScriptHash.output.encode(bcrypto.sha256(witnessScript))
18520 if (!redeemScript.equals(witnessProgram)) {
18521 throw new Error('Redeem script didn\'t match witnessScript')
18522 }
8b095871 18523 }
8b095871 18524
9987f0c1
IC
18525 if (SIGNABLE.indexOf(bscript.classifyOutput(witnessScript)) === -1) {
18526 throw new Error('unsupported witness script')
18527 }
18528 script = witnessScript
18529 scriptType = witnessScriptType
18530 chunks = witnessStack.slice(0, -1)
18531 } else if (classifyWitness === scriptTypes.P2WPKH) {
18532 var key = witnessStack[witnessStack.length - 1]
18533 var keyHash = bcrypto.hash160(key)
18534 if (scriptSig.length === 0) {
18535 prevOutScript = bscript.witnessPubKeyHash.output.encode(keyHash)
18536 prevOutType = scriptTypes.P2WPKH
18537 if (typeof redeemScript !== 'undefined') {
18538 throw new Error('Redeem script given when unnecessary')
18539 }
18540 } else {
18541 if (!redeemScript) {
18542 throw new Error('No redeemScript provided for P2WPKH, but scriptSig wasn\'t empty')
18543 }
18544 witnessProgram = bscript.witnessPubKeyHash.output.encode(keyHash)
18545 if (!redeemScript.equals(witnessProgram)) {
18546 throw new Error('Redeem script did not have the right witness program')
18547 }
18548 }
8b095871 18549
9987f0c1
IC
18550 scriptType = scriptTypes.P2PKH
18551 chunks = witnessStack
18552 } else if (redeemScript) {
18553 if (P2SH.indexOf(redeemScriptType) === -1) {
18554 throw new Error('Bad redeemscript!')
8b095871 18555 }
8b095871 18556
9987f0c1
IC
18557 script = redeemScript
18558 scriptType = redeemScriptType
18559 chunks = scriptSigChunks.slice(0, -1)
18560 } else {
18561 prevOutType = scriptType = bscript.classifyInput(scriptSig)
18562 chunks = scriptSigChunks
8b095871 18563 }
8b095871 18564
9987f0c1 18565 var expanded = extractChunks(scriptType, chunks, script)
8b095871 18566
9987f0c1
IC
18567 var result = {
18568 pubKeys: expanded.pubKeys,
18569 signatures: expanded.signatures,
18570 prevOutScript: prevOutScript,
18571 prevOutType: prevOutType,
18572 signType: scriptType,
18573 signScript: script,
18574 witness: Boolean(witness)
18575 }
8b095871 18576
9987f0c1
IC
18577 if (p2sh) {
18578 result.redeemScript = redeemScript
18579 result.redeemScriptType = redeemScriptType
18580 }
8b095871 18581
9987f0c1
IC
18582 if (p2wsh) {
18583 result.witnessScript = witnessScript
18584 result.witnessScriptType = witnessScriptType
8b095871
IC
18585 }
18586
9987f0c1 18587 return result
8b095871
IC
18588}
18589
9987f0c1
IC
18590// could be done in expandInput, but requires the original Transaction for hashForSignature
18591function fixMultisigOrder (input, transaction, vin) {
18592 if (input.redeemScriptType !== scriptTypes.MULTISIG || !input.redeemScript) return
18593 if (input.pubKeys.length === input.signatures.length) return
8b095871 18594
9987f0c1 18595 var unmatched = input.signatures.concat()
8b095871 18596
9987f0c1
IC
18597 input.signatures = input.pubKeys.map(function (pubKey) {
18598 var keyPair = ECPair.fromPublicKeyBuffer(pubKey)
18599 var match
8b095871 18600
9987f0c1
IC
18601 // check for a signature
18602 unmatched.some(function (signature, i) {
18603 // skip if undefined || OP_0
18604 if (!signature) return false
8b095871 18605
9987f0c1
IC
18606 // TODO: avoid O(n) hashForSignature
18607 var parsed = ECSignature.parseScriptSignature(signature)
18608 var hash = transaction.hashForSignature(vin, input.redeemScript, parsed.hashType)
8b095871 18609
9987f0c1
IC
18610 // skip if signature does not match pubKey
18611 if (!keyPair.verify(hash, parsed.signature)) return false
8b095871 18612
9987f0c1
IC
18613 // remove matched signature from unmatched
18614 unmatched[i] = undefined
18615 match = signature
8b095871 18616
9987f0c1
IC
18617 return true
18618 })
8b095871 18619
9987f0c1
IC
18620 return match
18621 })
18622}
8b095871 18623
9987f0c1
IC
18624function expandOutput (script, scriptType, ourPubKey) {
18625 typeforce(types.Buffer, script)
8b095871 18626
9987f0c1
IC
18627 var scriptChunks = bscript.decompile(script)
18628 if (!scriptType) {
18629 scriptType = bscript.classifyOutput(script)
8b095871 18630 }
8b095871 18631
9987f0c1 18632 var pubKeys = []
8b095871 18633
9987f0c1
IC
18634 switch (scriptType) {
18635 // does our hash160(pubKey) match the output scripts?
18636 case scriptTypes.P2PKH:
18637 if (!ourPubKey) break
8b095871 18638
9987f0c1
IC
18639 var pkh1 = scriptChunks[2]
18640 var pkh2 = bcrypto.hash160(ourPubKey)
18641 if (pkh1.equals(pkh2)) pubKeys = [ourPubKey]
18642 break
8b095871 18643
9987f0c1
IC
18644 // does our hash160(pubKey) match the output scripts?
18645 case scriptTypes.P2WPKH:
18646 if (!ourPubKey) break
8b095871 18647
9987f0c1
IC
18648 var wpkh1 = scriptChunks[1]
18649 var wpkh2 = bcrypto.hash160(ourPubKey)
18650 if (wpkh1.equals(wpkh2)) pubKeys = [ourPubKey]
18651 break
8b095871 18652
9987f0c1
IC
18653 case scriptTypes.P2PK:
18654 pubKeys = scriptChunks.slice(0, 1)
18655 break
18656
18657 case scriptTypes.MULTISIG:
18658 pubKeys = scriptChunks.slice(1, -2)
18659 break
8b095871 18660
9987f0c1
IC
18661 default: return { scriptType: scriptType }
18662 }
8b095871 18663
9987f0c1
IC
18664 return {
18665 pubKeys: pubKeys,
18666 scriptType: scriptType,
18667 signatures: pubKeys.map(function () { return undefined })
18668 }
8b095871
IC
18669}
18670
9987f0c1
IC
18671function checkP2shInput (input, redeemScriptHash) {
18672 if (input.prevOutType) {
18673 if (input.prevOutType !== scriptTypes.P2SH) throw new Error('PrevOutScript must be P2SH')
8b095871 18674
9987f0c1
IC
18675 var prevOutScriptScriptHash = bscript.decompile(input.prevOutScript)[1]
18676 if (!prevOutScriptScriptHash.equals(redeemScriptHash)) throw new Error('Inconsistent hash160(RedeemScript)')
18677 }
8b095871
IC
18678}
18679
9987f0c1
IC
18680function checkP2WSHInput (input, witnessScriptHash) {
18681 if (input.prevOutType) {
18682 if (input.prevOutType !== scriptTypes.P2WSH) throw new Error('PrevOutScript must be P2WSH')
8b095871 18683
9987f0c1
IC
18684 var scriptHash = bscript.decompile(input.prevOutScript)[1]
18685 if (!scriptHash.equals(witnessScriptHash)) throw new Error('Inconsistent sha25(WitnessScript)')
18686 }
8b095871
IC
18687}
18688
9987f0c1
IC
18689function prepareInput (input, kpPubKey, redeemScript, witnessValue, witnessScript) {
18690 var expanded
18691 var prevOutType
18692 var prevOutScript
8b095871 18693
9987f0c1
IC
18694 var p2sh = false
18695 var p2shType
18696 var redeemScriptHash
18697
18698 var witness = false
18699 var p2wsh = false
18700 var witnessType
18701 var witnessScriptHash
18702
18703 var signType
18704 var signScript
18705
18706 if (redeemScript && witnessScript) {
18707 redeemScriptHash = bcrypto.hash160(redeemScript)
18708 witnessScriptHash = bcrypto.sha256(witnessScript)
18709 checkP2shInput(input, redeemScriptHash)
18710
18711 if (!redeemScript.equals(bscript.witnessScriptHash.output.encode(witnessScriptHash))) throw new Error('Witness script inconsistent with redeem script')
18712
18713 expanded = expandOutput(witnessScript, undefined, kpPubKey)
18714 if (!expanded.pubKeys) throw new Error('WitnessScript not supported "' + bscript.toASM(redeemScript) + '"')
18715 prevOutType = bscript.types.P2SH
18716 prevOutScript = bscript.scriptHash.output.encode(redeemScriptHash)
18717 p2sh = witness = p2wsh = true
18718 p2shType = bscript.types.P2WSH
18719 signType = witnessType = expanded.scriptType
18720 signScript = witnessScript
18721 } else if (redeemScript) {
18722 redeemScriptHash = bcrypto.hash160(redeemScript)
18723 checkP2shInput(input, redeemScriptHash)
18724
18725 expanded = expandOutput(redeemScript, undefined, kpPubKey)
18726 if (!expanded.pubKeys) throw new Error('RedeemScript not supported "' + bscript.toASM(redeemScript) + '"')
18727
18728 prevOutType = bscript.types.P2SH
18729 prevOutScript = bscript.scriptHash.output.encode(redeemScriptHash)
18730 p2sh = true
18731 signType = p2shType = expanded.scriptType
18732 signScript = redeemScript
18733 witness = signType === bscript.types.P2WPKH
18734 } else if (witnessScript) {
18735 witnessScriptHash = bcrypto.sha256(witnessScript)
18736 checkP2WSHInput(input, witnessScriptHash)
18737
18738 expanded = expandOutput(witnessScript, undefined, kpPubKey)
18739 if (!expanded.pubKeys) throw new Error('WitnessScript not supported "' + bscript.toASM(redeemScript) + '"')
18740
18741 prevOutType = bscript.types.P2WSH
18742 prevOutScript = bscript.witnessScriptHash.output.encode(witnessScriptHash)
18743 witness = p2wsh = true
18744 signType = witnessType = expanded.scriptType
18745 signScript = witnessScript
18746 } else if (input.prevOutType) {
18747 // embedded scripts are not possible without a redeemScript
18748 if (input.prevOutType === scriptTypes.P2SH ||
18749 input.prevOutType === scriptTypes.P2WSH) {
18750 throw new Error('PrevOutScript is ' + input.prevOutType + ', requires redeemScript')
18751 }
18752
18753 prevOutType = input.prevOutType
18754 prevOutScript = input.prevOutScript
18755 expanded = expandOutput(input.prevOutScript, input.prevOutType, kpPubKey)
18756 if (!expanded.pubKeys) return
18757
18758 witness = (input.prevOutType === scriptTypes.P2WPKH)
18759 signType = prevOutType
18760 signScript = prevOutScript
18761 } else {
18762 prevOutScript = bscript.pubKeyHash.output.encode(bcrypto.hash160(kpPubKey))
18763 expanded = expandOutput(prevOutScript, scriptTypes.P2PKH, kpPubKey)
18764 prevOutType = scriptTypes.P2PKH
18765 witness = false
18766 signType = prevOutType
18767 signScript = prevOutScript
18768 }
8b095871 18769
9987f0c1
IC
18770 if (witness && !types.Satoshi(witnessValue)) {
18771 throw new Error('Input was witness but not given witness value')
18772 }
8b095871 18773
9987f0c1
IC
18774 if (signType === scriptTypes.P2WPKH) {
18775 signScript = bscript.pubKeyHash.output.encode(bscript.witnessPubKeyHash.output.decode(signScript))
18776 }
8b095871 18777
9987f0c1
IC
18778 if (p2sh) {
18779 input.redeemScript = redeemScript
18780 input.redeemScriptType = p2shType
18781 }
8b095871 18782
9987f0c1
IC
18783 if (p2wsh) {
18784 input.witnessScript = witnessScript
18785 input.witnessScriptType = witnessType
18786 }
8b095871 18787
9987f0c1
IC
18788 input.pubKeys = expanded.pubKeys
18789 input.signatures = expanded.signatures
18790 input.signScript = signScript
18791 input.signType = signType
18792 input.prevOutScript = prevOutScript
18793 input.prevOutType = prevOutType
18794 input.witness = witness
8b095871
IC
18795}
18796
9987f0c1
IC
18797function buildStack (type, signatures, pubKeys, allowIncomplete) {
18798 if (type === scriptTypes.P2PKH) {
18799 if (signatures.length === 1 && Buffer.isBuffer(signatures[0]) && pubKeys.length === 1) return bscript.pubKeyHash.input.encodeStack(signatures[0], pubKeys[0])
18800 } else if (type === scriptTypes.P2PK) {
18801 if (signatures.length === 1 && Buffer.isBuffer(signatures[0])) return bscript.pubKey.input.encodeStack(signatures[0])
18802 } else if (type === scriptTypes.MULTISIG) {
18803 if (signatures.length > 0) {
18804 signatures = signatures.map(function (signature) {
18805 return signature || ops.OP_0
18806 })
18807 if (!allowIncomplete) {
18808 // remove blank signatures
18809 signatures = signatures.filter(function (x) { return x !== ops.OP_0 })
18810 }
8b095871 18811
9987f0c1
IC
18812 return bscript.multisig.input.encodeStack(signatures /* see if it's necessary first */)
18813 }
18814 } else {
18815 throw new Error('Not yet supported')
18816 }
8b095871 18817
9987f0c1 18818 if (!allowIncomplete) throw new Error('Not enough signatures provided')
8b095871 18819
9987f0c1 18820 return []
8b095871
IC
18821}
18822
9987f0c1
IC
18823function buildInput (input, allowIncomplete) {
18824 var scriptType = input.prevOutType
18825 var sig = []
18826 var witness = []
18827 if (SIGNABLE.indexOf(scriptType) !== -1) {
18828 sig = buildStack(scriptType, input.signatures, input.pubKeys, allowIncomplete)
8b095871
IC
18829 }
18830
9987f0c1
IC
18831 var p2sh = false
18832 if (scriptType === bscript.types.P2SH) {
18833 // We can remove this error later when we have a guarantee prepareInput
18834 // rejects unsignable scripts - it MUST be signable at this point.
18835 if (P2SH.indexOf(input.redeemScriptType) === -1) {
18836 throw new Error('Impossible to sign this type')
18837 }
18838 p2sh = true
18839 if (SIGNABLE.indexOf(input.redeemScriptType) !== -1) {
18840 sig = buildStack(input.redeemScriptType, input.signatures, input.pubKeys, allowIncomplete)
18841 }
18842 // If it wasn't SIGNABLE, it's witness, defer to that
18843 scriptType = input.redeemScriptType
8b095871
IC
18844 }
18845
9987f0c1
IC
18846 if (scriptType === bscript.types.P2WPKH) {
18847 // P2WPKH is a special case of P2PKH
18848 witness = buildStack(bscript.types.P2PKH, input.signatures, input.pubKeys, allowIncomplete)
18849 } else if (scriptType === bscript.types.P2WSH) {
18850 // We can remove this check later
18851 if (SIGNABLE.indexOf(input.witnessScriptType) !== -1) {
18852 witness = buildStack(input.witnessScriptType, input.signatures, input.pubKeys, allowIncomplete)
18853 witness.push(input.witnessScript)
18854 } else {
18855 // We can remove this error later when we have a guarantee prepareInput
18856 // rejects unsignble scripts - it MUST be signable at this point.
18857 throw new Error()
18858 }
8b095871 18859
9987f0c1 18860 scriptType = input.witnessScriptType
8b095871
IC
18861 }
18862
9987f0c1
IC
18863 // append redeemScript if necessary
18864 if (p2sh) {
18865 sig.push(input.redeemScript)
8b095871
IC
18866 }
18867
9987f0c1
IC
18868 return {
18869 type: scriptType,
18870 script: bscript.compile(sig),
18871 witness: witness
8b095871 18872 }
8b095871
IC
18873}
18874
9987f0c1
IC
18875function TransactionBuilder (network, maximumFeeRate) {
18876 this.prevTxMap = {}
18877 this.network = network || networks.bitcoin
8b095871 18878
9987f0c1
IC
18879 // WARNING: This is __NOT__ to be relied on, its just another potential safety mechanism (safety in-depth)
18880 this.maximumFeeRate = maximumFeeRate || 1000
8b095871 18881
9987f0c1
IC
18882 this.inputs = []
18883 this.tx = new Transaction()
8b095871
IC
18884}
18885
9987f0c1
IC
18886TransactionBuilder.prototype.setLockTime = function (locktime) {
18887 typeforce(types.UInt32, locktime)
8b095871 18888
9987f0c1
IC
18889 // if any signatures exist, throw
18890 if (this.inputs.some(function (input) {
18891 if (!input.signatures) return false
18892
18893 return input.signatures.some(function (s) { return s })
18894 })) {
18895 throw new Error('No, this would invalidate signatures')
18896 }
18897
18898 this.tx.locktime = locktime
8b095871
IC
18899}
18900
9987f0c1
IC
18901TransactionBuilder.prototype.setVersion = function (version) {
18902 typeforce(types.UInt32, version)
8b095871 18903
9987f0c1
IC
18904 // XXX: this might eventually become more complex depending on what the versions represent
18905 this.tx.version = version
18906}
8b095871 18907
9987f0c1
IC
18908TransactionBuilder.fromTransaction = function (transaction, network) {
18909 var txb = new TransactionBuilder(network)
8b095871 18910
9987f0c1
IC
18911 // Copy transaction fields
18912 txb.setVersion(transaction.version)
18913 txb.setLockTime(transaction.locktime)
8b095871 18914
9987f0c1
IC
18915 // Copy outputs (done first to avoid signature invalidation)
18916 transaction.outs.forEach(function (txOut) {
18917 txb.addOutput(txOut.script, txOut.value)
18918 })
8b095871 18919
9987f0c1
IC
18920 // Copy inputs
18921 transaction.ins.forEach(function (txIn) {
18922 txb.__addInputUnsafe(txIn.hash, txIn.index, {
18923 sequence: txIn.sequence,
18924 script: txIn.script,
18925 witness: txIn.witness
18926 })
8b095871
IC
18927 })
18928
9987f0c1
IC
18929 // fix some things not possible through the public API
18930 txb.inputs.forEach(function (input, i) {
18931 fixMultisigOrder(input, transaction, i)
18932 })
8b095871 18933
9987f0c1 18934 return txb
8b095871
IC
18935}
18936
9987f0c1
IC
18937TransactionBuilder.prototype.addInput = function (txHash, vout, sequence, prevOutScript) {
18938 if (!this.__canModifyInputs()) {
18939 throw new Error('No, this would invalidate signatures')
18940 }
8b095871 18941
9987f0c1 18942 var value
8b095871 18943
9987f0c1
IC
18944 // is it a hex string?
18945 if (typeof txHash === 'string') {
18946 // transaction hashs's are displayed in reverse order, un-reverse it
18947 txHash = Buffer.from(txHash, 'hex').reverse()
8b095871 18948
9987f0c1
IC
18949 // is it a Transaction object?
18950 } else if (txHash instanceof Transaction) {
18951 var txOut = txHash.outs[vout]
18952 prevOutScript = txOut.script
18953 value = txOut.value
8b095871 18954
9987f0c1
IC
18955 txHash = txHash.getHash()
18956 }
8b095871 18957
9987f0c1
IC
18958 return this.__addInputUnsafe(txHash, vout, {
18959 sequence: sequence,
18960 prevOutScript: prevOutScript,
18961 value: value
18962 })
18963}
8b095871 18964
9987f0c1
IC
18965TransactionBuilder.prototype.__addInputUnsafe = function (txHash, vout, options) {
18966 if (Transaction.isCoinbaseHash(txHash)) {
18967 throw new Error('coinbase inputs not supported')
18968 }
8b095871 18969
9987f0c1
IC
18970 var prevTxOut = txHash.toString('hex') + ':' + vout
18971 if (this.prevTxMap[prevTxOut] !== undefined) throw new Error('Duplicate TxOut: ' + prevTxOut)
8b095871 18972
9987f0c1 18973 var input = {}
8b095871 18974
9987f0c1
IC
18975 // derive what we can from the scriptSig
18976 if (options.script !== undefined) {
18977 input = expandInput(options.script, options.witness || [])
8b095871
IC
18978 }
18979
9987f0c1
IC
18980 // if an input value was given, retain it
18981 if (options.value !== undefined) {
18982 input.value = options.value
8b095871 18983 }
8b095871 18984
9987f0c1
IC
18985 // derive what we can from the previous transactions output script
18986 if (!input.prevOutScript && options.prevOutScript) {
18987 var prevOutType
8b095871 18988
9987f0c1
IC
18989 if (!input.pubKeys && !input.signatures) {
18990 var expanded = expandOutput(options.prevOutScript)
8b095871 18991
9987f0c1
IC
18992 if (expanded.pubKeys) {
18993 input.pubKeys = expanded.pubKeys
18994 input.signatures = expanded.signatures
18995 }
8b095871 18996
9987f0c1
IC
18997 prevOutType = expanded.scriptType
18998 }
8b095871 18999
9987f0c1
IC
19000 input.prevOutScript = options.prevOutScript
19001 input.prevOutType = prevOutType || bscript.classifyOutput(options.prevOutScript)
19002 }
8b095871 19003
9987f0c1
IC
19004 var vin = this.tx.addInput(txHash, vout, options.sequence, options.scriptSig)
19005 this.inputs[vin] = input
19006 this.prevTxMap[prevTxOut] = vin
8b095871 19007
9987f0c1
IC
19008 return vin
19009}
8b095871 19010
9987f0c1
IC
19011TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
19012 if (!this.__canModifyOutputs()) {
19013 throw new Error('No, this would invalidate signatures')
8b095871
IC
19014 }
19015
9987f0c1
IC
19016 // Attempt to get a script if it's a base58 address string
19017 if (typeof scriptPubKey === 'string') {
19018 scriptPubKey = baddress.toOutputScript(scriptPubKey, this.network)
8b095871 19019 }
8b095871 19020
9987f0c1
IC
19021 return this.tx.addOutput(scriptPubKey, value)
19022}
8b095871 19023
9987f0c1
IC
19024TransactionBuilder.prototype.build = function () {
19025 return this.__build(false)
19026}
19027TransactionBuilder.prototype.buildIncomplete = function () {
19028 return this.__build(true)
19029}
8b095871 19030
9987f0c1
IC
19031TransactionBuilder.prototype.__build = function (allowIncomplete) {
19032 if (!allowIncomplete) {
19033 if (!this.tx.ins.length) throw new Error('Transaction has no inputs')
19034 if (!this.tx.outs.length) throw new Error('Transaction has no outputs')
19035 }
8b095871 19036
9987f0c1
IC
19037 var tx = this.tx.clone()
19038 // Create script signatures from inputs
19039 this.inputs.forEach(function (input, i) {
19040 var scriptType = input.witnessScriptType || input.redeemScriptType || input.prevOutType
19041 if (!scriptType && !allowIncomplete) throw new Error('Transaction is not complete')
19042 var result = buildInput(input, allowIncomplete)
8b095871 19043
9987f0c1
IC
19044 // skip if no result
19045 if (!allowIncomplete) {
19046 if (SIGNABLE.indexOf(result.type) === -1 && result.type !== bscript.types.P2WPKH) {
19047 throw new Error(result.type + ' not supported')
19048 }
19049 }
8b095871 19050
9987f0c1
IC
19051 tx.setInputScript(i, result.script)
19052 tx.setWitness(i, result.witness)
19053 })
8b095871 19054
9987f0c1
IC
19055 if (!allowIncomplete) {
19056 // do not rely on this, its merely a last resort
19057 if (this.__overMaximumFees(tx.byteLength())) {
19058 throw new Error('Transaction has absurd fees')
19059 }
19060 }
8b095871 19061
9987f0c1 19062 return tx
8b095871
IC
19063}
19064
9987f0c1
IC
19065function canSign (input) {
19066 return input.prevOutScript !== undefined &&
19067 input.signScript !== undefined &&
19068 input.pubKeys !== undefined &&
19069 input.signatures !== undefined &&
19070 input.signatures.length === input.pubKeys.length &&
19071 input.pubKeys.length > 0 &&
19072 input.witness !== undefined
8b095871
IC
19073}
19074
9987f0c1
IC
19075TransactionBuilder.prototype.sign = function (vin, keyPair, redeemScript, hashType, witnessValue, witnessScript) {
19076 if (keyPair.network !== this.network) throw new Error('Inconsistent network')
19077 if (!this.inputs[vin]) throw new Error('No input at index: ' + vin)
19078 hashType = hashType || Transaction.SIGHASH_ALL
8b095871 19079
9987f0c1 19080 var input = this.inputs[vin]
8b095871 19081
9987f0c1
IC
19082 // if redeemScript was previously provided, enforce consistency
19083 if (input.redeemScript !== undefined &&
19084 redeemScript &&
19085 !input.redeemScript.equals(redeemScript)) {
19086 throw new Error('Inconsistent redeemScript')
19087 }
8b095871 19088
9987f0c1
IC
19089 var kpPubKey = keyPair.getPublicKeyBuffer()
19090 if (!canSign(input)) {
19091 prepareInput(input, kpPubKey, redeemScript, witnessValue, witnessScript)
19092 if (!canSign(input)) throw Error(input.prevOutType + ' not supported')
19093 }
8b095871 19094
9987f0c1
IC
19095 // ready to sign
19096 var signatureHash
19097 if (input.witness) {
19098 signatureHash = this.tx.hashForWitnessV0(vin, input.signScript, witnessValue, hashType)
8b095871 19099 } else {
9987f0c1 19100 signatureHash = this.tx.hashForSignature(vin, input.signScript, hashType)
8b095871 19101 }
9987f0c1
IC
19102 // enforce in order signing of public keys
19103 var signed = input.pubKeys.some(function (pubKey, i) {
19104 if (!kpPubKey.equals(pubKey)) return false
19105 if (input.signatures[i]) throw new Error('Signature already exists')
8b095871 19106
9987f0c1
IC
19107 input.signatures[i] = keyPair.sign(signatureHash).toScriptSignature(hashType)
19108 return true
19109 })
8b095871 19110
9987f0c1 19111 if (!signed) throw new Error('Key pair cannot sign for this input')
8b095871
IC
19112}
19113
9987f0c1
IC
19114function signatureHashType (buffer) {
19115 return buffer.readUInt8(buffer.length - 1)
8b095871
IC
19116}
19117
9987f0c1
IC
19118TransactionBuilder.prototype.__canModifyInputs = function () {
19119 return this.inputs.every(function (input) {
19120 // any signatures?
19121 if (input.signatures === undefined) return true
8b095871 19122
9987f0c1
IC
19123 return input.signatures.every(function (signature) {
19124 if (!signature) return true
19125 var hashType = signatureHashType(signature)
8b095871 19126
9987f0c1
IC
19127 // if SIGHASH_ANYONECANPAY is set, signatures would not
19128 // be invalidated by more inputs
19129 return hashType & Transaction.SIGHASH_ANYONECANPAY
19130 })
19131 })
8b095871
IC
19132}
19133
9987f0c1
IC
19134TransactionBuilder.prototype.__canModifyOutputs = function () {
19135 var nInputs = this.tx.ins.length
19136 var nOutputs = this.tx.outs.length
8b095871 19137
9987f0c1
IC
19138 return this.inputs.every(function (input) {
19139 if (input.signatures === undefined) return true
8b095871 19140
9987f0c1
IC
19141 return input.signatures.every(function (signature) {
19142 if (!signature) return true
19143 var hashType = signatureHashType(signature)
8b095871 19144
9987f0c1
IC
19145 var hashTypeMod = hashType & 0x1f
19146 if (hashTypeMod === Transaction.SIGHASH_NONE) return true
19147 if (hashTypeMod === Transaction.SIGHASH_SINGLE) {
19148 // if SIGHASH_SINGLE is set, and nInputs > nOutputs
19149 // some signatures would be invalidated by the addition
19150 // of more outputs
19151 return nInputs <= nOutputs
19152 }
19153 })
19154 })
8b095871
IC
19155}
19156
9987f0c1
IC
19157TransactionBuilder.prototype.__overMaximumFees = function (bytes) {
19158 // not all inputs will have .value defined
19159 var incoming = this.inputs.reduce(function (a, x) { return a + (x.value >>> 0) }, 0)
8b095871 19160
9987f0c1
IC
19161 // but all outputs do, and if we have any input value
19162 // we can immediately determine if the outputs are too small
19163 var outgoing = this.tx.outs.reduce(function (a, x) { return a + x.value }, 0)
19164 var fee = incoming - outgoing
19165 var feeRate = fee / bytes
8b095871 19166
9987f0c1 19167 return feeRate > this.maximumFeeRate
8b095871
IC
19168}
19169
9987f0c1 19170module.exports = TransactionBuilder
8b095871 19171
9987f0c1
IC
19172},{"./address":42,"./crypto":45,"./ecpair":47,"./ecsignature":48,"./networks":51,"./script":52,"./transaction":76,"./types":78,"bitcoin-ops":40,"safe-buffer":98,"typeforce":109}],78:[function(require,module,exports){
19173var typeforce = require('typeforce')
8b095871 19174
9987f0c1
IC
19175var UINT31_MAX = Math.pow(2, 31) - 1
19176function UInt31 (value) {
19177 return typeforce.UInt32(value) && value <= UINT31_MAX
19178}
8b095871 19179
9987f0c1
IC
19180function BIP32Path (value) {
19181 return typeforce.String(value) && value.match(/^(m\/)?(\d+'?\/)*\d+'?$/)
19182}
19183BIP32Path.toJSON = function () { return 'BIP32 derivation path' }
8b095871 19184
9987f0c1
IC
19185var SATOSHI_MAX = 21 * 1e14
19186function Satoshi (value) {
19187 return typeforce.UInt53(value) && value <= SATOSHI_MAX
19188}
8b095871 19189
9987f0c1
IC
19190// external dependent types
19191var BigInt = typeforce.quacksLike('BigInteger')
19192var ECPoint = typeforce.quacksLike('Point')
8b095871 19193
9987f0c1
IC
19194// exposed, external API
19195var ECSignature = typeforce.compile({ r: BigInt, s: BigInt })
19196var Network = typeforce.compile({
19197 messagePrefix: typeforce.oneOf(typeforce.Buffer, typeforce.String),
19198 bip32: {
19199 public: typeforce.UInt32,
19200 private: typeforce.UInt32
19201 },
19202 pubKeyHash: typeforce.UInt8,
19203 scriptHash: typeforce.UInt8,
19204 wif: typeforce.UInt8
19205})
8b095871 19206
9987f0c1
IC
19207// extend typeforce types with ours
19208var types = {
19209 BigInt: BigInt,
19210 BIP32Path: BIP32Path,
19211 Buffer256bit: typeforce.BufferN(32),
19212 ECPoint: ECPoint,
19213 ECSignature: ECSignature,
19214 Hash160bit: typeforce.BufferN(20),
19215 Hash256bit: typeforce.BufferN(32),
19216 Network: Network,
19217 Satoshi: Satoshi,
19218 UInt31: UInt31
19219}
8b095871 19220
9987f0c1
IC
19221for (var typeName in typeforce) {
19222 types[typeName] = typeforce[typeName]
19223}
8b095871 19224
9987f0c1 19225module.exports = types
8b095871 19226
9987f0c1
IC
19227},{"typeforce":109}],79:[function(require,module,exports){
19228var basex = require('base-x')
19229var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
8b095871 19230
9987f0c1 19231module.exports = basex(ALPHABET)
8b095871 19232
9987f0c1
IC
19233},{"base-x":34}],80:[function(require,module,exports){
19234(function (Buffer){
19235'use strict'
8b095871 19236
9987f0c1
IC
19237var base58 = require('bs58')
19238var createHash = require('create-hash')
8b095871 19239
9987f0c1
IC
19240// SHA256(SHA256(buffer))
19241function sha256x2 (buffer) {
19242 var tmp = createHash('sha256').update(buffer).digest()
19243 return createHash('sha256').update(tmp).digest()
19244}
8b095871 19245
9987f0c1
IC
19246// Encode a buffer as a base58-check encoded string
19247function encode (payload) {
19248 var checksum = sha256x2(payload)
8b095871 19249
9987f0c1
IC
19250 return base58.encode(Buffer.concat([
19251 payload,
19252 checksum
19253 ], payload.length + 4))
19254}
8b095871 19255
9987f0c1
IC
19256function decodeRaw (buffer) {
19257 var payload = buffer.slice(0, -4)
19258 var checksum = buffer.slice(-4)
19259 var newChecksum = sha256x2(payload)
8b095871 19260
9987f0c1
IC
19261 if (checksum[0] ^ newChecksum[0] |
19262 checksum[1] ^ newChecksum[1] |
19263 checksum[2] ^ newChecksum[2] |
19264 checksum[3] ^ newChecksum[3]) return
8b095871 19265
9987f0c1
IC
19266 return payload
19267}
8b095871 19268
9987f0c1
IC
19269// Decode a base58-check encoded string to a buffer, no result if checksum is wrong
19270function decodeUnsafe (string) {
19271 var buffer = base58.decodeUnsafe(string)
19272 if (!buffer) return
8b095871 19273
9987f0c1
IC
19274 return decodeRaw(buffer)
19275}
8b095871 19276
9987f0c1
IC
19277function decode (string) {
19278 var buffer = base58.decode(string)
19279 var payload = decodeRaw(buffer)
19280 if (!payload) throw new Error('Invalid checksum')
19281 return payload
19282}
8b095871 19283
9987f0c1
IC
19284module.exports = {
19285 encode: encode,
19286 decode: decode,
19287 decodeUnsafe: decodeUnsafe
19288}
8b095871 19289
9987f0c1
IC
19290}).call(this,require("buffer").Buffer)
19291},{"bs58":79,"buffer":4,"create-hash":82}],81:[function(require,module,exports){
19292var Buffer = require('safe-buffer').Buffer
19293var Transform = require('stream').Transform
19294var StringDecoder = require('string_decoder').StringDecoder
19295var inherits = require('inherits')
8b095871 19296
9987f0c1
IC
19297function CipherBase (hashMode) {
19298 Transform.call(this)
19299 this.hashMode = typeof hashMode === 'string'
19300 if (this.hashMode) {
19301 this[hashMode] = this._finalOrDigest
19302 } else {
19303 this.final = this._finalOrDigest
8b095871 19304 }
9987f0c1
IC
19305 if (this._final) {
19306 this.__final = this._final
19307 this._final = null
19308 }
19309 this._decoder = null
19310 this._encoding = null
8b095871 19311}
9987f0c1 19312inherits(CipherBase, Transform)
8b095871 19313
9987f0c1
IC
19314CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
19315 if (typeof data === 'string') {
19316 data = Buffer.from(data, inputEnc)
19317 }
8b095871 19318
9987f0c1
IC
19319 var outData = this._update(data)
19320 if (this.hashMode) return this
8b095871 19321
9987f0c1
IC
19322 if (outputEnc) {
19323 outData = this._toString(outData, outputEnc)
19324 }
8b095871 19325
9987f0c1
IC
19326 return outData
19327}
8b095871 19328
9987f0c1
IC
19329CipherBase.prototype.setAutoPadding = function () {}
19330CipherBase.prototype.getAuthTag = function () {
19331 throw new Error('trying to get auth tag in unsupported state')
19332}
8b095871 19333
9987f0c1
IC
19334CipherBase.prototype.setAuthTag = function () {
19335 throw new Error('trying to set auth tag in unsupported state')
19336}
8b095871 19337
9987f0c1
IC
19338CipherBase.prototype.setAAD = function () {
19339 throw new Error('trying to set aad in unsupported state')
19340}
8b095871 19341
9987f0c1
IC
19342CipherBase.prototype._transform = function (data, _, next) {
19343 var err
19344 try {
19345 if (this.hashMode) {
19346 this._update(data)
19347 } else {
19348 this.push(this._update(data))
19349 }
19350 } catch (e) {
19351 err = e
19352 } finally {
19353 next(err)
19354 }
19355}
19356CipherBase.prototype._flush = function (done) {
19357 var err
19358 try {
19359 this.push(this.__final())
19360 } catch (e) {
19361 err = e
8b095871
IC
19362 }
19363
9987f0c1
IC
19364 done(err)
19365}
19366CipherBase.prototype._finalOrDigest = function (outputEnc) {
19367 var outData = this.__final() || Buffer.alloc(0)
19368 if (outputEnc) {
19369 outData = this._toString(outData, outputEnc, true)
19370 }
19371 return outData
8b095871
IC
19372}
19373
9987f0c1
IC
19374CipherBase.prototype._toString = function (value, enc, fin) {
19375 if (!this._decoder) {
19376 this._decoder = new StringDecoder(enc)
19377 this._encoding = enc
19378 }
8b095871 19379
9987f0c1 19380 if (this._encoding !== enc) throw new Error('can\'t switch encodings')
8b095871 19381
9987f0c1
IC
19382 var out = this._decoder.write(value)
19383 if (fin) {
19384 out += this._decoder.end()
19385 }
8b095871 19386
9987f0c1
IC
19387 return out
19388}
8b095871 19389
9987f0c1 19390module.exports = CipherBase
8b095871 19391
9987f0c1
IC
19392},{"inherits":93,"safe-buffer":98,"stream":27,"string_decoder":28}],82:[function(require,module,exports){
19393(function (Buffer){
19394'use strict'
19395var inherits = require('inherits')
19396var md5 = require('./md5')
19397var RIPEMD160 = require('ripemd160')
19398var sha = require('sha.js')
8b095871 19399
9987f0c1
IC
19400var Base = require('cipher-base')
19401
19402function HashNoConstructor (hash) {
19403 Base.call(this, 'digest')
8b095871 19404
9987f0c1
IC
19405 this._hash = hash
19406 this.buffers = []
8b095871
IC
19407}
19408
9987f0c1 19409inherits(HashNoConstructor, Base)
8b095871 19410
9987f0c1
IC
19411HashNoConstructor.prototype._update = function (data) {
19412 this.buffers.push(data)
8b095871
IC
19413}
19414
9987f0c1
IC
19415HashNoConstructor.prototype._final = function () {
19416 var buf = Buffer.concat(this.buffers)
19417 var r = this._hash(buf)
19418 this.buffers = null
8b095871 19419
9987f0c1
IC
19420 return r
19421}
8b095871 19422
9987f0c1
IC
19423function Hash (hash) {
19424 Base.call(this, 'digest')
8b095871 19425
9987f0c1
IC
19426 this._hash = hash
19427}
8b095871 19428
9987f0c1 19429inherits(Hash, Base)
8b095871 19430
9987f0c1
IC
19431Hash.prototype._update = function (data) {
19432 this._hash.update(data)
19433}
8b095871 19434
9987f0c1
IC
19435Hash.prototype._final = function () {
19436 return this._hash.digest()
19437}
8b095871 19438
9987f0c1
IC
19439module.exports = function createHash (alg) {
19440 alg = alg.toLowerCase()
19441 if (alg === 'md5') return new HashNoConstructor(md5)
19442 if (alg === 'rmd160' || alg === 'ripemd160') return new Hash(new RIPEMD160())
8b095871 19443
9987f0c1
IC
19444 return new Hash(sha(alg))
19445}
8b095871 19446
9987f0c1
IC
19447}).call(this,require("buffer").Buffer)
19448},{"./md5":84,"buffer":4,"cipher-base":81,"inherits":93,"ripemd160":97,"sha.js":100}],83:[function(require,module,exports){
19449(function (Buffer){
19450'use strict'
19451var intSize = 4
19452var zeroBuffer = new Buffer(intSize)
19453zeroBuffer.fill(0)
8b095871 19454
9987f0c1
IC
19455var charSize = 8
19456var hashSize = 16
8b095871 19457
9987f0c1
IC
19458function toArray (buf) {
19459 if ((buf.length % intSize) !== 0) {
19460 var len = buf.length + (intSize - (buf.length % intSize))
19461 buf = Buffer.concat([buf, zeroBuffer], len)
19462 }
8b095871 19463
9987f0c1
IC
19464 var arr = new Array(buf.length >>> 2)
19465 for (var i = 0, j = 0; i < buf.length; i += intSize, j++) {
19466 arr[j] = buf.readInt32LE(i)
8b095871
IC
19467 }
19468
9987f0c1 19469 return arr
8b095871
IC
19470}
19471
9987f0c1
IC
19472module.exports = function hash (buf, fn) {
19473 var arr = fn(toArray(buf), buf.length * charSize)
19474 buf = new Buffer(hashSize)
19475 for (var i = 0; i < arr.length; i++) {
19476 buf.writeInt32LE(arr[i], i << 2, true)
19477 }
19478 return buf
8b095871
IC
19479}
19480
19481}).call(this,require("buffer").Buffer)
9987f0c1
IC
19482},{"buffer":4}],84:[function(require,module,exports){
19483'use strict'
19484/*
19485 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
19486 * Digest Algorithm, as defined in RFC 1321.
19487 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
19488 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
19489 * Distributed under the BSD License
19490 * See http://pajhome.org.uk/crypt/md5 for more info.
19491 */
8b095871 19492
9987f0c1 19493var makeHash = require('./make-hash')
8b095871 19494
9987f0c1
IC
19495/*
19496 * Calculate the MD5 of an array of little-endian words, and a bit length
19497 */
19498function core_md5 (x, len) {
19499 /* append padding */
19500 x[len >> 5] |= 0x80 << ((len) % 32)
19501 x[(((len + 64) >>> 9) << 4) + 14] = len
19502
19503 var a = 1732584193
19504 var b = -271733879
19505 var c = -1732584194
19506 var d = 271733878
19507
19508 for (var i = 0; i < x.length; i += 16) {
19509 var olda = a
19510 var oldb = b
19511 var oldc = c
19512 var oldd = d
19513
19514 a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936)
19515 d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586)
19516 c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819)
19517 b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330)
19518 a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897)
19519 d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426)
19520 c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341)
19521 b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983)
19522 a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416)
19523 d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417)
19524 c = md5_ff(c, d, a, b, x[i + 10], 17, -42063)
19525 b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162)
19526 a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682)
19527 d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101)
19528 c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290)
19529 b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329)
19530
19531 a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510)
19532 d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632)
19533 c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713)
19534 b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302)
19535 a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691)
19536 d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083)
19537 c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335)
19538 b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848)
19539 a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438)
19540 d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690)
19541 c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961)
19542 b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501)
19543 a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467)
19544 d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784)
19545 c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473)
19546 b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734)
19547
19548 a = md5_hh(a, b, c, d, x[i + 5], 4, -378558)
19549 d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463)
19550 c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562)
19551 b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556)
19552 a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060)
19553 d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353)
19554 c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632)
19555 b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640)
19556 a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174)
19557 d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222)
19558 c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979)
19559 b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189)
19560 a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487)
19561 d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835)
19562 c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520)
19563 b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651)
19564
19565 a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844)
19566 d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415)
19567 c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905)
19568 b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055)
19569 a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571)
19570 d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606)
19571 c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523)
19572 b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799)
19573 a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359)
19574 d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744)
19575 c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380)
19576 b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649)
19577 a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070)
19578 d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379)
19579 c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259)
19580 b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551)
19581
19582 a = safe_add(a, olda)
19583 b = safe_add(b, oldb)
19584 c = safe_add(c, oldc)
19585 d = safe_add(d, oldd)
19586 }
19587
19588 return [a, b, c, d]
19589}
8b095871 19590
9987f0c1
IC
19591/*
19592 * These functions implement the four basic operations the algorithm uses.
19593 */
19594function md5_cmn (q, a, b, x, s, t) {
19595 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
8b095871
IC
19596}
19597
9987f0c1
IC
19598function md5_ff (a, b, c, d, x, s, t) {
19599 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t)
19600}
8b095871 19601
9987f0c1
IC
19602function md5_gg (a, b, c, d, x, s, t) {
19603 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t)
19604}
8b095871 19605
9987f0c1
IC
19606function md5_hh (a, b, c, d, x, s, t) {
19607 return md5_cmn(b ^ c ^ d, a, b, x, s, t)
19608}
8b095871 19609
9987f0c1
IC
19610function md5_ii (a, b, c, d, x, s, t) {
19611 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t)
19612}
8b095871 19613
9987f0c1
IC
19614/*
19615 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
19616 * to work around bugs in some JS interpreters.
19617 */
19618function safe_add (x, y) {
19619 var lsw = (x & 0xFFFF) + (y & 0xFFFF)
19620 var msw = (x >> 16) + (y >> 16) + (lsw >> 16)
19621 return (msw << 16) | (lsw & 0xFFFF)
19622}
8b095871 19623
9987f0c1
IC
19624/*
19625 * Bitwise rotate a 32-bit number to the left.
19626 */
19627function bit_rol (num, cnt) {
19628 return (num << cnt) | (num >>> (32 - cnt))
19629}
8b095871 19630
9987f0c1
IC
19631module.exports = function md5 (buf) {
19632 return makeHash(buf, core_md5)
8b095871
IC
19633}
19634
9987f0c1
IC
19635},{"./make-hash":83}],85:[function(require,module,exports){
19636'use strict'
19637var inherits = require('inherits')
19638var Legacy = require('./legacy')
19639var Base = require('cipher-base')
19640var Buffer = require('safe-buffer').Buffer
19641var md5 = require('create-hash/md5')
19642var RIPEMD160 = require('ripemd160')
8b095871 19643
9987f0c1 19644var sha = require('sha.js')
8b095871 19645
9987f0c1 19646var ZEROS = Buffer.alloc(128)
8b095871 19647
9987f0c1
IC
19648function Hmac (alg, key) {
19649 Base.call(this, 'digest')
19650 if (typeof key === 'string') {
19651 key = Buffer.from(key)
19652 }
8b095871 19653
9987f0c1 19654 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
8b095871 19655
9987f0c1
IC
19656 this._alg = alg
19657 this._key = key
19658 if (key.length > blocksize) {
19659 var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
19660 key = hash.update(key).digest()
19661 } else if (key.length < blocksize) {
19662 key = Buffer.concat([key, ZEROS], blocksize)
19663 }
8b095871 19664
9987f0c1
IC
19665 var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
19666 var opad = this._opad = Buffer.allocUnsafe(blocksize)
8b095871 19667
9987f0c1
IC
19668 for (var i = 0; i < blocksize; i++) {
19669 ipad[i] = key[i] ^ 0x36
19670 opad[i] = key[i] ^ 0x5C
8b095871 19671 }
9987f0c1
IC
19672 this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
19673 this._hash.update(ipad)
19674}
8b095871 19675
9987f0c1
IC
19676inherits(Hmac, Base)
19677
19678Hmac.prototype._update = function (data) {
19679 this._hash.update(data)
8b095871
IC
19680}
19681
9987f0c1
IC
19682Hmac.prototype._final = function () {
19683 var h = this._hash.digest()
19684 var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)
19685 return hash.update(this._opad).update(h).digest()
8b095871
IC
19686}
19687
9987f0c1
IC
19688module.exports = function createHmac (alg, key) {
19689 alg = alg.toLowerCase()
19690 if (alg === 'rmd160' || alg === 'ripemd160') {
19691 return new Hmac('rmd160', key)
19692 }
19693 if (alg === 'md5') {
19694 return new Legacy(md5, key)
19695 }
19696 return new Hmac(alg, key)
19697}
8b095871 19698
9987f0c1
IC
19699},{"./legacy":86,"cipher-base":81,"create-hash/md5":84,"inherits":93,"ripemd160":97,"safe-buffer":98,"sha.js":100}],86:[function(require,module,exports){
19700'use strict'
19701var inherits = require('inherits')
19702var Buffer = require('safe-buffer').Buffer
8b095871 19703
9987f0c1 19704var Base = require('cipher-base')
8b095871 19705
9987f0c1
IC
19706var ZEROS = Buffer.alloc(128)
19707var blocksize = 64
8b095871 19708
9987f0c1
IC
19709function Hmac (alg, key) {
19710 Base.call(this, 'digest')
19711 if (typeof key === 'string') {
19712 key = Buffer.from(key)
8b095871
IC
19713 }
19714
9987f0c1
IC
19715 this._alg = alg
19716 this._key = key
8b095871 19717
9987f0c1
IC
19718 if (key.length > blocksize) {
19719 key = alg(key)
19720 } else if (key.length < blocksize) {
19721 key = Buffer.concat([key, ZEROS], blocksize)
19722 }
8b095871 19723
9987f0c1
IC
19724 var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
19725 var opad = this._opad = Buffer.allocUnsafe(blocksize)
8b095871 19726
9987f0c1
IC
19727 for (var i = 0; i < blocksize; i++) {
19728 ipad[i] = key[i] ^ 0x36
19729 opad[i] = key[i] ^ 0x5C
19730 }
8b095871 19731
9987f0c1 19732 this._hash = [ipad]
8b095871
IC
19733}
19734
9987f0c1 19735inherits(Hmac, Base)
8b095871 19736
9987f0c1
IC
19737Hmac.prototype._update = function (data) {
19738 this._hash.push(data)
8b095871
IC
19739}
19740
9987f0c1
IC
19741Hmac.prototype._final = function () {
19742 var h = this._alg(Buffer.concat(this._hash))
19743 return this._alg(Buffer.concat([this._opad, h]))
8b095871 19744}
9987f0c1 19745module.exports = Hmac
8b095871 19746
9987f0c1 19747},{"cipher-base":81,"inherits":93,"safe-buffer":98}],87:[function(require,module,exports){
8b095871 19748var assert = require('assert')
8b095871
IC
19749var BigInteger = require('bigi')
19750
9987f0c1 19751var Point = require('./point')
8b095871 19752
9987f0c1
IC
19753function Curve (p, a, b, Gx, Gy, n, h) {
19754 this.p = p
19755 this.a = a
19756 this.b = b
19757 this.G = Point.fromAffine(this, Gx, Gy)
19758 this.n = n
19759 this.h = h
8b095871 19760
9987f0c1 19761 this.infinity = new Point(this, null, null, BigInteger.ZERO)
8b095871 19762
9987f0c1
IC
19763 // result caching
19764 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
8b095871 19765
9987f0c1
IC
19766 // determine size of p in bytes
19767 this.pLength = Math.floor((this.p.bitLength() + 7) / 8)
19768}
8b095871 19769
9987f0c1
IC
19770Curve.prototype.pointFromX = function (isOdd, x) {
19771 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
19772 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
8b095871 19773
9987f0c1
IC
19774 var y = beta
19775 if (beta.isEven() ^ !isOdd) {
19776 y = this.p.subtract(y) // -y % p
8b095871 19777 }
9987f0c1
IC
19778
19779 return Point.fromAffine(this, x, y)
8b095871
IC
19780}
19781
9987f0c1
IC
19782Curve.prototype.isInfinity = function (Q) {
19783 if (Q === this.infinity) return true
8b095871 19784
9987f0c1
IC
19785 return Q.z.signum() === 0 && Q.y.signum() !== 0
19786}
8b095871 19787
9987f0c1
IC
19788Curve.prototype.isOnCurve = function (Q) {
19789 if (this.isInfinity(Q)) return true
8b095871 19790
9987f0c1
IC
19791 var x = Q.affineX
19792 var y = Q.affineY
19793 var a = this.a
19794 var b = this.b
19795 var p = this.p
8b095871 19796
9987f0c1
IC
19797 // Check that xQ and yQ are integers in the interval [0, p - 1]
19798 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
19799 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
8b095871 19800
9987f0c1
IC
19801 // and check that y^2 = x^3 + ax + b (mod p)
19802 var lhs = y.square().mod(p)
19803 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
19804 return lhs.equals(rhs)
19805}
8b095871 19806
9987f0c1
IC
19807/**
19808 * Validate an elliptic curve point.
19809 *
19810 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
19811 */
19812Curve.prototype.validate = function (Q) {
19813 // Check Q != O
19814 assert(!this.isInfinity(Q), 'Point is at infinity')
19815 assert(this.isOnCurve(Q), 'Point is not on the curve')
19816
19817 // Check nQ = O (where Q is a scalar multiple of G)
19818 var nQ = Q.multiply(this.n)
19819 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
8b095871 19820
9987f0c1
IC
19821 return true
19822}
8b095871 19823
9987f0c1 19824module.exports = Curve
8b095871 19825
9987f0c1
IC
19826},{"./point":91,"assert":1,"bigi":37}],88:[function(require,module,exports){
19827module.exports={
19828 "secp128r1": {
19829 "p": "fffffffdffffffffffffffffffffffff",
19830 "a": "fffffffdfffffffffffffffffffffffc",
19831 "b": "e87579c11079f43dd824993c2cee5ed3",
19832 "n": "fffffffe0000000075a30d1b9038a115",
19833 "h": "01",
19834 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
19835 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
19836 },
19837 "secp160k1": {
19838 "p": "fffffffffffffffffffffffffffffffeffffac73",
19839 "a": "00",
19840 "b": "07",
19841 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
19842 "h": "01",
19843 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
19844 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
19845 },
19846 "secp160r1": {
19847 "p": "ffffffffffffffffffffffffffffffff7fffffff",
19848 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
19849 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
19850 "n": "0100000000000000000001f4c8f927aed3ca752257",
19851 "h": "01",
19852 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
19853 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
19854 },
19855 "secp192k1": {
19856 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
19857 "a": "00",
19858 "b": "03",
19859 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
19860 "h": "01",
19861 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
19862 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
19863 },
19864 "secp192r1": {
19865 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
19866 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
19867 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
19868 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
19869 "h": "01",
19870 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
19871 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
19872 },
19873 "secp256k1": {
19874 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
19875 "a": "00",
19876 "b": "07",
19877 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
19878 "h": "01",
19879 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
19880 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
19881 },
19882 "secp256r1": {
19883 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
19884 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
19885 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
19886 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
19887 "h": "01",
19888 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
19889 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
19890 }
8b095871
IC
19891}
19892
9987f0c1
IC
19893},{}],89:[function(require,module,exports){
19894var Point = require('./point')
19895var Curve = require('./curve')
8b095871 19896
9987f0c1 19897var getCurveByName = require('./names')
8b095871 19898
9987f0c1
IC
19899module.exports = {
19900 Curve: Curve,
19901 Point: Point,
19902 getCurveByName: getCurveByName
8b095871
IC
19903}
19904
9987f0c1
IC
19905},{"./curve":87,"./names":90,"./point":91}],90:[function(require,module,exports){
19906var BigInteger = require('bigi')
8b095871 19907
9987f0c1
IC
19908var curves = require('./curves.json')
19909var Curve = require('./curve')
8b095871 19910
9987f0c1
IC
19911function getCurveByName (name) {
19912 var curve = curves[name]
19913 if (!curve) return null
8b095871 19914
9987f0c1
IC
19915 var p = new BigInteger(curve.p, 16)
19916 var a = new BigInteger(curve.a, 16)
19917 var b = new BigInteger(curve.b, 16)
19918 var n = new BigInteger(curve.n, 16)
19919 var h = new BigInteger(curve.h, 16)
19920 var Gx = new BigInteger(curve.Gx, 16)
19921 var Gy = new BigInteger(curve.Gy, 16)
8b095871 19922
9987f0c1 19923 return new Curve(p, a, b, Gx, Gy, n, h)
8b095871
IC
19924}
19925
9987f0c1 19926module.exports = getCurveByName
8b095871 19927
9987f0c1
IC
19928},{"./curve":87,"./curves.json":88,"bigi":37}],91:[function(require,module,exports){
19929(function (Buffer){
19930var assert = require('assert')
19931var BigInteger = require('bigi')
8b095871 19932
9987f0c1 19933var THREE = BigInteger.valueOf(3)
8b095871 19934
9987f0c1
IC
19935function Point (curve, x, y, z) {
19936 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
8b095871 19937
9987f0c1
IC
19938 this.curve = curve
19939 this.x = x
19940 this.y = y
19941 this.z = z
19942 this._zInv = null
8b095871 19943
9987f0c1 19944 this.compressed = true
8b095871
IC
19945}
19946
9987f0c1
IC
19947Object.defineProperty(Point.prototype, 'zInv', {
19948 get: function () {
19949 if (this._zInv === null) {
19950 this._zInv = this.z.modInverse(this.curve.p)
19951 }
8b095871 19952
9987f0c1
IC
19953 return this._zInv
19954 }
19955})
8b095871 19956
9987f0c1
IC
19957Object.defineProperty(Point.prototype, 'affineX', {
19958 get: function () {
19959 return this.x.multiply(this.zInv).mod(this.curve.p)
19960 }
19961})
19962
19963Object.defineProperty(Point.prototype, 'affineY', {
19964 get: function () {
19965 return this.y.multiply(this.zInv).mod(this.curve.p)
19966 }
19967})
19968
19969Point.fromAffine = function (curve, x, y) {
19970 return new Point(curve, x, y, BigInteger.ONE)
8b095871
IC
19971}
19972
9987f0c1
IC
19973Point.prototype.equals = function (other) {
19974 if (other === this) return true
19975 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
19976 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
8b095871 19977
9987f0c1
IC
19978 // u = Y2 * Z1 - Y1 * Z2
19979 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
8b095871 19980
9987f0c1 19981 if (u.signum() !== 0) return false
8b095871 19982
9987f0c1
IC
19983 // v = X2 * Z1 - X1 * Z2
19984 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
8b095871 19985
9987f0c1
IC
19986 return v.signum() === 0
19987}
8b095871 19988
9987f0c1
IC
19989Point.prototype.negate = function () {
19990 var y = this.curve.p.subtract(this.y)
8b095871 19991
9987f0c1 19992 return new Point(this.curve, this.x, y, this.z)
8b095871
IC
19993}
19994
9987f0c1
IC
19995Point.prototype.add = function (b) {
19996 if (this.curve.isInfinity(this)) return b
19997 if (this.curve.isInfinity(b)) return this
19998
19999 var x1 = this.x
20000 var y1 = this.y
20001 var x2 = b.x
20002 var y2 = b.y
8b095871 20003
9987f0c1
IC
20004 // u = Y2 * Z1 - Y1 * Z2
20005 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
20006 // v = X2 * Z1 - X1 * Z2
20007 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
8b095871 20008
9987f0c1
IC
20009 if (v.signum() === 0) {
20010 if (u.signum() === 0) {
20011 return this.twice() // this == b, so double
20012 }
8b095871 20013
9987f0c1 20014 return this.curve.infinity // this = -b, so infinity
8b095871 20015 }
9987f0c1
IC
20016
20017 var v2 = v.square()
20018 var v3 = v2.multiply(v)
20019 var x1v2 = x1.multiply(v2)
20020 var zu2 = u.square().multiply(this.z)
20021
20022 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
20023 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
20024 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
20025 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)
20026 // z3 = v^3 * z1 * z2
20027 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
20028
20029 return new Point(this.curve, x3, y3, z3)
8b095871
IC
20030}
20031
9987f0c1
IC
20032Point.prototype.twice = function () {
20033 if (this.curve.isInfinity(this)) return this
20034 if (this.y.signum() === 0) return this.curve.infinity
8b095871 20035
9987f0c1
IC
20036 var x1 = this.x
20037 var y1 = this.y
8b095871 20038
9987f0c1
IC
20039 var y1z1 = y1.multiply(this.z).mod(this.curve.p)
20040 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
20041 var a = this.curve.a
8b095871 20042
9987f0c1
IC
20043 // w = 3 * x1^2 + a * z1^2
20044 var w = x1.square().multiply(THREE)
8b095871 20045
9987f0c1
IC
20046 if (a.signum() !== 0) {
20047 w = w.add(this.z.square().multiply(a))
20048 }
8b095871 20049
9987f0c1
IC
20050 w = w.mod(this.curve.p)
20051 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
20052 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
20053 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
20054 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
20055 // z3 = 8 * (y1 * z1)^3
20056 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
8b095871 20057
9987f0c1 20058 return new Point(this.curve, x3, y3, z3)
8b095871
IC
20059}
20060
9987f0c1
IC
20061// Simple NAF (Non-Adjacent Form) multiplication algorithm
20062// TODO: modularize the multiplication algorithm
20063Point.prototype.multiply = function (k) {
20064 if (this.curve.isInfinity(this)) return this
20065 if (k.signum() === 0) return this.curve.infinity
8b095871 20066
9987f0c1
IC
20067 var e = k
20068 var h = e.multiply(THREE)
8b095871 20069
9987f0c1
IC
20070 var neg = this.negate()
20071 var R = this
8b095871 20072
9987f0c1
IC
20073 for (var i = h.bitLength() - 2; i > 0; --i) {
20074 var hBit = h.testBit(i)
20075 var eBit = e.testBit(i)
8b095871 20076
9987f0c1 20077 R = R.twice()
8b095871 20078
9987f0c1
IC
20079 if (hBit !== eBit) {
20080 R = R.add(hBit ? this : neg)
20081 }
8b095871
IC
20082 }
20083
9987f0c1
IC
20084 return R
20085}
8b095871 20086
9987f0c1
IC
20087// Compute this*j + x*k (simultaneous multiplication)
20088Point.prototype.multiplyTwo = function (j, x, k) {
20089 var i = Math.max(j.bitLength(), k.bitLength()) - 1
20090 var R = this.curve.infinity
20091 var both = this.add(x)
20092
20093 while (i >= 0) {
20094 var jBit = j.testBit(i)
20095 var kBit = k.testBit(i)
20096
20097 R = R.twice()
20098
20099 if (jBit) {
20100 if (kBit) {
20101 R = R.add(both)
20102 } else {
20103 R = R.add(this)
20104 }
20105 } else if (kBit) {
20106 R = R.add(x)
20107 }
20108 --i
8b095871
IC
20109 }
20110
9987f0c1
IC
20111 return R
20112}
8b095871 20113
9987f0c1
IC
20114Point.prototype.getEncoded = function (compressed) {
20115 if (compressed == null) compressed = this.compressed
20116 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
8b095871 20117
9987f0c1
IC
20118 var x = this.affineX
20119 var y = this.affineY
20120 var byteLength = this.curve.pLength
20121 var buffer
20122
20123 // 0x02/0x03 | X
20124 if (compressed) {
20125 buffer = new Buffer(1 + byteLength)
20126 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
8b095871 20127
9987f0c1 20128 // 0x04 | X | Y
8b095871 20129 } else {
9987f0c1
IC
20130 buffer = new Buffer(1 + byteLength + byteLength)
20131 buffer.writeUInt8(0x04, 0)
8b095871 20132
9987f0c1 20133 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
8b095871
IC
20134 }
20135
9987f0c1 20136 x.toBuffer(byteLength).copy(buffer, 1)
8b095871 20137
9987f0c1 20138 return buffer
8b095871
IC
20139}
20140
9987f0c1
IC
20141Point.decodeFrom = function (curve, buffer) {
20142 var type = buffer.readUInt8(0)
20143 var compressed = (type !== 4)
8b095871 20144
9987f0c1
IC
20145 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
20146 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
8b095871 20147
9987f0c1
IC
20148 var Q
20149 if (compressed) {
20150 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
20151 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
8b095871 20152
9987f0c1
IC
20153 var isOdd = (type === 0x03)
20154 Q = curve.pointFromX(isOdd, x)
20155 } else {
20156 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
8b095871 20157
9987f0c1
IC
20158 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
20159 Q = Point.fromAffine(curve, x, y)
20160 }
8b095871 20161
9987f0c1
IC
20162 Q.compressed = compressed
20163 return Q
8b095871
IC
20164}
20165
9987f0c1
IC
20166Point.prototype.toString = function () {
20167 if (this.curve.isInfinity(this)) return '(INFINITY)'
8b095871 20168
9987f0c1
IC
20169 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
20170}
8b095871 20171
9987f0c1 20172module.exports = Point
8b095871 20173
9987f0c1
IC
20174}).call(this,require("buffer").Buffer)
20175},{"assert":1,"bigi":37,"buffer":4}],92:[function(require,module,exports){
20176(function (Buffer){
20177'use strict'
20178var Transform = require('stream').Transform
20179var inherits = require('inherits')
8b095871 20180
9987f0c1
IC
20181function HashBase (blockSize) {
20182 Transform.call(this)
8b095871 20183
9987f0c1
IC
20184 this._block = new Buffer(blockSize)
20185 this._blockSize = blockSize
20186 this._blockOffset = 0
20187 this._length = [0, 0, 0, 0]
8b095871 20188
9987f0c1
IC
20189 this._finalized = false
20190}
8b095871 20191
9987f0c1 20192inherits(HashBase, Transform)
8b095871 20193
9987f0c1
IC
20194HashBase.prototype._transform = function (chunk, encoding, callback) {
20195 var error = null
20196 try {
20197 if (encoding !== 'buffer') chunk = new Buffer(chunk, encoding)
20198 this.update(chunk)
20199 } catch (err) {
20200 error = err
20201 }
8b095871 20202
9987f0c1
IC
20203 callback(error)
20204}
8b095871 20205
9987f0c1
IC
20206HashBase.prototype._flush = function (callback) {
20207 var error = null
20208 try {
20209 this.push(this._digest())
20210 } catch (err) {
20211 error = err
8b095871
IC
20212 }
20213
9987f0c1 20214 callback(error)
8b095871
IC
20215}
20216
9987f0c1
IC
20217HashBase.prototype.update = function (data, encoding) {
20218 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
20219 if (this._finalized) throw new Error('Digest already called')
20220 if (!Buffer.isBuffer(data)) data = new Buffer(data, encoding || 'binary')
8b095871 20221
9987f0c1
IC
20222 // consume data
20223 var block = this._block
20224 var offset = 0
20225 while (this._blockOffset + data.length - offset >= this._blockSize) {
20226 for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]
20227 this._update()
20228 this._blockOffset = 0
20229 }
20230 while (offset < data.length) block[this._blockOffset++] = data[offset++]
8b095871 20231
9987f0c1
IC
20232 // update length
20233 for (var j = 0, carry = data.length * 8; carry > 0; ++j) {
20234 this._length[j] += carry
20235 carry = (this._length[j] / 0x0100000000) | 0
20236 if (carry > 0) this._length[j] -= 0x0100000000 * carry
20237 }
8b095871 20238
9987f0c1
IC
20239 return this
20240}
8b095871 20241
9987f0c1
IC
20242HashBase.prototype._update = function (data) {
20243 throw new Error('_update is not implemented')
20244}
8b095871 20245
9987f0c1
IC
20246HashBase.prototype.digest = function (encoding) {
20247 if (this._finalized) throw new Error('Digest already called')
20248 this._finalized = true
8b095871 20249
9987f0c1
IC
20250 var digest = this._digest()
20251 if (encoding !== undefined) digest = digest.toString(encoding)
20252 return digest
20253}
8b095871 20254
9987f0c1
IC
20255HashBase.prototype._digest = function () {
20256 throw new Error('_digest is not implemented')
20257}
8b095871 20258
9987f0c1 20259module.exports = HashBase
8b095871 20260
9987f0c1
IC
20261}).call(this,require("buffer").Buffer)
20262},{"buffer":4,"inherits":93,"stream":27}],93:[function(require,module,exports){
20263arguments[4][8][0].apply(exports,arguments)
20264},{"dup":8}],94:[function(require,module,exports){
20265(function (Buffer){
20266// constant-space merkle root calculation algorithm
20267module.exports = function fastRoot (values, digestFn) {
20268 if (!Array.isArray(values)) throw TypeError('Expected values Array')
20269 if (typeof digestFn !== 'function') throw TypeError('Expected digest Function')
8b095871 20270
9987f0c1
IC
20271 var length = values.length
20272 var results = values.concat()
8b095871 20273
9987f0c1
IC
20274 while (length > 1) {
20275 var j = 0
8b095871 20276
9987f0c1
IC
20277 for (var i = 0; i < length; i += 2, ++j) {
20278 var left = results[i]
20279 var right = i + 1 === length ? left : results[i + 1]
20280 var data = Buffer.concat([left, right])
8b095871 20281
9987f0c1 20282 results[j] = digestFn(data)
8b095871
IC
20283 }
20284
9987f0c1 20285 length = j
8b095871
IC
20286 }
20287
9987f0c1 20288 return results[0]
8b095871
IC
20289}
20290
8b095871 20291}).call(this,require("buffer").Buffer)
9987f0c1
IC
20292},{"buffer":4}],95:[function(require,module,exports){
20293var OPS = require('bitcoin-ops')
20294
20295function encodingLength (i) {
20296 return i < OPS.OP_PUSHDATA1 ? 1
20297 : i <= 0xff ? 2
20298 : i <= 0xffff ? 3
20299 : 5
8b095871
IC
20300}
20301
9987f0c1
IC
20302function encode (buffer, number, offset) {
20303 var size = encodingLength(number)
8b095871 20304
9987f0c1
IC
20305 // ~6 bit
20306 if (size === 1) {
20307 buffer.writeUInt8(number, offset)
8b095871 20308
9987f0c1
IC
20309 // 8 bit
20310 } else if (size === 2) {
20311 buffer.writeUInt8(OPS.OP_PUSHDATA1, offset)
20312 buffer.writeUInt8(number, offset + 1)
20313
20314 // 16 bit
20315 } else if (size === 3) {
20316 buffer.writeUInt8(OPS.OP_PUSHDATA2, offset)
20317 buffer.writeUInt16LE(number, offset + 1)
8b095871 20318
9987f0c1
IC
20319 // 32 bit
20320 } else {
20321 buffer.writeUInt8(OPS.OP_PUSHDATA4, offset)
20322 buffer.writeUInt32LE(number, offset + 1)
20323 }
8b095871 20324
9987f0c1 20325 return size
8b095871
IC
20326}
20327
9987f0c1
IC
20328function decode (buffer, offset) {
20329 var opcode = buffer.readUInt8(offset)
20330 var number, size
8b095871 20331
9987f0c1
IC
20332 // ~6 bit
20333 if (opcode < OPS.OP_PUSHDATA1) {
20334 number = opcode
20335 size = 1
8b095871 20336
9987f0c1
IC
20337 // 8 bit
20338 } else if (opcode === OPS.OP_PUSHDATA1) {
20339 if (offset + 2 > buffer.length) return null
20340 number = buffer.readUInt8(offset + 1)
20341 size = 2
8b095871 20342
9987f0c1
IC
20343 // 16 bit
20344 } else if (opcode === OPS.OP_PUSHDATA2) {
20345 if (offset + 3 > buffer.length) return null
20346 number = buffer.readUInt16LE(offset + 1)
20347 size = 3
8b095871 20348
9987f0c1
IC
20349 // 32 bit
20350 } else {
20351 if (offset + 5 > buffer.length) return null
20352 if (opcode !== OPS.OP_PUSHDATA4) throw new Error('Unexpected opcode')
8b095871 20353
9987f0c1
IC
20354 number = buffer.readUInt32LE(offset + 1)
20355 size = 5
20356 }
8b095871 20357
9987f0c1
IC
20358 return {
20359 opcode: opcode,
20360 number: number,
20361 size: size
20362 }
8b095871
IC
20363}
20364
20365module.exports = {
9987f0c1
IC
20366 encodingLength: encodingLength,
20367 encode: encode,
20368 decode: decode
8b095871
IC
20369}
20370
9987f0c1
IC
20371},{"bitcoin-ops":40}],96:[function(require,module,exports){
20372(function (process,global){
20373'use strict'
8b095871 20374
9987f0c1
IC
20375function oldBrowser () {
20376 throw new Error('secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11')
8b095871
IC
20377}
20378
9987f0c1
IC
20379var Buffer = require('safe-buffer').Buffer
20380var crypto = global.crypto || global.msCrypto
8b095871 20381
9987f0c1
IC
20382if (crypto && crypto.getRandomValues) {
20383 module.exports = randomBytes
20384} else {
20385 module.exports = oldBrowser
20386}
8b095871 20387
9987f0c1
IC
20388function randomBytes (size, cb) {
20389 // phantomjs needs to throw
20390 if (size > 65536) throw new Error('requested too many random bytes')
20391 // in case browserify isn't using the Uint8Array version
20392 var rawBytes = new global.Uint8Array(size)
8b095871 20393
9987f0c1
IC
20394 // This will not work in older browsers.
20395 // See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
20396 if (size > 0) { // getRandomValues fails on IE if size == 0
20397 crypto.getRandomValues(rawBytes)
8b095871 20398 }
8b095871 20399
9987f0c1
IC
20400 // XXX: phantomjs doesn't like a buffer being passed here
20401 var bytes = Buffer.from(rawBytes.buffer)
8b095871 20402
9987f0c1
IC
20403 if (typeof cb === 'function') {
20404 return process.nextTick(function () {
20405 cb(null, bytes)
20406 })
20407 }
8b095871 20408
9987f0c1 20409 return bytes
8b095871
IC
20410}
20411
9987f0c1
IC
20412}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
20413},{"_process":12,"safe-buffer":98}],97:[function(require,module,exports){
20414(function (Buffer){
20415'use strict'
20416var inherits = require('inherits')
20417var HashBase = require('hash-base')
8b095871 20418
9987f0c1
IC
20419function RIPEMD160 () {
20420 HashBase.call(this, 64)
8b095871 20421
9987f0c1
IC
20422 // state
20423 this._a = 0x67452301
20424 this._b = 0xefcdab89
20425 this._c = 0x98badcfe
20426 this._d = 0x10325476
20427 this._e = 0xc3d2e1f0
8b095871
IC
20428}
20429
9987f0c1
IC
20430inherits(RIPEMD160, HashBase)
20431
20432RIPEMD160.prototype._update = function () {
20433 var m = new Array(16)
20434 for (var i = 0; i < 16; ++i) m[i] = this._block.readInt32LE(i * 4)
20435
20436 var al = this._a
20437 var bl = this._b
20438 var cl = this._c
20439 var dl = this._d
20440 var el = this._e
20441
20442 // Mj = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
20443 // K = 0x00000000
20444 // Sj = 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8
20445 al = fn1(al, bl, cl, dl, el, m[0], 0x00000000, 11); cl = rotl(cl, 10)
20446 el = fn1(el, al, bl, cl, dl, m[1], 0x00000000, 14); bl = rotl(bl, 10)
20447 dl = fn1(dl, el, al, bl, cl, m[2], 0x00000000, 15); al = rotl(al, 10)
20448 cl = fn1(cl, dl, el, al, bl, m[3], 0x00000000, 12); el = rotl(el, 10)
20449 bl = fn1(bl, cl, dl, el, al, m[4], 0x00000000, 5); dl = rotl(dl, 10)
20450 al = fn1(al, bl, cl, dl, el, m[5], 0x00000000, 8); cl = rotl(cl, 10)
20451 el = fn1(el, al, bl, cl, dl, m[6], 0x00000000, 7); bl = rotl(bl, 10)
20452 dl = fn1(dl, el, al, bl, cl, m[7], 0x00000000, 9); al = rotl(al, 10)
20453 cl = fn1(cl, dl, el, al, bl, m[8], 0x00000000, 11); el = rotl(el, 10)
20454 bl = fn1(bl, cl, dl, el, al, m[9], 0x00000000, 13); dl = rotl(dl, 10)
20455 al = fn1(al, bl, cl, dl, el, m[10], 0x00000000, 14); cl = rotl(cl, 10)
20456 el = fn1(el, al, bl, cl, dl, m[11], 0x00000000, 15); bl = rotl(bl, 10)
20457 dl = fn1(dl, el, al, bl, cl, m[12], 0x00000000, 6); al = rotl(al, 10)
20458 cl = fn1(cl, dl, el, al, bl, m[13], 0x00000000, 7); el = rotl(el, 10)
20459 bl = fn1(bl, cl, dl, el, al, m[14], 0x00000000, 9); dl = rotl(dl, 10)
20460 al = fn1(al, bl, cl, dl, el, m[15], 0x00000000, 8); cl = rotl(cl, 10)
20461
20462 // Mj = 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8
20463 // K = 0x5a827999
20464 // Sj = 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12
20465 el = fn2(el, al, bl, cl, dl, m[7], 0x5a827999, 7); bl = rotl(bl, 10)
20466 dl = fn2(dl, el, al, bl, cl, m[4], 0x5a827999, 6); al = rotl(al, 10)
20467 cl = fn2(cl, dl, el, al, bl, m[13], 0x5a827999, 8); el = rotl(el, 10)
20468 bl = fn2(bl, cl, dl, el, al, m[1], 0x5a827999, 13); dl = rotl(dl, 10)
20469 al = fn2(al, bl, cl, dl, el, m[10], 0x5a827999, 11); cl = rotl(cl, 10)
20470 el = fn2(el, al, bl, cl, dl, m[6], 0x5a827999, 9); bl = rotl(bl, 10)
20471 dl = fn2(dl, el, al, bl, cl, m[15], 0x5a827999, 7); al = rotl(al, 10)
20472 cl = fn2(cl, dl, el, al, bl, m[3], 0x5a827999, 15); el = rotl(el, 10)
20473 bl = fn2(bl, cl, dl, el, al, m[12], 0x5a827999, 7); dl = rotl(dl, 10)
20474 al = fn2(al, bl, cl, dl, el, m[0], 0x5a827999, 12); cl = rotl(cl, 10)
20475 el = fn2(el, al, bl, cl, dl, m[9], 0x5a827999, 15); bl = rotl(bl, 10)
20476 dl = fn2(dl, el, al, bl, cl, m[5], 0x5a827999, 9); al = rotl(al, 10)
20477 cl = fn2(cl, dl, el, al, bl, m[2], 0x5a827999, 11); el = rotl(el, 10)
20478 bl = fn2(bl, cl, dl, el, al, m[14], 0x5a827999, 7); dl = rotl(dl, 10)
20479 al = fn2(al, bl, cl, dl, el, m[11], 0x5a827999, 13); cl = rotl(cl, 10)
20480 el = fn2(el, al, bl, cl, dl, m[8], 0x5a827999, 12); bl = rotl(bl, 10)
20481
20482 // Mj = 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12
20483 // K = 0x6ed9eba1
20484 // Sj = 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5
20485 dl = fn3(dl, el, al, bl, cl, m[3], 0x6ed9eba1, 11); al = rotl(al, 10)
20486 cl = fn3(cl, dl, el, al, bl, m[10], 0x6ed9eba1, 13); el = rotl(el, 10)
20487 bl = fn3(bl, cl, dl, el, al, m[14], 0x6ed9eba1, 6); dl = rotl(dl, 10)
20488 al = fn3(al, bl, cl, dl, el, m[4], 0x6ed9eba1, 7); cl = rotl(cl, 10)
20489 el = fn3(el, al, bl, cl, dl, m[9], 0x6ed9eba1, 14); bl = rotl(bl, 10)
20490 dl = fn3(dl, el, al, bl, cl, m[15], 0x6ed9eba1, 9); al = rotl(al, 10)
20491 cl = fn3(cl, dl, el, al, bl, m[8], 0x6ed9eba1, 13); el = rotl(el, 10)
20492 bl = fn3(bl, cl, dl, el, al, m[1], 0x6ed9eba1, 15); dl = rotl(dl, 10)
20493 al = fn3(al, bl, cl, dl, el, m[2], 0x6ed9eba1, 14); cl = rotl(cl, 10)
20494 el = fn3(el, al, bl, cl, dl, m[7], 0x6ed9eba1, 8); bl = rotl(bl, 10)
20495 dl = fn3(dl, el, al, bl, cl, m[0], 0x6ed9eba1, 13); al = rotl(al, 10)
20496 cl = fn3(cl, dl, el, al, bl, m[6], 0x6ed9eba1, 6); el = rotl(el, 10)
20497 bl = fn3(bl, cl, dl, el, al, m[13], 0x6ed9eba1, 5); dl = rotl(dl, 10)
20498 al = fn3(al, bl, cl, dl, el, m[11], 0x6ed9eba1, 12); cl = rotl(cl, 10)
20499 el = fn3(el, al, bl, cl, dl, m[5], 0x6ed9eba1, 7); bl = rotl(bl, 10)
20500 dl = fn3(dl, el, al, bl, cl, m[12], 0x6ed9eba1, 5); al = rotl(al, 10)
20501
20502 // Mj = 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2
20503 // K = 0x8f1bbcdc
20504 // Sj = 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12
20505 cl = fn4(cl, dl, el, al, bl, m[1], 0x8f1bbcdc, 11); el = rotl(el, 10)
20506 bl = fn4(bl, cl, dl, el, al, m[9], 0x8f1bbcdc, 12); dl = rotl(dl, 10)
20507 al = fn4(al, bl, cl, dl, el, m[11], 0x8f1bbcdc, 14); cl = rotl(cl, 10)
20508 el = fn4(el, al, bl, cl, dl, m[10], 0x8f1bbcdc, 15); bl = rotl(bl, 10)
20509 dl = fn4(dl, el, al, bl, cl, m[0], 0x8f1bbcdc, 14); al = rotl(al, 10)
20510 cl = fn4(cl, dl, el, al, bl, m[8], 0x8f1bbcdc, 15); el = rotl(el, 10)
20511 bl = fn4(bl, cl, dl, el, al, m[12], 0x8f1bbcdc, 9); dl = rotl(dl, 10)
20512 al = fn4(al, bl, cl, dl, el, m[4], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
20513 el = fn4(el, al, bl, cl, dl, m[13], 0x8f1bbcdc, 9); bl = rotl(bl, 10)
20514 dl = fn4(dl, el, al, bl, cl, m[3], 0x8f1bbcdc, 14); al = rotl(al, 10)
20515 cl = fn4(cl, dl, el, al, bl, m[7], 0x8f1bbcdc, 5); el = rotl(el, 10)
20516 bl = fn4(bl, cl, dl, el, al, m[15], 0x8f1bbcdc, 6); dl = rotl(dl, 10)
20517 al = fn4(al, bl, cl, dl, el, m[14], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
20518 el = fn4(el, al, bl, cl, dl, m[5], 0x8f1bbcdc, 6); bl = rotl(bl, 10)
20519 dl = fn4(dl, el, al, bl, cl, m[6], 0x8f1bbcdc, 5); al = rotl(al, 10)
20520 cl = fn4(cl, dl, el, al, bl, m[2], 0x8f1bbcdc, 12); el = rotl(el, 10)
20521
20522 // Mj = 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
20523 // K = 0xa953fd4e
20524 // Sj = 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
20525 bl = fn5(bl, cl, dl, el, al, m[4], 0xa953fd4e, 9); dl = rotl(dl, 10)
20526 al = fn5(al, bl, cl, dl, el, m[0], 0xa953fd4e, 15); cl = rotl(cl, 10)
20527 el = fn5(el, al, bl, cl, dl, m[5], 0xa953fd4e, 5); bl = rotl(bl, 10)
20528 dl = fn5(dl, el, al, bl, cl, m[9], 0xa953fd4e, 11); al = rotl(al, 10)
20529 cl = fn5(cl, dl, el, al, bl, m[7], 0xa953fd4e, 6); el = rotl(el, 10)
20530 bl = fn5(bl, cl, dl, el, al, m[12], 0xa953fd4e, 8); dl = rotl(dl, 10)
20531 al = fn5(al, bl, cl, dl, el, m[2], 0xa953fd4e, 13); cl = rotl(cl, 10)
20532 el = fn5(el, al, bl, cl, dl, m[10], 0xa953fd4e, 12); bl = rotl(bl, 10)
20533 dl = fn5(dl, el, al, bl, cl, m[14], 0xa953fd4e, 5); al = rotl(al, 10)
20534 cl = fn5(cl, dl, el, al, bl, m[1], 0xa953fd4e, 12); el = rotl(el, 10)
20535 bl = fn5(bl, cl, dl, el, al, m[3], 0xa953fd4e, 13); dl = rotl(dl, 10)
20536 al = fn5(al, bl, cl, dl, el, m[8], 0xa953fd4e, 14); cl = rotl(cl, 10)
20537 el = fn5(el, al, bl, cl, dl, m[11], 0xa953fd4e, 11); bl = rotl(bl, 10)
20538 dl = fn5(dl, el, al, bl, cl, m[6], 0xa953fd4e, 8); al = rotl(al, 10)
20539 cl = fn5(cl, dl, el, al, bl, m[15], 0xa953fd4e, 5); el = rotl(el, 10)
20540 bl = fn5(bl, cl, dl, el, al, m[13], 0xa953fd4e, 6); dl = rotl(dl, 10)
20541
20542 var ar = this._a
20543 var br = this._b
20544 var cr = this._c
20545 var dr = this._d
20546 var er = this._e
20547
20548 // M'j = 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12
20549 // K' = 0x50a28be6
20550 // S'j = 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6
20551 ar = fn5(ar, br, cr, dr, er, m[5], 0x50a28be6, 8); cr = rotl(cr, 10)
20552 er = fn5(er, ar, br, cr, dr, m[14], 0x50a28be6, 9); br = rotl(br, 10)
20553 dr = fn5(dr, er, ar, br, cr, m[7], 0x50a28be6, 9); ar = rotl(ar, 10)
20554 cr = fn5(cr, dr, er, ar, br, m[0], 0x50a28be6, 11); er = rotl(er, 10)
20555 br = fn5(br, cr, dr, er, ar, m[9], 0x50a28be6, 13); dr = rotl(dr, 10)
20556 ar = fn5(ar, br, cr, dr, er, m[2], 0x50a28be6, 15); cr = rotl(cr, 10)
20557 er = fn5(er, ar, br, cr, dr, m[11], 0x50a28be6, 15); br = rotl(br, 10)
20558 dr = fn5(dr, er, ar, br, cr, m[4], 0x50a28be6, 5); ar = rotl(ar, 10)
20559 cr = fn5(cr, dr, er, ar, br, m[13], 0x50a28be6, 7); er = rotl(er, 10)
20560 br = fn5(br, cr, dr, er, ar, m[6], 0x50a28be6, 7); dr = rotl(dr, 10)
20561 ar = fn5(ar, br, cr, dr, er, m[15], 0x50a28be6, 8); cr = rotl(cr, 10)
20562 er = fn5(er, ar, br, cr, dr, m[8], 0x50a28be6, 11); br = rotl(br, 10)
20563 dr = fn5(dr, er, ar, br, cr, m[1], 0x50a28be6, 14); ar = rotl(ar, 10)
20564 cr = fn5(cr, dr, er, ar, br, m[10], 0x50a28be6, 14); er = rotl(er, 10)
20565 br = fn5(br, cr, dr, er, ar, m[3], 0x50a28be6, 12); dr = rotl(dr, 10)
20566 ar = fn5(ar, br, cr, dr, er, m[12], 0x50a28be6, 6); cr = rotl(cr, 10)
20567
20568 // M'j = 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2
20569 // K' = 0x5c4dd124
20570 // S'j = 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11
20571 er = fn4(er, ar, br, cr, dr, m[6], 0x5c4dd124, 9); br = rotl(br, 10)
20572 dr = fn4(dr, er, ar, br, cr, m[11], 0x5c4dd124, 13); ar = rotl(ar, 10)
20573 cr = fn4(cr, dr, er, ar, br, m[3], 0x5c4dd124, 15); er = rotl(er, 10)
20574 br = fn4(br, cr, dr, er, ar, m[7], 0x5c4dd124, 7); dr = rotl(dr, 10)
20575 ar = fn4(ar, br, cr, dr, er, m[0], 0x5c4dd124, 12); cr = rotl(cr, 10)
20576 er = fn4(er, ar, br, cr, dr, m[13], 0x5c4dd124, 8); br = rotl(br, 10)
20577 dr = fn4(dr, er, ar, br, cr, m[5], 0x5c4dd124, 9); ar = rotl(ar, 10)
20578 cr = fn4(cr, dr, er, ar, br, m[10], 0x5c4dd124, 11); er = rotl(er, 10)
20579 br = fn4(br, cr, dr, er, ar, m[14], 0x5c4dd124, 7); dr = rotl(dr, 10)
20580 ar = fn4(ar, br, cr, dr, er, m[15], 0x5c4dd124, 7); cr = rotl(cr, 10)
20581 er = fn4(er, ar, br, cr, dr, m[8], 0x5c4dd124, 12); br = rotl(br, 10)
20582 dr = fn4(dr, er, ar, br, cr, m[12], 0x5c4dd124, 7); ar = rotl(ar, 10)
20583 cr = fn4(cr, dr, er, ar, br, m[4], 0x5c4dd124, 6); er = rotl(er, 10)
20584 br = fn4(br, cr, dr, er, ar, m[9], 0x5c4dd124, 15); dr = rotl(dr, 10)
20585 ar = fn4(ar, br, cr, dr, er, m[1], 0x5c4dd124, 13); cr = rotl(cr, 10)
20586 er = fn4(er, ar, br, cr, dr, m[2], 0x5c4dd124, 11); br = rotl(br, 10)
20587
20588 // M'j = 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13
20589 // K' = 0x6d703ef3
20590 // S'j = 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5
20591 dr = fn3(dr, er, ar, br, cr, m[15], 0x6d703ef3, 9); ar = rotl(ar, 10)
20592 cr = fn3(cr, dr, er, ar, br, m[5], 0x6d703ef3, 7); er = rotl(er, 10)
20593 br = fn3(br, cr, dr, er, ar, m[1], 0x6d703ef3, 15); dr = rotl(dr, 10)
20594 ar = fn3(ar, br, cr, dr, er, m[3], 0x6d703ef3, 11); cr = rotl(cr, 10)
20595 er = fn3(er, ar, br, cr, dr, m[7], 0x6d703ef3, 8); br = rotl(br, 10)
20596 dr = fn3(dr, er, ar, br, cr, m[14], 0x6d703ef3, 6); ar = rotl(ar, 10)
20597 cr = fn3(cr, dr, er, ar, br, m[6], 0x6d703ef3, 6); er = rotl(er, 10)
20598 br = fn3(br, cr, dr, er, ar, m[9], 0x6d703ef3, 14); dr = rotl(dr, 10)
20599 ar = fn3(ar, br, cr, dr, er, m[11], 0x6d703ef3, 12); cr = rotl(cr, 10)
20600 er = fn3(er, ar, br, cr, dr, m[8], 0x6d703ef3, 13); br = rotl(br, 10)
20601 dr = fn3(dr, er, ar, br, cr, m[12], 0x6d703ef3, 5); ar = rotl(ar, 10)
20602 cr = fn3(cr, dr, er, ar, br, m[2], 0x6d703ef3, 14); er = rotl(er, 10)
20603 br = fn3(br, cr, dr, er, ar, m[10], 0x6d703ef3, 13); dr = rotl(dr, 10)
20604 ar = fn3(ar, br, cr, dr, er, m[0], 0x6d703ef3, 13); cr = rotl(cr, 10)
20605 er = fn3(er, ar, br, cr, dr, m[4], 0x6d703ef3, 7); br = rotl(br, 10)
20606 dr = fn3(dr, er, ar, br, cr, m[13], 0x6d703ef3, 5); ar = rotl(ar, 10)
20607
20608 // M'j = 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14
20609 // K' = 0x7a6d76e9
20610 // S'j = 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8
20611 cr = fn2(cr, dr, er, ar, br, m[8], 0x7a6d76e9, 15); er = rotl(er, 10)
20612 br = fn2(br, cr, dr, er, ar, m[6], 0x7a6d76e9, 5); dr = rotl(dr, 10)
20613 ar = fn2(ar, br, cr, dr, er, m[4], 0x7a6d76e9, 8); cr = rotl(cr, 10)
20614 er = fn2(er, ar, br, cr, dr, m[1], 0x7a6d76e9, 11); br = rotl(br, 10)
20615 dr = fn2(dr, er, ar, br, cr, m[3], 0x7a6d76e9, 14); ar = rotl(ar, 10)
20616 cr = fn2(cr, dr, er, ar, br, m[11], 0x7a6d76e9, 14); er = rotl(er, 10)
20617 br = fn2(br, cr, dr, er, ar, m[15], 0x7a6d76e9, 6); dr = rotl(dr, 10)
20618 ar = fn2(ar, br, cr, dr, er, m[0], 0x7a6d76e9, 14); cr = rotl(cr, 10)
20619 er = fn2(er, ar, br, cr, dr, m[5], 0x7a6d76e9, 6); br = rotl(br, 10)
20620 dr = fn2(dr, er, ar, br, cr, m[12], 0x7a6d76e9, 9); ar = rotl(ar, 10)
20621 cr = fn2(cr, dr, er, ar, br, m[2], 0x7a6d76e9, 12); er = rotl(er, 10)
20622 br = fn2(br, cr, dr, er, ar, m[13], 0x7a6d76e9, 9); dr = rotl(dr, 10)
20623 ar = fn2(ar, br, cr, dr, er, m[9], 0x7a6d76e9, 12); cr = rotl(cr, 10)
20624 er = fn2(er, ar, br, cr, dr, m[7], 0x7a6d76e9, 5); br = rotl(br, 10)
20625 dr = fn2(dr, er, ar, br, cr, m[10], 0x7a6d76e9, 15); ar = rotl(ar, 10)
20626 cr = fn2(cr, dr, er, ar, br, m[14], 0x7a6d76e9, 8); er = rotl(er, 10)
20627
20628 // M'j = 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
20629 // K' = 0x00000000
20630 // S'j = 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
20631 br = fn1(br, cr, dr, er, ar, m[12], 0x00000000, 8); dr = rotl(dr, 10)
20632 ar = fn1(ar, br, cr, dr, er, m[15], 0x00000000, 5); cr = rotl(cr, 10)
20633 er = fn1(er, ar, br, cr, dr, m[10], 0x00000000, 12); br = rotl(br, 10)
20634 dr = fn1(dr, er, ar, br, cr, m[4], 0x00000000, 9); ar = rotl(ar, 10)
20635 cr = fn1(cr, dr, er, ar, br, m[1], 0x00000000, 12); er = rotl(er, 10)
20636 br = fn1(br, cr, dr, er, ar, m[5], 0x00000000, 5); dr = rotl(dr, 10)
20637 ar = fn1(ar, br, cr, dr, er, m[8], 0x00000000, 14); cr = rotl(cr, 10)
20638 er = fn1(er, ar, br, cr, dr, m[7], 0x00000000, 6); br = rotl(br, 10)
20639 dr = fn1(dr, er, ar, br, cr, m[6], 0x00000000, 8); ar = rotl(ar, 10)
20640 cr = fn1(cr, dr, er, ar, br, m[2], 0x00000000, 13); er = rotl(er, 10)
20641 br = fn1(br, cr, dr, er, ar, m[13], 0x00000000, 6); dr = rotl(dr, 10)
20642 ar = fn1(ar, br, cr, dr, er, m[14], 0x00000000, 5); cr = rotl(cr, 10)
20643 er = fn1(er, ar, br, cr, dr, m[0], 0x00000000, 15); br = rotl(br, 10)
20644 dr = fn1(dr, er, ar, br, cr, m[3], 0x00000000, 13); ar = rotl(ar, 10)
20645 cr = fn1(cr, dr, er, ar, br, m[9], 0x00000000, 11); er = rotl(er, 10)
20646 br = fn1(br, cr, dr, er, ar, m[11], 0x00000000, 11); dr = rotl(dr, 10)
20647
20648 // change state
20649 var t = (this._b + cl + dr) | 0
20650 this._b = (this._c + dl + er) | 0
20651 this._c = (this._d + el + ar) | 0
20652 this._d = (this._e + al + br) | 0
20653 this._e = (this._a + bl + cr) | 0
20654 this._a = t
20655}
20656
20657RIPEMD160.prototype._digest = function () {
20658 // create padding and handle blocks
20659 this._block[this._blockOffset++] = 0x80
20660 if (this._blockOffset > 56) {
20661 this._block.fill(0, this._blockOffset, 64)
20662 this._update()
20663 this._blockOffset = 0
20664 }
20665
20666 this._block.fill(0, this._blockOffset, 56)
20667 this._block.writeUInt32LE(this._length[0], 56)
20668 this._block.writeUInt32LE(this._length[1], 60)
20669 this._update()
20670
20671 // produce result
20672 var buffer = new Buffer(20)
20673 buffer.writeInt32LE(this._a, 0)
20674 buffer.writeInt32LE(this._b, 4)
20675 buffer.writeInt32LE(this._c, 8)
20676 buffer.writeInt32LE(this._d, 12)
20677 buffer.writeInt32LE(this._e, 16)
20678 return buffer
20679}
8b095871 20680
9987f0c1
IC
20681function rotl (x, n) {
20682 return (x << n) | (x >>> (32 - n))
20683}
8b095871 20684
9987f0c1
IC
20685function fn1 (a, b, c, d, e, m, k, s) {
20686 return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0
20687}
8b095871 20688
9987f0c1
IC
20689function fn2 (a, b, c, d, e, m, k, s) {
20690 return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0
20691}
8b095871 20692
9987f0c1
IC
20693function fn3 (a, b, c, d, e, m, k, s) {
20694 return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0
20695}
8b095871 20696
9987f0c1
IC
20697function fn4 (a, b, c, d, e, m, k, s) {
20698 return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0
20699}
8b095871 20700
9987f0c1
IC
20701function fn5 (a, b, c, d, e, m, k, s) {
20702 return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0
20703}
8b095871 20704
9987f0c1 20705module.exports = RIPEMD160
8b095871 20706
9987f0c1
IC
20707}).call(this,require("buffer").Buffer)
20708},{"buffer":4,"hash-base":92,"inherits":93}],98:[function(require,module,exports){
20709arguments[4][26][0].apply(exports,arguments)
20710},{"buffer":4,"dup":26}],99:[function(require,module,exports){
20711(function (Buffer){
20712// prototype class for hash functions
20713function Hash (blockSize, finalSize) {
20714 this._block = new Buffer(blockSize)
20715 this._finalSize = finalSize
20716 this._blockSize = blockSize
20717 this._len = 0
20718 this._s = 0
20719}
20720
20721Hash.prototype.update = function (data, enc) {
20722 if (typeof data === 'string') {
20723 enc = enc || 'utf8'
20724 data = new Buffer(data, enc)
8b095871
IC
20725 }
20726
9987f0c1
IC
20727 var l = this._len += data.length
20728 var s = this._s || 0
20729 var f = 0
20730 var buffer = this._block
8b095871 20731
9987f0c1
IC
20732 while (s < l) {
20733 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
20734 var ch = (t - f)
8b095871 20735
9987f0c1
IC
20736 for (var i = 0; i < ch; i++) {
20737 buffer[(s % this._blockSize) + i] = data[i + f]
8b095871
IC
20738 }
20739
9987f0c1
IC
20740 s += ch
20741 f += ch
8b095871 20742
9987f0c1
IC
20743 if ((s % this._blockSize) === 0) {
20744 this._update(buffer)
20745 }
20746 }
20747 this._s = s
8b095871 20748
9987f0c1
IC
20749 return this
20750}
8b095871 20751
9987f0c1
IC
20752Hash.prototype.digest = function (enc) {
20753 // Suppose the length of the message M, in bits, is l
20754 var l = this._len * 8
8b095871 20755
9987f0c1
IC
20756 // Append the bit 1 to the end of the message
20757 this._block[this._len % this._blockSize] = 0x80
8b095871 20758
9987f0c1
IC
20759 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
20760 this._block.fill(0, this._len % this._blockSize + 1)
8b095871 20761
9987f0c1
IC
20762 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
20763 this._update(this._block)
20764 this._block.fill(0)
20765 }
8b095871 20766
9987f0c1
IC
20767 // to this append the block which is equal to the number l written in binary
20768 // TODO: handle case where l is > Math.pow(2, 29)
20769 this._block.writeInt32BE(l, this._blockSize - 4)
8b095871 20770
9987f0c1 20771 var hash = this._update(this._block) || this._hash()
8b095871 20772
9987f0c1 20773 return enc ? hash.toString(enc) : hash
8b095871
IC
20774}
20775
9987f0c1
IC
20776Hash.prototype._update = function () {
20777 throw new Error('_update must be implemented by subclass')
8b095871
IC
20778}
20779
9987f0c1 20780module.exports = Hash
8b095871 20781
9987f0c1
IC
20782}).call(this,require("buffer").Buffer)
20783},{"buffer":4}],100:[function(require,module,exports){
20784var exports = module.exports = function SHA (algorithm) {
20785 algorithm = algorithm.toLowerCase()
8b095871 20786
9987f0c1
IC
20787 var Algorithm = exports[algorithm]
20788 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
8b095871 20789
9987f0c1 20790 return new Algorithm()
8b095871
IC
20791}
20792
9987f0c1
IC
20793exports.sha = require('./sha')
20794exports.sha1 = require('./sha1')
20795exports.sha224 = require('./sha224')
20796exports.sha256 = require('./sha256')
20797exports.sha384 = require('./sha384')
20798exports.sha512 = require('./sha512')
8b095871 20799
9987f0c1 20800},{"./sha":101,"./sha1":102,"./sha224":103,"./sha256":104,"./sha384":105,"./sha512":106}],101:[function(require,module,exports){
8b095871 20801(function (Buffer){
9987f0c1
IC
20802/*
20803 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
20804 * in FIPS PUB 180-1
20805 * This source code is derived from sha1.js of the same repository.
20806 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
20807 * operation was added.
20808 */
8b095871 20809
9987f0c1
IC
20810var inherits = require('inherits')
20811var Hash = require('./hash')
8b095871 20812
9987f0c1
IC
20813var K = [
20814 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
20815]
8b095871 20816
9987f0c1 20817var W = new Array(80)
8b095871 20818
9987f0c1
IC
20819function Sha () {
20820 this.init()
20821 this._w = W
8b095871 20822
9987f0c1 20823 Hash.call(this, 64, 56)
8b095871
IC
20824}
20825
9987f0c1 20826inherits(Sha, Hash)
8b095871 20827
9987f0c1
IC
20828Sha.prototype.init = function () {
20829 this._a = 0x67452301
20830 this._b = 0xefcdab89
20831 this._c = 0x98badcfe
20832 this._d = 0x10325476
20833 this._e = 0xc3d2e1f0
8b095871 20834
9987f0c1 20835 return this
8b095871
IC
20836}
20837
9987f0c1
IC
20838function rotl5 (num) {
20839 return (num << 5) | (num >>> 27)
8b095871
IC
20840}
20841
9987f0c1
IC
20842function rotl30 (num) {
20843 return (num << 30) | (num >>> 2)
8b095871
IC
20844}
20845
9987f0c1
IC
20846function ft (s, b, c, d) {
20847 if (s === 0) return (b & c) | ((~b) & d)
20848 if (s === 2) return (b & c) | (b & d) | (c & d)
20849 return b ^ c ^ d
8b095871
IC
20850}
20851
9987f0c1
IC
20852Sha.prototype._update = function (M) {
20853 var W = this._w
8b095871 20854
9987f0c1
IC
20855 var a = this._a | 0
20856 var b = this._b | 0
20857 var c = this._c | 0
20858 var d = this._d | 0
20859 var e = this._e | 0
8b095871 20860
9987f0c1
IC
20861 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
20862 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
8b095871 20863
9987f0c1
IC
20864 for (var j = 0; j < 80; ++j) {
20865 var s = ~~(j / 20)
20866 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
8b095871 20867
9987f0c1
IC
20868 e = d
20869 d = c
20870 c = rotl30(b)
20871 b = a
20872 a = t
20873 }
8b095871 20874
9987f0c1
IC
20875 this._a = (a + this._a) | 0
20876 this._b = (b + this._b) | 0
20877 this._c = (c + this._c) | 0
20878 this._d = (d + this._d) | 0
20879 this._e = (e + this._e) | 0
8b095871
IC
20880}
20881
9987f0c1
IC
20882Sha.prototype._hash = function () {
20883 var H = new Buffer(20)
8b095871 20884
9987f0c1
IC
20885 H.writeInt32BE(this._a | 0, 0)
20886 H.writeInt32BE(this._b | 0, 4)
20887 H.writeInt32BE(this._c | 0, 8)
20888 H.writeInt32BE(this._d | 0, 12)
20889 H.writeInt32BE(this._e | 0, 16)
8b095871 20890
9987f0c1 20891 return H
8b095871
IC
20892}
20893
9987f0c1 20894module.exports = Sha
8b095871 20895
9987f0c1
IC
20896}).call(this,require("buffer").Buffer)
20897},{"./hash":99,"buffer":4,"inherits":93}],102:[function(require,module,exports){
20898(function (Buffer){
20899/*
20900 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
20901 * in FIPS PUB 180-1
20902 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
20903 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
20904 * Distributed under the BSD License
20905 * See http://pajhome.org.uk/crypt/md5 for details.
20906 */
8b095871 20907
9987f0c1
IC
20908var inherits = require('inherits')
20909var Hash = require('./hash')
8b095871 20910
9987f0c1
IC
20911var K = [
20912 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
20913]
8b095871 20914
9987f0c1 20915var W = new Array(80)
8b095871 20916
9987f0c1
IC
20917function Sha1 () {
20918 this.init()
20919 this._w = W
8b095871 20920
9987f0c1 20921 Hash.call(this, 64, 56)
8b095871
IC
20922}
20923
9987f0c1 20924inherits(Sha1, Hash)
8b095871 20925
9987f0c1
IC
20926Sha1.prototype.init = function () {
20927 this._a = 0x67452301
20928 this._b = 0xefcdab89
20929 this._c = 0x98badcfe
20930 this._d = 0x10325476
20931 this._e = 0xc3d2e1f0
8b095871 20932
9987f0c1 20933 return this
8b095871
IC
20934}
20935
9987f0c1
IC
20936function rotl1 (num) {
20937 return (num << 1) | (num >>> 31)
20938}
8b095871 20939
9987f0c1
IC
20940function rotl5 (num) {
20941 return (num << 5) | (num >>> 27)
8b095871
IC
20942}
20943
9987f0c1
IC
20944function rotl30 (num) {
20945 return (num << 30) | (num >>> 2)
8b095871
IC
20946}
20947
9987f0c1
IC
20948function ft (s, b, c, d) {
20949 if (s === 0) return (b & c) | ((~b) & d)
20950 if (s === 2) return (b & c) | (b & d) | (c & d)
20951 return b ^ c ^ d
8b095871
IC
20952}
20953
9987f0c1
IC
20954Sha1.prototype._update = function (M) {
20955 var W = this._w
8b095871 20956
9987f0c1
IC
20957 var a = this._a | 0
20958 var b = this._b | 0
20959 var c = this._c | 0
20960 var d = this._d | 0
20961 var e = this._e | 0
8b095871 20962
9987f0c1
IC
20963 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
20964 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
8b095871 20965
9987f0c1
IC
20966 for (var j = 0; j < 80; ++j) {
20967 var s = ~~(j / 20)
20968 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
8b095871 20969
9987f0c1
IC
20970 e = d
20971 d = c
20972 c = rotl30(b)
20973 b = a
20974 a = t
20975 }
8b095871 20976
9987f0c1
IC
20977 this._a = (a + this._a) | 0
20978 this._b = (b + this._b) | 0
20979 this._c = (c + this._c) | 0
20980 this._d = (d + this._d) | 0
20981 this._e = (e + this._e) | 0
8b095871
IC
20982}
20983
9987f0c1
IC
20984Sha1.prototype._hash = function () {
20985 var H = new Buffer(20)
20986
20987 H.writeInt32BE(this._a | 0, 0)
20988 H.writeInt32BE(this._b | 0, 4)
20989 H.writeInt32BE(this._c | 0, 8)
20990 H.writeInt32BE(this._d | 0, 12)
20991 H.writeInt32BE(this._e | 0, 16)
8b095871 20992
9987f0c1 20993 return H
8b095871
IC
20994}
20995
9987f0c1 20996module.exports = Sha1
8b095871 20997
9987f0c1
IC
20998}).call(this,require("buffer").Buffer)
20999},{"./hash":99,"buffer":4,"inherits":93}],103:[function(require,module,exports){
21000(function (Buffer){
21001/**
21002 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
21003 * in FIPS 180-2
21004 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
21005 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
21006 *
21007 */
8b095871 21008
9987f0c1
IC
21009var inherits = require('inherits')
21010var Sha256 = require('./sha256')
21011var Hash = require('./hash')
8b095871 21012
9987f0c1 21013var W = new Array(64)
8b095871 21014
9987f0c1
IC
21015function Sha224 () {
21016 this.init()
8b095871 21017
9987f0c1 21018 this._w = W // new Array(64)
8b095871 21019
9987f0c1 21020 Hash.call(this, 64, 56)
8b095871
IC
21021}
21022
9987f0c1 21023inherits(Sha224, Sha256)
8b095871 21024
9987f0c1
IC
21025Sha224.prototype.init = function () {
21026 this._a = 0xc1059ed8
21027 this._b = 0x367cd507
21028 this._c = 0x3070dd17
21029 this._d = 0xf70e5939
21030 this._e = 0xffc00b31
21031 this._f = 0x68581511
21032 this._g = 0x64f98fa7
21033 this._h = 0xbefa4fa4
21034
21035 return this
8b095871
IC
21036}
21037
9987f0c1
IC
21038Sha224.prototype._hash = function () {
21039 var H = new Buffer(28)
8b095871 21040
9987f0c1
IC
21041 H.writeInt32BE(this._a, 0)
21042 H.writeInt32BE(this._b, 4)
21043 H.writeInt32BE(this._c, 8)
21044 H.writeInt32BE(this._d, 12)
21045 H.writeInt32BE(this._e, 16)
21046 H.writeInt32BE(this._f, 20)
21047 H.writeInt32BE(this._g, 24)
8b095871 21048
9987f0c1 21049 return H
8b095871
IC
21050}
21051
9987f0c1 21052module.exports = Sha224
8b095871 21053
9987f0c1
IC
21054}).call(this,require("buffer").Buffer)
21055},{"./hash":99,"./sha256":104,"buffer":4,"inherits":93}],104:[function(require,module,exports){
21056(function (Buffer){
21057/**
21058 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
21059 * in FIPS 180-2
21060 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
21061 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
21062 *
21063 */
8b095871 21064
9987f0c1
IC
21065var inherits = require('inherits')
21066var Hash = require('./hash')
8b095871 21067
9987f0c1
IC
21068var K = [
21069 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
21070 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
21071 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
21072 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
21073 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
21074 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
21075 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
21076 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
21077 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
21078 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
21079 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
21080 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
21081 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
21082 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
21083 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
21084 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
21085]
8b095871 21086
9987f0c1 21087var W = new Array(64)
8b095871 21088
9987f0c1
IC
21089function Sha256 () {
21090 this.init()
8b095871 21091
9987f0c1 21092 this._w = W // new Array(64)
8b095871 21093
9987f0c1
IC
21094 Hash.call(this, 64, 56)
21095}
8b095871 21096
9987f0c1 21097inherits(Sha256, Hash)
8b095871 21098
9987f0c1
IC
21099Sha256.prototype.init = function () {
21100 this._a = 0x6a09e667
21101 this._b = 0xbb67ae85
21102 this._c = 0x3c6ef372
21103 this._d = 0xa54ff53a
21104 this._e = 0x510e527f
21105 this._f = 0x9b05688c
21106 this._g = 0x1f83d9ab
21107 this._h = 0x5be0cd19
8b095871 21108
9987f0c1
IC
21109 return this
21110}
8b095871 21111
9987f0c1
IC
21112function ch (x, y, z) {
21113 return z ^ (x & (y ^ z))
8b095871
IC
21114}
21115
9987f0c1
IC
21116function maj (x, y, z) {
21117 return (x & y) | (z & (x | y))
8b095871
IC
21118}
21119
9987f0c1
IC
21120function sigma0 (x) {
21121 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
8b095871
IC
21122}
21123
9987f0c1
IC
21124function sigma1 (x) {
21125 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
21126}
8b095871 21127
9987f0c1
IC
21128function gamma0 (x) {
21129 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
21130}
8b095871 21131
9987f0c1
IC
21132function gamma1 (x) {
21133 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
21134}
8b095871 21135
9987f0c1
IC
21136Sha256.prototype._update = function (M) {
21137 var W = this._w
8b095871 21138
9987f0c1
IC
21139 var a = this._a | 0
21140 var b = this._b | 0
21141 var c = this._c | 0
21142 var d = this._d | 0
21143 var e = this._e | 0
21144 var f = this._f | 0
21145 var g = this._g | 0
21146 var h = this._h | 0
8b095871 21147
9987f0c1
IC
21148 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
21149 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
8b095871 21150
9987f0c1
IC
21151 for (var j = 0; j < 64; ++j) {
21152 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
21153 var T2 = (sigma0(a) + maj(a, b, c)) | 0
8b095871 21154
9987f0c1
IC
21155 h = g
21156 g = f
21157 f = e
21158 e = (d + T1) | 0
21159 d = c
21160 c = b
21161 b = a
21162 a = (T1 + T2) | 0
8b095871
IC
21163 }
21164
9987f0c1
IC
21165 this._a = (a + this._a) | 0
21166 this._b = (b + this._b) | 0
21167 this._c = (c + this._c) | 0
21168 this._d = (d + this._d) | 0
21169 this._e = (e + this._e) | 0
21170 this._f = (f + this._f) | 0
21171 this._g = (g + this._g) | 0
21172 this._h = (h + this._h) | 0
8b095871
IC
21173}
21174
9987f0c1
IC
21175Sha256.prototype._hash = function () {
21176 var H = new Buffer(32)
8b095871 21177
9987f0c1
IC
21178 H.writeInt32BE(this._a, 0)
21179 H.writeInt32BE(this._b, 4)
21180 H.writeInt32BE(this._c, 8)
21181 H.writeInt32BE(this._d, 12)
21182 H.writeInt32BE(this._e, 16)
21183 H.writeInt32BE(this._f, 20)
21184 H.writeInt32BE(this._g, 24)
21185 H.writeInt32BE(this._h, 28)
8b095871 21186
9987f0c1 21187 return H
8b095871
IC
21188}
21189
9987f0c1 21190module.exports = Sha256
8b095871 21191
9987f0c1
IC
21192}).call(this,require("buffer").Buffer)
21193},{"./hash":99,"buffer":4,"inherits":93}],105:[function(require,module,exports){
21194(function (Buffer){
21195var inherits = require('inherits')
21196var SHA512 = require('./sha512')
21197var Hash = require('./hash')
8b095871 21198
9987f0c1 21199var W = new Array(160)
8b095871 21200
9987f0c1
IC
21201function Sha384 () {
21202 this.init()
21203 this._w = W
8b095871 21204
9987f0c1
IC
21205 Hash.call(this, 128, 112)
21206}
8b095871 21207
9987f0c1 21208inherits(Sha384, SHA512)
8b095871 21209
9987f0c1
IC
21210Sha384.prototype.init = function () {
21211 this._ah = 0xcbbb9d5d
21212 this._bh = 0x629a292a
21213 this._ch = 0x9159015a
21214 this._dh = 0x152fecd8
21215 this._eh = 0x67332667
21216 this._fh = 0x8eb44a87
21217 this._gh = 0xdb0c2e0d
21218 this._hh = 0x47b5481d
8b095871 21219
9987f0c1
IC
21220 this._al = 0xc1059ed8
21221 this._bl = 0x367cd507
21222 this._cl = 0x3070dd17
21223 this._dl = 0xf70e5939
21224 this._el = 0xffc00b31
21225 this._fl = 0x68581511
21226 this._gl = 0x64f98fa7
21227 this._hl = 0xbefa4fa4
8b095871 21228
9987f0c1 21229 return this
8b095871
IC
21230}
21231
9987f0c1
IC
21232Sha384.prototype._hash = function () {
21233 var H = new Buffer(48)
8b095871 21234
9987f0c1
IC
21235 function writeInt64BE (h, l, offset) {
21236 H.writeInt32BE(h, offset)
21237 H.writeInt32BE(l, offset + 4)
21238 }
8b095871 21239
9987f0c1
IC
21240 writeInt64BE(this._ah, this._al, 0)
21241 writeInt64BE(this._bh, this._bl, 8)
21242 writeInt64BE(this._ch, this._cl, 16)
21243 writeInt64BE(this._dh, this._dl, 24)
21244 writeInt64BE(this._eh, this._el, 32)
21245 writeInt64BE(this._fh, this._fl, 40)
8b095871 21246
9987f0c1
IC
21247 return H
21248}
8b095871 21249
9987f0c1 21250module.exports = Sha384
8b095871 21251
9987f0c1
IC
21252}).call(this,require("buffer").Buffer)
21253},{"./hash":99,"./sha512":106,"buffer":4,"inherits":93}],106:[function(require,module,exports){
21254(function (Buffer){
21255var inherits = require('inherits')
21256var Hash = require('./hash')
8b095871 21257
9987f0c1
IC
21258var K = [
21259 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
21260 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
21261 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
21262 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
21263 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
21264 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
21265 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
21266 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
21267 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
21268 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
21269 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
21270 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
21271 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
21272 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
21273 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
21274 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
21275 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
21276 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
21277 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
21278 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
21279 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
21280 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
21281 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
21282 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
21283 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
21284 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
21285 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
21286 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
21287 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
21288 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
21289 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
21290 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
21291 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
21292 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
21293 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
21294 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
21295 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
21296 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
21297 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
21298 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
21299]
8b095871 21300
9987f0c1 21301var W = new Array(160)
8b095871 21302
9987f0c1
IC
21303function Sha512 () {
21304 this.init()
21305 this._w = W
8b095871 21306
9987f0c1
IC
21307 Hash.call(this, 128, 112)
21308}
8b095871 21309
9987f0c1 21310inherits(Sha512, Hash)
8b095871 21311
9987f0c1
IC
21312Sha512.prototype.init = function () {
21313 this._ah = 0x6a09e667
21314 this._bh = 0xbb67ae85
21315 this._ch = 0x3c6ef372
21316 this._dh = 0xa54ff53a
21317 this._eh = 0x510e527f
21318 this._fh = 0x9b05688c
21319 this._gh = 0x1f83d9ab
21320 this._hh = 0x5be0cd19
8b095871 21321
9987f0c1
IC
21322 this._al = 0xf3bcc908
21323 this._bl = 0x84caa73b
21324 this._cl = 0xfe94f82b
21325 this._dl = 0x5f1d36f1
21326 this._el = 0xade682d1
21327 this._fl = 0x2b3e6c1f
21328 this._gl = 0xfb41bd6b
21329 this._hl = 0x137e2179
8b095871 21330
9987f0c1 21331 return this
8b095871
IC
21332}
21333
9987f0c1
IC
21334function Ch (x, y, z) {
21335 return z ^ (x & (y ^ z))
8b095871
IC
21336}
21337
9987f0c1
IC
21338function maj (x, y, z) {
21339 return (x & y) | (z & (x | y))
8b095871
IC
21340}
21341
9987f0c1
IC
21342function sigma0 (x, xl) {
21343 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
21344}
8b095871 21345
9987f0c1
IC
21346function sigma1 (x, xl) {
21347 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
21348}
8b095871 21349
9987f0c1
IC
21350function Gamma0 (x, xl) {
21351 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
8b095871
IC
21352}
21353
9987f0c1
IC
21354function Gamma0l (x, xl) {
21355 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
21356}
8b095871 21357
9987f0c1
IC
21358function Gamma1 (x, xl) {
21359 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
21360}
8b095871 21361
9987f0c1
IC
21362function Gamma1l (x, xl) {
21363 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
21364}
8b095871 21365
9987f0c1
IC
21366function getCarry (a, b) {
21367 return (a >>> 0) < (b >>> 0) ? 1 : 0
8b095871
IC
21368}
21369
9987f0c1
IC
21370Sha512.prototype._update = function (M) {
21371 var W = this._w
8b095871 21372
9987f0c1
IC
21373 var ah = this._ah | 0
21374 var bh = this._bh | 0
21375 var ch = this._ch | 0
21376 var dh = this._dh | 0
21377 var eh = this._eh | 0
21378 var fh = this._fh | 0
21379 var gh = this._gh | 0
21380 var hh = this._hh | 0
8b095871 21381
9987f0c1
IC
21382 var al = this._al | 0
21383 var bl = this._bl | 0
21384 var cl = this._cl | 0
21385 var dl = this._dl | 0
21386 var el = this._el | 0
21387 var fl = this._fl | 0
21388 var gl = this._gl | 0
21389 var hl = this._hl | 0
8b095871 21390
9987f0c1
IC
21391 for (var i = 0; i < 32; i += 2) {
21392 W[i] = M.readInt32BE(i * 4)
21393 W[i + 1] = M.readInt32BE(i * 4 + 4)
21394 }
21395 for (; i < 160; i += 2) {
21396 var xh = W[i - 15 * 2]
21397 var xl = W[i - 15 * 2 + 1]
21398 var gamma0 = Gamma0(xh, xl)
21399 var gamma0l = Gamma0l(xl, xh)
8b095871 21400
9987f0c1
IC
21401 xh = W[i - 2 * 2]
21402 xl = W[i - 2 * 2 + 1]
21403 var gamma1 = Gamma1(xh, xl)
21404 var gamma1l = Gamma1l(xl, xh)
8b095871 21405
9987f0c1
IC
21406 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
21407 var Wi7h = W[i - 7 * 2]
21408 var Wi7l = W[i - 7 * 2 + 1]
8b095871 21409
9987f0c1
IC
21410 var Wi16h = W[i - 16 * 2]
21411 var Wi16l = W[i - 16 * 2 + 1]
8b095871 21412
9987f0c1
IC
21413 var Wil = (gamma0l + Wi7l) | 0
21414 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
21415 Wil = (Wil + gamma1l) | 0
21416 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
21417 Wil = (Wil + Wi16l) | 0
21418 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
8b095871 21419
9987f0c1
IC
21420 W[i] = Wih
21421 W[i + 1] = Wil
8b095871
IC
21422 }
21423
9987f0c1
IC
21424 for (var j = 0; j < 160; j += 2) {
21425 Wih = W[j]
21426 Wil = W[j + 1]
8b095871 21427
9987f0c1
IC
21428 var majh = maj(ah, bh, ch)
21429 var majl = maj(al, bl, cl)
8b095871 21430
9987f0c1
IC
21431 var sigma0h = sigma0(ah, al)
21432 var sigma0l = sigma0(al, ah)
21433 var sigma1h = sigma1(eh, el)
21434 var sigma1l = sigma1(el, eh)
8b095871 21435
9987f0c1
IC
21436 // t1 = h + sigma1 + ch + K[j] + W[j]
21437 var Kih = K[j]
21438 var Kil = K[j + 1]
8b095871 21439
9987f0c1
IC
21440 var chh = Ch(eh, fh, gh)
21441 var chl = Ch(el, fl, gl)
8b095871 21442
9987f0c1
IC
21443 var t1l = (hl + sigma1l) | 0
21444 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
21445 t1l = (t1l + chl) | 0
21446 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
21447 t1l = (t1l + Kil) | 0
21448 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
21449 t1l = (t1l + Wil) | 0
21450 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
8b095871 21451
9987f0c1
IC
21452 // t2 = sigma0 + maj
21453 var t2l = (sigma0l + majl) | 0
21454 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
21455
21456 hh = gh
21457 hl = gl
21458 gh = fh
21459 gl = fl
21460 fh = eh
21461 fl = el
21462 el = (dl + t1l) | 0
21463 eh = (dh + t1h + getCarry(el, dl)) | 0
21464 dh = ch
21465 dl = cl
21466 ch = bh
21467 cl = bl
21468 bh = ah
21469 bl = al
21470 al = (t1l + t2l) | 0
21471 ah = (t1h + t2h + getCarry(al, t1l)) | 0
21472 }
8b095871 21473
9987f0c1
IC
21474 this._al = (this._al + al) | 0
21475 this._bl = (this._bl + bl) | 0
21476 this._cl = (this._cl + cl) | 0
21477 this._dl = (this._dl + dl) | 0
21478 this._el = (this._el + el) | 0
21479 this._fl = (this._fl + fl) | 0
21480 this._gl = (this._gl + gl) | 0
21481 this._hl = (this._hl + hl) | 0
8b095871 21482
9987f0c1
IC
21483 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
21484 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
21485 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
21486 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
21487 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
21488 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
21489 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
21490 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
21491}
8b095871 21492
9987f0c1
IC
21493Sha512.prototype._hash = function () {
21494 var H = new Buffer(64)
8b095871 21495
9987f0c1
IC
21496 function writeInt64BE (h, l, offset) {
21497 H.writeInt32BE(h, offset)
21498 H.writeInt32BE(l, offset + 4)
8b095871
IC
21499 }
21500
9987f0c1
IC
21501 writeInt64BE(this._ah, this._al, 0)
21502 writeInt64BE(this._bh, this._bl, 8)
21503 writeInt64BE(this._ch, this._cl, 16)
21504 writeInt64BE(this._dh, this._dl, 24)
21505 writeInt64BE(this._eh, this._el, 32)
21506 writeInt64BE(this._fh, this._fl, 40)
21507 writeInt64BE(this._gh, this._gl, 48)
21508 writeInt64BE(this._hh, this._hl, 56)
21509
21510 return H
8b095871
IC
21511}
21512
9987f0c1 21513module.exports = Sha512
8b095871 21514
9987f0c1
IC
21515}).call(this,require("buffer").Buffer)
21516},{"./hash":99,"buffer":4,"inherits":93}],107:[function(require,module,exports){
21517var inherits = require('inherits')
21518var native = require('./native')
8b095871 21519
9987f0c1
IC
21520function TfTypeError (type, value, valueTypeName) {
21521 this.__error = Error.call(this)
21522 this.__type = type
21523 this.__value = value
21524 this.__valueTypeName = valueTypeName
8b095871 21525
9987f0c1
IC
21526 var message
21527 Object.defineProperty(this, 'message', {
21528 enumerable: true,
21529 get: function () {
21530 if (message) return message
8b095871 21531
9987f0c1
IC
21532 valueTypeName = valueTypeName || getValueTypeName(value)
21533 message = tfErrorString(type, value, valueTypeName)
8b095871 21534
9987f0c1
IC
21535 return message
21536 }
8b095871 21537 })
9987f0c1 21538}
8b095871 21539
9987f0c1
IC
21540function TfPropertyTypeError (type, property, label, value, error, valueTypeName) {
21541 this.__error = error || Error.call(this)
21542 this.__label = label
21543 this.__property = property
21544 this.__type = type
21545 this.__value = value
21546 this.__valueTypeName = valueTypeName
8b095871 21547
9987f0c1
IC
21548 var message
21549 Object.defineProperty(this, 'message', {
21550 enumerable: true,
21551 get: function () {
21552 if (message) return message
21553 if (type) {
21554 valueTypeName = valueTypeName || getValueTypeName(value)
21555 message = tfPropertyErrorString(type, label, property, value, valueTypeName)
21556 } else {
21557 message = 'Unexpected property "' + property + '"'
21558 }
8b095871 21559
9987f0c1
IC
21560 return message
21561 }
8b095871 21562 })
8b095871
IC
21563}
21564
9987f0c1
IC
21565// inherit from Error, assign stack
21566[TfTypeError, TfPropertyTypeError].forEach(function (tfErrorType) {
21567 inherits(tfErrorType, Error)
21568 Object.defineProperty(tfErrorType, 'stack', {
21569 get: function () { return this.__error.stack }
21570 })
21571})
8b095871 21572
9987f0c1
IC
21573function tfCustomError (expected, actual) {
21574 return new TfTypeError(expected, {}, actual)
21575}
8b095871 21576
9987f0c1
IC
21577function tfSubError (e, property, label) {
21578 // sub child?
21579 if (e instanceof TfPropertyTypeError) {
21580 property = property + '.' + e.__property
21581 label = e.__label
8b095871 21582
9987f0c1
IC
21583 return new TfPropertyTypeError(
21584 e.__type, property, label, e.__value, e.__error, e.__valueTypeName
21585 )
8b095871
IC
21586 }
21587
9987f0c1
IC
21588 // child?
21589 if (e instanceof TfTypeError) {
21590 return new TfPropertyTypeError(
21591 e.__type, property, label, e.__value, e.__error, e.__valueTypeName
21592 )
21593 }
8b095871 21594
9987f0c1
IC
21595 return e
21596}
8b095871 21597
9987f0c1
IC
21598function getTypeName (fn) {
21599 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1]
21600}
8b095871 21601
9987f0c1
IC
21602function getValueTypeName (value) {
21603 return native.Nil(value) ? '' : getTypeName(value.constructor)
21604}
8b095871 21605
9987f0c1
IC
21606function getValue (value) {
21607 if (native.Function(value)) return ''
21608 if (native.String(value)) return JSON.stringify(value)
21609 if (value && native.Object(value)) return ''
21610 return value
21611}
8b095871 21612
9987f0c1
IC
21613function tfJSON (type) {
21614 if (native.Function(type)) return type.toJSON ? type.toJSON() : getTypeName(type)
21615 if (native.Array(type)) return 'Array'
21616 if (type && native.Object(type)) return 'Object'
8b095871 21617
9987f0c1
IC
21618 return type !== undefined ? type : ''
21619}
8b095871 21620
9987f0c1
IC
21621function tfErrorString (type, value, valueTypeName) {
21622 var valueJson = getValue(value)
8b095871 21623
9987f0c1
IC
21624 return 'Expected ' + tfJSON(type) + ', got' +
21625 (valueTypeName !== '' ? ' ' + valueTypeName : '') +
21626 (valueJson !== '' ? ' ' + valueJson : '')
8b095871
IC
21627}
21628
9987f0c1
IC
21629function tfPropertyErrorString (type, label, name, value, valueTypeName) {
21630 var description = '" of type '
21631 if (label === 'key') description = '" with key type '
8b095871 21632
9987f0c1 21633 return tfErrorString('property "' + tfJSON(name) + description + tfJSON(type), value, valueTypeName)
8b095871
IC
21634}
21635
9987f0c1
IC
21636module.exports = {
21637 TfTypeError: TfTypeError,
21638 TfPropertyTypeError: TfPropertyTypeError,
21639 tfCustomError: tfCustomError,
21640 tfSubError: tfSubError,
21641 tfJSON: tfJSON,
21642 getValueTypeName: getValueTypeName
8b095871
IC
21643}
21644
9987f0c1
IC
21645},{"./native":110,"inherits":93}],108:[function(require,module,exports){
21646(function (Buffer){
21647var NATIVE = require('./native')
21648var ERRORS = require('./errors')
21649
21650function _Buffer (value) {
21651 return Buffer.isBuffer(value)
8b095871
IC
21652}
21653
9987f0c1
IC
21654function Hex (value) {
21655 return typeof value === 'string' && /^([0-9a-f]{2})+$/i.test(value)
21656}
8b095871 21657
9987f0c1
IC
21658function _LengthN (type, length) {
21659 var name = type.toJSON()
8b095871 21660
9987f0c1
IC
21661 function Length (value) {
21662 if (!type(value)) return false
21663 if (value.length === length) return true
8b095871 21664
9987f0c1
IC
21665 throw ERRORS.tfCustomError(name + '(Length: ' + length + ')', name + '(Length: ' + value.length + ')')
21666 }
21667 Length.toJSON = function () { return name }
8b095871 21668
9987f0c1
IC
21669 return Length
21670}
8b095871 21671
9987f0c1
IC
21672var _ArrayN = _LengthN.bind(null, NATIVE.Array)
21673var _BufferN = _LengthN.bind(null, _Buffer)
21674var _HexN = _LengthN.bind(null, Hex)
8b095871 21675
9987f0c1 21676var UINT53_MAX = Math.pow(2, 53) - 1
8b095871 21677
9987f0c1
IC
21678function Finite (value) {
21679 return typeof value === 'number' && isFinite(value)
21680}
21681function Int8 (value) { return ((value << 24) >> 24) === value }
21682function Int16 (value) { return ((value << 16) >> 16) === value }
21683function Int32 (value) { return (value | 0) === value }
21684function UInt8 (value) { return (value & 0xff) === value }
21685function UInt16 (value) { return (value & 0xffff) === value }
21686function UInt32 (value) { return (value >>> 0) === value }
21687function UInt53 (value) {
21688 return typeof value === 'number' &&
21689 value >= 0 &&
21690 value <= UINT53_MAX &&
21691 Math.floor(value) === value
21692}
8b095871 21693
9987f0c1
IC
21694var types = {
21695 ArrayN: _ArrayN,
21696 Buffer: _Buffer,
21697 BufferN: _BufferN,
21698 Finite: Finite,
21699 Hex: Hex,
21700 HexN: _HexN,
21701 Int8: Int8,
21702 Int16: Int16,
21703 Int32: Int32,
21704 UInt8: UInt8,
21705 UInt16: UInt16,
21706 UInt32: UInt32,
21707 UInt53: UInt53
21708}
8b095871 21709
9987f0c1
IC
21710for (var typeName in types) {
21711 types[typeName].toJSON = function (t) {
21712 return t
21713 }.bind(null, typeName)
21714}
8b095871 21715
9987f0c1 21716module.exports = types
8b095871 21717
9987f0c1
IC
21718}).call(this,{"isBuffer":require("../../../../../.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
21719},{"../../../../../.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/is-buffer/index.js":9,"./errors":107,"./native":110}],109:[function(require,module,exports){
21720var ERRORS = require('./errors')
21721var NATIVE = require('./native')
8b095871 21722
9987f0c1
IC
21723// short-hand
21724var tfJSON = ERRORS.tfJSON
21725var TfTypeError = ERRORS.TfTypeError
21726var TfPropertyTypeError = ERRORS.TfPropertyTypeError
21727var tfSubError = ERRORS.tfSubError
21728var getValueTypeName = ERRORS.getValueTypeName
8b095871 21729
9987f0c1
IC
21730var TYPES = {
21731 arrayOf: function arrayOf (type) {
21732 type = compile(type)
8b095871 21733
9987f0c1
IC
21734 function _arrayOf (array, strict) {
21735 if (!NATIVE.Array(array)) return false
8b095871 21736
9987f0c1
IC
21737 return array.every(function (value, i) {
21738 try {
21739 return typeforce(type, value, strict)
21740 } catch (e) {
21741 throw tfSubError(e, i)
21742 }
21743 })
8b095871 21744 }
9987f0c1 21745 _arrayOf.toJSON = function () { return '[' + tfJSON(type) + ']' }
8b095871 21746
9987f0c1
IC
21747 return _arrayOf
21748 },
8b095871 21749
9987f0c1
IC
21750 maybe: function maybe (type) {
21751 type = compile(type)
8b095871 21752
9987f0c1
IC
21753 function _maybe (value, strict) {
21754 return NATIVE.Nil(value) || type(value, strict, maybe)
21755 }
21756 _maybe.toJSON = function () { return '?' + tfJSON(type) }
8b095871 21757
9987f0c1
IC
21758 return _maybe
21759 },
8b095871 21760
9987f0c1
IC
21761 map: function map (propertyType, propertyKeyType) {
21762 propertyType = compile(propertyType)
21763 if (propertyKeyType) propertyKeyType = compile(propertyKeyType)
8b095871 21764
9987f0c1
IC
21765 function _map (value, strict) {
21766 if (!NATIVE.Object(value, strict)) return false
21767 if (NATIVE.Nil(value, strict)) return false
8b095871 21768
9987f0c1
IC
21769 for (var propertyName in value) {
21770 try {
21771 if (propertyKeyType) {
21772 typeforce(propertyKeyType, propertyName, strict)
21773 }
21774 } catch (e) {
21775 throw tfSubError(e, propertyName, 'key')
8b095871
IC
21776 }
21777
9987f0c1
IC
21778 try {
21779 var propertyValue = value[propertyName]
21780 typeforce(propertyType, propertyValue, strict)
21781 } catch (e) {
21782 throw tfSubError(e, propertyName)
8b095871
IC
21783 }
21784 }
21785
9987f0c1
IC
21786 return true
21787 }
8b095871 21788
9987f0c1
IC
21789 if (propertyKeyType) {
21790 _map.toJSON = function () {
21791 return '{' + tfJSON(propertyKeyType) + ': ' + tfJSON(propertyType) + '}'
8b095871 21792 }
9987f0c1
IC
21793 } else {
21794 _map.toJSON = function () { return '{' + tfJSON(propertyType) + '}' }
8b095871
IC
21795 }
21796
9987f0c1
IC
21797 return _map
21798 },
8b095871 21799
9987f0c1
IC
21800 object: function object (uncompiled) {
21801 var type = {}
8b095871 21802
9987f0c1
IC
21803 for (var typePropertyName in uncompiled) {
21804 type[typePropertyName] = compile(uncompiled[typePropertyName])
21805 }
8b095871 21806
9987f0c1
IC
21807 function _object (value, strict) {
21808 if (!NATIVE.Object(value)) return false
21809 if (NATIVE.Nil(value)) return false
8b095871 21810
9987f0c1 21811 var propertyName
8b095871 21812
9987f0c1
IC
21813 try {
21814 for (propertyName in type) {
21815 var propertyType = type[propertyName]
21816 var propertyValue = value[propertyName]
8b095871 21817
9987f0c1
IC
21818 typeforce(propertyType, propertyValue, strict)
21819 }
21820 } catch (e) {
21821 throw tfSubError(e, propertyName)
21822 }
8b095871 21823
9987f0c1
IC
21824 if (strict) {
21825 for (propertyName in value) {
21826 if (type[propertyName]) continue
8b095871 21827
9987f0c1
IC
21828 throw new TfPropertyTypeError(undefined, propertyName)
21829 }
21830 }
8b095871 21831
9987f0c1
IC
21832 return true
21833 }
21834 _object.toJSON = function () { return tfJSON(type) }
8b095871 21835
9987f0c1
IC
21836 return _object
21837 },
8b095871 21838
9987f0c1
IC
21839 oneOf: function oneOf () {
21840 var types = [].slice.call(arguments).map(compile)
8b095871 21841
9987f0c1
IC
21842 function _oneOf (value, strict) {
21843 return types.some(function (type) {
21844 try {
21845 return typeforce(type, value, strict)
21846 } catch (e) {
21847 return false
21848 }
21849 })
21850 }
21851 _oneOf.toJSON = function () { return types.map(tfJSON).join('|') }
8b095871 21852
9987f0c1
IC
21853 return _oneOf
21854 },
8b095871 21855
9987f0c1
IC
21856 quacksLike: function quacksLike (type) {
21857 function _quacksLike (value) {
21858 return type === getValueTypeName(value)
21859 }
21860 _quacksLike.toJSON = function () { return type }
8b095871 21861
9987f0c1
IC
21862 return _quacksLike
21863 },
8b095871 21864
9987f0c1
IC
21865 tuple: function tuple () {
21866 var types = [].slice.call(arguments).map(compile)
8b095871 21867
9987f0c1
IC
21868 function _tuple (values, strict) {
21869 return types.every(function (type, i) {
21870 try {
21871 return typeforce(type, values[i], strict)
21872 } catch (e) {
21873 throw tfSubError(e, i)
21874 }
21875 }) && (!strict || values.length === arguments.length)
21876 }
21877 _tuple.toJSON = function () { return '(' + types.map(tfJSON).join(', ') + ')' }
8b095871 21878
9987f0c1
IC
21879 return _tuple
21880 },
8b095871 21881
9987f0c1
IC
21882 value: function value (expected) {
21883 function _value (actual) {
21884 return actual === expected
21885 }
21886 _value.toJSON = function () { return expected }
8b095871 21887
9987f0c1 21888 return _value
8b095871
IC
21889 }
21890}
21891
9987f0c1
IC
21892function compile (type) {
21893 if (NATIVE.String(type)) {
21894 if (type[0] === '?') return TYPES.maybe(compile(type.slice(1)))
8b095871 21895
9987f0c1
IC
21896 return NATIVE[type] || TYPES.quacksLike(type)
21897 } else if (type && NATIVE.Object(type)) {
21898 if (NATIVE.Array(type)) return TYPES.arrayOf(compile(type[0]))
8b095871 21899
9987f0c1
IC
21900 return TYPES.object(type)
21901 } else if (NATIVE.Function(type)) {
21902 return type
21903 }
8b095871 21904
9987f0c1
IC
21905 return TYPES.value(type)
21906}
8b095871 21907
9987f0c1
IC
21908function typeforce (type, value, strict, surrogate) {
21909 if (NATIVE.Function(type)) {
21910 if (type(value, strict)) return true
8b095871 21911
9987f0c1 21912 throw new TfTypeError(surrogate || type, value)
ab78acc6 21913 }
8b095871 21914
9987f0c1
IC
21915 // JIT
21916 return typeforce(compile(type), value, strict)
21917}
8b095871 21918
9987f0c1
IC
21919// assign types to typeforce function
21920for (var typeName in NATIVE) {
21921 typeforce[typeName] = NATIVE[typeName]
8b095871
IC
21922}
21923
9987f0c1
IC
21924for (typeName in TYPES) {
21925 typeforce[typeName] = TYPES[typeName]
8b095871
IC
21926}
21927
9987f0c1
IC
21928var EXTRA = require('./extra')
21929for (typeName in EXTRA) {
21930 typeforce[typeName] = EXTRA[typeName]
8b095871
IC
21931}
21932
9987f0c1
IC
21933// async wrapper
21934function __async (type, value, strict, callback) {
21935 // default to falsy strict if using shorthand overload
21936 if (typeof strict === 'function') return __async(type, value, false, strict)
8b095871 21937
9987f0c1
IC
21938 try {
21939 typeforce(type, value, strict)
21940 } catch (e) {
21941 return callback(e)
21942 }
8b095871 21943
9987f0c1
IC
21944 callback()
21945}
8b095871 21946
9987f0c1
IC
21947typeforce.async = __async
21948typeforce.compile = compile
21949typeforce.TfTypeError = TfTypeError
21950typeforce.TfPropertyTypeError = TfPropertyTypeError
8b095871 21951
9987f0c1 21952module.exports = typeforce
8b095871 21953
9987f0c1
IC
21954},{"./errors":107,"./extra":108,"./native":110}],110:[function(require,module,exports){
21955var types = {
21956 Array: function (value) { return value !== null && value !== undefined && value.constructor === Array },
21957 Boolean: function (value) { return typeof value === 'boolean' },
21958 Function: function (value) { return typeof value === 'function' },
21959 Nil: function (value) { return value === undefined || value === null },
21960 Number: function (value) { return typeof value === 'number' },
21961 Object: function (value) { return typeof value === 'object' },
21962 String: function (value) { return typeof value === 'string' },
21963 '': function () { return true }
21964}
8b095871 21965
9987f0c1
IC
21966// TODO: deprecate
21967types.Null = types.Nil
8b095871 21968
9987f0c1
IC
21969for (var typeName in types) {
21970 types[typeName].toJSON = function (t) {
21971 return t
21972 }.bind(null, typeName)
21973}
8b095871 21974
9987f0c1 21975module.exports = types
8b095871 21976
9987f0c1
IC
21977},{}],111:[function(require,module,exports){
21978(function (Buffer){
21979'use strict'
8b095871 21980
9987f0c1
IC
21981// Number.MAX_SAFE_INTEGER
21982var MAX_SAFE_INTEGER = 9007199254740991
8b095871 21983
9987f0c1
IC
21984function checkUInt53 (n) {
21985 if (n < 0 || n > MAX_SAFE_INTEGER || n % 1 !== 0) throw new RangeError('value out of range')
8b095871
IC
21986}
21987
9987f0c1
IC
21988function encode (number, buffer, offset) {
21989 checkUInt53(number)
8b095871 21990
9987f0c1
IC
21991 if (!buffer) buffer = new Buffer(encodingLength(number))
21992 if (!Buffer.isBuffer(buffer)) throw new TypeError('buffer must be a Buffer instance')
21993 if (!offset) offset = 0
8b095871 21994
9987f0c1
IC
21995 // 8 bit
21996 if (number < 0xfd) {
21997 buffer.writeUInt8(number, offset)
21998 encode.bytes = 1
8b095871 21999
9987f0c1
IC
22000 // 16 bit
22001 } else if (number <= 0xffff) {
22002 buffer.writeUInt8(0xfd, offset)
22003 buffer.writeUInt16LE(number, offset + 1)
22004 encode.bytes = 3
8b095871 22005
9987f0c1
IC
22006 // 32 bit
22007 } else if (number <= 0xffffffff) {
22008 buffer.writeUInt8(0xfe, offset)
22009 buffer.writeUInt32LE(number, offset + 1)
22010 encode.bytes = 5
8b095871 22011
9987f0c1
IC
22012 // 64 bit
22013 } else {
22014 buffer.writeUInt8(0xff, offset)
22015 buffer.writeUInt32LE(number >>> 0, offset + 1)
22016 buffer.writeUInt32LE((number / 0x100000000) | 0, offset + 5)
22017 encode.bytes = 9
ab78acc6 22018 }
8b095871 22019
9987f0c1 22020 return buffer
8b095871
IC
22021}
22022
9987f0c1
IC
22023function decode (buffer, offset) {
22024 if (!Buffer.isBuffer(buffer)) throw new TypeError('buffer must be a Buffer instance')
22025 if (!offset) offset = 0
8b095871 22026
9987f0c1 22027 var first = buffer.readUInt8(offset)
8b095871 22028
9987f0c1
IC
22029 // 8 bit
22030 if (first < 0xfd) {
22031 decode.bytes = 1
22032 return first
8b095871 22033
9987f0c1
IC
22034 // 16 bit
22035 } else if (first === 0xfd) {
22036 decode.bytes = 3
22037 return buffer.readUInt16LE(offset + 1)
8b095871 22038
9987f0c1
IC
22039 // 32 bit
22040 } else if (first === 0xfe) {
22041 decode.bytes = 5
22042 return buffer.readUInt32LE(offset + 1)
8b095871 22043
9987f0c1
IC
22044 // 64 bit
22045 } else {
22046 decode.bytes = 9
22047 var lo = buffer.readUInt32LE(offset + 1)
22048 var hi = buffer.readUInt32LE(offset + 5)
22049 var number = hi * 0x0100000000 + lo
22050 checkUInt53(number)
8b095871 22051
9987f0c1 22052 return number
8b095871 22053 }
ab78acc6
IC
22054}
22055
9987f0c1
IC
22056function encodingLength (number) {
22057 checkUInt53(number)
8b095871 22058
9987f0c1
IC
22059 return (
22060 number < 0xfd ? 1
22061 : number <= 0xffff ? 3
22062 : number <= 0xffffffff ? 5
22063 : 9
22064 )
ab78acc6 22065}
3af2954a 22066
9987f0c1 22067module.exports = { encode: encode, decode: decode, encodingLength: encodingLength }
3af2954a 22068
9987f0c1
IC
22069}).call(this,require("buffer").Buffer)
22070},{"buffer":4}],112:[function(require,module,exports){
22071(function (Buffer){
22072var bs58check = require('bs58check')
3af2954a 22073
9987f0c1
IC
22074function decodeRaw (buffer, version) {
22075 // check version only if defined
22076 if (version !== undefined && buffer[0] !== version) throw new Error('Invalid network version')
3af2954a 22077
9987f0c1
IC
22078 // uncompressed
22079 if (buffer.length === 33) {
22080 return {
22081 version: buffer[0],
22082 privateKey: buffer.slice(1, 33),
22083 compressed: false
ab78acc6 22084 }
9987f0c1 22085 }
8b095871 22086
9987f0c1
IC
22087 // invalid length
22088 if (buffer.length !== 34) throw new Error('Invalid WIF length')
8b095871 22089
9987f0c1
IC
22090 // invalid compression flag
22091 if (buffer[33] !== 0x01) throw new Error('Invalid compression flag')
8b095871 22092
9987f0c1
IC
22093 return {
22094 version: buffer[0],
22095 privateKey: buffer.slice(1, 33),
22096 compressed: true
22097 }
22098}
3af2954a 22099
9987f0c1
IC
22100function encodeRaw (version, privateKey, compressed) {
22101 var result = new Buffer(compressed ? 34 : 33)
8b095871 22102
9987f0c1
IC
22103 result.writeUInt8(version, 0)
22104 privateKey.copy(result, 1)
3af2954a 22105
9987f0c1
IC
22106 if (compressed) {
22107 result[33] = 0x01
22108 }
8b095871 22109
9987f0c1
IC
22110 return result
22111}
8b095871 22112
9987f0c1
IC
22113function decode (string, version) {
22114 return decodeRaw(bs58check.decode(string), version)
ab78acc6 22115}
3af2954a 22116
9987f0c1
IC
22117function encode (version, privateKey, compressed) {
22118 if (typeof version === 'number') return bs58check.encode(encodeRaw(version, privateKey, compressed))
8b095871 22119
9987f0c1
IC
22120 return bs58check.encode(
22121 encodeRaw(
22122 version.version,
22123 version.privateKey,
22124 version.compressed
22125 )
22126 )
ab78acc6 22127}
3af2954a 22128
9987f0c1
IC
22129module.exports = {
22130 decode: decode,
22131 decodeRaw: decodeRaw,
22132 encode: encode,
22133 encodeRaw: encodeRaw
22134}
8b095871
IC
22135
22136}).call(this,require("buffer").Buffer)
9987f0c1 22137},{"bs58check":80,"buffer":4}]},{},[33])(33)
8d18f379
IC
22138});
22139</script>
9987f0c1 22140 <script>bitcoinjs.bitcoin.networks.shadow = {
861750ae 22141 messagePrefix: 'unused',
8b095871
IC
22142 bip32: {
22143 public: 0xEE80286A,
22144 private: 0xEE8031E8
22145 },
22146 pubKeyHash: 0x3f,
22147 scriptHash: 0x7d,
861750ae 22148 wif: 0xbf
8b095871
IC
22149};
22150
9987f0c1 22151bitcoinjs.bitcoin.networks.shadowtn = {
861750ae 22152 messagePrefix: 'unused',
8b095871
IC
22153 bip32: {
22154 public: 0x76C0FDFB,
22155 private: 0x76C1077A
22156 },
22157 pubKeyHash: 0x7f,
22158 scriptHash: 0xc4,
861750ae 22159 wif: 0xff
8b095871 22160};
3af2954a 22161
9987f0c1 22162bitcoinjs.bitcoin.networks.clam = {
861750ae 22163 messagePrefix: 'unused',
8b095871
IC
22164 bip32: {
22165 public: 0xa8c26d64,
22166 private: 0xa8c17826
22167 },
22168 pubKeyHash: 0x89,
9987f0c1 22169 scriptHash: 0x00, // TODO set this correctly
861750ae 22170 wif: 0x85
8b095871 22171};
3af2954a 22172
9987f0c1 22173bitcoinjs.bitcoin.networks.crown = {
861750ae 22174 messagePrefix: 'unused',
0921f370 22175 bip32: {
22176 public: 0x0488b21e,
22177 private: 0x0488ade4
22178 },
22179 pubKeyHash: 0x00,
22180 scriptHash: 0x05,
861750ae 22181 wif: 0x80
0921f370 22182};
22183
9987f0c1 22184bitcoinjs.bitcoin.networks.dash = {
861750ae 22185 messagePrefix: 'unused',
8b095871
IC
22186 bip32: {
22187 public: 0x0488b21e,
22188 private: 0x0488ade4
22189 },
22190 pubKeyHash: 0x4c,
22191 scriptHash: 0x10,
861750ae 22192 wif: 0xcc
8b095871 22193};
ab78acc6 22194
56ad9601 22195bitcoinjs.bitcoin.networks.maza = {
861750ae 22196 messagePrefix: 'unused',
56ad9601
JS
22197 bip32: {
22198 public: 0x0488b21e,
22199 private: 0x0488ade4
22200 },
22201 pubKeyHash: 0x32,
22202 scriptHash: 0x09,
861750ae 22203 wif: 0xe0
56ad9601
JS
22204};
22205
9987f0c1 22206bitcoinjs.bitcoin.networks.dashtn = {
861750ae 22207 messagePrefix: 'unused',
c0386f3b
KR
22208 bip32: {
22209 public: 0x043587cf,
22210 private: 0x04358394
22211 },
22212 pubKeyHash: 0x8c,
22213 scriptHash: 0x13,
861750ae 22214 wif: 0xef
c0386f3b
KR
22215};
22216
9987f0c1 22217bitcoinjs.bitcoin.networks.game = {
861750ae 22218 messagePrefix: 'unused',
f88fab20 22219 bip32: {
22220 public: 0x0488b21e,
22221 private: 0x0488ade4
22222 },
22223 pubKeyHash: 0x26,
22224 scriptHash: 0x05,
861750ae 22225 wif: 0xa6
f88fab20 22226};
22227
9987f0c1 22228bitcoinjs.bitcoin.networks.namecoin = {
861750ae 22229 messagePrefix: 'unused',
8b095871
IC
22230 bip32: {
22231 public: 0x0488b21e,
22232 private: 0x0488ade4
22233 },
22234 pubKeyHash: 0x34,
9987f0c1 22235 scriptHash: 0x00, // TODO set this correctly
861750ae 22236 wif: 0x80
8b095871 22237};
3af2954a 22238
9987f0c1 22239bitcoinjs.bitcoin.networks.peercoin = {
861750ae 22240 messagePrefix: 'unused',
8b095871
IC
22241 bip32: {
22242 public: 0x0488b21e,
22243 private: 0x0488ade4
22244 },
22245 pubKeyHash: 0x37,
9987f0c1 22246 scriptHash: 0x00, // TODO set this correctly
861750ae 22247 wif: 0xb7
8b095871 22248};
3af2954a 22249
9987f0c1 22250bitcoinjs.bitcoin.networks.slimcoin = {
861750ae 22251 messagePrefix: 'unused',
01e81e53
GH
22252 bip32: {
22253 public: 0xef6adf10,
22254 private: 0xef69ea80
22255 },
22256 pubKeyHash: 0x3f,
22257 scriptHash: 0x7d,
861750ae 22258 wif: 0x46
01e81e53
GH
22259};
22260
9987f0c1 22261bitcoinjs.bitcoin.networks.slimcointn = {
861750ae 22262 messagePrefix: 'unused',
01e81e53
GH
22263 bip32: {
22264 public: 0x043587CF,
22265 private: 0x04358394
22266 },
22267 pubKeyHash: 0x6f,
22268 scriptHash: 0xc4,
861750ae 22269 wif: 0x57
01e81e53
GH
22270};
22271
9987f0c1
IC
22272bitcoinjs.bitcoin.networks.dogecoin = {
22273 messagePrefix: '\x19Dogecoin Signed Message:\n',
22274 bip32: {
22275 public: 0x02facafd,
22276 private: 0x02fac398
22277 },
22278 pubKeyHash: 0x1e,
22279 scriptHash: 0x16,
861750ae
JC
22280 wif: 0x9e
22281};
9987f0c1
IC
22282
22283bitcoinjs.bitcoin.networks.viacoin = {
22284 messagePrefix: '\x18Viacoin Signed Message:\n',
22285 bip32: {
22286 public: 0x0488b21e,
22287 private: 0x0488ade4
22288 },
22289 pubKeyHash: 0x47,
22290 scriptHash: 0x21,
861750ae
JC
22291 wif: 0xc7
22292};
9987f0c1
IC
22293
22294bitcoinjs.bitcoin.networks.viacointestnet = {
22295 messagePrefix: '\x18Viacoin Signed Message:\n',
22296 bip32: {
22297 public: 0x043587cf,
22298 private: 0x04358394
22299 },
22300 pubKeyHash: 0x7f,
22301 scriptHash: 0xc4,
861750ae
JC
22302 wif: 0xff
22303};
9987f0c1
IC
22304
22305bitcoinjs.bitcoin.networks.gamerscoin = {
22306 messagePrefix: '\x19Gamerscoin Signed Message:\n',
22307 bip32: {
22308 public: 0x019da462,
22309 private: 0x019d9cfe
22310 },
22311 pubKeyHash: 0x26,
22312 scriptHash: 0x05,
861750ae
JC
22313 wif: 0xA6
22314};
9987f0c1
IC
22315
22316bitcoinjs.bitcoin.networks.jumbucks = {
22317 messagePrefix: '\x19Jumbucks Signed Message:\n',
22318 bip32: {
22319 public: 0x037a689a,
22320 private: 0x037a6460
22321 },
22322 pubKeyHash: 0x2b,
22323 scriptHash: 0x05,
861750ae
JC
22324 wif: 0xab
22325};
9987f0c1
IC
22326
22327bitcoinjs.bitcoin.networks.zetacoin = {
22328 messagePrefix: '\x18Zetacoin Signed Message:\n',
22329 bip32: {
22330 public: 0x0488b21e,
22331 private: 0x0488ade4
22332 },
22333 pubKeyHash: 0x50,
22334 scriptHash: 0x09,
861750ae
JC
22335 wif: 0xe0
22336};
b3cc3930
IC
22337
22338bitcoinjs.bitcoin.networks.myriadcoin = {
861750ae 22339 messagePrefix: 'unused',
b3cc3930
IC
22340 bip32: {
22341 public: 0x0488b21e,
22342 private: 0x0488ade4
22343 },
22344 pubKeyHash: 0x32,
22345 scriptHash: 0x00, // TODO set this correctly
861750ae 22346 wif: 0xb2
b3cc3930 22347};
f128bd58
IC
22348
22349bitcoinjs.bitcoin.networks.pivx = {
861750ae 22350 messagePrefix: 'unused',
f128bd58
IC
22351 bip32: {
22352 public: 0x022d2533,
22353 private: 0x0221312b
22354 },
22355 pubKeyHash: 0x1e,
22356 scriptHash: 0x0d,
861750ae 22357 wif: 0xd4
f128bd58
IC
22358};
22359
22360bitcoinjs.bitcoin.networks.pivxtestnet = {
861750ae 22361 messagePrefix: 'unused',
f128bd58
IC
22362 bip32: {
22363 public: 0x3a8061a0,
22364 private: 0x3a805837
22365 },
22366 pubKeyHash: 0x8b,
22367 scriptHash: 0x13,
861750ae 22368 wif: 0xef
f128bd58 22369};
8b095871
IC
22370</script>
22371 <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.ethUtil = 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){
22372(function (global){
22373'use strict';
3af2954a 22374
8b095871
IC
22375// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
22376// original notice:
3af2954a 22377
8b095871
IC
22378/*!
22379 * The buffer module from node.js, for the browser.
22380 *
22381 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
22382 * @license MIT
22383 */
22384function compare(a, b) {
22385 if (a === b) {
22386 return 0;
22387 }
3af2954a 22388
8b095871
IC
22389 var x = a.length;
22390 var y = b.length;
3af2954a 22391
8b095871
IC
22392 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
22393 if (a[i] !== b[i]) {
22394 x = a[i];
22395 y = b[i];
22396 break;
22397 }
22398 }
3af2954a 22399
8b095871
IC
22400 if (x < y) {
22401 return -1;
22402 }
22403 if (y < x) {
22404 return 1;
22405 }
22406 return 0;
ab78acc6 22407}
8b095871
IC
22408function isBuffer(b) {
22409 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
22410 return global.Buffer.isBuffer(b);
22411 }
22412 return !!(b != null && b._isBuffer);
ab78acc6 22413}
3af2954a 22414
8b095871
IC
22415// based on node assert, original notice:
22416
22417// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
22418//
22419// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
22420//
22421// Originally from narwhal.js (http://narwhaljs.org)
22422// Copyright (c) 2009 Thomas Robinson <280north.com>
22423//
22424// Permission is hereby granted, free of charge, to any person obtaining a copy
22425// of this software and associated documentation files (the 'Software'), to
22426// deal in the Software without restriction, including without limitation the
22427// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
22428// sell copies of the Software, and to permit persons to whom the Software is
22429// furnished to do so, subject to the following conditions:
22430//
22431// The above copyright notice and this permission notice shall be included in
22432// all copies or substantial portions of the Software.
22433//
22434// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22435// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22436// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22437// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
22438// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22439// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22440
22441var util = require('util/');
22442var hasOwn = Object.prototype.hasOwnProperty;
22443var pSlice = Array.prototype.slice;
22444var functionsHaveNames = (function () {
22445 return function foo() {}.name === 'foo';
22446}());
22447function pToString (obj) {
22448 return Object.prototype.toString.call(obj);
22449}
22450function isView(arrbuf) {
22451 if (isBuffer(arrbuf)) {
22452 return false;
ab78acc6 22453 }
8b095871
IC
22454 if (typeof global.ArrayBuffer !== 'function') {
22455 return false;
22456 }
22457 if (typeof ArrayBuffer.isView === 'function') {
22458 return ArrayBuffer.isView(arrbuf);
22459 }
22460 if (!arrbuf) {
22461 return false;
22462 }
22463 if (arrbuf instanceof DataView) {
22464 return true;
22465 }
22466 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
22467 return true;
22468 }
22469 return false;
ab78acc6 22470}
8b095871
IC
22471// 1. The assert module provides functions that throw
22472// AssertionError's when particular conditions are not met. The
22473// assert module must conform to the following interface.
3af2954a 22474
8b095871 22475var assert = module.exports = ok;
3af2954a 22476
8b095871
IC
22477// 2. The AssertionError is defined in assert.
22478// new assert.AssertionError({ message: message,
22479// actual: actual,
22480// expected: expected })
22481
22482var regex = /\s*function\s+([^\(\s]*)\s*/;
22483// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
22484function getName(func) {
22485 if (!util.isFunction(func)) {
22486 return;
22487 }
22488 if (functionsHaveNames) {
22489 return func.name;
22490 }
22491 var str = func.toString();
22492 var match = str.match(regex);
22493 return match && match[1];
ab78acc6 22494}
8b095871
IC
22495assert.AssertionError = function AssertionError(options) {
22496 this.name = 'AssertionError';
22497 this.actual = options.actual;
22498 this.expected = options.expected;
22499 this.operator = options.operator;
22500 if (options.message) {
22501 this.message = options.message;
22502 this.generatedMessage = false;
22503 } else {
22504 this.message = getMessage(this);
22505 this.generatedMessage = true;
22506 }
22507 var stackStartFunction = options.stackStartFunction || fail;
22508 if (Error.captureStackTrace) {
22509 Error.captureStackTrace(this, stackStartFunction);
22510 } else {
22511 // non v8 browsers so we can have a stacktrace
22512 var err = new Error();
22513 if (err.stack) {
22514 var out = err.stack;
22515
22516 // try to strip useless frames
22517 var fn_name = getName(stackStartFunction);
22518 var idx = out.indexOf('\n' + fn_name);
22519 if (idx >= 0) {
22520 // once we have located the function frame
22521 // we need to strip out everything before it (and its line)
22522 var next_line = out.indexOf('\n', idx + 1);
22523 out = out.substring(next_line + 1);
22524 }
3af2954a 22525
8b095871
IC
22526 this.stack = out;
22527 }
22528 }
22529};
3af2954a 22530
8b095871
IC
22531// assert.AssertionError instanceof Error
22532util.inherits(assert.AssertionError, Error);
3af2954a 22533
8b095871
IC
22534function truncate(s, n) {
22535 if (typeof s === 'string') {
22536 return s.length < n ? s : s.slice(0, n);
22537 } else {
22538 return s;
3af2954a 22539 }
ab78acc6 22540}
8b095871
IC
22541function inspect(something) {
22542 if (functionsHaveNames || !util.isFunction(something)) {
22543 return util.inspect(something);
22544 }
22545 var rawname = getName(something);
22546 var name = rawname ? ': ' + rawname : '';
22547 return '[Function' + name + ']';
22548}
22549function getMessage(self) {
22550 return truncate(inspect(self.actual), 128) + ' ' +
22551 self.operator + ' ' +
22552 truncate(inspect(self.expected), 128);
ab78acc6 22553}
3af2954a 22554
8b095871
IC
22555// At present only the three keys mentioned above are used and
22556// understood by the spec. Implementations or sub modules can pass
22557// other keys to the AssertionError's constructor - they will be
22558// ignored.
3af2954a 22559
8b095871
IC
22560// 3. All of the following functions must throw an AssertionError
22561// when a corresponding condition is not met, with a message that
22562// may be undefined if not provided. All assertion methods provide
22563// both the actual and expected values to the assertion error for
22564// display purposes.
3af2954a 22565
8b095871
IC
22566function fail(actual, expected, message, operator, stackStartFunction) {
22567 throw new assert.AssertionError({
22568 message: message,
22569 actual: actual,
22570 expected: expected,
22571 operator: operator,
22572 stackStartFunction: stackStartFunction
22573 });
ab78acc6 22574}
3af2954a 22575
8b095871
IC
22576// EXTENSION! allows for well behaved errors defined elsewhere.
22577assert.fail = fail;
3af2954a 22578
8b095871
IC
22579// 4. Pure assertion tests whether a value is truthy, as determined
22580// by !!guard.
22581// assert.ok(guard, message_opt);
22582// This statement is equivalent to assert.equal(true, !!guard,
22583// message_opt);. To test strictly for the value true, use
22584// assert.strictEqual(true, guard, message_opt);.
3af2954a 22585
8b095871
IC
22586function ok(value, message) {
22587 if (!value) fail(value, true, message, '==', assert.ok);
ab78acc6 22588}
8b095871 22589assert.ok = ok;
3af2954a 22590
8b095871
IC
22591// 5. The equality assertion tests shallow, coercive equality with
22592// ==.
22593// assert.equal(actual, expected, message_opt);
3af2954a 22594
8b095871
IC
22595assert.equal = function equal(actual, expected, message) {
22596 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
22597};
3af2954a 22598
8b095871
IC
22599// 6. The non-equality assertion tests for whether two objects are not equal
22600// with != assert.notEqual(actual, expected, message_opt);
3af2954a 22601
8b095871
IC
22602assert.notEqual = function notEqual(actual, expected, message) {
22603 if (actual == expected) {
22604 fail(actual, expected, message, '!=', assert.notEqual);
ab78acc6 22605 }
8b095871
IC
22606};
22607
22608// 7. The equivalence assertion tests a deep equality relation.
22609// assert.deepEqual(actual, expected, message_opt);
22610
22611assert.deepEqual = function deepEqual(actual, expected, message) {
22612 if (!_deepEqual(actual, expected, false)) {
22613 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
ab78acc6 22614 }
8b095871 22615};
3af2954a 22616
8b095871
IC
22617assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
22618 if (!_deepEqual(actual, expected, true)) {
22619 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
3af2954a 22620 }
8b095871
IC
22621};
22622
22623function _deepEqual(actual, expected, strict, memos) {
22624 // 7.1. All identical values are equivalent, as determined by ===.
22625 if (actual === expected) {
22626 return true;
22627 } else if (isBuffer(actual) && isBuffer(expected)) {
22628 return compare(actual, expected) === 0;
22629
22630 // 7.2. If the expected value is a Date object, the actual value is
22631 // equivalent if it is also a Date object that refers to the same time.
22632 } else if (util.isDate(actual) && util.isDate(expected)) {
22633 return actual.getTime() === expected.getTime();
22634
22635 // 7.3 If the expected value is a RegExp object, the actual value is
22636 // equivalent if it is also a RegExp object with the same source and
22637 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
22638 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
22639 return actual.source === expected.source &&
22640 actual.global === expected.global &&
22641 actual.multiline === expected.multiline &&
22642 actual.lastIndex === expected.lastIndex &&
22643 actual.ignoreCase === expected.ignoreCase;
22644
22645 // 7.4. Other pairs that do not both pass typeof value == 'object',
22646 // equivalence is determined by ==.
22647 } else if ((actual === null || typeof actual !== 'object') &&
22648 (expected === null || typeof expected !== 'object')) {
22649 return strict ? actual === expected : actual == expected;
22650
22651 // If both values are instances of typed arrays, wrap their underlying
22652 // ArrayBuffers in a Buffer each to increase performance
22653 // This optimization requires the arrays to have the same type as checked by
22654 // Object.prototype.toString (aka pToString). Never perform binary
22655 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
22656 // bit patterns are not identical.
22657 } else if (isView(actual) && isView(expected) &&
22658 pToString(actual) === pToString(expected) &&
22659 !(actual instanceof Float32Array ||
22660 actual instanceof Float64Array)) {
22661 return compare(new Uint8Array(actual.buffer),
22662 new Uint8Array(expected.buffer)) === 0;
22663
22664 // 7.5 For all other Object pairs, including Array objects, equivalence is
22665 // determined by having the same number of owned properties (as verified
22666 // with Object.prototype.hasOwnProperty.call), the same set of keys
22667 // (although not necessarily the same order), equivalent values for every
22668 // corresponding key, and an identical 'prototype' property. Note: this
22669 // accounts for both named and indexed properties on Arrays.
22670 } else if (isBuffer(actual) !== isBuffer(expected)) {
22671 return false;
22672 } else {
22673 memos = memos || {actual: [], expected: []};
3af2954a 22674
8b095871
IC
22675 var actualIndex = memos.actual.indexOf(actual);
22676 if (actualIndex !== -1) {
22677 if (actualIndex === memos.expected.indexOf(expected)) {
22678 return true;
ab78acc6 22679 }
3af2954a 22680 }
8b095871
IC
22681
22682 memos.actual.push(actual);
22683 memos.expected.push(expected);
22684
22685 return objEquiv(actual, expected, strict, memos);
3af2954a 22686 }
ab78acc6 22687}
3af2954a 22688
8b095871
IC
22689function isArguments(object) {
22690 return Object.prototype.toString.call(object) == '[object Arguments]';
ab78acc6 22691}
3af2954a 22692
8b095871
IC
22693function objEquiv(a, b, strict, actualVisitedObjects) {
22694 if (a === null || a === undefined || b === null || b === undefined)
22695 return false;
22696 // if one is a primitive, the other must be same
22697 if (util.isPrimitive(a) || util.isPrimitive(b))
22698 return a === b;
22699 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
22700 return false;
22701 var aIsArgs = isArguments(a);
22702 var bIsArgs = isArguments(b);
22703 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
22704 return false;
22705 if (aIsArgs) {
22706 a = pSlice.call(a);
22707 b = pSlice.call(b);
22708 return _deepEqual(a, b, strict);
22709 }
22710 var ka = objectKeys(a);
22711 var kb = objectKeys(b);
22712 var key, i;
22713 // having the same number of owned properties (keys incorporates
22714 // hasOwnProperty)
22715 if (ka.length !== kb.length)
22716 return false;
22717 //the same set of keys (although not necessarily the same order),
22718 ka.sort();
22719 kb.sort();
22720 //~~~cheap key test
22721 for (i = ka.length - 1; i >= 0; i--) {
22722 if (ka[i] !== kb[i])
22723 return false;
22724 }
22725 //equivalent values for every corresponding key, and
22726 //~~~possibly expensive deep test
22727 for (i = ka.length - 1; i >= 0; i--) {
22728 key = ka[i];
22729 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
22730 return false;
22731 }
22732 return true;
ab78acc6 22733}
3af2954a 22734
8b095871
IC
22735// 8. The non-equivalence assertion tests for any deep inequality.
22736// assert.notDeepEqual(actual, expected, message_opt);
3af2954a 22737
8b095871
IC
22738assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
22739 if (_deepEqual(actual, expected, false)) {
22740 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
3af2954a 22741 }
8b095871 22742};
3af2954a 22743
8b095871
IC
22744assert.notDeepStrictEqual = notDeepStrictEqual;
22745function notDeepStrictEqual(actual, expected, message) {
22746 if (_deepEqual(actual, expected, true)) {
22747 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
22748 }
ab78acc6 22749}
3af2954a 22750
3af2954a 22751
8b095871
IC
22752// 9. The strict equality assertion tests strict equality, as determined by ===.
22753// assert.strictEqual(actual, expected, message_opt);
3af2954a 22754
8b095871
IC
22755assert.strictEqual = function strictEqual(actual, expected, message) {
22756 if (actual !== expected) {
22757 fail(actual, expected, message, '===', assert.strictEqual);
22758 }
22759};
3af2954a 22760
8b095871
IC
22761// 10. The strict non-equality assertion tests for strict inequality, as
22762// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
3af2954a 22763
8b095871
IC
22764assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
22765 if (actual === expected) {
22766 fail(actual, expected, message, '!==', assert.notStrictEqual);
22767 }
22768};
3af2954a 22769
8b095871
IC
22770function expectedException(actual, expected) {
22771 if (!actual || !expected) {
22772 return false;
22773 }
3af2954a 22774
8b095871
IC
22775 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
22776 return expected.test(actual);
22777 }
3af2954a 22778
8b095871
IC
22779 try {
22780 if (actual instanceof expected) {
22781 return true;
22782 }
22783 } catch (e) {
22784 // Ignore. The instanceof check doesn't work for arrow functions.
22785 }
3af2954a 22786
8b095871
IC
22787 if (Error.isPrototypeOf(expected)) {
22788 return false;
22789 }
22790
22791 return expected.call({}, actual) === true;
ab78acc6 22792}
3af2954a 22793
8b095871
IC
22794function _tryBlock(block) {
22795 var error;
22796 try {
22797 block();
22798 } catch (e) {
22799 error = e;
22800 }
22801 return error;
ab78acc6 22802}
3af2954a 22803
8b095871
IC
22804function _throws(shouldThrow, block, expected, message) {
22805 var actual;
22806
22807 if (typeof block !== 'function') {
22808 throw new TypeError('"block" argument must be a function');
3af2954a 22809 }
8b095871
IC
22810
22811 if (typeof expected === 'string') {
22812 message = expected;
22813 expected = null;
ab78acc6 22814 }
8b095871
IC
22815
22816 actual = _tryBlock(block);
22817
22818 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
22819 (message ? ' ' + message : '.');
22820
22821 if (shouldThrow && !actual) {
22822 fail(actual, expected, 'Missing expected exception' + message);
ab78acc6 22823 }
8b095871
IC
22824
22825 var userProvidedMessage = typeof message === 'string';
22826 var isUnwantedException = !shouldThrow && util.isError(actual);
22827 var isUnexpectedException = !shouldThrow && actual && !expected;
22828
22829 if ((isUnwantedException &&
22830 userProvidedMessage &&
22831 expectedException(actual, expected)) ||
22832 isUnexpectedException) {
22833 fail(actual, expected, 'Got unwanted exception' + message);
ab78acc6 22834 }
3af2954a 22835
8b095871
IC
22836 if ((shouldThrow && actual && expected &&
22837 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
22838 throw actual;
22839 }
ab78acc6 22840}
3af2954a 22841
8b095871
IC
22842// 11. Expected to throw an error:
22843// assert.throws(block, Error_opt, message_opt);
22844
22845assert.throws = function(block, /*optional*/error, /*optional*/message) {
22846 _throws(true, block, error, message);
22847};
22848
22849// EXTENSION! This is annoying to write outside this module.
22850assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
22851 _throws(false, block, error, message);
22852};
22853
22854assert.ifError = function(err) { if (err) throw err; };
22855
22856var objectKeys = Object.keys || function (obj) {
22857 var keys = [];
22858 for (var key in obj) {
22859 if (hasOwn.call(obj, key)) keys.push(key);
3af2954a 22860 }
8b095871
IC
22861 return keys;
22862};
3af2954a 22863
8b095871
IC
22864}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
22865},{"util/":30}],2:[function(require,module,exports){
22866'use strict'
22867
22868exports.byteLength = byteLength
22869exports.toByteArray = toByteArray
22870exports.fromByteArray = fromByteArray
22871
22872var lookup = []
22873var revLookup = []
22874var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
22875
22876var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
22877for (var i = 0, len = code.length; i < len; ++i) {
22878 lookup[i] = code[i]
22879 revLookup[code.charCodeAt(i)] = i
22880}
22881
22882revLookup['-'.charCodeAt(0)] = 62
22883revLookup['_'.charCodeAt(0)] = 63
22884
22885function placeHoldersCount (b64) {
22886 var len = b64.length
22887 if (len % 4 > 0) {
22888 throw new Error('Invalid string. Length must be a multiple of 4')
22889 }
22890
22891 // the number of equal signs (place holders)
22892 // if there are two placeholders, than the two characters before it
22893 // represent one byte
22894 // if there is only one, then the three characters before it represent 2 bytes
22895 // this is just a cheap hack to not do indexOf twice
22896 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
ab78acc6
IC
22897}
22898
8b095871
IC
22899function byteLength (b64) {
22900 // base64 is 4/3 + up to two characters of the original data
22901 return b64.length * 3 / 4 - placeHoldersCount(b64)
ab78acc6 22902}
3af2954a 22903
8b095871
IC
22904function toByteArray (b64) {
22905 var i, j, l, tmp, placeHolders, arr
22906 var len = b64.length
22907 placeHolders = placeHoldersCount(b64)
22908
22909 arr = new Arr(len * 3 / 4 - placeHolders)
22910
22911 // if there are placeholders, only get up to the last complete 4 chars
22912 l = placeHolders > 0 ? len - 4 : len
22913
22914 var L = 0
22915
22916 for (i = 0, j = 0; i < l; i += 4, j += 3) {
22917 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
22918 arr[L++] = (tmp >> 16) & 0xFF
22919 arr[L++] = (tmp >> 8) & 0xFF
22920 arr[L++] = tmp & 0xFF
22921 }
22922
22923 if (placeHolders === 2) {
22924 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
22925 arr[L++] = tmp & 0xFF
22926 } else if (placeHolders === 1) {
22927 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
22928 arr[L++] = (tmp >> 8) & 0xFF
22929 arr[L++] = tmp & 0xFF
22930 }
22931
22932 return arr
ab78acc6 22933}
3af2954a 22934
8b095871
IC
22935function tripletToBase64 (num) {
22936 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
ab78acc6 22937}
3af2954a 22938
8b095871
IC
22939function encodeChunk (uint8, start, end) {
22940 var tmp
22941 var output = []
22942 for (var i = start; i < end; i += 3) {
22943 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
22944 output.push(tripletToBase64(tmp))
22945 }
22946 return output.join('')
ab78acc6 22947}
3af2954a 22948
8b095871
IC
22949function fromByteArray (uint8) {
22950 var tmp
22951 var len = uint8.length
22952 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
22953 var output = ''
22954 var parts = []
22955 var maxChunkLength = 16383 // must be multiple of 3
22956
22957 // go through the array every three bytes, we'll deal with trailing stuff later
22958 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
22959 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
22960 }
22961
22962 // pad the end with zeros, but make sure to not forget the extra bytes
22963 if (extraBytes === 1) {
22964 tmp = uint8[len - 1]
22965 output += lookup[tmp >> 2]
22966 output += lookup[(tmp << 4) & 0x3F]
22967 output += '=='
22968 } else if (extraBytes === 2) {
22969 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
22970 output += lookup[tmp >> 10]
22971 output += lookup[(tmp >> 4) & 0x3F]
22972 output += lookup[(tmp << 2) & 0x3F]
22973 output += '='
22974 }
22975
22976 parts.push(output)
22977
22978 return parts.join('')
ab78acc6 22979}
3af2954a 22980
8b095871 22981},{}],3:[function(require,module,exports){
3af2954a 22982
8b095871
IC
22983},{}],4:[function(require,module,exports){
22984(function (global){
22985'use strict';
22986
22987var buffer = require('buffer');
22988var Buffer = buffer.Buffer;
22989var SlowBuffer = buffer.SlowBuffer;
22990var MAX_LEN = buffer.kMaxLength || 2147483647;
22991exports.alloc = function alloc(size, fill, encoding) {
22992 if (typeof Buffer.alloc === 'function') {
22993 return Buffer.alloc(size, fill, encoding);
ab78acc6 22994 }
8b095871
IC
22995 if (typeof encoding === 'number') {
22996 throw new TypeError('encoding must not be number');
22997 }
22998 if (typeof size !== 'number') {
22999 throw new TypeError('size must be a number');
23000 }
23001 if (size > MAX_LEN) {
23002 throw new RangeError('size is too large');
23003 }
23004 var enc = encoding;
23005 var _fill = fill;
23006 if (_fill === undefined) {
23007 enc = undefined;
23008 _fill = 0;
23009 }
23010 var buf = new Buffer(size);
23011 if (typeof _fill === 'string') {
23012 var fillBuf = new Buffer(_fill, enc);
23013 var flen = fillBuf.length;
23014 var i = -1;
23015 while (++i < size) {
23016 buf[i] = fillBuf[i % flen];
ab78acc6 23017 }
ab78acc6 23018 } else {
8b095871 23019 buf.fill(_fill);
ab78acc6 23020 }
8b095871 23021 return buf;
ab78acc6 23022}
8b095871
IC
23023exports.allocUnsafe = function allocUnsafe(size) {
23024 if (typeof Buffer.allocUnsafe === 'function') {
23025 return Buffer.allocUnsafe(size);
23026 }
23027 if (typeof size !== 'number') {
23028 throw new TypeError('size must be a number');
23029 }
23030 if (size > MAX_LEN) {
23031 throw new RangeError('size is too large');
23032 }
23033 return new Buffer(size);
ab78acc6 23034}
8b095871
IC
23035exports.from = function from(value, encodingOrOffset, length) {
23036 if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
23037 return Buffer.from(value, encodingOrOffset, length);
23038 }
23039 if (typeof value === 'number') {
23040 throw new TypeError('"value" argument must not be a number');
23041 }
23042 if (typeof value === 'string') {
23043 return new Buffer(value, encodingOrOffset);
23044 }
23045 if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
23046 var offset = encodingOrOffset;
23047 if (arguments.length === 1) {
23048 return new Buffer(value);
23049 }
23050 if (typeof offset === 'undefined') {
23051 offset = 0;
23052 }
23053 var len = length;
23054 if (typeof len === 'undefined') {
23055 len = value.byteLength - offset;
23056 }
23057 if (offset >= value.byteLength) {
23058 throw new RangeError('\'offset\' is out of bounds');
23059 }
23060 if (len > value.byteLength - offset) {
23061 throw new RangeError('\'length\' is out of bounds');
23062 }
23063 return new Buffer(value.slice(offset, offset + len));
23064 }
23065 if (Buffer.isBuffer(value)) {
23066 var out = new Buffer(value.length);
23067 value.copy(out, 0, 0, value.length);
23068 return out;
23069 }
23070 if (value) {
23071 if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
23072 return new Buffer(value);
23073 }
23074 if (value.type === 'Buffer' && Array.isArray(value.data)) {
23075 return new Buffer(value.data);
23076 }
23077 }
3af2954a 23078
8b095871 23079 throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
ab78acc6 23080}
8b095871
IC
23081exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
23082 if (typeof Buffer.allocUnsafeSlow === 'function') {
23083 return Buffer.allocUnsafeSlow(size);
23084 }
23085 if (typeof size !== 'number') {
23086 throw new TypeError('size must be a number');
23087 }
23088 if (size >= MAX_LEN) {
23089 throw new RangeError('size is too large');
23090 }
23091 return new SlowBuffer(size);
ab78acc6 23092}
3af2954a 23093
8b095871
IC
23094}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
23095},{"buffer":5}],5:[function(require,module,exports){
23096/*!
23097 * The buffer module from node.js, for the browser.
23098 *
23099 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
23100 * @license MIT
23101 */
23102/* eslint-disable no-proto */
3af2954a 23103
8b095871 23104'use strict'
3af2954a 23105
8b095871
IC
23106var base64 = require('base64-js')
23107var ieee754 = require('ieee754')
3af2954a 23108
8b095871
IC
23109exports.Buffer = Buffer
23110exports.SlowBuffer = SlowBuffer
23111exports.INSPECT_MAX_BYTES = 50
23112
23113var K_MAX_LENGTH = 0x7fffffff
23114exports.kMaxLength = K_MAX_LENGTH
23115
23116/**
23117 * If `Buffer.TYPED_ARRAY_SUPPORT`:
23118 * === true Use Uint8Array implementation (fastest)
23119 * === false Print warning and recommend using `buffer` v4.x which has an Object
23120 * implementation (most compatible, even IE6)
23121 *
23122 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
23123 * Opera 11.6+, iOS 4.2+.
23124 *
23125 * We report that the browser does not support typed arrays if the are not subclassable
23126 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
23127 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
23128 * for __proto__ and has a buggy typed array implementation.
23129 */
23130Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
23131
23132if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
23133 typeof console.error === 'function') {
23134 console.error(
23135 'This browser lacks typed array (Uint8Array) support which is required by ' +
23136 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
23137 )
ab78acc6 23138}
3af2954a 23139
8b095871
IC
23140function typedArraySupport () {
23141 // Can typed array instances can be augmented?
23142 try {
23143 var arr = new Uint8Array(1)
23144 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
23145 return arr.foo() === 42
23146 } catch (e) {
23147 return false
23148 }
ab78acc6 23149}
3af2954a 23150
8b095871
IC
23151function createBuffer (length) {
23152 if (length > K_MAX_LENGTH) {
23153 throw new RangeError('Invalid typed array length')
3af2954a 23154 }
8b095871
IC
23155 // Return an augmented `Uint8Array` instance
23156 var buf = new Uint8Array(length)
23157 buf.__proto__ = Buffer.prototype
23158 return buf
ab78acc6 23159}
3af2954a 23160
8b095871
IC
23161/**
23162 * The Buffer constructor returns instances of `Uint8Array` that have their
23163 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
23164 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
23165 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
23166 * returns a single octet.
23167 *
23168 * The `Uint8Array` prototype remains unmodified.
23169 */
3af2954a 23170
8b095871
IC
23171function Buffer (arg, encodingOrOffset, length) {
23172 // Common case.
23173 if (typeof arg === 'number') {
23174 if (typeof encodingOrOffset === 'string') {
23175 throw new Error(
23176 'If encoding is specified then the first argument must be a string'
23177 )
23178 }
23179 return allocUnsafe(arg)
23180 }
23181 return from(arg, encodingOrOffset, length)
ab78acc6 23182}
3af2954a 23183
8b095871
IC
23184// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
23185if (typeof Symbol !== 'undefined' && Symbol.species &&
23186 Buffer[Symbol.species] === Buffer) {
23187 Object.defineProperty(Buffer, Symbol.species, {
23188 value: null,
23189 configurable: true,
23190 enumerable: false,
23191 writable: false
23192 })
ab78acc6 23193}
3af2954a 23194
8b095871 23195Buffer.poolSize = 8192 // not used by this implementation
3af2954a 23196
8b095871
IC
23197function from (value, encodingOrOffset, length) {
23198 if (typeof value === 'number') {
23199 throw new TypeError('"value" argument must not be a number')
23200 }
3af2954a 23201
8b095871
IC
23202 if (value instanceof ArrayBuffer) {
23203 return fromArrayBuffer(value, encodingOrOffset, length)
23204 }
3af2954a 23205
8b095871
IC
23206 if (typeof value === 'string') {
23207 return fromString(value, encodingOrOffset)
23208 }
3af2954a 23209
8b095871 23210 return fromObject(value)
ab78acc6 23211}
3af2954a 23212
8b095871
IC
23213/**
23214 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
23215 * if value is a number.
23216 * Buffer.from(str[, encoding])
23217 * Buffer.from(array)
23218 * Buffer.from(buffer)
23219 * Buffer.from(arrayBuffer[, byteOffset[, length]])
23220 **/
23221Buffer.from = function (value, encodingOrOffset, length) {
23222 return from(value, encodingOrOffset, length)
ab78acc6 23223}
3af2954a 23224
8b095871
IC
23225// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
23226// https://github.com/feross/buffer/pull/148
23227Buffer.prototype.__proto__ = Uint8Array.prototype
23228Buffer.__proto__ = Uint8Array
23229
23230function assertSize (size) {
23231 if (typeof size !== 'number') {
23232 throw new TypeError('"size" argument must be a number')
23233 } else if (size < 0) {
23234 throw new RangeError('"size" argument must not be negative')
23235 }
23236}
23237
23238function alloc (size, fill, encoding) {
23239 assertSize(size)
23240 if (size <= 0) {
23241 return createBuffer(size)
3af2954a 23242 }
8b095871
IC
23243 if (fill !== undefined) {
23244 // Only pay attention to encoding if it's a string. This
23245 // prevents accidentally sending in a number that would
23246 // be interpretted as a start offset.
23247 return typeof encoding === 'string'
23248 ? createBuffer(size).fill(fill, encoding)
23249 : createBuffer(size).fill(fill)
23250 }
23251 return createBuffer(size)
ab78acc6 23252}
3af2954a 23253
8b095871
IC
23254/**
23255 * Creates a new filled Buffer instance.
23256 * alloc(size[, fill[, encoding]])
23257 **/
23258Buffer.alloc = function (size, fill, encoding) {
23259 return alloc(size, fill, encoding)
ab78acc6 23260}
3af2954a 23261
8b095871
IC
23262function allocUnsafe (size) {
23263 assertSize(size)
23264 return createBuffer(size < 0 ? 0 : checked(size) | 0)
ab78acc6 23265}
3af2954a 23266
8b095871
IC
23267/**
23268 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
23269 * */
23270Buffer.allocUnsafe = function (size) {
23271 return allocUnsafe(size)
23272}
23273/**
23274 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
23275 */
23276Buffer.allocUnsafeSlow = function (size) {
23277 return allocUnsafe(size)
ab78acc6 23278}
3af2954a 23279
8b095871
IC
23280function fromString (string, encoding) {
23281 if (typeof encoding !== 'string' || encoding === '') {
23282 encoding = 'utf8'
23283 }
23284
23285 if (!Buffer.isEncoding(encoding)) {
23286 throw new TypeError('"encoding" must be a valid string encoding')
23287 }
23288
23289 var length = byteLength(string, encoding) | 0
23290 var buf = createBuffer(length)
23291
23292 var actual = buf.write(string, encoding)
23293
23294 if (actual !== length) {
23295 // Writing a hex string, for example, that contains invalid characters will
23296 // cause everything after the first invalid character to be ignored. (e.g.
23297 // 'abxxcd' will be treated as 'ab')
23298 buf = buf.slice(0, actual)
23299 }
23300
23301 return buf
ab78acc6 23302}
3af2954a 23303
8b095871
IC
23304function fromArrayLike (array) {
23305 var length = array.length < 0 ? 0 : checked(array.length) | 0
23306 var buf = createBuffer(length)
23307 for (var i = 0; i < length; i += 1) {
23308 buf[i] = array[i] & 255
23309 }
23310 return buf
23311}
3af2954a 23312
8b095871
IC
23313function fromArrayBuffer (array, byteOffset, length) {
23314 if (byteOffset < 0 || array.byteLength < byteOffset) {
23315 throw new RangeError('\'offset\' is out of bounds')
23316 }
3af2954a 23317
8b095871
IC
23318 if (array.byteLength < byteOffset + (length || 0)) {
23319 throw new RangeError('\'length\' is out of bounds')
ab78acc6
IC
23320 }
23321
8b095871
IC
23322 var buf
23323 if (byteOffset === undefined && length === undefined) {
23324 buf = new Uint8Array(array)
23325 } else if (length === undefined) {
23326 buf = new Uint8Array(array, byteOffset)
23327 } else {
23328 buf = new Uint8Array(array, byteOffset, length)
23329 }
3af2954a 23330
8b095871
IC
23331 // Return an augmented `Uint8Array` instance
23332 buf.__proto__ = Buffer.prototype
23333 return buf
23334}
23335
23336function fromObject (obj) {
23337 if (Buffer.isBuffer(obj)) {
23338 var len = checked(obj.length) | 0
23339 var buf = createBuffer(len)
23340
23341 if (buf.length === 0) {
23342 return buf
ab78acc6 23343 }
8b095871
IC
23344
23345 obj.copy(buf, 0, 0, len)
23346 return buf
23347 }
23348
23349 if (obj) {
23350 if (ArrayBuffer.isView(obj) || 'length' in obj) {
23351 if (typeof obj.length !== 'number' || isnan(obj.length)) {
23352 return createBuffer(0)
ab78acc6 23353 }
8b095871 23354 return fromArrayLike(obj)
ab78acc6 23355 }
3af2954a 23356
8b095871
IC
23357 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
23358 return fromArrayLike(obj.data)
3af2954a
IC
23359 }
23360 }
8b095871
IC
23361
23362 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
ab78acc6 23363}
3af2954a 23364
8b095871
IC
23365function checked (length) {
23366 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
23367 // length is NaN (which is otherwise coerced to zero.)
23368 if (length >= K_MAX_LENGTH) {
23369 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
23370 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
ab78acc6 23371 }
8b095871
IC
23372 return length | 0
23373}
23374
23375function SlowBuffer (length) {
23376 if (+length != length) { // eslint-disable-line eqeqeq
23377 length = 0
3af2954a 23378 }
8b095871 23379 return Buffer.alloc(+length)
ab78acc6 23380}
3af2954a 23381
8b095871
IC
23382Buffer.isBuffer = function isBuffer (b) {
23383 return b != null && b._isBuffer === true
ab78acc6 23384}
3af2954a 23385
8b095871
IC
23386Buffer.compare = function compare (a, b) {
23387 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
23388 throw new TypeError('Arguments must be Buffers')
23389 }
23390
23391 if (a === b) return 0
23392
23393 var x = a.length
23394 var y = b.length
23395
23396 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
23397 if (a[i] !== b[i]) {
23398 x = a[i]
23399 y = b[i]
23400 break
ab78acc6
IC
23401 }
23402 }
8b095871
IC
23403
23404 if (x < y) return -1
23405 if (y < x) return 1
23406 return 0
23407}
23408
23409Buffer.isEncoding = function isEncoding (encoding) {
23410 switch (String(encoding).toLowerCase()) {
23411 case 'hex':
23412 case 'utf8':
23413 case 'utf-8':
23414 case 'ascii':
23415 case 'latin1':
23416 case 'binary':
23417 case 'base64':
23418 case 'ucs2':
23419 case 'ucs-2':
23420 case 'utf16le':
23421 case 'utf-16le':
23422 return true
23423 default:
23424 return false
23425 }
ab78acc6
IC
23426}
23427
8b095871
IC
23428Buffer.concat = function concat (list, length) {
23429 if (!Array.isArray(list)) {
23430 throw new TypeError('"list" argument must be an Array of Buffers')
23431 }
ab78acc6 23432
8b095871
IC
23433 if (list.length === 0) {
23434 return Buffer.alloc(0)
23435 }
ab78acc6 23436
8b095871
IC
23437 var i
23438 if (length === undefined) {
23439 length = 0
23440 for (i = 0; i < list.length; ++i) {
23441 length += list[i].length
23442 }
3af2954a 23443 }
8b095871
IC
23444
23445 var buffer = Buffer.allocUnsafe(length)
23446 var pos = 0
23447 for (i = 0; i < list.length; ++i) {
23448 var buf = list[i]
23449 if (!Buffer.isBuffer(buf)) {
23450 throw new TypeError('"list" argument must be an Array of Buffers')
23451 }
23452 buf.copy(buffer, pos)
23453 pos += buf.length
ab78acc6 23454 }
8b095871 23455 return buffer
ab78acc6
IC
23456}
23457
8b095871
IC
23458function byteLength (string, encoding) {
23459 if (Buffer.isBuffer(string)) {
23460 return string.length
23461 }
23462 if (ArrayBuffer.isView(string) || string instanceof ArrayBuffer) {
23463 return string.byteLength
23464 }
23465 if (typeof string !== 'string') {
23466 string = '' + string
23467 }
23468
23469 var len = string.length
23470 if (len === 0) return 0
23471
23472 // Use a for loop to avoid recursion
23473 var loweredCase = false
23474 for (;;) {
23475 switch (encoding) {
23476 case 'ascii':
23477 case 'latin1':
23478 case 'binary':
23479 return len
23480 case 'utf8':
23481 case 'utf-8':
23482 case undefined:
23483 return utf8ToBytes(string).length
23484 case 'ucs2':
23485 case 'ucs-2':
23486 case 'utf16le':
23487 case 'utf-16le':
23488 return len * 2
23489 case 'hex':
23490 return len >>> 1
23491 case 'base64':
23492 return base64ToBytes(string).length
23493 default:
23494 if (loweredCase) return utf8ToBytes(string).length // assume utf8
23495 encoding = ('' + encoding).toLowerCase()
23496 loweredCase = true
ab78acc6 23497 }
3af2954a 23498 }
ab78acc6 23499}
8b095871 23500Buffer.byteLength = byteLength
3af2954a 23501
8b095871
IC
23502function slowToString (encoding, start, end) {
23503 var loweredCase = false
3af2954a 23504
8b095871
IC
23505 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
23506 // property of a typed array.
3af2954a 23507
8b095871
IC
23508 // This behaves neither like String nor Uint8Array in that we set start/end
23509 // to their upper/lower bounds if the value passed is out of range.
23510 // undefined is handled specially as per ECMA-262 6th Edition,
23511 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
23512 if (start === undefined || start < 0) {
23513 start = 0
23514 }
23515 // Return early if start > this.length. Done here to prevent potential uint32
23516 // coercion fail below.
23517 if (start > this.length) {
23518 return ''
23519 }
3af2954a 23520
8b095871
IC
23521 if (end === undefined || end > this.length) {
23522 end = this.length
23523 }
3af2954a 23524
8b095871
IC
23525 if (end <= 0) {
23526 return ''
23527 }
3af2954a 23528
8b095871
IC
23529 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
23530 end >>>= 0
23531 start >>>= 0
3af2954a 23532
8b095871
IC
23533 if (end <= start) {
23534 return ''
3af2954a
IC
23535 }
23536
8b095871 23537 if (!encoding) encoding = 'utf8'
3af2954a 23538
8b095871
IC
23539 while (true) {
23540 switch (encoding) {
23541 case 'hex':
23542 return hexSlice(this, start, end)
23543
23544 case 'utf8':
23545 case 'utf-8':
23546 return utf8Slice(this, start, end)
23547
23548 case 'ascii':
23549 return asciiSlice(this, start, end)
23550
23551 case 'latin1':
23552 case 'binary':
23553 return latin1Slice(this, start, end)
23554
23555 case 'base64':
23556 return base64Slice(this, start, end)
23557
23558 case 'ucs2':
23559 case 'ucs-2':
23560 case 'utf16le':
23561 case 'utf-16le':
23562 return utf16leSlice(this, start, end)
23563
23564 default:
23565 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
23566 encoding = (encoding + '').toLowerCase()
23567 loweredCase = true
23568 }
23569 }
ab78acc6 23570}
3af2954a 23571
8b095871
IC
23572// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
23573// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
23574// reliably in a browserify context because there could be multiple different
23575// copies of the 'buffer' package in use. This method works even for Buffer
23576// instances that were created from another copy of the `buffer` package.
23577// See: https://github.com/feross/buffer/issues/154
23578Buffer.prototype._isBuffer = true
23579
23580function swap (b, n, m) {
23581 var i = b[n]
23582 b[n] = b[m]
23583 b[m] = i
ab78acc6 23584}
3af2954a 23585
8b095871
IC
23586Buffer.prototype.swap16 = function swap16 () {
23587 var len = this.length
23588 if (len % 2 !== 0) {
23589 throw new RangeError('Buffer size must be a multiple of 16-bits')
23590 }
23591 for (var i = 0; i < len; i += 2) {
23592 swap(this, i, i + 1)
23593 }
23594 return this
23595}
3af2954a 23596
8b095871
IC
23597Buffer.prototype.swap32 = function swap32 () {
23598 var len = this.length
23599 if (len % 4 !== 0) {
23600 throw new RangeError('Buffer size must be a multiple of 32-bits')
23601 }
23602 for (var i = 0; i < len; i += 4) {
23603 swap(this, i, i + 3)
23604 swap(this, i + 1, i + 2)
23605 }
23606 return this
23607}
3af2954a 23608
8b095871
IC
23609Buffer.prototype.swap64 = function swap64 () {
23610 var len = this.length
23611 if (len % 8 !== 0) {
23612 throw new RangeError('Buffer size must be a multiple of 64-bits')
3af2954a 23613 }
8b095871
IC
23614 for (var i = 0; i < len; i += 8) {
23615 swap(this, i, i + 7)
23616 swap(this, i + 1, i + 6)
23617 swap(this, i + 2, i + 5)
23618 swap(this, i + 3, i + 4)
23619 }
23620 return this
23621}
3af2954a 23622
8b095871
IC
23623Buffer.prototype.toString = function toString () {
23624 var length = this.length
23625 if (length === 0) return ''
23626 if (arguments.length === 0) return utf8Slice(this, 0, length)
23627 return slowToString.apply(this, arguments)
ab78acc6 23628}
3af2954a 23629
8b095871
IC
23630Buffer.prototype.equals = function equals (b) {
23631 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
23632 if (this === b) return true
23633 return Buffer.compare(this, b) === 0
23634}
3af2954a 23635
8b095871
IC
23636Buffer.prototype.inspect = function inspect () {
23637 var str = ''
23638 var max = exports.INSPECT_MAX_BYTES
23639 if (this.length > 0) {
23640 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
23641 if (this.length > max) str += ' ... '
23642 }
23643 return '<Buffer ' + str + '>'
ab78acc6 23644}
3af2954a 23645
8b095871
IC
23646Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
23647 if (!Buffer.isBuffer(target)) {
23648 throw new TypeError('Argument must be a Buffer')
23649 }
3af2954a 23650
8b095871
IC
23651 if (start === undefined) {
23652 start = 0
23653 }
23654 if (end === undefined) {
23655 end = target ? target.length : 0
23656 }
23657 if (thisStart === undefined) {
23658 thisStart = 0
23659 }
23660 if (thisEnd === undefined) {
23661 thisEnd = this.length
23662 }
3af2954a 23663
8b095871
IC
23664 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
23665 throw new RangeError('out of range index')
23666 }
3af2954a 23667
8b095871
IC
23668 if (thisStart >= thisEnd && start >= end) {
23669 return 0
23670 }
23671 if (thisStart >= thisEnd) {
23672 return -1
23673 }
23674 if (start >= end) {
23675 return 1
23676 }
3af2954a 23677
8b095871
IC
23678 start >>>= 0
23679 end >>>= 0
23680 thisStart >>>= 0
23681 thisEnd >>>= 0
3af2954a 23682
8b095871 23683 if (this === target) return 0
3af2954a 23684
8b095871
IC
23685 var x = thisEnd - thisStart
23686 var y = end - start
23687 var len = Math.min(x, y)
23688
23689 var thisCopy = this.slice(thisStart, thisEnd)
23690 var targetCopy = target.slice(start, end)
23691
23692 for (var i = 0; i < len; ++i) {
23693 if (thisCopy[i] !== targetCopy[i]) {
23694 x = thisCopy[i]
23695 y = targetCopy[i]
23696 break
3af2954a 23697 }
8b095871
IC
23698 }
23699
23700 if (x < y) return -1
23701 if (y < x) return 1
23702 return 0
ab78acc6 23703}
3af2954a 23704
8b095871
IC
23705// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
23706// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
ab78acc6 23707//
8b095871
IC
23708// Arguments:
23709// - buffer - a Buffer to search
23710// - val - a string, Buffer, or number
23711// - byteOffset - an index into `buffer`; will be clamped to an int32
23712// - encoding - an optional encoding, relevant is val is a string
23713// - dir - true for indexOf, false for lastIndexOf
23714function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
23715 // Empty buffer means no match
23716 if (buffer.length === 0) return -1
23717
23718 // Normalize byteOffset
23719 if (typeof byteOffset === 'string') {
23720 encoding = byteOffset
23721 byteOffset = 0
23722 } else if (byteOffset > 0x7fffffff) {
23723 byteOffset = 0x7fffffff
23724 } else if (byteOffset < -0x80000000) {
23725 byteOffset = -0x80000000
23726 }
23727 byteOffset = +byteOffset // Coerce to Number.
23728 if (isNaN(byteOffset)) {
23729 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
23730 byteOffset = dir ? 0 : (buffer.length - 1)
23731 }
23732
23733 // Normalize byteOffset: negative offsets start from the end of the buffer
23734 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
23735 if (byteOffset >= buffer.length) {
23736 if (dir) return -1
23737 else byteOffset = buffer.length - 1
23738 } else if (byteOffset < 0) {
23739 if (dir) byteOffset = 0
23740 else return -1
23741 }
23742
23743 // Normalize val
23744 if (typeof val === 'string') {
23745 val = Buffer.from(val, encoding)
23746 }
3af2954a 23747
8b095871
IC
23748 // Finally, search either indexOf (if dir is true) or lastIndexOf
23749 if (Buffer.isBuffer(val)) {
23750 // Special case: looking for empty string/buffer always fails
23751 if (val.length === 0) {
23752 return -1
23753 }
23754 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
23755 } else if (typeof val === 'number') {
23756 val = val & 0xFF // Search for a byte value [0-255]
23757 if (typeof Uint8Array.prototype.indexOf === 'function') {
23758 if (dir) {
23759 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
23760 } else {
23761 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
23762 }
23763 }
23764 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
23765 }
3af2954a 23766
8b095871
IC
23767 throw new TypeError('val must be string, number or Buffer')
23768}
3af2954a 23769
8b095871
IC
23770function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
23771 var indexSize = 1
23772 var arrLength = arr.length
23773 var valLength = val.length
3af2954a 23774
8b095871
IC
23775 if (encoding !== undefined) {
23776 encoding = String(encoding).toLowerCase()
23777 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
23778 encoding === 'utf16le' || encoding === 'utf-16le') {
23779 if (arr.length < 2 || val.length < 2) {
23780 return -1
23781 }
23782 indexSize = 2
23783 arrLength /= 2
23784 valLength /= 2
23785 byteOffset /= 2
23786 }
23787 }
3af2954a 23788
8b095871
IC
23789 function read (buf, i) {
23790 if (indexSize === 1) {
23791 return buf[i]
23792 } else {
23793 return buf.readUInt16BE(i * indexSize)
23794 }
23795 }
3af2954a 23796
8b095871
IC
23797 var i
23798 if (dir) {
23799 var foundIndex = -1
23800 for (i = byteOffset; i < arrLength; i++) {
23801 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
23802 if (foundIndex === -1) foundIndex = i
23803 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
23804 } else {
23805 if (foundIndex !== -1) i -= i - foundIndex
23806 foundIndex = -1
23807 }
23808 }
ab78acc6 23809 } else {
8b095871
IC
23810 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
23811 for (i = byteOffset; i >= 0; i--) {
23812 var found = true
23813 for (var j = 0; j < valLength; j++) {
23814 if (read(arr, i + j) !== read(val, j)) {
23815 found = false
23816 break
23817 }
23818 }
23819 if (found) return i
23820 }
ab78acc6 23821 }
3af2954a 23822
8b095871
IC
23823 return -1
23824}
3af2954a 23825
8b095871
IC
23826Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
23827 return this.indexOf(val, byteOffset, encoding) !== -1
23828}
23829
23830Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
23831 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
23832}
3af2954a 23833
8b095871
IC
23834Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
23835 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
23836}
23837
23838function hexWrite (buf, string, offset, length) {
23839 offset = Number(offset) || 0
23840 var remaining = buf.length - offset
23841 if (!length) {
23842 length = remaining
23843 } else {
23844 length = Number(length)
23845 if (length > remaining) {
23846 length = remaining
3af2954a 23847 }
3af2954a
IC
23848 }
23849
8b095871
IC
23850 // must be an even number of digits
23851 var strLen = string.length
23852 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
3af2954a 23853
8b095871
IC
23854 if (length > strLen / 2) {
23855 length = strLen / 2
ab78acc6 23856 }
8b095871
IC
23857 for (var i = 0; i < length; ++i) {
23858 var parsed = parseInt(string.substr(i * 2, 2), 16)
23859 if (isNaN(parsed)) return i
23860 buf[offset + i] = parsed
ab78acc6 23861 }
8b095871 23862 return i
ab78acc6 23863}
3af2954a 23864
8b095871
IC
23865function utf8Write (buf, string, offset, length) {
23866 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
ab78acc6 23867}
3af2954a 23868
8b095871
IC
23869function asciiWrite (buf, string, offset, length) {
23870 return blitBuffer(asciiToBytes(string), buf, offset, length)
ab78acc6 23871}
3af2954a 23872
8b095871
IC
23873function latin1Write (buf, string, offset, length) {
23874 return asciiWrite(buf, string, offset, length)
ab78acc6 23875}
3af2954a 23876
8b095871
IC
23877function base64Write (buf, string, offset, length) {
23878 return blitBuffer(base64ToBytes(string), buf, offset, length)
ab78acc6 23879}
3af2954a 23880
8b095871
IC
23881function ucs2Write (buf, string, offset, length) {
23882 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
23883}
3af2954a 23884
8b095871
IC
23885Buffer.prototype.write = function write (string, offset, length, encoding) {
23886 // Buffer#write(string)
23887 if (offset === undefined) {
23888 encoding = 'utf8'
23889 length = this.length
23890 offset = 0
23891 // Buffer#write(string, encoding)
23892 } else if (length === undefined && typeof offset === 'string') {
23893 encoding = offset
23894 length = this.length
23895 offset = 0
23896 // Buffer#write(string, offset[, length][, encoding])
23897 } else if (isFinite(offset)) {
23898 offset = offset >>> 0
23899 if (isFinite(length)) {
23900 length = length >>> 0
23901 if (encoding === undefined) encoding = 'utf8'
23902 } else {
23903 encoding = length
23904 length = undefined
23905 }
23906 } else {
23907 throw new Error(
23908 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
23909 )
3af2954a
IC
23910 }
23911
8b095871
IC
23912 var remaining = this.length - offset
23913 if (length === undefined || length > remaining) length = remaining
3af2954a 23914
8b095871
IC
23915 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
23916 throw new RangeError('Attempt to write outside buffer bounds')
ab78acc6 23917 }
3af2954a 23918
8b095871 23919 if (!encoding) encoding = 'utf8'
3af2954a 23920
8b095871
IC
23921 var loweredCase = false
23922 for (;;) {
23923 switch (encoding) {
23924 case 'hex':
23925 return hexWrite(this, string, offset, length)
3af2954a 23926
8b095871
IC
23927 case 'utf8':
23928 case 'utf-8':
23929 return utf8Write(this, string, offset, length)
3af2954a 23930
8b095871
IC
23931 case 'ascii':
23932 return asciiWrite(this, string, offset, length)
3af2954a 23933
8b095871
IC
23934 case 'latin1':
23935 case 'binary':
23936 return latin1Write(this, string, offset, length)
3af2954a 23937
8b095871
IC
23938 case 'base64':
23939 // Warning: maxLength not taken into account in base64Write
23940 return base64Write(this, string, offset, length)
3af2954a 23941
8b095871
IC
23942 case 'ucs2':
23943 case 'ucs-2':
23944 case 'utf16le':
23945 case 'utf-16le':
23946 return ucs2Write(this, string, offset, length)
3af2954a 23947
8b095871
IC
23948 default:
23949 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
23950 encoding = ('' + encoding).toLowerCase()
23951 loweredCase = true
23952 }
3af2954a 23953 }
ab78acc6 23954}
3af2954a 23955
8b095871
IC
23956Buffer.prototype.toJSON = function toJSON () {
23957 return {
23958 type: 'Buffer',
23959 data: Array.prototype.slice.call(this._arr || this, 0)
3af2954a 23960 }
ab78acc6
IC
23961}
23962
8b095871
IC
23963function base64Slice (buf, start, end) {
23964 if (start === 0 && end === buf.length) {
23965 return base64.fromByteArray(buf)
23966 } else {
23967 return base64.fromByteArray(buf.slice(start, end))
3af2954a 23968 }
8b095871 23969}
3af2954a 23970
8b095871
IC
23971function utf8Slice (buf, start, end) {
23972 end = Math.min(buf.length, end)
23973 var res = []
3af2954a 23974
8b095871
IC
23975 var i = start
23976 while (i < end) {
23977 var firstByte = buf[i]
23978 var codePoint = null
23979 var bytesPerSequence = (firstByte > 0xEF) ? 4
23980 : (firstByte > 0xDF) ? 3
23981 : (firstByte > 0xBF) ? 2
23982 : 1
3af2954a 23983
8b095871
IC
23984 if (i + bytesPerSequence <= end) {
23985 var secondByte, thirdByte, fourthByte, tempCodePoint
3af2954a 23986
8b095871
IC
23987 switch (bytesPerSequence) {
23988 case 1:
23989 if (firstByte < 0x80) {
23990 codePoint = firstByte
23991 }
23992 break
23993 case 2:
23994 secondByte = buf[i + 1]
23995 if ((secondByte & 0xC0) === 0x80) {
23996 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
23997 if (tempCodePoint > 0x7F) {
23998 codePoint = tempCodePoint
23999 }
24000 }
24001 break
24002 case 3:
24003 secondByte = buf[i + 1]
24004 thirdByte = buf[i + 2]
24005 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
24006 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
24007 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
24008 codePoint = tempCodePoint
24009 }
24010 }
24011 break
24012 case 4:
24013 secondByte = buf[i + 1]
24014 thirdByte = buf[i + 2]
24015 fourthByte = buf[i + 3]
24016 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
24017 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
24018 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
24019 codePoint = tempCodePoint
24020 }
24021 }
24022 }
24023 }
3af2954a 24024
8b095871
IC
24025 if (codePoint === null) {
24026 // we did not generate a valid codePoint so insert a
24027 // replacement char (U+FFFD) and advance only 1 byte
24028 codePoint = 0xFFFD
24029 bytesPerSequence = 1
24030 } else if (codePoint > 0xFFFF) {
24031 // encode to utf16 (surrogate pair dance)
24032 codePoint -= 0x10000
24033 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
24034 codePoint = 0xDC00 | codePoint & 0x3FF
24035 }
24036
24037 res.push(codePoint)
24038 i += bytesPerSequence
3af2954a
IC
24039 }
24040
8b095871 24041 return decodeCodePointsArray(res)
ab78acc6 24042}
3af2954a 24043
8b095871
IC
24044// Based on http://stackoverflow.com/a/22747272/680742, the browser with
24045// the lowest limit is Chrome, with 0x10000 args.
24046// We go 1 magnitude less, for safety
24047var MAX_ARGUMENTS_LENGTH = 0x1000
3af2954a 24048
8b095871
IC
24049function decodeCodePointsArray (codePoints) {
24050 var len = codePoints.length
24051 if (len <= MAX_ARGUMENTS_LENGTH) {
24052 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
3af2954a
IC
24053 }
24054
8b095871
IC
24055 // Decode in chunks to avoid "call stack size exceeded".
24056 var res = ''
24057 var i = 0
24058 while (i < len) {
24059 res += String.fromCharCode.apply(
24060 String,
24061 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
24062 )
3af2954a 24063 }
8b095871
IC
24064 return res
24065}
3af2954a 24066
8b095871
IC
24067function asciiSlice (buf, start, end) {
24068 var ret = ''
24069 end = Math.min(buf.length, end)
3af2954a 24070
8b095871
IC
24071 for (var i = start; i < end; ++i) {
24072 ret += String.fromCharCode(buf[i] & 0x7F)
3af2954a 24073 }
8b095871
IC
24074 return ret
24075}
3af2954a 24076
8b095871
IC
24077function latin1Slice (buf, start, end) {
24078 var ret = ''
24079 end = Math.min(buf.length, end)
3af2954a 24080
8b095871
IC
24081 for (var i = start; i < end; ++i) {
24082 ret += String.fromCharCode(buf[i])
3af2954a 24083 }
8b095871 24084 return ret
ab78acc6 24085}
3af2954a 24086
8b095871
IC
24087function hexSlice (buf, start, end) {
24088 var len = buf.length
3af2954a 24089
8b095871
IC
24090 if (!start || start < 0) start = 0
24091 if (!end || end < 0 || end > len) end = len
3af2954a 24092
8b095871
IC
24093 var out = ''
24094 for (var i = start; i < end; ++i) {
24095 out += toHex(buf[i])
3af2954a 24096 }
8b095871
IC
24097 return out
24098}
3af2954a 24099
8b095871
IC
24100function utf16leSlice (buf, start, end) {
24101 var bytes = buf.slice(start, end)
24102 var res = ''
24103 for (var i = 0; i < bytes.length; i += 2) {
24104 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
24105 }
24106 return res
24107}
3af2954a 24108
8b095871
IC
24109Buffer.prototype.slice = function slice (start, end) {
24110 var len = this.length
24111 start = ~~start
24112 end = end === undefined ? len : ~~end
3af2954a 24113
8b095871
IC
24114 if (start < 0) {
24115 start += len
24116 if (start < 0) start = 0
24117 } else if (start > len) {
24118 start = len
24119 }
3af2954a 24120
8b095871
IC
24121 if (end < 0) {
24122 end += len
24123 if (end < 0) end = 0
24124 } else if (end > len) {
24125 end = len
24126 }
3af2954a 24127
8b095871 24128 if (end < start) end = start
3af2954a 24129
8b095871
IC
24130 var newBuf = this.subarray(start, end)
24131 // Return an augmented `Uint8Array` instance
24132 newBuf.__proto__ = Buffer.prototype
24133 return newBuf
24134}
3af2954a 24135
8b095871
IC
24136/*
24137 * Need to make sure that buffer isn't trying to write out of bounds.
ab78acc6 24138 */
8b095871
IC
24139function checkOffset (offset, ext, length) {
24140 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
24141 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
ab78acc6 24142}
3af2954a 24143
8b095871
IC
24144Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
24145 offset = offset >>> 0
24146 byteLength = byteLength >>> 0
24147 if (!noAssert) checkOffset(offset, byteLength, this.length)
24148
24149 var val = this[offset]
24150 var mul = 1
24151 var i = 0
24152 while (++i < byteLength && (mul *= 0x100)) {
24153 val += this[offset + i] * mul
3af2954a
IC
24154 }
24155
8b095871
IC
24156 return val
24157}
3af2954a 24158
8b095871
IC
24159Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
24160 offset = offset >>> 0
24161 byteLength = byteLength >>> 0
24162 if (!noAssert) {
24163 checkOffset(offset, byteLength, this.length)
ab78acc6 24164 }
3af2954a 24165
8b095871
IC
24166 var val = this[offset + --byteLength]
24167 var mul = 1
24168 while (byteLength > 0 && (mul *= 0x100)) {
24169 val += this[offset + --byteLength] * mul
ab78acc6 24170 }
3af2954a 24171
8b095871 24172 return val
ab78acc6 24173}
3af2954a 24174
8b095871
IC
24175Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
24176 offset = offset >>> 0
24177 if (!noAssert) checkOffset(offset, 1, this.length)
24178 return this[offset]
ab78acc6 24179}
3af2954a 24180
8b095871
IC
24181Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
24182 offset = offset >>> 0
24183 if (!noAssert) checkOffset(offset, 2, this.length)
24184 return this[offset] | (this[offset + 1] << 8)
24185}
3af2954a 24186
8b095871
IC
24187Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
24188 offset = offset >>> 0
24189 if (!noAssert) checkOffset(offset, 2, this.length)
24190 return (this[offset] << 8) | this[offset + 1]
24191}
3af2954a 24192
8b095871
IC
24193Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
24194 offset = offset >>> 0
24195 if (!noAssert) checkOffset(offset, 4, this.length)
24196
24197 return ((this[offset]) |
24198 (this[offset + 1] << 8) |
24199 (this[offset + 2] << 16)) +
24200 (this[offset + 3] * 0x1000000)
ab78acc6 24201}
3af2954a 24202
8b095871
IC
24203Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
24204 offset = offset >>> 0
24205 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 24206
8b095871
IC
24207 return (this[offset] * 0x1000000) +
24208 ((this[offset + 1] << 16) |
24209 (this[offset + 2] << 8) |
24210 this[offset + 3])
24211}
3af2954a 24212
8b095871
IC
24213Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
24214 offset = offset >>> 0
24215 byteLength = byteLength >>> 0
24216 if (!noAssert) checkOffset(offset, byteLength, this.length)
3af2954a 24217
8b095871
IC
24218 var val = this[offset]
24219 var mul = 1
24220 var i = 0
24221 while (++i < byteLength && (mul *= 0x100)) {
24222 val += this[offset + i] * mul
3af2954a 24223 }
8b095871 24224 mul *= 0x80
3af2954a 24225
8b095871 24226 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3af2954a 24227
8b095871 24228 return val
ab78acc6 24229}
3af2954a 24230
8b095871
IC
24231Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
24232 offset = offset >>> 0
24233 byteLength = byteLength >>> 0
24234 if (!noAssert) checkOffset(offset, byteLength, this.length)
3af2954a 24235
8b095871
IC
24236 var i = byteLength
24237 var mul = 1
24238 var val = this[offset + --i]
24239 while (i > 0 && (mul *= 0x100)) {
24240 val += this[offset + --i] * mul
3af2954a 24241 }
8b095871 24242 mul *= 0x80
3af2954a 24243
8b095871
IC
24244 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
24245
24246 return val
ab78acc6 24247}
3af2954a 24248
8b095871
IC
24249Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
24250 offset = offset >>> 0
24251 if (!noAssert) checkOffset(offset, 1, this.length)
24252 if (!(this[offset] & 0x80)) return (this[offset])
24253 return ((0xff - this[offset] + 1) * -1)
ab78acc6 24254}
3af2954a 24255
8b095871
IC
24256Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
24257 offset = offset >>> 0
24258 if (!noAssert) checkOffset(offset, 2, this.length)
24259 var val = this[offset] | (this[offset + 1] << 8)
24260 return (val & 0x8000) ? val | 0xFFFF0000 : val
ab78acc6 24261}
3af2954a 24262
8b095871
IC
24263Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
24264 offset = offset >>> 0
24265 if (!noAssert) checkOffset(offset, 2, this.length)
24266 var val = this[offset + 1] | (this[offset] << 8)
24267 return (val & 0x8000) ? val | 0xFFFF0000 : val
24268}
ab78acc6 24269
8b095871
IC
24270Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
24271 offset = offset >>> 0
24272 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 24273
8b095871
IC
24274 return (this[offset]) |
24275 (this[offset + 1] << 8) |
24276 (this[offset + 2] << 16) |
24277 (this[offset + 3] << 24)
ab78acc6 24278}
3af2954a 24279
8b095871
IC
24280Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
24281 offset = offset >>> 0
24282 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 24283
8b095871
IC
24284 return (this[offset] << 24) |
24285 (this[offset + 1] << 16) |
24286 (this[offset + 2] << 8) |
24287 (this[offset + 3])
24288}
3af2954a 24289
8b095871
IC
24290Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
24291 offset = offset >>> 0
24292 if (!noAssert) checkOffset(offset, 4, this.length)
24293 return ieee754.read(this, offset, true, 23, 4)
ab78acc6 24294}
3af2954a 24295
8b095871
IC
24296Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
24297 offset = offset >>> 0
24298 if (!noAssert) checkOffset(offset, 4, this.length)
24299 return ieee754.read(this, offset, false, 23, 4)
ab78acc6 24300}
3af2954a 24301
8b095871
IC
24302Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
24303 offset = offset >>> 0
24304 if (!noAssert) checkOffset(offset, 8, this.length)
24305 return ieee754.read(this, offset, true, 52, 8)
24306}
3af2954a 24307
8b095871
IC
24308Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
24309 offset = offset >>> 0
24310 if (!noAssert) checkOffset(offset, 8, this.length)
24311 return ieee754.read(this, offset, false, 52, 8)
ab78acc6 24312}
3af2954a 24313
8b095871
IC
24314function checkInt (buf, value, offset, ext, max, min) {
24315 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
24316 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
24317 if (offset + ext > buf.length) throw new RangeError('Index out of range')
ab78acc6 24318}
3af2954a 24319
8b095871
IC
24320Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
24321 value = +value
24322 offset = offset >>> 0
24323 byteLength = byteLength >>> 0
24324 if (!noAssert) {
24325 var maxBytes = Math.pow(2, 8 * byteLength) - 1
24326 checkInt(this, value, offset, byteLength, maxBytes, 0)
3af2954a
IC
24327 }
24328
8b095871 24329 var mul = 1
ab78acc6 24330 var i = 0
8b095871
IC
24331 this[offset] = value & 0xFF
24332 while (++i < byteLength && (mul *= 0x100)) {
24333 this[offset + i] = (value / mul) & 0xFF
24334 }
3af2954a 24335
8b095871
IC
24336 return offset + byteLength
24337}
24338
24339Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
24340 value = +value
24341 offset = offset >>> 0
24342 byteLength = byteLength >>> 0
24343 if (!noAssert) {
24344 var maxBytes = Math.pow(2, 8 * byteLength) - 1
24345 checkInt(this, value, offset, byteLength, maxBytes, 0)
ab78acc6 24346 }
3af2954a 24347
8b095871
IC
24348 var i = byteLength - 1
24349 var mul = 1
24350 this[offset + i] = value & 0xFF
24351 while (--i >= 0 && (mul *= 0x100)) {
24352 this[offset + i] = (value / mul) & 0xFF
ab78acc6 24353 }
3af2954a 24354
8b095871
IC
24355 return offset + byteLength
24356}
24357
24358Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
24359 value = +value
24360 offset = offset >>> 0
24361 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
24362 this[offset] = (value & 0xff)
24363 return offset + 1
24364}
24365
24366Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
24367 value = +value
24368 offset = offset >>> 0
24369 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
24370 this[offset] = (value & 0xff)
24371 this[offset + 1] = (value >>> 8)
24372 return offset + 2
24373}
24374
24375Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
24376 value = +value
24377 offset = offset >>> 0
24378 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
24379 this[offset] = (value >>> 8)
24380 this[offset + 1] = (value & 0xff)
24381 return offset + 2
ab78acc6 24382}
3af2954a 24383
8b095871
IC
24384Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
24385 value = +value
24386 offset = offset >>> 0
24387 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
24388 this[offset + 3] = (value >>> 24)
24389 this[offset + 2] = (value >>> 16)
24390 this[offset + 1] = (value >>> 8)
24391 this[offset] = (value & 0xff)
24392 return offset + 4
ab78acc6 24393}
3af2954a 24394
8b095871
IC
24395Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
24396 value = +value
24397 offset = offset >>> 0
24398 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
24399 this[offset] = (value >>> 24)
24400 this[offset + 1] = (value >>> 16)
24401 this[offset + 2] = (value >>> 8)
24402 this[offset + 3] = (value & 0xff)
24403 return offset + 4
24404}
3af2954a 24405
8b095871
IC
24406Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
24407 value = +value
24408 offset = offset >>> 0
24409 if (!noAssert) {
24410 var limit = Math.pow(2, (8 * byteLength) - 1)
24411
24412 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3af2954a
IC
24413 }
24414
8b095871
IC
24415 var i = 0
24416 var mul = 1
24417 var sub = 0
24418 this[offset] = value & 0xFF
24419 while (++i < byteLength && (mul *= 0x100)) {
24420 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
24421 sub = 1
ab78acc6 24422 }
8b095871 24423 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3af2954a
IC
24424 }
24425
8b095871 24426 return offset + byteLength
ab78acc6 24427}
3af2954a 24428
8b095871
IC
24429Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
24430 value = +value
24431 offset = offset >>> 0
24432 if (!noAssert) {
24433 var limit = Math.pow(2, (8 * byteLength) - 1)
ab78acc6 24434
8b095871
IC
24435 checkInt(this, value, offset, byteLength, limit - 1, -limit)
24436 }
ab78acc6 24437
8b095871
IC
24438 var i = byteLength - 1
24439 var mul = 1
24440 var sub = 0
24441 this[offset + i] = value & 0xFF
24442 while (--i >= 0 && (mul *= 0x100)) {
24443 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
24444 sub = 1
3af2954a 24445 }
8b095871 24446 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3af2954a 24447 }
3af2954a 24448
8b095871
IC
24449 return offset + byteLength
24450}
3af2954a 24451
8b095871
IC
24452Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
24453 value = +value
24454 offset = offset >>> 0
24455 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
24456 if (value < 0) value = 0xff + value + 1
24457 this[offset] = (value & 0xff)
24458 return offset + 1
24459}
3af2954a 24460
8b095871
IC
24461Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
24462 value = +value
24463 offset = offset >>> 0
24464 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
24465 this[offset] = (value & 0xff)
24466 this[offset + 1] = (value >>> 8)
24467 return offset + 2
24468}
3af2954a 24469
8b095871
IC
24470Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
24471 value = +value
24472 offset = offset >>> 0
24473 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
24474 this[offset] = (value >>> 8)
24475 this[offset + 1] = (value & 0xff)
24476 return offset + 2
24477}
3af2954a 24478
8b095871
IC
24479Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
24480 value = +value
24481 offset = offset >>> 0
24482 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
24483 this[offset] = (value & 0xff)
24484 this[offset + 1] = (value >>> 8)
24485 this[offset + 2] = (value >>> 16)
24486 this[offset + 3] = (value >>> 24)
24487 return offset + 4
24488}
3af2954a 24489
8b095871
IC
24490Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
24491 value = +value
24492 offset = offset >>> 0
24493 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
24494 if (value < 0) value = 0xffffffff + value + 1
24495 this[offset] = (value >>> 24)
24496 this[offset + 1] = (value >>> 16)
24497 this[offset + 2] = (value >>> 8)
24498 this[offset + 3] = (value & 0xff)
24499 return offset + 4
24500}
3af2954a 24501
8b095871
IC
24502function checkIEEE754 (buf, value, offset, ext, max, min) {
24503 if (offset + ext > buf.length) throw new RangeError('Index out of range')
24504 if (offset < 0) throw new RangeError('Index out of range')
24505}
3af2954a 24506
8b095871
IC
24507function writeFloat (buf, value, offset, littleEndian, noAssert) {
24508 value = +value
24509 offset = offset >>> 0
24510 if (!noAssert) {
24511 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
3af2954a 24512 }
8b095871
IC
24513 ieee754.write(buf, value, offset, littleEndian, 23, 4)
24514 return offset + 4
ab78acc6 24515}
3af2954a 24516
8b095871
IC
24517Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
24518 return writeFloat(this, value, offset, true, noAssert)
ab78acc6 24519}
3af2954a 24520
8b095871
IC
24521Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
24522 return writeFloat(this, value, offset, false, noAssert)
ab78acc6 24523}
3af2954a 24524
8b095871
IC
24525function writeDouble (buf, value, offset, littleEndian, noAssert) {
24526 value = +value
24527 offset = offset >>> 0
24528 if (!noAssert) {
24529 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
3af2954a 24530 }
8b095871
IC
24531 ieee754.write(buf, value, offset, littleEndian, 52, 8)
24532 return offset + 8
ab78acc6 24533}
3af2954a 24534
8b095871
IC
24535Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
24536 return writeDouble(this, value, offset, true, noAssert)
ab78acc6 24537}
3af2954a 24538
8b095871
IC
24539Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
24540 return writeDouble(this, value, offset, false, noAssert)
24541}
3af2954a 24542
8b095871
IC
24543// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
24544Buffer.prototype.copy = function copy (target, targetStart, start, end) {
24545 if (!start) start = 0
24546 if (!end && end !== 0) end = this.length
24547 if (targetStart >= target.length) targetStart = target.length
24548 if (!targetStart) targetStart = 0
24549 if (end > 0 && end < start) end = start
3af2954a 24550
8b095871
IC
24551 // Copy 0 bytes; we're done
24552 if (end === start) return 0
24553 if (target.length === 0 || this.length === 0) return 0
3af2954a 24554
8b095871
IC
24555 // Fatal error conditions
24556 if (targetStart < 0) {
24557 throw new RangeError('targetStart out of bounds')
3af2954a 24558 }
8b095871
IC
24559 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
24560 if (end < 0) throw new RangeError('sourceEnd out of bounds')
24561
24562 // Are we oob?
24563 if (end > this.length) end = this.length
24564 if (target.length - targetStart < end - start) {
24565 end = target.length - targetStart + start
3af2954a 24566 }
8b095871
IC
24567
24568 var len = end - start
24569 var i
24570
24571 if (this === target && start < targetStart && targetStart < end) {
24572 // descending copy from end
24573 for (i = len - 1; i >= 0; --i) {
24574 target[i + targetStart] = this[i + start]
3af2954a 24575 }
8b095871
IC
24576 } else if (len < 1000) {
24577 // ascending copy from start
24578 for (i = 0; i < len; ++i) {
24579 target[i + targetStart] = this[i + start]
24580 }
24581 } else {
24582 Uint8Array.prototype.set.call(
24583 target,
24584 this.subarray(start, start + len),
24585 targetStart
24586 )
3af2954a
IC
24587 }
24588
8b095871
IC
24589 return len
24590}
24591
24592// Usage:
24593// buffer.fill(number[, offset[, end]])
24594// buffer.fill(buffer[, offset[, end]])
24595// buffer.fill(string[, offset[, end]][, encoding])
24596Buffer.prototype.fill = function fill (val, start, end, encoding) {
24597 // Handle string cases:
24598 if (typeof val === 'string') {
24599 if (typeof start === 'string') {
24600 encoding = start
24601 start = 0
24602 end = this.length
24603 } else if (typeof end === 'string') {
24604 encoding = end
24605 end = this.length
24606 }
24607 if (val.length === 1) {
24608 var code = val.charCodeAt(0)
24609 if (code < 256) {
24610 val = code
3af2954a 24611 }
3af2954a 24612 }
8b095871
IC
24613 if (encoding !== undefined && typeof encoding !== 'string') {
24614 throw new TypeError('encoding must be a string')
24615 }
24616 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
24617 throw new TypeError('Unknown encoding: ' + encoding)
24618 }
24619 } else if (typeof val === 'number') {
24620 val = val & 255
ab78acc6 24621 }
3af2954a 24622
8b095871
IC
24623 // Invalid ranges are not set to a default, so can range check early.
24624 if (start < 0 || this.length < start || this.length < end) {
24625 throw new RangeError('Out of range index')
24626 }
3af2954a 24627
8b095871
IC
24628 if (end <= start) {
24629 return this
24630 }
3af2954a 24631
8b095871
IC
24632 start = start >>> 0
24633 end = end === undefined ? this.length : end >>> 0
3af2954a 24634
8b095871
IC
24635 if (!val) val = 0
24636
24637 var i
24638 if (typeof val === 'number') {
24639 for (i = start; i < end; ++i) {
24640 this[i] = val
24641 }
ab78acc6 24642 } else {
8b095871
IC
24643 var bytes = Buffer.isBuffer(val)
24644 ? val
24645 : new Buffer(val, encoding)
24646 var len = bytes.length
24647 for (i = 0; i < end - start; ++i) {
24648 this[i + start] = bytes[i % len]
ab78acc6
IC
24649 }
24650 }
3af2954a 24651
8b095871
IC
24652 return this
24653}
3af2954a 24654
8b095871
IC
24655// HELPER FUNCTIONS
24656// ================
24657
24658var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
24659
24660function base64clean (str) {
24661 // Node strips out invalid characters like \n and \t from the string, base64-js does not
24662 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
24663 // Node converts strings with length < 2 to ''
24664 if (str.length < 2) return ''
24665 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
24666 while (str.length % 4 !== 0) {
24667 str = str + '='
3af2954a 24668 }
8b095871 24669 return str
ab78acc6
IC
24670}
24671
8b095871
IC
24672function stringtrim (str) {
24673 if (str.trim) return str.trim()
24674 return str.replace(/^\s+|\s+$/g, '')
ab78acc6 24675}
3af2954a 24676
8b095871
IC
24677function toHex (n) {
24678 if (n < 16) return '0' + n.toString(16)
24679 return n.toString(16)
ab78acc6 24680}
3af2954a 24681
8b095871
IC
24682function utf8ToBytes (string, units) {
24683 units = units || Infinity
24684 var codePoint
24685 var length = string.length
24686 var leadSurrogate = null
24687 var bytes = []
3af2954a 24688
8b095871
IC
24689 for (var i = 0; i < length; ++i) {
24690 codePoint = string.charCodeAt(i)
3af2954a 24691
8b095871
IC
24692 // is surrogate component
24693 if (codePoint > 0xD7FF && codePoint < 0xE000) {
24694 // last char was a lead
24695 if (!leadSurrogate) {
24696 // no lead yet
24697 if (codePoint > 0xDBFF) {
24698 // unexpected trail
24699 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
24700 continue
24701 } else if (i + 1 === length) {
24702 // unpaired lead
24703 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
24704 continue
24705 }
3af2954a 24706
8b095871
IC
24707 // valid lead
24708 leadSurrogate = codePoint
24709
24710 continue
24711 }
24712
24713 // 2 leads in a row
24714 if (codePoint < 0xDC00) {
24715 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
24716 leadSurrogate = codePoint
24717 continue
24718 }
24719
24720 // valid surrogate pair
24721 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
24722 } else if (leadSurrogate) {
24723 // valid bmp char, but last char was a lead
24724 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
24725 }
24726
24727 leadSurrogate = null
24728
24729 // encode utf8
24730 if (codePoint < 0x80) {
24731 if ((units -= 1) < 0) break
24732 bytes.push(codePoint)
24733 } else if (codePoint < 0x800) {
24734 if ((units -= 2) < 0) break
24735 bytes.push(
24736 codePoint >> 0x6 | 0xC0,
24737 codePoint & 0x3F | 0x80
24738 )
24739 } else if (codePoint < 0x10000) {
24740 if ((units -= 3) < 0) break
24741 bytes.push(
24742 codePoint >> 0xC | 0xE0,
24743 codePoint >> 0x6 & 0x3F | 0x80,
24744 codePoint & 0x3F | 0x80
24745 )
24746 } else if (codePoint < 0x110000) {
24747 if ((units -= 4) < 0) break
24748 bytes.push(
24749 codePoint >> 0x12 | 0xF0,
24750 codePoint >> 0xC & 0x3F | 0x80,
24751 codePoint >> 0x6 & 0x3F | 0x80,
24752 codePoint & 0x3F | 0x80
24753 )
ab78acc6 24754 } else {
8b095871 24755 throw new Error('Invalid code point')
ab78acc6 24756 }
3af2954a
IC
24757 }
24758
8b095871
IC
24759 return bytes
24760}
3af2954a 24761
8b095871
IC
24762function asciiToBytes (str) {
24763 var byteArray = []
24764 for (var i = 0; i < str.length; ++i) {
24765 // Node's code seems to be doing this and not & 0x7F..
24766 byteArray.push(str.charCodeAt(i) & 0xFF)
ab78acc6 24767 }
8b095871
IC
24768 return byteArray
24769}
3af2954a 24770
8b095871
IC
24771function utf16leToBytes (str, units) {
24772 var c, hi, lo
24773 var byteArray = []
24774 for (var i = 0; i < str.length; ++i) {
24775 if ((units -= 2) < 0) break
3af2954a 24776
8b095871
IC
24777 c = str.charCodeAt(i)
24778 hi = c >> 8
24779 lo = c % 256
24780 byteArray.push(lo)
24781 byteArray.push(hi)
24782 }
ebd8d4e8 24783
8b095871
IC
24784 return byteArray
24785}
24786
24787function base64ToBytes (str) {
24788 return base64.toByteArray(base64clean(str))
24789}
24790
24791function blitBuffer (src, dst, offset, length) {
24792 for (var i = 0; i < length; ++i) {
24793 if ((i + offset >= dst.length) || (i >= src.length)) break
24794 dst[i + offset] = src[i]
24795 }
24796 return i
24797}
24798
24799function isnan (val) {
24800 return val !== val // eslint-disable-line no-self-compare
24801}
24802
24803},{"base64-js":2,"ieee754":8}],6:[function(require,module,exports){
24804(function (Buffer){
24805// Copyright Joyent, Inc. and other Node contributors.
24806//
24807// Permission is hereby granted, free of charge, to any person obtaining a
24808// copy of this software and associated documentation files (the
24809// "Software"), to deal in the Software without restriction, including
24810// without limitation the rights to use, copy, modify, merge, publish,
24811// distribute, sublicense, and/or sell copies of the Software, and to permit
24812// persons to whom the Software is furnished to do so, subject to the
24813// following conditions:
24814//
24815// The above copyright notice and this permission notice shall be included
24816// in all copies or substantial portions of the Software.
24817//
24818// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
24819// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24820// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
24821// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
24822// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
24823// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
24824// USE OR OTHER DEALINGS IN THE SOFTWARE.
24825
24826// NOTE: These type checking functions intentionally don't use `instanceof`
24827// because it is fragile and can be easily faked with `Object.create()`.
ebd8d4e8 24828
8b095871
IC
24829function isArray(arg) {
24830 if (Array.isArray) {
24831 return Array.isArray(arg);
24832 }
24833 return objectToString(arg) === '[object Array]';
24834}
24835exports.isArray = isArray;
ebd8d4e8 24836
8b095871
IC
24837function isBoolean(arg) {
24838 return typeof arg === 'boolean';
24839}
24840exports.isBoolean = isBoolean;
ebd8d4e8 24841
8b095871
IC
24842function isNull(arg) {
24843 return arg === null;
24844}
24845exports.isNull = isNull;
ebd8d4e8 24846
8b095871
IC
24847function isNullOrUndefined(arg) {
24848 return arg == null;
24849}
24850exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 24851
8b095871
IC
24852function isNumber(arg) {
24853 return typeof arg === 'number';
ab78acc6 24854}
8b095871 24855exports.isNumber = isNumber;
212b1b46 24856
8b095871
IC
24857function isString(arg) {
24858 return typeof arg === 'string';
ab78acc6 24859}
8b095871 24860exports.isString = isString;
212b1b46 24861
8b095871
IC
24862function isSymbol(arg) {
24863 return typeof arg === 'symbol';
ab78acc6 24864}
8b095871 24865exports.isSymbol = isSymbol;
ab78acc6 24866
8b095871
IC
24867function isUndefined(arg) {
24868 return arg === void 0;
24869}
24870exports.isUndefined = isUndefined;
ab78acc6 24871
8b095871
IC
24872function isRegExp(re) {
24873 return objectToString(re) === '[object RegExp]';
24874}
24875exports.isRegExp = isRegExp;
ab78acc6 24876
8b095871
IC
24877function isObject(arg) {
24878 return typeof arg === 'object' && arg !== null;
24879}
24880exports.isObject = isObject;
212b1b46 24881
8b095871
IC
24882function isDate(d) {
24883 return objectToString(d) === '[object Date]';
24884}
24885exports.isDate = isDate;
212b1b46 24886
8b095871
IC
24887function isError(e) {
24888 return (objectToString(e) === '[object Error]' || e instanceof Error);
24889}
24890exports.isError = isError;
212b1b46 24891
8b095871
IC
24892function isFunction(arg) {
24893 return typeof arg === 'function';
24894}
24895exports.isFunction = isFunction;
212b1b46 24896
8b095871
IC
24897function isPrimitive(arg) {
24898 return arg === null ||
24899 typeof arg === 'boolean' ||
24900 typeof arg === 'number' ||
24901 typeof arg === 'string' ||
24902 typeof arg === 'symbol' || // ES6 symbol
24903 typeof arg === 'undefined';
ab78acc6 24904}
8b095871 24905exports.isPrimitive = isPrimitive;
212b1b46 24906
8b095871 24907exports.isBuffer = Buffer.isBuffer;
ab78acc6 24908
8b095871
IC
24909function objectToString(o) {
24910 return Object.prototype.toString.call(o);
ab78acc6 24911}
212b1b46 24912
8b095871
IC
24913}).call(this,{"isBuffer":require("../../is-buffer/index.js")})
24914},{"../../is-buffer/index.js":10}],7:[function(require,module,exports){
24915// Copyright Joyent, Inc. and other Node contributors.
24916//
24917// Permission is hereby granted, free of charge, to any person obtaining a
24918// copy of this software and associated documentation files (the
24919// "Software"), to deal in the Software without restriction, including
24920// without limitation the rights to use, copy, modify, merge, publish,
24921// distribute, sublicense, and/or sell copies of the Software, and to permit
24922// persons to whom the Software is furnished to do so, subject to the
24923// following conditions:
24924//
24925// The above copyright notice and this permission notice shall be included
24926// in all copies or substantial portions of the Software.
24927//
24928// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
24929// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24930// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
24931// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
24932// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
24933// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
24934// USE OR OTHER DEALINGS IN THE SOFTWARE.
212b1b46 24935
8b095871
IC
24936function EventEmitter() {
24937 this._events = this._events || {};
24938 this._maxListeners = this._maxListeners || undefined;
ab78acc6 24939}
8b095871 24940module.exports = EventEmitter;
212b1b46 24941
8b095871
IC
24942// Backwards-compat with node 0.10.x
24943EventEmitter.EventEmitter = EventEmitter;
212b1b46 24944
8b095871
IC
24945EventEmitter.prototype._events = undefined;
24946EventEmitter.prototype._maxListeners = undefined;
212b1b46 24947
8b095871
IC
24948// By default EventEmitters will print a warning if more than 10 listeners are
24949// added to it. This is a useful default which helps finding memory leaks.
24950EventEmitter.defaultMaxListeners = 10;
212b1b46 24951
8b095871
IC
24952// Obviously not all Emitters should be limited to 10. This function allows
24953// that to be increased. Set to zero for unlimited.
24954EventEmitter.prototype.setMaxListeners = function(n) {
24955 if (!isNumber(n) || n < 0 || isNaN(n))
24956 throw TypeError('n must be a positive number');
24957 this._maxListeners = n;
24958 return this;
24959};
212b1b46 24960
8b095871
IC
24961EventEmitter.prototype.emit = function(type) {
24962 var er, handler, len, args, i, listeners;
212b1b46 24963
8b095871
IC
24964 if (!this._events)
24965 this._events = {};
212b1b46 24966
8b095871
IC
24967 // If there is no 'error' event listener then throw.
24968 if (type === 'error') {
24969 if (!this._events.error ||
24970 (isObject(this._events.error) && !this._events.error.length)) {
24971 er = arguments[1];
24972 if (er instanceof Error) {
24973 throw er; // Unhandled 'error' event
24974 } else {
24975 // At least give some kind of context to the user
24976 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
24977 err.context = er;
24978 throw err;
24979 }
24980 }
ab78acc6 24981 }
212b1b46 24982
8b095871 24983 handler = this._events[type];
212b1b46 24984
8b095871
IC
24985 if (isUndefined(handler))
24986 return false;
24987
24988 if (isFunction(handler)) {
24989 switch (arguments.length) {
24990 // fast cases
24991 case 1:
24992 handler.call(this);
24993 break;
24994 case 2:
24995 handler.call(this, arguments[1]);
24996 break;
24997 case 3:
24998 handler.call(this, arguments[1], arguments[2]);
24999 break;
25000 // slower
25001 default:
25002 args = Array.prototype.slice.call(arguments, 1);
25003 handler.apply(this, args);
3af2954a 25004 }
8b095871
IC
25005 } else if (isObject(handler)) {
25006 args = Array.prototype.slice.call(arguments, 1);
25007 listeners = handler.slice();
25008 len = listeners.length;
25009 for (i = 0; i < len; i++)
25010 listeners[i].apply(this, args);
3af2954a 25011 }
212b1b46 25012
8b095871
IC
25013 return true;
25014};
ebd8d4e8 25015
8b095871
IC
25016EventEmitter.prototype.addListener = function(type, listener) {
25017 var m;
ebd8d4e8 25018
8b095871
IC
25019 if (!isFunction(listener))
25020 throw TypeError('listener must be a function');
ebd8d4e8 25021
8b095871
IC
25022 if (!this._events)
25023 this._events = {};
3af2954a 25024
8b095871
IC
25025 // To avoid recursion in the case that type === "newListener"! Before
25026 // adding it to the listeners, first emit "newListener".
25027 if (this._events.newListener)
25028 this.emit('newListener', type,
25029 isFunction(listener.listener) ?
25030 listener.listener : listener);
3af2954a 25031
8b095871
IC
25032 if (!this._events[type])
25033 // Optimize the case of one listener. Don't need the extra array object.
25034 this._events[type] = listener;
25035 else if (isObject(this._events[type]))
25036 // If we've already got an array, just append.
25037 this._events[type].push(listener);
25038 else
25039 // Adding the second element, need to change to array.
25040 this._events[type] = [this._events[type], listener];
3af2954a 25041
8b095871
IC
25042 // Check for listener leak
25043 if (isObject(this._events[type]) && !this._events[type].warned) {
25044 if (!isUndefined(this._maxListeners)) {
25045 m = this._maxListeners;
25046 } else {
25047 m = EventEmitter.defaultMaxListeners;
25048 }
3af2954a 25049
8b095871
IC
25050 if (m && m > 0 && this._events[type].length > m) {
25051 this._events[type].warned = true;
25052 console.error('(node) warning: possible EventEmitter memory ' +
25053 'leak detected. %d listeners added. ' +
25054 'Use emitter.setMaxListeners() to increase limit.',
25055 this._events[type].length);
25056 if (typeof console.trace === 'function') {
25057 // not supported in IE 10
25058 console.trace();
25059 }
25060 }
3af2954a
IC
25061 }
25062
8b095871
IC
25063 return this;
25064};
3af2954a 25065
8b095871 25066EventEmitter.prototype.on = EventEmitter.prototype.addListener;
3af2954a 25067
8b095871
IC
25068EventEmitter.prototype.once = function(type, listener) {
25069 if (!isFunction(listener))
25070 throw TypeError('listener must be a function');
3af2954a 25071
8b095871 25072 var fired = false;
ebd8d4e8 25073
8b095871
IC
25074 function g() {
25075 this.removeListener(type, g);
3af2954a 25076
8b095871
IC
25077 if (!fired) {
25078 fired = true;
25079 listener.apply(this, arguments);
25080 }
25081 }
3af2954a 25082
8b095871
IC
25083 g.listener = listener;
25084 this.on(type, g);
ebd8d4e8 25085
8b095871
IC
25086 return this;
25087};
ebd8d4e8 25088
8b095871
IC
25089// emits a 'removeListener' event iff the listener was removed
25090EventEmitter.prototype.removeListener = function(type, listener) {
25091 var list, position, length, i;
ebd8d4e8 25092
8b095871
IC
25093 if (!isFunction(listener))
25094 throw TypeError('listener must be a function');
ebd8d4e8 25095
8b095871
IC
25096 if (!this._events || !this._events[type])
25097 return this;
ab78acc6 25098
8b095871
IC
25099 list = this._events[type];
25100 length = list.length;
25101 position = -1;
ebd8d4e8 25102
8b095871
IC
25103 if (list === listener ||
25104 (isFunction(list.listener) && list.listener === listener)) {
25105 delete this._events[type];
25106 if (this._events.removeListener)
25107 this.emit('removeListener', type, listener);
ebd8d4e8 25108
8b095871
IC
25109 } else if (isObject(list)) {
25110 for (i = length; i-- > 0;) {
25111 if (list[i] === listener ||
25112 (list[i].listener && list[i].listener === listener)) {
25113 position = i;
25114 break;
25115 }
25116 }
25117
25118 if (position < 0)
25119 return this;
25120
25121 if (list.length === 1) {
25122 list.length = 0;
25123 delete this._events[type];
25124 } else {
25125 list.splice(position, 1);
25126 }
25127
25128 if (this._events.removeListener)
25129 this.emit('removeListener', type, listener);
ab78acc6 25130 }
ebd8d4e8 25131
8b095871
IC
25132 return this;
25133};
ebd8d4e8 25134
8b095871
IC
25135EventEmitter.prototype.removeAllListeners = function(type) {
25136 var key, listeners;
ebd8d4e8 25137
8b095871
IC
25138 if (!this._events)
25139 return this;
ab78acc6 25140
8b095871
IC
25141 // not listening for removeListener, no need to emit
25142 if (!this._events.removeListener) {
25143 if (arguments.length === 0)
25144 this._events = {};
25145 else if (this._events[type])
25146 delete this._events[type];
25147 return this;
25148 }
ab78acc6 25149
8b095871
IC
25150 // emit removeListener for all listeners on all events
25151 if (arguments.length === 0) {
25152 for (key in this._events) {
25153 if (key === 'removeListener') continue;
25154 this.removeAllListeners(key);
25155 }
25156 this.removeAllListeners('removeListener');
25157 this._events = {};
25158 return this;
25159 }
ebd8d4e8 25160
8b095871 25161 listeners = this._events[type];
ebd8d4e8 25162
8b095871
IC
25163 if (isFunction(listeners)) {
25164 this.removeListener(type, listeners);
25165 } else if (listeners) {
25166 // LIFO order
25167 while (listeners.length)
25168 this.removeListener(type, listeners[listeners.length - 1]);
25169 }
25170 delete this._events[type];
ebd8d4e8 25171
8b095871
IC
25172 return this;
25173};
ebd8d4e8 25174
8b095871
IC
25175EventEmitter.prototype.listeners = function(type) {
25176 var ret;
25177 if (!this._events || !this._events[type])
25178 ret = [];
25179 else if (isFunction(this._events[type]))
25180 ret = [this._events[type]];
25181 else
25182 ret = this._events[type].slice();
25183 return ret;
25184};
ebd8d4e8 25185
8b095871
IC
25186EventEmitter.prototype.listenerCount = function(type) {
25187 if (this._events) {
25188 var evlistener = this._events[type];
ebd8d4e8 25189
8b095871
IC
25190 if (isFunction(evlistener))
25191 return 1;
25192 else if (evlistener)
25193 return evlistener.length;
25194 }
25195 return 0;
25196};
25197
25198EventEmitter.listenerCount = function(emitter, type) {
25199 return emitter.listenerCount(type);
25200};
25201
25202function isFunction(arg) {
25203 return typeof arg === 'function';
ebd8d4e8
IC
25204}
25205
8b095871
IC
25206function isNumber(arg) {
25207 return typeof arg === 'number';
ebd8d4e8
IC
25208}
25209
8b095871
IC
25210function isObject(arg) {
25211 return typeof arg === 'object' && arg !== null;
ebd8d4e8
IC
25212}
25213
8b095871
IC
25214function isUndefined(arg) {
25215 return arg === void 0;
ebd8d4e8
IC
25216}
25217
8b095871
IC
25218},{}],8:[function(require,module,exports){
25219exports.read = function (buffer, offset, isLE, mLen, nBytes) {
25220 var e, m
25221 var eLen = nBytes * 8 - mLen - 1
25222 var eMax = (1 << eLen) - 1
25223 var eBias = eMax >> 1
25224 var nBits = -7
25225 var i = isLE ? (nBytes - 1) : 0
25226 var d = isLE ? -1 : 1
25227 var s = buffer[offset + i]
ebd8d4e8 25228
8b095871 25229 i += d
ebd8d4e8 25230
8b095871
IC
25231 e = s & ((1 << (-nBits)) - 1)
25232 s >>= (-nBits)
25233 nBits += eLen
25234 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
ebd8d4e8 25235
8b095871
IC
25236 m = e & ((1 << (-nBits)) - 1)
25237 e >>= (-nBits)
25238 nBits += mLen
25239 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
ebd8d4e8 25240
8b095871
IC
25241 if (e === 0) {
25242 e = 1 - eBias
25243 } else if (e === eMax) {
25244 return m ? NaN : ((s ? -1 : 1) * Infinity)
25245 } else {
25246 m = m + Math.pow(2, mLen)
25247 e = e - eBias
ab78acc6 25248 }
8b095871 25249 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
ebd8d4e8
IC
25250}
25251
8b095871
IC
25252exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
25253 var e, m, c
25254 var eLen = nBytes * 8 - mLen - 1
25255 var eMax = (1 << eLen) - 1
25256 var eBias = eMax >> 1
25257 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
25258 var i = isLE ? 0 : (nBytes - 1)
25259 var d = isLE ? 1 : -1
25260 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
ebd8d4e8 25261
8b095871 25262 value = Math.abs(value)
ebd8d4e8 25263
8b095871
IC
25264 if (isNaN(value) || value === Infinity) {
25265 m = isNaN(value) ? 1 : 0
25266 e = eMax
ab78acc6 25267 } else {
8b095871
IC
25268 e = Math.floor(Math.log(value) / Math.LN2)
25269 if (value * (c = Math.pow(2, -e)) < 1) {
25270 e--
25271 c *= 2
25272 }
25273 if (e + eBias >= 1) {
25274 value += rt / c
25275 } else {
25276 value += rt * Math.pow(2, 1 - eBias)
25277 }
25278 if (value * c >= 2) {
25279 e++
25280 c /= 2
25281 }
ebd8d4e8 25282
8b095871
IC
25283 if (e + eBias >= eMax) {
25284 m = 0
25285 e = eMax
25286 } else if (e + eBias >= 1) {
25287 m = (value * c - 1) * Math.pow(2, mLen)
25288 e = e + eBias
25289 } else {
25290 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
25291 e = 0
25292 }
ebd8d4e8 25293 }
ebd8d4e8 25294
8b095871 25295 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
ebd8d4e8 25296
8b095871
IC
25297 e = (e << mLen) | m
25298 eLen += mLen
25299 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
ebd8d4e8 25300
8b095871 25301 buffer[offset + i - d] |= s * 128
ab78acc6
IC
25302}
25303
8b095871
IC
25304},{}],9:[function(require,module,exports){
25305if (typeof Object.create === 'function') {
25306 // implementation from standard node.js 'util' module
25307 module.exports = function inherits(ctor, superCtor) {
25308 ctor.super_ = superCtor
25309 ctor.prototype = Object.create(superCtor.prototype, {
25310 constructor: {
25311 value: ctor,
25312 enumerable: false,
25313 writable: true,
25314 configurable: true
25315 }
25316 });
25317 };
25318} else {
25319 // old school shim for old browsers
25320 module.exports = function inherits(ctor, superCtor) {
25321 ctor.super_ = superCtor
25322 var TempCtor = function () {}
25323 TempCtor.prototype = superCtor.prototype
25324 ctor.prototype = new TempCtor()
25325 ctor.prototype.constructor = ctor
ebd8d4e8 25326 }
8b095871 25327}
ab78acc6 25328
8b095871
IC
25329},{}],10:[function(require,module,exports){
25330/*!
25331 * Determine if an object is a Buffer
25332 *
25333 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
25334 * @license MIT
25335 */
ebd8d4e8 25336
8b095871
IC
25337// The _isBuffer check is for Safari 5-7 support, because it's missing
25338// Object.prototype.constructor. Remove this eventually
25339module.exports = function (obj) {
25340 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
ebd8d4e8
IC
25341}
25342
8b095871
IC
25343function isBuffer (obj) {
25344 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
25345}
ebd8d4e8 25346
8b095871
IC
25347// For Node v0.10 support. Remove this eventually.
25348function isSlowBuffer (obj) {
25349 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
25350}
ebd8d4e8 25351
8b095871
IC
25352},{}],11:[function(require,module,exports){
25353var toString = {}.toString;
ab78acc6 25354
8b095871
IC
25355module.exports = Array.isArray || function (arr) {
25356 return toString.call(arr) == '[object Array]';
25357};
ebd8d4e8 25358
8b095871
IC
25359},{}],12:[function(require,module,exports){
25360(function (process){
25361'use strict';
ebd8d4e8 25362
8b095871
IC
25363if (!process.version ||
25364 process.version.indexOf('v0.') === 0 ||
25365 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
25366 module.exports = nextTick;
25367} else {
25368 module.exports = process.nextTick;
25369}
25370
25371function nextTick(fn, arg1, arg2, arg3) {
25372 if (typeof fn !== 'function') {
25373 throw new TypeError('"callback" argument must be a function');
25374 }
25375 var len = arguments.length;
25376 var args, i;
25377 switch (len) {
25378 case 0:
25379 case 1:
25380 return process.nextTick(fn);
25381 case 2:
25382 return process.nextTick(function afterTickOne() {
25383 fn.call(null, arg1);
25384 });
25385 case 3:
25386 return process.nextTick(function afterTickTwo() {
25387 fn.call(null, arg1, arg2);
25388 });
25389 case 4:
25390 return process.nextTick(function afterTickThree() {
25391 fn.call(null, arg1, arg2, arg3);
25392 });
25393 default:
25394 args = new Array(len - 1);
25395 i = 0;
25396 while (i < args.length) {
25397 args[i++] = arguments[i];
25398 }
25399 return process.nextTick(function afterTick() {
25400 fn.apply(null, args);
25401 });
ab78acc6 25402 }
ebd8d4e8
IC
25403}
25404
8b095871
IC
25405}).call(this,require('_process'))
25406},{"_process":13}],13:[function(require,module,exports){
25407// shim for using process in browser
25408var process = module.exports = {};
ebd8d4e8 25409
8b095871
IC
25410// cached from whatever global is present so that test runners that stub it
25411// don't break things. But we need to wrap it in a try catch in case it is
25412// wrapped in strict mode code which doesn't define any globals. It's inside a
25413// function because try/catches deoptimize in certain engines.
ab78acc6 25414
8b095871
IC
25415var cachedSetTimeout;
25416var cachedClearTimeout;
ebd8d4e8 25417
8b095871
IC
25418function defaultSetTimout() {
25419 throw new Error('setTimeout has not been defined');
ab78acc6 25420}
8b095871
IC
25421function defaultClearTimeout () {
25422 throw new Error('clearTimeout has not been defined');
ab78acc6 25423}
8b095871
IC
25424(function () {
25425 try {
25426 if (typeof setTimeout === 'function') {
25427 cachedSetTimeout = setTimeout;
25428 } else {
25429 cachedSetTimeout = defaultSetTimout;
25430 }
25431 } catch (e) {
25432 cachedSetTimeout = defaultSetTimout;
25433 }
25434 try {
25435 if (typeof clearTimeout === 'function') {
25436 cachedClearTimeout = clearTimeout;
25437 } else {
25438 cachedClearTimeout = defaultClearTimeout;
25439 }
25440 } catch (e) {
25441 cachedClearTimeout = defaultClearTimeout;
25442 }
25443} ())
25444function runTimeout(fun) {
25445 if (cachedSetTimeout === setTimeout) {
25446 //normal enviroments in sane situations
25447 return setTimeout(fun, 0);
25448 }
25449 // if setTimeout wasn't available but was latter defined
25450 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
25451 cachedSetTimeout = setTimeout;
25452 return setTimeout(fun, 0);
25453 }
25454 try {
25455 // when when somebody has screwed with setTimeout but no I.E. maddness
25456 return cachedSetTimeout(fun, 0);
25457 } catch(e){
25458 try {
25459 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
25460 return cachedSetTimeout.call(null, fun, 0);
25461 } catch(e){
25462 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
25463 return cachedSetTimeout.call(this, fun, 0);
25464 }
25465 }
25466
ebd8d4e8 25467
ab78acc6 25468}
8b095871
IC
25469function runClearTimeout(marker) {
25470 if (cachedClearTimeout === clearTimeout) {
25471 //normal enviroments in sane situations
25472 return clearTimeout(marker);
25473 }
25474 // if clearTimeout wasn't available but was latter defined
25475 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
25476 cachedClearTimeout = clearTimeout;
25477 return clearTimeout(marker);
25478 }
25479 try {
25480 // when when somebody has screwed with setTimeout but no I.E. maddness
25481 return cachedClearTimeout(marker);
25482 } catch (e){
25483 try {
25484 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
25485 return cachedClearTimeout.call(null, marker);
25486 } catch (e){
25487 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
25488 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
25489 return cachedClearTimeout.call(this, marker);
25490 }
25491 }
25492
25493
ebd8d4e8 25494
ab78acc6 25495}
8b095871
IC
25496var queue = [];
25497var draining = false;
25498var currentQueue;
25499var queueIndex = -1;
ebd8d4e8 25500
8b095871
IC
25501function cleanUpNextTick() {
25502 if (!draining || !currentQueue) {
25503 return;
25504 }
25505 draining = false;
25506 if (currentQueue.length) {
25507 queue = currentQueue.concat(queue);
25508 } else {
25509 queueIndex = -1;
25510 }
25511 if (queue.length) {
25512 drainQueue();
25513 }
ebd8d4e8
IC
25514}
25515
8b095871
IC
25516function drainQueue() {
25517 if (draining) {
25518 return;
25519 }
25520 var timeout = runTimeout(cleanUpNextTick);
25521 draining = true;
25522
25523 var len = queue.length;
25524 while(len) {
25525 currentQueue = queue;
25526 queue = [];
25527 while (++queueIndex < len) {
25528 if (currentQueue) {
25529 currentQueue[queueIndex].run();
25530 }
25531 }
25532 queueIndex = -1;
25533 len = queue.length;
25534 }
25535 currentQueue = null;
25536 draining = false;
25537 runClearTimeout(timeout);
ebd8d4e8
IC
25538}
25539
8b095871
IC
25540process.nextTick = function (fun) {
25541 var args = new Array(arguments.length - 1);
25542 if (arguments.length > 1) {
25543 for (var i = 1; i < arguments.length; i++) {
25544 args[i - 1] = arguments[i];
25545 }
25546 }
25547 queue.push(new Item(fun, args));
25548 if (queue.length === 1 && !draining) {
25549 runTimeout(drainQueue);
25550 }
25551};
25552
25553// v8 likes predictible objects
25554function Item(fun, array) {
25555 this.fun = fun;
25556 this.array = array;
ab78acc6 25557}
8b095871
IC
25558Item.prototype.run = function () {
25559 this.fun.apply(null, this.array);
25560};
25561process.title = 'browser';
25562process.browser = true;
25563process.env = {};
25564process.argv = [];
25565process.version = ''; // empty string to avoid regexp issues
25566process.versions = {};
ebd8d4e8 25567
8b095871
IC
25568function noop() {}
25569
25570process.on = noop;
25571process.addListener = noop;
25572process.once = noop;
25573process.off = noop;
25574process.removeListener = noop;
25575process.removeAllListeners = noop;
25576process.emit = noop;
25577
25578process.binding = function (name) {
25579 throw new Error('process.binding is not supported');
25580};
25581
25582process.cwd = function () { return '/' };
25583process.chdir = function (dir) {
25584 throw new Error('process.chdir is not supported');
25585};
25586process.umask = function() { return 0; };
25587
25588},{}],14:[function(require,module,exports){
25589module.exports = require("./lib/_stream_duplex.js")
25590
25591},{"./lib/_stream_duplex.js":15}],15:[function(require,module,exports){
25592// a duplex stream is just a stream that is both readable and writable.
25593// Since JS doesn't have multiple prototypal inheritance, this class
25594// prototypally inherits from Readable, and then parasitically from
25595// Writable.
25596
25597'use strict';
25598
25599/*<replacement>*/
ab78acc6 25600
8b095871
IC
25601var objectKeys = Object.keys || function (obj) {
25602 var keys = [];
25603 for (var key in obj) {
25604 keys.push(key);
25605 }return keys;
25606};
25607/*</replacement>*/
ebd8d4e8 25608
8b095871 25609module.exports = Duplex;
ebd8d4e8 25610
8b095871
IC
25611/*<replacement>*/
25612var processNextTick = require('process-nextick-args');
25613/*</replacement>*/
ebd8d4e8 25614
8b095871
IC
25615/*<replacement>*/
25616var util = require('core-util-is');
25617util.inherits = require('inherits');
25618/*</replacement>*/
ebd8d4e8 25619
8b095871
IC
25620var Readable = require('./_stream_readable');
25621var Writable = require('./_stream_writable');
ebd8d4e8 25622
8b095871
IC
25623util.inherits(Duplex, Readable);
25624
25625var keys = objectKeys(Writable.prototype);
25626for (var v = 0; v < keys.length; v++) {
25627 var method = keys[v];
25628 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
ab78acc6 25629}
ebd8d4e8 25630
8b095871
IC
25631function Duplex(options) {
25632 if (!(this instanceof Duplex)) return new Duplex(options);
ebd8d4e8 25633
8b095871
IC
25634 Readable.call(this, options);
25635 Writable.call(this, options);
ebd8d4e8 25636
8b095871 25637 if (options && options.readable === false) this.readable = false;
ebd8d4e8 25638
8b095871 25639 if (options && options.writable === false) this.writable = false;
ebd8d4e8 25640
8b095871
IC
25641 this.allowHalfOpen = true;
25642 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
ebd8d4e8 25643
8b095871 25644 this.once('end', onend);
ebd8d4e8
IC
25645}
25646
8b095871
IC
25647// the no-half-open enforcer
25648function onend() {
25649 // if we allow half-open state, or if the writable side ended,
25650 // then we're ok.
25651 if (this.allowHalfOpen || this._writableState.ended) return;
25652
25653 // no more data can be written.
25654 // But allow more writes to happen in this tick.
25655 processNextTick(onEndNT, this);
ebd8d4e8
IC
25656}
25657
8b095871
IC
25658function onEndNT(self) {
25659 self.end();
25660}
ebd8d4e8 25661
8b095871
IC
25662function forEach(xs, f) {
25663 for (var i = 0, l = xs.length; i < l; i++) {
25664 f(xs[i], i);
25665 }
25666}
25667},{"./_stream_readable":17,"./_stream_writable":19,"core-util-is":6,"inherits":9,"process-nextick-args":12}],16:[function(require,module,exports){
25668// a passthrough stream.
25669// basically just the most minimal sort of Transform stream.
25670// Every written chunk gets output as-is.
ebd8d4e8 25671
8b095871 25672'use strict';
ebd8d4e8 25673
8b095871 25674module.exports = PassThrough;
ebd8d4e8 25675
8b095871 25676var Transform = require('./_stream_transform');
ebd8d4e8 25677
8b095871
IC
25678/*<replacement>*/
25679var util = require('core-util-is');
25680util.inherits = require('inherits');
25681/*</replacement>*/
ebd8d4e8 25682
8b095871 25683util.inherits(PassThrough, Transform);
ebd8d4e8 25684
8b095871
IC
25685function PassThrough(options) {
25686 if (!(this instanceof PassThrough)) return new PassThrough(options);
ebd8d4e8 25687
8b095871 25688 Transform.call(this, options);
ebd8d4e8
IC
25689}
25690
8b095871
IC
25691PassThrough.prototype._transform = function (chunk, encoding, cb) {
25692 cb(null, chunk);
25693};
25694},{"./_stream_transform":18,"core-util-is":6,"inherits":9}],17:[function(require,module,exports){
25695(function (process){
25696'use strict';
ebd8d4e8 25697
8b095871 25698module.exports = Readable;
ebd8d4e8 25699
8b095871
IC
25700/*<replacement>*/
25701var processNextTick = require('process-nextick-args');
25702/*</replacement>*/
ebd8d4e8 25703
8b095871
IC
25704/*<replacement>*/
25705var isArray = require('isarray');
25706/*</replacement>*/
ebd8d4e8 25707
8b095871
IC
25708/*<replacement>*/
25709var Duplex;
25710/*</replacement>*/
ebd8d4e8 25711
8b095871 25712Readable.ReadableState = ReadableState;
ebd8d4e8 25713
8b095871
IC
25714/*<replacement>*/
25715var EE = require('events').EventEmitter;
ebd8d4e8 25716
8b095871
IC
25717var EElistenerCount = function (emitter, type) {
25718 return emitter.listeners(type).length;
25719};
25720/*</replacement>*/
ebd8d4e8 25721
8b095871
IC
25722/*<replacement>*/
25723var Stream;
25724(function () {
25725 try {
25726 Stream = require('st' + 'ream');
25727 } catch (_) {} finally {
25728 if (!Stream) Stream = require('events').EventEmitter;
25729 }
25730})();
25731/*</replacement>*/
ebd8d4e8 25732
8b095871
IC
25733var Buffer = require('buffer').Buffer;
25734/*<replacement>*/
25735var bufferShim = require('buffer-shims');
25736/*</replacement>*/
ab78acc6 25737
8b095871
IC
25738/*<replacement>*/
25739var util = require('core-util-is');
25740util.inherits = require('inherits');
25741/*</replacement>*/
ab78acc6 25742
8b095871
IC
25743/*<replacement>*/
25744var debugUtil = require('util');
25745var debug = void 0;
25746if (debugUtil && debugUtil.debuglog) {
25747 debug = debugUtil.debuglog('stream');
25748} else {
25749 debug = function () {};
25750}
25751/*</replacement>*/
ab78acc6 25752
8b095871
IC
25753var BufferList = require('./internal/streams/BufferList');
25754var StringDecoder;
ab78acc6 25755
8b095871 25756util.inherits(Readable, Stream);
ab78acc6 25757
8b095871
IC
25758function prependListener(emitter, event, fn) {
25759 // Sadly this is not cacheable as some libraries bundle their own
25760 // event emitter implementation with them.
25761 if (typeof emitter.prependListener === 'function') {
25762 return emitter.prependListener(event, fn);
25763 } else {
25764 // This is a hack to make sure that our error handler is attached before any
25765 // userland ones. NEVER DO THIS. This is here only because this code needs
25766 // to continue to work with older versions of Node.js that do not include
25767 // the prependListener() method. The goal is to eventually remove this hack.
25768 if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
ebd8d4e8 25769 }
ebd8d4e8
IC
25770}
25771
8b095871
IC
25772function ReadableState(options, stream) {
25773 Duplex = Duplex || require('./_stream_duplex');
ebd8d4e8 25774
8b095871 25775 options = options || {};
ebd8d4e8 25776
8b095871
IC
25777 // object stream flag. Used to make read(n) ignore n and to
25778 // make all the buffer merging and length checks go away
25779 this.objectMode = !!options.objectMode;
ebd8d4e8 25780
8b095871 25781 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
ebd8d4e8 25782
8b095871
IC
25783 // the point at which it stops calling _read() to fill the buffer
25784 // Note: 0 is a valid value, means "don't call _read preemptively ever"
25785 var hwm = options.highWaterMark;
25786 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
25787 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
ab78acc6 25788
8b095871
IC
25789 // cast to ints.
25790 this.highWaterMark = ~ ~this.highWaterMark;
ab78acc6 25791
8b095871
IC
25792 // A linked list is used to store data chunks instead of an array because the
25793 // linked list can remove elements from the beginning faster than
25794 // array.shift()
25795 this.buffer = new BufferList();
25796 this.length = 0;
25797 this.pipes = null;
25798 this.pipesCount = 0;
25799 this.flowing = null;
25800 this.ended = false;
25801 this.endEmitted = false;
25802 this.reading = false;
ab78acc6 25803
8b095871
IC
25804 // a flag to be able to tell if the onwrite cb is called immediately,
25805 // or on a later tick. We set this to true at first, because any
25806 // actions that shouldn't happen until "later" should generally also
25807 // not happen before the first write call.
25808 this.sync = true;
ebd8d4e8 25809
8b095871
IC
25810 // whenever we return null, then we set a flag to say
25811 // that we're awaiting a 'readable' event emission.
25812 this.needReadable = false;
25813 this.emittedReadable = false;
25814 this.readableListening = false;
25815 this.resumeScheduled = false;
ebd8d4e8 25816
8b095871
IC
25817 // Crypto is kind of old and crusty. Historically, its default string
25818 // encoding is 'binary' so we have to make this configurable.
25819 // Everything else in the universe uses 'utf8', though.
25820 this.defaultEncoding = options.defaultEncoding || 'utf8';
ebd8d4e8 25821
8b095871
IC
25822 // when piping, we only care about 'readable' events that happen
25823 // after read()ing all the bytes and not getting any pushback.
25824 this.ranOut = false;
ebd8d4e8 25825
8b095871
IC
25826 // the number of writers that are awaiting a drain event in .pipe()s
25827 this.awaitDrain = 0;
ebd8d4e8 25828
8b095871
IC
25829 // if true, a maybeReadMore has been scheduled
25830 this.readingMore = false;
ebd8d4e8 25831
8b095871
IC
25832 this.decoder = null;
25833 this.encoding = null;
25834 if (options.encoding) {
25835 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
25836 this.decoder = new StringDecoder(options.encoding);
25837 this.encoding = options.encoding;
25838 }
25839}
ebd8d4e8 25840
8b095871
IC
25841function Readable(options) {
25842 Duplex = Duplex || require('./_stream_duplex');
ebd8d4e8 25843
8b095871 25844 if (!(this instanceof Readable)) return new Readable(options);
ebd8d4e8 25845
8b095871 25846 this._readableState = new ReadableState(options, this);
ebd8d4e8 25847
8b095871
IC
25848 // legacy
25849 this.readable = true;
ebd8d4e8 25850
8b095871 25851 if (options && typeof options.read === 'function') this._read = options.read;
ebd8d4e8 25852
8b095871
IC
25853 Stream.call(this);
25854}
ebd8d4e8 25855
8b095871
IC
25856// Manually shove something into the read() buffer.
25857// This returns true if the highWaterMark has not been hit yet,
25858// similar to how Writable.write() returns true if you should
25859// write() some more.
25860Readable.prototype.push = function (chunk, encoding) {
25861 var state = this._readableState;
ebd8d4e8 25862
8b095871
IC
25863 if (!state.objectMode && typeof chunk === 'string') {
25864 encoding = encoding || state.defaultEncoding;
25865 if (encoding !== state.encoding) {
25866 chunk = bufferShim.from(chunk, encoding);
25867 encoding = '';
25868 }
25869 }
ebd8d4e8 25870
8b095871
IC
25871 return readableAddChunk(this, state, chunk, encoding, false);
25872};
ebd8d4e8 25873
8b095871
IC
25874// Unshift should *always* be something directly out of read()
25875Readable.prototype.unshift = function (chunk) {
25876 var state = this._readableState;
25877 return readableAddChunk(this, state, chunk, '', true);
25878};
ebd8d4e8 25879
8b095871
IC
25880Readable.prototype.isPaused = function () {
25881 return this._readableState.flowing === false;
25882};
25883
25884function readableAddChunk(stream, state, chunk, encoding, addToFront) {
25885 var er = chunkInvalid(state, chunk);
25886 if (er) {
25887 stream.emit('error', er);
25888 } else if (chunk === null) {
25889 state.reading = false;
25890 onEofChunk(stream, state);
25891 } else if (state.objectMode || chunk && chunk.length > 0) {
25892 if (state.ended && !addToFront) {
25893 var e = new Error('stream.push() after EOF');
25894 stream.emit('error', e);
25895 } else if (state.endEmitted && addToFront) {
25896 var _e = new Error('stream.unshift() after end event');
25897 stream.emit('error', _e);
25898 } else {
25899 var skipAdd;
25900 if (state.decoder && !addToFront && !encoding) {
25901 chunk = state.decoder.write(chunk);
25902 skipAdd = !state.objectMode && chunk.length === 0;
25903 }
ebd8d4e8 25904
8b095871 25905 if (!addToFront) state.reading = false;
ebd8d4e8 25906
8b095871
IC
25907 // Don't add to the buffer if we've decoded to an empty string chunk and
25908 // we're not in object mode
25909 if (!skipAdd) {
25910 // if we want the data now, just emit it.
25911 if (state.flowing && state.length === 0 && !state.sync) {
25912 stream.emit('data', chunk);
25913 stream.read(0);
25914 } else {
25915 // update the buffer info.
25916 state.length += state.objectMode ? 1 : chunk.length;
25917 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
ebd8d4e8 25918
8b095871
IC
25919 if (state.needReadable) emitReadable(stream);
25920 }
25921 }
ab78acc6 25922
8b095871
IC
25923 maybeReadMore(stream, state);
25924 }
25925 } else if (!addToFront) {
25926 state.reading = false;
25927 }
ab78acc6 25928
8b095871
IC
25929 return needMoreData(state);
25930}
ab78acc6 25931
8b095871
IC
25932// if it's past the high water mark, we can push in some more.
25933// Also, if we have no data yet, we can stand some
25934// more bytes. This is to work around cases where hwm=0,
25935// such as the repl. Also, if the push() triggered a
25936// readable event, and the user called read(largeNumber) such that
25937// needReadable was set, then we ought to push more, so that another
25938// 'readable' event will be triggered.
25939function needMoreData(state) {
25940 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
25941}
ebd8d4e8 25942
8b095871
IC
25943// backwards compatibility.
25944Readable.prototype.setEncoding = function (enc) {
25945 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
25946 this._readableState.decoder = new StringDecoder(enc);
25947 this._readableState.encoding = enc;
25948 return this;
25949};
25950
25951// Don't raise the hwm > 8MB
25952var MAX_HWM = 0x800000;
25953function computeNewHighWaterMark(n) {
25954 if (n >= MAX_HWM) {
25955 n = MAX_HWM;
ab78acc6 25956 } else {
8b095871
IC
25957 // Get the next highest power of 2 to prevent increasing hwm excessively in
25958 // tiny amounts
25959 n--;
25960 n |= n >>> 1;
25961 n |= n >>> 2;
25962 n |= n >>> 4;
25963 n |= n >>> 8;
25964 n |= n >>> 16;
25965 n++;
ebd8d4e8 25966 }
8b095871 25967 return n;
ebd8d4e8
IC
25968}
25969
8b095871
IC
25970// This function is designed to be inlinable, so please take care when making
25971// changes to the function body.
25972function howMuchToRead(n, state) {
25973 if (n <= 0 || state.length === 0 && state.ended) return 0;
25974 if (state.objectMode) return 1;
25975 if (n !== n) {
25976 // Only flow one buffer at a time
25977 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
25978 }
25979 // If we're asking for more than the current hwm, then raise the hwm.
25980 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
25981 if (n <= state.length) return n;
25982 // Don't have enough
25983 if (!state.ended) {
25984 state.needReadable = true;
25985 return 0;
25986 }
25987 return state.length;
25988}
ebd8d4e8 25989
8b095871
IC
25990// you can override either this method, or the async _read(n) below.
25991Readable.prototype.read = function (n) {
25992 debug('read', n);
25993 n = parseInt(n, 10);
25994 var state = this._readableState;
25995 var nOrig = n;
ebd8d4e8 25996
8b095871 25997 if (n !== 0) state.emittedReadable = false;
ab78acc6 25998
8b095871
IC
25999 // if we're doing read(0) to trigger a readable event, but we
26000 // already have a bunch of data in the buffer, then just trigger
26001 // the 'readable' event and move on.
26002 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
26003 debug('read: emitReadable', state.length, state.ended);
26004 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
26005 return null;
ebd8d4e8 26006 }
ebd8d4e8 26007
8b095871 26008 n = howMuchToRead(n, state);
ebd8d4e8 26009
8b095871
IC
26010 // if we've ended, and we're now clear, then finish it up.
26011 if (n === 0 && state.ended) {
26012 if (state.length === 0) endReadable(this);
26013 return null;
26014 }
ebd8d4e8 26015
8b095871
IC
26016 // All the actual chunk generation logic needs to be
26017 // *below* the call to _read. The reason is that in certain
26018 // synthetic stream cases, such as passthrough streams, _read
26019 // may be a completely synchronous operation which may change
26020 // the state of the read buffer, providing enough data when
26021 // before there was *not* enough.
26022 //
26023 // So, the steps are:
26024 // 1. Figure out what the state of things will be after we do
26025 // a read from the buffer.
26026 //
26027 // 2. If that resulting state will trigger a _read, then call _read.
26028 // Note that this may be asynchronous, or synchronous. Yes, it is
26029 // deeply ugly to write APIs this way, but that still doesn't mean
26030 // that the Readable class should behave improperly, as streams are
26031 // designed to be sync/async agnostic.
26032 // Take note if the _read call is sync or async (ie, if the read call
26033 // has returned yet), so that we know whether or not it's safe to emit
26034 // 'readable' etc.
26035 //
26036 // 3. Actually pull the requested chunks out of the buffer and return.
ebd8d4e8 26037
8b095871
IC
26038 // if we need a readable event, then we need to do some reading.
26039 var doRead = state.needReadable;
26040 debug('need readable', doRead);
ebd8d4e8 26041
8b095871
IC
26042 // if we currently have less than the highWaterMark, then also read some
26043 if (state.length === 0 || state.length - n < state.highWaterMark) {
26044 doRead = true;
26045 debug('length less than watermark', doRead);
26046 }
ebd8d4e8 26047
8b095871
IC
26048 // however, if we've ended, then there's no point, and if we're already
26049 // reading, then it's unnecessary.
26050 if (state.ended || state.reading) {
26051 doRead = false;
26052 debug('reading or ended', doRead);
26053 } else if (doRead) {
26054 debug('do read');
26055 state.reading = true;
26056 state.sync = true;
26057 // if the length is currently zero, then we *need* a readable event.
26058 if (state.length === 0) state.needReadable = true;
26059 // call internal read method
26060 this._read(state.highWaterMark);
26061 state.sync = false;
26062 // If _read pushed data synchronously, then `reading` will be false,
26063 // and we need to re-evaluate how much data we can return to the user.
26064 if (!state.reading) n = howMuchToRead(nOrig, state);
26065 }
ebd8d4e8 26066
8b095871
IC
26067 var ret;
26068 if (n > 0) ret = fromList(n, state);else ret = null;
ebd8d4e8 26069
8b095871
IC
26070 if (ret === null) {
26071 state.needReadable = true;
26072 n = 0;
26073 } else {
26074 state.length -= n;
26075 }
ebd8d4e8 26076
8b095871
IC
26077 if (state.length === 0) {
26078 // If we have nothing in the buffer, then we want to know
26079 // as soon as we *do* get something into the buffer.
26080 if (!state.ended) state.needReadable = true;
ebd8d4e8 26081
8b095871
IC
26082 // If we tried to read() past the EOF, then emit end on the next tick.
26083 if (nOrig !== n && state.ended) endReadable(this);
26084 }
26085
26086 if (ret !== null) this.emit('data', ret);
26087
26088 return ret;
ab78acc6
IC
26089};
26090
8b095871
IC
26091function chunkInvalid(state, chunk) {
26092 var er = null;
26093 if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
26094 er = new TypeError('Invalid non-string/buffer chunk');
26095 }
26096 return er;
26097}
ab78acc6 26098
8b095871
IC
26099function onEofChunk(stream, state) {
26100 if (state.ended) return;
26101 if (state.decoder) {
26102 var chunk = state.decoder.end();
26103 if (chunk && chunk.length) {
26104 state.buffer.push(chunk);
26105 state.length += state.objectMode ? 1 : chunk.length;
26106 }
26107 }
26108 state.ended = true;
26109
26110 // emit 'readable' now to make sure it gets picked up.
26111 emitReadable(stream);
26112}
26113
26114// Don't emit readable right away in sync mode, because this can trigger
26115// another read() call => stack overflow. This way, it might trigger
26116// a nextTick recursion warning, but that's not so bad.
26117function emitReadable(stream) {
26118 var state = stream._readableState;
26119 state.needReadable = false;
26120 if (!state.emittedReadable) {
26121 debug('emitReadable', state.flowing);
26122 state.emittedReadable = true;
26123 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
26124 }
ebd8d4e8
IC
26125}
26126
8b095871
IC
26127function emitReadable_(stream) {
26128 debug('emit readable');
26129 stream.emit('readable');
26130 flow(stream);
26131}
ebd8d4e8 26132
8b095871
IC
26133// at this point, the user has presumably seen the 'readable' event,
26134// and called read() to consume some data. that may have triggered
26135// in turn another _read(n) call, in which case reading = true if
26136// it's in progress.
26137// However, if we're not ended, or reading, and the length < hwm,
26138// then go ahead and try to read some more preemptively.
26139function maybeReadMore(stream, state) {
26140 if (!state.readingMore) {
26141 state.readingMore = true;
26142 processNextTick(maybeReadMore_, stream, state);
26143 }
26144}
ab78acc6 26145
8b095871
IC
26146function maybeReadMore_(stream, state) {
26147 var len = state.length;
26148 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
26149 debug('maybeReadMore read 0');
26150 stream.read(0);
26151 if (len === state.length)
26152 // didn't get any data, stop spinning.
26153 break;else len = state.length;
26154 }
26155 state.readingMore = false;
26156}
ab78acc6 26157
8b095871
IC
26158// abstract method. to be overridden in specific implementation classes.
26159// call cb(er, data) where data is <= n in length.
26160// for virtual (non-string, non-buffer) streams, "length" is somewhat
26161// arbitrary, and perhaps not very meaningful.
26162Readable.prototype._read = function (n) {
26163 this.emit('error', new Error('_read() is not implemented'));
ab78acc6
IC
26164};
26165
8b095871
IC
26166Readable.prototype.pipe = function (dest, pipeOpts) {
26167 var src = this;
26168 var state = this._readableState;
ab78acc6 26169
8b095871
IC
26170 switch (state.pipesCount) {
26171 case 0:
26172 state.pipes = dest;
26173 break;
26174 case 1:
26175 state.pipes = [state.pipes, dest];
26176 break;
26177 default:
26178 state.pipes.push(dest);
26179 break;
ab78acc6 26180 }
8b095871
IC
26181 state.pipesCount += 1;
26182 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
ab78acc6 26183
8b095871 26184 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
ab78acc6 26185
8b095871
IC
26186 var endFn = doEnd ? onend : cleanup;
26187 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
ab78acc6 26188
8b095871
IC
26189 dest.on('unpipe', onunpipe);
26190 function onunpipe(readable) {
26191 debug('onunpipe');
26192 if (readable === src) {
26193 cleanup();
ab78acc6 26194 }
8b095871 26195 }
ebd8d4e8 26196
8b095871
IC
26197 function onend() {
26198 debug('onend');
26199 dest.end();
ebd8d4e8
IC
26200 }
26201
8b095871
IC
26202 // when the dest drains, it reduces the awaitDrain counter
26203 // on the source. This would be more elegant with a .once()
26204 // handler in flow(), but adding and removing repeatedly is
26205 // too slow.
26206 var ondrain = pipeOnDrain(src);
26207 dest.on('drain', ondrain);
ebd8d4e8 26208
8b095871
IC
26209 var cleanedUp = false;
26210 function cleanup() {
26211 debug('cleanup');
26212 // cleanup event handlers once the pipe is broken
26213 dest.removeListener('close', onclose);
26214 dest.removeListener('finish', onfinish);
26215 dest.removeListener('drain', ondrain);
26216 dest.removeListener('error', onerror);
26217 dest.removeListener('unpipe', onunpipe);
26218 src.removeListener('end', onend);
26219 src.removeListener('end', cleanup);
26220 src.removeListener('data', ondata);
ebd8d4e8 26221
8b095871 26222 cleanedUp = true;
ebd8d4e8 26223
8b095871
IC
26224 // if the reader is waiting for a drain event from this
26225 // specific writer, then it would cause it to never start
26226 // flowing again.
26227 // So, if this is awaiting a drain, then we just call it now.
26228 // If we don't know, then assume that we are waiting for one.
26229 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
26230 }
ebd8d4e8 26231
8b095871
IC
26232 // If the user pushes more data while we're writing to dest then we'll end up
26233 // in ondata again. However, we only want to increase awaitDrain once because
26234 // dest will only emit one 'drain' event for the multiple writes.
26235 // => Introduce a guard on increasing awaitDrain.
26236 var increasedAwaitDrain = false;
26237 src.on('data', ondata);
26238 function ondata(chunk) {
26239 debug('ondata');
26240 increasedAwaitDrain = false;
26241 var ret = dest.write(chunk);
26242 if (false === ret && !increasedAwaitDrain) {
26243 // If the user unpiped during `dest.write()`, it is possible
26244 // to get stuck in a permanently paused state if that write
26245 // also returned false.
26246 // => Check whether `dest` is still a piping destination.
26247 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
26248 debug('false write response, pause', src._readableState.awaitDrain);
26249 src._readableState.awaitDrain++;
26250 increasedAwaitDrain = true;
26251 }
26252 src.pause();
26253 }
26254 }
ebd8d4e8 26255
8b095871
IC
26256 // if the dest has an error, then stop piping into it.
26257 // however, don't suppress the throwing behavior for this.
26258 function onerror(er) {
26259 debug('onerror', er);
26260 unpipe();
26261 dest.removeListener('error', onerror);
26262 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
26263 }
ab78acc6 26264
8b095871
IC
26265 // Make sure our error handler is attached before userland ones.
26266 prependListener(dest, 'error', onerror);
ab78acc6 26267
8b095871
IC
26268 // Both close and finish should trigger unpipe, but only once.
26269 function onclose() {
26270 dest.removeListener('finish', onfinish);
26271 unpipe();
26272 }
26273 dest.once('close', onclose);
26274 function onfinish() {
26275 debug('onfinish');
26276 dest.removeListener('close', onclose);
26277 unpipe();
ab78acc6 26278 }
8b095871 26279 dest.once('finish', onfinish);
ebd8d4e8 26280
8b095871
IC
26281 function unpipe() {
26282 debug('unpipe');
26283 src.unpipe(dest);
26284 }
26285
26286 // tell the dest that it's being piped to
26287 dest.emit('pipe', src);
26288
26289 // start the flow if it hasn't been started already.
26290 if (!state.flowing) {
26291 debug('pipe resume');
26292 src.resume();
26293 }
26294
26295 return dest;
ab78acc6 26296};
ebd8d4e8 26297
8b095871
IC
26298function pipeOnDrain(src) {
26299 return function () {
26300 var state = src._readableState;
26301 debug('pipeOnDrain', state.awaitDrain);
26302 if (state.awaitDrain) state.awaitDrain--;
26303 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
26304 state.flowing = true;
26305 flow(src);
26306 }
26307 };
26308}
ebd8d4e8 26309
8b095871
IC
26310Readable.prototype.unpipe = function (dest) {
26311 var state = this._readableState;
ebd8d4e8 26312
8b095871
IC
26313 // if we're not piping anywhere, then do nothing.
26314 if (state.pipesCount === 0) return this;
ebd8d4e8 26315
8b095871
IC
26316 // just one destination. most common case.
26317 if (state.pipesCount === 1) {
26318 // passed in one, but it's not the right one.
26319 if (dest && dest !== state.pipes) return this;
ebd8d4e8 26320
8b095871
IC
26321 if (!dest) dest = state.pipes;
26322
26323 // got a match.
26324 state.pipes = null;
26325 state.pipesCount = 0;
26326 state.flowing = false;
26327 if (dest) dest.emit('unpipe', this);
26328 return this;
ab78acc6 26329 }
ebd8d4e8 26330
8b095871 26331 // slow case. multiple pipe destinations.
ebd8d4e8 26332
8b095871
IC
26333 if (!dest) {
26334 // remove all.
26335 var dests = state.pipes;
26336 var len = state.pipesCount;
26337 state.pipes = null;
26338 state.pipesCount = 0;
26339 state.flowing = false;
ebd8d4e8 26340
8b095871
IC
26341 for (var i = 0; i < len; i++) {
26342 dests[i].emit('unpipe', this);
26343 }return this;
26344 }
ebd8d4e8 26345
8b095871
IC
26346 // try to find the right one.
26347 var index = indexOf(state.pipes, dest);
26348 if (index === -1) return this;
ebd8d4e8 26349
8b095871
IC
26350 state.pipes.splice(index, 1);
26351 state.pipesCount -= 1;
26352 if (state.pipesCount === 1) state.pipes = state.pipes[0];
ebd8d4e8 26353
8b095871 26354 dest.emit('unpipe', this);
ab78acc6 26355
8b095871
IC
26356 return this;
26357};
ab78acc6 26358
8b095871
IC
26359// set up data events if they are asked for
26360// Ensure readable listeners eventually get something
26361Readable.prototype.on = function (ev, fn) {
26362 var res = Stream.prototype.on.call(this, ev, fn);
26363
26364 if (ev === 'data') {
26365 // Start flowing on next tick if stream isn't explicitly paused
26366 if (this._readableState.flowing !== false) this.resume();
26367 } else if (ev === 'readable') {
26368 var state = this._readableState;
26369 if (!state.endEmitted && !state.readableListening) {
26370 state.readableListening = state.needReadable = true;
26371 state.emittedReadable = false;
26372 if (!state.reading) {
26373 processNextTick(nReadingNextTick, this);
26374 } else if (state.length) {
26375 emitReadable(this, state);
ebd8d4e8 26376 }
ab78acc6 26377 }
8b095871 26378 }
ebd8d4e8 26379
8b095871
IC
26380 return res;
26381};
26382Readable.prototype.addListener = Readable.prototype.on;
ab78acc6 26383
8b095871
IC
26384function nReadingNextTick(self) {
26385 debug('readable nexttick read 0');
26386 self.read(0);
26387}
ab78acc6 26388
8b095871
IC
26389// pause() and resume() are remnants of the legacy readable stream API
26390// If the user uses them, then switch into old mode.
26391Readable.prototype.resume = function () {
26392 var state = this._readableState;
26393 if (!state.flowing) {
26394 debug('resume');
26395 state.flowing = true;
26396 resume(this, state);
ebd8d4e8 26397 }
ab78acc6 26398 return this;
ebd8d4e8
IC
26399};
26400
8b095871
IC
26401function resume(stream, state) {
26402 if (!state.resumeScheduled) {
26403 state.resumeScheduled = true;
26404 processNextTick(resume_, stream, state);
ebd8d4e8 26405 }
8b095871 26406}
ab78acc6 26407
8b095871
IC
26408function resume_(stream, state) {
26409 if (!state.reading) {
26410 debug('resume read 0');
26411 stream.read(0);
ebd8d4e8 26412 }
ebd8d4e8 26413
8b095871
IC
26414 state.resumeScheduled = false;
26415 state.awaitDrain = 0;
26416 stream.emit('resume');
26417 flow(stream);
26418 if (state.flowing && !state.reading) stream.read(0);
26419}
ab78acc6 26420
8b095871
IC
26421Readable.prototype.pause = function () {
26422 debug('call pause flowing=%j', this._readableState.flowing);
26423 if (false !== this._readableState.flowing) {
26424 debug('pause');
26425 this._readableState.flowing = false;
26426 this.emit('pause');
ebd8d4e8 26427 }
ab78acc6
IC
26428 return this;
26429};
ebd8d4e8 26430
8b095871
IC
26431function flow(stream) {
26432 var state = stream._readableState;
26433 debug('flow', state.flowing);
26434 while (state.flowing && stream.read() !== null) {}
26435}
ebd8d4e8 26436
8b095871
IC
26437// wrap an old-style stream as the async data source.
26438// This is *not* part of the readable stream interface.
26439// It is an ugly unfortunate mess of history.
26440Readable.prototype.wrap = function (stream) {
26441 var state = this._readableState;
26442 var paused = false;
ebd8d4e8 26443
8b095871
IC
26444 var self = this;
26445 stream.on('end', function () {
26446 debug('wrapped end');
26447 if (state.decoder && !state.ended) {
26448 var chunk = state.decoder.end();
26449 if (chunk && chunk.length) self.push(chunk);
26450 }
ebd8d4e8 26451
8b095871
IC
26452 self.push(null);
26453 });
ebd8d4e8 26454
8b095871
IC
26455 stream.on('data', function (chunk) {
26456 debug('wrapped data');
26457 if (state.decoder) chunk = state.decoder.write(chunk);
ebd8d4e8 26458
8b095871
IC
26459 // don't skip over falsy values in objectMode
26460 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
ebd8d4e8 26461
8b095871
IC
26462 var ret = self.push(chunk);
26463 if (!ret) {
26464 paused = true;
26465 stream.pause();
26466 }
26467 });
26468
26469 // proxy all the other methods.
26470 // important when wrapping filters and duplexes.
26471 for (var i in stream) {
26472 if (this[i] === undefined && typeof stream[i] === 'function') {
26473 this[i] = function (method) {
26474 return function () {
26475 return stream[method].apply(stream, arguments);
26476 };
26477 }(i);
26478 }
ab78acc6 26479 }
ebd8d4e8 26480
8b095871
IC
26481 // proxy certain important events.
26482 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
26483 forEach(events, function (ev) {
26484 stream.on(ev, self.emit.bind(self, ev));
26485 });
26486
26487 // when we try to consume some more bytes, simply unpause the
26488 // underlying stream.
26489 self._read = function (n) {
26490 debug('wrapped _read', n);
26491 if (paused) {
26492 paused = false;
26493 stream.resume();
26494 }
26495 };
26496
26497 return self;
ebd8d4e8
IC
26498};
26499
8b095871
IC
26500// exposed for testing purposes only.
26501Readable._fromList = fromList;
ebd8d4e8 26502
8b095871
IC
26503// Pluck off n bytes from an array of buffers.
26504// Length is the combined lengths of all the buffers in the list.
26505// This function is designed to be inlinable, so please take care when making
26506// changes to the function body.
26507function fromList(n, state) {
26508 // nothing buffered
26509 if (state.length === 0) return null;
ab78acc6 26510
8b095871
IC
26511 var ret;
26512 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
26513 // read it all, truncate the list
26514 if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);
26515 state.buffer.clear();
26516 } else {
26517 // read part of list
26518 ret = fromListPartial(n, state.buffer, state.decoder);
26519 }
26520
26521 return ret;
26522}
26523
26524// Extracts only enough buffered data to satisfy the amount requested.
26525// This function is designed to be inlinable, so please take care when making
26526// changes to the function body.
26527function fromListPartial(n, list, hasStrings) {
26528 var ret;
26529 if (n < list.head.data.length) {
26530 // slice is the same for buffers and strings
26531 ret = list.head.data.slice(0, n);
26532 list.head.data = list.head.data.slice(n);
26533 } else if (n === list.head.data.length) {
26534 // first chunk is a perfect match
26535 ret = list.shift();
26536 } else {
26537 // result spans more than one buffer
26538 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
26539 }
26540 return ret;
ab78acc6 26541}
ebd8d4e8 26542
8b095871
IC
26543// Copies a specified amount of characters from the list of buffered data
26544// chunks.
26545// This function is designed to be inlinable, so please take care when making
26546// changes to the function body.
26547function copyFromBufferString(n, list) {
26548 var p = list.head;
26549 var c = 1;
26550 var ret = p.data;
26551 n -= ret.length;
26552 while (p = p.next) {
26553 var str = p.data;
26554 var nb = n > str.length ? str.length : n;
26555 if (nb === str.length) ret += str;else ret += str.slice(0, n);
26556 n -= nb;
26557 if (n === 0) {
26558 if (nb === str.length) {
26559 ++c;
26560 if (p.next) list.head = p.next;else list.head = list.tail = null;
26561 } else {
26562 list.head = p;
26563 p.data = str.slice(nb);
26564 }
26565 break;
ab78acc6 26566 }
8b095871
IC
26567 ++c;
26568 }
26569 list.length -= c;
26570 return ret;
ab78acc6
IC
26571}
26572
8b095871
IC
26573// Copies a specified amount of bytes from the list of buffered data chunks.
26574// This function is designed to be inlinable, so please take care when making
26575// changes to the function body.
26576function copyFromBuffer(n, list) {
26577 var ret = bufferShim.allocUnsafe(n);
26578 var p = list.head;
26579 var c = 1;
26580 p.data.copy(ret);
26581 n -= p.data.length;
26582 while (p = p.next) {
26583 var buf = p.data;
26584 var nb = n > buf.length ? buf.length : n;
26585 buf.copy(ret, ret.length - n, 0, nb);
26586 n -= nb;
26587 if (n === 0) {
26588 if (nb === buf.length) {
26589 ++c;
26590 if (p.next) list.head = p.next;else list.head = list.tail = null;
26591 } else {
26592 list.head = p;
26593 p.data = buf.slice(nb);
26594 }
26595 break;
ab78acc6 26596 }
8b095871
IC
26597 ++c;
26598 }
26599 list.length -= c;
26600 return ret;
ab78acc6 26601}
ebd8d4e8 26602
8b095871
IC
26603function endReadable(stream) {
26604 var state = stream._readableState;
ab78acc6 26605
8b095871
IC
26606 // If we get here before consuming all the bytes, then that is a
26607 // bug in node. Should never happen.
26608 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
ab78acc6 26609
8b095871
IC
26610 if (!state.endEmitted) {
26611 state.ended = true;
26612 processNextTick(endReadableNT, state, stream);
26613 }
26614}
ebd8d4e8 26615
8b095871
IC
26616function endReadableNT(state, stream) {
26617 // Check that we didn't get one last unshift.
26618 if (!state.endEmitted && state.length === 0) {
26619 state.endEmitted = true;
26620 stream.readable = false;
26621 stream.emit('end');
26622 }
26623}
ebd8d4e8 26624
8b095871
IC
26625function forEach(xs, f) {
26626 for (var i = 0, l = xs.length; i < l; i++) {
26627 f(xs[i], i);
26628 }
26629}
ebd8d4e8 26630
8b095871
IC
26631function indexOf(xs, x) {
26632 for (var i = 0, l = xs.length; i < l; i++) {
26633 if (xs[i] === x) return i;
26634 }
26635 return -1;
26636}
26637}).call(this,require('_process'))
26638},{"./_stream_duplex":15,"./internal/streams/BufferList":20,"_process":13,"buffer":5,"buffer-shims":4,"core-util-is":6,"events":7,"inherits":9,"isarray":11,"process-nextick-args":12,"string_decoder/":26,"util":3}],18:[function(require,module,exports){
26639// a transform stream is a readable/writable stream where you do
26640// something with the data. Sometimes it's called a "filter",
26641// but that's not a great name for it, since that implies a thing where
26642// some bits pass through, and others are simply ignored. (That would
26643// be a valid example of a transform, of course.)
ab78acc6 26644//
8b095871
IC
26645// While the output is causally related to the input, it's not a
26646// necessarily symmetric or synchronous transformation. For example,
26647// a zlib stream might take multiple plain-text writes(), and then
26648// emit a single compressed chunk some time in the future.
ab78acc6 26649//
8b095871 26650// Here's how this works:
ab78acc6 26651//
8b095871
IC
26652// The Transform stream has all the aspects of the readable and writable
26653// stream classes. When you write(chunk), that calls _write(chunk,cb)
26654// internally, and returns false if there's a lot of pending writes
26655// buffered up. When you call read(), that calls _read(n) until
26656// there's enough pending readable data buffered up.
26657//
26658// In a transform stream, the written data is placed in a buffer. When
26659// _read(n) is called, it transforms the queued up data, calling the
26660// buffered _write cb's as it consumes chunks. If consuming a single
26661// written chunk would result in multiple output chunks, then the first
26662// outputted bit calls the readcb, and subsequent chunks just go into
26663// the read buffer, and will cause it to emit 'readable' if necessary.
26664//
26665// This way, back-pressure is actually determined by the reading side,
26666// since _read has to be called to start processing a new chunk. However,
26667// a pathological inflate type of transform can cause excessive buffering
26668// here. For example, imagine a stream where every byte of input is
26669// interpreted as an integer from 0-255, and then results in that many
26670// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
26671// 1kb of data being output. In this case, you could write a very small
26672// amount of input, and end up with a very large amount of output. In
26673// such a pathological inflating mechanism, there'd be no way to tell
26674// the system to stop doing the transform. A single 4MB write could
26675// cause the system to run out of memory.
26676//
26677// However, even in such a pathological case, only a single written chunk
26678// would be consumed, and then the rest would wait (un-transformed) until
26679// the results of the previous transformed chunk were consumed.
ebd8d4e8 26680
8b095871 26681'use strict';
ebd8d4e8 26682
8b095871 26683module.exports = Transform;
ebd8d4e8 26684
8b095871 26685var Duplex = require('./_stream_duplex');
ebd8d4e8 26686
ab78acc6
IC
26687/*<replacement>*/
26688var util = require('core-util-is');
26689util.inherits = require('inherits');
26690/*</replacement>*/
ebd8d4e8 26691
8b095871 26692util.inherits(Transform, Duplex);
ebd8d4e8 26693
8b095871
IC
26694function TransformState(stream) {
26695 this.afterTransform = function (er, data) {
26696 return afterTransform(stream, er, data);
26697 };
ebd8d4e8 26698
8b095871
IC
26699 this.needTransform = false;
26700 this.transforming = false;
26701 this.writecb = null;
26702 this.writechunk = null;
26703 this.writeencoding = null;
26704}
ebd8d4e8 26705
8b095871
IC
26706function afterTransform(stream, er, data) {
26707 var ts = stream._transformState;
26708 ts.transforming = false;
ebd8d4e8 26709
8b095871 26710 var cb = ts.writecb;
ebd8d4e8 26711
8b095871 26712 if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
ebd8d4e8 26713
8b095871
IC
26714 ts.writechunk = null;
26715 ts.writecb = null;
ebd8d4e8 26716
8b095871 26717 if (data !== null && data !== undefined) stream.push(data);
ebd8d4e8 26718
8b095871
IC
26719 cb(er);
26720
26721 var rs = stream._readableState;
26722 rs.reading = false;
26723 if (rs.needReadable || rs.length < rs.highWaterMark) {
26724 stream._read(rs.highWaterMark);
26725 }
ebd8d4e8
IC
26726}
26727
8b095871
IC
26728function Transform(options) {
26729 if (!(this instanceof Transform)) return new Transform(options);
ebd8d4e8 26730
8b095871 26731 Duplex.call(this, options);
ebd8d4e8 26732
8b095871
IC
26733 this._transformState = new TransformState(this);
26734
26735 var stream = this;
26736
26737 // start out asking for a readable event once data is transformed.
26738 this._readableState.needReadable = true;
26739
26740 // we have implemented the _read method, and done the other things
26741 // that Readable wants before the first _read call, so unset the
26742 // sync guard flag.
26743 this._readableState.sync = false;
26744
26745 if (options) {
26746 if (typeof options.transform === 'function') this._transform = options.transform;
26747
26748 if (typeof options.flush === 'function') this._flush = options.flush;
ebd8d4e8 26749 }
8b095871
IC
26750
26751 // When the writable side finishes, then flush out anything remaining.
26752 this.once('prefinish', function () {
26753 if (typeof this._flush === 'function') this._flush(function (er, data) {
26754 done(stream, er, data);
26755 });else done(stream);
26756 });
ab78acc6 26757}
ebd8d4e8 26758
8b095871
IC
26759Transform.prototype.push = function (chunk, encoding) {
26760 this._transformState.needTransform = false;
26761 return Duplex.prototype.push.call(this, chunk, encoding);
26762};
26763
26764// This is the part where you do stuff!
26765// override this function in implementation classes.
26766// 'chunk' is an input chunk.
ab78acc6 26767//
8b095871
IC
26768// Call `push(newChunk)` to pass along transformed output
26769// to the readable side. You may call 'push' zero or more times.
ab78acc6 26770//
8b095871
IC
26771// Call `cb(err)` when you are done with this chunk. If you pass
26772// an error, then that'll put the hurt on the whole operation. If you
26773// never call cb(), then you'll never get another chunk.
26774Transform.prototype._transform = function (chunk, encoding, cb) {
26775 throw new Error('_transform() is not implemented');
26776};
ebd8d4e8 26777
8b095871
IC
26778Transform.prototype._write = function (chunk, encoding, cb) {
26779 var ts = this._transformState;
26780 ts.writecb = cb;
26781 ts.writechunk = chunk;
26782 ts.writeencoding = encoding;
26783 if (!ts.transforming) {
26784 var rs = this._readableState;
26785 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
26786 }
26787};
ebd8d4e8 26788
8b095871
IC
26789// Doesn't matter what the args are here.
26790// _transform does all the work.
26791// That we got here means that the readable side wants more data.
26792Transform.prototype._read = function (n) {
26793 var ts = this._transformState;
ebd8d4e8 26794
8b095871
IC
26795 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
26796 ts.transforming = true;
26797 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
26798 } else {
26799 // mark that we need a transform, so that any data that comes in
26800 // will get processed, now that we've asked for it.
26801 ts.needTransform = true;
26802 }
26803};
ebd8d4e8 26804
8b095871
IC
26805function done(stream, er, data) {
26806 if (er) return stream.emit('error', er);
ebd8d4e8 26807
8b095871 26808 if (data !== null && data !== undefined) stream.push(data);
ebd8d4e8 26809
8b095871
IC
26810 // if there's nothing in the write buffer, then that means
26811 // that nothing more will ever be provided
26812 var ws = stream._writableState;
26813 var ts = stream._transformState;
ebd8d4e8 26814
8b095871 26815 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
ebd8d4e8 26816
8b095871 26817 if (ts.transforming) throw new Error('Calling transform done when still transforming');
ebd8d4e8 26818
8b095871
IC
26819 return stream.push(null);
26820}
26821},{"./_stream_duplex":15,"core-util-is":6,"inherits":9}],19:[function(require,module,exports){
ab78acc6 26822(function (process){
8b095871
IC
26823// A bit simpler than readable streams.
26824// Implement an async ._write(chunk, encoding, cb), and it'll handle all
26825// the drain event emission and buffering.
ebd8d4e8 26826
8b095871
IC
26827'use strict';
26828
26829module.exports = Writable;
ebd8d4e8 26830
ab78acc6 26831/*<replacement>*/
8b095871 26832var processNextTick = require('process-nextick-args');
ab78acc6
IC
26833/*</replacement>*/
26834
ab78acc6 26835/*<replacement>*/
8b095871 26836var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
ab78acc6
IC
26837/*</replacement>*/
26838
ab78acc6 26839/*<replacement>*/
8b095871 26840var Duplex;
ab78acc6
IC
26841/*</replacement>*/
26842
8b095871 26843Writable.WritableState = WritableState;
ab78acc6
IC
26844
26845/*<replacement>*/
26846var util = require('core-util-is');
26847util.inherits = require('inherits');
26848/*</replacement>*/
26849
8b095871
IC
26850/*<replacement>*/
26851var internalUtil = {
26852 deprecate: require('util-deprecate')
26853};
26854/*</replacement>*/
ab78acc6 26855
8b095871
IC
26856/*<replacement>*/
26857var Stream;
26858(function () {
26859 try {
26860 Stream = require('st' + 'ream');
26861 } catch (_) {} finally {
26862 if (!Stream) Stream = require('events').EventEmitter;
26863 }
26864})();
26865/*</replacement>*/
ab78acc6 26866
8b095871 26867var Buffer = require('buffer').Buffer;
ab78acc6 26868/*<replacement>*/
8b095871 26869var bufferShim = require('buffer-shims');
ab78acc6
IC
26870/*</replacement>*/
26871
8b095871
IC
26872util.inherits(Writable, Stream);
26873
26874function nop() {}
ab78acc6 26875
8b095871
IC
26876function WriteReq(chunk, encoding, cb) {
26877 this.chunk = chunk;
26878 this.encoding = encoding;
26879 this.callback = cb;
26880 this.next = null;
26881}
ab78acc6 26882
8b095871
IC
26883function WritableState(options, stream) {
26884 Duplex = Duplex || require('./_stream_duplex');
ab78acc6
IC
26885
26886 options = options || {};
26887
8b095871
IC
26888 // object stream flag to indicate whether or not this stream
26889 // contains buffers or objects.
26890 this.objectMode = !!options.objectMode;
26891
26892 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
26893
26894 // the point at which write() starts returning false
26895 // Note: 0 is a valid value, means that we always return false if
26896 // the entire buffer is not flushed immediately on write()
ab78acc6 26897 var hwm = options.highWaterMark;
8b095871
IC
26898 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
26899 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
ab78acc6
IC
26900
26901 // cast to ints.
8b095871 26902 this.highWaterMark = ~ ~this.highWaterMark;
ab78acc6 26903
8b095871
IC
26904 // drain event flag.
26905 this.needDrain = false;
26906 // at the start of calling end()
26907 this.ending = false;
26908 // when end() has been called, and returned
ab78acc6 26909 this.ended = false;
8b095871
IC
26910 // when 'finish' is emitted
26911 this.finished = false;
26912
26913 // should we decode strings into buffers before passing to _write?
26914 // this is here so that some node-core streams can optimize string
26915 // handling at a lower level.
26916 var noDecode = options.decodeStrings === false;
26917 this.decodeStrings = !noDecode;
26918
26919 // Crypto is kind of old and crusty. Historically, its default string
26920 // encoding is 'binary' so we have to make this configurable.
26921 // Everything else in the universe uses 'utf8', though.
26922 this.defaultEncoding = options.defaultEncoding || 'utf8';
26923
26924 // not an actual buffer we keep track of, but a measurement
26925 // of how much we're waiting to get pushed to some underlying
26926 // socket or file.
26927 this.length = 0;
26928
26929 // a flag to see when we're in the middle of a write.
26930 this.writing = false;
26931
26932 // when true all writes will be buffered until .uncork() call
26933 this.corked = 0;
ebd8d4e8 26934
ab78acc6
IC
26935 // a flag to be able to tell if the onwrite cb is called immediately,
26936 // or on a later tick. We set this to true at first, because any
26937 // actions that shouldn't happen until "later" should generally also
26938 // not happen before the first write call.
26939 this.sync = true;
ebd8d4e8 26940
8b095871
IC
26941 // a flag to know if we're processing previously buffered items, which
26942 // may call the _write() callback in the same tick, so that we don't
26943 // end up in an overlapped onwrite situation.
26944 this.bufferProcessing = false;
26945
26946 // the callback that's passed to _write(chunk,cb)
26947 this.onwrite = function (er) {
26948 onwrite(stream, er);
26949 };
26950
26951 // the callback that the user supplies to write(chunk,encoding,cb)
26952 this.writecb = null;
26953
26954 // the amount that is being written when _write is called.
26955 this.writelen = 0;
26956
26957 this.bufferedRequest = null;
26958 this.lastBufferedRequest = null;
26959
26960 // number of pending user-supplied write callbacks
26961 // this must be 0 before 'finish' can be emitted
26962 this.pendingcb = 0;
26963
26964 // emit prefinish if the only thing we're waiting for is _write cbs
26965 // This is relevant for synchronous Transform streams
26966 this.prefinished = false;
26967
26968 // True if the error was already emitted and should not be thrown again
26969 this.errorEmitted = false;
26970
26971 // count buffered requests
26972 this.bufferedRequestCount = 0;
26973
26974 // allocate the first CorkedRequest, there is always
26975 // one allocated and free to use, and we maintain at most two
26976 this.corkedRequestsFree = new CorkedRequest(this);
26977}
26978
26979WritableState.prototype.getBuffer = function getBuffer() {
26980 var current = this.bufferedRequest;
26981 var out = [];
26982 while (current) {
26983 out.push(current);
26984 current = current.next;
26985 }
26986 return out;
26987};
26988
26989(function () {
26990 try {
26991 Object.defineProperty(WritableState.prototype, 'buffer', {
26992 get: internalUtil.deprecate(function () {
26993 return this.getBuffer();
26994 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
26995 });
26996 } catch (_) {}
26997})();
26998
26999// Test _writableState for inheritance to account for Duplex streams,
27000// whose prototype chain only points to Readable.
27001var realHasInstance;
27002if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
27003 realHasInstance = Function.prototype[Symbol.hasInstance];
27004 Object.defineProperty(Writable, Symbol.hasInstance, {
27005 value: function (object) {
27006 if (realHasInstance.call(this, object)) return true;
27007
27008 return object && object._writableState instanceof WritableState;
27009 }
27010 });
27011} else {
27012 realHasInstance = function (object) {
27013 return object instanceof this;
27014 };
27015}
27016
27017function Writable(options) {
27018 Duplex = Duplex || require('./_stream_duplex');
27019
27020 // Writable ctor is applied to Duplexes, too.
27021 // `realHasInstance` is necessary because using plain `instanceof`
27022 // would return false, as no `_writableState` property is attached.
27023
27024 // Trying to use the custom `instanceof` for Writable here will also break the
27025 // Node.js LazyTransform implementation, which has a non-trivial getter for
27026 // `_writableState` that would lead to infinite recursion.
27027 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
27028 return new Writable(options);
27029 }
27030
27031 this._writableState = new WritableState(options, this);
27032
27033 // legacy.
27034 this.writable = true;
27035
27036 if (options) {
27037 if (typeof options.write === 'function') this._write = options.write;
27038
27039 if (typeof options.writev === 'function') this._writev = options.writev;
27040 }
27041
27042 Stream.call(this);
27043}
27044
27045// Otherwise people can pipe Writable streams, which is just wrong.
27046Writable.prototype.pipe = function () {
27047 this.emit('error', new Error('Cannot pipe, not readable'));
27048};
27049
27050function writeAfterEnd(stream, cb) {
27051 var er = new Error('write after end');
27052 // TODO: defer error events consistently everywhere, not just the cb
27053 stream.emit('error', er);
27054 processNextTick(cb, er);
27055}
27056
27057// If we get something that is not a buffer, string, null, or undefined,
27058// and we're not in objectMode, then that's an error.
27059// Otherwise stream chunks are all considered to be of length=1, and the
27060// watermarks determine how many objects to keep in the buffer, rather than
27061// how many bytes or characters.
27062function validChunk(stream, state, chunk, cb) {
27063 var valid = true;
27064 var er = false;
27065 // Always throw error if a null is written
27066 // if we are not in object mode then throw
27067 // if it is not a buffer, string, or undefined.
27068 if (chunk === null) {
27069 er = new TypeError('May not write null values to stream');
27070 } else if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
27071 er = new TypeError('Invalid non-string/buffer chunk');
27072 }
27073 if (er) {
27074 stream.emit('error', er);
27075 processNextTick(cb, er);
27076 valid = false;
27077 }
27078 return valid;
27079}
ebd8d4e8 27080
8b095871
IC
27081Writable.prototype.write = function (chunk, encoding, cb) {
27082 var state = this._writableState;
27083 var ret = false;
ab78acc6 27084
8b095871
IC
27085 if (typeof encoding === 'function') {
27086 cb = encoding;
27087 encoding = null;
27088 }
ab78acc6 27089
8b095871 27090 if (Buffer.isBuffer(chunk)) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
ab78acc6 27091
8b095871 27092 if (typeof cb !== 'function') cb = nop;
ab78acc6 27093
8b095871
IC
27094 if (state.ended) writeAfterEnd(this, cb);else if (validChunk(this, state, chunk, cb)) {
27095 state.pendingcb++;
27096 ret = writeOrBuffer(this, state, chunk, encoding, cb);
27097 }
ab78acc6 27098
8b095871
IC
27099 return ret;
27100};
ab78acc6 27101
8b095871
IC
27102Writable.prototype.cork = function () {
27103 var state = this._writableState;
ab78acc6 27104
8b095871
IC
27105 state.corked++;
27106};
ebd8d4e8 27107
8b095871
IC
27108Writable.prototype.uncork = function () {
27109 var state = this._writableState;
ab78acc6 27110
8b095871
IC
27111 if (state.corked) {
27112 state.corked--;
ab78acc6 27113
8b095871
IC
27114 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
27115 }
27116};
ab78acc6 27117
8b095871
IC
27118Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
27119 // node::ParseEncoding() requires lower case.
27120 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
27121 if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);
27122 this._writableState.defaultEncoding = encoding;
27123 return this;
27124};
ab78acc6 27125
8b095871
IC
27126function decodeChunk(state, chunk, encoding) {
27127 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
27128 chunk = bufferShim.from(chunk, encoding);
27129 }
27130 return chunk;
ab78acc6
IC
27131}
27132
8b095871
IC
27133// if we're already writing something, then just put this
27134// in the queue, and wait our turn. Otherwise, call _write
27135// If we return false, then we need a drain event, so set that flag.
27136function writeOrBuffer(stream, state, chunk, encoding, cb) {
27137 chunk = decodeChunk(state, chunk, encoding);
ab78acc6 27138
8b095871
IC
27139 if (Buffer.isBuffer(chunk)) encoding = 'buffer';
27140 var len = state.objectMode ? 1 : chunk.length;
ebd8d4e8 27141
8b095871 27142 state.length += len;
ebd8d4e8 27143
8b095871
IC
27144 var ret = state.length < state.highWaterMark;
27145 // we must ensure that previous needDrain will not be reset to false.
27146 if (!ret) state.needDrain = true;
ebd8d4e8 27147
8b095871
IC
27148 if (state.writing || state.corked) {
27149 var last = state.lastBufferedRequest;
27150 state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
27151 if (last) {
27152 last.next = state.lastBufferedRequest;
ebd8d4e8 27153 } else {
8b095871
IC
27154 state.bufferedRequest = state.lastBufferedRequest;
27155 }
27156 state.bufferedRequestCount += 1;
27157 } else {
27158 doWrite(stream, state, false, len, chunk, encoding, cb);
27159 }
ab78acc6 27160
8b095871
IC
27161 return ret;
27162}
ab78acc6 27163
8b095871
IC
27164function doWrite(stream, state, writev, len, chunk, encoding, cb) {
27165 state.writelen = len;
27166 state.writecb = cb;
27167 state.writing = true;
27168 state.sync = true;
27169 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
27170 state.sync = false;
27171}
ab78acc6 27172
8b095871
IC
27173function onwriteError(stream, state, sync, er, cb) {
27174 --state.pendingcb;
27175 if (sync) processNextTick(cb, er);else cb(er);
ab78acc6 27176
8b095871
IC
27177 stream._writableState.errorEmitted = true;
27178 stream.emit('error', er);
27179}
ebd8d4e8 27180
8b095871
IC
27181function onwriteStateUpdate(state) {
27182 state.writing = false;
27183 state.writecb = null;
27184 state.length -= state.writelen;
27185 state.writelen = 0;
ab78acc6 27186}
ebd8d4e8 27187
8b095871
IC
27188function onwrite(stream, er) {
27189 var state = stream._writableState;
27190 var sync = state.sync;
27191 var cb = state.writecb;
ab78acc6 27192
8b095871 27193 onwriteStateUpdate(state);
ab78acc6 27194
8b095871
IC
27195 if (er) onwriteError(stream, state, sync, er, cb);else {
27196 // Check if we're actually ready to finish, but don't emit yet
27197 var finished = needFinish(state);
27198
27199 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
27200 clearBuffer(stream, state);
27201 }
27202
27203 if (sync) {
27204 /*<replacement>*/
27205 asyncWrite(afterWrite, stream, state, finished, cb);
27206 /*</replacement>*/
27207 } else {
27208 afterWrite(stream, state, finished, cb);
27209 }
27210 }
ab78acc6
IC
27211}
27212
8b095871
IC
27213function afterWrite(stream, state, finished, cb) {
27214 if (!finished) onwriteDrain(stream, state);
27215 state.pendingcb--;
27216 cb();
27217 finishMaybe(stream, state);
27218}
ab78acc6 27219
8b095871
IC
27220// Must force callback to be called on nextTick, so that we don't
27221// emit 'drain' before the write() consumer gets the 'false' return
27222// value, and has a chance to attach a 'drain' listener.
27223function onwriteDrain(stream, state) {
27224 if (state.length === 0 && state.needDrain) {
27225 state.needDrain = false;
27226 stream.emit('drain');
ebd8d4e8 27227 }
ebd8d4e8 27228}
ebd8d4e8 27229
8b095871
IC
27230// if there's something in the buffer waiting, then process it
27231function clearBuffer(stream, state) {
27232 state.bufferProcessing = true;
27233 var entry = state.bufferedRequest;
ebd8d4e8 27234
8b095871
IC
27235 if (stream._writev && entry && entry.next) {
27236 // Fast case, write everything using _writev()
27237 var l = state.bufferedRequestCount;
27238 var buffer = new Array(l);
27239 var holder = state.corkedRequestsFree;
27240 holder.entry = entry;
ebd8d4e8 27241
8b095871
IC
27242 var count = 0;
27243 while (entry) {
27244 buffer[count] = entry;
27245 entry = entry.next;
27246 count += 1;
27247 }
ebd8d4e8 27248
8b095871 27249 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
ebd8d4e8 27250
8b095871
IC
27251 // doWrite is almost always async, defer these to save a bit of time
27252 // as the hot path ends with doWrite
27253 state.pendingcb++;
27254 state.lastBufferedRequest = null;
27255 if (holder.next) {
27256 state.corkedRequestsFree = holder.next;
27257 holder.next = null;
27258 } else {
27259 state.corkedRequestsFree = new CorkedRequest(state);
27260 }
27261 } else {
27262 // Slow case, write chunks one-by-one
27263 while (entry) {
27264 var chunk = entry.chunk;
27265 var encoding = entry.encoding;
27266 var cb = entry.callback;
27267 var len = state.objectMode ? 1 : chunk.length;
ebd8d4e8 27268
8b095871
IC
27269 doWrite(stream, state, false, len, chunk, encoding, cb);
27270 entry = entry.next;
27271 // if we didn't call the onwrite immediately, then
27272 // it means that we need to wait until it does.
27273 // also, that means that the chunk and cb are currently
27274 // being processed, so move the buffer counter past them.
27275 if (state.writing) {
27276 break;
27277 }
27278 }
27279
27280 if (entry === null) state.lastBufferedRequest = null;
ebd8d4e8 27281 }
ab78acc6 27282
8b095871
IC
27283 state.bufferedRequestCount = 0;
27284 state.bufferedRequest = entry;
27285 state.bufferProcessing = false;
ebd8d4e8
IC
27286}
27287
8b095871
IC
27288Writable.prototype._write = function (chunk, encoding, cb) {
27289 cb(new Error('_write() is not implemented'));
27290};
ebd8d4e8 27291
8b095871 27292Writable.prototype._writev = null;
ab78acc6 27293
8b095871
IC
27294Writable.prototype.end = function (chunk, encoding, cb) {
27295 var state = this._writableState;
27296
27297 if (typeof chunk === 'function') {
27298 cb = chunk;
27299 chunk = null;
27300 encoding = null;
27301 } else if (typeof encoding === 'function') {
27302 cb = encoding;
27303 encoding = null;
ab78acc6
IC
27304 }
27305
8b095871 27306 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
ab78acc6 27307
8b095871
IC
27308 // .end() fully uncorks
27309 if (state.corked) {
27310 state.corked = 1;
27311 this.uncork();
ab78acc6
IC
27312 }
27313
8b095871
IC
27314 // ignore unnecessary end() calls.
27315 if (!state.ending && !state.finished) endWritable(this, state, cb);
27316};
ab78acc6 27317
8b095871
IC
27318function needFinish(state) {
27319 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
27320}
ab78acc6 27321
8b095871
IC
27322function prefinish(stream, state) {
27323 if (!state.prefinished) {
27324 state.prefinished = true;
27325 stream.emit('prefinish');
ab78acc6 27326 }
8b095871 27327}
ab78acc6 27328
8b095871
IC
27329function finishMaybe(stream, state) {
27330 var need = needFinish(state);
27331 if (need) {
27332 if (state.pendingcb === 0) {
27333 prefinish(stream, state);
27334 state.finished = true;
27335 stream.emit('finish');
27336 } else {
27337 prefinish(stream, state);
27338 }
ab78acc6 27339 }
8b095871
IC
27340 return need;
27341}
ab78acc6 27342
8b095871
IC
27343function endWritable(stream, state, cb) {
27344 state.ending = true;
27345 finishMaybe(stream, state);
27346 if (cb) {
27347 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
ab78acc6 27348 }
8b095871
IC
27349 state.ended = true;
27350 stream.writable = false;
27351}
ab78acc6 27352
8b095871
IC
27353// It seems a linked list but it is not
27354// there will be only 2 of these for each stream
27355function CorkedRequest(state) {
27356 var _this = this;
ab78acc6 27357
8b095871
IC
27358 this.next = null;
27359 this.entry = null;
ebd8d4e8 27360
8b095871
IC
27361 this.finish = function (err) {
27362 var entry = _this.entry;
27363 _this.entry = null;
27364 while (entry) {
27365 var cb = entry.callback;
27366 state.pendingcb--;
27367 cb(err);
27368 entry = entry.next;
27369 }
27370 if (state.corkedRequestsFree) {
27371 state.corkedRequestsFree.next = _this;
27372 } else {
27373 state.corkedRequestsFree = _this;
27374 }
27375 };
27376}
27377}).call(this,require('_process'))
27378},{"./_stream_duplex":15,"_process":13,"buffer":5,"buffer-shims":4,"core-util-is":6,"events":7,"inherits":9,"process-nextick-args":12,"util-deprecate":27}],20:[function(require,module,exports){
27379'use strict';
ebd8d4e8 27380
8b095871
IC
27381var Buffer = require('buffer').Buffer;
27382/*<replacement>*/
27383var bufferShim = require('buffer-shims');
27384/*</replacement>*/
ebd8d4e8 27385
8b095871 27386module.exports = BufferList;
ebd8d4e8 27387
8b095871
IC
27388function BufferList() {
27389 this.head = null;
27390 this.tail = null;
27391 this.length = 0;
27392}
ab78acc6 27393
8b095871
IC
27394BufferList.prototype.push = function (v) {
27395 var entry = { data: v, next: null };
27396 if (this.length > 0) this.tail.next = entry;else this.head = entry;
27397 this.tail = entry;
27398 ++this.length;
27399};
27400
27401BufferList.prototype.unshift = function (v) {
27402 var entry = { data: v, next: this.head };
27403 if (this.length === 0) this.tail = entry;
27404 this.head = entry;
27405 ++this.length;
27406};
ab78acc6 27407
8b095871
IC
27408BufferList.prototype.shift = function () {
27409 if (this.length === 0) return;
27410 var ret = this.head.data;
27411 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
27412 --this.length;
ab78acc6
IC
27413 return ret;
27414};
27415
8b095871
IC
27416BufferList.prototype.clear = function () {
27417 this.head = this.tail = null;
27418 this.length = 0;
27419};
ebd8d4e8 27420
8b095871
IC
27421BufferList.prototype.join = function (s) {
27422 if (this.length === 0) return '';
27423 var p = this.head;
27424 var ret = '' + p.data;
27425 while (p = p.next) {
27426 ret += s + p.data;
27427 }return ret;
27428};
ebd8d4e8 27429
8b095871
IC
27430BufferList.prototype.concat = function (n) {
27431 if (this.length === 0) return bufferShim.alloc(0);
27432 if (this.length === 1) return this.head.data;
27433 var ret = bufferShim.allocUnsafe(n >>> 0);
27434 var p = this.head;
27435 var i = 0;
27436 while (p) {
27437 p.data.copy(ret, i);
27438 i += p.data.length;
27439 p = p.next;
ebd8d4e8 27440 }
8b095871
IC
27441 return ret;
27442};
27443},{"buffer":5,"buffer-shims":4}],21:[function(require,module,exports){
27444module.exports = require("./lib/_stream_passthrough.js")
ebd8d4e8 27445
8b095871
IC
27446},{"./lib/_stream_passthrough.js":16}],22:[function(require,module,exports){
27447(function (process){
27448var Stream = (function (){
27449 try {
27450 return require('st' + 'ream'); // hack to fix a circular dependency issue when used with browserify
27451 } catch(_){}
27452}());
27453exports = module.exports = require('./lib/_stream_readable.js');
27454exports.Stream = Stream || exports;
27455exports.Readable = exports;
27456exports.Writable = require('./lib/_stream_writable.js');
27457exports.Duplex = require('./lib/_stream_duplex.js');
27458exports.Transform = require('./lib/_stream_transform.js');
27459exports.PassThrough = require('./lib/_stream_passthrough.js');
ab78acc6 27460
8b095871
IC
27461if (!process.browser && process.env.READABLE_STREAM === 'disable' && Stream) {
27462 module.exports = Stream;
ab78acc6 27463}
ebd8d4e8 27464
8b095871
IC
27465}).call(this,require('_process'))
27466},{"./lib/_stream_duplex.js":15,"./lib/_stream_passthrough.js":16,"./lib/_stream_readable.js":17,"./lib/_stream_transform.js":18,"./lib/_stream_writable.js":19,"_process":13}],23:[function(require,module,exports){
27467module.exports = require("./lib/_stream_transform.js")
ebd8d4e8 27468
8b095871
IC
27469},{"./lib/_stream_transform.js":18}],24:[function(require,module,exports){
27470module.exports = require("./lib/_stream_writable.js")
ab78acc6 27471
8b095871
IC
27472},{"./lib/_stream_writable.js":19}],25:[function(require,module,exports){
27473// Copyright Joyent, Inc. and other Node contributors.
27474//
27475// Permission is hereby granted, free of charge, to any person obtaining a
27476// copy of this software and associated documentation files (the
27477// "Software"), to deal in the Software without restriction, including
27478// without limitation the rights to use, copy, modify, merge, publish,
27479// distribute, sublicense, and/or sell copies of the Software, and to permit
27480// persons to whom the Software is furnished to do so, subject to the
27481// following conditions:
27482//
27483// The above copyright notice and this permission notice shall be included
27484// in all copies or substantial portions of the Software.
27485//
27486// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
27487// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27488// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
27489// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
27490// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
27491// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
27492// USE OR OTHER DEALINGS IN THE SOFTWARE.
27493
27494module.exports = Stream;
27495
27496var EE = require('events').EventEmitter;
27497var inherits = require('inherits');
27498
27499inherits(Stream, EE);
27500Stream.Readable = require('readable-stream/readable.js');
27501Stream.Writable = require('readable-stream/writable.js');
27502Stream.Duplex = require('readable-stream/duplex.js');
27503Stream.Transform = require('readable-stream/transform.js');
27504Stream.PassThrough = require('readable-stream/passthrough.js');
ebd8d4e8 27505
8b095871
IC
27506// Backwards-compat with node 0.4.x
27507Stream.Stream = Stream;
ebd8d4e8 27508
ab78acc6 27509
ab78acc6 27510
8b095871
IC
27511// old-style streams. Note that the pipe method (the only relevant
27512// part of this class) is overridden in the Readable class.
ebd8d4e8 27513
8b095871
IC
27514function Stream() {
27515 EE.call(this);
27516}
ebd8d4e8 27517
8b095871
IC
27518Stream.prototype.pipe = function(dest, options) {
27519 var source = this;
ab78acc6 27520
8b095871
IC
27521 function ondata(chunk) {
27522 if (dest.writable) {
27523 if (false === dest.write(chunk) && source.pause) {
27524 source.pause();
27525 }
ab78acc6
IC
27526 }
27527 }
27528
8b095871
IC
27529 source.on('data', ondata);
27530
27531 function ondrain() {
27532 if (source.readable && source.resume) {
27533 source.resume();
27534 }
ab78acc6
IC
27535 }
27536
ab78acc6
IC
27537 dest.on('drain', ondrain);
27538
8b095871
IC
27539 // If the 'end' option is not supplied, dest.end() will be called when
27540 // source gets the 'end' or 'close' events. Only dest.end() once.
27541 if (!dest._isStdio && (!options || options.end !== false)) {
27542 source.on('end', onend);
27543 source.on('close', onclose);
ab78acc6
IC
27544 }
27545
8b095871
IC
27546 var didOnEnd = false;
27547 function onend() {
27548 if (didOnEnd) return;
27549 didOnEnd = true;
ab78acc6 27550
8b095871 27551 dest.end();
ab78acc6 27552 }
ab78acc6
IC
27553
27554
ab78acc6 27555 function onclose() {
8b095871
IC
27556 if (didOnEnd) return;
27557 didOnEnd = true;
ebd8d4e8 27558
8b095871 27559 if (typeof dest.destroy === 'function') dest.destroy();
ebd8d4e8
IC
27560 }
27561
8b095871
IC
27562 // don't leave dangling pipes when there are errors.
27563 function onerror(er) {
27564 cleanup();
27565 if (EE.listenerCount(this, 'error') === 0) {
27566 throw er; // Unhandled stream error in pipe.
27567 }
ebd8d4e8
IC
27568 }
27569
8b095871
IC
27570 source.on('error', onerror);
27571 dest.on('error', onerror);
ab78acc6 27572
8b095871
IC
27573 // remove all the event listeners that were added.
27574 function cleanup() {
27575 source.removeListener('data', ondata);
27576 dest.removeListener('drain', ondrain);
ab78acc6 27577
8b095871
IC
27578 source.removeListener('end', onend);
27579 source.removeListener('close', onclose);
ab78acc6 27580
8b095871
IC
27581 source.removeListener('error', onerror);
27582 dest.removeListener('error', onerror);
ab78acc6 27583
8b095871
IC
27584 source.removeListener('end', cleanup);
27585 source.removeListener('close', cleanup);
ab78acc6 27586
8b095871
IC
27587 dest.removeListener('close', cleanup);
27588 }
ab78acc6 27589
8b095871
IC
27590 source.on('end', cleanup);
27591 source.on('close', cleanup);
ab78acc6 27592
8b095871 27593 dest.on('close', cleanup);
ebd8d4e8 27594
8b095871 27595 dest.emit('pipe', source);
ab78acc6 27596
8b095871
IC
27597 // Allow for unix-like usage: A.pipe(B).pipe(C)
27598 return dest;
27599};
ab78acc6 27600
8b095871
IC
27601},{"events":7,"inherits":9,"readable-stream/duplex.js":14,"readable-stream/passthrough.js":21,"readable-stream/readable.js":22,"readable-stream/transform.js":23,"readable-stream/writable.js":24}],26:[function(require,module,exports){
27602// Copyright Joyent, Inc. and other Node contributors.
27603//
27604// Permission is hereby granted, free of charge, to any person obtaining a
27605// copy of this software and associated documentation files (the
27606// "Software"), to deal in the Software without restriction, including
27607// without limitation the rights to use, copy, modify, merge, publish,
27608// distribute, sublicense, and/or sell copies of the Software, and to permit
27609// persons to whom the Software is furnished to do so, subject to the
27610// following conditions:
27611//
27612// The above copyright notice and this permission notice shall be included
27613// in all copies or substantial portions of the Software.
27614//
27615// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
27616// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27617// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
27618// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
27619// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
27620// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
27621// USE OR OTHER DEALINGS IN THE SOFTWARE.
27622
27623var Buffer = require('buffer').Buffer;
ebd8d4e8 27624
8b095871
IC
27625var isBufferEncoding = Buffer.isEncoding
27626 || function(encoding) {
27627 switch (encoding && encoding.toLowerCase()) {
27628 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;
27629 default: return false;
27630 }
27631 }
ab78acc6 27632
ab78acc6 27633
8b095871
IC
27634function assertEncoding(encoding) {
27635 if (encoding && !isBufferEncoding(encoding)) {
27636 throw new Error('Unknown encoding: ' + encoding);
27637 }
27638}
ebd8d4e8 27639
8b095871
IC
27640// StringDecoder provides an interface for efficiently splitting a series of
27641// buffers into a series of JS strings without breaking apart multi-byte
27642// characters. CESU-8 is handled as part of the UTF-8 encoding.
27643//
27644// @TODO Handling all encodings inside a single object makes it very difficult
27645// to reason about this code, so it should be split up in the future.
27646// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
27647// points as used by CESU-8.
27648var StringDecoder = exports.StringDecoder = function(encoding) {
27649 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
27650 assertEncoding(encoding);
27651 switch (this.encoding) {
27652 case 'utf8':
27653 // CESU-8 represents each of Surrogate Pair by 3-bytes
27654 this.surrogateSize = 3;
27655 break;
27656 case 'ucs2':
27657 case 'utf16le':
27658 // UTF-16 represents each of Surrogate Pair by 2-bytes
27659 this.surrogateSize = 2;
27660 this.detectIncompleteChar = utf16DetectIncompleteChar;
27661 break;
27662 case 'base64':
27663 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
27664 this.surrogateSize = 3;
27665 this.detectIncompleteChar = base64DetectIncompleteChar;
27666 break;
27667 default:
27668 this.write = passThroughWrite;
27669 return;
27670 }
27671
27672 // Enough space to store all bytes of a single character. UTF-8 needs 4
27673 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
27674 this.charBuffer = new Buffer(6);
27675 // Number of bytes received for the current incomplete multi-byte character.
27676 this.charReceived = 0;
27677 // Number of bytes expected for the current incomplete multi-byte character.
27678 this.charLength = 0;
ab78acc6
IC
27679};
27680
ab78acc6 27681
8b095871
IC
27682// write decodes the given buffer and returns it as JS string that is
27683// guaranteed to not contain any partial multi-byte characters. Any partial
27684// character found at the end of the buffer is buffered up, and will be
27685// returned when calling write again with the remaining bytes.
27686//
27687// Note: Converting a Buffer containing an orphan surrogate to a String
27688// currently works, but converting a String to a Buffer (via `new Buffer`, or
27689// Buffer#write) will replace incomplete surrogates with the unicode
27690// replacement character. See https://codereview.chromium.org/121173009/ .
27691StringDecoder.prototype.write = function(buffer) {
27692 var charStr = '';
27693 // if our last write ended with an incomplete multibyte character
27694 while (this.charLength) {
27695 // determine how many remaining bytes this buffer has to offer for this char
27696 var available = (buffer.length >= this.charLength - this.charReceived) ?
27697 this.charLength - this.charReceived :
27698 buffer.length;
ab78acc6 27699
8b095871
IC
27700 // add the new bytes to the char buffer
27701 buffer.copy(this.charBuffer, this.charReceived, 0, available);
27702 this.charReceived += available;
27703
27704 if (this.charReceived < this.charLength) {
27705 // still not enough chars in this buffer? wait for more ...
27706 return '';
ebd8d4e8 27707 }
ebd8d4e8 27708
8b095871
IC
27709 // remove bytes belonging to the current character from the buffer
27710 buffer = buffer.slice(available, buffer.length);
ab78acc6 27711
8b095871
IC
27712 // get the character that was split
27713 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
27714
27715 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
27716 var charCode = charStr.charCodeAt(charStr.length - 1);
27717 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
27718 this.charLength += this.surrogateSize;
27719 charStr = '';
27720 continue;
ab78acc6 27721 }
8b095871 27722 this.charReceived = this.charLength = 0;
ebd8d4e8 27723
8b095871
IC
27724 // if there are no more bytes in this buffer, just emit our char
27725 if (buffer.length === 0) {
27726 return charStr;
27727 }
27728 break;
ebd8d4e8 27729 }
ebd8d4e8 27730
8b095871
IC
27731 // determine and set charLength / charReceived
27732 this.detectIncompleteChar(buffer);
ebd8d4e8 27733
8b095871
IC
27734 var end = buffer.length;
27735 if (this.charLength) {
27736 // buffer the incomplete character bytes we got
27737 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
27738 end -= this.charReceived;
ab78acc6 27739 }
ebd8d4e8 27740
8b095871
IC
27741 charStr += buffer.toString(this.encoding, 0, end);
27742
27743 var end = charStr.length - 1;
27744 var charCode = charStr.charCodeAt(end);
27745 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
27746 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
27747 var size = this.surrogateSize;
27748 this.charLength += size;
27749 this.charReceived += size;
27750 this.charBuffer.copy(this.charBuffer, size, 0, size);
27751 buffer.copy(this.charBuffer, 0, 0, size);
27752 return charStr.substring(0, end);
ab78acc6 27753 }
ebd8d4e8 27754
8b095871
IC
27755 // or just emit the charStr
27756 return charStr;
27757};
ebd8d4e8 27758
8b095871
IC
27759// detectIncompleteChar determines if there is an incomplete UTF-8 character at
27760// the end of the given buffer. If so, it sets this.charLength to the byte
27761// length that character, and sets this.charReceived to the number of bytes
27762// that are available for this character.
27763StringDecoder.prototype.detectIncompleteChar = function(buffer) {
27764 // determine how many bytes we have to check at the end of this buffer
27765 var i = (buffer.length >= 3) ? 3 : buffer.length;
ab78acc6 27766
8b095871
IC
27767 // Figure out if one of the last i bytes of our buffer announces an
27768 // incomplete char.
27769 for (; i > 0; i--) {
27770 var c = buffer[buffer.length - i];
ebd8d4e8 27771
8b095871 27772 // See http://en.wikipedia.org/wiki/UTF-8#Description
ebd8d4e8 27773
8b095871
IC
27774 // 110XXXXX
27775 if (i == 1 && c >> 5 == 0x06) {
27776 this.charLength = 2;
27777 break;
ebd8d4e8 27778 }
ab78acc6 27779
8b095871
IC
27780 // 1110XXXX
27781 if (i <= 2 && c >> 4 == 0x0E) {
27782 this.charLength = 3;
27783 break;
27784 }
27785
27786 // 11110XXX
27787 if (i <= 3 && c >> 3 == 0x1E) {
27788 this.charLength = 4;
27789 break;
ebd8d4e8
IC
27790 }
27791 }
8b095871
IC
27792 this.charReceived = i;
27793};
ab78acc6 27794
8b095871
IC
27795StringDecoder.prototype.end = function(buffer) {
27796 var res = '';
27797 if (buffer && buffer.length)
27798 res = this.write(buffer);
ab78acc6 27799
8b095871
IC
27800 if (this.charReceived) {
27801 var cr = this.charReceived;
27802 var buf = this.charBuffer;
27803 var enc = this.encoding;
27804 res += buf.slice(0, cr).toString(enc);
27805 }
ab78acc6 27806
8b095871 27807 return res;
ab78acc6
IC
27808};
27809
8b095871
IC
27810function passThroughWrite(buffer) {
27811 return buffer.toString(this.encoding);
27812}
ab78acc6 27813
8b095871
IC
27814function utf16DetectIncompleteChar(buffer) {
27815 this.charReceived = buffer.length % 2;
27816 this.charLength = this.charReceived ? 2 : 0;
27817}
ab78acc6 27818
8b095871
IC
27819function base64DetectIncompleteChar(buffer) {
27820 this.charReceived = buffer.length % 3;
27821 this.charLength = this.charReceived ? 3 : 0;
27822}
ab78acc6 27823
8b095871
IC
27824},{"buffer":5}],27:[function(require,module,exports){
27825(function (global){
ab78acc6 27826
8b095871
IC
27827/**
27828 * Module exports.
27829 */
ebd8d4e8 27830
8b095871 27831module.exports = deprecate;
ebd8d4e8 27832
8b095871
IC
27833/**
27834 * Mark that a method should not be used.
27835 * Returns a modified function which warns once by default.
27836 *
27837 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
27838 *
27839 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
27840 * will throw an Error when invoked.
27841 *
27842 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
27843 * will invoke `console.trace()` instead of `console.error()`.
27844 *
27845 * @param {Function} fn - the function to deprecate
27846 * @param {String} msg - the string to print to the console when `fn` is invoked
27847 * @returns {Function} a new "deprecated" version of `fn`
27848 * @api public
27849 */
ebd8d4e8 27850
8b095871
IC
27851function deprecate (fn, msg) {
27852 if (config('noDeprecation')) {
27853 return fn;
27854 }
ebd8d4e8 27855
8b095871
IC
27856 var warned = false;
27857 function deprecated() {
27858 if (!warned) {
27859 if (config('throwDeprecation')) {
27860 throw new Error(msg);
27861 } else if (config('traceDeprecation')) {
27862 console.trace(msg);
27863 } else {
27864 console.warn(msg);
ab78acc6 27865 }
8b095871 27866 warned = true;
ab78acc6 27867 }
8b095871 27868 return fn.apply(this, arguments);
ebd8d4e8
IC
27869 }
27870
8b095871 27871 return deprecated;
ebd8d4e8
IC
27872}
27873
8b095871
IC
27874/**
27875 * Checks `localStorage` for boolean values for the given `name`.
27876 *
27877 * @param {String} name
27878 * @returns {Boolean}
27879 * @api private
27880 */
ebd8d4e8 27881
8b095871
IC
27882function config (name) {
27883 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
27884 try {
27885 if (!global.localStorage) return false;
27886 } catch (_) {
27887 return false;
ab78acc6 27888 }
8b095871
IC
27889 var val = global.localStorage[name];
27890 if (null == val) return false;
27891 return String(val).toLowerCase() === 'true';
ebd8d4e8 27892}
ebd8d4e8 27893
8b095871
IC
27894}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
27895},{}],28:[function(require,module,exports){
27896arguments[4][9][0].apply(exports,arguments)
27897},{"dup":9}],29:[function(require,module,exports){
27898module.exports = function isBuffer(arg) {
27899 return arg && typeof arg === 'object'
27900 && typeof arg.copy === 'function'
27901 && typeof arg.fill === 'function'
27902 && typeof arg.readUInt8 === 'function';
ebd8d4e8 27903}
8b095871
IC
27904},{}],30:[function(require,module,exports){
27905(function (process,global){
ab78acc6
IC
27906// Copyright Joyent, Inc. and other Node contributors.
27907//
27908// Permission is hereby granted, free of charge, to any person obtaining a
27909// copy of this software and associated documentation files (the
27910// "Software"), to deal in the Software without restriction, including
27911// without limitation the rights to use, copy, modify, merge, publish,
27912// distribute, sublicense, and/or sell copies of the Software, and to permit
27913// persons to whom the Software is furnished to do so, subject to the
27914// following conditions:
27915//
27916// The above copyright notice and this permission notice shall be included
27917// in all copies or substantial portions of the Software.
27918//
27919// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
27920// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27921// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
27922// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
27923// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
27924// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
27925// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 27926
8b095871
IC
27927var formatRegExp = /%[sdj%]/g;
27928exports.format = function(f) {
27929 if (!isString(f)) {
27930 var objects = [];
27931 for (var i = 0; i < arguments.length; i++) {
27932 objects.push(inspect(arguments[i]));
27933 }
27934 return objects.join(' ');
27935 }
ebd8d4e8 27936
8b095871
IC
27937 var i = 1;
27938 var args = arguments;
27939 var len = args.length;
27940 var str = String(f).replace(formatRegExp, function(x) {
27941 if (x === '%%') return '%';
27942 if (i >= len) return x;
27943 switch (x) {
27944 case '%s': return String(args[i++]);
27945 case '%d': return Number(args[i++]);
27946 case '%j':
27947 try {
27948 return JSON.stringify(args[i++]);
27949 } catch (_) {
27950 return '[Circular]';
27951 }
27952 default:
27953 return x;
27954 }
27955 });
27956 for (var x = args[i]; i < len; x = args[++i]) {
27957 if (isNull(x) || !isObject(x)) {
27958 str += ' ' + x;
27959 } else {
27960 str += ' ' + inspect(x);
27961 }
27962 }
27963 return str;
27964};
ebd8d4e8 27965
ebd8d4e8 27966
8b095871
IC
27967// Mark that a method should not be used.
27968// Returns a modified function which warns once by default.
27969// If --no-deprecation is set, then it is a no-op.
27970exports.deprecate = function(fn, msg) {
27971 // Allow for deprecating things in the process of starting up.
27972 if (isUndefined(global.process)) {
27973 return function() {
27974 return exports.deprecate(fn, msg).apply(this, arguments);
27975 };
27976 }
27977
27978 if (process.noDeprecation === true) {
27979 return fn;
27980 }
27981
27982 var warned = false;
27983 function deprecated() {
27984 if (!warned) {
27985 if (process.throwDeprecation) {
27986 throw new Error(msg);
27987 } else if (process.traceDeprecation) {
27988 console.trace(msg);
27989 } else {
27990 console.error(msg);
27991 }
27992 warned = true;
27993 }
27994 return fn.apply(this, arguments);
27995 }
27996
27997 return deprecated;
27998};
ebd8d4e8 27999
ab78acc6 28000
8b095871
IC
28001var debugs = {};
28002var debugEnviron;
28003exports.debuglog = function(set) {
28004 if (isUndefined(debugEnviron))
28005 debugEnviron = process.env.NODE_DEBUG || '';
28006 set = set.toUpperCase();
28007 if (!debugs[set]) {
28008 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
28009 var pid = process.pid;
28010 debugs[set] = function() {
28011 var msg = exports.format.apply(exports, arguments);
28012 console.error('%s %d: %s', set, pid, msg);
28013 };
28014 } else {
28015 debugs[set] = function() {};
28016 }
28017 }
28018 return debugs[set];
28019};
ab78acc6
IC
28020
28021
8b095871
IC
28022/**
28023 * Echos the value of a value. Trys to print the value out
28024 * in the best way possible given the different types.
28025 *
28026 * @param {Object} obj The object to print out.
28027 * @param {Object} opts Optional options object that alters the output.
28028 */
28029/* legacy: obj, showHidden, depth, colors*/
28030function inspect(obj, opts) {
28031 // default options
28032 var ctx = {
28033 seen: [],
28034 stylize: stylizeNoColor
ab78acc6 28035 };
8b095871
IC
28036 // legacy...
28037 if (arguments.length >= 3) ctx.depth = arguments[2];
28038 if (arguments.length >= 4) ctx.colors = arguments[3];
28039 if (isBoolean(opts)) {
28040 // legacy...
28041 ctx.showHidden = opts;
28042 } else if (opts) {
28043 // got an "options" object
28044 exports._extend(ctx, opts);
28045 }
28046 // set default options
28047 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
28048 if (isUndefined(ctx.depth)) ctx.depth = 2;
28049 if (isUndefined(ctx.colors)) ctx.colors = false;
28050 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
28051 if (ctx.colors) ctx.stylize = stylizeWithColor;
28052 return formatValue(ctx, obj, ctx.depth);
ebd8d4e8 28053}
8b095871 28054exports.inspect = inspect;
ebd8d4e8 28055
ab78acc6 28056
8b095871
IC
28057// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
28058inspect.colors = {
28059 'bold' : [1, 22],
28060 'italic' : [3, 23],
28061 'underline' : [4, 24],
28062 'inverse' : [7, 27],
28063 'white' : [37, 39],
28064 'grey' : [90, 39],
28065 'black' : [30, 39],
28066 'blue' : [34, 39],
28067 'cyan' : [36, 39],
28068 'green' : [32, 39],
28069 'magenta' : [35, 39],
28070 'red' : [31, 39],
28071 'yellow' : [33, 39]
28072};
ab78acc6 28073
8b095871
IC
28074// Don't use 'blue' not visible on cmd.exe
28075inspect.styles = {
28076 'special': 'cyan',
28077 'number': 'yellow',
28078 'boolean': 'yellow',
28079 'undefined': 'grey',
28080 'null': 'bold',
28081 'string': 'green',
28082 'date': 'magenta',
28083 // "name": intentionally not styling
28084 'regexp': 'red'
28085};
ab78acc6 28086
ab78acc6 28087
8b095871
IC
28088function stylizeWithColor(str, styleType) {
28089 var style = inspect.styles[styleType];
ab78acc6 28090
8b095871
IC
28091 if (style) {
28092 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
28093 '\u001b[' + inspect.colors[style][1] + 'm';
28094 } else {
28095 return str;
ab78acc6 28096 }
ebd8d4e8 28097}
ebd8d4e8 28098
ab78acc6 28099
8b095871
IC
28100function stylizeNoColor(str, styleType) {
28101 return str;
28102}
ab78acc6 28103
ab78acc6 28104
8b095871
IC
28105function arrayToHash(array) {
28106 var hash = {};
ab78acc6 28107
8b095871
IC
28108 array.forEach(function(val, idx) {
28109 hash[val] = true;
ab78acc6 28110 });
ebd8d4e8 28111
8b095871
IC
28112 return hash;
28113}
ab78acc6 28114
ab78acc6 28115
8b095871
IC
28116function formatValue(ctx, value, recurseTimes) {
28117 // Provide a hook for user-specified inspect functions.
28118 // Check that value is an object with an inspect function on it
28119 if (ctx.customInspect &&
28120 value &&
28121 isFunction(value.inspect) &&
28122 // Filter out the util module, it's inspect function is special
28123 value.inspect !== exports.inspect &&
28124 // Also filter out any prototype objects using the circular check.
28125 !(value.constructor && value.constructor.prototype === value)) {
28126 var ret = value.inspect(recurseTimes, ctx);
28127 if (!isString(ret)) {
28128 ret = formatValue(ctx, ret, recurseTimes);
28129 }
28130 return ret;
ab78acc6 28131 }
ebd8d4e8 28132
8b095871
IC
28133 // Primitive types cannot have properties
28134 var primitive = formatPrimitive(ctx, value);
28135 if (primitive) {
28136 return primitive;
ab78acc6 28137 }
ebd8d4e8 28138
8b095871
IC
28139 // Look up the keys of the object.
28140 var keys = Object.keys(value);
28141 var visibleKeys = arrayToHash(keys);
ebd8d4e8 28142
8b095871
IC
28143 if (ctx.showHidden) {
28144 keys = Object.getOwnPropertyNames(value);
28145 }
ebd8d4e8 28146
8b095871
IC
28147 // IE doesn't make error fields non-enumerable
28148 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
28149 if (isError(value)
28150 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
28151 return formatError(value);
28152 }
ebd8d4e8 28153
8b095871
IC
28154 // Some type of object without properties can be shortcutted.
28155 if (keys.length === 0) {
28156 if (isFunction(value)) {
28157 var name = value.name ? ': ' + value.name : '';
28158 return ctx.stylize('[Function' + name + ']', 'special');
28159 }
28160 if (isRegExp(value)) {
28161 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
28162 }
28163 if (isDate(value)) {
28164 return ctx.stylize(Date.prototype.toString.call(value), 'date');
28165 }
28166 if (isError(value)) {
28167 return formatError(value);
28168 }
28169 }
ab78acc6 28170
8b095871 28171 var base = '', array = false, braces = ['{', '}'];
ab78acc6 28172
8b095871
IC
28173 // Make Array say that they are Array
28174 if (isArray(value)) {
28175 array = true;
28176 braces = ['[', ']'];
28177 }
ebd8d4e8 28178
8b095871
IC
28179 // Make functions say that they are functions
28180 if (isFunction(value)) {
28181 var n = value.name ? ': ' + value.name : '';
28182 base = ' [Function' + n + ']';
28183 }
ebd8d4e8 28184
8b095871
IC
28185 // Make RegExps say that they are RegExps
28186 if (isRegExp(value)) {
28187 base = ' ' + RegExp.prototype.toString.call(value);
28188 }
ebd8d4e8 28189
8b095871
IC
28190 // Make dates with properties first say the date
28191 if (isDate(value)) {
28192 base = ' ' + Date.prototype.toUTCString.call(value);
28193 }
ebd8d4e8 28194
8b095871
IC
28195 // Make error with message first say the error
28196 if (isError(value)) {
28197 base = ' ' + formatError(value);
28198 }
ebd8d4e8 28199
8b095871
IC
28200 if (keys.length === 0 && (!array || value.length == 0)) {
28201 return braces[0] + base + braces[1];
28202 }
ebd8d4e8 28203
8b095871
IC
28204 if (recurseTimes < 0) {
28205 if (isRegExp(value)) {
28206 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
28207 } else {
28208 return ctx.stylize('[Object]', 'special');
28209 }
28210 }
ebd8d4e8 28211
8b095871 28212 ctx.seen.push(value);
ebd8d4e8 28213
8b095871
IC
28214 var output;
28215 if (array) {
28216 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
28217 } else {
28218 output = keys.map(function(key) {
28219 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
28220 });
28221 }
ebd8d4e8 28222
8b095871 28223 ctx.seen.pop();
ebd8d4e8 28224
8b095871 28225 return reduceToSingleString(output, base, braces);
ebd8d4e8
IC
28226}
28227
ebd8d4e8 28228
8b095871
IC
28229function formatPrimitive(ctx, value) {
28230 if (isUndefined(value))
28231 return ctx.stylize('undefined', 'undefined');
28232 if (isString(value)) {
28233 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
28234 .replace(/'/g, "\\'")
28235 .replace(/\\"/g, '"') + '\'';
28236 return ctx.stylize(simple, 'string');
28237 }
28238 if (isNumber(value))
28239 return ctx.stylize('' + value, 'number');
28240 if (isBoolean(value))
28241 return ctx.stylize('' + value, 'boolean');
28242 // For some reason typeof null is "object", so special case here.
28243 if (isNull(value))
28244 return ctx.stylize('null', 'null');
28245}
ebd8d4e8 28246
ebd8d4e8 28247
8b095871
IC
28248function formatError(value) {
28249 return '[' + Error.prototype.toString.call(value) + ']';
28250}
ebd8d4e8 28251
ebd8d4e8 28252
8b095871
IC
28253function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
28254 var output = [];
28255 for (var i = 0, l = value.length; i < l; ++i) {
28256 if (hasOwnProperty(value, String(i))) {
28257 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
28258 String(i), true));
28259 } else {
28260 output.push('');
28261 }
28262 }
28263 keys.forEach(function(key) {
28264 if (!key.match(/^\d+$/)) {
28265 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
28266 key, true));
28267 }
28268 });
28269 return output;
28270}
ebd8d4e8 28271
ebd8d4e8 28272
8b095871
IC
28273function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
28274 var name, str, desc;
28275 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
28276 if (desc.get) {
28277 if (desc.set) {
28278 str = ctx.stylize('[Getter/Setter]', 'special');
28279 } else {
28280 str = ctx.stylize('[Getter]', 'special');
28281 }
28282 } else {
28283 if (desc.set) {
28284 str = ctx.stylize('[Setter]', 'special');
28285 }
28286 }
28287 if (!hasOwnProperty(visibleKeys, key)) {
28288 name = '[' + key + ']';
28289 }
28290 if (!str) {
28291 if (ctx.seen.indexOf(desc.value) < 0) {
28292 if (isNull(recurseTimes)) {
28293 str = formatValue(ctx, desc.value, null);
28294 } else {
28295 str = formatValue(ctx, desc.value, recurseTimes - 1);
28296 }
28297 if (str.indexOf('\n') > -1) {
28298 if (array) {
28299 str = str.split('\n').map(function(line) {
28300 return ' ' + line;
28301 }).join('\n').substr(2);
28302 } else {
28303 str = '\n' + str.split('\n').map(function(line) {
28304 return ' ' + line;
28305 }).join('\n');
28306 }
28307 }
28308 } else {
28309 str = ctx.stylize('[Circular]', 'special');
28310 }
28311 }
28312 if (isUndefined(name)) {
28313 if (array && key.match(/^\d+$/)) {
28314 return str;
28315 }
28316 name = JSON.stringify('' + key);
28317 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
28318 name = name.substr(1, name.length - 2);
28319 name = ctx.stylize(name, 'name');
28320 } else {
28321 name = name.replace(/'/g, "\\'")
28322 .replace(/\\"/g, '"')
28323 .replace(/(^"|"$)/g, "'");
28324 name = ctx.stylize(name, 'string');
28325 }
28326 }
ebd8d4e8 28327
8b095871
IC
28328 return name + ': ' + str;
28329}
ebd8d4e8 28330
ebd8d4e8 28331
8b095871
IC
28332function reduceToSingleString(output, base, braces) {
28333 var numLinesEst = 0;
28334 var length = output.reduce(function(prev, cur) {
28335 numLinesEst++;
28336 if (cur.indexOf('\n') >= 0) numLinesEst++;
28337 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
28338 }, 0);
ebd8d4e8 28339
8b095871
IC
28340 if (length > 60) {
28341 return braces[0] +
28342 (base === '' ? '' : base + '\n ') +
28343 ' ' +
28344 output.join(',\n ') +
28345 ' ' +
28346 braces[1];
28347 }
ebd8d4e8 28348
8b095871
IC
28349 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
28350}
ebd8d4e8 28351
ebd8d4e8 28352
8b095871
IC
28353// NOTE: These type checking functions intentionally don't use `instanceof`
28354// because it is fragile and can be easily faked with `Object.create()`.
28355function isArray(ar) {
28356 return Array.isArray(ar);
28357}
28358exports.isArray = isArray;
ebd8d4e8 28359
8b095871
IC
28360function isBoolean(arg) {
28361 return typeof arg === 'boolean';
28362}
28363exports.isBoolean = isBoolean;
ebd8d4e8 28364
8b095871
IC
28365function isNull(arg) {
28366 return arg === null;
28367}
28368exports.isNull = isNull;
ebd8d4e8 28369
8b095871
IC
28370function isNullOrUndefined(arg) {
28371 return arg == null;
ebd8d4e8 28372}
8b095871 28373exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 28374
8b095871
IC
28375function isNumber(arg) {
28376 return typeof arg === 'number';
28377}
28378exports.isNumber = isNumber;
ebd8d4e8 28379
8b095871
IC
28380function isString(arg) {
28381 return typeof arg === 'string';
28382}
28383exports.isString = isString;
ebd8d4e8 28384
8b095871
IC
28385function isSymbol(arg) {
28386 return typeof arg === 'symbol';
28387}
28388exports.isSymbol = isSymbol;
ebd8d4e8 28389
8b095871
IC
28390function isUndefined(arg) {
28391 return arg === void 0;
28392}
28393exports.isUndefined = isUndefined;
ebd8d4e8 28394
8b095871
IC
28395function isRegExp(re) {
28396 return isObject(re) && objectToString(re) === '[object RegExp]';
ebd8d4e8 28397}
8b095871 28398exports.isRegExp = isRegExp;
ebd8d4e8 28399
8b095871
IC
28400function isObject(arg) {
28401 return typeof arg === 'object' && arg !== null;
28402}
28403exports.isObject = isObject;
ebd8d4e8 28404
8b095871
IC
28405function isDate(d) {
28406 return isObject(d) && objectToString(d) === '[object Date]';
28407}
28408exports.isDate = isDate;
ebd8d4e8 28409
8b095871
IC
28410function isError(e) {
28411 return isObject(e) &&
28412 (objectToString(e) === '[object Error]' || e instanceof Error);
ebd8d4e8 28413}
8b095871 28414exports.isError = isError;
ebd8d4e8 28415
8b095871
IC
28416function isFunction(arg) {
28417 return typeof arg === 'function';
ebd8d4e8 28418}
8b095871 28419exports.isFunction = isFunction;
ebd8d4e8 28420
8b095871
IC
28421function isPrimitive(arg) {
28422 return arg === null ||
28423 typeof arg === 'boolean' ||
28424 typeof arg === 'number' ||
28425 typeof arg === 'string' ||
28426 typeof arg === 'symbol' || // ES6 symbol
28427 typeof arg === 'undefined';
28428}
28429exports.isPrimitive = isPrimitive;
ebd8d4e8 28430
8b095871 28431exports.isBuffer = require('./support/isBuffer');
ebd8d4e8 28432
8b095871
IC
28433function objectToString(o) {
28434 return Object.prototype.toString.call(o);
28435}
ab78acc6 28436
ab78acc6 28437
8b095871
IC
28438function pad(n) {
28439 return n < 10 ? '0' + n.toString(10) : n.toString(10);
28440}
ebd8d4e8 28441
ab78acc6 28442
8b095871
IC
28443var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
28444 'Oct', 'Nov', 'Dec'];
ab78acc6 28445
8b095871
IC
28446// 26 Feb 16:19:34
28447function timestamp() {
28448 var d = new Date();
28449 var time = [pad(d.getHours()),
28450 pad(d.getMinutes()),
28451 pad(d.getSeconds())].join(':');
28452 return [d.getDate(), months[d.getMonth()], time].join(' ');
28453}
28454
28455
28456// log is just a thin wrapper to console.log that prepends a timestamp
28457exports.log = function() {
28458 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
ab78acc6 28459};
ebd8d4e8 28460
ebd8d4e8 28461
8b095871
IC
28462/**
28463 * Inherit the prototype methods from one constructor into another.
28464 *
28465 * The Function.prototype.inherits from lang.js rewritten as a standalone
28466 * function (not on Function.prototype). NOTE: If this file is to be loaded
28467 * during bootstrapping this function needs to be rewritten using some native
28468 * functions as prototype setup using normal JavaScript does not work as
28469 * expected during bootstrapping (see mirror.js in r114903).
28470 *
28471 * @param {function} ctor Constructor function which needs to inherit the
28472 * prototype.
28473 * @param {function} superCtor Constructor function to inherit prototype from.
28474 */
28475exports.inherits = require('inherits');
ebd8d4e8 28476
8b095871
IC
28477exports._extend = function(origin, add) {
28478 // Don't do anything if add isn't an object
28479 if (!add || !isObject(add)) return origin;
28480
28481 var keys = Object.keys(add);
28482 var i = keys.length;
28483 while (i--) {
28484 origin[keys[i]] = add[keys[i]];
ebd8d4e8 28485 }
8b095871 28486 return origin;
ab78acc6 28487};
ebd8d4e8 28488
8b095871
IC
28489function hasOwnProperty(obj, prop) {
28490 return Object.prototype.hasOwnProperty.call(obj, prop);
ebd8d4e8
IC
28491}
28492
8b095871
IC
28493}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
28494},{"./support/isBuffer":29,"_process":13,"inherits":28}],31:[function(require,module,exports){
28495(function (Buffer){
28496const createKeccakHash = require('keccak')
28497const secp256k1 = require('secp256k1')
28498const assert = require('assert')
28499const rlp = require('rlp')
28500const BN = require('bn.js')
28501const createHash = require('create-hash')
28502Object.assign(exports, require('ethjs-util'))
ab78acc6 28503
8b095871
IC
28504/**
28505 * the max integer that this VM can handle (a ```BN```)
28506 * @var {BN} MAX_INTEGER
28507 */
28508exports.MAX_INTEGER = new BN('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)
ab78acc6 28509
8b095871
IC
28510/**
28511 * 2^256 (a ```BN```)
28512 * @var {BN} TWO_POW256
28513 */
28514exports.TWO_POW256 = new BN('10000000000000000000000000000000000000000000000000000000000000000', 16)
ab78acc6 28515
8b095871
IC
28516/**
28517 * SHA3-256 hash of null (a ```String```)
28518 * @var {String} SHA3_NULL_S
28519 */
28520exports.SHA3_NULL_S = 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'
ebd8d4e8 28521
8b095871
IC
28522/**
28523 * SHA3-256 hash of null (a ```Buffer```)
28524 * @var {Buffer} SHA3_NULL
28525 */
28526exports.SHA3_NULL = Buffer.from(exports.SHA3_NULL_S, 'hex')
ebd8d4e8 28527
8b095871
IC
28528/**
28529 * SHA3-256 of an RLP of an empty array (a ```String```)
28530 * @var {String} SHA3_RLP_ARRAY_S
28531 */
28532exports.SHA3_RLP_ARRAY_S = '1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347'
ebd8d4e8 28533
8b095871
IC
28534/**
28535 * SHA3-256 of an RLP of an empty array (a ```Buffer```)
28536 * @var {Buffer} SHA3_RLP_ARRAY
28537 */
28538exports.SHA3_RLP_ARRAY = Buffer.from(exports.SHA3_RLP_ARRAY_S, 'hex')
ebd8d4e8 28539
8b095871
IC
28540/**
28541 * SHA3-256 hash of the RLP of null (a ```String```)
28542 * @var {String} SHA3_RLP_S
28543 */
28544exports.SHA3_RLP_S = '56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421'
ebd8d4e8 28545
8b095871
IC
28546/**
28547 * SHA3-256 hash of the RLP of null (a ```Buffer```)
28548 * @var {Buffer} SHA3_RLP
28549 */
28550exports.SHA3_RLP = Buffer.from(exports.SHA3_RLP_S, 'hex')
ebd8d4e8 28551
8b095871
IC
28552/**
28553 * [`BN`](https://github.com/indutny/bn.js)
28554 * @var {Function}
28555 */
28556exports.BN = BN
ebd8d4e8 28557
8b095871
IC
28558/**
28559 * [`rlp`](https://github.com/ethereumjs/rlp)
28560 * @var {Function}
28561 */
28562exports.rlp = rlp
ebd8d4e8 28563
8b095871
IC
28564/**
28565 * [`secp256k1`](https://github.com/cryptocoinjs/secp256k1-node/)
28566 * @var {Object}
28567 */
28568exports.secp256k1 = secp256k1
ab78acc6 28569
8b095871
IC
28570/**
28571 * Returns a buffer filled with 0s
28572 * @method zeros
28573 * @param {Number} bytes the number of bytes the buffer should be
28574 * @return {Buffer}
28575 */
28576exports.zeros = function (bytes) {
28577 return Buffer.allocUnsafe(bytes).fill(0)
28578}
28579
28580/**
28581 * Left Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
28582 * Or it truncates the beginning if it exceeds.
28583 * @method lsetLength
28584 * @param {Buffer|Array} msg the value to pad
28585 * @param {Number} length the number of bytes the output should be
28586 * @param {Boolean} [right=false] whether to start padding form the left or right
28587 * @return {Buffer|Array}
28588 */
28589exports.setLengthLeft = exports.setLength = function (msg, length, right) {
28590 var buf = exports.zeros(length)
28591 msg = exports.toBuffer(msg)
28592 if (right) {
28593 if (msg.length < length) {
28594 msg.copy(buf)
28595 return buf
28596 }
28597 return msg.slice(0, length)
28598 } else {
28599 if (msg.length < length) {
28600 msg.copy(buf, length - msg.length)
28601 return buf
ebd8d4e8 28602 }
8b095871 28603 return msg.slice(-length)
ebd8d4e8
IC
28604 }
28605}
28606
8b095871
IC
28607/**
28608 * Right Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
28609 * Or it truncates the beginning if it exceeds.
28610 * @param {Buffer|Array} msg the value to pad
28611 * @param {Number} length the number of bytes the output should be
28612 * @return {Buffer|Array}
28613 */
28614exports.setLengthRight = function (msg, length) {
28615 return exports.setLength(msg, length, true)
ab78acc6
IC
28616}
28617
8b095871
IC
28618/**
28619 * Trims leading zeros from a `Buffer` or an `Array`
28620 * @param {Buffer|Array|String} a
28621 * @return {Buffer|Array|String}
28622 */
28623exports.unpad = exports.stripZeros = function (a) {
28624 a = exports.stripHexPrefix(a)
28625 var first = a[0]
28626 while (a.length > 0 && first.toString() === '0') {
28627 a = a.slice(1)
28628 first = a[0]
28629 }
28630 return a
28631}
28632/**
28633 * Attempts to turn a value into a `Buffer`. As input it supports `Buffer`, `String`, `Number`, null/undefined, `BN` and other objects with a `toArray()` method.
28634 * @param {*} v the value
28635 */
28636exports.toBuffer = function (v) {
28637 if (!Buffer.isBuffer(v)) {
28638 if (Array.isArray(v)) {
28639 v = Buffer.from(v)
28640 } else if (typeof v === 'string') {
28641 if (exports.isHexPrefixed(v)) {
28642 v = Buffer.from(exports.padToEven(exports.stripHexPrefix(v)), 'hex')
28643 } else {
28644 v = Buffer.from(v)
28645 }
28646 } else if (typeof v === 'number') {
28647 v = exports.intToBuffer(v)
28648 } else if (v === null || v === undefined) {
28649 v = Buffer.allocUnsafe(0)
28650 } else if (v.toArray) {
28651 // converts a BN to a Buffer
28652 v = Buffer.from(v.toArray())
28653 } else {
28654 throw new Error('invalid type')
28655 }
ebd8d4e8 28656 }
8b095871 28657 return v
ebd8d4e8
IC
28658}
28659
8b095871
IC
28660/**
28661 * Converts a `Buffer` to a `Number`
28662 * @param {Buffer} buf
28663 * @return {Number}
28664 * @throws If the input number exceeds 53 bits.
28665 */
28666exports.bufferToInt = function (buf) {
28667 return new BN(exports.toBuffer(buf)).toNumber()
28668}
ebd8d4e8 28669
8b095871
IC
28670/**
28671 * Converts a `Buffer` into a hex `String`
28672 * @param {Buffer} buf
28673 * @return {String}
28674 */
28675exports.bufferToHex = function (buf) {
28676 buf = exports.toBuffer(buf)
28677 return '0x' + buf.toString('hex')
28678}
ab78acc6 28679
8b095871
IC
28680/**
28681 * Interprets a `Buffer` as a signed integer and returns a `BN`. Assumes 256-bit numbers.
28682 * @param {Buffer} num
28683 * @return {BN}
28684 */
28685exports.fromSigned = function (num) {
28686 return new BN(num).fromTwos(256)
28687}
ab78acc6 28688
8b095871
IC
28689/**
28690 * Converts a `BN` to an unsigned integer and returns it as a `Buffer`. Assumes 256-bit numbers.
28691 * @param {BN} num
28692 * @return {Buffer}
28693 */
28694exports.toUnsigned = function (num) {
28695 return Buffer.from(num.toTwos(256).toArray())
28696}
ab78acc6 28697
8b095871
IC
28698/**
28699 * Creates SHA-3 hash of the input
28700 * @param {Buffer|Array|String|Number} a the input data
28701 * @param {Number} [bits=256] the SHA width
28702 * @return {Buffer}
28703 */
28704exports.sha3 = function (a, bits) {
28705 a = exports.toBuffer(a)
28706 if (!bits) bits = 256
ab78acc6 28707
8b095871
IC
28708 return createKeccakHash('keccak' + bits).update(a).digest()
28709}
ab78acc6 28710
8b095871
IC
28711/**
28712 * Creates SHA256 hash of the input
28713 * @param {Buffer|Array|String|Number} a the input data
28714 * @return {Buffer}
28715 */
28716exports.sha256 = function (a) {
28717 a = exports.toBuffer(a)
28718 return createHash('sha256').update(a).digest()
28719}
ab78acc6 28720
8b095871
IC
28721/**
28722 * Creates RIPEMD160 hash of the input
28723 * @param {Buffer|Array|String|Number} a the input data
28724 * @param {Boolean} padded whether it should be padded to 256 bits or not
28725 * @return {Buffer}
28726 */
28727exports.ripemd160 = function (a, padded) {
28728 a = exports.toBuffer(a)
28729 var hash = createHash('rmd160').update(a).digest()
28730 if (padded === true) {
28731 return exports.setLength(hash, 32)
28732 } else {
28733 return hash
ebd8d4e8 28734 }
8b095871 28735}
ebd8d4e8 28736
8b095871
IC
28737/**
28738 * Creates SHA-3 hash of the RLP encoded version of the input
28739 * @param {Buffer|Array|String|Number} a the input data
28740 * @return {Buffer}
28741 */
28742exports.rlphash = function (a) {
28743 return exports.sha3(rlp.encode(a))
ebd8d4e8
IC
28744}
28745
8b095871
IC
28746/**
28747 * Checks if the private key satisfies the rules of the curve secp256k1.
28748 * @param {Buffer} privateKey
28749 * @return {Boolean}
28750 */
28751exports.isValidPrivate = function (privateKey) {
28752 return secp256k1.privateKeyVerify(privateKey)
28753}
ebd8d4e8 28754
8b095871
IC
28755/**
28756 * Checks if the public key satisfies the rules of the curve secp256k1
28757 * and the requirements of Ethereum.
28758 * @param {Buffer} publicKey The two points of an uncompressed key, unless sanitize is enabled
28759 * @param {Boolean} [sanitize=false] Accept public keys in other formats
28760 * @return {Boolean}
28761 */
28762exports.isValidPublic = function (publicKey, sanitize) {
28763 if (publicKey.length === 64) {
28764 // Convert to SEC1 for secp256k1
28765 return secp256k1.publicKeyVerify(Buffer.concat([ Buffer.from([4]), publicKey ]))
28766 }
ebd8d4e8 28767
8b095871
IC
28768 if (!sanitize) {
28769 return false
28770 }
ebd8d4e8 28771
8b095871
IC
28772 return secp256k1.publicKeyVerify(publicKey)
28773}
ebd8d4e8 28774
8b095871
IC
28775/**
28776 * Returns the ethereum address of a given public key.
28777 * Accepts "Ethereum public keys" and SEC1 encoded keys.
28778 * @param {Buffer} pubKey The two points of an uncompressed key, unless sanitize is enabled
28779 * @param {Boolean} [sanitize=false] Accept public keys in other formats
28780 * @return {Buffer}
28781 */
28782exports.pubToAddress = exports.publicToAddress = function (pubKey, sanitize) {
28783 pubKey = exports.toBuffer(pubKey)
28784 if (sanitize && (pubKey.length !== 64)) {
28785 pubKey = secp256k1.publicKeyConvert(pubKey, false).slice(1)
ab78acc6 28786 }
8b095871
IC
28787 assert(pubKey.length === 64)
28788 // Only take the lower 160bits of the hash
28789 return exports.sha3(pubKey).slice(-20)
28790}
ebd8d4e8 28791
8b095871
IC
28792/**
28793 * Returns the ethereum public key of a given private key
28794 * @param {Buffer} privateKey A private key must be 256 bits wide
28795 * @return {Buffer}
28796 */
28797var privateToPublic = exports.privateToPublic = function (privateKey) {
28798 privateKey = exports.toBuffer(privateKey)
28799 // skip the type flag and use the X, Y points
28800 return secp256k1.publicKeyCreate(privateKey, false).slice(1)
28801}
ab78acc6 28802
8b095871
IC
28803/**
28804 * Converts a public key to the Ethereum format.
28805 * @param {Buffer} publicKey
28806 * @return {Buffer}
28807 */
28808exports.importPublic = function (publicKey) {
28809 publicKey = exports.toBuffer(publicKey)
28810 if (publicKey.length !== 64) {
28811 publicKey = secp256k1.publicKeyConvert(publicKey, false).slice(1)
ebd8d4e8 28812 }
8b095871
IC
28813 return publicKey
28814}
ab78acc6 28815
8b095871
IC
28816/**
28817 * ECDSA sign
28818 * @param {Buffer} msgHash
28819 * @param {Buffer} privateKey
28820 * @return {Object}
28821 */
28822exports.ecsign = function (msgHash, privateKey) {
28823 var sig = secp256k1.sign(msgHash, privateKey)
ab78acc6 28824
8b095871
IC
28825 var ret = {}
28826 ret.r = sig.signature.slice(0, 32)
28827 ret.s = sig.signature.slice(32, 64)
28828 ret.v = sig.recovery + 27
28829 return ret
ebd8d4e8
IC
28830}
28831
8b095871
IC
28832/**
28833 * Returns the keccak-256 hash of `message`, prefixed with the header used by the `eth_sign` RPC call.
28834 * The output of this function can be fed into `ecsign` to produce the same signature as the `eth_sign`
28835 * call for a given `message`, or fed to `ecrecover` along with a signature to recover the public key
28836 * used to produce the signature.
28837 * @param message
28838 * @returns {Buffer} hash
28839 */
28840exports.hashPersonalMessage = function (message) {
28841 var prefix = exports.toBuffer('\u0019Ethereum Signed Message:\n' + message.length.toString())
28842 return exports.sha3(Buffer.concat([prefix, message]))
ebd8d4e8
IC
28843}
28844
8b095871
IC
28845/**
28846 * ECDSA public key recovery from signature
28847 * @param {Buffer} msgHash
28848 * @param {Number} v
28849 * @param {Buffer} r
28850 * @param {Buffer} s
28851 * @return {Buffer} publicKey
28852 */
28853exports.ecrecover = function (msgHash, v, r, s) {
28854 var signature = Buffer.concat([exports.setLength(r, 32), exports.setLength(s, 32)], 64)
28855 var recovery = v - 27
28856 if (recovery !== 0 && recovery !== 1) {
28857 throw new Error('Invalid signature v value')
ab78acc6 28858 }
8b095871
IC
28859 var senderPubKey = secp256k1.recover(msgHash, signature, recovery)
28860 return secp256k1.publicKeyConvert(senderPubKey, false).slice(1)
ab78acc6 28861}
ebd8d4e8 28862
8b095871
IC
28863/**
28864 * Convert signature parameters into the format of `eth_sign` RPC method
28865 * @param {Number} v
28866 * @param {Buffer} r
28867 * @param {Buffer} s
28868 * @return {String} sig
28869 */
28870exports.toRpcSig = function (v, r, s) {
28871 // NOTE: with potential introduction of chainId this might need to be updated
28872 if (v !== 27 && v !== 28) {
28873 throw new Error('Invalid recovery id')
28874 }
28875
28876 // geth (and the RPC eth_sign method) uses the 65 byte format used by Bitcoin
28877 // FIXME: this might change in the future - https://github.com/ethereum/go-ethereum/issues/2053
28878 return exports.bufferToHex(Buffer.concat([
28879 exports.setLengthLeft(r, 32),
28880 exports.setLengthLeft(s, 32),
28881 exports.toBuffer(v - 27)
28882 ]))
ebd8d4e8
IC
28883}
28884
8b095871
IC
28885/**
28886 * Convert signature format of the `eth_sign` RPC method to signature parameters
28887 * NOTE: all because of a bug in geth: https://github.com/ethereum/go-ethereum/issues/2053
28888 * @param {String} sig
28889 * @return {Object}
28890 */
28891exports.fromRpcSig = function (sig) {
28892 sig = exports.toBuffer(sig)
ebd8d4e8 28893
8b095871
IC
28894 // NOTE: with potential introduction of chainId this might need to be updated
28895 if (sig.length !== 65) {
28896 throw new Error('Invalid signature length')
28897 }
28898
28899 var v = sig[64]
28900 // support both versions of `eth_sign` responses
28901 if (v < 27) {
28902 v += 27
28903 }
28904
28905 return {
28906 v: v,
28907 r: sig.slice(0, 32),
28908 s: sig.slice(32, 64)
28909 }
ebd8d4e8
IC
28910}
28911
8b095871
IC
28912/**
28913 * Returns the ethereum address of a given private key
28914 * @param {Buffer} privateKey A private key must be 256 bits wide
28915 * @return {Buffer}
28916 */
28917exports.privateToAddress = function (privateKey) {
28918 return exports.publicToAddress(privateToPublic(privateKey))
ab78acc6 28919}
ebd8d4e8 28920
8b095871
IC
28921/**
28922 * Checks if the address is a valid. Accepts checksummed addresses too
28923 * @param {String} address
28924 * @return {Boolean}
28925 */
28926exports.isValidAddress = function (address) {
28927 return /^0x[0-9a-fA-F]{40}$/i.test(address)
ab78acc6 28928}
ebd8d4e8 28929
8b095871
IC
28930/**
28931 * Returns a checksummed address
28932 * @param {String} address
28933 * @return {String}
28934 */
28935exports.toChecksumAddress = function (address) {
28936 address = exports.stripHexPrefix(address).toLowerCase()
28937 var hash = exports.sha3(address).toString('hex')
28938 var ret = '0x'
28939
28940 for (var i = 0; i < address.length; i++) {
28941 if (parseInt(hash[i], 16) >= 8) {
28942 ret += address[i].toUpperCase()
28943 } else {
28944 ret += address[i]
28945 }
28946 }
28947
28948 return ret
ebd8d4e8
IC
28949}
28950
8b095871
IC
28951/**
28952 * Checks if the address is a valid checksummed address
28953 * @param {Buffer} address
28954 * @return {Boolean}
28955 */
28956exports.isValidChecksumAddress = function (address) {
28957 return exports.isValidAddress(address) && (exports.toChecksumAddress(address) === address)
ab78acc6 28958}
ebd8d4e8 28959
8b095871
IC
28960/**
28961 * Generates an address of a newly created contract
28962 * @param {Buffer} from the address which is creating this new address
28963 * @param {Buffer} nonce the nonce of the from account
28964 * @return {Buffer}
28965 */
28966exports.generateAddress = function (from, nonce) {
28967 from = exports.toBuffer(from)
28968 nonce = new BN(nonce)
28969
28970 if (nonce.isZero()) {
28971 // in RLP we want to encode null in the case of zero nonce
28972 // read the RLP documentation for an answer if you dare
28973 nonce = null
28974 } else {
28975 nonce = Buffer.from(nonce.toArray())
28976 }
28977
28978 // Only take the lower 160bits of the hash
28979 return exports.rlphash([from, nonce]).slice(-20)
ab78acc6 28980}
ebd8d4e8 28981
8b095871
IC
28982/**
28983 * Returns true if the supplied address belongs to a precompiled account
28984 * @param {Buffer|String} address
28985 * @return {Boolean}
28986 */
28987exports.isPrecompiled = function (address) {
28988 var a = exports.unpad(address)
28989 return a.length === 1 && a[0] > 0 && a[0] < 5
ebd8d4e8
IC
28990}
28991
8b095871
IC
28992/**
28993 * Adds "0x" to a given `String` if it does not already start with "0x"
28994 * @param {String} str
28995 * @return {String}
28996 */
28997exports.addHexPrefix = function (str) {
28998 if (typeof str !== 'string') {
28999 return str
29000 }
29001
29002 return exports.isHexPrefixed(str) ? str : '0x' + str
ebd8d4e8
IC
29003}
29004
8b095871
IC
29005/**
29006 * Validate ECDSA signature
29007 * @method isValidSignature
29008 * @param {Buffer} v
29009 * @param {Buffer} r
29010 * @param {Buffer} s
29011 * @param {Boolean} [homestead=true]
29012 * @return {Boolean}
29013 */
29014
29015exports.isValidSignature = function (v, r, s, homestead) {
29016 const SECP256K1_N_DIV_2 = new BN('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0', 16)
29017 const SECP256K1_N = new BN('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141', 16)
29018
29019 if (r.length !== 32 || s.length !== 32) {
29020 return false
29021 }
29022
29023 if (v !== 27 && v !== 28) {
29024 return false
29025 }
29026
29027 r = new BN(r)
29028 s = new BN(s)
29029
29030 if (r.isZero() || r.gt(SECP256K1_N) || s.isZero() || s.gt(SECP256K1_N)) {
29031 return false
29032 }
29033
29034 if ((homestead === false) && (new BN(s).cmp(SECP256K1_N_DIV_2) === 1)) {
29035 return false
29036 }
29037
29038 return true
ebd8d4e8
IC
29039}
29040
8b095871
IC
29041/**
29042 * Converts a `Buffer` or `Array` to JSON
29043 * @param {Buffer|Array} ba
29044 * @return {Array|String|null}
29045 */
29046exports.baToJSON = function (ba) {
29047 if (Buffer.isBuffer(ba)) {
29048 return '0x' + ba.toString('hex')
29049 } else if (ba instanceof Array) {
29050 var array = []
29051 for (var i = 0; i < ba.length; i++) {
29052 array.push(exports.baToJSON(ba[i]))
29053 }
29054 return array
29055 }
ab78acc6 29056}
ebd8d4e8 29057
8b095871
IC
29058/**
29059 * Defines properties on a `Object`. It make the assumption that underlying data is binary.
29060 * @param {Object} self the `Object` to define properties on
29061 * @param {Array} fields an array fields to define. Fields can contain:
29062 * * `name` - the name of the properties
29063 * * `length` - the number of bytes the field can have
29064 * * `allowLess` - if the field can be less than the length
29065 * * `allowEmpty`
29066 * @param {*} data data to be validated against the definitions
29067 */
29068exports.defineProperties = function (self, fields, data) {
29069 self.raw = []
29070 self._fields = []
29071
29072 // attach the `toJSON`
29073 self.toJSON = function (label) {
29074 if (label) {
29075 var obj = {}
29076 self._fields.forEach(function (field) {
29077 obj[field] = '0x' + self[field].toString('hex')
29078 })
29079 return obj
29080 }
29081 return exports.baToJSON(this.raw)
29082 }
29083
29084 self.serialize = function serialize () {
29085 return rlp.encode(self.raw)
29086 }
29087
29088 fields.forEach(function (field, i) {
29089 self._fields.push(field.name)
29090 function getter () {
29091 return self.raw[i]
29092 }
29093 function setter (v) {
29094 v = exports.toBuffer(v)
29095
29096 if (v.toString('hex') === '00' && !field.allowZero) {
29097 v = Buffer.allocUnsafe(0)
29098 }
29099
29100 if (field.allowLess && field.length) {
29101 v = exports.stripZeros(v)
29102 assert(field.length >= v.length, 'The field ' + field.name + ' must not have more ' + field.length + ' bytes')
29103 } else if (!(field.allowZero && v.length === 0) && field.length) {
29104 assert(field.length === v.length, 'The field ' + field.name + ' must have byte length of ' + field.length)
29105 }
29106
29107 self.raw[i] = v
29108 }
29109
29110 Object.defineProperty(self, field.name, {
29111 enumerable: true,
29112 configurable: true,
29113 get: getter,
29114 set: setter
29115 })
29116
29117 if (field.default) {
29118 self[field.name] = field.default
29119 }
29120
29121 // attach alias
29122 if (field.alias) {
29123 Object.defineProperty(self, field.alias, {
29124 enumerable: false,
29125 configurable: true,
29126 set: setter,
29127 get: getter
29128 })
29129 }
29130 })
29131
29132 // if the constuctor is passed data
29133 if (data) {
29134 if (typeof data === 'string') {
29135 data = Buffer.from(exports.stripHexPrefix(data), 'hex')
29136 }
29137
29138 if (Buffer.isBuffer(data)) {
29139 data = rlp.decode(data)
29140 }
29141
29142 if (Array.isArray(data)) {
29143 if (data.length > self._fields.length) {
29144 throw (new Error('wrong number of fields in data'))
29145 }
29146
29147 // make sure all the items are buffers
29148 data.forEach(function (d, i) {
29149 self[self._fields[i]] = exports.toBuffer(d)
29150 })
29151 } else if (typeof data === 'object') {
29152 const keys = Object.keys(data)
29153 fields.forEach(function (field) {
29154 if (keys.indexOf(field.name) !== -1) self[field.name] = data[field.name]
29155 if (keys.indexOf(field.alias) !== -1) self[field.alias] = data[field.alias]
29156 })
29157 } else {
29158 throw new Error('invalid data')
29159 }
29160 }
ab78acc6 29161}
ebd8d4e8 29162
8b095871
IC
29163}).call(this,require("buffer").Buffer)
29164},{"assert":1,"bn.js":33,"buffer":5,"create-hash":36,"ethjs-util":56,"keccak":65,"rlp":72,"secp256k1":73}],32:[function(require,module,exports){
29165(function (Buffer){
29166// Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki
29167// Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
29168// NOTE: SIGHASH byte ignored AND restricted, truncate before use
29169
29170function check (buffer) {
29171 if (buffer.length < 8) return false
29172 if (buffer.length > 72) return false
29173 if (buffer[0] !== 0x30) return false
29174 if (buffer[1] !== buffer.length - 2) return false
29175 if (buffer[2] !== 0x02) return false
29176
29177 var lenR = buffer[3]
29178 if (lenR === 0) return false
29179 if (5 + lenR >= buffer.length) return false
29180 if (buffer[4 + lenR] !== 0x02) return false
29181
29182 var lenS = buffer[5 + lenR]
29183 if (lenS === 0) return false
29184 if ((6 + lenR + lenS) !== buffer.length) return false
29185
29186 if (buffer[4] & 0x80) return false
29187 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false
29188
29189 if (buffer[lenR + 6] & 0x80) return false
29190 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false
29191 return true
ab78acc6 29192}
ab78acc6 29193
8b095871
IC
29194function decode (buffer) {
29195 if (buffer.length < 8) throw new Error('DER sequence length is too short')
29196 if (buffer.length > 72) throw new Error('DER sequence length is too long')
29197 if (buffer[0] !== 0x30) throw new Error('Expected DER sequence')
29198 if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid')
29199 if (buffer[2] !== 0x02) throw new Error('Expected DER integer')
29200
29201 var lenR = buffer[3]
29202 if (lenR === 0) throw new Error('R length is zero')
29203 if (5 + lenR >= buffer.length) throw new Error('R length is too long')
29204 if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)')
29205
29206 var lenS = buffer[5 + lenR]
29207 if (lenS === 0) throw new Error('S length is zero')
29208 if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid')
29209
29210 if (buffer[4] & 0x80) throw new Error('R value is negative')
29211 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded')
29212
29213 if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative')
29214 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded')
29215
29216 // non-BIP66 - extract R, S values
29217 return {
29218 r: buffer.slice(4, 4 + lenR),
29219 s: buffer.slice(6 + lenR)
29220 }
ebd8d4e8
IC
29221}
29222
8b095871
IC
29223/*
29224 * Expects r and s to be positive DER integers.
29225 *
29226 * The DER format uses the most significant bit as a sign bit (& 0x80).
29227 * If the significant bit is set AND the integer is positive, a 0x00 is prepended.
29228 *
29229 * Examples:
29230 *
29231 * 0 => 0x00
29232 * 1 => 0x01
29233 * -1 => 0xff
29234 * 127 => 0x7f
29235 * -127 => 0x81
29236 * 128 => 0x0080
29237 * -128 => 0x80
29238 * 255 => 0x00ff
29239 * -255 => 0xff01
29240 * 16300 => 0x3fac
29241 * -16300 => 0xc054
29242 * 62300 => 0x00f35c
29243 * -62300 => 0xff0ca4
29244*/
29245function encode (r, s) {
29246 var lenR = r.length
29247 var lenS = s.length
29248 if (lenR === 0) throw new Error('R length is zero')
29249 if (lenS === 0) throw new Error('S length is zero')
29250 if (lenR > 33) throw new Error('R length is too long')
29251 if (lenS > 33) throw new Error('S length is too long')
29252 if (r[0] & 0x80) throw new Error('R value is negative')
29253 if (s[0] & 0x80) throw new Error('S value is negative')
29254 if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded')
29255 if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded')
29256
29257 var signature = new Buffer(6 + lenR + lenS)
29258
29259 // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
29260 signature[0] = 0x30
29261 signature[1] = signature.length - 2
29262 signature[2] = 0x02
29263 signature[3] = r.length
29264 r.copy(signature, 4)
29265 signature[4 + lenR] = 0x02
29266 signature[5 + lenR] = s.length
29267 s.copy(signature, 6 + lenR)
29268
29269 return signature
ebd8d4e8
IC
29270}
29271
8b095871
IC
29272module.exports = {
29273 check: check,
29274 decode: decode,
29275 encode: encode
ebd8d4e8 29276}
8b095871 29277
ab78acc6 29278}).call(this,require("buffer").Buffer)
8b095871
IC
29279},{"buffer":5}],33:[function(require,module,exports){
29280(function (module, exports) {
29281 'use strict';
ebd8d4e8 29282
8b095871
IC
29283 // Utils
29284 function assert (val, msg) {
29285 if (!val) throw new Error(msg || 'Assertion failed');
29286 }
ebd8d4e8 29287
8b095871
IC
29288 // Could use `inherits` module, but don't want to move from single file
29289 // architecture yet.
29290 function inherits (ctor, superCtor) {
29291 ctor.super_ = superCtor;
29292 var TempCtor = function () {};
29293 TempCtor.prototype = superCtor.prototype;
29294 ctor.prototype = new TempCtor();
29295 ctor.prototype.constructor = ctor;
29296 }
ebd8d4e8 29297
8b095871 29298 // BN
ab78acc6 29299
8b095871
IC
29300 function BN (number, base, endian) {
29301 if (BN.isBN(number)) {
29302 return number;
29303 }
ab78acc6 29304
8b095871
IC
29305 this.negative = 0;
29306 this.words = null;
29307 this.length = 0;
ab78acc6 29308
8b095871
IC
29309 // Reduction context
29310 this.red = null;
ab78acc6 29311
8b095871
IC
29312 if (number !== null) {
29313 if (base === 'le' || base === 'be') {
29314 endian = base;
29315 base = 10;
29316 }
ab78acc6 29317
8b095871
IC
29318 this._init(number || 0, base || 10, endian || 'be');
29319 }
29320 }
29321 if (typeof module === 'object') {
29322 module.exports = BN;
29323 } else {
29324 exports.BN = BN;
29325 }
ab78acc6 29326
8b095871
IC
29327 BN.BN = BN;
29328 BN.wordSize = 26;
ab78acc6 29329
8b095871
IC
29330 var Buffer;
29331 try {
29332 Buffer = require('buf' + 'fer').Buffer;
29333 } catch (e) {
29334 }
ab78acc6 29335
8b095871
IC
29336 BN.isBN = function isBN (num) {
29337 if (num instanceof BN) {
29338 return true;
29339 }
ab78acc6 29340
8b095871
IC
29341 return num !== null && typeof num === 'object' &&
29342 num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
29343 };
ebd8d4e8 29344
8b095871
IC
29345 BN.max = function max (left, right) {
29346 if (left.cmp(right) > 0) return left;
29347 return right;
29348 };
ebd8d4e8 29349
8b095871
IC
29350 BN.min = function min (left, right) {
29351 if (left.cmp(right) < 0) return left;
29352 return right;
29353 };
29354
29355 BN.prototype._init = function init (number, base, endian) {
29356 if (typeof number === 'number') {
29357 return this._initNumber(number, base, endian);
ab78acc6 29358 }
ebd8d4e8 29359
8b095871
IC
29360 if (typeof number === 'object') {
29361 return this._initArray(number, base, endian);
29362 }
ebd8d4e8 29363
8b095871
IC
29364 if (base === 'hex') {
29365 base = 16;
29366 }
29367 assert(base === (base | 0) && base >= 2 && base <= 36);
29368
29369 number = number.toString().replace(/\s+/g, '');
29370 var start = 0;
29371 if (number[0] === '-') {
29372 start++;
29373 }
29374
29375 if (base === 16) {
29376 this._parseHex(number, start);
29377 } else {
29378 this._parseBase(number, base, start);
ab78acc6 29379 }
ebd8d4e8 29380
8b095871
IC
29381 if (number[0] === '-') {
29382 this.negative = 1;
29383 }
ebd8d4e8 29384
8b095871 29385 this.strip();
ebd8d4e8 29386
8b095871 29387 if (endian !== 'le') return;
ebd8d4e8 29388
8b095871
IC
29389 this._initArray(this.toArray(), base, endian);
29390 };
ebd8d4e8 29391
8b095871
IC
29392 BN.prototype._initNumber = function _initNumber (number, base, endian) {
29393 if (number < 0) {
29394 this.negative = 1;
29395 number = -number;
29396 }
29397 if (number < 0x4000000) {
29398 this.words = [ number & 0x3ffffff ];
29399 this.length = 1;
29400 } else if (number < 0x10000000000000) {
29401 this.words = [
29402 number & 0x3ffffff,
29403 (number / 0x4000000) & 0x3ffffff
29404 ];
29405 this.length = 2;
29406 } else {
29407 assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
29408 this.words = [
29409 number & 0x3ffffff,
29410 (number / 0x4000000) & 0x3ffffff,
29411 1
29412 ];
29413 this.length = 3;
29414 }
ebd8d4e8 29415
8b095871 29416 if (endian !== 'le') return;
ebd8d4e8 29417
8b095871
IC
29418 // Reverse the bytes
29419 this._initArray(this.toArray(), base, endian);
29420 };
ebd8d4e8 29421
8b095871
IC
29422 BN.prototype._initArray = function _initArray (number, base, endian) {
29423 // Perhaps a Uint8Array
29424 assert(typeof number.length === 'number');
29425 if (number.length <= 0) {
29426 this.words = [ 0 ];
29427 this.length = 1;
29428 return this;
ab78acc6 29429 }
ebd8d4e8 29430
8b095871
IC
29431 this.length = Math.ceil(number.length / 3);
29432 this.words = new Array(this.length);
29433 for (var i = 0; i < this.length; i++) {
29434 this.words[i] = 0;
29435 }
ebd8d4e8 29436
8b095871
IC
29437 var j, w;
29438 var off = 0;
29439 if (endian === 'be') {
29440 for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
29441 w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
29442 this.words[j] |= (w << off) & 0x3ffffff;
29443 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
29444 off += 24;
29445 if (off >= 26) {
29446 off -= 26;
29447 j++;
29448 }
29449 }
29450 } else if (endian === 'le') {
29451 for (i = 0, j = 0; i < number.length; i += 3) {
29452 w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
29453 this.words[j] |= (w << off) & 0x3ffffff;
29454 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
29455 off += 24;
29456 if (off >= 26) {
29457 off -= 26;
29458 j++;
29459 }
29460 }
29461 }
29462 return this.strip();
29463 };
ebd8d4e8 29464
8b095871
IC
29465 function parseHex (str, start, end) {
29466 var r = 0;
29467 var len = Math.min(str.length, end);
29468 for (var i = start; i < len; i++) {
29469 var c = str.charCodeAt(i) - 48;
ab78acc6 29470
8b095871 29471 r <<= 4;
ab78acc6 29472
8b095871
IC
29473 // 'a' - 'f'
29474 if (c >= 49 && c <= 54) {
29475 r |= c - 49 + 0xa;
ab78acc6 29476
8b095871
IC
29477 // 'A' - 'F'
29478 } else if (c >= 17 && c <= 22) {
29479 r |= c - 17 + 0xa;
ebd8d4e8 29480
8b095871
IC
29481 // '0' - '9'
29482 } else {
29483 r |= c & 0xf;
29484 }
29485 }
29486 return r;
29487 }
29488
29489 BN.prototype._parseHex = function _parseHex (number, start) {
29490 // Create possibly bigger array to ensure that it fits the number
29491 this.length = Math.ceil((number.length - start) / 6);
29492 this.words = new Array(this.length);
29493 for (var i = 0; i < this.length; i++) {
29494 this.words[i] = 0;
29495 }
29496
29497 var j, w;
29498 // Scan 24-bit chunks and add them to the number
29499 var off = 0;
29500 for (i = number.length - 6, j = 0; i >= start; i -= 6) {
29501 w = parseHex(number, i, i + 6);
29502 this.words[j] |= (w << off) & 0x3ffffff;
29503 // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb
29504 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
29505 off += 24;
29506 if (off >= 26) {
29507 off -= 26;
29508 j++;
29509 }
29510 }
29511 if (i + 6 !== start) {
29512 w = parseHex(number, start, i + 6);
29513 this.words[j] |= (w << off) & 0x3ffffff;
29514 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
29515 }
29516 this.strip();
29517 };
ebd8d4e8 29518
8b095871
IC
29519 function parseBase (str, start, end, mul) {
29520 var r = 0;
29521 var len = Math.min(str.length, end);
29522 for (var i = start; i < len; i++) {
29523 var c = str.charCodeAt(i) - 48;
ebd8d4e8 29524
8b095871 29525 r *= mul;
ebd8d4e8 29526
8b095871
IC
29527 // 'a'
29528 if (c >= 49) {
29529 r += c - 49 + 0xa;
ebd8d4e8 29530
8b095871
IC
29531 // 'A'
29532 } else if (c >= 17) {
29533 r += c - 17 + 0xa;
ebd8d4e8 29534
8b095871
IC
29535 // '0' - '9'
29536 } else {
29537 r += c;
29538 }
29539 }
29540 return r;
29541 }
ebd8d4e8 29542
8b095871
IC
29543 BN.prototype._parseBase = function _parseBase (number, base, start) {
29544 // Initialize as zero
29545 this.words = [ 0 ];
29546 this.length = 1;
ebd8d4e8 29547
8b095871
IC
29548 // Find length of limb in base
29549 for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
29550 limbLen++;
29551 }
29552 limbLen--;
29553 limbPow = (limbPow / base) | 0;
ebd8d4e8 29554
8b095871
IC
29555 var total = number.length - start;
29556 var mod = total % limbLen;
29557 var end = Math.min(total, total - mod) + start;
ebd8d4e8 29558
8b095871
IC
29559 var word = 0;
29560 for (var i = start; i < end; i += limbLen) {
29561 word = parseBase(number, i, i + limbLen, base);
ebd8d4e8 29562
8b095871
IC
29563 this.imuln(limbPow);
29564 if (this.words[0] + word < 0x4000000) {
29565 this.words[0] += word;
29566 } else {
29567 this._iaddn(word);
29568 }
29569 }
ebd8d4e8 29570
8b095871
IC
29571 if (mod !== 0) {
29572 var pow = 1;
29573 word = parseBase(number, i, number.length, base);
ebd8d4e8 29574
8b095871
IC
29575 for (i = 0; i < mod; i++) {
29576 pow *= base;
29577 }
ab78acc6 29578
8b095871
IC
29579 this.imuln(pow);
29580 if (this.words[0] + word < 0x4000000) {
29581 this.words[0] += word;
29582 } else {
29583 this._iaddn(word);
29584 }
29585 }
29586 };
ab78acc6 29587
8b095871
IC
29588 BN.prototype.copy = function copy (dest) {
29589 dest.words = new Array(this.length);
29590 for (var i = 0; i < this.length; i++) {
29591 dest.words[i] = this.words[i];
ab78acc6 29592 }
8b095871
IC
29593 dest.length = this.length;
29594 dest.negative = this.negative;
29595 dest.red = this.red;
29596 };
ab78acc6 29597
8b095871
IC
29598 BN.prototype.clone = function clone () {
29599 var r = new BN(null);
29600 this.copy(r);
29601 return r;
29602 };
ab78acc6 29603
8b095871
IC
29604 BN.prototype._expand = function _expand (size) {
29605 while (this.length < size) {
29606 this.words[this.length++] = 0;
29607 }
29608 return this;
29609 };
ab78acc6 29610
8b095871
IC
29611 // Remove leading `0` from `this`
29612 BN.prototype.strip = function strip () {
29613 while (this.length > 1 && this.words[this.length - 1] === 0) {
29614 this.length--;
ab78acc6 29615 }
8b095871
IC
29616 return this._normSign();
29617 };
ebd8d4e8 29618
8b095871
IC
29619 BN.prototype._normSign = function _normSign () {
29620 // -0 = 0
29621 if (this.length === 1 && this.words[0] === 0) {
29622 this.negative = 0;
ab78acc6 29623 }
8b095871
IC
29624 return this;
29625 };
ebd8d4e8 29626
8b095871
IC
29627 BN.prototype.inspect = function inspect () {
29628 return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
29629 };
ebd8d4e8 29630
8b095871 29631 /*
ebd8d4e8 29632
8b095871
IC
29633 var zeros = [];
29634 var groupSizes = [];
29635 var groupBases = [];
ebd8d4e8 29636
8b095871
IC
29637 var s = '';
29638 var i = -1;
29639 while (++i < BN.wordSize) {
29640 zeros[i] = s;
29641 s += '0';
29642 }
29643 groupSizes[0] = 0;
29644 groupSizes[1] = 0;
29645 groupBases[0] = 0;
29646 groupBases[1] = 0;
29647 var base = 2 - 1;
29648 while (++base < 36 + 1) {
29649 var groupSize = 0;
29650 var groupBase = 1;
29651 while (groupBase < (1 << BN.wordSize) / base) {
29652 groupBase *= base;
29653 groupSize += 1;
29654 }
29655 groupSizes[base] = groupSize;
29656 groupBases[base] = groupBase;
ebd8d4e8
IC
29657 }
29658
8b095871 29659 */
ebd8d4e8 29660
8b095871
IC
29661 var zeros = [
29662 '',
29663 '0',
29664 '00',
29665 '000',
29666 '0000',
29667 '00000',
29668 '000000',
29669 '0000000',
29670 '00000000',
29671 '000000000',
29672 '0000000000',
29673 '00000000000',
29674 '000000000000',
29675 '0000000000000',
29676 '00000000000000',
29677 '000000000000000',
29678 '0000000000000000',
29679 '00000000000000000',
29680 '000000000000000000',
29681 '0000000000000000000',
29682 '00000000000000000000',
29683 '000000000000000000000',
29684 '0000000000000000000000',
29685 '00000000000000000000000',
29686 '000000000000000000000000',
29687 '0000000000000000000000000'
29688 ];
29689
29690 var groupSizes = [
29691 0, 0,
29692 25, 16, 12, 11, 10, 9, 8,
29693 8, 7, 7, 7, 7, 6, 6,
29694 6, 6, 6, 6, 6, 5, 5,
29695 5, 5, 5, 5, 5, 5, 5,
29696 5, 5, 5, 5, 5, 5, 5
29697 ];
29698
29699 var groupBases = [
29700 0, 0,
29701 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
29702 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
29703 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
29704 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
29705 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
29706 ];
29707
29708 BN.prototype.toString = function toString (base, padding) {
29709 base = base || 10;
29710 padding = padding | 0 || 1;
29711
29712 var out;
29713 if (base === 16 || base === 'hex') {
29714 out = '';
29715 var off = 0;
29716 var carry = 0;
29717 for (var i = 0; i < this.length; i++) {
29718 var w = this.words[i];
29719 var word = (((w << off) | carry) & 0xffffff).toString(16);
29720 carry = (w >>> (24 - off)) & 0xffffff;
29721 if (carry !== 0 || i !== this.length - 1) {
29722 out = zeros[6 - word.length] + word + out;
29723 } else {
29724 out = word + out;
29725 }
29726 off += 2;
29727 if (off >= 26) {
29728 off -= 26;
29729 i--;
29730 }
29731 }
29732 if (carry !== 0) {
29733 out = carry.toString(16) + out;
29734 }
29735 while (out.length % padding !== 0) {
29736 out = '0' + out;
29737 }
29738 if (this.negative !== 0) {
29739 out = '-' + out;
29740 }
29741 return out;
29742 }
29743
29744 if (base === (base | 0) && base >= 2 && base <= 36) {
29745 // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
29746 var groupSize = groupSizes[base];
29747 // var groupBase = Math.pow(base, groupSize);
29748 var groupBase = groupBases[base];
29749 out = '';
29750 var c = this.clone();
29751 c.negative = 0;
29752 while (!c.isZero()) {
29753 var r = c.modn(groupBase).toString(base);
29754 c = c.idivn(groupBase);
29755
29756 if (!c.isZero()) {
29757 out = zeros[groupSize - r.length] + r + out;
29758 } else {
29759 out = r + out;
29760 }
29761 }
29762 if (this.isZero()) {
29763 out = '0' + out;
29764 }
29765 while (out.length % padding !== 0) {
29766 out = '0' + out;
29767 }
29768 if (this.negative !== 0) {
29769 out = '-' + out;
29770 }
29771 return out;
29772 }
29773
29774 assert(false, 'Base should be between 2 and 36');
29775 };
29776
29777 BN.prototype.toNumber = function toNumber () {
29778 var ret = this.words[0];
29779 if (this.length === 2) {
29780 ret += this.words[1] * 0x4000000;
29781 } else if (this.length === 3 && this.words[2] === 0x01) {
29782 // NOTE: at this stage it is known that the top bit is set
29783 ret += 0x10000000000000 + (this.words[1] * 0x4000000);
29784 } else if (this.length > 2) {
29785 assert(false, 'Number can only safely store up to 53 bits');
29786 }
29787 return (this.negative !== 0) ? -ret : ret;
29788 };
29789
29790 BN.prototype.toJSON = function toJSON () {
29791 return this.toString(16);
29792 };
29793
29794 BN.prototype.toBuffer = function toBuffer (endian, length) {
29795 assert(typeof Buffer !== 'undefined');
29796 return this.toArrayLike(Buffer, endian, length);
29797 };
ebd8d4e8 29798
8b095871
IC
29799 BN.prototype.toArray = function toArray (endian, length) {
29800 return this.toArrayLike(Array, endian, length);
29801 };
ebd8d4e8 29802
8b095871
IC
29803 BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
29804 var byteLength = this.byteLength();
29805 var reqLength = length || Math.max(1, byteLength);
29806 assert(byteLength <= reqLength, 'byte array longer than desired length');
29807 assert(reqLength > 0, 'Requested array length <= 0');
29808
29809 this.strip();
29810 var littleEndian = endian === 'le';
29811 var res = new ArrayType(reqLength);
29812
29813 var b, i;
29814 var q = this.clone();
29815 if (!littleEndian) {
29816 // Assume big-endian
29817 for (i = 0; i < reqLength - byteLength; i++) {
29818 res[i] = 0;
29819 }
ebd8d4e8 29820
8b095871
IC
29821 for (i = 0; !q.isZero(); i++) {
29822 b = q.andln(0xff);
29823 q.iushrn(8);
ebd8d4e8 29824
8b095871
IC
29825 res[reqLength - i - 1] = b;
29826 }
29827 } else {
29828 for (i = 0; !q.isZero(); i++) {
29829 b = q.andln(0xff);
29830 q.iushrn(8);
ebd8d4e8 29831
8b095871
IC
29832 res[i] = b;
29833 }
29834
29835 for (; i < reqLength; i++) {
29836 res[i] = 0;
29837 }
ab78acc6 29838 }
ebd8d4e8 29839
8b095871
IC
29840 return res;
29841 };
ebd8d4e8 29842
8b095871
IC
29843 if (Math.clz32) {
29844 BN.prototype._countBits = function _countBits (w) {
29845 return 32 - Math.clz32(w);
29846 };
29847 } else {
29848 BN.prototype._countBits = function _countBits (w) {
29849 var t = w;
29850 var r = 0;
29851 if (t >= 0x1000) {
29852 r += 13;
29853 t >>>= 13;
29854 }
29855 if (t >= 0x40) {
29856 r += 7;
29857 t >>>= 7;
29858 }
29859 if (t >= 0x8) {
29860 r += 4;
29861 t >>>= 4;
29862 }
29863 if (t >= 0x02) {
29864 r += 2;
29865 t >>>= 2;
29866 }
29867 return r + t;
29868 };
ebd8d4e8
IC
29869 }
29870
8b095871
IC
29871 BN.prototype._zeroBits = function _zeroBits (w) {
29872 // Short-cut
29873 if (w === 0) return 26;
ebd8d4e8 29874
8b095871
IC
29875 var t = w;
29876 var r = 0;
29877 if ((t & 0x1fff) === 0) {
29878 r += 13;
29879 t >>>= 13;
29880 }
29881 if ((t & 0x7f) === 0) {
29882 r += 7;
29883 t >>>= 7;
29884 }
29885 if ((t & 0xf) === 0) {
29886 r += 4;
29887 t >>>= 4;
29888 }
29889 if ((t & 0x3) === 0) {
29890 r += 2;
29891 t >>>= 2;
29892 }
29893 if ((t & 0x1) === 0) {
29894 r++;
29895 }
29896 return r;
29897 };
ebd8d4e8 29898
8b095871
IC
29899 // Return number of used bits in a BN
29900 BN.prototype.bitLength = function bitLength () {
29901 var w = this.words[this.length - 1];
29902 var hi = this._countBits(w);
29903 return (this.length - 1) * 26 + hi;
29904 };
ebd8d4e8 29905
8b095871
IC
29906 function toBitArray (num) {
29907 var w = new Array(num.bitLength());
ebd8d4e8 29908
8b095871
IC
29909 for (var bit = 0; bit < w.length; bit++) {
29910 var off = (bit / 26) | 0;
29911 var wbit = bit % 26;
ebd8d4e8 29912
8b095871 29913 w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
ab78acc6 29914 }
8b095871
IC
29915
29916 return w;
ab78acc6 29917 }
ebd8d4e8 29918
8b095871
IC
29919 // Number of trailing zero bits
29920 BN.prototype.zeroBits = function zeroBits () {
29921 if (this.isZero()) return 0;
29922
29923 var r = 0;
29924 for (var i = 0; i < this.length; i++) {
29925 var b = this._zeroBits(this.words[i]);
29926 r += b;
29927 if (b !== 26) break;
ab78acc6 29928 }
8b095871
IC
29929 return r;
29930 };
29931
29932 BN.prototype.byteLength = function byteLength () {
29933 return Math.ceil(this.bitLength() / 8);
29934 };
29935
29936 BN.prototype.toTwos = function toTwos (width) {
29937 if (this.negative !== 0) {
29938 return this.abs().inotn(width).iaddn(1);
ab78acc6 29939 }
8b095871
IC
29940 return this.clone();
29941 };
ebd8d4e8 29942
8b095871
IC
29943 BN.prototype.fromTwos = function fromTwos (width) {
29944 if (this.testn(width - 1)) {
29945 return this.notn(width).iaddn(1).ineg();
29946 }
29947 return this.clone();
29948 };
ebd8d4e8 29949
8b095871
IC
29950 BN.prototype.isNeg = function isNeg () {
29951 return this.negative !== 0;
29952 };
ebd8d4e8 29953
8b095871
IC
29954 // Return negative clone of `this`
29955 BN.prototype.neg = function neg () {
29956 return this.clone().ineg();
29957 };
ebd8d4e8 29958
8b095871
IC
29959 BN.prototype.ineg = function ineg () {
29960 if (!this.isZero()) {
29961 this.negative ^= 1;
ab78acc6 29962 }
ebd8d4e8 29963
8b095871
IC
29964 return this;
29965 };
ebd8d4e8 29966
8b095871
IC
29967 // Or `num` with `this` in-place
29968 BN.prototype.iuor = function iuor (num) {
29969 while (this.length < num.length) {
29970 this.words[this.length++] = 0;
29971 }
ebd8d4e8 29972
8b095871
IC
29973 for (var i = 0; i < num.length; i++) {
29974 this.words[i] = this.words[i] | num.words[i];
ebd8d4e8 29975 }
ebd8d4e8 29976
8b095871
IC
29977 return this.strip();
29978 };
ebd8d4e8 29979
8b095871
IC
29980 BN.prototype.ior = function ior (num) {
29981 assert((this.negative | num.negative) === 0);
29982 return this.iuor(num);
ab78acc6 29983 };
ebd8d4e8 29984
8b095871
IC
29985 // Or `num` with `this`
29986 BN.prototype.or = function or (num) {
29987 if (this.length > num.length) return this.clone().ior(num);
29988 return num.clone().ior(this);
29989 };
ebd8d4e8 29990
8b095871
IC
29991 BN.prototype.uor = function uor (num) {
29992 if (this.length > num.length) return this.clone().iuor(num);
29993 return num.clone().iuor(this);
29994 };
ebd8d4e8 29995
8b095871
IC
29996 // And `num` with `this` in-place
29997 BN.prototype.iuand = function iuand (num) {
29998 // b = min-length(num, this)
29999 var b;
30000 if (this.length > num.length) {
30001 b = num;
30002 } else {
30003 b = this;
30004 }
30005
30006 for (var i = 0; i < b.length; i++) {
30007 this.words[i] = this.words[i] & num.words[i];
30008 }
ebd8d4e8 30009
8b095871 30010 this.length = b.length;
ebd8d4e8 30011
8b095871
IC
30012 return this.strip();
30013 };
ebd8d4e8 30014
8b095871
IC
30015 BN.prototype.iand = function iand (num) {
30016 assert((this.negative | num.negative) === 0);
30017 return this.iuand(num);
30018 };
ebd8d4e8 30019
8b095871
IC
30020 // And `num` with `this`
30021 BN.prototype.and = function and (num) {
30022 if (this.length > num.length) return this.clone().iand(num);
30023 return num.clone().iand(this);
30024 };
ebd8d4e8 30025
8b095871
IC
30026 BN.prototype.uand = function uand (num) {
30027 if (this.length > num.length) return this.clone().iuand(num);
30028 return num.clone().iuand(this);
30029 };
ebd8d4e8 30030
8b095871
IC
30031 // Xor `num` with `this` in-place
30032 BN.prototype.iuxor = function iuxor (num) {
30033 // a.length > b.length
30034 var a;
30035 var b;
30036 if (this.length > num.length) {
30037 a = this;
30038 b = num;
30039 } else {
30040 a = num;
30041 b = this;
30042 }
ebd8d4e8 30043
8b095871
IC
30044 for (var i = 0; i < b.length; i++) {
30045 this.words[i] = a.words[i] ^ b.words[i];
30046 }
ebd8d4e8 30047
8b095871
IC
30048 if (this !== a) {
30049 for (; i < a.length; i++) {
30050 this.words[i] = a.words[i];
30051 }
30052 }
ebd8d4e8 30053
8b095871 30054 this.length = a.length;
ebd8d4e8 30055
8b095871
IC
30056 return this.strip();
30057 };
ebd8d4e8 30058
8b095871
IC
30059 BN.prototype.ixor = function ixor (num) {
30060 assert((this.negative | num.negative) === 0);
30061 return this.iuxor(num);
30062 };
ebd8d4e8 30063
8b095871
IC
30064 // Xor `num` with `this`
30065 BN.prototype.xor = function xor (num) {
30066 if (this.length > num.length) return this.clone().ixor(num);
30067 return num.clone().ixor(this);
30068 };
ebd8d4e8 30069
8b095871
IC
30070 BN.prototype.uxor = function uxor (num) {
30071 if (this.length > num.length) return this.clone().iuxor(num);
30072 return num.clone().iuxor(this);
30073 };
ebd8d4e8 30074
8b095871
IC
30075 // Not ``this`` with ``width`` bitwidth
30076 BN.prototype.inotn = function inotn (width) {
30077 assert(typeof width === 'number' && width >= 0);
ebd8d4e8 30078
8b095871
IC
30079 var bytesNeeded = Math.ceil(width / 26) | 0;
30080 var bitsLeft = width % 26;
ebd8d4e8 30081
8b095871
IC
30082 // Extend the buffer with leading zeroes
30083 this._expand(bytesNeeded);
30084
30085 if (bitsLeft > 0) {
30086 bytesNeeded--;
ab78acc6 30087 }
8b095871
IC
30088
30089 // Handle complete words
30090 for (var i = 0; i < bytesNeeded; i++) {
30091 this.words[i] = ~this.words[i] & 0x3ffffff;
ab78acc6 30092 }
8b095871
IC
30093
30094 // Handle the residue
30095 if (bitsLeft > 0) {
30096 this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
ab78acc6 30097 }
ebd8d4e8 30098
8b095871
IC
30099 // And remove leading zeroes
30100 return this.strip();
30101 };
ebd8d4e8 30102
8b095871
IC
30103 BN.prototype.notn = function notn (width) {
30104 return this.clone().inotn(width);
30105 };
ebd8d4e8 30106
8b095871
IC
30107 // Set `bit` of `this`
30108 BN.prototype.setn = function setn (bit, val) {
30109 assert(typeof bit === 'number' && bit >= 0);
ebd8d4e8 30110
8b095871
IC
30111 var off = (bit / 26) | 0;
30112 var wbit = bit % 26;
ebd8d4e8 30113
8b095871 30114 this._expand(off + 1);
ebd8d4e8 30115
8b095871
IC
30116 if (val) {
30117 this.words[off] = this.words[off] | (1 << wbit);
30118 } else {
30119 this.words[off] = this.words[off] & ~(1 << wbit);
30120 }
ebd8d4e8 30121
8b095871
IC
30122 return this.strip();
30123 };
ebd8d4e8 30124
8b095871
IC
30125 // Add `num` to `this` in-place
30126 BN.prototype.iadd = function iadd (num) {
30127 var r;
30128
30129 // negative + positive
30130 if (this.negative !== 0 && num.negative === 0) {
30131 this.negative = 0;
30132 r = this.isub(num);
30133 this.negative ^= 1;
30134 return this._normSign();
30135
30136 // positive + negative
30137 } else if (this.negative === 0 && num.negative !== 0) {
30138 num.negative = 0;
30139 r = this.isub(num);
30140 num.negative = 1;
30141 return r._normSign();
30142 }
30143
30144 // a.length > b.length
30145 var a, b;
30146 if (this.length > num.length) {
30147 a = this;
30148 b = num;
ab78acc6 30149 } else {
8b095871
IC
30150 a = num;
30151 b = this;
30152 }
30153
30154 var carry = 0;
30155 for (var i = 0; i < b.length; i++) {
30156 r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
30157 this.words[i] = r & 0x3ffffff;
30158 carry = r >>> 26;
30159 }
30160 for (; carry !== 0 && i < a.length; i++) {
30161 r = (a.words[i] | 0) + carry;
30162 this.words[i] = r & 0x3ffffff;
30163 carry = r >>> 26;
30164 }
30165
30166 this.length = a.length;
30167 if (carry !== 0) {
30168 this.words[this.length] = carry;
30169 this.length++;
30170 // Copy the rest of the words
30171 } else if (a !== this) {
30172 for (; i < a.length; i++) {
30173 this.words[i] = a.words[i];
30174 }
ab78acc6 30175 }
ebd8d4e8 30176
8b095871
IC
30177 return this;
30178 };
ebd8d4e8 30179
8b095871
IC
30180 // Add `num` to `this`
30181 BN.prototype.add = function add (num) {
30182 var res;
30183 if (num.negative !== 0 && this.negative === 0) {
30184 num.negative = 0;
30185 res = this.sub(num);
30186 num.negative ^= 1;
30187 return res;
30188 } else if (num.negative === 0 && this.negative !== 0) {
30189 this.negative = 0;
30190 res = num.sub(this);
30191 this.negative = 1;
30192 return res;
30193 }
ebd8d4e8 30194
8b095871 30195 if (this.length > num.length) return this.clone().iadd(num);
ebd8d4e8 30196
8b095871
IC
30197 return num.clone().iadd(this);
30198 };
ebd8d4e8 30199
8b095871
IC
30200 // Subtract `num` from `this` in-place
30201 BN.prototype.isub = function isub (num) {
30202 // this - (-num) = this + num
30203 if (num.negative !== 0) {
30204 num.negative = 0;
30205 var r = this.iadd(num);
30206 num.negative = 1;
30207 return r._normSign();
30208
30209 // -this - num = -(this + num)
30210 } else if (this.negative !== 0) {
30211 this.negative = 0;
30212 this.iadd(num);
30213 this.negative = 1;
30214 return this._normSign();
30215 }
30216
30217 // At this point both numbers are positive
30218 var cmp = this.cmp(num);
30219
30220 // Optimization - zeroify
30221 if (cmp === 0) {
30222 this.negative = 0;
30223 this.length = 1;
30224 this.words[0] = 0;
30225 return this;
30226 }
ebd8d4e8 30227
8b095871
IC
30228 // a > b
30229 var a, b;
30230 if (cmp > 0) {
30231 a = this;
30232 b = num;
30233 } else {
30234 a = num;
30235 b = this;
30236 }
ebd8d4e8 30237
8b095871
IC
30238 var carry = 0;
30239 for (var i = 0; i < b.length; i++) {
30240 r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
30241 carry = r >> 26;
30242 this.words[i] = r & 0x3ffffff;
30243 }
30244 for (; carry !== 0 && i < a.length; i++) {
30245 r = (a.words[i] | 0) + carry;
30246 carry = r >> 26;
30247 this.words[i] = r & 0x3ffffff;
30248 }
ebd8d4e8 30249
8b095871
IC
30250 // Copy rest of the words
30251 if (carry === 0 && i < a.length && a !== this) {
30252 for (; i < a.length; i++) {
30253 this.words[i] = a.words[i];
30254 }
30255 }
ebd8d4e8 30256
8b095871 30257 this.length = Math.max(this.length, i);
ebd8d4e8 30258
8b095871
IC
30259 if (a !== this) {
30260 this.negative = 1;
ab78acc6 30261 }
ebd8d4e8 30262
8b095871
IC
30263 return this.strip();
30264 };
ebd8d4e8 30265
8b095871
IC
30266 // Subtract `num` from `this`
30267 BN.prototype.sub = function sub (num) {
30268 return this.clone().isub(num);
30269 };
30270
30271 function smallMulTo (self, num, out) {
30272 out.negative = num.negative ^ self.negative;
30273 var len = (self.length + num.length) | 0;
30274 out.length = len;
30275 len = (len - 1) | 0;
30276
30277 // Peel one iteration (compiler can't do it, because of code complexity)
30278 var a = self.words[0] | 0;
30279 var b = num.words[0] | 0;
30280 var r = a * b;
30281
30282 var lo = r & 0x3ffffff;
30283 var carry = (r / 0x4000000) | 0;
30284 out.words[0] = lo;
30285
30286 for (var k = 1; k < len; k++) {
30287 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
30288 // note that ncarry could be >= 0x3ffffff
30289 var ncarry = carry >>> 26;
30290 var rword = carry & 0x3ffffff;
30291 var maxJ = Math.min(k, num.length - 1);
30292 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
30293 var i = (k - j) | 0;
30294 a = self.words[i] | 0;
30295 b = num.words[j] | 0;
30296 r = a * b + rword;
30297 ncarry += (r / 0x4000000) | 0;
30298 rword = r & 0x3ffffff;
30299 }
30300 out.words[k] = rword | 0;
30301 carry = ncarry | 0;
30302 }
30303 if (carry !== 0) {
30304 out.words[k] = carry | 0;
ab78acc6 30305 } else {
8b095871
IC
30306 out.length--;
30307 }
30308
30309 return out.strip();
30310 }
30311
30312 // TODO(indutny): it may be reasonable to omit it for users who don't need
30313 // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
30314 // multiplication (like elliptic secp256k1).
30315 var comb10MulTo = function comb10MulTo (self, num, out) {
30316 var a = self.words;
30317 var b = num.words;
30318 var o = out.words;
30319 var c = 0;
30320 var lo;
30321 var mid;
30322 var hi;
30323 var a0 = a[0] | 0;
30324 var al0 = a0 & 0x1fff;
30325 var ah0 = a0 >>> 13;
30326 var a1 = a[1] | 0;
30327 var al1 = a1 & 0x1fff;
30328 var ah1 = a1 >>> 13;
30329 var a2 = a[2] | 0;
30330 var al2 = a2 & 0x1fff;
30331 var ah2 = a2 >>> 13;
30332 var a3 = a[3] | 0;
30333 var al3 = a3 & 0x1fff;
30334 var ah3 = a3 >>> 13;
30335 var a4 = a[4] | 0;
30336 var al4 = a4 & 0x1fff;
30337 var ah4 = a4 >>> 13;
30338 var a5 = a[5] | 0;
30339 var al5 = a5 & 0x1fff;
30340 var ah5 = a5 >>> 13;
30341 var a6 = a[6] | 0;
30342 var al6 = a6 & 0x1fff;
30343 var ah6 = a6 >>> 13;
30344 var a7 = a[7] | 0;
30345 var al7 = a7 & 0x1fff;
30346 var ah7 = a7 >>> 13;
30347 var a8 = a[8] | 0;
30348 var al8 = a8 & 0x1fff;
30349 var ah8 = a8 >>> 13;
30350 var a9 = a[9] | 0;
30351 var al9 = a9 & 0x1fff;
30352 var ah9 = a9 >>> 13;
30353 var b0 = b[0] | 0;
30354 var bl0 = b0 & 0x1fff;
30355 var bh0 = b0 >>> 13;
30356 var b1 = b[1] | 0;
30357 var bl1 = b1 & 0x1fff;
30358 var bh1 = b1 >>> 13;
30359 var b2 = b[2] | 0;
30360 var bl2 = b2 & 0x1fff;
30361 var bh2 = b2 >>> 13;
30362 var b3 = b[3] | 0;
30363 var bl3 = b3 & 0x1fff;
30364 var bh3 = b3 >>> 13;
30365 var b4 = b[4] | 0;
30366 var bl4 = b4 & 0x1fff;
30367 var bh4 = b4 >>> 13;
30368 var b5 = b[5] | 0;
30369 var bl5 = b5 & 0x1fff;
30370 var bh5 = b5 >>> 13;
30371 var b6 = b[6] | 0;
30372 var bl6 = b6 & 0x1fff;
30373 var bh6 = b6 >>> 13;
30374 var b7 = b[7] | 0;
30375 var bl7 = b7 & 0x1fff;
30376 var bh7 = b7 >>> 13;
30377 var b8 = b[8] | 0;
30378 var bl8 = b8 & 0x1fff;
30379 var bh8 = b8 >>> 13;
30380 var b9 = b[9] | 0;
30381 var bl9 = b9 & 0x1fff;
30382 var bh9 = b9 >>> 13;
30383
30384 out.negative = self.negative ^ num.negative;
30385 out.length = 19;
30386 /* k = 0 */
30387 lo = Math.imul(al0, bl0);
30388 mid = Math.imul(al0, bh0);
30389 mid = (mid + Math.imul(ah0, bl0)) | 0;
30390 hi = Math.imul(ah0, bh0);
30391 var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30392 c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
30393 w0 &= 0x3ffffff;
30394 /* k = 1 */
30395 lo = Math.imul(al1, bl0);
30396 mid = Math.imul(al1, bh0);
30397 mid = (mid + Math.imul(ah1, bl0)) | 0;
30398 hi = Math.imul(ah1, bh0);
30399 lo = (lo + Math.imul(al0, bl1)) | 0;
30400 mid = (mid + Math.imul(al0, bh1)) | 0;
30401 mid = (mid + Math.imul(ah0, bl1)) | 0;
30402 hi = (hi + Math.imul(ah0, bh1)) | 0;
30403 var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30404 c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
30405 w1 &= 0x3ffffff;
30406 /* k = 2 */
30407 lo = Math.imul(al2, bl0);
30408 mid = Math.imul(al2, bh0);
30409 mid = (mid + Math.imul(ah2, bl0)) | 0;
30410 hi = Math.imul(ah2, bh0);
30411 lo = (lo + Math.imul(al1, bl1)) | 0;
30412 mid = (mid + Math.imul(al1, bh1)) | 0;
30413 mid = (mid + Math.imul(ah1, bl1)) | 0;
30414 hi = (hi + Math.imul(ah1, bh1)) | 0;
30415 lo = (lo + Math.imul(al0, bl2)) | 0;
30416 mid = (mid + Math.imul(al0, bh2)) | 0;
30417 mid = (mid + Math.imul(ah0, bl2)) | 0;
30418 hi = (hi + Math.imul(ah0, bh2)) | 0;
30419 var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30420 c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
30421 w2 &= 0x3ffffff;
30422 /* k = 3 */
30423 lo = Math.imul(al3, bl0);
30424 mid = Math.imul(al3, bh0);
30425 mid = (mid + Math.imul(ah3, bl0)) | 0;
30426 hi = Math.imul(ah3, bh0);
30427 lo = (lo + Math.imul(al2, bl1)) | 0;
30428 mid = (mid + Math.imul(al2, bh1)) | 0;
30429 mid = (mid + Math.imul(ah2, bl1)) | 0;
30430 hi = (hi + Math.imul(ah2, bh1)) | 0;
30431 lo = (lo + Math.imul(al1, bl2)) | 0;
30432 mid = (mid + Math.imul(al1, bh2)) | 0;
30433 mid = (mid + Math.imul(ah1, bl2)) | 0;
30434 hi = (hi + Math.imul(ah1, bh2)) | 0;
30435 lo = (lo + Math.imul(al0, bl3)) | 0;
30436 mid = (mid + Math.imul(al0, bh3)) | 0;
30437 mid = (mid + Math.imul(ah0, bl3)) | 0;
30438 hi = (hi + Math.imul(ah0, bh3)) | 0;
30439 var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30440 c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
30441 w3 &= 0x3ffffff;
30442 /* k = 4 */
30443 lo = Math.imul(al4, bl0);
30444 mid = Math.imul(al4, bh0);
30445 mid = (mid + Math.imul(ah4, bl0)) | 0;
30446 hi = Math.imul(ah4, bh0);
30447 lo = (lo + Math.imul(al3, bl1)) | 0;
30448 mid = (mid + Math.imul(al3, bh1)) | 0;
30449 mid = (mid + Math.imul(ah3, bl1)) | 0;
30450 hi = (hi + Math.imul(ah3, bh1)) | 0;
30451 lo = (lo + Math.imul(al2, bl2)) | 0;
30452 mid = (mid + Math.imul(al2, bh2)) | 0;
30453 mid = (mid + Math.imul(ah2, bl2)) | 0;
30454 hi = (hi + Math.imul(ah2, bh2)) | 0;
30455 lo = (lo + Math.imul(al1, bl3)) | 0;
30456 mid = (mid + Math.imul(al1, bh3)) | 0;
30457 mid = (mid + Math.imul(ah1, bl3)) | 0;
30458 hi = (hi + Math.imul(ah1, bh3)) | 0;
30459 lo = (lo + Math.imul(al0, bl4)) | 0;
30460 mid = (mid + Math.imul(al0, bh4)) | 0;
30461 mid = (mid + Math.imul(ah0, bl4)) | 0;
30462 hi = (hi + Math.imul(ah0, bh4)) | 0;
30463 var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30464 c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
30465 w4 &= 0x3ffffff;
30466 /* k = 5 */
30467 lo = Math.imul(al5, bl0);
30468 mid = Math.imul(al5, bh0);
30469 mid = (mid + Math.imul(ah5, bl0)) | 0;
30470 hi = Math.imul(ah5, bh0);
30471 lo = (lo + Math.imul(al4, bl1)) | 0;
30472 mid = (mid + Math.imul(al4, bh1)) | 0;
30473 mid = (mid + Math.imul(ah4, bl1)) | 0;
30474 hi = (hi + Math.imul(ah4, bh1)) | 0;
30475 lo = (lo + Math.imul(al3, bl2)) | 0;
30476 mid = (mid + Math.imul(al3, bh2)) | 0;
30477 mid = (mid + Math.imul(ah3, bl2)) | 0;
30478 hi = (hi + Math.imul(ah3, bh2)) | 0;
30479 lo = (lo + Math.imul(al2, bl3)) | 0;
30480 mid = (mid + Math.imul(al2, bh3)) | 0;
30481 mid = (mid + Math.imul(ah2, bl3)) | 0;
30482 hi = (hi + Math.imul(ah2, bh3)) | 0;
30483 lo = (lo + Math.imul(al1, bl4)) | 0;
30484 mid = (mid + Math.imul(al1, bh4)) | 0;
30485 mid = (mid + Math.imul(ah1, bl4)) | 0;
30486 hi = (hi + Math.imul(ah1, bh4)) | 0;
30487 lo = (lo + Math.imul(al0, bl5)) | 0;
30488 mid = (mid + Math.imul(al0, bh5)) | 0;
30489 mid = (mid + Math.imul(ah0, bl5)) | 0;
30490 hi = (hi + Math.imul(ah0, bh5)) | 0;
30491 var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30492 c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
30493 w5 &= 0x3ffffff;
30494 /* k = 6 */
30495 lo = Math.imul(al6, bl0);
30496 mid = Math.imul(al6, bh0);
30497 mid = (mid + Math.imul(ah6, bl0)) | 0;
30498 hi = Math.imul(ah6, bh0);
30499 lo = (lo + Math.imul(al5, bl1)) | 0;
30500 mid = (mid + Math.imul(al5, bh1)) | 0;
30501 mid = (mid + Math.imul(ah5, bl1)) | 0;
30502 hi = (hi + Math.imul(ah5, bh1)) | 0;
30503 lo = (lo + Math.imul(al4, bl2)) | 0;
30504 mid = (mid + Math.imul(al4, bh2)) | 0;
30505 mid = (mid + Math.imul(ah4, bl2)) | 0;
30506 hi = (hi + Math.imul(ah4, bh2)) | 0;
30507 lo = (lo + Math.imul(al3, bl3)) | 0;
30508 mid = (mid + Math.imul(al3, bh3)) | 0;
30509 mid = (mid + Math.imul(ah3, bl3)) | 0;
30510 hi = (hi + Math.imul(ah3, bh3)) | 0;
30511 lo = (lo + Math.imul(al2, bl4)) | 0;
30512 mid = (mid + Math.imul(al2, bh4)) | 0;
30513 mid = (mid + Math.imul(ah2, bl4)) | 0;
30514 hi = (hi + Math.imul(ah2, bh4)) | 0;
30515 lo = (lo + Math.imul(al1, bl5)) | 0;
30516 mid = (mid + Math.imul(al1, bh5)) | 0;
30517 mid = (mid + Math.imul(ah1, bl5)) | 0;
30518 hi = (hi + Math.imul(ah1, bh5)) | 0;
30519 lo = (lo + Math.imul(al0, bl6)) | 0;
30520 mid = (mid + Math.imul(al0, bh6)) | 0;
30521 mid = (mid + Math.imul(ah0, bl6)) | 0;
30522 hi = (hi + Math.imul(ah0, bh6)) | 0;
30523 var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30524 c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
30525 w6 &= 0x3ffffff;
30526 /* k = 7 */
30527 lo = Math.imul(al7, bl0);
30528 mid = Math.imul(al7, bh0);
30529 mid = (mid + Math.imul(ah7, bl0)) | 0;
30530 hi = Math.imul(ah7, bh0);
30531 lo = (lo + Math.imul(al6, bl1)) | 0;
30532 mid = (mid + Math.imul(al6, bh1)) | 0;
30533 mid = (mid + Math.imul(ah6, bl1)) | 0;
30534 hi = (hi + Math.imul(ah6, bh1)) | 0;
30535 lo = (lo + Math.imul(al5, bl2)) | 0;
30536 mid = (mid + Math.imul(al5, bh2)) | 0;
30537 mid = (mid + Math.imul(ah5, bl2)) | 0;
30538 hi = (hi + Math.imul(ah5, bh2)) | 0;
30539 lo = (lo + Math.imul(al4, bl3)) | 0;
30540 mid = (mid + Math.imul(al4, bh3)) | 0;
30541 mid = (mid + Math.imul(ah4, bl3)) | 0;
30542 hi = (hi + Math.imul(ah4, bh3)) | 0;
30543 lo = (lo + Math.imul(al3, bl4)) | 0;
30544 mid = (mid + Math.imul(al3, bh4)) | 0;
30545 mid = (mid + Math.imul(ah3, bl4)) | 0;
30546 hi = (hi + Math.imul(ah3, bh4)) | 0;
30547 lo = (lo + Math.imul(al2, bl5)) | 0;
30548 mid = (mid + Math.imul(al2, bh5)) | 0;
30549 mid = (mid + Math.imul(ah2, bl5)) | 0;
30550 hi = (hi + Math.imul(ah2, bh5)) | 0;
30551 lo = (lo + Math.imul(al1, bl6)) | 0;
30552 mid = (mid + Math.imul(al1, bh6)) | 0;
30553 mid = (mid + Math.imul(ah1, bl6)) | 0;
30554 hi = (hi + Math.imul(ah1, bh6)) | 0;
30555 lo = (lo + Math.imul(al0, bl7)) | 0;
30556 mid = (mid + Math.imul(al0, bh7)) | 0;
30557 mid = (mid + Math.imul(ah0, bl7)) | 0;
30558 hi = (hi + Math.imul(ah0, bh7)) | 0;
30559 var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30560 c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
30561 w7 &= 0x3ffffff;
30562 /* k = 8 */
30563 lo = Math.imul(al8, bl0);
30564 mid = Math.imul(al8, bh0);
30565 mid = (mid + Math.imul(ah8, bl0)) | 0;
30566 hi = Math.imul(ah8, bh0);
30567 lo = (lo + Math.imul(al7, bl1)) | 0;
30568 mid = (mid + Math.imul(al7, bh1)) | 0;
30569 mid = (mid + Math.imul(ah7, bl1)) | 0;
30570 hi = (hi + Math.imul(ah7, bh1)) | 0;
30571 lo = (lo + Math.imul(al6, bl2)) | 0;
30572 mid = (mid + Math.imul(al6, bh2)) | 0;
30573 mid = (mid + Math.imul(ah6, bl2)) | 0;
30574 hi = (hi + Math.imul(ah6, bh2)) | 0;
30575 lo = (lo + Math.imul(al5, bl3)) | 0;
30576 mid = (mid + Math.imul(al5, bh3)) | 0;
30577 mid = (mid + Math.imul(ah5, bl3)) | 0;
30578 hi = (hi + Math.imul(ah5, bh3)) | 0;
30579 lo = (lo + Math.imul(al4, bl4)) | 0;
30580 mid = (mid + Math.imul(al4, bh4)) | 0;
30581 mid = (mid + Math.imul(ah4, bl4)) | 0;
30582 hi = (hi + Math.imul(ah4, bh4)) | 0;
30583 lo = (lo + Math.imul(al3, bl5)) | 0;
30584 mid = (mid + Math.imul(al3, bh5)) | 0;
30585 mid = (mid + Math.imul(ah3, bl5)) | 0;
30586 hi = (hi + Math.imul(ah3, bh5)) | 0;
30587 lo = (lo + Math.imul(al2, bl6)) | 0;
30588 mid = (mid + Math.imul(al2, bh6)) | 0;
30589 mid = (mid + Math.imul(ah2, bl6)) | 0;
30590 hi = (hi + Math.imul(ah2, bh6)) | 0;
30591 lo = (lo + Math.imul(al1, bl7)) | 0;
30592 mid = (mid + Math.imul(al1, bh7)) | 0;
30593 mid = (mid + Math.imul(ah1, bl7)) | 0;
30594 hi = (hi + Math.imul(ah1, bh7)) | 0;
30595 lo = (lo + Math.imul(al0, bl8)) | 0;
30596 mid = (mid + Math.imul(al0, bh8)) | 0;
30597 mid = (mid + Math.imul(ah0, bl8)) | 0;
30598 hi = (hi + Math.imul(ah0, bh8)) | 0;
30599 var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30600 c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
30601 w8 &= 0x3ffffff;
30602 /* k = 9 */
30603 lo = Math.imul(al9, bl0);
30604 mid = Math.imul(al9, bh0);
30605 mid = (mid + Math.imul(ah9, bl0)) | 0;
30606 hi = Math.imul(ah9, bh0);
30607 lo = (lo + Math.imul(al8, bl1)) | 0;
30608 mid = (mid + Math.imul(al8, bh1)) | 0;
30609 mid = (mid + Math.imul(ah8, bl1)) | 0;
30610 hi = (hi + Math.imul(ah8, bh1)) | 0;
30611 lo = (lo + Math.imul(al7, bl2)) | 0;
30612 mid = (mid + Math.imul(al7, bh2)) | 0;
30613 mid = (mid + Math.imul(ah7, bl2)) | 0;
30614 hi = (hi + Math.imul(ah7, bh2)) | 0;
30615 lo = (lo + Math.imul(al6, bl3)) | 0;
30616 mid = (mid + Math.imul(al6, bh3)) | 0;
30617 mid = (mid + Math.imul(ah6, bl3)) | 0;
30618 hi = (hi + Math.imul(ah6, bh3)) | 0;
30619 lo = (lo + Math.imul(al5, bl4)) | 0;
30620 mid = (mid + Math.imul(al5, bh4)) | 0;
30621 mid = (mid + Math.imul(ah5, bl4)) | 0;
30622 hi = (hi + Math.imul(ah5, bh4)) | 0;
30623 lo = (lo + Math.imul(al4, bl5)) | 0;
30624 mid = (mid + Math.imul(al4, bh5)) | 0;
30625 mid = (mid + Math.imul(ah4, bl5)) | 0;
30626 hi = (hi + Math.imul(ah4, bh5)) | 0;
30627 lo = (lo + Math.imul(al3, bl6)) | 0;
30628 mid = (mid + Math.imul(al3, bh6)) | 0;
30629 mid = (mid + Math.imul(ah3, bl6)) | 0;
30630 hi = (hi + Math.imul(ah3, bh6)) | 0;
30631 lo = (lo + Math.imul(al2, bl7)) | 0;
30632 mid = (mid + Math.imul(al2, bh7)) | 0;
30633 mid = (mid + Math.imul(ah2, bl7)) | 0;
30634 hi = (hi + Math.imul(ah2, bh7)) | 0;
30635 lo = (lo + Math.imul(al1, bl8)) | 0;
30636 mid = (mid + Math.imul(al1, bh8)) | 0;
30637 mid = (mid + Math.imul(ah1, bl8)) | 0;
30638 hi = (hi + Math.imul(ah1, bh8)) | 0;
30639 lo = (lo + Math.imul(al0, bl9)) | 0;
30640 mid = (mid + Math.imul(al0, bh9)) | 0;
30641 mid = (mid + Math.imul(ah0, bl9)) | 0;
30642 hi = (hi + Math.imul(ah0, bh9)) | 0;
30643 var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30644 c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
30645 w9 &= 0x3ffffff;
30646 /* k = 10 */
30647 lo = Math.imul(al9, bl1);
30648 mid = Math.imul(al9, bh1);
30649 mid = (mid + Math.imul(ah9, bl1)) | 0;
30650 hi = Math.imul(ah9, bh1);
30651 lo = (lo + Math.imul(al8, bl2)) | 0;
30652 mid = (mid + Math.imul(al8, bh2)) | 0;
30653 mid = (mid + Math.imul(ah8, bl2)) | 0;
30654 hi = (hi + Math.imul(ah8, bh2)) | 0;
30655 lo = (lo + Math.imul(al7, bl3)) | 0;
30656 mid = (mid + Math.imul(al7, bh3)) | 0;
30657 mid = (mid + Math.imul(ah7, bl3)) | 0;
30658 hi = (hi + Math.imul(ah7, bh3)) | 0;
30659 lo = (lo + Math.imul(al6, bl4)) | 0;
30660 mid = (mid + Math.imul(al6, bh4)) | 0;
30661 mid = (mid + Math.imul(ah6, bl4)) | 0;
30662 hi = (hi + Math.imul(ah6, bh4)) | 0;
30663 lo = (lo + Math.imul(al5, bl5)) | 0;
30664 mid = (mid + Math.imul(al5, bh5)) | 0;
30665 mid = (mid + Math.imul(ah5, bl5)) | 0;
30666 hi = (hi + Math.imul(ah5, bh5)) | 0;
30667 lo = (lo + Math.imul(al4, bl6)) | 0;
30668 mid = (mid + Math.imul(al4, bh6)) | 0;
30669 mid = (mid + Math.imul(ah4, bl6)) | 0;
30670 hi = (hi + Math.imul(ah4, bh6)) | 0;
30671 lo = (lo + Math.imul(al3, bl7)) | 0;
30672 mid = (mid + Math.imul(al3, bh7)) | 0;
30673 mid = (mid + Math.imul(ah3, bl7)) | 0;
30674 hi = (hi + Math.imul(ah3, bh7)) | 0;
30675 lo = (lo + Math.imul(al2, bl8)) | 0;
30676 mid = (mid + Math.imul(al2, bh8)) | 0;
30677 mid = (mid + Math.imul(ah2, bl8)) | 0;
30678 hi = (hi + Math.imul(ah2, bh8)) | 0;
30679 lo = (lo + Math.imul(al1, bl9)) | 0;
30680 mid = (mid + Math.imul(al1, bh9)) | 0;
30681 mid = (mid + Math.imul(ah1, bl9)) | 0;
30682 hi = (hi + Math.imul(ah1, bh9)) | 0;
30683 var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30684 c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
30685 w10 &= 0x3ffffff;
30686 /* k = 11 */
30687 lo = Math.imul(al9, bl2);
30688 mid = Math.imul(al9, bh2);
30689 mid = (mid + Math.imul(ah9, bl2)) | 0;
30690 hi = Math.imul(ah9, bh2);
30691 lo = (lo + Math.imul(al8, bl3)) | 0;
30692 mid = (mid + Math.imul(al8, bh3)) | 0;
30693 mid = (mid + Math.imul(ah8, bl3)) | 0;
30694 hi = (hi + Math.imul(ah8, bh3)) | 0;
30695 lo = (lo + Math.imul(al7, bl4)) | 0;
30696 mid = (mid + Math.imul(al7, bh4)) | 0;
30697 mid = (mid + Math.imul(ah7, bl4)) | 0;
30698 hi = (hi + Math.imul(ah7, bh4)) | 0;
30699 lo = (lo + Math.imul(al6, bl5)) | 0;
30700 mid = (mid + Math.imul(al6, bh5)) | 0;
30701 mid = (mid + Math.imul(ah6, bl5)) | 0;
30702 hi = (hi + Math.imul(ah6, bh5)) | 0;
30703 lo = (lo + Math.imul(al5, bl6)) | 0;
30704 mid = (mid + Math.imul(al5, bh6)) | 0;
30705 mid = (mid + Math.imul(ah5, bl6)) | 0;
30706 hi = (hi + Math.imul(ah5, bh6)) | 0;
30707 lo = (lo + Math.imul(al4, bl7)) | 0;
30708 mid = (mid + Math.imul(al4, bh7)) | 0;
30709 mid = (mid + Math.imul(ah4, bl7)) | 0;
30710 hi = (hi + Math.imul(ah4, bh7)) | 0;
30711 lo = (lo + Math.imul(al3, bl8)) | 0;
30712 mid = (mid + Math.imul(al3, bh8)) | 0;
30713 mid = (mid + Math.imul(ah3, bl8)) | 0;
30714 hi = (hi + Math.imul(ah3, bh8)) | 0;
30715 lo = (lo + Math.imul(al2, bl9)) | 0;
30716 mid = (mid + Math.imul(al2, bh9)) | 0;
30717 mid = (mid + Math.imul(ah2, bl9)) | 0;
30718 hi = (hi + Math.imul(ah2, bh9)) | 0;
30719 var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30720 c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
30721 w11 &= 0x3ffffff;
30722 /* k = 12 */
30723 lo = Math.imul(al9, bl3);
30724 mid = Math.imul(al9, bh3);
30725 mid = (mid + Math.imul(ah9, bl3)) | 0;
30726 hi = Math.imul(ah9, bh3);
30727 lo = (lo + Math.imul(al8, bl4)) | 0;
30728 mid = (mid + Math.imul(al8, bh4)) | 0;
30729 mid = (mid + Math.imul(ah8, bl4)) | 0;
30730 hi = (hi + Math.imul(ah8, bh4)) | 0;
30731 lo = (lo + Math.imul(al7, bl5)) | 0;
30732 mid = (mid + Math.imul(al7, bh5)) | 0;
30733 mid = (mid + Math.imul(ah7, bl5)) | 0;
30734 hi = (hi + Math.imul(ah7, bh5)) | 0;
30735 lo = (lo + Math.imul(al6, bl6)) | 0;
30736 mid = (mid + Math.imul(al6, bh6)) | 0;
30737 mid = (mid + Math.imul(ah6, bl6)) | 0;
30738 hi = (hi + Math.imul(ah6, bh6)) | 0;
30739 lo = (lo + Math.imul(al5, bl7)) | 0;
30740 mid = (mid + Math.imul(al5, bh7)) | 0;
30741 mid = (mid + Math.imul(ah5, bl7)) | 0;
30742 hi = (hi + Math.imul(ah5, bh7)) | 0;
30743 lo = (lo + Math.imul(al4, bl8)) | 0;
30744 mid = (mid + Math.imul(al4, bh8)) | 0;
30745 mid = (mid + Math.imul(ah4, bl8)) | 0;
30746 hi = (hi + Math.imul(ah4, bh8)) | 0;
30747 lo = (lo + Math.imul(al3, bl9)) | 0;
30748 mid = (mid + Math.imul(al3, bh9)) | 0;
30749 mid = (mid + Math.imul(ah3, bl9)) | 0;
30750 hi = (hi + Math.imul(ah3, bh9)) | 0;
30751 var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30752 c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
30753 w12 &= 0x3ffffff;
30754 /* k = 13 */
30755 lo = Math.imul(al9, bl4);
30756 mid = Math.imul(al9, bh4);
30757 mid = (mid + Math.imul(ah9, bl4)) | 0;
30758 hi = Math.imul(ah9, bh4);
30759 lo = (lo + Math.imul(al8, bl5)) | 0;
30760 mid = (mid + Math.imul(al8, bh5)) | 0;
30761 mid = (mid + Math.imul(ah8, bl5)) | 0;
30762 hi = (hi + Math.imul(ah8, bh5)) | 0;
30763 lo = (lo + Math.imul(al7, bl6)) | 0;
30764 mid = (mid + Math.imul(al7, bh6)) | 0;
30765 mid = (mid + Math.imul(ah7, bl6)) | 0;
30766 hi = (hi + Math.imul(ah7, bh6)) | 0;
30767 lo = (lo + Math.imul(al6, bl7)) | 0;
30768 mid = (mid + Math.imul(al6, bh7)) | 0;
30769 mid = (mid + Math.imul(ah6, bl7)) | 0;
30770 hi = (hi + Math.imul(ah6, bh7)) | 0;
30771 lo = (lo + Math.imul(al5, bl8)) | 0;
30772 mid = (mid + Math.imul(al5, bh8)) | 0;
30773 mid = (mid + Math.imul(ah5, bl8)) | 0;
30774 hi = (hi + Math.imul(ah5, bh8)) | 0;
30775 lo = (lo + Math.imul(al4, bl9)) | 0;
30776 mid = (mid + Math.imul(al4, bh9)) | 0;
30777 mid = (mid + Math.imul(ah4, bl9)) | 0;
30778 hi = (hi + Math.imul(ah4, bh9)) | 0;
30779 var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30780 c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
30781 w13 &= 0x3ffffff;
30782 /* k = 14 */
30783 lo = Math.imul(al9, bl5);
30784 mid = Math.imul(al9, bh5);
30785 mid = (mid + Math.imul(ah9, bl5)) | 0;
30786 hi = Math.imul(ah9, bh5);
30787 lo = (lo + Math.imul(al8, bl6)) | 0;
30788 mid = (mid + Math.imul(al8, bh6)) | 0;
30789 mid = (mid + Math.imul(ah8, bl6)) | 0;
30790 hi = (hi + Math.imul(ah8, bh6)) | 0;
30791 lo = (lo + Math.imul(al7, bl7)) | 0;
30792 mid = (mid + Math.imul(al7, bh7)) | 0;
30793 mid = (mid + Math.imul(ah7, bl7)) | 0;
30794 hi = (hi + Math.imul(ah7, bh7)) | 0;
30795 lo = (lo + Math.imul(al6, bl8)) | 0;
30796 mid = (mid + Math.imul(al6, bh8)) | 0;
30797 mid = (mid + Math.imul(ah6, bl8)) | 0;
30798 hi = (hi + Math.imul(ah6, bh8)) | 0;
30799 lo = (lo + Math.imul(al5, bl9)) | 0;
30800 mid = (mid + Math.imul(al5, bh9)) | 0;
30801 mid = (mid + Math.imul(ah5, bl9)) | 0;
30802 hi = (hi + Math.imul(ah5, bh9)) | 0;
30803 var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30804 c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
30805 w14 &= 0x3ffffff;
30806 /* k = 15 */
30807 lo = Math.imul(al9, bl6);
30808 mid = Math.imul(al9, bh6);
30809 mid = (mid + Math.imul(ah9, bl6)) | 0;
30810 hi = Math.imul(ah9, bh6);
30811 lo = (lo + Math.imul(al8, bl7)) | 0;
30812 mid = (mid + Math.imul(al8, bh7)) | 0;
30813 mid = (mid + Math.imul(ah8, bl7)) | 0;
30814 hi = (hi + Math.imul(ah8, bh7)) | 0;
30815 lo = (lo + Math.imul(al7, bl8)) | 0;
30816 mid = (mid + Math.imul(al7, bh8)) | 0;
30817 mid = (mid + Math.imul(ah7, bl8)) | 0;
30818 hi = (hi + Math.imul(ah7, bh8)) | 0;
30819 lo = (lo + Math.imul(al6, bl9)) | 0;
30820 mid = (mid + Math.imul(al6, bh9)) | 0;
30821 mid = (mid + Math.imul(ah6, bl9)) | 0;
30822 hi = (hi + Math.imul(ah6, bh9)) | 0;
30823 var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30824 c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
30825 w15 &= 0x3ffffff;
30826 /* k = 16 */
30827 lo = Math.imul(al9, bl7);
30828 mid = Math.imul(al9, bh7);
30829 mid = (mid + Math.imul(ah9, bl7)) | 0;
30830 hi = Math.imul(ah9, bh7);
30831 lo = (lo + Math.imul(al8, bl8)) | 0;
30832 mid = (mid + Math.imul(al8, bh8)) | 0;
30833 mid = (mid + Math.imul(ah8, bl8)) | 0;
30834 hi = (hi + Math.imul(ah8, bh8)) | 0;
30835 lo = (lo + Math.imul(al7, bl9)) | 0;
30836 mid = (mid + Math.imul(al7, bh9)) | 0;
30837 mid = (mid + Math.imul(ah7, bl9)) | 0;
30838 hi = (hi + Math.imul(ah7, bh9)) | 0;
30839 var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30840 c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
30841 w16 &= 0x3ffffff;
30842 /* k = 17 */
30843 lo = Math.imul(al9, bl8);
30844 mid = Math.imul(al9, bh8);
30845 mid = (mid + Math.imul(ah9, bl8)) | 0;
30846 hi = Math.imul(ah9, bh8);
30847 lo = (lo + Math.imul(al8, bl9)) | 0;
30848 mid = (mid + Math.imul(al8, bh9)) | 0;
30849 mid = (mid + Math.imul(ah8, bl9)) | 0;
30850 hi = (hi + Math.imul(ah8, bh9)) | 0;
30851 var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30852 c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
30853 w17 &= 0x3ffffff;
30854 /* k = 18 */
30855 lo = Math.imul(al9, bl9);
30856 mid = Math.imul(al9, bh9);
30857 mid = (mid + Math.imul(ah9, bl9)) | 0;
30858 hi = Math.imul(ah9, bh9);
30859 var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30860 c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
30861 w18 &= 0x3ffffff;
30862 o[0] = w0;
30863 o[1] = w1;
30864 o[2] = w2;
30865 o[3] = w3;
30866 o[4] = w4;
30867 o[5] = w5;
30868 o[6] = w6;
30869 o[7] = w7;
30870 o[8] = w8;
30871 o[9] = w9;
30872 o[10] = w10;
30873 o[11] = w11;
30874 o[12] = w12;
30875 o[13] = w13;
30876 o[14] = w14;
30877 o[15] = w15;
30878 o[16] = w16;
30879 o[17] = w17;
30880 o[18] = w18;
30881 if (c !== 0) {
30882 o[19] = c;
30883 out.length++;
ab78acc6 30884 }
8b095871
IC
30885 return out;
30886 };
30887
30888 // Polyfill comb
30889 if (!Math.imul) {
30890 comb10MulTo = smallMulTo;
30891 }
30892
30893 function bigMulTo (self, num, out) {
30894 out.negative = num.negative ^ self.negative;
30895 out.length = self.length + num.length;
30896
30897 var carry = 0;
30898 var hncarry = 0;
30899 for (var k = 0; k < out.length - 1; k++) {
30900 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
30901 // note that ncarry could be >= 0x3ffffff
30902 var ncarry = hncarry;
30903 hncarry = 0;
30904 var rword = carry & 0x3ffffff;
30905 var maxJ = Math.min(k, num.length - 1);
30906 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
30907 var i = k - j;
30908 var a = self.words[i] | 0;
30909 var b = num.words[j] | 0;
30910 var r = a * b;
30911
30912 var lo = r & 0x3ffffff;
30913 ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
30914 lo = (lo + rword) | 0;
30915 rword = lo & 0x3ffffff;
30916 ncarry = (ncarry + (lo >>> 26)) | 0;
30917
30918 hncarry += ncarry >>> 26;
30919 ncarry &= 0x3ffffff;
30920 }
30921 out.words[k] = rword;
30922 carry = ncarry;
30923 ncarry = hncarry;
30924 }
30925 if (carry !== 0) {
30926 out.words[k] = carry;
30927 } else {
30928 out.length--;
ab78acc6 30929 }
8b095871
IC
30930
30931 return out.strip();
ab78acc6 30932 }
8b095871
IC
30933
30934 function jumboMulTo (self, num, out) {
30935 var fftm = new FFTM();
30936 return fftm.mulp(self, num, out);
ab78acc6 30937 }
8b095871
IC
30938
30939 BN.prototype.mulTo = function mulTo (num, out) {
30940 var res;
30941 var len = this.length + num.length;
30942 if (this.length === 10 && num.length === 10) {
30943 res = comb10MulTo(this, num, out);
30944 } else if (len < 63) {
30945 res = smallMulTo(this, num, out);
30946 } else if (len < 1024) {
30947 res = bigMulTo(this, num, out);
ab78acc6 30948 } else {
8b095871 30949 res = jumboMulTo(this, num, out);
ab78acc6 30950 }
8b095871
IC
30951
30952 return res;
30953 };
30954
30955 // Cooley-Tukey algorithm for FFT
30956 // slightly revisited to rely on looping instead of recursion
30957
30958 function FFTM (x, y) {
30959 this.x = x;
30960 this.y = y;
ab78acc6 30961 }
8b095871
IC
30962
30963 FFTM.prototype.makeRBT = function makeRBT (N) {
30964 var t = new Array(N);
30965 var l = BN.prototype._countBits(N) - 1;
30966 for (var i = 0; i < N; i++) {
30967 t[i] = this.revBin(i, l, N);
30968 }
30969
30970 return t;
30971 };
30972
30973 // Returns binary-reversed representation of `x`
30974 FFTM.prototype.revBin = function revBin (x, l, N) {
30975 if (x === 0 || x === N - 1) return x;
30976
30977 var rb = 0;
30978 for (var i = 0; i < l; i++) {
30979 rb |= (x & 1) << (l - i - 1);
30980 x >>= 1;
30981 }
30982
30983 return rb;
30984 };
30985
30986 // Performs "tweedling" phase, therefore 'emulating'
30987 // behaviour of the recursive algorithm
30988 FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
30989 for (var i = 0; i < N; i++) {
30990 rtws[i] = rws[rbt[i]];
30991 itws[i] = iws[rbt[i]];
30992 }
30993 };
30994
30995 FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
30996 this.permute(rbt, rws, iws, rtws, itws, N);
30997
30998 for (var s = 1; s < N; s <<= 1) {
30999 var l = s << 1;
31000
31001 var rtwdf = Math.cos(2 * Math.PI / l);
31002 var itwdf = Math.sin(2 * Math.PI / l);
31003
31004 for (var p = 0; p < N; p += l) {
31005 var rtwdf_ = rtwdf;
31006 var itwdf_ = itwdf;
31007
31008 for (var j = 0; j < s; j++) {
31009 var re = rtws[p + j];
31010 var ie = itws[p + j];
31011
31012 var ro = rtws[p + j + s];
31013 var io = itws[p + j + s];
31014
31015 var rx = rtwdf_ * ro - itwdf_ * io;
31016
31017 io = rtwdf_ * io + itwdf_ * ro;
31018 ro = rx;
31019
31020 rtws[p + j] = re + ro;
31021 itws[p + j] = ie + io;
31022
31023 rtws[p + j + s] = re - ro;
31024 itws[p + j + s] = ie - io;
31025
31026 /* jshint maxdepth : false */
31027 if (j !== l) {
31028 rx = rtwdf * rtwdf_ - itwdf * itwdf_;
31029
31030 itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
31031 rtwdf_ = rx;
31032 }
31033 }
31034 }
ab78acc6 31035 }
8b095871
IC
31036 };
31037
31038 FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
31039 var N = Math.max(m, n) | 1;
31040 var odd = N & 1;
31041 var i = 0;
31042 for (N = N / 2 | 0; N; N = N >>> 1) {
31043 i++;
ab78acc6 31044 }
ebd8d4e8 31045
8b095871
IC
31046 return 1 << i + 1 + odd;
31047 };
ebd8d4e8 31048
8b095871
IC
31049 FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
31050 if (N <= 1) return;
ebd8d4e8 31051
8b095871
IC
31052 for (var i = 0; i < N / 2; i++) {
31053 var t = rws[i];
ebd8d4e8 31054
8b095871
IC
31055 rws[i] = rws[N - i - 1];
31056 rws[N - i - 1] = t;
ebd8d4e8 31057
8b095871 31058 t = iws[i];
ebd8d4e8 31059
8b095871
IC
31060 iws[i] = -iws[N - i - 1];
31061 iws[N - i - 1] = -t;
31062 }
31063 };
ebd8d4e8 31064
8b095871
IC
31065 FFTM.prototype.normalize13b = function normalize13b (ws, N) {
31066 var carry = 0;
31067 for (var i = 0; i < N / 2; i++) {
31068 var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
31069 Math.round(ws[2 * i] / N) +
31070 carry;
ebd8d4e8 31071
8b095871 31072 ws[i] = w & 0x3ffffff;
ebd8d4e8 31073
8b095871
IC
31074 if (w < 0x4000000) {
31075 carry = 0;
31076 } else {
31077 carry = w / 0x4000000 | 0;
31078 }
31079 }
ebd8d4e8 31080
8b095871
IC
31081 return ws;
31082 };
ebd8d4e8 31083
8b095871
IC
31084 FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
31085 var carry = 0;
31086 for (var i = 0; i < len; i++) {
31087 carry = carry + (ws[i] | 0);
ebd8d4e8 31088
8b095871
IC
31089 rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
31090 rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
31091 }
ebd8d4e8 31092
8b095871
IC
31093 // Pad with zeroes
31094 for (i = 2 * len; i < N; ++i) {
31095 rws[i] = 0;
31096 }
ebd8d4e8 31097
8b095871
IC
31098 assert(carry === 0);
31099 assert((carry & ~0x1fff) === 0);
31100 };
ebd8d4e8 31101
8b095871
IC
31102 FFTM.prototype.stub = function stub (N) {
31103 var ph = new Array(N);
31104 for (var i = 0; i < N; i++) {
31105 ph[i] = 0;
31106 }
ebd8d4e8 31107
8b095871
IC
31108 return ph;
31109 };
ebd8d4e8 31110
8b095871
IC
31111 FFTM.prototype.mulp = function mulp (x, y, out) {
31112 var N = 2 * this.guessLen13b(x.length, y.length);
ebd8d4e8 31113
8b095871 31114 var rbt = this.makeRBT(N);
ebd8d4e8 31115
8b095871 31116 var _ = this.stub(N);
ebd8d4e8 31117
8b095871
IC
31118 var rws = new Array(N);
31119 var rwst = new Array(N);
31120 var iwst = new Array(N);
ebd8d4e8 31121
8b095871
IC
31122 var nrws = new Array(N);
31123 var nrwst = new Array(N);
31124 var niwst = new Array(N);
ebd8d4e8 31125
8b095871
IC
31126 var rmws = out.words;
31127 rmws.length = N;
ebd8d4e8 31128
8b095871
IC
31129 this.convert13b(x.words, x.length, rws, N);
31130 this.convert13b(y.words, y.length, nrws, N);
ebd8d4e8 31131
8b095871
IC
31132 this.transform(rws, _, rwst, iwst, N, rbt);
31133 this.transform(nrws, _, nrwst, niwst, N, rbt);
ebd8d4e8 31134
8b095871
IC
31135 for (var i = 0; i < N; i++) {
31136 var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
31137 iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
31138 rwst[i] = rx;
31139 }
ebd8d4e8 31140
8b095871
IC
31141 this.conjugate(rwst, iwst, N);
31142 this.transform(rwst, iwst, rmws, _, N, rbt);
31143 this.conjugate(rmws, _, N);
31144 this.normalize13b(rmws, N);
ebd8d4e8 31145
8b095871
IC
31146 out.negative = x.negative ^ y.negative;
31147 out.length = x.length + y.length;
31148 return out.strip();
31149 };
ebd8d4e8 31150
8b095871
IC
31151 // Multiply `this` by `num`
31152 BN.prototype.mul = function mul (num) {
31153 var out = new BN(null);
31154 out.words = new Array(this.length + num.length);
31155 return this.mulTo(num, out);
31156 };
ab78acc6 31157
8b095871
IC
31158 // Multiply employing FFT
31159 BN.prototype.mulf = function mulf (num) {
31160 var out = new BN(null);
31161 out.words = new Array(this.length + num.length);
31162 return jumboMulTo(this, num, out);
31163 };
ebd8d4e8 31164
8b095871
IC
31165 // In-place Multiplication
31166 BN.prototype.imul = function imul (num) {
31167 return this.clone().mulTo(num, this);
31168 };
ab78acc6 31169
8b095871
IC
31170 BN.prototype.imuln = function imuln (num) {
31171 assert(typeof num === 'number');
31172 assert(num < 0x4000000);
ab78acc6 31173
8b095871
IC
31174 // Carry
31175 var carry = 0;
31176 for (var i = 0; i < this.length; i++) {
31177 var w = (this.words[i] | 0) * num;
31178 var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
31179 carry >>= 26;
31180 carry += (w / 0x4000000) | 0;
31181 // NOTE: lo is 27bit maximum
31182 carry += lo >>> 26;
31183 this.words[i] = lo & 0x3ffffff;
31184 }
ab78acc6 31185
8b095871
IC
31186 if (carry !== 0) {
31187 this.words[i] = carry;
31188 this.length++;
31189 }
ab78acc6 31190
8b095871
IC
31191 return this;
31192 };
ab78acc6 31193
8b095871
IC
31194 BN.prototype.muln = function muln (num) {
31195 return this.clone().imuln(num);
31196 };
ebd8d4e8 31197
8b095871
IC
31198 // `this` * `this`
31199 BN.prototype.sqr = function sqr () {
31200 return this.mul(this);
31201 };
ebd8d4e8 31202
8b095871
IC
31203 // `this` * `this` in-place
31204 BN.prototype.isqr = function isqr () {
31205 return this.imul(this.clone());
31206 };
ab78acc6 31207
8b095871
IC
31208 // Math.pow(`this`, `num`)
31209 BN.prototype.pow = function pow (num) {
31210 var w = toBitArray(num);
31211 if (w.length === 0) return new BN(1);
ab78acc6 31212
8b095871
IC
31213 // Skip leading zeroes
31214 var res = this;
31215 for (var i = 0; i < w.length; i++, res = res.sqr()) {
31216 if (w[i] !== 0) break;
31217 }
ebd8d4e8 31218
8b095871
IC
31219 if (++i < w.length) {
31220 for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
31221 if (w[i] === 0) continue;
ebd8d4e8 31222
8b095871
IC
31223 res = res.mul(q);
31224 }
ab78acc6
IC
31225 }
31226
8b095871
IC
31227 return res;
31228 };
ab78acc6 31229
8b095871
IC
31230 // Shift-left in-place
31231 BN.prototype.iushln = function iushln (bits) {
31232 assert(typeof bits === 'number' && bits >= 0);
31233 var r = bits % 26;
31234 var s = (bits - r) / 26;
31235 var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
31236 var i;
31237
31238 if (r !== 0) {
31239 var carry = 0;
31240
31241 for (i = 0; i < this.length; i++) {
31242 var newCarry = this.words[i] & carryMask;
31243 var c = ((this.words[i] | 0) - newCarry) << r;
31244 this.words[i] = c | carry;
31245 carry = newCarry >>> (26 - r);
31246 }
31247
31248 if (carry) {
31249 this.words[i] = carry;
31250 this.length++;
31251 }
ab78acc6 31252 }
ebd8d4e8 31253
8b095871
IC
31254 if (s !== 0) {
31255 for (i = this.length - 1; i >= 0; i--) {
31256 this.words[i + s] = this.words[i];
31257 }
ebd8d4e8 31258
8b095871
IC
31259 for (i = 0; i < s; i++) {
31260 this.words[i] = 0;
31261 }
ebd8d4e8 31262
8b095871
IC
31263 this.length += s;
31264 }
ebd8d4e8 31265
8b095871
IC
31266 return this.strip();
31267 };
ebd8d4e8 31268
8b095871
IC
31269 BN.prototype.ishln = function ishln (bits) {
31270 // TODO(indutny): implement me
31271 assert(this.negative === 0);
31272 return this.iushln(bits);
31273 };
ebd8d4e8 31274
8b095871
IC
31275 // Shift-right in-place
31276 // NOTE: `hint` is a lowest bit before trailing zeroes
31277 // NOTE: if `extended` is present - it will be filled with destroyed bits
31278 BN.prototype.iushrn = function iushrn (bits, hint, extended) {
31279 assert(typeof bits === 'number' && bits >= 0);
31280 var h;
31281 if (hint) {
31282 h = (hint - (hint % 26)) / 26;
31283 } else {
31284 h = 0;
31285 }
ebd8d4e8 31286
8b095871
IC
31287 var r = bits % 26;
31288 var s = Math.min((bits - r) / 26, this.length);
31289 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
31290 var maskedWords = extended;
31291
31292 h -= s;
31293 h = Math.max(0, h);
31294
31295 // Extended mode, copy masked part
31296 if (maskedWords) {
31297 for (var i = 0; i < s; i++) {
31298 maskedWords.words[i] = this.words[i];
31299 }
31300 maskedWords.length = s;
ab78acc6 31301 }
ebd8d4e8 31302
8b095871
IC
31303 if (s === 0) {
31304 // No-op, we should not move anything at all
31305 } else if (this.length > s) {
31306 this.length -= s;
31307 for (i = 0; i < this.length; i++) {
31308 this.words[i] = this.words[i + s];
31309 }
31310 } else {
31311 this.words[0] = 0;
31312 this.length = 1;
31313 }
ab78acc6 31314
8b095871
IC
31315 var carry = 0;
31316 for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
31317 var word = this.words[i] | 0;
31318 this.words[i] = (carry << (26 - r)) | (word >>> r);
31319 carry = word & mask;
ab78acc6 31320 }
ebd8d4e8 31321
8b095871
IC
31322 // Push carried bits as a mask
31323 if (maskedWords && carry !== 0) {
31324 maskedWords.words[maskedWords.length++] = carry;
31325 }
31326
31327 if (this.length === 0) {
31328 this.words[0] = 0;
31329 this.length = 1;
31330 }
31331
31332 return this.strip();
31333 };
31334
31335 BN.prototype.ishrn = function ishrn (bits, hint, extended) {
31336 // TODO(indutny): implement me
31337 assert(this.negative === 0);
31338 return this.iushrn(bits, hint, extended);
31339 };
31340
31341 // Shift-left
31342 BN.prototype.shln = function shln (bits) {
31343 return this.clone().ishln(bits);
31344 };
31345
31346 BN.prototype.ushln = function ushln (bits) {
31347 return this.clone().iushln(bits);
31348 };
31349
31350 // Shift-right
31351 BN.prototype.shrn = function shrn (bits) {
31352 return this.clone().ishrn(bits);
31353 };
ebd8d4e8 31354
8b095871
IC
31355 BN.prototype.ushrn = function ushrn (bits) {
31356 return this.clone().iushrn(bits);
31357 };
ebd8d4e8 31358
8b095871
IC
31359 // Test if n bit is set
31360 BN.prototype.testn = function testn (bit) {
31361 assert(typeof bit === 'number' && bit >= 0);
31362 var r = bit % 26;
31363 var s = (bit - r) / 26;
31364 var q = 1 << r;
ebd8d4e8 31365
8b095871
IC
31366 // Fast case: bit is much higher than all existing words
31367 if (this.length <= s) return false;
ab78acc6 31368
8b095871
IC
31369 // Check bit and return
31370 var w = this.words[s];
ab78acc6 31371
8b095871
IC
31372 return !!(w & q);
31373 };
ab78acc6 31374
8b095871
IC
31375 // Return only lowers bits of number (in-place)
31376 BN.prototype.imaskn = function imaskn (bits) {
31377 assert(typeof bits === 'number' && bits >= 0);
31378 var r = bits % 26;
31379 var s = (bits - r) / 26;
ab78acc6 31380
8b095871 31381 assert(this.negative === 0, 'imaskn works only with positive numbers');
ab78acc6 31382
8b095871
IC
31383 if (this.length <= s) {
31384 return this;
31385 }
ab78acc6 31386
8b095871
IC
31387 if (r !== 0) {
31388 s++;
31389 }
31390 this.length = Math.min(s, this.length);
ab78acc6 31391
8b095871
IC
31392 if (r !== 0) {
31393 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
31394 this.words[this.length - 1] &= mask;
31395 }
ab78acc6 31396
8b095871
IC
31397 return this.strip();
31398 };
ab78acc6 31399
8b095871
IC
31400 // Return only lowers bits of number
31401 BN.prototype.maskn = function maskn (bits) {
31402 return this.clone().imaskn(bits);
31403 };
ebd8d4e8 31404
8b095871
IC
31405 // Add plain number `num` to `this`
31406 BN.prototype.iaddn = function iaddn (num) {
31407 assert(typeof num === 'number');
31408 assert(num < 0x4000000);
31409 if (num < 0) return this.isubn(-num);
31410
31411 // Possible sign change
31412 if (this.negative !== 0) {
31413 if (this.length === 1 && (this.words[0] | 0) < num) {
31414 this.words[0] = num - (this.words[0] | 0);
31415 this.negative = 0;
31416 return this;
31417 }
ebd8d4e8 31418
8b095871
IC
31419 this.negative = 0;
31420 this.isubn(num);
31421 this.negative = 1;
31422 return this;
31423 }
ebd8d4e8 31424
8b095871
IC
31425 // Add without checks
31426 return this._iaddn(num);
31427 };
ebd8d4e8 31428
8b095871
IC
31429 BN.prototype._iaddn = function _iaddn (num) {
31430 this.words[0] += num;
ebd8d4e8 31431
8b095871
IC
31432 // Carry
31433 for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
31434 this.words[i] -= 0x4000000;
31435 if (i === this.length - 1) {
31436 this.words[i + 1] = 1;
31437 } else {
31438 this.words[i + 1]++;
31439 }
31440 }
31441 this.length = Math.max(this.length, i + 1);
ebd8d4e8 31442
8b095871
IC
31443 return this;
31444 };
ebd8d4e8 31445
8b095871
IC
31446 // Subtract plain number `num` from `this`
31447 BN.prototype.isubn = function isubn (num) {
31448 assert(typeof num === 'number');
31449 assert(num < 0x4000000);
31450 if (num < 0) return this.iaddn(-num);
ebd8d4e8 31451
8b095871
IC
31452 if (this.negative !== 0) {
31453 this.negative = 0;
31454 this.iaddn(num);
31455 this.negative = 1;
31456 return this;
31457 }
ebd8d4e8 31458
8b095871 31459 this.words[0] -= num;
ab78acc6 31460
8b095871
IC
31461 if (this.length === 1 && this.words[0] < 0) {
31462 this.words[0] = -this.words[0];
31463 this.negative = 1;
31464 } else {
31465 // Carry
31466 for (var i = 0; i < this.length && this.words[i] < 0; i++) {
31467 this.words[i] += 0x4000000;
31468 this.words[i + 1] -= 1;
31469 }
31470 }
ebd8d4e8 31471
8b095871
IC
31472 return this.strip();
31473 };
ab78acc6 31474
8b095871
IC
31475 BN.prototype.addn = function addn (num) {
31476 return this.clone().iaddn(num);
31477 };
ab78acc6 31478
8b095871
IC
31479 BN.prototype.subn = function subn (num) {
31480 return this.clone().isubn(num);
31481 };
ab78acc6 31482
8b095871
IC
31483 BN.prototype.iabs = function iabs () {
31484 this.negative = 0;
ab78acc6 31485
8b095871
IC
31486 return this;
31487 };
ab78acc6 31488
8b095871
IC
31489 BN.prototype.abs = function abs () {
31490 return this.clone().iabs();
31491 };
ab78acc6 31492
8b095871
IC
31493 BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
31494 var len = num.length + shift;
31495 var i;
ab78acc6 31496
8b095871 31497 this._expand(len);
ab78acc6 31498
8b095871
IC
31499 var w;
31500 var carry = 0;
31501 for (i = 0; i < num.length; i++) {
31502 w = (this.words[i + shift] | 0) + carry;
31503 var right = (num.words[i] | 0) * mul;
31504 w -= right & 0x3ffffff;
31505 carry = (w >> 26) - ((right / 0x4000000) | 0);
31506 this.words[i + shift] = w & 0x3ffffff;
31507 }
31508 for (; i < this.length - shift; i++) {
31509 w = (this.words[i + shift] | 0) + carry;
31510 carry = w >> 26;
31511 this.words[i + shift] = w & 0x3ffffff;
31512 }
ebd8d4e8 31513
8b095871 31514 if (carry === 0) return this.strip();
ab78acc6 31515
8b095871
IC
31516 // Subtraction overflow
31517 assert(carry === -1);
31518 carry = 0;
31519 for (i = 0; i < this.length; i++) {
31520 w = -(this.words[i] | 0) + carry;
31521 carry = w >> 26;
31522 this.words[i] = w & 0x3ffffff;
31523 }
31524 this.negative = 1;
ab78acc6 31525
8b095871
IC
31526 return this.strip();
31527 };
ab78acc6 31528
8b095871
IC
31529 BN.prototype._wordDiv = function _wordDiv (num, mode) {
31530 var shift = this.length - num.length;
ebd8d4e8 31531
8b095871
IC
31532 var a = this.clone();
31533 var b = num;
ab78acc6 31534
8b095871
IC
31535 // Normalize
31536 var bhi = b.words[b.length - 1] | 0;
31537 var bhiBits = this._countBits(bhi);
31538 shift = 26 - bhiBits;
31539 if (shift !== 0) {
31540 b = b.ushln(shift);
31541 a.iushln(shift);
31542 bhi = b.words[b.length - 1] | 0;
31543 }
ebd8d4e8 31544
8b095871
IC
31545 // Initialize quotient
31546 var m = a.length - b.length;
31547 var q;
ab78acc6 31548
8b095871
IC
31549 if (mode !== 'mod') {
31550 q = new BN(null);
31551 q.length = m + 1;
31552 q.words = new Array(q.length);
31553 for (var i = 0; i < q.length; i++) {
31554 q.words[i] = 0;
31555 }
31556 }
ebd8d4e8 31557
8b095871
IC
31558 var diff = a.clone()._ishlnsubmul(b, 1, m);
31559 if (diff.negative === 0) {
31560 a = diff;
31561 if (q) {
31562 q.words[m] = 1;
31563 }
31564 }
ebd8d4e8 31565
8b095871
IC
31566 for (var j = m - 1; j >= 0; j--) {
31567 var qj = (a.words[b.length + j] | 0) * 0x4000000 +
31568 (a.words[b.length + j - 1] | 0);
ebd8d4e8 31569
8b095871
IC
31570 // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
31571 // (0x7ffffff)
31572 qj = Math.min((qj / bhi) | 0, 0x3ffffff);
ebd8d4e8 31573
8b095871
IC
31574 a._ishlnsubmul(b, qj, j);
31575 while (a.negative !== 0) {
31576 qj--;
31577 a.negative = 0;
31578 a._ishlnsubmul(b, 1, j);
31579 if (!a.isZero()) {
31580 a.negative ^= 1;
31581 }
31582 }
31583 if (q) {
31584 q.words[j] = qj;
31585 }
31586 }
31587 if (q) {
31588 q.strip();
31589 }
31590 a.strip();
ebd8d4e8 31591
8b095871
IC
31592 // Denormalize
31593 if (mode !== 'div' && shift !== 0) {
31594 a.iushrn(shift);
31595 }
ebd8d4e8 31596
8b095871
IC
31597 return {
31598 div: q || null,
31599 mod: a
31600 };
31601 };
ebd8d4e8 31602
8b095871
IC
31603 // NOTE: 1) `mode` can be set to `mod` to request mod only,
31604 // to `div` to request div only, or be absent to
31605 // request both div & mod
31606 // 2) `positive` is true if unsigned mod is requested
31607 BN.prototype.divmod = function divmod (num, mode, positive) {
31608 assert(!num.isZero());
31609
31610 if (this.isZero()) {
31611 return {
31612 div: new BN(0),
31613 mod: new BN(0)
31614 };
31615 }
ebd8d4e8 31616
8b095871
IC
31617 var div, mod, res;
31618 if (this.negative !== 0 && num.negative === 0) {
31619 res = this.neg().divmod(num, mode);
ebd8d4e8 31620
8b095871
IC
31621 if (mode !== 'mod') {
31622 div = res.div.neg();
31623 }
ebd8d4e8 31624
8b095871
IC
31625 if (mode !== 'div') {
31626 mod = res.mod.neg();
31627 if (positive && mod.negative !== 0) {
31628 mod.iadd(num);
31629 }
31630 }
ebd8d4e8 31631
8b095871
IC
31632 return {
31633 div: div,
31634 mod: mod
31635 };
31636 }
ebd8d4e8 31637
8b095871
IC
31638 if (this.negative === 0 && num.negative !== 0) {
31639 res = this.divmod(num.neg(), mode);
ebd8d4e8 31640
8b095871
IC
31641 if (mode !== 'mod') {
31642 div = res.div.neg();
31643 }
ebd8d4e8 31644
8b095871
IC
31645 return {
31646 div: div,
31647 mod: res.mod
31648 };
31649 }
ebd8d4e8 31650
8b095871
IC
31651 if ((this.negative & num.negative) !== 0) {
31652 res = this.neg().divmod(num.neg(), mode);
ebd8d4e8 31653
8b095871
IC
31654 if (mode !== 'div') {
31655 mod = res.mod.neg();
31656 if (positive && mod.negative !== 0) {
31657 mod.isub(num);
31658 }
31659 }
ebd8d4e8 31660
8b095871
IC
31661 return {
31662 div: res.div,
31663 mod: mod
31664 };
31665 }
ebd8d4e8 31666
8b095871 31667 // Both numbers are positive at this point
ebd8d4e8 31668
8b095871
IC
31669 // Strip both numbers to approximate shift value
31670 if (num.length > this.length || this.cmp(num) < 0) {
31671 return {
31672 div: new BN(0),
31673 mod: this
31674 };
31675 }
ebd8d4e8 31676
8b095871
IC
31677 // Very short reduction
31678 if (num.length === 1) {
31679 if (mode === 'div') {
31680 return {
31681 div: this.divn(num.words[0]),
31682 mod: null
31683 };
31684 }
ebd8d4e8 31685
8b095871
IC
31686 if (mode === 'mod') {
31687 return {
31688 div: null,
31689 mod: new BN(this.modn(num.words[0]))
31690 };
31691 }
ebd8d4e8 31692
8b095871
IC
31693 return {
31694 div: this.divn(num.words[0]),
31695 mod: new BN(this.modn(num.words[0]))
31696 };
31697 }
ebd8d4e8 31698
8b095871
IC
31699 return this._wordDiv(num, mode);
31700 };
ab78acc6 31701
8b095871
IC
31702 // Find `this` / `num`
31703 BN.prototype.div = function div (num) {
31704 return this.divmod(num, 'div', false).div;
31705 };
ab78acc6 31706
8b095871
IC
31707 // Find `this` % `num`
31708 BN.prototype.mod = function mod (num) {
31709 return this.divmod(num, 'mod', false).mod;
31710 };
ab78acc6 31711
8b095871
IC
31712 BN.prototype.umod = function umod (num) {
31713 return this.divmod(num, 'mod', true).mod;
31714 };
ebd8d4e8 31715
8b095871
IC
31716 // Find Round(`this` / `num`)
31717 BN.prototype.divRound = function divRound (num) {
31718 var dm = this.divmod(num);
ebd8d4e8 31719
8b095871
IC
31720 // Fast case - exact division
31721 if (dm.mod.isZero()) return dm.div;
ebd8d4e8 31722
8b095871 31723 var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
ebd8d4e8 31724
8b095871
IC
31725 var half = num.ushrn(1);
31726 var r2 = num.andln(1);
31727 var cmp = mod.cmp(half);
ebd8d4e8 31728
8b095871
IC
31729 // Round down
31730 if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
ebd8d4e8 31731
8b095871
IC
31732 // Round up
31733 return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
31734 };
ab78acc6 31735
8b095871
IC
31736 BN.prototype.modn = function modn (num) {
31737 assert(num <= 0x3ffffff);
31738 var p = (1 << 26) % num;
ab78acc6 31739
8b095871
IC
31740 var acc = 0;
31741 for (var i = this.length - 1; i >= 0; i--) {
31742 acc = (p * acc + (this.words[i] | 0)) % num;
ab78acc6 31743 }
ab78acc6 31744
8b095871
IC
31745 return acc;
31746 };
31747
31748 // In-place division by number
31749 BN.prototype.idivn = function idivn (num) {
31750 assert(num <= 0x3ffffff);
31751
31752 var carry = 0;
31753 for (var i = this.length - 1; i >= 0; i--) {
31754 var w = (this.words[i] | 0) + carry * 0x4000000;
31755 this.words[i] = (w / num) | 0;
31756 carry = w % num;
ebd8d4e8 31757 }
ebd8d4e8 31758
8b095871
IC
31759 return this.strip();
31760 };
ab78acc6 31761
8b095871
IC
31762 BN.prototype.divn = function divn (num) {
31763 return this.clone().idivn(num);
31764 };
ebd8d4e8 31765
8b095871
IC
31766 BN.prototype.egcd = function egcd (p) {
31767 assert(p.negative === 0);
31768 assert(!p.isZero());
ebd8d4e8 31769
8b095871
IC
31770 var x = this;
31771 var y = p.clone();
31772
31773 if (x.negative !== 0) {
31774 x = x.umod(p);
31775 } else {
31776 x = x.clone();
31777 }
31778
31779 // A * x + B * y = x
31780 var A = new BN(1);
31781 var B = new BN(0);
31782
31783 // C * x + D * y = y
31784 var C = new BN(0);
31785 var D = new BN(1);
31786
31787 var g = 0;
31788
31789 while (x.isEven() && y.isEven()) {
31790 x.iushrn(1);
31791 y.iushrn(1);
31792 ++g;
31793 }
ebd8d4e8 31794
8b095871
IC
31795 var yp = y.clone();
31796 var xp = x.clone();
ebd8d4e8 31797
8b095871
IC
31798 while (!x.isZero()) {
31799 for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
31800 if (i > 0) {
31801 x.iushrn(i);
31802 while (i-- > 0) {
31803 if (A.isOdd() || B.isOdd()) {
31804 A.iadd(yp);
31805 B.isub(xp);
31806 }
ebd8d4e8 31807
8b095871
IC
31808 A.iushrn(1);
31809 B.iushrn(1);
31810 }
31811 }
ebd8d4e8 31812
8b095871
IC
31813 for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
31814 if (j > 0) {
31815 y.iushrn(j);
31816 while (j-- > 0) {
31817 if (C.isOdd() || D.isOdd()) {
31818 C.iadd(yp);
31819 D.isub(xp);
31820 }
ab78acc6 31821
8b095871
IC
31822 C.iushrn(1);
31823 D.iushrn(1);
31824 }
31825 }
ebd8d4e8 31826
8b095871
IC
31827 if (x.cmp(y) >= 0) {
31828 x.isub(y);
31829 A.isub(C);
31830 B.isub(D);
31831 } else {
31832 y.isub(x);
31833 C.isub(A);
31834 D.isub(B);
31835 }
31836 }
ebd8d4e8 31837
8b095871
IC
31838 return {
31839 a: C,
31840 b: D,
31841 gcd: y.iushln(g)
31842 };
31843 };
ebd8d4e8 31844
8b095871
IC
31845 // This is reduced incarnation of the binary EEA
31846 // above, designated to invert members of the
31847 // _prime_ fields F(p) at a maximal speed
31848 BN.prototype._invmp = function _invmp (p) {
31849 assert(p.negative === 0);
31850 assert(!p.isZero());
ebd8d4e8 31851
8b095871
IC
31852 var a = this;
31853 var b = p.clone();
ebd8d4e8 31854
8b095871
IC
31855 if (a.negative !== 0) {
31856 a = a.umod(p);
31857 } else {
31858 a = a.clone();
31859 }
ebd8d4e8 31860
8b095871
IC
31861 var x1 = new BN(1);
31862 var x2 = new BN(0);
ebd8d4e8 31863
8b095871 31864 var delta = b.clone();
ebd8d4e8 31865
8b095871
IC
31866 while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
31867 for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
31868 if (i > 0) {
31869 a.iushrn(i);
31870 while (i-- > 0) {
31871 if (x1.isOdd()) {
31872 x1.iadd(delta);
31873 }
ebd8d4e8 31874
8b095871
IC
31875 x1.iushrn(1);
31876 }
31877 }
ab78acc6 31878
8b095871
IC
31879 for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
31880 if (j > 0) {
31881 b.iushrn(j);
31882 while (j-- > 0) {
31883 if (x2.isOdd()) {
31884 x2.iadd(delta);
31885 }
ebd8d4e8 31886
8b095871
IC
31887 x2.iushrn(1);
31888 }
31889 }
ebd8d4e8 31890
8b095871
IC
31891 if (a.cmp(b) >= 0) {
31892 a.isub(b);
31893 x1.isub(x2);
31894 } else {
31895 b.isub(a);
31896 x2.isub(x1);
31897 }
31898 }
ebd8d4e8 31899
8b095871
IC
31900 var res;
31901 if (a.cmpn(1) === 0) {
31902 res = x1;
31903 } else {
31904 res = x2;
31905 }
ebd8d4e8 31906
8b095871
IC
31907 if (res.cmpn(0) < 0) {
31908 res.iadd(p);
ab78acc6
IC
31909 }
31910
8b095871
IC
31911 return res;
31912 };
ebd8d4e8 31913
8b095871
IC
31914 BN.prototype.gcd = function gcd (num) {
31915 if (this.isZero()) return num.abs();
31916 if (num.isZero()) return this.abs();
31917
31918 var a = this.clone();
31919 var b = num.clone();
31920 a.negative = 0;
31921 b.negative = 0;
31922
31923 // Remove common factor of two
31924 for (var shift = 0; a.isEven() && b.isEven(); shift++) {
31925 a.iushrn(1);
31926 b.iushrn(1);
ab78acc6 31927 }
ab78acc6 31928
8b095871
IC
31929 do {
31930 while (a.isEven()) {
31931 a.iushrn(1);
31932 }
31933 while (b.isEven()) {
31934 b.iushrn(1);
31935 }
ebd8d4e8 31936
8b095871
IC
31937 var r = a.cmp(b);
31938 if (r < 0) {
31939 // Swap `a` and `b` to make `a` always bigger than `b`
31940 var t = a;
31941 a = b;
31942 b = t;
31943 } else if (r === 0 || b.cmpn(1) === 0) {
31944 break;
31945 }
ab78acc6 31946
8b095871
IC
31947 a.isub(b);
31948 } while (true);
ab78acc6 31949
8b095871
IC
31950 return b.iushln(shift);
31951 };
ab78acc6 31952
8b095871
IC
31953 // Invert number in the field F(num)
31954 BN.prototype.invm = function invm (num) {
31955 return this.egcd(num).a.umod(num);
31956 };
ebd8d4e8 31957
8b095871
IC
31958 BN.prototype.isEven = function isEven () {
31959 return (this.words[0] & 1) === 0;
31960 };
ab78acc6 31961
8b095871
IC
31962 BN.prototype.isOdd = function isOdd () {
31963 return (this.words[0] & 1) === 1;
31964 };
ebd8d4e8 31965
8b095871
IC
31966 // And first word and num
31967 BN.prototype.andln = function andln (num) {
31968 return this.words[0] & num;
31969 };
ebd8d4e8 31970
8b095871
IC
31971 // Increment at the bit position in-line
31972 BN.prototype.bincn = function bincn (bit) {
31973 assert(typeof bit === 'number');
31974 var r = bit % 26;
31975 var s = (bit - r) / 26;
31976 var q = 1 << r;
31977
31978 // Fast case: bit is much higher than all existing words
31979 if (this.length <= s) {
31980 this._expand(s + 1);
31981 this.words[s] |= q;
31982 return this;
31983 }
ebd8d4e8 31984
8b095871
IC
31985 // Add bit and propagate, if needed
31986 var carry = q;
31987 for (var i = s; carry !== 0 && i < this.length; i++) {
31988 var w = this.words[i] | 0;
31989 w += carry;
31990 carry = w >>> 26;
31991 w &= 0x3ffffff;
31992 this.words[i] = w;
31993 }
31994 if (carry !== 0) {
31995 this.words[i] = carry;
31996 this.length++;
31997 }
31998 return this;
31999 };
ebd8d4e8 32000
8b095871
IC
32001 BN.prototype.isZero = function isZero () {
32002 return this.length === 1 && this.words[0] === 0;
32003 };
ebd8d4e8 32004
8b095871
IC
32005 BN.prototype.cmpn = function cmpn (num) {
32006 var negative = num < 0;
ebd8d4e8 32007
8b095871
IC
32008 if (this.negative !== 0 && !negative) return -1;
32009 if (this.negative === 0 && negative) return 1;
ab78acc6 32010
8b095871 32011 this.strip();
ab78acc6 32012
8b095871
IC
32013 var res;
32014 if (this.length > 1) {
32015 res = 1;
32016 } else {
32017 if (negative) {
32018 num = -num;
32019 }
ebd8d4e8 32020
8b095871 32021 assert(num <= 0x3ffffff, 'Number is too big');
ebd8d4e8 32022
8b095871
IC
32023 var w = this.words[0] | 0;
32024 res = w === num ? 0 : w < num ? -1 : 1;
32025 }
32026 if (this.negative !== 0) return -res | 0;
32027 return res;
32028 };
ebd8d4e8 32029
8b095871
IC
32030 // Compare two numbers and return:
32031 // 1 - if `this` > `num`
32032 // 0 - if `this` == `num`
32033 // -1 - if `this` < `num`
32034 BN.prototype.cmp = function cmp (num) {
32035 if (this.negative !== 0 && num.negative === 0) return -1;
32036 if (this.negative === 0 && num.negative !== 0) return 1;
32037
32038 var res = this.ucmp(num);
32039 if (this.negative !== 0) return -res | 0;
32040 return res;
32041 };
ebd8d4e8 32042
8b095871
IC
32043 // Unsigned comparison
32044 BN.prototype.ucmp = function ucmp (num) {
32045 // At this point both numbers have the same sign
32046 if (this.length > num.length) return 1;
32047 if (this.length < num.length) return -1;
32048
32049 var res = 0;
32050 for (var i = this.length - 1; i >= 0; i--) {
32051 var a = this.words[i] | 0;
32052 var b = num.words[i] | 0;
32053
32054 if (a === b) continue;
32055 if (a < b) {
32056 res = -1;
32057 } else if (a > b) {
32058 res = 1;
32059 }
32060 break;
32061 }
32062 return res;
32063 };
ebd8d4e8 32064
8b095871
IC
32065 BN.prototype.gtn = function gtn (num) {
32066 return this.cmpn(num) === 1;
32067 };
ebd8d4e8 32068
8b095871
IC
32069 BN.prototype.gt = function gt (num) {
32070 return this.cmp(num) === 1;
32071 };
ebd8d4e8 32072
8b095871
IC
32073 BN.prototype.gten = function gten (num) {
32074 return this.cmpn(num) >= 0;
32075 };
ab78acc6 32076
8b095871
IC
32077 BN.prototype.gte = function gte (num) {
32078 return this.cmp(num) >= 0;
32079 };
ab78acc6 32080
8b095871
IC
32081 BN.prototype.ltn = function ltn (num) {
32082 return this.cmpn(num) === -1;
32083 };
ab78acc6 32084
8b095871
IC
32085 BN.prototype.lt = function lt (num) {
32086 return this.cmp(num) === -1;
32087 };
ebd8d4e8 32088
8b095871
IC
32089 BN.prototype.lten = function lten (num) {
32090 return this.cmpn(num) <= 0;
32091 };
ab78acc6 32092
8b095871
IC
32093 BN.prototype.lte = function lte (num) {
32094 return this.cmp(num) <= 0;
32095 };
ab78acc6 32096
8b095871
IC
32097 BN.prototype.eqn = function eqn (num) {
32098 return this.cmpn(num) === 0;
32099 };
ab78acc6 32100
8b095871
IC
32101 BN.prototype.eq = function eq (num) {
32102 return this.cmp(num) === 0;
32103 };
ebd8d4e8 32104
8b095871
IC
32105 //
32106 // A reduce context, could be using montgomery or something better, depending
32107 // on the `m` itself.
32108 //
32109 BN.red = function red (num) {
32110 return new Red(num);
32111 };
ab78acc6 32112
8b095871
IC
32113 BN.prototype.toRed = function toRed (ctx) {
32114 assert(!this.red, 'Already a number in reduction context');
32115 assert(this.negative === 0, 'red works only with positives');
32116 return ctx.convertTo(this)._forceRed(ctx);
32117 };
32118
32119 BN.prototype.fromRed = function fromRed () {
32120 assert(this.red, 'fromRed works only with numbers in reduction context');
32121 return this.red.convertFrom(this);
32122 };
32123
32124 BN.prototype._forceRed = function _forceRed (ctx) {
32125 this.red = ctx;
32126 return this;
32127 };
32128
32129 BN.prototype.forceRed = function forceRed (ctx) {
32130 assert(!this.red, 'Already a number in reduction context');
32131 return this._forceRed(ctx);
32132 };
32133
32134 BN.prototype.redAdd = function redAdd (num) {
32135 assert(this.red, 'redAdd works only with red numbers');
32136 return this.red.add(this, num);
32137 };
ebd8d4e8 32138
8b095871
IC
32139 BN.prototype.redIAdd = function redIAdd (num) {
32140 assert(this.red, 'redIAdd works only with red numbers');
32141 return this.red.iadd(this, num);
32142 };
ab78acc6 32143
8b095871
IC
32144 BN.prototype.redSub = function redSub (num) {
32145 assert(this.red, 'redSub works only with red numbers');
32146 return this.red.sub(this, num);
32147 };
ab78acc6 32148
8b095871
IC
32149 BN.prototype.redISub = function redISub (num) {
32150 assert(this.red, 'redISub works only with red numbers');
32151 return this.red.isub(this, num);
32152 };
ebd8d4e8 32153
8b095871
IC
32154 BN.prototype.redShl = function redShl (num) {
32155 assert(this.red, 'redShl works only with red numbers');
32156 return this.red.shl(this, num);
32157 };
ebd8d4e8 32158
8b095871
IC
32159 BN.prototype.redMul = function redMul (num) {
32160 assert(this.red, 'redMul works only with red numbers');
32161 this.red._verify2(this, num);
32162 return this.red.mul(this, num);
32163 };
ebd8d4e8 32164
8b095871
IC
32165 BN.prototype.redIMul = function redIMul (num) {
32166 assert(this.red, 'redMul works only with red numbers');
32167 this.red._verify2(this, num);
32168 return this.red.imul(this, num);
32169 };
ebd8d4e8 32170
8b095871
IC
32171 BN.prototype.redSqr = function redSqr () {
32172 assert(this.red, 'redSqr works only with red numbers');
32173 this.red._verify1(this);
32174 return this.red.sqr(this);
32175 };
ebd8d4e8 32176
8b095871
IC
32177 BN.prototype.redISqr = function redISqr () {
32178 assert(this.red, 'redISqr works only with red numbers');
32179 this.red._verify1(this);
32180 return this.red.isqr(this);
32181 };
ebd8d4e8 32182
8b095871
IC
32183 // Square root over p
32184 BN.prototype.redSqrt = function redSqrt () {
32185 assert(this.red, 'redSqrt works only with red numbers');
32186 this.red._verify1(this);
32187 return this.red.sqrt(this);
32188 };
ebd8d4e8 32189
8b095871
IC
32190 BN.prototype.redInvm = function redInvm () {
32191 assert(this.red, 'redInvm works only with red numbers');
32192 this.red._verify1(this);
32193 return this.red.invm(this);
32194 };
ebd8d4e8 32195
8b095871
IC
32196 // Return negative clone of `this` % `red modulo`
32197 BN.prototype.redNeg = function redNeg () {
32198 assert(this.red, 'redNeg works only with red numbers');
32199 this.red._verify1(this);
32200 return this.red.neg(this);
32201 };
ebd8d4e8 32202
8b095871
IC
32203 BN.prototype.redPow = function redPow (num) {
32204 assert(this.red && !num.red, 'redPow(normalNum)');
32205 this.red._verify1(this);
32206 return this.red.pow(this, num);
32207 };
ebd8d4e8 32208
8b095871
IC
32209 // Prime numbers with efficient reduction
32210 var primes = {
32211 k256: null,
32212 p224: null,
32213 p192: null,
32214 p25519: null
32215 };
ebd8d4e8 32216
8b095871
IC
32217 // Pseudo-Mersenne prime
32218 function MPrime (name, p) {
32219 // P = 2 ^ N - K
32220 this.name = name;
32221 this.p = new BN(p, 16);
32222 this.n = this.p.bitLength();
32223 this.k = new BN(1).iushln(this.n).isub(this.p);
ebd8d4e8 32224
8b095871
IC
32225 this.tmp = this._tmp();
32226 }
ebd8d4e8 32227
8b095871
IC
32228 MPrime.prototype._tmp = function _tmp () {
32229 var tmp = new BN(null);
32230 tmp.words = new Array(Math.ceil(this.n / 13));
32231 return tmp;
32232 };
ebd8d4e8 32233
8b095871
IC
32234 MPrime.prototype.ireduce = function ireduce (num) {
32235 // Assumes that `num` is less than `P^2`
32236 // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
32237 var r = num;
32238 var rlen;
ebd8d4e8 32239
8b095871
IC
32240 do {
32241 this.split(r, this.tmp);
32242 r = this.imulK(r);
32243 r = r.iadd(this.tmp);
32244 rlen = r.bitLength();
32245 } while (rlen > this.n);
32246
32247 var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
32248 if (cmp === 0) {
32249 r.words[0] = 0;
32250 r.length = 1;
32251 } else if (cmp > 0) {
32252 r.isub(this.p);
32253 } else {
32254 r.strip();
32255 }
ebd8d4e8 32256
8b095871
IC
32257 return r;
32258 };
ebd8d4e8 32259
8b095871
IC
32260 MPrime.prototype.split = function split (input, out) {
32261 input.iushrn(this.n, 0, out);
32262 };
ebd8d4e8 32263
8b095871
IC
32264 MPrime.prototype.imulK = function imulK (num) {
32265 return num.imul(this.k);
32266 };
ebd8d4e8 32267
8b095871
IC
32268 function K256 () {
32269 MPrime.call(
32270 this,
32271 'k256',
32272 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
32273 }
32274 inherits(K256, MPrime);
ebd8d4e8 32275
8b095871
IC
32276 K256.prototype.split = function split (input, output) {
32277 // 256 = 9 * 26 + 22
32278 var mask = 0x3fffff;
ebd8d4e8 32279
8b095871
IC
32280 var outLen = Math.min(input.length, 9);
32281 for (var i = 0; i < outLen; i++) {
32282 output.words[i] = input.words[i];
32283 }
32284 output.length = outLen;
ebd8d4e8 32285
8b095871
IC
32286 if (input.length <= 9) {
32287 input.words[0] = 0;
32288 input.length = 1;
32289 return;
32290 }
ebd8d4e8 32291
8b095871
IC
32292 // Shift by 9 limbs
32293 var prev = input.words[9];
32294 output.words[output.length++] = prev & mask;
ebd8d4e8 32295
8b095871
IC
32296 for (i = 10; i < input.length; i++) {
32297 var next = input.words[i] | 0;
32298 input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
32299 prev = next;
32300 }
32301 prev >>>= 22;
32302 input.words[i - 10] = prev;
32303 if (prev === 0 && input.length > 10) {
32304 input.length -= 10;
32305 } else {
32306 input.length -= 9;
32307 }
32308 };
ebd8d4e8 32309
8b095871
IC
32310 K256.prototype.imulK = function imulK (num) {
32311 // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
32312 num.words[num.length] = 0;
32313 num.words[num.length + 1] = 0;
32314 num.length += 2;
32315
32316 // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
32317 var lo = 0;
32318 for (var i = 0; i < num.length; i++) {
32319 var w = num.words[i] | 0;
32320 lo += w * 0x3d1;
32321 num.words[i] = lo & 0x3ffffff;
32322 lo = w * 0x40 + ((lo / 0x4000000) | 0);
32323 }
32324
32325 // Fast length reduction
32326 if (num.words[num.length - 1] === 0) {
32327 num.length--;
32328 if (num.words[num.length - 1] === 0) {
32329 num.length--;
32330 }
32331 }
32332 return num;
32333 };
ebd8d4e8 32334
8b095871
IC
32335 function P224 () {
32336 MPrime.call(
32337 this,
32338 'p224',
32339 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
32340 }
32341 inherits(P224, MPrime);
ebd8d4e8 32342
8b095871
IC
32343 function P192 () {
32344 MPrime.call(
32345 this,
32346 'p192',
32347 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
32348 }
32349 inherits(P192, MPrime);
ebd8d4e8 32350
8b095871
IC
32351 function P25519 () {
32352 // 2 ^ 255 - 19
32353 MPrime.call(
32354 this,
32355 '25519',
32356 '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
32357 }
32358 inherits(P25519, MPrime);
ebd8d4e8 32359
8b095871
IC
32360 P25519.prototype.imulK = function imulK (num) {
32361 // K = 0x13
32362 var carry = 0;
32363 for (var i = 0; i < num.length; i++) {
32364 var hi = (num.words[i] | 0) * 0x13 + carry;
32365 var lo = hi & 0x3ffffff;
32366 hi >>>= 26;
ebd8d4e8 32367
8b095871
IC
32368 num.words[i] = lo;
32369 carry = hi;
32370 }
32371 if (carry !== 0) {
32372 num.words[num.length++] = carry;
32373 }
32374 return num;
32375 };
ebd8d4e8 32376
8b095871
IC
32377 // Exported mostly for testing purposes, use plain name instead
32378 BN._prime = function prime (name) {
32379 // Cached version of prime
32380 if (primes[name]) return primes[name];
32381
32382 var prime;
32383 if (name === 'k256') {
32384 prime = new K256();
32385 } else if (name === 'p224') {
32386 prime = new P224();
32387 } else if (name === 'p192') {
32388 prime = new P192();
32389 } else if (name === 'p25519') {
32390 prime = new P25519();
32391 } else {
32392 throw new Error('Unknown prime ' + name);
32393 }
32394 primes[name] = prime;
ab78acc6 32395
8b095871
IC
32396 return prime;
32397 };
ab78acc6 32398
8b095871
IC
32399 //
32400 // Base reduction engine
32401 //
32402 function Red (m) {
32403 if (typeof m === 'string') {
32404 var prime = BN._prime(m);
32405 this.m = prime.p;
32406 this.prime = prime;
32407 } else {
32408 assert(m.gtn(1), 'modulus must be greater than 1');
32409 this.m = m;
32410 this.prime = null;
32411 }
32412 }
ab78acc6 32413
8b095871
IC
32414 Red.prototype._verify1 = function _verify1 (a) {
32415 assert(a.negative === 0, 'red works only with positives');
32416 assert(a.red, 'red works only with red numbers');
32417 };
ab78acc6 32418
8b095871
IC
32419 Red.prototype._verify2 = function _verify2 (a, b) {
32420 assert((a.negative | b.negative) === 0, 'red works only with positives');
32421 assert(a.red && a.red === b.red,
32422 'red works only with red numbers');
32423 };
ebd8d4e8 32424
8b095871
IC
32425 Red.prototype.imod = function imod (a) {
32426 if (this.prime) return this.prime.ireduce(a)._forceRed(this);
32427 return a.umod(this.m)._forceRed(this);
32428 };
ebd8d4e8 32429
8b095871
IC
32430 Red.prototype.neg = function neg (a) {
32431 if (a.isZero()) {
32432 return a.clone();
32433 }
ebd8d4e8 32434
8b095871
IC
32435 return this.m.sub(a)._forceRed(this);
32436 };
ab78acc6 32437
8b095871
IC
32438 Red.prototype.add = function add (a, b) {
32439 this._verify2(a, b);
ab78acc6 32440
8b095871
IC
32441 var res = a.add(b);
32442 if (res.cmp(this.m) >= 0) {
32443 res.isub(this.m);
32444 }
32445 return res._forceRed(this);
32446 };
ab78acc6 32447
8b095871
IC
32448 Red.prototype.iadd = function iadd (a, b) {
32449 this._verify2(a, b);
ab78acc6 32450
8b095871
IC
32451 var res = a.iadd(b);
32452 if (res.cmp(this.m) >= 0) {
32453 res.isub(this.m);
32454 }
32455 return res;
32456 };
ab78acc6 32457
8b095871
IC
32458 Red.prototype.sub = function sub (a, b) {
32459 this._verify2(a, b);
ab78acc6 32460
8b095871
IC
32461 var res = a.sub(b);
32462 if (res.cmpn(0) < 0) {
32463 res.iadd(this.m);
32464 }
32465 return res._forceRed(this);
32466 };
ab78acc6 32467
8b095871
IC
32468 Red.prototype.isub = function isub (a, b) {
32469 this._verify2(a, b);
ebd8d4e8 32470
8b095871
IC
32471 var res = a.isub(b);
32472 if (res.cmpn(0) < 0) {
32473 res.iadd(this.m);
32474 }
32475 return res;
32476 };
ebd8d4e8 32477
8b095871
IC
32478 Red.prototype.shl = function shl (a, num) {
32479 this._verify1(a);
32480 return this.imod(a.ushln(num));
32481 };
ebd8d4e8 32482
8b095871
IC
32483 Red.prototype.imul = function imul (a, b) {
32484 this._verify2(a, b);
32485 return this.imod(a.imul(b));
32486 };
ebd8d4e8 32487
8b095871
IC
32488 Red.prototype.mul = function mul (a, b) {
32489 this._verify2(a, b);
32490 return this.imod(a.mul(b));
32491 };
ebd8d4e8 32492
8b095871
IC
32493 Red.prototype.isqr = function isqr (a) {
32494 return this.imul(a, a.clone());
32495 };
32496
32497 Red.prototype.sqr = function sqr (a) {
32498 return this.mul(a, a);
32499 };
ebd8d4e8 32500
8b095871
IC
32501 Red.prototype.sqrt = function sqrt (a) {
32502 if (a.isZero()) return a.clone();
ebd8d4e8 32503
8b095871
IC
32504 var mod3 = this.m.andln(3);
32505 assert(mod3 % 2 === 1);
ebd8d4e8 32506
8b095871
IC
32507 // Fast case
32508 if (mod3 === 3) {
32509 var pow = this.m.add(new BN(1)).iushrn(2);
32510 return this.pow(a, pow);
32511 }
ebd8d4e8 32512
8b095871
IC
32513 // Tonelli-Shanks algorithm (Totally unoptimized and slow)
32514 //
32515 // Find Q and S, that Q * 2 ^ S = (P - 1)
32516 var q = this.m.subn(1);
32517 var s = 0;
32518 while (!q.isZero() && q.andln(1) === 0) {
32519 s++;
32520 q.iushrn(1);
32521 }
32522 assert(!q.isZero());
ebd8d4e8 32523
8b095871
IC
32524 var one = new BN(1).toRed(this);
32525 var nOne = one.redNeg();
ebd8d4e8 32526
8b095871
IC
32527 // Find quadratic non-residue
32528 // NOTE: Max is such because of generalized Riemann hypothesis.
32529 var lpow = this.m.subn(1).iushrn(1);
32530 var z = this.m.bitLength();
32531 z = new BN(2 * z * z).toRed(this);
ebd8d4e8 32532
8b095871
IC
32533 while (this.pow(z, lpow).cmp(nOne) !== 0) {
32534 z.redIAdd(nOne);
32535 }
ebd8d4e8 32536
8b095871
IC
32537 var c = this.pow(z, q);
32538 var r = this.pow(a, q.addn(1).iushrn(1));
32539 var t = this.pow(a, q);
32540 var m = s;
32541 while (t.cmp(one) !== 0) {
32542 var tmp = t;
32543 for (var i = 0; tmp.cmp(one) !== 0; i++) {
32544 tmp = tmp.redSqr();
32545 }
32546 assert(i < m);
32547 var b = this.pow(c, new BN(1).iushln(m - i - 1));
ebd8d4e8 32548
8b095871
IC
32549 r = r.redMul(b);
32550 c = b.redSqr();
32551 t = t.redMul(c);
32552 m = i;
32553 }
ebd8d4e8 32554
8b095871
IC
32555 return r;
32556 };
ebd8d4e8 32557
8b095871
IC
32558 Red.prototype.invm = function invm (a) {
32559 var inv = a._invmp(this.m);
32560 if (inv.negative !== 0) {
32561 inv.negative = 0;
32562 return this.imod(inv).redNeg();
32563 } else {
32564 return this.imod(inv);
32565 }
32566 };
ebd8d4e8 32567
8b095871
IC
32568 Red.prototype.pow = function pow (a, num) {
32569 if (num.isZero()) return new BN(1);
32570 if (num.cmpn(1) === 0) return a.clone();
ebd8d4e8 32571
8b095871
IC
32572 var windowSize = 4;
32573 var wnd = new Array(1 << windowSize);
32574 wnd[0] = new BN(1).toRed(this);
32575 wnd[1] = a;
32576 for (var i = 2; i < wnd.length; i++) {
32577 wnd[i] = this.mul(wnd[i - 1], a);
32578 }
ebd8d4e8 32579
8b095871
IC
32580 var res = wnd[0];
32581 var current = 0;
32582 var currentLen = 0;
32583 var start = num.bitLength() % 26;
32584 if (start === 0) {
32585 start = 26;
32586 }
ebd8d4e8 32587
8b095871
IC
32588 for (i = num.length - 1; i >= 0; i--) {
32589 var word = num.words[i];
32590 for (var j = start - 1; j >= 0; j--) {
32591 var bit = (word >> j) & 1;
32592 if (res !== wnd[0]) {
32593 res = this.sqr(res);
32594 }
ebd8d4e8 32595
8b095871
IC
32596 if (bit === 0 && current === 0) {
32597 currentLen = 0;
32598 continue;
32599 }
ebd8d4e8 32600
8b095871
IC
32601 current <<= 1;
32602 current |= bit;
32603 currentLen++;
32604 if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
ebd8d4e8 32605
8b095871
IC
32606 res = this.mul(res, wnd[current]);
32607 currentLen = 0;
32608 current = 0;
32609 }
32610 start = 26;
32611 }
ebd8d4e8 32612
8b095871
IC
32613 return res;
32614 };
ebd8d4e8 32615
8b095871
IC
32616 Red.prototype.convertTo = function convertTo (num) {
32617 var r = num.umod(this.m);
ebd8d4e8 32618
8b095871
IC
32619 return r === num ? r.clone() : r;
32620 };
ebd8d4e8 32621
8b095871
IC
32622 Red.prototype.convertFrom = function convertFrom (num) {
32623 var res = num.clone();
32624 res.red = null;
32625 return res;
32626 };
ebd8d4e8 32627
8b095871
IC
32628 //
32629 // Montgomery method engine
32630 //
ebd8d4e8 32631
8b095871
IC
32632 BN.mont = function mont (num) {
32633 return new Mont(num);
32634 };
ebd8d4e8 32635
8b095871
IC
32636 function Mont (m) {
32637 Red.call(this, m);
ebd8d4e8 32638
8b095871
IC
32639 this.shift = this.m.bitLength();
32640 if (this.shift % 26 !== 0) {
32641 this.shift += 26 - (this.shift % 26);
32642 }
ebd8d4e8 32643
8b095871
IC
32644 this.r = new BN(1).iushln(this.shift);
32645 this.r2 = this.imod(this.r.sqr());
32646 this.rinv = this.r._invmp(this.m);
32647
32648 this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
32649 this.minv = this.minv.umod(this.r);
32650 this.minv = this.r.sub(this.minv);
ebd8d4e8 32651 }
8b095871 32652 inherits(Mont, Red);
ebd8d4e8 32653
8b095871
IC
32654 Mont.prototype.convertTo = function convertTo (num) {
32655 return this.imod(num.ushln(this.shift));
32656 };
ab78acc6 32657
8b095871
IC
32658 Mont.prototype.convertFrom = function convertFrom (num) {
32659 var r = this.imod(num.mul(this.rinv));
32660 r.red = null;
32661 return r;
32662 };
ebd8d4e8 32663
8b095871
IC
32664 Mont.prototype.imul = function imul (a, b) {
32665 if (a.isZero() || b.isZero()) {
32666 a.words[0] = 0;
32667 a.length = 1;
32668 return a;
32669 }
ebd8d4e8 32670
8b095871
IC
32671 var t = a.imul(b);
32672 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
32673 var u = t.isub(c).iushrn(this.shift);
32674 var res = u;
ab78acc6 32675
8b095871
IC
32676 if (u.cmp(this.m) >= 0) {
32677 res = u.isub(this.m);
32678 } else if (u.cmpn(0) < 0) {
32679 res = u.iadd(this.m);
32680 }
ab78acc6 32681
8b095871
IC
32682 return res._forceRed(this);
32683 };
ab78acc6 32684
8b095871
IC
32685 Mont.prototype.mul = function mul (a, b) {
32686 if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
ab78acc6 32687
8b095871
IC
32688 var t = a.mul(b);
32689 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
32690 var u = t.isub(c).iushrn(this.shift);
32691 var res = u;
32692 if (u.cmp(this.m) >= 0) {
32693 res = u.isub(this.m);
32694 } else if (u.cmpn(0) < 0) {
32695 res = u.iadd(this.m);
32696 }
ab78acc6 32697
8b095871
IC
32698 return res._forceRed(this);
32699 };
ab78acc6 32700
8b095871
IC
32701 Mont.prototype.invm = function invm (a) {
32702 // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
32703 var res = this.imod(a._invmp(this.m).mul(this.r2));
32704 return res._forceRed(this);
32705 };
32706})(typeof module === 'undefined' || module, this);
ab78acc6 32707
8b095871
IC
32708},{}],34:[function(require,module,exports){
32709var r;
ebd8d4e8 32710
8b095871
IC
32711module.exports = function rand(len) {
32712 if (!r)
32713 r = new Rand(null);
ebd8d4e8 32714
8b095871
IC
32715 return r.generate(len);
32716};
ab78acc6 32717
8b095871
IC
32718function Rand(rand) {
32719 this.rand = rand;
ab78acc6 32720}
8b095871 32721module.exports.Rand = Rand;
ab78acc6 32722
8b095871
IC
32723Rand.prototype.generate = function generate(len) {
32724 return this._rand(len);
32725};
ab78acc6 32726
8b095871
IC
32727if (typeof self === 'object') {
32728 if (self.crypto && self.crypto.getRandomValues) {
32729 // Modern browsers
32730 Rand.prototype._rand = function _rand(n) {
32731 var arr = new Uint8Array(n);
32732 self.crypto.getRandomValues(arr);
32733 return arr;
32734 };
32735 } else if (self.msCrypto && self.msCrypto.getRandomValues) {
32736 // IE
32737 Rand.prototype._rand = function _rand(n) {
32738 var arr = new Uint8Array(n);
32739 self.msCrypto.getRandomValues(arr);
32740 return arr;
32741 };
32742 } else {
32743 // Old junk
32744 Rand.prototype._rand = function() {
32745 throw new Error('Not implemented yet');
32746 };
32747 }
32748} else {
32749 // Node.js or Web worker with no crypto support
32750 try {
32751 var crypto = require('crypto');
ab78acc6 32752
8b095871
IC
32753 Rand.prototype._rand = function _rand(n) {
32754 return crypto.randomBytes(n);
32755 };
32756 } catch (e) {
32757 // Emulate crypto API using randy
32758 Rand.prototype._rand = function _rand(n) {
32759 var res = new Uint8Array(n);
32760 for (var i = 0; i < res.length; i++)
32761 res[i] = this.rand.getByte();
32762 return res;
32763 };
32764 }
32765}
32766
32767},{"crypto":3}],35:[function(require,module,exports){
32768(function (Buffer){
32769var Transform = require('stream').Transform
32770var inherits = require('inherits')
32771var StringDecoder = require('string_decoder').StringDecoder
32772module.exports = CipherBase
32773inherits(CipherBase, Transform)
32774function CipherBase (hashMode) {
32775 Transform.call(this)
32776 this.hashMode = typeof hashMode === 'string'
32777 if (this.hashMode) {
32778 this[hashMode] = this._finalOrDigest
32779 } else {
32780 this.final = this._finalOrDigest
32781 }
32782 this._decoder = null
32783 this._encoding = null
32784}
32785CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
32786 if (typeof data === 'string') {
32787 data = new Buffer(data, inputEnc)
32788 }
32789 var outData = this._update(data)
32790 if (this.hashMode) {
32791 return this
32792 }
32793 if (outputEnc) {
32794 outData = this._toString(outData, outputEnc)
32795 }
32796 return outData
32797}
ab78acc6 32798
8b095871 32799CipherBase.prototype.setAutoPadding = function () {}
ab78acc6 32800
8b095871
IC
32801CipherBase.prototype.getAuthTag = function () {
32802 throw new Error('trying to get auth tag in unsupported state')
32803}
ab78acc6 32804
8b095871
IC
32805CipherBase.prototype.setAuthTag = function () {
32806 throw new Error('trying to set auth tag in unsupported state')
32807}
ab78acc6 32808
8b095871
IC
32809CipherBase.prototype.setAAD = function () {
32810 throw new Error('trying to set aad in unsupported state')
32811}
ab78acc6 32812
8b095871
IC
32813CipherBase.prototype._transform = function (data, _, next) {
32814 var err
32815 try {
32816 if (this.hashMode) {
32817 this._update(data)
32818 } else {
32819 this.push(this._update(data))
32820 }
32821 } catch (e) {
32822 err = e
32823 } finally {
32824 next(err)
32825 }
32826}
32827CipherBase.prototype._flush = function (done) {
32828 var err
32829 try {
32830 this.push(this._final())
32831 } catch (e) {
32832 err = e
32833 } finally {
32834 done(err)
32835 }
32836}
32837CipherBase.prototype._finalOrDigest = function (outputEnc) {
32838 var outData = this._final() || new Buffer('')
32839 if (outputEnc) {
32840 outData = this._toString(outData, outputEnc, true)
32841 }
32842 return outData
32843}
ebd8d4e8 32844
8b095871
IC
32845CipherBase.prototype._toString = function (value, enc, fin) {
32846 if (!this._decoder) {
32847 this._decoder = new StringDecoder(enc)
32848 this._encoding = enc
32849 }
32850 if (this._encoding !== enc) {
32851 throw new Error('can\'t switch encodings')
32852 }
32853 var out = this._decoder.write(value)
32854 if (fin) {
32855 out += this._decoder.end()
ab78acc6 32856 }
8b095871
IC
32857 return out
32858}
ab78acc6 32859
8b095871
IC
32860}).call(this,require("buffer").Buffer)
32861},{"buffer":5,"inherits":63,"stream":25,"string_decoder":26}],36:[function(require,module,exports){
32862(function (Buffer){
32863'use strict';
32864var inherits = require('inherits')
32865var md5 = require('./md5')
32866var rmd160 = require('ripemd160')
32867var sha = require('sha.js')
ebd8d4e8 32868
8b095871 32869var Base = require('cipher-base')
ebd8d4e8 32870
8b095871
IC
32871function HashNoConstructor(hash) {
32872 Base.call(this, 'digest')
ebd8d4e8 32873
8b095871
IC
32874 this._hash = hash
32875 this.buffers = []
32876}
ebd8d4e8 32877
8b095871 32878inherits(HashNoConstructor, Base)
ebd8d4e8 32879
8b095871
IC
32880HashNoConstructor.prototype._update = function (data) {
32881 this.buffers.push(data)
32882}
ebd8d4e8 32883
8b095871
IC
32884HashNoConstructor.prototype._final = function () {
32885 var buf = Buffer.concat(this.buffers)
32886 var r = this._hash(buf)
32887 this.buffers = null
ebd8d4e8 32888
8b095871
IC
32889 return r
32890}
ab78acc6 32891
8b095871
IC
32892function Hash(hash) {
32893 Base.call(this, 'digest')
ab78acc6 32894
8b095871
IC
32895 this._hash = hash
32896}
ab78acc6 32897
8b095871 32898inherits(Hash, Base)
ab78acc6 32899
8b095871
IC
32900Hash.prototype._update = function (data) {
32901 this._hash.update(data)
32902}
ab78acc6 32903
8b095871
IC
32904Hash.prototype._final = function () {
32905 return this._hash.digest()
32906}
ab78acc6 32907
8b095871
IC
32908module.exports = function createHash (alg) {
32909 alg = alg.toLowerCase()
32910 if ('md5' === alg) return new HashNoConstructor(md5)
32911 if ('rmd160' === alg || 'ripemd160' === alg) return new HashNoConstructor(rmd160)
32912
32913 return new Hash(sha(alg))
ab78acc6
IC
32914}
32915
8b095871
IC
32916}).call(this,require("buffer").Buffer)
32917},{"./md5":38,"buffer":5,"cipher-base":35,"inherits":63,"ripemd160":71,"sha.js":80}],37:[function(require,module,exports){
32918(function (Buffer){
32919'use strict';
32920var intSize = 4;
32921var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
32922var chrsz = 8;
ab78acc6 32923
8b095871
IC
32924function toArray(buf, bigEndian) {
32925 if ((buf.length % intSize) !== 0) {
32926 var len = buf.length + (intSize - (buf.length % intSize));
32927 buf = Buffer.concat([buf, zeroBuffer], len);
ab78acc6
IC
32928 }
32929
8b095871
IC
32930 var arr = [];
32931 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
32932 for (var i = 0; i < buf.length; i += intSize) {
32933 arr.push(fn.call(buf, i));
32934 }
32935 return arr;
ab78acc6
IC
32936}
32937
8b095871
IC
32938function toBuffer(arr, size, bigEndian) {
32939 var buf = new Buffer(size);
32940 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
32941 for (var i = 0; i < arr.length; i++) {
32942 fn.call(buf, arr[i], i * 4, true);
32943 }
32944 return buf;
32945}
ab78acc6 32946
8b095871
IC
32947function hash(buf, fn, hashSize, bigEndian) {
32948 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
32949 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
32950 return toBuffer(arr, hashSize, bigEndian);
32951}
32952exports.hash = hash;
ab78acc6 32953}).call(this,require("buffer").Buffer)
8b095871 32954},{"buffer":5}],38:[function(require,module,exports){
ab78acc6 32955'use strict';
8b095871
IC
32956/*
32957 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
32958 * Digest Algorithm, as defined in RFC 1321.
32959 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
32960 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
32961 * Distributed under the BSD License
32962 * See http://pajhome.org.uk/crypt/md5 for more info.
32963 */
ebd8d4e8 32964
8b095871 32965var helpers = require('./helpers');
ebd8d4e8 32966
8b095871
IC
32967/*
32968 * Calculate the MD5 of an array of little-endian words, and a bit length
32969 */
32970function core_md5(x, len)
32971{
32972 /* append padding */
32973 x[len >> 5] |= 0x80 << ((len) % 32);
32974 x[(((len + 64) >>> 9) << 4) + 14] = len;
ebd8d4e8 32975
8b095871
IC
32976 var a = 1732584193;
32977 var b = -271733879;
32978 var c = -1732584194;
32979 var d = 271733878;
ebd8d4e8 32980
8b095871
IC
32981 for(var i = 0; i < x.length; i += 16)
32982 {
32983 var olda = a;
32984 var oldb = b;
32985 var oldc = c;
32986 var oldd = d;
ebd8d4e8 32987
8b095871
IC
32988 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
32989 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
32990 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
32991 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
32992 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
32993 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
32994 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
32995 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
32996 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
32997 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
32998 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
32999 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
33000 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
33001 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
33002 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
33003 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
ebd8d4e8 33004
8b095871
IC
33005 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
33006 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
33007 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
33008 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
33009 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
33010 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
33011 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
33012 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
33013 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
33014 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
33015 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
33016 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
33017 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
33018 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
33019 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
33020 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
ebd8d4e8 33021
8b095871
IC
33022 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
33023 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
33024 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
33025 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
33026 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
33027 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
33028 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
33029 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
33030 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
33031 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
33032 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
33033 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
33034 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
33035 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
33036 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
33037 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
ebd8d4e8 33038
8b095871
IC
33039 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
33040 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
33041 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
33042 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
33043 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
33044 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
33045 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
33046 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
33047 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
33048 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
33049 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
33050 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
33051 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
33052 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
33053 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
33054 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
ebd8d4e8 33055
8b095871
IC
33056 a = safe_add(a, olda);
33057 b = safe_add(b, oldb);
33058 c = safe_add(c, oldc);
33059 d = safe_add(d, oldd);
ab78acc6 33060 }
8b095871 33061 return Array(a, b, c, d);
ebd8d4e8 33062
ab78acc6 33063}
ebd8d4e8 33064
8b095871
IC
33065/*
33066 * These functions implement the four basic operations the algorithm uses.
33067 */
33068function md5_cmn(q, a, b, x, s, t)
33069{
33070 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
ab78acc6 33071}
8b095871
IC
33072function md5_ff(a, b, c, d, x, s, t)
33073{
33074 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
ab78acc6 33075}
8b095871
IC
33076function md5_gg(a, b, c, d, x, s, t)
33077{
33078 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
ab78acc6 33079}
8b095871
IC
33080function md5_hh(a, b, c, d, x, s, t)
33081{
33082 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
33083}
33084function md5_ii(a, b, c, d, x, s, t)
33085{
33086 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
ab78acc6 33087}
ebd8d4e8 33088
8b095871
IC
33089/*
33090 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
33091 * to work around bugs in some JS interpreters.
33092 */
33093function safe_add(x, y)
33094{
33095 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
33096 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
33097 return (msw << 16) | (lsw & 0xFFFF);
ab78acc6 33098}
ebd8d4e8 33099
8b095871
IC
33100/*
33101 * Bitwise rotate a 32-bit number to the left.
33102 */
33103function bit_rol(num, cnt)
33104{
33105 return (num << cnt) | (num >>> (32 - cnt));
33106}
ebd8d4e8 33107
8b095871
IC
33108module.exports = function md5(buf) {
33109 return helpers.hash(buf, core_md5, 16);
33110};
33111},{"./helpers":37}],39:[function(require,module,exports){
33112'use strict';
ebd8d4e8 33113
8b095871 33114var elliptic = exports;
ebd8d4e8 33115
8b095871
IC
33116elliptic.version = require('../package.json').version;
33117elliptic.utils = require('./elliptic/utils');
33118elliptic.rand = require('brorand');
33119elliptic.hmacDRBG = require('./elliptic/hmac-drbg');
33120elliptic.curve = require('./elliptic/curve');
33121elliptic.curves = require('./elliptic/curves');
ebd8d4e8 33122
8b095871
IC
33123// Protocols
33124elliptic.ec = require('./elliptic/ec');
33125elliptic.eddsa = require('./elliptic/eddsa');
ebd8d4e8 33126
8b095871
IC
33127},{"../package.json":55,"./elliptic/curve":42,"./elliptic/curves":45,"./elliptic/ec":46,"./elliptic/eddsa":49,"./elliptic/hmac-drbg":52,"./elliptic/utils":54,"brorand":34}],40:[function(require,module,exports){
33128'use strict';
ebd8d4e8 33129
8b095871
IC
33130var BN = require('bn.js');
33131var elliptic = require('../../elliptic');
33132var utils = elliptic.utils;
33133var getNAF = utils.getNAF;
33134var getJSF = utils.getJSF;
33135var assert = utils.assert;
33136
33137function BaseCurve(type, conf) {
33138 this.type = type;
33139 this.p = new BN(conf.p, 16);
33140
33141 // Use Montgomery, when there is no fast reduction for the prime
33142 this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
33143
33144 // Useful for many curves
33145 this.zero = new BN(0).toRed(this.red);
33146 this.one = new BN(1).toRed(this.red);
33147 this.two = new BN(2).toRed(this.red);
33148
33149 // Curve configuration, optional
33150 this.n = conf.n && new BN(conf.n, 16);
33151 this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
33152
33153 // Temporary arrays
33154 this._wnafT1 = new Array(4);
33155 this._wnafT2 = new Array(4);
33156 this._wnafT3 = new Array(4);
33157 this._wnafT4 = new Array(4);
33158
33159 // Generalized Greg Maxwell's trick
33160 var adjustCount = this.n && this.p.div(this.n);
33161 if (!adjustCount || adjustCount.cmpn(100) > 0) {
33162 this.redN = null;
33163 } else {
33164 this._maxwellTrick = true;
33165 this.redN = this.n.toRed(this.red);
ebd8d4e8 33166 }
ebd8d4e8 33167}
8b095871 33168module.exports = BaseCurve;
ebd8d4e8 33169
8b095871
IC
33170BaseCurve.prototype.point = function point() {
33171 throw new Error('Not implemented');
33172};
ebd8d4e8 33173
8b095871
IC
33174BaseCurve.prototype.validate = function validate() {
33175 throw new Error('Not implemented');
33176};
ebd8d4e8 33177
8b095871
IC
33178BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
33179 assert(p.precomputed);
33180 var doubles = p._getDoubles();
ebd8d4e8 33181
8b095871
IC
33182 var naf = getNAF(k, 1);
33183 var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);
33184 I /= 3;
ebd8d4e8 33185
8b095871
IC
33186 // Translate into more windowed form
33187 var repr = [];
33188 for (var j = 0; j < naf.length; j += doubles.step) {
33189 var nafW = 0;
33190 for (var k = j + doubles.step - 1; k >= j; k--)
33191 nafW = (nafW << 1) + naf[k];
33192 repr.push(nafW);
33193 }
ebd8d4e8 33194
8b095871
IC
33195 var a = this.jpoint(null, null, null);
33196 var b = this.jpoint(null, null, null);
33197 for (var i = I; i > 0; i--) {
33198 for (var j = 0; j < repr.length; j++) {
33199 var nafW = repr[j];
33200 if (nafW === i)
33201 b = b.mixedAdd(doubles.points[j]);
33202 else if (nafW === -i)
33203 b = b.mixedAdd(doubles.points[j].neg());
33204 }
33205 a = a.add(b);
33206 }
33207 return a.toP();
33208};
ebd8d4e8 33209
8b095871
IC
33210BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
33211 var w = 4;
ebd8d4e8 33212
8b095871
IC
33213 // Precompute window
33214 var nafPoints = p._getNAFPoints(w);
33215 w = nafPoints.wnd;
33216 var wnd = nafPoints.points;
ebd8d4e8 33217
8b095871
IC
33218 // Get NAF form
33219 var naf = getNAF(k, w);
ebd8d4e8 33220
8b095871
IC
33221 // Add `this`*(N+1) for every w-NAF index
33222 var acc = this.jpoint(null, null, null);
33223 for (var i = naf.length - 1; i >= 0; i--) {
33224 // Count zeroes
33225 for (var k = 0; i >= 0 && naf[i] === 0; i--)
33226 k++;
33227 if (i >= 0)
33228 k++;
33229 acc = acc.dblp(k);
ebd8d4e8 33230
8b095871
IC
33231 if (i < 0)
33232 break;
33233 var z = naf[i];
33234 assert(z !== 0);
33235 if (p.type === 'affine') {
33236 // J +- P
33237 if (z > 0)
33238 acc = acc.mixedAdd(wnd[(z - 1) >> 1]);
33239 else
33240 acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());
33241 } else {
33242 // J +- J
33243 if (z > 0)
33244 acc = acc.add(wnd[(z - 1) >> 1]);
33245 else
33246 acc = acc.add(wnd[(-z - 1) >> 1].neg());
33247 }
ebd8d4e8 33248 }
8b095871
IC
33249 return p.type === 'affine' ? acc.toP() : acc;
33250};
ebd8d4e8 33251
8b095871
IC
33252BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,
33253 points,
33254 coeffs,
33255 len,
33256 jacobianResult) {
33257 var wndWidth = this._wnafT1;
33258 var wnd = this._wnafT2;
33259 var naf = this._wnafT3;
33260
33261 // Fill all arrays
33262 var max = 0;
33263 for (var i = 0; i < len; i++) {
33264 var p = points[i];
33265 var nafPoints = p._getNAFPoints(defW);
33266 wndWidth[i] = nafPoints.wnd;
33267 wnd[i] = nafPoints.points;
33268 }
33269
33270 // Comb small window NAFs
33271 for (var i = len - 1; i >= 1; i -= 2) {
33272 var a = i - 1;
33273 var b = i;
33274 if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
33275 naf[a] = getNAF(coeffs[a], wndWidth[a]);
33276 naf[b] = getNAF(coeffs[b], wndWidth[b]);
33277 max = Math.max(naf[a].length, max);
33278 max = Math.max(naf[b].length, max);
33279 continue;
33280 }
ebd8d4e8 33281
8b095871
IC
33282 var comb = [
33283 points[a], /* 1 */
33284 null, /* 3 */
33285 null, /* 5 */
33286 points[b] /* 7 */
33287 ];
33288
33289 // Try to avoid Projective points, if possible
33290 if (points[a].y.cmp(points[b].y) === 0) {
33291 comb[1] = points[a].add(points[b]);
33292 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
33293 } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
33294 comb[1] = points[a].toJ().mixedAdd(points[b]);
33295 comb[2] = points[a].add(points[b].neg());
33296 } else {
33297 comb[1] = points[a].toJ().mixedAdd(points[b]);
33298 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
33299 }
ebd8d4e8 33300
8b095871
IC
33301 var index = [
33302 -3, /* -1 -1 */
33303 -1, /* -1 0 */
33304 -5, /* -1 1 */
33305 -7, /* 0 -1 */
33306 0, /* 0 0 */
33307 7, /* 0 1 */
33308 5, /* 1 -1 */
33309 1, /* 1 0 */
33310 3 /* 1 1 */
33311 ];
ebd8d4e8 33312
8b095871
IC
33313 var jsf = getJSF(coeffs[a], coeffs[b]);
33314 max = Math.max(jsf[0].length, max);
33315 naf[a] = new Array(max);
33316 naf[b] = new Array(max);
33317 for (var j = 0; j < max; j++) {
33318 var ja = jsf[0][j] | 0;
33319 var jb = jsf[1][j] | 0;
ebd8d4e8 33320
8b095871
IC
33321 naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
33322 naf[b][j] = 0;
33323 wnd[a] = comb;
33324 }
33325 }
ebd8d4e8 33326
8b095871
IC
33327 var acc = this.jpoint(null, null, null);
33328 var tmp = this._wnafT4;
33329 for (var i = max; i >= 0; i--) {
33330 var k = 0;
ebd8d4e8 33331
8b095871
IC
33332 while (i >= 0) {
33333 var zero = true;
33334 for (var j = 0; j < len; j++) {
33335 tmp[j] = naf[j][i] | 0;
33336 if (tmp[j] !== 0)
33337 zero = false;
33338 }
33339 if (!zero)
33340 break;
33341 k++;
33342 i--;
33343 }
33344 if (i >= 0)
33345 k++;
33346 acc = acc.dblp(k);
33347 if (i < 0)
33348 break;
ebd8d4e8 33349
8b095871
IC
33350 for (var j = 0; j < len; j++) {
33351 var z = tmp[j];
33352 var p;
33353 if (z === 0)
33354 continue;
33355 else if (z > 0)
33356 p = wnd[j][(z - 1) >> 1];
33357 else if (z < 0)
33358 p = wnd[j][(-z - 1) >> 1].neg();
33359
33360 if (p.type === 'affine')
33361 acc = acc.mixedAdd(p);
33362 else
33363 acc = acc.add(p);
33364 }
33365 }
33366 // Zeroify references
33367 for (var i = 0; i < len; i++)
33368 wnd[i] = null;
ebd8d4e8 33369
8b095871
IC
33370 if (jacobianResult)
33371 return acc;
33372 else
33373 return acc.toP();
33374};
ebd8d4e8 33375
8b095871
IC
33376function BasePoint(curve, type) {
33377 this.curve = curve;
33378 this.type = type;
33379 this.precomputed = null;
33380}
33381BaseCurve.BasePoint = BasePoint;
ebd8d4e8 33382
8b095871
IC
33383BasePoint.prototype.eq = function eq(/*other*/) {
33384 throw new Error('Not implemented');
33385};
ebd8d4e8 33386
8b095871
IC
33387BasePoint.prototype.validate = function validate() {
33388 return this.curve.validate(this);
33389};
ebd8d4e8 33390
8b095871
IC
33391BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
33392 bytes = utils.toArray(bytes, enc);
ebd8d4e8 33393
8b095871 33394 var len = this.p.byteLength();
ebd8d4e8 33395
8b095871
IC
33396 // uncompressed, hybrid-odd, hybrid-even
33397 if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&
33398 bytes.length - 1 === 2 * len) {
33399 if (bytes[0] === 0x06)
33400 assert(bytes[bytes.length - 1] % 2 === 0);
33401 else if (bytes[0] === 0x07)
33402 assert(bytes[bytes.length - 1] % 2 === 1);
ebd8d4e8 33403
8b095871
IC
33404 var res = this.point(bytes.slice(1, 1 + len),
33405 bytes.slice(1 + len, 1 + 2 * len));
ebd8d4e8 33406
8b095871
IC
33407 return res;
33408 } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&
33409 bytes.length - 1 === len) {
33410 return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
ebd8d4e8 33411 }
8b095871
IC
33412 throw new Error('Unknown point format');
33413};
ebd8d4e8 33414
8b095871
IC
33415BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
33416 return this.encode(enc, true);
33417};
33418
33419BasePoint.prototype._encode = function _encode(compact) {
33420 var len = this.curve.p.byteLength();
33421 var x = this.getX().toArray('be', len);
33422
33423 if (compact)
33424 return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);
33425
33426 return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;
33427};
33428
33429BasePoint.prototype.encode = function encode(enc, compact) {
33430 return utils.encode(this._encode(compact), enc);
33431};
33432
33433BasePoint.prototype.precompute = function precompute(power) {
33434 if (this.precomputed)
33435 return this;
33436
33437 var precomputed = {
33438 doubles: null,
33439 naf: null,
33440 beta: null
33441 };
33442 precomputed.naf = this._getNAFPoints(8);
33443 precomputed.doubles = this._getDoubles(4, power);
33444 precomputed.beta = this._getBeta();
33445 this.precomputed = precomputed;
33446
33447 return this;
33448};
33449
33450BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
33451 if (!this.precomputed)
33452 return false;
33453
33454 var doubles = this.precomputed.doubles;
33455 if (!doubles)
33456 return false;
33457
33458 return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
33459};
33460
33461BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
33462 if (this.precomputed && this.precomputed.doubles)
33463 return this.precomputed.doubles;
33464
33465 var doubles = [ this ];
33466 var acc = this;
33467 for (var i = 0; i < power; i += step) {
33468 for (var j = 0; j < step; j++)
33469 acc = acc.dbl();
33470 doubles.push(acc);
ebd8d4e8 33471 }
8b095871
IC
33472 return {
33473 step: step,
33474 points: doubles
33475 };
33476};
ebd8d4e8 33477
8b095871
IC
33478BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
33479 if (this.precomputed && this.precomputed.naf)
33480 return this.precomputed.naf;
ebd8d4e8 33481
8b095871
IC
33482 var res = [ this ];
33483 var max = (1 << wnd) - 1;
33484 var dbl = max === 1 ? null : this.dbl();
33485 for (var i = 1; i < max; i++)
33486 res[i] = res[i - 1].add(dbl);
33487 return {
33488 wnd: wnd,
33489 points: res
33490 };
33491};
ebd8d4e8 33492
8b095871
IC
33493BasePoint.prototype._getBeta = function _getBeta() {
33494 return null;
33495};
ebd8d4e8 33496
8b095871
IC
33497BasePoint.prototype.dblp = function dblp(k) {
33498 var r = this;
33499 for (var i = 0; i < k; i++)
33500 r = r.dbl();
33501 return r;
33502};
ebd8d4e8 33503
8b095871
IC
33504},{"../../elliptic":39,"bn.js":33}],41:[function(require,module,exports){
33505'use strict';
ebd8d4e8 33506
8b095871
IC
33507var curve = require('../curve');
33508var elliptic = require('../../elliptic');
33509var BN = require('bn.js');
33510var inherits = require('inherits');
33511var Base = curve.base;
ebd8d4e8 33512
8b095871 33513var assert = elliptic.utils.assert;
ebd8d4e8 33514
8b095871
IC
33515function EdwardsCurve(conf) {
33516 // NOTE: Important as we are creating point in Base.call()
33517 this.twisted = (conf.a | 0) !== 1;
33518 this.mOneA = this.twisted && (conf.a | 0) === -1;
33519 this.extended = this.mOneA;
33520
33521 Base.call(this, 'edwards', conf);
33522
33523 this.a = new BN(conf.a, 16).umod(this.red.m);
33524 this.a = this.a.toRed(this.red);
33525 this.c = new BN(conf.c, 16).toRed(this.red);
33526 this.c2 = this.c.redSqr();
33527 this.d = new BN(conf.d, 16).toRed(this.red);
33528 this.dd = this.d.redAdd(this.d);
33529
33530 assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
33531 this.oneC = (conf.c | 0) === 1;
ebd8d4e8 33532}
8b095871
IC
33533inherits(EdwardsCurve, Base);
33534module.exports = EdwardsCurve;
ebd8d4e8 33535
8b095871
IC
33536EdwardsCurve.prototype._mulA = function _mulA(num) {
33537 if (this.mOneA)
33538 return num.redNeg();
33539 else
33540 return this.a.redMul(num);
33541};
ebd8d4e8 33542
8b095871
IC
33543EdwardsCurve.prototype._mulC = function _mulC(num) {
33544 if (this.oneC)
33545 return num;
33546 else
33547 return this.c.redMul(num);
33548};
ebd8d4e8 33549
8b095871
IC
33550// Just for compatibility with Short curve
33551EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
33552 return this.point(x, y, z, t);
33553};
ebd8d4e8 33554
8b095871
IC
33555EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
33556 x = new BN(x, 16);
33557 if (!x.red)
33558 x = x.toRed(this.red);
ebd8d4e8 33559
8b095871
IC
33560 var x2 = x.redSqr();
33561 var rhs = this.c2.redSub(this.a.redMul(x2));
33562 var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
33563
33564 var y2 = rhs.redMul(lhs.redInvm());
33565 var y = y2.redSqrt();
33566 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
33567 throw new Error('invalid point');
33568
33569 var isOdd = y.fromRed().isOdd();
33570 if (odd && !isOdd || !odd && isOdd)
33571 y = y.redNeg();
33572
33573 return this.point(x, y);
33574};
33575
33576EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
33577 y = new BN(y, 16);
33578 if (!y.red)
33579 y = y.toRed(this.red);
33580
33581 // x^2 = (y^2 - 1) / (d y^2 + 1)
33582 var y2 = y.redSqr();
33583 var lhs = y2.redSub(this.one);
33584 var rhs = y2.redMul(this.d).redAdd(this.one);
33585 var x2 = lhs.redMul(rhs.redInvm());
33586
33587 if (x2.cmp(this.zero) === 0) {
33588 if (odd)
33589 throw new Error('invalid point');
33590 else
33591 return this.point(this.zero, y);
ebd8d4e8
IC
33592 }
33593
8b095871
IC
33594 var x = x2.redSqrt();
33595 if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
33596 throw new Error('invalid point');
ebd8d4e8 33597
8b095871
IC
33598 if (x.isOdd() !== odd)
33599 x = x.redNeg();
ebd8d4e8 33600
8b095871
IC
33601 return this.point(x, y);
33602};
ebd8d4e8 33603
8b095871
IC
33604EdwardsCurve.prototype.validate = function validate(point) {
33605 if (point.isInfinity())
33606 return true;
ebd8d4e8 33607
8b095871
IC
33608 // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)
33609 point.normalize();
ebd8d4e8 33610
8b095871
IC
33611 var x2 = point.x.redSqr();
33612 var y2 = point.y.redSqr();
33613 var lhs = x2.redMul(this.a).redAdd(y2);
33614 var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
ebd8d4e8 33615
8b095871
IC
33616 return lhs.cmp(rhs) === 0;
33617};
ebd8d4e8 33618
8b095871
IC
33619function Point(curve, x, y, z, t) {
33620 Base.BasePoint.call(this, curve, 'projective');
33621 if (x === null && y === null && z === null) {
33622 this.x = this.curve.zero;
33623 this.y = this.curve.one;
33624 this.z = this.curve.one;
33625 this.t = this.curve.zero;
33626 this.zOne = true;
33627 } else {
33628 this.x = new BN(x, 16);
33629 this.y = new BN(y, 16);
33630 this.z = z ? new BN(z, 16) : this.curve.one;
33631 this.t = t && new BN(t, 16);
33632 if (!this.x.red)
33633 this.x = this.x.toRed(this.curve.red);
33634 if (!this.y.red)
33635 this.y = this.y.toRed(this.curve.red);
33636 if (!this.z.red)
33637 this.z = this.z.toRed(this.curve.red);
33638 if (this.t && !this.t.red)
33639 this.t = this.t.toRed(this.curve.red);
33640 this.zOne = this.z === this.curve.one;
33641
33642 // Use extended coordinates
33643 if (this.curve.extended && !this.t) {
33644 this.t = this.x.redMul(this.y);
33645 if (!this.zOne)
33646 this.t = this.t.redMul(this.z.redInvm());
33647 }
33648 }
33649}
33650inherits(Point, Base.BasePoint);
33651
33652EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
33653 return Point.fromJSON(this, obj);
33654};
33655
33656EdwardsCurve.prototype.point = function point(x, y, z, t) {
33657 return new Point(this, x, y, z, t);
33658};
33659
33660Point.fromJSON = function fromJSON(curve, obj) {
33661 return new Point(curve, obj[0], obj[1], obj[2]);
33662};
33663
33664Point.prototype.inspect = function inspect() {
33665 if (this.isInfinity())
33666 return '<EC Point Infinity>';
33667 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
33668 ' y: ' + this.y.fromRed().toString(16, 2) +
33669 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
33670};
33671
33672Point.prototype.isInfinity = function isInfinity() {
33673 // XXX This code assumes that zero is always zero in red
33674 return this.x.cmpn(0) === 0 &&
33675 this.y.cmp(this.z) === 0;
33676};
33677
33678Point.prototype._extDbl = function _extDbl() {
33679 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
33680 // #doubling-dbl-2008-hwcd
33681 // 4M + 4S
33682
33683 // A = X1^2
33684 var a = this.x.redSqr();
33685 // B = Y1^2
33686 var b = this.y.redSqr();
33687 // C = 2 * Z1^2
33688 var c = this.z.redSqr();
33689 c = c.redIAdd(c);
33690 // D = a * A
33691 var d = this.curve._mulA(a);
33692 // E = (X1 + Y1)^2 - A - B
33693 var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
33694 // G = D + B
33695 var g = d.redAdd(b);
33696 // F = G - C
33697 var f = g.redSub(c);
33698 // H = D - B
33699 var h = d.redSub(b);
33700 // X3 = E * F
33701 var nx = e.redMul(f);
33702 // Y3 = G * H
33703 var ny = g.redMul(h);
33704 // T3 = E * H
33705 var nt = e.redMul(h);
33706 // Z3 = F * G
33707 var nz = f.redMul(g);
33708 return this.curve.point(nx, ny, nz, nt);
33709};
33710
33711Point.prototype._projDbl = function _projDbl() {
33712 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
33713 // #doubling-dbl-2008-bbjlp
33714 // #doubling-dbl-2007-bl
33715 // and others
33716 // Generally 3M + 4S or 2M + 4S
33717
33718 // B = (X1 + Y1)^2
33719 var b = this.x.redAdd(this.y).redSqr();
33720 // C = X1^2
33721 var c = this.x.redSqr();
33722 // D = Y1^2
33723 var d = this.y.redSqr();
33724
33725 var nx;
33726 var ny;
33727 var nz;
33728 if (this.curve.twisted) {
33729 // E = a * C
33730 var e = this.curve._mulA(c);
33731 // F = E + D
33732 var f = e.redAdd(d);
33733 if (this.zOne) {
33734 // X3 = (B - C - D) * (F - 2)
33735 nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
33736 // Y3 = F * (E - D)
33737 ny = f.redMul(e.redSub(d));
33738 // Z3 = F^2 - 2 * F
33739 nz = f.redSqr().redSub(f).redSub(f);
33740 } else {
33741 // H = Z1^2
33742 var h = this.z.redSqr();
33743 // J = F - 2 * H
33744 var j = f.redSub(h).redISub(h);
33745 // X3 = (B-C-D)*J
33746 nx = b.redSub(c).redISub(d).redMul(j);
33747 // Y3 = F * (E - D)
33748 ny = f.redMul(e.redSub(d));
33749 // Z3 = F * J
33750 nz = f.redMul(j);
33751 }
33752 } else {
33753 // E = C + D
33754 var e = c.redAdd(d);
33755 // H = (c * Z1)^2
33756 var h = this.curve._mulC(this.c.redMul(this.z)).redSqr();
33757 // J = E - 2 * H
33758 var j = e.redSub(h).redSub(h);
33759 // X3 = c * (B - E) * J
33760 nx = this.curve._mulC(b.redISub(e)).redMul(j);
33761 // Y3 = c * E * (C - D)
33762 ny = this.curve._mulC(e).redMul(c.redISub(d));
33763 // Z3 = E * J
33764 nz = e.redMul(j);
33765 }
33766 return this.curve.point(nx, ny, nz);
33767};
33768
33769Point.prototype.dbl = function dbl() {
33770 if (this.isInfinity())
33771 return this;
33772
33773 // Double in extended coordinates
33774 if (this.curve.extended)
33775 return this._extDbl();
33776 else
33777 return this._projDbl();
33778};
33779
33780Point.prototype._extAdd = function _extAdd(p) {
33781 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
33782 // #addition-add-2008-hwcd-3
33783 // 8M
33784
33785 // A = (Y1 - X1) * (Y2 - X2)
33786 var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
33787 // B = (Y1 + X1) * (Y2 + X2)
33788 var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
33789 // C = T1 * k * T2
33790 var c = this.t.redMul(this.curve.dd).redMul(p.t);
33791 // D = Z1 * 2 * Z2
33792 var d = this.z.redMul(p.z.redAdd(p.z));
33793 // E = B - A
33794 var e = b.redSub(a);
33795 // F = D - C
33796 var f = d.redSub(c);
33797 // G = D + C
33798 var g = d.redAdd(c);
33799 // H = B + A
33800 var h = b.redAdd(a);
33801 // X3 = E * F
33802 var nx = e.redMul(f);
33803 // Y3 = G * H
33804 var ny = g.redMul(h);
33805 // T3 = E * H
33806 var nt = e.redMul(h);
33807 // Z3 = F * G
33808 var nz = f.redMul(g);
33809 return this.curve.point(nx, ny, nz, nt);
33810};
33811
33812Point.prototype._projAdd = function _projAdd(p) {
33813 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
33814 // #addition-add-2008-bbjlp
33815 // #addition-add-2007-bl
33816 // 10M + 1S
33817
33818 // A = Z1 * Z2
33819 var a = this.z.redMul(p.z);
33820 // B = A^2
33821 var b = a.redSqr();
33822 // C = X1 * X2
33823 var c = this.x.redMul(p.x);
33824 // D = Y1 * Y2
33825 var d = this.y.redMul(p.y);
33826 // E = d * C * D
33827 var e = this.curve.d.redMul(c).redMul(d);
33828 // F = B - E
33829 var f = b.redSub(e);
33830 // G = B + E
33831 var g = b.redAdd(e);
33832 // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)
33833 var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
33834 var nx = a.redMul(f).redMul(tmp);
33835 var ny;
33836 var nz;
33837 if (this.curve.twisted) {
33838 // Y3 = A * G * (D - a * C)
33839 ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
33840 // Z3 = F * G
33841 nz = f.redMul(g);
33842 } else {
33843 // Y3 = A * G * (D - C)
33844 ny = a.redMul(g).redMul(d.redSub(c));
33845 // Z3 = c * F * G
33846 nz = this.curve._mulC(f).redMul(g);
ebd8d4e8 33847 }
8b095871
IC
33848 return this.curve.point(nx, ny, nz);
33849};
ebd8d4e8 33850
8b095871
IC
33851Point.prototype.add = function add(p) {
33852 if (this.isInfinity())
33853 return p;
33854 if (p.isInfinity())
33855 return this;
ebd8d4e8 33856
8b095871
IC
33857 if (this.curve.extended)
33858 return this._extAdd(p);
33859 else
33860 return this._projAdd(p);
33861};
ebd8d4e8 33862
8b095871
IC
33863Point.prototype.mul = function mul(k) {
33864 if (this._hasDoubles(k))
33865 return this.curve._fixedNafMul(this, k);
33866 else
33867 return this.curve._wnafMul(this, k);
33868};
ebd8d4e8 33869
8b095871
IC
33870Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
33871 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);
33872};
ebd8d4e8 33873
8b095871
IC
33874Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
33875 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);
33876};
ebd8d4e8 33877
8b095871
IC
33878Point.prototype.normalize = function normalize() {
33879 if (this.zOne)
33880 return this;
33881
33882 // Normalize coordinates
33883 var zi = this.z.redInvm();
33884 this.x = this.x.redMul(zi);
33885 this.y = this.y.redMul(zi);
33886 if (this.t)
33887 this.t = this.t.redMul(zi);
33888 this.z = this.curve.one;
33889 this.zOne = true;
33890 return this;
33891};
33892
33893Point.prototype.neg = function neg() {
33894 return this.curve.point(this.x.redNeg(),
33895 this.y,
33896 this.z,
33897 this.t && this.t.redNeg());
33898};
33899
33900Point.prototype.getX = function getX() {
33901 this.normalize();
33902 return this.x.fromRed();
33903};
33904
33905Point.prototype.getY = function getY() {
33906 this.normalize();
33907 return this.y.fromRed();
33908};
33909
33910Point.prototype.eq = function eq(other) {
33911 return this === other ||
33912 this.getX().cmp(other.getX()) === 0 &&
33913 this.getY().cmp(other.getY()) === 0;
33914};
33915
33916Point.prototype.eqXToP = function eqXToP(x) {
33917 var rx = x.toRed(this.curve.red).redMul(this.z);
33918 if (this.x.cmp(rx) === 0)
33919 return true;
ebd8d4e8 33920
8b095871
IC
33921 var xc = x.clone();
33922 var t = this.curve.redN.redMul(this.z);
33923 for (;;) {
33924 xc.iadd(this.curve.n);
33925 if (xc.cmp(this.curve.p) >= 0)
33926 return false;
ebd8d4e8 33927
8b095871
IC
33928 rx.redIAdd(t);
33929 if (this.x.cmp(rx) === 0)
33930 return true;
ebd8d4e8 33931 }
8b095871
IC
33932 return false;
33933};
ebd8d4e8 33934
8b095871
IC
33935// Compatibility with BaseCurve
33936Point.prototype.toP = Point.prototype.normalize;
33937Point.prototype.mixedAdd = Point.prototype.add;
ebd8d4e8 33938
8b095871
IC
33939},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],42:[function(require,module,exports){
33940'use strict';
ebd8d4e8 33941
8b095871 33942var curve = exports;
ebd8d4e8 33943
8b095871
IC
33944curve.base = require('./base');
33945curve.short = require('./short');
33946curve.mont = require('./mont');
33947curve.edwards = require('./edwards');
ebd8d4e8 33948
8b095871
IC
33949},{"./base":40,"./edwards":41,"./mont":43,"./short":44}],43:[function(require,module,exports){
33950'use strict';
ebd8d4e8 33951
8b095871
IC
33952var curve = require('../curve');
33953var BN = require('bn.js');
33954var inherits = require('inherits');
33955var Base = curve.base;
ebd8d4e8 33956
8b095871
IC
33957var elliptic = require('../../elliptic');
33958var utils = elliptic.utils;
ebd8d4e8 33959
8b095871
IC
33960function MontCurve(conf) {
33961 Base.call(this, 'mont', conf);
ebd8d4e8 33962
8b095871
IC
33963 this.a = new BN(conf.a, 16).toRed(this.red);
33964 this.b = new BN(conf.b, 16).toRed(this.red);
33965 this.i4 = new BN(4).toRed(this.red).redInvm();
33966 this.two = new BN(2).toRed(this.red);
33967 this.a24 = this.i4.redMul(this.a.redAdd(this.two));
ebd8d4e8 33968}
8b095871
IC
33969inherits(MontCurve, Base);
33970module.exports = MontCurve;
ebd8d4e8 33971
8b095871
IC
33972MontCurve.prototype.validate = function validate(point) {
33973 var x = point.normalize().x;
33974 var x2 = x.redSqr();
33975 var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
33976 var y = rhs.redSqrt();
ebd8d4e8 33977
8b095871
IC
33978 return y.redSqr().cmp(rhs) === 0;
33979};
ebd8d4e8 33980
8b095871
IC
33981function Point(curve, x, z) {
33982 Base.BasePoint.call(this, curve, 'projective');
33983 if (x === null && z === null) {
33984 this.x = this.curve.one;
33985 this.z = this.curve.zero;
33986 } else {
33987 this.x = new BN(x, 16);
33988 this.z = new BN(z, 16);
33989 if (!this.x.red)
33990 this.x = this.x.toRed(this.curve.red);
33991 if (!this.z.red)
33992 this.z = this.z.toRed(this.curve.red);
33993 }
33994}
33995inherits(Point, Base.BasePoint);
ebd8d4e8 33996
8b095871
IC
33997MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
33998 return this.point(utils.toArray(bytes, enc), 1);
33999};
ebd8d4e8 34000
8b095871
IC
34001MontCurve.prototype.point = function point(x, z) {
34002 return new Point(this, x, z);
34003};
ebd8d4e8 34004
8b095871
IC
34005MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
34006 return Point.fromJSON(this, obj);
34007};
ebd8d4e8 34008
8b095871
IC
34009Point.prototype.precompute = function precompute() {
34010 // No-op
34011};
ebd8d4e8 34012
8b095871
IC
34013Point.prototype._encode = function _encode() {
34014 return this.getX().toArray('be', this.curve.p.byteLength());
34015};
ebd8d4e8 34016
8b095871
IC
34017Point.fromJSON = function fromJSON(curve, obj) {
34018 return new Point(curve, obj[0], obj[1] || curve.one);
34019};
ebd8d4e8 34020
8b095871
IC
34021Point.prototype.inspect = function inspect() {
34022 if (this.isInfinity())
34023 return '<EC Point Infinity>';
34024 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
34025 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
34026};
ebd8d4e8 34027
8b095871
IC
34028Point.prototype.isInfinity = function isInfinity() {
34029 // XXX This code assumes that zero is always zero in red
34030 return this.z.cmpn(0) === 0;
34031};
ebd8d4e8 34032
8b095871
IC
34033Point.prototype.dbl = function dbl() {
34034 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3
34035 // 2M + 2S + 4A
34036
34037 // A = X1 + Z1
34038 var a = this.x.redAdd(this.z);
34039 // AA = A^2
34040 var aa = a.redSqr();
34041 // B = X1 - Z1
34042 var b = this.x.redSub(this.z);
34043 // BB = B^2
34044 var bb = b.redSqr();
34045 // C = AA - BB
34046 var c = aa.redSub(bb);
34047 // X3 = AA * BB
34048 var nx = aa.redMul(bb);
34049 // Z3 = C * (BB + A24 * C)
34050 var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
34051 return this.curve.point(nx, nz);
34052};
ebd8d4e8 34053
8b095871
IC
34054Point.prototype.add = function add() {
34055 throw new Error('Not supported on Montgomery curve');
34056};
ebd8d4e8 34057
8b095871
IC
34058Point.prototype.diffAdd = function diffAdd(p, diff) {
34059 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3
34060 // 4M + 2S + 6A
34061
34062 // A = X2 + Z2
34063 var a = this.x.redAdd(this.z);
34064 // B = X2 - Z2
34065 var b = this.x.redSub(this.z);
34066 // C = X3 + Z3
34067 var c = p.x.redAdd(p.z);
34068 // D = X3 - Z3
34069 var d = p.x.redSub(p.z);
34070 // DA = D * A
34071 var da = d.redMul(a);
34072 // CB = C * B
34073 var cb = c.redMul(b);
34074 // X5 = Z1 * (DA + CB)^2
34075 var nx = diff.z.redMul(da.redAdd(cb).redSqr());
34076 // Z5 = X1 * (DA - CB)^2
34077 var nz = diff.x.redMul(da.redISub(cb).redSqr());
34078 return this.curve.point(nx, nz);
34079};
ebd8d4e8 34080
8b095871
IC
34081Point.prototype.mul = function mul(k) {
34082 var t = k.clone();
34083 var a = this; // (N / 2) * Q + Q
34084 var b = this.curve.point(null, null); // (N / 2) * Q
34085 var c = this; // Q
34086
34087 for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
34088 bits.push(t.andln(1));
34089
34090 for (var i = bits.length - 1; i >= 0; i--) {
34091 if (bits[i] === 0) {
34092 // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q
34093 a = a.diffAdd(b, c);
34094 // N * Q = 2 * ((N / 2) * Q + Q))
34095 b = b.dbl();
34096 } else {
34097 // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)
34098 b = a.diffAdd(b, c);
34099 // N * Q + Q = 2 * ((N / 2) * Q + Q)
34100 a = a.dbl();
34101 }
ebd8d4e8 34102 }
8b095871
IC
34103 return b;
34104};
ebd8d4e8 34105
8b095871
IC
34106Point.prototype.mulAdd = function mulAdd() {
34107 throw new Error('Not supported on Montgomery curve');
34108};
ebd8d4e8 34109
8b095871
IC
34110Point.prototype.jumlAdd = function jumlAdd() {
34111 throw new Error('Not supported on Montgomery curve');
34112};
ebd8d4e8 34113
8b095871
IC
34114Point.prototype.eq = function eq(other) {
34115 return this.getX().cmp(other.getX()) === 0;
34116};
ebd8d4e8 34117
8b095871
IC
34118Point.prototype.normalize = function normalize() {
34119 this.x = this.x.redMul(this.z.redInvm());
34120 this.z = this.curve.one;
34121 return this;
34122};
ebd8d4e8 34123
8b095871
IC
34124Point.prototype.getX = function getX() {
34125 // Normalize coordinates
34126 this.normalize();
34127
34128 return this.x.fromRed();
34129};
34130
34131},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],44:[function(require,module,exports){
ab78acc6 34132'use strict';
ebd8d4e8 34133
8b095871
IC
34134var curve = require('../curve');
34135var elliptic = require('../../elliptic');
34136var BN = require('bn.js');
34137var inherits = require('inherits');
34138var Base = curve.base;
ab78acc6 34139
8b095871 34140var assert = elliptic.utils.assert;
ebd8d4e8 34141
8b095871
IC
34142function ShortCurve(conf) {
34143 Base.call(this, 'short', conf);
ebd8d4e8 34144
8b095871
IC
34145 this.a = new BN(conf.a, 16).toRed(this.red);
34146 this.b = new BN(conf.b, 16).toRed(this.red);
34147 this.tinv = this.two.redInvm();
ab78acc6 34148
8b095871
IC
34149 this.zeroA = this.a.fromRed().cmpn(0) === 0;
34150 this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
ab78acc6 34151
8b095871
IC
34152 // If the curve is endomorphic, precalculate beta and lambda
34153 this.endo = this._getEndomorphism(conf);
34154 this._endoWnafT1 = new Array(4);
34155 this._endoWnafT2 = new Array(4);
ebd8d4e8 34156}
8b095871
IC
34157inherits(ShortCurve, Base);
34158module.exports = ShortCurve;
ebd8d4e8 34159
8b095871
IC
34160ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
34161 // No efficient endomorphism
34162 if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
34163 return;
ebd8d4e8 34164
8b095871
IC
34165 // Compute beta and lambda, that lambda * P = (beta * Px; Py)
34166 var beta;
34167 var lambda;
34168 if (conf.beta) {
34169 beta = new BN(conf.beta, 16).toRed(this.red);
34170 } else {
34171 var betas = this._getEndoRoots(this.p);
34172 // Choose the smallest beta
34173 beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
34174 beta = beta.toRed(this.red);
34175 }
34176 if (conf.lambda) {
34177 lambda = new BN(conf.lambda, 16);
34178 } else {
34179 // Choose the lambda that is matching selected beta
34180 var lambdas = this._getEndoRoots(this.n);
34181 if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
34182 lambda = lambdas[0];
34183 } else {
34184 lambda = lambdas[1];
34185 assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
34186 }
34187 }
ab78acc6 34188
8b095871
IC
34189 // Get basis vectors, used for balanced length-two representation
34190 var basis;
34191 if (conf.basis) {
34192 basis = conf.basis.map(function(vec) {
34193 return {
34194 a: new BN(vec.a, 16),
34195 b: new BN(vec.b, 16)
34196 };
34197 });
34198 } else {
34199 basis = this._getEndoBasis(lambda);
34200 }
ab78acc6 34201
8b095871
IC
34202 return {
34203 beta: beta,
34204 lambda: lambda,
34205 basis: basis
34206 };
34207};
ab78acc6 34208
8b095871
IC
34209ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
34210 // Find roots of for x^2 + x + 1 in F
34211 // Root = (-1 +- Sqrt(-3)) / 2
34212 //
34213 var red = num === this.p ? this.red : BN.mont(num);
34214 var tinv = new BN(2).toRed(red).redInvm();
34215 var ntinv = tinv.redNeg();
ab78acc6 34216
8b095871 34217 var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
ab78acc6 34218
8b095871
IC
34219 var l1 = ntinv.redAdd(s).fromRed();
34220 var l2 = ntinv.redSub(s).fromRed();
34221 return [ l1, l2 ];
34222};
ab78acc6 34223
8b095871
IC
34224ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
34225 // aprxSqrt >= sqrt(this.n)
34226 var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
34227
34228 // 3.74
34229 // Run EGCD, until r(L + 1) < aprxSqrt
34230 var u = lambda;
34231 var v = this.n.clone();
34232 var x1 = new BN(1);
34233 var y1 = new BN(0);
34234 var x2 = new BN(0);
34235 var y2 = new BN(1);
34236
34237 // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
34238 var a0;
34239 var b0;
34240 // First vector
34241 var a1;
34242 var b1;
34243 // Second vector
34244 var a2;
34245 var b2;
34246
34247 var prevR;
34248 var i = 0;
34249 var r;
34250 var x;
34251 while (u.cmpn(0) !== 0) {
34252 var q = v.div(u);
34253 r = v.sub(q.mul(u));
34254 x = x2.sub(q.mul(x1));
34255 var y = y2.sub(q.mul(y1));
34256
34257 if (!a1 && r.cmp(aprxSqrt) < 0) {
34258 a0 = prevR.neg();
34259 b0 = x1;
34260 a1 = r.neg();
34261 b1 = x;
34262 } else if (a1 && ++i === 2) {
34263 break;
ab78acc6 34264 }
8b095871 34265 prevR = r;
ab78acc6 34266
8b095871
IC
34267 v = u;
34268 u = r;
34269 x2 = x1;
34270 x1 = x;
34271 y2 = y1;
34272 y1 = y;
ebd8d4e8 34273 }
8b095871
IC
34274 a2 = r.neg();
34275 b2 = x;
ab78acc6 34276
8b095871
IC
34277 var len1 = a1.sqr().add(b1.sqr());
34278 var len2 = a2.sqr().add(b2.sqr());
34279 if (len2.cmp(len1) >= 0) {
34280 a2 = a0;
34281 b2 = b0;
34282 }
ebd8d4e8 34283
8b095871
IC
34284 // Normalize signs
34285 if (a1.negative) {
34286 a1 = a1.neg();
34287 b1 = b1.neg();
34288 }
34289 if (a2.negative) {
34290 a2 = a2.neg();
34291 b2 = b2.neg();
34292 }
ebd8d4e8 34293
8b095871
IC
34294 return [
34295 { a: a1, b: b1 },
34296 { a: a2, b: b2 }
34297 ];
34298};
ab78acc6 34299
8b095871
IC
34300ShortCurve.prototype._endoSplit = function _endoSplit(k) {
34301 var basis = this.endo.basis;
34302 var v1 = basis[0];
34303 var v2 = basis[1];
ab78acc6 34304
8b095871
IC
34305 var c1 = v2.b.mul(k).divRound(this.n);
34306 var c2 = v1.b.neg().mul(k).divRound(this.n);
ab78acc6 34307
8b095871
IC
34308 var p1 = c1.mul(v1.a);
34309 var p2 = c2.mul(v2.a);
34310 var q1 = c1.mul(v1.b);
34311 var q2 = c2.mul(v2.b);
ab78acc6 34312
8b095871
IC
34313 // Calculate answer
34314 var k1 = k.sub(p1).sub(p2);
34315 var k2 = q1.add(q2).neg();
34316 return { k1: k1, k2: k2 };
34317};
ab78acc6 34318
8b095871
IC
34319ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
34320 x = new BN(x, 16);
34321 if (!x.red)
34322 x = x.toRed(this.red);
ab78acc6 34323
8b095871
IC
34324 var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
34325 var y = y2.redSqrt();
34326 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
34327 throw new Error('invalid point');
ab78acc6 34328
8b095871
IC
34329 // XXX Is there any way to tell if the number is odd without converting it
34330 // to non-red form?
34331 var isOdd = y.fromRed().isOdd();
34332 if (odd && !isOdd || !odd && isOdd)
34333 y = y.redNeg();
ab78acc6 34334
8b095871
IC
34335 return this.point(x, y);
34336};
ab78acc6 34337
8b095871
IC
34338ShortCurve.prototype.validate = function validate(point) {
34339 if (point.inf)
34340 return true;
ab78acc6 34341
8b095871
IC
34342 var x = point.x;
34343 var y = point.y;
ab78acc6 34344
8b095871
IC
34345 var ax = this.a.redMul(x);
34346 var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
34347 return y.redSqr().redISub(rhs).cmpn(0) === 0;
34348};
ab78acc6 34349
8b095871
IC
34350ShortCurve.prototype._endoWnafMulAdd =
34351 function _endoWnafMulAdd(points, coeffs, jacobianResult) {
34352 var npoints = this._endoWnafT1;
34353 var ncoeffs = this._endoWnafT2;
34354 for (var i = 0; i < points.length; i++) {
34355 var split = this._endoSplit(coeffs[i]);
34356 var p = points[i];
34357 var beta = p._getBeta();
ab78acc6 34358
8b095871
IC
34359 if (split.k1.negative) {
34360 split.k1.ineg();
34361 p = p.neg(true);
34362 }
34363 if (split.k2.negative) {
34364 split.k2.ineg();
34365 beta = beta.neg(true);
ab78acc6 34366 }
ab78acc6 34367
8b095871
IC
34368 npoints[i * 2] = p;
34369 npoints[i * 2 + 1] = beta;
34370 ncoeffs[i * 2] = split.k1;
34371 ncoeffs[i * 2 + 1] = split.k2;
34372 }
34373 var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);
ab78acc6 34374
8b095871
IC
34375 // Clean-up references to points and coefficients
34376 for (var j = 0; j < i * 2; j++) {
34377 npoints[j] = null;
34378 ncoeffs[j] = null;
34379 }
34380 return res;
34381};
34382
34383function Point(curve, x, y, isRed) {
34384 Base.BasePoint.call(this, curve, 'affine');
34385 if (x === null && y === null) {
34386 this.x = null;
34387 this.y = null;
34388 this.inf = true;
34389 } else {
34390 this.x = new BN(x, 16);
34391 this.y = new BN(y, 16);
34392 // Force redgomery representation when loading from JSON
34393 if (isRed) {
34394 this.x.forceRed(this.curve.red);
34395 this.y.forceRed(this.curve.red);
ab78acc6 34396 }
8b095871
IC
34397 if (!this.x.red)
34398 this.x = this.x.toRed(this.curve.red);
34399 if (!this.y.red)
34400 this.y = this.y.toRed(this.curve.red);
34401 this.inf = false;
34402 }
34403}
34404inherits(Point, Base.BasePoint);
ab78acc6 34405
8b095871
IC
34406ShortCurve.prototype.point = function point(x, y, isRed) {
34407 return new Point(this, x, y, isRed);
34408};
ab78acc6 34409
8b095871
IC
34410ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
34411 return Point.fromJSON(this, obj, red);
34412};
ab78acc6 34413
8b095871
IC
34414Point.prototype._getBeta = function _getBeta() {
34415 if (!this.curve.endo)
34416 return;
ab78acc6 34417
8b095871
IC
34418 var pre = this.precomputed;
34419 if (pre && pre.beta)
34420 return pre.beta;
ab78acc6 34421
8b095871
IC
34422 var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
34423 if (pre) {
34424 var curve = this.curve;
34425 var endoMul = function(p) {
34426 return curve.point(p.x.redMul(curve.endo.beta), p.y);
34427 };
34428 pre.beta = beta;
34429 beta.precomputed = {
34430 beta: null,
34431 naf: pre.naf && {
34432 wnd: pre.naf.wnd,
34433 points: pre.naf.points.map(endoMul)
34434 },
34435 doubles: pre.doubles && {
34436 step: pre.doubles.step,
34437 points: pre.doubles.points.map(endoMul)
34438 }
ab78acc6 34439 };
ab78acc6 34440 }
8b095871 34441 return beta;
ab78acc6
IC
34442};
34443
8b095871
IC
34444Point.prototype.toJSON = function toJSON() {
34445 if (!this.precomputed)
34446 return [ this.x, this.y ];
ab78acc6 34447
8b095871
IC
34448 return [ this.x, this.y, this.precomputed && {
34449 doubles: this.precomputed.doubles && {
34450 step: this.precomputed.doubles.step,
34451 points: this.precomputed.doubles.points.slice(1)
34452 },
34453 naf: this.precomputed.naf && {
34454 wnd: this.precomputed.naf.wnd,
34455 points: this.precomputed.naf.points.slice(1)
34456 }
34457 } ];
34458};
ab78acc6 34459
8b095871
IC
34460Point.fromJSON = function fromJSON(curve, obj, red) {
34461 if (typeof obj === 'string')
34462 obj = JSON.parse(obj);
34463 var res = curve.point(obj[0], obj[1], red);
34464 if (!obj[2])
34465 return res;
ab78acc6 34466
8b095871
IC
34467 function obj2point(obj) {
34468 return curve.point(obj[0], obj[1], red);
34469 }
34470
34471 var pre = obj[2];
34472 res.precomputed = {
34473 beta: null,
34474 doubles: pre.doubles && {
34475 step: pre.doubles.step,
34476 points: [ res ].concat(pre.doubles.points.map(obj2point))
34477 },
34478 naf: pre.naf && {
34479 wnd: pre.naf.wnd,
34480 points: [ res ].concat(pre.naf.points.map(obj2point))
ab78acc6 34481 }
8b095871
IC
34482 };
34483 return res;
34484};
ab78acc6 34485
8b095871
IC
34486Point.prototype.inspect = function inspect() {
34487 if (this.isInfinity())
34488 return '<EC Point Infinity>';
34489 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
34490 ' y: ' + this.y.fromRed().toString(16, 2) + '>';
34491};
ab78acc6 34492
8b095871
IC
34493Point.prototype.isInfinity = function isInfinity() {
34494 return this.inf;
34495};
ebd8d4e8 34496
8b095871
IC
34497Point.prototype.add = function add(p) {
34498 // O + P = P
34499 if (this.inf)
34500 return p;
ab78acc6 34501
8b095871
IC
34502 // P + O = P
34503 if (p.inf)
34504 return this;
ab78acc6 34505
8b095871
IC
34506 // P + P = 2P
34507 if (this.eq(p))
34508 return this.dbl();
ab78acc6 34509
8b095871
IC
34510 // P + (-P) = O
34511 if (this.neg().eq(p))
34512 return this.curve.point(null, null);
ab78acc6 34513
8b095871
IC
34514 // P + Q = O
34515 if (this.x.cmp(p.x) === 0)
34516 return this.curve.point(null, null);
ebd8d4e8 34517
8b095871
IC
34518 var c = this.y.redSub(p.y);
34519 if (c.cmpn(0) !== 0)
34520 c = c.redMul(this.x.redSub(p.x).redInvm());
34521 var nx = c.redSqr().redISub(this.x).redISub(p.x);
34522 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
34523 return this.curve.point(nx, ny);
34524};
ab78acc6 34525
8b095871
IC
34526Point.prototype.dbl = function dbl() {
34527 if (this.inf)
34528 return this;
ebd8d4e8 34529
8b095871
IC
34530 // 2P = O
34531 var ys1 = this.y.redAdd(this.y);
34532 if (ys1.cmpn(0) === 0)
34533 return this.curve.point(null, null);
ebd8d4e8 34534
8b095871 34535 var a = this.curve.a;
ebd8d4e8 34536
8b095871
IC
34537 var x2 = this.x.redSqr();
34538 var dyinv = ys1.redInvm();
34539 var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
ebd8d4e8 34540
8b095871
IC
34541 var nx = c.redSqr().redISub(this.x.redAdd(this.x));
34542 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
34543 return this.curve.point(nx, ny);
34544};
ebd8d4e8 34545
8b095871
IC
34546Point.prototype.getX = function getX() {
34547 return this.x.fromRed();
34548};
ab78acc6 34549
8b095871
IC
34550Point.prototype.getY = function getY() {
34551 return this.y.fromRed();
34552};
ebd8d4e8 34553
8b095871
IC
34554Point.prototype.mul = function mul(k) {
34555 k = new BN(k, 16);
ebd8d4e8 34556
8b095871
IC
34557 if (this._hasDoubles(k))
34558 return this.curve._fixedNafMul(this, k);
34559 else if (this.curve.endo)
34560 return this.curve._endoWnafMulAdd([ this ], [ k ]);
34561 else
34562 return this.curve._wnafMul(this, k);
34563};
ebd8d4e8 34564
8b095871
IC
34565Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
34566 var points = [ this, p2 ];
34567 var coeffs = [ k1, k2 ];
34568 if (this.curve.endo)
34569 return this.curve._endoWnafMulAdd(points, coeffs);
34570 else
34571 return this.curve._wnafMulAdd(1, points, coeffs, 2);
34572};
ebd8d4e8 34573
8b095871
IC
34574Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
34575 var points = [ this, p2 ];
34576 var coeffs = [ k1, k2 ];
34577 if (this.curve.endo)
34578 return this.curve._endoWnafMulAdd(points, coeffs, true);
34579 else
34580 return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
34581};
ebd8d4e8 34582
8b095871
IC
34583Point.prototype.eq = function eq(p) {
34584 return this === p ||
34585 this.inf === p.inf &&
34586 (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
34587};
ebd8d4e8 34588
8b095871
IC
34589Point.prototype.neg = function neg(_precompute) {
34590 if (this.inf)
34591 return this;
ebd8d4e8 34592
8b095871
IC
34593 var res = this.curve.point(this.x, this.y.redNeg());
34594 if (_precompute && this.precomputed) {
34595 var pre = this.precomputed;
34596 var negate = function(p) {
34597 return p.neg();
34598 };
34599 res.precomputed = {
34600 naf: pre.naf && {
34601 wnd: pre.naf.wnd,
34602 points: pre.naf.points.map(negate)
34603 },
34604 doubles: pre.doubles && {
34605 step: pre.doubles.step,
34606 points: pre.doubles.points.map(negate)
34607 }
34608 };
34609 }
34610 return res;
34611};
ebd8d4e8 34612
8b095871
IC
34613Point.prototype.toJ = function toJ() {
34614 if (this.inf)
34615 return this.curve.jpoint(null, null, null);
ebd8d4e8 34616
8b095871
IC
34617 var res = this.curve.jpoint(this.x, this.y, this.curve.one);
34618 return res;
34619};
ebd8d4e8 34620
8b095871
IC
34621function JPoint(curve, x, y, z) {
34622 Base.BasePoint.call(this, curve, 'jacobian');
34623 if (x === null && y === null && z === null) {
34624 this.x = this.curve.one;
34625 this.y = this.curve.one;
34626 this.z = new BN(0);
34627 } else {
34628 this.x = new BN(x, 16);
34629 this.y = new BN(y, 16);
34630 this.z = new BN(z, 16);
34631 }
34632 if (!this.x.red)
34633 this.x = this.x.toRed(this.curve.red);
34634 if (!this.y.red)
34635 this.y = this.y.toRed(this.curve.red);
34636 if (!this.z.red)
34637 this.z = this.z.toRed(this.curve.red);
ebd8d4e8 34638
8b095871 34639 this.zOne = this.z === this.curve.one;
ab78acc6 34640}
8b095871 34641inherits(JPoint, Base.BasePoint);
ab78acc6 34642
8b095871
IC
34643ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
34644 return new JPoint(this, x, y, z);
34645};
ab78acc6 34646
8b095871
IC
34647JPoint.prototype.toP = function toP() {
34648 if (this.isInfinity())
34649 return this.curve.point(null, null);
ab78acc6 34650
8b095871
IC
34651 var zinv = this.z.redInvm();
34652 var zinv2 = zinv.redSqr();
34653 var ax = this.x.redMul(zinv2);
34654 var ay = this.y.redMul(zinv2).redMul(zinv);
ab78acc6 34655
8b095871
IC
34656 return this.curve.point(ax, ay);
34657};
ab78acc6 34658
8b095871
IC
34659JPoint.prototype.neg = function neg() {
34660 return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
34661};
ab78acc6 34662
8b095871
IC
34663JPoint.prototype.add = function add(p) {
34664 // O + P = P
34665 if (this.isInfinity())
34666 return p;
ab78acc6 34667
8b095871
IC
34668 // P + O = P
34669 if (p.isInfinity())
34670 return this;
ab78acc6 34671
8b095871
IC
34672 // 12M + 4S + 7A
34673 var pz2 = p.z.redSqr();
34674 var z2 = this.z.redSqr();
34675 var u1 = this.x.redMul(pz2);
34676 var u2 = p.x.redMul(z2);
34677 var s1 = this.y.redMul(pz2.redMul(p.z));
34678 var s2 = p.y.redMul(z2.redMul(this.z));
34679
34680 var h = u1.redSub(u2);
34681 var r = s1.redSub(s2);
34682 if (h.cmpn(0) === 0) {
34683 if (r.cmpn(0) !== 0)
34684 return this.curve.jpoint(null, null, null);
34685 else
34686 return this.dbl();
34687 }
ab78acc6 34688
8b095871
IC
34689 var h2 = h.redSqr();
34690 var h3 = h2.redMul(h);
34691 var v = u1.redMul(h2);
ab78acc6 34692
8b095871
IC
34693 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
34694 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
34695 var nz = this.z.redMul(p.z).redMul(h);
ab78acc6 34696
8b095871
IC
34697 return this.curve.jpoint(nx, ny, nz);
34698};
ab78acc6 34699
8b095871
IC
34700JPoint.prototype.mixedAdd = function mixedAdd(p) {
34701 // O + P = P
34702 if (this.isInfinity())
34703 return p.toJ();
ab78acc6 34704
8b095871
IC
34705 // P + O = P
34706 if (p.isInfinity())
34707 return this;
ab78acc6 34708
8b095871
IC
34709 // 8M + 3S + 7A
34710 var z2 = this.z.redSqr();
34711 var u1 = this.x;
34712 var u2 = p.x.redMul(z2);
34713 var s1 = this.y;
34714 var s2 = p.y.redMul(z2).redMul(this.z);
34715
34716 var h = u1.redSub(u2);
34717 var r = s1.redSub(s2);
34718 if (h.cmpn(0) === 0) {
34719 if (r.cmpn(0) !== 0)
34720 return this.curve.jpoint(null, null, null);
34721 else
34722 return this.dbl();
ab78acc6
IC
34723 }
34724
8b095871
IC
34725 var h2 = h.redSqr();
34726 var h3 = h2.redMul(h);
34727 var v = u1.redMul(h2);
ab78acc6 34728
8b095871
IC
34729 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
34730 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
34731 var nz = this.z.redMul(h);
ab78acc6 34732
8b095871
IC
34733 return this.curve.jpoint(nx, ny, nz);
34734};
ab78acc6 34735
8b095871
IC
34736JPoint.prototype.dblp = function dblp(pow) {
34737 if (pow === 0)
34738 return this;
34739 if (this.isInfinity())
34740 return this;
34741 if (!pow)
34742 return this.dbl();
34743
34744 if (this.curve.zeroA || this.curve.threeA) {
34745 var r = this;
34746 for (var i = 0; i < pow; i++)
34747 r = r.dbl();
34748 return r;
34749 }
34750
34751 // 1M + 2S + 1A + N * (4S + 5M + 8A)
34752 // N = 1 => 6M + 6S + 9A
34753 var a = this.curve.a;
34754 var tinv = this.curve.tinv;
34755
34756 var jx = this.x;
34757 var jy = this.y;
34758 var jz = this.z;
34759 var jz4 = jz.redSqr().redSqr();
34760
34761 // Reuse results
34762 var jyd = jy.redAdd(jy);
34763 for (var i = 0; i < pow; i++) {
34764 var jx2 = jx.redSqr();
34765 var jyd2 = jyd.redSqr();
34766 var jyd4 = jyd2.redSqr();
34767 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
34768
34769 var t1 = jx.redMul(jyd2);
34770 var nx = c.redSqr().redISub(t1.redAdd(t1));
34771 var t2 = t1.redISub(nx);
34772 var dny = c.redMul(t2);
34773 dny = dny.redIAdd(dny).redISub(jyd4);
34774 var nz = jyd.redMul(jz);
34775 if (i + 1 < pow)
34776 jz4 = jz4.redMul(jyd4);
34777
34778 jx = nx;
34779 jz = nz;
34780 jyd = dny;
34781 }
34782
34783 return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
34784};
ab78acc6 34785
8b095871
IC
34786JPoint.prototype.dbl = function dbl() {
34787 if (this.isInfinity())
34788 return this;
ab78acc6 34789
8b095871
IC
34790 if (this.curve.zeroA)
34791 return this._zeroDbl();
34792 else if (this.curve.threeA)
34793 return this._threeDbl();
34794 else
34795 return this._dbl();
34796};
ab78acc6 34797
8b095871
IC
34798JPoint.prototype._zeroDbl = function _zeroDbl() {
34799 var nx;
34800 var ny;
34801 var nz;
34802 // Z = 1
34803 if (this.zOne) {
34804 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
34805 // #doubling-mdbl-2007-bl
34806 // 1M + 5S + 14A
34807
34808 // XX = X1^2
34809 var xx = this.x.redSqr();
34810 // YY = Y1^2
34811 var yy = this.y.redSqr();
34812 // YYYY = YY^2
34813 var yyyy = yy.redSqr();
34814 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
34815 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
34816 s = s.redIAdd(s);
34817 // M = 3 * XX + a; a = 0
34818 var m = xx.redAdd(xx).redIAdd(xx);
34819 // T = M ^ 2 - 2*S
34820 var t = m.redSqr().redISub(s).redISub(s);
34821
34822 // 8 * YYYY
34823 var yyyy8 = yyyy.redIAdd(yyyy);
34824 yyyy8 = yyyy8.redIAdd(yyyy8);
34825 yyyy8 = yyyy8.redIAdd(yyyy8);
34826
34827 // X3 = T
34828 nx = t;
34829 // Y3 = M * (S - T) - 8 * YYYY
34830 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
34831 // Z3 = 2*Y1
34832 nz = this.y.redAdd(this.y);
34833 } else {
34834 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
34835 // #doubling-dbl-2009-l
34836 // 2M + 5S + 13A
34837
34838 // A = X1^2
34839 var a = this.x.redSqr();
34840 // B = Y1^2
34841 var b = this.y.redSqr();
34842 // C = B^2
34843 var c = b.redSqr();
34844 // D = 2 * ((X1 + B)^2 - A - C)
34845 var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
34846 d = d.redIAdd(d);
34847 // E = 3 * A
34848 var e = a.redAdd(a).redIAdd(a);
34849 // F = E^2
34850 var f = e.redSqr();
34851
34852 // 8 * C
34853 var c8 = c.redIAdd(c);
34854 c8 = c8.redIAdd(c8);
34855 c8 = c8.redIAdd(c8);
34856
34857 // X3 = F - 2 * D
34858 nx = f.redISub(d).redISub(d);
34859 // Y3 = E * (D - X3) - 8 * C
34860 ny = e.redMul(d.redISub(nx)).redISub(c8);
34861 // Z3 = 2 * Y1 * Z1
34862 nz = this.y.redMul(this.z);
34863 nz = nz.redIAdd(nz);
34864 }
34865
34866 return this.curve.jpoint(nx, ny, nz);
34867};
ab78acc6 34868
8b095871
IC
34869JPoint.prototype._threeDbl = function _threeDbl() {
34870 var nx;
34871 var ny;
34872 var nz;
34873 // Z = 1
34874 if (this.zOne) {
34875 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html
34876 // #doubling-mdbl-2007-bl
34877 // 1M + 5S + 15A
34878
34879 // XX = X1^2
34880 var xx = this.x.redSqr();
34881 // YY = Y1^2
34882 var yy = this.y.redSqr();
34883 // YYYY = YY^2
34884 var yyyy = yy.redSqr();
34885 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
34886 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
34887 s = s.redIAdd(s);
34888 // M = 3 * XX + a
34889 var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
34890 // T = M^2 - 2 * S
34891 var t = m.redSqr().redISub(s).redISub(s);
34892 // X3 = T
34893 nx = t;
34894 // Y3 = M * (S - T) - 8 * YYYY
34895 var yyyy8 = yyyy.redIAdd(yyyy);
34896 yyyy8 = yyyy8.redIAdd(yyyy8);
34897 yyyy8 = yyyy8.redIAdd(yyyy8);
34898 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
34899 // Z3 = 2 * Y1
34900 nz = this.y.redAdd(this.y);
34901 } else {
34902 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
34903 // 3M + 5S
34904
34905 // delta = Z1^2
34906 var delta = this.z.redSqr();
34907 // gamma = Y1^2
34908 var gamma = this.y.redSqr();
34909 // beta = X1 * gamma
34910 var beta = this.x.redMul(gamma);
34911 // alpha = 3 * (X1 - delta) * (X1 + delta)
34912 var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
34913 alpha = alpha.redAdd(alpha).redIAdd(alpha);
34914 // X3 = alpha^2 - 8 * beta
34915 var beta4 = beta.redIAdd(beta);
34916 beta4 = beta4.redIAdd(beta4);
34917 var beta8 = beta4.redAdd(beta4);
34918 nx = alpha.redSqr().redISub(beta8);
34919 // Z3 = (Y1 + Z1)^2 - gamma - delta
34920 nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
34921 // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2
34922 var ggamma8 = gamma.redSqr();
34923 ggamma8 = ggamma8.redIAdd(ggamma8);
34924 ggamma8 = ggamma8.redIAdd(ggamma8);
34925 ggamma8 = ggamma8.redIAdd(ggamma8);
34926 ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
34927 }
34928
34929 return this.curve.jpoint(nx, ny, nz);
34930};
ab78acc6 34931
8b095871
IC
34932JPoint.prototype._dbl = function _dbl() {
34933 var a = this.curve.a;
ab78acc6 34934
8b095871
IC
34935 // 4M + 6S + 10A
34936 var jx = this.x;
34937 var jy = this.y;
34938 var jz = this.z;
34939 var jz4 = jz.redSqr().redSqr();
ab78acc6 34940
8b095871
IC
34941 var jx2 = jx.redSqr();
34942 var jy2 = jy.redSqr();
ebd8d4e8 34943
8b095871 34944 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
ebd8d4e8 34945
8b095871
IC
34946 var jxd4 = jx.redAdd(jx);
34947 jxd4 = jxd4.redIAdd(jxd4);
34948 var t1 = jxd4.redMul(jy2);
34949 var nx = c.redSqr().redISub(t1.redAdd(t1));
34950 var t2 = t1.redISub(nx);
ebd8d4e8 34951
8b095871
IC
34952 var jyd8 = jy2.redSqr();
34953 jyd8 = jyd8.redIAdd(jyd8);
34954 jyd8 = jyd8.redIAdd(jyd8);
34955 jyd8 = jyd8.redIAdd(jyd8);
34956 var ny = c.redMul(t2).redISub(jyd8);
34957 var nz = jy.redAdd(jy).redMul(jz);
ebd8d4e8 34958
8b095871
IC
34959 return this.curve.jpoint(nx, ny, nz);
34960};
ebd8d4e8 34961
8b095871
IC
34962JPoint.prototype.trpl = function trpl() {
34963 if (!this.curve.zeroA)
34964 return this.dbl().add(this);
34965
34966 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl
34967 // 5M + 10S + ...
34968
34969 // XX = X1^2
34970 var xx = this.x.redSqr();
34971 // YY = Y1^2
34972 var yy = this.y.redSqr();
34973 // ZZ = Z1^2
34974 var zz = this.z.redSqr();
34975 // YYYY = YY^2
34976 var yyyy = yy.redSqr();
34977 // M = 3 * XX + a * ZZ2; a = 0
34978 var m = xx.redAdd(xx).redIAdd(xx);
34979 // MM = M^2
34980 var mm = m.redSqr();
34981 // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM
34982 var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
34983 e = e.redIAdd(e);
34984 e = e.redAdd(e).redIAdd(e);
34985 e = e.redISub(mm);
34986 // EE = E^2
34987 var ee = e.redSqr();
34988 // T = 16*YYYY
34989 var t = yyyy.redIAdd(yyyy);
34990 t = t.redIAdd(t);
34991 t = t.redIAdd(t);
34992 t = t.redIAdd(t);
34993 // U = (M + E)^2 - MM - EE - T
34994 var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
34995 // X3 = 4 * (X1 * EE - 4 * YY * U)
34996 var yyu4 = yy.redMul(u);
34997 yyu4 = yyu4.redIAdd(yyu4);
34998 yyu4 = yyu4.redIAdd(yyu4);
34999 var nx = this.x.redMul(ee).redISub(yyu4);
35000 nx = nx.redIAdd(nx);
35001 nx = nx.redIAdd(nx);
35002 // Y3 = 8 * Y1 * (U * (T - U) - E * EE)
35003 var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
35004 ny = ny.redIAdd(ny);
35005 ny = ny.redIAdd(ny);
35006 ny = ny.redIAdd(ny);
35007 // Z3 = (Z1 + E)^2 - ZZ - EE
35008 var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
35009
35010 return this.curve.jpoint(nx, ny, nz);
35011};
ebd8d4e8 35012
8b095871
IC
35013JPoint.prototype.mul = function mul(k, kbase) {
35014 k = new BN(k, kbase);
ebd8d4e8 35015
8b095871
IC
35016 return this.curve._wnafMul(this, k);
35017};
ebd8d4e8 35018
8b095871
IC
35019JPoint.prototype.eq = function eq(p) {
35020 if (p.type === 'affine')
35021 return this.eq(p.toJ());
ebd8d4e8 35022
8b095871
IC
35023 if (this === p)
35024 return true;
ebd8d4e8 35025
8b095871
IC
35026 // x1 * z2^2 == x2 * z1^2
35027 var z2 = this.z.redSqr();
35028 var pz2 = p.z.redSqr();
35029 if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
35030 return false;
ebd8d4e8 35031
8b095871
IC
35032 // y1 * z2^3 == y2 * z1^3
35033 var z3 = z2.redMul(this.z);
35034 var pz3 = pz2.redMul(p.z);
35035 return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
35036};
ab78acc6 35037
8b095871
IC
35038JPoint.prototype.eqXToP = function eqXToP(x) {
35039 var zs = this.z.redSqr();
35040 var rx = x.toRed(this.curve.red).redMul(zs);
35041 if (this.x.cmp(rx) === 0)
35042 return true;
ebd8d4e8 35043
8b095871
IC
35044 var xc = x.clone();
35045 var t = this.curve.redN.redMul(zs);
35046 for (;;) {
35047 xc.iadd(this.curve.n);
35048 if (xc.cmp(this.curve.p) >= 0)
35049 return false;
ebd8d4e8 35050
8b095871
IC
35051 rx.redIAdd(t);
35052 if (this.x.cmp(rx) === 0)
35053 return true;
35054 }
35055 return false;
35056};
ebd8d4e8 35057
8b095871
IC
35058JPoint.prototype.inspect = function inspect() {
35059 if (this.isInfinity())
35060 return '<EC JPoint Infinity>';
35061 return '<EC JPoint x: ' + this.x.toString(16, 2) +
35062 ' y: ' + this.y.toString(16, 2) +
35063 ' z: ' + this.z.toString(16, 2) + '>';
35064};
ebd8d4e8 35065
8b095871
IC
35066JPoint.prototype.isInfinity = function isInfinity() {
35067 // XXX This code assumes that zero is always zero in red
35068 return this.z.cmpn(0) === 0;
35069};
ebd8d4e8 35070
8b095871
IC
35071},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],45:[function(require,module,exports){
35072'use strict';
ebd8d4e8 35073
8b095871 35074var curves = exports;
ebd8d4e8 35075
8b095871
IC
35076var hash = require('hash.js');
35077var elliptic = require('../elliptic');
ebd8d4e8 35078
8b095871 35079var assert = elliptic.utils.assert;
ebd8d4e8 35080
8b095871
IC
35081function PresetCurve(options) {
35082 if (options.type === 'short')
35083 this.curve = new elliptic.curve.short(options);
35084 else if (options.type === 'edwards')
35085 this.curve = new elliptic.curve.edwards(options);
35086 else
35087 this.curve = new elliptic.curve.mont(options);
35088 this.g = this.curve.g;
35089 this.n = this.curve.n;
35090 this.hash = options.hash;
35091
35092 assert(this.g.validate(), 'Invalid curve');
35093 assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');
35094}
35095curves.PresetCurve = PresetCurve;
35096
35097function defineCurve(name, options) {
35098 Object.defineProperty(curves, name, {
35099 configurable: true,
35100 enumerable: true,
35101 get: function() {
35102 var curve = new PresetCurve(options);
35103 Object.defineProperty(curves, name, {
35104 configurable: true,
35105 enumerable: true,
35106 value: curve
35107 });
35108 return curve;
35109 }
35110 });
ebd8d4e8
IC
35111}
35112
8b095871
IC
35113defineCurve('p192', {
35114 type: 'short',
35115 prime: 'p192',
35116 p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
35117 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
35118 b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
35119 n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
35120 hash: hash.sha256,
35121 gRed: false,
35122 g: [
35123 '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',
35124 '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'
35125 ]
35126});
ebd8d4e8 35127
8b095871
IC
35128defineCurve('p224', {
35129 type: 'short',
35130 prime: 'p224',
35131 p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
35132 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
35133 b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
35134 n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
35135 hash: hash.sha256,
35136 gRed: false,
35137 g: [
35138 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',
35139 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'
35140 ]
35141});
ebd8d4e8 35142
8b095871
IC
35143defineCurve('p256', {
35144 type: 'short',
35145 prime: null,
35146 p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
35147 a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
35148 b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
35149 n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
35150 hash: hash.sha256,
35151 gRed: false,
35152 g: [
35153 '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',
35154 '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'
35155 ]
35156});
ebd8d4e8 35157
8b095871
IC
35158defineCurve('p384', {
35159 type: 'short',
35160 prime: null,
35161 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
35162 'fffffffe ffffffff 00000000 00000000 ffffffff',
35163 a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
35164 'fffffffe ffffffff 00000000 00000000 fffffffc',
35165 b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +
35166 '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
35167 n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +
35168 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
35169 hash: hash.sha384,
35170 gRed: false,
35171 g: [
35172 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +
35173 '5502f25d bf55296c 3a545e38 72760ab7',
35174 '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +
35175 '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'
35176 ]
35177});
ebd8d4e8 35178
8b095871
IC
35179defineCurve('p521', {
35180 type: 'short',
35181 prime: null,
35182 p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
35183 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
35184 'ffffffff ffffffff ffffffff ffffffff ffffffff',
35185 a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
35186 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
35187 'ffffffff ffffffff ffffffff ffffffff fffffffc',
35188 b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +
35189 '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +
35190 '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
35191 n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
35192 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +
35193 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
35194 hash: hash.sha512,
35195 gRed: false,
35196 g: [
35197 '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +
35198 '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +
35199 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',
35200 '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +
35201 '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +
35202 '3fad0761 353c7086 a272c240 88be9476 9fd16650'
35203 ]
35204});
ebd8d4e8 35205
8b095871
IC
35206defineCurve('curve25519', {
35207 type: 'mont',
35208 prime: 'p25519',
35209 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
35210 a: '76d06',
35211 b: '1',
35212 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
35213 hash: hash.sha256,
35214 gRed: false,
35215 g: [
35216 '9'
35217 ]
35218});
ebd8d4e8 35219
8b095871
IC
35220defineCurve('ed25519', {
35221 type: 'edwards',
35222 prime: 'p25519',
35223 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
35224 a: '-1',
35225 c: '1',
35226 // -121665 * (121666^(-1)) (mod P)
35227 d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
35228 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
35229 hash: hash.sha256,
35230 gRed: false,
35231 g: [
35232 '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',
35233
35234 // 4/5
35235 '6666666666666666666666666666666666666666666666666666666666666658'
35236 ]
35237});
ebd8d4e8 35238
8b095871
IC
35239var pre;
35240try {
35241 pre = require('./precomputed/secp256k1');
35242} catch (e) {
35243 pre = undefined;
35244}
35245
35246defineCurve('secp256k1', {
35247 type: 'short',
35248 prime: 'k256',
35249 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
35250 a: '0',
35251 b: '7',
35252 n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
35253 h: '1',
35254 hash: hash.sha256,
35255
35256 // Precomputed endomorphism
35257 beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
35258 lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
35259 basis: [
35260 {
35261 a: '3086d221a7d46bcde86c90e49284eb15',
35262 b: '-e4437ed6010e88286f547fa90abfe4c3'
35263 },
35264 {
35265 a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
35266 b: '3086d221a7d46bcde86c90e49284eb15'
35267 }
35268 ],
ebd8d4e8 35269
8b095871
IC
35270 gRed: false,
35271 g: [
35272 '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
35273 '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
35274 pre
35275 ]
35276});
ebd8d4e8 35277
8b095871
IC
35278},{"../elliptic":39,"./precomputed/secp256k1":53,"hash.js":57}],46:[function(require,module,exports){
35279'use strict';
ebd8d4e8 35280
8b095871
IC
35281var BN = require('bn.js');
35282var elliptic = require('../../elliptic');
35283var utils = elliptic.utils;
35284var assert = utils.assert;
ebd8d4e8 35285
8b095871
IC
35286var KeyPair = require('./key');
35287var Signature = require('./signature');
ebd8d4e8 35288
8b095871
IC
35289function EC(options) {
35290 if (!(this instanceof EC))
35291 return new EC(options);
ebd8d4e8 35292
8b095871
IC
35293 // Shortcut `elliptic.ec(curve-name)`
35294 if (typeof options === 'string') {
35295 assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);
35296
35297 options = elliptic.curves[options];
ebd8d4e8
IC
35298 }
35299
8b095871
IC
35300 // Shortcut for `elliptic.ec(elliptic.curves.curveName)`
35301 if (options instanceof elliptic.curves.PresetCurve)
35302 options = { curve: options };
ebd8d4e8 35303
8b095871
IC
35304 this.curve = options.curve.curve;
35305 this.n = this.curve.n;
35306 this.nh = this.n.ushrn(1);
35307 this.g = this.curve.g;
ebd8d4e8 35308
8b095871
IC
35309 // Point on curve
35310 this.g = options.curve.g;
35311 this.g.precompute(options.curve.n.bitLength() + 1);
ebd8d4e8 35312
8b095871
IC
35313 // Hash for function for DRBG
35314 this.hash = options.hash || options.curve.hash;
ebd8d4e8 35315}
8b095871 35316module.exports = EC;
ebd8d4e8 35317
8b095871
IC
35318EC.prototype.keyPair = function keyPair(options) {
35319 return new KeyPair(this, options);
35320};
35321
35322EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
35323 return KeyPair.fromPrivate(this, priv, enc);
35324};
35325
35326EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
35327 return KeyPair.fromPublic(this, pub, enc);
35328};
35329
35330EC.prototype.genKeyPair = function genKeyPair(options) {
35331 if (!options)
35332 options = {};
35333
35334 // Instantiate Hmac_DRBG
35335 var drbg = new elliptic.hmacDRBG({
35336 hash: this.hash,
35337 pers: options.pers,
35338 entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),
35339 nonce: this.n.toArray()
35340 });
ebd8d4e8 35341
8b095871
IC
35342 var bytes = this.n.byteLength();
35343 var ns2 = this.n.sub(new BN(2));
35344 do {
35345 var priv = new BN(drbg.generate(bytes));
35346 if (priv.cmp(ns2) > 0)
35347 continue;
ebd8d4e8 35348
8b095871
IC
35349 priv.iaddn(1);
35350 return this.keyFromPrivate(priv);
35351 } while (true);
35352};
ebd8d4e8 35353
8b095871
IC
35354EC.prototype._truncateToN = function truncateToN(msg, truncOnly) {
35355 var delta = msg.byteLength() * 8 - this.n.bitLength();
35356 if (delta > 0)
35357 msg = msg.ushrn(delta);
35358 if (!truncOnly && msg.cmp(this.n) >= 0)
35359 return msg.sub(this.n);
35360 else
35361 return msg;
35362};
ebd8d4e8 35363
8b095871
IC
35364EC.prototype.sign = function sign(msg, key, enc, options) {
35365 if (typeof enc === 'object') {
35366 options = enc;
35367 enc = null;
ebd8d4e8 35368 }
8b095871
IC
35369 if (!options)
35370 options = {};
ebd8d4e8 35371
8b095871
IC
35372 key = this.keyFromPrivate(key, enc);
35373 msg = this._truncateToN(new BN(msg, 16));
ebd8d4e8 35374
8b095871
IC
35375 // Zero-extend key to provide enough entropy
35376 var bytes = this.n.byteLength();
35377 var bkey = key.getPrivate().toArray('be', bytes);
ab78acc6 35378
8b095871
IC
35379 // Zero-extend nonce to have the same byte size as N
35380 var nonce = msg.toArray('be', bytes);
ab78acc6 35381
8b095871
IC
35382 // Instantiate Hmac_DRBG
35383 var drbg = new elliptic.hmacDRBG({
35384 hash: this.hash,
35385 entropy: bkey,
35386 nonce: nonce,
35387 pers: options.pers,
35388 persEnc: options.persEnc
35389 });
ab78acc6 35390
8b095871
IC
35391 // Number of bytes to generate
35392 var ns1 = this.n.sub(new BN(1));
ebd8d4e8 35393
8b095871
IC
35394 for (var iter = 0; true; iter++) {
35395 var k = options.k ?
35396 options.k(iter) :
35397 new BN(drbg.generate(this.n.byteLength()));
35398 k = this._truncateToN(k, true);
35399 if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
35400 continue;
ebd8d4e8 35401
8b095871
IC
35402 var kp = this.g.mul(k);
35403 if (kp.isInfinity())
35404 continue;
ebd8d4e8 35405
8b095871
IC
35406 var kpX = kp.getX();
35407 var r = kpX.umod(this.n);
35408 if (r.cmpn(0) === 0)
35409 continue;
ebd8d4e8 35410
8b095871
IC
35411 var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
35412 s = s.umod(this.n);
35413 if (s.cmpn(0) === 0)
35414 continue;
ebd8d4e8 35415
8b095871
IC
35416 var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |
35417 (kpX.cmp(r) !== 0 ? 2 : 0);
ebd8d4e8 35418
8b095871
IC
35419 // Use complement of `s`, if it is > `n / 2`
35420 if (options.canonical && s.cmp(this.nh) > 0) {
35421 s = this.n.sub(s);
35422 recoveryParam ^= 1;
35423 }
ebd8d4e8 35424
8b095871
IC
35425 return new Signature({ r: r, s: s, recoveryParam: recoveryParam });
35426 }
35427};
ebd8d4e8 35428
8b095871
IC
35429EC.prototype.verify = function verify(msg, signature, key, enc) {
35430 msg = this._truncateToN(new BN(msg, 16));
35431 key = this.keyFromPublic(key, enc);
35432 signature = new Signature(signature, 'hex');
ebd8d4e8 35433
8b095871
IC
35434 // Perform primitive values validation
35435 var r = signature.r;
35436 var s = signature.s;
35437 if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
35438 return false;
35439 if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
35440 return false;
ebd8d4e8 35441
8b095871
IC
35442 // Validate signature
35443 var sinv = s.invm(this.n);
35444 var u1 = sinv.mul(msg).umod(this.n);
35445 var u2 = sinv.mul(r).umod(this.n);
ebd8d4e8 35446
8b095871
IC
35447 if (!this.curve._maxwellTrick) {
35448 var p = this.g.mulAdd(u1, key.getPublic(), u2);
35449 if (p.isInfinity())
35450 return false;
ebd8d4e8 35451
8b095871
IC
35452 return p.getX().umod(this.n).cmp(r) === 0;
35453 }
ab78acc6 35454
8b095871
IC
35455 // NOTE: Greg Maxwell's trick, inspired by:
35456 // https://git.io/vad3K
ebd8d4e8 35457
8b095871
IC
35458 var p = this.g.jmulAdd(u1, key.getPublic(), u2);
35459 if (p.isInfinity())
35460 return false;
ab78acc6 35461
8b095871
IC
35462 // Compare `p.x` of Jacobian point with `r`,
35463 // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
35464 // inverse of `p.z^2`
35465 return p.eqXToP(r);
35466};
ab78acc6 35467
8b095871
IC
35468EC.prototype.recoverPubKey = function(msg, signature, j, enc) {
35469 assert((3 & j) === j, 'The recovery param is more than two bits');
35470 signature = new Signature(signature, enc);
ab78acc6 35471
8b095871
IC
35472 var n = this.n;
35473 var e = new BN(msg);
35474 var r = signature.r;
35475 var s = signature.s;
ab78acc6 35476
8b095871
IC
35477 // A set LSB signifies that the y-coordinate is odd
35478 var isYOdd = j & 1;
35479 var isSecondKey = j >> 1;
35480 if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
35481 throw new Error('Unable to find sencond key candinate');
35482
35483 // 1.1. Let x = r + jn.
35484 if (isSecondKey)
35485 r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
35486 else
35487 r = this.curve.pointFromX(r, isYOdd);
ab78acc6 35488
8b095871
IC
35489 var rInv = signature.r.invm(n);
35490 var s1 = n.sub(e).mul(rInv).umod(n);
35491 var s2 = s.mul(rInv).umod(n);
ab78acc6 35492
8b095871
IC
35493 // 1.6.1 Compute Q = r^-1 (sR - eG)
35494 // Q = r^-1 (sR + -eG)
35495 return this.g.mulAdd(s1, r, s2);
35496};
ab78acc6 35497
8b095871
IC
35498EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {
35499 signature = new Signature(signature, enc);
35500 if (signature.recoveryParam !== null)
35501 return signature.recoveryParam;
ab78acc6 35502
8b095871
IC
35503 for (var i = 0; i < 4; i++) {
35504 var Qprime;
35505 try {
35506 Qprime = this.recoverPubKey(e, signature, i);
35507 } catch (e) {
35508 continue;
ab78acc6 35509 }
ab78acc6 35510
8b095871
IC
35511 if (Qprime.eq(Q))
35512 return i;
35513 }
35514 throw new Error('Unable to find valid recovery factor');
35515};
ebd8d4e8 35516
8b095871
IC
35517},{"../../elliptic":39,"./key":47,"./signature":48,"bn.js":33}],47:[function(require,module,exports){
35518'use strict';
ebd8d4e8 35519
8b095871
IC
35520var BN = require('bn.js');
35521var elliptic = require('../../elliptic');
35522var utils = elliptic.utils;
35523var assert = utils.assert;
ebd8d4e8 35524
8b095871
IC
35525function KeyPair(ec, options) {
35526 this.ec = ec;
35527 this.priv = null;
35528 this.pub = null;
ebd8d4e8 35529
8b095871
IC
35530 // KeyPair(ec, { priv: ..., pub: ... })
35531 if (options.priv)
35532 this._importPrivate(options.priv, options.privEnc);
35533 if (options.pub)
35534 this._importPublic(options.pub, options.pubEnc);
35535}
35536module.exports = KeyPair;
ebd8d4e8 35537
8b095871
IC
35538KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
35539 if (pub instanceof KeyPair)
35540 return pub;
ebd8d4e8 35541
8b095871
IC
35542 return new KeyPair(ec, {
35543 pub: pub,
35544 pubEnc: enc
35545 });
35546};
ebd8d4e8 35547
8b095871
IC
35548KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
35549 if (priv instanceof KeyPair)
35550 return priv;
ebd8d4e8 35551
8b095871
IC
35552 return new KeyPair(ec, {
35553 priv: priv,
35554 privEnc: enc
35555 });
35556};
ebd8d4e8 35557
8b095871
IC
35558KeyPair.prototype.validate = function validate() {
35559 var pub = this.getPublic();
ebd8d4e8 35560
8b095871
IC
35561 if (pub.isInfinity())
35562 return { result: false, reason: 'Invalid public key' };
35563 if (!pub.validate())
35564 return { result: false, reason: 'Public key is not a point' };
35565 if (!pub.mul(this.ec.curve.n).isInfinity())
35566 return { result: false, reason: 'Public key * N != O' };
ab78acc6 35567
8b095871
IC
35568 return { result: true, reason: null };
35569};
ebd8d4e8 35570
8b095871
IC
35571KeyPair.prototype.getPublic = function getPublic(compact, enc) {
35572 // compact is optional argument
35573 if (typeof compact === 'string') {
35574 enc = compact;
35575 compact = null;
ebd8d4e8
IC
35576 }
35577
8b095871
IC
35578 if (!this.pub)
35579 this.pub = this.ec.g.mul(this.priv);
ebd8d4e8 35580
8b095871
IC
35581 if (!enc)
35582 return this.pub;
ebd8d4e8 35583
8b095871
IC
35584 return this.pub.encode(enc, compact);
35585};
ebd8d4e8 35586
8b095871
IC
35587KeyPair.prototype.getPrivate = function getPrivate(enc) {
35588 if (enc === 'hex')
35589 return this.priv.toString(16, 2);
35590 else
35591 return this.priv;
35592};
ab78acc6 35593
8b095871
IC
35594KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
35595 this.priv = new BN(key, enc || 16);
ab78acc6 35596
8b095871
IC
35597 // Ensure that the priv won't be bigger than n, otherwise we may fail
35598 // in fixed multiplication method
35599 this.priv = this.priv.umod(this.ec.curve.n);
35600};
ab78acc6 35601
8b095871
IC
35602KeyPair.prototype._importPublic = function _importPublic(key, enc) {
35603 if (key.x || key.y) {
35604 // Montgomery points only have an `x` coordinate.
35605 // Weierstrass/Edwards points on the other hand have both `x` and
35606 // `y` coordinates.
35607 if (this.ec.curve.type === 'mont') {
35608 assert(key.x, 'Need x coordinate');
35609 } else if (this.ec.curve.type === 'short' ||
35610 this.ec.curve.type === 'edwards') {
35611 assert(key.x && key.y, 'Need both x and y coordinate');
35612 }
35613 this.pub = this.ec.curve.point(key.x, key.y);
35614 return;
35615 }
35616 this.pub = this.ec.curve.decodePoint(key, enc);
35617};
ebd8d4e8 35618
8b095871
IC
35619// ECDH
35620KeyPair.prototype.derive = function derive(pub) {
35621 return pub.mul(this.priv).getX();
35622};
ebd8d4e8 35623
8b095871
IC
35624// ECDSA
35625KeyPair.prototype.sign = function sign(msg, enc, options) {
35626 return this.ec.sign(msg, this, enc, options);
35627};
ebd8d4e8 35628
8b095871
IC
35629KeyPair.prototype.verify = function verify(msg, signature) {
35630 return this.ec.verify(msg, signature, this);
35631};
ebd8d4e8 35632
8b095871
IC
35633KeyPair.prototype.inspect = function inspect() {
35634 return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +
35635 ' pub: ' + (this.pub && this.pub.inspect()) + ' >';
35636};
ebd8d4e8 35637
8b095871
IC
35638},{"../../elliptic":39,"bn.js":33}],48:[function(require,module,exports){
35639'use strict';
ebd8d4e8 35640
8b095871 35641var BN = require('bn.js');
ebd8d4e8 35642
8b095871
IC
35643var elliptic = require('../../elliptic');
35644var utils = elliptic.utils;
35645var assert = utils.assert;
ebd8d4e8 35646
8b095871
IC
35647function Signature(options, enc) {
35648 if (options instanceof Signature)
35649 return options;
ebd8d4e8 35650
8b095871
IC
35651 if (this._importDER(options, enc))
35652 return;
ebd8d4e8 35653
8b095871
IC
35654 assert(options.r && options.s, 'Signature without r or s');
35655 this.r = new BN(options.r, 16);
35656 this.s = new BN(options.s, 16);
35657 if (options.recoveryParam === undefined)
35658 this.recoveryParam = null;
35659 else
35660 this.recoveryParam = options.recoveryParam;
35661}
35662module.exports = Signature;
35663
35664function Position() {
35665 this.place = 0;
35666}
35667
35668function getLength(buf, p) {
35669 var initial = buf[p.place++];
35670 if (!(initial & 0x80)) {
35671 return initial;
35672 }
35673 var octetLen = initial & 0xf;
35674 var val = 0;
35675 for (var i = 0, off = p.place; i < octetLen; i++, off++) {
35676 val <<= 8;
35677 val |= buf[off];
35678 }
35679 p.place = off;
35680 return val;
35681}
35682
35683function rmPadding(buf) {
35684 var i = 0;
35685 var len = buf.length - 1;
35686 while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {
35687 i++;
35688 }
35689 if (i === 0) {
35690 return buf;
35691 }
35692 return buf.slice(i);
35693}
ebd8d4e8 35694
8b095871
IC
35695Signature.prototype._importDER = function _importDER(data, enc) {
35696 data = utils.toArray(data, enc);
35697 var p = new Position();
35698 if (data[p.place++] !== 0x30) {
35699 return false;
35700 }
35701 var len = getLength(data, p);
35702 if ((len + p.place) !== data.length) {
35703 return false;
35704 }
35705 if (data[p.place++] !== 0x02) {
35706 return false;
35707 }
35708 var rlen = getLength(data, p);
35709 var r = data.slice(p.place, rlen + p.place);
35710 p.place += rlen;
35711 if (data[p.place++] !== 0x02) {
35712 return false;
35713 }
35714 var slen = getLength(data, p);
35715 if (data.length !== slen + p.place) {
35716 return false;
35717 }
35718 var s = data.slice(p.place, slen + p.place);
35719 if (r[0] === 0 && (r[1] & 0x80)) {
35720 r = r.slice(1);
35721 }
35722 if (s[0] === 0 && (s[1] & 0x80)) {
35723 s = s.slice(1);
35724 }
ab78acc6 35725
8b095871
IC
35726 this.r = new BN(r);
35727 this.s = new BN(s);
35728 this.recoveryParam = null;
ebd8d4e8 35729
8b095871
IC
35730 return true;
35731};
ab78acc6 35732
8b095871
IC
35733function constructLength(arr, len) {
35734 if (len < 0x80) {
35735 arr.push(len);
35736 return;
35737 }
35738 var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
35739 arr.push(octets | 0x80);
35740 while (--octets) {
35741 arr.push((len >>> (octets << 3)) & 0xff);
35742 }
35743 arr.push(len);
35744}
35745
35746Signature.prototype.toDER = function toDER(enc) {
35747 var r = this.r.toArray();
35748 var s = this.s.toArray();
35749
35750 // Pad values
35751 if (r[0] & 0x80)
35752 r = [ 0 ].concat(r);
35753 // Pad values
35754 if (s[0] & 0x80)
35755 s = [ 0 ].concat(s);
35756
35757 r = rmPadding(r);
35758 s = rmPadding(s);
35759
35760 while (!s[0] && !(s[1] & 0x80)) {
35761 s = s.slice(1);
35762 }
35763 var arr = [ 0x02 ];
35764 constructLength(arr, r.length);
35765 arr = arr.concat(r);
35766 arr.push(0x02);
35767 constructLength(arr, s.length);
35768 var backHalf = arr.concat(s);
35769 var res = [ 0x30 ];
35770 constructLength(res, backHalf.length);
35771 res = res.concat(backHalf);
35772 return utils.encode(res, enc);
35773};
ab78acc6 35774
8b095871
IC
35775},{"../../elliptic":39,"bn.js":33}],49:[function(require,module,exports){
35776'use strict';
ebd8d4e8 35777
8b095871
IC
35778var hash = require('hash.js');
35779var elliptic = require('../../elliptic');
35780var utils = elliptic.utils;
35781var assert = utils.assert;
35782var parseBytes = utils.parseBytes;
35783var KeyPair = require('./key');
35784var Signature = require('./signature');
ab78acc6 35785
8b095871
IC
35786function EDDSA(curve) {
35787 assert(curve === 'ed25519', 'only tested with ed25519 so far');
ebd8d4e8 35788
8b095871
IC
35789 if (!(this instanceof EDDSA))
35790 return new EDDSA(curve);
ab78acc6 35791
8b095871
IC
35792 var curve = elliptic.curves[curve].curve;
35793 this.curve = curve;
35794 this.g = curve.g;
35795 this.g.precompute(curve.n.bitLength() + 1);
ebd8d4e8 35796
8b095871
IC
35797 this.pointClass = curve.point().constructor;
35798 this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
35799 this.hash = hash.sha512;
35800}
ebd8d4e8 35801
8b095871 35802module.exports = EDDSA;
ebd8d4e8 35803
8b095871
IC
35804/**
35805* @param {Array|String} message - message bytes
35806* @param {Array|String|KeyPair} secret - secret bytes or a keypair
35807* @returns {Signature} - signature
35808*/
35809EDDSA.prototype.sign = function sign(message, secret) {
35810 message = parseBytes(message);
35811 var key = this.keyFromSecret(secret);
35812 var r = this.hashInt(key.messagePrefix(), message);
35813 var R = this.g.mul(r);
35814 var Rencoded = this.encodePoint(R);
35815 var s_ = this.hashInt(Rencoded, key.pubBytes(), message)
35816 .mul(key.priv());
35817 var S = r.add(s_).umod(this.curve.n);
35818 return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });
35819};
ebd8d4e8 35820
8b095871
IC
35821/**
35822* @param {Array} message - message bytes
35823* @param {Array|String|Signature} sig - sig bytes
35824* @param {Array|String|Point|KeyPair} pub - public key
35825* @returns {Boolean} - true if public key matches sig of message
35826*/
35827EDDSA.prototype.verify = function verify(message, sig, pub) {
35828 message = parseBytes(message);
35829 sig = this.makeSignature(sig);
35830 var key = this.keyFromPublic(pub);
35831 var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
35832 var SG = this.g.mul(sig.S());
35833 var RplusAh = sig.R().add(key.pub().mul(h));
35834 return RplusAh.eq(SG);
35835};
ebd8d4e8 35836
8b095871
IC
35837EDDSA.prototype.hashInt = function hashInt() {
35838 var hash = this.hash();
35839 for (var i = 0; i < arguments.length; i++)
35840 hash.update(arguments[i]);
35841 return utils.intFromLE(hash.digest()).umod(this.curve.n);
35842};
ebd8d4e8 35843
8b095871
IC
35844EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
35845 return KeyPair.fromPublic(this, pub);
35846};
ebd8d4e8 35847
8b095871
IC
35848EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
35849 return KeyPair.fromSecret(this, secret);
35850};
35851
35852EDDSA.prototype.makeSignature = function makeSignature(sig) {
35853 if (sig instanceof Signature)
35854 return sig;
35855 return new Signature(this, sig);
35856};
ebd8d4e8
IC
35857
35858/**
8b095871
IC
35859* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
35860*
35861* EDDSA defines methods for encoding and decoding points and integers. These are
35862* helper convenience methods, that pass along to utility functions implied
35863* parameters.
35864*
35865*/
35866EDDSA.prototype.encodePoint = function encodePoint(point) {
35867 var enc = point.getY().toArray('le', this.encodingLength);
35868 enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
35869 return enc;
35870};
ebd8d4e8 35871
8b095871
IC
35872EDDSA.prototype.decodePoint = function decodePoint(bytes) {
35873 bytes = utils.parseBytes(bytes);
ebd8d4e8 35874
8b095871
IC
35875 var lastIx = bytes.length - 1;
35876 var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
35877 var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
ebd8d4e8 35878
8b095871
IC
35879 var y = utils.intFromLE(normed);
35880 return this.curve.pointFromY(y, xIsOdd);
35881};
ebd8d4e8 35882
8b095871
IC
35883EDDSA.prototype.encodeInt = function encodeInt(num) {
35884 return num.toArray('le', this.encodingLength);
35885};
ebd8d4e8 35886
8b095871
IC
35887EDDSA.prototype.decodeInt = function decodeInt(bytes) {
35888 return utils.intFromLE(bytes);
35889};
ebd8d4e8 35890
8b095871
IC
35891EDDSA.prototype.isPoint = function isPoint(val) {
35892 return val instanceof this.pointClass;
35893};
ebd8d4e8 35894
8b095871
IC
35895},{"../../elliptic":39,"./key":50,"./signature":51,"hash.js":57}],50:[function(require,module,exports){
35896'use strict';
ebd8d4e8 35897
8b095871
IC
35898var elliptic = require('../../elliptic');
35899var utils = elliptic.utils;
35900var assert = utils.assert;
35901var parseBytes = utils.parseBytes;
35902var cachedProperty = utils.cachedProperty;
ebd8d4e8 35903
8b095871
IC
35904/**
35905* @param {EDDSA} eddsa - instance
35906* @param {Object} params - public/private key parameters
35907*
35908* @param {Array<Byte>} [params.secret] - secret seed bytes
35909* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
35910* @param {Array<Byte>} [params.pub] - public key point encoded as bytes
35911*
35912*/
35913function KeyPair(eddsa, params) {
35914 this.eddsa = eddsa;
35915 this._secret = parseBytes(params.secret);
35916 if (eddsa.isPoint(params.pub))
35917 this._pub = params.pub;
35918 else
35919 this._pubBytes = parseBytes(params.pub);
ebd8d4e8
IC
35920}
35921
8b095871
IC
35922KeyPair.fromPublic = function fromPublic(eddsa, pub) {
35923 if (pub instanceof KeyPair)
35924 return pub;
35925 return new KeyPair(eddsa, { pub: pub });
35926};
ebd8d4e8 35927
8b095871
IC
35928KeyPair.fromSecret = function fromSecret(eddsa, secret) {
35929 if (secret instanceof KeyPair)
35930 return secret;
35931 return new KeyPair(eddsa, { secret: secret });
35932};
ebd8d4e8 35933
8b095871
IC
35934KeyPair.prototype.secret = function secret() {
35935 return this._secret;
35936};
ebd8d4e8 35937
8b095871
IC
35938cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
35939 return this.eddsa.encodePoint(this.pub());
35940});
ebd8d4e8 35941
8b095871
IC
35942cachedProperty(KeyPair, 'pub', function pub() {
35943 if (this._pubBytes)
35944 return this.eddsa.decodePoint(this._pubBytes);
35945 return this.eddsa.g.mul(this.priv());
35946});
ebd8d4e8 35947
8b095871
IC
35948cachedProperty(KeyPair, 'privBytes', function privBytes() {
35949 var eddsa = this.eddsa;
35950 var hash = this.hash();
35951 var lastIx = eddsa.encodingLength - 1;
ebd8d4e8 35952
8b095871
IC
35953 var a = hash.slice(0, eddsa.encodingLength);
35954 a[0] &= 248;
35955 a[lastIx] &= 127;
35956 a[lastIx] |= 64;
ebd8d4e8 35957
8b095871
IC
35958 return a;
35959});
ebd8d4e8 35960
8b095871
IC
35961cachedProperty(KeyPair, 'priv', function priv() {
35962 return this.eddsa.decodeInt(this.privBytes());
35963});
ebd8d4e8 35964
8b095871
IC
35965cachedProperty(KeyPair, 'hash', function hash() {
35966 return this.eddsa.hash().update(this.secret()).digest();
35967});
ebd8d4e8 35968
8b095871
IC
35969cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
35970 return this.hash().slice(this.eddsa.encodingLength);
35971});
ebd8d4e8 35972
8b095871
IC
35973KeyPair.prototype.sign = function sign(message) {
35974 assert(this._secret, 'KeyPair can only verify');
35975 return this.eddsa.sign(message, this);
35976};
ebd8d4e8 35977
8b095871
IC
35978KeyPair.prototype.verify = function verify(message, sig) {
35979 return this.eddsa.verify(message, sig, this);
35980};
ebd8d4e8 35981
8b095871
IC
35982KeyPair.prototype.getSecret = function getSecret(enc) {
35983 assert(this._secret, 'KeyPair is public only');
35984 return utils.encode(this.secret(), enc);
35985};
ebd8d4e8 35986
8b095871
IC
35987KeyPair.prototype.getPublic = function getPublic(enc) {
35988 return utils.encode(this.pubBytes(), enc);
35989};
ebd8d4e8 35990
8b095871 35991module.exports = KeyPair;
ebd8d4e8 35992
8b095871
IC
35993},{"../../elliptic":39}],51:[function(require,module,exports){
35994'use strict';
ebd8d4e8 35995
8b095871
IC
35996var BN = require('bn.js');
35997var elliptic = require('../../elliptic');
35998var utils = elliptic.utils;
35999var assert = utils.assert;
36000var cachedProperty = utils.cachedProperty;
36001var parseBytes = utils.parseBytes;
ebd8d4e8 36002
8b095871
IC
36003/**
36004* @param {EDDSA} eddsa - eddsa instance
36005* @param {Array<Bytes>|Object} sig -
36006* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
36007* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
36008* @param {Array<Bytes>} [sig.Rencoded] - R point encoded
36009* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
36010*/
36011function Signature(eddsa, sig) {
36012 this.eddsa = eddsa;
ebd8d4e8 36013
8b095871
IC
36014 if (typeof sig !== 'object')
36015 sig = parseBytes(sig);
ebd8d4e8 36016
8b095871
IC
36017 if (Array.isArray(sig)) {
36018 sig = {
36019 R: sig.slice(0, eddsa.encodingLength),
36020 S: sig.slice(eddsa.encodingLength)
36021 };
ab78acc6 36022 }
ebd8d4e8 36023
8b095871 36024 assert(sig.R && sig.S, 'Signature without R or S');
ebd8d4e8 36025
8b095871
IC
36026 if (eddsa.isPoint(sig.R))
36027 this._R = sig.R;
36028 if (sig.S instanceof BN)
36029 this._S = sig.S;
36030
36031 this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
36032 this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
ebd8d4e8
IC
36033}
36034
8b095871
IC
36035cachedProperty(Signature, 'S', function S() {
36036 return this.eddsa.decodeInt(this.Sencoded());
36037});
ab78acc6 36038
8b095871
IC
36039cachedProperty(Signature, 'R', function R() {
36040 return this.eddsa.decodePoint(this.Rencoded());
36041});
ebd8d4e8 36042
8b095871
IC
36043cachedProperty(Signature, 'Rencoded', function Rencoded() {
36044 return this.eddsa.encodePoint(this.R());
36045});
ebd8d4e8 36046
8b095871
IC
36047cachedProperty(Signature, 'Sencoded', function Sencoded() {
36048 return this.eddsa.encodeInt(this.S());
36049});
ebd8d4e8 36050
8b095871
IC
36051Signature.prototype.toBytes = function toBytes() {
36052 return this.Rencoded().concat(this.Sencoded());
36053};
ebd8d4e8 36054
8b095871
IC
36055Signature.prototype.toHex = function toHex() {
36056 return utils.encode(this.toBytes(), 'hex').toUpperCase();
36057};
ebd8d4e8 36058
8b095871 36059module.exports = Signature;
ebd8d4e8 36060
8b095871
IC
36061},{"../../elliptic":39,"bn.js":33}],52:[function(require,module,exports){
36062'use strict';
ebd8d4e8 36063
8b095871
IC
36064var hash = require('hash.js');
36065var elliptic = require('../elliptic');
36066var utils = elliptic.utils;
36067var assert = utils.assert;
ebd8d4e8 36068
8b095871
IC
36069function HmacDRBG(options) {
36070 if (!(this instanceof HmacDRBG))
36071 return new HmacDRBG(options);
36072 this.hash = options.hash;
36073 this.predResist = !!options.predResist;
ab78acc6 36074
8b095871
IC
36075 this.outLen = this.hash.outSize;
36076 this.minEntropy = options.minEntropy || this.hash.hmacStrength;
ab78acc6 36077
8b095871
IC
36078 this.reseed = null;
36079 this.reseedInterval = null;
36080 this.K = null;
36081 this.V = null;
ebd8d4e8 36082
8b095871
IC
36083 var entropy = utils.toArray(options.entropy, options.entropyEnc);
36084 var nonce = utils.toArray(options.nonce, options.nonceEnc);
36085 var pers = utils.toArray(options.pers, options.persEnc);
36086 assert(entropy.length >= (this.minEntropy / 8),
36087 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
36088 this._init(entropy, nonce, pers);
ebd8d4e8 36089}
8b095871 36090module.exports = HmacDRBG;
ebd8d4e8 36091
8b095871
IC
36092HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
36093 var seed = entropy.concat(nonce).concat(pers);
ebd8d4e8 36094
8b095871
IC
36095 this.K = new Array(this.outLen / 8);
36096 this.V = new Array(this.outLen / 8);
36097 for (var i = 0; i < this.V.length; i++) {
36098 this.K[i] = 0x00;
36099 this.V[i] = 0x01;
36100 }
ebd8d4e8 36101
8b095871
IC
36102 this._update(seed);
36103 this.reseed = 1;
36104 this.reseedInterval = 0x1000000000000; // 2^48
36105};
ebd8d4e8 36106
8b095871
IC
36107HmacDRBG.prototype._hmac = function hmac() {
36108 return new hash.hmac(this.hash, this.K);
36109};
ebd8d4e8 36110
8b095871
IC
36111HmacDRBG.prototype._update = function update(seed) {
36112 var kmac = this._hmac()
36113 .update(this.V)
36114 .update([ 0x00 ]);
36115 if (seed)
36116 kmac = kmac.update(seed);
36117 this.K = kmac.digest();
36118 this.V = this._hmac().update(this.V).digest();
36119 if (!seed)
36120 return;
36121
36122 this.K = this._hmac()
36123 .update(this.V)
36124 .update([ 0x01 ])
36125 .update(seed)
36126 .digest();
36127 this.V = this._hmac().update(this.V).digest();
36128};
36129
36130HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
36131 // Optional entropy enc
36132 if (typeof entropyEnc !== 'string') {
36133 addEnc = add;
36134 add = entropyEnc;
36135 entropyEnc = null;
ebd8d4e8 36136 }
ebd8d4e8 36137
8b095871
IC
36138 entropy = utils.toBuffer(entropy, entropyEnc);
36139 add = utils.toBuffer(add, addEnc);
ebd8d4e8 36140
8b095871
IC
36141 assert(entropy.length >= (this.minEntropy / 8),
36142 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
ebd8d4e8 36143
8b095871
IC
36144 this._update(entropy.concat(add || []));
36145 this.reseed = 1;
36146};
ebd8d4e8 36147
8b095871
IC
36148HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
36149 if (this.reseed > this.reseedInterval)
36150 throw new Error('Reseed is required');
ebd8d4e8 36151
8b095871
IC
36152 // Optional encoding
36153 if (typeof enc !== 'string') {
36154 addEnc = add;
36155 add = enc;
36156 enc = null;
36157 }
ebd8d4e8 36158
8b095871
IC
36159 // Optional additional data
36160 if (add) {
36161 add = utils.toArray(add, addEnc);
36162 this._update(add);
ebd8d4e8
IC
36163 }
36164
8b095871
IC
36165 var temp = [];
36166 while (temp.length < len) {
36167 this.V = this._hmac().update(this.V).digest();
36168 temp = temp.concat(this.V);
ebd8d4e8
IC
36169 }
36170
8b095871
IC
36171 var res = temp.slice(0, len);
36172 this._update(add);
36173 this.reseed++;
36174 return utils.encode(res, enc);
36175};
ebd8d4e8 36176
8b095871
IC
36177},{"../elliptic":39,"hash.js":57}],53:[function(require,module,exports){
36178module.exports = {
36179 doubles: {
36180 step: 4,
36181 points: [
36182 [
36183 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',
36184 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'
36185 ],
36186 [
36187 '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',
36188 '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'
36189 ],
36190 [
36191 '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',
36192 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'
36193 ],
36194 [
36195 '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',
36196 '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'
36197 ],
36198 [
36199 '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',
36200 '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'
36201 ],
36202 [
36203 '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',
36204 '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'
36205 ],
36206 [
36207 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',
36208 '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'
36209 ],
36210 [
36211 '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',
36212 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'
36213 ],
36214 [
36215 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',
36216 '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'
36217 ],
36218 [
36219 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',
36220 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'
36221 ],
36222 [
36223 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',
36224 '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'
36225 ],
36226 [
36227 '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',
36228 '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'
36229 ],
36230 [
36231 '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',
36232 '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'
36233 ],
36234 [
36235 '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',
36236 '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'
36237 ],
36238 [
36239 '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',
36240 '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'
36241 ],
36242 [
36243 '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',
36244 '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'
36245 ],
36246 [
36247 '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',
36248 '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'
36249 ],
36250 [
36251 '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',
36252 '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'
36253 ],
36254 [
36255 '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',
36256 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'
36257 ],
36258 [
36259 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',
36260 '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'
36261 ],
36262 [
36263 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',
36264 '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'
36265 ],
36266 [
36267 '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',
36268 '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'
36269 ],
36270 [
36271 '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',
36272 '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'
36273 ],
36274 [
36275 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',
36276 '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'
36277 ],
36278 [
36279 '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',
36280 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'
36281 ],
36282 [
36283 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',
36284 '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'
36285 ],
36286 [
36287 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',
36288 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'
36289 ],
36290 [
36291 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',
36292 '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'
36293 ],
36294 [
36295 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',
36296 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'
36297 ],
36298 [
36299 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',
36300 '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'
36301 ],
36302 [
36303 '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',
36304 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'
36305 ],
36306 [
36307 '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',
36308 '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'
36309 ],
36310 [
36311 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',
36312 '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'
36313 ],
36314 [
36315 '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',
36316 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'
36317 ],
36318 [
36319 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',
36320 '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'
36321 ],
36322 [
36323 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',
36324 '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'
36325 ],
36326 [
36327 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',
36328 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'
36329 ],
36330 [
36331 '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',
36332 '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'
36333 ],
36334 [
36335 '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',
36336 '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'
36337 ],
36338 [
36339 '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',
36340 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'
36341 ],
36342 [
36343 '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',
36344 '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'
36345 ],
36346 [
36347 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',
36348 '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'
36349 ],
36350 [
36351 '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',
36352 '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'
36353 ],
36354 [
36355 '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',
36356 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'
36357 ],
36358 [
36359 '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',
36360 '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'
36361 ],
36362 [
36363 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',
36364 '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'
36365 ],
36366 [
36367 '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',
36368 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'
36369 ],
36370 [
36371 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',
36372 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'
36373 ],
36374 [
36375 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',
36376 '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'
36377 ],
36378 [
36379 '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',
36380 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'
36381 ],
36382 [
36383 '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',
36384 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'
36385 ],
36386 [
36387 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',
36388 '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'
36389 ],
36390 [
36391 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',
36392 '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'
36393 ],
36394 [
36395 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',
36396 '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'
36397 ],
36398 [
36399 '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',
36400 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'
36401 ],
36402 [
36403 '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',
36404 '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'
36405 ],
36406 [
36407 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',
36408 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'
36409 ],
36410 [
36411 '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',
36412 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'
36413 ],
36414 [
36415 '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',
36416 '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'
36417 ],
36418 [
36419 '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',
36420 '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'
36421 ],
36422 [
36423 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',
36424 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'
36425 ],
36426 [
36427 '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',
36428 '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'
36429 ],
36430 [
36431 '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',
36432 '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'
36433 ],
36434 [
36435 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',
36436 '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'
36437 ],
36438 [
36439 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',
36440 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'
36441 ]
36442 ]
36443 },
36444 naf: {
36445 wnd: 7,
36446 points: [
36447 [
36448 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
36449 '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'
36450 ],
36451 [
36452 '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',
36453 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'
36454 ],
36455 [
36456 '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',
36457 '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'
36458 ],
36459 [
36460 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',
36461 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'
36462 ],
36463 [
36464 '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',
36465 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'
36466 ],
36467 [
36468 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',
36469 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'
36470 ],
36471 [
36472 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',
36473 '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'
36474 ],
36475 [
36476 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',
36477 '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'
36478 ],
36479 [
36480 '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',
36481 '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'
36482 ],
36483 [
36484 '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',
36485 '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'
36486 ],
36487 [
36488 '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',
36489 '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'
36490 ],
36491 [
36492 '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',
36493 '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'
36494 ],
36495 [
36496 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',
36497 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'
36498 ],
36499 [
36500 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',
36501 '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'
36502 ],
36503 [
36504 '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',
36505 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'
36506 ],
36507 [
36508 '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',
36509 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'
36510 ],
36511 [
36512 '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',
36513 '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'
36514 ],
36515 [
36516 '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',
36517 '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'
36518 ],
36519 [
36520 '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',
36521 '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'
36522 ],
36523 [
36524 '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',
36525 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'
36526 ],
36527 [
36528 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',
36529 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'
36530 ],
36531 [
36532 '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',
36533 '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'
36534 ],
36535 [
36536 '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',
36537 '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'
36538 ],
36539 [
36540 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',
36541 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'
36542 ],
36543 [
36544 '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',
36545 '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'
36546 ],
36547 [
36548 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',
36549 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'
36550 ],
36551 [
36552 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',
36553 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'
36554 ],
36555 [
36556 '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',
36557 '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'
36558 ],
36559 [
36560 '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',
36561 '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'
36562 ],
36563 [
36564 '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',
36565 '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'
36566 ],
36567 [
36568 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',
36569 '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'
36570 ],
36571 [
36572 '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',
36573 '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'
36574 ],
36575 [
36576 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',
36577 '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'
36578 ],
36579 [
36580 '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',
36581 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'
36582 ],
36583 [
36584 '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',
36585 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'
36586 ],
36587 [
36588 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',
36589 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'
36590 ],
36591 [
36592 '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',
36593 '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'
36594 ],
36595 [
36596 '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',
36597 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'
36598 ],
36599 [
36600 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',
36601 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'
36602 ],
36603 [
36604 '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',
36605 '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'
36606 ],
36607 [
36608 '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',
36609 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'
36610 ],
36611 [
36612 '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',
36613 '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'
36614 ],
36615 [
36616 '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',
36617 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'
36618 ],
36619 [
36620 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',
36621 '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'
36622 ],
36623 [
36624 '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',
36625 '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'
36626 ],
36627 [
36628 '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',
36629 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'
36630 ],
36631 [
36632 '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',
36633 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'
36634 ],
36635 [
36636 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',
36637 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'
36638 ],
36639 [
36640 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',
36641 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'
36642 ],
36643 [
36644 '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',
36645 '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'
36646 ],
36647 [
36648 '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',
36649 '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'
36650 ],
36651 [
36652 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',
36653 '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'
36654 ],
36655 [
36656 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',
36657 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'
36658 ],
36659 [
36660 '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',
36661 '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'
36662 ],
36663 [
36664 '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',
36665 '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'
36666 ],
36667 [
36668 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',
36669 '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'
36670 ],
36671 [
36672 '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',
36673 '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'
36674 ],
36675 [
36676 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',
36677 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'
36678 ],
36679 [
36680 '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',
36681 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'
36682 ],
36683 [
36684 '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',
36685 '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'
36686 ],
36687 [
36688 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',
36689 '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'
36690 ],
36691 [
36692 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',
36693 '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'
36694 ],
36695 [
36696 '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',
36697 '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'
36698 ],
36699 [
36700 '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',
36701 '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'
36702 ],
36703 [
36704 '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',
36705 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'
36706 ],
36707 [
36708 '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',
36709 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'
36710 ],
36711 [
36712 '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',
36713 '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'
36714 ],
36715 [
36716 '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',
36717 '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'
36718 ],
36719 [
36720 '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',
36721 '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'
36722 ],
36723 [
36724 '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',
36725 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'
36726 ],
36727 [
36728 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',
36729 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'
36730 ],
36731 [
36732 '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',
36733 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'
36734 ],
36735 [
36736 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',
36737 '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'
36738 ],
36739 [
36740 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',
36741 '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'
36742 ],
36743 [
36744 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',
36745 '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'
36746 ],
36747 [
36748 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',
36749 '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'
36750 ],
36751 [
36752 '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',
36753 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'
36754 ],
36755 [
36756 '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',
36757 '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'
36758 ],
36759 [
36760 '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',
36761 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'
36762 ],
36763 [
36764 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',
36765 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'
36766 ],
36767 [
36768 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',
36769 '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'
36770 ],
36771 [
36772 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',
36773 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'
36774 ],
36775 [
36776 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',
36777 '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'
36778 ],
36779 [
36780 '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',
36781 '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'
36782 ],
36783 [
36784 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',
36785 '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'
36786 ],
36787 [
36788 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',
36789 '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'
36790 ],
36791 [
36792 '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',
36793 '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'
36794 ],
36795 [
36796 '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',
36797 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'
36798 ],
36799 [
36800 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',
36801 '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'
36802 ],
36803 [
36804 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',
36805 '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'
36806 ],
36807 [
36808 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',
36809 '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'
36810 ],
36811 [
36812 '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',
36813 '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'
36814 ],
36815 [
36816 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',
36817 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'
36818 ],
36819 [
36820 '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',
36821 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'
36822 ],
36823 [
36824 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',
36825 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'
36826 ],
36827 [
36828 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',
36829 '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'
36830 ],
36831 [
36832 '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',
36833 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'
36834 ],
36835 [
36836 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',
36837 '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'
36838 ],
36839 [
36840 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',
36841 '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'
36842 ],
36843 [
36844 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',
36845 '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'
36846 ],
36847 [
36848 '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',
36849 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'
36850 ],
36851 [
36852 '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',
36853 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'
36854 ],
36855 [
36856 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',
36857 '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'
36858 ],
36859 [
36860 '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',
36861 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'
36862 ],
36863 [
36864 '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',
36865 '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'
36866 ],
36867 [
36868 '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',
36869 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'
36870 ],
36871 [
36872 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',
36873 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'
36874 ],
36875 [
36876 '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',
36877 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'
36878 ],
36879 [
36880 '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',
36881 '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'
36882 ],
36883 [
36884 '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',
36885 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'
36886 ],
36887 [
36888 '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',
36889 '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'
36890 ],
36891 [
36892 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',
36893 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'
36894 ],
36895 [
36896 '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',
36897 '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'
36898 ],
36899 [
36900 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',
36901 '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'
36902 ],
36903 [
36904 '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',
36905 '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'
36906 ],
36907 [
36908 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',
36909 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'
36910 ],
36911 [
36912 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',
36913 '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'
36914 ],
36915 [
36916 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',
36917 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'
36918 ],
36919 [
36920 '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',
36921 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'
36922 ],
36923 [
36924 '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',
36925 '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'
36926 ],
36927 [
36928 '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',
36929 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'
36930 ],
36931 [
36932 '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',
36933 '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'
36934 ],
36935 [
36936 '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',
36937 '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'
36938 ],
36939 [
36940 '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',
36941 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'
36942 ],
36943 [
36944 '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',
36945 '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'
36946 ],
36947 [
36948 '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',
36949 '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'
36950 ],
36951 [
36952 '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',
36953 '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'
36954 ]
36955 ]
36956 }
36957};
ebd8d4e8 36958
8b095871
IC
36959},{}],54:[function(require,module,exports){
36960'use strict';
ebd8d4e8 36961
8b095871
IC
36962var utils = exports;
36963var BN = require('bn.js');
ebd8d4e8 36964
8b095871
IC
36965utils.assert = function assert(val, msg) {
36966 if (!val)
36967 throw new Error(msg || 'Assertion failed');
36968};
ebd8d4e8 36969
8b095871
IC
36970function toArray(msg, enc) {
36971 if (Array.isArray(msg))
36972 return msg.slice();
36973 if (!msg)
36974 return [];
36975 var res = [];
36976 if (typeof msg !== 'string') {
36977 for (var i = 0; i < msg.length; i++)
36978 res[i] = msg[i] | 0;
36979 return res;
36980 }
36981 if (!enc) {
36982 for (var i = 0; i < msg.length; i++) {
36983 var c = msg.charCodeAt(i);
36984 var hi = c >> 8;
36985 var lo = c & 0xff;
36986 if (hi)
36987 res.push(hi, lo);
36988 else
36989 res.push(lo);
36990 }
36991 } else if (enc === 'hex') {
36992 msg = msg.replace(/[^a-z0-9]+/ig, '');
36993 if (msg.length % 2 !== 0)
36994 msg = '0' + msg;
36995 for (var i = 0; i < msg.length; i += 2)
36996 res.push(parseInt(msg[i] + msg[i + 1], 16));
ebd8d4e8 36997 }
8b095871 36998 return res;
ebd8d4e8 36999}
8b095871 37000utils.toArray = toArray;
ebd8d4e8 37001
8b095871
IC
37002function zero2(word) {
37003 if (word.length === 1)
37004 return '0' + word;
37005 else
37006 return word;
37007}
37008utils.zero2 = zero2;
ab78acc6 37009
8b095871
IC
37010function toHex(msg) {
37011 var res = '';
37012 for (var i = 0; i < msg.length; i++)
37013 res += zero2(msg[i].toString(16));
37014 return res;
37015}
37016utils.toHex = toHex;
ebd8d4e8 37017
8b095871
IC
37018utils.encode = function encode(arr, enc) {
37019 if (enc === 'hex')
37020 return toHex(arr);
37021 else
37022 return arr;
37023};
ebd8d4e8 37024
8b095871
IC
37025// Represent num in a w-NAF form
37026function getNAF(num, w) {
37027 var naf = [];
37028 var ws = 1 << (w + 1);
37029 var k = num.clone();
37030 while (k.cmpn(1) >= 0) {
37031 var z;
37032 if (k.isOdd()) {
37033 var mod = k.andln(ws - 1);
37034 if (mod > (ws >> 1) - 1)
37035 z = (ws >> 1) - mod;
37036 else
37037 z = mod;
37038 k.isubn(z);
37039 } else {
37040 z = 0;
37041 }
37042 naf.push(z);
37043
37044 // Optimization, shift by word if possible
37045 var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;
37046 for (var i = 1; i < shift; i++)
37047 naf.push(0);
37048 k.iushrn(shift);
37049 }
37050
37051 return naf;
37052}
37053utils.getNAF = getNAF;
37054
37055// Represent k1, k2 in a Joint Sparse Form
37056function getJSF(k1, k2) {
37057 var jsf = [
37058 [],
37059 []
37060 ];
37061
37062 k1 = k1.clone();
37063 k2 = k2.clone();
37064 var d1 = 0;
37065 var d2 = 0;
37066 while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
37067
37068 // First phase
37069 var m14 = (k1.andln(3) + d1) & 3;
37070 var m24 = (k2.andln(3) + d2) & 3;
37071 if (m14 === 3)
37072 m14 = -1;
37073 if (m24 === 3)
37074 m24 = -1;
37075 var u1;
37076 if ((m14 & 1) === 0) {
37077 u1 = 0;
37078 } else {
37079 var m8 = (k1.andln(7) + d1) & 7;
37080 if ((m8 === 3 || m8 === 5) && m24 === 2)
37081 u1 = -m14;
37082 else
37083 u1 = m14;
37084 }
37085 jsf[0].push(u1);
ebd8d4e8 37086
8b095871
IC
37087 var u2;
37088 if ((m24 & 1) === 0) {
37089 u2 = 0;
37090 } else {
37091 var m8 = (k2.andln(7) + d2) & 7;
37092 if ((m8 === 3 || m8 === 5) && m14 === 2)
37093 u2 = -m24;
37094 else
37095 u2 = m24;
37096 }
37097 jsf[1].push(u2);
ebd8d4e8 37098
8b095871
IC
37099 // Second phase
37100 if (2 * d1 === u1 + 1)
37101 d1 = 1 - d1;
37102 if (2 * d2 === u2 + 1)
37103 d2 = 1 - d2;
37104 k1.iushrn(1);
37105 k2.iushrn(1);
37106 }
ebd8d4e8 37107
8b095871
IC
37108 return jsf;
37109}
37110utils.getJSF = getJSF;
ab78acc6 37111
8b095871
IC
37112function cachedProperty(obj, name, computer) {
37113 var key = '_' + name;
37114 obj.prototype[name] = function cachedProperty() {
37115 return this[key] !== undefined ? this[key] :
37116 this[key] = computer.call(this);
37117 };
37118}
37119utils.cachedProperty = cachedProperty;
ebd8d4e8 37120
8b095871
IC
37121function parseBytes(bytes) {
37122 return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :
37123 bytes;
37124}
37125utils.parseBytes = parseBytes;
ebd8d4e8 37126
8b095871
IC
37127function intFromLE(bytes) {
37128 return new BN(bytes, 'hex', 'le');
37129}
37130utils.intFromLE = intFromLE;
ebd8d4e8 37131
8b095871
IC
37132
37133},{"bn.js":33}],55:[function(require,module,exports){
37134module.exports={
37135 "_args": [
37136 [
37137 {
37138 "raw": "elliptic@^6.2.3",
37139 "scope": null,
37140 "escapedName": "elliptic",
37141 "name": "elliptic",
37142 "rawSpec": "^6.2.3",
37143 "spec": ">=6.2.3 <7.0.0",
37144 "type": "range"
37145 },
37146 "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1"
37147 ]
37148 ],
37149 "_from": "elliptic@>=6.2.3 <7.0.0",
37150 "_id": "elliptic@6.3.3",
37151 "_inCache": true,
37152 "_location": "/elliptic",
37153 "_nodeVersion": "7.0.0",
37154 "_npmOperationalInternal": {
37155 "host": "packages-18-east.internal.npmjs.com",
37156 "tmp": "tmp/elliptic-6.3.3.tgz_1486422837740_0.10658654430881143"
37157 },
37158 "_npmUser": {
37159 "name": "indutny",
37160 "email": "fedor@indutny.com"
37161 },
37162 "_npmVersion": "3.10.8",
37163 "_phantomChildren": {},
37164 "_requested": {
37165 "raw": "elliptic@^6.2.3",
37166 "scope": null,
37167 "escapedName": "elliptic",
37168 "name": "elliptic",
37169 "rawSpec": "^6.2.3",
37170 "spec": ">=6.2.3 <7.0.0",
37171 "type": "range"
37172 },
37173 "_requiredBy": [
37174 "/browserify-sign",
37175 "/create-ecdh",
37176 "/secp256k1"
37177 ],
37178 "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz",
37179 "_shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
37180 "_shrinkwrap": null,
37181 "_spec": "elliptic@^6.2.3",
37182 "_where": "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1",
37183 "author": {
37184 "name": "Fedor Indutny",
37185 "email": "fedor@indutny.com"
37186 },
37187 "bugs": {
37188 "url": "https://github.com/indutny/elliptic/issues"
37189 },
37190 "dependencies": {
37191 "bn.js": "^4.4.0",
37192 "brorand": "^1.0.1",
37193 "hash.js": "^1.0.0",
37194 "inherits": "^2.0.1"
37195 },
37196 "description": "EC cryptography",
37197 "devDependencies": {
37198 "brfs": "^1.4.3",
37199 "coveralls": "^2.11.3",
37200 "grunt": "^0.4.5",
37201 "grunt-browserify": "^5.0.0",
37202 "grunt-cli": "^1.2.0",
37203 "grunt-contrib-connect": "^1.0.0",
37204 "grunt-contrib-copy": "^1.0.0",
37205 "grunt-contrib-uglify": "^1.0.1",
37206 "grunt-mocha-istanbul": "^3.0.1",
37207 "grunt-saucelabs": "^8.6.2",
37208 "istanbul": "^0.4.2",
37209 "jscs": "^2.9.0",
37210 "jshint": "^2.6.0",
37211 "mocha": "^2.1.0"
37212 },
37213 "directories": {},
37214 "dist": {
37215 "shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
37216 "tarball": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz"
37217 },
37218 "files": [
37219 "lib"
37220 ],
37221 "gitHead": "63aee8d697e9b7fac37ece24222029117a890a7e",
37222 "homepage": "https://github.com/indutny/elliptic",
37223 "keywords": [
37224 "EC",
37225 "Elliptic",
37226 "curve",
37227 "Cryptography"
37228 ],
37229 "license": "MIT",
37230 "main": "lib/elliptic.js",
37231 "maintainers": [
37232 {
37233 "name": "indutny",
37234 "email": "fedor@indutny.com"
37235 }
37236 ],
37237 "name": "elliptic",
37238 "optionalDependencies": {},
37239 "readme": "ERROR: No README data found!",
37240 "repository": {
37241 "type": "git",
37242 "url": "git+ssh://git@github.com/indutny/elliptic.git"
37243 },
37244 "scripts": {
37245 "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
37246 "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
37247 "lint": "npm run jscs && npm run jshint",
37248 "test": "npm run lint && npm run unit",
37249 "unit": "istanbul test _mocha --reporter=spec test/index.js",
37250 "version": "grunt dist && git add dist/"
37251 },
37252 "version": "6.3.3"
ebd8d4e8
IC
37253}
37254
8b095871
IC
37255},{}],56:[function(require,module,exports){
37256(function (Buffer){
37257'use strict';
ab78acc6 37258
8b095871
IC
37259var isHexPrefixed = require('is-hex-prefixed');
37260var stripHexPrefix = require('strip-hex-prefix');
ebd8d4e8 37261
8b095871
IC
37262/**
37263 * Pads a `String` to have an even length
37264 * @param {String} value
37265 * @return {String} output
37266 */
37267function padToEven(value) {
37268 var a = value; // eslint-disable-line
37269
37270 if (typeof a !== 'string') {
37271 throw new Error('[ethjs-util] while padding to even, value must be string, is currently ' + typeof a + ', while padToEven.');
37272 }
37273
37274 if (a.length % 2) {
37275 a = '0' + a;
37276 }
37277
37278 return a;
ebd8d4e8
IC
37279}
37280
8b095871
IC
37281/**
37282 * Converts a `Number` into a hex `String`
37283 * @param {Number} i
37284 * @return {String}
37285 */
37286function intToHex(i) {
37287 var hex = i.toString(16); // eslint-disable-line
ebd8d4e8 37288
8b095871
IC
37289 return '0x' + padToEven(hex);
37290}
ab78acc6 37291
8b095871
IC
37292/**
37293 * Converts an `Number` to a `Buffer`
37294 * @param {Number} i
37295 * @return {Buffer}
37296 */
37297function intToBuffer(i) {
37298 var hex = intToHex(i);
ab78acc6 37299
8b095871
IC
37300 return new Buffer(hex.slice(2), 'hex');
37301}
ebd8d4e8 37302
8b095871
IC
37303/**
37304 * Get the binary size of a string
37305 * @param {String} str
37306 * @return {Number}
37307 */
37308function getBinarySize(str) {
37309 if (typeof str !== 'string') {
37310 throw new Error('[ethjs-util] while getting binary size, method getBinarySize requires input \'str\' to be type String, got \'' + typeof str + '\'.');
37311 }
ebd8d4e8 37312
8b095871
IC
37313 return Buffer.byteLength(str, 'utf8');
37314}
37315
37316/**
37317 * Returns TRUE if the first specified array contains all elements
37318 * from the second one. FALSE otherwise.
37319 *
37320 * @param {array} superset
37321 * @param {array} subset
37322 *
37323 * @returns {boolean}
37324 */
37325function arrayContainsArray(superset, subset, some) {
37326 if (Array.isArray(superset) !== true) {
37327 throw new Error('[ethjs-util] method arrayContainsArray requires input \'superset\' to be an array got type \'' + typeof superset + '\'');
37328 }
37329 if (Array.isArray(subset) !== true) {
37330 throw new Error('[ethjs-util] method arrayContainsArray requires input \'subset\' to be an array got type \'' + typeof subset + '\'');
ebd8d4e8
IC
37331 }
37332
8b095871
IC
37333 return subset[Boolean(some) && 'some' || 'every'](function (value) {
37334 return superset.indexOf(value) >= 0;
37335 });
ebd8d4e8
IC
37336}
37337
8b095871
IC
37338/**
37339 * Should be called to get utf8 from it's hex representation
37340 *
37341 * @method toUtf8
37342 * @param {String} string in hex
37343 * @returns {String} ascii string representation of hex value
37344 */
37345function toUtf8(hex) {
37346 var bufferValue = new Buffer(padToEven(stripHexPrefix(hex).replace(/^0+|0+$/g, '')), 'hex');
ebd8d4e8 37347
8b095871
IC
37348 return bufferValue.toString('utf8');
37349}
ab78acc6 37350
8b095871
IC
37351/**
37352 * Should be called to get ascii from it's hex representation
37353 *
37354 * @method toAscii
37355 * @param {String} string in hex
37356 * @returns {String} ascii string representation of hex value
37357 */
37358function toAscii(hex) {
37359 var str = ''; // eslint-disable-line
37360 var i = 0,
37361 l = hex.length; // eslint-disable-line
ebd8d4e8 37362
8b095871
IC
37363 if (hex.substring(0, 2) === '0x') {
37364 i = 2;
37365 }
ebd8d4e8 37366
8b095871
IC
37367 for (; i < l; i += 2) {
37368 var code = parseInt(hex.substr(i, 2), 16);
37369 str += String.fromCharCode(code);
ebd8d4e8 37370 }
8b095871
IC
37371
37372 return str;
ebd8d4e8
IC
37373}
37374
8b095871
IC
37375/**
37376 * Should be called to get hex representation (prefixed by 0x) of utf8 string
37377 *
37378 * @method fromUtf8
37379 * @param {String} string
37380 * @param {Number} optional padding
37381 * @returns {String} hex representation of input string
37382 */
37383function fromUtf8(stringValue) {
37384 var str = new Buffer(stringValue, 'utf8');
ebd8d4e8 37385
8b095871
IC
37386 return '0x' + padToEven(str.toString('hex')).replace(/^0+|0+$/g, '');
37387}
ab78acc6 37388
8b095871
IC
37389/**
37390 * Should be called to get hex representation (prefixed by 0x) of ascii string
37391 *
37392 * @method fromAscii
37393 * @param {String} string
37394 * @param {Number} optional padding
37395 * @returns {String} hex representation of input string
37396 */
37397function fromAscii(stringValue) {
37398 var hex = ''; // eslint-disable-line
37399 for (var i = 0; i < stringValue.length; i++) {
37400 // eslint-disable-line
37401 var code = stringValue.charCodeAt(i);
37402 var n = code.toString(16);
37403 hex += n.length < 2 ? '0' + n : n;
37404 }
ab78acc6 37405
8b095871
IC
37406 return '0x' + hex;
37407}
ebd8d4e8 37408
8b095871
IC
37409/**
37410 * getKeys([{a: 1, b: 2}, {a: 3, b: 4}], 'a') => [1, 3]
37411 *
37412 * @method getKeys get specific key from inner object array of objects
37413 * @param {String} params
37414 * @param {String} key
37415 * @param {Boolean} allowEmpty
37416 * @returns {Array} output just a simple array of output keys
37417 */
37418function getKeys(params, key, allowEmpty) {
37419 if (!Array.isArray(params)) {
37420 throw new Error('[ethjs-util] method getKeys expecting type Array as \'params\' input, got \'' + typeof params + '\'');
37421 }
37422 if (typeof key !== 'string') {
37423 throw new Error('[ethjs-util] method getKeys expecting type String for input \'key\' got \'' + typeof key + '\'.');
37424 }
ebd8d4e8 37425
8b095871 37426 var result = []; // eslint-disable-line
ebd8d4e8 37427
8b095871
IC
37428 for (var i = 0; i < params.length; i++) {
37429 // eslint-disable-line
37430 var value = params[i][key]; // eslint-disable-line
37431 if (allowEmpty && !value) {
37432 value = '';
37433 } else if (typeof value !== 'string') {
37434 throw new Error('invalid abi');
37435 }
37436 result.push(value);
37437 }
ebd8d4e8 37438
8b095871 37439 return result;
ebd8d4e8
IC
37440}
37441
8b095871
IC
37442/**
37443 * Is the string a hex string.
37444 *
37445 * @method check if string is hex string of specific length
37446 * @param {String} value
37447 * @param {Number} length
37448 * @returns {Boolean} output the string is a hex string
37449 */
37450function isHexString(value, length) {
37451 if (typeof value !== 'string' || !value.match(/^0x[0-9A-Fa-f]*$/)) {
37452 return false;
ab78acc6
IC
37453 }
37454
8b095871
IC
37455 if (length && value.length !== 2 + 2 * length) {
37456 return false;
37457 }
ebd8d4e8 37458
8b095871
IC
37459 return true;
37460}
ab78acc6 37461
8b095871
IC
37462module.exports = {
37463 arrayContainsArray: arrayContainsArray,
37464 intToBuffer: intToBuffer,
37465 getBinarySize: getBinarySize,
37466 isHexPrefixed: isHexPrefixed,
37467 stripHexPrefix: stripHexPrefix,
37468 padToEven: padToEven,
37469 intToHex: intToHex,
37470 fromAscii: fromAscii,
37471 fromUtf8: fromUtf8,
37472 toAscii: toAscii,
37473 toUtf8: toUtf8,
37474 getKeys: getKeys,
37475 isHexString: isHexString
37476};
37477}).call(this,require("buffer").Buffer)
37478},{"buffer":5,"is-hex-prefixed":64,"strip-hex-prefix":87}],57:[function(require,module,exports){
37479var hash = exports;
37480
37481hash.utils = require('./hash/utils');
37482hash.common = require('./hash/common');
37483hash.sha = require('./hash/sha');
37484hash.ripemd = require('./hash/ripemd');
37485hash.hmac = require('./hash/hmac');
37486
37487// Proxy hash functions to the main object
37488hash.sha1 = hash.sha.sha1;
37489hash.sha256 = hash.sha.sha256;
37490hash.sha224 = hash.sha.sha224;
37491hash.sha384 = hash.sha.sha384;
37492hash.sha512 = hash.sha.sha512;
37493hash.ripemd160 = hash.ripemd.ripemd160;
37494
37495},{"./hash/common":58,"./hash/hmac":59,"./hash/ripemd":60,"./hash/sha":61,"./hash/utils":62}],58:[function(require,module,exports){
37496var hash = require('../hash');
37497var utils = hash.utils;
37498var assert = utils.assert;
37499
37500function BlockHash() {
37501 this.pending = null;
37502 this.pendingTotal = 0;
37503 this.blockSize = this.constructor.blockSize;
37504 this.outSize = this.constructor.outSize;
37505 this.hmacStrength = this.constructor.hmacStrength;
37506 this.padLength = this.constructor.padLength / 8;
37507 this.endian = 'big';
37508
37509 this._delta8 = this.blockSize / 8;
37510 this._delta32 = this.blockSize / 32;
37511}
37512exports.BlockHash = BlockHash;
37513
37514BlockHash.prototype.update = function update(msg, enc) {
37515 // Convert message to array, pad it, and join into 32bit blocks
37516 msg = utils.toArray(msg, enc);
37517 if (!this.pending)
37518 this.pending = msg;
37519 else
37520 this.pending = this.pending.concat(msg);
37521 this.pendingTotal += msg.length;
ab78acc6 37522
8b095871
IC
37523 // Enough data, try updating
37524 if (this.pending.length >= this._delta8) {
37525 msg = this.pending;
ebd8d4e8 37526
8b095871
IC
37527 // Process pending data in blocks
37528 var r = msg.length % this._delta8;
37529 this.pending = msg.slice(msg.length - r, msg.length);
37530 if (this.pending.length === 0)
37531 this.pending = null;
ebd8d4e8 37532
8b095871
IC
37533 msg = utils.join32(msg, 0, msg.length - r, this.endian);
37534 for (var i = 0; i < msg.length; i += this._delta32)
37535 this._update(msg, i, i + this._delta32);
ebd8d4e8
IC
37536 }
37537
8b095871
IC
37538 return this;
37539};
ebd8d4e8 37540
8b095871
IC
37541BlockHash.prototype.digest = function digest(enc) {
37542 this.update(this._pad());
37543 assert(this.pending === null);
ebd8d4e8 37544
8b095871
IC
37545 return this._digest(enc);
37546};
ebd8d4e8 37547
8b095871
IC
37548BlockHash.prototype._pad = function pad() {
37549 var len = this.pendingTotal;
37550 var bytes = this._delta8;
37551 var k = bytes - ((len + this.padLength) % bytes);
37552 var res = new Array(k + this.padLength);
37553 res[0] = 0x80;
37554 for (var i = 1; i < k; i++)
37555 res[i] = 0;
37556
37557 // Append length
37558 len <<= 3;
37559 if (this.endian === 'big') {
37560 for (var t = 8; t < this.padLength; t++)
37561 res[i++] = 0;
37562
37563 res[i++] = 0;
37564 res[i++] = 0;
37565 res[i++] = 0;
37566 res[i++] = 0;
37567 res[i++] = (len >>> 24) & 0xff;
37568 res[i++] = (len >>> 16) & 0xff;
37569 res[i++] = (len >>> 8) & 0xff;
37570 res[i++] = len & 0xff;
ebd8d4e8 37571 } else {
8b095871
IC
37572 res[i++] = len & 0xff;
37573 res[i++] = (len >>> 8) & 0xff;
37574 res[i++] = (len >>> 16) & 0xff;
37575 res[i++] = (len >>> 24) & 0xff;
37576 res[i++] = 0;
37577 res[i++] = 0;
37578 res[i++] = 0;
37579 res[i++] = 0;
ebd8d4e8 37580
8b095871
IC
37581 for (var t = 8; t < this.padLength; t++)
37582 res[i++] = 0;
ebd8d4e8
IC
37583 }
37584
8b095871
IC
37585 return res;
37586};
ebd8d4e8 37587
8b095871
IC
37588},{"../hash":57}],59:[function(require,module,exports){
37589var hmac = exports;
ebd8d4e8 37590
8b095871
IC
37591var hash = require('../hash');
37592var utils = hash.utils;
37593var assert = utils.assert;
ebd8d4e8 37594
8b095871
IC
37595function Hmac(hash, key, enc) {
37596 if (!(this instanceof Hmac))
37597 return new Hmac(hash, key, enc);
37598 this.Hash = hash;
37599 this.blockSize = hash.blockSize / 8;
37600 this.outSize = hash.outSize / 8;
37601 this.inner = null;
37602 this.outer = null;
ebd8d4e8 37603
8b095871 37604 this._init(utils.toArray(key, enc));
ebd8d4e8 37605}
8b095871 37606module.exports = Hmac;
ebd8d4e8 37607
8b095871
IC
37608Hmac.prototype._init = function init(key) {
37609 // Shorten key, if needed
37610 if (key.length > this.blockSize)
37611 key = new this.Hash().update(key).digest();
37612 assert(key.length <= this.blockSize);
ebd8d4e8 37613
8b095871
IC
37614 // Add padding to key
37615 for (var i = key.length; i < this.blockSize; i++)
37616 key.push(0);
ab78acc6 37617
8b095871
IC
37618 for (var i = 0; i < key.length; i++)
37619 key[i] ^= 0x36;
37620 this.inner = new this.Hash().update(key);
ab78acc6 37621
8b095871
IC
37622 // 0x36 ^ 0x5c = 0x6a
37623 for (var i = 0; i < key.length; i++)
37624 key[i] ^= 0x6a;
37625 this.outer = new this.Hash().update(key);
37626};
ebd8d4e8 37627
8b095871
IC
37628Hmac.prototype.update = function update(msg, enc) {
37629 this.inner.update(msg, enc);
37630 return this;
37631};
ab78acc6 37632
8b095871
IC
37633Hmac.prototype.digest = function digest(enc) {
37634 this.outer.update(this.inner.digest());
37635 return this.outer.digest(enc);
37636};
ab78acc6 37637
8b095871
IC
37638},{"../hash":57}],60:[function(require,module,exports){
37639var hash = require('../hash');
37640var utils = hash.utils;
37641
37642var rotl32 = utils.rotl32;
37643var sum32 = utils.sum32;
37644var sum32_3 = utils.sum32_3;
37645var sum32_4 = utils.sum32_4;
37646var BlockHash = hash.common.BlockHash;
37647
37648function RIPEMD160() {
37649 if (!(this instanceof RIPEMD160))
37650 return new RIPEMD160();
37651
37652 BlockHash.call(this);
37653
37654 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
37655 this.endian = 'little';
37656}
37657utils.inherits(RIPEMD160, BlockHash);
37658exports.ripemd160 = RIPEMD160;
37659
37660RIPEMD160.blockSize = 512;
37661RIPEMD160.outSize = 160;
37662RIPEMD160.hmacStrength = 192;
37663RIPEMD160.padLength = 64;
37664
37665RIPEMD160.prototype._update = function update(msg, start) {
37666 var A = this.h[0];
37667 var B = this.h[1];
37668 var C = this.h[2];
37669 var D = this.h[3];
37670 var E = this.h[4];
37671 var Ah = A;
37672 var Bh = B;
37673 var Ch = C;
37674 var Dh = D;
37675 var Eh = E;
37676 for (var j = 0; j < 80; j++) {
37677 var T = sum32(
37678 rotl32(
37679 sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
37680 s[j]),
37681 E);
37682 A = E;
37683 E = D;
37684 D = rotl32(C, 10);
37685 C = B;
37686 B = T;
37687 T = sum32(
37688 rotl32(
37689 sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
37690 sh[j]),
37691 Eh);
37692 Ah = Eh;
37693 Eh = Dh;
37694 Dh = rotl32(Ch, 10);
37695 Ch = Bh;
37696 Bh = T;
37697 }
37698 T = sum32_3(this.h[1], C, Dh);
37699 this.h[1] = sum32_3(this.h[2], D, Eh);
37700 this.h[2] = sum32_3(this.h[3], E, Ah);
37701 this.h[3] = sum32_3(this.h[4], A, Bh);
37702 this.h[4] = sum32_3(this.h[0], B, Ch);
37703 this.h[0] = T;
37704};
ebd8d4e8 37705
8b095871
IC
37706RIPEMD160.prototype._digest = function digest(enc) {
37707 if (enc === 'hex')
37708 return utils.toHex32(this.h, 'little');
37709 else
37710 return utils.split32(this.h, 'little');
37711};
ebd8d4e8 37712
8b095871
IC
37713function f(j, x, y, z) {
37714 if (j <= 15)
37715 return x ^ y ^ z;
37716 else if (j <= 31)
37717 return (x & y) | ((~x) & z);
37718 else if (j <= 47)
37719 return (x | (~y)) ^ z;
37720 else if (j <= 63)
37721 return (x & z) | (y & (~z));
37722 else
37723 return x ^ (y | (~z));
37724}
37725
37726function K(j) {
37727 if (j <= 15)
37728 return 0x00000000;
37729 else if (j <= 31)
37730 return 0x5a827999;
37731 else if (j <= 47)
37732 return 0x6ed9eba1;
37733 else if (j <= 63)
37734 return 0x8f1bbcdc;
37735 else
37736 return 0xa953fd4e;
37737}
37738
37739function Kh(j) {
37740 if (j <= 15)
37741 return 0x50a28be6;
37742 else if (j <= 31)
37743 return 0x5c4dd124;
37744 else if (j <= 47)
37745 return 0x6d703ef3;
37746 else if (j <= 63)
37747 return 0x7a6d76e9;
37748 else
37749 return 0x00000000;
37750}
ebd8d4e8 37751
8b095871
IC
37752var r = [
37753 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
37754 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
37755 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
37756 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
37757 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
37758];
ebd8d4e8 37759
8b095871
IC
37760var rh = [
37761 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
37762 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
37763 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
37764 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
37765 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
37766];
ebd8d4e8 37767
8b095871
IC
37768var s = [
37769 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
37770 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
37771 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
37772 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
37773 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
37774];
ebd8d4e8 37775
8b095871
IC
37776var sh = [
37777 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
37778 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
37779 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
37780 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
37781 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
37782];
ebd8d4e8 37783
8b095871
IC
37784},{"../hash":57}],61:[function(require,module,exports){
37785var hash = require('../hash');
37786var utils = hash.utils;
37787var assert = utils.assert;
37788
37789var rotr32 = utils.rotr32;
37790var rotl32 = utils.rotl32;
37791var sum32 = utils.sum32;
37792var sum32_4 = utils.sum32_4;
37793var sum32_5 = utils.sum32_5;
37794var rotr64_hi = utils.rotr64_hi;
37795var rotr64_lo = utils.rotr64_lo;
37796var shr64_hi = utils.shr64_hi;
37797var shr64_lo = utils.shr64_lo;
37798var sum64 = utils.sum64;
37799var sum64_hi = utils.sum64_hi;
37800var sum64_lo = utils.sum64_lo;
37801var sum64_4_hi = utils.sum64_4_hi;
37802var sum64_4_lo = utils.sum64_4_lo;
37803var sum64_5_hi = utils.sum64_5_hi;
37804var sum64_5_lo = utils.sum64_5_lo;
37805var BlockHash = hash.common.BlockHash;
37806
37807var sha256_K = [
37808 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
37809 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
37810 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
37811 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
37812 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
37813 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
37814 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
37815 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
37816 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
37817 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
37818 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
37819 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
37820 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
37821 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
37822 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
37823 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
37824];
ebd8d4e8 37825
8b095871
IC
37826var sha512_K = [
37827 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
37828 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
37829 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
37830 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
37831 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
37832 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
37833 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
37834 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
37835 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
37836 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
37837 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
37838 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
37839 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
37840 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
37841 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
37842 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
37843 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
37844 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
37845 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
37846 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
37847 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
37848 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
37849 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
37850 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
37851 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
37852 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
37853 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
37854 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
37855 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
37856 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
37857 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
37858 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
37859 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
37860 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
37861 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
37862 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
37863 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
37864 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
37865 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
37866 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
37867];
ebd8d4e8 37868
8b095871
IC
37869var sha1_K = [
37870 0x5A827999, 0x6ED9EBA1,
37871 0x8F1BBCDC, 0xCA62C1D6
37872];
ebd8d4e8 37873
8b095871
IC
37874function SHA256() {
37875 if (!(this instanceof SHA256))
37876 return new SHA256();
37877
37878 BlockHash.call(this);
37879 this.h = [ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
37880 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ];
37881 this.k = sha256_K;
37882 this.W = new Array(64);
37883}
37884utils.inherits(SHA256, BlockHash);
37885exports.sha256 = SHA256;
37886
37887SHA256.blockSize = 512;
37888SHA256.outSize = 256;
37889SHA256.hmacStrength = 192;
37890SHA256.padLength = 64;
37891
37892SHA256.prototype._update = function _update(msg, start) {
37893 var W = this.W;
37894
37895 for (var i = 0; i < 16; i++)
37896 W[i] = msg[start + i];
37897 for (; i < W.length; i++)
37898 W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
37899
37900 var a = this.h[0];
37901 var b = this.h[1];
37902 var c = this.h[2];
37903 var d = this.h[3];
37904 var e = this.h[4];
37905 var f = this.h[5];
37906 var g = this.h[6];
37907 var h = this.h[7];
37908
37909 assert(this.k.length === W.length);
37910 for (var i = 0; i < W.length; i++) {
37911 var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
37912 var T2 = sum32(s0_256(a), maj32(a, b, c));
37913 h = g;
37914 g = f;
37915 f = e;
37916 e = sum32(d, T1);
37917 d = c;
37918 c = b;
37919 b = a;
37920 a = sum32(T1, T2);
37921 }
37922
37923 this.h[0] = sum32(this.h[0], a);
37924 this.h[1] = sum32(this.h[1], b);
37925 this.h[2] = sum32(this.h[2], c);
37926 this.h[3] = sum32(this.h[3], d);
37927 this.h[4] = sum32(this.h[4], e);
37928 this.h[5] = sum32(this.h[5], f);
37929 this.h[6] = sum32(this.h[6], g);
37930 this.h[7] = sum32(this.h[7], h);
37931};
ebd8d4e8 37932
8b095871
IC
37933SHA256.prototype._digest = function digest(enc) {
37934 if (enc === 'hex')
37935 return utils.toHex32(this.h, 'big');
37936 else
37937 return utils.split32(this.h, 'big');
37938};
ebd8d4e8 37939
8b095871
IC
37940function SHA224() {
37941 if (!(this instanceof SHA224))
37942 return new SHA224();
ebd8d4e8 37943
8b095871
IC
37944 SHA256.call(this);
37945 this.h = [ 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
37946 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];
37947}
37948utils.inherits(SHA224, SHA256);
37949exports.sha224 = SHA224;
ebd8d4e8 37950
8b095871
IC
37951SHA224.blockSize = 512;
37952SHA224.outSize = 224;
37953SHA224.hmacStrength = 192;
37954SHA224.padLength = 64;
ebd8d4e8 37955
8b095871
IC
37956SHA224.prototype._digest = function digest(enc) {
37957 // Just truncate output
37958 if (enc === 'hex')
37959 return utils.toHex32(this.h.slice(0, 7), 'big');
37960 else
37961 return utils.split32(this.h.slice(0, 7), 'big');
37962};
37963
37964function SHA512() {
37965 if (!(this instanceof SHA512))
37966 return new SHA512();
37967
37968 BlockHash.call(this);
37969 this.h = [ 0x6a09e667, 0xf3bcc908,
37970 0xbb67ae85, 0x84caa73b,
37971 0x3c6ef372, 0xfe94f82b,
37972 0xa54ff53a, 0x5f1d36f1,
37973 0x510e527f, 0xade682d1,
37974 0x9b05688c, 0x2b3e6c1f,
37975 0x1f83d9ab, 0xfb41bd6b,
37976 0x5be0cd19, 0x137e2179 ];
37977 this.k = sha512_K;
37978 this.W = new Array(160);
37979}
37980utils.inherits(SHA512, BlockHash);
37981exports.sha512 = SHA512;
37982
37983SHA512.blockSize = 1024;
37984SHA512.outSize = 512;
37985SHA512.hmacStrength = 192;
37986SHA512.padLength = 128;
37987
37988SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
37989 var W = this.W;
37990
37991 // 32 x 32bit words
37992 for (var i = 0; i < 32; i++)
37993 W[i] = msg[start + i];
37994 for (; i < W.length; i += 2) {
37995 var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2
37996 var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
37997 var c1_hi = W[i - 14]; // i - 7
37998 var c1_lo = W[i - 13];
37999 var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15
38000 var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
38001 var c3_hi = W[i - 32]; // i - 16
38002 var c3_lo = W[i - 31];
38003
38004 W[i] = sum64_4_hi(c0_hi, c0_lo,
38005 c1_hi, c1_lo,
38006 c2_hi, c2_lo,
38007 c3_hi, c3_lo);
38008 W[i + 1] = sum64_4_lo(c0_hi, c0_lo,
38009 c1_hi, c1_lo,
38010 c2_hi, c2_lo,
38011 c3_hi, c3_lo);
ebd8d4e8 38012 }
8b095871
IC
38013};
38014
38015SHA512.prototype._update = function _update(msg, start) {
38016 this._prepareBlock(msg, start);
38017
38018 var W = this.W;
38019
38020 var ah = this.h[0];
38021 var al = this.h[1];
38022 var bh = this.h[2];
38023 var bl = this.h[3];
38024 var ch = this.h[4];
38025 var cl = this.h[5];
38026 var dh = this.h[6];
38027 var dl = this.h[7];
38028 var eh = this.h[8];
38029 var el = this.h[9];
38030 var fh = this.h[10];
38031 var fl = this.h[11];
38032 var gh = this.h[12];
38033 var gl = this.h[13];
38034 var hh = this.h[14];
38035 var hl = this.h[15];
38036
38037 assert(this.k.length === W.length);
38038 for (var i = 0; i < W.length; i += 2) {
38039 var c0_hi = hh;
38040 var c0_lo = hl;
38041 var c1_hi = s1_512_hi(eh, el);
38042 var c1_lo = s1_512_lo(eh, el);
38043 var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
38044 var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
38045 var c3_hi = this.k[i];
38046 var c3_lo = this.k[i + 1];
38047 var c4_hi = W[i];
38048 var c4_lo = W[i + 1];
38049
38050 var T1_hi = sum64_5_hi(c0_hi, c0_lo,
38051 c1_hi, c1_lo,
38052 c2_hi, c2_lo,
38053 c3_hi, c3_lo,
38054 c4_hi, c4_lo);
38055 var T1_lo = sum64_5_lo(c0_hi, c0_lo,
38056 c1_hi, c1_lo,
38057 c2_hi, c2_lo,
38058 c3_hi, c3_lo,
38059 c4_hi, c4_lo);
38060
38061 var c0_hi = s0_512_hi(ah, al);
38062 var c0_lo = s0_512_lo(ah, al);
38063 var c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
38064 var c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
38065
38066 var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
38067 var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
38068
38069 hh = gh;
38070 hl = gl;
38071
38072 gh = fh;
38073 gl = fl;
38074
38075 fh = eh;
38076 fl = el;
38077
38078 eh = sum64_hi(dh, dl, T1_hi, T1_lo);
38079 el = sum64_lo(dl, dl, T1_hi, T1_lo);
38080
38081 dh = ch;
38082 dl = cl;
38083
38084 ch = bh;
38085 cl = bl;
38086
38087 bh = ah;
38088 bl = al;
38089
38090 ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
38091 al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
38092 }
38093
38094 sum64(this.h, 0, ah, al);
38095 sum64(this.h, 2, bh, bl);
38096 sum64(this.h, 4, ch, cl);
38097 sum64(this.h, 6, dh, dl);
38098 sum64(this.h, 8, eh, el);
38099 sum64(this.h, 10, fh, fl);
38100 sum64(this.h, 12, gh, gl);
38101 sum64(this.h, 14, hh, hl);
38102};
38103
38104SHA512.prototype._digest = function digest(enc) {
38105 if (enc === 'hex')
38106 return utils.toHex32(this.h, 'big');
38107 else
38108 return utils.split32(this.h, 'big');
38109};
38110
38111function SHA384() {
38112 if (!(this instanceof SHA384))
38113 return new SHA384();
38114
38115 SHA512.call(this);
38116 this.h = [ 0xcbbb9d5d, 0xc1059ed8,
38117 0x629a292a, 0x367cd507,
38118 0x9159015a, 0x3070dd17,
38119 0x152fecd8, 0xf70e5939,
38120 0x67332667, 0xffc00b31,
38121 0x8eb44a87, 0x68581511,
38122 0xdb0c2e0d, 0x64f98fa7,
38123 0x47b5481d, 0xbefa4fa4 ];
38124}
38125utils.inherits(SHA384, SHA512);
38126exports.sha384 = SHA384;
38127
38128SHA384.blockSize = 1024;
38129SHA384.outSize = 384;
38130SHA384.hmacStrength = 192;
38131SHA384.padLength = 128;
38132
38133SHA384.prototype._digest = function digest(enc) {
38134 if (enc === 'hex')
38135 return utils.toHex32(this.h.slice(0, 12), 'big');
38136 else
38137 return utils.split32(this.h.slice(0, 12), 'big');
38138};
ebd8d4e8 38139
8b095871
IC
38140function SHA1() {
38141 if (!(this instanceof SHA1))
38142 return new SHA1();
ebd8d4e8 38143
8b095871
IC
38144 BlockHash.call(this);
38145 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe,
38146 0x10325476, 0xc3d2e1f0 ];
38147 this.W = new Array(80);
38148}
ebd8d4e8 38149
8b095871
IC
38150utils.inherits(SHA1, BlockHash);
38151exports.sha1 = SHA1;
ebd8d4e8 38152
8b095871
IC
38153SHA1.blockSize = 512;
38154SHA1.outSize = 160;
38155SHA1.hmacStrength = 80;
38156SHA1.padLength = 64;
ebd8d4e8 38157
8b095871
IC
38158SHA1.prototype._update = function _update(msg, start) {
38159 var W = this.W;
ebd8d4e8 38160
8b095871
IC
38161 for (var i = 0; i < 16; i++)
38162 W[i] = msg[start + i];
ebd8d4e8 38163
8b095871
IC
38164 for(; i < W.length; i++)
38165 W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
ebd8d4e8 38166
8b095871
IC
38167 var a = this.h[0];
38168 var b = this.h[1];
38169 var c = this.h[2];
38170 var d = this.h[3];
38171 var e = this.h[4];
ebd8d4e8 38172
8b095871
IC
38173 for (var i = 0; i < W.length; i++) {
38174 var s = ~~(i / 20);
38175 var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
38176 e = d;
38177 d = c;
38178 c = rotl32(b, 30);
38179 b = a;
38180 a = t;
ebd8d4e8
IC
38181 }
38182
8b095871
IC
38183 this.h[0] = sum32(this.h[0], a);
38184 this.h[1] = sum32(this.h[1], b);
38185 this.h[2] = sum32(this.h[2], c);
38186 this.h[3] = sum32(this.h[3], d);
38187 this.h[4] = sum32(this.h[4], e);
38188};
ebd8d4e8 38189
8b095871
IC
38190SHA1.prototype._digest = function digest(enc) {
38191 if (enc === 'hex')
38192 return utils.toHex32(this.h, 'big');
38193 else
38194 return utils.split32(this.h, 'big');
38195};
38196
38197function ch32(x, y, z) {
38198 return (x & y) ^ ((~x) & z);
ebd8d4e8
IC
38199}
38200
8b095871
IC
38201function maj32(x, y, z) {
38202 return (x & y) ^ (x & z) ^ (y & z);
ebd8d4e8
IC
38203}
38204
8b095871
IC
38205function p32(x, y, z) {
38206 return x ^ y ^ z;
38207}
ebd8d4e8 38208
8b095871
IC
38209function s0_256(x) {
38210 return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
38211}
ebd8d4e8 38212
8b095871
IC
38213function s1_256(x) {
38214 return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
ab78acc6
IC
38215}
38216
8b095871
IC
38217function g0_256(x) {
38218 return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);
38219}
ab78acc6 38220
8b095871
IC
38221function g1_256(x) {
38222 return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
38223}
ab78acc6 38224
8b095871
IC
38225function ft_1(s, x, y, z) {
38226 if (s === 0)
38227 return ch32(x, y, z);
38228 if (s === 1 || s === 3)
38229 return p32(x, y, z);
38230 if (s === 2)
38231 return maj32(x, y, z);
38232}
ebd8d4e8 38233
8b095871
IC
38234function ch64_hi(xh, xl, yh, yl, zh, zl) {
38235 var r = (xh & yh) ^ ((~xh) & zh);
38236 if (r < 0)
38237 r += 0x100000000;
38238 return r;
38239}
ebd8d4e8 38240
8b095871
IC
38241function ch64_lo(xh, xl, yh, yl, zh, zl) {
38242 var r = (xl & yl) ^ ((~xl) & zl);
38243 if (r < 0)
38244 r += 0x100000000;
38245 return r;
ebd8d4e8
IC
38246}
38247
8b095871
IC
38248function maj64_hi(xh, xl, yh, yl, zh, zl) {
38249 var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);
38250 if (r < 0)
38251 r += 0x100000000;
38252 return r;
38253}
ebd8d4e8 38254
8b095871
IC
38255function maj64_lo(xh, xl, yh, yl, zh, zl) {
38256 var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);
38257 if (r < 0)
38258 r += 0x100000000;
38259 return r;
38260}
ebd8d4e8 38261
8b095871
IC
38262function s0_512_hi(xh, xl) {
38263 var c0_hi = rotr64_hi(xh, xl, 28);
38264 var c1_hi = rotr64_hi(xl, xh, 2); // 34
38265 var c2_hi = rotr64_hi(xl, xh, 7); // 39
38266
38267 var r = c0_hi ^ c1_hi ^ c2_hi;
38268 if (r < 0)
38269 r += 0x100000000;
38270 return r;
ebd8d4e8
IC
38271}
38272
8b095871
IC
38273function s0_512_lo(xh, xl) {
38274 var c0_lo = rotr64_lo(xh, xl, 28);
38275 var c1_lo = rotr64_lo(xl, xh, 2); // 34
38276 var c2_lo = rotr64_lo(xl, xh, 7); // 39
ab78acc6 38277
8b095871
IC
38278 var r = c0_lo ^ c1_lo ^ c2_lo;
38279 if (r < 0)
38280 r += 0x100000000;
38281 return r;
38282}
ebd8d4e8 38283
8b095871
IC
38284function s1_512_hi(xh, xl) {
38285 var c0_hi = rotr64_hi(xh, xl, 14);
38286 var c1_hi = rotr64_hi(xh, xl, 18);
38287 var c2_hi = rotr64_hi(xl, xh, 9); // 41
ebd8d4e8 38288
8b095871
IC
38289 var r = c0_hi ^ c1_hi ^ c2_hi;
38290 if (r < 0)
38291 r += 0x100000000;
38292 return r;
ebd8d4e8
IC
38293}
38294
8b095871
IC
38295function s1_512_lo(xh, xl) {
38296 var c0_lo = rotr64_lo(xh, xl, 14);
38297 var c1_lo = rotr64_lo(xh, xl, 18);
38298 var c2_lo = rotr64_lo(xl, xh, 9); // 41
38299
38300 var r = c0_lo ^ c1_lo ^ c2_lo;
38301 if (r < 0)
38302 r += 0x100000000;
38303 return r;
ebd8d4e8
IC
38304}
38305
8b095871
IC
38306function g0_512_hi(xh, xl) {
38307 var c0_hi = rotr64_hi(xh, xl, 1);
38308 var c1_hi = rotr64_hi(xh, xl, 8);
38309 var c2_hi = shr64_hi(xh, xl, 7);
ebd8d4e8 38310
8b095871
IC
38311 var r = c0_hi ^ c1_hi ^ c2_hi;
38312 if (r < 0)
38313 r += 0x100000000;
38314 return r;
38315}
38316
38317function g0_512_lo(xh, xl) {
38318 var c0_lo = rotr64_lo(xh, xl, 1);
38319 var c1_lo = rotr64_lo(xh, xl, 8);
38320 var c2_lo = shr64_lo(xh, xl, 7);
38321
38322 var r = c0_lo ^ c1_lo ^ c2_lo;
38323 if (r < 0)
38324 r += 0x100000000;
38325 return r;
38326}
38327
38328function g1_512_hi(xh, xl) {
38329 var c0_hi = rotr64_hi(xh, xl, 19);
38330 var c1_hi = rotr64_hi(xl, xh, 29); // 61
38331 var c2_hi = shr64_hi(xh, xl, 6);
38332
38333 var r = c0_hi ^ c1_hi ^ c2_hi;
38334 if (r < 0)
38335 r += 0x100000000;
38336 return r;
38337}
38338
38339function g1_512_lo(xh, xl) {
38340 var c0_lo = rotr64_lo(xh, xl, 19);
38341 var c1_lo = rotr64_lo(xl, xh, 29); // 61
38342 var c2_lo = shr64_lo(xh, xl, 6);
38343
38344 var r = c0_lo ^ c1_lo ^ c2_lo;
38345 if (r < 0)
38346 r += 0x100000000;
38347 return r;
38348}
38349
38350},{"../hash":57}],62:[function(require,module,exports){
38351var utils = exports;
38352var inherits = require('inherits');
38353
38354function toArray(msg, enc) {
38355 if (Array.isArray(msg))
38356 return msg.slice();
38357 if (!msg)
38358 return [];
38359 var res = [];
38360 if (typeof msg === 'string') {
38361 if (!enc) {
38362 for (var i = 0; i < msg.length; i++) {
38363 var c = msg.charCodeAt(i);
38364 var hi = c >> 8;
38365 var lo = c & 0xff;
38366 if (hi)
38367 res.push(hi, lo);
38368 else
38369 res.push(lo);
38370 }
38371 } else if (enc === 'hex') {
38372 msg = msg.replace(/[^a-z0-9]+/ig, '');
38373 if (msg.length % 2 !== 0)
38374 msg = '0' + msg;
38375 for (var i = 0; i < msg.length; i += 2)
38376 res.push(parseInt(msg[i] + msg[i + 1], 16));
38377 }
38378 } else {
38379 for (var i = 0; i < msg.length; i++)
38380 res[i] = msg[i] | 0;
ebd8d4e8 38381 }
8b095871 38382 return res;
ebd8d4e8 38383}
8b095871 38384utils.toArray = toArray;
ebd8d4e8 38385
8b095871
IC
38386function toHex(msg) {
38387 var res = '';
38388 for (var i = 0; i < msg.length; i++)
38389 res += zero2(msg[i].toString(16));
38390 return res;
38391}
38392utils.toHex = toHex;
ebd8d4e8 38393
8b095871
IC
38394function htonl(w) {
38395 var res = (w >>> 24) |
38396 ((w >>> 8) & 0xff00) |
38397 ((w << 8) & 0xff0000) |
38398 ((w & 0xff) << 24);
38399 return res >>> 0;
38400}
38401utils.htonl = htonl;
ebd8d4e8 38402
8b095871
IC
38403function toHex32(msg, endian) {
38404 var res = '';
38405 for (var i = 0; i < msg.length; i++) {
38406 var w = msg[i];
38407 if (endian === 'little')
38408 w = htonl(w);
38409 res += zero8(w.toString(16));
38410 }
38411 return res;
38412}
38413utils.toHex32 = toHex32;
ebd8d4e8 38414
8b095871
IC
38415function zero2(word) {
38416 if (word.length === 1)
38417 return '0' + word;
38418 else
38419 return word;
38420}
38421utils.zero2 = zero2;
38422
38423function zero8(word) {
38424 if (word.length === 7)
38425 return '0' + word;
38426 else if (word.length === 6)
38427 return '00' + word;
38428 else if (word.length === 5)
38429 return '000' + word;
38430 else if (word.length === 4)
38431 return '0000' + word;
38432 else if (word.length === 3)
38433 return '00000' + word;
38434 else if (word.length === 2)
38435 return '000000' + word;
38436 else if (word.length === 1)
38437 return '0000000' + word;
38438 else
38439 return word;
38440}
38441utils.zero8 = zero8;
38442
38443function join32(msg, start, end, endian) {
38444 var len = end - start;
38445 assert(len % 4 === 0);
38446 var res = new Array(len / 4);
38447 for (var i = 0, k = start; i < res.length; i++, k += 4) {
38448 var w;
38449 if (endian === 'big')
38450 w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
38451 else
38452 w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
38453 res[i] = w >>> 0;
38454 }
38455 return res;
38456}
38457utils.join32 = join32;
38458
38459function split32(msg, endian) {
38460 var res = new Array(msg.length * 4);
38461 for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
38462 var m = msg[i];
38463 if (endian === 'big') {
38464 res[k] = m >>> 24;
38465 res[k + 1] = (m >>> 16) & 0xff;
38466 res[k + 2] = (m >>> 8) & 0xff;
38467 res[k + 3] = m & 0xff;
38468 } else {
38469 res[k + 3] = m >>> 24;
38470 res[k + 2] = (m >>> 16) & 0xff;
38471 res[k + 1] = (m >>> 8) & 0xff;
38472 res[k] = m & 0xff;
38473 }
ebd8d4e8 38474 }
8b095871 38475 return res;
ebd8d4e8 38476}
8b095871 38477utils.split32 = split32;
ebd8d4e8 38478
8b095871
IC
38479function rotr32(w, b) {
38480 return (w >>> b) | (w << (32 - b));
38481}
38482utils.rotr32 = rotr32;
ebd8d4e8 38483
8b095871
IC
38484function rotl32(w, b) {
38485 return (w << b) | (w >>> (32 - b));
38486}
38487utils.rotl32 = rotl32;
ebd8d4e8 38488
8b095871
IC
38489function sum32(a, b) {
38490 return (a + b) >>> 0;
38491}
38492utils.sum32 = sum32;
ebd8d4e8 38493
8b095871
IC
38494function sum32_3(a, b, c) {
38495 return (a + b + c) >>> 0;
38496}
38497utils.sum32_3 = sum32_3;
ebd8d4e8 38498
8b095871
IC
38499function sum32_4(a, b, c, d) {
38500 return (a + b + c + d) >>> 0;
38501}
38502utils.sum32_4 = sum32_4;
ebd8d4e8 38503
8b095871
IC
38504function sum32_5(a, b, c, d, e) {
38505 return (a + b + c + d + e) >>> 0;
38506}
38507utils.sum32_5 = sum32_5;
ebd8d4e8 38508
8b095871
IC
38509function assert(cond, msg) {
38510 if (!cond)
38511 throw new Error(msg || 'Assertion failed');
38512}
38513utils.assert = assert;
ab78acc6 38514
8b095871 38515utils.inherits = inherits;
ab78acc6 38516
8b095871
IC
38517function sum64(buf, pos, ah, al) {
38518 var bh = buf[pos];
38519 var bl = buf[pos + 1];
ab78acc6 38520
8b095871
IC
38521 var lo = (al + bl) >>> 0;
38522 var hi = (lo < al ? 1 : 0) + ah + bh;
38523 buf[pos] = hi >>> 0;
38524 buf[pos + 1] = lo;
38525}
38526exports.sum64 = sum64;
ebd8d4e8 38527
8b095871
IC
38528function sum64_hi(ah, al, bh, bl) {
38529 var lo = (al + bl) >>> 0;
38530 var hi = (lo < al ? 1 : 0) + ah + bh;
38531 return hi >>> 0;
38532};
38533exports.sum64_hi = sum64_hi;
ebd8d4e8 38534
8b095871
IC
38535function sum64_lo(ah, al, bh, bl) {
38536 var lo = al + bl;
38537 return lo >>> 0;
38538};
38539exports.sum64_lo = sum64_lo;
38540
38541function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
38542 var carry = 0;
38543 var lo = al;
38544 lo = (lo + bl) >>> 0;
38545 carry += lo < al ? 1 : 0;
38546 lo = (lo + cl) >>> 0;
38547 carry += lo < cl ? 1 : 0;
38548 lo = (lo + dl) >>> 0;
38549 carry += lo < dl ? 1 : 0;
38550
38551 var hi = ah + bh + ch + dh + carry;
38552 return hi >>> 0;
38553};
38554exports.sum64_4_hi = sum64_4_hi;
ebd8d4e8 38555
8b095871
IC
38556function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
38557 var lo = al + bl + cl + dl;
38558 return lo >>> 0;
38559};
38560exports.sum64_4_lo = sum64_4_lo;
38561
38562function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
38563 var carry = 0;
38564 var lo = al;
38565 lo = (lo + bl) >>> 0;
38566 carry += lo < al ? 1 : 0;
38567 lo = (lo + cl) >>> 0;
38568 carry += lo < cl ? 1 : 0;
38569 lo = (lo + dl) >>> 0;
38570 carry += lo < dl ? 1 : 0;
38571 lo = (lo + el) >>> 0;
38572 carry += lo < el ? 1 : 0;
38573
38574 var hi = ah + bh + ch + dh + eh + carry;
38575 return hi >>> 0;
38576};
38577exports.sum64_5_hi = sum64_5_hi;
38578
38579function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
38580 var lo = al + bl + cl + dl + el;
38581
38582 return lo >>> 0;
38583};
38584exports.sum64_5_lo = sum64_5_lo;
38585
38586function rotr64_hi(ah, al, num) {
38587 var r = (al << (32 - num)) | (ah >>> num);
38588 return r >>> 0;
38589};
38590exports.rotr64_hi = rotr64_hi;
38591
38592function rotr64_lo(ah, al, num) {
38593 var r = (ah << (32 - num)) | (al >>> num);
38594 return r >>> 0;
38595};
38596exports.rotr64_lo = rotr64_lo;
38597
38598function shr64_hi(ah, al, num) {
38599 return ah >>> num;
38600};
38601exports.shr64_hi = shr64_hi;
38602
38603function shr64_lo(ah, al, num) {
38604 var r = (ah << (32 - num)) | (al >>> num);
38605 return r >>> 0;
38606};
38607exports.shr64_lo = shr64_lo;
38608
38609},{"inherits":63}],63:[function(require,module,exports){
38610arguments[4][9][0].apply(exports,arguments)
38611},{"dup":9}],64:[function(require,module,exports){
38612/**
38613 * Returns a `Boolean` on whether or not the a `String` starts with '0x'
38614 * @param {String} str the string input value
38615 * @return {Boolean} a boolean if it is or is not hex prefixed
38616 * @throws if the str input is not a string
38617 */
38618module.exports = function isHexPrefixed(str) {
38619 if (typeof str !== 'string') {
38620 throw new Error("[is-hex-prefixed] value must be type 'string', is currently type " + (typeof str) + ", while checking isHexPrefixed.");
38621 }
38622
38623 return str.slice(0, 2) === '0x';
ebd8d4e8
IC
38624}
38625
8b095871
IC
38626},{}],65:[function(require,module,exports){
38627'use strict'
38628module.exports = require('./lib/api')(require('./lib/keccak'))
38629
38630},{"./lib/api":66,"./lib/keccak":70}],66:[function(require,module,exports){
38631'use strict'
38632var createKeccak = require('./keccak')
38633var createShake = require('./shake')
38634
38635module.exports = function (KeccakState) {
38636 var Keccak = createKeccak(KeccakState)
38637 var Shake = createShake(KeccakState)
38638
38639 return function (algorithm, options) {
38640 var hash = typeof algorithm === 'string' ? algorithm.toLowerCase() : algorithm
38641 switch (hash) {
38642 case 'keccak224': return new Keccak(1152, 448, null, 224, options)
38643 case 'keccak256': return new Keccak(1088, 512, null, 256, options)
38644 case 'keccak384': return new Keccak(832, 768, null, 384, options)
38645 case 'keccak512': return new Keccak(576, 1024, null, 512, options)
38646
38647 case 'sha3-224': return new Keccak(1152, 448, 0x06, 224, options)
38648 case 'sha3-256': return new Keccak(1088, 512, 0x06, 256, options)
38649 case 'sha3-384': return new Keccak(832, 768, 0x06, 384, options)
38650 case 'sha3-512': return new Keccak(576, 1024, 0x06, 512, options)
38651
38652 case 'shake128': return new Shake(1344, 256, 0x1f, options)
38653 case 'shake256': return new Shake(1088, 512, 0x1f, options)
38654
38655 default: throw new Error('Invald algorithm: ' + algorithm)
38656 }
38657 }
38658}
38659
38660},{"./keccak":67,"./shake":68}],67:[function(require,module,exports){
ebd8d4e8 38661(function (Buffer){
8b095871
IC
38662'use strict'
38663var Transform = require('stream').Transform
38664var inherits = require('inherits')
38665
38666module.exports = function (KeccakState) {
38667 function Keccak (rate, capacity, delimitedSuffix, hashBitLength, options) {
38668 Transform.call(this, options)
38669
38670 this._rate = rate
38671 this._capacity = capacity
38672 this._delimitedSuffix = delimitedSuffix
38673 this._hashBitLength = hashBitLength
38674 this._options = options
38675
38676 this._state = new KeccakState()
38677 this._state.initialize(rate, capacity)
38678 this._finalized = false
38679 }
38680
38681 inherits(Keccak, Transform)
38682
38683 Keccak.prototype._transform = function (chunk, encoding, callback) {
38684 var error = null
38685 try {
38686 this.update(chunk, encoding)
38687 } catch (err) {
38688 error = err
38689 }
38690
38691 callback(error)
38692 }
38693
38694 Keccak.prototype._flush = function (callback) {
38695 var error = null
38696 try {
38697 this.push(this.digest())
38698 } catch (err) {
38699 error = err
38700 }
38701
38702 callback(error)
38703 }
38704
38705 Keccak.prototype.update = function (data, encoding) {
38706 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
38707 if (this._finalized) throw new Error('Digest already called')
38708 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
38709
38710 this._state.absorb(data)
38711
38712 return this
38713 }
38714
38715 Keccak.prototype.digest = function (encoding) {
38716 if (this._finalized) throw new Error('Digest already called')
38717 this._finalized = true
38718
38719 if (this._delimitedSuffix) this._state.absorbLastFewBits(this._delimitedSuffix)
38720 var digest = this._state.squeeze(this._hashBitLength / 8)
38721 if (encoding !== undefined) digest = digest.toString(encoding)
38722
38723 this._resetState()
38724
38725 return digest
38726 }
38727
38728 // remove result from memory
38729 Keccak.prototype._resetState = function () {
38730 this._state.initialize(this._rate, this._capacity)
38731 return this
38732 }
38733
38734 // because sometimes we need hash right now and little later
38735 Keccak.prototype._clone = function () {
38736 var clone = new Keccak(this._rate, this._capacity, this._delimitedSuffix, this._hashBitLength, this._options)
38737 this._state.copy(clone._state)
38738 clone._finalized = this._finalized
38739
38740 return clone
38741 }
38742
38743 return Keccak
38744}
38745
38746}).call(this,require("buffer").Buffer)
38747},{"buffer":5,"inherits":63,"stream":25}],68:[function(require,module,exports){
38748(function (Buffer){
38749'use strict'
38750var Transform = require('stream').Transform
38751var inherits = require('inherits')
38752
38753module.exports = function (KeccakState) {
38754 function Shake (rate, capacity, delimitedSuffix, options) {
38755 Transform.call(this, options)
38756
38757 this._rate = rate
38758 this._capacity = capacity
38759 this._delimitedSuffix = delimitedSuffix
38760 this._options = options
38761
38762 this._state = new KeccakState()
38763 this._state.initialize(rate, capacity)
38764 this._finalized = false
38765 }
38766
38767 inherits(Shake, Transform)
38768
38769 Shake.prototype._transform = function (chunk, encoding, callback) {
38770 var error = null
38771 try {
38772 this.update(chunk, encoding)
38773 } catch (err) {
38774 error = err
38775 }
ebd8d4e8 38776
8b095871
IC
38777 callback(error)
38778 }
ebd8d4e8 38779
8b095871 38780 Shake.prototype._flush = function () {}
ebd8d4e8 38781
8b095871
IC
38782 Shake.prototype._read = function (size) {
38783 this.push(this.squeeze(size))
38784 }
ebd8d4e8 38785
8b095871
IC
38786 Shake.prototype.update = function (data, encoding) {
38787 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
38788 if (this._finalized) throw new Error('Squeeze already called')
38789 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
38790
38791 this._state.absorb(data)
38792
38793 return this
38794 }
38795
38796 Shake.prototype.squeeze = function (dataByteLength, encoding) {
38797 if (!this._finalized) {
38798 this._finalized = true
38799 this._state.absorbLastFewBits(this._delimitedSuffix)
ebd8d4e8 38800 }
ebd8d4e8 38801
8b095871
IC
38802 var data = this._state.squeeze(dataByteLength)
38803 if (encoding !== undefined) data = data.toString(encoding)
ebd8d4e8 38804
8b095871
IC
38805 return data
38806 }
ebd8d4e8 38807
8b095871
IC
38808 Shake.prototype._resetState = function () {
38809 this._state.initialize(this._rate, this._capacity)
38810 return this
38811 }
ebd8d4e8 38812
8b095871
IC
38813 Shake.prototype._clone = function () {
38814 var clone = new Shake(this._rate, this._capacity, this._delimitedSuffix, this._options)
38815 this._state.copy(clone._state)
38816 clone._finalized = this._finalized
ab78acc6 38817
8b095871
IC
38818 return clone
38819 }
ebd8d4e8 38820
8b095871
IC
38821 return Shake
38822}
ab78acc6 38823
8b095871
IC
38824}).call(this,require("buffer").Buffer)
38825},{"buffer":5,"inherits":63,"stream":25}],69:[function(require,module,exports){
38826'use strict'
38827var P1600_ROUND_CONSTANTS = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649, 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0, 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771, 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648, 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648]
38828
38829exports.p1600 = function (s) {
38830 for (var round = 0; round < 24; ++round) {
38831 // theta
38832 var lo0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]
38833 var hi0 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]
38834 var lo1 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]
38835 var hi1 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]
38836 var lo2 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]
38837 var hi2 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]
38838 var lo3 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]
38839 var hi3 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]
38840 var lo4 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]
38841 var hi4 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]
38842
38843 var lo = lo4 ^ (lo1 << 1 | hi1 >>> 31)
38844 var hi = hi4 ^ (hi1 << 1 | lo1 >>> 31)
38845 var t1slo0 = s[0] ^ lo
38846 var t1shi0 = s[1] ^ hi
38847 var t1slo5 = s[10] ^ lo
38848 var t1shi5 = s[11] ^ hi
38849 var t1slo10 = s[20] ^ lo
38850 var t1shi10 = s[21] ^ hi
38851 var t1slo15 = s[30] ^ lo
38852 var t1shi15 = s[31] ^ hi
38853 var t1slo20 = s[40] ^ lo
38854 var t1shi20 = s[41] ^ hi
38855 lo = lo0 ^ (lo2 << 1 | hi2 >>> 31)
38856 hi = hi0 ^ (hi2 << 1 | lo2 >>> 31)
38857 var t1slo1 = s[2] ^ lo
38858 var t1shi1 = s[3] ^ hi
38859 var t1slo6 = s[12] ^ lo
38860 var t1shi6 = s[13] ^ hi
38861 var t1slo11 = s[22] ^ lo
38862 var t1shi11 = s[23] ^ hi
38863 var t1slo16 = s[32] ^ lo
38864 var t1shi16 = s[33] ^ hi
38865 var t1slo21 = s[42] ^ lo
38866 var t1shi21 = s[43] ^ hi
38867 lo = lo1 ^ (lo3 << 1 | hi3 >>> 31)
38868 hi = hi1 ^ (hi3 << 1 | lo3 >>> 31)
38869 var t1slo2 = s[4] ^ lo
38870 var t1shi2 = s[5] ^ hi
38871 var t1slo7 = s[14] ^ lo
38872 var t1shi7 = s[15] ^ hi
38873 var t1slo12 = s[24] ^ lo
38874 var t1shi12 = s[25] ^ hi
38875 var t1slo17 = s[34] ^ lo
38876 var t1shi17 = s[35] ^ hi
38877 var t1slo22 = s[44] ^ lo
38878 var t1shi22 = s[45] ^ hi
38879 lo = lo2 ^ (lo4 << 1 | hi4 >>> 31)
38880 hi = hi2 ^ (hi4 << 1 | lo4 >>> 31)
38881 var t1slo3 = s[6] ^ lo
38882 var t1shi3 = s[7] ^ hi
38883 var t1slo8 = s[16] ^ lo
38884 var t1shi8 = s[17] ^ hi
38885 var t1slo13 = s[26] ^ lo
38886 var t1shi13 = s[27] ^ hi
38887 var t1slo18 = s[36] ^ lo
38888 var t1shi18 = s[37] ^ hi
38889 var t1slo23 = s[46] ^ lo
38890 var t1shi23 = s[47] ^ hi
38891 lo = lo3 ^ (lo0 << 1 | hi0 >>> 31)
38892 hi = hi3 ^ (hi0 << 1 | lo0 >>> 31)
38893 var t1slo4 = s[8] ^ lo
38894 var t1shi4 = s[9] ^ hi
38895 var t1slo9 = s[18] ^ lo
38896 var t1shi9 = s[19] ^ hi
38897 var t1slo14 = s[28] ^ lo
38898 var t1shi14 = s[29] ^ hi
38899 var t1slo19 = s[38] ^ lo
38900 var t1shi19 = s[39] ^ hi
38901 var t1slo24 = s[48] ^ lo
38902 var t1shi24 = s[49] ^ hi
38903
38904 // rho & pi
38905 var t2slo0 = t1slo0
38906 var t2shi0 = t1shi0
38907 var t2slo16 = (t1shi5 << 4 | t1slo5 >>> 28)
38908 var t2shi16 = (t1slo5 << 4 | t1shi5 >>> 28)
38909 var t2slo7 = (t1slo10 << 3 | t1shi10 >>> 29)
38910 var t2shi7 = (t1shi10 << 3 | t1slo10 >>> 29)
38911 var t2slo23 = (t1shi15 << 9 | t1slo15 >>> 23)
38912 var t2shi23 = (t1slo15 << 9 | t1shi15 >>> 23)
38913 var t2slo14 = (t1slo20 << 18 | t1shi20 >>> 14)
38914 var t2shi14 = (t1shi20 << 18 | t1slo20 >>> 14)
38915 var t2slo10 = (t1slo1 << 1 | t1shi1 >>> 31)
38916 var t2shi10 = (t1shi1 << 1 | t1slo1 >>> 31)
38917 var t2slo1 = (t1shi6 << 12 | t1slo6 >>> 20)
38918 var t2shi1 = (t1slo6 << 12 | t1shi6 >>> 20)
38919 var t2slo17 = (t1slo11 << 10 | t1shi11 >>> 22)
38920 var t2shi17 = (t1shi11 << 10 | t1slo11 >>> 22)
38921 var t2slo8 = (t1shi16 << 13 | t1slo16 >>> 19)
38922 var t2shi8 = (t1slo16 << 13 | t1shi16 >>> 19)
38923 var t2slo24 = (t1slo21 << 2 | t1shi21 >>> 30)
38924 var t2shi24 = (t1shi21 << 2 | t1slo21 >>> 30)
38925 var t2slo20 = (t1shi2 << 30 | t1slo2 >>> 2)
38926 var t2shi20 = (t1slo2 << 30 | t1shi2 >>> 2)
38927 var t2slo11 = (t1slo7 << 6 | t1shi7 >>> 26)
38928 var t2shi11 = (t1shi7 << 6 | t1slo7 >>> 26)
38929 var t2slo2 = (t1shi12 << 11 | t1slo12 >>> 21)
38930 var t2shi2 = (t1slo12 << 11 | t1shi12 >>> 21)
38931 var t2slo18 = (t1slo17 << 15 | t1shi17 >>> 17)
38932 var t2shi18 = (t1shi17 << 15 | t1slo17 >>> 17)
38933 var t2slo9 = (t1shi22 << 29 | t1slo22 >>> 3)
38934 var t2shi9 = (t1slo22 << 29 | t1shi22 >>> 3)
38935 var t2slo5 = (t1slo3 << 28 | t1shi3 >>> 4)
38936 var t2shi5 = (t1shi3 << 28 | t1slo3 >>> 4)
38937 var t2slo21 = (t1shi8 << 23 | t1slo8 >>> 9)
38938 var t2shi21 = (t1slo8 << 23 | t1shi8 >>> 9)
38939 var t2slo12 = (t1slo13 << 25 | t1shi13 >>> 7)
38940 var t2shi12 = (t1shi13 << 25 | t1slo13 >>> 7)
38941 var t2slo3 = (t1slo18 << 21 | t1shi18 >>> 11)
38942 var t2shi3 = (t1shi18 << 21 | t1slo18 >>> 11)
38943 var t2slo19 = (t1shi23 << 24 | t1slo23 >>> 8)
38944 var t2shi19 = (t1slo23 << 24 | t1shi23 >>> 8)
38945 var t2slo15 = (t1slo4 << 27 | t1shi4 >>> 5)
38946 var t2shi15 = (t1shi4 << 27 | t1slo4 >>> 5)
38947 var t2slo6 = (t1slo9 << 20 | t1shi9 >>> 12)
38948 var t2shi6 = (t1shi9 << 20 | t1slo9 >>> 12)
38949 var t2slo22 = (t1shi14 << 7 | t1slo14 >>> 25)
38950 var t2shi22 = (t1slo14 << 7 | t1shi14 >>> 25)
38951 var t2slo13 = (t1slo19 << 8 | t1shi19 >>> 24)
38952 var t2shi13 = (t1shi19 << 8 | t1slo19 >>> 24)
38953 var t2slo4 = (t1slo24 << 14 | t1shi24 >>> 18)
38954 var t2shi4 = (t1shi24 << 14 | t1slo24 >>> 18)
38955
38956 // chi
38957 s[0] = t2slo0 ^ (~t2slo1 & t2slo2)
38958 s[1] = t2shi0 ^ (~t2shi1 & t2shi2)
38959 s[10] = t2slo5 ^ (~t2slo6 & t2slo7)
38960 s[11] = t2shi5 ^ (~t2shi6 & t2shi7)
38961 s[20] = t2slo10 ^ (~t2slo11 & t2slo12)
38962 s[21] = t2shi10 ^ (~t2shi11 & t2shi12)
38963 s[30] = t2slo15 ^ (~t2slo16 & t2slo17)
38964 s[31] = t2shi15 ^ (~t2shi16 & t2shi17)
38965 s[40] = t2slo20 ^ (~t2slo21 & t2slo22)
38966 s[41] = t2shi20 ^ (~t2shi21 & t2shi22)
38967 s[2] = t2slo1 ^ (~t2slo2 & t2slo3)
38968 s[3] = t2shi1 ^ (~t2shi2 & t2shi3)
38969 s[12] = t2slo6 ^ (~t2slo7 & t2slo8)
38970 s[13] = t2shi6 ^ (~t2shi7 & t2shi8)
38971 s[22] = t2slo11 ^ (~t2slo12 & t2slo13)
38972 s[23] = t2shi11 ^ (~t2shi12 & t2shi13)
38973 s[32] = t2slo16 ^ (~t2slo17 & t2slo18)
38974 s[33] = t2shi16 ^ (~t2shi17 & t2shi18)
38975 s[42] = t2slo21 ^ (~t2slo22 & t2slo23)
38976 s[43] = t2shi21 ^ (~t2shi22 & t2shi23)
38977 s[4] = t2slo2 ^ (~t2slo3 & t2slo4)
38978 s[5] = t2shi2 ^ (~t2shi3 & t2shi4)
38979 s[14] = t2slo7 ^ (~t2slo8 & t2slo9)
38980 s[15] = t2shi7 ^ (~t2shi8 & t2shi9)
38981 s[24] = t2slo12 ^ (~t2slo13 & t2slo14)
38982 s[25] = t2shi12 ^ (~t2shi13 & t2shi14)
38983 s[34] = t2slo17 ^ (~t2slo18 & t2slo19)
38984 s[35] = t2shi17 ^ (~t2shi18 & t2shi19)
38985 s[44] = t2slo22 ^ (~t2slo23 & t2slo24)
38986 s[45] = t2shi22 ^ (~t2shi23 & t2shi24)
38987 s[6] = t2slo3 ^ (~t2slo4 & t2slo0)
38988 s[7] = t2shi3 ^ (~t2shi4 & t2shi0)
38989 s[16] = t2slo8 ^ (~t2slo9 & t2slo5)
38990 s[17] = t2shi8 ^ (~t2shi9 & t2shi5)
38991 s[26] = t2slo13 ^ (~t2slo14 & t2slo10)
38992 s[27] = t2shi13 ^ (~t2shi14 & t2shi10)
38993 s[36] = t2slo18 ^ (~t2slo19 & t2slo15)
38994 s[37] = t2shi18 ^ (~t2shi19 & t2shi15)
38995 s[46] = t2slo23 ^ (~t2slo24 & t2slo20)
38996 s[47] = t2shi23 ^ (~t2shi24 & t2shi20)
38997 s[8] = t2slo4 ^ (~t2slo0 & t2slo1)
38998 s[9] = t2shi4 ^ (~t2shi0 & t2shi1)
38999 s[18] = t2slo9 ^ (~t2slo5 & t2slo6)
39000 s[19] = t2shi9 ^ (~t2shi5 & t2shi6)
39001 s[28] = t2slo14 ^ (~t2slo10 & t2slo11)
39002 s[29] = t2shi14 ^ (~t2shi10 & t2shi11)
39003 s[38] = t2slo19 ^ (~t2slo15 & t2slo16)
39004 s[39] = t2shi19 ^ (~t2shi15 & t2shi16)
39005 s[48] = t2slo24 ^ (~t2slo20 & t2slo21)
39006 s[49] = t2shi24 ^ (~t2shi20 & t2shi21)
39007
39008 // iota
39009 s[0] ^= P1600_ROUND_CONSTANTS[round * 2]
39010 s[1] ^= P1600_ROUND_CONSTANTS[round * 2 + 1]
39011 }
39012}
39013
39014},{}],70:[function(require,module,exports){
39015(function (Buffer){
39016'use strict'
39017var keccakState = require('./keccak-state-unroll')
ebd8d4e8 39018
8b095871
IC
39019function Keccak () {
39020 // much faster than `new Array(50)`
39021 this.state = [
39022 0, 0, 0, 0, 0,
39023 0, 0, 0, 0, 0,
39024 0, 0, 0, 0, 0,
39025 0, 0, 0, 0, 0,
39026 0, 0, 0, 0, 0
39027 ]
ebd8d4e8 39028
8b095871
IC
39029 this.blockSize = null
39030 this.count = 0
39031 this.squeezing = false
39032}
ebd8d4e8 39033
8b095871
IC
39034Keccak.prototype.initialize = function (rate, capacity) {
39035 for (var i = 0; i < 50; ++i) this.state[i] = 0
39036 this.blockSize = rate / 8
39037 this.count = 0
39038 this.squeezing = false
39039}
39040
39041Keccak.prototype.absorb = function (data) {
39042 for (var i = 0; i < data.length; ++i) {
39043 this.state[~~(this.count / 4)] ^= data[i] << (8 * (this.count % 4))
39044 this.count += 1
39045 if (this.count === this.blockSize) {
39046 keccakState.p1600(this.state)
39047 this.count = 0
ebd8d4e8
IC
39048 }
39049 }
8b095871 39050}
ebd8d4e8 39051
8b095871
IC
39052Keccak.prototype.absorbLastFewBits = function (bits) {
39053 this.state[~~(this.count / 4)] ^= bits << (8 * (this.count % 4))
39054 if ((bits & 0x80) !== 0 && this.count === (this.blockSize - 1)) keccakState.p1600(this.state)
39055 this.state[~~((this.blockSize - 1) / 4)] ^= 0x80 << (8 * ((this.blockSize - 1) % 4))
39056 keccakState.p1600(this.state)
39057 this.count = 0
39058 this.squeezing = true
ebd8d4e8
IC
39059}
39060
8b095871
IC
39061Keccak.prototype.squeeze = function (length) {
39062 if (!this.squeezing) this.absorbLastFewBits(0x01)
ebd8d4e8 39063
8b095871
IC
39064 var output = Buffer.allocUnsafe(length)
39065 for (var i = 0; i < length; ++i) {
39066 output[i] = (this.state[~~(this.count / 4)] >>> (8 * (this.count % 4))) & 0xff
39067 this.count += 1
39068 if (this.count === this.blockSize) {
39069 keccakState.p1600(this.state)
39070 this.count = 0
ebd8d4e8 39071 }
8b095871 39072 }
ebd8d4e8 39073
8b095871
IC
39074 return output
39075}
ebd8d4e8 39076
8b095871
IC
39077Keccak.prototype.copy = function (dest) {
39078 for (var i = 0; i < 50; ++i) dest.state[i] = this.state[i]
39079 dest.blockSize = this.blockSize
39080 dest.count = this.count
39081 dest.squeezing = this.squeezing
39082}
ebd8d4e8 39083
8b095871 39084module.exports = Keccak
ebd8d4e8 39085
8b095871
IC
39086}).call(this,require("buffer").Buffer)
39087},{"./keccak-state-unroll":69,"buffer":5}],71:[function(require,module,exports){
39088(function (Buffer){
39089/*
39090CryptoJS v3.1.2
39091code.google.com/p/crypto-js
39092(c) 2009-2013 by Jeff Mott. All rights reserved.
39093code.google.com/p/crypto-js/wiki/License
39094*/
39095/** @preserve
39096(c) 2012 by Cédric Mesnil. All rights reserved.
ebd8d4e8 39097
8b095871 39098Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
ebd8d4e8 39099
8b095871
IC
39100 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
39101 - 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.
39102
39103THIS 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.
39104*/
39105
39106// constants table
39107var zl = [
39108 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
39109 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
39110 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
39111 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
39112 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
39113]
39114
39115var zr = [
39116 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
39117 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
39118 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
39119 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
39120 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
39121]
39122
39123var sl = [
39124 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
39125 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
39126 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
39127 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
39128 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
39129]
39130
39131var sr = [
39132 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
39133 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
39134 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
39135 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
39136 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
39137]
39138
39139var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
39140var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
39141
39142function bytesToWords (bytes) {
39143 var words = []
39144 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
39145 words[b >>> 5] |= bytes[i] << (24 - b % 32)
39146 }
39147 return words
ebd8d4e8
IC
39148}
39149
8b095871
IC
39150function wordsToBytes (words) {
39151 var bytes = []
39152 for (var b = 0; b < words.length * 32; b += 8) {
39153 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
39154 }
39155 return bytes
ebd8d4e8
IC
39156}
39157
8b095871
IC
39158function processBlock (H, M, offset) {
39159 // swap endian
39160 for (var i = 0; i < 16; i++) {
39161 var offset_i = offset + i
39162 var M_offset_i = M[offset_i]
ebd8d4e8 39163
8b095871
IC
39164 // Swap
39165 M[offset_i] = (
39166 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
39167 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
39168 )
39169 }
ebd8d4e8 39170
8b095871
IC
39171 // Working variables
39172 var al, bl, cl, dl, el
39173 var ar, br, cr, dr, er
39174
39175 ar = al = H[0]
39176 br = bl = H[1]
39177 cr = cl = H[2]
39178 dr = dl = H[3]
39179 er = el = H[4]
39180
39181 // computation
39182 var t
39183 for (i = 0; i < 80; i += 1) {
39184 t = (al + M[offset + zl[i]]) | 0
39185 if (i < 16) {
39186 t += f1(bl, cl, dl) + hl[0]
39187 } else if (i < 32) {
39188 t += f2(bl, cl, dl) + hl[1]
39189 } else if (i < 48) {
39190 t += f3(bl, cl, dl) + hl[2]
39191 } else if (i < 64) {
39192 t += f4(bl, cl, dl) + hl[3]
39193 } else {// if (i<80) {
39194 t += f5(bl, cl, dl) + hl[4]
39195 }
39196 t = t | 0
39197 t = rotl(t, sl[i])
39198 t = (t + el) | 0
39199 al = el
39200 el = dl
39201 dl = rotl(cl, 10)
39202 cl = bl
39203 bl = t
39204
39205 t = (ar + M[offset + zr[i]]) | 0
39206 if (i < 16) {
39207 t += f5(br, cr, dr) + hr[0]
39208 } else if (i < 32) {
39209 t += f4(br, cr, dr) + hr[1]
39210 } else if (i < 48) {
39211 t += f3(br, cr, dr) + hr[2]
39212 } else if (i < 64) {
39213 t += f2(br, cr, dr) + hr[3]
39214 } else {// if (i<80) {
39215 t += f1(br, cr, dr) + hr[4]
39216 }
39217
39218 t = t | 0
39219 t = rotl(t, sr[i])
39220 t = (t + er) | 0
39221 ar = er
39222 er = dr
39223 dr = rotl(cr, 10)
39224 cr = br
39225 br = t
39226 }
39227
39228 // intermediate hash value
39229 t = (H[1] + cl + dr) | 0
39230 H[1] = (H[2] + dl + er) | 0
39231 H[2] = (H[3] + el + ar) | 0
39232 H[3] = (H[4] + al + br) | 0
39233 H[4] = (H[0] + bl + cr) | 0
39234 H[0] = t
ebd8d4e8
IC
39235}
39236
8b095871
IC
39237function f1 (x, y, z) {
39238 return ((x) ^ (y) ^ (z))
ebd8d4e8
IC
39239}
39240
8b095871
IC
39241function f2 (x, y, z) {
39242 return (((x) & (y)) | ((~x) & (z)))
39243}
ebd8d4e8 39244
8b095871
IC
39245function f3 (x, y, z) {
39246 return (((x) | (~(y))) ^ (z))
ebd8d4e8
IC
39247}
39248
8b095871
IC
39249function f4 (x, y, z) {
39250 return (((x) & (z)) | ((y) & (~(z))))
ebd8d4e8
IC
39251}
39252
8b095871
IC
39253function f5 (x, y, z) {
39254 return ((x) ^ ((y) | (~(z))))
ebd8d4e8
IC
39255}
39256
8b095871
IC
39257function rotl (x, n) {
39258 return (x << n) | (x >>> (32 - n))
39259}
ebd8d4e8 39260
8b095871
IC
39261function ripemd160 (message) {
39262 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
ebd8d4e8 39263
8b095871
IC
39264 if (typeof message === 'string') {
39265 message = new Buffer(message, 'utf8')
39266 }
ebd8d4e8 39267
8b095871 39268 var m = bytesToWords(message)
ebd8d4e8 39269
8b095871
IC
39270 var nBitsLeft = message.length * 8
39271 var nBitsTotal = message.length * 8
ebd8d4e8 39272
8b095871
IC
39273 // Add padding
39274 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
39275 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
39276 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
39277 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
39278 )
ebd8d4e8 39279
8b095871
IC
39280 for (var i = 0; i < m.length; i += 16) {
39281 processBlock(H, m, i)
ebd8d4e8
IC
39282 }
39283
8b095871
IC
39284 // swap endian
39285 for (i = 0; i < 5; i++) {
39286 // shortcut
39287 var H_i = H[i]
ebd8d4e8 39288
8b095871
IC
39289 // Swap
39290 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
39291 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
ebd8d4e8
IC
39292 }
39293
8b095871
IC
39294 var digestbytes = wordsToBytes(H)
39295 return new Buffer(digestbytes)
ebd8d4e8
IC
39296}
39297
8b095871 39298module.exports = ripemd160
ebd8d4e8 39299
8b095871
IC
39300}).call(this,require("buffer").Buffer)
39301},{"buffer":5}],72:[function(require,module,exports){
39302(function (Buffer){
39303const assert = require('assert')
39304/**
39305 * RLP Encoding based on: https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP
39306 * This function takes in a data, convert it to buffer if not, and a length for recursion
39307 *
39308 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
39309 * @returns {Buffer} - returns buffer of encoded data
39310 **/
39311exports.encode = function (input) {
39312 if (input instanceof Array) {
39313 var output = []
39314 for (var i = 0; i < input.length; i++) {
39315 output.push(exports.encode(input[i]))
39316 }
39317 var buf = Buffer.concat(output)
39318 return Buffer.concat([encodeLength(buf.length, 192), buf])
39319 } else {
39320 input = toBuffer(input)
39321 if (input.length === 1 && input[0] < 128) {
39322 return input
39323 } else {
39324 return Buffer.concat([encodeLength(input.length, 128), input])
39325 }
39326 }
ebd8d4e8
IC
39327}
39328
8b095871
IC
39329function safeParseInt (v, base) {
39330 if (v.slice(0, 2) === '00') {
39331 throw (new Error('invalid RLP: extra zeros'))
39332 }
ebd8d4e8 39333
8b095871 39334 return parseInt(v, base)
ebd8d4e8
IC
39335}
39336
8b095871
IC
39337function encodeLength (len, offset) {
39338 if (len < 56) {
39339 return new Buffer([len + offset])
39340 } else {
39341 var hexLength = intToHex(len)
39342 var lLength = hexLength.length / 2
39343 var firstByte = intToHex(offset + 55 + lLength)
39344 return new Buffer(firstByte + hexLength, 'hex')
39345 }
39346}
ebd8d4e8 39347
8b095871
IC
39348/**
39349 * RLP Decoding based on: {@link https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP|RLP}
39350 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
39351 * @returns {Array} - returns decode Array of Buffers containg the original message
39352 **/
39353exports.decode = function (input, stream) {
39354 if (!input || input.length === 0) {
39355 return new Buffer([])
39356 }
ebd8d4e8 39357
8b095871
IC
39358 input = toBuffer(input)
39359 var decoded = _decode(input)
ab78acc6 39360
8b095871
IC
39361 if (stream) {
39362 return decoded
39363 }
ebd8d4e8 39364
8b095871
IC
39365 assert.equal(decoded.remainder.length, 0, 'invalid remainder')
39366 return decoded.data
ebd8d4e8
IC
39367}
39368
8b095871
IC
39369exports.getLength = function (input) {
39370 if (!input || input.length === 0) {
39371 return new Buffer([])
ab78acc6
IC
39372 }
39373
8b095871
IC
39374 input = toBuffer(input)
39375 var firstByte = input[0]
39376 if (firstByte <= 0x7f) {
39377 return input.length
39378 } else if (firstByte <= 0xb7) {
39379 return firstByte - 0x7f
39380 } else if (firstByte <= 0xbf) {
39381 return firstByte - 0xb6
39382 } else if (firstByte <= 0xf7) {
39383 // a list between 0-55 bytes long
39384 return firstByte - 0xbf
39385 } else {
39386 // a list over 55 bytes long
39387 var llength = firstByte - 0xf6
39388 var length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
39389 return llength + length
39390 }
ebd8d4e8
IC
39391}
39392
8b095871
IC
39393function _decode (input) {
39394 var length, llength, data, innerRemainder, d
39395 var decoded = []
39396 var firstByte = input[0]
ebd8d4e8 39397
8b095871
IC
39398 if (firstByte <= 0x7f) {
39399 // a single byte whose value is in the [0x00, 0x7f] range, that byte is its own RLP encoding.
39400 return {
39401 data: input.slice(0, 1),
39402 remainder: input.slice(1)
39403 }
39404 } else if (firstByte <= 0xb7) {
39405 // string is 0-55 bytes long. A single byte with value 0x80 plus the length of the string followed by the string
39406 // The range of the first byte is [0x80, 0xb7]
39407 length = firstByte - 0x7f
ebd8d4e8 39408
8b095871
IC
39409 // set 0x80 null to 0
39410 if (firstByte === 0x80) {
39411 data = new Buffer([])
39412 } else {
39413 data = input.slice(1, length)
39414 }
ebd8d4e8 39415
8b095871
IC
39416 if (length === 2 && data[0] < 0x80) {
39417 throw new Error('invalid rlp encoding: byte must be less 0x80')
39418 }
ebd8d4e8 39419
8b095871
IC
39420 return {
39421 data: data,
39422 remainder: input.slice(length)
39423 }
39424 } else if (firstByte <= 0xbf) {
39425 llength = firstByte - 0xb6
39426 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
39427 data = input.slice(llength, length + llength)
39428 if (data.length < length) {
39429 throw (new Error('invalid RLP'))
39430 }
ebd8d4e8 39431
8b095871
IC
39432 return {
39433 data: data,
39434 remainder: input.slice(length + llength)
39435 }
39436 } else if (firstByte <= 0xf7) {
39437 // a list between 0-55 bytes long
39438 length = firstByte - 0xbf
39439 innerRemainder = input.slice(1, length)
39440 while (innerRemainder.length) {
39441 d = _decode(innerRemainder)
39442 decoded.push(d.data)
39443 innerRemainder = d.remainder
39444 }
ebd8d4e8 39445
8b095871
IC
39446 return {
39447 data: decoded,
39448 remainder: input.slice(length)
39449 }
39450 } else {
39451 // a list over 55 bytes long
39452 llength = firstByte - 0xf6
39453 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
39454 var totalLength = llength + length
39455 if (totalLength > input.length) {
39456 throw new Error('invalid rlp: total length is larger than the data')
39457 }
ab78acc6 39458
8b095871
IC
39459 innerRemainder = input.slice(llength, totalLength)
39460 if (innerRemainder.length === 0) {
39461 throw new Error('invalid rlp, List has a invalid length')
39462 }
ab78acc6 39463
8b095871
IC
39464 while (innerRemainder.length) {
39465 d = _decode(innerRemainder)
39466 decoded.push(d.data)
39467 innerRemainder = d.remainder
39468 }
39469 return {
39470 data: decoded,
39471 remainder: input.slice(totalLength)
39472 }
ab78acc6 39473 }
8b095871 39474}
ab78acc6 39475
8b095871
IC
39476function isHexPrefixed (str) {
39477 return str.slice(0, 2) === '0x'
ab78acc6
IC
39478}
39479
8b095871
IC
39480// Removes 0x from a given String
39481function stripHexPrefix (str) {
39482 if (typeof str !== 'string') {
39483 return str
39484 }
39485 return isHexPrefixed(str) ? str.slice(2) : str
39486}
ab78acc6 39487
8b095871
IC
39488function intToHex (i) {
39489 var hex = i.toString(16)
39490 if (hex.length % 2) {
39491 hex = '0' + hex
ab78acc6
IC
39492 }
39493
8b095871 39494 return hex
ebd8d4e8
IC
39495}
39496
8b095871
IC
39497function padToEven (a) {
39498 if (a.length % 2) a = '0' + a
39499 return a
ebd8d4e8
IC
39500}
39501
8b095871
IC
39502function intToBuffer (i) {
39503 var hex = intToHex(i)
39504 return new Buffer(hex, 'hex')
ebd8d4e8
IC
39505}
39506
8b095871
IC
39507function toBuffer (v) {
39508 if (!Buffer.isBuffer(v)) {
39509 if (typeof v === 'string') {
39510 if (isHexPrefixed(v)) {
39511 v = new Buffer(padToEven(stripHexPrefix(v)), 'hex')
39512 } else {
39513 v = new Buffer(v)
39514 }
39515 } else if (typeof v === 'number') {
39516 if (!v) {
39517 v = new Buffer([])
39518 } else {
39519 v = intToBuffer(v)
39520 }
39521 } else if (v === null || v === undefined) {
39522 v = new Buffer([])
39523 } else if (v.toArray) {
39524 // converts a BN to a Buffer
39525 v = new Buffer(v.toArray())
39526 } else {
39527 throw new Error('invalid type')
39528 }
39529 }
39530 return v
ebd8d4e8
IC
39531}
39532
8b095871
IC
39533}).call(this,require("buffer").Buffer)
39534},{"assert":1,"buffer":5}],73:[function(require,module,exports){
39535'use strict'
39536module.exports = require('./lib')(require('./lib/elliptic'))
ebd8d4e8 39537
8b095871
IC
39538},{"./lib":77,"./lib/elliptic":76}],74:[function(require,module,exports){
39539(function (Buffer){
39540'use strict'
39541var toString = Object.prototype.toString
ebd8d4e8 39542
8b095871
IC
39543// TypeError
39544exports.isArray = function (value, message) {
39545 if (!Array.isArray(value)) throw TypeError(message)
ebd8d4e8
IC
39546}
39547
8b095871
IC
39548exports.isBoolean = function (value, message) {
39549 if (toString.call(value) !== '[object Boolean]') throw TypeError(message)
39550}
ebd8d4e8 39551
8b095871
IC
39552exports.isBuffer = function (value, message) {
39553 if (!Buffer.isBuffer(value)) throw TypeError(message)
ebd8d4e8
IC
39554}
39555
8b095871
IC
39556exports.isFunction = function (value, message) {
39557 if (toString.call(value) !== '[object Function]') throw TypeError(message)
ebd8d4e8
IC
39558}
39559
8b095871
IC
39560exports.isNumber = function (value, message) {
39561 if (toString.call(value) !== '[object Number]') throw TypeError(message)
39562}
ab78acc6 39563
8b095871
IC
39564exports.isObject = function (value, message) {
39565 if (toString.call(value) !== '[object Object]') throw TypeError(message)
39566}
ebd8d4e8 39567
8b095871
IC
39568// RangeError
39569exports.isBufferLength = function (buffer, length, message) {
39570 if (buffer.length !== length) throw RangeError(message)
39571}
ebd8d4e8 39572
8b095871
IC
39573exports.isBufferLength2 = function (buffer, length1, length2, message) {
39574 if (buffer.length !== length1 && buffer.length !== length2) throw RangeError(message)
ab78acc6
IC
39575}
39576
8b095871
IC
39577exports.isLengthGTZero = function (value, message) {
39578 if (value.length === 0) throw RangeError(message)
ebd8d4e8
IC
39579}
39580
8b095871
IC
39581exports.isNumberInInterval = function (number, x, y, message) {
39582 if (number <= x || number >= y) throw RangeError(message)
ebd8d4e8
IC
39583}
39584
8b095871
IC
39585}).call(this,{"isBuffer":require("../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
39586},{"../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js":10}],75:[function(require,module,exports){
ebd8d4e8 39587(function (Buffer){
8b095871
IC
39588'use strict'
39589var bip66 = require('bip66')
39590
39591var EC_PRIVKEY_EXPORT_DER_COMPRESSED = new Buffer([
39592 // begin
39593 0x30, 0x81, 0xd3, 0x02, 0x01, 0x01, 0x04, 0x20,
39594 // private key
39595 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39596 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39597 // middle
39598 0xa0, 0x81, 0x85, 0x30, 0x81, 0x82, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
39599 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
39600 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
39601 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
39602 0x21, 0x02, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
39603 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
39604 0x17, 0x98, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
39605 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
39606 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x24, 0x03, 0x22, 0x00,
39607 // public key
39608 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39609 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39610 0x00
39611])
39612
39613var EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED = new Buffer([
39614 // begin
39615 0x30, 0x82, 0x01, 0x13, 0x02, 0x01, 0x01, 0x04, 0x20,
39616 // private key
39617 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39618 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39619 // middle
39620 0xa0, 0x81, 0xa5, 0x30, 0x81, 0xa2, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
39621 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
39622 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
39623 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
39624 0x41, 0x04, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
39625 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
39626 0x17, 0x98, 0x48, 0x3a, 0xda, 0x77, 0x26, 0xa3, 0xc4, 0x65, 0x5d, 0xa4, 0xfb, 0xfc, 0x0E, 0x11,
39627 0x08, 0xa8, 0xfd, 0x17, 0xb4, 0x48, 0xa6, 0x85, 0x54, 0x19, 0x9c, 0x47, 0xd0, 0x8f, 0xfb, 0x10,
39628 0xd4, 0xb8, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
39629 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
39630 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x44, 0x03, 0x42, 0x00,
39631 // public key
39632 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39633 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39634 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39635 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39636 0x00
39637])
39638
39639var ZERO_BUFFER_32 = new Buffer([
39640 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39641 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
39642])
39643
39644exports.privateKeyExport = function (privateKey, publicKey, compressed) {
39645 var result = new Buffer(compressed ? EC_PRIVKEY_EXPORT_DER_COMPRESSED : EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED)
39646 privateKey.copy(result, compressed ? 8 : 9)
39647 publicKey.copy(result, compressed ? 181 : 214)
39648 return result
39649}
39650
39651exports.privateKeyImport = function (privateKey) {
39652 var length = privateKey.length
39653
39654 // sequence header
39655 var index = 0
39656 if (length < index + 1 || privateKey[index] !== 0x30) return
39657 index += 1
39658
39659 // sequence length constructor
39660 if (length < index + 1 || !(privateKey[index] & 0x80)) return
39661
39662 var lenb = privateKey[index] & 0x7f
39663 index += 1
39664 if (lenb < 1 || lenb > 2) return
39665 if (length < index + lenb) return
39666
39667 // sequence length
39668 var len = privateKey[index + lenb - 1] | (lenb > 1 ? privateKey[index + lenb - 2] << 8 : 0)
39669 index += lenb
39670 if (length < index + len) return
39671
39672 // sequence element 0: version number (=1)
39673 if (length < index + 3 ||
39674 privateKey[index] !== 0x02 ||
39675 privateKey[index + 1] !== 0x01 ||
39676 privateKey[index + 2] !== 0x01) {
39677 return
39678 }
39679 index += 3
ab78acc6 39680
8b095871
IC
39681 // sequence element 1: octet string, up to 32 bytes
39682 if (length < index + 2 ||
39683 privateKey[index] !== 0x04 ||
39684 privateKey[index + 1] > 0x20 ||
39685 length < index + 2 + privateKey[index + 1]) {
39686 return
39687 }
ab78acc6 39688
8b095871 39689 return privateKey.slice(index + 2, index + 2 + privateKey[index + 1])
ab78acc6 39690}
ebd8d4e8 39691
8b095871
IC
39692exports.signatureExport = function (sigObj) {
39693 var r = Buffer.concat([new Buffer([0]), sigObj.r])
39694 for (var lenR = 33, posR = 0; lenR > 1 && r[posR] === 0x00 && !(r[posR + 1] & 0x80); --lenR, ++posR);
ebd8d4e8 39695
8b095871
IC
39696 var s = Buffer.concat([new Buffer([0]), sigObj.s])
39697 for (var lenS = 33, posS = 0; lenS > 1 && s[posS] === 0x00 && !(s[posS + 1] & 0x80); --lenS, ++posS);
ab78acc6 39698
8b095871
IC
39699 return bip66.encode(r.slice(posR), s.slice(posS))
39700}
ab78acc6 39701
8b095871
IC
39702exports.signatureImport = function (sig) {
39703 var r = new Buffer(ZERO_BUFFER_32)
39704 var s = new Buffer(ZERO_BUFFER_32)
ab78acc6 39705
8b095871
IC
39706 try {
39707 var sigObj = bip66.decode(sig)
39708 if (sigObj.r.length === 33 && sigObj.r[0] === 0x00) sigObj.r = sigObj.r.slice(1)
39709 if (sigObj.r.length > 32) throw new Error('R length is too long')
39710 if (sigObj.s.length === 33 && sigObj.s[0] === 0x00) sigObj.s = sigObj.s.slice(1)
39711 if (sigObj.s.length > 32) throw new Error('S length is too long')
39712 } catch (err) {
39713 return
ab78acc6
IC
39714 }
39715
8b095871
IC
39716 sigObj.r.copy(r, 32 - sigObj.r.length)
39717 sigObj.s.copy(s, 32 - sigObj.s.length)
ab78acc6 39718
8b095871
IC
39719 return { r: r, s: s }
39720}
ab78acc6 39721
8b095871
IC
39722exports.signatureImportLax = function (sig) {
39723 var r = new Buffer(ZERO_BUFFER_32)
39724 var s = new Buffer(ZERO_BUFFER_32)
ab78acc6 39725
8b095871
IC
39726 var length = sig.length
39727 var index = 0
ab78acc6 39728
8b095871
IC
39729 // sequence tag byte
39730 if (sig[index++] !== 0x30) return
39731
39732 // sequence length byte
39733 var lenbyte = sig[index++]
39734 if (lenbyte & 0x80) {
39735 index += lenbyte - 0x80
39736 if (index > length) return
ab78acc6
IC
39737 }
39738
8b095871
IC
39739 // sequence tag byte for r
39740 if (sig[index++] !== 0x02) return
39741
39742 // length for r
39743 var rlen = sig[index++]
39744 if (rlen & 0x80) {
39745 lenbyte = rlen - 0x80
39746 if (index + lenbyte > length) return
39747 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
39748 for (rlen = 0; lenbyte > 0; index += 1, lenbyte -= 1) rlen = (rlen << 8) + sig[index]
ab78acc6 39749 }
8b095871
IC
39750 if (rlen > length - index) return
39751 var rindex = index
39752 index += rlen
ab78acc6 39753
8b095871
IC
39754 // sequence tag byte for s
39755 if (sig[index++] !== 0x02) return
ab78acc6 39756
8b095871
IC
39757 // length for s
39758 var slen = sig[index++]
39759 if (slen & 0x80) {
39760 lenbyte = slen - 0x80
39761 if (index + lenbyte > length) return
39762 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
39763 for (slen = 0; lenbyte > 0; index += 1, lenbyte -= 1) slen = (slen << 8) + sig[index]
ab78acc6 39764 }
8b095871
IC
39765 if (slen > length - index) return
39766 var sindex = index
39767 index += slen
ab78acc6 39768
8b095871
IC
39769 // ignore leading zeros in r
39770 for (; rlen > 0 && sig[rindex] === 0x00; rlen -= 1, rindex += 1);
39771 // copy r value
39772 if (rlen > 32) return
39773 var rvalue = sig.slice(rindex, rindex + rlen)
39774 rvalue.copy(r, 32 - rvalue.length)
ab78acc6 39775
8b095871
IC
39776 // ignore leading zeros in s
39777 for (; slen > 0 && sig[sindex] === 0x00; slen -= 1, sindex += 1);
39778 // copy s value
39779 if (slen > 32) return
39780 var svalue = sig.slice(sindex, sindex + slen)
39781 svalue.copy(s, 32 - svalue.length)
39782
39783 return { r: r, s: s }
ab78acc6
IC
39784}
39785
8b095871
IC
39786}).call(this,require("buffer").Buffer)
39787},{"bip66":32,"buffer":5}],76:[function(require,module,exports){
39788(function (Buffer){
39789'use strict'
39790var createHash = require('create-hash')
39791var BN = require('bn.js')
39792var EC = require('elliptic').ec
39793
39794var messages = require('../messages.json')
39795
39796var ec = new EC('secp256k1')
39797var ecparams = ec.curve
39798
39799function loadCompressedPublicKey (first, xBuffer) {
39800 var x = new BN(xBuffer)
39801
39802 // overflow
39803 if (x.cmp(ecparams.p) >= 0) return null
39804 x = x.toRed(ecparams.red)
39805
39806 // compute corresponding Y
39807 var y = x.redSqr().redIMul(x).redIAdd(ecparams.b).redSqrt()
39808 if ((first === 0x03) !== y.isOdd()) y = y.redNeg()
39809
39810 return ec.keyPair({ pub: { x: x, y: y } })
ebd8d4e8
IC
39811}
39812
8b095871
IC
39813function loadUncompressedPublicKey (first, xBuffer, yBuffer) {
39814 var x = new BN(xBuffer)
39815 var y = new BN(yBuffer)
ebd8d4e8 39816
8b095871
IC
39817 // overflow
39818 if (x.cmp(ecparams.p) >= 0 || y.cmp(ecparams.p) >= 0) return null
ebd8d4e8 39819
8b095871
IC
39820 x = x.toRed(ecparams.red)
39821 y = y.toRed(ecparams.red)
ebd8d4e8 39822
8b095871
IC
39823 // is odd flag
39824 if ((first === 0x06 || first === 0x07) && y.isOdd() !== (first === 0x07)) return null
ab78acc6 39825
8b095871
IC
39826 // x*x*x + b = y*y
39827 var x3 = x.redSqr().redIMul(x)
39828 if (!y.redSqr().redISub(x3.redIAdd(ecparams.b)).isZero()) return null
ebd8d4e8 39829
8b095871 39830 return ec.keyPair({ pub: { x: x, y: y } })
ebd8d4e8
IC
39831}
39832
8b095871
IC
39833function loadPublicKey (publicKey) {
39834 var first = publicKey[0]
39835 switch (first) {
39836 case 0x02:
39837 case 0x03:
39838 if (publicKey.length !== 33) return null
39839 return loadCompressedPublicKey(first, publicKey.slice(1, 33))
39840 case 0x04:
39841 case 0x06:
39842 case 0x07:
39843 if (publicKey.length !== 65) return null
39844 return loadUncompressedPublicKey(first, publicKey.slice(1, 33), publicKey.slice(33, 65))
39845 default:
39846 return null
ebd8d4e8 39847 }
8b095871 39848}
ebd8d4e8 39849
8b095871
IC
39850exports.privateKeyVerify = function (privateKey) {
39851 var bn = new BN(privateKey)
39852 return bn.cmp(ecparams.n) < 0 && !bn.isZero()
39853}
ebd8d4e8 39854
8b095871
IC
39855exports.privateKeyExport = function (privateKey, compressed) {
39856 var d = new BN(privateKey)
39857 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PRIVATE_KEY_EXPORT_DER_FAIL)
ab78acc6 39858
8b095871 39859 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
ebd8d4e8
IC
39860}
39861
8b095871
IC
39862exports.privateKeyTweakAdd = function (privateKey, tweak) {
39863 var bn = new BN(tweak)
39864 if (bn.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
ab78acc6 39865
8b095871
IC
39866 bn.iadd(new BN(privateKey))
39867 if (bn.cmp(ecparams.n) >= 0) bn.isub(ecparams.n)
39868 if (bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
ab78acc6 39869
8b095871
IC
39870 return bn.toArrayLike(Buffer, 'be', 32)
39871}
39872
39873exports.privateKeyTweakMul = function (privateKey, tweak) {
39874 var bn = new BN(tweak)
39875 if (bn.cmp(ecparams.n) >= 0 || bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_MUL_FAIL)
39876
39877 bn.imul(new BN(privateKey))
39878 if (bn.cmp(ecparams.n)) bn = bn.umod(ecparams.n)
39879
39880 return bn.toArrayLike(Buffer, 'be', 32)
39881}
39882
39883exports.publicKeyCreate = function (privateKey, compressed) {
39884 var d = new BN(privateKey)
39885 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PUBLIC_KEY_CREATE_FAIL)
39886
39887 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
39888}
39889
39890exports.publicKeyConvert = function (publicKey, compressed) {
39891 var pair = loadPublicKey(publicKey)
39892 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 39893
8b095871 39894 return new Buffer(pair.getPublic(compressed, true))
ab78acc6
IC
39895}
39896
8b095871
IC
39897exports.publicKeyVerify = function (publicKey) {
39898 return loadPublicKey(publicKey) !== null
39899}
ab78acc6 39900
8b095871
IC
39901exports.publicKeyTweakAdd = function (publicKey, tweak, compressed) {
39902 var pair = loadPublicKey(publicKey)
39903 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 39904
8b095871
IC
39905 tweak = new BN(tweak)
39906 if (tweak.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_ADD_FAIL)
ab78acc6 39907
8b095871
IC
39908 return new Buffer(ecparams.g.mul(tweak).add(pair.pub).encode(true, compressed))
39909}
ab78acc6 39910
8b095871
IC
39911exports.publicKeyTweakMul = function (publicKey, tweak, compressed) {
39912 var pair = loadPublicKey(publicKey)
39913 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 39914
8b095871
IC
39915 tweak = new BN(tweak)
39916 if (tweak.cmp(ecparams.n) >= 0 || tweak.isZero()) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_MUL_FAIL)
ab78acc6 39917
8b095871
IC
39918 return new Buffer(pair.pub.mul(tweak).encode(true, compressed))
39919}
ab78acc6 39920
8b095871
IC
39921exports.publicKeyCombine = function (publicKeys, compressed) {
39922 var pairs = new Array(publicKeys.length)
39923 for (var i = 0; i < publicKeys.length; ++i) {
39924 pairs[i] = loadPublicKey(publicKeys[i])
39925 if (pairs[i] === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6
IC
39926 }
39927
8b095871
IC
39928 var point = pairs[0].pub
39929 for (var j = 1; j < pairs.length; ++j) point = point.add(pairs[j].pub)
39930 if (point.isInfinity()) throw new Error(messages.EC_PUBLIC_KEY_COMBINE_FAIL)
ab78acc6 39931
8b095871
IC
39932 return new Buffer(point.encode(true, compressed))
39933}
ab78acc6 39934
8b095871
IC
39935exports.signatureNormalize = function (signature) {
39936 var r = new BN(signature.slice(0, 32))
39937 var s = new BN(signature.slice(32, 64))
39938 if (r.cmp(ecparams.n) >= 0 || s.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
39939
39940 var result = new Buffer(signature)
39941 if (s.cmp(ec.nh) === 1) ecparams.n.sub(s).toArrayLike(Buffer, 'be', 32).copy(result, 32)
39942
39943 return result
ab78acc6
IC
39944}
39945
8b095871
IC
39946exports.signatureExport = function (signature) {
39947 var r = signature.slice(0, 32)
39948 var s = signature.slice(32, 64)
39949 if (new BN(r).cmp(ecparams.n) >= 0 || new BN(s).cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
39950
39951 return { r: r, s: s }
ab78acc6
IC
39952}
39953
8b095871
IC
39954exports.signatureImport = function (sigObj) {
39955 var r = new BN(sigObj.r)
39956 if (r.cmp(ecparams.n) >= 0) r = new BN(0)
39957
39958 var s = new BN(sigObj.s)
39959 if (s.cmp(ecparams.n) >= 0) s = new BN(0)
39960
39961 return Buffer.concat([
39962 r.toArrayLike(Buffer, 'be', 32),
39963 s.toArrayLike(Buffer, 'be', 32)
39964 ])
ab78acc6
IC
39965}
39966
8b095871
IC
39967exports.sign = function (message, privateKey, noncefn, data) {
39968 if (typeof noncefn === 'function') {
39969 var getNonce = noncefn
39970 noncefn = function (counter) {
39971 var nonce = getNonce(message, privateKey, null, data, counter)
39972 if (!Buffer.isBuffer(nonce) || nonce.length !== 32) throw new Error(messages.ECDSA_SIGN_FAIL)
ebd8d4e8 39973
8b095871
IC
39974 return new BN(nonce)
39975 }
ab78acc6 39976 }
ebd8d4e8 39977
8b095871
IC
39978 var d = new BN(privateKey)
39979 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.ECDSA_SIGN_FAIL)
ebd8d4e8 39980
8b095871
IC
39981 var result = ec.sign(message, privateKey, { canonical: true, k: noncefn, pers: data })
39982 return {
39983 signature: Buffer.concat([
39984 result.r.toArrayLike(Buffer, 'be', 32),
39985 result.s.toArrayLike(Buffer, 'be', 32)
39986 ]),
39987 recovery: result.recoveryParam
ebd8d4e8 39988 }
8b095871 39989}
ab78acc6 39990
8b095871
IC
39991exports.verify = function (message, signature, publicKey) {
39992 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
ab78acc6 39993
8b095871
IC
39994 var sigr = new BN(sigObj.r)
39995 var sigs = new BN(sigObj.s)
39996 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
39997 if (sigs.cmp(ec.nh) === 1 || sigr.isZero() || sigs.isZero()) return false
ab78acc6 39998
8b095871
IC
39999 var pair = loadPublicKey(publicKey)
40000 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ebd8d4e8 40001
8b095871
IC
40002 return ec.verify(message, sigObj, {x: pair.pub.x, y: pair.pub.y})
40003}
ebd8d4e8 40004
8b095871
IC
40005exports.recover = function (message, signature, recovery, compressed) {
40006 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
ebd8d4e8 40007
8b095871
IC
40008 var sigr = new BN(sigObj.r)
40009 var sigs = new BN(sigObj.s)
40010 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
ebd8d4e8 40011
8b095871
IC
40012 try {
40013 if (sigr.isZero() || sigs.isZero()) throw new Error()
ebd8d4e8 40014
8b095871
IC
40015 var point = ec.recoverPubKey(message, sigObj, recovery)
40016 return new Buffer(point.encode(true, compressed))
40017 } catch (err) {
40018 throw new Error(messages.ECDSA_RECOVER_FAIL)
40019 }
ebd8d4e8
IC
40020}
40021
8b095871
IC
40022exports.ecdh = function (publicKey, privateKey) {
40023 var shared = exports.ecdhUnsafe(publicKey, privateKey, true)
40024 return createHash('sha256').update(shared).digest()
ebd8d4e8
IC
40025}
40026
8b095871
IC
40027exports.ecdhUnsafe = function (publicKey, privateKey, compressed) {
40028 var pair = loadPublicKey(publicKey)
40029 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 40030
8b095871
IC
40031 var scalar = new BN(privateKey)
40032 if (scalar.cmp(ecparams.n) >= 0 || scalar.isZero()) throw new Error(messages.ECDH_FAIL)
40033
40034 return new Buffer(pair.pub.mul(scalar).encode(true, compressed))
ab78acc6
IC
40035}
40036
8b095871
IC
40037}).call(this,require("buffer").Buffer)
40038},{"../messages.json":78,"bn.js":33,"buffer":5,"create-hash":36,"elliptic":39}],77:[function(require,module,exports){
40039'use strict'
40040var assert = require('./assert')
40041var der = require('./der')
40042var messages = require('./messages.json')
ab78acc6 40043
8b095871
IC
40044function initCompressedValue (value, defaultValue) {
40045 if (value === undefined) return defaultValue
ab78acc6 40046
8b095871
IC
40047 assert.isBoolean(value, messages.COMPRESSED_TYPE_INVALID)
40048 return value
ab78acc6
IC
40049}
40050
8b095871
IC
40051module.exports = function (secp256k1) {
40052 return {
40053 privateKeyVerify: function (privateKey) {
40054 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
40055 return privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)
40056 },
ab78acc6 40057
8b095871
IC
40058 privateKeyExport: function (privateKey, compressed) {
40059 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
40060 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 40061
8b095871
IC
40062 compressed = initCompressedValue(compressed, true)
40063 var publicKey = secp256k1.privateKeyExport(privateKey, compressed)
ab78acc6 40064
8b095871
IC
40065 return der.privateKeyExport(privateKey, publicKey, compressed)
40066 },
ab78acc6 40067
8b095871
IC
40068 privateKeyImport: function (privateKey) {
40069 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
ab78acc6 40070
8b095871
IC
40071 privateKey = der.privateKeyImport(privateKey)
40072 if (privateKey && privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)) return privateKey
ab78acc6 40073
8b095871
IC
40074 throw new Error(messages.EC_PRIVATE_KEY_IMPORT_DER_FAIL)
40075 },
ab78acc6 40076
8b095871
IC
40077 privateKeyTweakAdd: function (privateKey, tweak) {
40078 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
40079 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 40080
8b095871
IC
40081 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
40082 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
ab78acc6 40083
8b095871
IC
40084 return secp256k1.privateKeyTweakAdd(privateKey, tweak)
40085 },
ab78acc6 40086
8b095871
IC
40087 privateKeyTweakMul: function (privateKey, tweak) {
40088 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
40089 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 40090
8b095871
IC
40091 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
40092 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
ab78acc6 40093
8b095871
IC
40094 return secp256k1.privateKeyTweakMul(privateKey, tweak)
40095 },
ab78acc6 40096
8b095871
IC
40097 publicKeyCreate: function (privateKey, compressed) {
40098 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
40099 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 40100
8b095871 40101 compressed = initCompressedValue(compressed, true)
ab78acc6 40102
8b095871
IC
40103 return secp256k1.publicKeyCreate(privateKey, compressed)
40104 },
ab78acc6 40105
8b095871
IC
40106 publicKeyConvert: function (publicKey, compressed) {
40107 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
40108 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6 40109
8b095871
IC
40110 compressed = initCompressedValue(compressed, true)
40111
40112 return secp256k1.publicKeyConvert(publicKey, compressed)
40113 },
40114
40115 publicKeyVerify: function (publicKey) {
40116 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
40117 return secp256k1.publicKeyVerify(publicKey)
40118 },
40119
40120 publicKeyTweakAdd: function (publicKey, tweak, compressed) {
40121 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
40122 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
40123
40124 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
40125 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
40126
40127 compressed = initCompressedValue(compressed, true)
40128
40129 return secp256k1.publicKeyTweakAdd(publicKey, tweak, compressed)
40130 },
40131
40132 publicKeyTweakMul: function (publicKey, tweak, compressed) {
40133 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
40134 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
40135
40136 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
40137 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
40138
40139 compressed = initCompressedValue(compressed, true)
40140
40141 return secp256k1.publicKeyTweakMul(publicKey, tweak, compressed)
40142 },
40143
40144 publicKeyCombine: function (publicKeys, compressed) {
40145 assert.isArray(publicKeys, messages.EC_PUBLIC_KEYS_TYPE_INVALID)
40146 assert.isLengthGTZero(publicKeys, messages.EC_PUBLIC_KEYS_LENGTH_INVALID)
40147 for (var i = 0; i < publicKeys.length; ++i) {
40148 assert.isBuffer(publicKeys[i], messages.EC_PUBLIC_KEY_TYPE_INVALID)
40149 assert.isBufferLength2(publicKeys[i], 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6
IC
40150 }
40151
8b095871 40152 compressed = initCompressedValue(compressed, true)
ab78acc6 40153
8b095871
IC
40154 return secp256k1.publicKeyCombine(publicKeys, compressed)
40155 },
ab78acc6 40156
8b095871
IC
40157 signatureNormalize: function (signature) {
40158 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
40159 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
ab78acc6 40160
8b095871
IC
40161 return secp256k1.signatureNormalize(signature)
40162 },
ab78acc6 40163
8b095871
IC
40164 signatureExport: function (signature) {
40165 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
40166 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
40167
40168 var sigObj = secp256k1.signatureExport(signature)
40169 return der.signatureExport(sigObj)
40170 },
40171
40172 signatureImport: function (sig) {
40173 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
40174 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
40175
40176 var sigObj = der.signatureImport(sig)
40177 if (sigObj) return secp256k1.signatureImport(sigObj)
40178
40179 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
40180 },
40181
40182 signatureImportLax: function (sig) {
40183 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
40184 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
40185
40186 var sigObj = der.signatureImportLax(sig)
40187 if (sigObj) return secp256k1.signatureImport(sigObj)
40188
40189 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
40190 },
40191
40192 sign: function (message, privateKey, options) {
40193 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
40194 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
40195
40196 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
40197 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
40198
40199 var data = null
40200 var noncefn = null
40201 if (options !== undefined) {
40202 assert.isObject(options, messages.OPTIONS_TYPE_INVALID)
40203
40204 if (options.data !== undefined) {
40205 assert.isBuffer(options.data, messages.OPTIONS_DATA_TYPE_INVALID)
40206 assert.isBufferLength(options.data, 32, messages.OPTIONS_DATA_LENGTH_INVALID)
40207 data = options.data
40208 }
40209
40210 if (options.noncefn !== undefined) {
40211 assert.isFunction(options.noncefn, messages.OPTIONS_NONCEFN_TYPE_INVALID)
40212 noncefn = options.noncefn
40213 }
ab78acc6
IC
40214 }
40215
8b095871
IC
40216 return secp256k1.sign(message, privateKey, noncefn, data)
40217 },
ab78acc6 40218
8b095871
IC
40219 verify: function (message, signature, publicKey) {
40220 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
40221 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
ab78acc6 40222
8b095871
IC
40223 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
40224 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
ab78acc6 40225
8b095871
IC
40226 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
40227 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
40228
40229 return secp256k1.verify(message, signature, publicKey)
40230 },
ab78acc6 40231
8b095871
IC
40232 recover: function (message, signature, recovery, compressed) {
40233 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
40234 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
ab78acc6 40235
8b095871
IC
40236 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
40237 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
ab78acc6 40238
8b095871
IC
40239 assert.isNumber(recovery, messages.RECOVERY_ID_TYPE_INVALID)
40240 assert.isNumberInInterval(recovery, -1, 4, messages.RECOVERY_ID_VALUE_INVALID)
ab78acc6 40241
8b095871 40242 compressed = initCompressedValue(compressed, true)
ab78acc6 40243
8b095871
IC
40244 return secp256k1.recover(message, signature, recovery, compressed)
40245 },
ab78acc6 40246
8b095871
IC
40247 ecdh: function (publicKey, privateKey) {
40248 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
40249 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6 40250
8b095871
IC
40251 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
40252 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 40253
8b095871
IC
40254 return secp256k1.ecdh(publicKey, privateKey)
40255 },
ab78acc6 40256
8b095871
IC
40257 ecdhUnsafe: function (publicKey, privateKey, compressed) {
40258 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
40259 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6 40260
8b095871
IC
40261 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
40262 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 40263
8b095871 40264 compressed = initCompressedValue(compressed, true)
ab78acc6 40265
8b095871
IC
40266 return secp256k1.ecdhUnsafe(publicKey, privateKey, compressed)
40267 }
40268 }
40269}
ab78acc6 40270
8b095871
IC
40271},{"./assert":74,"./der":75,"./messages.json":78}],78:[function(require,module,exports){
40272module.exports={
40273 "COMPRESSED_TYPE_INVALID": "compressed should be a boolean",
40274 "EC_PRIVATE_KEY_TYPE_INVALID": "private key should be a Buffer",
40275 "EC_PRIVATE_KEY_LENGTH_INVALID": "private key length is invalid",
40276 "EC_PRIVATE_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting private key is invalid",
40277 "EC_PRIVATE_KEY_TWEAK_MUL_FAIL": "tweak out of range",
40278 "EC_PRIVATE_KEY_EXPORT_DER_FAIL": "couldn't export to DER format",
40279 "EC_PRIVATE_KEY_IMPORT_DER_FAIL": "couldn't import from DER format",
40280 "EC_PUBLIC_KEYS_TYPE_INVALID": "public keys should be an Array",
40281 "EC_PUBLIC_KEYS_LENGTH_INVALID": "public keys Array should have at least 1 element",
40282 "EC_PUBLIC_KEY_TYPE_INVALID": "public key should be a Buffer",
40283 "EC_PUBLIC_KEY_LENGTH_INVALID": "public key length is invalid",
40284 "EC_PUBLIC_KEY_PARSE_FAIL": "the public key could not be parsed or is invalid",
40285 "EC_PUBLIC_KEY_CREATE_FAIL": "private was invalid, try again",
40286 "EC_PUBLIC_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting public key is invalid",
40287 "EC_PUBLIC_KEY_TWEAK_MUL_FAIL": "tweak out of range",
40288 "EC_PUBLIC_KEY_COMBINE_FAIL": "the sum of the public keys is not valid",
40289 "ECDH_FAIL": "scalar was invalid (zero or overflow)",
40290 "ECDSA_SIGNATURE_TYPE_INVALID": "signature should be a Buffer",
40291 "ECDSA_SIGNATURE_LENGTH_INVALID": "signature length is invalid",
40292 "ECDSA_SIGNATURE_PARSE_FAIL": "couldn't parse signature",
40293 "ECDSA_SIGNATURE_PARSE_DER_FAIL": "couldn't parse DER signature",
40294 "ECDSA_SIGNATURE_SERIALIZE_DER_FAIL": "couldn't serialize signature to DER format",
40295 "ECDSA_SIGN_FAIL": "nonce generation function failed or private key is invalid",
40296 "ECDSA_RECOVER_FAIL": "couldn't recover public key from signature",
40297 "MSG32_TYPE_INVALID": "message should be a Buffer",
40298 "MSG32_LENGTH_INVALID": "message length is invalid",
40299 "OPTIONS_TYPE_INVALID": "options should be an Object",
40300 "OPTIONS_DATA_TYPE_INVALID": "options.data should be a Buffer",
40301 "OPTIONS_DATA_LENGTH_INVALID": "options.data length is invalid",
40302 "OPTIONS_NONCEFN_TYPE_INVALID": "options.noncefn should be a Function",
40303 "RECOVERY_ID_TYPE_INVALID": "recovery should be a Number",
40304 "RECOVERY_ID_VALUE_INVALID": "recovery should have value between -1 and 4",
40305 "TWEAK_TYPE_INVALID": "tweak should be a Buffer",
40306 "TWEAK_LENGTH_INVALID": "tweak length is invalid"
40307}
40308
40309},{}],79:[function(require,module,exports){
40310(function (Buffer){
40311// prototype class for hash functions
40312function Hash (blockSize, finalSize) {
40313 this._block = new Buffer(blockSize)
40314 this._finalSize = finalSize
40315 this._blockSize = blockSize
40316 this._len = 0
40317 this._s = 0
40318}
40319
40320Hash.prototype.update = function (data, enc) {
40321 if (typeof data === 'string') {
40322 enc = enc || 'utf8'
40323 data = new Buffer(data, enc)
ab78acc6
IC
40324 }
40325
8b095871
IC
40326 var l = this._len += data.length
40327 var s = this._s || 0
40328 var f = 0
40329 var buffer = this._block
ab78acc6 40330
8b095871
IC
40331 while (s < l) {
40332 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
40333 var ch = (t - f)
ab78acc6 40334
8b095871
IC
40335 for (var i = 0; i < ch; i++) {
40336 buffer[(s % this._blockSize) + i] = data[i + f]
ab78acc6
IC
40337 }
40338
8b095871
IC
40339 s += ch
40340 f += ch
ab78acc6 40341
8b095871
IC
40342 if ((s % this._blockSize) === 0) {
40343 this._update(buffer)
40344 }
ab78acc6 40345 }
8b095871 40346 this._s = s
ab78acc6 40347
8b095871
IC
40348 return this
40349}
ab78acc6 40350
8b095871
IC
40351Hash.prototype.digest = function (enc) {
40352 // Suppose the length of the message M, in bits, is l
40353 var l = this._len * 8
ab78acc6 40354
8b095871
IC
40355 // Append the bit 1 to the end of the message
40356 this._block[this._len % this._blockSize] = 0x80
ab78acc6 40357
8b095871
IC
40358 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
40359 this._block.fill(0, this._len % this._blockSize + 1)
ab78acc6 40360
8b095871
IC
40361 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
40362 this._update(this._block)
40363 this._block.fill(0)
40364 }
ab78acc6 40365
8b095871
IC
40366 // to this append the block which is equal to the number l written in binary
40367 // TODO: handle case where l is > Math.pow(2, 29)
40368 this._block.writeInt32BE(l, this._blockSize - 4)
ebd8d4e8 40369
8b095871 40370 var hash = this._update(this._block) || this._hash()
ebd8d4e8 40371
8b095871 40372 return enc ? hash.toString(enc) : hash
ab78acc6 40373}
ebd8d4e8 40374
8b095871
IC
40375Hash.prototype._update = function () {
40376 throw new Error('_update must be implemented by subclass')
ab78acc6 40377}
8b095871
IC
40378
40379module.exports = Hash
40380
40381}).call(this,require("buffer").Buffer)
40382},{"buffer":5}],80:[function(require,module,exports){
40383var exports = module.exports = function SHA (algorithm) {
40384 algorithm = algorithm.toLowerCase()
40385
40386 var Algorithm = exports[algorithm]
40387 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
40388
40389 return new Algorithm()
ab78acc6 40390}
ebd8d4e8 40391
8b095871
IC
40392exports.sha = require('./sha')
40393exports.sha1 = require('./sha1')
40394exports.sha224 = require('./sha224')
40395exports.sha256 = require('./sha256')
40396exports.sha384 = require('./sha384')
40397exports.sha512 = require('./sha512')
40398
40399},{"./sha":81,"./sha1":82,"./sha224":83,"./sha256":84,"./sha384":85,"./sha512":86}],81:[function(require,module,exports){
40400(function (Buffer){
40401/*
40402 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
40403 * in FIPS PUB 180-1
40404 * This source code is derived from sha1.js of the same repository.
40405 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
40406 * operation was added.
40407 */
40408
40409var inherits = require('inherits')
40410var Hash = require('./hash')
40411
40412var K = [
40413 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
40414]
40415
40416var W = new Array(80)
40417
40418function Sha () {
40419 this.init()
40420 this._w = W
40421
40422 Hash.call(this, 64, 56)
ab78acc6 40423}
ebd8d4e8 40424
8b095871 40425inherits(Sha, Hash)
ebd8d4e8 40426
8b095871
IC
40427Sha.prototype.init = function () {
40428 this._a = 0x67452301
40429 this._b = 0xefcdab89
40430 this._c = 0x98badcfe
40431 this._d = 0x10325476
40432 this._e = 0xc3d2e1f0
ebd8d4e8 40433
8b095871
IC
40434 return this
40435}
ebd8d4e8 40436
8b095871
IC
40437function rotl5 (num) {
40438 return (num << 5) | (num >>> 27)
40439}
ebd8d4e8 40440
8b095871
IC
40441function rotl30 (num) {
40442 return (num << 30) | (num >>> 2)
40443}
ebd8d4e8 40444
8b095871
IC
40445function ft (s, b, c, d) {
40446 if (s === 0) return (b & c) | ((~b) & d)
40447 if (s === 2) return (b & c) | (b & d) | (c & d)
40448 return b ^ c ^ d
40449}
ebd8d4e8 40450
8b095871
IC
40451Sha.prototype._update = function (M) {
40452 var W = this._w
ebd8d4e8 40453
8b095871
IC
40454 var a = this._a | 0
40455 var b = this._b | 0
40456 var c = this._c | 0
40457 var d = this._d | 0
40458 var e = this._e | 0
ebd8d4e8 40459
8b095871
IC
40460 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
40461 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
ebd8d4e8 40462
8b095871
IC
40463 for (var j = 0; j < 80; ++j) {
40464 var s = ~~(j / 20)
40465 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
ebd8d4e8 40466
8b095871
IC
40467 e = d
40468 d = c
40469 c = rotl30(b)
40470 b = a
40471 a = t
40472 }
40473
40474 this._a = (a + this._a) | 0
40475 this._b = (b + this._b) | 0
40476 this._c = (c + this._c) | 0
40477 this._d = (d + this._d) | 0
40478 this._e = (e + this._e) | 0
40479}
40480
40481Sha.prototype._hash = function () {
40482 var H = new Buffer(20)
ab78acc6 40483
8b095871
IC
40484 H.writeInt32BE(this._a | 0, 0)
40485 H.writeInt32BE(this._b | 0, 4)
40486 H.writeInt32BE(this._c | 0, 8)
40487 H.writeInt32BE(this._d | 0, 12)
40488 H.writeInt32BE(this._e | 0, 16)
ebd8d4e8 40489
8b095871 40490 return H
ebd8d4e8
IC
40491}
40492
8b095871 40493module.exports = Sha
ebd8d4e8 40494
8b095871
IC
40495}).call(this,require("buffer").Buffer)
40496},{"./hash":79,"buffer":5,"inherits":63}],82:[function(require,module,exports){
40497(function (Buffer){
40498/*
40499 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
40500 * in FIPS PUB 180-1
40501 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
40502 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
40503 * Distributed under the BSD License
40504 * See http://pajhome.org.uk/crypt/md5 for details.
40505 */
ebd8d4e8 40506
8b095871
IC
40507var inherits = require('inherits')
40508var Hash = require('./hash')
ebd8d4e8 40509
8b095871
IC
40510var K = [
40511 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
40512]
ebd8d4e8 40513
8b095871 40514var W = new Array(80)
ab78acc6 40515
8b095871
IC
40516function Sha1 () {
40517 this.init()
40518 this._w = W
ebd8d4e8 40519
8b095871
IC
40520 Hash.call(this, 64, 56)
40521}
ebd8d4e8 40522
8b095871 40523inherits(Sha1, Hash)
ebd8d4e8 40524
8b095871
IC
40525Sha1.prototype.init = function () {
40526 this._a = 0x67452301
40527 this._b = 0xefcdab89
40528 this._c = 0x98badcfe
40529 this._d = 0x10325476
40530 this._e = 0xc3d2e1f0
ebd8d4e8 40531
8b095871
IC
40532 return this
40533}
ebd8d4e8 40534
8b095871
IC
40535function rotl1 (num) {
40536 return (num << 1) | (num >>> 31)
40537}
ebd8d4e8 40538
8b095871
IC
40539function rotl5 (num) {
40540 return (num << 5) | (num >>> 27)
40541}
ebd8d4e8 40542
8b095871
IC
40543function rotl30 (num) {
40544 return (num << 30) | (num >>> 2)
40545}
ebd8d4e8 40546
8b095871
IC
40547function ft (s, b, c, d) {
40548 if (s === 0) return (b & c) | ((~b) & d)
40549 if (s === 2) return (b & c) | (b & d) | (c & d)
40550 return b ^ c ^ d
40551}
ebd8d4e8 40552
8b095871
IC
40553Sha1.prototype._update = function (M) {
40554 var W = this._w
ebd8d4e8 40555
8b095871
IC
40556 var a = this._a | 0
40557 var b = this._b | 0
40558 var c = this._c | 0
40559 var d = this._d | 0
40560 var e = this._e | 0
ebd8d4e8 40561
8b095871
IC
40562 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
40563 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
40564
40565 for (var j = 0; j < 80; ++j) {
40566 var s = ~~(j / 20)
40567 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
40568
40569 e = d
40570 d = c
40571 c = rotl30(b)
40572 b = a
40573 a = t
ab78acc6
IC
40574 }
40575
8b095871
IC
40576 this._a = (a + this._a) | 0
40577 this._b = (b + this._b) | 0
40578 this._c = (c + this._c) | 0
40579 this._d = (d + this._d) | 0
40580 this._e = (e + this._e) | 0
40581}
ab78acc6 40582
8b095871
IC
40583Sha1.prototype._hash = function () {
40584 var H = new Buffer(20)
ab78acc6 40585
8b095871
IC
40586 H.writeInt32BE(this._a | 0, 0)
40587 H.writeInt32BE(this._b | 0, 4)
40588 H.writeInt32BE(this._c | 0, 8)
40589 H.writeInt32BE(this._d | 0, 12)
40590 H.writeInt32BE(this._e | 0, 16)
ab78acc6 40591
8b095871
IC
40592 return H
40593}
ab78acc6 40594
8b095871 40595module.exports = Sha1
ab78acc6 40596
8b095871
IC
40597}).call(this,require("buffer").Buffer)
40598},{"./hash":79,"buffer":5,"inherits":63}],83:[function(require,module,exports){
40599(function (Buffer){
40600/**
40601 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
40602 * in FIPS 180-2
40603 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
40604 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
40605 *
40606 */
ab78acc6 40607
8b095871
IC
40608var inherits = require('inherits')
40609var Sha256 = require('./sha256')
40610var Hash = require('./hash')
ab78acc6 40611
8b095871 40612var W = new Array(64)
ab78acc6 40613
8b095871
IC
40614function Sha224 () {
40615 this.init()
ab78acc6 40616
8b095871 40617 this._w = W // new Array(64)
ebd8d4e8 40618
8b095871
IC
40619 Hash.call(this, 64, 56)
40620}
ebd8d4e8 40621
8b095871 40622inherits(Sha224, Sha256)
ebd8d4e8 40623
8b095871
IC
40624Sha224.prototype.init = function () {
40625 this._a = 0xc1059ed8
40626 this._b = 0x367cd507
40627 this._c = 0x3070dd17
40628 this._d = 0xf70e5939
40629 this._e = 0xffc00b31
40630 this._f = 0x68581511
40631 this._g = 0x64f98fa7
40632 this._h = 0xbefa4fa4
ebd8d4e8 40633
8b095871
IC
40634 return this
40635}
ab78acc6 40636
8b095871
IC
40637Sha224.prototype._hash = function () {
40638 var H = new Buffer(28)
ebd8d4e8 40639
8b095871
IC
40640 H.writeInt32BE(this._a, 0)
40641 H.writeInt32BE(this._b, 4)
40642 H.writeInt32BE(this._c, 8)
40643 H.writeInt32BE(this._d, 12)
40644 H.writeInt32BE(this._e, 16)
40645 H.writeInt32BE(this._f, 20)
40646 H.writeInt32BE(this._g, 24)
ab78acc6 40647
8b095871
IC
40648 return H
40649}
ebd8d4e8 40650
8b095871 40651module.exports = Sha224
ebd8d4e8 40652
8b095871
IC
40653}).call(this,require("buffer").Buffer)
40654},{"./hash":79,"./sha256":84,"buffer":5,"inherits":63}],84:[function(require,module,exports){
40655(function (Buffer){
40656/**
40657 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
40658 * in FIPS 180-2
40659 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
40660 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
40661 *
40662 */
ebd8d4e8 40663
8b095871
IC
40664var inherits = require('inherits')
40665var Hash = require('./hash')
ab78acc6 40666
8b095871
IC
40667var K = [
40668 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
40669 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
40670 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
40671 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
40672 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
40673 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
40674 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
40675 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
40676 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
40677 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
40678 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
40679 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
40680 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
40681 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
40682 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
40683 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
40684]
ebd8d4e8 40685
8b095871 40686var W = new Array(64)
ebd8d4e8 40687
8b095871
IC
40688function Sha256 () {
40689 this.init()
ebd8d4e8 40690
8b095871 40691 this._w = W // new Array(64)
ebd8d4e8 40692
8b095871 40693 Hash.call(this, 64, 56)
ab78acc6 40694}
ebd8d4e8 40695
8b095871 40696inherits(Sha256, Hash)
ebd8d4e8 40697
8b095871
IC
40698Sha256.prototype.init = function () {
40699 this._a = 0x6a09e667
40700 this._b = 0xbb67ae85
40701 this._c = 0x3c6ef372
40702 this._d = 0xa54ff53a
40703 this._e = 0x510e527f
40704 this._f = 0x9b05688c
40705 this._g = 0x1f83d9ab
40706 this._h = 0x5be0cd19
ebd8d4e8 40707
8b095871
IC
40708 return this
40709}
ebd8d4e8 40710
8b095871
IC
40711function ch (x, y, z) {
40712 return z ^ (x & (y ^ z))
40713}
ebd8d4e8 40714
8b095871
IC
40715function maj (x, y, z) {
40716 return (x & y) | (z & (x | y))
40717}
ebd8d4e8 40718
8b095871
IC
40719function sigma0 (x) {
40720 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
40721}
ebd8d4e8 40722
8b095871
IC
40723function sigma1 (x) {
40724 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
40725}
ebd8d4e8 40726
8b095871
IC
40727function gamma0 (x) {
40728 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
40729}
ebd8d4e8 40730
8b095871
IC
40731function gamma1 (x) {
40732 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
40733}
ab78acc6 40734
8b095871
IC
40735Sha256.prototype._update = function (M) {
40736 var W = this._w
ebd8d4e8 40737
8b095871
IC
40738 var a = this._a | 0
40739 var b = this._b | 0
40740 var c = this._c | 0
40741 var d = this._d | 0
40742 var e = this._e | 0
40743 var f = this._f | 0
40744 var g = this._g | 0
40745 var h = this._h | 0
ab78acc6 40746
8b095871
IC
40747 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
40748 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
ab78acc6 40749
8b095871
IC
40750 for (var j = 0; j < 64; ++j) {
40751 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
40752 var T2 = (sigma0(a) + maj(a, b, c)) | 0
ebd8d4e8 40753
8b095871
IC
40754 h = g
40755 g = f
40756 f = e
40757 e = (d + T1) | 0
40758 d = c
40759 c = b
40760 b = a
40761 a = (T1 + T2) | 0
ebd8d4e8
IC
40762 }
40763
8b095871
IC
40764 this._a = (a + this._a) | 0
40765 this._b = (b + this._b) | 0
40766 this._c = (c + this._c) | 0
40767 this._d = (d + this._d) | 0
40768 this._e = (e + this._e) | 0
40769 this._f = (f + this._f) | 0
40770 this._g = (g + this._g) | 0
40771 this._h = (h + this._h) | 0
ab78acc6 40772}
ebd8d4e8 40773
8b095871
IC
40774Sha256.prototype._hash = function () {
40775 var H = new Buffer(32)
ebd8d4e8 40776
8b095871
IC
40777 H.writeInt32BE(this._a, 0)
40778 H.writeInt32BE(this._b, 4)
40779 H.writeInt32BE(this._c, 8)
40780 H.writeInt32BE(this._d, 12)
40781 H.writeInt32BE(this._e, 16)
40782 H.writeInt32BE(this._f, 20)
40783 H.writeInt32BE(this._g, 24)
40784 H.writeInt32BE(this._h, 28)
40785
40786 return H
ab78acc6 40787}
ebd8d4e8 40788
8b095871 40789module.exports = Sha256
ebd8d4e8 40790
8b095871
IC
40791}).call(this,require("buffer").Buffer)
40792},{"./hash":79,"buffer":5,"inherits":63}],85:[function(require,module,exports){
40793(function (Buffer){
40794var inherits = require('inherits')
40795var SHA512 = require('./sha512')
40796var Hash = require('./hash')
ebd8d4e8 40797
8b095871 40798var W = new Array(160)
ebd8d4e8 40799
8b095871
IC
40800function Sha384 () {
40801 this.init()
40802 this._w = W
ab78acc6 40803
8b095871
IC
40804 Hash.call(this, 128, 112)
40805}
ab78acc6 40806
8b095871 40807inherits(Sha384, SHA512)
ebd8d4e8 40808
8b095871
IC
40809Sha384.prototype.init = function () {
40810 this._ah = 0xcbbb9d5d
40811 this._bh = 0x629a292a
40812 this._ch = 0x9159015a
40813 this._dh = 0x152fecd8
40814 this._eh = 0x67332667
40815 this._fh = 0x8eb44a87
40816 this._gh = 0xdb0c2e0d
40817 this._hh = 0x47b5481d
40818
40819 this._al = 0xc1059ed8
40820 this._bl = 0x367cd507
40821 this._cl = 0x3070dd17
40822 this._dl = 0xf70e5939
40823 this._el = 0xffc00b31
40824 this._fl = 0x68581511
40825 this._gl = 0x64f98fa7
40826 this._hl = 0xbefa4fa4
ebd8d4e8 40827
8b095871
IC
40828 return this
40829}
ebd8d4e8 40830
8b095871
IC
40831Sha384.prototype._hash = function () {
40832 var H = new Buffer(48)
ebd8d4e8 40833
8b095871
IC
40834 function writeInt64BE (h, l, offset) {
40835 H.writeInt32BE(h, offset)
40836 H.writeInt32BE(l, offset + 4)
40837 }
ebd8d4e8 40838
8b095871
IC
40839 writeInt64BE(this._ah, this._al, 0)
40840 writeInt64BE(this._bh, this._bl, 8)
40841 writeInt64BE(this._ch, this._cl, 16)
40842 writeInt64BE(this._dh, this._dl, 24)
40843 writeInt64BE(this._eh, this._el, 32)
40844 writeInt64BE(this._fh, this._fl, 40)
ebd8d4e8 40845
8b095871 40846 return H
ab78acc6 40847}
ebd8d4e8 40848
8b095871
IC
40849module.exports = Sha384
40850
40851}).call(this,require("buffer").Buffer)
40852},{"./hash":79,"./sha512":86,"buffer":5,"inherits":63}],86:[function(require,module,exports){
40853(function (Buffer){
40854var inherits = require('inherits')
40855var Hash = require('./hash')
40856
40857var K = [
40858 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
40859 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
40860 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
40861 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
40862 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
40863 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
40864 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
40865 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
40866 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
40867 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
40868 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
40869 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
40870 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
40871 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
40872 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
40873 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
40874 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
40875 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
40876 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
40877 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
40878 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
40879 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
40880 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
40881 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
40882 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
40883 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
40884 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
40885 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
40886 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
40887 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
40888 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
40889 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
40890 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
40891 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
40892 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
40893 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
40894 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
40895 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
40896 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
40897 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
40898]
40899
40900var W = new Array(160)
ebd8d4e8 40901
8b095871
IC
40902function Sha512 () {
40903 this.init()
40904 this._w = W
ebd8d4e8 40905
8b095871 40906 Hash.call(this, 128, 112)
ab78acc6 40907}
ebd8d4e8 40908
8b095871 40909inherits(Sha512, Hash)
ebd8d4e8 40910
8b095871
IC
40911Sha512.prototype.init = function () {
40912 this._ah = 0x6a09e667
40913 this._bh = 0xbb67ae85
40914 this._ch = 0x3c6ef372
40915 this._dh = 0xa54ff53a
40916 this._eh = 0x510e527f
40917 this._fh = 0x9b05688c
40918 this._gh = 0x1f83d9ab
40919 this._hh = 0x5be0cd19
40920
40921 this._al = 0xf3bcc908
40922 this._bl = 0x84caa73b
40923 this._cl = 0xfe94f82b
40924 this._dl = 0x5f1d36f1
40925 this._el = 0xade682d1
40926 this._fl = 0x2b3e6c1f
40927 this._gl = 0xfb41bd6b
40928 this._hl = 0x137e2179
ebd8d4e8 40929
8b095871 40930 return this
ab78acc6 40931}
ebd8d4e8 40932
8b095871
IC
40933function Ch (x, y, z) {
40934 return z ^ (x & (y ^ z))
40935}
ebd8d4e8 40936
8b095871
IC
40937function maj (x, y, z) {
40938 return (x & y) | (z & (x | y))
ab78acc6 40939}
ebd8d4e8 40940
8b095871
IC
40941function sigma0 (x, xl) {
40942 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
40943}
ebd8d4e8 40944
8b095871
IC
40945function sigma1 (x, xl) {
40946 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
40947}
ab78acc6 40948
8b095871
IC
40949function Gamma0 (x, xl) {
40950 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
ab78acc6 40951}
ebd8d4e8 40952
8b095871
IC
40953function Gamma0l (x, xl) {
40954 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
40955}
ebd8d4e8 40956
8b095871
IC
40957function Gamma1 (x, xl) {
40958 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
ab78acc6
IC
40959}
40960
8b095871
IC
40961function Gamma1l (x, xl) {
40962 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
ab78acc6
IC
40963}
40964
8b095871
IC
40965function getCarry (a, b) {
40966 return (a >>> 0) < (b >>> 0) ? 1 : 0
ab78acc6
IC
40967}
40968
8b095871
IC
40969Sha512.prototype._update = function (M) {
40970 var W = this._w
ebd8d4e8 40971
8b095871
IC
40972 var ah = this._ah | 0
40973 var bh = this._bh | 0
40974 var ch = this._ch | 0
40975 var dh = this._dh | 0
40976 var eh = this._eh | 0
40977 var fh = this._fh | 0
40978 var gh = this._gh | 0
40979 var hh = this._hh | 0
ebd8d4e8 40980
8b095871
IC
40981 var al = this._al | 0
40982 var bl = this._bl | 0
40983 var cl = this._cl | 0
40984 var dl = this._dl | 0
40985 var el = this._el | 0
40986 var fl = this._fl | 0
40987 var gl = this._gl | 0
40988 var hl = this._hl | 0
ebd8d4e8 40989
8b095871
IC
40990 for (var i = 0; i < 32; i += 2) {
40991 W[i] = M.readInt32BE(i * 4)
40992 W[i + 1] = M.readInt32BE(i * 4 + 4)
40993 }
40994 for (; i < 160; i += 2) {
40995 var xh = W[i - 15 * 2]
40996 var xl = W[i - 15 * 2 + 1]
40997 var gamma0 = Gamma0(xh, xl)
40998 var gamma0l = Gamma0l(xl, xh)
ebd8d4e8 40999
8b095871
IC
41000 xh = W[i - 2 * 2]
41001 xl = W[i - 2 * 2 + 1]
41002 var gamma1 = Gamma1(xh, xl)
41003 var gamma1l = Gamma1l(xl, xh)
ebd8d4e8 41004
8b095871
IC
41005 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
41006 var Wi7h = W[i - 7 * 2]
41007 var Wi7l = W[i - 7 * 2 + 1]
ebd8d4e8 41008
8b095871
IC
41009 var Wi16h = W[i - 16 * 2]
41010 var Wi16l = W[i - 16 * 2 + 1]
ab78acc6 41011
8b095871
IC
41012 var Wil = (gamma0l + Wi7l) | 0
41013 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
41014 Wil = (Wil + gamma1l) | 0
41015 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
41016 Wil = (Wil + Wi16l) | 0
41017 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
ebd8d4e8 41018
8b095871
IC
41019 W[i] = Wih
41020 W[i + 1] = Wil
41021 }
ebd8d4e8 41022
8b095871
IC
41023 for (var j = 0; j < 160; j += 2) {
41024 Wih = W[j]
41025 Wil = W[j + 1]
ebd8d4e8 41026
8b095871
IC
41027 var majh = maj(ah, bh, ch)
41028 var majl = maj(al, bl, cl)
ebd8d4e8 41029
8b095871
IC
41030 var sigma0h = sigma0(ah, al)
41031 var sigma0l = sigma0(al, ah)
41032 var sigma1h = sigma1(eh, el)
41033 var sigma1l = sigma1(el, eh)
ab78acc6 41034
8b095871
IC
41035 // t1 = h + sigma1 + ch + K[j] + W[j]
41036 var Kih = K[j]
41037 var Kil = K[j + 1]
ab78acc6 41038
8b095871
IC
41039 var chh = Ch(eh, fh, gh)
41040 var chl = Ch(el, fl, gl)
ebd8d4e8 41041
8b095871
IC
41042 var t1l = (hl + sigma1l) | 0
41043 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
41044 t1l = (t1l + chl) | 0
41045 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
41046 t1l = (t1l + Kil) | 0
41047 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
41048 t1l = (t1l + Wil) | 0
41049 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
ebd8d4e8 41050
8b095871
IC
41051 // t2 = sigma0 + maj
41052 var t2l = (sigma0l + majl) | 0
41053 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
ebd8d4e8 41054
8b095871
IC
41055 hh = gh
41056 hl = gl
41057 gh = fh
41058 gl = fl
41059 fh = eh
41060 fl = el
41061 el = (dl + t1l) | 0
41062 eh = (dh + t1h + getCarry(el, dl)) | 0
41063 dh = ch
41064 dl = cl
41065 ch = bh
41066 cl = bl
41067 bh = ah
41068 bl = al
41069 al = (t1l + t2l) | 0
41070 ah = (t1h + t2h + getCarry(al, t1l)) | 0
41071 }
ab78acc6 41072
8b095871
IC
41073 this._al = (this._al + al) | 0
41074 this._bl = (this._bl + bl) | 0
41075 this._cl = (this._cl + cl) | 0
41076 this._dl = (this._dl + dl) | 0
41077 this._el = (this._el + el) | 0
41078 this._fl = (this._fl + fl) | 0
41079 this._gl = (this._gl + gl) | 0
41080 this._hl = (this._hl + hl) | 0
ab78acc6 41081
8b095871
IC
41082 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
41083 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
41084 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
41085 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
41086 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
41087 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
41088 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
41089 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
ab78acc6
IC
41090}
41091
8b095871
IC
41092Sha512.prototype._hash = function () {
41093 var H = new Buffer(64)
ab78acc6 41094
8b095871
IC
41095 function writeInt64BE (h, l, offset) {
41096 H.writeInt32BE(h, offset)
41097 H.writeInt32BE(l, offset + 4)
41098 }
ab78acc6 41099
8b095871
IC
41100 writeInt64BE(this._ah, this._al, 0)
41101 writeInt64BE(this._bh, this._bl, 8)
41102 writeInt64BE(this._ch, this._cl, 16)
41103 writeInt64BE(this._dh, this._dl, 24)
41104 writeInt64BE(this._eh, this._el, 32)
41105 writeInt64BE(this._fh, this._fl, 40)
41106 writeInt64BE(this._gh, this._gl, 48)
41107 writeInt64BE(this._hh, this._hl, 56)
ab78acc6 41108
8b095871 41109 return H
ebd8d4e8
IC
41110}
41111
8b095871 41112module.exports = Sha512
ebd8d4e8 41113
ab78acc6 41114}).call(this,require("buffer").Buffer)
8b095871
IC
41115},{"./hash":79,"buffer":5,"inherits":63}],87:[function(require,module,exports){
41116var isHexPrefixed = require('is-hex-prefixed');
d5dc92fd 41117
8b095871
IC
41118/**
41119 * Removes '0x' from a given `String` is present
41120 * @param {String} str the string value
41121 * @return {String|Optional} a string by pass if necessary
41122 */
41123module.exports = function stripHexPrefix(str) {
41124 if (typeof str !== 'string') {
41125 return str;
41126 }
07ac4350 41127
8b095871
IC
41128 return isHexPrefixed(str) ? str.slice(2) : str;
41129}
07ac4350 41130
8b095871
IC
41131},{"is-hex-prefixed":64}]},{},[31])(31)
41132});</script>
8a1f452d 41133 <script>function convertRippleAdrr(address) {
41134 return window.basex('rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz').encode(
41135 window.basex('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz').decode(address)
41136 )
41137 }
41138
41139function convertRipplePriv(priv) {
920eb591 41140 return window.basex('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz').decode(priv).toString("hex").slice(2,66)
8a1f452d 41141}
41142
41143</script>
ab78acc6 41144 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
80c4dd2a
IC
41145
41146//// base.js
41147
41148/** @fileOverview Javascript cryptography implementation.
41149 *
41150 * Crush to remove comments, shorten variable names and
41151 * generally reduce transmission size.
41152 *
41153 * @author Emily Stark
41154 * @author Mike Hamburg
41155 * @author Dan Boneh
41156 */
41157
41158"use strict";
41159/*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
41160/*global document, window, escape, unescape, module, require, Uint32Array */
41161
41162/** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
41163var sjcl = {
41164 /** @namespace Symmetric ciphers. */
41165 cipher: {},
41166
41167 /** @namespace Hash functions. Right now only SHA256 is implemented. */
41168 hash: {},
41169
41170 /** @namespace Key exchange functions. Right now only SRP is implemented. */
41171 keyexchange: {},
41172
41173 /** @namespace Block cipher modes of operation. */
41174 mode: {},
41175
41176 /** @namespace Miscellaneous. HMAC and PBKDF2. */
41177 misc: {},
41178
41179 /**
41180 * @namespace Bit array encoders and decoders.
41181 *
41182 * @description
41183 * The members of this namespace are functions which translate between
41184 * SJCL's bitArrays and other objects (usually strings). Because it
41185 * isn't always clear which direction is encoding and which is decoding,
41186 * the method names are "fromBits" and "toBits".
41187 */
41188 codec: {},
41189
41190 /** @namespace Exceptions. */
41191 exception: {
41192 /** @constructor Ciphertext is corrupt. */
41193 corrupt: function(message) {
41194 this.toString = function() { return "CORRUPT: "+this.message; };
41195 this.message = message;
41196 },
41197
41198 /** @constructor Invalid parameter. */
41199 invalid: function(message) {
41200 this.toString = function() { return "INVALID: "+this.message; };
41201 this.message = message;
41202 },
41203
41204 /** @constructor Bug or missing feature in SJCL. @constructor */
41205 bug: function(message) {
41206 this.toString = function() { return "BUG: "+this.message; };
41207 this.message = message;
41208 },
41209
41210 /** @constructor Something isn't ready. */
41211 notReady: function(message) {
41212 this.toString = function() { return "NOT READY: "+this.message; };
41213 this.message = message;
ebd8d4e8 41214 }
80c4dd2a
IC
41215 }
41216};
41217
41218if(typeof module !== 'undefined' && module.exports){
41219 module.exports = sjcl;
41220}
41221if (typeof define === "function") {
41222 define([], function () {
41223 return sjcl;
41224 });
41225}
41226
41227
41228//// bitArray.js
41229
41230/** @fileOverview Arrays of bits, encoded as arrays of Numbers.
41231 *
41232 * @author Emily Stark
41233 * @author Mike Hamburg
41234 * @author Dan Boneh
41235 */
41236
41237/** @namespace Arrays of bits, encoded as arrays of Numbers.
41238 *
41239 * @description
41240 * <p>
41241 * These objects are the currency accepted by SJCL's crypto functions.
41242 * </p>
41243 *
41244 * <p>
41245 * Most of our crypto primitives operate on arrays of 4-byte words internally,
41246 * but many of them can take arguments that are not a multiple of 4 bytes.
41247 * This library encodes arrays of bits (whose size need not be a multiple of 8
41248 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
41249 * array of words, 32 bits at a time. Since the words are double-precision
41250 * floating point numbers, they fit some extra data. We use this (in a private,
41251 * possibly-changing manner) to encode the number of bits actually present
41252 * in the last word of the array.
41253 * </p>
41254 *
41255 * <p>
41256 * Because bitwise ops clear this out-of-band data, these arrays can be passed
41257 * to ciphers like AES which want arrays of words.
41258 * </p>
41259 */
41260sjcl.bitArray = {
41261 /**
41262 * Array slices in units of bits.
41263 * @param {bitArray} a The array to slice.
41264 * @param {Number} bstart The offset to the start of the slice, in bits.
41265 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
41266 * slice until the end of the array.
41267 * @return {bitArray} The requested slice.
41268 */
41269 bitSlice: function (a, bstart, bend) {
41270 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
41271 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
41272 },
41273
41274 /**
41275 * Extract a number packed into a bit array.
41276 * @param {bitArray} a The array to slice.
41277 * @param {Number} bstart The offset to the start of the slice, in bits.
41278 * @param {Number} length The length of the number to extract.
41279 * @return {Number} The requested slice.
41280 */
41281 extract: function(a, bstart, blength) {
41282 // FIXME: this Math.floor is not necessary at all, but for some reason
41283 // seems to suppress a bug in the Chromium JIT.
41284 var x, sh = Math.floor((-bstart-blength) & 31);
41285 if ((bstart + blength - 1 ^ bstart) & -32) {
41286 // it crosses a boundary
41287 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
41288 } else {
41289 // within a single word
41290 x = a[bstart/32|0] >>> sh;
ebd8d4e8 41291 }
80c4dd2a
IC
41292 return x & ((1<<blength) - 1);
41293 },
41294
41295 /**
41296 * Concatenate two bit arrays.
41297 * @param {bitArray} a1 The first array.
41298 * @param {bitArray} a2 The second array.
41299 * @return {bitArray} The concatenation of a1 and a2.
41300 */
41301 concat: function (a1, a2) {
41302 if (a1.length === 0 || a2.length === 0) {
41303 return a1.concat(a2);
41304 }
41305
41306 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
41307 if (shift === 32) {
41308 return a1.concat(a2);
41309 } else {
41310 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
ebd8d4e8 41311 }
80c4dd2a
IC
41312 },
41313
41314 /**
41315 * Find the length of an array of bits.
41316 * @param {bitArray} a The array.
41317 * @return {Number} The length of a, in bits.
41318 */
41319 bitLength: function (a) {
41320 var l = a.length, x;
41321 if (l === 0) { return 0; }
41322 x = a[l - 1];
41323 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
41324 },
41325
41326 /**
41327 * Truncate an array.
41328 * @param {bitArray} a The array.
41329 * @param {Number} len The length to truncate to, in bits.
41330 * @return {bitArray} A new array, truncated to len bits.
41331 */
41332 clamp: function (a, len) {
41333 if (a.length * 32 < len) { return a; }
41334 a = a.slice(0, Math.ceil(len / 32));
41335 var l = a.length;
41336 len = len & 31;
41337 if (l > 0 && len) {
41338 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
41339 }
41340 return a;
41341 },
41342
41343 /**
41344 * Make a partial word for a bit array.
41345 * @param {Number} len The number of bits in the word.
41346 * @param {Number} x The bits.
41347 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
41348 * @return {Number} The partial word.
41349 */
41350 partial: function (len, x, _end) {
41351 if (len === 32) { return x; }
41352 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
41353 },
41354
41355 /**
41356 * Get the number of bits used by a partial word.
41357 * @param {Number} x The partial word.
41358 * @return {Number} The number of bits used by the partial word.
41359 */
41360 getPartial: function (x) {
41361 return Math.round(x/0x10000000000) || 32;
41362 },
41363
41364 /**
41365 * Compare two arrays for equality in a predictable amount of time.
41366 * @param {bitArray} a The first array.
41367 * @param {bitArray} b The second array.
41368 * @return {boolean} true if a == b; false otherwise.
41369 */
41370 equal: function (a, b) {
41371 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
41372 return false;
ebd8d4e8 41373 }
80c4dd2a
IC
41374 var x = 0, i;
41375 for (i=0; i<a.length; i++) {
41376 x |= a[i]^b[i];
ebd8d4e8 41377 }
80c4dd2a
IC
41378 return (x === 0);
41379 },
41380
41381 /** Shift an array right.
41382 * @param {bitArray} a The array to shift.
41383 * @param {Number} shift The number of bits to shift.
41384 * @param {Number} [carry=0] A byte to carry in
41385 * @param {bitArray} [out=[]] An array to prepend to the output.
41386 * @private
41387 */
41388 _shiftRight: function (a, shift, carry, out) {
41389 var i, last2=0, shift2;
41390 if (out === undefined) { out = []; }
41391
41392 for (; shift >= 32; shift -= 32) {
41393 out.push(carry);
41394 carry = 0;
41395 }
41396 if (shift === 0) {
41397 return out.concat(a);
41398 }
41399
41400 for (i=0; i<a.length; i++) {
41401 out.push(carry | a[i]>>>shift);
41402 carry = a[i] << (32-shift);
41403 }
41404 last2 = a.length ? a[a.length-1] : 0;
41405 shift2 = sjcl.bitArray.getPartial(last2);
41406 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
41407 return out;
41408 },
41409
41410 /** xor a block of 4 words together.
41411 * @private
41412 */
41413 _xor4: function(x,y) {
41414 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
41415 },
41416
41417 /** byteswap a word array inplace.
41418 * (does not handle partial words)
41419 * @param {sjcl.bitArray} a word array
41420 * @return {sjcl.bitArray} byteswapped array
41421 */
41422 byteswapM: function(a) {
41423 var i, v, m = 0xff00;
41424 for (i = 0; i < a.length; ++i) {
41425 v = a[i];
41426 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
ebd8d4e8 41427 }
80c4dd2a
IC
41428 return a;
41429 }
41430};
41431
41432
41433//// codecString.js
41434
41435/** @fileOverview Bit array codec implementations.
41436 *
41437 * @author Emily Stark
41438 * @author Mike Hamburg
41439 * @author Dan Boneh
41440 */
41441
41442/** @namespace UTF-8 strings */
41443sjcl.codec.utf8String = {
41444 /** Convert from a bitArray to a UTF-8 string. */
41445 fromBits: function (arr) {
41446 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
41447 for (i=0; i<bl/8; i++) {
41448 if ((i&3) === 0) {
41449 tmp = arr[i/4];
41450 }
41451 out += String.fromCharCode(tmp >>> 24);
41452 tmp <<= 8;
ebd8d4e8 41453 }
80c4dd2a
IC
41454 return decodeURIComponent(escape(out));
41455 },
41456
41457 /** Convert from a UTF-8 string to a bitArray. */
41458 toBits: function (str) {
41459 str = unescape(encodeURIComponent(str));
41460 var out = [], i, tmp=0;
41461 for (i=0; i<str.length; i++) {
41462 tmp = tmp << 8 | str.charCodeAt(i);
41463 if ((i&3) === 3) {
41464 out.push(tmp);
41465 tmp = 0;
41466 }
ebd8d4e8 41467 }
80c4dd2a
IC
41468 if (i&3) {
41469 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
ebd8d4e8 41470 }
80c4dd2a
IC
41471 return out;
41472 }
41473};
41474
41475
41476//// codecHex.js
41477
41478/** @fileOverview Bit array codec implementations.
41479 *
41480 * @author Emily Stark
41481 * @author Mike Hamburg
41482 * @author Dan Boneh
41483 */
41484
41485/** @namespace Hexadecimal */
41486sjcl.codec.hex = {
41487 /** Convert from a bitArray to a hex string. */
41488 fromBits: function (arr) {
41489 var out = "", i;
41490 for (i=0; i<arr.length; i++) {
41491 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
ebd8d4e8 41492 }
80c4dd2a
IC
41493 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
41494 },
41495 /** Convert from a hex string to a bitArray. */
41496 toBits: function (str) {
41497 var i, out=[], len;
41498 str = str.replace(/\s|0x/g, "");
41499 len = str.length;
41500 str = str + "00000000";
41501 for (i=0; i<str.length; i+=8) {
41502 out.push(parseInt(str.substr(i,8),16)^0);
ebd8d4e8 41503 }
80c4dd2a
IC
41504 return sjcl.bitArray.clamp(out, len*4);
41505 }
41506};
41507
41508
41509//// sha512.js
41510
41511/** @fileOverview Javascript SHA-512 implementation.
41512 *
41513 * This implementation was written for CryptoJS by Jeff Mott and adapted for
41514 * SJCL by Stefan Thomas.
41515 *
41516 * CryptoJS (c) 2009–2012 by Jeff Mott. All rights reserved.
41517 * Released with New BSD License
41518 *
41519 * @author Emily Stark
41520 * @author Mike Hamburg
41521 * @author Dan Boneh
41522 * @author Jeff Mott
41523 * @author Stefan Thomas
41524 */
41525
41526/**
41527 * Context for a SHA-512 operation in progress.
41528 * @constructor
41529 * @class Secure Hash Algorithm, 512 bits.
41530 */
41531sjcl.hash.sha512 = function (hash) {
41532 if (!this._key[0]) { this._precompute(); }
41533 if (hash) {
41534 this._h = hash._h.slice(0);
41535 this._buffer = hash._buffer.slice(0);
41536 this._length = hash._length;
41537 } else {
41538 this.reset();
41539 }
41540};
41541
41542/**
41543 * Hash a string or an array of words.
41544 * @static
41545 * @param {bitArray|String} data the data to hash.
41546 * @return {bitArray} The hash value, an array of 16 big-endian words.
41547 */
41548sjcl.hash.sha512.hash = function (data) {
41549 return (new sjcl.hash.sha512()).update(data).finalize();
41550};
41551
41552sjcl.hash.sha512.prototype = {
41553 /**
41554 * The hash's block size, in bits.
41555 * @constant
41556 */
41557 blockSize: 1024,
41558
41559 /**
41560 * Reset the hash state.
41561 * @return this
41562 */
41563 reset:function () {
41564 this._h = this._init.slice(0);
41565 this._buffer = [];
41566 this._length = 0;
41567 return this;
41568 },
41569
41570 /**
41571 * Input several words to the hash.
41572 * @param {bitArray|String} data the data to hash.
41573 * @return this
41574 */
41575 update: function (data) {
41576 if (typeof data === "string") {
41577 data = sjcl.codec.utf8String.toBits(data);
ebd8d4e8 41578 }
80c4dd2a
IC
41579 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
41580 ol = this._length,
41581 nl = this._length = ol + sjcl.bitArray.bitLength(data);
41582 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
41583 this._block(b.splice(0,32));
ebd8d4e8 41584 }
80c4dd2a
IC
41585 return this;
41586 },
41587
41588 /**
41589 * Complete hashing and output the hash value.
41590 * @return {bitArray} The hash value, an array of 16 big-endian words.
41591 */
41592 finalize:function () {
41593 var i, b = this._buffer, h = this._h;
41594
41595 // Round out and push the buffer
41596 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
41597
41598 // Round out the buffer to a multiple of 32 words, less the 4 length words.
41599 for (i = b.length + 4; i & 31; i++) {
41600 b.push(0);
ebd8d4e8 41601 }
80c4dd2a
IC
41602
41603 // append the length
41604 b.push(0);
41605 b.push(0);
41606 b.push(Math.floor(this._length / 0x100000000));
41607 b.push(this._length | 0);
41608
41609 while (b.length) {
41610 this._block(b.splice(0,32));
ebd8d4e8 41611 }
80c4dd2a
IC
41612
41613 this.reset();
41614 return h;
41615 },
41616
41617 /**
41618 * The SHA-512 initialization vector, to be precomputed.
41619 * @private
41620 */
41621 _init:[],
41622
41623 /**
41624 * Least significant 24 bits of SHA512 initialization values.
41625 *
41626 * Javascript only has 53 bits of precision, so we compute the 40 most
41627 * significant bits and add the remaining 24 bits as constants.
41628 *
41629 * @private
41630 */
41631 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
41632
41633 /*
41634 _init:
41635 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
41636 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
41637 */
41638
41639 /**
41640 * The SHA-512 hash key, to be precomputed.
41641 * @private
41642 */
41643 _key:[],
41644
41645 /**
41646 * Least significant 24 bits of SHA512 key values.
41647 * @private
41648 */
41649 _keyr:
41650 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
41651 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
41652 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
41653 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
41654 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
41655 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
41656 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
41657 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
41658 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
41659 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
41660
41661 /*
41662 _key:
41663 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
41664 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
41665 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
41666 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
41667 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
41668 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
41669 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
41670 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
41671 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
41672 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
41673 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
41674 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
41675 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
41676 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
41677 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
41678 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
41679 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
41680 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
41681 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
41682 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
41683 */
41684
41685 /**
41686 * Function to precompute _init and _key.
41687 * @private
41688 */
41689 _precompute: function () {
41690 // XXX: This code is for precomputing the SHA256 constants, change for
41691 // SHA512 and re-enable.
41692 var i = 0, prime = 2, factor;
41693
41694 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
41695 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
41696
41697 outer: for (; i<80; prime++) {
41698 for (factor=2; factor*factor <= prime; factor++) {
41699 if (prime % factor === 0) {
41700 // not a prime
41701 continue outer;
ebd8d4e8 41702 }
80c4dd2a
IC
41703 }
41704
41705 if (i<8) {
41706 this._init[i*2] = frac(Math.pow(prime, 1/2));
41707 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
41708 }
41709 this._key[i*2] = frac(Math.pow(prime, 1/3));
41710 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
41711 i++;
ebd8d4e8 41712 }
80c4dd2a
IC
41713 },
41714
41715 /**
41716 * Perform one cycle of SHA-512.
41717 * @param {bitArray} words one block of words.
41718 * @private
41719 */
41720 _block:function (words) {
41721 var i, wrh, wrl,
41722 w = words.slice(0),
41723 h = this._h,
41724 k = this._key,
41725 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
41726 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
41727 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
41728 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
41729
41730 // Working variables
41731 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
41732 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
41733 eh = h4h, el = h4l, fh = h5h, fl = h5l,
41734 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
41735
41736 for (i=0; i<80; i++) {
41737 // load up the input word for this round
41738 if (i<16) {
41739 wrh = w[i * 2];
41740 wrl = w[i * 2 + 1];
41741 } else {
41742 // Gamma0
41743 var gamma0xh = w[(i-15) * 2];
41744 var gamma0xl = w[(i-15) * 2 + 1];
41745 var gamma0h =
41746 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
41747 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
41748 (gamma0xh >>> 7);
41749 var gamma0l =
41750 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
41751 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
41752 ((gamma0xh << 25) | (gamma0xl >>> 7));
41753
41754 // Gamma1
41755 var gamma1xh = w[(i-2) * 2];
41756 var gamma1xl = w[(i-2) * 2 + 1];
41757 var gamma1h =
41758 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
41759 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
41760 (gamma1xh >>> 6);
41761 var gamma1l =
41762 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
41763 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
41764 ((gamma1xh << 26) | (gamma1xl >>> 6));
41765
41766 // Shortcuts
41767 var wr7h = w[(i-7) * 2];
41768 var wr7l = w[(i-7) * 2 + 1];
41769
41770 var wr16h = w[(i-16) * 2];
41771 var wr16l = w[(i-16) * 2 + 1];
41772
41773 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
41774 wrl = gamma0l + wr7l;
41775 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
41776 wrl += gamma1l;
41777 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
41778 wrl += wr16l;
41779 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
41780 }
41781
41782 w[i*2] = wrh |= 0;
41783 w[i*2 + 1] = wrl |= 0;
41784
41785 // Ch
41786 var chh = (eh & fh) ^ (~eh & gh);
41787 var chl = (el & fl) ^ (~el & gl);
41788
41789 // Maj
41790 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
41791 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
41792
41793 // Sigma0
41794 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
41795 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
41796
41797 // Sigma1
41798 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
41799 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
41800
41801 // K(round)
41802 var krh = k[i*2];
41803 var krl = k[i*2+1];
41804
41805 // t1 = h + sigma1 + ch + K(round) + W(round)
41806 var t1l = hl + sigma1l;
41807 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
41808 t1l += chl;
41809 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
41810 t1l += krl;
41811 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
41812 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
41813 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
41814
41815 // t2 = sigma0 + maj
41816 var t2l = sigma0l + majl;
41817 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
41818
41819 // Update working variables
41820 hh = gh;
41821 hl = gl;
41822 gh = fh;
41823 gl = fl;
41824 fh = eh;
41825 fl = el;
41826 el = (dl + t1l) | 0;
41827 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
41828 dh = ch;
41829 dl = cl;
41830 ch = bh;
41831 cl = bl;
41832 bh = ah;
41833 bl = al;
41834 al = (t1l + t2l) | 0;
41835 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
41836 }
41837
41838 // Intermediate hash
41839 h0l = h[1] = (h0l + al) | 0;
41840 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
41841 h1l = h[3] = (h1l + bl) | 0;
41842 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
41843 h2l = h[5] = (h2l + cl) | 0;
41844 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
41845 h3l = h[7] = (h3l + dl) | 0;
41846 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
41847 h4l = h[9] = (h4l + el) | 0;
41848 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
41849 h5l = h[11] = (h5l + fl) | 0;
41850 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
41851 h6l = h[13] = (h6l + gl) | 0;
41852 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
41853 h7l = h[15] = (h7l + hl) | 0;
41854 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
41855 }
41856};
41857
41858
41859//// hmac.js
41860
41861/** @fileOverview HMAC implementation.
41862 *
41863 * @author Emily Stark
41864 * @author Mike Hamburg
41865 * @author Dan Boneh
41866 */
41867
41868/** HMAC with the specified hash function.
41869 * @constructor
41870 * @param {bitArray} key the key for HMAC.
41871 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
41872 */
41873sjcl.misc.hmac = function (key, Hash) {
41874 this._hash = Hash = Hash || sjcl.hash.sha256;
41875 var exKey = [[],[]], i,
41876 bs = Hash.prototype.blockSize / 32;
41877 this._baseHash = [new Hash(), new Hash()];
41878
41879 if (key.length > bs) {
41880 key = Hash.hash(key);
41881 }
41882
41883 for (i=0; i<bs; i++) {
41884 exKey[0][i] = key[i]^0x36363636;
41885 exKey[1][i] = key[i]^0x5C5C5C5C;
41886 }
41887
41888 this._baseHash[0].update(exKey[0]);
41889 this._baseHash[1].update(exKey[1]);
41890 this._resultHash = new Hash(this._baseHash[0]);
41891};
41892
41893/** HMAC with the specified hash function. Also called encrypt since it's a prf.
41894 * @param {bitArray|String} data The data to mac.
41895 */
41896sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
41897 if (!this._updated) {
41898 this.update(data);
41899 return this.digest(data);
41900 } else {
41901 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
41902 }
41903};
41904
41905sjcl.misc.hmac.prototype.reset = function () {
41906 this._resultHash = new this._hash(this._baseHash[0]);
41907 this._updated = false;
41908};
41909
41910sjcl.misc.hmac.prototype.update = function (data) {
41911 this._updated = true;
41912 this._resultHash.update(data);
41913};
41914
41915sjcl.misc.hmac.prototype.digest = function () {
41916 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
41917
41918 this.reset();
41919
41920 return result;
41921};
41922
41923
41924//// pbkdf2.js
41925
41926
41927/** @fileOverview Password-based key-derivation function, version 2.0.
41928 *
41929 * @author Emily Stark
41930 * @author Mike Hamburg
41931 * @author Dan Boneh
41932 */
41933
41934/** Password-Based Key-Derivation Function, version 2.0.
41935 *
41936 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
41937 *
41938 * This is the method specified by RSA's PKCS #5 standard.
41939 *
41940 * @param {bitArray|String} password The password.
41941 * @param {bitArray|String} salt The salt. Should have lots of entropy.
41942 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
41943 * @param {Number} [length] The length of the derived key. Defaults to the
41944 output size of the hash function.
41945 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
41946 * @return {bitArray} the derived key.
41947 */
41948sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
41949 count = count || 1000;
41950
41951 if (length < 0 || count < 0) {
41952 throw sjcl.exception.invalid("invalid params to pbkdf2");
41953 }
41954
41955 if (typeof password === "string") {
41956 password = sjcl.codec.utf8String.toBits(password);
41957 }
41958
41959 if (typeof salt === "string") {
41960 salt = sjcl.codec.utf8String.toBits(salt);
41961 }
41962
41963 Prff = Prff || sjcl.misc.hmac;
41964
41965 var prf = new Prff(password),
41966 u, ui, i, j, k, out = [], b = sjcl.bitArray;
41967
41968 for (k = 1; 32 * out.length < (length || 1); k++) {
41969 u = ui = prf.encrypt(b.concat(salt,[k]));
41970
41971 for (i=1; i<count; i++) {
41972 ui = prf.encrypt(ui);
41973 for (j=0; j<ui.length; j++) {
41974 u[j] ^= ui[j];
41975 }
ebd8d4e8 41976 }
80c4dd2a
IC
41977
41978 out = out.concat(u);
41979 }
41980
41981 if (length) { out = b.clamp(out, length); }
41982
41983 return out;
41984};
41985
41986
41987//// sha256.js
41988
41989/** @fileOverview Javascript SHA-256 implementation.
41990 *
41991 * An older version of this implementation is available in the public
41992 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
41993 * Stanford University 2008-2010 and BSD-licensed for liability
41994 * reasons.
41995 *
41996 * Special thanks to Aldo Cortesi for pointing out several bugs in
41997 * this code.
41998 *
41999 * @author Emily Stark
42000 * @author Mike Hamburg
42001 * @author Dan Boneh
42002 */
42003
42004/**
42005 * Context for a SHA-256 operation in progress.
42006 * @constructor
42007 * @class Secure Hash Algorithm, 256 bits.
42008 */
42009sjcl.hash.sha256 = function (hash) {
42010 if (!this._key[0]) { this._precompute(); }
42011 if (hash) {
42012 this._h = hash._h.slice(0);
42013 this._buffer = hash._buffer.slice(0);
42014 this._length = hash._length;
42015 } else {
42016 this.reset();
42017 }
42018};
42019
42020/**
42021 * Hash a string or an array of words.
42022 * @static
42023 * @param {bitArray|String} data the data to hash.
42024 * @return {bitArray} The hash value, an array of 16 big-endian words.
42025 */
42026sjcl.hash.sha256.hash = function (data) {
42027 return (new sjcl.hash.sha256()).update(data).finalize();
42028};
42029
42030sjcl.hash.sha256.prototype = {
42031 /**
42032 * The hash's block size, in bits.
42033 * @constant
42034 */
42035 blockSize: 512,
42036
42037 /**
42038 * Reset the hash state.
42039 * @return this
42040 */
42041 reset:function () {
42042 this._h = this._init.slice(0);
42043 this._buffer = [];
42044 this._length = 0;
42045 return this;
42046 },
42047
42048 /**
42049 * Input several words to the hash.
42050 * @param {bitArray|String} data the data to hash.
42051 * @return this
42052 */
42053 update: function (data) {
42054 if (typeof data === "string") {
42055 data = sjcl.codec.utf8String.toBits(data);
42056 }
42057 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
42058 ol = this._length,
42059 nl = this._length = ol + sjcl.bitArray.bitLength(data);
42060 for (i = 512+ol & -512; i <= nl; i+= 512) {
42061 this._block(b.splice(0,16));
ebd8d4e8 42062 }
3af2954a 42063 return this;
80c4dd2a
IC
42064 },
42065
42066 /**
42067 * Complete hashing and output the hash value.
42068 * @return {bitArray} The hash value, an array of 8 big-endian words.
42069 */
42070 finalize:function () {
42071 var i, b = this._buffer, h = this._h;
42072
42073 // Round out and push the buffer
42074 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
42075
42076 // Round out the buffer to a multiple of 16 words, less the 2 length words.
42077 for (i = b.length + 2; i & 15; i++) {
42078 b.push(0);
42079 }
42080
42081 // append the length
42082 b.push(Math.floor(this._length / 0x100000000));
42083 b.push(this._length | 0);
42084
42085 while (b.length) {
42086 this._block(b.splice(0,16));
42087 }
42088
42089 this.reset();
42090 return h;
42091 },
42092
42093 /**
42094 * The SHA-256 initialization vector, to be precomputed.
42095 * @private
42096 */
42097 _init:[],
42098 /*
42099 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
42100 */
42101
42102 /**
42103 * The SHA-256 hash key, to be precomputed.
42104 * @private
42105 */
42106 _key:[],
42107 /*
42108 _key:
42109 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
42110 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
42111 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
42112 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
42113 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
42114 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
42115 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
42116 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
42117 */
42118
42119
42120 /**
42121 * Function to precompute _init and _key.
42122 * @private
42123 */
42124 _precompute: function () {
42125 var i = 0, prime = 2, factor;
42126
42127 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
42128
42129 outer: for (; i<64; prime++) {
42130 for (factor=2; factor*factor <= prime; factor++) {
42131 if (prime % factor === 0) {
42132 // not a prime
42133 continue outer;
ebd8d4e8 42134 }
80c4dd2a
IC
42135 }
42136
42137 if (i<8) {
42138 this._init[i] = frac(Math.pow(prime, 1/2));
42139 }
42140 this._key[i] = frac(Math.pow(prime, 1/3));
42141 i++;
ebd8d4e8 42142 }
80c4dd2a
IC
42143 },
42144
42145 /**
42146 * Perform one cycle of SHA-256.
42147 * @param {bitArray} words one block of words.
42148 * @private
42149 */
42150 _block:function (words) {
42151 var i, tmp, a, b,
42152 w = words.slice(0),
42153 h = this._h,
42154 k = this._key,
42155 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
42156 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
42157
42158 /* Rationale for placement of |0 :
42159 * If a value can overflow is original 32 bits by a factor of more than a few
42160 * million (2^23 ish), there is a possibility that it might overflow the
42161 * 53-bit mantissa and lose precision.
42162 *
42163 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
42164 * propagates around the loop, and on the hash state h[]. I don't believe
42165 * that the clamps on h4 and on h0 are strictly necessary, but it's close
42166 * (for h4 anyway), and better safe than sorry.
42167 *
42168 * The clamps on h[] are necessary for the output to be correct even in the
42169 * common case and for short inputs.
42170 */
42171 for (i=0; i<64; i++) {
42172 // load up the input word for this round
42173 if (i<16) {
42174 tmp = w[i];
42175 } else {
42176 a = w[(i+1 ) & 15];
42177 b = w[(i+14) & 15];
42178 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
42179 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
42180 w[i&15] + w[(i+9) & 15]) | 0;
42181 }
42182
42183 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
42184
42185 // shift register
42186 h7 = h6; h6 = h5; h5 = h4;
42187 h4 = h3 + tmp | 0;
42188 h3 = h2; h2 = h1; h1 = h0;
42189
42190 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
42191 }
42192
42193 h[0] = h[0]+h0 | 0;
42194 h[1] = h[1]+h1 | 0;
42195 h[2] = h[2]+h2 | 0;
42196 h[3] = h[3]+h3 | 0;
42197 h[4] = h[4]+h4 | 0;
42198 h[5] = h[5]+h5 | 0;
42199 h[6] = h[6]+h6 | 0;
42200 h[7] = h[7]+h7 | 0;
42201 }
42202};
ea87f1d3
IC
42203</script>
42204 <script>// An extremely basic translation library
42205//
42206// Example usage:
42207//
42208// Set some html to be translated. Do this using the 'data-translate' attribute:
42209//
42210// <div data-translate>Test</div>
42211// <div data-translate-html><em>keep em tag</em></div>
52da415f
IC
42212// <input data-translate-placeholder placeholder="Example placeholder">
42213// <span data-translate-title title="Example title"></span>
ea87f1d3
IC
42214//
42215// Obtain all the phrases to be translated via js debug console:
42216//
42217// Translate.phrasesAsJson();
42218//
42219// Use that template to translate the phrases into another language.
42220// Leave the key the same. Change the value to the new language.
42221//
42222// Create a js file to load the new phrases. In this example for Spanish,
42223// es.js will contain the following code:
42224//
42225// Translate.loadForeignPhrases("es", {
42226// "Test": "Test in Spanish",
42227// "<em>keep em tag</em>": "<em>keep em tag in Spanish</em>",
52da415f
IC
42228// "Example placeholder": "Example placeholder in Spanish"
42229// "Example title": "Example title in Spanish"
ea87f1d3
IC
42230// });
42231//
42232// In your UI put a listener for clicking on the Spanish button:
42233//
42234// mySpanishButton.addEventListener("click", function() {
42235// Translate.setLanguage("es");
42236// });
42237// myEnglishButton.addEventListener("click", function() {
42238// Translate.setLanguage("en");
42239// });
42240
42241Translate = new (function() {
42242
42243 var defaultLanguage = "en";
42244
42245 var allPhrases = {};
42246 allPhrases[defaultLanguage] = {};
42247
42248 // Node types
42249
42250 var text = {
42251 selector: "[data-translate]",
42252 getKey: function() {
42253 return this.textContent.trim().replace(/\s+/g, " ");
42254 },
42255 setPhrase: function(p) {
42256 this.textContent = p;
42257 },
42258 }
42259
42260 var html = {
42261 selector: "[data-translate-html]",
42262 getKey: function() {
42263 return this.innerHTML.trim().replace(/\s+/g, " ");
42264 },
42265 setPhrase: function(p) {
42266 this.innerHTML = p;
42267 },
42268 }
42269
42270 var placeholder = {
42271 selector: "[data-translate-placeholder]",
42272 getKey: function() {
42273 return this.getAttribute("placeholder").trim().replace(/\s+/g, " ");
42274 },
42275 setPhrase: function(p) {
42276 this.setAttribute("placeholder", p);
42277 },
42278 }
42279
52da415f
IC
42280 var title = {
42281 selector: "[data-translate-title]",
42282 getKey: function() {
42283 return this.getAttribute("title").trim().replace(/\s+/g, " ");
42284 },
42285 setPhrase: function(p) {
42286 this.setAttribute("title", p);
42287 },
42288 }
42289
ea87f1d3
IC
42290 // Get elements to be translated
42291 var allEls = getEls(text)
42292 .concat(getEls(html))
52da415f
IC
42293 .concat(getEls(placeholder))
42294 .concat(getEls(title));
ea87f1d3
IC
42295
42296 // Provides access to phrases from a non-default language.
42297 // See phrases_en.js for example usage.
42298 this.loadForeignPhrases = function(language, phrases) {
42299 allPhrases[language] = phrases;
42300 }
42301
42302 // Displays a different language, eg "en" or "fr"
42303 this.setLanguage = function(language) {
42304 for (var i=0; i<allEls.length; i++) {
42305 var el = allEls[i];
42306 var key = el.key;
42307 if (!(language in allPhrases)) {
42308 console.log(language + " not in allPhrases");
42309 return;
42310 }
42311 if (!(key in allPhrases[language])) {
42312 console.log(language + " does not contain phrase: " + key);
42313 return;
42314 }
42315 var phrase = allPhrases[language][key];
42316 el.setPhrase(phrase);
42317 }
42318 }
42319
42320 // Converts the phrases to a key-pair json file.
42321 // This is a good way to export phrases for use in translation tools.
42322 this.phrasesAsJson = function(language) {
42323 var keys = [];
42324 for (var i=0; i<allEls.length; i++) {
42325 var el = allEls[i];
42326 var key = el.key;
42327 keys.push(key);
42328 }
42329 keys.sort();
42330 var output = {};
42331 for (var i=0; i<keys.length; i++) {
42332 var key = keys[i];
42333 var translated = "";
42334 if (language in allPhrases && key in allPhrases[language]) {
42335 translated = allPhrases[language][key];
42336 }
42337 output[key] = translated;
42338 }
42339 return JSON.stringify(output, null, 2);
42340 }
42341
42342 function getEls(nodeType) {
42343 var nodes = document.querySelectorAll(nodeType.selector);
42344 var els = [];
42345 for (var i=0; i<nodes.length; i++) {
42346 var node = nodes[i];
42347 node.getKey = nodeType.getKey;
42348 node.setPhrase = nodeType.setPhrase;
42349 node.key = node.getKey();
42350 allPhrases[defaultLanguage][node.key] = node.key;
42351 els.push(node);
42352 }
42353 return els;
42354 }
42355
42356})();
42357</script>
42358 <script>Translate.loadForeignPhrases("en",
42359{
42360 "<code>m/44'/0'/0'/0</code> generates public addresses": "<code>m/44'/0'/0'/0</code> generates public addresses",
42361 "<code>m/44'/0'/0'/1</code> generates change addresses": "<code>m/44'/0'/0'/1</code> generates change addresses",
42362 "<code>m/44'/0'/0'</code> generates extended keys for import / export": "<code>m/44'/0'/0'</code> generates extended keys for import / export",
42363 "<code>m/44'/0'/1'</code> for the next account. Continue incrementing for more accounts (most use a single account).": "<code>m/44'/0'/1'</code> for the next account. Continue incrementing for more accounts (most use a single account).",
42364 "Accepts binary, base 6, 6-sided dice, base 10, hexadecimal, cards": "Accepts binary, base 6, 6-sided dice, base 10, hexadecimal, cards",
42365 "Account": "Account",
42366 "Address": "Address",
42367 "Alternatively, download the file from the repository": "Alternatively, download the file from the repository",
42368 "BIP32 Derivation Path": "BIP32 Derivation Path",
42369 "BIP32 Extended Key": "BIP32 Extended Key",
42370 "BIP32 Extended Key (addresses only)": "BIP32 Extended Key (addresses only)",
42371 "BIP32 Root Key": "BIP32 Root Key",
42372 "BIP39 Mnemonic": "BIP39 Mnemonic",
42373 "BIP39 Passphrase (optional)": "BIP39 Passphrase (optional)",
42374 "BIP39 Seed": "BIP39 Seed",
42375 "Base 10": "Base 10",
42376 "Base 6": "Base 6",
42377 "Be careful - it can be easy to make mistakes if you don't know what you're doing.": "Be careful - it can be easy to make mistakes if you don't know what you're doing.",
42378 "Binary": "Binary",
42379 "Bitcoin Core": "Bitcoin Core",
42380 "Bits Per Event": "Bits Per Event",
42381 "Block Explorers": "Block Explorers",
42382 "Can be used with": "Can be used with",
42383 "Card": "Card",
42384 "Coin": "Coin",
42385 "Dice": "Dice",
42386 "Do <strong>NOT</strong> use phrases from books, lyrics from songs, your birthday or steet address, keyboard mashing, or anything you <i>think</i> is random, because chances are overwhelming it isn't random enough for the needs of this tool.": "Do <strong>NOT</strong> use phrases from books, lyrics from songs, your birthday or steet address, keyboard mashing, or anything you <i>think</i> is random, because chances are overwhelming it isn't random enough for the needs of this tool.",
42387 "Double-click that file to open it in a browser on any offline computer.": "Double-click that file to open it in a browser on any offline computer.",
42388 "Entropy": "Entropy",
42389 "Entropy Type": "Entropy Type",
42390 "Entropy is an advanced feature. Your mnemonic may be insecure if this feature is used incorrectly.": "Entropy is an advanced feature. Your mnemonic may be insecure if this feature is used incorrectly.",
42391 "Entropy values must be sourced from a <a href=\"https://en.wikipedia.org/wiki/Random_number_generation\" target=\"_blank\">strong source of randomness</a>.": "Entropy values must be sourced from a <a href=\"https://en.wikipedia.org/wiki/Random_number_generation\" target=\"_blank\">strong source of randomness</a>.",
42392 "Event Count": "Event Count",
42393 "External / Internal": "External / Internal",
42394 "Filtered Entropy": "Filtered Entropy",
42395 "For more info see the <a href=\"http://www.mycelium.com/\" target=\"_blank\">Mycelium Wallet homepage</a>": "For more info see the <a href=\"http://www.mycelium.com/\" target=\"_blank\">Mycelium Wallet homepage</a>",
42396 "For more info see the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki\" target=\"_blank\">BIP39 spec</a>.": "For more info see the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki\" target=\"_blank\">BIP39 spec</a>.",
42397 "For more info see the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki\" target=\"_blank\">BIP44 spec</a>.": "For more info see the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki\" target=\"_blank\">BIP44 spec</a>.",
42398 "For more info see the <a href=\"https://github.com/bitcoin/bitcoin/pull/8035\" target=\"_blank\">Bitcoin Core BIP32 implementation</a>": "For more info see the <a href=\"https://github.com/bitcoin/bitcoin/pull/8035\" target=\"_blank\">Bitcoin Core BIP32 implementation</a>",
42399 "For more info see the BIP32 spec": "For more info see the BIP32 spec",
42400 "From entropy length (3 words per 32 bits)": "From entropy length (3 words per 32 bits)",
42401 "Generate a random mnemonic, or enter your own below": "Generate a random mnemonic, or enter your own below",
42402 "Get the source code from the repository": "Get the source code from the repository",
42403 "Hex": "Hex",
42404 "Hierarchical Deterministic Wallets": "Hierarchical Deterministic Wallets",
42405 "If cryptographic randomness isn't available in your browser, this page will show a warning and the generate button will not work.": "If cryptographic randomness isn't available in your browser, this page will show a warning and the generate button will not work.",
42406 "In that case you might choose to use your own source of entropy.": "In that case you might choose to use your own source of entropy.",
42407 "In your browser, select file save-as, and save this page as a file.": "In your browser, select file save-as, and save this page as a file.",
42408 "Libraries": "Libraries",
42409 "Mnemonic Language": "Mnemonic Language",
42410 "Mnemonic Length": "Mnemonic Length",
42411 "Mnemonic code for generating deterministic keys": "Mnemonic code for generating deterministic keys",
42412 "More info": "More info",
42413 "Multi-Account Hierarchy for Deterministic Wallets": "Multi-Account Hierarchy for Deterministic Wallets",
42414 "Mycelium Wallet": "Mycelium Wallet",
42415 "Note these addreses are derived from the BIP32 Extended Key": "Note these addreses are derived from the BIP32 Extended Key",
42416 "Offline Usage": "Offline Usage",
42417 "Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xprv</code> key.": "Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xprv</code> key.",
42418 "Path": "Path",
42419 "Private Key": "Private Key",
42420 "Private Keys": "Private Keys",
42421 "Public Key": "Public Key",
42422 "Purpose": "Purpose",
42423 "Raw Binary": "Raw Binary",
42424 "Read more": "Read more",
42425 "Read more at the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki\" target=\"_blank\">official BIP32 spec</a>": "Read more at the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki\" target=\"_blank\">official BIP32 spec</a>",
42426 "Read more at the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki\">official BIP39 spec</a>": "Read more at the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki\">official BIP39 spec</a>",
42427 "Read more at the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki\" target=\"_blank\">official BIP44 spec</a>": "Read more at the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki\" target=\"_blank\">official BIP44 spec</a>",
42428 "See the demo at <a href=\"http://bip32.org/\" target=\"_blank\">bip32.org</a>": "See the demo at <a href=\"http://bip32.org/\" target=\"_blank\">bip32.org</a>",
42429 "Show": "Show",
42430 "Show more rows": "Show more rows",
42431 "Strength": "Strength",
42432 "Supply my own source of entropy": "Supply my own source of entropy",
42433 "The built in random generator can generally be trusted more than your own intuition about randomness.": "The built in random generator can generally be trusted more than your own intuition about randomness.",
42434 "The random mnemonic generator on this page uses a <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues\" target=\"_blank\">cryptographically secure random number generator</a>.": "The random mnemonic generator on this page uses a <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues\" target=\"_blank\">cryptographically secure random number generator</a>.",
42435 "This means flipping a fair coin, rolling a fair dice, noise measurements etc.": "This means flipping a fair coin, rolling a fair dice, noise measurements etc.",
42436 "This project is 100% open-source code": "This project is 100% open-source code",
42437 "Toggle": "Toggle",
42438 "Total Bits": "Total Bits",
42439 "Use hardened addresses": "Use hardened addresses",
42440 "Use path <code>m/0'/0'</code> with hardened addresses.": "Use path <code>m/0'/0'</code> with hardened addresses.",
42441 "Use path <code>m/44'/0'/0'</code>.": "Use path <code>m/44'/0'/0'</code>.",
42442 "Use private keys at <a href=\"https://web.archive.org/web/20150707020924/https://brainwallet.org/\" target=\"_blank\">brainwallet.org</a>.": "Use private keys at <a href=\"https://web.archive.org/web/20150707020924/https://brainwallet.org/\" target=\"_blank\">brainwallet.org</a>.",
42443 "Valid entropy values include:": "Valid entropy values include:",
42444 "Warning": "Warning",
42445 "Word Count": "Word Count",
42446 "You are not a good source of entropy.": "You are not a good source of entropy.",
42447 "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).": "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).",
42448 "You can use this tool without having to be online.": "You can use this tool without having to be online.",
42449 "words": "words"
42450}
42451);
dc55c6b0 42452</script>
ab78acc6 42453 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
3af2954a 42454WORDLISTS["english"] = [
ebd8d4e8
IC
42455"abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
42456"access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
42457"action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
42458"adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
42459"agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
42460"alien","all","alley","allow","almost","alone","alpha","already","also","alter",
42461"always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
42462"angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
42463"anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
42464"area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
42465"arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
42466"assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
42467"audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
42468"aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
42469"bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
42470"barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
42471"beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
42472"best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
42473"bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
42474"blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
42475"boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
42476"bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
42477"breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
42478"broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
42479"bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
42480"butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
42481"calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
42482"canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
42483"cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
42484"cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
42485"cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
42486"chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
42487"chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
42488"citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
42489"clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
42490"cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
42491"code","coffee","coil","coin","collect","color","column","combine","come","comfort",
42492"comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
42493"convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
42494"cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
42495"craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
42496"crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
42497"cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
42498"cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
42499"damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
42500"debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
42501"define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
42502"depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
42503"despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
42504"diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
42505"direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
42506"divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
42507"donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
42508"drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
42509"drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
42510"dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
42511"ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
42512"elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
42513"embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
42514"endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
42515"enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
42516"era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
42517"eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
42518"excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
42519"exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
42520"eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
42521"family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
42522"fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
42523"fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
42524"film","filter","final","find","fine","finger","finish","fire","firm","first",
42525"fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
42526"flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
42527"foam","focus","fog","foil","fold","follow","food","foot","force","forest",
42528"forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
42529"frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
42530"fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
42531"gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
42532"gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
42533"ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
42534"glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
42535"goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
42536"grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
42537"grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
42538"guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
42539"harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
42540"heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
42541"high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
42542"holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
42543"host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
42544"hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
42545"identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
42546"impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
42547"indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
42548"inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
42549"intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
42550"item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
42551"job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
42552"junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
42553"kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
42554"knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
42555"laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
42556"layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
42557"legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
42558"liar","liberty","library","license","life","lift","light","like","limb","limit",
42559"link","lion","liquid","list","little","live","lizard","load","loan","lobster",
42560"local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
42561"loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
42562"magic","magnet","maid","mail","main","major","make","mammal","man","manage",
42563"mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
42564"marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
42565"maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
42566"member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
42567"metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
42568"minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
42569"model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
42570"more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
42571"much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
42572"myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
42573"near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
42574"network","neutral","never","news","next","nice","night","noble","noise","nominee",
42575"noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
42576"nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
42577"obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
42578"oil","okay","old","olive","olympic","omit","once","one","onion","online",
42579"only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
42580"ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
42581"outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
42582"paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
42583"parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
42584"pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
42585"penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
42586"phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
42587"pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
42588"play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
42589"pole","police","pond","pony","pool","popular","portion","position","possible","post",
42590"potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
42591"present","pretty","prevent","price","pride","primary","print","priority","prison","private",
42592"prize","problem","process","produce","profit","program","project","promote","proof","property",
42593"prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
42594"punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
42595"pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
42596"raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
42597"ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
42598"ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
42599"reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
42600"relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
42601"repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
42602"result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
42603"ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
42604"ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
42605"romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
42606"rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
42607"safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
42608"satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
42609"scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
42610"scrub","sea","search","season","seat","second","secret","section","security","seed",
42611"seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
42612"session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
42613"sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
42614"short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
42615"siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
42616"sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
42617"skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
42618"slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
42619"snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
42620"soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
42621"sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
42622"speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
42623"spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
42624"spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
42625"stand","start","state","stay","steak","steel","stem","step","stereo","stick",
42626"still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
42627"strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
42628"success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
42629"sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
42630"suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
42631"swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
42632"tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
42633"teach","team","tell","ten","tenant","tennis","tent","term","test","text",
42634"thank","that","theme","then","theory","there","they","thing","this","thought",
42635"three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
42636"time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
42637"toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
42638"tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
42639"toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
42640"trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
42641"trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
42642"truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
42643"twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
42644"unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
42645"unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
42646"uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
42647"useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
42648"vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
42649"verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
42650"video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
42651"vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
42652"wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
42653"wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
42654"web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
42655"wheel","when","where","whip","whisper","wide","width","wife","wild","will",
42656"win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
42657"wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
42658"worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
42659"yellow","you","young","youth","zebra","zero","zone","zoo"]
0515eeec
IC
42660</script>
42661 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
42662WORDLISTS["japanese"] = [
42663"あいこくしん", "あいさつ", "あいだ", "あおぞら", "あかちゃん", "あきる", "あけがた", "あける", "あこがれる", "あさい",
42664"あさひ", "あしあと", "あじわう", "あずかる", "あずき", "あそぶ", "あたえる", "あたためる", "あたりまえ", "あたる",
42665"あつい", "あつかう", "あっしゅく", "あつまり", "あつめる", "あてな", "あてはまる", "あひる", "あぶら", "あぶる",
42666"あふれる", "あまい", "あまど", "あまやかす", "あまり", "あみもの", "あめりか", "あやまる", "あゆむ", "あらいぐま",
42667"あらし", "あらすじ", "あらためる", "あらゆる", "あらわす", "ありがとう", "あわせる", "あわてる", "あんい", "あんがい",
42668"あんこ", "あんぜん", "あんてい", "あんない", "あんまり", "いいだす", "いおん", "いがい", "いがく", "いきおい",
42669"いきなり", "いきもの", "いきる", "いくじ", "いくぶん", "いけばな", "いけん", "いこう", "いこく", "いこつ",
42670"いさましい", "いさん", "いしき", "いじゅう", "いじょう", "いじわる", "いずみ", "いずれ", "いせい", "いせえび",
42671"いせかい", "いせき", "いぜん", "いそうろう", "いそがしい", "いだい", "いだく", "いたずら", "いたみ", "いたりあ",
42672"いちおう", "いちじ", "いちど", "いちば", "いちぶ", "いちりゅう", "いつか", "いっしゅん", "いっせい", "いっそう",
42673"いったん", "いっち", "いってい", "いっぽう", "いてざ", "いてん", "いどう", "いとこ", "いない", "いなか",
42674"いねむり", "いのち", "いのる", "いはつ", "いばる", "いはん", "いびき", "いひん", "いふく", "いへん",
42675"いほう", "いみん", "いもうと", "いもたれ", "いもり", "いやがる", "いやす", "いよかん", "いよく", "いらい",
42676"いらすと", "いりぐち", "いりょう", "いれい", "いれもの", "いれる", "いろえんぴつ", "いわい", "いわう", "いわかん",
42677"いわば", "いわゆる", "いんげんまめ", "いんさつ", "いんしょう", "いんよう", "うえき", "うえる", "うおざ", "うがい",
42678"うかぶ", "うかべる", "うきわ", "うくらいな", "うくれれ", "うけたまわる", "うけつけ", "うけとる", "うけもつ", "うける",
42679"うごかす", "うごく", "うこん", "うさぎ", "うしなう", "うしろがみ", "うすい", "うすぎ", "うすぐらい", "うすめる",
42680"うせつ", "うちあわせ", "うちがわ", "うちき", "うちゅう", "うっかり", "うつくしい", "うったえる", "うつる", "うどん",
42681"うなぎ", "うなじ", "うなずく", "うなる", "うねる", "うのう", "うぶげ", "うぶごえ", "うまれる", "うめる",
42682"うもう", "うやまう", "うよく", "うらがえす", "うらぐち", "うらない", "うりあげ", "うりきれ", "うるさい", "うれしい",
42683"うれゆき", "うれる", "うろこ", "うわき", "うわさ", "うんこう", "うんちん", "うんてん", "うんどう", "えいえん",
42684"えいが", "えいきょう", "えいご", "えいせい", "えいぶん", "えいよう", "えいわ", "えおり", "えがお", "えがく",
42685"えきたい", "えくせる", "えしゃく", "えすて", "えつらん", "えのぐ", "えほうまき", "えほん", "えまき", "えもじ",
42686"えもの", "えらい", "えらぶ", "えりあ", "えんえん", "えんかい", "えんぎ", "えんげき", "えんしゅう", "えんぜつ",
42687"えんそく", "えんちょう", "えんとつ", "おいかける", "おいこす", "おいしい", "おいつく", "おうえん", "おうさま", "おうじ",
42688"おうせつ", "おうたい", "おうふく", "おうべい", "おうよう", "おえる", "おおい", "おおう", "おおどおり", "おおや",
42689"おおよそ", "おかえり", "おかず", "おがむ", "おかわり", "おぎなう", "おきる", "おくさま", "おくじょう", "おくりがな",
42690"おくる", "おくれる", "おこす", "おこなう", "おこる", "おさえる", "おさない", "おさめる", "おしいれ", "おしえる",
42691"おじぎ", "おじさん", "おしゃれ", "おそらく", "おそわる", "おたがい", "おたく", "おだやか", "おちつく", "おっと",
42692"おつり", "おでかけ", "おとしもの", "おとなしい", "おどり", "おどろかす", "おばさん", "おまいり", "おめでとう", "おもいで",
42693"おもう", "おもたい", "おもちゃ", "おやつ", "おやゆび", "およぼす", "おらんだ", "おろす", "おんがく", "おんけい",
42694"おんしゃ", "おんせん", "おんだん", "おんちゅう", "おんどけい", "かあつ", "かいが", "がいき", "がいけん", "がいこう",
42695"かいさつ", "かいしゃ", "かいすいよく", "かいぜん", "かいぞうど", "かいつう", "かいてん", "かいとう", "かいふく", "がいへき",
42696"かいほう", "かいよう", "がいらい", "かいわ", "かえる", "かおり", "かかえる", "かがく", "かがし", "かがみ",
42697"かくご", "かくとく", "かざる", "がぞう", "かたい", "かたち", "がちょう", "がっきゅう", "がっこう", "がっさん",
42698"がっしょう", "かなざわし", "かのう", "がはく", "かぶか", "かほう", "かほご", "かまう", "かまぼこ", "かめれおん",
42699"かゆい", "かようび", "からい", "かるい", "かろう", "かわく", "かわら", "がんか", "かんけい", "かんこう",
42700"かんしゃ", "かんそう", "かんたん", "かんち", "がんばる", "きあい", "きあつ", "きいろ", "ぎいん", "きうい",
42701"きうん", "きえる", "きおう", "きおく", "きおち", "きおん", "きかい", "きかく", "きかんしゃ", "ききて",
42702"きくばり", "きくらげ", "きけんせい", "きこう", "きこえる", "きこく", "きさい", "きさく", "きさま", "きさらぎ",
42703"ぎじかがく", "ぎしき", "ぎじたいけん", "ぎじにってい", "ぎじゅつしゃ", "きすう", "きせい", "きせき", "きせつ", "きそう",
42704"きぞく", "きぞん", "きたえる", "きちょう", "きつえん", "ぎっちり", "きつつき", "きつね", "きてい", "きどう",
42705"きどく", "きない", "きなが", "きなこ", "きぬごし", "きねん", "きのう", "きのした", "きはく", "きびしい",
42706"きひん", "きふく", "きぶん", "きぼう", "きほん", "きまる", "きみつ", "きむずかしい", "きめる", "きもだめし",
42707"きもち", "きもの", "きゃく", "きやく", "ぎゅうにく", "きよう", "きょうりゅう", "きらい", "きらく", "きりん",
42708"きれい", "きれつ", "きろく", "ぎろん", "きわめる", "ぎんいろ", "きんかくじ", "きんじょ", "きんようび", "ぐあい",
42709"くいず", "くうかん", "くうき", "くうぐん", "くうこう", "ぐうせい", "くうそう", "ぐうたら", "くうふく", "くうぼ",
42710"くかん", "くきょう", "くげん", "ぐこう", "くさい", "くさき", "くさばな", "くさる", "くしゃみ", "くしょう",
42711"くすのき", "くすりゆび", "くせげ", "くせん", "ぐたいてき", "くださる", "くたびれる", "くちこみ", "くちさき", "くつした",
42712"ぐっすり", "くつろぐ", "くとうてん", "くどく", "くなん", "くねくね", "くのう", "くふう", "くみあわせ", "くみたてる",
42713"くめる", "くやくしょ", "くらす", "くらべる", "くるま", "くれる", "くろう", "くわしい", "ぐんかん", "ぐんしょく",
42714"ぐんたい", "ぐんて", "けあな", "けいかく", "けいけん", "けいこ", "けいさつ", "げいじゅつ", "けいたい", "げいのうじん",
42715"けいれき", "けいろ", "けおとす", "けおりもの", "げきか", "げきげん", "げきだん", "げきちん", "げきとつ", "げきは",
42716"げきやく", "げこう", "げこくじょう", "げざい", "けさき", "げざん", "けしき", "けしごむ", "けしょう", "げすと",
42717"けたば", "けちゃっぷ", "けちらす", "けつあつ", "けつい", "けつえき", "けっこん", "けつじょ", "けっせき", "けってい",
42718"けつまつ", "げつようび", "げつれい", "けつろん", "げどく", "けとばす", "けとる", "けなげ", "けなす", "けなみ",
42719"けぬき", "げねつ", "けねん", "けはい", "げひん", "けぶかい", "げぼく", "けまり", "けみかる", "けむし",
42720"けむり", "けもの", "けらい", "けろけろ", "けわしい", "けんい", "けんえつ", "けんお", "けんか", "げんき",
42721"けんげん", "けんこう", "けんさく", "けんしゅう", "けんすう", "げんそう", "けんちく", "けんてい", "けんとう", "けんない",
42722"けんにん", "げんぶつ", "けんま", "けんみん", "けんめい", "けんらん", "けんり", "こあくま", "こいぬ", "こいびと",
42723"ごうい", "こうえん", "こうおん", "こうかん", "ごうきゅう", "ごうけい", "こうこう", "こうさい", "こうじ", "こうすい",
42724"ごうせい", "こうそく", "こうたい", "こうちゃ", "こうつう", "こうてい", "こうどう", "こうない", "こうはい", "ごうほう",
42725"ごうまん", "こうもく", "こうりつ", "こえる", "こおり", "ごかい", "ごがつ", "ごかん", "こくご", "こくさい",
42726"こくとう", "こくない", "こくはく", "こぐま", "こけい", "こける", "ここのか", "こころ", "こさめ", "こしつ",
42727"こすう", "こせい", "こせき", "こぜん", "こそだて", "こたい", "こたえる", "こたつ", "こちょう", "こっか",
42728"こつこつ", "こつばん", "こつぶ", "こてい", "こてん", "ことがら", "ことし", "ことば", "ことり", "こなごな",
42729"こねこね", "このまま", "このみ", "このよ", "ごはん", "こひつじ", "こふう", "こふん", "こぼれる", "ごまあぶら",
42730"こまかい", "ごますり", "こまつな", "こまる", "こむぎこ", "こもじ", "こもち", "こもの", "こもん", "こやく",
42731"こやま", "こゆう", "こゆび", "こよい", "こよう", "こりる", "これくしょん", "ころっけ", "こわもて", "こわれる",
42732"こんいん", "こんかい", "こんき", "こんしゅう", "こんすい", "こんだて", "こんとん", "こんなん", "こんびに", "こんぽん",
42733"こんまけ", "こんや", "こんれい", "こんわく", "ざいえき", "さいかい", "さいきん", "ざいげん", "ざいこ", "さいしょ",
42734"さいせい", "ざいたく", "ざいちゅう", "さいてき", "ざいりょう", "さうな", "さかいし", "さがす", "さかな", "さかみち",
42735"さがる", "さぎょう", "さくし", "さくひん", "さくら", "さこく", "さこつ", "さずかる", "ざせき", "さたん",
42736"さつえい", "ざつおん", "ざっか", "ざつがく", "さっきょく", "ざっし", "さつじん", "ざっそう", "さつたば", "さつまいも",
42737"さてい", "さといも", "さとう", "さとおや", "さとし", "さとる", "さのう", "さばく", "さびしい", "さべつ",
42738"さほう", "さほど", "さます", "さみしい", "さみだれ", "さむけ", "さめる", "さやえんどう", "さゆう", "さよう",
42739"さよく", "さらだ", "ざるそば", "さわやか", "さわる", "さんいん", "さんか", "さんきゃく", "さんこう", "さんさい",
42740"ざんしょ", "さんすう", "さんせい", "さんそ", "さんち", "さんま", "さんみ", "さんらん", "しあい", "しあげ",
42741"しあさって", "しあわせ", "しいく", "しいん", "しうち", "しえい", "しおけ", "しかい", "しかく", "じかん",
42742"しごと", "しすう", "じだい", "したうけ", "したぎ", "したて", "したみ", "しちょう", "しちりん", "しっかり",
42743"しつじ", "しつもん", "してい", "してき", "してつ", "じてん", "じどう", "しなぎれ", "しなもの", "しなん",
42744"しねま", "しねん", "しのぐ", "しのぶ", "しはい", "しばかり", "しはつ", "しはらい", "しはん", "しひょう",
42745"しふく", "じぶん", "しへい", "しほう", "しほん", "しまう", "しまる", "しみん", "しむける", "じむしょ",
42746"しめい", "しめる", "しもん", "しゃいん", "しゃうん", "しゃおん", "じゃがいも", "しやくしょ", "しゃくほう", "しゃけん",
42747"しゃこ", "しゃざい", "しゃしん", "しゃせん", "しゃそう", "しゃたい", "しゃちょう", "しゃっきん", "じゃま", "しゃりん",
42748"しゃれい", "じゆう", "じゅうしょ", "しゅくはく", "じゅしん", "しゅっせき", "しゅみ", "しゅらば", "じゅんばん", "しょうかい",
42749"しょくたく", "しょっけん", "しょどう", "しょもつ", "しらせる", "しらべる", "しんか", "しんこう", "じんじゃ", "しんせいじ",
42750"しんちく", "しんりん", "すあげ", "すあし", "すあな", "ずあん", "すいえい", "すいか", "すいとう", "ずいぶん",
42751"すいようび", "すうがく", "すうじつ", "すうせん", "すおどり", "すきま", "すくう", "すくない", "すける", "すごい",
42752"すこし", "ずさん", "すずしい", "すすむ", "すすめる", "すっかり", "ずっしり", "ずっと", "すてき", "すてる",
42753"すねる", "すのこ", "すはだ", "すばらしい", "ずひょう", "ずぶぬれ", "すぶり", "すふれ", "すべて", "すべる",
42754"ずほう", "すぼん", "すまい", "すめし", "すもう", "すやき", "すらすら", "するめ", "すれちがう", "すろっと",
42755"すわる", "すんぜん", "すんぽう", "せあぶら", "せいかつ", "せいげん", "せいじ", "せいよう", "せおう", "せかいかん",
42756"せきにん", "せきむ", "せきゆ", "せきらんうん", "せけん", "せこう", "せすじ", "せたい", "せたけ", "せっかく",
42757"せっきゃく", "ぜっく", "せっけん", "せっこつ", "せっさたくま", "せつぞく", "せつだん", "せつでん", "せっぱん", "せつび",
42758"せつぶん", "せつめい", "せつりつ", "せなか", "せのび", "せはば", "せびろ", "せぼね", "せまい", "せまる",
42759"せめる", "せもたれ", "せりふ", "ぜんあく", "せんい", "せんえい", "せんか", "せんきょ", "せんく", "せんげん",
42760"ぜんご", "せんさい", "せんしゅ", "せんすい", "せんせい", "せんぞ", "せんたく", "せんちょう", "せんてい", "せんとう",
42761"せんぬき", "せんねん", "せんぱい", "ぜんぶ", "ぜんぽう", "せんむ", "せんめんじょ", "せんもん", "せんやく", "せんゆう",
42762"せんよう", "ぜんら", "ぜんりゃく", "せんれい", "せんろ", "そあく", "そいとげる", "そいね", "そうがんきょう", "そうき",
42763"そうご", "そうしん", "そうだん", "そうなん", "そうび", "そうめん", "そうり", "そえもの", "そえん", "そがい",
42764"そげき", "そこう", "そこそこ", "そざい", "そしな", "そせい", "そせん", "そそぐ", "そだてる", "そつう",
42765"そつえん", "そっかん", "そつぎょう", "そっけつ", "そっこう", "そっせん", "そっと", "そとがわ", "そとづら", "そなえる",
42766"そなた", "そふぼ", "そぼく", "そぼろ", "そまつ", "そまる", "そむく", "そむりえ", "そめる", "そもそも",
42767"そよかぜ", "そらまめ", "そろう", "そんかい", "そんけい", "そんざい", "そんしつ", "そんぞく", "そんちょう", "ぞんび",
42768"ぞんぶん", "そんみん", "たあい", "たいいん", "たいうん", "たいえき", "たいおう", "だいがく", "たいき", "たいぐう",
42769"たいけん", "たいこ", "たいざい", "だいじょうぶ", "だいすき", "たいせつ", "たいそう", "だいたい", "たいちょう", "たいてい",
42770"だいどころ", "たいない", "たいねつ", "たいのう", "たいはん", "だいひょう", "たいふう", "たいへん", "たいほ", "たいまつばな",
42771"たいみんぐ", "たいむ", "たいめん", "たいやき", "たいよう", "たいら", "たいりょく", "たいる", "たいわん", "たうえ",
42772"たえる", "たおす", "たおる", "たおれる", "たかい", "たかね", "たきび", "たくさん", "たこく", "たこやき",
42773"たさい", "たしざん", "だじゃれ", "たすける", "たずさわる", "たそがれ", "たたかう", "たたく", "ただしい", "たたみ",
42774"たちばな", "だっかい", "だっきゃく", "だっこ", "だっしゅつ", "だったい", "たてる", "たとえる", "たなばた", "たにん",
42775"たぬき", "たのしみ", "たはつ", "たぶん", "たべる", "たぼう", "たまご", "たまる", "だむる", "ためいき",
42776"ためす", "ためる", "たもつ", "たやすい", "たよる", "たらす", "たりきほんがん", "たりょう", "たりる", "たると",
42777"たれる", "たれんと", "たろっと", "たわむれる", "だんあつ", "たんい", "たんおん", "たんか", "たんき", "たんけん",
42778"たんご", "たんさん", "たんじょうび", "だんせい", "たんそく", "たんたい", "だんち", "たんてい", "たんとう", "だんな",
42779"たんにん", "だんねつ", "たんのう", "たんぴん", "だんぼう", "たんまつ", "たんめい", "だんれつ", "だんろ", "だんわ",
42780"ちあい", "ちあん", "ちいき", "ちいさい", "ちえん", "ちかい", "ちから", "ちきゅう", "ちきん", "ちけいず",
42781"ちけん", "ちこく", "ちさい", "ちしき", "ちしりょう", "ちせい", "ちそう", "ちたい", "ちたん", "ちちおや",
42782"ちつじょ", "ちてき", "ちてん", "ちぬき", "ちぬり", "ちのう", "ちひょう", "ちへいせん", "ちほう", "ちまた",
42783"ちみつ", "ちみどろ", "ちめいど", "ちゃんこなべ", "ちゅうい", "ちゆりょく", "ちょうし", "ちょさくけん", "ちらし", "ちらみ",
42784"ちりがみ", "ちりょう", "ちるど", "ちわわ", "ちんたい", "ちんもく", "ついか", "ついたち", "つうか", "つうじょう",
42785"つうはん", "つうわ", "つかう", "つかれる", "つくね", "つくる", "つけね", "つける", "つごう", "つたえる",
42786"つづく", "つつじ", "つつむ", "つとめる", "つながる", "つなみ", "つねづね", "つのる", "つぶす", "つまらない",
42787"つまる", "つみき", "つめたい", "つもり", "つもる", "つよい", "つるぼ", "つるみく", "つわもの", "つわり",
42788"てあし", "てあて", "てあみ", "ていおん", "ていか", "ていき", "ていけい", "ていこく", "ていさつ", "ていし",
42789"ていせい", "ていたい", "ていど", "ていねい", "ていひょう", "ていへん", "ていぼう", "てうち", "ておくれ", "てきとう",
42790"てくび", "でこぼこ", "てさぎょう", "てさげ", "てすり", "てそう", "てちがい", "てちょう", "てつがく", "てつづき",
42791"でっぱ", "てつぼう", "てつや", "でぬかえ", "てぬき", "てぬぐい", "てのひら", "てはい", "てぶくろ", "てふだ",
42792"てほどき", "てほん", "てまえ", "てまきずし", "てみじか", "てみやげ", "てらす", "てれび", "てわけ", "てわたし",
42793"でんあつ", "てんいん", "てんかい", "てんき", "てんぐ", "てんけん", "てんごく", "てんさい", "てんし", "てんすう",
42794"でんち", "てんてき", "てんとう", "てんない", "てんぷら", "てんぼうだい", "てんめつ", "てんらんかい", "でんりょく", "でんわ",
42795"どあい", "といれ", "どうかん", "とうきゅう", "どうぐ", "とうし", "とうむぎ", "とおい", "とおか", "とおく",
42796"とおす", "とおる", "とかい", "とかす", "ときおり", "ときどき", "とくい", "とくしゅう", "とくてん", "とくに",
42797"とくべつ", "とけい", "とける", "とこや", "とさか", "としょかん", "とそう", "とたん", "とちゅう", "とっきゅう",
42798"とっくん", "とつぜん", "とつにゅう", "とどける", "ととのえる", "とない", "となえる", "となり", "とのさま", "とばす",
42799"どぶがわ", "とほう", "とまる", "とめる", "ともだち", "ともる", "どようび", "とらえる", "とんかつ", "どんぶり",
42800"ないかく", "ないこう", "ないしょ", "ないす", "ないせん", "ないそう", "なおす", "ながい", "なくす", "なげる",
42801"なこうど", "なさけ", "なたでここ", "なっとう", "なつやすみ", "ななおし", "なにごと", "なにもの", "なにわ", "なのか",
42802"なふだ", "なまいき", "なまえ", "なまみ", "なみだ", "なめらか", "なめる", "なやむ", "ならう", "ならび",
42803"ならぶ", "なれる", "なわとび", "なわばり", "にあう", "にいがた", "にうけ", "におい", "にかい", "にがて",
42804"にきび", "にくしみ", "にくまん", "にげる", "にさんかたんそ", "にしき", "にせもの", "にちじょう", "にちようび", "にっか",
42805"にっき", "にっけい", "にっこう", "にっさん", "にっしょく", "にっすう", "にっせき", "にってい", "になう", "にほん",
42806"にまめ", "にもつ", "にやり", "にゅういん", "にりんしゃ", "にわとり", "にんい", "にんか", "にんき", "にんげん",
42807"にんしき", "にんずう", "にんそう", "にんたい", "にんち", "にんてい", "にんにく", "にんぷ", "にんまり", "にんむ",
42808"にんめい", "にんよう", "ぬいくぎ", "ぬかす", "ぬぐいとる", "ぬぐう", "ぬくもり", "ぬすむ", "ぬまえび", "ぬめり",
42809"ぬらす", "ぬんちゃく", "ねあげ", "ねいき", "ねいる", "ねいろ", "ねぐせ", "ねくたい", "ねくら", "ねこぜ",
42810"ねこむ", "ねさげ", "ねすごす", "ねそべる", "ねだん", "ねつい", "ねっしん", "ねつぞう", "ねったいぎょ", "ねぶそく",
42811"ねふだ", "ねぼう", "ねほりはほり", "ねまき", "ねまわし", "ねみみ", "ねむい", "ねむたい", "ねもと", "ねらう",
42812"ねわざ", "ねんいり", "ねんおし", "ねんかん", "ねんきん", "ねんぐ", "ねんざ", "ねんし", "ねんちゃく", "ねんど",
42813"ねんぴ", "ねんぶつ", "ねんまつ", "ねんりょう", "ねんれい", "のいず", "のおづま", "のがす", "のきなみ", "のこぎり",
42814"のこす", "のこる", "のせる", "のぞく", "のぞむ", "のたまう", "のちほど", "のっく", "のばす", "のはら",
42815"のべる", "のぼる", "のみもの", "のやま", "のらいぬ", "のらねこ", "のりもの", "のりゆき", "のれん", "のんき",
42816"ばあい", "はあく", "ばあさん", "ばいか", "ばいく", "はいけん", "はいご", "はいしん", "はいすい", "はいせん",
42817"はいそう", "はいち", "ばいばい", "はいれつ", "はえる", "はおる", "はかい", "ばかり", "はかる", "はくしゅ",
42818"はけん", "はこぶ", "はさみ", "はさん", "はしご", "ばしょ", "はしる", "はせる", "ぱそこん", "はそん",
42819"はたん", "はちみつ", "はつおん", "はっかく", "はづき", "はっきり", "はっくつ", "はっけん", "はっこう", "はっさん",
42820"はっしん", "はったつ", "はっちゅう", "はってん", "はっぴょう", "はっぽう", "はなす", "はなび", "はにかむ", "はぶらし",
42821"はみがき", "はむかう", "はめつ", "はやい", "はやし", "はらう", "はろうぃん", "はわい", "はんい", "はんえい",
42822"はんおん", "はんかく", "はんきょう", "ばんぐみ", "はんこ", "はんしゃ", "はんすう", "はんだん", "ぱんち", "ぱんつ",
42823"はんてい", "はんとし", "はんのう", "はんぱ", "はんぶん", "はんぺん", "はんぼうき", "はんめい", "はんらん", "はんろん",
42824"ひいき", "ひうん", "ひえる", "ひかく", "ひかり", "ひかる", "ひかん", "ひくい", "ひけつ", "ひこうき",
42825"ひこく", "ひさい", "ひさしぶり", "ひさん", "びじゅつかん", "ひしょ", "ひそか", "ひそむ", "ひたむき", "ひだり",
42826"ひたる", "ひつぎ", "ひっこし", "ひっし", "ひつじゅひん", "ひっす", "ひつぜん", "ぴったり", "ぴっちり", "ひつよう",
42827"ひてい", "ひとごみ", "ひなまつり", "ひなん", "ひねる", "ひはん", "ひびく", "ひひょう", "ひほう", "ひまわり",
42828"ひまん", "ひみつ", "ひめい", "ひめじし", "ひやけ", "ひやす", "ひよう", "びょうき", "ひらがな", "ひらく",
42829"ひりつ", "ひりょう", "ひるま", "ひるやすみ", "ひれい", "ひろい", "ひろう", "ひろき", "ひろゆき", "ひんかく",
42830"ひんけつ", "ひんこん", "ひんしゅ", "ひんそう", "ぴんち", "ひんぱん", "びんぼう", "ふあん", "ふいうち", "ふうけい",
42831"ふうせん", "ぷうたろう", "ふうとう", "ふうふ", "ふえる", "ふおん", "ふかい", "ふきん", "ふくざつ", "ふくぶくろ",
42832"ふこう", "ふさい", "ふしぎ", "ふじみ", "ふすま", "ふせい", "ふせぐ", "ふそく", "ぶたにく", "ふたん",
42833"ふちょう", "ふつう", "ふつか", "ふっかつ", "ふっき", "ふっこく", "ぶどう", "ふとる", "ふとん", "ふのう",
42834"ふはい", "ふひょう", "ふへん", "ふまん", "ふみん", "ふめつ", "ふめん", "ふよう", "ふりこ", "ふりる",
42835"ふるい", "ふんいき", "ぶんがく", "ぶんぐ", "ふんしつ", "ぶんせき", "ふんそう", "ぶんぽう", "へいあん", "へいおん",
42836"へいがい", "へいき", "へいげん", "へいこう", "へいさ", "へいしゃ", "へいせつ", "へいそ", "へいたく", "へいてん",
42837"へいねつ", "へいわ", "へきが", "へこむ", "べにいろ", "べにしょうが", "へらす", "へんかん", "べんきょう", "べんごし",
42838"へんさい", "へんたい", "べんり", "ほあん", "ほいく", "ぼうぎょ", "ほうこく", "ほうそう", "ほうほう", "ほうもん",
42839"ほうりつ", "ほえる", "ほおん", "ほかん", "ほきょう", "ぼきん", "ほくろ", "ほけつ", "ほけん", "ほこう",
42840"ほこる", "ほしい", "ほしつ", "ほしゅ", "ほしょう", "ほせい", "ほそい", "ほそく", "ほたて", "ほたる",
42841"ぽちぶくろ", "ほっきょく", "ほっさ", "ほったん", "ほとんど", "ほめる", "ほんい", "ほんき", "ほんけ", "ほんしつ",
42842"ほんやく", "まいにち", "まかい", "まかせる", "まがる", "まける", "まこと", "まさつ", "まじめ", "ますく",
42843"まぜる", "まつり", "まとめ", "まなぶ", "まぬけ", "まねく", "まほう", "まもる", "まゆげ", "まよう",
42844"まろやか", "まわす", "まわり", "まわる", "まんが", "まんきつ", "まんぞく", "まんなか", "みいら", "みうち",
42845"みえる", "みがく", "みかた", "みかん", "みけん", "みこん", "みじかい", "みすい", "みすえる", "みせる",
42846"みっか", "みつかる", "みつける", "みてい", "みとめる", "みなと", "みなみかさい", "みねらる", "みのう", "みのがす",
42847"みほん", "みもと", "みやげ", "みらい", "みりょく", "みわく", "みんか", "みんぞく", "むいか", "むえき",
42848"むえん", "むかい", "むかう", "むかえ", "むかし", "むぎちゃ", "むける", "むげん", "むさぼる", "むしあつい",
42849"むしば", "むじゅん", "むしろ", "むすう", "むすこ", "むすぶ", "むすめ", "むせる", "むせん", "むちゅう",
42850"むなしい", "むのう", "むやみ", "むよう", "むらさき", "むりょう", "むろん", "めいあん", "めいうん", "めいえん",
42851"めいかく", "めいきょく", "めいさい", "めいし", "めいそう", "めいぶつ", "めいれい", "めいわく", "めぐまれる", "めざす",
42852"めした", "めずらしい", "めだつ", "めまい", "めやす", "めんきょ", "めんせき", "めんどう", "もうしあげる", "もうどうけん",
42853"もえる", "もくし", "もくてき", "もくようび", "もちろん", "もどる", "もらう", "もんく", "もんだい", "やおや",
42854"やける", "やさい", "やさしい", "やすい", "やすたろう", "やすみ", "やせる", "やそう", "やたい", "やちん",
42855"やっと", "やっぱり", "やぶる", "やめる", "ややこしい", "やよい", "やわらかい", "ゆうき", "ゆうびんきょく", "ゆうべ",
42856"ゆうめい", "ゆけつ", "ゆしゅつ", "ゆせん", "ゆそう", "ゆたか", "ゆちゃく", "ゆでる", "ゆにゅう", "ゆびわ",
42857"ゆらい", "ゆれる", "ようい", "ようか", "ようきゅう", "ようじ", "ようす", "ようちえん", "よかぜ", "よかん",
42858"よきん", "よくせい", "よくぼう", "よけい", "よごれる", "よさん", "よしゅう", "よそう", "よそく", "よっか",
42859"よてい", "よどがわく", "よねつ", "よやく", "よゆう", "よろこぶ", "よろしい", "らいう", "らくがき", "らくご",
42860"らくさつ", "らくだ", "らしんばん", "らせん", "らぞく", "らたい", "らっか", "られつ", "りえき", "りかい",
42861"りきさく", "りきせつ", "りくぐん", "りくつ", "りけん", "りこう", "りせい", "りそう", "りそく", "りてん",
42862"りねん", "りゆう", "りゅうがく", "りよう", "りょうり", "りょかん", "りょくちゃ", "りょこう", "りりく", "りれき",
42863"りろん", "りんご", "るいけい", "るいさい", "るいじ", "るいせき", "るすばん", "るりがわら", "れいかん", "れいぎ",
42864"れいせい", "れいぞうこ", "れいとう", "れいぼう", "れきし", "れきだい", "れんあい", "れんけい", "れんこん", "れんさい",
42865"れんしゅう", "れんぞく", "れんらく", "ろうか", "ろうご", "ろうじん", "ろうそく", "ろくが", "ろこつ", "ろじうら",
42866"ろしゅつ", "ろせん", "ろてん", "ろめん", "ろれつ", "ろんぎ", "ろんぱ", "ろんぶん", "ろんり", "わかす",
42867"わかめ", "わかやま", "わかれる", "わしつ", "わじまし", "わすれもの", "わらう", "われる"]
42868</script>
42869 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
42870WORDLISTS["spanish"] = [
42871"ábaco", "abdomen", "abeja", "abierto", "abogado", "abono", "aborto", "abrazo", "abrir", "abuelo",
42872"abuso", "acabar", "academia", "acceso", "acción", "aceite", "acelga", "acento", "aceptar", "ácido",
42873"aclarar", "acné", "acoger", "acoso", "activo", "acto", "actriz", "actuar", "acudir", "acuerdo",
42874"acusar", "adicto", "admitir", "adoptar", "adorno", "aduana", "adulto", "aéreo", "afectar", "afición",
42875"afinar", "afirmar", "ágil", "agitar", "agonía", "agosto", "agotar", "agregar", "agrio", "agua",
42876"agudo", "águila", "aguja", "ahogo", "ahorro", "aire", "aislar", "ajedrez", "ajeno", "ajuste",
42877"alacrán", "alambre", "alarma", "alba", "álbum", "alcalde", "aldea", "alegre", "alejar", "alerta",
42878"aleta", "alfiler", "alga", "algodón", "aliado", "aliento", "alivio", "alma", "almeja", "almíbar",
42879"altar", "alteza", "altivo", "alto", "altura", "alumno", "alzar", "amable", "amante", "amapola",
42880"amargo", "amasar", "ámbar", "ámbito", "ameno", "amigo", "amistad", "amor", "amparo", "amplio",
42881"ancho", "anciano", "ancla", "andar", "andén", "anemia", "ángulo", "anillo", "ánimo", "anís",
42882"anotar", "antena", "antiguo", "antojo", "anual", "anular", "anuncio", "añadir", "añejo", "año",
42883"apagar", "aparato", "apetito", "apio", "aplicar", "apodo", "aporte", "apoyo", "aprender", "aprobar",
42884"apuesta", "apuro", "arado", "araña", "arar", "árbitro", "árbol", "arbusto", "archivo", "arco",
42885"arder", "ardilla", "arduo", "área", "árido", "aries", "armonía", "arnés", "aroma", "arpa",
42886"arpón", "arreglo", "arroz", "arruga", "arte", "artista", "asa", "asado", "asalto", "ascenso",
42887"asegurar", "aseo", "asesor", "asiento", "asilo", "asistir", "asno", "asombro", "áspero", "astilla",
42888"astro", "astuto", "asumir", "asunto", "atajo", "ataque", "atar", "atento", "ateo", "ático",
42889"atleta", "átomo", "atraer", "atroz", "atún", "audaz", "audio", "auge", "aula", "aumento",
42890"ausente", "autor", "aval", "avance", "avaro", "ave", "avellana", "avena", "avestruz", "avión",
42891"aviso", "ayer", "ayuda", "ayuno", "azafrán", "azar", "azote", "azúcar", "azufre", "azul",
42892"baba", "babor", "bache", "bahía", "baile", "bajar", "balanza", "balcón", "balde", "bambú",
42893"banco", "banda", "baño", "barba", "barco", "barniz", "barro", "báscula", "bastón", "basura",
42894"batalla", "batería", "batir", "batuta", "baúl", "bazar", "bebé", "bebida", "bello", "besar",
42895"beso", "bestia", "bicho", "bien", "bingo", "blanco", "bloque", "blusa", "boa", "bobina",
42896"bobo", "boca", "bocina", "boda", "bodega", "boina", "bola", "bolero", "bolsa", "bomba",
42897"bondad", "bonito", "bono", "bonsái", "borde", "borrar", "bosque", "bote", "botín", "bóveda",
42898"bozal", "bravo", "brazo", "brecha", "breve", "brillo", "brinco", "brisa", "broca", "broma",
42899"bronce", "brote", "bruja", "brusco", "bruto", "buceo", "bucle", "bueno", "buey", "bufanda",
42900"bufón", "búho", "buitre", "bulto", "burbuja", "burla", "burro", "buscar", "butaca", "buzón",
42901"caballo", "cabeza", "cabina", "cabra", "cacao", "cadáver", "cadena", "caer", "café", "caída",
42902"caimán", "caja", "cajón", "cal", "calamar", "calcio", "caldo", "calidad", "calle", "calma",
42903"calor", "calvo", "cama", "cambio", "camello", "camino", "campo", "cáncer", "candil", "canela",
42904"canguro", "canica", "canto", "caña", "cañón", "caoba", "caos", "capaz", "capitán", "capote",
42905"captar", "capucha", "cara", "carbón", "cárcel", "careta", "carga", "cariño", "carne", "carpeta",
42906"carro", "carta", "casa", "casco", "casero", "caspa", "castor", "catorce", "catre", "caudal",
42907"causa", "cazo", "cebolla", "ceder", "cedro", "celda", "célebre", "celoso", "célula", "cemento",
42908"ceniza", "centro", "cerca", "cerdo", "cereza", "cero", "cerrar", "certeza", "césped", "cetro",
42909"chacal", "chaleco", "champú", "chancla", "chapa", "charla", "chico", "chiste", "chivo", "choque",
42910"choza", "chuleta", "chupar", "ciclón", "ciego", "cielo", "cien", "cierto", "cifra", "cigarro",
42911"cima", "cinco", "cine", "cinta", "ciprés", "circo", "ciruela", "cisne", "cita", "ciudad",
42912"clamor", "clan", "claro", "clase", "clave", "cliente", "clima", "clínica", "cobre", "cocción",
42913"cochino", "cocina", "coco", "código", "codo", "cofre", "coger", "cohete", "cojín", "cojo",
42914"cola", "colcha", "colegio", "colgar", "colina", "collar", "colmo", "columna", "combate", "comer",
42915"comida", "cómodo", "compra", "conde", "conejo", "conga", "conocer", "consejo", "contar", "copa",
42916"copia", "corazón", "corbata", "corcho", "cordón", "corona", "correr", "coser", "cosmos", "costa",
42917"cráneo", "cráter", "crear", "crecer", "creído", "crema", "cría", "crimen", "cripta", "crisis",
42918"cromo", "crónica", "croqueta", "crudo", "cruz", "cuadro", "cuarto", "cuatro", "cubo", "cubrir",
42919"cuchara", "cuello", "cuento", "cuerda", "cuesta", "cueva", "cuidar", "culebra", "culpa", "culto",
42920"cumbre", "cumplir", "cuna", "cuneta", "cuota", "cupón", "cúpula", "curar", "curioso", "curso",
42921"curva", "cutis", "dama", "danza", "dar", "dardo", "dátil", "deber", "débil", "década",
42922"decir", "dedo", "defensa", "definir", "dejar", "delfín", "delgado", "delito", "demora", "denso",
42923"dental", "deporte", "derecho", "derrota", "desayuno", "deseo", "desfile", "desnudo", "destino", "desvío",
42924"detalle", "detener", "deuda", "día", "diablo", "diadema", "diamante", "diana", "diario", "dibujo",
42925"dictar", "diente", "dieta", "diez", "difícil", "digno", "dilema", "diluir", "dinero", "directo",
42926"dirigir", "disco", "diseño", "disfraz", "diva", "divino", "doble", "doce", "dolor", "domingo",
42927"don", "donar", "dorado", "dormir", "dorso", "dos", "dosis", "dragón", "droga", "ducha",
42928"duda", "duelo", "dueño", "dulce", "dúo", "duque", "durar", "dureza", "duro", "ébano",
42929"ebrio", "echar", "eco", "ecuador", "edad", "edición", "edificio", "editor", "educar", "efecto",
42930"eficaz", "eje", "ejemplo", "elefante", "elegir", "elemento", "elevar", "elipse", "élite", "elixir",
42931"elogio", "eludir", "embudo", "emitir", "emoción", "empate", "empeño", "empleo", "empresa", "enano",
42932"encargo", "enchufe", "encía", "enemigo", "enero", "enfado", "enfermo", "engaño", "enigma", "enlace",
42933"enorme", "enredo", "ensayo", "enseñar", "entero", "entrar", "envase", "envío", "época", "equipo",
42934"erizo", "escala", "escena", "escolar", "escribir", "escudo", "esencia", "esfera", "esfuerzo", "espada",
42935"espejo", "espía", "esposa", "espuma", "esquí", "estar", "este", "estilo", "estufa", "etapa",
42936"eterno", "ética", "etnia", "evadir", "evaluar", "evento", "evitar", "exacto", "examen", "exceso",
42937"excusa", "exento", "exigir", "exilio", "existir", "éxito", "experto", "explicar", "exponer", "extremo",
42938"fábrica", "fábula", "fachada", "fácil", "factor", "faena", "faja", "falda", "fallo", "falso",
42939"faltar", "fama", "familia", "famoso", "faraón", "farmacia", "farol", "farsa", "fase", "fatiga",
42940"fauna", "favor", "fax", "febrero", "fecha", "feliz", "feo", "feria", "feroz", "fértil",
42941"fervor", "festín", "fiable", "fianza", "fiar", "fibra", "ficción", "ficha", "fideo", "fiebre",
42942"fiel", "fiera", "fiesta", "figura", "fijar", "fijo", "fila", "filete", "filial", "filtro",
42943"fin", "finca", "fingir", "finito", "firma", "flaco", "flauta", "flecha", "flor", "flota",
42944"fluir", "flujo", "flúor", "fobia", "foca", "fogata", "fogón", "folio", "folleto", "fondo",
42945"forma", "forro", "fortuna", "forzar", "fosa", "foto", "fracaso", "frágil", "franja", "frase",
42946"fraude", "freír", "freno", "fresa", "frío", "frito", "fruta", "fuego", "fuente", "fuerza",
42947"fuga", "fumar", "función", "funda", "furgón", "furia", "fusil", "fútbol", "futuro", "gacela",
42948"gafas", "gaita", "gajo", "gala", "galería", "gallo", "gamba", "ganar", "gancho", "ganga",
42949"ganso", "garaje", "garza", "gasolina", "gastar", "gato", "gavilán", "gemelo", "gemir", "gen",
42950"género", "genio", "gente", "geranio", "gerente", "germen", "gesto", "gigante", "gimnasio", "girar",
42951"giro", "glaciar", "globo", "gloria", "gol", "golfo", "goloso", "golpe", "goma", "gordo",
42952"gorila", "gorra", "gota", "goteo", "gozar", "grada", "gráfico", "grano", "grasa", "gratis",
42953"grave", "grieta", "grillo", "gripe", "gris", "grito", "grosor", "grúa", "grueso", "grumo",
42954"grupo", "guante", "guapo", "guardia", "guerra", "guía", "guiño", "guion", "guiso", "guitarra",
42955"gusano", "gustar", "haber", "hábil", "hablar", "hacer", "hacha", "hada", "hallar", "hamaca",
42956"harina", "haz", "hazaña", "hebilla", "hebra", "hecho", "helado", "helio", "hembra", "herir",
42957"hermano", "héroe", "hervir", "hielo", "hierro", "hígado", "higiene", "hijo", "himno", "historia",
42958"hocico", "hogar", "hoguera", "hoja", "hombre", "hongo", "honor", "honra", "hora", "hormiga",
42959"horno", "hostil", "hoyo", "hueco", "huelga", "huerta", "hueso", "huevo", "huida", "huir",
42960"humano", "húmedo", "humilde", "humo", "hundir", "huracán", "hurto", "icono", "ideal", "idioma",
42961"ídolo", "iglesia", "iglú", "igual", "ilegal", "ilusión", "imagen", "imán", "imitar", "impar",
42962"imperio", "imponer", "impulso", "incapaz", "índice", "inerte", "infiel", "informe", "ingenio", "inicio",
42963"inmenso", "inmune", "innato", "insecto", "instante", "interés", "íntimo", "intuir", "inútil", "invierno",
42964"ira", "iris", "ironía", "isla", "islote", "jabalí", "jabón", "jamón", "jarabe", "jardín",
42965"jarra", "jaula", "jazmín", "jefe", "jeringa", "jinete", "jornada", "joroba", "joven", "joya",
42966"juerga", "jueves", "juez", "jugador", "jugo", "juguete", "juicio", "junco", "jungla", "junio",
42967"juntar", "júpiter", "jurar", "justo", "juvenil", "juzgar", "kilo", "koala", "labio", "lacio",
42968"lacra", "lado", "ladrón", "lagarto", "lágrima", "laguna", "laico", "lamer", "lámina", "lámpara",
42969"lana", "lancha", "langosta", "lanza", "lápiz", "largo", "larva", "lástima", "lata", "látex",
42970"latir", "laurel", "lavar", "lazo", "leal", "lección", "leche", "lector", "leer", "legión",
42971"legumbre", "lejano", "lengua", "lento", "leña", "león", "leopardo", "lesión", "letal", "letra",
42972"leve", "leyenda", "libertad", "libro", "licor", "líder", "lidiar", "lienzo", "liga", "ligero",
42973"lima", "límite", "limón", "limpio", "lince", "lindo", "línea", "lingote", "lino", "linterna",
42974"líquido", "liso", "lista", "litera", "litio", "litro", "llaga", "llama", "llanto", "llave",
42975"llegar", "llenar", "llevar", "llorar", "llover", "lluvia", "lobo", "loción", "loco", "locura",
42976"lógica", "logro", "lombriz", "lomo", "lonja", "lote", "lucha", "lucir", "lugar", "lujo",
42977"luna", "lunes", "lupa", "lustro", "luto", "luz", "maceta", "macho", "madera", "madre",
42978"maduro", "maestro", "mafia", "magia", "mago", "maíz", "maldad", "maleta", "malla", "malo",
42979"mamá", "mambo", "mamut", "manco", "mando", "manejar", "manga", "maniquí", "manjar", "mano",
42980"manso", "manta", "mañana", "mapa", "máquina", "mar", "marco", "marea", "marfil", "margen",
42981"marido", "mármol", "marrón", "martes", "marzo", "masa", "máscara", "masivo", "matar", "materia",
42982"matiz", "matriz", "máximo", "mayor", "mazorca", "mecha", "medalla", "medio", "médula", "mejilla",
42983"mejor", "melena", "melón", "memoria", "menor", "mensaje", "mente", "menú", "mercado", "merengue",
42984"mérito", "mes", "mesón", "meta", "meter", "método", "metro", "mezcla", "miedo", "miel",
42985"miembro", "miga", "mil", "milagro", "militar", "millón", "mimo", "mina", "minero", "mínimo",
42986"minuto", "miope", "mirar", "misa", "miseria", "misil", "mismo", "mitad", "mito", "mochila",
42987"moción", "moda", "modelo", "moho", "mojar", "molde", "moler", "molino", "momento", "momia",
42988"monarca", "moneda", "monja", "monto", "moño", "morada", "morder", "moreno", "morir", "morro",
42989"morsa", "mortal", "mosca", "mostrar", "motivo", "mover", "móvil", "mozo", "mucho", "mudar",
42990"mueble", "muela", "muerte", "muestra", "mugre", "mujer", "mula", "muleta", "multa", "mundo",
42991"muñeca", "mural", "muro", "músculo", "museo", "musgo", "música", "muslo", "nácar", "nación",
42992"nadar", "naipe", "naranja", "nariz", "narrar", "nasal", "natal", "nativo", "natural", "náusea",
42993"naval", "nave", "navidad", "necio", "néctar", "negar", "negocio", "negro", "neón", "nervio",
42994"neto", "neutro", "nevar", "nevera", "nicho", "nido", "niebla", "nieto", "niñez", "niño",
42995"nítido", "nivel", "nobleza", "noche", "nómina", "noria", "norma", "norte", "nota", "noticia",
42996"novato", "novela", "novio", "nube", "nuca", "núcleo", "nudillo", "nudo", "nuera", "nueve",
42997"nuez", "nulo", "número", "nutria", "oasis", "obeso", "obispo", "objeto", "obra", "obrero",
42998"observar", "obtener", "obvio", "oca", "ocaso", "océano", "ochenta", "ocho", "ocio", "ocre",
42999"octavo", "octubre", "oculto", "ocupar", "ocurrir", "odiar", "odio", "odisea", "oeste", "ofensa",
43000"oferta", "oficio", "ofrecer", "ogro", "oído", "oír", "ojo", "ola", "oleada", "olfato",
43001"olivo", "olla", "olmo", "olor", "olvido", "ombligo", "onda", "onza", "opaco", "opción",
43002"ópera", "opinar", "oponer", "optar", "óptica", "opuesto", "oración", "orador", "oral", "órbita",
43003"orca", "orden", "oreja", "órgano", "orgía", "orgullo", "oriente", "origen", "orilla", "oro",
43004"orquesta", "oruga", "osadía", "oscuro", "osezno", "oso", "ostra", "otoño", "otro", "oveja",
43005"óvulo", "óxido", "oxígeno", "oyente", "ozono", "pacto", "padre", "paella", "página", "pago",
43006"país", "pájaro", "palabra", "palco", "paleta", "pálido", "palma", "paloma", "palpar", "pan",
43007"panal", "pánico", "pantera", "pañuelo", "papá", "papel", "papilla", "paquete", "parar", "parcela",
43008"pared", "parir", "paro", "párpado", "parque", "párrafo", "parte", "pasar", "paseo", "pasión",
43009"paso", "pasta", "pata", "patio", "patria", "pausa", "pauta", "pavo", "payaso", "peatón",
43010"pecado", "pecera", "pecho", "pedal", "pedir", "pegar", "peine", "pelar", "peldaño", "pelea",
43011"peligro", "pellejo", "pelo", "peluca", "pena", "pensar", "peñón", "peón", "peor", "pepino",
43012"pequeño", "pera", "percha", "perder", "pereza", "perfil", "perico", "perla", "permiso", "perro",
43013"persona", "pesa", "pesca", "pésimo", "pestaña", "pétalo", "petróleo", "pez", "pezuña", "picar",
43014"pichón", "pie", "piedra", "pierna", "pieza", "pijama", "pilar", "piloto", "pimienta", "pino",
43015"pintor", "pinza", "piña", "piojo", "pipa", "pirata", "pisar", "piscina", "piso", "pista",
43016"pitón", "pizca", "placa", "plan", "plata", "playa", "plaza", "pleito", "pleno", "plomo",
43017"pluma", "plural", "pobre", "poco", "poder", "podio", "poema", "poesía", "poeta", "polen",
43018"policía", "pollo", "polvo", "pomada", "pomelo", "pomo", "pompa", "poner", "porción", "portal",
43019"posada", "poseer", "posible", "poste", "potencia", "potro", "pozo", "prado", "precoz", "pregunta",
43020"premio", "prensa", "preso", "previo", "primo", "príncipe", "prisión", "privar", "proa", "probar",
43021"proceso", "producto", "proeza", "profesor", "programa", "prole", "promesa", "pronto", "propio", "próximo",
43022"prueba", "público", "puchero", "pudor", "pueblo", "puerta", "puesto", "pulga", "pulir", "pulmón",
43023"pulpo", "pulso", "puma", "punto", "puñal", "puño", "pupa", "pupila", "puré", "quedar",
43024"queja", "quemar", "querer", "queso", "quieto", "química", "quince", "quitar", "rábano", "rabia",
43025"rabo", "ración", "radical", "raíz", "rama", "rampa", "rancho", "rango", "rapaz", "rápido",
43026"rapto", "rasgo", "raspa", "rato", "rayo", "raza", "razón", "reacción", "realidad", "rebaño",
43027"rebote", "recaer", "receta", "rechazo", "recoger", "recreo", "recto", "recurso", "red", "redondo",
43028"reducir", "reflejo", "reforma", "refrán", "refugio", "regalo", "regir", "regla", "regreso", "rehén",
43029"reino", "reír", "reja", "relato", "relevo", "relieve", "relleno", "reloj", "remar", "remedio",
43030"remo", "rencor", "rendir", "renta", "reparto", "repetir", "reposo", "reptil", "res", "rescate",
43031"resina", "respeto", "resto", "resumen", "retiro", "retorno", "retrato", "reunir", "revés", "revista",
43032"rey", "rezar", "rico", "riego", "rienda", "riesgo", "rifa", "rígido", "rigor", "rincón",
43033"riñón", "río", "riqueza", "risa", "ritmo", "rito", "rizo", "roble", "roce", "rociar",
43034"rodar", "rodeo", "rodilla", "roer", "rojizo", "rojo", "romero", "romper", "ron", "ronco",
43035"ronda", "ropa", "ropero", "rosa", "rosca", "rostro", "rotar", "rubí", "rubor", "rudo",
43036"rueda", "rugir", "ruido", "ruina", "ruleta", "rulo", "rumbo", "rumor", "ruptura", "ruta",
43037"rutina", "sábado", "saber", "sabio", "sable", "sacar", "sagaz", "sagrado", "sala", "saldo",
43038"salero", "salir", "salmón", "salón", "salsa", "salto", "salud", "salvar", "samba", "sanción",
43039"sandía", "sanear", "sangre", "sanidad", "sano", "santo", "sapo", "saque", "sardina", "sartén",
43040"sastre", "satán", "sauna", "saxofón", "sección", "seco", "secreto", "secta", "sed", "seguir",
43041"seis", "sello", "selva", "semana", "semilla", "senda", "sensor", "señal", "señor", "separar",
43042"sepia", "sequía", "ser", "serie", "sermón", "servir", "sesenta", "sesión", "seta", "setenta",
43043"severo", "sexo", "sexto", "sidra", "siesta", "siete", "siglo", "signo", "sílaba", "silbar",
43044"silencio", "silla", "símbolo", "simio", "sirena", "sistema", "sitio", "situar", "sobre", "socio",
43045"sodio", "sol", "solapa", "soldado", "soledad", "sólido", "soltar", "solución", "sombra", "sondeo",
43046"sonido", "sonoro", "sonrisa", "sopa", "soplar", "soporte", "sordo", "sorpresa", "sorteo", "sostén",
43047"sótano", "suave", "subir", "suceso", "sudor", "suegra", "suelo", "sueño", "suerte", "sufrir",
43048"sujeto", "sultán", "sumar", "superar", "suplir", "suponer", "supremo", "sur", "surco", "sureño",
43049"surgir", "susto", "sutil", "tabaco", "tabique", "tabla", "tabú", "taco", "tacto", "tajo",
43050"talar", "talco", "talento", "talla", "talón", "tamaño", "tambor", "tango", "tanque", "tapa",
43051"tapete", "tapia", "tapón", "taquilla", "tarde", "tarea", "tarifa", "tarjeta", "tarot", "tarro",
43052"tarta", "tatuaje", "tauro", "taza", "tazón", "teatro", "techo", "tecla", "técnica", "tejado",
43053"tejer", "tejido", "tela", "teléfono", "tema", "temor", "templo", "tenaz", "tender", "tener",
43054"tenis", "tenso", "teoría", "terapia", "terco", "término", "ternura", "terror", "tesis", "tesoro",
43055"testigo", "tetera", "texto", "tez", "tibio", "tiburón", "tiempo", "tienda", "tierra", "tieso",
43056"tigre", "tijera", "tilde", "timbre", "tímido", "timo", "tinta", "tío", "típico", "tipo",
43057"tira", "tirón", "titán", "títere", "título", "tiza", "toalla", "tobillo", "tocar", "tocino",
43058"todo", "toga", "toldo", "tomar", "tono", "tonto", "topar", "tope", "toque", "tórax",
43059"torero", "tormenta", "torneo", "toro", "torpedo", "torre", "torso", "tortuga", "tos", "tosco",
43060"toser", "tóxico", "trabajo", "tractor", "traer", "tráfico", "trago", "traje", "tramo", "trance",
43061"trato", "trauma", "trazar", "trébol", "tregua", "treinta", "tren", "trepar", "tres", "tribu",
43062"trigo", "tripa", "triste", "triunfo", "trofeo", "trompa", "tronco", "tropa", "trote", "trozo",
43063"truco", "trueno", "trufa", "tubería", "tubo", "tuerto", "tumba", "tumor", "túnel", "túnica",
43064"turbina", "turismo", "turno", "tutor", "ubicar", "úlcera", "umbral", "unidad", "unir", "universo",
43065"uno", "untar", "uña", "urbano", "urbe", "urgente", "urna", "usar", "usuario", "útil",
43066"utopía", "uva", "vaca", "vacío", "vacuna", "vagar", "vago", "vaina", "vajilla", "vale",
43067"válido", "valle", "valor", "válvula", "vampiro", "vara", "variar", "varón", "vaso", "vecino",
43068"vector", "vehículo", "veinte", "vejez", "vela", "velero", "veloz", "vena", "vencer", "venda",
43069"veneno", "vengar", "venir", "venta", "venus", "ver", "verano", "verbo", "verde", "vereda",
43070"verja", "verso", "verter", "vía", "viaje", "vibrar", "vicio", "víctima", "vida", "vídeo",
43071"vidrio", "viejo", "viernes", "vigor", "vil", "villa", "vinagre", "vino", "viñedo", "violín",
43072"viral", "virgo", "virtud", "visor", "víspera", "vista", "vitamina", "viudo", "vivaz", "vivero",
43073"vivir", "vivo", "volcán", "volumen", "volver", "voraz", "votar", "voto", "voz", "vuelo",
43074"vulgar", "yacer", "yate", "yegua", "yema", "yerno", "yeso", "yodo", "yoga", "yogur",
43075"zafiro", "zanja", "zapato", "zarza", "zona", "zorro", "zumo", "zurdo"]
43076</script>
43077 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
43078WORDLISTS["chinese_simplified"] = [
43079"的", "一", "是", "在", "不", "了", "有", "和", "人", "这",
43080"中", "大", "为", "上", "个", "国", "我", "以", "要", "他",
43081"时", "来", "用", "们", "生", "到", "作", "地", "于", "出",
43082"就", "分", "对", "成", "会", "可", "主", "发", "年", "动",
43083"同", "工", "也", "能", "下", "过", "子", "说", "产", "种",
43084"面", "而", "方", "后", "多", "定", "行", "学", "法", "所",
43085"民", "得", "经", "十", "三", "之", "进", "着", "等", "部",
43086"度", "家", "电", "力", "里", "如", "水", "化", "高", "自",
43087"二", "理", "起", "小", "物", "现", "实", "加", "量", "都",
43088"两", "体", "制", "机", "当", "使", "点", "从", "业", "本",
43089"去", "把", "性", "好", "应", "开", "它", "合", "还", "因",
43090"由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
43091"那", "社", "义", "事", "平", "形", "相", "全", "表", "间",
43092"样", "与", "关", "各", "重", "新", "线", "内", "数", "正",
43093"心", "反", "你", "明", "看", "原", "又", "么", "利", "比",
43094"或", "但", "质", "气", "第", "向", "道", "命", "此", "变",
43095"条", "只", "没", "结", "解", "问", "意", "建", "月", "公",
43096"无", "系", "军", "很", "情", "者", "最", "立", "代", "想",
43097"已", "通", "并", "提", "直", "题", "党", "程", "展", "五",
43098"果", "料", "象", "员", "革", "位", "入", "常", "文", "总",
43099"次", "品", "式", "活", "设", "及", "管", "特", "件", "长",
43100"求", "老", "头", "基", "资", "边", "流", "路", "级", "少",
43101"图", "山", "统", "接", "知", "较", "将", "组", "见", "计",
43102"别", "她", "手", "角", "期", "根", "论", "运", "农", "指",
43103"几", "九", "区", "强", "放", "决", "西", "被", "干", "做",
43104"必", "战", "先", "回", "则", "任", "取", "据", "处", "队",
43105"南", "给", "色", "光", "门", "即", "保", "治", "北", "造",
43106"百", "规", "热", "领", "七", "海", "口", "东", "导", "器",
43107"压", "志", "世", "金", "增", "争", "济", "阶", "油", "思",
43108"术", "极", "交", "受", "联", "什", "认", "六", "共", "权",
43109"收", "证", "改", "清", "美", "再", "采", "转", "更", "单",
43110"风", "切", "打", "白", "教", "速", "花", "带", "安", "场",
43111"身", "车", "例", "真", "务", "具", "万", "每", "目", "至",
43112"达", "走", "积", "示", "议", "声", "报", "斗", "完", "类",
43113"八", "离", "华", "名", "确", "才", "科", "张", "信", "马",
43114"节", "话", "米", "整", "空", "元", "况", "今", "集", "温",
43115"传", "土", "许", "步", "群", "广", "石", "记", "需", "段",
43116"研", "界", "拉", "林", "律", "叫", "且", "究", "观", "越",
43117"织", "装", "影", "算", "低", "持", "音", "众", "书", "布",
43118"复", "容", "儿", "须", "际", "商", "非", "验", "连", "断",
43119"深", "难", "近", "矿", "千", "周", "委", "素", "技", "备",
43120"半", "办", "青", "省", "列", "习", "响", "约", "支", "般",
43121"史", "感", "劳", "便", "团", "往", "酸", "历", "市", "克",
43122"何", "除", "消", "构", "府", "称", "太", "准", "精", "值",
43123"号", "率", "族", "维", "划", "选", "标", "写", "存", "候",
43124"毛", "亲", "快", "效", "斯", "院", "查", "江", "型", "眼",
43125"王", "按", "格", "养", "易", "置", "派", "层", "片", "始",
43126"却", "专", "状", "育", "厂", "京", "识", "适", "属", "圆",
43127"包", "火", "住", "调", "满", "县", "局", "照", "参", "红",
43128"细", "引", "听", "该", "铁", "价", "严", "首", "底", "液",
43129"官", "德", "随", "病", "苏", "失", "尔", "死", "讲", "配",
43130"女", "黄", "推", "显", "谈", "罪", "神", "艺", "呢", "席",
43131"含", "企", "望", "密", "批", "营", "项", "防", "举", "球",
43132"英", "氧", "势", "告", "李", "台", "落", "木", "帮", "轮",
43133"破", "亚", "师", "围", "注", "远", "字", "材", "排", "供",
43134"河", "态", "封", "另", "施", "减", "树", "溶", "怎", "止",
43135"案", "言", "士", "均", "武", "固", "叶", "鱼", "波", "视",
43136"仅", "费", "紧", "爱", "左", "章", "早", "朝", "害", "续",
43137"轻", "服", "试", "食", "充", "兵", "源", "判", "护", "司",
43138"足", "某", "练", "差", "致", "板", "田", "降", "黑", "犯",
43139"负", "击", "范", "继", "兴", "似", "余", "坚", "曲", "输",
43140"修", "故", "城", "夫", "够", "送", "笔", "船", "占", "右",
43141"财", "吃", "富", "春", "职", "觉", "汉", "画", "功", "巴",
43142"跟", "虽", "杂", "飞", "检", "吸", "助", "升", "阳", "互",
43143"初", "创", "抗", "考", "投", "坏", "策", "古", "径", "换",
43144"未", "跑", "留", "钢", "曾", "端", "责", "站", "简", "述",
43145"钱", "副", "尽", "帝", "射", "草", "冲", "承", "独", "令",
43146"限", "阿", "宣", "环", "双", "请", "超", "微", "让", "控",
43147"州", "良", "轴", "找", "否", "纪", "益", "依", "优", "顶",
43148"础", "载", "倒", "房", "突", "坐", "粉", "敌", "略", "客",
43149"袁", "冷", "胜", "绝", "析", "块", "剂", "测", "丝", "协",
43150"诉", "念", "陈", "仍", "罗", "盐", "友", "洋", "错", "苦",
43151"夜", "刑", "移", "频", "逐", "靠", "混", "母", "短", "皮",
43152"终", "聚", "汽", "村", "云", "哪", "既", "距", "卫", "停",
43153"烈", "央", "察", "烧", "迅", "境", "若", "印", "洲", "刻",
43154"括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
43155"侵", "吧", "甲", "游", "久", "菜", "味", "旧", "模", "湖",
43156"货", "损", "预", "阻", "毫", "普", "稳", "乙", "妈", "植",
43157"息", "扩", "银", "语", "挥", "酒", "守", "拿", "序", "纸",
43158"医", "缺", "雨", "吗", "针", "刘", "啊", "急", "唱", "误",
43159"训", "愿", "审", "附", "获", "茶", "鲜", "粮", "斤", "孩",
43160"脱", "硫", "肥", "善", "龙", "演", "父", "渐", "血", "欢",
43161"械", "掌", "歌", "沙", "刚", "攻", "谓", "盾", "讨", "晚",
43162"粒", "乱", "燃", "矛", "乎", "杀", "药", "宁", "鲁", "贵",
43163"钟", "煤", "读", "班", "伯", "香", "介", "迫", "句", "丰",
43164"培", "握", "兰", "担", "弦", "蛋", "沉", "假", "穿", "执",
43165"答", "乐", "谁", "顺", "烟", "缩", "征", "脸", "喜", "松",
43166"脚", "困", "异", "免", "背", "星", "福", "买", "染", "井",
43167"概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "静", "补",
43168"评", "翻", "肉", "践", "尼", "衣", "宽", "扬", "棉", "希",
43169"伤", "操", "垂", "秋", "宜", "氢", "套", "督", "振", "架",
43170"亮", "末", "宪", "庆", "编", "牛", "触", "映", "雷", "销",
43171"诗", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
43172"绿", "晶", "厚", "盟", "衡", "鸡", "孙", "延", "危", "胶",
43173"屋", "乡", "临", "陆", "顾", "掉", "呀", "灯", "岁", "措",
43174"束", "耐", "剧", "玉", "赵", "跳", "哥", "季", "课", "凯",
43175"胡", "额", "款", "绍", "卷", "齐", "伟", "蒸", "殖", "永",
43176"宗", "苗", "川", "炉", "岩", "弱", "零", "杨", "奏", "沿",
43177"露", "杆", "探", "滑", "镇", "饭", "浓", "航", "怀", "赶",
43178"库", "夺", "伊", "灵", "税", "途", "灭", "赛", "归", "召",
43179"鼓", "播", "盘", "裁", "险", "康", "唯", "录", "菌", "纯",
43180"借", "糖", "盖", "横", "符", "私", "努", "堂", "域", "枪",
43181"润", "幅", "哈", "竟", "熟", "虫", "泽", "脑", "壤", "碳",
43182"欧", "遍", "侧", "寨", "敢", "彻", "虑", "斜", "薄", "庭",
43183"纳", "弹", "饲", "伸", "折", "麦", "湿", "暗", "荷", "瓦",
43184"塞", "床", "筑", "恶", "户", "访", "塔", "奇", "透", "梁",
43185"刀", "旋", "迹", "卡", "氯", "遇", "份", "毒", "泥", "退",
43186"洗", "摆", "灰", "彩", "卖", "耗", "夏", "择", "忙", "铜",
43187"献", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
43188"阵", "阴", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
43189"楼", "避", "谋", "吨", "野", "猪", "旗", "累", "偏", "典",
43190"馆", "索", "秦", "脂", "潮", "爷", "豆", "忽", "托", "惊",
43191"塑", "遗", "愈", "朱", "替", "纤", "粗", "倾", "尚", "痛",
43192"楚", "谢", "奋", "购", "磨", "君", "池", "旁", "碎", "骨",
43193"监", "捕", "弟", "暴", "割", "贯", "殊", "释", "词", "亡",
43194"壁", "顿", "宝", "午", "尘", "闻", "揭", "炮", "残", "冬",
43195"桥", "妇", "警", "综", "招", "吴", "付", "浮", "遭", "徐",
43196"您", "摇", "谷", "赞", "箱", "隔", "订", "男", "吹", "园",
43197"纷", "唐", "败", "宋", "玻", "巨", "耕", "坦", "荣", "闭",
43198"湾", "键", "凡", "驻", "锅", "救", "恩", "剥", "凝", "碱",
43199"齿", "截", "炼", "麻", "纺", "禁", "废", "盛", "版", "缓",
43200"净", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
43201"庄", "街", "藏", "姑", "贸", "腐", "奴", "啦", "惯", "乘",
43202"伙", "恢", "匀", "纱", "扎", "辩", "耳", "彪", "臣", "亿",
43203"璃", "抵", "脉", "秀", "萨", "俄", "网", "舞", "店", "喷",
43204"纵", "寸", "汗", "挂", "洪", "贺", "闪", "柬", "爆", "烯",
43205"津", "稻", "墙", "软", "勇", "像", "滚", "厘", "蒙", "芳",
43206"肯", "坡", "柱", "荡", "腿", "仪", "旅", "尾", "轧", "冰",
43207"贡", "登", "黎", "削", "钻", "勒", "逃", "障", "氨", "郭",
43208"峰", "币", "港", "伏", "轨", "亩", "毕", "擦", "莫", "刺",
43209"浪", "秘", "援", "株", "健", "售", "股", "岛", "甘", "泡",
43210"睡", "童", "铸", "汤", "阀", "休", "汇", "舍", "牧", "绕",
43211"炸", "哲", "磷", "绩", "朋", "淡", "尖", "启", "陷", "柴",
43212"呈", "徒", "颜", "泪", "稍", "忘", "泵", "蓝", "拖", "洞",
43213"授", "镜", "辛", "壮", "锋", "贫", "虚", "弯", "摩", "泰",
43214"幼", "廷", "尊", "窗", "纲", "弄", "隶", "疑", "氏", "宫",
43215"姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "违",
43216"夹", "腰", "缘", "珠", "穷", "森", "枝", "竹", "沟", "催",
43217"绳", "忆", "邦", "剩", "幸", "浆", "栏", "拥", "牙", "贮",
43218"礼", "滤", "钠", "纹", "罢", "拍", "咱", "喊", "袖", "埃",
43219"勤", "罚", "焦", "潜", "伍", "墨", "欲", "缝", "姓", "刊",
43220"饱", "仿", "奖", "铝", "鬼", "丽", "跨", "默", "挖", "链",
43221"扫", "喝", "袋", "炭", "污", "幕", "诸", "弧", "励", "梅",
43222"奶", "洁", "灾", "舟", "鉴", "苯", "讼", "抱", "毁", "懂",
43223"寒", "智", "埔", "寄", "届", "跃", "渡", "挑", "丹", "艰",
43224"贝", "碰", "拔", "爹", "戴", "码", "梦", "芽", "熔", "赤",
43225"渔", "哭", "敬", "颗", "奔", "铅", "仲", "虎", "稀", "妹",
43226"乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "仓", "魏",
43227"锐", "晓", "氮", "兼", "隐", "碍", "赫", "拨", "忠", "肃",
43228"缸", "牵", "抢", "博", "巧", "壳", "兄", "杜", "讯", "诚",
43229"碧", "祥", "柯", "页", "巡", "矩", "悲", "灌", "龄", "伦",
43230"票", "寻", "桂", "铺", "圣", "恐", "恰", "郑", "趣", "抬",
43231"荒", "腾", "贴", "柔", "滴", "猛", "阔", "辆", "妻", "填",
43232"撤", "储", "签", "闹", "扰", "紫", "砂", "递", "戏", "吊",
43233"陶", "伐", "喂", "疗", "瓶", "婆", "抚", "臂", "摸", "忍",
43234"虾", "蜡", "邻", "胸", "巩", "挤", "偶", "弃", "槽", "劲",
43235"乳", "邓", "吉", "仁", "烂", "砖", "租", "乌", "舰", "伴",
43236"瓜", "浅", "丙", "暂", "燥", "橡", "柳", "迷", "暖", "牌",
43237"秧", "胆", "详", "簧", "踏", "瓷", "谱", "呆", "宾", "糊",
43238"洛", "辉", "愤", "竞", "隙", "怒", "粘", "乃", "绪", "肩",
43239"籍", "敏", "涂", "熙", "皆", "侦", "悬", "掘", "享", "纠",
43240"醒", "狂", "锁", "淀", "恨", "牲", "霸", "爬", "赏", "逆",
43241"玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鸭",
43242"趋", "凤", "晨", "畜", "辈", "秩", "卵", "署", "梯", "炎",
43243"滩", "棋", "驱", "筛", "峡", "冒", "啥", "寿", "译", "浸",
43244"泉", "帽", "迟", "硅", "疆", "贷", "漏", "稿", "冠", "嫩",
43245"胁", "芯", "牢", "叛", "蚀", "奥", "鸣", "岭", "羊", "凭",
43246"串", "塘", "绘", "酵", "融", "盆", "锡", "庙", "筹", "冻",
43247"辅", "摄", "袭", "筋", "拒", "僚", "旱", "钾", "鸟", "漆",
43248"沈", "眉", "疏", "添", "棒", "穗", "硝", "韩", "逼", "扭",
43249"侨", "凉", "挺", "碗", "栽", "炒", "杯", "患", "馏", "劝",
43250"豪", "辽", "勃", "鸿", "旦", "吏", "拜", "狗", "埋", "辊",
43251"掩", "饮", "搬", "骂", "辞", "勾", "扣", "估", "蒋", "绒",
43252"雾", "丈", "朵", "姆", "拟", "宇", "辑", "陕", "雕", "偿",
43253"蓄", "崇", "剪", "倡", "厅", "咬", "驶", "薯", "刷", "斥",
43254"番", "赋", "奉", "佛", "浇", "漫", "曼", "扇", "钙", "桃",
43255"扶", "仔", "返", "俗", "亏", "腔", "鞋", "棱", "覆", "框",
43256"悄", "叔", "撞", "骗", "勘", "旺", "沸", "孤", "吐", "孟",
43257"渠", "屈", "疾", "妙", "惜", "仰", "狠", "胀", "谐", "抛",
43258"霉", "桑", "岗", "嘛", "衰", "盗", "渗", "脏", "赖", "涌",
43259"甜", "曹", "阅", "肌", "哩", "厉", "烃", "纬", "毅", "昨",
43260"伪", "症", "煮", "叹", "钉", "搭", "茎", "笼", "酷", "偷",
43261"弓", "锥", "恒", "杰", "坑", "鼻", "翼", "纶", "叙", "狱",
43262"逮", "罐", "络", "棚", "抑", "膨", "蔬", "寺", "骤", "穆",
43263"冶", "枯", "册", "尸", "凸", "绅", "坯", "牺", "焰", "轰",
43264"欣", "晋", "瘦", "御", "锭", "锦", "丧", "旬", "锻", "垄",
43265"搜", "扑", "邀", "亭", "酯", "迈", "舒", "脆", "酶", "闲",
43266"忧", "酚", "顽", "羽", "涨", "卸", "仗", "陪", "辟", "惩",
43267"杭", "姚", "肚", "捉", "飘", "漂", "昆", "欺", "吾", "郎",
43268"烷", "汁", "呵", "饰", "萧", "雅", "邮", "迁", "燕", "撒",
43269"姻", "赴", "宴", "烦", "债", "帐", "斑", "铃", "旨", "醇",
43270"董", "饼", "雏", "姿", "拌", "傅", "腹", "妥", "揉", "贤",
43271"拆", "歪", "葡", "胺", "丢", "浩", "徽", "昂", "垫", "挡",
43272"览", "贪", "慰", "缴", "汪", "慌", "冯", "诺", "姜", "谊",
43273"凶", "劣", "诬", "耀", "昏", "躺", "盈", "骑", "乔", "溪",
43274"丛", "卢", "抹", "闷", "咨", "刮", "驾", "缆", "悟", "摘",
43275"铒", "掷", "颇", "幻", "柄", "惠", "惨", "佳", "仇", "腊",
43276"窝", "涤", "剑", "瞧", "堡", "泼", "葱", "罩", "霍", "捞",
43277"胎", "苍", "滨", "俩", "捅", "湘", "砍", "霞", "邵", "萄",
43278"疯", "淮", "遂", "熊", "粪", "烘", "宿", "档", "戈", "驳",
43279"嫂", "裕", "徙", "箭", "捐", "肠", "撑", "晒", "辨", "殿",
43280"莲", "摊", "搅", "酱", "屏", "疫", "哀", "蔡", "堵", "沫",
43281"皱", "畅", "叠", "阁", "莱", "敲", "辖", "钩", "痕", "坝",
43282"巷", "饿", "祸", "丘", "玄", "溜", "曰", "逻", "彭", "尝",
43283"卿", "妨", "艇", "吞", "韦", "怨", "矮", "歇" ]
43284</script>
43285 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
43286WORDLISTS["chinese_traditional"] = [
43287"的", "一", "是", "在", "不", "了", "有", "和", "人", "這",
43288"中", "大", "為", "上", "個", "國", "我", "以", "要", "他",
43289"時", "來", "用", "們", "生", "到", "作", "地", "於", "出",
43290"就", "分", "對", "成", "會", "可", "主", "發", "年", "動",
43291"同", "工", "也", "能", "下", "過", "子", "說", "產", "種",
43292"面", "而", "方", "後", "多", "定", "行", "學", "法", "所",
43293"民", "得", "經", "十", "三", "之", "進", "著", "等", "部",
43294"度", "家", "電", "力", "裡", "如", "水", "化", "高", "自",
43295"二", "理", "起", "小", "物", "現", "實", "加", "量", "都",
43296"兩", "體", "制", "機", "當", "使", "點", "從", "業", "本",
43297"去", "把", "性", "好", "應", "開", "它", "合", "還", "因",
43298"由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
43299"那", "社", "義", "事", "平", "形", "相", "全", "表", "間",
43300"樣", "與", "關", "各", "重", "新", "線", "內", "數", "正",
43301"心", "反", "你", "明", "看", "原", "又", "麼", "利", "比",
43302"或", "但", "質", "氣", "第", "向", "道", "命", "此", "變",
43303"條", "只", "沒", "結", "解", "問", "意", "建", "月", "公",
43304"無", "系", "軍", "很", "情", "者", "最", "立", "代", "想",
43305"已", "通", "並", "提", "直", "題", "黨", "程", "展", "五",
43306"果", "料", "象", "員", "革", "位", "入", "常", "文", "總",
43307"次", "品", "式", "活", "設", "及", "管", "特", "件", "長",
43308"求", "老", "頭", "基", "資", "邊", "流", "路", "級", "少",
43309"圖", "山", "統", "接", "知", "較", "將", "組", "見", "計",
43310"別", "她", "手", "角", "期", "根", "論", "運", "農", "指",
43311"幾", "九", "區", "強", "放", "決", "西", "被", "幹", "做",
43312"必", "戰", "先", "回", "則", "任", "取", "據", "處", "隊",
43313"南", "給", "色", "光", "門", "即", "保", "治", "北", "造",
43314"百", "規", "熱", "領", "七", "海", "口", "東", "導", "器",
43315"壓", "志", "世", "金", "增", "爭", "濟", "階", "油", "思",
43316"術", "極", "交", "受", "聯", "什", "認", "六", "共", "權",
43317"收", "證", "改", "清", "美", "再", "採", "轉", "更", "單",
43318"風", "切", "打", "白", "教", "速", "花", "帶", "安", "場",
43319"身", "車", "例", "真", "務", "具", "萬", "每", "目", "至",
43320"達", "走", "積", "示", "議", "聲", "報", "鬥", "完", "類",
43321"八", "離", "華", "名", "確", "才", "科", "張", "信", "馬",
43322"節", "話", "米", "整", "空", "元", "況", "今", "集", "溫",
43323"傳", "土", "許", "步", "群", "廣", "石", "記", "需", "段",
43324"研", "界", "拉", "林", "律", "叫", "且", "究", "觀", "越",
43325"織", "裝", "影", "算", "低", "持", "音", "眾", "書", "布",
43326"复", "容", "兒", "須", "際", "商", "非", "驗", "連", "斷",
43327"深", "難", "近", "礦", "千", "週", "委", "素", "技", "備",
43328"半", "辦", "青", "省", "列", "習", "響", "約", "支", "般",
43329"史", "感", "勞", "便", "團", "往", "酸", "歷", "市", "克",
43330"何", "除", "消", "構", "府", "稱", "太", "準", "精", "值",
43331"號", "率", "族", "維", "劃", "選", "標", "寫", "存", "候",
43332"毛", "親", "快", "效", "斯", "院", "查", "江", "型", "眼",
43333"王", "按", "格", "養", "易", "置", "派", "層", "片", "始",
43334"卻", "專", "狀", "育", "廠", "京", "識", "適", "屬", "圓",
43335"包", "火", "住", "調", "滿", "縣", "局", "照", "參", "紅",
43336"細", "引", "聽", "該", "鐵", "價", "嚴", "首", "底", "液",
43337"官", "德", "隨", "病", "蘇", "失", "爾", "死", "講", "配",
43338"女", "黃", "推", "顯", "談", "罪", "神", "藝", "呢", "席",
43339"含", "企", "望", "密", "批", "營", "項", "防", "舉", "球",
43340"英", "氧", "勢", "告", "李", "台", "落", "木", "幫", "輪",
43341"破", "亞", "師", "圍", "注", "遠", "字", "材", "排", "供",
43342"河", "態", "封", "另", "施", "減", "樹", "溶", "怎", "止",
43343"案", "言", "士", "均", "武", "固", "葉", "魚", "波", "視",
43344"僅", "費", "緊", "愛", "左", "章", "早", "朝", "害", "續",
43345"輕", "服", "試", "食", "充", "兵", "源", "判", "護", "司",
43346"足", "某", "練", "差", "致", "板", "田", "降", "黑", "犯",
43347"負", "擊", "范", "繼", "興", "似", "餘", "堅", "曲", "輸",
43348"修", "故", "城", "夫", "夠", "送", "筆", "船", "佔", "右",
43349"財", "吃", "富", "春", "職", "覺", "漢", "畫", "功", "巴",
43350"跟", "雖", "雜", "飛", "檢", "吸", "助", "昇", "陽", "互",
43351"初", "創", "抗", "考", "投", "壞", "策", "古", "徑", "換",
43352"未", "跑", "留", "鋼", "曾", "端", "責", "站", "簡", "述",
43353"錢", "副", "盡", "帝", "射", "草", "衝", "承", "獨", "令",
43354"限", "阿", "宣", "環", "雙", "請", "超", "微", "讓", "控",
43355"州", "良", "軸", "找", "否", "紀", "益", "依", "優", "頂",
43356"礎", "載", "倒", "房", "突", "坐", "粉", "敵", "略", "客",
43357"袁", "冷", "勝", "絕", "析", "塊", "劑", "測", "絲", "協",
43358"訴", "念", "陳", "仍", "羅", "鹽", "友", "洋", "錯", "苦",
43359"夜", "刑", "移", "頻", "逐", "靠", "混", "母", "短", "皮",
43360"終", "聚", "汽", "村", "雲", "哪", "既", "距", "衛", "停",
43361"烈", "央", "察", "燒", "迅", "境", "若", "印", "洲", "刻",
43362"括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
43363"侵", "吧", "甲", "遊", "久", "菜", "味", "舊", "模", "湖",
43364"貨", "損", "預", "阻", "毫", "普", "穩", "乙", "媽", "植",
43365"息", "擴", "銀", "語", "揮", "酒", "守", "拿", "序", "紙",
43366"醫", "缺", "雨", "嗎", "針", "劉", "啊", "急", "唱", "誤",
43367"訓", "願", "審", "附", "獲", "茶", "鮮", "糧", "斤", "孩",
43368"脫", "硫", "肥", "善", "龍", "演", "父", "漸", "血", "歡",
43369"械", "掌", "歌", "沙", "剛", "攻", "謂", "盾", "討", "晚",
43370"粒", "亂", "燃", "矛", "乎", "殺", "藥", "寧", "魯", "貴",
43371"鐘", "煤", "讀", "班", "伯", "香", "介", "迫", "句", "豐",
43372"培", "握", "蘭", "擔", "弦", "蛋", "沉", "假", "穿", "執",
43373"答", "樂", "誰", "順", "煙", "縮", "徵", "臉", "喜", "松",
43374"腳", "困", "異", "免", "背", "星", "福", "買", "染", "井",
43375"概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "靜", "補",
43376"評", "翻", "肉", "踐", "尼", "衣", "寬", "揚", "棉", "希",
43377"傷", "操", "垂", "秋", "宜", "氫", "套", "督", "振", "架",
43378"亮", "末", "憲", "慶", "編", "牛", "觸", "映", "雷", "銷",
43379"詩", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
43380"綠", "晶", "厚", "盟", "衡", "雞", "孫", "延", "危", "膠",
43381"屋", "鄉", "臨", "陸", "顧", "掉", "呀", "燈", "歲", "措",
43382"束", "耐", "劇", "玉", "趙", "跳", "哥", "季", "課", "凱",
43383"胡", "額", "款", "紹", "卷", "齊", "偉", "蒸", "殖", "永",
43384"宗", "苗", "川", "爐", "岩", "弱", "零", "楊", "奏", "沿",
43385"露", "桿", "探", "滑", "鎮", "飯", "濃", "航", "懷", "趕",
43386"庫", "奪", "伊", "靈", "稅", "途", "滅", "賽", "歸", "召",
43387"鼓", "播", "盤", "裁", "險", "康", "唯", "錄", "菌", "純",
43388"借", "糖", "蓋", "橫", "符", "私", "努", "堂", "域", "槍",
43389"潤", "幅", "哈", "竟", "熟", "蟲", "澤", "腦", "壤", "碳",
43390"歐", "遍", "側", "寨", "敢", "徹", "慮", "斜", "薄", "庭",
43391"納", "彈", "飼", "伸", "折", "麥", "濕", "暗", "荷", "瓦",
43392"塞", "床", "築", "惡", "戶", "訪", "塔", "奇", "透", "梁",
43393"刀", "旋", "跡", "卡", "氯", "遇", "份", "毒", "泥", "退",
43394"洗", "擺", "灰", "彩", "賣", "耗", "夏", "擇", "忙", "銅",
43395"獻", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
43396"陣", "陰", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
43397"樓", "避", "謀", "噸", "野", "豬", "旗", "累", "偏", "典",
43398"館", "索", "秦", "脂", "潮", "爺", "豆", "忽", "托", "驚",
43399"塑", "遺", "愈", "朱", "替", "纖", "粗", "傾", "尚", "痛",
43400"楚", "謝", "奮", "購", "磨", "君", "池", "旁", "碎", "骨",
43401"監", "捕", "弟", "暴", "割", "貫", "殊", "釋", "詞", "亡",
43402"壁", "頓", "寶", "午", "塵", "聞", "揭", "炮", "殘", "冬",
43403"橋", "婦", "警", "綜", "招", "吳", "付", "浮", "遭", "徐",
43404"您", "搖", "谷", "贊", "箱", "隔", "訂", "男", "吹", "園",
43405"紛", "唐", "敗", "宋", "玻", "巨", "耕", "坦", "榮", "閉",
43406"灣", "鍵", "凡", "駐", "鍋", "救", "恩", "剝", "凝", "鹼",
43407"齒", "截", "煉", "麻", "紡", "禁", "廢", "盛", "版", "緩",
43408"淨", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
43409"莊", "街", "藏", "姑", "貿", "腐", "奴", "啦", "慣", "乘",
43410"夥", "恢", "勻", "紗", "扎", "辯", "耳", "彪", "臣", "億",
43411"璃", "抵", "脈", "秀", "薩", "俄", "網", "舞", "店", "噴",
43412"縱", "寸", "汗", "掛", "洪", "賀", "閃", "柬", "爆", "烯",
43413"津", "稻", "牆", "軟", "勇", "像", "滾", "厘", "蒙", "芳",
43414"肯", "坡", "柱", "盪", "腿", "儀", "旅", "尾", "軋", "冰",
43415"貢", "登", "黎", "削", "鑽", "勒", "逃", "障", "氨", "郭",
43416"峰", "幣", "港", "伏", "軌", "畝", "畢", "擦", "莫", "刺",
43417"浪", "秘", "援", "株", "健", "售", "股", "島", "甘", "泡",
43418"睡", "童", "鑄", "湯", "閥", "休", "匯", "舍", "牧", "繞",
43419"炸", "哲", "磷", "績", "朋", "淡", "尖", "啟", "陷", "柴",
43420"呈", "徒", "顏", "淚", "稍", "忘", "泵", "藍", "拖", "洞",
43421"授", "鏡", "辛", "壯", "鋒", "貧", "虛", "彎", "摩", "泰",
43422"幼", "廷", "尊", "窗", "綱", "弄", "隸", "疑", "氏", "宮",
43423"姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "違",
43424"夾", "腰", "緣", "珠", "窮", "森", "枝", "竹", "溝", "催",
43425"繩", "憶", "邦", "剩", "幸", "漿", "欄", "擁", "牙", "貯",
43426"禮", "濾", "鈉", "紋", "罷", "拍", "咱", "喊", "袖", "埃",
43427"勤", "罰", "焦", "潛", "伍", "墨", "欲", "縫", "姓", "刊",
43428"飽", "仿", "獎", "鋁", "鬼", "麗", "跨", "默", "挖", "鏈",
43429"掃", "喝", "袋", "炭", "污", "幕", "諸", "弧", "勵", "梅",
43430"奶", "潔", "災", "舟", "鑑", "苯", "訟", "抱", "毀", "懂",
43431"寒", "智", "埔", "寄", "屆", "躍", "渡", "挑", "丹", "艱",
43432"貝", "碰", "拔", "爹", "戴", "碼", "夢", "芽", "熔", "赤",
43433"漁", "哭", "敬", "顆", "奔", "鉛", "仲", "虎", "稀", "妹",
43434"乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "倉", "魏",
43435"銳", "曉", "氮", "兼", "隱", "礙", "赫", "撥", "忠", "肅",
43436"缸", "牽", "搶", "博", "巧", "殼", "兄", "杜", "訊", "誠",
43437"碧", "祥", "柯", "頁", "巡", "矩", "悲", "灌", "齡", "倫",
43438"票", "尋", "桂", "鋪", "聖", "恐", "恰", "鄭", "趣", "抬",
43439"荒", "騰", "貼", "柔", "滴", "猛", "闊", "輛", "妻", "填",
43440"撤", "儲", "簽", "鬧", "擾", "紫", "砂", "遞", "戲", "吊",
43441"陶", "伐", "餵", "療", "瓶", "婆", "撫", "臂", "摸", "忍",
43442"蝦", "蠟", "鄰", "胸", "鞏", "擠", "偶", "棄", "槽", "勁",
43443"乳", "鄧", "吉", "仁", "爛", "磚", "租", "烏", "艦", "伴",
43444"瓜", "淺", "丙", "暫", "燥", "橡", "柳", "迷", "暖", "牌",
43445"秧", "膽", "詳", "簧", "踏", "瓷", "譜", "呆", "賓", "糊",
43446"洛", "輝", "憤", "競", "隙", "怒", "粘", "乃", "緒", "肩",
43447"籍", "敏", "塗", "熙", "皆", "偵", "懸", "掘", "享", "糾",
43448"醒", "狂", "鎖", "淀", "恨", "牲", "霸", "爬", "賞", "逆",
43449"玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鴨",
43450"趨", "鳳", "晨", "畜", "輩", "秩", "卵", "署", "梯", "炎",
43451"灘", "棋", "驅", "篩", "峽", "冒", "啥", "壽", "譯", "浸",
43452"泉", "帽", "遲", "矽", "疆", "貸", "漏", "稿", "冠", "嫩",
43453"脅", "芯", "牢", "叛", "蝕", "奧", "鳴", "嶺", "羊", "憑",
43454"串", "塘", "繪", "酵", "融", "盆", "錫", "廟", "籌", "凍",
43455"輔", "攝", "襲", "筋", "拒", "僚", "旱", "鉀", "鳥", "漆",
43456"沈", "眉", "疏", "添", "棒", "穗", "硝", "韓", "逼", "扭",
43457"僑", "涼", "挺", "碗", "栽", "炒", "杯", "患", "餾", "勸",
43458"豪", "遼", "勃", "鴻", "旦", "吏", "拜", "狗", "埋", "輥",
43459"掩", "飲", "搬", "罵", "辭", "勾", "扣", "估", "蔣", "絨",
43460"霧", "丈", "朵", "姆", "擬", "宇", "輯", "陝", "雕", "償",
43461"蓄", "崇", "剪", "倡", "廳", "咬", "駛", "薯", "刷", "斥",
43462"番", "賦", "奉", "佛", "澆", "漫", "曼", "扇", "鈣", "桃",
43463"扶", "仔", "返", "俗", "虧", "腔", "鞋", "棱", "覆", "框",
43464"悄", "叔", "撞", "騙", "勘", "旺", "沸", "孤", "吐", "孟",
43465"渠", "屈", "疾", "妙", "惜", "仰", "狠", "脹", "諧", "拋",
43466"黴", "桑", "崗", "嘛", "衰", "盜", "滲", "臟", "賴", "湧",
43467"甜", "曹", "閱", "肌", "哩", "厲", "烴", "緯", "毅", "昨",
43468"偽", "症", "煮", "嘆", "釘", "搭", "莖", "籠", "酷", "偷",
43469"弓", "錐", "恆", "傑", "坑", "鼻", "翼", "綸", "敘", "獄",
43470"逮", "罐", "絡", "棚", "抑", "膨", "蔬", "寺", "驟", "穆",
43471"冶", "枯", "冊", "屍", "凸", "紳", "坯", "犧", "焰", "轟",
43472"欣", "晉", "瘦", "禦", "錠", "錦", "喪", "旬", "鍛", "壟",
43473"搜", "撲", "邀", "亭", "酯", "邁", "舒", "脆", "酶", "閒",
43474"憂", "酚", "頑", "羽", "漲", "卸", "仗", "陪", "闢", "懲",
43475"杭", "姚", "肚", "捉", "飄", "漂", "昆", "欺", "吾", "郎",
43476"烷", "汁", "呵", "飾", "蕭", "雅", "郵", "遷", "燕", "撒",
43477"姻", "赴", "宴", "煩", "債", "帳", "斑", "鈴", "旨", "醇",
43478"董", "餅", "雛", "姿", "拌", "傅", "腹", "妥", "揉", "賢",
43479"拆", "歪", "葡", "胺", "丟", "浩", "徽", "昂", "墊", "擋",
43480"覽", "貪", "慰", "繳", "汪", "慌", "馮", "諾", "姜", "誼",
43481"兇", "劣", "誣", "耀", "昏", "躺", "盈", "騎", "喬", "溪",
43482"叢", "盧", "抹", "悶", "諮", "刮", "駕", "纜", "悟", "摘",
43483"鉺", "擲", "頗", "幻", "柄", "惠", "慘", "佳", "仇", "臘",
43484"窩", "滌", "劍", "瞧", "堡", "潑", "蔥", "罩", "霍", "撈",
43485"胎", "蒼", "濱", "倆", "捅", "湘", "砍", "霞", "邵", "萄",
43486"瘋", "淮", "遂", "熊", "糞", "烘", "宿", "檔", "戈", "駁",
43487"嫂", "裕", "徙", "箭", "捐", "腸", "撐", "曬", "辨", "殿",
43488"蓮", "攤", "攪", "醬", "屏", "疫", "哀", "蔡", "堵", "沫",
43489"皺", "暢", "疊", "閣", "萊", "敲", "轄", "鉤", "痕", "壩",
43490"巷", "餓", "禍", "丘", "玄", "溜", "曰", "邏", "彭", "嘗",
43491"卿", "妨", "艇", "吞", "韋", "怨", "矮", "歇" ]
43492</script>
43493 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
43494WORDLISTS["french"] = [
43495"abaisser", "abandon", "abdiquer", "abeille", "abolir", "aborder", "aboutir", "aboyer", "abrasif", "abreuver",
43496"abriter", "abroger", "abrupt", "absence", "absolu", "absurde", "abusif", "abyssal", "académie", "acajou",
43497"acarien", "accabler", "accepter", "acclamer", "accolade", "accroche", "accuser", "acerbe", "achat", "acheter",
43498"aciduler", "acier", "acompte", "acquérir", "acronyme", "acteur", "actif", "actuel", "adepte", "adéquat",
43499"adhésif", "adjectif", "adjuger", "admettre", "admirer", "adopter", "adorer", "adoucir", "adresse", "adroit",
43500"adulte", "adverbe", "aérer", "aéronef", "affaire", "affecter", "affiche", "affreux", "affubler", "agacer",
43501"agencer", "agile", "agiter", "agrafer", "agréable", "agrume", "aider", "aiguille", "ailier", "aimable",
43502"aisance", "ajouter", "ajuster", "alarmer", "alchimie", "alerte", "algèbre", "algue", "aliéner", "aliment",
43503"alléger", "alliage", "allouer", "allumer", "alourdir", "alpaga", "altesse", "alvéole", "amateur", "ambigu",
43504"ambre", "aménager", "amertume", "amidon", "amiral", "amorcer", "amour", "amovible", "amphibie", "ampleur",
43505"amusant", "analyse", "anaphore", "anarchie", "anatomie", "ancien", "anéantir", "angle", "angoisse", "anguleux",
43506"animal", "annexer", "annonce", "annuel", "anodin", "anomalie", "anonyme", "anormal", "antenne", "antidote",
43507"anxieux", "apaiser", "apéritif", "aplanir", "apologie", "appareil", "appeler", "apporter", "appuyer", "aquarium",
43508"aqueduc", "arbitre", "arbuste", "ardeur", "ardoise", "argent", "arlequin", "armature", "armement", "armoire",
43509"armure", "arpenter", "arracher", "arriver", "arroser", "arsenic", "artériel", "article", "aspect", "asphalte",
43510"aspirer", "assaut", "asservir", "assiette", "associer", "assurer", "asticot", "astre", "astuce", "atelier",
43511"atome", "atrium", "atroce", "attaque", "attentif", "attirer", "attraper", "aubaine", "auberge", "audace",
43512"audible", "augurer", "aurore", "automne", "autruche", "avaler", "avancer", "avarice", "avenir", "averse",
43513"aveugle", "aviateur", "avide", "avion", "aviser", "avoine", "avouer", "avril", "axial", "axiome",
43514"badge", "bafouer", "bagage", "baguette", "baignade", "balancer", "balcon", "baleine", "balisage", "bambin",
43515"bancaire", "bandage", "banlieue", "bannière", "banquier", "barbier", "baril", "baron", "barque", "barrage",
43516"bassin", "bastion", "bataille", "bateau", "batterie", "baudrier", "bavarder", "belette", "bélier", "belote",
43517"bénéfice", "berceau", "berger", "berline", "bermuda", "besace", "besogne", "bétail", "beurre", "biberon",
43518"bicycle", "bidule", "bijou", "bilan", "bilingue", "billard", "binaire", "biologie", "biopsie", "biotype",
43519"biscuit", "bison", "bistouri", "bitume", "bizarre", "blafard", "blague", "blanchir", "blessant", "blinder",
43520"blond", "bloquer", "blouson", "bobard", "bobine", "boire", "boiser", "bolide", "bonbon", "bondir",
43521"bonheur", "bonifier", "bonus", "bordure", "borne", "botte", "boucle", "boueux", "bougie", "boulon",
43522"bouquin", "bourse", "boussole", "boutique", "boxeur", "branche", "brasier", "brave", "brebis", "brèche",
43523"breuvage", "bricoler", "brigade", "brillant", "brioche", "brique", "brochure", "broder", "bronzer", "brousse",
43524"broyeur", "brume", "brusque", "brutal", "bruyant", "buffle", "buisson", "bulletin", "bureau", "burin",
43525"bustier", "butiner", "butoir", "buvable", "buvette", "cabanon", "cabine", "cachette", "cadeau", "cadre",
43526"caféine", "caillou", "caisson", "calculer", "calepin", "calibre", "calmer", "calomnie", "calvaire", "camarade",
43527"caméra", "camion", "campagne", "canal", "caneton", "canon", "cantine", "canular", "capable", "caporal",
43528"caprice", "capsule", "capter", "capuche", "carabine", "carbone", "caresser", "caribou", "carnage", "carotte",
43529"carreau", "carton", "cascade", "casier", "casque", "cassure", "causer", "caution", "cavalier", "caverne",
43530"caviar", "cédille", "ceinture", "céleste", "cellule", "cendrier", "censurer", "central", "cercle", "cérébral",
43531"cerise", "cerner", "cerveau", "cesser", "chagrin", "chaise", "chaleur", "chambre", "chance", "chapitre",
43532"charbon", "chasseur", "chaton", "chausson", "chavirer", "chemise", "chenille", "chéquier", "chercher", "cheval",
43533"chien", "chiffre", "chignon", "chimère", "chiot", "chlorure", "chocolat", "choisir", "chose", "chouette",
43534"chrome", "chute", "cigare", "cigogne", "cimenter", "cinéma", "cintrer", "circuler", "cirer", "cirque",
43535"citerne", "citoyen", "citron", "civil", "clairon", "clameur", "claquer", "classe", "clavier", "client",
43536"cligner", "climat", "clivage", "cloche", "clonage", "cloporte", "cobalt", "cobra", "cocasse", "cocotier",
43537"coder", "codifier", "coffre", "cogner", "cohésion", "coiffer", "coincer", "colère", "colibri", "colline",
43538"colmater", "colonel", "combat", "comédie", "commande", "compact", "concert", "conduire", "confier", "congeler",
43539"connoter", "consonne", "contact", "convexe", "copain", "copie", "corail", "corbeau", "cordage", "corniche",
43540"corpus", "correct", "cortège", "cosmique", "costume", "coton", "coude", "coupure", "courage", "couteau",
43541"couvrir", "coyote", "crabe", "crainte", "cravate", "crayon", "créature", "créditer", "crémeux", "creuser",
43542"crevette", "cribler", "crier", "cristal", "critère", "croire", "croquer", "crotale", "crucial", "cruel",
43543"crypter", "cubique", "cueillir", "cuillère", "cuisine", "cuivre", "culminer", "cultiver", "cumuler", "cupide",
43544"curatif", "curseur", "cyanure", "cycle", "cylindre", "cynique", "daigner", "damier", "danger", "danseur",
43545"dauphin", "débattre", "débiter", "déborder", "débrider", "débutant", "décaler", "décembre", "déchirer", "décider",
43546"déclarer", "décorer", "décrire", "décupler", "dédale", "déductif", "déesse", "défensif", "défiler", "défrayer",
43547"dégager", "dégivrer", "déglutir", "dégrafer", "déjeuner", "délice", "déloger", "demander", "demeurer", "démolir",
43548"dénicher", "dénouer", "dentelle", "dénuder", "départ", "dépenser", "déphaser", "déplacer", "déposer", "déranger",
43549"dérober", "désastre", "descente", "désert", "désigner", "désobéir", "dessiner", "destrier", "détacher", "détester",
43550"détourer", "détresse", "devancer", "devenir", "deviner", "devoir", "diable", "dialogue", "diamant", "dicter",
43551"différer", "digérer", "digital", "digne", "diluer", "dimanche", "diminuer", "dioxyde", "directif", "diriger",
43552"discuter", "disposer", "dissiper", "distance", "divertir", "diviser", "docile", "docteur", "dogme", "doigt",
43553"domaine", "domicile", "dompter", "donateur", "donjon", "donner", "dopamine", "dortoir", "dorure", "dosage",
43554"doseur", "dossier", "dotation", "douanier", "double", "douceur", "douter", "doyen", "dragon", "draper",
43555"dresser", "dribbler", "droiture", "duperie", "duplexe", "durable", "durcir", "dynastie", "éblouir", "écarter",
43556"écharpe", "échelle", "éclairer", "éclipse", "éclore", "écluse", "école", "économie", "écorce", "écouter",
43557"écraser", "écrémer", "écrivain", "écrou", "écume", "écureuil", "édifier", "éduquer", "effacer", "effectif",
43558"effigie", "effort", "effrayer", "effusion", "égaliser", "égarer", "éjecter", "élaborer", "élargir", "électron",
43559"élégant", "éléphant", "élève", "éligible", "élitisme", "éloge", "élucider", "éluder", "emballer", "embellir",
43560"embryon", "émeraude", "émission", "emmener", "émotion", "émouvoir", "empereur", "employer", "emporter", "emprise",
43561"émulsion", "encadrer", "enchère", "enclave", "encoche", "endiguer", "endosser", "endroit", "enduire", "énergie",
43562"enfance", "enfermer", "enfouir", "engager", "engin", "englober", "énigme", "enjamber", "enjeu", "enlever",
43563"ennemi", "ennuyeux", "enrichir", "enrobage", "enseigne", "entasser", "entendre", "entier", "entourer", "entraver",
43564"énumérer", "envahir", "enviable", "envoyer", "enzyme", "éolien", "épaissir", "épargne", "épatant", "épaule",
43565"épicerie", "épidémie", "épier", "épilogue", "épine", "épisode", "épitaphe", "époque", "épreuve", "éprouver",
43566"épuisant", "équerre", "équipe", "ériger", "érosion", "erreur", "éruption", "escalier", "espadon", "espèce",
43567"espiègle", "espoir", "esprit", "esquiver", "essayer", "essence", "essieu", "essorer", "estime", "estomac",
43568"estrade", "étagère", "étaler", "étanche", "étatique", "éteindre", "étendoir", "éternel", "éthanol", "éthique",
43569"ethnie", "étirer", "étoffer", "étoile", "étonnant", "étourdir", "étrange", "étroit", "étude", "euphorie",
43570"évaluer", "évasion", "éventail", "évidence", "éviter", "évolutif", "évoquer", "exact", "exagérer", "exaucer",
43571"exceller", "excitant", "exclusif", "excuse", "exécuter", "exemple", "exercer", "exhaler", "exhorter", "exigence",
43572"exiler", "exister", "exotique", "expédier", "explorer", "exposer", "exprimer", "exquis", "extensif", "extraire",
43573"exulter", "fable", "fabuleux", "facette", "facile", "facture", "faiblir", "falaise", "fameux", "famille",
43574"farceur", "farfelu", "farine", "farouche", "fasciner", "fatal", "fatigue", "faucon", "fautif", "faveur",
43575"favori", "fébrile", "féconder", "fédérer", "félin", "femme", "fémur", "fendoir", "féodal", "fermer",
43576"féroce", "ferveur", "festival", "feuille", "feutre", "février", "fiasco", "ficeler", "fictif", "fidèle",
43577"figure", "filature", "filetage", "filière", "filleul", "filmer", "filou", "filtrer", "financer", "finir",
43578"fiole", "firme", "fissure", "fixer", "flairer", "flamme", "flasque", "flatteur", "fléau", "flèche",
43579"fleur", "flexion", "flocon", "flore", "fluctuer", "fluide", "fluvial", "folie", "fonderie", "fongible",
43580"fontaine", "forcer", "forgeron", "formuler", "fortune", "fossile", "foudre", "fougère", "fouiller", "foulure",
43581"fourmi", "fragile", "fraise", "franchir", "frapper", "frayeur", "frégate", "freiner", "frelon", "frémir",
43582"frénésie", "frère", "friable", "friction", "frisson", "frivole", "froid", "fromage", "frontal", "frotter",
43583"fruit", "fugitif", "fuite", "fureur", "furieux", "furtif", "fusion", "futur", "gagner", "galaxie",
43584"galerie", "gambader", "garantir", "gardien", "garnir", "garrigue", "gazelle", "gazon", "géant", "gélatine",
43585"gélule", "gendarme", "général", "génie", "genou", "gentil", "géologie", "géomètre", "géranium", "germe",
43586"gestuel", "geyser", "gibier", "gicler", "girafe", "givre", "glace", "glaive", "glisser", "globe",
43587"gloire", "glorieux", "golfeur", "gomme", "gonfler", "gorge", "gorille", "goudron", "gouffre", "goulot",
43588"goupille", "gourmand", "goutte", "graduel", "graffiti", "graine", "grand", "grappin", "gratuit", "gravir",
43589"grenat", "griffure", "griller", "grimper", "grogner", "gronder", "grotte", "groupe", "gruger", "grutier",
43590"gruyère", "guépard", "guerrier", "guide", "guimauve", "guitare", "gustatif", "gymnaste", "gyrostat", "habitude",
43591"hachoir", "halte", "hameau", "hangar", "hanneton", "haricot", "harmonie", "harpon", "hasard", "hélium",
43592"hématome", "herbe", "hérisson", "hermine", "héron", "hésiter", "heureux", "hiberner", "hibou", "hilarant",
43593"histoire", "hiver", "homard", "hommage", "homogène", "honneur", "honorer", "honteux", "horde", "horizon",
43594"horloge", "hormone", "horrible", "houleux", "housse", "hublot", "huileux", "humain", "humble", "humide",
43595"humour", "hurler", "hydromel", "hygiène", "hymne", "hypnose", "idylle", "ignorer", "iguane", "illicite",
43596"illusion", "image", "imbiber", "imiter", "immense", "immobile", "immuable", "impact", "impérial", "implorer",
43597"imposer", "imprimer", "imputer", "incarner", "incendie", "incident", "incliner", "incolore", "indexer", "indice",
43598"inductif", "inédit", "ineptie", "inexact", "infini", "infliger", "informer", "infusion", "ingérer", "inhaler",
43599"inhiber", "injecter", "injure", "innocent", "inoculer", "inonder", "inscrire", "insecte", "insigne", "insolite",
43600"inspirer", "instinct", "insulter", "intact", "intense", "intime", "intrigue", "intuitif", "inutile", "invasion",
43601"inventer", "inviter", "invoquer", "ironique", "irradier", "irréel", "irriter", "isoler", "ivoire", "ivresse",
43602"jaguar", "jaillir", "jambe", "janvier", "jardin", "jauger", "jaune", "javelot", "jetable", "jeton",
43603"jeudi", "jeunesse", "joindre", "joncher", "jongler", "joueur", "jouissif", "journal", "jovial", "joyau",
43604"joyeux", "jubiler", "jugement", "junior", "jupon", "juriste", "justice", "juteux", "juvénile", "kayak",
43605"kimono", "kiosque", "label", "labial", "labourer", "lacérer", "lactose", "lagune", "laine", "laisser",
43606"laitier", "lambeau", "lamelle", "lampe", "lanceur", "langage", "lanterne", "lapin", "largeur", "larme",
43607"laurier", "lavabo", "lavoir", "lecture", "légal", "léger", "légume", "lessive", "lettre", "levier",
43608"lexique", "lézard", "liasse", "libérer", "libre", "licence", "licorne", "liège", "lièvre", "ligature",
43609"ligoter", "ligue", "limer", "limite", "limonade", "limpide", "linéaire", "lingot", "lionceau", "liquide",
43610"lisière", "lister", "lithium", "litige", "littoral", "livreur", "logique", "lointain", "loisir", "lombric",
43611"loterie", "louer", "lourd", "loutre", "louve", "loyal", "lubie", "lucide", "lucratif", "lueur",
43612"lugubre", "luisant", "lumière", "lunaire", "lundi", "luron", "lutter", "luxueux", "machine", "magasin",
43613"magenta", "magique", "maigre", "maillon", "maintien", "mairie", "maison", "majorer", "malaxer", "maléfice",
43614"malheur", "malice", "mallette", "mammouth", "mandater", "maniable", "manquant", "manteau", "manuel", "marathon",
43615"marbre", "marchand", "mardi", "maritime", "marqueur", "marron", "marteler", "mascotte", "massif", "matériel",
43616"matière", "matraque", "maudire", "maussade", "mauve", "maximal", "méchant", "méconnu", "médaille", "médecin",
43617"méditer", "méduse", "meilleur", "mélange", "mélodie", "membre", "mémoire", "menacer", "mener", "menhir",
43618"mensonge", "mentor", "mercredi", "mérite", "merle", "messager", "mesure", "métal", "météore", "méthode",
43619"métier", "meuble", "miauler", "microbe", "miette", "mignon", "migrer", "milieu", "million", "mimique",
43620"mince", "minéral", "minimal", "minorer", "minute", "miracle", "miroiter", "missile", "mixte", "mobile",
43621"moderne", "moelleux", "mondial", "moniteur", "monnaie", "monotone", "monstre", "montagne", "monument", "moqueur",
43622"morceau", "morsure", "mortier", "moteur", "motif", "mouche", "moufle", "moulin", "mousson", "mouton",
43623"mouvant", "multiple", "munition", "muraille", "murène", "murmure", "muscle", "muséum", "musicien", "mutation",
43624"muter", "mutuel", "myriade", "myrtille", "mystère", "mythique", "nageur", "nappe", "narquois", "narrer",
43625"natation", "nation", "nature", "naufrage", "nautique", "navire", "nébuleux", "nectar", "néfaste", "négation",
43626"négliger", "négocier", "neige", "nerveux", "nettoyer", "neurone", "neutron", "neveu", "niche", "nickel",
43627"nitrate", "niveau", "noble", "nocif", "nocturne", "noirceur", "noisette", "nomade", "nombreux", "nommer",
43628"normatif", "notable", "notifier", "notoire", "nourrir", "nouveau", "novateur", "novembre", "novice", "nuage",
43629"nuancer", "nuire", "nuisible", "numéro", "nuptial", "nuque", "nutritif", "obéir", "objectif", "obliger",
43630"obscur", "observer", "obstacle", "obtenir", "obturer", "occasion", "occuper", "océan", "octobre", "octroyer",
43631"octupler", "oculaire", "odeur", "odorant", "offenser", "officier", "offrir", "ogive", "oiseau", "oisillon",
43632"olfactif", "olivier", "ombrage", "omettre", "onctueux", "onduler", "onéreux", "onirique", "opale", "opaque",
43633"opérer", "opinion", "opportun", "opprimer", "opter", "optique", "orageux", "orange", "orbite", "ordonner",
43634"oreille", "organe", "orgueil", "orifice", "ornement", "orque", "ortie", "osciller", "osmose", "ossature",
43635"otarie", "ouragan", "ourson", "outil", "outrager", "ouvrage", "ovation", "oxyde", "oxygène", "ozone",
43636"paisible", "palace", "palmarès", "palourde", "palper", "panache", "panda", "pangolin", "paniquer", "panneau",
43637"panorama", "pantalon", "papaye", "papier", "papoter", "papyrus", "paradoxe", "parcelle", "paresse", "parfumer",
43638"parler", "parole", "parrain", "parsemer", "partager", "parure", "parvenir", "passion", "pastèque", "paternel",
43639"patience", "patron", "pavillon", "pavoiser", "payer", "paysage", "peigne", "peintre", "pelage", "pélican",
43640"pelle", "pelouse", "peluche", "pendule", "pénétrer", "pénible", "pensif", "pénurie", "pépite", "péplum",
43641"perdrix", "perforer", "période", "permuter", "perplexe", "persil", "perte", "peser", "pétale", "petit",
43642"pétrir", "peuple", "pharaon", "phobie", "phoque", "photon", "phrase", "physique", "piano", "pictural",
43643"pièce", "pierre", "pieuvre", "pilote", "pinceau", "pipette", "piquer", "pirogue", "piscine", "piston",
43644"pivoter", "pixel", "pizza", "placard", "plafond", "plaisir", "planer", "plaque", "plastron", "plateau",
43645"pleurer", "plexus", "pliage", "plomb", "plonger", "pluie", "plumage", "pochette", "poésie", "poète",
43646"pointe", "poirier", "poisson", "poivre", "polaire", "policier", "pollen", "polygone", "pommade", "pompier",
43647"ponctuel", "pondérer", "poney", "portique", "position", "posséder", "posture", "potager", "poteau", "potion",
43648"pouce", "poulain", "poumon", "pourpre", "poussin", "pouvoir", "prairie", "pratique", "précieux", "prédire",
43649"préfixe", "prélude", "prénom", "présence", "prétexte", "prévoir", "primitif", "prince", "prison", "priver",
43650"problème", "procéder", "prodige", "profond", "progrès", "proie", "projeter", "prologue", "promener", "propre",
43651"prospère", "protéger", "prouesse", "proverbe", "prudence", "pruneau", "psychose", "public", "puceron", "puiser",
43652"pulpe", "pulsar", "punaise", "punitif", "pupitre", "purifier", "puzzle", "pyramide", "quasar", "querelle",
43653"question", "quiétude", "quitter", "quotient", "racine", "raconter", "radieux", "ragondin", "raideur", "raisin",
43654"ralentir", "rallonge", "ramasser", "rapide", "rasage", "ratisser", "ravager", "ravin", "rayonner", "réactif",
43655"réagir", "réaliser", "réanimer", "recevoir", "réciter", "réclamer", "récolter", "recruter", "reculer", "recycler",
43656"rédiger", "redouter", "refaire", "réflexe", "réformer", "refrain", "refuge", "régalien", "région", "réglage",
43657"régulier", "réitérer", "rejeter", "rejouer", "relatif", "relever", "relief", "remarque", "remède", "remise",
43658"remonter", "remplir", "remuer", "renard", "renfort", "renifler", "renoncer", "rentrer", "renvoi", "replier",
43659"reporter", "reprise", "reptile", "requin", "réserve", "résineux", "résoudre", "respect", "rester", "résultat",
43660"rétablir", "retenir", "réticule", "retomber", "retracer", "réunion", "réussir", "revanche", "revivre", "révolte",
43661"révulsif", "richesse", "rideau", "rieur", "rigide", "rigoler", "rincer", "riposter", "risible", "risque",
43662"rituel", "rival", "rivière", "rocheux", "romance", "rompre", "ronce", "rondin", "roseau", "rosier",
43663"rotatif", "rotor", "rotule", "rouge", "rouille", "rouleau", "routine", "royaume", "ruban", "rubis",
43664"ruche", "ruelle", "rugueux", "ruiner", "ruisseau", "ruser", "rustique", "rythme", "sabler", "saboter",
43665"sabre", "sacoche", "safari", "sagesse", "saisir", "salade", "salive", "salon", "saluer", "samedi",
43666"sanction", "sanglier", "sarcasme", "sardine", "saturer", "saugrenu", "saumon", "sauter", "sauvage", "savant",
43667"savonner", "scalpel", "scandale", "scélérat", "scénario", "sceptre", "schéma", "science", "scinder", "score",
43668"scrutin", "sculpter", "séance", "sécable", "sécher", "secouer", "sécréter", "sédatif", "séduire", "seigneur",
43669"séjour", "sélectif", "semaine", "sembler", "semence", "séminal", "sénateur", "sensible", "sentence", "séparer",
43670"séquence", "serein", "sergent", "sérieux", "serrure", "sérum", "service", "sésame", "sévir", "sevrage",
43671"sextuple", "sidéral", "siècle", "siéger", "siffler", "sigle", "signal", "silence", "silicium", "simple",
43672"sincère", "sinistre", "siphon", "sirop", "sismique", "situer", "skier", "social", "socle", "sodium",
43673"soigneux", "soldat", "soleil", "solitude", "soluble", "sombre", "sommeil", "somnoler", "sonde", "songeur",
43674"sonnette", "sonore", "sorcier", "sortir", "sosie", "sottise", "soucieux", "soudure", "souffle", "soulever",
43675"soupape", "source", "soutirer", "souvenir", "spacieux", "spatial", "spécial", "sphère", "spiral", "stable",
43676"station", "sternum", "stimulus", "stipuler", "strict", "studieux", "stupeur", "styliste", "sublime", "substrat",
43677"subtil", "subvenir", "succès", "sucre", "suffixe", "suggérer", "suiveur", "sulfate", "superbe", "supplier",
43678"surface", "suricate", "surmener", "surprise", "sursaut", "survie", "suspect", "syllabe", "symbole", "symétrie",
43679"synapse", "syntaxe", "système", "tabac", "tablier", "tactile", "tailler", "talent", "talisman", "talonner",
43680"tambour", "tamiser", "tangible", "tapis", "taquiner", "tarder", "tarif", "tartine", "tasse", "tatami",
43681"tatouage", "taupe", "taureau", "taxer", "témoin", "temporel", "tenaille", "tendre", "teneur", "tenir",
43682"tension", "terminer", "terne", "terrible", "tétine", "texte", "thème", "théorie", "thérapie", "thorax",
43683"tibia", "tiède", "timide", "tirelire", "tiroir", "tissu", "titane", "titre", "tituber", "toboggan",
43684"tolérant", "tomate", "tonique", "tonneau", "toponyme", "torche", "tordre", "tornade", "torpille", "torrent",
43685"torse", "tortue", "totem", "toucher", "tournage", "tousser", "toxine", "traction", "trafic", "tragique",
43686"trahir", "train", "trancher", "travail", "trèfle", "tremper", "trésor", "treuil", "triage", "tribunal",
43687"tricoter", "trilogie", "triomphe", "tripler", "triturer", "trivial", "trombone", "tronc", "tropical", "troupeau",
43688"tuile", "tulipe", "tumulte", "tunnel", "turbine", "tuteur", "tutoyer", "tuyau", "tympan", "typhon",
43689"typique", "tyran", "ubuesque", "ultime", "ultrason", "unanime", "unifier", "union", "unique", "unitaire",
43690"univers", "uranium", "urbain", "urticant", "usage", "usine", "usuel", "usure", "utile", "utopie",
43691"vacarme", "vaccin", "vagabond", "vague", "vaillant", "vaincre", "vaisseau", "valable", "valise", "vallon",
43692"valve", "vampire", "vanille", "vapeur", "varier", "vaseux", "vassal", "vaste", "vecteur", "vedette",
43693"végétal", "véhicule", "veinard", "véloce", "vendredi", "vénérer", "venger", "venimeux", "ventouse", "verdure",
43694"vérin", "vernir", "verrou", "verser", "vertu", "veston", "vétéran", "vétuste", "vexant", "vexer",
43695"viaduc", "viande", "victoire", "vidange", "vidéo", "vignette", "vigueur", "vilain", "village", "vinaigre",
43696"violon", "vipère", "virement", "virtuose", "virus", "visage", "viseur", "vision", "visqueux", "visuel",
43697"vital", "vitesse", "viticole", "vitrine", "vivace", "vivipare", "vocation", "voguer", "voile", "voisin",
43698"voiture", "volaille", "volcan", "voltiger", "volume", "vorace", "vortex", "voter", "vouloir", "voyage",
43699"voyelle", "wagon", "xénon", "yacht", "zèbre", "zénith", "zeste", "zoologie"]
43700</script>
43701 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
43702WORDLISTS["italian"] = [
43703"abaco", "abbaglio", "abbinato", "abete", "abisso", "abolire", "abrasivo", "abrogato", "accadere", "accenno",
43704"accusato", "acetone", "achille", "acido", "acqua", "acre", "acrilico", "acrobata", "acuto", "adagio",
43705"addebito", "addome", "adeguato", "aderire", "adipe", "adottare", "adulare", "affabile", "affetto", "affisso",
43706"affranto", "aforisma", "afoso", "africano", "agave", "agente", "agevole", "aggancio", "agire", "agitare",
43707"agonismo", "agricolo", "agrumeto", "aguzzo", "alabarda", "alato", "albatro", "alberato", "albo", "albume",
43708"alce", "alcolico", "alettone", "alfa", "algebra", "aliante", "alibi", "alimento", "allagato", "allegro",
43709"allievo", "allodola", "allusivo", "almeno", "alogeno", "alpaca", "alpestre", "altalena", "alterno", "alticcio",
43710"altrove", "alunno", "alveolo", "alzare", "amalgama", "amanita", "amarena", "ambito", "ambrato", "ameba",
43711"america", "ametista", "amico", "ammasso", "ammenda", "ammirare", "ammonito", "amore", "ampio", "ampliare",
43712"amuleto", "anacardo", "anagrafe", "analista", "anarchia", "anatra", "anca", "ancella", "ancora", "andare",
43713"andrea", "anello", "angelo", "angolare", "angusto", "anima", "annegare", "annidato", "anno", "annuncio",
43714"anonimo", "anticipo", "anzi", "apatico", "apertura", "apode", "apparire", "appetito", "appoggio", "approdo",
43715"appunto", "aprile", "arabica", "arachide", "aragosta", "araldica", "arancio", "aratura", "arazzo", "arbitro",
43716"archivio", "ardito", "arenile", "argento", "argine", "arguto", "aria", "armonia", "arnese", "arredato",
43717"arringa", "arrosto", "arsenico", "arso", "artefice", "arzillo", "asciutto", "ascolto", "asepsi", "asettico",
43718"asfalto", "asino", "asola", "aspirato", "aspro", "assaggio", "asse", "assoluto", "assurdo", "asta",
43719"astenuto", "astice", "astratto", "atavico", "ateismo", "atomico", "atono", "attesa", "attivare", "attorno",
43720"attrito", "attuale", "ausilio", "austria", "autista", "autonomo", "autunno", "avanzato", "avere", "avvenire",
43721"avviso", "avvolgere", "azione", "azoto", "azzimo", "azzurro", "babele", "baccano", "bacino", "baco",
43722"badessa", "badilata", "bagnato", "baita", "balcone", "baldo", "balena", "ballata", "balzano", "bambino",
43723"bandire", "baraonda", "barbaro", "barca", "baritono", "barlume", "barocco", "basilico", "basso", "batosta",
43724"battuto", "baule", "bava", "bavosa", "becco", "beffa", "belgio", "belva", "benda", "benevole",
43725"benigno", "benzina", "bere", "berlina", "beta", "bibita", "bici", "bidone", "bifido", "biga",
43726"bilancia", "bimbo", "binocolo", "biologo", "bipede", "bipolare", "birbante", "birra", "biscotto", "bisesto",
43727"bisnonno", "bisonte", "bisturi", "bizzarro", "blando", "blatta", "bollito", "bonifico", "bordo", "bosco",
43728"botanico", "bottino", "bozzolo", "braccio", "bradipo", "brama", "branca", "bravura", "bretella", "brevetto",
43729"brezza", "briglia", "brillante", "brindare", "broccolo", "brodo", "bronzina", "brullo", "bruno", "bubbone",
43730"buca", "budino", "buffone", "buio", "bulbo", "buono", "burlone", "burrasca", "bussola", "busta",
43731"cadetto", "caduco", "calamaro", "calcolo", "calesse", "calibro", "calmo", "caloria", "cambusa", "camerata",
43732"camicia", "cammino", "camola", "campale", "canapa", "candela", "cane", "canino", "canotto", "cantina",
43733"capace", "capello", "capitolo", "capogiro", "cappero", "capra", "capsula", "carapace", "carcassa", "cardo",
43734"carisma", "carovana", "carretto", "cartolina", "casaccio", "cascata", "caserma", "caso", "cassone", "castello",
43735"casuale", "catasta", "catena", "catrame", "cauto", "cavillo", "cedibile", "cedrata", "cefalo", "celebre",
43736"cellulare", "cena", "cenone", "centesimo", "ceramica", "cercare", "certo", "cerume", "cervello", "cesoia",
43737"cespo", "ceto", "chela", "chiaro", "chicca", "chiedere", "chimera", "china", "chirurgo", "chitarra",
43738"ciao", "ciclismo", "cifrare", "cigno", "cilindro", "ciottolo", "circa", "cirrosi", "citrico", "cittadino",
43739"ciuffo", "civetta", "civile", "classico", "clinica", "cloro", "cocco", "codardo", "codice", "coerente",
43740"cognome", "collare", "colmato", "colore", "colposo", "coltivato", "colza", "coma", "cometa", "commando",
43741"comodo", "computer", "comune", "conciso", "condurre", "conferma", "congelare", "coniuge", "connesso", "conoscere",
43742"consumo", "continuo", "convegno", "coperto", "copione", "coppia", "copricapo", "corazza", "cordata", "coricato",
43743"cornice", "corolla", "corpo", "corredo", "corsia", "cortese", "cosmico", "costante", "cottura", "covato",
43744"cratere", "cravatta", "creato", "credere", "cremoso", "crescita", "creta", "criceto", "crinale", "crisi",
43745"critico", "croce", "cronaca", "crostata", "cruciale", "crusca", "cucire", "cuculo", "cugino", "cullato",
43746"cupola", "curatore", "cursore", "curvo", "cuscino", "custode", "dado", "daino", "dalmata", "damerino",
43747"daniela", "dannoso", "danzare", "datato", "davanti", "davvero", "debutto", "decennio", "deciso", "declino",
43748"decollo", "decreto", "dedicato", "definito", "deforme", "degno", "delegare", "delfino", "delirio", "delta",
43749"demenza", "denotato", "dentro", "deposito", "derapata", "derivare", "deroga", "descritto", "deserto", "desiderio",
43750"desumere", "detersivo", "devoto", "diametro", "dicembre", "diedro", "difeso", "diffuso", "digerire", "digitale",
43751"diluvio", "dinamico", "dinnanzi", "dipinto", "diploma", "dipolo", "diradare", "dire", "dirotto", "dirupo",
43752"disagio", "discreto", "disfare", "disgelo", "disposto", "distanza", "disumano", "dito", "divano", "divelto",
43753"dividere", "divorato", "doblone", "docente", "doganale", "dogma", "dolce", "domato", "domenica", "dominare",
43754"dondolo", "dono", "dormire", "dote", "dottore", "dovuto", "dozzina", "drago", "druido", "dubbio",
43755"dubitare", "ducale", "duna", "duomo", "duplice", "duraturo", "ebano", "eccesso", "ecco", "eclissi",
43756"economia", "edera", "edicola", "edile", "editoria", "educare", "egemonia", "egli", "egoismo", "egregio",
43757"elaborato", "elargire", "elegante", "elencato", "eletto", "elevare", "elfico", "elica", "elmo", "elsa",
43758"eluso", "emanato", "emblema", "emesso", "emiro", "emotivo", "emozione", "empirico", "emulo", "endemico",
43759"enduro", "energia", "enfasi", "enoteca", "entrare", "enzima", "epatite", "epilogo", "episodio", "epocale",
43760"eppure", "equatore", "erario", "erba", "erboso", "erede", "eremita", "erigere", "ermetico", "eroe",
43761"erosivo", "errante", "esagono", "esame", "esanime", "esaudire", "esca", "esempio", "esercito", "esibito",
43762"esigente", "esistere", "esito", "esofago", "esortato", "esoso", "espanso", "espresso", "essenza", "esso",
43763"esteso", "estimare", "estonia", "estroso", "esultare", "etilico", "etnico", "etrusco", "etto", "euclideo",
43764"europa", "evaso", "evidenza", "evitato", "evoluto", "evviva", "fabbrica", "faccenda", "fachiro", "falco",
43765"famiglia", "fanale", "fanfara", "fango", "fantasma", "fare", "farfalla", "farinoso", "farmaco", "fascia",
43766"fastoso", "fasullo", "faticare", "fato", "favoloso", "febbre", "fecola", "fede", "fegato", "felpa",
43767"feltro", "femmina", "fendere", "fenomeno", "fermento", "ferro", "fertile", "fessura", "festivo", "fetta",
43768"feudo", "fiaba", "fiducia", "fifa", "figurato", "filo", "finanza", "finestra", "finire", "fiore",
43769"fiscale", "fisico", "fiume", "flacone", "flamenco", "flebo", "flemma", "florido", "fluente", "fluoro",
43770"fobico", "focaccia", "focoso", "foderato", "foglio", "folata", "folclore", "folgore", "fondente", "fonetico",
43771"fonia", "fontana", "forbito", "forchetta", "foresta", "formica", "fornaio", "foro", "fortezza", "forzare",
43772"fosfato", "fosso", "fracasso", "frana", "frassino", "fratello", "freccetta", "frenata", "fresco", "frigo",
43773"frollino", "fronde", "frugale", "frutta", "fucilata", "fucsia", "fuggente", "fulmine", "fulvo", "fumante",
43774"fumetto", "fumoso", "fune", "funzione", "fuoco", "furbo", "furgone", "furore", "fuso", "futile",
43775"gabbiano", "gaffe", "galateo", "gallina", "galoppo", "gambero", "gamma", "garanzia", "garbo", "garofano",
43776"garzone", "gasdotto", "gasolio", "gastrico", "gatto", "gaudio", "gazebo", "gazzella", "geco", "gelatina",
43777"gelso", "gemello", "gemmato", "gene", "genitore", "gennaio", "genotipo", "gergo", "ghepardo", "ghiaccio",
43778"ghisa", "giallo", "gilda", "ginepro", "giocare", "gioiello", "giorno", "giove", "girato", "girone",
43779"gittata", "giudizio", "giurato", "giusto", "globulo", "glutine", "gnomo", "gobba", "golf", "gomito",
43780"gommone", "gonfio", "gonna", "governo", "gracile", "grado", "grafico", "grammo", "grande", "grattare",
43781"gravoso", "grazia", "greca", "gregge", "grifone", "grigio", "grinza", "grotta", "gruppo", "guadagno",
43782"guaio", "guanto", "guardare", "gufo", "guidare", "ibernato", "icona", "identico", "idillio", "idolo",
43783"idra", "idrico", "idrogeno", "igiene", "ignaro", "ignorato", "ilare", "illeso", "illogico", "illudere",
43784"imballo", "imbevuto", "imbocco", "imbuto", "immane", "immerso", "immolato", "impacco", "impeto", "impiego",
43785"importo", "impronta", "inalare", "inarcare", "inattivo", "incanto", "incendio", "inchino", "incisivo", "incluso",
43786"incontro", "incrocio", "incubo", "indagine", "india", "indole", "inedito", "infatti", "infilare", "inflitto",
43787"ingaggio", "ingegno", "inglese", "ingordo", "ingrosso", "innesco", "inodore", "inoltrare", "inondato", "insano",
43788"insetto", "insieme", "insonnia", "insulina", "intasato", "intero", "intonaco", "intuito", "inumidire", "invalido",
43789"invece", "invito", "iperbole", "ipnotico", "ipotesi", "ippica", "iride", "irlanda", "ironico", "irrigato",
43790"irrorare", "isolato", "isotopo", "isterico", "istituto", "istrice", "italia", "iterare", "labbro", "labirinto",
43791"lacca", "lacerato", "lacrima", "lacuna", "laddove", "lago", "lampo", "lancetta", "lanterna", "lardoso",
43792"larga", "laringe", "lastra", "latenza", "latino", "lattuga", "lavagna", "lavoro", "legale", "leggero",
43793"lembo", "lentezza", "lenza", "leone", "lepre", "lesivo", "lessato", "lesto", "letterale", "leva",
43794"levigato", "libero", "lido", "lievito", "lilla", "limatura", "limitare", "limpido", "lineare", "lingua",
43795"liquido", "lira", "lirica", "lisca", "lite", "litigio", "livrea", "locanda", "lode", "logica",
43796"lombare", "londra", "longevo", "loquace", "lorenzo", "loto", "lotteria", "luce", "lucidato", "lumaca",
43797"luminoso", "lungo", "lupo", "luppolo", "lusinga", "lusso", "lutto", "macabro", "macchina", "macero",
43798"macinato", "madama", "magico", "maglia", "magnete", "magro", "maiolica", "malafede", "malgrado", "malinteso",
43799"malsano", "malto", "malumore", "mana", "mancia", "mandorla", "mangiare", "manifesto", "mannaro", "manovra",
43800"mansarda", "mantide", "manubrio", "mappa", "maratona", "marcire", "maretta", "marmo", "marsupio", "maschera",
43801"massaia", "mastino", "materasso", "matricola", "mattone", "maturo", "mazurca", "meandro", "meccanico", "mecenate",
43802"medesimo", "meditare", "mega", "melassa", "melis", "melodia", "meninge", "meno", "mensola", "mercurio",
43803"merenda", "merlo", "meschino", "mese", "messere", "mestolo", "metallo", "metodo", "mettere", "miagolare",
43804"mica", "micelio", "michele", "microbo", "midollo", "miele", "migliore", "milano", "milite", "mimosa",
43805"minerale", "mini", "minore", "mirino", "mirtillo", "miscela", "missiva", "misto", "misurare", "mitezza",
43806"mitigare", "mitra", "mittente", "mnemonico", "modello", "modifica", "modulo", "mogano", "mogio", "mole",
43807"molosso", "monastero", "monco", "mondina", "monetario", "monile", "monotono", "monsone", "montato", "monviso",
43808"mora", "mordere", "morsicato", "mostro", "motivato", "motosega", "motto", "movenza", "movimento", "mozzo",
43809"mucca", "mucosa", "muffa", "mughetto", "mugnaio", "mulatto", "mulinello", "multiplo", "mummia", "munto",
43810"muovere", "murale", "musa", "muscolo", "musica", "mutevole", "muto", "nababbo", "nafta", "nanometro",
43811"narciso", "narice", "narrato", "nascere", "nastrare", "naturale", "nautica", "naviglio", "nebulosa", "necrosi",
43812"negativo", "negozio", "nemmeno", "neofita", "neretto", "nervo", "nessuno", "nettuno", "neutrale", "neve",
43813"nevrotico", "nicchia", "ninfa", "nitido", "nobile", "nocivo", "nodo", "nome", "nomina", "nordico",
43814"normale", "norvegese", "nostrano", "notare", "notizia", "notturno", "novella", "nucleo", "nulla", "numero",
43815"nuovo", "nutrire", "nuvola", "nuziale", "oasi", "obbedire", "obbligo", "obelisco", "oblio", "obolo",
43816"obsoleto", "occasione", "occhio", "occidente", "occorrere", "occultare", "ocra", "oculato", "odierno", "odorare",
43817"offerta", "offrire", "offuscato", "oggetto", "oggi", "ognuno", "olandese", "olfatto", "oliato", "oliva",
43818"ologramma", "oltre", "omaggio", "ombelico", "ombra", "omega", "omissione", "ondoso", "onere", "onice",
43819"onnivoro", "onorevole", "onta", "operato", "opinione", "opposto", "oracolo", "orafo", "ordine", "orecchino",
43820"orefice", "orfano", "organico", "origine", "orizzonte", "orma", "ormeggio", "ornativo", "orologio", "orrendo",
43821"orribile", "ortensia", "ortica", "orzata", "orzo", "osare", "oscurare", "osmosi", "ospedale", "ospite",
43822"ossa", "ossidare", "ostacolo", "oste", "otite", "otre", "ottagono", "ottimo", "ottobre", "ovale",
43823"ovest", "ovino", "oviparo", "ovocito", "ovunque", "ovviare", "ozio", "pacchetto", "pace", "pacifico",
43824"padella", "padrone", "paese", "paga", "pagina", "palazzina", "palesare", "pallido", "palo", "palude",
43825"pandoro", "pannello", "paolo", "paonazzo", "paprica", "parabola", "parcella", "parere", "pargolo", "pari",
43826"parlato", "parola", "partire", "parvenza", "parziale", "passivo", "pasticca", "patacca", "patologia", "pattume",
43827"pavone", "peccato", "pedalare", "pedonale", "peggio", "peloso", "penare", "pendice", "penisola", "pennuto",
43828"penombra", "pensare", "pentola", "pepe", "pepita", "perbene", "percorso", "perdonato", "perforare", "pergamena",
43829"periodo", "permesso", "perno", "perplesso", "persuaso", "pertugio", "pervaso", "pesatore", "pesista", "peso",
43830"pestifero", "petalo", "pettine", "petulante", "pezzo", "piacere", "pianta", "piattino", "piccino", "picozza",
43831"piega", "pietra", "piffero", "pigiama", "pigolio", "pigro", "pila", "pilifero", "pillola", "pilota",
43832"pimpante", "pineta", "pinna", "pinolo", "pioggia", "piombo", "piramide", "piretico", "pirite", "pirolisi",
43833"pitone", "pizzico", "placebo", "planare", "plasma", "platano", "plenario", "pochezza", "poderoso", "podismo",
43834"poesia", "poggiare", "polenta", "poligono", "pollice", "polmonite", "polpetta", "polso", "poltrona", "polvere",
43835"pomice", "pomodoro", "ponte", "popoloso", "porfido", "poroso", "porpora", "porre", "portata", "posa",
43836"positivo", "possesso", "postulato", "potassio", "potere", "pranzo", "prassi", "pratica", "precluso", "predica",
43837"prefisso", "pregiato", "prelievo", "premere", "prenotare", "preparato", "presenza", "pretesto", "prevalso", "prima",
43838"principe", "privato", "problema", "procura", "produrre", "profumo", "progetto", "prolunga", "promessa", "pronome",
43839"proposta", "proroga", "proteso", "prova", "prudente", "prugna", "prurito", "psiche", "pubblico", "pudica",
43840"pugilato", "pugno", "pulce", "pulito", "pulsante", "puntare", "pupazzo", "pupilla", "puro", "quadro",
43841"qualcosa", "quasi", "querela", "quota", "raccolto", "raddoppio", "radicale", "radunato", "raffica", "ragazzo",
43842"ragione", "ragno", "ramarro", "ramingo", "ramo", "randagio", "rantolare", "rapato", "rapina", "rappreso",
43843"rasatura", "raschiato", "rasente", "rassegna", "rastrello", "rata", "ravveduto", "reale", "recepire", "recinto",
43844"recluta", "recondito", "recupero", "reddito", "redimere", "regalato", "registro", "regola", "regresso", "relazione",
43845"remare", "remoto", "renna", "replica", "reprimere", "reputare", "resa", "residente", "responso", "restauro",
43846"rete", "retina", "retorica", "rettifica", "revocato", "riassunto", "ribadire", "ribelle", "ribrezzo", "ricarica",
43847"ricco", "ricevere", "riciclato", "ricordo", "ricreduto", "ridicolo", "ridurre", "rifasare", "riflesso", "riforma",
43848"rifugio", "rigare", "rigettato", "righello", "rilassato", "rilevato", "rimanere", "rimbalzo", "rimedio", "rimorchio",
43849"rinascita", "rincaro", "rinforzo", "rinnovo", "rinomato", "rinsavito", "rintocco", "rinuncia", "rinvenire", "riparato",
43850"ripetuto", "ripieno", "riportare", "ripresa", "ripulire", "risata", "rischio", "riserva", "risibile", "riso",
43851"rispetto", "ristoro", "risultato", "risvolto", "ritardo", "ritegno", "ritmico", "ritrovo", "riunione", "riva",
43852"riverso", "rivincita", "rivolto", "rizoma", "roba", "robotico", "robusto", "roccia", "roco", "rodaggio",
43853"rodere", "roditore", "rogito", "rollio", "romantico", "rompere", "ronzio", "rosolare", "rospo", "rotante",
43854"rotondo", "rotula", "rovescio", "rubizzo", "rubrica", "ruga", "rullino", "rumine", "rumoroso", "ruolo",
43855"rupe", "russare", "rustico", "sabato", "sabbiare", "sabotato", "sagoma", "salasso", "saldatura", "salgemma",
43856"salivare", "salmone", "salone", "saltare", "saluto", "salvo", "sapere", "sapido", "saporito", "saraceno",
43857"sarcasmo", "sarto", "sassoso", "satellite", "satira", "satollo", "saturno", "savana", "savio", "saziato",
43858"sbadiglio", "sbalzo", "sbancato", "sbarra", "sbattere", "sbavare", "sbendare", "sbirciare", "sbloccato", "sbocciato",
43859"sbrinare", "sbruffone", "sbuffare", "scabroso", "scadenza", "scala", "scambiare", "scandalo", "scapola", "scarso",
43860"scatenare", "scavato", "scelto", "scenico", "scettro", "scheda", "schiena", "sciarpa", "scienza", "scindere",
43861"scippo", "sciroppo", "scivolo", "sclerare", "scodella", "scolpito", "scomparto", "sconforto", "scoprire", "scorta",
43862"scossone", "scozzese", "scriba", "scrollare", "scrutinio", "scuderia", "scultore", "scuola", "scuro", "scusare",
43863"sdebitare", "sdoganare", "seccatura", "secondo", "sedano", "seggiola", "segnalato", "segregato", "seguito", "selciato",
43864"selettivo", "sella", "selvaggio", "semaforo", "sembrare", "seme", "seminato", "sempre", "senso", "sentire",
43865"sepolto", "sequenza", "serata", "serbato", "sereno", "serio", "serpente", "serraglio", "servire", "sestina",
43866"setola", "settimana", "sfacelo", "sfaldare", "sfamato", "sfarzoso", "sfaticato", "sfera", "sfida", "sfilato",
43867"sfinge", "sfocato", "sfoderare", "sfogo", "sfoltire", "sforzato", "sfratto", "sfruttato", "sfuggito", "sfumare",
43868"sfuso", "sgabello", "sgarbato", "sgonfiare", "sgorbio", "sgrassato", "sguardo", "sibilo", "siccome", "sierra",
43869"sigla", "signore", "silenzio", "sillaba", "simbolo", "simpatico", "simulato", "sinfonia", "singolo", "sinistro",
43870"sino", "sintesi", "sinusoide", "sipario", "sisma", "sistole", "situato", "slitta", "slogatura", "sloveno",
43871"smarrito", "smemorato", "smentito", "smeraldo", "smilzo", "smontare", "smottato", "smussato", "snellire", "snervato",
43872"snodo", "sobbalzo", "sobrio", "soccorso", "sociale", "sodale", "soffitto", "sogno", "soldato", "solenne",
43873"solido", "sollazzo", "solo", "solubile", "solvente", "somatico", "somma", "sonda", "sonetto", "sonnifero",
43874"sopire", "soppeso", "sopra", "sorgere", "sorpasso", "sorriso", "sorso", "sorteggio", "sorvolato", "sospiro",
43875"sosta", "sottile", "spada", "spalla", "spargere", "spatola", "spavento", "spazzola", "specie", "spedire",
43876"spegnere", "spelatura", "speranza", "spessore", "spettrale", "spezzato", "spia", "spigoloso", "spillato", "spinoso",
43877"spirale", "splendido", "sportivo", "sposo", "spranga", "sprecare", "spronato", "spruzzo", "spuntino", "squillo",
43878"sradicare", "srotolato", "stabile", "stacco", "staffa", "stagnare", "stampato", "stantio", "starnuto", "stasera",
43879"statuto", "stelo", "steppa", "sterzo", "stiletto", "stima", "stirpe", "stivale", "stizzoso", "stonato",
43880"storico", "strappo", "stregato", "stridulo", "strozzare", "strutto", "stuccare", "stufo", "stupendo", "subentro",
43881"succoso", "sudore", "suggerito", "sugo", "sultano", "suonare", "superbo", "supporto", "surgelato", "surrogato",
43882"sussurro", "sutura", "svagare", "svedese", "sveglio", "svelare", "svenuto", "svezia", "sviluppo", "svista",
43883"svizzera", "svolta", "svuotare", "tabacco", "tabulato", "tacciare", "taciturno", "tale", "talismano", "tampone",
43884"tannino", "tara", "tardivo", "targato", "tariffa", "tarpare", "tartaruga", "tasto", "tattico", "taverna",
43885"tavolata", "tazza", "teca", "tecnico", "telefono", "temerario", "tempo", "temuto", "tendone", "tenero",
43886"tensione", "tentacolo", "teorema", "terme", "terrazzo", "terzetto", "tesi", "tesserato", "testato", "tetro",
43887"tettoia", "tifare", "tigella", "timbro", "tinto", "tipico", "tipografo", "tiraggio", "tiro", "titanio",
43888"titolo", "titubante", "tizio", "tizzone", "toccare", "tollerare", "tolto", "tombola", "tomo", "tonfo",
43889"tonsilla", "topazio", "topologia", "toppa", "torba", "tornare", "torrone", "tortora", "toscano", "tossire",
43890"tostatura", "totano", "trabocco", "trachea", "trafila", "tragedia", "tralcio", "tramonto", "transito", "trapano",
43891"trarre", "trasloco", "trattato", "trave", "treccia", "tremolio", "trespolo", "tributo", "tricheco", "trifoglio",
43892"trillo", "trincea", "trio", "tristezza", "triturato", "trivella", "tromba", "trono", "troppo", "trottola",
43893"trovare", "truccato", "tubatura", "tuffato", "tulipano", "tumulto", "tunisia", "turbare", "turchino", "tuta",
43894"tutela", "ubicato", "uccello", "uccisore", "udire", "uditivo", "uffa", "ufficio", "uguale", "ulisse",
43895"ultimato", "umano", "umile", "umorismo", "uncinetto", "ungere", "ungherese", "unicorno", "unificato", "unisono",
43896"unitario", "unte", "uovo", "upupa", "uragano", "urgenza", "urlo", "usanza", "usato", "uscito",
43897"usignolo", "usuraio", "utensile", "utilizzo", "utopia", "vacante", "vaccinato", "vagabondo", "vagliato", "valanga",
43898"valgo", "valico", "valletta", "valoroso", "valutare", "valvola", "vampata", "vangare", "vanitoso", "vano",
43899"vantaggio", "vanvera", "vapore", "varano", "varcato", "variante", "vasca", "vedetta", "vedova", "veduto",
43900"vegetale", "veicolo", "velcro", "velina", "velluto", "veloce", "venato", "vendemmia", "vento", "verace",
43901"verbale", "vergogna", "verifica", "vero", "verruca", "verticale", "vescica", "vessillo", "vestale", "veterano",
43902"vetrina", "vetusto", "viandante", "vibrante", "vicenda", "vichingo", "vicinanza", "vidimare", "vigilia", "vigneto",
43903"vigore", "vile", "villano", "vimini", "vincitore", "viola", "vipera", "virgola", "virologo", "virulento",
43904"viscoso", "visione", "vispo", "vissuto", "visura", "vita", "vitello", "vittima", "vivanda", "vivido",
43905"viziare", "voce", "voga", "volatile", "volere", "volpe", "voragine", "vulcano", "zampogna", "zanna",
43906"zappato", "zattera", "zavorra", "zefiro", "zelante", "zelo", "zenzero", "zerbino", "zibetto", "zinco",
43907"zircone", "zitto", "zolla", "zotico", "zucchero", "zufolo", "zulu", "zuppa"]
dc55c6b0 43908</script>
ab78acc6 43909 <script>/*
3af2954a
IC
43910 * Copyright (c) 2013 Pavol Rusnak
43911 *
43912 * Permission is hereby granted, free of charge, to any person obtaining a copy of
43913 * this software and associated documentation files (the "Software"), to deal in
43914 * the Software without restriction, including without limitation the rights to
43915 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
43916 * of the Software, and to permit persons to whom the Software is furnished to do
43917 * so, subject to the following conditions:
43918 *
43919 * The above copyright notice and this permission notice shall be included in all
43920 * copies or substantial portions of the Software.
43921 *
43922 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
43923 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
43924 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
43925 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
43926 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
43927 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
43928 */
43929
43930/*
43931 * Javascript port from python by Ian Coleman
43932 *
80c4dd2a
IC
43933 * Requires code from sjcl
43934 * https://github.com/bitwiseshiftleft/sjcl
3af2954a
IC
43935 */
43936
43937var Mnemonic = function(language) {
43938
43939 var PBKDF2_ROUNDS = 2048;
43940 var RADIX = 2048;
43941
43942 var self = this;
43943 var wordlist = [];
43944
80c4dd2a
IC
43945 var hmacSHA512 = function(key) {
43946 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
43947 this.encrypt = function() {
43948 return hasher.encrypt.apply(hasher, arguments);
43949 };
43950 };
43951
3af2954a
IC
43952 function init() {
43953 wordlist = WORDLISTS[language];
43954 if (wordlist.length != RADIX) {
43955 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
43956 throw err;
43957 }
43958 }
43959
43960 self.generate = function(strength) {
43961 strength = strength || 128;
43962 var r = strength % 32;
43963 if (r > 0) {
43964 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
43965 }
43966 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
43967 if (!hasStrongCrypto) {
43968 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
43969 }
43970 var buffer = new Uint8Array(strength / 8);
43971 var data = crypto.getRandomValues(buffer);
43972 return self.toMnemonic(data);
43973 }
43974
80c4dd2a
IC
43975 self.toMnemonic = function(byteArray) {
43976 if (byteArray.length % 4 > 0) {
43977 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
3af2954a
IC
43978 }
43979
43980 //h = hashlib.sha256(data).hexdigest()
80c4dd2a
IC
43981 var data = byteArrayToWordArray(byteArray);
43982 var hash = sjcl.hash.sha256.hash(data);
43983 var h = sjcl.codec.hex.fromBits(hash);
3af2954a
IC
43984
43985 // b is a binary string, eg '00111010101100...'
43986 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
43987 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
43988 //
43989 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
43990 // c = bin(int(h, 16))[2:].zfill(256)
43991 // d = c[:len(data) * 8 / 32]
80c4dd2a
IC
43992 var a = byteArrayToBinaryString(byteArray);
43993 var c = zfill(hexStringToBinaryString(h), 256);
43994 var d = c.substring(0, byteArray.length * 8 / 32);
3af2954a
IC
43995 // b = line1 + line2
43996 var b = a + d;
43997
43998 var result = [];
43999 var blen = b.length / 11;
44000 for (var i=0; i<blen; i++) {
44001 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
44002 result.push(wordlist[idx]);
44003 }
0515eeec 44004 return self.joinWords(result);
3af2954a
IC
44005 }
44006
44007 self.check = function(mnemonic) {
0515eeec 44008 var mnemonic = self.splitWords(mnemonic);
18abe53b 44009 if (mnemonic.length == 0 || mnemonic.length % 3 > 0) {
3af2954a
IC
44010 return false
44011 }
44012 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
44013 var idx = [];
44014 for (var i=0; i<mnemonic.length; i++) {
44015 var word = mnemonic[i];
44016 var wordIndex = wordlist.indexOf(word);
44017 if (wordIndex == -1) {
44018 return false;
44019 }
44020 var binaryIndex = zfill(wordIndex.toString(2), 11);
44021 idx.push(binaryIndex);
44022 }
44023 var b = idx.join('');
44024 var l = b.length;
44025 //d = b[:l / 33 * 32]
44026 //h = b[-l / 33:]
44027 var d = b.substring(0, l / 33 * 32);
44028 var h = b.substring(l - l / 33, l);
44029 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
80c4dd2a 44030 var nd = binaryStringToWordArray(d);
3af2954a 44031 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
80c4dd2a
IC
44032 var ndHash = sjcl.hash.sha256.hash(nd);
44033 var ndHex = sjcl.codec.hex.fromBits(ndHash);
44034 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
3af2954a
IC
44035 var nh = ndBstr.substring(0,l/33);
44036 return h == nh;
44037 }
44038
44039 self.toSeed = function(mnemonic, passphrase) {
44040 passphrase = passphrase || '';
599fb39e
IC
44041 mnemonic = self.joinWords(self.splitWords(mnemonic)); // removes duplicate blanks
44042 var mnemonicNormalized = self.normalizeString(mnemonic);
3af2954a
IC
44043 passphrase = self.normalizeString(passphrase)
44044 passphrase = "mnemonic" + passphrase;
599fb39e 44045 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonicNormalized);
80c4dd2a
IC
44046 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
44047 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
44048 var hashHex = sjcl.codec.hex.fromBits(result);
44049 return hashHex;
3af2954a
IC
44050 }
44051
0515eeec
IC
44052 self.splitWords = function(mnemonic) {
44053 return mnemonic.split(/\s/g).filter(function(x) { return x.length; });
44054 }
44055
44056 self.joinWords = function(words) {
44057 // Set space correctly depending on the language
44058 // see https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md#japanese
44059 var space = " ";
44060 if (language == "japanese") {
44061 space = "\u3000"; // ideographic space
44062 }
44063 return words.join(space);
44064 }
44065
3af2954a
IC
44066 self.normalizeString = function(str) {
44067 if (typeof str.normalize == "function") {
44068 return str.normalize("NFKD");
44069 }
44070 else {
44071 // TODO decide how to handle this in the future.
44072 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
44073 return str;
44074 }
44075 }
44076
80c4dd2a
IC
44077 function byteArrayToWordArray(data) {
44078 var a = [];
44079 for (var i=0; i<data.length/4; i++) {
44080 v = 0;
44081 v += data[i*4 + 0] << 8 * 3;
44082 v += data[i*4 + 1] << 8 * 2;
44083 v += data[i*4 + 2] << 8 * 1;
44084 v += data[i*4 + 3] << 8 * 0;
44085 a.push(v);
44086 }
44087 return a;
44088 }
44089
3af2954a
IC
44090 function byteArrayToBinaryString(data) {
44091 var bin = "";
44092 for (var i=0; i<data.length; i++) {
44093 bin += zfill(data[i].toString(2), 8);
44094 }
44095 return bin;
44096 }
44097
80c4dd2a
IC
44098 function hexStringToBinaryString(hexString) {
44099 binaryString = "";
44100 for (var i=0; i<hexString.length; i++) {
44101 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
44102 }
44103 return binaryString;
44104 }
44105
44106 function binaryStringToWordArray(binary) {
44107 var aLen = binary.length / 32;
44108 var a = [];
44109 for (var i=0; i<aLen; i++) {
44110 var valueStr = binary.substring(0,32);
3af2954a 44111 var value = parseInt(valueStr, 2);
80c4dd2a
IC
44112 a.push(value);
44113 binary = binary.slice(32);
3af2954a 44114 }
80c4dd2a 44115 return a;
3af2954a
IC
44116 }
44117
44118 // Pad a numeric string on the left with zero digits until the given width
44119 // is reached.
44120 // Note this differs to the python implementation because it does not
44121 // handle numbers starting with a sign.
44122 function zfill(source, length) {
44123 source = source.toString();
44124 while (source.length < length) {
44125 source = '0' + source;
44126 }
44127 return source;
44128 }
44129
44130 init();
ebd8d4e8 44131
3af2954a 44132}
dc55c6b0 44133</script>
95f04905
IC
44134 <script>/*
44135 JavaScript BigInteger library version 0.9.1
44136 http://silentmatt.com/biginteger/
18abe53b 44137
95f04905
IC
44138 Copyright (c) 2009 Matthew Crumley <email@matthewcrumley.com>
44139 Copyright (c) 2010,2011 by John Tobey <John.Tobey@gmail.com>
44140 Licensed under the MIT license.
c6624d51 44141
95f04905
IC
44142 Support for arbitrary internal representation base was added by
44143 Vitaly Magerya.
44144*/
18abe53b 44145
95f04905
IC
44146/*
44147 File: biginteger.js
18abe53b 44148
95f04905 44149 Exports:
18abe53b 44150
95f04905
IC
44151 <BigInteger>
44152*/
44153(function(exports) {
44154"use strict";
44155/*
44156 Class: BigInteger
44157 An arbitrarily-large integer.
18abe53b 44158
95f04905
IC
44159 <BigInteger> objects should be considered immutable. None of the "built-in"
44160 methods modify *this* or their arguments. All properties should be
44161 considered private.
18abe53b 44162
95f04905
IC
44163 All the methods of <BigInteger> instances can be called "statically". The
44164 static versions are convenient if you don't already have a <BigInteger>
44165 object.
18abe53b 44166
95f04905 44167 As an example, these calls are equivalent.
18abe53b 44168
95f04905
IC
44169 > BigInteger(4).multiply(5); // returns BigInteger(20);
44170 > BigInteger.multiply(4, 5); // returns BigInteger(20);
18abe53b 44171
95f04905
IC
44172 > var a = 42;
44173 > var a = BigInteger.toJSValue("0b101010"); // Not completely useless...
44174*/
c6624d51 44175
95f04905 44176var CONSTRUCT = {}; // Unique token to call "private" version of constructor
c6624d51
IC
44177
44178/*
44179 Constructor: BigInteger()
44180 Convert a value to a <BigInteger>.
44181
44182 Although <BigInteger()> is the constructor for <BigInteger> objects, it is
44183 best not to call it as a constructor. If *n* is a <BigInteger> object, it is
44184 simply returned as-is. Otherwise, <BigInteger()> is equivalent to <parse>
44185 without a radix argument.
44186
44187 > var n0 = BigInteger(); // Same as <BigInteger.ZERO>
44188 > var n1 = BigInteger("123"); // Create a new <BigInteger> with value 123
44189 > var n2 = BigInteger(123); // Create a new <BigInteger> with value 123
44190 > var n3 = BigInteger(n2); // Return n2, unchanged
44191
44192 The constructor form only takes an array and a sign. *n* must be an
44193 array of numbers in little-endian order, where each digit is between 0
44194 and BigInteger.base. The second parameter sets the sign: -1 for
44195 negative, +1 for positive, or 0 for zero. The array is *not copied and
44196 may be modified*. If the array contains only zeros, the sign parameter
44197 is ignored and is forced to zero.
44198
44199 > new BigInteger([5], -1): create a new BigInteger with value -5
44200
44201 Parameters:
44202
44203 n - Value to convert to a <BigInteger>.
44204
44205 Returns:
44206
44207 A <BigInteger> value.
44208
44209 See Also:
44210
44211 <parse>, <BigInteger>
44212*/
44213function BigInteger(n, s, token) {
44214 if (token !== CONSTRUCT) {
44215 if (n instanceof BigInteger) {
44216 return n;
44217 }
44218 else if (typeof n === "undefined") {
44219 return ZERO;
44220 }
44221 return BigInteger.parse(n);
44222 }
44223
44224 n = n || []; // Provide the nullary constructor for subclasses.
44225 while (n.length && !n[n.length - 1]) {
44226 --n.length;
44227 }
44228 this._d = n;
44229 this._s = n.length ? (s || 1) : 0;
44230}
44231
44232BigInteger._construct = function(n, s) {
44233 return new BigInteger(n, s, CONSTRUCT);
44234};
44235
44236// Base-10 speedup hacks in parse, toString, exp10 and log functions
44237// require base to be a power of 10. 10^7 is the largest such power
44238// that won't cause a precision loss when digits are multiplied.
44239var BigInteger_base = 10000000;
44240var BigInteger_base_log10 = 7;
44241
44242BigInteger.base = BigInteger_base;
44243BigInteger.base_log10 = BigInteger_base_log10;
44244
44245var ZERO = new BigInteger([], 0, CONSTRUCT);
44246// Constant: ZERO
44247// <BigInteger> 0.
44248BigInteger.ZERO = ZERO;
44249
44250var ONE = new BigInteger([1], 1, CONSTRUCT);
44251// Constant: ONE
44252// <BigInteger> 1.
44253BigInteger.ONE = ONE;
44254
44255var M_ONE = new BigInteger(ONE._d, -1, CONSTRUCT);
44256// Constant: M_ONE
44257// <BigInteger> -1.
44258BigInteger.M_ONE = M_ONE;
44259
44260// Constant: _0
44261// Shortcut for <ZERO>.
44262BigInteger._0 = ZERO;
44263
44264// Constant: _1
44265// Shortcut for <ONE>.
44266BigInteger._1 = ONE;
44267
44268/*
44269 Constant: small
44270 Array of <BigIntegers> from 0 to 36.
44271
44272 These are used internally for parsing, but useful when you need a "small"
44273 <BigInteger>.
44274
44275 See Also:
44276
44277 <ZERO>, <ONE>, <_0>, <_1>
44278*/
44279BigInteger.small = [
44280 ZERO,
44281 ONE,
44282 /* Assuming BigInteger_base > 36 */
44283 new BigInteger( [2], 1, CONSTRUCT),
44284 new BigInteger( [3], 1, CONSTRUCT),
44285 new BigInteger( [4], 1, CONSTRUCT),
44286 new BigInteger( [5], 1, CONSTRUCT),
44287 new BigInteger( [6], 1, CONSTRUCT),
44288 new BigInteger( [7], 1, CONSTRUCT),
44289 new BigInteger( [8], 1, CONSTRUCT),
44290 new BigInteger( [9], 1, CONSTRUCT),
44291 new BigInteger([10], 1, CONSTRUCT),
44292 new BigInteger([11], 1, CONSTRUCT),
44293 new BigInteger([12], 1, CONSTRUCT),
44294 new BigInteger([13], 1, CONSTRUCT),
44295 new BigInteger([14], 1, CONSTRUCT),
44296 new BigInteger([15], 1, CONSTRUCT),
44297 new BigInteger([16], 1, CONSTRUCT),
44298 new BigInteger([17], 1, CONSTRUCT),
44299 new BigInteger([18], 1, CONSTRUCT),
44300 new BigInteger([19], 1, CONSTRUCT),
44301 new BigInteger([20], 1, CONSTRUCT),
44302 new BigInteger([21], 1, CONSTRUCT),
44303 new BigInteger([22], 1, CONSTRUCT),
44304 new BigInteger([23], 1, CONSTRUCT),
44305 new BigInteger([24], 1, CONSTRUCT),
44306 new BigInteger([25], 1, CONSTRUCT),
44307 new BigInteger([26], 1, CONSTRUCT),
44308 new BigInteger([27], 1, CONSTRUCT),
44309 new BigInteger([28], 1, CONSTRUCT),
44310 new BigInteger([29], 1, CONSTRUCT),
44311 new BigInteger([30], 1, CONSTRUCT),
44312 new BigInteger([31], 1, CONSTRUCT),
44313 new BigInteger([32], 1, CONSTRUCT),
44314 new BigInteger([33], 1, CONSTRUCT),
44315 new BigInteger([34], 1, CONSTRUCT),
44316 new BigInteger([35], 1, CONSTRUCT),
44317 new BigInteger([36], 1, CONSTRUCT)
44318];
44319
44320// Used for parsing/radix conversion
44321BigInteger.digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
44322
44323/*
44324 Method: toString
44325 Convert a <BigInteger> to a string.
44326
44327 When *base* is greater than 10, letters are upper case.
44328
44329 Parameters:
44330
44331 base - Optional base to represent the number in (default is base 10).
44332 Must be between 2 and 36 inclusive, or an Error will be thrown.
44333
44334 Returns:
44335
44336 The string representation of the <BigInteger>.
44337*/
44338BigInteger.prototype.toString = function(base) {
44339 base = +base || 10;
44340 if (base < 2 || base > 36) {
44341 throw new Error("illegal radix " + base + ".");
44342 }
44343 if (this._s === 0) {
44344 return "0";
44345 }
44346 if (base === 10) {
44347 var str = this._s < 0 ? "-" : "";
44348 str += this._d[this._d.length - 1].toString();
44349 for (var i = this._d.length - 2; i >= 0; i--) {
44350 var group = this._d[i].toString();
44351 while (group.length < BigInteger_base_log10) group = '0' + group;
44352 str += group;
44353 }
44354 return str;
44355 }
44356 else {
44357 var numerals = BigInteger.digits;
44358 base = BigInteger.small[base];
44359 var sign = this._s;
44360
44361 var n = this.abs();
44362 var digits = [];
44363 var digit;
44364
44365 while (n._s !== 0) {
44366 var divmod = n.divRem(base);
44367 n = divmod[0];
44368 digit = divmod[1];
44369 // TODO: This could be changed to unshift instead of reversing at the end.
44370 // Benchmark both to compare speeds.
44371 digits.push(numerals[digit.valueOf()]);
44372 }
44373 return (sign < 0 ? "-" : "") + digits.reverse().join("");
44374 }
44375};
44376
44377// Verify strings for parsing
44378BigInteger.radixRegex = [
44379 /^$/,
44380 /^$/,
44381 /^[01]*$/,
44382 /^[012]*$/,
44383 /^[0-3]*$/,
44384 /^[0-4]*$/,
44385 /^[0-5]*$/,
44386 /^[0-6]*$/,
44387 /^[0-7]*$/,
44388 /^[0-8]*$/,
44389 /^[0-9]*$/,
44390 /^[0-9aA]*$/,
44391 /^[0-9abAB]*$/,
44392 /^[0-9abcABC]*$/,
44393 /^[0-9a-dA-D]*$/,
44394 /^[0-9a-eA-E]*$/,
44395 /^[0-9a-fA-F]*$/,
44396 /^[0-9a-gA-G]*$/,
44397 /^[0-9a-hA-H]*$/,
44398 /^[0-9a-iA-I]*$/,
44399 /^[0-9a-jA-J]*$/,
44400 /^[0-9a-kA-K]*$/,
44401 /^[0-9a-lA-L]*$/,
44402 /^[0-9a-mA-M]*$/,
44403 /^[0-9a-nA-N]*$/,
44404 /^[0-9a-oA-O]*$/,
44405 /^[0-9a-pA-P]*$/,
44406 /^[0-9a-qA-Q]*$/,
44407 /^[0-9a-rA-R]*$/,
44408 /^[0-9a-sA-S]*$/,
44409 /^[0-9a-tA-T]*$/,
44410 /^[0-9a-uA-U]*$/,
44411 /^[0-9a-vA-V]*$/,
44412 /^[0-9a-wA-W]*$/,
44413 /^[0-9a-xA-X]*$/,
44414 /^[0-9a-yA-Y]*$/,
44415 /^[0-9a-zA-Z]*$/
44416];
44417
44418/*
44419 Function: parse
44420 Parse a string into a <BigInteger>.
44421
44422 *base* is optional but, if provided, must be from 2 to 36 inclusive. If
44423 *base* is not provided, it will be guessed based on the leading characters
44424 of *s* as follows:
44425
44426 - "0x" or "0X": *base* = 16
44427 - "0c" or "0C": *base* = 8
44428 - "0b" or "0B": *base* = 2
44429 - else: *base* = 10
44430
44431 If no base is provided, or *base* is 10, the number can be in exponential
44432 form. For example, these are all valid:
44433
44434 > BigInteger.parse("1e9"); // Same as "1000000000"
44435 > BigInteger.parse("1.234*10^3"); // Same as 1234
44436 > BigInteger.parse("56789 * 10 ** -2"); // Same as 567
44437
44438 If any characters fall outside the range defined by the radix, an exception
44439 will be thrown.
44440
44441 Parameters:
44442
44443 s - The string to parse.
44444 base - Optional radix (default is to guess based on *s*).
44445
44446 Returns:
44447
44448 a <BigInteger> instance.
44449*/
44450BigInteger.parse = function(s, base) {
44451 // Expands a number in exponential form to decimal form.
44452 // expandExponential("-13.441*10^5") === "1344100";
44453 // expandExponential("1.12300e-1") === "0.112300";
44454 // expandExponential(1000000000000000000000000000000) === "1000000000000000000000000000000";
44455 function expandExponential(str) {
44456 str = str.replace(/\s*[*xX]\s*10\s*(\^|\*\*)\s*/, "e");
44457
44458 return str.replace(/^([+\-])?(\d+)\.?(\d*)[eE]([+\-]?\d+)$/, function(x, s, n, f, c) {
44459 c = +c;
44460 var l = c < 0;
44461 var i = n.length + c;
44462 x = (l ? n : f).length;
44463 c = ((c = Math.abs(c)) >= x ? c - x + l : 0);
44464 var z = (new Array(c + 1)).join("0");
44465 var r = n + f;
44466 return (s || "") + (l ? r = z + r : r += z).substr(0, i += l ? z.length : 0) + (i < r.length ? "." + r.substr(i) : "");
44467 });
44468 }
44469
44470 s = s.toString();
44471 if (typeof base === "undefined" || +base === 10) {
44472 s = expandExponential(s);
44473 }
44474
44475 var prefixRE;
44476 if (typeof base === "undefined") {
44477 prefixRE = '0[xcb]';
44478 }
44479 else if (base == 16) {
44480 prefixRE = '0x';
44481 }
44482 else if (base == 8) {
44483 prefixRE = '0c';
44484 }
44485 else if (base == 2) {
44486 prefixRE = '0b';
44487 }
44488 else {
44489 prefixRE = '';
44490 }
44491 var parts = new RegExp('^([+\\-]?)(' + prefixRE + ')?([0-9a-z]*)(?:\\.\\d*)?$', 'i').exec(s);
44492 if (parts) {
44493 var sign = parts[1] || "+";
44494 var baseSection = parts[2] || "";
44495 var digits = parts[3] || "";
44496
44497 if (typeof base === "undefined") {
44498 // Guess base
44499 if (baseSection === "0x" || baseSection === "0X") { // Hex
44500 base = 16;
44501 }
44502 else if (baseSection === "0c" || baseSection === "0C") { // Octal
44503 base = 8;
44504 }
44505 else if (baseSection === "0b" || baseSection === "0B") { // Binary
44506 base = 2;
44507 }
44508 else {
44509 base = 10;
44510 }
44511 }
44512 else if (base < 2 || base > 36) {
44513 throw new Error("Illegal radix " + base + ".");
44514 }
44515
44516 base = +base;
44517
44518 // Check for digits outside the range
44519 if (!(BigInteger.radixRegex[base].test(digits))) {
44520 throw new Error("Bad digit for radix " + base);
44521 }
44522
44523 // Strip leading zeros, and convert to array
44524 digits = digits.replace(/^0+/, "").split("");
44525 if (digits.length === 0) {
44526 return ZERO;
44527 }
44528
44529 // Get the sign (we know it's not zero)
44530 sign = (sign === "-") ? -1 : 1;
44531
44532 // Optimize 10
44533 if (base == 10) {
44534 var d = [];
44535 while (digits.length >= BigInteger_base_log10) {
44536 d.push(parseInt(digits.splice(digits.length-BigInteger.base_log10, BigInteger.base_log10).join(''), 10));
44537 }
44538 d.push(parseInt(digits.join(''), 10));
44539 return new BigInteger(d, sign, CONSTRUCT);
44540 }
44541
44542 // Do the conversion
44543 var d = ZERO;
44544 base = BigInteger.small[base];
44545 var small = BigInteger.small;
44546 for (var i = 0; i < digits.length; i++) {
44547 d = d.multiply(base).add(small[parseInt(digits[i], 36)]);
44548 }
44549 return new BigInteger(d._d, sign, CONSTRUCT);
44550 }
44551 else {
44552 throw new Error("Invalid BigInteger format: " + s);
44553 }
44554};
44555
44556/*
44557 Function: add
44558 Add two <BigIntegers>.
44559
44560 Parameters:
44561
44562 n - The number to add to *this*. Will be converted to a <BigInteger>.
44563
44564 Returns:
44565
44566 The numbers added together.
44567
44568 See Also:
44569
44570 <subtract>, <multiply>, <quotient>, <next>
44571*/
44572BigInteger.prototype.add = function(n) {
44573 if (this._s === 0) {
44574 return BigInteger(n);
44575 }
44576
44577 n = BigInteger(n);
44578 if (n._s === 0) {
44579 return this;
44580 }
44581 if (this._s !== n._s) {
44582 n = n.negate();
44583 return this.subtract(n);
44584 }
44585
44586 var a = this._d;
44587 var b = n._d;
44588 var al = a.length;
44589 var bl = b.length;
44590 var sum = new Array(Math.max(al, bl) + 1);
44591 var size = Math.min(al, bl);
44592 var carry = 0;
44593 var digit;
44594
44595 for (var i = 0; i < size; i++) {
44596 digit = a[i] + b[i] + carry;
44597 sum[i] = digit % BigInteger_base;
44598 carry = (digit / BigInteger_base) | 0;
44599 }
44600 if (bl > al) {
44601 a = b;
44602 al = bl;
44603 }
44604 for (i = size; carry && i < al; i++) {
44605 digit = a[i] + carry;
44606 sum[i] = digit % BigInteger_base;
44607 carry = (digit / BigInteger_base) | 0;
44608 }
44609 if (carry) {
44610 sum[i] = carry;
44611 }
44612
44613 for ( ; i < al; i++) {
44614 sum[i] = a[i];
44615 }
44616
44617 return new BigInteger(sum, this._s, CONSTRUCT);
44618};
44619
44620/*
44621 Function: negate
44622 Get the additive inverse of a <BigInteger>.
44623
44624 Returns:
44625
44626 A <BigInteger> with the same magnatude, but with the opposite sign.
44627
44628 See Also:
44629
44630 <abs>
44631*/
44632BigInteger.prototype.negate = function() {
44633 return new BigInteger(this._d, (-this._s) | 0, CONSTRUCT);
44634};
44635
44636/*
44637 Function: abs
44638 Get the absolute value of a <BigInteger>.
44639
44640 Returns:
44641
44642 A <BigInteger> with the same magnatude, but always positive (or zero).
44643
44644 See Also:
44645
44646 <negate>
44647*/
44648BigInteger.prototype.abs = function() {
44649 return (this._s < 0) ? this.negate() : this;
44650};
44651
44652/*
44653 Function: subtract
44654 Subtract two <BigIntegers>.
44655
44656 Parameters:
44657
44658 n - The number to subtract from *this*. Will be converted to a <BigInteger>.
44659
44660 Returns:
44661
44662 The *n* subtracted from *this*.
44663
44664 See Also:
44665
44666 <add>, <multiply>, <quotient>, <prev>
44667*/
44668BigInteger.prototype.subtract = function(n) {
44669 if (this._s === 0) {
44670 return BigInteger(n).negate();
44671 }
44672
44673 n = BigInteger(n);
44674 if (n._s === 0) {
44675 return this;
44676 }
44677 if (this._s !== n._s) {
44678 n = n.negate();
44679 return this.add(n);
44680 }
44681
44682 var m = this;
44683 // negative - negative => -|a| - -|b| => -|a| + |b| => |b| - |a|
44684 if (this._s < 0) {
44685 m = new BigInteger(n._d, 1, CONSTRUCT);
44686 n = new BigInteger(this._d, 1, CONSTRUCT);
44687 }
44688
44689 // Both are positive => a - b
44690 var sign = m.compareAbs(n);
44691 if (sign === 0) {
44692 return ZERO;
44693 }
44694 else if (sign < 0) {
44695 // swap m and n
44696 var t = n;
44697 n = m;
44698 m = t;
44699 }
44700
44701 // a > b
44702 var a = m._d;
44703 var b = n._d;
44704 var al = a.length;
44705 var bl = b.length;
44706 var diff = new Array(al); // al >= bl since a > b
44707 var borrow = 0;
44708 var i;
44709 var digit;
44710
44711 for (i = 0; i < bl; i++) {
44712 digit = a[i] - borrow - b[i];
44713 if (digit < 0) {
44714 digit += BigInteger_base;
44715 borrow = 1;
44716 }
44717 else {
44718 borrow = 0;
44719 }
44720 diff[i] = digit;
44721 }
44722 for (i = bl; i < al; i++) {
44723 digit = a[i] - borrow;
44724 if (digit < 0) {
44725 digit += BigInteger_base;
44726 }
44727 else {
44728 diff[i++] = digit;
44729 break;
44730 }
44731 diff[i] = digit;
44732 }
44733 for ( ; i < al; i++) {
44734 diff[i] = a[i];
44735 }
44736
44737 return new BigInteger(diff, sign, CONSTRUCT);
44738};
44739
44740(function() {
44741 function addOne(n, sign) {
44742 var a = n._d;
44743 var sum = a.slice();
44744 var carry = true;
44745 var i = 0;
44746
44747 while (true) {
44748 var digit = (a[i] || 0) + 1;
44749 sum[i] = digit % BigInteger_base;
44750 if (digit <= BigInteger_base - 1) {
44751 break;
44752 }
44753 ++i;
44754 }
44755
44756 return new BigInteger(sum, sign, CONSTRUCT);
44757 }
44758
44759 function subtractOne(n, sign) {
44760 var a = n._d;
44761 var sum = a.slice();
44762 var borrow = true;
44763 var i = 0;
44764
44765 while (true) {
44766 var digit = (a[i] || 0) - 1;
44767 if (digit < 0) {
44768 sum[i] = digit + BigInteger_base;
44769 }
44770 else {
44771 sum[i] = digit;
44772 break;
44773 }
44774 ++i;
44775 }
44776
44777 return new BigInteger(sum, sign, CONSTRUCT);
44778 }
44779
44780 /*
44781 Function: next
44782 Get the next <BigInteger> (add one).
44783
44784 Returns:
44785
44786 *this* + 1.
44787
44788 See Also:
44789
44790 <add>, <prev>
44791 */
44792 BigInteger.prototype.next = function() {
44793 switch (this._s) {
44794 case 0:
44795 return ONE;
44796 case -1:
44797 return subtractOne(this, -1);
44798 // case 1:
44799 default:
44800 return addOne(this, 1);
44801 }
44802 };
44803
44804 /*
44805 Function: prev
44806 Get the previous <BigInteger> (subtract one).
44807
44808 Returns:
44809
44810 *this* - 1.
44811
44812 See Also:
44813
44814 <next>, <subtract>
44815 */
44816 BigInteger.prototype.prev = function() {
44817 switch (this._s) {
44818 case 0:
44819 return M_ONE;
44820 case -1:
44821 return addOne(this, -1);
44822 // case 1:
44823 default:
44824 return subtractOne(this, 1);
44825 }
44826 };
44827})();
44828
44829/*
44830 Function: compareAbs
44831 Compare the absolute value of two <BigIntegers>.
44832
44833 Calling <compareAbs> is faster than calling <abs> twice, then <compare>.
44834
44835 Parameters:
44836
44837 n - The number to compare to *this*. Will be converted to a <BigInteger>.
44838
44839 Returns:
44840
44841 -1, 0, or +1 if *|this|* is less than, equal to, or greater than *|n|*.
44842
44843 See Also:
44844
44845 <compare>, <abs>
44846*/
44847BigInteger.prototype.compareAbs = function(n) {
44848 if (this === n) {
44849 return 0;
44850 }
44851
44852 if (!(n instanceof BigInteger)) {
44853 if (!isFinite(n)) {
44854 return(isNaN(n) ? n : -1);
44855 }
44856 n = BigInteger(n);
44857 }
44858
44859 if (this._s === 0) {
44860 return (n._s !== 0) ? -1 : 0;
44861 }
44862 if (n._s === 0) {
44863 return 1;
44864 }
44865
44866 var l = this._d.length;
44867 var nl = n._d.length;
44868 if (l < nl) {
44869 return -1;
44870 }
44871 else if (l > nl) {
44872 return 1;
44873 }
44874
44875 var a = this._d;
44876 var b = n._d;
44877 for (var i = l-1; i >= 0; i--) {
44878 if (a[i] !== b[i]) {
44879 return a[i] < b[i] ? -1 : 1;
44880 }
44881 }
44882
44883 return 0;
44884};
44885
44886/*
44887 Function: compare
44888 Compare two <BigIntegers>.
44889
44890 Parameters:
44891
44892 n - The number to compare to *this*. Will be converted to a <BigInteger>.
44893
44894 Returns:
44895
44896 -1, 0, or +1 if *this* is less than, equal to, or greater than *n*.
44897
44898 See Also:
44899
44900 <compareAbs>, <isPositive>, <isNegative>, <isUnit>
44901*/
44902BigInteger.prototype.compare = function(n) {
44903 if (this === n) {
44904 return 0;
44905 }
44906
44907 n = BigInteger(n);
44908
44909 if (this._s === 0) {
44910 return -n._s;
44911 }
44912
44913 if (this._s === n._s) { // both positive or both negative
44914 var cmp = this.compareAbs(n);
44915 return cmp * this._s;
44916 }
44917 else {
44918 return this._s;
44919 }
44920};
44921
44922/*
44923 Function: isUnit
44924 Return true iff *this* is either 1 or -1.
44925
44926 Returns:
44927
44928 true if *this* compares equal to <BigInteger.ONE> or <BigInteger.M_ONE>.
44929
44930 See Also:
44931
44932 <isZero>, <isNegative>, <isPositive>, <compareAbs>, <compare>,
44933 <BigInteger.ONE>, <BigInteger.M_ONE>
44934*/
44935BigInteger.prototype.isUnit = function() {
44936 return this === ONE ||
44937 this === M_ONE ||
44938 (this._d.length === 1 && this._d[0] === 1);
44939};
44940
44941/*
44942 Function: multiply
44943 Multiply two <BigIntegers>.
44944
44945 Parameters:
44946
44947 n - The number to multiply *this* by. Will be converted to a
44948 <BigInteger>.
44949
44950 Returns:
44951
44952 The numbers multiplied together.
44953
44954 See Also:
44955
44956 <add>, <subtract>, <quotient>, <square>
44957*/
44958BigInteger.prototype.multiply = function(n) {
44959 // TODO: Consider adding Karatsuba multiplication for large numbers
44960 if (this._s === 0) {
44961 return ZERO;
44962 }
44963
44964 n = BigInteger(n);
44965 if (n._s === 0) {
44966 return ZERO;
44967 }
44968 if (this.isUnit()) {
44969 if (this._s < 0) {
44970 return n.negate();
44971 }
44972 return n;
44973 }
44974 if (n.isUnit()) {
44975 if (n._s < 0) {
44976 return this.negate();
44977 }
44978 return this;
44979 }
44980 if (this === n) {
44981 return this.square();
44982 }
44983
44984 var r = (this._d.length >= n._d.length);
44985 var a = (r ? this : n)._d; // a will be longer than b
44986 var b = (r ? n : this)._d;
44987 var al = a.length;
44988 var bl = b.length;
44989
44990 var pl = al + bl;
44991 var partial = new Array(pl);
44992 var i;
44993 for (i = 0; i < pl; i++) {
44994 partial[i] = 0;
44995 }
44996
44997 for (i = 0; i < bl; i++) {
44998 var carry = 0;
44999 var bi = b[i];
45000 var jlimit = al + i;
45001 var digit;
45002 for (var j = i; j < jlimit; j++) {
45003 digit = partial[j] + bi * a[j - i] + carry;
45004 carry = (digit / BigInteger_base) | 0;
45005 partial[j] = (digit % BigInteger_base) | 0;
45006 }
45007 if (carry) {
45008 digit = partial[j] + carry;
45009 carry = (digit / BigInteger_base) | 0;
45010 partial[j] = digit % BigInteger_base;
45011 }
45012 }
45013 return new BigInteger(partial, this._s * n._s, CONSTRUCT);
45014};
45015
45016// Multiply a BigInteger by a single-digit native number
45017// Assumes that this and n are >= 0
45018// This is not really intended to be used outside the library itself
45019BigInteger.prototype.multiplySingleDigit = function(n) {
45020 if (n === 0 || this._s === 0) {
45021 return ZERO;
45022 }
45023 if (n === 1) {
45024 return this;
45025 }
45026
45027 var digit;
45028 if (this._d.length === 1) {
45029 digit = this._d[0] * n;
45030 if (digit >= BigInteger_base) {
45031 return new BigInteger([(digit % BigInteger_base)|0,
45032 (digit / BigInteger_base)|0], 1, CONSTRUCT);
45033 }
45034 return new BigInteger([digit], 1, CONSTRUCT);
45035 }
45036
45037 if (n === 2) {
45038 return this.add(this);
45039 }
45040 if (this.isUnit()) {
45041 return new BigInteger([n], 1, CONSTRUCT);
45042 }
45043
45044 var a = this._d;
45045 var al = a.length;
45046
45047 var pl = al + 1;
45048 var partial = new Array(pl);
45049 for (var i = 0; i < pl; i++) {
45050 partial[i] = 0;
45051 }
45052
45053 var carry = 0;
45054 for (var j = 0; j < al; j++) {
45055 digit = n * a[j] + carry;
45056 carry = (digit / BigInteger_base) | 0;
45057 partial[j] = (digit % BigInteger_base) | 0;
45058 }
45059 if (carry) {
45060 partial[j] = carry;
45061 }
45062
45063 return new BigInteger(partial, 1, CONSTRUCT);
45064};
45065
45066/*
45067 Function: square
45068 Multiply a <BigInteger> by itself.
45069
45070 This is slightly faster than regular multiplication, since it removes the
45071 duplicated multiplcations.
45072
45073 Returns:
45074
45075 > this.multiply(this)
45076
45077 See Also:
45078 <multiply>
45079*/
45080BigInteger.prototype.square = function() {
45081 // Normally, squaring a 10-digit number would take 100 multiplications.
45082 // Of these 10 are unique diagonals, of the remaining 90 (100-10), 45 are repeated.
45083 // This procedure saves (N*(N-1))/2 multiplications, (e.g., 45 of 100 multiplies).
45084 // Based on code by Gary Darby, Intellitech Systems Inc., www.DelphiForFun.org
45085
45086 if (this._s === 0) {
45087 return ZERO;
45088 }
45089 if (this.isUnit()) {
45090 return ONE;
45091 }
45092
45093 var digits = this._d;
45094 var length = digits.length;
45095 var imult1 = new Array(length + length + 1);
45096 var product, carry, k;
45097 var i;
45098
45099 // Calculate diagonal
45100 for (i = 0; i < length; i++) {
45101 k = i * 2;
45102 product = digits[i] * digits[i];
45103 carry = (product / BigInteger_base) | 0;
45104 imult1[k] = product % BigInteger_base;
45105 imult1[k + 1] = carry;
45106 }
45107
45108 // Calculate repeating part
45109 for (i = 0; i < length; i++) {
45110 carry = 0;
45111 k = i * 2 + 1;
45112 for (var j = i + 1; j < length; j++, k++) {
45113 product = digits[j] * digits[i] * 2 + imult1[k] + carry;
45114 carry = (product / BigInteger_base) | 0;
45115 imult1[k] = product % BigInteger_base;
45116 }
45117 k = length + i;
45118 var digit = carry + imult1[k];
45119 carry = (digit / BigInteger_base) | 0;
45120 imult1[k] = digit % BigInteger_base;
45121 imult1[k + 1] += carry;
45122 }
45123
45124 return new BigInteger(imult1, 1, CONSTRUCT);
45125};
45126
45127/*
45128 Function: quotient
45129 Divide two <BigIntegers> and truncate towards zero.
45130
45131 <quotient> throws an exception if *n* is zero.
45132
45133 Parameters:
45134
45135 n - The number to divide *this* by. Will be converted to a <BigInteger>.
45136
45137 Returns:
45138
45139 The *this* / *n*, truncated to an integer.
45140
45141 See Also:
45142
45143 <add>, <subtract>, <multiply>, <divRem>, <remainder>
45144*/
45145BigInteger.prototype.quotient = function(n) {
45146 return this.divRem(n)[0];
45147};
45148
45149/*
45150 Function: divide
45151 Deprecated synonym for <quotient>.
45152*/
45153BigInteger.prototype.divide = BigInteger.prototype.quotient;
45154
45155/*
45156 Function: remainder
45157 Calculate the remainder of two <BigIntegers>.
45158
45159 <remainder> throws an exception if *n* is zero.
45160
45161 Parameters:
45162
45163 n - The remainder after *this* is divided *this* by *n*. Will be
45164 converted to a <BigInteger>.
45165
45166 Returns:
45167
45168 *this* % *n*.
45169
45170 See Also:
45171
45172 <divRem>, <quotient>
45173*/
45174BigInteger.prototype.remainder = function(n) {
45175 return this.divRem(n)[1];
45176};
45177
45178/*
45179 Function: divRem
45180 Calculate the integer quotient and remainder of two <BigIntegers>.
45181
45182 <divRem> throws an exception if *n* is zero.
45183
45184 Parameters:
45185
45186 n - The number to divide *this* by. Will be converted to a <BigInteger>.
45187
45188 Returns:
45189
45190 A two-element array containing the quotient and the remainder.
45191
45192 > a.divRem(b)
45193
45194 is exactly equivalent to
45195
45196 > [a.quotient(b), a.remainder(b)]
45197
45198 except it is faster, because they are calculated at the same time.
45199
45200 See Also:
45201
45202 <quotient>, <remainder>
45203*/
45204BigInteger.prototype.divRem = function(n) {
45205 n = BigInteger(n);
45206 if (n._s === 0) {
45207 throw new Error("Divide by zero");
45208 }
45209 if (this._s === 0) {
45210 return [ZERO, ZERO];
45211 }
45212 if (n._d.length === 1) {
45213 return this.divRemSmall(n._s * n._d[0]);
45214 }
45215
45216 // Test for easy cases -- |n1| <= |n2|
45217 switch (this.compareAbs(n)) {
45218 case 0: // n1 == n2
45219 return [this._s === n._s ? ONE : M_ONE, ZERO];
45220 case -1: // |n1| < |n2|
45221 return [ZERO, this];
45222 }
45223
45224 var sign = this._s * n._s;
45225 var a = n.abs();
45226 var b_digits = this._d;
45227 var b_index = b_digits.length;
45228 var digits = n._d.length;
45229 var quot = [];
45230 var guess;
45231
45232 var part = new BigInteger([], 0, CONSTRUCT);
45233
45234 while (b_index) {
45235 part._d.unshift(b_digits[--b_index]);
45236 part = new BigInteger(part._d, 1, CONSTRUCT);
45237
45238 if (part.compareAbs(n) < 0) {
45239 quot.push(0);
45240 continue;
45241 }
45242 if (part._s === 0) {
45243 guess = 0;
45244 }
45245 else {
45246 var xlen = part._d.length, ylen = a._d.length;
45247 var highx = part._d[xlen-1]*BigInteger_base + part._d[xlen-2];
45248 var highy = a._d[ylen-1]*BigInteger_base + a._d[ylen-2];
45249 if (part._d.length > a._d.length) {
45250 // The length of part._d can either match a._d length,
45251 // or exceed it by one.
45252 highx = (highx+1)*BigInteger_base;
45253 }
45254 guess = Math.ceil(highx/highy);
45255 }
45256 do {
45257 var check = a.multiplySingleDigit(guess);
45258 if (check.compareAbs(part) <= 0) {
45259 break;
45260 }
45261 guess--;
45262 } while (guess);
45263
45264 quot.push(guess);
45265 if (!guess) {
45266 continue;
45267 }
45268 var diff = part.subtract(check);
45269 part._d = diff._d.slice();
45270 }
45271
45272 return [new BigInteger(quot.reverse(), sign, CONSTRUCT),
45273 new BigInteger(part._d, this._s, CONSTRUCT)];
45274};
45275
45276// Throws an exception if n is outside of (-BigInteger.base, -1] or
45277// [1, BigInteger.base). It's not necessary to call this, since the
45278// other division functions will call it if they are able to.
45279BigInteger.prototype.divRemSmall = function(n) {
45280 var r;
45281 n = +n;
45282 if (n === 0) {
45283 throw new Error("Divide by zero");
45284 }
45285
45286 var n_s = n < 0 ? -1 : 1;
45287 var sign = this._s * n_s;
45288 n = Math.abs(n);
45289
45290 if (n < 1 || n >= BigInteger_base) {
45291 throw new Error("Argument out of range");
45292 }
45293
45294 if (this._s === 0) {
45295 return [ZERO, ZERO];
45296 }
45297
45298 if (n === 1 || n === -1) {
45299 return [(sign === 1) ? this.abs() : new BigInteger(this._d, sign, CONSTRUCT), ZERO];
45300 }
45301
45302 // 2 <= n < BigInteger_base
45303
45304 // divide a single digit by a single digit
45305 if (this._d.length === 1) {
45306 var q = new BigInteger([(this._d[0] / n) | 0], 1, CONSTRUCT);
45307 r = new BigInteger([(this._d[0] % n) | 0], 1, CONSTRUCT);
45308 if (sign < 0) {
45309 q = q.negate();
45310 }
45311 if (this._s < 0) {
45312 r = r.negate();
45313 }
45314 return [q, r];
45315 }
45316
45317 var digits = this._d.slice();
45318 var quot = new Array(digits.length);
45319 var part = 0;
45320 var diff = 0;
45321 var i = 0;
45322 var guess;
45323
45324 while (digits.length) {
45325 part = part * BigInteger_base + digits[digits.length - 1];
45326 if (part < n) {
45327 quot[i++] = 0;
45328 digits.pop();
45329 diff = BigInteger_base * diff + part;
45330 continue;
45331 }
45332 if (part === 0) {
45333 guess = 0;
45334 }
45335 else {
45336 guess = (part / n) | 0;
45337 }
45338
45339 var check = n * guess;
45340 diff = part - check;
45341 quot[i++] = guess;
45342 if (!guess) {
45343 digits.pop();
45344 continue;
45345 }
45346
45347 digits.pop();
45348 part = diff;
45349 }
45350
45351 r = new BigInteger([diff], 1, CONSTRUCT);
45352 if (this._s < 0) {
45353 r = r.negate();
45354 }
45355 return [new BigInteger(quot.reverse(), sign, CONSTRUCT), r];
45356};
45357
45358/*
45359 Function: isEven
45360 Return true iff *this* is divisible by two.
45361
45362 Note that <BigInteger.ZERO> is even.
45363
45364 Returns:
45365
45366 true if *this* is even, false otherwise.
45367
45368 See Also:
45369
45370 <isOdd>
45371*/
45372BigInteger.prototype.isEven = function() {
45373 var digits = this._d;
45374 return this._s === 0 || digits.length === 0 || (digits[0] % 2) === 0;
45375};
45376
45377/*
45378 Function: isOdd
45379 Return true iff *this* is not divisible by two.
45380
45381 Returns:
45382
45383 true if *this* is odd, false otherwise.
45384
45385 See Also:
45386
45387 <isEven>
45388*/
45389BigInteger.prototype.isOdd = function() {
45390 return !this.isEven();
45391};
45392
45393/*
45394 Function: sign
45395 Get the sign of a <BigInteger>.
45396
45397 Returns:
45398
45399 * -1 if *this* < 0
45400 * 0 if *this* == 0
45401 * +1 if *this* > 0
45402
45403 See Also:
45404
45405 <isZero>, <isPositive>, <isNegative>, <compare>, <BigInteger.ZERO>
45406*/
45407BigInteger.prototype.sign = function() {
45408 return this._s;
45409};
45410
45411/*
45412 Function: isPositive
45413 Return true iff *this* > 0.
45414
45415 Returns:
45416
45417 true if *this*.compare(<BigInteger.ZERO>) == 1.
45418
45419 See Also:
45420
45421 <sign>, <isZero>, <isNegative>, <isUnit>, <compare>, <BigInteger.ZERO>
45422*/
45423BigInteger.prototype.isPositive = function() {
45424 return this._s > 0;
45425};
45426
45427/*
45428 Function: isNegative
45429 Return true iff *this* < 0.
45430
45431 Returns:
45432
45433 true if *this*.compare(<BigInteger.ZERO>) == -1.
45434
45435 See Also:
45436
45437 <sign>, <isPositive>, <isZero>, <isUnit>, <compare>, <BigInteger.ZERO>
45438*/
45439BigInteger.prototype.isNegative = function() {
45440 return this._s < 0;
45441};
45442
45443/*
45444 Function: isZero
45445 Return true iff *this* == 0.
45446
45447 Returns:
45448
45449 true if *this*.compare(<BigInteger.ZERO>) == 0.
45450
45451 See Also:
45452
45453 <sign>, <isPositive>, <isNegative>, <isUnit>, <BigInteger.ZERO>
45454*/
45455BigInteger.prototype.isZero = function() {
45456 return this._s === 0;
45457};
45458
45459/*
45460 Function: exp10
45461 Multiply a <BigInteger> by a power of 10.
45462
45463 This is equivalent to, but faster than
45464
45465 > if (n >= 0) {
45466 > return this.multiply(BigInteger("1e" + n));
45467 > }
45468 > else { // n <= 0
45469 > return this.quotient(BigInteger("1e" + -n));
45470 > }
45471
45472 Parameters:
45473
45474 n - The power of 10 to multiply *this* by. *n* is converted to a
45475 javascipt number and must be no greater than <BigInteger.MAX_EXP>
45476 (0x7FFFFFFF), or an exception will be thrown.
45477
45478 Returns:
45479
45480 *this* * (10 ** *n*), truncated to an integer if necessary.
45481
45482 See Also:
45483
45484 <pow>, <multiply>
45485*/
45486BigInteger.prototype.exp10 = function(n) {
45487 n = +n;
45488 if (n === 0) {
45489 return this;
45490 }
45491 if (Math.abs(n) > Number(MAX_EXP)) {
45492 throw new Error("exponent too large in BigInteger.exp10");
45493 }
45494 // Optimization for this == 0. This also keeps us from having to trim zeros in the positive n case
45495 if (this._s === 0) {
45496 return ZERO;
45497 }
45498 if (n > 0) {
45499 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
45500
45501 for (; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
45502 k._d.unshift(0);
45503 }
45504 if (n == 0)
45505 return k;
45506 k._s = 1;
45507 k = k.multiplySingleDigit(Math.pow(10, n));
45508 return (this._s < 0 ? k.negate() : k);
45509 } else if (-n >= this._d.length*BigInteger_base_log10) {
45510 return ZERO;
45511 } else {
45512 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
45513
45514 for (n = -n; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
45515 k._d.shift();
45516 }
45517 return (n == 0) ? k : k.divRemSmall(Math.pow(10, n))[0];
45518 }
45519};
45520
45521/*
45522 Function: pow
45523 Raise a <BigInteger> to a power.
45524
45525 In this implementation, 0**0 is 1.
45526
45527 Parameters:
45528
45529 n - The exponent to raise *this* by. *n* must be no greater than
45530 <BigInteger.MAX_EXP> (0x7FFFFFFF), or an exception will be thrown.
45531
45532 Returns:
45533
45534 *this* raised to the *nth* power.
45535
45536 See Also:
45537
45538 <modPow>
45539*/
45540BigInteger.prototype.pow = function(n) {
45541 if (this.isUnit()) {
45542 if (this._s > 0) {
45543 return this;
45544 }
45545 else {
45546 return BigInteger(n).isOdd() ? this : this.negate();
45547 }
45548 }
45549
45550 n = BigInteger(n);
45551 if (n._s === 0) {
45552 return ONE;
45553 }
45554 else if (n._s < 0) {
45555 if (this._s === 0) {
45556 throw new Error("Divide by zero");
45557 }
45558 else {
45559 return ZERO;
45560 }
45561 }
45562 if (this._s === 0) {
45563 return ZERO;
45564 }
45565 if (n.isUnit()) {
45566 return this;
45567 }
45568
45569 if (n.compareAbs(MAX_EXP) > 0) {
45570 throw new Error("exponent too large in BigInteger.pow");
45571 }
45572 var x = this;
45573 var aux = ONE;
45574 var two = BigInteger.small[2];
45575
45576 while (n.isPositive()) {
45577 if (n.isOdd()) {
45578 aux = aux.multiply(x);
45579 if (n.isUnit()) {
45580 return aux;
45581 }
45582 }
45583 x = x.square();
45584 n = n.quotient(two);
45585 }
45586
45587 return aux;
45588};
45589
45590/*
45591 Function: modPow
45592 Raise a <BigInteger> to a power (mod m).
45593
45594 Because it is reduced by a modulus, <modPow> is not limited by
45595 <BigInteger.MAX_EXP> like <pow>.
45596
45597 Parameters:
45598
45599 exponent - The exponent to raise *this* by. Must be positive.
45600 modulus - The modulus.
45601
45602 Returns:
45603
45604 *this* ^ *exponent* (mod *modulus*).
45605
45606 See Also:
45607
45608 <pow>, <mod>
45609*/
45610BigInteger.prototype.modPow = function(exponent, modulus) {
45611 var result = ONE;
45612 var base = this;
45613
45614 while (exponent.isPositive()) {
45615 if (exponent.isOdd()) {
45616 result = result.multiply(base).remainder(modulus);
45617 }
45618
45619 exponent = exponent.quotient(BigInteger.small[2]);
45620 if (exponent.isPositive()) {
45621 base = base.square().remainder(modulus);
45622 }
45623 }
45624
45625 return result;
45626};
45627
45628/*
45629 Function: log
45630 Get the natural logarithm of a <BigInteger> as a native JavaScript number.
45631
45632 This is equivalent to
45633
45634 > Math.log(this.toJSValue())
45635
45636 but handles values outside of the native number range.
45637
45638 Returns:
45639
45640 log( *this* )
45641
45642 See Also:
45643
45644 <toJSValue>
45645*/
45646BigInteger.prototype.log = function() {
45647 switch (this._s) {
45648 case 0: return -Infinity;
45649 case -1: return NaN;
45650 default: // Fall through.
45651 }
45652
45653 var l = this._d.length;
45654
45655 if (l*BigInteger_base_log10 < 30) {
45656 return Math.log(this.valueOf());
45657 }
45658
45659 var N = Math.ceil(30/BigInteger_base_log10);
45660 var firstNdigits = this._d.slice(l - N);
45661 return Math.log((new BigInteger(firstNdigits, 1, CONSTRUCT)).valueOf()) + (l - N) * Math.log(BigInteger_base);
45662};
45663
45664/*
45665 Function: valueOf
45666 Convert a <BigInteger> to a native JavaScript integer.
45667
45668 This is called automatically by JavaScipt to convert a <BigInteger> to a
45669 native value.
45670
45671 Returns:
45672
45673 > parseInt(this.toString(), 10)
45674
45675 See Also:
45676
45677 <toString>, <toJSValue>
45678*/
45679BigInteger.prototype.valueOf = function() {
45680 return parseInt(this.toString(), 10);
45681};
45682
45683/*
45684 Function: toJSValue
45685 Convert a <BigInteger> to a native JavaScript integer.
45686
45687 This is the same as valueOf, but more explicitly named.
45688
45689 Returns:
45690
45691 > parseInt(this.toString(), 10)
45692
45693 See Also:
45694
45695 <toString>, <valueOf>
45696*/
45697BigInteger.prototype.toJSValue = function() {
45698 return parseInt(this.toString(), 10);
45699};
45700
45701var MAX_EXP = BigInteger(0x7FFFFFFF);
45702// Constant: MAX_EXP
45703// The largest exponent allowed in <pow> and <exp10> (0x7FFFFFFF or 2147483647).
45704BigInteger.MAX_EXP = MAX_EXP;
45705
45706(function() {
45707 function makeUnary(fn) {
45708 return function(a) {
45709 return fn.call(BigInteger(a));
45710 };
45711 }
45712
45713 function makeBinary(fn) {
45714 return function(a, b) {
45715 return fn.call(BigInteger(a), BigInteger(b));
45716 };
45717 }
45718
45719 function makeTrinary(fn) {
45720 return function(a, b, c) {
45721 return fn.call(BigInteger(a), BigInteger(b), BigInteger(c));
45722 };
45723 }
45724
45725 (function() {
45726 var i, fn;
45727 var unary = "toJSValue,isEven,isOdd,sign,isZero,isNegative,abs,isUnit,square,negate,isPositive,toString,next,prev,log".split(",");
45728 var binary = "compare,remainder,divRem,subtract,add,quotient,divide,multiply,pow,compareAbs".split(",");
45729 var trinary = ["modPow"];
45730
45731 for (i = 0; i < unary.length; i++) {
45732 fn = unary[i];
45733 BigInteger[fn] = makeUnary(BigInteger.prototype[fn]);
45734 }
45735
45736 for (i = 0; i < binary.length; i++) {
45737 fn = binary[i];
45738 BigInteger[fn] = makeBinary(BigInteger.prototype[fn]);
45739 }
45740
45741 for (i = 0; i < trinary.length; i++) {
45742 fn = trinary[i];
45743 BigInteger[fn] = makeTrinary(BigInteger.prototype[fn]);
45744 }
45745
45746 BigInteger.exp10 = function(x, n) {
45747 return BigInteger(x).exp10(n);
45748 };
45749 })();
45750})();
45751
45752exports.BigInteger = BigInteger;
45753})(typeof exports !== 'undefined' ? exports : this);
95f04905
IC
45754</script>
45755 <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.zxcvbn = 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){
45756var adjacency_graphs;adjacency_graphs={qwerty:{"!":["`~",null,null,"2@","qQ",null],'"':[";:","[{","]}",null,null,"/?"],"#":["2@",null,null,"4$","eE","wW"],$:["3#",null,null,"5%","rR","eE"],"%":["4$",null,null,"6^","tT","rR"],"&":["6^",null,null,"8*","uU","yY"],"'":[";:","[{","]}",null,null,"/?"],"(":["8*",null,null,"0)","oO","iI"],")":["9(",null,null,"-_","pP","oO"],"*":["7&",null,null,"9(","iI","uU"],"+":["-_",null,null,null,"]}","[{"],",":["mM","kK","lL",".>",null,null],"-":["0)",null,null,"=+","[{","pP"],".":[",<","lL",";:","/?",null,null],"/":[".>",";:","'\"",null,null,null],0:["9(",null,null,"-_","pP","oO"],1:["`~",null,null,"2@","qQ",null],2:["1!",null,null,"3#","wW","qQ"],3:["2@",null,null,"4$","eE","wW"],4:["3#",null,null,"5%","rR","eE"],5:["4$",null,null,"6^","tT","rR"],6:["5%",null,null,"7&","yY","tT"],7:["6^",null,null,"8*","uU","yY"],8:["7&",null,null,"9(","iI","uU"],9:["8*",null,null,"0)","oO","iI"],":":["lL","pP","[{","'\"","/?",".>"],";":["lL","pP","[{","'\"","/?",".>"],"<":["mM","kK","lL",".>",null,null],"=":["-_",null,null,null,"]}","[{"],">":[",<","lL",";:","/?",null,null],"?":[".>",";:","'\"",null,null,null],"@":["1!",null,null,"3#","wW","qQ"],A:[null,"qQ","wW","sS","zZ",null],B:["vV","gG","hH","nN",null,null],C:["xX","dD","fF","vV",null,null],D:["sS","eE","rR","fF","cC","xX"],E:["wW","3#","4$","rR","dD","sS"],F:["dD","rR","tT","gG","vV","cC"],G:["fF","tT","yY","hH","bB","vV"],H:["gG","yY","uU","jJ","nN","bB"],I:["uU","8*","9(","oO","kK","jJ"],J:["hH","uU","iI","kK","mM","nN"],K:["jJ","iI","oO","lL",",<","mM"],L:["kK","oO","pP",";:",".>",",<"],M:["nN","jJ","kK",",<",null,null],N:["bB","hH","jJ","mM",null,null],O:["iI","9(","0)","pP","lL","kK"],P:["oO","0)","-_","[{",";:","lL"],Q:[null,"1!","2@","wW","aA",null],R:["eE","4$","5%","tT","fF","dD"],S:["aA","wW","eE","dD","xX","zZ"],T:["rR","5%","6^","yY","gG","fF"],U:["yY","7&","8*","iI","jJ","hH"],V:["cC","fF","gG","bB",null,null],W:["qQ","2@","3#","eE","sS","aA"],X:["zZ","sS","dD","cC",null,null],Y:["tT","6^","7&","uU","hH","gG"],Z:[null,"aA","sS","xX",null,null],"[":["pP","-_","=+","]}","'\"",";:"],"\\":["]}",null,null,null,null,null],"]":["[{","=+",null,"\\|",null,"'\""],"^":["5%",null,null,"7&","yY","tT"],_:["0)",null,null,"=+","[{","pP"],"`":[null,null,null,"1!",null,null],a:[null,"qQ","wW","sS","zZ",null],b:["vV","gG","hH","nN",null,null],c:["xX","dD","fF","vV",null,null],d:["sS","eE","rR","fF","cC","xX"],e:["wW","3#","4$","rR","dD","sS"],f:["dD","rR","tT","gG","vV","cC"],g:["fF","tT","yY","hH","bB","vV"],h:["gG","yY","uU","jJ","nN","bB"],i:["uU","8*","9(","oO","kK","jJ"],j:["hH","uU","iI","kK","mM","nN"],k:["jJ","iI","oO","lL",",<","mM"],l:["kK","oO","pP",";:",".>",",<"],m:["nN","jJ","kK",",<",null,null],n:["bB","hH","jJ","mM",null,null],o:["iI","9(","0)","pP","lL","kK"],p:["oO","0)","-_","[{",";:","lL"],q:[null,"1!","2@","wW","aA",null],r:["eE","4$","5%","tT","fF","dD"],s:["aA","wW","eE","dD","xX","zZ"],t:["rR","5%","6^","yY","gG","fF"],u:["yY","7&","8*","iI","jJ","hH"],v:["cC","fF","gG","bB",null,null],w:["qQ","2@","3#","eE","sS","aA"],x:["zZ","sS","dD","cC",null,null],y:["tT","6^","7&","uU","hH","gG"],z:[null,"aA","sS","xX",null,null],"{":["pP","-_","=+","]}","'\"",";:"],"|":["]}",null,null,null,null,null],"}":["[{","=+",null,"\\|",null,"'\""],"~":[null,null,null,"1!",null,null]},dvorak:{"!":["`~",null,null,"2@","'\"",null],'"':[null,"1!","2@",",<","aA",null],"#":["2@",null,null,"4$",".>",",<"],$:["3#",null,null,"5%","pP",".>"],"%":["4$",null,null,"6^","yY","pP"],"&":["6^",null,null,"8*","gG","fF"],"'":[null,"1!","2@",",<","aA",null],"(":["8*",null,null,"0)","rR","cC"],")":["9(",null,null,"[{","lL","rR"],"*":["7&",null,null,"9(","cC","gG"],"+":["/?","]}",null,"\\|",null,"-_"],",":["'\"","2@","3#",".>","oO","aA"],"-":["sS","/?","=+",null,null,"zZ"],".":[",<","3#","4$","pP","eE","oO"],"/":["lL","[{","]}","=+","-_","sS"],0:["9(",null,null,"[{","lL","rR"],1:["`~",null,null,"2@","'\"",null],2:["1!",null,null,"3#",",<","'\""],3:["2@",null,null,"4$",".>",",<"],4:["3#",null,null,"5%","pP",".>"],5:["4$",null,null,"6^","yY","pP"],6:["5%",null,null,"7&","fF","yY"],7:["6^",null,null,"8*","gG","fF"],8:["7&",null,null,"9(","cC","gG"],9:["8*",null,null,"0)","rR","cC"],":":[null,"aA","oO","qQ",null,null],";":[null,"aA","oO","qQ",null,null],"<":["'\"","2@","3#",".>","oO","aA"],"=":["/?","]}",null,"\\|",null,"-_"],">":[",<","3#","4$","pP","eE","oO"],"?":["lL","[{","]}","=+","-_","sS"],"@":["1!",null,null,"3#",",<","'\""],A:[null,"'\"",",<","oO",";:",null],B:["xX","dD","hH","mM",null,null],C:["gG","8*","9(","rR","tT","hH"],D:["iI","fF","gG","hH","bB","xX"],E:["oO",".>","pP","uU","jJ","qQ"],F:["yY","6^","7&","gG","dD","iI"],G:["fF","7&","8*","cC","hH","dD"],H:["dD","gG","cC","tT","mM","bB"],I:["uU","yY","fF","dD","xX","kK"],J:["qQ","eE","uU","kK",null,null],K:["jJ","uU","iI","xX",null,null],L:["rR","0)","[{","/?","sS","nN"],M:["bB","hH","tT","wW",null,null],N:["tT","rR","lL","sS","vV","wW"],O:["aA",",<",".>","eE","qQ",";:"],P:[".>","4$","5%","yY","uU","eE"],Q:[";:","oO","eE","jJ",null,null],R:["cC","9(","0)","lL","nN","tT"],S:["nN","lL","/?","-_","zZ","vV"],T:["hH","cC","rR","nN","wW","mM"],U:["eE","pP","yY","iI","kK","jJ"],V:["wW","nN","sS","zZ",null,null],W:["mM","tT","nN","vV",null,null],X:["kK","iI","dD","bB",null,null],Y:["pP","5%","6^","fF","iI","uU"],Z:["vV","sS","-_",null,null,null],"[":["0)",null,null,"]}","/?","lL"],"\\":["=+",null,null,null,null,null],"]":["[{",null,null,null,"=+","/?"],"^":["5%",null,null,"7&","fF","yY"],_:["sS","/?","=+",null,null,"zZ"],"`":[null,null,null,"1!",null,null],a:[null,"'\"",",<","oO",";:",null],b:["xX","dD","hH","mM",null,null],c:["gG","8*","9(","rR","tT","hH"],d:["iI","fF","gG","hH","bB","xX"],e:["oO",".>","pP","uU","jJ","qQ"],f:["yY","6^","7&","gG","dD","iI"],g:["fF","7&","8*","cC","hH","dD"],h:["dD","gG","cC","tT","mM","bB"],i:["uU","yY","fF","dD","xX","kK"],j:["qQ","eE","uU","kK",null,null],k:["jJ","uU","iI","xX",null,null],l:["rR","0)","[{","/?","sS","nN"],m:["bB","hH","tT","wW",null,null],n:["tT","rR","lL","sS","vV","wW"],o:["aA",",<",".>","eE","qQ",";:"],p:[".>","4$","5%","yY","uU","eE"],q:[";:","oO","eE","jJ",null,null],r:["cC","9(","0)","lL","nN","tT"],s:["nN","lL","/?","-_","zZ","vV"],t:["hH","cC","rR","nN","wW","mM"],u:["eE","pP","yY","iI","kK","jJ"],v:["wW","nN","sS","zZ",null,null],w:["mM","tT","nN","vV",null,null],x:["kK","iI","dD","bB",null,null],y:["pP","5%","6^","fF","iI","uU"],z:["vV","sS","-_",null,null,null],"{":["0)",null,null,"]}","/?","lL"],"|":["=+",null,null,null,null,null],"}":["[{",null,null,null,"=+","/?"],"~":[null,null,null,"1!",null,null]},keypad:{"*":["/",null,null,null,"-","+","9","8"],"+":["9","*","-",null,null,null,null,"6"],"-":["*",null,null,null,null,null,"+","9"],".":["0","2","3",null,null,null,null,null],"/":[null,null,null,null,"*","9","8","7"],0:[null,"1","2","3",".",null,null,null],1:[null,null,"4","5","2","0",null,null],2:["1","4","5","6","3",".","0",null],3:["2","5","6",null,null,null,".","0"],4:[null,null,"7","8","5","2","1",null],5:["4","7","8","9","6","3","2","1"],6:["5","8","9","+",null,null,"3","2"],7:[null,null,null,"/","8","5","4",null],8:["7",null,"/","*","9","6","5","4"],9:["8","/","*","-","+",null,"6","5"]},mac_keypad:{"*":["/",null,null,null,null,null,"-","9"],"+":["6","9","-",null,null,null,null,"3"],"-":["9","/","*",null,null,null,"+","6"],".":["0","2","3",null,null,null,null,null],"/":["=",null,null,null,"*","-","9","8"],0:[null,"1","2","3",".",null,null,null],1:[null,null,"4","5","2","0",null,null],2:["1","4","5","6","3",".","0",null],3:["2","5","6","+",null,null,".","0"],4:[null,null,"7","8","5","2","1",null],5:["4","7","8","9","6","3","2","1"],6:["5","8","9","-","+",null,"3","2"],7:[null,null,null,"=","8","5","4",null],8:["7",null,"=","/","9","6","5","4"],9:["8","=","/","*","-","+","6","5"],"=":[null,null,null,null,"/","9","8","7"]}},module.exports=adjacency_graphs;
45757
45758},{}],2:[function(require,module,exports){
45759var feedback,scoring;scoring=require("./scoring"),feedback={default_feedback:{warning:"",suggestions:["Use a few words, avoid common phrases","No need for symbols, digits, or uppercase letters"]},get_feedback:function(e,s){var a,t,r,n,o,i;if(0===s.length)return this.default_feedback;if(e>2)return{warning:"",suggestions:[]};for(n=s[0],i=s.slice(1),t=0,r=i.length;t<r;t++)o=i[t],o.token.length>n.token.length&&(n=o);return feedback=this.get_match_feedback(n,1===s.length),a="Add another word or two. Uncommon words are better.",null!=feedback?(feedback.suggestions.unshift(a),null==feedback.warning&&(feedback.warning="")):feedback={warning:"",suggestions:[a]},feedback},get_match_feedback:function(e,s){var a,t;switch(e.pattern){case"dictionary":return this.get_dictionary_match_feedback(e,s);case"spatial":return a=e.graph.toUpperCase(),t=1===e.turns?"Straight rows of keys are easy to guess":"Short keyboard patterns are easy to guess",{warning:t,suggestions:["Use a longer keyboard pattern with more turns"]};case"repeat":return t=1===e.base_token.length?'Repeats like "aaa" are easy to guess':'Repeats like "abcabcabc" are only slightly harder to guess than "abc"',{warning:t,suggestions:["Avoid repeated words and characters"]};case"sequence":return{warning:"Sequences like abc or 6543 are easy to guess",suggestions:["Avoid sequences"]};case"regex":if("recent_year"===e.regex_name)return{warning:"Recent years are easy to guess",suggestions:["Avoid recent years","Avoid years that are associated with you"]};break;case"date":return{warning:"Dates are often easy to guess",suggestions:["Avoid dates and years that are associated with you"]}}},get_dictionary_match_feedback:function(e,s){var a,t,r,n,o;return n="passwords"===e.dictionary_name?!s||e.l33t||e.reversed?e.guesses_log10<=4?"This is similar to a commonly used password":void 0:e.rank<=10?"This is a top-10 common password":e.rank<=100?"This is a top-100 common password":"This is a very common password":"english"===e.dictionary_name?s?"A word by itself is easy to guess":void 0:"surnames"===(a=e.dictionary_name)||"male_names"===a||"female_names"===a?s?"Names and surnames by themselves are easy to guess":"Common names and surnames are easy to guess":"",r=[],o=e.token,o.match(scoring.START_UPPER)?r.push("Capitalization doesn't help very much"):o.match(scoring.ALL_UPPER)&&o.toLowerCase()!==o&&r.push("All-uppercase is almost as easy to guess as all-lowercase"),e.reversed&&e.token.length>=4&&r.push("Reversed words aren't much harder to guess"),e.l33t&&r.push("Predictable substitutions like '@' instead of 'a' don't help very much"),t={warning:n,suggestions:r}}},module.exports=feedback;
45760
45761},{"./scoring":6}],3:[function(require,module,exports){
45762var frequency_lists;frequency_lists={passwords:"123456,password,12345678,qwerty,123456789,12345,1234,111111,1234567,dragon,123123,baseball,abc123,football,monkey,letmein,shadow,master,696969,mustang,666666,qwertyuiop,123321,1234567890,pussy,superman,654321,1qaz2wsx,7777777,fuckyou,qazwsx,jordan,123qwe,000000,killer,trustno1,hunter,harley,zxcvbnm,asdfgh,buster,batman,soccer,tigger,charlie,sunshine,iloveyou,fuckme,ranger,hockey,computer,starwars,asshole,pepper,klaster,112233,zxcvbn,freedom,princess,maggie,pass,ginger,11111111,131313,fuck,love,cheese,159753,summer,chelsea,dallas,biteme,matrix,yankees,6969,corvette,austin,access,thunder,merlin,secret,diamond,hello,hammer,fucker,1234qwer,silver,gfhjkm,internet,samantha,golfer,scooter,test,orange,cookie,q1w2e3r4t5,maverick,sparky,phoenix,mickey,bigdog,snoopy,guitar,whatever,chicken,camaro,mercedes,peanut,ferrari,falcon,cowboy,welcome,sexy,samsung,steelers,smokey,dakota,arsenal,boomer,eagles,tigers,marina,nascar,booboo,gateway,yellow,porsche,monster,spider,diablo,hannah,bulldog,junior,london,purple,compaq,lakers,iceman,qwer1234,hardcore,cowboys,money,banana,ncc1701,boston,tennis,q1w2e3r4,coffee,scooby,123654,nikita,yamaha,mother,barney,brandy,chester,fuckoff,oliver,player,forever,rangers,midnight,chicago,bigdaddy,redsox,angel,badboy,fender,jasper,slayer,rabbit,natasha,marine,bigdick,wizard,marlboro,raiders,prince,casper,fishing,flower,jasmine,iwantu,panties,adidas,winter,winner,gandalf,password1,enter,ghbdtn,1q2w3e4r,golden,cocacola,jordan23,winston,madison,angels,panther,blowme,sexsex,bigtits,spanky,bitch,sophie,asdfasdf,horny,thx1138,toyota,tiger,dick,canada,12344321,blowjob,8675309,muffin,liverpoo,apples,qwerty123,passw0rd,abcd1234,pokemon,123abc,slipknot,qazxsw,123456a,scorpion,qwaszx,butter,startrek,rainbow,asdfghjkl,razz,newyork,redskins,gemini,cameron,qazwsxedc,florida,liverpool,turtle,sierra,viking,booger,butthead,doctor,rocket,159357,dolphins,captain,bandit,jaguar,packers,pookie,peaches,789456,asdf,dolphin,helpme,blue,theman,maxwell,qwertyui,shithead,lovers,maddog,giants,nirvana,metallic,hotdog,rosebud,mountain,warrior,stupid,elephant,suckit,success,bond007,jackass,alexis,porn,lucky,scorpio,samson,q1w2e3,azerty,rush2112,driver,freddy,1q2w3e4r5t,sydney,gators,dexter,red123,123456q,12345a,bubba,creative,voodoo,golf,trouble,america,nissan,gunner,garfield,bullshit,asdfghjk,5150,fucking,apollo,1qazxsw2,2112,eminem,legend,airborne,bear,beavis,apple,brooklyn,godzilla,skippy,4815162342,buddy,qwert,kitten,magic,shelby,beaver,phantom,asdasd,xavier,braves,darkness,blink182,copper,platinum,qweqwe,tomcat,01012011,girls,bigboy,102030,animal,police,online,11223344,voyager,lifehack,12qwaszx,fish,sniper,315475,trinity,blazer,heaven,lover,snowball,playboy,loveme,bubbles,hooters,cricket,willow,donkey,topgun,nintendo,saturn,destiny,pakistan,pumpkin,digital,sergey,redwings,explorer,tits,private,runner,therock,guinness,lasvegas,beatles,789456123,fire,cassie,christin,qwerty1,celtic,asdf1234,andrey,broncos,007007,babygirl,eclipse,fluffy,cartman,michigan,carolina,testing,alexande,birdie,pantera,cherry,vampire,mexico,dickhead,buffalo,genius,montana,beer,minecraft,maximus,flyers,lovely,stalker,metallica,doggie,snickers,speedy,bronco,lol123,paradise,yankee,horses,magnum,dreams,147258369,lacrosse,ou812,goober,enigma,qwertyu,scotty,pimpin,bollocks,surfer,cock,poohbear,genesis,star,asd123,qweasdzxc,racing,hello1,hawaii,eagle1,viper,poopoo,einstein,boobies,12345q,bitches,drowssap,simple,badger,alaska,action,jester,drummer,111222,spitfire,forest,maryjane,champion,diesel,svetlana,friday,hotrod,147258,chevy,lucky1,westside,security,google,badass,tester,shorty,thumper,hitman,mozart,zaq12wsx,boobs,reddog,010203,lizard,a123456,123456789a,ruslan,eagle,1232323q,scarface,qwerty12,147852,a12345,buddha,porno,420420,spirit,money1,stargate,qwe123,naruto,mercury,liberty,12345qwert,semperfi,suzuki,popcorn,spooky,marley,scotland,kitty,cherokee,vikings,simpsons,rascal,qweasd,hummer,loveyou,michael1,patches,russia,jupiter,penguin,passion,cumshot,vfhbyf,honda,vladimir,sandman,passport,raider,bastard,123789,infinity,assman,bulldogs,fantasy,sucker,1234554321,horney,domino,budlight,disney,ironman,usuckballz1,softball,brutus,redrum,bigred,mnbvcxz,fktrcfylh,karina,marines,digger,kawasaki,cougar,fireman,oksana,monday,cunt,justice,nigger,super,wildcats,tinker,logitech,dancer,swordfis,avalon,everton,alexandr,motorola,patriots,hentai,madonna,pussy1,ducati,colorado,connor,juventus,galore,smooth,freeuser,warcraft,boogie,titanic,wolverin,elizabet,arizona,valentin,saints,asdfg,accord,test123,password123,christ,yfnfif,stinky,slut,spiderma,naughty,chopper,hello123,ncc1701d,extreme,skyline,poop,zombie,pearljam,123qweasd,froggy,awesome,vision,pirate,fylhtq,dreamer,bullet,predator,empire,123123a,kirill,charlie1,panthers,penis,skipper,nemesis,rasdzv3,peekaboo,rolltide,cardinal,psycho,danger,mookie,happy1,wanker,chevelle,manutd,goblue,9379992,hobbes,vegeta,fyfcnfcbz,852456,picard,159951,windows,loverboy,victory,vfrcbv,bambam,serega,123654789,turkey,tweety,galina,hiphop,rooster,changeme,berlin,taurus,suckme,polina,electric,avatar,134679,maksim,raptor,alpha1,hendrix,newport,bigcock,brazil,spring,a1b2c3,madmax,alpha,britney,sublime,darkside,bigman,wolfpack,classic,hercules,ronaldo,letmein1,1q2w3e,741852963,spiderman,blizzard,123456789q,cheyenne,cjkysirj,tiger1,wombat,bubba1,pandora,zxc123,holiday,wildcat,devils,horse,alabama,147852369,caesar,12312,buddy1,bondage,pussycat,pickle,shaggy,catch22,leather,chronic,a1b2c3d4,admin,qqq111,qaz123,airplane,kodiak,freepass,billybob,sunset,katana,phpbb,chocolat,snowman,angel1,stingray,firebird,wolves,zeppelin,detroit,pontiac,gundam,panzer,vagina,outlaw,redhead,tarheels,greenday,nastya,01011980,hardon,engineer,dragon1,hellfire,serenity,cobra,fireball,lickme,darkstar,1029384756,01011,mustang1,flash,124578,strike,beauty,pavilion,01012000,bobafett,dbrnjhbz,bigmac,bowling,chris1,ytrewq,natali,pyramid,rulez,welcome1,dodgers,apache,swimming,whynot,teens,trooper,fuckit,defender,precious,135790,packard,weasel,popeye,lucifer,cancer,icecream,142536,raven,swordfish,presario,viktor,rockstar,blonde,james1,wutang,spike,pimp,atlanta,airforce,thailand,casino,lennon,mouse,741852,hacker,bluebird,hawkeye,456123,theone,catfish,sailor,goldfish,nfnmzyf,tattoo,pervert,barbie,maxima,nipples,machine,trucks,wrangler,rocks,tornado,lights,cadillac,bubble,pegasus,madman,longhorn,browns,target,666999,eatme,qazwsx123,microsoft,dilbert,christia,baller,lesbian,shooter,xfiles,seattle,qazqaz,cthutq,amateur,prelude,corona,freaky,malibu,123qweasdzxc,assassin,246810,atlantis,integra,pussies,iloveu,lonewolf,dragons,monkey1,unicorn,software,bobcat,stealth,peewee,openup,753951,srinivas,zaqwsx,valentina,shotgun,trigger,veronika,bruins,coyote,babydoll,joker,dollar,lestat,rocky1,hottie,random,butterfly,wordpass,smiley,sweety,snake,chipper,woody,samurai,devildog,gizmo,maddie,soso123aljg,mistress,freedom1,flipper,express,hjvfirf,moose,cessna,piglet,polaris,teacher,montreal,cookies,wolfgang,scully,fatboy,wicked,balls,tickle,bunny,dfvgbh,foobar,transam,pepsi,fetish,oicu812,basketba,toshiba,hotstuff,sunday,booty,gambit,31415926,impala,stephani,jessica1,hooker,lancer,knicks,shamrock,fuckyou2,stinger,314159,redneck,deftones,squirt,siemens,blaster,trucker,subaru,renegade,ibanez,manson,swinger,reaper,blondie,mylove,galaxy,blahblah,enterpri,travel,1234abcd,babylon5,indiana,skeeter,master1,sugar,ficken,smoke,bigone,sweetpea,fucked,trfnthbyf,marino,escort,smitty,bigfoot,babes,larisa,trumpet,spartan,valera,babylon,asdfghj,yankees1,bigboobs,stormy,mister,hamlet,aardvark,butterfl,marathon,paladin,cavalier,manchester,skater,indigo,hornet,buckeyes,01011990,indians,karate,hesoyam,toronto,diamonds,chiefs,buckeye,1qaz2wsx3edc,highland,hotsex,charger,redman,passwor,maiden,drpepper,storm,pornstar,garden,12345678910,pencil,sherlock,timber,thuglife,insane,pizza,jungle,jesus1,aragorn,1a2b3c,hamster,david1,triumph,techno,lollol,pioneer,catdog,321654,fktrctq,morpheus,141627,pascal,shadow1,hobbit,wetpussy,erotic,consumer,blabla,justme,stones,chrissy,spartak,goforit,burger,pitbull,adgjmptw,italia,barcelona,hunting,colors,kissme,virgin,overlord,pebbles,sundance,emerald,doggy,racecar,irina,element,1478963,zipper,alpine,basket,goddess,poison,nipple,sakura,chichi,huskers,13579,pussys,q12345,ultimate,ncc1701e,blackie,nicola,rommel,matthew1,caserta,omega,geronimo,sammy1,trojan,123qwe123,philips,nugget,tarzan,chicks,aleksandr,bassman,trixie,portugal,anakin,dodger,bomber,superfly,madness,q1w2e3r4t5y6,loser,123asd,fatcat,ybrbnf,soldier,warlock,wrinkle1,desire,sexual,babe,seminole,alejandr,951753,11235813,westham,andrei,concrete,access14,weed,letmein2,ladybug,naked,christop,trombone,tintin,bluesky,rhbcnbyf,qazxswedc,onelove,cdtnkfyf,whore,vfvjxrf,titans,stallion,truck,hansolo,blue22,smiles,beagle,panama,kingkong,flatron,inferno,mongoose,connect,poiuyt,snatch,qawsed,juice,blessed,rocker,snakes,turbo,bluemoon,sex4me,finger,jamaica,a1234567,mulder,beetle,fuckyou1,passat,immortal,plastic,123454321,anthony1,whiskey,dietcoke,suck,spunky,magic1,monitor,cactus,exigen,planet,ripper,teen,spyder,apple1,nolimit,hollywoo,sluts,sticky,trunks,1234321,14789632,pickles,sailing,bonehead,ghbdtnbr,delta,charlott,rubber,911911,112358,molly1,yomama,hongkong,jumper,william1,ilovesex,faster,unreal,cumming,memphis,1123581321,nylons,legion,sebastia,shalom,pentium,geheim,werewolf,funtime,ferret,orion,curious,555666,niners,cantona,sprite,philly,pirates,abgrtyu,lollipop,eternity,boeing,super123,sweets,cooldude,tottenha,green1,jackoff,stocking,7895123,moomoo,martini,biscuit,drizzt,colt45,fossil,makaveli,snapper,satan666,maniac,salmon,patriot,verbatim,nasty,shasta,asdzxc,shaved,blackcat,raistlin,qwerty12345,punkrock,cjkywt,01012010,4128,waterloo,crimson,twister,oxford,musicman,seinfeld,biggie,condor,ravens,megadeth,wolfman,cosmos,sharks,banshee,keeper,foxtrot,gn56gn56,skywalke,velvet,black1,sesame,dogs,squirrel,privet,sunrise,wolverine,sucks,legolas,grendel,ghost,cats,carrot,frosty,lvbnhbq,blades,stardust,frog,qazwsxed,121314,coolio,brownie,groovy,twilight,daytona,vanhalen,pikachu,peanuts,licker,hershey,jericho,intrepid,ninja,1234567a,zaq123,lobster,goblin,punisher,strider,shogun,kansas,amadeus,seven7,jason1,neptune,showtime,muscle,oldman,ekaterina,rfrfirf,getsome,showme,111222333,obiwan,skittles,danni,tanker,maestro,tarheel,anubis,hannibal,anal,newlife,gothic,shark,fighter,blue123,blues,123456z,princes,slick,chaos,thunder1,sabine,1q2w3e4r5t6y,python,test1,mirage,devil,clover,tequila,chelsea1,surfing,delete,potato,chubby,panasonic,sandiego,portland,baggins,fusion,sooners,blackdog,buttons,californ,moscow,playtime,mature,1a2b3c4d,dagger,dima,stimpy,asdf123,gangster,warriors,iverson,chargers,byteme,swallow,liquid,lucky7,dingdong,nymets,cracker,mushroom,456852,crusader,bigguy,miami,dkflbvbh,bugger,nimrod,tazman,stranger,newpass,doodle,powder,gotcha,guardian,dublin,slapshot,septembe,147896325,pepsi1,milano,grizzly,woody1,knights,photos,2468,nookie,charly,rammstein,brasil,123321123,scruffy,munchkin,poopie,123098,kittycat,latino,walnut,1701,thegame,viper1,1passwor,kolobok,picasso,robert1,barcelon,bananas,trance,auburn,coltrane,eatshit,goodluck,starcraft,wheels,parrot,postal,blade,wisdom,pink,gorilla,katerina,pass123,andrew1,shaney14,dumbass,osiris,fuck_inside,oakland,discover,ranger1,spanking,lonestar,bingo,meridian,ping,heather1,dookie,stonecol,megaman,192837465,rjntyjr,ledzep,lowrider,25802580,richard1,firefly,griffey,racerx,paradox,ghjcnj,gangsta,zaq1xsw2,tacobell,weezer,sirius,halflife,buffett,shiloh,123698745,vertigo,sergei,aliens,sobaka,keyboard,kangaroo,sinner,soccer1,0.0.000,bonjour,socrates,chucky,hotboy,sprint,0007,sarah1,scarlet,celica,shazam,formula1,sommer,trebor,qwerasdf,jeep,mailcreated5240,bollox,asshole1,fuckface,honda1,rebels,vacation,lexmark,penguins,12369874,ragnarok,formula,258456,tempest,vfhecz,tacoma,qwertz,colombia,flames,rockon,duck,prodigy,wookie,dodgeram,mustangs,123qaz,sithlord,smoker,server,bang,incubus,scoobydo,oblivion,molson,kitkat,titleist,rescue,zxcv1234,carpet,1122,bigballs,tardis,jimbob,xanadu,blueeyes,shaman,mersedes,pooper,pussy69,golfing,hearts,mallard,12312312,kenwood,patrick1,dogg,cowboys1,oracle,123zxc,nuttertools,102938,topper,1122334455,shemale,sleepy,gremlin,yourmom,123987,gateway1,printer,monkeys,peterpan,mikey,kingston,cooler,analsex,jimbo,pa55word,asterix,freckles,birdman,frank1,defiant,aussie,stud,blondes,tatyana,445566,aspirine,mariners,jackal,deadhead,katrin,anime,rootbeer,frogger,polo,scooter1,hallo,noodles,thomas1,parola,shaolin,celine,11112222,plymouth,creampie,justdoit,ohyeah,fatass,assfuck,amazon,1234567q,kisses,magnus,camel,nopass,bosco,987456,6751520,harley1,putter,champs,massive,spidey,lightnin,camelot,letsgo,gizmodo,aezakmi,bones,caliente,12121,goodtime,thankyou,raiders1,brucelee,redalert,aquarius,456654,catherin,smokin,pooh,mypass,astros,roller,porkchop,sapphire,qwert123,kevin1,a1s2d3f4,beckham,atomic,rusty1,vanilla,qazwsxedcrfv,hunter1,kaktus,cxfcnmt,blacky,753159,elvis1,aggies,blackjac,bangkok,scream,123321q,iforgot,power1,kasper,abc12,buster1,slappy,shitty,veritas,chevrole,amber1,01012001,vader,amsterdam,jammer,primus,spectrum,eduard,granny,horny1,sasha1,clancy,usa123,satan,diamond1,hitler,avenger,1221,spankme,123456qwerty,simba,smudge,scrappy,labrador,john316,syracuse,front242,falcons,husker,candyman,commando,gator,pacman,delta1,pancho,krishna,fatman,clitoris,pineappl,lesbians,8j4ye3uz,barkley,vulcan,punkin,boner,celtics,monopoly,flyboy,romashka,hamburg,123456aa,lick,gangbang,223344,area51,spartans,aaa111,tricky,snuggles,drago,homerun,vectra,homer1,hermes,topcat,cuddles,infiniti,1234567890q,cosworth,goose,phoenix1,killer1,ivanov,bossman,qawsedrf,peugeot,exigent,doberman,durango,brandon1,plumber,telefon,horndog,laguna,rbhbkk,dawg,webmaster,breeze,beast,porsche9,beefcake,leopard,redbull,oscar1,topdog,godsmack,theking,pics,omega1,speaker,viktoria,fuckers,bowler,starbuck,gjkbyf,valhalla,anarchy,blacks,herbie,kingpin,starfish,nokia,loveit,achilles,906090,labtec,ncc1701a,fitness,jordan1,brando,arsenal1,bull,kicker,napass,desert,sailboat,bohica,tractor,hidden,muppet,jackson1,jimmy1,terminator,phillies,pa55w0rd,terror,farside,swingers,legacy,frontier,butthole,doughboy,jrcfyf,tuesday,sabbath,daniel1,nebraska,homers,qwertyuio,azamat,fallen,agent007,striker,camels,iguana,looker,pinkfloy,moloko,qwerty123456,dannyboy,luckydog,789654,pistol,whocares,charmed,skiing,select,franky,puppy,daniil,vladik,vette,vfrcbvrf,ihateyou,nevada,moneys,vkontakte,mandingo,puppies,666777,mystic,zidane,kotenok,dilligaf,budman,bunghole,zvezda,123457,triton,golfball,technics,trojans,panda,laptop,rookie,01011991,15426378,aberdeen,gustav,jethro,enterprise,igor,stripper,filter,hurrican,rfnthbyf,lespaul,gizmo1,butch,132435,dthjybrf,1366613,excalibu,963852,nofear,momoney,possum,cutter,oilers,moocow,cupcake,gbpltw,batman1,splash,svetik,super1,soleil,bogdan,melissa1,vipers,babyboy,tdutybq,lancelot,ccbill,keystone,passwort,flamingo,firefox,dogman,vortex,rebel,noodle,raven1,zaphod,killme,pokemon1,coolman,danila,designer,skinny,kamikaze,deadman,gopher,doobie,warhammer,deeznuts,freaks,engage,chevy1,steve1,apollo13,poncho,hammers,azsxdc,dracula,000007,sassy,bitch1,boots,deskjet,12332,macdaddy,mighty,rangers1,manchest,sterlin,casey1,meatball,mailman,sinatra,cthulhu,summer1,bubbas,cartoon,bicycle,eatpussy,truelove,sentinel,tolkien,breast,capone,lickit,summit,123456k,peter1,daisy1,kitty1,123456789z,crazy1,jamesbon,texas1,sexygirl,362436,sonic,billyboy,redhot,microsof,microlab,daddy1,rockets,iloveyo,fernand,gordon24,danie,cutlass,polska,star69,titties,pantyhos,01011985,thekid,aikido,gofish,mayday,1234qwe,coke,anfield,sony,lansing,smut,scotch,sexx,catman,73501505,hustler,saun,dfkthbz,passwor1,jenny1,azsxdcfv,cheers,irish1,gabrie,tinman,orioles,1225,charlton,fortuna,01011970,airbus,rustam,xtreme,bigmoney,zxcasd,retard,grumpy,huskies,boxing,4runner,kelly1,ultima,warlord,fordf150,oranges,rotten,asdfjkl,superstar,denali,sultan,bikini,saratoga,thor,figaro,sixers,wildfire,vladislav,128500,sparta,mayhem,greenbay,chewie,music1,number1,cancun,fabie,mellon,poiuytrewq,cloud9,crunch,bigtime,chicken1,piccolo,bigbird,321654987,billy1,mojo,01011981,maradona,sandro,chester1,bizkit,rjirfrgbde,789123,rightnow,jasmine1,hyperion,treasure,meatloaf,armani,rovers,jarhead,01011986,cruise,coconut,dragoon,utopia,davids,cosmo,rfhbyf,reebok,1066,charli,giorgi,sticks,sayang,pass1234,exodus,anaconda,zaqxsw,illini,woofwoof,emily1,sandy1,packer,poontang,govols,jedi,tomato,beaner,cooter,creamy,lionking,happy123,albatros,poodle,kenworth,dinosaur,greens,goku,happyday,eeyore,tsunami,cabbage,holyshit,turkey50,memorex,chaser,bogart,orgasm,tommy1,volley,whisper,knopka,ericsson,walleye,321123,pepper1,katie1,chickens,tyler1,corrado,twisted,100000,zorro,clemson,zxcasdqwe,tootsie,milana,zenith,fktrcfylhf,shania,frisco,polniypizdec0211,crazybab,junebug,fugazi,rereirf,vfvekz,1001,sausage,vfczyz,koshka,clapton,justin1,anhyeuem,condom,fubar,hardrock,skywalker,tundra,cocks,gringo,150781,canon,vitalik,aspire,stocks,samsung1,applepie,abc12345,arjay,gandalf1,boob,pillow,sparkle,gmoney,rockhard,lucky13,samiam,everest,hellyeah,bigsexy,skorpion,rfrnec,hedgehog,australi,candle,slacker,dicks,voyeur,jazzman,america1,bobby1,br0d3r,wolfie,vfksirf,1qa2ws3ed,13243546,fright,yosemite,temp,karolina,fart,barsik,surf,cheetah,baddog,deniska,starship,bootie,milena,hithere,kume,greatone,dildo,50cent,0.0.0.000,albion,amanda1,midget,lion,maxell,football1,cyclone,freeporn,nikola,bonsai,kenshin,slider,balloon,roadkill,killbill,222333,jerkoff,78945612,dinamo,tekken,rambler,goliath,cinnamon,malaka,backdoor,fiesta,packers1,rastaman,fletch,sojdlg123aljg,stefano,artemis,calico,nyjets,damnit,robotech,duchess,rctybz,hooter,keywest,18436572,hal9000,mechanic,pingpong,operator,presto,sword,rasputin,spank,bristol,faggot,shado,963852741,amsterda,321456,wibble,carrera,alibaba,majestic,ramses,duster,route66,trident,clipper,steeler,wrestlin,divine,kipper,gotohell,kingfish,snake1,passwords,buttman,pompey,viagra,zxcvbnm1,spurs,332211,slutty,lineage2,oleg,macross,pooter,brian1,qwert1,charles1,slave,jokers,yzerman,swimmer,ne1469,nwo4life,solnce,seamus,lolipop,pupsik,moose1,ivanova,secret1,matador,love69,420247,ktyjxrf,subway,cinder,vermont,pussie,chico,florian,magick,guiness,allsop,ghetto,flash1,a123456789,typhoon,dfkthf,depeche,skydive,dammit,seeker,fuckthis,crysis,kcj9wx5n,umbrella,r2d2c3po,123123q,snoopdog,critter,theboss,ding,162534,splinter,kinky,cyclops,jayhawk,456321,caramel,qwer123,underdog,caveman,onlyme,grapes,feather,hotshot,fuckher,renault,george1,sex123,pippen,000001,789987,floppy,cunts,megapass,1000,pornos,usmc,kickass,great1,quattro,135246,wassup,helloo,p0015123,nicole1,chivas,shannon1,bullseye,java,fishes,blackhaw,jamesbond,tunafish,juggalo,dkflbckfd,123789456,dallas1,translator,122333,beanie,alucard,gfhjkm123,supersta,magicman,ashley1,cohiba,xbox360,caligula,12131415,facial,7753191,dfktynbyf,cobra1,cigars,fang,klingon,bob123,safari,looser,10203,deepthroat,malina,200000,tazmania,gonzo,goalie,jacob1,monaco,cruiser,misfit,vh5150,tommyboy,marino13,yousuck,sharky,vfhufhbnf,horizon,absolut,brighton,123456r,death1,kungfu,maxx,forfun,mamapapa,enter1,budweise,banker,getmoney,kostya,qazwsx12,bigbear,vector,fallout,nudist,gunners,royals,chainsaw,scania,trader,blueboy,walrus,eastside,kahuna,qwerty1234,love123,steph,01011989,cypress,champ,undertaker,ybrjkfq,europa,snowboar,sabres,moneyman,chrisbln,minime,nipper,groucho,whitey,viewsonic,penthous,wolf359,fabric,flounder,coolguy,whitesox,passme,smegma,skidoo,thanatos,fucku2,snapple,dalejr,mondeo,thesims,mybaby,panasoni,sinbad,thecat,topher,frodo,sneakers,q123456,z1x2c3,alfa,chicago1,taylor1,ghjcnjnfr,cat123,olivier,cyber,titanium,0420,madison1,jabroni,dang,hambone,intruder,holly1,gargoyle,sadie1,static,poseidon,studly,newcastl,sexxxx,poppy,johannes,danzig,beastie,musica,buckshot,sunnyday,adonis,bluedog,bonkers,2128506,chrono,compute,spawn,01011988,turbo1,smelly,wapbbs,goldstar,ferrari1,778899,quantum,pisces,boomboom,gunnar,1024,test1234,florida1,nike,superman1,multiplelo,custom,motherlode,1qwerty,westwood,usnavy,apple123,daewoo,korn,stereo,sasuke,sunflowe,watcher,dharma,555777,mouse1,assholes,babyblue,123qwerty,marius,walmart,snoop,starfire,tigger1,paintbal,knickers,aaliyah,lokomotiv,theend,winston1,sapper,rover,erotica,scanner,racer,zeus,sexy69,doogie,bayern,joshua1,newbie,scott1,losers,droopy,outkast,martin1,dodge1,wasser,ufkbyf,rjycnfynby,thirteen,12345z,112211,hotred,deejay,hotpussy,192837,jessic,philippe,scout,panther1,cubbies,havefun,magpie,fghtkm,avalanch,newyork1,pudding,leonid,harry1,cbr600,audia4,bimmer,fucku,01011984,idontknow,vfvfgfgf,1357,aleksey,builder,01011987,zerocool,godfather,mylife,donuts,allmine,redfish,777888,sascha,nitram,bounce,333666,smokes,1x2zkg8w,rodman,stunner,zxasqw12,hoosier,hairy,beretta,insert,123456s,rtyuehe,francesc,tights,cheese1,micron,quartz,hockey1,gegcbr,searay,jewels,bogey,paintball,celeron,padres,bing,syncmaster,ziggy,simon1,beaches,prissy,diehard,orange1,mittens,aleksandra,queens,02071986,biggles,thongs,southpark,artur,twinkle,gretzky,rabota,cambiami,monalisa,gollum,chuckles,spike1,gladiator,whisky,spongebob,sexy1,03082006,mazafaka,meathead,4121,ou8122,barefoot,12345678q,cfitymrf,bigass,a1s2d3,kosmos,blessing,titty,clevelan,terrapin,ginger1,johnboy,maggot,clarinet,deeznutz,336699,stumpy,stoney,footbal,traveler,volvo,bucket,snapon,pianoman,hawkeyes,futbol,casanova,tango,goodboy,scuba,honey1,sexyman,warthog,mustard,abc1234,nickel,10203040,meowmeow,1012,boricua,prophet,sauron,12qwas,reefer,andromeda,crystal1,joker1,90210,goofy,loco,lovesex,triangle,whatsup,mellow,bengals,monster1,maste,01011910,lover1,love1,123aaa,sunshin,smeghead,hokies,sting,welder,rambo,cerberus,bunny1,rockford,monke,1q2w3e4r5,goldwing,gabriell,buzzard,crjhgbjy,james007,rainman,groove,tiberius,purdue,nokia6300,hayabusa,shou,jagger,diver,zigzag,poochie,usarmy,phish,redwood,redwing,12345679,salamander,silver1,abcd123,sputnik,boobie,ripple,eternal,12qw34er,thegreat,allstar,slinky,gesperrt,mishka,whiskers,pinhead,overkill,sweet1,rhfcjnrf,montgom240,sersolution,jamie1,starman,proxy,swords,nikolay,bacardi,rasta,badgirl,rebecca1,wildman,penny1,spaceman,1007,10101,logan1,hacked,bulldog1,helmet,windsor,buffy1,runescape,trapper,123451,banane,dbrnjh,ripken,12345qwe,frisky,shun,fester,oasis,lightning,ib6ub9,cicero,kool,pony,thedog,784512,01011992,megatron,illusion,edward1,napster,11223,squash,roadking,woohoo,19411945,hoosiers,01091989,tracker,bagira,midway,leavemealone,br549,14725836,235689,menace,rachel1,feng,laser,stoned,realmadrid,787898,balloons,tinkerbell,5551212,maria1,pobeda,heineken,sonics,moonlight,optimus,comet,orchid,02071982,jaybird,kashmir,12345678a,chuang,chunky,peach,mortgage,rulezzz,saleen,chuckie,zippy,fishing1,gsxr750,doghouse,maxim,reader,shai,buddah,benfica,chou,salomon,meister,eraser,blackbir,bigmike,starter,pissing,angus,deluxe,eagles1,hardcock,135792468,mian,seahawks,godfathe,bookworm,gregor,intel,talisman,blackjack,babyface,hawaiian,dogfood,zhong,01011975,sancho,ludmila,medusa,mortimer,123456654321,roadrunn,just4me,stalin,01011993,handyman,alphabet,pizzas,calgary,clouds,password2,cgfhnfr,f**k,cubswin,gong,lexus,max123,xxx123,digital1,gfhjkm1,7779311,missy1,michae,beautifu,gator1,1005,pacers,buddie,chinook,heckfy,dutchess,sally1,breasts,beowulf,darkman,jenn,tiffany1,zhei,quan,qazwsx1,satana,shang,idontkno,smiths,puddin,nasty1,teddybea,valkyrie,passwd,chao,boxster,killers,yoda,cheater,inuyasha,beast1,wareagle,foryou,dragonball,mermaid,bhbirf,teddy1,dolphin1,misty1,delphi,gromit,sponge,qazzaq,fytxrf,gameover,diao,sergi,beamer,beemer,kittykat,rancid,manowar,adam12,diggler,assword,austin1,wishbone,gonavy,sparky1,fisting,thedude,sinister,1213,venera,novell,salsero,jayden,fuckoff1,linda1,vedder,02021987,1pussy,redline,lust,jktymrf,02011985,dfcbkbq,dragon12,chrome,gamecube,titten,cong,bella1,leng,02081988,eureka,bitchass,147369,banner,lakota,123321a,mustafa,preacher,hotbox,02041986,z1x2c3v4,playstation,01011977,claymore,electra,checkers,zheng,qing,armagedon,02051986,wrestle,svoboda,bulls,nimbus,alenka,madina,newpass6,onetime,aa123456,bartman,02091987,silverad,electron,12345t,devil666,oliver1,skylar,rhtdtlrj,gobucks,johann,12011987,milkman,02101985,camper,thunderb,bigbutt,jammin,davide,cheeks,goaway,lighter,claudi,thumbs,pissoff,ghostrider,cocaine,teng,squall,lotus,hootie,blackout,doitnow,subzero,02031986,marine1,02021988,pothead,123456qw,skate,1369,peng,antoni,neng,miao,bcfields,1492,marika,794613,musashi,tulips,nong,piao,chai,ruan,southpar,02061985,nude,mandarin,654123,ninjas,cannabis,jetski,xerxes,zhuang,kleopatra,dickie,bilbo,pinky,morgan1,1020,1017,dieter,baseball1,tottenham,quest,yfnfkmz,dirtbike,1234567890a,mango,jackson5,ipswich,iamgod,02011987,tdutybz,modena,qiao,slippery,qweasd123,bluefish,samtron,toon,111333,iscool,02091986,petrov,fuzzy,zhou,1357924680,mollydog,deng,02021986,1236987,pheonix,zhun,ghblehjr,othello,starcraf,000111,sanfran,a11111,cameltoe,badman,vasilisa,jiang,1qaz2ws,luan,sveta,12qw12,akira,chuai,369963,cheech,beatle,pickup,paloma,01011983,caravan,elizaveta,gawker,banzai,pussey,mullet,seng,bingo1,bearcat,flexible,farscape,borussia,zhuai,templar,guitar1,toolman,yfcntymrf,chloe1,xiang,slave1,guai,nuggets,02081984,mantis,slim,scorpio1,fyutkbyf,thedoors,02081987,02061986,123qq123,zappa,fergie,7ugd5hip2j,huai,asdfzxcv,sunflower,pussyman,deadpool,bigtit,01011982,love12,lassie,skyler,gatorade,carpedie,jockey,mancity,spectre,02021984,cameron1,artemka,reng,02031984,iomega,jing,moritz,spice,rhino,spinner,heater,zhai,hover,talon,grease,qiong,corleone,ltybcrf,tian,cowboy1,hippie,chimera,ting,alex123,02021985,mickey1,corsair,sonoma,aaron1,xxxpass,bacchus,webmaste,chuo,xyz123,chrysler,spurs1,artem,shei,cosmic,01020304,deutsch,gabriel1,123455,oceans,987456321,binladen,latinas,a12345678,speedo,buttercu,02081989,21031988,merlot,millwall,ceng,kotaku,jiong,dragonba,2580,stonecold,snuffy,01011999,02011986,hellos,blaze,maggie1,slapper,istanbul,bonjovi,babylove,mazda,bullfrog,phoeni,meng,porsche1,nomore,02061989,bobdylan,capslock,orion1,zaraza,teddybear,ntktajy,myname,rong,wraith,mets,niao,02041984,smokie,chevrolet,dialog,gfhjkmgfhjkm,dotcom,vadim,monarch,athlon,mikey1,hamish,pian,liang,coolness,chui,thoma,ramones,ciccio,chippy,eddie1,house1,ning,marker,cougars,jackpot,barbados,reds,pdtplf,knockers,cobalt,amateurs,dipshit,napoli,kilroy,pulsar,jayhawks,daemon,alexey,weng,shuang,9293709b13,shiner,eldorado,soulmate,mclaren,golfer1,andromed,duan,50spanks,sexyboy,dogshit,02021983,shuo,kakashka,syzygy,111111a,yeahbaby,qiang,netscape,fulham,120676,gooner,zhui,rainbow6,laurent,dog123,halifax,freeway,carlitos,147963,eastwood,microphone,monkey12,1123,persik,coldbeer,geng,nuan,danny1,fgtkmcby,entropy,gadget,just4fun,sophi,baggio,carlito,1234567891,02021989,02041983,specialk,piramida,suan,bigblue,salasana,hopeful,mephisto,bailey1,hack,annie1,generic,violetta,spencer1,arcadia,02051983,hondas,9562876,trainer,jones1,smashing,liao,159632,iceberg,rebel1,snooker,temp123,zang,matteo,fastball,q2w3e4r5,bamboo,fuckyo,shutup,astro,buddyboy,nikitos,redbird,maxxxx,shitface,02031987,kuai,kissmyass,sahara,radiohea,1234asdf,wildcard,maxwell1,patric,plasma,heynow,bruno1,shao,bigfish,misfits,sassy1,sheng,02011988,02081986,testpass,nanook,cygnus,licking,slavik,pringles,xing,1022,ninja1,submit,dundee,tiburon,pinkfloyd,yummy,shuai,guang,chopin,obelix,insomnia,stroker,1a2s3d4f,1223,playboy1,lazarus,jorda,spider1,homerj,sleeper,02041982,darklord,cang,02041988,02041987,tripod,magician,jelly,telephon,15975,vsjasnel12,pasword,iverson3,pavlov,homeboy,gamecock,amigo,brodie,budapest,yjdsqgfhjkm,reckless,02011980,pang,tiger123,2469,mason1,orient,01011979,zong,cdtnbr,maksimka,1011,bushido,taxman,giorgio,sphinx,kazantip,02101984,concorde,verizon,lovebug,georg,sam123,seadoo,qazwsxedc123,jiao,jezebel,pharmacy,abnormal,jellybea,maxime,puffy,islander,bunnies,jiggaman,drakon,010180,pluto,zhjckfd,12365,classics,crusher,mordor,hooligan,strawberry,02081985,scrabble,hawaii50,1224,wg8e3wjf,cthtuf,premium,arrow,123456qwe,mazda626,ramrod,tootie,rhjrjlbk,ghost1,1211,bounty,niang,02071984,goat,killer12,sweetnes,porno1,masamune,426hemi,corolla,mariposa,hjccbz,doomsday,bummer,blue12,zhao,bird33,excalibur,samsun,kirsty,buttfuck,kfhbcf,zhuo,marcello,ozzy,02021982,dynamite,655321,master12,123465,lollypop,stepan,1qa2ws,spiker,goirish,callum,michael2,moonbeam,attila,henry1,lindros,andrea1,sporty,lantern,12365478,nextel,violin,volcom,998877,water1,imation,inspiron,dynamo,citadel,placebo,clowns,tiao,02061988,tripper,dabears,haggis,merlin1,02031985,anthrax,amerika,iloveme,vsegda,burrito,bombers,snowboard,forsaken,katarina,a1a2a3,woofer,tigger2,fullmoon,tiger2,spock,hannah1,snoopy1,sexxxy,sausages,stanislav,cobain,robotics,exotic,green123,mobydick,senators,pumpkins,fergus,asddsa,147741,258852,windsurf,reddevil,vfitymrf,nevermind,nang,woodland,4417,mick,shui,q1q2q3,wingman,69696,superb,zuan,ganesh,pecker,zephyr,anastasiya,icu812,larry1,02081982,broker,zalupa,mihail,vfibyf,dogger,7007,paddle,varvara,schalke,1z2x3c,presiden,yankees2,tuning,poopy,02051982,concord,vanguard,stiffy,rjhjktdf,felix1,wrench,firewall,boxer,bubba69,popper,02011984,temppass,gobears,cuan,tipper,fuckme1,kamila,thong,puss,bigcat,drummer1,02031982,sowhat,digimon,tigers1,rang,jingle,bian,uranus,soprano,mandy1,dusty1,fandango,aloha,pumpkin1,postman,02061980,dogcat,bombay,pussy123,onetwo,highheel,pippo,julie1,laura1,pepito,beng,smokey1,stylus,stratus,reload,duckie,karen1,jimbo1,225588,369258,krusty,snappy,asdf12,electro,111qqq,kuang,fishin,clit,abstr,christma,qqqqq1,1234560,carnage,guyver,boxers,kittens,zeng,1000000,qwerty11,toaster,cramps,yugioh,02061987,icehouse,zxcvbnm123,pineapple,namaste,harrypotter,mygirl,falcon1,earnhard,fender1,spikes,nutmeg,01081989,dogboy,02091983,369852,softail,mypassword,prowler,bigboss,1112,harvest,heng,jubilee,killjoy,basset,keng,zaqxswcde,redsox1,biao,titan,misfit99,robot,wifey,kidrock,02101987,gameboy,enrico,1z2x3c4v,broncos1,arrows,havana,banger,cookie1,chriss,123qw,platypus,cindy1,lumber,pinball,foxy,london1,1023,05051987,02041985,password12,superma,longbow,radiohead,nigga,12051988,spongebo,qwert12345,abrakadabra,dodgers1,02101989,chillin,niceguy,pistons,hookup,santafe,bigben,jets,1013,vikings1,mankind,viktoriya,beardog,hammer1,02071980,reddwarf,magelan,longjohn,jennife,gilles,carmex2,02071987,stasik,bumper,doofus,slamdunk,pixies,garion,steffi,alessandro,beerman,niceass,warrior1,honolulu,134679852,visa,johndeer,mother1,windmill,boozer,oatmeal,aptiva,busty,delight,tasty,slick1,bergkamp,badgers,guitars,puffin,02091981,nikki1,irishman,miller1,zildjian,123000,airwolf,magnet,anai,install,02041981,02061983,astra,romans,megan1,mudvayne,freebird,muscles,dogbert,02091980,02091984,snowflak,01011900,mang,joseph1,nygiants,playstat,junior1,vjcrdf,qwer12,webhompas,giraffe,pelican,jefferso,comanche,bruiser,monkeybo,kjkszpj,123456l,micro,albany,02051987,angel123,epsilon,aladin,death666,hounddog,josephin,altima,chilly,02071988,78945,ultra,02041979,gasman,thisisit,pavel,idunno,kimmie,05051985,paulie,ballin,medion,moondog,manolo,pallmall,climber,fishbone,genesis1,153624,toffee,tbone,clippers,krypton,jerry1,picturs,compass,111111q,02051988,1121,02081977,sairam,getout,333777,cobras,22041987,bigblock,severin,booster,norwich,whiteout,ctrhtn,123456m,02061984,hewlett,shocker,fuckinside,02031981,chase1,white1,versace,123456789s,basebal,iloveyou2,bluebell,08031986,anthon,stubby,foreve,undertak,werder,saiyan,mama123,medic,chipmunk,mike123,mazdarx7,qwe123qwe,bowwow,kjrjvjnbd,celeb,choochoo,demo,lovelife,02051984,colnago,lithium,02051989,15051981,zzzxxx,welcom,anastasi,fidelio,franc,26061987,roadster,stone55,drifter,hookem,hellboy,1234qw,cbr900rr,sinned,good123654,storm1,gypsy,zebra,zachary1,toejam,buceta,02021979,testing1,redfox,lineage,mike1,highbury,koroleva,nathan1,washingt,02061982,02091985,vintage,redbaron,dalshe,mykids,11051987,macbeth,julien,james123,krasotka,111000,10011986,987123,pipeline,tatarin,sensei,codered,komodo,frogman,7894561230,nascar24,juicy,01031988,redrose,mydick,pigeon,tkbpfdtnf,smirnoff,1215,spam,winner1,flyfish,moskva,81fukkc,21031987,olesya,starligh,summer99,13041988,fishhead,freesex,super12,06061986,azazel,scoobydoo,02021981,cabron,yogibear,sheba1,konstantin,tranny,chilli,terminat,ghbywtccf,slowhand,soccer12,cricket1,fuckhead,1002,seagull,achtung,blam,bigbob,bdsm,nostromo,survivor,cnfybckfd,lemonade,boomer1,rainbow1,rober,irinka,cocksuck,peaches1,itsme,sugar1,zodiac,upyours,dinara,135791,sunny1,chiara,johnson1,02041989,solitude,habibi,sushi,markiz,smoke1,rockies,catwoman,johnny1,qwerty7,bearcats,username,01011978,wanderer,ohshit,02101986,sigma,stephen1,paradigm,02011989,flanker,sanity,jsbach,spotty,bologna,fantasia,chevys,borabora,cocker,74108520,123ewq,12021988,01061990,gtnhjdbx,02071981,01011960,sundevil,3000gt,mustang6,gagging,maggi,armstron,yfnfkb,13041987,revolver,02021976,trouble1,madcat,jeremy1,jackass1,volkswag,30051985,corndog,pool6123,marines1,03041991,pizza1,piggy,sissy,02031979,sunfire,angelus,undead,24061986,14061991,wildbill,shinobi,45m2do5bs,123qwer,21011989,cleopatr,lasvega,hornets,amorcit,11081989,coventry,nirvana1,destin,sidekick,20061988,02081983,gbhfvblf,sneaky,bmw325,22021989,nfytxrf,sekret,kalina,zanzibar,hotone,qazws,wasabi,heidi1,highlander,blues1,hitachi,paolo,23041987,slayer1,simba1,02011981,tinkerbe,kieran,01121986,172839,boiler,1125,bluesman,waffle,asdfgh01,threesom,conan,1102,reflex,18011987,nautilus,everlast,fatty,vader1,01071986,cyborg,ghbdtn123,birddog,rubble,02071983,suckers,02021973,skyhawk,12qw12qw,dakota1,joebob,nokia6233,woodie,longdong,lamer,troll,ghjcnjgfhjkm,420000,boating,nitro,armada,messiah,1031,penguin1,02091989,americ,02071989,redeye,asdqwe123,07071987,monty1,goten,spikey,sonata,635241,tokiohotel,sonyericsson,citroen,compaq1,1812,umpire,belmont,jonny,pantera1,nudes,palmtree,14111986,fenway,bighead,razor,gryphon,andyod22,aaaaa1,taco,10031988,enterme,malachi,dogface,reptile,01041985,dindom,handball,marseille,candy1,19101987,torino,tigge,matthias,viewsoni,13031987,stinker,evangelion,24011985,123456123,rampage,sandrine,02081980,thecrow,astral,28041987,sprinter,private1,seabee,shibby,02101988,25081988,fearless,junkie,01091987,aramis,antelope,draven,fuck1,mazda6,eggman,02021990,barselona,buddy123,19061987,fyfnjkbq,nancy1,12121990,10071987,sluggo,kille,hotties,irishka,zxcasdqwe123,shamus,fairlane,honeybee,soccer10,13061986,fantomas,17051988,10051987,20111986,gladiato,karachi,gambler,gordo,01011995,biatch,matthe,25800852,papito,excite,buffalo1,bobdole,cheshire,player1,28021992,thewho,10101986,pinky1,mentor,tomahawk,brown1,03041986,bismillah,bigpoppa,ijrjkfl,01121988,runaway,08121986,skibum,studman,helper,squeak,holycow,manfred,harlem,glock,gideon,987321,14021985,yellow1,wizard1,margarit,success1,medved,sf49ers,lambda,pasadena,johngalt,quasar,1776,02031980,coldplay,amand,playa,bigpimp,04041991,capricorn,elefant,sweetness,bruce1,luca,dominik,10011990,biker,09051945,datsun,elcamino,trinitro,malice,audi,voyager1,02101983,joe123,carpente,spartan1,mario1,glamour,diaper,12121985,22011988,winter1,asimov,callisto,nikolai,pebble,02101981,vendetta,david123,boytoy,11061985,02031989,iloveyou1,stupid1,cayman,casper1,zippo,yamahar1,wildwood,foxylady,calibra,02041980,27061988,dungeon,leedsutd,30041986,11051990,bestbuy,antares,dominion,24680,01061986,skillet,enforcer,derparol,01041988,196969,29071983,f00tball,purple1,mingus,25031987,21031990,remingto,giggles,klaste,3x7pxr,01011994,coolcat,29051989,megane,20031987,02051980,04041988,synergy,0000007,macman,iforget,adgjmp,vjqgfhjkm,28011987,rfvfcenhf,16051989,25121987,16051987,rogue,mamamia,08051990,20091991,1210,carnival,bolitas,paris1,dmitriy,dimas,05051989,papillon,knuckles,29011985,hola,tophat,28021990,100500,cutiepie,devo,415263,ducks,ghjuhfvvf,asdqwe,22021986,freefall,parol,02011983,zarina,buste,vitamin,warez,bigones,17061988,baritone,jamess,twiggy,mischief,bitchy,hetfield,1003,dontknow,grinch,sasha_007,18061990,12031985,12031987,calimero,224466,letmei,15011987,acmilan,alexandre,02031977,08081988,whiteboy,21051991,barney1,02071978,money123,18091985,bigdawg,02031988,cygnusx1,zoloto,31011987,firefigh,blowfish,screamer,lfybbk,20051988,chelse,11121986,01031989,harddick,sexylady,30031988,02041974,auditt,pizdec,kojak,kfgjxrf,20091988,123456ru,wp2003wp,1204,15051990,slugger,kordell1,03031986,swinging,01011974,02071979,rockie,dimples,1234123,1dragon,trucking,rusty2,roger1,marijuana,kerouac,02051978,08031985,paco,thecure,keepout,kernel,noname123,13121985,francisc,bozo,02011982,22071986,02101979,obsidian,12345qw,spud,tabasco,02051985,jaguars,dfktynby,kokomo,popova,notused,sevens,4200,magneto,02051976,roswell,15101986,21101986,lakeside,bigbang,aspen,little1,14021986,loki,suckmydick,strawber,carlos1,nokian73,dirty1,joshu,25091987,16121987,02041975,advent,17011987,slimshady,whistler,10101990,stryker,22031984,15021985,01031985,blueball,26031988,ksusha,bahamut,robocop,w_pass,chris123,impreza,prozac,bookie,bricks,13021990,alice1,cassandr,11111q,john123,4ever,korova,02051973,142857,25041988,paramedi,eclipse1,salope,07091990,1124,darkangel,23021986,999666,nomad,02051981,smackdow,01021990,yoyoma,argentin,moonligh,57chevy,bootys,hardone,capricor,galant,spanker,dkflbr,24111989,magpies,krolik,21051988,cevthrb,cheddar,22041988,bigbooty,scuba1,qwedsa,duffman,bukkake,acura,johncena,sexxy,p@ssw0rd,258369,cherries,12345s,asgard,leopold,fuck123,mopar,lalakers,dogpound,matrix1,crusty,spanner,kestrel,fenris,universa,peachy,assasin,lemmein,eggplant,hejsan,canucks,wendy1,doggy1,aikman,tupac,turnip,godlike,fussball,golden1,19283746,april1,django,petrova,captain1,vincent1,ratman,taekwondo,chocha,serpent,perfect1,capetown,vampir,amore,gymnast,timeout,nbvjatq,blue32,ksenia,k.lvbkf,nazgul,budweiser,clutch,mariya,sylveste,02051972,beaker,cartman1,q11111,sexxx,forever1,loser1,marseill,magellan,vehpbr,sexgod,jktxrf,hallo123,132456,liverpool1,southpaw,seneca,camden,357159,camero,tenchi,johndoe,145236,roofer,741963,vlad,02041978,fktyrf,zxcv123,wingnut,wolfpac,notebook,pufunga7782,brandy1,biteme1,goodgirl,redhat,02031978,challeng,millenium,hoops,maveric,noname,angus1,gaell,onion,olympus,sabrina1,ricard,sixpack,gratis,gagged,camaross,hotgirls,flasher,02051977,bubba123,goldfing,moonshin,gerrard,volkov,sonyfuck,mandrake,258963,tracer,lakers1,asians,susan1,money12,helmut,boater,diablo2,1234zxcv,dogwood,bubbles1,happy2,randy1,aries,beach1,marcius2,navigator,goodie,hellokitty,fkbyjxrf,earthlink,lookout,jumbo,opendoor,stanley1,marie1,12345m,07071977,ashle,wormix,murzik,02081976,lakewood,bluejays,loveya,commande,gateway2,peppe,01011976,7896321,goth,oreo,slammer,rasmus,faith1,knight1,stone1,redskin,ironmaiden,gotmilk,destiny1,dejavu,1master,midnite,timosha,espresso,delfin,toriamos,oberon,ceasar,markie,1a2s3d,ghhh47hj7649,vjkjrj,daddyo,dougie,disco,auggie,lekker,therock1,ou8123,start1,noway,p4ssw0rd,shadow12,333444,saigon,2fast4u,capecod,23skidoo,qazxcv,beater,bremen,aaasss,roadrunner,peace1,12345qwer,02071975,platon,bordeaux,vbkfirf,135798642,test12,supernov,beatles1,qwert40,optimist,vanessa1,prince1,ilovegod,nightwish,natasha1,alchemy,bimbo,blue99,patches1,gsxr1000,richar,hattrick,hott,solaris,proton,nevets,enternow,beavis1,amigos,159357a,ambers,lenochka,147896,suckdick,shag,intercourse,blue1234,spiral,02061977,tosser,ilove,02031975,cowgirl,canuck,q2w3e4,munch,spoons,waterboy,123567,evgeniy,savior,zasada,redcar,mamacita,terefon,globus,doggies,htubcnhfwbz,1008,cuervo,suslik,azertyui,limewire,houston1,stratfor,steaua,coors,tennis1,12345qwerty,stigmata,derf,klondike,patrici,marijuan,hardball,odyssey,nineinch,boston1,pass1,beezer,sandr,charon,power123,a1234,vauxhall,875421,awesome1,reggae,boulder,funstuff,iriska,krokodil,rfntymrf,sterva,champ1,bball,peeper,m123456,toolbox,cabernet,sheepdog,magic32,pigpen,02041977,holein1,lhfrjy,banan,dabomb,natalie1,jennaj,montana1,joecool,funky,steven1,ringo,junio,sammy123,qqqwww,baltimor,footjob,geezer,357951,mash4077,cashmone,pancake,monic,grandam,bongo,yessir,gocubs,nastia,vancouve,barley,dragon69,watford,ilikepie,02071976,laddie,123456789m,hairball,toonarmy,pimpdadd,cvthnm,hunte,davinci,lback,sophie1,firenze,q1234567,admin1,bonanza,elway7,daman,strap,azert,wxcvbn,afrika,theforce,123456t,idefix,wolfen,houdini,scheisse,default,beech,maserati,02061976,sigmachi,dylan1,bigdicks,eskimo,mizzou,02101976,riccardo,egghead,111777,kronos,ghbrjk,chaos1,jomama,rfhnjirf,rodeo,dolemite,cafc91,nittany,pathfind,mikael,password9,vqsablpzla,purpl,gabber,modelsne,myxworld,hellsing,punker,rocknrol,fishon,fuck69,02041976,lolol,twinkie,tripleh,cirrus,redbone,killer123,biggun,allegro,gthcbr,smith1,wanking,bootsy,barry1,mohawk,koolaid,5329,futurama,samoht,klizma,996633,lobo,honeys,peanut1,556677,zxasqw,joemama,javelin,samm,223322,sandra1,flicks,montag,nataly,3006,tasha1,1235789,dogbone,poker1,p0o9i8u7,goodday,smoothie,toocool,max333,metroid,archange,vagabond,billabon,22061941,tyson1,02031973,darkange,skateboard,evolutio,morrowind,wizards,frodo1,rockin,cumslut,plastics,zaqwsxcde,5201314,doit,outback,bumble,dominiqu,persona,nevermore,alinka,02021971,forgetit,sexo,all4one,c2h5oh,petunia,sheeba,kenny1,elisabet,aolsucks,woodstoc,pumper,02011975,fabio,granada,scrapper,123459,minimoni,q123456789,breaker,1004,02091976,ncc74656,slimshad,friendster,austin31,wiseguy,donner,dilbert1,132465,blackbird,buffet,jellybean,barfly,behappy,01011971,carebear,fireblad,02051975,boxcar,cheeky,kiteboy,hello12,panda1,elvisp,opennow,doktor,alex12,02101977,pornking,flamengo,02091975,snowbird,lonesome,robin1,11111a,weed420,baracuda,bleach,12345abc,nokia1,metall,singapor,mariner,herewego,dingo,tycoon,cubs,blunts,proview,123456789d,kamasutra,lagnaf,vipergts,navyseal,starwar,masterbate,wildone,peterbil,cucumber,butkus,123qwert,climax,deniro,gotribe,cement,scooby1,summer69,harrier,shodan,newyear,02091977,starwars1,romeo1,sedona,harald,doubled,sasha123,bigguns,salami,awnyce,kiwi,homemade,pimping,azzer,bradley1,warhamme,linkin,dudeman,qwe321,pinnacle,maxdog,flipflop,lfitymrf,fucker1,acidburn,esquire,sperma,fellatio,jeepster,thedon,sexybitch,pookey,spliff,widget,vfntvfnbrf,trinity1,mutant,samuel1,meliss,gohome,1q2q3q,mercede,comein,grin,cartoons,paragon,henrik,rainyday,pacino,senna,bigdog1,alleycat,12345qaz,narnia,mustang2,tanya1,gianni,apollo11,wetter,clovis,escalade,rainbows,freddy1,smart1,daisydog,s123456,cocksucker,pushkin,lefty,sambo,fyutkjxtr,hiziad,boyz,whiplash,orchard,newark,adrenalin,1598753,bootsie,chelle,trustme,chewy,golfgti,tuscl,ambrosia,5wr2i7h8,penetration,shonuf,jughead,payday,stickman,gotham,kolokol,johnny5,kolbasa,stang,puppydog,charisma,gators1,mone,jakarta,draco,nightmar,01011973,inlove,laetitia,02091973,tarpon,nautica,meadow,0192837465,luckyone,14881488,chessie,goldeney,tarakan,69camaro,bungle,wordup,interne,fuckme2,515000,dragonfl,sprout,02081974,gerbil,bandit1,02071971,melanie1,phialpha,camber,kathy1,adriano,gonzo1,10293847,bigjohn,bismarck,7777777a,scamper,12348765,rabbits,222777,bynthytn,dima123,alexander1,mallorca,dragster,favorite6,beethove,burner,cooper1,fosters,hello2,normandy,777999,sebring,1michael,lauren1,blake1,killa,02091971,nounours,trumpet1,thumper1,playball,xantia,rugby1,rocknroll,guillaum,angela1,strelok,prosper,buttercup,masterp,dbnfkbr,cambridg,venom,treefrog,lumina,1234566,supra,sexybabe,freee,shen,frogs,driller,pavement,grace1,dicky,checker,smackdown,pandas,cannibal,asdffdsa,blue42,zyjxrf,nthvbyfnjh,melrose,neon,jabber,gamma,369258147,aprilia,atticus,benessere,catcher,skipper1,azertyuiop,sixty9,thierry,treetop,jello,melons,123456789qwe,tantra,buzzer,catnip,bouncer,computer1,sexyone,ananas,young1,olenka,sexman,mooses,kittys,sephiroth,contra,hallowee,skylark,sparkles,777333,1qazxsw23edc,lucas1,q1w2e3r,gofast,hannes,amethyst,ploppy,flower2,hotass,amatory,volleyba,dixie1,bettyboo,ticklish,02061974,frenchy,phish1,murphy1,trustno,02061972,leinad,mynameis,spooge,jupiter1,hyundai,frosch,junkmail,abacab,marbles,32167,casio,sunshine1,wayne1,longhair,caster,snicker,02101973,gannibal,skinhead,hansol,gatsby,segblue2,montecar,plato,gumby,kaboom,matty,bosco1,888999,jazzy,panter,jesus123,charlie2,giulia,candyass,sex69,travis1,farmboy,special1,02041973,letsdoit,password01,allison1,abcdefg1,notredam,ilikeit,789654123,liberty1,rugger,uptown,alcatraz,123456w,airman,007bond,navajo,kenobi,terrier,stayout,grisha,frankie1,fluff,1qazzaq1,1234561,virginie,1234568,tango1,werdna,octopus,fitter,dfcbkbcf,blacklab,115599,montrose,allen1,supernova,frederik,ilovepussy,justice1,radeon,playboy2,blubber,sliver,swoosh,motocros,lockdown,pearls,thebear,istheman,pinetree,biit,1234rewq,rustydog,tampabay,titts,babycake,jehovah,vampire1,streaming,collie,camil,fidelity,calvin1,stitch,gatit,restart,puppy1,budgie,grunt,capitals,hiking,dreamcas,zorro1,321678,riffraff,makaka,playmate,napalm,rollin,amstel,zxcvb123,samanth,rumble,fuckme69,jimmys,951357,pizzaman,1234567899,tralala,delpiero,alexi,yamato,itisme,1million,vfndtq,kahlua,londo,wonderboy,carrots,tazz,ratboy,rfgecnf,02081973,nico,fujitsu,tujhrf,sergbest,blobby,02051970,sonic1,1357911,smirnov,video1,panhead,bucky,02031974,44332211,duffer,cashmoney,left4dead,bagpuss,salman,01011972,titfuck,66613666,england1,malish,dresden,lemans,darina,zapper,123456as,123456qqq,met2002,02041972,redstar,blue23,1234509876,pajero,booyah,please1,tetsuo,semper,finder,hanuman,sunlight,123456n,02061971,treble,cupoi,password99,dimitri,3ip76k2,popcorn1,lol12345,stellar,nympho,shark1,keith1,saskia,bigtruck,revoluti,rambo1,asd222,feelgood,phat,gogators,bismark,cola,puck,furball,burnout,slonik,bowtie,mommy1,icecube,fabienn,mouser,papamama,rolex,giants1,blue11,trooper1,momdad,iklo,morten,rhubarb,gareth,123456d,blitz,canada1,r2d2,brest,tigercat,usmarine,lilbit,benny1,azrael,lebowski,12345r,madagaskar,begemot,loverman,dragonballz,italiano,mazda3,naughty1,onions,diver1,cyrano,capcom,asdfg123,forlife,fisherman,weare138,requiem,mufasa,alpha123,piercing,hellas,abracadabra,duckman,caracas,macintos,02011971,jordan2,crescent,fduecn,hogtied,eatmenow,ramjet,18121812,kicksass,whatthe,discus,rfhfvtkmrf,rufus1,sqdwfe,mantle,vegitto,trek,dan123,paladin1,rudeboy,liliya,lunchbox,riversid,acapulco,libero,dnsadm,maison,toomuch,boobear,hemlock,sextoy,pugsley,misiek,athome,migue,altoids,marcin,123450,rhfcfdbwf,jeter2,rhinos,rjhjkm,mercury1,ronaldinho,shampoo,makayla,kamilla,masterbating,tennesse,holger,john1,matchbox,hores,poptart,parlament,goodyear,asdfgh1,02081970,hardwood,alain,erection,hfytnrb,highlife,implants,benjami,dipper,jeeper,bendover,supersonic,babybear,laserjet,gotenks,bama,natedogg,aol123,pokemo,rabbit1,raduga,sopranos,cashflow,menthol,pharao,hacking,334455,ghjcnbnenrf,lizzy,muffin1,pooky,penis1,flyer,gramma,dipset,becca,ireland1,diana1,donjuan,pong,ziggy1,alterego,simple1,cbr900,logger,111555,claudia1,cantona7,matisse,ljxtymrf,victori,harle,mamas,encore,mangos,iceman1,diamon,alexxx,tiamat,5000,desktop,mafia,smurf,princesa,shojou,blueberr,welkom,maximka,123890,123q123,tammy1,bobmarley,clips,demon666,ismail,termite,laser1,missie,altair,donna1,bauhaus,trinitron,mogwai,flyers88,juniper,nokia5800,boroda,jingles,qwerasdfzxcv,shakur,777666,legos,mallrats,1qazxsw,goldeneye,tamerlan,julia1,backbone,spleen,49ers,shady,darkone,medic1,justi,giggle,cloudy,aisan,douche,parkour,bluejay,huskers1,redwine,1qw23er4,satchmo,1231234,nineball,stewart1,ballsack,probes,kappa,amiga,flipper1,dortmund,963258,trigun,1237895,homepage,blinky,screwy,gizzmo,belkin,chemist,coolhand,chachi,braves1,thebest,greedisgood,pro100,banana1,101091m,123456g,wonderfu,barefeet,8inches,1111qqqq,kcchiefs,qweasdzxc123,metal1,jennifer1,xian,asdasd123,pollux,cheerleaers,fruity,mustang5,turbos,shopper,photon,espana,hillbill,oyster,macaroni,gigabyte,jesper,motown,tuxedo,buster12,triplex,cyclones,estrell,mortis,holla,456987,fiddle,sapphic,jurassic,thebeast,ghjcnjq,baura,spock1,metallica1,karaoke,nemrac58,love1234,02031970,flvbybcnhfnjh,frisbee,diva,ajax,feathers,flower1,soccer11,allday,mierda,pearl1,amature,marauder,333555,redheads,womans,egorka,godbless,159263,nimitz,aaaa1111,sashka,madcow,socce,greywolf,baboon,pimpdaddy,123456789r,reloaded,lancia,rfhfylfi,dicker,placid,grimace,22446688,olemiss,whores,culinary,wannabe,maxi,1234567aa,amelie,riley1,trample,phantom1,baberuth,bramble,asdfqwer,vides,4you,abc123456,taichi,aztnm,smother,outsider,hakr,blackhawk,bigblack,girlie,spook,valeriya,gianluca,freedo,1q2q3q4q,handbag,lavalamp,cumm,pertinant,whatup,nokia123,redlight,patrik,111aaa,poppy1,dfytxrf,aviator,sweeps,kristin1,cypher,elway,yinyang,access1,poophead,tucson,noles1,monterey,waterfal,dank,dougal,918273,suede,minnesot,legman,bukowski,ganja,mammoth,riverrat,asswipe,daredevi,lian,arizona1,kamikadze,alex1234,smile1,angel2,55bgates,bellagio,0001,wanrltw,stiletto,lipton,arsena,biohazard,bbking,chappy,tetris,as123456,darthvad,lilwayne,nopassword,7412369,123456789987654321,natchez,glitter,14785236,mytime,rubicon,moto,pyon,wazzup,tbird,shane1,nightowl,getoff,beckham7,trueblue,hotgirl,nevermin,deathnote,13131,taffy,bigal,copenhag,apricot,gallaries,dtkjcbgtl,totoro,onlyone,civicsi,jesse1,baby123,sierra1,festus,abacus,sickboy,fishtank,fungus,charle,golfpro,teensex,mario66,seaside,aleksei,rosewood,blackberry,1020304050,bedlam,schumi,deerhunt,contour,darkelf,surveyor,deltas,pitchers,741258963,dipstick,funny1,lizzard,112233445566,jupiter2,softtail,titman,greenman,z1x2c3v4b5,smartass,12345677,notnow,myworld,nascar1,chewbacc,nosferatu,downhill,dallas22,kuan,blazers,whales,soldat,craving,powerman,yfcntyf,hotrats,cfvceyu,qweasdzx,princess1,feline,qqwwee,chitown,1234qaz,mastermind,114477,dingbat,care1839,standby,kismet,atreides,dogmeat,icarus,monkeyboy,alex1,mouses,nicetits,sealteam,chopper1,crispy,winter99,rrpass1,myporn,myspace1,corazo,topolino,ass123,lawman,muffy,orgy,1love,passord,hooyah,ekmzyf,pretzel,amonra,nestle,01011950,jimbeam,happyman,z12345,stonewal,helios,manunited,harcore,dick1,gaymen,2hot4u,light1,qwerty13,kakashi,pjkjnj,alcatel,taylo,allah,buddydog,ltkmaby,mongo,blonds,start123,audia6,123456v,civilwar,bellaco,turtles,mustan,deadspin,aaa123,fynjirf,lucky123,tortoise,amor,summe,waterski,zulu,drag0n,dtxyjcnm,gizmos,strife,interacial,pusyy,goose1,bear1,equinox,matri,jaguar1,tobydog,sammys,nachos,traktor,bryan1,morgoth,444555,dasani,miami1,mashka,xxxxxx1,ownage,nightwin,hotlips,passmast,cool123,skolko,eldiablo,manu,1357908642,screwyou,badabing,foreplay,hydro,kubrick,seductive,demon1,comeon,galileo,aladdin,metoo,happines,902100,mizuno,caddy,bizzare,girls1,redone,ohmygod,sable,bonovox,girlies,hamper,opus,gizmodo1,aaabbb,pizzahut,999888,rocky2,anton1,kikimora,peavey,ocelot,a1a2a3a4,2wsx3edc,jackie1,solace,sprocket,galary,chuck1,volvo1,shurik,poop123,locutus,virago,wdtnjxtr,tequier,bisexual,doodles,makeitso,fishy,789632145,nothing1,fishcake,sentry,libertad,oaktree,fivestar,adidas1,vegitta,mississi,spiffy,carme,neutron,vantage,agassi,boners,123456789v,hilltop,taipan,barrage,kenneth1,fister,martian,willem,lfybkf,bluestar,moonman,ntktdbpjh,paperino,bikers,daffy,benji,quake,dragonfly,suckcock,danilka,lapochka,belinea,calypso,asshol,camero1,abraxas,mike1234,womam,q1q2q3q4q5,youknow,maxpower,pic's,audi80,sonora,raymond1,tickler,tadpole,belair,crazyman,finalfantasy,999000,jonatha,paisley,kissmyas,morgana,monste,mantra,spunk,magic123,jonesy,mark1,alessand,741258,baddest,ghbdtnrfrltkf,zxccxz,tictac,augustin,racers,7grout,foxfire,99762000,openit,nathanie,1z2x3c4v5b,seadog,gangbanged,lovehate,hondacbr,harpoon,mamochka,fisherma,bismilla,locust,wally1,spiderman1,saffron,utjhubq,123456987,20spanks,safeway,pisser,bdfyjd,kristen1,bigdick1,magenta,vfhujif,anfisa,friday13,qaz123wsx,0987654321q,tyrant,guan,meggie,kontol,nurlan,ayanami,rocket1,yaroslav,websol76,mutley,hugoboss,websolutions,elpaso,gagarin,badboys,sephirot,918273645,newuser,qian,edcrfv,booger1,852258,lockout,timoxa94,mazda323,firedog,sokolova,skydiver,jesus777,1234567890z,soulfly,canary,malinka,guillerm,hookers,dogfart,surfer1,osprey,india123,rhjkbr,stoppedby,nokia5530,123456789o,blue1,werter,divers,3000,123456f,alpina,cali,whoknows,godspeed,986532,foreskin,fuzzy1,heyyou,didier,slapnuts,fresno,rosebud1,sandman1,bears1,blade1,honeybun,queen1,baronn,pakista,philipp,9111961,topsecret,sniper1,214365,slipper,letsfuck,pippen33,godawgs,mousey,qw123456,scrotum,loveis,lighthou,bp2002,nancy123,jeffrey1,susieq,buddy2,ralphie,trout1,willi,antonov,sluttey,rehbwf,marty1,darian,losangeles,letme1n,12345d,pusssy,godiva,ender,golfnut,leonidas,a1b2c3d4e5,puffer,general1,wizzard,lehjxrf,racer1,bigbucks,cool12,buddys,zinger,esprit,vbienrf,josep,tickling,froggie,987654321a,895623,daddys,crumbs,gucci,mikkel,opiate,tracy1,christophe,came11,777555,petrovich,humbug,dirtydog,allstate,horatio,wachtwoord,creepers,squirts,rotary,bigd,georgia1,fujifilm,2sweet,dasha,yorkie,slimjim,wiccan,kenzie,system1,skunk,b12345,getit,pommes,daredevil,sugars,bucker,piston,lionheart,1bitch,515051,catfight,recon,icecold,fantom,vodafone,kontakt,boris1,vfcnth,canine,01011961,valleywa,faraon,chickenwing101,qq123456,livewire,livelife,roosters,jeepers,ilya1234,coochie,pavlik,dewalt,dfhdfhf,architec,blackops,1qaz2wsx3edc4rfv,rhfcjnf,wsxedc,teaser,sebora,25252,rhino1,ankara,swifty,decimal,redleg,shanno,nermal,candies,smirnova,dragon01,photo1,ranetki,a1s2d3f4g5,axio,wertzu,maurizio,6uldv8,zxcvasdf,punkass,flowe,graywolf,peddler,3rjs1la7qe,mpegs,seawolf,ladyboy,pianos,piggies,vixen,alexus,orpheus,gdtrfb,z123456,macgyver,hugetits,ralph1,flathead,maurici,mailru,goofball,nissan1,nikon,stopit,odin,big1,smooch,reboot,famil,bullit,anthony7,gerhard,methos,124038,morena,eagle2,jessica2,zebras,getlost,gfynthf,123581321,sarajevo,indon,comets,tatjana,rfgbnjirf,joystick,batman12,123456c,sabre,beerme,victory1,kitties,1475369,badboy1,booboo1,comcast,slava,squid,saxophon,lionhear,qaywsx,bustle,nastena,roadway,loader,hillside,starlight,24681012,niggers,access99,bazooka,molly123,blackice,bandi,cocacol,nfhfrfy,timur,muschi,horse1,quant4307s,squerting,oscars,mygirls,flashman,tangerin,goofy1,p0o9i8,housewifes,newness,monkey69,escorpio,password11,hippo,warcraft3,qazxsw123,qpalzm,ribbit,ghbdtndctv,bogota,star123,258000,lincoln1,bigjim,lacoste,firestorm,legenda,indain,ludacris,milamber,1009,evangeli,letmesee,a111111,hooters1,bigred1,shaker,husky,a4tech,cnfkrth,argyle,rjhjdf,nataha,0o9i8u7y,gibson1,sooners1,glendale,archery,hoochie,stooge,aaaaaa1,scorpions,school1,vegas1,rapier,mike23,bassoon,groupd2013,macaco,baker1,labia,freewill,santiag,silverado,butch1,vflfufcrfh,monica1,rugrat,cornhole,aerosmit,bionicle,gfgfvfvf,daniel12,virgo,fmale,favorite2,detroit1,pokey,shredder,baggies,wednesda,cosmo1,mimosa,sparhawk,firehawk,romario,911turbo,funtimes,fhntvrf,nexus6,159753456,timothy1,bajingan,terry1,frenchie,raiden,1mustang,babemagnet,74123698,nadejda,truffles,rapture,douglas1,lamborghini,motocross,rjcvjc,748596,skeeter1,dante1,angel666,telecom,carsten,pietro,bmw318,astro1,carpediem,samir,orang,helium,scirocco,fuzzball,rushmore,rebelz,hotspur,lacrimosa,chevys10,madonna1,domenico,yfnfirf,jachin,shelby1,bloke,dawgs,dunhill,atlanta1,service1,mikado,devilman,angelit,reznor,euphoria,lesbain,checkmat,browndog,phreak,blaze1,crash1,farida,mutter,luckyme,horsemen,vgirl,jediknig,asdas,cesare,allnight,rockey,starlite,truck1,passfan,close-up,samue,cazzo,wrinkles,homely,eatme1,sexpot,snapshot,dima1995,asthma,thetruth,ducky,blender,priyanka,gaucho,dutchman,sizzle,kakarot,651550,passcode,justinbieber,666333,elodie,sanjay,110442,alex01,lotus1,2300mj,lakshmi,zoomer,quake3,12349876,teapot,12345687,ramada,pennywis,striper,pilot1,chingon,optima,nudity,ethan1,euclid,beeline,loyola,biguns,zaq12345,bravo1,disney1,buffa,assmunch,vivid,6661313,wellingt,aqwzsx,madala11,9874123,sigmar,pictere,tiptop,bettyboop,dinero,tahiti,gregory1,bionic,speed1,fubar1,lexus1,denis1,hawthorn,saxman,suntzu,bernhard,dominika,camaro1,hunter12,balboa,bmw2002,seville,diablo1,vfhbyjxrf,1234abc,carling,lockerroom,punani,darth,baron1,vaness,1password,libido,picher,232425,karamba,futyn007,daydream,11001001,dragon123,friends1,bopper,rocky123,chooch,asslover,shimmer,riddler,openme,tugboat,sexy123,midori,gulnara,christo,swatch,laker,offroad,puddles,hackers,mannheim,manager1,horseman,roman1,dancer1,komputer,pictuers,nokia5130,ejaculation,lioness,123456y,evilone,nastenka,pushok,javie,lilman,3141592,mjolnir,toulouse,pussy2,bigworm,smoke420,fullback,extensa,dreamcast,belize,delboy,willie1,casablanca,csyjxtr,ricky1,bonghit,salvator,basher,pussylover,rosie1,963258741,vivitron,cobra427,meonly,armageddon,myfriend,zardoz,qwedsazxc,kraken,fzappa,starfox,333999,illmatic,capoeira,weenie,ramzes,freedom2,toasty,pupkin,shinigami,fhvfutljy,nocturne,churchil,thumbnils,tailgate,neworder,sexymama,goarmy,cerebus,michelle1,vbifyz,surfsup,earthlin,dabulls,basketbal,aligator,mojojojo,saibaba,welcome2,wifes,wdtnjr,12345w,slasher,papabear,terran,footman,hocke,153759,texans,tom123,sfgiants,billabong,aassdd,monolith,xxx777,l3tm31n,ticktock,newone,hellno,japanees,contortionist,admin123,scout1,alabama1,divx1,rochard,privat,radar1,bigdad,fhctybq,tortuga,citrus,avanti,fantasy1,woodstock,s12345,fireman1,embalmer,woodwork,bonzai,konyor,newstart,jigga,panorama,goats,smithy,rugrats,hotmama,daedalus,nonstop,fruitbat,lisenok,quaker,violator,12345123,my3sons,cajun,fraggle,gayboy,oldfart,vulva,knickerless,orgasms,undertow,binky,litle,kfcnjxrf,masturbation,bunnie,alexis1,planner,transexual,sparty,leeloo,monies,fozzie,stinger1,landrove,anakonda,scoobie,yamaha1,henti,star12,rfhlbyfk,beyonce,catfood,cjytxrf,zealots,strat,fordtruc,archangel,silvi,sativa,boogers,miles1,bigjoe,tulip,petite,greentea,shitter,jonboy,voltron,morticia,evanescence,3edc4rfv,longshot,windows1,serge,aabbcc,starbucks,sinful,drywall,prelude1,www123,camel1,homebrew,marlins,123412,letmeinn,domini,swampy,plokij,fordf350,webcam,michele1,bolivi,27731828,wingzero,qawsedrftg,shinji,sverige,jasper1,piper1,cummer,iiyama,gocats,amour,alfarome,jumanji,mike69,fantasti,1monkey,w00t88,shawn1,lorien,1a2s3d4f5g,koleso,murph,natascha,sunkist,kennwort,emine,grinder,m12345,q1q2q3q4,cheeba,money2,qazwsxedc1,diamante,prosto,pdiddy,stinky1,gabby1,luckys,franci,pornographic,moochie,gfhjdjp,samdog,empire1,comicbookdb,emili,motdepasse,iphone,braveheart,reeses,nebula,sanjose,bubba2,kickflip,arcangel,superbow,porsche911,xyzzy,nigger1,dagobert,devil1,alatam,monkey2,barbara1,12345v,vfpfafrf,alessio,babemagn,aceman,arrakis,kavkaz,987789,jasons,berserk,sublime1,rogue1,myspace,buckwhea,csyekz,pussy4me,vette1,boots1,boingo,arnaud,budlite,redstorm,paramore,becky1,imtheman,chango,marley1,milkyway,666555,giveme,mahalo,lux2000,lucian,paddy,praxis,shimano,bigpenis,creeper,newproject2004,rammstei,j3qq4h7h2v,hfljcnm,lambchop,anthony2,bugman,gfhjkm12,dreamer1,stooges,cybersex,diamant,cowboyup,maximus1,sentra,615243,goethe,manhatta,fastcar,selmer,1213141516,yfnfitymrf,denni,chewey,yankee1,elektra,123456789p,trousers,fishface,topspin,orwell,vorona,sodapop,motherfu,ibilltes,forall,kookie,ronald1,balrog,maximilian,mypasswo,sonny1,zzxxcc,tkfkdg,magoo,mdogg,heeled,gitara,lesbos,marajade,tippy,morozova,enter123,lesbean,pounded,asd456,fialka,scarab,sharpie,spanky1,gstring,sachin,12345asd,princeto,hellohel,ursitesux,billows,1234kekc,kombat,cashew,duracell,kseniya,sevenof9,kostik,arthur1,corvet07,rdfhnbhf,songoku,tiberian,needforspeed,1qwert,dropkick,kevin123,panache,libra,a123456a,kjiflm,vfhnsirf,cntgfy,iamcool,narut,buffer,sk8ordie,urlaub,fireblade,blanked,marishka,gemini1,altec,gorillaz,chief1,revival47,ironman1,space1,ramstein,doorknob,devilmaycry,nemesis1,sosiska,pennstat,monday1,pioner,shevchenko,detectiv,evildead,blessed1,aggie,coffees,tical,scotts,bullwink,marsel,krypto,adrock,rjitxrf,asmodeus,rapunzel,theboys,hotdogs,deepthro,maxpayne,veronic,fyyeirf,otter,cheste,abbey1,thanos,bedrock,bartok,google1,xxxzzz,rodent,montecarlo,hernande,mikayla,123456789l,bravehea,12locked,ltymub,pegasus1,ameteur,saltydog,faisal,milfnew,momsuck,everques,ytngfhjkz,m0nkey,businessbabe,cooki,custard,123456ab,lbvjxrf,outlaws,753357,qwerty78,udacha,insider,chees,fuckmehard,shotokan,katya,seahorse,vtldtlm,turtle1,mike12,beebop,heathe,everton1,darknes,barnie,rbcekz,alisher,toohot,theduke,555222,reddog1,breezy,bulldawg,monkeyman,baylee,losangel,mastermi,apollo1,aurelie,zxcvb12345,cayenne,bastet,wsxzaq,geibcnbr,yello,fucmy69,redwall,ladybird,bitchs,cccccc1,rktjgfnhf,ghjdthrf,quest1,oedipus,linus,impalass,fartman,12345k,fokker,159753a,optiplex,bbbbbb1,realtor,slipkno,santacru,rowdy,jelena,smeller,3984240,ddddd1,sexyme,janet1,3698741,eatme69,cazzone,today1,poobear,ignatius,master123,newpass1,heather2,snoopdogg,blondinka,pass12,honeydew,fuckthat,890098890,lovem,goldrush,gecko,biker1,llama,pendejo,avalanche,fremont,snowman1,gandolf,chowder,1a2b3c4d5e,flyguy,magadan,1fuck,pingvin,nokia5230,ab1234,lothar,lasers,bignuts,renee1,royboy,skynet,12340987,1122334,dragrace,lovely1,22334455,booter,12345612,corvett,123456qq,capital1,videoes,funtik,wyvern,flange,sammydog,hulkster,13245768,not4you,vorlon,omegared,l58jkdjp!,filippo,123mudar,samadams,petrus,chris12,charlie123,123456789123,icetea,sunderla,adrian1,123qweas,kazanova,aslan,monkey123,fktyeirf,goodsex,123ab,lbtest,banaan,bluenose,837519,asd12345,waffenss,whateve,1a2a3a4a,trailers,vfhbirf,bhbcrf,klaatu,turk182,monsoon,beachbum,sunbeam,succes,clyde1,viking1,rawhide,bubblegum,princ,mackenzi,hershey1,222555,dima55,niggaz,manatee,aquila,anechka,pamel,bugsbunn,lovel,sestra,newport1,althor,hornyman,wakeup,zzz111,phishy,cerber,torrent,thething,solnishko,babel,buckeye1,peanu,ethernet,uncencored,baraka,665544,chris2,rb26dett,willy1,choppers,texaco,biggirl,123456b,anna2614,sukebe,caralho,callofduty,rt6ytere,jesus7,angel12,1money,timelord,allblack,pavlova,romanov,tequiero,yitbos,lookup,bulls23,snowflake,dickweed,barks,lever,irisha,firestar,fred1234,ghjnjnbg,danman,gatito,betty1,milhouse,kbctyjr,masterbaiting,delsol,papit,doggys,123698741,bdfyjdf,invictus,bloods,kayla1,yourmama,apple2,angelok,bigboy1,pontiac1,verygood,yeshua,twins2,porn4me,141516,rasta69,james2,bosshog,candys,adventur,stripe,djkjlz,dokken,austin316,skins,hogwarts,vbhevbh,navigato,desperado,xxx666,cneltyn,vasiliy,hazmat,daytek,eightbal,fred1,four20,74227422,fabia,aerosmith,manue,wingchun,boohoo,hombre,sanity72,goatboy,fuckm,partizan,avrora,utahjazz,submarin,pussyeat,heinlein,control1,costaric,smarty,chuan,triplets,snowy,snafu,teacher1,vangogh,vandal,evergree,cochise,qwerty99,pyramid1,saab900,sniffer,qaz741,lebron23,mark123,wolvie,blackbelt,yoshi,feeder,janeway,nutella,fuking,asscock,deepak,poppie,bigshow,housewife,grils,tonto,cynthia1,temptress,irakli,belle1,russell1,manders,frank123,seabass,gforce,songbird,zippy1,naught,brenda1,chewy1,hotshit,topaz,43046721,girfriend,marinka,jakester,thatsme,planeta,falstaff,patrizia,reborn,riptide,cherry1,shuan,nogard,chino,oasis1,qwaszx12,goodlife,davis1,1911a1,harrys,shitfuck,12345678900,russian7,007700,bulls1,porshe,danil,dolphi,river1,sabaka,gobigred,deborah1,volkswagen,miamo,alkaline,muffdive,1letmein,fkbyrf,goodguy,hallo1,nirvan,ozzie,cannonda,cvbhyjdf,marmite,germany1,joeblow,radio1,love11,raindrop,159852,jacko,newday,fathead,elvis123,caspe,citibank,sports1,deuce,boxter,fakepass,golfman,snowdog,birthday4,nonmembe,niklas,parsifal,krasota,theshit,1235813,maganda,nikita1,omicron,cassie1,columbo,buick,sigma1,thistle,bassin,rickster,apteka,sienna,skulls,miamor,coolgirl,gravis,1qazxc,virgini,hunter2,akasha,batma,motorcyc,bambino,tenerife,fordf250,zhuan,iloveporn,markiza,hotbabes,becool,fynjybyf,wapapapa,forme,mamont,pizda,dragonz,sharon1,scrooge,mrbill,pfloyd,leeroy,natedog,ishmael,777111,tecumseh,carajo,nfy.irf,0000000000o,blackcock,fedorov,antigone,feanor,novikova,bobert,peregrin,spartan117,pumkin,rayman,manuals,tooltime,555333,bonethug,marina1,bonnie1,tonyhawk,laracroft,mahalkita,18273645,terriers,gamer,hoser,littlema,molotok,glennwei,lemon1,caboose,tater,12345654321,brians,fritz1,mistral,jigsaw,fuckshit,hornyguy,southside,edthom,antonio1,bobmarle,pitures,ilikesex,crafty,nexus,boarder,fulcrum,astonvil,yanks1,yngwie,account1,zooropa,hotlegs,sammi,gumbo,rover1,perkele,maurolarastefy,lampard,357753,barracud,dmband,abcxyz,pathfinder,335577,yuliya,micky,jayman,asdfg12345,1596321,halcyon,rerfhtre,feniks,zaxscd,gotyoass,jaycee,samson1,jamesb,vibrate,grandpri,camino,colossus,davidb,mamo4ka,nicky1,homer123,pinguin,watermelon,shadow01,lasttime,glider,823762,helen1,pyramids,tulane,osama,rostov,john12,scoote,bhbyrf,gohan,galeries,joyful,bigpussy,tonka,mowgli,astalavista,zzz123,leafs,dalejr8,unicorn1,777000,primal,bigmama,okmijn,killzone,qaz12345,snookie,zxcvvcxz,davidc,epson,rockman,ceaser,beanbag,katten,3151020,duckhunt,segreto,matros,ragnar,699669,sexsexse,123123z,fuckyeah,bigbutts,gbcmrf,element1,marketin,saratov,elbereth,blaster1,yamahar6,grime,masha,juneau,1230123,pappy,lindsay1,mooner,seattle1,katzen,lucent,polly1,lagwagon,pixie,misiaczek,666666a,smokedog,lakers24,eyeball,ironhors,ametuer,volkodav,vepsrf,kimmy,gumby1,poi098,ovation,1q2w3,drinker,penetrating,summertime,1dallas,prima,modles,takamine,hardwork,macintosh,tahoe,passthie,chiks,sundown,flowers1,boromir,music123,phaedrus,albert1,joung,malakas,gulliver,parker1,balder,sonne,jessie1,domainlock2005,express1,vfkbyf,youandme,raketa,koala,dhjnvytyjub,nhfrnjh,testibil,ybrbnjc,987654321q,axeman,pintail,pokemon123,dogggg,shandy,thesaint,11122233,x72jhhu3z,theclash,raptors,zappa1,djdjxrf,hell666,friday1,vivaldi,pluto1,lance1,guesswho,jeadmi,corgan,skillz,skippy1,mango1,gymnastic,satori,362514,theedge,cxfcnkbdfz,sparkey,deicide,bagels,lololol,lemmings,r4e3w2q1,silve,staind,schnuffi,dazzle,basebal1,leroy1,bilbo1,luckie,qwerty2,goodfell,hermione,peaceout,davidoff,yesterda,killah,flippy,chrisb,zelda1,headless,muttley,fuckof,tittys,catdaddy,photog,beeker,reaver,ram1500,yorktown,bolero,tryagain,arman,chicco,learjet,alexei,jenna1,go2hell,12s3t4p55,momsanaladventure,mustang9,protoss,rooter,ginola,dingo1,mojave,erica1,1qazse4,marvin1,redwolf,sunbird,dangerou,maciek,girsl,hawks1,packard1,excellen,dashka,soleda,toonces,acetate,nacked,jbond007,alligator,debbie1,wellhung,monkeyma,supers,rigger,larsson,vaseline,rjnzhf,maripos,123456asd,cbr600rr,doggydog,cronic,jason123,trekker,flipmode,druid,sonyvaio,dodges,mayfair,mystuff,fun4me,samanta,sofiya,magics,1ranger,arcane,sixtynin,222444,omerta,luscious,gbyudby,bobcats,envision,chance1,seaweed,holdem,tomate,mensch,slicer,acura1,goochi,qweewq,punter,repoman,tomboy,never1,cortina,gomets,147896321,369852147,dogma,bhjxrf,loglatin,eragon,strato,gazelle,growler,885522,klaudia,payton34,fuckem,butchie,scorpi,lugano,123456789k,nichola,chipper1,spide,uhbujhbq,rsalinas,vfylfhby,longhorns,bugatti,everquest,!qaz2wsx,blackass,999111,snakeman,p455w0rd,fanatic,family1,pfqxbr,777vlad,mysecret,marat,phoenix2,october1,genghis,panties1,cooker,citron,ace123,1234569,gramps,blackcoc,kodiak1,hickory,ivanhoe,blackboy,escher,sincity,beaks,meandyou,spaniel,canon1,timmy1,lancaste,polaroid,edinburg,fuckedup,hotman,cueball,golfclub,gopack,bookcase,worldcup,dkflbvbhjdbx,twostep,17171717aa,letsplay,zolushka,stella1,pfkegf,kingtut,67camaro,barracuda,wiggles,gjhjkm,prancer,patata,kjifhf,theman1,romanova,sexyass,copper1,dobber,sokolov,pomidor,algernon,cadman,amoremio,william2,silly1,bobbys,hercule,hd764nw5d7e1vb1,defcon,deutschland,robinhood,alfalfa,machoman,lesbens,pandora1,easypay,tomservo,nadezhda,goonies,saab9000,jordyn,f15eagle,dbrecz,12qwerty,greatsex,thrawn,blunted,baywatch,doggystyle,loloxx,chevy2,january1,kodak,bushel,78963214,ub6ib9,zz8807zpl,briefs,hawker,224488,first1,bonzo,brent1,erasure,69213124,sidewind,soccer13,622521,mentos,kolibri,onepiece,united1,ponyboy,keksa12,wayer,mypussy,andrej,mischa,mille,bruno123,garter,bigpun,talgat,familia,jazzy1,mustang8,newjob,747400,bobber,blackbel,hatteras,ginge,asdfjkl;,camelot1,blue44,rebbyt34,ebony1,vegas123,myboys,aleksander,ijrjkflrf,lopata,pilsner,lotus123,m0nk3y,andreev,freiheit,balls1,drjynfrnt,mazda1,waterpolo,shibumi,852963,123bbb,cezer121,blondie1,volkova,rattler,kleenex,ben123,sanane,happydog,satellit,qazplm,qazwsxedcrfvtgb,meowmix,badguy,facefuck,spice1,blondy,major1,25000,anna123,654321a,sober1,deathrow,patterso,china1,naruto1,hawkeye1,waldo1,butchy,crayon,5tgb6yhn,klopik,crocodil,mothra,imhorny,pookie1,splatter,slippy,lizard1,router,buratino,yahweh,123698,dragon11,123qwe456,peepers,trucker1,ganjaman,1hxboqg2,cheyanne,storys,sebastie,zztop,maddison,4rfv3edc,darthvader,jeffro,iloveit,victor1,hotty,delphin,lifeisgood,gooseman,shifty,insertions,dude123,abrupt,123masha,boogaloo,chronos,stamford,pimpster,kthjxrf,getmein,amidala,flubber,fettish,grapeape,dantes,oralsex,jack1,foxcg33,winchest,francis1,getin,archon,cliffy,blueman,1basebal,sport1,emmitt22,porn123,bignasty,morga,123hfjdk147,ferrar,juanito,fabiol,caseydog,steveo,peternorth,paroll,kimchi,bootleg,gaijin,secre,acacia,eatme2,amarillo,monkey11,rfhfgep,tylers,a1a2a3a4a5,sweetass,blower,rodina,babushka,camilo,cimbom,tiffan,vfnbkmlf,ohbaby,gotigers,lindsey1,dragon13,romulus,qazxsw12,zxcvbn1,dropdead,hitman47,snuggle,eleven11,bloopers,357mag,avangard,bmw320,ginscoot,dshade,masterkey,voodoo1,rootedit,caramba,leahcim,hannover,8phrowz622,tim123,cassius,000000a,angelito,zzzzz1,badkarma,star1,malaga,glenwood,footlove,golf1,summer12,helpme1,fastcars,titan1,police1,polinka,k.jdm,marusya,augusto,shiraz,pantyhose,donald1,blaise,arabella,brigada,c3por2d2,peter01,marco1,hellow,dillweed,uzumymw,geraldin,loveyou2,toyota1,088011,gophers,indy500,slainte,5hsu75kpot,teejay,renat,racoon,sabrin,angie1,shiznit,harpua,sexyred,latex,tucker1,alexandru,wahoo,teamwork,deepblue,goodison,rundmc,r2d2c3p0,puppys,samba,ayrton,boobed,999777,topsecre,blowme1,123321z,loudog,random1,pantie,drevil,mandolin,121212q,hottub,brother1,failsafe,spade1,matvey,open1234,carmen1,priscill,schatzi,kajak,gooddog,trojans1,gordon1,kayak,calamity,argent,ufhvjybz,seviyi,penfold,assface,dildos,hawkwind,crowbar,yanks,ruffles,rastus,luv2epus,open123,aquafina,dawns,jared1,teufel,12345c,vwgolf,pepsi123,amores,passwerd,01478520,boliva,smutty,headshot,password3,davidd,zydfhm,gbgbcmrf,pornpass,insertion,ceckbr,test2,car123,checkit,dbnfkbq,niggas,nyyankee,muskrat,nbuhtyjr,gunner1,ocean1,fabienne,chrissy1,wendys,loveme89,batgirl,cerveza,igorek,steel1,ragman,boris123,novifarm,sexy12,qwerty777,mike01,giveitup,123456abc,fuckall,crevice,hackerz,gspot,eight8,assassins,texass,swallows,123458,baldur,moonshine,labatt,modem,sydney1,voland,dbnfkz,hotchick,jacker,princessa,dawgs1,holiday1,booper,reliant,miranda1,jamaica1,andre1,badnaamhere,barnaby,tiger7,david12,margaux,corsica,085tzzqi,universi,thewall,nevermor,martin6,qwerty77,cipher,apples1,0102030405,seraphim,black123,imzadi,gandon,ducati99,1shadow,dkflbvbhjdyf,44magnum,bigbad,feedme,samantha1,ultraman,redneck1,jackdog,usmc0311,fresh1,monique1,tigre,alphaman,cool1,greyhoun,indycar,crunchy,55chevy,carefree,willow1,063dyjuy,xrated,assclown,federica,hilfiger,trivia,bronco1,mamita,100200300,simcity,lexingky,akatsuki,retsam,johndeere,abudfv,raster,elgato,businka,satanas,mattingl,redwing1,shamil,patate,mannn,moonstar,evil666,b123456,bowl300,tanechka,34523452,carthage,babygir,santino,bondarenko,jesuss,chico1,numlock,shyguy,sound1,kirby1,needit,mostwanted,427900,funky1,steve123,passions,anduril,kermit1,prospero,lusty,barakuda,dream1,broodwar,porky,christy1,mahal,yyyyyy1,allan1,1sexy,flintsto,capri,cumeater,heretic,robert2,hippos,blindax,marykay,collecti,kasumi,1qaz!qaz,112233q,123258,chemistr,coolboy,0o9i8u,kabuki,righton,tigress,nessie,sergej,andrew12,yfafyz,ytrhjvfyn,angel7,victo,mobbdeep,lemming,transfor,1725782,myhouse,aeynbr,muskie,leno4ka,westham1,cvbhyjd,daffodil,pussylicker,pamela1,stuffer,warehous,tinker1,2w3e4r,pluton,louise1,polarbea,253634,prime1,anatoliy,januar,wysiwyg,cobraya,ralphy,whaler,xterra,cableguy,112233a,porn69,jamesd,aqualung,jimmy123,lumpy,luckyman,kingsize,golfing1,alpha7,leeds1,marigold,lol1234,teabag,alex11,10sne1,saopaulo,shanny,roland1,basser,3216732167,carol1,year2005,morozov,saturn1,joseluis,bushed,redrock,memnoch,lalaland,indiana1,lovegod,gulnaz,buffalos,loveyou1,anteater,pattaya,jaydee,redshift,bartek,summerti,coffee1,ricochet,incest,schastie,rakkaus,h2opolo,suikoden,perro,dance1,loveme1,whoopass,vladvlad,boober,flyers1,alessia,gfcgjhn,pipers,papaya,gunsling,coolone,blackie1,gonads,gfhjkzytn,foxhound,qwert12,gangrel,ghjvtntq,bluedevi,mywife,summer01,hangman,licorice,patter,vfr750,thorsten,515253,ninguna,dakine,strange1,mexic,vergeten,12345432,8phrowz624,stampede,floyd1,sailfish,raziel,ananda,giacomo,freeme,crfprf,74185296,allstars,master01,solrac,gfnhbjn,bayliner,bmw525,3465xxx,catter,single1,michael3,pentium4,nitrox,mapet123456,halibut,killroy,xxxxx1,phillip1,poopsie,arsenalfc,buffys,kosova,all4me,32165498,arslan,opensesame,brutis,charles2,pochta,nadegda,backspac,mustang0,invis,gogeta,654321q,adam25,niceday,truckin,gfdkbr,biceps,sceptre,bigdave,lauras,user345,sandys,shabba,ratdog,cristiano,natha,march13,gumball,getsdown,wasdwasd,redhead1,dddddd1,longlegs,13572468,starsky,ducksoup,bunnys,omsairam,whoami,fred123,danmark,flapper,swanky,lakings,yfhenj,asterios,rainier,searcher,dapper,ltdjxrf,horsey,seahawk,shroom,tkfkdgo,aquaman,tashkent,number9,messi10,1asshole,milenium,illumina,vegita,jodeci,buster01,bareback,goldfinger,fire1,33rjhjds,sabian,thinkpad,smooth1,sully,bonghits,sushi1,magnavox,colombi,voiture,limpone,oldone,aruba,rooster1,zhenya,nomar5,touchdow,limpbizkit,rhfcfdxbr,baphomet,afrodita,bball1,madiso,ladles,lovefeet,matthew2,theworld,thunderbird,dolly1,123rrr,forklift,alfons,berkut,speedy1,saphire,oilman,creatine,pussylov,bastard1,456258,wicked1,filimon,skyline1,fucing,yfnfkbz,hot123,abdulla,nippon,nolimits,billiard,booty1,buttplug,westlife,coolbean,aloha1,lopas,asasin,1212121,october2,whodat,good4u,d12345,kostas,ilya1992,regal,pioneer1,volodya,focus1,bastos,nbvjif,fenix,anita1,vadimka,nickle,jesusc,123321456,teste,christ1,essendon,evgenii,celticfc,adam1,forumwp,lovesme,26exkp,chillout,burly,thelast1,marcus1,metalgear,test11,ronaldo7,socrate,world1,franki,mommie,vicecity,postov1000,charlie3,oldschool,333221,legoland,antoshka,counterstrike,buggy,mustang3,123454,qwertzui,toons,chesty,bigtoe,tigger12,limpopo,rerehepf,diddle,nokia3250,solidsnake,conan1,rockroll,963369,titanic1,qwezxc,cloggy,prashant,katharin,maxfli,takashi,cumonme,michael9,mymother,pennstate,khalid,48151623,fightclub,showboat,mateusz,elrond,teenie,arrow1,mammamia,dustydog,dominator,erasmus,zxcvb1,1a2a3a,bones1,dennis1,galaxie,pleaseme,whatever1,junkyard,galadriel,charlies,2wsxzaq1,crimson1,behemoth,teres,master11,fairway,shady1,pass99,1batman,joshua12,baraban,apelsin,mousepad,melon,twodogs,123321qwe,metalica,ryjgrf,pipiska,rerfhfxf,lugnut,cretin,iloveu2,powerade,aaaaaaa1,omanko,kovalenko,isabe,chobits,151nxjmt,shadow11,zcxfcnkbdf,gy3yt2rgls,vfhbyrf,159753123,bladerunner,goodone,wonton,doodie,333666999,fuckyou123,kitty123,chisox,orlando1,skateboa,red12345,destroye,snoogans,satan1,juancarlo,goheels,jetson,scottt,fuckup,aleksa,gfhfljrc,passfind,oscar123,derrick1,hateme,viper123,pieman,audi100,tuffy,andover,shooter1,10000,makarov,grant1,nighthaw,13576479,browneye,batigol,nfvfhf,chocolate1,7hrdnw23,petter,bantam,morlii,jediknight,brenden,argonaut,goodstuf,wisconsi,315920,abigail1,dirtbag,splurge,k123456,lucky777,valdepen,gsxr600,322223,ghjnjrjk,zaq1xsw2cde3,schwanz,walter1,letmein22,nomads,124356,codeblue,nokian70,fucke,footbal1,agyvorc,aztecs,passw0r,smuggles,femmes,ballgag,krasnodar,tamuna,schule,sixtynine,empires,erfolg,dvader,ladygaga,elite1,venezuel,nitrous,kochamcie,olivia1,trustn01,arioch,sting1,131415,tristar,555000,maroon,135799,marsik,555556,fomoco,natalka,cwoui,tartan,davecole,nosferat,hotsauce,dmitry,horus,dimasik,skazka,boss302,bluebear,vesper,ultras,tarantul,asd123asd,azteca,theflash,8ball,1footbal,titlover,lucas123,number6,sampson1,789852,party1,dragon99,adonai,carwash,metropol,psychnau,vthctltc,hounds,firework,blink18,145632,wildcat1,satchel,rice80,ghtktcnm,sailor1,cubano,anderso,rocks1,mike11,famili,dfghjc,besiktas,roygbiv,nikko,bethan,minotaur,rakesh,orange12,hfleuf,jackel,myangel,favorite7,1478520,asssss,agnieszka,haley1,raisin,htubyf,1buster,cfiekz,derevo,1a2a3a4a5a,baltika,raffles,scruffy1,clitlick,louis1,buddha1,fy.nrf,walker1,makoto,shadow2,redbeard,vfvfvskfhfve,mycock,sandydog,lineman,network1,favorite8,longdick,mustangg,mavericks,indica,1killer,cisco1,angelofwar,blue69,brianna1,bubbaa,slayer666,level42,baldrick,brutus1,lowdown,haribo,lovesexy,500000,thissuck,picker,stephy,1fuckme,characte,telecast,1bigdog,repytwjdf,thematrix,hammerhe,chucha,ganesha,gunsmoke,georgi,sheltie,1harley,knulla,sallas,westie,dragon7,conker,crappie,margosha,lisboa,3e2w1q,shrike,grifter,ghjcnjghjcnj,asdfg1,mnbvcxz1,myszka,posture,boggie,rocketman,flhtyfkby,twiztid,vostok,pi314159,force1,televizor,gtkmvtym,samhain,imcool,jadzia,dreamers,strannik,k2trix,steelhea,nikitin,commodor,brian123,chocobo,whopper,ibilljpf,megafon,ararat,thomas12,ghbrjkbcn,q1234567890,hibernia,kings1,jim123,redfive,68camaro,iawgk2,xavier1,1234567u,d123456,ndirish,airborn,halfmoon,fluffy1,ranchero,sneaker,soccer2,passion1,cowman,birthday1,johnn,razzle,glock17,wsxqaz,nubian,lucky2,jelly1,henderso,eric1,123123e,boscoe01,fuck0ff,simpson1,sassie,rjyjgkz,nascar3,watashi,loredana,janus,wilso,conman,david2,mothe,iloveher,snikers,davidj,fkmnthyfnbdf,mettss,ratfink,123456h,lostsoul,sweet16,brabus,wobble,petra1,fuckfest,otters,sable1,svetka,spartacu,bigstick,milashka,1lover,pasport,champagn,papichul,hrvatska,hondacivic,kevins,tacit,moneybag,gohogs,rasta1,246813579,ytyfdbcnm,gubber,darkmoon,vitaliy,233223,playboys,tristan1,joyce1,oriflame,mugwump,access2,autocad,thematri,qweqwe123,lolwut,ibill01,multisyn,1233211,pelikan,rob123,chacal,1234432,griffon,pooch,dagestan,geisha,satriani,anjali,rocketma,gixxer,pendrago,vincen,hellokit,killyou,ruger,doodah,bumblebe,badlands,galactic,emachines,foghorn,jackso,jerem,avgust,frontera,123369,daisymae,hornyboy,welcome123,tigger01,diabl,angel13,interex,iwantsex,rockydog,kukolka,sawdust,online1,3234412,bigpapa,jewboy,3263827,dave123,riches,333222,tony1,toggle,farter,124816,tities,balle,brasilia,southsid,micke,ghbdtn12,patit,ctdfcnjgjkm,olds442,zzzzzz1,nelso,gremlins,gypsy1,carter1,slut69,farcry,7415963,michael8,birdie1,charl,123456789abc,100001,aztec,sinjin,bigpimpi,closeup,atlas1,nvidia,doggone,classic1,manana,malcolm1,rfkbyf,hotbabe,rajesh,dimebag,ganjubas,rodion,jagr68,seren,syrinx,funnyman,karapuz,123456789n,bloomin,admin18533362,biggdogg,ocarina,poopy1,hellome,internet1,booties,blowjobs,matt1,donkey1,swede,1jennife,evgeniya,lfhbyf,coach1,444777,green12,patryk,pinewood,justin12,271828,89600506779,notredame,tuborg,lemond,sk8ter,million1,wowser,pablo1,st0n3,jeeves,funhouse,hiroshi,gobucs,angeleye,bereza,winter12,catalin,qazedc,andros,ramazan,vampyre,sweethea,imperium,murat,jamest,flossy,sandeep,morgen,salamandra,bigdogg,stroller,njdevils,nutsack,vittorio,%%passwo,playful,rjyatnrf,tookie,ubnfhf,michi,777444,shadow13,devils1,radiance,toshiba1,beluga,amormi,dandfa,trust1,killemall,smallville,polgara,billyb,landscap,steves,exploite,zamboni,damage11,dzxtckfd,trader12,pokey1,kobe08,damager,egorov,dragon88,ckfdbr,lisa69,blade2,audis4,nelson1,nibbles,23176djivanfros,mutabor,artofwar,matvei,metal666,hrfzlz,schwinn,poohbea,seven77,thinker,123456789qwerty,sobriety,jakers,karamelka,vbkfyf,volodin,iddqd,dale03,roberto1,lizaveta,qqqqqq1,cathy1,08154711,davidm,quixote,bluenote,tazdevil,katrina1,bigfoot1,bublik,marma,olechka,fatpussy,marduk,arina,nonrev67,qqqq1111,camill,wtpfhm,truffle,fairview,mashina,voltaire,qazxswedcvfr,dickface,grassy,lapdance,bosstone,crazy8,yackwin,mobil,danielit,mounta1n,player69,bluegill,mewtwo,reverb,cnthdf,pablito,a123321,elena1,warcraft1,orland,ilovemyself,rfntyjr,joyride,schoo,dthjxrf,thetachi,goodtimes,blacksun,humpty,chewbacca,guyute,123xyz,lexicon,blue45,qwe789,galatasaray,centrino,hendrix1,deimos,saturn5,craig1,vlad1996,sarah123,tupelo,ljrnjh,hotwife,bingos,1231231,nicholas1,flamer,pusher,1233210,heart1,hun999,jiggy,giddyup,oktober,123456zxc,budda,galahad,glamur,samwise,oneton,bugsbunny,dominic1,scooby2,freetime,internat,159753852,sc00ter,wantit,mazinger,inflames,laracrof,greedo,014789,godofwar,repytwjd,water123,fishnet,venus1,wallace1,tenpin,paula1,1475963,mania,novikov,qwertyasdfgh,goldmine,homies,777888999,8balls,holeinon,paper1,samael,013579,mansur,nikit,ak1234,blueline,polska1,hotcock,laredo,windstar,vbkbwbz,raider1,newworld,lfybkrf,catfish1,shorty1,piranha,treacle,royale,2234562,smurfs,minion,cadence,flapjack,123456p,sydne,135531,robinhoo,nasdaq,decatur,cyberonline,newage,gemstone,jabba,touchme,hooch,pigdog,indahous,fonzie,zebra1,juggle,patrick2,nihongo,hitomi,oldnavy,qwerfdsa,ukraina,shakti,allure,kingrich,diane1,canad,piramide,hottie1,clarion,college1,5641110,connect1,therion,clubber,velcro,dave1,astra1,13579-,astroboy,skittle,isgreat,photoes,cvzefh1gkc,001100,2cool4u,7555545,ginger12,2wsxcde3,camaro69,invader,domenow,asd1234,colgate,qwertasdfg,jack123,pass01,maxman,bronte,whkzyc,peter123,bogie,yecgaa,abc321,1qay2wsx,enfield,camaroz2,trashman,bonefish,system32,azsxdcfvgb,peterose,iwantyou,dick69,temp1234,blastoff,capa200,connie1,blazin,12233445,sexybaby,123456j,brentfor,pheasant,hommer,jerryg,thunders,august1,lager,kapusta,boobs1,nokia5300,rocco1,xytfu7,stars1,tugger,123sas,blingbling,1bubba,0wnsyo0,1george,baile,richard2,habana,1diamond,sensatio,1golfer,maverick1,1chris,clinton1,michael7,dragons1,sunrise1,pissant,fatim,mopar1,levani,rostik,pizzapie,987412365,oceans11,748159263,cum4me,palmetto,4r3e2w1q,paige1,muncher,arsehole,kratos,gaffer,banderas,billys,prakash,crabby,bungie,silver12,caddis,spawn1,xboxlive,sylvania,littlebi,524645,futura,valdemar,isacs155,prettygirl,big123,555444,slimer,chicke,newstyle,skypilot,sailormoon,fatluvr69,jetaime,sitruc,jesuschrist,sameer,bear12,hellion,yendor,country1,etnies,conejo,jedimast,darkknight,toobad,yxcvbn,snooks,porn4life,calvary,alfaromeo,ghostman,yannick,fnkfynblf,vatoloco,homebase,5550666,barret,1111111111zz,odysseus,edwardss,favre4,jerrys,crybaby,xsw21qaz,firestor,spanks,indians1,squish,kingair,babycakes,haters,sarahs,212223,teddyb,xfactor,cumload,rhapsody,death123,three3,raccoon,thomas2,slayer66,1q2q3q4q5q,thebes,mysterio,thirdeye,orkiox.,nodoubt,bugsy,schweiz,dima1996,angels1,darkwing,jeronimo,moonpie,ronaldo9,peaches2,mack10,manish,denise1,fellowes,carioca,taylor12,epaulson,makemoney,oc247ngucz,kochanie,3edcvfr4,vulture,1qw23e,1234567z,munchie,picard1,xthtgfirf,sportste,psycho1,tahoe1,creativ,perils,slurred,hermit,scoob,diesel1,cards1,wipeout,weeble,integra1,out3xf,powerpc,chrism,kalle,ariadne,kailua,phatty,dexter1,fordman,bungalow,paul123,compa,train1,thejoker,jys6wz,pussyeater,eatmee,sludge,dominus,denisa,tagheuer,yxcvbnm,bill1,ghfdlf,300zx,nikita123,carcass,semaj,ramone,muenchen,animal1,greeny,annemari,dbrf134,jeepcj7,mollys,garten,sashok,ironmaid,coyotes,astoria,george12,westcoast,primetim,123456o,panchito,rafae,japan1,framer,auralo,tooshort,egorova,qwerty22,callme,medicina,warhawk,w1w2w3w4,cristia,merli,alex22,kawaii,chatte,wargames,utvols,muaddib,trinket,andreas1,jjjjj1,cleric,scooters,cuntlick,gggggg1,slipknot1,235711,handcuff,stussy,guess1,leiceste,ppppp1,passe,lovegun,chevyman,hugecock,driver1,buttsex,psychnaut1,cyber1,black2,alpha12,melbourn,man123,metalman,yjdsqujl,blondi,bungee,freak1,stomper,caitlin1,nikitina,flyaway,prikol,begood,desperad,aurelius,john1234,whosyourdaddy,slimed123,bretagne,den123,hotwheel,king123,roodypoo,izzicam,save13tx,warpten,nokia3310,samolet,ready1,coopers,scott123,bonito,1aaaaa,yomomma,dawg1,rache,itworks,asecret,fencer,451236,polka,olivetti,sysadmin,zepplin,sanjuan,479373,lickem,hondacrx,pulamea,future1,naked1,sexyguy,w4g8at,lollol1,declan,runner1,rumple,daddy123,4snz9g,grandprix,calcio,whatthefuck,nagrom,asslick,pennst,negrit,squiggy,1223334444,police22,giovann,toronto1,tweet,yardbird,seagate,truckers,554455,scimitar,pescator,slydog,gaysex,dogfish,fuck777,12332112,qazxswed,morkovka,daniela1,imback,horny69,789123456,123456789w,jimmy2,bagger,ilove69,nikolaus,atdhfkm,rebirth,1111aaaa,pervasive,gjgeufq,dte4uw,gfhnbpfy,skeletor,whitney1,walkman,delorean,disco1,555888,as1234,ishikawa,fuck12,reaper1,dmitrii,bigshot,morrisse,purgen,qwer4321,itachi,willys,123123qwe,kisska,roma123,trafford,sk84life,326159487,pedros,idiom,plover,bebop,159875321,jailbird,arrowhea,qwaszx123,zaxscdvf,catlover,bakers,13579246,bones69,vermont1,helloyou,simeon,chevyz71,funguy,stargaze,parolparol,steph1,bubby,apathy,poppet,laxman,kelly123,goodnews,741236,boner1,gaetano,astonvilla,virtua,luckyboy,rocheste,hello2u,elohim,trigger1,cstrike,pepsicola,miroslav,96385274,fistfuck,cheval,magyar,svetlanka,lbfyjxrf,mamedov,123123123q,ronaldo1,scotty1,1nicole,pittbull,fredd,bbbbb1,dagwood,gfhkfvtyn,ghblehrb,logan5,1jordan,sexbomb,omega2,montauk,258741,dtythf,gibbon,winamp,thebomb,millerli,852654,gemin,baldy,halflife2,dragon22,mulberry,morrigan,hotel6,zorglub,surfin,951159,excell,arhangel,emachine,moses1,968574,reklama,bulldog2,cuties,barca,twingo,saber,elite11,redtruck,casablan,ashish,moneyy,pepper12,cnhtktw,rjcnbr,arschloch,phenix,cachorro,sunita,madoka,joselui,adams1,mymoney,hemicuda,fyutkjr,jake12,chicas,eeeee1,sonnyboy,smarties,birdy,kitten1,cnfcbr,island1,kurosaki,taekwond,konfetka,bennett1,omega3,jackson2,fresca,minako,octavian,kban667,feyenoord,muaythai,jakedog,fktrcfylhjdyf,1357911q,phuket,sexslave,fktrcfylhjdbx,asdfjk,89015173454,qwerty00,kindbud,eltoro,sex6969,nyknicks,12344321q,caballo,evenflow,hoddle,love22,metro1,mahalko,lawdog,tightass,manitou,buckie,whiskey1,anton123,335533,password4,primo,ramair,timbo,brayden,stewie,pedro1,yorkshir,ganster,hellothe,tippy1,direwolf,genesi,rodrig,enkeli,vaz21099,sorcerer,winky,oneshot,boggle,serebro,badger1,japanes,comicbook,kamehame,alcat,denis123,echo45,sexboy,gr8ful,hondo,voetbal,blue33,2112rush,geneviev,danni1,moosey,polkmn,matthew7,ironhead,hot2trot,ashley12,sweeper,imogen,blue21,retep,stealth1,guitarra,bernard1,tatian,frankfur,vfnhbwf,slacking,haha123,963741,asdasdas,katenok,airforce1,123456789qaz,shotgun1,12qwasz,reggie1,sharo,976431,pacifica,dhip6a,neptun,kardon,spooky1,beaut,555555a,toosweet,tiedup,11121314,startac,lover69,rediska,pirata,vfhrbp,1234qwerty,energize,hansolo1,playbo,larry123,oemdlg,cnjvfnjkju,a123123,alexan,gohawks,antonius,fcbayern,mambo,yummy1,kremlin,ellen1,tremere,vfiekz,bellevue,charlie9,izabella,malishka,fermat,rotterda,dawggy,becket,chasey,kramer1,21125150,lolit,cabrio,schlong,arisha,verity,3some,favorit,maricon,travelle,hotpants,red1234,garrett1,home123,knarf,seven777,figment,asdewq,canseco,good2go,warhol,thomas01,pionee,al9agd,panacea,chevy454,brazzers,oriole,azerty123,finalfan,patricio,northsta,rebelde,bulldo,stallone,boogie1,7uftyx,cfhfnjd,compusa,cornholi,config,deere,hoopster,sepultura,grasshop,babygurl,lesbo,diceman,proverbs,reddragon,nurbek,tigerwoo,superdup,buzzsaw,kakaroto,golgo13,edwar,123qaz123,butter1,sssss1,texas2,respekt,ou812ic,123456qaz,55555a,doctor1,mcgwire,maria123,aol999,cinders,aa1234,joness,ghbrjkmyj,makemone,sammyboy,567765,380zliki,theraven,testme,mylene,elvira26,indiglo,tiramisu,shannara,baby1,123666,gfhreh,papercut,johnmish,orange8,bogey1,mustang7,bagpipes,dimarik,vsijyjr,4637324,ravage,cogito,seven11,natashka,warzone,hr3ytm,4free,bigdee,000006,243462536,bigboi,123333,trouts,sandy123,szevasz,monica2,guderian,newlife1,ratchet,r12345,razorbac,12345i,piazza31,oddjob,beauty1,fffff1,anklet,nodrog,pepit,olivi,puravida,robert12,transam1,portman,bubbadog,steelers1,wilson1,eightball,mexico1,superboy,4rfv5tgb,mzepab,samurai1,fuckslut,colleen1,girdle,vfrcbvec,q1w2e3r4t,soldier1,19844891,alyssa1,a12345a,fidelis,skelter,nolove,mickeymouse,frehley,password69,watermel,aliska,soccer15,12345e,ladybug1,abulafia,adagio,tigerlil,takehana,hecate,bootneck,junfan,arigato,wonkette,bobby123,trustnoone,phantasm,132465798,brianjo,w12345,t34vfrc1991,deadeye,1robert,1daddy,adida,check1,grimlock,muffi,airwalk,prizrak,onclick,longbeac,ernie1,eadgbe,moore1,geniu,shadow123,bugaga,jonathan1,cjrjkjdf,orlova,buldog,talon1,westport,aenima,541233432442,barsuk,chicago2,kellys,hellbent,toughguy,iskander,skoal,whatisit,jake123,scooter2,fgjrfkbgcbc,ghandi,love13,adelphia,vjhrjdrf,adrenali,niunia,jemoeder,rainbo,all4u8,anime1,freedom7,seraph,789321,tommys,antman,firetruc,neogeo,natas,bmwm3,froggy1,paul1,mamit,bayview,gateways,kusanagi,ihateu,frederi,rock1,centurion,grizli,biggin,fish1,stalker1,3girls,ilovepor,klootzak,lollo,redsox04,kirill123,jake1,pampers,vasya,hammers1,teacup,towing,celtic1,ishtar,yingyang,4904s677075,dahc1,patriot1,patrick9,redbirds,doremi,rebecc,yoohoo,makarova,epiphone,rfgbnfy,milesd,blister,chelseafc,katana1,blackrose,1james,primrose,shock5,hard1,scooby12,c6h12o6,dustoff,boing,chisel,kamil,1william,defiant1,tyvugq,mp8o6d,aaa340,nafets,sonnet,flyhigh,242526,crewcom,love23,strike1,stairway,katusha,salamand,cupcake1,password0,007james,sunnie,multisync,harley01,tequila1,fred12,driver8,q8zo8wzq,hunter01,mozzer,temporar,eatmeraw,mrbrownxx,kailey,sycamore,flogger,tincup,rahasia,ganymede,bandera,slinger,1111122222,vander,woodys,1cowboy,khaled,jamies,london12,babyboo,tzpvaw,diogenes,budice,mavrick,135797531,cheeta,macros,squonk,blackber,topfuel,apache1,falcon16,darkjedi,cheeze,vfhvtkfl,sparco,change1,gfhfif,freestyl,kukuruza,loveme2,12345f,kozlov,sherpa,marbella,44445555,bocephus,1winner,alvar,hollydog,gonefish,iwantin,barman,godislove,amanda18,rfpfynbg,eugen,abcdef1,redhawk,thelema,spoonman,baller1,harry123,475869,tigerman,cdtnjxrf,marillio,scribble,elnino,carguy,hardhead,l2g7k3,troopers,selen,dragon76,antigua,ewtosi,ulysse,astana,paroli,cristo,carmex,marjan,bassfish,letitbe,kasparov,jay123,19933991,blue13,eyecandy,scribe,mylord,ukflbjkec,ellie1,beaver1,destro,neuken,halfpint,ameli,lilly1,satanic,xngwoj,12345trewq,asdf1,bulldogg,asakura,jesucrist,flipside,packers4,biggy,kadett,biteme69,bobdog,silverfo,saint1,bobbo,packman,knowledg,foolio,fussbal,12345g,kozerog,westcoas,minidisc,nbvcxw,martini1,alastair,rasengan,superbee,memento,porker,lena123,florenc,kakadu,bmw123,getalife,bigsky,monkee,people1,schlampe,red321,memyself,0147896325,12345678900987654321,soccer14,realdeal,gfgjxrf,bella123,juggs,doritos,celtics1,peterbilt,ghbdtnbrb,gnusmas,xcountry,ghbdtn1,batman99,deusex,gtnhjdf,blablabl,juster,marimba,love2,rerjkrf,alhambra,micros,siemens1,assmaste,moonie,dashadasha,atybrc,eeeeee1,wildrose,blue55,davidl,xrp23q,skyblue,leo123,ggggg1,bestfriend,franny,1234rmvb,fun123,rules1,sebastien,chester2,hakeem,winston2,fartripper,atlant,07831505,iluvsex,q1a2z3,larrys,009900,ghjkju,capitan,rider1,qazxsw21,belochka,andy123,hellya,chicca,maximal,juergen,password1234,howard1,quetzal,daniel123,qpwoeiruty,123555,bharat,ferrari3,numbnuts,savant,ladydog,phipsi,lovepussy,etoile,power2,mitten,britneys,chilidog,08522580,2fchbg,kinky1,bluerose,loulo,ricardo1,doqvq3,kswbdu,013cpfza,timoha,ghbdtnghbdtn,3stooges,gearhead,browns1,g00ber,super7,greenbud,kitty2,pootie,toolshed,gamers,coffe,ibill123,freelove,anasazi,sister1,jigger,natash,stacy1,weronika,luzern,soccer7,hoopla,dmoney,valerie1,canes,razdvatri,washere,greenwoo,rfhjkbyf,anselm,pkxe62,maribe,daniel2,maxim1,faceoff,carbine,xtkjdtr,buddy12,stratos,jumpman,buttocks,aqswdefr,pepsis,sonechka,steeler1,lanman,nietzsch,ballz,biscuit1,wrxsti,goodfood,juventu,federic,mattman,vika123,strelec,jledfyxbr,sideshow,4life,fredderf,bigwilly,12347890,12345671,sharik,bmw325i,fylhtqrf,dannon4,marky,mrhappy,drdoom,maddog1,pompier,cerbera,goobers,howler,jenny69,evely,letitrid,cthuttdyf,felip,shizzle,golf12,t123456,yamah,bluearmy,squishy,roxan,10inches,dollface,babygirl1,blacksta,kaneda,lexingto,canadien,222888,kukushka,sistema,224422,shadow69,ppspankp,mellons,barbie1,free4all,alfa156,lostone,2w3e4r5t,painkiller,robbie1,binger,8dihc6,jaspe,rellik,quark,sogood,hoopstar,number2,snowy1,dad2ownu,cresta,qwe123asd,hjvfyjdf,gibsonsg,qbg26i,dockers,grunge,duckling,lfiekz,cuntsoup,kasia1,1tigger,woaini,reksio,tmoney,firefighter,neuron,audia3,woogie,powerboo,powermac,fatcock,12345666,upnfmc,lustful,porn1,gotlove,amylee,kbytqrf,11924704,25251325,sarasota,sexme,ozzie1,berliner,nigga1,guatemal,seagulls,iloveyou!,chicken2,qwerty21,010203040506,1pillow,libby1,vodoley,backlash,piglets,teiubesc,019283,vonnegut,perico,thunde,buckey,gtxtymrf,manunite,iiiii1,lost4815162342,madonn,270873_,britney1,kevlar,piano1,boondock,colt1911,salamat,doma77ns,anuradha,cnhjqrf,rottweil,newmoon,topgun1,mauser,fightclu,birthday21,reviewpa,herons,aassddff,lakers32,melissa2,vredina,jiujitsu,mgoblue,shakey,moss84,12345zxcvb,funsex,benji1,garci,113322,chipie,windex,nokia5310,pwxd5x,bluemax,cosita,chalupa,trotsky,new123,g3ujwg,newguy,canabis,gnaget,happydays,felixx,1patrick,cumface,sparkie,kozlova,123234,newports,broncos7,golf18,recycle,hahah,harrypot,cachondo,open4me,miria,guessit,pepsione,knocker,usmc1775,countach,playe,wiking,landrover,cracksevi,drumline,a7777777,smile123,manzana,panty,liberta,pimp69,dolfan,quality1,schnee,superson,elaine22,webhompass,mrbrownx,deepsea,4wheel,mamasita,rockport,rollie,myhome,jordan12,kfvgjxrf,hockey12,seagrave,ford1,chelsea2,samsara,marissa1,lamesa,mobil1,piotrek,tommygun,yyyyy1,wesley1,billy123,homersim,julies,amanda12,shaka,maldini,suzenet,springst,iiiiii1,yakuza,111111aa,westwind,helpdesk,annamari,bringit,hopefull,hhhhhhh1,saywhat,mazdarx8,bulova,jennife1,baikal,gfhjkmxbr,victoria1,gizmo123,alex99,defjam,2girls,sandrock,positivo,shingo,syncmast,opensesa,silicone,fuckina,senna1,karlos,duffbeer,montagne,gehrig,thetick,pepino,hamburge,paramedic,scamp,smokeweed,fabregas,phantoms,venom121293,2583458,badone,porno69,manwhore,vfvf123,notagain,vbktyf,rfnthbyrf,wildblue,kelly001,dragon66,camell,curtis1,frolova,1212123,dothedew,tyler123,reddrago,planetx,promethe,gigolo,1001001,thisone,eugeni,blackshe,cruzazul,incognito,puller,joonas,quick1,spirit1,gazza,zealot,gordito,hotrod1,mitch1,pollito,hellcat,mythos,duluth,383pdjvl,easy123,hermos,binkie,its420,lovecraf,darien,romina,doraemon,19877891,syclone,hadoken,transpor,ichiro,intell,gargamel,dragon2,wavpzt,557744,rjw7x4,jennys,kickit,rjynfrn,likeit,555111,corvus,nec3520,133113,mookie1,bochum,samsung2,locoman0,154ugeiu,vfvfbgfgf,135792,[start],tenni,20001,vestax,hufmqw,neveragain,wizkid,kjgfnf,nokia6303,tristen,saltanat,louie1,gandalf2,sinfonia,alpha3,tolstoy,ford150,f00bar,1hello,alici,lol12,riker1,hellou,333888,1hunter,qw1234,vibrator,mets86,43211234,gonzale,cookies1,sissy1,john11,bubber,blue01,cup2006,gtkmvtyb,nazareth,heybaby,suresh,teddie,mozilla,rodeo1,madhouse,gamera,123123321,naresh,dominos,foxtrot1,taras,powerup,kipling,jasonb,fidget,galena,meatman,alpacino,bookmark,farting,humper,titsnass,gorgon,castaway,dianka,anutka,gecko1,fucklove,connery,wings1,erika1,peoria,moneymaker,ichabod,heaven1,paperboy,phaser,breakers,nurse1,westbrom,alex13,brendan1,123asd123,almera,grubber,clarkie,thisisme,welkom01,51051051051,crypto,freenet,pflybwf,black12,testme2,changeit,autobahn,attica,chaoss,denver1,tercel,gnasher23,master2,vasilii,sherman1,gomer,bigbuck,derek1,qwerzxcv,jumble,dragon23,art131313,numark,beasty,cxfcnmttcnm,updown,starion,glist,sxhq65,ranger99,monkey7,shifter,wolves1,4r5t6y,phone1,favorite5,skytommy,abracada,1martin,102030405060,gatech,giulio,blacktop,cheer1,africa1,grizzly1,inkjet,shemales,durango1,booner,11223344q,supergirl,vanyarespekt,dickless,srilanka,weaponx,6string,nashvill,spicey,boxer1,fabien,2sexy2ho,bowhunt,jerrylee,acrobat,tawnee,ulisse,nolimit8,l8g3bkde,pershing,gordo1,allover,gobrowns,123432,123444,321456987,spoon1,hhhhh1,sailing1,gardenia,teache,sexmachine,tratata,pirate1,niceone,jimbos,314159265,qsdfgh,bobbyy,ccccc1,carla1,vjkjltw,savana,biotech,frigid,123456789g,dragon10,yesiam,alpha06,oakwood,tooter,winsto,radioman,vavilon,asnaeb,google123,nariman,kellyb,dthyjcnm,password6,parol1,golf72,skate1,lthtdj,1234567890s,kennet,rossia,lindas,nataliya,perfecto,eminem1,kitana,aragorn1,rexona,arsenalf,planot,coope,testing123,timex,blackbox,bullhead,barbarian,dreamon,polaris1,cfvjktn,frdfhbev,gametime,slipknot666,nomad1,hfgcjlbz,happy69,fiddler,brazil1,joeboy,indianali,113355,obelisk,telemark,ghostrid,preston1,anonim,wellcome,verizon1,sayangku,censor,timeport,dummies,adult1,nbnfybr,donger,thales,iamgay,sexy1234,deadlift,pidaras,doroga,123qwe321,portuga,asdfgh12,happys,cadr14nu,pi3141,maksik,dribble,cortland,darken,stepanova,bommel,tropic,sochi2014,bluegras,shahid,merhaba,nacho,2580456,orange44,kongen,3cudjz,78girl,my3kids,marcopol,deadmeat,gabbie,saruman,jeepman,freddie1,katie123,master99,ronal,ballbag,centauri,killer7,xqgann,pinecone,jdeere,geirby,aceshigh,55832811,pepsimax,rayden,razor1,tallyho,ewelina,coldfire,florid,glotest,999333,sevenup,bluefin,limaperu,apostol,bobbins,charmed1,michelin,sundin,centaur,alphaone,christof,trial1,lions1,45645,just4you,starflee,vicki1,cougar1,green2,jellyfis,batman69,games1,hihje863,crazyzil,w0rm1,oklick,dogbite,yssup,sunstar,paprika,postov10,124578963,x24ik3,kanada,buckster,iloveamy,bear123,smiler,nx74205,ohiostat,spacey,bigbill,doudo,nikolaeva,hcleeb,sex666,mindy1,buster11,deacons,boness,njkcnsq,candy2,cracker1,turkey1,qwertyu1,gogreen,tazzzz,edgewise,ranger01,qwerty6,blazer1,arian,letmeinnow,cigar1,jjjjjj1,grigio,frien,tenchu,f9lmwd,imissyou,filipp,heathers,coolie,salem1,woodduck,scubadiv,123kat,raffaele,nikolaev,dapzu455,skooter,9inches,lthgfhjkm,gr8one,ffffff1,zujlrf,amanda69,gldmeo,m5wkqf,rfrltkf,televisi,bonjou,paleale,stuff1,cumalot,fuckmenow,climb7,mark1234,t26gn4,oneeye,george2,utyyflbq,hunting1,tracy71,ready2go,hotguy,accessno,charger1,rudedog,kmfdm,goober1,sweetie1,wtpmjgda,dimensio,ollie1,pickles1,hellraiser,mustdie,123zzz,99887766,stepanov,verdun,tokenbad,anatol,bartende,cidkid86,onkelz,timmie,mooseman,patch1,12345678c,marta1,dummy1,bethany1,myfamily,history1,178500,lsutiger,phydeaux,moren,dbrnjhjdbx,gnbxrf,uniden,drummers,abpbrf,godboy,daisy123,hogan1,ratpack,irland,tangerine,greddy,flore,sqrunch,billyjoe,q55555,clemson1,98745632,marios,ishot,angelin,access12,naruto12,lolly,scxakv,austin12,sallad,cool99,rockit,mongo1,mark22,ghbynth,ariadna,senha,docto,tyler2,mobius,hammarby,192168,anna12,claire1,pxx3eftp,secreto,greeneye,stjabn,baguvix,satana666,rhbcnbyjxrf,dallastx,garfiel,michaelj,1summer,montan,1234ab,filbert,squids,fastback,lyudmila,chucho,eagleone,kimberle,ar3yuk3,jake01,nokids,soccer22,1066ad,ballon,cheeto,review69,madeira,taylor2,sunny123,chubbs,lakeland,striker1,porche,qwertyu8,digiview,go1234,ferari,lovetits,aditya,minnow,green3,matman,cellphon,fortytwo,minni,pucara,69a20a,roman123,fuente,12e3e456,paul12,jacky,demian,littleman,jadakiss,vlad1997,franca,282860,midian,nunzio,xaccess2,colibri,jessica0,revilo,654456,harvey1,wolf1,macarena,corey1,husky1,arsen,milleniu,852147,crowes,redcat,combat123654,hugger,psalms,quixtar,ilovemom,toyot,ballss,ilovekim,serdar,james23,avenger1,serendip,malamute,nalgas,teflon,shagger,letmein6,vyjujnjxbt,assa1234,student1,dixiedog,gznybwf13,fuckass,aq1sw2de3,robroy,hosehead,sosa21,123345,ias100,teddy123,poppin,dgl70460,zanoza,farhan,quicksilver,1701d,tajmahal,depechemode,paulchen,angler,tommy2,recoil,megamanx,scarecro,nicole2,152535,rfvtgb,skunky,fatty1,saturno,wormwood,milwauke,udbwsk,sexlover,stefa,7bgiqk,gfnhbr,omar10,bratan,lbyfvj,slyfox,forest1,jambo,william3,tempus,solitari,lucydog,murzilka,qweasdzxc1,vehpbkrf,12312345,fixit,woobie,andre123,123456789x,lifter,zinaida,soccer17,andone,foxbat,torsten,apple12,teleport,123456i,leglover,bigcocks,vologda,dodger1,martyn,d6o8pm,naciona,eagleeye,maria6,rimshot,bentley1,octagon,barbos,masaki,gremio,siemen,s1107d,mujeres,bigtits1,cherr,saints1,mrpink,simran,ghzybr,ferrari2,secret12,tornado1,kocham,picolo,deneme,onelove1,rolan,fenster,1fuckyou,cabbie,pegaso,nastyboy,password5,aidana,mine2306,mike13,wetone,tigger69,ytreza,bondage1,myass,golova,tolik,happyboy,poilkj,nimda2k,rammer,rubies,hardcore1,jetset,hoops1,jlaudio,misskitt,1charlie,google12,theone1,phred,porsch,aalborg,luft4,charlie5,password7,gnosis,djgabbab,1daniel,vinny,borris,cumulus,member1,trogdor,darthmau,andrew2,ktjybl,relisys,kriste,rasta220,chgobndg,weener,qwerty66,fritter,followme,freeman1,ballen,blood1,peache,mariso,trevor1,biotch,gtfullam,chamonix,friendste,alligato,misha1,1soccer,18821221,venkat,superd,molotov,bongos,mpower,acun3t1x,dfcmrf,h4x3d,rfhfufylf,tigran,booyaa,plastic1,monstr,rfnhby,lookatme,anabolic,tiesto,simon123,soulman,canes1,skyking,tomcat1,madona,bassline,dasha123,tarheel1,dutch1,xsw23edc,qwerty123456789,imperator,slaveboy,bateau,paypal,house123,pentax,wolf666,drgonzo,perros,digger1,juninho,hellomoto,bladerun,zzzzzzz1,keebler,take8422,fffffff1,ginuwine,israe,caesar1,crack1,precious1,garand,magda1,zigazaga,321ewq,johnpaul,mama1234,iceman69,sanjeev,treeman,elric,rebell,1thunder,cochon,deamon,zoltan,straycat,uhbyuj,luvfur,mugsy,primer,wonder1,teetime,candycan,pfchfytw,fromage,gitler,salvatio,piggy1,23049307,zafira,chicky,sergeev,katze,bangers,andriy,jailbait,vaz2107,ghbhjlf,dbjktnnf,aqswde,zaratustra,asroma,1pepper,alyss,kkkkk1,ryan1,radish,cozumel,waterpol,pentium1,rosebowl,farmall,steinway,dbrekz,baranov,jkmuf,another1,chinacat,qqqqqqq1,hadrian,devilmaycry4,ratbag,teddy2,love21,pullings,packrat,robyn1,boobo,qw12er34,tribe1,rosey,celestia,nikkie,fortune12,olga123,danthema,gameon,vfrfhjys,dilshod,henry14,jenova,redblue,chimaera,pennywise,sokrates,danimal,qqaazz,fuaqz4,killer2,198200,tbone1,kolyan,wabbit,lewis1,maxtor,egoist,asdfas,spyglass,omegas,jack12,nikitka,esperanz,doozer,matematika,wwwww1,ssssss1,poiu0987,suchka,courtney1,gungho,alpha2,fktyjxrf,summer06,bud420,devildriver,heavyd,saracen,foucault,choclate,rjdfktyrj,goblue1,monaro,jmoney,dcpugh,efbcapa201,qqh92r,pepsicol,bbb747,ch5nmk,honeyb,beszoptad,tweeter,intheass,iseedeadpeople,123dan,89231243658s,farside1,findme,smiley1,55556666,sartre,ytcnjh,kacper,costarica,134679258,mikeys,nolimit9,vova123,withyou,5rxypn,love143,freebie,rescue1,203040,michael6,12monkey,redgreen,steff,itstime,naveen,good12345,acidrain,1dawg,miramar,playas,daddio,orion2,852741,studmuff,kobe24,senha123,stephe,mehmet,allalone,scarface1,helloworld,smith123,blueyes,vitali,memphis1,mybitch,colin1,159874,1dick,podaria,d6wnro,brahms,f3gh65,dfcbkmtd,xxxman,corran,ugejvp,qcfmtz,marusia,totem,arachnid,matrix2,antonell,fgntrf,zemfira,christos,surfing1,naruto123,plato1,56qhxs,madzia,vanille,043aaa,asq321,mutton,ohiostate,golde,cdznjckfd,rhfcysq,green5,elephan,superdog,jacqueli,bollock,lolitas,nick12,1orange,maplelea,july23,argento,waldorf,wolfer,pokemon12,zxcvbnmm,flicka,drexel,outlawz,harrie,atrain,juice2,falcons1,charlie6,19391945,tower1,dragon21,hotdamn,dirtyboy,love4ever,1ginger,thunder2,virgo1,alien1,bubblegu,4wwvte,123456789qqq,realtime,studio54,passss,vasilek,awsome,giorgia,bigbass,2002tii,sunghile,mosdef,simbas,count0,uwrl7c,summer05,lhepmz,ranger21,sugarbea,principe,5550123,tatanka,9638v,cheerios,majere,nomercy,jamesbond007,bh90210,7550055,jobber,karaganda,pongo,trickle,defamer,6chid8,1q2a3z,tuscan,nick123,.adgjm,loveyo,hobbes1,note1234,shootme,171819,loveporn,9788960,monty123,fabrice,macduff,monkey13,shadowfa,tweeker,hanna1,madball,telnet,loveu2,qwedcxzas,thatsit,vfhcbr,ptfe3xxp,gblfhfcs,ddddddd1,hakkinen,liverune,deathsta,misty123,suka123,recon1,inferno1,232629,polecat,sanibel,grouch,hitech,hamradio,rkfdbfnehf,vandam,nadin,fastlane,shlong,iddqdidkfa,ledzeppelin,sexyfeet,098123,stacey1,negras,roofing,lucifer1,ikarus,tgbyhn,melnik,barbaria,montego,twisted1,bigal1,jiggle,darkwolf,acerview,silvio,treetops,bishop1,iwanna,pornsite,happyme,gfccdjhl,114411,veritech,batterse,casey123,yhntgb,mailto,milli,guster,q12345678,coronet,sleuth,fuckmeha,armadill,kroshka,geordie,lastochka,pynchon,killall,tommy123,sasha1996,godslove,hikaru,clticic,cornbrea,vfkmdbyf,passmaster,123123123a,souris,nailer,diabolo,skipjack,martin12,hinata,mof6681,brookie,dogfight,johnso,karpov,326598,rfvbrflpt,travesti,caballer,galaxy1,wotan,antoha,art123,xakep1234,ricflair,pervert1,p00kie,ambulanc,santosh,berserker,larry33,bitch123,a987654321,dogstar,angel22,cjcbcrf,redhouse,toodles,gold123,hotspot,kennedy1,glock21,chosen1,schneide,mainman,taffy1,3ki42x,4zqauf,ranger2,4meonly,year2000,121212a,kfylsi,netzwerk,diese,picasso1,rerecz,225522,dastan,swimmer1,brooke1,blackbea,oneway,ruslana,dont4get,phidelt,chrisp,gjyxbr,xwing,kickme,shimmy,kimmy1,4815162342lost,qwerty5,fcporto,jazzbo,mierd,252627,basses,sr20det,00133,florin,howdy1,kryten,goshen,koufax,cichlid,imhotep,andyman,wrest666,saveme,dutchy,anonymou,semprini,siempre,mocha1,forest11,wildroid,aspen1,sesam,kfgekz,cbhbec,a55555,sigmanu,slash1,giggs11,vatech,marias,candy123,jericho1,kingme,123a123,drakula,cdjkjxm,mercur,oneman,hoseman,plumper,ilovehim,lancers,sergey1,takeshi,goodtogo,cranberr,ghjcnj123,harvick,qazxs,1972chev,horsesho,freedom3,letmein7,saitek,anguss,vfvfgfgfz,300000,elektro,toonporn,999111999q,mamuka,q9umoz,edelweis,subwoofer,bayside,disturbe,volition,lucky3,12345678z,3mpz4r,march1,atlantida,strekoza,seagrams,090909t,yy5rbfsc,jack1234,sammy12,sampras,mark12,eintrach,chaucer,lllll1,nochance,whitepower,197000,lbvekz,passer,torana,12345as,pallas,koolio,12qw34,nokia8800,findout,1thomas,mmmmm1,654987,mihaela,chinaman,superduper,donnas,ringo1,jeroen,gfdkjdf,professo,cdtnrf,tranmere,tanstaaf,himera,ukflbfnjh,667788,alex32,joschi,w123456,okidoki,flatline,papercli,super8,doris1,2good4u,4z34l0ts,pedigree,freeride,gsxr1100,wulfgar,benjie,ferdinan,king1,charlie7,djdxbr,fhntvbq,ripcurl,2wsx1qaz,kingsx,desade,sn00py,loveboat,rottie,evgesha,4money,dolittle,adgjmpt,buzzers,brett1,makita,123123qweqwe,rusalka,sluts1,123456e,jameson1,bigbaby,1z2z3z,ckjybr,love4u,fucker69,erhfbyf,jeanluc,farhad,fishfood,merkin,giant1,golf69,rfnfcnhjaf,camera1,stromb,smoothy,774411,nylon,juice1,rfn.irf,newyor,123456789t,marmot,star11,jennyff,jester1,hisashi,kumquat,alex777,helicopt,merkur,dehpye,cummin,zsmj2v,kristjan,april12,englan,honeypot,badgirls,uzumaki,keines,p12345,guita,quake1,duncan1,juicer,milkbone,hurtme,123456789b,qq123456789,schwein,p3wqaw,54132442,qwertyytrewq,andreeva,ruffryde,punkie,abfkrf,kristinka,anna1987,ooooo1,335533aa,umberto,amber123,456123789,456789123,beelch,manta,peeker,1112131415,3141592654,gipper,wrinkle5,katies,asd123456,james11,78n3s5af,michael0,daboss,jimmyb,hotdog1,david69,852123,blazed,sickan,eljefe,2n6wvq,gobills,rfhfcm,squeaker,cabowabo,luebri,karups,test01,melkor,angel777,smallvil,modano,olorin,4rkpkt,leslie1,koffie,shadows1,littleon,amiga1,topeka,summer20,asterix1,pitstop,aloysius,k12345,magazin,joker69,panocha,pass1word,1233214,ironpony,368ejhih,88keys,pizza123,sonali,57np39,quake2,1234567890qw,1020304,sword1,fynjif,abcde123,dfktyjr,rockys,grendel1,harley12,kokakola,super2,azathoth,lisa123,shelley1,girlss,ibragim,seven1,jeff24,1bigdick,dragan,autobot,t4nvp7,omega123,900000,hecnfv,889988,nitro1,doggie1,fatjoe,811pahc,tommyt,savage1,pallino,smitty1,jg3h4hfn,jamielee,1qazwsx,zx123456,machine1,asdfgh123,guinnes,789520,sharkman,jochen,legend1,sonic2,extreme1,dima12,photoman,123459876,nokian95,775533,vaz2109,april10,becks,repmvf,pooker,qwer12345,themaster,nabeel,monkey10,gogetit,hockey99,bbbbbbb1,zinedine,dolphin2,anelka,1superma,winter01,muggsy,horny2,669966,kuleshov,jesusis,calavera,bullet1,87t5hdf,sleepers,winkie,vespa,lightsab,carine,magister,1spider,shitbird,salavat,becca1,wc18c2,shirak,galactus,zaskar,barkley1,reshma,dogbreat,fullsail,asasa,boeder,12345ta,zxcvbnm12,lepton,elfquest,tony123,vkaxcs,savatage,sevilia1,badkitty,munkey,pebbles1,diciembr,qapmoc,gabriel2,1qa2ws3e,cbcmrb,welldone,nfyufh,kaizen,jack11,manisha,grommit,g12345,maverik,chessman,heythere,mixail,jjjjjjj1,sylvia1,fairmont,harve,skully,global1,youwish,pikachu1,badcat,zombie1,49527843,ultra1,redrider,offsprin,lovebird,153426,stymie,aq1sw2,sorrento,0000001,r3ady41t,webster1,95175,adam123,coonass,159487,slut1,gerasim,monkey99,slutwife,159963,1pass1page,hobiecat,bigtymer,all4you,maggie2,olamide,comcast1,infinit,bailee,vasileva,.ktxrf,asdfghjkl1,12345678912,setter,fuckyou7,nnagqx,lifesuck,draken,austi,feb2000,cable1,1234qwerasdf,hax0red,zxcv12,vlad7788,nosaj,lenovo,underpar,huskies1,lovegirl,feynman,suerte,babaloo,alskdjfhg,oldsmobi,bomber1,redrover,pupuce,methodman,phenom,cutegirl,countyli,gretsch,godisgood,bysunsu,hardhat,mironova,123qwe456rty,rusty123,salut,187211,555666777,11111z,mahesh,rjntyjxtr,br00klyn,dunce1,timebomb,bovine,makelove,littlee,shaven,rizwan,patrick7,42042042,bobbijo,rustem,buttmunc,dongle,tiger69,bluecat,blackhol,shirin,peaces,cherub,cubase,longwood,lotus7,gwju3g,bruin,pzaiu8,green11,uyxnyd,seventee,dragon5,tinkerbel,bluess,bomba,fedorova,joshua2,bodyshop,peluche,gbpacker,shelly1,d1i2m3a4,ghtpbltyn,talons,sergeevna,misato,chrisc,sexmeup,brend,olddog,davros,hazelnut,bridget1,hzze929b,readme,brethart,wild1,ghbdtnbr1,nortel,kinger,royal1,bucky1,allah1,drakkar,emyeuanh,gallaghe,hardtime,jocker,tanman,flavio,abcdef123,leviatha,squid1,skeet,sexse,123456x,mom4u4mm,lilred,djljktq,ocean11,cadaver,baxter1,808state,fighton,primavera,1andrew,moogle,limabean,goddess1,vitalya,blue56,258025,bullride,cicci,1234567d,connor1,gsxr11,oliveoil,leonard1,legsex,gavrik,rjnjgtc,mexicano,2bad4u,goodfellas,ornw6d,mancheste,hawkmoon,zlzfrh,schorsch,g9zns4,bashful,rossi46,stephie,rfhfntkm,sellout,123fuck,stewar1,solnze,00007,thor5200,compaq12,didit,bigdeal,hjlbyf,zebulon,wpf8eu,kamran,emanuele,197500,carvin,ozlq6qwm,3syqo15hil,pennys,epvjb6,asdfghjkl123,198000,nfbcbz,jazzer,asfnhg66,zoloft,albundy,aeiou,getlaid,planet1,gjkbyjxrf,alex2000,brianb,moveon,maggie11,eieio,vcradq,shaggy1,novartis,cocoloco,dunamis,554uzpad,sundrop,1qwertyu,alfie,feliks,briand,123www,red456,addams,fhntv1998,goodhead,theway,javaman,angel01,stratoca,lonsdale,15987532,bigpimpin,skater1,issue43,muffie,yasmina,slowride,crm114,sanity729,himmel,carolcox,bustanut,parabola,masterlo,computador,crackhea,dynastar,rockbott,doggysty,wantsome,bigten,gaelle,juicy1,alaska1,etower,sixnine,suntan,froggies,nokia7610,hunter11,njnets,alicante,buttons1,diosesamo,elizabeth1,chiron,trustnoo,amatuers,tinytim,mechta,sammy2,cthulu,trs8f7,poonam,m6cjy69u35,cookie12,blue25,jordans,santa1,kalinka,mikey123,lebedeva,12345689,kissss,queenbee,vjybnjh,ghostdog,cuckold,bearshare,rjcntyrj,alinochka,ghjcnjrdfibyj,aggie1,teens1,3qvqod,dauren,tonino,hpk2qc,iqzzt580,bears85,nascar88,theboy,njqcw4,masyanya,pn5jvw,intranet,lollone,shadow99,00096462,techie,cvtifhbrb,redeemed,gocanes,62717315,topman,intj3a,cobrajet,antivirus,whyme,berserke,ikilz083,airedale,brandon2,hopkig,johanna1,danil8098,gojira,arthu,vision1,pendragon,milen,chrissie,vampiro,mudder,chris22,blowme69,omega7,surfers,goterps,italy1,baseba11,diego1,gnatsum,birdies,semenov,joker123,zenit2011,wojtek,cab4ma99,watchmen,damia,forgotte,fdm7ed,strummer,freelanc,cingular,orange77,mcdonalds,vjhjpjdf,kariya,tombston,starlet,hawaii1,dantheman,megabyte,nbvjirf,anjing,ybrjkftdbx,hotmom,kazbek,pacific1,sashimi,asd12,coorslig,yvtte545,kitte,elysium,klimenko,cobblers,kamehameha,only4me,redriver,triforce,sidorov,vittoria,fredi,dank420,m1234567,fallout2,989244342a,crazy123,crapola,servus,volvos,1scooter,griffin1,autopass,ownzyou,deviant,george01,2kgwai,boeing74,simhrq,hermosa,hardcor,griffy,rolex1,hackme,cuddles1,master3,bujhtr,aaron123,popolo,blader,1sexyred,gerry1,cronos,ffvdj474,yeehaw,bob1234,carlos2,mike77,buckwheat,ramesh,acls2h,monster2,montess,11qq22ww,lazer,zx123456789,chimpy,masterch,sargon,lochness,archana,1234qwert,hbxfhl,sarahb,altoid,zxcvbn12,dakot,caterham,dolomite,chazz,r29hqq,longone,pericles,grand1,sherbert,eagle3,pudge,irontree,synapse,boome,nogood,summer2,pooki,gangsta1,mahalkit,elenka,lbhtrnjh,dukedog,19922991,hopkins1,evgenia,domino1,x123456,manny1,tabbycat,drake1,jerico,drahcir,kelly2,708090a,facesit,11c645df,mac123,boodog,kalani,hiphop1,critters,hellothere,tbirds,valerka,551scasi,love777,paloalto,mrbrown,duke3d,killa1,arcturus,spider12,dizzy1,smudger,goddog,75395,spammy,1357997531,78678,datalife,zxcvbn123,1122112211,london22,23dp4x,rxmtkp,biggirls,ownsu,lzbs2twz,sharps,geryfe,237081a,golakers,nemesi,sasha1995,pretty1,mittens1,d1lakiss,speedrac,gfhjkmm,sabbat,hellrais,159753258,qwertyuiop123,playgirl,crippler,salma,strat1,celest,hello5,omega5,cheese12,ndeyl5,edward12,soccer3,cheerio,davido,vfrcbr,gjhjctyjr,boscoe,inessa,shithole,ibill,qwepoi,201jedlz,asdlkj,davidk,spawn2,ariel1,michael4,jamie123,romantik,micro1,pittsbur,canibus,katja,muhtar,thomas123,studboy,masahiro,rebrov,patrick8,hotboys,sarge1,1hammer,nnnnn1,eistee,datalore,jackdani,sasha2010,mwq6qlzo,cmfnpu,klausi,cnhjbntkm,andrzej,ilovejen,lindaa,hunter123,vvvvv1,novembe,hamster1,x35v8l,lacey1,1silver,iluvporn,valter,herson,alexsandr,cojones,backhoe,womens,777angel,beatit,klingon1,ta8g4w,luisito,benedikt,maxwel,inspecto,zaq12ws,wladimir,bobbyd,peterj,asdfg12,hellspawn,bitch69,nick1234,golfer23,sony123,jello1,killie,chubby1,kodaira52,yanochka,buckfast,morris1,roaddogg,snakeeye,sex1234,mike22,mmouse,fucker11,dantist,brittan,vfrfhjdf,doc123,plokijuh,emerald1,batman01,serafim,elementa,soccer9,footlong,cthuttdbx,hapkido,eagle123,getsmart,getiton,batman2,masons,mastiff,098890,cfvfhf,james7,azalea,sherif,saun24865709,123red,cnhtrjpf,martina1,pupper,michael5,alan12,shakir,devin1,ha8fyp,palom,mamulya,trippy,deerhunter,happyone,monkey77,3mta3,123456789f,crownvic,teodor,natusik,0137485,vovchik,strutter,triumph1,cvetok,moremone,sonnen,screwbal,akira1,sexnow,pernille,independ,poopies,samapi,kbcbxrf,master22,swetlana,urchin,viper2,magica,slurpee,postit,gilgames,kissarmy,clubpenguin,limpbizk,timber1,celin,lilkim,fuckhard,lonely1,mom123,goodwood,extasy,sdsadee23,foxglove,malibog,clark1,casey2,shell1,odense,balefire,dcunited,cubbie,pierr,solei,161718,bowling1,areyukesc,batboy,r123456,1pionee,marmelad,maynard1,cn42qj,cfvehfq,heathrow,qazxcvbn,connecti,secret123,newfie,xzsawq21,tubitzen,nikusha,enigma1,yfcnz123,1austin,michaelc,splunge,wanger,phantom2,jason2,pain4me,primetime21,babes1,liberte,sugarray,undergro,zonker,labatts,djhjyf,watch1,eagle5,madison2,cntgfirf,sasha2,masterca,fiction7,slick50,bruins1,sagitari,12481632,peniss,insuranc,2b8riedt,12346789,mrclean,ssptx452,tissot,q1w2e3r4t5y6u7,avatar1,comet1,spacer,vbrjkf,pass11,wanker1,14vbqk9p,noshit,money4me,sayana,fish1234,seaways,pipper,romeo123,karens,wardog,ab123456,gorilla1,andrey123,lifesucks,jamesr,4wcqjn,bearman,glock22,matt11,dflbvrf,barbi,maine1,dima1997,sunnyboy,6bjvpe,bangkok1,666666q,rafiki,letmein0,0raziel0,dalla,london99,wildthin,patrycja,skydog,qcactw,tmjxn151,yqlgr667,jimmyd,stripclub,deadwood,863abgsg,horses1,qn632o,scatman,sonia1,subrosa,woland,kolya,charlie4,moleman,j12345,summer11,angel11,blasen,sandal,mynewpas,retlaw,cambria,mustang4,nohack04,kimber45,fatdog,maiden1,bigload,necron,dupont24,ghost123,turbo2,.ktymrf,radagast,balzac,vsevolod,pankaj,argentum,2bigtits,mamabear,bumblebee,mercury7,maddie1,chomper,jq24nc,snooky,pussylic,1lovers,taltos,warchild,diablo66,jojo12,sumerki,aventura,gagger,annelies,drumset,cumshots,azimut,123580,clambake,bmw540,birthday54,psswrd,paganini,wildwest,filibert,teaseme,1test,scampi,thunder5,antosha,purple12,supersex,hhhhhh1,brujah,111222333a,13579a,bvgthfnjh,4506802a,killians,choco,qqqwwweee,raygun,1grand,koetsu13,sharp1,mimi92139,fastfood,idontcare,bluered,chochoz,4z3al0ts,target1,sheffiel,labrat,stalingrad,147123,cubfan,corvett1,holden1,snapper1,4071505,amadeo,pollo,desperados,lovestory,marcopolo,mumbles,familyguy,kimchee,marcio,support1,tekila,shygirl1,trekkie,submissi,ilaria,salam,loveu,wildstar,master69,sales1,netware,homer2,arseniy,gerrity1,raspberr,atreyu,stick1,aldric,tennis12,matahari,alohomora,dicanio,michae1,michaeld,666111,luvbug,boyscout,esmerald,mjordan,admiral1,steamboa,616913,ybhdfyf,557711,555999,sunray,apokalipsis,theroc,bmw330,buzzy,chicos,lenusik,shadowma,eagles05,444222,peartree,qqq123,sandmann,spring1,430799,phatass,andi03,binky1,arsch,bamba,kenny123,fabolous,loser123,poop12,maman,phobos,tecate,myxworld4,metros,cocorico,nokia6120,johnny69,hater,spanked,313233,markos,love2011,mozart1,viktoriy,reccos,331234,hornyone,vitesse,1um83z,55555q,proline,v12345,skaven,alizee,bimini,fenerbahce,543216,zaqqaz,poi123,stabilo,brownie1,1qwerty1,dinesh,baggins1,1234567t,davidkin,friend1,lietuva,octopuss,spooks,12345qq,myshit,buttface,paradoxx,pop123,golfin,sweet69,rfghbp,sambuca,kayak1,bogus1,girlz,dallas12,millers,123456zx,operatio,pravda,eternal1,chase123,moroni,proust,blueduck,harris1,redbarch,996699,1010101,mouche,millenni,1123456,score1,1234565,1234576,eae21157,dave12,pussyy,gfif1991,1598741,hoppy,darrian,snoogins,fartface,ichbins,vfkbyrf,rusrap,2741001,fyfrjylf,aprils,favre,thisis,bannana,serval,wiggum,satsuma,matt123,ivan123,gulmira,123zxc123,oscar2,acces,annie2,dragon0,emiliano,allthat,pajaro,amandine,rawiswar,sinead,tassie,karma1,piggys,nokias,orions,origami,type40,mondo,ferrets,monker,biteme2,gauntlet,arkham,ascona,ingram01,klem1,quicksil,bingo123,blue66,plazma,onfire,shortie,spjfet,123963,thered,fire777,lobito,vball,1chicken,moosehea,elefante,babe23,jesus12,parallax,elfstone,number5,shrooms,freya,hacker1,roxette,snoops,number7,fellini,dtlmvf,chigger,mission1,mitsubis,kannan,whitedog,james01,ghjgecr,rfnfgekmnf,everythi,getnaked,prettybo,sylvan,chiller,carrera4,cowbo,biochem,azbuka,qwertyuiop1,midnight1,informat,audio1,alfred1,0range,sucker1,scott2,russland,1eagle,torben,djkrjlfd,rocky6,maddy1,bonobo,portos,chrissi,xjznq5,dexte,vdlxuc,teardrop,pktmxr,iamtheone,danijela,eyphed,suzuki1,etvww4,redtail,ranger11,mowerman,asshole2,coolkid,adriana1,bootcamp,longcut,evets,npyxr5,bighurt,bassman1,stryder,giblet,nastja,blackadd,topflite,wizar,cumnow,technolo,bassboat,bullitt,kugm7b,maksimus,wankers,mine12,sunfish,pimpin1,shearer9,user1,vjzgjxnf,tycobb,80070633pc,stanly,vitaly,shirley1,cinzia,carolyn1,angeliqu,teamo,qdarcv,aa123321,ragdoll,bonit,ladyluck,wiggly,vitara,jetbalance,12345600,ozzman,dima12345,mybuddy,shilo,satan66,erebus,warrio,090808qwe,stupi,bigdan,paul1234,chiapet,brooks1,philly1,dually,gowest,farmer1,1qa2ws3ed4rf,alberto1,beachboy,barne,aa12345,aliyah,radman,benson1,dfkthbq,highball,bonou2,i81u812,workit,darter,redhook,csfbr5yy,buttlove,episode1,ewyuza,porthos,lalal,abcd12,papero,toosexy,keeper1,silver7,jujitsu,corset,pilot123,simonsay,pinggolf,katerinka,kender,drunk1,fylhjvtlf,rashmi,nighthawk,maggy,juggernaut,larryb,cabibble,fyabcf,247365,gangstar,jaybee,verycool,123456789qw,forbidde,prufrock,12345zxc,malaika,blackbur,docker,filipe,koshechka,gemma1,djamaal,dfcbkmtdf,gangst,9988aa,ducks1,pthrfkj,puertorico,muppets,griffins,whippet,sauber,timofey,larinso,123456789zxc,quicken,qsefth,liteon,headcase,bigdadd,zxc321,maniak,jamesc,bassmast,bigdogs,1girls,123xxx,trajan,lerochka,noggin,mtndew,04975756,domin,wer123,fumanchu,lambada,thankgod,june22,kayaking,patchy,summer10,timepass,poiu1234,kondor,kakka,lament,zidane10,686xqxfg,l8v53x,caveman1,nfvthkfy,holymoly,pepita,alex1996,mifune,fighter1,asslicker,jack22,abc123abc,zaxxon,midnigh,winni,psalm23,punky,monkey22,password13,mymusic,justyna,annushka,lucky5,briann,495rus19,withlove,almaz,supergir,miata,bingbong,bradpitt,kamasutr,yfgjktjy,vanman,pegleg,amsterdam1,123a321,letmein9,shivan,korona,bmw520,annette1,scotsman,gandal,welcome12,sc00by,qpwoei,fred69,m1sf1t,hamburg1,1access,dfkmrbhbz,excalibe,boobies1,fuckhole,karamel,starfuck,star99,breakfas,georgiy,ywvxpz,smasher,fatcat1,allanon,12345n,coondog,whacko,avalon1,scythe,saab93,timon,khorne,atlast,nemisis,brady12,blenheim,52678677,mick7278,9skw5g,fleetwoo,ruger1,kissass,pussy7,scruff,12345l,bigfun,vpmfsz,yxkck878,evgeny,55667788,lickher,foothill,alesis,poppies,77777778,californi,mannie,bartjek,qhxbij,thehulk,xirt2k,angelo4ek,rfkmrekznjh,tinhorse,1david,sparky12,night1,luojianhua,bobble,nederland,rosemari,travi,minou,ciscokid,beehive,565hlgqo,alpine1,samsung123,trainman,xpress,logistic,vw198m2n,hanter,zaqwsx123,qwasz,mariachi,paska,kmg365,kaulitz,sasha12,north1,polarbear,mighty1,makeksa11,123456781,one4all,gladston,notoriou,polniypizdec110211,gosia,grandad,xholes,timofei,invalidp,speaker1,zaharov,maggiema,loislane,gonoles,br5499,discgolf,kaskad,snooper,newman1,belial,demigod,vicky1,pridurok,alex1990,tardis1,cruzer,hornie,sacramen,babycat,burunduk,mark69,oakland1,me1234,gmctruck,extacy,sexdog,putang,poppen,billyd,1qaz2w,loveable,gimlet,azwebitalia,ragtop,198500,qweas,mirela,rock123,11bravo,sprewell,tigrenok,jaredleto,vfhbif,blue2,rimjob,catwalk,sigsauer,loqse,doromich,jack01,lasombra,jonny5,newpassword,profesor,garcia1,123as123,croucher,demeter,4_life,rfhfvtkm,superman2,rogues,assword1,russia1,jeff1,mydream,z123456789,rascal1,darre,kimberl,pickle1,ztmfcq,ponchik,lovesporn,hikari,gsgba368,pornoman,chbjun,choppy,diggity,nightwolf,viktori,camar,vfhecmrf,alisa1,minstrel,wishmaster,mulder1,aleks,gogirl,gracelan,8womys,highwind,solstice,dbrnjhjdyf,nightman,pimmel,beertje,ms6nud,wwfwcw,fx3tuo,poopface,asshat,dirtyd,jiminy,luv2fuck,ptybnxtvgbjy,dragnet,pornogra,10inch,scarlet1,guido1,raintree,v123456,1aaaaaaa,maxim1935,hotwater,gadzooks,playaz,harri,brando1,defcon1,ivanna,123654a,arsenal2,candela,nt5d27,jaime1,duke1,burton1,allstar1,dragos,newpoint,albacore,1236987z,verygoodbot,1wildcat,fishy1,ptktysq,chris11,puschel,itdxtyrj,7kbe9d,serpico,jazzie,1zzzzz,kindbuds,wenef45313,1compute,tatung,sardor,gfyfcjybr,test99,toucan,meteora,lysander,asscrack,jowgnx,hevnm4,suckthis,masha123,karinka,marit,oqglh565,dragon00,vvvbbb,cheburashka,vfrfrf,downlow,unforgiven,p3e85tr,kim123,sillyboy,gold1,golfvr6,quicksan,irochka,froglegs,shortsto,caleb1,tishka,bigtitts,smurfy,bosto,dropzone,nocode,jazzbass,digdug,green7,saltlake,therat,dmitriev,lunita,deaddog,summer0,1212qq,bobbyg,mty3rh,isaac1,gusher,helloman,sugarbear,corvair,extrem,teatime,tujazopi,titanik,efyreg,jo9k2jw2,counchac,tivoli,utjvtnhbz,bebit,jacob6,clayton1,incubus1,flash123,squirter,dima2010,cock1,rawks,komatsu,forty2,98741236,cajun1,madelein,mudhoney,magomed,q111111,qaswed,consense,12345b,bakayaro,silencer,zoinks,bigdic,werwolf,pinkpuss,96321478,alfie1,ali123,sarit,minette,musics,chato,iaapptfcor,cobaka,strumpf,datnigga,sonic123,yfnecbr,vjzctvmz,pasta1,tribbles,crasher,htlbcrf,1tiger,shock123,bearshar,syphon,a654321,cubbies1,jlhanes,eyespy,fucktheworld,carrie1,bmw325is,suzuk,mander,dorina,mithril,hondo1,vfhnbyb,sachem,newton1,12345x,7777755102q,230857z,xxxsex,scubapro,hayastan,spankit,delasoul,searock6,fallout3,nilrem,24681357,pashka,voluntee,pharoh,willo,india1,badboy69,roflmao,gunslinger,lovergir,mama12,melange,640xwfkv,chaton,darkknig,bigman1,aabbccdd,harleyd,birdhouse,giggsy,hiawatha,tiberium,joker7,hello1234,sloopy,tm371855,greendog,solar1,bignose,djohn11,espanol,oswego,iridium,kavitha,pavell,mirjam,cyjdsvujljv,alpha5,deluge,hamme,luntik,turismo,stasya,kjkbnf,caeser,schnecke,tweety1,tralfaz,lambrett,prodigy1,trstno1,pimpshit,werty1,karman,bigboob,pastel,blackmen,matthew8,moomin,q1w2e,gilly,primaver,jimmyg,house2,elviss,15975321,1jessica,monaliza,salt55,vfylfhbyrf,harley11,tickleme,murder1,nurgle,kickass1,theresa1,fordtruck,pargolf,managua,inkognito,sherry1,gotit,friedric,metro2033,slk230,freeport,cigarett,492529,vfhctkm,thebeach,twocats,bakugan,yzerman1,charlieb,motoko,skiman,1234567w,pussy3,love77,asenna,buffie,260zntpc,kinkos,access20,mallard1,fuckyou69,monami,rrrrr1,bigdog69,mikola,1boomer,godzila,ginger2,dima2000,skorpion39,dima1234,hawkdog79,warrior2,ltleirf,supra1,jerusale,monkey01,333z333,666888,kelsey1,w8gkz2x1,fdfnfh,msnxbi,qwe123rty,mach1,monkey3,123456789qq,c123456,nezabudka,barclays,nisse,dasha1,12345678987654321,dima1993,oldspice,frank2,rabbitt,prettyboy,ov3ajy,iamthema,kawasak,banjo1,gtivr6,collants,gondor,hibees,cowboys2,codfish,buster2,purzel,rubyred,kayaker,bikerboy,qguvyt,masher,sseexx,kenshiro,moonglow,semenova,rosari,eduard1,deltaforce,grouper,bongo1,tempgod,1taylor,goldsink,qazxsw1,1jesus,m69fg2w,maximili,marysia,husker1,kokanee,sideout,googl,south1,plumber1,trillian,00001,1357900,farkle,1xxxxx,pascha,emanuela,bagheera,hound1,mylov,newjersey,swampfox,sakic19,torey,geforce,wu4etd,conrail,pigman,martin2,ber02,nascar2,angel69,barty,kitsune,cornet,yes90125,goomba,daking,anthea,sivart,weather1,ndaswf,scoubidou,masterchief,rectum,3364068,oranges1,copter,1samanth,eddies,mimoza,ahfywbz,celtic88,86mets,applemac,amanda11,taliesin,1angel,imhere,london11,bandit12,killer666,beer1,06225930,psylocke,james69,schumach,24pnz6kc,endymion,wookie1,poiu123,birdland,smoochie,lastone,rclaki,olive1,pirat,thunder7,chris69,rocko,151617,djg4bb4b,lapper,ajcuivd289,colole57,shadow7,dallas21,ajtdmw,executiv,dickies,omegaman,jason12,newhaven,aaaaaas,pmdmscts,s456123789,beatri,applesauce,levelone,strapon,benladen,creaven,ttttt1,saab95,f123456,pitbul,54321a,sex12345,robert3,atilla,mevefalkcakk,1johnny,veedub,lilleke,nitsuj,5t6y7u8i,teddys,bluefox,nascar20,vwjetta,buffy123,playstation3,loverr,qweasd12,lover2,telekom,benjamin1,alemania,neutrino,rockz,valjean,testicle,trinity3,realty,firestarter,794613852,ardvark,guadalup,philmont,arnold1,holas,zw6syj,birthday299,dover1,sexxy1,gojets,741236985,cance,blue77,xzibit,qwerty88,komarova,qweszxc,footer,rainger,silverst,ghjcnb,catmando,tatooine,31217221027711,amalgam,69dude,qwerty321,roscoe1,74185,cubby,alfa147,perry1,darock,katmandu,darknight,knicks1,freestuff,45454,kidman,4tlved,axlrose,cutie1,quantum1,joseph10,ichigo,pentium3,rfhectkm,rowdy1,woodsink,justforfun,sveta123,pornografia,mrbean,bigpig,tujheirf,delta9,portsmou,hotbod,kartal,10111213,fkbyf001,pavel1,pistons1,necromancer,verga,c7lrwu,doober,thegame1,hatesyou,sexisfun,1melissa,tuczno18,bowhunte,gobama,scorch,campeon,bruce2,fudge1,herpderp,bacon1,redsky,blackeye,19966991,19992000,ripken8,masturba,34524815,primax,paulina1,vp6y38,427cobra,4dwvjj,dracon,fkg7h4f3v6,longview,arakis,panama1,honda2,lkjhgfdsaz,razors,steels,fqkw5m,dionysus,mariajos,soroka,enriqu,nissa,barolo,king1234,hshfd4n279,holland1,flyer1,tbones,343104ky,modems,tk421,ybrbnrf,pikapp,sureshot,wooddoor,florida2,mrbungle,vecmrf,catsdogs,axolotl,nowayout,francoi,chris21,toenail,hartland,asdjkl,nikkii,onlyyou,buckskin,fnord,flutie,holen1,rincewind,lefty1,ducky1,199000,fvthbrf,redskin1,ryno23,lostlove,19mtpgam19,abercrom,benhur,jordan11,roflcopter,ranma,phillesh,avondale,igromania,p4ssword,jenny123,tttttt1,spycams,cardigan,2112yyz,sleepy1,paris123,mopars,lakers34,hustler1,james99,matrix3,popimp,12pack,eggbert,medvedev,testit,performa,logitec,marija,sexybeast,supermanboy,iwantit,rjktcj,jeffer,svarog,halo123,whdbtp,nokia3230,heyjoe,marilyn1,speeder,ibxnsm,prostock,bennyboy,charmin,codydog,parol999,ford9402,jimmer,crayola,159357258,alex77,joey1,cayuga,phish420,poligon,specops,tarasova,caramelo,draconis,dimon,cyzkhw,june29,getbent,1guitar,jimjam,dictiona,shammy,flotsam,0okm9ijn,crapper,technic,fwsadn,rhfdxtyrj,zaq11qaz,anfield1,159753q,curious1,hip-hop,1iiiii,gfhjkm2,cocteau,liveevil,friskie,crackhead,b1afra,elektrik,lancer1,b0ll0cks,jasond,z1234567,tempest1,alakazam,asdfasd,duffy1,oneday,dinkle,qazedctgb,kasimir,happy7,salama,hondaciv,nadezda,andretti,cannondale,sparticu,znbvjd,blueice,money01,finster,eldar,moosie,pappa,delta123,neruda,bmw330ci,jeanpaul,malibu1,alevtina,sobeit,travolta,fullmetal,enamorad,mausi,boston12,greggy,smurf1,ratrace,ichiban,ilovepus,davidg,wolf69,villa1,cocopuff,football12,starfury,zxc12345,forfree,fairfiel,dreams1,tayson,mike2,dogday,hej123,oldtimer,sanpedro,clicker,mollycat,roadstar,golfe,lvbnhbq1,topdevice,a1b2c,sevastopol,calli,milosc,fire911,pink123,team3x,nolimit5,snickers1,annies,09877890,jewel1,steve69,justin11,autechre,killerbe,browncow,slava1,christer,fantomen,redcloud,elenberg,beautiful1,passw0rd1,nazira,advantag,cockring,chaka,rjpzdrf,99941,az123456,biohazar,energie,bubble1,bmw323,tellme,printer1,glavine,1starwar,coolbeans,april17,carly1,quagmire,admin2,djkujuhfl,pontoon,texmex,carlos12,thermo,vaz2106,nougat,bob666,1hockey,1john,cricke,qwerty10,twinz,totalwar,underwoo,tijger,lildevil,123q321,germania,freddd,1scott,beefy,5t4r3e2w1q,fishbait,nobby,hogger,dnstuff,jimmyc,redknapp,flame1,tinfloor,balla,nfnfhby,yukon1,vixens,batata,danny123,1zxcvbnm,gaetan,homewood,greats,tester1,green99,1fucker,sc0tland,starss,glori,arnhem,goatman,1234asd,supertra,bill123,elguapo,sexylegs,jackryan,usmc69,innow,roaddog,alukard,winter11,crawler,gogiants,rvd420,alessandr,homegrow,gobbler,esteba,valeriy,happy12,1joshua,hawking,sicnarf,waynes,iamhappy,bayadera,august2,sashas,gotti,dragonfire,pencil1,halogen,borisov,bassingw,15975346,zachar,sweetp,soccer99,sky123,flipyou,spots3,xakepy,cyclops1,dragon77,rattolo58,motorhea,piligrim,helloween,dmb2010,supermen,shad0w,eatcum,sandokan,pinga,ufkfrnbrf,roksana,amista,pusser,sony1234,azerty1,1qasw2,ghbdt,q1w2e3r4t5y6u7i8,ktutylf,brehznev,zaebali,shitass,creosote,gjrtvjy,14938685,naughtyboy,pedro123,21crack,maurice1,joesakic,nicolas1,matthew9,lbyfhf,elocin,hfcgbplzq,pepper123,tiktak,mycroft,ryan11,firefly1,arriva,cyecvevhbr,loreal,peedee,jessica8,lisa01,anamari,pionex,ipanema,airbag,frfltvbz,123456789aa,epwr49,casper12,sweethear,sanandreas,wuschel,cocodog,france1,119911,redroses,erevan,xtvgbjy,bigfella,geneve,volvo850,evermore,amy123,moxie,celebs,geeman,underwor,haslo1,joy123,hallow,chelsea0,12435687,abarth,12332145,tazman1,roshan,yummie,genius1,chrisd,ilovelife,seventy7,qaz1wsx2,rocket88,gaurav,bobbyboy,tauchen,roberts1,locksmit,masterof,www111,d9ungl,volvos40,asdasd1,golfers,jillian1,7xm5rq,arwpls4u,gbhcf2,elloco,football2,muerte,bob101,sabbath1,strider1,killer66,notyou,lawnboy,de7mdf,johnnyb,voodoo2,sashaa,homedepo,bravos,nihao123,braindea,weedhead,rajeev,artem1,camille1,rockss,bobbyb,aniston,frnhbcf,oakridge,biscayne,cxfcnm,dressage,jesus3,kellyann,king69,juillet,holliste,h00ters,ripoff,123645,1999ar,eric12,123777,tommi,dick12,bilder,chris99,rulezz,getpaid,chicubs,ender1,byajhvfnbrf,milkshak,sk8board,freakshow,antonella,monolit,shelb,hannah01,masters1,pitbull1,1matthew,luvpussy,agbdlcid,panther2,alphas,euskadi,8318131,ronnie1,7558795,sweetgirl,cookie59,sequoia,5552555,ktyxbr,4500455,money7,severus,shinobu,dbityrf,phisig,rogue2,fractal,redfred,sebastian1,nelli,b00mer,cyberman,zqjphsyf6ctifgu,oldsmobile,redeemer,pimpi,lovehurts,1slayer,black13,rtynfdh,airmax,g00gle,1panther,artemon,nopasswo,fuck1234,luke1,trinit,666000,ziadma,oscardog,davex,hazel1,isgood,demond,james5,construc,555551,january2,m1911a1,flameboy,merda,nathan12,nicklaus,dukester,hello99,scorpio7,leviathan,dfcbktr,pourquoi,vfrcbv123,shlomo,rfcgth,rocky3,ignatz,ajhneyf,roger123,squeek,4815162342a,biskit,mossimo,soccer21,gridlock,lunker,popstar,ghhh47hj764,chutney,nitehawk,vortec,gamma1,codeman,dragula,kappasig,rainbow2,milehigh,blueballs,ou8124me,rulesyou,collingw,mystere,aster,astrovan,firetruck,fische,crawfish,hornydog,morebeer,tigerpaw,radost,144000,1chance,1234567890qwe,gracie1,myopia,oxnard,seminoles,evgeni,edvard,partytim,domani,tuffy1,jaimatadi,blackmag,kzueirf,peternor,mathew1,maggie12,henrys,k1234567,fasted,pozitiv,cfdtkbq,jessica7,goleafs,bandito,girl78,sharingan,skyhigh,bigrob,zorros,poopers,oldschoo,pentium2,gripper,norcal,kimba,artiller,moneymak,00197400,272829,shadow1212,thebull,handbags,all4u2c,bigman2,civics,godisgoo,section8,bandaid,suzanne1,zorba,159123,racecars,i62gbq,rambo123,ironroad,johnson2,knobby,twinboys,sausage1,kelly69,enter2,rhjirf,yessss,james12,anguilla,boutit,iggypop,vovochka,06060,budwiser,romuald,meditate,good1,sandrin,herkules,lakers8,honeybea,11111111a,miche,rangers9,lobster1,seiko,belova,midcon,mackdadd,bigdaddy1,daddie,sepultur,freddy12,damon1,stormy1,hockey2,bailey12,hedimaptfcor,dcowboys,sadiedog,thuggin,horny123,josie1,nikki2,beaver69,peewee1,mateus,viktorija,barrys,cubswin1,matt1234,timoxa,rileydog,sicilia,luckycat,candybar,julian1,abc456,pussylip,phase1,acadia,catty,246800,evertonf,bojangle,qzwxec,nikolaj,fabrizi,kagome,noncapa0,marle,popol,hahaha1,cossie,carla10,diggers,spankey,sangeeta,cucciolo,breezer,starwar1,cornholio,rastafari,spring99,yyyyyyy1,webstar,72d5tn,sasha1234,inhouse,gobuffs,civic1,redstone,234523,minnie1,rivaldo,angel5,sti2000,xenocide,11qq11,1phoenix,herman1,holly123,tallguy,sharks1,madri,superbad,ronin,jalal123,hardbody,1234567r,assman1,vivahate,buddylee,38972091,bonds25,40028922,qrhmis,wp2005,ceejay,pepper01,51842543,redrum1,renton,varadero,tvxtjk7r,vetteman,djhvbrc,curly1,fruitcak,jessicas,maduro,popmart,acuari,dirkpitt,buick1,bergerac,golfcart,pdtpljxrf,hooch1,dudelove,d9ebk7,123452000,afdjhbn,greener,123455432,parachut,mookie12,123456780,jeepcj5,potatoe,sanya,qwerty2010,waqw3p,gotika,freaky1,chihuahu,buccanee,ecstacy,crazyboy,slickric,blue88,fktdnbyf,2004rj,delta4,333222111,calient,ptbdhw,1bailey,blitz1,sheila1,master23,hoagie,pyf8ah,orbita,daveyboy,prono1,delta2,heman,1horny,tyrik123,ostrov,md2020,herve,rockfish,el546218,rfhbyjxrf,chessmaster,redmoon,lenny1,215487,tomat,guppy,amekpass,amoeba,my3girls,nottingh,kavita,natalia1,puccini,fabiana,8letters,romeos,netgear,casper2,taters,gowings,iforgot1,pokesmot,pollit,lawrun,petey1,rosebuds,007jr,gthtcnhjqrf,k9dls02a,neener,azertyu,duke11,manyak,tiger01,petros,supermar,mangas,twisty,spotter,takagi,dlanod,qcmfd454,tusymo,zz123456,chach,navyblue,gilbert1,2kash6zq,avemaria,1hxboqg2s,viviane,lhbjkjubz2957704,nowwowtg,1a2b3c4,m0rn3,kqigb7,superpuper,juehtw,gethigh,theclown,makeme,pradeep,sergik,deion21,nurik,devo2706,nbvibt,roman222,kalima,nevaeh,martin7,anathema,florian1,tamwsn3sja,dinmamma,133159,123654q,slicks,pnp0c08,yojimbo,skipp,kiran,pussyfuck,teengirl,apples12,myballs,angeli,1234a,125678,opelastra,blind1,armagedd,fish123,pitufo,chelseaf,thedevil,nugget1,cunt69,beetle1,carter15,apolon,collant,password00,fishboy,djkrjdf,deftone,celti,three11,cyrus1,lefthand,skoal1,ferndale,aries1,fred01,roberta1,chucks,cornbread,lloyd1,icecrea,cisco123,newjerse,vfhrbpf,passio,volcom1,rikimaru,yeah11,djembe,facile,a1l2e3x4,batman7,nurbol,lorenzo1,monica69,blowjob1,998899,spank1,233391,n123456,1bear,bellsout,999998,celtic67,sabre1,putas,y9enkj,alfabeta,heatwave,honey123,hard4u,insane1,xthysq,magnum1,lightsaber,123qweqwe,fisher1,pixie1,precios,benfic,thegirls,bootsman,4321rewq,nabokov,hightime,djghjc,1chelsea,junglist,august16,t3fkvkmj,1232123,lsdlsd12,chuckie1,pescado,granit,toogood,cathouse,natedawg,bmw530,123kid,hajime,198400,engine1,wessonnn,kingdom1,novembre,1rocks,kingfisher,qwerty89,jordan22,zasranec,megat,sucess,installutil,fetish01,yanshi1982,1313666,1314520,clemence,wargod,time1,newzealand,snaker,13324124,cfrehf,hepcat,mazahaka,bigjay,denisov,eastwest,1yellow,mistydog,cheetos,1596357,ginger11,mavrik,bubby1,bhbyf,pyramide,giusepp,luthien,honda250,andrewjackie,kentavr,lampoon,zaq123wsx,sonicx,davidh,1ccccc,gorodok,windsong,programm,blunt420,vlad1995,zxcvfdsa,tarasov,mrskin,sachas,mercedes1,koteczek,rawdog,honeybear,stuart1,kaktys,richard7,55555n,azalia,hockey10,scouter,francy,1xxxxxx,julie456,tequilla,penis123,schmoe,tigerwoods,1ferrari,popov,snowdrop,matthieu,smolensk,cornflak,jordan01,love2000,23wesdxc,kswiss,anna2000,geniusnet,baby2000,33ds5x,waverly,onlyone4,networkingpe,raven123,blesse,gocards,wow123,pjflkork,juicey,poorboy,freeee,billybo,shaheen,zxcvbnm.,berlit,truth1,gepard,ludovic,gunther1,bobby2,bob12345,sunmoon,septembr,bigmac1,bcnjhbz,seaking,all4u,12qw34er56ty,bassie,nokia5228,7355608,sylwia,charvel,billgate,davion,chablis,catsmeow,kjiflrf,amylynn,rfvbkkf,mizredhe,handjob,jasper12,erbol,solara,bagpipe,biffer,notime,erlan,8543852,sugaree,oshkosh,fedora,bangbus,5lyedn,longball,teresa1,bootyman,aleksand,qazwsxedc12,nujbhc,tifosi,zpxvwy,lights1,slowpoke,tiger12,kstate,password10,alex69,collins1,9632147,doglover,baseball2,security1,grunts,orange2,godloves,213qwe879,julieb,1qazxsw23edcvfr4,noidea,8uiazp,betsy1,junior2,parol123,123456zz,piehonkii,kanker,bunky,hingis,reese1,qaz123456,sidewinder,tonedup,footsie,blackpoo,jalapeno,mummy1,always1,josh1,rockyboy,plucky,chicag,nadroj,blarney,blood123,wheaties,packer1,ravens1,mrjones,gfhjkm007,anna2010,awatar,guitar12,hashish,scale1,tomwaits,amrita,fantasma,rfpfym,pass2,tigris,bigair,slicker,sylvi,shilpa,cindylou,archie1,bitches1,poppys,ontime,horney1,camaroz28,alladin,bujhm,cq2kph,alina1,wvj5np,1211123a,tetons,scorelan,concordi,morgan2,awacs,shanty,tomcat14,andrew123,bear69,vitae,fred99,chingy,octane,belgario,fatdaddy,rhodan,password23,sexxes,boomtown,joshua01,war3demo,my2kids,buck1,hot4you,monamour,12345aa,yumiko,parool,carlton1,neverland,rose12,right1,sociald,grouse,brandon0,cat222,alex00,civicex,bintang,malkav,arschloc,dodgeviper,qwerty666,goduke,dante123,boss1,ontheroc,corpsman,love14,uiegu451,hardtail,irondoor,ghjrehfnehf,36460341,konijn,h2slca,kondom25,123456ss,cfytxrf,btnjey,nando,freemail,comander,natas666,siouxsie,hummer1,biomed,dimsum,yankees0,diablo666,lesbian1,pot420,jasonm,glock23,jennyb,itsmine,lena2010,whattheh,beandip,abaddon,kishore,signup,apogee,biteme12,suzieq,vgfun4,iseeyou,rifleman,qwerta,4pussy,hawkman,guest1,june17,dicksuck,bootay,cash12,bassale,ktybyuhfl,leetch,nescafe,7ovtgimc,clapton1,auror,boonie,tracker1,john69,bellas,cabinboy,yonkers,silky1,ladyffesta,drache,kamil1,davidp,bad123,snoopy12,sanche,werthvfy,achille,nefertiti,gerald1,slage33,warszawa,macsan26,mason123,kotopes,welcome8,nascar99,kiril,77778888,hairy1,monito,comicsans,81726354,killabee,arclight,yuo67,feelme,86753099,nnssnn,monday12,88351132,88889999,websters,subito,asdf12345,vaz2108,zvbxrpl,159753456852,rezeda,multimed,noaccess,henrique,tascam,captiva,zadrot,hateyou,sophie12,123123456,snoop1,charlie8,birmingh,hardline,libert,azsxdcf,89172735872,rjpthju,bondar,philips1,olegnaruto,myword,yakman,stardog,banana12,1234567890w,farout,annick,duke01,rfj422,billard,glock19,shaolin1,master10,cinderel,deltaone,manning1,biggreen,sidney1,patty1,goforit1,766rglqy,sevendus,aristotl,armagedo,blumen,gfhfyjz,kazakov,lekbyxxx,accord1,idiota,soccer16,texas123,victoire,ololo,chris01,bobbbb,299792458,eeeeeee1,confiden,07070,clarks,techno1,kayley,stang1,wwwwww1,uuuuu1,neverdie,jasonr,cavscout,481516234,mylove1,shaitan,1qazxcvb,barbaros,123456782000,123wer,thissucks,7seven,227722,faerie,hayduke,dbacks,snorkel,zmxncbv,tiger99,unknown1,melmac,polo1234,sssssss1,1fire,369147,bandung,bluejean,nivram,stanle,ctcnhf,soccer20,blingbli,dirtball,alex2112,183461,skylin,boobman,geronto,brittany1,yyz2112,gizmo69,ktrcec,dakota12,chiken,sexy11,vg08k714,bernadet,1bulldog,beachs,hollyb,maryjoy,margo1,danielle1,chakra,alexand,hullcity,matrix12,sarenna,pablos,antler,supercar,chomsky,german1,airjordan,545ettvy,camaron,flight1,netvideo,tootall,valheru,481516,1234as,skimmer,redcross,inuyash,uthvfy,1012nw,edoardo,bjhgfi,golf11,9379992a,lagarto,socball,boopie,krazy,.adgjmptw,gaydar,kovalev,geddylee,firstone,turbodog,loveee,135711,badbo,trapdoor,opopop11,danny2,max2000,526452,kerry1,leapfrog,daisy2,134kzbip,1andrea,playa1,peekab00,heskey,pirrello,gsewfmck,dimon4ik,puppie,chelios,554433,hypnodanny,fantik,yhwnqc,ghbdtngjrf,anchorag,buffett1,fanta,sappho,024680,vialli,chiva,lucylu,hashem,exbntkm,thema,23jordan,jake11,wildside,smartie,emerica,2wj2k9oj,ventrue,timoth,lamers,baerchen,suspende,boobis,denman85,1adam12,otello,king12,dzakuni,qsawbbs,isgay,porno123,jam123,daytona1,tazzie,bunny123,amaterasu,jeffre,crocus,mastercard,bitchedup,chicago7,aynrand,intel1,tamila,alianza,mulch,merlin12,rose123,alcapone,mircea,loveher,joseph12,chelsea6,dorothy1,wolfgar,unlimite,arturik,qwerty3,paddy1,piramid,linda123,cooool,millie1,warlock1,forgotit,tort02,ilikeyou,avensis,loveislife,dumbass1,clint1,2110se,drlove,olesia,kalinina,sergey123,123423,alicia1,markova,tri5a3,media1,willia1,xxxxxxx1,beercan,smk7366,jesusislord,motherfuck,smacker,birthday5,jbaby,harley2,hyper1,a9387670a,honey2,corvet,gjmptw,rjhjkmbien,apollon,madhuri,3a5irt,cessna17,saluki,digweed,tamia1,yja3vo,cfvlehfr,1111111q,martyna,stimpy1,anjana,yankeemp,jupiler,idkfa,1blue,fromv,afric,3xbobobo,liverp00l,nikon1,amadeus1,acer123,napoleo,david7,vbhjckfdf,mojo69,percy1,pirates1,grunt1,alenushka,finbar,zsxdcf,mandy123,1fred,timewarp,747bbb,druids,julia123,123321qq,spacebar,dreads,fcbarcelona,angela12,anima,christopher1,stargazer,123123s,hockey11,brewski,marlbor,blinker,motorhead,damngood,werthrf,letmein3,moremoney,killer99,anneke,eatit,pilatus,andrew01,fiona1,maitai,blucher,zxgdqn,e5pftu,nagual,panic1,andron,openwide,alphabeta,alison1,chelsea8,fende,mmm666,1shot2,a19l1980,123456@,1black,m1chael,vagner,realgood,maxxx,vekmnbr,stifler,2509mmh,tarkan,sherzod,1234567b,gunners1,artem2010,shooby,sammie1,p123456,piggie,abcde12345,nokia6230,moldir,piter,1qaz3edc,frequenc,acuransx,1star,nikeair,alex21,dapimp,ranjan,ilovegirls,anastasiy,berbatov,manso,21436587,leafs1,106666,angelochek,ingodwetrust,123456aaa,deano,korsar,pipetka,thunder9,minka,himura,installdevic,1qqqqq,digitalprodu,suckmeoff,plonker,headers,vlasov,ktr1996,windsor1,mishanya,garfield1,korvin,littlebit,azaz09,vandamme,scripto,s4114d,passward,britt1,r1chard,ferrari5,running1,7xswzaq,falcon2,pepper76,trademan,ea53g5,graham1,volvos80,reanimator,micasa,1234554321q,kairat,escorpion,sanek94,karolina1,kolovrat,karen2,1qaz@wsx,racing1,splooge,sarah2,deadman1,creed1,nooner,minicoop,oceane,room112,charme,12345ab,summer00,wetcunt,drewman,nastyman,redfire,appels,merlin69,dolfin,bornfree,diskette,ohwell,12345678qwe,jasont,madcap,cobra2,dolemit1,whatthehell,juanit,voldemar,rocke,bianc,elendil,vtufgjkbc,hotwheels,spanis,sukram,pokerface,k1ller,freakout,dontae,realmadri,drumss,gorams,258789,snakey,jasonn,whitewolf,befree,johnny99,pooka,theghost,kennys,vfvektxrf,toby1,jumpman23,deadlock,barbwire,stellina,alexa1,dalamar,mustanggt,northwes,tesoro,chameleo,sigtau,satoshi,george11,hotcum,cornell1,golfer12,geek01d,trololo,kellym,megapolis,pepsi2,hea666,monkfish,blue52,sarajane,bowler1,skeets,ddgirls,hfccbz,bailey01,isabella1,dreday,moose123,baobab,crushme,000009,veryhot,roadie,meanone,mike18,henriett,dohcvtec,moulin,gulnur,adastra,angel9,western1,natura,sweetpe,dtnfkm,marsbar,daisys,frogger1,virus1,redwood1,streetball,fridolin,d78unhxq,midas,michelob,cantik,sk2000,kikker,macanudo,rambone,fizzle,20000,peanuts1,cowpie,stone32,astaroth,dakota01,redso,mustard1,sexylove,giantess,teaparty,bobbin,beerbong,monet1,charles3,anniedog,anna1988,cameleon,longbeach,tamere,qpful542,mesquite,waldemar,12345zx,iamhere,lowboy,canard,granp,daisymay,love33,moosejaw,nivek,ninjaman,shrike01,aaa777,88002000600,vodolei,bambush,falcor,harley69,alphaomega,severine,grappler,bosox,twogirls,gatorman,vettes,buttmunch,chyna,excelsio,crayfish,birillo,megumi,lsia9dnb9y,littlebo,stevek,hiroyuki,firehous,master5,briley2,gangste,chrisk,camaleon,bulle,troyboy,froinlaven,mybutt,sandhya,rapala,jagged,crazycat,lucky12,jetman,wavmanuk,1heather,beegee,negril,mario123,funtime1,conehead,abigai,mhorgan,patagoni,travel1,backspace,frenchfr,mudcat,dashenka,baseball3,rustys,741852kk,dickme,baller23,griffey1,suckmycock,fuhrfzgc,jenny2,spuds,berlin1,justfun,icewind,bumerang,pavlusha,minecraft123,shasta1,ranger12,123400,twisters,buthead,miked,finance1,dignity7,hello9,lvjdp383,jgthfnjh,dalmatio,paparoach,miller31,2bornot2b,fathe,monterre,theblues,satans,schaap,jasmine2,sibelius,manon,heslo,jcnhjd,shane123,natasha2,pierrot,bluecar,iloveass,harriso,red12,london20,job314,beholder,reddawg,fuckyou!,pussylick,bologna1,austintx,ole4ka,blotto,onering,jearly,balbes,lightbul,bighorn,crossfir,lee123,prapor,1ashley,gfhjkm22,wwe123,09090,sexsite,marina123,jagua,witch1,schmoo,parkview,dragon3,chilango,ultimo,abramova,nautique,2bornot2,duende,1arthur,nightwing,surfboar,quant4307,15s9pu03,karina1,shitball,walleye1,wildman1,whytesha,1morgan,my2girls,polic,baranova,berezuckiy,kkkkkk1,forzima,fornow,qwerty02,gokart,suckit69,davidlee,whatnow,edgard,tits1,bayshore,36987412,ghbphfr,daddyy,explore1,zoidberg,5qnzjx,morgane,danilov,blacksex,mickey12,balsam,83y6pv,sarahc,slaye,all4u2,slayer69,nadia1,rlzwp503,4cranker,kaylie,numberon,teremok,wolf12,deeppurple,goodbeer,aaa555,66669999,whatif,harmony1,ue8fpw,3tmnej,254xtpss,dusty197,wcksdypk,zerkalo,dfnheirf,motorol,digita,whoareyou,darksoul,manics,rounders,killer11,d2000lb,cegthgfhjkm,catdog1,beograd,pepsico,julius1,123654987,softbal,killer23,weasel1,lifeson,q123456q,444555666,bunches,andy1,darby1,service01,bear11,jordan123,amega,duncan21,yensid,lerxst,rassvet,bronco2,fortis,pornlove,paiste,198900,asdflkjh,1236547890,futur,eugene1,winnipeg261,fk8bhydb,seanjohn,brimston,matthe1,bitchedu,crisco,302731,roxydog,woodlawn,volgograd,ace1210,boy4u2ownnyc,laura123,pronger,parker12,z123456z,andrew13,longlife,sarang,drogba,gobruins,soccer4,holida,espace,almira,murmansk,green22,safina,wm00022,1chevy,schlumpf,doroth,ulises,golf99,hellyes,detlef,mydog,erkina,bastardo,mashenka,sucram,wehttam,generic1,195000,spaceboy,lopas123,scammer,skynyrd,daddy2,titani,ficker,cr250r,kbnthfnehf,takedown,sticky1,davidruiz,desant,nremtp,painter1,bogies,agamemno,kansas1,smallfry,archi,2b4dnvsx,1player,saddie,peapod,6458zn7a,qvw6n2,gfxqx686,twice2,sh4d0w3d,mayfly,375125,phitau,yqmbevgk,89211375759,kumar1,pfhfpf,toyboy,way2go,7pvn4t,pass69,chipster,spoony,buddycat,diamond3,rincewin,hobie,david01,billbo,hxp4life,matild,pokemon2,dimochka,clown1,148888,jenmt3,cuxldv,cqnwhy,cde34rfv,simone1,verynice,toobig,pasha123,mike00,maria2,lolpop,firewire,dragon9,martesana,a1234567890,birthday3,providen,kiska,pitbulls,556655,misawa,damned69,martin11,goldorak,gunship,glory1,winxclub,sixgun,splodge,agent1,splitter,dome69,ifghjb,eliza1,snaiper,wutang36,phoenix7,666425,arshavin,paulaner,namron,m69fg1w,qwert1234,terrys,zesyrmvu,joeman,scoots,dwml9f,625vrobg,sally123,gostoso,symow8,pelota,c43qpul5rz,majinbuu,lithium1,bigstuff,horndog1,kipelov,kringle,1beavis,loshara,octobe,jmzacf,12342000,qw12qw,runescape1,chargers1,krokus,piknik,jessy,778811,gjvbljh,474jdvff,pleaser,misskitty,breaker1,7f4df451,dayan,twinky,yakumo,chippers,matia,tanith,len2ski1,manni,nichol1,f00b4r,nokia3110,standart,123456789i,shami,steffie,larrywn,chucker,john99,chamois,jjjkkk,penmouse,ktnj2010,gooners,hemmelig,rodney1,merlin01,bearcat1,1yyyyy,159753z,1fffff,1ddddd,thomas11,gjkbyrf,ivanka,f1f2f3,petrovna,phunky,conair,brian2,creative1,klipsch,vbitymrf,freek,breitlin,cecili,westwing,gohabsgo,tippmann,1steve,quattro6,fatbob,sp00ky,rastas,1123581,redsea,rfnmrf,jerky1,1aaaaaa,spk666,simba123,qwert54321,123abcd,beavis69,fyfyfc,starr1,1236547,peanutbutter,sintra,12345abcde,1357246,abcde1,climbon,755dfx,mermaids,monte1,serkan,geilesau,777win,jasonc,parkside,imagine1,rockhead,producti,playhard,principa,spammer,gagher,escada,tsv1860,dbyjuhfl,cruiser1,kennyg,montgome,2481632,pompano,cum123,angel6,sooty,bear01,april6,bodyhamm,pugsly,getrich,mikes,pelusa,fosgate,jasonp,rostislav,kimberly1,128mo,dallas11,gooner1,manuel1,cocacola1,imesh,5782790,password8,daboys,1jones,intheend,e3w2q1,whisper1,madone,pjcgujrat,1p2o3i,jamesp,felicida,nemrac,phikap,firecat,jrcfyjxrf,matt12,bigfan,doedel,005500,jasonx,1234567k,badfish,goosey,utjuhfabz,wilco,artem123,igor123,spike123,jor23dan,dga9la,v2jmsz,morgan12,avery1,dogstyle,natasa,221195ws,twopac,oktober7,karthik,poop1,mightymo,davidr,zermatt,jehova,aezakmi1,dimwit,monkey5,serega123,qwerty111,blabl,casey22,boy123,1clutch,asdfjkl1,hariom,bruce10,jeep95,1smith,sm9934,karishma,bazzzz,aristo,669e53e1,nesterov,kill666,fihdfv,1abc2,anna1,silver11,mojoman,telefono,goeagles,sd3lpgdr,rfhfynby,melinda1,llcoolj,idteul,bigchief,rocky13,timberwo,ballers,gatekeep,kashif,hardass,anastasija,max777,vfuyjkbz,riesling,agent99,kappas,dalglish,tincan,orange3,turtoise,abkbvjy,mike24,hugedick,alabala,geolog,aziza,devilboy,habanero,waheguru,funboy,freedom5,natwest,seashore,impaler,qwaszx1,pastas,bmw535,tecktonik,mika00,jobsearc,pinche,puntang,aw96b6,1corvett,skorpio,foundati,zzr1100,gembird,vfnhjcrby,soccer18,vaz2110,peterp,archer1,cross1,samedi,dima1992,hunter99,lipper,hotbody,zhjckfdf,ducati1,trailer1,04325956,cheryl1,benetton,kononenko,sloneczko,rfgtkmrf,nashua,balalaika,ampere,eliston,dorsai,digge,flyrod,oxymoron,minolta,ironmike,majortom,karimov,fortun,putaria,an83546921an13,blade123,franchis,mxaigtg5,dynxyu,devlt4,brasi,terces,wqmfuh,nqdgxz,dale88,minchia,seeyou,housepen,1apple,1buddy,mariusz,bighouse,tango2,flimflam,nicola1,qwertyasd,tomek1,shumaher,kartoshka,bassss,canaries,redman1,123456789as,preciosa,allblacks,navidad,tommaso,beaudog,forrest1,green23,ryjgjxrf,go4it,ironman2,badnews,butterba,1grizzly,isaeva,rembrand,toront,1richard,bigjon,yfltymrf,1kitty,4ng62t,littlejo,wolfdog,ctvtyjd,spain1,megryan,tatertot,raven69,4809594q,tapout,stuntman,a131313,lagers,hotstuf,lfdbl11,stanley2,advokat,boloto,7894561,dooker,adxel187,cleodog,4play,0p9o8i,masterb,bimota,charlee,toystory,6820055,6666667,crevette,6031769,corsa,bingoo,dima1990,tennis11,samuri,avocado,melissa6,unicor,habari,metart,needsex,cockman,hernan,3891576,3334444,amigo1,gobuffs2,mike21,allianz,2835493,179355,midgard,joey123,oneluv,ellis1,towncar,shonuff,scouse,tool69,thomas19,chorizo,jblaze,lisa1,dima1999,sophia1,anna1989,vfvekbxrf,krasavica,redlegs,jason25,tbontb,katrine,eumesmo,vfhufhbnrf,1654321,asdfghj1,motdepas,booga,doogle,1453145,byron1,158272,kardinal,tanne,fallen1,abcd12345,ufyljy,n12345,kucing,burberry,bodger,1234578,februar,1234512,nekkid,prober,harrison1,idlewild,rfnz90,foiegras,pussy21,bigstud,denzel,tiffany2,bigwill,1234567890zzz,hello69,compute1,viper9,hellspaw,trythis,gococks,dogballs,delfi,lupine,millenia,newdelhi,charlest,basspro,1mike,joeblack,975310,1rosebud,batman11,misterio,fucknut,charlie0,august11,juancho,ilonka,jigei743ks,adam1234,889900,goonie,alicat,ggggggg1,1zzzzzzz,sexywife,northstar,chris23,888111,containe,trojan1,jason5,graikos,1ggggg,1eeeee,tigers01,indigo1,hotmale,jacob123,mishima,richard3,cjxb2014,coco123,meagain,thaman,wallst,edgewood,bundas,1power,matilda1,maradon,hookedup,jemima,r3vi3wpass,2004-10-,mudman,taz123,xswzaq,emerson1,anna21,warlord1,toering,pelle,tgwdvu,masterb8,wallstre,moppel,priora,ghjcnjrdfif,yoland,12332100,1j9e7f6f,jazzzz,yesman,brianm,42qwerty42,12345698,darkmanx,nirmal,john31,bb123456,neuspeed,billgates,moguls,fj1200,hbhlair,shaun1,ghbdfn,305pwzlr,nbu3cd,susanb,pimpdad,mangust6403,joedog,dawidek,gigante,708090,703751,700007,ikalcr,tbivbn,697769,marvi,iyaayas,karen123,jimmyboy,dozer1,e6z8jh,bigtime1,getdown,kevin12,brookly,zjduc3,nolan1,cobber,yr8wdxcq,liebe,m1garand,blah123,616879,action1,600000,sumitomo,albcaz,asian1,557799,dave69,556699,sasa123,streaker,michel1,karate1,buddy7,daulet,koks888,roadtrip,wapiti,oldguy,illini1,1234qq,mrspock,kwiatek,buterfly,august31,jibxhq,jackin,taxicab,tristram,talisker,446655,444666,chrisa,freespace,vfhbfyyf,chevell,444333,notyours,442244,christian1,seemore,sniper12,marlin1,joker666,multik,devilish,crf450,cdfoli,eastern1,asshead,duhast,voyager2,cyberia,1wizard,cybernet,iloveme1,veterok,karandash,392781,looksee,diddy,diabolic,foofight,missey,herbert1,bmw318i,premier1,zsfmpv,eric1234,dun6sm,fuck11,345543,spudman,lurker,bitem,lizzy1,ironsink,minami,339311,s7fhs127,sterne,332233,plankton,galax,azuywe,changepa,august25,mouse123,sikici,killer69,xswqaz,quovadis,gnomik,033028pw,777777a,barrakuda,spawn666,goodgod,slurp,morbius,yelnats,cujo31,norman1,fastone,earwig,aureli,wordlife,bnfkbz,yasmi,austin123,timberla,missy2,legalize,netcom,liljon,takeit,georgin,987654321z,warbird,vitalina,all4u3,mmmmmm1,bichon,ellobo,wahoos,fcazmj,aksarben,lodoss,satnam,vasili,197800,maarten,sam138989,0u812,ankita,walte,prince12,anvils,bestia,hoschi,198300,univer,jack10,ktyecbr,gr00vy,hokie,wolfman1,fuckwit,geyser,emmanue,ybrjkftd,qwerty33,karat,dblock,avocat,bobbym,womersle,1please,nostra,dayana,billyray,alternat,iloveu1,qwerty69,rammstein1,mystikal,winne,drawde,executor,craxxxs,ghjcnjnf,999888777,welshman,access123,963214785,951753852,babe69,fvcnthlfv,****me,666999666,testing2,199200,nintendo64,oscarr,guido8,zhanna,gumshoe,jbird,159357456,pasca,123452345,satan6,mithrand,fhbirf,aa1111aa,viggen,ficktjuv,radial9,davids1,rainbow7,futuro,hipho,platin,poppy123,rhenjq,fulle,rosit,chicano,scrumpy,lumpy1,seifer,uvmrysez,autumn1,xenon,susie1,7u8i9o0p,gamer1,sirene,muffy1,monkeys1,kalinin,olcrackmaster,hotmove,uconn,gshock,merson,lthtdyz,pizzaboy,peggy1,pistache,pinto1,fishka,ladydi,pandor,baileys,hungwell,redboy,rookie1,amanda01,passwrd,clean1,matty1,tarkus,jabba1,bobster,beer30,solomon1,moneymon,sesamo,fred11,sunnysid,jasmine5,thebears,putamadre,workhard,flashbac,counter1,liefde,magnat,corky1,green6,abramov,lordik,univers,shortys,david3,vip123,gnarly,1234567s,billy2,honkey,deathstar,grimmy,govinda,direktor,12345678s,linus1,shoppin,rekbrjdf,santeria,prett,berty75,mohican,daftpunk,uekmyfhf,chupa,strats,ironbird,giants56,salisbur,koldun,summer04,pondscum,jimmyj,miata1,george3,redshoes,weezie,bartman1,0p9o8i7u,s1lver,dorkus,125478,omega9,sexisgood,mancow,patric1,jetta1,074401,ghjuhtcc,gfhjk,bibble,terry2,123213,medicin,rebel2,hen3ry,4freedom,aldrin,lovesyou,browny,renwod,winnie1,belladon,1house,tyghbn,blessme,rfhfrfnbwf,haylee,deepdive,booya,phantasy,gansta,cock69,4mnveh,gazza1,redapple,structur,anakin1,manolito,steve01,poolman,chloe123,vlad1998,qazwsxe,pushit,random123,ontherocks,o236nq,brain1,dimedrol,agape,rovnogod,1balls,knigh,alliso,love01,wolf01,flintstone,beernuts,tuffguy,isengard,highfive,alex23,casper99,rubina,getreal,chinita,italian1,airsoft,qwerty23,muffdiver,willi1,grace123,orioles1,redbull1,chino1,ziggy123,breadman,estefan,ljcneg,gotoit,logan123,wideglid,mancity1,treess,qwe123456,kazumi,qweasdqwe,oddworld,naveed,protos,towson,a801016,godislov,at_asp,bambam1,soccer5,dark123,67vette,carlos123,hoser1,scouser,wesdxc,pelus,dragon25,pflhjn,abdula,1freedom,policema,tarkin,eduardo1,mackdad,gfhjkm11,lfplhfgthvf,adilet,zzzzxxxx,childre,samarkand,cegthgegth,shama,fresher,silvestr,greaser,allout,plmokn,sexdrive,nintendo1,fantasy7,oleander,fe126fd,crumpet,pingzing,dionis,hipster,yfcnz,requin,calliope,jerome1,housecat,abc123456789,doghot,snake123,augus,brillig,chronic1,gfhjkbot,expediti,noisette,master7,caliban,whitetai,favorite3,lisamari,educatio,ghjhjr,saber1,zcegth,1958proman,vtkrbq,milkdud,imajica,thehip,bailey10,hockey19,dkflbdjcnjr,j123456,bernar,aeiouy,gamlet,deltachi,endzone,conni,bcgfybz,brandi1,auckland2010,7653ajl1,mardigra,testuser,bunko18,camaro67,36936,greenie,454dfmcq,6xe8j2z4,mrgreen,ranger5,headhunt,banshee1,moonunit,zyltrc,hello3,pussyboy,stoopid,tigger11,yellow12,drums1,blue02,kils123,junkman,banyan,jimmyjam,tbbucs,sportster,badass1,joshie,braves10,lajolla,1amanda,antani,78787,antero,19216801,chich,rhett32,sarahm,beloit,sucker69,corkey,nicosnn,rccola,caracol,daffyduc,bunny2,mantas,monkies,hedonist,cacapipi,ashton1,sid123,19899891,patche,greekgod,cbr1000,leader1,19977991,ettore,chongo,113311,picass,cfif123,rhtfnbd,frances1,andy12,minnette,bigboy12,green69,alices,babcia,partyboy,javabean,freehand,qawsed123,xxx111,harold1,passwo,jonny1,kappa1,w2dlww3v5p,1merlin,222999,tomjones,jakeman,franken,markhegarty,john01,carole1,daveman,caseys,apeman,mookey,moon123,claret,titans1,residentevil,campari,curitiba,dovetail,aerostar,jackdaniels,basenji,zaq12w,glencoe,biglove,goober12,ncc170,far7766,monkey21,eclipse9,1234567v,vanechka,aristote,grumble,belgorod,abhishek,neworleans,pazzword,dummie,sashadog,diablo11,mst3000,koala1,maureen1,jake99,isaiah1,funkster,gillian1,ekaterina20,chibears,astra123,4me2no,winte,skippe,necro,windows9,vinograd,demolay,vika2010,quiksilver,19371ayj,dollar1,shecky,qzwxecrv,butterfly1,merrill1,scoreland,1crazy,megastar,mandragora,track1,dedhed,jacob2,newhope,qawsedrftgyh,shack1,samvel,gatita,shyster,clara1,telstar,office1,crickett,truls,nirmala,joselito,chrisl,lesnik,aaaabbbb,austin01,leto2010,bubbie,aaa12345,widder,234432,salinger,mrsmith,qazsedcft,newshoes,skunks,yt1300,bmw316,arbeit,smoove,123321qweewq,123qazwsx,22221111,seesaw,0987654321a,peach1,1029384756q,sereda,gerrard8,shit123,batcave,energy1,peterb,mytruck,peter12,alesya,tomato1,spirou,laputaxx,magoo1,omgkremidia,knight12,norton1,vladislava,shaddy,austin11,jlbyjxrf,kbdthgekm,punheta,fetish69,exploiter,roger2,manstein,gtnhjd,32615948worms,dogbreath,ujkjdjkjvrf,vodka1,ripcord,fatrat,kotek1,tiziana,larrybir,thunder3,nbvfnb,9kyq6fge,remembe,likemike,gavin1,shinigam,yfcnfcmz,13245678,jabbar,vampyr,ane4ka,lollipo,ashwin,scuderia,limpdick,deagle,3247562,vishenka,fdhjhf,alex02,volvov70,mandys,bioshock,caraca,tombraider,matrix69,jeff123,13579135,parazit,black3,noway1,diablos,hitmen,garden1,aminor,decembe,august12,b00ger,006900,452073t,schach,hitman1,mariner1,vbnmrf,paint1,742617000027,bitchboy,pfqxjyjr,5681392,marryher,sinnet,malik1,muffin12,aninha,piolin,lady12,traffic1,cbvjyf,6345789,june21,ivan2010,ryan123,honda99,gunny,coorslight,asd321,hunter69,7224763,sonofgod,dolphins1,1dolphin,pavlenko,woodwind,lovelov,pinkpant,gblfhfcbyf,hotel1,justinbiebe,vinter,jeff1234,mydogs,1pizza,boats1,parrothe,shawshan,brooklyn1,cbrown,1rocky,hemi426,dragon64,redwings1,porsches,ghostly,hubbahub,buttnut,b929ezzh,sorokina,flashg,fritos,b7mguk,metatron,treehous,vorpal,8902792,marcu,free123,labamba,chiefs1,zxc123zxc,keli_14,hotti,1steeler,money4,rakker,foxwoods,free1,ahjkjd,sidorova,snowwhit,neptune1,mrlover,trader1,nudelamb,baloo,power7,deltasig,bills1,trevo,7gorwell,nokia6630,nokia5320,madhatte,1cowboys,manga1,namtab,sanjar,fanny1,birdman1,adv12775,carlo1,dude1998,babyhuey,nicole11,madmike,ubvyfpbz,qawsedr,lifetec,skyhook,stalker123,toolong,robertso,ripazha,zippy123,1111111a,manol,dirtyman,analslut,jason3,dutches,minhasenha,cerise,fenrir,jayjay1,flatbush,franka,bhbyjxrf,26429vadim,lawntrax,198700,fritzy,nikhil,ripper1,harami,truckman,nemvxyheqdd5oqxyxyzi,gkfytnf,bugaboo,cableman,hairpie,xplorer,movado,hotsex69,mordred,ohyeah1,patrick3,frolov,katieh,4311111q,mochaj,presari,bigdo,753951852,freedom4,kapitan,tomas1,135795,sweet123,pokers,shagme,tane4ka,sentinal,ufgyndmv,jonnyb,skate123,123456798,123456788,very1,gerrit,damocles,dollarbi,caroline1,lloyds,pizdets,flatland,92702689,dave13,meoff,ajnjuhfabz,achmed,madison9,744744z,amonte,avrillavigne,elaine1,norma1,asseater,everlong,buddy23,cmgang1,trash1,mitsu,flyman,ulugbek,june27,magistr,fittan,sebora64,dingos,sleipnir,caterpil,cindys,212121qaz,partys,dialer,gjytltkmybr,qweqaz,janvier,rocawear,lostboy,aileron,sweety1,everest1,pornman,boombox,potter1,blackdic,44448888,eric123,112233aa,2502557i,novass,nanotech,yourname,x12345,indian1,15975300,1234567l,carla51,chicago0,coleta,cxzdsaewq,qqwweerr,marwan,deltic,hollys,qwerasd,pon32029,rainmake,nathan0,matveeva,legioner,kevink,riven,tombraid,blitzen,a54321,jackyl,chinese1,shalimar,oleg1995,beaches1,tommylee,eknock,berli,monkey23,badbob,pugwash,likewhoa,jesus2,yujyd360,belmar,shadow22,utfp5e,angelo1,minimax,pooder,cocoa1,moresex,tortue,lesbia,panthe,snoopy2,drumnbass,alway,gmcz71,6jhwmqku,leppard,dinsdale,blair1,boriqua,money111,virtuagirl,267605,rattlesn,1sunshin,monica12,veritas1,newmexic,millertime,turandot,rfvxfnrf,jaydog,kakawka,bowhunter,booboo12,deerpark,erreway,taylorma,rfkbybyf,wooglin,weegee,rexdog,iamhorny,cazzo1,vhou812,bacardi1,dctktyyfz,godpasi,peanut12,bertha1,fuckyoubitch,ghosty,altavista,jertoot,smokeit,ghjcnbvtyz,fhnehxbr,rolsen,qazxcdews,maddmaxx,redrocke,qazokm,spencer2,thekiller,asdf11,123sex,tupac1,p1234567,dbrown,1biteme,tgo4466,316769,sunghi,shakespe,frosty1,gucci1,arcana,bandit01,lyubov,poochy,dartmout,magpies1,sunnyd,mouseman,summer07,chester7,shalini,danbury,pigboy,dave99,deniss,harryb,ashley11,pppppp1,01081988m,balloon1,tkachenko,bucks1,master77,pussyca,tricky1,zzxxccvv,zoulou,doomer,mukesh,iluv69,supermax,todays,thefox,don123,dontask,diplom,piglett,shiney,fahbrf,qaz12wsx,temitope,reggin,project1,buffy2,inside1,lbpfqyth,vanilla1,lovecock,u4slpwra,fylh.irf,123211,7ertu3ds,necroman,chalky,artist1,simpso,4x7wjr,chaos666,lazyacres,harley99,ch33s3,marusa,eagle7,dilligas,computadora,lucky69,denwer,nissan350z,unforgiv,oddball,schalke0,aztec1,borisova,branden1,parkave,marie123,germa,lafayett,878kckxy,405060,cheeseca,bigwave,fred22,andreea,poulet,mercutio,psycholo,andrew88,o4izdmxu,sanctuar,newhome,milion,suckmydi,rjvgm.nth,warior,goodgame,1qwertyuiop,6339cndh,scorpio2,macker,southbay,crabcake,toadie,paperclip,fatkid,maddo,cliff1,rastafar,maries,twins1,geujdrf,anjela,wc4fun,dolina,mpetroff,rollout,zydeco,shadow3,pumpki,steeda,volvo240,terras,blowjo,blue2000,incognit,badmojo,gambit1,zhukov,station1,aaronb,graci,duke123,clipper1,qazxsw2,ledzeppe,kukareku,sexkitte,cinco,007008,lakers12,a1234b,acmilan1,afhfjy,starrr,slutty3,phoneman,kostyan,bonzo1,sintesi07,ersatz,cloud1,nephilim,nascar03,rey619,kairos,123456789e,hardon1,boeing1,juliya,hfccdtn,vgfun8,polizei,456838,keithb,minouche,ariston,savag,213141,clarkken,microwav,london2,santacla,campeo,qr5mx7,464811,mynuts,bombo,1mickey,lucky8,danger1,ironside,carter12,wyatt1,borntorun,iloveyou123,jose1,pancake1,tadmichaels,monsta,jugger,hunnie,triste,heat7777,ilovejesus,queeny,luckycharm,lieben,gordolee85,jtkirk,forever21,jetlag,skylane,taucher,neworlea,holera,000005,anhnhoem,melissa7,mumdad,massimiliano,dima1994,nigel1,madison3,slicky,shokolad,serenit,jmh1978,soccer123,chris3,drwho,rfpzdrf,1qasw23ed,free4me,wonka,sasquatc,sanan,maytag,verochka,bankone,molly12,monopoli,xfqybr,lamborgini,gondolin,candycane,needsome,jb007,scottie1,brigit,0147258369,kalamazo,lololyo123,bill1234,ilovejes,lol123123,popkorn,april13,567rntvm,downunde,charle1,angelbab,guildwars,homeworld,qazxcvbnm,superma1,dupa123,kryptoni,happyy,artyom,stormie,cool11,calvin69,saphir,konovalov,jansport,october8,liebling,druuna,susans,megans,tujhjdf,wmegrfux,jumbo1,ljb4dt7n,012345678910,kolesnik,speculum,at4gftlw,kurgan,93pn75,cahek0980,dallas01,godswill,fhifdby,chelsea4,jump23,barsoom,catinhat,urlacher,angel99,vidadi1,678910,lickme69,topaz1,westend,loveone,c12345,gold12,alex1959,mamon,barney12,1maggie,alex12345,lp2568cskt,s1234567,gjikbdctyf,anthony0,browns99,chips1,sunking,widespre,lalala1,tdutif,fucklife,master00,alino4ka,stakan,blonde1,phoebus,tenore,bvgthbz,brunos,suzjv8,uvdwgt,revenant,1banana,veroniqu,sexfun,sp1der,4g3izhox,isakov,shiva1,scooba,bluefire,wizard12,dimitris,funbags,perseus,hoodoo,keving,malboro,157953,a32tv8ls,latics,animate,mossad,yejntb,karting,qmpq39zr,busdrive,jtuac3my,jkne9y,sr20dett,4gxrzemq,keylargo,741147,rfktylfhm,toast1,skins1,xcalibur,gattone,seether,kameron,glock9mm,julio1,delenn,gameday,tommyd,str8edge,bulls123,66699,carlsberg,woodbird,adnama,45auto,codyman,truck2,1w2w3w4w,pvjegu,method1,luetdi,41d8cd98f00b,bankai,5432112345,94rwpe,reneee,chrisx,melvins,775577,sam2000,scrappy1,rachid,grizzley,margare,morgan01,winstons,gevorg,gonzal,crawdad,gfhfdjp,babilon,noneya,pussy11,barbell,easyride,c00li0,777771,311music,karla1,golions,19866891,peejay,leadfoot,hfvbkm,kr9z40sy,cobra123,isotwe,grizz,sallys,****you,aaa123a,dembel,foxs14,hillcres,webman,mudshark,alfredo1,weeded,lester1,hovepark,ratface,000777fffa,huskie,wildthing,elbarto,waikiki,masami,call911,goose2,regin,dovajb,agricola,cjytxrj,andy11,penny123,family01,a121212,1braves,upupa68,happy100,824655,cjlove,firsttim,kalel,redhair,dfhtymt,sliders,bananna,loverbo,fifa2008,crouton,chevy350,panties2,kolya1,alyona,hagrid,spagetti,q2w3e4r,867530,narkoman,nhfdvfnjkju123,1ccccccc,napolean,0072563,allay,w8sted,wigwam,jamesk,state1,parovoz,beach69,kevinb,rossella,logitech1,celula,gnocca,canucks1,loginova,marlboro1,aaaa1,kalleanka,mester,mishutka,milenko,alibek,jersey1,peterc,1mouse,nedved,blackone,ghfplybr,682regkh,beejay,newburgh,ruffian,clarets,noreaga,xenophon,hummerh2,tenshi,smeagol,soloyo,vfhnby,ereiamjh,ewq321,goomie,sportin,cellphone,sonnie,jetblack,saudan,gblfhfc,matheus,uhfvjnf,alicja,jayman1,devon1,hexagon,bailey2,vtufajy,yankees7,salty1,908070,killemal,gammas,eurocard,sydney12,tuesday1,antietam,wayfarer,beast666,19952009sa,aq12ws,eveli,hockey21,haloreach,dontcare,xxxx1,andrea11,karlmarx,jelszo,tylerb,protools,timberwolf,ruffneck,pololo,1bbbbb,waleed,sasami,twinss,fairlady,illuminati,alex007,sucks1,homerjay,scooter7,tarbaby,barmaley,amistad,vanes,randers,tigers12,dreamer2,goleafsg,googie,bernie1,as12345,godeep,james3,phanto,gwbush,cumlover,2196dc,studioworks,995511,golf56,titova,kaleka,itali,socks1,kurwamac,daisuke,hevonen,woody123,daisie,wouter,henry123,gostosa,guppie,porpoise,iamsexy,276115,paula123,1020315,38gjgeuftd,rjrfrjkf,knotty,idiot1,sasha12345,matrix13,securit,radical1,ag764ks,jsmith,coolguy1,secretar,juanas,sasha1988,itout,00000001,tiger11,1butthea,putain,cavalo,basia1,kobebryant,1232323,12345asdfg,sunsh1ne,cyfqgth,tomkat,dorota,dashit,pelmen,5t6y7u,whipit,smokeone,helloall,bonjour1,snowshoe,nilknarf,x1x2x3,lammas,1234599,lol123456,atombomb,ironchef,noclue,alekseev,gwbush1,silver2,12345678m,yesican,fahjlbnf,chapstic,alex95,open1,tiger200,lisichka,pogiako,cbr929,searchin,tanya123,alex1973,phil413,alex1991,dominati,geckos,freddi,silenthill,egroeg,vorobey,antoxa,dark666,shkola,apple22,rebellio,shamanking,7f8srt,cumsucker,partagas,bill99,22223333,arnster55,fucknuts,proxima,silversi,goblues,parcells,vfrcbvjdf,piloto,avocet,emily2,1597530,miniskir,himitsu,pepper2,juiceman,venom1,bogdana,jujube,quatro,botafogo,mama2010,junior12,derrickh,asdfrewq,miller2,chitarra,silverfox,napol,prestigio,devil123,mm111qm,ara123,max33484,sex2000,primo1,sephan,anyuta,alena2010,viborg,verysexy,hibiscus,terps,josefin,oxcart,spooker,speciali,raffaello,partyon,vfhvtkflrf,strela,a123456z,worksuck,glasss,lomonosov,dusty123,dukeblue,1winter,sergeeva,lala123,john22,cmc09,sobolev,bettylou,dannyb,gjkrjdybr,hagakure,iecnhbr,awsedr,pmdmsctsk,costco,alekseeva,fktrcttd,bazuka,flyingv,garuda,buffy16,gutierre,beer12,stomatolog,ernies,palmeiras,golf123,love269,n.kmgfy,gjkysqgbpltw,youare,joeboo,baksik,lifeguar,111a111,nascar8,mindgame,dude1,neopets,frdfkfyu,june24,phoenix8,penelopa,merlin99,mercenar,badluck,mishel,bookert,deadsexy,power9,chinchil,1234567m,alex10,skunk1,rfhkcjy,sammycat,wright1,randy2,marakesh,temppassword,elmer251,mooki,patrick0,bonoedge,1tits,chiar,kylie1,graffix,milkman1,cornel,mrkitty,nicole12,ticketmaster,beatles4,number20,ffff1,terps1,superfre,yfdbufnjh,jake1234,flblfc,1111qq,zanuda,jmol01,wpoolejr,polopol,nicolett,omega13,cannonba,123456789.,sandy69,ribeye,bo243ns,marilena,bogdan123,milla,redskins1,19733791,alias1,movie1,ducat,marzena,shadowru,56565,coolman1,pornlover,teepee,spiff,nafanya,gateway3,fuckyou0,hasher,34778,booboo69,staticx,hang10,qq12345,garnier,bosco123,1234567qw,carson1,samso,1xrg4kcq,cbr929rr,allan123,motorbik,andrew22,pussy101,miroslava,cytujdbr,camp0017,cobweb,snusmumrik,salmon1,cindy2,aliya,serendipity,co437at,tincouch,timmy123,hunter22,st1100,vvvvvv1,blanka,krondor,sweeti,nenit,kuzmich,gustavo1,bmw320i,alex2010,trees1,kyliem,essayons,april26,kumari,sprin,fajita,appletre,fghbjhb,1green,katieb,steven2,corrado1,satelite,1michell,123456789c,cfkfvfylhf,acurarsx,slut543,inhere,bob2000,pouncer,k123456789,fishie,aliso,audia8,bluetick,soccer69,jordan99,fromhell,mammoth1,fighting54,mike25,pepper11,extra1,worldwid,chaise,vfr800,sordfish,almat,nofate,listopad,hellgate,dctvghbdf,jeremia,qantas,lokiju,honker,sprint1,maral,triniti,compaq3,sixsix6,married1,loveman,juggalo1,repvtyrj,zxcasdqw,123445,whore1,123678,monkey6,west123,warcraf,pwnage,mystery1,creamyou,ant123,rehjgfnrf,corona1,coleman1,steve121,alderaan,barnaul,celeste1,junebug1,bombshel,gretzky9,tankist,targa,cachou,vaz2101,playgolf,boneyard,strateg,romawka,iforgotit,pullup,garbage1,irock,archmage,shaft1,oceano,sadies,alvin1,135135ab,psalm69,lmfao,ranger02,zaharova,33334444,perkman,realman,salguod,cmoney,astonmartin,glock1,greyfox,viper99,helpm,blackdick,46775575,family5,shazbot,dewey1,qwertyas,shivani,black22,mailman1,greenday1,57392632,red007,stanky,sanchez1,tysons,daruma,altosax,krayzie,85852008,1forever,98798798,irock.,123456654,142536789,ford22,brick1,michela,preciou,crazy4u,01telemike01,nolife,concac,safety1,annie123,brunswic,destini,123456qwer,madison0,snowball1,137946,1133557799,jarule,scout2,songohan,thedead,00009999,murphy01,spycam,hirsute,aurinko,associat,1miller,baklan,hermes1,2183rm,martie,kangoo,shweta,yvonne1,westsid,jackpot1,rotciv,maratik,fabrika,claude1,nursultan,noentry,ytnhjufnm,electra1,ghjcnjnfr1,puneet,smokey01,integrit,bugeye,trouble2,14071789,paul01,omgwtf,dmh415,ekilpool,yourmom1,moimeme,sparky11,boludo,ruslan123,kissme1,demetrio,appelsin,asshole3,raiders2,bunns,fynjybj,billygoa,p030710p$e4o,macdonal,248ujnfk,acorns,schmidt1,sparrow1,vinbylrj,weasle,jerom,ycwvrxxh,skywalk,gerlinde,solidus,postal1,poochie1,1charles,rhianna,terorist,rehnrf,omgwtfbbq,assfucke,deadend,zidan,jimboy,vengence,maroon5,7452tr,dalejr88,sombra,anatole,elodi,amazonas,147789,q12345q,gawker1,juanma,kassidy,greek1,bruces,bilbob,mike44,0o9i8u7y6t,kaligula,agentx,familie,anders1,pimpjuice,0128um,birthday10,lawncare,hownow,grandorgue,juggerna,scarfac,kensai,swatteam,123four,motorbike,repytxbr,other1,celicagt,pleomax,gen0303,godisgreat,icepick,lucifer666,heavy1,tea4two,forsure,02020,shortdog,webhead,chris13,palenque,3techsrl,knights1,orenburg,prong,nomarg,wutang1,80637852730,laika,iamfree,12345670,pillow1,12343412,bigears,peterg,stunna,rocky5,12123434,damir,feuerwehr,7418529630,danone,yanina,valenci,andy69,111222q,silvia1,1jjjjj,loveforever,passwo1,stratocaster,8928190a,motorolla,lateralu,ujujkm,chubba,ujkjdf,signon,123456789zx,serdce,stevo,wifey200,ololo123,popeye1,1pass,central1,melena,luxor,nemezida,poker123,ilovemusic,qaz1234,noodles1,lakeshow,amarill,ginseng,billiam,trento,321cba,fatback,soccer33,master13,marie2,newcar,bigtop,dark1,camron,nosgoth,155555,biglou,redbud,jordan7,159789,diversio,actros,dazed,drizzit,hjcnjd,wiktoria,justic,gooses,luzifer,darren1,chynna,tanuki,11335577,icculus,boobss,biggi,firstson,ceisi123,gatewa,hrothgar,jarhead1,happyjoy,felipe1,bebop1,medman,athena1,boneman,keiths,djljgfl,dicklick,russ120,mylady,zxcdsa,rock12,bluesea,kayaks,provista,luckies,smile4me,bootycal,enduro,123123f,heartbre,ern3sto,apple13,bigpappa,fy.njxrf,bigtom,cool69,perrito,quiet1,puszek,cious,cruella,temp1,david26,alemap,aa123123,teddies,tricolor,smokey12,kikiriki,mickey01,robert01,super5,ranman,stevenso,deliciou,money777,degauss,mozar,susanne1,asdasd12,shitbag,mommy123,wrestle1,imfree,fuckyou12,barbaris,florent,ujhijr,f8yruxoj,tefjps,anemone,toltec,2gether,left4dead2,ximen,gfkmvf,dunca,emilys,diana123,16473a,mark01,bigbro,annarbor,nikita2000,11aa11,tigres,llllll1,loser2,fbi11213,jupite,qwaszxqw,macabre,123ert,rev2000,mooooo,klapaucius,bagel1,chiquit,iyaoyas,bear101,irocz28,vfktymrfz,smokey2,love99,rfhnbyf,dracul,keith123,slicko,peacock1,orgasmic,thesnake,solder,wetass,doofer,david5,rhfcyjlfh,swanny,tammys,turkiye,tubaman,estefani,firehose,funnyguy,servo,grace17,pippa1,arbiter,jimmy69,nfymrf,asdf67nm,rjcnzy,demon123,thicknes,sexysex,kristall,michail,encarta,banderos,minty,marchenko,de1987ma,mo5kva,aircav,naomi1,bonni,tatoo,cronaldo,49ers1,mama1963,1truck,telecaster,punksnotdead,erotik,1eagles,1fender,luv269,acdeehan,tanner1,freema,1q3e5t7u,linksys,tiger6,megaman1,neophyte,australia1,mydaddy,1jeffrey,fgdfgdfg,gfgekz,1986irachka,keyman,m0b1l3,dfcz123,mikeyg,playstation2,abc125,slacker1,110491g,lordsoth,bhavani,ssecca,dctvghbdtn,niblick,hondacar,baby01,worldcom,4034407,51094didi,3657549,3630000,3578951,sweetpussy,majick,supercoo,robert11,abacabb,panda123,gfhjkm13,ford4x4,zippo1,lapin,1726354,lovesong,dude11,moebius,paravoz,1357642,matkhau,solnyshko,daniel4,multiplelog,starik,martusia,iamtheman,greentre,jetblue,motorrad,vfrcbvev,redoak,dogma1,gnorman,komlos,tonka1,1010220,666satan,losenord,lateralus,absinthe,command1,jigga1,iiiiiii1,pants1,jungfrau,926337,ufhhbgjnnth,yamakasi,888555,sunny7,gemini69,alone1,zxcvbnmz,cabezon,skyblues,zxc1234,456123a,zero00,caseih,azzurra,legolas1,menudo,murcielago,785612,779977,benidorm,viperman,dima1985,piglet1,hemligt,hotfeet,7elephants,hardup,gamess,a000000,267ksyjf,kaitlynn,sharkie,sisyphus,yellow22,667766,redvette,666420,mets69,ac2zxdty,hxxrvwcy,cdavis,alan1,noddy,579300,druss,eatshit1,555123,appleseed,simpleplan,kazak,526282,fynfyfyfhbde,birthday6,dragon6,1pookie,bluedevils,omg123,hj8z6e,x5dxwp,455445,batman23,termin,chrisbrown,animals1,lucky9,443322,kzktxrf,takayuki,fermer,assembler,zomu9q,sissyboy,sergant,felina,nokia6230i,eminem12,croco,hunt4red,festina,darknigh,cptnz062,ndshnx4s,twizzler,wnmaz7sd,aamaax,gfhfcjkmrf,alabama123,barrynov,happy5,punt0it,durandal,8xuuobe4,cmu9ggzh,bruno12,316497,crazyfrog,vfvfktyf,apple3,kasey1,mackdaddy,anthon1,sunnys,angel3,cribbage,moon1,donal,bryce1,pandabear,mwss474,whitesta,freaker,197100,bitche,p2ssw0rd,turnb,tiktonik,moonlite,ferret1,jackas,ferrum,bearclaw,liberty2,1diablo,caribe,snakeeyes,janbam,azonic,rainmaker,vetalik,bigeasy,baby1234,sureno13,blink1,kluivert,calbears,lavanda,198600,dhtlbyf,medvedeva,fox123,whirling,bonscott,freedom9,october3,manoman,segredo,cerulean,robinso,bsmith,flatus,dannon,password21,rrrrrr1,callista,romai,rainman1,trantor,mickeymo,bulldog7,g123456,pavlin,pass22,snowie,hookah,7ofnine,bubba22,cabible,nicerack,moomoo1,summer98,yoyo123,milan1,lieve27,mustang69,jackster,exocet,nadege,qaz12,bahama,watson1,libras,eclipse2,bahram,bapezm,up9x8rww,ghjcnjz,themaste,deflep27,ghost16,gattaca,fotograf,junior123,gilber,gbjyth,8vjzus,rosco1,begonia,aldebara,flower12,novastar,buzzman,manchild,lopez1,mama11,william7,yfcnz1,blackstar,spurs123,moom4242,1amber,iownyou,tightend,07931505,paquito,1johnson,smokepot,pi31415,snowmass,ayacdc,jessicam,giuliana,5tgbnhy6,harlee,giuli,bigwig,tentacle,scoubidou2,benelli,vasilina,nimda,284655,jaihind,lero4ka,1tommy,reggi,ididit,jlbyjxtcndj,mike26,qbert,wweraw,lukasz,loosee123,palantir,flint1,mapper,baldie,saturne,virgin1,meeeee,elkcit,iloveme2,blue15,themoon,radmir,number3,shyanne,missle,hannelor,jasmina,karin1,lewie622,ghjcnjqgfhjkm,blasters,oiseau,sheela,grinders,panget,rapido,positiv,twink,fltkbyf,kzsfj874,daniel01,enjoyit,nofags,doodad,rustler,squealer,fortunat,peace123,khushi,devils2,7inches,candlebo,topdawg,armen,soundman,zxcqweasd,april7,gazeta,netman,hoppers,bear99,ghbjhbntn,mantle7,bigbo,harpo,jgordon,bullshi,vinny1,krishn,star22,thunderc,galinka,phish123,tintable,nightcrawler,tigerboy,rbhgbx,messi,basilisk,masha1998,nina123,yomamma,kayla123,geemoney,0000000000d,motoman,a3jtni,ser123,owen10,italien,vintelok,12345rewq,nightime,jeepin,ch1tt1ck,mxyzptlk,bandido,ohboy,doctorj,hussar,superted,parfilev,grundle,1jack,livestrong,chrisj,matthew3,access22,moikka,fatone,miguelit,trivium,glenn1,smooches,heiko,dezember,spaghett,stason,molokai,bossdog,guitarma,waderh,boriska,photosho,path13,hfrtnf,audre,junior24,monkey24,silke,vaz21093,bigblue1,trident1,candide,arcanum,klinker,orange99,bengals1,rosebu,mjujuj,nallepuh,mtwapa1a,ranger69,level1,bissjop,leica,1tiffany,rutabega,elvis77,kellie1,sameas,barada,karabas,frank12,queenb,toutoune,surfcity,samanth1,monitor1,littledo,kazakova,fodase,mistral1,april22,carlit,shakal,batman123,fuckoff2,alpha01,5544332211,buddy3,towtruck,kenwood1,vfiekmrf,jkl123,pypsik,ranger75,sitges,toyman,bartek1,ladygirl,booman,boeing77,installsqlst,222666,gosling,bigmack,223311,bogos,kevin2,gomez1,xohzi3g4,kfnju842,klubnika,cubalibr,123456789101,kenpo,0147852369,raptor1,tallulah,boobys,jjones,1q2s3c,moogie,vid2600,almas,wombat1,extra300,xfiles1,green77,sexsex1,heyjude,sammyy,missy123,maiyeuem,nccpl25282,thicluv,sissie,raven3,fldjrfn,buster22,broncos2,laurab,letmein4,harrydog,solovey,fishlips,asdf4321,ford123,superjet,norwegen,movieman,psw333333,intoit,postbank,deepwate,ola123,geolog323,murphys,eshort,a3eilm2s2y,kimota,belous,saurus,123321qaz,i81b4u,aaa12,monkey20,buckwild,byabybnb,mapleleafs,yfcnzyfcnz,baby69,summer03,twista,246890,246824,ltcnhjth,z1z2z3,monika1,sad123,uto29321,bathory,villan,funkey,poptarts,spam967888,705499fh,sebast,porn1234,earn381,1porsche,whatthef,123456789y,polo12,brillo,soreilly,waters1,eudora,allochka,is_a_bot,winter00,bassplay,531879fiz,onemore,bjarne,red911,kot123,artur1,qazxdr,c0rvette,diamond7,matematica,klesko,beaver12,2enter,seashell,panam,chaching,edward2,browni,xenogear,cornfed,aniram,chicco22,darwin1,ancella2,sophie2,vika1998,anneli,shawn41,babie,resolute,pandora2,william8,twoone,coors1,jesusis1,teh012,cheerlea,renfield,tessa1,anna1986,madness1,bkmlfh,19719870,liebherr,ck6znp42,gary123,123654z,alsscan,eyedoc,matrix7,metalgea,chinito,4iter,falcon11,7jokx7b9du,bigfeet,tassadar,retnuh,muscle1,klimova,darion,batistuta,bigsur,1herbier,noonie,ghjrehjh,karimova,faustus,snowwhite,1manager,dasboot,michael12,analfuck,inbed,dwdrums,jaysoncj,maranell,bsheep75,164379,rolodex,166666,rrrrrrr1,almaz666,167943,russel1,negrito,alianz,goodpussy,veronik,1w2q3r4e,efremov,emb377,sdpass,william6,alanfahy,nastya1995,panther5,automag,123qwe12,vfvf2011,fishe,1peanut,speedie,qazwsx1234,pass999,171204j,ketamine,sheena1,energizer,usethis1,123abc123,buster21,thechamp,flvbhfk,frank69,chane,hopeful1,claybird,pander,anusha,bigmaxxx,faktor,housebed,dimidrol,bigball,shashi,derby1,fredy,dervish,bootycall,80988218126,killerb,cheese2,pariss,mymail,dell123,catbert,christa1,chevytru,gjgjdf,00998877,overdriv,ratten,golf01,nyyanks,dinamite,bloembol,gismo,magnus1,march2,twinkles,ryan22,duckey,118a105b,kitcat,brielle,poussin,lanzarot,youngone,ssvegeta,hero63,battle1,kiler,fktrcfylh1,newera,vika1996,dynomite,oooppp,beer4me,foodie,ljhjuf,sonshine,godess,doug1,constanc,thinkbig,steve2,damnyou,autogod,www333,kyle1,ranger7,roller1,harry2,dustin1,hopalong,tkachuk,b00bies,bill2,deep111,stuffit,fire69,redfish1,andrei123,graphix,1fishing,kimbo1,mlesp31,ifufkbyf,gurkan,44556,emily123,busman,and123,8546404,paladine,1world,bulgakov,4294967296,bball23,1wwwww,mycats,elain,delta6,36363,emilyb,color1,6060842,cdtnkfyrf,hedonism,gfgfrfhkj,5551298,scubad,gostate,sillyme,hdbiker,beardown,fishers,sektor,00000007,newbaby,rapid1,braves95,gator2,nigge,anthony3,sammmy,oou812,heffer,phishin,roxanne1,yourass,hornet1,albator,2521659,underwat,tanusha,dianas,3f3fpht7op,dragon20,bilbobag,cheroke,radiatio,dwarf1,majik,33st33,dochka,garibald,robinh,sham69,temp01,wakeboar,violet1,1w2w3w,registr,tonite,maranello,1593570,parolamea,galatasara,loranthos,1472583,asmodean,1362840,scylla,doneit,jokerr,porkypig,kungen,mercator,koolhaas,come2me,debbie69,calbear,liverpoolfc,yankees4,12344321a,kennyb,madma,85200258,dustin23,thomas13,tooling,mikasa,mistic,crfnbyf,112233445,sofia1,heinz57,colts1,price1,snowey,joakim,mark11,963147,cnhfcnm,kzinti,1bbbbbbb,rubberdu,donthate,rupert1,sasha1992,regis1,nbuhbwf,fanboy,sundial,sooner1,wayout,vjnjhjkf,deskpro,arkangel,willie12,mikeyb,celtic1888,luis1,buddy01,duane1,grandma1,aolcom,weeman,172839456,basshead,hornball,magnu,pagedown,molly2,131517,rfvtgbyhn,astonmar,mistery,madalina,cash1,1happy,shenlong,matrix01,nazarova,369874125,800500,webguy,rse2540,ashley2,briank,789551,786110,chunli,j0nathan,greshnik,courtne,suckmyco,mjollnir,789632147,asdfg1234,754321,odelay,ranma12,zebedee,artem777,bmw318is,butt1,rambler1,yankees9,alabam,5w76rnqp,rosies,mafioso,studio1,babyruth,tranzit,magical123,gfhjkm135,12345$,soboleva,709394,ubique,drizzt1,elmers,teamster,pokemons,1472583690,1597532486,shockers,merckx,melanie2,ttocs,clarisse,earth1,dennys,slobber,flagman,farfalla,troika,4fa82hyx,hakan,x4ww5qdr,cumsuck,leather1,forum1,july20,barbel,zodiak,samuel12,ford01,rushfan,bugsy1,invest1,tumadre,screwme,a666666,money5,henry8,tiddles,sailaway,starburs,100years,killer01,comando,hiromi,ranetka,thordog,blackhole,palmeira,verboten,solidsna,q1w1e1,humme,kevinc,gbrfxe,gevaudan,hannah11,peter2,vangar,sharky7,talktome,jesse123,chuchi,pammy,!qazxsw2,siesta,twenty1,wetwilly,477041,natural1,sun123,daniel3,intersta,shithead1,hellyea,bonethugs,solitair,bubbles2,father1,nick01,444000,adidas12,dripik,cameron2,442200,a7nz8546,respublika,fkojn6gb,428054,snoppy,rulez1,haslo,rachael1,purple01,zldej102,ab12cd34,cytuehjxrf,madhu,astroman,preteen,handsoff,mrblonde,biggio,testin,vfdhif,twolves,unclesam,asmara,kpydskcw,lg2wmgvr,grolsch,biarritz,feather1,williamm,s62i93,bone1,penske,337733,336633,taurus1,334433,billet,diamondd,333000,nukem,fishhook,godogs,thehun,lena1982,blue00,smelly1,unb4g9ty,65pjv22,applegat,mikehunt,giancarlo,krillin,felix123,december1,soapy,46doris,nicole23,bigsexy1,justin10,pingu,bambou,falcon12,dgthtl,1surfer,qwerty01,estrellit,nfqcjy,easygo,konica,qazqwe,1234567890m,stingers,nonrev,3e4r5t,champio,bbbbbb99,196400,allen123,seppel,simba2,rockme,zebra3,tekken3,endgame,sandy2,197300,fitte,monkey00,eldritch,littleone,rfyfgkz,1member,66chevy,oohrah,cormac,hpmrbm41,197600,grayfox,elvis69,celebrit,maxwell7,rodders,krist,1camaro,broken1,kendall1,silkcut,katenka,angrick,maruni,17071994a,tktyf,kruemel,snuffles,iro4ka,baby12,alexis01,marryme,vlad1994,forward1,culero,badaboom,malvin,hardtoon,hatelove,molley,knopo4ka,duchess1,mensuck,cba321,kickbutt,zastava,wayner,fuckyou6,eddie123,cjkysir,john33,dragonfi,cody1,jabell,cjhjrf,badseed,sweden1,marihuana,brownlov,elland,nike1234,kwiettie,jonnyboy,togepi,billyk,robert123,bb334,florenci,ssgoku,198910,bristol1,bob007,allister,yjdujhjl,gauloise,198920,bellaboo,9lives,aguilas,wltfg4ta,foxyroxy,rocket69,fifty50,babalu,master21,malinois,kaluga,gogosox,obsessio,yeahrigh,panthers1,capstan,liza2000,leigh1,paintball1,blueskie,cbr600f3,bagdad,jose98,mandreki,shark01,wonderbo,muledeer,xsvnd4b2,hangten,200001,grenden,anaell,apa195,model1,245lufpq,zip100,ghjcgtrn,wert1234,misty2,charro,juanjose,fkbcrf,frostbit,badminto,buddyy,1doctor,vanya,archibal,parviz,spunky1,footboy,dm6tzsgp,legola,samadhi,poopee,ytdxz2ca,hallowboy,dposton,gautie,theworm,guilherme,dopehead,iluvtits,bobbob1,ranger6,worldwar,lowkey,chewbaca,oooooo99,ducttape,dedalus,celular,8i9o0p,borisenko,taylor01,111111z,arlingto,p3nnywiz,rdgpl3ds,boobless,kcmfwesg,blacksab,mother2,markus1,leachim,secret2,s123456789,1derful,espero,russell2,tazzer,marykate,freakme,mollyb,lindros8,james00,gofaster,stokrotka,kilbosik,aquamann,pawel1,shedevil,mousie,slot2009,october6,146969,mm259up,brewcrew,choucho,uliana,sexfiend,fktirf,pantss,vladimi,starz,sheeps,12341234q,bigun,tiggers,crjhjcnm,libtech,pudge1,home12,zircon,klaus1,jerry2,pink1,lingus,monkey66,dumass,polopolo09,feuerweh,rjyatnf,chessy,beefer,shamen,poohbear1,4jjcho,bennevis,fatgirls,ujnbrf,cdexswzaq,9noize9,rich123,nomoney,racecar1,hacke,clahay,acuario,getsum,hondacrv,william0,cheyenn,techdeck,atljhjdf,wtcacq,suger,fallenangel,bammer,tranquil,carla123,relayer,lespaul1,portvale,idontno,bycnbnen,trooper2,gennadiy,pompon,billbob,amazonka,akitas,chinatow,atkbrc,busters,fitness1,cateye,selfok2013,1murphy,fullhous,mucker,bajskorv,nectarin,littlebitch,love24,feyenoor,bigal37,lambo1,pussybitch,icecube1,biged,kyocera,ltybcjdf,boodle,theking1,gotrice,sunset1,abm1224,fromme,sexsells,inheat,kenya1,swinger1,aphrodit,kurtcobain,rhind101,poidog,poiulkjh,kuzmina,beantown,tony88,stuttgar,drumer,joaqui,messenge,motorman,amber2,nicegirl,rachel69,andreia,faith123,studmuffin,jaiden,red111,vtkmybr,gamecocks,gumper,bosshogg,4me2know,tokyo1,kleaner,roadhog,fuckmeno,phoenix3,seeme,buttnutt,boner69,andreyka,myheart,katerin,rugburn,jvtuepip,dc3ubn,chile1,ashley69,happy99,swissair,balls2,fylhttdf,jimboo,55555d,mickey11,voronin,m7hsqstm,stufff,merete,weihnachte,dowjones,baloo1,freeones,bears34,auburn1,beverl,timberland,1elvis,guinness1,bombadil,flatron1,logging7,telefoon,merl1n,masha1,andrei1,cowabung,yousuck1,1matrix,peopl,asd123qwe,sweett,mirror1,torrente,joker12,diamond6,jackaroo,00000a,millerlite,ironhorse,2twins,stryke,gggg1,zzzxxxccc,roosevel,8363eddy,angel21,depeche1,d0ct0r,blue14,areyou,veloce,grendal,frederiksberg,cbcntvf,cb207sl,sasha2000,was.here,fritzz,rosedale,spinoza,cokeisit,gandalf3,skidmark,ashley01,12345j,1234567890qaz,sexxxxxx,beagles,lennart,12345789,pass10,politic,max007,gcheckou,12345611,tiffy,lightman,mushin,velosiped,brucewayne,gauthie,elena123,greenegg,h2oski,clocker,nitemare,123321s,megiddo,cassidy1,david13,boywonde,flori,peggy12,pgszt6md,batterie,redlands,scooter6,bckhere,trueno,bailey11,maxwell2,bandana,timoth1,startnow,ducati74,tiern,maxine1,blackmetal,suzyq,balla007,phatfarm,kirsten1,titmouse,benhogan,culito,forbin,chess1,warren1,panman,mickey7,24lover,dascha,speed2,redlion,andrew10,johnwayn,nike23,chacha1,bendog,bullyboy,goldtree,spookie,tigger99,1cookie,poutine,cyclone1,woodpony,camaleun,bluesky1,dfadan,eagles20,lovergirl,peepshow,mine1,dima1989,rjdfkmxer,11111aaaaa,machina,august17,1hhhhh,0773417k,1monster,freaksho,jazzmin,davidw,kurupt,chumly,huggies,sashenka,ccccccc1,bridge1,giggalo,cincinna,pistol1,hello22,david77,lightfoo,lucky6,jimmy12,261397,lisa12,tabaluga,mysite,belo4ka,greenn,eagle99,punkrawk,salvado,slick123,wichsen,knight99,dummys,fefolico,contrera,kalle1,anna1984,delray,robert99,garena,pretende,racefan,alons,serenada,ludmilla,cnhtkjr,l0swf9gx,hankster,dfktynbyrf,sheep1,john23,cv141ab,kalyani,944turbo,crystal2,blackfly,zrjdktdf,eus1sue1,mario5,riverplate,harddriv,melissa3,elliott1,sexybitc,cnhfyybr,jimdavis,bollix,beta1,amberlee,skywalk1,natala,1blood,brattax,shitty1,gb15kv99,ronjon,rothmans,thedoc,joey21,hotboi,firedawg,bimbo38,jibber,aftermat,nomar,01478963,phishing,domodo,anna13,materia,martha1,budman1,gunblade,exclusiv,sasha1997,anastas,rebecca2,fackyou,kallisti,fuckmyass,norseman,ipswich1,151500,1edward,intelinside,darcy1,bcrich,yjdjcnbf,failte,buzzzz,cream1,tatiana1,7eleven,green8,153351,1a2s3d4f5g6h,154263,milano1,bambi1,bruins77,rugby2,jamal1,bolita,sundaypunch,bubba12,realmadr,vfyxtcnth,iwojima,notlob,black666,valkiria,nexus1,millerti,birthday100,swiss1,appollo,gefest,greeneyes,celebrat,tigerr,slava123,izumrud,bubbabub,legoman,joesmith,katya123,sweetdream,john44,wwwwwww1,oooooo1,socal,lovespor,s5r8ed67s,258147,heidis,cowboy22,wachovia,michaelb,qwe1234567,i12345,255225,goldie1,alfa155,45colt,safeu851,antonova,longtong,1sparky,gfvznm,busen,hjlbjy,whateva,rocky4,cokeman,joshua3,kekskek1,sirocco,jagman,123456qwert,phinupi,thomas10,loller,sakur,vika2011,fullred,mariska,azucar,ncstate,glenn74,halima,aleshka,ilovemylife,verlaat,baggie,scoubidou6,phatboy,jbruton,scoop1,barney11,blindman,def456,maximus2,master55,nestea,11223355,diego123,sexpistols,sniffy,philip1,f12345,prisonbreak,nokia2700,ajnjuhfa,yankees3,colfax,ak470000,mtnman,bdfyeirf,fotball,ichbin,trebla,ilusha,riobravo,beaner1,thoradin,polkaudi,kurosawa,honda123,ladybu,valerik,poltava,saviola,fuckyouguys,754740g0,anallove,microlab1,juris01,ncc1864,garfild,shania1,qagsud,makarenko,cindy69,lebedev,andrew11,johnnybo,groovy1,booster1,sanders1,tommyb,johnson4,kd189nlcih,hondaman,vlasova,chick1,sokada,sevisgur,bear2327,chacho,sexmania,roma1993,hjcnbckfd,valley1,howdie,tuppence,jimandanne,strike3,y4kuz4,nhfnfnf,tsubasa,19955991,scabby,quincunx,dima1998,uuuuuu1,logica,skinner1,pinguino,lisa1234,xpressmusic,getfucked,qqqq1,bbbb1,matulino,ulyana,upsman,johnsmith,123579,co2000,spanner1,todiefor,mangoes,isabel1,123852,negra,snowdon,nikki123,bronx1,booom,ram2500,chuck123,fireboy,creek1,batman13,princesse,az12345,maksat,1knight,28infern,241455,r7112s,muselman,mets1986,katydid,vlad777,playme,kmfdm1,asssex,1prince,iop890,bigbroth,mollymoo,waitron,lizottes,125412,juggler,quinta,0sister0,zanardi,nata123,heckfyxbr,22q04w90e,engine2,nikita95,zamira,hammer22,lutscher,carolina1,zz6319,sanman,vfuflfy,buster99,rossco,kourniko,aggarwal,tattoo1,janice1,finger1,125521,19911992,shdwlnds,rudenko,vfvfgfgf123,galatea,monkeybu,juhani,premiumcash,classact,devilmay,helpme2,knuddel,hardpack,ramil,perrit,basil1,zombie13,stockcar,tos8217,honeypie,nowayman,alphadog,melon1,talula,125689,tiribon12,tornike,haribol,telefone,tiger22,sucka,lfytxrf,chicken123,muggins,a23456,b1234567,lytdybr,otter1,pippa,vasilisk,cooking1,helter,78978,bestboy,viper7,ahmed1,whitewol,mommys,apple5,shazam1,chelsea7,kumiko,masterma,rallye,bushmast,jkz123,entrar,andrew6,nathan01,alaric,tavasz,heimdall,gravy1,jimmy99,cthlwt,powerr,gthtrhtcnjr,canesfan,sasha11,ybrbnf_25,august9,brucie,artichok,arnie1,superdude,tarelka,mickey22,dooper,luners,holeshot,good123,gettysbu,bicho,hammer99,divine5,1zxcvbn,stronzo,q22222,disne,bmw750il,godhead,hallodu,aerith,nastik,differen,cestmoi,amber69,5string,pornosta,dirtygirl,ginger123,formel1,scott12,honda200,hotspurs,johnatha,firstone123,lexmark1,msconfig,karlmasc,l123456,123qweasdzx,baldman,sungod,furka,retsub,9811020,ryder1,tcglyued,astron,lbvfcbr,minddoc,dirt49,baseball12,tbear,simpl,schuey,artimus,bikman,plat1num,quantex,gotyou,hailey1,justin01,ellada,8481068,000002,manimal,dthjybxrf,buck123,dick123,6969696,nospam,strong1,kodeord,bama12,123321w,superman123,gladiolus,nintend,5792076,dreamgirl,spankme1,gautam,arianna1,titti,tetas,cool1234,belladog,importan,4206969,87e5nclizry,teufelo7,doller,yfl.irf,quaresma,3440172,melis,bradle,nnmaster,fast1,iverso,blargh,lucas12,chrisg,iamsam,123321az,tomjerry,kawika,2597174,standrew,billyg,muskan,gizmodo2,rz93qpmq,870621345,sathya,qmezrxg4,januari,marthe,moom4261,cum2me,hkger286,lou1988,suckit1,croaker,klaudia1,753951456,aidan1,fsunoles,romanenko,abbydog,isthebes,akshay,corgi,fuck666,walkman555,ranger98,scorpian,hardwareid,bluedragon,fastman,2305822q,iddqdiddqd,1597532,gopokes,zvfrfcb,w1234567,sputnik1,tr1993,pa$$w0rd,2i5fdruv,havvoc,1357913,1313131,bnm123,cowd00d,flexscan,thesims2,boogiema,bigsexxy,powerstr,ngc4565,joshman,babyboy1,123jlb,funfunfu,qwe456,honor1,puttana,bobbyj,daniel21,pussy12,shmuck,1232580,123578951,maxthedo,hithere1,bond0007,gehenna,nomames,blueone,r1234567,bwana,gatinho,1011111,torrents,cinta,123451234,tiger25,money69,edibey,pointman,mmcm19,wales1,caffreys,phaedra,bloodlus,321ret32,rufuss,tarbit,joanna1,102030405,stickboy,lotrfotr34,jamshid,mclarenf1,ataman,99ford,yarrak,logan2,ironlung,pushistik,dragoon1,unclebob,tigereye,pinokio,tylerj,mermaid1,stevie1,jaylen,888777,ramana,roman777,brandon7,17711771s,thiago,luigi1,edgar1,brucey,videogam,classi,birder,faramir,twiddle,cubalibre,grizzy,fucky,jjvwd4,august15,idinahui,ranita,nikita1998,123342,w1w2w3,78621323,4cancel,789963,(null,vassago,jaydog472,123452,timt42,canada99,123589,rebenok,htyfnf,785001,osipov,maks123,neverwinter,love2010,777222,67390436,eleanor1,bykemo,aquemini,frogg,roboto,thorny,shipmate,logcabin,66005918,nokian,gonzos,louisian,1abcdefg,triathlo,ilovemar,couger,letmeino,supera,runvs,fibonacci,muttly,58565254,5thgbqi,vfnehsv,electr,jose12,artemis1,newlove,thd1shr,hawkey,grigoryan,saisha,tosca,redder,lifesux,temple1,bunnyman,thekids,sabbeth,tarzan1,182838,158uefas,dell50,1super,666222,47ds8x,jackhamm,mineonly,rfnfhbyf,048ro,665259,kristina1,bombero,52545856,secure1,bigloser,peterk,alex2,51525354,anarchy1,superx,teenslut,money23,sigmapi,sanfrancisco,acme34,private5,eclips,qwerttrewq,axelle,kokain,hardguy,peter69,jesuschr,dyanna,dude69,sarah69,toyota91,amberr,45645645,bugmenot,bigted,44556677,556644,wwr8x9pu,alphaome,harley13,kolia123,wejrpfpu,revelati,nairda,sodoff,cityboy,pinkpussy,dkalis,miami305,wow12345,triplet,tannenbau,asdfasdf1,darkhors,527952,retired1,soxfan,nfyz123,37583867,goddes,515069,gxlmxbewym,1warrior,36925814,dmb2011,topten,karpova,89876065093rax,naturals,gateway9,cepseoun,turbot,493949,cock22,italia1,sasafras,gopnik,stalke,1qazxdr5,wm2006,ace1062,alieva,blue28,aracel,sandia,motoguzz,terri1,emmajane,conej,recoba,alex1995,jerkyboy,cowboy12,arenrone,precisio,31415927,scsa316,panzer1,studly1,powerhou,bensam,mashoutq,billee,eeyore1,reape,thebeatl,rul3z,montesa,doodle1,cvzefh1gk,424365,a159753,zimmerma,gumdrop,ashaman,grimreap,icandoit,borodina,branca,dima2009,keywest1,vaders,bubluk,diavolo,assss,goleta,eatass,napster1,382436,369741,5411pimo,lenchik,pikach,gilgamesh,kalimera,singer1,gordon2,rjycnbnewbz,maulwurf,joker13,2much4u,bond00,alice123,robotec,fuckgirl,zgjybz,redhorse,margaret1,brady1,pumpkin2,chinky,fourplay,1booger,roisin,1brandon,sandan,blackheart,cheez,blackfin,cntgfyjdf,mymoney1,09080706,goodboss,sebring1,rose1,kensingt,bigboner,marcus12,ym3cautj,struppi,thestone,lovebugs,stater,silver99,forest99,qazwsx12345,vasile,longboar,mkonji,huligan,rhfcbdfz,airmail,porn11,1ooooo,sofun,snake2,msouthwa,dougla,1iceman,shahrukh,sharona,dragon666,france98,196800,196820,ps253535,zjses9evpa,sniper01,design1,konfeta,jack99,drum66,good4you,station2,brucew,regedit,school12,mvtnr765,pub113,fantas,tiburon1,king99,ghjcnjgbpltw,checkito,308win,1ladybug,corneliu,svetasveta,197430,icicle,imaccess,ou81269,jjjdsl,brandon6,bimbo1,smokee,piccolo1,3611jcmg,children2,cookie2,conor1,darth1,margera,aoi856,paully,ou812345,sklave,eklhigcz,30624700,amazing1,wahooo,seau55,1beer,apples2,chulo,dolphin9,heather6,198206,198207,hergood,miracle1,njhyflj,4real,milka,silverfi,fabfive,spring12,ermine,mammy,jumpjet,adilbek,toscana,caustic,hotlove,sammy69,lolita1,byoung,whipme,barney01,mistys,tree1,buster3,kaylin,gfccgjhn,132333,aishiteru,pangaea,fathead1,smurph,198701,ryslan,gasto,xexeylhf,anisimov,chevyss,saskatoo,brandy12,tweaker,irish123,music2,denny1,palpatin,outlaw1,lovesuck,woman1,mrpibb,diadora,hfnfneq,poulette,harlock,mclaren1,cooper12,newpass3,bobby12,rfgecnfcerf,alskdjfh,mini14,dukers,raffael,199103,cleo123,1234567qwertyu,mossberg,scoopy,dctulf,starline,hjvjxrf,misfits1,rangers2,bilbos,blackhea,pappnase,atwork,purple2,daywalker,summoner,1jjjjjjj,swansong,chris10,laluna,12345qqq,charly1,lionsden,money99,silver33,hoghead,bdaddy,199430,saisg002,nosaints,tirpitz,1gggggg,jason13,kingss,ernest1,0cdh0v99ue,pkunzip,arowana,spiri,deskjet1,armine,lances,magic2,thetaxi,14159265,cacique,14142135,orange10,richard0,backdraf,255ooo,humtum,kohsamui,c43dae874d,wrestling1,cbhtym,sorento,megha,pepsiman,qweqwe12,bliss7,mario64,korolev,balls123,schlange,gordit,optiquest,fatdick,fish99,richy,nottoday,dianne1,armyof1,1234qwerasdfzxcv,bbonds,aekara,lidiya,baddog1,yellow5,funkie,ryan01,greentree,gcheckout,marshal1,liliput,000000z,rfhbyrf,gtogto43,rumpole,tarado,marcelit,aqwzsxedc,kenshin1,sassydog,system12,belly1,zilla,kissfan,tools1,desember,donsdad,nick11,scorpio6,poopoo1,toto99,steph123,dogfuck,rocket21,thx113,dude12,sanek,sommar,smacky,pimpsta,letmego,k1200rs,lytghjgtnhjdcr,abigale,buddog,deles,baseball9,roofus,carlsbad,hamzah,hereiam,genial,schoolgirlie,yfz450,breads,piesek,washear,chimay,apocalyp,nicole18,gfgf1234,gobulls,dnevnik,wonderwall,beer1234,1moose,beer69,maryann1,adpass,mike34,birdcage,hottuna,gigant,penquin,praveen,donna123,123lol123,thesame,fregat,adidas11,selrahc,pandoras,test3,chasmo,111222333000,pecos,daniel11,ingersol,shana1,mama12345,cessna15,myhero,1simpson,nazarenko,cognit,seattle2,irina1,azfpc310,rfycthdf,hardy1,jazmyn,sl1200,hotlanta,jason22,kumar123,sujatha,fsd9shtyu,highjump,changer,entertai,kolding,mrbig,sayuri,eagle21,qwertzu,jorge1,0101dd,bigdong,ou812a,sinatra1,htcnjhfy,oleg123,videoman,pbyfblf,tv612se,bigbird1,kenaidog,gunite,silverma,ardmore,123123qq,hotbot,cascada,cbr600f4,harakiri,chico123,boscos,aaron12,glasgow1,kmn5hc,lanfear,1light,liveoak,fizika,ybrjkftdyf,surfside,intermilan,multipas,redcard,72chevy,balata,coolio1,schroede,kanat,testerer,camion,kierra,hejmeddig,antonio2,tornados,isidor,pinkey,n8skfswa,ginny1,houndog,1bill,chris25,hastur,1marine,greatdan,french1,hatman,123qqq,z1z2z3z4,kicker1,katiedog,usopen,smith22,mrmagoo,1234512i,assa123,7seven7,monster7,june12,bpvtyf,149521,guenter,alex1985,voronina,mbkugegs,zaqwsxcderfv,rusty5,mystic1,master0,abcdef12,jndfkb,r4zpm3,cheesey,skripka,blackwhite,sharon69,dro8smwq,lektor,techman,boognish,deidara,heckfyf,quietkey,authcode,monkey4,jayboy,pinkerto,merengue,chulita,bushwick,turambar,kittykit,joseph2,dad123,kristo,pepote,scheiss,hambone1,bigballa,restaura,tequil,111luzer,euro2000,motox,denhaag,chelsi,flaco1,preeti,lillo,1001sin,passw,august24,beatoff,555555d,willis1,kissthis,qwertyz,rvgmw2gl,iloveboobies,timati,kimbo,msinfo,dewdrop,sdbaker,fcc5nky2,messiah1,catboy,small1,chode,beastie1,star77,hvidovre,short1,xavie,dagobah,alex1987,papageno,dakota2,toonami,fuerte,jesus33,lawina,souppp,dirtybir,chrish,naturist,channel1,peyote,flibble,gutentag,lactate,killem,zucchero,robinho,ditka,grumpy1,avr7000,boxxer,topcop,berry1,mypass1,beverly1,deuce1,9638527410,cthuttdf,kzkmrf,lovethem,band1t,cantona1,purple11,apples123,wonderwo,123a456,fuzzie,lucky99,dancer2,hoddling,rockcity,winner12,spooty,mansfiel,aimee1,287hf71h,rudiger,culebra,god123,agent86,daniel0,bunky1,notmine,9ball,goofus,puffy1,xyh28af4,kulikov,bankshot,vurdf5i2,kevinm,ercole,sexygirls,razvan,october7,goater,lollie,raissa,thefrog,mdmaiwa3,mascha,jesussaves,union1,anthony9,crossroa,brother2,areyuke,rodman91,toonsex,dopeman,gericom,vaz2115,cockgobbler,12356789,12345699,signatur,alexandra1,coolwhip,erwin1,awdrgyjilp,pens66,ghjrjgtyrj,linkinpark,emergenc,psych0,blood666,bootmort,wetworks,piroca,johnd,iamthe1,supermario,homer69,flameon,image1,bebert,fylhtq1,annapoli,apple11,hockey22,10048,indahouse,mykiss,1penguin,markp,misha123,foghat,march11,hank1,santorin,defcon4,tampico,vbnhjafy,robert22,bunkie,athlon64,sex777,nextdoor,koskesh,lolnoob,seemnemaailm,black23,march15,yeehaa,chiqui,teagan,siegheil,monday2,cornhusk,mamusia,chilis,sthgrtst,feldspar,scottm,pugdog,rfghjy,micmac,gtnhjdyf,terminato,1jackson,kakosja,bogomol,123321aa,rkbvtyrj,tresor,tigertig,fuckitall,vbkkbjy,caramon,zxc12,balin,dildo1,soccer09,avata,abby123,cheetah1,marquise,jennyc,hondavfr,tinti,anna1985,dennis2,jorel,mayflowe,icema,hal2000,nikkis,bigmouth,greenery,nurjan,leonov,liberty7,fafnir,larionov,sat321321,byteme1,nausicaa,hjvfynbrf,everto,zebra123,sergio1,titone,wisdom1,kahala,104328q,marcin1,salima,pcitra,1nnnnn,nalini,galvesto,neeraj,rick1,squeeky,agnes1,jitterbu,agshar,maria12,0112358,traxxas,stivone,prophet1,bananza,sommer1,canoneos,hotfun,redsox11,1bigmac,dctdjkjl,legion1,everclea,valenok,black9,danny001,roxie1,1theman,mudslide,july16,lechef,chula,glamis,emilka,canbeef,ioanna,cactus1,rockshox,im2cool,ninja9,thvfrjdf,june28,milo17,missyou,micky1,nbibyf,nokiaa,goldi,mattias,fuckthem,asdzxc123,ironfist,junior01,nesta,crazzy,killswit,hygge,zantac,kazama,melvin1,allston,maandag,hiccup,prototyp,specboot,dwl610,hello6,159456,baldhead,redwhite,calpoly,whitetail,agile1,cousteau,matt01,aust1n,malcolmx,gjlfhjr,semperf1,ferarri,a1b2c3d,vangelis,mkvdari,bettis36,andzia,comand,tazzman,morgaine,pepluv,anna1990,inandout,anetka,anna1997,wallpape,moonrake,huntress,hogtie,cameron7,sammy7,singe11,clownboy,newzeala,wilmar,safrane,rebeld,poopi,granat,hammertime,nermin,11251422,xyzzy1,bogeys,jkmxbr,fktrcfyl,11223311,nfyrbcn,11223300,powerpla,zoedog,ybrbnbyf,zaphod42,tarawa,jxfhjdfirf,dude1234,g5wks9,goobe,czekolada,blackros,amaranth,medical1,thereds,julija,nhecsyfujkjdt,promopas,buddy4,marmalad,weihnachten,tronic,letici,passthief,67mustan,ds7zamnw,morri,w8woord,cheops,pinarell,sonofsam,av473dv,sf161pn,5c92v5h6,purple13,tango123,plant1,1baby,xufrgemw,fitta,1rangers,spawns,kenned,taratata,19944991,11111118,coronas,4ebouux8,roadrash,corvette1,dfyjdf846,marley12,qwaszxerdfcv,68stang,67stang,racin,ellehcim,sofiko,nicetry,seabass1,jazzman1,zaqwsx1,laz2937,uuuuuuu1,vlad123,rafale,j1234567,223366,nnnnnn1,226622,junkfood,asilas,cer980,daddymac,persepho,neelam,00700,shithappens,255555,qwertyy,xbox36,19755791,qweasd1,bearcub,jerryb,a1b1c1,polkaudio,basketball1,456rty,1loveyou,marcus2,mama1961,palace1,transcend,shuriken,sudhakar,teenlove,anabelle,matrix99,pogoda,notme,bartend,jordana,nihaoma,ataris,littlegi,ferraris,redarmy,giallo,fastdraw,accountbloc,peludo,pornostar,pinoyako,cindee,glassjaw,dameon,johnnyd,finnland,saudade,losbravo,slonko,toplay,smalltit,nicksfun,stockhol,penpal,caraj,divedeep,cannibus,poppydog,pass88,viktory,walhalla,arisia,lucozade,goldenbo,tigers11,caball,ownage123,tonna,handy1,johny,capital5,faith2,stillher,brandan,pooky1,antananarivu,hotdick,1justin,lacrimos,goathead,bobrik,cgtwbfkbcn,maywood,kamilek,gbplf123,gulnar,beanhead,vfvjyn,shash,viper69,ttttttt1,hondacr,kanako,muffer,dukies,justin123,agapov58,mushka,bad11bad,muleman,jojo123,andreika,makeit,vanill,boomers,bigals,merlin11,quacker,aurelien,spartak1922,ligeti,diana2,lawnmowe,fortune1,awesom,rockyy,anna1994,oinker,love88,eastbay,ab55484,poker0,ozzy666,papasmurf,antihero,photogra,ktm250,painkill,jegr2d2,p3orion,canman,dextur,qwest123,samboy,yomismo,sierra01,herber,vfrcbvvfrcbv,gloria1,llama1,pie123,bobbyjoe,buzzkill,skidrow,grabber,phili,javier1,9379992q,geroin,oleg1994,sovereig,rollover,zaq12qaz,battery1,killer13,alina123,groucho1,mario12,peter22,butterbean,elise1,lucycat,neo123,ferdi,golfer01,randie,gfhfyjbr,ventura1,chelsea3,pinoy,mtgox,yrrim7,shoeman,mirko,ffggyyo,65mustan,ufdibyjd,john55,suckfuck,greatgoo,fvfnjhb,mmmnnn,love20,1bullshi,sucesso,easy1234,robin123,rockets1,diamondb,wolfee,nothing0,joker777,glasnost,richar1,guille,sayan,koresh,goshawk,alexx,batman21,a123456b,hball,243122,rockandr,coolfool,isaia,mary1,yjdbrjdf,lolopc,cleocat,cimbo,lovehina,8vfhnf,passking,bonapart,diamond2,bigboys,kreator,ctvtyjdf,sassy123,shellac,table54781,nedkelly,philbert,sux2bu,nomis,sparky99,python1,littlebear,numpty,silmaril,sweeet,jamesw,cbufhtnf,peggysue,wodahs,luvsex,wizardry,venom123,love4you,bama1,samat,reviewpass,ned467,cjkjdtq,mamula,gijoe,amersham,devochka,redhill,gisel,preggo,polock,cando,rewster,greenlantern,panasonik,dave1234,mikeee,1carlos,miledi,darkness1,p0o9i8u7y6,kathryn1,happyguy,dcp500,assmaster,sambuka,sailormo,antonio3,logans,18254288,nokiax2,qwertzuiop,zavilov,totti,xenon1,edward11,targa1,something1,tony_t,q1w2e3r4t5y6u7i8o9p0,02551670,vladimir1,monkeybutt,greenda,neel21,craiger,saveliy,dei008,honda450,fylhtq95,spike2,fjnq8915,passwordstandard,vova12345,talonesi,richi,gigemags,pierre1,westin,trevoga,dorothee,bastogne,25563o,brandon3,truegrit,krimml,iamgreat,servis,a112233,paulinka,azimuth,corperfmonsy,358hkyp,homerun1,dogbert1,eatmyass,cottage1,savina,baseball7,bigtex,gimmesum,asdcxz,lennon1,a159357,1bastard,413276191q,pngfilt,pchealth,netsnip,bodiroga,1matt,webtvs,ravers,adapters,siddis,mashamasha,coffee2,myhoney,anna1982,marcia1,fairchil,maniek,iloveluc,batmonh,wildon,bowie1,netnwlnk,fancy1,tom204,olga1976,vfif123,queens1,ajax01,lovess,mockba,icam4usb,triada,odinthor,rstlne,exciter,sundog,anchorat,girls69,nfnmzyrf,soloma,gti16v,shadowman,ottom,rataros,tonchin,vishal,chicken0,pornlo,christiaan,volante,likesit,mariupol,runfast,gbpltw123,missys,villevalo,kbpjxrf,ghibli,calla,cessna172,kinglear,dell11,swift1,walera,1cricket,pussy5,turbo911,tucke,maprchem56458,rosehill,thekiwi1,ygfxbkgt,mandarinka,98xa29,magnit,cjfrf,paswoord,grandam1,shenmue,leedsuni,hatrick,zagadka,angeldog,michaell,dance123,koichi,bballs,29palms,xanth,228822,ppppppp1,1kkkkk,1lllll,mynewbots,spurss,madmax1,224455,city1,mmmmmmm1,nnnnnnn1,biedronka,thebeatles,elessar,f14tomcat,jordan18,bobo123,ayi000,tedbear,86chevyx,user123,bobolink,maktub,elmer1,flyfishi,franco1,gandalf0,traxdata,david21,enlighte,dmitrij,beckys,1giants,flippe,12345678w,jossie,rugbyman,snowcat,rapeme,peanut11,gemeni,udders,techn9ne,armani1,chappie,war123,vakantie,maddawg,sewanee,jake5253,tautt1,anthony5,letterma,jimbo2,kmdtyjr,hextall,jessica6,amiga500,hotcunt,phoenix9,veronda,saqartvelo,scubas,sixer3,williamj,nightfal,shihan,melnikova,kosssss,handily,killer77,jhrl0821,march17,rushman,6gcf636i,metoyou,irina123,mine11,primus1,formatters,matthew5,infotech,gangster1,jordan45,moose69,kompas,motoxxx,greatwhi,cobra12,kirpich,weezer1,hello23,montse,tracy123,connecte,cjymrf,hemingwa,azreal,gundam00,mobila,boxman,slayers1,ravshan,june26,fktrcfylhjd,bermuda1,tylerd,maersk,qazwsx11,eybdthcbntn,ash123,camelo,kat123,backd00r,cheyenne1,1king,jerkin,tnt123,trabant,warhammer40k,rambos,punto,home77,pedrito,1frank,brille,guitarman,george13,rakas,tgbxtcrbq,flute1,bananas1,lovezp1314,thespot,postie,buster69,sexytime,twistys,zacharia,sportage,toccata,denver7,terry123,bogdanova,devil69,higgins1,whatluck,pele10,kkk666,jeffery1,1qayxsw2,riptide1,chevy11,munchy,lazer1,hooker1,ghfgjh,vergesse,playgrou,4077mash,gusev,humpin,oneputt,hydepark,monster9,tiger8,tangsoo,guy123,hesoyam1,uhtqneyu,thanku,lomond,ortezza,kronik,geetha,rabbit66,killas,qazxswe,alabaste,1234567890qwerty,capone1,andrea12,geral,beatbox,slutfuck,booyaka,jasmine7,ostsee,maestro1,beatme,tracey1,buster123,donaldduck,ironfish,happy6,konnichi,gintonic,momoney1,dugan1,today2,enkidu,destiny2,trim7gun,katuha,fractals,morganstanley,polkadot,gotime,prince11,204060,fifa2010,bobbyt,seemee,amanda10,airbrush,bigtitty,heidie,layla1,cotton1,5speed,fyfnjkmtdyf,flynavy,joxury8f,meeko,akuma,dudley1,flyboy1,moondog1,trotters,mariami,signin,chinna,legs11,pussy4,1s1h1e1f1,felici,optimus1,iluvu,marlins1,gavaec,balance1,glock40,london01,kokot,southwes,comfort1,sammy11,rockbottom,brianc,litebeer,homero,chopsuey,greenlan,charit,freecell,hampster,smalldog,viper12,blofeld,1234567890987654321,realsex,romann,cartman2,cjdthitycndj,nelly1,bmw528,zwezda,masterba,jeep99,turtl,america2,sunburst,sanyco,auntjudy,125wm,blue10,qwsazx,cartma,toby12,robbob,red222,ilovecock,losfix16,1explore,helge,vaz2114,whynotme,baba123,mugen,1qazwsxedc,albertjr,0101198,sextime,supras,nicolas2,wantsex,pussy6,checkm8,winam,24gordon,misterme,curlew,gbljhfcs,medtech,franzi,butthea,voivod,blackhat,egoiste,pjkeirf,maddog69,pakalolo,hockey4,igor1234,rouges,snowhite,homefree,sexfreak,acer12,dsmith,blessyou,199410,vfrcbvjd,falco02,belinda1,yaglasph,april21,groundho,jasmin1,nevergiveup,elvir,gborv526,c00kie,emma01,awesome2,larina,mike12345,maximu,anupam,bltynbabrfwbz,tanushka,sukkel,raptor22,josh12,schalke04,cosmodog,fuckyou8,busybee,198800,bijoux,frame1,blackmor,giveit,issmall,bear13,123-123,bladez,littlegirl,ultra123,fletch1,flashnet,loploprock,rkelly,12step,lukas1,littlewhore,cuntfinger,stinkyfinger,laurenc,198020,n7td4bjl,jackie69,camel123,ben1234,1gateway,adelheid,fatmike,thuglove,zzaaqq,chivas1,4815162342q,mamadou,nadano,james22,benwin,andrea99,rjirf,michou,abkbgg,d50gnn,aaazzz,a123654,blankman,booboo11,medicus,bigbone,197200,justine1,bendix,morphius,njhvjp,44mag,zsecyus56,goodbye1,nokiadermo,a333444,waratsea,4rzp8ab7,fevral,brillian,kirbys,minim,erathia,grazia,zxcvb1234,dukey,snaggle,poppi,hymen,1video,dune2000,jpthjdf,cvbn123,zcxfcnkbdfz,astonv,ginnie,316271,engine3,pr1ncess,64chevy,glass1,laotzu,hollyy,comicbooks,assasins,nuaddn9561,scottsda,hfcnfvfy,accobra,7777777z,werty123,metalhead,romanson,redsand,365214,shalo,arsenii,1989cc,sissi,duramax,382563,petera,414243,mamapap,jollymon,field1,fatgirl,janets,trompete,matchbox20,rambo2,nepenthe,441232,qwertyuiop10,bozo123,phezc419hv,romantika,lifestyl,pengui,decembre,demon6,panther6,444888,scanman,ghjcnjabkz,pachanga,buzzword,indianer,spiderman3,tony12,startre,frog1,fyutk,483422,tupacshakur,albert12,1drummer,bmw328i,green17,aerdna,invisibl,summer13,calimer,mustaine,lgnu9d,morefun,hesoyam123,escort1,scrapland,stargat,barabbas,dead13,545645,mexicali,sierr,gfhfpbn,gonchar,moonstafa,searock,counte,foster1,jayhawk1,floren,maremma,nastya2010,softball1,adaptec,halloo,barrabas,zxcasd123,hunny,mariana1,kafedra,freedom0,green420,vlad1234,method7,665566,tooting,hallo12,davinchi,conducto,medias,666444,invernes,madhatter,456asd,12345678i,687887,le33px,spring00,help123,bellybut,billy5,vitalik1,river123,gorila,bendis,power666,747200,footslav,acehigh,qazxswedc123,q1a1z1,richard9,peterburg,tabletop,gavrilov,123qwe1,kolosov,fredrau,run4fun,789056,jkbvgbflf,chitra,87654321q,steve22,wideopen,access88,surfe,tdfyutkbjy,impossib,kevin69,880888,cantina,887766,wxcvb,dontforg,qwer1209,asslicke,mamma123,indig,arkasha,scrapp,morelia,vehxbr,jones2,scratch1,cody11,cassie12,gerbera,dontgotm,underhil,maks2010,hollywood1,hanibal,elena2010,jason11,1010321,stewar,elaman,fireplug,goodby,sacrific,babyphat,bobcat12,bruce123,1233215,tony45,tiburo,love15,bmw750,wallstreet,2h0t4me,1346795,lamerz,munkee,134679q,granvill,1512198,armastus,aiden1,pipeutvj,g1234567,angeleyes,usmc1,102030q,putangina,brandnew,shadowfax,eagles12,1falcon,brianw,lokomoti,2022958,scooper,pegas,jabroni1,2121212,buffal,siffredi,wewiz,twotone,rosebudd,nightwis,carpet1,mickey2,2525252,sleddog,red333,jamesm,2797349,jeff12,onizuka,felixxxx,rf6666,fine1,ohlala,forplay,chicago5,muncho,scooby11,ptichka,johnnn,19851985p,dogphil3650,totenkopf,monitor2,macross7,3816778,dudder,semaj1,bounder,racerx1,5556633,7085506,ofclr278,brody1,7506751,nantucke,hedj2n4q,drew1,aessedai,trekbike,pussykat,samatron,imani,9124852,wiley1,dukenukem,iampurehaha2,9556035,obvious1,mccool24,apache64,kravchenko,justforf,basura,jamese,s0ccer,safado,darksta,surfer69,damian1,gjpbnbd,gunny1,wolley,sananton,zxcvbn123456,odt4p6sv8,sergei1,modem1,mansikka,zzzz1,rifraf,dima777,mary69,looking4,donttell,red100,ninjutsu,uaeuaeman,bigbri,brasco,queenas8151,demetri,angel007,bubbl,kolort,conny,antonia1,avtoritet,kaka22,kailayu,sassy2,wrongway,chevy3,1nascar,patriots1,chrisrey,mike99,sexy22,chkdsk,sd3utre7,padawan,a6pihd,doming,mesohorny,tamada,donatello,emma22,eather,susan69,pinky123,stud69,fatbitch,pilsbury,thc420,lovepuss,1creativ,golf1234,hurryup,1honda,huskerdu,marino1,gowron,girl1,fucktoy,gtnhjpfdjlcr,dkjfghdk,pinkfl,loreli,7777777s,donkeykong,rockytop,staples1,sone4ka,xxxjay,flywheel,toppdogg,bigbubba,aaa123456,2letmein,shavkat,paule,dlanor,adamas,0147852,aassaa,dixon1,bmw328,mother12,ilikepussy,holly2,tsmith,excaliber,fhutynbyf,nicole3,tulipan,emanue,flyvholm,currahee,godsgift,antonioj,torito,dinky1,sanna,yfcnzvjz,june14,anime123,123321456654,hanswurst,bandman,hello101,xxxyyy,chevy69,technica,tagada,arnol,v00d00,lilone,filles,drumandbass,dinamit,a1234a,eatmeat,elway07,inout,james6,dawid1,thewolf,diapason,yodaddy,qscwdv,fuckit1,liljoe,sloeber,simbacat,sascha1,qwe1234,1badger,prisca,angel17,gravedig,jakeyboy,longboard,truskawka,golfer11,pyramid7,highspee,pistola,theriver,hammer69,1packers,dannyd,alfonse,qwertgfdsa,11119999,basket1,ghjtrn,saralee,12inches,paolo1,zse4xdr5,taproot,sophieh6,grizzlie,hockey69,danang,biggums,hotbitch,5alive,beloved1,bluewave,dimon95,koketka,multiscan,littleb,leghorn,poker2,delite,skyfir,bigjake,persona1,amberdog,hannah12,derren,ziffle,1sarah,1assword,sparky01,seymur,tomtom1,123321qw,goskins,soccer19,luvbekki,bumhole,2balls,1muffin,borodin,monkey9,yfeiybrb,1alex,betmen,freder,nigger123,azizbek,gjkzrjdf,lilmike,1bigdadd,1rock,taganrog,snappy1,andrey1,kolonka,bunyan,gomango,vivia,clarkkent,satur,gaudeamus,mantaray,1month,whitehea,fargus,andrew99,ray123,redhawks,liza2009,qw12345,den12345,vfhnsyjdf,147258369a,mazepa,newyorke,1arsenal,hondas2000,demona,fordgt,steve12,birthday2,12457896,dickster,edcwsxqaz,sahalin,pantyman,skinny1,hubertus,cumshot1,chiro,kappaman,mark3434,canada12,lichking,bonkers1,ivan1985,sybase,valmet,doors1,deedlit,kyjelly,bdfysx,ford11,throatfuck,backwood,fylhsq,lalit,boss429,kotova,bricky,steveh,joshua19,kissa,imladris,star1234,lubimka,partyman,crazyd,tobias1,ilike69,imhome,whome,fourstar,scanner1,ujhjl312,anatoli,85bears,jimbo69,5678ytr,potapova,nokia7070,sunday1,kalleank,1996gta,refinnej,july1,molodec,nothanks,enigm,12play,sugardog,nhfkbdfkb,larousse,cannon1,144444,qazxcdew,stimorol,jhereg,spawn7,143000,fearme,hambur,merlin21,dobie,is3yeusc,partner1,dekal,varsha,478jfszk,flavi,hippo1,9hmlpyjd,july21,7imjfstw,lexxus,truelov,nokia5200,carlos6,anais,mudbone,anahit,taylorc,tashas,larkspur,animal2000,nibiru,jan123,miyvarxar,deflep,dolore,communit,ifoptfcor,laura2,anadrol,mamaliga,mitzi1,blue92,april15,matveev,kajlas,wowlook1,1flowers,shadow14,alucard1,1golf,bantha,scotlan,singapur,mark13,manchester1,telus01,superdav,jackoff1,madnes,bullnuts,world123,clitty,palmer1,david10,spider10,sargsyan,rattlers,david4,windows2,sony12,visigoth,qqqaaa,penfloor,cabledog,camilla1,natasha123,eagleman,softcore,bobrov,dietmar,divad,sss123,d1234567,tlbyjhju,1q1q1q1,paraiso,dav123,lfiekmrf,drachen,lzhan16889,tplate,gfghbrf,casio1,123boots1,123test,sys64738,heavymetal,andiamo,meduza,soarer,coco12,negrita,amigas,heavymet,bespin,1asdfghj,wharfrat,wetsex,tight1,janus1,sword123,ladeda,dragon98,austin2,atep1,jungle1,12345abcd,lexus300,pheonix1,alex1974,123qw123,137955,bigtim,shadow88,igor1994,goodjob,arzen,champ123,121ebay,changeme1,brooksie,frogman1,buldozer,morrowin,achim,trish1,lasse,festiva,bubbaman,scottb,kramit,august22,tyson123,passsword,oompah,al123456,fucking1,green45,noodle1,looking1,ashlynn,al1716,stang50,coco11,greese,bob111,brennan1,jasonj,1cherry,1q2345,1xxxxxxx,fifa2011,brondby,zachar1,satyam,easy1,magic7,1rainbow,cheezit,1eeeeeee,ashley123,assass1,amanda123,jerbear,1bbbbbb,azerty12,15975391,654321z,twinturb,onlyone1,denis1988,6846kg3r,jumbos,pennydog,dandelion,haileris,epervier,snoopy69,afrodite,oldpussy,green55,poopypan,verymuch,katyusha,recon7,mine69,tangos,contro,blowme2,jade1,skydive1,fiveiron,dimo4ka,bokser,stargirl,fordfocus,tigers2,platina,baseball11,raque,pimper,jawbreak,buster88,walter34,chucko,penchair,horizon1,thecure1,scc1975,adrianna1,kareta,duke12,krille,dumbfuck,cunt1,aldebaran,laverda,harumi,knopfler,pongo1,pfhbyf,dogman1,rossigno,1hardon,scarlets,nuggets1,ibelieve,akinfeev,xfhkbr,athene,falcon69,happie,billly,nitsua,fiocco,qwerty09,gizmo2,slava2,125690,doggy123,craigs,vader123,silkeborg,124365,peterm,123978,krakatoa,123699,123592,kgvebmqy,pensacol,d1d2d3,snowstor,goldenboy,gfg65h7,ev700,church1,orange11,g0dz1ll4,chester3,acheron,cynthi,hotshot1,jesuschris,motdepass,zymurgy,one2one,fietsbel,harryp,wisper,pookster,nn527hp,dolla,milkmaid,rustyboy,terrell1,epsilon1,lillian1,dale3,crhbgrf,maxsim,selecta,mamada,fatman1,ufkjxrf,shinchan,fuckuall,women1,000008,bossss,greta1,rbhjxrf,mamasboy,purple69,felicidade,sexy21,cathay,hunglow,splatt,kahless,shopping1,1gandalf,themis,delta7,moon69,blue24,parliame,mamma1,miyuki,2500hd,jackmeof,razer,rocker1,juvis123,noremac,boing747,9z5ve9rrcz,icewater,titania,alley1,moparman,christo1,oliver2,vinicius,tigerfan,chevyy,joshua99,doda99,matrixx,ekbnrf,jackfrost,viper01,kasia,cnfhsq,triton1,ssbt8ae2,rugby8,ramman,1lucky,barabash,ghtlfntkm,junaid,apeshit,enfant,kenpo1,shit12,007000,marge1,shadow10,qwerty789,richard8,vbitkm,lostboys,jesus4me,richard4,hifive,kolawole,damilola,prisma,paranoya,prince2,lisaann,happyness,cardss,methodma,supercop,a8kd47v5,gamgee,polly123,irene1,number8,hoyasaxa,1digital,matthew0,dclxvi,lisica,roy123,2468013579,sparda,queball,vaffanculo,pass1wor,repmvbx,999666333,freedom8,botanik,777555333,marcos1,lubimaya,flash2,einstei,08080,123456789j,159951159,159357123,carrot1,alina1995,sanjos,dilara,mustang67,wisteria,jhnjgtl12,98766789,darksun,arxangel,87062134,creativ1,malyshka,fuckthemall,barsic,rocksta,2big4u,5nizza,genesis2,romance1,ofcourse,1horse,latenite,cubana,sactown,789456123a,milliona,61808861,57699434,imperia,bubba11,yellow3,change12,55495746,flappy,jimbo123,19372846,19380018,cutlass1,craig123,klepto,beagle1,solus,51502112,pasha1,19822891,46466452,19855891,petshop,nikolaevna,119966,nokia6131,evenpar,hoosier1,contrasena,jawa350,gonzo123,mouse2,115511,eetfuk,gfhfvgfvgfv,1crystal,sofaking,coyote1,kwiatuszek,fhrflbq,valeria1,anthro,0123654789,alltheway,zoltar,maasikas,wildchil,fredonia,earlgrey,gtnhjczy,matrix123,solid1,slavko,12monkeys,fjdksl,inter1,nokia6500,59382113kevinp,spuddy,cachero,coorslit,password!,kiba1z,karizma,vova1994,chicony,english1,bondra12,1rocket,hunden,jimbob1,zpflhjn1,th0mas,deuce22,meatwad,fatfree,congas,sambora,cooper2,janne,clancy1,stonie,busta,kamaz,speedy2,jasmine3,fahayek,arsenal0,beerss,trixie1,boobs69,luansantana,toadman,control2,ewing33,maxcat,mama1964,diamond4,tabaco,joshua0,piper2,music101,guybrush,reynald,pincher,katiebug,starrs,pimphard,frontosa,alex97,cootie,clockwor,belluno,skyeseth,booty69,chaparra,boochie,green4,bobcat1,havok,saraann,pipeman,aekdb,jumpshot,wintermu,chaika,1chester,rjnjatq,emokid,reset1,regal1,j0shua,134679a,asmodey,sarahh,zapidoo,ciccione,sosexy,beckham23,hornets1,alex1971,delerium,manageme,connor11,1rabbit,sane4ek,caseyboy,cbljhjdf,redsox20,tttttt99,haustool,ander,pantera6,passwd1,journey1,9988776655,blue135,writerspace,xiaoyua123,justice2,niagra,cassis,scorpius,bpgjldsgjldthnf,gamemaster,bloody1,retrac,stabbin,toybox,fight1,ytpyf.,glasha,va2001,taylor11,shameles,ladylove,10078,karmann,rodeos,eintritt,lanesra,tobasco,jnrhjqcz,navyman,pablit,leshka,jessica3,123vika,alena1,platinu,ilford,storm7,undernet,sasha777,1legend,anna2002,kanmax1994,porkpie,thunder0,gundog,pallina,easypass,duck1,supermom,roach1,twincam,14028,tiziano,qwerty32,123654789a,evropa,shampoo1,yfxfkmybr,cubby1,tsunami1,fktrcttdf,yasacrac,17098,happyhap,bullrun,rodder,oaktown,holde,isbest,taylor9,reeper,hammer11,julias,rolltide1,compaq123,fourx4,subzero1,hockey9,7mary3,busines,ybrbnjcbr,wagoneer,danniash,portishead,digitex,alex1981,david11,infidel,1snoopy,free30,jaden,tonto1,redcar27,footie,moskwa,thomas21,hammer12,burzum,cosmo123,50000,burltree,54343,54354,vwpassat,jack5225,cougars1,burlpony,blackhorse,alegna,petert,katemoss,ram123,nels0n,ferrina,angel77,cstock,1christi,dave55,abc123a,alex1975,av626ss,flipoff,folgore,max1998,science1,si711ne,yams7,wifey1,sveiks,cabin1,volodia,ox3ford,cartagen,platini,picture1,sparkle1,tiedomi,service321,wooody,christi1,gnasher,brunob,hammie,iraffert,bot2010,dtcyeirf,1234567890p,cooper11,alcoholi,savchenko,adam01,chelsea5,niewiem,icebear,lllooottt,ilovedick,sweetpus,money8,cookie13,rfnthbyf1988,booboo2,angus123,blockbus,david9,chica1,nazaret,samsung9,smile4u,daystar,skinnass,john10,thegirl,sexybeas,wasdwasd1,sigge1,1qa2ws3ed4rf5tg,czarny,ripley1,chris5,ashley19,anitha,pokerman,prevert,trfnthby,tony69,georgia2,stoppedb,qwertyuiop12345,miniclip,franky1,durdom,cabbages,1234567890o,delta5,liudmila,nhfycajhvths,court1,josiew,abcd1,doghead,diman,masiania,songline,boogle,triston,deepika,sexy4me,grapple,spacebal,ebonee,winter0,smokewee,nargiza,dragonla,sassys,andy2000,menards,yoshio,massive1,suckmy1k,passat99,sexybo,nastya1996,isdead,stratcat,hokuto,infix,pidoras,daffyduck,cumhard,baldeagl,kerberos,yardman,shibainu,guitare,cqub6553,tommyy,bk.irf,bigfoo,hecto,july27,james4,biggus,esbjerg,isgod,1irish,phenmarr,jamaic,roma1990,diamond0,yjdbrjd,girls4me,tampa1,kabuto,vaduz,hanse,spieng,dianochka,csm101,lorna1,ogoshi,plhy6hql,2wsx4rfv,cameron0,adebayo,oleg1996,sharipov,bouboule,hollister1,frogss,yeababy,kablam,adelante,memem,howies,thering,cecilia1,onetwo12,ojp123456,jordan9,msorcloledbr,neveraga,evh5150,redwin,1august,canno,1mercede,moody1,mudbug,chessmas,tiikeri,stickdaddy77,alex15,kvartira,7654321a,lollol123,qwaszxedc,algore,solana,vfhbyfvfhbyf,blue72,misha1111,smoke20,junior13,mogli,threee,shannon2,fuckmylife,kevinh,saransk,karenw,isolde,sekirarr,orion123,thomas0,debra1,laketaho,alondra,curiva,jazz1234,1tigers,jambos,lickme2,suomi,gandalf7,028526,zygote,brett123,br1ttany,supafly,159000,kingrat,luton1,cool-ca,bocman,thomasd,skiller,katter,mama777,chanc,tomass,1rachel,oldno7,rfpfyjdf,bigkev,yelrah,primas,osito,kipper1,msvcr71,bigboy11,thesun,noskcaj,chicc,sonja1,lozinka,mobile1,1vader,ummagumma,waves1,punter12,tubgtn,server1,irina1991,magic69,dak001,pandemonium,dead1,berlingo,cherrypi,1montana,lohotron,chicklet,asdfgh123456,stepside,ikmvw103,icebaby,trillium,1sucks,ukrnet,glock9,ab12345,thepower,robert8,thugstools,hockey13,buffon,livefree,sexpics,dessar,ja0000,rosenrot,james10,1fish,svoloch,mykitty,muffin11,evbukb,shwing,artem1992,andrey1992,sheldon1,passpage,nikita99,fubar123,vannasx,eight888,marial,max2010,express2,violentj,2ykn5ccf,spartan11,brenda69,jackiech,abagail,robin2,grass1,andy76,bell1,taison,superme,vika1995,xtr451,fred20,89032073168,denis1984,2000jeep,weetabix,199020,daxter,tevion,panther8,h9iymxmc,bigrig,kalambur,tsalagi,12213443,racecar02,jeffrey4,nataxa,bigsam,purgator,acuracl,troutbum,potsmoke,jimmyz,manutd1,nytimes,pureevil,bearss,cool22,dragonage,nodnarb,dbrbyu,4seasons,freude,elric1,werule,hockey14,12758698,corkie,yeahright,blademan,tafkap,clave,liziko,hofner,jeffhardy,nurich,runne,stanisla,lucy1,monk3y,forzaroma,eric99,bonaire,blackwoo,fengshui,1qaz0okm,newmoney,pimpin69,07078,anonymer,laptop1,cherry12,ace111,salsa1,wilbur1,doom12,diablo23,jgtxzbhr,under1,honda01,breadfan,megan2,juancarlos,stratus1,ackbar,love5683,happytim,lambert1,cbljhtyrj,komarov,spam69,nfhtkrf,brownn,sarmat,ifiksr,spike69,hoangen,angelz,economia,tanzen,avogadro,1vampire,spanners,mazdarx,queequeg,oriana,hershil,sulaco,joseph11,8seconds,aquariu,cumberla,heather9,anthony8,burton12,crystal0,maria3,qazwsxc,snow123,notgood,198520,raindog,heehaw,consulta,dasein,miller01,cthulhu1,dukenuke,iubire,baytown,hatebree,198505,sistem,lena12,welcome01,maraca,middleto,sindhu,mitsou,phoenix5,vovan,donaldo,dylandog,domovoy,lauren12,byrjuybnj,123llll,stillers,sanchin,tulpan,smallvill,1mmmmm,patti1,folgers,mike31,colts18,123456rrr,njkmrjz,phoenix0,biene,ironcity,kasperok,password22,fitnes,matthew6,spotligh,bujhm123,tommycat,hazel5,guitar11,145678,vfcmrf,compass1,willee,1barney,jack2000,littleminge,shemp,derrek,xxx12345,littlefuck,spuds1,karolinka,camneely,qwertyu123,142500,brandon00,munson15,falcon3,passssap,z3cn2erv,goahead,baggio10,141592,denali1,37kazoo,copernic,123456789asd,orange88,bravada,rush211,197700,pablo123,uptheass,samsam1,demoman,mattylad10,heydude,mister2,werken,13467985,marantz,a22222,f1f2f3f4,fm12mn12,gerasimova,burrito1,sony1,glenny,baldeagle,rmfidd,fenomen,verbati,forgetme,5element,wer138,chanel1,ooicu812,10293847qp,minicooper,chispa,myturn,deisel,vthrehbq,boredboi4u,filatova,anabe,poiuyt1,barmalei,yyyy1,fourkids,naumenko,bangbros,pornclub,okaykk,euclid90,warrior3,kornet,palevo,patatina,gocart,antanta,jed1054,clock1,111111w,dewars,mankind1,peugeot406,liten,tahira,howlin,naumov,rmracing,corone,cunthole,passit,rock69,jaguarxj,bumsen,197101,sweet2,197010,whitecat,sawadee,money100,yfhrjnbrb,andyboy,9085603566,trace1,fagget,robot1,angel20,6yhn7ujm,specialinsta,kareena,newblood,chingada,boobies2,bugger1,squad51,133andre,call06,ashes1,ilovelucy,success2,kotton,cavalla,philou,deebee,theband,nine09,artefact,196100,kkkkkkk1,nikolay9,onelov,basia,emilyann,sadman,fkrjujkbr,teamomuch,david777,padrino,money21,firdaus,orion3,chevy01,albatro,erdfcv,2legit,sarah7,torock,kevinn,holio,soloy,enron714,starfleet,qwer11,neverman,doctorwh,lucy11,dino12,trinity7,seatleon,o123456,pimpman,1asdfgh,snakebit,chancho,prorok,bleacher,ramire,darkseed,warhorse,michael123,1spanky,1hotdog,34erdfcv,n0th1ng,dimanche,repmvbyf,michaeljackson,login1,icequeen,toshiro,sperme,racer2,veget,birthday26,daniel9,lbvekmrf,charlus,bryan123,wspanic,schreibe,1andonly,dgoins,kewell,apollo12,egypt1,fernie,tiger21,aa123456789,blowj,spandau,bisquit,12345678d,deadmau5,fredie,311420,happyface,samant,gruppa,filmstar,andrew17,bakesale,sexy01,justlook,cbarkley,paul11,bloodred,rideme,birdbath,nfkbcvfy,jaxson,sirius1,kristof,virgos,nimrod1,hardc0re,killerbee,1abcdef,pitcher1,justonce,vlada,dakota99,vespucci,wpass,outside1,puertori,rfvbkf,teamlosi,vgfun2,porol777,empire11,20091989q,jasong,webuivalidat,escrima,lakers08,trigger2,addpass,342500,mongini,dfhtybr,horndogg,palermo1,136900,babyblu,alla98,dasha2010,jkelly,kernow,yfnecz,rockhopper,toeman,tlaloc,silver77,dave01,kevinr,1234567887654321,135642,me2you,8096468644q,remmus,spider7,jamesa,jilly,samba1,drongo,770129ji,supercat,juntas,tema1234,esthe,1234567892000,drew11,qazqaz123,beegees,blome,rattrace,howhigh,tallboy,rufus2,sunny2,sou812,miller12,indiana7,irnbru,patch123,letmeon,welcome5,nabisco,9hotpoin,hpvteb,lovinit,stormin,assmonke,trill,atlanti,money1234,cubsfan,mello1,stars2,ueptkm,agate,dannym88,lover123,wordz,worldnet,julemand,chaser1,s12345678,pissword,cinemax,woodchuc,point1,hotchkis,packers2,bananana,kalender,420666,penguin8,awo8rx3wa8t,hoppie,metlife,ilovemyfamily,weihnachtsbau,pudding1,luckystr,scully1,fatboy1,amizade,dedham,jahbless,blaat,surrende,****er,1panties,bigasses,ghjuhfvbcn,asshole123,dfktyrb,likeme,nickers,plastik,hektor,deeman,muchacha,cerebro,santana5,testdrive,dracula1,canalc,l1750sq,savannah1,murena,1inside,pokemon00,1iiiiiii,jordan20,sexual1,mailliw,calipso,014702580369,1zzzzzz,1jjjjjj,break1,15253545,yomama1,katinka,kevin11,1ffffff,martijn,sslazio,daniel5,porno2,nosmas,leolion,jscript,15975312,pundai,kelli1,kkkddd,obafgkm,marmaris,lilmama,london123,rfhfnt,elgordo,talk87,daniel7,thesims3,444111,bishkek,afrika2002,toby22,1speedy,daishi,2children,afroman,qqqqwwww,oldskool,hawai,v55555,syndicat,pukimak,fanatik,tiger5,parker01,bri5kev6,timexx,wartburg,love55,ecosse,yelena03,madinina,highway1,uhfdbwfgf,karuna,buhjvfybz,wallie,46and2,khalif,europ,qaz123wsx456,bobbybob,wolfone,falloutboy,manning18,scuba10,schnuff,ihateyou1,lindam,sara123,popcor,fallengun,divine1,montblanc,qwerty8,rooney10,roadrage,bertie1,latinus,lexusis,rhfvfnjhcr,opelgt,hitme,agatka,1yamaha,dmfxhkju,imaloser,michell1,sb211st,silver22,lockedup,andrew9,monica01,sassycat,dsobwick,tinroof,ctrhtnyj,bultaco,rhfcyjzhcr,aaaassss,14ss88,joanne1,momanddad,ahjkjdf,yelhsa,zipdrive,telescop,500600,1sexsex,facial1,motaro,511647,stoner1,temujin,elephant1,greatman,honey69,kociak,ukqmwhj6,altezza,cumquat,zippos,kontiki,123max,altec1,bibigon,tontos,qazsew,nopasaran,militar,supratt,oglala,kobayash,agathe,yawetag,dogs1,cfiekmrf,megan123,jamesdea,porosenok,tiger23,berger1,hello11,seemann,stunner1,walker2,imissu,jabari,minfd,lollol12,hjvfy,1-oct,stjohns,2278124q,123456789qwer,alex1983,glowworm,chicho,mallards,bluedevil,explorer1,543211,casita,1time,lachesis,alex1982,airborn1,dubesor,changa,lizzie1,captaink,socool,bidule,march23,1861brr,k.ljxrf,watchout,fotze,1brian,keksa2,aaaa1122,matrim,providian,privado,dreame,merry1,aregdone,davidt,nounour,twenty2,play2win,artcast2,zontik,552255,shit1,sluggy,552861,dr8350,brooze,alpha69,thunder6,kamelia2011,caleb123,mmxxmm,jamesh,lfybkjd,125267,125000,124536,bliss1,dddsss,indonesi,bob69,123888,tgkbxfgy,gerar,themack,hijodeputa,good4now,ddd123,clk430,kalash,tolkien1,132forever,blackb,whatis,s1s2s3s4,lolkin09,yamahar,48n25rcc,djtiesto,111222333444555,bigbull,blade55,coolbree,kelse,ichwill,yamaha12,sakic,bebeto,katoom,donke,sahar,wahine,645202,god666,berni,starwood,june15,sonoio,time123,llbean,deadsoul,lazarev,cdtnf,ksyusha,madarchod,technik,jamesy,4speed,tenorsax,legshow,yoshi1,chrisbl,44e3ebda,trafalga,heather7,serafima,favorite4,havefun1,wolve,55555r,james13,nosredna,bodean,jlettier,borracho,mickael,marinus,brutu,sweet666,kiborg,rollrock,jackson6,macross1,ousooner,9085084232,takeme,123qwaszx,firedept,vfrfhjd,jackfros,123456789000,briane,cookie11,baby22,bobby18,gromova,systemofadown,martin01,silver01,pimaou,darthmaul,hijinx,commo,chech,skyman,sunse,2vrd6,vladimirovna,uthvfybz,nicole01,kreker,bobo1,v123456789,erxtgb,meetoo,drakcap,vfvf12,misiek1,butane,network2,flyers99,riogrand,jennyk,e12345,spinne,avalon11,lovejone,studen,maint,porsche2,qwerty100,chamberl,bluedog1,sungam,just4u,andrew23,summer22,ludic,musiclover,aguil,beardog1,libertin,pippo1,joselit,patito,bigberth,digler,sydnee,jockstra,poopo,jas4an,nastya123,profil,fuesse,default1,titan2,mendoz,kpcofgs,anamika,brillo021,bomberman,guitar69,latching,69pussy,blues2,phelge,ninja123,m7n56xo,qwertasd,alex1976,cunningh,estrela,gladbach,marillion,mike2000,258046,bypop,muffinman,kd5396b,zeratul,djkxbwf,john77,sigma2,1linda,selur,reppep,quartz1,teen1,freeclus,spook1,kudos4ever,clitring,sexiness,blumpkin,macbook,tileman,centra,escaflowne,pentable,shant,grappa,zverev,1albert,lommerse,coffee11,777123,polkilo,muppet1,alex74,lkjhgfdsazx,olesica,april14,ba25547,souths,jasmi,arashi,smile2,2401pedro,mybabe,alex111,quintain,pimp1,tdeir8b2,makenna,122333444455555,%e2%82%ac,tootsie1,pass111,zaqxsw123,gkfdfybt,cnfnbcnbrf,usermane,iloveyou12,hard69,osasuna,firegod,arvind,babochka,kiss123,cookie123,julie123,kamakazi,dylan2,223355,tanguy,nbhtqa,tigger13,tubby1,makavel,asdflkj,sambo1,mononoke,mickeys,gayguy,win123,green33,wcrfxtvgbjy,bigsmall,1newlife,clove,babyfac,bigwaves,mama1970,shockwav,1friday,bassey,yarddog,codered1,victory7,bigrick,kracker,gulfstre,chris200,sunbanna,bertuzzi,begemotik,kuolema,pondus,destinee,123456789zz,abiodun,flopsy,amadeusptfcor,geronim,yggdrasi,contex,daniel6,suck1,adonis1,moorea,el345612,f22raptor,moviebuf,raunchy,6043dkf,zxcvbnm123456789,eric11,deadmoin,ratiug,nosliw,fannies,danno,888889,blank1,mikey2,gullit,thor99,mamiya,ollieb,thoth,dagger1,websolutionssu,bonker,prive,1346798520,03038,q1234q,mommy2,contax,zhipo,gwendoli,gothic1,1234562000,lovedick,gibso,digital2,space199,b26354,987654123,golive,serious1,pivkoo,better1,824358553,794613258,nata1980,logout,fishpond,buttss,squidly,good4me,redsox19,jhonny,zse45rdx,matrixxx,honey12,ramina,213546879,motzart,fall99,newspape,killit,gimpy,photowiz,olesja,thebus,marco123,147852963,bedbug,147369258,hellbound,gjgjxrf,123987456,lovehurt,five55,hammer01,1234554321a,alina2011,peppino,ang238,questor,112358132,alina1994,alina1998,money77,bobjones,aigerim,cressida,madalena,420smoke,tinchair,raven13,mooser,mauric,lovebu,adidas69,krypton1,1111112,loveline,divin,voshod,michaelm,cocotte,gbkbuhbv,76689295,kellyj,rhonda1,sweetu70,steamforums,geeque,nothere,124c41,quixotic,steam181,1169900,rfcgthcrbq,rfvbkm,sexstuff,1231230,djctvm,rockstar1,fulhamfc,bhecbr,rfntyf,quiksilv,56836803,jedimaster,pangit,gfhjkm777,tocool,1237654,stella12,55378008,19216811,potte,fender12,mortalkombat,ball1,nudegirl,palace22,rattrap,debeers,lickpussy,jimmy6,not4u2c,wert12,bigjuggs,sadomaso,1357924,312mas,laser123,arminia,branford,coastie,mrmojo,19801982,scott11,banaan123,ingres,300zxtt,hooters6,sweeties,19821983,19831985,19833891,sinnfein,welcome4,winner69,killerman,tachyon,tigre1,nymets1,kangol,martinet,sooty1,19921993,789qwe,harsingh,1597535,thecount,phantom3,36985214,lukas123,117711,pakistan1,madmax11,willow01,19932916,fucker12,flhrci,opelagila,theword,ashley24,tigger3,crazyj,rapide,deadfish,allana,31359092,sasha1993,sanders2,discman,zaq!2wsx,boilerma,mickey69,jamesg,babybo,jackson9,orion7,alina2010,indien,breeze1,atease,warspite,bazongaz,1celtic,asguard,mygal,fitzgera,1secret,duke33,cyklone,dipascuc,potapov,1escobar2,c0l0rad0,kki177hk,1little,macondo,victoriya,peter7,red666,winston6,kl?benhavn,muneca,jackme,jennan,happylife,am4h39d8nh,bodybuil,201980,dutchie,biggame,lapo4ka,rauchen,black10,flaquit,water12,31021364,command2,lainth88,mazdamx5,typhon,colin123,rcfhlfc,qwaszx11,g0away,ramir,diesirae,hacked1,cessna1,woodfish,enigma2,pqnr67w5,odgez8j3,grisou,hiheels,5gtgiaxm,2580258,ohotnik,transits,quackers,serjik,makenzie,mdmgatew,bryana,superman12,melly,lokit,thegod,slickone,fun4all,netpass,penhorse,1cooper,nsync,asdasd22,otherside,honeydog,herbie1,chiphi,proghouse,l0nd0n,shagg,select1,frost1996,casper123,countr,magichat,greatzyo,jyothi,3bears,thefly,nikkita,fgjcnjk,nitros,hornys,san123,lightspe,maslova,kimber1,newyork2,spammm,mikejone,pumpk1n,bruiser1,bacons,prelude9,boodie,dragon4,kenneth2,love98,power5,yodude,pumba,thinline,blue30,sexxybj,2dumb2live,matt21,forsale,1carolin,innova,ilikeporn,rbgtkjd,a1s2d3f,wu9942,ruffus,blackboo,qwerty999,draco1,marcelin,hideki,gendalf,trevon,saraha,cartmen,yjhbkmcr,time2go,fanclub,ladder1,chinni,6942987,united99,lindac,quadra,paolit,mainstre,beano002,lincoln7,bellend,anomie,8520456,bangalor,goodstuff,chernov,stepashka,gulla,mike007,frasse,harley03,omnislash,8538622,maryjan,sasha2011,gineok,8807031,hornier,gopinath,princesit,bdr529,godown,bosslady,hakaone,1qwe2,madman1,joshua11,lovegame,bayamon,jedi01,stupid12,sport123,aaa666,tony44,collect1,charliem,chimaira,cx18ka,trrim777,chuckd,thedream,redsox99,goodmorning,delta88,iloveyou11,newlife2,figvam,chicago3,jasonk,12qwer,9875321,lestat1,satcom,conditio,capri50,sayaka,9933162,trunks1,chinga,snooch,alexand1,findus,poekie,cfdbyf,kevind,mike1969,fire13,leftie,bigtuna,chinnu,silence1,celos1,blackdra,alex24,gfgfif,2boobs,happy8,enolagay,sataniv1993,turner1,dylans,peugeo,sasha1994,hoppel,conno,moonshot,santa234,meister1,008800,hanako,tree123,qweras,gfitymrf,reggie31,august29,supert,joshua10,akademia,gbljhfc,zorro123,nathalia,redsox12,hfpdjl,mishmash,nokiae51,nyyankees,tu190022,strongbo,none1,not4u2no,katie2,popart,harlequi,santan,michal1,1therock,screwu,csyekmrf,olemiss1,tyrese,hoople,sunshin1,cucina,starbase,topshelf,fostex,california1,castle1,symantec,pippolo,babare,turntabl,1angela,moo123,ipvteb,gogolf,alex88,cycle1,maxie1,phase2,selhurst,furnitur,samfox,fromvermine,shaq34,gators96,captain2,delonge,tomatoe,bisous,zxcvbnma,glacius,pineapple1,cannelle,ganibal,mko09ijn,paraklast1974,hobbes12,petty43,artema,junior8,mylover,1234567890d,fatal1ty,prostreet,peruan,10020,nadya,caution1,marocas,chanel5,summer08,metal123,111lox,scrapy,thatguy,eddie666,washingto,yannis,minnesota_hp,lucky4,playboy6,naumova,azzurro,patat,dale33,pa55wd,speedster,zemanova,saraht,newto,tony22,qscesz,arkady,1oliver,death6,vkfwx046,antiflag,stangs,jzf7qf2e,brianp,fozzy,cody123,startrek1,yoda123,murciela,trabajo,lvbnhbtdf,canario,fliper,adroit,henry5,goducks,papirus,alskdj,soccer6,88mike,gogetter,tanelorn,donking,marky1,leedsu,badmofo,al1916,wetdog,akmaral,pallet,april24,killer00,nesterova,rugby123,coffee12,browseui,ralliart,paigow,calgary1,armyman,vtldtltd,frodo2,frxtgb,iambigal,benno,jaytee,2hot4you,askar,bigtee,brentwoo,palladin,eddie2,al1916w,horosho,entrada,ilovetits,venture1,dragon19,jayde,chuvak,jamesl,fzr600,brandon8,vjqvbh,snowbal,snatch1,bg6njokf,pudder,karolin,candoo,pfuflrf,satchel1,manteca,khongbiet,critter1,partridg,skyclad,bigdon,ginger69,brave1,anthony4,spinnake,chinadol,passout,cochino,nipples1,15058,lopesk,sixflags,lloo999,parkhead,breakdance,cia123,fidodido,yuitre12,fooey,artem1995,gayathri,medin,nondriversig,l12345,bravo7,happy13,kazuya,camster,alex1998,luckyy,zipcode,dizzle,boating1,opusone,newpassw,movies23,kamikazi,zapato,bart316,cowboys0,corsair1,kingshit,hotdog12,rolyat,h200svrm,qwerty4,boofer,rhtyltkm,chris999,vaz21074,simferopol,pitboss,love3,britania,tanyshka,brause,123qwerty123,abeille,moscow1,ilkaev,manut,process1,inetcfg,dragon05,fortknox,castill,rynner,mrmike,koalas,jeebus,stockpor,longman,juanpabl,caiman,roleplay,jeremi,26058,prodojo,002200,magical1,black5,bvlgari,doogie1,cbhtqa,mahina,a1s2d3f4g5h6,jblpro,usmc01,bismilah,guitar01,april9,santana1,1234aa,monkey14,sorokin,evan1,doohan,animalsex,pfqxtyjr,dimitry,catchme,chello,silverch,glock45,dogleg,litespee,nirvana9,peyton18,alydar,warhamer,iluvme,sig229,minotavr,lobzik,jack23,bushwack,onlin,football123,joshua5,federov,winter2,bigmax,fufnfrhbcnb,hfpldfnhb,1dakota,f56307,chipmonk,4nick8,praline,vbhjh123,king11,22tango,gemini12,street1,77879,doodlebu,homyak,165432,chuluthu,trixi,karlito,salom,reisen,cdtnkzxjr,pookie11,tremendo,shazaam,welcome0,00000ty,peewee51,pizzle,gilead,bydand,sarvar,upskirt,legends1,freeway1,teenfuck,ranger9,darkfire,dfymrf,hunt0802,justme1,buffy1ma,1harry,671fsa75yt,burrfoot,budster,pa437tu,jimmyp,alina2006,malacon,charlize,elway1,free12,summer02,gadina,manara,gomer1,1cassie,sanja,kisulya,money3,pujols,ford50,midiland,turga,orange6,demetriu,freakboy,orosie1,radio123,open12,vfufpby,mustek,chris33,animes,meiling,nthtvjr,jasmine9,gfdkjd,oligarh,marimar,chicago9,.kzirf,bugssgub,samuraix,jackie01,pimpjuic,macdad,cagiva,vernost,willyboy,fynjyjdf,tabby1,privet123,torres9,retype,blueroom,raven11,q12we3,alex1989,bringiton,ridered,kareltje,ow8jtcs8t,ciccia,goniners,countryb,24688642,covingto,24861793,beyblade,vikin,badboyz,wlafiga,walstib,mirand,needajob,chloes,balaton,kbpfdtnf,freyja,bond9007,gabriel12,stormbri,hollage,love4eve,fenomeno,darknite,dragstar,kyle123,milfhunter,ma123123123,samia,ghislain,enrique1,ferien12,xjy6721,natalie2,reglisse,wilson2,wesker,rosebud7,amazon1,robertr,roykeane,xtcnth,mamatata,crazyc,mikie,savanah,blowjob69,jackie2,forty1,1coffee,fhbyjxrf,bubbah,goteam,hackedit,risky1,logoff,h397pnvr,buck13,robert23,bronc,st123st,godflesh,pornog,iamking,cisco69,septiembr,dale38,zhongguo,tibbar,panther9,buffa1,bigjohn1,mypuppy,vehvfycr,april16,shippo,fire1234,green15,q123123,gungadin,steveg,olivier1,chinaski,magnoli,faithy,storm12,toadfrog,paul99,78791,august20,automati,squirtle,cheezy,positano,burbon,nunya,llebpmac,kimmi,turtle2,alan123,prokuror,violin1,durex,pussygal,visionar,trick1,chicken6,29024,plowboy,rfybreks,imbue,sasha13,wagner1,vitalogy,cfymrf,thepro,26028,gorbunov,dvdcom,letmein5,duder,fastfun,pronin,libra1,conner1,harley20,stinker1,20068,20038,amitech,syoung,dugway,18068,welcome7,jimmypag,anastaci,kafka1,pfhfnecnhf,catsss,campus100,shamal,nacho1,fire12,vikings2,brasil1,rangerover,mohamma,peresvet,14058,cocomo,aliona,14038,qwaser,vikes,cbkmdf,skyblue1,ou81234,goodlove,dfkmltvfh,108888,roamer,pinky2,static1,zxcv4321,barmen,rock22,shelby2,morgans,1junior,pasword1,logjam,fifty5,nhfrnjhbcn,chaddy,philli,nemesis2,ingenier,djkrjd,ranger3,aikman8,knothead,daddy69,love007,vsythb,ford350,tiger00,renrut,owen11,energy12,march14,alena123,robert19,carisma,orange22,murphy11,podarok,prozak,kfgeirf,wolf13,lydia1,shazza,parasha,akimov,tobbie,pilote,heather4,baster,leones,gznfxjr,megama,987654321g,bullgod,boxster1,minkey,wombats,vergil,colegiata,lincol,smoothe,pride1,carwash1,latrell,bowling3,fylhtq123,pickwick,eider,bubblebox,bunnies1,loquit,slipper1,nutsac,purina,xtutdfhf,plokiju,1qazxs,uhjpysq,zxcvbasdfg,enjoy1,1pumpkin,phantom7,mama22,swordsma,wonderbr,dogdays,milker,u23456,silvan,dfkthbr,slagelse,yeahman,twothree,boston11,wolf100,dannyg,troll1,fynjy123,ghbcnfd,bftest,ballsdeep,bobbyorr,alphasig,cccdemo,fire123,norwest,claire2,august10,lth1108,problemas,sapito,alex06,1rusty,maccom,goirish1,ohyes,bxdumb,nabila,boobear1,rabbit69,princip,alexsander,travail,chantal1,dogggy,greenpea,diablo69,alex2009,bergen09,petticoa,classe,ceilidh,vlad2011,kamakiri,lucidity,qaz321,chileno,cexfhf,99ranger,mcitra,estoppel,volvos60,carter80,webpass,temp12,touareg,fcgbhby,bubba8,sunitha,200190ru,bitch2,shadow23,iluvit,nicole0,ruben1,nikki69,butttt,shocker1,souschef,lopotok01,kantot,corsano,cfnfyf,riverat,makalu,swapna,all4u9,cdtnkfy,ntktgepbr,ronaldo99,thomasj,bmw540i,chrisw,boomba,open321,z1x2c3v4b5n6m7,gaviota,iceman44,frosya,chris100,chris24,cosette,clearwat,micael,boogyman,pussy9,camus1,chumpy,heccrbq,konoplya,chester8,scooter5,ghjgfufylf,giotto,koolkat,zero000,bonita1,ckflrbq,j1964,mandog,18n28n24a,renob,head1,shergar,ringo123,tanita,sex4free,johnny12,halberd,reddevils,biolog,dillinge,fatb0y,c00per,hyperlit,wallace2,spears1,vitamine,buheirf,sloboda,alkash,mooman,marion1,arsenal7,sunder,nokia5610,edifier,pippone,fyfnjkmtdbx,fujimo,pepsi12,kulikova,bolat,duetto,daimon,maddog01,timoshka,ezmoney,desdemon,chesters,aiden,hugues,patrick5,aikman08,robert4,roenick,nyranger,writer1,36169544,foxmulder,118801,kutter,shashank,jamjar,118811,119955,aspirina,dinkus,1sailor,nalgene,19891959,snarf,allie1,cracky,resipsa,45678912,kemerovo,19841989,netware1,alhimik,19801984,nicole123,19761977,51501984,malaka1,montella,peachfuz,jethro1,cypress1,henkie,holdon,esmith,55443322,1friend,quique,bandicoot,statistika,great123,death13,ucht36,master4,67899876,bobsmith,nikko1,jr1234,hillary1,78978978,rsturbo,lzlzdfcz,bloodlust,shadow00,skagen,bambina,yummies,88887777,91328378,matthew4,itdoes,98256518,102938475,alina2002,123123789,fubared,dannys,123456321,nikifor,suck69,newmexico,scubaman,rhbcnb,fifnfy,puffdadd,159357852,dtheyxbr,theman22,212009164,prohor,shirle,nji90okm,newmedia,goose5,roma1995,letssee,iceman11,aksana,wirenut,pimpdady,1212312121,tamplier,pelican1,domodedovo,1928374655,fiction6,duckpond,ybrecz,thwack,onetwo34,gunsmith,murphydo,fallout1,spectre1,jabberwo,jgjesq,turbo6,bobo12,redryder,blackpus,elena1971,danilova,antoin,bobo1234,bobob,bobbobbo,dean1,222222a,jesusgod,matt23,musical1,darkmage,loppol,werrew,josepha,rebel12,toshka,gadfly,hawkwood,alina12,dnomyar,sexaddict,dangit,cool23,yocrack,archimed,farouk,nhfkzkz,lindalou,111zzzzz,ghjatccjh,wethepeople,m123456789,wowsers,kbkbxrf,bulldog5,m_roesel,sissinit,yamoon6,123ewqasd,dangel,miruvor79,kaytee,falcon7,bandit11,dotnet,dannii,arsenal9,miatamx5,1trouble,strip4me,dogpile,sexyred1,rjdfktdf,google10,shortman,crystal7,awesome123,cowdog,haruka,birthday28,jitter,diabolik,boomer12,dknight,bluewate,hockey123,crm0624,blueboys,willy123,jumpup,google2,cobra777,llabesab,vicelord,hopper1,gerryber,remmah,j10e5d4,qqqqqqw,agusti,fre_ak8yj,nahlik,redrobin,scott3,epson1,dumpy,bundao,aniolek,hola123,jergens,itsasecret,maxsam,bluelight,mountai1,bongwater,1london,pepper14,freeuse,dereks,qweqw,fordgt40,rfhfdfy,raider12,hunnybun,compac,splicer,megamon,tuffgong,gymnast1,butter11,modaddy,wapbbs_1,dandelio,soccer77,ghjnbdjcnjzybt,123xyi2,fishead,x002tp00,whodaman,555aaa,oussama,brunodog,technici,pmtgjnbl,qcxdw8ry,schweden,redsox3,throbber,collecto,japan10,dbm123dm,hellhoun,tech1,deadzone,kahlan,wolf123,dethklok,xzsawq,bigguy1,cybrthc,chandle,buck01,qq123123,secreta,williams1,c32649135,delta12,flash33,123joker,spacejam,polopo,holycrap,daman1,tummybed,financia,nusrat,euroline,magicone,jimkirk,ameritec,daniel26,sevenn,topazz,kingpins,dima1991,macdog,spencer5,oi812,geoffre,music11,baffle,123569,usagi,cassiope,polla,lilcrowe,thecakeisalie,vbhjndjhtw,vthokies,oldmans,sophie01,ghoster,penny2,129834,locutus1,meesha,magik,jerry69,daddysgirl,irondesk,andrey12,jasmine123,vepsrfyn,likesdick,1accord,jetboat,grafix,tomuch,showit,protozoa,mosias98,taburetka,blaze420,esenin,anal69,zhv84kv,puissant,charles0,aishwarya,babylon6,bitter1,lenina,raleigh1,lechat,access01,kamilka,fynjy,sparkplu,daisy3112,choppe,zootsuit,1234567j,rubyrose,gorilla9,nightshade,alternativa,cghfdjxybr,snuggles1,10121v,vova1992,leonardo1,dave2,matthewd,vfhfnbr,1986mets,nobull,bacall,mexican1,juanjo,mafia1,boomer22,soylent,edwards1,jordan10,blackwid,alex86,gemini13,lunar2,dctvcjcfnm,malaki,plugger,eagles11,snafu2,1shelly,cintaku,hannah22,tbird1,maks5843,irish88,homer22,amarok,fktrcfylhjdf,lincoln2,acess,gre69kik,need4speed,hightech,core2duo,blunt1,ublhjgjybrf,dragon33,1autopas,autopas1,wwww1,15935746,daniel20,2500aa,massim,1ggggggg,96ford,hardcor1,cobra5,blackdragon,vovan_lt,orochimaru,hjlbntkb,qwertyuiop12,tallen,paradoks,frozenfish,ghjuhfvvbcn,gerri1,nuggett,camilit,doright,trans1,serena1,catch2,bkmyeh,fireston,afhvfwtdn,purple3,figure8,fuckya,scamp1,laranja,ontheoutside,louis123,yellow7,moonwalk,mercury2,tolkein,raide,amenra,a13579,dranreb,5150vh,harish,tracksta,sexking,ozzmosis,katiee,alomar,matrix19,headroom,jahlove,ringding,apollo8,132546,132613,12345672000,saretta,135798,136666,thomas7,136913,onetwothree,hockey33,calida,nefertit,bitwise,tailhook,boop4,kfgecbr,bujhmbujhm,metal69,thedark,meteoro,felicia1,house12,tinuviel,istina,vaz2105,pimp13,toolfan,nina1,tuesday2,maxmotives,lgkp500,locksley,treech,darling1,kurama,aminka,ramin,redhed,dazzler,jager1,stpiliot,cardman,rfvtym,cheeser,14314314,paramoun,samcat,plumpy,stiffie,vsajyjr,panatha,qqq777,car12345,098poi,asdzx,keegan1,furelise,kalifornia,vbhjckfd,beast123,zcfvfzkexifz,harry5,1birdie,96328i,escola,extra330,henry12,gfhfyjqz,14u2nv,max1234,templar1,1dave,02588520,catrin,pangolin,marhaba,latin1,amorcito,dave22,escape1,advance1,yasuhiro,grepw,meetme,orange01,ernes,erdna,zsergn,nautica1,justinb,soundwav,miasma,greg78,nadine1,sexmad,lovebaby,promo1,excel1,babys,dragonma,camry1,sonnenschein,farooq,wazzkaprivet,magal,katinas,elvis99,redsox24,rooney1,chiefy,peggys,aliev,pilsung,mudhen,dontdoit,dennis12,supercal,energia,ballsout,funone,claudiu,brown2,amoco,dabl1125,philos,gjdtkbntkm,servette,13571113,whizzer,nollie,13467982,upiter,12string,bluejay1,silkie,william4,kosta1,143333,connor12,sustanon,06068,corporat,ssnake,laurita,king10,tahoes,arsenal123,sapato,charless,jeanmarc,levent,algerie,marine21,jettas,winsome,dctvgbplf,1701ab,xxxp455w0rd5,lllllll1,ooooooo1,monalis,koufax32,anastasya,debugger,sarita2,jason69,ufkxjyjr,gjlcnfdf,1jerry,daniel10,balinor,sexkitten,death2,qwertasdfgzxcvb,s9te949f,vegeta1,sysman,maxxam,dimabilan,mooose,ilovetit,june23,illest,doesit,mamou,abby12,longjump,transalp,moderato,littleguy,magritte,dilnoza,hawaiiguy,winbig,nemiroff,kokaine,admira,myemail,dream2,browneyes,destiny7,dragonss,suckme1,asa123,andranik,suckem,fleshbot,dandie,timmys,scitra,timdog,hasbeen,guesss,smellyfe,arachne,deutschl,harley88,birthday27,nobody1,papasmur,home1,jonass,bunia3,epatb1,embalm,vfvekmrf,apacer,12345656,estreet,weihnachtsbaum,mrwhite,admin12,kristie1,kelebek,yoda69,socken,tima123,bayern1,fktrcfylth,tamiya,99strenght,andy01,denis2011,19delta,stokecit,aotearoa,stalker2,nicnac,conrad1,popey,agusta,bowl36,1bigfish,mossyoak,1stunner,getinnow,jessejames,gkfnjy,drako,1nissan,egor123,hotness,1hawaii,zxc123456,cantstop,1peaches,madlen,west1234,jeter1,markis,judit,attack1,artemi,silver69,153246,crazy2,green9,yoshimi,1vette,chief123,jasper2,1sierra,twentyon,drstrang,aspirant,yannic,jenna123,bongtoke,slurpy,1sugar,civic97,rusty21,shineon,james19,anna12345,wonderwoman,1kevin,karol1,kanabis,wert21,fktif6115,evil1,kakaha,54gv768,826248s,tyrone1,1winston,sugar2,falcon01,adelya,mopar440,zasxcd,leecher,kinkysex,mercede1,travka,11234567,rebon,geekboy".split(","),
45763english_wikipedia:"the,of,and,in,was,is,for,as,on,with,by,he,at,from,his,an,were,are,which,doc,https,also,or,has,had,first,one,their,its,after,new,who,they,two,her,she,been,other,when,time,during,there,into,school,more,may,years,over,only,year,most,would,world,city,some,where,between,later,three,state,such,then,national,used,made,known,under,many,university,united,while,part,season,team,these,american,than,film,second,born,south,became,states,war,through,being,including,both,before,north,high,however,people,family,early,history,album,area,them,series,against,until,since,district,county,name,work,life,group,music,following,number,company,several,four,called,played,released,career,league,game,government,house,each,based,day,same,won,use,station,club,international,town,located,population,general,college,east,found,age,march,end,september,began,home,public,church,line,june,river,member,system,place,century,band,july,york,january,october,song,august,best,former,british,party,named,held,village,show,local,november,took,service,december,built,another,major,within,along,members,five,single,due,although,small,old,left,final,large,include,building,served,president,received,games,death,february,main,third,set,children,own,order,species,park,law,air,published,road,died,book,men,women,army,often,according,education,central,country,division,english,top,included,development,french,community,among,water,play,side,list,times,near,late,form,original,different,center,power,led,students,german,moved,court,six,land,council,island,u.s.,record,million,research,art,established,award,street,military,television,given,region,support,western,production,non,political,point,cup,period,business,title,started,various,election,using,england,role,produced,become,program,works,field,total,office,class,written,association,radio,union,level,championship,director,few,force,created,department,founded,services,married,though,per,n't,site,open,act,short,society,version,royal,present,northern,worked,professional,full,returned,joined,story,france,european,currently,language,social,california,india,days,design,st.,further,round,australia,wrote,san,project,control,southern,railway,board,popular,continued,free,battle,considered,video,common,position,living,half,playing,recorded,red,post,described,average,records,special,modern,appeared,announced,areas,rock,release,elected,others,example,term,opened,similar,formed,route,census,current,schools,originally,lake,developed,race,himself,forces,addition,information,upon,province,match,event,songs,result,events,win,eastern,track,lead,teams,science,human,construction,minister,germany,awards,available,throughout,training,style,body,museum,australian,health,seven,signed,chief,eventually,appointed,sea,centre,debut,tour,points,media,light,range,character,across,features,families,largest,indian,network,less,performance,players,refer,europe,sold,festival,usually,taken,despite,designed,committee,process,return,official,episode,institute,stage,followed,performed,japanese,personal,thus,arts,space,low,months,includes,china,study,middle,magazine,leading,japan,groups,aircraft,featured,federal,civil,rights,model,coach,canadian,books,remained,eight,type,independent,completed,capital,academy,instead,kingdom,organization,countries,studies,competition,sports,size,above,section,finished,gold,involved,reported,management,systems,industry,directed,market,fourth,movement,technology,bank,ground,campaign,base,lower,sent,rather,added,provided,coast,grand,historic,valley,conference,bridge,winning,approximately,films,chinese,awarded,degree,russian,shows,native,female,replaced,municipality,square,studio,medical,data,african,successful,mid,bay,attack,previous,operations,spanish,theatre,student,republic,beginning,provide,ship,primary,owned,writing,tournament,culture,introduced,texas,related,natural,parts,governor,reached,ireland,units,senior,decided,italian,whose,higher,africa,standard,income,professor,placed,regional,los,buildings,championships,active,novel,energy,generally,interest,via,economic,previously,stated,itself,channel,below,operation,leader,traditional,trade,structure,limited,runs,prior,regular,famous,saint,navy,foreign,listed,artist,catholic,airport,results,parliament,collection,unit,officer,goal,attended,command,staff,commission,lived,location,plays,commercial,places,foundation,significant,older,medal,self,scored,companies,highway,activities,programs,wide,musical,notable,library,numerous,paris,towards,individual,allowed,plant,property,annual,contract,whom,highest,initially,required,earlier,assembly,artists,rural,seat,practice,defeated,ended,soviet,length,spent,manager,press,associated,author,issues,additional,characters,lord,zealand,policy,engine,township,noted,historical,complete,financial,religious,mission,contains,nine,recent,represented,pennsylvania,administration,opening,secretary,lines,report,executive,youth,closed,theory,writer,italy,angeles,appearance,feature,queen,launched,legal,terms,entered,issue,edition,singer,greek,majority,background,source,anti,cultural,complex,changes,recording,stadium,islands,operated,particularly,basketball,month,uses,port,castle,mostly,names,fort,selected,increased,status,earth,subsequently,pacific,cover,variety,certain,goals,remains,upper,congress,becoming,studied,irish,nature,particular,loss,caused,chart,dr.,forced,create,era,retired,material,review,rate,singles,referred,larger,individuals,shown,provides,products,speed,democratic,poland,parish,olympics,cities,themselves,temple,wing,genus,households,serving,cost,wales,stations,passed,supported,view,cases,forms,actor,male,matches,males,stars,tracks,females,administrative,median,effect,biography,train,engineering,camp,offered,chairman,houses,mainly,19th,surface,therefore,nearly,score,ancient,subject,prime,seasons,claimed,experience,specific,jewish,failed,overall,believed,plot,troops,greater,spain,consists,broadcast,heavy,increase,raised,separate,campus,1980s,appears,presented,lies,composed,recently,influence,fifth,nations,creek,references,elections,britain,double,cast,meaning,earned,carried,producer,latter,housing,brothers,attempt,article,response,border,remaining,nearby,direct,ships,value,workers,politician,academic,label,1970s,commander,rule,fellow,residents,authority,editor,transport,dutch,projects,responsible,covered,territory,flight,races,defense,tower,emperor,albums,facilities,daily,stories,assistant,managed,primarily,quality,function,proposed,distribution,conditions,prize,journal,code,vice,newspaper,corps,highly,constructed,mayor,critical,secondary,corporation,rugby,regiment,ohio,appearances,serve,allow,nation,multiple,discovered,directly,scene,levels,growth,elements,acquired,1990s,officers,physical,20th,latin,host,jersey,graduated,arrived,issued,literature,metal,estate,vote,immediately,quickly,asian,competed,extended,produce,urban,1960s,promoted,contemporary,global,formerly,appear,industrial,types,opera,ministry,soldiers,commonly,mass,formation,smaller,typically,drama,shortly,density,senate,effects,iran,polish,prominent,naval,settlement,divided,basis,republican,languages,distance,treatment,continue,product,mile,sources,footballer,format,clubs,leadership,initial,offers,operating,avenue,officially,columbia,grade,squadron,fleet,percent,farm,leaders,agreement,likely,equipment,website,mount,grew,method,transferred,intended,renamed,iron,asia,reserve,capacity,politics,widely,activity,advanced,relations,scottish,dedicated,crew,founder,episodes,lack,amount,build,efforts,concept,follows,ordered,leaves,positive,economy,entertainment,affairs,memorial,ability,illinois,communities,color,text,railroad,scientific,focus,comedy,serves,exchange,environment,cars,direction,organized,firm,description,agency,analysis,purpose,destroyed,reception,planned,revealed,infantry,architecture,growing,featuring,household,candidate,removed,situated,models,knowledge,solo,technical,organizations,assigned,conducted,participated,largely,purchased,register,gained,combined,headquarters,adopted,potential,protection,scale,approach,spread,independence,mountains,titled,geography,applied,safety,mixed,accepted,continues,captured,rail,defeat,principal,recognized,lieutenant,mentioned,semi,owner,joint,liberal,actress,traffic,creation,basic,notes,unique,supreme,declared,simply,plants,sales,massachusetts,designated,parties,jazz,compared,becomes,resources,titles,concert,learning,remain,teaching,versions,content,alongside,revolution,sons,block,premier,impact,champions,districts,generation,estimated,volume,image,sites,account,roles,sport,quarter,providing,zone,yard,scoring,classes,presence,performances,representatives,hosted,split,taught,origin,olympic,claims,critics,facility,occurred,suffered,municipal,damage,defined,resulted,respectively,expanded,platform,draft,opposition,expected,educational,ontario,climate,reports,atlantic,surrounding,performing,reduced,ranked,allows,birth,nominated,younger,newly,kong,positions,theater,philadelphia,heritage,finals,disease,sixth,laws,reviews,constitution,tradition,swedish,theme,fiction,rome,medicine,trains,resulting,existing,deputy,environmental,labour,classical,develop,fans,granted,receive,alternative,begins,nuclear,fame,buried,connected,identified,palace,falls,letters,combat,sciences,effort,villages,inspired,regions,towns,conservative,chosen,animals,labor,attacks,materials,yards,steel,representative,orchestra,peak,entitled,officials,returning,reference,northwest,imperial,convention,examples,ocean,publication,painting,subsequent,frequently,religion,brigade,fully,sides,acts,cemetery,relatively,oldest,suggested,succeeded,achieved,application,programme,cells,votes,promotion,graduate,armed,supply,flying,communist,figures,literary,netherlands,korea,worldwide,citizens,1950s,faculty,draw,stock,seats,occupied,methods,unknown,articles,claim,holds,authorities,audience,sweden,interview,obtained,covers,settled,transfer,marked,allowing,funding,challenge,southeast,unlike,crown,rise,portion,transportation,sector,phase,properties,edge,tropical,standards,institutions,philosophy,legislative,hills,brand,fund,conflict,unable,founding,refused,attempts,metres,permanent,starring,applications,creating,effective,aired,extensive,employed,enemy,expansion,billboard,rank,battalion,multi,vehicle,fought,alliance,category,perform,federation,poetry,bronze,bands,entry,vehicles,bureau,maximum,billion,trees,intelligence,greatest,screen,refers,commissioned,gallery,injury,confirmed,setting,treaty,adult,americans,broadcasting,supporting,pilot,mobile,writers,programming,existence,squad,minnesota,copies,korean,provincial,sets,defence,offices,agricultural,internal,core,northeast,retirement,factory,actions,prevent,communications,ending,weekly,containing,functions,attempted,interior,weight,bowl,recognition,incorporated,increasing,ultimately,documentary,derived,attacked,lyrics,mexican,external,churches,centuries,metropolitan,selling,opposed,personnel,mill,visited,presidential,roads,pieces,norwegian,controlled,18th,rear,influenced,wrestling,weapons,launch,composer,locations,developing,circuit,specifically,studios,shared,canal,wisconsin,publishing,approved,domestic,consisted,determined,comic,establishment,exhibition,southwest,fuel,electronic,cape,converted,educated,melbourne,hits,wins,producing,norway,slightly,occur,surname,identity,represent,constituency,funds,proved,links,structures,athletic,birds,contest,users,poet,institution,display,receiving,rare,contained,guns,motion,piano,temperature,publications,passenger,contributed,toward,cathedral,inhabitants,architect,exist,athletics,muslim,courses,abandoned,signal,successfully,disambiguation,tennessee,dynasty,heavily,maryland,jews,representing,budget,weather,missouri,introduction,faced,pair,chapel,reform,height,vietnam,occurs,motor,cambridge,lands,focused,sought,patients,shape,invasion,chemical,importance,communication,selection,regarding,homes,voivodeship,maintained,borough,failure,aged,passing,agriculture,oregon,teachers,flow,philippines,trail,seventh,portuguese,resistance,reaching,negative,fashion,scheduled,downtown,universities,trained,skills,scenes,views,notably,typical,incident,candidates,engines,decades,composition,commune,chain,inc.,austria,sale,values,employees,chamber,regarded,winners,registered,task,investment,colonial,swiss,user,entirely,flag,stores,closely,entrance,laid,journalist,coal,equal,causes,turkish,quebec,techniques,promote,junction,easily,dates,kentucky,singapore,residence,violence,advance,survey,humans,expressed,passes,streets,distinguished,qualified,folk,establish,egypt,artillery,visual,improved,actual,finishing,medium,protein,switzerland,productions,operate,poverty,neighborhood,organisation,consisting,consecutive,sections,partnership,extension,reaction,factor,costs,bodies,device,ethnic,racial,flat,objects,chapter,improve,musicians,courts,controversy,membership,merged,wars,expedition,interests,arab,comics,gain,describes,mining,bachelor,crisis,joining,decade,1930s,distributed,habitat,routes,arena,cycle,divisions,briefly,vocals,directors,degrees,object,recordings,installed,adjacent,demand,voted,causing,businesses,ruled,grounds,starred,drawn,opposite,stands,formal,operates,persons,counties,compete,wave,israeli,ncaa,resigned,brief,greece,combination,demographics,historian,contain,commonwealth,musician,collected,argued,louisiana,session,cabinet,parliamentary,electoral,loan,profit,regularly,conservation,islamic,purchase,17th,charts,residential,earliest,designs,paintings,survived,moth,items,goods,grey,anniversary,criticism,images,discovery,observed,underground,progress,additionally,participate,thousands,reduce,elementary,owners,stating,iraq,resolution,capture,tank,rooms,hollywood,finance,queensland,reign,maintain,iowa,landing,broad,outstanding,circle,path,manufacturing,assistance,sequence,gmina,crossing,leads,universal,shaped,kings,attached,medieval,ages,metro,colony,affected,scholars,oklahoma,coastal,soundtrack,painted,attend,definition,meanwhile,purposes,trophy,require,marketing,popularity,cable,mathematics,mississippi,represents,scheme,appeal,distinct,factors,acid,subjects,roughly,terminal,economics,senator,diocese,prix,contrast,argentina,czech,wings,relief,stages,duties,16th,novels,accused,whilst,equivalent,charged,measure,documents,couples,request,danish,defensive,guide,devices,statistics,credited,tries,passengers,allied,frame,puerto,peninsula,concluded,instruments,wounded,differences,associate,forests,afterwards,replace,requirements,aviation,solution,offensive,ownership,inner,legislation,hungarian,contributions,actors,translated,denmark,steam,depending,aspects,assumed,injured,severe,admitted,determine,shore,technique,arrival,measures,translation,debuted,delivered,returns,rejected,separated,visitors,damaged,storage,accompanied,markets,industries,losses,gulf,charter,strategy,corporate,socialist,somewhat,significantly,physics,mounted,satellite,experienced,constant,relative,pattern,restored,belgium,connecticut,partners,harvard,retained,networks,protected,mode,artistic,parallel,collaboration,debate,involving,journey,linked,salt,authors,components,context,occupation,requires,occasionally,policies,tamil,ottoman,revolutionary,hungary,poem,versus,gardens,amongst,audio,makeup,frequency,meters,orthodox,continuing,suggests,legislature,coalition,guitarist,eighth,classification,practices,soil,tokyo,instance,limit,coverage,considerable,ranking,colleges,cavalry,centers,daughters,twin,equipped,broadway,narrow,hosts,rates,domain,boundary,arranged,12th,whereas,brazilian,forming,rating,strategic,competitions,trading,covering,baltimore,commissioner,infrastructure,origins,replacement,praised,disc,collections,expression,ukraine,driven,edited,austrian,solar,ensure,premiered,successor,wooden,operational,hispanic,concerns,rapid,prisoners,childhood,meets,influential,tunnel,employment,tribe,qualifying,adapted,temporary,celebrated,appearing,increasingly,depression,adults,cinema,entering,laboratory,script,flows,romania,accounts,fictional,pittsburgh,achieve,monastery,franchise,formally,tools,newspapers,revival,sponsored,processes,vienna,springs,missions,classified,13th,annually,branches,lakes,gender,manner,advertising,normally,maintenance,adding,characteristics,integrated,decline,modified,strongly,critic,victims,malaysia,arkansas,nazi,restoration,powered,monument,hundreds,depth,15th,controversial,admiral,criticized,brick,honorary,initiative,output,visiting,birmingham,progressive,existed,carbon,1920s,credits,colour,rising,hence,defeating,superior,filmed,listing,column,surrounded,orleans,principles,territories,struck,participation,indonesia,movements,index,commerce,conduct,constitutional,spiritual,ambassador,vocal,completion,edinburgh,residing,tourism,finland,bears,medals,resident,themes,visible,indigenous,involvement,basin,electrical,ukrainian,concerts,boats,styles,processing,rival,drawing,vessels,experimental,declined,touring,supporters,compilation,coaching,cited,dated,roots,string,explained,transit,traditionally,poems,minimum,representation,14th,releases,effectively,architectural,triple,indicated,greatly,elevation,clinical,printed,10th,proposal,peaked,producers,romanized,rapidly,stream,innings,meetings,counter,householder,honour,lasted,agencies,document,exists,surviving,experiences,honors,landscape,hurricane,harbor,panel,competing,profile,vessel,farmers,lists,revenue,exception,customers,11th,participants,wildlife,utah,bible,gradually,preserved,replacing,symphony,begun,longest,siege,provinces,mechanical,genre,transmission,agents,executed,videos,benefits,funded,rated,instrumental,ninth,similarly,dominated,destruction,passage,technologies,thereafter,outer,facing,affiliated,opportunities,instrument,governments,scholar,evolution,channels,shares,sessions,widespread,occasions,engineers,scientists,signing,battery,competitive,alleged,eliminated,supplies,judges,hampshire,regime,portrayed,penalty,taiwan,denied,submarine,scholarship,substantial,transition,victorian,http,nevertheless,filed,supports,continental,tribes,ratio,doubles,useful,honours,blocks,principle,retail,departure,ranks,patrol,yorkshire,vancouver,inter,extent,afghanistan,strip,railways,component,organ,symbol,categories,encouraged,abroad,civilian,periods,traveled,writes,struggle,immediate,recommended,adaptation,egyptian,graduating,assault,drums,nomination,historically,voting,allies,detailed,achievement,percentage,arabic,assist,frequent,toured,apply,and/or,intersection,maine,touchdown,throne,produces,contribution,emerged,obtain,archbishop,seek,researchers,remainder,populations,clan,finnish,overseas,fifa,licensed,chemistry,festivals,mediterranean,injuries,animated,seeking,publisher,volumes,limits,venue,jerusalem,generated,trials,islam,youngest,ruling,glasgow,germans,songwriter,persian,municipalities,donated,viewed,belgian,cooperation,posted,tech,dual,volunteer,settlers,commanded,claiming,approval,delhi,usage,terminus,partly,electricity,locally,editions,premiere,absence,belief,traditions,statue,indicate,manor,stable,attributed,possession,managing,viewers,chile,overview,seed,regulations,essential,minority,cargo,segment,endemic,forum,deaths,monthly,playoffs,erected,practical,machines,suburb,relation,mrs.,descent,indoor,continuous,characterized,solutions,caribbean,rebuilt,serbian,summary,contested,psychology,pitch,attending,muhammad,tenure,drivers,diameter,assets,venture,punk,airlines,concentration,athletes,volunteers,pages,mines,influences,sculpture,protest,ferry,behalf,drafted,apparent,furthermore,ranging,romanian,democracy,lanka,significance,linear,d.c.,certified,voters,recovered,tours,demolished,boundaries,assisted,identify,grades,elsewhere,mechanism,1940s,reportedly,aimed,conversion,suspended,photography,departments,beijing,locomotives,publicly,dispute,magazines,resort,conventional,platforms,internationally,capita,settlements,dramatic,derby,establishing,involves,statistical,implementation,immigrants,exposed,diverse,layer,vast,ceased,connections,belonged,interstate,uefa,organised,abuse,deployed,cattle,partially,filming,mainstream,reduction,automatic,rarely,subsidiary,decides,merger,comprehensive,displayed,amendment,guinea,exclusively,manhattan,concerning,commons,radical,serbia,baptist,buses,initiated,portrait,harbour,choir,citizen,sole,unsuccessful,manufactured,enforcement,connecting,increases,patterns,sacred,muslims,clothing,hindu,unincorporated,sentenced,advisory,tanks,campaigns,fled,repeated,remote,rebellion,implemented,texts,fitted,tribute,writings,sufficient,ministers,21st,devoted,jurisdiction,coaches,interpretation,pole,businessman,peru,sporting,prices,cuba,relocated,opponent,arrangement,elite,manufacturer,responded,suitable,distinction,calendar,dominant,tourist,earning,prefecture,ties,preparation,anglo,pursue,worship,archaeological,chancellor,bangladesh,scores,traded,lowest,horror,outdoor,biology,commented,specialized,loop,arriving,farming,housed,historians,'the,patent,pupils,christianity,opponents,athens,northwestern,maps,promoting,reveals,flights,exclusive,lions,norfolk,hebrew,extensively,eldest,shops,acquisition,virtual,renowned,margin,ongoing,essentially,iranian,alternate,sailed,reporting,conclusion,originated,temperatures,exposure,secured,landed,rifle,framework,identical,martial,focuses,topics,ballet,fighters,belonging,wealthy,negotiations,evolved,bases,oriented,acres,democrat,heights,restricted,vary,graduation,aftermath,chess,illness,participating,vertical,collective,immigration,demonstrated,leaf,completing,organic,missile,leeds,eligible,grammar,confederate,improvement,congressional,wealth,cincinnati,spaces,indicates,corresponding,reaches,repair,isolated,taxes,congregation,ratings,leagues,diplomatic,submitted,winds,awareness,photographs,maritime,nigeria,accessible,animation,restaurants,philippine,inaugural,dismissed,armenian,illustrated,reservoir,speakers,programmes,resource,genetic,interviews,camps,regulation,computers,preferred,travelled,comparison,distinctive,recreation,requested,southeastern,dependent,brisbane,breeding,playoff,expand,bonus,gauge,departed,qualification,inspiration,shipping,slaves,variations,shield,theories,munich,recognised,emphasis,favour,variable,seeds,undergraduate,territorial,intellectual,qualify,mini,banned,pointed,democrats,assessment,judicial,examination,attempting,objective,partial,characteristic,hardware,pradesh,execution,ottawa,metre,drum,exhibitions,withdrew,attendance,phrase,journalism,logo,measured,error,christians,trio,protestant,theology,respective,atmosphere,buddhist,substitute,curriculum,fundamental,outbreak,rabbi,intermediate,designation,globe,liberation,simultaneously,diseases,experiments,locomotive,difficulties,mainland,nepal,relegated,contributing,database,developments,veteran,carries,ranges,instruction,lodge,protests,obama,newcastle,experiment,physician,describing,challenges,corruption,delaware,adventures,ensemble,succession,renaissance,tenth,altitude,receives,approached,crosses,syria,croatia,warsaw,professionals,improvements,worn,airline,compound,permitted,preservation,reducing,printing,scientist,activist,comprises,sized,societies,enters,ruler,gospel,earthquake,extend,autonomous,croatian,serial,decorated,relevant,ideal,grows,grass,tier,towers,wider,welfare,columns,alumni,descendants,interface,reserves,banking,colonies,manufacturers,magnetic,closure,pitched,vocalist,preserve,enrolled,cancelled,equation,2000s,nickname,bulgaria,heroes,exile,mathematical,demands,input,structural,tube,stem,approaches,argentine,axis,manuscript,inherited,depicted,targets,visits,veterans,regard,removal,efficiency,organisations,concepts,lebanon,manga,petersburg,rally,supplied,amounts,yale,tournaments,broadcasts,signals,pilots,azerbaijan,architects,enzyme,literacy,declaration,placing,batting,incumbent,bulgarian,consistent,poll,defended,landmark,southwestern,raid,resignation,travels,casualties,prestigious,namely,aims,recipient,warfare,readers,collapse,coached,controls,volleyball,coup,lesser,verse,pairs,exhibited,proteins,molecular,abilities,integration,consist,aspect,advocate,administered,governing,hospitals,commenced,coins,lords,variation,resumed,canton,artificial,elevated,palm,difficulty,civic,efficient,northeastern,inducted,radiation,affiliate,boards,stakes,byzantine,consumption,freight,interaction,oblast,numbered,seminary,contracts,extinct,predecessor,bearing,cultures,functional,neighboring,revised,cylinder,grants,narrative,reforms,athlete,tales,reflect,presidency,compositions,specialist,cricketer,founders,sequel,widow,disbanded,associations,backed,thereby,pitcher,commanding,boulevard,singers,crops,militia,reviewed,centres,waves,consequently,fortress,tributary,portions,bombing,excellence,nest,payment,mars,plaza,unity,victories,scotia,farms,nominations,variant,attacking,suspension,installation,graphics,estates,comments,acoustic,destination,venues,surrender,retreat,libraries,quarterback,customs,berkeley,collaborated,gathered,syndrome,dialogue,recruited,shanghai,neighbouring,psychological,saudi,moderate,exhibit,innovation,depot,binding,brunswick,situations,certificate,actively,shakespeare,editorial,presentation,ports,relay,nationalist,methodist,archives,experts,maintains,collegiate,bishops,maintaining,temporarily,embassy,essex,wellington,connects,reformed,bengal,recalled,inches,doctrine,deemed,legendary,reconstruction,statements,palestinian,meter,achievements,riders,interchange,spots,auto,accurate,chorus,dissolved,missionary,thai,operators,e.g.,generations,failing,delayed,cork,nashville,perceived,venezuela,cult,emerging,tomb,abolished,documented,gaining,canyon,episcopal,stored,assists,compiled,kerala,kilometers,mosque,grammy,theorem,unions,segments,glacier,arrives,theatrical,circulation,conferences,chapters,displays,circular,authored,conductor,fewer,dimensional,nationwide,liga,yugoslavia,peer,vietnamese,fellowship,armies,regardless,relating,dynamic,politicians,mixture,serie,somerset,imprisoned,posts,beliefs,beta,layout,independently,electronics,provisions,fastest,logic,headquartered,creates,challenged,beaten,appeals,plains,protocol,graphic,accommodate,iraqi,midfielder,span,commentary,freestyle,reflected,palestine,lighting,burial,virtually,backing,prague,tribal,heir,identification,prototype,criteria,dame,arch,tissue,footage,extending,procedures,predominantly,updated,rhythm,preliminary,cafe,disorder,prevented,suburbs,discontinued,retiring,oral,followers,extends,massacre,journalists,conquest,larvae,pronounced,behaviour,diversity,sustained,addressed,geographic,restrictions,voiced,milwaukee,dialect,quoted,grid,nationally,nearest,roster,twentieth,separation,indies,manages,citing,intervention,guidance,severely,migration,artwork,focusing,rivals,trustees,varied,enabled,committees,centered,skating,slavery,cardinals,forcing,tasks,auckland,youtube,argues,colored,advisor,mumbai,requiring,theological,registration,refugees,nineteenth,survivors,runners,colleagues,priests,contribute,variants,workshop,concentrated,creator,lectures,temples,exploration,requirement,interactive,navigation,companion,perth,allegedly,releasing,citizenship,observation,stationed,ph.d.,sheep,breed,discovers,encourage,kilometres,journals,performers,isle,saskatchewan,hybrid,hotels,lancashire,dubbed,airfield,anchor,suburban,theoretical,sussex,anglican,stockholm,permanently,upcoming,privately,receiver,optical,highways,congo,colours,aggregate,authorized,repeatedly,varies,fluid,innovative,transformed,praise,convoy,demanded,discography,attraction,export,audiences,ordained,enlisted,occasional,westminster,syrian,heavyweight,bosnia,consultant,eventual,improving,aires,wickets,epic,reactions,scandal,i.e.,discrimination,buenos,patron,investors,conjunction,testament,construct,encountered,celebrity,expanding,georgian,brands,retain,underwent,algorithm,foods,provision,orbit,transformation,associates,tactical,compact,varieties,stability,refuge,gathering,moreover,manila,configuration,gameplay,discipline,entity,comprising,composers,skill,monitoring,ruins,museums,sustainable,aerial,altered,codes,voyage,friedrich,conflicts,storyline,travelling,conducting,merit,indicating,referendum,currency,encounter,particles,automobile,workshops,acclaimed,inhabited,doctorate,cuban,phenomenon,dome,enrollment,tobacco,governance,trend,equally,manufacture,hydrogen,grande,compensation,download,pianist,grain,shifted,neutral,evaluation,define,cycling,seized,array,relatives,motors,firms,varying,automatically,restore,nicknamed,findings,governed,investigate,manitoba,administrator,vital,integral,indonesian,confusion,publishers,enable,geographical,inland,naming,civilians,reconnaissance,indianapolis,lecturer,deer,tourists,exterior,rhode,bassist,symbols,scope,ammunition,yuan,poets,punjab,nursing,cent,developers,estimates,presbyterian,nasa,holdings,generate,renewed,computing,cyprus,arabia,duration,compounds,gastropod,permit,valid,touchdowns,facade,interactions,mineral,practiced,allegations,consequence,goalkeeper,baronet,copyright,uprising,carved,targeted,competitors,mentions,sanctuary,fees,pursued,tampa,chronicle,capabilities,specified,specimens,toll,accounting,limestone,staged,upgraded,philosophical,streams,guild,revolt,rainfall,supporter,princeton,terrain,hometown,probability,assembled,paulo,surrey,voltage,developer,destroyer,floors,lineup,curve,prevention,potentially,onwards,trips,imposed,hosting,striking,strict,admission,apartments,solely,utility,proceeded,observations,euro,incidents,vinyl,profession,haven,distant,expelled,rivalry,runway,torpedo,zones,shrine,dimensions,investigations,lithuania,idaho,pursuit,copenhagen,considerably,locality,wireless,decrease,genes,thermal,deposits,hindi,habitats,withdrawn,biblical,monuments,casting,plateau,thesis,managers,flooding,assassination,acknowledged,interim,inscription,guided,pastor,finale,insects,transported,activists,marshal,intensity,airing,cardiff,proposals,lifestyle,prey,herald,capitol,aboriginal,measuring,lasting,interpreted,occurring,desired,drawings,healthcare,panels,elimination,oslo,ghana,blog,sabha,intent,superintendent,governors,bankruptcy,p.m.,equity,disk,layers,slovenia,prussia,quartet,mechanics,graduates,politically,monks,screenplay,nato,absorbed,topped,petition,bold,morocco,exhibits,canterbury,publish,rankings,crater,dominican,enhanced,planes,lutheran,governmental,joins,collecting,brussels,unified,streak,strategies,flagship,surfaces,oval,archive,etymology,imprisonment,instructor,noting,remix,opposing,servant,rotation,width,trans,maker,synthesis,excess,tactics,snail,ltd.,lighthouse,sequences,cornwall,plantation,mythology,performs,foundations,populated,horizontal,speedway,activated,performer,diving,conceived,edmonton,subtropical,environments,prompted,semifinals,caps,bulk,treasury,recreational,telegraph,continent,portraits,relegation,catholics,graph,velocity,rulers,endangered,secular,observer,learns,inquiry,idol,dictionary,certification,estimate,cluster,armenia,observatory,revived,nadu,consumers,hypothesis,manuscripts,contents,arguments,editing,trails,arctic,essays,belfast,acquire,promotional,undertaken,corridor,proceedings,antarctic,millennium,labels,delegates,vegetation,acclaim,directing,substance,outcome,diploma,philosopher,malta,albanian,vicinity,degc,legends,regiments,consent,terrorist,scattered,presidents,gravity,orientation,deployment,duchy,refuses,estonia,crowned,separately,renovation,rises,wilderness,objectives,agreements,empress,slopes,inclusion,equality,decree,ballot,criticised,rochester,recurring,struggled,disabled,henri,poles,prussian,convert,bacteria,poorly,sudan,geological,wyoming,consistently,minimal,withdrawal,interviewed,proximity,repairs,initiatives,pakistani,republicans,propaganda,viii,abstract,commercially,availability,mechanisms,naples,discussions,underlying,lens,proclaimed,advised,spelling,auxiliary,attract,lithuanian,editors,o'brien,accordance,measurement,novelist,ussr,formats,councils,contestants,indie,facebook,parishes,barrier,battalions,sponsor,consulting,terrorism,implement,uganda,crucial,unclear,notion,distinguish,collector,attractions,filipino,ecology,investments,capability,renovated,iceland,albania,accredited,scouts,armor,sculptor,cognitive,errors,gaming,condemned,successive,consolidated,baroque,entries,regulatory,reserved,treasurer,variables,arose,technological,rounded,provider,rhine,agrees,accuracy,genera,decreased,frankfurt,ecuador,edges,particle,rendered,calculated,careers,faction,rifles,americas,gaelic,portsmouth,resides,merchants,fiscal,premises,coin,draws,presenter,acceptance,ceremonies,pollution,consensus,membrane,brigadier,nonetheless,genres,supervision,predicted,magnitude,finite,differ,ancestry,vale,delegation,removing,proceeds,placement,emigrated,siblings,molecules,payments,considers,demonstration,proportion,newer,valve,achieving,confederation,continuously,luxury,notre,introducing,coordinates,charitable,squadrons,disorders,geometry,winnipeg,ulster,loans,longtime,receptor,preceding,belgrade,mandate,wrestler,neighbourhood,factories,buddhism,imported,sectors,protagonist,steep,elaborate,prohibited,artifacts,prizes,pupil,cooperative,sovereign,subspecies,carriers,allmusic,nationals,settings,autobiography,neighborhoods,analog,facilitate,voluntary,jointly,newfoundland,organizing,raids,exercises,nobel,machinery,baltic,crop,granite,dense,websites,mandatory,seeks,surrendered,anthology,comedian,bombs,slot,synopsis,critically,arcade,marking,equations,halls,indo,inaugurated,embarked,speeds,clause,invention,premiership,likewise,presenting,demonstrate,designers,organize,examined,km/h,bavaria,troop,referee,detection,zurich,prairie,rapper,wingspan,eurovision,luxembourg,slovakia,inception,disputed,mammals,entrepreneur,makers,evangelical,yield,clergy,trademark,defunct,allocated,depicting,volcanic,batted,conquered,sculptures,providers,reflects,armoured,locals,walt,herzegovina,contracted,entities,sponsorship,prominence,flowing,ethiopia,marketed,corporations,withdraw,carnegie,induced,investigated,portfolio,flowering,opinions,viewing,classroom,donations,bounded,perception,leicester,fruits,charleston,academics,statute,complaints,smallest,deceased,petroleum,resolved,commanders,algebra,southampton,modes,cultivation,transmitter,spelled,obtaining,sizes,acre,pageant,bats,abbreviated,correspondence,barracks,feast,tackles,raja,derives,geology,disputes,translations,counted,constantinople,seating,macedonia,preventing,accommodation,homeland,explored,invaded,provisional,transform,sphere,unsuccessfully,missionaries,conservatives,highlights,traces,organisms,openly,dancers,fossils,absent,monarchy,combining,lanes,stint,dynamics,chains,missiles,screening,module,tribune,generating,miners,nottingham,seoul,unofficial,owing,linking,rehabilitation,citation,louisville,mollusk,depicts,differential,zimbabwe,kosovo,recommendations,responses,pottery,scorer,aided,exceptions,dialects,telecommunications,defines,elderly,lunar,coupled,flown,25th,espn,formula_1,bordered,fragments,guidelines,gymnasium,valued,complexity,papal,presumably,maternal,challenging,reunited,advancing,comprised,uncertain,favorable,twelfth,correspondent,nobility,livestock,expressway,chilean,tide,researcher,emissions,profits,lengths,accompanying,witnessed,itunes,drainage,slope,reinforced,feminist,sanskrit,develops,physicians,outlets,isbn,coordinator,averaged,termed,occupy,diagnosed,yearly,humanitarian,prospect,spacecraft,stems,enacted,linux,ancestors,karnataka,constitute,immigrant,thriller,ecclesiastical,generals,celebrations,enhance,heating,advocated,evident,advances,bombardment,watershed,shuttle,wicket,twitter,adds,branded,teaches,schemes,pension,advocacy,conservatory,cairo,varsity,freshwater,providence,seemingly,shells,cuisine,specially,peaks,intensive,publishes,trilogy,skilled,nacional,unemployment,destinations,parameters,verses,trafficking,determination,infinite,savings,alignment,linguistic,countryside,dissolution,measurements,advantages,licence,subfamily,highlands,modest,regent,algeria,crest,teachings,knockout,brewery,combine,conventions,descended,chassis,primitive,fiji,explicitly,cumberland,uruguay,laboratories,bypass,elect,informal,preceded,holocaust,tackle,minneapolis,quantity,securities,console,doctoral,religions,commissioners,expertise,unveiled,precise,diplomat,standings,infant,disciplines,sicily,endorsed,systematic,charted,armored,mild,lateral,townships,hurling,prolific,invested,wartime,compatible,galleries,moist,battlefield,decoration,convent,tubes,terrestrial,nominee,requests,delegate,leased,dubai,polar,applying,addresses,munster,sings,commercials,teamed,dances,eleventh,midland,cedar,flee,sandstone,snails,inspection,divide,asset,themed,comparable,paramount,dairy,archaeology,intact,institutes,rectangular,instances,phases,reflecting,substantially,applies,vacant,lacked,copa,coloured,encounters,sponsors,encoded,possess,revenues,ucla,chaired,a.m.,enabling,playwright,stoke,sociology,tibetan,frames,motto,financing,illustrations,gibraltar,chateau,bolivia,transmitted,enclosed,persuaded,urged,folded,suffolk,regulated,bros.,submarines,myth,oriental,malaysian,effectiveness,narrowly,acute,sunk,replied,utilized,tasmania,consortium,quantities,gains,parkway,enlarged,sided,employers,adequate,accordingly,assumption,ballad,mascot,distances,peaking,saxony,projected,affiliation,limitations,metals,guatemala,scots,theaters,kindergarten,verb,employer,differs,discharge,controller,seasonal,marching,guru,campuses,avoided,vatican,maori,excessive,chartered,modifications,caves,monetary,sacramento,mixing,institutional,celebrities,irrigation,shapes,broadcaster,anthem,attributes,demolition,offshore,specification,surveys,yugoslav,contributor,auditorium,lebanese,capturing,airports,classrooms,chennai,paths,tendency,determining,lacking,upgrade,sailors,detected,kingdoms,sovereignty,freely,decorative,momentum,scholarly,georges,gandhi,speculation,transactions,undertook,interact,similarities,cove,teammate,constituted,painters,tends,madagascar,partnerships,afghan,personalities,attained,rebounds,masses,synagogue,reopened,asylum,embedded,imaging,catalogue,defenders,taxonomy,fiber,afterward,appealed,communists,lisbon,rica,judaism,adviser,batsman,ecological,commands,lgbt,cooling,accessed,wards,shiva,employs,thirds,scenic,worcester,tallest,contestant,humanities,economist,textile,constituencies,motorway,tram,percussion,cloth,leisure,1880s,baden,flags,resemble,riots,coined,sitcom,composite,implies,daytime,tanzania,penalties,optional,competitor,excluded,steering,reversed,autonomy,reviewer,breakthrough,professionally,damages,pomeranian,deputies,valleys,ventures,highlighted,electorate,mapping,shortened,executives,tertiary,specimen,launching,bibliography,sank,pursuing,binary,descendant,marched,natives,ideology,turks,adolf,archdiocese,tribunal,exceptional,nigerian,preference,fails,loading,comeback,vacuum,favored,alter,remnants,consecrated,spectators,trends,patriarch,feedback,paved,sentences,councillor,astronomy,advocates,broader,commentator,commissions,identifying,revealing,theatres,incomplete,enables,constituent,reformation,tract,haiti,atmospheric,screened,explosive,czechoslovakia,acids,symbolic,subdivision,liberals,incorporate,challenger,erie,filmmaker,laps,kazakhstan,organizational,evolutionary,chemicals,dedication,riverside,fauna,moths,maharashtra,annexed,gen.,resembles,underwater,garnered,timeline,remake,suited,educator,hectares,automotive,feared,latvia,finalist,narrator,portable,airways,plaque,designing,villagers,licensing,flank,statues,struggles,deutsche,migrated,cellular,jacksonville,wimbledon,defining,highlight,preparatory,planets,cologne,employ,frequencies,detachment,readily,libya,resign,halt,helicopters,reef,landmarks,collaborative,irregular,retaining,helsinki,folklore,weakened,viscount,interred,professors,memorable,mega,repertoire,rowing,dorsal,albeit,progressed,operative,coronation,liner,telugu,domains,philharmonic,detect,bengali,synthetic,tensions,atlas,dramatically,paralympics,xbox,shire,kiev,lengthy,sued,notorious,seas,screenwriter,transfers,aquatic,pioneers,unesco,radius,abundant,tunnels,syndicated,inventor,accreditation,janeiro,exeter,ceremonial,omaha,cadet,predators,resided,prose,slavic,precision,abbot,deity,engaging,cambodia,estonian,compliance,demonstrations,protesters,reactor,commodore,successes,chronicles,mare,extant,listings,minerals,tonnes,parody,cultivated,traders,pioneering,supplement,slovak,preparations,collision,partnered,vocational,atoms,malayalam,welcomed,documentation,curved,functioning,presently,formations,incorporates,nazis,botanical,nucleus,ethical,greeks,metric,automated,whereby,stance,europeans,duet,disability,purchasing,email,telescope,displaced,sodium,comparative,processor,inning,precipitation,aesthetic,import,coordination,feud,alternatively,mobility,tibet,regained,succeeding,hierarchy,apostolic,catalog,reproduction,inscriptions,vicar,clusters,posthumously,rican,loosely,additions,photographic,nowadays,selective,derivative,keyboards,guides,collectively,affecting,combines,operas,networking,decisive,terminated,continuity,finishes,ancestor,consul,heated,simulation,leipzig,incorporating,georgetown,formula_2,circa,forestry,portrayal,councillors,advancement,complained,forewings,confined,transaction,definitions,reduces,televised,1890s,rapids,phenomena,belarus,alps,landscapes,quarterly,specifications,commemorate,continuation,isolation,antenna,downstream,patents,ensuing,tended,saga,lifelong,columnist,labeled,gymnastics,papua,anticipated,demise,encompasses,madras,antarctica,interval,icon,rams,midlands,ingredients,priory,strengthen,rouge,explicit,gaza,aging,securing,anthropology,listeners,adaptations,underway,vista,malay,fortified,lightweight,violations,concerto,financed,jesuit,observers,trustee,descriptions,nordic,resistant,opted,accepts,prohibition,andhra,inflation,negro,wholly,imagery,spur,instructed,gloucester,cycles,middlesex,destroyers,statewide,evacuated,hyderabad,peasants,mice,shipyard,coordinate,pitching,colombian,exploring,numbering,compression,countess,hiatus,exceed,raced,archipelago,traits,soils,o'connor,vowel,android,facto,angola,amino,holders,logistics,circuits,emergence,kuwait,partition,emeritus,outcomes,submission,promotes,barack,negotiated,loaned,stripped,50th,excavations,treatments,fierce,participant,exports,decommissioned,cameo,remarked,residences,fuselage,mound,undergo,quarry,node,midwest,specializing,occupies,etc.,showcase,molecule,offs,modules,salon,exposition,revision,peers,positioned,hunters,competes,algorithms,reside,zagreb,calcium,uranium,silicon,airs,counterpart,outlet,collectors,sufficiently,canberra,inmates,anatomy,ensuring,curves,aviv,firearms,basque,volcano,thrust,sheikh,extensions,installations,aluminum,darker,sacked,emphasized,aligned,asserted,pseudonym,spanning,decorations,eighteenth,orbital,spatial,subdivided,notation,decay,macedonian,amended,declining,cyclist,feat,unusually,commuter,birthplace,latitude,activation,overhead,30th,finalists,whites,encyclopedia,tenor,qatar,survives,complement,concentrations,uncommon,astronomical,bangalore,pius,genome,memoir,recruit,prosecutor,modification,paired,container,basilica,arlington,displacement,germanic,mongolia,proportional,debates,matched,calcutta,rows,tehran,aerospace,prevalent,arise,lowland,24th,spokesman,supervised,advertisements,clash,tunes,revelation,wanderers,quarterfinals,fisheries,steadily,memoirs,pastoral,renewable,confluence,acquiring,strips,slogan,upstream,scouting,analyst,practitioners,turbine,strengthened,heavier,prehistoric,plural,excluding,isles,persecution,turin,rotating,villain,hemisphere,unaware,arabs,corpus,relied,singular,unanimous,schooling,passive,angles,dominance,instituted,aria,outskirts,balanced,beginnings,financially,structured,parachute,viewer,attitudes,subjected,escapes,derbyshire,erosion,addressing,styled,declaring,originating,colts,adjusted,stained,occurrence,fortifications,baghdad,nitrogen,localities,yemen,galway,debris,lodz,victorious,pharmaceutical,substances,unnamed,dwelling,atop,developmental,activism,voter,refugee,forested,relates,overlooking,genocide,kannada,insufficient,oversaw,partisan,dioxide,recipients,factions,mortality,capped,expeditions,receptors,reorganized,prominently,atom,flooded,flute,orchestral,scripts,mathematician,airplay,detached,rebuilding,dwarf,brotherhood,salvation,expressions,arabian,cameroon,poetic,recruiting,bundesliga,inserted,scrapped,disabilities,evacuation,pasha,undefeated,crafts,rituals,aluminium,norm,pools,submerged,occupying,pathway,exams,prosperity,wrestlers,promotions,basal,permits,nationalism,trim,merge,gazette,tributaries,transcription,caste,porto,emerge,modeled,adjoining,counterparts,paraguay,redevelopment,renewal,unreleased,equilibrium,similarity,minorities,soviets,comprise,nodes,tasked,unrelated,expired,johan,precursor,examinations,electrons,socialism,exiled,admiralty,floods,wigan,nonprofit,lacks,brigades,screens,repaired,hanover,fascist,labs,osaka,delays,judged,statutory,colt,col.,offspring,solving,bred,assisting,retains,somalia,grouped,corresponds,tunisia,chaplain,eminent,chord,22nd,spans,viral,innovations,possessions,mikhail,kolkata,icelandic,implications,introduces,racism,workforce,alto,compulsory,admits,censorship,onset,reluctant,inferior,iconic,progression,liability,turnout,satellites,behavioral,coordinated,exploitation,posterior,averaging,fringe,krakow,mountainous,greenwich,para,plantations,reinforcements,offerings,famed,intervals,constraints,individually,nutrition,1870s,taxation,threshold,tomatoes,fungi,contractor,ethiopian,apprentice,diabetes,wool,gujarat,honduras,norse,bucharest,23rd,arguably,accompany,prone,teammates,perennial,vacancy,polytechnic,deficit,okinawa,functionality,reminiscent,tolerance,transferring,myanmar,concludes,neighbours,hydraulic,economically,slower,plots,charities,synod,investor,catholicism,identifies,bronx,interpretations,adverse,judiciary,hereditary,nominal,sensor,symmetry,cubic,triangular,tenants,divisional,outreach,representations,passages,undergoing,cartridge,testified,exceeded,impacts,limiting,railroads,defeats,regain,rendering,humid,retreated,reliability,governorate,antwerp,infamous,implied,packaging,lahore,trades,billed,extinction,ecole,rejoined,recognizes,projection,qualifications,stripes,forts,socially,lexington,accurately,sexuality,westward,wikipedia,pilgrimage,abolition,choral,stuttgart,nests,expressing,strikeouts,assessed,monasteries,reconstructed,humorous,marxist,fertile,consort,urdu,patronage,peruvian,devised,lyric,baba,nassau,communism,extraction,popularly,markings,inability,litigation,accounted,processed,emirates,tempo,cadets,eponymous,contests,broadly,oxide,courtyard,frigate,directory,apex,outline,regency,chiefly,patrols,secretariat,cliffs,residency,privy,armament,australians,dorset,geometric,genetics,scholarships,fundraising,flats,demographic,multimedia,captained,documentaries,updates,canvas,blockade,guerrilla,songwriting,administrators,intake,drought,implementing,fraction,cannes,refusal,inscribed,meditation,announcing,exported,ballots,formula_3,curator,basel,arches,flour,subordinate,confrontation,gravel,simplified,berkshire,patriotic,tuition,employing,servers,castile,posting,combinations,discharged,miniature,mutations,constellation,incarnation,ideals,necessity,granting,ancestral,crowds,pioneered,mormon,methodology,rama,indirect,complexes,bavarian,patrons,uttar,skeleton,bollywood,flemish,viable,bloc,breeds,triggered,sustainability,tailed,referenced,comply,takeover,latvian,homestead,platoon,communal,nationality,excavated,targeting,sundays,posed,physicist,turret,endowment,marginal,dispatched,commentators,renovations,attachment,collaborations,ridges,barriers,obligations,shareholders,prof.,defenses,presided,rite,backgrounds,arbitrary,affordable,gloucestershire,thirteenth,inlet,miniseries,possesses,detained,pressures,subscription,realism,solidarity,proto,postgraduate,noun,burmese,abundance,homage,reasoning,anterior,robust,fencing,shifting,vowels,garde,profitable,loch,anchored,coastline,samoa,terminology,prostitution,magistrate,venezuelan,speculated,regulate,fixture,colonists,digit,induction,manned,expeditionary,computational,centennial,principally,vein,preserving,engineered,numerical,cancellation,conferred,continually,borne,seeded,advertisement,unanimously,treaties,infections,ions,sensors,lowered,amphibious,lava,fourteenth,bahrain,niagara,nicaragua,squares,congregations,26th,periodic,proprietary,1860s,contributors,seller,overs,emission,procession,presumed,illustrator,zinc,gases,tens,applicable,stretches,reproductive,sixteenth,apparatus,accomplishments,canoe,guam,oppose,recruitment,accumulated,limerick,namibia,staging,remixes,ordnance,uncertainty,pedestrian,temperate,treason,deposited,registry,cerambycidae,attracting,lankan,reprinted,shipbuilding,homosexuality,neurons,eliminating,1900s,resume,ministries,beneficial,blackpool,surplus,northampton,licenses,constructing,announcer,standardized,alternatives,taipei,inadequate,failures,yields,medalist,titular,obsolete,torah,burlington,predecessors,lublin,retailers,castles,depiction,issuing,gubernatorial,propulsion,tiles,damascus,discs,alternating,pomerania,peasant,tavern,redesignated,27th,illustration,focal,mans,codex,specialists,productivity,antiquity,controversies,promoter,pits,companions,behaviors,lyrical,prestige,creativity,swansea,dramas,approximate,feudal,tissues,crude,campaigned,unprecedented,chancel,amendments,surroundings,allegiance,exchanges,align,firmly,optimal,commenting,reigning,landings,obscure,1850s,contemporaries,paternal,devi,endurance,communes,incorporation,denominations,exchanged,routing,resorts,amnesty,slender,explores,suppression,heats,pronunciation,centred,coupe,stirling,freelance,treatise,linguistics,laos,informs,discovering,pillars,encourages,halted,robots,definitive,maturity,tuberculosis,venetian,silesian,unchanged,originates,mali,lincolnshire,quotes,seniors,premise,contingent,distribute,danube,gorge,logging,dams,curling,seventeenth,specializes,wetlands,deities,assess,thickness,rigid,culminated,utilities,substrate,insignia,nile,assam,shri,currents,suffrage,canadians,mortar,asteroid,bosnian,discoveries,enzymes,sanctioned,replica,hymn,investigators,tidal,dominate,derivatives,converting,leinster,verbs,honoured,criticisms,dismissal,discrete,masculine,reorganization,unlimited,wurttemberg,sacks,allocation,bahn,jurisdictions,participates,lagoon,famine,communion,culminating,surveyed,shortage,cables,intersects,cassette,foremost,adopting,solicitor,outright,bihar,reissued,farmland,dissertation,turnpike,baton,photographed,christchurch,kyoto,finances,rails,histories,linebacker,kilkenny,accelerated,dispersed,handicap,absorption,rancho,ceramic,captivity,cites,font,weighed,mater,utilize,bravery,extract,validity,slovenian,seminars,discourse,ranged,duel,ironically,warships,sega,temporal,surpassed,prolonged,recruits,northumberland,greenland,contributes,patented,eligibility,unification,discusses,reply,translates,beirut,relies,torque,northward,reviewers,monastic,accession,neural,tramway,heirs,sikh,subscribers,amenities,taliban,audit,rotterdam,wagons,kurdish,favoured,combustion,meanings,persia,browser,diagnostic,niger,formula_4,denomination,dividing,parameter,branding,badminton,leningrad,sparked,hurricanes,beetles,propeller,mozambique,refined,diagram,exhaust,vacated,readings,markers,reconciliation,determines,concurrent,imprint,primera,organism,demonstrating,filmmakers,vanderbilt,affiliates,traction,evaluated,defendants,megachile,investigative,zambia,assassinated,rewarded,probable,staffordshire,foreigners,directorate,nominees,consolidation,commandant,reddish,differing,unrest,drilling,bohemia,resembling,instrumentation,considerations,haute,promptly,variously,dwellings,clans,tablet,enforced,cockpit,semifinal,hussein,prisons,ceylon,emblem,monumental,phrases,correspond,crossover,outlined,characterised,acceleration,caucus,crusade,protested,composing,rajasthan,habsburg,rhythmic,interception,inherent,cooled,ponds,spokesperson,gradual,consultation,kuala,globally,suppressed,builders,avengers,suffix,integer,enforce,fibers,unionist,proclamation,uncovered,infrared,adapt,eisenhower,utilizing,captains,stretched,observing,assumes,prevents,analyses,saxophone,caucasus,notices,villains,dartmouth,mongol,hostilities,stretching,veterinary,lenses,texture,prompting,overthrow,excavation,islanders,masovian,battleship,biographer,replay,degradation,departing,luftwaffe,fleeing,oversight,immigrated,serbs,fishermen,strengthening,respiratory,italians,denotes,radial,escorted,motif,wiltshire,expresses,accessories,reverted,establishments,inequality,protocols,charting,famously,satirical,entirety,trench,friction,atletico,sampling,subset,weekday,upheld,sharply,correlation,incorrect,mughal,travelers,hasan,earnings,offset,evaluate,specialised,recognizing,flexibility,nagar,postseason,algebraic,capitalism,crystals,melodies,polynomial,racecourse,defences,austro,wembley,attracts,anarchist,resurrection,reviewing,decreasing,prefix,ratified,mutation,displaying,separating,restoring,assemblies,ordinance,priesthood,cruisers,appoint,moldova,imports,directive,epidemic,militant,senegal,signaling,restriction,critique,retrospective,nationalists,undertake,sioux,canals,algerian,redesigned,philanthropist,depict,conceptual,turbines,intellectuals,eastward,applicants,contractors,vendors,undergone,namesake,ensured,tones,substituted,hindwings,arrests,tombs,transitional,principality,reelection,taiwanese,cavity,manifesto,broadcasters,spawned,thoroughbred,identities,generators,proposes,hydroelectric,johannesburg,cortex,scandinavian,killings,aggression,boycott,catalyst,physiology,fifteenth,waterfront,chromosome,organist,costly,calculation,cemeteries,flourished,recognise,juniors,merging,disciples,ashore,workplace,enlightenment,diminished,debated,hailed,podium,educate,mandated,distributor,litre,electromagnetic,flotilla,estuary,peterborough,staircase,selections,melodic,confronts,wholesale,integrate,intercepted,catalonia,unite,immense,palatinate,switches,earthquakes,occupational,successors,praising,concluding,faculties,firstly,overhaul,empirical,metacritic,inauguration,evergreen,laden,winged,philosophers,amalgamated,geoff,centimeters,napoleonic,upright,planting,brewing,fined,sensory,migrants,wherein,inactive,headmaster,warwickshire,siberia,terminals,denounced,academia,divinity,bilateral,clive,omitted,peerage,relics,apartheid,syndicate,fearing,fixtures,desirable,dismantled,ethnicity,valves,biodiversity,aquarium,ideological,visibility,creators,analyzed,tenant,balkan,postwar,supplier,smithsonian,risen,morphology,digits,bohemian,wilmington,vishnu,demonstrates,aforementioned,biographical,mapped,khorasan,phosphate,presentations,ecosystem,processors,calculations,mosaic,clashes,penned,recalls,coding,angular,lattice,macau,accountability,extracted,pollen,therapeutic,overlap,violinist,deposed,candidacy,infants,covenant,bacterial,restructuring,dungeons,ordination,conducts,builds,invasive,customary,concurrently,relocation,cello,statutes,borneo,entrepreneurs,sanctions,packet,rockefeller,piedmont,comparisons,waterfall,receptions,glacial,surge,signatures,alterations,advertised,enduring,somali,botanist,100th,canonical,motifs,longitude,circulated,alloy,indirectly,margins,preserves,internally,besieged,shale,peripheral,drained,baseman,reassigned,tobago,soloist,socio,grazing,contexts,roofs,portraying,ottomans,shrewsbury,noteworthy,lamps,supplying,beams,qualifier,portray,greenhouse,stronghold,hitter,rites,cretaceous,urging,derive,nautical,aiming,fortunes,verde,donors,reliance,exceeding,exclusion,exercised,simultaneous,continents,guiding,pillar,gradient,poznan,eruption,clinics,moroccan,indicator,trams,piers,parallels,fragment,teatro,potassium,satire,compressed,businessmen,influx,seine,perspectives,shelters,decreases,mounting,formula_5,confederacy,equestrian,expulsion,mayors,liberia,resisted,affinity,shrub,unexpectedly,stimulus,amtrak,deported,perpendicular,statesman,wharf,storylines,romanesque,weights,surfaced,interceptions,dhaka,crambidae,orchestras,rwanda,conclude,constitutes,subsidiaries,admissions,prospective,shear,bilingual,campaigning,presiding,domination,commemorative,trailing,confiscated,petrol,acquisitions,polymer,onlyinclude,chloride,elevations,resolutions,hurdles,pledged,likelihood,objected,erect,encoding,databases,aristotle,hindus,marshes,bowled,ministerial,grange,acronym,annexation,squads,ambient,pilgrims,botany,sofla,astronomer,planetary,descending,bestowed,ceramics,diplomacy,metabolism,colonization,potomac,africans,engraved,recycling,commitments,resonance,disciplinary,jamaican,narrated,spectral,tipperary,waterford,stationary,arbitration,transparency,threatens,crossroads,slalom,oversee,centenary,incidence,economies,livery,moisture,newsletter,autobiographical,bhutan,propelled,dependence,moderately,adobe,barrels,subdivisions,outlook,labelled,stratford,arising,diaspora,barony,automobiles,ornamental,slated,norms,primetime,generalized,analysts,vectors,libyan,yielded,certificates,rooted,vernacular,belarusian,marketplace,prediction,fairfax,malawi,viruses,wooded,demos,mauritius,prosperous,coincided,liberties,huddersfield,ascent,warnings,hinduism,glucose,pulitzer,unused,filters,illegitimate,acquitted,protestants,canopy,staple,psychedelic,winding,abbas,pathways,cheltenham,lagos,niche,invaders,proponents,barred,conversely,doncaster,recession,embraced,rematch,concession,emigration,upgrades,bowls,tablets,remixed,loops,kensington,shootout,monarchs,organizers,harmful,punjabi,broadband,exempt,neolithic,profiles,portrays,parma,cyrillic,quasi,attested,regimental,revive,torpedoes,heidelberg,rhythms,spherical,denote,hymns,icons,theologian,qaeda,exceptionally,reinstated,comune,playhouse,lobbying,grossing,viceroy,delivers,visually,armistice,utrecht,syllable,vertices,analogous,annex,refurbished,entrants,knighted,disciple,rhetoric,detailing,inactivated,ballads,algae,intensified,favourable,sanitation,receivers,pornography,commemorated,cannons,entrusted,manifold,photographers,pueblo,textiles,steamer,myths,marquess,onward,liturgical,romney,uzbekistan,consistency,denoted,hertfordshire,convex,hearings,sulfur,universidad,podcast,selecting,emperors,arises,justices,1840s,mongolian,exploited,termination,digitally,infectious,sedan,symmetric,penal,illustrate,formulation,attribute,problematic,modular,inverse,berth,searches,rutgers,leicestershire,enthusiasts,lockheed,upwards,transverse,accolades,backward,archaeologists,crusaders,nuremberg,defects,ferries,vogue,containers,openings,transporting,separates,lumpur,purchases,attain,wichita,topology,woodlands,deleted,periodically,syntax,overturned,musicals,corp.,strasbourg,instability,nationale,prevailing,cache,marathi,versailles,unmarried,grains,straits,antagonist,segregation,assistants,d'etat,contention,dictatorship,unpopular,motorcycles,criterion,analytical,salzburg,militants,hanged,worcestershire,emphasize,paralympic,erupted,convinces,offences,oxidation,nouns,populace,atari,spanned,hazardous,educators,playable,births,baha'i,preseason,generates,invites,meteorological,handbook,foothills,enclosure,diffusion,mirza,convergence,geelong,coefficient,connector,formula_6,cylindrical,disasters,pleaded,knoxville,contamination,compose,libertarian,arrondissement,franciscan,intercontinental,susceptible,initiation,malaria,unbeaten,consonants,waived,saloon,popularized,estadio,pseudo,interdisciplinary,transports,transformers,carriages,bombings,revolves,ceded,collaborator,celestial,exemption,colchester,maltese,oceanic,ligue,crete,shareholder,routed,depictions,ridden,advisors,calculate,lending,guangzhou,simplicity,newscast,scheduling,snout,eliot,undertaking,armenians,nottinghamshire,whitish,consulted,deficiency,salle,cinemas,superseded,rigorous,kerman,convened,landowners,modernization,evenings,pitches,conditional,scandinavia,differed,formulated,cyclists,swami,guyana,dunes,electrified,appalachian,abdomen,scenarios,prototypes,sindh,consonant,adaptive,boroughs,wolverhampton,modelling,cylinders,amounted,minimize,ambassadors,lenin,settler,coincide,approximation,grouping,murals,bullying,registers,rumours,engagements,energetic,vertex,annals,bordering,geologic,yellowish,runoff,converts,allegheny,facilitated,saturdays,colliery,monitored,rainforest,interfaces,geographically,impaired,prevalence,joachim,paperback,slowed,shankar,distinguishing,seminal,categorized,authorised,auspices,bandwidth,asserts,rebranded,balkans,supplemented,seldom,weaving,capsule,apostles,populous,monmouth,payload,symphonic,densely,shoreline,managerial,masonry,antioch,averages,textbooks,royalist,coliseum,tandem,brewers,diocesan,posthumous,walled,incorrectly,distributions,ensued,reasonably,graffiti,propagation,automation,harmonic,augmented,middleweight,limbs,elongated,landfall,comparatively,literal,grossed,koppen,wavelength,1830s,cerebral,boasts,congestion,physiological,practitioner,coasts,cartoonist,undisclosed,frontal,launches,burgundy,qualifiers,imposing,stade,flanked,assyrian,raided,multiplayer,montane,chesapeake,pathology,drains,vineyards,intercollegiate,semiconductor,grassland,convey,citations,predominant,rejects,benefited,yahoo,graphs,busiest,encompassing,hamlets,explorers,suppress,minors,graphical,calculus,sediment,intends,diverted,mainline,unopposed,cottages,initiate,alumnus,towed,autism,forums,darlington,modernist,oxfordshire,lectured,capitalist,suppliers,panchayat,actresses,foundry,southbound,commodity,wesleyan,divides,palestinians,luton,caretaker,nobleman,mutiny,organizer,preferences,nomenclature,splits,unwilling,offenders,timor,relying,halftime,semitic,arithmetic,milestone,jesuits,arctiidae,retrieved,consuming,contender,edged,plagued,inclusive,transforming,khmer,federally,insurgents,distributing,amherst,rendition,prosecutors,viaduct,disqualified,kabul,liturgy,prevailed,reelected,instructors,swimmers,aperture,churchyard,interventions,totals,darts,metropolis,fuels,fluent,northbound,correctional,inflicted,barrister,realms,culturally,aristocratic,collaborating,emphasizes,choreographer,inputs,ensembles,humboldt,practised,endowed,strains,infringement,archaeologist,congregational,magna,relativity,efficiently,proliferation,mixtape,abruptly,regeneration,commissioning,yukon,archaic,reluctantly,retailer,northamptonshire,universally,crossings,boilers,nickelodeon,revue,abbreviation,retaliation,scripture,routinely,medicinal,benedictine,kenyan,retention,deteriorated,glaciers,apprenticeship,coupling,researched,topography,entrances,anaheim,pivotal,compensate,arched,modify,reinforce,dusseldorf,journeys,motorsport,conceded,sumatra,spaniards,quantitative,loire,cinematography,discarded,botswana,morale,engined,zionist,philanthropy,sainte,fatalities,cypriot,motorsports,indicators,pricing,institut,bethlehem,implicated,gravitational,differentiation,rotor,thriving,precedent,ambiguous,concessions,forecast,conserved,fremantle,asphalt,landslide,middlesbrough,formula_7,humidity,overseeing,chronological,diaries,multinational,crimean,turnover,improvised,youths,declares,tasmanian,canadiens,fumble,refinery,weekdays,unconstitutional,upward,guardians,brownish,imminent,hamas,endorsement,naturalist,martyrs,caledonia,chords,yeshiva,reptiles,severity,mitsubishi,fairs,installment,substitution,repertory,keyboardist,interpreter,silesia,noticeable,rhineland,transmit,inconsistent,booklet,academies,epithet,pertaining,progressively,aquatics,scrutiny,prefect,toxicity,rugged,consume,o'donnell,evolve,uniquely,cabaret,mediated,landowner,transgender,palazzo,compilations,albuquerque,induce,sinai,remastered,efficacy,underside,analogue,specify,possessing,advocating,compatibility,liberated,greenville,mecklenburg,header,memorials,sewage,rhodesia,1800s,salaries,atoll,coordinating,partisans,repealed,amidst,subjective,optimization,nectar,evolving,exploits,madhya,styling,accumulation,raion,postage,responds,buccaneers,frontman,brunei,choreography,coated,kinetic,sampled,inflammatory,complementary,eclectic,norte,vijay,a.k.a,mainz,casualty,connectivity,laureate,franchises,yiddish,reputed,unpublished,economical,periodicals,vertically,bicycles,brethren,capacities,unitary,archeological,tehsil,domesday,wehrmacht,justification,angered,mysore,fielded,abuses,nutrients,ambitions,taluk,battleships,symbolism,superiority,neglect,attendees,commentaries,collaborators,predictions,yorker,breeders,investing,libretto,informally,coefficients,memorandum,pounder,collingwood,tightly,envisioned,arbor,mistakenly,captures,nesting,conflicting,enhancing,streetcar,manufactures,buckinghamshire,rewards,commemorating,stony,expenditure,tornadoes,semantic,relocate,weimar,iberian,sighted,intending,ensign,beverages,expectation,differentiate,centro,utilizes,saxophonist,catchment,transylvania,ecosystems,shortest,sediments,socialists,ineffective,kapoor,formidable,heroine,guantanamo,prepares,scattering,pamphlet,verified,elector,barons,totaling,shrubs,pyrenees,amalgamation,mutually,longitudinal,comte,negatively,masonic,envoy,sexes,akbar,mythical,tonga,bishopric,assessments,malaya,warns,interiors,reefs,reflections,neutrality,musically,nomadic,waterways,provence,collaborate,scaled,adulthood,emerges,euros,optics,incentives,overland,periodical,liege,awarding,realization,slang,affirmed,schooner,hokkaido,czechoslovak,protectorate,undrafted,disagreed,commencement,electors,spruce,swindon,fueled,equatorial,inventions,suites,slovene,backdrop,adjunct,energies,remnant,inhabit,alliances,simulcast,reactors,mosques,travellers,outfielder,plumage,migratory,benin,experimented,fibre,projecting,drafting,laude,evidenced,northernmost,indicted,directional,replication,croydon,comedies,jailed,organizes,devotees,reservoirs,turrets,originate,economists,songwriters,junta,trenches,mounds,proportions,comedic,apostle,azerbaijani,farmhouse,resembled,disrupted,playback,mixes,diagonal,relevance,govern,programmer,gdansk,maize,soundtracks,tendencies,mastered,impacted,believers,kilometre,intervene,chairperson,aerodrome,sails,subsidies,ensures,aesthetics,congresses,ratios,sardinia,southernmost,functioned,controllers,downward,randomly,distortion,regents,palatine,disruption,spirituality,vidhan,tracts,compiler,ventilation,anchorage,symposium,assert,pistols,excelled,avenues,convoys,moniker,constructions,proponent,phased,spines,organising,schleswig,policing,campeonato,mined,hourly,croix,lucrative,authenticity,haitian,stimulation,burkina,espionage,midfield,manually,staffed,awakening,metabolic,biographies,entrepreneurship,conspicuous,guangdong,preface,subgroup,mythological,adjutant,feminism,vilnius,oversees,honourable,tripoli,stylized,kinase,societe,notoriety,altitudes,configurations,outward,transmissions,announces,auditor,ethanol,clube,nanjing,mecca,haifa,blogs,postmaster,paramilitary,depart,positioning,potent,recognizable,spire,brackets,remembrance,overlapping,turkic,articulated,scientology,operatic,deploy,readiness,biotechnology,restrict,cinematographer,inverted,synonymous,administratively,westphalia,commodities,replaces,downloads,centralized,munitions,preached,sichuan,fashionable,implementations,matrices,hiv/aids,loyalist,luzon,celebrates,hazards,heiress,mercenaries,synonym,creole,ljubljana,technician,auditioned,technicians,viewpoint,wetland,mongols,princely,sharif,coating,dynasties,southward,doubling,formula_8,mayoral,harvesting,conjecture,goaltender,oceania,spokane,welterweight,bracket,gatherings,weighted,newscasts,mussolini,affiliations,disadvantage,vibrant,spheres,sultanate,distributors,disliked,establishes,marches,drastically,yielding,jewellery,yokohama,vascular,airlift,canons,subcommittee,repression,strengths,graded,outspoken,fused,pembroke,filmography,redundant,fatigue,repeal,threads,reissue,pennant,edible,vapor,corrections,stimuli,commemoration,dictator,anand,secession,amassed,orchards,pontifical,experimentation,greeted,bangor,forwards,decomposition,quran,trolley,chesterfield,traverse,sermons,burials,skier,climbs,consultants,petitioned,reproduce,parted,illuminated,kurdistan,reigned,occupants,packaged,geometridae,woven,regulating,protagonists,crafted,affluent,clergyman,consoles,migrant,supremacy,attackers,caliph,defect,convection,rallies,huron,resin,segunda,quota,warship,overseen,criticizing,shrines,glamorgan,lowering,beaux,hampered,invasions,conductors,collects,bluegrass,surrounds,substrates,perpetual,chronology,pulmonary,executions,crimea,compiling,noctuidae,battled,tumors,minsk,novgorod,serviced,yeast,computation,swamps,theodor,baronetcy,salford,uruguayan,shortages,odisha,siberian,novelty,cinematic,invitational,decks,dowager,oppression,bandits,appellate,state-of-the-art,clade,palaces,signalling,galaxies,industrialist,tensor,learnt,incurred,magistrates,binds,orbits,ciudad,willingness,peninsular,basins,biomedical,shafts,marlborough,bournemouth,withstand,fitzroy,dunedin,variance,steamship,integrating,muscular,fines,akron,bulbophyllum,malmo,disclosed,cornerstone,runways,medicines,twenty20,gettysburg,progresses,frigates,bodied,transformations,transforms,helens,modelled,versatile,regulator,pursuits,legitimacy,amplifier,scriptures,voyages,examines,presenters,octagonal,poultry,formula_9,anatolia,computed,migrate,directorial,hybrids,localized,preferring,guggenheim,persisted,grassroots,inflammation,fishery,otago,vigorous,professions,instructional,inexpensive,insurgency,legislators,sequels,surnames,agrarian,stainless,nairobi,minas,forerunner,aristocracy,transitions,sicilian,showcased,doses,hiroshima,summarized,gearbox,emancipation,limitation,nuclei,seismic,abandonment,dominating,appropriations,occupations,electrification,hilly,contracting,exaggerated,entertainer,kazan,oricon,cartridges,characterization,parcel,maharaja,exceeds,aspiring,obituary,flattened,contrasted,narration,replies,oblique,outpost,fronts,arranger,talmud,keynes,doctrines,endured,confesses,fortification,supervisors,kilometer,academie,jammu,bathurst,piracy,prostitutes,navarre,cumulative,cruises,lifeboat,twinned,radicals,interacting,expenditures,wexford,libre,futsal,curated,clockwise,colloquially,procurement,immaculate,lyricist,enhancement,porcelain,alzheimer,highlighting,judah,disagreements,storytelling,sheltered,wroclaw,vaudeville,contrasts,neoclassical,compares,contrasting,deciduous,francaise,descriptive,cyclic,reactive,antiquities,meiji,repeats,creditors,forcibly,newmarket,picturesque,impending,uneven,bison,raceway,solvent,ecumenical,optic,professorship,harvested,waterway,banjo,pharaoh,geologist,scanning,dissent,recycled,unmanned,retreating,gospels,aqueduct,branched,tallinn,groundbreaking,syllables,hangar,designations,procedural,craters,cabins,encryption,anthropologist,montevideo,outgoing,inverness,chattanooga,fascism,calais,chapels,groundwater,downfall,misleading,robotic,tortricidae,pixel,handel,prohibit,crewe,renaming,reprised,kickoff,leftist,spaced,integers,causeway,pines,authorship,organise,ptolemy,accessibility,virtues,lesions,iroquois,qur'an,atheist,synthesized,biennial,confederates,dietary,skaters,stresses,tariff,koreans,intercity,republics,quintet,baroness,naive,amplitude,insistence,tbilisi,residues,grammatical,diversified,egyptians,accompaniment,vibration,repository,mandal,topological,distinctions,coherent,invariant,batters,nuevo,internationals,implements,follower,bahia,widened,independents,cantonese,totaled,guadalajara,wolverines,befriended,muzzle,surveying,hungarians,medici,deportation,rayon,approx,recounts,attends,clerical,hellenic,furnished,alleging,soluble,systemic,gallantry,bolshevik,intervened,hostel,gunpowder,specialising,stimulate,leiden,removes,thematic,floral,bafta,printers,conglomerate,eroded,analytic,successively,lehigh,thessaloniki,kilda,clauses,ascended,nehru,scripted,tokugawa,competence,diplomats,exclude,consecration,freedoms,assaults,revisions,blacksmith,textual,sparse,concacaf,slain,uploaded,enraged,whaling,guise,stadiums,debuting,dormitory,cardiovascular,yunnan,dioceses,consultancy,notions,lordship,archdeacon,collided,medial,airfields,garment,wrestled,adriatic,reversal,refueling,verification,jakob,horseshoe,intricate,veracruz,sarawak,syndication,synthesizer,anthologies,stature,feasibility,guillaume,narratives,publicized,antrim,intermittent,constituents,grimsby,filmmaking,doping,unlawful,nominally,transmitting,documenting,seater,internationale,ejected,steamboat,alsace,boise,ineligible,geared,vassal,mustered,ville,inline,pairing,eurasian,kyrgyzstan,barnsley,reprise,stereotypes,rushes,conform,firefighters,deportivo,revolutionaries,rabbis,concurrency,charters,sustaining,aspirations,algiers,chichester,falkland,morphological,systematically,volcanoes,designate,artworks,reclaimed,jurist,anglia,resurrected,chaotic,feasible,circulating,simulated,environmentally,confinement,adventist,harrisburg,laborers,ostensibly,universiade,pensions,influenza,bratislava,octave,refurbishment,gothenburg,putin,barangay,annapolis,breaststroke,illustrates,distorted,choreographed,promo,emphasizing,stakeholders,descends,exhibiting,intrinsic,invertebrates,evenly,roundabout,salts,formula_10,strata,inhibition,branching,stylistic,rumored,realises,mitochondrial,commuted,adherents,logos,bloomberg,telenovela,guineas,charcoal,engages,winery,reflective,siena,cambridgeshire,ventral,flashback,installing,engraving,grasses,traveller,rotated,proprietor,nationalities,precedence,sourced,trainers,cambodian,reductions,depleted,saharan,classifications,biochemistry,plaintiffs,arboretum,humanist,fictitious,aleppo,climates,bazaar,his/her,homogeneous,multiplication,moines,indexed,linguist,skeletal,foliage,societal,differentiated,informing,mammal,infancy,archival,cafes,malls,graeme,musee,schizophrenia,fargo,pronouns,derivation,descend,ascending,terminating,deviation,recaptured,confessions,weakening,tajikistan,bahadur,pasture,b/hip,donegal,supervising,sikhs,thinkers,euclidean,reinforcement,friars,portage,fuscous,lucknow,synchronized,assertion,choirs,privatization,corrosion,multitude,skyscraper,royalties,ligament,usable,spores,directs,clashed,stockport,fronted,dependency,contiguous,biologist,backstroke,powerhouse,frescoes,phylogenetic,welding,kildare,gabon,conveyed,augsburg,severn,continuum,sahib,lille,injuring,passeriformesfamily,succeeds,translating,unitarian,startup,turbulent,outlying,philanthropic,stanislaw,idols,claremont,conical,haryana,armagh,blended,implicit,conditioned,modulation,rochdale,labourers,coinage,shortstop,potsdam,gears,obesity,bestseller,advisers,bouts,comedians,jozef,lausanne,taxonomic,correlated,columbian,marne,indications,psychologists,libel,edict,beaufort,disadvantages,renal,finalized,racehorse,unconventional,disturbances,falsely,zoology,adorned,redesign,executing,narrower,commended,appliances,stalls,resurgence,saskatoon,miscellaneous,permitting,epoch,formula_11,cumbria,forefront,vedic,eastenders,disposed,supermarkets,rower,inhibitor,magnesium,colourful,yusuf,harrow,formulas,centrally,balancing,ionic,nocturnal,consolidate,ornate,raiding,charismatic,accelerate,nominate,residual,dhabi,commemorates,attribution,uninhabited,mindanao,atrocities,genealogical,romani,applicant,enactment,abstraction,trough,pulpit,minuscule,misconduct,grenades,timely,supplements,messaging,curvature,ceasefire,telangana,susquehanna,braking,redistribution,shreveport,neighbourhoods,gregorian,widowed,khuzestan,empowerment,scholastic,evangelist,peptide,topical,theorist,historia,thence,sudanese,museo,jurisprudence,masurian,frankish,headlined,recounted,netball,petitions,tolerant,hectare,truncated,southend,methane,captives,reigns,massif,subunit,acidic,weightlifting,footballers,sabah,britannia,tunisian,segregated,sawmill,withdrawing,unpaid,weaponry,somme,perceptions,unicode,alcoholism,durban,wrought,waterfalls,jihad,auschwitz,upland,eastbound,adjective,anhalt,evaluating,regimes,guildford,reproduced,pamphlets,hierarchical,maneuvers,hanoi,fabricated,repetition,enriched,arterial,replacements,tides,globalization,adequately,westbound,satisfactory,fleets,phosphorus,lastly,neuroscience,anchors,xinjiang,membranes,improvisation,shipments,orthodoxy,submissions,bolivian,mahmud,ramps,leyte,pastures,outlines,flees,transmitters,fares,sequential,stimulated,novice,alternately,symmetrical,breakaway,layered,baronets,lizards,blackish,edouard,horsepower,penang,principals,mercantile,maldives,overwhelmingly,hawke,rallied,prostate,conscription,juveniles,maccabi,carvings,strikers,sudbury,spurred,improves,lombardy,macquarie,parisian,elastic,distillery,shetland,humane,brentford,wrexham,warehouses,routines,encompassed,introductory,isfahan,instituto,palais,revolutions,sporadic,impoverished,portico,fellowships,speculative,enroll,dormant,adhere,fundamentally,sculpted,meritorious,template,upgrading,reformer,rectory,uncredited,indicative,creeks,galveston,radically,hezbollah,firearm,educating,prohibits,trondheim,locus,refit,headwaters,screenings,lowlands,wasps,coarse,attaining,sedimentary,perished,pitchfork,interned,cerro,stagecoach,aeronautical,liter,transitioned,haydn,inaccurate,legislatures,bromwich,knesset,spectroscopy,butte,asiatic,degraded,concordia,catastrophic,lobes,wellness,pensacola,periphery,hapoel,theta,horizontally,freiburg,liberalism,pleas,durable,warmian,offenses,mesopotamia,shandong,unsuitable,hospitalized,appropriately,phonetic,encompass,conversions,observes,illnesses,breakout,assigns,crowns,inhibitors,nightly,manifestation,fountains,maximize,alphabetical,sloop,expands,newtown,widening,gaddafi,commencing,camouflage,footprint,tyrol,barangays,universite,highlanders,budgets,query,lobbied,westchester,equator,stipulated,pointe,distinguishes,allotted,embankment,advises,storing,loyalists,fourier,rehearsals,starvation,gland,rihanna,tubular,expressive,baccalaureate,intersections,revered,carbonate,eritrea,craftsmen,cosmopolitan,sequencing,corridors,shortlisted,bangladeshi,persians,mimic,parades,repetitive,recommends,flanks,promoters,incompatible,teaming,ammonia,greyhound,solos,improper,legislator,newsweek,recurrent,vitro,cavendish,eireann,crises,prophets,mandir,strategically,guerrillas,formula_12,ghent,contenders,equivalence,drone,sociological,hamid,castes,statehood,aland,clinched,relaunched,tariffs,simulations,williamsburg,rotate,mediation,smallpox,harmonica,lodges,lavish,restrictive,o'sullivan,detainees,polynomials,echoes,intersecting,learners,elects,charlemagne,defiance,epsom,liszt,facilitating,absorbing,revelations,padua,pieter,pious,penultimate,mammalian,montenegrin,supplementary,widows,aromatic,croats,roanoke,trieste,legions,subdistrict,babylonian,grasslands,volga,violently,sparsely,oldies,telecommunication,respondents,quarries,downloadable,commandos,taxpayer,catalytic,malabar,afforded,copying,declines,nawab,junctions,assessing,filtering,classed,disused,compliant,christoph,gottingen,civilizations,hermitage,caledonian,whereupon,ethnically,springsteen,mobilization,terraces,indus,excel,zoological,enrichment,simulate,guitarists,registrar,cappella,invoked,reused,manchu,configured,uppsala,genealogy,mergers,casts,curricular,rebelled,subcontinent,horticultural,parramatta,orchestrated,dockyard,claudius,decca,prohibiting,turkmenistan,brahmin,clandestine,obligatory,elaborated,parasitic,helix,constraint,spearheaded,rotherham,eviction,adapting,albans,rescues,sociologist,guiana,convicts,occurrences,kamen,antennas,asturias,wheeled,sanitary,deterioration,trier,theorists,baseline,announcements,valea,planners,factual,serialized,serials,bilbao,demoted,fission,jamestown,cholera,alleviate,alteration,indefinite,sulfate,paced,climatic,valuation,artisans,proficiency,aegean,regulators,fledgling,sealing,influencing,servicemen,frequented,cancers,tambon,narayan,bankers,clarified,embodied,engraver,reorganisation,dissatisfied,dictated,supplemental,temperance,ratification,puget,nutrient,pretoria,papyrus,uniting,ascribed,cores,coptic,schoolhouse,barrio,1910s,armory,defected,transatlantic,regulates,ported,artefacts,specifies,boasted,scorers,mollusks,emitted,navigable,quakers,projective,dialogues,reunification,exponential,vastly,banners,unsigned,dissipated,halves,coincidentally,leasing,purported,escorting,estimation,foxes,lifespan,inflorescence,assimilation,showdown,staunch,prologue,ligand,superliga,telescopes,northwards,keynote,heaviest,taunton,redeveloped,vocalists,podlaskie,soyuz,rodents,azores,moravian,outset,parentheses,apparel,domestically,authoritative,polymers,monterrey,inhibit,launcher,jordanian,folds,taxis,mandates,singled,liechtenstein,subsistence,marxism,ousted,governorship,servicing,offseason,modernism,prism,devout,translators,islamist,chromosomes,pitted,bedfordshire,fabrication,authoritarian,javanese,leaflets,transient,substantive,predatory,sigismund,assassinate,diagrams,arrays,rediscovered,reclamation,spawning,fjord,peacekeeping,strands,fabrics,highs,regulars,tirana,ultraviolet,athenian,filly,barnet,naacp,nueva,favourites,terminates,showcases,clones,inherently,interpreting,bjorn,finely,lauded,unspecified,chola,pleistocene,insulation,antilles,donetsk,funnel,nutritional,biennale,reactivated,southport,primate,cavaliers,austrians,interspersed,restarted,suriname,amplifiers,wladyslaw,blockbuster,sportsman,minogue,brightness,benches,bridgeport,initiating,israelis,orbiting,newcomers,externally,scaling,transcribed,impairment,luxurious,longevity,impetus,temperament,ceilings,tchaikovsky,spreads,pantheon,bureaucracy,1820s,heraldic,villas,formula_13,galician,meath,avoidance,corresponded,headlining,connacht,seekers,rappers,solids,monograph,scoreless,opole,isotopes,himalayas,parodies,garments,microscopic,republished,havilland,orkney,demonstrators,pathogen,saturated,hellenistic,facilitates,aerodynamic,relocating,indochina,laval,astronomers,bequeathed,administrations,extracts,nagoya,torquay,demography,medicare,ambiguity,renumbered,pursuant,concave,syriac,electrode,dispersal,henan,bialystok,walsall,crystalline,puebla,janata,illumination,tianjin,enslaved,coloration,championed,defamation,grille,johor,rejoin,caspian,fatally,planck,workings,appointing,institutionalized,wessex,modernized,exemplified,regatta,jacobite,parochial,programmers,blending,eruptions,insurrection,regression,indices,sited,dentistry,mobilized,furnishings,levant,primaries,ardent,nagasaki,conqueror,dorchester,opined,heartland,amman,mortally,wellesley,bowlers,outputs,coveted,orthography,immersion,disrepair,disadvantaged,curate,childless,condensed,codice_1,remodeled,resultant,bolsheviks,superfamily,saxons,2010s,contractual,rivalries,malacca,oaxaca,magnate,vertebrae,quezon,olympiad,yucatan,tyres,macro,specialization,commendation,caliphate,gunnery,exiles,excerpts,fraudulent,adjustable,aramaic,interceptor,drumming,standardization,reciprocal,adolescents,federalist,aeronautics,favorably,enforcing,reintroduced,zhejiang,refining,biplane,banknotes,accordion,intersect,illustrating,summits,classmate,militias,biomass,massacres,epidemiology,reworked,wrestlemania,nantes,auditory,taxon,elliptical,chemotherapy,asserting,avoids,proficient,airmen,yellowstone,multicultural,alloys,utilization,seniority,kuyavian,huntsville,orthogonal,bloomington,cultivars,casimir,internment,repulsed,impedance,revolving,fermentation,parana,shutout,partnering,empowered,islamabad,polled,classify,amphibians,greyish,obedience,4x100,projectile,khyber,halfback,relational,d'ivoire,synonyms,endeavour,padma,customized,mastery,defenceman,berber,purge,interestingly,covent,promulgated,restricting,condemnation,hillsborough,walkers,privateer,intra,captaincy,naturalized,huffington,detecting,hinted,migrating,bayou,counterattack,anatomical,foraging,unsafe,swiftly,outdated,paraguayan,attire,masjid,endeavors,jerseys,triassic,quechua,growers,axial,accumulate,wastewater,cognition,fungal,animator,pagoda,kochi,uniformly,antibody,yerevan,hypotheses,combatants,italianate,draining,fragmentation,snowfall,formative,inversion,kitchener,identifier,additive,lucha,selects,ashland,cambrian,racetrack,trapping,congenital,primates,wavelengths,expansions,yeomanry,harcourt,wealthiest,awaited,punta,intervening,aggressively,vichy,piloted,midtown,tailored,heyday,metadata,guadalcanal,inorganic,hadith,pulses,francais,tangent,scandals,erroneously,tractors,pigment,constabulary,jiangsu,landfill,merton,basalt,astor,forbade,debuts,collisions,exchequer,stadion,roofed,flavour,sculptors,conservancy,dissemination,electrically,undeveloped,existent,surpassing,pentecostal,manifested,amend,formula_14,superhuman,barges,tunis,analytics,argyll,liquids,mechanized,domes,mansions,himalayan,indexing,reuters,nonlinear,purification,exiting,timbers,triangles,decommissioning,departmental,causal,fonts,americana,sept.,seasonally,incomes,razavi,sheds,memorabilia,rotational,terre,sutra,protege,yarmouth,grandmaster,annum,looted,imperialism,variability,liquidation,baptised,isotope,showcasing,milling,rationale,hammersmith,austen,streamlined,acknowledging,contentious,qaleh,breadth,turing,referees,feral,toulon,unofficially,identifiable,standout,labeling,dissatisfaction,jurgen,angrily,featherweight,cantons,constrained,dominates,standalone,relinquished,theologians,markedly,italics,downed,nitrate,likened,gules,craftsman,singaporean,pixels,mandela,moray,parity,departement,antigen,academically,burgh,brahma,arranges,wounding,triathlon,nouveau,vanuatu,banded,acknowledges,unearthed,stemming,authentication,byzantines,converge,nepali,commonplace,deteriorating,recalling,palette,mathematicians,greenish,pictorial,ahmedabad,rouen,validation,u.s.a.,'best,malvern,archers,converter,undergoes,fluorescent,logistical,notification,transvaal,illicit,symphonies,stabilization,worsened,fukuoka,decrees,enthusiast,seychelles,blogger,louvre,dignitaries,burundi,wreckage,signage,pinyin,bursts,federer,polarization,urbana,lazio,schism,nietzsche,venerable,administers,seton,kilograms,invariably,kathmandu,farmed,disqualification,earldom,appropriated,fluctuations,kermanshah,deployments,deformation,wheelbase,maratha,psalm,bytes,methyl,engravings,skirmish,fayette,vaccines,ideally,astrology,breweries,botanic,opposes,harmonies,irregularities,contended,gaulle,prowess,constants,aground,filipinos,fresco,ochreous,jaipur,willamette,quercus,eastwards,mortars,champaign,braille,reforming,horned,hunan,spacious,agitation,draught,specialties,flourishing,greensboro,necessitated,swedes,elemental,whorls,hugely,structurally,plurality,synthesizers,embassies,assad,contradictory,inference,discontent,recreated,inspectors,unicef,commuters,embryo,modifying,stints,numerals,communicated,boosted,trumpeter,brightly,adherence,remade,leases,restrained,eucalyptus,dwellers,planar,grooves,gainesville,daimler,anzac,szczecin,cornerback,prized,peking,mauritania,khalifa,motorized,lodging,instrumentalist,fortresses,cervical,formula_15,passerine,sectarian,researches,apprenticed,reliefs,disclose,gliding,repairing,queue,kyushu,literate,canoeing,sacrament,separatist,calabria,parkland,flowed,investigates,statistically,visionary,commits,dragoons,scrolls,premieres,revisited,subdued,censored,patterned,elective,outlawed,orphaned,leyland,richly,fujian,miniatures,heresy,plaques,countered,nonfiction,exponent,moravia,dispersion,marylebone,midwestern,enclave,ithaca,federated,electronically,handheld,microscopy,tolls,arrivals,climbers,continual,cossacks,moselle,deserts,ubiquitous,gables,forecasts,deforestation,vertebrates,flanking,drilled,superstructure,inspected,consultative,bypassed,ballast,subsidy,socioeconomic,relic,grenada,journalistic,administering,accommodated,collapses,appropriation,reclassified,foreword,porte,assimilated,observance,fragmented,arundel,thuringia,gonzaga,shenzhen,shipyards,sectional,ayrshire,sloping,dependencies,promenade,ecuadorian,mangrove,constructs,goalscorer,heroism,iteration,transistor,omnibus,hampstead,cochin,overshadowed,chieftain,scalar,finishers,ghanaian,abnormalities,monoplane,encyclopaedia,characterize,travancore,baronetage,bearers,biking,distributes,paving,christened,inspections,banco,humber,corinth,quadratic,albanians,lineages,majored,roadside,inaccessible,inclination,darmstadt,fianna,epilepsy,propellers,papacy,montagu,bhutto,sugarcane,optimized,pilasters,contend,batsmen,brabant,housemates,sligo,ascot,aquinas,supervisory,accorded,gerais,echoed,nunavut,conservatoire,carniola,quartermaster,gminas,impeachment,aquitaine,reformers,quarterfinal,karlsruhe,accelerator,coeducational,archduke,gelechiidae,seaplane,dissident,frenchman,palau,depots,hardcover,aachen,darreh,denominational,groningen,parcels,reluctance,drafts,elliptic,counters,decreed,airship,devotional,contradiction,formula_16,undergraduates,qualitative,guatemalan,slavs,southland,blackhawks,detrimental,abolish,chechen,manifestations,arthritis,perch,fated,hebei,peshawar,palin,immensely,havre,totalling,rampant,ferns,concourse,triples,elites,olympian,larva,herds,lipid,karabakh,distal,monotypic,vojvodina,batavia,multiplied,spacing,spellings,pedestrians,parchment,glossy,industrialization,dehydrogenase,patriotism,abolitionist,mentoring,elizabethan,figurative,dysfunction,abyss,constantin,middletown,stigma,mondays,gambia,gaius,israelites,renounced,nepalese,overcoming,buren,sulphur,divergence,predation,looting,iberia,futuristic,shelved,anthropological,innsbruck,escalated,clermont,entrepreneurial,benchmark,mechanically,detachments,populist,apocalyptic,exited,embryonic,stanza,readership,chiba,landlords,expansive,boniface,therapies,perpetrators,whitehall,kassel,masts,carriageway,clinch,pathogens,mazandaran,undesirable,teutonic,miocene,nagpur,juris,cantata,compile,diffuse,dynastic,reopening,comptroller,o'neal,flourish,electing,scientifically,departs,welded,modal,cosmology,fukushima,libertadores,chang'an,asean,generalization,localization,afrikaans,cricketers,accompanies,emigrants,esoteric,southwards,shutdown,prequel,fittings,innate,wrongly,equitable,dictionaries,senatorial,bipolar,flashbacks,semitism,walkway,lyrically,legality,sorbonne,vigorously,durga,samoan,karel,interchanges,patna,decider,registering,electrodes,anarchists,excursion,overthrown,gilan,recited,michelangelo,advertiser,kinship,taboo,cessation,formula_17,premiers,traversed,madurai,poorest,torneo,exerted,replicate,spelt,sporadically,horde,landscaping,razed,hindered,esperanto,manchuria,propellant,jalan,baha'is,sikkim,linguists,pandit,racially,ligands,dowry,francophone,escarpment,behest,magdeburg,mainstay,villiers,yangtze,grupo,conspirators,martyrdom,noticeably,lexical,kazakh,unrestricted,utilised,sired,inhabits,proofs,joseon,pliny,minted,buddhists,cultivate,interconnected,reuse,viability,australasian,derelict,resolving,overlooks,menon,stewardship,playwrights,thwarted,filmfare,disarmament,protections,bundles,sidelined,hypothesized,singer/songwriter,forage,netted,chancery,townshend,restructured,quotation,hyperbolic,succumbed,parliaments,shenandoah,apical,kibbutz,storeys,pastors,lettering,ukrainians,hardships,chihuahua,avail,aisles,taluka,antisemitism,assent,ventured,banksia,seamen,hospice,faroe,fearful,woreda,outfield,chlorine,transformer,tatar,panoramic,pendulum,haarlem,styria,cornice,importing,catalyzes,subunits,enamel,bakersfield,realignment,sorties,subordinates,deanery,townland,gunmen,tutelage,evaluations,allahabad,thrace,veneto,mennonite,sharia,subgenus,satisfies,puritan,unequal,gastrointestinal,ordinances,bacterium,horticulture,argonauts,adjectives,arable,duets,visualization,woolwich,revamped,euroleague,thorax,completes,originality,vasco,freighter,sardar,oratory,sects,extremes,signatories,exporting,arisen,exacerbated,departures,saipan,furlongs,d'italia,goring,dakar,conquests,docked,offshoot,okrug,referencing,disperse,netting,summed,rewritten,articulation,humanoid,spindle,competitiveness,preventive,facades,westinghouse,wycombe,synthase,emulate,fostering,abdel,hexagonal,myriad,caters,arjun,dismay,axiom,psychotherapy,colloquial,complemented,martinique,fractures,culmination,erstwhile,atrium,electronica,anarchism,nadal,montpellier,algebras,submitting,adopts,stemmed,overcame,internacional,asymmetric,gallipoli,gliders,flushing,extermination,hartlepool,tesla,interwar,patriarchal,hitherto,ganges,combatant,marred,philology,glastonbury,reversible,isthmus,undermined,southwark,gateshead,andalusia,remedies,hastily,optimum,smartphone,evade,patrolled,beheaded,dopamine,waivers,ugandan,gujarati,densities,predicting,intestinal,tentative,interstellar,kolonia,soloists,penetrated,rebellions,qeshlaq,prospered,colegio,deficits,konigsberg,deficient,accessing,relays,kurds,politburo,codified,incarnations,occupancy,cossack,metaphysical,deprivation,chopra,piccadilly,formula_18,makeshift,protestantism,alaskan,frontiers,faiths,tendon,dunkirk,durability,autobots,bonuses,coinciding,emails,gunboat,stucco,magma,neutrons,vizier,subscriptions,visuals,envisaged,carpets,smoky,schema,parliamentarian,immersed,domesticated,parishioners,flinders,diminutive,mahabharata,ballarat,falmouth,vacancies,gilded,twigs,mastering,clerics,dalmatia,islington,slogans,compressor,iconography,congolese,sanction,blends,bulgarians,moderator,outflow,textures,safeguard,trafalgar,tramways,skopje,colonialism,chimneys,jazeera,organisers,denoting,motivations,ganga,longstanding,deficiencies,gwynedd,palladium,holistic,fascia,preachers,embargo,sidings,busan,ignited,artificially,clearwater,cemented,northerly,salim,equivalents,crustaceans,oberliga,quadrangle,historiography,romanians,vaults,fiercely,incidental,peacetime,tonal,bhopal,oskar,radha,pesticides,timeslot,westerly,cathedrals,roadways,aldershot,connectors,brahmins,paler,aqueous,gustave,chromatic,linkage,lothian,specialises,aggregation,tributes,insurgent,enact,hampden,ghulam,federations,instigated,lyceum,fredrik,chairmanship,floated,consequent,antagonists,intimidation,patriarchate,warbler,heraldry,entrenched,expectancy,habitation,partitions,widest,launchers,nascent,ethos,wurzburg,lycee,chittagong,mahatma,merseyside,asteroids,yokosuka,cooperatives,quorum,redistricting,bureaucratic,yachts,deploying,rustic,phonology,chorale,cellist,stochastic,crucifixion,surmounted,confucian,portfolios,geothermal,crested,calibre,tropics,deferred,nasir,iqbal,persistence,essayist,chengdu,aborigines,fayetteville,bastion,interchangeable,burlesque,kilmarnock,specificity,tankers,colonels,fijian,quotations,enquiry,quito,palmerston,delle,multidisciplinary,polynesian,iodine,antennae,emphasised,manganese,baptists,galilee,jutland,latent,excursions,skepticism,tectonic,precursors,negligible,musique,misuse,vitoria,expressly,veneration,sulawesi,footed,mubarak,chongqing,chemically,midday,ravaged,facets,varma,yeovil,ethnographic,discounted,physicists,attache,disbanding,essen,shogunate,cooperated,waikato,realising,motherwell,pharmacology,sulfide,inward,expatriate,devoid,cultivar,monde,andean,groupings,goran,unaffected,moldovan,postdoctoral,coleophora,delegated,pronoun,conductivity,coleridge,disapproval,reappeared,microbial,campground,olsztyn,fostered,vaccination,rabbinical,champlain,milestones,viewership,caterpillar,effected,eupithecia,financier,inferred,uzbek,bundled,bandar,balochistan,mysticism,biosphere,holotype,symbolizes,lovecraft,photons,abkhazia,swaziland,subgroups,measurable,falkirk,valparaiso,ashok,discriminatory,rarity,tabernacle,flyweight,jalisco,westernmost,antiquarian,extracellular,margrave,colspan=9,midsummer,digestive,reversing,burgeoning,substitutes,medallist,khrushchev,guerre,folio,detonated,partido,plentiful,aggregator,medallion,infiltration,shaded,santander,fared,auctioned,permian,ramakrishna,andorra,mentors,diffraction,bukit,potentials,translucent,feminists,tiers,protracted,coburg,wreath,guelph,adventurer,he/she,vertebrate,pipelines,celsius,outbreaks,australasia,deccan,garibaldi,unionists,buildup,biochemical,reconstruct,boulders,stringent,barbed,wording,furnaces,pests,befriends,organises,popes,rizal,tentacles,cadre,tallahassee,punishments,occidental,formatted,mitigation,rulings,rubens,cascades,inducing,choctaw,volta,synagogues,movable,altarpiece,mitigate,practise,intermittently,encountering,memberships,earns,signify,retractable,amounting,pragmatic,wilfrid,dissenting,divergent,kanji,reconstituted,devonian,constitutions,levied,hendrik,starch,costal,honduran,ditches,polygon,eindhoven,superstars,salient,argus,punitive,purana,alluvial,flaps,inefficient,retracted,advantageous,quang,andersson,danville,binghamton,symbolize,conclave,shaanxi,silica,interpersonal,adept,frans,pavilions,lubbock,equip,sunken,limburg,activates,prosecutions,corinthian,venerated,shootings,retreats,parapet,orissa,riviere,animations,parodied,offline,metaphysics,bluffs,plume,piety,fruition,subsidized,steeplechase,shanxi,eurasia,angled,forecasting,suffragan,ashram,larval,labyrinth,chronicler,summaries,trailed,merges,thunderstorms,filtered,formula_19,advertisers,alpes,informatics,parti,constituting,undisputed,certifications,javascript,molten,sclerosis,rumoured,boulogne,hmong,lewes,breslau,notts,bantu,ducal,messengers,radars,nightclubs,bantamweight,carnatic,kaunas,fraternal,triggering,controversially,londonderry,visas,scarcity,offaly,uprisings,repelled,corinthians,pretext,kuomintang,kielce,empties,matriculated,pneumatic,expos,agile,treatises,midpoint,prehistory,oncology,subsets,hydra,hypertension,axioms,wabash,reiterated,swapped,achieves,premio,ageing,overture,curricula,challengers,subic,selangor,liners,frontline,shutter,validated,normalized,entertainers,molluscs,maharaj,allegation,youngstown,synth,thoroughfare,regionally,pillai,transcontinental,pedagogical,riemann,colonia,easternmost,tentatively,profiled,herefordshire,nativity,meuse,nucleotide,inhibits,huntingdon,throughput,recorders,conceding,domed,homeowners,centric,gabled,canoes,fringes,breeder,subtitled,fluoride,haplogroup,zionism,izmir,phylogeny,kharkiv,romanticism,adhesion,usaaf,delegations,lorestan,whalers,biathlon,vaulted,mathematically,pesos,skirmishes,heisman,kalamazoo,gesellschaft,launceston,interacts,quadruple,kowloon,psychoanalysis,toothed,ideologies,navigational,valence,induces,lesotho,frieze,rigging,undercarriage,explorations,spoof,eucharist,profitability,virtuoso,recitals,subterranean,sizeable,herodotus,subscriber,huxley,pivot,forewing,warring,boleslaw,bharatiya,suffixes,trois,percussionist,downturn,garrisons,philosophies,chants,mersin,mentored,dramatist,guilds,frameworks,thermodynamic,venomous,mehmed,assembling,rabbinic,hegemony,replicas,enlargement,claimant,retitled,utica,dumfries,metis,deter,assortment,tubing,afflicted,weavers,rupture,ornamentation,transept,salvaged,upkeep,callsign,rajput,stevenage,trimmed,intracellular,synchronization,consular,unfavorable,royalists,goldwyn,fasting,hussars,doppler,obscurity,currencies,amiens,acorn,tagore,townsville,gaussian,migrations,porta,anjou,graphite,seaport,monographs,gladiators,metrics,calligraphy,sculptural,swietokrzyskie,tolombeh,eredivisie,shoals,queries,carts,exempted,fiberglass,mirrored,bazar,progeny,formalized,mukherjee,professed,amazon.com,cathode,moreton,removable,mountaineers,nagano,transplantation,augustinian,steeply,epilogue,adapter,decisively,accelerating,mediaeval,substituting,tasman,devonshire,litres,enhancements,himmler,nephews,bypassing,imperfect,argentinian,reims,integrates,sochi,ascii,licences,niches,surgeries,fables,versatility,indra,footpath,afonso,crore,evaporation,encodes,shelling,conformity,simplify,updating,quotient,overt,firmware,umpires,architectures,eocene,conservatism,secretion,embroidery,f.c..,tuvalu,mosaics,shipwreck,prefectural,cohort,grievances,garnering,centerpiece,apoptosis,djibouti,bethesda,formula_20,shonen,richland,justinian,dormitories,meteorite,reliably,obtains,pedagogy,hardness,cupola,manifolds,amplification,steamers,familial,dumbarton,jerzy,genital,maidstone,salinity,grumman,signifies,presbytery,meteorology,procured,aegis,streamed,deletion,nuestra,mountaineering,accords,neuronal,khanate,grenoble,axles,dispatches,tokens,turku,auctions,propositions,planters,proclaiming,recommissioned,stravinsky,obverse,bombarded,waged,saviour,massacred,reformist,purportedly,resettlement,ravenna,embroiled,minden,revitalization,hikers,bridging,torpedoed,depletion,nizam,affectionately,latitudes,lubeck,spore,polymerase,aarhus,nazism,101st,buyout,galerie,diets,overflow,motivational,renown,brevet,deriving,melee,goddesses,demolish,amplified,tamworth,retake,brokerage,beneficiaries,henceforth,reorganised,silhouette,browsers,pollutants,peron,lichfield,encircled,defends,bulge,dubbing,flamenco,coimbatore,refinement,enshrined,grizzlies,capacitor,usefulness,evansville,interscholastic,rhodesian,bulletins,diamondbacks,rockers,platted,medalists,formosa,transporter,slabs,guadeloupe,disparate,concertos,violins,regaining,mandible,untitled,agnostic,issuance,hamiltonian,brampton,srpska,homology,downgraded,florentine,epitaph,kanye,rallying,analysed,grandstand,infinitely,antitrust,plundered,modernity,colspan=3|total,amphitheatre,doric,motorists,yemeni,carnivorous,probabilities,prelate,struts,scrapping,bydgoszcz,pancreatic,signings,predicts,compendium,ombudsman,apertura,appoints,rebbe,stereotypical,valladolid,clustered,touted,plywood,inertial,kettering,curving,d'honneur,housewives,grenadier,vandals,barbarossa,necked,waltham,reputedly,jharkhand,cistercian,pursues,viscosity,organiser,cloister,islet,stardom,moorish,himachal,strives,scripps,staggered,blasts,westwards,millimeters,angolan,hubei,agility,admirals,mordellistena,coincides,platte,vehicular,cordillera,riffs,schoolteacher,canaan,acoustics,tinged,reinforcing,concentrates,daleks,monza,selectively,musik,polynesia,exporter,reviving,macclesfield,bunkers,ballets,manors,caudal,microbiology,primes,unbroken,outcry,flocks,pakhtunkhwa,abelian,toowoomba,luminous,mould,appraisal,leuven,experimentally,interoperability,hideout,perak,specifying,knighthood,vasily,excerpt,computerized,niels,networked,byzantium,reaffirmed,geographer,obscured,fraternities,mixtures,allusion,accra,lengthened,inquest,panhandle,pigments,revolts,bluetooth,conjugate,overtaken,foray,coils,breech,streaks,impressionist,mendelssohn,intermediary,panned,suggestive,nevis,upazila,rotunda,mersey,linnaeus,anecdotes,gorbachev,viennese,exhaustive,moldavia,arcades,irrespective,orator,diminishing,predictive,cohesion,polarized,montage,avian,alienation,conus,jaffna,urbanization,seawater,extremity,editorials,scrolling,dreyfus,traverses,topographic,gunboats,extratropical,normans,correspondents,recognises,millennia,filtration,ammonium,voicing,complied,prefixes,diplomas,figurines,weakly,gated,oscillator,lucerne,embroidered,outpatient,airframe,fractional,disobedience,quarterbacks,formula_21,shinto,chiapas,epistle,leakage,pacifist,avignon,penrith,renders,mantua,screenplays,gustaf,tesco,alphabetically,rations,discharges,headland,tapestry,manipur,boolean,mediator,ebenezer,subchannel,fable,bestselling,ateneo,trademarks,recurrence,dwarfs,britannica,signifying,vikram,mediate,condensation,censuses,verbandsgemeinde,cartesian,sprang,surat,britons,chelmsford,courtenay,statistic,retina,abortions,liabilities,closures,mississauga,skyscrapers,saginaw,compounded,aristocrat,msnbc,stavanger,septa,interpretive,hinder,visibly,seeding,shutouts,irregularly,quebecois,footbridge,hydroxide,implicitly,lieutenants,simplex,persuades,midshipman,heterogeneous,officiated,crackdown,lends,tartu,altars,fractions,dissidents,tapered,modernisation,scripting,blazon,aquaculture,thermodynamics,sistan,hasidic,bellator,pavia,propagated,theorized,bedouin,transnational,mekong,chronicled,declarations,kickstarter,quotas,runtime,duquesne,broadened,clarendon,brownsville,saturation,tatars,electorates,malayan,replicated,observable,amphitheater,endorsements,referral,allentown,mormons,pantomime,eliminates,typeface,allegorical,varna,conduction,evoke,interviewer,subordinated,uyghur,landscaped,conventionally,ascend,edifice,postulated,hanja,whitewater,embarking,musicologist,tagalog,frontage,paratroopers,hydrocarbons,transliterated,nicolae,viewpoints,surrealist,asheville,falklands,hacienda,glide,opting,zimbabwean,discal,mortgages,nicaraguan,yadav,ghosh,abstracted,castilian,compositional,cartilage,intergovernmental,forfeited,importation,rapping,artes,republika,narayana,condominium,frisian,bradman,duality,marche,extremist,phosphorylation,genomes,allusions,valencian,habeas,ironworks,multiplex,harpsichord,emigrate,alternated,breda,waffen,smartphones,familiarity,regionalliga,herbaceous,piping,dilapidated,carboniferous,xviii,critiques,carcinoma,sagar,chippewa,postmodern,neapolitan,excludes,notoriously,distillation,tungsten,richness,installments,monoxide,chand,privatisation,molded,maths,projectiles,luoyang,epirus,lemma,concentric,incline,erroneous,sideline,gazetted,leopards,fibres,renovate,corrugated,unilateral,repatriation,orchestration,saeed,rockingham,loughborough,formula_22,bandleader,appellation,openness,nanotechnology,massively,tonnage,dunfermline,exposes,moored,ridership,motte,eurobasket,majoring,feats,silla,laterally,playlist,downwards,methodologies,eastbourne,daimyo,cellulose,leyton,norwalk,oblong,hibernian,opaque,insular,allegory,camogie,inactivation,favoring,masterpieces,rinpoche,serotonin,portrayals,waverley,airliner,longford,minimalist,outsourcing,excise,meyrick,qasim,organisational,synaptic,farmington,gorges,scunthorpe,zoned,tohoku,librarians,davao,decor,theatrically,brentwood,pomona,acquires,planter,capacitors,synchronous,skateboarding,coatings,turbocharged,ephraim,capitulation,scoreboard,hebrides,ensues,cereals,ailing,counterpoint,duplication,antisemitic,clique,aichi,oppressive,transcendental,incursions,rename,renumbering,powys,vestry,bitterly,neurology,supplanted,affine,susceptibility,orbiter,activating,overlaps,ecoregion,raman,canoer,darfur,microorganisms,precipitated,protruding,torun,anthropologists,rennes,kangaroos,parliamentarians,edits,littoral,archived,begum,rensselaer,microphones,ypres,empower,etruscan,wisden,montfort,calibration,isomorphic,rioting,kingship,verbally,smyrna,cohesive,canyons,fredericksburg,rahul,relativistic,micropolitan,maroons,industrialized,henchmen,uplift,earthworks,mahdi,disparity,cultured,transliteration,spiny,fragmentary,extinguished,atypical,inventors,biosynthesis,heralded,curacao,anomalies,aeroplane,surya,mangalore,maastricht,ashkenazi,fusiliers,hangzhou,emitting,monmouthshire,schwarzenegger,ramayana,peptides,thiruvananthapuram,alkali,coimbra,budding,reasoned,epithelial,harbors,rudimentary,classically,parque,ealing,crusades,rotations,riparian,pygmy,inertia,revolted,microprocessor,calendars,solvents,kriegsmarine,accademia,cheshmeh,yoruba,ardabil,mitra,genomic,notables,propagate,narrates,univision,outposts,polio,birkenhead,urinary,crocodiles,pectoral,barrymore,deadliest,rupees,chaim,protons,comical,astrophysics,unifying,formula_23,vassals,cortical,audubon,pedals,tenders,resorted,geophysical,lenders,recognising,tackling,lanarkshire,doctrinal,annan,combating,guangxi,estimating,selectors,tribunals,chambered,inhabiting,exemptions,curtailed,abbasid,kandahar,boron,bissau,150th,codenamed,wearer,whorl,adhered,subversive,famer,smelting,inserting,mogadishu,zoologist,mosul,stumps,almanac,olympiacos,stamens,participatory,cults,honeycomb,geologists,dividend,recursive,skiers,reprint,pandemic,liber,percentages,adversely,stoppage,chieftains,tubingen,southerly,overcrowding,unorganized,hangars,fulfil,hails,cantilever,woodbridge,pinus,wiesbaden,fertilization,fluorescence,enhances,plenary,troublesome,episodic,thrissur,kickboxing,allele,staffing,garda,televisions,philatelic,spacetime,bullpen,oxides,leninist,enrolling,inventive,truro,compatriot,ruskin,normative,assay,gotha,murad,illawarra,gendarmerie,strasse,mazraeh,rebounded,fanfare,liaoning,rembrandt,iranians,emirate,governs,latency,waterfowl,chairmen,katowice,aristocrats,eclipsed,sentient,sonatas,interplay,sacking,decepticons,dynamical,arbitrarily,resonant,petar,velocities,alludes,wastes,prefectures,belleville,sensibility,salvadoran,consolidating,medicaid,trainees,vivekananda,molar,porous,upload,youngster,infused,doctorates,wuhan,annihilation,enthusiastically,gamespot,kanpur,accumulating,monorail,operetta,tiling,sapporo,finns,calvinist,hydrocarbon,sparrows,orienteering,cornelis,minster,vuelta,plebiscite,embraces,panchayats,focussed,remediation,brahman,olfactory,reestablished,uniqueness,northumbria,rwandan,predominately,abode,ghats,balances,californian,uptake,bruges,inert,westerns,reprints,cairn,yarra,resurfaced,audible,rossini,regensburg,italiana,fleshy,irrigated,alerts,yahya,varanasi,marginalized,expatriates,cantonment,normandie,sahitya,directives,rounder,hulls,fictionalized,constables,inserts,hipped,potosi,navies,biologists,canteen,husbandry,augment,fortnight,assamese,kampala,o'keefe,paleolithic,bluish,promontory,consecutively,striving,niall,reuniting,dipole,friendlies,disapproved,thrived,netflix,liberian,dielectric,medway,strategist,sankt,pickups,hitters,encode,rerouted,claimants,anglesey,partitioned,cavan,flutes,reared,repainted,armaments,bowed,thoracic,balliol,piero,chaplains,dehestan,sender,junkers,sindhi,sickle,dividends,metallurgy,honorific,berths,namco,springboard,resettled,gansu,copyrighted,criticizes,utopian,bendigo,ovarian,binomial,spaceflight,oratorio,proprietors,supergroup,duplicated,foreground,strongholds,revolved,optimize,layouts,westland,hurler,anthropomorphic,excelsior,merchandising,reeds,vetoed,cryptography,hollyoaks,monash,flooring,ionian,resilience,johnstown,resolves,lawmakers,alegre,wildcards,intolerance,subculture,selector,slums,formulate,bayonet,istvan,restitution,interchangeably,awakens,rostock,serpentine,oscillation,reichstag,phenotype,recessed,piotr,annotated,preparedness,consultations,clausura,preferential,euthanasia,genoese,outcrops,freemasonry,geometrical,genesee,islets,prometheus,panamanian,thunderbolt,terraced,stara,shipwrecks,futebol,faroese,sharqi,aldermen,zeitung,unify,formula_24,humanism,syntactic,earthen,blyth,taxed,rescinded,suleiman,cymru,dwindled,vitality,superieure,resupply,adolphe,ardennes,rajiv,profiling,olympique,gestation,interfaith,milosevic,tagline,funerary,druze,silvery,plough,shrubland,relaunch,disband,nunatak,minimizing,excessively,waned,attaching,luminosity,bugle,encampment,electrostatic,minesweeper,dubrovnik,rufous,greenock,hochschule,assyrians,extracting,malnutrition,priya,attainment,anhui,connotations,predicate,seabirds,deduced,pseudonyms,gopal,plovdiv,refineries,imitated,kwazulu,terracotta,tenets,discourses,brandeis,whigs,dominions,pulmonate,landslides,tutors,determinant,richelieu,farmstead,tubercles,technicolor,hegel,redundancy,greenpeace,shortening,mules,distilled,xxiii,fundamentalist,acrylic,outbuildings,lighted,corals,signaled,transistors,cavite,austerity,76ers,exposures,dionysius,outlining,commutative,permissible,knowledgeable,howrah,assemblage,inhibited,crewmen,mbit/s,pyramidal,aberdeenshire,bering,rotates,atheism,howitzer,saone,lancet,fermented,contradicted,materiel,ofsted,numeric,uniformity,josephus,nazarene,kuwaiti,noblemen,pediment,emergent,campaigner,akademi,murcia,perugia,gallen,allsvenskan,finned,cavities,matriculation,rosters,twickenham,signatory,propel,readable,contends,artisan,flamboyant,reggio,italo,fumbles,widescreen,rectangle,centimetres,collaborates,envoys,rijeka,phonological,thinly,refractive,civilisation,reductase,cognate,dalhousie,monticello,lighthouses,jitsu,luneburg,socialite,fermi,collectible,optioned,marquee,jokingly,architecturally,kabir,concubine,nationalisation,watercolor,wicklow,acharya,pooja,leibniz,rajendra,nationalized,stalemate,bloggers,glutamate,uplands,shivaji,carolingian,bucuresti,dasht,reappears,muscat,functionally,formulations,hinged,hainan,catechism,autosomal,incremental,asahi,coeur,diversification,multilateral,fewest,recombination,finisher,harrogate,hangul,feasts,photovoltaic,paget,liquidity,alluded,incubation,applauded,choruses,malagasy,hispanics,bequest,underparts,cassava,kazimierz,gastric,eradication,mowtowr,tyrosine,archbishopric,e9e9e9,unproductive,uxbridge,hydrolysis,harbours,officio,deterministic,devonport,kanagawa,breaches,freetown,rhinoceros,chandigarh,janos,sanatorium,liberator,inequalities,agonist,hydrophobic,constructors,nagorno,snowboarding,welcomes,subscribed,iloilo,resuming,catalysts,stallions,jawaharlal,harriers,definitively,roughriders,hertford,inhibiting,elgar,randomized,incumbents,episcopate,rainforests,yangon,improperly,kemal,interpreters,diverged,uttarakhand,umayyad,phnom,panathinaikos,shabbat,diode,jiangxi,forbidding,nozzle,artistry,licensee,processions,staffs,decimated,expressionism,shingle,palsy,ontology,mahayana,maribor,sunil,hostels,edwardian,jetty,freehold,overthrew,eukaryotic,schuylkill,rawalpindi,sheath,recessive,ferenc,mandibles,berlusconi,confessor,convergent,ababa,slugging,rentals,sephardic,equivalently,collagen,markov,dynamically,hailing,depressions,sprawling,fairgrounds,indistinguishable,plutarch,pressurized,banff,coldest,braunschweig,mackintosh,sociedad,wittgenstein,tromso,airbase,lecturers,subtitle,attaches,purified,contemplated,dreamworks,telephony,prophetic,rockland,aylesbury,biscay,coherence,aleksandar,judoka,pageants,theses,homelessness,luthor,sitcoms,hinterland,fifths,derwent,privateers,enigmatic,nationalistic,instructs,superimposed,conformation,tricycle,dusan,attributable,unbeknownst,laptops,etching,archbishops,ayatollah,cranial,gharbi,interprets,lackawanna,abingdon,saltwater,tories,lender,minaj,ancillary,ranching,pembrokeshire,topographical,plagiarism,murong,marque,chameleon,assertions,infiltrated,guildhall,reverence,schenectady,formula_25,kollam,notary,mexicana,initiates,abdication,basra,theorems,ionization,dismantling,eared,censors,budgetary,numeral,verlag,excommunicated,distinguishable,quarried,cagliari,hindustan,symbolizing,watertown,descartes,relayed,enclosures,militarily,sault,devolved,dalian,djokovic,filaments,staunton,tumour,curia,villainous,decentralized,galapagos,moncton,quartets,onscreen,necropolis,brasileiro,multipurpose,alamos,comarca,jorgen,concise,mercia,saitama,billiards,entomologist,montserrat,lindbergh,commuting,lethbridge,phoenician,deviations,anaerobic,denouncing,redoubt,fachhochschule,principalities,negros,announcers,seconded,parrots,konami,revivals,approving,devotee,riyadh,overtook,morecambe,lichen,expressionist,waterline,silverstone,geffen,sternites,aspiration,behavioural,grenville,tripura,mediums,genders,pyotr,charlottesville,sacraments,programmable,ps100,shackleton,garonne,sumerian,surpass,authorizing,interlocking,lagoons,voiceless,advert,steeple,boycotted,alouettes,yosef,oxidative,sassanid,benefiting,sayyid,nauru,predetermined,idealism,maxillary,polymerization,semesters,munchen,conor,outfitted,clapham,progenitor,gheorghe,observational,recognitions,numerically,colonized,hazrat,indore,contaminants,fatality,eradicate,assyria,convocation,cameos,skillful,skoda,corfu,confucius,overtly,ramadan,wollongong,placements,d.c..,permutation,contemporaneous,voltages,elegans,universitat,samar,plunder,dwindling,neuter,antonin,sinhala,campania,solidified,stanzas,fibrous,marburg,modernize,sorcery,deutscher,florets,thakur,disruptive,infielder,disintegration,internazionale,vicariate,effigy,tripartite,corrective,klamath,environs,leavenworth,sandhurst,workmen,compagnie,hoseynabad,strabo,palisades,ordovician,sigurd,grandsons,defection,viacom,sinhalese,innovator,uncontrolled,slavonic,indexes,refrigeration,aircrew,superbike,resumption,neustadt,confrontations,arras,hindenburg,ripon,embedding,isomorphism,dwarves,matchup,unison,lofty,argos,louth,constitutionally,transitive,newington,facelift,degeneration,perceptual,aviators,enclosing,igneous,symbolically,academician,constitutionality,iso/iec,sacrificial,maturation,apprentices,enzymology,naturalistic,hajji,arthropods,abbess,vistula,scuttled,gradients,pentathlon,etudes,freedmen,melaleuca,thrice,conductive,sackville,franciscans,stricter,golds,kites,worshiped,monsignor,trios,orally,tiered,primacy,bodywork,castleford,epidemics,alveolar,chapelle,chemists,hillsboro,soulful,warlords,ngati,huguenot,diurnal,remarking,luger,motorways,gauss,jahan,cutoff,proximal,bandai,catchphrase,jonubi,ossetia,codename,codice_2,throated,itinerant,chechnya,riverfront,leela,evoked,entailed,zamboanga,rejoining,circuitry,haymarket,khartoum,feuds,braced,miyazaki,mirren,lubusz,caricature,buttresses,attrition,characterizes,widnes,evanston,materialism,contradictions,marist,midrash,gainsborough,ulithi,turkmen,vidya,escuela,patrician,inspirations,reagent,premierships,humanistic,euphrates,transitioning,belfry,zedong,adaption,kaliningrad,lobos,epics,waiver,coniferous,polydor,inductee,refitted,moraine,unsatisfactory,worsening,polygamy,rajya,nested,subgenre,broadside,stampeders,lingua,incheon,pretender,peloton,persuading,excitation,multan,predates,tonne,brackish,autoimmune,insulated,podcasts,iraqis,bodybuilding,condominiums,midlothian,delft,debtor,asymmetrical,lycaenidae,forcefully,pathogenic,tamaulipas,andaman,intravenous,advancements,senegalese,chronologically,realigned,inquirer,eusebius,dekalb,additives,shortlist,goldwater,hindustani,auditing,caterpillars,pesticide,nakhon,ingestion,lansdowne,traditionalist,northland,thunderbirds,josip,nominating,locale,ventricular,animators,verandah,epistles,surveyors,anthems,dredd,upheaval,passaic,anatolian,svalbard,associative,floodplain,taranaki,estuaries,irreducible,beginners,hammerstein,allocate,coursework,secreted,counteract,handwritten,foundational,passover,discoverer,decoding,wares,bourgeoisie,playgrounds,nazionale,abbreviations,seanad,golan,mishra,godavari,rebranding,attendances,backstory,interrupts,lettered,hasbro,ultralight,hormozgan,armee,moderne,subdue,disuse,improvisational,enrolment,persists,moderated,carinthia,hatchback,inhibitory,capitalized,anatoly,abstracts,albemarle,bergamo,insolvency,sentai,cellars,walloon,joked,kashmiri,dirac,materialized,renomination,homologous,gusts,eighteens,centrifugal,storied,baluchestan,formula_26,poincare,vettel,infuriated,gauges,streetcars,vedanta,stately,liquidated,goguryeo,swifts,accountancy,levee,acadian,hydropower,eustace,comintern,allotment,designating,torsion,molding,irritation,aerobic,halen,concerted,plantings,garrisoned,gramophone,cytoplasm,onslaught,requisitioned,relieving,genitive,centrist,jeong,espanola,dissolving,chatterjee,sparking,connaught,varese,arjuna,carpathian,empowering,meteorologist,decathlon,opioid,hohenzollern,fenced,ibiza,avionics,footscray,scrum,discounts,filament,directories,a.f.c,stiffness,quaternary,adventurers,transmits,harmonious,taizong,radiating,germantown,ejection,projectors,gaseous,nahuatl,vidyalaya,nightlife,redefined,refuted,destitute,arista,potters,disseminated,distanced,jamboree,kaohsiung,tilted,lakeshore,grained,inflicting,kreis,novelists,descendents,mezzanine,recast,fatah,deregulation,ac/dc,australis,kohgiluyeh,boreal,goths,authoring,intoxicated,nonpartisan,theodosius,pyongyang,shree,boyhood,sanfl,plenipotentiary,photosynthesis,presidium,sinaloa,honshu,texan,avenida,transmembrane,malays,acropolis,catalunya,vases,inconsistencies,methodists,quell,suisse,banat,simcoe,cercle,zealanders,discredited,equine,sages,parthian,fascists,interpolation,classifying,spinoff,yehuda,cruised,gypsum,foaled,wallachia,saraswati,imperialist,seabed,footnotes,nakajima,locales,schoolmaster,drosophila,bridgehead,immanuel,courtier,bookseller,niccolo,stylistically,portmanteau,superleague,konkani,millimetres,arboreal,thanjavur,emulation,sounders,decompression,commoners,infusion,methodological,osage,rococo,anchoring,bayreuth,formula_27,abstracting,symbolized,bayonne,electrolyte,rowed,corvettes,traversing,editorship,sampler,presidio,curzon,adirondack,swahili,rearing,bladed,lemur,pashtun,behaviours,bottling,zaire,recognisable,systematics,leeward,formulae,subdistricts,smithfield,vijaya,buoyancy,boosting,cantonal,rishi,airflow,kamakura,adana,emblems,aquifer,clustering,husayn,woolly,wineries,montessori,turntable,exponentially,caverns,espoused,pianists,vorpommern,vicenza,latterly,o'rourke,williamstown,generale,kosice,duisburg,poirot,marshy,mismanagement,mandalay,dagenham,universes,chiral,radiated,stewards,vegan,crankshaft,kyrgyz,amphibian,cymbals,infrequently,offenbach,environmentalist,repatriated,permutations,midshipmen,loudoun,refereed,bamberg,ornamented,nitric,selim,translational,dorsum,annunciation,gippsland,reflector,informational,regia,reactionary,ahmet,weathering,erlewine,legalized,berne,occupant,divas,manifests,analyzes,disproportionate,mitochondria,totalitarian,paulista,interscope,anarcho,correlate,brookfield,elongate,brunel,ordinal,precincts,volatility,equaliser,hittite,somaliland,ticketing,monochrome,ubuntu,chhattisgarh,titleholder,ranches,referendums,blooms,accommodates,merthyr,religiously,ryukyu,tumultuous,checkpoints,anode,mi'kmaq,cannonball,punctuation,remodelled,assassinations,criminology,alternates,yonge,pixar,namibian,piraeus,trondelag,hautes,lifeboats,shoal,atelier,vehemently,sadat,postcode,jainism,lycoming,undisturbed,lutherans,genomics,popmatters,tabriz,isthmian,notched,autistic,horsham,mites,conseil,bloomsbury,seung,cybertron,idris,overhauled,disbandment,idealized,goldfields,worshippers,lobbyist,ailments,paganism,herbarium,athenians,messerschmitt,faraday,entangled,'olya,untreated,criticising,howitzers,parvati,lobed,debussy,atonement,tadeusz,permeability,mueang,sepals,degli,optionally,fuelled,follies,asterisk,pristina,lewiston,congested,overpass,affixed,pleads,telecasts,stanislaus,cryptographic,friesland,hamstring,selkirk,antisubmarine,inundated,overlay,aggregates,fleur,trolleybus,sagan,ibsen,inductees,beltway,tiled,ladders,cadbury,laplace,ascetic,micronesia,conveying,bellingham,cleft,batches,usaid,conjugation,macedon,assisi,reappointed,brine,jinnah,prairies,screenwriting,oxidized,despatches,linearly,fertilizers,brazilians,absorbs,wagga,modernised,scorsese,ashraf,charlestown,esque,habitable,nizhny,lettres,tuscaloosa,esplanade,coalitions,carbohydrates,legate,vermilion,standardised,galleria,psychoanalytic,rearrangement,substation,competency,nationalised,reshuffle,reconstructions,mehdi,bougainville,receivership,contraception,enlistment,conducive,aberystwyth,solicitors,dismisses,fibrosis,montclair,homeowner,surrealism,s.h.i.e.l.d,peregrine,compilers,1790s,parentage,palmas,rzeszow,worldview,eased,svenska,housemate,bundestag,originator,enlisting,outwards,reciprocity,formula_28,carbohydrate,democratically,firefighting,romagna,acknowledgement,khomeini,carbide,quests,vedas,characteristically,guwahati,brixton,unintended,brothels,parietal,namur,sherbrooke,moldavian,baruch,milieu,undulating,laurier,entre,dijon,ethylene,abilene,heracles,paralleling,ceres,dundalk,falun,auspicious,chisinau,polarity,foreclosure,templates,ojibwe,punic,eriksson,biden,bachchan,glaciation,spitfires,norsk,nonviolent,heidegger,algonquin,capacitance,cassettes,balconies,alleles,airdate,conveys,replays,classifies,infrequent,amine,cuttings,rarer,woking,olomouc,amritsar,rockabilly,illyrian,maoist,poignant,tempore,stalinist,segmented,bandmate,mollusc,muhammed,totalled,byrds,tendered,endogenous,kottayam,aisne,oxidase,overhears,illustrators,verve,commercialization,purplish,directv,moulded,lyttelton,baptismal,captors,saracens,georgios,shorten,polity,grids,fitzwilliam,sculls,impurities,confederations,akhtar,intangible,oscillations,parabolic,harlequin,maulana,ovate,tanzanian,singularity,confiscation,qazvin,speyer,phonemes,overgrown,vicarage,gurion,undocumented,niigata,thrones,preamble,stave,interment,liiga,ataturk,aphrodite,groupe,indentured,habsburgs,caption,utilitarian,ozark,slovenes,reproductions,plasticity,serbo,dulwich,castel,barbuda,salons,feuding,lenape,wikileaks,swamy,breuning,shedding,afield,superficially,operationally,lamented,okanagan,hamadan,accolade,furthering,adolphus,fyodor,abridged,cartoonists,pinkish,suharto,cytochrome,methylation,debit,colspan=9|,refine,taoist,signalled,herding,leaved,bayan,fatherland,rampart,sequenced,negation,storyteller,occupiers,barnabas,pelicans,nadir,conscripted,railcars,prerequisite,furthered,columba,carolinas,markup,gwalior,franche,chaco,eglinton,ramparts,rangoon,metabolites,pollination,croat,televisa,holyoke,testimonial,setlist,safavid,sendai,georgians,shakespearean,galleys,regenerative,krzysztof,overtones,estado,barbary,cherbourg,obispo,sayings,composites,sainsbury,deliberation,cosmological,mahalleh,embellished,ascap,biala,pancras,calumet,grands,canvases,antigens,marianas,defenseman,approximated,seedlings,soren,stele,nuncio,immunology,testimonies,glossary,recollections,suitability,tampere,venous,cohomology,methanol,echoing,ivanovich,warmly,sterilization,imran,multiplying,whitechapel,undersea,xuanzong,tacitus,bayesian,roundhouse,correlations,rioters,molds,fiorentina,bandmates,mezzo,thani,guerilla,200th,premiums,tamils,deepwater,chimpanzees,tribesmen,selwyn,globo,turnovers,punctuated,erode,nouvelle,banbury,exponents,abolishing,helical,maimonides,endothelial,goteborg,infield,encroachment,cottonwood,mazowiecki,parable,saarbrucken,reliever,epistemology,artistes,enrich,rationing,formula_29,palmyra,subfamilies,kauai,zoran,fieldwork,arousal,creditor,friuli,celts,comoros,equated,escalation,negev,tallied,inductive,anion,netanyahu,mesoamerican,lepidoptera,aspirated,remit,westmorland,italic,crosse,vaclav,fuego,owain,balmain,venetians,ethnicities,deflected,ticino,apulia,austere,flycatcher,reprising,repressive,hauptbahnhof,subtype,ophthalmology,summarizes,eniwetok,colonisation,subspace,nymphalidae,earmarked,tempe,burnet,crests,abbots,norwegians,enlarge,ashoka,frankfort,livorno,malware,renters,singly,iliad,moresby,rookies,gustavus,affirming,alleges,legume,chekhov,studded,abdicated,suzhou,isidore,townsite,repayment,quintus,yankovic,amorphous,constructor,narrowing,industrialists,tanganyika,capitalization,connective,mughals,rarities,aerodynamics,worthing,antalya,diagnostics,shaftesbury,thracian,obstetrics,benghazi,multiplier,orbitals,livonia,roscommon,intensify,ravel,oaths,overseer,locomotion,necessities,chickasaw,strathclyde,treviso,erfurt,aortic,contemplation,accrington,markazi,predeceased,hippocampus,whitecaps,assemblyman,incursion,ethnography,extraliga,reproducing,directorship,benzene,byway,stupa,taxable,scottsdale,onondaga,favourably,countermeasures,lithuanians,thatched,deflection,tarsus,consuls,annuity,paralleled,contextual,anglian,klang,hoisted,multilingual,enacting,samaj,taoiseach,carthaginian,apologised,hydrology,entrant,seamless,inflorescences,mugabe,westerners,seminaries,wintering,penzance,mitre,sergeants,unoccupied,delimitation,discriminate,upriver,abortive,nihon,bessarabia,calcareous,buffaloes,patil,daegu,streamline,berks,chaparral,laity,conceptions,typified,kiribati,threaded,mattel,eccentricity,signified,patagonia,slavonia,certifying,adnan,astley,sedition,minimally,enumerated,nikos,goalless,walid,narendra,causa,missoula,coolant,dalek,outcrop,hybridization,schoolchildren,peasantry,afghans,confucianism,shahr,gallic,tajik,kierkegaard,sauvignon,commissar,patriarchs,tuskegee,prussians,laois,ricans,talmudic,officiating,aesthetically,baloch,antiochus,separatists,suzerainty,arafat,shading,u.s.c,chancellors,inc..,toolkit,nepenthes,erebidae,solicited,pratap,kabbalah,alchemist,caltech,darjeeling,biopic,spillway,kaiserslautern,nijmegen,bolstered,neath,pahlavi,eugenics,bureaus,retook,northfield,instantaneous,deerfield,humankind,selectivity,putative,boarders,cornhuskers,marathas,raikkonen,aliabad,mangroves,garages,gulch,karzai,poitiers,chernobyl,thane,alexios,belgrano,scion,solubility,urbanized,executable,guizhou,nucleic,tripled,equalled,harare,houseguests,potency,ghazi,repeater,overarching,regrouped,broward,ragtime,d'art,nandi,regalia,campsites,mamluk,plating,wirral,presumption,zenit,archivist,emmerdale,decepticon,carabidae,kagoshima,franconia,guarani,formalism,diagonally,submarginal,denys,walkways,punts,metrolink,hydrographic,droplets,upperside,martyred,hummingbird,antebellum,curiously,mufti,friary,chabad,czechs,shaykh,reactivity,berklee,turbonilla,tongan,sultans,woodville,unlicensed,enmity,dominicans,operculum,quarrying,watercolour,catalyzed,gatwick,'what,mesozoic,auditors,shizuoka,footballing,haldane,telemundo,appended,deducted,disseminate,o'shea,pskov,abrasive,entente,gauteng,calicut,lemurs,elasticity,suffused,scopula,staining,upholding,excesses,shostakovich,loanwords,naidu,championnat,chromatography,boasting,goaltenders,engulfed,salah,kilogram,morristown,shingles,shi'a,labourer,renditions,frantisek,jekyll,zonal,nanda,sheriffs,eigenvalues,divisione,endorsing,ushered,auvergne,cadres,repentance,freemasons,utilising,laureates,diocletian,semiconductors,o'grady,vladivostok,sarkozy,trackage,masculinity,hydroxyl,mervyn,muskets,speculations,gridiron,opportunistic,mascots,aleutian,fillies,sewerage,excommunication,borrowers,capillary,trending,sydenham,synthpop,rajah,cagayan,deportes,kedah,faure,extremism,michoacan,levski,culminates,occitan,bioinformatics,unknowingly,inciting,emulated,footpaths,piacenza,dreadnought,viceroyalty,oceanographic,scouted,combinatorial,ornithologist,cannibalism,mujahideen,independiente,cilicia,hindwing,minimized,odeon,gyorgy,rubles,purchaser,collieries,kickers,interurban,coiled,lynchburg,respondent,plzen,detractors,etchings,centering,intensification,tomography,ranjit,warblers,retelling,reinstatement,cauchy,modulus,redirected,evaluates,beginner,kalateh,perforated,manoeuvre,scrimmage,internships,megawatts,mottled,haakon,tunbridge,kalyan,summarised,sukarno,quetta,canonized,henryk,agglomeration,coahuila,diluted,chiropractic,yogyakarta,talladega,sheik,cation,halting,reprisals,sulfuric,musharraf,sympathizers,publicised,arles,lectionary,fracturing,startups,sangha,latrobe,rideau,ligaments,blockading,cremona,lichens,fabaceae,modulated,evocative,embodies,battersea,indistinct,altai,subsystem,acidity,somatic,formula_30,tariq,rationality,sortie,ashlar,pokal,cytoplasmic,valour,bangla,displacing,hijacking,spectrometry,westmeath,weill,charing,goias,revolvers,individualized,tenured,nawaz,piquet,chanted,discard,bernd,phalanx,reworking,unilaterally,subclass,yitzhak,piloting,circumvent,disregarded,semicircular,viscous,tibetans,endeavours,retaliated,cretan,vienne,workhouse,sufficiency,aurangzeb,legalization,lipids,expanse,eintracht,sanjak,megas,125th,bahraini,yakima,eukaryotes,thwart,affirmation,peloponnese,retailing,carbonyl,chairwoman,macedonians,dentate,rockaway,correctness,wealthier,metamorphic,aragonese,fermanagh,pituitary,schrodinger,evokes,spoiler,chariots,akita,genitalia,combe,confectionery,desegregation,experiential,commodores,persepolis,viejo,restorations,virtualization,hispania,printmaking,stipend,yisrael,theravada,expended,radium,tweeted,polygonal,lippe,charente,leveraged,cutaneous,fallacy,fragrant,bypasses,elaborately,rigidity,majid,majorca,kongo,plasmodium,skits,audiovisual,eerste,staircases,prompts,coulthard,northwestward,riverdale,beatrix,copyrights,prudential,communicates,mated,obscenity,asynchronous,analyse,hansa,searchlight,farnborough,patras,asquith,qarah,contours,fumbled,pasteur,redistributed,almeria,sanctuaries,jewry,israelite,clinicians,koblenz,bookshop,affective,goulburn,panelist,sikorsky,cobham,mimics,ringed,portraiture,probabilistic,girolamo,intelligible,andalusian,jalal,athenaeum,eritrean,auxiliaries,pittsburg,devolution,sangam,isolating,anglers,cronulla,annihilated,kidderminster,synthesize,popularised,theophilus,bandstand,innumerable,chagrin,retroactively,weser,multiples,birdlife,goryeo,pawnee,grosser,grappling,tactile,ahmadinejad,turboprop,erdogan,matchday,proletarian,adhering,complements,austronesian,adverts,luminaries,archeology,impressionism,conifer,sodomy,interracial,platoons,lessen,postings,pejorative,registrations,cookery,persecutions,microbes,audits,idiosyncratic,subsp,suspensions,restricts,colouring,ratify,instrumentals,nucleotides,sulla,posits,bibliotheque,diameters,oceanography,instigation,subsumed,submachine,acceptor,legation,borrows,sedge,discriminated,loaves,insurers,highgate,detectable,abandons,kilns,sportscaster,harwich,iterations,preakness,arduous,tensile,prabhu,shortwave,philologist,shareholding,vegetative,complexities,councilors,distinctively,revitalize,automaton,amassing,montreux,khanh,surabaya,nurnberg,pernambuco,cuisines,charterhouse,firsts,tercera,inhabitant,homophobia,naturalism,einar,powerplant,coruna,entertainments,whedon,rajputs,raton,democracies,arunachal,oeuvre,wallonia,jeddah,trolleybuses,evangelism,vosges,kiowa,minimise,encirclement,undertakes,emigrant,beacons,deepened,grammars,publius,preeminent,seyyed,repechage,crafting,headingley,osteopathic,lithography,hotly,bligh,inshore,betrothed,olympians,formula_31,dissociation,trivandrum,arran,petrovic,stettin,disembarked,simplification,bronzes,philo,acrobatic,jonsson,conjectured,supercharged,kanto,detects,cheeses,correlates,harmonics,lifecycle,sudamericana,reservists,decayed,elitserien,parametric,113th,dusky,hogarth,modulo,symbiotic,monopolies,discontinuation,converges,southerners,tucuman,eclipses,enclaves,emits,famicom,caricatures,artistically,levelled,mussels,erecting,mouthparts,cunard,octaves,crucible,guardia,unusable,lagrangian,droughts,ephemeral,pashto,canis,tapering,sasebo,silurian,metallurgical,outscored,evolves,reissues,sedentary,homotopy,greyhawk,reagents,inheriting,onshore,tilting,rebuffed,reusable,naturalists,basingstoke,insofar,offensives,dravidian,curators,planks,rajan,isoforms,flagstaff,preside,globular,egalitarian,linkages,biographers,goalscorers,molybdenum,centralised,nordland,jurists,ellesmere,rosberg,hideyoshi,restructure,biases,borrower,scathing,redress,tunnelling,workflow,magnates,mahendra,dissenters,plethora,transcriptions,handicrafts,keyword,xi'an,petrograd,unser,prokofiev,90deg,madan,bataan,maronite,kearny,carmarthen,termini,consulates,disallowed,rockville,bowery,fanzine,docklands,bests,prohibitions,yeltsin,selassie,naturalization,realisation,dispensary,tribeca,abdulaziz,pocahontas,stagnation,pamplona,cuneiform,propagating,subsurface,christgau,epithelium,schwerin,lynching,routledge,hanseatic,upanishad,glebe,yugoslavian,complicity,endowments,girona,mynetworktv,entomology,plinth,ba'ath,supercup,torus,akkadian,salted,englewood,commandery,belgaum,prefixed,colorless,dartford,enthroned,caesarea,nominative,sandown,safeguards,hulled,formula_32,leamington,dieppe,spearhead,generalizations,demarcation,llanelli,masque,brickwork,recounting,sufism,strikingly,petrochemical,onslow,monologues,emigrating,anderlecht,sturt,hossein,sakhalin,subduction,novices,deptford,zanjan,airstrikes,coalfield,reintroduction,timbaland,hornby,messianic,stinging,universalist,situational,radiocarbon,strongman,rowling,saloons,traffickers,overran,fribourg,cambrai,gravesend,discretionary,finitely,archetype,assessor,pilipinas,exhumed,invocation,interacted,digitized,timisoara,smelter,teton,sexism,precepts,srinagar,pilsudski,carmelite,hanau,scoreline,hernando,trekking,blogging,fanbase,wielded,vesicles,nationalization,banja,rafts,motoring,luang,takeda,girder,stimulates,histone,sunda,nanoparticles,attains,jumpers,catalogued,alluding,pontus,ancients,examiners,shinkansen,ribbentrop,reimbursement,pharmacological,ramat,stringed,imposes,cheaply,transplanted,taiping,mizoram,looms,wallabies,sideman,kootenay,encased,sportsnet,revolutionized,tangier,benthic,runic,pakistanis,heatseekers,shyam,mishnah,presbyterians,stadt,sutras,straddles,zoroastrian,infer,fueling,gymnasts,ofcom,gunfight,journeyman,tracklist,oshawa,ps500,pa'in,mackinac,xiongnu,mississippian,breckinridge,freemason,bight,autoroute,liberalization,distantly,thrillers,solomons,presumptive,romanization,anecdotal,bohemians,unpaved,milder,concurred,spinners,alphabets,strenuous,rivieres,kerrang,mistreatment,dismounted,intensively,carlist,dancehall,shunting,pluralism,trafficked,brokered,bonaventure,bromide,neckar,designates,malian,reverses,sotheby,sorghum,serine,environmentalists,languedoc,consulship,metering,bankstown,handlers,militiamen,conforming,regularity,pondicherry,armin,capsized,consejo,capitalists,drogheda,granular,purged,acadians,endocrine,intramural,elicit,terns,orientations,miklos,omitting,apocryphal,slapstick,brecon,pliocene,affords,typography,emigre,tsarist,tomasz,beset,nishi,necessitating,encyclical,roleplaying,journeyed,inflow,sprints,progressives,novosibirsk,cameroonian,ephesus,speckled,kinshasa,freiherr,burnaby,dalmatian,torrential,rigor,renegades,bhakti,nurburgring,cosimo,convincingly,reverting,visayas,lewisham,charlottetown,charadriiformesfamily,transferable,jodhpur,converters,deepening,camshaft,underdeveloped,protease,polonia,uterine,quantify,tobruk,dealerships,narasimha,fortran,inactivity,1780s,victors,categorised,naxos,workstation,skink,sardinian,chalice,precede,dammed,sondheim,phineas,tutored,sourcing,uncompromising,placer,tyneside,courtiers,proclaims,pharmacies,hyogo,booksellers,sengoku,kursk,spectrometer,countywide,wielkopolski,bobsleigh,shetty,llywelyn,consistory,heretics,guinean,cliches,individualism,monolithic,imams,usability,bursa,deliberations,railings,torchwood,inconsistency,balearic,stabilizer,demonstrator,facet,radioactivity,outboard,educates,d'oyly,heretical,handover,jurisdictional,shockwave,hispaniola,conceptually,routers,unaffiliated,trentino,formula_33,cypriots,intervenes,neuchatel,formulating,maggiore,delisted,alcohols,thessaly,potable,estimator,suborder,fluency,mimicry,clergymen,infrastructures,rivals.com,baroda,subplot,majlis,plano,clinching,connotation,carinae,savile,intercultural,transcriptional,sandstones,ailerons,annotations,impresario,heinkel,scriptural,intermodal,astrological,ribbed,northeastward,posited,boers,utilise,kalmar,phylum,breakwater,skype,textured,guideline,azeri,rimini,massed,subsidence,anomalous,wolfsburg,polyphonic,accrediting,vodacom,kirov,captaining,kelantan,logie,fervent,eamon,taper,bundeswehr,disproportionately,divination,slobodan,pundits,hispano,kinetics,reunites,makati,ceasing,statistician,amending,chiltern,eparchy,riverine,melanoma,narragansett,pagans,raged,toppled,breaching,zadar,holby,dacian,ochre,velodrome,disparities,amphoe,sedans,webpage,williamsport,lachlan,groton,baring,swastika,heliport,unwillingness,razorbacks,exhibitors,foodstuffs,impacting,tithe,appendages,dermot,subtypes,nurseries,balinese,simulating,stary,remakes,mundi,chautauqua,geologically,stockade,hakka,dilute,kalimantan,pahang,overlapped,fredericton,baha'u'llah,jahangir,damping,benefactors,shomali,triumphal,cieszyn,paradigms,shielded,reggaeton,maharishi,zambian,shearing,golestan,mirroring,partitioning,flyover,songbook,incandescent,merrimack,huguenots,sangeet,vulnerabilities,trademarked,drydock,tantric,honoris,queenstown,labelling,iterative,enlists,statesmen,anglicans,herge,qinghai,burgundian,islami,delineated,zhuge,aggregated,banknote,qatari,suitably,tapestries,asymptotic,charleroi,majorities,pyramidellidae,leanings,climactic,tahir,ramsar,suppressor,revisionist,trawler,ernakulam,penicillium,categorization,slits,entitlement,collegium,earths,benefice,pinochet,puritans,loudspeaker,stockhausen,eurocup,roskilde,alois,jaroslav,rhondda,boutiques,vigor,neurotransmitter,ansar,malden,ferdinando,sported,relented,intercession,camberwell,wettest,thunderbolts,positional,oriel,cloverleaf,penalized,shoshone,rajkumar,completeness,sharjah,chromosomal,belgians,woolen,ultrasonic,sequentially,boleyn,mordella,microsystems,initiator,elachista,mineralogy,rhododendron,integrals,compostela,hamza,sawmills,stadio,berlioz,maidens,stonework,yachting,tappeh,myocardial,laborer,workstations,costumed,nicaea,lanark,roundtable,mashhad,nablus,algonquian,stuyvesant,sarkar,heroines,diwan,laments,intonation,intrigues,almaty,feuded,grandes,algarve,rehabilitate,macrophages,cruciate,dismayed,heuristic,eliezer,kozhikode,covalent,finalised,dimorphism,yaroslavl,overtaking,leverkusen,middlebury,feeders,brookings,speculates,insoluble,lodgings,jozsef,cysteine,shenyang,habilitation,spurious,brainchild,mtdna,comique,albedo,recife,partick,broadening,shahi,orientated,himalaya,swabia,palme,mennonites,spokeswoman,conscripts,sepulchre,chartres,eurozone,scaffold,invertebrate,parishad,bagan,heian,watercolors,basse,supercomputer,commences,tarragona,plainfield,arthurian,functor,identically,murex,chronicling,pressings,burrowing,histoire,guayaquil,goalkeeping,differentiable,warburg,machining,aeneas,kanawha,holocene,ramesses,reprisal,qingdao,avatars,turkestan,cantatas,besieging,repudiated,teamsters,equipping,hydride,ahmadiyya,euston,bottleneck,computations,terengganu,kalinga,stela,rediscovery,'this,azhar,stylised,karelia,polyethylene,kansai,motorised,lounges,normalization,calculators,1700s,goalkeepers,unfolded,commissary,cubism,vignettes,multiverse,heaters,briton,sparingly,childcare,thorium,plock,riksdag,eunuchs,catalysis,limassol,perce,uncensored,whitlam,ulmus,unites,mesopotamian,refraction,biodiesel,forza,fulda,unseated,mountbatten,shahrak,selenium,osijek,mimicking,antimicrobial,axons,simulcasting,donizetti,swabian,sportsmen,hafiz,neared,heraclius,locates,evaded,subcarpathian,bhubaneswar,negeri,jagannath,thaksin,aydin,oromo,lateran,goldsmiths,multiculturalism,cilia,mihai,evangelists,lorient,qajar,polygons,vinod,mechanised,anglophone,prefabricated,mosses,supervillain,airliners,biofuels,iodide,innovators,valais,wilberforce,logarithm,intelligentsia,dissipation,sanctioning,duchies,aymara,porches,simulators,mostar,telepathic,coaxial,caithness,burghs,fourths,stratification,joaquim,scribes,meteorites,monarchist,germination,vries,desiring,replenishment,istria,winemaking,tammany,troupes,hetman,lanceolate,pelagic,triptych,primeira,scant,outbound,hyphae,denser,bentham,basie,normale,executes,ladislaus,kontinental,herat,cruiserweight,activision,customization,manoeuvres,inglewood,northwood,waveform,investiture,inpatient,alignments,kiryat,rabat,archimedes,ustad,monsanto,archetypal,kirkby,sikhism,correspondingly,catskill,overlaid,petrels,widowers,unicameral,federalists,metalcore,gamerankings,mussel,formula_34,lymphocytes,cystic,southgate,vestiges,immortals,kalam,strove,amazons,pocono,sociologists,sopwith,adheres,laurens,caregivers,inspecting,transylvanian,rebroadcast,rhenish,miserables,pyrams,blois,newtonian,carapace,redshirt,gotland,nazir,unilever,distortions,linebackers,federalism,mombasa,lumen,bernoulli,favouring,aligarh,denounce,steamboats,dnieper,stratigraphic,synths,bernese,umass,icebreaker,guanajuato,heisenberg,boldly,diodes,ladakh,dogmatic,scriptwriter,maritimes,battlestar,symposia,adaptable,toluca,bhavan,nanking,ieyasu,picardy,soybean,adalbert,brompton,deutsches,brezhnev,glandular,laotian,hispanicized,ibadan,personification,dalit,yamuna,regio,dispensed,yamagata,zweibrucken,revising,fandom,stances,participle,flavours,khitan,vertebral,crores,mayaguez,dispensation,guntur,undefined,harpercollins,unionism,meena,leveling,philippa,refractory,telstra,judea,attenuation,pylons,elaboration,elegy,edging,gracillariidae,residencies,absentia,reflexive,deportations,dichotomy,stoves,sanremo,shimon,menachem,corneal,conifers,mordellidae,facsimile,diagnoses,cowper,citta,viticulture,divisive,riverview,foals,mystics,polyhedron,plazas,airspeed,redgrave,motherland,impede,multiplicity,barrichello,airships,pharmacists,harvester,clays,payloads,differentiating,popularize,caesars,tunneling,stagnant,circadian,indemnity,sensibilities,musicology,prefects,serfs,metra,lillehammer,carmarthenshire,kiosks,welland,barbican,alkyl,tillandsia,gatherers,asociacion,showings,bharati,brandywine,subversion,scalable,pfizer,dawla,barium,dardanelles,nsdap,konig,ayutthaya,hodgkin,sedimentation,completions,purchasers,sponsorships,maximizing,banked,taoism,minot,enrolls,fructose,aspired,capuchin,outages,artois,carrollton,totality,osceola,pawtucket,fontainebleau,converged,queretaro,competencies,botha,allotments,sheaf,shastri,obliquely,banding,catharines,outwardly,monchengladbach,driest,contemplative,cassini,ranga,pundit,kenilworth,tiananmen,disulfide,formula_35,townlands,codice_3,looping,caravans,rachmaninoff,segmentation,fluorine,anglicised,gnostic,dessau,discern,reconfigured,altrincham,rebounding,battlecruiser,ramblers,1770s,convective,triomphe,miyagi,mourners,instagram,aloft,breastfeeding,courtyards,folkestone,changsha,kumamoto,saarland,grayish,provisionally,appomattox,uncial,classicism,mahindra,elapsed,supremes,monophyletic,cautioned,formula_36,noblewoman,kernels,sucre,swaps,bengaluru,grenfell,epicenter,rockhampton,worshipful,licentiate,metaphorical,malankara,amputated,wattle,palawan,tankobon,nobunaga,polyhedra,transduction,jilin,syrians,affinities,fluently,emanating,anglicized,sportscar,botanists,altona,dravida,chorley,allocations,kunming,luanda,premiering,outlived,mesoamerica,lingual,dissipating,impairments,attenborough,balustrade,emulator,bakhsh,cladding,increments,ascents,workington,qal'eh,winless,categorical,petrel,emphasise,dormer,toros,hijackers,telescopic,solidly,jankovic,cession,gurus,madoff,newry,subsystems,northside,talib,englishmen,farnese,holographic,electives,argonne,scrivener,predated,brugge,nauvoo,catalyses,soared,siddeley,graphically,powerlifting,funicular,sungai,coercive,fusing,uncertainties,locos,acetic,diverge,wedgwood,dressings,tiebreaker,didactic,vyacheslav,acreage,interplanetary,battlecruisers,sunbury,alkaloids,hairpin,automata,wielkie,interdiction,plugins,monkees,nudibranch,esporte,approximations,disabling,powering,characterisation,ecologically,martinsville,termen,perpetuated,lufthansa,ascendancy,motherboard,bolshoi,athanasius,prunus,dilution,invests,nonzero,mendocino,charan,banque,shaheed,counterculture,unita,voivode,hospitalization,vapour,supermarine,resistor,steppes,osnabruck,intermediates,benzodiazepines,sunnyside,privatized,geopolitical,ponta,beersheba,kievan,embody,theoretic,sangh,cartographer,blige,rotors,thruway,battlefields,discernible,demobilized,broodmare,colouration,sagas,policymakers,serialization,augmentation,hoare,frankfurter,transnistria,kinases,detachable,generational,converging,antiaircraft,khaki,bimonthly,coadjutor,arkhangelsk,kannur,buffers,livonian,northwich,enveloped,cysts,yokozuna,herne,beeching,enron,virginian,woollen,excepting,competitively,outtakes,recombinant,hillcrest,clearances,pathe,cumbersome,brasov,u.s.a,likud,christiania,cruciform,hierarchies,wandsworth,lupin,resins,voiceover,sitar,electrochemical,mediacorp,typhus,grenadiers,hepatic,pompeii,weightlifter,bosniak,oxidoreductase,undersecretary,rescuers,ranji,seleucid,analysing,exegesis,tenancy,toure,kristiansand,110th,carillon,minesweepers,poitou,acceded,palladian,redevelop,naismith,rifled,proletariat,shojo,hackensack,harvests,endpoint,kuban,rosenborg,stonehenge,authorisation,jacobean,revocation,compatriots,colliding,undetermined,okayama,acknowledgment,angelou,fresnel,chahar,ethereal,mg/kg,emmet,mobilised,unfavourable,cultura,characterizing,parsonage,skeptics,expressways,rabaul,medea,guardsmen,visakhapatnam,caddo,homophobic,elmwood,encircling,coexistence,contending,seljuk,mycologist,infertility,moliere,insolvent,covenants,underpass,holme,landesliga,workplaces,delinquency,methamphetamine,contrived,tableau,tithes,overlying,usurped,contingents,spares,oligocene,molde,beatification,mordechai,balloting,pampanga,navigators,flowered,debutant,codec,orogeny,newsletters,solon,ambivalent,ubisoft,archdeaconry,harpers,kirkus,jabal,castings,kazhagam,sylhet,yuwen,barnstaple,amidships,causative,isuzu,watchtower,granules,canaveral,remuneration,insurer,payout,horizonte,integrative,attributing,kiwis,skanderbeg,asymmetry,gannett,urbanism,disassembled,unaltered,precluded,melodifestivalen,ascends,plugin,gurkha,bisons,stakeholder,industrialisation,abbotsford,sextet,bustling,uptempo,slavia,choreographers,midwives,haram,javed,gazetteer,subsection,natively,weighting,lysine,meera,redbridge,muchmusic,abruzzo,adjoins,unsustainable,foresters,kbit/s,cosmopterigidae,secularism,poetics,causality,phonograph,estudiantes,ceausescu,universitario,adjoint,applicability,gastropods,nagaland,kentish,mechelen,atalanta,woodpeckers,lombards,gatineau,romansh,avraham,acetylcholine,perturbation,galois,wenceslaus,fuzhou,meandering,dendritic,sacristy,accented,katha,therapeutics,perceives,unskilled,greenhouses,analogues,chaldean,timbre,sloped,volodymyr,sadiq,maghreb,monogram,rearguard,caucuses,mures,metabolite,uyezd,determinism,theosophical,corbet,gaels,disruptions,bicameral,ribosomal,wolseley,clarksville,watersheds,tarsi,radon,milanese,discontinuous,aristotelian,whistleblower,representational,hashim,modestly,localised,atrial,hazara,ravana,troyes,appointees,rubus,morningside,amity,aberdare,ganglia,wests,zbigniew,aerobatic,depopulated,corsican,introspective,twinning,hardtop,shallower,cataract,mesolithic,emblematic,graced,lubrication,republicanism,voronezh,bastions,meissen,irkutsk,oboes,hokkien,sprites,tenet,individualist,capitulated,oakville,dysentery,orientalist,hillsides,keywords,elicited,incised,lagging,apoel,lengthening,attractiveness,marauders,sportswriter,decentralization,boltzmann,contradicts,draftsman,precipitate,solihull,norske,consorts,hauptmann,riflemen,adventists,syndromes,demolishing,customize,continuo,peripherals,seamlessly,linguistically,bhushan,orphanages,paraul,lessened,devanagari,quarto,responders,patronymic,riemannian,altoona,canonization,honouring,geodetic,exemplifies,republica,enzymatic,porters,fairmount,pampa,sufferers,kamchatka,conjugated,coachella,uthman,repositories,copious,headteacher,awami,phoneme,homomorphism,franconian,moorland,davos,quantified,kamloops,quarks,mayoralty,weald,peacekeepers,valerian,particulate,insiders,perthshire,caches,guimaraes,piped,grenadines,kosciuszko,trombonist,artemisia,covariance,intertidal,soybeans,beatified,ellipse,fruiting,deafness,dnipropetrovsk,accrued,zealous,mandala,causation,junius,kilowatt,bakeries,montpelier,airdrie,rectified,bungalows,toleration,debian,pylon,trotskyist,posteriorly,two-and-a-half,herbivorous,islamists,poetical,donne,wodehouse,frome,allium,assimilate,phonemic,minaret,unprofitable,darpa,untenable,leaflet,bitcoin,zahir,thresholds,argentino,jacopo,bespoke,stratified,wellbeing,shiite,basaltic,timberwolves,secrete,taunts,marathons,isomers,carre,consecrators,penobscot,pitcairn,sakha,crosstown,inclusions,impassable,fenders,indre,uscgc,jordi,retinue,logarithmic,pilgrimages,railcar,cashel,blackrock,macroscopic,aligning,tabla,trestle,certify,ronson,palps,dissolves,thickened,silicate,taman,walsingham,hausa,lowestoft,rondo,oleksandr,cuyahoga,retardation,countering,cricketing,holborn,identifiers,hells,geophysics,infighting,sculpting,balaji,webbed,irradiation,runestone,trusses,oriya,sojourn,forfeiture,colonize,exclaimed,eucharistic,lackluster,glazing,northridge,gutenberg,stipulates,macroeconomic,priori,outermost,annular,udinese,insulating,headliner,godel,polytope,megalithic,salix,sharapova,derided,muskegon,braintree,plateaus,confers,autocratic,isomer,interstitial,stamping,omits,kirtland,hatchery,evidences,intifada,111th,podgorica,capua,motivating,nuneaton,jakub,korsakov,amitabh,mundial,monrovia,gluten,predictor,marshalling,d'orleans,levers,touchscreen,brantford,fricative,banishment,descendent,antagonism,ludovico,loudspeakers,formula_37,livelihoods,manassas,steamships,dewsbury,uppermost,humayun,lures,pinnacles,dependents,lecce,clumps,observatories,paleozoic,dedicating,samiti,draughtsman,gauls,incite,infringing,nepean,pythagorean,convents,triumvirate,seigneur,gaiman,vagrant,fossa,byproduct,serrated,renfrewshire,sheltering,achaemenid,dukedom,catchers,sampdoria,platelet,bielefeld,fluctuating,phenomenology,strikeout,ethnology,prospectors,woodworking,tatra,wildfires,meditations,agrippa,fortescue,qureshi,wojciech,methyltransferase,accusative,saatchi,amerindian,volcanism,zeeland,toyama,vladimirovich,allege,polygram,redox,budgeted,advisories,nematode,chipset,starscream,tonbridge,hardening,shales,accompanist,paraded,phonographic,whitefish,sportive,audiobook,kalisz,hibernation,latif,duels,ps200,coxeter,nayak,safeguarding,cantabria,minesweeping,zeiss,dunams,catholicos,sawtooth,ontological,nicobar,bridgend,unclassified,intrinsically,hanoverian,rabbitohs,kenseth,alcalde,northumbrian,raritan,septuagint,presse,sevres,origen,dandenong,peachtree,intersected,impeded,usages,hippodrome,novara,trajectories,customarily,yardage,inflected,yanow,kalan,taverns,liguria,librettist,intermarriage,1760s,courant,gambier,infanta,ptolemaic,ukulele,haganah,sceptical,manchukuo,plexus,implantation,hilal,intersex,efficiencies,arbroath,hagerstown,adelphi,diario,marais,matti,lifes,coining,modalities,divya,bletchley,conserving,ivorian,mithridates,generative,strikeforce,laymen,toponymy,pogrom,satya,meticulously,agios,dufferin,yaakov,fortnightly,cargoes,deterrence,prefrontal,przemysl,mitterrand,commemorations,chatsworth,gurdwara,abuja,chakraborty,badajoz,geometries,artiste,diatonic,ganglion,presides,marymount,nanak,cytokines,feudalism,storks,rowers,widens,politico,evangelicals,assailants,pittsfield,allowable,bijapur,telenovelas,dichomeris,glenelg,herbivores,keita,inked,radom,fundraisers,constantius,boheme,portability,komnenos,crystallography,derrida,moderates,tavistock,fateh,spacex,disjoint,bristles,commercialized,interwoven,empirically,regius,bulacan,newsday,showa,radicalism,yarrow,pleura,sayed,structuring,cotes,reminiscences,acetyl,edicts,escalators,aomori,encapsulated,legacies,bunbury,placings,fearsome,postscript,powerfully,keighley,hildesheim,amicus,crevices,deserters,benelux,aurangabad,freeware,ioannis,carpathians,chirac,seceded,prepaid,landlocked,naturalised,yanukovych,soundscan,blotch,phenotypic,determinants,twente,dictatorial,giessen,composes,recherche,pathophysiology,inventories,ayurveda,elevating,gravestone,degeneres,vilayet,popularizing,spartanburg,bloemfontein,previewed,renunciation,genotype,ogilvy,tracery,blacklisted,emissaries,diploid,disclosures,tupolev,shinjuku,antecedents,pennine,braganza,bhattacharya,countable,spectroscopic,ingolstadt,theseus,corroborated,compounding,thrombosis,extremadura,medallions,hasanabad,lambton,perpetuity,glycol,besancon,palaiologos,pandey,caicos,antecedent,stratum,laserdisc,novitiate,crowdfunding,palatal,sorceress,dassault,toughness,celle,cezanne,vientiane,tioga,hander,crossbar,gisborne,cursor,inspectorate,serif,praia,sphingidae,nameplate,psalter,ivanovic,sitka,equalised,mutineers,sergius,outgrowth,creationism,haredi,rhizomes,predominate,undertakings,vulgate,hydrothermal,abbeville,geodesic,kampung,physiotherapy,unauthorised,asteraceae,conservationist,minoan,supersport,mohammadabad,cranbrook,mentorship,legitimately,marshland,datuk,louvain,potawatomi,carnivores,levies,lyell,hymnal,regionals,tinto,shikoku,conformal,wanganui,beira,lleida,standstill,deloitte,formula_40,corbusier,chancellery,mixtapes,airtime,muhlenberg,formula_39,bracts,thrashers,prodigious,gironde,chickamauga,uyghurs,substitutions,pescara,batangas,gregarious,gijon,paleo,mathura,pumas,proportionally,hawkesbury,yucca,kristiania,funimation,fluted,eloquence,mohun,aftermarket,chroniclers,futurist,nonconformist,branko,mannerisms,lesnar,opengl,altos,retainers,ashfield,shelbourne,sulaiman,divisie,gwent,locarno,lieder,minkowski,bivalve,redeployed,cartography,seaway,bookings,decays,ostend,antiquaries,pathogenesis,formula_38,chrysalis,esperance,valli,motogp,homelands,bridged,bloor,ghazal,vulgaris,baekje,prospector,calculates,debtors,hesperiidae,titian,returner,landgrave,frontenac,kelowna,pregame,castelo,caius,canoeist,watercolours,winterthur,superintendents,dissonance,dubstep,adorn,matic,salih,hillel,swordsman,flavoured,emitter,assays,monongahela,deeded,brazzaville,sufferings,babylonia,fecal,umbria,astrologer,gentrification,frescos,phasing,zielona,ecozone,candido,manoj,quadrilateral,gyula,falsetto,prewar,puntland,infinitive,contraceptive,bakhtiari,ohrid,socialization,tailplane,evoking,havelock,macapagal,plundering,104th,keynesian,templars,phrasing,morphologically,czestochowa,humorously,catawba,burgas,chiswick,ellipsoid,kodansha,inwards,gautama,katanga,orthopaedic,heilongjiang,sieges,outsourced,subterminal,vijayawada,hares,oration,leitrim,ravines,manawatu,cryogenic,tracklisting,about.com,ambedkar,degenerated,hastened,venturing,lobbyists,shekhar,typefaces,northcote,rugen,'good,ornithology,asexual,hemispheres,unsupported,glyphs,spoleto,epigenetic,musicianship,donington,diogo,kangxi,bisected,polymorphism,megawatt,salta,embossed,cheetahs,cruzeiro,unhcr,aristide,rayleigh,maturing,indonesians,noire,llano,ffffff,camus,purges,annales,convair,apostasy,algol,phage,apaches,marketers,aldehyde,pompidou,kharkov,forgeries,praetorian,divested,retrospectively,gornji,scutellum,bitumen,pausanias,magnification,imitations,nyasaland,geographers,floodlights,athlone,hippolyte,expositions,clarinetist,razak,neutrinos,rotax,sheykh,plush,interconnect,andalus,cladogram,rudyard,resonator,granby,blackfriars,placido,windscreen,sahel,minamoto,haida,cations,emden,blackheath,thematically,blacklist,pawel,disseminating,academical,undamaged,raytheon,harsher,powhatan,ramachandran,saddles,paderborn,capping,zahra,prospecting,glycine,chromatin,profane,banska,helmand,okinawan,dislocation,oscillators,insectivorous,foyle,gilgit,autonomic,tuareg,sluice,pollinated,multiplexed,granary,narcissus,ranchi,staines,nitra,goalscoring,midwifery,pensioners,algorithmic,meetinghouse,biblioteca,besar,narva,angkor,predate,lohan,cyclical,detainee,occipital,eventing,faisalabad,dartmoor,kublai,courtly,resigns,radii,megachilidae,cartels,shortfall,xhosa,unregistered,benchmarks,dystopian,bulkhead,ponsonby,jovanovic,accumulates,papuan,bhutanese,intuitively,gotaland,headliners,recursion,dejan,novellas,diphthongs,imbued,withstood,analgesic,amplify,powertrain,programing,maidan,alstom,affirms,eradicated,summerslam,videogame,molla,severing,foundered,gallium,atmospheres,desalination,shmuel,howmeh,catolica,bossier,reconstructing,isolates,lyase,tweets,unconnected,tidewater,divisible,cohorts,orebro,presov,furnishing,folklorist,simplifying,centrale,notations,factorization,monarchies,deepen,macomb,facilitation,hennepin,declassified,redrawn,microprocessors,preliminaries,enlarging,timeframe,deutschen,shipbuilders,patiala,ferrous,aquariums,genealogies,vieux,unrecognized,bridgwater,tetrahedral,thule,resignations,gondwana,registries,agder,dataset,felled,parva,analyzer,worsen,coleraine,columella,blockaded,polytechnique,reassembled,reentry,narvik,greys,nigra,knockouts,bofors,gniezno,slotted,hamasaki,ferrers,conferring,thirdly,domestication,photojournalist,universality,preclude,ponting,halved,thereupon,photosynthetic,ostrava,mismatch,pangasinan,intermediaries,abolitionists,transited,headings,ustase,radiological,interconnection,dabrowa,invariants,honorius,preferentially,chantilly,marysville,dialectical,antioquia,abstained,gogol,dirichlet,muricidae,symmetries,reproduces,brazos,fatwa,bacillus,ketone,paribas,chowk,multiplicative,dermatitis,mamluks,devotes,adenosine,newbery,meditative,minefields,inflection,oxfam,conwy,bystrica,imprints,pandavas,infinitesimal,conurbation,amphetamine,reestablish,furth,edessa,injustices,frankston,serjeant,4x200,khazar,sihanouk,longchamp,stags,pogroms,coups,upperparts,endpoints,infringed,nuanced,summing,humorist,pacification,ciaran,jamaat,anteriorly,roddick,springboks,faceted,hypoxia,rigorously,cleves,fatimid,ayurvedic,tabled,ratna,senhora,maricopa,seibu,gauguin,holomorphic,campgrounds,amboy,coordinators,ponderosa,casemates,ouachita,nanaimo,mindoro,zealander,rimsky,cluny,tomaszow,meghalaya,caetano,tilak,roussillon,landtag,gravitation,dystrophy,cephalopods,trombones,glens,killarney,denominated,anthropogenic,pssas,roubaix,carcasses,montmorency,neotropical,communicative,rabindranath,ordinated,separable,overriding,surged,sagebrush,conciliation,codice_4,durrani,phosphatase,qadir,votive,revitalized,taiyuan,tyrannosaurus,graze,slovaks,nematodes,environmentalism,blockhouse,illiteracy,schengen,ecotourism,alternation,conic,wields,hounslow,blackfoot,kwame,ambulatory,volhynia,hordaland,croton,piedras,rohit,drava,conceptualized,birla,illustrative,gurgaon,barisal,tutsi,dezong,nasional,polje,chanson,clarinets,krasnoyarsk,aleksandrovich,cosmonaut,d'este,palliative,midseason,silencing,wardens,durer,girders,salamanders,torrington,supersonics,lauda,farid,circumnavigation,embankments,funnels,bajnoksag,lorries,cappadocia,jains,warringah,retirees,burgesses,equalization,cusco,ganesan,algal,amazonian,lineups,allocating,conquerors,usurper,mnemonic,predating,brahmaputra,ahmadabad,maidenhead,numismatic,subregion,encamped,reciprocating,freebsd,irgun,tortoises,governorates,zionists,airfoil,collated,ajmer,fiennes,etymological,polemic,chadian,clerestory,nordiques,fluctuated,calvados,oxidizing,trailhead,massena,quarrels,dordogne,tirunelveli,pyruvate,pulsed,athabasca,sylar,appointee,serer,japonica,andronikos,conferencing,nicolaus,chemin,ascertained,incited,woodbine,helices,hospitalised,emplacements,to/from,orchestre,tyrannical,pannonia,methodism,pop/rock,shibuya,berbers,despot,seaward,westpac,separator,perpignan,alamein,judeo,publicize,quantization,ethniki,gracilis,menlo,offside,oscillating,unregulated,succumbing,finnmark,metrical,suleyman,raith,sovereigns,bundesstrasse,kartli,fiduciary,darshan,foramen,curler,concubines,calvinism,larouche,bukhara,sophomores,mohanlal,lutheranism,monomer,eamonn,'black,uncontested,immersive,tutorials,beachhead,bindings,permeable,postulates,comite,transformative,indiscriminate,hofstra,associacao,amarna,dermatology,lapland,aosta,babur,unambiguous,formatting,schoolboys,gwangju,superconducting,replayed,adherent,aureus,compressors,forcible,spitsbergen,boulevards,budgeting,nossa,annandale,perumal,interregnum,sassoon,kwajalein,greenbrier,caldas,triangulation,flavius,increment,shakhtar,nullified,pinfall,nomen,microfinance,depreciation,cubist,steeper,splendour,gruppe,everyman,chasers,campaigners,bridle,modality,percussive,darkly,capes,velar,picton,triennial,factional,padang,toponym,betterment,norepinephrine,112th,estuarine,diemen,warehousing,morphism,ideologically,pairings,immunization,crassus,exporters,sefer,flocked,bulbous,deseret,booms,calcite,bohol,elven,groot,pulau,citigroup,wyeth,modernizing,layering,pastiche,complies,printmaker,condenser,theropod,cassino,oxyrhynchus,akademie,trainings,lowercase,coxae,parte,chetniks,pentagonal,keselowski,monocoque,morsi,reticulum,meiosis,clapboard,recoveries,tinge,an/fps,revista,sidon,livre,epidermis,conglomerates,kampong,congruent,harlequins,tergum,simplifies,epidemiological,underwriting,tcp/ip,exclusivity,multidimensional,mysql,columbine,ecologist,hayat,sicilies,levees,handset,aesop,usenet,pacquiao,archiving,alexandrian,compensatory,broadsheet,annotation,bahamian,d'affaires,interludes,phraya,shamans,marmara,customizable,immortalized,ambushes,chlorophyll,diesels,emulsion,rheumatoid,voluminous,screenwriters,tailoring,sedis,runcorn,democratization,bushehr,anacostia,constanta,antiquary,sixtus,radiate,advaita,antimony,acumen,barristers,reichsbahn,ronstadt,symbolist,pasig,cursive,secessionist,afrikaner,munnetra,inversely,adsorption,syllabic,moltke,idioms,midline,olimpico,diphosphate,cautions,radziwill,mobilisation,copelatus,trawlers,unicron,bhaskar,financiers,minimalism,derailment,marxists,oireachtas,abdicate,eigenvalue,zafar,vytautas,ganguly,chelyabinsk,telluride,subordination,ferried,dived,vendee,pictish,dimitrov,expiry,carnation,cayley,magnitudes,lismore,gretna,sandwiched,unmasked,sandomierz,swarthmore,tetra,nanyang,pevsner,dehradun,mormonism,rashi,complying,seaplanes,ningbo,cooperates,strathcona,mornington,mestizo,yulia,edgbaston,palisade,ethno,polytopes,espirito,tymoshenko,pronunciations,paradoxical,taichung,chipmunks,erhard,maximise,accretion,kanda,`abdu'l,narrowest,umpiring,mycenaean,divisor,geneticist,ceredigion,barque,hobbyists,equates,auxerre,spinose,cheil,sweetwater,guano,carboxylic,archiv,tannery,cormorant,agonists,fundacion,anbar,tunku,hindrance,meerut,concordat,secunderabad,kachin,achievable,murfreesboro,comprehensively,forges,broadest,synchronised,speciation,scapa,aliyev,conmebol,tirelessly,subjugated,pillaged,udaipur,defensively,lakhs,stateless,haasan,headlamps,patterning,podiums,polyphony,mcmurdo,mujer,vocally,storeyed,mucosa,multivariate,scopus,minimizes,formalised,certiorari,bourges,populate,overhanging,gaiety,unreserved,borromeo,woolworths,isotopic,bashar,purify,vertebra,medan,juxtaposition,earthwork,elongation,chaudhary,schematic,piast,steeped,nanotubes,fouls,achaea,legionnaires,abdur,qmjhl,embraer,hardback,centerville,ilocos,slovan,whitehorse,mauritian,moulding,mapuche,donned,provisioning,gazprom,jonesboro,audley,lightest,calyx,coldwater,trigonometric,petroglyphs,psychoanalyst,congregate,zambezi,fissure,supervises,bexley,etobicoke,wairarapa,tectonics,emphasises,formula_41,debugging,linfield,spatially,ionizing,ungulates,orinoco,clades,erlangen,news/talk,vols.,ceara,yakovlev,finsbury,entanglement,fieldhouse,graphene,intensifying,grigory,keyong,zacatecas,ninian,allgemeine,keswick,societa,snorri,femininity,najib,monoclonal,guyanese,postulate,huntly,abbeys,machinist,yunus,emphasising,ishaq,urmia,bremerton,pretenders,lumiere,thoroughfares,chikara,dramatized,metathorax,taiko,transcendence,wycliffe,retrieves,umpired,steuben,racehorses,taylors,kuznetsov,montezuma,precambrian,canopies,gaozong,propodeum,disestablished,retroactive,shoreham,rhizome,doubleheader,clinician,diwali,quartzite,shabaab,agassiz,despatched,stormwater,luxemburg,callao,universidade,courland,skane,glyph,dormers,witwatersrand,curacy,qualcomm,nansen,entablature,lauper,hausdorff,lusaka,ruthenian,360deg,cityscape,douai,vaishnava,spars,vaulting,rationalist,gygax,sequestration,typology,pollinates,accelerators,leben,colonials,cenotaph,imparted,carthaginians,equaled,rostrum,gobind,bodhisattva,oberst,bicycling,arabi,sangre,biophysics,hainaut,vernal,lunenburg,apportioned,finches,lajos,nenad,repackaged,zayed,nikephoros,r.e.m,swaminarayan,gestalt,unplaced,crags,grohl,sialkot,unsaturated,gwinnett,linemen,forays,palakkad,writs,instrumentalists,aircrews,badged,terrapins,180deg,oneness,commissariat,changi,pupation,circumscribed,contador,isotropic,administrated,fiefs,nimes,intrusions,minoru,geschichte,nadph,tainan,changchun,carbondale,frisia,swapo,evesham,hawai'i,encyclopedic,transporters,dysplasia,formula_42,onsite,jindal,guetta,judgements,narbonne,permissions,paleogene,rationalism,vilna,isometric,subtracted,chattahoochee,lamina,missa,greville,pervez,lattices,persistently,crystallization,timbered,hawaiians,fouling,interrelated,masood,ripening,stasi,gamal,visigothic,warlike,cybernetics,tanjung,forfar,cybernetic,karelian,brooklands,belfort,greifswald,campeche,inexplicably,refereeing,understory,uninterested,prius,collegiately,sefid,sarsfield,categorize,biannual,elsevier,eisteddfod,declension,autonoma,procuring,misrepresentation,novelization,bibliographic,shamanism,vestments,potash,eastleigh,ionized,turan,lavishly,scilly,balanchine,importers,parlance,'that,kanyakumari,synods,mieszko,crossovers,serfdom,conformational,legislated,exclave,heathland,sadar,differentiates,propositional,konstantinos,photoshop,manche,vellore,appalachia,orestes,taiga,exchanger,grozny,invalidated,baffin,spezia,staunchly,eisenach,robustness,virtuosity,ciphers,inlets,bolagh,understandings,bosniaks,parser,typhoons,sinan,luzerne,webcomic,subtraction,jhelum,businessweek,ceske,refrained,firebox,mitigated,helmholtz,dilip,eslamabad,metalwork,lucan,apportionment,provident,gdynia,schooners,casement,danse,hajjiabad,benazir,buttress,anthracite,newsreel,wollaston,dispatching,cadastral,riverboat,provincetown,nantwich,missal,irreverent,juxtaposed,darya,ennobled,electropop,stereoscopic,maneuverability,laban,luhansk,udine,collectibles,haulage,holyrood,materially,supercharger,gorizia,shkoder,townhouses,pilate,layoffs,folkloric,dialectic,exuberant,matures,malla,ceuta,citizenry,crewed,couplet,stopover,transposition,tradesmen,antioxidant,amines,utterance,grahame,landless,isere,diction,appellant,satirist,urbino,intertoto,subiaco,antonescu,nehemiah,ubiquitin,emcee,stourbridge,fencers,103rd,wranglers,monteverdi,watertight,expounded,xiamen,manmohan,pirie,threefold,antidepressant,sheboygan,grieg,cancerous,diverging,bernini,polychrome,fundamentalism,bihari,critiqued,cholas,villers,tendulkar,dafydd,vastra,fringed,evangelization,episcopalian,maliki,sana'a,ashburton,trianon,allegany,heptathlon,insufficiently,panelists,pharrell,hexham,amharic,fertilized,plumes,cistern,stratigraphy,akershus,catalans,karoo,rupee,minuteman,quantification,wigmore,leutnant,metanotum,weeknights,iridescent,extrasolar,brechin,deuterium,kuching,lyricism,astrakhan,brookhaven,euphorbia,hradec,bhagat,vardar,aylmer,positron,amygdala,speculators,unaccompanied,debrecen,slurry,windhoek,disaffected,rapporteur,mellitus,blockers,fronds,yatra,sportsperson,precession,physiologist,weeknight,pidgin,pharma,condemns,standardize,zetian,tibor,glycoprotein,emporia,cormorants,amalie,accesses,leonhard,denbighshire,roald,116th,will.i.am,symbiosis,privatised,meanders,chemnitz,jabalpur,shing,secede,ludvig,krajina,homegrown,snippets,sasanian,euripides,peder,cimarron,streaked,graubunden,kilimanjaro,mbeki,middleware,flensburg,bukovina,lindwall,marsalis,profited,abkhaz,polis,camouflaged,amyloid,morgantown,ovoid,bodleian,morte,quashed,gamelan,juventud,natchitoches,storyboard,freeview,enumeration,cielo,preludes,bulawayo,1600s,olympiads,multicast,faunal,asura,reinforces,puranas,ziegfeld,handicraft,seamount,kheil,noche,hallmarks,dermal,colorectal,encircle,hessen,umbilicus,sunnis,leste,unwin,disclosing,superfund,montmartre,refuelling,subprime,kolhapur,etiology,bismuth,laissez,vibrational,mazar,alcoa,rumsfeld,recurve,ticonderoga,lionsgate,onlookers,homesteads,filesystem,barometric,kingswood,biofuel,belleza,moshav,occidentalis,asymptomatic,northeasterly,leveson,huygens,numan,kingsway,primogeniture,toyotomi,yazoo,limpets,greenbelt,booed,concurrence,dihedral,ventrites,raipur,sibiu,plotters,kitab,109th,trackbed,skilful,berthed,effendi,fairing,sephardi,mikhailovich,lockyer,wadham,invertible,paperbacks,alphabetic,deuteronomy,constitutive,leathery,greyhounds,estoril,beechcraft,poblacion,cossidae,excreted,flamingos,singha,olmec,neurotransmitters,ascoli,nkrumah,forerunners,dualism,disenchanted,benefitted,centrum,undesignated,noida,o'donoghue,collages,egrets,egmont,wuppertal,cleave,montgomerie,pseudomonas,srinivasa,lymphatic,stadia,resold,minima,evacuees,consumerism,ronde,biochemist,automorphism,hollows,smuts,improvisations,vespasian,bream,pimlico,eglin,colne,melancholic,berhad,ousting,saale,notaulices,ouest,hunslet,tiberias,abdomina,ramsgate,stanislas,donbass,pontefract,sucrose,halts,drammen,chelm,l'arc,taming,trolleys,konin,incertae,licensees,scythian,giorgos,dative,tanglewood,farmlands,o'keeffe,caesium,romsdal,amstrad,corte,oglethorpe,huntingdonshire,magnetization,adapts,zamosc,shooto,cuttack,centrepiece,storehouse,winehouse,morbidity,woodcuts,ryazan,buddleja,buoyant,bodmin,estero,austral,verifiable,periyar,christendom,curtail,shura,kaifeng,cotswold,invariance,seafaring,gorica,androgen,usman,seabird,forecourt,pekka,juridical,audacious,yasser,cacti,qianlong,polemical,d'amore,espanyol,distrito,cartographers,pacifism,serpents,backa,nucleophilic,overturning,duplicates,marksman,oriente,vuitton,oberleutnant,gielgud,gesta,swinburne,transfiguration,1750s,retaken,celje,fredrikstad,asuka,cropping,mansard,donates,blacksmiths,vijayanagara,anuradhapura,germinate,betis,foreshore,jalandhar,bayonets,devaluation,frazione,ablaze,abidjan,approvals,homeostasis,corollary,auden,superfast,redcliffe,luxembourgish,datum,geraldton,printings,ludhiana,honoree,synchrotron,invercargill,hurriedly,108th,three-and-a-half,colonist,bexar,limousin,bessemer,ossetian,nunataks,buddhas,rebuked,thais,tilburg,verdicts,interleukin,unproven,dordrecht,solent,acclamation,muammar,dahomey,operettas,4x400,arrears,negotiators,whitehaven,apparitions,armoury,psychoactive,worshipers,sculptured,elphinstone,airshow,kjell,o'callaghan,shrank,professorships,predominance,subhash,coulomb,sekolah,retrofitted,samos,overthrowing,vibrato,resistors,palearctic,datasets,doordarshan,subcutaneous,compiles,immorality,patchwork,trinidadian,glycogen,pronged,zohar,visigoths,freres,akram,justo,agora,intakes,craiova,playwriting,bukhari,militarism,iwate,petitioners,harun,wisla,inefficiency,vendome,ledges,schopenhauer,kashi,entombed,assesses,tenn.,noumea,baguio,carex,o'donovan,filings,hillsdale,conjectures,blotches,annuals,lindisfarne,negated,vivek,angouleme,trincomalee,cofactor,verkhovna,backfield,twofold,automaker,rudra,freighters,darul,gharana,busway,formula_43,plattsburgh,portuguesa,showrunner,roadmap,valenciennes,erdos,biafra,spiritualism,transactional,modifies,carne,107th,cocos,gcses,tiverton,radiotherapy,meadowlands,gunma,srebrenica,foxtel,authenticated,enslavement,classicist,klaipeda,minstrels,searchable,infantrymen,incitement,shiga,nadp+,urals,guilders,banquets,exteriors,counterattacks,visualized,diacritics,patrimony,svensson,transepts,prizren,telegraphy,najaf,emblazoned,coupes,effluent,ragam,omani,greensburg,taino,flintshire,cd/dvd,lobbies,narrating,cacao,seafarers,bicolor,collaboratively,suraj,floodlit,sacral,puppetry,tlingit,malwa,login,motionless,thien,overseers,vihar,golem,specializations,bathhouse,priming,overdubs,winningest,archetypes,uniao,acland,creamery,slovakian,lithographs,maryborough,confidently,excavating,stillborn,ramallah,audiencia,alava,ternary,hermits,rostam,bauxite,gawain,lothair,captions,gulfstream,timelines,receded,mediating,petain,bastia,rudbar,bidders,disclaimer,shrews,tailings,trilobites,yuriy,jamil,demotion,gynecology,rajinikanth,madrigals,ghazni,flycatchers,vitebsk,bizet,computationally,kashgar,refinements,frankford,heralds,europe/africa,levante,disordered,sandringham,queues,ransacked,trebizond,verdes,comedie,primitives,figurine,organists,culminate,gosport,coagulation,ferrying,hoyas,polyurethane,prohibitive,midfielders,ligase,progesterone,defectors,sweetened,backcountry,diodorus,waterside,nieuport,khwaja,jurong,decried,gorkha,ismaili,300th,octahedral,kindergartens,paseo,codification,notifications,disregarding,risque,reconquista,shortland,atolls,texarkana,perceval,d'etudes,kanal,herbicides,tikva,nuova,gatherer,dissented,soweto,dexterity,enver,bacharach,placekicker,carnivals,automate,maynooth,symplectic,chetnik,militaire,upanishads,distributive,strafing,championing,moiety,miliband,blackadder,enforceable,maung,dimer,stadtbahn,diverges,obstructions,coleophoridae,disposals,shamrocks,aural,banca,bahru,coxed,grierson,vanadium,watermill,radiative,ecoregions,berets,hariri,bicarbonate,evacuations,mallee,nairn,rushden,loggia,slupsk,satisfactorily,milliseconds,cariboo,reine,cyclo,pigmentation,postmodernism,aqueducts,vasari,bourgogne,dilemmas,liquefied,fluminense,alloa,ibaraki,tenements,kumasi,humerus,raghu,labours,putsch,soundcloud,bodybuilder,rakyat,domitian,pesaro,translocation,sembilan,homeric,enforcers,tombstones,lectureship,rotorua,salamis,nikolaos,inferences,superfortress,lithgow,surmised,undercard,tarnow,barisan,stingrays,federacion,coldstream,haverford,ornithological,heerenveen,eleazar,jyoti,murali,bamako,riverbed,subsidised,theban,conspicuously,vistas,conservatorium,madrasa,kingfishers,arnulf,credential,syndicalist,sheathed,discontinuity,prisms,tsushima,coastlines,escapees,vitis,optimizing,megapixel,overground,embattled,halide,sprinters,buoys,mpumalanga,peculiarities,106th,roamed,menezes,macao,prelates,papyri,freemen,dissertations,irishmen,pooled,sverre,reconquest,conveyance,subjectivity,asturian,circassian,formula_45,comdr,thickets,unstressed,monro,passively,harmonium,moveable,dinar,carlsson,elysees,chairing,b'nai,confusingly,kaoru,convolution,godolphin,facilitator,saxophones,eelam,jebel,copulation,anions,livres,licensure,pontypridd,arakan,controllable,alessandria,propelling,stellenbosch,tiber,wolka,liberators,yarns,d'azur,tsinghua,semnan,amhara,ablation,melies,tonality,historique,beeston,kahne,intricately,sonoran,robespierre,gyrus,boycotts,defaulted,infill,maranhao,emigres,framingham,paraiba,wilhelmshaven,tritium,skyway,labial,supplementation,possessor,underserved,motets,maldivian,marrakech,quays,wikimedia,turbojet,demobilization,petrarch,encroaching,sloops,masted,karbala,corvallis,agribusiness,seaford,stenosis,hieronymus,irani,superdraft,baronies,cortisol,notability,veena,pontic,cyclin,archeologists,newham,culled,concurring,aeolian,manorial,shouldered,fords,philanthropists,105th,siddharth,gotthard,halim,rajshahi,jurchen,detritus,practicable,earthenware,discarding,travelogue,neuromuscular,elkhart,raeder,zygmunt,metastasis,internees,102nd,vigour,upmarket,summarizing,subjunctive,offsets,elizabethtown,udupi,pardubice,repeaters,instituting,archaea,substandard,technische,linga,anatomist,flourishes,velika,tenochtitlan,evangelistic,fitchburg,springbok,cascading,hydrostatic,avars,occasioned,filipina,perceiving,shimbun,africanus,consternation,tsing,optically,beitar,45deg,abutments,roseville,monomers,huelva,lotteries,hypothalamus,internationalist,electromechanical,hummingbirds,fibreglass,salaried,dramatists,uncovers,invokes,earners,excretion,gelding,ancien,aeronautica,haverhill,stour,ittihad,abramoff,yakov,ayodhya,accelerates,industrially,aeroplanes,deleterious,dwelt,belvoir,harpalus,atpase,maluku,alasdair,proportionality,taran,epistemological,interferometer,polypeptide,adjudged,villager,metastatic,marshalls,madhavan,archduchess,weizmann,kalgoorlie,balan,predefined,sessile,sagaing,brevity,insecticide,psychosocial,africana,steelworks,aether,aquifers,belem,mineiro,almagro,radiators,cenozoic,solute,turbocharger,invicta,guested,buccaneer,idolatry,unmatched,paducah,sinestro,dispossessed,conforms,responsiveness,cyanobacteria,flautist,procurator,complementing,semifinalist,rechargeable,permafrost,cytokine,refuges,boomed,gelderland,franchised,jinan,burnie,doubtless,randomness,colspan=12,angra,ginebra,famers,nuestro,declarative,roughness,lauenburg,motile,rekha,issuer,piney,interceptors,napoca,gipsy,formulaic,formula_44,viswanathan,ebrahim,thessalonica,galeria,muskogee,unsold,html5,taito,mobutu,icann,carnarvon,fairtrade,morphisms,upsilon,nozzles,fabius,meander,murugan,strontium,episcopacy,sandinista,parasol,attenuated,bhima,primeval,panay,ordinator,negara,osteoporosis,glossop,ebook,paradoxically,grevillea,modoc,equating,phonetically,legumes,covariant,dorje,quatre,bruxelles,pyroclastic,shipbuilder,zhaozong,obscuring,sveriges,tremolo,extensible,barrack,multnomah,hakon,chaharmahal,parsing,volumetric,astrophysical,glottal,combinatorics,freestanding,encoder,paralysed,cavalrymen,taboos,heilbronn,orientalis,lockport,marvels,ozawa,dispositions,waders,incurring,saltire,modulate,papilio,phenol,intermedia,rappahannock,plasmid,fortify,phenotypes,transiting,correspondences,leaguer,larnaca,incompatibility,mcenroe,deeming,endeavoured,aboriginals,helmed,salar,arginine,werke,ferrand,expropriated,delimited,couplets,phoenicians,petioles,ouster,anschluss,protectionist,plessis,urchins,orquesta,castleton,juniata,bittorrent,fulani,donji,mykola,rosemont,chandos,scepticism,signer,chalukya,wicketkeeper,coquitlam,programmatic,o'brian,carteret,urology,steelhead,paleocene,konkan,bettered,venkatesh,surfacing,longitudinally,centurions,popularization,yazid,douro,widths,premios,leonards,gristmill,fallujah,arezzo,leftists,ecliptic,glycerol,inaction,disenfranchised,acrimonious,depositing,parashah,cockatoo,marechal,bolzano,chios,cablevision,impartiality,pouches,thickly,equities,bentinck,emotive,boson,ashdown,conquistadors,parsi,conservationists,reductive,newlands,centerline,ornithologists,waveguide,nicene,philological,hemel,setanta,masala,aphids,convening,casco,matrilineal,chalcedon,orthographic,hythe,replete,damming,bolivarian,admixture,embarks,borderlands,conformed,nagarjuna,blenny,chaitanya,suwon,shigeru,tatarstan,lingayen,rejoins,grodno,merovingian,hardwicke,puducherry,prototyping,laxmi,upheavals,headquarter,pollinators,bromine,transom,plantagenet,arbuthnot,chidambaram,woburn,osamu,panelling,coauthored,zhongshu,hyaline,omissions,aspergillus,offensively,electrolytic,woodcut,sodom,intensities,clydebank,piotrkow,supplementing,quipped,focke,harbinger,positivism,parklands,wolfenbuttel,cauca,tryptophan,taunus,curragh,tsonga,remand,obscura,ashikaga,eltham,forelimbs,analogs,trnava,observances,kailash,antithesis,ayumi,abyssinia,dorsally,tralee,pursuers,misadventures,padova,perot,mahadev,tarim,granth,licenced,compania,patuxent,baronial,korda,cochabamba,codices,karna,memorialized,semaphore,playlists,mandibular,halal,sivaji,scherzinger,stralsund,foundries,ribosome,mindfulness,nikolayevich,paraphyletic,newsreader,catalyze,ioannina,thalamus,gbit/s,paymaster,sarab,500th,replenished,gamepro,cracow,formula_46,gascony,reburied,lessing,easement,transposed,meurthe,satires,proviso,balthasar,unbound,cuckoos,durbar,louisbourg,cowes,wholesalers,manet,narita,xiaoping,mohamad,illusory,cathal,reuptake,alkaloid,tahrir,mmorpg,underlies,anglicanism,repton,aharon,exogenous,buchenwald,indigent,odostomia,milled,santorum,toungoo,nevsky,steyr,urbanisation,darkseid,subsonic,canaanite,akiva,eglise,dentition,mediators,cirencester,peloponnesian,malmesbury,durres,oerlikon,tabulated,saens,canaria,ischemic,esterhazy,ringling,centralization,walthamstow,nalanda,lignite,takht,leninism,expiring,circe,phytoplankton,promulgation,integrable,breeches,aalto,menominee,borgo,scythians,skrull,galleon,reinvestment,raglan,reachable,liberec,airframes,electrolysis,geospatial,rubiaceae,interdependence,symmetrically,simulcasts,keenly,mauna,adipose,zaidi,fairport,vestibular,actuators,monochromatic,literatures,congestive,sacramental,atholl,skytrain,tycho,tunings,jamia,catharina,modifier,methuen,tapings,infiltrating,colima,grafting,tauranga,halides,pontificate,phonetics,koper,hafez,grooved,kintetsu,extrajudicial,linkoping,cyberpunk,repetitions,laurentian,parnu,bretton,darko,sverdlovsk,foreshadowed,akhenaten,rehnquist,gosford,coverts,pragmatism,broadleaf,ethiopians,instated,mediates,sodra,opulent,descriptor,enugu,shimla,leesburg,officership,giffard,refectory,lusitania,cybermen,fiume,corus,tydfil,lawrenceville,ocala,leviticus,burghers,ataxia,richthofen,amicably,acoustical,watling,inquired,tiempo,multiracial,parallelism,trenchard,tokyopop,germanium,usisl,philharmonia,shapur,jacobites,latinized,sophocles,remittances,o'farrell,adder,dimitrios,peshwa,dimitar,orlov,outstretched,musume,satish,dimensionless,serialised,baptisms,pagasa,antiviral,1740s,quine,arapaho,bombardments,stratosphere,ophthalmic,injunctions,carbonated,nonviolence,asante,creoles,sybra,boilermakers,abington,bipartite,permissive,cardinality,anheuser,carcinogenic,hohenlohe,surinam,szeged,infanticide,generically,floorball,'white,automakers,cerebellar,homozygous,remoteness,effortlessly,allude,'great,headmasters,minting,manchurian,kinabalu,wemyss,seditious,widgets,marbled,almshouses,bards,subgenres,tetsuya,faulting,kickboxer,gaulish,hoseyn,malton,fluvial,questionnaires,mondale,downplayed,traditionalists,vercelli,sumatran,landfills,gamesradar,exerts,franciszek,unlawfully,huesca,diderot,libertarians,professorial,laane,piecemeal,conidae,taiji,curatorial,perturbations,abstractions,szlachta,watercraft,mullah,zoroastrianism,segmental,khabarovsk,rectors,affordability,scuola,diffused,stena,cyclonic,workpiece,romford,'little,jhansi,stalag,zhongshan,skipton,maracaibo,bernadotte,thanet,groening,waterville,encloses,sahrawi,nuffield,moorings,chantry,annenberg,islay,marchers,tenses,wahid,siegen,furstenberg,basques,resuscitation,seminarians,tympanum,gentiles,vegetarianism,tufted,venkata,fantastical,pterophoridae,machined,superposition,glabrous,kaveri,chicane,executors,phyllonorycter,bidirectional,jasta,undertones,touristic,majapahit,navratilova,unpopularity,barbadian,tinian,webcast,hurdler,rigidly,jarrah,staphylococcus,igniting,irrawaddy,stabilised,airstrike,ragas,wakayama,energetically,ekstraklasa,minibus,largemouth,cultivators,leveraging,waitangi,carnaval,weaves,turntables,heydrich,sextus,excavate,govind,ignaz,pedagogue,uriah,borrowings,gemstones,infractions,mycobacterium,batavian,massing,praetor,subalpine,massoud,passers,geostationary,jalil,trainsets,barbus,impair,budejovice,denbigh,pertain,historicity,fortaleza,nederlandse,lamenting,masterchef,doubs,gemara,conductance,ploiesti,cetaceans,courthouses,bhagavad,mihailovic,occlusion,bremerhaven,bulwark,morava,kaine,drapery,maputo,conquistador,kaduna,famagusta,first-past-the-post,erudite,galton,undated,tangential,filho,dismembered,dashes,criterium,darwen,metabolized,blurring,everard,randwick,mohave,impurity,acuity,ansbach,chievo,surcharge,plantain,algoma,porosity,zirconium,selva,sevenoaks,venizelos,gwynne,golgi,imparting,separatism,courtesan,idiopathic,gravestones,hydroelectricity,babar,orford,purposeful,acutely,shard,ridgewood,viterbo,manohar,expropriation,placenames,brevis,cosine,unranked,richfield,newnham,recoverable,flightless,dispersing,clearfield,abu'l,stranraer,kempe,streamlining,goswami,epidermal,pieta,conciliatory,distilleries,electrophoresis,bonne,tiago,curiosities,candidature,picnicking,perihelion,lintel,povoa,gullies,configure,excision,facies,signers,1730s,insufficiency,semiotics,streatham,deactivation,entomological,skippers,albacete,parodying,escherichia,honorees,singaporeans,counterterrorism,tiruchirappalli,omnivorous,metropole,globalisation,athol,unbounded,codice_5,landforms,classifier,farmhouses,reaffirming,reparation,yomiuri,technologists,mitte,medica,viewable,steampunk,konya,kshatriya,repelling,edgewater,lamiinae,devas,potteries,llandaff,engendered,submits,virulence,uplifted,educationist,metropolitans,frontrunner,dunstable,forecastle,frets,methodius,exmouth,linnean,bouchet,repulsion,computable,equalling,liceo,tephritidae,agave,hydrological,azarenka,fairground,l'homme,enforces,xinhua,cinematographers,cooperstown,sa'id,paiute,christianization,tempos,chippenham,insulator,kotor,stereotyped,dello,cours,hisham,d'souza,eliminations,supercars,passau,rebrand,natures,coote,persephone,rededicated,cleaved,plenum,blistering,indiscriminately,cleese,safed,recursively,compacted,revues,hydration,shillong,echelons,garhwal,pedimented,grower,zwolle,wildflower,annexing,methionine,petah,valens,famitsu,petiole,specialities,nestorian,shahin,tokaido,shearwater,barberini,kinsmen,experimenter,alumnae,cloisters,alumina,pritzker,hardiness,soundgarden,julich,ps300,watercourse,cementing,wordplay,olivet,demesne,chasseurs,amide,zapotec,gaozu,porphyry,absorbers,indium,analogies,devotions,engravers,limestones,catapulted,surry,brickworks,gotra,rodham,landline,paleontologists,shankara,islip,raucous,trollope,arpad,embarkation,morphemes,recites,picardie,nakhchivan,tolerances,formula_47,khorramabad,nichiren,adrianople,kirkuk,assemblages,collider,bikaner,bushfires,roofline,coverings,reredos,bibliotheca,mantras,accentuated,commedia,rashtriya,fluctuation,serhiy,referential,fittipaldi,vesicle,geeta,iraklis,immediacy,chulalongkorn,hunsruck,bingen,dreadnoughts,stonemason,meenakshi,lebesgue,undergrowth,baltistan,paradoxes,parlement,articled,tiflis,dixieland,meriden,tejano,underdogs,barnstable,exemplify,venter,tropes,wielka,kankakee,iskandar,zilina,pharyngeal,spotify,materialised,picts,atlantique,theodoric,prepositions,paramilitaries,pinellas,attlee,actuated,piedmontese,grayling,thucydides,multifaceted,unedited,autonomously,universelle,utricularia,mooted,preto,incubated,underlie,brasenose,nootka,bushland,sensu,benzodiazepine,esteghlal,seagoing,amenhotep,azusa,sappers,culpeper,smokeless,thoroughbreds,dargah,gorda,alumna,mankato,zdroj,deleting,culvert,formula_49,punting,wushu,hindering,immunoglobulin,standardisation,birger,oilfield,quadrangular,ulama,recruiters,netanya,1630s,communaute,istituto,maciej,pathan,meher,vikas,characterizations,playmaker,interagency,intercepts,assembles,horthy,introspection,narada,matra,testes,radnicki,estonians,csiro,instar,mitford,adrenergic,crewmembers,haaretz,wasatch,lisburn,rangefinder,ordre,condensate,reforestation,corregidor,spvgg,modulator,mannerist,faulted,aspires,maktoum,squarepants,aethelred,piezoelectric,mulatto,dacre,progressions,jagiellonian,norge,samaria,sukhoi,effingham,coxless,hermetic,humanists,centrality,litters,stirlingshire,beaconsfield,sundanese,geometrically,caretakers,habitually,bandra,pashtuns,bradenton,arequipa,laminar,brickyard,hitchin,sustains,shipboard,ploughing,trechus,wheelers,bracketed,ilyushin,subotica,d'hondt,reappearance,bridgestone,intermarried,fulfilment,aphasia,birkbeck,transformational,strathmore,hornbill,millstone,lacan,voids,solothurn,gymnasiums,laconia,viaducts,peduncle,teachta,edgware,shinty,supernovae,wilfried,exclaim,parthia,mithun,flashpoint,moksha,cumbia,metternich,avalanches,militancy,motorist,rivadavia,chancellorsville,federals,gendered,bounding,footy,gauri,caliphs,lingam,watchmaker,unrecorded,riverina,unmodified,seafloor,droit,pfalz,chrysostom,gigabit,overlordship,besiege,espn2,oswestry,anachronistic,ballymena,reactivation,duchovny,ghani,abacetus,duller,legio,watercourses,nord-pas-de-calais,leiber,optometry,swarms,installer,sancti,adverbs,iheartmedia,meiningen,zeljko,kakheti,notional,circuses,patrilineal,acrobatics,infrastructural,sheva,oregonian,adjudication,aamir,wloclawek,overfishing,obstructive,subtracting,aurobindo,archeologist,newgate,'cause,secularization,tehsils,abscess,fingal,janacek,elkhorn,trims,kraftwerk,mandating,irregulars,faintly,congregationalist,sveti,kasai,mishaps,kennebec,provincially,durkheim,scotties,aicte,rapperswil,imphal,surrenders,morphs,nineveh,hoxha,cotabato,thuringian,metalworking,retold,shogakukan,anthers,proteasome,tippeligaen,disengagement,mockumentary,palatial,erupts,flume,corrientes,masthead,jaroslaw,rereleased,bharti,labors,distilling,tusks,varzim,refounded,enniskillen,melkite,semifinalists,vadodara,bermudian,capstone,grasse,origination,populus,alesi,arrondissements,semigroup,verein,opossum,messrs.,portadown,bulbul,tirupati,mulhouse,tetrahedron,roethlisberger,nonverbal,connexion,warangal,deprecated,gneiss,octet,vukovar,hesketh,chambre,despatch,claes,kargil,hideo,gravelly,tyndale,aquileia,tuners,defensible,tutte,theotokos,constructivist,ouvrage,dukla,polisario,monasticism,proscribed,commutation,testers,nipissing,codon,mesto,olivine,concomitant,exoskeleton,purports,coromandel,eyalet,dissension,hippocrates,purebred,yaounde,composting,oecophoridae,procopius,o'day,angiogenesis,sheerness,intelligencer,articular,felixstowe,aegon,endocrinology,trabzon,licinius,pagodas,zooplankton,hooghly,satie,drifters,sarthe,mercian,neuilly,tumours,canal+,scheldt,inclinations,counteroffensive,roadrunners,tuzla,shoreditch,surigao,predicates,carnot,algeciras,militaries,generalize,bulkheads,gawler,pollutant,celta,rundgren,microrna,gewog,olimpija,placental,lubelski,roxburgh,discerned,verano,kikuchi,musicale,l'enfant,ferocity,dimorphic,antigonus,erzurum,prebendary,recitative,discworld,cyrenaica,stigmella,totnes,sutta,pachuca,ulsan,downton,landshut,castellan,pleural,siedlce,siecle,catamaran,cottbus,utilises,trophic,freeholders,holyhead,u.s.s,chansons,responder,waziristan,suzuka,birding,shogi,asker,acetone,beautification,cytotoxic,dixit,hunterdon,cobblestone,formula_48,kossuth,devizes,sokoto,interlaced,shuttered,kilowatts,assiniboine,isaak,salto,alderney,sugarloaf,franchising,aggressiveness,toponyms,plaintext,antimatter,henin,equidistant,salivary,bilingualism,mountings,obligate,extirpated,irenaeus,misused,pastoralists,aftab,immigrating,warping,tyrolean,seaforth,teesside,soundwave,oligarchy,stelae,pairwise,iupac,tezuka,posht,orchestrations,landmass,ironstone,gallia,hjalmar,carmelites,strafford,elmhurst,palladio,fragility,teleplay,gruffudd,karoly,yerba,potok,espoo,inductance,macaque,nonprofits,pareto,rock'n'roll,spiritualist,shadowed,skateboarder,utterances,generality,congruence,prostrate,deterred,yellowknife,albarn,maldon,battlements,mohsen,insecticides,khulna,avellino,menstruation,glutathione,springdale,parlophone,confraternity,korps,countrywide,bosphorus,preexisting,damodar,astride,alexandrovich,sprinting,crystallized,botev,leaching,interstates,veers,angevin,undaunted,yevgeni,nishapur,northerners,alkmaar,bethnal,grocers,sepia,tornus,exemplar,trobe,charcot,gyeonggi,larne,tournai,lorain,voided,genji,enactments,maxilla,adiabatic,eifel,nazim,transducer,thelonious,pyrite,deportiva,dialectal,bengt,rosettes,labem,sergeyevich,synoptic,conservator,statuette,biweekly,adhesives,bifurcation,rajapaksa,mammootty,republique,yusef,waseda,marshfield,yekaterinburg,minnelli,fundy,fenian,matchups,dungannon,supremacist,panelled,drenthe,iyengar,fibula,narmada,homeport,oceanside,precept,antibacterial,altarpieces,swath,ospreys,lillooet,legnica,lossless,formula_50,galvatron,iorga,stormont,rsfsr,loggers,kutno,phenomenological,medallists,cuatro,soissons,homeopathy,bituminous,injures,syndicates,typesetting,displacements,dethroned,makassar,lucchese,abergavenny,targu,alborz,akb48,boldface,gastronomy,sacra,amenity,accumulator,myrtaceae,cornices,mourinho,denunciation,oxbow,diddley,aargau,arbitrage,bedchamber,gruffydd,zamindar,klagenfurt,caernarfon,slowdown,stansted,abrasion,tamaki,suetonius,dukakis,individualistic,ventrally,hotham,perestroika,ketones,fertilisation,sobriquet,couplings,renderings,misidentified,rundfunk,sarcastically,braniff,concours,dismissals,elegantly,modifiers,crediting,combos,crucially,seafront,lieut,ischemia,manchus,derivations,proteases,aristophanes,adenauer,porting,hezekiah,sante,trulli,hornblower,foreshadowing,ypsilanti,dharwad,khani,hohenstaufen,distillers,cosmodrome,intracranial,turki,salesian,gorzow,jihlava,yushchenko,leichhardt,venables,cassia,eurogamer,airtel,curative,bestsellers,timeform,sortied,grandview,massillon,ceding,pilbara,chillicothe,heredity,elblag,rogaland,ronne,millennial,batley,overuse,bharata,fille,campbelltown,abeyance,counterclockwise,250cc,neurodegenerative,consigned,electromagnetism,sunnah,saheb,exons,coxswain,gleaned,bassoons,worksop,prismatic,immigrate,pickets,takeo,bobsledder,stosur,fujimori,merchantmen,stiftung,forli,endorses,taskforce,thermally,atman,gurps,floodplains,enthalpy,extrinsic,setubal,kennesaw,grandis,scalability,durations,showrooms,prithvi,outro,overruns,andalucia,amanita,abitur,hipper,mozambican,sustainment,arsene,chesham,palaeolithic,reportage,criminality,knowsley,haploid,atacama,shueisha,ridgefield,astern,getafe,lineal,timorese,restyled,hollies,agincourt,unter,justly,tannins,mataram,industrialised,tarnovo,mumtaz,mustapha,stretton,synthetase,condita,allround,putra,stjepan,troughs,aechmea,specialisation,wearable,kadokawa,uralic,aeros,messiaen,existentialism,jeweller,effigies,gametes,fjordane,cochlear,interdependent,demonstrative,unstructured,emplacement,famines,spindles,amplitudes,actuator,tantalum,psilocybe,apnea,monogatari,expulsions,seleucus,tsuen,hospitaller,kronstadt,eclipsing,olympiakos,clann,canadensis,inverter,helio,egyptologist,squamous,resonate,munir,histology,torbay,khans,jcpenney,veterinarians,aintree,microscopes,colonised,reflectors,phosphorylated,pristimantis,tulare,corvinus,multiplexing,midweek,demosthenes,transjordan,ecija,tengku,vlachs,anamorphic,counterweight,radnor,trinitarian,armidale,maugham,njsiaa,futurism,stairways,avicenna,montebello,bridgetown,wenatchee,lyonnais,amass,surinamese,streptococcus,m*a*s*h,hydrogenation,frazioni,proscenium,kalat,pennsylvanian,huracan,tallying,kralove,nucleolar,phrygian,seaports,hyacinthe,ignace,donning,instalment,regnal,fonds,prawn,carell,folktales,goaltending,bracknell,vmware,patriarchy,mitsui,kragujevac,pythagoras,soult,thapa,disproved,suwalki,secures,somoza,l'ecole,divizia,chroma,herders,technologist,deduces,maasai,rampur,paraphrase,raimi,imaged,magsaysay,ivano,turmeric,formula_51,subcommittees,axillary,ionosphere,organically,indented,refurbishing,pequot,violinists,bearn,colle,contralto,silverton,mechanization,etruscans,wittelsbach,pasir,redshirted,marrakesh,scarp,plein,wafers,qareh,teotihuacan,frobenius,sinensis,rehoboth,bundaberg,newbridge,hydrodynamic,traore,abubakar,adjusts,storytellers,dynamos,verbandsliga,concertmaster,exxonmobil,appreciable,sieradz,marchioness,chaplaincy,rechristened,cunxu,overpopulation,apolitical,sequencer,beaked,nemanja,binaries,intendant,absorber,filamentous,indebtedness,nusra,nashik,reprises,psychedelia,abwehr,ligurian,isoform,resistive,pillaging,mahathir,reformatory,lusatia,allerton,ajaccio,tepals,maturin,njcaa,abyssinian,objector,fissures,sinuous,ecclesiastic,dalits,caching,deckers,phosphates,wurlitzer,navigated,trofeo,berea,purefoods,solway,unlockable,grammys,kostroma,vocalizations,basilan,rebuke,abbasi,douala,helsingborg,ambon,bakar,runestones,cenel,tomislav,pigmented,northgate,excised,seconda,kirke,determinations,dedicates,vilas,pueblos,reversion,unexploded,overprinted,ekiti,deauville,masato,anaesthesia,endoplasmic,transponders,aguascalientes,hindley,celluloid,affording,bayeux,piaget,rickshaws,eishockey,camarines,zamalek,undersides,hardwoods,hermitian,mutinied,monotone,blackmails,affixes,jpmorgan,habermas,mitrovica,paleontological,polystyrene,thana,manas,conformist,turbofan,decomposes,logano,castration,metamorphoses,patroness,herbicide,mikolaj,rapprochement,macroeconomics,barranquilla,matsudaira,lintels,femina,hijab,spotsylvania,morpheme,bitola,baluchistan,kurukshetra,otway,extrusion,waukesha,menswear,helder,trung,bingley,protester,boars,overhang,differentials,exarchate,hejaz,kumara,unjustified,timings,sharpness,nuovo,taisho,sundar,etc..,jehan,unquestionably,muscovy,daltrey,canute,paneled,amedeo,metroplex,elaborates,telus,tetrapods,dragonflies,epithets,saffir,parthenon,lucrezia,refitting,pentateuch,hanshin,montparnasse,lumberjacks,sanhedrin,erectile,odors,greenstone,resurgent,leszek,amory,substituents,prototypical,viewfinder,monck,universiteit,joffre,revives,chatillon,seedling,scherzo,manukau,ashdod,gympie,homolog,stalwarts,ruinous,weibo,tochigi,wallenberg,gayatri,munda,satyagraha,storefronts,heterogeneity,tollway,sportswriters,binocular,gendarmes,ladysmith,tikal,ortsgemeinde,ja'far,osmotic,linlithgow,bramley,telecoms,pugin,repose,rupaul,sieur,meniscus,garmisch,reintroduce,400th,shoten,poniatowski,drome,kazakhstani,changeover,astronautics,husserl,herzl,hypertext,katakana,polybius,antananarivo,seong,breguet,reliquary,utada,aggregating,liangshan,sivan,tonawanda,audiobooks,shankill,coulee,phenolic,brockton,bookmakers,handsets,boaters,wylde,commonality,mappings,silhouettes,pennines,maurya,pratchett,singularities,eschewed,pretensions,vitreous,ibero,totalitarianism,poulenc,lingered,directx,seasoning,deputation,interdict,illyria,feedstock,counterbalance,muzik,buganda,parachuted,violist,homogeneity,comix,fjords,corsairs,punted,verandahs,equilateral,laoghaire,magyars,117th,alesund,televoting,mayotte,eateries,refurbish,nswrl,yukio,caragiale,zetas,dispel,codecs,inoperable,outperformed,rejuvenation,elstree,modernise,contributory,pictou,tewkesbury,chechens,ashina,psionic,refutation,medico,overdubbed,nebulae,sandefjord,personages,eccellenza,businessperson,placename,abenaki,perryville,threshing,reshaped,arecibo,burslem,colspan=3|turnout,rebadged,lumia,erinsborough,interactivity,bitmap,indefatigable,theosophy,excitatory,gleizes,edsel,bermondsey,korce,saarinen,wazir,diyarbakir,cofounder,liberalisation,onsen,nighthawks,siting,retirements,semyon,d'histoire,114th,redditch,venetia,praha,'round,valdosta,hieroglyphic,postmedial,edirne,miscellany,savona,cockpits,minimization,coupler,jacksonian,appeasement,argentines,saurashtra,arkwright,hesiod,folios,fitzalan,publica,rivaled,civitas,beermen,constructivism,ribeira,zeitschrift,solanum,todos,deformities,chilliwack,verdean,meagre,bishoprics,gujrat,yangzhou,reentered,inboard,mythologies,virtus,unsurprisingly,rusticated,museu,symbolise,proportionate,thesaban,symbian,aeneid,mitotic,veliki,compressive,cisterns,abies,winemaker,massenet,bertolt,ahmednagar,triplemania,armorial,administracion,tenures,smokehouse,hashtag,fuerza,regattas,gennady,kanazawa,mahmudabad,crustal,asaph,valentinian,ilaiyaraaja,honeyeater,trapezoidal,cooperatively,unambiguously,mastodon,inhospitable,harnesses,riverton,renewables,djurgardens,haitians,airings,humanoids,boatswain,shijiazhuang,faints,veera,punjabis,steepest,narain,karlovy,serre,sulcus,collectives,1500m,arion,subarctic,liberally,apollonius,ostia,droplet,headstones,norra,robusta,maquis,veronese,imola,primers,luminance,escadrille,mizuki,irreconcilable,stalybridge,temur,paraffin,stuccoed,parthians,counsels,fundamentalists,vivendi,polymath,sugababes,mikko,yonne,fermions,vestfold,pastoralist,kigali,unseeded,glarus,cusps,amasya,northwesterly,minorca,astragalus,verney,trevelyan,antipathy,wollstonecraft,bivalves,boulez,royle,divisao,quranic,bareilly,coronal,deviates,lulea,erectus,petronas,chandan,proxies,aeroflot,postsynaptic,memoriam,moyne,gounod,kuznetsova,pallava,ordinating,reigate,'first,lewisburg,exploitative,danby,academica,bailiwick,brahe,injective,stipulations,aeschylus,computes,gulden,hydroxylase,liveries,somalis,underpinnings,muscovite,kongsberg,domus,overlain,shareware,variegated,jalalabad,agence,ciphertext,insectivores,dengeki,menuhin,cladistic,baerum,betrothal,tokushima,wavelet,expansionist,pottsville,siyuan,prerequisites,carpi,nemzeti,nazar,trialled,eliminator,irrorated,homeward,redwoods,undeterred,strayed,lutyens,multicellular,aurelian,notated,lordships,alsatian,idents,foggia,garros,chalukyas,lillestrom,podlaski,pessimism,hsien,demilitarized,whitewashed,willesden,kirkcaldy,sanctorum,lamia,relaying,escondido,paediatric,contemplates,demarcated,bluestone,betula,penarol,capitalise,kreuznach,kenora,115th,hold'em,reichswehr,vaucluse,m.i.a,windings,boys/girls,cajon,hisar,predictably,flemington,ysgol,mimicked,clivina,grahamstown,ionia,glyndebourne,patrese,aquaria,sleaford,dayal,sportscenter,malappuram,m.b.a.,manoa,carbines,solvable,designator,ramanujan,linearity,academicians,sayid,lancastrian,factorial,strindberg,vashem,delos,comyn,condensing,superdome,merited,kabaddi,intransitive,bideford,neuroimaging,duopoly,scorecards,ziggler,heriot,boyars,virology,marblehead,microtubules,westphalian,anticipates,hingham,searchers,harpist,rapides,morricone,convalescent,mises,nitride,metrorail,matterhorn,bicol,drivetrain,marketer,snippet,winemakers,muban,scavengers,halberstadt,herkimer,peten,laborious,stora,montgomeryshire,booklist,shamir,herault,eurostar,anhydrous,spacewalk,ecclesia,calliostoma,highschool,d'oro,suffusion,imparts,overlords,tagus,rectifier,counterinsurgency,ministered,eilean,milecastle,contre,micromollusk,okhotsk,bartoli,matroid,hasidim,thirunal,terme,tarlac,lashkar,presque,thameslink,flyby,troopship,renouncing,fatih,messrs,vexillum,bagration,magnetite,bornholm,androgynous,vehement,tourette,philosophic,gianfranco,tuileries,codice_6,radially,flexion,hants,reprocessing,setae,burne,palaeographically,infantryman,shorebirds,tamarind,moderna,threading,militaristic,crohn,norrkoping,125cc,stadtholder,troms,klezmer,alphanumeric,brome,emmanuelle,tiwari,alchemical,formula_52,onassis,bleriot,bipedal,colourless,hermeneutics,hosni,precipitating,turnstiles,hallucinogenic,panhellenic,wyandotte,elucidated,chita,ehime,generalised,hydrophilic,biota,niobium,rnzaf,gandhara,longueuil,logics,sheeting,bielsko,cuvier,kagyu,trefoil,docent,pancrase,stalinism,postures,encephalopathy,monckton,imbalances,epochs,leaguers,anzio,diminishes,pataki,nitrite,amuro,nabil,maybach,l'aquila,babbler,bacolod,thutmose,evora,gaudi,breakage,recur,preservative,60deg,mendip,functionaries,columnar,maccabiah,chert,verden,bromsgrove,clijsters,dengue,pastorate,phuoc,principia,viareggio,kharagpur,scharnhorst,anyang,bosons,l'art,criticises,ennio,semarang,brownian,mirabilis,asperger,calibers,typographical,cartooning,minos,disembark,supranational,undescribed,etymologically,alappuzha,vilhelm,lanao,pakenham,bhagavata,rakoczi,clearings,astrologers,manitowoc,bunuel,acetylene,scheduler,defamatory,trabzonspor,leaded,scioto,pentathlete,abrahamic,minigames,aldehydes,peerages,legionary,1640s,masterworks,loudness,bryansk,likeable,genocidal,vegetated,towpath,declination,pyrrhus,divinely,vocations,rosebery,associazione,loaders,biswas,oeste,tilings,xianzong,bhojpuri,annuities,relatedness,idolator,psers,constriction,chuvash,choristers,hanafi,fielders,grammarian,orpheum,asylums,millbrook,gyatso,geldof,stabilise,tableaux,diarist,kalahari,panini,cowdenbeath,melanin,4x100m,resonances,pinar,atherosclerosis,sheringham,castlereagh,aoyama,larks,pantograph,protrude,natak,gustafsson,moribund,cerevisiae,cleanly,polymeric,holkar,cosmonauts,underpinning,lithosphere,firuzabad,languished,mingled,citrate,spadina,lavas,daejeon,fibrillation,porgy,pineville,ps1000,cobbled,emamzadeh,mukhtar,dampers,indelible,salonika,nanoscale,treblinka,eilat,purporting,fluctuate,mesic,hagiography,cutscenes,fondation,barrens,comically,accrue,ibrox,makerere,defections,'there,hollandia,skene,grosseto,reddit,objectors,inoculation,rowdies,playfair,calligrapher,namor,sibenik,abbottabad,propellants,hydraulically,chloroplasts,tablelands,tecnico,schist,klasse,shirvan,bashkortostan,bullfighting,north/south,polski,hanns,woodblock,kilmore,ejecta,ignacy,nanchang,danubian,commendations,snohomish,samaritans,argumentation,vasconcelos,hedgehogs,vajrayana,barents,kulkarni,kumbakonam,identifications,hillingdon,weirs,nayanar,beauvoir,messe,divisors,atlantiques,broods,affluence,tegucigalpa,unsuited,autodesk,akash,princeps,culprits,kingstown,unassuming,goole,visayan,asceticism,blagojevich,irises,paphos,unsound,maurier,pontchartrain,desertification,sinfonietta,latins,especial,limpet,valerenga,glial,brainstem,mitral,parables,sauropod,judean,iskcon,sarcoma,venlo,justifications,zhuhai,blavatsky,alleviated,usafe,steppenwolf,inversions,janko,chagall,secretory,basildon,saguenay,pergamon,hemispherical,harmonized,reloading,franjo,domaine,extravagance,relativism,metamorphosed,labuan,baloncesto,gmail,byproducts,calvinists,counterattacked,vitus,bubonic,120th,strachey,ritually,brookwood,selectable,savinja,incontinence,meltwater,jinja,1720s,brahmi,morgenthau,sheaves,sleeved,stratovolcano,wielki,utilisation,avoca,fluxus,panzergrenadier,philately,deflation,podlaska,prerogatives,kuroda,theophile,zhongzong,gascoyne,magus,takao,arundell,fylde,merdeka,prithviraj,venkateswara,liepaja,daigo,dreamland,reflux,sunnyvale,coalfields,seacrest,soldering,flexor,structuralism,alnwick,outweighed,unaired,mangeshkar,batons,glaad,banshees,irradiated,organelles,biathlete,cabling,chairlift,lollapalooza,newsnight,capacitive,succumbs,flatly,miramichi,burwood,comedienne,charteris,biotic,workspace,aficionados,sokolka,chatelet,o'shaughnessy,prosthesis,neoliberal,refloated,oppland,hatchlings,econometrics,loess,thieu,androids,appalachians,jenin,pterostichinae,downsized,foils,chipsets,stencil,danza,narrate,maginot,yemenite,bisects,crustacean,prescriptive,melodious,alleviation,empowers,hansson,autodromo,obasanjo,osmosis,daugava,rheumatism,moraes,leucine,etymologies,chepstow,delaunay,bramall,bajaj,flavoring,approximates,marsupials,incisive,microcomputer,tactically,waals,wilno,fisichella,ursus,hindmarsh,mazarin,lomza,xenophobia,lawlessness,annecy,wingers,gornja,gnaeus,superieur,tlaxcala,clasps,symbolises,slats,rightist,effector,blighted,permanence,divan,progenitors,kunsthalle,anointing,excelling,coenzyme,indoctrination,dnipro,landholdings,adriaan,liturgies,cartan,ethmia,attributions,sanctus,trichy,chronicon,tancred,affinis,kampuchea,gantry,pontypool,membered,distrusted,fissile,dairies,hyposmocoma,craigie,adarsh,martinsburg,taxiway,30deg,geraint,vellum,bencher,khatami,formula_53,zemun,teruel,endeavored,palmares,pavements,u.s..,internationalization,satirized,carers,attainable,wraparound,muang,parkersburg,extinctions,birkenfeld,wildstorm,payers,cohabitation,unitas,culloden,capitalizing,clwyd,daoist,campinas,emmylou,orchidaceae,halakha,orientales,fealty,domnall,chiefdom,nigerians,ladislav,dniester,avowed,ergonomics,newsmagazine,kitsch,cantilevered,benchmarking,remarriage,alekhine,coldfield,taupo,almirante,substations,apprenticeships,seljuq,levelling,eponym,symbolising,salyut,opioids,underscore,ethnologue,mohegan,marikina,libro,bassano,parse,semantically,disjointed,dugdale,padraig,tulsi,modulating,xfinity,headlands,mstislav,earthworms,bourchier,lgbtq,embellishments,pennants,rowntree,betel,motet,mulla,catenary,washoe,mordaunt,dorking,colmar,girardeau,glentoran,grammatically,samad,recreations,technion,staccato,mikoyan,spoilers,lyndhurst,victimization,chertsey,belafonte,tondo,tonsberg,narrators,subcultures,malformations,edina,augmenting,attests,euphemia,cabriolet,disguising,1650s,navarrese,demoralized,cardiomyopathy,welwyn,wallachian,smoothness,planktonic,voles,issuers,sardasht,survivability,cuauhtemoc,thetis,extruded,signet,raghavan,lombok,eliyahu,crankcase,dissonant,stolberg,trencin,desktops,bursary,collectivization,charlottenburg,triathlete,curvilinear,involuntarily,mired,wausau,invades,sundaram,deletions,bootstrap,abellio,axiomatic,noguchi,setups,malawian,visalia,materialist,kartuzy,wenzong,plotline,yeshivas,parganas,tunica,citric,conspecific,idlib,superlative,reoccupied,blagoevgrad,masterton,immunological,hatta,courbet,vortices,swallowtail,delves,haridwar,diptera,boneh,bahawalpur,angering,mardin,equipments,deployable,guanine,normality,rimmed,artisanal,boxset,chandrasekhar,jools,chenar,tanakh,carcassonne,belatedly,millville,anorthosis,reintegration,velde,surfactant,kanaan,busoni,glyphipterix,personas,fullness,rheims,tisza,stabilizers,bharathi,joost,spinola,mouldings,perching,esztergom,afzal,apostate,lustre,s.league,motorboat,monotheistic,armature,barat,asistencia,bloomsburg,hippocampal,fictionalised,defaults,broch,hexadecimal,lusignan,ryanair,boccaccio,breisgau,southbank,bskyb,adjoined,neurobiology,aforesaid,sadhu,langue,headship,wozniacki,hangings,regulus,prioritized,dynamism,allier,hannity,shimin,antoninus,gymnopilus,caledon,preponderance,melayu,electrodynamics,syncopated,ibises,krosno,mechanistic,morpeth,harbored,albini,monotheism,'real,hyperactivity,haveli,writer/director,minato,nimoy,caerphilly,chitral,amirabad,fanshawe,l'oreal,lorde,mukti,authoritarianism,valuing,spyware,hanbury,restarting,stato,embed,suiza,empiricism,stabilisation,stari,castlemaine,orbis,manufactory,mauritanian,shoji,taoyuan,prokaryotes,oromia,ambiguities,embodying,slims,frente,innovate,ojibwa,powdery,gaeltacht,argentinos,quatermass,detergents,fijians,adaptor,tokai,chileans,bulgars,oxidoreductases,bezirksliga,conceicao,myosin,nellore,500cc,supercomputers,approximating,glyndwr,polypropylene,haugesund,cockerell,tudman,ashbourne,hindemith,bloodlines,rigveda,etruria,romanos,steyn,oradea,deceleration,manhunter,laryngeal,fraudulently,janez,wendover,haplotype,janaki,naoki,belizean,mellencamp,cartographic,sadhana,tricolour,pseudoscience,satara,bytow,s.p.a.,jagdgeschwader,arcot,omagh,sverdrup,masterplan,surtees,apocrypha,ahvaz,d'amato,socratic,leumit,unnumbered,nandini,witold,marsupial,coalesced,interpolated,gimnasia,karadzic,keratin,mamoru,aldeburgh,speculator,escapement,irfan,kashyap,satyajit,haddington,solver,rothko,ashkelon,kickapoo,yeomen,superbly,bloodiest,greenlandic,lithic,autofocus,yardbirds,poona,keble,javan,sufis,expandable,tumblr,ursuline,swimwear,winwood,counsellors,aberrations,marginalised,befriending,workouts,predestination,varietal,siddhartha,dunkeld,judaic,esquimalt,shabab,ajith,telefonica,stargard,hoysala,radhakrishnan,sinusoidal,strada,hiragana,cebuano,monoid,independencia,floodwaters,mildura,mudflats,ottokar,translit,radix,wigner,philosophically,tephritid,synthesizing,castletown,installs,stirner,resettle,bushfire,choirmaster,kabbalistic,shirazi,lightship,rebus,colonizers,centrifuge,leonean,kristofferson,thymus,clackamas,ratnam,rothesay,municipally,centralia,thurrock,gulfport,bilinear,desirability,merite,psoriasis,macaw,erigeron,consignment,mudstone,distorting,karlheinz,ramen,tailwheel,vitor,reinsurance,edifices,superannuation,dormancy,contagion,cobden,rendezvoused,prokaryotic,deliberative,patricians,feigned,degrades,starlings,sopot,viticultural,beaverton,overflowed,convener,garlands,michiel,ternopil,naturelle,biplanes,bagot,gamespy,ventspils,disembodied,flattening,profesional,londoners,arusha,scapular,forestall,pyridine,ulema,eurodance,aruna,callus,periodontal,coetzee,immobilized,o'meara,maharani,katipunan,reactants,zainab,microgravity,saintes,britpop,carrefour,constrain,adversarial,firebirds,brahmo,kashima,simca,surety,surpluses,superconductivity,gipuzkoa,cumans,tocantins,obtainable,humberside,roosting,'king,formula_54,minelayer,bessel,sulayman,cycled,biomarkers,annealing,shusha,barda,cassation,djing,polemics,tuple,directorates,indomitable,obsolescence,wilhelmine,pembina,bojan,tambo,dioecious,pensioner,magnificat,1660s,estrellas,southeasterly,immunodeficiency,railhead,surreptitiously,codeine,encores,religiosity,tempera,camberley,efendi,boardings,malleable,hagia,input/output,lucasfilm,ujjain,polymorphisms,creationist,berners,mickiewicz,irvington,linkedin,endures,kinect,munition,apologetics,fairlie,predicated,reprinting,ethnographer,variances,levantine,mariinsky,jadid,jarrow,asia/oceania,trinamool,waveforms,bisexuality,preselection,pupae,buckethead,hieroglyph,lyricists,marionette,dunbartonshire,restorer,monarchical,pazar,kickoffs,cabildo,savannas,gliese,dench,spoonbills,novelette,diliman,hypersensitivity,authorising,montefiore,mladen,qu'appelle,theistic,maruti,laterite,conestoga,saare,californica,proboscis,carrickfergus,imprecise,hadassah,baghdadi,jolgeh,deshmukh,amusements,heliopolis,berle,adaptability,partenkirchen,separations,baikonur,cardamom,southeastward,southfield,muzaffar,adequacy,metropolitana,rajkot,kiyoshi,metrobus,evictions,reconciles,librarianship,upsurge,knightley,badakhshan,proliferated,spirituals,burghley,electroacoustic,professing,featurette,reformists,skylab,descriptors,oddity,greyfriars,injects,salmond,lanzhou,dauntless,subgenera,underpowered,transpose,mahinda,gatos,aerobatics,seaworld,blocs,waratahs,joris,giggs,perfusion,koszalin,mieczyslaw,ayyubid,ecologists,modernists,sant'angelo,quicktime,him/her,staves,sanyo,melaka,acrocercops,qigong,iterated,generalizes,recuperation,vihara,circassians,psychical,chavo,memoires,infiltrates,notaries,pelecaniformesfamily,strident,chivalric,pierrepont,alleviating,broadsides,centipede,b.tech,reinterpreted,sudetenland,hussite,covenanters,radhika,ironclads,gainsbourg,testis,penarth,plantar,azadegan,beano,espn.com,leominster,autobiographies,nbcuniversal,eliade,khamenei,montferrat,undistinguished,ethnological,wenlock,fricatives,polymorphic,biome,joule,sheaths,astrophysicist,salve,neoclassicism,lovat,downwind,belisarius,forma,usurpation,freie,depopulation,backbench,ascenso,'high,aagpbl,gdanski,zalman,mouvement,encapsulation,bolshevism,statny,voyageurs,hywel,vizcaya,mazra'eh,narthex,azerbaijanis,cerebrospinal,mauretania,fantail,clearinghouse,bolingbroke,pequeno,ansett,remixing,microtubule,wrens,jawahar,palembang,gambian,hillsong,fingerboard,repurposed,sundry,incipient,veolia,theologically,ulaanbaatar,atsushi,foundling,resistivity,myeloma,factbook,mazowiecka,diacritic,urumqi,clontarf,provokes,intelsat,professes,materialise,portobello,benedictines,panionios,introverted,reacquired,bridport,mammary,kripke,oratorios,vlore,stoning,woredas,unreported,antti,togolese,fanzines,heuristics,conservatories,carburetors,clitheroe,cofounded,formula_57,erupting,quinnipiac,bootle,ghostface,sittings,aspinall,sealift,transferase,boldklub,siskiyou,predominated,francophonie,ferruginous,castrum,neogene,sakya,madama,precipitous,'love,posix,bithynia,uttara,avestan,thrushes,seiji,memorably,septimius,libri,cibernetico,hyperinflation,dissuaded,cuddalore,peculiarity,vaslui,grojec,albumin,thurles,casks,fasteners,fluidity,buble,casals,terek,gnosticism,cognates,ulnar,radwanska,babylonians,majuro,oxidizer,excavators,rhythmically,liffey,gorakhpur,eurydice,underscored,arborea,lumumba,tuber,catholique,grama,galilei,scrope,centreville,jacobin,bequests,ardeche,polygamous,montauban,terai,weatherboard,readability,attainder,acraea,transversely,rivets,winterbottom,reassures,bacteriology,vriesea,chera,andesite,dedications,homogenous,reconquered,bandon,forrestal,ukiyo,gurdjieff,tethys,sparc,muscogee,grebes,belchatow,mansa,blantyre,palliser,sokolow,fibroblasts,exmoor,misaki,soundscapes,housatonic,middelburg,convenor,leyla,antipope,histidine,okeechobee,alkenes,sombre,alkene,rubik,macaques,calabar,trophee,pinchot,'free,frusciante,chemins,falaise,vasteras,gripped,schwarzenberg,cumann,kanchipuram,acoustically,silverbacks,fangio,inset,plympton,kuril,vaccinations,recep,theropods,axils,stavropol,encroached,apoptotic,papandreou,wailers,moonstone,assizes,micrometers,hornchurch,truncation,annapurna,egyptologists,rheumatic,promiscuity,satiric,fleche,caloptilia,anisotropy,quaternions,gruppo,viscounts,awardees,aftershocks,sigint,concordance,oblasts,gaumont,stent,commissars,kesteven,hydroxy,vijayanagar,belorussian,fabricius,watermark,tearfully,mamet,leukaemia,sorkh,milepost,tattooing,vosta,abbasids,uncompleted,hedong,woodwinds,extinguishing,malus,multiplexes,francoist,pathet,responsa,bassists,'most,postsecondary,ossory,grampian,saakashvili,alito,strasberg,impressionistic,volador,gelatinous,vignette,underwing,campanian,abbasabad,albertville,hopefuls,nieuwe,taxiways,reconvened,recumbent,pathologists,unionized,faversham,asymptotically,romulo,culling,donja,constricted,annesley,duomo,enschede,lovech,sharpshooter,lansky,dhamma,papillae,alanine,mowat,delius,wrest,mcluhan,podkarpackie,imitators,bilaspur,stunting,pommel,casemate,handicaps,nagas,testaments,hemings,necessitate,rearward,locative,cilla,klitschko,lindau,merion,consequential,antic,soong,copula,berthing,chevrons,rostral,sympathizer,budokan,ranulf,beria,stilt,replying,conflated,alcibiades,painstaking,yamanashi,calif.,arvid,ctesiphon,xizong,rajas,caxton,downbeat,resurfacing,rudders,miscegenation,deathmatch,foregoing,arthropod,attestation,karts,reapportionment,harnessing,eastlake,schola,dosing,postcolonial,imtiaz,formula_55,insulators,gunung,accumulations,pampas,llewelyn,bahnhof,cytosol,grosjean,teaneck,briarcliff,arsenio,canara,elaborating,passchendaele,searchlights,holywell,mohandas,preventable,gehry,mestizos,ustinov,cliched,'national,heidfeld,tertullian,jihadist,tourer,miletus,semicircle,outclassed,bouillon,cardinalate,clarifies,dakshina,bilayer,pandyan,unrwa,chandragupta,formula_56,portola,sukumaran,lactation,islamia,heikki,couplers,misappropriation,catshark,montt,ploughs,carib,stator,leaderboard,kenrick,dendrites,scape,tillamook,molesworth,mussorgsky,melanesia,restated,troon,glycoside,truckee,headwater,mashup,sectoral,gangwon,docudrama,skirting,psychopathology,dramatised,ostroleka,infestations,thabo,depolarization,wideroe,eisenbahn,thomond,kumaon,upendra,foreland,acronyms,yaqui,retaking,raphaelite,specie,dupage,villars,lucasarts,chloroplast,werribee,balsa,ascribe,havant,flava,khawaja,tyumen,subtract,interrogators,reshaping,buzzcocks,eesti,campanile,potemkin,apertures,snowboarder,registrars,handbooks,boyar,contaminant,depositors,proximate,jeunesse,zagora,pronouncements,mists,nihilism,deified,margraviate,pietersen,moderators,amalfi,adjectival,copepods,magnetosphere,pallets,clemenceau,castra,perforation,granitic,troilus,grzegorz,luthier,dockyards,antofagasta,ffestiniog,subroutine,afterword,waterwheel,druce,nitin,undifferentiated,emacs,readmitted,barneveld,tapers,hittites,infomercials,infirm,braathens,heligoland,carpark,geomagnetic,musculoskeletal,nigerien,machinima,harmonize,repealing,indecency,muskoka,verite,steubenville,suffixed,cytoskeleton,surpasses,harmonia,imereti,ventricles,heterozygous,envisions,otsego,ecoles,warrnambool,burgenland,seria,rawat,capistrano,welby,kirin,enrollments,caricom,dragonlance,schaffhausen,expanses,photojournalism,brienne,etude,referent,jamtland,schemas,xianbei,cleburne,bicester,maritima,shorelines,diagonals,bjelke,nonpublic,aliasing,m.f.a,ovals,maitreya,skirmishing,grothendieck,sukhothai,angiotensin,bridlington,durgapur,contras,gakuen,skagit,rabbinate,tsunamis,haphazard,tyldesley,microcontroller,discourages,hialeah,compressing,septimus,larvik,condoleezza,psilocybin,protectionism,songbirds,clandestinely,selectmen,wargame,cinemascope,khazars,agronomy,melzer,latifah,cherokees,recesses,assemblymen,basescu,banaras,bioavailability,subchannels,adenine,o'kelly,prabhakar,leonese,dimethyl,testimonials,geoffroy,oxidant,universiti,gheorghiu,bohdan,reversals,zamorin,herbivore,jarre,sebastiao,infanterie,dolmen,teddington,radomsko,spaceships,cuzco,recapitulation,mahoning,bainimarama,myelin,aykroyd,decals,tokelau,nalgonda,rajasthani,121st,quelled,tambov,illyrians,homilies,illuminations,hypertrophy,grodzisk,inundation,incapacity,equilibria,combats,elihu,steinitz,berengar,gowda,canwest,khosrau,maculata,houten,kandinsky,onside,leatherhead,heritable,belvidere,federative,chukchi,serling,eruptive,patan,entitlements,suffragette,evolutions,migrates,demobilisation,athleticism,trope,sarpsborg,kensal,translink,squamish,concertgebouw,energon,timestamp,competences,zalgiris,serviceman,codice_7,spoofing,assange,mahadevan,skien,suceava,augustan,revisionism,unconvincing,hollande,drina,gottlob,lippi,broglie,darkening,tilapia,eagerness,nacht,kolmogorov,photometric,leeuwarden,jrotc,haemorrhage,almanack,cavalli,repudiation,galactose,zwickau,cetinje,houbraken,heavyweights,gabonese,ordinals,noticias,museveni,steric,charaxes,amjad,resection,joinville,leczyca,anastasius,purbeck,subtribe,dalles,leadoff,monoamine,jettisoned,kaori,anthologized,alfreton,indic,bayezid,tottori,colonizing,assassinating,unchanging,eusebian,d'estaing,tsingtao,toshio,transferases,peronist,metrology,equus,mirpur,libertarianism,kovil,indole,'green,abstention,quantitatively,icebreakers,tribals,mainstays,dryandra,eyewear,nilgiri,chrysanthemum,inositol,frenetic,merchantman,hesar,physiotherapist,transceiver,dancefloor,rankine,neisse,marginalization,lengthen,unaided,rework,pageantry,savio,striated,funen,witton,illuminates,frass,hydrolases,akali,bistrita,copywriter,firings,handballer,tachinidae,dmytro,coalesce,neretva,menem,moraines,coatbridge,crossrail,spoofed,drosera,ripen,protour,kikuyu,boleslav,edwardes,troubadours,haplogroups,wrasse,educationalist,sroda,khaneh,dagbladet,apennines,neuroscientist,deplored,terje,maccabees,daventry,spaceport,lessening,ducats,singer/guitarist,chambersburg,yeong,configurable,ceremonially,unrelenting,caffe,graaf,denizens,kingsport,ingush,panhard,synthesised,tumulus,homeschooled,bozorg,idiomatic,thanhouser,queensway,radek,hippolytus,inking,banovina,peacocks,piaui,handsworth,pantomimes,abalone,thera,kurzweil,bandura,augustinians,bocelli,ferrol,jiroft,quadrature,contravention,saussure,rectification,agrippina,angelis,matanzas,nidaros,palestrina,latium,coriolis,clostridium,ordain,uttering,lanchester,proteolytic,ayacucho,merseburg,holbein,sambalpur,algebraically,inchon,ostfold,savoia,calatrava,lahiri,judgeship,ammonite,masaryk,meyerbeer,hemorrhagic,superspeedway,ningxia,panicles,encircles,khmelnytsky,profusion,esher,babol,inflationary,anhydride,gaspe,mossy,periodicity,nacion,meteorologists,mahjong,interventional,sarin,moult,enderby,modell,palgrave,warners,montcalm,siddha,functionalism,rilke,politicized,broadmoor,kunste,orden,brasileira,araneta,eroticism,colquhoun,mamba,blacktown,tubercle,seagrass,manoel,camphor,neoregelia,llandudno,annexe,enplanements,kamien,plovers,statisticians,iturbide,madrasah,nontrivial,publican,landholders,manama,uninhabitable,revivalist,trunkline,friendliness,gurudwara,rocketry,unido,tripos,besant,braque,evolutionarily,abkhazian,staffel,ratzinger,brockville,bohemond,intercut,djurgarden,utilitarianism,deploys,sastri,absolutism,subhas,asghar,fictions,sepinwall,proportionately,titleholders,thereon,foursquare,machinegun,knightsbridge,siauliai,aqaba,gearboxes,castaways,weakens,phallic,strzelce,buoyed,ruthenia,pharynx,intractable,neptunes,koine,leakey,netherlandish,preempted,vinay,terracing,instigating,alluvium,prosthetics,vorarlberg,politiques,joinery,reduplication,nebuchadnezzar,lenticular,banka,seaborne,pattinson,helpline,aleph,beckenham,californians,namgyal,franziska,aphid,branagh,transcribe,appropriateness,surakarta,takings,propagates,juraj,b0d3fb,brera,arrayed,tailback,falsehood,hazleton,prosody,egyptology,pinnate,tableware,ratan,camperdown,ethnologist,tabari,classifiers,biogas,126th,kabila,arbitron,apuestas,membranous,kincardine,oceana,glories,natick,populism,synonymy,ghalib,mobiles,motherboards,stationers,germinal,patronised,formula_58,gaborone,torts,jeezy,interleague,novaya,batticaloa,offshoots,wilbraham,filename,nswrfl,'well,trilobite,pythons,optimally,scientologists,rhesus,pilsen,backdrops,batang,unionville,hermanos,shrikes,fareham,outlawing,discontinuing,boisterous,shamokin,scanty,southwestward,exchangers,unexpired,mewar,h.m.s,saldanha,pawan,condorcet,turbidity,donau,indulgences,coincident,cliques,weeklies,bardhaman,violators,kenai,caspase,xperia,kunal,fistula,epistemic,cammell,nephi,disestablishment,rotator,germaniawerft,pyaar,chequered,jigme,perlis,anisotropic,popstars,kapil,appendices,berat,defecting,shacks,wrangel,panchayath,gorna,suckling,aerosols,sponheim,talal,borehole,encodings,enlai,subduing,agong,nadar,kitsap,syrmia,majumdar,pichilemu,charleville,embryology,booting,literati,abutting,basalts,jussi,repubblica,hertogenbosch,digitization,relents,hillfort,wiesenthal,kirche,bhagwan,bactrian,oases,phyla,neutralizing,helsing,ebooks,spearheading,margarine,'golden,phosphor,picea,stimulants,outliers,timescale,gynaecology,integrator,skyrocketed,bridgnorth,senecio,ramachandra,suffragist,arrowheads,aswan,inadvertent,microelectronics,118th,sofer,kubica,melanesian,tuanku,balkh,vyborg,crystallographic,initiators,metamorphism,ginzburg,looters,unimproved,finistere,newburyport,norges,immunities,franchisees,asterism,kortrijk,camorra,komsomol,fleurs,draughts,patagonian,voracious,artin,collaborationist,revolucion,revitalizing,xaver,purifying,antipsychotic,disjunct,pompeius,dreamwave,juvenal,beinn,adiyaman,antitank,allama,boletus,melanogaster,dumitru,caproni,aligns,athabaskan,stobart,phallus,veikkausliiga,hornsey,buffering,bourbons,dobruja,marga,borax,electrics,gangnam,motorcyclist,whidbey,draconian,lodger,galilean,sanctification,imitates,boldness,underboss,wheatland,cantabrian,terceira,maumee,redefining,uppercase,ostroda,characterise,universalism,equalized,syndicalism,haringey,masovia,deleuze,funkadelic,conceals,thuan,minsky,pluralistic,ludendorff,beekeeping,bonfires,endoscopic,abuts,prebend,jonkoping,amami,tribunes,yup'ik,awadh,gasification,pforzheim,reforma,antiwar,vaishnavism,maryville,inextricably,margrethe,empresa,neutrophils,sanctified,ponca,elachistidae,curiae,quartier,mannar,hyperplasia,wimax,busing,neologism,florins,underrepresented,digitised,nieuw,cooch,howards,frege,hughie,plied,swale,kapellmeister,vajpayee,quadrupled,aeronautique,dushanbe,custos,saltillo,kisan,tigray,manaus,epigrams,shamanic,peppered,frosts,promotion/relegation,concedes,zwingli,charentes,whangarei,hyung,spring/summer,sobre,eretz,initialization,sawai,ephemera,grandfathered,arnaldo,customised,permeated,parapets,growths,visegrad,estudios,altamont,provincia,apologises,stoppard,carburettor,rifts,kinematic,zhengzhou,eschatology,prakrit,folate,yvelines,scapula,stupas,rishon,reconfiguration,flutist,1680s,apostolate,proudhon,lakshman,articulating,stortford,faithfull,bitterns,upwelling,qur'anic,lidar,interferometry,waterlogged,koirala,ditton,wavefunction,fazal,babbage,antioxidants,lemberg,deadlocked,tolled,ramapo,mathematica,leiria,topologies,khali,photonic,balti,1080p,corrects,recommenced,polyglot,friezes,tiebreak,copacabana,cholmondeley,armband,abolishment,sheamus,buttes,glycolysis,cataloged,warrenton,sassari,kishan,foodservice,cryptanalysis,holmenkollen,cosplay,machi,yousuf,mangal,allying,fertiliser,otomi,charlevoix,metallurg,parisians,bottlenose,oakleigh,debug,cidade,accede,ligation,madhava,pillboxes,gatefold,aveyron,sorin,thirsk,immemorial,menelik,mehra,domingos,underpinned,fleshed,harshness,diphthong,crestwood,miskolc,dupri,pyrausta,muskingum,tuoba,prodi,incidences,waynesboro,marquesas,heydar,artesian,calinescu,nucleation,funders,covalently,compaction,derbies,seaters,sodor,tabular,amadou,peckinpah,o'halloran,zechariah,libyans,kartik,daihatsu,chandran,erzhu,heresies,superheated,yarder,dorde,tanjore,abusers,xuanwu,juniperus,moesia,trusteeship,birdwatching,beatz,moorcock,harbhajan,sanga,choreographic,photonics,boylston,amalgamate,prawns,electrifying,sarath,inaccurately,exclaims,powerpoint,chaining,cpusa,adulterous,saccharomyces,glogow,vfl/afl,syncretic,simla,persisting,functors,allosteric,euphorbiaceae,juryo,mlada,moana,gabala,thornycroft,kumanovo,ostrovsky,sitio,tutankhamun,sauropods,kardzhali,reinterpretation,sulpice,rosyth,originators,halesowen,delineation,asesoria,abatement,gardai,elytra,taillights,overlays,monsoons,sandpipers,ingmar,henrico,inaccuracy,irwell,arenabowl,elche,pressburg,signalman,interviewees,sinkhole,pendle,ecommerce,cellos,nebria,organometallic,surrealistic,propagandist,interlaken,canandaigua,aerials,coutinho,pascagoula,tonopah,letterkenny,gropius,carbons,hammocks,childe,polities,hosiery,donitz,suppresses,diaghilev,stroudsburg,bagram,pistoia,regenerating,unitarians,takeaway,offstage,vidin,glorification,bakunin,yavapai,lutzow,sabercats,witney,abrogated,gorlitz,validating,dodecahedron,stubbornly,telenor,glaxosmithkline,solapur,undesired,jellicoe,dramatization,four-and-a-half,seawall,waterpark,artaxerxes,vocalization,typographic,byung,sachsenhausen,shepparton,kissimmee,konnan,belsen,dhawan,khurd,mutagenesis,vejle,perrot,estradiol,formula_60,saros,chiloe,misiones,lamprey,terrains,speke,miasto,eigenvectors,haydock,reservist,corticosteroids,savitri,shinawatra,developmentally,yehudi,berates,janissaries,recapturing,rancheria,subplots,gresley,nikkatsu,oryol,cosmas,boavista,formula_59,playfully,subsections,commentated,kathakali,dorid,vilaine,seepage,hylidae,keiji,kazakhs,triphosphate,1620s,supersede,monarchists,falla,miyako,notching,bhumibol,polarizing,secularized,shingled,bronislaw,lockerbie,soleyman,bundesbahn,latakia,redoubts,boult,inwardly,invents,ondrej,minangkabau,newquay,permanente,alhaji,madhav,malini,ellice,bookmaker,mankiewicz,etihad,o'dea,interrogative,mikawa,wallsend,canisius,bluesy,vitruvius,noord,ratifying,mixtec,gujranwala,subprefecture,keelung,goiania,nyssa,shi'ite,semitone,ch'uan,computerised,pertuan,catapults,nepomuk,shruti,millstones,buskerud,acolytes,tredegar,sarum,armia,dell'arte,devises,custodians,upturned,gallaudet,disembarking,thrashed,sagrada,myeon,undeclared,qumran,gaiden,tepco,janesville,showground,condense,chalon,unstaffed,pasay,undemocratic,hauts,viridis,uninjured,escutcheon,gymkhana,petaling,hammam,dislocations,tallaght,rerum,shias,indios,guaranty,simplicial,benares,benediction,tajiri,prolifically,huawei,onerous,grantee,ferencvaros,otranto,carbonates,conceit,digipak,qadri,masterclasses,swamiji,cradock,plunket,helmsman,119th,salutes,tippecanoe,murshidabad,intelligibility,mittal,diversifying,bidar,asansol,crowdsourcing,rovere,karakoram,grindcore,skylights,tulagi,furrows,ligne,stuka,sumer,subgraph,amata,regionalist,bulkeley,teletext,glorify,readied,lexicographer,sabadell,predictability,quilmes,phenylalanine,bandaranaike,pyrmont,marksmen,quisling,viscountess,sociopolitical,afoul,pediments,swazi,martyrology,nullify,panagiotis,superconductors,veldenz,jujuy,l'isle,hematopoietic,shafi,subsea,hattiesburg,jyvaskyla,kebir,myeloid,landmine,derecho,amerindians,birkenau,scriabin,milhaud,mucosal,nikaya,freikorps,theoretician,proconsul,o'hanlon,clerked,bactria,houma,macular,topologically,shrubby,aryeh,ghazali,afferent,magalhaes,moduli,ashtabula,vidarbha,securitate,ludwigsburg,adoor,varun,shuja,khatun,chengde,bushels,lascelles,professionnelle,elfman,rangpur,unpowered,citytv,chojnice,quaternion,stokowski,aschaffenburg,commutes,subramaniam,methylene,satrap,gharb,namesakes,rathore,helier,gestational,heraklion,colliers,giannis,pastureland,evocation,krefeld,mahadeva,churchmen,egret,yilmaz,galeazzo,pudukkottai,artigas,generalitat,mudslides,frescoed,enfeoffed,aphorisms,melilla,montaigne,gauliga,parkdale,mauboy,linings,prema,sapir,xylophone,kushan,rockne,sequoyah,vasyl,rectilinear,vidyasagar,microcosm,san'a,carcinogen,thicknesses,aleut,farcical,moderating,detested,hegemonic,instalments,vauban,verwaltungsgemeinschaft,picayune,razorback,magellanic,moluccas,pankhurst,exportation,waldegrave,sufferer,bayswater,1up.com,rearmament,orangutans,varazdin,b.o.b,elucidate,harlingen,erudition,brankovic,lapis,slipway,urraca,shinde,unwell,elwes,euboea,colwyn,srivijaya,grandstands,hortons,generalleutnant,fluxes,peterhead,gandhian,reals,alauddin,maximized,fairhaven,endow,ciechanow,perforations,darters,panellist,manmade,litigants,exhibitor,tirol,caracalla,conformance,hotelier,stabaek,hearths,borac,frisians,ident,veliko,emulators,schoharie,uzbeks,samarra,prestwick,wadia,universita,tanah,bucculatrix,predominates,genotypes,denounces,roadsides,ganassi,keokuk,philatelist,tomic,ingots,conduits,samplers,abdus,johar,allegories,timaru,wolfpacks,secunda,smeaton,sportivo,inverting,contraindications,whisperer,moradabad,calamities,bakufu,soundscape,smallholders,nadeem,crossroad,xenophobic,zakir,nationalliga,glazes,retroflex,schwyz,moroder,rubra,quraysh,theodoros,endemol,infidels,km/hr,repositioned,portraitist,lluis,answerable,arges,mindedness,coarser,eyewall,teleported,scolds,uppland,vibraphone,ricoh,isenburg,bricklayer,cuttlefish,abstentions,communicable,cephalopod,stockyards,balto,kinston,armbar,bandini,elphaba,maxims,bedouins,sachsen,friedkin,tractate,pamir,ivanovo,mohini,kovalainen,nambiar,melvyn,orthonormal,matsuyama,cuernavaca,veloso,overstated,streamer,dravid,informers,analyte,sympathized,streetscape,gosta,thomasville,grigore,futuna,depleting,whelks,kiedis,armadale,earner,wynyard,dothan,animating,tridentine,sabri,immovable,rivoli,ariege,parley,clinker,circulates,junagadh,fraunhofer,congregants,180th,buducnost,formula_62,olmert,dedekind,karnak,bayernliga,mazes,sandpiper,ecclestone,yuvan,smallmouth,decolonization,lemmy,adjudicated,retiro,legia,benue,posit,acidification,wahab,taconic,floatplane,perchlorate,atria,wisbech,divestment,dallara,phrygia,palustris,cybersecurity,rebates,facie,mineralogical,substituent,proteges,fowey,mayenne,smoothbore,cherwell,schwarzschild,junin,murrumbidgee,smalltalk,d'orsay,emirati,calaveras,titusville,theremin,vikramaditya,wampanoag,burra,plaines,onegin,emboldened,whampoa,langa,soderbergh,arnaz,sowerby,arendal,godunov,pathanamthitta,damselfly,bestowing,eurosport,iconoclasm,outfitters,acquiesced,badawi,hypotension,ebbsfleet,annulus,sohrab,thenceforth,chagatai,necessitates,aulus,oddities,toynbee,uniontown,innervation,populaire,indivisible,rossellini,minuet,cyrene,gyeongju,chania,cichlids,harrods,1690s,plunges,abdullahi,gurkhas,homebuilt,sortable,bangui,rediff,incrementally,demetrios,medaille,sportif,svend,guttenberg,tubules,carthusian,pleiades,torii,hoppus,phenyl,hanno,conyngham,teschen,cronenberg,wordless,melatonin,distinctiveness,autos,freising,xuanzang,dunwich,satanism,sweyn,predrag,contractually,pavlovic,malaysians,micrometres,expertly,pannonian,abstaining,capensis,southwesterly,catchphrases,commercialize,frankivsk,normanton,hibernate,verso,deportees,dubliners,codice_8,condors,zagros,glosses,leadville,conscript,morrisons,usury,ossian,oulton,vaccinium,civet,ayman,codrington,hadron,nanometers,geochemistry,extractor,grigori,tyrrhenian,neocollyris,drooping,falsification,werft,courtauld,brigantine,orhan,chapultepec,supercopa,federalized,praga,havering,encampments,infallibility,sardis,pawar,undirected,reconstructionist,ardrossan,varuna,pastimes,archdiocesan,fledging,shenhua,molise,secondarily,stagnated,replicates,ciencias,duryodhana,marauding,ruislip,ilyich,intermixed,ravenswood,shimazu,mycorrhizal,icosahedral,consents,dunblane,follicular,pekin,suffield,muromachi,kinsale,gauche,businesspeople,thereto,watauga,exaltation,chelmno,gorse,proliferate,drainages,burdwan,kangra,transducers,inductor,duvalier,maguindanao,moslem,uncaf,givenchy,plantarum,liturgics,telegraphs,lukashenko,chenango,andante,novae,ironwood,faubourg,torme,chinensis,ambala,pietermaritzburg,virginians,landform,bottlenecks,o'driscoll,darbhanga,baptistery,ameer,needlework,naperville,auditoriums,mullingar,starrer,animatronic,topsoil,madura,cannock,vernet,santurce,catocala,ozeki,pontevedra,multichannel,sundsvall,strategists,medio,135th,halil,afridi,trelawny,caloric,ghraib,allendale,hameed,ludwigshafen,spurned,pavlo,palmar,strafed,catamarca,aveiro,harmonization,surah,predictors,solvay,mande,omnipresent,parenthesis,echolocation,equaling,experimenters,acyclic,lithographic,sepoys,katarzyna,sridevi,impoundment,khosrow,caesarean,nacogdoches,rockdale,lawmaker,caucasians,bahman,miyan,rubric,exuberance,bombastic,ductile,snowdonia,inlays,pinyon,anemones,hurries,hospitallers,tayyip,pulleys,treme,photovoltaics,testbed,polonium,ryszard,osgoode,profiting,ironwork,unsurpassed,nepticulidae,makai,lumbini,preclassic,clarksburg,egremont,videography,rehabilitating,ponty,sardonic,geotechnical,khurasan,solzhenitsyn,henna,phoenicia,rhyolite,chateaux,retorted,tomar,deflections,repressions,harborough,renan,brumbies,vandross,storia,vodou,clerkenwell,decking,universo,salon.com,imprisoning,sudwest,ghaziabad,subscribing,pisgah,sukhumi,econometric,clearest,pindar,yildirim,iulia,atlases,cements,remaster,dugouts,collapsible,resurrecting,batik,unreliability,thiers,conjunctions,colophon,marcher,placeholder,flagella,wolds,kibaki,viviparous,twelver,screenshots,aroostook,khadr,iconographic,itasca,jaume,basti,propounded,varro,be'er,jeevan,exacted,shrublands,creditable,brocade,boras,bittern,oneonta,attentional,herzliya,comprehensible,lakeville,discards,caxias,frankland,camerata,satoru,matlab,commutator,interprovincial,yorkville,benefices,nizami,edwardsville,amigaos,cannabinoid,indianola,amateurliga,pernicious,ubiquity,anarchic,novelties,precondition,zardari,symington,sargodha,headphone,thermopylae,mashonaland,zindagi,thalberg,loewe,surfactants,dobro,crocodilians,samhita,diatoms,haileybury,berwickshire,supercritical,sofie,snorna,slatina,intramolecular,agung,osteoarthritis,obstetric,teochew,vakhtang,connemara,deformations,diadem,ferruccio,mainichi,qualitatively,refrigerant,rerecorded,methylated,karmapa,krasinski,restatement,rouvas,cubitt,seacoast,schwarzkopf,homonymous,shipowner,thiamine,approachable,xiahou,160th,ecumenism,polistes,internazionali,fouad,berar,biogeography,texting,inadequately,'when,4kids,hymenoptera,emplaced,cognomen,bellefonte,supplant,michaelmas,uriel,tafsir,morazan,schweinfurt,chorister,ps400,nscaa,petipa,resolutely,ouagadougou,mascarene,supercell,konstanz,bagrat,harmonix,bergson,shrimps,resonators,veneta,camas,mynydd,rumford,generalmajor,khayyam,web.com,pappus,halfdan,tanana,suomen,yutaka,bibliographical,traian,silat,noailles,contrapuntal,agaricus,'special,minibuses,1670s,obadiah,deepa,rorschach,malolos,lymington,valuations,imperials,caballeros,ambroise,judicature,elegiac,sedaka,shewa,checksum,gosforth,legionaries,corneille,microregion,friedrichshafen,antonis,surnamed,mycelium,cantus,educations,topmost,outfitting,ivica,nankai,gouda,anthemic,iosif,supercontinent,antifungal,belarusians,mudaliar,mohawks,caversham,glaciated,basemen,stevan,clonmel,loughton,deventer,positivist,manipuri,tensors,panipat,changeup,impermeable,dubbo,elfsborg,maritimo,regimens,bikram,bromeliad,substratum,norodom,gaultier,queanbeyan,pompeo,redacted,eurocopter,mothballed,centaurs,borno,copra,bemidji,'home,sopron,neuquen,passo,cineplex,alexandrov,wysokie,mammoths,yossi,sarcophagi,congreve,petkovic,extraneous,waterbirds,slurs,indias,phaeton,discontented,prefaced,abhay,prescot,interoperable,nordisk,bicyclists,validly,sejong,litovsk,zanesville,kapitanleutnant,kerch,changeable,mcclatchy,celebi,attesting,maccoll,sepahan,wayans,veined,gaudens,markt,dansk,soane,quantized,petersham,forebears,nayarit,frenzied,queuing,bygone,viggo,ludwik,tanka,hanssen,brythonic,cornhill,primorsky,stockpiles,conceptualization,lampeter,hinsdale,mesoderm,bielsk,rosenheim,ultron,joffrey,stanwyck,khagan,tiraspol,pavelic,ascendant,empoli,metatarsal,descentralizado,masada,ligier,huseyin,ramadi,waratah,tampines,ruthenium,statoil,mladost,liger,grecian,multiparty,digraph,maglev,reconsideration,radiography,cartilaginous,taizu,wintered,anabaptist,peterhouse,shoghi,assessors,numerator,paulet,painstakingly,halakhic,rocroi,motorcycling,gimel,kryptonian,emmeline,cheeked,drawdown,lelouch,dacians,brahmana,reminiscence,disinfection,optimizations,golders,extensor,tsugaru,tolling,liman,gulzar,unconvinced,crataegus,oppositional,dvina,pyrolysis,mandan,alexius,prion,stressors,loomed,moated,dhivehi,recyclable,relict,nestlings,sarandon,kosovar,solvers,czeslaw,kenta,maneuverable,middens,berkhamsted,comilla,folkways,loxton,beziers,batumi,petrochemicals,optimised,sirjan,rabindra,musicality,rationalisation,drillers,subspaces,'live,bbwaa,outfielders,tsung,danske,vandalised,norristown,striae,kanata,gastroenterology,steadfastly,equalising,bootlegging,mannerheim,notodontidae,lagoa,commentating,peninsulas,chishti,seismology,modigliani,preceptor,canonically,awardee,boyaca,hsinchu,stiffened,nacelle,bogor,dryness,unobstructed,yaqub,scindia,peeters,irritant,ammonites,ferromagnetic,speechwriter,oxygenated,walesa,millais,canarian,faience,calvinistic,discriminant,rasht,inker,annexes,howth,allocates,conditionally,roused,regionalism,regionalbahn,functionary,nitrates,bicentenary,recreates,saboteurs,koshi,plasmids,thinned,124th,plainview,kardashian,neuville,victorians,radiates,127th,vieques,schoolmates,petru,tokusatsu,keying,sunaina,flamethrower,'bout,demersal,hosokawa,corelli,omniscient,o'doherty,niksic,reflectivity,transdev,cavour,metronome,temporally,gabba,nsaids,geert,mayport,hematite,boeotia,vaudreuil,torshavn,sailplane,mineralogist,eskisehir,practises,gallifrey,takumi,unease,slipstream,hedmark,paulinus,ailsa,wielkopolska,filmworks,adamantly,vinaya,facelifted,franchisee,augustana,toppling,velvety,crispa,stonington,histological,genealogist,tactician,tebow,betjeman,nyingma,overwinter,oberoi,rampal,overwinters,petaluma,lactarius,stanmore,balikpapan,vasant,inclines,laminate,munshi,sociedade,rabbah,septal,boyband,ingrained,faltering,inhumans,nhtsa,affix,l'ordre,kazuki,rossendale,mysims,latvians,slaveholders,basilicata,neuburg,assize,manzanillo,scrobipalpa,formula_61,belgique,pterosaurs,privateering,vaasa,veria,northport,pressurised,hobbyist,austerlitz,sahih,bhadra,siliguri,bistrica,bursaries,wynton,corot,lepidus,lully,libor,libera,olusegun,choline,mannerism,lymphocyte,chagos,duxbury,parasitism,ecowas,morotai,cancion,coniston,aggrieved,sputnikmusic,parle,ammonian,civilisations,malformation,cattaraugus,skyhawks,d'arc,demerara,bronfman,midwinter,piscataway,jogaila,threonine,matins,kohlberg,hubli,pentatonic,camillus,nigam,potro,unchained,chauvel,orangeville,cistercians,redeployment,xanthi,manju,carabinieri,pakeha,nikolaevich,kantakouzenos,sesquicentennial,gunships,symbolised,teramo,ballo,crusading,l'oeil,bharatpur,lazier,gabrovo,hysteresis,rothbard,chaumont,roundel,ma'mun,sudhir,queried,newts,shimane,presynaptic,playfield,taxonomists,sensitivities,freleng,burkinabe,orfeo,autovia,proselytizing,bhangra,pasok,jujutsu,heung,pivoting,hominid,commending,formula_64,epworth,christianized,oresund,hantuchova,rajputana,hilversum,masoretic,dayak,bakri,assen,magog,macromolecules,waheed,qaida,spassky,rumped,protrudes,preminger,misogyny,glencairn,salafi,lacunae,grilles,racemes,areva,alighieri,inari,epitomized,photoshoot,one-of-a-kind,tring,muralist,tincture,backwaters,weaned,yeasts,analytically,smaland,caltrans,vysocina,jamuna,mauthausen,175th,nouvelles,censoring,reggina,christology,gilad,amplifying,mehmood,johnsons,redirects,eastgate,sacrum,meteoric,riverbanks,guidebooks,ascribes,scoparia,iconoclastic,telegraphic,chine,merah,mistico,lectern,sheung,aethelstan,capablanca,anant,uspto,albatrosses,mymensingh,antiretroviral,clonal,coorg,vaillant,liquidator,gigas,yokai,eradicating,motorcyclists,waitakere,tandon,nears,montenegrins,250th,tatsuya,yassin,atheistic,syncretism,nahum,berisha,transcended,owensboro,lakshmana,abteilung,unadorned,nyack,overflows,harrisonburg,complainant,uematsu,frictional,worsens,sangguniang,abutment,bulwer,sarma,apollinaire,shippers,lycia,alentejo,porpoises,optus,trawling,augustow,blackwall,workbench,westmount,leaped,sikandar,conveniences,stornoway,culverts,zoroastrians,hristo,ansgar,assistive,reassert,fanned,compasses,delgada,maisons,arima,plonsk,verlaine,starstruck,rakhine,befell,spirally,wyclef,expend,colloquium,formula_63,albertus,bellarmine,handedness,holon,introns,movimiento,profitably,lohengrin,discoverers,awash,erste,pharisees,dwarka,oghuz,hashing,heterodox,uloom,vladikavkaz,linesman,rehired,nucleophile,germanicus,gulshan,songz,bayerische,paralympian,crumlin,enjoined,khanum,prahran,penitent,amersfoort,saranac,semisimple,vagrants,compositing,tualatin,oxalate,lavra,ironi,ilkeston,umpqua,calum,stretford,zakat,guelders,hydrazine,birkin,spurring,modularity,aspartate,sodermanland,hopital,bellary,legazpi,clasico,cadfael,hypersonic,volleys,pharmacokinetics,carotene,orientale,pausini,bataille,lunga,retailed,m.phil,mazowieckie,vijayan,rawal,sublimation,promissory,estimators,ploughed,conflagration,penda,segregationist,otley,amputee,coauthor,sopra,pellew,wreckers,tollywood,circumscription,permittivity,strabane,landward,articulates,beaverbrook,rutherglen,coterminous,whistleblowers,colloidal,surbiton,atlante,oswiecim,bhasa,lampooned,chanter,saarc,landkreis,tribulation,tolerates,daiichi,hatun,cowries,dyschirius,abercromby,attock,aldwych,inflows,absolutist,l'histoire,committeeman,vanbrugh,headstock,westbourne,appenzell,hoxton,oculus,westfalen,roundabouts,nickelback,trovatore,quenching,summarises,conservators,transmutation,talleyrand,barzani,unwillingly,axonal,'blue,opining,enveloping,fidesz,rafah,colborne,flickr,lozenge,dulcimer,ndebele,swaraj,oxidize,gonville,resonated,gilani,superiore,endeared,janakpur,shepperton,solidifying,memoranda,sochaux,kurnool,rewari,emirs,kooning,bruford,unavailability,kayseri,judicious,negating,pterosaur,cytosolic,chernihiv,variational,sabretooth,seawolves,devalued,nanded,adverb,volunteerism,sealers,nemours,smederevo,kashubian,bartin,animax,vicomte,polotsk,polder,archiepiscopal,acceptability,quidditch,tussock,seminaire,immolation,belge,coves,wellingborough,khaganate,mckellen,nayaka,brega,kabhi,pontoons,bascule,newsreels,injectors,cobol,weblog,diplo,biggar,wheatbelt,erythrocytes,pedra,showgrounds,bogdanovich,eclecticism,toluene,elegies,formalize,andromedae,airworthiness,springville,mainframes,overexpression,magadha,bijelo,emlyn,glutamine,accenture,uhuru,metairie,arabidopsis,patanjali,peruvians,berezovsky,accion,astrolabe,jayanti,earnestly,sausalito,recurved,1500s,ramla,incineration,galleons,laplacian,shiki,smethwick,isomerase,dordevic,janow,jeffersonville,internationalism,penciled,styrene,ashur,nucleoside,peristome,horsemanship,sedges,bachata,medes,kristallnacht,schneerson,reflectance,invalided,strutt,draupadi,destino,partridges,tejas,quadrennial,aurel,halych,ethnomusicology,autonomist,radyo,rifting,shi'ar,crvena,telefilm,zawahiri,plana,sultanates,theodorus,subcontractors,pavle,seneschal,teleports,chernivtsi,buccal,brattleboro,stankovic,safar,dunhuang,electrocution,chastised,ergonomic,midsomer,130th,zomba,nongovernmental,escapist,localize,xuzhou,kyrie,carinthian,karlovac,nisan,kramnik,pilipino,digitisation,khasi,andronicus,highwayman,maior,misspelling,sebastopol,socon,rhaetian,archimandrite,partway,positivity,otaku,dingoes,tarski,geopolitics,disciplinarian,zulfikar,kenzo,globose,electrophilic,modele,storekeeper,pohang,wheldon,washers,interconnecting,digraphs,intrastate,campy,helvetic,frontispiece,ferrocarril,anambra,petraeus,midrib,endometrial,dwarfism,mauryan,endocytosis,brigs,percussionists,furtherance,synergistic,apocynaceae,krona,berthier,circumvented,casal,siltstone,precast,ethnikos,realists,geodesy,zarzuela,greenback,tripathi,persevered,interments,neutralization,olbermann,departements,supercomputing,demobilised,cassavetes,dunder,ministering,veszprem,barbarism,'world,pieve,apologist,frentzen,sulfides,firewalls,pronotum,staatsoper,hachette,makhachkala,oberland,phonon,yoshihiro,instars,purnima,winslet,mutsu,ergative,sajid,nizamuddin,paraphrased,ardeidae,kodagu,monooxygenase,skirmishers,sportiva,o'byrne,mykolaiv,ophir,prieta,gyllenhaal,kantian,leche,copan,herero,ps250,gelsenkirchen,shalit,sammarinese,chetwynd,wftda,travertine,warta,sigmaringen,concerti,namespace,ostergotland,biomarker,universals,collegio,embarcadero,wimborne,fiddlers,likening,ransomed,stifled,unabated,kalakaua,khanty,gongs,goodrem,countermeasure,publicizing,geomorphology,swedenborg,undefended,catastrophes,diverts,storyboards,amesbury,contactless,placentia,festivity,authorise,terrane,thallium,stradivarius,antonine,consortia,estimations,consecrate,supergiant,belichick,pendants,butyl,groza,univac,afire,kavala,studi,teletoon,paucity,gonbad,koninklijke,128th,stoichiometric,multimodal,facundo,anatomic,melamine,creuse,altan,brigands,mcguinty,blomfield,tsvangirai,protrusion,lurgan,warminster,tenzin,russellville,discursive,definable,scotrail,lignin,reincorporated,o'dell,outperform,redland,multicolored,evaporates,dimitrie,limbic,patapsco,interlingua,surrogacy,cutty,potrero,masud,cahiers,jintao,ardashir,centaurus,plagiarized,minehead,musings,statuettes,logarithms,seaview,prohibitively,downforce,rivington,tomorrowland,microbiologist,ferric,morag,capsid,kucinich,clairvaux,demotic,seamanship,cicada,painterly,cromarty,carbonic,tupou,oconee,tehuantepec,typecast,anstruther,internalized,underwriters,tetrahedra,flagrant,quakes,pathologies,ulrik,nahal,tarquini,dongguan,parnassus,ryoko,senussi,seleucia,airasia,einer,sashes,d'amico,matriculating,arabesque,honved,biophysical,hardinge,kherson,mommsen,diels,icbms,reshape,brasiliensis,palmach,netaji,oblate,functionalities,grigor,blacksburg,recoilless,melanchthon,reales,astrodome,handcrafted,memes,theorizes,isma'il,aarti,pirin,maatschappij,stabilizes,honiara,ashbury,copts,rootes,defensed,queiroz,mantegna,galesburg,coraciiformesfamily,cabrillo,tokio,antipsychotics,kanon,173rd,apollonia,finial,lydian,hadamard,rangi,dowlatabad,monolingual,platformer,subclasses,chiranjeevi,mirabeau,newsgroup,idmanyurdu,kambojas,walkover,zamoyski,generalist,khedive,flanges,knowle,bande,157th,alleyn,reaffirm,pininfarina,zuckerberg,hakodate,131st,aditi,bellinzona,vaulter,planking,boscombe,colombians,lysis,toppers,metered,nahyan,queensryche,minho,nagercoil,firebrand,foundress,bycatch,mendota,freeform,antena,capitalisation,martinus,overijssel,purists,interventionist,zgierz,burgundians,hippolyta,trompe,umatilla,moroccans,dictionnaire,hydrography,changers,chota,rimouski,aniline,bylaw,grandnephew,neamt,lemnos,connoisseurs,tractive,rearrangements,fetishism,finnic,apalachicola,landowning,calligraphic,circumpolar,mansfeld,legible,orientalism,tannhauser,blamey,maximization,noinclude,blackbirds,angara,ostersund,pancreatitis,glabra,acleris,juried,jungian,triumphantly,singlet,plasmas,synesthesia,yellowhead,unleashes,choiseul,quanzhong,brookville,kaskaskia,igcse,skatepark,jatin,jewellers,scaritinae,techcrunch,tellurium,lachaise,azuma,codeshare,dimensionality,unidirectional,scolaire,macdill,camshafts,unassisted,verband,kahlo,eliya,prelature,chiefdoms,saddleback,sockers,iommi,coloratura,llangollen,biosciences,harshest,maithili,k'iche,plical,multifunctional,andreu,tuskers,confounding,sambre,quarterdeck,ascetics,berdych,transversal,tuolumne,sagami,petrobras,brecker,menxia,instilling,stipulating,korra,oscillate,deadpan,v/line,pyrotechnic,stoneware,prelims,intracoastal,retraining,ilija,berwyn,encrypt,achievers,zulfiqar,glycoproteins,khatib,farmsteads,occultist,saman,fionn,derulo,khilji,obrenovic,argosy,toowong,dementieva,sociocultural,iconostasis,craigslist,festschrift,taifa,intercalated,tanjong,penticton,sharad,marxian,extrapolation,guises,wettin,prabang,exclaiming,kosta,famas,conakry,wanderings,'aliabad,macleay,exoplanet,bancorp,besiegers,surmounting,checkerboard,rajab,vliet,tarek,operable,wargaming,haldimand,fukuyama,uesugi,aggregations,erbil,brachiopods,tokyu,anglais,unfavorably,ujpest,escorial,armagnac,nagara,funafuti,ridgeline,cocking,o'gorman,compactness,retardant,krajowa,barua,coking,bestows,thampi,chicagoland,variably,o'loughlin,minnows,schwa,shaukat,polycarbonate,chlorinated,godalming,gramercy,delved,banqueting,enlil,sarada,prasanna,domhnall,decadal,regressive,lipoprotein,collectable,surendra,zaporizhia,cycliste,suchet,offsetting,formula_65,pudong,d'arte,blyton,quonset,osmania,tientsin,manorama,proteomics,bille,jalpaiguri,pertwee,barnegat,inventiveness,gollancz,euthanized,henricus,shortfalls,wuxia,chlorides,cerrado,polyvinyl,folktale,straddled,bioengineering,eschewing,greendale,recharged,olave,ceylonese,autocephalous,peacebuilding,wrights,guyed,rosamund,abitibi,bannockburn,gerontology,scutari,souness,seagram,codice_9,'open,xhtml,taguig,purposed,darbar,orthopedics,unpopulated,kisumu,tarrytown,feodor,polyhedral,monadnock,gottorp,priam,redesigning,gasworks,elfin,urquiza,homologation,filipovic,bohun,manningham,gornik,soundness,shorea,lanus,gelder,darke,sandgate,criticality,paranaense,153rd,vieja,lithograph,trapezoid,tiebreakers,convalescence,yan'an,actuaries,balad,altimeter,thermoelectric,trailblazer,previn,tenryu,ancaster,endoscopy,nicolet,discloses,fracking,plaine,salado,americanism,placards,absurdist,propylene,breccia,jirga,documenta,ismailis,161st,brentano,dallas/fort,embellishment,calipers,subscribes,mahavidyalaya,wednesbury,barnstormers,miwok,schembechler,minigame,unterberger,dopaminergic,inacio,nizamabad,overridden,monotype,cavernous,stichting,sassafras,sotho,argentinean,myrrh,rapidity,flatts,gowrie,dejected,kasaragod,cyprinidae,interlinked,arcseconds,degeneracy,infamously,incubate,substructure,trigeminal,sectarianism,marshlands,hooliganism,hurlers,isolationist,urania,burrard,switchover,lecco,wilts,interrogator,strived,ballooning,volterra,raciborz,relegating,gilding,cybele,dolomites,parachutist,lochaber,orators,raeburn,backend,benaud,rallycross,facings,banga,nuclides,defencemen,futurity,emitters,yadkin,eudonia,zambales,manasseh,sirte,meshes,peculiarly,mcminnville,roundly,boban,decrypt,icelanders,sanam,chelan,jovian,grudgingly,penalised,subscript,gambrinus,poaceae,infringements,maleficent,runciman,148th,supersymmetry,granites,liskeard,eliciting,involution,hallstatt,kitzbuhel,shankly,sandhills,inefficiencies,yishuv,psychotropic,nightjars,wavell,sangamon,vaikundar,choshu,retrospectives,pitesti,gigantea,hashemi,bosna,gakuin,siochana,arrangers,baronetcies,narayani,temecula,creston,koscierzyna,autochthonous,wyandot,anniston,igreja,mobilise,buzau,dunster,musselburgh,wenzhou,khattak,detoxification,decarboxylase,manlius,campbells,coleoptera,copyist,sympathisers,suisun,eminescu,defensor,transshipment,thurgau,somerton,fluctuates,ambika,weierstrass,lukow,giambattista,volcanics,romanticized,innovated,matabeleland,scotiabank,garwolin,purine,d'auvergne,borderland,maozhen,pricewaterhousecoopers,testator,pallium,scout.com,mv/pi,nazca,curacies,upjohn,sarasvati,monegasque,ketrzyn,malory,spikelets,biomechanics,haciendas,rapped,dwarfed,stews,nijinsky,subjection,matsu,perceptible,schwarzburg,midsection,entertains,circuitous,epiphytic,wonsan,alpini,bluefield,sloths,transportable,braunfels,dictum,szczecinek,jukka,wielun,wejherowo,hucknall,grameen,duodenum,ribose,deshpande,shahar,nexstar,injurious,dereham,lithographer,dhoni,structuralist,progreso,deschutes,christus,pulteney,quoins,yitzchak,gyeongsang,breviary,makkah,chiyoda,jutting,vineland,angiosperms,necrotic,novelisation,redistribute,tirumala,140th,featureless,mafic,rivaling,toyline,2/1st,martius,saalfeld,monthan,texian,kathak,melodramas,mithila,regierungsbezirk,509th,fermenting,schoolmate,virtuosic,briain,kokoda,heliocentric,handpicked,kilwinning,sonically,dinars,kasim,parkways,bogdanov,luxembourgian,halland,avesta,bardic,daugavpils,excavator,qwest,frustrate,physiographic,majoris,'ndrangheta,unrestrained,firmness,montalban,abundances,preservationists,adare,executioners,guardsman,bonnaroo,neglects,nazrul,pro12,hoorn,abercorn,refuting,kabud,cationic,parapsychology,troposphere,venezuelans,malignancy,khoja,unhindered,accordionist,medak,visby,ejercito,laparoscopic,dinas,umayyads,valmiki,o'dowd,saplings,stranding,incisions,illusionist,avocets,buccleuch,amazonia,fourfold,turboprops,roosts,priscus,turnstile,areal,certifies,pocklington,spoofs,viseu,commonalities,dabrowka,annam,homesteaders,daredevils,mondrian,negotiates,fiestas,perennials,maximizes,lubavitch,ravindra,scrapers,finials,kintyre,violas,snoqualmie,wilders,openbsd,mlawa,peritoneal,devarajan,congke,leszno,mercurial,fakir,joannes,bognor,overloading,unbuilt,gurung,scuttle,temperaments,bautzen,jardim,tradesman,visitations,barbet,sagamore,graaff,forecasters,wilsons,assis,l'air,shariah,sochaczew,russa,dirge,biliary,neuve,heartbreakers,strathearn,jacobian,overgrazing,edrich,anticline,parathyroid,petula,lepanto,decius,channelled,parvathi,puppeteers,communicators,francorchamps,kahane,longus,panjang,intron,traite,xxvii,matsuri,amrit,katyn,disheartened,cacak,omonia,alexandrine,partaking,wrangling,adjuvant,haskovo,tendrils,greensand,lammermoor,otherworld,volusia,stabling,one-and-a-half,bresson,zapatista,eotvos,ps150,webisodes,stepchildren,microarray,braganca,quanta,dolne,superoxide,bellona,delineate,ratha,lindenwood,bruhl,cingulate,tallies,bickerton,helgi,bevin,takoma,tsukuba,statuses,changeling,alister,bytom,dibrugarh,magnesia,duplicating,outlier,abated,goncalo,strelitz,shikai,mardan,musculature,ascomycota,springhill,tumuli,gabaa,odenwald,reformatted,autocracy,theresienstadt,suplex,chattopadhyay,mencken,congratulatory,weatherfield,systema,solemnity,projekt,quanzhou,kreuzberg,postbellum,nobuo,mediaworks,finisterre,matchplay,bangladeshis,kothen,oocyte,hovered,aromas,afshar,browed,teases,chorlton,arshad,cesaro,backbencher,iquique,vulcans,padmini,unabridged,cyclase,despotic,kirilenko,achaean,queensberry,debre,octahedron,iphigenia,curbing,karimnagar,sagarmatha,smelters,surrealists,sanada,shrestha,turridae,leasehold,jiedushi,eurythmics,appropriating,correze,thimphu,amery,musicomh,cyborgs,sandwell,pushcart,retorts,ameliorate,deteriorates,stojanovic,spline,entrenchments,bourse,chancellorship,pasolini,lendl,personage,reformulated,pubescens,loiret,metalurh,reinvention,nonhuman,eilema,tarsal,complutense,magne,broadview,metrodome,outtake,stouffville,seinen,bataillon,phosphoric,ostensible,opatow,aristides,beefheart,glorifying,banten,romsey,seamounts,fushimi,prophylaxis,sibylla,ranjith,goslar,balustrades,georgiev,caird,lafitte,peano,canso,bankura,halfpenny,segregate,caisson,bizerte,jamshedpur,euromaidan,philosophie,ridged,cheerfully,reclassification,aemilius,visionaries,samoans,wokingham,chemung,wolof,unbranched,cinerea,bhosle,ourense,immortalised,cornerstones,sourcebook,khufu,archimedean,universitatea,intermolecular,fiscally,suffices,metacomet,adjudicator,stablemate,specks,glace,inowroclaw,patristic,muharram,agitating,ashot,neurologic,didcot,gamla,ilves,putouts,siraj,laski,coaling,diarmuid,ratnagiri,rotulorum,liquefaction,morbihan,harel,aftershock,gruiformesfamily,bonnier,falconiformesfamily,adorns,wikis,maastrichtian,stauffenberg,bishopsgate,fakhr,sevenfold,ponders,quantifying,castiel,opacity,depredations,lenten,gravitated,o'mahony,modulates,inuktitut,paston,kayfabe,vagus,legalised,balked,arianism,tendering,sivas,birthdate,awlaki,khvajeh,shahab,samtgemeinde,bridgeton,amalgamations,biogenesis,recharging,tsukasa,mythbusters,chamfered,enthronement,freelancers,maharana,constantia,sutil,messines,monkton,okanogan,reinvigorated,apoplexy,tanahashi,neues,valiants,harappan,russes,carding,volkoff,funchal,statehouse,imitative,intrepidity,mellotron,samaras,turkana,besting,longitudes,exarch,diarrhoea,transcending,zvonareva,darna,ramblin,disconnection,137th,refocused,diarmait,agricole,ba'athist,turenne,contrabass,communis,daviess,fatimids,frosinone,fittingly,polyphyletic,qanat,theocratic,preclinical,abacha,toorak,marketplaces,conidia,seiya,contraindicated,retford,bundesautobahn,rebuilds,climatology,seaworthy,starfighter,qamar,categoria,malai,hellinsia,newstead,airworthy,catenin,avonmouth,arrhythmias,ayyavazhi,downgrade,ashburnham,ejector,kinematics,petworth,rspca,filmation,accipitridae,chhatrapati,g/mol,bacau,agama,ringtone,yudhoyono,orchestrator,arbitrators,138th,powerplants,cumbernauld,alderley,misamis,hawai`i,cuando,meistriliiga,jermyn,alans,pedigrees,ottavio,approbation,omnium,purulia,prioress,rheinland,lymphoid,lutsk,oscilloscope,ballina,iliac,motorbikes,modernising,uffizi,phylloxera,kalevala,bengalis,amravati,syntheses,interviewers,inflectional,outflank,maryhill,unhurt,profiler,nacelles,heseltine,personalised,guarda,herpetologist,airpark,pigot,margaretha,dinos,peleliu,breakbeat,kastamonu,shaivism,delamere,kingsville,epigram,khlong,phospholipids,journeying,lietuvos,congregated,deviance,celebes,subsoil,stroma,kvitova,lubricating,layoff,alagoas,olafur,doron,interuniversity,raycom,agonopterix,uzice,nanna,springvale,raimundo,wrested,pupal,talat,skinheads,vestige,unpainted,handan,odawara,ammar,attendee,lapped,myotis,gusty,ciconiiformesfamily,traversal,subfield,vitaphone,prensa,hasidism,inwood,carstairs,kropotkin,turgenev,dobra,remittance,purim,tannin,adige,tabulation,lethality,pacha,micronesian,dhruva,defensemen,tibeto,siculus,radioisotope,sodertalje,phitsanulok,euphonium,oxytocin,overhangs,skinks,fabrica,reinterred,emulates,bioscience,paragliding,raekwon,perigee,plausibility,frolunda,erroll,aznar,vyasa,albinus,trevally,confederacion,terse,sixtieth,1530s,kendriya,skateboarders,frontieres,muawiyah,easements,shehu,conservatively,keystones,kasem,brutalist,peekskill,cowry,orcas,syllabary,paltz,elisabetta,denticles,hampering,dolni,eidos,aarau,lermontov,yankton,shahbaz,barrages,kongsvinger,reestablishment,acetyltransferase,zulia,mrnas,slingsby,eucalypt,efficacious,weybridge,gradation,cinematheque,malthus,bampton,coexisted,cisse,hamdi,cupertino,saumarez,chionodes,libertine,formers,sakharov,pseudonymous,vol.1,mcduck,gopalakrishnan,amberley,jorhat,grandmasters,rudiments,dwindle,param,bukidnon,menander,americanus,multipliers,pulawy,homoerotic,pillbox,cd+dvd,epigraph,aleksandrow,extrapolated,horseshoes,contemporain,angiography,hasselt,shawinigan,memorization,legitimized,cyclades,outsold,rodolphe,kelis,powerball,dijkstra,analyzers,incompressible,sambar,orangeburg,osten,reauthorization,adamawa,sphagnum,hypermarket,millipedes,zoroaster,madea,ossuary,murrayfield,pronominal,gautham,resellers,ethers,quarrelled,dolna,stragglers,asami,tangut,passos,educacion,sharaf,texel,berio,bethpage,bezalel,marfa,noronha,36ers,genteel,avram,shilton,compensates,sweetener,reinstalled,disables,noether,1590s,balakrishnan,kotaro,northallerton,cataclysm,gholam,cancellara,schiphol,commends,longinus,albinism,gemayel,hamamatsu,volos,islamism,sidereal,pecuniary,diggings,townsquare,neosho,lushan,chittoor,akhil,disputation,desiccation,cambodians,thwarting,deliberated,ellipsis,bahini,susumu,separators,kohneh,plebeians,kultur,ogaden,pissarro,trypeta,latur,liaodong,vetting,datong,sohail,alchemists,lengthwise,unevenly,masterly,microcontrollers,occupier,deviating,farringdon,baccalaureat,theocracy,chebyshev,archivists,jayaram,ineffectiveness,scandinavians,jacobins,encomienda,nambu,g/cm3,catesby,paavo,heeded,rhodium,idealised,10deg,infective,mecyclothorax,halevy,sheared,minbari,audax,lusatian,rebuffs,hitfix,fastener,subjugate,tarun,binet,compuserve,synthesiser,keisuke,amalric,ligatures,tadashi,ignazio,abramovich,groundnut,otomo,maeve,mortlake,ostrogoths,antillean,todor,recto,millimetre,espousing,inaugurate,paracetamol,galvanic,harpalinae,jedrzejow,reassessment,langlands,civita,mikan,stikine,bijar,imamate,istana,kaiserliche,erastus,federale,cytosine,expansionism,hommes,norrland,smriti,snapdragon,gulab,taleb,lossy,khattab,urbanised,sesto,rekord,diffuser,desam,morganatic,silting,pacts,extender,beauharnais,purley,bouches,halfpipe,discontinuities,houthi,farmville,animism,horni,saadi,interpretative,blockades,symeon,biogeographic,transcaucasian,jetties,landrieu,astrocytes,conjunto,stumpings,weevils,geysers,redux,arching,romanus,tazeh,marcellinus,casein,opava,misrata,anare,sattar,declarer,dreux,oporto,venta,vallis,icosahedron,cortona,lachine,mohammedan,sandnes,zynga,clarin,diomedes,tsuyoshi,pribram,gulbarga,chartist,superettan,boscawen,altus,subang,gating,epistolary,vizianagaram,ogdensburg,panna,thyssen,tarkovsky,dzogchen,biograph,seremban,unscientific,nightjar,legco,deism,n.w.a,sudha,siskel,sassou,flintlock,jovial,montbeliard,pallida,formula_66,tranquillity,nisei,adornment,'people,yamhill,hockeyallsvenskan,adopters,appian,lowicz,haplotypes,succinctly,starogard,presidencies,kheyrabad,sobibor,kinesiology,cowichan,militum,cromwellian,leiningen,ps1.5,concourses,dalarna,goldfield,brzeg,faeces,aquarii,matchless,harvesters,181st,numismatics,korfball,sectioned,transpires,facultative,brandishing,kieron,forages,menai,glutinous,debarge,heathfield,1580s,malang,photoelectric,froome,semiotic,alwar,grammophon,chiaroscuro,mentalist,maramures,flacco,liquors,aleutians,marvell,sutlej,patnaik,qassam,flintoff,bayfield,haeckel,sueno,avicii,exoplanets,hoshi,annibale,vojislav,honeycombs,celebrant,rendsburg,veblen,quails,141st,carronades,savar,narrations,jeeva,ontologies,hedonistic,marinette,godot,munna,bessarabian,outrigger,thame,gravels,hoshino,falsifying,stereochemistry,nacionalista,medially,radula,ejecting,conservatorio,odile,ceiba,jaina,essonne,isometry,allophones,recidivism,iveco,ganda,grammarians,jagan,signposted,uncompressed,facilitators,constancy,ditko,propulsive,impaling,interbank,botolph,amlaib,intergroup,sorbus,cheka,debye,praca,adorning,presbyteries,dormition,strategos,qarase,pentecostals,beehives,hashemite,goldust,euronext,egress,arpanet,soames,jurchens,slovenska,copse,kazim,appraisals,marischal,mineola,sharada,caricaturist,sturluson,galba,faizabad,overwintering,grete,uyezds,didsbury,libreville,ablett,microstructure,anadolu,belenenses,elocution,cloaks,timeslots,halden,rashidun,displaces,sympatric,germanus,tuples,ceska,equalize,disassembly,krautrock,babangida,memel,deild,gopala,hematology,underclass,sangli,wawrinka,assur,toshack,refrains,nicotinic,bhagalpur,badami,racetracks,pocatello,walgreens,nazarbayev,occultation,spinnaker,geneon,josias,hydrolyzed,dzong,corregimiento,waistcoat,thermoplastic,soldered,anticancer,lactobacillus,shafi'i,carabus,adjournment,schlumberger,triceratops,despotate,mendicant,krishnamurti,bahasa,earthworm,lavoisier,noetherian,kalki,fervently,bhawan,saanich,coquille,gannet,motagua,kennels,mineralization,fitzherbert,svein,bifurcated,hairdressing,felis,abounded,dimers,fervour,hebdo,bluffton,aetna,corydon,clevedon,carneiro,subjectively,deutz,gastropoda,overshot,concatenation,varman,carolla,maharshi,mujib,inelastic,riverhead,initialized,safavids,rohini,caguas,bulges,fotbollforbund,hefei,spithead,westville,maronites,lytham,americo,gediminas,stephanus,chalcolithic,hijra,gnu/linux,predilection,rulership,sterility,haidar,scarlatti,saprissa,sviatoslav,pointedly,sunroof,guarantor,thevar,airstrips,pultusk,sture,129th,divinities,daizong,dolichoderus,cobourg,maoists,swordsmanship,uprated,bohme,tashi,largs,chandi,bluebeard,householders,richardsonian,drepanidae,antigonish,elbasan,occultism,marca,hypergeometric,oirat,stiglitz,ignites,dzungar,miquelon,pritam,d'automne,ulidiid,niamey,vallecano,fondo,billiton,incumbencies,raceme,chambery,cadell,barenaked,kagame,summerside,haussmann,hatshepsut,apothecaries,criollo,feint,nasals,timurid,feltham,plotinus,oxygenation,marginata,officinalis,salat,participations,ising,downe,izumo,unguided,pretence,coursed,haruna,viscountcy,mainstage,justicia,powiat,takara,capitoline,implacable,farben,stopford,cosmopterix,tuberous,kronecker,galatians,kweli,dogmas,exhorted,trebinje,skanda,newlyn,ablative,basidia,bhiwani,encroachments,stranglers,regrouping,tubal,shoestring,wawel,anionic,mesenchymal,creationists,pyrophosphate,moshi,despotism,powerbook,fatehpur,rupiah,segre,ternate,jessore,b.i.g,shevardnadze,abounds,gliwice,densest,memoria,suborbital,vietcong,ratepayers,karunanidhi,toolbar,descents,rhymney,exhortation,zahedan,carcinomas,hyperbaric,botvinnik,billets,neuropsychological,tigranes,hoards,chater,biennially,thistles,scotus,wataru,flotillas,hungama,monopolistic,payouts,vetch,generalissimo,caries,naumburg,piran,blizzards,escalates,reactant,shinya,theorize,rizzoli,transitway,ecclesiae,streptomyces,cantal,nisibis,superconductor,unworkable,thallus,roehampton,scheckter,viceroys,makuuchi,ilkley,superseding,takuya,klodzko,borbon,raspberries,operand,w.a.k.o,sarabande,factionalism,egalitarianism,temasek,torbat,unscripted,jorma,westerner,perfective,vrije,underlain,goldfrapp,blaenau,jomon,barthes,drivetime,bassa,bannock,umaga,fengxiang,zulus,sreenivasan,farces,codice_10,freeholder,poddebice,imperialists,deregulated,wingtip,o'hagan,pillared,overtone,hofstadter,149th,kitano,saybrook,standardizing,aldgate,staveley,o'flaherty,hundredths,steerable,soltan,empted,cruyff,intramuros,taluks,cotonou,marae,karur,figueres,barwon,lucullus,niobe,zemlya,lathes,homeported,chaux,amyotrophic,opines,exemplars,bhamo,homomorphisms,gauleiter,ladin,mafiosi,airdrieonians,b/soul,decal,transcaucasia,solti,defecation,deaconess,numidia,sampradaya,normalised,wingless,schwaben,alnus,cinerama,yakutsk,ketchikan,orvieto,unearned,monferrato,rotem,aacsb,loong,decoders,skerries,cardiothoracic,repositioning,pimpernel,yohannan,tenebrionoidea,nargis,nouvel,costliest,interdenominational,noize,redirecting,zither,morcha,radiometric,frequenting,irtysh,gbagbo,chakri,litvinenko,infotainment,ravensbruck,harith,corbels,maegashira,jousting,natan,novus,falcao,minis,railed,decile,rauma,ramaswamy,cavitation,paranaque,berchtesgaden,reanimated,schomberg,polysaccharides,exclusionary,cleon,anurag,ravaging,dhanush,mitchells,granule,contemptuous,keisei,rolleston,atlantean,yorkist,daraa,wapping,micrometer,keeneland,comparably,baranja,oranje,schlafli,yogic,dinajpur,unimpressive,masashi,recreativo,alemannic,petersfield,naoko,vasudeva,autosport,rajat,marella,busko,wethersfield,ssris,soulcalibur,kobani,wildland,rookery,hoffenheim,kauri,aliphatic,balaclava,ferrite,publicise,victorias,theism,quimper,chapbook,functionalist,roadbed,ulyanovsk,cupen,purpurea,calthorpe,teofilo,mousavi,cochlea,linotype,detmold,ellerslie,gakkai,telkom,southsea,subcontractor,inguinal,philatelists,zeebrugge,piave,trochidae,dempo,spoilt,saharanpur,mihrab,parasympathetic,barbarous,chartering,antiqua,katsina,bugis,categorizes,altstadt,kandyan,pambansa,overpasses,miters,assimilating,finlandia,uneconomic,am/fm,harpsichordist,dresdner,luminescence,authentically,overpowers,magmatic,cliftonville,oilfields,skirted,berthe,cuman,oakham,frelimo,glockenspiel,confection,saxophonists,piaseczno,multilevel,antipater,levying,maltreatment,velho,opoczno,harburg,pedophilia,unfunded,palettes,plasterwork,breve,dharmendra,auchinleck,nonesuch,blackmun,libretti,rabbani,145th,hasselbeck,kinnock,malate,vanden,cloverdale,ashgabat,nares,radians,steelworkers,sabor,possums,catterick,hemispheric,ostra,outpaced,dungeness,almshouse,penryn,texians,1000m,franchitti,incumbency,texcoco,newar,tramcars,toroidal,meitetsu,spellbound,agronomist,vinifera,riata,bunko,pinas,ba'al,github,vasilyevich,obsolescent,geodesics,ancestries,tujue,capitalised,unassigned,throng,unpaired,psychometric,skegness,exothermic,buffered,kristiansund,tongued,berenger,basho,alitalia,prolongation,archaeologically,fractionation,cyprinid,echinoderms,agriculturally,justiciar,sonam,ilium,baits,danceable,grazer,ardahan,grassed,preemption,glassworks,hasina,ugric,umbra,wahhabi,vannes,tinnitus,capitaine,tikrit,lisieux,scree,hormuz,despenser,jagiellon,maisonneuve,gandaki,santarem,basilicas,lancing,landskrona,weilburg,fireside,elysian,isleworth,krishnamurthy,filton,cynon,tecmo,subcostal,scalars,triglycerides,hyperplane,farmingdale,unione,meydan,pilings,mercosur,reactivate,akiba,fecundity,jatra,natsume,zarqawi,preta,masao,presbyter,oakenfold,rhodri,ferran,ruizong,cloyne,nelvana,epiphanius,borde,scutes,strictures,troughton,whitestone,sholom,toyah,shingon,kutuzov,abelard,passant,lipno,cafeterias,residuals,anabaptists,paratransit,criollos,pleven,radiata,destabilizing,hadiths,bazaars,mannose,taiyo,crookes,welbeck,baoding,archelaus,nguesso,alberni,wingtips,herts,viasat,lankans,evreux,wigram,fassbinder,ryuichi,storting,reducible,olesnica,znojmo,hyannis,theophanes,flatiron,mustering,rajahmundry,kadir,wayang,prome,lethargy,zubin,illegality,conall,dramedy,beerbohm,hipparchus,ziarat,ryuji,shugo,glenorchy,microarchitecture,morne,lewinsky,cauvery,battenberg,hyksos,wayanad,hamilcar,buhari,brazo,bratianu,solms,aksaray,elamite,chilcotin,bloodstock,sagara,dolny,reunified,umlaut,proteaceae,camborne,calabrian,dhanbad,vaxjo,cookware,potez,rediffusion,semitones,lamentations,allgau,guernica,suntory,pleated,stationing,urgell,gannets,bertelsmann,entryway,raphitomidae,acetaldehyde,nephrology,categorizing,beiyang,permeate,tourney,geosciences,khana,masayuki,crucis,universitaria,slaskie,khaimah,finno,advani,astonishingly,tubulin,vampiric,jeolla,sociale,cleethorpes,badri,muridae,suzong,debater,decimation,kenyans,mutualism,pontifex,middlemen,insee,halevi,lamentation,psychopathy,brassey,wenders,kavya,parabellum,prolactin,inescapable,apses,malignancies,rinzai,stigmatized,menahem,comox,ateliers,welshpool,setif,centimetre,truthfulness,downfield,drusus,woden,glycosylation,emanated,agulhas,dalkeith,jazira,nucky,unifil,jobim,operon,oryzomys,heroically,seances,supernumerary,backhouse,hashanah,tatler,imago,invert,hayato,clockmaker,kingsmill,swiecie,analogously,golconda,poste,tacitly,decentralised,ge'ez,diplomatically,fossiliferous,linseed,mahavira,pedestals,archpriest,byelection,domiciled,jeffersonian,bombus,winegrowing,waukegan,uncultivated,haverfordwest,saumur,communally,disbursed,cleeve,zeljeznicar,speciosa,vacationers,sigur,vaishali,zlatko,iftikhar,cropland,transkei,incompleteness,bohra,subantarctic,slieve,physiologic,similis,klerk,replanted,'right,chafee,reproducible,bayburt,regicide,muzaffarpur,plurals,hanyu,orthologs,diouf,assailed,kamui,tarik,dodecanese,gorne,on/off,179th,shimoga,granaries,carlists,valar,tripolitania,sherds,simmern,dissociated,isambard,polytechnical,yuvraj,brabazon,antisense,pubmed,glans,minutely,masaaki,raghavendra,savoury,podcasting,tachi,bienville,gongsun,ridgely,deform,yuichi,binders,canna,carcetti,llobregat,implored,berri,njegos,intermingled,offload,athenry,motherhouse,corpora,kakinada,dannebrog,imperio,prefaces,musicologists,aerospatiale,shirai,nagapattinam,servius,cristoforo,pomfret,reviled,entebbe,stane,east/west,thermometers,matriarchal,siglo,bodil,legionnaire,ze'ev,theorizing,sangeetha,horticulturist,uncountable,lookalike,anoxic,ionospheric,genealogists,chicopee,imprinting,popish,crematoria,diamondback,cyathea,hanzhong,cameramen,halogaland,naklo,waclaw,storehouses,flexed,comuni,frits,glauca,nilgiris,compresses,nainital,continuations,albay,hypoxic,samajwadi,dunkerque,nanticoke,sarwar,interchanged,jubal,corba,jalgaon,derleth,deathstroke,magny,vinnytsia,hyphenated,rimfire,sawan,boehner,disrepute,normalize,aromanian,dualistic,approximant,chama,karimabad,barnacles,sanok,stipends,dyfed,rijksmuseum,reverberation,suncorp,fungicides,reverie,spectrograph,stereophonic,niazi,ordos,alcan,karaite,lautrec,tableland,lamellar,rieti,langmuir,russula,webern,tweaks,hawick,southerner,morphy,naturalisation,enantiomer,michinoku,barbettes,relieves,carburettors,redruth,oblates,vocabularies,mogilev,bagmati,galium,reasserted,extolled,symon,eurosceptic,inflections,tirtha,recompense,oruro,roping,gouverneur,pared,yayoi,watermills,retooled,leukocytes,jubilant,mazhar,nicolau,manheim,touraine,bedser,hambledon,kohat,powerhouses,tlemcen,reuven,sympathetically,afrikaners,interes,handcrafts,etcher,baddeley,wodonga,amaury,155th,vulgarity,pompadour,automorphisms,1540s,oppositions,prekmurje,deryni,fortifying,arcuate,mahila,bocage,uther,nozze,slashes,atlantica,hadid,rhizomatous,azeris,'with,osmena,lewisville,innervated,bandmaster,outcropping,parallelogram,dominicana,twang,ingushetia,extensional,ladino,sastry,zinoviev,relatable,nobilis,cbeebies,hitless,eulima,sporangia,synge,longlisted,criminalized,penitential,weyden,tubule,volyn,priestesses,glenbrook,kibbutzim,windshaft,canadair,falange,zsolt,bonheur,meine,archangels,safeguarded,jamaicans,malarial,teasers,badging,merseyrail,operands,pulsars,gauchos,biotin,bambara,necaxa,egmond,tillage,coppi,anxiolytic,preah,mausoleums,plautus,feroz,debunked,187th,belediyespor,mujibur,wantage,carboxyl,chettiar,murnau,vagueness,racemic,backstretch,courtland,municipio,palpatine,dezful,hyperbola,sreekumar,chalons,altay,arapahoe,tudors,sapieha,quilon,burdensome,kanya,xxviii,recension,generis,siphuncle,repressor,bitrate,mandals,midhurst,dioxin,democratique,upholds,rodez,cinematographic,epoque,jinping,rabelais,zhytomyr,glenview,rebooted,khalidi,reticulata,122nd,monnaie,passersby,ghazals,europaea,lippmann,earthbound,tadic,andorran,artvin,angelicum,banksy,epicentre,resemblances,shuttled,rathaus,bernt,stonemasons,balochi,siang,tynemouth,cygni,biosynthetic,precipitates,sharecroppers,d'annunzio,softbank,shiji,apeldoorn,polycyclic,wenceslas,wuchang,samnites,tamarack,silmarillion,madinah,palaeontology,kirchberg,sculpin,rohtak,aquabats,oviparous,thynne,caney,blimps,minimalistic,whatcom,palatalization,bardstown,direct3d,paramagnetic,kamboja,khash,globemaster,lengua,matej,chernigov,swanage,arsenals,cascadia,cundinamarca,tusculum,leavers,organics,warplanes,'three,exertions,arminius,gandharva,inquires,comercio,kuopio,chabahar,plotlines,mersenne,anquetil,paralytic,buckminster,ambit,acrolophus,quantifiers,clacton,ciliary,ansaldo,fergana,egoism,thracians,chicoutimi,northbrook,analgesia,brotherhoods,hunza,adriaen,fluoridation,snowfalls,soundboard,fangoria,cannibalistic,orthogonius,chukotka,dindigul,manzoni,chainz,macromedia,beltline,muruga,schistura,provable,litex,initio,pneumoniae,infosys,cerium,boonton,cannonballs,d'une,solvency,mandurah,houthis,dolmens,apologists,radioisotopes,blaxploitation,poroshenko,stawell,coosa,maximilien,tempelhof,espouse,declaratory,hambro,xalapa,outmoded,mihiel,benefitting,desirous,archeparchy,repopulated,telescoping,captor,mackaye,disparaged,ramanathan,crowne,tumbled,technetium,silted,chedi,nievre,hyeon,cartoonish,interlock,infocom,rediff.com,dioramas,timekeeping,concertina,kutaisi,cesky,lubomirski,unapologetic,epigraphic,stalactites,sneha,biofilm,falconry,miraflores,catena,'outstanding,prospekt,apotheosis,o'odham,pacemakers,arabica,gandhinagar,reminisces,iroquoian,ornette,tilling,neoliberalism,chameleons,pandava,prefontaine,haiyan,gneisenau,utama,bando,reconstitution,azaria,canola,paratroops,ayckbourn,manistee,stourton,manifestos,lympne,denouement,tractatus,rakim,bellflower,nanometer,sassanids,turlough,presbyterianism,varmland,20deg,phool,nyerere,almohad,manipal,vlaanderen,quickness,removals,makow,circumflex,eatery,morane,fondazione,alkylation,unenforceable,galliano,silkworm,junior/senior,abducts,phlox,konskie,lofoten,buuren,glyphosate,faired,naturae,cobbles,taher,skrulls,dostoevsky,walkout,wagnerian,orbited,methodically,denzil,sarat,extraterritorial,kohima,d'armor,brinsley,rostropovich,fengtian,comitatus,aravind,moche,wrangell,giscard,vantaa,viljandi,hakoah,seabees,muscatine,ballade,camanachd,sothern,mullioned,durad,margraves,maven,arete,chandni,garifuna,142nd,reading/literature,thickest,intensifies,trygve,khaldun,perinatal,asana,powerline,acetylation,nureyev,omiya,montesquieu,riverwalk,marly,correlating,intermountain,bulgar,hammerheads,underscores,wiretapping,quatrain,ruisseau,newsagent,tuticorin,polygyny,hemsworth,partisanship,banna,istrian,evaporator".split(","),
45764female_names:"mary,patricia,linda,barbara,elizabeth,jennifer,maria,susan,margaret,dorothy,lisa,nancy,karen,betty,helen,sandra,donna,carol,ruth,sharon,michelle,laura,sarah,kimberly,deborah,jessica,shirley,cynthia,angela,melissa,brenda,amy,anna,rebecca,virginia,kathleen,pamela,martha,debra,amanda,stephanie,carolyn,christine,marie,janet,catherine,frances,ann,joyce,diane,alice,julie,heather,teresa,doris,gloria,evelyn,jean,cheryl,mildred,katherine,joan,ashley,judith,rose,janice,kelly,nicole,judy,christina,kathy,theresa,beverly,denise,tammy,irene,jane,lori,rachel,marilyn,andrea,kathryn,louise,sara,anne,jacqueline,wanda,bonnie,julia,ruby,lois,tina,phyllis,norma,paula,diana,annie,lillian,emily,robin,peggy,crystal,gladys,rita,dawn,connie,florence,tracy,edna,tiffany,carmen,rosa,cindy,grace,wendy,victoria,edith,kim,sherry,sylvia,josephine,thelma,shannon,sheila,ethel,ellen,elaine,marjorie,carrie,charlotte,monica,esther,pauline,emma,juanita,anita,rhonda,hazel,amber,eva,debbie,april,leslie,clara,lucille,jamie,joanne,eleanor,valerie,danielle,megan,alicia,suzanne,michele,gail,bertha,darlene,veronica,jill,erin,geraldine,lauren,cathy,joann,lorraine,lynn,sally,regina,erica,beatrice,dolores,bernice,audrey,yvonne,annette,marion,dana,stacy,ana,renee,ida,vivian,roberta,holly,brittany,melanie,loretta,yolanda,jeanette,laurie,katie,kristen,vanessa,alma,sue,elsie,beth,jeanne,vicki,carla,tara,rosemary,eileen,terri,gertrude,lucy,tonya,ella,stacey,wilma,gina,kristin,jessie,natalie,agnes,vera,charlene,bessie,delores,melinda,pearl,arlene,maureen,colleen,allison,tamara,joy,georgia,constance,lillie,claudia,jackie,marcia,tanya,nellie,minnie,marlene,heidi,glenda,lydia,viola,courtney,marian,stella,caroline,dora,vickie,mattie,maxine,irma,mabel,marsha,myrtle,lena,christy,deanna,patsy,hilda,gwendolyn,jennie,nora,margie,nina,cassandra,leah,penny,kay,priscilla,naomi,carole,olga,billie,dianne,tracey,leona,jenny,felicia,sonia,miriam,velma,becky,bobbie,violet,kristina,toni,misty,mae,shelly,daisy,ramona,sherri,erika,katrina,claire,lindsey,lindsay,geneva,guadalupe,belinda,margarita,sheryl,cora,faye,ada,sabrina,isabel,marguerite,hattie,harriet,molly,cecilia,kristi,brandi,blanche,sandy,rosie,joanna,iris,eunice,angie,inez,lynda,madeline,amelia,alberta,genevieve,monique,jodi,janie,kayla,sonya,jan,kristine,candace,fannie,maryann,opal,alison,yvette,melody,luz,susie,olivia,flora,shelley,kristy,mamie,lula,lola,verna,beulah,antoinette,candice,juana,jeannette,pam,kelli,whitney,bridget,karla,celia,latoya,patty,shelia,gayle,della,vicky,lynne,sheri,marianne,kara,jacquelyn,erma,blanca,myra,leticia,pat,krista,roxanne,angelica,robyn,adrienne,rosalie,alexandra,brooke,bethany,sadie,bernadette,traci,jody,kendra,nichole,rachael,mable,ernestine,muriel,marcella,elena,krystal,angelina,nadine,kari,estelle,dianna,paulette,lora,mona,doreen,rosemarie,desiree,antonia,janis,betsy,christie,freda,meredith,lynette,teri,cristina,eula,leigh,meghan,sophia,eloise,rochelle,gretchen,cecelia,raquel,henrietta,alyssa,jana,gwen,jenna,tricia,laverne,olive,tasha,silvia,elvira,delia,kate,patti,lorena,kellie,sonja,lila,lana,darla,mindy,essie,mandy,lorene,elsa,josefina,jeannie,miranda,dixie,lucia,marta,faith,lela,johanna,shari,camille,tami,shawna,elisa,ebony,melba,ora,nettie,tabitha,ollie,winifred,kristie,alisha,aimee,rena,myrna,marla,tammie,latasha,bonita,patrice,ronda,sherrie,addie,francine,deloris,stacie,adriana,cheri,abigail,celeste,jewel,cara,adele,rebekah,lucinda,dorthy,effie,trina,reba,sallie,aurora,lenora,etta,lottie,kerri,trisha,nikki,estella,francisca,josie,tracie,marissa,karin,brittney,janelle,lourdes,laurel,helene,fern,elva,corinne,kelsey,ina,bettie,elisabeth,aida,caitlin,ingrid,iva,eugenia,christa,goldie,maude,jenifer,therese,dena,lorna,janette,latonya,candy,consuelo,tamika,rosetta,debora,cherie,polly,dina,jewell,fay,jillian,dorothea,nell,trudy,esperanza,patrica,kimberley,shanna,helena,cleo,stefanie,rosario,ola,janine,mollie,lupe,alisa,lou,maribel,susanne,bette,susana,elise,cecile,isabelle,lesley,jocelyn,paige,joni,rachelle,leola,daphne,alta,ester,petra,graciela,imogene,jolene,keisha,lacey,glenna,gabriela,keri,ursula,lizzie,kirsten,shana,adeline,mayra,jayne,jaclyn,gracie,sondra,carmela,marisa,rosalind,charity,tonia,beatriz,marisol,clarice,jeanine,sheena,angeline,frieda,lily,shauna,millie,claudette,cathleen,angelia,gabrielle,autumn,katharine,jodie,staci,lea,christi,justine,elma,luella,margret,dominique,socorro,martina,margo,mavis,callie,bobbi,maritza,lucile,leanne,jeannine,deana,aileen,lorie,ladonna,willa,manuela,gale,selma,dolly,sybil,abby,ivy,dee,winnie,marcy,luisa,jeri,magdalena,ofelia,meagan,audra,matilda,leila,cornelia,bianca,simone,bettye,randi,virgie,latisha,barbra,georgina,eliza,leann,bridgette,rhoda,haley,adela,nola,bernadine,flossie,ila,greta,ruthie,nelda,minerva,lilly,terrie,letha,hilary,estela,valarie,brianna,rosalyn,earline,catalina,ava,mia,clarissa,lidia,corrine,alexandria,concepcion,tia,sharron,rae,dona,ericka,jami,elnora,chandra,lenore,neva,marylou,melisa,tabatha,serena,avis,allie,sofia,jeanie,odessa,nannie,harriett,loraine,penelope,milagros,emilia,benita,allyson,ashlee,tania,esmeralda,eve,pearlie,zelma,malinda,noreen,tameka,saundra,hillary,amie,althea,rosalinda,lilia,alana,clare,alejandra,elinor,lorrie,jerri,darcy,earnestine,carmella,noemi,marcie,liza,annabelle,louisa,earlene,mallory,carlene,nita,selena,tanisha,katy,julianne,lakisha,edwina,maricela,margery,kenya,dollie,roxie,roslyn,kathrine,nanette,charmaine,lavonne,ilene,tammi,suzette,corine,kaye,chrystal,lina,deanne,lilian,juliana,aline,luann,kasey,maryanne,evangeline,colette,melva,lawanda,yesenia,nadia,madge,kathie,ophelia,valeria,nona,mitzi,mari,georgette,claudine,fran,alissa,roseann,lakeisha,susanna,reva,deidre,chasity,sheree,elvia,alyce,deirdre,gena,briana,araceli,katelyn,rosanne,wendi,tessa,berta,marva,imelda,marietta,marci,leonor,arline,sasha,madelyn,janna,juliette,deena,aurelia,josefa,augusta,liliana,lessie,amalia,savannah,anastasia,vilma,natalia,rosella,lynnette,corina,alfreda,leanna,amparo,coleen,tamra,aisha,wilda,karyn,maura,mai,evangelina,rosanna,hallie,erna,enid,mariana,lacy,juliet,jacklyn,freida,madeleine,mara,cathryn,lelia,casandra,bridgett,angelita,jannie,dionne,annmarie,katina,beryl,millicent,katheryn,diann,carissa,maryellen,liz,lauri,helga,gilda,rhea,marquita,hollie,tisha,tamera,angelique,francesca,kaitlin,lolita,florine,rowena,reyna,twila,fanny,janell,ines,concetta,bertie,alba,brigitte,alyson,vonda,pansy,elba,noelle,letitia,deann,brandie,louella,leta,felecia,sharlene,lesa,beverley,isabella,herminia,terra,celina,tori,octavia,jade,denice,germaine,michell,cortney,nelly,doretha,deidra,monika,lashonda,judi,chelsey,antionette,margot,adelaide,leeann,elisha,dessie,libby,kathi,gayla,latanya,mina,mellisa,kimberlee,jasmin,renae,zelda,elda,justina,gussie,emilie,camilla,abbie,rocio,kaitlyn,edythe,ashleigh,selina,lakesha,geri,allene,pamala,michaela,dayna,caryn,rosalia,jacquline,rebeca,marybeth,krystle,iola,dottie,belle,griselda,ernestina,elida,adrianne,demetria,delma,jaqueline,arleen,virgina,retha,fatima,tillie,eleanore,cari,treva,wilhelmina,rosalee,maurine,latrice,jena,taryn,elia,debby,maudie,jeanna,delilah,catrina,shonda,hortencia,theodora,teresita,robbin,danette,delphine,brianne,nilda,danna,cindi,bess,iona,winona,vida,rosita,marianna,racheal,guillermina,eloisa,celestine,caren,malissa,lona,chantel,shellie,marisela,leora,agatha,soledad,migdalia,ivette,christen,athena,janel,veda,pattie,tessie,tera,marilynn,lucretia,karrie,dinah,daniela,alecia,adelina,vernice,shiela,portia,merry,lashawn,dara,tawana,verda,alene,zella,sandi,rafaela,maya,kira,candida,alvina,suzan,shayla,lettie,samatha,oralia,matilde,larissa,vesta,renita,delois,shanda,phillis,lorri,erlinda,cathrine,barb,isabell,ione,gisela,roxanna,mayme,kisha,ellie,mellissa,dorris,dalia,bella,annetta,zoila,reta,reina,lauretta,kylie,christal,pilar,charla,elissa,tiffani,tana,paulina,leota,breanna,jayme,carmel,vernell,tomasa,mandi,dominga,santa,melodie,lura,alexa,tamela,mirna,kerrie,venus,felicita,cristy,carmelita,berniece,annemarie,tiara,roseanne,missy,cori,roxana,pricilla,kristal,jung,elyse,haydee,aletha,bettina,marge,gillian,filomena,zenaida,harriette,caridad,vada,aretha,pearline,marjory,marcela,flor,evette,elouise,alina,damaris,catharine,belva,nakia,marlena,luanne,lorine,karon,dorene,danita,brenna,tatiana,louann,julianna,andria,philomena,lucila,leonora,dovie,romona,mimi,jacquelin,gaye,tonja,misti,chastity,stacia,roxann,micaela,velda,marlys,johnna,aura,ivonne,hayley,nicki,majorie,herlinda,yadira,perla,gregoria,antonette,shelli,mozelle,mariah,joelle,cordelia,josette,chiquita,trista,laquita,georgiana,candi,shanon,hildegard,stephany,magda,karol,gabriella,tiana,roma,richelle,oleta,jacque,idella,alaina,suzanna,jovita,tosha,nereida,marlyn,kyla,delfina,tena,stephenie,sabina,nathalie,marcelle,gertie,darleen,thea,sharonda,shantel,belen,venessa,rosalina,genoveva,clementine,rosalba,renate,renata,georgianna,floy,dorcas,ariana,tyra,theda,mariam,juli,jesica,vikki,verla,roselyn,melvina,jannette,ginny,debrah,corrie,violeta,myrtis,latricia,collette,charleen,anissa,viviana,twyla,nedra,latonia,hellen,fabiola,annamarie,adell,sharyn,chantal,niki,maud,lizette,lindy,kesha,jeana,danelle,charline,chanel,valorie,dortha,cristal,sunny,leone,leilani,gerri,debi,andra,keshia,eulalia,easter,dulce,natividad,linnie,kami,georgie,catina,brook,alda,winnifred,sharla,ruthann,meaghan,magdalene,lissette,adelaida,venita,trena,shirlene,shameka,elizebeth,dian,shanta,latosha,carlotta,windy,rosina,mariann,leisa,jonnie,dawna,cathie,astrid,laureen,janeen,holli,fawn,vickey,teressa,shante,rubye,marcelina,chanda,terese,scarlett,marnie,lulu,lisette,jeniffer,elenor,dorinda,donita,carman,bernita,altagracia,aleta,adrianna,zoraida,lyndsey,janina,starla,phylis,phuong,kyra,charisse,blanch,sanjuanita,rona,nanci,marilee,maranda,brigette,sanjuana,marita,kassandra,joycelyn,felipa,chelsie,bonny,mireya,lorenza,kyong,ileana,candelaria,sherie,lucie,leatrice,lakeshia,gerda,edie,bambi,marylin,lavon,hortense,garnet,evie,tressa,shayna,lavina,kyung,jeanetta,sherrill,shara,phyliss,mittie,anabel,alesia,thuy,tawanda,joanie,tiffanie,lashanda,karissa,enriqueta,daria,daniella,corinna,alanna,abbey,roxane,roseanna,magnolia,lida,joellen,coral,carleen,tresa,peggie,novella,nila,maybelle,jenelle,carina,nova,melina,marquerite,margarette,josephina,evonne,cinthia,albina,toya,tawnya,sherita,myriam,lizabeth,lise,keely,jenni,giselle,cheryle,ardith,ardis,alesha,adriane,shaina,linnea,karolyn,felisha,dori,darci,artie,armida,zola,xiomara,vergie,shamika,nena,nannette,maxie,lovie,jeane,jaimie,inge,farrah,elaina,caitlyn,felicitas,cherly,caryl,yolonda,yasmin,teena,prudence,pennie,nydia,mackenzie,orpha,marvel,lizbeth,laurette,jerrie,hermelinda,carolee,tierra,mirian,meta,melony,kori,jennette,jamila,yoshiko,susannah,salina,rhiannon,joleen,cristine,ashton,aracely,tomeka,shalonda,marti,lacie,kala,jada,ilse,hailey,brittani,zona,syble,sherryl,nidia,marlo,kandice,kandi,alycia,ronna,norene,mercy,ingeborg,giovanna,gemma,christel,audry,zora,vita,trish,stephaine,shirlee,shanika,melonie,mazie,jazmin,inga,hettie,geralyn,fonda,estrella,adella,sarita,rina,milissa,maribeth,golda,evon,ethelyn,enedina,cherise,chana,velva,tawanna,sade,mirta,karie,jacinta,elna,davina,cierra,ashlie,albertha,tanesha,nelle,mindi,lorinda,larue,florene,demetra,dedra,ciara,chantelle,ashly,suzy,rosalva,noelia,lyda,leatha,krystyna,kristan,karri,darline,darcie,cinda,cherrie,awilda,almeda,rolanda,lanette,jerilyn,gisele,evalyn,cyndi,cleta,carin,zina,zena,velia,tanika,charissa,talia,margarete,lavonda,kaylee,kathlene,jonna,irena,ilona,idalia,candis,candance,brandee,anitra,alida,sigrid,nicolette,maryjo,linette,hedwig,christiana,alexia,tressie,modesta,lupita,lita,gladis,evelia,davida,cherri,cecily,ashely,annabel,agustina,wanita,shirly,rosaura,hulda,yetta,verona,thomasina,sibyl,shannan,mechelle,leandra,lani,kylee,kandy,jolynn,ferne,eboni,corene,alysia,zula,nada,moira,lyndsay,lorretta,jammie,hortensia,gaynell,adria,vina,vicenta,tangela,stephine,norine,nella,liana,leslee,kimberely,iliana,glory,felica,emogene,elfriede,eden,eartha,carma,ocie,lennie,kiara,jacalyn,carlota,arielle,otilia,kirstin,kacey,johnetta,joetta,jeraldine,jaunita,elana,dorthea,cami,amada,adelia,vernita,tamar,siobhan,renea,rashida,ouida,nilsa,meryl,kristyn,julieta,danica,breanne,aurea,anglea,sherron,odette,malia,lorelei,leesa,kenna,kathlyn,fiona,charlette,suzie,shantell,sabra,racquel,myong,mira,martine,lucienne,lavada,juliann,elvera,delphia,christiane,charolette,carri,asha,angella,paola,ninfa,leda,stefani,shanell,palma,machelle,lissa,kecia,kathryne,karlene,julissa,jettie,jenniffer,corrina,carolann,alena,rosaria,myrtice,marylee,liane,kenyatta,judie,janey,elmira,eldora,denna,cristi,cathi,zaida,vonnie,viva,vernie,rosaline,mariela,luciana,lesli,karan,felice,deneen,adina,wynona,tarsha,sheron,shanita,shani,shandra,randa,pinkie,nelida,marilou,lyla,laurene,laci,janene,dorotha,daniele,dani,carolynn,carlyn,berenice,ayesha,anneliese,alethea,thersa,tamiko,rufina,oliva,mozell,marylyn,kristian,kathyrn,kasandra,kandace,janae,domenica,debbra,dannielle,chun,arcelia,zenobia,sharen,sharee,lavinia,kacie,jackeline,huong,felisa,emelia,eleanora,cythia,cristin,claribel,anastacia,zulma,zandra,yoko,tenisha,susann,sherilyn,shay,shawanda,romana,mathilda,linsey,keiko,joana,isela,gretta,georgetta,eugenie,desirae,delora,corazon,antonina,anika,willene,tracee,tamatha,nichelle,mickie,maegan,luana,lanita,kelsie,edelmira,bree,afton,teodora,tamie,shena,linh,keli,kaci,danyelle,arlette,albertine,adelle,tiffiny,simona,nicolasa,nichol,nakisha,maira,loreen,kizzy,fallon,christene,bobbye,ying,vincenza,tanja,rubie,roni,queenie,margarett,kimberli,irmgard,idell,hilma,evelina,esta,emilee,dennise,dania,carie,risa,rikki,particia,masako,luvenia,loree,loni,lien,gigi,florencia,denita,billye,tomika,sharita,rana,nikole,neoma,margarite,madalyn,lucina,laila,kali,jenette,gabriele,evelyne,elenora,clementina,alejandrina,zulema,violette,vannessa,thresa,retta,patience,noella,nickie,jonell,chaya,camelia,bethel,anya,suzann,mila,lilla,laverna,keesha,kattie,georgene,eveline,estell,elizbeth,vivienne,vallie,trudie,stephane,magaly,madie,kenyetta,karren,janetta,hermine,drucilla,debbi,celestina,candie,britni,beckie,amina,zita,yolande,vivien,vernetta,trudi,pearle,patrina,ossie,nicolle,loyce,letty,katharina,joselyn,jonelle,jenell,iesha,heide,florinda,florentina,elodia,dorine,brunilda,brigid,ashli,ardella,twana,tarah,shavon,serina,rayna,ramonita,margurite,lucrecia,kourtney,kati,jesenia,crista,ayana,alica,alia,vinnie,suellen,romelia,rachell,olympia,michiko,kathaleen,jolie,jessi,janessa,hana,elease,carletta,britany,shona,salome,rosamond,regena,raina,ngoc,nelia,louvenia,lesia,latrina,laticia,larhonda,jina,jacki,emmy,deeann,coretta,arnetta,thalia,shanice,neta,mikki,micki,lonna,leana,lashunda,kiley,joye,jacqulyn,ignacia,hyun,hiroko,henriette,elayne,delinda,dahlia,coreen,consuela,conchita,babette,ayanna,anette,albertina,shawnee,shaneka,quiana,pamelia,merri,merlene,margit,kiesha,kiera,kaylene,jodee,jenise,erlene,emmie,dalila,daisey,casie,belia,babara,versie,vanesa,shelba,shawnda,nikia,naoma,marna,margeret,madaline,lawana,kindra,jutta,jazmine,janett,hannelore,glendora,gertrud,garnett,freeda,frederica,florance,flavia,carline,beverlee,anjanette,valda,tamala,shonna,sarina,oneida,merilyn,marleen,lurline,lenna,katherin,jeni,gracia,glady,farah,enola,dominque,devona,delana,cecila,caprice,alysha,alethia,vena,theresia,tawny,shakira,samara,sachiko,rachele,pamella,marni,mariel,maren,malisa,ligia,lera,latoria,larae,kimber,kathern,karey,jennefer,janeth,halina,fredia,delisa,debroah,ciera,angelika,andree,altha,vivan,terresa,tanna,sudie,signe,salena,ronni,rebbecca,myrtie,malika,maida,leonarda,kayleigh,ethyl,ellyn,dayle,cammie,brittni,birgit,avelina,asuncion,arianna,akiko,venice,tyesha,tonie,tiesha,takisha,steffanie,sindy,meghann,manda,macie,kellye,kellee,joslyn,inger,indira,glinda,glennis,fernanda,faustina,eneida,elicia,digna,dell,arletta,willia,tammara,tabetha,sherrell,sari,rebbeca,pauletta,natosha,nakita,mammie,kenisha,kazuko,kassie,earlean,daphine,corliss,clotilde,carolyne,bernetta,augustina,audrea,annis,annabell,tennille,tamica,selene,rosana,regenia,qiana,markita,macy,leeanne,laurine,jessenia,janita,georgine,genie,emiko,elvie,deandra,dagmar,corie,collen,cherish,romaine,porsha,pearlene,micheline,merna,margorie,margaretta,lore,jenine,hermina,fredericka,elke,drusilla,dorathy,dione,celena,brigida,allegra,tamekia,synthia,sook,slyvia,rosann,reatha,raye,marquetta,margart,ling,layla,kymberly,kiana,kayleen,katlyn,karmen,joella,emelda,eleni,detra,clemmie,cheryll,chantell,cathey,arnita,arla,angle,angelic,alyse,zofia,thomasine,tennie,sherly,sherley,sharyl,remedios,petrina,nickole,myung,myrle,mozella,louanne,lisha,latia,krysta,julienne,jeanene,jacqualine,isaura,gwenda,earleen,cleopatra,carlie,audie,antonietta,alise,verdell,tomoko,thao,talisha,shemika,savanna,santina,rosia,raeann,odilia,nana,minna,magan,lynelle,karma,joeann,ivana,inell,ilana,gudrun,dreama,crissy,chante,carmelina,arvilla,annamae,alvera,aleida,yanira,vanda,tianna,stefania,shira,nicol,nancie,monserrate,melynda,melany,lovella,laure,kacy,jacquelynn,hyon,gertha,eliana,christena,christeen,charise,caterina,carley,candyce,arlena,ammie,willette,vanita,tuyet,syreeta,penney,nyla,maryam,marya,magen,ludie,loma,livia,lanell,kimberlie,julee,donetta,diedra,denisha,deane,dawne,clarine,cherryl,bronwyn,alla,valery,tonda,sueann,soraya,shoshana,shela,sharleen,shanelle,nerissa,meridith,mellie,maye,maple,magaret,lili,leonila,leonie,leeanna,lavonia,lavera,kristel,kathey,kathe,jann,ilda,hildred,hildegarde,genia,fumiko,evelin,ermelinda,elly,dung,doloris,dionna,danae,berneice,annice,alix,verena,verdie,shawnna,shawana,shaunna,rozella,randee,ranae,milagro,lynell,luise,loida,lisbeth,karleen,junita,jona,isis,hyacinth,hedy,gwenn,ethelene,erline,donya,domonique,delicia,dannette,cicely,branda,blythe,bethann,ashlyn,annalee,alline,yuko,vella,trang,towanda,tesha,sherlyn,narcisa,miguelina,meri,maybell,marlana,marguerita,madlyn,lory,loriann,leonore,leighann,laurice,latesha,laronda,katrice,kasie,kaley,jadwiga,glennie,gearldine,francina,epifania,dyan,dorie,diedre,denese,demetrice,delena,cristie,cleora,catarina,carisa,barbera,almeta,trula,tereasa,solange,sheilah,shavonne,sanora,rochell,mathilde,margareta,maia,lynsey,lawanna,launa,kena,keena,katia,glynda,gaylene,elvina,elanor,danuta,danika,cristen,cordie,coletta,clarita,carmon,brynn,azucena,aundrea,angele,verlie,verlene,tamesha,silvana,sebrina,samira,reda,raylene,penni,norah,noma,mireille,melissia,maryalice,laraine,kimbery,karyl,karine,jolanda,johana,jesusa,jaleesa,jacquelyne,iluminada,hilaria,hanh,gennie,francie,floretta,exie,edda,drema,delpha,barbar,assunta,ardell,annalisa,alisia,yukiko,yolando,wonda,waltraud,veta,temeka,tameika,shirleen,shenita,piedad,ozella,mirtha,marilu,kimiko,juliane,jenice,janay,jacquiline,hilde,elois,echo,devorah,chau,brinda,betsey,arminda,aracelis,apryl,annett,alishia,veola,usha,toshiko,theola,tashia,talitha,shery,renetta,reiko,rasheeda,obdulia,mika,melaine,meggan,marlen,marget,marceline,mana,magdalen,librada,lezlie,latashia,lasandra,kelle,isidra,inocencia,gwyn,francoise,erminia,erinn,dimple,devora,criselda,armanda,arie,ariane,angelena,aliza,adriene,adaline,xochitl,twanna,tomiko,tamisha,taisha,susy,rutha,rhona,noriko,natashia,merrie,marinda,mariko,margert,loris,lizzette,leisha,kaila,joannie,jerrica,jene,jannet,janee,jacinda,herta,elenore,doretta,delaine,daniell,claudie,britta,apolonia,amberly,alease,yuri,waneta,tomi,sharri,sandie,roselle,reynalda,raguel,phylicia,patria,olimpia,odelia,mitzie,minda,mignon,mica,mendy,marivel,maile,lynetta,lavette,lauryn,latrisha,lakiesha,kiersten,kary,josphine,jolyn,jetta,janise,jacquie,ivelisse,glynis,gianna,gaynelle,danyell,danille,dacia,coralee,cher,ceola,arianne,aleshia,yung,williemae,trinh,thora,sherika,shemeka,shaunda,roseline,ricki,melda,mallie,lavonna,latina,laquanda,lala,lachelle,klara,kandis,johna,jeanmarie,jaye,grayce,gertude,emerita,ebonie,clorinda,ching,chery,carola,breann,blossom,bernardine,becki,arletha,argelia,alita,yulanda,yessenia,tobi,tasia,sylvie,shirl,shirely,shella,shantelle,sacha,rebecka,providencia,paulene,misha,miki,marline,marica,lorita,latoyia,lasonya,kerstin,kenda,keitha,kathrin,jaymie,gricelda,ginette,eryn,elina,elfrieda,danyel,cheree,chanelle,barrie,aurore,annamaria,alleen,ailene,aide,yasmine,vashti,treasa,tiffaney,sheryll,sharie,shanae,raisa,neda,mitsuko,mirella,milda,maryanna,maragret,mabelle,luetta,lorina,letisha,latarsha,lanelle,lajuana,krissy,karly,karena,jessika,jerica,jeanelle,jalisa,jacelyn,izola,euna,etha,domitila,dominica,daina,creola,carli,camie,brittny,ashanti,anisha,aleen,adah,yasuko,valrie,tona,tinisha,terisa,taneka,simonne,shalanda,serita,ressie,refugia,olene,margherita,mandie,maire,lyndia,luci,lorriane,loreta,leonia,lavona,lashawnda,lakia,kyoko,krystina,krysten,kenia,kelsi,jeanice,isobel,georgiann,genny,felicidad,eilene,deloise,deedee,conception,clora,cherilyn,calandra,armandina,anisa,tiera,theressa,stephania,sima,shyla,shonta,shera,shaquita,shala,rossana,nohemi,nery,moriah,melita,melida,melani,marylynn,marisha,mariette,malorie,madelene,ludivina,loria,lorette,loralee,lianne,lavenia,laurinda,lashon,kimi,keila,katelynn,jone,joane,jayna,janella,hertha,francene,elinore,despina,delsie,deedra,clemencia,carolin,bulah,brittanie,blondell,bibi,beaulah,beata,annita,agripina,virgen,valene,twanda,tommye,tarra,tari,tammera,shakia,sadye,ruthanne,rochel,rivka,pura,nenita,natisha,ming,merrilee,melodee,marvis,lucilla,leena,laveta,larita,lanie,keren,ileen,georgeann,genna,frida,eufemia,emely,edyth,deonna,deadra,darlena,chanell,cathern,cassondra,cassaundra,bernarda,berna,arlinda,anamaria,vertie,valeri,torri,stasia,sherise,sherill,sanda,ruthe,rosy,robbi,ranee,quyen,pearly,palmira,onita,nisha,niesha,nida,merlyn,mayola,marylouise,marth,margene,madelaine,londa,leontine,leoma,leia,lauralee,lanora,lakita,kiyoko,keturah,katelin,kareen,jonie,johnette,jenee,jeanett,izetta,hiedi,heike,hassie,giuseppina,georgann,fidela,fernande,elwanda,ellamae,eliz,dusti,dotty,cyndy,coralie,celesta,alverta,xenia,wava,vanetta,torrie,tashina,tandy,tambra,tama,stepanie,shila,shaunta,sharan,shaniqua,shae,setsuko,serafina,sandee,rosamaria,priscila,olinda,nadene,muoi,michelina,mercedez,maryrose,marcene,magali,mafalda,lannie,kayce,karoline,kamilah,kamala,justa,joline,jennine,jacquetta,iraida,georgeanna,franchesca,emeline,elane,ehtel,earlie,dulcie,dalene,classie,chere,charis,caroyln,carmina,carita,bethanie,ayako,arica,alysa,alessandra,akilah,adrien,zetta,youlanda,yelena,yahaira,xuan,wendolyn,tijuana,terina,teresia,suzi,sherell,shavonda,shaunte,sharda,shakita,sena,ryann,rubi,riva,reginia,rachal,parthenia,pamula,monnie,monet,michaele,melia,malka,maisha,lisandra,lekisha,lean,lakendra,krystin,kortney,kizzie,kittie,kera,kendal,kemberly,kanisha,julene,jule,johanne,jamee,halley,gidget,fredricka,fleta,fatimah,eusebia,elza,eleonore,dorthey,doria,donella,dinorah,delorse,claretha,christinia,charlyn,bong,belkis,azzie,andera,aiko,adena,yajaira,vania,ulrike,toshia,tifany,stefany,shizue,shenika,shawanna,sharolyn,sharilyn,shaquana,shantay,rozanne,roselee,remona,reanna,raelene,phung,petronila,natacha,nancey,myrl,miyoko,miesha,merideth,marvella,marquitta,marhta,marchelle,lizeth,libbie,lahoma,ladawn,kina,katheleen,katharyn,karisa,kaleigh,junie,julieann,johnsie,janean,jaimee,jackqueline,hisako,herma,helaine,gwyneth,gita,eustolia,emelina,elin,edris,donnette,donnetta,dierdre,denae,darcel,clarisa,cinderella,chia,charlesetta,charita,celsa,cassy,cassi,carlee,bruna,brittaney,brande,billi,antonetta,angla,angelyn,analisa,alane,wenona,wendie,veronique,vannesa,tobie,tempie,sumiko,sulema,somer,sheba,sharice,shanel,shalon,rosio,roselia,renay,rema,reena,ozie,oretha,oralee,ngan,nakesha,milly,marybelle,margrett,maragaret,manie,lurlene,lillia,lieselotte,lavelle,lashaunda,lakeesha,kaycee,kalyn,joya,joette,jenae,janiece,illa,grisel,glayds,genevie,gala,fredda,eleonor,debera,deandrea,corrinne,cordia,contessa,colene,cleotilde,chantay,cecille,beatris,azalee,arlean,ardath,anjelica,anja,alfredia,aleisha,zada,yuonne,xiao,willodean,vennie,vanna,tyisha,tova,torie,tonisha,tilda,tien,sirena,sherril,shanti,shan,senaida,samella,robbyn,renda,reita,phebe,paulita,nobuko,nguyet,neomi,mikaela,melania,maximina,marg,maisie,lynna,lilli,lashaun,lakenya,lael,kirstie,kathline,kasha,karlyn,karima,jovan,josefine,jennell,jacqui,jackelyn,hien,grazyna,florrie,floria,eleonora,dwana,dorla,delmy,deja,dede,dann,crysta,clelia,claris,chieko,cherlyn,cherelle,charmain,chara,cammy,arnette,ardelle,annika,amiee,amee,allena,yvone,yuki,yoshie,yevette,yael,willetta,voncile,venetta,tula,tonette,timika,temika,telma,teisha,taren,stacee,shawnta,saturnina,ricarda,pasty,onie,nubia,marielle,mariella,marianela,mardell,luanna,loise,lisabeth,lindsy,lilliana,lilliam,lelah,leigha,leanora,kristeen,khalilah,keeley,kandra,junko,joaquina,jerlene,jani,jamika,hsiu,hermila,genevive,evia,eugena,emmaline,elfreda,elene,donette,delcie,deeanna,darcey,clarinda,cira,chae,celinda,catheryn,casimira,carmelia,camellia,breana,bobette,bernardina,bebe,basilia,arlyne,amal,alayna,zonia,zenia,yuriko,yaeko,wynell,willena,vernia,tora,terrilyn,terica,tenesha,tawna,tajuana,taina,stephnie,sona,sina,shondra,shizuko,sherlene,sherice,sharika,rossie,rosena,rima,rheba,renna,natalya,nancee,melodi,meda,matha,marketta,maricruz,marcelene,malvina,luba,louetta,leida,lecia,lauran,lashawna,laine,khadijah,katerine,kasi,kallie,julietta,jesusita,jestine,jessia,jeffie,janyce,isadora,georgianne,fidelia,evita,eura,eulah,estefana,elsy,eladia,dodie,denisse,deloras,delila,daysi,crystle,concha,claretta,charlsie,charlena,carylon,bettyann,asley,ashlea,amira,agueda,agnus,yuette,vinita,victorina,tynisha,treena,toccara,tish,thomasena,tegan,soila,shenna,sharmaine,shantae,shandi,saran,sarai,sana,rosette,rolande,regine,otelia,olevia,nicholle,necole,naida,myrta,myesha,mitsue,minta,mertie,margy,mahalia,madalene,loura,lorean,lesha,leonida,lenita,lavone,lashell,lashandra,lamonica,kimbra,katherina,karry,kanesha,jong,jeneva,jaquelyn,gilma,ghislaine,gertrudis,fransisca,fermina,ettie,etsuko,ellan,elidia,edra,dorethea,doreatha,denyse,deetta,daine,cyrstal,corrin,cayla,carlita,camila,burma,bula,buena,barabara,avril,alaine,zana,wilhemina,wanetta,verline,vasiliki,tonita,tisa,teofila,tayna,taunya,tandra,takako,sunni,suanne,sixta,sharell,seema,rosenda,robena,raymonde,pamila,ozell,neida,mistie,micha,merissa,maurita,maryln,maryetta,marcell,malena,makeda,lovetta,lourie,lorrine,lorilee,laurena,lashay,larraine,laree,lacresha,kristle,keva,keira,karole,joie,jinny,jeannetta,jama,heidy,gilberte,gema,faviola,evelynn,enda,elli,ellena,divina,dagny,collene,codi,cindie,chassidy,chasidy,catrice,catherina,cassey,caroll,carlena,candra,calista,bryanna,britteny,beula,bari,audrie,audria,ardelia,annelle,angila,alona,allyn".split(","),surnames:"smith,johnson,williams,jones,brown,davis,miller,wilson,moore,taylor,anderson,jackson,white,harris,martin,thompson,garcia,martinez,robinson,clark,rodriguez,lewis,lee,walker,hall,allen,young,hernandez,king,wright,lopez,hill,green,adams,baker,gonzalez,nelson,carter,mitchell,perez,roberts,turner,phillips,campbell,parker,evans,edwards,collins,stewart,sanchez,morris,rogers,reed,cook,morgan,bell,murphy,bailey,rivera,cooper,richardson,cox,howard,ward,torres,peterson,gray,ramirez,watson,brooks,sanders,price,bennett,wood,barnes,ross,henderson,coleman,jenkins,perry,powell,long,patterson,hughes,flores,washington,butler,simmons,foster,gonzales,bryant,alexander,griffin,diaz,hayes,myers,ford,hamilton,graham,sullivan,wallace,woods,cole,west,owens,reynolds,fisher,ellis,harrison,gibson,mcdonald,cruz,marshall,ortiz,gomez,murray,freeman,wells,webb,simpson,stevens,tucker,porter,hicks,crawford,boyd,mason,morales,kennedy,warren,dixon,ramos,reyes,burns,gordon,shaw,holmes,rice,robertson,hunt,black,daniels,palmer,mills,nichols,grant,knight,ferguson,stone,hawkins,dunn,perkins,hudson,spencer,gardner,stephens,payne,pierce,berry,matthews,arnold,wagner,willis,watkins,olson,carroll,duncan,snyder,hart,cunningham,lane,andrews,ruiz,harper,fox,riley,armstrong,carpenter,weaver,greene,elliott,chavez,sims,peters,kelley,franklin,lawson,fields,gutierrez,schmidt,carr,vasquez,castillo,wheeler,chapman,montgomery,richards,williamson,johnston,banks,meyer,bishop,mccoy,howell,alvarez,morrison,hansen,fernandez,garza,harvey,burton,nguyen,jacobs,reid,fuller,lynch,garrett,romero,welch,larson,frazier,burke,hanson,mendoza,moreno,bowman,medina,fowler,brewer,hoffman,carlson,silva,pearson,holland,fleming,jensen,vargas,byrd,davidson,hopkins,herrera,wade,soto,walters,neal,caldwell,lowe,jennings,barnett,graves,jimenez,horton,shelton,barrett,obrien,castro,sutton,mckinney,lucas,miles,rodriquez,chambers,holt,lambert,fletcher,watts,bates,hale,rhodes,pena,beck,newman,haynes,mcdaniel,mendez,bush,vaughn,parks,dawson,santiago,norris,hardy,steele,curry,powers,schultz,barker,guzman,page,munoz,ball,keller,chandler,weber,walsh,lyons,ramsey,wolfe,schneider,mullins,benson,sharp,bowen,barber,cummings,hines,baldwin,griffith,valdez,hubbard,salazar,reeves,warner,stevenson,burgess,santos,tate,cross,garner,mann,mack,moss,thornton,mcgee,farmer,delgado,aguilar,vega,glover,manning,cohen,harmon,rodgers,robbins,newton,blair,higgins,ingram,reese,cannon,strickland,townsend,potter,goodwin,walton,rowe,hampton,ortega,patton,swanson,goodman,maldonado,yates,becker,erickson,hodges,rios,conner,adkins,webster,malone,hammond,flowers,cobb,moody,quinn,pope,osborne,mccarthy,guerrero,estrada,sandoval,gibbs,gross,fitzgerald,stokes,doyle,saunders,wise,colon,gill,alvarado,greer,padilla,waters,nunez,ballard,schwartz,mcbride,houston,christensen,klein,pratt,briggs,parsons,mclaughlin,zimmerman,buchanan,moran,copeland,pittman,brady,mccormick,holloway,brock,poole,logan,bass,marsh,drake,wong,jefferson,morton,abbott,sparks,norton,huff,massey,figueroa,carson,bowers,roberson,barton,tran,lamb,harrington,boone,cortez,clarke,mathis,singleton,wilkins,cain,underwood,hogan,mckenzie,collier,luna,phelps,mcguire,bridges,wilkerson,nash,summers,atkins,wilcox,pitts,conley,marquez,burnett,cochran,chase,davenport,hood,gates,ayala,sawyer,vazquez,dickerson,hodge,acosta,flynn,espinoza,nicholson,monroe,wolf,morrow,whitaker,oconnor,skinner,ware,molina,kirby,huffman,gilmore,dominguez,oneal,lang,combs,kramer,hancock,gallagher,gaines,shaffer,wiggins,mathews,mcclain,fischer,wall,melton,hensley,bond,dyer,grimes,contreras,wyatt,baxter,snow,mosley,shepherd,larsen,hoover,beasley,petersen,whitehead,meyers,garrison,shields,horn,savage,olsen,schroeder,hartman,woodard,mueller,kemp,deleon,booth,patel,calhoun,wiley,eaton,cline,navarro,harrell,humphrey,parrish,duran,hutchinson,hess,dorsey,bullock,robles,beard,dalton,avila,rich,blackwell,johns,blankenship,trevino,salinas,campos,pruitt,callahan,montoya,hardin,guerra,mcdowell,stafford,gallegos,henson,wilkinson,booker,merritt,atkinson,orr,decker,hobbs,tanner,knox,pacheco,stephenson,glass,rojas,serrano,marks,hickman,sweeney,strong,mcclure,conway,roth,maynard,farrell,lowery,hurst,nixon,weiss,trujillo,ellison,sloan,juarez,winters,mclean,boyer,villarreal,mccall,gentry,carrillo,ayers,lara,sexton,pace,hull,leblanc,browning,velasquez,leach,chang,sellers,herring,noble,foley,bartlett,mercado,landry,durham,walls,barr,mckee,bauer,rivers,bradshaw,pugh,velez,rush,estes,dodson,morse,sheppard,weeks,camacho,bean,barron,livingston,middleton,spears,branch,blevins,chen,kerr,mcconnell,hatfield,harding,solis,frost,giles,blackburn,pennington,woodward,finley,mcintosh,koch,mccullough,blanchard,rivas,brennan,mejia,kane,benton,buckley,valentine,maddox,russo,mcknight,buck,moon,mcmillan,crosby,berg,dotson,mays,roach,chan,richmond,meadows,faulkner,oneill,knapp,kline,ochoa,jacobson,gay,hendricks,horne,shepard,hebert,cardenas,mcintyre,waller,holman,donaldson,cantu,morin,gillespie,fuentes,tillman,bentley,peck,key,salas,rollins,gamble,dickson,santana,cabrera,cervantes,howe,hinton,hurley,spence,zamora,yang,mcneil,suarez,petty,gould,mcfarland,sampson,carver,bray,macdonald,stout,hester,melendez,dillon,farley,hopper,galloway,potts,joyner,stein,aguirre,osborn,mercer,bender,franco,rowland,sykes,pickett,sears,mayo,dunlap,hayden,wilder,mckay,coffey,mccarty,ewing,cooley,vaughan,bonner,cotton,holder,stark,ferrell,cantrell,fulton,lott,calderon,pollard,hooper,burch,mullen,fry,riddle,levy,duke,odonnell,britt,daugherty,berger,dillard,alston,frye,riggs,chaney,odom,duffy,fitzpatrick,valenzuela,mayer,alford,mcpherson,acevedo,barrera,cote,reilly,compton,mooney,mcgowan,craft,clemons,wynn,nielsen,baird,stanton,snider,rosales,bright,witt,hays,holden,rutledge,kinney,clements,castaneda,slater,hahn,burks,delaney,pate,lancaster,sharpe,whitfield,talley,macias,burris,ratliff,mccray,madden,kaufman,beach,goff,cash,bolton,mcfadden,levine,byers,kirkland,kidd,workman,carney,mcleod,holcomb,finch,sosa,haney,franks,sargent,nieves,downs,rasmussen,bird,hewitt,foreman,valencia,oneil,delacruz,vinson,dejesus,hyde,forbes,gilliam,guthrie,wooten,huber,barlow,boyle,mcmahon,buckner,rocha,puckett,langley,knowles,cooke,velazquez,whitley,vang,shea,rouse,hartley,mayfield,elder,rankin,hanna,cowan,lucero,arroyo,slaughter,haas,oconnell,minor,boucher,archer,boggs,dougherty,andersen,newell,crowe,wang,friedman,bland,swain,holley,pearce,childs,yarbrough,galvan,proctor,meeks,lozano,mora,rangel,bacon,villanueva,schaefer,rosado,helms,boyce,goss,stinson,ibarra,hutchins,covington,crowley,hatcher,mackey,bunch,womack,polk,dodd,childress,childers,villa,springer,mahoney,dailey,belcher,lockhart,griggs,costa,brandt,walden,moser,tatum,mccann,akers,lutz,pryor,orozco,mcallister,lugo,davies,shoemaker,rutherford,newsome,magee,chamberlain,blanton,simms,godfrey,flanagan,crum,cordova,escobar,downing,sinclair,donahue,krueger,mcginnis,gore,farris,webber,corbett,andrade,starr,lyon,yoder,hastings,mcgrath,spivey,krause,harden,crabtree,kirkpatrick,arrington,ritter,mcghee,bolden,maloney,gagnon,dunbar,ponce,pike,mayes,beatty,mobley,kimball,butts,montes,eldridge,braun,hamm,gibbons,moyer,manley,herron,plummer,elmore,cramer,rucker,pierson,fontenot,rubio,goldstein,elkins,wills,novak,hickey,worley,gorman,katz,dickinson,broussard,woodruff,crow,britton,nance,lehman,bingham,zuniga,whaley,shafer,coffman,steward,delarosa,neely,mata,davila,mccabe,kessler,hinkle,welsh,pagan,goldberg,goins,crouch,cuevas,quinones,mcdermott,hendrickson,samuels,denton,bergeron,ivey,locke,haines,snell,hoskins,byrne,arias,corbin,beltran,chappell,downey,dooley,tuttle,couch,payton,mcelroy,crockett,groves,cartwright,dickey,mcgill,dubois,muniz,tolbert,dempsey,cisneros,sewell,latham,vigil,tapia,rainey,norwood,stroud,meade,tipton,kuhn,hilliard,bonilla,teague,gunn,greenwood,correa,reece,pineda,phipps,frey,kaiser,ames,gunter,schmitt,milligan,espinosa,bowden,vickers,lowry,pritchard,costello,piper,mcclellan,lovell,sheehan,hatch,dobson,singh,jeffries,hollingsworth,sorensen,meza,fink,donnelly,burrell,tomlinson,colbert,billings,ritchie,helton,sutherland,peoples,mcqueen,thomason,givens,crocker,vogel,robison,dunham,coker,swartz,keys,ladner,richter,hargrove,edmonds,brantley,albright,murdock,boswell,muller,quintero,padgett,kenney,daly,connolly,inman,quintana,lund,barnard,villegas,simons,huggins,tidwell,sanderson,bullard,mcclendon,duarte,draper,marrero,dwyer,abrams,stover,goode,fraser,crews,bernal,godwin,conklin,mcneal,baca,esparza,crowder,bower,brewster,mcneill,rodrigues,leal,coates,raines,mccain,mccord,miner,holbrook,swift,dukes,carlisle,aldridge,ackerman,starks,ricks,holliday,ferris,hairston,sheffield,lange,fountain,doss,betts,kaplan,carmichael,bloom,ruffin,penn,kern,bowles,sizemore,larkin,dupree,seals,metcalf,hutchison,henley,farr,mccauley,hankins,gustafson,curran,waddell,ramey,cates,pollock,cummins,messer,heller,funk,cornett,palacios,galindo,cano,hathaway,pham,enriquez,salgado,pelletier,painter,wiseman,blount,feliciano,houser,doherty,mead,mcgraw,swan,capps,blanco,blackmon,thomson,mcmanus,burkett,gleason,dickens,cormier,voss,rushing,rosenberg,hurd,dumas,benitez,arellano,marin,caudill,bragg,jaramillo,huerta,gipson,colvin,biggs,vela,platt,cassidy,tompkins,mccollum,dolan,daley,crump,sneed,kilgore,grove,grimm,davison,brunson,prater,marcum,devine,dodge,stratton,rosas,choi,tripp,ledbetter,hightower,feldman,epps,yeager,posey,scruggs,cope,stubbs,richey,overton,trotter,sprague,cordero,butcher,stiles,burgos,woodson,horner,bassett,purcell,haskins,akins,ziegler,spaulding,hadley,grubbs,sumner,murillo,zavala,shook,lockwood,driscoll,dahl,thorpe,redmond,putnam,mcwilliams,mcrae,romano,joiner,sadler,hedrick,hager,hagen,fitch,coulter,thacker,mansfield,langston,guidry,ferreira,corley,conn,rossi,lackey,baez,saenz,mcnamara,mcmullen,mckenna,mcdonough,link,engel,browne,roper,peacock,eubanks,drummond,stringer,pritchett,parham,mims,landers,grayson,schafer,egan,timmons,ohara,keen,hamlin,finn,cortes,mcnair,nadeau,moseley,michaud,rosen,oakes,kurtz,jeffers,calloway,beal,bautista,winn,suggs,stern,stapleton,lyles,laird,montano,dawkins,hagan,goldman,bryson,barajas,lovett,segura,metz,lockett,langford,hinson,eastman,hooks,smallwood,shapiro,crowell,whalen,triplett,chatman,aldrich,cahill,youngblood,ybarra,stallings,sheets,reeder,connelly,bateman,abernathy,winkler,wilkes,masters,hackett,granger,gillis,schmitz,sapp,napier,souza,lanier,gomes,weir,otero,ledford,burroughs,babcock,ventura,siegel,dugan,bledsoe,atwood,wray,varner,spangler,anaya,staley,kraft,fournier,belanger,wolff,thorne,bynum,burnette,boykin,swenson,purvis,pina,khan,duvall,darby,xiong,kauffman,healy,engle,benoit,valle,steiner,spicer,shaver,randle,lundy,chin,calvert,staton,neff,kearney,darden,oakley,medeiros,mccracken,crenshaw,perdue,dill,whittaker,tobin,washburn,hogue,goodrich,easley,bravo,dennison,shipley,kerns,jorgensen,crain,villalobos,maurer,longoria,keene,coon,witherspoon,staples,pettit,kincaid,eason,madrid,echols,lusk,stahl,currie,thayer,shultz,mcnally,seay,maher,gagne,barrow,nava,moreland,honeycutt,hearn,diggs,caron,whitten,westbrook,stovall,ragland,munson,meier,looney,kimble,jolly,hobson,goddard,culver,burr,presley,negron,connell,tovar,huddleston,ashby,salter,root,pendleton,oleary,nickerson,myrick,judd,jacobsen,bain,adair,starnes,matos,busby,herndon,hanley,bellamy,doty,bartley,yazzie,rowell,parson,gifford,cullen,christiansen,benavides,barnhart,talbot,mock,crandall,connors,bonds,whitt,gage,bergman,arredondo,addison,lujan,dowdy,jernigan,huynh,bouchard,dutton,rhoades,ouellette,kiser,herrington,hare,blackman,babb,allred,rudd,paulson,ogden,koenig,geiger,begay,parra,lassiter,hawk,esposito,waldron,ransom,prather,chacon,vick,sands,roark,parr,mayberry,greenberg,coley,bruner,whitman,skaggs,shipman,leary,hutton,romo,medrano,ladd,kruse,askew,schulz,alfaro,tabor,mohr,gallo,bermudez,pereira,bliss,reaves,flint,comer,woodall,naquin,guevara,delong,carrier,pickens,tilley,schaffer,knutson,fenton,doran,vogt,vann,prescott,mclain,landis,corcoran,zapata,hyatt,hemphill,faulk,dove,boudreaux,aragon,whitlock,trejo,tackett,shearer,saldana,hanks,mckinnon,koehler,bourgeois,keyes,goodson,foote,lunsford,goldsmith,flood,winslow,sams,reagan,mccloud,hough,esquivel,naylor,loomis,coronado,ludwig,braswell,bearden,huang,fagan,ezell,edmondson,cronin,nunn,lemon,guillory,grier,dubose,traylor,ryder,dobbins,coyle,aponte,whitmore,smalls,rowan,malloy,cardona,braxton,borden,humphries,carrasco,ruff,metzger,huntley,hinojosa,finney,madsen,ernst,dozier,burkhart,bowser,peralta,daigle,whittington,sorenson,saucedo,roche,redding,fugate,avalos,waite,lind,huston,hawthorne,hamby,boyles,boles,regan,faust,crook,beam,barger,hinds,gallardo,willoughby,willingham,eckert,busch,zepeda,worthington,tinsley,hoff,hawley,carmona,varela,rector,newcomb,kinsey,dube,whatley,ragsdale,bernstein,becerra,yost,mattson,felder,cheek,handy,grossman,gauthier,escobedo,braden,beckman,mott,hillman,flaherty,dykes,stockton,stearns,lofton,coats,cavazos,beavers,barrios,tang,mosher,cardwell,coles,burnham,weller,lemons,beebe,aguilera,parnell,harman,couture,alley,schumacher,redd,dobbs,blum,blalock,merchant,ennis,denson,cottrell,brannon,bagley,aviles,watt,sousa,rosenthal,rooney,dietz,blank,paquette,mcclelland,duff,velasco,lentz,grubb,burrows,barbour,ulrich,shockley,rader,beyer,mixon,layton,altman,weathers,stoner,squires,shipp,priest,lipscomb,cutler,caballero,zimmer,willett,thurston,storey,medley,epperson,shah,mcmillian,baggett,torrez,hirsch,dent,poirier,peachey,farrar,creech,barth,trimble,dupre,albrecht,sample,lawler,crisp,conroy,wetzel,nesbitt,murry,jameson,wilhelm,patten,minton,matson,kimbrough,guinn,croft,toth,pulliam,nugent,newby,littlejohn,dias,canales,bernier,baron,singletary,renteria,pruett,mchugh,mabry,landrum,brower,stoddard,cagle,stjohn,scales,kohler,kellogg,hopson,gant,tharp,gann,zeigler,pringle,hammons,fairchild,deaton,chavis,carnes,rowley,matlock,kearns,irizarry,carrington,starkey,lopes,jarrell,craven,baum,littlefield,linn,humphreys,etheridge,cuellar,chastain,bundy,speer,skelton,quiroz,pyle,portillo,ponder,moulton,machado,killian,hutson,hitchcock,dowling,cloud,burdick,spann,pedersen,levin,leggett,hayward,dietrich,beaulieu,barksdale,wakefield,snowden,briscoe,bowie,berman,ogle,mcgregor,laughlin,helm,burden,wheatley,schreiber,pressley,parris,alaniz,agee,swann,snodgrass,schuster,radford,monk,mattingly,harp,girard,cheney,yancey,wagoner,ridley,lombardo,hudgins,gaskins,duckworth,coburn,willey,prado,newberry,magana,hammonds,elam,whipple,slade,serna,ojeda,liles,dorman,diehl,upton,reardon,michaels,goetz,eller,bauman,baer,layne,hummel,brenner,amaya,adamson,ornelas,dowell,cloutier,castellanos,wellman,saylor,orourke,moya,montalvo,kilpatrick,durbin,shell,oldham,kang,garvin,foss,branham,bartholomew,templeton,maguire,holton,rider,monahan,mccormack,beaty,anders,streeter,nieto,nielson,moffett,lankford,keating,heck,gatlin,delatorre,callaway,adcock,worrell,unger,robinette,nowak,jeter,brunner,steen,parrott,overstreet,nobles,montanez,clevenger,brinkley,trahan,quarles,pickering,pederson,jansen,grantham,gilchrist,crespo,aiken,schell,schaeffer,lorenz,leyva,harms,dyson,wallis,pease,leavitt,cheng,cavanaugh,batts,warden,seaman,rockwell,quezada,paxton,linder,houck,fontaine,durant,caruso,adler,pimentel,mize,lytle,cleary,cason,acker,switzer,isaacs,higginbotham,waterman,vandyke,stamper,sisk,shuler,riddick,mcmahan,levesque,hatton,bronson,bollinger,arnett,okeefe,gerber,gannon,farnsworth,baughman,silverman,satterfield,mccrary,kowalski,grigsby,greco,cabral,trout,rinehart,mahon,linton,gooden,curley,baugh,wyman,weiner,schwab,schuler,morrissey,mahan,bunn,thrasher,spear,waggoner,qualls,purdy,mcwhorter,mauldin,gilman,perryman,newsom,menard,martino,graf,billingsley,artis,simpkins,salisbury,quintanilla,gilliland,fraley,foust,crouse,scarborough,grissom,fultz,marlow,markham,madrigal,lawton,barfield,whiting,varney,schwarz,gooch,arce,wheat,truong,poulin,hurtado,selby,gaither,fortner,culpepper,coughlin,brinson,boudreau,bales,stepp,holm,schilling,morrell,kahn,heaton,gamez,causey,turpin,shanks,schrader,meek,isom,hardison,carranza,yanez,scroggins,schofield,runyon,ratcliff,murrell,moeller,irby,currier,butterfield,ralston,pullen,pinson,estep,carbone,hawks,ellington,casillas,spurlock,sikes,motley,mccartney,kruger,isbell,houle,burk,tomlin,quigley,neumann,lovelace,fennell,cheatham,bustamante,skidmore,hidalgo,forman,culp,bowens,betancourt,aquino,robb,milner,martel,gresham,wiles,ricketts,dowd,collazo,bostic,blakely,sherrod,kenyon,gandy,ebert,deloach,allard,sauer,robins,olivares,gillette,chestnut,bourque,paine,hite,hauser,devore,crawley,chapa,talbert,poindexter,meador,mcduffie,mattox,kraus,harkins,choate,wren,sledge,sanborn,kinder,geary,cornwell,barclay,abney,seward,rhoads,howland,fortier,benner,vines,tubbs,troutman,rapp,mccurdy,deluca,westmoreland,havens,guajardo,clary,seal,meehan,herzog,guillen,ashcraft,waugh,renner,milam,elrod,churchill,breaux,bolin,asher,windham,tirado,pemberton,nolen,noland,knott,emmons,cornish,christenson,brownlee,barbee,waldrop,pitt,olvera,lombardi,gruber,gaffney,eggleston,banda,archuleta,slone,prewitt,pfeiffer,nettles,mena,mcadams,henning,gardiner,cromwell,chisholm,burleson,vest,oglesby,mccarter,lumpkin,wofford,vanhorn,thorn,teel,swafford,stclair,stanfield,ocampo,herrmann,hannon,arsenault,roush,mcalister,hiatt,gunderson,forsythe,duggan,delvalle,cintron,wilks,weinstein,uribe,rizzo,noyes,mclendon,gurley,bethea,winstead,maples,guyton,giordano,alderman,valdes,polanco,pappas,lively,grogan,griffiths,bobo,arevalo,whitson,sowell,rendon,fernandes,farrow,benavidez,ayres,alicea,stump,smalley,seitz,schulte,gilley,gallant,canfield,wolford,omalley,mcnutt,mcnulty,mcgovern,hardman,harbin,cowart,chavarria,brink,beckett,bagwell,armstead,anglin,abreu,reynoso,krebs,jett,hoffmann,greenfield,forte,burney,broome,sisson,trammell,partridge,mace,lomax,lemieux,gossett,frantz,fogle,cooney,broughton,pence,paulsen,muncy,mcarthur,hollins,beauchamp,withers,osorio,mulligan,hoyle,dockery,cockrell,begley,amador,roby,rains,lindquist,gentile,everhart,bohannon,wylie,sommers,purnell,fortin,dunning,breeden,vail,phelan,phan,marx,cosby,colburn,boling,biddle,ledesma,gaddis,denney,chow,bueno,berrios,wicker,tolliver,thibodeaux,nagle,lavoie,fisk,crist,barbosa,reedy,locklear,kolb,himes,behrens,beckwith,weems,wahl,shorter,shackelford,rees,muse,cerda,valadez,thibodeau,saavedra,ridgeway,reiter,mchenry,majors,lachance,keaton,ferrara,clemens,blocker,applegate,needham,mojica,kuykendall,hamel,escamilla,doughty,burchett,ainsworth,vidal,upchurch,thigpen,strauss,spruill,sowers,riggins,ricker,mccombs,harlow,buffington,sotelo,olivas,negrete,morey,macon,logsdon,lapointe,bigelow,bello,westfall,stubblefield,lindley,hein,hawes,farrington,breen,birch,wilde,steed,sepulveda,reinhardt,proffitt,minter,messina,mcnabb,maier,keeler,gamboa,donohue,basham,shinn,crooks,cota,borders,bills,bachman,tisdale,tavares,schmid,pickard,gulley,fonseca,delossantos,condon,batista,wicks,wadsworth,martell,littleton,ison,haag,folsom,brumfield,broyles,brito,mireles,mcdonnell,leclair,hamblin,gough,fanning,binder,winfield,whitworth,soriano,palumbo,newkirk,mangum,hutcherson,comstock,carlin,beall,bair,wendt,watters,walling,putman,otoole,morley,mares,lemus,keener,hundley,dial,damico,billups,strother,mcfarlane,lamm,eaves,crutcher,caraballo,canty,atwell,taft,siler,rust,rawls,rawlings,prieto,mcneely,mcafee,hulsey,hackney,galvez,escalante,delagarza,crider,bandy,wilbanks,stowe,steinberg,renfro,masterson,massie,lanham,haskell,hamrick,dehart,burdette,branson,bourne,babin,aleman,worthy,tibbs,smoot,slack,paradis,mull,luce,houghton,gantt,furman,danner,christianson,burge,ashford,arndt,almeida,stallworth,shade,searcy,sager,noonan,mclemore,mcintire,maxey,lavigne,jobe,ferrer,falk,coffin,byrnes,aranda,apodaca,stamps,rounds,peek,olmstead,lewandowski,kaminski,dunaway,bruns,brackett,amato,reich,mcclung,lacroix,koontz,herrick,hardesty,flanders,cousins,cato,cade,vickery,shank,nagel,dupuis,croteau,cotter,stuckey,stine,porterfield,pauley,moffitt,knudsen,hardwick,goforth,dupont,blunt,barrows,barnhill,shull,rash,loftis,lemay,kitchens,horvath,grenier,fuchs,fairbanks,culbertson,calkins,burnside,beattie,ashworth,albertson,wertz,vaught,vallejo,turk,tuck,tijerina,sage,peterman,marroquin,marr,lantz,hoang,demarco,cone,berube,barnette,wharton,stinnett,slocum,scanlon,sander,pinto,mancuso,lima,headley,epstein,counts,clarkson,carnahan,boren,arteaga,adame,zook,whittle,whitehurst,wenzel,saxton,reddick,puente,handley,haggerty,earley,devlin,chaffin,cady,acuna,solano,sigler,pollack,pendergrass,ostrander,janes,francois,crutchfield,chamberlin,brubaker,baptiste,willson,reis,neeley,mullin,mercier,lira,layman,keeling,higdon,espinal,chapin,warfield,toledo,pulido,peebles,nagy,montague,mello,lear,jaeger,hogg,graff,furr,soliz,poore,mendenhall,mclaurin,maestas,gable,barraza,tillery,snead,pond,neill,mcculloch,mccorkle,lightfoot,hutchings,holloman,harness,dorn,bock,zielinski,turley,treadwell,stpierre,starling,somers,oswald,merrick,easterling,bivens,truitt,poston,parry,ontiveros,olivarez,moreau,medlin,lenz,knowlton,fairley,cobbs,chisolm,bannister,woodworth,toler,ocasio,noriega,neuman,moye,milburn,mcclanahan,lilley,hanes,flannery,dellinger,danielson,conti,blodgett,beers,weatherford,strain,karr,hitt,denham,custer,coble,clough,casteel,bolduc,batchelor,ammons,whitlow,tierney,staten,sibley,seifert,schubert,salcedo,mattison,laney,haggard,grooms,dees,cromer,cooks,colson,caswell,zarate,swisher,shin,ragan,pridgen,mcvey,matheny,lafleur,franz,ferraro,dugger,whiteside,rigsby,mcmurray,lehmann,jacoby,hildebrand,hendrick,headrick,goad,fincher,drury,borges,archibald,albers,woodcock,trapp,soares,seaton,monson,luckett,lindberg,kopp,keeton,healey,garvey,gaddy,fain,burchfield,wentworth,strand,stack,spooner,saucier,ricci,plunkett,pannell,ness,leger,freitas,fong,elizondo,duval,beaudoin,urbina,rickard,partin,mcgrew,mcclintock,ledoux,forsyth,faison,devries,bertrand,wasson,tilton,scarbrough,leung,irvine,garber,denning,corral,colley,castleberry,bowlin,bogan,beale,baines,trice,rayburn,parkinson,nunes,mcmillen,leahy,kimmel,higgs,fulmer,carden,bedford,taggart,spearman,prichard,morrill,koonce,heinz,hedges,guenther,grice,findley,dover,creighton,boothe,bayer,arreola,vitale,valles,raney,osgood,hanlon,burley,bounds,worden,weatherly,vetter,tanaka,stiltner,nevarez,mosby,montero,melancon,harter,hamer,goble,gladden,gist,ginn,akin,zaragoza,tarver,sammons,royster,oreilly,muir,morehead,luster,kingsley,kelso,grisham,glynn,baumann,alves,yount,tamayo,paterson,oates,menendez,longo,hargis,gillen,desantis,conover,breedlove,sumpter,scherer,rupp,reichert,heredia,creel,cohn,clemmons,casas,bickford,belton,bach,williford,whitcomb,tennant,sutter,stull,mccallum,langlois,keel,keegan,dangelo,dancy,damron,clapp,clanton,bankston,oliveira,mintz,mcinnis,martens,mabe,laster,jolley,hildreth,hefner,glaser,duckett,demers,brockman,blais,alcorn,agnew,toliver,tice,seeley,najera,musser,mcfall,laplante,galvin,fajardo,doan,coyne,copley,clawson,cheung,barone,wynne,woodley,tremblay,stoll,sparrow,sparkman,schweitzer,sasser,samples,roney,legg,heim,farias,colwell,christman,bratcher,winchester,upshaw,southerland,sorrell,sells,mccloskey,martindale,luttrell,loveless,lovejoy,linares,latimer,embry,coombs,bratton,bostick,venable,tuggle,toro,staggs,sandlin,jefferies,heckman,griffis,crayton,clem,browder,thorton,sturgill,sprouse,royer,rousseau,ridenour,pogue,perales,peeples,metzler,mesa,mccutcheon,mcbee,hornsby,heffner,corrigan,armijo,plante,peyton,paredes,macklin,hussey,hodgson,granados,frias,becnel,batten,almanza,turney,teal,sturgeon,meeker,mcdaniels,limon,keeney,hutto,holguin,gorham,fishman,fierro,blanchette,rodrigue,reddy,osburn,oden,lerma,kirkwood,keefer,haugen,hammett,chalmers,brinkman,baumgartner,zhang,valerio,tellez,steffen,shumate,sauls,ripley,kemper,guffey,evers,craddock,carvalho,blaylock,banuelos,balderas,wheaton,turnbull,shuman,pointer,mosier,mccue,ligon,kozlowski,johansen,ingle,herr,briones,snipes,rickman,pipkin,pantoja,orosco,moniz,lawless,kunkel,hibbard,galarza,enos,bussey,schott,salcido,perreault,mcdougal,mccool,haight,garris,easton,conyers,atherton,wimberly,utley,spellman,smithson,slagle,ritchey,rand,petit,osullivan,oaks,nutt,mcvay,mccreary,mayhew,knoll,jewett,harwood,cardoza,ashe,arriaga,zeller,wirth,whitmire,stauffer,rountree,redden,mccaffrey,martz,larose,langdon,humes,gaskin,faber,devito,cass,almond,wingfield,wingate,villareal,tyner,smothers,severson,reno,pennell,maupin,leighton,janssen,hassell,hallman,halcomb,folse,fitzsimmons,fahey,cranford,bolen,battles,battaglia,wooldridge,trask,rosser,regalado,mcewen,keefe,fuqua,echevarria,caro,boynton,andrus,viera,vanmeter,taber,spradlin,seibert,provost,prentice,oliphant,laporte,hwang,hatchett,hass,greiner,freedman,covert,chilton,byars,wiese,venegas,swank,shrader,roberge,mullis,mortensen,mccune,marlowe,kirchner,keck,isaacson,hostetler,halverson,gunther,griswold,fenner,durden,blackwood,ahrens,sawyers,savoy,nabors,mcswain,mackay,lavender,lash,labbe,jessup,fullerton,cruse,crittenden,correia,centeno,caudle,canady,callender,alarcon,ahern,winfrey,tribble,salley,roden,musgrove,minnick,fortenberry,carrion,bunting,batiste,whited,underhill,stillwell,rauch,pippin,perrin,messenger,mancini,lister,kinard,hartmann,fleck,wilt,treadway,thornhill,spalding,rafferty,pitre,patino,ordonez,linkous,kelleher,homan,galbraith,feeney,curtin,coward,camarillo,buss,bunnell,bolt,beeler,autry,alcala,witte,wentz,stidham,shively,nunley,meacham,martins,lemke,lefebvre,hynes,horowitz,hoppe,holcombe,dunne,derr,cochrane,brittain,bedard,beauregard,torrence,strunk,soria,simonson,shumaker,scoggins,oconner,moriarty,kuntz,ives,hutcheson,horan,hales,garmon,fitts,bohn,atchison,wisniewski,vanwinkle,sturm,sallee,prosser,moen,lundberg,kunz,kohl,keane,jorgenson,jaynes,funderburk,freed,durr,creamer,cosgrove,batson,vanhoose,thomsen,teeter,smyth,redmon,orellana,maness,heflin,goulet,frick,forney,bunker,asbury,aguiar,talbott,southard,mowery,mears,lemmon,krieger,hickson,elston,duong,delgadillo,dayton,dasilva,conaway,catron,bruton,bradbury,bordelon,bivins,bittner,bergstrom,beals,abell,whelan,tejada,pulley,pino,norfleet,nealy,maes,loper,gatewood,frierson,freund,finnegan,cupp,covey,catalano,boehm,bader,yoon,walston,tenney,sipes,rawlins,medlock,mccaskill,mccallister,marcotte,maclean,hughey,henke,harwell,gladney,gilson,chism,caskey,brandenburg,baylor,villasenor,veal,thatcher,stegall,petrie,nowlin,navarrete,lombard,loftin,lemaster,kroll,kovach,kimbrell,kidwell,hershberger,fulcher,cantwell,bustos,boland,bobbitt,binkley,wester,weis,verdin,tong,tiller,sisco,sharkey,seymore,rosenbaum,rohr,quinonez,pinkston,malley,logue,lessard,lerner,lebron,krauss,klinger,halstead,haller,getz,burrow,alger,shores,pfeifer,perron,nelms,munn,mcmaster,mckenney,manns,knudson,hutchens,huskey,goebel,flagg,cushman,click,castellano,carder,bumgarner,wampler,spinks,robson,neel,mcreynolds,mathias,maas,loera,jenson,florez,coons,buckingham,brogan,berryman,wilmoth,wilhite,thrash,shephard,seidel,schulze,roldan,pettis,obryan,maki,mackie,hatley,frazer,fiore,chesser,bottoms,bisson,benefield,allman,wilke,trudeau,timm,shifflett,mundy,milliken,mayers,leake,kohn,huntington,horsley,hermann,guerin,fryer,frizzell,foret,flemming,fife,criswell,carbajal,bozeman,boisvert,angulo,wallen,tapp,silvers,ramsay,oshea,orta,moll,mckeever,mcgehee,linville,kiefer,ketchum,howerton,groce,gass,fusco,corbitt,betz,bartels,amaral,aiello,weddle,sperry,seiler,runyan,raley,overby,osteen,olds,mckeown,matney,lauer,lattimore,hindman,hartwell,fredrickson,fredericks,espino,clegg,carswell,cambell,burkholder,woodbury,welker,totten,thornburg,theriault,stitt,stamm,stackhouse,scholl,saxon,rife,razo,quinlan,pinkerton,olivo,nesmith,nall,mattos,lafferty,justus,giron,geer,fielder,drayton,dortch,conners,conger,boatwright,billiot,barden,armenta,tibbetts,steadman,slattery,rinaldi,raynor,pinckney,pettigrew,milne,matteson,halsey,gonsalves,fellows,durand,desimone,cowley,cowles,brill,barham,barela,barba,ashmore,withrow,valenti,tejeda,spriggs,sayre,salerno,peltier,peel,merriman,matheson,lowman,lindstrom,hyland,giroux,earls,dugas,dabney,collado,briseno,baxley,whyte,wenger,vanover,vanburen,thiel,schindler,schiller,rigby,pomeroy,passmore,marble,manzo,mahaffey,lindgren,laflamme,greathouse,fite,calabrese,bayne,yamamoto,wick,townes,thames,reinhart,peeler,naranjo,montez,mcdade,mast,markley,marchand,leeper,kellum,hudgens,hennessey,hadden,gainey,coppola,borrego,bolling,beane,ault,slaton,pape,null,mulkey,lightner,langer,hillard,ethridge,enright,derosa,baskin,weinberg,turman,somerville,pardo,noll,lashley,ingraham,hiller,hendon,glaze,cothran,cooksey,conte,carrico,abner,wooley,swope,summerlin,sturgis,sturdivant,stott,spurgeon,spillman,speight,roussel,popp,nutter,mckeon,mazza,magnuson,lanning,kozak,jankowski,heyward,forster,corwin,callaghan,bays,wortham,usher,theriot,sayers,sabo,poling,loya,lieberman,laroche,labelle,howes,harr,garay,fogarty,everson,durkin,dominquez,chaves,chambliss,witcher,vieira,vandiver,terrill,stoker,schreiner,moorman,liddell,lawhorn,krug,irons,hylton,hollenbeck,herrin,hembree,goolsby,goodin,gilmer,foltz,dinkins,daughtry,caban,brim,briley,bilodeau,wyant,vergara,tallent,swearingen,stroup,scribner,quillen,pitman,mccants,maxfield,martinson,holtz,flournoy,brookins,brody,baumgardner,straub,sills,roybal,roundtree,oswalt,mcgriff,mcdougall,mccleary,maggard,gragg,gooding,godinez,doolittle,donato,cowell,cassell,bracken,appel,zambrano,reuter,perea,nakamura,monaghan,mickens,mcclinton,mcclary,marler,kish,judkins,gilbreath,freese,flanigan,felts,erdmann,dodds,chew,brownell,boatright,barreto,slayton,sandberg,saldivar,pettway,odum,narvaez,moultrie,montemayor,merrell,lees,keyser,hoke,hardaway,hannan,gilbertson,fogg,dumont,deberry,coggins,buxton,bucher,broadnax,beeson,araujo,appleton,amundson,aguayo,ackley,yocum,worsham,shivers,sanches,sacco,robey,rhoden,pender,ochs,mccurry,madera,luong,knotts,jackman,heinrich,hargrave,gault,comeaux,chitwood,caraway,boettcher,bernhardt,barrientos,zink,wickham,whiteman,thorp,stillman,settles,schoonover,roque,riddell,pilcher,phifer,novotny,macleod,hardee,haase,grider,doucette,clausen,bevins,beamon,badillo,tolley,tindall,soule,snook,seale,pinkney,pellegrino,nowell,nemeth,mondragon,mclane,lundgren,ingalls,hudspeth,hixson,gearhart,furlong,downes,dibble,deyoung,cornejo,camara,brookshire,boyette,wolcott,surratt,sellars,segal,salyer,reeve,rausch,labonte,haro,gower,freeland,fawcett,eads,driggers,donley,collett,bromley,boatman,ballinger,baldridge,volz,trombley,stonge,shanahan,rivard,rhyne,pedroza,matias,jamieson,hedgepeth,hartnett,estevez,eskridge,denman,chiu,chinn,catlett,carmack,buie,bechtel,beardsley,bard,ballou,ulmer,skeen,robledo,rincon,reitz,piazza,munger,moten,mcmichael,loftus,ledet,kersey,groff,fowlkes,crumpton,clouse,bettis,villagomez,timmerman,strom,santoro,roddy,penrod,musselman,macpherson,leboeuf,harless,haddad,guido,golding,fulkerson,fannin,dulaney,dowdell,cottle,ceja,cate,bosley,benge,albritton,voigt,trowbridge,soileau,seely,rohde,pearsall,paulk,orth,nason,mota,mcmullin,marquardt,madigan,hoag,gillum,gabbard,fenwick,danforth,cushing,cress,creed,cazares,bettencourt,barringer,baber,stansberry,schramm,rutter,rivero,oquendo,necaise,mouton,montenegro,miley,mcgough,marra,macmillan,lamontagne,jasso,horst,hetrick,heilman,gaytan,gall,fortney,dingle,desjardins,dabbs,burbank,brigham,breland,beaman,arriola,yarborough,wallin,toscano,stowers,reiss,pichardo,orton,michels,mcnamee,mccrory,leatherman,kell,keister,horning,hargett,guay,ferro,deboer,dagostino,carper,blanks,beaudry,towle,tafoya,stricklin,strader,soper,sonnier,sigmon,schenk,saddler,pedigo,mendes,lunn,lohr,lahr,kingsbury,jarman,hume,holliman,hofmann,haworth,harrelson,hambrick,flick,edmunds,dacosta,crossman,colston,chaplin,carrell,budd,weiler,waits,valentino,trantham,tarr,solorio,roebuck,powe,plank,pettus,pagano,mink,luker,leathers,joslin,hartzell,gambrell,cepeda,carty,caputo,brewington,bedell,ballew,applewhite,warnock,walz,urena,tudor,reel,pigg,parton,mickelson,meagher,mclellan,mcculley,mandel,leech,lavallee,kraemer,kling,kipp,kehoe,hochstetler,harriman,gregoire,grabowski,gosselin,gammon,fancher,edens,desai,brannan,armendariz,woolsey,whitehouse,whetstone,ussery,towne,testa,tallman,studer,strait,steinmetz,sorrells,sauceda,rolfe,paddock,mitchem,mcginn,mccrea,lovato,hazen,gilpin,gaynor,fike,devoe,delrio,curiel,burkhardt,bode,backus,zinn,watanabe,wachter,vanpelt,turnage,shaner,schroder,sato,riordan,quimby,portis,natale,mckoy,mccown,kilmer,hotchkiss,hesse,halbert,gwinn,godsey,delisle,chrisman,canter,arbogast,angell,acree,yancy,woolley,wesson,weatherspoon,trainor,stockman,spiller,sipe,rooks,reavis,propst,porras,neilson,mullens,loucks,llewellyn,kumar,koester,klingensmith,kirsch,kester,honaker,hodson,hennessy,helmick,garrity,garibay,drain,casarez,callis,botello,aycock,avant,wingard,wayman,tully,theisen,szymanski,stansbury,segovia,rainwater,preece,pirtle,padron,mincey,mckelvey,mathes,larrabee,kornegay,klug,ingersoll,hecht,germain,eggers,dykstra,deering,decoteau,deason,dearing,cofield,carrigan,bonham,bahr,aucoin,appleby,almonte,yager,womble,wimmer,weimer,vanderpool,stancil,sprinkle,romine,remington,pfaff,peckham,olivera,meraz,maze,lathrop,koehn,hazelton,halvorson,hallock,haddock,ducharme,dehaven,caruthers,brehm,bosworth,bost,bias,beeman,basile,bane,aikens,wold,walther,tabb,suber,strawn,stocker,shirey,schlosser,riedel,rembert,reimer,pyles,peele,merriweather,letourneau,latta,kidder,hixon,hillis,hight,herbst,henriquez,haygood,hamill,gabel,fritts,eubank,dawes,correll,bushey,buchholz,brotherton,botts,barnwell,auger,atchley,westphal,veilleux,ulloa,stutzman,shriver,ryals,pilkington,moyers,marrs,mangrum,maddux,lockard,laing,kuhl,harney,hammock,hamlett,felker,doerr,depriest,carrasquillo,carothers,bogle,bischoff,bergen,albanese,wyckoff,vermillion,vansickle,thibault,tetreault,stickney,shoemake,ruggiero,rawson,racine,philpot,paschal,mcelhaney,mathison,legrand,lapierre,kwan,kremer,jiles,hilbert,geyer,faircloth,ehlers,egbert,desrosiers,dalrymple,cotten,cashman,cadena,boardman,alcaraz,wyrick,therrien,tankersley,strickler,puryear,plourde,pattison,pardue,mcginty,mcevoy,landreth,kuhns,koon,hewett,giddens,emerick,eades,deangelis,cosme,ceballos,birdsong,benham,bemis,armour,anguiano,welborn,tsosie,storms,shoup,sessoms,samaniego,rood,rojo,rhinehart,raby,northcutt,myer,munguia,morehouse,mcdevitt,mallett,lozada,lemoine,kuehn,hallett,grim,gillard,gaylor,garman,gallaher,feaster,faris,darrow,dardar,coney,carreon,braithwaite,boylan,boyett,bixler,bigham,benford,barragan,barnum,zuber,wyche,westcott,vining,stoltzfus,simonds,shupe,sabin,ruble,rittenhouse,richman,perrone,mulholland,millan,lomeli,kite,jemison,hulett,holler,hickerson,herold,hazelwood,griffen,gause,forde,eisenberg,dilworth,charron,chaisson,bristow,breunig,brace,boutwell,bentz,belk,bayless,batchelder,baran,baeza,zimmermann,weathersby,volk,toole,theis,tedesco,searle,schenck,satterwhite,ruelas,rankins,partida,nesbit,morel,menchaca,levasseur,kaylor,johnstone,hulse,hollar,hersey,harrigan,harbison,guyer,gish,giese,gerlach,geller,geisler,falcone,elwell,doucet,deese,darr,corder,chafin,byler,bussell,burdett,brasher,bowe,bellinger,bastian,barner,alleyne,wilborn,weil,wegner,tatro,spitzer,smithers,schoen,resendez,parisi,overman,obrian,mudd,mahler,maggio,lindner,lalonde,lacasse,laboy,killion,kahl,jessen,jamerson,houk,henshaw,gustin,graber,durst,duenas,davey,cundiff,conlon,colunga,coakley,chiles,capers,buell,bricker,bissonnette,bartz,bagby,zayas,volpe,treece,toombs,thom,terrazas,swinney,skiles,silveira,shouse,senn,ramage,moua,langham,kyles,holston,hoagland,herd,feller,denison,carraway,burford,bickel,ambriz,abercrombie,yamada,weidner,waddle,verduzco,thurmond,swindle,schrock,sanabria,rosenberger,probst,peabody,olinger,nazario,mccafferty,mcbroom,mcabee,mazur,matherne,mapes,leverett,killingsworth,heisler,griego,gosnell,frankel,franke,ferrante,fenn,ehrlich,christopherso,chasse,caton,brunelle,bloomfield,babbitt,azevedo,abramson,ables,abeyta,youmans,wozniak,wainwright,stowell,smitherman,samuelson,runge,rothman,rosenfeld,peake,owings,olmos,munro,moreira,leatherwood,larkins,krantz,kovacs,kizer,kindred,karnes,jaffe,hubbell,hosey,hauck,goodell,erdman,dvorak,doane,cureton,cofer,buehler,bierman,berndt,banta,abdullah,warwick,waltz,turcotte,torrey,stith,seger,sachs,quesada,pinder,peppers,pascual,paschall,parkhurst,ozuna,oster,nicholls,lheureux,lavalley,kimura,jablonski,haun,gourley,gilligan,croy,cotto,cargill,burwell,burgett,buckman,booher,adorno,wrenn,whittemore,urias,szabo,sayles,saiz,rutland,rael,pharr,pelkey,ogrady,nickell,musick,moats,mather,massa,kirschner,kieffer,kellar,hendershot,gott,godoy,gadson,furtado,fiedler,erskine,dutcher,dever,daggett,chevalier,brake,ballesteros,amerson,wingo,waldon,trott,silvey,showers,schlegel,ritz,pepin,pelayo,parsley,palermo,moorehead,mchale,lett,kocher,kilburn,iglesias,humble,hulbert,huckaby,hartford,hardiman,gurney,grigg,grasso,goings,fillmore,farber,depew,dandrea,cowen,covarrubias,burrus,bracy,ardoin,thompkins,standley,radcliffe,pohl,persaud,parenteau,pabon,newson,newhouse,napolitano,mulcahy,malave,keim,hooten,hernandes,heffernan,hearne,greenleaf,glick,fuhrman,fetter,faria,dishman,dickenson,crites,criss,clapper,chenault,castor,casto,bugg,bove,bonney,anderton,allgood,alderson,woodman,warrick,toomey,tooley,tarrant,summerville,stebbins,sokol,searles,schutz,schumann,scheer,remillard,raper,proulx,palmore,monroy,messier,melo,melanson,mashburn,manzano,lussier,jenks,huneycutt,hartwig,grimsley,fulk,fielding,fidler,engstrom,eldred,dantzler,crandell,calder,brumley,breton,brann,bramlett,boykins,bianco,bancroft,almaraz,alcantar,whitmer,whitener,welton,vineyard,rahn,paquin,mizell,mcmillin,mckean,marston,maciel,lundquist,liggins,lampkin,kranz,koski,kirkham,jiminez,hazzard,harrod,graziano,grammer,gendron,garrido,fordham,englert,dryden,demoss,deluna,crabb,comeau,brummett,blume,benally,wessel,vanbuskirk,thorson,stumpf,stockwell,reams,radtke,rackley,pelton,niemi,newland,nelsen,morrissette,miramontes,mcginley,mccluskey,marchant,luevano,lampe,lail,jeffcoat,infante,hinman,gaona,eady,desmarais,decosta,dansby,cisco,choe,breckenridge,bostwick,borg,bianchi,alberts,wilkie,whorton,vargo,tait,soucy,schuman,ousley,mumford,lippert,leath,lavergne,laliberte,kirksey,kenner,johnsen,izzo,hiles,gullett,greenwell,gaspar,galbreath,gaitan,ericson,delapaz,croom,cottingham,clift,bushnell,bice,beason,arrowood,waring,voorhees,truax,shreve,shockey,schatz,sandifer,rubino,rozier,roseberry,pieper,peden,nester,nave,murphey,malinowski,macgregor,lafrance,kunkle,kirkman,hipp,hasty,haddix,gervais,gerdes,gamache,fouts,fitzwater,dillingham,deming,deanda,cedeno,cannady,burson,bouldin,arceneaux,woodhouse,whitford,wescott,welty,weigel,torgerson,toms,surber,sunderland,sterner,setzer,riojas,pumphrey,puga,metts,mcgarry,mccandless,magill,lupo,loveland,llamas,leclerc,koons,kahler,huss,holbert,heintz,haupt,grimmett,gaskill,ellingson,dorr,dingess,deweese,desilva,crossley,cordeiro,converse,conde,caldera,cairns,burmeister,burkhalter,brawner,bott,youngs,vierra,valladares,shrum,shropshire,sevilla,rusk,rodarte,pedraza,nino,merino,mcminn,markle,mapp,lajoie,koerner,kittrell,kato,hyder,hollifield,heiser,hazlett,greenwald,fant,eldredge,dreher,delafuente,cravens,claypool,beecher,aronson,alanis,worthen,wojcik,winger,whitacre,valverde,valdivia,troupe,thrower,swindell,suttles,stroman,spires,slate,shealy,sarver,sartin,sadowski,rondeau,rolon,rascon,priddy,paulino,nolte,munroe,molloy,mciver,lykins,loggins,lenoir,klotz,kempf,hupp,hollowell,hollander,haynie,harkness,harker,gottlieb,frith,eddins,driskell,doggett,densmore,charette,cassady,byrum,burcham,buggs,benn,whitted,warrington,vandusen,vaillancourt,steger,siebert,scofield,quirk,purser,plumb,orcutt,nordstrom,mosely,michalski,mcphail,mcdavid,mccraw,marchese,mannino,lefevre,largent,lanza,kress,isham,hunsaker,hoch,hildebrandt,guarino,grijalva,graybill,fick,ewell,ewald,cusick,crumley,coston,cathcart,carruthers,bullington,bowes,blain,blackford,barboza,yingling,wert,weiland,varga,silverstein,sievers,shuster,shumway,runnels,rumsey,renfroe,provencher,polley,mohler,middlebrooks,kutz,koster,groth,glidden,fazio,deen,chipman,chenoweth,champlin,cedillo,carrero,carmody,buckles,brien,boutin,bosch,berkowitz,altamirano,wilfong,wiegand,waites,truesdale,toussaint,tobey,tedder,steelman,sirois,schnell,robichaud,richburg,plumley,pizarro,piercy,ortego,oberg,neace,mertz,mcnew,matta,lapp,lair,kibler,howlett,hollister,hofer,hatten,hagler,falgoust,engelhardt,eberle,dombrowski,dinsmore,daye,casares,braud,balch,autrey,wendel,tyndall,strobel,stoltz,spinelli,serrato,reber,rathbone,palomino,nickels,mayle,mathers,mach,loeffler,littrell,levinson,leong,lemire,lejeune,lazo,lasley,koller,kennard,hoelscher,hintz,hagerman,greaves,fore,eudy,engler,corrales,cordes,brunet,bidwell,bennet,tyrrell,tharpe,swinton,stribling,southworth,sisneros,savoie,samons,ruvalcaba,ries,ramer,omara,mosqueda,millar,mcpeak,macomber,luckey,litton,lehr,lavin,hubbs,hoard,hibbs,hagans,futrell,exum,evenson,culler,carbaugh,callen,brashear,bloomer,blakeney,bigler,addington,woodford,unruh,tolentino,sumrall,stgermain,smock,sherer,rayner,pooler,oquinn,nero,mcglothlin,linden,kowal,kerrigan,ibrahim,harvell,hanrahan,goodall,geist,fussell,fung,ferebee,eley,eggert,dorsett,dingman,destefano,colucci,clemmer,burnell,brumbaugh,boddie,berryhill,avelar,alcantara,winder,winchell,vandenberg,trotman,thurber,thibeault,stlouis,stilwell,sperling,shattuck,sarmiento,ruppert,rumph,renaud,randazzo,rademacher,quiles,pearman,palomo,mercurio,lowrey,lindeman,lawlor,larosa,lander,labrecque,hovis,holifield,henninger,hawkes,hartfield,hann,hague,genovese,garrick,fudge,frink,eddings,dinh,cribbs,calvillo,bunton,brodeur,bolding,blanding,agosto,zahn,wiener,trussell,tello,teixeira,speck,sharma,shanklin,sealy,scanlan,santamaria,roundy,robichaux,ringer,rigney,prevost,polson,nord,moxley,medford,mccaslin,mcardle,macarthur,lewin,lasher,ketcham,keiser,heine,hackworth,grose,grizzle,gillman,gartner,frazee,fleury,edson,edmonson,derry,cronk,conant,burress,burgin,broom,brockington,bolick,boger,birchfield,billington,baily,bahena,armbruster,anson,yoho,wilcher,tinney,timberlake,thielen,sutphin,stultz,sikora,serra,schulman,scheffler,santillan,rego,preciado,pinkham,mickle,lomas,lizotte,lent,kellerman,keil,johanson,hernadez,hartsfield,haber,gorski,farkas,eberhardt,duquette,delano,cropper,cozart,cockerham,chamblee,cartagena,cahoon,buzzell,brister,brewton,blackshear,benfield,aston,ashburn,arruda,wetmore,weise,vaccaro,tucci,sudduth,stromberg,stoops,showalter,shears,runion,rowden,rosenblum,riffle,renfrow,peres,obryant,leftwich,lark,landeros,kistler,killough,kerley,kastner,hoggard,hartung,guertin,govan,gatling,gailey,fullmer,fulford,flatt,esquibel,endicott,edmiston,edelstein,dufresne,dressler,dickman,chee,busse,bonnett,berard,yoshida,velarde,veach,vanhouten,vachon,tolson,tolman,tennyson,stites,soler,shutt,ruggles,rhone,pegues,neese,muro,moncrief,mefford,mcphee,mcmorris,mceachern,mcclurg,mansour,mader,leija,lecompte,lafountain,labrie,jaquez,heald,hash,hartle,gainer,frisby,farina,eidson,edgerton,dyke,durrett,duhon,cuomo,cobos,cervantez,bybee,brockway,borowski,binion,beery,arguello,amaro,acton,yuen,winton,wigfall,weekley,vidrine,vannoy,tardiff,shoop,shilling,schick,safford,prendergast,pilgrim,pellerin,osuna,nissen,nalley,moller,messner,messick,merrifield,mcguinness,matherly,marcano,mahone,lemos,lebrun,jara,hoffer,herren,hecker,haws,haug,gwin,gober,gilliard,fredette,favela,echeverria,downer,donofrio,desrochers,crozier,corson,bechtold,argueta,aparicio,zamudio,westover,westerman,utter,troyer,thies,tapley,slavin,shirk,sandler,roop,rimmer,raymer,radcliff,otten,moorer,millet,mckibben,mccutchen,mcavoy,mcadoo,mayorga,mastin,martineau,marek,madore,leflore,kroeger,kennon,jimerson,hostetter,hornback,hendley,hance,guardado,granado,gowen,goodale,flinn,fleetwood,fitz,durkee,duprey,dipietro,dilley,clyburn,brawley,beckley,arana,weatherby,vollmer,vestal,tunnell,trigg,tingle,takahashi,sweatt,storer,snapp,shiver,rooker,rathbun,poisson,perrine,perri,parmer,parke,pare,papa,palmieri,midkiff,mecham,mccomas,mcalpine,lovelady,lillard,lally,knopp,kile,kiger,haile,gupta,goldsberry,gilreath,fulks,friesen,franzen,flack,findlay,ferland,dreyer,dore,dennard,deckard,debose,crim,coulombe,chancey,cantor,branton,bissell,barns,woolard,witham,wasserman,spiegel,shoffner,scholz,ruch,rossman,petry,palacio,paez,neary,mortenson,millsap,miele,menke,mckim,mcanally,martines,lemley,larochelle,klaus,klatt,kaufmann,kapp,helmer,hedge,halloran,glisson,frechette,fontana,eagan,distefano,danley,creekmore,chartier,chaffee,carillo,burg,bolinger,berkley,benz,basso,bash,zelaya,woodring,witkowski,wilmot,wilkens,wieland,verdugo,urquhart,tsai,timms,swiger,swaim,sussman,pires,molnar,mcatee,lowder,loos,linker,landes,kingery,hufford,higa,hendren,hammack,hamann,gillam,gerhardt,edelman,delk,deans,curl,constantine,cleaver,claar,casiano,carruth,carlyle,brophy,bolanos,bibbs,bessette,beggs,baugher,bartel,averill,andresen,amin,adames,valente,turnbow,swink,sublett,stroh,stringfellow,ridgway,pugliese,poteat,ohare,neubauer,murchison,mingo,lemmons,kwon,kellam,kean,jarmon,hyden,hudak,hollinger,henkel,hemingway,hasson,hansel,halter,haire,ginsberg,gillispie,fogel,flory,etter,elledge,eckman,deas,currin,crafton,coomer,colter,claxton,bulter,braddock,bowyer,binns,bellows,baskerville,barros,ansley,woolf,wight,waldman,wadley,tull,trull,tesch,stouffer,stadler,slay,shubert,sedillo,santacruz,reinke,poynter,neri,neale,mowry,moralez,monger,mitchum,merryman,manion,macdougall,litchfield,levitt,lepage,lasalle,khoury,kavanagh,karns,ivie,huebner,hodgkins,halpin,garica,eversole,dutra,dunagan,duffey,dillman,dillion,deville,dearborn,damato,courson,coulson,burdine,bousquet,bonin,bish,atencio,westbrooks,wages,vaca,toner,tillis,swett,struble,stanfill,solorzano,slusher,sipple,silvas,shults,schexnayder,saez,rodas,rager,pulver,penton,paniagua,meneses,mcfarlin,mcauley,matz,maloy,magruder,lohman,landa,lacombe,jaimes,holzer,holst,heil,hackler,grundy,gilkey,farnham,durfee,dunton,dunston,duda,dews,craver,corriveau,conwell,colella,chambless,bremer,boutte,bourassa,blaisdell,backman,babineaux,audette,alleman,towner,taveras,tarango,sullins,suiter,stallard,solberg,schlueter,poulos,pimental,owsley,okelley,moffatt,metcalfe,meekins,medellin,mcglynn,mccowan,marriott,marable,lennox,lamoureux,koss,kerby,karp,isenberg,howze,hockenberry,highsmith,hallmark,gusman,greeley,giddings,gaudet,gallup,fleenor,eicher,edington,dimaggio,dement,demello,decastro,bushman,brundage,brooker,bourg,blackstock,bergmann,beaton,banister,argo,appling,wortman,watterson,villalpando,tillotson,tighe,sundberg,sternberg,stamey,shipe,seeger,scarberry,sattler,sain,rothstein,poteet,plowman,pettiford,penland,partain,pankey,oyler,ogletree,ogburn,moton,merkel,lucier,lakey,kratz,kinser,kershaw,josephson,imhoff,hendry,hammon,frisbie,frawley,fraga,forester,eskew,emmert,drennan,doyon,dandridge,cawley,carvajal,bracey,belisle,batey,ahner,wysocki,weiser,veliz,tincher,sansone,sankey,sandstrom,rohrer,risner,pridemore,pfeffer,persinger,peery,oubre,nowicki,musgrave,murdoch,mullinax,mccary,mathieu,livengood,kyser,klink,kimes,kellner,kavanaugh,kasten,imes,hoey,hinshaw,hake,gurule,grube,grillo,geter,gatto,garver,garretson,farwell,eiland,dunford,decarlo,corso,colman,collard,cleghorn,chasteen,cavender,carlile,calvo,byerly,brogdon,broadwater,breault,bono,bergin,behr,ballenger,amick,tamez,stiffler,steinke,simmon,shankle,schaller,salmons,sackett,saad,rideout,ratcliffe,ranson,plascencia,petterson,olszewski,olney,olguin,nilsson,nevels,morelli,montiel,monge,michaelson,mertens,mcchesney,mcalpin,mathewson,loudermilk,lineberry,liggett,kinlaw,kight,jost,hereford,hardeman,halpern,halliday,hafer,gaul,friel,freitag,forsberg,evangelista,doering,dicarlo,dendy,delp,deguzman,dameron,curtiss,cosper,cauthen,bradberry,bouton,bonnell,bixby,bieber,beveridge,bedwell,barhorst,bannon,baltazar,baier,ayotte,attaway,arenas,abrego,turgeon,tunstall,thaxton,tenorio,stotts,sthilaire,shedd,seabolt,scalf,salyers,ruhl,rowlett,robinett,pfister,perlman,pepe,parkman,nunnally,norvell,napper,modlin,mckellar,mcclean,mascarenas,leibowitz,ledezma,kuhlman,kobayashi,hunley,holmquist,hinkley,hazard,hartsell,gribble,gravely,fifield,eliason,doak,crossland,carleton,bridgeman,bojorquez,boggess,auten,woosley,whiteley,wexler,twomey,tullis,townley,standridge,santoyo,rueda,riendeau,revell,pless,ottinger,nigro,nickles,mulvey,menefee,mcshane,mcloughlin,mckinzie,markey,lockridge,lipsey,knisley,knepper,kitts,kiel,jinks,hathcock,godin,gallego,fikes,fecteau,estabrook,ellinger,dunlop,dudek,countryman,chauvin,chatham,bullins,brownfield,boughton,bloodworth,bibb,baucom,barbieri,aubin,armitage,alessi,absher,abbate,zito,woolery,wiggs,wacker,tynes,tolle,telles,tarter,swarey,strode,stockdale,stalnaker,spina,schiff,saari,risley,rameriz,rakes,pettaway,penner,paulus,palladino,omeara,montelongo,melnick,mehta,mcgary,mccourt,mccollough,marchetti,manzanares,lowther,leiva,lauderdale,lafontaine,kowalczyk,knighton,joubert,jaworski,huth,hurdle,housley,hackman,gulick,gordy,gilstrap,gehrke,gebhart,gaudette,foxworth,endres,dunkle,cimino,caddell,brauer,braley,bodine,blackmore,belden,backer,ayer,andress,wisner,vuong,valliere,twigg,tavarez,strahan,steib,staub,sowder,seiber,schutt,scharf,schade,rodriques,risinger,renshaw,rahman,presnell,piatt,nieman,nevins,mcilwain,mcgaha,mccully,mccomb,massengale,macedo,lesher,kearse,jauregui,husted,hudnall,holmberg,hertel,hardie,glidewell,frausto,fassett,dalessandro,dahlgren,corum,constantino,conlin,colquitt,colombo,claycomb,cardin,buller,boney,bocanegra,biggers,benedetto,araiza,andino,albin,zorn,werth,weisman,walley,vanegas,ulibarri,towe,tedford,teasley,suttle,steffens,stcyr,squire,singley,sifuentes,shuck,schram,sass,rieger,ridenhour,rickert,richerson,rayborn,rabe,raab,pendley,pastore,ordway,moynihan,mellott,mckissick,mcgann,mccready,mauney,marrufo,lenhart,lazar,lafave,keele,kautz,jardine,jahnke,jacobo,hord,hardcastle,hageman,giglio,gehring,fortson,duque,duplessis,dicken,derosier,deitz,dalessio,cram,castleman,candelario,callison,caceres,bozarth,biles,bejarano,bashaw,avina,armentrout,alverez,acord,waterhouse,vereen,vanlandingham,strawser,shotwell,severance,seltzer,schoonmaker,schock,schaub,schaffner,roeder,rodrigez,riffe,rasberry,rancourt,railey,quade,pursley,prouty,perdomo,oxley,osterman,nickens,murphree,mounts,merida,maus,mattern,masse,martinelli,mangan,lutes,ludwick,loney,laureano,lasater,knighten,kissinger,kimsey,kessinger,honea,hollingshead,hockett,heyer,heron,gurrola,gove,glasscock,gillett,galan,featherstone,eckhardt,duron,dunson,dasher,culbreth,cowden,cowans,claypoole,churchwell,chabot,caviness,cater,caston,callan,byington,burkey,boden,beckford,atwater,archambault,alvey,alsup,whisenant,weese,voyles,verret,tsang,tessier,sweitzer,sherwin,shaughnessy,revis,remy,prine,philpott,peavy,paynter,parmenter,ovalle,offutt,nightingale,newlin,nakano,myatt,muth,mohan,mcmillon,mccarley,mccaleb,maxson,marinelli,maley,liston,letendre,kain,huntsman,hirst,hagerty,gulledge,greenway,grajeda,gorton,goines,gittens,frederickson,fanelli,embree,eichelberger,dunkin,dixson,dillow,defelice,chumley,burleigh,borkowski,binette,biggerstaff,berglund,beller,audet,arbuckle,allain,alfano,youngman,wittman,weintraub,vanzant,vaden,twitty,stollings,standifer,sines,shope,scalise,saville,posada,pisano,otte,nolasco,mier,merkle,mendiola,melcher,mejias,mcmurry,mccalla,markowitz,manis,mallette,macfarlane,lough,looper,landin,kittle,kinsella,kinnard,hobart,helman,hellman,hartsock,halford,hage,gordan,glasser,gayton,gattis,gastelum,gaspard,frisch,fitzhugh,eckstein,eberly,dowden,despain,crumpler,crotty,cornelison,chouinard,chamness,catlin,cann,bumgardner,budde,branum,bradfield,braddy,borst,birdwell,bazan,banas,bade,arango,ahearn,addis,zumwalt,wurth,wilk,widener,wagstaff,urrutia,terwilliger,tart,steinman,staats,sloat,rives,riggle,revels,reichard,prickett,poff,pitzer,petro,pell,northrup,nicks,moline,mielke,maynor,mallon,magness,lingle,lindell,lieb,lesko,lebeau,lammers,lafond,kiernan,ketron,jurado,holmgren,hilburn,hayashi,hashimoto,harbaugh,guillot,gard,froehlich,feinberg,falco,dufour,drees,doney,diep,delao,daves,dail,crowson,coss,congdon,carner,camarena,butterworth,burlingame,bouffard,bloch,bilyeu,barta,bakke,baillargeon,avent,aquilar,zeringue,yarber,wolfson,vogler,voelker,truss,troxell,thrift,strouse,spielman,sistrunk,sevigny,schuller,schaaf,ruffner,routh,roseman,ricciardi,peraza,pegram,overturf,olander,odaniel,millner,melchor,maroney,machuca,macaluso,livesay,layfield,laskowski,kwiatkowski,kilby,hovey,heywood,hayman,havard,harville,haigh,hagood,grieco,glassman,gebhardt,fleischer,fann,elson,eccles,cunha,crumb,blakley,bardwell,abshire,woodham,wines,welter,wargo,varnado,tutt,traynor,swaney,stricker,stoffel,stambaugh,sickler,shackleford,selman,seaver,sansom,sanmiguel,royston,rourke,rockett,rioux,puleo,pitchford,nardi,mulvaney,middaugh,malek,leos,lathan,kujawa,kimbro,killebrew,houlihan,hinckley,herod,hepler,hamner,hammel,hallowell,gonsalez,gingerich,gambill,funkhouser,fricke,fewell,falkner,endsley,dulin,drennen,deaver,dambrosio,chadwell,castanon,burkes,brune,brisco,brinker,bowker,boldt,berner,beaumont,beaird,bazemore,barrick,albano,younts,wunderlich,weidman,vanness,toland,theobald,stickler,steiger,stanger,spies,spector,sollars,smedley,seibel,scoville,saito,rummel,rowles,rouleau,roos,rogan,roemer,ream,raya,purkey,priester,perreira,penick,paulin,parkins,overcash,oleson,neves,muldrow,minard,midgett,michalak,melgar,mcentire,mcauliffe,marte,lydon,lindholm,leyba,langevin,lagasse,lafayette,kesler,kelton,kaminsky,jaggers,humbert,huck,howarth,hinrichs,higley,gupton,guimond,gravois,giguere,fretwell,fontes,feeley,faucher,eichhorn,ecker,earp,dole,dinger,derryberry,demars,deel,copenhaver,collinsworth,colangelo,cloyd,claiborne,caulfield,carlsen,calzada,caffey,broadus,brenneman,bouie,bodnar,blaney,blanc,beltz,behling,barahona,yockey,winkle,windom,wimer,villatoro,trexler,teran,taliaferro,sydnor,swinson,snelling,smtih,simonton,simoneaux,simoneau,sherrer,seavey,scheel,rushton,rupe,ruano,rippy,reiner,reiff,rabinowitz,quach,penley,odle,nock,minnich,mckown,mccarver,mcandrew,longley,laux,lamothe,lafreniere,kropp,krick,kates,jepson,huie,howse,howie,henriques,haydon,haught,hatter,hartzog,harkey,grimaldo,goshorn,gormley,gluck,gilroy,gillenwater,giffin,fluker,feder,eyre,eshelman,eakins,detwiler,delrosario,davisson,catalan,canning,calton,brammer,botelho,blakney,bartell,averett,askins,aker,witmer,winkelman,widmer,whittier,weitzel,wardell,wagers,ullman,tupper,tingley,tilghman,talton,simard,seda,scheller,sala,rundell,rost,ribeiro,rabideau,primm,pinon,peart,ostrom,ober,nystrom,nussbaum,naughton,murr,moorhead,monti,monteiro,melson,meissner,mclin,mcgruder,marotta,makowski,majewski,madewell,lunt,lukens,leininger,lebel,lakin,kepler,jaques,hunnicutt,hungerford,hoopes,hertz,heins,halliburton,grosso,gravitt,glasper,gallman,gallaway,funke,fulbright,falgout,eakin,dostie,dorado,dewberry,derose,cutshall,crampton,costanzo,colletti,cloninger,claytor,chiang,campagna,burd,brokaw,broaddus,bretz,brainard,binford,bilbrey,alpert,aitken,ahlers,zajac,woolfolk,witten,windle,wayland,tramel,tittle,talavera,suter,straley,specht,sommerville,soloman,skeens,sigman,sibert,shavers,schuck,schmit,sartain,sabol,rosenblatt,rollo,rashid,rabb,polston,nyberg,northrop,navarra,muldoon,mikesell,mcdougald,mcburney,mariscal,lozier,lingerfelt,legere,latour,lagunas,lacour,kurth,killen,kiely,kayser,kahle,isley,huertas,hower,hinz,haugh,gumm,galicia,fortunato,flake,dunleavy,duggins,doby,digiovanni,devaney,deltoro,cribb,corpuz,coronel,coen,charbonneau,caine,burchette,blakey,blakemore,bergquist,beene,beaudette,bayles,ballance,bakker,bailes,asberry,arwood,zucker,willman,whitesell,wald,walcott,vancleave,trump,strasser,simas,shick,schleicher,schaal,saleh,rotz,resnick,rainer,partee,ollis,oller,oday,noles,munday,mong,millican,merwin,mazzola,mansell,magallanes,llanes,lewellen,lepore,kisner,keesee,jeanlouis,ingham,hornbeck,hawn,hartz,harber,haffner,gutshall,guth,grays,gowan,finlay,finkelstein,eyler,enloe,dungan,diez,dearman,cull,crosson,chronister,cassity,campion,callihan,butz,breazeale,blumenthal,berkey,batty,batton,arvizu,alderete,aldana,albaugh,abernethy,wolter,wille,tweed,tollefson,thomasson,teter,testerman,sproul,spates,southwick,soukup,skelly,senter,sealey,sawicki,sargeant,rossiter,rosemond,repp,pifer,ormsby,nickelson,naumann,morabito,monzon,millsaps,millen,mcelrath,marcoux,mantooth,madson,macneil,mackinnon,louque,leister,lampley,kushner,krouse,kirwan,jessee,janson,jahn,jacquez,islas,hutt,holladay,hillyer,hepburn,hensel,harrold,gingrich,geis,gales,fults,finnell,ferri,featherston,epley,ebersole,eames,dunigan,drye,dismuke,devaughn,delorenzo,damiano,confer,collum,clower,clow,claussen,clack,caylor,cawthon,casias,carreno,bluhm,bingaman,bewley,belew,beckner,auld,amey,wolfenbarger,wilkey,wicklund,waltman,villalba,valero,valdovinos,ullrich,tyus,twyman,trost,tardif,tanguay,stripling,steinbach,shumpert,sasaki,sappington,sandusky,reinhold,reinert,quijano,placencia,pinkard,phinney,perrotta,pernell,parrett,oxendine,owensby,orman,nuno,mori,mcroberts,mcneese,mckamey,mccullum,markel,mardis,maines,lueck,lubin,lefler,leffler,larios,labarbera,kershner,josey,jeanbaptiste,izaguirre,hermosillo,haviland,hartshorn,hafner,ginter,getty,franck,fiske,dufrene,doody,davie,dangerfield,dahlberg,cuthbertson,crone,coffelt,chidester,chesson,cauley,caudell,cantara,campo,caines,bullis,bucci,brochu,bogard,bickerstaff,benning,arzola,antonelli,adkinson,zellers,wulf,worsley,woolridge,whitton,westerfield,walczak,vassar,truett,trueblood,trawick,townsley,topping,tobar,telford,steverson,stagg,sitton,sill,sergent,schoenfeld,sarabia,rutkowski,rubenstein,rigdon,prentiss,pomerleau,plumlee,philbrick,patnode,oloughlin,obregon,nuss,morell,mikell,mele,mcinerney,mcguigan,mcbrayer,lollar,kuehl,kinzer,kamp,joplin,jacobi,howells,holstein,hedden,hassler,harty,halle,greig,gouge,goodrum,gerhart,geier,geddes,gast,forehand,ferree,fendley,feltner,esqueda,encarnacion,eichler,egger,edmundson,eatmon,doud,donohoe,donelson,dilorenzo,digiacomo,diggins,delozier,dejong,danford,crippen,coppage,cogswell,clardy,cioffi,cabe,brunette,bresnahan,blomquist,blackstone,biller,bevis,bevan,bethune,benbow,baty,basinger,balcom,andes,aman,aguero,adkisson,yandell,wilds,whisenhunt,weigand,weeden,voight,villar,trottier,tillett,suazo,setser,scurry,schuh,schreck,schauer,samora,roane,rinker,reimers,ratchford,popovich,parkin,natal,melville,mcbryde,magdaleno,loehr,lockman,lingo,leduc,larocca,lamere,laclair,krall,korte,koger,jalbert,hughs,higbee,henton,heaney,haith,gump,greeson,goodloe,gholston,gasper,gagliardi,fregoso,farthing,fabrizio,ensor,elswick,elgin,eklund,eaddy,drouin,dorton,dizon,derouen,deherrera,davy,dampier,cullum,culley,cowgill,cardoso,cardinale,brodsky,broadbent,brimmer,briceno,branscum,bolyard,boley,bennington,beadle,baur,ballentine,azure,aultman,arciniega,aguila,aceves,yepez,woodrum,wethington,weissman,veloz,trusty,troup,trammel,tarpley,stivers,steck,sprayberry,spraggins,spitler,spiers,sohn,seagraves,schiffman,rudnick,rizo,riccio,rennie,quackenbush,puma,plott,pearcy,parada,paiz,munford,moskowitz,mease,mcnary,mccusker,lozoya,longmire,loesch,lasky,kuhlmann,krieg,koziol,kowalewski,konrad,kindle,jowers,jolin,jaco,horgan,hine,hileman,hepner,heise,heady,hawkinson,hannigan,haberman,guilford,grimaldi,garton,gagliano,fruge,follett,fiscus,ferretti,ebner,easterday,eanes,dirks,dimarco,depalma,deforest,cruce,craighead,christner,candler,cadwell,burchell,buettner,brinton,brazier,brannen,brame,bova,bomar,blakeslee,belknap,bangs,balzer,athey,armes,alvis,alverson,alvardo,yeung,wheelock,westlund,wessels,volkman,threadgill,thelen,tague,symons,swinford,sturtevant,straka,stier,stagner,segarra,seawright,rutan,roux,ringler,riker,ramsdell,quattlebaum,purifoy,poulson,permenter,peloquin,pasley,pagel,osman,obannon,nygaard,newcomer,munos,motta,meadors,mcquiston,mcniel,mcmann,mccrae,mayne,matte,legault,lechner,kucera,krohn,kratzer,koopman,jeske,horrocks,hock,hibbler,hesson,hersh,harvin,halvorsen,griner,grindle,gladstone,garofalo,frampton,forbis,eddington,diorio,dingus,dewar,desalvo,curcio,creasy,cortese,cordoba,connally,cluff,cascio,capuano,canaday,calabro,bussard,brayton,borja,bigley,arnone,arguelles,acuff,zamarripa,wooton,widner,wideman,threatt,thiele,templin,teeters,synder,swint,swick,sturges,stogner,stedman,spratt,siegfried,shetler,scull,savino,sather,rothwell,rook,rone,rhee,quevedo,privett,pouliot,poche,pickel,petrillo,pellegrini,peaslee,partlow,otey,nunnery,morelock,morello,meunier,messinger,mckie,mccubbin,mccarron,lerch,lavine,laverty,lariviere,lamkin,kugler,krol,kissel,keeter,hubble,hickox,hetzel,hayner,hagy,hadlock,groh,gottschalk,goodsell,gassaway,garrard,galligan,firth,fenderson,feinstein,etienne,engleman,emrick,ellender,drews,doiron,degraw,deegan,dart,crissman,corr,cookson,coil,cleaves,charest,chapple,chaparro,castano,carpio,byer,bufford,bridgewater,bridgers,brandes,borrero,bonanno,aube,ancheta,abarca,abad,wooster,wimbush,willhite,willams,wigley,weisberg,wardlaw,vigue,vanhook,unknow,torre,tasker,tarbox,strachan,slover,shamblin,semple,schuyler,schrimsher,sayer,salzman,rubalcava,riles,reneau,reichel,rayfield,rabon,pyatt,prindle,poss,polito,plemmons,pesce,perrault,pereyra,ostrowski,nilsen,niemeyer,munsey,mundell,moncada,miceli,meader,mcmasters,mckeehan,matsumoto,marron,marden,lizarraga,lingenfelter,lewallen,langan,lamanna,kovac,kinsler,kephart,keown,kass,kammerer,jeffreys,hysell,hosmer,hardnett,hanner,guyette,greening,glazer,ginder,fromm,fluellen,finkle,fessler,essary,eisele,duren,dittmer,crochet,cosentino,cogan,coelho,cavin,carrizales,campuzano,brough,bopp,bookman,bobb,blouin,beesley,battista,bascom,bakken,badgett,arneson,anselmo,albino,ahumada,woodyard,wolters,wireman,willison,warman,waldrup,vowell,vantassel,twombly,toomer,tennison,teets,tedeschi,swanner,stutz,stelly,sheehy,schermerhorn,scala,sandidge,salters,salo,saechao,roseboro,rolle,ressler,renz,renn,redford,raposa,rainbolt,pelfrey,orndorff,oney,nolin,nimmons,nardone,myhre,morman,menjivar,mcglone,mccammon,maxon,marciano,manus,lowrance,lorenzen,lonergan,lollis,littles,lindahl,lamas,lach,kuster,krawczyk,knuth,knecht,kirkendall,keitt,keever,kantor,jarboe,hoye,houchens,holter,holsinger,hickok,helwig,helgeson,hassett,harner,hamman,hames,hadfield,goree,goldfarb,gaughan,gaudreau,gantz,gallion,frady,foti,flesher,ferrin,faught,engram,donegan,desouza,degroot,cutright,crowl,criner,coan,clinkscales,chewning,chavira,catchings,carlock,bulger,buenrostro,bramblett,brack,boulware,bookout,bitner,birt,baranowski,baisden,allmon,acklin,yoakum,wilbourn,whisler,weinberger,washer,vasques,vanzandt,vanatta,troxler,tomes,tindle,tims,throckmorton,thach,stpeter,stlaurent,stenson,spry,spitz,songer,snavely,shroyer,shortridge,shenk,sevier,seabrook,scrivner,saltzman,rosenberry,rockwood,robeson,roan,reiser,ramires,raber,posner,popham,piotrowski,pinard,peterkin,pelham,peiffer,peay,nadler,musso,millett,mestas,mcgowen,marques,marasco,manriquez,manos,mair,lipps,leiker,krumm,knorr,kinslow,kessel,kendricks,kelm,irick,ickes,hurlburt,horta,hoekstra,heuer,helmuth,heatherly,hampson,hagar,haga,greenlaw,grau,godbey,gingras,gillies,gibb,gayden,gauvin,garrow,fontanez,florio,finke,fasano,ezzell,ewers,eveland,eckenrode,duclos,drumm,dimmick,delancey,defazio,dashiell,cusack,crowther,crigger,cray,coolidge,coldiron,cleland,chalfant,cassel,camire,cabrales,broomfield,brittingham,brisson,brickey,braziel,brazell,bragdon,boulanger,boman,bohannan,beem,barre,azar,ashbaugh,armistead,almazan,adamski,zendejas,winburn,willaims,wilhoit,westberry,wentzel,wendling,visser,vanscoy,vankirk,vallee,tweedy,thornberry,sweeny,spradling,spano,smelser,shim,sechrist,schall,scaife,rugg,rothrock,roesler,riehl,ridings,render,ransdell,radke,pinero,petree,pendergast,peluso,pecoraro,pascoe,panek,oshiro,navarrette,murguia,moores,moberg,michaelis,mcwhirter,mcsweeney,mcquade,mccay,mauk,mariani,marceau,mandeville,maeda,lunde,ludlow,loeb,lindo,linderman,leveille,leith,larock,lambrecht,kulp,kinsley,kimberlin,kesterson,hoyos,helfrich,hanke,grisby,goyette,gouveia,glazier,gile,gerena,gelinas,gasaway,funches,fujimoto,flynt,fenske,fellers,fehr,eslinger,escalera,enciso,duley,dittman,dineen,diller,devault,collings,clymer,clowers,chavers,charland,castorena,castello,camargo,bunce,bullen,boyes,borchers,borchardt,birnbaum,birdsall,billman,benites,bankhead,ange,ammerman,adkison,winegar,wickman,warr,warnke,villeneuve,veasey,vassallo,vannatta,vadnais,twilley,towery,tomblin,tippett,theiss,talkington,talamantes,swart,swanger,streit,stines,stabler,spurling,sobel,sine,simmers,shippy,shiflett,shearin,sauter,sanderlin,rusch,runkle,ruckman,rorie,roesch,richert,rehm,randel,ragin,quesenberry,puentes,plyler,plotkin,paugh,oshaughnessy,ohalloran,norsworthy,niemann,nader,moorefield,mooneyham,modica,miyamoto,mickel,mebane,mckinnie,mazurek,mancilla,lukas,lovins,loughlin,lotz,lindsley,liddle,levan,lederman,leclaire,lasseter,lapoint,lamoreaux,lafollette,kubiak,kirtley,keffer,kaczmarek,housman,hiers,hibbert,herrod,hegarty,hathorn,greenhaw,grafton,govea,futch,furst,franko,forcier,foran,flickinger,fairfield,eure,emrich,embrey,edgington,ecklund,eckard,durante,deyo,delvecchio,dade,currey,creswell,cottrill,casavant,cartier,cargile,capel,cammack,calfee,burse,burruss,brust,brousseau,bridwell,braaten,borkholder,bloomquist,bjork,bartelt,amburgey,yeary,whitefield,vinyard,vanvalkenburg,twitchell,timmins,tapper,stringham,starcher,spotts,slaugh,simonsen,sheffer,sequeira,rosati,rhymes,quint,pollak,peirce,patillo,parkerson,paiva,nilson,nevin,narcisse,mitton,merriam,merced,meiners,mckain,mcelveen,mcbeth,marsden,marez,manke,mahurin,mabrey,luper,krull,hunsicker,hornbuckle,holtzclaw,hinnant,heston,hering,hemenway,hegwood,hearns,halterman,guiterrez,grote,granillo,grainger,glasco,gilder,garren,garlock,garey,fryar,fredricks,fraizer,foshee,ferrel,felty,everitt,evens,esser,elkin,eberhart,durso,duguay,driskill,doster,dewall,deveau,demps,demaio,delreal,deleo,darrah,cumberbatch,culberson,cranmer,cordle,colgan,chesley,cavallo,castellon,castelli,carreras,carnell,carlucci,bontrager,blumberg,blasingame,becton,artrip,andujar,alkire,alder,zukowski,zuckerman,wroblewski,wrigley,woodside,wigginton,westman,westgate,werts,washam,wardlow,walser,waiters,tadlock,stringfield,stimpson,stickley,standish,spurlin,spindler,speller,spaeth,sotomayor,sluder,shryock,shepardson,shatley,scannell,santistevan,rosner,resto,reinhard,rathburn,prisco,poulsen,pinney,phares,pennock,pastrana,oviedo,ostler,nauman,mulford,moise,moberly,mirabal,metoyer,metheny,mentzer,meldrum,mcinturff,mcelyea,mcdougle,massaro,lumpkins,loveday,lofgren,lirette,lesperance,lefkowitz,ledger,lauzon,lachapelle,klassen,keough,kempton,kaelin,jeffords,hsieh,hoyer,horwitz,hoeft,hennig,haskin,gourdine,golightly,girouard,fulgham,fritsch,freer,frasher,foulk,firestone,fiorentino,fedor,ensley,englehart,eells,dunphy,donahoe,dileo,dibenedetto,dabrowski,crick,coonrod,conder,coddington,chunn,chaput,cerna,carreiro,calahan,braggs,bourdon,bollman,bittle,bauder,barreras,aubuchon,anzalone,adamo,zerbe,willcox,westberg,weikel,waymire,vroman,vinci,vallejos,truesdell,troutt,trotta,tollison,toles,tichenor,symonds,surles,strayer,stgeorge,sroka,sorrentino,solares,snelson,silvestri,sikorski,shawver,schumaker,schorr,schooley,scates,satterlee,satchell,rymer,roselli,robitaille,riegel,regis,reames,provenzano,priestley,plaisance,pettey,palomares,nowakowski,monette,minyard,mclamb,mchone,mccarroll,masson,magoon,maddy,lundin,licata,leonhardt,landwehr,kircher,kinch,karpinski,johannsen,hussain,houghtaling,hoskinson,hollaway,holeman,hobgood,hiebert,goggin,geissler,gadbois,gabaldon,fleshman,flannigan,fairman,eilers,dycus,dunmire,duffield,dowler,deloatch,dehaan,deemer,clayborn,christofferso,chilson,chesney,chatfield,carron,canale,brigman,branstetter,bosse,borton,bonar,biron,barroso,arispe,zacharias,zabel,yaeger,woolford,whetzel,weakley,veatch,vandeusen,tufts,troxel,troche,traver,townsel,talarico,swilley,sterrett,stenger,speakman,sowards,sours,souders,souder,soles,sobers,snoddy,smither,shute,shoaf,shahan,schuetz,scaggs,santini,rosson,rolen,robidoux,rentas,recio,pixley,pawlowski,pawlak,paull,overbey,orear,oliveri,oldenburg,nutting,naugle,mossman,misner,milazzo,michelson,mcentee,mccullar,mccree,mcaleer,mazzone,mandell,manahan,malott,maisonet,mailloux,lumley,lowrie,louviere,lipinski,lindemann,leppert,leasure,labarge,kubik,knisely,knepp,kenworthy,kennelly,kelch,kanter,houchin,hosley,hosler,hollon,holleman,heitman,haggins,gwaltney,goulding,gorden,geraci,gathers,frison,feagin,falconer,espada,erving,erikson,eisenhauer,ebeling,durgin,dowdle,dinwiddie,delcastillo,dedrick,crimmins,covell,cournoyer,coria,cohan,cataldo,carpentier,canas,campa,brode,brashears,blaser,bicknell,bednar,barwick,ascencio,althoff,almodovar,alamo,zirkle,zabala,wolverton,winebrenner,wetherell,westlake,wegener,weddington,tuten,trosclair,tressler,theroux,teske,swinehart,swensen,sundquist,southall,socha,sizer,silverberg,shortt,shimizu,sherrard,shaeffer,scheid,scheetz,saravia,sanner,rubinstein,rozell,romer,rheaume,reisinger,randles,pullum,petrella,payan,nordin,norcross,nicoletti,nicholes,newbold,nakagawa,monteith,milstead,milliner,mellen,mccardle,liptak,leitch,latimore,larrison,landau,laborde,koval,izquierdo,hymel,hoskin,holte,hoefer,hayworth,hausman,harrill,harrel,hardt,gully,groover,grinnell,greenspan,graver,grandberry,gorrell,goldenberg,goguen,gilleland,fuson,feldmann,everly,dyess,dunnigan,downie,dolby,deatherage,cosey,cheever,celaya,caver,cashion,caplinger,cansler,byrge,bruder,breuer,breslin,brazelton,botkin,bonneau,bondurant,bohanan,bogue,bodner,boatner,blatt,bickley,belliveau,beiler,beier,beckstead,bachmann,atkin,altizer,alloway,allaire,albro,abron,zellmer,yetter,yelverton,wiens,whidden,viramontes,vanwormer,tarantino,tanksley,sumlin,strauch,strang,stice,spahn,sosebee,sigala,shrout,seamon,schrum,schneck,schantz,ruddy,romig,roehl,renninger,reding,polak,pohlman,pasillas,oldfield,oldaker,ohanlon,ogilvie,norberg,nolette,neufeld,nellis,mummert,mulvihill,mullaney,monteleone,mendonca,meisner,mcmullan,mccluney,mattis,massengill,manfredi,luedtke,lounsbury,liberatore,lamphere,laforge,jourdan,iorio,iniguez,ikeda,hubler,hodgdon,hocking,heacock,haslam,haralson,hanshaw,hannum,hallam,haden,garnes,garces,gammage,gambino,finkel,faucett,ehrhardt,eggen,dusek,durrant,dubay,dones,depasquale,delucia,degraff,decamp,davalos,cullins,conard,clouser,clontz,cifuentes,chappel,chaffins,celis,carwile,byram,bruggeman,bressler,brathwaite,brasfield,bradburn,boose,bodie,blosser,bertsch,bernardi,bernabe,bengtson,barrette,astorga,alday,albee,abrahamson,yarnell,wiltse,wiebe,waguespack,vasser,upham,turek,traxler,torain,tomaszewski,tinnin,tiner,tindell,styron,stahlman,staab,skiba,sheperd,seidl,secor,schutte,sanfilippo,ruder,rondon,rearick,procter,prochaska,pettengill,pauly,neilsen,nally,mullenax,morano,meads,mcnaughton,mcmurtry,mcmath,mckinsey,matthes,massenburg,marlar,margolis,malin,magallon,mackin,lovette,loughran,loring,longstreet,loiselle,lenihan,kunze,koepke,kerwin,kalinowski,kagan,innis,innes,holtzman,heinemann,harshman,haider,haack,grondin,grissett,greenawalt,goudy,goodlett,goldston,gokey,gardea,galaviz,gafford,gabrielson,furlow,fritch,fordyce,folger,elizalde,ehlert,eckhoff,eccleston,ealey,dubin,diemer,deschamps,delapena,decicco,debolt,cullinan,crittendon,crase,cossey,coppock,coots,colyer,cluck,chamberland,burkhead,bumpus,buchan,borman,birkholz,berardi,benda,behnke,barter,amezquita,wotring,wirtz,wingert,wiesner,whitesides,weyant,wainscott,venezia,varnell,tussey,thurlow,tabares,stiver,stell,starke,stanhope,stanek,sisler,sinnott,siciliano,shehan,selph,seager,scurlock,scranton,santucci,santangelo,saltsman,rogge,rettig,renwick,reidy,reider,redfield,premo,parente,paolucci,palmquist,ohler,netherton,mutchler,morita,mistretta,minnis,middendorf,menzel,mendosa,mendelson,meaux,mcspadden,mcquaid,mcnatt,manigault,maney,mager,lukes,lopresti,liriano,letson,lechuga,lazenby,lauria,larimore,krupp,krupa,kopec,kinchen,kifer,kerney,kerner,kennison,kegley,karcher,justis,johson,jellison,janke,huskins,holzman,hinojos,hefley,hatmaker,harte,halloway,hallenbeck,goodwyn,glaspie,geise,fullwood,fryman,frakes,fraire,farrer,enlow,engen,ellzey,eckles,earles,dunkley,drinkard,dreiling,draeger,dinardo,dills,desroches,desantiago,curlee,crumbley,critchlow,coury,courtright,coffield,cleek,charpentier,cardone,caples,cantin,buntin,bugbee,brinkerhoff,brackin,bourland,blassingame,beacham,banning,auguste,andreasen,amann,almon,alejo,adelman,abston,yerger,wymer,woodberry,windley,whiteaker,westfield,weibel,wanner,waldrep,villani,vanarsdale,utterback,updike,triggs,topete,tolar,tigner,thoms,tauber,tarvin,tally,swiney,sweatman,studebaker,stennett,starrett,stannard,stalvey,sonnenberg,smithey,sieber,sickles,shinault,segars,sanger,salmeron,rothe,rizzi,restrepo,ralls,ragusa,quiroga,papenfuss,oropeza,okane,mudge,mozingo,molinaro,mcvicker,mcgarvey,mcfalls,mccraney,matus,magers,llanos,livermore,linehan,leitner,laymon,lawing,lacourse,kwong,kollar,kneeland,kennett,kellett,kangas,janzen,hutter,huling,hofmeister,hewes,harjo,habib,guice,grullon,greggs,grayer,granier,grable,gowdy,giannini,getchell,gartman,garnica,ganey,gallimore,fetters,fergerson,farlow,fagundes,exley,esteves,enders,edenfield,easterwood,drakeford,dipasquale,desousa,deshields,deeter,dedmon,debord,daughtery,cutts,courtemanche,coursey,copple,coomes,collis,cogburn,clopton,choquette,chaidez,castrejon,calhoon,burbach,bulloch,buchman,bruhn,bohon,blough,baynes,barstow,zeman,zackery,yardley,yamashita,wulff,wilken,wiliams,wickersham,wible,whipkey,wedgeworth,walmsley,walkup,vreeland,verrill,umana,traub,swingle,summey,stroupe,stockstill,steffey,stefanski,statler,stapp,speights,solari,soderberg,shunk,shorey,shewmaker,sheilds,schiffer,schank,schaff,sagers,rochon,riser,rickett,reale,raglin,polen,plata,pitcock,percival,palen,orona,oberle,nocera,navas,nault,mullings,montejano,monreal,minick,middlebrook,meece,mcmillion,mccullen,mauck,marshburn,maillet,mahaney,magner,maclin,lucey,litteral,lippincott,leite,leaks,lamarre,jurgens,jerkins,jager,hurwitz,hughley,hotaling,horstman,hohman,hocker,hively,hipps,hessler,hermanson,hepworth,helland,hedlund,harkless,haigler,gutierez,grindstaff,glantz,giardina,gerken,gadsden,finnerty,farnum,encinas,drakes,dennie,cutlip,curtsinger,couto,cortinas,corby,chiasson,carle,carballo,brindle,borum,bober,blagg,berthiaume,beahm,batres,basnight,backes,axtell,atterberry,alvares,alegria,woodell,wojciechowski,winfree,winbush,wiest,wesner,wamsley,wakeman,verner,truex,trafton,toman,thorsen,theus,tellier,tallant,szeto,strope,stills,simkins,shuey,shaul,servin,serio,serafin,salguero,ryerson,rudder,ruark,rother,rohrbaugh,rohrbach,rohan,rogerson,risher,reeser,pryce,prokop,prins,priebe,prejean,pinheiro,petrone,petri,penson,pearlman,parikh,natoli,murakami,mullikin,mullane,motes,morningstar,mcveigh,mcgrady,mcgaughey,mccurley,marchan,manske,lusby,linde,likens,licon,leroux,lemaire,legette,laskey,laprade,laplant,kolar,kittredge,kinley,kerber,kanagy,jetton,janik,ippolito,inouye,hunsinger,howley,howery,horrell,holthaus,hiner,hilson,hilderbrand,hartzler,harnish,harada,hansford,halligan,hagedorn,gwynn,gudino,greenstein,greear,gracey,goudeau,goodner,ginsburg,gerth,gerner,fujii,frier,frenette,folmar,fleisher,fleischmann,fetzer,eisenman,earhart,dupuy,dunkelberger,drexler,dillinger,dilbeck,dewald,demby,deford,craine,chesnut,casady,carstens,carrick,carino,carignan,canchola,bushong,burman,buono,brownlow,broach,britten,brickhouse,boyden,boulton,borland,bohrer,blubaugh,bever,berggren,benevides,arocho,arends,amezcua,almendarez,zalewski,witzel,winkfield,wilhoite,vangundy,vanfleet,vanetten,vandergriff,urbanski,troiano,thibodaux,straus,stoneking,stjean,stillings,stange,speicher,speegle,smeltzer,slawson,simmonds,shuttleworth,serpa,senger,seidman,schweiger,schloss,schimmel,schechter,sayler,sabatini,ronan,rodiguez,riggleman,richins,reamer,prunty,porath,plunk,piland,philbrook,pettitt,perna,peralez,pascale,padula,oboyle,nivens,nickols,mundt,munden,montijo,mcmanis,mcgrane,mccrimmon,manzi,mangold,malick,mahar,maddock,losey,litten,leedy,leavell,ladue,krahn,kluge,junker,iversen,imler,hurtt,huizar,hubbert,howington,hollomon,holdren,hoisington,heiden,hauge,hartigan,gutirrez,griffie,greenhill,gratton,granata,gottfried,gertz,gautreaux,furry,furey,funderburg,flippen,fitzgibbon,drucker,donoghue,dildy,devers,detweiler,despres,denby,degeorge,cueto,cranston,courville,clukey,cirillo,chivers,caudillo,butera,bulluck,buckmaster,braunstein,bracamonte,bourdeau,bonnette".split(","),
45765us_tv_and_film:"you,i,to,that,it,me,what,this,know,i'm,no,have,my,don't,just,not,do,be,your,we,it's,so,but,all,well,oh,about,right,you're,get,here,out,going,like,yeah,if,can,up,want,think,that's,now,go,him,how,got,did,why,see,come,good,really,look,will,okay,back,can't,mean,tell,i'll,hey,he's,could,didn't,yes,something,because,say,take,way,little,make,need,gonna,never,we're,too,she's,i've,sure,our,sorry,what's,let,thing,maybe,down,man,very,there's,should,anything,said,much,any,even,off,please,doing,thank,give,thought,help,talk,god,still,wait,find,nothing,again,things,let's,doesn't,call,told,great,better,ever,night,away,believe,feel,everything,you've,fine,last,keep,does,put,around,stop,they're,i'd,guy,isn't,always,listen,wanted,guys,huh,those,big,lot,happened,thanks,won't,trying,kind,wrong,talking,guess,care,bad,mom,remember,getting,we'll,together,dad,leave,understand,wouldn't,actually,hear,baby,nice,father,else,stay,done,wasn't,course,might,mind,every,enough,try,hell,came,someone,you'll,whole,yourself,idea,ask,must,coming,looking,woman,room,knew,tonight,real,son,hope,went,hmm,happy,pretty,saw,girl,sir,friend,already,saying,next,job,problem,minute,thinking,haven't,heard,honey,matter,myself,couldn't,exactly,having,probably,happen,we've,hurt,boy,dead,gotta,alone,excuse,start,kill,hard,you'd,today,car,ready,without,wants,hold,wanna,yet,seen,deal,once,gone,morning,supposed,friends,head,stuff,worry,live,truth,face,forget,true,cause,soon,knows,telling,wife,who's,chance,run,move,anyone,person,bye,somebody,heart,miss,making,meet,anyway,phone,reason,damn,lost,looks,bring,case,turn,wish,tomorrow,kids,trust,check,change,anymore,least,aren't,working,makes,taking,means,brother,hate,ago,says,beautiful,gave,fact,crazy,sit,afraid,important,rest,fun,kid,word,watch,glad,everyone,sister,minutes,everybody,bit,couple,whoa,either,mrs,feeling,daughter,wow,gets,asked,break,promise,door,close,hand,easy,question,tried,far,walk,needs,mine,killed,hospital,anybody,alright,wedding,shut,able,die,perfect,stand,comes,hit,waiting,dinner,funny,husband,almost,pay,answer,cool,eyes,news,child,shouldn't,yours,moment,sleep,read,where's,sounds,sonny,pick,sometimes,bed,date,plan,hours,lose,hands,serious,shit,behind,inside,ahead,week,wonderful,fight,past,cut,quite,he'll,sick,it'll,eat,nobody,goes,save,seems,finally,lives,worried,upset,carly,met,brought,seem,sort,safe,weren't,leaving,front,shot,loved,asking,running,clear,figure,hot,felt,parents,drink,absolutely,how's,daddy,sweet,alive,sense,meant,happens,bet,blood,ain't,kidding,lie,meeting,dear,seeing,sound,fault,ten,buy,hour,speak,lady,jen,thinks,christmas,outside,hang,possible,worse,mistake,ooh,handle,spend,totally,giving,here's,marriage,realize,unless,sex,send,needed,scared,picture,talked,ass,hundred,changed,completely,explain,certainly,sign,boys,relationship,loves,hair,lying,choice,anywhere,future,weird,luck,she'll,turned,touch,kiss,crane,questions,obviously,wonder,pain,calling,somewhere,throw,straight,cold,fast,words,food,none,drive,feelings,they'll,marry,drop,cannot,dream,protect,twenty,surprise,sweetheart,poor,looked,mad,except,gun,y'know,dance,takes,appreciate,especially,situation,besides,pull,hasn't,worth,sheridan,amazing,expect,swear,piece,busy,happening,movie,we'd,catch,perhaps,step,fall,watching,kept,darling,dog,honor,moving,till,admit,problems,murder,he'd,evil,definitely,feels,honest,eye,broke,missed,longer,dollars,tired,evening,starting,entire,trip,niles,suppose,calm,imagine,fair,caught,blame,sitting,favor,apartment,terrible,clean,learn,frasier,relax,accident,wake,prove,smart,message,missing,forgot,interested,table,nbsp,mouth,pregnant,ring,careful,shall,dude,ride,figured,wear,shoot,stick,follow,angry,write,stopped,ran,standing,forgive,jail,wearing,ladies,kinda,lunch,cristian,greenlee,gotten,hoping,phoebe,thousand,ridge,paper,tough,tape,count,boyfriend,proud,agree,birthday,they've,share,offer,hurry,feet,wondering,decision,ones,finish,voice,herself,would've,mess,deserve,evidence,cute,dress,interesting,hotel,enjoy,quiet,concerned,staying,beat,sweetie,mention,clothes,fell,neither,mmm,fix,respect,prison,attention,holding,calls,surprised,bar,keeping,gift,hadn't,putting,dark,owe,ice,helping,normal,aunt,lawyer,apart,plans,jax,girlfriend,floor,whether,everything's,box,judge,upstairs,sake,mommy,possibly,worst,acting,accept,blow,strange,saved,conversation,plane,mama,yesterday,lied,quick,lately,stuck,difference,store,she'd,bought,doubt,listening,walking,cops,deep,dangerous,buffy,sleeping,chloe,rafe,join,card,crime,gentlemen,willing,window,walked,guilty,likes,fighting,difficult,soul,joke,favorite,uncle,promised,bother,seriously,cell,knowing,broken,advice,somehow,paid,losing,push,helped,killing,boss,liked,innocent,rules,learned,thirty,risk,letting,speaking,ridiculous,afternoon,apologize,nervous,charge,patient,boat,how'd,hide,detective,planning,huge,breakfast,horrible,awful,pleasure,driving,hanging,picked,sell,quit,apparently,dying,notice,congratulations,visit,could've,c'mon,letter,decide,forward,fool,showed,smell,seemed,spell,memory,pictures,slow,seconds,hungry,hearing,kitchen,ma'am,should've,realized,kick,grab,discuss,fifty,reading,idiot,suddenly,agent,destroy,bucks,shoes,peace,arms,demon,livvie,consider,papers,incredible,witch,drunk,attorney,tells,knock,ways,gives,nose,skye,turns,keeps,jealous,drug,sooner,cares,plenty,extra,outta,weekend,matters,gosh,opportunity,impossible,waste,pretend,jump,eating,proof,slept,arrest,breathe,perfectly,warm,pulled,twice,easier,goin,dating,suit,romantic,drugs,comfortable,finds,checked,divorce,begin,ourselves,closer,ruin,smile,laugh,treat,fear,what'd,otherwise,excited,mail,hiding,stole,pacey,noticed,fired,excellent,bringing,bottom,note,sudden,bathroom,honestly,sing,foot,remind,charges,witness,finding,tree,dare,hardly,that'll,steal,silly,contact,teach,shop,plus,colonel,fresh,trial,invited,roll,reach,dirty,choose,emergency,dropped,butt,credit,obvious,locked,loving,nuts,agreed,prue,goodbye,condition,guard,fuckin,grow,cake,mood,crap,crying,belong,partner,trick,pressure,dressed,taste,neck,nurse,raise,lots,carry,whoever,drinking,they'd,breaking,file,lock,wine,spot,paying,assume,asleep,turning,viki,bedroom,shower,nikolas,camera,fill,reasons,forty,bigger,nope,breath,doctors,pants,freak,movies,folks,cream,wild,truly,desk,convince,client,threw,hurts,spending,answers,shirt,chair,rough,doin,sees,ought,empty,wind,aware,dealing,pack,tight,hurting,guest,arrested,salem,confused,surgery,expecting,deacon,unfortunately,goddamn,bottle,beyond,whenever,pool,opinion,starts,jerk,secrets,falling,necessary,barely,dancing,tests,copy,cousin,ahem,twelve,tess,skin,fifteen,speech,orders,complicated,nowhere,escape,biggest,restaurant,grateful,usual,burn,address,someplace,screw,everywhere,regret,goodness,mistakes,details,responsibility,suspect,corner,hero,dumb,terrific,whoo,hole,memories,o'clock,teeth,ruined,bite,stenbeck,liar,showing,cards,desperate,search,pathetic,spoke,scare,marah,afford,settle,stayed,checking,hired,heads,concern,blew,alcazar,champagne,connection,tickets,happiness,saving,kissing,hated,personally,suggest,prepared,onto,downstairs,ticket,it'd,loose,holy,duty,convinced,throwing,kissed,legs,loud,saturday,babies,where'd,warning,miracle,carrying,blind,ugly,shopping,hates,sight,bride,coat,clearly,celebrate,brilliant,wanting,forrester,lips,custody,screwed,buying,toast,thoughts,reality,lexie,attitude,advantage,grandfather,sami,grandma,someday,roof,marrying,powerful,grown,grandmother,fake,must've,ideas,exciting,familiar,bomb,bout,harmony,schedule,capable,practically,correct,clue,forgotten,appointment,deserves,threat,bloody,lonely,shame,jacket,hook,scary,investigation,invite,shooting,lesson,criminal,victim,funeral,considering,burning,strength,harder,sisters,pushed,shock,pushing,heat,chocolate,miserable,corinthos,nightmare,brings,zander,crash,chances,sending,recognize,healthy,boring,feed,engaged,headed,treated,knife,drag,badly,hire,paint,pardon,behavior,closet,warn,gorgeous,milk,survive,ends,dump,rent,remembered,thanksgiving,rain,revenge,prefer,spare,pray,disappeared,aside,statement,sometime,meat,fantastic,breathing,laughing,stood,affair,ours,depends,protecting,jury,brave,fingers,murdered,explanation,picking,blah,stronger,handsome,unbelievable,anytime,shake,oakdale,wherever,pulling,facts,waited,lousy,circumstances,disappointed,weak,trusted,license,nothin,trash,understanding,slip,sounded,awake,friendship,stomach,weapon,threatened,mystery,vegas,understood,basically,switch,frankly,cheap,lifetime,deny,clock,garbage,why'd,tear,ears,indeed,changing,singing,tiny,decent,avoid,messed,filled,touched,disappear,exact,pills,kicked,harm,fortune,pretending,insurance,fancy,drove,cared,belongs,nights,lorelai,lift,timing,guarantee,chest,woke,burned,watched,heading,selfish,drinks,doll,committed,elevator,freeze,noise,wasting,ceremony,uncomfortable,staring,files,bike,stress,permission,thrown,possibility,borrow,fabulous,doors,screaming,bone,xander,what're,meal,apology,anger,honeymoon,bail,parking,fixed,wash,stolen,sensitive,stealing,photo,chose,lets,comfort,worrying,pocket,mateo,bleeding,shoulder,ignore,talent,tied,garage,dies,demons,dumped,witches,rude,crack,bothering,radar,soft,meantime,gimme,kinds,fate,concentrate,throat,prom,messages,intend,ashamed,somethin,manage,guilt,interrupt,guts,tongue,shoe,basement,sentence,purse,glasses,cabin,universe,repeat,mirror,wound,travers,tall,engagement,therapy,emotional,jeez,decisions,soup,thrilled,stake,chef,moves,extremely,moments,expensive,counting,shots,kidnapped,cleaning,shift,plate,impressed,smells,trapped,aidan,knocked,charming,attractive,argue,puts,whip,embarrassed,package,hitting,bust,stairs,alarm,pure,nail,nerve,incredibly,walks,dirt,stamp,terribly,friendly,damned,jobs,suffering,disgusting,stopping,deliver,riding,helps,disaster,bars,crossed,trap,talks,eggs,chick,threatening,spoken,introduce,confession,embarrassing,bags,impression,gate,reputation,presents,chat,suffer,argument,talkin,crowd,homework,coincidence,cancel,pride,solve,hopefully,pounds,pine,mate,illegal,generous,outfit,maid,bath,punch,freaked,begging,recall,enjoying,prepare,wheel,defend,signs,painful,yourselves,maris,that'd,suspicious,cooking,button,warned,sixty,pity,yelling,awhile,confidence,offering,pleased,panic,hers,gettin,refuse,grandpa,testify,choices,cruel,mental,gentleman,coma,cutting,proteus,guests,expert,benefit,faces,jumped,toilet,sneak,halloween,privacy,smoking,reminds,twins,swing,solid,options,commitment,crush,ambulance,wallet,gang,eleven,option,laundry,assure,stays,skip,fail,discussion,clinic,betrayed,sticking,bored,mansion,soda,sheriff,suite,handled,busted,load,happier,studying,romance,procedure,commit,assignment,suicide,minds,swim,yell,llanview,chasing,proper,believes,humor,hopes,lawyers,giant,latest,escaped,parent,tricks,insist,dropping,cheer,medication,flesh,routine,sandwich,handed,false,beating,warrant,awfully,odds,treating,thin,suggesting,fever,sweat,silent,clever,sweater,mall,sharing,assuming,judgment,goodnight,divorced,surely,steps,confess,math,listened,comin,answered,vulnerable,bless,dreaming,chip,zero,pissed,nate,kills,tears,knees,chill,brains,unusual,packed,dreamed,cure,lookin,grave,cheating,breaks,locker,gifts,awkward,thursday,joking,reasonable,dozen,curse,quartermaine,millions,dessert,rolling,detail,alien,delicious,closing,vampires,wore,tail,secure,salad,murderer,spit,offense,dust,conscience,bread,answering,lame,invitation,grief,smiling,pregnancy,prisoner,delivery,guards,virus,shrink,freezing,wreck,massimo,wire,technically,blown,anxious,cave,holidays,cleared,wishes,caring,candles,bound,charm,pulse,jumping,jokes,boom,occasion,silence,nonsense,frightened,slipped,dimera,blowing,relationships,kidnapping,spin,tool,roxy,packing,blaming,wrap,obsessed,fruit,torture,personality,there'll,fairy,necessarily,seventy,print,motel,underwear,grams,exhausted,believing,freaking,carefully,trace,touching,messing,recovery,intention,consequences,belt,sacrifice,courage,enjoyed,attracted,remove,testimony,intense,heal,defending,unfair,relieved,loyal,slowly,buzz,alcohol,surprises,psychiatrist,plain,attic,who'd,uniform,terrified,cleaned,zach,threaten,fella,enemies,satisfied,imagination,hooked,headache,forgetting,counselor,andie,acted,badge,naturally,frozen,sakes,appropriate,trunk,dunno,costume,sixteen,impressive,kicking,junk,grabbed,understands,describe,clients,owns,affect,witnesses,starving,instincts,happily,discussing,deserved,strangers,surveillance,admire,questioning,dragged,barn,deeply,wrapped,wasted,tense,hoped,fellas,roommate,mortal,fascinating,stops,arrangements,agenda,literally,propose,honesty,underneath,sauce,promises,lecture,eighty,torn,shocked,backup,differently,ninety,deck,biological,pheebs,ease,creep,waitress,telephone,ripped,raising,scratch,rings,prints,thee,arguing,ephram,asks,oops,diner,annoying,taggert,sergeant,blast,towel,clown,habit,creature,bermuda,snap,react,paranoid,handling,eaten,therapist,comment,sink,reporter,nurses,beats,priority,interrupting,warehouse,loyalty,inspector,pleasant,excuses,threats,guessing,tend,praying,motive,unconscious,mysterious,unhappy,tone,switched,rappaport,sookie,neighbor,loaded,swore,piss,balance,toss,misery,thief,squeeze,lobby,goa'uld,geez,exercise,forth,booked,sandburg,poker,eighteen,d'you,bury,everyday,digging,creepy,wondered,liver,hmmm,magical,fits,discussed,moral,helpful,searching,flew,depressed,aisle,cris,amen,vows,neighbors,darn,cents,arrange,annulment,useless,adventure,resist,fourteen,celebrating,inch,debt,violent,sand,teal'c,celebration,reminded,phones,paperwork,emotions,stubborn,pound,tension,stroke,steady,overnight,chips,beef,suits,boxes,cassadine,collect,tragedy,spoil,realm,wipe,surgeon,stretch,stepped,nephew,neat,limo,confident,perspective,climb,punishment,finest,springfield,hint,furniture,blanket,twist,proceed,fries,worries,niece,gloves,soap,signature,disappoint,crawl,convicted,flip,counsel,doubts,crimes,accusing,shaking,remembering,hallway,halfway,bothered,madam,gather,cameras,blackmail,symptoms,rope,ordinary,imagined,cigarette,supportive,explosion,trauma,ouch,furious,cheat,avoiding,whew,thick,oooh,boarding,approve,urgent,shhh,misunderstanding,drawer,phony,interfere,catching,bargain,tragic,respond,punish,penthouse,thou,rach,ohhh,insult,bugs,beside,begged,absolute,strictly,socks,senses,sneaking,reward,polite,checks,tale,physically,instructions,fooled,blows,tabby,bitter,adorable,y'all,tested,suggestion,jewelry,alike,jacks,distracted,shelter,lessons,constable,circus,audition,tune,shoulders,mask,helpless,feeding,explains,sucked,robbery,objection,behave,valuable,shadows,courtroom,confusing,talented,smarter,mistaken,customer,bizarre,scaring,motherfucker,alert,vecchio,reverend,foolish,compliment,bastards,worker,wheelchair,protective,gentle,reverse,picnic,knee,cage,wives,wednesday,voices,toes,stink,scares,pour,cheated,slide,ruining,filling,exit,cottage,upside,proves,parked,diary,complaining,confessed,pipe,merely,massage,chop,spill,prayer,betray,waiter,scam,rats,fraud,brush,tables,sympathy,pill,filthy,seventeen,employee,bracelet,pays,fairly,deeper,arrive,tracking,spite,shed,recommend,oughta,nanny,menu,diet,corn,roses,patch,dime,devastated,subtle,bullets,beans,pile,confirm,strings,parade,borrowed,toys,straighten,steak,premonition,planted,honored,exam,convenient,traveling,laying,insisted,dish,aitoro,kindly,grandson,donor,temper,teenager,proven,mothers,denial,backwards,tent,swell,noon,happiest,drives,thinkin,spirits,potion,holes,fence,whatsoever,rehearsal,overheard,lemme,hostage,bench,tryin,taxi,shove,moron,impress,needle,intelligent,instant,disagree,stinks,rianna,recover,groom,gesture,constantly,bartender,suspects,sealed,legally,hears,dresses,sheet,psychic,teenage,knocking,judging,accidentally,waking,rumor,manners,homeless,hollow,desperately,tapes,referring,item,genoa,gear,majesty,cried,tons,spells,instinct,quote,motorcycle,convincing,fashioned,aids,accomplished,grip,bump,upsetting,needing,invisible,forgiveness,feds,compare,bothers,tooth,inviting,earn,compromise,cocktail,tramp,jabot,intimate,dignity,dealt,souls,informed,gods,dressing,cigarettes,alistair,leak,fond,corky,seduce,liquor,fingerprints,enchantment,butters,stuffed,stavros,emotionally,transplant,tips,oxygen,nicely,lunatic,drill,complain,announcement,unfortunate,slap,prayers,plug,opens,oath,o'neill,mutual,yacht,remembers,fried,extraordinary,bait,warton,sworn,stare,safely,reunion,burst,might've,dive,aboard,expose,buddies,trusting,booze,sweep,sore,scudder,properly,parole,ditch,canceled,speaks,glow,wears,thirsty,skull,ringing,dorm,dining,bend,unexpected,pancakes,harsh,flattered,ahhh,troubles,fights,favourite,eats,rage,undercover,spoiled,sloane,shine,destroying,deliberately,conspiracy,thoughtful,sandwiches,plates,nails,miracles,fridge,drank,contrary,beloved,allergic,washed,stalking,solved,sack,misses,forgiven,bent,maciver,involve,dragging,cooked,pointing,foul,dull,beneath,heels,faking,deaf,stunt,jealousy,hopeless,fears,cuts,scenario,necklace,crashed,accuse,restraining,homicide,helicopter,firing,safer,auction,videotape,tore,reservations,pops,appetite,wounds,vanquish,ironic,fathers,excitement,anyhow,tearing,sends,rape,laughed,belly,dealer,cooperate,accomplish,wakes,spotted,sorts,reservation,ashes,tastes,supposedly,loft,intentions,integrity,wished,towels,suspected,investigating,inappropriate,lipstick,lawn,compassion,cafeteria,scarf,precisely,obsession,loses,lighten,infection,granddaughter,explode,balcony,this'll,spying,publicity,depend,cracked,conscious,ally,absurd,vicious,invented,forbid,directions,defendant,bare,announce,screwing,salesman,robbed,leap,lakeview,insanity,reveal,possibilities,kidnap,gown,chairs,wishing,setup,punished,criminals,regrets,raped,quarters,lamp,dentist,anyways,anonymous,semester,risks,owes,lungs,explaining,delicate,tricked,eager,doomed,adoption,stab,sickness,scum,floating,envelope,vault,sorel,pretended,potatoes,plea,photograph,payback,misunderstood,kiddo,healing,cascade,capeside,stabbed,remarkable,brat,privilege,passionate,nerves,lawsuit,kidney,disturbed,cozy,tire,shirts,oven,ordering,delay,risky,monsters,honorable,grounded,closest,breakdown,bald,abandon,scar,collar,worthless,sucking,enormous,disturbing,disturb,distract,deals,conclusions,vodka,dishes,crawling,briefcase,wiped,whistle,sits,roast,rented,pigs,flirting,deposit,bottles,topic,riot,overreacting,logical,hostile,embarrass,casual,beacon,amusing,altar,claus,survival,skirt,shave,porch,ghosts,favors,drops,dizzy,chili,advise,strikes,rehab,photographer,peaceful,leery,heavens,fortunately,fooling,expectations,cigar,weakness,ranch,practicing,examine,cranes,bribe,sail,prescription,hush,fragile,forensics,expense,drugged,cows,bells,visitor,suitcase,sorta,scan,manticore,insecure,imagining,hardest,clerk,wrist,what'll,starters,silk,pump,pale,nicer,haul,flies,boot,thumb,there'd,how're,elders,quietly,pulls,idiots,erase,denying,ankle,amnesia,accepting,heartbeat,devane,confront,minus,legitimate,fixing,arrogant,tuna,supper,slightest,sins,sayin,recipe,pier,paternity,humiliating,genuine,snack,rational,minded,guessed,weddings,tumor,humiliated,aspirin,spray,picks,eyed,drowning,contacts,ritual,perfume,hiring,hating,docks,creatures,visions,thanking,thankful,sock,nineteen,fork,throws,teenagers,stressed,slice,rolls,plead,ladder,kicks,detectives,assured,tellin,shallow,responsibilities,repay,howdy,girlfriends,deadly,comforting,ceiling,verdict,insensitive,spilled,respected,messy,interrupted,halliwell,blond,bleed,wardrobe,takin,murders,backs,underestimate,justify,harmless,frustrated,fold,enzo,communicate,bugging,arson,whack,salary,rumors,obligation,liking,dearest,congratulate,vengeance,rack,puzzle,fires,courtesy,caller,blamed,tops,quiz,prep,curiosity,circles,barbecue,sunnydale,spinning,psychotic,cough,accusations,resent,laughs,freshman,envy,drown,bartlet,asses,sofa,poster,highness,dock,apologies,theirs,stat,stall,realizes,psych,mmmm,fools,understandable,treats,succeed,stir,relaxed,makin,gratitude,faithful,accent,witter,wandering,locate,inevitable,gretel,deed,crushed,controlling,smelled,robe,gossip,gambling,cosmetics,accidents,surprising,stiff,sincere,rushed,refrigerator,preparing,nightmares,mijo,ignoring,hunch,fireworks,drowned,brass,whispering,sophisticated,luggage,hike,explore,emotion,crashing,contacted,complications,shining,rolled,righteous,reconsider,goody,geek,frightening,ethics,creeps,courthouse,camping,affection,smythe,haircut,essay,baked,apologized,vibe,respects,receipt,mami,hats,destructive,adore,adopt,tracked,shorts,reminding,dough,creations,cabot,barrel,snuck,slight,reporters,pressing,magnificent,madame,lazy,glorious,fiancee,bits,visitation,sane,kindness,shoulda,rescued,mattress,lounge,lifted,importantly,glove,enterprises,disappointment,condo,beings,admitting,yelled,waving,spoon,screech,satisfaction,reads,nailed,worm,tick,resting,marvelous,fuss,cortlandt,chased,pockets,luckily,lilith,filing,conversations,consideration,consciousness,worlds,innocence,forehead,aggressive,trailer,slam,quitting,inform,delighted,daylight,danced,confidential,aunts,washing,tossed,spectra,marrow,lined,implying,hatred,grill,corpse,clues,sober,offended,morgue,infected,humanity,distraction,cart,wired,violation,promising,harassment,glue,d'angelo,cursed,brutal,warlocks,wagon,unpleasant,proving,priorities,mustn't,lease,flame,disappearance,depressing,thrill,sitter,ribs,flush,earrings,deadline,corporal,collapsed,update,snapped,smack,melt,figuring,delusional,coulda,burnt,tender,sperm,realise,pork,popped,interrogation,esteem,choosing,undo,pres,prayed,plague,manipulate,insulting,detention,delightful,coffeehouse,betrayal,apologizing,adjust,wrecked,wont,whipped,rides,reminder,monsieur,faint,bake,distress,correctly,complaint,blocked,tortured,risking,pointless,handing,dumping,cups,alibi,struggling,shiny,risked,mummy,mint,hose,hobby,fortunate,fleischman,fitting,curtain,counseling,rode,puppet,modeling,memo,irresponsible,humiliation,hiya,freakin,felony,choke,blackmailing,appreciated,tabloid,suspicion,recovering,pledge,panicked,nursery,louder,jeans,investigator,homecoming,frustrating,buys,busting,buff,sleeve,irony,dope,declare,autopsy,workin,torch,prick,limb,hysterical,goddamnit,fetch,dimension,crowded,clip,climbing,bonding,woah,trusts,negotiate,lethal,iced,fantasies,deeds,bore,babysitter,questioned,outrageous,kiriakis,insulted,grudge,driveway,deserted,definite,beep,wires,suggestions,searched,owed,lend,drunken,demanding,costanza,conviction,bumped,weigh,touches,tempted,shout,resolve,relate,poisoned,meals,invitations,haunted,bogus,autograph,affects,tolerate,stepping,spontaneous,sleeps,probation,manny,fist,spectacular,hostages,heroin,havin,habits,encouraging,consult,burgers,boyfriends,bailed,baggage,watches,troubled,torturing,teasing,sweetest,qualities,postpone,overwhelmed,malkovich,impulse,classy,charging,amazed,policeman,hypocrite,humiliate,hideous,d'ya,costumes,bluffing,betting,bein,bedtime,alcoholic,vegetable,tray,suspicions,spreading,splendid,shrimp,shouting,pressed,nooo,grieving,gladly,fling,eliminate,cereal,aaah,sonofabitch,paralyzed,lotta,locks,guaranteed,dummy,despise,dental,briefing,bluff,batteries,whatta,sounding,servants,presume,handwriting,fainted,dried,allright,acknowledge,whacked,toxic,reliable,quicker,overwhelming,lining,harassing,fatal,endless,dolls,convict,whatcha,unlikely,shutting,positively,overcome,goddam,essence,dose,diagnosis,cured,bully,ahold,yearbook,tempting,shelf,prosecution,pouring,possessed,greedy,wonders,thorough,spine,rath,psychiatric,meaningless,latte,jammed,ignored,fiance,evidently,contempt,compromised,cans,weekends,urge,theft,suing,shipment,scissors,responding,proposition,noises,matching,hormones,hail,grandchildren,gently,smashed,sexually,sentimental,nicest,manipulated,intern,handcuffs,framed,errands,entertaining,crib,carriage,barge,spends,slipping,seated,rubbing,rely,reject,recommendation,reckon,headaches,float,embrace,corners,whining,sweating,skipped,mountie,motives,listens,cristobel,cleaner,cheerleader,balsom,unnecessary,stunning,scent,quartermaines,pose,montega,loosen,info,hottest,haunt,gracious,forgiving,errand,cakes,blames,abortion,sketch,shifts,plotting,perimeter,pals,mere,mattered,lonigan,interference,eyewitness,enthusiasm,diapers,strongest,shaken,punched,portal,catches,backyard,terrorists,sabotage,organs,needy,cuff,civilization,woof,who'll,prank,obnoxious,mates,hereby,gabby,faked,cellar,whitelighter,void,strangle,sour,muffins,interfering,demonic,clearing,boutique,barrington,terrace,smoked,righty,quack,petey,pact,knot,ketchup,disappearing,cordy,uptight,ticking,terrifying,tease,swamp,secretly,rejection,reflection,realizing,rays,mentally,marone,doubted,deception,congressman,cheesy,toto,stalling,scoop,ribbon,immune,expects,destined,bets,bathing,appreciation,accomplice,wander,shoved,sewer,scroll,retire,lasts,fugitive,freezer,discount,cranky,crank,clearance,bodyguard,anxiety,accountant,whoops,volunteered,talents,stinking,remotely,garlic,decency,cord,beds,altogether,uniforms,tremendous,popping,outa,observe,lung,hangs,feelin,dudes,donation,disguise,curb,bites,antique,toothbrush,realistic,predict,landlord,hourglass,hesitate,consolation,babbling,tipped,stranded,smartest,repeating,puke,psst,paycheck,overreacted,macho,juvenile,grocery,freshen,disposal,cuffs,caffeine,vanished,unfinished,ripping,pinch,flattering,expenses,dinners,colleague,ciao,belthazor,attorneys,woulda,whereabouts,waitin,truce,tripped,tasted,steer,poisoning,manipulative,immature,husbands,heel,granddad,delivering,condoms,addict,trashed,raining,pasta,needles,leaning,detector,coolest,batch,appointments,almighty,vegetables,spark,perfection,pains,momma,mole,meow,hairs,getaway,cracking,compliments,behold,verge,tougher,timer,tapped,taped,specialty,snooping,shoots,rendezvous,pentagon,leverage,jeopardize,janitor,grandparents,forbidden,clueless,bidding,ungrateful,unacceptable,tutor,serum,scuse,pajamas,mouths,lure,irrational,doom,cries,beautifully,arresting,approaching,traitor,sympathetic,smug,smash,rental,prostitute,premonitions,jumps,inventory,darlin,committing,banging,asap,worms,violated,vent,traumatic,traced,sweaty,shaft,overboard,insight,healed,grasp,experiencing,crappy,crab,chunk,awww,stain,shack,reacted,pronounce,poured,moms,marriages,jabez,handful,flipped,fireplace,embarrassment,disappears,concussion,bruises,brakes,twisting,swept,summon,splitting,sloppy,settling,reschedule,notch,hooray,grabbing,exquisite,disrespect,thornhart,straw,slapped,shipped,shattered,ruthless,refill,payroll,numb,mourning,manly,hunk,entertain,drift,dreadful,doorstep,confirmation,chops,appreciates,vague,tires,stressful,stashed,stash,sensed,preoccupied,predictable,noticing,madly,gunshot,dozens,dork,confuse,cleaners,charade,chalk,cappuccino,bouquet,amulet,addiction,who've,warming,unlock,satisfy,sacrificed,relaxing,lone,blocking,blend,blankets,addicted,yuck,hunger,hamburger,greeting,greet,gravy,gram,dreamt,dice,caution,backpack,agreeing,whale,taller,supervisor,sacrifices,phew,ounce,irrelevant,gran,felon,favorites,farther,fade,erased,easiest,convenience,compassionate,cane,backstage,agony,adores,veins,tweek,thieves,surgical,strangely,stetson,recital,proposing,productive,meaningful,immunity,hassle,goddamned,frighten,dearly,cease,ambition,wage,unstable,salvage,richer,refusing,raging,pumping,pressuring,mortals,lowlife,intimidated,intentionally,inspire,forgave,devotion,despicable,deciding,dash,comfy,breach,bark,aaaah,switching,swallowed,stove,screamed,scars,russians,pounding,poof,pipes,pawn,legit,invest,farewell,curtains,civilized,caviar,boost,token,superstition,supernatural,sadness,recorder,psyched,motivated,microwave,hallelujah,fraternity,dryer,cocoa,chewing,acceptable,unbelievably,smiled,smelling,simpler,respectable,remarks,khasinau,indication,gutter,grabs,fulfill,flashlight,ellenor,blooded,blink,blessings,beware,uhhh,turf,swings,slips,shovel,shocking,puff,mirrors,locking,heartless,fras,childish,cardiac,utterly,tuscany,ticked,stunned,statesville,sadly,purely,kiddin,jerks,hitch,flirt,fare,equals,dismiss,christening,casket,c'mere,breakup,biting,antibiotics,accusation,abducted,witchcraft,thread,runnin,punching,paramedics,newest,murdering,masks,lawndale,initials,grampa,choking,charms,careless,bushes,buns,bummed,shred,saves,saddle,rethink,regards,precinct,persuade,meds,manipulating,llanfair,leash,hearted,guarantees,fucks,disgrace,deposition,bookstore,boil,vitals,veil,trespassing,sidewalk,sensible,punishing,overtime,optimistic,obsessing,notify,mornin,jeopardy,jaffa,injection,hilarious,desires,confide,cautious,yada,where're,vindictive,vial,teeny,stroll,sittin,scrub,rebuild,posters,ordeal,nuns,intimacy,inheritance,exploded,donate,distracting,despair,crackers,wildwind,virtue,thoroughly,tails,spicy,sketches,sights,sheer,shaving,seize,scarecrow,refreshing,prosecute,platter,napkin,misplaced,merchandise,loony,jinx,heroic,frankenstein,ambitious,syrup,solitary,resemblance,reacting,premature,lavery,flashes,cheque,awright,acquainted,wrapping,untie,salute,realised,priceless,partying,lightly,lifting,kasnoff,insisting,glowing,generator,explosives,cutie,confronted,buts,blouse,ballistic,antidote,analyze,allowance,adjourned,unto,understatement,tucked,touchy,subconscious,screws,sarge,roommates,rambaldi,offend,nerd,knives,irresistible,incapable,hostility,goddammit,fuse,frat,curfew,blackmailed,walkin,starve,sleigh,sarcastic,recess,rebound,pinned,parlor,outfits,livin,heartache,haired,fundraiser,doorman,discreet,dilucca,cracks,considerate,climbed,catering,apophis,zoey,urine,strung,stitches,sordid,sark,protector,phoned,pets,hostess,flaw,flavor,deveraux,consumed,confidentiality,bourbon,straightened,specials,spaghetti,prettier,powerless,playin,playground,paranoia,instantly,havoc,exaggerating,eavesdropping,doughnuts,diversion,deepest,cutest,comb,bela,behaving,anyplace,accessory,workout,translate,stuffing,speeding,slime,royalty,polls,marital,lurking,lottery,imaginary,greetings,fairwinds,elegant,elbow,credibility,credentials,claws,chopped,bridal,bedside,babysitting,witty,unforgivable,underworld,tempt,tabs,sophomore,selfless,secrecy,restless,okey,movin,metaphor,messes,meltdown,lecter,incoming,gasoline,diefenbaker,buckle,admired,adjustment,warmth,throats,seduced,queer,parenting,noses,luckiest,graveyard,gifted,footsteps,dimeras,cynical,wedded,verbal,unpredictable,tuned,stoop,slides,sinking,rigged,plumbing,lingerie,hankey,greed,everwood,elope,dresser,chauffeur,bulletin,bugged,bouncing,temptation,strangest,slammed,sarcasm,pending,packages,orderly,obsessive,murderers,meteor,inconvenience,glimpse,froze,execute,courageous,consulate,closes,bosses,bees,amends,wuss,wolfram,wacky,unemployed,testifying,syringe,stew,startled,sorrow,sleazy,shaky,screams,rsquo,remark,poke,nutty,mentioning,mend,inspiring,impulsive,housekeeper,foam,fingernails,conditioning,baking,whine,thug,starved,sniffing,sedative,programmed,picket,paged,hound,homosexual,homo,hips,forgets,flipping,flea,flatter,dwell,dumpster,choo,assignments,ants,vile,unreasonable,tossing,thanked,steals,souvenir,scratched,psychopath,outs,obstruction,obey,lump,insists,harass,gloat,filth,edgy,didn,coroner,confessing,bruise,betraying,bailing,appealing,adebisi,wrath,wandered,waist,vain,traps,stepfather,poking,obligated,heavenly,dilemma,crazed,contagious,coaster,cheering,bundle,vomit,thingy,speeches,robbing,raft,pumped,pillows,peep,packs,neglected,m'kay,loneliness,intrude,helluva,gardener,forresters,drooling,betcha,vase,supermarket,squat,spitting,rhyme,relieve,receipts,racket,pictured,pause,overdue,motivation,morgendorffer,kidnapper,insect,horns,feminine,eyeballs,dumps,disappointing,crock,convertible,claw,clamp,canned,cambias,bathtub,avanya,artery,weep,warmer,suspense,summoned,spiders,reiber,raving,pushy,postponed,ohhhh,noooo,mold,laughter,incompetent,hugging,groceries,drip,communicating,auntie,adios,wraps,wiser,willingly,weirdest,timmih,thinner,swelling,swat,steroids,sensitivity,scrape,rehearse,prophecy,ledge,justified,insults,hateful,handles,doorway,chatting,buyer,buckaroo,bedrooms,askin,ammo,tutoring,subpoena,scratching,privileges,pager,mart,intriguing,idiotic,grape,enlighten,corrupt,brunch,bridesmaid,barking,applause,acquaintance,wretched,superficial,soak,smoothly,sensing,restraint,posing,pleading,payoff,oprah,nemo,morals,loaf,jumpy,ignorant,herbal,hangin,germs,generosity,flashing,doughnut,clumsy,chocolates,captive,behaved,apologise,vanity,stumbled,preview,poisonous,perjury,parental,onboard,mugged,minding,linen,knots,interviewing,humour,grind,greasy,goons,drastic,coop,comparing,cocky,clearer,bruised,brag,bind,worthwhile,whoop,vanquishing,tabloids,sprung,spotlight,sentencing,racist,provoke,pining,overly,locket,imply,impatient,hovering,hotter,fest,endure,dots,doren,debts,crawled,chained,brit,breaths,weirdo,warmed,wand,troubling,tok'ra,strapped,soaked,skipping,scrambled,rattle,profound,musta,mocking,misunderstand,limousine,kacl,hustle,forensic,enthusiastic,duct,drawers,devastating,conquer,clarify,chores,cheerleaders,cheaper,callin,blushing,barging,abused,yoga,wrecking,wits,waffles,virginity,vibes,uninvited,unfaithful,teller,strangled,scheming,ropes,rescuing,rave,postcard,o'reily,morphine,lotion,lads,kidneys,judgement,itch,indefinitely,grenade,glamorous,genetically,freud,discretion,delusions,crate,competent,bakery,argh,ahhhh,wedge,wager,unfit,tripping,torment,superhero,stirring,spinal,sorority,seminar,scenery,rabble,pneumonia,perks,override,ooooh,mija,manslaughter,mailed,lime,lettuce,intimidate,guarded,grieve,grad,frustration,doorbell,chinatown,authentic,arraignment,annulled,allergies,wanta,verify,vegetarian,tighter,telegram,stalk,spared,shoo,satisfying,saddam,requesting,pens,overprotective,obstacles,notified,nasedo,grandchild,genuinely,flushed,fluids,floss,escaping,ditched,cramp,corny,bunk,bitten,billions,bankrupt,yikes,wrists,ultrasound,ultimatum,thirst,sniff,shakes,salsa,retrieve,reassuring,pumps,neurotic,negotiating,needn't,monitors,millionaire,lydecker,limp,incriminating,hatchet,gracias,gordie,fills,feeds,doubting,decaf,biopsy,whiz,voluntarily,ventilator,unpack,unload,toad,spooked,snitch,schillinger,reassure,persuasive,mystical,mysteries,matrimony,mails,jock,headline,explanations,dispatch,curly,cupid,condolences,comrade,cassadines,bulb,bragging,awaits,assaulted,ambush,adolescent,abort,yank,whit,vaguely,undermine,tying,swamped,stabbing,slippers,slash,sincerely,sigh,setback,secondly,rotting,precaution,pcpd,melting,liaison,hots,hooking,headlines,haha,ganz,fury,felicity,fangs,encouragement,earring,dreidel,dory,donut,dictate,decorating,cocktails,bumps,blueberry,believable,backfired,backfire,apron,adjusting,vous,vouch,vitamins,ummm,tattoos,slimy,sibling,shhhh,renting,peculiar,parasite,paddington,marries,mailbox,magically,lovebirds,knocks,informant,exits,drazen,distractions,disconnected,dinosaurs,dashwood,crooked,conveniently,wink,warped,underestimated,tacky,shoving,seizure,reset,pushes,opener,mornings,mash,invent,indulge,horribly,hallucinating,festive,eyebrows,enjoys,desperation,dealers,darkest,daph,boragora,belts,bagel,authorization,auditions,agitated,wishful,wimp,vanish,unbearable,tonic,suffice,suction,slaying,safest,rocking,relive,puttin,prettiest,noisy,newlyweds,nauseous,misguided,mildly,midst,liable,judgmental,indy,hunted,givin,fascinated,elephants,dislike,deluded,decorate,crummy,contractions,carve,bottled,bonded,bahamas,unavailable,twenties,trustworthy,surgeons,stupidity,skies,remorse,preferably,pies,nausea,napkins,mule,mourn,melted,mashed,inherit,greatness,golly,excused,dumbo,drifting,delirious,damaging,cubicle,compelled,comm,chooses,checkup,boredom,bandages,alarms,windshield,who're,whaddya,transparent,surprisingly,sunglasses,slit,roar,reade,prognosis,probe,pitiful,persistent,peas,nosy,nagging,morons,masterpiece,martinis,limbo,liars,irritating,inclined,hump,hoynes,fiasco,eatin,cubans,concentrating,colorful,clam,cider,brochure,barto,bargaining,wiggle,welcoming,weighing,vanquished,stains,sooo,snacks,smear,sire,resentment,psychologist,pint,overhear,morality,landingham,kisser,hoot,holling,handshake,grilled,formality,elevators,depths,confirms,boathouse,accidental,westbridge,wacko,ulterior,thugs,thighs,tangled,stirred,snag,sling,sleaze,rumour,ripe,remarried,puddle,pins,perceptive,miraculous,longing,lockup,librarian,impressions,immoral,hypothetically,guarding,gourmet,gabe,faxed,extortion,downright,digest,cranberry,bygones,buzzing,burying,bikes,weary,taping,takeout,sweeping,stepmother,stale,senor,seaborn,pros,pepperoni,newborn,ludicrous,injected,geeks,forged,faults,drue,dire,dief,desi,deceiving,caterer,calmed,budge,ankles,vending,typing,tribbiani,there're,squared,snowing,shades,sexist,rewrite,regretted,raises,picky,orphan,mural,misjudged,miscarriage,memorize,leaking,jitters,invade,interruption,illegally,handicapped,glitch,gittes,finer,distraught,dispose,dishonest,digs,dads,cruelty,circling,canceling,butterflies,belongings,barbrady,amusement,alias,zombies,where've,unborn,swearing,stables,squeezed,sensational,resisting,radioactive,questionable,privileged,portofino,owning,overlook,orson,oddly,interrogate,imperative,impeccable,hurtful,hors,heap,graders,glance,disgust,devious,destruct,crazier,countdown,chump,cheeseburger,burglar,berries,ballroom,assumptions,annoyed,allergy,admirer,admirable,activate,underpants,twit,tack,strokes,stool,sham,scrap,retarded,resourceful,remarkably,refresh,pressured,precautions,pointy,nightclub,mustache,maui,lace,hunh,hubby,flare,dont,dokey,dangerously,crushing,clinging,choked,chem,cheerleading,checkbook,cashmere,calmly,blush,believer,amazingly,alas,what've,toilets,tacos,stairwell,spirited,sewing,rubbed,punches,protects,nuisance,motherfuckers,mingle,kynaston,knack,kinkle,impose,gullible,godmother,funniest,friggin,folding,fashions,eater,dysfunctional,drool,dripping,ditto,cruising,criticize,conceive,clone,cedars,caliber,brighter,blinded,birthdays,banquet,anticipate,annoy,whim,whichever,volatile,veto,vested,shroud,rests,reindeer,quarantine,pleases,painless,orphans,orphanage,offence,obliged,negotiation,narcotics,mistletoe,meddling,manifest,lookit,lilah,intrigued,injustice,homicidal,gigantic,exposing,elves,disturbance,disastrous,depended,demented,correction,cooped,cheerful,buyers,brownies,beverage,basics,arvin,weighs,upsets,unethical,swollen,sweaters,stupidest,sensation,scalpel,props,prescribed,pompous,objections,mushrooms,mulwray,manipulation,lured,internship,insignificant,inmate,incentive,fulfilled,disagreement,crypt,cornered,copied,brightest,beethoven,attendant,amaze,yogurt,wyndemere,vocabulary,tulsa,tactic,stuffy,respirator,pretends,polygraph,pennies,ordinarily,olives,necks,morally,martyr,leftovers,joints,hopping,homey,hints,heartbroken,forge,florist,firsthand,fiend,dandy,crippled,corrected,conniving,conditioner,clears,chemo,bubbly,bladder,beeper,baptism,wiring,wench,weaknesses,volunteering,violating,unlocked,tummy,surrogate,subid,stray,startle,specifics,slowing,scoot,robbers,rightful,richest,qfxmjrie,puffs,pierced,pencils,paralysis,makeover,luncheon,linksynergy,jerky,jacuzzi,hitched,hangover,fracture,flock,firemen,disgusted,darned,clams,borrowing,banged,wildest,weirder,unauthorized,stunts,sleeves,sixties,shush,shalt,retro,quits,pegged,painfully,paging,omelet,memorized,lawfully,jackets,intercept,ingredient,grownup,glued,fulfilling,enchanted,delusion,daring,compelling,carton,bridesmaids,bribed,boiling,bathrooms,bandage,awaiting,assign,arrogance,antiques,ainsley,turkeys,trashing,stockings,stalked,stabilized,skates,sedated,robes,respecting,psyche,presumptuous,prejudice,paragraph,mocha,mints,mating,mantan,lorne,loads,listener,itinerary,hepatitis,heave,guesses,fading,examining,dumbest,dishwasher,deceive,cunning,cripple,convictions,confided,compulsive,compromising,burglary,bumpy,brainwashed,benes,arnie,affirmative,adrenaline,adamant,watchin,waitresses,transgenic,toughest,tainted,surround,stormed,spree,spilling,spectacle,soaking,shreds,sewers,severed,scarce,scamming,scalp,rewind,rehearsing,pretentious,potions,overrated,obstacle,nerds,meems,mcmurphy,maternity,maneuver,loathe,fertility,eloping,ecstatic,ecstasy,divorcing,dignan,costing,clubhouse,clocks,candid,bursting,breather,braces,bending,arsonist,adored,absorb,valiant,uphold,unarmed,topolsky,thrilling,thigh,terminate,sustain,spaceship,snore,sneeze,smuggling,salty,quaint,patronize,patio,morbid,mamma,kettle,joyous,invincible,interpret,insecurities,impulses,illusions,holed,exploit,drivin,defenseless,dedicate,cradle,coupon,countless,conjure,cardboard,booking,backseat,accomplishment,wordsworth,wisely,valet,vaccine,urges,unnatural,unlucky,truths,traumatized,tasting,swears,strawberries,steaks,stats,skank,seducing,secretive,scumbag,screwdriver,schedules,rooting,rightfully,rattled,qualifies,puppets,prospects,pronto,posse,polling,pedestal,palms,muddy,morty,microscope,merci,lecturing,inject,incriminate,hygiene,grapefruit,gazebo,funnier,cuter,bossy,booby,aides,zende,winthrop,warrants,valentines,undressed,underage,truthfully,tampered,suffers,speechless,sparkling,sidelines,shrek,railing,puberty,pesky,outrage,outdoors,motions,moods,lunches,litter,kidnappers,itching,intuition,imitation,humility,hassling,gallons,drugstore,dosage,disrupt,dipping,deranged,debating,cuckoo,cremated,craziness,cooperating,circumstantial,chimney,blinking,biscuits,admiring,weeping,triad,trashy,soothing,slumber,slayers,skirts,siren,shindig,sentiment,rosco,riddance,quaid,purity,proceeding,pretzels,panicking,mckechnie,lovin,leaked,intruding,impersonating,ignorance,hamburgers,footprints,fluke,fleas,festivities,fences,feisty,evacuate,emergencies,deceived,creeping,craziest,corpses,conned,coincidences,bounced,bodyguards,blasted,bitterness,baloney,ashtray,apocalypse,zillion,watergate,wallpaper,telesave,sympathize,sweeter,startin,spades,sodas,snowed,sleepover,signor,seein,retainer,restroom,rested,repercussions,reliving,reconcile,prevail,preaching,overreact,o'neil,noose,moustache,manicure,maids,landlady,hypothetical,hopped,homesick,hives,hesitation,herbs,hectic,heartbreak,haunting,gangs,frown,fingerprint,exhausting,everytime,disregard,cling,chevron,chaperone,blinding,bitty,beads,battling,badgering,anticipation,upstanding,unprofessional,unhealthy,turmoil,truthful,toothpaste,tippin,thoughtless,tagataya,shooters,senseless,rewarding,propane,preposterous,pigeons,pastry,overhearing,obscene,negotiable,loner,jogging,itchy,insinuating,insides,hospitality,hormone,hearst,forthcoming,fists,fifties,etiquette,endings,destroys,despises,deprived,cuddy,crust,cloak,circumstance,chewed,casserole,bidder,bearer,artoo,applaud,appalling,vowed,virgins,vigilante,undone,throttle,testosterone,tailor,symptom,swoop,suitcases,stomp,sticker,stakeout,spoiling,snatched,smoochy,smitten,shameless,restraints,researching,renew,refund,reclaim,raoul,puzzles,purposely,punks,prosecuted,plaid,picturing,pickin,parasites,mysteriously,multiply,mascara,jukebox,interruptions,gunfire,furnace,elbows,duplicate,drapes,deliberate,decoy,cryptic,coupla,condemn,complicate,colossal,clerks,clarity,brushed,banished,argon,alarmed,worships,versa,uncanny,technicality,sundae,stumble,stripping,shuts,schmuck,satin,saliva,robber,relentless,reconnect,recipes,rearrange,rainy,psychiatrists,policemen,plunge,plugged,patched,overload,o'malley,mindless,menus,lullaby,lotte,leavin,killin,karinsky,invalid,hides,grownups,griff,flaws,flashy,flaming,fettes,evicted,dread,degrassi,dealings,dangers,cushion,bowel,barged,abide,abandoning,wonderfully,wait'll,violate,suicidal,stayin,sorted,slamming,sketchy,shoplifting,raiser,quizmaster,prefers,needless,motherhood,momentarily,migraine,lifts,leukemia,leftover,keepin,hinks,hellhole,gowns,goodies,gallon,futures,entertained,eighties,conspiring,cheery,benign,apiece,adjustments,abusive,abduction,wiping,whipping,welles,unspeakable,unidentified,trivial,transcripts,textbook,supervise,superstitious,stricken,stimulating,spielberg,slices,shelves,scratches,sabotaged,retrieval,repressed,rejecting,quickie,ponies,peeking,outraged,o'connell,moping,moaning,mausoleum,licked,kovich,klutz,interrogating,interfered,insulin,infested,incompetence,hyper,horrified,handedly,gekko,fraid,fractured,examiner,eloped,disoriented,dashing,crashdown,courier,cockroach,chipped,brushing,bombed,bolts,baths,baptized,astronaut,assurance,anemia,abuela,abiding,withholding,weave,wearin,weaker,suffocating,straws,straightforward,stench,steamed,starboard,sideways,shrinks,shortcut,scram,roasted,roaming,riviera,respectfully,repulsive,psychiatry,provoked,penitentiary,painkillers,ninotchka,mitzvah,milligrams,midge,marshmallows,looky,lapse,kubelik,intellect,improvise,implant,goa'ulds,giddy,geniuses,fruitcake,footing,fightin,drinkin,doork,detour,cuddle,crashes,combo,colonnade,cheats,cetera,bailiff,auditioning,assed,amused,alienate,aiding,aching,unwanted,topless,tongues,tiniest,superiors,soften,sheldrake,rawley,raisins,presses,plaster,nessa,narrowed,minions,merciful,lawsuits,intimidating,infirmary,inconvenient,imposter,hugged,honoring,holdin,hades,godforsaken,fumes,forgery,foolproof,folder,flattery,fingertips,exterminator,explodes,eccentric,dodging,disguised,crave,constructive,concealed,compartment,chute,chinpokomon,bodily,astronauts,alimony,accustomed,abdominal,wrinkle,wallow,valium,untrue,uncover,trembling,treasures,torched,toenails,timed,termites,telly,taunting,taransky,talker,succubus,smarts,sliding,sighting,semen,seizures,scarred,savvy,sauna,saddest,sacrificing,rubbish,riled,ratted,rationally,provenance,phonse,perky,pedal,overdose,nasal,nanites,mushy,movers,missus,midterm,merits,melodramatic,manure,knitting,invading,interpol,incapacitated,hotline,hauling,gunpoint,grail,ganza,framing,flannel,faded,eavesdrop,desserts,calories,breathtaking,bleak,blacked,batter,aggravated,yanked,wigand,whoah,unwind,undoubtedly,unattractive,twitch,trimester,torrance,timetable,taxpayers,strained,stared,slapping,sincerity,siding,shenanigans,shacking,sappy,samaritan,poorer,politely,paste,oysters,overruled,nightcap,mosquito,millimeter,merrier,manhood,lucked,kilos,ignition,hauled,harmed,goodwill,freshmen,fenmore,fasten,farce,exploding,erratic,drunks,ditching,d'artagnan,cramped,contacting,closets,clientele,chimp,bargained,arranging,anesthesia,amuse,altering,afternoons,accountable,abetting,wolek,waved,uneasy,toddy,tattooed,spauldings,sliced,sirens,schibetta,scatter,rinse,remedy,redemption,pleasures,optimism,oblige,mmmmm,masked,malicious,mailing,kosher,kiddies,judas,isolate,insecurity,incidentally,heals,headlights,growl,grilling,glazed,flunk,floats,fiery,fairness,exercising,excellency,disclosure,cupboard,counterfeit,condescending,conclusive,clicked,cleans,cholesterol,cashed,broccoli,brats,blueprints,blindfold,billing,attach,appalled,alrighty,wynant,unsolved,unreliable,toots,tighten,sweatshirt,steinbrenner,steamy,spouse,sonogram,slots,sleepless,shines,retaliate,rephrase,redeem,rambling,quilt,quarrel,prying,proverbial,priced,prescribe,prepped,pranks,possessive,plaintiff,pediatrics,overlooked,outcast,nightgown,mumbo,mediocre,mademoiselle,lunchtime,lifesaver,leaned,lambs,interns,hounding,hellmouth,hahaha,goner,ghoul,gardening,frenzy,foyer,extras,exaggerate,everlasting,enlightened,dialed,devote,deceitful,d'oeuvres,cosmetic,contaminated,conspired,conning,cavern,carving,butting,boiled,blurry,babysit,ascension,aaaaah,wildly,whoopee,whiny,weiskopf,walkie,vultures,vacations,upfront,unresolved,tampering,stockholders,snaps,sleepwalking,shrunk,sermon,seduction,scams,revolve,phenomenal,patrolling,paranormal,ounces,omigod,nightfall,lashing,innocents,infierno,incision,humming,haunts,gloss,gloating,frannie,fetal,feeny,entrapment,discomfort,detonator,dependable,concede,complication,commotion,commence,chulak,caucasian,casually,brainer,bolie,ballpark,anwar,analyzing,accommodations,youse,wring,wallowing,transgenics,thrive,tedious,stylish,strippers,sterile,squeezing,squeaky,sprained,solemn,snoring,shattering,shabby,seams,scrawny,revoked,residue,reeks,recite,ranting,quoting,predicament,plugs,pinpoint,petrified,pathological,passports,oughtta,nighter,navigate,kippie,intrigue,intentional,insufferable,hunky,how've,horrifying,hearty,hamptons,grazie,funerals,forks,fetched,excruciating,enjoyable,endanger,dumber,drying,diabolical,crossword,corry,comprehend,clipped,classmates,candlelight,brutally,brutality,boarded,bathrobe,authorize,assemble,aerobics,wholesome,whiff,vermin,trophies,trait,tragically,toying,testy,tasteful,stocked,spinach,sipping,sidetracked,scrubbing,scraping,sanctity,robberies,ridin,retribution,refrain,realities,radiant,protesting,projector,plutonium,payin,parting,o'reilly,nooooo,motherfucking,measly,manic,lalita,juggling,jerking,intro,inevitably,hypnosis,huddle,horrendous,hobbies,heartfelt,harlin,hairdresser,gonorrhea,fussing,furtwangler,fleeting,flawless,flashed,fetus,eulogy,distinctly,disrespectful,denies,crossbow,cregg,crabs,cowardly,contraction,contingency,confirming,condone,coffins,cleansing,cheesecake,certainty,cages,c'est,briefed,bravest,bosom,boils,binoculars,bachelorette,appetizer,ambushed,alerted,woozy,withhold,vulgar,utmost,unleashed,unholy,unhappiness,unconditional,typewriter,typed,twists,supermodel,subpoenaed,stringing,skeptical,schoolgirl,romantically,rocked,revoir,reopen,puncture,preach,polished,planetarium,penicillin,peacefully,nurturing,more'n,mmhmm,midgets,marklar,lodged,lifeline,jellyfish,infiltrate,hutch,horseback,heist,gents,frickin,freezes,forfeit,flakes,flair,fathered,eternally,epiphany,disgruntled,discouraged,delinquent,decipher,danvers,cubes,credible,coping,chills,cherished,catastrophe,bombshell,birthright,billionaire,ample,affections,admiration,abbotts,whatnot,watering,vinegar,unthinkable,unseen,unprepared,unorthodox,underhanded,uncool,timeless,thump,thermometer,theoretically,tapping,tagged,swung,stares,spiked,solves,smuggle,scarier,saucer,quitter,prudent,powdered,poked,pointers,peril,penetrate,penance,opium,nudge,nostrils,neurological,mockery,mobster,medically,loudly,insights,implicate,hypocritical,humanly,holiness,healthier,hammered,haldeman,gunman,gloom,freshly,francs,flunked,flawed,emptiness,drugging,dozer,derevko,deprive,deodorant,cryin,crocodile,coloring,colder,cognac,clocked,clippings,charades,chanting,certifiable,caterers,brute,brochures,botched,blinders,bitchin,banter,woken,ulcer,tread,thankfully,swine,swimsuit,swans,stressing,steaming,stamped,stabilize,squirm,snooze,shuffle,shredded,seafood,scratchy,savor,sadistic,rhetorical,revlon,realist,prosecuting,prophecies,polyester,petals,persuasion,paddles,o'leary,nuthin,neighbour,negroes,muster,meningitis,matron,lockers,letterman,legged,indictment,hypnotized,housekeeping,hopelessly,hallucinations,grader,goldilocks,girly,flask,envelopes,downside,doves,dissolve,discourage,disapprove,diabetic,deliveries,decorator,crossfire,criminally,containment,comrades,complimentary,chatter,catchy,cashier,cartel,caribou,cardiologist,brawl,booted,barbershop,aryan,angst,administer,zellie,wreak,whistles,vandalism,vamps,uterus,upstate,unstoppable,understudy,tristin,transcript,tranquilizer,toxins,tonsils,stempel,spotting,spectator,spatula,softer,snotty,slinging,showered,sexiest,sensual,sadder,rimbaud,restrain,resilient,remission,reinstate,rehash,recollection,rabies,popsicle,plausible,pediatric,patronizing,ostrich,ortolani,oooooh,omelette,mistrial,marseilles,loophole,laughin,kevvy,irritated,infidelity,hypothermia,horrific,groupie,grinding,graceful,goodspeed,gestures,frantic,extradition,echelon,disks,dawnie,dared,damsel,curled,collateral,collage,chant,calculating,bumping,bribes,boardwalk,blinds,blindly,bleeds,bickering,beasts,backside,avenge,apprehended,anguish,abusing,youthful,yells,yanking,whomever,when'd,vomiting,vengeful,unpacking,unfamiliar,undying,tumble,trolls,treacherous,tipping,tantrum,tanked,summons,straps,stomped,stinkin,stings,staked,squirrels,sprinkles,speculate,sorting,skinned,sicko,sicker,shootin,shatter,seeya,schnapps,s'posed,ronee,respectful,regroup,regretting,reeling,reckoned,ramifications,puddy,projections,preschool,plissken,platonic,permalash,outdone,outburst,mutants,mugging,misfortune,miserably,miraculously,medications,margaritas,manpower,lovemaking,logically,leeches,latrine,kneel,inflict,impostor,hypocrisy,hippies,heterosexual,heightened,hecuba,healer,gunned,grooming,groin,gooey,gloomy,frying,friendships,fredo,firepower,fathom,exhaustion,evils,endeavor,eggnog,dreaded,d'arcy,crotch,coughing,coronary,cookin,consummate,congrats,companionship,caved,caspar,bulletproof,brilliance,breakin,brash,blasting,aloud,airtight,advising,advertise,adultery,aches,wronged,upbeat,trillion,thingies,tending,tarts,surreal,specs,specialize,spade,shrew,shaping,selves,schoolwork,roomie,recuperating,rabid,quart,provocative,proudly,pretenses,prenatal,pharmaceuticals,pacing,overworked,originals,nicotine,murderous,mileage,mayonnaise,massages,losin,interrogated,injunction,impartial,homing,heartbreaker,hacks,glands,giver,fraizh,flips,flaunt,englishman,electrocuted,dusting,ducking,drifted,donating,cylon,crutches,crates,cowards,comfortably,chummy,chitchat,childbirth,businesswoman,brood,blatant,bethy,barring,bagged,awakened,asbestos,airplanes,worshipped,winnings,why're,visualize,unprotected,unleash,trays,thicker,therapists,takeoff,streisand,storeroom,stethoscope,stacked,spiteful,sneaks,snapping,slaughtered,slashed,simplest,silverware,shits,secluded,scruples,scrubs,scraps,ruptured,roaring,receptionist,recap,raditch,radiator,pushover,plastered,pharmacist,perverse,perpetrator,ornament,ointment,nineties,napping,nannies,mousse,moors,momentary,misunderstandings,manipulator,malfunction,laced,kivar,kickin,infuriating,impressionable,holdup,hires,hesitated,headphones,hammering,groundwork,grotesque,graces,gauze,gangsters,frivolous,freeing,fours,forwarding,ferrars,faulty,fantasizing,extracurricular,empathy,divorces,detonate,depraved,demeaning,deadlines,dalai,cursing,cufflink,crows,coupons,comforted,claustrophobic,casinos,camped,busboy,bluth,bennetts,baskets,attacker,aplastic,angrier,affectionate,zapped,wormhole,weaken,unrealistic,unravel,unimportant,unforgettable,twain,suspend,superbowl,stutter,stewardess,stepson,standin,spandex,souvenirs,sociopath,skeletons,shivering,sexier,selfishness,scrapbook,ritalin,ribbons,reunite,remarry,relaxation,rattling,rapist,psychosis,prepping,poses,pleasing,pisses,piling,persecuted,padded,operatives,negotiator,natty,menopause,mennihan,martimmys,loyalties,laynie,lando,justifies,intimately,inexperienced,impotent,immortality,horrors,hooky,hinges,heartbreaking,handcuffed,gypsies,guacamole,grovel,graziella,goggles,gestapo,fussy,ferragamo,feeble,eyesight,explosions,experimenting,enchanting,doubtful,dizziness,dismantle,detectors,deserving,defective,dangling,dancin,crumble,creamed,cramping,conceal,clockwork,chrissakes,chrissake,chopping,cabinets,brooding,bonfire,blurt,bloated,blackmailer,beforehand,bathed,bathe,barcode,banish,badges,babble,await,attentive,aroused,antibodies,animosity,ya'll,wrinkled,wonderland,willed,whisk,waltzing,waitressing,vigilant,upbringing,unselfish,uncles,trendy,trajectory,striped,stamina,stalled,staking,stacks,spoils,snuff,snooty,snide,shrinking,senora,secretaries,scoundrel,saline,salads,rundown,riddles,relapse,recommending,raspberry,plight,pecan,pantry,overslept,ornaments,niner,negligent,negligence,nailing,mucho,mouthed,monstrous,malpractice,lowly,loitering,logged,lingering,lettin,lattes,kamal,juror,jillefsky,jacked,irritate,intrusion,insatiable,infect,impromptu,icing,hmmmm,hefty,gasket,frightens,flapping,firstborn,faucet,estranged,envious,dopey,doesn,disposition,disposable,disappointments,dipped,dignified,deceit,dealership,deadbeat,curses,coven,counselors,concierge,clutches,casbah,callous,cahoots,brotherly,britches,brides,bethie,beige,autographed,attendants,attaboy,astonishing,appreciative,antibiotic,aneurysm,afterlife,affidavit,zoning,whats,whaddaya,vasectomy,unsuspecting,toula,topanga,tonio,toasted,tiring,terrorized,tenderness,tailing,sweats,suffocated,sucky,subconsciously,starvin,sprouts,spineless,sorrows,snowstorm,smirk,slicery,sledding,slander,simmer,signora,sigmund,seventies,sedate,scented,sandals,rollers,retraction,resigning,recuperate,receptive,racketeering,queasy,provoking,priors,prerogative,premed,pinched,pendant,outsiders,orbing,opportunist,olanov,neurologist,nanobot,mommies,molested,misread,mannered,laundromat,intercom,inspect,insanely,infatuation,indulgent,indiscretion,inconsiderate,hurrah,howling,herpes,hasta,harassed,hanukkah,groveling,groosalug,gander,galactica,futile,fridays,flier,fixes,exploiting,exorcism,evasive,endorse,emptied,dreary,dreamy,downloaded,dodged,doctored,disobeyed,disneyland,disable,dehydrated,contemplating,coconuts,cockroaches,clogged,chilling,chaperon,cameraman,bulbs,bucklands,bribing,brava,bracelets,bowels,bluepoint,appetizers,appendix,antics,anointed,analogy,almonds,yammering,winch,weirdness,wangler,vibrations,vendor,unmarked,unannounced,twerp,trespass,travesty,transfusion,trainee,towelie,tiresome,straightening,staggering,sonar,socializing,sinus,sinners,shambles,serene,scraped,scones,scepter,sarris,saberhagen,ridiculously,ridicule,rents,reconciled,radios,publicist,pubes,prune,prude,precrime,postponing,pluck,perish,peppermint,peeled,overdo,nutshell,nostalgic,mulan,mouthing,mistook,meddle,maybourne,martimmy,lobotomy,livelihood,lippman,likeness,kindest,kaffee,jocks,jerked,jeopardizing,jazzed,insured,inquisition,inhale,ingenious,holier,helmets,heirloom,heinous,haste,harmsway,hardship,hanky,gutters,gruesome,groping,goofing,godson,glare,finesse,figuratively,ferrie,endangerment,dreading,dozed,dorky,dmitri,divert,discredit,dialing,cufflinks,crutch,craps,corrupted,cocoon,cleavage,cannery,bystander,brushes,bruising,bribery,brainstorm,bolted,binge,ballistics,astute,arroway,adventurous,adoptive,addicts,addictive,yadda,whitelighters,wematanye,weeds,wedlock,wallets,vulnerability,vroom,vents,upped,unsettling,unharmed,trippin,trifle,tracing,tormenting,thats,syphilis,subtext,stickin,spices,sores,smacked,slumming,sinks,signore,shitting,shameful,shacked,septic,seedy,righteousness,relish,rectify,ravishing,quickest,phoebs,perverted,peeing,pedicure,pastrami,passionately,ozone,outnumbered,oregano,offender,nukes,nosed,nighty,nifty,mounties,motivate,moons,misinterpreted,mercenary,mentality,marsellus,lupus,lumbar,lovesick,lobsters,leaky,laundering,latch,jafar,instinctively,inspires,indoors,incarcerated,hundredth,handkerchief,gynecologist,guittierez,groundhog,grinning,goodbyes,geese,fullest,eyelashes,eyelash,enquirer,endlessly,elusive,disarm,detest,deluding,dangle,cotillion,corsage,conjugal,confessional,cones,commandment,coded,coals,chuckle,christmastime,cheeseburgers,chardonnay,celery,campfire,calming,burritos,brundle,broflovski,brighten,borderline,blinked,bling,beauties,bauers,battered,articulate,alienated,ahhhhh,agamemnon,accountants,y'see,wrongful,wrapper,workaholic,winnebago,whispered,warts,vacate,unworthy,unanswered,tonane,tolerated,throwin,throbbing,thrills,thorns,thereof,there've,tarot,sunscreen,stretcher,stereotype,soggy,sobbing,sizable,sightings,shucks,shrapnel,sever,senile,seaboard,scorned,saver,rebellious,rained,putty,prenup,pores,pinching,pertinent,peeping,paints,ovulating,opposites,occult,nutcracker,nutcase,newsstand,newfound,mocked,midterms,marshmallow,marbury,maclaren,leans,krudski,knowingly,keycard,junkies,juilliard,jolinar,irritable,invaluable,inuit,intoxicating,instruct,insolent,inexcusable,incubator,illustrious,hunsecker,houseguest,homosexuals,homeroom,hernia,harming,handgun,hallways,hallucination,gunshots,groupies,groggy,goiter,gingerbread,giggling,frigging,fledged,fedex,fairies,exchanging,exaggeration,esteemed,enlist,drags,dispense,disloyal,disconnect,desks,dentists,delacroix,degenerate,daydreaming,cushions,cuddly,corroborate,complexion,compensated,cobbler,closeness,chilled,checkmate,channing,carousel,calms,bylaws,benefactor,ballgame,baiting,backstabbing,artifact,airspace,adversary,actin,accuses,accelerant,abundantly,abstinence,zissou,zandt,yapping,witchy,willows,whadaya,vilandra,veiled,undress,undivided,underestimating,ultimatums,twirl,truckload,tremble,toasting,tingling,tents,tempered,sulking,stunk,sponges,spills,softly,snipers,scourge,rooftop,riana,revolting,revisit,refreshments,redecorating,recapture,raysy,pretense,prejudiced,precogs,pouting,poofs,pimple,piles,pediatrician,padre,packets,paces,orvelle,oblivious,objectivity,nighttime,nervosa,mexicans,meurice,melts,matchmaker,maeby,lugosi,lipnik,leprechaun,kissy,kafka,introductions,intestines,inspirational,insightful,inseparable,injections,inadvertently,hussy,huckabees,hittin,hemorrhaging,headin,haystack,hallowed,grudges,granilith,grandkids,grading,gracefully,godsend,gobbles,fragrance,fliers,finchley,farts,eyewitnesses,expendable,existential,dorms,delaying,degrading,deduction,darlings,danes,cylons,counsellor,contraire,consciously,conjuring,congratulating,cokes,buffay,brooch,bitching,bistro,bijou,bewitched,benevolent,bends,bearings,barren,aptitude,amish,amazes,abomination,worldly,whispers,whadda,wayward,wailing,vanishing,upscale,untouchable,unspoken,uncontrollable,unavoidable,unattended,trite,transvestite,toupee,timid,timers,terrorizing,swana,stumped,strolling,storybook,storming,stomachs,stoked,stationery,springtime,spontaneity,spits,spins,soaps,sentiments,scramble,scone,rooftops,retract,reflexes,rawdon,ragged,quirky,quantico,psychologically,prodigal,pounce,potty,pleasantries,pints,petting,perceive,onstage,notwithstanding,nibble,newmans,neutralize,mutilated,millionaires,mayflower,masquerade,mangy,macreedy,lunatics,lovable,locating,limping,lasagna,kwang,keepers,juvie,jaded,ironing,intuitive,intensely,insure,incantation,hysteria,hypnotize,humping,happenin,griet,grasping,glorified,ganging,g'night,focker,flunking,flimsy,flaunting,fixated,fitzwallace,fainting,eyebrow,exonerated,ether,electrician,egotistical,earthly,dusted,dignify,detonation,debrief,dazzling,dan'l,damnedest,daisies,crushes,crucify,contraband,confronting,collapsing,cocked,clicks,cliche,circled,chandelier,carburetor,callers,broads,breathes,bloodshed,blindsided,blabbing,bialystock,bashing,ballerina,aviva,arteries,anomaly,airstrip,agonizing,adjourn,aaaaa,yearning,wrecker,witnessing,whence,warhead,unsure,unheard,unfreeze,unfold,unbalanced,ugliest,troublemaker,toddler,tiptoe,threesome,thirties,thermostat,swipe,surgically,subtlety,stung,stumbling,stubs,stride,strangling,sprayed,socket,smuggled,showering,shhhhh,sabotaging,rumson,rounding,risotto,repairman,rehearsed,ratty,ragging,radiology,racquetball,racking,quieter,quicksand,prowl,prompt,premeditated,prematurely,prancing,porcupine,plated,pinocchio,peeked,peddle,panting,overweight,overrun,outing,outgrown,obsess,nursed,nodding,negativity,negatives,musketeers,mugger,motorcade,merrily,matured,masquerading,marvellous,maniacs,lovey,louse,linger,lilies,lawful,kudos,knuckle,juices,judgments,itches,intolerable,intermission,inept,incarceration,implication,imaginative,huckleberry,holster,heartburn,gunna,groomed,graciously,fulfillment,fugitives,forsaking,forgives,foreseeable,flavors,flares,fixation,fickle,fantasize,famished,fades,expiration,exclamation,erasing,eiffel,eerie,earful,duped,dulles,dissing,dissect,dispenser,dilated,detergent,desdemona,debriefing,damper,curing,crispina,crackpot,courting,cordial,conflicted,comprehension,commie,cleanup,chiropractor,charmer,chariot,cauldron,catatonic,bullied,buckets,brilliantly,breathed,booths,boardroom,blowout,blindness,blazing,biologically,bibles,biased,beseech,barbaric,balraj,audacity,anticipating,alcoholics,airhead,agendas,admittedly,absolution,youre,yippee,wittlesey,withheld,willful,whammy,weakest,washes,virtuous,videotapes,vials,unplugged,unpacked,unfairly,turbulence,tumbling,tricking,tremendously,traitors,torches,tinga,thyroid,teased,tawdry,taker,sympathies,swiped,sundaes,suave,strut,stepdad,spewing,spasm,socialize,slither,simulator,shutters,shrewd,shocks,semantics,schizophrenic,scans,savages,rya'c,runny,ruckus,royally,roadblocks,rewriting,revoke,repent,redecorate,recovers,recourse,ratched,ramali,racquet,quince,quiche,puppeteer,puking,puffed,problemo,praises,pouch,postcards,pooped,poised,piled,phoney,phobia,patching,parenthood,pardner,oozing,ohhhhh,numbing,nostril,nosey,neatly,nappa,nameless,mortuary,moronic,modesty,midwife,mcclane,matuka,maitre,lumps,lucid,loosened,loins,lawnmower,lamotta,kroehner,jinxy,jessep,jamming,jailhouse,jacking,intruders,inhuman,infatuated,indigestion,implore,implanted,hormonal,hoboken,hillbilly,heartwarming,headway,hatched,hartmans,harping,grapevine,gnome,forties,flyin,flirted,fingernail,exhilarating,enjoyment,embark,dumper,dubious,drell,docking,disillusioned,dishonor,disbarred,dicey,custodial,counterproductive,corned,cords,contemplate,concur,conceivable,cobblepot,chickened,checkout,carpe,cap'n,campers,buyin,bullies,braid,boxed,bouncy,blueberries,blubbering,bloodstream,bigamy,beeped,bearable,autographs,alarming,wretch,wimps,widower,whirlwind,whirl,warms,vandelay,unveiling,undoing,unbecoming,turnaround,touche,togetherness,tickles,ticker,teensy,taunt,sweethearts,stitched,standpoint,staffers,spotless,soothe,smothered,sickening,shouted,shepherds,shawl,seriousness,schooled,schoolboy,s'mores,roped,reminders,raggedy,preemptive,plucked,pheromones,particulars,pardoned,overpriced,overbearing,outrun,ohmigod,nosing,nicked,neanderthal,mosquitoes,mortified,milky,messin,mecha,markinson,marivellas,mannequin,manderley,madder,macready,lookie,locusts,lifetimes,lanna,lakhi,kholi,impersonate,hyperdrive,horrid,hopin,hogging,hearsay,harpy,harboring,hairdo,hafta,grasshopper,gobble,gatehouse,foosball,floozy,fished,firewood,finalize,felons,euphemism,entourage,elitist,elegance,drokken,drier,dredge,dossier,diseased,diarrhea,diagnose,despised,defuse,d'amour,contesting,conserve,conscientious,conjured,collars,clogs,chenille,chatty,chamomile,casing,calculator,brittle,breached,blurted,birthing,bikinis,astounding,assaulting,aroma,appliance,antsy,amnio,alienating,aliases,adolescence,xerox,wrongs,workload,willona,whistling,werewolves,wallaby,unwelcome,unseemly,unplug,undermining,ugliness,tyranny,tuesdays,trumpets,transference,ticks,tangible,tagging,swallowing,superheroes,studs,strep,stowed,stomping,steffy,sprain,spouting,sponsoring,sneezing,smeared,slink,shakin,sewed,seatbelt,scariest,scammed,sanctimonious,roasting,rightly,retinal,rethinking,resented,reruns,remover,racks,purest,progressing,presidente,preeclampsia,postponement,portals,poppa,pliers,pinning,pelvic,pampered,padding,overjoyed,ooooo,one'll,octavius,nonono,nicknames,neurosurgeon,narrows,misled,mislead,mishap,milltown,milking,meticulous,mediocrity,meatballs,machete,lurch,layin,knockin,khruschev,jurors,jumpin,jugular,jeweler,intellectually,inquiries,indulging,indestructible,indebted,imitate,ignores,hyperventilating,hyenas,hurrying,hermano,hellish,heheh,harshly,handout,grunemann,glances,giveaway,getup,gerome,furthest,frosting,frail,forwarded,forceful,flavored,flammable,flaky,fingered,fatherly,ethic,embezzlement,duffel,dotted,distressed,disobey,disappearances,dinky,diminish,diaphragm,deuces,creme,courteous,comforts,coerced,clots,clarification,chunks,chickie,chases,chaperoning,cartons,caper,calves,caged,bustin,bulging,bringin,boomhauer,blowin,blindfolded,biscotti,ballplayer,bagging,auster,assurances,aschen,arraigned,anonymity,alters,albatross,agreeable,adoring,abduct,wolfi,weirded,watchers,washroom,warheads,vincennes,urgency,understandably,uncomplicated,uhhhh,twitching,treadmill,thermos,tenorman,tangle,talkative,swarm,surrendering,summoning,strive,stilts,stickers,squashed,spraying,sparring,soaring,snort,sneezed,slaps,skanky,singin,sidle,shreck,shortness,shorthand,sharper,shamed,sadist,rydell,rusik,roulette,resumes,respiration,recount,reacts,purgatory,princesses,presentable,ponytail,plotted,pinot,pigtails,phillippe,peddling,paroled,orbed,offends,o'hara,moonlit,minefield,metaphors,malignant,mainframe,magicks,maggots,maclaine,loathing,leper,leaps,leaping,lashed,larch,larceny,lapses,ladyship,juncture,jiffy,jakov,invoke,infantile,inadmissible,horoscope,hinting,hideaway,hesitating,heddy,heckles,hairline,gripe,gratifying,governess,goebbels,freddo,foresee,fascination,exemplary,executioner,etcetera,escorts,endearing,eaters,earplugs,draped,disrupting,disagrees,dimes,devastate,detain,depositions,delicacy,darklighter,cynicism,cyanide,cutters,cronus,continuance,conquering,confiding,compartments,combing,cofell,clingy,cleanse,christmases,cheered,cheekbones,buttle,burdened,bruenell,broomstick,brained,bozos,bontecou,bluntman,blazes,blameless,bizarro,bellboy,beaucoup,barkeep,awaken,astray,assailant,appease,aphrodisiac,alleys,yesss,wrecks,woodpecker,wondrous,wimpy,willpower,wheeling,weepy,waxing,waive,videotaped,veritable,untouched,unlisted,unfounded,unforeseen,twinge,triggers,traipsing,toxin,tombstone,thumping,therein,testicles,telephones,tarmac,talby,tackled,swirling,suicides,suckered,subtitles,sturdy,strangler,stockbroker,stitching,steered,standup,squeal,sprinkler,spontaneously,splendor,spiking,spender,snipe,snagged,skimming,siddown,showroom,shovels,shotguns,shoelaces,shitload,shellfish,sharpest,shadowy,seizing,scrounge,scapegoat,sayonara,saddled,rummaging,roomful,renounce,reconsidered,recharge,realistically,radioed,quirks,quadrant,punctual,practising,pours,poolhouse,poltergeist,pocketbook,plainly,picnics,pesto,pawing,passageway,partied,oneself,numero,nostalgia,nitwit,neuro,mixer,meanest,mcbeal,matinee,margate,marce,manipulations,manhunt,manger,magicians,loafers,litvack,lightheaded,lifeguard,lawns,laughingstock,ingested,indignation,inconceivable,imposition,impersonal,imbecile,huddled,housewarming,horizons,homicides,hiccups,hearse,hardened,gushing,gushie,greased,goddamit,freelancer,forging,fondue,flustered,flung,flinch,flicker,fixin,festivus,fertilizer,farted,faggots,exonerate,evict,enormously,encrypted,emdash,embracing,duress,dupres,dowser,doormat,disfigured,disciplined,dibbs,depository,deathbed,dazzled,cuttin,cures,crowding,crepe,crammed,copycat,contradict,confidant,condemning,conceited,commute,comatose,clapping,circumference,chuppah,chore,choksondik,chestnuts,briault,bottomless,bonnet,blokes,berluti,beret,beggars,bankroll,bania,athos,arsenic,apperantly,ahhhhhh,afloat,accents,zipped,zeros,zeroes,zamir,yuppie,youngsters,yorkers,wisest,wipes,wield,whyn't,weirdos,wednesdays,vicksburg,upchuck,untraceable,unsupervised,unpleasantness,unhook,unconscionable,uncalled,trappings,tragedies,townie,thurgood,things'll,thine,tetanus,terrorize,temptations,tanning,tampons,swarming,straitjacket,steroid,startling,starry,squander,speculating,sollozzo,sneaked,slugs,skedaddle,sinker,silky,shortcomings,sellin,seasoned,scrubbed,screwup,scrapes,scarves,sandbox,salesmen,rooming,romances,revere,reproach,reprieve,rearranging,ravine,rationalize,raffle,punchy,psychobabble,provocation,profoundly,prescriptions,preferable,polishing,poached,pledges,pirelli,perverts,oversized,overdressed,outdid,nuptials,nefarious,mouthpiece,motels,mopping,mongrel,missin,metaphorically,mertin,memos,melodrama,melancholy,measles,meaner,mantel,maneuvering,mailroom,luring,listenin,lifeless,licks,levon,legwork,kneecaps,kippur,kiddie,kaput,justifiable,insistent,insidious,innuendo,innit,indecent,imaginable,horseshit,hemorrhoid,hella,healthiest,haywire,hamsters,hairbrush,grouchy,grisly,gratuitous,glutton,glimmer,gibberish,ghastly,gentler,generously,geeky,fuhrer,fronting,foolin,faxes,faceless,extinguisher,expel,etched,endangering,ducked,dodgeball,dives,dislocated,discrepancy,devour,derail,dementia,daycare,cynic,crumbling,cowardice,covet,cornwallis,corkscrew,cookbook,commandments,coincidental,cobwebs,clouded,clogging,clicking,clasp,chopsticks,chefs,chaps,cashing,carat,calmer,brazen,brainwashing,bradys,bowing,boned,bloodsucking,bleachers,bleached,bedpan,bearded,barrenger,bachelors,awwww,assures,assigning,asparagus,apprehend,anecdote,amoral,aggravation,afoot,acquaintances,accommodating,yakking,worshipping,wladek,willya,willies,wigged,whoosh,whisked,watered,warpath,volts,violates,valuables,uphill,unwise,untimely,unsavory,unresponsive,unpunished,unexplained,tubby,trolling,toxicology,tormented,toothache,tingly,timmiihh,thursdays,thoreau,terrifies,temperamental,telegrams,talkie,takers,symbiote,swirl,suffocate,stupider,strapping,steckler,springing,someway,sleepyhead,sledgehammer,slant,slams,showgirl,shoveling,shmoopy,sharkbait,shan't,scrambling,schematics,sandeman,sabbatical,rummy,reykjavik,revert,responsive,rescheduled,requisition,relinquish,rejoice,reckoning,recant,rebadow,reassurance,rattlesnake,ramble,primed,pricey,prance,pothole,pocus,persist,perpetrated,pekar,peeling,pastime,parmesan,pacemaker,overdrive,ominous,observant,nothings,noooooo,nonexistent,nodded,nieces,neglecting,nauseating,mutated,musket,mumbling,mowing,mouthful,mooseport,monologue,mistrust,meetin,masseuse,mantini,mailer,madre,lowlifes,locksmith,livid,liven,limos,liberating,lhasa,leniency,leering,laughable,lashes,lasagne,laceration,korben,katan,kalen,jittery,jammies,irreplaceable,intubate,intolerant,inhaler,inhaled,indifferent,indifference,impound,impolite,humbly,heroics,heigh,guillotine,guesthouse,grounding,grips,gossiping,goatee,gnomes,gellar,frutt,frobisher,freudian,foolishness,flagged,femme,fatso,fatherhood,fantasized,fairest,faintest,eyelids,extravagant,extraterrestrial,extraordinarily,escalator,elevate,drivel,dissed,dismal,disarray,dinnertime,devastation,dermatologist,delicately,defrost,debutante,debacle,damone,dainty,cuvee,culpa,crucified,creeped,crayons,courtship,convene,congresswoman,concocted,compromises,comprende,comma,coleslaw,clothed,clinically,chickenshit,checkin,cesspool,caskets,calzone,brothel,boomerang,bodega,blasphemy,bitsy,bicentennial,berlini,beatin,beards,barbas,barbarians,backpacking,arrhythmia,arousing,arbitrator,antagonize,angling,anesthetic,altercation,aggressor,adversity,acathla,aaahhh,wreaking,workup,wonderin,wither,wielding,what'm,what'cha,waxed,vibrating,veterinarian,venting,vasey,valor,validate,upholstery,untied,unscathed,uninterrupted,unforgiving,undies,uncut,twinkies,tucking,treatable,treasured,tranquility,townspeople,torso,tomei,tipsy,tinsel,tidings,thirtieth,tantrums,tamper,talky,swayed,swapping,suitor,stylist,stirs,standoff,sprinklers,sparkly,snobby,snatcher,smoother,sleepin,shrug,shoebox,sheesh,shackles,setbacks,sedatives,screeching,scorched,scanned,satyr,roadblock,riverbank,ridiculed,resentful,repellent,recreate,reconvene,rebuttal,realmedia,quizzes,questionnaire,punctured,pucker,prolong,professionalism,pleasantly,pigsty,penniless,paychecks,patiently,parading,overactive,ovaries,orderlies,oracles,oiled,offending,nudie,neonatal,neighborly,moops,moonlighting,mobilize,mmmmmm,milkshake,menial,meats,mayan,maxed,mangled,magua,lunacy,luckier,liters,lansbury,kooky,knowin,jeopardized,inkling,inhalation,inflated,infecting,incense,inbound,impractical,impenetrable,idealistic,i'mma,hypocrites,hurtin,humbled,hologram,hokey,hocus,hitchhiking,hemorrhoids,headhunter,hassled,harts,hardworking,haircuts,hacksaw,genitals,gazillion,gammy,gamesphere,fugue,footwear,folly,flashlights,fives,filet,extenuating,estrogen,entails,embezzled,eloquent,egomaniac,ducts,drowsy,drones,doree,donovon,disguises,diggin,deserting,depriving,defying,deductible,decorum,decked,daylights,daybreak,dashboard,damnation,cuddling,crunching,crickets,crazies,councilman,coughed,conundrum,complimented,cohaagen,clutching,clued,clader,cheques,checkpoint,chats,channeling,ceases,carasco,capisce,cantaloupe,cancelling,campsite,burglars,breakfasts,bra'tac,blueprint,bleedin,blabbed,beneficiary,basing,avert,atone,arlyn,approves,apothecary,antiseptic,aleikuum,advisement,zadir,wobbly,withnail,whattaya,whacking,wedged,wanders,vaginal,unimaginable,undeniable,unconditionally,uncharted,unbridled,tweezers,tvmegasite,trumped,triumphant,trimming,treading,tranquilizers,toontown,thunk,suture,suppressing,strays,stonewall,stogie,stepdaughter,stace,squint,spouses,splashed,speakin,sounder,sorrier,sorrel,sombrero,solemnly,softened,snobs,snippy,snare,smoothing,slump,slimeball,slaving,silently,shiller,shakedown,sensations,scrying,scrumptious,screamin,saucy,santoses,roundup,roughed,rosary,robechaux,retrospect,rescind,reprehensible,repel,remodeling,reconsidering,reciprocate,railroaded,psychics,promos,prob'ly,pristine,printout,priestess,prenuptial,precedes,pouty,phoning,peppy,pariah,parched,panes,overloaded,overdoing,nymphs,nother,notebooks,nearing,nearer,monstrosity,milady,mieke,mephesto,medicated,marshals,manilow,mammogram,m'lady,lotsa,loopy,lesion,lenient,learner,laszlo,kross,kinks,jinxed,involuntary,insubordination,ingrate,inflatable,incarnate,inane,hypoglycemia,huntin,humongous,hoodlum,honking,hemorrhage,helpin,hathor,hatching,grotto,grandmama,gorillas,godless,girlish,ghouls,gershwin,frosted,flutter,flagpole,fetching,fatter,faithfully,exert,evasion,escalate,enticing,enchantress,elopement,drills,downtime,downloading,dorks,doorways,divulge,dissociative,disgraceful,disconcerting,deteriorate,destinies,depressive,dented,denim,decruz,decidedly,deactivate,daydreams,curls,culprit,cruelest,crippling,cranberries,corvis,copped,commend,coastguard,cloning,cirque,churning,chock,chivalry,catalogues,cartwheels,carols,canister,buttered,bundt,buljanoff,bubbling,brokers,broaden,brimstone,brainless,bores,badmouthing,autopilot,ascertain,aorta,ampata,allenby,accosted,absolve,aborted,aaagh,aaaaaah,yonder,yellin,wyndham,wrongdoing,woodsboro,wigging,wasteland,warranty,waltzed,walnuts,vividly,veggie,unnecessarily,unloaded,unicorns,understated,unclean,umbrellas,twirling,turpentine,tupperware,triage,treehouse,tidbit,tickled,threes,thousandth,thingie,terminally,teething,tassel,talkies,swoon,switchboard,swerved,suspiciously,subsequentlyne,subscribe,strudel,stroking,strictest,stensland,starin,stannart,squirming,squealing,sorely,softie,snookums,sniveling,smidge,sloth,skulking,simian,sightseeing,siamese,shudder,shoppers,sharpen,shannen,semtex,secondhand,seance,scowl,scorn,safekeeping,russe,rummage,roshman,roomies,roaches,rinds,retrace,retires,resuscitate,rerun,reputations,rekall,refreshment,reenactment,recluse,ravioli,raves,raking,purses,punishable,punchline,puked,prosky,previews,poughkeepsie,poppins,polluted,placenta,pissy,petulant,perseverance,pears,pawns,pastries,partake,panky,palate,overzealous,orchids,obstructing,objectively,obituaries,obedient,nothingness,musty,motherly,mooning,momentous,mistaking,minutemen,milos,microchip,meself,merciless,menelaus,mazel,masturbate,mahogany,lysistrata,lillienfield,likable,liberate,leveled,letdown,larynx,lardass,lainey,lagged,klorel,kidnappings,keyed,karmic,jeebies,irate,invulnerable,intrusive,insemination,inquire,injecting,informative,informants,impure,impasse,imbalance,illiterate,hurled,hunts,hematoma,headstrong,handmade,handiwork,growling,gorky,getcha,gesundheit,gazing,galley,foolishly,fondness,floris,ferocious,feathered,fateful,fancies,fakes,faker,expire,ever'body,essentials,eskimos,enlightening,enchilada,emissary,embolism,elsinore,ecklie,drenched,drazi,doped,dogging,doable,dislikes,dishonesty,disengage,discouraging,derailed,deformed,deflect,defer,deactivated,crips,constellations,congressmen,complimenting,clubbing,clawing,chromium,chimes,chews,cheatin,chaste,cellblock,caving,catered,catacombs,calamari,bucking,brulee,brits,brisk,breezes,bounces,boudoir,binks,better'n,bellied,behrani,behaves,bedding,balmy,badmouth,backers,avenging,aromatherapy,armpit,armoire,anythin,anonymously,anniversaries,aftershave,affliction,adrift,admissible,adieu,acquittal,yucky,yearn,whitter,whirlpool,wendigo,watchdog,wannabes,wakey,vomited,voicemail,valedictorian,uttered,unwed,unrequited,unnoticed,unnerving,unkind,unjust,uniformed,unconfirmed,unadulterated,unaccounted,uglier,turnoff,trampled,tramell,toads,timbuktu,throwback,thimble,tasteless,tarantula,tamale,takeovers,swish,supposing,streaking,stargher,stanzi,stabs,squeamish,splattered,spiritually,spilt,speciality,smacking,skywire,skips,skaara,simpatico,shredding,showin,shortcuts,shite,shielding,shamelessly,serafine,sentimentality,seasick,schemer,scandalous,sainted,riedenschneider,rhyming,revel,retractor,retards,resurrect,remiss,reminiscing,remanded,reiben,regains,refuel,refresher,redoing,redheaded,reassured,rearranged,rapport,qumar,prowling,prejudices,precarious,powwow,pondering,plunger,plunged,pleasantville,playpen,phlegm,perfected,pancreas,paley,ovary,outbursts,oppressed,ooohhh,omoroca,offed,o'toole,nurture,nursemaid,nosebleed,necktie,muttering,munchies,mucking,mogul,mitosis,misdemeanor,miscarried,millionth,migraines,midler,manicurist,mandelbaum,manageable,malfunctioned,magnanimous,loudmouth,longed,lifestyles,liddy,lickety,leprechauns,komako,klute,kennel,justifying,irreversible,inventing,intergalactic,insinuate,inquiring,ingenuity,inconclusive,incessant,improv,impersonation,hyena,humperdinck,hubba,housework,hoffa,hither,hissy,hippy,hijacked,heparin,hellooo,hearth,hassles,hairstyle,hahahaha,hadda,guys'll,gutted,gulls,gritty,grievous,graft,gossamer,gooder,gambled,gadgets,fundamentals,frustrations,frolicking,frock,frilly,foreseen,footloose,fondly,flirtation,flinched,flatten,farthest,exposer,evading,escrow,empathize,embryos,embodiment,ellsberg,ebola,dulcinea,dreamin,drawbacks,doting,doose,doofy,disturbs,disorderly,disgusts,detox,denominator,demeanor,deliriously,decode,debauchery,croissant,cravings,cranked,coworkers,councilor,confuses,confiscate,confines,conduit,compress,combed,clouding,clamps,cinch,chinnery,celebratory,catalogs,carpenters,carnal,canin,bundys,bulldozer,buggers,bueller,brainy,booming,bookstores,bloodbath,bittersweet,bellhop,beeping,beanstalk,beady,baudelaire,bartenders,bargains,averted,armadillo,appreciating,appraised,antlers,aloof,allowances,alleyway,affleck,abject,zilch,youore,xanax,wrenching,wouldn,witted,wicca,whorehouse,whooo,whips,vouchers,victimized,vicodin,untested,unsolicited,unfocused,unfettered,unfeeling,unexplainable,understaffed,underbelly,tutorial,tryst,trampoline,towering,tirade,thieving,thang,swimmin,swayzak,suspecting,superstitions,stubbornness,streamers,strattman,stonewalling,stiffs,stacking,spout,splice,sonrisa,smarmy,slows,slicing,sisterly,shrill,shined,seeming,sedley,seatbelts,scour,scold,schoolyard,scarring,salieri,rustling,roxbury,rewire,revved,retriever,reputable,remodel,reins,reincarnation,rance,rafters,rackets,quail,pumbaa,proclaim,probing,privates,pried,prewedding,premeditation,posturing,posterity,pleasurable,pizzeria,pimps,penmanship,penchant,pelvis,overturn,overstepped,overcoat,ovens,outsmart,outed,ooohh,oncologist,omission,offhand,odour,nyazian,notarized,nobody'll,nightie,navel,nabbed,mystique,mover,mortician,morose,moratorium,mockingbird,mobsters,mingling,methinks,messengered,merde,masochist,martouf,martians,marinara,manray,majorly,magnifying,mackerel,lurid,lugging,lonnegan,loathsome,llantano,liberace,leprosy,latinos,lanterns,lamest,laferette,kraut,intestine,innocencia,inhibitions,ineffectual,indisposed,incurable,inconvenienced,inanimate,improbable,implode,hydrant,hustling,hustled,huevos,how'm,hooey,hoods,honcho,hinge,hijack,heimlich,hamunaptra,haladki,haiku,haggle,gutsy,grunting,grueling,gribbs,greevy,grandstanding,godparents,glows,glistening,gimmick,gaping,fraiser,formalities,foreigner,folders,foggy,fitty,fiends,fe'nos,favours,eyeing,extort,expedite,escalating,epinephrine,entitles,entice,eminence,eights,earthlings,eagerly,dunville,dugout,doublemeat,doling,dispensing,dispatcher,discoloration,diners,diddly,dictates,diazepam,derogatory,delights,defies,decoder,dealio,danson,cutthroat,crumbles,croissants,crematorium,craftsmanship,could'a,cordless,cools,conked,confine,concealing,complicates,communique,cockamamie,coasters,clobbered,clipping,clipboard,clemenza,cleanser,circumcision,chanukah,certainaly,cellmate,cancels,cadmium,buzzed,bumstead,bucko,browsing,broth,braver,boggling,bobbing,blurred,birkhead,benet,belvedere,bellies,begrudge,beckworth,banky,baldness,baggy,babysitters,aversion,astonished,assorted,appetites,angina,amiss,ambulances,alibis,airway,admires,adhesive,yoyou,xxxxxx,wreaked,wracking,woooo,wooing,wised,wilshire,wedgie,waging,violets,vincey,uplifting,untrustworthy,unmitigated,uneventful,undressing,underprivileged,unburden,umbilical,tweaking,turquoise,treachery,tosses,torching,toothpick,toasts,thickens,tereza,tenacious,teldar,taint,swill,sweatin,subtly,subdural,streep,stopwatch,stockholder,stillwater,stalkers,squished,squeegee,splinters,spliced,splat,spied,spackle,sophistication,snapshots,smite,sluggish,slithered,skeeters,sidewalks,sickly,shrugs,shrubbery,shrieking,shitless,settin,sentinels,selfishly,scarcely,sangria,sanctum,sahjhan,rustle,roving,rousing,rosomorf,riddled,responsibly,renoir,remoray,remedial,refundable,redirect,recheck,ravenwood,rationalizing,ramus,ramelle,quivering,pyjamas,psychos,provocations,prouder,protestors,prodded,proctologist,primordial,pricks,prickly,precedents,pentangeli,pathetically,parka,parakeet,panicky,overthruster,outsmarted,orthopedic,oncoming,offing,nutritious,nuthouse,nourishment,nibbling,newlywed,narcissist,mutilation,mundane,mummies,mumble,mowed,morvern,mortem,mopes,molasses,misplace,miscommunication,miney,midlife,menacing,memorizing,massaging,masking,magnets,luxuries,lounging,lothario,liposuction,lidocaine,libbets,levitate,leeway,launcelot,larek,lackeys,kumbaya,kryptonite,knapsack,keyhole,katarangura,juiced,jakey,ironclad,invoice,intertwined,interlude,interferes,injure,infernal,indeedy,incur,incorrigible,incantations,impediment,igloo,hysterectomy,hounded,hollering,hindsight,heebie,havesham,hasenfuss,hankering,hangers,hakuna,gutless,gusto,grubbing,grrrr,grazed,gratification,grandeur,gorak,godammit,gnawing,glanced,frostbite,frees,frazzled,fraulein,fraternizing,fortuneteller,formaldehyde,followup,foggiest,flunky,flickering,firecrackers,figger,fetuses,fates,eyeliner,extremities,extradited,expires,exceedingly,evaporate,erupt,epileptic,entrails,emporium,egregious,eggshells,easing,duwayne,droll,dreyfuss,dovey,doubly,doozy,donkeys,donde,distrust,distressing,disintegrate,discreetly,decapitated,dealin,deader,dashed,darkroom,dares,daddies,dabble,cushy,cupcakes,cuffed,croupier,croak,crapped,coursing,coolers,contaminate,consummated,construed,condos,concoction,compulsion,commish,coercion,clemency,clairvoyant,circulate,chesterton,checkered,charlatan,chaperones,categorically,cataracts,carano,capsules,capitalize,burdon,bullshitting,brewed,breathless,breasted,brainstorming,bossing,borealis,bonsoir,bobka,boast,blimp,bleep,bleeder,blackouts,bisque,billboards,beatings,bayberry,bashed,bamboozled,balding,baklava,baffled,backfires,babak,awkwardness,attest,attachments,apologizes,anyhoo,antiquated,alcante,advisable,aahhh,aaahh,zatarc,yearbooks,wuddya,wringing,womanhood,witless,winging,whatsa,wetting,waterproof,wastin,vogelman,vocation,vindicated,vigilance,vicariously,venza,vacuuming,utensils,uplink,unveil,unloved,unloading,uninhibited,unattached,tweaked,turnips,trinkets,toughen,toting,topside,terrors,terrify,technologically,tarnish,tagliati,szpilman,surly,supple,summation,suckin,stepmom,squeaking,splashmore,souffle,solitaire,solicitation,solarium,smokers,slugged,slobbering,skylight,skimpy,sinuses,silenced,sideburns,shrinkage,shoddy,shhhhhh,shelled,shareef,shangri,seuss,serenade,scuffle,scoff,scanners,sauerkraut,sardines,sarcophagus,salvy,rusted,russells,rowboat,rolfsky,ringside,respectability,reparations,renegotiate,reminisce,reimburse,regimen,raincoat,quibble,puzzled,purposefully,pubic,proofing,prescribing,prelim,poisons,poaching,personalized,personable,peroxide,pentonville,payphone,payoffs,paleontology,overflowing,oompa,oddest,objecting,o'hare,o'daniel,notches,nobody'd,nightstand,neutralized,nervousness,nerdy,needlessly,naquadah,nappy,nantucket,nambla,mountaineer,motherfuckin,morrie,monopolizing,mohel,mistreated,misreading,misbehave,miramax,minivan,milligram,milkshakes,metamorphosis,medics,mattresses,mathesar,matchbook,matata,marys,malucci,magilla,lymphoma,lowers,lordy,linens,lindenmeyer,limelight,leapt,laxative,lather,lapel,lamppost,laguardia,kindling,kegger,kawalsky,juries,jokin,jesminder,interning,innermost,injun,infallible,industrious,indulgence,incinerator,impossibility,impart,illuminate,iguanas,hypnotic,hyped,hospitable,hoses,homemaker,hirschmuller,helpers,headset,guardianship,guapo,grubby,granola,granddaddy,goren,goblet,gluttony,globes,giorno,getter,geritol,gassed,gaggle,foxhole,fouled,foretold,floorboards,flippers,flaked,fireflies,feedings,fashionably,farragut,fallback,facials,exterminate,excites,everything'll,evenin,ethically,ensue,enema,empath,eluded,eloquently,eject,edema,dumpling,droppings,dolled,distasteful,disputing,displeasure,disdain,deterrent,dehydration,defied,decomposing,dawned,dailies,custodian,crusts,crucifix,crowning,crier,crept,craze,crawls,couldn,correcting,corkmaster,copperfield,cooties,contraption,consumes,conspire,consenting,consented,conquers,congeniality,complains,communicator,commendable,collide,coladas,colada,clout,clooney,classifieds,clammy,civility,cirrhosis,chink,catskills,carvers,carpool,carelessness,cardio,carbs,capades,butabi,busmalis,burping,burdens,bunks,buncha,bulldozers,browse,brockovich,breakthroughs,bravado,boogety,blossoms,blooming,bloodsucker,blight,betterton,betrayer,belittle,beeps,bawling,barts,bartending,bankbooks,babish,atropine,assertive,armbrust,anyanka,annoyance,anemic,anago,airwaves,aimlessly,aaargh,aaand,yoghurt,writhing,workable,winking,winded,widen,whooping,whiter,whatya,wazoo,voila,virile,vests,vestibule,versed,vanishes,urkel,uproot,unwarranted,unscheduled,unparalleled,undergrad,tweedle,turtleneck,turban,trickery,transponder,toyed,townhouse,thyself,thunderstorm,thinning,thawed,tether,technicalities,tau'ri,tarnished,taffeta,tacked,systolic,swerve,sweepstakes,swabs,suspenders,superwoman,sunsets,succulent,subpoenas,stumper,stosh,stomachache,stewed,steppin,stepatech,stateside,spicoli,sparing,soulless,sonnets,sockets,snatching,smothering,slush,sloman,slashing,sitters,simpleton,sighs,sidra,sickens,shunned,shrunken,showbiz,shopped,shimmering,shagging,semblance,segue,sedation,scuzzlebutt,scumbags,screwin,scoundrels,scarsdale,scabs,saucers,saintly,saddened,runaways,runaround,rheya,resenting,rehashing,rehabilitated,regrettable,refreshed,redial,reconnecting,ravenous,raping,rafting,quandary,pylea,putrid,puffing,psychopathic,prunes,probate,prayin,pomegranate,plummeting,planing,plagues,pinata,pithy,perversion,personals,perched,peeps,peckish,pavarotti,pajama,packin,pacifier,overstepping,okama,obstetrician,nutso,nuance,normalcy,nonnegotiable,nomak,ninny,nines,nicey,newsflash,neutered,nether,negligee,necrosis,navigating,narcissistic,mylie,muses,momento,moisturizer,moderation,misinformed,misconception,minnifield,mikkos,methodical,mebbe,meager,maybes,matchmaking,masry,markovic,malakai,luzhin,lusting,lumberjack,loopholes,loaning,lightening,leotard,launder,lamaze,kubla,kneeling,kibosh,jumpsuit,joliet,jogger,janover,jakovasaurs,irreparable,innocently,inigo,infomercial,inexplicable,indispensable,impregnated,impossibly,imitating,hunches,hummus,houmfort,hothead,hostiles,hooves,hooligans,homos,homie,hisself,heyyy,hesitant,hangout,handsomest,handouts,hairless,gwennie,guzzling,guinevere,grungy,goading,glaring,gavel,gardino,gangrene,fruitful,friendlier,freckle,freakish,forthright,forearm,footnote,flops,fixer,firecracker,finito,figgered,fezzik,fastened,farfetched,fanciful,familiarize,faire,fahrenheit,extravaganza,exploratory,explanatory,everglades,eunuch,estas,escapade,erasers,emptying,embarassing,dweeb,dutiful,dumplings,dries,drafty,dollhouse,dismissing,disgraced,discrepancies,disbelief,disagreeing,digestion,didnt,deviled,deviated,demerol,delectable,decaying,decadent,dears,dateless,d'algout,cultivating,cryto,crumpled,crumbled,cronies,crease,craves,cozying,corduroy,congratulated,confidante,compressions,complicating,compadre,coerce,classier,chums,chumash,chivalrous,chinpoko,charred,chafing,celibacy,carted,carryin,carpeting,carotid,cannibals,candor,butterscotch,busts,busier,bullcrap,buggin,brookside,brodski,brassiere,brainwash,brainiac,botrelle,bonbon,boatload,blimey,blaring,blackness,bipartisan,bimbos,bigamist,biebe,biding,betrayals,bestow,bellerophon,bedpans,bassinet,basking,barzini,barnyard,barfed,backups,audited,asinine,asalaam,arouse,applejack,annoys,anchovies,ampule,alameida,aggravate,adage,accomplices,yokel,y'ever,wringer,witwer,withdrawals,windward,willfully,whorfin,whimsical,whimpering,weddin,weathered,warmest,wanton,volant,visceral,vindication,veggies,urinate,uproar,unwritten,unwrap,unsung,unsubstantiated,unspeakably,unscrupulous,unraveling,unquote,unqualified,unfulfilled,undetectable,underlined,unattainable,unappreciated,ummmm,ulcers,tylenol,tweak,turnin,tuatha,tropez,trellis,toppings,tootin,toodle,tinkering,thrives,thespis,theatrics,thatherton,tempers,tavington,tartar,tampon,swelled,sutures,sustenance,sunflowers,sublet,stubbins,strutting,strewn,stowaway,stoic,sternin,stabilizing,spiraling,spinster,speedometer,speakeasy,soooo,soiled,sneakin,smithereens,smelt,smacks,slaughterhouse,slacks,skids,sketching,skateboards,sizzling,sixes,sirree,simplistic,shouts,shorted,shoelace,sheeit,shards,shackled,sequestered,selmak,seduces,seclusion,seamstress,seabeas,scoops,scooped,scavenger,satch,s'more,rudeness,romancing,rioja,rifkin,rieper,revise,reunions,repugnant,replicating,repaid,renewing,relaxes,rekindle,regrettably,regenerate,reels,reciting,reappear,readin,ratting,rapes,rancher,rammed,rainstorm,railroading,queers,punxsutawney,punishes,pssst,prudy,proudest,protectors,procrastinating,proactive,priss,postmortem,pompoms,poise,pickings,perfectionist,peretti,people'll,pecking,patrolman,paralegal,paragraphs,paparazzi,pankot,pampering,overstep,overpower,outweigh,omnipotent,odious,nuwanda,nurtured,newsroom,neeson,needlepoint,necklaces,neato,muggers,muffler,mousy,mourned,mosey,mopey,mongolians,moldy,misinterpret,minibar,microfilm,mendola,mended,melissande,masturbating,masbath,manipulates,maimed,mailboxes,magnetism,m'lord,m'honey,lymph,lunge,lovelier,lefferts,leezak,ledgers,larraby,laloosh,kundun,kozinski,knockoff,kissin,kiosk,kennedys,kellman,karlo,kaleidoscope,jeffy,jaywalking,instructing,infraction,informer,infarction,impulsively,impressing,impersonated,impeach,idiocy,hyperbole,hurray,humped,huhuh,hsing,hordes,hoodlums,honky,hitchhiker,hideously,heaving,heathcliff,headgear,headboard,hazing,harem,handprint,hairspray,gutiurrez,goosebumps,gondola,glitches,gasping,frolic,freeways,frayed,fortitude,forgetful,forefathers,fonder,foiled,foaming,flossing,flailing,fitzgeralds,firehouse,finders,fiftieth,fellah,fawning,farquaad,faraway,fancied,extremists,exorcist,exhale,ethros,entrust,ennui,energized,encephalitis,embezzling,elster,elixir,electrolytes,duplex,dryers,drexl,dredging,drawback,don'ts,dobisch,divorcee,disrespected,disprove,disobeying,disinfectant,dingy,digress,dieting,dictating,devoured,devise,detonators,desist,deserter,derriere,deron,deceptive,debilitating,deathwok,daffodils,curtsy,cursory,cuppa,cumin,cronkite,cremation,credence,cranking,coverup,courted,countin,counselling,cornball,contentment,consensual,compost,cluett,cleverly,cleansed,cleanliness,chopec,chomp,chins,chime,cheswick,chessler,cheapest,chatted,cauliflower,catharsis,catchin,caress,camcorder,calorie,cackling,bystanders,buttoned,buttering,butted,buries,burgel,buffoon,brogna,bragged,boutros,bogeyman,blurting,blurb,blowup,bloodhound,blissful,birthmark,bigot,bestest,belted,belligerent,beggin,befall,beeswax,beatnik,beaming,barricade,baggoli,badness,awoke,artsy,artful,aroun,armpits,arming,annihilate,anise,angiogram,anaesthetic,amorous,ambiance,alligators,adoration,admittance,adama,abydos,zonked,zhivago,yorkin,wrongfully,writin,wrappers,worrywart,woops,wonderfalls,womanly,wickedness,whoopie,wholeheartedly,whimper,which'll,wheelchairs,what'ya,warranted,wallop,wading,wacked,virginal,vermouth,vermeil,verger,ventriss,veneer,vampira,utero,ushers,urgently,untoward,unshakable,unsettled,unruly,unlocks,ungodly,undue,uncooperative,uncontrollably,unbeatable,twitchy,tumbler,truest,triumphs,triplicate,tribbey,tortures,tongaree,tightening,thorazine,theres,testifies,teenaged,tearful,taxing,taldor,syllabus,swoops,swingin,suspending,sunburn,stuttering,stupor,strides,strategize,strangulation,stooped,stipulation,stingy,stapled,squeaks,squawking,spoilsport,splicing,spiel,spencers,spasms,spaniard,softener,sodding,soapbox,smoldering,smithbauer,skittish,sifting,sickest,sicilians,shuffling,shrivel,segretti,seeping,securely,scurrying,scrunch,scrote,screwups,schenkman,sawing,savin,satine,sapiens,salvaging,salmonella,sacrilege,rumpus,ruffle,roughing,rotted,rondall,ridding,rickshaw,rialto,rhinestone,restrooms,reroute,requisite,repress,rednecks,redeeming,rayed,ravell,raked,raincheck,raffi,racked,pushin,profess,prodding,procure,presuming,preppy,prednisone,potted,posttraumatic,poorhouse,podiatrist,plowed,pledging,playroom,plait,placate,pinback,picketing,photographing,pharoah,petrak,petal,persecuting,perchance,pellets,peeved,peerless,payable,pauses,pathologist,pagliacci,overwrought,overreaction,overqualified,overheated,outcasts,otherworldly,opinionated,oodles,oftentimes,occured,obstinate,nutritionist,numbness,nubile,nooooooo,nobodies,nepotism,neanderthals,mushu,mucus,mothering,mothballs,monogrammed,molesting,misspoke,misspelled,misconstrued,miscalculated,minimums,mince,mildew,mighta,middleman,mementos,mellowed,mayol,mauled,massaged,marmalade,mardi,makings,lundegaard,lovingly,loudest,lotto,loosing,loompa,looming,longs,loathes,littlest,littering,lifelike,legalities,laundered,lapdog,lacerations,kopalski,knobs,knitted,kittridge,kidnaps,kerosene,karras,jungles,jockeys,iranoff,invoices,invigorating,insolence,insincere,insectopia,inhumane,inhaling,ingrates,infestation,individuality,indeterminate,incomprehensible,inadequacy,impropriety,importer,imaginations,illuminating,ignite,hysterics,hypodermic,hyperventilate,hyperactive,humoring,honeymooning,honed,hoist,hoarding,hitching,hiker,hightail,hemoglobin,hell'd,heinie,growin,grasped,grandparent,granddaughters,gouged,goblins,gleam,glades,gigantor,get'em,geriatric,gatekeeper,gargoyles,gardenias,garcon,garbo,gallows,gabbing,futon,fulla,frightful,freshener,fortuitous,forceps,fogged,fodder,foamy,flogging,flaun,flared,fireplaces,feverish,favell,fattest,fattening,fallow,extraordinaire,evacuating,errant,envied,enchant,enamored,egocentric,dussander,dunwitty,dullest,dropout,dredged,dorsia,doornail,donot,dongs,dogged,dodgy,ditty,dishonorable,discriminating,discontinue,dings,dilly,dictation,dialysis,delly,delightfully,daryll,dandruff,cruddy,croquet,cringe,crimp,credo,crackling,courtside,counteroffer,counterfeiting,corrupting,copping,conveyor,contusions,contusion,conspirator,consoling,connoisseur,confetti,composure,compel,colic,coddle,cocksuckers,coattails,cloned,claustrophobia,clamoring,churn,chugga,chirping,chasin,chapped,chalkboard,centimeter,caymans,catheter,casings,caprica,capelli,cannolis,cannoli,camogli,camembert,butchers,butchered,busboys,bureaucrats,buckled,bubbe,brownstone,bravely,brackley,bouquets,botox,boozing,boosters,bodhi,blunders,blunder,blockage,biocyte,betrays,bested,beryllium,beheading,beggar,begbie,beamed,bastille,barstool,barricades,barbecues,barbecued,bandwagon,backfiring,bacarra,avenged,autopsies,aunties,associating,artichoke,arrowhead,appendage,apostrophe,antacid,ansel,annul,amuses,amped,amicable,amberg,alluring,adversaries,admirers,adlai,acupuncture,abnormality,aaaahhhh,zooming,zippity,zipping,zeroed,yuletide,yoyodyne,yengeese,yeahhh,wrinkly,wracked,withered,winks,windmills,whopping,wendle,weigart,waterworks,waterbed,watchful,wantin,wagging,waaah,vying,ventricle,varnish,vacuumed,unreachable,unprovoked,unmistakable,unfriendly,unfolding,underpaid,uncuff,unappealing,unabomber,typhoid,tuxedos,tushie,turds,tumnus,troubadour,trinium,treaters,treads,transpired,transgression,tought,thready,thins,thinners,techs,teary,tattaglia,tassels,tarzana,tanking,tablecloths,synchronize,symptomatic,sycophant,swimmingly,sweatshop,surfboard,superpowers,sunroom,sunblock,sugarplum,stupidly,strumpet,strapless,stooping,stools,stealthy,stalks,stairmaster,staffer,sshhh,squatting,squatters,spectacularly,sorbet,socked,sociable,snubbed,snorting,sniffles,snazzy,snakebite,smuggler,smorgasbord,smooching,slurping,slouch,slingshot,slaved,skimmed,sisterhood,silliest,sidarthur,sheraton,shebang,sharpening,shanghaied,shakers,sendoff,scurvy,scoliosis,scaredy,scagnetti,sawchuk,saugus,sasquatch,sandbag,saltines,s'pose,roston,rostle,riveting,ristle,rifling,revulsion,reverently,retrograde,restful,resents,reptilian,reorganize,renovating,reiterate,reinvent,reinmar,reibers,reechard,recuse,reconciling,recognizance,reclaiming,recitation,recieved,rebate,reacquainted,rascals,railly,quintuplets,quahog,pygmies,puzzling,punctuality,prosthetic,proms,probie,preys,preserver,preppie,poachers,plummet,plumbers,plannin,pitying,pitfalls,piqued,pinecrest,pinches,pillage,pigheaded,physique,pessimistic,persecute,perjure,percentile,pentothal,pensky,penises,peini,pazzi,pastels,parlour,paperweight,pamper,pained,overwhelm,overalls,outrank,outpouring,outhouse,outage,ouija,obstructed,obsessions,obeying,obese,o'riley,o'higgins,nosebleeds,norad,noooooooo,nononono,nonchalant,nippy,neurosis,nekhorvich,necronomicon,naquada,n'est,mystik,mystified,mumps,muddle,mothership,moped,monumentally,monogamous,mondesi,misogynistic,misinterpreting,mindlock,mending,megaphone,meeny,medicating,meanie,masseur,markstrom,marklars,margueritas,manifesting,maharajah,lukewarm,loveliest,loran,lizardo,liquored,lipped,lingers,limey,lemkin,leisurely,lathe,latched,lapping,ladle,krevlorneswath,kosygin,khakis,kenaru,keats,kaitlan,julliard,jollies,jaundice,jargon,jackals,invisibility,insipid,inflamed,inferiority,inexperience,incinerated,incinerate,incendiary,incan,inbred,implicating,impersonator,hunks,horsing,hooded,hippopotamus,hiked,hetson,hetero,hessian,henslowe,hendler,hellstrom,headstone,hayloft,harbucks,handguns,hallucinate,haldol,haggling,gynaecologist,gulag,guilder,guaranteeing,groundskeeper,grindstone,grimoir,grievance,griddle,gribbit,greystone,graceland,gooders,goeth,gentlemanly,gelatin,gawking,ganged,fukes,fromby,frenchmen,foursome,forsley,forbids,footwork,foothold,floater,flinging,flicking,fittest,fistfight,fireballs,fillings,fiddling,fennyman,felonious,felonies,feces,favoritism,fatten,fanatics,faceman,excusing,excepted,entwined,entree,ensconced,eladio,ehrlichman,easterland,dueling,dribbling,drape,downtrodden,doused,dosed,dorleen,dokie,distort,displeased,disown,dismount,disinherited,disarmed,disapproves,diperna,dined,diligent,dicaprio,depress,decoded,debatable,dealey,darsh,damsels,damning,dad'll,d'oeuvre,curlers,curie,cubed,crikey,crepes,countrymen,cornfield,coppers,copilot,copier,cooing,conspiracies,consigliere,condoning,commoner,commies,combust,comas,colds,clawed,clamped,choosy,chomping,chimps,chigorin,chianti,cheep,checkups,cheaters,celibate,cautiously,cautionary,castell,carpentry,caroling,carjacking,caritas,caregiver,cardiology,candlesticks,canasta,cain't,burro,burnin,bunking,bumming,bullwinkle,brummel,brooms,brews,breathin,braslow,bracing,botulism,boorish,bloodless,blayne,blatantly,blankie,bedbugs,becuase,barmaid,bared,baracus,banal,bakes,backpacks,attentions,atrocious,ativan,athame,asunder,astound,assuring,aspirins,asphyxiation,ashtrays,aryans,arnon,apprehension,applauding,anvil,antiquing,antidepressants,annoyingly,amputate,altruistic,alotta,alerting,afterthought,affront,affirm,actuality,abysmal,absentee,yeller,yakushova,wuzzy,wriggle,worrier,woogyman,womanizer,windpipe,windbag,willin,whisking,whimsy,wendall,weeny,weensy,weasels,watery,watcha,wasteful,waski,washcloth,waaay,vouched,viznick,ventriloquist,vendettas,veils,vayhue,vamanos,vadimus,upstage,uppity,unsaid,unlocking,unintentionally,undetected,undecided,uncaring,unbearably,tween,tryout,trotting,trini,trimmings,trickier,treatin,treadstone,trashcan,transcendent,tramps,townsfolk,torturous,torrid,toothpicks,tolerable,tireless,tiptoeing,timmay,tillinghouse,tidying,tibia,thumbing,thrusters,thrashing,these'll,thatos,testicular,teriyaki,tenors,tenacity,tellers,telemetry,tarragon,switchblade,swicker,swells,sweatshirts,swatches,surging,supremely,sump'n,succumb,subsidize,stumbles,stuffs,stoppin,stipulate,stenographer,steamroll,stasis,stagger,squandered,splint,splendidly,splashy,splashing,specter,sorcerers,somewheres,somber,snuggled,snowmobile,sniffed,snags,smugglers,smudged,smirking,smearing,slings,sleet,sleepovers,sleek,slackers,siree,siphoning,singed,sincerest,sickened,shuffled,shriveled,shorthanded,shittin,shish,shipwrecked,shins,sheetrock,shawshank,shamu,sha're,servitude,sequins,seascape,scrapings,scoured,scorching,sandpaper,saluting,salud,ruffled,roughnecks,rougher,rosslyn,rosses,roost,roomy,romping,revolutionize,reprimanded,refute,refrigerated,reeled,redundancies,rectal,recklessly,receding,reassignment,reapers,readout,ration,raring,ramblings,raccoons,quarantined,purging,punters,psychically,premarital,pregnancies,predisposed,precautionary,pollute,podunk,plums,plaything,pixilated,pitting,piranhas,pieced,piddles,pickled,photogenic,phosphorous,pffft,pestilence,pessimist,perspiration,perps,penticoff,passageways,pardons,panics,pancamo,paleontologist,overwhelms,overstating,overpaid,overdid,outlive,orthodontist,orgies,oreos,ordover,ordinates,ooooooh,oooohhh,omelettes,officiate,obtuse,obits,nymph,novocaine,noooooooooo,nipping,nilly,nightstick,negate,neatness,natured,narcotic,narcissism,namun,nakatomi,murky,muchacho,mouthwash,motzah,morsel,morph,morlocks,mooch,moloch,molest,mohra,modus,modicum,mockolate,misdemeanors,miscalculation,middies,meringue,mercilessly,meditating,mayakovsky,maximillian,marlee,markovski,maniacal,maneuvered,magnificence,maddening,lutze,lunged,lovelies,lorry,loosening,lookee,littered,lilac,lightened,laces,kurzon,kurtzweil,kind've,kimono,kenji,kembu,keanu,kazuo,jonesing,jilted,jiggling,jewelers,jewbilee,jacqnoud,jacksons,ivories,insurmountable,innocuous,innkeeper,infantery,indulged,indescribable,incoherent,impervious,impertinent,imperfections,hunnert,huffy,horsies,horseradish,hollowed,hogwash,hockley,hissing,hiromitsu,hidin,hereafter,helpmann,hehehe,haughty,happenings,hankie,handsomely,halliwells,haklar,haise,gunsights,grossly,grope,grocer,grits,gripping,grabby,glorificus,gizzard,gilardi,gibarian,geminon,gasses,garnish,galloping,gairwyn,futterman,futility,fumigated,fruitless,friendless,freon,foregone,forego,floored,flighty,flapjacks,fizzled,ficus,festering,farbman,fabricate,eyghon,extricate,exalted,eventful,esophagus,enterprising,entail,endor,emphatically,embarrasses,electroshock,easel,duffle,drumsticks,dissection,dissected,disposing,disparaging,disorientation,disintegrated,disarming,devoting,dessaline,deprecating,deplorable,delve,degenerative,deduct,decomposed,deathly,dearie,daunting,dankova,cyclotron,cyberspace,cutbacks,culpable,cuddled,crumpets,cruelly,crouching,cranium,cramming,cowering,couric,cordesh,conversational,conclusively,clung,clotting,cleanest,chipping,chimpanzee,chests,cheapen,chainsaws,censure,catapult,caravaggio,carats,captivating,calrissian,butlers,busybody,bussing,bunion,bulimic,budging,brung,browbeat,brokenhearted,brecher,breakdowns,bracebridge,boning,blowhard,blisters,blackboard,bigotry,bialy,bhamra,bended,begat,battering,baste,basquiat,barricaded,barometer,balled,baited,badenweiler,backhand,ascenscion,argumentative,appendicitis,apparition,anxiously,antagonistic,angora,anacott,amniotic,ambience,alonna,aleck,akashic,ageless,abouts,aawwww,aaaaarrrrrrggghhh,aaaaaa,zendi,yuppies,yodel,y'hear,wrangle,wombosi,wittle,withstanding,wisecracks,wiggling,wierd,whittlesley,whipper,whattya,whatsamatter,whatchamacallit,whassup,whad'ya,weakling,warfarin,waponis,wampum,wadn't,vorash,vizzini,virtucon,viridiana,veracity,ventilated,varicose,varcon,vandalized,vamos,vamoose,vaccinated,vacationing,usted,urinal,uppers,unwittingly,unsealed,unplanned,unhinged,unhand,unfathomable,unequivocally,unbreakable,unadvisedly,udall,tynacorp,tuxes,tussle,turati,tunic,tsavo,trussed,troublemakers,trollop,tremors,transsexual,transfusions,toothbrushes,toned,toddlers,tinted,tightened,thundering,thorpey,this'd,thespian,thaddius,tenuous,tenths,tenement,telethon,teleprompter,teaspoon,taunted,tattle,tardiness,taraka,tappy,tapioca,tapeworm,talcum,tacks,swivel,swaying,superpower,summarize,sumbitch,sultry,suburbia,styrofoam,stylings,strolls,strobe,stockpile,stewardesses,sterilized,sterilize,stealin,stakeouts,squawk,squalor,squabble,sprinkled,sportsmanship,spokes,spiritus,sparklers,spareribs,sowing,sororities,sonovabitch,solicit,softy,softness,softening,snuggling,snatchers,snarling,snarky,snacking,smears,slumped,slowest,slithering,sleazebag,slayed,slaughtering,skidded,skated,sivapathasundaram,sissies,silliness,silences,sidecar,sicced,shylock,shtick,shrugged,shriek,shoves,should'a,shortcake,shockingly,shirking,shaves,shatner,sharpener,shapely,shafted,sexless,septum,selflessness,seabea,scuff,screwball,scoping,scooch,scolding,schnitzel,schemed,scalper,santy,sankara,sanest,salesperson,sakulos,safehouse,sabers,runes,rumblings,rumbling,ruijven,ringers,righto,rhinestones,retrieving,reneging,remodelling,relentlessly,regurgitate,refills,reeking,reclusive,recklessness,recanted,ranchers,rafer,quaking,quacks,prophesied,propensity,profusely,problema,prided,prays,postmark,popsicles,poodles,pollyanna,polaroids,pokes,poconos,pocketful,plunging,plugging,pleeease,platters,pitied,pinetti,piercings,phooey,phonies,pestering,periscope,pentagram,pelts,patronized,paramour,paralyze,parachutes,pales,paella,paducci,owatta,overdone,overcrowded,overcompensating,ostracized,ordinate,optometrist,operandi,omens,okayed,oedipal,nuttier,nuptial,nunheim,noxious,nourish,notepad,nitroglycerin,nibblet,neuroses,nanosecond,nabbit,mythic,munchkins,multimillion,mulroney,mucous,muchas,mountaintop,morlin,mongorians,moneybags,mom'll,molto,mixup,misgivings,mindset,michalchuk,mesmerized,merman,mensa,meaty,mbwun,materialize,materialistic,masterminded,marginally,mapuhe,malfunctioning,magnify,macnamara,macinerney,machinations,macadamia,lysol,lurks,lovelorn,lopsided,locator,litback,litany,linea,limousines,limes,lighters,liebkind,levity,levelheaded,letterhead,lesabre,leron,lepers,lefts,leftenant,laziness,layaway,laughlan,lascivious,laryngitis,lapsed,landok,laminated,kurten,kobol,knucklehead,knowed,knotted,kirkeby,kinsa,karnovsky,jolla,jimson,jettison,jeric,jawed,jankis,janitors,jango,jalopy,jailbreak,jackers,jackasses,invalidate,intercepting,intercede,insinuations,infertile,impetuous,impaled,immerse,immaterial,imbeciles,imagines,idyllic,idolized,icebox,i'd've,hypochondriac,hyphen,hurtling,hurried,hunchback,hullo,horsting,hoooo,homeboys,hollandaise,hoity,hijinks,hesitates,herrero,herndorff,helplessly,heeyy,heathen,hearin,headband,harrassment,harpies,halstrom,hahahahaha,hacer,grumbling,grimlocks,grift,greets,grandmothers,grander,grafts,gordievsky,gondorff,godorsky,glscripts,gaudy,gardeners,gainful,fuses,fukienese,frizzy,freshness,freshening,fraught,frantically,foxbooks,fortieth,forked,foibles,flunkies,fleece,flatbed,fisted,firefight,fingerpaint,filibuster,fhloston,fenceline,femur,fatigues,fanucci,fantastically,familiars,falafel,fabulously,eyesore,expedient,ewwww,eviscerated,erogenous,epidural,enchante,embarassed,embarass,embalming,elude,elspeth,electrocute,eigth,eggshell,echinacea,eases,earpiece,earlobe,dumpsters,dumbshit,dumbasses,duloc,duisberg,drummed,drinkers,dressy,dorma,doily,divvy,diverting,dissuade,disrespecting,displace,disorganized,disgustingly,discord,disapproving,diligence,didja,diced,devouring,detach,destructing,desolate,demerits,delude,delirium,degrade,deevak,deemesa,deductions,deduce,debriefed,deadbeats,dateline,darndest,damnable,dalliance,daiquiri,d'agosta,cussing,cryss,cripes,cretins,crackerjack,cower,coveting,couriers,countermission,cotswolds,convertibles,conversationalist,consorting,consoled,consarn,confides,confidentially,commited,commiserate,comme,comforter,comeuppance,combative,comanches,colosseum,colling,coexist,coaxing,cliffside,chutes,chucked,chokes,childlike,childhoods,chickening,chenowith,charmingly,changin,catsup,captioning,capsize,cappucino,capiche,candlewell,cakewalk,cagey,caddie,buxley,bumbling,bulky,buggered,brussel,brunettes,brumby,brotha,bronck,brisket,bridegroom,braided,bovary,bookkeeper,bluster,bloodline,blissfully,blase,billionaires,bicker,berrisford,bereft,berating,berate,bendy,belive,belated,beikoku,beens,bedspread,bawdy,barreling,baptize,banya,balthazar,balmoral,bakshi,bails,badgered,backstreet,awkwardly,auras,attuned,atheists,astaire,assuredly,arrivederci,appetit,appendectomy,apologetic,antihistamine,anesthesiologist,amulets,albie,alarmist,aiight,adstream,admirably,acquaint,abound,abominable,aaaaaaah,zekes,zatunica,wussy,worded,wooed,woodrell,wiretap,windowsill,windjammer,windfall,whisker,whims,whatiya,whadya,weirdly,weenies,waunt,washout,wanto,waning,victimless,verdad,veranda,vandaley,vancomycin,valise,vaguest,upshot,unzip,unwashed,untrained,unstuck,unprincipled,unmentionables,unjustly,unfolds,unemployable,uneducated,unduly,undercut,uncovering,unconsciousness,unconsciously,tyndareus,turncoat,turlock,tulle,tryouts,trouper,triplette,trepkos,tremor,treeger,trapeze,traipse,tradeoff,trach,torin,tommorow,tollan,toity,timpani,thumbprint,thankless,tell'em,telepathy,telemarketing,telekinesis,teevee,teeming,tarred,tambourine,talentless,swooped,switcheroo,swirly,sweatpants,sunstroke,suitors,sugarcoat,subways,subterfuge,subservient,subletting,stunningly,strongbox,striptease,stravanavitch,stradling,stoolie,stodgy,stocky,stifle,stealer,squeezes,squatter,squarely,sprouted,spool,spindly,speedos,soups,soundly,soulmates,somebody'll,soliciting,solenoid,sobering,snowflakes,snowballs,snores,slung,slimming,skulk,skivvies,skewered,skewer,sizing,sistine,sidebar,sickos,shushing,shunt,shugga,shone,shol'va,sharpened,shapeshifter,shadowing,shadoe,selectman,sefelt,seared,scrounging,scribbling,scooping,scintillating,schmoozing,scallops,sapphires,sanitarium,sanded,safes,rudely,roust,rosebush,rosasharn,rondell,roadhouse,riveted,rewrote,revamp,retaliatory,reprimand,replicators,replaceable,remedied,relinquishing,rejoicing,reincarnated,reimbursed,reevaluate,redid,redefine,recreating,reconnected,rebelling,reassign,rearview,rayne,ravings,ratso,rambunctious,radiologist,quiver,quiero,queef,qualms,pyrotechnics,pulsating,psychosomatic,proverb,promiscuous,profanity,prioritize,preying,predisposition,precocious,precludes,prattling,prankster,povich,potting,postpartum,porridge,polluting,plowing,pistachio,pissin,pickpocket,physicals,peruse,pertains,personified,personalize,perjured,perfecting,pepys,pepperdine,pembry,peering,peels,pedophile,patties,passkey,paratrooper,paraphernalia,paralyzing,pandering,paltry,palpable,pagers,pachyderm,overstay,overestimated,overbite,outwit,outgrow,outbid,ooops,oomph,oohhh,oldie,obliterate,objectionable,nygma,notting,noches,nitty,nighters,newsstands,newborns,neurosurgery,nauseated,nastiest,narcolepsy,mutilate,muscled,murmur,mulva,mulling,mukada,muffled,morgues,moonbeams,monogamy,molester,molestation,molars,moans,misprint,mismatched,mirth,mindful,mimosas,millander,mescaline,menstrual,menage,mellowing,medevac,meddlesome,matey,manicures,malevolent,madmen,macaroons,lydell,lycra,lunchroom,lunching,lozenges,looped,litigious,liquidate,linoleum,lingk,limitless,limber,lilacs,ligature,liftoff,lemmiwinks,leggo,learnin,lazarre,lawyered,lactose,knelt,kenosha,kemosabe,jussy,junky,jordy,jimmies,jeriko,jakovasaur,issacs,isabela,irresponsibility,ironed,intoxication,insinuated,inherits,ingest,ingenue,inflexible,inflame,inevitability,inedible,inducement,indignant,indictments,indefensible,incomparable,incommunicado,improvising,impounded,illogical,ignoramus,hydrochloric,hydrate,hungover,humorless,humiliations,hugest,hoverdrone,hovel,hmmph,hitchhike,hibernating,henchman,helloooo,heirlooms,heartsick,headdress,hatches,harebrained,hapless,hanen,handsomer,hallows,habitual,guten,gummy,guiltier,guidebook,gstaad,gruff,griss,grieved,grata,gorignak,goosed,goofed,glowed,glitz,glimpses,glancing,gilmores,gianelli,geraniums,garroway,gangbusters,gamblers,galls,fuddy,frumpy,frowning,frothy,fro'tak,frere,fragrances,forgettin,follicles,flowery,flophouse,floatin,flirts,flings,flatfoot,fingerprinting,fingerprinted,fingering,finald,fillet,fianc,femoral,federales,fawkes,fascinates,farfel,fambly,falsified,fabricating,exterminators,expectant,excusez,excrement,excercises,evian,etins,esophageal,equivalency,equate,equalizer,entrees,enquire,endearment,empathetic,emailed,eggroll,earmuffs,dyslexic,duper,duesouth,drunker,druggie,dreadfully,dramatics,dragline,downplay,downers,dominatrix,doers,docket,docile,diversify,distracts,disloyalty,disinterested,discharging,disagreeable,dirtier,dinghy,dimwitted,dimoxinil,dimmy,diatribe,devising,deviate,detriment,desertion,depressants,depravity,deniability,delinquents,defiled,deepcore,deductive,decimate,deadbolt,dauthuille,dastardly,daiquiris,daggers,dachau,curiouser,curdled,cucamonga,cruller,cruces,crosswalk,crinkle,crescendo,cremate,counseled,couches,cornea,corday,copernicus,contrition,contemptible,constipated,conjoined,confounded,condescend,concoct,conch,compensating,committment,commandeered,comely,coddled,cockfight,cluttered,clunky,clownfish,cloaked,clenched,cleanin,civilised,circumcised,cimmeria,cilantro,chutzpah,chucking,chiseled,chicka,chattering,cervix,carrey,carpal,carnations,cappuccinos,candied,calluses,calisthenics,bushy,burners,budington,buchanans,brimming,braids,boycotting,bouncers,botticelli,botherin,bookkeeping,bogyman,bogged,bloodthirsty,blintzes,blanky,binturong,billable,bigboote,bewildered,betas,bequeath,behoove,befriend,bedpost,bedded,baudelaires,barreled,barboni,barbeque,bangin,baltus,bailout,backstabber,baccarat,awning,augie,arguillo,archway,apricots,apologising,annyong,anchorman,amenable,amazement,allspice,alannis,airfare,airbags,ahhhhhhhhh,ahhhhhhhh,ahhhhhhh,agitator,adrenal,acidosis,achoo,accessorizing,accentuate,abrasions,abductor,aaaahhh,aaaaaaaa,aaaaaaa,zeroing,zelner,zeldy,yevgeny,yeska,yellows,yeesh,yeahh,yamuri,wouldn't've,workmanship,woodsman,winnin,winked,wildness,whoring,whitewash,whiney,when're,wheezer,wheelman,wheelbarrow,westerburg,weeding,watermelons,washboard,waltzes,wafting,voulez,voluptuous,vitone,vigilantes,videotaping,viciously,vices,veruca,vermeer,verifying,vasculitis,valets,upholstered,unwavering,untold,unsympathetic,unromantic,unrecognizable,unpredictability,unmask,unleashing,unintentional,unglued,unequivocal,underrated,underfoot,unchecked,unbutton,unbind,unbiased,unagi,uhhhhh,tugging,triads,trespasses,treehorn,traviata,trappers,transplants,trannie,tramping,tracheotomy,tourniquet,tooty,toothless,tomarrow,toasters,thruster,thoughtfulness,thornwood,tengo,tenfold,telltale,telephoto,telephoned,telemarketer,tearin,tastic,tastefully,tasking,taser,tamed,tallow,taketh,taillight,tadpoles,tachibana,syringes,sweated,swarthy,swagger,surges,supermodels,superhighway,sunup,sun'll,sulfa,sugarless,sufficed,subside,strolled,stringy,strengthens,straightest,straightens,storefront,stopper,stockpiling,stimulant,stiffed,steyne,sternum,stepladder,stepbrother,steers,steelheads,steakhouse,stathis,stankylecartmankennymr,standoffish,stalwart,squirted,spritz,sprig,sprawl,spousal,sphincter,spenders,spearmint,spatter,spangled,southey,soured,sonuvabitch,somethng,snuffed,sniffs,smokescreen,smilin,slobs,sleepwalker,sleds,slays,slayage,skydiving,sketched,skanks,sixed,siphoned,siphon,simpering,sigfried,sidearm,siddons,sickie,shuteye,shuffleboard,shrubberies,shrouded,showmanship,shouldn't've,shoplift,shiatsu,sentries,sentance,sensuality,seething,secretions,searing,scuttlebutt,sculpt,scowling,scouring,scorecard,schoolers,schmucks,scepters,scaly,scalps,scaffolding,sauces,sartorius,santen,salivating,sainthood,saget,saddens,rygalski,rusting,ruination,rueland,rudabaga,rottweiler,roofies,romantics,rollerblading,roldy,roadshow,rickets,rible,rheza,revisiting,retentive,resurface,restores,respite,resounding,resorting,resists,repulse,repressing,repaying,reneged,refunds,rediscover,redecorated,reconstructive,recommitted,recollect,receptacle,reassess,reanimation,realtors,razinin,rationalization,ratatouille,rashum,rasczak,rancheros,rampler,quizzing,quips,quartered,purring,pummeling,puede,proximo,prospectus,pronouncing,prolonging,procreation,proclamations,principled,prides,preoccupation,prego,precog,prattle,pounced,potshots,potpourri,porque,pomegranates,polenta,plying,pluie,plesac,playmates,plantains,pillowcase,piddle,pickers,photocopied,philistine,perpetuate,perpetually,perilous,pawned,pausing,pauper,parter,parlez,parlay,pally,ovulation,overtake,overstate,overpowering,overpowered,overconfident,overbooked,ovaltine,outweighs,outings,ottos,orrin,orifice,orangutan,oopsy,ooooooooh,oooooo,ooohhhh,ocular,obstruct,obscenely,o'dwyer,nutjob,nunur,notifying,nostrand,nonny,nonfat,noblest,nimble,nikes,nicht,newsworthy,nestled,nearsighted,ne'er,nastier,narco,nakedness,muted,mummified,mudda,mozzarella,moxica,motivator,motility,mothafucka,mortmain,mortgaged,mores,mongers,mobbed,mitigating,mistah,misrepresented,mishke,misfortunes,misdirection,mischievous,mineshaft,millaney,microwaves,metzenbaum,mccovey,masterful,masochistic,marliston,marijawana,manya,mantumbi,malarkey,magnifique,madrona,madox,machida,m'hidi,lullabies,loveliness,lotions,looka,lompoc,litterbug,litigator,lithe,liquorice,linds,limericks,lightbulb,lewises,letch,lemec,layover,lavatory,laurels,lateness,laparotomy,laboring,kuato,kroff,krispy,krauts,knuckleheads,kitschy,kippers,kimbrow,keypad,keepsake,kebab,karloff,junket,judgemental,jointed,jezzie,jetting,jeeze,jeeter,jeesus,jeebs,janeane,jails,jackhammer,ixnay,irritates,irritability,irrevocable,irrefutable,irked,invoking,intricacies,interferon,intents,insubordinate,instructive,instinctive,inquisitive,inlay,injuns,inebriated,indignity,indecisive,incisors,incacha,inalienable,impresses,impregnate,impregnable,implosion,idolizes,hypothyroidism,hypoglycemic,huseni,humvee,huddling,honing,hobnobbing,hobnob,histrionics,histamine,hirohito,hippocratic,hindquarters,hikita,hikes,hightailed,hieroglyphics,heretofore,herbalist,hehey,hedriks,heartstrings,headmistress,headlight,hardheaded,happend,handlebars,hagitha,habla,gyroscope,guys'd,guy'd,guttersnipe,grump,growed,grovelling,groan,greenbacks,gravedigger,grating,grasshoppers,grandiose,grandest,grafted,gooood,goood,gooks,godsakes,goaded,glamorama,giveth,gingham,ghostbusters,germane,georgy,gazzo,gazelles,gargle,garbled,galgenstein,gaffe,g'day,fyarl,furnish,furies,fulfills,frowns,frowned,frighteningly,freebies,freakishly,forewarned,foreclose,forearms,fordson,fonics,flushes,flitting,flemmer,flabby,fishbowl,fidgeting,fevers,feigning,faxing,fatigued,fathoms,fatherless,fancier,fanatical,factored,eyelid,eyeglasses,expresso,expletive,expectin,excruciatingly,evidentiary,ever'thing,eurotrash,eubie,estrangement,erlich,epitome,entrap,enclose,emphysema,embers,emasculating,eighths,eardrum,dyslexia,duplicitous,dumpty,dumbledore,dufus,duddy,duchamp,drunkenness,drumlin,drowns,droid,drinky,drifts,drawbridge,dramamine,douggie,douchebag,dostoyevsky,doodling,don'tcha,domineering,doings,dogcatcher,doctoring,ditzy,dissimilar,dissecting,disparage,disliking,disintegrating,dishwalla,dishonored,dishing,disengaged,disavowed,dippy,diorama,dimmed,dilate,digitalis,diggory,dicing,diagnosing,devola,desolation,dennings,denials,deliverance,deliciously,delicacies,degenerates,degas,deflector,defile,deference,decrepit,deciphered,dawdle,dauphine,daresay,dangles,dampen,damndest,cucumbers,cucaracha,cryogenically,croaks,croaked,criticise,crisper,creepiest,creams,crackle,crackin,covertly,counterintelligence,corrosive,cordially,cops'll,convulsions,convoluted,conversing,conga,confrontational,confab,condolence,condiments,complicit,compiegne,commodus,comings,cometh,collusion,collared,cockeyed,clobber,clemonds,clarithromycin,cienega,christmasy,christmassy,chloroform,chippie,chested,cheeco,checklist,chauvinist,chandlers,chambermaid,chakras,cellophane,caveat,cataloguing,cartmanland,carples,carny,carded,caramels,cappy,caped,canvassing,callback,calibrated,calamine,buttermilk,butterfingers,bunsen,bulimia,bukatari,buildin,budged,brobich,bringer,brendell,brawling,bratty,braised,boyish,boundless,botch,boosh,bookies,bonbons,bodes,bobunk,bluntly,blossoming,bloomers,bloodstains,bloodhounds,blech,biter,biometric,bioethics,bijan,bigoted,bicep,bereaved,bellowing,belching,beholden,beached,batmobile,barcodes,barch,barbecuing,bandanna,backwater,backtrack,backdraft,augustino,atrophy,atrocity,atley,atchoo,asthmatic,assoc,armchair,arachnids,aptly,appetizing,antisocial,antagonizing,anorexia,anini,andersons,anagram,amputation,alleluia,airlock,aimless,agonized,agitate,aggravating,aerosol,acing,accomplishing,accidently,abuser,abstain,abnormally,aberration,aaaaahh,zlotys,zesty,zerzura,zapruder,zantopia,yelburton,yeess,y'knowwhati'msayin,wwhat,wussies,wrenched,would'a,worryin,wormser,wooooo,wookiee,wolchek,wishin,wiseguys,windbreaker,wiggy,wieners,wiedersehen,whoopin,whittled,wherefore,wharvey,welts,wellstone,wedges,wavered,watchit,wastebasket,wango,waken,waitressed,wacquiem,vrykolaka,voula,vitally,visualizing,viciousness,vespers,vertes,verily,vegetarians,vater,vaporize,vannacutt,vallens,ussher,urinating,upping,unwitting,untangle,untamed,unsanitary,unraveled,unopened,unisex,uninvolved,uninteresting,unintelligible,unimaginative,undeserving,undermines,undergarments,unconcerned,tyrants,typist,tykes,tybalt,twosome,twits,tutti,turndown,tularemia,tuberculoma,tsimshian,truffaut,truer,truant,trove,triumphed,tripe,trigonometry,trifled,trifecta,tribulations,tremont,tremoille,transcends,trafficker,touchin,tomfoolery,tinkered,tinfoil,tightrope,thousan,thoracotomy,thesaurus,thawing,thatta,tessio,temps,taxidermist,tator,tachycardia,t'akaya,swelco,sweetbreads,swatting,supercollider,sunbathing,summarily,suffocation,sueleen,succinct,subsided,submissive,subjecting,subbing,subatomic,stupendous,stunted,stubble,stubbed,streetwalker,strategizing,straining,straightaway,stoli,stiffer,stickup,stens,steamroller,steadwell,steadfast,stateroom,stans,sshhhh,squishing,squinting,squealed,sprouting,sprimp,spreadsheets,sprawled,spotlights,spooning,spirals,speedboat,spectacles,speakerphone,southglen,souse,soundproof,soothsayer,sommes,somethings,solidify,soars,snorted,snorkeling,snitches,sniping,snifter,sniffin,snickering,sneer,snarl,smila,slinking,slanted,slanderous,slammin,skimp,skilosh,siteid,sirloin,singe,sighing,sidekicks,sicken,showstopper,shoplifter,shimokawa,sherborne,shavadai,sharpshooters,sharking,shagged,shaddup,senorita,sesterces,sensuous,seahaven,scullery,scorcher,schotzie,schnoz,schmooze,schlep,schizo,scents,scalping,scalped,scallop,scalding,sayeth,saybrooke,sawed,savoring,sardine,sandstorm,sandalwood,salutations,sagman,s'okay,rsvp'd,rousted,rootin,romper,romanovs,rollercoaster,rolfie,robinsons,ritzy,ritualistic,ringwald,rhymed,rheingold,rewrites,revoking,reverts,retrofit,retort,retinas,respirations,reprobate,replaying,repaint,renquist,renege,relapsing,rekindled,rejuvenating,rejuvenated,reinstating,recriminations,rechecked,reassemble,rears,reamed,reacquaint,rayanne,ravish,rathole,raspail,rarest,rapists,rants,racketeer,quittin,quitters,quintessential,queremos,quellek,quelle,quasimodo,pyromaniac,puttanesca,puritanical,purer,puree,pungent,pummel,puedo,psychotherapist,prosecutorial,prosciutto,propositioning,procrastination,probationary,primping,preventative,prevails,preservatives,preachy,praetorians,practicality,powders,potus,postop,positives,poser,portolano,portokalos,poolside,poltergeists,pocketed,poach,plummeted,plucking,plimpton,playthings,plastique,plainclothes,pinpointed,pinkus,pinks,pigskin,piffle,pictionary,piccata,photocopy,phobias,perignon,perfumes,pecks,pecked,patently,passable,parasailing,paramus,papier,paintbrush,pacer,paaiint,overtures,overthink,overstayed,overrule,overestimate,overcooked,outlandish,outgrew,outdoorsy,outdo,orchestrate,oppress,opposable,oooohh,oomupwah,okeydokey,okaaay,ohashi,of'em,obscenities,oakie,o'gar,nurection,nostradamus,norther,norcom,nooch,nonsensical,nipped,nimbala,nervously,neckline,nebbleman,narwhal,nametag,n'n't,mycenae,muzak,muumuu,mumbled,mulvehill,muggings,muffet,mouthy,motivates,motaba,moocher,mongi,moley,moisturize,mohair,mocky,mmkay,mistuh,missis,misdeeds,mincemeat,miggs,miffed,methadone,messieur,menopausal,menagerie,mcgillicuddy,mayflowers,matrimonial,matick,masai,marzipan,maplewood,manzelle,mannequins,manhole,manhandle,malfunctions,madwoman,machiavelli,lynley,lynched,lurconis,lujack,lubricant,looove,loons,loofah,lonelyhearts,lollipops,lineswoman,lifers,lexter,lepner,lemony,leggy,leafy,leadeth,lazerus,lazare,lawford,languishing,lagoda,ladman,kundera,krinkle,krendler,kreigel,kowolski,knockdown,knifed,kneed,kneecap,kids'll,kennie,kenmore,keeled,kazootie,katzenmoyer,kasdan,karak,kapowski,kakistos,julyan,jockstrap,jobless,jiggly,jaunt,jarring,jabbering,irrigate,irrevocably,irrationally,ironies,invitro,intimated,intently,intentioned,intelligently,instill,instigator,instep,inopportune,innuendoes,inflate,infects,infamy,indiscretions,indiscreet,indio,indignities,indict,indecision,inconspicuous,inappropriately,impunity,impudent,impotence,implicates,implausible,imperfection,impatience,immutable,immobilize,idealist,iambic,hysterically,hyperspace,hygienist,hydraulics,hydrated,huzzah,husks,hunched,huffed,hubris,hubbub,hovercraft,houngan,hosed,horoscopes,hopelessness,hoodwinked,honorably,honeysuckle,homegirl,holiest,hippity,hildie,hieroglyphs,hexton,herein,heckle,heaping,healthilizer,headfirst,hatsue,harlot,hardwired,halothane,hairstyles,haagen,haaaaa,gutting,gummi,groundless,groaning,gristle,grills,graynamore,grabbin,goodes,goggle,glittering,glint,gleaming,glassy,girth,gimbal,giblets,gellers,geezers,geeze,garshaw,gargantuan,garfunkel,gangway,gandarium,gamut,galoshes,gallivanting,gainfully,gachnar,fusionlips,fusilli,furiously,frugal,fricking,frederika,freckling,frauds,fountainhead,forthwith,forgo,forgettable,foresight,foresaw,fondling,fondled,fondle,folksy,fluttering,fluffing,floundering,flirtatious,flexing,flatterer,flaring,fixating,finchy,figurehead,fiendish,fertilize,ferment,fending,fellahs,feelers,fascinate,fantabulous,falsify,fallopian,faithless,fairer,fainter,failings,facetious,eyepatch,exxon,extraterrestrials,extradite,extracurriculars,extinguish,expunged,expelling,exorbitant,exhilarated,exertion,exerting,excercise,everbody,evaporated,escargot,escapee,erases,epizootics,epithelials,ephrum,entanglements,enslave,engrossed,emphatic,emeralds,ember,emancipated,elevates,ejaculate,effeminate,eccentricities,easygoing,earshot,dunks,dullness,dulli,dulled,drumstick,dropper,driftwood,dregs,dreck,dreamboat,draggin,downsizing,donowitz,dominoes,diversions,distended,dissipate,disraeli,disqualify,disowned,dishwashing,disciplining,discerning,disappoints,dinged,digested,dicking,detonating,despising,depressor,depose,deport,dents,defused,deflecting,decryption,decoys,decoupage,decompress,decibel,decadence,deafening,dawning,dater,darkened,dappy,dallying,dagon,czechoslovakians,cuticles,cuteness,cupboards,culottes,cruisin,crosshairs,cronyn,criminalistics,creatively,creaming,crapping,cranny,cowed,contradicting,constipation,confining,confidences,conceiving,conceivably,concealment,compulsively,complainin,complacent,compels,communing,commode,comming,commensurate,columnists,colonoscopy,colchicine,coddling,clump,clubbed,clowning,cliffhanger,clang,cissy,choosers,choker,chiffon,channeled,chalet,cellmates,cathartic,caseload,carjack,canvass,canisters,candlestick,candlelit,camry,calzones,calitri,caldy,byline,butterball,bustier,burlap,bureaucrat,buffoons,buenas,brookline,bronzed,broiled,broda,briss,brioche,briar,breathable,brays,brassieres,boysenberry,bowline,boooo,boonies,booklets,bookish,boogeyman,boogey,bogas,boardinghouse,bluuch,blundering,bluer,blowed,blotchy,blossomed,bloodwork,bloodied,blithering,blinks,blathering,blasphemous,blacking,birdson,bings,bfmid,bfast,bettin,berkshires,benjamins,benevolence,benched,benatar,bellybutton,belabor,behooves,beddy,beaujolais,beattle,baxworth,baseless,barfing,bannish,bankrolled,banek,ballsy,ballpoint,baffling,badder,badda,bactine,backgammon,baako,aztreonam,authoritah,auctioning,arachtoids,apropos,aprons,apprised,apprehensive,anythng,antivenin,antichrist,anorexic,anoint,anguished,angioplasty,angio,amply,ampicillin,amphetamines,alternator,alcove,alabaster,airlifted,agrabah,affidavits,admonished,admonish,addled,addendum,accuser,accompli,absurdity,absolved,abrusso,abreast,aboot,abductions,abducting,aback,ababwa,aaahhhh,zorin,zinthar,zinfandel,zillions,zephyrs,zatarcs,zacks,youuu,yokels,yardstick,yammer,y'understand,wynette,wrung,wreaths,wowed,wouldn'ta,worming,wormed,workday,woodsy,woodshed,woodchuck,wojadubakowski,withering,witching,wiseass,wiretaps,wining,willoby,wiccaning,whupped,whoopi,whoomp,wholesaler,whiteness,whiner,whatchya,wharves,wenus,weirdoes,weaning,watusi,waponi,waistband,wackos,vouching,votre,vivica,viveca,vivant,vivacious,visor,visitin,visage,vicrum,vetted,ventriloquism,venison,varnsen,vaporized,vapid,vanstock,uuuuh,ushering,urologist,urination,upstart,uprooted,unsubtitled,unspoiled,unseat,unseasonably,unseal,unsatisfying,unnerve,unlikable,unleaded,uninsured,uninspired,unicycle,unhooked,unfunny,unfreezing,unflattering,unfairness,unexpressed,unending,unencumbered,unearth,undiscovered,undisciplined,understan,undershirt,underlings,underline,undercurrent,uncivilized,uncharacteristic,umpteenth,uglies,tuney,trumps,truckasaurus,trubshaw,trouser,tringle,trifling,trickster,trespassers,trespasser,traumas,trattoria,trashes,transgressions,trampling,tp'ed,toxoplasmosis,tounge,tortillas,topsy,topple,topnotch,tonsil,tions,timmuh,timithious,tilney,tighty,tightness,tightens,tidbits,ticketed,thyme,threepio,thoughtfully,thorkel,thommo,thing'll,thefts,that've,thanksgivings,tetherball,testikov,terraforming,tepid,tendonitis,tenboom,telex,teenybopper,tattered,tattaglias,tanneke,tailspin,tablecloth,swooping,swizzle,swiping,swindled,swilling,swerving,sweatshops,swaddling,swackhammer,svetkoff,supossed,superdad,sumptuous,sugary,sugai,subvert,substantiate,submersible,sublimating,subjugation,stymied,strychnine,streetlights,strassmans,stranglehold,strangeness,straddling,straddle,stowaways,stotch,stockbrokers,stifling,stepford,steerage,steena,statuary,starlets,staggeringly,ssshhh,squaw,spurt,spungeon,spritzer,sprightly,sprays,sportswear,spoonful,splittin,splitsville,speedily,specialise,spastic,sparrin,souvlaki,southie,sourpuss,soupy,soundstage,soothes,somebody'd,softest,sociopathic,socialized,snyders,snowmobiles,snowballed,snatches,smugness,smoothest,smashes,sloshed,sleight,skyrocket,skied,skewed,sixpence,sipowicz,singling,simulates,shyness,shuvanis,showoff,shortsighted,shopkeeper,shoehorn,shithouse,shirtless,shipshape,shifu,shelve,shelbyville,sheepskin,sharpens,shaquille,shanshu,servings,sequined,seizes,seashells,scrambler,scopes,schnauzer,schmo,schizoid,scampered,savagely,saudis,santas,sandovals,sanding,saleswoman,sagging,s'cuse,rutting,ruthlessly,runneth,ruffians,rubes,rosalita,rollerblades,rohypnol,roasts,roadies,ritten,rippling,ripples,rigoletto,richardo,rethought,reshoot,reserving,reseda,rescuer,reread,requisitions,repute,reprogram,replenish,repetitious,reorganizing,reinventing,reinvented,reheat,refrigerators,reenter,recruiter,recliner,rawdy,rashes,rajeski,raison,raisers,rages,quinine,questscape,queller,pygmalion,pushers,pusan,purview,pumpin,pubescent,prudes,provolone,propriety,propped,procrastinate,processional,preyed,pretrial,portent,pooling,poofy,polloi,policia,poacher,pluses,pleasuring,platitudes,plateaued,plaguing,pittance,pinheads,pincushion,pimply,pimped,piggyback,piecing,phillipe,philipse,philby,pharaohs,petyr,petitioner,peshtigo,pesaram,persnickety,perpetrate,percolating,pepto,penne,penell,pemmican,peeks,pedaling,peacemaker,pawnshop,patting,pathologically,patchouli,pasts,pasties,passin,parlors,paltrow,palamon,padlock,paddling,oversleep,overheating,overdosed,overcharge,overblown,outrageously,ornery,opportune,oooooooooh,oohhhh,ohhhhhh,ogres,odorless,obliterated,nyong,nymphomaniac,ntozake,novocain,nough,nonnie,nonissue,nodules,nightmarish,nightline,niceties,newsman,needra,nedry,necking,navour,nauseam,nauls,narim,namath,nagged,naboo,n'sync,myslexia,mutator,mustafi,musketeer,murtaugh,murderess,munching,mumsy,muley,mouseville,mortifying,morgendorffers,moola,montel,mongoloid,molestered,moldings,mocarbies,mo'ss,mixers,misrell,misnomer,misheard,mishandled,miscreant,misconceptions,miniscule,millgate,mettle,metricconverter,meteors,menorah,mengele,melding,meanness,mcgruff,mcarnold,matzoh,matted,mastectomy,massager,marveling,marooned,marmaduke,marick,manhandled,manatees,man'll,maltin,maliciously,malfeasance,malahide,maketh,makeovers,maiming,machismo,lumpectomy,lumbering,lucci,lording,lorca,lookouts,loogie,loners,loathed,lissen,lighthearted,lifer,lickin,lewen,levitation,lestercorp,lessee,lentils,legislate,legalizing,lederhosen,lawmen,lasskopf,lardner,lambeau,lamagra,ladonn,lactic,lacquer,labatier,krabappel,kooks,knickknacks,klutzy,kleynach,klendathu,kinross,kinkaid,kind'a,ketch,kesher,karikos,karenina,kanamits,junshi,jumbled,joust,jotted,jobson,jingling,jigalong,jerries,jellies,jeeps,javna,irresistable,internist,intercranial,inseminated,inquisitor,infuriate,inflating,infidelities,incessantly,incensed,incase,incapacitate,inasmuch,inaccuracies,imploding,impeding,impediments,immaturity,illegible,iditarod,icicles,ibuprofen,i'i'm,hymie,hydrolase,hunker,humps,humons,humidor,humdinger,humbling,huggin,huffing,housecleaning,hothouse,hotcakes,hosty,hootenanny,hootchie,hoosegow,honks,honeymooners,homily,homeopathic,hitchhikers,hissed,hillnigger,hexavalent,hewwo,hershe,hermey,hergott,henny,hennigans,henhouse,hemolytic,helipad,heifer,hebrews,hebbing,heaved,headlock,harrowing,harnessed,hangovers,handi,handbasket,halfrek,hacene,gyges,guys're,gundersons,gumption,gruntmaster,grubs,grossie,groped,grins,greaseball,gravesite,gratuity,granma,grandfathers,grandbaby,gradski,gracing,gossips,gooble,goners,golitsyn,gofer,godsake,goddaughter,gnats,gluing,glares,givers,ginza,gimmie,gimmee,gennero,gemme,gazpacho,gazed,gassy,gargling,gandhiji,galvanized,gallbladder,gaaah,furtive,fumigation,fucka,fronkonsteen,frills,freezin,freewald,freeloader,frailty,forger,foolhardy,fondest,fomin,followin,follicle,flotation,flopping,floodgates,flogged,flicked,flenders,fleabag,fixings,fixable,fistful,firewater,firelight,fingerbang,finalizing,fillin,filipov,fiderer,felling,feldberg,feign,faunia,fatale,farkus,fallible,faithfulness,factoring,eyeful,extramarital,exterminated,exhume,exasperated,eviscerate,estoy,esmerelda,escapades,epoxy,enticed,enthused,entendre,engrossing,endorphins,emptive,emmys,eminently,embezzler,embarressed,embarrassingly,embalmed,eludes,eling,elated,eirie,egotitis,effecting,eerily,eecom,eczema,earthy,earlobes,eally,dyeing,dwells,duvet,duncans,dulcet,droves,droppin,drools,drey'auc,downriver,domesticity,dollop,doesnt,dobler,divulged,diversionary,distancing,dispensers,disorienting,disneyworld,dismissive,disingenuous,disheveled,disfiguring,dinning,dimming,diligently,dilettante,dilation,dickensian,diaphragms,devastatingly,destabilize,desecrate,deposing,deniece,demony,delving,delicates,deigned,defraud,deflower,defibrillator,defiantly,defenceless,defacing,deconstruction,decompose,deciphering,decibels,deceptively,deceptions,decapitation,debutantes,debonair,deadlier,dawdling,davic,darwinism,darnit,darks,danke,danieljackson,dangled,cytoxan,cutout,cutlery,curveball,curfews,cummerbund,crunches,crouched,crisps,cripples,crilly,cribs,crewman,creepin,creeds,credenza,creak,crawly,crawlin,crawlers,crated,crackheads,coworker,couldn't've,corwins,coriander,copiously,convenes,contraceptives,contingencies,contaminating,conniption,condiment,concocting,comprehending,complacency,commendatore,comebacks,com'on,collarbone,colitis,coldly,coiffure,coffers,coeds,codependent,cocksucking,cockney,cockles,clutched,closeted,cloistered,cleve,cleats,clarifying,clapped,cinnabar,chunnel,chumps,cholinesterase,choirboy,chocolatey,chlamydia,chigliak,cheesie,chauvinistic,chasm,chartreuse,charo,charnier,chapil,chalked,chadway,certifiably,cellulite,celled,cavalcade,cataloging,castrated,cassio,cashews,cartouche,carnivore,carcinogens,capulet,captivated,capt'n,cancellations,campin,callate,callar,caffeinated,cadavers,cacophony,cackle,buzzes,buttoning,busload,burglaries,burbs,buona,bunions,bullheaded,buffs,bucyk,buckling,bruschetta,browbeating,broomsticks,broody,bromly,brolin,briefings,brewskies,breathalyzer,breakups,bratwurst,brania,braiding,brags,braggin,bradywood,bottomed,bossa,bordello,bookshelf,boogida,bondsman,bolder,boggles,bludgeoned,blowtorch,blotter,blips,blemish,bleaching,blainetologists,blading,blabbermouth,birdseed,bimmel,biloxi,biggly,bianchinni,betadine,berenson,belus,belloq,begets,befitting,beepers,beelzebub,beefed,bedridden,bedevere,beckons,beaded,baubles,bauble,battleground,bathrobes,basketballs,basements,barroom,barnacle,barkin,barked,baretta,bangles,bangler,banality,bambang,baltar,ballplayers,bagman,baffles,backroom,babysat,baboons,averse,audiotape,auctioneer,atten,atcha,astonishment,arugula,arroz,antihistamines,annoyances,anesthesiology,anatomically,anachronism,amiable,amaretto,allahu,alight,aimin,ailment,afterglow,affronte,advil,adrenals,actualization,acrost,ached,accursed,accoutrements,absconded,aboveboard,abetted,aargh,aaaahh,zuwicky,zolda,ziploc,zakamatak,youve,yippie,yesterdays,yella,yearns,yearnings,yearned,yawning,yalta,yahtzee,y'mean,y'are,wuthering,wreaks,worrisome,workiiing,wooooooo,wonky,womanizing,wolodarsky,wiwith,withdraws,wishy,wisht,wipers,wiper,winos,windthorne,windsurfing,windermere,wiggled,wiggen,whwhat,whodunit,whoaaa,whittling,whitesnake,whereof,wheezing,wheeze,whatd'ya,whataya,whammo,whackin,wellll,weightless,weevil,wedgies,webbing,weasly,wayside,waxes,waturi,washy,washrooms,wandell,waitaminute,waddya,waaaah,vornac,vishnoor,virulent,vindictiveness,vinceres,villier,vigeous,vestigial,ventilate,vented,venereal,veering,veered,veddy,vaslova,valosky,vailsburg,vaginas,vagas,urethra,upstaged,uploading,unwrapping,unwieldy,untapped,unsatisfied,unquenchable,unnerved,unmentionable,unlovable,unknowns,uninformed,unimpressed,unhappily,unguarded,unexplored,undergarment,undeniably,unclench,unclaimed,uncharacteristically,unbuttoned,unblemished,ululd,uhhhm,tweeze,tutsami,tushy,tuscarora,turkle,turghan,turbinium,tubers,trucoat,troxa,tropicana,triquetra,trimmers,triceps,trespassed,traya,traumatizing,transvestites,trainors,tradin,trackers,townies,tourelles,toucha,tossin,tortious,topshop,topes,tonics,tongs,tomsk,tomorrows,toiling,toddle,tizzy,tippers,timmi,thwap,thusly,ththe,thrusts,throwers,throwed,throughway,thickening,thermonuclear,thelwall,thataway,terrifically,tendons,teleportation,telepathically,telekinetic,teetering,teaspoons,tarantulas,tapas,tanned,tangling,tamales,tailors,tahitian,tactful,tachy,tablespoon,syrah,synchronicity,synch,synapses,swooning,switchman,swimsuits,sweltering,sweetly,suvolte,suslov,surfed,supposition,suppertime,supervillains,superfluous,superego,sunspots,sunning,sunless,sundress,suckah,succotash,sublevel,subbasement,studious,striping,strenuously,straights,stonewalled,stillness,stilettos,stevesy,steno,steenwyck,stargates,stammering,staedert,squiggly,squiggle,squashing,squaring,spreadsheet,spramp,spotters,sporto,spooking,splendido,spittin,spirulina,spiky,spate,spartacus,spacerun,soonest,something'll,someth,somepin,someone'll,sofas,soberly,sobered,snowmen,snowbank,snowballing,snivelling,sniffling,snakeskin,snagging,smush,smooter,smidgen,smackers,slumlord,slossum,slimmer,slighted,sleepwalk,sleazeball,skokie,skeptic,sitarides,sistah,sipped,sindell,simpletons,simony,silkwood,silks,silken,sightless,sideboard,shuttles,shrugging,shrouds,showy,shoveled,shouldn'ta,shoplifters,shitstorm,sheeny,shapetype,shaming,shallows,shackle,shabbily,shabbas,seppuku,senility,semite,semiautomatic,selznick,secretarial,sebacio,scuzzy,scummy,scrutinized,scrunchie,scribbled,scotches,scolded,scissor,schlub,scavenging,scarin,scarfing,scallions,scald,savour,savored,saute,sarcoidosis,sandbar,saluted,salish,saith,sailboats,sagittarius,sacre,saccharine,sacamano,rushdie,rumpled,rumba,rulebook,rubbers,roughage,rotisserie,rootie,roofy,roofie,romanticize,rittle,ristorante,rippin,rinsing,ringin,rincess,rickety,reveling,retest,retaliating,restorative,reston,restaurateur,reshoots,resetting,resentments,reprogramming,repossess,repartee,renzo,remore,remitting,remeber,relaxants,rejuvenate,rejections,regenerated,refocus,referrals,reeno,recycles,recrimination,reclining,recanting,reattach,reassigning,razgul,raved,rattlesnakes,rattles,rashly,raquetball,ransack,raisinettes,raheem,radisson,radishes,raban,quoth,qumari,quints,quilts,quilting,quien,quarreled,purty,purblind,punchbowl,publically,psychotics,psychopaths,psychoanalyze,pruning,provasik,protectin,propping,proportioned,prophylactic,proofed,prompter,procreate,proclivities,prioritizing,prinze,pricked,press'll,presets,prescribes,preocupe,prejudicial,prefex,preconceived,precipice,pralines,pragmatist,powerbar,pottie,pottersville,potsie,potholes,posses,posies,portkey,porterhouse,pornographers,poring,poppycock,poppers,pomponi,pokin,poitier,podiatry,pleeze,pleadings,playbook,platelets,plane'arium,placebos,place'll,pistachios,pirated,pinochle,pineapples,pinafore,pimples,piggly,piddling,picon,pickpockets,picchu,physiologically,physic,phobic,philandering,phenomenally,pheasants,pewter,petticoat,petronis,petitioning,perturbed,perpetuating,permutat,perishable,perimeters,perfumed,percocet,per'sus,pepperjack,penalize,pelting,pellet,peignoir,pedicures,peckers,pecans,pawning,paulsson,pattycake,patrolmen,patois,pathos,pasted,parishioner,parcheesi,parachuting,papayas,pantaloons,palpitations,palantine,paintballing,overtired,overstress,oversensitive,overnights,overexcited,overanxious,overachiever,outwitted,outvoted,outnumber,outlast,outlander,out've,orphey,orchestrating,openers,ooooooo,okies,ohhhhhhhhh,ohhhhhhhh,ogling,offbeat,obsessively,obeyed,o'hana,o'bannon,o'bannion,numpce,nummy,nuked,nuances,nourishing,nosedive,norbu,nomlies,nomine,nixed,nihilist,nightshift,newmeat,neglectful,neediness,needin,naphthalene,nanocytes,nanite,naivete,n'yeah,mystifying,myhnegon,mutating,musing,mulled,muggy,muerto,muckraker,muchachos,mountainside,motherless,mosquitos,morphed,mopped,moodoo,moncho,mollem,moisturiser,mohicans,mocks,mistresses,misspent,misinterpretation,miscarry,minuses,mindee,mimes,millisecond,milked,mightn't,mightier,mierzwiak,microchips,meyerling,mesmerizing,mershaw,meecrob,medicate,meddled,mckinnons,mcgewan,mcdunnough,mcats,mbien,matzah,matriarch,masturbated,masselin,martialed,marlboros,marksmanship,marinate,marchin,manicured,malnourished,malign,majorek,magnon,magnificently,macking,machiavellian,macdougal,macchiato,macaws,macanaw,m'self,lydells,lusts,lucite,lubricants,lopper,lopped,loneliest,lonelier,lomez,lojack,loath,liquefy,lippy,limps,likin,lightness,liesl,liebchen,licious,libris,libation,lhamo,leotards,leanin,laxatives,lavished,latka,lanyard,lanky,landmines,lameness,laddies,lacerated,labored,l'amour,kreskin,kovitch,kournikova,kootchy,konoss,knknow,knickety,knackety,kmart,klicks,kiwanis,kissable,kindergartners,kilter,kidnet,kid'll,kicky,kickbacks,kickback,kholokov,kewpie,kendo,katra,kareoke,kafelnikov,kabob,junjun,jumba,julep,jordie,jondy,jolson,jenoff,jawbone,janitorial,janiro,ipecac,invigorated,intruded,intros,intravenously,interruptus,interrogations,interject,interfacing,interestin,insuring,instilled,insensitivity,inscrutable,inroads,innards,inlaid,injector,ingratitude,infuriates,infra,infliction,indelicate,incubators,incrimination,inconveniencing,inconsolable,incestuous,incas,incarcerate,inbreeding,impudence,impressionists,impeached,impassioned,imipenem,idling,idiosyncrasies,icebergs,hypotensive,hydrochloride,hushed,humus,humph,hummm,hulking,hubcaps,hubald,howya,howbout,how'll,housebroken,hotwire,hotspots,hotheaded,horrace,hopsfield,honto,honkin,honeymoons,homewrecker,hombres,hollers,hollerin,hoedown,hoboes,hobbling,hobble,hoarse,hinky,highlighters,hexes,heru'ur,hernias,heppleman,hell're,heighten,heheheheheh,heheheh,hedging,heckling,heckled,heavyset,heatshield,heathens,heartthrob,headpiece,hayseed,haveo,hauls,hasten,harridan,harpoons,hardens,harcesis,harbouring,hangouts,halkein,haleh,halberstam,hairnet,hairdressers,hacky,haaaa,h'yah,gusta,gushy,gurgling,guilted,gruel,grudging,grrrrrr,grosses,groomsmen,griping,gravest,gratified,grated,goulash,goopy,goona,goodly,godliness,godawful,godamn,glycerin,glutes,glowy,globetrotters,glimpsed,glenville,glaucoma,girlscout,giraffes,gilbey,gigglepuss,ghora,gestating,gelato,geishas,gearshift,gayness,gasped,gaslighting,garretts,garba,gablyczyck,g'head,fumigating,fumbling,fudged,fuckwad,fuck're,fuchsia,fretting,freshest,frenchies,freezers,fredrica,fraziers,fraidy,foxholes,fourty,fossilized,forsake,forfeits,foreclosed,foreal,footsies,florists,flopped,floorshow,floorboard,flinching,flecks,flaubert,flatware,flatulence,flatlined,flashdance,flail,flagging,fiver,fitzy,fishsticks,finetti,finelli,finagle,filko,fieldstone,fibber,ferrini,feedin,feasting,favore,fathering,farrouhk,farmin,fairytale,fairservice,factoid,facedown,fabled,eyeballin,extortionist,exquisitely,expedited,exorcise,existentialist,execs,exculpatory,exacerbate,everthing,eventuality,evander,euphoric,euphemisms,estamos,erred,entitle,enquiries,enormity,enfants,endive,encyclopedias,emulating,embittered,effortless,ectopic,ecirc,easely,earphones,earmarks,dweller,durslar,durned,dunois,dunking,dunked,dumdum,dullard,dudleys,druthers,druggist,drossos,drooled,driveways,drippy,dreamless,drawstring,drang,drainpipe,dozing,dotes,dorkface,doorknobs,doohickey,donnatella,doncha,domicile,dokos,dobermans,dizzying,divola,ditsy,distaste,disservice,dislodged,dislodge,disinherit,disinformation,discounting,dinka,dimly,digesting,diello,diddling,dictatorships,dictators,diagnostician,devours,devilishly,detract,detoxing,detours,detente,destructs,desecrated,derris,deplore,deplete,demure,demolitions,demean,delish,delbruck,delaford,degaulle,deftly,deformity,deflate,definatly,defector,decrypted,decontamination,decapitate,decanter,dardis,dampener,damme,daddy'll,dabbling,dabbled,d'etre,d'argent,d'alene,d'agnasti,czechoslovakian,cymbal,cyberdyne,cutoffs,cuticle,curvaceous,curiousity,crowing,crowed,croutons,cropped,criminy,crescentis,crashers,cranwell,coverin,courtrooms,countenance,cosmically,cosign,corroboration,coroners,cornflakes,copperpot,copperhead,copacetic,coordsize,convulsing,consults,conjures,congenial,concealer,compactor,commercialism,cokey,cognizant,clunkers,clumsily,clucking,cloves,cloven,cloths,clothe,clods,clocking,clings,clavicle,classless,clashing,clanking,clanging,clamping,civvies,citywide,circulatory,circuited,chronisters,chromic,choos,chloroformed,chillun,cheesed,chatterbox,chaperoned,channukah,cerebellum,centerpieces,centerfold,ceecee,ccedil,cavorting,cavemen,cauterized,cauldwell,catting,caterine,cassiopeia,carves,cartwheel,carpeted,carob,caressing,carelessly,careening,capricious,capitalistic,capillaries,candidly,camaraderie,callously,calfskin,caddies,buttholes,busywork,busses,burps,burgomeister,bunkhouse,bungchow,bugler,buffets,buffed,brutish,brusque,bronchitis,bromden,brolly,broached,brewskis,brewin,brean,breadwinner,brana,bountiful,bouncin,bosoms,borgnine,bopping,bootlegs,booing,bombosity,bolting,boilerplate,bluey,blowback,blouses,bloodsuckers,bloodstained,bloat,bleeth,blackface,blackest,blackened,blacken,blackballed,blabs,blabbering,birdbrain,bipartisanship,biodegradable,biltmore,bilked,big'uns,bidet,besotted,bernheim,benegas,bendiga,belushi,bellboys,belittling,behinds,begone,bedsheets,beckoning,beaute,beaudine,beastly,beachfront,bathes,batak,baser,baseballs,barbella,bankrolling,bandaged,baerly,backlog,backin,babying,azkaban,awwwww,aviary,authorizes,austero,aunty,attics,atreus,astounded,astonish,artemus,arses,arintero,appraiser,apathetic,anybody'd,anxieties,anticlimactic,antar,anglos,angleman,anesthetist,androscoggin,andolini,andale,amway,amuck,amniocentesis,amnesiac,americano,amara,alvah,altruism,alternapalooza,alphabetize,alpaca,allus,allergist,alexandros,alaikum,akimbo,agoraphobia,agides,aggrhh,aftertaste,adoptions,adjuster,addictions,adamantium,activator,accomplishes,aberrant,aaaaargh,aaaaaaaaaaaaa,a'ight,zzzzzzz,zucchini,zookeeper,zirconia,zippers,zequiel,zellary,zeitgeist,zanuck,zagat,you'n,ylang,yes'm,yenta,yecchh,yecch,yawns,yankin,yahdah,yaaah,y'got,xeroxed,wwooww,wristwatch,wrangled,wouldst,worthiness,worshiping,wormy,wormtail,wormholes,woosh,wollsten,wolfing,woefully,wobbling,wintry,wingding,windstorm,windowtext,wiluna,wilting,wilted,willick,willenholly,wildflowers,wildebeest,whyyy,whoppers,whoaa,whizzing,whizz,whitest,whistled,whist,whinny,wheelies,whazzup,whatwhatwhaaat,whato,whatdya,what'dya,whacks,wewell,wetsuit,welluh,weeps,waylander,wavin,wassail,wasnt,warneford,warbucks,waltons,wallbanger,waiving,waitwait,vowing,voucher,vornoff,vorhees,voldemort,vivre,vittles,vindaloo,videogames,vichyssoise,vicarious,vesuvius,verguenza,ven't,velveteen,velour,velociraptor,vastness,vasectomies,vapors,vanderhof,valmont,validates,valiantly,vacuums,usurp,usernum,us'll,urinals,unyielding,unvarnished,unturned,untouchables,untangled,unsecured,unscramble,unreturned,unremarkable,unpretentious,unnerstand,unmade,unimpeachable,unfashionable,underwrite,underlining,underling,underestimates,underappreciated,uncouth,uncork,uncommonly,unclog,uncircumcised,unchallenged,uncas,unbuttoning,unapproved,unamerican,unafraid,umpteen,umhmm,uhwhy,ughuh,typewriters,twitches,twitched,twirly,twinkling,twinges,twiddling,turners,turnabout,tumblin,tryed,trowel,trousseau,trivialize,trifles,tribianni,trenchcoat,trembled,traumatize,transitory,transients,transfuse,transcribing,tranq,trampy,traipsed,trainin,trachea,traceable,touristy,toughie,toscanini,tortola,tortilla,torreon,toreador,tommorrow,tollbooth,tollans,toidy,togas,tofurkey,toddling,toddies,toasties,toadstool,to've,tingles,timin,timey,timetables,tightest,thuggee,thrusting,thrombus,throes,thrifty,thornharts,thinnest,thicket,thetas,thesulac,tethered,testaburger,tersenadine,terrif,terdlington,tepui,temping,tector,taxidermy,tastebuds,tartlets,tartabull,tar'd,tantamount,tangy,tangles,tamer,tabula,tabletops,tabithia,szechwan,synthedyne,svenjolly,svengali,survivalists,surmise,surfboards,surefire,suprise,supremacists,suppositories,superstore,supercilious,suntac,sunburned,summercliff,sullied,sugared,suckle,subtleties,substantiated,subsides,subliminal,subhuman,strowman,stroked,stroganoff,streetlight,straying,strainer,straighter,straightener,stoplight,stirrups,stewing,stereotyping,stepmommy,stephano,stashing,starshine,stairwells,squatsie,squandering,squalid,squabbling,squab,sprinkling,spreader,spongy,spokesmen,splintered,spittle,spitter,spiced,spews,spendin,spect,spearchucker,spatulas,southtown,soused,soshi,sorter,sorrowful,sooth,some'in,soliloquy,soiree,sodomized,sobriki,soaping,snows,snowcone,snitching,snitched,sneering,snausages,snaking,smoothed,smoochies,smarten,smallish,slushy,slurring,sluman,slithers,slippin,sleuthing,sleeveless,skinless,skillfully,sketchbook,skagnetti,sista,sinning,singularly,sinewy,silverlake,siguto,signorina,sieve,sidearms,shying,shunning,shtud,shrieks,shorting,shortbread,shopkeepers,shmancy,shizzit,shitheads,shitfaced,shipmates,shiftless,shelving,shedlow,shavings,shatters,sharifa,shampoos,shallots,shafter,sha'nauc,sextant,serviceable,sepsis,senores,sendin,semis,semanski,selflessly,seinfelds,seers,seeps,seductress,secaucus,sealant,scuttling,scusa,scrunched,scissorhands,schreber,schmancy,scamps,scalloped,savoir,savagery,sarong,sarnia,santangel,samool,sallow,salino,safecracker,sadism,sacrilegious,sabrini,sabath,s'aright,ruttheimer,rudest,rubbery,rousting,rotarian,roslin,roomed,romari,romanica,rolltop,rolfski,rockettes,roared,ringleader,riffing,ribcage,rewired,retrial,reting,resuscitated,restock,resale,reprogrammed,replicant,repentant,repellant,repays,repainting,renegotiating,rendez,remem,relived,relinquishes,relearn,relaxant,rekindling,rehydrate,refueled,refreshingly,refilling,reexamine,reeseman,redness,redeemable,redcoats,rectangles,recoup,reciprocated,reassessing,realy,realer,reachin,re'kali,rawlston,ravages,rappaports,ramoray,ramming,raindrops,rahesh,radials,racists,rabartu,quiches,quench,quarreling,quaintly,quadrants,putumayo,put'em,purifier,pureed,punitis,pullout,pukin,pudgy,puddings,puckering,pterodactyl,psychodrama,psats,protestations,protectee,prosaic,propositioned,proclivity,probed,printouts,prevision,pressers,preset,preposition,preempt,preemie,preconceptions,prancan,powerpuff,potties,potpie,poseur,porthole,poops,pooping,pomade,polyps,polymerized,politeness,polisher,polack,pocketknife,poatia,plebeian,playgroup,platonically,platitude,plastering,plasmapheresis,plaids,placemats,pizzazz,pintauro,pinstripes,pinpoints,pinkner,pincer,pimento,pileup,pilates,pigmen,pieeee,phrased,photocopies,phoebes,philistines,philanderer,pheromone,phasers,pfeffernuesse,pervs,perspire,personify,perservere,perplexed,perpetrating,perkiness,perjurer,periodontist,perfunctory,perdido,percodan,pentameter,pentacle,pensive,pensione,pennybaker,pennbrooke,penhall,pengin,penetti,penetrates,pegnoir,peeve,peephole,pectorals,peckin,peaky,peaksville,paxcow,paused,patted,parkishoff,parkers,pardoning,paraplegic,paraphrasing,paperers,papered,pangs,paneling,palooza,palmed,palmdale,palatable,pacify,pacified,owwwww,oversexed,overrides,overpaying,overdrawn,overcompensate,overcomes,overcharged,outmaneuver,outfoxed,oughtn't,ostentatious,oshun,orthopedist,or'derves,ophthalmologist,operagirl,oozes,oooooooh,onesie,omnis,omelets,oktoberfest,okeydoke,ofthe,ofher,obstetrical,obeys,obeah,o'henry,nyquil,nyanyanyanyah,nuttin,nutsy,nutball,nurhachi,numbskull,nullifies,nullification,nucking,nubbin,nourished,nonspecific,noing,noinch,nohoho,nobler,nitwits,newsprint,newspaperman,newscaster,neuropathy,netherworld,neediest,navasky,narcissists,napped,nafta,mache,mykonos,mutilating,mutherfucker,mutha,mutates,mutate,musn't,murchy,multitasking,mujeeb,mudslinging,muckraking,mousetrap,mourns,mournful,motherf,mostro,morphing,morphate,moralistic,moochy,mooching,monotonous,monopolize,monocle,molehill,moland,mofet,mockup,mobilizing,mmmmmmm,mitzvahs,mistreating,misstep,misjudge,misinformation,misdirected,miscarriages,miniskirt,mindwarped,minced,milquetoast,miguelito,mightily,midstream,midriff,mideast,microbe,methuselah,mesdames,mescal,men'll,memma,megaton,megara,megalomaniac,meeee,medulla,medivac,meaninglessness,mcnuggets,mccarthyism,maypole,may've,mauve,mateys,marshack,markles,marketable,mansiere,manservant,manse,manhandling,mallomars,malcontent,malaise,majesties,mainsail,mailmen,mahandra,magnolias,magnified,magev,maelstrom,machu,macado,m'boy,m'appelle,lustrous,lureen,lunges,lumped,lumberyard,lulled,luego,lucks,lubricated,loveseat,loused,lounger,loski,lorre,loora,looong,loonies,loincloth,lofts,lodgers,lobbing,loaner,livered,liqueur,ligourin,lifesaving,lifeguards,lifeblood,liaisons,let'em,lesbianism,lence,lemonlyman,legitimize,leadin,lazars,lazarro,lawyering,laugher,laudanum,latrines,lations,laters,lapels,lakefront,lahit,lafortunata,lachrymose,l'italien,kwaini,kruczynski,kramerica,kowtow,kovinsky,korsekov,kopek,knowakowski,knievel,knacks,kiowas,killington,kickball,keyworth,keymaster,kevie,keveral,kenyons,keggers,keepsakes,kechner,keaty,kavorka,karajan,kamerev,kaggs,jujyfruit,jostled,jonestown,jokey,joists,jocko,jimmied,jiggled,jests,jenzen,jenko,jellyman,jedediah,jealitosis,jaunty,jarmel,jankle,jagoff,jagielski,jackrabbits,jabbing,jabberjaw,izzat,irresponsibly,irrepressible,irregularity,irredeemable,inuvik,intuitions,intubated,intimates,interminable,interloper,intercostal,instyle,instigate,instantaneously,ining,ingrown,ingesting,infusing,infringe,infinitum,infact,inequities,indubitably,indisputable,indescribably,indentation,indefinable,incontrovertible,inconsequential,incompletes,incoherently,inclement,incidentals,inarticulate,inadequacies,imprudent,improprieties,imprison,imprinted,impressively,impostors,importante,imperious,impale,immodest,immobile,imbedded,imbecilic,illegals,idn't,hysteric,hypotenuse,hygienic,hyeah,hushpuppies,hunhh,humpback,humored,hummed,humiliates,humidifier,huggy,huggers,huckster,hotbed,hosing,hosers,horsehair,homebody,homebake,holing,holies,hoisting,hogwallop,hocks,hobbits,hoaxes,hmmmmm,hisses,hippest,hillbillies,hilarity,heurh,herniated,hermaphrodite,hennifer,hemlines,hemline,hemery,helplessness,helmsley,hellhound,heheheheh,heeey,hedda,heartbeats,heaped,healers,headstart,headsets,headlong,hawkland,havta,haulin,harvey'll,hanta,hansom,hangnail,handstand,handrail,handoff,hallucinogen,hallor,halitosis,haberdashery,gypped,guy'll,gumbel,guerillas,guava,guardrail,grunther,grunick,groppi,groomer,grodin,gripes,grinds,grifters,gretch,greevey,greasing,graveyards,grandkid,grainy,gouging,gooney,googly,goldmuff,goldenrod,goingo,godly,gobbledygook,gobbledegook,glues,gloriously,glengarry,glassware,glamor,gimmicks,giggly,giambetti,ghoulish,ghettos,ghali,gether,geriatrics,gerbils,geosynchronous,georgio,gente,gendarme,gelbman,gazillionth,gayest,gauging,gastro,gaslight,gasbag,garters,garish,garas,gantu,gangy,gangly,gangland,galling,gadda,furrowed,funnies,funkytown,fugimotto,fudging,fuckeen,frustrates,froufrou,froot,fromberge,frizzies,fritters,frightfully,friendliest,freeloading,freelancing,freakazoid,fraternization,framers,fornication,fornicating,forethought,footstool,foisting,focussing,focking,flurries,fluffed,flintstones,fledermaus,flayed,flawlessly,flatters,flashbang,flapped,fishies,firmer,fireproof,firebug,fingerpainting,finessed,findin,financials,finality,fillets,fiercest,fiefdom,fibbing,fervor,fentanyl,fenelon,fedorchuk,feckless,feathering,faucets,farewells,fantasyland,fanaticism,faltered,faggy,faberge,extorting,extorted,exterminating,exhumation,exhilaration,exhausts,exfoliate,excels,exasperating,exacting,everybody'd,evasions,espressos,esmail,errrr,erratically,eroding,ernswiler,epcot,enthralled,ensenada,enriching,enrage,enhancer,endear,encrusted,encino,empathic,embezzle,emanates,electricians,eking,egomaniacal,egging,effacing,ectoplasm,eavesdropped,dummkopf,dugray,duchaisne,drunkard,drudge,droop,droids,drips,dripped,dribbles,drazens,downy,downsize,downpour,dosages,doppelganger,dopes,doohicky,dontcha,doneghy,divining,divest,diuretics,diuretic,distrustful,disrupts,dismemberment,dismember,disinfect,disillusionment,disheartening,discourteous,discotheque,discolored,dirtiest,diphtheria,dinks,dimpled,didya,dickwad,diatribes,diathesis,diabetics,deviants,detonates,detests,detestable,detaining,despondent,desecration,derision,derailing,deputized,depressors,dependant,dentures,denominators,demur,demonology,delts,dellarte,delacour,deflated,defib,defaced,decorators,deaqon,davola,datin,darwinian,darklighters,dandelions,dampened,damaskinos,dalrimple,d'peshu,d'hoffryn,d'astier,cynics,cutesy,cutaway,curmudgeon,curdle,culpability,cuisinart,cuffing,crypts,cryptid,crunched,crumblers,crudely,crosscheck,croon,crissake,crevasse,creswood,creepo,creases,creased,creaky,cranks,crabgrass,coveralls,couple'a,coughs,coslaw,corporeal,cornucopia,cornering,corks,cordoned,coolly,coolin,cookbooks,contrite,contented,constrictor,confound,confit,confiscating,condoned,conditioners,concussions,comprendo,comers,combustible,combusted,collingswood,coldness,coitus,codicil,coasting,clydesdale,cluttering,clunker,clunk,clumsiness,clotted,clothesline,clinches,clincher,cleverness,clench,clein,cleanses,claymores,clammed,chugging,chronically,christsakes,choque,chompers,chiseling,chirpy,chirp,chinks,chingachgook,chickenpox,chickadee,chewin,chessboard,chargin,chanteuse,chandeliers,chamdo,chagrined,chaff,certs,certainties,cerreno,cerebrum,censured,cemetary,caterwauling,cataclysmic,casitas,cased,carvel,carting,carrear,carolling,carolers,carnie,cardiogram,carbuncle,capulets,canines,candaules,canape,caldecott,calamitous,cadillacs,cachet,cabeza,cabdriver,buzzards,butai,businesswomen,bungled,bumpkins,bummers,bulldoze,buffybot,bubut,bubbies,brrrrr,brownout,brouhaha,bronzing,bronchial,broiler,briskly,briefcases,bricked,breezing,breeher,breakable,breadstick,bravenet,braved,brandies,brainwaves,brainiest,braggart,bradlee,boys're,boys'll,boys'd,boutonniere,bossed,bosomy,borans,boosts,bookshelves,bookends,boneless,bombarding,bollo,boinked,boink,bluest,bluebells,bloodshot,blockhead,blockbusters,blithely,blather,blankly,bladders,blackbeard,bitte,bippy,biogenetics,bilge,bigglesworth,bicuspids,beususe,betaseron,besmirch,bernece,bereavement,bentonville,benchley,benching,bembe,bellyaching,bellhops,belie,beleaguered,behrle,beginnin,begining,beenie,beefs,beechwood,becau,beaverhausen,beakers,bazillion,baudouin,barrytown,barringtons,barneys,barbs,barbers,barbatus,bankrupted,bailiffs,backslide,baby'd,baaad,b'fore,awwwk,aways,awakes,automatics,authenticate,aught,aubyn,attired,attagirl,atrophied,asystole,astroturf,assertiveness,artichokes,arquillians,aright,archenemy,appraise,appeased,antin,anspaugh,anesthetics,anaphylactic,amscray,ambivalence,amalio,alriiight,alphabetized,alpena,alouette,allora,alliteration,allenwood,allegiances,algerians,alcerro,alastor,ahaha,agitators,aforethought,advertises,admonition,adirondacks,adenoids,acupuncturist,acula,actuarial,activators,actionable,achingly,accusers,acclimated,acclimate,absurdly,absorbent,absolvo,absolutes,absences,abdomenizer,aaaaaaaaah,aaaaaaaaaa,a'right".split(","),
45766male_names:"james,john,robert,michael,william,david,richard,charles,joseph,thomas,christopher,daniel,paul,mark,donald,george,kenneth,steven,edward,brian,ronald,anthony,kevin,jason,matthew,gary,timothy,jose,larry,jeffrey,frank,scott,eric,stephen,andrew,raymond,gregory,joshua,jerry,dennis,walter,patrick,peter,harold,douglas,henry,carl,arthur,ryan,roger,joe,juan,jack,albert,jonathan,justin,terry,gerald,keith,samuel,willie,ralph,lawrence,nicholas,roy,benjamin,bruce,brandon,adam,harry,fred,wayne,billy,steve,louis,jeremy,aaron,randy,eugene,carlos,russell,bobby,victor,ernest,phillip,todd,jesse,craig,alan,shawn,clarence,sean,philip,chris,johnny,earl,jimmy,antonio,danny,bryan,tony,luis,mike,stanley,leonard,nathan,dale,manuel,rodney,curtis,norman,marvin,vincent,glenn,jeffery,travis,jeff,chad,jacob,melvin,alfred,kyle,francis,bradley,jesus,herbert,frederick,ray,joel,edwin,don,eddie,ricky,troy,randall,barry,bernard,mario,leroy,francisco,marcus,micheal,theodore,clifford,miguel,oscar,jay,jim,tom,calvin,alex,jon,ronnie,bill,lloyd,tommy,leon,derek,darrell,jerome,floyd,leo,alvin,tim,wesley,dean,greg,jorge,dustin,pedro,derrick,dan,zachary,corey,herman,maurice,vernon,roberto,clyde,glen,hector,shane,ricardo,sam,rick,lester,brent,ramon,tyler,gilbert,gene,marc,reginald,ruben,brett,nathaniel,rafael,edgar,milton,raul,ben,cecil,duane,andre,elmer,brad,gabriel,ron,roland,jared,adrian,karl,cory,claude,erik,darryl,neil,christian,javier,fernando,clinton,ted,mathew,tyrone,darren,lonnie,lance,cody,julio,kurt,allan,clayton,hugh,max,dwayne,dwight,armando,felix,jimmie,everett,ian,ken,bob,jaime,casey,alfredo,alberto,dave,ivan,johnnie,sidney,byron,julian,isaac,clifton,willard,daryl,virgil,andy,salvador,kirk,sergio,seth,kent,terrance,rene,eduardo,terrence,enrique,freddie,stuart,fredrick,arturo,alejandro,joey,nick,luther,wendell,jeremiah,evan,julius,donnie,otis,trevor,luke,homer,gerard,doug,kenny,hubert,angelo,shaun,lyle,matt,alfonso,orlando,rex,carlton,ernesto,pablo,lorenzo,omar,wilbur,blake,horace,roderick,kerry,abraham,rickey,ira,andres,cesar,johnathan,malcolm,rudolph,damon,kelvin,rudy,preston,alton,archie,marco,pete,randolph,garry,geoffrey,jonathon,felipe,bennie,gerardo,dominic,loren,delbert,colin,guillermo,earnest,benny,noel,rodolfo,myron,edmund,salvatore,cedric,lowell,gregg,sherman,devin,sylvester,roosevelt,israel,jermaine,forrest,wilbert,leland,simon,irving,owen,rufus,woodrow,sammy,kristopher,levi,marcos,gustavo,jake,lionel,marty,gilberto,clint,nicolas,laurence,ismael,orville,drew,ervin,dewey,wilfred,josh,hugo,ignacio,caleb,tomas,sheldon,erick,frankie,darrel,rogelio,terence,alonzo,elias,bert,elbert,ramiro,conrad,noah,grady,phil,cornelius,lamar,rolando,clay,percy,bradford,merle,darin,amos,terrell,moses,irvin,saul,roman,darnell,randal,tommie,timmy,darrin,brendan,toby,van,abel,dominick,emilio,elijah,cary,domingo,aubrey,emmett,marlon,emanuel,jerald,edmond,emil,dewayne,otto,teddy,reynaldo,bret,jess,trent,humberto,emmanuel,stephan,louie,vicente,lamont,garland,micah,efrain,heath,rodger,demetrius,ethan,eldon,rocky,pierre,eli,bryce,antoine,robbie,kendall,royce,sterling,grover,elton,cleveland,dylan,chuck,damian,reuben,stan,leonardo,russel,erwin,benito,hans,monte,blaine,ernie,curt,quentin,agustin,jamal,devon,adolfo,tyson,wilfredo,bart,jarrod,vance,denis,damien,joaquin,harlan,desmond,elliot,darwin,gregorio,kermit,roscoe,esteban,anton,solomon,norbert,elvin,nolan,carey,rod,quinton,hal,brain,rob,elwood,kendrick,darius,moises,marlin,fidel,thaddeus,cliff,marcel,ali,raphael,bryon,armand,alvaro,jeffry,dane,joesph,thurman,ned,sammie,rusty,michel,monty,rory,fabian,reggie,kris,isaiah,gus,avery,loyd,diego,adolph,millard,rocco,gonzalo,derick,rodrigo,gerry,rigoberto,alphonso,rickie,noe,vern,elvis,bernardo,mauricio,hiram,donovan,basil,nickolas,scot,vince,quincy,eddy,sebastian,federico,ulysses,heriberto,donnell,denny,gavin,emery,romeo,jayson,dion,dante,clement,coy,odell,jarvis,bruno,issac,dudley,sanford,colby,carmelo,nestor,hollis,stefan,donny,linwood,beau,weldon,galen,isidro,truman,delmar,johnathon,silas,frederic,irwin,merrill,charley,marcelino,carlo,trenton,kurtis,aurelio,winfred,vito,collin,denver,leonel,emory,pasquale,mohammad,mariano,danial,landon,dirk,branden,adan,numbers,clair,buford,bernie,wilmer,emerson,zachery,jacques,errol,josue,edwardo,wilford,theron,raymundo,daren,tristan,robby,lincoln,jame,genaro,octavio,cornell,hung,arron,antony,herschel,alva,giovanni,garth,cyrus,cyril,ronny,stevie,lon,kennith,carmine,augustine,erich,chadwick,wilburn,russ,myles,jonas,mitchel,mervin,zane,jamel,lazaro,alphonse,randell,johnie,jarrett,ariel,abdul,dusty,luciano,seymour,scottie,eugenio,mohammed,arnulfo,lucien,ferdinand,thad,ezra,aldo,rubin,mitch,earle,abe,marquis,lanny,kareem,jamar,boris,isiah,emile,elmo,aron,leopoldo,everette,josef,eloy,dorian,rodrick,reinaldo,lucio,jerrod,weston,hershel,lemuel,lavern,burt,jules,gil,eliseo,ahmad,nigel,efren,antwan,alden,margarito,refugio,dino,osvaldo,les,deandre,normand,kieth,ivory,trey,norberto,napoleon,jerold,fritz,rosendo,milford,sang,deon,christoper,alfonzo,lyman,josiah,brant,wilton,rico,jamaal,dewitt,brenton,yong,olin,faustino,claudio,judson,gino,edgardo,alec,jarred,donn,trinidad,tad,porfirio,odis,lenard,chauncey,tod,mel,marcelo,kory,augustus,keven,hilario,bud,sal,orval,mauro,dannie,zachariah,olen,anibal,milo,jed,thanh,amado,lenny,tory,richie,horacio,brice,mohamed,delmer,dario,mac,jonah,jerrold,robt,hank,sung,rupert,rolland,kenton,damion,chi,antone,waldo,fredric,bradly,kip,burl,tyree,jefferey,ahmed,willy,stanford,oren,moshe,mikel,enoch,brendon,quintin,jamison,florencio,darrick,tobias,minh,hassan,giuseppe,demarcus,cletus,tyrell,lyndon,keenan,werner,theo,geraldo,columbus,chet,bertram,markus,huey,hilton,dwain,donte,tyron,omer,isaias,hipolito,fermin,chung,adalberto,jamey,teodoro,mckinley,maximo,raleigh,lawerence,abram,rashad,emmitt,daron,chong,samual,otha,miquel,eusebio,dong,domenic,darron,wilber,renato,hoyt,haywood,ezekiel,chas,florentino,elroy,clemente,arden,neville,edison,deshawn,carrol,shayne,nathanial,jordon,danilo,claud,sherwood,raymon,rayford,cristobal,ambrose,titus,hyman,felton,ezequiel,erasmo,lonny,milan,lino,jarod,herb,andreas,rhett,jude,douglass,cordell,oswaldo,ellsworth,virgilio,toney,nathanael,benedict,mose,hong,isreal,garret,fausto,arlen,zack,modesto,francesco,manual,gaylord,gaston,filiberto,deangelo,michale,granville,malik,zackary,tuan,nicky,cristopher,antione,malcom,korey,jospeh,colton,waylon,hosea,shad,santo,rudolf,rolf,renaldo,marcellus,lucius,kristofer,harland,arnoldo,rueben,leandro,kraig,jerrell,jeromy,hobert,cedrick,arlie,winford,wally,luigi,keneth,jacinto,graig,franklyn,edmundo,leif,jeramy,willian,vincenzo,shon,michal,lynwood,jere,elden,darell,broderick,alonso".split(",")},module.exports=frequency_lists;
45767
45768},{}],4:[function(require,module,exports){
45769var feedback,matching,scoring,time,time_estimates,zxcvbn;matching=require("./matching"),scoring=require("./scoring"),time_estimates=require("./time_estimates"),feedback=require("./feedback"),time=function(){return(new Date).getTime()},zxcvbn=function(e,t){var i,n,c,s,a,r,m,o,u,g,_;for(null==t&&(t=[]),g=time(),u=[],c=0,s=t.length;c<s;c++)i=t[c],"string"!=(m=typeof i)&&"number"!==m&&"boolean"!==m||u.push(i.toString().toLowerCase());matching.set_user_input_dictionary(u),a=matching.omnimatch(e),o=scoring.most_guessable_match_sequence(e,a),o.calc_time=time()-g,n=time_estimates.estimate_attack_times(o.guesses);for(r in n)_=n[r],o[r]=_;return o.feedback=feedback.get_feedback(o.score,o.sequence),o},module.exports=zxcvbn;
45770
45771},{"./feedback":2,"./matching":5,"./scoring":6,"./time_estimates":7}],5:[function(require,module,exports){
45772var DATE_MAX_YEAR,DATE_MIN_YEAR,DATE_SPLITS,GRAPHS,L33T_TABLE,RANKED_DICTIONARIES,REGEXEN,adjacency_graphs,build_ranked_dict,frequency_lists,lst,matching,name,scoring;frequency_lists=require("./frequency_lists"),adjacency_graphs=require("./adjacency_graphs"),scoring=require("./scoring"),build_ranked_dict=function(e){var t,n,r,i,a;for(i={},t=1,r=0,n=e.length;r<n;r++)a=e[r],i[a]=t,t+=1;return i},RANKED_DICTIONARIES={};for(name in frequency_lists)lst=frequency_lists[name],RANKED_DICTIONARIES[name]=build_ranked_dict(lst);GRAPHS={qwerty:adjacency_graphs.qwerty,dvorak:adjacency_graphs.dvorak,keypad:adjacency_graphs.keypad,mac_keypad:adjacency_graphs.mac_keypad},L33T_TABLE={a:["4","@"],b:["8"],c:["(","{","[","<"],e:["3"],g:["6","9"],i:["1","!","|"],l:["1","|","7"],o:["0"],s:["$","5"],t:["+","7"],x:["%"],z:["2"]},REGEXEN={recent_year:/19\d\d|200\d|201\d/g},DATE_MAX_YEAR=2050,DATE_MIN_YEAR=1e3,DATE_SPLITS={4:[[1,2],[2,3]],5:[[1,3],[2,3]],6:[[1,2],[2,4],[4,5]],7:[[1,3],[2,3],[4,5],[4,6]],8:[[2,4],[4,6]]},matching={empty:function(e){var t;return 0===function(){var n;n=[];for(t in e)n.push(t);return n}().length},extend:function(e,t){return e.push.apply(e,t)},translate:function(e,t){var n;return function(){var r,i,a,s;for(a=e.split(""),s=[],i=0,r=a.length;i<r;i++)n=a[i],s.push(t[n]||n);return s}().join("")},mod:function(e,t){return(e%t+t)%t},sorted:function(e){return e.sort(function(e,t){return e.i-t.i||e.j-t.j})},omnimatch:function(e){var t,n,r,i,a;for(i=[],r=[this.dictionary_match,this.reverse_dictionary_match,this.l33t_match,this.spatial_match,this.repeat_match,this.sequence_match,this.regex_match,this.date_match],a=0,t=r.length;a<t;a++)n=r[a],this.extend(i,n.call(this,e));return this.sorted(i)},dictionary_match:function(e,t){var n,r,i,a,s,o,h,u,c,l,_,f,d,p;null==t&&(t=RANKED_DICTIONARIES),s=[],a=e.length,u=e.toLowerCase();for(n in t)for(l=t[n],r=o=0,_=a;0<=_?o<_:o>_;r=0<=_?++o:--o)for(i=h=f=r,d=a;f<=d?h<d:h>d;i=f<=d?++h:--h)u.slice(r,+i+1||9e9)in l&&(p=u.slice(r,+i+1||9e9),c=l[p],s.push({pattern:"dictionary",i:r,j:i,token:e.slice(r,+i+1||9e9),matched_word:p,rank:c,dictionary_name:n,reversed:!1,l33t:!1}));return this.sorted(s)},reverse_dictionary_match:function(e,t){var n,r,i,a,s,o;for(null==t&&(t=RANKED_DICTIONARIES),o=e.split("").reverse().join(""),i=this.dictionary_match(o,t),a=0,n=i.length;a<n;a++)r=i[a],r.token=r.token.split("").reverse().join(""),r.reversed=!0,s=[e.length-1-r.j,e.length-1-r.i],r.i=s[0],r.j=s[1];return this.sorted(i)},set_user_input_dictionary:function(e){return RANKED_DICTIONARIES.user_inputs=build_ranked_dict(e.slice())},relevant_l33t_subtable:function(e,t){var n,r,i,a,s,o,h,u,c,l;for(s={},o=e.split(""),a=0,r=o.length;a<r;a++)n=o[a],s[n]=!0;l={};for(i in t)c=t[i],h=function(){var e,t,n;for(n=[],t=0,e=c.length;t<e;t++)u=c[t],u in s&&n.push(u);return n}(),h.length>0&&(l[i]=h);return l},enumerate_l33t_subs:function(e){var t,n,r,i,a,s,o,h,u,c,l,_,f,d,p;a=function(){var t;t=[];for(i in e)t.push(i);return t}(),p=[[]],n=function(e){var t,n,r,a,s,o,h,u;for(n=[],s={},o=0,a=e.length;o<a;o++)h=e[o],t=function(){var e,t,n;for(n=[],u=t=0,e=h.length;t<e;u=++t)i=h[u],n.push([i,u]);return n}(),t.sort(),r=function(){var e,n,r;for(r=[],u=n=0,e=t.length;n<e;u=++n)i=t[u],r.push(i+","+u);return r}().join("-"),r in s||(s[r]=!0,n.push(h));return n},r=function(t){var i,a,s,o,h,u,c,l,_,f,d,g,m,A,E,y;if(t.length){for(a=t[0],m=t.slice(1),c=[],d=e[a],l=0,h=d.length;l<h;l++)for(o=d[l],_=0,u=p.length;_<u;_++){for(A=p[_],i=-1,s=f=0,g=A.length;0<=g?f<g:f>g;s=0<=g?++f:--f)if(A[s][0]===o){i=s;break}i===-1?(y=A.concat([[o,a]]),c.push(y)):(E=A.slice(0),E.splice(i,1),E.push([o,a]),c.push(A),c.push(E))}return p=n(c),r(m)}},r(a),d=[];for(u=0,o=p.length;u<o;u++){for(_=p[u],f={},c=0,h=_.length;c<h;c++)l=_[c],s=l[0],t=l[1],f[s]=t;d.push(f)}return d},l33t_match:function(e,t,n){var r,i,a,s,o,h,u,c,l,_,f,d,p,g,m,A;for(null==t&&(t=RANKED_DICTIONARIES),null==n&&(n=L33T_TABLE),u=[],_=this.enumerate_l33t_subs(this.relevant_l33t_subtable(e,n)),c=0,a=_.length;c<a&&(d=_[c],!this.empty(d));c++)for(g=this.translate(e,d),f=this.dictionary_match(g,t),l=0,s=f.length;l<s;l++)if(o=f[l],m=e.slice(o.i,+o.j+1||9e9),m.toLowerCase()!==o.matched_word){h={};for(p in d)r=d[p],m.indexOf(p)!==-1&&(h[p]=r);o.l33t=!0,o.token=m,o.sub=h,o.sub_display=function(){var e;e=[];for(i in h)A=h[i],e.push(i+" -> "+A);return e}().join(", "),u.push(o)}return this.sorted(u.filter(function(e){return e.token.length>1}))},spatial_match:function(e,t){var n,r,i;null==t&&(t=GRAPHS),i=[];for(r in t)n=t[r],this.extend(i,this.spatial_match_helper(e,n,r));return this.sorted(i)},SHIFTED_RX:/[~!@#$%^&*()_+QWERTYUIOP{}|ASDFGHJKL:"ZXCVBNM<>?]/,spatial_match_helper:function(e,t,n){var r,i,a,s,o,h,u,c,l,_,f,d,p,g,m;for(f=[],u=0;u<e.length-1;)for(c=u+1,l=null,m=0,g="qwerty"!==n&&"dvorak"!==n||!this.SHIFTED_RX.exec(e.charAt(u))?0:1;;){if(p=e.charAt(c-1),o=!1,h=-1,s=-1,i=t[p]||[],c<e.length)for(a=e.charAt(c),d=0,_=i.length;d<_;d++)if(r=i[d],s+=1,r&&r.indexOf(a)!==-1){o=!0,h=s,1===r.indexOf(a)&&(g+=1),l!==h&&(m+=1,l=h);break}if(!o){c-u>2&&f.push({pattern:"spatial",i:u,j:c-1,token:e.slice(u,c),graph:n,turns:m,shifted_count:g}),u=c;break}c+=1}return f},repeat_match:function(e){var t,n,r,i,a,s,o,h,u,c,l,_,f,d,p;for(d=[],a=/(.+)\1+/g,c=/(.+?)\1+/g,l=/^(.+?)\1+$/,u=0;u<e.length&&(a.lastIndex=c.lastIndex=u,s=a.exec(e),_=c.exec(e),null!=s);)s[0].length>_[0].length?(f=s,i=l.exec(f[0])[1]):(f=_,i=f[1]),p=[f.index,f.index+f[0].length-1],o=p[0],h=p[1],t=scoring.most_guessable_match_sequence(i,this.omnimatch(i)),r=t.sequence,n=t.guesses,d.push({pattern:"repeat",i:o,j:h,token:f[0],base_token:i,base_guesses:n,base_matches:r,repeat_count:f[0].length/i.length}),u=h+1;return d},MAX_DELTA:5,sequence_match:function(e){var t,n,r,i,a,s,o,h,u;if(1===e.length)return[];for(u=function(t){return function(n,r,i){var a,s,o,u;if((r-n>1||1===Math.abs(i))&&0<(a=Math.abs(i))&&a<=t.MAX_DELTA)return u=e.slice(n,+r+1||9e9),/^[a-z]+$/.test(u)?(s="lower",o=26):/^[A-Z]+$/.test(u)?(s="upper",o=26):/^\d+$/.test(u)?(s="digits",o=10):(s="unicode",o=26),h.push({pattern:"sequence",i:n,j:r,token:e.slice(n,+r+1||9e9),sequence_name:s,sequence_space:o,ascending:i>0})}}(this),h=[],n=0,a=null,i=s=1,o=e.length;1<=o?s<o:s>o;i=1<=o?++s:--s)t=e.charCodeAt(i)-e.charCodeAt(i-1),null==a&&(a=t),t!==a&&(r=i-1,u(n,r,a),n=r,a=t);return u(n,e.length-1,a),h},regex_match:function(e,t){var n,r,i,a;null==t&&(t=REGEXEN),n=[];for(name in t)for(r=t[name],r.lastIndex=0;i=r.exec(e);)a=i[0],n.push({pattern:"regex",token:a,i:i.index,j:i.index+i[0].length-1,regex_name:name,regex_match:i});return this.sorted(n)},date_match:function(e){var t,n,r,i,a,s,o,h,u,c,l,_,f,d,p,g,m,A,E,y,v,I,R,T,D,k,x,j,b,N,S,q,L,M;for(_=[],f=/^\d{4,8}$/,d=/^(\d{1,4})([\s\/\\_.-])(\d{1,2})\2(\d{1,4})$/,s=m=0,v=e.length-4;0<=v?m<=v:m>=v;s=0<=v?++m:--m)for(o=A=I=s+3,R=s+7;(I<=R?A<=R:A>=R)&&!(o>=e.length);o=I<=R?++A:--A)if(M=e.slice(s,+o+1||9e9),f.exec(M)){for(r=[],T=DATE_SPLITS[M.length],E=0,c=T.length;E<c;E++)D=T[E],h=D[0],u=D[1],a=this.map_ints_to_dmy([parseInt(M.slice(0,h)),parseInt(M.slice(h,u)),parseInt(M.slice(u))]),null!=a&&r.push(a);if(r.length>0){for(t=r[0],p=function(e){return Math.abs(e.year-scoring.REFERENCE_YEAR)},g=p(r[0]),k=r.slice(1),y=0,l=k.length;y<l;y++)n=k[y],i=p(n),i<g&&(x=[n,i],t=x[0],g=x[1]);_.push({pattern:"date",token:M,i:s,j:o,separator:"",year:t.year,month:t.month,day:t.day})}}for(s=q=0,j=e.length-6;0<=j?q<=j:q>=j;s=0<=j?++q:--q)for(o=L=b=s+5,N=s+9;(b<=N?L<=N:L>=N)&&!(o>=e.length);o=b<=N?++L:--L)M=e.slice(s,+o+1||9e9),S=d.exec(M),null!=S&&(a=this.map_ints_to_dmy([parseInt(S[1]),parseInt(S[3]),parseInt(S[4])]),null!=a&&_.push({pattern:"date",token:M,i:s,j:o,separator:S[2],year:a.year,month:a.month,day:a.day}));return this.sorted(_.filter(function(e){var t,n,r,i;for(t=!1,i=0,n=_.length;i<n;i++)if(r=_[i],e!==r&&r.i<=e.i&&r.j>=e.j){t=!0;break}return!t}))},map_ints_to_dmy:function(e){var t,n,r,i,a,s,o,h,u,c,l,_,f,d,p,g;if(!(e[1]>31||e[1]<=0)){for(o=0,h=0,p=0,s=0,r=e.length;s<r;s++){if(n=e[s],99<n&&n<DATE_MIN_YEAR||n>DATE_MAX_YEAR)return;n>31&&(h+=1),n>12&&(o+=1),n<=0&&(p+=1)}if(!(h>=2||3===o||p>=2)){for(c=[[e[2],e.slice(0,2)],[e[0],e.slice(1,3)]],u=0,i=c.length;u<i;u++)if(_=c[u],g=_[0],d=_[1],DATE_MIN_YEAR<=g&&g<=DATE_MAX_YEAR)return t=this.map_ints_to_dm(d),null!=t?{year:g,month:t.month,day:t.day}:void 0;for(l=0,a=c.length;l<a;l++)if(f=c[l],g=f[0],d=f[1],t=this.map_ints_to_dm(d),null!=t)return g=this.two_to_four_digit_year(g),{year:g,month:t.month,day:t.day}}}},map_ints_to_dm:function(e){var t,n,r,i,a,s;for(a=[e,e.slice().reverse()],i=0,n=a.length;i<n;i++)if(s=a[i],t=s[0],r=s[1],1<=t&&t<=31&&1<=r&&r<=12)return{day:t,month:r}},two_to_four_digit_year:function(e){return e>99?e:e>50?e+1900:e+2e3}},module.exports=matching;
45773
45774},{"./adjacency_graphs":1,"./frequency_lists":3,"./scoring":6}],6:[function(require,module,exports){
45775var BRUTEFORCE_CARDINALITY,MIN_GUESSES_BEFORE_GROWING_SEQUENCE,MIN_SUBMATCH_GUESSES_MULTI_CHAR,MIN_SUBMATCH_GUESSES_SINGLE_CHAR,adjacency_graphs,calc_average_degree,k,scoring,v;adjacency_graphs=require("./adjacency_graphs"),calc_average_degree=function(e){var t,r,n,s,a,u;t=0;for(n in e)a=e[n],t+=function(){var e,t,r;for(r=[],t=0,e=a.length;t<e;t++)s=a[t],s&&r.push(s);return r}().length;return t/=function(){var t;t=[];for(r in e)u=e[r],t.push(r);return t}().length},BRUTEFORCE_CARDINALITY=10,MIN_GUESSES_BEFORE_GROWING_SEQUENCE=1e4,MIN_SUBMATCH_GUESSES_SINGLE_CHAR=10,MIN_SUBMATCH_GUESSES_MULTI_CHAR=50,scoring={nCk:function(e,t){var r,n,s,a;if(t>e)return 0;if(0===t)return 1;for(s=1,r=n=1,a=t;1<=a?n<=a:n>=a;r=1<=a?++n:--n)s*=e,s/=r,e-=1;return s},log10:function(e){return Math.log(e)/Math.log(10)},log2:function(e){return Math.log(e)/Math.log(2)},factorial:function(e){var t,r,n,s;if(e<2)return 1;for(t=1,r=n=2,s=e;2<=s?n<=s:n>=s;r=2<=s?++n:--n)t*=r;return t},most_guessable_match_sequence:function(e,t,r){var n,s,a,u,i,_,o,h,E,c,g,f,l,p,A,S,R,v,I,M,N,C,U,T;for(null==r&&(r=!1),l=e.length,f=function(){var e,t,r;for(r=[],n=e=0,t=l;0<=t?e<t:e>t;n=0<=t?++e:--e)r.push([]);return r}(),p=0,_=t.length;p<_;p++)c=t[p],f[c.j].push(c);for(v=0,o=f.length;v<o;v++)E=f[v],E.sort(function(e,t){return e.i-t.i});for(A={m:function(){var e,t,r;for(t=[],n=r=0,e=l;0<=e?r<e:r>e;n=0<=e?++r:--r)t.push({});return t}(),pi:function(){var e,t,r;for(t=[],n=r=0,e=l;0<=e?r<e:r>e;n=0<=e?++r:--r)t.push({});return t}(),g:function(){var e,t,r;for(t=[],n=r=0,e=l;0<=e?r<e:r>e;n=0<=e?++r:--r)t.push({});return t}()},U=function(t){return function(n,s){var a,u,i,_,o,h;_=n.j,o=t.estimate_guesses(n,e),s>1&&(o*=A.pi[n.i-1][s-1]),i=t.factorial(s)*o,r||(i+=Math.pow(MIN_GUESSES_BEFORE_GROWING_SEQUENCE,s-1)),h=A.g[_];for(u in h)if(a=h[u],!(u>s)&&a<=i)return;return A.g[_][s]=i,A.m[_][s]=n,A.pi[_][s]=o}}(this),s=function(e){return function(e){var t,r,n,s,a,u;for(c=g(0,e),U(c,1),a=[],t=u=1,s=e;1<=s?u<=s:u>=s;t=1<=s?++u:--u)c=g(t,e),a.push(function(){var e,s;e=A.m[t-1],s=[];for(r in e)n=e[r],r=parseInt(r),"bruteforce"!==n.pattern&&s.push(U(c,r+1));return s}());return a}}(this),g=function(t){return function(t,r){return{pattern:"bruteforce",token:e.slice(t,+r+1||9e9),i:t,j:r}}}(this),C=function(e){return function(e){var t,r,n,s,a,u,i;u=[],s=e-1,a=void 0,n=1/0,i=A.g[s];for(r in i)t=i[r],t<n&&(a=r,n=t);for(;s>=0;)c=A.m[s][a],u.unshift(c),s=c.i-1,a--;return u}}(this),u=N=0,I=l;0<=I?N<I:N>I;u=0<=I?++N:--N){for(M=f[u],T=0,h=M.length;T<h;T++)if(c=M[T],c.i>0)for(i in A.m[c.i-1])i=parseInt(i),U(c,i+1);else U(c,1);s(u)}return R=C(l),S=R.length,a=0===e.length?1:A.g[l-1][S],{password:e,guesses:a,guesses_log10:this.log10(a),sequence:R}},estimate_guesses:function(e,t){var r,n,s;return null!=e.guesses?e.guesses:(s=1,e.token.length<t.length&&(s=1===e.token.length?MIN_SUBMATCH_GUESSES_SINGLE_CHAR:MIN_SUBMATCH_GUESSES_MULTI_CHAR),r={bruteforce:this.bruteforce_guesses,dictionary:this.dictionary_guesses,spatial:this.spatial_guesses,repeat:this.repeat_guesses,sequence:this.sequence_guesses,regex:this.regex_guesses,date:this.date_guesses},n=r[e.pattern].call(this,e),e.guesses=Math.max(n,s),e.guesses_log10=this.log10(e.guesses),e.guesses)},bruteforce_guesses:function(e){var t,r;return t=Math.pow(BRUTEFORCE_CARDINALITY,e.token.length),r=1===e.token.length?MIN_SUBMATCH_GUESSES_SINGLE_CHAR+1:MIN_SUBMATCH_GUESSES_MULTI_CHAR+1,Math.max(t,r)},repeat_guesses:function(e){return e.base_guesses*e.repeat_count},sequence_guesses:function(e){var t,r;return r=e.token.charAt(0),t="a"===r||"A"===r||"z"===r||"Z"===r||"0"===r||"1"===r||"9"===r?4:r.match(/\d/)?10:26,e.ascending||(t*=2),t*e.token.length},MIN_YEAR_SPACE:20,REFERENCE_YEAR:2016,regex_guesses:function(e){var t,r;if(t={alpha_lower:26,alpha_upper:26,alpha:52,alphanumeric:62,digits:10,symbols:33},e.regex_name in t)return Math.pow(t[e.regex_name],e.token.length);switch(e.regex_name){case"recent_year":return r=Math.abs(parseInt(e.regex_match[0])-this.REFERENCE_YEAR),r=Math.max(r,this.MIN_YEAR_SPACE)}},date_guesses:function(e){var t,r;return r=Math.max(Math.abs(e.year-this.REFERENCE_YEAR),this.MIN_YEAR_SPACE),t=365*r,e.separator&&(t*=4),t},KEYBOARD_AVERAGE_DEGREE:calc_average_degree(adjacency_graphs.qwerty),KEYPAD_AVERAGE_DEGREE:calc_average_degree(adjacency_graphs.keypad),KEYBOARD_STARTING_POSITIONS:function(){var e,t;e=adjacency_graphs.qwerty,t=[];for(k in e)v=e[k],t.push(k);return t}().length,KEYPAD_STARTING_POSITIONS:function(){var e,t;e=adjacency_graphs.keypad,t=[];for(k in e)v=e[k],t.push(k);return t}().length,spatial_guesses:function(e){var t,r,n,s,a,u,i,_,o,h,E,c,g,f,l,p,A,S;for("qwerty"===(E=e.graph)||"dvorak"===E?(l=this.KEYBOARD_STARTING_POSITIONS,s=this.KEYBOARD_AVERAGE_DEGREE):(l=this.KEYPAD_STARTING_POSITIONS,s=this.KEYPAD_AVERAGE_DEGREE),a=0,t=e.token.length,A=e.turns,u=_=2,c=t;2<=c?_<=c:_>=c;u=2<=c?++_:--_)for(o=Math.min(A,u-1),i=h=1,g=o;1<=g?h<=g:h>=g;i=1<=g?++h:--h)a+=this.nCk(u-1,i-1)*l*Math.pow(s,i);if(e.shifted_count)if(r=e.shifted_count,n=e.token.length-e.shifted_count,0===r||0===n)a*=2;else{for(p=0,u=S=1,f=Math.min(r,n);1<=f?S<=f:S>=f;u=1<=f?++S:--S)p+=this.nCk(r+n,u);a*=p}return a},dictionary_guesses:function(e){var t;return e.base_guesses=e.rank,e.uppercase_variations=this.uppercase_variations(e),e.l33t_variations=this.l33t_variations(e),t=e.reversed&&2||1,e.base_guesses*e.uppercase_variations*e.l33t_variations*t},START_UPPER:/^[A-Z][^A-Z]+$/,END_UPPER:/^[^A-Z]+[A-Z]$/,ALL_UPPER:/^[^a-z]+$/,ALL_LOWER:/^[^A-Z]+$/,uppercase_variations:function(e){var t,r,n,s,a,u,i,_,o,h,E,c;if(c=e.token,c.match(this.ALL_LOWER)||c.toLowerCase()===c)return 1;for(_=[this.START_UPPER,this.END_UPPER,this.ALL_UPPER],u=0,a=_.length;u<a;u++)if(h=_[u],c.match(h))return 2;for(r=function(){var e,t,r,s;for(r=c.split(""),s=[],t=0,e=r.length;t<e;t++)n=r[t],n.match(/[A-Z]/)&&s.push(n);return s}().length,t=function(){var e,t,r,s;for(r=c.split(""),s=[],t=0,e=r.length;t<e;t++)n=r[t],n.match(/[a-z]/)&&s.push(n);return s}().length,E=0,s=i=1,o=Math.min(r,t);1<=o?i<=o:i>=o;s=1<=o?++i:--i)E+=this.nCk(r+t,s);return E},l33t_variations:function(e){var t,r,n,s,a,u,i,_,o,h,E,c,g;if(!e.l33t)return 1;g=1,o=e.sub;for(E in o)if(c=o[E],s=e.token.toLowerCase().split(""),t=function(){var e,t,r;for(r=[],t=0,e=s.length;t<e;t++)n=s[t],n===E&&r.push(n);return r}().length,r=function(){var e,t,r;for(r=[],t=0,e=s.length;t<e;t++)n=s[t],n===c&&r.push(n);return r}().length,0===t||0===r)g*=2;else{for(i=Math.min(r,t),_=0,a=u=1,h=i;1<=h?u<=h:u>=h;a=1<=h?++u:--u)_+=this.nCk(r+t,a);g*=_}return g}},module.exports=scoring;
45776
45777},{"./adjacency_graphs":1}],7:[function(require,module,exports){
45778var time_estimates;time_estimates={estimate_attack_times:function(e){var t,n,s,o;n={online_throttling_100_per_hour:e/(100/3600),online_no_throttling_10_per_second:e/10,offline_slow_hashing_1e4_per_second:e/1e4,offline_fast_hashing_1e10_per_second:e/1e10},t={};for(s in n)o=n[s],t[s]=this.display_time(o);return{crack_times_seconds:n,crack_times_display:t,score:this.guesses_to_score(e)}},guesses_to_score:function(e){var t;return t=5,e<1e3+t?0:e<1e6+t?1:e<1e8+t?2:e<1e10+t?3:4},display_time:function(e){var t,n,s,o,_,r,i,a,u,c;return i=60,r=60*i,s=24*r,a=31*s,c=12*a,n=100*c,u=e<1?[null,"less than a second"]:e<i?(t=Math.round(e),[t,t+" second"]):e<r?(t=Math.round(e/i),[t,t+" minute"]):e<s?(t=Math.round(e/r),[t,t+" hour"]):e<a?(t=Math.round(e/s),[t,t+" day"]):e<c?(t=Math.round(e/a),[t,t+" month"]):e<n?(t=Math.round(e/c),[t,t+" year"]):[null,"centuries"],o=u[0],_=u[1],null!=o&&1!==o&&(_+="s"),_}},module.exports=time_estimates;
45779
45780},{}]},{},[4])(4)
45781});
861750ae 45782
95f04905
IC
45783</script>
45784 <script>/*
45785 * Detects entropy from a string.
45786 *
45787 * Formats include:
45788 * binary [0-1]
45789 * base 6 [0-5]
45790 * dice 6 [1-6]
45791 * decimal [0-9]
45792 * hexadecimal [0-9A-F]
9e97eb76 45793 * card [A2-9TJQK][CDHS]
95f04905
IC
45794 *
45795 * Automatically uses lowest entropy to avoid issues such as interpretting 0101
45796 * as hexadecimal which would be 16 bits when really it's only 4 bits of binary
45797 * entropy.
45798 */
45799
45800window.Entropy = new (function() {
45801
78b8d604
IC
45802 var TWO = new BigInteger(2);
45803
95f04905
IC
45804 // matchers returns an array of the matched events for each type of entropy.
45805 // eg
45806 // matchers.binary("010") returns ["0", "1", "0"]
45807 // matchers.binary("a10") returns ["1", "0"]
45808 // matchers.hex("a10") returns ["a", "1", "0"]
45809 var matchers = {
45810 binary: function(str) {
45811 return str.match(/[0-1]/gi) || [];
45812 },
45813 base6: function(str) {
45814 return str.match(/[0-5]/gi) || [];
45815 },
45816 dice: function(str) {
45817 return str.match(/[1-6]/gi) || []; // ie dice numbers
45818 },
45819 base10: function(str) {
45820 return str.match(/[0-9]/gi) || [];
45821 },
45822 hex: function(str) {
45823 return str.match(/[0-9A-F]/gi) || [];
45824 },
45825 card: function(str) {
45826 // Format is NumberSuit, eg
45827 // AH ace of hearts
45828 // 8C eight of clubs
45829 // TD ten of diamonds
45830 // JS jack of spades
45831 // QH queen of hearts
45832 // KC king of clubs
45833 return str.match(/([A2-9TJQK][CDHS])/gi) || [];
45834 }
45835 }
45836
45837 // Convert array of cards from ["ac", "4d", "ks"]
45838 // to numbers between 0 and 51 [0, 16, 51]
45839 function convertCardsToInts(cards) {
45840 var ints = [];
45841 var values = "a23456789tjqk";
45842 var suits = "cdhs";
45843 for (var i=0; i<cards.length; i++) {
45844 var card = cards[i].toLowerCase();
45845 var value = card[0];
45846 var suit = card[1];
45847 var asInt = 13 * suits.indexOf(suit) + values.indexOf(value);
45848 ints.push(asInt);
45849 }
45850 return ints;
45851 }
45852
45853 this.fromString = function(rawEntropyStr) {
45854 // Find type of entropy being used (binary, hex, dice etc)
45855 var base = getBase(rawEntropyStr);
45856 // Convert dice to base6 entropy (ie 1-6 to 0-5)
45857 // This is done by changing all 6s to 0s
45858 if (base.str == "dice") {
45859 var newParts = [];
45860 var newInts = [];
45861 for (var i=0; i<base.parts.length; i++) {
45862 var c = base.parts[i];
45863 if ("12345".indexOf(c) > -1) {
45864 newParts[i] = base.parts[i];
45865 newInts[i] = base.ints[i];
45866 }
45867 else {
45868 newParts[i] = "0";
45869 newInts[i] = 0;
45870 }
45871 }
45872 base.str = "base 6 (dice)";
45873 base.ints = newInts;
45874 base.parts = newParts;
45875 base.matcher = matchers.base6;
45876 }
45877 // Detect empty entropy
45878 if (base.parts.length == 0) {
45879 return {
45880 binaryStr: "",
45881 cleanStr: "",
45882 cleanHtml: "",
45883 base: base,
45884 };
45885 }
45886 // Convert base.ints to BigInteger.
45887 // Due to using unusual bases, eg cards of base52, this is not as simple as
45888 // using BigInteger.parse()
45889 var entropyInt = BigInteger.ZERO;
45890 for (var i=base.ints.length-1; i>=0; i--) {
45891 var thisInt = BigInteger.parse(base.ints[i]);
45892 var power = (base.ints.length - 1) - i;
45893 var additionalEntropy = BigInteger.parse(base.asInt).pow(power).multiply(thisInt);
45894 entropyInt = entropyInt.add(additionalEntropy);
45895 }
45896 // Convert entropy to binary
45897 var entropyBin = entropyInt.toString(2);
45898 // If the first integer is small, it must be padded with zeros.
45899 // Otherwise the chance of the first bit being 1 is 100%, which is
45900 // obviously incorrect.
45901 // This is not perfect for non-2^n bases.
45902 var expectedBits = Math.floor(base.parts.length * Math.log2(base.asInt));
45903 while (entropyBin.length < expectedBits) {
45904 entropyBin = "0" + entropyBin;
45905 }
94959756
IC
45906 // Calculate the number of bits per event
45907 var bitsPerEvent = Math.log2(base.asInt);
ea87f1d3 45908 // Cards binary must be handled differently, since they're not replaced
9e97eb76 45909 if (base.asInt == 52) {
94959756
IC
45910 var cardEntropy = processCardEntropy(base.parts);
45911 entropyBin = cardEntropy.binaryStr;
45912 bitsPerEvent = cardEntropy.bitsPerEvent;
9e97eb76 45913 }
95f04905
IC
45914 // Supply a 'filtered' entropy string for display purposes
45915 var entropyClean = base.parts.join("");
45916 var entropyHtml = base.parts.join("");
45917 if (base.asInt == 52) {
45918 entropyClean = base.parts.join(" ").toUpperCase();
45919 entropyClean = entropyClean.replace(/C/g, "\u2663");
45920 entropyClean = entropyClean.replace(/D/g, "\u2666");
45921 entropyClean = entropyClean.replace(/H/g, "\u2665");
45922 entropyClean = entropyClean.replace(/S/g, "\u2660");
45923 entropyHtml = base.parts.join(" ").toUpperCase();
45924 entropyHtml = entropyHtml.replace(/C/g, "<span class='card-suit club'>\u2663</span>");
45925 entropyHtml = entropyHtml.replace(/D/g, "<span class='card-suit diamond'>\u2666</span>");
45926 entropyHtml = entropyHtml.replace(/H/g, "<span class='card-suit heart'>\u2665</span>");
45927 entropyHtml = entropyHtml.replace(/S/g, "<span class='card-suit spade'>\u2660</span>");
45928 }
9e97eb76 45929 // Return the result
95f04905
IC
45930 var e = {
45931 binaryStr: entropyBin,
45932 cleanStr: entropyClean,
45933 cleanHtml: entropyHtml,
94959756 45934 bitsPerEvent: bitsPerEvent,
95f04905
IC
45935 base: base,
45936 }
45937 return e;
45938 }
45939
78b8d604
IC
45940 function getSortedDeck() {
45941 var s = [];
45942 var suits = "CDHS";
45943 var values = "A23456789TJQK";
45944 for (var i=0; i<suits.length; i++) {
45945 for (var j=0; j<values.length; j++) {
45946 s.push(values[j]+suits[i]);
45947 }
45948 }
45949 return s;
45950 }
45951
95f04905
IC
45952 function getBase(str) {
45953 // Need to get the lowest base for the supplied entropy.
45954 // This prevents interpreting, say, dice rolls as hexadecimal.
45955 var binaryMatches = matchers.binary(str);
45956 var hexMatches = matchers.hex(str);
45957 // Find the lowest base that can be used, whilst ignoring any irrelevant chars
45958 if (binaryMatches.length == hexMatches.length && hexMatches.length > 0) {
45959 var ints = binaryMatches.map(function(i) { return parseInt(i, 2) });
45960 return {
45961 ints: ints,
45962 parts: binaryMatches,
45963 matcher: matchers.binary,
45964 asInt: 2,
45965 str: "binary",
45966 }
45967 }
45968 var cardMatches = matchers.card(str);
45969 if (cardMatches.length >= hexMatches.length / 2) {
45970 var ints = convertCardsToInts(cardMatches);
45971 return {
45972 ints: ints,
45973 parts: cardMatches,
45974 matcher: matchers.card,
45975 asInt: 52,
45976 str: "card",
45977 }
45978 }
45979 var diceMatches = matchers.dice(str);
45980 if (diceMatches.length == hexMatches.length && hexMatches.length > 0) {
45981 var ints = diceMatches.map(function(i) { return parseInt(i) });
45982 return {
45983 ints: ints,
45984 parts: diceMatches,
45985 matcher: matchers.dice,
45986 asInt: 6,
45987 str: "dice",
45988 }
45989 }
45990 var base6Matches = matchers.base6(str);
45991 if (base6Matches.length == hexMatches.length && hexMatches.length > 0) {
45992 var ints = base6Matches.map(function(i) { return parseInt(i) });
45993 return {
45994 ints: ints,
45995 parts: base6Matches,
45996 matcher: matchers.base6,
45997 asInt: 6,
45998 str: "base 6",
45999 }
46000 }
46001 var base10Matches = matchers.base10(str);
46002 if (base10Matches.length == hexMatches.length && hexMatches.length > 0) {
46003 var ints = base10Matches.map(function(i) { return parseInt(i) });
46004 return {
46005 ints: ints,
46006 parts: base10Matches,
46007 matcher: matchers.base10,
46008 asInt: 10,
46009 str: "base 10",
46010 }
46011 }
46012 var ints = hexMatches.map(function(i) { return parseInt(i, 16) });
46013 return {
46014 ints: ints,
46015 parts: hexMatches,
46016 matcher: matchers.hex,
46017 asInt: 16,
46018 str: "hexadecimal",
46019 }
46020 }
46021
ea87f1d3
IC
46022 // Assume cards are NOT replaced.
46023 // Additional entropy decreases as more cards are used. This means
46024 // total possible entropy is measured using n!, not base^n.
46025 // eg the second last card can be only one of two, not one of fifty two
46026 // so the added entropy for that card is only one bit at most
94959756 46027 function processCardEntropy(cards) {
ea87f1d3
IC
46028 // Track how many instances of each card have been used, and thus
46029 // how many decks are in use.
46030 var cardCounts = {};
46031 var numberOfDecks = 0;
46032 // Work out number of decks by max(duplicates)
46033 for (var i=0; i<cards.length; i++) {
46034 // Get the card that was drawn
46035 var cardLower = cards[i];
46036 var card = cardLower.toUpperCase();
46037 // Initialize the count for this card if needed
46038 if (!(card in cardCounts)) {
46039 cardCounts[card] = 0;
46040 }
46041 cardCounts[card] += 1;
46042 // See if this is max(duplicates)
46043 if (cardCounts[card] > numberOfDecks) {
46044 numberOfDecks = cardCounts[card];
46045 }
46046 }
46047 // Work out the total number of bits for this many decks
46048 // See http://crypto.stackexchange.com/q/41886
fc7c248f
IC
46049 var gainedBits = 0;
46050 // Equivalent of Math.log2(factorial(52*numberOfDecks))
46051 // which becomes infinity for numberOfDecks > 4
46052 for (var i=1; i<=52*numberOfDecks; i++) {
46053 gainedBits = gainedBits + Math.log2(i);
46054 }
ea87f1d3
IC
46055 var lostBits = 52 * Math.log2(factorial(numberOfDecks));
46056 var maxBits = gainedBits - lostBits;
46057 // Convert the drawn cards to a binary representation.
46058 // The exact technique for doing this is unclear.
46059 // See
46060 // http://crypto.stackexchange.com/a/41896
46061 // "I even doubt that this is well defined (only the average entropy
46062 // is, I believe)."
46063 // See
46064 // https://github.com/iancoleman/bip39/issues/33#issuecomment-263021856
46065 // "The binary representation can be the first log(permutations,2) bits
46066 // of the sha-2 hash of the normalized deck string."
46067 //
46068 // In this specific implementation, the first N bits of the hash of the
46069 // normalized cards string is being used. Uppercase, no spaces; eg
46070 // sha256("AH8DQSTC2H")
46071 var totalCards = numberOfDecks * 52;
46072 var percentUsed = cards.length / totalCards;
46073 // Calculate the average number of bits of entropy for the number of
46074 // cards drawn.
46075 var numberOfBits = Math.floor(maxBits * percentUsed);
46076 // Create a normalized string of the selected cards
46077 var normalizedCards = cards.join("").toUpperCase();
46078 // Convert to binary using the SHA256 hash of the normalized cards.
434caecd 46079 // If the number of bits is more than 256, multiple hashes
ea87f1d3
IC
46080 // are used until the required number of bits is reached.
46081 var entropyBin = "";
46082 var iterations = 0;
46083 while (entropyBin.length < numberOfBits) {
434caecd 46084 var hashedCards = sjcl.hash.sha256.hash(normalizedCards + ":" + iterations);
ea87f1d3
IC
46085 var hashHex = sjcl.codec.hex.fromBits(hashedCards);
46086 for (var i=0; i<hashHex.length; i++) {
46087 var decimal = parseInt(hashHex[i], 16);
46088 var binary = decimal.toString(2);
46089 while (binary.length < 4) {
46090 binary = "0" + binary;
46091 }
46092 entropyBin = entropyBin + binary;
46093 }
46094 iterations = iterations + 1;
46095 }
46096 // Truncate to the appropriate number of bits.
46097 entropyBin = entropyBin.substring(0, numberOfBits);
94959756
IC
46098 // Get the number of bits per event
46099 bitsPerEvent = maxBits / totalCards;
46100 return {
46101 binaryStr: entropyBin,
46102 bitsPerEvent: bitsPerEvent,
46103 }
ea87f1d3
IC
46104 }
46105
95f04905
IC
46106 // Polyfill for Math.log2
46107 // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log2#Polyfill
46108 Math.log2 = Math.log2 || function(x) {
46109 // The polyfill isn't good enough because of the poor accuracy of
46110 // Math.LOG2E
46111 // log2(8) gave 2.9999999999999996 which when floored causes issues.
46112 // So instead use the BigInteger library to get it right.
46113 return BigInteger.log(x) / BigInteger.log(2);
46114 };
46115
9e97eb76
IC
46116 // Depends on BigInteger
46117 function factorial(n) {
46118 if (n == 0) {
46119 return 1;
46120 }
46121 f = BigInteger.ONE;
46122 for (var i=1; i<=n; i++) {
46123 f = f.multiply(new BigInteger(i));
46124 }
46125 return f;
46126 }
46127
95f04905 46128})();
c6624d51
IC
46129</script>
46130 <script>(function() {
46131
46132 // mnemonics is populated as required by getLanguage
46133 var mnemonics = { "english": new Mnemonic("english") };
46134 var mnemonic = mnemonics["english"];
3725abb5 46135 var seed = null;
c6624d51
IC
46136 var bip32RootKey = null;
46137 var bip32ExtendedKey = null;
9987f0c1 46138 var network = bitcoinjs.bitcoin.networks.bitcoin;
c6624d51
IC
46139 var addressRowTemplate = $("#address-row-template");
46140
46141 var showIndex = true;
46142 var showAddress = true;
46143 var showPubKey = true;
46144 var showPrivKey = true;
52da415f 46145 var showQr = false;
8d18f379 46146 var litecoinUseLtub = false;
c6624d51
IC
46147
46148 var entropyChangeTimeoutEvent = null;
46149 var phraseChangeTimeoutEvent = null;
46150 var rootKeyChangedTimeoutEvent = null;
46151
40892aba
IC
46152 var generationProcesses = [];
46153
c6624d51
IC
46154 var DOM = {};
46155 DOM.network = $(".network");
56530adc 46156 DOM.bip32Client = $("#bip32-client");
c6624d51
IC
46157 DOM.phraseNetwork = $("#network-phrase");
46158 DOM.useEntropy = $(".use-entropy");
46159 DOM.entropyContainer = $(".entropy-container");
46160 DOM.entropy = $(".entropy");
2a6dd137
IC
46161 DOM.entropyFiltered = DOM.entropyContainer.find(".filtered");
46162 DOM.entropyType = DOM.entropyContainer.find(".type");
f1e5d484 46163 DOM.entropyCrackTime = DOM.entropyContainer.find(".crack-time");
2a6dd137
IC
46164 DOM.entropyEventCount = DOM.entropyContainer.find(".event-count");
46165 DOM.entropyBits = DOM.entropyContainer.find(".bits");
46166 DOM.entropyBitsPerEvent = DOM.entropyContainer.find(".bits-per-event");
46167 DOM.entropyWordCount = DOM.entropyContainer.find(".word-count");
46168 DOM.entropyBinary = DOM.entropyContainer.find(".binary");
46169 DOM.entropyMnemonicLength = DOM.entropyContainer.find(".mnemonic-length");
c6624d51
IC
46170 DOM.phrase = $(".phrase");
46171 DOM.passphrase = $(".passphrase");
46172 DOM.generateContainer = $(".generate-container");
46173 DOM.generate = $(".generate");
46174 DOM.seed = $(".seed");
46175 DOM.rootKey = $(".root-key");
8d18f379
IC
46176 DOM.litecoinLtubContainer = $(".litecoin-ltub-container");
46177 DOM.litecoinUseLtub = $(".litecoin-use-ltub");
c6624d51
IC
46178 DOM.extendedPrivKey = $(".extended-priv-key");
46179 DOM.extendedPubKey = $(".extended-pub-key");
46180 DOM.bip32tab = $("#bip32-tab");
46181 DOM.bip44tab = $("#bip44-tab");
9987f0c1 46182 DOM.bip49tab = $("#bip49-tab");
c6624d51
IC
46183 DOM.bip32panel = $("#bip32");
46184 DOM.bip44panel = $("#bip44");
9987f0c1 46185 DOM.bip49panel = $("#bip49");
c6624d51
IC
46186 DOM.bip32path = $("#bip32-path");
46187 DOM.bip44path = $("#bip44-path");
46188 DOM.bip44purpose = $("#bip44 .purpose");
46189 DOM.bip44coin = $("#bip44 .coin");
46190 DOM.bip44account = $("#bip44 .account");
20083ab9
IC
46191 DOM.bip44accountXprv = $("#bip44 .account-xprv");
46192 DOM.bip44accountXpub = $("#bip44 .account-xpub");
c6624d51 46193 DOM.bip44change = $("#bip44 .change");
9987f0c1
IC
46194 DOM.bip49unavailable = $("#bip49 .unavailable");
46195 DOM.bip49available = $("#bip49 .available");
46196 DOM.bip49path = $("#bip49-path");
46197 DOM.bip49purpose = $("#bip49 .purpose");
46198 DOM.bip49coin = $("#bip49 .coin");
46199 DOM.bip49account = $("#bip49 .account");
46200 DOM.bip49accountXprv = $("#bip49 .account-xprv");
46201 DOM.bip49accountXpub = $("#bip49 .account-xpub");
46202 DOM.bip49change = $("#bip49 .change");
18abe53b 46203 DOM.generatedStrength = $(".generate-container .strength");
c6624d51 46204 DOM.hardenedAddresses = $(".hardened-addresses");
0a8d06d0 46205 DOM.useP2wpkhNestedInP2sh = $(".p2wpkh-nested-in-p2sh");
c6624d51
IC
46206 DOM.addresses = $(".addresses");
46207 DOM.rowsToAdd = $(".rows-to-add");
46208 DOM.more = $(".more");
46209 DOM.feedback = $(".feedback");
46210 DOM.tab = $(".derivation-type a");
46211 DOM.indexToggle = $(".index-toggle");
46212 DOM.addressToggle = $(".address-toggle");
46213 DOM.publicKeyToggle = $(".public-key-toggle");
46214 DOM.privateKeyToggle = $(".private-key-toggle");
46215 DOM.languages = $(".languages a");
e00964cc 46216 DOM.qrContainer = $(".qr-container");
52da415f 46217 DOM.qrHider = DOM.qrContainer.find(".qr-hider");
e00964cc
IC
46218 DOM.qrImage = DOM.qrContainer.find(".qr-image");
46219 DOM.qrHint = DOM.qrContainer.find(".qr-hint");
46220 DOM.showQrEls = $("[data-show-qr]");
c6624d51
IC
46221
46222 function init() {
46223 // Events
46224 DOM.network.on("change", networkChanged);
56530adc 46225 DOM.bip32Client.on("change", bip32ClientChanged);
c6624d51
IC
46226 DOM.useEntropy.on("change", setEntropyVisibility);
46227 DOM.entropy.on("input", delayedEntropyChanged);
18abe53b 46228 DOM.entropyMnemonicLength.on("change", entropyChanged);
c6624d51
IC
46229 DOM.phrase.on("input", delayedPhraseChanged);
46230 DOM.passphrase.on("input", delayedPhraseChanged);
46231 DOM.generate.on("click", generateClicked);
46232 DOM.more.on("click", showMore);
46233 DOM.rootKey.on("input", delayedRootKeyChanged);
8d18f379 46234 DOM.litecoinUseLtub.on("change", litecoinUseLtubChanged);
c6624d51 46235 DOM.bip32path.on("input", calcForDerivationPath);
c6624d51
IC
46236 DOM.bip44account.on("input", calcForDerivationPath);
46237 DOM.bip44change.on("input", calcForDerivationPath);
9987f0c1
IC
46238 DOM.bip49account.on("input", calcForDerivationPath);
46239 DOM.bip49change.on("input", calcForDerivationPath);
c6624d51
IC
46240 DOM.tab.on("shown.bs.tab", calcForDerivationPath);
46241 DOM.hardenedAddresses.on("change", calcForDerivationPath);
0a8d06d0 46242 DOM.useP2wpkhNestedInP2sh.on("change", calcForDerivationPath);
c6624d51
IC
46243 DOM.indexToggle.on("click", toggleIndexes);
46244 DOM.addressToggle.on("click", toggleAddresses);
46245 DOM.publicKeyToggle.on("click", togglePublicKeys);
46246 DOM.privateKeyToggle.on("click", togglePrivateKeys);
46247 DOM.languages.on("click", languageChanged);
e00964cc 46248 setQrEvents(DOM.showQrEls);
c6624d51
IC
46249 disableForms();
46250 hidePending();
46251 hideValidationError();
46252 populateNetworkSelect();
56530adc 46253 populateClientSelect();
c6624d51
IC
46254 }
46255
46256 // Event handlers
46257
46258 function networkChanged(e) {
9987f0c1
IC
46259 clearDerivedKeys();
46260 clearAddressesList();
8d18f379 46261 DOM.litecoinLtubContainer.addClass("hidden");
c6624d51 46262 var networkIndex = e.target.value;
9987f0c1
IC
46263 var network = networks[networkIndex];
46264 network.onSelect();
0a8d06d0
IC
46265 if (network.p2wpkhNestedInP2shAvailable) {
46266 showP2wpkhNestedInP2shAvailable();
9987f0c1
IC
46267 }
46268 else {
0a8d06d0 46269 showP2wpkhNestedInP2shUnavailable();
9987f0c1 46270 }
c6624d51
IC
46271 if (seed != null) {
46272 phraseChanged();
46273 }
46274 else {
46275 rootKeyChanged();
46276 }
46277 }
46278
56530adc
IC
46279 function bip32ClientChanged(e) {
46280 var clientIndex = DOM.bip32Client.val();
46281 if (clientIndex == "custom") {
46282 DOM.bip32path.prop("readonly", false);
46283 }
46284 else {
46285 DOM.bip32path.prop("readonly", true);
46286 clients[clientIndex].onSelect();
46287 if (seed != null) {
46288 phraseChanged();
46289 }
46290 else {
46291 rootKeyChanged();
46292 }
46293 }
46294 }
46295
c6624d51
IC
46296 function setEntropyVisibility() {
46297 if (isUsingOwnEntropy()) {
46298 DOM.entropyContainer.removeClass("hidden");
46299 DOM.generateContainer.addClass("hidden");
46300 DOM.phrase.prop("readonly", true);
46301 DOM.entropy.focus();
46302 entropyChanged();
46303 }
46304 else {
46305 DOM.entropyContainer.addClass("hidden");
46306 DOM.generateContainer.removeClass("hidden");
46307 DOM.phrase.prop("readonly", false);
18abe53b 46308 hidePending();
c6624d51
IC
46309 }
46310 }
46311
46312 function delayedPhraseChanged() {
46313 hideValidationError();
f128bd58
IC
46314 seed = null;
46315 bip32RootKey = null;
46316 bip32ExtendedKey = null;
46317 clearAddressesList();
c6624d51
IC
46318 showPending();
46319 if (phraseChangeTimeoutEvent != null) {
46320 clearTimeout(phraseChangeTimeoutEvent);
46321 }
46322 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
46323 }
46324
46325 function phraseChanged() {
46326 showPending();
c6624d51
IC
46327 setMnemonicLanguage();
46328 // Get the mnemonic phrase
46329 var phrase = DOM.phrase.val();
46330 var errorText = findPhraseErrors(phrase);
46331 if (errorText) {
46332 showValidationError(errorText);
46333 return;
46334 }
46335 // Calculate and display
46336 var passphrase = DOM.passphrase.val();
46337 calcBip32RootKeyFromSeed(phrase, passphrase);
46338 calcForDerivationPath();
c6624d51
IC
46339 }
46340
46341 function delayedEntropyChanged() {
46342 hideValidationError();
46343 showPending();
46344 if (entropyChangeTimeoutEvent != null) {
46345 clearTimeout(entropyChangeTimeoutEvent);
46346 }
46347 entropyChangeTimeoutEvent = setTimeout(entropyChanged, 400);
46348 }
46349
46350 function entropyChanged() {
18abe53b
IC
46351 // If blank entropy, clear mnemonic, addresses, errors
46352 if (DOM.entropy.val().trim().length == 0) {
46353 clearDisplay();
2a6dd137 46354 clearEntropyFeedback();
18abe53b
IC
46355 DOM.phrase.val("");
46356 showValidationError("Blank entropy");
46357 return;
46358 }
46359 // Get the current phrase to detect changes
46360 var phrase = DOM.phrase.val();
46361 // Set the phrase from the entropy
c6624d51 46362 setMnemonicFromEntropy();
18abe53b
IC
46363 // Recalc addresses if the phrase has changed
46364 var newPhrase = DOM.phrase.val();
46365 if (newPhrase != phrase) {
46366 if (newPhrase.length == 0) {
46367 clearDisplay();
46368 }
46369 else {
46370 phraseChanged();
46371 }
46372 }
46373 else {
46374 hidePending();
46375 }
c6624d51
IC
46376 }
46377
46378 function delayedRootKeyChanged() {
46379 // Warn if there is an existing mnemonic or passphrase.
46380 if (DOM.phrase.val().length > 0 || DOM.passphrase.val().length > 0) {
46381 if (!confirm("This will clear existing mnemonic and passphrase")) {
46382 DOM.rootKey.val(bip32RootKey);
46383 return
46384 }
46385 }
46386 hideValidationError();
46387 showPending();
46388 // Clear existing mnemonic and passphrase
46389 DOM.phrase.val("");
46390 DOM.passphrase.val("");
46391 seed = null;
46392 if (rootKeyChangedTimeoutEvent != null) {
46393 clearTimeout(rootKeyChangedTimeoutEvent);
46394 }
46395 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged, 400);
46396 }
46397
46398 function rootKeyChanged() {
46399 showPending();
46400 hideValidationError();
c6624d51
IC
46401 var rootKeyBase58 = DOM.rootKey.val();
46402 var errorText = validateRootKey(rootKeyBase58);
46403 if (errorText) {
46404 showValidationError(errorText);
46405 return;
46406 }
46407 // Calculate and display
46408 calcBip32RootKeyFromBase58(rootKeyBase58);
46409 calcForDerivationPath();
c6624d51
IC
46410 }
46411
8d18f379
IC
46412 function litecoinUseLtubChanged() {
46413 litecoinUseLtub = DOM.litecoinUseLtub.prop("checked");
46414 if (litecoinUseLtub) {
46415 network = bitcoinjs.bitcoin.networks.litecoinLtub;
46416 }
46417 else {
46418 network = bitcoinjs.bitcoin.networks.litecoin;
46419 }
46420 phraseChanged();
46421 }
46422
c6624d51 46423 function calcForDerivationPath() {
9987f0c1 46424 clearDerivedKeys();
ba3cb9ec 46425 clearAddressesList();
f128bd58 46426 showPending();
9987f0c1
IC
46427 // Don't show bip49 if it's selected but network doesn't support it
46428 if (bip49TabSelected() && !networkHasBip49()) {
46429 return;
46430 }
c6624d51
IC
46431 // Get the derivation path
46432 var derivationPath = getDerivationPath();
46433 var errorText = findDerivationPathErrors(derivationPath);
46434 if (errorText) {
46435 showValidationError(errorText);
46436 return;
46437 }
20083ab9
IC
46438 bip32ExtendedKey = calcBip32ExtendedKey(derivationPath);
46439 if (bip44TabSelected()) {
46440 displayBip44Info();
46441 }
9987f0c1
IC
46442 if (bip49TabSelected()) {
46443 displayBip49Info();
46444 }
c6624d51 46445 displayBip32Info();
c6624d51
IC
46446 }
46447
46448 function generateClicked() {
46449 if (isUsingOwnEntropy()) {
46450 return;
46451 }
46452 clearDisplay();
46453 showPending();
46454 setTimeout(function() {
46455 setMnemonicLanguage();
46456 var phrase = generateRandomPhrase();
46457 if (!phrase) {
46458 return;
46459 }
46460 phraseChanged();
46461 }, 50);
46462 }
46463
46464 function languageChanged() {
46465 setTimeout(function() {
46466 setMnemonicLanguage();
46467 if (DOM.phrase.val().length > 0) {
46468 var newPhrase = convertPhraseToNewLanguage();
46469 DOM.phrase.val(newPhrase);
46470 phraseChanged();
46471 }
46472 else {
46473 DOM.generate.trigger("click");
46474 }
46475 }, 50);
46476 }
46477
46478 function toggleIndexes() {
46479 showIndex = !showIndex;
46480 $("td.index span").toggleClass("invisible");
46481 }
46482
46483 function toggleAddresses() {
46484 showAddress = !showAddress;
46485 $("td.address span").toggleClass("invisible");
46486 }
46487
46488 function togglePublicKeys() {
46489 showPubKey = !showPubKey;
46490 $("td.pubkey span").toggleClass("invisible");
46491 }
46492
46493 function togglePrivateKeys() {
46494 showPrivKey = !showPrivKey;
46495 $("td.privkey span").toggleClass("invisible");
46496 }
46497
46498 // Private methods
46499
46500 function generateRandomPhrase() {
46501 if (!hasStrongRandom()) {
46502 var errorText = "This browser does not support strong randomness";
46503 showValidationError(errorText);
46504 return;
46505 }
18abe53b 46506 var numWords = parseInt(DOM.generatedStrength.val());
c6624d51
IC
46507 var strength = numWords / 3 * 32;
46508 var words = mnemonic.generate(strength);
46509 DOM.phrase.val(words);
46510 return words;
46511 }
46512
46513 function calcBip32RootKeyFromSeed(phrase, passphrase) {
46514 seed = mnemonic.toSeed(phrase, passphrase);
9987f0c1 46515 bip32RootKey = bitcoinjs.bitcoin.HDNode.fromSeedHex(seed, network);
c6624d51
IC
46516 }
46517
46518 function calcBip32RootKeyFromBase58(rootKeyBase58) {
9987f0c1 46519 bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network);
c6624d51
IC
46520 }
46521
46522 function calcBip32ExtendedKey(path) {
0a1f0259
IC
46523 // Check there's a root key to derive from
46524 if (!bip32RootKey) {
46525 return bip32RootKey;
46526 }
20083ab9 46527 var extendedKey = bip32RootKey;
c6624d51
IC
46528 // Derive the key from the path
46529 var pathBits = path.split("/");
ebd8d4e8
IC
46530 for (var i=0; i<pathBits.length; i++) {
46531 var bit = pathBits[i];
46532 var index = parseInt(bit);
46533 if (isNaN(index)) {
46534 continue;
46535 }
46536 var hardened = bit[bit.length-1] == "'";
9987f0c1 46537 var isPriv = !(extendedKey.isNeutered());
ba3cb9ec
IC
46538 var invalidDerivationPath = hardened && !isPriv;
46539 if (invalidDerivationPath) {
46540 extendedKey = null;
46541 }
46542 else if (hardened) {
20083ab9 46543 extendedKey = extendedKey.deriveHardened(index);
ebd8d4e8
IC
46544 }
46545 else {
20083ab9 46546 extendedKey = extendedKey.derive(index);
ebd8d4e8
IC
46547 }
46548 }
20083ab9 46549 return extendedKey
ebd8d4e8
IC
46550 }
46551
46552 function showValidationError(errorText) {
46553 DOM.feedback
46554 .text(errorText)
46555 .show();
46556 }
46557
46558 function hideValidationError() {
46559 DOM.feedback
46560 .text("")
46561 .hide();
46562 }
46563
46564 function findPhraseErrors(phrase) {
ebd8d4e8 46565 // Preprocess the words
783981de 46566 phrase = mnemonic.normalizeString(phrase);
0515eeec 46567 var words = phraseToWordArray(phrase);
18abe53b
IC
46568 // Detect blank phrase
46569 if (words.length == 0) {
46570 return "Blank mnemonic";
46571 }
563e401a 46572 // Check each word
0515eeec
IC
46573 for (var i=0; i<words.length; i++) {
46574 var word = words[i];
46575 var language = getLanguage();
46576 if (WORDLISTS[language].indexOf(word) == -1) {
563e401a
IC
46577 console.log("Finding closest match to " + word);
46578 var nearestWord = findNearestWord(word);
46579 return word + " not in wordlist, did you mean " + nearestWord + "?";
46580 }
46581 }
ebd8d4e8 46582 // Check the words are valid
0515eeec 46583 var properPhrase = wordArrayToPhrase(words);
ebd8d4e8
IC
46584 var isValid = mnemonic.check(properPhrase);
46585 if (!isValid) {
46586 return "Invalid mnemonic";
46587 }
46588 return false;
46589 }
46590
efe41586
IC
46591 function validateRootKey(rootKeyBase58) {
46592 try {
0a8d06d0 46593 bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network);
efe41586
IC
46594 }
46595 catch (e) {
46596 return "Invalid root key";
46597 }
46598 return "";
46599 }
46600
38523d36 46601 function getDerivationPath() {
20083ab9 46602 if (bip44TabSelected()) {
38523d36
IC
46603 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
46604 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
46605 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
46606 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
46607 var path = "m/";
46608 path += purpose + "'/";
46609 path += coin + "'/";
46610 path += account + "'/";
46611 path += change;
46612 DOM.bip44path.val(path);
46613 var derivationPath = DOM.bip44path.val();
46614 console.log("Using derivation path from BIP44 tab: " + derivationPath);
46615 return derivationPath;
46616 }
9987f0c1
IC
46617 if (bip49TabSelected()) {
46618 var purpose = parseIntNoNaN(DOM.bip49purpose.val(), 49);
46619 var coin = parseIntNoNaN(DOM.bip49coin.val(), 0);
46620 var account = parseIntNoNaN(DOM.bip49account.val(), 0);
46621 var change = parseIntNoNaN(DOM.bip49change.val(), 0);
46622 var path = "m/";
46623 path += purpose + "'/";
46624 path += coin + "'/";
46625 path += account + "'/";
46626 path += change;
46627 DOM.bip49path.val(path);
46628 var derivationPath = DOM.bip49path.val();
46629 console.log("Using derivation path from BIP49 tab: " + derivationPath);
46630 return derivationPath;
46631 }
20083ab9 46632 else if (bip32TabSelected()) {
38523d36
IC
46633 var derivationPath = DOM.bip32path.val();
46634 console.log("Using derivation path from BIP32 tab: " + derivationPath);
46635 return derivationPath;
46636 }
46637 else {
46638 console.log("Unknown derivation path");
46639 }
46640 }
46641
ebd8d4e8 46642 function findDerivationPathErrors(path) {
30c9e79d
IC
46643 // TODO is not perfect but is better than nothing
46644 // Inspired by
46645 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#test-vectors
46646 // and
46647 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keys
46648 var maxDepth = 255; // TODO verify this!!
46649 var maxIndexValue = Math.pow(2, 31); // TODO verify this!!
46650 if (path[0] != "m") {
46651 return "First character must be 'm'";
46652 }
46653 if (path.length > 1) {
46654 if (path[1] != "/") {
46655 return "Separator must be '/'";
46656 }
46657 var indexes = path.split("/");
46658 if (indexes.length > maxDepth) {
46659 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
46660 }
46661 for (var depth = 1; depth<indexes.length; depth++) {
46662 var index = indexes[depth];
46663 var invalidChars = index.replace(/^[0-9]+'?$/g, "")
46664 if (invalidChars.length > 0) {
46665 return "Invalid characters " + invalidChars + " found at depth " + depth;
46666 }
46667 var indexValue = parseInt(index.replace("'", ""));
46668 if (isNaN(depth)) {
46669 return "Invalid number at depth " + depth;
46670 }
46671 if (indexValue > maxIndexValue) {
46672 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
46673 }
46674 }
46675 }
0a1f0259
IC
46676 // Check root key exists or else derivation path is useless!
46677 if (!bip32RootKey) {
46678 return "No root key";
46679 }
ba3cb9ec 46680 // Check no hardened derivation path when using xpub keys
8d18f379
IC
46681 var hardenedPath = path.indexOf("'") > -1;
46682 var hardenedAddresses = bip32TabSelected() && DOM.hardenedAddresses.prop("checked");
46683 var hardened = hardenedPath || hardenedAddresses;
9987f0c1 46684 var isXpubkey = bip32RootKey.isNeutered();
ba3cb9ec
IC
46685 if (hardened && isXpubkey) {
46686 return "Hardened derivation path is invalid with xpub key";
46687 }
ebd8d4e8
IC
46688 return false;
46689 }
46690
20083ab9
IC
46691 function displayBip44Info() {
46692 // Get the derivation path for the account
46693 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
46694 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
46695 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
46696 var path = "m/";
46697 path += purpose + "'/";
46698 path += coin + "'/";
46699 path += account + "'/";
46700 // Calculate the account extended keys
46701 var accountExtendedKey = calcBip32ExtendedKey(path);
46702 var accountXprv = accountExtendedKey.toBase58();
9987f0c1 46703 var accountXpub = accountExtendedKey.neutered().toBase58();
20083ab9
IC
46704 // Display the extended keys
46705 DOM.bip44accountXprv.val(accountXprv);
46706 DOM.bip44accountXpub.val(accountXpub);
46707 }
46708
9987f0c1
IC
46709 function displayBip49Info() {
46710 // Get the derivation path for the account
46711 var purpose = parseIntNoNaN(DOM.bip49purpose.val(), 49);
46712 var coin = parseIntNoNaN(DOM.bip49coin.val(), 0);
46713 var account = parseIntNoNaN(DOM.bip49account.val(), 0);
46714 var path = "m/";
46715 path += purpose + "'/";
46716 path += coin + "'/";
46717 path += account + "'/";
46718 // Calculate the account extended keys
46719 var accountExtendedKey = calcBip32ExtendedKey(path);
46720 var accountXprv = accountExtendedKey.toBase58();
46721 var accountXpub = accountExtendedKey.neutered().toBase58();
46722 // Display the extended keys
46723 DOM.bip49accountXprv.val(accountXprv);
46724 DOM.bip49accountXpub.val(accountXpub);
46725 }
46726
ebd8d4e8
IC
46727 function displayBip32Info() {
46728 // Display the key
73161a92 46729 DOM.seed.val(seed);
ebd8d4e8
IC
46730 var rootKey = bip32RootKey.toBase58();
46731 DOM.rootKey.val(rootKey);
ba3cb9ec 46732 var xprvkeyB58 = "NA";
9987f0c1 46733 if (!bip32ExtendedKey.isNeutered()) {
ba3cb9ec
IC
46734 xprvkeyB58 = bip32ExtendedKey.toBase58();
46735 }
46736 var extendedPrivKey = xprvkeyB58;
ebd8d4e8 46737 DOM.extendedPrivKey.val(extendedPrivKey);
9987f0c1 46738 var extendedPubKey = bip32ExtendedKey.neutered().toBase58();
ebd8d4e8
IC
46739 DOM.extendedPubKey.val(extendedPubKey);
46740 // Display the addresses and privkeys
46741 clearAddressesList();
46742 displayAddresses(0, 20);
46743 }
46744
46745 function displayAddresses(start, total) {
40892aba
IC
46746 generationProcesses.push(new (function() {
46747
46748 var rows = [];
46749
46750 this.stop = function() {
46751 for (var i=0; i<rows.length; i++) {
46752 rows[i].shouldGenerate = false;
46753 }
f128bd58 46754 hidePending();
40892aba
IC
46755 }
46756
46757 for (var i=0; i<total; i++) {
46758 var index = i + start;
f128bd58
IC
46759 var isLast = i == total - 1;
46760 rows.push(new TableRow(index, isLast));
40892aba
IC
46761 }
46762
46763 })());
80c4dd2a
IC
46764 }
46765
f128bd58 46766 function TableRow(index, isLast) {
80c4dd2a 46767
40892aba
IC
46768 var self = this;
46769 this.shouldGenerate = true;
1975bfbc 46770 var useHardenedAddresses = DOM.hardenedAddresses.prop("checked");
0a8d06d0
IC
46771 var isP2wpkhNestedInP2sh = bip49TabSelected() || (bip32TabSelected() && useP2wpkhNestedInP2sh());
46772 var p2wpkhNestedInP2shAvailable = networkHasBip49();
1975bfbc 46773
80c4dd2a
IC
46774 function init() {
46775 calculateValues();
46776 }
46777
46778 function calculateValues() {
46779 setTimeout(function() {
40892aba
IC
46780 if (!self.shouldGenerate) {
46781 return;
46782 }
9987f0c1 46783 var key = "NA";
1975bfbc
IC
46784 if (useHardenedAddresses) {
46785 key = bip32ExtendedKey.deriveHardened(index);
46786 }
46787 else {
46788 key = bip32ExtendedKey.derive(index);
46789 }
80c4dd2a 46790 var address = key.getAddress().toString();
ba3cb9ec 46791 var privkey = "NA";
9987f0c1
IC
46792 if (!key.isNeutered()) {
46793 privkey = key.keyPair.toWIF(network);
ba3cb9ec 46794 }
9987f0c1 46795 var pubkey = key.getPublicKeyBuffer().toString('hex');
38523d36 46796 var indexText = getDerivationPath() + "/" + index;
1975bfbc
IC
46797 if (useHardenedAddresses) {
46798 indexText = indexText + "'";
46799 }
8b095871 46800 // Ethereum values are different
534481b6 46801 if (networks[DOM.network.val()].name == "ETH - Ethereum") {
9987f0c1 46802 var privKeyBuffer = key.keyPair.d.toBuffer();
8b095871
IC
46803 privkey = privKeyBuffer.toString('hex');
46804 var addressBuffer = ethUtil.privateToAddress(privKeyBuffer);
49b21f12
IC
46805 var hexAddress = addressBuffer.toString('hex');
46806 var checksumAddress = ethUtil.toChecksumAddress(hexAddress);
46807 address = ethUtil.addHexPrefix(checksumAddress);
920eb591
IC
46808 privkey = ethUtil.addHexPrefix(privkey);
46809 pubkey = ethUtil.addHexPrefix(pubkey);
8b095871 46810 }
8a1f452d 46811 // Ripple values are different
534481b6 46812 if (networks[DOM.network.val()].name == "XRP - Ripple") {
8a1f452d 46813 privkey = convertRipplePriv(privkey);
46814 address = convertRippleAdrr(address);
46815 }
9987f0c1 46816 // BIP49 addresses are different
0a8d06d0
IC
46817 if (isP2wpkhNestedInP2sh) {
46818 if (!p2wpkhNestedInP2shAvailable) {
9987f0c1
IC
46819 return;
46820 }
46821 var keyhash = bitcoinjs.bitcoin.crypto.hash160(key.getPublicKeyBuffer());
46822 var scriptsig = bitcoinjs.bitcoin.script.witnessPubKeyHash.output.encode(keyhash);
46823 var addressbytes = bitcoinjs.bitcoin.crypto.hash160(scriptsig);
46824 var scriptpubkey = bitcoinjs.bitcoin.script.scriptHash.output.encode(addressbytes);
46825 address = bitcoinjs.bitcoin.address.fromOutputScript(scriptpubkey, network)
46826 }
1b12b2f5 46827 addAddressToList(indexText, address, pubkey, privkey);
f128bd58
IC
46828 if (isLast) {
46829 hidePending();
46830 }
80c4dd2a 46831 }, 50)
ebd8d4e8 46832 }
80c4dd2a
IC
46833
46834 init();
46835
ebd8d4e8
IC
46836 }
46837
46838 function showMore() {
46839 var start = DOM.addresses.children().length;
46840 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
46841 if (isNaN(rowsToAdd)) {
46842 rowsToAdd = 20;
46843 DOM.rowsToAdd.val("20");
46844 }
46845 if (rowsToAdd > 200) {
46846 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
46847 msg += "Do you want to continue?";
46848 if (!confirm(msg)) {
46849 return;
46850 }
46851 }
ebd8d4e8 46852 displayAddresses(start, rowsToAdd);
ebd8d4e8
IC
46853 }
46854
46855 function clearDisplay() {
46856 clearAddressesList();
9987f0c1 46857 clearKeys();
ebd8d4e8
IC
46858 hideValidationError();
46859 }
46860
46861 function clearAddressesList() {
46862 DOM.addresses.empty();
40892aba
IC
46863 stopGenerating();
46864 }
46865
46866 function stopGenerating() {
46867 while (generationProcesses.length > 0) {
46868 var generation = generationProcesses.shift();
46869 generation.stop();
46870 }
ebd8d4e8
IC
46871 }
46872
9987f0c1
IC
46873 function clearKeys() {
46874 clearRootKey();
46875 clearDerivedKeys();
46876 }
46877
46878 function clearRootKey() {
ebd8d4e8 46879 DOM.rootKey.val("");
9987f0c1
IC
46880 }
46881
46882 function clearDerivedKeys() {
ebd8d4e8
IC
46883 DOM.extendedPrivKey.val("");
46884 DOM.extendedPubKey.val("");
9987f0c1
IC
46885 DOM.bip44accountXprv.val("");
46886 DOM.bip44accountXpub.val("");
ebd8d4e8
IC
46887 }
46888
1b12b2f5 46889 function addAddressToList(indexText, address, pubkey, privkey) {
ebd8d4e8 46890 var row = $(addressRowTemplate.html());
80c4dd2a
IC
46891 // Elements
46892 var indexCell = row.find(".index span");
46893 var addressCell = row.find(".address span");
1b12b2f5 46894 var pubkeyCell = row.find(".pubkey span");
80c4dd2a
IC
46895 var privkeyCell = row.find(".privkey span");
46896 // Content
ae30fed8 46897 indexCell.text(indexText);
80c4dd2a 46898 addressCell.text(address);
1b12b2f5 46899 pubkeyCell.text(pubkey);
80c4dd2a
IC
46900 privkeyCell.text(privkey);
46901 // Visibility
46902 if (!showIndex) {
46903 indexCell.addClass("invisible");
46904 }
46905 if (!showAddress) {
46906 addressCell.addClass("invisible");
46907 }
1b12b2f5
IC
46908 if (!showPubKey) {
46909 pubkeyCell.addClass("invisible");
46910 }
80c4dd2a 46911 if (!showPrivKey) {
6d628db7 46912 privkeyCell.addClass("invisible");
80c4dd2a 46913 }
ebd8d4e8 46914 DOM.addresses.append(row);
e00964cc
IC
46915 var rowShowQrEls = row.find("[data-show-qr]");
46916 setQrEvents(rowShowQrEls);
ebd8d4e8
IC
46917 }
46918
46919 function hasStrongRandom() {
46920 return 'crypto' in window && window['crypto'] !== null;
46921 }
46922
46923 function disableForms() {
46924 $("form").on("submit", function(e) {
46925 e.preventDefault();
46926 });
46927 }
46928
ebd8d4e8
IC
46929 function parseIntNoNaN(val, defaultVal) {
46930 var v = parseInt(val);
46931 if (isNaN(v)) {
46932 return defaultVal;
46933 }
46934 return v;
46935 }
46936
46937 function showPending() {
46938 DOM.feedback
46939 .text("Calculating...")
46940 .show();
46941 }
46942
563e401a 46943 function findNearestWord(word) {
0515eeec
IC
46944 var language = getLanguage();
46945 var words = WORDLISTS[language];
563e401a
IC
46946 var minDistance = 99;
46947 var closestWord = words[0];
46948 for (var i=0; i<words.length; i++) {
46949 var comparedTo = words[i];
6ea15134
IC
46950 if (comparedTo.indexOf(word) == 0) {
46951 return comparedTo;
46952 }
563e401a
IC
46953 var distance = Levenshtein.get(word, comparedTo);
46954 if (distance < minDistance) {
46955 closestWord = comparedTo;
46956 minDistance = distance;
46957 }
46958 }
46959 return closestWord;
46960 }
46961
ebd8d4e8
IC
46962 function hidePending() {
46963 DOM.feedback
46964 .text("")
46965 .hide();
46966 }
46967
ab78acc6
IC
46968 function populateNetworkSelect() {
46969 for (var i=0; i<networks.length; i++) {
46970 var network = networks[i];
46971 var option = $("<option>");
46972 option.attr("value", i);
46973 option.text(network.name);
b3cc3930
IC
46974 if (network.name == "BTC - Bitcoin") {
46975 option.prop("selected", true);
46976 }
ab78acc6
IC
46977 DOM.phraseNetwork.append(option);
46978 }
46979 }
46980
56530adc
IC
46981 function populateClientSelect() {
46982 for (var i=0; i<clients.length; i++) {
46983 var client = clients[i];
46984 var option = $("<option>");
46985 option.attr("value", i);
46986 option.text(client.name);
46987 DOM.bip32Client.append(option);
46988 }
46989 }
46990
0515eeec
IC
46991 function getLanguage() {
46992 var defaultLanguage = "english";
46993 // Try to get from existing phrase
46994 var language = getLanguageFromPhrase();
46995 // Try to get from url if not from phrase
46996 if (language.length == 0) {
46997 language = getLanguageFromUrl();
46998 }
46999 // Default to English if no other option
47000 if (language.length == 0) {
47001 language = defaultLanguage;
47002 }
47003 return language;
47004 }
47005
47006 function getLanguageFromPhrase(phrase) {
47007 // Check if how many words from existing phrase match a language.
47008 var language = "";
47009 if (!phrase) {
47010 phrase = DOM.phrase.val();
47011 }
47012 if (phrase.length > 0) {
47013 var words = phraseToWordArray(phrase);
47014 var languageMatches = {};
47015 for (l in WORDLISTS) {
47016 // Track how many words match in this language
47017 languageMatches[l] = 0;
47018 for (var i=0; i<words.length; i++) {
47019 var wordInLanguage = WORDLISTS[l].indexOf(words[i]) > -1;
47020 if (wordInLanguage) {
47021 languageMatches[l]++;
47022 }
47023 }
47024 // Find languages with most word matches.
47025 // This is made difficult due to commonalities between Chinese
47026 // simplified vs traditional.
47027 var mostMatches = 0;
47028 var mostMatchedLanguages = [];
47029 for (var l in languageMatches) {
47030 var numMatches = languageMatches[l];
47031 if (numMatches > mostMatches) {
47032 mostMatches = numMatches;
47033 mostMatchedLanguages = [l];
47034 }
47035 else if (numMatches == mostMatches) {
47036 mostMatchedLanguages.push(l);
47037 }
47038 }
47039 }
47040 if (mostMatchedLanguages.length > 0) {
47041 // Use first language and warn if multiple detected
47042 language = mostMatchedLanguages[0];
47043 if (mostMatchedLanguages.length > 1) {
47044 console.warn("Multiple possible languages");
47045 console.warn(mostMatchedLanguages);
47046 }
47047 }
47048 }
47049 return language;
47050 }
47051
47052 function getLanguageFromUrl() {
c6624d51
IC
47053 for (var language in WORDLISTS) {
47054 if (window.location.hash.indexOf(language) > -1) {
47055 return language;
47056 }
47057 }
47058 return "";
0515eeec
IC
47059 }
47060
47061 function setMnemonicLanguage() {
47062 var language = getLanguage();
47063 // Load the bip39 mnemonic generator for this language if required
47064 if (!(language in mnemonics)) {
47065 mnemonics[language] = new Mnemonic(language);
47066 }
47067 mnemonic = mnemonics[language];
47068 }
47069
47070 function convertPhraseToNewLanguage() {
47071 var oldLanguage = getLanguageFromPhrase();
47072 var newLanguage = getLanguageFromUrl();
47073 var oldPhrase = DOM.phrase.val();
47074 var oldWords = phraseToWordArray(oldPhrase);
47075 var newWords = [];
47076 for (var i=0; i<oldWords.length; i++) {
47077 var oldWord = oldWords[i];
47078 var index = WORDLISTS[oldLanguage].indexOf(oldWord);
47079 var newWord = WORDLISTS[newLanguage][index];
47080 newWords.push(newWord);
47081 }
47082 newPhrase = wordArrayToPhrase(newWords);
47083 return newPhrase;
47084 }
47085
47086 // TODO look at jsbip39 - mnemonic.splitWords
47087 function phraseToWordArray(phrase) {
47088 var words = phrase.split(/\s/g);
47089 var noBlanks = [];
47090 for (var i=0; i<words.length; i++) {
47091 var word = words[i];
47092 if (word.length > 0) {
47093 noBlanks.push(word);
47094 }
47095 }
47096 return noBlanks;
47097 }
47098
47099 // TODO look at jsbip39 - mnemonic.joinWords
47100 function wordArrayToPhrase(words) {
47101 var phrase = words.join(" ");
47102 var language = getLanguageFromPhrase(phrase);
47103 if (language == "japanese") {
47104 phrase = words.join("\u3000");
47105 }
47106 return phrase;
47107 }
47108
c6624d51
IC
47109 function isUsingOwnEntropy() {
47110 return DOM.useEntropy.prop("checked");
47111 }
47112
47113 function setMnemonicFromEntropy() {
2a6dd137 47114 clearEntropyFeedback();
18abe53b 47115 // Get entropy value
c6624d51 47116 var entropyStr = DOM.entropy.val();
18abe53b 47117 // Work out minimum base for entropy
c6624d51 47118 var entropy = Entropy.fromString(entropyStr);
18abe53b 47119 if (entropy.binaryStr.length == 0) {
c6624d51
IC
47120 return;
47121 }
47122 // Show entropy details
18abe53b
IC
47123 showEntropyFeedback(entropy);
47124 // Use entropy hash if not using raw entropy
47125 var bits = entropy.binaryStr;
47126 var mnemonicLength = DOM.entropyMnemonicLength.val();
47127 if (mnemonicLength != "raw") {
47128 // Get bits by hashing entropy with SHA256
47129 var hash = sjcl.hash.sha256.hash(entropy.cleanStr);
47130 var hex = sjcl.codec.hex.fromBits(hash);
47131 bits = BigInteger.parse(hex, 16).toString(2);
53aaab27 47132 while (bits.length % 256 != 0) {
18abe53b
IC
47133 bits = "0" + bits;
47134 }
47135 // Truncate hash to suit number of words
47136 mnemonicLength = parseInt(mnemonicLength);
47137 var numberOfBits = 32 * mnemonicLength / 3;
47138 bits = bits.substring(0, numberOfBits);
c6624d51 47139 }
c6624d51 47140 // Discard trailing entropy
18abe53b 47141 var bitsToUse = Math.floor(bits.length / 32) * 32;
2a6dd137
IC
47142 var start = bits.length - bitsToUse;
47143 var binaryStr = bits.substring(start);
c6624d51
IC
47144 // Convert entropy string to numeric array
47145 var entropyArr = [];
18abe53b
IC
47146 for (var i=0; i<binaryStr.length / 8; i++) {
47147 var byteAsBits = binaryStr.substring(i*8, i*8+8);
47148 var entropyByte = parseInt(byteAsBits, 2);
c6624d51
IC
47149 entropyArr.push(entropyByte)
47150 }
47151 // Convert entropy array to mnemonic
47152 var phrase = mnemonic.toMnemonic(entropyArr);
47153 // Set the mnemonic in the UI
47154 DOM.phrase.val(phrase);
47155 }
47156
2a6dd137 47157 function clearEntropyFeedback() {
f1e5d484 47158 DOM.entropyCrackTime.text("...");
18abe53b 47159 DOM.entropyType.text("");
2a6dd137
IC
47160 DOM.entropyWordCount.text("0");
47161 DOM.entropyEventCount.text("0");
47162 DOM.entropyBitsPerEvent.text("0");
47163 DOM.entropyBits.text("0");
47164 DOM.entropyFiltered.html("&nbsp;");
47165 DOM.entropyBinary.html("&nbsp;");
c6624d51
IC
47166 }
47167
18abe53b 47168 function showEntropyFeedback(entropy) {
9e97eb76 47169 var numberOfBits = entropy.binaryStr.length;
f1e5d484 47170 var timeToCrack = "unknown";
95f04905
IC
47171 try {
47172 var z = zxcvbn(entropy.base.parts.join(""));
f1e5d484
IC
47173 timeToCrack = z.crack_times_display.offline_fast_hashing_1e10_per_second;
47174 if (z.feedback.warning != "") {
47175 timeToCrack = timeToCrack + " - " + z.feedback.warning;
47176 };
18abe53b 47177 }
95f04905 47178 catch (e) {
95f04905
IC
47179 console.log("Error detecting entropy strength with zxcvbn:");
47180 console.log(e);
47181 }
95f04905 47182 var entropyTypeStr = getEntropyTypeStr(entropy);
9e97eb76 47183 var wordCount = Math.floor(numberOfBits / 32) * 3;
94959756 47184 var bitsPerEvent = entropy.bitsPerEvent.toFixed(2);
2a6dd137 47185 DOM.entropyFiltered.html(entropy.cleanHtml);
95f04905 47186 DOM.entropyType.text(entropyTypeStr);
f1e5d484 47187 DOM.entropyCrackTime.text(timeToCrack);
18abe53b 47188 DOM.entropyEventCount.text(entropy.base.ints.length);
9e97eb76 47189 DOM.entropyBits.text(numberOfBits);
2a6dd137
IC
47190 DOM.entropyWordCount.text(wordCount);
47191 DOM.entropyBinary.text(entropy.binaryStr);
9e97eb76 47192 DOM.entropyBitsPerEvent.text(bitsPerEvent);
95f04905
IC
47193 }
47194
47195 function getEntropyTypeStr(entropy) {
47196 var typeStr = entropy.base.str;
47197 // Add some detail if these are cards
47198 if (entropy.base.asInt == 52) {
47199 var cardDetail = []; // array of message strings
47200 // Detect duplicates
47201 var dupes = [];
47202 var dupeTracker = {};
47203 for (var i=0; i<entropy.base.parts.length; i++) {
47204 var card = entropy.base.parts[i];
9e97eb76
IC
47205 var cardUpper = card.toUpperCase();
47206 if (cardUpper in dupeTracker) {
95f04905
IC
47207 dupes.push(card);
47208 }
9e97eb76 47209 dupeTracker[cardUpper] = true;
95f04905
IC
47210 }
47211 if (dupes.length > 0) {
47212 var dupeWord = "duplicates";
47213 if (dupes.length == 1) {
47214 dupeWord = "duplicate";
47215 }
47216 var msg = dupes.length + " " + dupeWord + ": " + dupes.slice(0,3).join(" ");
47217 if (dupes.length > 3) {
47218 msg += "...";
47219 }
47220 cardDetail.push(msg);
47221 }
47222 // Detect full deck
47223 var uniqueCards = [];
47224 for (var uniqueCard in dupeTracker) {
47225 uniqueCards.push(uniqueCard);
47226 }
47227 if (uniqueCards.length == 52) {
47228 cardDetail.unshift("full deck");
47229 }
9e97eb76
IC
47230 // Detect missing cards
47231 var values = "A23456789TJQK";
47232 var suits = "CDHS";
47233 var missingCards = [];
47234 for (var i=0; i<suits.length; i++) {
47235 for (var j=0; j<values.length; j++) {
47236 var card = values[j] + suits[i];
47237 if (!(card in dupeTracker)) {
47238 missingCards.push(card);
47239 }
47240 }
47241 }
47242 // Display missing cards if six or less, ie clearly going for full deck
47243 if (missingCards.length > 0 && missingCards.length <= 6) {
47244 var msg = missingCards.length + " missing: " + missingCards.slice(0,3).join(" ");
47245 if (missingCards.length > 3) {
47246 msg += "...";
47247 }
47248 cardDetail.push(msg);
47249 }
95f04905
IC
47250 // Add card details to typeStr
47251 if (cardDetail.length > 0) {
47252 typeStr += " (" + cardDetail.join(", ") + ")";
47253 }
47254 }
47255 return typeStr;
47256 }
47257
e00964cc
IC
47258 function setQrEvents(els) {
47259 els.on("mouseenter", createQr);
47260 els.on("mouseleave", destroyQr);
47261 els.on("click", toggleQr);
47262 }
47263
47264 function createQr(e) {
47265 var content = e.target.textContent || e.target.value;
47266 if (content) {
47267 var size = 130;
47268 DOM.qrImage.qrcode({width: size, height: size, text: content});
47269 if (!showQr) {
52da415f
IC
47270 DOM.qrHider.addClass("hidden");
47271 }
47272 else {
47273 DOM.qrHider.removeClass("hidden");
e00964cc
IC
47274 }
47275 DOM.qrContainer.removeClass("hidden");
47276 }
47277 }
47278
47279 function destroyQr() {
47280 DOM.qrImage.text("");
47281 DOM.qrContainer.addClass("hidden");
47282 }
47283
47284 function toggleQr() {
47285 showQr = !showQr;
52da415f 47286 DOM.qrHider.toggleClass("hidden");
e00964cc
IC
47287 DOM.qrHint.toggleClass("hidden");
47288 }
47289
20083ab9
IC
47290 function bip44TabSelected() {
47291 return DOM.bip44tab.hasClass("active");
47292 }
47293
47294 function bip32TabSelected() {
47295 return DOM.bip32tab.hasClass("active");
47296 }
47297
0a8d06d0
IC
47298 function useP2wpkhNestedInP2sh() {
47299 return DOM.useP2wpkhNestedInP2sh.prop("checked");
47300 }
47301
9987f0c1 47302 function networkHasBip49() {
0a8d06d0 47303 return networks[DOM.network.val()].p2wpkhNestedInP2shAvailable;
9987f0c1
IC
47304 }
47305
47306 function bip49TabSelected() {
47307 return DOM.bip49tab.hasClass("active");
47308 }
47309
47310 function setHdCoin(coinValue) {
47311 DOM.bip44coin.val(coinValue);
47312 DOM.bip49coin.val(coinValue);
47313 }
47314
0a8d06d0 47315 function showP2wpkhNestedInP2shAvailable() {
9987f0c1
IC
47316 DOM.bip49unavailable.addClass("hidden");
47317 DOM.bip49available.removeClass("hidden");
0a8d06d0 47318 DOM.useP2wpkhNestedInP2sh.prop("disabled", false);
9987f0c1
IC
47319 }
47320
0a8d06d0 47321 function showP2wpkhNestedInP2shUnavailable() {
9987f0c1
IC
47322 DOM.bip49available.addClass("hidden");
47323 DOM.bip49unavailable.removeClass("hidden");
0a8d06d0
IC
47324 DOM.useP2wpkhNestedInP2sh.prop("disabled", true);
47325 DOM.useP2wpkhNestedInP2sh.prop("checked", false);
9987f0c1
IC
47326 }
47327
ab78acc6 47328 var networks = [
b3cc3930
IC
47329 {
47330 name: "BCH - Bitcoin Cash",
0a8d06d0 47331 p2wpkhNestedInP2shAvailable: false,
b3cc3930
IC
47332 onSelect: function() {
47333 network = bitcoinjs.bitcoin.networks.bitcoin;
47334 setHdCoin(145);
47335 },
47336 },
ab78acc6 47337 {
534481b6 47338 name: "BTC - Bitcoin",
0a8d06d0 47339 p2wpkhNestedInP2shAvailable: true,
ab78acc6 47340 onSelect: function() {
9987f0c1
IC
47341 network = bitcoinjs.bitcoin.networks.bitcoin;
47342 setHdCoin(0);
ab78acc6
IC
47343 },
47344 },
47345 {
534481b6 47346 name: "BTC - Bitcoin Testnet",
0a8d06d0 47347 p2wpkhNestedInP2shAvailable: true,
ab78acc6 47348 onSelect: function() {
9987f0c1
IC
47349 network = bitcoinjs.bitcoin.networks.testnet;
47350 setHdCoin(1);
ab78acc6
IC
47351 },
47352 },
47353 {
534481b6 47354 name: "CLAM - Clams",
0a8d06d0 47355 p2wpkhNestedInP2shAvailable: false,
ab78acc6 47356 onSelect: function() {
9987f0c1
IC
47357 network = bitcoinjs.bitcoin.networks.clam;
47358 setHdCoin(23);
ab78acc6
IC
47359 },
47360 },
0921f370 47361 {
47362 name: "CRW - Crown",
0a8d06d0 47363 p2wpkhNestedInP2shAvailable: false,
0921f370 47364 onSelect: function() {
9987f0c1
IC
47365 network = bitcoinjs.bitcoin.networks.crown;
47366 setHdCoin(72);
0921f370 47367 },
47368 },
ab78acc6 47369 {
534481b6 47370 name: "DASH - Dash",
0a8d06d0 47371 p2wpkhNestedInP2shAvailable: false,
d5dc92fd 47372 onSelect: function() {
9987f0c1
IC
47373 network = bitcoinjs.bitcoin.networks.dash;
47374 setHdCoin(5);
d5dc92fd
IC
47375 },
47376 },
c0386f3b 47377 {
534481b6 47378 name: "DASH - Dash Testnet",
0a8d06d0 47379 p2wpkhNestedInP2shAvailable: false,
c0386f3b 47380 onSelect: function() {
9987f0c1
IC
47381 network = bitcoinjs.bitcoin.networks.dashtn;
47382 setHdCoin(1);
c0386f3b
KR
47383 },
47384 },
d5dc92fd 47385 {
534481b6 47386 name: "DOGE - Dogecoin",
0a8d06d0 47387 p2wpkhNestedInP2shAvailable: false,
534481b6 47388 onSelect: function() {
9987f0c1
IC
47389 network = bitcoinjs.bitcoin.networks.dogecoin;
47390 setHdCoin(3);
534481b6 47391 },
47392 },
47393 {
47394 name: "ETH - Ethereum",
0a8d06d0 47395 p2wpkhNestedInP2shAvailable: false,
d5dc92fd 47396 onSelect: function() {
9987f0c1
IC
47397 network = bitcoinjs.bitcoin.networks.bitcoin;
47398 setHdCoin(60);
d5dc92fd
IC
47399 },
47400 },
f88fab20 47401 {
534481b6 47402 name: "GAME - GameCredits",
0a8d06d0 47403 p2wpkhNestedInP2shAvailable: false,
f88fab20 47404 onSelect: function() {
9987f0c1
IC
47405 network = bitcoinjs.bitcoin.networks.game;
47406 setHdCoin(101);
f88fab20 47407 },
47408 },
a3baa26e 47409 {
534481b6 47410 name: "JBS - Jumbucks",
0a8d06d0 47411 p2wpkhNestedInP2shAvailable: false,
a3baa26e 47412 onSelect: function() {
9987f0c1
IC
47413 network = bitcoinjs.bitcoin.networks.jumbucks;
47414 setHdCoin(26);
a3baa26e
IC
47415 },
47416 },
47417 {
534481b6 47418 name: "LTC - Litecoin",
0a8d06d0 47419 p2wpkhNestedInP2shAvailable: false,
a3baa26e 47420 onSelect: function() {
9987f0c1
IC
47421 network = bitcoinjs.bitcoin.networks.litecoin;
47422 setHdCoin(2);
8d18f379 47423 DOM.litecoinLtubContainer.removeClass("hidden");
a3baa26e
IC
47424 },
47425 },
56ad9601
JS
47426 {
47427 name: "MAZA - Maza",
0a8d06d0 47428 p2wpkhNestedInP2shAvailable: false,
56ad9601
JS
47429 onSelect: function() {
47430 network = bitcoinjs.bitcoin.networks.maza;
47431 setHdCoin(13);
47432 },
47433 },
47434
a3baa26e 47435 {
534481b6 47436 name: "NMC - Namecoin",
0a8d06d0 47437 p2wpkhNestedInP2shAvailable: false,
a3baa26e 47438 onSelect: function() {
9987f0c1
IC
47439 network = bitcoinjs.bitcoin.networks.namecoin;
47440 setHdCoin(7);
a3baa26e
IC
47441 },
47442 },
f128bd58
IC
47443 {
47444 name: "PIVX - PIVX",
0a8d06d0 47445 p2wpkhNestedInP2shAvailable: false,
f128bd58
IC
47446 onSelect: function() {
47447 network = bitcoinjs.bitcoin.networks.pivx;
47448 setHdCoin(119);
47449 },
47450 },
47451 {
47452 name: "PIVX - PIVX Testnet",
0a8d06d0 47453 p2wpkhNestedInP2shAvailable: false,
f128bd58
IC
47454 onSelect: function() {
47455 network = bitcoinjs.bitcoin.networks.pivxtestnet;
47456 setHdCoin(1);
47457 },
47458 },
5c434a8a 47459 {
534481b6 47460 name: "PPC - Peercoin",
0a8d06d0 47461 p2wpkhNestedInP2shAvailable: false,
5c434a8a 47462 onSelect: function() {
9987f0c1
IC
47463 network = bitcoinjs.bitcoin.networks.peercoin;
47464 setHdCoin(6);
5c434a8a
CM
47465 },
47466 },
8a1f452d 47467 {
534481b6 47468 name: "SDC - ShadowCash",
0a8d06d0 47469 p2wpkhNestedInP2shAvailable: false,
5493efc3 47470 onSelect: function() {
9987f0c1
IC
47471 network = bitcoinjs.bitcoin.networks.shadow;
47472 setHdCoin(35);
5493efc3 47473 },
47474 },
07ac4350 47475 {
534481b6 47476 name: "SDC - ShadowCash Testnet",
0a8d06d0 47477 p2wpkhNestedInP2shAvailable: false,
07ac4350 47478 onSelect: function() {
9987f0c1
IC
47479 network = bitcoinjs.bitcoin.networks.shadowtn;
47480 setHdCoin(1);
07ac4350 47481 },
47482 },
01e81e53 47483 {
534481b6 47484 name: "SLM - Slimcoin",
0a8d06d0 47485 p2wpkhNestedInP2shAvailable: false,
01e81e53 47486 onSelect: function() {
9987f0c1
IC
47487 network = bitcoinjs.bitcoin.networks.slimcoin;
47488 setHdCoin(63);
01e81e53
GH
47489 },
47490 },
47491 {
534481b6 47492 name: "SLM - Slimcoin Testnet",
0a8d06d0 47493 p2wpkhNestedInP2shAvailable: false,
01e81e53 47494 onSelect: function() {
9987f0c1
IC
47495 network = bitcoinjs.bitcoin.networks.slimcointn;
47496 setHdCoin(111);
01e81e53
GH
47497 },
47498 },
07ac4350 47499 {
534481b6 47500 name: "VIA - Viacoin",
0a8d06d0 47501 p2wpkhNestedInP2shAvailable: false,
07ac4350 47502 onSelect: function() {
9987f0c1
IC
47503 network = bitcoinjs.bitcoin.networks.viacoin;
47504 setHdCoin(14);
07ac4350 47505 },
47506 },
8b095871 47507 {
534481b6 47508 name: "VIA - Viacoin Testnet",
0a8d06d0 47509 p2wpkhNestedInP2shAvailable: false,
8b095871 47510 onSelect: function() {
9987f0c1
IC
47511 network = bitcoinjs.bitcoin.networks.viacointestnet;
47512 setHdCoin(1);
8b095871
IC
47513 },
47514 },
b3cc3930
IC
47515 {
47516 name: "XMY - Myriadcoin",
0a8d06d0 47517 p2wpkhNestedInP2shAvailable: false,
b3cc3930
IC
47518 onSelect: function() {
47519 network = bitcoinjs.bitcoin.networks.myriadcoin;
47520 setHdCoin(90);
47521 },
47522 },
534481b6 47523 {
47524 name: "XRP - Ripple",
0a8d06d0 47525 p2wpkhNestedInP2shAvailable: false,
534481b6 47526 onSelect: function() {
9987f0c1
IC
47527 network = bitcoinjs.bitcoin.networks.bitcoin;
47528 setHdCoin(144);
534481b6 47529 },
47530 }
ab78acc6
IC
47531 ]
47532
56530adc
IC
47533 var clients = [
47534 {
47535 name: "Bitcoin Core",
47536 onSelect: function() {
47537 DOM.bip32path.val("m/0'/0'");
47538 DOM.hardenedAddresses.prop('checked', true);
47539 },
47540 },
47541 {
47542 name: "blockchain.info",
47543 onSelect: function() {
47544 DOM.bip32path.val("m/44'/0'/0'");
47545 DOM.hardenedAddresses.prop('checked', false);
47546 },
47547 },
47548 {
47549 name: "MultiBit HD",
47550 onSelect: function() {
47551 DOM.bip32path.val("m/0'/0");
47552 DOM.hardenedAddresses.prop('checked', false);
47553 },
47554 }
47555 ]
47556
ebd8d4e8
IC
47557 init();
47558
47559})();
dc55c6b0 47560</script>
ebd8d4e8
IC
47561 </body>
47562</html>