]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blame - bip39-standalone.html
Use selenium for tests instead of phantomjs
[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>
0f6b34d6 121 <p class="version">v0.2.8</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">
1102f201
IC
130 <p>You can enter an existing BIP39 mnemonic, or generate a new random one. Typing your own twelve words will probably not work how you expect, since the words require a particular structure (the last word is a checksum).</p>
131 <p>
ea87f1d3
IC
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">
1102f201 142 <span>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>
1102f201 154 <span>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">
1102f201 161 <label class="col-sm-2 control-label">Warning</label>
2a6dd137 162 <div class="col-sm-10 form-control-static">
1102f201
IC
163 <span>Entropy is an advanced feature. Your mnemonic may be insecure if this feature is used incorrectly.</span>
164 <a href="#entropy-notes">Read more</a>
18abe53b
IC
165 </div>
166 </div>
2a6dd137 167 <div class="form-group">
1102f201 168 <label for="entropy" class="col-sm-2 control-label">Entropy</label>
2a6dd137 169 <div class="col-sm-7">
1102f201 170 <textarea id="entropy" rows="2" class="entropy form-control" placeholder="Accepts either binary, base 6, 6-sided dice, base 10, hexadecimal or cards"></textarea>
9ff30bab
IC
171 <div class="row filter-warning text-danger hidden">
172 <p class="col-sm-12">
173 <strong>
174 Some characters have been discarded
175 </strong>
176 </p>
177 </div>
95f04905 178 <div class="row">
1102f201 179 <label class="col-sm-3 control-label"><span class="more-info" title="Based on estimates from zxcvbn using Filtered Entropy">Time To Crack</span></label>
f1e5d484 180 <div class="crack-time col-sm-3 form-control-static"></div>
1102f201 181 <label class="col-sm-3 control-label">Event Count</label>
95f04905
IC
182 <div class="event-count col-sm-3 form-control-static"></div>
183 </div>
184 <div class="row">
1102f201 185 <label class="col-sm-3 control-label">Entropy Type</label>
95f04905 186 <div class="type col-sm-3 form-control-static"></div>
1102f201 187 <label class="col-sm-3 control-label">Bits Per Event</label>
95f04905
IC
188 <div class="bits-per-event col-sm-3 form-control-static"></div>
189 </div>
190 <div class="row">
1102f201 191 <label class="col-sm-3 control-label">Raw Entropy Words</label>
95f04905 192 <div class="word-count col-sm-3 form-control-static"></div>
1102f201 193 <label class="col-sm-3 control-label"><span class="more-info" title="Total bits of entropy may be less than indicated if any entropy event uses a weak source.">Total Bits</span></label>
95f04905
IC
194 <div class="bits col-sm-3 form-control-static"></div>
195 </div>
1102f201 196 <label class="col-sm-3 control-label">Filtered Entropy</label>
2a6dd137 197 <div class="filtered col-sm-9 form-control-static"></div>
1102f201 198 <label class="col-sm-3 control-label">Raw Binary</label>
2a6dd137 199 <div class="binary col-sm-9 form-control-static"></div>
1102f201 200 <label class="col-sm-3 control-label">Mnemonic Length</label>
2a6dd137 201 <div class="col-sm-9">
18abe53b 202 <select class="mnemonic-length form-control">
1102f201
IC
203 <option value="raw" selected>Use Raw Entropy (3 words per 32 bits)</option>
204 <option value="12">12 <span>Words</span></option>
205 <option value="15">15 <span>Words</option>
206 <option value="18">18 <span>Words</span></option>
207 <option value="21">21 <span>Words</span></option>
208 <option value="24">24 <span>Words</span></option>
18abe53b 209 </select>
c6624d51 210 </div>
18abe53b 211 </div>
2a6dd137 212 <div class="col-sm-3">
1102f201 213 <p>Valid entropy values include:</p>
2a6dd137 214 <ul>
1102f201
IC
215 <li><strong>Binary</strong> [0-1]<br>101010011</li>
216 <li><strong>Base 6</strong> [0-5]<br>123434014</li>
217 <li><strong>Dice</strong> [1-6]<br>62535634</li>
218 <li><strong>Base 10</strong> [0-9]<br>90834528</li>
219 <li><strong>Hex</strong> [0-9A-F]<br>4187a8bfd9</li>
220 <li><strong>Card</strong> [A2-9TJQK][CDHS]<br>ahqs9dtc</li>
2a6dd137
IC
221 </ul>
222 </div>
c6624d51
IC
223 </div>
224 </div>
225 <div class="form-group">
226 <div class="col-sm-2"></div>
227 <div class="col-sm-10 checkbox">
228 <label>
229 <input type="checkbox" class="use-entropy">
1102f201 230 <span>Supply my own source of entropy</span>
c6624d51
IC
231 </label>
232 </div>
233 </div>
234 <div class="form-group">
1102f201 235 <label class="col-sm-2 control-label">Mnemonic Language</label>
0515eeec 236 <div class="col-sm-10 languages">
ea87f1d3
IC
237 <div class="form-control no-border">
238 <a href="#english">English</a>
239 <a href="#japanese" title="Japanese">日本語</a>
240 <a href="#spanish" title="Spanish">Español</a>
241 <a href="#chinese_simplified" title="Chinese (Simplified)">中文(简体)</a>
242 <a href="#chinese_traditional" title="Chinese (Traditional)">中文(繁體)</a>
243 <a href="#french" title="French">Français</a>
244 <a href="#italian" title="Italian">Italiano</a>
245 </div>
0515eeec 246 </div>
ab78acc6
IC
247 </div>
248 <div class="form-group">
1102f201 249 <label for="phrase" class="col-sm-2 control-label">BIP39 Mnemonic</label>
ab78acc6 250 <div class="col-sm-10">
e00964cc 251 <textarea id="phrase" class="phrase form-control" data-show-qr></textarea>
ab78acc6
IC
252 </div>
253 </div>
254 <div class="form-group">
1102f201 255 <label for="passphrase" class="col-sm-2 control-label">BIP39 Passphrase (optional)</label>
ab78acc6
IC
256 <div class="col-sm-10">
257 <textarea id="passphrase" class="passphrase form-control"></textarea>
258 </div>
259 </div>
73161a92 260 <div class="form-group">
1102f201 261 <label for="seed" class="col-sm-2 control-label">BIP39 Seed</label>
73161a92 262 <div class="col-sm-10">
e00964cc 263 <textarea id="seed" class="seed form-control" readonly="readonly" data-show-qr></textarea>
73161a92
IC
264 </div>
265 </div>
ab78acc6 266 <div class="form-group">
1102f201 267 <label for="network-phrase" class="col-sm-2 control-label">Coin</label>
ab78acc6
IC
268 <div class="col-sm-10">
269 <select id="network-phrase" class="network form-control">
270 <!-- populated by javascript -->
271 </select>
272 </div>
273 </div>
274 <div class="form-group">
1102f201 275 <label for="root-key" class="col-sm-2 control-label">BIP32 Root Key</label>
ab78acc6 276 <div class="col-sm-10">
e00964cc 277 <textarea id="root-key" class="root-key form-control" data-show-qr></textarea>
ab78acc6
IC
278 </div>
279 </div>
8d18f379 280 <div class="form-group litecoin-ltub-container hidden">
1102f201 281 <label for="litecoin-use-ltub" class="col-sm-2 control-label">Prefixes</label>
8d18f379
IC
282 <div class="col-sm-10 checkbox">
283 <label>
284 <input type="checkbox" id="litecoin-use-ltub" class="litecoin-use-ltub">
285 Use <code>Ltpv / Ltub</code> instead of <code>xprv / xpub</code>
286 </label>
287 </div>
288 </div>
ab78acc6
IC
289 </form>
290 </div>
291 </div>
3af2954a 292
ab78acc6 293 <hr>
3af2954a 294
ab78acc6
IC
295 <div class="row">
296 <div class="col-md-12">
297 <h2>Derivation Path</h2>
298 <ul class="derivation-type nav nav-tabs" role="tablist">
9987f0c1
IC
299 <li id="bip32-tab">
300 <a href="#bip32" role="tab" data-toggle="tab">BIP32</a>
301 </li>
d5dc92fd 302 <li id="bip44-tab" class="active">
ab78acc6
IC
303 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a>
304 </li>
9987f0c1
IC
305 <li id="bip49-tab">
306 <a href="#bip49" role="tab" data-toggle="tab">BIP49</a>
ab78acc6
IC
307 </li>
308 </ul>
309 <div class="derivation-type tab-content">
d5dc92fd 310 <div id="bip44" class="tab-pane active">
ab78acc6
IC
311 <form class="form-horizontal" role="form">
312 <br>
313 <div class="col-sm-2"></div>
314 <div class="col-sm-10">
1102f201 315 <p>
ea87f1d3
IC
316 For more info see the
317 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a>.
318 </p>
ab78acc6
IC
319 </div>
320 <div class="form-group">
321 <label for="purpose" class="col-sm-2 control-label">
1102f201 322 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
ab78acc6
IC
323 </label>
324 <div class="col-sm-10">
9987f0c1 325 <input id="purpose" type="text" class="purpose form-control" value="44" readonly>
ab78acc6
IC
326 </div>
327 </div>
328 <div class="form-group">
329 <label for="coin" class="col-sm-2 control-label">
1102f201 330 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
ab78acc6
IC
331 </label>
332 <div class="col-sm-10">
9987f0c1 333 <input id="coin" type="text" class="coin form-control" value="0" readonly>
ab78acc6
IC
334 </div>
335 </div>
336 <div class="form-group">
337 <label for="account" class="col-sm-2 control-label">
1102f201 338 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
ab78acc6
IC
339 </label>
340 <div class="col-sm-10">
341 <input id="account" type="text" class="account form-control" value="0">
342 </div>
343 </div>
344 <div class="form-group">
345 <label for="change" class="col-sm-2 control-label">
1102f201 346 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
ab78acc6
IC
347 </label>
348 <div class="col-sm-10">
349 <input id="change" type="text" class="change form-control" value="0">
350 </div>
351 </div>
20083ab9
IC
352 <div class="form-group">
353 <label class="col-sm-2 control-label">
354 </label>
355 <div class="col-sm-10">
1102f201 356 <p>The account extended keys can be used for importing to most BIP44 compatible wallets, such as mycelium or electrum.</p>
20083ab9
IC
357 </div>
358 </div>
359 <div class="form-group">
360 <label for="account-xprv" class="col-sm-2 control-label">
1102f201 361 <span>Account Extended Private Key</span>
20083ab9
IC
362 </label>
363 <div class="col-sm-10">
364 <textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
365 </div>
366 </div>
367 <div class="form-group">
368 <label for="account-xpub" class="col-sm-2 control-label">
1102f201 369 <span>Account Extended Public Key</span>
20083ab9
IC
370 </label>
371 <div class="col-sm-10">
372 <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
373 </div>
374 </div>
375 <div class="form-group">
376 <label class="col-sm-2 control-label">
377 </label>
378 <div class="col-sm-10">
1102f201 379 <p>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
20083ab9
IC
380 </div>
381 </div>
ab78acc6 382 <div class="form-group">
1102f201 383 <label for="bip44-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
ab78acc6
IC
384 <div class="col-sm-10">
385 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
386 </div>
387 </div>
388 </form>
389 </div>
390 <div id="bip32" class="tab-pane">
391 <form class="form-horizontal" role="form">
392 <br>
393 <div class="col-sm-2"></div>
394 <div class="col-sm-10">
1102f201 395 <p>
ea87f1d3
IC
396 For more info see the
397 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a>
398 </p>
ab78acc6 399 </div>
56530adc 400 <div class="form-group">
1102f201 401 <label for="bip32-client" class="col-sm-2 control-label">Client</label>
56530adc
IC
402 <div class="col-sm-10">
403 <select id="bip32-client" class="client form-control">
404 <option value="custom">Custom derivation path</option>
405 <!-- populated by javascript -->
406 </select>
407 </div>
408 </div>
ab78acc6 409 <div class="form-group">
1102f201 410 <label for="bip32-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
ab78acc6
IC
411 <div class="col-sm-10">
412 <input id="bip32-path" type="text" class="path form-control" value="m/0">
413 </div>
414 </div>
1975bfbc
IC
415 <div class="form-group">
416 <div class="col-sm-2"></div>
417 <label class="col-sm-10">
418 <input class="hardened-addresses" type="checkbox">
1102f201 419 <span>Use hardened addresses</span>
1975bfbc
IC
420 </label>
421 </div>
0a8d06d0
IC
422 <div class="form-group">
423 <div class="col-sm-2"></div>
424 <label class="col-sm-10">
425 <input class="p2wpkh-nested-in-p2sh" type="checkbox">
1102f201 426 <span>Use SegWit addresses (ie P2WPKH Nested In P2SH)</span>
0a8d06d0
IC
427 </label>
428 </div>
1975bfbc 429 <div class="form-group">
1102f201 430 <label for="core-path" class="col-sm-2 control-label">Bitcoin Core</label>
1975bfbc 431 <div class="col-sm-10">
1102f201 432 <p class="form-control no-border">
1975bfbc 433 Use path <code>m/0'/0'</code> with hardened addresses.
c866242d 434 </p>
1102f201 435 <p class="form-control no-border">
ea87f1d3
IC
436 For more info see the
437 <a href="https://github.com/bitcoin/bitcoin/pull/8035" target="_blank">Bitcoin Core BIP32 implementation</a>
1975bfbc
IC
438 </p>
439 </div>
440 </div>
56530adc 441 <div class="form-group">
1102f201 442 <label for="core-path" class="col-sm-2 control-label">Multibit</label>
56530adc
IC
443 <div class="col-sm-10">
444 <p class="form-control no-border">
1102f201 445 <span>Use path <code>m/0'/0</code>.</span>
56530adc
IC
446 </p>
447 <p class="form-control no-border">
1102f201 448 <span>For more info see</span>
56530adc
IC
449 <a href="https://multibit.org/" target="_blank">MultiBit HD</a>
450 </p>
451 </div>
452 </div>
aa51da11 453 <div class="form-group">
1102f201 454 <label class="col-sm-2 control-label">Block Explorers</label>
aa51da11
IC
455 <div class="col-sm-10">
456 <p class="form-control no-border">
1102f201
IC
457 <span>Use path <code>m/44'/0'/0'</code>.</span>
458 <span>Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xprv</code> key.</span>
c866242d
IC
459 </p>
460 <p class="form-control no-border">
1102f201 461 <span>Can be used with</span>:
ea87f1d3 462 <a href="https://blockchain.info/" target="_blank">blockchain.info</a>
aa51da11
IC
463 </p>
464 </div>
465 </div>
ab78acc6
IC
466 </form>
467 </div>
9987f0c1
IC
468 <div id="bip49" class="tab-pane">
469 <form class="form-horizontal" role="form">
470 <br>
471 <div class="unavailable hidden">
472 <div class="form-group">
473 <div class="col-sm-2"></div>
474 <div class="col-sm-10">
1102f201 475 <p>BIP49 is unavailable for this coin.</p>
9987f0c1
IC
476 </div>
477 </div>
478 </div>
479 <div class="available">
480 <div class="col-sm-2"></div>
481 <div class="col-sm-10">
1102f201 482 <p>
9987f0c1
IC
483 For more info see the
484 <a href="https://github.com/bitcoin/bips/blob/master/bip-0049.mediawiki" target="_blank">BIP49 spec</a>.
485 </p>
486 </div>
487 <div class="form-group">
488 <label for="purpose" class="col-sm-2 control-label">
1102f201 489 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
9987f0c1
IC
490 </label>
491 <div class="col-sm-10">
492 <input id="purpose" type="text" class="purpose form-control" value="49" readonly>
493 </div>
494 </div>
495 <div class="form-group">
496 <label for="coin" class="col-sm-2 control-label">
1102f201 497 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
9987f0c1
IC
498 </label>
499 <div class="col-sm-10">
500 <input id="coin" type="text" class="coin form-control" value="0" readonly>
501 </div>
502 </div>
503 <div class="form-group">
504 <label for="account" class="col-sm-2 control-label">
1102f201 505 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
9987f0c1
IC
506 </label>
507 <div class="col-sm-10">
508 <input id="account" type="text" class="account form-control" value="0">
509 </div>
510 </div>
511 <div class="form-group">
512 <label for="change" class="col-sm-2 control-label">
1102f201 513 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
9987f0c1
IC
514 </label>
515 <div class="col-sm-10">
516 <input id="change" type="text" class="change form-control" value="0">
517 </div>
518 </div>
519 <div class="form-group">
520 <label class="col-sm-2 control-label">
521 </label>
522 <div class="col-sm-10">
1102f201 523 <p>The account extended keys can be used for importing to most BIP49 compatible wallets.</p>
9987f0c1
IC
524 </div>
525 </div>
526 <div class="form-group">
527 <label for="account-xprv" class="col-sm-2 control-label">
1102f201 528 <span>Account Extended Private Key</span>
9987f0c1
IC
529 </label>
530 <div class="col-sm-10">
531 <textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
532 </div>
533 </div>
534 <div class="form-group">
535 <label for="account-xpub" class="col-sm-2 control-label">
1102f201 536 <span>Account Extended Public Key</span>
9987f0c1
IC
537 </label>
538 <div class="col-sm-10">
539 <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
540 </div>
541 </div>
542 <div class="form-group">
543 <label class="col-sm-2 control-label">
544 </label>
545 <div class="col-sm-10">
1102f201 546 <p>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
9987f0c1
IC
547 </div>
548 </div>
549 <div class="form-group">
1102f201 550 <label for="bip49-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
9987f0c1
IC
551 <div class="col-sm-10">
552 <input id="bip49-path" type="text" class="path form-control" value="m/49'/0'/0'/0" readonly="readonly">
553 </div>
554 </div>
555 </div>
556 </form>
557 </div>
ab78acc6
IC
558 </div>
559 <form class="form-horizontal" role="form">
560 <div class="form-group">
1102f201 561 <label for="extended-priv-key" class="col-sm-2 control-label">BIP32 Extended Private Key</label>
ab78acc6 562 <div class="col-sm-10">
e00964cc 563 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly" data-show-qr></textarea>
ab78acc6
IC
564 </div>
565 </div>
566 <div class="form-group">
1102f201 567 <label for="extended-pub-key" class="col-sm-2 control-label">BIP32 Extended Public Key</label>
ab78acc6 568 <div class="col-sm-10">
e00964cc 569 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly" data-show-qr></textarea>
ab78acc6
IC
570 </div>
571 </div>
572 </form>
573 </div>
574 </div>
3af2954a 575
ab78acc6 576 <hr>
3af2954a 577
ab78acc6
IC
578 <div class="row">
579 <div class="col-md-12">
580 <h2>Derived Addresses</h2>
1102f201 581 <p>Note these addreses are derived from the BIP32 Extended Key</p>
0f6b34d6
IC
582 </div>
583 <div class="col-md-12 use-bitpay-addresses-container hidden">
584 <div class="checkbox">
585 <label>
586 <input type="checkbox" class="use-bitpay-addresses">
587 <span>Use BitPay-style addresses for Bitcoin Cash (ie starting with 'C' instead of '1')</span>
588 </label>
589 </div>
590 </div>
591 <div class="col-md-12">
ab78acc6
IC
592 <table class="table table-striped">
593 <thead>
594 <th>
595 <div class="input-group">
1102f201
IC
596 <span>Path</span>&nbsp;&nbsp;
597 <button class="index-toggle">Toggle</button>
ab78acc6
IC
598 </div>
599 </th>
600 <th>
601 <div class="input-group">
1102f201
IC
602 <span>Address</span>&nbsp;&nbsp;
603 <button class="address-toggle">Toggle</button>
ab78acc6
IC
604 </div>
605 </th>
1b12b2f5
IC
606 <th>
607 <div class="input-group">
1102f201
IC
608 <span>Public Key</span>&nbsp;&nbsp;
609 <button class="public-key-toggle">Toggle</button>
1b12b2f5
IC
610 </div>
611 </th>
ab78acc6
IC
612 <th>
613 <div class="input-group">
1102f201
IC
614 <span>Private Key</span>&nbsp;&nbsp;
615 <button class="private-key-toggle">Toggle</button>
ab78acc6
IC
616 </div>
617 </th>
618 </thead>
d737abf6 619 <tbody class="addresses monospace">
c866242d
IC
620 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
621 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
622 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
623 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
624 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
ab78acc6
IC
625 </tbody>
626 </table>
627 </div>
628 </div>
1102f201 629 <span>Show more rows</span>:
ab78acc6 630 <input type="number" class="rows-to-add" value="20">
1102f201 631 <button class="more">Show</button>
3af2954a 632
ab78acc6 633 <hr>
3af2954a 634
ab78acc6
IC
635 <div class="row">
636 <div class="col-md-12">
1102f201
IC
637 <h2>More info</h2>
638 <h3>BIP39 <span class="small">Mnemonic code for generating deterministic keys</span></h3>
639 <p>
ab78acc6
IC
640 Read more at the
641 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
642 </p>
1102f201
IC
643 <h3>BIP32 <span class="small">Hierarchical Deterministic Wallets</span></h3>
644 <p>
ab78acc6
IC
645 Read more at the
646 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
ea87f1d3 647 </p>
1102f201 648 <p>
ea87f1d3 649 See the demo at
ab78acc6
IC
650 <a href="http://bip32.org/" target="_blank">bip32.org</a>
651 </p>
1102f201
IC
652 <h3>BIP44 <span class="small">Multi-Account Hierarchy for Deterministic Wallets</span></h3>
653 <p>
ab78acc6
IC
654 Read more at the
655 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
656 </p>
1102f201
IC
657 <h3>BIP49 <span class="small">Derivation scheme for P2WPKH-nested-in-P2SH based accounts</span></h3>
658 <p>
861750ae
JC
659 Read more at the
660 <a href="https://github.com/bitcoin/bips/blob/master/bip-0049.mediawiki" target="_blank">official BIP49 spec</a>
661 </p>
1102f201 662 <h3>Private Keys</h3>
ab78acc6 663 <p>
1102f201 664 <span>
ea87f1d3
IC
665 Use private keys at
666 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>.
667 </span>
1102f201 668 <span>Be careful - it can be easy to make mistakes if you don't know what you're doing.</span>
ab78acc6 669 </p>
1102f201 670 <h3 id="entropy-notes">Entropy</h3>
c6624d51 671 <p>
1102f201 672 <span>
ea87f1d3
IC
673 Entropy values must be sourced from a
674 <a href="https://en.wikipedia.org/wiki/Random_number_generation" target="_blank">strong source of randomness</a>.
675 </span>
1102f201
IC
676 <span>This means flipping a fair coin, rolling a fair dice, noise measurements etc.</span>
677 <span>
ea87f1d3
IC
678 Do <strong>NOT</strong> use phrases from books, lyrics from songs, your birthday or steet address,
679 keyboard mashing, or anything you <i>think</i> is random, because chances are overwhelming it isn't
680 random enough for the needs of this tool.
681 </span>
c6624d51 682 </p>
434caecd 683 <p>
1102f201 684 <strong><span>Do not store entropy.</span></strong>
434caecd
IC
685 </p>
686 <p>
1102f201
IC
687 <span>Storing entropy (such as keeping a deck of cards in a specific shuffled order) is unreliable compared to storing a mnemonic.</span>
688 <span>Instead of storing entropy, store the mnemonic generated from the entropy.</span>
689 <span><a href="https://en.wikipedia.org/wiki/Steganography#Physical" target="_blank">Steganography</a> may be beneficial when storing the mnemonic.</span>
434caecd 690 </p>
c6624d51 691 <p>
1102f201 692 <span>
ea87f1d3
IC
693 The random mnemonic generator on this page uses a
694 <a href="https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues" target="_blank">cryptographically secure random number generator</a>.
695 </span>
1102f201
IC
696 <span>The built in random generator can generally be trusted more than your own intuition about randomness.</span>
697 <span>If cryptographic randomness isn't available in your browser, this page will show a warning and the generate button will not work.</span>
698 <span>In that case you might choose to use your own source of entropy.</span>
c6624d51
IC
699 </p>
700 <p>
1102f201 701 <a href="https://bitcointalk.org/index.php?topic=311000.msg3345309#msg3345309" target="_blank">You are not a good source of entropy.</a>
c6624d51 702 </p>
1102f201 703 <h3>License</h3>
52da415f 704 <p>
1102f201 705 <span>Please refer to <a href="https://github.com/iancoleman/bip39/blob/master/LICENSE" target="_blank">the software license</a> for more detail.
52da415f
IC
706 </span>
707 </p>
1102f201
IC
708 <p>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>
709 </div>
710 </div>
711
712 <hr>
713
714 <div class="row">
715 <div class="col-md-12">
716 <h2>Alternative Tools</h2>
717 <p>This tool is interoperable with any BIP39 wallet.</p>
718 <p>Some similar tools to this one (ie not consumer wallets) are</p>
719 <p>
720 <a href="https://bip32jp.github.io/english/">
721 https://bip32jp.github.io/english/
722 </a>
723 </p>
ab78acc6
IC
724 </div>
725 </div>
3af2954a 726
ab78acc6 727 <hr>
3af2954a 728
ab78acc6
IC
729 <div class="row">
730 <div class="col-md-12">
3af2954a 731
1102f201 732 <h2>Offline Usage</h2>
3af2954a 733
1102f201 734 <p>
ab78acc6
IC
735 You can use this tool without having to be online.
736 </p>
1102f201 737 <p>
ab78acc6
IC
738 In your browser, select file save-as, and save this page
739 as a file.
740 </p>
1102f201 741 <p>
ab78acc6
IC
742 Double-click that file to open it in a browser
743 on any offline computer.
744 </p>
745 <p>
1102f201 746 <span>Alternatively, download the file from the repository</span>
ea87f1d3
IC
747 -
748 <a href="https://github.com/iancoleman/bip39">https://github.com/iancoleman/bip39</a>
749 </p>
3af2954a 750
ab78acc6
IC
751 </div>
752 </div>
3af2954a 753
ab78acc6 754 <hr>
3af2954a 755
ab78acc6
IC
756 <div class="row">
757 <div class="col-md-12">
3af2954a 758
1102f201 759 <h2>This project is 100% open-source code</h2>
3af2954a 760
ab78acc6 761 <p>
1102f201 762 <span>Get the source code from the repository</span>
ea87f1d3 763 -
b630f83d
IC
764 <a href="https://github.com/iancoleman/bip39" target="_blank">
765 https://github.com/iancoleman/bip39
ab78acc6
IC
766 </a>
767 </p>
3af2954a 768
1102f201 769 <h3>Libraries</h3>
3af2954a 770
ab78acc6
IC
771 <p>
772 <span>BitcoinJS - </span>
773 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
774 https://github.com/bitcoinjs/bitcoinjs-lib
775 </a>
776 </p>
3af2954a 777
ab78acc6
IC
778 <p>
779 <span>jsBIP39 - </span>
780 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
781 https://github.com/iancoleman/jsbip39
782 </a>
783 </p>
3af2954a 784
ab78acc6
IC
785 <p>
786 <span>sjcl - </span>
787 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
788 https://github.com/bitwiseshiftleft/sjcl
789 </a>
790 </p>
3af2954a 791
ab78acc6
IC
792 <p>
793 <span>jQuery - </span>
794 <a href="https://jquery.com/" target="_blank">
795 https://jquery.com/
796 </a>
797 </p>
3af2954a 798
ab78acc6
IC
799 <p>
800 <span>Twitter Bootstrap - </span>
801 <a href="http://getbootstrap.com/" target="_blank">
802 http://getbootstrap.com/
803 </a>
804 </p>
3af2954a 805
ab78acc6
IC
806 </div>
807 </div>
3af2954a 808
ab78acc6 809 </div>
3af2954a 810
e00964cc 811 <div class="qr-container hidden">
1102f201
IC
812 <div class="qr-hint bg-primary hidden">Click field to hide QR</div>
813 <div class="qr-hint bg-primary">Click field to show QR</div>
52da415f
IC
814 <div class="qr-hider hidden">
815 <div class="qr-image"></div>
1102f201 816 <div class="qr-warning bg-primary">Caution: Scanner may keep history</div>
52da415f 817 </div>
e00964cc
IC
818 </div>
819
ab78acc6
IC
820 <div class="feedback-container">
821 <div class="feedback">Loading...</div>
822 </div>
3af2954a 823
ab78acc6
IC
824 <script type="text/template" id="address-row-template">
825 <tr>
826 <td class="index"><span></span></td>
e00964cc
IC
827 <td class="address"><span data-show-qr></span></td>
828 <td class="pubkey"><span data-show-qr></span></td>
829 <td class="privkey"><span data-show-qr></span></td>
ab78acc6
IC
830 </tr>
831 </script>
8b095871
IC
832 <script>// From
833// https://raw.githubusercontent.com/inexorabletash/polyfill/a6bc6ced78160c994f76a909b6ff6bbbab3d43de/es6.js
834// Required for ethereumjs-utils.js when run in phantomjs-2.1.1
835// but is not required in any modern browsers.
836// For more information, see
837// https://www.bountysource.com/issues/38485709-error-rendering-plot-with-phantomjs
838
839//----------------------------------------------------------------------
840//
841// ECMAScript 2015 Polyfills
842//
843//----------------------------------------------------------------------
563e401a 844
8b095871
IC
845(function (global) {
846 "use strict";
847
848 // Set this to always override native implementations, for testing
849 // the polyfill in browsers with partial/full ES2015 support.
850 var OVERRIDE_NATIVE_FOR_TESTING = false;
851
852 var undefined = (void 0); // Paranoia
853
854 // Helpers
855
856 function strict(o) {
857 return o === global ? undefined : o;
858 }
859
860 function hook(o, p, f) {
861 var op = o[p];
862 console.assert(typeof op === 'function', 'Hooking a non-function');
863 o[p] = function() {
864 var o = strict(this);
865 var r = f.apply(o, arguments);
866 return r !== undefined ? r : op.apply(o, arguments);
867 };
868 }
869
870 function isSymbol(s) {
871 return (typeof s === 'symbol') || ('Symbol' in global && s instanceof global.Symbol);
872 }
873
874 function getPropertyDescriptor(target, name) {
875 var desc = Object.getOwnPropertyDescriptor(target, name);
876 var proto = Object.getPrototypeOf(target);
877 while (!desc && proto) {
878 desc = Object.getOwnPropertyDescriptor(proto, name);
879 proto = Object.getPrototypeOf(proto);
563e401a 880 }
8b095871
IC
881 return desc;
882 }
563e401a 883
8b095871
IC
884 var enqueue = (function(nativePromise, nativeSetImmediate) {
885 if (nativePromise)
886 return function(job) { nativePromise.resolve().then(function() { job(); }); };
887 if (nativeSetImmediate)
888 return function(job) { nativeSetImmediate(job); };
889 return function(job) { setTimeout(job, 0); };
890 }(global['Promise'], global['setImmediate']));
563e401a 891
8b095871
IC
892 function define(o, p, v, override) {
893 if (p in o && !override && !OVERRIDE_NATIVE_FOR_TESTING)
894 return;
895
896 if (typeof v === 'function') {
897 // Sanity check that functions are appropriately named (where possible)
898 console.assert(isSymbol(p) || !('name' in v) || v.name === p || v.name === p + '_', 'Expected function name "' + p.toString() + '", was "' + v.name + '"');
899 Object.defineProperty(o, p, {
900 value: v,
901 configurable: true,
902 enumerable: false,
903 writable: true
904 });
563e401a 905 } else {
8b095871
IC
906 Object.defineProperty(o, p, {
907 value: v,
908 configurable: false,
909 enumerable: false,
910 writable: false
911 });
563e401a 912 }
8b095871 913 }
563e401a 914
8b095871
IC
915 function set_internal(o, p, v) {
916 Object.defineProperty(o, p, {
917 value: v,
918 configurable: false,
919 enumerable: false,
920 writable: true
921 });
922 }
563e401a 923
8b095871
IC
924 // Snapshot intrinsic functions
925 var $isNaN = global.isNaN,
926 $parseInt = global.parseInt,
927 $parseFloat = global.parseFloat;
928
929 var E = Math.E,
930 LOG10E = Math.LOG10E,
931 LOG2E = Math.LOG2E,
932 abs = Math.abs,
933 ceil = Math.ceil,
934 exp = Math.exp,
935 floor = Math.floor,
936 log = Math.log,
937 max = Math.max,
938 min = Math.min,
939 pow = Math.pow,
940 random = Math.random,
941 sqrt = Math.sqrt;
942
943 var orig_match = String.prototype.match,
944 orig_replace = String.prototype.replace,
945 orig_search = String.prototype.search,
946 orig_split = String.prototype.split;
947
948 // These are used for implementing the polyfills, but not exported.
949
950 // Inspired by https://gist.github.com/1638059
951 /** @constructor */
952 function EphemeronTable() {
953 var secretKey = ObjectCreate(null);
954
955 function conceal(o) {
956 var oValueOf = o.valueOf, secrets = ObjectCreate(null);
957 Object.defineProperty(o, 'valueOf', {
958 value: (function(secretKey) {
959 return function (k) {
960 return (k === secretKey) ? secrets : oValueOf.apply(o, arguments);
961 };
962 }(secretKey)),
963 configurable: true,
964 writeable: true,
965 enumerable: false
966 });
967 return secrets;
968 }
563e401a 969
8b095871
IC
970 function reveal(o) {
971 var v = typeof o.valueOf === 'function' && o.valueOf(secretKey);
972 return v === o ? null : v;
973 }
974
975 return {
976 clear: function() {
977 secretKey = ObjectCreate(null);
978 },
979 remove: function(key) {
980 var secrets = reveal(key);
981 if (secrets && HasOwnProperty(secrets, 'value')) {
982 delete secrets.value;
983 return true;
984 }
985 return false;
986 },
987 get: function(key, defaultValue) {
988 var secrets = reveal(key);
989 return (secrets && HasOwnProperty(secrets, 'value')) ? secrets.value : defaultValue;
990 },
991 has: function(key) {
992 var secrets = reveal(key);
993 return Boolean(secrets && HasOwnProperty(secrets, 'value'));
994 },
995 set: function(key, value) {
996 var secrets = reveal(key) || conceal(key);
997 secrets.value = value;
563e401a 998 }
8b095871
IC
999 };
1000 }
563e401a 1001
8b095871 1002 var empty = Object.create(null);
563e401a 1003
8b095871
IC
1004 //----------------------------------------------------------------------
1005 //
1006 // ECMAScript 2015
1007 // http://www.ecma-international.org/ecma-262/6.0/
1008 //
1009 //----------------------------------------------------------------------
563e401a 1010
8b095871
IC
1011 // ---------------------------------------
1012 // 19.4 Symbol Objects
1013 // ---------------------------------------
563e401a 1014
8b095871
IC
1015 // NOTE: Symbols are defined here - out of spec order - since we need the
1016 // properties and prototype to be populated for other polyfills.
563e401a 1017
8b095871 1018 // NOTE: Not secure, nor is obj[$$symbol] hidden from Object.keys()
563e401a 1019
8b095871
IC
1020 var symbolForKey;
1021 (function() {
1022 var secret = Object.create(null);
1023 var symbolMap = {};
1024 symbolForKey = function(k) {
1025 return symbolMap[k];
1026 };
563e401a 1027
8b095871 1028 var GlobalSymbolRegistry = [];
563e401a 1029
8b095871
IC
1030 function unique(bits) {
1031 return Array(bits + 1).join('x').replace(/x/g, function() {
1032 return random() < 0.5 ? '\u200C' : '\u200D'; // JWNJ / ZWJ
1033 });
1034 }
563e401a 1035
8b095871
IC
1036 // 19.4.1 The Symbol Constructor
1037 // 19.4.1.1 Symbol ( description=undefined )
1038 function Symbol(description) {
1039 if (!(this instanceof Symbol)) return new Symbol(description, secret);
1040 if (this instanceof Symbol && arguments[1] !== secret) throw TypeError();
563e401a 1041
8b095871
IC
1042 var descString = description === undefined ? undefined : String(description);
1043
1044 set_internal(this, '[[SymbolData]]', unique(128));
1045 set_internal(this, '[[Description]]', descString);
1046
1047 symbolMap[this] = this;
1048 return this;
1049 }
1050
1051 if (!('Symbol' in global) || OVERRIDE_NATIVE_FOR_TESTING)
1052 global.Symbol = Symbol;
1053
1054 // 19.4.2 Properties of the Symbol Constructor
1055
1056 // 19.4.2.1 Symbol.for (key)
1057 define(Symbol, 'for', function for_(key) {
1058 var stringKey = String(key);
1059 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
1060 var e = GlobalSymbolRegistry[i];
1061 if (SameValue(e['[[key]]'], stringKey)) return e['[[symbol]]'];
563e401a 1062 }
8b095871
IC
1063 var newSymbol = Symbol(key);
1064 GlobalSymbolRegistry.push({'[[key]]': stringKey, '[[symbol]]': newSymbol});
1065 return newSymbol;
1066 });
563e401a 1067
8b095871
IC
1068 // 19.4.2.2 Symbol.hasInstance
1069 // 19.4.2.3 Symbol.isConcatSpreadable
563e401a 1070
8b095871
IC
1071 // 19.4.2.4 Symbol.iterator
1072 define(global.Symbol, 'iterator', global.Symbol('Symbol.iterator'));
563e401a 1073
8b095871
IC
1074 // 19.4.2.5 Symbol.keyFor (sym)
1075 define(Symbol, 'keyFor', function keyFor(sym) {
1076 if (!(sym instanceof Symbol)) throw TypeError();
1077 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
1078 var e = GlobalSymbolRegistry[i];
1079 if (SameValue(e['[[symbol]]'], sym)) return e['[[key]]'];
1080 }
1081 return undefined;
1082 });
563e401a 1083
8b095871
IC
1084 // 19.4.2.6 Symbol.match
1085 define(global.Symbol, 'match', global.Symbol('Symbol.match'));
563e401a 1086
8b095871 1087 // 19.4.2.7 Symbol.prototype
563e401a 1088
8b095871
IC
1089 // 19.4.2.8 Symbol.replace
1090 define(global.Symbol, 'replace', global.Symbol('Symbol.replace'));
563e401a 1091
8b095871
IC
1092 // 19.4.2.9 Symbol.search
1093 define(global.Symbol, 'search', global.Symbol('Symbol.search'));
563e401a 1094
8b095871 1095 // 19.4.2.10 Symbol.species
563e401a 1096
8b095871
IC
1097 // 19.4.2.11 Symbol.search
1098 define(global.Symbol, 'split', global.Symbol('Symbol.split'));
563e401a 1099
8b095871 1100 // 19.4.2.12 Symbol.toPrimitive
563e401a 1101
8b095871
IC
1102 // 19.4.2.13 Symbol.toStringTag
1103 define(global.Symbol, 'toStringTag', global.Symbol('Symbol.toStringTag'));
1104
1105 // 19.4.2.14 Symbol.unscopables
1106
1107 // 19.4.3 Properties of the Symbol Prototype Object
1108 // 19.4.3.1 Symbol.prototype.constructor
1109
1110 // 19.4.3.2 Symbol.prototype.toString ( )
1111 Object.defineProperty(Symbol.prototype, 'toString', {
1112 value: function toString() {
1113 var s = strict(this);
1114 var desc = s['[[Description]]'];
1115 return 'Symbol(' + (desc === undefined ? '' : desc) + s['[[SymbolData]]'] + ')';
1116 },
1117 configurable: true, writeable: true, enumerable: false });
1118
1119 // 19.4.3.3 Symbol.prototype.valueOf ( )
1120 Object.defineProperty(Symbol.prototype, 'valueOf', {
1121 value: function valueOf() {
1122 // To prevent automatic string conversion:
1123 throw TypeError();
1124
1125 // Spec has approximately the following:
1126 //var s = strict(this);
1127 //if (Type(s) === 'symbol') return s;
1128 //if (Type(s) !== 'object') throw TypeError();
1129 //if (!('[[SymbolData]]' in s)) throw TypeError();
1130 //return s['[[SymbolData]]'];
1131 },
1132 configurable: true, writeable: true, enumerable: false });
1133
1134 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
1135 // (Done later to polyfill partial implementations)
1136
1137 // 19.4.4 Properties of Symbol Instances
1138 }());
1139
1140 console.assert(typeof global.Symbol() === 'symbol' || symbolForKey(String(global.Symbol('x'))));
1141
1142 // Defined here so that other prototypes can reference it
1143 // 25.1.2 The %IteratorPrototype% Object
1144 var $IteratorPrototype$ = {};
1145
1146 //----------------------------------------
1147 // 6 ECMAScript Data Types and Values
1148 //----------------------------------------
1149
1150 // 6.1 ECMAScript Language Types
1151
1152 // "Type(x)" is used as shorthand for "the type of x"...
1153 function Type(v) {
1154 switch (typeof v) {
1155 case 'undefined': return 'undefined';
1156 case 'boolean': return 'boolean';
1157 case 'number': return 'number';
1158 case 'string': return 'string';
1159 case 'symbol': return 'symbol';
1160 default:
1161 if (v === null) return 'null';
1162 if (v instanceof global.Symbol) return 'symbol';
1163 return 'object';
563e401a 1164 }
8b095871 1165 }
563e401a 1166
8b095871
IC
1167 // 6.1.5.1 Well-Known Symbols
1168 var $$iterator = global.Symbol.iterator,
1169 $$match = global.Symbol.match,
1170 $$replace = global.Symbol.replace,
1171 $$search = global.Symbol.search,
1172 $$split = global.Symbol.split,
1173 $$toStringTag = global.Symbol.toStringTag;
563e401a 1174
8b095871
IC
1175 //----------------------------------------
1176 // 7 Abstract Operations
1177 //----------------------------------------
1178
1179 //----------------------------------------
1180 // 7.1 Type Conversion
1181 //----------------------------------------
1182
1183 // 7.1.1 ToPrimitive ( input [, PreferredType] )
1184 // just use valueOf()
1185
1186 // 7.1.2 ToBoolean ( argument )
1187 // just use Boolean()
1188
1189 // 7.1.3 ToNumber ( argument )
1190 // just use Number()
1191
1192 // 7.1.4 ToInteger ( argument )
1193 function ToInteger(n) {
1194 n = Number(n);
1195 if ($isNaN(n)) return 0;
1196 if (n === 0 || n === Infinity || n === -Infinity) return n;
1197 return ((n < 0) ? -1 : 1) * floor(abs(n));
563e401a 1198 }
8b095871
IC
1199
1200 // 7.1.5 ToInt32 ( argument )
1201 function ToInt32(v) { return v >> 0; }
1202
1203 // 7.1.6 ToUint32 ( argument )
1204 function ToUint32(v) { return v >>> 0; }
1205
1206 // 7.1.7 ToInt16 ( argument )
1207 function ToInt16(v) { return (v << 16) >> 16; }
1208
1209 // 7.1.8 ToUint16 ( argument )
1210 function ToUint16(v) { return v & 0xFFFF; }
1211
1212 // 7.1.9 ToInt8 ( argument )
1213 function ToInt8(v) { return (v << 24) >> 24; }
1214
1215 // 7.1.10 ToUint8 ( argument )
1216 function ToUint8(v) { return v & 0xFF; }
1217
1218 // 7.1.11 ToUint8Clamp ( argument )
1219 function ToUint8Clamp(argument) {
1220 var number = Number(argument);
1221 if ($isNaN(number)) return 0;
1222 if (number <= 0) return 0;
1223 if (number >= 255) return 255;
1224 var f = floor(number);
1225 if ((f + 0.5) < number) return f + 1;
1226 if (number < (f + 0.5)) return f;
1227 if (f % 2) return f + 1;
1228 return f;
563e401a 1229 }
8b095871
IC
1230
1231 // 7.1.12 ToString ( argument )
1232 // just use String()
1233
1234 // 7.1.13 ToObject ( argument )
1235 function ToObject(v) {
1236 if (v === null || v === undefined) throw TypeError();
1237 return Object(v);
563e401a 1238 }
563e401a 1239
8b095871
IC
1240 // 7.1.14 ToPropertyKey ( argument )
1241 function ToPropertyKey(v) {
1242 return String(v);
1243 }
3af2954a 1244
8b095871
IC
1245 // 7.1.15 ToLength ( argument )
1246 function ToLength(v) {
1247 var len = ToInteger(v);
1248 if (len <= 0) return 0;
1249 if (len === Infinity) return 0x20000000000000 - 1; // 2^53-1
1250 return min(len, 0x20000000000000 - 1); // 2^53-1
ab78acc6 1251 }
3af2954a 1252
8b095871 1253 // 7.1.16 CanonicalNumericIndexString ( argument )
3af2954a 1254
8b095871
IC
1255 //----------------------------------------
1256 // 7.2 Testing and Comparison Operations
1257 //----------------------------------------
3af2954a 1258
8b095871
IC
1259 // 7.2.1 RequireObjectCoercible ( argument )
1260 // 7.2.2 IsArray ( argument )
3af2954a 1261
8b095871
IC
1262 // 7.2.3 IsCallable ( argument )
1263 function IsCallable(o) { return typeof o === 'function'; }
3af2954a 1264
8b095871
IC
1265 // 7.2.4 IsConstructor ( argument )
1266 function IsConstructor(o) {
1267 // Hacks for Safari 7 TypedArray XXXConstructor objects
1268 if (/Constructor/.test(Object.prototype.toString.call(o))) return true;
1269 if (/Function/.test(Object.prototype.toString.call(o))) return true;
1270 // TODO: Can this be improved on?
1271 return typeof o === 'function';
3af2954a 1272 }
8b095871
IC
1273
1274 // 7.2.5 IsExtensible (O)
1275 // 7.2.6 IsInteger ( argument )
1276
1277 // 7.2.7 IsPropertyKey ( argument )
1278 function IsPropertyKey(argument) {
1279 if (Type(argument) === 'string') return true;
1280 if (Type(argument) === 'symbol') return true;
1281 return false;
3af2954a
IC
1282 }
1283
8b095871
IC
1284 // 7.2.8 IsRegExp ( argument )
1285 // 7.2.5 IsConstructor ( argument )
3af2954a 1286
8b095871
IC
1287 // 7.2.9 SameValue(x, y)
1288 function SameValue(x, y) {
1289 if (typeof x !== typeof y) return false;
1290 switch (typeof x) {
1291 case 'undefined':
1292 return true;
1293 case 'number':
1294 if (x !== x && y !== y) return true;
1295 if (x === 0 && y === 0) return 1/x === 1/y;
1296 return x === y;
1297 case 'boolean':
1298 case 'string':
1299 case 'object':
1300 default:
1301 return x === y;
1302 }
1303 }
3af2954a 1304
8b095871
IC
1305 // 7.2.10 SameValueZero(x, y)
1306 function SameValueZero(x, y) {
1307 if (typeof x !== typeof y) return false;
1308 switch (typeof x) {
1309 case 'undefined':
1310 return true;
1311 case 'number':
1312 if (x !== x && y !== y) return true;
1313 return x === y;
1314 case 'boolean':
1315 case 'string':
1316 case 'object':
1317 default:
1318 return x === y;
1319 }
1320 }
3af2954a 1321
8b095871
IC
1322 //----------------------------------------
1323 // 7.3 Operations on Objects
1324 //----------------------------------------
3af2954a 1325
8b095871
IC
1326 // 7.3.1 Get (O, P)
1327 // - just use o.p or o[p]
3af2954a 1328
8b095871
IC
1329 // 7.3.2 GetV (V, P)
1330 function GetV(v, p) {
1331 var o = ToObject(v);
1332 return o[p];
1333 }
3af2954a 1334
8b095871
IC
1335 // 7.3.3 Set (O, P, V, Throw)
1336 // - just use o.p = v or o[p] = v
3af2954a 1337
3af2954a 1338
3af2954a 1339
3af2954a 1340
8b095871
IC
1341 // 7.3.9 GetMethod (O, P)
1342 function GetMethod(o, p) {
1343 var func = GetV(o, p);
1344 if (func === undefined || func === null) return undefined;
1345 if (!IsCallable(func)) throw TypeError();
1346 return func;
ab78acc6 1347 }
8b095871
IC
1348
1349 // 7.3.10 HasProperty (O, P)
1350 function HasProperty(o, p) {
1351 while (o) {
1352 if (Object.prototype.hasOwnProperty.call(o, p)) return true;
1353 if (Type(o) !== 'object') return false;
1354 o = Object.getPrototypeOf(o);
ab78acc6 1355 }
8b095871 1356 return false;
ab78acc6 1357 }
8b095871
IC
1358
1359 // 7.3.11 HasOwnProperty (O, P)
1360 function HasOwnProperty(o, p) {
1361 return Object.prototype.hasOwnProperty.call(o, p);
ab78acc6 1362 }
3af2954a 1363
8b095871
IC
1364 //----------------------------------------
1365 // 7.4 Operations on Iterator Objects
1366 //----------------------------------------
3af2954a 1367
8b095871
IC
1368 // 7.4.1 GetIterator ( obj, method )
1369 function GetIterator(obj, method) {
1370 if (arguments.length < 2)
1371 method = GetMethod(obj, $$iterator);
1372 var iterator = method.call(obj);
1373 if (Type(iterator) !== 'object') throw TypeError();
1374 return iterator;
3af2954a
IC
1375 }
1376
8b095871
IC
1377 // 7.4.2 IteratorNext ( iterator, value )
1378 function IteratorNext(iterator, value) {
1379 if (arguments.length < 2)
1380 var result = iterator.next();
1381 else
1382 result = iterator.next(value);
1383 if (Type(result) !== 'object') throw TypeError();
1384 return result;
1385 }
3af2954a 1386
8b095871
IC
1387 // 7.4.3 IteratorComplete ( iterResult )
1388 function IteratorComplete(iterResult) {
1389 console.assert(Type(iterResult) === 'object');
1390 return Boolean(iterResult.done);
1391 }
3af2954a 1392
8b095871
IC
1393 // 7.4.4 IteratorValue ( iterResult )
1394 function IteratorValue(iterResult) {
1395 console.assert(Type(iterResult) === 'object');
1396 return iterResult.value;
1397 }
1398
1399 // 7.4.5 IteratorStep ( iterator )
1400 function IteratorStep( iterator, value ) {
1401 var result = IteratorNext(iterator, value);
1402 var done = result['done'];
1403 if (Boolean(done) === true) return false;
1404 return result;
1405 }
1406
1407 // 7.4.6 IteratorClose( iterator, completion )
1408 function IteratorClose( iterator, completion ) {
1409 console.assert(Type(iterator) === 'object');
1410 var _return = GetMethod(iterator, 'return');
1411 if (_return === undefined) return completion;
1412 try {
1413 var innerResult = _return[iterator]();
1414 } catch (result) {
1415 // TODO: If completion.[[type]] is throw, return completion
1416 return result;
1417 }
1418 if (Type(innerResult) !== 'object') throw TypeError();
1419 return completion;
1420 }
1421
1422 // 7.4.7 CreateIterResultObject (value, done)
1423 function CreateIterResultObject(value, done) {
1424 console.assert(Type(done) === 'boolean');
1425 var obj = {};
1426 obj["value"] = value;
1427 obj["done"] = done;
1428 return obj;
1429 }
1430
1431 // 7.4.8 CreateListIterator (list)
1432 // 7.4.8.1 ListIterator next( )
1433 // 7.4.9 CreateCompoundIterator ( iterator1, iterator2 )
1434 // 7.4.9.1 CompoundIterator next( )
1435
1436 //----------------------------------------
1437 // 8 Executable Code and Execution Contexts
1438 //----------------------------------------
1439
1440 //----------------------------------------
1441 // 8.4 Jobs and Job Queues
1442 //----------------------------------------
1443
1444 // 8.4.1 EnqueueJob ( queueName, job, arguments)
1445 function EnqueueJob(queueName, job, args) {
1446 var fn = function() { job.apply(undefined, args); };
1447 enqueue(fn);
1448 }
1449
1450 // 8.4.2 NextJob result
1451 function NextJob(result) {
1452 // no-op
1453 }
1454
1455 //----------------------------------------
1456 // 9 Ordinary and Exotic Objects Behaviors
1457 //----------------------------------------
1458
1459 // 9.1.11 [[Enumerate]] ()
1460 function Enumerate(obj) {
1461 var e = [];
1462 if (Object(obj) !== obj) return e;
1463 var visited = new Set;
1464 while (obj !== null) {
1465 Object.getOwnPropertyNames(obj).forEach(function(name) {
1466 if (!visited.has(name)) {
1467 var desc = Object.getOwnPropertyDescriptor(obj, name);
1468 if (desc) {
1469 visited.add(name);
1470 if (desc.enumerable) e.push(name);
1471 }
1472 }
1473 });
1474 obj = Object.getPrototypeOf(obj);
1475 }
1476 return e[$$iterator]();
1477 }
1478
1479 // 9.1.12 [[OwnPropertyKeys]] ( )
1480 function OwnPropertyKeys(o) {
1481 return Object.getOwnPropertyNames(o);
1482 }
1483
1484 // 9.1.13 ObjectCreate(proto, internalSlotsList)
1485 function ObjectCreate(proto, internalSlotsList) {
1486 return Object.create(proto, internalSlotsList);
1487 }
1488
1489 // ---------------------------------------
1490 // 19 Fundamental Objects
1491 // ---------------------------------------
1492
1493 // ---------------------------------------
1494 // 19.1 Object Objects
1495 // ---------------------------------------
1496
1497 // 19.1.1 The Object Constructor
1498 // 19.1.1.1 Object ( [ value ] )
1499 // 19.1.2 Properties of the Object Constructor
1500 // 19.1.2.1 Object.assign ( target, ...sources )
1501 define(
1502 Object, 'assign',
1503 function assign(target, /*...*/sources) {
1504 var to = ToObject(target);
1505 if (arguments.length < 2) return to;
1506
1507 var sourcesIndex = 1;
1508 while (sourcesIndex < arguments.length) {
1509 var nextSource = arguments[sourcesIndex++];
1510 if (nextSource === undefined || nextSource === null) {
1511 var keys = [];
1512 } else {
1513 var from = ToObject(nextSource);
1514 keys = OwnPropertyKeys(from);
1515 }
1516 for (var keysIndex = 0; keysIndex < keys.length; ++keysIndex) {
1517 var nextKey = keys[keysIndex];
1518 var desc = Object.getOwnPropertyDescriptor(from, nextKey);
1519 if (desc !== undefined && desc.enumerable) {
1520 var propValue = from[nextKey];
1521 to[nextKey] = propValue;
1522 }
1523 }
1524 }
1525 return to;
1526 });
1527
1528 // 19.1.2.2 Object.create ( O [ , Properties ] )
1529 // 19.1.2.3 Object.defineProperties ( O, Properties )
1530 // 19.1.2.4 Object.defineProperty ( O, P, Attributes )
1531 // 19.1.2.5 Object.freeze ( O )
1532 // 19.1.2.6 Object.getOwnPropertyDescriptor ( O, P )
1533
1534 (function() {
1535 var nativeSymbols = (typeof global.Symbol() === 'symbol'),
1536 $getOwnPropertyNames = Object.getOwnPropertyNames,
1537 $keys = Object.keys,
1538 $window_names = (typeof window === 'object' ? $getOwnPropertyNames(window) : []);
1539
1540 function isStringKey(k) { return !symbolForKey(k); }
1541
1542 // 19.1.2.7 Object.getOwnPropertyNames ( O )
1543 define(
1544 Object, 'getOwnPropertyNames',
1545 function getOwnPropertyNames(o) {
1546 if (Object.prototype.toString.call(o) === '[object Window]') {
1547 // Workaround for cross-realm calling by IE itself.
1548 // https://github.com/inexorabletash/polyfill/issues/96
1549 try {
1550 return $getOwnPropertyNames(o).filter(isStringKey);
1551 } catch (_) {
1552 return $window_names.slice();
1553 }
1554 }
1555 return $getOwnPropertyNames(o).filter(isStringKey);
1556 }, !nativeSymbols);
1557
1558 // 19.1.2.8 Object.getOwnPropertySymbols ( O )
1559 define(
1560 Object, 'getOwnPropertySymbols',
1561 function getOwnPropertySymbols(o) {
1562 return $getOwnPropertyNames(o).filter(symbolForKey).map(symbolForKey);
1563 }, !nativeSymbols);
1564
1565 // 19.1.2.14 Object.keys ( O )
1566 define(
1567 Object, 'keys',
1568 function keys(o) {
1569 return $keys(o).filter(isStringKey);
1570 }, !nativeSymbols);
1571 }());
1572
1573 // 19.1.2.9 Object.getPrototypeOf ( O )
1574 // 19.1.2.10 Object.is ( value1, value2 )
1575 define(
1576 Object, 'is',
1577 function is(value1, value2) {
1578 return SameValue(value1, value2);
1579 });
1580
1581 // 19.1.2.11 Object.isExtensible ( O )
1582 // 19.1.2.12 Object.isFrozen ( O )
1583 // 19.1.2.13 Object.isSealed ( O )
1584
1585 // 19.1.2.14 Object.keys ( O )
1586 // see above
1587
1588 // 19.1.2.15 Object.preventExtensions ( O )
1589 // 19.1.2.16 Object.prototype
1590 // 19.1.2.17 Object.seal ( O )
1591
1592 // 19.1.2.18 Object.setPrototypeOf ( O, proto )
1593 define(
1594 Object, 'setPrototypeOf',
1595 function setPrototypeOf(o, proto) {
1596 if (Type(o) !== 'object') throw TypeError();
1597 if (Type(proto) !== 'object' && Type(proto) !== 'null') throw TypeError();
1598 o.__proto__ = proto;
1599 return o;
1600 }
1601 );
1602
1603 // 19.1.3 Properties of the Object Prototype Object
1604 // 19.1.3.1 Object.prototype.constructor
1605 // 19.1.3.2 Object.prototype.hasOwnProperty ( V )
1606 // 19.1.3.3 Object.prototype.isPrototypeOf ( V )
1607 // 19.1.3.4 Object.prototype.propertyIsEnumerable ( V )
1608 // 19.1.3.5 Object.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
1609 // 19.1.3.6 Object.prototype.toString ( )
1610 hook(Object.prototype, 'toString',
1611 function() {
1612 var o = strict(this);
1613 if (o === Object(o) && $$toStringTag in o) {
1614 return '[object ' + o[$$toStringTag] + ']';
1615 }
1616 return undefined;
1617 });
1618
1619 // 19.1.3.7 Object.prototype.valueOf ( )
1620 // 19.1.4 Properties of Object Instances
1621
1622 // ---------------------------------------
1623 // 19.2 Function Objects
1624 // ---------------------------------------
1625
1626 // 19.2.1 The Function Constructor
1627 // 19.2.1.1 Function ( p1, p2, … , pn, body )
1628 // 19.2.2 Properties of the Function Constructor
1629 // 19.2.2.1 Function.length
1630 // 19.2.2.2 Function.prototype
1631 // 19.2.3 Properties of the Function Prototype Object
1632 // 19.2.3.1 Function.prototype.apply ( thisArg, argArray )
1633 // 19.2.3.2 Function.prototype.bind ( thisArg , ...args)
1634 // 19.2.3.3 Function.prototype.call (thisArg , ...args)
1635 // 19.2.3.4 Function.prototype.constructor
1636 // 19.2.3.5 Function.prototype.toString ( )
1637 // 19.2.3.6 Function.prototype[@@hasInstance] ( V )
1638 // 19.2.4 Function Instances
1639 // 19.2.4.1 length
1640 // 19.2.4.2 name
1641 // 19.2.4.3 prototype
1642
1643 // (No polyfillable changes from ES5)
1644
1645 // ---------------------------------------
1646 // 19.3 Boolean Objects
1647 // ---------------------------------------
1648
1649 // 19.3.1 The Boolean Constructor
1650 // 19.3.1.1 Boolean ( value )
1651 // 19.3.2 Properties of the Boolean Constructor
1652 // 19.3.2.1 Boolean.prototype
1653 // 19.3.3 Properties of the Boolean Prototype Object
1654 // 19.3.3.1 Boolean.prototype.constructor
1655 // 19.3.3.2 Boolean.prototype.toString ( )
1656 // 19.3.3.3 Boolean.prototype.valueOf ( )
1657 // 19.3.4 Properties of Boolean Instances
1658
1659 // (No polyfillable changes from ES5)
1660
1661 // ---------------------------------------
1662 // 19.4 Symbol Objects
1663 // ---------------------------------------
1664
1665 // Moved earlier in this script, so that other polyfills can depend on them.
1666
1667 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
1668 define(global.Symbol.prototype, global.Symbol.toStringTag, 'Symbol');
1669
1670 // ---------------------------------------
1671 // 19.5 Error Objects
1672 // ---------------------------------------
1673
1674 // 19.5.1 The Error Constructor
1675 // 19.5.1.1 Error ( message )
1676 // 19.5.1.2 new Error( ...argumentsList )
1677 // 19.5.2 Properties of the Error Constructor
1678 // 19.5.2.1 Error.prototype
1679 // 19.5.3 Properties of the Error Prototype Object
1680 // 19.5.3.1 Error.prototype.constructor
1681 // 19.5.3.2 Error.prototype.message
1682 // 19.5.3.3 Error.prototype.name
1683 // 19.5.3.4 Error.prototype.toString ( )
1684 // 19.5.4 Properties of Error Instances
1685 // 19.5.5 Native Error Types Used in This Standard
1686 // 19.5.5.1 EvalError
1687 // 19.5.5.2 RangeError
1688 // 19.5.5.3 ReferenceError
1689 // 19.5.5.4 SyntaxError
1690 // 19.5.5.5 TypeError
1691 // 19.5.5.6 URIError
1692 // 19.5.6 NativeError Object Structure
1693 // 19.5.6.1 NativeError Constructors
1694 // 19.5.6.1.1 NativeError ( message )
1695 // 19.5.6.1.2 new NativeError ( ...argumentsList )
1696 // 19.5.6.2 Properties of the NativeError Constructors
1697 // 19.5.6.2.1 NativeError.prototype
1698 // 19.5.6.3 Properties of the NativeError Prototype Objects
1699 // 19.5.6.4 Properties of NativeError Instances
1700
1701 // (No polyfillable changes from ES5)
1702
1703 // ---------------------------------------
1704 // 20 Numbers and Dates
1705 // ---------------------------------------
1706
1707 // ---------------------------------------
1708 // 20.1 Number Objects
1709 // ---------------------------------------
1710
1711 // 20.1.1 The Number Constructor
1712 // 20.1.1.1 Number ( [ value ] )
1713 // 20.1.1.2 new Number ( ...argumentsList )
1714 // 20.1.2 Properties of the Number Constructor
1715
1716 // 20.1.2.1 Number.EPSILON
1717 define(
1718 Number, 'EPSILON',
1719 (function () {
1720 var next, result;
1721 for (next = 1; 1 + next !== 1; next = next / 2)
1722 result = next;
1723 return result;
1724 }()));
1725
1726 // 20.1.2.2 Number.isFinite ( number )
1727 define(
1728 Number, 'isFinite',
1729 function isFinite(number) {
1730 if (Type(number) !== 'number') return false;
1731 if (number !== number || number === +Infinity || number === -Infinity) return false;
1732 return true;
1733 });
1734
1735 // 20.1.2.3 Number.isInteger ( number )
1736 define(
1737 Number, 'isInteger',
1738 function isInteger(number) {
1739 if (Type(number) !== 'number') return false;
1740 if (number !== number || number === +Infinity || number === -Infinity) return false;
1741 var integer = ToInteger(number);
1742 if (integer !== number) return false;
1743 return true;
1744 });
1745
1746 // 20.1.2.4 Number.isNaN ( number )
1747 define(
1748 Number, 'isNaN',
1749 function isNaN(number) {
1750 if (Type(number) !== 'number') return false;
1751 if (number !== number) return true;
1752 return false;
1753 });
1754
1755 // 20.1.2.5 Number.isSafeInteger ( number )
1756 define(
1757 Number, 'isSafeInteger',
1758 function isSafeInteger(number) {
1759 if (Type(number) !== 'number') return false;
1760 if (number !== number || number === +Infinity || number === -Infinity) return false;
1761 var integer = ToInteger(number);
1762 if (integer !== number) return false;
1763 if (abs(integer) <= (0x20000000000000 - 1)) // 2^53-1
1764 return true;
1765 return false;
1766 });
1767
1768 // 20.1.2.6 Number.MAX_SAFE_INTEGER
1769 define(
1770 Number, 'MAX_SAFE_INTEGER',
1771 9007199254740991); // 2^53-1
1772
1773 // 20.1.2.7 Number.MAX_VALUE
1774
1775 // 20.1.2.8 Number.MIN_SAFE_INTEGER
1776 define(
1777 Number, 'MIN_SAFE_INTEGER',
1778 -9007199254740991); // -2^53+1
1779
1780 // 20.1.2.9 Number.MIN_VALUE
1781 // 20.1.2.10 Number.NaN
1782 // 20.1.2.11 Number.NEGATIVE_INFINITY
1783
1784 // 20.1.2.12 Number.parseFloat ( string )
1785 define(Number, 'parseFloat', $parseFloat);
1786
1787 // 20.1.2.13 Number.parseInt ( string, radix )
1788 define(Number, 'parseInt', $parseInt);
1789
1790 // 20.1.2.14 Number.POSITIVE_INFINITY
1791 // 20.1.2.15 Number.prototype
1792
1793 // 20.1.3 Properties of the Number Prototype Object
1794 // 20.1.3.1 Number.prototype.constructor
1795 // 20.1.3.2 Number.prototype.toExponential ( fractionDigits )
1796 // 20.1.3.3 Number.prototype.toFixed ( fractionDigits )
1797 // 20.1.3.4 Number.prototype.toLocaleString( [ reserved1 [ , reserved2 ] ])
1798 // 20.1.3.5 Number.prototype.toPrecision ( precision )
1799 // 20.1.3.6 Number.prototype.toString ( [ radix ] )
1800 // 20.1.3.7 Number.prototype.valueOf ( )
1801 // 20.1.4 Properties of Number Instances
1802
1803 // ---------------------------------------
1804 // 20.2 The Math Object
1805 // ---------------------------------------
1806
1807 // 20.2.1 Value Properties of the Math Object
1808 // 20.2.1.1 Math.E
1809 // 20.2.1.2 Math.LN10
1810 // 20.2.1.3 Math.LN2
1811 // 20.2.1.4 Math.LOG10E
1812 // 20.2.1.5 Math.LOG2E
1813 // 20.2.1.6 Math.PI
1814 // 20.2.1.7 Math.SQRT1_2
1815 // 20.2.1.8 Math.SQRT2
1816
1817 // 20.2.1.9 Math [ @@toStringTag ]
1818 define(Math, $$toStringTag, 'Math');
1819
1820 // 20.2.2 Function Properties of the Math Object
1821 // 20.2.2.1 Math.abs ( x )
1822 // 20.2.2.2 Math.acos ( x )
1823
1824 // 20.2.2.3 Math.acosh(x)
1825 define(
1826 Math, 'acosh',
1827 function acosh(x) {
1828 x = Number(x);
1829 return log(x + sqrt(x * x - 1));
1830 });
1831
1832 // 20.2.2.4 Math.asin ( x )
1833
1834 // 20.2.2.5 Math.asinh( x )
1835 define(
1836 Math, 'asinh',
1837 function asinh(x) {
1838 x = Number(x);
1839 if (SameValue(x, -0)) {
1840 return x;
1841 }
1842 var s = sqrt(x * x + 1);
1843 return (s === -x) ? log(0) : log(x + s);
1844 });
1845
1846 // 20.2.2.6 Math.atan ( x )
1847
1848 // 20.2.2.7 Math.atanh( x )
1849 define(
1850 Math, 'atanh',
1851 function atanh(x) {
1852 x = Number(x);
1853 return (x === 0) ? x : log((1 + x) / (1 - x)) / 2;
1854 });
1855
1856 // 20.2.2.8 Math.atan2 ( y, x )
1857
1858 // 20.2.2.9 Math.cbrt ( x )
1859 define(
1860 Math, 'cbrt',
1861 function cbrt(x) {
1862 x = Number(x);
1863 if ($isNaN(x/x)) {
1864 return x;
1865 }
1866 var r = pow(abs(x), 1/3);
1867 var t = x/r/r;
1868 return r + (r * (t-r) / (2*r + t));
1869 });
1870
1871 // 20.2.2.10 Math.ceil ( x )
1872
1873 // 20.2.2.11 Math.clz32 ( x )
1874 define(
1875 Math, 'clz32',
1876 function clz32(x) {
1877 function clz8(x) {
1878 return (x & 0xf0) ? (x & 0x80 ? 0 : x & 0x40 ? 1 : x & 0x20 ? 2 : 3) :
1879 (x & 0x08 ? 4 : x & 0x04 ? 5 : x & 0x02 ? 6 : x & 0x01 ? 7 : 8);
1880 }
1881 x = ToUint32(x);
1882 return x & 0xff000000 ? clz8(x >> 24) :
1883 x & 0xff0000 ? clz8(x >> 16) + 8 :
1884 x & 0xff00 ? clz8(x >> 8) + 16 : clz8(x) + 24;
1885 });
1886
1887
1888
1889 // 20.2.2.12 Math.cos ( x )
1890
1891 // 20.2.2.13 Math.cosh ( x )
1892 define(
1893 Math, 'cosh',
1894 function cosh(x) {
1895 x = Number(x);
1896 return (pow(E, x) + pow(E, -x)) / 2;
1897 });
1898
1899 // 20.2.2.14 Math.exp ( x )
1900
1901 // 20.2.2.15 Math.expm1 ( x )
1902 define(
1903 Math, 'expm1',
1904 function expm1(x) {
1905 x = Number(x);
1906 // from: http://www.johndcook.com/cpp_log1p.html
1907 if (SameValue(x, -0)) {
1908 return -0;
1909 } else if (abs(x) < 1e-5) {
1910 return x + 0.5 * x * x; // two terms of Taylor expansion
1911 } else {
1912 return exp(x) - 1;
1913 }
1914 });
1915
1916 // 20.2.2.16 Math.floor ( x )
1917
1918 // 20.2.2.17 Math.fround ( x )
1919 define(
1920 Math, 'fround',
1921 function fround(x) {
1922 if ($isNaN(x)) {
1923 return NaN;
1924 }
1925 if (1/x === +Infinity || 1/x === -Infinity || x === +Infinity || x === -Infinity) {
1926 return x;
1927 }
1928 return (new Float32Array([x]))[0];
1929 });
1930
1931 // 20.2.2.18 Math.hypot ( value1 [, value2 [ ... ] ] )
1932 define(
1933 Math, 'hypot',
1934 function hypot() {
1935 var values = [];
1936 var m = 0, sawNaN = false;
1937 for (var i = 0; i < arguments.length; ++i) {
1938 var n = abs(Number(arguments[i]));
1939 if (n === Infinity) return n;
1940 if (n !== n) sawNaN = true;
1941 if (n > m) m = n;
1942 values[i] = n;
1943 }
1944 if (sawNaN) return NaN;
1945 if (m === 0) return +0;
1946 var sum = +0;
1947 for (i = 0; i < values.length; ++i) {
1948 var r = values[i] / m;
1949 sum = sum + r * r;
1950 }
1951 return m * sqrt(sum);
1952 });
1953
1954 // 20.2.2.19 Math.imul ( x, y )
1955 define(
1956 Math, 'imul',
1957 function imul(x, y) {
1958 var a = ToUint32(x);
1959 var b = ToUint32(y);
1960 // (slow but accurate)
1961 var ah = (a >>> 16) & 0xffff;
1962 var al = a & 0xffff;
1963 var bh = (b >>> 16) & 0xffff;
1964 var bl = b & 0xffff;
1965 return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0)|0);
1966 }, ('imul' in Math && Math.imul(1, 0x80000000) === 0) // Safari 7 bug
1967 );
1968
1969 // 20.2.2.20 Math.log ( x )
1970
1971 // 20.2.2.21 Math.log1p ( x )
1972 define(
1973 Math, 'log1p',
1974 function log1p(x) {
1975 x = Number(x);
1976 // from: http://www.johndcook.com/cpp_expm1.html
1977 if (x < -1) {
1978 return NaN;
1979 } else if (SameValue(x, -0)) {
1980 return -0;
1981 } else if (abs(x) > 1e-4) {
1982 return log(1 + x);
1983 } else {
1984 return (-0.5 * x + 1) * x;
1985 }
1986 });
1987
1988 // 20.2.2.22 Math.log10 ( x )
1989 define(
1990 Math, 'log10',
1991 function log10(x) {
1992 x = Number(x);
1993 return log(x) * LOG10E;
1994 });
1995
1996 // 20.2.2.23 Math.log2 ( x )
1997 define(
1998 Math, 'log2',
1999 function log2(x) {
2000 x = Number(x);
2001 return log(x) * LOG2E;
2002 });
2003
2004 // 20.2.2.24 Math.max ( value1, value2 , ...values )
2005 // 20.2.2.25 Math.min ( value1, value2 , ...values )
2006 // 20.2.2.26 Math.pow ( x, y )
2007 // 20.2.2.27 Math.random ( )
2008 // 20.2.2.28 Math.round ( x )
2009
2010 // 20.2.2.29 Math.sign(x)
2011 define(
2012 Math, 'sign',
2013 function sign(x) {
2014 x = Number(x);
2015 return x < 0 ? -1 : x > 0 ? 1 : x;
2016 });
2017
2018 // 20.2.2.30 Math.sin ( x )
2019
2020 // 20.2.2.31 Math.sinh( x )
2021 define(
2022 Math, 'sinh',
2023 function sinh(x) {
2024 x = Number(x);
2025 return SameValue(x, -0) ? x : (pow(E, x) - pow(E, -x)) / 2;
2026 });
2027
2028 // 20.2.2.32 Math.sqrt ( x )
2029 // 20.2.2.33 Math.tan ( x )
2030
2031 // 20.2.2.34 Math.tanh ( x )
2032 define(
2033 Math, 'tanh',
2034 function tanh(x) {
2035 x = Number(x);
2036 var n = pow(E, 2 * x) - 1,
2037 d = pow(E, 2 * x) + 1;
2038 if (SameValue(x, -0))
2039 return x;
2040 return (n === d) ? 1 : n / d; // Handle Infinity/Infinity
2041 });
2042
2043 // 20.2.2.35 Math.trunc ( x )
2044 define(
2045 Math, 'trunc',
2046 function trunc(x) {
2047 x = Number(x);
2048 return $isNaN(x) ? NaN :
2049 x < 0 ? ceil(x) : floor(x);
2050 });
2051
2052 // ---------------------------------------
2053 // 20.3 Date Objects
2054 // ---------------------------------------
2055
2056 // 20.3.1 Overview of Date Objects and Definitions of Abstract Operations
2057 // 20.3.1.1 Time Values and Time Range
2058 // 20.3.1.2 Day Number and Time within Day
2059 // 20.3.1.3 Year Number
2060 // 20.3.1.4 Month Number
2061 // 20.3.1.5 Date Number
2062 // 20.3.1.6 Week Day
2063 // 20.3.1.7 Local Time Zone Adjustment
2064 // 20.3.1.8 Daylight Saving Time Adjustment
2065 // 20.3.1.9 Local Time
2066 // 20.3.1.10 Hours, Minutes, Second, and Milliseconds
2067 // 20.3.1.11 MakeTime (hour, min, sec, ms)
2068 // 20.3.1.12 MakeDay (year, month, date)
2069 // 20.3.1.13 MakeDate (day, time)
2070 // 20.3.1.14 TimeClip (time)
2071 // 20.3.1.15 Date Time String Format
2072 // 20.3.1.15.1 Extended years
2073 // 20.3.2 The Date Constructor
2074 // 20.3.2.1 Date ( year, month [, date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
2075 // 20.3.2.2 Date ( value )
2076 // 20.3.2.3 Date ( )
2077 // 20.3.3 Properties of the Date Constructor
2078 // 20.3.3.1 Date.now ( )
2079 // 20.3.3.2 Date.parse (string)
2080 // 20.3.3.3 Date.prototype
2081 // 20.3.3.4 Date.UTC ( year, month [ , date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
2082 // 20.3.4 Properties of the Date Prototype Object
2083 // 20.3.4.1 Date.prototype.constructor
2084 // 20.3.4.2 Date.prototype.getDate ( )
2085 // 20.3.4.3 Date.prototype.getDay ( )
2086 // 20.3.4.4 Date.prototype.getFullYear ( )
2087 // 20.3.4.5 Date.prototype.getHours ( )
2088 // 20.3.4.6 Date.prototype.getMilliseconds ( )
2089 // 20.3.4.7 Date.prototype.getMinutes ( )
2090 // 20.3.4.8 Date.prototype.getMonth ( )
2091 // 20.3.4.9 Date.prototype.getSeconds ( )
2092 // 20.3.4.10 Date.prototype.getTime ( )
2093 // 20.3.4.11 Date.prototype.getTimezoneOffset ( )
2094 // 20.3.4.12 Date.prototype.getUTCDate ( )
2095 // 20.3.4.13 Date.prototype.getUTCDay ( )
2096 // 20.3.4.14 Date.prototype.getUTCFullYear ( )
2097 // 20.3.4.15 Date.prototype.getUTCHours ( )
2098 // 20.3.4.16 Date.prototype.getUTCMilliseconds ( )
2099 // 20.3.4.17 Date.prototype.getUTCMinutes ( )
2100 // 20.3.4.18 Date.prototype.getUTCMonth ( )
2101 // 20.3.4.19 Date.prototype.getUTCSeconds ( )
2102 // 20.3.4.20 Date.prototype.setDate ( date )
2103 // 20.3.4.21 Date.prototype.setFullYear ( year [ , month [ , date ] ] )
2104 // 20.3.4.22 Date.prototype.setHours ( hour [ , min [ , sec [ , ms ] ] ] )
2105 // 20.3.4.23 Date.prototype.setMilliseconds ( ms )
2106 // 20.3.4.24 Date.prototype.setMinutes ( min [ , sec [ , ms ] ] )
2107 // 20.3.4.25 Date.prototype.setMonth ( month [ , date ] )
2108 // 20.3.4.26 Date.prototype.setSeconds ( sec [ , ms ] )
2109 // 20.3.4.27 Date.prototype.setTime ( time )
2110 // 20.3.4.28 Date.prototype.setUTCDate ( date )
2111 // 20.3.4.29 Date.prototype.setUTCFullYear ( year [ , month [ , date ] ] )
2112 // 20.3.4.30 Date.prototype.setUTCHours ( hour [ , min [ , sec [ , ms ] ] ] )
2113 // 20.3.4.31 Date.prototype.setUTCMilliseconds ( ms )
2114 // 20.3.4.32 Date.prototype.setUTCMinutes ( min [ , sec [, ms ] ] )
2115 // 20.3.4.33 Date.prototype.setUTCMonth ( month [ , date ] )
2116 // 20.3.4.34 Date.prototype.setUTCSeconds ( sec [ , ms ] )
2117 // 20.3.4.35 Date.prototype.toDateString ( )
2118 // 20.3.4.36 Date.prototype.toISOString ( )
2119 // 20.3.4.37 Date.prototype.toJSON ( key )
2120 // 20.3.4.38 Date.prototype.toLocaleDateString ( [ reserved1 [ , reserved2 ] ] )
2121 // 20.3.4.39 Date.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
2122 // 20.3.4.40 Date.prototype.toLocaleTimeString ( [ reserved1 [ , reserved2 ] ] )
2123 // 20.3.4.41 Date.prototype.toString ( )
2124 // 20.3.4.42 Date.prototype.toTimeString ( )
2125 // 20.3.4.43 Date.prototype.toUTCString ( )
2126 // 20.3.4.44 Date.prototype.valueOf ( )
2127 // 20.3.4.45 Date.prototype [ @@toPrimitive ] ( hint )
2128 // 20.3.5 Properties of Date Instances
2129
2130 // (No polyfillable changes from ES5)
2131
2132 // ---------------------------------------
2133 // 21 Text Processing
2134 // ---------------------------------------
2135
2136 var string_regexp_dispatch = (function() {
2137 var faux = {}, secret = Symbol();
2138 faux[Symbol.match] = function() { return secret; };
2139 return ("").match(faux) === secret;
2140 }());
2141
2142 // 21.1 String Objects
2143 // 21.1.1 The String Constructor
2144 // 21.1.1.1 String ( value )
2145 // 21.1.2 Properties of the String Constructor
2146 // 21.1.2.1 String.fromCharCode ( ...codeUnits )
2147
2148 // 21.1.2.2 String.fromCodePoint ( ...codePoints )
2149 define(
2150 String, 'fromCodePoint',
2151 function fromCodePoint(/*...codePoints*/) {
2152 var codePoints = arguments,
2153 length = codePoints.length,
2154 elements = [],
2155 nextIndex = 0;
2156 while (nextIndex < length) {
2157 var next = codePoints[nextIndex];
2158 var nextCP = Number(next);
2159 if (!SameValue(nextCP, ToInteger(nextCP)) ||
2160 nextCP < 0 || nextCP > 0x10FFFF) {
2161 throw RangeError('Invalid code point ' + nextCP);
2162 }
2163 if (nextCP < 0x10000) {
2164 elements.push(String.fromCharCode(nextCP));
2165 } else {
2166 nextCP -= 0x10000;
2167 elements.push(String.fromCharCode((nextCP >> 10) + 0xD800));
2168 elements.push(String.fromCharCode((nextCP % 0x400) + 0xDC00));
2169 }
2170 nextIndex += 1;
2171 }
2172 return elements.join('');
2173 });
2174
2175 // 21.1.2.3 String.prototype
2176
2177 // 21.1.2.4 String.raw ( template , ...substitutions )
2178 define(
2179 String, 'raw',
2180 function raw(template /*, ...substitutions*/) {
2181 var substitutions = [].slice.call(arguments, 1);
2182
2183 var cooked = Object(template);
2184 var rawValue = cooked['raw'];
2185 var raw = Object(rawValue);
2186 var len = raw['length'];
2187 var literalSegments = ToLength(len);
2188 if (literalSegments <= 0) return '';
2189 var stringElements = [];
2190 var nextIndex = 0;
2191 while (true) {
2192 var next = raw[nextIndex];
2193 var nextSeg = String(next);
2194 stringElements.push(nextSeg);
2195 if (nextIndex + 1 === literalSegments)
2196 return stringElements.join('');
2197 next = substitutions[nextIndex];
2198 var nextSub = String(next);
2199 stringElements.push(nextSub);
2200 nextIndex = nextIndex + 1;
2201 }
2202 });
2203
2204 // See https://githib.com/inexorabletash/uate for a more useful version.
2205
2206 // 21.1.3 Properties of the String Prototype Object
2207 // 21.1.3.1 String.prototype.charAt ( pos )
2208 // 21.1.3.2 String.prototype.charCodeAt ( pos )
2209
2210 // 21.1.3.3 String.prototype.codePointAt ( pos )
2211 define(
2212 String.prototype, 'codePointAt',
2213 function codePointAt(pos) {
2214 var o = strict(this);
2215 var s = String(o);
2216 var position = ToInteger(pos);
2217 var size = s.length;
2218 if (position < 0 || position >= size) return undefined;
2219 var first = s.charCodeAt(position);
2220 if (first < 0xD800 || first > 0xDBFF || position + 1 === size) return first;
2221 var second = s.charCodeAt(position + 1);
2222 if (second < 0xDC00 || second > 0xDFFF) return first;
2223 return ((first - 0xD800) * 1024) + (second - 0xDC00) + 0x10000;
2224 });
2225
2226 // 21.1.3.4 String.prototype.concat ( ...args )
2227 // 21.1.3.5 String.prototype.constructor
2228
2229 // 21.1.3.6 String.prototype.endsWith ( searchString [ , endPosition] )
2230 define(
2231 String.prototype, 'endsWith',
2232 function endsWith(searchString) {
2233 var endPosition = arguments[1];
2234
2235 var o = strict(this);
2236 var s = String(o);
2237 var searchStr = String(searchString);
2238 var len = s.length;
2239 var pos = (endPosition === undefined) ? len : ToInteger(endPosition);
2240 var end = min(max(pos, 0), len);
2241 var searchLength = searchStr.length;
2242 var start = end - searchLength;
2243 if (start < 0) return false;
2244 if (s.substring(start, start + searchLength) === searchStr) return true;
2245 return false;
2246 });
2247
2248 // 21.1.3.7 String.prototype.includes ( searchString [ , position ] )
2249 define(
2250 String.prototype, 'includes',
2251 function includes(searchString) {
2252 var position = arguments[1];
2253
2254 var o = strict(this);
2255 var s = String(o);
2256 var searchStr = String(searchString);
2257 var pos = ToInteger(position);
2258 var len = s.length;
2259 var start = min(max(pos, 0), len);
2260 return s.indexOf(searchStr, start) !== -1;
2261 });
2262
2263 // 21.1.3.8 String.prototype.indexOf ( searchString [ , position ] )
2264 // 21.1.3.9 String.prototype.lastIndexOf ( searchString [ , position ] )
2265 // 21.1.3.10 String.prototype.localeCompare ( that [, reserved1 [ , reserved2 ] ] )
2266 // 21.1.3.11 String.prototype.match ( regexp )
2267 define(
2268 String.prototype, 'match',
2269 function match(regexp) {
2270 var o = strict(this);
2271 var s = String(o);
2272 if (HasProperty(regexp, $$match)) var rx = regexp;
2273 else rx = new RegExp(regexp);
2274 return rx[$$match](s);
2275 }, !string_regexp_dispatch);
2276
2277 // 21.1.3.12 String.prototype.normalize ( [ form ] )
2278
2279 // Not practical due to table sizes; if needed, pull in:
2280 // https://github.com/walling/unorm/
2281
2282 // 21.1.3.13 String.prototype.repeat ( count )
2283 define(
2284 String.prototype, 'repeat',
2285 function repeat(count) {
2286 var o = strict(this);
2287 var s = String(o);
2288 var n = ToInteger(count);
2289 if (n < 0) throw RangeError();
2290 if (n === Infinity) throw RangeError();
2291 var t = new Array(n + 1).join(s);
2292 return t;
2293 });
2294
2295 // 21.1.3.14 String.prototype.replace (searchValue, replaceValue )
2296 define(
2297 String.prototype, 'replace',
2298 function replace(searchValue, replaceValue) {
2299 var o = strict(this);
2300 if (HasProperty(searchValue, $$replace))
2301 return searchValue[$$replace](o, replaceValue);
2302 return orig_replace.call(o, searchValue, replaceValue);
2303 }, !string_regexp_dispatch);
2304
2305 // 21.1.3.15 String.prototype.search ( regexp )
2306 define(
2307 String.prototype, 'search',
2308 function search(regexp) {
2309 var o = strict(this);
2310 var string = String(o);
2311 if (HasProperty(regexp, $$search)) var rx = regexp;
2312 else rx = new RegExp(regexp);
2313 return rx[$$search](string);
2314 }, !string_regexp_dispatch);
2315
2316 // 21.1.3.16 String.prototype.slice ( start, end )
2317 // 21.1.3.17 String.prototype.split ( separator, limit )
2318 define(
2319 String.prototype, 'split',
2320 function split(separator, limit) {
2321 var o = strict(this);
2322 if (HasProperty(separator, $$split))
2323 return separator[$$split](o, limit);
2324 return orig_split.call(o, separator, limit);
2325 }, !string_regexp_dispatch);
2326
2327 // 21.1.3.18 String.prototype.startsWith ( searchString [, position ] )
2328 define(
2329 String.prototype, 'startsWith',
2330 function startsWith(searchString) {
2331 var position = arguments[1];
2332
2333 var o = strict(this);
2334 var s = String(o);
2335 var searchStr = String(searchString);
2336 var pos = ToInteger(position);
2337 var len = s.length;
2338 var start = min(max(pos, 0), len);
2339 var searchLength = searchStr.length;
2340 if (searchLength + start > len) return false;
2341 if (s.substring(start, start + searchLength) === searchStr) return true;
2342 return false;
2343 });
2344
2345 // 21.1.3.19 String.prototype.substring ( start, end )
2346 // 21.1.3.20 String.prototype.toLocaleLowerCase ( [ reserved1 [ , reserved2 ] ] )
2347 // 21.1.3.21 String.prototype.toLocaleUpperCase ([ reserved1 [ , reserved2 ] ] )
2348 // 21.1.3.22 String.prototype.toLowerCase ( )
2349 // 21.1.3.23 String.prototype.toString ( )
2350 // 21.1.3.24 String.prototype.toUpperCase ( )
2351 // 21.1.3.25 String.prototype.trim ( )
2352 // 21.1.3.26 String.prototype.valueOf ( )
2353
2354 // 21.1.3.27 String.prototype [ @@iterator ]( )
2355 define(
2356 String.prototype, $$iterator,
2357 function entries() {
2358 return CreateStringIterator(this, 'value');
2359 });
2360
2361 // 21.1.4 Properties of String Instances
2362 // 21.1.4.1 length
2363
2364 // 21.1.5 String Iterator Objects
2365 /** @constructor */
2366 function StringIterator() {}
2367
2368 // 21.1.5.1 CreateStringIterator Abstract Operation
2369 function CreateStringIterator(string, kind) {
2370 var s = String(string);
2371 var iterator = new StringIterator;
2372 set_internal(iterator, '[[IteratedString]]', s);
2373 set_internal(iterator, '[[StringIteratorNextIndex]]', 0);
2374 set_internal(iterator, '[[StringIterationKind]]', kind);
2375 return iterator;
2376 }
2377
2378 // 21.1.5.2 The %StringIteratorPrototype% Object
2379 var $StringIteratorPrototype$ = Object.create($IteratorPrototype$);
2380 StringIterator.prototype = $StringIteratorPrototype$;
2381
2382 // 21.1.5.2.1 %StringIteratorPrototype%.next ( )
2383 define(
2384 $StringIteratorPrototype$, 'next',
2385 function next() {
2386 var o = ToObject(this);
2387 var s = String(o['[[IteratedString]]']),
2388 index = o['[[StringIteratorNextIndex]]'],
2389 len = s.length;
2390 if (index >= len) {
2391 set_internal(o, '[[StringIteratorNextIndex]]', Infinity);
2392 return CreateIterResultObject(undefined, true);
2393 }
2394 var cp = s.codePointAt(index);
2395 set_internal(o, '[[StringIteratorNextIndex]]', index + (cp > 0xFFFF ? 2 : 1));
2396 return CreateIterResultObject(String.fromCodePoint(cp), false);
2397 });
2398
2399 // 21.1.5.2.2 %StringIteratorPrototype% [ @@toStringTag ]
2400 define($StringIteratorPrototype$, $$toStringTag, 'String Iterator');
2401
2402 // 21.1.5.3 Properties of String Iterator Instances
2403
2404 // ---------------------------------------
2405 // 21.2 RegExp (Regular Expression) Objects
2406 // ---------------------------------------
2407
2408 // 21.2.1 Patterns
2409 // 21.2.2 Pattern Semantics
2410 // 21.2.2.1 Notation
2411 // 21.2.2.2 Pattern
2412 // 21.2.2.3 Disjunction
2413 // 21.2.2.4 Alternative
2414 // 21.2.2.5 Term
2415 // 21.2.2.6 Assertion
2416 // 21.2.2.7 Quantifier
2417 // 21.2.2.8 Atom
2418 // 21.2.2.9 AtomEscape
2419 // 21.2.2.10 CharacterEscape
2420 // 21.2.2.11 DecimalEscape
2421 // 21.2.2.12 CharacterClassEscape
2422 // 21.2.2.13 CharacterClass
2423 // 21.2.2.14 ClassRanges
2424 // 21.2.2.15 NonemptyClassRanges
2425 // 21.2.2.16 NonemptyClassRangesNoDash
2426 // 21.2.2.17 ClassAtom
2427 // 21.2.2.18 ClassAtomNoDash
2428 // 21.2.2.19 ClassEscape
2429 // 21.2.3 The RegExp Constructor
2430 // 21.2.3.1 RegExp ( pattern, flags )
2431 // 21.2.3.2 new RegExp( ...argumentsList )
2432 // 21.2.3.3 Abstract Operations for the RegExp Constructor
2433 // 21.2.4 Properties of the RegExp Constructor
2434 // 21.2.4.1 RegExp.prototype
2435 // 21.2.5 Properties of the RegExp Prototype Object
2436 // 21.2.5.1 RegExp.prototype.constructor
2437 // 21.2.5.2 RegExp.prototype.exec ( string )
2438
2439 // 21.2.5.3 get RegExp.prototype.flags
2440 if (!('flags' in RegExp.prototype)) {
2441 Object.defineProperty(
2442 RegExp.prototype, 'flags', {
2443 get: function() {
2444 var s = String(this);
2445 return s.substring(s.lastIndexOf('/') + 1);
2446 }
2447 });
2448 }
2449
2450 // 21.2.5.4 get RegExp.prototype.global
2451 // 21.2.5.5 get RegExp.prototype.ignoreCase
2452
2453 // 21.2.5.6 RegExp.prototype [ @@match ] ( string )
2454 define(RegExp.prototype, $$match, function(string) {
2455 var o = strict(this);
2456 return orig_match.call(string, o);
2457 });
2458
2459 // 21.2.5.7 get RegExp.prototype.multiline
2460
2461 // 21.2.5.8 RegExp.prototype [ @@replace ] ( string, replaceValue )
2462 define(RegExp.prototype, $$replace, function(string, replaceValue) {
2463 var o = strict(this);
2464 return orig_replace.call(string, o, replaceValue);
2465 });
2466
2467 // 21.2.5.9 RegExp.prototype [ @@search ] ( string )
2468 define(RegExp.prototype, $$search, function(string) {
2469 var o = strict(this);
2470 return orig_search.call(string, o);
2471 });
2472
2473 // 21.2.5.10 get RegExp.prototype.source
2474
2475 // 21.2.5.11 RegExp.prototype [ @@split ] ( string, limit )
2476 define(RegExp.prototype, $$split, function(string, limit) {
2477 var o = strict(this);
2478 return orig_split.call(string, o, limit);
2479 });
2480
2481 // 21.2.5.12 get RegExp.prototype.sticky
2482 // 21.2.5.13 RegExp.prototype.test( S )
2483 // 21.2.5.14 RegExp.prototype.toString ( )
2484 // 21.2.5.15 get RegExp.prototype.unicode
2485
2486 // 21.2.6 Properties of RegExp Instances
2487 // 21.2.6.1 lastIndex
2488
2489 // (No polyfillable changes from ES5)
2490
2491 // ---------------------------------------
2492 // 22 Indexed Collections
2493 // ---------------------------------------
2494
2495 // ---------------------------------------
2496 // 22.1 Array Objects
2497 // ---------------------------------------
2498
2499 // 22.1.1 The Array Constructor
2500 // 22.1.1.1 Array ( )
2501 // 22.1.1.2 Array (len)
2502 // 22.1.1.3 Array (...items )
2503
2504 // 22.1.2 Properties of the Array Constructor
2505
2506 // 22.1.2.1 Array.from ( items [ , mapfn [ , thisArg ] ] )
2507 define(
2508 Array, 'from',
2509 function from(items) {
2510 var mapfn = arguments[1];
2511 var thisArg = arguments[2];
2512
2513 var c = strict(this);
2514 if (mapfn === undefined) {
2515 var mapping = false;
2516 } else {
2517 if (!IsCallable(mapfn)) throw TypeError();
2518 var t = thisArg;
2519 mapping = true;
2520 }
2521 var usingIterator = GetMethod(items, $$iterator);
2522 if (usingIterator !== undefined) {
2523 if (IsConstructor(c)) {
2524 var a = new c();
2525 } else {
2526 a = new Array(0);
2527 }
2528 var iterator = GetIterator(items, usingIterator);
2529 var k = 0;
2530 while (true) {
2531 var next = IteratorStep(iterator);
2532 if (next === false) {
2533 a.length = k;
2534 return a;
2535 }
2536 var nextValue = IteratorValue(next);
2537 if (mapping)
2538 var mappedValue = mapfn.call(t, nextValue);
2539 else
2540 mappedValue = nextValue;
2541 a[k] = mappedValue;
2542 k += 1;
2543 }
2544 }
2545 var arrayLike = ToObject(items);
2546 var lenValue = arrayLike.length;
2547 var len = ToLength(lenValue);
2548 if (IsConstructor(c)) {
2549 a = new c(len);
2550 } else {
2551 a = new Array(len);
2552 }
2553 k = 0;
2554 while (k < len) {
2555 var kValue = arrayLike[k];
2556 if (mapping)
2557 mappedValue = mapfn.call(t, kValue, k);
2558 else
2559 mappedValue = kValue;
2560 a[k] = mappedValue;
2561 k += 1;
2562 }
2563 a.length = len;
2564 return a;
2565 });
2566
2567 // 22.1.2.2 Array.isArray ( arg )
2568
2569 // 22.1.2.3 Array.of ( ...items )
2570 define(
2571 Array, 'of',
2572 function of() {
2573 var items = arguments;
2574
2575 var lenValue = items.length;
2576 var len = ToUint32(lenValue);
2577 var c = strict(this), a;
2578 if (IsConstructor(c)) {
2579 a = new c(len);
2580 a = ToObject(a);
2581 } else {
2582 a = new Array(len);
2583 }
2584 var k = 0;
2585 while (k < len) {
2586 a[k] = items[k];
2587 k += 1;
2588 }
2589 a.length = len;
2590 return a;
2591 });
2592
2593 // 22.1.2.4 Array.prototype
2594 // 22.1.2.5 get Array [ @@species ]
2595 // 22.1.3 Properties of the Array Prototype Object
2596 // 22.1.3.1 Array.prototype.concat ( ...arguments )
2597 // 22.1.3.1.1 Runtime Semantics: IsConcatSpreadable ( O )
2598 // 22.1.3.2 Array.prototype.constructor
2599 // 22.1.3.3 Array.prototype.copyWithin (target, start [ , end ] )
2600 define(
2601 Array.prototype, 'copyWithin',
2602 function copyWithin(target, start/*, end*/) {
2603 var end = arguments[2];
2604
2605 var o = ToObject(this);
2606 var lenVal = o.length;
2607 var len = ToLength(lenVal);
2608 len = max(len, 0);
2609 var relativeTarget = ToInteger(target);
2610 var to;
2611 if (relativeTarget < 0)
2612 to = max(len + relativeTarget, 0);
2613 else
2614 to = min(relativeTarget, len);
2615 var relativeStart = ToInteger(start);
2616 var from;
2617 if (relativeStart < 0)
2618 from = max(len + relativeStart, 0);
2619 else
2620 from = min(relativeStart, len);
2621 var relativeEnd;
2622 if (end === undefined)
2623 relativeEnd = len;
2624 else
2625 relativeEnd = ToInteger(end);
2626 var final;
2627 if (relativeEnd < 0)
2628 final = max(len + relativeEnd, 0);
2629 else
2630 final = min(relativeEnd, len);
2631 var count = min(final - from, len - to);
2632 var direction;
2633 if (from < to && to < from + count) {
2634 direction = -1;
2635 from = from + count - 1;
2636 to = to + count - 1;
2637 } else {
2638 direction = 1;
2639 }
2640 while (count > 0) {
2641 var fromKey = String(from);
2642 var toKey = String(to);
2643 var fromPresent = HasProperty(o, fromKey);
2644 if (fromPresent) {
2645 var fromVal = o[fromKey];
2646 o[toKey] = fromVal;
2647 } else {
2648 delete o[toKey];
2649 }
2650 from = from + direction;
2651 to = to + direction;
2652 count = count - 1;
2653 }
2654 return o;
2655 });
2656
2657 // 22.1.3.4 Array.prototype.entries ( )
2658 var nativeArrayIteratorMethods =
2659 ('entries' in Array.prototype && 'next' in [].entries());
2660
2661 define(
2662 Array.prototype, 'entries',
2663 function entries() {
2664 return CreateArrayIterator(this, 'key+value');
2665 }, !nativeArrayIteratorMethods);
2666
2667 // 22.1.3.5 Array.prototype.every ( callbackfn [ , thisArg] )
2668
2669 // 22.1.3.6 Array.prototype.fill (value [ , start [ , end ] ] )
2670 define(
2671 Array.prototype, 'fill',
2672 function fill(value/*, start, end*/) {
2673 var start = arguments[1],
2674 end = arguments[2];
2675
2676 var o = ToObject(this);
2677 var lenVal = o.length;
2678 var len = ToLength(lenVal);
2679 len = max(len, 0);
2680 var relativeStart = ToInteger(start);
2681 var k;
2682 if (relativeStart < 0)
2683 k = max((len + relativeStart), 0);
2684 else
2685 k = min(relativeStart, len);
2686 var relativeEnd;
2687 if (end === undefined)
2688 relativeEnd = len;
2689 else
2690 relativeEnd = ToInteger(end);
2691 var final;
2692 if (relativeEnd < 0)
2693 final = max((len + relativeEnd), 0);
2694 else
2695 final = min(relativeEnd, len);
2696 while (k < final) {
2697 var pk = String(k);
2698 o[pk] = value;
2699 k += 1;
2700 }
2701 return o;
2702 });
2703
2704 // 22.1.3.7 Array.prototype.filter ( callbackfn [ , thisArg ] )
2705
2706 // 22.1.3.8 Array.prototype.find ( predicate [ , thisArg ] )
2707 define(
2708 Array.prototype, 'find',
2709 function find(predicate) {
2710 var o = ToObject(this);
2711 var lenValue = o.length;
2712 var len = ToInteger(lenValue);
2713 if (!IsCallable(predicate)) throw TypeError();
2714 var t = arguments.length > 1 ? arguments[1] : undefined;
2715 var k = 0;
2716 while (k < len) {
2717 var pk = String(k);
2718 var kPresent = HasProperty(o, pk);
2719 if (kPresent) {
2720 var kValue = o[pk];
2721 var testResult = predicate.call(t, kValue, k, o);
2722 if (Boolean(testResult)) {
2723 return kValue;
2724 }
2725 }
2726 ++k;
2727 }
2728 return undefined;
2729 });
2730
2731 // 22.1.3.9 Array.prototype.findIndex ( predicate [ , thisArg ] )
2732 define(
2733 Array.prototype, 'findIndex',
2734 function findIndex(predicate) {
2735 var o = ToObject(this);
2736 var lenValue = o.length;
2737 var len = ToLength(lenValue);
2738 if (!IsCallable(predicate)) throw TypeError();
2739 var t = arguments.length > 1 ? arguments[1] : undefined;
2740 var k = 0;
2741 while (k < len) {
2742 var pk = String(k);
2743 var kPresent = HasProperty(o, pk);
2744 if (kPresent) {
2745 var kValue = o[pk];
2746 var testResult = predicate.call(t, kValue, k, o);
2747 if (Boolean(testResult)) {
2748 return k;
2749 }
2750 }
2751 ++k;
2752 }
2753 return -1;
2754 });
2755
2756 // 22.1.3.10 Array.prototype.forEach ( callbackfn [ , thisArg ] )
2757 // 22.1.3.11 Array.prototype.indexOf ( searchElement [ , fromIndex ] )
2758 // 22.1.3.12 Array.prototype.join (separator)
2759
2760 // 22.1.3.13 Array.prototype.keys ( )
2761 define(
2762 Array.prototype, 'keys',
2763 function keys() {
2764 return CreateArrayIterator(this, 'key');
2765 }, !nativeArrayIteratorMethods);
2766
2767 // 22.1.3.14 Array.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
2768 // 22.1.3.15 Array.prototype.map ( callbackfn [ , thisArg ] )
2769 // 22.1.3.16 Array.prototype.pop ( )
2770 // 22.1.3.17 Array.prototype.push ( ...items )
2771 // 22.1.3.18 Array.prototype.reduce ( callbackfn [ , initialValue ] )
2772 // 22.1.3.19 Array.prototype.reduceRight ( callbackfn [ , initialValue ] )
2773 // 22.1.3.20 Array.prototype.reverse ( )
2774 // 22.1.3.21 Array.prototype.shift ( )
2775 // 22.1.3.22 Array.prototype.slice (start, end)
2776 // 22.1.3.23 Array.prototype.some ( callbackfn [ , thisArg ] )
2777 // 22.1.3.24 Array.prototype.sort (comparefn)
2778 // 22.1.3.25 Array.prototype.splice (start, deleteCount , ...items )
2779 // 22.1.3.26 Array.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
2780 // 22.1.3.27 Array.prototype.toString ( )
2781 // 22.1.3.28 Array.prototype.unshift ( ...items )
2782
2783 // 22.1.3.29 Array.prototype.values ( )
2784 define(
2785 Array.prototype, 'values',
2786 function values() {
2787 return CreateArrayIterator(this, 'value');
2788 }, !nativeArrayIteratorMethods);
2789
2790 // 22.1.3.30 Array.prototype [ @@iterator ] ( )
2791 define(
2792 Array.prototype, $$iterator,
2793 Array.prototype.values
2794 );
2795
2796 // 22.1.3.31 Array.prototype [ @@unscopables ]
2797 // 22.1.4 Properties of Array Instances
2798 // 22.1.4.1 length
2799
2800 // 22.1.5 Array Iterator Objects
2801 function ArrayIterator() {}
2802
2803 // 22.1.5.1 CreateArrayIterator Abstract Operation
2804 function CreateArrayIterator(array, kind) {
2805 var o = ToObject(array);
2806 var iterator = new ArrayIterator;
2807 set_internal(iterator, '[[IteratedObject]]', o);
2808 set_internal(iterator, '[[ArrayIteratorNextIndex]]', 0);
2809 set_internal(iterator, '[[ArrayIterationKind]]', kind);
2810 return iterator;
2811 }
2812
2813 // 22.1.5.2 The %ArrayIteratorPrototype% Object
2814 var $ArrayIteratorPrototype$ = Object.create($IteratorPrototype$);
2815 ArrayIterator.prototype = $ArrayIteratorPrototype$;
2816
2817 // 22.1.5.2.1 %ArrayIteratorPrototype%. next( )
2818 define(
2819 $ArrayIteratorPrototype$, 'next',
2820 function next() {
2821 var o = strict(this);
2822 if (Type(o) !== 'object') throw TypeError();
2823 var a = o['[[IteratedObject]]'],
2824 index = o['[[ArrayIteratorNextIndex]]'],
2825 itemKind = o['[[ArrayIterationKind]]'],
2826 lenValue = a.length,
2827 len = ToUint32(lenValue),
2828 elementKey,
2829 elementValue;
2830 if (itemKind.indexOf('sparse') !== -1) {
2831 var found = false;
2832 while (!found && index < len) {
2833 elementKey = String(index);
2834 found = HasProperty(a, elementKey);
2835 if (!found) {
2836 index += 1;
2837 }
2838 }
2839 }
2840 if (index >= len) {
2841 set_internal(o, '[[ArrayIteratorNextIndex]]', Infinity);
2842 return CreateIterResultObject(undefined, true);
2843 }
2844 elementKey = index;
2845 set_internal(o, '[[ArrayIteratorNextIndex]]', index + 1);
2846 if (itemKind.indexOf('value') !== -1)
2847 elementValue = a[elementKey];
2848 if (itemKind.indexOf('key+value') !== -1)
2849 return CreateIterResultObject([elementKey, elementValue], false);
2850 if (itemKind.indexOf('key') !== -1)
2851 return CreateIterResultObject(elementKey, false);
2852 if (itemKind === 'value')
2853 return CreateIterResultObject(elementValue, false);
2854 throw Error('Internal error');
2855 });
2856
2857 // 22.1.5.2.2 %ArrayIteratorPrototype% [ @@toStringTag ]
2858 define($ArrayIteratorPrototype$, $$toStringTag, 'Array Iterator');
2859
2860 // 22.1.5.3 Properties of Array Iterator Instances
2861
2862
2863 // ---------------------------------------
2864 // 22.2 TypedArray Objects
2865 // ---------------------------------------
2866
2867 // See typedarray.js for TypedArray polyfill
2868
2869 ['Int8Array', 'Uint8Array', 'Uint8ClampedArray',
2870 'Int16Array', 'Uint16Array',
2871 'Int32Array', 'Uint32Array',
2872 'Float32Array', 'Float64Array'].forEach(function ($TypedArrayName$) {
2873 if (!($TypedArrayName$ in global))
2874 return;
2875 var $TypedArray$ = global[$TypedArrayName$];
2876
2877 // 22.2.1 The %TypedArray% Intrinsic Object
2878 // 22.2.1.1 %TypedArray% ( length )
2879 // 22.2.1.2 %TypedArray% ( typedArray )
2880 // 22.2.1.3 %TypedArray% ( object )
2881 // 22.2.1.4 %TypedArray% ( buffer [ , byteOffset [ , length ] ] )
2882 // 22.2.1.5 %TypedArray% ( all other argument combinations )
2883 // 22.2.2 Properties of the %TypedArray% Intrinsic Object
2884
2885 // 22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
2886 define(
2887 $TypedArray$, 'from',
2888 function from(source) {
2889 var mapfn = arguments[1];
2890 var thisArg = arguments[2];
2891
2892 var c = strict(this);
2893 if (!IsConstructor(c)) throw TypeError();
2894 if (mapfn === undefined) {
2895 var mapping = false;
2896 } else {
2897 if (IsCallable(mapfn)) throw TypeError();
2898 var t = thisArg;
2899 mapping = true;
2900 }
2901 var usingIterator = GetMethod(source, $$iterator);
2902 if (usingIterator !== undefined) {
2903 var iterator = GetIterator(source, usingIterator);
2904 var values = [];
2905 var next = true;
2906 while (next !== false) {
2907 next = IteratorStep(iterator);
2908 if (next !== false) {
2909 var nextValue = IteratorValue(next);
2910 values.push(nextValue);
2911 }
2912 }
2913 var len = values.length;
2914 var newObj = new c(len);
2915 var k = 0;
2916 while (k < len) {
2917 var kValue = values.shift();
2918 if (mapping) {
2919 var mappedValue = mapfn.call(t, kValue);
2920 } else {
2921 mappedValue = kValue;
2922 }
2923 newObj[k] = mappedValue;
2924 ++k;
2925 }
2926 console.assert(values.length === 0);
2927 return newObj;
2928 }
2929 var arrayLike = ToObject(source);
2930 var lenValue = arrayLike.length;
2931 len = ToLength(lenValue);
2932 newObj = new c(len);
2933 k = 0;
2934 while (k < len) {
2935 kValue = arrayLike[k];
2936 if (mapping) {
2937 mappedValue = mapfn.call(t, kValue, k);
2938 } else {
2939 mappedValue = kValue;
2940 }
2941 newObj[k] = mappedValue;
2942 ++k;
2943 }
2944 return newObj;
2945 });
2946
2947 // 22.2.2.2 %TypedArray%.of ( ...items )
2948 define(
2949 $TypedArray$, 'of',
2950 function of() {
2951 var items = arguments;
2952
2953 var len = items.length;
2954 var c = strict(this);
2955 var newObj = new c(len);
2956 var k = 0;
2957 while (k < len) {
2958 newObj[k] = items[k];
2959 ++k;
2960 }
2961 return newObj;
2962 });
2963
2964 // 22.2.2.3 %TypedArray%.prototype
2965 // 22.2.2.4 get %TypedArray% [ @@species ]
2966 // 22.2.3 Properties of the %TypedArrayPrototype% Object
2967 // 22.2.3.1 get %TypedArray%.prototype.buffer
2968 // 22.2.3.2 get %TypedArray%.prototype.byteLength
2969 // 22.2.3.3 get %TypedArray%.prototype.byteOffset
2970 // 22.2.3.4 %TypedArray%.prototype.constructor
2971
2972 // 22.2.3.5 %TypedArray%.prototype.copyWithin (target, start [, end ] )
2973 define($TypedArray$.prototype, 'copyWithin', Array.prototype.copyWithin);
2974
2975 // 22.2.3.6 %TypedArray%.prototype.entries ( )
2976 define($TypedArray$.prototype, 'entries', Array.prototype.entries);
2977
2978 // 22.2.3.7 %TypedArray%.prototype.every ( callbackfn [ , thisArg ] )
2979 define($TypedArray$.prototype, 'every', Array.prototype.every);
2980
2981 // 22.2.3.8 %TypedArray%.prototype.fill (value [ , start [ , end ] ] )
2982 define(
2983 $TypedArray$.prototype, 'fill',
2984 //Array.prototype.fill // Doesn't work in Safari 7
2985 function fill(value/*, start, end*/) {
2986 var start = arguments[1],
2987 end = arguments[2];
2988
2989 var o = ToObject(this);
2990 var lenVal = o.length;
2991 var len = ToLength(lenVal);
2992 len = max(len, 0);
2993 var relativeStart = ToInteger(start);
2994 var k;
2995 if (relativeStart < 0) k = max((len + relativeStart), 0);
2996 else k = min(relativeStart, len);
2997 var relativeEnd;
2998 if (end === undefined) relativeEnd = len;
2999 else relativeEnd = ToInteger(end);
3000 var final;
3001 if (relativeEnd < 0) final = max((len + relativeEnd), 0);
3002 else final = min(relativeEnd, len);
3003 while (k < final) {
3004 var pk = String(k);
3005 o[pk] = value;
3006 k += 1;
3007 }
3008 return o;
3009 });
3010
3011 // 22.2.3.9 %TypedArray%.prototype.filter ( callbackfn [ , thisArg ] )
3012 define(
3013 $TypedArray$.prototype, 'filter',
3014 function filter(callbackfn) {
3015 var thisArg = arguments[1];
3016
3017 var o = ToObject(this);
3018 var lenVal = o.length;
3019 var len = ToLength(lenVal);
3020 if (!IsCallable(callbackfn)) throw TypeError();
3021 var t = thisArg;
3022 var c = o.constructor;
3023 var kept = [];
3024 var k = 0;
3025 var captured = 0;
3026 while (k < len) {
3027 var kValue = o[k];
3028 var selected = callbackfn.call(t, kValue, k, o);
3029 if (selected) {
3030 kept.push(kValue);
3031 ++captured;
3032 }
3033 ++k;
3034 }
3035 var a = new c(captured);
3036 var n = 0;
3037 for (var i = 0; i < kept.length; ++i) {
3038 var e = kept[i];
3039 a[n] = e;
3040 ++n;
3041 }
3042 return a;
3043 });
3044
3045 // 22.2.3.10 %TypedArray%.prototype.find (predicate [ , thisArg ] )
3046 define($TypedArray$.prototype, 'find', Array.prototype.find);
3047
3048 // 22.2.3.11 %TypedArray%.prototype.findIndex ( predicate [ , thisArg ] )
3049 define($TypedArray$.prototype, 'findIndex', Array.prototype.findIndex);
3050
3051 // 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
3052 define($TypedArray$.prototype, 'forEach', Array.prototype.forEach);
3053
3054 // 22.2.3.13 %TypedArray%.prototype.indexOf (searchElement [ , fromIndex ] )
3055 define($TypedArray$.prototype, 'indexOf', Array.prototype.indexOf);
3056
3057 // 22.2.3.14 %TypedArray%.prototype.join ( separator )
3058 define($TypedArray$.prototype, 'join', Array.prototype.join);
3059
3060 // 22.2.3.15 %TypedArray%.prototype.keys ( )
3061 define($TypedArray$.prototype, 'keys', Array.prototype.keys);
3062
3063 // 22.2.3.16 %TypedArray%.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
3064 define($TypedArray$.prototype, 'lastIndexOf', Array.prototype.lastIndexOf);
3065
3066 // 22.2.3.17 get %TypedArray%.prototype.length
3067
3068 // 22.2.3.18 %TypedArray%.prototype.map ( callbackfn [ , thisArg ] )
3069 define(
3070 $TypedArray$.prototype, 'map',
3071 function map(callbackfn) {
3072 var thisArg = arguments[1];
3073
3074 var o = ToObject(this);
3075 var lenValue = o.length;
3076 var len = ToLength(lenValue);
3077 if (!IsCallable(callbackfn)) throw TypeError();
3078 var t = thisArg;
3079 var a = undefined;
3080 var c = o.constructor;
3081 if (IsConstructor(c))
3082 a = new c(len);
3083 if (a === undefined)
3084 a = new Array(len);
3085 var k = 0;
3086 while (k < len) {
3087 var kPresent = HasProperty(o, k);
3088 if (kPresent) {
3089 var kValue = o[k];
3090 var mappedValue = callbackfn.call(t, kValue, k, o);
3091 a[k] = mappedValue;
3092 }
3093 ++k;
3094 }
3095 return a;
3096 });
3097
3098 // 22.2.3.19 %TypedArray%.prototype.reduce ( callbackfn [, initialValue] )
3099 define($TypedArray$.prototype, 'reduce', Array.prototype.reduce);
3100
3101 // 22.2.3.20 %TypedArray%.prototype.reduceRight ( callbackfn [, initialValue] )
3102 define($TypedArray$.prototype, 'reduceRight', Array.prototype.reduceRight);
3103
3104 // 22.2.3.21 %TypedArray%.prototype.reverse ( )
3105 define($TypedArray$.prototype, 'reverse', Array.prototype.reverse);
3106
3107 // 22.2.3.22 %TypedArray%.prototype.set ( overloaded [ , offset ])
3108 // 22.2.3.22.1 %TypedArray%.prototype.set (array [ , offset ] )
3109 // 22.2.3.22.2 %TypedArray%.prototype.set(typedArray [, offset ] )
3110
3111 // 22.2.3.23 %TypedArray%.prototype.slice ( start, end )
3112 define(
3113 $TypedArray$.prototype, 'slice',
3114 function slice(start, end) {
3115 var o = ToObject(this);
3116 var lenVal = o.length;
3117 var len = ToLength(lenVal);
3118 var relativeStart = ToInteger(start);
3119 var k = (relativeStart < 0) ? max(len + relativeStart, 0) : min(relativeStart, len);
3120 var relativeEnd = (end === undefined) ? len : ToInteger(end);
3121 var final = (relativeEnd < 0) ? max(len + relativeEnd, 0) : min(relativeEnd, len);
3122 var count = final - k;
3123 var c = o.constructor;
3124 if (IsConstructor(c)) {
3125 var a = new c(count);
3126 } else {
3127 throw TypeError();
3128 }
3129 var n = 0;
3130 while (k < final) {
3131 var kValue = o[k];
3132 a[n] = kValue;
3133 ++k;
3134 ++n;
3135 }
3136 return a;
3137 });
3138
3139 // 22.2.3.24 %TypedArray%.prototype.some ( callbackfn [ , thisArg ] )
3140 define($TypedArray$.prototype, 'some', Array.prototype.some);
3141
3142 // 22.2.3.25 %TypedArray%.prototype.sort ( comparefn )
3143 define(
3144 $TypedArray$.prototype, 'sort',
3145 function sort() {
3146 var comparefn = arguments[0];
3147
3148 function sortCompare(x, y) {
3149 console.assert(Type(x) === 'number' && Type(y) === 'number');
3150 if (x !== x && y !== y) return +0;
3151 if (x !== x) return 1;
3152 if (y !== y) return -1;
3153 if (comparefn !== undefined) {
3154 return comparefn(x, y);
3155 }
3156 if (x < y) return -1;
3157 if (x > y) return 1;
3158 return +0;
3159 }
3160 return Array.prototype.sort.call(this, sortCompare);
3161 });
3162
3163 // 22.2.3.26 %TypedArray%.prototype.subarray( [ begin [ , end ] ] )
3164 // 22.2.3.27 %TypedArray%.prototype.toLocaleString ([ reserved1 [ , reserved2 ] ])
3165 // 22.2.3.28 %TypedArray%.prototype.toString ( )
3166
3167 // 22.2.3.29 %TypedArray%.prototype.values ( )
3168 define($TypedArray$.prototype, 'values', Array.prototype.values);
3169
3170 // 22.2.3.30 %TypedArray%.prototype [ @@iterator ] ( )
3171 define(
3172 $TypedArray$.prototype, $$iterator,
3173 $TypedArray$.prototype.values
3174 );
3175
3176 // 22.2.3.31 get %TypedArray%.prototype [ @@toStringTag ]
3177 define($TypedArray$.prototype, $$toStringTag, $TypedArrayName$);
3178
3179 // 22.2.4 The TypedArray Constructors
3180 // 22.2.4.1TypedArray( ... argumentsList)
3181 // 22.2.5 Properties of the TypedArray Constructors
3182 // 22.2.5.1 TypedArray.BYTES_PER_ELEMENT
3183 // 22.2.5.2 TypedArray.prototype
3184 // 22.2.6 Properties of TypedArray Prototype Objects
3185 // 22.2.6.1 TypedArray.prototype.BYTES_PER_ELEMENT
3186 // 22.2.6.2 TypedArray.prototype.constructor
3187 // 22.2.7 Properties of TypedArray Instances
3188 });
3189
3190 // ---------------------------------------
3191 // 23 Keyed Collection
3192 // ---------------------------------------
3193
3194 // ---------------------------------------
3195 // 23.1 Map Objects
3196 // ---------------------------------------
3197
3198 (function() {
3199 // 23.1.1 The Map Constructor
3200
3201 // 23.1.1.1 Map ( [ iterable ] )
3202 /** @constructor */
3203 function Map(/*iterable*/) {
3204 var map = strict(this);
3205 var iterable = arguments[0];
3206
3207 if (Type(map) !== 'object') throw TypeError();
3208 if ('[[MapData]]' in map) throw TypeError();
3209
3210 if (iterable !== undefined) {
3211 var adder = map['set'];
3212 if (!IsCallable(adder)) throw TypeError();
3213 var iter = GetIterator(ToObject(iterable));
3214 }
3215 set_internal(map, '[[MapData]]', { keys: [], values: [] });
3216 if (iter === undefined) return map;
3217 while (true) {
3218 var next = IteratorStep(iter);
3219 if (next === false)
3220 return map;
3221 var nextItem = IteratorValue(next);
3222 if (Type(nextItem) !== 'object') throw TypeError();
3223 var k = nextItem[0];
3224 var v = nextItem[1];
3225 adder.call(map, k, v);
3226 }
3227
3228 return map;
3229 }
3230
3231 if (!('Map' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
3232 (function() { try { new global.Map([]); return false; } catch (_) { return true; } }()) ||
3233 (function() { try { return !new global.Map().entries().next; } catch (_) { return true; } }()) ||
3234 (new global.Map([['a', 1]]).size !== 1))
3235 global.Map = Map;
3236
3237
3238 function MapDataIndexOf(mapData, key) {
3239 var i;
3240 if (key === key) return mapData.keys.indexOf(key);
3241 // Slow case for NaN
3242 for (i = 0; i < mapData.keys.length; i += 1)
3243 if (SameValueZero(mapData.keys[i], key)) return i;
3244 return -1;
3245 }
3246
3247 // 23.1.1.2 new Map ( ... argumentsList )
3248 // 23.1.2 Properties of the Map Constructor
3249 // 23.1.2.1 Map.prototype
3250 var $MapPrototype$ = {};
3251 Map.prototype = $MapPrototype$;
3252
3253 // 23.1.2.2 get Map [ @@species ]
3254
3255 // 23.1.3 Properties of the Map Prototype Object
3256 // 23.1.3.1 Map.prototype.clear ()
3257 define(
3258 Map.prototype, 'clear',
3259 function clear() {
3260 var m = strict(this);
3261 if (Type(m) !== 'object') throw TypeError();
3262 if (!('[[MapData]]' in m)) throw TypeError();
3263 if (m['[[MapData]]'] === undefined) throw TypeError();
3264 var entries = m['[[MapData]]'];
3265 entries.keys.length = 0;
3266 entries.values.length = 0;
3267 return undefined;
3268 });
3269
3270 // 23.1.3.2 Map.prototype.constructor
3271
3272 // 23.1.3.3 Map.prototype.delete ( key )
3273 define(
3274 Map.prototype, 'delete',
3275 function delete_(key) {
3276 var m = strict(this);
3277 if (Type(m) !== 'object') throw TypeError();
3278 if (!('[[MapData]]' in m)) throw TypeError();
3279 if (m['[[MapData]]'] === undefined) throw TypeError();
3280 var entries = m['[[MapData]]'];
3281 var i = MapDataIndexOf(entries, key);
3282 if (i < 0) return false;
3283 entries.keys[i] = empty;
3284 entries.values[i] = empty;
3285 return true;
3286 });
3287
3288 // 23.1.3.4 Map.prototype.entries ( )
3289 define(
3290 Map.prototype, 'entries',
3291 function entries() {
3292 var m = strict(this);
3293 if (Type(m) !== 'object') throw TypeError();
3294 return CreateMapIterator(m, 'key+value');
3295 });
3296
3297 // 23.1.3.5 Map.prototype.forEach ( callbackfn [ , thisArg ] )
3298 define(
3299 Map.prototype, 'forEach',
3300 function forEach(callbackfn /*, thisArg*/) {
3301 var thisArg = arguments[1];
3302
3303 var m = strict(this);
3304 if (Type(m) !== 'object') throw TypeError();
3305 if (!('[[MapData]]' in m)) throw TypeError();
3306 if (m['[[MapData]]'] === undefined) throw TypeError();
3307 var entries = m['[[MapData]]'];
3308
3309 if (!IsCallable(callbackfn)) {
3310 throw TypeError('First argument to forEach is not callable.');
3311 }
3312 for (var i = 0; i < entries.keys.length; ++i) {
3313 if (entries.keys[i] !== empty) {
3314 callbackfn.call(thisArg, entries.values[i], entries.keys[i], m);
3315 }
3316 }
3317 return undefined;
3318 });
3319
3320 // 23.1.3.6 Map.prototype.get ( key )
3321 define(
3322 Map.prototype, 'get',
3323 function get(key) {
3324 var m = strict(this);
3325 if (Type(m) !== 'object') throw TypeError();
3326 if (!('[[MapData]]' in m)) throw TypeError();
3327 if (m['[[MapData]]'] === undefined) throw TypeError();
3328 var entries = m['[[MapData]]'];
3329 var i = MapDataIndexOf(entries, key);
3330 if (i >= 0) return entries.values[i];
3331 return undefined;
3332 });
3333
3334 // 23.1.3.7 Map.prototype.has ( key )
3335 define(
3336 Map.prototype, 'has',
3337 function has(key) {
3338 var m = strict(this);
3339 if (Type(m) !== 'object') throw TypeError();
3340 if (!('[[MapData]]' in m)) throw TypeError();
3341 if (m['[[MapData]]'] === undefined) throw TypeError();
3342 var entries = m['[[MapData]]'];
3343 if (MapDataIndexOf(entries, key) >= 0) return true;
3344 return false;
3345 });
3346
3347 // 23.1.3.8 Map.prototype.keys ( )
3348 define(
3349 Map.prototype, 'keys',
3350 function keys() {
3351 var m = strict(this);
3352 if (Type(m) !== 'object') throw TypeError();
3353 return CreateMapIterator(m, 'key');
3354 });
3355
3356 // 23.1.3.9 Map.prototype.set ( key , value )
3357 define(
3358 Map.prototype, 'set',
3359 function set(key, value) {
3360 var m = strict(this);
3361 if (Type(m) !== 'object') throw TypeError();
3362 if (!('[[MapData]]' in m)) throw TypeError();
3363 if (m['[[MapData]]'] === undefined) throw TypeError();
3364 var entries = m['[[MapData]]'];
3365 var i = MapDataIndexOf(entries, key);
3366 if (i < 0) i = entries.keys.length;
3367 if (SameValue(key, -0)) key = 0;
3368 entries.keys[i] = key;
3369 entries.values[i] = value;
3370 return m;
3371 });
3372
3373 // 23.1.3.10 get Map.prototype.size
3374 Object.defineProperty(
3375 Map.prototype, 'size', {
3376 get: function() {
3377 var m = strict(this);
3378 if (Type(m) !== 'object') throw TypeError();
3379 if (!('[[MapData]]' in m)) throw TypeError();
3380 if (m['[[MapData]]'] === undefined) throw TypeError();
3381 var entries = m['[[MapData]]'];
3382 var count = 0;
3383 for (var i = 0; i < entries.keys.length; ++i) {
3384 if (entries.keys[i] !== empty)
3385 count = count + 1;
3386 }
3387 return count;
3388 }
3389 });
3390
3391 // 23.1.3.11 Map.prototype.values ( )
3392 define(
3393 Map.prototype, 'values',
3394 function values() {
3395 var m = strict(this);
3396 if (Type(m) !== 'object') throw TypeError();
3397 return CreateMapIterator(m, 'value');
3398 });
3399
3400 // 23.1.3.12 Map.prototype [ @@iterator ]( )
3401 define(
3402 Map.prototype, $$iterator,
3403 function() {
3404 var m = strict(this);
3405 if (Type(m) !== 'object') throw TypeError();
3406 return CreateMapIterator(m, 'key+value');
3407 });
3408
3409 // 23.1.3.13 Map.prototype [ @@toStringTag ]
3410 define(global.Map.prototype, $$toStringTag, 'Map');
3411
3412 // 23.1.4 Properties of Map Instances
3413 // 23.1.5 Map Iterator Objects
3414
3415 /** @constructor */
3416 function MapIterator() {}
3417
3418 // 23.1.5.1 CreateMapIterator Abstract Operation
3419 function CreateMapIterator(map, kind) {
3420 if (Type(map) !== 'object') throw TypeError();
3421 if (!('[[MapData]]' in map)) throw TypeError();
3422 if (map['[[MapData]]'] === undefined) throw TypeError();
3423 var iterator = new MapIterator;
3424 set_internal(iterator, '[[Map]]', map);
3425 set_internal(iterator, '[[MapNextIndex]]', 0);
3426 set_internal(iterator, '[[MapIterationKind]]', kind);
3427 return iterator;
3428 }
3429
3430 // 23.1.5.2 The %MapIteratorPrototype% Object
3431 var $MapIteratorPrototype$ = Object.create($IteratorPrototype$);
3432 MapIterator.prototype = $MapIteratorPrototype$;
3433
3434 // 23.1.5.2.1 %MapIteratorPrototype%.next ( )
3435 define(
3436 $MapIteratorPrototype$, 'next',
3437 function next() {
3438 var o = strict(this);
3439 if (Type(o) !== 'object') throw TypeError();
3440 var m = o['[[Map]]'],
3441 index = o['[[MapNextIndex]]'],
3442 itemKind = o['[[MapIterationKind]]'],
3443 entries = m['[[MapData]]'];
3444 while (index < entries.keys.length) {
3445 var e = {key: entries.keys[index], value: entries.values[index]};
3446 index = index += 1;
3447 set_internal(o, '[[MapNextIndex]]', index);
3448 if (e.key !== empty) {
3449 if (itemKind === 'key') {
3450 return CreateIterResultObject(e.key, false);
3451 } else if (itemKind === 'value') {
3452 return CreateIterResultObject(e.value, false);
3453 } else {
3454 return CreateIterResultObject([e.key, e.value], false);
3455 }
3456 }
3457 }
3458 return CreateIterResultObject(undefined, true);
3459 });
3460
3461 // 23.1.5.2.2 %MapIteratorPrototype% [ @@toStringTag ]
3462 define($MapIteratorPrototype$, $$toStringTag, 'Map Iterator');
3463
3464 // 23.1.5.3 Properties of Map Iterator Instances
3465 }());
3466
3467 // ---------------------------------------
3468 // 23.2 Set Objects
3469 // ---------------------------------------
3470
3471 (function() {
3472 // 23.2.1 The Set Constructor
3473 // 23.2.1.1 Set ( [ iterable ] )
3474
3475 /** @constructor */
3476 function Set(/*iterable*/) {
3477 var set = strict(this);
3478 var iterable = arguments[0];
3479
3480 if (Type(set) !== 'object') throw TypeError();
3481 if ('[[SetData]]' in set) throw TypeError();
3482
3483 if (iterable !== undefined) {
3484 var adder = set['add'];
3485 if (!IsCallable(adder)) throw TypeError();
3486 var iter = GetIterator(ToObject(iterable));
3487 }
3488 set_internal(set, '[[SetData]]', []);
3489 if (iter === undefined) return set;
3490 while (true) {
3491 var next = IteratorStep(iter);
3492 if (next === false)
3493 return set;
3494 var nextValue = IteratorValue(next);
3495 adder.call(set, nextValue);
3496 }
3497
3498 return set;
3499 }
3500
3501 if (!('Set' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
3502 (function() { try { return !new global.Set().entries().next; } catch (_) { return true; } }()) ||
3503 (new global.Set([1]).size !== 1))
3504 global.Set = Set;
3505
3506 function SetDataIndexOf(setData, key) {
3507 var i;
3508 if (key === key)
3509 return setData.indexOf(key);
3510 // Slow case for NaN
3511 for (i = 0; i < setData.length; i += 1)
3512 if (SameValueZero(setData[i], key)) return i;
3513 return -1;
3514 }
3515
3516 // 23.2.1.2 new Set ( ...argumentsList )
3517 // 23.2.2 Properties of the Set Constructor
3518
3519 // 23.2.2.1 Set.prototype
3520 var $SetPrototype$ = {};
3521 Set.prototype = $SetPrototype$;
3522
3523 // 23.2.2.2 get Set [ @@species ]
3524 // 23.2.3 Properties of the Set Prototype Object
3525
3526 // 23.2.3.1 Set.prototype.add (value )
3527 define(
3528 Set.prototype, 'add',
3529 function add(value) {
3530 var s = strict(this);
3531 if (Type(s) !== 'object') throw TypeError();
3532 if (!('[[SetData]]' in s)) throw TypeError();
3533 if (s['[[SetData]]'] === undefined) throw TypeError();
3534 if (SameValue(value, -0)) value = 0;
3535 var entries = s['[[SetData]]'];
3536 var i = SetDataIndexOf(entries, value);
3537 if (i < 0) i = s['[[SetData]]'].length;
3538 s['[[SetData]]'][i] = value;
3539
3540 return s;
3541 });
3542
3543 // 23.2.3.2 Set.prototype.clear ()
3544 define(
3545 Set.prototype, 'clear',
3546 function clear() {
3547 var s = strict(this);
3548 if (Type(s) !== 'object') throw TypeError();
3549 if (!('[[SetData]]' in s)) throw TypeError();
3550 if (s['[[SetData]]'] === undefined) throw TypeError();
3551 var entries = s['[[SetData]]'];
3552 entries.length = 0;
3553 return undefined;
3554 });
3555
3556 // 23.2.3.3 Set.prototype.constructor
3557 // 23.2.3.4 Set.prototype.delete ( value )
3558 define(
3559 Set.prototype, 'delete',
3560 function delete_(value) {
3561 var s = strict(this);
3562 if (Type(s) !== 'object') throw TypeError();
3563 if (!('[[SetData]]' in s)) throw TypeError();
3564 if (s['[[SetData]]'] === undefined) throw TypeError();
3565 var entries = s['[[SetData]]'];
3566 var i = SetDataIndexOf(entries, value);
3567 if (i < 0) return false;
3568 entries[i] = empty;
3569 return true;
3570 });
3571
3572 // 23.2.3.5 Set.prototype.entries ( )
3573 define(
3574 Set.prototype, 'entries',
3575 function entries() {
3576 var s = strict(this);
3577 if (Type(s) !== 'object') throw TypeError();
3578 return CreateSetIterator(s, 'key+value');
3579 });
3580
3581 // 23.2.3.6 Set.prototype.forEach ( callbackfn [ , thisArg ] )
3582 define(
3583 Set.prototype, 'forEach',
3584 function forEach(callbackfn/*, thisArg*/) {
3585 var thisArg = arguments[1];
3586
3587 var s = strict(this);
3588 if (Type(s) !== 'object') throw TypeError();
3589 if (!('[[SetData]]' in s)) throw TypeError();
3590 if (s['[[SetData]]'] === undefined) throw TypeError();
3591 var entries = s['[[SetData]]'];
3592
3593 if (!IsCallable(callbackfn)) {
3594 throw TypeError('First argument to forEach is not callable.');
3595 }
3596 for (var i = 0; i < entries.length; ++i) {
3597 if (entries[i] !== empty) {
3598 callbackfn.call(thisArg, entries[i], entries[i], s);
3599 }
3600 }
3601 });
3602
3603 // 23.2.3.7 Set.prototype.has ( value )
3604 define(
3605 Set.prototype, 'has',
3606 function has(key) {
3607 var s = strict(this);
3608 if (Type(s) !== 'object') throw TypeError();
3609 if (!('[[SetData]]' in s)) throw TypeError();
3610 if (s['[[SetData]]'] === undefined) throw TypeError();
3611 var entries = s['[[SetData]]'];
3612 return SetDataIndexOf(entries, key) !== -1;
3613 });
3614
3615 // 23.2.3.8 Set.prototype.keys ( )
3616 // See Set.prototype.values
3617
3618 // 23.2.3.9 get Set.prototype.size
3619 Object.defineProperty(
3620 Set.prototype, 'size', {
3621 get: function() {
3622 var s = strict(this);
3623 if (Type(s) !== 'object') throw TypeError();
3624 if (!('[[SetData]]' in s)) throw TypeError();
3625 if (s['[[SetData]]'] === undefined) throw TypeError();
3626 var entries = s['[[SetData]]'];
3627 var count = 0;
3628 for (var i = 0; i < entries.length; ++i) {
3629 if (entries[i] !== empty)
3630 count = count + 1;
3631 }
3632 return count;
3633 }
3634 });
3635
3636 // 23.2.3.10 Set.prototype.values ( )
3637 define(
3638 Set.prototype, 'values',
3639 function values() {
3640 var s = strict(this);
3641 if (Type(s) !== 'object') throw TypeError();
3642 return CreateSetIterator(s, 'value');
3643 });
3644 // NOTE: function name is still 'values':
3645 Set.prototype.keys = Set.prototype.values;
3646
3647 // 23.2.3.11 Set.prototype [@@iterator ] ( )
3648 define(
3649 Set.prototype, $$iterator,
3650 function() {
3651 var s = strict(this);
3652 if (Type(s) !== 'object') throw TypeError();
3653 return CreateSetIterator(s);
3654 });
3655
3656 // 23.2.3.12 Set.prototype [ @@toStringTag ]
3657 define(global.Set.prototype, $$toStringTag, 'Set');
3658
3659 // 23.2.4 Properties of Set Instances
3660 // 23.2.5 Set Iterator Objects
3661 /** @constructor */
3662 function SetIterator() {}
3663
3664 // 23.2.5.1 CreateSetIterator Abstract Operation
3665 function CreateSetIterator(set, kind) {
3666 if (Type(set) !== 'object') throw TypeError();
3667 if (!('[[SetData]]' in set)) throw TypeError();
3668 if (set['[[SetData]]'] === undefined) throw TypeError();
3669 var iterator = new SetIterator;
3670 set_internal(iterator, '[[IteratedSet]]', set);
3671 set_internal(iterator, '[[SetNextIndex]]', 0);
3672 set_internal(iterator, '[[SetIterationKind]]', kind);
3673 return iterator;
3674 }
3675
3676 // 23.2.5.2 The %SetIteratorPrototype% Object
3677 var $SetIteratorPrototype$ = Object.create($IteratorPrototype$);
3678 SetIterator.prototype = $SetIteratorPrototype$;
3679
3680 // 23.2.5.2.1 %SetIteratorPrototype%.next( )
3681 define(
3682 $SetIteratorPrototype$, 'next',
3683 function next() {
3684 var o = strict(this);
3685 if (Type(o) !== 'object') throw TypeError();
3686 var s = o['[[IteratedSet]]'],
3687 index = o['[[SetNextIndex]]'],
3688 itemKind = o['[[SetIterationKind]]'],
3689 entries = s['[[SetData]]'];
3690 while (index < entries.length) {
3691 var e = entries[index];
3692 index = index += 1;
3693 set_internal(o, '[[SetNextIndex]]', index);
3694 if (e !== empty) {
3695 if (itemKind === 'key+value')
3696 return CreateIterResultObject([e, e], false);
3697 return CreateIterResultObject(e, false);
3698 }
3699 }
3700 return CreateIterResultObject(undefined, true);
3701 });
3702
3703 // 23.2.5.2.2 %SetIteratorPrototype% [ @@toStringTag ]
3704 define($SetIteratorPrototype$, $$toStringTag, 'Set Iterator');
3705
3706 // 23.2.5.3 Properties of Set Iterator Instances
3707
3708 }());
3709
3710 // ---------------------------------------
3711 // 23.3 WeakMap Objects
3712 // ---------------------------------------
3713
3714 (function() {
3715 // 23.3.1 The WeakMap Constructor
3716 // 23.3.1.1 WeakMap ( [ iterable ] )
3717 /** @constructor */
3718 function WeakMap(/*iterable*/) {
3719 var map = strict(this);
3720 var iterable = arguments[0];
3721
3722 if (Type(map) !== 'object') throw TypeError();
3723 if ('[[WeakMapData]]' in map) throw TypeError();
3724
3725 if (iterable !== undefined) {
3726 var adder = map['set'];
3727 if (!IsCallable(adder)) throw TypeError();
3728 var iter = GetIterator(ToObject(iterable));
3729 }
3730 set_internal(map, '[[WeakMapData]]', new EphemeronTable);
3731 if (iter === undefined) return map;
3732 while (true) {
3733 var next = IteratorStep(iter);
3734 if (next === false)
3735 return map;
3736 var nextValue = IteratorValue(next);
3737 if (Type(nextValue) !== 'object') throw TypeError();
3738 var k = nextValue[0];
3739 var v = nextValue[1];
3740 adder.call(map, k, v);
3741 }
3742
3743 return map;
3744 }
3745
3746 if (!('WeakMap' in global) || OVERRIDE_NATIVE_FOR_TESTING)
3747 global.WeakMap = WeakMap;
3748
3749 // 23.3.2 Properties of the WeakMap Constructor
3750 // 23.3.2.1 WeakMap.prototype
3751 var $WeakMapPrototype$ = {};
3752 WeakMap.prototype = $WeakMapPrototype$;
3753
3754
3755
3756 // 23.3.2.2 WeakMap[ @@create ] ( )
3757 // 23.3.3 Properties of the WeakMap Prototype Object
3758
3759 // 23.3.3.1 WeakMap.prototype.constructor
3760
3761 // 23.3.3.2 WeakMap.prototype.delete ( key )
3762 define(
3763 WeakMap.prototype, 'delete',
3764 function delete_(key) {
3765 var M = strict(this);
3766 if (Type(M) !== 'object') throw TypeError();
3767 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3768 if (Type(key) !== 'object') throw TypeError('Expected object');
3769 return M['[[WeakMapData]]'].remove(key);
3770 });
3771
3772 // 23.3.3.3 WeakMap.prototype.get ( key )
3773 define(
3774 WeakMap.prototype, 'get',
3775 function get(key, defaultValue) {
3776 var M = strict(this);
3777 if (Type(M) !== 'object') throw TypeError();
3778 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3779 if (Type(key) !== 'object') throw TypeError('Expected object');
3780 return M['[[WeakMapData]]'].get(key, defaultValue);
3781 });
3782
3783 // 23.3.3.4 WeakMap.prototype.has ( key )
3784 define(
3785 WeakMap.prototype, 'has',
3786 function has(key) {
3787 var M = strict(this);
3788 if (Type(M) !== 'object') throw TypeError();
3789 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3790 if (Type(key) !== 'object') throw TypeError('Expected object');
3791 return M['[[WeakMapData]]'].has(key);
3792 });
3793
3794 // 23.3.3.5 WeakMap.prototype.set ( key , value )
3795 define(
3796 WeakMap.prototype, 'set',
3797 function set(key, value) {
3798 var M = strict(this);
3799 if (Type(M) !== 'object') throw TypeError();
3800 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3801 if (Type(key) !== 'object') throw TypeError('Expected object');
3802 M['[[WeakMapData]]'].set(key, value);
3803 return M;
3804 });
3805
3806 // 23.3.3.6 WeakMap.prototype [ @@toStringTag ]
3807 define(global.WeakMap.prototype, $$toStringTag, 'WeakMap');
3808
3809 // 23.3.4 Properties of WeakMap Instances
3810
3811 // Polyfills for incomplete native implementations:
3812 (function() {
3813 var wm = new global.WeakMap();
3814 var orig = global.WeakMap.prototype.set;
3815 define(global.WeakMap.prototype, 'set', function set() {
3816 orig.apply(this, arguments);
3817 return this;
3818 }, wm.set({}, 0) !== wm);
3819 }());
3820 }());
3821
3822 // ---------------------------------------
3823 // 23.4 WeakSet Objects
3824 // ---------------------------------------
3825
3826 (function() {
3827 // 23.4.1 The WeakSet Constructor
3828 // 23.4.1.1 WeakSet ( [ iterable ] )
3829 /** @constructor */
3830 function WeakSet(/*iterable*/) {
3831 var set = strict(this);
3832 var iterable = arguments[0];
3833
3834 if (Type(set) !== 'object') throw TypeError();
3835 if ('[[WeakSetData]]' in set) throw TypeError();
3836
3837 if (iterable !== undefined) {
3838 var adder = set['add'];
3839 if (!IsCallable(adder)) throw TypeError();
3840 var iter = GetIterator(ToObject(iterable));
3841 }
3842 set_internal(set, '[[WeakSetData]]', new EphemeronTable);
3843 if (iter === undefined) return set;
3844 while (true) {
3845 var next = IteratorStep(iter);
3846 if (next === false)
3847 return set;
3848 var nextValue = IteratorValue(next);
3849 adder.call(set, nextValue);
3850 }
3851
3852 return set;
3853 }
3854
3855 if (!('WeakSet' in global) || OVERRIDE_NATIVE_FOR_TESTING)
3856 global.WeakSet = WeakSet;
3857
3858 // 23.4.2 Properties of the WeakSet Constructor
3859 // 23.4.2.1 WeakSet.prototype
3860 var $WeakSetPrototype$ = {};
3861 WeakSet.prototype = $WeakSetPrototype$;
3862
3863 // 23.4.3 Properties of the WeakSet Prototype Object
3864 // 23.4.3.1 WeakSet.prototype.add (value )
3865 define(
3866 WeakSet.prototype, 'add',
3867 function add(value) {
3868 var S = strict(this);
3869 if (Type(S) !== 'object') throw TypeError();
3870 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3871 if (Type(value) !== 'object') throw TypeError('Expected object');
3872 S['[[WeakSetData]]'].set(value, true);
3873 return S;
3874 });
3875
3876 // 23.4.3.2 WeakSet.prototype.constructor
3877 // 23.4.3.3 WeakSet.prototype.delete ( value )
3878 define(
3879 WeakSet.prototype, 'delete',
3880 function delete_(value) {
3881 var S = strict(this);
3882 if (Type(S) !== 'object') throw TypeError();
3883 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3884 if (Type(value) !== 'object') throw TypeError('Expected object');
3885 return S['[[WeakSetData]]'].remove(value);
3886 });
3887
3888 // 23.4.3.4 WeakSet.prototype.has ( value )
3889 define(
3890 WeakSet.prototype, 'has',
3891 function has(key) {
3892 var S = strict(this);
3893 if (Type(S) !== 'object') throw TypeError();
3894 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3895 if (Type(key) !== 'object') throw TypeError('Expected object');
3896 return S['[[WeakSetData]]'].has(key);
3897 });
3898
3899 // 23.4.3.5 WeakSet.prototype [ @@toStringTag ]
3900 define(global.WeakSet.prototype, $$toStringTag, 'WeakSet');
3901
3902 // 23.4.4 Properties of WeakSet Instances
3903
3904 // Polyfills for incomplete native implementations:
3905 (function() {
3906 var ws = new global.WeakSet();
3907 var orig = global.WeakSet.prototype.add;
3908 define(global.WeakSet.prototype, 'add', function add() {
3909 orig.apply(this, arguments);
3910 return this;
3911 }, ws.add({}) !== ws);
3912 }());
3913 }());
3914
3915 // ---------------------------------------
3916 // 24 Structured Data
3917 // ---------------------------------------
3918
3919 // ---------------------------------------
3920 // 24.1 ArrayBuffer Objects
3921 // ---------------------------------------
3922
3923 // See typedarray.js for TypedArray polyfill
3924
3925 (function() {
3926 if (!('ArrayBuffer' in global))
3927 return;
3928
3929 // 24.1.1 Abstract Operations For ArrayBuffer Objects
3930 // 24.1.1.1 AllocateArrayBuffer( constructor, byteLength )
3931 // 24.1.1.2 IsDetachedBuffer( arrayBuffer )
3932 // 24.1.1.3 DetachArrayBuffer( arrayBuffer )
3933 // 24.1.1.4 CloneArrayBuffer( srcBuffer, srcByteOffset [, cloneConstructor] )
3934 // 24.1.1.5 GetValueFromBuffer ( arrayBuffer, byteIndex, type, isLittleEndian )
3935 // 24.1.1.6 SetValueInBuffer ( arrayBuffer, byteIndex, type, value, isLittleEndian )
3936 // 24.1.2 The ArrayBuffer Constructor
3937 // 24.1.2.1 ArrayBuffer( length )
3938 // 24.1.3 Properties of the ArrayBuffer Constructor
3939
3940 // 24.1.3.1 ArrayBuffer.isView ( arg )
3941 define(
3942 ArrayBuffer, 'isView',
3943 function isView(arg) {
3944 if (Type(arg) !== 'object') return false;
3945 if ('buffer' in arg && arg.buffer instanceof ArrayBuffer) return true;
3946 return false;
3947 });
3948
3949 // 24.1.3.2 ArrayBuffer.prototype
3950 // 24.1.3.3 get ArrayBuffer [ @@species ]
3951 // 24.1.4 Properties of the ArrayBuffer Prototype Object
3952 // 24.1.4.1 get ArrayBuffer.prototype.byteLength
3953 // 24.1.4.2 ArrayBuffer.prototype.constructor
3954 // 24.1.4.3 ArrayBuffer.prototype.slice ( start , end)
3955
3956 // 24.1.4.4 ArrayBuffer.prototype [ @@toStringTag ]
3957 define(ArrayBuffer.prototype, $$toStringTag, 'ArrayBuffer');
3958
3959 // 24.1.5 Properties of the ArrayBuffer Instances
3960 }());
3961
3962 // ---------------------------------------
3963 // 24.2 DataView Objects
3964 // ---------------------------------------
3965
3966 // See typedarray.js for TypedArray polyfill
3967
3968 (function() {
3969 if (!('DataView' in global))
3970 return;
3971
3972 // 24.2.1 Abstract Operations For DataView Objects
3973 // 24.2.1.1 GetViewValue(view, requestIndex, isLittleEndian, type)
3974 // 24.2.1.2 SetViewValue(view, requestIndex, isLittleEndian, type, value)
3975 // 24.2.2 The DataView Constructor
3976 // 24.2.2.1 DataView (buffer [ , byteOffset [ , byteLength ] ] )
3977 // 24.2.3 Properties of the DataView Constructor
3978 // 24.2.3.1 DataView.prototype
3979 // 24.2.4 Properties of the DataView Prototype Object
3980 // 24.2.4.1 get DataView.prototype.buffer
3981 // 24.2.4.2 get DataView.prototype.byteLength
3982 // 24.2.4.3 get DataView.prototype.byteOffset
3983 // 24.2.4.4 DataView.prototype.constructor
3984 // 24.2.4.5 DataView.prototype.getFloat32 ( byteOffset [ , littleEndian ] )
3985 // 24.2.4.6 DataView.prototype.getFloat64 ( byteOffset [ , littleEndian ] )
3986 // 24.2.4.7 DataView.prototype.getInt8 ( byteOffset )
3987 // 24.2.4.8 DataView.prototype.getInt16 ( byteOffset [ , littleEndian ] )
3988 // 24.2.4.9 DataView.prototype.getInt32 ( byteOffset [ , littleEndian ] )
3989 // 24.2.4.10 DataView.prototype.getUint8 ( byteOffset )
3990 // 24.2.4.11 DataView.prototype.getUint16 ( byteOffset [ , littleEndian ] )
3991 // 24.2.4.12 DataView.prototype.getUint32 ( byteOffset [ , littleEndian ] )
3992 // 24.2.4.13 DataView.prototype.setFloat32 ( byteOffset, value [ , littleEndian ] )
3993 // 24.2.4.14 DataView.prototype.setFloat64 ( byteOffset, value [ , littleEndian ] )
3994 // 24.2.4.15 DataView.prototype.setInt8 ( byteOffset, value )
3995 // 24.2.4.16 DataView.prototype.setInt16 ( byteOffset, value [ , littleEndian ] )
3996 // 24.2.4.17 DataView.prototype.setInt32 ( byteOffset, value [ , littleEndian ] )
3997 // 24.2.4.18 DataView.prototype.setUint8 ( byteOffset, value )
3998 // 24.2.4.19 DataView.prototype.setUint16 ( byteOffset, value [ , littleEndian ] )
3999 // 24.2.4.20 DataView.prototype.setUint32 ( byteOffset, value [ , littleEndian ] )
4000
4001 // 24.2.4.21 DataView.prototype[ @@toStringTag ]
4002 define(DataView.prototype, $$toStringTag, 'DataView');
4003
4004 // 24.2.5 Properties of DataView Instances
4005 }());
4006
4007 // ---------------------------------------
4008 // 24.3 The JSON Object
4009 // ---------------------------------------
4010
4011 // 24.3.1 JSON.parse ( text [ , reviver ] )
4012 // 24.3.2 JSON.stringify ( value [ , replacer [ , space ] ] )
4013 // 24.3.3 JSON [ @@toStringTag ]
4014 define(JSON, $$toStringTag, 'JSON');
4015
4016 // ---------------------------------------
4017 // 25.1 Iteration
4018 // ---------------------------------------
4019
4020 // 25.1.1 Common Iteration Interfaces
4021 // 25.1.1.1 The Iterable Interface
4022 // 25.1.1.2 The Iterator Interface
4023 // 25.1.1.3 The IteratorResult Interface
4024
4025 // 25.1.2 The %IteratorPrototype% Object
4026 // Defined earlier, so other prototypes can reference it.
4027 // 25.1.2.1 %IteratorPrototype% [ @@iterator ] ( )
4028 define($IteratorPrototype$, $$iterator, function() {
4029 return this;
4030 });
4031
4032
4033 // ---------------------------------------
4034 // 25.4 Promise Objects
4035 // ---------------------------------------
4036
4037 (function() {
4038 // 25.4 Promise Objects
4039
4040 // 25.4.1 Promise Abstract Operations
4041
4042 // 25.4.1.1 PromiseCapability Records
4043 // 25.4.1.1.1 IfAbruptRejectPromise ( value, capability )
4044
4045 function IfAbruptRejectPromise(value, capability) {
4046 var rejectResult = capability['[[Reject]]'].call(undefined, value);
4047 return capability['[[Promise]]'];
4048 }
4049
4050 // 25.4.1.2 PromiseReaction Records
4051
4052 // 25.4.1.3 CreateResolvingFunctions ( promise )
4053
4054 function CreateResolvingFunctions(promise) {
4055 var alreadyResolved = {'[[value]]': false};
4056 var resolve = PromiseResolveFunction();
4057 set_internal(resolve, '[[Promise]]', promise);
4058 set_internal(resolve, '[[AlreadyResolved]]', alreadyResolved);
4059 var reject = PromiseRejectFunction();
4060 set_internal(reject, '[[Promise]]', promise);
4061 set_internal(reject, '[[AlreadyResolved]]', alreadyResolved);
4062 return { '[[Resolve]]': resolve, '[[Reject]]': reject};
4063 }
4064
4065 // 25.4.1.3.1 Promise Reject Functions
4066
4067 function PromiseRejectFunction() {
4068 var F = function(reason) {
4069 console.assert(Type(F['[[Promise]]']) === 'object');
4070 var promise = F['[[Promise]]'];
4071 var alreadyResolved = F['[[AlreadyResolved]]'];
4072 if (alreadyResolved['[[value]]']) return undefined;
4073 set_internal(alreadyResolved, '[[value]]', true);
4074 return RejectPromise(promise, reason);
4075 };
4076 return F;
4077 }
4078
4079 // 25.4.1.3.2 Promise Resolve Functions
4080
4081 function PromiseResolveFunction() {
4082 var F = function(resolution) {
4083 console.assert(Type(F['[[Promise]]']) === 'object');
4084 var promise = F['[[Promise]]'];
4085 var alreadyResolved = F['[[AlreadyResolved]]'];
4086 if (alreadyResolved['[[value]]']) return undefined;
4087 set_internal(alreadyResolved, '[[value]]', true);
4088
4089 if (SameValue(resolution, promise)) {
4090 var selfResolutionError = TypeError();
4091 return RejectPromise(promise, selfResolutionError);
4092 }
4093 if (Type(resolution) !== 'object')
4094 return FulfillPromise(promise, resolution);
4095 try {
4096 var then = resolution['then'];
4097 } catch(then) {
4098 return RejectPromise(promise, then);
4099 }
4100 if (!IsCallable(then))
4101 return FulfillPromise(promise, resolution);
4102 EnqueueJob('PromiseJobs', PromiseResolveThenableJob, [promise, resolution, then]);
4103 return undefined;
4104 };
4105 return F;
4106 }
4107
4108 // 25.4.1.4 FulfillPromise ( promise, value )
4109
4110 function FulfillPromise(promise, value) {
4111 console.assert(promise['[[PromiseState]]'] === 'pending');
4112 var reactions = promise['[[PromiseFulfillReactions]]'];
4113 set_internal(promise, '[[PromiseResult]]', value);
4114 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
4115 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
4116 set_internal(promise, '[[PromiseState]]', 'fulfilled');
4117 return TriggerPromiseReactions(reactions, value);
4118 }
4119
4120 // 25.4.1.5 NewPromiseCapability ( C )
4121
4122 function NewPromiseCapability(c) {
4123 // To keep Promise hermetic, this doesn't look much like the spec.
4124 return CreatePromiseCapabilityRecord(undefined, c);
4125 }
4126
4127 // 25.4.1.5.1 CreatePromiseCapabilityRecord ( promise, constructor )
4128
4129 function CreatePromiseCapabilityRecord(promise, constructor) {
4130 // To keep Promise hermetic, this doesn't look much like the spec.
4131 console.assert(IsConstructor(constructor));
4132 var promiseCapability = {};
4133 set_internal(promiseCapability, '[[Promise]]', promise);
4134 set_internal(promiseCapability, '[[Resolve]]', undefined);
4135 set_internal(promiseCapability, '[[Reject]]', undefined);
4136 var executor = GetCapabilitiesExecutor();
4137 set_internal(executor, '[[Capability]]', promiseCapability);
4138
4139 // NOTE: Differs from spec; object is constructed here
4140 var constructorResult = promise = new constructor(executor);
4141 set_internal(promiseCapability, '[[Promise]]', promise);
4142
4143 if (!IsCallable(promiseCapability['[[Resolve]]'])) throw TypeError();
4144 if (!IsCallable(promiseCapability['[[Reject]]'])) throw TypeError();
4145 if (Type(constructorResult) === 'object' && !SameValue(promise, constructorResult)) throw TypeError();
4146 return promiseCapability;
4147 }
4148
4149 // 25.4.1.5.2 GetCapabilitiesExecutor Functions
4150
4151 function GetCapabilitiesExecutor() {
4152 var F = function(resolve, reject) {
4153 console.assert(F['[[Capability]]']);
4154 var promiseCapability = F['[[Capability]]'];
4155 if (promiseCapability['[[Resolve]]'] !== undefined) throw TypeError();
4156 if (promiseCapability['[[Reject]]'] !== undefined) throw TypeError();
4157 set_internal(promiseCapability, '[[Resolve]]', resolve);
4158 set_internal(promiseCapability, '[[Reject]]', reject);
4159 return undefined;
4160 };
4161 return F;
4162 }
4163
4164 // 25.4.1.6 IsPromise ( x )
4165
4166 function IsPromise(x) {
4167 if (Type(x) !== 'object') return false;
4168 if (!('[[PromiseState]]' in x)) return false;
4169 if (x['[[PromiseState]]'] === undefined) return false;
4170 return true;
4171 }
4172
4173 // 25.4.1.7 RejectPromise ( promise, reason )
4174
4175 function RejectPromise(promise, reason) {
4176 console.assert(promise['[[PromiseState]]'] === 'pending');
4177 var reactions = promise['[[PromiseRejectReactions]]'];
4178 set_internal(promise, '[[PromiseResult]]', reason);
4179 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
4180 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
4181 set_internal(promise, '[[PromiseState]]', 'rejected');
4182 return TriggerPromiseReactions(reactions, reason);
4183 }
4184
4185 // 25.4.1.8 TriggerPromiseReactions ( reactions, argument )
4186
4187 function TriggerPromiseReactions(reactions, argument) {
4188 for (var i = 0, len = reactions.length; i < len; ++i)
4189 EnqueueJob('PromiseJobs', PromiseReactionJob, [reactions[i], argument]);
4190 return undefined;
4191 }
4192
4193 // 25.4.2 Promise Jobs
4194
4195 // 25.4.2.1 PromiseReactionJob ( reaction, argument )
4196
4197 function PromiseReactionJob(reaction, argument) {
4198 var promiseCapability = reaction['[[Capabilities]]'];
4199 var handler = reaction['[[Handler]]'];
4200 var handlerResult, status;
4201 try {
4202 if (handler === 'Identity') handlerResult = argument;
4203 else if (handler === 'Thrower') throw argument;
4204 else handlerResult = handler.call(undefined, argument);
4205 } catch (handlerResult) {
4206 status = promiseCapability['[[Reject]]'].call(undefined, handlerResult);
4207 NextJob(status); return;
4208 }
4209 status = promiseCapability['[[Resolve]]'].call(undefined, handlerResult);
4210 NextJob(status);
4211 }
4212
4213 // 25.4.2.2 PromiseResolveThenableJob ( promiseToResolve, thenable, then)
4214
4215 function PromiseResolveThenableJob(promiseToResolve, thenable, then) {
4216 // SPEC BUG: promise vs. promiseToResolve
4217 var resolvingFunctions = CreateResolvingFunctions(promiseToResolve);
4218 try {
4219 var thenCallResult = then.call(thenable, resolvingFunctions['[[Resolve]]'],
4220 resolvingFunctions['[[Reject]]']);
4221 } catch (thenCallResult) {
4222 var status = resolvingFunctions['[[Reject]]'].call(undefined, thenCallResult);
4223 NextJob(status); return;
4224 }
4225 NextJob(thenCallResult);
4226 }
4227
4228 // 25.4.3 The Promise Constructor
4229
4230 // 25.4.3.1 Promise ( executor )
4231
4232 function Promise(executor) {
4233 var config = { configurable: false, enumerable: false, writable: true, value: undefined };
4234 Object.defineProperty(this, '[[PromiseState]]', config);
4235 Object.defineProperty(this, '[[PromiseConstructor]]', config);
4236 Object.defineProperty(this, '[[PromiseResult]]', config);
4237 Object.defineProperty(this, '[[PromiseFulfillReactions]]', config);
4238 Object.defineProperty(this, '[[PromiseRejectReactions]]', config);
4239
4240 var promise = this;
4241 if (Type(promise) !== 'object') throw new TypeError();
4242 if (!('[[PromiseState]]' in promise)) throw TypeError();
4243 if (promise['[[PromiseState]]'] !== undefined) throw TypeError();
4244 if (!IsCallable(executor)) throw TypeError();
4245
4246 set_internal(promise, '[[PromiseConstructor]]', Promise);
4247
4248 return InitializePromise(promise, executor);
4249 }
4250
4251 // 25.4.3.1.1 InitializePromise ( promise, executor )
4252
4253 function InitializePromise(promise, executor) {
4254 console.assert('[[PromiseState]]' in promise);
4255 console.assert(IsCallable(executor));
4256 set_internal(promise, '[[PromiseState]]', 'pending');
4257 set_internal(promise, '[[PromiseFulfillReactions]]', []);
4258 set_internal(promise, '[[PromiseRejectReactions]]', []);
4259 var resolvingFunctions = CreateResolvingFunctions(promise);
4260 try {
4261 var completion = executor.call(undefined, resolvingFunctions['[[Resolve]]'],
4262 resolvingFunctions['[[Reject]]']);
4263 } catch (completion) {
4264 var status = resolvingFunctions['[[Reject]]'].call(undefined, completion);
4265 }
4266 return promise;
4267 }
4268
4269 // 25.4.4 Properties of the Promise Constructor
4270 // 25.4.4.1 Promise.all ( iterable )
4271
4272 define(Promise, 'all', function all(iterable) {
4273 var c = strict(this);
4274 var promiseCapability = NewPromiseCapability(c);
4275 try {
4276 var iterator = GetIterator(iterable);
4277 } catch (value) {
4278 promiseCapability['[[Reject]]'].call(undefined, value);
4279 return promiseCapability['[[Promise]]'];
4280 }
4281 var values = [];
4282 var remainingElementsCount = { value: 1 };
4283 var index = 0;
4284 while (true) {
4285 try {
4286 var next = IteratorStep(iterator);
4287 } catch (value) {
4288 promiseCapability['[[Reject]]'].call(undefined, value);
4289 return promiseCapability['[[Promise]]'];
4290 }
4291 if (!next) {
4292 remainingElementsCount.value -= 1;
4293 if (remainingElementsCount.value === 0) {
4294 var resolveResult = promiseCapability['[[Resolve]]'].apply(undefined, values);
4295
4296
4297 }
4298 return promiseCapability['[[Promise]]'];
4299 }
4300 try {
4301 var nextValue = IteratorValue(next);
4302 } catch (value) {
4303 promiseCapability['[[Reject]]'].call(undefined, value);
4304 return promiseCapability['[[Promise]]'];
4305 }
4306 try {
4307 var nextPromise = c.resolve(nextValue);
4308 } catch (value) {
4309 promiseCapability['[[Reject]]'].call(undefined, value);
4310 return promiseCapability['[[Promise]]'];
4311 }
4312 var resolveElement = PromiseAllResolveElementFunction();
4313 set_internal(resolveElement, '[[AlreadyCalled]]', { value: false });
4314 set_internal(resolveElement, '[[Index]]', index);
4315 set_internal(resolveElement, '[[Values]]', values);
4316 set_internal(resolveElement, '[[Capabilities]]', promiseCapability);
4317 set_internal(resolveElement, '[[RemainingElements]]', remainingElementsCount);
4318 remainingElementsCount.value += 1;
4319 try {
4320 var result = nextPromise.then(resolveElement, promiseCapability['[[Reject]]']);
4321 } catch (value) {
4322 promiseCapability['[[Reject]]'].call(undefined, value);
4323 return promiseCapability['[[Promise]]'];
4324 }
4325 index += 1;
4326 }
4327 });
4328
4329 // 25.4.4.1.1 Promise.all Resolve Element Functions
4330
4331 function PromiseAllResolveElementFunction() {
4332 var F = function(x) {
4333 var alreadyCalled = F['[[AlreadyCalled]]'];
4334 if (alreadyCalled.value) return undefined;
4335 alreadyCalled.value = true;
4336 var index = F['[[Index]]'];
4337 var values = F['[[Values]]'];
4338 var promiseCapability = F['[[Capabilities]]'];
4339 var remainingElementsCount = F['[[RemainingElements]]'];
4340 try {
4341 values[index] = x;
4342 } catch (result) {
4343 promiseCapability['[[Reject]]'].call(undefined, result);
4344 return promiseCapability['[[Promise]]'];
4345 }
4346 remainingElementsCount.value -= 1;
4347 if (remainingElementsCount.value === 0)
4348 return promiseCapability['[[Resolve]]'].call(undefined, values);
4349 return undefined;
4350 };
4351 return F;
4352 }
4353
4354 // 25.4.4.2 Promise.prototype
4355
4356 Promise.prototype = {};
4357
4358 // 25.4.4.3 Promise.race ( iterable )
4359
4360 define(Promise, 'race', function race(iterable) {
4361 var c = strict(this);
4362 var promiseCapability = NewPromiseCapability(c);
4363 try {
4364 var iterator = GetIterator(iterable);
4365 } catch (value) {
4366 promiseCapability['[[Reject]]'].call(undefined, value);
4367 return promiseCapability['[[Promise]]'];
4368 }
4369 while (true) {
4370 try {
4371 var next = IteratorStep(iterator);
4372 } catch (value) {
4373 promiseCapability['[[Reject]]'].call(undefined, value);
4374 return promiseCapability['[[Promise]]'];
4375 }
4376 if (!next) return promiseCapability['[[Promise]]'];
4377 try {
4378 var nextValue = IteratorValue(next);
4379 } catch (value) {
4380 promiseCapability['[[Reject]]'].call(undefined, value);
4381 return promiseCapability['[[Promise]]'];
4382 }
4383 try {
4384 var nextPromise = c.resolve(nextValue);
4385 } catch (value) {
4386 promiseCapability['[[Reject]]'].call(undefined, value);
4387 return promiseCapability['[[Promise]]'];
4388 }
4389 try {
4390 nextPromise.then(promiseCapability['[[Resolve]]'], promiseCapability['[[Reject]]']);
4391 } catch (value) {
4392 promiseCapability['[[Reject]]'].call(undefined, value);
4393 return promiseCapability['[[Promise]]'];
4394 }
4395 }
4396 });
4397
4398 // 25.4.4.4 Promise.reject ( r )
4399
4400 define(Promise, 'reject', function reject(r) {
4401 var c = strict(this);
4402 var promiseCapability = NewPromiseCapability(c);
4403 var rejectResult = promiseCapability['[[Reject]]'].call(undefined, r);
4404 return promiseCapability['[[Promise]]'];
4405 });
4406
4407 // 25.4.4.5 Promise.resolve ( x )
4408
4409 define(Promise, 'resolve', function resolve(x) {
4410 var c = strict(this);
4411 if (IsPromise(x)) {
4412 var constructor = x['[[PromiseConstructor]]'];
4413 if (SameValue(constructor, c)) return x;
4414 }
4415 var promiseCapability = NewPromiseCapability(c);
4416 var resolveResult = promiseCapability['[[Resolve]]'].call(undefined, x);
4417 return promiseCapability['[[Promise]]'];
4418 });
4419
4420 // 25.4.4.6 Promise [ @@create ] ( )
4421 // 25.4.4.6.1 AllocatePromise ( constructor )
4422 // 25.4.5 Properties of the Promise Prototype Object
4423 // 25.4.5.1 Promise.prototype.catch ( onRejected )
4424
4425 define(Promise.prototype, 'catch', function catch_(onRejected) {
4426 var promise = this;
4427 return promise.then(undefined, onRejected);
4428 });
4429
4430 // 25.4.5.2 Promise.prototype.constructor
4431
4432 Promise.prototype.constructor = Promise;
4433
4434 // 25.4.5.3 Promise.prototype.then ( onFulfilled , onRejected )
4435
4436 define(Promise.prototype, 'then', function then(onFulfilled, onRejected) {
4437 var promise = this;
4438 if (!IsPromise(promise)) throw TypeError();
4439 if (!IsCallable(onFulfilled)) onFulfilled = 'Identity';
4440 if (!IsCallable(onRejected)) onRejected = 'Thrower';
4441 var c = promise.constructor;
4442 var promiseCapability = NewPromiseCapability(c);
4443 var fulfillReaction = { '[[Capabilities]]': promiseCapability,
4444 '[[Handler]]': onFulfilled };
4445 var rejectReaction = { '[[Capabilities]]': promiseCapability,
4446 '[[Handler]]': onRejected };
4447 if (promise['[[PromiseState]]'] === 'pending') {
4448 promise['[[PromiseFulfillReactions]]'].push(fulfillReaction);
4449 promise['[[PromiseRejectReactions]]'].push(rejectReaction);
4450 } else if (promise['[[PromiseState]]'] === 'fulfilled') {
4451 var value = promise['[[PromiseResult]]'];
4452 EnqueueJob('PromiseJobs', PromiseReactionJob, [fulfillReaction, value]);
4453 } else if (promise['[[PromiseState]]'] === 'rejected') {
4454 var reason = promise['[[PromiseResult]]'];
4455 EnqueueJob('PromiseJobs', PromiseReactionJob, [rejectReaction, reason]);
4456 }
4457 return promiseCapability['[[Promise]]'];
4458 });
4459
4460 // 25.4.6 Properties of Promise Instances
4461
4462 if (!('Promise' in global) || OVERRIDE_NATIVE_FOR_TESTING)
4463 global.Promise = Promise;
4464
4465 // Patch early Promise.cast vs. Promise.resolve implementations
4466 if ('cast' in global.Promise) global.Promise.resolve = global.Promise.cast;
4467 }());
4468
4469 // 25.4.5.1 Promise.prototype [ @@toStringTag ]
4470 define(Promise.prototype, $$toStringTag, 'Promise');
4471
4472 // ---------------------------------------
4473 // 26 Reflection
4474 // ---------------------------------------
4475
4476 (function() {
4477 // 26.1 The Reflect Object
4478 if (!('Reflect' in global) || OVERRIDE_NATIVE_FOR_TESTING)
4479 global.Reflect = {};
4480
4481 // 26.1.1 Reflect.apply ( target, thisArgument, argumentsList )
4482 define(
4483 Reflect, 'apply',
4484 function apply(target, thisArgument, argumentsList) {
4485 if (!IsCallable(target)) throw TypeError();
4486 return Function.prototype.apply.call(target, thisArgument, argumentsList);
4487 });
4488
4489 // 26.1.2 Reflect.construct ( target, argumentsList [, newTarget] )
4490 define(
4491 Reflect, 'construct',
4492 function construct(target, argumentsList) {
4493 return __cons(target, argumentsList);
4494 });
4495
4496 // 26.1.3 Reflect.defineProperty ( target, propertyKey, attributes )
4497 define(
4498 Reflect, 'defineProperty',
4499 function defineProperty(target, propertyKey, attributes) {
4500 try {
4501 Object.defineProperty(target, propertyKey, attributes);
4502 return true;
4503 } catch (_) {
4504 return false;
4505 }
4506 });
4507
4508 // 26.1.4 Reflect.deleteProperty ( target, propertyKey )
4509 define(
4510 Reflect, 'deleteProperty',
4511 function deleteProperty(target,name) {
4512 try {
4513 delete target[name];
4514 return !HasOwnProperty(target, name);
4515 } catch (_) {
4516 return false;
4517 }
4518 });
4519
4520 // 26.1.5 Reflect.enumerate ( target )
4521 define(
4522 Reflect, 'enumerate',
4523 function enumerate(target) {
4524 target = ToObject(target);
4525 var iterator = Enumerate(target);
4526 return iterator;
4527 });
4528
4529 // 26.1.6 Reflect.get ( target, propertyKey [ , receiver ])
4530 define(
4531 Reflect, 'get',
4532 function get(target, name, receiver) {
4533 target = ToObject(target);
4534 name = String(name);
4535 receiver = (receiver === undefined) ? target : ToObject(receiver);
4536 var desc = getPropertyDescriptor(target, name);
4537 if (desc && 'get' in desc)
4538 return Function.prototype.call.call(desc['get'], receiver);
4539 return target[name];
4540 });
4541
4542 // 26.1.7 Reflect.getOwnPropertyDescriptor ( target, propertyKey )
4543 define(
4544 Reflect, 'getOwnPropertyDescriptor',
4545 Object.getOwnPropertyDescriptor);
4546
4547 // 26.1.8 Reflect.getPrototypeOf ( target )
4548 define(
4549 Reflect, 'getPrototypeOf',
4550 Object.getPrototypeOf);
4551
4552 // 26.1.9 Reflect.has ( target, propertyKey )
4553 define(
4554 Reflect, 'has',
4555 function has(target,name) {
4556 return String(name) in ToObject(target);
4557 });
4558
4559 // 26.1.10 Reflect.isExtensible (target)
4560 define(
4561 Reflect, 'isExtensible',
4562 Object.isExtensible);
4563
4564 // 26.1.11 Reflect.ownKeys ( target )
4565 define(
4566 Reflect, 'ownKeys',
4567 function ownKeys(target) {
4568 var obj = ToObject(target);
4569 return Object.getOwnPropertyNames(obj);
4570 });
4571
4572 // 26.1.12 Reflect.preventExtensions ( target )
4573 define(
4574 Reflect, 'preventExtensions',
4575 function preventExtensions(target) {
4576 try { Object.preventExtensions(target); return true; } catch (_) { return false; }
4577 });
4578
4579 // 26.1.13 Reflect.set ( target, propertyKey, V [ , receiver ] )
4580 define(
4581 Reflect, 'set',
4582 function set(target, name, value, receiver) {
4583 target = ToObject(target);
4584 name = String(name);
4585 receiver = (receiver === undefined) ? target : ToObject(receiver);
4586 var desc = getPropertyDescriptor(target, name);
4587 try {
4588 if (desc && 'set' in desc)
4589 Function.prototype.call.call(desc['set'], receiver, value);
4590 else
4591 target[name] = value;
4592 return true;
4593 } catch (_) {
4594 return false;
4595 }
4596 });
4597
4598 // 26.1.14 Reflect.setPrototypeOf ( target, proto )
4599 define(
4600 Reflect, 'setPrototypeOf',
4601 function setPrototypeOf(target, proto) {
4602 try {
4603 target.__proto__ = proto;
4604 return Reflect.getPrototypeOf(target) === proto;
4605 } catch(_) {
4606 return false;
4607 }
4608 });
4609
4610 }());
4611
4612 // ---------------------------------------
4613 // 26.2 Proxy Objects
4614 // ---------------------------------------
4615
4616 // Not polyfillable.
4617
4618}(self));
4619
4620// This helper is defined outside the main scope so that the use of
4621// 'eval' does not taint the scope for minifiers.
4622function __cons(t, a) {
4623 return eval('new t(' + a.map(function(_, i) { return 'a[' + i + ']'; }).join(',') + ')');
4624}
6e0f24b1 4625</script>
8a1f452d 4626 <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){
4627'use strict'
4628
4629exports.byteLength = byteLength
4630exports.toByteArray = toByteArray
4631exports.fromByteArray = fromByteArray
4632
4633var lookup = []
4634var revLookup = []
4635var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
4636
4637var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
4638for (var i = 0, len = code.length; i < len; ++i) {
4639 lookup[i] = code[i]
4640 revLookup[code.charCodeAt(i)] = i
4641}
4642
4643revLookup['-'.charCodeAt(0)] = 62
4644revLookup['_'.charCodeAt(0)] = 63
4645
4646function placeHoldersCount (b64) {
4647 var len = b64.length
4648 if (len % 4 > 0) {
4649 throw new Error('Invalid string. Length must be a multiple of 4')
4650 }
4651
4652 // the number of equal signs (place holders)
4653 // if there are two placeholders, than the two characters before it
4654 // represent one byte
4655 // if there is only one, then the three characters before it represent 2 bytes
4656 // this is just a cheap hack to not do indexOf twice
4657 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
4658}
4659
4660function byteLength (b64) {
4661 // base64 is 4/3 + up to two characters of the original data
4662 return b64.length * 3 / 4 - placeHoldersCount(b64)
4663}
4664
4665function toByteArray (b64) {
4666 var i, j, l, tmp, placeHolders, arr
4667 var len = b64.length
4668 placeHolders = placeHoldersCount(b64)
4669
4670 arr = new Arr(len * 3 / 4 - placeHolders)
4671
4672 // if there are placeholders, only get up to the last complete 4 chars
4673 l = placeHolders > 0 ? len - 4 : len
4674
4675 var L = 0
4676
4677 for (i = 0, j = 0; i < l; i += 4, j += 3) {
4678 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
4679 arr[L++] = (tmp >> 16) & 0xFF
4680 arr[L++] = (tmp >> 8) & 0xFF
4681 arr[L++] = tmp & 0xFF
4682 }
4683
4684 if (placeHolders === 2) {
4685 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
4686 arr[L++] = tmp & 0xFF
4687 } else if (placeHolders === 1) {
4688 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
4689 arr[L++] = (tmp >> 8) & 0xFF
4690 arr[L++] = tmp & 0xFF
4691 }
4692
4693 return arr
4694}
4695
4696function tripletToBase64 (num) {
4697 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
4698}
4699
4700function encodeChunk (uint8, start, end) {
4701 var tmp
4702 var output = []
4703 for (var i = start; i < end; i += 3) {
4704 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
4705 output.push(tripletToBase64(tmp))
4706 }
4707 return output.join('')
4708}
4709
4710function fromByteArray (uint8) {
4711 var tmp
4712 var len = uint8.length
4713 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
4714 var output = ''
4715 var parts = []
4716 var maxChunkLength = 16383 // must be multiple of 3
4717
4718 // go through the array every three bytes, we'll deal with trailing stuff later
4719 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
4720 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
4721 }
4722
4723 // pad the end with zeros, but make sure to not forget the extra bytes
4724 if (extraBytes === 1) {
4725 tmp = uint8[len - 1]
4726 output += lookup[tmp >> 2]
4727 output += lookup[(tmp << 4) & 0x3F]
4728 output += '=='
4729 } else if (extraBytes === 2) {
4730 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
4731 output += lookup[tmp >> 10]
4732 output += lookup[(tmp >> 4) & 0x3F]
4733 output += lookup[(tmp << 2) & 0x3F]
4734 output += '='
4735 }
4736
4737 parts.push(output)
4738
4739 return parts.join('')
4740}
4741
4742},{}],2:[function(require,module,exports){
4743/*!
4744 * The buffer module from node.js, for the browser.
4745 *
4746 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
4747 * @license MIT
4748 */
4749/* eslint-disable no-proto */
4750
4751'use strict'
4752
4753var base64 = require('base64-js')
4754var ieee754 = require('ieee754')
4755
4756exports.Buffer = Buffer
4757exports.SlowBuffer = SlowBuffer
4758exports.INSPECT_MAX_BYTES = 50
4759
4760var K_MAX_LENGTH = 0x7fffffff
4761exports.kMaxLength = K_MAX_LENGTH
4762
4763/**
4764 * If `Buffer.TYPED_ARRAY_SUPPORT`:
4765 * === true Use Uint8Array implementation (fastest)
4766 * === false Print warning and recommend using `buffer` v4.x which has an Object
4767 * implementation (most compatible, even IE6)
4768 *
4769 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
4770 * Opera 11.6+, iOS 4.2+.
4771 *
4772 * We report that the browser does not support typed arrays if the are not subclassable
4773 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
4774 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
4775 * for __proto__ and has a buggy typed array implementation.
4776 */
4777Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
4778
4779if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
4780 typeof console.error === 'function') {
4781 console.error(
4782 'This browser lacks typed array (Uint8Array) support which is required by ' +
4783 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
4784 )
4785}
4786
4787function typedArraySupport () {
4788 // Can typed array instances can be augmented?
4789 try {
4790 var arr = new Uint8Array(1)
4791 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
4792 return arr.foo() === 42
4793 } catch (e) {
4794 return false
4795 }
4796}
4797
4798function createBuffer (length) {
4799 if (length > K_MAX_LENGTH) {
4800 throw new RangeError('Invalid typed array length')
4801 }
4802 // Return an augmented `Uint8Array` instance
4803 var buf = new Uint8Array(length)
4804 buf.__proto__ = Buffer.prototype
4805 return buf
4806}
4807
4808/**
4809 * The Buffer constructor returns instances of `Uint8Array` that have their
4810 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
4811 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
4812 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
4813 * returns a single octet.
4814 *
4815 * The `Uint8Array` prototype remains unmodified.
4816 */
4817
4818function Buffer (arg, encodingOrOffset, length) {
4819 // Common case.
4820 if (typeof arg === 'number') {
4821 if (typeof encodingOrOffset === 'string') {
4822 throw new Error(
4823 'If encoding is specified then the first argument must be a string'
4824 )
4825 }
4826 return allocUnsafe(arg)
4827 }
4828 return from(arg, encodingOrOffset, length)
4829}
4830
4831// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
4832if (typeof Symbol !== 'undefined' && Symbol.species &&
4833 Buffer[Symbol.species] === Buffer) {
4834 Object.defineProperty(Buffer, Symbol.species, {
4835 value: null,
4836 configurable: true,
4837 enumerable: false,
4838 writable: false
4839 })
4840}
4841
4842Buffer.poolSize = 8192 // not used by this implementation
4843
4844function from (value, encodingOrOffset, length) {
4845 if (typeof value === 'number') {
4846 throw new TypeError('"value" argument must not be a number')
4847 }
4848
4849 if (value instanceof ArrayBuffer) {
4850 return fromArrayBuffer(value, encodingOrOffset, length)
4851 }
4852
4853 if (typeof value === 'string') {
4854 return fromString(value, encodingOrOffset)
4855 }
4856
4857 return fromObject(value)
4858}
4859
4860/**
4861 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
4862 * if value is a number.
4863 * Buffer.from(str[, encoding])
4864 * Buffer.from(array)
4865 * Buffer.from(buffer)
4866 * Buffer.from(arrayBuffer[, byteOffset[, length]])
4867 **/
4868Buffer.from = function (value, encodingOrOffset, length) {
4869 return from(value, encodingOrOffset, length)
4870}
4871
4872// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
4873// https://github.com/feross/buffer/pull/148
4874Buffer.prototype.__proto__ = Uint8Array.prototype
4875Buffer.__proto__ = Uint8Array
4876
4877function assertSize (size) {
4878 if (typeof size !== 'number') {
4879 throw new TypeError('"size" argument must be a number')
4880 } else if (size < 0) {
4881 throw new RangeError('"size" argument must not be negative')
4882 }
4883}
4884
4885function alloc (size, fill, encoding) {
4886 assertSize(size)
4887 if (size <= 0) {
4888 return createBuffer(size)
4889 }
4890 if (fill !== undefined) {
4891 // Only pay attention to encoding if it's a string. This
4892 // prevents accidentally sending in a number that would
4893 // be interpretted as a start offset.
4894 return typeof encoding === 'string'
4895 ? createBuffer(size).fill(fill, encoding)
4896 : createBuffer(size).fill(fill)
4897 }
4898 return createBuffer(size)
4899}
4900
4901/**
4902 * Creates a new filled Buffer instance.
4903 * alloc(size[, fill[, encoding]])
4904 **/
4905Buffer.alloc = function (size, fill, encoding) {
4906 return alloc(size, fill, encoding)
4907}
4908
4909function allocUnsafe (size) {
4910 assertSize(size)
4911 return createBuffer(size < 0 ? 0 : checked(size) | 0)
4912}
4913
4914/**
4915 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
4916 * */
4917Buffer.allocUnsafe = function (size) {
4918 return allocUnsafe(size)
4919}
4920/**
4921 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
4922 */
4923Buffer.allocUnsafeSlow = function (size) {
4924 return allocUnsafe(size)
4925}
4926
4927function fromString (string, encoding) {
4928 if (typeof encoding !== 'string' || encoding === '') {
4929 encoding = 'utf8'
4930 }
4931
4932 if (!Buffer.isEncoding(encoding)) {
4933 throw new TypeError('"encoding" must be a valid string encoding')
4934 }
4935
4936 var length = byteLength(string, encoding) | 0
4937 var buf = createBuffer(length)
4938
4939 var actual = buf.write(string, encoding)
4940
4941 if (actual !== length) {
4942 // Writing a hex string, for example, that contains invalid characters will
4943 // cause everything after the first invalid character to be ignored. (e.g.
4944 // 'abxxcd' will be treated as 'ab')
4945 buf = buf.slice(0, actual)
4946 }
4947
4948 return buf
4949}
4950
4951function fromArrayLike (array) {
4952 var length = array.length < 0 ? 0 : checked(array.length) | 0
4953 var buf = createBuffer(length)
4954 for (var i = 0; i < length; i += 1) {
4955 buf[i] = array[i] & 255
4956 }
4957 return buf
4958}
4959
4960function fromArrayBuffer (array, byteOffset, length) {
4961 if (byteOffset < 0 || array.byteLength < byteOffset) {
4962 throw new RangeError('\'offset\' is out of bounds')
4963 }
4964
4965 if (array.byteLength < byteOffset + (length || 0)) {
4966 throw new RangeError('\'length\' is out of bounds')
4967 }
4968
4969 var buf
4970 if (byteOffset === undefined && length === undefined) {
4971 buf = new Uint8Array(array)
4972 } else if (length === undefined) {
4973 buf = new Uint8Array(array, byteOffset)
4974 } else {
4975 buf = new Uint8Array(array, byteOffset, length)
4976 }
4977
4978 // Return an augmented `Uint8Array` instance
4979 buf.__proto__ = Buffer.prototype
4980 return buf
4981}
4982
4983function fromObject (obj) {
4984 if (Buffer.isBuffer(obj)) {
4985 var len = checked(obj.length) | 0
4986 var buf = createBuffer(len)
4987
4988 if (buf.length === 0) {
4989 return buf
4990 }
4991
4992 obj.copy(buf, 0, 0, len)
4993 return buf
4994 }
4995
4996 if (obj) {
4997 if (isArrayBufferView(obj) || 'length' in obj) {
4998 if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
4999 return createBuffer(0)
5000 }
5001 return fromArrayLike(obj)
5002 }
5003
5004 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
5005 return fromArrayLike(obj.data)
5006 }
5007 }
5008
5009 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
5010}
5011
5012function checked (length) {
5013 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
5014 // length is NaN (which is otherwise coerced to zero.)
5015 if (length >= K_MAX_LENGTH) {
5016 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
5017 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
5018 }
5019 return length | 0
5020}
5021
5022function SlowBuffer (length) {
5023 if (+length != length) { // eslint-disable-line eqeqeq
5024 length = 0
5025 }
5026 return Buffer.alloc(+length)
5027}
5028
5029Buffer.isBuffer = function isBuffer (b) {
5030 return b != null && b._isBuffer === true
5031}
5032
5033Buffer.compare = function compare (a, b) {
5034 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
5035 throw new TypeError('Arguments must be Buffers')
5036 }
5037
5038 if (a === b) return 0
5039
5040 var x = a.length
5041 var y = b.length
5042
5043 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
5044 if (a[i] !== b[i]) {
5045 x = a[i]
5046 y = b[i]
5047 break
5048 }
5049 }
5050
5051 if (x < y) return -1
5052 if (y < x) return 1
5053 return 0
5054}
5055
5056Buffer.isEncoding = function isEncoding (encoding) {
5057 switch (String(encoding).toLowerCase()) {
5058 case 'hex':
5059 case 'utf8':
5060 case 'utf-8':
5061 case 'ascii':
5062 case 'latin1':
5063 case 'binary':
5064 case 'base64':
5065 case 'ucs2':
5066 case 'ucs-2':
5067 case 'utf16le':
5068 case 'utf-16le':
5069 return true
5070 default:
5071 return false
5072 }
5073}
5074
5075Buffer.concat = function concat (list, length) {
5076 if (!Array.isArray(list)) {
5077 throw new TypeError('"list" argument must be an Array of Buffers')
5078 }
5079
5080 if (list.length === 0) {
5081 return Buffer.alloc(0)
5082 }
5083
5084 var i
5085 if (length === undefined) {
5086 length = 0
5087 for (i = 0; i < list.length; ++i) {
5088 length += list[i].length
5089 }
5090 }
5091
5092 var buffer = Buffer.allocUnsafe(length)
5093 var pos = 0
5094 for (i = 0; i < list.length; ++i) {
5095 var buf = list[i]
5096 if (!Buffer.isBuffer(buf)) {
5097 throw new TypeError('"list" argument must be an Array of Buffers')
5098 }
5099 buf.copy(buffer, pos)
5100 pos += buf.length
5101 }
5102 return buffer
5103}
5104
5105function byteLength (string, encoding) {
5106 if (Buffer.isBuffer(string)) {
5107 return string.length
5108 }
5109 if (isArrayBufferView(string) || string instanceof ArrayBuffer) {
5110 return string.byteLength
5111 }
5112 if (typeof string !== 'string') {
5113 string = '' + string
5114 }
5115
5116 var len = string.length
5117 if (len === 0) return 0
5118
5119 // Use a for loop to avoid recursion
5120 var loweredCase = false
5121 for (;;) {
5122 switch (encoding) {
5123 case 'ascii':
5124 case 'latin1':
5125 case 'binary':
5126 return len
5127 case 'utf8':
5128 case 'utf-8':
5129 case undefined:
5130 return utf8ToBytes(string).length
5131 case 'ucs2':
5132 case 'ucs-2':
5133 case 'utf16le':
5134 case 'utf-16le':
5135 return len * 2
5136 case 'hex':
5137 return len >>> 1
5138 case 'base64':
5139 return base64ToBytes(string).length
5140 default:
5141 if (loweredCase) return utf8ToBytes(string).length // assume utf8
5142 encoding = ('' + encoding).toLowerCase()
5143 loweredCase = true
5144 }
5145 }
5146}
5147Buffer.byteLength = byteLength
5148
5149function slowToString (encoding, start, end) {
5150 var loweredCase = false
5151
5152 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
5153 // property of a typed array.
5154
5155 // This behaves neither like String nor Uint8Array in that we set start/end
5156 // to their upper/lower bounds if the value passed is out of range.
5157 // undefined is handled specially as per ECMA-262 6th Edition,
5158 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
5159 if (start === undefined || start < 0) {
5160 start = 0
5161 }
5162 // Return early if start > this.length. Done here to prevent potential uint32
5163 // coercion fail below.
5164 if (start > this.length) {
5165 return ''
5166 }
5167
5168 if (end === undefined || end > this.length) {
5169 end = this.length
5170 }
5171
5172 if (end <= 0) {
5173 return ''
5174 }
5175
5176 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
5177 end >>>= 0
5178 start >>>= 0
5179
5180 if (end <= start) {
5181 return ''
5182 }
5183
5184 if (!encoding) encoding = 'utf8'
5185
5186 while (true) {
5187 switch (encoding) {
5188 case 'hex':
5189 return hexSlice(this, start, end)
5190
5191 case 'utf8':
5192 case 'utf-8':
5193 return utf8Slice(this, start, end)
5194
5195 case 'ascii':
5196 return asciiSlice(this, start, end)
5197
5198 case 'latin1':
5199 case 'binary':
5200 return latin1Slice(this, start, end)
5201
5202 case 'base64':
5203 return base64Slice(this, start, end)
5204
5205 case 'ucs2':
5206 case 'ucs-2':
5207 case 'utf16le':
5208 case 'utf-16le':
5209 return utf16leSlice(this, start, end)
5210
5211 default:
5212 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
5213 encoding = (encoding + '').toLowerCase()
5214 loweredCase = true
5215 }
5216 }
5217}
5218
5219// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
5220// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
5221// reliably in a browserify context because there could be multiple different
5222// copies of the 'buffer' package in use. This method works even for Buffer
5223// instances that were created from another copy of the `buffer` package.
5224// See: https://github.com/feross/buffer/issues/154
5225Buffer.prototype._isBuffer = true
5226
5227function swap (b, n, m) {
5228 var i = b[n]
5229 b[n] = b[m]
5230 b[m] = i
5231}
5232
5233Buffer.prototype.swap16 = function swap16 () {
5234 var len = this.length
5235 if (len % 2 !== 0) {
5236 throw new RangeError('Buffer size must be a multiple of 16-bits')
5237 }
5238 for (var i = 0; i < len; i += 2) {
5239 swap(this, i, i + 1)
5240 }
5241 return this
5242}
5243
5244Buffer.prototype.swap32 = function swap32 () {
5245 var len = this.length
5246 if (len % 4 !== 0) {
5247 throw new RangeError('Buffer size must be a multiple of 32-bits')
5248 }
5249 for (var i = 0; i < len; i += 4) {
5250 swap(this, i, i + 3)
5251 swap(this, i + 1, i + 2)
5252 }
5253 return this
5254}
5255
5256Buffer.prototype.swap64 = function swap64 () {
5257 var len = this.length
5258 if (len % 8 !== 0) {
5259 throw new RangeError('Buffer size must be a multiple of 64-bits')
5260 }
5261 for (var i = 0; i < len; i += 8) {
5262 swap(this, i, i + 7)
5263 swap(this, i + 1, i + 6)
5264 swap(this, i + 2, i + 5)
5265 swap(this, i + 3, i + 4)
5266 }
5267 return this
5268}
5269
5270Buffer.prototype.toString = function toString () {
5271 var length = this.length
5272 if (length === 0) return ''
5273 if (arguments.length === 0) return utf8Slice(this, 0, length)
5274 return slowToString.apply(this, arguments)
5275}
5276
5277Buffer.prototype.equals = function equals (b) {
5278 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
5279 if (this === b) return true
5280 return Buffer.compare(this, b) === 0
5281}
5282
5283Buffer.prototype.inspect = function inspect () {
5284 var str = ''
5285 var max = exports.INSPECT_MAX_BYTES
5286 if (this.length > 0) {
5287 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
5288 if (this.length > max) str += ' ... '
5289 }
5290 return '<Buffer ' + str + '>'
5291}
5292
5293Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
5294 if (!Buffer.isBuffer(target)) {
5295 throw new TypeError('Argument must be a Buffer')
5296 }
5297
5298 if (start === undefined) {
5299 start = 0
5300 }
5301 if (end === undefined) {
5302 end = target ? target.length : 0
5303 }
5304 if (thisStart === undefined) {
5305 thisStart = 0
5306 }
5307 if (thisEnd === undefined) {
5308 thisEnd = this.length
5309 }
5310
5311 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
5312 throw new RangeError('out of range index')
5313 }
5314
5315 if (thisStart >= thisEnd && start >= end) {
5316 return 0
5317 }
5318 if (thisStart >= thisEnd) {
5319 return -1
5320 }
5321 if (start >= end) {
5322 return 1
5323 }
5324
5325 start >>>= 0
5326 end >>>= 0
5327 thisStart >>>= 0
5328 thisEnd >>>= 0
5329
5330 if (this === target) return 0
5331
5332 var x = thisEnd - thisStart
5333 var y = end - start
5334 var len = Math.min(x, y)
5335
5336 var thisCopy = this.slice(thisStart, thisEnd)
5337 var targetCopy = target.slice(start, end)
5338
5339 for (var i = 0; i < len; ++i) {
5340 if (thisCopy[i] !== targetCopy[i]) {
5341 x = thisCopy[i]
5342 y = targetCopy[i]
5343 break
5344 }
5345 }
5346
5347 if (x < y) return -1
5348 if (y < x) return 1
5349 return 0
5350}
5351
5352// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
5353// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
5354//
5355// Arguments:
5356// - buffer - a Buffer to search
5357// - val - a string, Buffer, or number
5358// - byteOffset - an index into `buffer`; will be clamped to an int32
5359// - encoding - an optional encoding, relevant is val is a string
5360// - dir - true for indexOf, false for lastIndexOf
5361function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
5362 // Empty buffer means no match
5363 if (buffer.length === 0) return -1
5364
5365 // Normalize byteOffset
5366 if (typeof byteOffset === 'string') {
5367 encoding = byteOffset
5368 byteOffset = 0
5369 } else if (byteOffset > 0x7fffffff) {
5370 byteOffset = 0x7fffffff
5371 } else if (byteOffset < -0x80000000) {
5372 byteOffset = -0x80000000
5373 }
5374 byteOffset = +byteOffset // Coerce to Number.
5375 if (numberIsNaN(byteOffset)) {
5376 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
5377 byteOffset = dir ? 0 : (buffer.length - 1)
5378 }
5379
5380 // Normalize byteOffset: negative offsets start from the end of the buffer
5381 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
5382 if (byteOffset >= buffer.length) {
5383 if (dir) return -1
5384 else byteOffset = buffer.length - 1
5385 } else if (byteOffset < 0) {
5386 if (dir) byteOffset = 0
5387 else return -1
5388 }
5389
5390 // Normalize val
5391 if (typeof val === 'string') {
5392 val = Buffer.from(val, encoding)
5393 }
5394
5395 // Finally, search either indexOf (if dir is true) or lastIndexOf
5396 if (Buffer.isBuffer(val)) {
5397 // Special case: looking for empty string/buffer always fails
5398 if (val.length === 0) {
5399 return -1
5400 }
5401 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
5402 } else if (typeof val === 'number') {
5403 val = val & 0xFF // Search for a byte value [0-255]
5404 if (typeof Uint8Array.prototype.indexOf === 'function') {
5405 if (dir) {
5406 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
5407 } else {
5408 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
5409 }
5410 }
5411 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
5412 }
5413
5414 throw new TypeError('val must be string, number or Buffer')
5415}
5416
5417function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
5418 var indexSize = 1
5419 var arrLength = arr.length
5420 var valLength = val.length
5421
5422 if (encoding !== undefined) {
5423 encoding = String(encoding).toLowerCase()
5424 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
5425 encoding === 'utf16le' || encoding === 'utf-16le') {
5426 if (arr.length < 2 || val.length < 2) {
5427 return -1
5428 }
5429 indexSize = 2
5430 arrLength /= 2
5431 valLength /= 2
5432 byteOffset /= 2
5433 }
5434 }
5435
5436 function read (buf, i) {
5437 if (indexSize === 1) {
5438 return buf[i]
5439 } else {
5440 return buf.readUInt16BE(i * indexSize)
5441 }
5442 }
5443
5444 var i
5445 if (dir) {
5446 var foundIndex = -1
5447 for (i = byteOffset; i < arrLength; i++) {
5448 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
5449 if (foundIndex === -1) foundIndex = i
5450 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
5451 } else {
5452 if (foundIndex !== -1) i -= i - foundIndex
5453 foundIndex = -1
5454 }
5455 }
5456 } else {
5457 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
5458 for (i = byteOffset; i >= 0; i--) {
5459 var found = true
5460 for (var j = 0; j < valLength; j++) {
5461 if (read(arr, i + j) !== read(val, j)) {
5462 found = false
5463 break
5464 }
5465 }
5466 if (found) return i
5467 }
5468 }
5469
5470 return -1
5471}
5472
5473Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
5474 return this.indexOf(val, byteOffset, encoding) !== -1
5475}
5476
5477Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
5478 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
5479}
5480
5481Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
5482 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
5483}
5484
5485function hexWrite (buf, string, offset, length) {
5486 offset = Number(offset) || 0
5487 var remaining = buf.length - offset
5488 if (!length) {
5489 length = remaining
5490 } else {
5491 length = Number(length)
5492 if (length > remaining) {
5493 length = remaining
5494 }
5495 }
5496
5497 // must be an even number of digits
5498 var strLen = string.length
5499 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
5500
5501 if (length > strLen / 2) {
5502 length = strLen / 2
5503 }
5504 for (var i = 0; i < length; ++i) {
5505 var parsed = parseInt(string.substr(i * 2, 2), 16)
5506 if (numberIsNaN(parsed)) return i
5507 buf[offset + i] = parsed
5508 }
5509 return i
5510}
5511
5512function utf8Write (buf, string, offset, length) {
5513 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
5514}
5515
5516function asciiWrite (buf, string, offset, length) {
5517 return blitBuffer(asciiToBytes(string), buf, offset, length)
5518}
5519
5520function latin1Write (buf, string, offset, length) {
5521 return asciiWrite(buf, string, offset, length)
5522}
5523
5524function base64Write (buf, string, offset, length) {
5525 return blitBuffer(base64ToBytes(string), buf, offset, length)
5526}
5527
5528function ucs2Write (buf, string, offset, length) {
5529 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
5530}
5531
5532Buffer.prototype.write = function write (string, offset, length, encoding) {
5533 // Buffer#write(string)
5534 if (offset === undefined) {
5535 encoding = 'utf8'
5536 length = this.length
5537 offset = 0
5538 // Buffer#write(string, encoding)
5539 } else if (length === undefined && typeof offset === 'string') {
5540 encoding = offset
5541 length = this.length
5542 offset = 0
5543 // Buffer#write(string, offset[, length][, encoding])
5544 } else if (isFinite(offset)) {
5545 offset = offset >>> 0
5546 if (isFinite(length)) {
5547 length = length >>> 0
5548 if (encoding === undefined) encoding = 'utf8'
5549 } else {
5550 encoding = length
5551 length = undefined
5552 }
5553 } else {
5554 throw new Error(
5555 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
5556 )
5557 }
5558
5559 var remaining = this.length - offset
5560 if (length === undefined || length > remaining) length = remaining
5561
5562 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
5563 throw new RangeError('Attempt to write outside buffer bounds')
5564 }
5565
5566 if (!encoding) encoding = 'utf8'
5567
5568 var loweredCase = false
5569 for (;;) {
5570 switch (encoding) {
5571 case 'hex':
5572 return hexWrite(this, string, offset, length)
5573
5574 case 'utf8':
5575 case 'utf-8':
5576 return utf8Write(this, string, offset, length)
5577
5578 case 'ascii':
5579 return asciiWrite(this, string, offset, length)
5580
5581 case 'latin1':
5582 case 'binary':
5583 return latin1Write(this, string, offset, length)
5584
5585 case 'base64':
5586 // Warning: maxLength not taken into account in base64Write
5587 return base64Write(this, string, offset, length)
5588
5589 case 'ucs2':
5590 case 'ucs-2':
5591 case 'utf16le':
5592 case 'utf-16le':
5593 return ucs2Write(this, string, offset, length)
5594
5595 default:
5596 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
5597 encoding = ('' + encoding).toLowerCase()
5598 loweredCase = true
5599 }
5600 }
5601}
5602
5603Buffer.prototype.toJSON = function toJSON () {
5604 return {
5605 type: 'Buffer',
5606 data: Array.prototype.slice.call(this._arr || this, 0)
5607 }
5608}
5609
5610function base64Slice (buf, start, end) {
5611 if (start === 0 && end === buf.length) {
5612 return base64.fromByteArray(buf)
5613 } else {
5614 return base64.fromByteArray(buf.slice(start, end))
5615 }
5616}
5617
5618function utf8Slice (buf, start, end) {
5619 end = Math.min(buf.length, end)
5620 var res = []
5621
5622 var i = start
5623 while (i < end) {
5624 var firstByte = buf[i]
5625 var codePoint = null
5626 var bytesPerSequence = (firstByte > 0xEF) ? 4
5627 : (firstByte > 0xDF) ? 3
5628 : (firstByte > 0xBF) ? 2
5629 : 1
5630
5631 if (i + bytesPerSequence <= end) {
5632 var secondByte, thirdByte, fourthByte, tempCodePoint
5633
5634 switch (bytesPerSequence) {
5635 case 1:
5636 if (firstByte < 0x80) {
5637 codePoint = firstByte
5638 }
5639 break
5640 case 2:
5641 secondByte = buf[i + 1]
5642 if ((secondByte & 0xC0) === 0x80) {
5643 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
5644 if (tempCodePoint > 0x7F) {
5645 codePoint = tempCodePoint
5646 }
5647 }
5648 break
5649 case 3:
5650 secondByte = buf[i + 1]
5651 thirdByte = buf[i + 2]
5652 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
5653 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
5654 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
5655 codePoint = tempCodePoint
5656 }
5657 }
5658 break
5659 case 4:
5660 secondByte = buf[i + 1]
5661 thirdByte = buf[i + 2]
5662 fourthByte = buf[i + 3]
5663 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
5664 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
5665 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
5666 codePoint = tempCodePoint
5667 }
5668 }
5669 }
5670 }
5671
5672 if (codePoint === null) {
5673 // we did not generate a valid codePoint so insert a
5674 // replacement char (U+FFFD) and advance only 1 byte
5675 codePoint = 0xFFFD
5676 bytesPerSequence = 1
5677 } else if (codePoint > 0xFFFF) {
5678 // encode to utf16 (surrogate pair dance)
5679 codePoint -= 0x10000
5680 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
5681 codePoint = 0xDC00 | codePoint & 0x3FF
5682 }
5683
5684 res.push(codePoint)
5685 i += bytesPerSequence
5686 }
5687
5688 return decodeCodePointsArray(res)
5689}
5690
5691// Based on http://stackoverflow.com/a/22747272/680742, the browser with
5692// the lowest limit is Chrome, with 0x10000 args.
5693// We go 1 magnitude less, for safety
5694var MAX_ARGUMENTS_LENGTH = 0x1000
5695
5696function decodeCodePointsArray (codePoints) {
5697 var len = codePoints.length
5698 if (len <= MAX_ARGUMENTS_LENGTH) {
5699 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
5700 }
5701
5702 // Decode in chunks to avoid "call stack size exceeded".
5703 var res = ''
5704 var i = 0
5705 while (i < len) {
5706 res += String.fromCharCode.apply(
5707 String,
5708 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
5709 )
5710 }
5711 return res
5712}
5713
5714function asciiSlice (buf, start, end) {
5715 var ret = ''
5716 end = Math.min(buf.length, end)
5717
5718 for (var i = start; i < end; ++i) {
5719 ret += String.fromCharCode(buf[i] & 0x7F)
5720 }
5721 return ret
5722}
5723
5724function latin1Slice (buf, start, end) {
5725 var ret = ''
5726 end = Math.min(buf.length, end)
5727
5728 for (var i = start; i < end; ++i) {
5729 ret += String.fromCharCode(buf[i])
5730 }
5731 return ret
5732}
5733
5734function hexSlice (buf, start, end) {
5735 var len = buf.length
5736
5737 if (!start || start < 0) start = 0
5738 if (!end || end < 0 || end > len) end = len
5739
5740 var out = ''
5741 for (var i = start; i < end; ++i) {
5742 out += toHex(buf[i])
5743 }
5744 return out
5745}
5746
5747function utf16leSlice (buf, start, end) {
5748 var bytes = buf.slice(start, end)
5749 var res = ''
5750 for (var i = 0; i < bytes.length; i += 2) {
5751 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
5752 }
5753 return res
5754}
5755
5756Buffer.prototype.slice = function slice (start, end) {
5757 var len = this.length
5758 start = ~~start
5759 end = end === undefined ? len : ~~end
5760
5761 if (start < 0) {
5762 start += len
5763 if (start < 0) start = 0
5764 } else if (start > len) {
5765 start = len
5766 }
5767
5768 if (end < 0) {
5769 end += len
5770 if (end < 0) end = 0
5771 } else if (end > len) {
5772 end = len
5773 }
5774
5775 if (end < start) end = start
5776
5777 var newBuf = this.subarray(start, end)
5778 // Return an augmented `Uint8Array` instance
5779 newBuf.__proto__ = Buffer.prototype
5780 return newBuf
5781}
5782
5783/*
5784 * Need to make sure that buffer isn't trying to write out of bounds.
5785 */
5786function checkOffset (offset, ext, length) {
5787 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
5788 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
5789}
5790
5791Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
5792 offset = offset >>> 0
5793 byteLength = byteLength >>> 0
5794 if (!noAssert) checkOffset(offset, byteLength, this.length)
5795
5796 var val = this[offset]
5797 var mul = 1
5798 var i = 0
5799 while (++i < byteLength && (mul *= 0x100)) {
5800 val += this[offset + i] * mul
5801 }
5802
5803 return val
5804}
5805
5806Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
5807 offset = offset >>> 0
5808 byteLength = byteLength >>> 0
5809 if (!noAssert) {
5810 checkOffset(offset, byteLength, this.length)
5811 }
5812
5813 var val = this[offset + --byteLength]
5814 var mul = 1
5815 while (byteLength > 0 && (mul *= 0x100)) {
5816 val += this[offset + --byteLength] * mul
5817 }
5818
5819 return val
5820}
5821
5822Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
5823 offset = offset >>> 0
5824 if (!noAssert) checkOffset(offset, 1, this.length)
5825 return this[offset]
5826}
5827
5828Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
5829 offset = offset >>> 0
5830 if (!noAssert) checkOffset(offset, 2, this.length)
5831 return this[offset] | (this[offset + 1] << 8)
5832}
5833
5834Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
5835 offset = offset >>> 0
5836 if (!noAssert) checkOffset(offset, 2, this.length)
5837 return (this[offset] << 8) | this[offset + 1]
5838}
5839
5840Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
5841 offset = offset >>> 0
5842 if (!noAssert) checkOffset(offset, 4, this.length)
5843
5844 return ((this[offset]) |
5845 (this[offset + 1] << 8) |
5846 (this[offset + 2] << 16)) +
5847 (this[offset + 3] * 0x1000000)
5848}
5849
5850Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
5851 offset = offset >>> 0
5852 if (!noAssert) checkOffset(offset, 4, this.length)
5853
5854 return (this[offset] * 0x1000000) +
5855 ((this[offset + 1] << 16) |
5856 (this[offset + 2] << 8) |
5857 this[offset + 3])
5858}
5859
5860Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
5861 offset = offset >>> 0
5862 byteLength = byteLength >>> 0
5863 if (!noAssert) checkOffset(offset, byteLength, this.length)
5864
5865 var val = this[offset]
5866 var mul = 1
5867 var i = 0
5868 while (++i < byteLength && (mul *= 0x100)) {
5869 val += this[offset + i] * mul
5870 }
5871 mul *= 0x80
5872
5873 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
5874
5875 return val
5876}
5877
5878Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
5879 offset = offset >>> 0
5880 byteLength = byteLength >>> 0
5881 if (!noAssert) checkOffset(offset, byteLength, this.length)
5882
5883 var i = byteLength
5884 var mul = 1
5885 var val = this[offset + --i]
5886 while (i > 0 && (mul *= 0x100)) {
5887 val += this[offset + --i] * mul
5888 }
5889 mul *= 0x80
5890
5891 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
5892
5893 return val
5894}
5895
5896Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
5897 offset = offset >>> 0
5898 if (!noAssert) checkOffset(offset, 1, this.length)
5899 if (!(this[offset] & 0x80)) return (this[offset])
5900 return ((0xff - this[offset] + 1) * -1)
5901}
5902
5903Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
5904 offset = offset >>> 0
5905 if (!noAssert) checkOffset(offset, 2, this.length)
5906 var val = this[offset] | (this[offset + 1] << 8)
5907 return (val & 0x8000) ? val | 0xFFFF0000 : val
5908}
5909
5910Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
5911 offset = offset >>> 0
5912 if (!noAssert) checkOffset(offset, 2, this.length)
5913 var val = this[offset + 1] | (this[offset] << 8)
5914 return (val & 0x8000) ? val | 0xFFFF0000 : val
5915}
5916
5917Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
5918 offset = offset >>> 0
5919 if (!noAssert) checkOffset(offset, 4, this.length)
5920
5921 return (this[offset]) |
5922 (this[offset + 1] << 8) |
5923 (this[offset + 2] << 16) |
5924 (this[offset + 3] << 24)
5925}
5926
5927Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
5928 offset = offset >>> 0
5929 if (!noAssert) checkOffset(offset, 4, this.length)
5930
5931 return (this[offset] << 24) |
5932 (this[offset + 1] << 16) |
5933 (this[offset + 2] << 8) |
5934 (this[offset + 3])
5935}
5936
5937Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
5938 offset = offset >>> 0
5939 if (!noAssert) checkOffset(offset, 4, this.length)
5940 return ieee754.read(this, offset, true, 23, 4)
5941}
5942
5943Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
5944 offset = offset >>> 0
5945 if (!noAssert) checkOffset(offset, 4, this.length)
5946 return ieee754.read(this, offset, false, 23, 4)
5947}
5948
5949Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
5950 offset = offset >>> 0
5951 if (!noAssert) checkOffset(offset, 8, this.length)
5952 return ieee754.read(this, offset, true, 52, 8)
5953}
5954
5955Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
5956 offset = offset >>> 0
5957 if (!noAssert) checkOffset(offset, 8, this.length)
5958 return ieee754.read(this, offset, false, 52, 8)
5959}
5960
5961function checkInt (buf, value, offset, ext, max, min) {
5962 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
5963 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
5964 if (offset + ext > buf.length) throw new RangeError('Index out of range')
5965}
5966
5967Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
5968 value = +value
5969 offset = offset >>> 0
5970 byteLength = byteLength >>> 0
5971 if (!noAssert) {
5972 var maxBytes = Math.pow(2, 8 * byteLength) - 1
5973 checkInt(this, value, offset, byteLength, maxBytes, 0)
5974 }
5975
5976 var mul = 1
5977 var i = 0
5978 this[offset] = value & 0xFF
5979 while (++i < byteLength && (mul *= 0x100)) {
5980 this[offset + i] = (value / mul) & 0xFF
5981 }
5982
5983 return offset + byteLength
5984}
5985
5986Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
5987 value = +value
5988 offset = offset >>> 0
5989 byteLength = byteLength >>> 0
5990 if (!noAssert) {
5991 var maxBytes = Math.pow(2, 8 * byteLength) - 1
5992 checkInt(this, value, offset, byteLength, maxBytes, 0)
5993 }
5994
5995 var i = byteLength - 1
5996 var mul = 1
5997 this[offset + i] = value & 0xFF
5998 while (--i >= 0 && (mul *= 0x100)) {
5999 this[offset + i] = (value / mul) & 0xFF
6000 }
6001
6002 return offset + byteLength
6003}
6004
6005Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
6006 value = +value
6007 offset = offset >>> 0
6008 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
6009 this[offset] = (value & 0xff)
6010 return offset + 1
6011}
6012
6013Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
6014 value = +value
6015 offset = offset >>> 0
6016 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
6017 this[offset] = (value & 0xff)
6018 this[offset + 1] = (value >>> 8)
6019 return offset + 2
6020}
6021
6022Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
6023 value = +value
6024 offset = offset >>> 0
6025 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
6026 this[offset] = (value >>> 8)
6027 this[offset + 1] = (value & 0xff)
6028 return offset + 2
6029}
6030
6031Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
6032 value = +value
6033 offset = offset >>> 0
6034 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
6035 this[offset + 3] = (value >>> 24)
6036 this[offset + 2] = (value >>> 16)
6037 this[offset + 1] = (value >>> 8)
6038 this[offset] = (value & 0xff)
6039 return offset + 4
6040}
6041
6042Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
6043 value = +value
6044 offset = offset >>> 0
6045 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
6046 this[offset] = (value >>> 24)
6047 this[offset + 1] = (value >>> 16)
6048 this[offset + 2] = (value >>> 8)
6049 this[offset + 3] = (value & 0xff)
6050 return offset + 4
6051}
6052
6053Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
6054 value = +value
6055 offset = offset >>> 0
6056 if (!noAssert) {
6057 var limit = Math.pow(2, (8 * byteLength) - 1)
6058
6059 checkInt(this, value, offset, byteLength, limit - 1, -limit)
6060 }
6061
6062 var i = 0
6063 var mul = 1
6064 var sub = 0
6065 this[offset] = value & 0xFF
6066 while (++i < byteLength && (mul *= 0x100)) {
6067 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
6068 sub = 1
6069 }
6070 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
6071 }
6072
6073 return offset + byteLength
6074}
6075
6076Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
6077 value = +value
6078 offset = offset >>> 0
6079 if (!noAssert) {
6080 var limit = Math.pow(2, (8 * byteLength) - 1)
6081
6082 checkInt(this, value, offset, byteLength, limit - 1, -limit)
6083 }
6084
6085 var i = byteLength - 1
6086 var mul = 1
6087 var sub = 0
6088 this[offset + i] = value & 0xFF
6089 while (--i >= 0 && (mul *= 0x100)) {
6090 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
6091 sub = 1
6092 }
6093 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
6094 }
6095
6096 return offset + byteLength
6097}
6098
6099Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
6100 value = +value
6101 offset = offset >>> 0
6102 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
6103 if (value < 0) value = 0xff + value + 1
6104 this[offset] = (value & 0xff)
6105 return offset + 1
6106}
6107
6108Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
6109 value = +value
6110 offset = offset >>> 0
6111 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
6112 this[offset] = (value & 0xff)
6113 this[offset + 1] = (value >>> 8)
6114 return offset + 2
6115}
6116
6117Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
6118 value = +value
6119 offset = offset >>> 0
6120 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
6121 this[offset] = (value >>> 8)
6122 this[offset + 1] = (value & 0xff)
6123 return offset + 2
6124}
6125
6126Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
6127 value = +value
6128 offset = offset >>> 0
6129 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
6130 this[offset] = (value & 0xff)
6131 this[offset + 1] = (value >>> 8)
6132 this[offset + 2] = (value >>> 16)
6133 this[offset + 3] = (value >>> 24)
6134 return offset + 4
6135}
6136
6137Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
6138 value = +value
6139 offset = offset >>> 0
6140 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
6141 if (value < 0) value = 0xffffffff + value + 1
6142 this[offset] = (value >>> 24)
6143 this[offset + 1] = (value >>> 16)
6144 this[offset + 2] = (value >>> 8)
6145 this[offset + 3] = (value & 0xff)
6146 return offset + 4
6147}
6148
6149function checkIEEE754 (buf, value, offset, ext, max, min) {
6150 if (offset + ext > buf.length) throw new RangeError('Index out of range')
6151 if (offset < 0) throw new RangeError('Index out of range')
6152}
6153
6154function writeFloat (buf, value, offset, littleEndian, noAssert) {
6155 value = +value
6156 offset = offset >>> 0
6157 if (!noAssert) {
6158 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
6159 }
6160 ieee754.write(buf, value, offset, littleEndian, 23, 4)
6161 return offset + 4
6162}
6163
6164Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
6165 return writeFloat(this, value, offset, true, noAssert)
6166}
6167
6168Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
6169 return writeFloat(this, value, offset, false, noAssert)
6170}
6171
6172function writeDouble (buf, value, offset, littleEndian, noAssert) {
6173 value = +value
6174 offset = offset >>> 0
6175 if (!noAssert) {
6176 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
6177 }
6178 ieee754.write(buf, value, offset, littleEndian, 52, 8)
6179 return offset + 8
6180}
6181
6182Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
6183 return writeDouble(this, value, offset, true, noAssert)
6184}
6185
6186Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
6187 return writeDouble(this, value, offset, false, noAssert)
6188}
6189
6190// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
6191Buffer.prototype.copy = function copy (target, targetStart, start, end) {
6192 if (!start) start = 0
6193 if (!end && end !== 0) end = this.length
6194 if (targetStart >= target.length) targetStart = target.length
6195 if (!targetStart) targetStart = 0
6196 if (end > 0 && end < start) end = start
6197
6198 // Copy 0 bytes; we're done
6199 if (end === start) return 0
6200 if (target.length === 0 || this.length === 0) return 0
6201
6202 // Fatal error conditions
6203 if (targetStart < 0) {
6204 throw new RangeError('targetStart out of bounds')
6205 }
6206 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
6207 if (end < 0) throw new RangeError('sourceEnd out of bounds')
6208
6209 // Are we oob?
6210 if (end > this.length) end = this.length
6211 if (target.length - targetStart < end - start) {
6212 end = target.length - targetStart + start
6213 }
6214
6215 var len = end - start
6216 var i
6217
6218 if (this === target && start < targetStart && targetStart < end) {
6219 // descending copy from end
6220 for (i = len - 1; i >= 0; --i) {
6221 target[i + targetStart] = this[i + start]
6222 }
6223 } else if (len < 1000) {
6224 // ascending copy from start
6225 for (i = 0; i < len; ++i) {
6226 target[i + targetStart] = this[i + start]
6227 }
6228 } else {
6229 Uint8Array.prototype.set.call(
6230 target,
6231 this.subarray(start, start + len),
6232 targetStart
6233 )
6234 }
6235
6236 return len
6237}
6238
6239// Usage:
6240// buffer.fill(number[, offset[, end]])
6241// buffer.fill(buffer[, offset[, end]])
6242// buffer.fill(string[, offset[, end]][, encoding])
6243Buffer.prototype.fill = function fill (val, start, end, encoding) {
6244 // Handle string cases:
6245 if (typeof val === 'string') {
6246 if (typeof start === 'string') {
6247 encoding = start
6248 start = 0
6249 end = this.length
6250 } else if (typeof end === 'string') {
6251 encoding = end
6252 end = this.length
6253 }
6254 if (val.length === 1) {
6255 var code = val.charCodeAt(0)
6256 if (code < 256) {
6257 val = code
6258 }
6259 }
6260 if (encoding !== undefined && typeof encoding !== 'string') {
6261 throw new TypeError('encoding must be a string')
6262 }
6263 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
6264 throw new TypeError('Unknown encoding: ' + encoding)
6265 }
6266 } else if (typeof val === 'number') {
6267 val = val & 255
6268 }
6269
6270 // Invalid ranges are not set to a default, so can range check early.
6271 if (start < 0 || this.length < start || this.length < end) {
6272 throw new RangeError('Out of range index')
6273 }
6274
6275 if (end <= start) {
6276 return this
6277 }
6278
6279 start = start >>> 0
6280 end = end === undefined ? this.length : end >>> 0
6281
6282 if (!val) val = 0
6283
6284 var i
6285 if (typeof val === 'number') {
6286 for (i = start; i < end; ++i) {
6287 this[i] = val
6288 }
6289 } else {
6290 var bytes = Buffer.isBuffer(val)
6291 ? val
6292 : new Buffer(val, encoding)
6293 var len = bytes.length
6294 for (i = 0; i < end - start; ++i) {
6295 this[i + start] = bytes[i % len]
6296 }
6297 }
6298
6299 return this
6300}
6301
6302// HELPER FUNCTIONS
6303// ================
6304
6305var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
6306
6307function base64clean (str) {
6308 // Node strips out invalid characters like \n and \t from the string, base64-js does not
6309 str = str.trim().replace(INVALID_BASE64_RE, '')
6310 // Node converts strings with length < 2 to ''
6311 if (str.length < 2) return ''
6312 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
6313 while (str.length % 4 !== 0) {
6314 str = str + '='
6315 }
6316 return str
6317}
6318
6319function toHex (n) {
6320 if (n < 16) return '0' + n.toString(16)
6321 return n.toString(16)
6322}
6323
6324function utf8ToBytes (string, units) {
6325 units = units || Infinity
6326 var codePoint
6327 var length = string.length
6328 var leadSurrogate = null
6329 var bytes = []
6330
6331 for (var i = 0; i < length; ++i) {
6332 codePoint = string.charCodeAt(i)
6333
6334 // is surrogate component
6335 if (codePoint > 0xD7FF && codePoint < 0xE000) {
6336 // last char was a lead
6337 if (!leadSurrogate) {
6338 // no lead yet
6339 if (codePoint > 0xDBFF) {
6340 // unexpected trail
6341 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
6342 continue
6343 } else if (i + 1 === length) {
6344 // unpaired lead
6345 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
6346 continue
6347 }
6348
6349 // valid lead
6350 leadSurrogate = codePoint
6351
6352 continue
6353 }
6354
6355 // 2 leads in a row
6356 if (codePoint < 0xDC00) {
6357 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
6358 leadSurrogate = codePoint
6359 continue
6360 }
6361
6362 // valid surrogate pair
6363 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
6364 } else if (leadSurrogate) {
6365 // valid bmp char, but last char was a lead
6366 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
6367 }
6368
6369 leadSurrogate = null
6370
6371 // encode utf8
6372 if (codePoint < 0x80) {
6373 if ((units -= 1) < 0) break
6374 bytes.push(codePoint)
6375 } else if (codePoint < 0x800) {
6376 if ((units -= 2) < 0) break
6377 bytes.push(
6378 codePoint >> 0x6 | 0xC0,
6379 codePoint & 0x3F | 0x80
6380 )
6381 } else if (codePoint < 0x10000) {
6382 if ((units -= 3) < 0) break
6383 bytes.push(
6384 codePoint >> 0xC | 0xE0,
6385 codePoint >> 0x6 & 0x3F | 0x80,
6386 codePoint & 0x3F | 0x80
6387 )
6388 } else if (codePoint < 0x110000) {
6389 if ((units -= 4) < 0) break
6390 bytes.push(
6391 codePoint >> 0x12 | 0xF0,
6392 codePoint >> 0xC & 0x3F | 0x80,
6393 codePoint >> 0x6 & 0x3F | 0x80,
6394 codePoint & 0x3F | 0x80
6395 )
6396 } else {
6397 throw new Error('Invalid code point')
6398 }
6399 }
6400
6401 return bytes
6402}
6403
6404function asciiToBytes (str) {
6405 var byteArray = []
6406 for (var i = 0; i < str.length; ++i) {
6407 // Node's code seems to be doing this and not & 0x7F..
6408 byteArray.push(str.charCodeAt(i) & 0xFF)
6409 }
6410 return byteArray
6411}
6412
6413function utf16leToBytes (str, units) {
6414 var c, hi, lo
6415 var byteArray = []
6416 for (var i = 0; i < str.length; ++i) {
6417 if ((units -= 2) < 0) break
6418
6419 c = str.charCodeAt(i)
6420 hi = c >> 8
6421 lo = c % 256
6422 byteArray.push(lo)
6423 byteArray.push(hi)
6424 }
6425
6426 return byteArray
6427}
6428
6429function base64ToBytes (str) {
6430 return base64.toByteArray(base64clean(str))
6431}
6432
6433function blitBuffer (src, dst, offset, length) {
6434 for (var i = 0; i < length; ++i) {
6435 if ((i + offset >= dst.length) || (i >= src.length)) break
6436 dst[i + offset] = src[i]
6437 }
6438 return i
6439}
6440
6441// Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`
6442function isArrayBufferView (obj) {
6443 return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)
6444}
6445
6446function numberIsNaN (obj) {
6447 return obj !== obj // eslint-disable-line no-self-compare
6448}
6449
6450},{"base64-js":1,"ieee754":3}],3:[function(require,module,exports){
6451exports.read = function (buffer, offset, isLE, mLen, nBytes) {
6452 var e, m
6453 var eLen = nBytes * 8 - mLen - 1
6454 var eMax = (1 << eLen) - 1
6455 var eBias = eMax >> 1
6456 var nBits = -7
6457 var i = isLE ? (nBytes - 1) : 0
6458 var d = isLE ? -1 : 1
6459 var s = buffer[offset + i]
6460
6461 i += d
6462
6463 e = s & ((1 << (-nBits)) - 1)
6464 s >>= (-nBits)
6465 nBits += eLen
6466 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
6467
6468 m = e & ((1 << (-nBits)) - 1)
6469 e >>= (-nBits)
6470 nBits += mLen
6471 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
6472
6473 if (e === 0) {
6474 e = 1 - eBias
6475 } else if (e === eMax) {
6476 return m ? NaN : ((s ? -1 : 1) * Infinity)
6477 } else {
6478 m = m + Math.pow(2, mLen)
6479 e = e - eBias
6480 }
6481 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
6482}
6483
6484exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
6485 var e, m, c
6486 var eLen = nBytes * 8 - mLen - 1
6487 var eMax = (1 << eLen) - 1
6488 var eBias = eMax >> 1
6489 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
6490 var i = isLE ? 0 : (nBytes - 1)
6491 var d = isLE ? 1 : -1
6492 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
6493
6494 value = Math.abs(value)
6495
6496 if (isNaN(value) || value === Infinity) {
6497 m = isNaN(value) ? 1 : 0
6498 e = eMax
6499 } else {
6500 e = Math.floor(Math.log(value) / Math.LN2)
6501 if (value * (c = Math.pow(2, -e)) < 1) {
6502 e--
6503 c *= 2
6504 }
6505 if (e + eBias >= 1) {
6506 value += rt / c
6507 } else {
6508 value += rt * Math.pow(2, 1 - eBias)
6509 }
6510 if (value * c >= 2) {
6511 e++
6512 c /= 2
6513 }
6514
6515 if (e + eBias >= eMax) {
6516 m = 0
6517 e = eMax
6518 } else if (e + eBias >= 1) {
6519 m = (value * c - 1) * Math.pow(2, mLen)
6520 e = e + eBias
6521 } else {
6522 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
6523 e = 0
6524 }
6525 }
6526
6527 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
6528
6529 e = (e << mLen) | m
6530 eLen += mLen
6531 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
6532
6533 buffer[offset + i - d] |= s * 128
6534}
6535
6536},{}],4:[function(require,module,exports){
6537window.basex = require('base-x')
6538},{"base-x":5}],5:[function(require,module,exports){
6539// base-x encoding
6540// Forked from https://github.com/cryptocoinjs/bs58
6541// Originally written by Mike Hearn for BitcoinJ
6542// Copyright (c) 2011 Google Inc
6543// Ported to JavaScript by Stefan Thomas
6544// Merged Buffer refactorings from base58-native by Stephen Pair
6545// Copyright (c) 2013 BitPay Inc
6546
6547var Buffer = require('safe-buffer').Buffer
6548
6549module.exports = function base (ALPHABET) {
6550 var ALPHABET_MAP = {}
6551 var BASE = ALPHABET.length
6552 var LEADER = ALPHABET.charAt(0)
6553
6554 // pre-compute lookup table
6555 for (var z = 0; z < ALPHABET.length; z++) {
6556 var x = ALPHABET.charAt(z)
6557
6558 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
6559 ALPHABET_MAP[x] = z
6560 }
6561
6562 function encode (source) {
6563 if (source.length === 0) return ''
6564
6565 var digits = [0]
6566 for (var i = 0; i < source.length; ++i) {
6567 for (var j = 0, carry = source[i]; j < digits.length; ++j) {
6568 carry += digits[j] << 8
6569 digits[j] = carry % BASE
6570 carry = (carry / BASE) | 0
6571 }
6572
6573 while (carry > 0) {
6574 digits.push(carry % BASE)
6575 carry = (carry / BASE) | 0
6576 }
6577 }
6578
6579 var string = ''
6580
6581 // deal with leading zeros
6582 for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += ALPHABET[0]
6583 // convert digits to a string
6584 for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]
6585
6586 return string
6587 }
6588
6589 function decodeUnsafe (string) {
6590 if (string.length === 0) return Buffer.allocUnsafe(0)
6591
6592 var bytes = [0]
6593 for (var i = 0; i < string.length; i++) {
6594 var value = ALPHABET_MAP[string[i]]
6595 if (value === undefined) return
6596
6597 for (var j = 0, carry = value; j < bytes.length; ++j) {
6598 carry += bytes[j] * BASE
6599 bytes[j] = carry & 0xff
6600 carry >>= 8
6601 }
6602
6603 while (carry > 0) {
6604 bytes.push(carry & 0xff)
6605 carry >>= 8
6606 }
6607 }
6608
6609 // deal with leading zeros
6610 for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {
6611 bytes.push(0)
6612 }
6613
6614 return Buffer.from(bytes.reverse())
6615 }
6616
6617 function decode (string) {
6618 var buffer = decodeUnsafe(string)
6619 if (buffer) return buffer
6620
6621 throw new Error('Non-base' + BASE + ' character')
6622 }
6623
6624 return {
6625 encode: encode,
6626 decodeUnsafe: decodeUnsafe,
6627 decode: decode
6628 }
6629}
6630
6631},{"safe-buffer":6}],6:[function(require,module,exports){
6632module.exports = require('buffer')
6633
6634},{"buffer":2}]},{},[4])(4)
6635});</script>
6e0f24b1
IC
6636 <script>(function (root) {
6637 "use strict";
6638
6639/***** unorm.js *****/
6640
6641/*
6642 * UnicodeNormalizer 1.0.0
6643 * Copyright (c) 2008 Matsuza
6644 * Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
6645 * $Date: 2008-06-05 16:44:17 +0200 (Thu, 05 Jun 2008) $
6646 * $Rev: 13309 $
6647 */
6648
6649 var DEFAULT_FEATURE = [null, 0, {}];
6650 var CACHE_THRESHOLD = 10;
6651 var SBase = 0xAC00, LBase = 0x1100, VBase = 0x1161, TBase = 0x11A7, LCount = 19, VCount = 21, TCount = 28;
6652 var NCount = VCount * TCount; // 588
6653 var SCount = LCount * NCount; // 11172
6654
6655 var UChar = function(cp, feature){
6656 this.codepoint = cp;
6657 this.feature = feature;
6658 };
6659
6660 // Strategies
6661 var cache = {};
6662 var cacheCounter = [];
6663 for (var i = 0; i <= 0xFF; ++i){
6664 cacheCounter[i] = 0;
6665 }
6666
6667 function fromCache(next, cp, needFeature){
6668 var ret = cache[cp];
6669 if(!ret){
6670 ret = next(cp, needFeature);
6671 if(!!ret.feature && ++cacheCounter[(cp >> 8) & 0xFF] > CACHE_THRESHOLD){
6672 cache[cp] = ret;
6673 }
6674 }
6675 return ret;
6676 }
6677
6678 function fromData(next, cp, needFeature){
6679 var hash = cp & 0xFF00;
6680 var dunit = UChar.udata[hash] || {};
6681 var f = dunit[cp];
6682 return f ? new UChar(cp, f) : new UChar(cp, DEFAULT_FEATURE);
6683 }
6684 function fromCpOnly(next, cp, needFeature){
6685 return !!needFeature ? next(cp, needFeature) : new UChar(cp, null);
6686 }
6687 function fromRuleBasedJamo(next, cp, needFeature){
6688 var j;
6689 if(cp < LBase || (LBase + LCount <= cp && cp < SBase) || (SBase + SCount < cp)){
6690 return next(cp, needFeature);
6691 }
6692 if(LBase <= cp && cp < LBase + LCount){
6693 var c = {};
6694 var base = (cp - LBase) * VCount;
6695 for (j = 0; j < VCount; ++j){
6696 c[VBase + j] = SBase + TCount * (j + base);
6697 }
6698 return new UChar(cp, [,,c]);
6699 }
6700
6701 var SIndex = cp - SBase;
6702 var TIndex = SIndex % TCount;
6703 var feature = [];
6704 if(TIndex !== 0){
6705 feature[0] = [SBase + SIndex - TIndex, TBase + TIndex];
6706 } else {
6707 feature[0] = [LBase + Math.floor(SIndex / NCount), VBase + Math.floor((SIndex % NCount) / TCount)];
6708 feature[2] = {};
6709 for (j = 1; j < TCount; ++j){
6710 feature[2][TBase + j] = cp + j;
6711 }
6712 }
6713 return new UChar(cp, feature);
6714 }
6715 function fromCpFilter(next, cp, needFeature){
6716 return cp < 60 || 13311 < cp && cp < 42607 ? new UChar(cp, DEFAULT_FEATURE) : next(cp, needFeature);
6717 }
6718
6719 var strategies = [fromCpFilter, fromCache, fromCpOnly, fromRuleBasedJamo, fromData];
6720
6721 UChar.fromCharCode = strategies.reduceRight(function (next, strategy) {
6722 return function (cp, needFeature) {
6723 return strategy(next, cp, needFeature);
6724 };
6725 }, null);
6726
6727 UChar.isHighSurrogate = function(cp){
6728 return cp >= 0xD800 && cp <= 0xDBFF;
6729 };
6730 UChar.isLowSurrogate = function(cp){
6731 return cp >= 0xDC00 && cp <= 0xDFFF;
6732 };
6733
6734 UChar.prototype.prepFeature = function(){
6735 if(!this.feature){
6736 this.feature = UChar.fromCharCode(this.codepoint, true).feature;
6737 }
6738 };
6739
6740 UChar.prototype.toString = function(){
6741 if(this.codepoint < 0x10000){
6742 return String.fromCharCode(this.codepoint);
6743 } else {
6744 var x = this.codepoint - 0x10000;
6745 return String.fromCharCode(Math.floor(x / 0x400) + 0xD800, x % 0x400 + 0xDC00);
6746 }
6747 };
6748
6749 UChar.prototype.getDecomp = function(){
6750 this.prepFeature();
6751 return this.feature[0] || null;
6752 };
6753
6754 UChar.prototype.isCompatibility = function(){
6755 this.prepFeature();
6756 return !!this.feature[1] && (this.feature[1] & (1 << 8));
6757 };
6758 UChar.prototype.isExclude = function(){
6759 this.prepFeature();
6760 return !!this.feature[1] && (this.feature[1] & (1 << 9));
6761 };
6762 UChar.prototype.getCanonicalClass = function(){
6763 this.prepFeature();
6764 return !!this.feature[1] ? (this.feature[1] & 0xff) : 0;
6765 };
6766 UChar.prototype.getComposite = function(following){
6767 this.prepFeature();
6768 if(!this.feature[2]){
6769 return null;
6770 }
6771 var cp = this.feature[2][following.codepoint];
6772 return cp ? UChar.fromCharCode(cp) : null;
6773 };
6774
6775 var UCharIterator = function(str){
6776 this.str = str;
6777 this.cursor = 0;
6778 };
6779 UCharIterator.prototype.next = function(){
6780 if(!!this.str && this.cursor < this.str.length){
6781 var cp = this.str.charCodeAt(this.cursor++);
6782 var d;
6783 if(UChar.isHighSurrogate(cp) && this.cursor < this.str.length && UChar.isLowSurrogate((d = this.str.charCodeAt(this.cursor)))){
6784 cp = (cp - 0xD800) * 0x400 + (d -0xDC00) + 0x10000;
6785 ++this.cursor;
6786 }
6787 return UChar.fromCharCode(cp);
6788 } else {
6789 this.str = null;
6790 return null;
6791 }
6792 };
6793
6794 var RecursDecompIterator = function(it, cano){
6795 this.it = it;
6796 this.canonical = cano;
6797 this.resBuf = [];
6798 };
6799
6800 RecursDecompIterator.prototype.next = function(){
6801 function recursiveDecomp(cano, uchar){
6802 var decomp = uchar.getDecomp();
6803 if(!!decomp && !(cano && uchar.isCompatibility())){
6804 var ret = [];
6805 for(var i = 0; i < decomp.length; ++i){
6806 var a = recursiveDecomp(cano, UChar.fromCharCode(decomp[i]));
6807 ret = ret.concat(a);
6808 }
6809 return ret;
6810 } else {
6811 return [uchar];
6812 }
6813 }
6814 if(this.resBuf.length === 0){
6815 var uchar = this.it.next();
6816 if(!uchar){
6817 return null;
6818 }
6819 this.resBuf = recursiveDecomp(this.canonical, uchar);
6820 }
6821 return this.resBuf.shift();
6822 };
6823
6824 var DecompIterator = function(it){
6825 this.it = it;
6826 this.resBuf = [];
6827 };
6828
6829 DecompIterator.prototype.next = function(){
6830 var cc;
6831 if(this.resBuf.length === 0){
6832 do{
6833 var uchar = this.it.next();
6834 if(!uchar){
6835 break;
6836 }
6837 cc = uchar.getCanonicalClass();
6838 var inspt = this.resBuf.length;
6839 if(cc !== 0){
6840 for(; inspt > 0; --inspt){
6841 var uchar2 = this.resBuf[inspt - 1];
6842 var cc2 = uchar2.getCanonicalClass();
6843 if(cc2 <= cc){
6844 break;
6845 }
6846 }
6847 }
6848 this.resBuf.splice(inspt, 0, uchar);
6849 } while(cc !== 0);
6850 }
6851 return this.resBuf.shift();
6852 };
6853
6854 var CompIterator = function(it){
6855 this.it = it;
6856 this.procBuf = [];
6857 this.resBuf = [];
6858 this.lastClass = null;
6859 };
6860
6861 CompIterator.prototype.next = function(){
6862 while(this.resBuf.length === 0){
6863 var uchar = this.it.next();
6864 if(!uchar){
6865 this.resBuf = this.procBuf;
6866 this.procBuf = [];
6867 break;
6868 }
6869 if(this.procBuf.length === 0){
6870 this.lastClass = uchar.getCanonicalClass();
6871 this.procBuf.push(uchar);
6872 } else {
6873 var starter = this.procBuf[0];
6874 var composite = starter.getComposite(uchar);
6875 var cc = uchar.getCanonicalClass();
6876 if(!!composite && (this.lastClass < cc || this.lastClass === 0)){
6877 this.procBuf[0] = composite;
6878 } else {
6879 if(cc === 0){
6880 this.resBuf = this.procBuf;
6881 this.procBuf = [];
6882 }
6883 this.lastClass = cc;
6884 this.procBuf.push(uchar);
6885 }
6886 }
6887 }
6888 return this.resBuf.shift();
6889 };
6890
6891 var createIterator = function(mode, str){
6892 switch(mode){
6893 case "NFD":
6894 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true));
6895 case "NFKD":
6896 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false));
6897 case "NFC":
6898 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true)));
6899 case "NFKC":
6900 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false)));
6901 }
6902 throw mode + " is invalid";
6903 };
6904 var normalize = function(mode, str){
6905 var it = createIterator(mode, str);
6906 var ret = "";
6907 var uchar;
6908 while(!!(uchar = it.next())){
6909 ret += uchar.toString();
6910 }
6911 return ret;
6912 };
6913
6914 /* API functions */
6915 function nfd(str){
6916 return normalize("NFD", str);
6917 }
6918
6919 function nfkd(str){
6920 return normalize("NFKD", str);
6921 }
6922
6923 function nfc(str){
6924 return normalize("NFC", str);
6925 }
6926
6927 function nfkc(str){
6928 return normalize("NFKC", str);
6929 }
6930
6931/* Unicode data */
6932UChar.udata={
69330:{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]]},
6934256:{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]},
6935512:{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]},
6936768:{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]},
69371024:{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]]},
69381280:{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]},
69391536:{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]},
69401792:{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]},
69412048:{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]},
69422304:{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]},
69432560:{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]},
69442816:{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]},
69453072:{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]},
69463328:{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]]},
69473584:{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]},
69483840:{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]},
69494096:{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]},
69504352:{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]},
69514608:{70197:[,9],70198:[,7],70377:[,7],70378:[,9]},
69524864:{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]},
69535120:{70841:[,,{70832:70844,70842:70843,70845:70846}],70843:[[70841,70842]],70844:[[70841,70832]],70846:[[70841,70845]],70850:[,9],70851:[,7]},
69545376:{71096:[,,{71087:71098}],71097:[,,{71087:71099}],71098:[[71096,71087]],71099:[[71097,71087]],71103:[,9],71104:[,7]},
69555632:{71231:[,9],71350:[,9],71351:[,7]},
69565888:{5908:[,9],5940:[,9],6098:[,9],6109:[,230]},
69576144:{6313:[,228]},
69586400:{6457:[,222],6458:[,230],6459:[,220]},
69596656:{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]},
69606912:{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]},
69617168:{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]},
69627424:{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]},
69637680:{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]]},
69647936:{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}]},
69658192:{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]},
69668448:{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}]},
69678704:{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]]},
69688960:{9001:[[12296]],9002:[[12297]]},
69699216:{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]},
697010752:{10764:[[8747,8747,8747,8747],256],10868:[[58,58,61],256],10869:[[61,61],256],10870:[[61,61,61],256],10972:[[10973,824],512]},
697111264:{11388:[[106],256],11389:[[86],256],11503:[,230],11504:[,230],11505:[,230]},
697211520:{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]},
697311776:{11935:[[27597],256],12019:[[40863],256]},
697412032:{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]},
697512288:{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]},
697612544:{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]},
697712800:{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]},
697813056:{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]},
697927136:{92912:[,1],92913:[,1],92914:[,1],92915:[,1],92916:[,1]},
698027392:{92976:[,230],92977:[,230],92978:[,230],92979:[,230],92980:[,230],92981:[,230],92982:[,230]},
698142496:{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]},
698242752:{42864:[[42863],256],43000:[[294],256],43001:[[339],256]},
698343008:{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]},
698443264:{43307:[,220],43308:[,220],43309:[,220],43347:[,9],43443:[,7],43456:[,9]},
698543520:{43696:[,230],43698:[,230],43699:[,230],43700:[,220],43703:[,230],43704:[,230],43710:[,230],43711:[,230],43713:[,230],43766:[,9]},
698643776:{43868:[[42791],256],43869:[[43831],256],43870:[[619],256],43871:[[43858],256],44013:[,9]},
698748128:{113822:[,1]},
698853504:{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]},
698953760:{119362:[,230],119363:[,230],119364:[,230]},
699054272:{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]},
699154528:{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]},
699254784:{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]},
699355040:{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]},
699459392:{125136:[,220],125137:[,220],125138:[,220],125139:[,220],125140:[,220],125141:[,220],125142:[,220]},
699560928:{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]},
699661696:{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]},
699761952:{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]},
699863488:{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]]},
699963744:{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]]},
700064000:{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]]},
700164256:{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]},
700264512:{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]},
700364768:{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]},
700465024:{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]},
700565280:{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]}
7006
7007};
7008
7009 /***** Module to export */
7010 var unorm = {
7011 nfc: nfc,
7012 nfd: nfd,
7013 nfkc: nfkc,
7014 nfkd: nfkd
7015 };
7016
7017 /*globals module:true,define:true*/
7018
7019 // CommonJS
7020 if (typeof module === "object") {
7021 module.exports = unorm;
7022
7023 // AMD
7024 } else if (typeof define === "function" && define.amd) {
7025 define("unorm", function () {
7026 return unorm;
7027 });
7028
7029 // Global
7030 } else {
7031 root.unorm = unorm;
7032 }
7033
7034 /***** Export as shim for String::normalize method *****/
7035 /*
7036 http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts#november_8_2013_draft_rev_21
7037
7038 21.1.3.12 String.prototype.normalize(form="NFC")
7039 When the normalize method is called with one argument form, the following steps are taken:
7040
7041 1. Let O be CheckObjectCoercible(this value).
7042 2. Let S be ToString(O).
7043 3. ReturnIfAbrupt(S).
7044 4. If form is not provided or undefined let form be "NFC".
7045 5. Let f be ToString(form).
7046 6. ReturnIfAbrupt(f).
7047 7. If f is not one of "NFC", "NFD", "NFKC", or "NFKD", then throw a RangeError Exception.
7048 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.
7049 9. Return ns.
7050
7051 The length property of the normalize method is 0.
7052
7053 *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.
7054 */
7055 unorm.shimApplied = false;
7056
7057 if (!String.prototype.normalize) {
7058 String.prototype.normalize = function(form) {
7059 var str = "" + this;
7060 form = form === undefined ? "NFC" : form;
7061
7062 if (form === "NFC") {
7063 return unorm.nfc(str);
7064 } else if (form === "NFD") {
7065 return unorm.nfd(str);
7066 } else if (form === "NFKC") {
7067 return unorm.nfkc(str);
7068 } else if (form === "NFKD") {
7069 return unorm.nfkd(str);
7070 } else {
7071 throw new RangeError("Invalid normalization form: " + form);
7072 }
7073 };
7074
7075 unorm.shimApplied = true;
7076 }
7077}(this));
8b095871
IC
7078</script>
7079 <script>/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
7080!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)
7081},_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))
7082},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});
7083</script>
7084 <script>/*!
7085 * Bootstrap v3.2.0 (http://getbootstrap.com)
7086 * Copyright 2011-2014 Twitter, Inc.
7087 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
7088 */
7089if("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>
7090 <script>(function() {
7091 'use strict';
7092
7093 /**
7094 * Extend an Object with another Object's properties.
7095 *
7096 * The source objects are specified as additional arguments.
7097 *
7098 * @param dst Object the object to extend.
7099 *
7100 * @return Object the final object.
7101 */
7102 var _extend = function(dst) {
7103 var sources = Array.prototype.slice.call(arguments, 1);
7104 for (var i=0; i<sources.length; ++i) {
7105 var src = sources[i];
7106 for (var p in src) {
7107 if (src.hasOwnProperty(p)) dst[p] = src[p];
7108 }
7109 }
7110 return dst;
7111 };
7112
7113
7114 /**
7115 * Defer execution of given function.
7116 * @param {Function} func
7117 */
7118 var _defer = function(func) {
7119 if (typeof setImmediate === 'function') {
7120 return setImmediate(func);
7121 } else {
7122 return setTimeout(func, 0);
7123 }
7124 };
7125
7126 /**
7127 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
7128 */
7129 var Levenshtein = {
7130 /**
7131 * Calculate levenshtein distance of the two strings.
7132 *
7133 * @param str1 String the first string.
7134 * @param str2 String the second string.
7135 * @return Integer the levenshtein distance (0 and above).
7136 */
7137 get: function(str1, str2) {
7138 // base cases
7139 if (str1 === str2) return 0;
7140 if (str1.length === 0) return str2.length;
7141 if (str2.length === 0) return str1.length;
7142
7143 // two rows
7144 var prevRow = new Array(str2.length + 1),
7145 curCol, nextCol, i, j, tmp;
7146
7147 // initialise previous row
7148 for (i=0; i<prevRow.length; ++i) {
7149 prevRow[i] = i;
7150 }
7151
7152 // calculate current row distance from previous row
7153 for (i=0; i<str1.length; ++i) {
7154 nextCol = i + 1;
7155
7156 for (j=0; j<str2.length; ++j) {
7157 curCol = nextCol;
7158
7159 // substution
7160 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
7161 // insertion
7162 tmp = curCol + 1;
7163 if (nextCol > tmp) {
7164 nextCol = tmp;
7165 }
7166 // deletion
7167 tmp = prevRow[j + 1] + 1;
7168 if (nextCol > tmp) {
7169 nextCol = tmp;
7170 }
7171
7172 // copy current col value into previous (in preparation for next iteration)
7173 prevRow[j] = curCol;
7174 }
7175
7176 // copy last col value into previous (in preparation for next iteration)
7177 prevRow[j] = nextCol;
7178 }
7179
7180 return nextCol;
7181 },
7182
7183 /**
7184 * Asynchronously calculate levenshtein distance of the two strings.
7185 *
7186 * @param str1 String the first string.
7187 * @param str2 String the second string.
7188 * @param cb Function callback function with signature: function(Error err, int distance)
7189 * @param [options] Object additional options.
7190 * @param [options.progress] Function progress callback with signature: function(percentComplete)
7191 */
7192 getAsync: function(str1, str2, cb, options) {
7193 options = _extend({}, {
7194 progress: null
7195 }, options);
7196
7197 // base cases
7198 if (str1 === str2) return cb(null, 0);
7199 if (str1.length === 0) return cb(null, str2.length);
7200 if (str2.length === 0) return cb(null, str1.length);
7201
7202 // two rows
7203 var prevRow = new Array(str2.length + 1),
7204 curCol, nextCol,
7205 i, j, tmp,
7206 startTime, currentTime;
7207
7208 // initialise previous row
7209 for (i=0; i<prevRow.length; ++i) {
7210 prevRow[i] = i;
7211 }
7212
7213 nextCol = 1;
7214 i = 0;
7215 j = -1;
7216
7217 var __calculate = function() {
7218 // reset timer
7219 startTime = new Date().valueOf();
7220 currentTime = startTime;
7221
7222 // keep going until one second has elapsed
7223 while (currentTime - startTime < 1000) {
7224 // reached end of current row?
7225 if (str2.length <= (++j)) {
7226 // copy current into previous (in preparation for next iteration)
7227 prevRow[j] = nextCol;
7228
7229 // if already done all chars
7230 if (str1.length <= (++i)) {
7231 return cb(null, nextCol);
7232 }
7233 // else if we have more left to do
7234 else {
7235 nextCol = i + 1;
7236 j = 0;
7237 }
7238 }
7239
7240 // calculation
7241 curCol = nextCol;
7242
7243 // substution
7244 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
7245 // insertion
7246 tmp = curCol + 1;
7247 if (nextCol > tmp) {
7248 nextCol = tmp;
7249 }
7250 // deletion
7251 tmp = prevRow[j + 1] + 1;
7252 if (nextCol > tmp) {
7253 nextCol = tmp;
7254 }
7255
7256 // copy current into previous (in preparation for next iteration)
7257 prevRow[j] = curCol;
7258
7259 // get current time
7260 currentTime = new Date().valueOf();
7261 }
7262
7263 // send a progress update?
7264 if (null !== options.progress) {
7265 try {
7266 options.progress.call(null, (i * 100.0/ str1.length));
7267 } catch (err) {
7268 return cb('Progress callback: ' + err.toString());
7269 }
7270 }
7271
7272 // next iteration
7273 _defer(__calculate);
7274 };
7275
7276 __calculate();
7277 }
7278
7279 };
7280
7281 // amd
7282 if (typeof define !== "undefined" && define !== null && define.amd) {
7283 define(function() {
7284 return Levenshtein;
7285 });
7286 }
7287 // commonjs
7288 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
7289 module.exports = Levenshtein;
7290 }
7291 // web worker
7292 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
7293 self.Levenshtein = Levenshtein;
7294 }
7295 // browser main thread
7296 else if (typeof window !== "undefined" && window !== null) {
7297 window.Levenshtein = Levenshtein;
7298 }
7299}());
7300
7301</script>
7302 <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},
7303write: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;
7304for(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-
73057,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]=
73060<=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},
7307setupTimingPattern: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=
7308j.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-
7309b-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,
7310c),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=
73110,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&&
7312(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,
731378,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)-
7314j.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:"+
7315a);}},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:"+
7316a);}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+
73172)&&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),
7318LOG_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>
7319this.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],
7320[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,
7321116],[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,
732243,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,
73233,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,
732455,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,
732545,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*
7326(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 7327correctLevel: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
7328j=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",
7329d+"px").css("background-color",a.isDark(e,i)?h.foreground:h.background).appendTo(f)}}a=c;$(a).appendTo(this)})}})($);
7330</script>
9987f0c1
IC
7331 <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){
7332(function (global){
7333'use strict';
8b095871 7334
9987f0c1
IC
7335// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
7336// original notice:
8b095871 7337
9987f0c1
IC
7338/*!
7339 * The buffer module from node.js, for the browser.
7340 *
7341 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
7342 * @license MIT
7343 */
7344function compare(a, b) {
7345 if (a === b) {
7346 return 0;
7347 }
8b095871 7348
9987f0c1
IC
7349 var x = a.length;
7350 var y = b.length;
8b095871 7351
9987f0c1
IC
7352 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
7353 if (a[i] !== b[i]) {
7354 x = a[i];
7355 y = b[i];
7356 break;
7357 }
7358 }
8b095871 7359
9987f0c1
IC
7360 if (x < y) {
7361 return -1;
8b095871 7362 }
9987f0c1
IC
7363 if (y < x) {
7364 return 1;
8b095871 7365 }
9987f0c1 7366 return 0;
8b095871 7367}
9987f0c1
IC
7368function isBuffer(b) {
7369 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
7370 return global.Buffer.isBuffer(b);
8b095871 7371 }
9987f0c1 7372 return !!(b != null && b._isBuffer);
8b095871
IC
7373}
7374
9987f0c1 7375// based on node assert, original notice:
8b095871 7376
9987f0c1
IC
7377// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
7378//
7379// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
7380//
7381// Originally from narwhal.js (http://narwhaljs.org)
7382// Copyright (c) 2009 Thomas Robinson <280north.com>
7383//
7384// Permission is hereby granted, free of charge, to any person obtaining a copy
7385// of this software and associated documentation files (the 'Software'), to
7386// deal in the Software without restriction, including without limitation the
7387// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7388// sell copies of the Software, and to permit persons to whom the Software is
7389// furnished to do so, subject to the following conditions:
7390//
7391// The above copyright notice and this permission notice shall be included in
7392// all copies or substantial portions of the Software.
7393//
7394// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
7395// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
7396// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
7397// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
7398// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
7399// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
8b095871 7400
9987f0c1
IC
7401var util = require('util/');
7402var hasOwn = Object.prototype.hasOwnProperty;
7403var pSlice = Array.prototype.slice;
7404var functionsHaveNames = (function () {
7405 return function foo() {}.name === 'foo';
7406}());
7407function pToString (obj) {
7408 return Object.prototype.toString.call(obj);
8b095871 7409}
9987f0c1
IC
7410function isView(arrbuf) {
7411 if (isBuffer(arrbuf)) {
7412 return false;
7413 }
7414 if (typeof global.ArrayBuffer !== 'function') {
7415 return false;
7416 }
7417 if (typeof ArrayBuffer.isView === 'function') {
7418 return ArrayBuffer.isView(arrbuf);
7419 }
7420 if (!arrbuf) {
7421 return false;
7422 }
7423 if (arrbuf instanceof DataView) {
7424 return true;
7425 }
7426 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
7427 return true;
7428 }
7429 return false;
8b095871 7430}
9987f0c1
IC
7431// 1. The assert module provides functions that throw
7432// AssertionError's when particular conditions are not met. The
7433// assert module must conform to the following interface.
8b095871 7434
9987f0c1 7435var assert = module.exports = ok;
8b095871 7436
9987f0c1
IC
7437// 2. The AssertionError is defined in assert.
7438// new assert.AssertionError({ message: message,
7439// actual: actual,
7440// expected: expected })
8b095871 7441
9987f0c1
IC
7442var regex = /\s*function\s+([^\(\s]*)\s*/;
7443// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
7444function getName(func) {
7445 if (!util.isFunction(func)) {
7446 return;
7447 }
7448 if (functionsHaveNames) {
7449 return func.name;
7450 }
7451 var str = func.toString();
7452 var match = str.match(regex);
7453 return match && match[1];
8b095871 7454}
9987f0c1
IC
7455assert.AssertionError = function AssertionError(options) {
7456 this.name = 'AssertionError';
7457 this.actual = options.actual;
7458 this.expected = options.expected;
7459 this.operator = options.operator;
7460 if (options.message) {
7461 this.message = options.message;
7462 this.generatedMessage = false;
7463 } else {
7464 this.message = getMessage(this);
7465 this.generatedMessage = true;
7466 }
7467 var stackStartFunction = options.stackStartFunction || fail;
7468 if (Error.captureStackTrace) {
7469 Error.captureStackTrace(this, stackStartFunction);
7470 } else {
7471 // non v8 browsers so we can have a stacktrace
7472 var err = new Error();
7473 if (err.stack) {
7474 var out = err.stack;
8b095871 7475
9987f0c1
IC
7476 // try to strip useless frames
7477 var fn_name = getName(stackStartFunction);
7478 var idx = out.indexOf('\n' + fn_name);
7479 if (idx >= 0) {
7480 // once we have located the function frame
7481 // we need to strip out everything before it (and its line)
7482 var next_line = out.indexOf('\n', idx + 1);
7483 out = out.substring(next_line + 1);
7484 }
8b095871 7485
9987f0c1 7486 this.stack = out;
8b095871 7487 }
8b095871 7488 }
9987f0c1 7489};
8b095871 7490
9987f0c1
IC
7491// assert.AssertionError instanceof Error
7492util.inherits(assert.AssertionError, Error);
8b095871 7493
9987f0c1
IC
7494function truncate(s, n) {
7495 if (typeof s === 'string') {
7496 return s.length < n ? s : s.slice(0, n);
7497 } else {
7498 return s;
8b095871 7499 }
8b095871 7500}
9987f0c1
IC
7501function inspect(something) {
7502 if (functionsHaveNames || !util.isFunction(something)) {
7503 return util.inspect(something);
7504 }
7505 var rawname = getName(something);
7506 var name = rawname ? ': ' + rawname : '';
7507 return '[Function' + name + ']';
8b095871 7508}
9987f0c1
IC
7509function getMessage(self) {
7510 return truncate(inspect(self.actual), 128) + ' ' +
7511 self.operator + ' ' +
7512 truncate(inspect(self.expected), 128);
8b095871
IC
7513}
7514
9987f0c1
IC
7515// At present only the three keys mentioned above are used and
7516// understood by the spec. Implementations or sub modules can pass
7517// other keys to the AssertionError's constructor - they will be
7518// ignored.
3af2954a 7519
9987f0c1
IC
7520// 3. All of the following functions must throw an AssertionError
7521// when a corresponding condition is not met, with a message that
7522// may be undefined if not provided. All assertion methods provide
7523// both the actual and expected values to the assertion error for
7524// display purposes.
8b095871 7525
9987f0c1
IC
7526function fail(actual, expected, message, operator, stackStartFunction) {
7527 throw new assert.AssertionError({
7528 message: message,
7529 actual: actual,
7530 expected: expected,
7531 operator: operator,
7532 stackStartFunction: stackStartFunction
7533 });
8b095871
IC
7534}
7535
9987f0c1
IC
7536// EXTENSION! allows for well behaved errors defined elsewhere.
7537assert.fail = fail;
8b095871 7538
9987f0c1
IC
7539// 4. Pure assertion tests whether a value is truthy, as determined
7540// by !!guard.
7541// assert.ok(guard, message_opt);
7542// This statement is equivalent to assert.equal(true, !!guard,
7543// message_opt);. To test strictly for the value true, use
7544// assert.strictEqual(true, guard, message_opt);.
8b095871 7545
9987f0c1
IC
7546function ok(value, message) {
7547 if (!value) fail(value, true, message, '==', assert.ok);
8b095871 7548}
9987f0c1 7549assert.ok = ok;
8b095871 7550
9987f0c1
IC
7551// 5. The equality assertion tests shallow, coercive equality with
7552// ==.
7553// assert.equal(actual, expected, message_opt);
7554
7555assert.equal = function equal(actual, expected, message) {
7556 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
7557};
7558
7559// 6. The non-equality assertion tests for whether two objects are not equal
7560// with != assert.notEqual(actual, expected, message_opt);
7561
7562assert.notEqual = function notEqual(actual, expected, message) {
7563 if (actual == expected) {
7564 fail(actual, expected, message, '!=', assert.notEqual);
8b095871 7565 }
9987f0c1 7566};
8b095871 7567
9987f0c1
IC
7568// 7. The equivalence assertion tests a deep equality relation.
7569// assert.deepEqual(actual, expected, message_opt);
7570
7571assert.deepEqual = function deepEqual(actual, expected, message) {
7572 if (!_deepEqual(actual, expected, false)) {
7573 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
8b095871 7574 }
9987f0c1
IC
7575};
7576
7577assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
7578 if (!_deepEqual(actual, expected, true)) {
7579 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
7580 }
7581};
7582
7583function _deepEqual(actual, expected, strict, memos) {
7584 // 7.1. All identical values are equivalent, as determined by ===.
7585 if (actual === expected) {
7586 return true;
7587 } else if (isBuffer(actual) && isBuffer(expected)) {
7588 return compare(actual, expected) === 0;
7589
7590 // 7.2. If the expected value is a Date object, the actual value is
7591 // equivalent if it is also a Date object that refers to the same time.
7592 } else if (util.isDate(actual) && util.isDate(expected)) {
7593 return actual.getTime() === expected.getTime();
7594
7595 // 7.3 If the expected value is a RegExp object, the actual value is
7596 // equivalent if it is also a RegExp object with the same source and
7597 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
7598 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
7599 return actual.source === expected.source &&
7600 actual.global === expected.global &&
7601 actual.multiline === expected.multiline &&
7602 actual.lastIndex === expected.lastIndex &&
7603 actual.ignoreCase === expected.ignoreCase;
7604
7605 // 7.4. Other pairs that do not both pass typeof value == 'object',
7606 // equivalence is determined by ==.
7607 } else if ((actual === null || typeof actual !== 'object') &&
7608 (expected === null || typeof expected !== 'object')) {
7609 return strict ? actual === expected : actual == expected;
7610
7611 // If both values are instances of typed arrays, wrap their underlying
7612 // ArrayBuffers in a Buffer each to increase performance
7613 // This optimization requires the arrays to have the same type as checked by
7614 // Object.prototype.toString (aka pToString). Never perform binary
7615 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
7616 // bit patterns are not identical.
7617 } else if (isView(actual) && isView(expected) &&
7618 pToString(actual) === pToString(expected) &&
7619 !(actual instanceof Float32Array ||
7620 actual instanceof Float64Array)) {
7621 return compare(new Uint8Array(actual.buffer),
7622 new Uint8Array(expected.buffer)) === 0;
7623
7624 // 7.5 For all other Object pairs, including Array objects, equivalence is
7625 // determined by having the same number of owned properties (as verified
7626 // with Object.prototype.hasOwnProperty.call), the same set of keys
7627 // (although not necessarily the same order), equivalent values for every
7628 // corresponding key, and an identical 'prototype' property. Note: this
7629 // accounts for both named and indexed properties on Arrays.
7630 } else if (isBuffer(actual) !== isBuffer(expected)) {
7631 return false;
7632 } else {
7633 memos = memos || {actual: [], expected: []};
7634
7635 var actualIndex = memos.actual.indexOf(actual);
7636 if (actualIndex !== -1) {
7637 if (actualIndex === memos.expected.indexOf(expected)) {
7638 return true;
7639 }
7640 }
7641
7642 memos.actual.push(actual);
7643 memos.expected.push(expected);
7644
7645 return objEquiv(actual, expected, strict, memos);
7646 }
7647}
7648
7649function isArguments(object) {
7650 return Object.prototype.toString.call(object) == '[object Arguments]';
7651}
7652
7653function objEquiv(a, b, strict, actualVisitedObjects) {
7654 if (a === null || a === undefined || b === null || b === undefined)
7655 return false;
7656 // if one is a primitive, the other must be same
7657 if (util.isPrimitive(a) || util.isPrimitive(b))
7658 return a === b;
7659 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
7660 return false;
7661 var aIsArgs = isArguments(a);
7662 var bIsArgs = isArguments(b);
7663 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
7664 return false;
7665 if (aIsArgs) {
7666 a = pSlice.call(a);
7667 b = pSlice.call(b);
7668 return _deepEqual(a, b, strict);
7669 }
7670 var ka = objectKeys(a);
7671 var kb = objectKeys(b);
7672 var key, i;
7673 // having the same number of owned properties (keys incorporates
7674 // hasOwnProperty)
7675 if (ka.length !== kb.length)
7676 return false;
7677 //the same set of keys (although not necessarily the same order),
7678 ka.sort();
7679 kb.sort();
7680 //~~~cheap key test
7681 for (i = ka.length - 1; i >= 0; i--) {
7682 if (ka[i] !== kb[i])
7683 return false;
7684 }
7685 //equivalent values for every corresponding key, and
7686 //~~~possibly expensive deep test
7687 for (i = ka.length - 1; i >= 0; i--) {
7688 key = ka[i];
7689 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
7690 return false;
7691 }
7692 return true;
7693}
7694
7695// 8. The non-equivalence assertion tests for any deep inequality.
7696// assert.notDeepEqual(actual, expected, message_opt);
7697
7698assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
7699 if (_deepEqual(actual, expected, false)) {
7700 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
7701 }
7702};
7703
7704assert.notDeepStrictEqual = notDeepStrictEqual;
7705function notDeepStrictEqual(actual, expected, message) {
7706 if (_deepEqual(actual, expected, true)) {
7707 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
7708 }
7709}
7710
7711
7712// 9. The strict equality assertion tests strict equality, as determined by ===.
7713// assert.strictEqual(actual, expected, message_opt);
7714
7715assert.strictEqual = function strictEqual(actual, expected, message) {
7716 if (actual !== expected) {
7717 fail(actual, expected, message, '===', assert.strictEqual);
7718 }
7719};
7720
7721// 10. The strict non-equality assertion tests for strict inequality, as
7722// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
7723
7724assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
7725 if (actual === expected) {
7726 fail(actual, expected, message, '!==', assert.notStrictEqual);
7727 }
7728};
7729
7730function expectedException(actual, expected) {
7731 if (!actual || !expected) {
7732 return false;
7733 }
7734
7735 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
7736 return expected.test(actual);
7737 }
7738
7739 try {
7740 if (actual instanceof expected) {
7741 return true;
7742 }
7743 } catch (e) {
7744 // Ignore. The instanceof check doesn't work for arrow functions.
7745 }
7746
7747 if (Error.isPrototypeOf(expected)) {
7748 return false;
7749 }
7750
7751 return expected.call({}, actual) === true;
7752}
7753
7754function _tryBlock(block) {
7755 var error;
7756 try {
7757 block();
7758 } catch (e) {
7759 error = e;
7760 }
7761 return error;
7762}
7763
7764function _throws(shouldThrow, block, expected, message) {
7765 var actual;
7766
7767 if (typeof block !== 'function') {
7768 throw new TypeError('"block" argument must be a function');
7769 }
7770
7771 if (typeof expected === 'string') {
7772 message = expected;
7773 expected = null;
7774 }
7775
7776 actual = _tryBlock(block);
7777
7778 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
7779 (message ? ' ' + message : '.');
7780
7781 if (shouldThrow && !actual) {
7782 fail(actual, expected, 'Missing expected exception' + message);
7783 }
7784
7785 var userProvidedMessage = typeof message === 'string';
7786 var isUnwantedException = !shouldThrow && util.isError(actual);
7787 var isUnexpectedException = !shouldThrow && actual && !expected;
7788
7789 if ((isUnwantedException &&
7790 userProvidedMessage &&
7791 expectedException(actual, expected)) ||
7792 isUnexpectedException) {
7793 fail(actual, expected, 'Got unwanted exception' + message);
7794 }
7795
7796 if ((shouldThrow && actual && expected &&
7797 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
7798 throw actual;
7799 }
7800}
7801
7802// 11. Expected to throw an error:
7803// assert.throws(block, Error_opt, message_opt);
7804
7805assert.throws = function(block, /*optional*/error, /*optional*/message) {
7806 _throws(true, block, error, message);
7807};
7808
7809// EXTENSION! This is annoying to write outside this module.
7810assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
7811 _throws(false, block, error, message);
7812};
7813
7814assert.ifError = function(err) { if (err) throw err; };
7815
7816var objectKeys = Object.keys || function (obj) {
7817 var keys = [];
7818 for (var key in obj) {
7819 if (hasOwn.call(obj, key)) keys.push(key);
7820 }
7821 return keys;
7822};
7823
7824}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
7825},{"util/":32}],2:[function(require,module,exports){
7826'use strict'
7827
7828exports.byteLength = byteLength
7829exports.toByteArray = toByteArray
7830exports.fromByteArray = fromByteArray
7831
7832var lookup = []
7833var revLookup = []
7834var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
7835
7836var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
7837for (var i = 0, len = code.length; i < len; ++i) {
7838 lookup[i] = code[i]
7839 revLookup[code.charCodeAt(i)] = i
7840}
7841
7842revLookup['-'.charCodeAt(0)] = 62
7843revLookup['_'.charCodeAt(0)] = 63
7844
7845function placeHoldersCount (b64) {
7846 var len = b64.length
7847 if (len % 4 > 0) {
7848 throw new Error('Invalid string. Length must be a multiple of 4')
7849 }
7850
7851 // the number of equal signs (place holders)
7852 // if there are two placeholders, than the two characters before it
7853 // represent one byte
7854 // if there is only one, then the three characters before it represent 2 bytes
7855 // this is just a cheap hack to not do indexOf twice
7856 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
7857}
7858
7859function byteLength (b64) {
7860 // base64 is 4/3 + up to two characters of the original data
7861 return (b64.length * 3 / 4) - placeHoldersCount(b64)
7862}
7863
7864function toByteArray (b64) {
7865 var i, l, tmp, placeHolders, arr
7866 var len = b64.length
7867 placeHolders = placeHoldersCount(b64)
7868
7869 arr = new Arr((len * 3 / 4) - placeHolders)
7870
7871 // if there are placeholders, only get up to the last complete 4 chars
7872 l = placeHolders > 0 ? len - 4 : len
7873
7874 var L = 0
7875
7876 for (i = 0; i < l; i += 4) {
7877 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
7878 arr[L++] = (tmp >> 16) & 0xFF
7879 arr[L++] = (tmp >> 8) & 0xFF
7880 arr[L++] = tmp & 0xFF
7881 }
7882
7883 if (placeHolders === 2) {
7884 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
7885 arr[L++] = tmp & 0xFF
7886 } else if (placeHolders === 1) {
7887 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
7888 arr[L++] = (tmp >> 8) & 0xFF
7889 arr[L++] = tmp & 0xFF
7890 }
7891
7892 return arr
7893}
7894
7895function tripletToBase64 (num) {
7896 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
7897}
7898
7899function encodeChunk (uint8, start, end) {
7900 var tmp
7901 var output = []
7902 for (var i = start; i < end; i += 3) {
7903 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
7904 output.push(tripletToBase64(tmp))
7905 }
7906 return output.join('')
7907}
7908
7909function fromByteArray (uint8) {
7910 var tmp
7911 var len = uint8.length
7912 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
7913 var output = ''
7914 var parts = []
7915 var maxChunkLength = 16383 // must be multiple of 3
7916
7917 // go through the array every three bytes, we'll deal with trailing stuff later
7918 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
7919 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
7920 }
7921
7922 // pad the end with zeros, but make sure to not forget the extra bytes
7923 if (extraBytes === 1) {
7924 tmp = uint8[len - 1]
7925 output += lookup[tmp >> 2]
7926 output += lookup[(tmp << 4) & 0x3F]
7927 output += '=='
7928 } else if (extraBytes === 2) {
7929 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
7930 output += lookup[tmp >> 10]
7931 output += lookup[(tmp >> 4) & 0x3F]
7932 output += lookup[(tmp << 2) & 0x3F]
7933 output += '='
7934 }
7935
7936 parts.push(output)
7937
7938 return parts.join('')
7939}
7940
7941},{}],3:[function(require,module,exports){
7942
7943},{}],4:[function(require,module,exports){
7944/*!
7945 * The buffer module from node.js, for the browser.
7946 *
7947 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
7948 * @license MIT
7949 */
7950/* eslint-disable no-proto */
7951
7952'use strict'
7953
7954var base64 = require('base64-js')
7955var ieee754 = require('ieee754')
7956
7957exports.Buffer = Buffer
7958exports.SlowBuffer = SlowBuffer
7959exports.INSPECT_MAX_BYTES = 50
7960
7961var K_MAX_LENGTH = 0x7fffffff
7962exports.kMaxLength = K_MAX_LENGTH
7963
7964/**
7965 * If `Buffer.TYPED_ARRAY_SUPPORT`:
7966 * === true Use Uint8Array implementation (fastest)
7967 * === false Print warning and recommend using `buffer` v4.x which has an Object
7968 * implementation (most compatible, even IE6)
7969 *
7970 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
7971 * Opera 11.6+, iOS 4.2+.
7972 *
7973 * We report that the browser does not support typed arrays if the are not subclassable
7974 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
7975 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
7976 * for __proto__ and has a buggy typed array implementation.
7977 */
7978Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
7979
7980if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
7981 typeof console.error === 'function') {
7982 console.error(
7983 'This browser lacks typed array (Uint8Array) support which is required by ' +
7984 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
7985 )
7986}
7987
7988function typedArraySupport () {
7989 // Can typed array instances can be augmented?
7990 try {
7991 var arr = new Uint8Array(1)
7992 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
7993 return arr.foo() === 42
7994 } catch (e) {
7995 return false
7996 }
7997}
7998
7999function createBuffer (length) {
8000 if (length > K_MAX_LENGTH) {
8001 throw new RangeError('Invalid typed array length')
8002 }
8003 // Return an augmented `Uint8Array` instance
8004 var buf = new Uint8Array(length)
8005 buf.__proto__ = Buffer.prototype
8006 return buf
8007}
8008
8009/**
8010 * The Buffer constructor returns instances of `Uint8Array` that have their
8011 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
8012 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
8013 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
8014 * returns a single octet.
8015 *
8016 * The `Uint8Array` prototype remains unmodified.
8017 */
8018
8019function Buffer (arg, encodingOrOffset, length) {
8020 // Common case.
8021 if (typeof arg === 'number') {
8022 if (typeof encodingOrOffset === 'string') {
8023 throw new Error(
8024 'If encoding is specified then the first argument must be a string'
8025 )
8026 }
8027 return allocUnsafe(arg)
8028 }
8029 return from(arg, encodingOrOffset, length)
8030}
8031
8032// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
8033if (typeof Symbol !== 'undefined' && Symbol.species &&
8034 Buffer[Symbol.species] === Buffer) {
8035 Object.defineProperty(Buffer, Symbol.species, {
8036 value: null,
8037 configurable: true,
8038 enumerable: false,
8039 writable: false
8040 })
8041}
8042
8043Buffer.poolSize = 8192 // not used by this implementation
8044
8045function from (value, encodingOrOffset, length) {
8046 if (typeof value === 'number') {
8047 throw new TypeError('"value" argument must not be a number')
8048 }
8049
8050 if (value instanceof ArrayBuffer) {
8051 return fromArrayBuffer(value, encodingOrOffset, length)
8052 }
8053
8054 if (typeof value === 'string') {
8055 return fromString(value, encodingOrOffset)
8056 }
8057
8058 return fromObject(value)
8059}
8060
8061/**
8062 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
8063 * if value is a number.
8064 * Buffer.from(str[, encoding])
8065 * Buffer.from(array)
8066 * Buffer.from(buffer)
8067 * Buffer.from(arrayBuffer[, byteOffset[, length]])
8068 **/
8069Buffer.from = function (value, encodingOrOffset, length) {
8070 return from(value, encodingOrOffset, length)
8071}
8072
8073// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
8074// https://github.com/feross/buffer/pull/148
8075Buffer.prototype.__proto__ = Uint8Array.prototype
8076Buffer.__proto__ = Uint8Array
8077
8078function assertSize (size) {
8079 if (typeof size !== 'number') {
8080 throw new TypeError('"size" argument must be a number')
8081 } else if (size < 0) {
8082 throw new RangeError('"size" argument must not be negative')
8083 }
8084}
8085
8086function alloc (size, fill, encoding) {
8087 assertSize(size)
8088 if (size <= 0) {
8089 return createBuffer(size)
8090 }
8091 if (fill !== undefined) {
8092 // Only pay attention to encoding if it's a string. This
8093 // prevents accidentally sending in a number that would
8094 // be interpretted as a start offset.
8095 return typeof encoding === 'string'
8096 ? createBuffer(size).fill(fill, encoding)
8097 : createBuffer(size).fill(fill)
8098 }
8099 return createBuffer(size)
8100}
8101
8102/**
8103 * Creates a new filled Buffer instance.
8104 * alloc(size[, fill[, encoding]])
8105 **/
8106Buffer.alloc = function (size, fill, encoding) {
8107 return alloc(size, fill, encoding)
8108}
8109
8110function allocUnsafe (size) {
8111 assertSize(size)
8112 return createBuffer(size < 0 ? 0 : checked(size) | 0)
8113}
8114
8115/**
8116 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
8117 * */
8118Buffer.allocUnsafe = function (size) {
8119 return allocUnsafe(size)
8120}
8121/**
8122 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
8123 */
8124Buffer.allocUnsafeSlow = function (size) {
8125 return allocUnsafe(size)
8126}
8127
8128function fromString (string, encoding) {
8129 if (typeof encoding !== 'string' || encoding === '') {
8130 encoding = 'utf8'
8131 }
8132
8133 if (!Buffer.isEncoding(encoding)) {
8134 throw new TypeError('"encoding" must be a valid string encoding')
8135 }
8136
8137 var length = byteLength(string, encoding) | 0
8138 var buf = createBuffer(length)
8139
8140 var actual = buf.write(string, encoding)
8141
8142 if (actual !== length) {
8143 // Writing a hex string, for example, that contains invalid characters will
8144 // cause everything after the first invalid character to be ignored. (e.g.
8145 // 'abxxcd' will be treated as 'ab')
8146 buf = buf.slice(0, actual)
8147 }
8148
8149 return buf
8150}
8151
8152function fromArrayLike (array) {
8153 var length = array.length < 0 ? 0 : checked(array.length) | 0
8154 var buf = createBuffer(length)
8155 for (var i = 0; i < length; i += 1) {
8156 buf[i] = array[i] & 255
8157 }
8158 return buf
8159}
8160
8161function fromArrayBuffer (array, byteOffset, length) {
8162 if (byteOffset < 0 || array.byteLength < byteOffset) {
8163 throw new RangeError('\'offset\' is out of bounds')
8164 }
8165
8166 if (array.byteLength < byteOffset + (length || 0)) {
8167 throw new RangeError('\'length\' is out of bounds')
8168 }
8169
8170 var buf
8171 if (byteOffset === undefined && length === undefined) {
8172 buf = new Uint8Array(array)
8173 } else if (length === undefined) {
8174 buf = new Uint8Array(array, byteOffset)
8175 } else {
8176 buf = new Uint8Array(array, byteOffset, length)
8177 }
8178
8179 // Return an augmented `Uint8Array` instance
8180 buf.__proto__ = Buffer.prototype
8181 return buf
8182}
8183
8184function fromObject (obj) {
8185 if (Buffer.isBuffer(obj)) {
8186 var len = checked(obj.length) | 0
8187 var buf = createBuffer(len)
8188
8189 if (buf.length === 0) {
8190 return buf
8191 }
8192
8193 obj.copy(buf, 0, 0, len)
8194 return buf
8195 }
8196
8197 if (obj) {
8198 if (isArrayBufferView(obj) || 'length' in obj) {
8199 if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
8200 return createBuffer(0)
8201 }
8202 return fromArrayLike(obj)
8203 }
8204
8205 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
8206 return fromArrayLike(obj.data)
8207 }
8208 }
8209
8210 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
8211}
8212
8213function checked (length) {
8214 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
8215 // length is NaN (which is otherwise coerced to zero.)
8216 if (length >= K_MAX_LENGTH) {
8217 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
8218 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
8219 }
8220 return length | 0
8221}
8222
8223function SlowBuffer (length) {
8224 if (+length != length) { // eslint-disable-line eqeqeq
8225 length = 0
8226 }
8227 return Buffer.alloc(+length)
8228}
8229
8230Buffer.isBuffer = function isBuffer (b) {
8231 return b != null && b._isBuffer === true
8232}
8233
8234Buffer.compare = function compare (a, b) {
8235 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
8236 throw new TypeError('Arguments must be Buffers')
8237 }
8238
8239 if (a === b) return 0
8240
8241 var x = a.length
8242 var y = b.length
8243
8244 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
8245 if (a[i] !== b[i]) {
8246 x = a[i]
8247 y = b[i]
8248 break
8249 }
8b095871 8250 }
9987f0c1
IC
8251
8252 if (x < y) return -1
8253 if (y < x) return 1
8254 return 0
8b095871
IC
8255}
8256
9987f0c1
IC
8257Buffer.isEncoding = function isEncoding (encoding) {
8258 switch (String(encoding).toLowerCase()) {
8259 case 'hex':
8260 case 'utf8':
8261 case 'utf-8':
8262 case 'ascii':
8263 case 'latin1':
8264 case 'binary':
8265 case 'base64':
8266 case 'ucs2':
8267 case 'ucs-2':
8268 case 'utf16le':
8269 case 'utf-16le':
8270 return true
8271 default:
8272 return false
8b095871 8273 }
9987f0c1
IC
8274}
8275
8276Buffer.concat = function concat (list, length) {
8277 if (!Array.isArray(list)) {
8278 throw new TypeError('"list" argument must be an Array of Buffers')
8279 }
8280
8281 if (list.length === 0) {
8282 return Buffer.alloc(0)
8283 }
8284
8285 var i
8286 if (length === undefined) {
8287 length = 0
8288 for (i = 0; i < list.length; ++i) {
8289 length += list[i].length
8b095871 8290 }
9987f0c1
IC
8291 }
8292
8293 var buffer = Buffer.allocUnsafe(length)
8294 var pos = 0
8295 for (i = 0; i < list.length; ++i) {
8296 var buf = list[i]
8297 if (!Buffer.isBuffer(buf)) {
8298 throw new TypeError('"list" argument must be an Array of Buffers')
8b095871 8299 }
9987f0c1
IC
8300 buf.copy(buffer, pos)
8301 pos += buf.length
8b095871 8302 }
9987f0c1 8303 return buffer
8b095871
IC
8304}
8305
9987f0c1
IC
8306function byteLength (string, encoding) {
8307 if (Buffer.isBuffer(string)) {
8308 return string.length
8309 }
8310 if (isArrayBufferView(string) || string instanceof ArrayBuffer) {
8311 return string.byteLength
8312 }
8313 if (typeof string !== 'string') {
8314 string = '' + string
8315 }
8316
8317 var len = string.length
8318 if (len === 0) return 0
8319
8320 // Use a for loop to avoid recursion
8321 var loweredCase = false
8322 for (;;) {
8323 switch (encoding) {
8324 case 'ascii':
8325 case 'latin1':
8326 case 'binary':
8327 return len
8328 case 'utf8':
8329 case 'utf-8':
8330 case undefined:
8331 return utf8ToBytes(string).length
8332 case 'ucs2':
8333 case 'ucs-2':
8334 case 'utf16le':
8335 case 'utf-16le':
8336 return len * 2
8337 case 'hex':
8338 return len >>> 1
8339 case 'base64':
8340 return base64ToBytes(string).length
8341 default:
8342 if (loweredCase) return utf8ToBytes(string).length // assume utf8
8343 encoding = ('' + encoding).toLowerCase()
8344 loweredCase = true
8345 }
8346 }
8b095871 8347}
9987f0c1 8348Buffer.byteLength = byteLength
8b095871 8349
9987f0c1
IC
8350function slowToString (encoding, start, end) {
8351 var loweredCase = false
8352
8353 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
8354 // property of a typed array.
8355
8356 // This behaves neither like String nor Uint8Array in that we set start/end
8357 // to their upper/lower bounds if the value passed is out of range.
8358 // undefined is handled specially as per ECMA-262 6th Edition,
8359 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
8360 if (start === undefined || start < 0) {
8361 start = 0
8362 }
8363 // Return early if start > this.length. Done here to prevent potential uint32
8364 // coercion fail below.
8365 if (start > this.length) {
8366 return ''
8367 }
8368
8369 if (end === undefined || end > this.length) {
8370 end = this.length
8371 }
8372
8373 if (end <= 0) {
8374 return ''
8375 }
8376
8377 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
8378 end >>>= 0
8379 start >>>= 0
8380
8381 if (end <= start) {
8382 return ''
8383 }
8384
8385 if (!encoding) encoding = 'utf8'
8386
8387 while (true) {
8388 switch (encoding) {
8389 case 'hex':
8390 return hexSlice(this, start, end)
8391
8392 case 'utf8':
8393 case 'utf-8':
8394 return utf8Slice(this, start, end)
8395
8396 case 'ascii':
8397 return asciiSlice(this, start, end)
8398
8399 case 'latin1':
8400 case 'binary':
8401 return latin1Slice(this, start, end)
8402
8403 case 'base64':
8404 return base64Slice(this, start, end)
8405
8406 case 'ucs2':
8407 case 'ucs-2':
8408 case 'utf16le':
8409 case 'utf-16le':
8410 return utf16leSlice(this, start, end)
8411
8412 default:
8413 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
8414 encoding = (encoding + '').toLowerCase()
8415 loweredCase = true
8b095871
IC
8416 }
8417 }
8b095871
IC
8418}
8419
9987f0c1
IC
8420// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
8421// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
8422// reliably in a browserify context because there could be multiple different
8423// copies of the 'buffer' package in use. This method works even for Buffer
8424// instances that were created from another copy of the `buffer` package.
8425// See: https://github.com/feross/buffer/issues/154
8426Buffer.prototype._isBuffer = true
8427
8428function swap (b, n, m) {
8429 var i = b[n]
8430 b[n] = b[m]
8431 b[m] = i
8432}
8433
8434Buffer.prototype.swap16 = function swap16 () {
8435 var len = this.length
8436 if (len % 2 !== 0) {
8437 throw new RangeError('Buffer size must be a multiple of 16-bits')
8b095871 8438 }
9987f0c1
IC
8439 for (var i = 0; i < len; i += 2) {
8440 swap(this, i, i + 1)
8b095871 8441 }
9987f0c1
IC
8442 return this
8443}
8444
8445Buffer.prototype.swap32 = function swap32 () {
8446 var len = this.length
8447 if (len % 4 !== 0) {
8448 throw new RangeError('Buffer size must be a multiple of 32-bits')
8b095871 8449 }
9987f0c1
IC
8450 for (var i = 0; i < len; i += 4) {
8451 swap(this, i, i + 3)
8452 swap(this, i + 1, i + 2)
8453 }
8454 return this
8455}
8456
8457Buffer.prototype.swap64 = function swap64 () {
8458 var len = this.length
8459 if (len % 8 !== 0) {
8460 throw new RangeError('Buffer size must be a multiple of 64-bits')
8461 }
8462 for (var i = 0; i < len; i += 8) {
8463 swap(this, i, i + 7)
8464 swap(this, i + 1, i + 6)
8465 swap(this, i + 2, i + 5)
8466 swap(this, i + 3, i + 4)
8467 }
8468 return this
8469}
8470
8471Buffer.prototype.toString = function toString () {
8472 var length = this.length
8473 if (length === 0) return ''
8474 if (arguments.length === 0) return utf8Slice(this, 0, length)
8475 return slowToString.apply(this, arguments)
8476}
8477
8478Buffer.prototype.equals = function equals (b) {
8479 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
8480 if (this === b) return true
8481 return Buffer.compare(this, b) === 0
8482}
8483
8484Buffer.prototype.inspect = function inspect () {
8485 var str = ''
8486 var max = exports.INSPECT_MAX_BYTES
8487 if (this.length > 0) {
8488 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
8489 if (this.length > max) str += ' ... '
8490 }
8491 return '<Buffer ' + str + '>'
8492}
8493
8494Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
8495 if (!Buffer.isBuffer(target)) {
8496 throw new TypeError('Argument must be a Buffer')
8497 }
8498
8499 if (start === undefined) {
8500 start = 0
8501 }
8502 if (end === undefined) {
8503 end = target ? target.length : 0
8504 }
8505 if (thisStart === undefined) {
8506 thisStart = 0
8507 }
8508 if (thisEnd === undefined) {
8509 thisEnd = this.length
8510 }
8511
8512 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
8513 throw new RangeError('out of range index')
8514 }
8515
8516 if (thisStart >= thisEnd && start >= end) {
8517 return 0
8518 }
8519 if (thisStart >= thisEnd) {
8520 return -1
8521 }
8522 if (start >= end) {
8523 return 1
8524 }
8525
8526 start >>>= 0
8527 end >>>= 0
8528 thisStart >>>= 0
8529 thisEnd >>>= 0
8530
8531 if (this === target) return 0
8532
8533 var x = thisEnd - thisStart
8534 var y = end - start
8535 var len = Math.min(x, y)
8536
8537 var thisCopy = this.slice(thisStart, thisEnd)
8538 var targetCopy = target.slice(start, end)
8539
8540 for (var i = 0; i < len; ++i) {
8541 if (thisCopy[i] !== targetCopy[i]) {
8542 x = thisCopy[i]
8543 y = targetCopy[i]
8544 break
8545 }
8546 }
8547
8548 if (x < y) return -1
8549 if (y < x) return 1
8550 return 0
8551}
8552
8553// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
8554// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
8555//
8556// Arguments:
8557// - buffer - a Buffer to search
8558// - val - a string, Buffer, or number
8559// - byteOffset - an index into `buffer`; will be clamped to an int32
8560// - encoding - an optional encoding, relevant is val is a string
8561// - dir - true for indexOf, false for lastIndexOf
8562function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
8563 // Empty buffer means no match
8564 if (buffer.length === 0) return -1
8565
8566 // Normalize byteOffset
8567 if (typeof byteOffset === 'string') {
8568 encoding = byteOffset
8569 byteOffset = 0
8570 } else if (byteOffset > 0x7fffffff) {
8571 byteOffset = 0x7fffffff
8572 } else if (byteOffset < -0x80000000) {
8573 byteOffset = -0x80000000
8574 }
8575 byteOffset = +byteOffset // Coerce to Number.
8576 if (numberIsNaN(byteOffset)) {
8577 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
8578 byteOffset = dir ? 0 : (buffer.length - 1)
8579 }
8580
8581 // Normalize byteOffset: negative offsets start from the end of the buffer
8582 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
8583 if (byteOffset >= buffer.length) {
8584 if (dir) return -1
8585 else byteOffset = buffer.length - 1
8586 } else if (byteOffset < 0) {
8587 if (dir) byteOffset = 0
8588 else return -1
8589 }
8590
8591 // Normalize val
8592 if (typeof val === 'string') {
8593 val = Buffer.from(val, encoding)
8594 }
8595
8596 // Finally, search either indexOf (if dir is true) or lastIndexOf
8597 if (Buffer.isBuffer(val)) {
8598 // Special case: looking for empty string/buffer always fails
8599 if (val.length === 0) {
8600 return -1
8601 }
8602 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
8603 } else if (typeof val === 'number') {
8604 val = val & 0xFF // Search for a byte value [0-255]
8605 if (typeof Uint8Array.prototype.indexOf === 'function') {
8606 if (dir) {
8607 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
8608 } else {
8609 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
8610 }
8611 }
8612 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
8613 }
8614
8615 throw new TypeError('val must be string, number or Buffer')
8616}
8617
8618function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
8619 var indexSize = 1
8620 var arrLength = arr.length
8621 var valLength = val.length
8622
8623 if (encoding !== undefined) {
8624 encoding = String(encoding).toLowerCase()
8625 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
8626 encoding === 'utf16le' || encoding === 'utf-16le') {
8627 if (arr.length < 2 || val.length < 2) {
8628 return -1
8629 }
8630 indexSize = 2
8631 arrLength /= 2
8632 valLength /= 2
8633 byteOffset /= 2
8634 }
8635 }
8636
8637 function read (buf, i) {
8638 if (indexSize === 1) {
8639 return buf[i]
8640 } else {
8641 return buf.readUInt16BE(i * indexSize)
8642 }
8643 }
8644
8645 var i
8646 if (dir) {
8647 var foundIndex = -1
8648 for (i = byteOffset; i < arrLength; i++) {
8649 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
8650 if (foundIndex === -1) foundIndex = i
8651 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
8652 } else {
8653 if (foundIndex !== -1) i -= i - foundIndex
8654 foundIndex = -1
8655 }
8656 }
8657 } else {
8658 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
8659 for (i = byteOffset; i >= 0; i--) {
8660 var found = true
8661 for (var j = 0; j < valLength; j++) {
8662 if (read(arr, i + j) !== read(val, j)) {
8663 found = false
8664 break
8665 }
8666 }
8667 if (found) return i
8b095871
IC
8668 }
8669 }
8b095871 8670
9987f0c1 8671 return -1
8b095871
IC
8672}
8673
9987f0c1
IC
8674Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
8675 return this.indexOf(val, byteOffset, encoding) !== -1
8b095871
IC
8676}
8677
9987f0c1
IC
8678Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
8679 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
8b095871
IC
8680}
8681
9987f0c1
IC
8682Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
8683 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
8b095871
IC
8684}
8685
9987f0c1
IC
8686function hexWrite (buf, string, offset, length) {
8687 offset = Number(offset) || 0
8688 var remaining = buf.length - offset
8689 if (!length) {
8690 length = remaining
8691 } else {
8692 length = Number(length)
8693 if (length > remaining) {
8694 length = remaining
8695 }
8696 }
8b095871 8697
9987f0c1
IC
8698 // must be an even number of digits
8699 var strLen = string.length
8700 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
8b095871 8701
9987f0c1
IC
8702 if (length > strLen / 2) {
8703 length = strLen / 2
8704 }
8705 for (var i = 0; i < length; ++i) {
8706 var parsed = parseInt(string.substr(i * 2, 2), 16)
8707 if (numberIsNaN(parsed)) return i
8708 buf[offset + i] = parsed
8709 }
8710 return i
8b095871
IC
8711}
8712
9987f0c1
IC
8713function utf8Write (buf, string, offset, length) {
8714 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
8715}
8b095871 8716
9987f0c1
IC
8717function asciiWrite (buf, string, offset, length) {
8718 return blitBuffer(asciiToBytes(string), buf, offset, length)
8b095871
IC
8719}
8720
9987f0c1
IC
8721function latin1Write (buf, string, offset, length) {
8722 return asciiWrite(buf, string, offset, length)
8b095871
IC
8723}
8724
9987f0c1
IC
8725function base64Write (buf, string, offset, length) {
8726 return blitBuffer(base64ToBytes(string), buf, offset, length)
8b095871
IC
8727}
8728
9987f0c1
IC
8729function ucs2Write (buf, string, offset, length) {
8730 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
8b095871
IC
8731}
8732
9987f0c1
IC
8733Buffer.prototype.write = function write (string, offset, length, encoding) {
8734 // Buffer#write(string)
8735 if (offset === undefined) {
8736 encoding = 'utf8'
8737 length = this.length
8738 offset = 0
8739 // Buffer#write(string, encoding)
8740 } else if (length === undefined && typeof offset === 'string') {
8741 encoding = offset
8742 length = this.length
8743 offset = 0
8744 // Buffer#write(string, offset[, length][, encoding])
8745 } else if (isFinite(offset)) {
8746 offset = offset >>> 0
8747 if (isFinite(length)) {
8748 length = length >>> 0
8749 if (encoding === undefined) encoding = 'utf8'
8750 } else {
8751 encoding = length
8752 length = undefined
8b095871 8753 }
9987f0c1
IC
8754 } else {
8755 throw new Error(
8756 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
8757 )
8b095871 8758 }
8b095871 8759
9987f0c1
IC
8760 var remaining = this.length - offset
8761 if (length === undefined || length > remaining) length = remaining
8b095871 8762
9987f0c1
IC
8763 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
8764 throw new RangeError('Attempt to write outside buffer bounds')
8765 }
8b095871 8766
9987f0c1 8767 if (!encoding) encoding = 'utf8'
8b095871 8768
9987f0c1
IC
8769 var loweredCase = false
8770 for (;;) {
8771 switch (encoding) {
8772 case 'hex':
8773 return hexWrite(this, string, offset, length)
8b095871 8774
9987f0c1
IC
8775 case 'utf8':
8776 case 'utf-8':
8777 return utf8Write(this, string, offset, length)
8b095871 8778
9987f0c1
IC
8779 case 'ascii':
8780 return asciiWrite(this, string, offset, length)
8b095871 8781
9987f0c1
IC
8782 case 'latin1':
8783 case 'binary':
8784 return latin1Write(this, string, offset, length)
8b095871 8785
9987f0c1
IC
8786 case 'base64':
8787 // Warning: maxLength not taken into account in base64Write
8788 return base64Write(this, string, offset, length)
8b095871 8789
9987f0c1
IC
8790 case 'ucs2':
8791 case 'ucs-2':
8792 case 'utf16le':
8793 case 'utf-16le':
8794 return ucs2Write(this, string, offset, length)
8b095871 8795
9987f0c1
IC
8796 default:
8797 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
8798 encoding = ('' + encoding).toLowerCase()
8799 loweredCase = true
8800 }
8801 }
8b095871
IC
8802}
8803
9987f0c1
IC
8804Buffer.prototype.toJSON = function toJSON () {
8805 return {
8806 type: 'Buffer',
8807 data: Array.prototype.slice.call(this._arr || this, 0)
8808 }
8b095871
IC
8809}
8810
9987f0c1
IC
8811function base64Slice (buf, start, end) {
8812 if (start === 0 && end === buf.length) {
8813 return base64.fromByteArray(buf)
8814 } else {
8815 return base64.fromByteArray(buf.slice(start, end))
8816 }
8b095871
IC
8817}
8818
9987f0c1
IC
8819function utf8Slice (buf, start, end) {
8820 end = Math.min(buf.length, end)
8821 var res = []
8b095871 8822
9987f0c1
IC
8823 var i = start
8824 while (i < end) {
8825 var firstByte = buf[i]
8826 var codePoint = null
8827 var bytesPerSequence = (firstByte > 0xEF) ? 4
8828 : (firstByte > 0xDF) ? 3
8829 : (firstByte > 0xBF) ? 2
8830 : 1
8b095871 8831
9987f0c1
IC
8832 if (i + bytesPerSequence <= end) {
8833 var secondByte, thirdByte, fourthByte, tempCodePoint
8b095871 8834
9987f0c1
IC
8835 switch (bytesPerSequence) {
8836 case 1:
8837 if (firstByte < 0x80) {
8838 codePoint = firstByte
8839 }
8840 break
8841 case 2:
8842 secondByte = buf[i + 1]
8843 if ((secondByte & 0xC0) === 0x80) {
8844 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
8845 if (tempCodePoint > 0x7F) {
8846 codePoint = tempCodePoint
8847 }
8848 }
8849 break
8850 case 3:
8851 secondByte = buf[i + 1]
8852 thirdByte = buf[i + 2]
8853 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
8854 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
8855 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
8856 codePoint = tempCodePoint
8857 }
8858 }
8859 break
8860 case 4:
8861 secondByte = buf[i + 1]
8862 thirdByte = buf[i + 2]
8863 fourthByte = buf[i + 3]
8864 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
8865 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
8866 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
8867 codePoint = tempCodePoint
8868 }
8869 }
8870 }
8b095871 8871 }
9987f0c1
IC
8872
8873 if (codePoint === null) {
8874 // we did not generate a valid codePoint so insert a
8875 // replacement char (U+FFFD) and advance only 1 byte
8876 codePoint = 0xFFFD
8877 bytesPerSequence = 1
8878 } else if (codePoint > 0xFFFF) {
8879 // encode to utf16 (surrogate pair dance)
8880 codePoint -= 0x10000
8881 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
8882 codePoint = 0xDC00 | codePoint & 0x3FF
8b095871 8883 }
9987f0c1
IC
8884
8885 res.push(codePoint)
8886 i += bytesPerSequence
8b095871 8887 }
9987f0c1
IC
8888
8889 return decodeCodePointsArray(res)
8890}
8891
8892// Based on http://stackoverflow.com/a/22747272/680742, the browser with
8893// the lowest limit is Chrome, with 0x10000 args.
8894// We go 1 magnitude less, for safety
8895var MAX_ARGUMENTS_LENGTH = 0x1000
8896
8897function decodeCodePointsArray (codePoints) {
8898 var len = codePoints.length
8899 if (len <= MAX_ARGUMENTS_LENGTH) {
8900 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
8b095871 8901 }
9987f0c1
IC
8902
8903 // Decode in chunks to avoid "call stack size exceeded".
8904 var res = ''
8905 var i = 0
8906 while (i < len) {
8907 res += String.fromCharCode.apply(
8908 String,
8909 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
8910 )
8911 }
8912 return res
8b095871
IC
8913}
8914
9987f0c1
IC
8915function asciiSlice (buf, start, end) {
8916 var ret = ''
8917 end = Math.min(buf.length, end)
8918
8919 for (var i = start; i < end; ++i) {
8920 ret += String.fromCharCode(buf[i] & 0x7F)
8b095871 8921 }
9987f0c1 8922 return ret
8b095871
IC
8923}
8924
9987f0c1
IC
8925function latin1Slice (buf, start, end) {
8926 var ret = ''
8927 end = Math.min(buf.length, end)
8928
8929 for (var i = start; i < end; ++i) {
8930 ret += String.fromCharCode(buf[i])
8b095871 8931 }
9987f0c1 8932 return ret
8b095871
IC
8933}
8934
9987f0c1
IC
8935function hexSlice (buf, start, end) {
8936 var len = buf.length
8b095871 8937
9987f0c1
IC
8938 if (!start || start < 0) start = 0
8939 if (!end || end < 0 || end > len) end = len
8b095871 8940
9987f0c1
IC
8941 var out = ''
8942 for (var i = start; i < end; ++i) {
8943 out += toHex(buf[i])
8944 }
8945 return out
8b095871
IC
8946}
8947
9987f0c1
IC
8948function utf16leSlice (buf, start, end) {
8949 var bytes = buf.slice(start, end)
8950 var res = ''
8951 for (var i = 0; i < bytes.length; i += 2) {
8952 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
8b095871 8953 }
9987f0c1 8954 return res
8b095871
IC
8955}
8956
9987f0c1
IC
8957Buffer.prototype.slice = function slice (start, end) {
8958 var len = this.length
8959 start = ~~start
8960 end = end === undefined ? len : ~~end
8b095871 8961
9987f0c1
IC
8962 if (start < 0) {
8963 start += len
8964 if (start < 0) start = 0
8965 } else if (start > len) {
8966 start = len
8967 }
8b095871 8968
9987f0c1
IC
8969 if (end < 0) {
8970 end += len
8971 if (end < 0) end = 0
8972 } else if (end > len) {
8973 end = len
8974 }
8975
8976 if (end < start) end = start
8977
8978 var newBuf = this.subarray(start, end)
8979 // Return an augmented `Uint8Array` instance
8980 newBuf.__proto__ = Buffer.prototype
8981 return newBuf
8b095871
IC
8982}
8983
9987f0c1
IC
8984/*
8985 * Need to make sure that buffer isn't trying to write out of bounds.
8986 */
8987function checkOffset (offset, ext, length) {
8988 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
8989 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
8b095871
IC
8990}
8991
9987f0c1
IC
8992Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
8993 offset = offset >>> 0
8994 byteLength = byteLength >>> 0
8995 if (!noAssert) checkOffset(offset, byteLength, this.length)
8996
8997 var val = this[offset]
8998 var mul = 1
8999 var i = 0
9000 while (++i < byteLength && (mul *= 0x100)) {
9001 val += this[offset + i] * mul
9002 }
9003
9004 return val
8b095871
IC
9005}
9006
9987f0c1
IC
9007Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
9008 offset = offset >>> 0
9009 byteLength = byteLength >>> 0
9010 if (!noAssert) {
9011 checkOffset(offset, byteLength, this.length)
9012 }
9013
9014 var val = this[offset + --byteLength]
9015 var mul = 1
9016 while (byteLength > 0 && (mul *= 0x100)) {
9017 val += this[offset + --byteLength] * mul
9018 }
9019
9020 return val
8b095871
IC
9021}
9022
9987f0c1
IC
9023Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
9024 offset = offset >>> 0
9025 if (!noAssert) checkOffset(offset, 1, this.length)
9026 return this[offset]
8b095871
IC
9027}
9028
9987f0c1
IC
9029Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
9030 offset = offset >>> 0
9031 if (!noAssert) checkOffset(offset, 2, this.length)
9032 return this[offset] | (this[offset + 1] << 8)
8b095871
IC
9033}
9034
9987f0c1
IC
9035Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
9036 offset = offset >>> 0
9037 if (!noAssert) checkOffset(offset, 2, this.length)
9038 return (this[offset] << 8) | this[offset + 1]
8b095871
IC
9039}
9040
9987f0c1
IC
9041Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
9042 offset = offset >>> 0
9043 if (!noAssert) checkOffset(offset, 4, this.length)
9044
9045 return ((this[offset]) |
9046 (this[offset + 1] << 8) |
9047 (this[offset + 2] << 16)) +
9048 (this[offset + 3] * 0x1000000)
8b095871
IC
9049}
9050
9987f0c1
IC
9051Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
9052 offset = offset >>> 0
9053 if (!noAssert) checkOffset(offset, 4, this.length)
9054
9055 return (this[offset] * 0x1000000) +
9056 ((this[offset + 1] << 16) |
9057 (this[offset + 2] << 8) |
9058 this[offset + 3])
8b095871
IC
9059}
9060
9987f0c1
IC
9061Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
9062 offset = offset >>> 0
9063 byteLength = byteLength >>> 0
9064 if (!noAssert) checkOffset(offset, byteLength, this.length)
9065
9066 var val = this[offset]
9067 var mul = 1
9068 var i = 0
9069 while (++i < byteLength && (mul *= 0x100)) {
9070 val += this[offset + i] * mul
8b095871 9071 }
9987f0c1
IC
9072 mul *= 0x80
9073
9074 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
9075
9076 return val
9077}
9078
9079Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
9080 offset = offset >>> 0
9081 byteLength = byteLength >>> 0
9082 if (!noAssert) checkOffset(offset, byteLength, this.length)
9083
9084 var i = byteLength
9085 var mul = 1
9086 var val = this[offset + --i]
9087 while (i > 0 && (mul *= 0x100)) {
9088 val += this[offset + --i] * mul
8b095871 9089 }
9987f0c1
IC
9090 mul *= 0x80
9091
9092 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
9093
9094 return val
8b095871
IC
9095}
9096
9987f0c1
IC
9097Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
9098 offset = offset >>> 0
9099 if (!noAssert) checkOffset(offset, 1, this.length)
9100 if (!(this[offset] & 0x80)) return (this[offset])
9101 return ((0xff - this[offset] + 1) * -1)
8b095871
IC
9102}
9103
9987f0c1
IC
9104Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
9105 offset = offset >>> 0
9106 if (!noAssert) checkOffset(offset, 2, this.length)
9107 var val = this[offset] | (this[offset + 1] << 8)
9108 return (val & 0x8000) ? val | 0xFFFF0000 : val
8b095871
IC
9109}
9110
9987f0c1
IC
9111Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
9112 offset = offset >>> 0
9113 if (!noAssert) checkOffset(offset, 2, this.length)
9114 var val = this[offset + 1] | (this[offset] << 8)
9115 return (val & 0x8000) ? val | 0xFFFF0000 : val
8b095871
IC
9116}
9117
9987f0c1
IC
9118Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
9119 offset = offset >>> 0
9120 if (!noAssert) checkOffset(offset, 4, this.length)
9121
9122 return (this[offset]) |
9123 (this[offset + 1] << 8) |
9124 (this[offset + 2] << 16) |
9125 (this[offset + 3] << 24)
8b095871
IC
9126}
9127
9987f0c1
IC
9128Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
9129 offset = offset >>> 0
9130 if (!noAssert) checkOffset(offset, 4, this.length)
9131
9132 return (this[offset] << 24) |
9133 (this[offset + 1] << 16) |
9134 (this[offset + 2] << 8) |
9135 (this[offset + 3])
8b095871
IC
9136}
9137
9987f0c1
IC
9138Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
9139 offset = offset >>> 0
9140 if (!noAssert) checkOffset(offset, 4, this.length)
9141 return ieee754.read(this, offset, true, 23, 4)
8b095871
IC
9142}
9143
9987f0c1
IC
9144Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
9145 offset = offset >>> 0
9146 if (!noAssert) checkOffset(offset, 4, this.length)
9147 return ieee754.read(this, offset, false, 23, 4)
8b095871
IC
9148}
9149
9987f0c1
IC
9150Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
9151 offset = offset >>> 0
9152 if (!noAssert) checkOffset(offset, 8, this.length)
9153 return ieee754.read(this, offset, true, 52, 8)
8b095871
IC
9154}
9155
9987f0c1
IC
9156Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
9157 offset = offset >>> 0
9158 if (!noAssert) checkOffset(offset, 8, this.length)
9159 return ieee754.read(this, offset, false, 52, 8)
9160}
8b095871 9161
9987f0c1
IC
9162function checkInt (buf, value, offset, ext, max, min) {
9163 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
9164 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
9165 if (offset + ext > buf.length) throw new RangeError('Index out of range')
9166}
9167
9168Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
9169 value = +value
9170 offset = offset >>> 0
9171 byteLength = byteLength >>> 0
9172 if (!noAssert) {
9173 var maxBytes = Math.pow(2, 8 * byteLength) - 1
9174 checkInt(this, value, offset, byteLength, maxBytes, 0)
8b095871 9175 }
9987f0c1
IC
9176
9177 var mul = 1
9178 var i = 0
9179 this[offset] = value & 0xFF
9180 while (++i < byteLength && (mul *= 0x100)) {
9181 this[offset + i] = (value / mul) & 0xFF
8b095871 9182 }
8b095871 9183
9987f0c1 9184 return offset + byteLength
8b095871
IC
9185}
9186
9987f0c1
IC
9187Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
9188 value = +value
9189 offset = offset >>> 0
9190 byteLength = byteLength >>> 0
9191 if (!noAssert) {
9192 var maxBytes = Math.pow(2, 8 * byteLength) - 1
9193 checkInt(this, value, offset, byteLength, maxBytes, 0)
9194 }
8b095871 9195
9987f0c1
IC
9196 var i = byteLength - 1
9197 var mul = 1
9198 this[offset + i] = value & 0xFF
9199 while (--i >= 0 && (mul *= 0x100)) {
9200 this[offset + i] = (value / mul) & 0xFF
9201 }
9202
9203 return offset + byteLength
8b095871
IC
9204}
9205
9987f0c1
IC
9206Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
9207 value = +value
9208 offset = offset >>> 0
9209 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
9210 this[offset] = (value & 0xff)
9211 return offset + 1
8b095871
IC
9212}
9213
9987f0c1
IC
9214Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
9215 value = +value
9216 offset = offset >>> 0
9217 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
9218 this[offset] = (value & 0xff)
9219 this[offset + 1] = (value >>> 8)
9220 return offset + 2
8b095871
IC
9221}
9222
9987f0c1
IC
9223Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
9224 value = +value
9225 offset = offset >>> 0
9226 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
9227 this[offset] = (value >>> 8)
9228 this[offset + 1] = (value & 0xff)
9229 return offset + 2
8b095871
IC
9230}
9231
9987f0c1
IC
9232Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
9233 value = +value
9234 offset = offset >>> 0
9235 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
9236 this[offset + 3] = (value >>> 24)
9237 this[offset + 2] = (value >>> 16)
9238 this[offset + 1] = (value >>> 8)
9239 this[offset] = (value & 0xff)
9240 return offset + 4
8b095871
IC
9241}
9242
9987f0c1
IC
9243Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
9244 value = +value
9245 offset = offset >>> 0
9246 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
9247 this[offset] = (value >>> 24)
9248 this[offset + 1] = (value >>> 16)
9249 this[offset + 2] = (value >>> 8)
9250 this[offset + 3] = (value & 0xff)
9251 return offset + 4
8b095871
IC
9252}
9253
9987f0c1
IC
9254Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
9255 value = +value
9256 offset = offset >>> 0
9257 if (!noAssert) {
9258 var limit = Math.pow(2, (8 * byteLength) - 1)
9259
9260 checkInt(this, value, offset, byteLength, limit - 1, -limit)
9261 }
9262
9263 var i = 0
9264 var mul = 1
9265 var sub = 0
9266 this[offset] = value & 0xFF
9267 while (++i < byteLength && (mul *= 0x100)) {
9268 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
9269 sub = 1
9270 }
9271 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
8b095871 9272 }
9987f0c1
IC
9273
9274 return offset + byteLength
8b095871
IC
9275}
9276
9987f0c1
IC
9277Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
9278 value = +value
9279 offset = offset >>> 0
9280 if (!noAssert) {
9281 var limit = Math.pow(2, (8 * byteLength) - 1)
8b095871 9282
9987f0c1
IC
9283 checkInt(this, value, offset, byteLength, limit - 1, -limit)
9284 }
9285
9286 var i = byteLength - 1
9287 var mul = 1
9288 var sub = 0
9289 this[offset + i] = value & 0xFF
9290 while (--i >= 0 && (mul *= 0x100)) {
9291 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
9292 sub = 1
9293 }
9294 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
9295 }
9296
9297 return offset + byteLength
8b095871
IC
9298}
9299
9987f0c1
IC
9300Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
9301 value = +value
9302 offset = offset >>> 0
9303 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
9304 if (value < 0) value = 0xff + value + 1
9305 this[offset] = (value & 0xff)
9306 return offset + 1
8b095871
IC
9307}
9308
9987f0c1
IC
9309Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
9310 value = +value
9311 offset = offset >>> 0
9312 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
9313 this[offset] = (value & 0xff)
9314 this[offset + 1] = (value >>> 8)
9315 return offset + 2
8b095871
IC
9316}
9317
9987f0c1
IC
9318Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
9319 value = +value
9320 offset = offset >>> 0
9321 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
9322 this[offset] = (value >>> 8)
9323 this[offset + 1] = (value & 0xff)
9324 return offset + 2
8b095871
IC
9325}
9326
9987f0c1
IC
9327Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
9328 value = +value
9329 offset = offset >>> 0
9330 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
9331 this[offset] = (value & 0xff)
9332 this[offset + 1] = (value >>> 8)
9333 this[offset + 2] = (value >>> 16)
9334 this[offset + 3] = (value >>> 24)
9335 return offset + 4
8b095871
IC
9336}
9337
9987f0c1
IC
9338Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
9339 value = +value
9340 offset = offset >>> 0
9341 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
9342 if (value < 0) value = 0xffffffff + value + 1
9343 this[offset] = (value >>> 24)
9344 this[offset + 1] = (value >>> 16)
9345 this[offset + 2] = (value >>> 8)
9346 this[offset + 3] = (value & 0xff)
9347 return offset + 4
8b095871
IC
9348}
9349
9987f0c1
IC
9350function checkIEEE754 (buf, value, offset, ext, max, min) {
9351 if (offset + ext > buf.length) throw new RangeError('Index out of range')
9352 if (offset < 0) throw new RangeError('Index out of range')
8b095871
IC
9353}
9354
9987f0c1
IC
9355function writeFloat (buf, value, offset, littleEndian, noAssert) {
9356 value = +value
9357 offset = offset >>> 0
9358 if (!noAssert) {
9359 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
8b095871 9360 }
9987f0c1
IC
9361 ieee754.write(buf, value, offset, littleEndian, 23, 4)
9362 return offset + 4
8b095871
IC
9363}
9364
9987f0c1
IC
9365Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
9366 return writeFloat(this, value, offset, true, noAssert)
8b095871
IC
9367}
9368
9987f0c1
IC
9369Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
9370 return writeFloat(this, value, offset, false, noAssert)
9371}
9372
9373function writeDouble (buf, value, offset, littleEndian, noAssert) {
9374 value = +value
9375 offset = offset >>> 0
9376 if (!noAssert) {
9377 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
8b095871 9378 }
9987f0c1
IC
9379 ieee754.write(buf, value, offset, littleEndian, 52, 8)
9380 return offset + 8
8b095871
IC
9381}
9382
9987f0c1
IC
9383Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
9384 return writeDouble(this, value, offset, true, noAssert)
8b095871
IC
9385}
9386
9987f0c1
IC
9387Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
9388 return writeDouble(this, value, offset, false, noAssert)
8b095871
IC
9389}
9390
9987f0c1
IC
9391// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
9392Buffer.prototype.copy = function copy (target, targetStart, start, end) {
9393 if (!start) start = 0
9394 if (!end && end !== 0) end = this.length
9395 if (targetStart >= target.length) targetStart = target.length
9396 if (!targetStart) targetStart = 0
9397 if (end > 0 && end < start) end = start
8b095871 9398
9987f0c1
IC
9399 // Copy 0 bytes; we're done
9400 if (end === start) return 0
9401 if (target.length === 0 || this.length === 0) return 0
8b095871 9402
9987f0c1
IC
9403 // Fatal error conditions
9404 if (targetStart < 0) {
9405 throw new RangeError('targetStart out of bounds')
8b095871 9406 }
9987f0c1
IC
9407 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
9408 if (end < 0) throw new RangeError('sourceEnd out of bounds')
8b095871 9409
9987f0c1
IC
9410 // Are we oob?
9411 if (end > this.length) end = this.length
9412 if (target.length - targetStart < end - start) {
9413 end = target.length - targetStart + start
9414 }
8b095871 9415
9987f0c1
IC
9416 var len = end - start
9417 var i
9418
9419 if (this === target && start < targetStart && targetStart < end) {
9420 // descending copy from end
9421 for (i = len - 1; i >= 0; --i) {
9422 target[i + targetStart] = this[i + start]
8b095871 9423 }
9987f0c1
IC
9424 } else if (len < 1000) {
9425 // ascending copy from start
9426 for (i = 0; i < len; ++i) {
9427 target[i + targetStart] = this[i + start]
8b095871 9428 }
9987f0c1
IC
9429 } else {
9430 Uint8Array.prototype.set.call(
9431 target,
9432 this.subarray(start, start + len),
9433 targetStart
9434 )
9435 }
8b095871 9436
9987f0c1
IC
9437 return len
9438}
9439
9440// Usage:
9441// buffer.fill(number[, offset[, end]])
9442// buffer.fill(buffer[, offset[, end]])
9443// buffer.fill(string[, offset[, end]][, encoding])
9444Buffer.prototype.fill = function fill (val, start, end, encoding) {
9445 // Handle string cases:
9446 if (typeof val === 'string') {
9447 if (typeof start === 'string') {
9448 encoding = start
9449 start = 0
9450 end = this.length
9451 } else if (typeof end === 'string') {
9452 encoding = end
9453 end = this.length
9454 }
9455 if (val.length === 1) {
9456 var code = val.charCodeAt(0)
9457 if (code < 256) {
9458 val = code
8b095871
IC
9459 }
9460 }
9987f0c1
IC
9461 if (encoding !== undefined && typeof encoding !== 'string') {
9462 throw new TypeError('encoding must be a string')
9463 }
9464 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
9465 throw new TypeError('Unknown encoding: ' + encoding)
9466 }
9467 } else if (typeof val === 'number') {
9468 val = val & 255
8b095871 9469 }
8b095871 9470
9987f0c1
IC
9471 // Invalid ranges are not set to a default, so can range check early.
9472 if (start < 0 || this.length < start || this.length < end) {
9473 throw new RangeError('Out of range index')
8b095871 9474 }
9987f0c1
IC
9475
9476 if (end <= start) {
9477 return this
8b095871 9478 }
8b095871 9479
9987f0c1
IC
9480 start = start >>> 0
9481 end = end === undefined ? this.length : end >>> 0
8b095871 9482
9987f0c1
IC
9483 if (!val) val = 0
9484
9485 var i
9486 if (typeof val === 'number') {
9487 for (i = start; i < end; ++i) {
9488 this[i] = val
8b095871 9489 }
9987f0c1
IC
9490 } else {
9491 var bytes = Buffer.isBuffer(val)
9492 ? val
9493 : new Buffer(val, encoding)
9494 var len = bytes.length
9495 for (i = 0; i < end - start; ++i) {
9496 this[i + start] = bytes[i % len]
8b095871
IC
9497 }
9498 }
9987f0c1
IC
9499
9500 return this
8b095871
IC
9501}
9502
9987f0c1
IC
9503// HELPER FUNCTIONS
9504// ================
8b095871 9505
9987f0c1 9506var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
8b095871 9507
9987f0c1
IC
9508function base64clean (str) {
9509 // Node strips out invalid characters like \n and \t from the string, base64-js does not
9510 str = str.trim().replace(INVALID_BASE64_RE, '')
9511 // Node converts strings with length < 2 to ''
9512 if (str.length < 2) return ''
9513 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
9514 while (str.length % 4 !== 0) {
9515 str = str + '='
8b095871 9516 }
9987f0c1
IC
9517 return str
9518}
9519
9520function toHex (n) {
9521 if (n < 16) return '0' + n.toString(16)
9522 return n.toString(16)
9523}
9524
9525function utf8ToBytes (string, units) {
9526 units = units || Infinity
9527 var codePoint
9528 var length = string.length
9529 var leadSurrogate = null
9530 var bytes = []
9531
9532 for (var i = 0; i < length; ++i) {
9533 codePoint = string.charCodeAt(i)
9534
9535 // is surrogate component
9536 if (codePoint > 0xD7FF && codePoint < 0xE000) {
9537 // last char was a lead
9538 if (!leadSurrogate) {
9539 // no lead yet
9540 if (codePoint > 0xDBFF) {
9541 // unexpected trail
9542 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
9543 continue
9544 } else if (i + 1 === length) {
9545 // unpaired lead
9546 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
9547 continue
9548 }
9549
9550 // valid lead
9551 leadSurrogate = codePoint
9552
9553 continue
9554 }
9555
9556 // 2 leads in a row
9557 if (codePoint < 0xDC00) {
9558 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
9559 leadSurrogate = codePoint
9560 continue
9561 }
9562
9563 // valid surrogate pair
9564 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
9565 } else if (leadSurrogate) {
9566 // valid bmp char, but last char was a lead
9567 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
9568 }
9569
9570 leadSurrogate = null
9571
9572 // encode utf8
9573 if (codePoint < 0x80) {
9574 if ((units -= 1) < 0) break
9575 bytes.push(codePoint)
9576 } else if (codePoint < 0x800) {
9577 if ((units -= 2) < 0) break
9578 bytes.push(
9579 codePoint >> 0x6 | 0xC0,
9580 codePoint & 0x3F | 0x80
9581 )
9582 } else if (codePoint < 0x10000) {
9583 if ((units -= 3) < 0) break
9584 bytes.push(
9585 codePoint >> 0xC | 0xE0,
9586 codePoint >> 0x6 & 0x3F | 0x80,
9587 codePoint & 0x3F | 0x80
9588 )
9589 } else if (codePoint < 0x110000) {
9590 if ((units -= 4) < 0) break
9591 bytes.push(
9592 codePoint >> 0x12 | 0xF0,
9593 codePoint >> 0xC & 0x3F | 0x80,
9594 codePoint >> 0x6 & 0x3F | 0x80,
9595 codePoint & 0x3F | 0x80
9596 )
9597 } else {
9598 throw new Error('Invalid code point')
9599 }
8b095871 9600 }
9987f0c1
IC
9601
9602 return bytes
8b095871
IC
9603}
9604
9987f0c1
IC
9605function asciiToBytes (str) {
9606 var byteArray = []
9607 for (var i = 0; i < str.length; ++i) {
9608 // Node's code seems to be doing this and not & 0x7F..
9609 byteArray.push(str.charCodeAt(i) & 0xFF)
8b095871 9610 }
9987f0c1 9611 return byteArray
8b095871
IC
9612}
9613
9987f0c1
IC
9614function utf16leToBytes (str, units) {
9615 var c, hi, lo
9616 var byteArray = []
9617 for (var i = 0; i < str.length; ++i) {
9618 if ((units -= 2) < 0) break
8b095871 9619
9987f0c1
IC
9620 c = str.charCodeAt(i)
9621 hi = c >> 8
9622 lo = c % 256
9623 byteArray.push(lo)
9624 byteArray.push(hi)
9625 }
8b095871 9626
9987f0c1
IC
9627 return byteArray
9628}
8b095871 9629
9987f0c1
IC
9630function base64ToBytes (str) {
9631 return base64.toByteArray(base64clean(str))
9632}
8b095871 9633
9987f0c1
IC
9634function blitBuffer (src, dst, offset, length) {
9635 for (var i = 0; i < length; ++i) {
9636 if ((i + offset >= dst.length) || (i >= src.length)) break
9637 dst[i + offset] = src[i]
9638 }
9639 return i
9640}
9641
9642// Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`
9643function isArrayBufferView (obj) {
9644 return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)
9645}
9646
9647function numberIsNaN (obj) {
9648 return obj !== obj // eslint-disable-line no-self-compare
9649}
8b095871 9650
9987f0c1 9651},{"base64-js":2,"ieee754":7}],5:[function(require,module,exports){
8b095871 9652(function (Buffer){
9987f0c1
IC
9653// Copyright Joyent, Inc. and other Node contributors.
9654//
9655// Permission is hereby granted, free of charge, to any person obtaining a
9656// copy of this software and associated documentation files (the
9657// "Software"), to deal in the Software without restriction, including
9658// without limitation the rights to use, copy, modify, merge, publish,
9659// distribute, sublicense, and/or sell copies of the Software, and to permit
9660// persons to whom the Software is furnished to do so, subject to the
9661// following conditions:
9662//
9663// The above copyright notice and this permission notice shall be included
9664// in all copies or substantial portions of the Software.
9665//
9666// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
9667// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
9668// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
9669// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
9670// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
9671// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
9672// USE OR OTHER DEALINGS IN THE SOFTWARE.
8b095871 9673
9987f0c1
IC
9674// NOTE: These type checking functions intentionally don't use `instanceof`
9675// because it is fragile and can be easily faked with `Object.create()`.
8b095871 9676
9987f0c1
IC
9677function isArray(arg) {
9678 if (Array.isArray) {
9679 return Array.isArray(arg);
9680 }
9681 return objectToString(arg) === '[object Array]';
8b095871 9682}
9987f0c1 9683exports.isArray = isArray;
8b095871 9684
9987f0c1
IC
9685function isBoolean(arg) {
9686 return typeof arg === 'boolean';
8b095871 9687}
9987f0c1 9688exports.isBoolean = isBoolean;
8b095871 9689
9987f0c1
IC
9690function isNull(arg) {
9691 return arg === null;
8b095871 9692}
9987f0c1 9693exports.isNull = isNull;
8b095871 9694
9987f0c1
IC
9695function isNullOrUndefined(arg) {
9696 return arg == null;
9697}
9698exports.isNullOrUndefined = isNullOrUndefined;
8b095871 9699
9987f0c1
IC
9700function isNumber(arg) {
9701 return typeof arg === 'number';
9702}
9703exports.isNumber = isNumber;
8b095871 9704
9987f0c1
IC
9705function isString(arg) {
9706 return typeof arg === 'string';
9707}
9708exports.isString = isString;
8b095871 9709
9987f0c1
IC
9710function isSymbol(arg) {
9711 return typeof arg === 'symbol';
8b095871 9712}
9987f0c1 9713exports.isSymbol = isSymbol;
8b095871 9714
9987f0c1
IC
9715function isUndefined(arg) {
9716 return arg === void 0;
9717}
9718exports.isUndefined = isUndefined;
8b095871 9719
9987f0c1
IC
9720function isRegExp(re) {
9721 return objectToString(re) === '[object RegExp]';
8b095871 9722}
9987f0c1 9723exports.isRegExp = isRegExp;
8b095871 9724
9987f0c1
IC
9725function isObject(arg) {
9726 return typeof arg === 'object' && arg !== null;
9727}
9728exports.isObject = isObject;
8b095871 9729
9987f0c1
IC
9730function isDate(d) {
9731 return objectToString(d) === '[object Date]';
9732}
9733exports.isDate = isDate;
8b095871 9734
9987f0c1
IC
9735function isError(e) {
9736 return (objectToString(e) === '[object Error]' || e instanceof Error);
8b095871 9737}
9987f0c1 9738exports.isError = isError;
8b095871 9739
9987f0c1
IC
9740function isFunction(arg) {
9741 return typeof arg === 'function';
8b095871 9742}
9987f0c1 9743exports.isFunction = isFunction;
8b095871 9744
9987f0c1
IC
9745function isPrimitive(arg) {
9746 return arg === null ||
9747 typeof arg === 'boolean' ||
9748 typeof arg === 'number' ||
9749 typeof arg === 'string' ||
9750 typeof arg === 'symbol' || // ES6 symbol
9751 typeof arg === 'undefined';
9752}
9753exports.isPrimitive = isPrimitive;
8b095871 9754
9987f0c1 9755exports.isBuffer = Buffer.isBuffer;
8b095871 9756
9987f0c1
IC
9757function objectToString(o) {
9758 return Object.prototype.toString.call(o);
8b095871
IC
9759}
9760
9987f0c1
IC
9761}).call(this,{"isBuffer":require("../../is-buffer/index.js")})
9762},{"../../is-buffer/index.js":9}],6:[function(require,module,exports){
9763// Copyright Joyent, Inc. and other Node contributors.
8b095871 9764//
9987f0c1
IC
9765// Permission is hereby granted, free of charge, to any person obtaining a
9766// copy of this software and associated documentation files (the
9767// "Software"), to deal in the Software without restriction, including
9768// without limitation the rights to use, copy, modify, merge, publish,
9769// distribute, sublicense, and/or sell copies of the Software, and to permit
9770// persons to whom the Software is furnished to do so, subject to the
9771// following conditions:
8b095871 9772//
9987f0c1
IC
9773// The above copyright notice and this permission notice shall be included
9774// in all copies or substantial portions of the Software.
8b095871 9775//
9987f0c1
IC
9776// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
9777// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
9778// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
9779// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
9780// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
9781// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
9782// USE OR OTHER DEALINGS IN THE SOFTWARE.
8b095871 9783
9987f0c1
IC
9784function EventEmitter() {
9785 this._events = this._events || {};
9786 this._maxListeners = this._maxListeners || undefined;
9787}
9788module.exports = EventEmitter;
8b095871 9789
9987f0c1
IC
9790// Backwards-compat with node 0.10.x
9791EventEmitter.EventEmitter = EventEmitter;
8b095871 9792
9987f0c1
IC
9793EventEmitter.prototype._events = undefined;
9794EventEmitter.prototype._maxListeners = undefined;
8b095871 9795
9987f0c1
IC
9796// By default EventEmitters will print a warning if more than 10 listeners are
9797// added to it. This is a useful default which helps finding memory leaks.
9798EventEmitter.defaultMaxListeners = 10;
8b095871 9799
9987f0c1
IC
9800// Obviously not all Emitters should be limited to 10. This function allows
9801// that to be increased. Set to zero for unlimited.
9802EventEmitter.prototype.setMaxListeners = function(n) {
9803 if (!isNumber(n) || n < 0 || isNaN(n))
9804 throw TypeError('n must be a positive number');
9805 this._maxListeners = n;
9806 return this;
9807};
8b095871 9808
9987f0c1
IC
9809EventEmitter.prototype.emit = function(type) {
9810 var er, handler, len, args, i, listeners;
9811
9812 if (!this._events)
9813 this._events = {};
9814
9815 // If there is no 'error' event listener then throw.
9816 if (type === 'error') {
9817 if (!this._events.error ||
9818 (isObject(this._events.error) && !this._events.error.length)) {
9819 er = arguments[1];
9820 if (er instanceof Error) {
9821 throw er; // Unhandled 'error' event
9822 } else {
9823 // At least give some kind of context to the user
9824 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
9825 err.context = er;
9826 throw err;
9827 }
9828 }
8b095871 9829 }
8b095871 9830
9987f0c1
IC
9831 handler = this._events[type];
9832
9833 if (isUndefined(handler))
9834 return false;
9835
9836 if (isFunction(handler)) {
9837 switch (arguments.length) {
9838 // fast cases
9839 case 1:
9840 handler.call(this);
9841 break;
9842 case 2:
9843 handler.call(this, arguments[1]);
9844 break;
9845 case 3:
9846 handler.call(this, arguments[1], arguments[2]);
9847 break;
9848 // slower
9849 default:
9850 args = Array.prototype.slice.call(arguments, 1);
9851 handler.apply(this, args);
9852 }
9853 } else if (isObject(handler)) {
9854 args = Array.prototype.slice.call(arguments, 1);
9855 listeners = handler.slice();
9856 len = listeners.length;
9857 for (i = 0; i < len; i++)
9858 listeners[i].apply(this, args);
8b095871 9859 }
8b095871 9860
9987f0c1
IC
9861 return true;
9862};
9863
9864EventEmitter.prototype.addListener = function(type, listener) {
9865 var m;
9866
9867 if (!isFunction(listener))
9868 throw TypeError('listener must be a function');
9869
9870 if (!this._events)
9871 this._events = {};
9872
9873 // To avoid recursion in the case that type === "newListener"! Before
9874 // adding it to the listeners, first emit "newListener".
9875 if (this._events.newListener)
9876 this.emit('newListener', type,
9877 isFunction(listener.listener) ?
9878 listener.listener : listener);
9879
9880 if (!this._events[type])
9881 // Optimize the case of one listener. Don't need the extra array object.
9882 this._events[type] = listener;
9883 else if (isObject(this._events[type]))
9884 // If we've already got an array, just append.
9885 this._events[type].push(listener);
9886 else
9887 // Adding the second element, need to change to array.
9888 this._events[type] = [this._events[type], listener];
8b095871 9889
9987f0c1
IC
9890 // Check for listener leak
9891 if (isObject(this._events[type]) && !this._events[type].warned) {
9892 if (!isUndefined(this._maxListeners)) {
9893 m = this._maxListeners;
9894 } else {
9895 m = EventEmitter.defaultMaxListeners;
8b095871 9896 }
8b095871 9897
9987f0c1
IC
9898 if (m && m > 0 && this._events[type].length > m) {
9899 this._events[type].warned = true;
9900 console.error('(node) warning: possible EventEmitter memory ' +
9901 'leak detected. %d listeners added. ' +
9902 'Use emitter.setMaxListeners() to increase limit.',
9903 this._events[type].length);
9904 if (typeof console.trace === 'function') {
9905 // not supported in IE 10
9906 console.trace();
9907 }
9908 }
8b095871 9909 }
8b095871 9910
9987f0c1
IC
9911 return this;
9912};
8b095871 9913
9987f0c1 9914EventEmitter.prototype.on = EventEmitter.prototype.addListener;
8b095871 9915
9987f0c1
IC
9916EventEmitter.prototype.once = function(type, listener) {
9917 if (!isFunction(listener))
9918 throw TypeError('listener must be a function');
8b095871 9919
9987f0c1 9920 var fired = false;
8b095871 9921
9987f0c1
IC
9922 function g() {
9923 this.removeListener(type, g);
8b095871 9924
9987f0c1
IC
9925 if (!fired) {
9926 fired = true;
9927 listener.apply(this, arguments);
9928 }
9929 }
8b095871 9930
9987f0c1
IC
9931 g.listener = listener;
9932 this.on(type, g);
8b095871 9933
9987f0c1 9934 return this;
8b095871
IC
9935};
9936
9987f0c1
IC
9937// emits a 'removeListener' event iff the listener was removed
9938EventEmitter.prototype.removeListener = function(type, listener) {
9939 var list, position, length, i;
8b095871 9940
9987f0c1
IC
9941 if (!isFunction(listener))
9942 throw TypeError('listener must be a function');
8b095871 9943
9987f0c1
IC
9944 if (!this._events || !this._events[type])
9945 return this;
8b095871 9946
9987f0c1
IC
9947 list = this._events[type];
9948 length = list.length;
9949 position = -1;
8b095871 9950
9987f0c1
IC
9951 if (list === listener ||
9952 (isFunction(list.listener) && list.listener === listener)) {
9953 delete this._events[type];
9954 if (this._events.removeListener)
9955 this.emit('removeListener', type, listener);
8b095871 9956
9987f0c1
IC
9957 } else if (isObject(list)) {
9958 for (i = length; i-- > 0;) {
9959 if (list[i] === listener ||
9960 (list[i].listener && list[i].listener === listener)) {
9961 position = i;
9962 break;
9963 }
8b095871
IC
9964 }
9965
9987f0c1
IC
9966 if (position < 0)
9967 return this;
8b095871 9968
9987f0c1
IC
9969 if (list.length === 1) {
9970 list.length = 0;
9971 delete this._events[type];
9972 } else {
9973 list.splice(position, 1);
9974 }
8b095871 9975
9987f0c1
IC
9976 if (this._events.removeListener)
9977 this.emit('removeListener', type, listener);
9978 }
8b095871 9979
9987f0c1
IC
9980 return this;
9981};
8b095871 9982
9987f0c1
IC
9983EventEmitter.prototype.removeAllListeners = function(type) {
9984 var key, listeners;
8b095871 9985
9987f0c1
IC
9986 if (!this._events)
9987 return this;
8b095871 9988
9987f0c1
IC
9989 // not listening for removeListener, no need to emit
9990 if (!this._events.removeListener) {
9991 if (arguments.length === 0)
9992 this._events = {};
9993 else if (this._events[type])
9994 delete this._events[type];
9995 return this;
8b095871 9996 }
9987f0c1
IC
9997
9998 // emit removeListener for all listeners on all events
9999 if (arguments.length === 0) {
10000 for (key in this._events) {
10001 if (key === 'removeListener') continue;
10002 this.removeAllListeners(key);
10003 }
10004 this.removeAllListeners('removeListener');
10005 this._events = {};
10006 return this;
8b095871 10007 }
8b095871 10008
9987f0c1 10009 listeners = this._events[type];
8b095871 10010
9987f0c1
IC
10011 if (isFunction(listeners)) {
10012 this.removeListener(type, listeners);
10013 } else if (listeners) {
10014 // LIFO order
10015 while (listeners.length)
10016 this.removeListener(type, listeners[listeners.length - 1]);
8b095871 10017 }
9987f0c1 10018 delete this._events[type];
8b095871 10019
9987f0c1
IC
10020 return this;
10021};
8b095871 10022
9987f0c1
IC
10023EventEmitter.prototype.listeners = function(type) {
10024 var ret;
10025 if (!this._events || !this._events[type])
10026 ret = [];
10027 else if (isFunction(this._events[type]))
10028 ret = [this._events[type]];
10029 else
10030 ret = this._events[type].slice();
10031 return ret;
8b095871
IC
10032};
10033
9987f0c1
IC
10034EventEmitter.prototype.listenerCount = function(type) {
10035 if (this._events) {
10036 var evlistener = this._events[type];
8b095871 10037
9987f0c1
IC
10038 if (isFunction(evlistener))
10039 return 1;
10040 else if (evlistener)
10041 return evlistener.length;
8b095871 10042 }
9987f0c1 10043 return 0;
8b095871
IC
10044};
10045
9987f0c1
IC
10046EventEmitter.listenerCount = function(emitter, type) {
10047 return emitter.listenerCount(type);
10048};
8b095871 10049
9987f0c1
IC
10050function isFunction(arg) {
10051 return typeof arg === 'function';
10052}
8b095871 10053
9987f0c1
IC
10054function isNumber(arg) {
10055 return typeof arg === 'number';
8b095871
IC
10056}
10057
9987f0c1
IC
10058function isObject(arg) {
10059 return typeof arg === 'object' && arg !== null;
10060}
8b095871 10061
9987f0c1
IC
10062function isUndefined(arg) {
10063 return arg === void 0;
10064}
8b095871 10065
9987f0c1
IC
10066},{}],7:[function(require,module,exports){
10067exports.read = function (buffer, offset, isLE, mLen, nBytes) {
10068 var e, m
10069 var eLen = nBytes * 8 - mLen - 1
10070 var eMax = (1 << eLen) - 1
10071 var eBias = eMax >> 1
10072 var nBits = -7
10073 var i = isLE ? (nBytes - 1) : 0
10074 var d = isLE ? -1 : 1
10075 var s = buffer[offset + i]
8b095871 10076
9987f0c1 10077 i += d
8b095871 10078
9987f0c1
IC
10079 e = s & ((1 << (-nBits)) - 1)
10080 s >>= (-nBits)
10081 nBits += eLen
10082 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
8b095871 10083
9987f0c1
IC
10084 m = e & ((1 << (-nBits)) - 1)
10085 e >>= (-nBits)
10086 nBits += mLen
10087 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
8b095871 10088
9987f0c1
IC
10089 if (e === 0) {
10090 e = 1 - eBias
10091 } else if (e === eMax) {
10092 return m ? NaN : ((s ? -1 : 1) * Infinity)
10093 } else {
10094 m = m + Math.pow(2, mLen)
10095 e = e - eBias
8b095871 10096 }
9987f0c1 10097 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
8b095871
IC
10098}
10099
9987f0c1
IC
10100exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
10101 var e, m, c
10102 var eLen = nBytes * 8 - mLen - 1
10103 var eMax = (1 << eLen) - 1
10104 var eBias = eMax >> 1
10105 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
10106 var i = isLE ? 0 : (nBytes - 1)
10107 var d = isLE ? 1 : -1
10108 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
8b095871 10109
9987f0c1 10110 value = Math.abs(value)
8b095871 10111
9987f0c1
IC
10112 if (isNaN(value) || value === Infinity) {
10113 m = isNaN(value) ? 1 : 0
10114 e = eMax
10115 } else {
10116 e = Math.floor(Math.log(value) / Math.LN2)
10117 if (value * (c = Math.pow(2, -e)) < 1) {
10118 e--
10119 c *= 2
10120 }
10121 if (e + eBias >= 1) {
10122 value += rt / c
10123 } else {
10124 value += rt * Math.pow(2, 1 - eBias)
10125 }
10126 if (value * c >= 2) {
10127 e++
10128 c /= 2
10129 }
8b095871 10130
9987f0c1
IC
10131 if (e + eBias >= eMax) {
10132 m = 0
10133 e = eMax
10134 } else if (e + eBias >= 1) {
10135 m = (value * c - 1) * Math.pow(2, mLen)
10136 e = e + eBias
10137 } else {
10138 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
10139 e = 0
10140 }
8b095871 10141 }
8b095871 10142
9987f0c1
IC
10143 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
10144
10145 e = (e << mLen) | m
10146 eLen += mLen
10147 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
10148
10149 buffer[offset + i - d] |= s * 128
10150}
8b095871 10151
9987f0c1
IC
10152},{}],8:[function(require,module,exports){
10153if (typeof Object.create === 'function') {
10154 // implementation from standard node.js 'util' module
10155 module.exports = function inherits(ctor, superCtor) {
10156 ctor.super_ = superCtor
10157 ctor.prototype = Object.create(superCtor.prototype, {
10158 constructor: {
10159 value: ctor,
10160 enumerable: false,
10161 writable: true,
10162 configurable: true
10163 }
10164 });
10165 };
10166} else {
10167 // old school shim for old browsers
10168 module.exports = function inherits(ctor, superCtor) {
10169 ctor.super_ = superCtor
10170 var TempCtor = function () {}
10171 TempCtor.prototype = superCtor.prototype
10172 ctor.prototype = new TempCtor()
10173 ctor.prototype.constructor = ctor
10174 }
10175}
10176
10177},{}],9:[function(require,module,exports){
8b095871 10178/*!
9987f0c1 10179 * Determine if an object is a Buffer
8b095871
IC
10180 *
10181 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
10182 * @license MIT
10183 */
10184
9987f0c1
IC
10185// The _isBuffer check is for Safari 5-7 support, because it's missing
10186// Object.prototype.constructor. Remove this eventually
10187module.exports = function (obj) {
10188 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
10189}
8b095871 10190
9987f0c1
IC
10191function isBuffer (obj) {
10192 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
8b095871
IC
10193}
10194
9987f0c1
IC
10195// For Node v0.10 support. Remove this eventually.
10196function isSlowBuffer (obj) {
10197 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
10198}
8b095871 10199
9987f0c1
IC
10200},{}],10:[function(require,module,exports){
10201var toString = {}.toString;
8b095871 10202
9987f0c1
IC
10203module.exports = Array.isArray || function (arr) {
10204 return toString.call(arr) == '[object Array]';
10205};
8b095871 10206
9987f0c1
IC
10207},{}],11:[function(require,module,exports){
10208(function (process){
10209'use strict';
8b095871 10210
9987f0c1
IC
10211if (!process.version ||
10212 process.version.indexOf('v0.') === 0 ||
10213 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
10214 module.exports = nextTick;
10215} else {
10216 module.exports = process.nextTick;
8b095871
IC
10217}
10218
9987f0c1
IC
10219function nextTick(fn, arg1, arg2, arg3) {
10220 if (typeof fn !== 'function') {
10221 throw new TypeError('"callback" argument must be a function');
10222 }
10223 var len = arguments.length;
10224 var args, i;
10225 switch (len) {
10226 case 0:
10227 case 1:
10228 return process.nextTick(fn);
10229 case 2:
10230 return process.nextTick(function afterTickOne() {
10231 fn.call(null, arg1);
10232 });
10233 case 3:
10234 return process.nextTick(function afterTickTwo() {
10235 fn.call(null, arg1, arg2);
10236 });
10237 case 4:
10238 return process.nextTick(function afterTickThree() {
10239 fn.call(null, arg1, arg2, arg3);
10240 });
10241 default:
10242 args = new Array(len - 1);
10243 i = 0;
10244 while (i < args.length) {
10245 args[i++] = arguments[i];
8b095871 10246 }
9987f0c1
IC
10247 return process.nextTick(function afterTick() {
10248 fn.apply(null, args);
10249 });
8b095871 10250 }
8b095871
IC
10251}
10252
9987f0c1
IC
10253}).call(this,require('_process'))
10254},{"_process":12}],12:[function(require,module,exports){
10255// shim for using process in browser
10256var process = module.exports = {};
8b095871 10257
9987f0c1
IC
10258// cached from whatever global is present so that test runners that stub it
10259// don't break things. But we need to wrap it in a try catch in case it is
10260// wrapped in strict mode code which doesn't define any globals. It's inside a
10261// function because try/catches deoptimize in certain engines.
8b095871 10262
9987f0c1
IC
10263var cachedSetTimeout;
10264var cachedClearTimeout;
8b095871 10265
9987f0c1
IC
10266function defaultSetTimout() {
10267 throw new Error('setTimeout has not been defined');
10268}
10269function defaultClearTimeout () {
10270 throw new Error('clearTimeout has not been defined');
10271}
10272(function () {
10273 try {
10274 if (typeof setTimeout === 'function') {
10275 cachedSetTimeout = setTimeout;
10276 } else {
10277 cachedSetTimeout = defaultSetTimout;
10278 }
10279 } catch (e) {
10280 cachedSetTimeout = defaultSetTimout;
10281 }
10282 try {
10283 if (typeof clearTimeout === 'function') {
10284 cachedClearTimeout = clearTimeout;
10285 } else {
10286 cachedClearTimeout = defaultClearTimeout;
10287 }
10288 } catch (e) {
10289 cachedClearTimeout = defaultClearTimeout;
8b095871 10290 }
9987f0c1
IC
10291} ())
10292function runTimeout(fun) {
10293 if (cachedSetTimeout === setTimeout) {
10294 //normal enviroments in sane situations
10295 return setTimeout(fun, 0);
10296 }
10297 // if setTimeout wasn't available but was latter defined
10298 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
10299 cachedSetTimeout = setTimeout;
10300 return setTimeout(fun, 0);
10301 }
10302 try {
10303 // when when somebody has screwed with setTimeout but no I.E. maddness
10304 return cachedSetTimeout(fun, 0);
10305 } catch(e){
10306 try {
10307 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
10308 return cachedSetTimeout.call(null, fun, 0);
10309 } catch(e){
10310 // 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
10311 return cachedSetTimeout.call(this, fun, 0);
10312 }
8b095871 10313 }
8b095871 10314
8b095871 10315
8b095871 10316}
9987f0c1
IC
10317function runClearTimeout(marker) {
10318 if (cachedClearTimeout === clearTimeout) {
10319 //normal enviroments in sane situations
10320 return clearTimeout(marker);
10321 }
10322 // if clearTimeout wasn't available but was latter defined
10323 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
10324 cachedClearTimeout = clearTimeout;
10325 return clearTimeout(marker);
10326 }
10327 try {
10328 // when when somebody has screwed with setTimeout but no I.E. maddness
10329 return cachedClearTimeout(marker);
10330 } catch (e){
10331 try {
10332 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
10333 return cachedClearTimeout.call(null, marker);
10334 } catch (e){
10335 // 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.
10336 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
10337 return cachedClearTimeout.call(this, marker);
10338 }
10339 }
8b095871 10340
8b095871 10341
8b095871 10342
8b095871 10343}
9987f0c1
IC
10344var queue = [];
10345var draining = false;
10346var currentQueue;
10347var queueIndex = -1;
8b095871 10348
9987f0c1
IC
10349function cleanUpNextTick() {
10350 if (!draining || !currentQueue) {
10351 return;
10352 }
10353 draining = false;
10354 if (currentQueue.length) {
10355 queue = currentQueue.concat(queue);
10356 } else {
10357 queueIndex = -1;
10358 }
10359 if (queue.length) {
10360 drainQueue();
10361 }
8b095871
IC
10362}
10363
9987f0c1
IC
10364function drainQueue() {
10365 if (draining) {
10366 return;
10367 }
10368 var timeout = runTimeout(cleanUpNextTick);
10369 draining = true;
8b095871 10370
9987f0c1
IC
10371 var len = queue.length;
10372 while(len) {
10373 currentQueue = queue;
10374 queue = [];
10375 while (++queueIndex < len) {
10376 if (currentQueue) {
10377 currentQueue[queueIndex].run();
10378 }
10379 }
10380 queueIndex = -1;
10381 len = queue.length;
10382 }
10383 currentQueue = null;
10384 draining = false;
10385 runClearTimeout(timeout);
8b095871
IC
10386}
10387
9987f0c1
IC
10388process.nextTick = function (fun) {
10389 var args = new Array(arguments.length - 1);
10390 if (arguments.length > 1) {
10391 for (var i = 1; i < arguments.length; i++) {
10392 args[i - 1] = arguments[i];
10393 }
10394 }
10395 queue.push(new Item(fun, args));
10396 if (queue.length === 1 && !draining) {
10397 runTimeout(drainQueue);
10398 }
10399};
8b095871 10400
9987f0c1
IC
10401// v8 likes predictible objects
10402function Item(fun, array) {
10403 this.fun = fun;
10404 this.array = array;
8b095871 10405}
9987f0c1
IC
10406Item.prototype.run = function () {
10407 this.fun.apply(null, this.array);
10408};
10409process.title = 'browser';
10410process.browser = true;
10411process.env = {};
10412process.argv = [];
10413process.version = ''; // empty string to avoid regexp issues
10414process.versions = {};
8b095871 10415
9987f0c1 10416function noop() {}
8b095871 10417
9987f0c1
IC
10418process.on = noop;
10419process.addListener = noop;
10420process.once = noop;
10421process.off = noop;
10422process.removeListener = noop;
10423process.removeAllListeners = noop;
10424process.emit = noop;
10425process.prependListener = noop;
10426process.prependOnceListener = noop;
8b095871 10427
9987f0c1 10428process.listeners = function (name) { return [] }
8b095871 10429
9987f0c1
IC
10430process.binding = function (name) {
10431 throw new Error('process.binding is not supported');
10432};
8b095871 10433
9987f0c1
IC
10434process.cwd = function () { return '/' };
10435process.chdir = function (dir) {
10436 throw new Error('process.chdir is not supported');
10437};
10438process.umask = function() { return 0; };
8b095871 10439
9987f0c1
IC
10440},{}],13:[function(require,module,exports){
10441module.exports = require('./lib/_stream_duplex.js');
8b095871 10442
9987f0c1
IC
10443},{"./lib/_stream_duplex.js":14}],14:[function(require,module,exports){
10444// Copyright Joyent, Inc. and other Node contributors.
10445//
10446// Permission is hereby granted, free of charge, to any person obtaining a
10447// copy of this software and associated documentation files (the
10448// "Software"), to deal in the Software without restriction, including
10449// without limitation the rights to use, copy, modify, merge, publish,
10450// distribute, sublicense, and/or sell copies of the Software, and to permit
10451// persons to whom the Software is furnished to do so, subject to the
10452// following conditions:
10453//
10454// The above copyright notice and this permission notice shall be included
10455// in all copies or substantial portions of the Software.
10456//
10457// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
10458// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
10459// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
10460// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
10461// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
10462// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
10463// USE OR OTHER DEALINGS IN THE SOFTWARE.
8b095871 10464
9987f0c1
IC
10465// a duplex stream is just a stream that is both readable and writable.
10466// Since JS doesn't have multiple prototypal inheritance, this class
10467// prototypally inherits from Readable, and then parasitically from
10468// Writable.
8b095871 10469
9987f0c1 10470'use strict';
8b095871 10471
9987f0c1 10472/*<replacement>*/
8b095871 10473
9987f0c1
IC
10474var processNextTick = require('process-nextick-args');
10475/*</replacement>*/
8b095871 10476
9987f0c1
IC
10477/*<replacement>*/
10478var objectKeys = Object.keys || function (obj) {
10479 var keys = [];
10480 for (var key in obj) {
10481 keys.push(key);
10482 }return keys;
10483};
10484/*</replacement>*/
8b095871 10485
9987f0c1 10486module.exports = Duplex;
8b095871 10487
9987f0c1
IC
10488/*<replacement>*/
10489var util = require('core-util-is');
10490util.inherits = require('inherits');
10491/*</replacement>*/
8b095871 10492
9987f0c1
IC
10493var Readable = require('./_stream_readable');
10494var Writable = require('./_stream_writable');
8b095871 10495
9987f0c1 10496util.inherits(Duplex, Readable);
8b095871 10497
9987f0c1
IC
10498var keys = objectKeys(Writable.prototype);
10499for (var v = 0; v < keys.length; v++) {
10500 var method = keys[v];
10501 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
8b095871 10502}
8b095871 10503
9987f0c1
IC
10504function Duplex(options) {
10505 if (!(this instanceof Duplex)) return new Duplex(options);
8b095871 10506
9987f0c1
IC
10507 Readable.call(this, options);
10508 Writable.call(this, options);
8b095871 10509
9987f0c1 10510 if (options && options.readable === false) this.readable = false;
8b095871 10511
9987f0c1 10512 if (options && options.writable === false) this.writable = false;
8b095871 10513
9987f0c1
IC
10514 this.allowHalfOpen = true;
10515 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
8b095871 10516
9987f0c1 10517 this.once('end', onend);
8b095871
IC
10518}
10519
9987f0c1
IC
10520// the no-half-open enforcer
10521function onend() {
10522 // if we allow half-open state, or if the writable side ended,
10523 // then we're ok.
10524 if (this.allowHalfOpen || this._writableState.ended) return;
8b095871 10525
9987f0c1
IC
10526 // no more data can be written.
10527 // But allow more writes to happen in this tick.
10528 processNextTick(onEndNT, this);
8b095871
IC
10529}
10530
9987f0c1
IC
10531function onEndNT(self) {
10532 self.end();
8b095871
IC
10533}
10534
9987f0c1
IC
10535Object.defineProperty(Duplex.prototype, 'destroyed', {
10536 get: function () {
10537 if (this._readableState === undefined || this._writableState === undefined) {
10538 return false;
8b095871 10539 }
9987f0c1
IC
10540 return this._readableState.destroyed && this._writableState.destroyed;
10541 },
10542 set: function (value) {
10543 // we ignore the value if the stream
10544 // has not been initialized yet
10545 if (this._readableState === undefined || this._writableState === undefined) {
10546 return;
8b095871 10547 }
9987f0c1
IC
10548
10549 // backward compatibility, the user is explicitly
10550 // managing destroyed
10551 this._readableState.destroyed = value;
10552 this._writableState.destroyed = value;
8b095871 10553 }
9987f0c1 10554});
8b095871 10555
9987f0c1
IC
10556Duplex.prototype._destroy = function (err, cb) {
10557 this.push(null);
10558 this.end();
8b095871 10559
9987f0c1
IC
10560 processNextTick(cb, err);
10561};
8b095871 10562
9987f0c1
IC
10563function forEach(xs, f) {
10564 for (var i = 0, l = xs.length; i < l; i++) {
10565 f(xs[i], i);
10566 }
8b095871 10567}
9987f0c1
IC
10568},{"./_stream_readable":16,"./_stream_writable":18,"core-util-is":5,"inherits":8,"process-nextick-args":11}],15:[function(require,module,exports){
10569// Copyright Joyent, Inc. and other Node contributors.
10570//
10571// Permission is hereby granted, free of charge, to any person obtaining a
10572// copy of this software and associated documentation files (the
10573// "Software"), to deal in the Software without restriction, including
10574// without limitation the rights to use, copy, modify, merge, publish,
10575// distribute, sublicense, and/or sell copies of the Software, and to permit
10576// persons to whom the Software is furnished to do so, subject to the
10577// following conditions:
10578//
10579// The above copyright notice and this permission notice shall be included
10580// in all copies or substantial portions of the Software.
10581//
10582// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
10583// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
10584// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
10585// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
10586// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
10587// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
10588// USE OR OTHER DEALINGS IN THE SOFTWARE.
8b095871 10589
9987f0c1
IC
10590// a passthrough stream.
10591// basically just the most minimal sort of Transform stream.
10592// Every written chunk gets output as-is.
8b095871 10593
9987f0c1 10594'use strict';
8b095871 10595
9987f0c1 10596module.exports = PassThrough;
8b095871 10597
9987f0c1 10598var Transform = require('./_stream_transform');
8b095871 10599
9987f0c1
IC
10600/*<replacement>*/
10601var util = require('core-util-is');
10602util.inherits = require('inherits');
10603/*</replacement>*/
8b095871 10604
9987f0c1 10605util.inherits(PassThrough, Transform);
8b095871 10606
9987f0c1
IC
10607function PassThrough(options) {
10608 if (!(this instanceof PassThrough)) return new PassThrough(options);
8b095871 10609
9987f0c1 10610 Transform.call(this, options);
8b095871
IC
10611}
10612
9987f0c1
IC
10613PassThrough.prototype._transform = function (chunk, encoding, cb) {
10614 cb(null, chunk);
10615};
10616},{"./_stream_transform":17,"core-util-is":5,"inherits":8}],16:[function(require,module,exports){
10617(function (process,global){
10618// Copyright Joyent, Inc. and other Node contributors.
10619//
10620// Permission is hereby granted, free of charge, to any person obtaining a
10621// copy of this software and associated documentation files (the
10622// "Software"), to deal in the Software without restriction, including
10623// without limitation the rights to use, copy, modify, merge, publish,
10624// distribute, sublicense, and/or sell copies of the Software, and to permit
10625// persons to whom the Software is furnished to do so, subject to the
10626// following conditions:
10627//
10628// The above copyright notice and this permission notice shall be included
10629// in all copies or substantial portions of the Software.
10630//
10631// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
10632// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
10633// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
10634// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
10635// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
10636// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
10637// USE OR OTHER DEALINGS IN THE SOFTWARE.
10638
10639'use strict';
8b095871 10640
9987f0c1 10641/*<replacement>*/
8b095871 10642
9987f0c1
IC
10643var processNextTick = require('process-nextick-args');
10644/*</replacement>*/
8b095871 10645
9987f0c1 10646module.exports = Readable;
8b095871 10647
9987f0c1
IC
10648/*<replacement>*/
10649var isArray = require('isarray');
10650/*</replacement>*/
8b095871 10651
9987f0c1
IC
10652/*<replacement>*/
10653var Duplex;
10654/*</replacement>*/
8b095871 10655
9987f0c1 10656Readable.ReadableState = ReadableState;
8b095871 10657
9987f0c1
IC
10658/*<replacement>*/
10659var EE = require('events').EventEmitter;
8b095871 10660
9987f0c1
IC
10661var EElistenerCount = function (emitter, type) {
10662 return emitter.listeners(type).length;
10663};
10664/*</replacement>*/
8b095871 10665
9987f0c1
IC
10666/*<replacement>*/
10667var Stream = require('./internal/streams/stream');
10668/*</replacement>*/
8b095871 10669
9987f0c1
IC
10670// TODO(bmeurer): Change this back to const once hole checks are
10671// properly optimized away early in Ignition+TurboFan.
10672/*<replacement>*/
10673var Buffer = require('safe-buffer').Buffer;
10674var OurUint8Array = global.Uint8Array || function () {};
10675function _uint8ArrayToBuffer(chunk) {
10676 return Buffer.from(chunk);
10677}
10678function _isUint8Array(obj) {
10679 return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
8b095871 10680}
9987f0c1 10681/*</replacement>*/
8b095871 10682
9987f0c1
IC
10683/*<replacement>*/
10684var util = require('core-util-is');
10685util.inherits = require('inherits');
10686/*</replacement>*/
10687
10688/*<replacement>*/
10689var debugUtil = require('util');
10690var debug = void 0;
10691if (debugUtil && debugUtil.debuglog) {
10692 debug = debugUtil.debuglog('stream');
10693} else {
10694 debug = function () {};
8b095871 10695}
9987f0c1 10696/*</replacement>*/
8b095871 10697
9987f0c1
IC
10698var BufferList = require('./internal/streams/BufferList');
10699var destroyImpl = require('./internal/streams/destroy');
10700var StringDecoder;
10701
10702util.inherits(Readable, Stream);
10703
10704var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
10705
10706function prependListener(emitter, event, fn) {
10707 // Sadly this is not cacheable as some libraries bundle their own
10708 // event emitter implementation with them.
10709 if (typeof emitter.prependListener === 'function') {
10710 return emitter.prependListener(event, fn);
8b095871 10711 } else {
9987f0c1
IC
10712 // This is a hack to make sure that our error handler is attached before any
10713 // userland ones. NEVER DO THIS. This is here only because this code needs
10714 // to continue to work with older versions of Node.js that do not include
10715 // the prependListener() method. The goal is to eventually remove this hack.
10716 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
10717 }
10718}
10719
9987f0c1
IC
10720function ReadableState(options, stream) {
10721 Duplex = Duplex || require('./_stream_duplex');
8b095871 10722
9987f0c1 10723 options = options || {};
8b095871 10724
9987f0c1
IC
10725 // object stream flag. Used to make read(n) ignore n and to
10726 // make all the buffer merging and length checks go away
10727 this.objectMode = !!options.objectMode;
8b095871 10728
9987f0c1 10729 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
8b095871 10730
9987f0c1
IC
10731 // the point at which it stops calling _read() to fill the buffer
10732 // Note: 0 is a valid value, means "don't call _read preemptively ever"
10733 var hwm = options.highWaterMark;
10734 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
10735 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
8b095871 10736
9987f0c1
IC
10737 // cast to ints.
10738 this.highWaterMark = Math.floor(this.highWaterMark);
8b095871 10739
9987f0c1
IC
10740 // A linked list is used to store data chunks instead of an array because the
10741 // linked list can remove elements from the beginning faster than
10742 // array.shift()
10743 this.buffer = new BufferList();
10744 this.length = 0;
10745 this.pipes = null;
10746 this.pipesCount = 0;
10747 this.flowing = null;
10748 this.ended = false;
10749 this.endEmitted = false;
10750 this.reading = false;
8b095871 10751
9987f0c1
IC
10752 // a flag to be able to tell if the event 'readable'/'data' is emitted
10753 // immediately, or on a later tick. We set this to true at first, because
10754 // any actions that shouldn't happen until "later" should generally also
10755 // not happen before the first read call.
10756 this.sync = true;
8b095871 10757
9987f0c1
IC
10758 // whenever we return null, then we set a flag to say
10759 // that we're awaiting a 'readable' event emission.
10760 this.needReadable = false;
10761 this.emittedReadable = false;
10762 this.readableListening = false;
10763 this.resumeScheduled = false;
8b095871 10764
9987f0c1
IC
10765 // has it been destroyed
10766 this.destroyed = false;
8b095871 10767
9987f0c1
IC
10768 // Crypto is kind of old and crusty. Historically, its default string
10769 // encoding is 'binary' so we have to make this configurable.
10770 // Everything else in the universe uses 'utf8', though.
10771 this.defaultEncoding = options.defaultEncoding || 'utf8';
8b095871 10772
9987f0c1
IC
10773 // the number of writers that are awaiting a drain event in .pipe()s
10774 this.awaitDrain = 0;
8b095871 10775
9987f0c1
IC
10776 // if true, a maybeReadMore has been scheduled
10777 this.readingMore = false;
8b095871 10778
9987f0c1
IC
10779 this.decoder = null;
10780 this.encoding = null;
10781 if (options.encoding) {
10782 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
10783 this.decoder = new StringDecoder(options.encoding);
10784 this.encoding = options.encoding;
8b095871 10785 }
8b095871
IC
10786}
10787
9987f0c1
IC
10788function Readable(options) {
10789 Duplex = Duplex || require('./_stream_duplex');
8b095871 10790
9987f0c1 10791 if (!(this instanceof Readable)) return new Readable(options);
8b095871 10792
9987f0c1 10793 this._readableState = new ReadableState(options, this);
8b095871 10794
9987f0c1
IC
10795 // legacy
10796 this.readable = true;
10797
10798 if (options) {
10799 if (typeof options.read === 'function') this._read = options.read;
10800
10801 if (typeof options.destroy === 'function') this._destroy = options.destroy;
8b095871
IC
10802 }
10803
9987f0c1
IC
10804 Stream.call(this);
10805}
8b095871 10806
9987f0c1
IC
10807Object.defineProperty(Readable.prototype, 'destroyed', {
10808 get: function () {
10809 if (this._readableState === undefined) {
10810 return false;
10811 }
10812 return this._readableState.destroyed;
10813 },
10814 set: function (value) {
10815 // we ignore the value if the stream
10816 // has not been initialized yet
10817 if (!this._readableState) {
10818 return;
8b095871 10819 }
9987f0c1
IC
10820
10821 // backward compatibility, the user is explicitly
10822 // managing destroyed
10823 this._readableState.destroyed = value;
8b095871 10824 }
9987f0c1 10825});
8b095871 10826
9987f0c1
IC
10827Readable.prototype.destroy = destroyImpl.destroy;
10828Readable.prototype._undestroy = destroyImpl.undestroy;
10829Readable.prototype._destroy = function (err, cb) {
10830 this.push(null);
10831 cb(err);
10832};
8b095871 10833
9987f0c1
IC
10834// Manually shove something into the read() buffer.
10835// This returns true if the highWaterMark has not been hit yet,
10836// similar to how Writable.write() returns true if you should
10837// write() some more.
10838Readable.prototype.push = function (chunk, encoding) {
10839 var state = this._readableState;
10840 var skipChunkCheck;
10841
10842 if (!state.objectMode) {
10843 if (typeof chunk === 'string') {
10844 encoding = encoding || state.defaultEncoding;
10845 if (encoding !== state.encoding) {
10846 chunk = Buffer.from(chunk, encoding);
10847 encoding = '';
10848 }
10849 skipChunkCheck = true;
10850 }
10851 } else {
10852 skipChunkCheck = true;
10853 }
8b095871 10854
9987f0c1
IC
10855 return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);
10856};
8b095871 10857
9987f0c1
IC
10858// Unshift should *always* be something directly out of read()
10859Readable.prototype.unshift = function (chunk) {
10860 return readableAddChunk(this, chunk, null, true, false);
10861};
8b095871 10862
9987f0c1
IC
10863function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {
10864 var state = stream._readableState;
10865 if (chunk === null) {
10866 state.reading = false;
10867 onEofChunk(stream, state);
10868 } else {
10869 var er;
10870 if (!skipChunkCheck) er = chunkInvalid(state, chunk);
10871 if (er) {
10872 stream.emit('error', er);
10873 } else if (state.objectMode || chunk && chunk.length > 0) {
10874 if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {
10875 chunk = _uint8ArrayToBuffer(chunk);
10876 }
10877
10878 if (addToFront) {
10879 if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);
10880 } else if (state.ended) {
10881 stream.emit('error', new Error('stream.push() after EOF'));
10882 } else {
10883 state.reading = false;
10884 if (state.decoder && !encoding) {
10885 chunk = state.decoder.write(chunk);
10886 if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);
10887 } else {
10888 addChunk(stream, state, chunk, false);
10889 }
10890 }
10891 } else if (!addToFront) {
10892 state.reading = false;
10893 }
8b095871
IC
10894 }
10895
9987f0c1 10896 return needMoreData(state);
8b095871
IC
10897}
10898
9987f0c1
IC
10899function addChunk(stream, state, chunk, addToFront) {
10900 if (state.flowing && state.length === 0 && !state.sync) {
10901 stream.emit('data', chunk);
10902 stream.read(0);
10903 } else {
10904 // update the buffer info.
10905 state.length += state.objectMode ? 1 : chunk.length;
10906 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
8b095871 10907
9987f0c1 10908 if (state.needReadable) emitReadable(stream);
8b095871 10909 }
9987f0c1 10910 maybeReadMore(stream, state);
8b095871
IC
10911}
10912
9987f0c1
IC
10913function chunkInvalid(state, chunk) {
10914 var er;
10915 if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
10916 er = new TypeError('Invalid non-string/buffer chunk');
10917 }
10918 return er;
8b095871
IC
10919}
10920
9987f0c1
IC
10921// if it's past the high water mark, we can push in some more.
10922// Also, if we have no data yet, we can stand some
10923// more bytes. This is to work around cases where hwm=0,
10924// such as the repl. Also, if the push() triggered a
10925// readable event, and the user called read(largeNumber) such that
10926// needReadable was set, then we ought to push more, so that another
10927// 'readable' event will be triggered.
10928function needMoreData(state) {
10929 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
8b095871
IC
10930}
10931
9987f0c1
IC
10932Readable.prototype.isPaused = function () {
10933 return this._readableState.flowing === false;
10934};
8b095871 10935
9987f0c1
IC
10936// backwards compatibility.
10937Readable.prototype.setEncoding = function (enc) {
10938 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
10939 this._readableState.decoder = new StringDecoder(enc);
10940 this._readableState.encoding = enc;
10941 return this;
10942};
8b095871 10943
9987f0c1
IC
10944// Don't raise the hwm > 8MB
10945var MAX_HWM = 0x800000;
10946function computeNewHighWaterMark(n) {
10947 if (n >= MAX_HWM) {
10948 n = MAX_HWM;
10949 } else {
10950 // Get the next highest power of 2 to prevent increasing hwm excessively in
10951 // tiny amounts
10952 n--;
10953 n |= n >>> 1;
10954 n |= n >>> 2;
10955 n |= n >>> 4;
10956 n |= n >>> 8;
10957 n |= n >>> 16;
10958 n++;
10959 }
10960 return n;
8b095871
IC
10961}
10962
9987f0c1
IC
10963// This function is designed to be inlinable, so please take care when making
10964// changes to the function body.
10965function howMuchToRead(n, state) {
10966 if (n <= 0 || state.length === 0 && state.ended) return 0;
10967 if (state.objectMode) return 1;
10968 if (n !== n) {
10969 // Only flow one buffer at a time
10970 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
10971 }
10972 // If we're asking for more than the current hwm, then raise the hwm.
10973 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
10974 if (n <= state.length) return n;
10975 // Don't have enough
10976 if (!state.ended) {
10977 state.needReadable = true;
10978 return 0;
10979 }
10980 return state.length;
8b095871
IC
10981}
10982
9987f0c1
IC
10983// you can override either this method, or the async _read(n) below.
10984Readable.prototype.read = function (n) {
10985 debug('read', n);
10986 n = parseInt(n, 10);
10987 var state = this._readableState;
10988 var nOrig = n;
8b095871 10989
9987f0c1
IC
10990 if (n !== 0) state.emittedReadable = false;
10991
10992 // if we're doing read(0) to trigger a readable event, but we
10993 // already have a bunch of data in the buffer, then just trigger
10994 // the 'readable' event and move on.
10995 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
10996 debug('read: emitReadable', state.length, state.ended);
10997 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
10998 return null;
8b095871 10999 }
8b095871 11000
9987f0c1 11001 n = howMuchToRead(n, state);
8b095871 11002
9987f0c1
IC
11003 // if we've ended, and we're now clear, then finish it up.
11004 if (n === 0 && state.ended) {
11005 if (state.length === 0) endReadable(this);
11006 return null;
11007 }
8b095871 11008
9987f0c1
IC
11009 // All the actual chunk generation logic needs to be
11010 // *below* the call to _read. The reason is that in certain
11011 // synthetic stream cases, such as passthrough streams, _read
11012 // may be a completely synchronous operation which may change
11013 // the state of the read buffer, providing enough data when
11014 // before there was *not* enough.
11015 //
11016 // So, the steps are:
11017 // 1. Figure out what the state of things will be after we do
11018 // a read from the buffer.
11019 //
11020 // 2. If that resulting state will trigger a _read, then call _read.
11021 // Note that this may be asynchronous, or synchronous. Yes, it is
11022 // deeply ugly to write APIs this way, but that still doesn't mean
11023 // that the Readable class should behave improperly, as streams are
11024 // designed to be sync/async agnostic.
11025 // Take note if the _read call is sync or async (ie, if the read call
11026 // has returned yet), so that we know whether or not it's safe to emit
11027 // 'readable' etc.
11028 //
11029 // 3. Actually pull the requested chunks out of the buffer and return.
8b095871 11030
9987f0c1
IC
11031 // if we need a readable event, then we need to do some reading.
11032 var doRead = state.needReadable;
11033 debug('need readable', doRead);
8b095871 11034
9987f0c1
IC
11035 // if we currently have less than the highWaterMark, then also read some
11036 if (state.length === 0 || state.length - n < state.highWaterMark) {
11037 doRead = true;
11038 debug('length less than watermark', doRead);
11039 }
8b095871 11040
9987f0c1
IC
11041 // however, if we've ended, then there's no point, and if we're already
11042 // reading, then it's unnecessary.
11043 if (state.ended || state.reading) {
11044 doRead = false;
11045 debug('reading or ended', doRead);
11046 } else if (doRead) {
11047 debug('do read');
11048 state.reading = true;
11049 state.sync = true;
11050 // if the length is currently zero, then we *need* a readable event.
11051 if (state.length === 0) state.needReadable = true;
11052 // call internal read method
11053 this._read(state.highWaterMark);
11054 state.sync = false;
11055 // If _read pushed data synchronously, then `reading` will be false,
11056 // and we need to re-evaluate how much data we can return to the user.
11057 if (!state.reading) n = howMuchToRead(nOrig, state);
11058 }
8b095871 11059
9987f0c1
IC
11060 var ret;
11061 if (n > 0) ret = fromList(n, state);else ret = null;
8b095871 11062
9987f0c1
IC
11063 if (ret === null) {
11064 state.needReadable = true;
11065 n = 0;
11066 } else {
11067 state.length -= n;
11068 }
8b095871 11069
9987f0c1
IC
11070 if (state.length === 0) {
11071 // If we have nothing in the buffer, then we want to know
11072 // as soon as we *do* get something into the buffer.
11073 if (!state.ended) state.needReadable = true;
8b095871 11074
9987f0c1
IC
11075 // If we tried to read() past the EOF, then emit end on the next tick.
11076 if (nOrig !== n && state.ended) endReadable(this);
11077 }
8b095871 11078
9987f0c1 11079 if (ret !== null) this.emit('data', ret);
8b095871 11080
9987f0c1
IC
11081 return ret;
11082};
8b095871 11083
9987f0c1
IC
11084function onEofChunk(stream, state) {
11085 if (state.ended) return;
11086 if (state.decoder) {
11087 var chunk = state.decoder.end();
11088 if (chunk && chunk.length) {
11089 state.buffer.push(chunk);
11090 state.length += state.objectMode ? 1 : chunk.length;
11091 }
11092 }
11093 state.ended = true;
8b095871 11094
9987f0c1
IC
11095 // emit 'readable' now to make sure it gets picked up.
11096 emitReadable(stream);
8b095871
IC
11097}
11098
9987f0c1
IC
11099// Don't emit readable right away in sync mode, because this can trigger
11100// another read() call => stack overflow. This way, it might trigger
11101// a nextTick recursion warning, but that's not so bad.
11102function emitReadable(stream) {
11103 var state = stream._readableState;
11104 state.needReadable = false;
11105 if (!state.emittedReadable) {
11106 debug('emitReadable', state.flowing);
11107 state.emittedReadable = true;
11108 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
11109 }
8b095871
IC
11110}
11111
9987f0c1
IC
11112function emitReadable_(stream) {
11113 debug('emit readable');
11114 stream.emit('readable');
11115 flow(stream);
8b095871
IC
11116}
11117
9987f0c1
IC
11118// at this point, the user has presumably seen the 'readable' event,
11119// and called read() to consume some data. that may have triggered
11120// in turn another _read(n) call, in which case reading = true if
11121// it's in progress.
11122// However, if we're not ended, or reading, and the length < hwm,
11123// then go ahead and try to read some more preemptively.
11124function maybeReadMore(stream, state) {
11125 if (!state.readingMore) {
11126 state.readingMore = true;
11127 processNextTick(maybeReadMore_, stream, state);
11128 }
8b095871
IC
11129}
11130
9987f0c1
IC
11131function maybeReadMore_(stream, state) {
11132 var len = state.length;
11133 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
11134 debug('maybeReadMore read 0');
11135 stream.read(0);
11136 if (len === state.length)
11137 // didn't get any data, stop spinning.
11138 break;else len = state.length;
11139 }
11140 state.readingMore = false;
8b095871
IC
11141}
11142
9987f0c1
IC
11143// abstract method. to be overridden in specific implementation classes.
11144// call cb(er, data) where data is <= n in length.
11145// for virtual (non-string, non-buffer) streams, "length" is somewhat
11146// arbitrary, and perhaps not very meaningful.
11147Readable.prototype._read = function (n) {
11148 this.emit('error', new Error('_read() is not implemented'));
11149};
8b095871 11150
9987f0c1
IC
11151Readable.prototype.pipe = function (dest, pipeOpts) {
11152 var src = this;
11153 var state = this._readableState;
11154
11155 switch (state.pipesCount) {
11156 case 0:
11157 state.pipes = dest;
11158 break;
11159 case 1:
11160 state.pipes = [state.pipes, dest];
11161 break;
11162 default:
11163 state.pipes.push(dest);
11164 break;
8b095871 11165 }
9987f0c1
IC
11166 state.pipesCount += 1;
11167 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
8b095871 11168
9987f0c1 11169 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
8b095871 11170
9987f0c1
IC
11171 var endFn = doEnd ? onend : unpipe;
11172 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
8b095871 11173
9987f0c1
IC
11174 dest.on('unpipe', onunpipe);
11175 function onunpipe(readable, unpipeInfo) {
11176 debug('onunpipe');
11177 if (readable === src) {
11178 if (unpipeInfo && unpipeInfo.hasUnpiped === false) {
11179 unpipeInfo.hasUnpiped = true;
11180 cleanup();
11181 }
11182 }
8b095871
IC
11183 }
11184
9987f0c1
IC
11185 function onend() {
11186 debug('onend');
11187 dest.end();
11188 }
8b095871 11189
9987f0c1
IC
11190 // when the dest drains, it reduces the awaitDrain counter
11191 // on the source. This would be more elegant with a .once()
11192 // handler in flow(), but adding and removing repeatedly is
11193 // too slow.
11194 var ondrain = pipeOnDrain(src);
11195 dest.on('drain', ondrain);
8b095871 11196
9987f0c1
IC
11197 var cleanedUp = false;
11198 function cleanup() {
11199 debug('cleanup');
11200 // cleanup event handlers once the pipe is broken
11201 dest.removeListener('close', onclose);
11202 dest.removeListener('finish', onfinish);
11203 dest.removeListener('drain', ondrain);
11204 dest.removeListener('error', onerror);
11205 dest.removeListener('unpipe', onunpipe);
11206 src.removeListener('end', onend);
11207 src.removeListener('end', unpipe);
11208 src.removeListener('data', ondata);
8b095871 11209
9987f0c1
IC
11210 cleanedUp = true;
11211
11212 // if the reader is waiting for a drain event from this
11213 // specific writer, then it would cause it to never start
11214 // flowing again.
11215 // So, if this is awaiting a drain, then we just call it now.
11216 // If we don't know, then assume that we are waiting for one.
11217 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
8b095871 11218 }
8b095871 11219
9987f0c1
IC
11220 // If the user pushes more data while we're writing to dest then we'll end up
11221 // in ondata again. However, we only want to increase awaitDrain once because
11222 // dest will only emit one 'drain' event for the multiple writes.
11223 // => Introduce a guard on increasing awaitDrain.
11224 var increasedAwaitDrain = false;
11225 src.on('data', ondata);
11226 function ondata(chunk) {
11227 debug('ondata');
11228 increasedAwaitDrain = false;
11229 var ret = dest.write(chunk);
11230 if (false === ret && !increasedAwaitDrain) {
11231 // If the user unpiped during `dest.write()`, it is possible
11232 // to get stuck in a permanently paused state if that write
11233 // also returned false.
11234 // => Check whether `dest` is still a piping destination.
11235 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
11236 debug('false write response, pause', src._readableState.awaitDrain);
11237 src._readableState.awaitDrain++;
11238 increasedAwaitDrain = true;
11239 }
11240 src.pause();
11241 }
8b095871 11242 }
8b095871 11243
9987f0c1
IC
11244 // if the dest has an error, then stop piping into it.
11245 // however, don't suppress the throwing behavior for this.
11246 function onerror(er) {
11247 debug('onerror', er);
11248 unpipe();
11249 dest.removeListener('error', onerror);
11250 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
8b095871 11251 }
8b095871 11252
9987f0c1
IC
11253 // Make sure our error handler is attached before userland ones.
11254 prependListener(dest, 'error', onerror);
11255
11256 // Both close and finish should trigger unpipe, but only once.
11257 function onclose() {
11258 dest.removeListener('finish', onfinish);
11259 unpipe();
8b095871 11260 }
9987f0c1
IC
11261 dest.once('close', onclose);
11262 function onfinish() {
11263 debug('onfinish');
11264 dest.removeListener('close', onclose);
11265 unpipe();
11266 }
11267 dest.once('finish', onfinish);
8b095871 11268
9987f0c1
IC
11269 function unpipe() {
11270 debug('unpipe');
11271 src.unpipe(dest);
8b095871 11272 }
8b095871 11273
9987f0c1
IC
11274 // tell the dest that it's being piped to
11275 dest.emit('pipe', src);
8b095871 11276
9987f0c1
IC
11277 // start the flow if it hasn't been started already.
11278 if (!state.flowing) {
11279 debug('pipe resume');
11280 src.resume();
8b095871
IC
11281 }
11282
9987f0c1
IC
11283 return dest;
11284};
8b095871 11285
9987f0c1
IC
11286function pipeOnDrain(src) {
11287 return function () {
11288 var state = src._readableState;
11289 debug('pipeOnDrain', state.awaitDrain);
11290 if (state.awaitDrain) state.awaitDrain--;
11291 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
11292 state.flowing = true;
11293 flow(src);
11294 }
11295 };
8b095871
IC
11296}
11297
9987f0c1
IC
11298Readable.prototype.unpipe = function (dest) {
11299 var state = this._readableState;
11300 var unpipeInfo = { hasUnpiped: false };
8b095871 11301
9987f0c1
IC
11302 // if we're not piping anywhere, then do nothing.
11303 if (state.pipesCount === 0) return this;
8b095871 11304
9987f0c1
IC
11305 // just one destination. most common case.
11306 if (state.pipesCount === 1) {
11307 // passed in one, but it's not the right one.
11308 if (dest && dest !== state.pipes) return this;
11309
11310 if (!dest) dest = state.pipes;
11311
11312 // got a match.
11313 state.pipes = null;
11314 state.pipesCount = 0;
11315 state.flowing = false;
11316 if (dest) dest.emit('unpipe', this, unpipeInfo);
11317 return this;
8b095871
IC
11318 }
11319
9987f0c1 11320 // slow case. multiple pipe destinations.
8b095871 11321
9987f0c1
IC
11322 if (!dest) {
11323 // remove all.
11324 var dests = state.pipes;
11325 var len = state.pipesCount;
11326 state.pipes = null;
11327 state.pipesCount = 0;
11328 state.flowing = false;
8b095871 11329
9987f0c1
IC
11330 for (var i = 0; i < len; i++) {
11331 dests[i].emit('unpipe', this, unpipeInfo);
11332 }return this;
8b095871 11333 }
8b095871 11334
9987f0c1
IC
11335 // try to find the right one.
11336 var index = indexOf(state.pipes, dest);
11337 if (index === -1) return this;
8b095871 11338
9987f0c1
IC
11339 state.pipes.splice(index, 1);
11340 state.pipesCount -= 1;
11341 if (state.pipesCount === 1) state.pipes = state.pipes[0];
8b095871 11342
9987f0c1 11343 dest.emit('unpipe', this, unpipeInfo);
8b095871 11344
9987f0c1
IC
11345 return this;
11346};
8b095871 11347
9987f0c1
IC
11348// set up data events if they are asked for
11349// Ensure readable listeners eventually get something
11350Readable.prototype.on = function (ev, fn) {
11351 var res = Stream.prototype.on.call(this, ev, fn);
11352
11353 if (ev === 'data') {
11354 // Start flowing on next tick if stream isn't explicitly paused
11355 if (this._readableState.flowing !== false) this.resume();
11356 } else if (ev === 'readable') {
11357 var state = this._readableState;
11358 if (!state.endEmitted && !state.readableListening) {
11359 state.readableListening = state.needReadable = true;
11360 state.emittedReadable = false;
11361 if (!state.reading) {
11362 processNextTick(nReadingNextTick, this);
11363 } else if (state.length) {
11364 emitReadable(this);
11365 }
11366 }
8b095871 11367 }
8b095871 11368
9987f0c1
IC
11369 return res;
11370};
11371Readable.prototype.addListener = Readable.prototype.on;
8b095871 11372
9987f0c1
IC
11373function nReadingNextTick(self) {
11374 debug('readable nexttick read 0');
11375 self.read(0);
8b095871
IC
11376}
11377
9987f0c1
IC
11378// pause() and resume() are remnants of the legacy readable stream API
11379// If the user uses them, then switch into old mode.
11380Readable.prototype.resume = function () {
11381 var state = this._readableState;
11382 if (!state.flowing) {
11383 debug('resume');
11384 state.flowing = true;
11385 resume(this, state);
11386 }
11387 return this;
11388};
11389
11390function resume(stream, state) {
11391 if (!state.resumeScheduled) {
11392 state.resumeScheduled = true;
11393 processNextTick(resume_, stream, state);
8b095871 11394 }
8b095871
IC
11395}
11396
9987f0c1
IC
11397function resume_(stream, state) {
11398 if (!state.reading) {
11399 debug('resume read 0');
11400 stream.read(0);
11401 }
11402
11403 state.resumeScheduled = false;
11404 state.awaitDrain = 0;
11405 stream.emit('resume');
11406 flow(stream);
11407 if (state.flowing && !state.reading) stream.read(0);
8b095871
IC
11408}
11409
9987f0c1
IC
11410Readable.prototype.pause = function () {
11411 debug('call pause flowing=%j', this._readableState.flowing);
11412 if (false !== this._readableState.flowing) {
11413 debug('pause');
11414 this._readableState.flowing = false;
11415 this.emit('pause');
11416 }
11417 return this;
11418};
11419
11420function flow(stream) {
11421 var state = stream._readableState;
11422 debug('flow', state.flowing);
11423 while (state.flowing && stream.read() !== null) {}
8b095871
IC
11424}
11425
9987f0c1
IC
11426// wrap an old-style stream as the async data source.
11427// This is *not* part of the readable stream interface.
11428// It is an ugly unfortunate mess of history.
11429Readable.prototype.wrap = function (stream) {
11430 var state = this._readableState;
11431 var paused = false;
8b095871 11432
9987f0c1
IC
11433 var self = this;
11434 stream.on('end', function () {
11435 debug('wrapped end');
11436 if (state.decoder && !state.ended) {
11437 var chunk = state.decoder.end();
11438 if (chunk && chunk.length) self.push(chunk);
11439 }
8b095871 11440
9987f0c1
IC
11441 self.push(null);
11442 });
8b095871 11443
9987f0c1
IC
11444 stream.on('data', function (chunk) {
11445 debug('wrapped data');
11446 if (state.decoder) chunk = state.decoder.write(chunk);
8b095871 11447
9987f0c1
IC
11448 // don't skip over falsy values in objectMode
11449 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
8b095871 11450
9987f0c1
IC
11451 var ret = self.push(chunk);
11452 if (!ret) {
11453 paused = true;
11454 stream.pause();
8b095871 11455 }
9987f0c1
IC
11456 });
11457
11458 // proxy all the other methods.
11459 // important when wrapping filters and duplexes.
11460 for (var i in stream) {
11461 if (this[i] === undefined && typeof stream[i] === 'function') {
11462 this[i] = function (method) {
11463 return function () {
11464 return stream[method].apply(stream, arguments);
11465 };
11466 }(i);
8b095871 11467 }
8b095871
IC
11468 }
11469
9987f0c1
IC
11470 // proxy certain important events.
11471 for (var n = 0; n < kProxyEvents.length; n++) {
11472 stream.on(kProxyEvents[n], self.emit.bind(self, kProxyEvents[n]));
11473 }
8b095871 11474
9987f0c1
IC
11475 // when we try to consume some more bytes, simply unpause the
11476 // underlying stream.
11477 self._read = function (n) {
11478 debug('wrapped _read', n);
11479 if (paused) {
11480 paused = false;
11481 stream.resume();
11482 }
11483 };
8b095871 11484
9987f0c1
IC
11485 return self;
11486};
8b095871 11487
9987f0c1
IC
11488// exposed for testing purposes only.
11489Readable._fromList = fromList;
8b095871 11490
9987f0c1
IC
11491// Pluck off n bytes from an array of buffers.
11492// Length is the combined lengths of all the buffers in the list.
11493// This function is designed to be inlinable, so please take care when making
11494// changes to the function body.
11495function fromList(n, state) {
11496 // nothing buffered
11497 if (state.length === 0) return null;
8b095871 11498
9987f0c1
IC
11499 var ret;
11500 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
11501 // read it all, truncate the list
11502 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);
11503 state.buffer.clear();
8b095871 11504 } else {
9987f0c1
IC
11505 // read part of list
11506 ret = fromListPartial(n, state.buffer, state.decoder);
8b095871
IC
11507 }
11508
9987f0c1 11509 return ret;
8b095871
IC
11510}
11511
9987f0c1
IC
11512// Extracts only enough buffered data to satisfy the amount requested.
11513// This function is designed to be inlinable, so please take care when making
11514// changes to the function body.
11515function fromListPartial(n, list, hasStrings) {
11516 var ret;
11517 if (n < list.head.data.length) {
11518 // slice is the same for buffers and strings
11519 ret = list.head.data.slice(0, n);
11520 list.head.data = list.head.data.slice(n);
11521 } else if (n === list.head.data.length) {
11522 // first chunk is a perfect match
11523 ret = list.shift();
8b095871 11524 } else {
9987f0c1
IC
11525 // result spans more than one buffer
11526 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
8b095871 11527 }
9987f0c1 11528 return ret;
8b095871
IC
11529}
11530
9987f0c1
IC
11531// Copies a specified amount of characters from the list of buffered data
11532// chunks.
11533// This function is designed to be inlinable, so please take care when making
11534// changes to the function body.
11535function copyFromBufferString(n, list) {
11536 var p = list.head;
11537 var c = 1;
11538 var ret = p.data;
11539 n -= ret.length;
11540 while (p = p.next) {
11541 var str = p.data;
11542 var nb = n > str.length ? str.length : n;
11543 if (nb === str.length) ret += str;else ret += str.slice(0, n);
11544 n -= nb;
11545 if (n === 0) {
11546 if (nb === str.length) {
11547 ++c;
11548 if (p.next) list.head = p.next;else list.head = list.tail = null;
11549 } else {
11550 list.head = p;
11551 p.data = str.slice(nb);
11552 }
11553 break;
11554 }
11555 ++c;
8b095871 11556 }
9987f0c1
IC
11557 list.length -= c;
11558 return ret;
8b095871
IC
11559}
11560
9987f0c1
IC
11561// Copies a specified amount of bytes from the list of buffered data chunks.
11562// This function is designed to be inlinable, so please take care when making
11563// changes to the function body.
11564function copyFromBuffer(n, list) {
11565 var ret = Buffer.allocUnsafe(n);
11566 var p = list.head;
11567 var c = 1;
11568 p.data.copy(ret);
11569 n -= p.data.length;
11570 while (p = p.next) {
11571 var buf = p.data;
11572 var nb = n > buf.length ? buf.length : n;
11573 buf.copy(ret, ret.length - n, 0, nb);
11574 n -= nb;
11575 if (n === 0) {
11576 if (nb === buf.length) {
11577 ++c;
11578 if (p.next) list.head = p.next;else list.head = list.tail = null;
11579 } else {
11580 list.head = p;
11581 p.data = buf.slice(nb);
8b095871 11582 }
9987f0c1 11583 break;
8b095871 11584 }
9987f0c1 11585 ++c;
8b095871 11586 }
9987f0c1
IC
11587 list.length -= c;
11588 return ret;
8b095871
IC
11589}
11590
9987f0c1
IC
11591function endReadable(stream) {
11592 var state = stream._readableState;
8b095871 11593
9987f0c1
IC
11594 // If we get here before consuming all the bytes, then that is a
11595 // bug in node. Should never happen.
11596 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
8b095871 11597
9987f0c1
IC
11598 if (!state.endEmitted) {
11599 state.ended = true;
11600 processNextTick(endReadableNT, state, stream);
8b095871 11601 }
9987f0c1 11602}
8b095871 11603
9987f0c1
IC
11604function endReadableNT(state, stream) {
11605 // Check that we didn't get one last unshift.
11606 if (!state.endEmitted && state.length === 0) {
11607 state.endEmitted = true;
11608 stream.readable = false;
11609 stream.emit('end');
11610 }
8b095871
IC
11611}
11612
9987f0c1
IC
11613function forEach(xs, f) {
11614 for (var i = 0, l = xs.length; i < l; i++) {
11615 f(xs[i], i);
11616 }
8b095871
IC
11617}
11618
9987f0c1
IC
11619function indexOf(xs, x) {
11620 for (var i = 0, l = xs.length; i < l; i++) {
11621 if (xs[i] === x) return i;
8b095871 11622 }
9987f0c1 11623 return -1;
8b095871 11624}
9987f0c1
IC
11625}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
11626},{"./_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){
11627// Copyright Joyent, Inc. and other Node contributors.
11628//
11629// Permission is hereby granted, free of charge, to any person obtaining a
11630// copy of this software and associated documentation files (the
11631// "Software"), to deal in the Software without restriction, including
11632// without limitation the rights to use, copy, modify, merge, publish,
11633// distribute, sublicense, and/or sell copies of the Software, and to permit
11634// persons to whom the Software is furnished to do so, subject to the
11635// following conditions:
11636//
11637// The above copyright notice and this permission notice shall be included
11638// in all copies or substantial portions of the Software.
11639//
11640// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11641// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
11642// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
11643// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
11644// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
11645// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
11646// USE OR OTHER DEALINGS IN THE SOFTWARE.
8b095871 11647
9987f0c1
IC
11648// a transform stream is a readable/writable stream where you do
11649// something with the data. Sometimes it's called a "filter",
11650// but that's not a great name for it, since that implies a thing where
11651// some bits pass through, and others are simply ignored. (That would
11652// be a valid example of a transform, of course.)
11653//
11654// While the output is causally related to the input, it's not a
11655// necessarily symmetric or synchronous transformation. For example,
11656// a zlib stream might take multiple plain-text writes(), and then
11657// emit a single compressed chunk some time in the future.
11658//
11659// Here's how this works:
11660//
11661// The Transform stream has all the aspects of the readable and writable
11662// stream classes. When you write(chunk), that calls _write(chunk,cb)
11663// internally, and returns false if there's a lot of pending writes
11664// buffered up. When you call read(), that calls _read(n) until
11665// there's enough pending readable data buffered up.
11666//
11667// In a transform stream, the written data is placed in a buffer. When
11668// _read(n) is called, it transforms the queued up data, calling the
11669// buffered _write cb's as it consumes chunks. If consuming a single
11670// written chunk would result in multiple output chunks, then the first
11671// outputted bit calls the readcb, and subsequent chunks just go into
11672// the read buffer, and will cause it to emit 'readable' if necessary.
11673//
11674// This way, back-pressure is actually determined by the reading side,
11675// since _read has to be called to start processing a new chunk. However,
11676// a pathological inflate type of transform can cause excessive buffering
11677// here. For example, imagine a stream where every byte of input is
11678// interpreted as an integer from 0-255, and then results in that many
11679// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
11680// 1kb of data being output. In this case, you could write a very small
11681// amount of input, and end up with a very large amount of output. In
11682// such a pathological inflating mechanism, there'd be no way to tell
11683// the system to stop doing the transform. A single 4MB write could
11684// cause the system to run out of memory.
11685//
11686// However, even in such a pathological case, only a single written chunk
11687// would be consumed, and then the rest would wait (un-transformed) until
11688// the results of the previous transformed chunk were consumed.
8b095871 11689
9987f0c1 11690'use strict';
8b095871 11691
9987f0c1 11692module.exports = Transform;
8b095871 11693
9987f0c1 11694var Duplex = require('./_stream_duplex');
8b095871 11695
9987f0c1
IC
11696/*<replacement>*/
11697var util = require('core-util-is');
11698util.inherits = require('inherits');
11699/*</replacement>*/
8b095871 11700
9987f0c1 11701util.inherits(Transform, Duplex);
8b095871 11702
9987f0c1
IC
11703function TransformState(stream) {
11704 this.afterTransform = function (er, data) {
11705 return afterTransform(stream, er, data);
11706 };
8b095871 11707
9987f0c1
IC
11708 this.needTransform = false;
11709 this.transforming = false;
11710 this.writecb = null;
11711 this.writechunk = null;
11712 this.writeencoding = null;
11713}
8b095871 11714
9987f0c1
IC
11715function afterTransform(stream, er, data) {
11716 var ts = stream._transformState;
11717 ts.transforming = false;
8b095871 11718
9987f0c1 11719 var cb = ts.writecb;
8b095871 11720
9987f0c1
IC
11721 if (!cb) {
11722 return stream.emit('error', new Error('write callback called multiple times'));
11723 }
8b095871 11724
9987f0c1
IC
11725 ts.writechunk = null;
11726 ts.writecb = null;
8b095871 11727
9987f0c1 11728 if (data !== null && data !== undefined) stream.push(data);
8b095871 11729
9987f0c1 11730 cb(er);
8b095871 11731
9987f0c1
IC
11732 var rs = stream._readableState;
11733 rs.reading = false;
11734 if (rs.needReadable || rs.length < rs.highWaterMark) {
11735 stream._read(rs.highWaterMark);
11736 }
11737}
8b095871 11738
9987f0c1
IC
11739function Transform(options) {
11740 if (!(this instanceof Transform)) return new Transform(options);
8b095871 11741
9987f0c1 11742 Duplex.call(this, options);
8b095871 11743
9987f0c1 11744 this._transformState = new TransformState(this);
8b095871 11745
9987f0c1 11746 var stream = this;
8b095871 11747
9987f0c1
IC
11748 // start out asking for a readable event once data is transformed.
11749 this._readableState.needReadable = true;
8b095871 11750
9987f0c1
IC
11751 // we have implemented the _read method, and done the other things
11752 // that Readable wants before the first _read call, so unset the
11753 // sync guard flag.
11754 this._readableState.sync = false;
8b095871 11755
9987f0c1
IC
11756 if (options) {
11757 if (typeof options.transform === 'function') this._transform = options.transform;
8b095871 11758
9987f0c1 11759 if (typeof options.flush === 'function') this._flush = options.flush;
8b095871 11760 }
8b095871 11761
9987f0c1
IC
11762 // When the writable side finishes, then flush out anything remaining.
11763 this.once('prefinish', function () {
11764 if (typeof this._flush === 'function') this._flush(function (er, data) {
11765 done(stream, er, data);
11766 });else done(stream);
11767 });
11768}
8b095871 11769
9987f0c1
IC
11770Transform.prototype.push = function (chunk, encoding) {
11771 this._transformState.needTransform = false;
11772 return Duplex.prototype.push.call(this, chunk, encoding);
11773};
8b095871 11774
9987f0c1
IC
11775// This is the part where you do stuff!
11776// override this function in implementation classes.
11777// 'chunk' is an input chunk.
11778//
11779// Call `push(newChunk)` to pass along transformed output
11780// to the readable side. You may call 'push' zero or more times.
11781//
11782// Call `cb(err)` when you are done with this chunk. If you pass
11783// an error, then that'll put the hurt on the whole operation. If you
11784// never call cb(), then you'll never get another chunk.
11785Transform.prototype._transform = function (chunk, encoding, cb) {
11786 throw new Error('_transform() is not implemented');
11787};
8b095871 11788
9987f0c1
IC
11789Transform.prototype._write = function (chunk, encoding, cb) {
11790 var ts = this._transformState;
11791 ts.writecb = cb;
11792 ts.writechunk = chunk;
11793 ts.writeencoding = encoding;
11794 if (!ts.transforming) {
11795 var rs = this._readableState;
11796 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
8b095871 11797 }
9987f0c1 11798};
8b095871 11799
9987f0c1
IC
11800// Doesn't matter what the args are here.
11801// _transform does all the work.
11802// That we got here means that the readable side wants more data.
11803Transform.prototype._read = function (n) {
11804 var ts = this._transformState;
8b095871 11805
9987f0c1
IC
11806 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
11807 ts.transforming = true;
11808 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
11809 } else {
11810 // mark that we need a transform, so that any data that comes in
11811 // will get processed, now that we've asked for it.
11812 ts.needTransform = true;
11813 }
11814};
8b095871 11815
9987f0c1
IC
11816Transform.prototype._destroy = function (err, cb) {
11817 var _this = this;
8b095871 11818
9987f0c1
IC
11819 Duplex.prototype._destroy.call(this, err, function (err2) {
11820 cb(err2);
11821 _this.emit('close');
11822 });
11823};
8b095871 11824
9987f0c1
IC
11825function done(stream, er, data) {
11826 if (er) return stream.emit('error', er);
8b095871 11827
9987f0c1 11828 if (data !== null && data !== undefined) stream.push(data);
8b095871 11829
9987f0c1
IC
11830 // if there's nothing in the write buffer, then that means
11831 // that nothing more will ever be provided
11832 var ws = stream._writableState;
11833 var ts = stream._transformState;
8b095871 11834
9987f0c1 11835 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
8b095871 11836
9987f0c1
IC
11837 if (ts.transforming) throw new Error('Calling transform done when still transforming');
11838
11839 return stream.push(null);
11840}
11841},{"./_stream_duplex":14,"core-util-is":5,"inherits":8}],18:[function(require,module,exports){
11842(function (process,global){
8b095871
IC
11843// Copyright Joyent, Inc. and other Node contributors.
11844//
11845// Permission is hereby granted, free of charge, to any person obtaining a
11846// copy of this software and associated documentation files (the
11847// "Software"), to deal in the Software without restriction, including
11848// without limitation the rights to use, copy, modify, merge, publish,
11849// distribute, sublicense, and/or sell copies of the Software, and to permit
11850// persons to whom the Software is furnished to do so, subject to the
11851// following conditions:
11852//
11853// The above copyright notice and this permission notice shall be included
11854// in all copies or substantial portions of the Software.
11855//
11856// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11857// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
11858// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
11859// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
11860// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
11861// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
11862// USE OR OTHER DEALINGS IN THE SOFTWARE.
11863
9987f0c1
IC
11864// A bit simpler than readable streams.
11865// Implement an async ._write(chunk, encoding, cb), and it'll handle all
11866// the drain event emission and buffering.
11867
11868'use strict';
11869
11870/*<replacement>*/
11871
11872var processNextTick = require('process-nextick-args');
11873/*</replacement>*/
11874
11875module.exports = Writable;
11876
11877/* <replacement> */
11878function WriteReq(chunk, encoding, cb) {
11879 this.chunk = chunk;
11880 this.encoding = encoding;
11881 this.callback = cb;
11882 this.next = null;
8b095871 11883}
8b095871 11884
9987f0c1
IC
11885// It seems a linked list but it is not
11886// there will be only 2 of these for each stream
11887function CorkedRequest(state) {
11888 var _this = this;
8b095871 11889
9987f0c1
IC
11890 this.next = null;
11891 this.entry = null;
11892 this.finish = function () {
11893 onCorkedFinish(_this, state);
11894 };
11895}
11896/* </replacement> */
8b095871 11897
9987f0c1
IC
11898/*<replacement>*/
11899var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
11900/*</replacement>*/
8b095871 11901
9987f0c1
IC
11902/*<replacement>*/
11903var Duplex;
11904/*</replacement>*/
11905
11906Writable.WritableState = WritableState;
11907
11908/*<replacement>*/
11909var util = require('core-util-is');
11910util.inherits = require('inherits');
11911/*</replacement>*/
11912
11913/*<replacement>*/
11914var internalUtil = {
11915 deprecate: require('util-deprecate')
8b095871 11916};
9987f0c1 11917/*</replacement>*/
8b095871 11918
9987f0c1
IC
11919/*<replacement>*/
11920var Stream = require('./internal/streams/stream');
11921/*</replacement>*/
8b095871 11922
9987f0c1
IC
11923/*<replacement>*/
11924var Buffer = require('safe-buffer').Buffer;
11925var OurUint8Array = global.Uint8Array || function () {};
11926function _uint8ArrayToBuffer(chunk) {
11927 return Buffer.from(chunk);
11928}
11929function _isUint8Array(obj) {
11930 return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
11931}
11932/*</replacement>*/
8b095871 11933
9987f0c1 11934var destroyImpl = require('./internal/streams/destroy');
8b095871 11935
9987f0c1 11936util.inherits(Writable, Stream);
8b095871 11937
9987f0c1 11938function nop() {}
8b095871 11939
9987f0c1
IC
11940function WritableState(options, stream) {
11941 Duplex = Duplex || require('./_stream_duplex');
8b095871 11942
9987f0c1 11943 options = options || {};
8b095871 11944
9987f0c1
IC
11945 // object stream flag to indicate whether or not this stream
11946 // contains buffers or objects.
11947 this.objectMode = !!options.objectMode;
8b095871 11948
9987f0c1 11949 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
8b095871 11950
9987f0c1
IC
11951 // the point at which write() starts returning false
11952 // Note: 0 is a valid value, means that we always return false if
11953 // the entire buffer is not flushed immediately on write()
11954 var hwm = options.highWaterMark;
11955 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
11956 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
8b095871 11957
9987f0c1
IC
11958 // cast to ints.
11959 this.highWaterMark = Math.floor(this.highWaterMark);
8b095871 11960
9987f0c1
IC
11961 // if _final has been called
11962 this.finalCalled = false;
8b095871 11963
9987f0c1
IC
11964 // drain event flag.
11965 this.needDrain = false;
11966 // at the start of calling end()
11967 this.ending = false;
11968 // when end() has been called, and returned
11969 this.ended = false;
11970 // when 'finish' is emitted
11971 this.finished = false;
8b095871 11972
9987f0c1
IC
11973 // has it been destroyed
11974 this.destroyed = false;
8b095871 11975
9987f0c1
IC
11976 // should we decode strings into buffers before passing to _write?
11977 // this is here so that some node-core streams can optimize string
11978 // handling at a lower level.
11979 var noDecode = options.decodeStrings === false;
11980 this.decodeStrings = !noDecode;
8b095871 11981
9987f0c1
IC
11982 // Crypto is kind of old and crusty. Historically, its default string
11983 // encoding is 'binary' so we have to make this configurable.
11984 // Everything else in the universe uses 'utf8', though.
11985 this.defaultEncoding = options.defaultEncoding || 'utf8';
8b095871 11986
9987f0c1
IC
11987 // not an actual buffer we keep track of, but a measurement
11988 // of how much we're waiting to get pushed to some underlying
11989 // socket or file.
11990 this.length = 0;
8b095871 11991
9987f0c1
IC
11992 // a flag to see when we're in the middle of a write.
11993 this.writing = false;
8b095871 11994
9987f0c1
IC
11995 // when true all writes will be buffered until .uncork() call
11996 this.corked = 0;
8b095871 11997
9987f0c1
IC
11998 // a flag to be able to tell if the onwrite cb is called immediately,
11999 // or on a later tick. We set this to true at first, because any
12000 // actions that shouldn't happen until "later" should generally also
12001 // not happen before the first write call.
12002 this.sync = true;
8b095871 12003
9987f0c1
IC
12004 // a flag to know if we're processing previously buffered items, which
12005 // may call the _write() callback in the same tick, so that we don't
12006 // end up in an overlapped onwrite situation.
12007 this.bufferProcessing = false;
8b095871 12008
9987f0c1
IC
12009 // the callback that's passed to _write(chunk,cb)
12010 this.onwrite = function (er) {
12011 onwrite(stream, er);
12012 };
8b095871 12013
9987f0c1
IC
12014 // the callback that the user supplies to write(chunk,encoding,cb)
12015 this.writecb = null;
8b095871 12016
9987f0c1
IC
12017 // the amount that is being written when _write is called.
12018 this.writelen = 0;
8b095871 12019
9987f0c1
IC
12020 this.bufferedRequest = null;
12021 this.lastBufferedRequest = null;
8b095871 12022
9987f0c1
IC
12023 // number of pending user-supplied write callbacks
12024 // this must be 0 before 'finish' can be emitted
12025 this.pendingcb = 0;
8b095871 12026
9987f0c1
IC
12027 // emit prefinish if the only thing we're waiting for is _write cbs
12028 // This is relevant for synchronous Transform streams
12029 this.prefinished = false;
8b095871 12030
9987f0c1
IC
12031 // True if the error was already emitted and should not be thrown again
12032 this.errorEmitted = false;
8b095871 12033
9987f0c1
IC
12034 // count buffered requests
12035 this.bufferedRequestCount = 0;
8b095871 12036
9987f0c1
IC
12037 // allocate the first CorkedRequest, there is always
12038 // one allocated and free to use, and we maintain at most two
12039 this.corkedRequestsFree = new CorkedRequest(this);
12040}
8b095871 12041
9987f0c1
IC
12042WritableState.prototype.getBuffer = function getBuffer() {
12043 var current = this.bufferedRequest;
12044 var out = [];
12045 while (current) {
12046 out.push(current);
12047 current = current.next;
12048 }
12049 return out;
12050};
12051
12052(function () {
12053 try {
12054 Object.defineProperty(WritableState.prototype, 'buffer', {
12055 get: internalUtil.deprecate(function () {
12056 return this.getBuffer();
12057 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')
12058 });
12059 } catch (_) {}
12060})();
12061
12062// Test _writableState for inheritance to account for Duplex streams,
12063// whose prototype chain only points to Readable.
12064var realHasInstance;
12065if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
12066 realHasInstance = Function.prototype[Symbol.hasInstance];
12067 Object.defineProperty(Writable, Symbol.hasInstance, {
12068 value: function (object) {
12069 if (realHasInstance.call(this, object)) return true;
12070
12071 return object && object._writableState instanceof WritableState;
8b095871 12072 }
9987f0c1
IC
12073 });
12074} else {
12075 realHasInstance = function (object) {
12076 return object instanceof this;
12077 };
12078}
8b095871 12079
9987f0c1
IC
12080function Writable(options) {
12081 Duplex = Duplex || require('./_stream_duplex');
12082
12083 // Writable ctor is applied to Duplexes, too.
12084 // `realHasInstance` is necessary because using plain `instanceof`
12085 // would return false, as no `_writableState` property is attached.
12086
12087 // Trying to use the custom `instanceof` for Writable here will also break the
12088 // Node.js LazyTransform implementation, which has a non-trivial getter for
12089 // `_writableState` that would lead to infinite recursion.
12090 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
12091 return new Writable(options);
8b095871
IC
12092 }
12093
9987f0c1
IC
12094 this._writableState = new WritableState(options, this);
12095
12096 // legacy.
12097 this.writable = true;
12098
12099 if (options) {
12100 if (typeof options.write === 'function') this._write = options.write;
12101
12102 if (typeof options.writev === 'function') this._writev = options.writev;
12103
12104 if (typeof options.destroy === 'function') this._destroy = options.destroy;
12105
12106 if (typeof options.final === 'function') this._final = options.final;
12107 }
12108
12109 Stream.call(this);
12110}
12111
12112// Otherwise people can pipe Writable streams, which is just wrong.
12113Writable.prototype.pipe = function () {
12114 this.emit('error', new Error('Cannot pipe, not readable'));
8b095871
IC
12115};
12116
9987f0c1
IC
12117function writeAfterEnd(stream, cb) {
12118 var er = new Error('write after end');
12119 // TODO: defer error events consistently everywhere, not just the cb
12120 stream.emit('error', er);
12121 processNextTick(cb, er);
12122}
8b095871 12123
9987f0c1
IC
12124// Checks that a user-supplied chunk is valid, especially for the particular
12125// mode the stream is in. Currently this means that `null` is never accepted
12126// and undefined/non-string values are only allowed in object mode.
12127function validChunk(stream, state, chunk, cb) {
12128 var valid = true;
12129 var er = false;
8b095871 12130
9987f0c1
IC
12131 if (chunk === null) {
12132 er = new TypeError('May not write null values to stream');
12133 } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
12134 er = new TypeError('Invalid non-string/buffer chunk');
12135 }
12136 if (er) {
12137 stream.emit('error', er);
12138 processNextTick(cb, er);
12139 valid = false;
8b095871 12140 }
9987f0c1
IC
12141 return valid;
12142}
8b095871 12143
9987f0c1
IC
12144Writable.prototype.write = function (chunk, encoding, cb) {
12145 var state = this._writableState;
12146 var ret = false;
12147 var isBuf = _isUint8Array(chunk) && !state.objectMode;
12148
12149 if (isBuf && !Buffer.isBuffer(chunk)) {
12150 chunk = _uint8ArrayToBuffer(chunk);
8b095871
IC
12151 }
12152
9987f0c1
IC
12153 if (typeof encoding === 'function') {
12154 cb = encoding;
12155 encoding = null;
12156 }
8b095871 12157
9987f0c1
IC
12158 if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
12159
12160 if (typeof cb !== 'function') cb = nop;
12161
12162 if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
12163 state.pendingcb++;
12164 ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
8b095871 12165 }
8b095871 12166
9987f0c1 12167 return ret;
8b095871
IC
12168};
12169
9987f0c1
IC
12170Writable.prototype.cork = function () {
12171 var state = this._writableState;
12172
12173 state.corked++;
8b095871
IC
12174};
12175
9987f0c1
IC
12176Writable.prototype.uncork = function () {
12177 var state = this._writableState;
12178
12179 if (state.corked) {
12180 state.corked--;
12181
12182 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
12183 }
8b095871
IC
12184};
12185
9987f0c1
IC
12186Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
12187 // node::ParseEncoding() requires lower case.
12188 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
12189 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);
12190 this._writableState.defaultEncoding = encoding;
12191 return this;
12192};
8b095871 12193
9987f0c1
IC
12194function decodeChunk(state, chunk, encoding) {
12195 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
12196 chunk = Buffer.from(chunk, encoding);
12197 }
12198 return chunk;
8b095871
IC
12199}
12200
9987f0c1
IC
12201// if we're already writing something, then just put this
12202// in the queue, and wait our turn. Otherwise, call _write
12203// If we return false, then we need a drain event, so set that flag.
12204function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
12205 if (!isBuf) {
12206 var newChunk = decodeChunk(state, chunk, encoding);
12207 if (chunk !== newChunk) {
12208 isBuf = true;
12209 encoding = 'buffer';
12210 chunk = newChunk;
12211 }
12212 }
12213 var len = state.objectMode ? 1 : chunk.length;
8b095871 12214
9987f0c1 12215 state.length += len;
8b095871 12216
9987f0c1
IC
12217 var ret = state.length < state.highWaterMark;
12218 // we must ensure that previous needDrain will not be reset to false.
12219 if (!ret) state.needDrain = true;
12220
12221 if (state.writing || state.corked) {
12222 var last = state.lastBufferedRequest;
12223 state.lastBufferedRequest = {
12224 chunk: chunk,
12225 encoding: encoding,
12226 isBuf: isBuf,
12227 callback: cb,
12228 next: null
12229 };
12230 if (last) {
12231 last.next = state.lastBufferedRequest;
12232 } else {
12233 state.bufferedRequest = state.lastBufferedRequest;
12234 }
12235 state.bufferedRequestCount += 1;
12236 } else {
12237 doWrite(stream, state, false, len, chunk, encoding, cb);
8b095871 12238 }
9987f0c1
IC
12239
12240 return ret;
8b095871
IC
12241}
12242
9987f0c1
IC
12243function doWrite(stream, state, writev, len, chunk, encoding, cb) {
12244 state.writelen = len;
12245 state.writecb = cb;
12246 state.writing = true;
12247 state.sync = true;
12248 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
12249 state.sync = false;
12250}
8b095871 12251
9987f0c1
IC
12252function onwriteError(stream, state, sync, er, cb) {
12253 --state.pendingcb;
8b095871 12254
9987f0c1
IC
12255 if (sync) {
12256 // defer the callback if we are being called synchronously
12257 // to avoid piling up things on the stack
12258 processNextTick(cb, er);
12259 // this can emit finish, and it will always happen
12260 // after error
12261 processNextTick(finishMaybe, stream, state);
12262 stream._writableState.errorEmitted = true;
12263 stream.emit('error', er);
12264 } else {
12265 // the caller expect this to happen before if
12266 // it is async
12267 cb(er);
12268 stream._writableState.errorEmitted = true;
12269 stream.emit('error', er);
12270 // this can emit finish, but finish must
12271 // always follow error
12272 finishMaybe(stream, state);
12273 }
12274}
8b095871 12275
9987f0c1
IC
12276function onwriteStateUpdate(state) {
12277 state.writing = false;
12278 state.writecb = null;
12279 state.length -= state.writelen;
12280 state.writelen = 0;
8b095871
IC
12281}
12282
9987f0c1
IC
12283function onwrite(stream, er) {
12284 var state = stream._writableState;
12285 var sync = state.sync;
12286 var cb = state.writecb;
8b095871 12287
9987f0c1 12288 onwriteStateUpdate(state);
8b095871 12289
9987f0c1
IC
12290 if (er) onwriteError(stream, state, sync, er, cb);else {
12291 // Check if we're actually ready to finish, but don't emit yet
12292 var finished = needFinish(state);
12293
12294 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
12295 clearBuffer(stream, state);
8b095871 12296 }
9987f0c1
IC
12297
12298 if (sync) {
12299 /*<replacement>*/
12300 asyncWrite(afterWrite, stream, state, finished, cb);
12301 /*</replacement>*/
12302 } else {
12303 afterWrite(stream, state, finished, cb);
8b095871 12304 }
9987f0c1
IC
12305 }
12306}
8b095871 12307
9987f0c1
IC
12308function afterWrite(stream, state, finished, cb) {
12309 if (!finished) onwriteDrain(stream, state);
12310 state.pendingcb--;
12311 cb();
12312 finishMaybe(stream, state);
8b095871 12313}
8b095871 12314
9987f0c1
IC
12315// Must force callback to be called on nextTick, so that we don't
12316// emit 'drain' before the write() consumer gets the 'false' return
12317// value, and has a chance to attach a 'drain' listener.
12318function onwriteDrain(stream, state) {
12319 if (state.length === 0 && state.needDrain) {
12320 state.needDrain = false;
12321 stream.emit('drain');
12322 }
12323}
8b095871 12324
9987f0c1
IC
12325// if there's something in the buffer waiting, then process it
12326function clearBuffer(stream, state) {
12327 state.bufferProcessing = true;
12328 var entry = state.bufferedRequest;
8b095871 12329
9987f0c1
IC
12330 if (stream._writev && entry && entry.next) {
12331 // Fast case, write everything using _writev()
12332 var l = state.bufferedRequestCount;
12333 var buffer = new Array(l);
12334 var holder = state.corkedRequestsFree;
12335 holder.entry = entry;
8b095871 12336
9987f0c1
IC
12337 var count = 0;
12338 var allBuffers = true;
12339 while (entry) {
12340 buffer[count] = entry;
12341 if (!entry.isBuf) allBuffers = false;
12342 entry = entry.next;
12343 count += 1;
12344 }
12345 buffer.allBuffers = allBuffers;
8b095871 12346
9987f0c1 12347 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
8b095871 12348
9987f0c1
IC
12349 // doWrite is almost always async, defer these to save a bit of time
12350 // as the hot path ends with doWrite
12351 state.pendingcb++;
12352 state.lastBufferedRequest = null;
12353 if (holder.next) {
12354 state.corkedRequestsFree = holder.next;
12355 holder.next = null;
12356 } else {
12357 state.corkedRequestsFree = new CorkedRequest(state);
12358 }
12359 } else {
12360 // Slow case, write chunks one-by-one
12361 while (entry) {
12362 var chunk = entry.chunk;
12363 var encoding = entry.encoding;
12364 var cb = entry.callback;
12365 var len = state.objectMode ? 1 : chunk.length;
8b095871 12366
9987f0c1
IC
12367 doWrite(stream, state, false, len, chunk, encoding, cb);
12368 entry = entry.next;
12369 // if we didn't call the onwrite immediately, then
12370 // it means that we need to wait until it does.
12371 // also, that means that the chunk and cb are currently
12372 // being processed, so move the buffer counter past them.
12373 if (state.writing) {
12374 break;
12375 }
12376 }
8b095871 12377
9987f0c1
IC
12378 if (entry === null) state.lastBufferedRequest = null;
12379 }
8b095871 12380
9987f0c1
IC
12381 state.bufferedRequestCount = 0;
12382 state.bufferedRequest = entry;
12383 state.bufferProcessing = false;
8b095871 12384}
8b095871 12385
9987f0c1
IC
12386Writable.prototype._write = function (chunk, encoding, cb) {
12387 cb(new Error('_write() is not implemented'));
12388};
8b095871 12389
9987f0c1 12390Writable.prototype._writev = null;
8b095871 12391
9987f0c1
IC
12392Writable.prototype.end = function (chunk, encoding, cb) {
12393 var state = this._writableState;
8b095871 12394
9987f0c1
IC
12395 if (typeof chunk === 'function') {
12396 cb = chunk;
12397 chunk = null;
12398 encoding = null;
12399 } else if (typeof encoding === 'function') {
12400 cb = encoding;
12401 encoding = null;
12402 }
8b095871 12403
9987f0c1 12404 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
8b095871 12405
9987f0c1
IC
12406 // .end() fully uncorks
12407 if (state.corked) {
12408 state.corked = 1;
12409 this.uncork();
12410 }
8b095871 12411
9987f0c1
IC
12412 // ignore unnecessary end() calls.
12413 if (!state.ending && !state.finished) endWritable(this, state, cb);
12414};
8b095871 12415
9987f0c1
IC
12416function needFinish(state) {
12417 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
12418}
12419function callFinal(stream, state) {
12420 stream._final(function (err) {
12421 state.pendingcb--;
12422 if (err) {
12423 stream.emit('error', err);
12424 }
12425 state.prefinished = true;
12426 stream.emit('prefinish');
12427 finishMaybe(stream, state);
12428 });
12429}
12430function prefinish(stream, state) {
12431 if (!state.prefinished && !state.finalCalled) {
12432 if (typeof stream._final === 'function') {
12433 state.pendingcb++;
12434 state.finalCalled = true;
12435 processNextTick(callFinal, stream, state);
12436 } else {
12437 state.prefinished = true;
12438 stream.emit('prefinish');
12439 }
12440 }
8b095871
IC
12441}
12442
9987f0c1
IC
12443function finishMaybe(stream, state) {
12444 var need = needFinish(state);
12445 if (need) {
12446 prefinish(stream, state);
12447 if (state.pendingcb === 0) {
12448 state.finished = true;
12449 stream.emit('finish');
12450 }
12451 }
12452 return need;
8b095871
IC
12453}
12454
9987f0c1
IC
12455function endWritable(stream, state, cb) {
12456 state.ending = true;
12457 finishMaybe(stream, state);
12458 if (cb) {
12459 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
8b095871 12460 }
9987f0c1
IC
12461 state.ended = true;
12462 stream.writable = false;
8b095871
IC
12463}
12464
9987f0c1
IC
12465function onCorkedFinish(corkReq, state, err) {
12466 var entry = corkReq.entry;
12467 corkReq.entry = null;
12468 while (entry) {
12469 var cb = entry.callback;
12470 state.pendingcb--;
12471 cb(err);
12472 entry = entry.next;
12473 }
12474 if (state.corkedRequestsFree) {
12475 state.corkedRequestsFree.next = corkReq;
12476 } else {
12477 state.corkedRequestsFree = corkReq;
12478 }
12479}
8b095871 12480
9987f0c1
IC
12481Object.defineProperty(Writable.prototype, 'destroyed', {
12482 get: function () {
12483 if (this._writableState === undefined) {
12484 return false;
12485 }
12486 return this._writableState.destroyed;
12487 },
12488 set: function (value) {
12489 // we ignore the value if the stream
12490 // has not been initialized yet
12491 if (!this._writableState) {
12492 return;
12493 }
8b095871 12494
9987f0c1
IC
12495 // backward compatibility, the user is explicitly
12496 // managing destroyed
12497 this._writableState.destroyed = value;
12498 }
12499});
8b095871 12500
9987f0c1
IC
12501Writable.prototype.destroy = destroyImpl.destroy;
12502Writable.prototype._undestroy = destroyImpl.undestroy;
12503Writable.prototype._destroy = function (err, cb) {
12504 this.end();
12505 cb(err);
12506};
12507}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
12508},{"./_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){
12509'use strict';
8b095871
IC
12510
12511/*<replacement>*/
8b095871 12512
9987f0c1 12513function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
8b095871 12514
9987f0c1
IC
12515var Buffer = require('safe-buffer').Buffer;
12516/*</replacement>*/
8b095871 12517
9987f0c1
IC
12518function copyBuffer(src, target, offset) {
12519 src.copy(target, offset);
8b095871
IC
12520}
12521
9987f0c1
IC
12522module.exports = function () {
12523 function BufferList() {
12524 _classCallCheck(this, BufferList);
8b095871 12525
9987f0c1
IC
12526 this.head = null;
12527 this.tail = null;
12528 this.length = 0;
12529 }
8b095871 12530
9987f0c1
IC
12531 BufferList.prototype.push = function push(v) {
12532 var entry = { data: v, next: null };
12533 if (this.length > 0) this.tail.next = entry;else this.head = entry;
12534 this.tail = entry;
12535 ++this.length;
12536 };
8b095871 12537
9987f0c1
IC
12538 BufferList.prototype.unshift = function unshift(v) {
12539 var entry = { data: v, next: this.head };
12540 if (this.length === 0) this.tail = entry;
12541 this.head = entry;
12542 ++this.length;
12543 };
8b095871 12544
9987f0c1
IC
12545 BufferList.prototype.shift = function shift() {
12546 if (this.length === 0) return;
12547 var ret = this.head.data;
12548 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
12549 --this.length;
12550 return ret;
12551 };
8b095871 12552
9987f0c1
IC
12553 BufferList.prototype.clear = function clear() {
12554 this.head = this.tail = null;
12555 this.length = 0;
12556 };
8b095871 12557
9987f0c1
IC
12558 BufferList.prototype.join = function join(s) {
12559 if (this.length === 0) return '';
12560 var p = this.head;
12561 var ret = '' + p.data;
12562 while (p = p.next) {
12563 ret += s + p.data;
12564 }return ret;
12565 };
8b095871 12566
9987f0c1
IC
12567 BufferList.prototype.concat = function concat(n) {
12568 if (this.length === 0) return Buffer.alloc(0);
12569 if (this.length === 1) return this.head.data;
12570 var ret = Buffer.allocUnsafe(n >>> 0);
12571 var p = this.head;
12572 var i = 0;
12573 while (p) {
12574 copyBuffer(p.data, ret, i);
12575 i += p.data.length;
12576 p = p.next;
12577 }
12578 return ret;
12579 };
8b095871 12580
9987f0c1
IC
12581 return BufferList;
12582}();
12583},{"safe-buffer":26}],20:[function(require,module,exports){
12584'use strict';
8b095871
IC
12585
12586/*<replacement>*/
9987f0c1
IC
12587
12588var processNextTick = require('process-nextick-args');
8b095871
IC
12589/*</replacement>*/
12590
9987f0c1
IC
12591// undocumented cb() API, needed for core, not for public API
12592function destroy(err, cb) {
12593 var _this = this;
8b095871 12594
9987f0c1
IC
12595 var readableDestroyed = this._readableState && this._readableState.destroyed;
12596 var writableDestroyed = this._writableState && this._writableState.destroyed;
8b095871 12597
9987f0c1
IC
12598 if (readableDestroyed || writableDestroyed) {
12599 if (cb) {
12600 cb(err);
12601 } else if (err && (!this._writableState || !this._writableState.errorEmitted)) {
12602 processNextTick(emitErrorNT, this, err);
12603 }
12604 return;
12605 }
8b095871 12606
9987f0c1
IC
12607 // we set destroyed to true before firing error callbacks in order
12608 // to make it re-entrance safe in case destroy() is called within callbacks
8b095871 12609
9987f0c1
IC
12610 if (this._readableState) {
12611 this._readableState.destroyed = true;
12612 }
8b095871 12613
9987f0c1
IC
12614 // if this is a duplex stream mark the writable part as destroyed as well
12615 if (this._writableState) {
12616 this._writableState.destroyed = true;
12617 }
8b095871 12618
9987f0c1
IC
12619 this._destroy(err || null, function (err) {
12620 if (!cb && err) {
12621 processNextTick(emitErrorNT, _this, err);
12622 if (_this._writableState) {
12623 _this._writableState.errorEmitted = true;
12624 }
12625 } else if (cb) {
12626 cb(err);
12627 }
12628 });
12629}
8b095871 12630
9987f0c1
IC
12631function undestroy() {
12632 if (this._readableState) {
12633 this._readableState.destroyed = false;
12634 this._readableState.reading = false;
12635 this._readableState.ended = false;
12636 this._readableState.endEmitted = false;
12637 }
8b095871 12638
9987f0c1
IC
12639 if (this._writableState) {
12640 this._writableState.destroyed = false;
12641 this._writableState.ended = false;
12642 this._writableState.ending = false;
12643 this._writableState.finished = false;
12644 this._writableState.errorEmitted = false;
12645 }
12646}
8b095871 12647
9987f0c1
IC
12648function emitErrorNT(self, err) {
12649 self.emit('error', err);
12650}
8b095871 12651
9987f0c1
IC
12652module.exports = {
12653 destroy: destroy,
12654 undestroy: undestroy
12655};
12656},{"process-nextick-args":11}],21:[function(require,module,exports){
12657module.exports = require('events').EventEmitter;
8b095871 12658
9987f0c1
IC
12659},{"events":6}],22:[function(require,module,exports){
12660module.exports = require('./readable').PassThrough
8b095871 12661
9987f0c1
IC
12662},{"./readable":23}],23:[function(require,module,exports){
12663exports = module.exports = require('./lib/_stream_readable.js');
12664exports.Stream = exports;
12665exports.Readable = exports;
12666exports.Writable = require('./lib/_stream_writable.js');
12667exports.Duplex = require('./lib/_stream_duplex.js');
12668exports.Transform = require('./lib/_stream_transform.js');
12669exports.PassThrough = require('./lib/_stream_passthrough.js');
8b095871 12670
9987f0c1
IC
12671},{"./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){
12672module.exports = require('./readable').Transform
8b095871 12673
9987f0c1
IC
12674},{"./readable":23}],25:[function(require,module,exports){
12675module.exports = require('./lib/_stream_writable.js');
8b095871 12676
9987f0c1
IC
12677},{"./lib/_stream_writable.js":18}],26:[function(require,module,exports){
12678/* eslint-disable node/no-deprecated-api */
12679var buffer = require('buffer')
12680var Buffer = buffer.Buffer
8b095871 12681
9987f0c1
IC
12682// alternative to using Object.keys for old browsers
12683function copyProps (src, dst) {
12684 for (var key in src) {
12685 dst[key] = src[key]
12686 }
12687}
12688if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
12689 module.exports = buffer
12690} else {
12691 // Copy properties from require('buffer')
12692 copyProps(buffer, exports)
12693 exports.Buffer = SafeBuffer
12694}
8b095871 12695
9987f0c1
IC
12696function SafeBuffer (arg, encodingOrOffset, length) {
12697 return Buffer(arg, encodingOrOffset, length)
12698}
8b095871 12699
9987f0c1
IC
12700// Copy static methods from Buffer
12701copyProps(Buffer, SafeBuffer)
8b095871 12702
9987f0c1
IC
12703SafeBuffer.from = function (arg, encodingOrOffset, length) {
12704 if (typeof arg === 'number') {
12705 throw new TypeError('Argument must not be a number')
8b095871 12706 }
9987f0c1 12707 return Buffer(arg, encodingOrOffset, length)
8b095871
IC
12708}
12709
9987f0c1
IC
12710SafeBuffer.alloc = function (size, fill, encoding) {
12711 if (typeof size !== 'number') {
12712 throw new TypeError('Argument must be a number')
12713 }
12714 var buf = Buffer(size)
12715 if (fill !== undefined) {
12716 if (typeof encoding === 'string') {
12717 buf.fill(fill, encoding)
12718 } else {
12719 buf.fill(fill)
12720 }
12721 } else {
12722 buf.fill(0)
12723 }
12724 return buf
12725}
8b095871 12726
9987f0c1
IC
12727SafeBuffer.allocUnsafe = function (size) {
12728 if (typeof size !== 'number') {
12729 throw new TypeError('Argument must be a number')
12730 }
12731 return Buffer(size)
12732}
8b095871 12733
9987f0c1
IC
12734SafeBuffer.allocUnsafeSlow = function (size) {
12735 if (typeof size !== 'number') {
12736 throw new TypeError('Argument must be a number')
12737 }
12738 return buffer.SlowBuffer(size)
12739}
12740
12741},{"buffer":4}],27:[function(require,module,exports){
12742// Copyright Joyent, Inc. and other Node contributors.
12743//
12744// Permission is hereby granted, free of charge, to any person obtaining a
12745// copy of this software and associated documentation files (the
12746// "Software"), to deal in the Software without restriction, including
12747// without limitation the rights to use, copy, modify, merge, publish,
12748// distribute, sublicense, and/or sell copies of the Software, and to permit
12749// persons to whom the Software is furnished to do so, subject to the
12750// following conditions:
12751//
12752// The above copyright notice and this permission notice shall be included
12753// in all copies or substantial portions of the Software.
12754//
12755// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
12756// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
12757// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
12758// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
12759// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
12760// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
12761// USE OR OTHER DEALINGS IN THE SOFTWARE.
8b095871 12762
9987f0c1 12763module.exports = Stream;
8b095871 12764
9987f0c1
IC
12765var EE = require('events').EventEmitter;
12766var inherits = require('inherits');
8b095871 12767
9987f0c1
IC
12768inherits(Stream, EE);
12769Stream.Readable = require('readable-stream/readable.js');
12770Stream.Writable = require('readable-stream/writable.js');
12771Stream.Duplex = require('readable-stream/duplex.js');
12772Stream.Transform = require('readable-stream/transform.js');
12773Stream.PassThrough = require('readable-stream/passthrough.js');
8b095871 12774
9987f0c1
IC
12775// Backwards-compat with node 0.4.x
12776Stream.Stream = Stream;
8b095871 12777
8b095871 12778
8b095871 12779
9987f0c1
IC
12780// old-style streams. Note that the pipe method (the only relevant
12781// part of this class) is overridden in the Readable class.
8b095871 12782
9987f0c1
IC
12783function Stream() {
12784 EE.call(this);
12785}
8b095871 12786
9987f0c1
IC
12787Stream.prototype.pipe = function(dest, options) {
12788 var source = this;
8b095871 12789
9987f0c1
IC
12790 function ondata(chunk) {
12791 if (dest.writable) {
12792 if (false === dest.write(chunk) && source.pause) {
12793 source.pause();
8b095871 12794 }
8b095871 12795 }
8b095871
IC
12796 }
12797
9987f0c1 12798 source.on('data', ondata);
8b095871 12799
9987f0c1
IC
12800 function ondrain() {
12801 if (source.readable && source.resume) {
12802 source.resume();
12803 }
12804 }
8b095871 12805
9987f0c1 12806 dest.on('drain', ondrain);
8b095871 12807
9987f0c1
IC
12808 // If the 'end' option is not supplied, dest.end() will be called when
12809 // source gets the 'end' or 'close' events. Only dest.end() once.
12810 if (!dest._isStdio && (!options || options.end !== false)) {
12811 source.on('end', onend);
12812 source.on('close', onclose);
12813 }
8b095871 12814
9987f0c1
IC
12815 var didOnEnd = false;
12816 function onend() {
12817 if (didOnEnd) return;
12818 didOnEnd = true;
8b095871 12819
9987f0c1 12820 dest.end();
8b095871 12821 }
8b095871 12822
8b095871 12823
9987f0c1
IC
12824 function onclose() {
12825 if (didOnEnd) return;
12826 didOnEnd = true;
8b095871 12827
9987f0c1 12828 if (typeof dest.destroy === 'function') dest.destroy();
8b095871
IC
12829 }
12830
9987f0c1
IC
12831 // don't leave dangling pipes when there are errors.
12832 function onerror(er) {
12833 cleanup();
12834 if (EE.listenerCount(this, 'error') === 0) {
12835 throw er; // Unhandled stream error in pipe.
12836 }
8b095871
IC
12837 }
12838
9987f0c1
IC
12839 source.on('error', onerror);
12840 dest.on('error', onerror);
8b095871 12841
9987f0c1
IC
12842 // remove all the event listeners that were added.
12843 function cleanup() {
12844 source.removeListener('data', ondata);
12845 dest.removeListener('drain', ondrain);
8b095871 12846
9987f0c1
IC
12847 source.removeListener('end', onend);
12848 source.removeListener('close', onclose);
8b095871 12849
9987f0c1
IC
12850 source.removeListener('error', onerror);
12851 dest.removeListener('error', onerror);
8b095871 12852
9987f0c1
IC
12853 source.removeListener('end', cleanup);
12854 source.removeListener('close', cleanup);
8b095871 12855
9987f0c1 12856 dest.removeListener('close', cleanup);
8b095871
IC
12857 }
12858
9987f0c1
IC
12859 source.on('end', cleanup);
12860 source.on('close', cleanup);
8b095871 12861
9987f0c1 12862 dest.on('close', cleanup);
8b095871 12863
9987f0c1 12864 dest.emit('pipe', source);
8b095871 12865
9987f0c1
IC
12866 // Allow for unix-like usage: A.pipe(B).pipe(C)
12867 return dest;
12868};
8b095871 12869
9987f0c1
IC
12870},{"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){
12871'use strict';
8b095871 12872
9987f0c1 12873var Buffer = require('safe-buffer').Buffer;
8b095871 12874
9987f0c1
IC
12875var isEncoding = Buffer.isEncoding || function (encoding) {
12876 encoding = '' + encoding;
12877 switch (encoding && encoding.toLowerCase()) {
12878 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':
12879 return true;
12880 default:
12881 return false;
12882 }
12883};
8b095871 12884
9987f0c1
IC
12885function _normalizeEncoding(enc) {
12886 if (!enc) return 'utf8';
12887 var retried;
12888 while (true) {
12889 switch (enc) {
12890 case 'utf8':
12891 case 'utf-8':
12892 return 'utf8';
12893 case 'ucs2':
12894 case 'ucs-2':
12895 case 'utf16le':
12896 case 'utf-16le':
12897 return 'utf16le';
12898 case 'latin1':
12899 case 'binary':
12900 return 'latin1';
12901 case 'base64':
12902 case 'ascii':
12903 case 'hex':
12904 return enc;
12905 default:
12906 if (retried) return; // undefined
12907 enc = ('' + enc).toLowerCase();
12908 retried = true;
12909 }
8b095871 12910 }
9987f0c1 12911};
8b095871 12912
9987f0c1
IC
12913// Do not cache `Buffer.isEncoding` when checking encoding names as some
12914// modules monkey-patch it to support additional encodings
12915function normalizeEncoding(enc) {
12916 var nenc = _normalizeEncoding(enc);
12917 if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
12918 return nenc || enc;
12919}
8b095871 12920
9987f0c1
IC
12921// StringDecoder provides an interface for efficiently splitting a series of
12922// buffers into a series of JS strings without breaking apart multi-byte
12923// characters.
12924exports.StringDecoder = StringDecoder;
12925function StringDecoder(encoding) {
12926 this.encoding = normalizeEncoding(encoding);
12927 var nb;
12928 switch (this.encoding) {
12929 case 'utf16le':
12930 this.text = utf16Text;
12931 this.end = utf16End;
12932 nb = 4;
12933 break;
12934 case 'utf8':
12935 this.fillLast = utf8FillLast;
12936 nb = 4;
12937 break;
12938 case 'base64':
12939 this.text = base64Text;
12940 this.end = base64End;
12941 nb = 3;
12942 break;
12943 default:
12944 this.write = simpleWrite;
12945 this.end = simpleEnd;
12946 return;
12947 }
12948 this.lastNeed = 0;
12949 this.lastTotal = 0;
12950 this.lastChar = Buffer.allocUnsafe(nb);
12951}
8b095871 12952
9987f0c1
IC
12953StringDecoder.prototype.write = function (buf) {
12954 if (buf.length === 0) return '';
12955 var r;
12956 var i;
12957 if (this.lastNeed) {
12958 r = this.fillLast(buf);
12959 if (r === undefined) return '';
12960 i = this.lastNeed;
12961 this.lastNeed = 0;
12962 } else {
12963 i = 0;
12964 }
12965 if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
12966 return r || '';
12967};
8b095871 12968
9987f0c1 12969StringDecoder.prototype.end = utf8End;
8b095871 12970
9987f0c1
IC
12971// Returns only complete characters in a Buffer
12972StringDecoder.prototype.text = utf8Text;
8b095871 12973
9987f0c1
IC
12974// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
12975StringDecoder.prototype.fillLast = function (buf) {
12976 if (this.lastNeed <= buf.length) {
12977 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
12978 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
8b095871 12979 }
9987f0c1
IC
12980 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
12981 this.lastNeed -= buf.length;
12982};
8b095871 12983
9987f0c1
IC
12984// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
12985// continuation byte.
12986function utf8CheckByte(byte) {
12987 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;
12988 return -1;
12989}
8b095871 12990
9987f0c1
IC
12991// Checks at most 3 bytes at the end of a Buffer in order to detect an
12992// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
12993// needed to complete the UTF-8 character (if applicable) are returned.
12994function utf8CheckIncomplete(self, buf, i) {
12995 var j = buf.length - 1;
12996 if (j < i) return 0;
12997 var nb = utf8CheckByte(buf[j]);
12998 if (nb >= 0) {
12999 if (nb > 0) self.lastNeed = nb - 1;
13000 return nb;
13001 }
13002 if (--j < i) return 0;
13003 nb = utf8CheckByte(buf[j]);
13004 if (nb >= 0) {
13005 if (nb > 0) self.lastNeed = nb - 2;
13006 return nb;
13007 }
13008 if (--j < i) return 0;
13009 nb = utf8CheckByte(buf[j]);
13010 if (nb >= 0) {
13011 if (nb > 0) {
13012 if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
8b095871 13013 }
9987f0c1 13014 return nb;
8b095871 13015 }
9987f0c1
IC
13016 return 0;
13017}
8b095871 13018
9987f0c1
IC
13019// Validates as many continuation bytes for a multi-byte UTF-8 character as
13020// needed or are available. If we see a non-continuation byte where we expect
13021// one, we "replace" the validated continuation bytes we've seen so far with
13022// UTF-8 replacement characters ('\ufffd'), to match v8's UTF-8 decoding
13023// behavior. The continuation byte check is included three times in the case
13024// where all of the continuation bytes for a character exist in the same buffer.
13025// It is also done this way as a slight performance increase instead of using a
13026// loop.
13027function utf8CheckExtraBytes(self, buf, p) {
13028 if ((buf[0] & 0xC0) !== 0x80) {
13029 self.lastNeed = 0;
13030 return '\ufffd'.repeat(p);
13031 }
13032 if (self.lastNeed > 1 && buf.length > 1) {
13033 if ((buf[1] & 0xC0) !== 0x80) {
13034 self.lastNeed = 1;
13035 return '\ufffd'.repeat(p + 1);
13036 }
13037 if (self.lastNeed > 2 && buf.length > 2) {
13038 if ((buf[2] & 0xC0) !== 0x80) {
13039 self.lastNeed = 2;
13040 return '\ufffd'.repeat(p + 2);
13041 }
13042 }
13043 }
8b095871
IC
13044}
13045
9987f0c1
IC
13046// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
13047function utf8FillLast(buf) {
13048 var p = this.lastTotal - this.lastNeed;
13049 var r = utf8CheckExtraBytes(this, buf, p);
13050 if (r !== undefined) return r;
13051 if (this.lastNeed <= buf.length) {
13052 buf.copy(this.lastChar, p, 0, this.lastNeed);
13053 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
8b095871 13054 }
9987f0c1
IC
13055 buf.copy(this.lastChar, p, 0, buf.length);
13056 this.lastNeed -= buf.length;
8b095871
IC
13057}
13058
9987f0c1
IC
13059// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
13060// partial character, the character's bytes are buffered until the required
13061// number of bytes are available.
13062function utf8Text(buf, i) {
13063 var total = utf8CheckIncomplete(this, buf, i);
13064 if (!this.lastNeed) return buf.toString('utf8', i);
13065 this.lastTotal = total;
13066 var end = buf.length - (total - this.lastNeed);
13067 buf.copy(this.lastChar, 0, end);
13068 return buf.toString('utf8', i, end);
8b095871
IC
13069}
13070
9987f0c1
IC
13071// For UTF-8, a replacement character for each buffered byte of a (partial)
13072// character needs to be added to the output.
13073function utf8End(buf) {
13074 var r = buf && buf.length ? this.write(buf) : '';
13075 if (this.lastNeed) return r + '\ufffd'.repeat(this.lastTotal - this.lastNeed);
13076 return r;
13077}
8b095871 13078
9987f0c1
IC
13079// UTF-16LE typically needs two bytes per character, but even if we have an even
13080// number of bytes available, we need to check if we end on a leading/high
13081// surrogate. In that case, we need to wait for the next two bytes in order to
13082// decode the last character properly.
13083function utf16Text(buf, i) {
13084 if ((buf.length - i) % 2 === 0) {
13085 var r = buf.toString('utf16le', i);
13086 if (r) {
13087 var c = r.charCodeAt(r.length - 1);
13088 if (c >= 0xD800 && c <= 0xDBFF) {
13089 this.lastNeed = 2;
13090 this.lastTotal = 4;
13091 this.lastChar[0] = buf[buf.length - 2];
13092 this.lastChar[1] = buf[buf.length - 1];
13093 return r.slice(0, -1);
13094 }
13095 }
13096 return r;
8b095871 13097 }
9987f0c1
IC
13098 this.lastNeed = 1;
13099 this.lastTotal = 2;
13100 this.lastChar[0] = buf[buf.length - 1];
13101 return buf.toString('utf16le', i, buf.length - 1);
8b095871
IC
13102}
13103
9987f0c1
IC
13104// For UTF-16LE we do not explicitly append special replacement characters if we
13105// end on a partial character, we simply let v8 handle that.
13106function utf16End(buf) {
13107 var r = buf && buf.length ? this.write(buf) : '';
13108 if (this.lastNeed) {
13109 var end = this.lastTotal - this.lastNeed;
13110 return r + this.lastChar.toString('utf16le', 0, end);
8b095871 13111 }
9987f0c1 13112 return r;
8b095871
IC
13113}
13114
9987f0c1
IC
13115function base64Text(buf, i) {
13116 var n = (buf.length - i) % 3;
13117 if (n === 0) return buf.toString('base64', i);
13118 this.lastNeed = 3 - n;
13119 this.lastTotal = 3;
13120 if (n === 1) {
13121 this.lastChar[0] = buf[buf.length - 1];
13122 } else {
13123 this.lastChar[0] = buf[buf.length - 2];
13124 this.lastChar[1] = buf[buf.length - 1];
13125 }
13126 return buf.toString('base64', i, buf.length - n);
13127}
8b095871 13128
9987f0c1
IC
13129function base64End(buf) {
13130 var r = buf && buf.length ? this.write(buf) : '';
13131 if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
13132 return r;
13133}
8b095871 13134
9987f0c1
IC
13135// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
13136function simpleWrite(buf) {
13137 return buf.toString(this.encoding);
13138}
8b095871 13139
9987f0c1
IC
13140function simpleEnd(buf) {
13141 return buf && buf.length ? this.write(buf) : '';
13142}
13143},{"safe-buffer":26}],29:[function(require,module,exports){
13144(function (global){
8b095871 13145
9987f0c1
IC
13146/**
13147 * Module exports.
13148 */
8b095871 13149
9987f0c1
IC
13150module.exports = deprecate;
13151
13152/**
13153 * Mark that a method should not be used.
13154 * Returns a modified function which warns once by default.
13155 *
13156 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
13157 *
13158 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
13159 * will throw an Error when invoked.
13160 *
13161 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
13162 * will invoke `console.trace()` instead of `console.error()`.
13163 *
13164 * @param {Function} fn - the function to deprecate
13165 * @param {String} msg - the string to print to the console when `fn` is invoked
13166 * @returns {Function} a new "deprecated" version of `fn`
13167 * @api public
13168 */
13169
13170function deprecate (fn, msg) {
13171 if (config('noDeprecation')) {
13172 return fn;
8b095871
IC
13173 }
13174
9987f0c1
IC
13175 var warned = false;
13176 function deprecated() {
13177 if (!warned) {
13178 if (config('throwDeprecation')) {
13179 throw new Error(msg);
13180 } else if (config('traceDeprecation')) {
13181 console.trace(msg);
13182 } else {
13183 console.warn(msg);
13184 }
13185 warned = true;
13186 }
13187 return fn.apply(this, arguments);
8b095871
IC
13188 }
13189
9987f0c1
IC
13190 return deprecated;
13191}
8b095871 13192
9987f0c1
IC
13193/**
13194 * Checks `localStorage` for boolean values for the given `name`.
13195 *
13196 * @param {String} name
13197 * @returns {Boolean}
13198 * @api private
13199 */
8b095871 13200
9987f0c1
IC
13201function config (name) {
13202 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
13203 try {
13204 if (!global.localStorage) return false;
13205 } catch (_) {
13206 return false;
8b095871 13207 }
9987f0c1
IC
13208 var val = global.localStorage[name];
13209 if (null == val) return false;
13210 return String(val).toLowerCase() === 'true';
13211}
8b095871 13212
9987f0c1
IC
13213}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
13214},{}],30:[function(require,module,exports){
13215arguments[4][8][0].apply(exports,arguments)
13216},{"dup":8}],31:[function(require,module,exports){
13217module.exports = function isBuffer(arg) {
13218 return arg && typeof arg === 'object'
13219 && typeof arg.copy === 'function'
13220 && typeof arg.fill === 'function'
13221 && typeof arg.readUInt8 === 'function';
13222}
13223},{}],32:[function(require,module,exports){
13224(function (process,global){
13225// Copyright Joyent, Inc. and other Node contributors.
13226//
13227// Permission is hereby granted, free of charge, to any person obtaining a
13228// copy of this software and associated documentation files (the
13229// "Software"), to deal in the Software without restriction, including
13230// without limitation the rights to use, copy, modify, merge, publish,
13231// distribute, sublicense, and/or sell copies of the Software, and to permit
13232// persons to whom the Software is furnished to do so, subject to the
13233// following conditions:
13234//
13235// The above copyright notice and this permission notice shall be included
13236// in all copies or substantial portions of the Software.
13237//
13238// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
13239// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
13240// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
13241// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
13242// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
13243// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
13244// USE OR OTHER DEALINGS IN THE SOFTWARE.
13245
13246var formatRegExp = /%[sdj%]/g;
13247exports.format = function(f) {
13248 if (!isString(f)) {
13249 var objects = [];
13250 for (var i = 0; i < arguments.length; i++) {
13251 objects.push(inspect(arguments[i]));
8b095871 13252 }
9987f0c1 13253 return objects.join(' ');
8b095871
IC
13254 }
13255
9987f0c1
IC
13256 var i = 1;
13257 var args = arguments;
13258 var len = args.length;
13259 var str = String(f).replace(formatRegExp, function(x) {
13260 if (x === '%%') return '%';
13261 if (i >= len) return x;
13262 switch (x) {
13263 case '%s': return String(args[i++]);
13264 case '%d': return Number(args[i++]);
13265 case '%j':
13266 try {
13267 return JSON.stringify(args[i++]);
13268 } catch (_) {
13269 return '[Circular]';
13270 }
13271 default:
13272 return x;
13273 }
13274 });
13275 for (var x = args[i]; i < len; x = args[++i]) {
13276 if (isNull(x) || !isObject(x)) {
13277 str += ' ' + x;
13278 } else {
13279 str += ' ' + inspect(x);
13280 }
13281 }
13282 return str;
13283};
8b095871
IC
13284
13285
9987f0c1
IC
13286// Mark that a method should not be used.
13287// Returns a modified function which warns once by default.
13288// If --no-deprecation is set, then it is a no-op.
13289exports.deprecate = function(fn, msg) {
13290 // Allow for deprecating things in the process of starting up.
13291 if (isUndefined(global.process)) {
13292 return function() {
13293 return exports.deprecate(fn, msg).apply(this, arguments);
13294 };
8b095871 13295 }
8b095871 13296
9987f0c1
IC
13297 if (process.noDeprecation === true) {
13298 return fn;
8b095871
IC
13299 }
13300
9987f0c1
IC
13301 var warned = false;
13302 function deprecated() {
13303 if (!warned) {
13304 if (process.throwDeprecation) {
13305 throw new Error(msg);
13306 } else if (process.traceDeprecation) {
13307 console.trace(msg);
13308 } else {
13309 console.error(msg);
13310 }
13311 warned = true;
13312 }
13313 return fn.apply(this, arguments);
8b095871
IC
13314 }
13315
9987f0c1 13316 return deprecated;
8b095871
IC
13317};
13318
8b095871 13319
9987f0c1
IC
13320var debugs = {};
13321var debugEnviron;
13322exports.debuglog = function(set) {
13323 if (isUndefined(debugEnviron))
13324 debugEnviron = process.env.NODE_DEBUG || '';
13325 set = set.toUpperCase();
13326 if (!debugs[set]) {
13327 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
13328 var pid = process.pid;
13329 debugs[set] = function() {
13330 var msg = exports.format.apply(exports, arguments);
13331 console.error('%s %d: %s', set, pid, msg);
13332 };
13333 } else {
13334 debugs[set] = function() {};
13335 }
13336 }
13337 return debugs[set];
13338};
8b095871 13339
8b095871 13340
9987f0c1
IC
13341/**
13342 * Echos the value of a value. Trys to print the value out
13343 * in the best way possible given the different types.
13344 *
13345 * @param {Object} obj The object to print out.
13346 * @param {Object} opts Optional options object that alters the output.
13347 */
13348/* legacy: obj, showHidden, depth, colors*/
13349function inspect(obj, opts) {
13350 // default options
13351 var ctx = {
13352 seen: [],
13353 stylize: stylizeNoColor
13354 };
13355 // legacy...
13356 if (arguments.length >= 3) ctx.depth = arguments[2];
13357 if (arguments.length >= 4) ctx.colors = arguments[3];
13358 if (isBoolean(opts)) {
13359 // legacy...
13360 ctx.showHidden = opts;
13361 } else if (opts) {
13362 // got an "options" object
13363 exports._extend(ctx, opts);
13364 }
13365 // set default options
13366 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
13367 if (isUndefined(ctx.depth)) ctx.depth = 2;
13368 if (isUndefined(ctx.colors)) ctx.colors = false;
13369 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
13370 if (ctx.colors) ctx.stylize = stylizeWithColor;
13371 return formatValue(ctx, obj, ctx.depth);
13372}
13373exports.inspect = inspect;
8b095871 13374
8b095871 13375
9987f0c1
IC
13376// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
13377inspect.colors = {
13378 'bold' : [1, 22],
13379 'italic' : [3, 23],
13380 'underline' : [4, 24],
13381 'inverse' : [7, 27],
13382 'white' : [37, 39],
13383 'grey' : [90, 39],
13384 'black' : [30, 39],
13385 'blue' : [34, 39],
13386 'cyan' : [36, 39],
13387 'green' : [32, 39],
13388 'magenta' : [35, 39],
13389 'red' : [31, 39],
13390 'yellow' : [33, 39]
13391};
8b095871 13392
9987f0c1
IC
13393// Don't use 'blue' not visible on cmd.exe
13394inspect.styles = {
13395 'special': 'cyan',
13396 'number': 'yellow',
13397 'boolean': 'yellow',
13398 'undefined': 'grey',
13399 'null': 'bold',
13400 'string': 'green',
13401 'date': 'magenta',
13402 // "name": intentionally not styling
13403 'regexp': 'red'
13404};
8b095871 13405
8b095871 13406
9987f0c1
IC
13407function stylizeWithColor(str, styleType) {
13408 var style = inspect.styles[styleType];
8b095871 13409
9987f0c1
IC
13410 if (style) {
13411 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
13412 '\u001b[' + inspect.colors[style][1] + 'm';
13413 } else {
13414 return str;
8b095871 13415 }
9987f0c1 13416}
8b095871 13417
8b095871 13418
9987f0c1
IC
13419function stylizeNoColor(str, styleType) {
13420 return str;
13421}
8b095871 13422
8b095871 13423
9987f0c1
IC
13424function arrayToHash(array) {
13425 var hash = {};
8b095871 13426
9987f0c1
IC
13427 array.forEach(function(val, idx) {
13428 hash[val] = true;
13429 });
8b095871 13430
9987f0c1
IC
13431 return hash;
13432}
8b095871 13433
8b095871 13434
9987f0c1
IC
13435function formatValue(ctx, value, recurseTimes) {
13436 // Provide a hook for user-specified inspect functions.
13437 // Check that value is an object with an inspect function on it
13438 if (ctx.customInspect &&
13439 value &&
13440 isFunction(value.inspect) &&
13441 // Filter out the util module, it's inspect function is special
13442 value.inspect !== exports.inspect &&
13443 // Also filter out any prototype objects using the circular check.
13444 !(value.constructor && value.constructor.prototype === value)) {
13445 var ret = value.inspect(recurseTimes, ctx);
13446 if (!isString(ret)) {
13447 ret = formatValue(ctx, ret, recurseTimes);
8b095871 13448 }
9987f0c1 13449 return ret;
8b095871 13450 }
8b095871 13451
9987f0c1
IC
13452 // Primitive types cannot have properties
13453 var primitive = formatPrimitive(ctx, value);
13454 if (primitive) {
13455 return primitive;
8b095871 13456 }
8b095871 13457
9987f0c1
IC
13458 // Look up the keys of the object.
13459 var keys = Object.keys(value);
13460 var visibleKeys = arrayToHash(keys);
8b095871 13461
9987f0c1
IC
13462 if (ctx.showHidden) {
13463 keys = Object.getOwnPropertyNames(value);
8b095871 13464 }
8b095871 13465
9987f0c1
IC
13466 // IE doesn't make error fields non-enumerable
13467 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
13468 if (isError(value)
13469 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
13470 return formatError(value);
8b095871 13471 }
8b095871 13472
9987f0c1
IC
13473 // Some type of object without properties can be shortcutted.
13474 if (keys.length === 0) {
13475 if (isFunction(value)) {
13476 var name = value.name ? ': ' + value.name : '';
13477 return ctx.stylize('[Function' + name + ']', 'special');
8b095871 13478 }
9987f0c1
IC
13479 if (isRegExp(value)) {
13480 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
8b095871 13481 }
9987f0c1
IC
13482 if (isDate(value)) {
13483 return ctx.stylize(Date.prototype.toString.call(value), 'date');
13484 }
13485 if (isError(value)) {
13486 return formatError(value);
8b095871
IC
13487 }
13488 }
13489
9987f0c1 13490 var base = '', array = false, braces = ['{', '}'];
8b095871 13491
9987f0c1
IC
13492 // Make Array say that they are Array
13493 if (isArray(value)) {
13494 array = true;
13495 braces = ['[', ']'];
13496 }
8b095871 13497
9987f0c1
IC
13498 // Make functions say that they are functions
13499 if (isFunction(value)) {
13500 var n = value.name ? ': ' + value.name : '';
13501 base = ' [Function' + n + ']';
13502 }
8b095871 13503
9987f0c1
IC
13504 // Make RegExps say that they are RegExps
13505 if (isRegExp(value)) {
13506 base = ' ' + RegExp.prototype.toString.call(value);
13507 }
8b095871 13508
9987f0c1
IC
13509 // Make dates with properties first say the date
13510 if (isDate(value)) {
13511 base = ' ' + Date.prototype.toUTCString.call(value);
13512 }
8b095871 13513
9987f0c1
IC
13514 // Make error with message first say the error
13515 if (isError(value)) {
13516 base = ' ' + formatError(value);
13517 }
8b095871 13518
9987f0c1
IC
13519 if (keys.length === 0 && (!array || value.length == 0)) {
13520 return braces[0] + base + braces[1];
13521 }
8b095871 13522
9987f0c1
IC
13523 if (recurseTimes < 0) {
13524 if (isRegExp(value)) {
13525 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
8b095871 13526 } else {
9987f0c1
IC
13527 return ctx.stylize('[Object]', 'special');
13528 }
13529 }
8b095871 13530
9987f0c1 13531 ctx.seen.push(value);
8b095871 13532
9987f0c1
IC
13533 var output;
13534 if (array) {
13535 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
13536 } else {
13537 output = keys.map(function(key) {
13538 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
13539 });
8b095871
IC
13540 }
13541
9987f0c1 13542 ctx.seen.pop();
8b095871 13543
9987f0c1
IC
13544 return reduceToSingleString(output, base, braces);
13545}
8b095871 13546
8b095871 13547
9987f0c1
IC
13548function formatPrimitive(ctx, value) {
13549 if (isUndefined(value))
13550 return ctx.stylize('undefined', 'undefined');
13551 if (isString(value)) {
13552 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
13553 .replace(/'/g, "\\'")
13554 .replace(/\\"/g, '"') + '\'';
13555 return ctx.stylize(simple, 'string');
8b095871 13556 }
9987f0c1
IC
13557 if (isNumber(value))
13558 return ctx.stylize('' + value, 'number');
13559 if (isBoolean(value))
13560 return ctx.stylize('' + value, 'boolean');
13561 // For some reason typeof null is "object", so special case here.
13562 if (isNull(value))
13563 return ctx.stylize('null', 'null');
8b095871
IC
13564}
13565
9987f0c1
IC
13566
13567function formatError(value) {
13568 return '[' + Error.prototype.toString.call(value) + ']';
8b095871
IC
13569}
13570
9987f0c1
IC
13571
13572function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
13573 var output = [];
13574 for (var i = 0, l = value.length; i < l; ++i) {
13575 if (hasOwnProperty(value, String(i))) {
13576 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
13577 String(i), true));
13578 } else {
13579 output.push('');
13580 }
8b095871 13581 }
9987f0c1
IC
13582 keys.forEach(function(key) {
13583 if (!key.match(/^\d+$/)) {
13584 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
13585 key, true));
13586 }
13587 });
13588 return output;
8b095871
IC
13589}
13590
8b095871 13591
9987f0c1
IC
13592function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
13593 var name, str, desc;
13594 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
13595 if (desc.get) {
13596 if (desc.set) {
13597 str = ctx.stylize('[Getter/Setter]', 'special');
13598 } else {
13599 str = ctx.stylize('[Getter]', 'special');
13600 }
13601 } else {
13602 if (desc.set) {
13603 str = ctx.stylize('[Setter]', 'special');
13604 }
13605 }
13606 if (!hasOwnProperty(visibleKeys, key)) {
13607 name = '[' + key + ']';
13608 }
13609 if (!str) {
13610 if (ctx.seen.indexOf(desc.value) < 0) {
13611 if (isNull(recurseTimes)) {
13612 str = formatValue(ctx, desc.value, null);
13613 } else {
13614 str = formatValue(ctx, desc.value, recurseTimes - 1);
13615 }
13616 if (str.indexOf('\n') > -1) {
13617 if (array) {
13618 str = str.split('\n').map(function(line) {
13619 return ' ' + line;
13620 }).join('\n').substr(2);
13621 } else {
13622 str = '\n' + str.split('\n').map(function(line) {
13623 return ' ' + line;
13624 }).join('\n');
13625 }
13626 }
13627 } else {
13628 str = ctx.stylize('[Circular]', 'special');
13629 }
13630 }
13631 if (isUndefined(name)) {
13632 if (array && key.match(/^\d+$/)) {
13633 return str;
13634 }
13635 name = JSON.stringify('' + key);
13636 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
13637 name = name.substr(1, name.length - 2);
13638 name = ctx.stylize(name, 'name');
13639 } else {
13640 name = name.replace(/'/g, "\\'")
13641 .replace(/\\"/g, '"')
13642 .replace(/(^"|"$)/g, "'");
13643 name = ctx.stylize(name, 'string');
13644 }
13645 }
8b095871 13646
9987f0c1
IC
13647 return name + ': ' + str;
13648}
8b095871 13649
8b095871 13650
9987f0c1
IC
13651function reduceToSingleString(output, base, braces) {
13652 var numLinesEst = 0;
13653 var length = output.reduce(function(prev, cur) {
13654 numLinesEst++;
13655 if (cur.indexOf('\n') >= 0) numLinesEst++;
13656 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
13657 }, 0);
8b095871 13658
9987f0c1
IC
13659 if (length > 60) {
13660 return braces[0] +
13661 (base === '' ? '' : base + '\n ') +
13662 ' ' +
13663 output.join(',\n ') +
13664 ' ' +
13665 braces[1];
13666 }
8b095871 13667
9987f0c1
IC
13668 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
13669}
8b095871 13670
8b095871 13671
9987f0c1
IC
13672// NOTE: These type checking functions intentionally don't use `instanceof`
13673// because it is fragile and can be easily faked with `Object.create()`.
13674function isArray(ar) {
13675 return Array.isArray(ar);
8b095871 13676}
9987f0c1 13677exports.isArray = isArray;
8b095871 13678
9987f0c1
IC
13679function isBoolean(arg) {
13680 return typeof arg === 'boolean';
13681}
13682exports.isBoolean = isBoolean;
8b095871 13683
9987f0c1
IC
13684function isNull(arg) {
13685 return arg === null;
13686}
13687exports.isNull = isNull;
8b095871 13688
9987f0c1
IC
13689function isNullOrUndefined(arg) {
13690 return arg == null;
13691}
13692exports.isNullOrUndefined = isNullOrUndefined;
8b095871 13693
9987f0c1
IC
13694function isNumber(arg) {
13695 return typeof arg === 'number';
13696}
13697exports.isNumber = isNumber;
8b095871 13698
9987f0c1
IC
13699function isString(arg) {
13700 return typeof arg === 'string';
13701}
13702exports.isString = isString;
8b095871 13703
9987f0c1
IC
13704function isSymbol(arg) {
13705 return typeof arg === 'symbol';
13706}
13707exports.isSymbol = isSymbol;
8b095871 13708
9987f0c1
IC
13709function isUndefined(arg) {
13710 return arg === void 0;
8b095871 13711}
9987f0c1 13712exports.isUndefined = isUndefined;
8b095871 13713
9987f0c1
IC
13714function isRegExp(re) {
13715 return isObject(re) && objectToString(re) === '[object RegExp]';
13716}
13717exports.isRegExp = isRegExp;
8b095871 13718
9987f0c1
IC
13719function isObject(arg) {
13720 return typeof arg === 'object' && arg !== null;
13721}
13722exports.isObject = isObject;
8b095871 13723
9987f0c1
IC
13724function isDate(d) {
13725 return isObject(d) && objectToString(d) === '[object Date]';
13726}
13727exports.isDate = isDate;
8b095871 13728
9987f0c1
IC
13729function isError(e) {
13730 return isObject(e) &&
13731 (objectToString(e) === '[object Error]' || e instanceof Error);
13732}
13733exports.isError = isError;
8b095871 13734
9987f0c1
IC
13735function isFunction(arg) {
13736 return typeof arg === 'function';
13737}
13738exports.isFunction = isFunction;
8b095871 13739
9987f0c1
IC
13740function isPrimitive(arg) {
13741 return arg === null ||
13742 typeof arg === 'boolean' ||
13743 typeof arg === 'number' ||
13744 typeof arg === 'string' ||
13745 typeof arg === 'symbol' || // ES6 symbol
13746 typeof arg === 'undefined';
13747}
13748exports.isPrimitive = isPrimitive;
8b095871 13749
9987f0c1 13750exports.isBuffer = require('./support/isBuffer');
8b095871 13751
9987f0c1
IC
13752function objectToString(o) {
13753 return Object.prototype.toString.call(o);
8b095871
IC
13754}
13755
8b095871 13756
9987f0c1
IC
13757function pad(n) {
13758 return n < 10 ? '0' + n.toString(10) : n.toString(10);
13759}
8b095871 13760
8b095871 13761
9987f0c1
IC
13762var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
13763 'Oct', 'Nov', 'Dec'];
8b095871 13764
9987f0c1
IC
13765// 26 Feb 16:19:34
13766function timestamp() {
13767 var d = new Date();
13768 var time = [pad(d.getHours()),
13769 pad(d.getMinutes()),
13770 pad(d.getSeconds())].join(':');
13771 return [d.getDate(), months[d.getMonth()], time].join(' ');
13772}
13773
13774
13775// log is just a thin wrapper to console.log that prepends a timestamp
13776exports.log = function() {
13777 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
8b095871
IC
13778};
13779
13780
9987f0c1
IC
13781/**
13782 * Inherit the prototype methods from one constructor into another.
13783 *
13784 * The Function.prototype.inherits from lang.js rewritten as a standalone
13785 * function (not on Function.prototype). NOTE: If this file is to be loaded
13786 * during bootstrapping this function needs to be rewritten using some native
13787 * functions as prototype setup using normal JavaScript does not work as
13788 * expected during bootstrapping (see mirror.js in r114903).
13789 *
13790 * @param {function} ctor Constructor function which needs to inherit the
13791 * prototype.
13792 * @param {function} superCtor Constructor function to inherit prototype from.
13793 */
13794exports.inherits = require('inherits');
8b095871 13795
9987f0c1
IC
13796exports._extend = function(origin, add) {
13797 // Don't do anything if add isn't an object
13798 if (!add || !isObject(add)) return origin;
8b095871 13799
9987f0c1
IC
13800 var keys = Object.keys(add);
13801 var i = keys.length;
13802 while (i--) {
13803 origin[keys[i]] = add[keys[i]];
13804 }
13805 return origin;
13806};
8b095871 13807
9987f0c1
IC
13808function hasOwnProperty(obj, prop) {
13809 return Object.prototype.hasOwnProperty.call(obj, prop);
13810}
8b095871 13811
9987f0c1
IC
13812}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
13813},{"./support/isBuffer":31,"_process":12,"inherits":30}],33:[function(require,module,exports){
13814module.exports = {
13815 base58: require('bs58'),
13816 bitcoin: require('bitcoinjs-lib'),
13817 ecurve: require('ecurve'),
13818 BigInteger: require('bigi')
8b095871
IC
13819}
13820
9987f0c1
IC
13821},{"bigi":37,"bitcoinjs-lib":50,"bs58":79,"ecurve":89}],34:[function(require,module,exports){
13822// base-x encoding
13823// Forked from https://github.com/cryptocoinjs/bs58
13824// Originally written by Mike Hearn for BitcoinJ
13825// Copyright (c) 2011 Google Inc
13826// Ported to JavaScript by Stefan Thomas
13827// Merged Buffer refactorings from base58-native by Stephen Pair
13828// Copyright (c) 2013 BitPay Inc
8b095871 13829
9987f0c1 13830var Buffer = require('safe-buffer').Buffer
8b095871 13831
9987f0c1
IC
13832module.exports = function base (ALPHABET) {
13833 var ALPHABET_MAP = {}
13834 var BASE = ALPHABET.length
13835 var LEADER = ALPHABET.charAt(0)
8b095871 13836
9987f0c1
IC
13837 // pre-compute lookup table
13838 for (var z = 0; z < ALPHABET.length; z++) {
13839 var x = ALPHABET.charAt(z)
8b095871 13840
9987f0c1
IC
13841 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
13842 ALPHABET_MAP[x] = z
13843 }
8b095871 13844
9987f0c1
IC
13845 function encode (source) {
13846 if (source.length === 0) return ''
8b095871 13847
9987f0c1
IC
13848 var digits = [0]
13849 for (var i = 0; i < source.length; ++i) {
13850 for (var j = 0, carry = source[i]; j < digits.length; ++j) {
13851 carry += digits[j] << 8
13852 digits[j] = carry % BASE
13853 carry = (carry / BASE) | 0
13854 }
8b095871 13855
9987f0c1
IC
13856 while (carry > 0) {
13857 digits.push(carry % BASE)
13858 carry = (carry / BASE) | 0
13859 }
13860 }
8b095871 13861
9987f0c1 13862 var string = ''
8b095871 13863
9987f0c1
IC
13864 // deal with leading zeros
13865 for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += ALPHABET[0]
13866 // convert digits to a string
13867 for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]
8b095871 13868
9987f0c1
IC
13869 return string
13870 }
8b095871 13871
9987f0c1
IC
13872 function decodeUnsafe (string) {
13873 if (string.length === 0) return Buffer.allocUnsafe(0)
8b095871 13874
9987f0c1
IC
13875 var bytes = [0]
13876 for (var i = 0; i < string.length; i++) {
13877 var value = ALPHABET_MAP[string[i]]
13878 if (value === undefined) return
8b095871 13879
9987f0c1
IC
13880 for (var j = 0, carry = value; j < bytes.length; ++j) {
13881 carry += bytes[j] * BASE
13882 bytes[j] = carry & 0xff
13883 carry >>= 8
13884 }
8b095871 13885
9987f0c1
IC
13886 while (carry > 0) {
13887 bytes.push(carry & 0xff)
13888 carry >>= 8
13889 }
13890 }
8b095871 13891
9987f0c1
IC
13892 // deal with leading zeros
13893 for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {
13894 bytes.push(0)
13895 }
8b095871 13896
9987f0c1
IC
13897 return Buffer.from(bytes.reverse())
13898 }
8b095871 13899
9987f0c1
IC
13900 function decode (string) {
13901 var buffer = decodeUnsafe(string)
13902 if (buffer) return buffer
8b095871 13903
9987f0c1
IC
13904 throw new Error('Non-base' + BASE + ' character')
13905 }
8b095871 13906
9987f0c1
IC
13907 return {
13908 encode: encode,
13909 decodeUnsafe: decodeUnsafe,
13910 decode: decode
13911 }
13912}
8b095871 13913
9987f0c1
IC
13914},{"safe-buffer":98}],35:[function(require,module,exports){
13915// (public) Constructor
13916function BigInteger(a, b, c) {
13917 if (!(this instanceof BigInteger))
13918 return new BigInteger(a, b, c)
8b095871 13919
9987f0c1
IC
13920 if (a != null) {
13921 if ("number" == typeof a) this.fromNumber(a, b, c)
13922 else if (b == null && "string" != typeof a) this.fromString(a, 256)
13923 else this.fromString(a, b)
13924 }
13925}
8b095871 13926
9987f0c1 13927var proto = BigInteger.prototype
8b095871 13928
9987f0c1
IC
13929// duck-typed isBigInteger
13930proto.__bigi = require('../package.json').version
13931BigInteger.isBigInteger = function (obj, check_ver) {
13932 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
13933}
8b095871 13934
9987f0c1
IC
13935// Bits per digit
13936var dbits
8b095871 13937
9987f0c1
IC
13938// am: Compute w_j += (x*this_i), propagate carries,
13939// c is initial carry, returns final carry.
13940// c < 3*dvalue, x < 2*dvalue, this_i < dvalue
13941// We need to select the fastest one that works in this environment.
8b095871 13942
9987f0c1
IC
13943// am1: use a single mult and divide to get the high bits,
13944// max digit bits should be 26 because
13945// max internal value = 2*dvalue^2-2*dvalue (< 2^53)
13946function am1(i, x, w, j, c, n) {
13947 while (--n >= 0) {
13948 var v = x * this[i++] + w[j] + c
13949 c = Math.floor(v / 0x4000000)
13950 w[j++] = v & 0x3ffffff
13951 }
13952 return c
13953}
13954// am2 avoids a big mult-and-extract completely.
13955// Max digit bits should be <= 30 because we do bitwise ops
13956// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
13957function am2(i, x, w, j, c, n) {
13958 var xl = x & 0x7fff,
13959 xh = x >> 15
13960 while (--n >= 0) {
13961 var l = this[i] & 0x7fff
13962 var h = this[i++] >> 15
13963 var m = xh * l + h * xl
13964 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
13965 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
13966 w[j++] = l & 0x3fffffff
13967 }
13968 return c
13969}
13970// Alternately, set max digit bits to 28 since some
13971// browsers slow down when dealing with 32-bit numbers.
13972function am3(i, x, w, j, c, n) {
13973 var xl = x & 0x3fff,
13974 xh = x >> 14
13975 while (--n >= 0) {
13976 var l = this[i] & 0x3fff
13977 var h = this[i++] >> 14
13978 var m = xh * l + h * xl
13979 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
13980 c = (l >> 28) + (m >> 14) + xh * h
13981 w[j++] = l & 0xfffffff
13982 }
13983 return c
13984}
8b095871 13985
9987f0c1
IC
13986// wtf?
13987BigInteger.prototype.am = am1
13988dbits = 26
8b095871 13989
9987f0c1
IC
13990BigInteger.prototype.DB = dbits
13991BigInteger.prototype.DM = ((1 << dbits) - 1)
13992var DV = BigInteger.prototype.DV = (1 << dbits)
8b095871 13993
9987f0c1
IC
13994var BI_FP = 52
13995BigInteger.prototype.FV = Math.pow(2, BI_FP)
13996BigInteger.prototype.F1 = BI_FP - dbits
13997BigInteger.prototype.F2 = 2 * dbits - BI_FP
8b095871 13998
9987f0c1
IC
13999// Digit conversions
14000var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
14001var BI_RC = new Array()
14002var rr, vv
14003rr = "0".charCodeAt(0)
14004for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
14005rr = "a".charCodeAt(0)
14006for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
14007rr = "A".charCodeAt(0)
14008for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
8b095871 14009
9987f0c1
IC
14010function int2char(n) {
14011 return BI_RM.charAt(n)
14012}
8b095871 14013
9987f0c1
IC
14014function intAt(s, i) {
14015 var c = BI_RC[s.charCodeAt(i)]
14016 return (c == null) ? -1 : c
14017}
8b095871 14018
9987f0c1
IC
14019// (protected) copy this to r
14020function bnpCopyTo(r) {
14021 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
14022 r.t = this.t
14023 r.s = this.s
14024}
8b095871 14025
9987f0c1
IC
14026// (protected) set from integer value x, -DV <= x < DV
14027function bnpFromInt(x) {
14028 this.t = 1
14029 this.s = (x < 0) ? -1 : 0
14030 if (x > 0) this[0] = x
14031 else if (x < -1) this[0] = x + DV
14032 else this.t = 0
14033}
8b095871 14034
9987f0c1
IC
14035// return bigint initialized to value
14036function nbv(i) {
14037 var r = new BigInteger()
14038 r.fromInt(i)
14039 return r
8b095871
IC
14040}
14041
9987f0c1
IC
14042// (protected) set from string and radix
14043function bnpFromString(s, b) {
14044 var self = this
8b095871 14045
9987f0c1
IC
14046 var k
14047 if (b == 16) k = 4
14048 else if (b == 8) k = 3
14049 else if (b == 256) k = 8; // byte array
14050 else if (b == 2) k = 1
14051 else if (b == 32) k = 5
14052 else if (b == 4) k = 2
14053 else {
14054 self.fromRadix(s, b)
14055 return
14056 }
14057 self.t = 0
14058 self.s = 0
14059 var i = s.length,
14060 mi = false,
14061 sh = 0
14062 while (--i >= 0) {
14063 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
14064 if (x < 0) {
14065 if (s.charAt(i) == "-") mi = true
14066 continue
14067 }
14068 mi = false
14069 if (sh == 0)
14070 self[self.t++] = x
14071 else if (sh + k > self.DB) {
14072 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
14073 self[self.t++] = (x >> (self.DB - sh))
14074 } else
14075 self[self.t - 1] |= x << sh
14076 sh += k
14077 if (sh >= self.DB) sh -= self.DB
14078 }
14079 if (k == 8 && (s[0] & 0x80) != 0) {
14080 self.s = -1
14081 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
14082 }
14083 self.clamp()
14084 if (mi) BigInteger.ZERO.subTo(self, self)
14085}
8b095871 14086
9987f0c1
IC
14087// (protected) clamp off excess high words
14088function bnpClamp() {
14089 var c = this.s & this.DM
14090 while (this.t > 0 && this[this.t - 1] == c)--this.t
8b095871
IC
14091}
14092
9987f0c1
IC
14093// (public) return string representation in given radix
14094function bnToString(b) {
14095 var self = this
14096 if (self.s < 0) return "-" + self.negate()
14097 .toString(b)
14098 var k
14099 if (b == 16) k = 4
14100 else if (b == 8) k = 3
14101 else if (b == 2) k = 1
14102 else if (b == 32) k = 5
14103 else if (b == 4) k = 2
14104 else return self.toRadix(b)
14105 var km = (1 << k) - 1,
14106 d, m = false,
14107 r = "",
14108 i = self.t
14109 var p = self.DB - (i * self.DB) % k
14110 if (i-- > 0) {
14111 if (p < self.DB && (d = self[i] >> p) > 0) {
14112 m = true
14113 r = int2char(d)
14114 }
14115 while (i >= 0) {
14116 if (p < k) {
14117 d = (self[i] & ((1 << p) - 1)) << (k - p)
14118 d |= self[--i] >> (p += self.DB - k)
14119 } else {
14120 d = (self[i] >> (p -= k)) & km
14121 if (p <= 0) {
14122 p += self.DB
14123 --i
14124 }
14125 }
14126 if (d > 0) m = true
14127 if (m) r += int2char(d)
14128 }
8b095871 14129 }
9987f0c1 14130 return m ? r : "0"
8b095871
IC
14131}
14132
9987f0c1
IC
14133// (public) -this
14134function bnNegate() {
14135 var r = new BigInteger()
14136 BigInteger.ZERO.subTo(this, r)
14137 return r
14138}
8b095871 14139
9987f0c1
IC
14140// (public) |this|
14141function bnAbs() {
14142 return (this.s < 0) ? this.negate() : this
14143}
8b095871 14144
9987f0c1
IC
14145// (public) return + if this > a, - if this < a, 0 if equal
14146function bnCompareTo(a) {
14147 var r = this.s - a.s
14148 if (r != 0) return r
14149 var i = this.t
14150 r = i - a.t
14151 if (r != 0) return (this.s < 0) ? -r : r
14152 while (--i >= 0)
14153 if ((r = this[i] - a[i]) != 0) return r
14154 return 0
14155}
8b095871 14156
9987f0c1
IC
14157// returns bit length of the integer x
14158function nbits(x) {
14159 var r = 1,
14160 t
14161 if ((t = x >>> 16) != 0) {
14162 x = t
14163 r += 16
14164 }
14165 if ((t = x >> 8) != 0) {
14166 x = t
14167 r += 8
14168 }
14169 if ((t = x >> 4) != 0) {
14170 x = t
14171 r += 4
14172 }
14173 if ((t = x >> 2) != 0) {
14174 x = t
14175 r += 2
14176 }
14177 if ((t = x >> 1) != 0) {
14178 x = t
14179 r += 1
8b095871 14180 }
9987f0c1
IC
14181 return r
14182}
8b095871 14183
9987f0c1
IC
14184// (public) return the number of bits in "this"
14185function bnBitLength() {
14186 if (this.t <= 0) return 0
14187 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
14188}
8b095871 14189
9987f0c1
IC
14190// (public) return the number of bytes in "this"
14191function bnByteLength() {
14192 return this.bitLength() >> 3
14193}
8b095871 14194
9987f0c1
IC
14195// (protected) r = this << n*DB
14196function bnpDLShiftTo(n, r) {
14197 var i
14198 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
14199 for (i = n - 1; i >= 0; --i) r[i] = 0
14200 r.t = this.t + n
14201 r.s = this.s
14202}
8b095871 14203
9987f0c1
IC
14204// (protected) r = this >> n*DB
14205function bnpDRShiftTo(n, r) {
14206 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
14207 r.t = Math.max(this.t - n, 0)
14208 r.s = this.s
14209}
8b095871 14210
9987f0c1
IC
14211// (protected) r = this << n
14212function bnpLShiftTo(n, r) {
14213 var self = this
14214 var bs = n % self.DB
14215 var cbs = self.DB - bs
14216 var bm = (1 << cbs) - 1
14217 var ds = Math.floor(n / self.DB),
14218 c = (self.s << bs) & self.DM,
14219 i
14220 for (i = self.t - 1; i >= 0; --i) {
14221 r[i + ds + 1] = (self[i] >> cbs) | c
14222 c = (self[i] & bm) << bs
14223 }
14224 for (i = ds - 1; i >= 0; --i) r[i] = 0
14225 r[ds] = c
14226 r.t = self.t + ds + 1
14227 r.s = self.s
14228 r.clamp()
14229}
8b095871 14230
9987f0c1
IC
14231// (protected) r = this >> n
14232function bnpRShiftTo(n, r) {
14233 var self = this
14234 r.s = self.s
14235 var ds = Math.floor(n / self.DB)
14236 if (ds >= self.t) {
14237 r.t = 0
14238 return
8b095871 14239 }
9987f0c1
IC
14240 var bs = n % self.DB
14241 var cbs = self.DB - bs
14242 var bm = (1 << bs) - 1
14243 r[0] = self[ds] >> bs
14244 for (var i = ds + 1; i < self.t; ++i) {
14245 r[i - ds - 1] |= (self[i] & bm) << cbs
14246 r[i - ds] = self[i] >> bs
14247 }
14248 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
14249 r.t = self.t - ds
14250 r.clamp()
14251}
8b095871 14252
9987f0c1
IC
14253// (protected) r = this - a
14254function bnpSubTo(a, r) {
14255 var self = this
14256 var i = 0,
14257 c = 0,
14258 m = Math.min(a.t, self.t)
14259 while (i < m) {
14260 c += self[i] - a[i]
14261 r[i++] = c & self.DM
14262 c >>= self.DB
8b095871 14263 }
9987f0c1
IC
14264 if (a.t < self.t) {
14265 c -= a.s
14266 while (i < self.t) {
14267 c += self[i]
14268 r[i++] = c & self.DM
14269 c >>= self.DB
14270 }
14271 c += self.s
14272 } else {
14273 c += self.s
14274 while (i < a.t) {
14275 c -= a[i]
14276 r[i++] = c & self.DM
14277 c >>= self.DB
14278 }
14279 c -= a.s
14280 }
14281 r.s = (c < 0) ? -1 : 0
14282 if (c < -1) r[i++] = self.DV + c
14283 else if (c > 0) r[i++] = c
14284 r.t = i
14285 r.clamp()
8b095871
IC
14286}
14287
9987f0c1
IC
14288// (protected) r = this * a, r != this,a (HAC 14.12)
14289// "this" should be the larger one if appropriate.
14290function bnpMultiplyTo(a, r) {
14291 var x = this.abs(),
14292 y = a.abs()
14293 var i = x.t
14294 r.t = i + y.t
14295 while (--i >= 0) r[i] = 0
14296 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
14297 r.s = 0
14298 r.clamp()
14299 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
14300}
8b095871 14301
9987f0c1
IC
14302// (protected) r = this^2, r != this (HAC 14.16)
14303function bnpSquareTo(r) {
14304 var x = this.abs()
14305 var i = r.t = 2 * x.t
14306 while (--i >= 0) r[i] = 0
14307 for (i = 0; i < x.t - 1; ++i) {
14308 var c = x.am(i, x[i], r, 2 * i, 0, 1)
14309 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
14310 r[i + x.t] -= x.DV
14311 r[i + x.t + 1] = 1
14312 }
14313 }
14314 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
14315 r.s = 0
14316 r.clamp()
14317}
8b095871 14318
9987f0c1
IC
14319// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
14320// r != q, this != m. q or r may be null.
14321function bnpDivRemTo(m, q, r) {
14322 var self = this
14323 var pm = m.abs()
14324 if (pm.t <= 0) return
14325 var pt = self.abs()
14326 if (pt.t < pm.t) {
14327 if (q != null) q.fromInt(0)
14328 if (r != null) self.copyTo(r)
14329 return
14330 }
14331 if (r == null) r = new BigInteger()
14332 var y = new BigInteger(),
14333 ts = self.s,
14334 ms = m.s
14335 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
14336 if (nsh > 0) {
14337 pm.lShiftTo(nsh, y)
14338 pt.lShiftTo(nsh, r)
14339 } else {
14340 pm.copyTo(y)
14341 pt.copyTo(r)
14342 }
14343 var ys = y.t
14344 var y0 = y[ys - 1]
14345 if (y0 == 0) return
14346 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
14347 var d1 = self.FV / yt,
14348 d2 = (1 << self.F1) / yt,
14349 e = 1 << self.F2
14350 var i = r.t,
14351 j = i - ys,
14352 t = (q == null) ? new BigInteger() : q
14353 y.dlShiftTo(j, t)
14354 if (r.compareTo(t) >= 0) {
14355 r[r.t++] = 1
14356 r.subTo(t, r)
14357 }
14358 BigInteger.ONE.dlShiftTo(ys, t)
14359 t.subTo(y, y); // "negative" y so we can replace sub with am later
14360 while (y.t < ys) y[y.t++] = 0
14361 while (--j >= 0) {
14362 // Estimate quotient digit
14363 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
14364 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
14365 y.dlShiftTo(j, t)
14366 r.subTo(t, r)
14367 while (r[i] < --qd) r.subTo(t, r)
14368 }
14369 }
14370 if (q != null) {
14371 r.drShiftTo(ys, q)
14372 if (ts != ms) BigInteger.ZERO.subTo(q, q)
14373 }
14374 r.t = ys
14375 r.clamp()
14376 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
14377 if (ts < 0) BigInteger.ZERO.subTo(r, r)
14378}
8b095871 14379
9987f0c1
IC
14380// (public) this mod a
14381function bnMod(a) {
14382 var r = new BigInteger()
14383 this.abs()
14384 .divRemTo(a, null, r)
14385 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
14386 return r
14387}
8b095871 14388
9987f0c1
IC
14389// Modular reduction using "classic" algorithm
14390function Classic(m) {
14391 this.m = m
8b095871
IC
14392}
14393
9987f0c1
IC
14394function cConvert(x) {
14395 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
14396 else return x
8b095871
IC
14397}
14398
9987f0c1
IC
14399function cRevert(x) {
14400 return x
14401}
8b095871 14402
9987f0c1
IC
14403function cReduce(x) {
14404 x.divRemTo(this.m, null, x)
8b095871
IC
14405}
14406
9987f0c1
IC
14407function cMulTo(x, y, r) {
14408 x.multiplyTo(y, r)
14409 this.reduce(r)
8b095871
IC
14410}
14411
9987f0c1
IC
14412function cSqrTo(x, r) {
14413 x.squareTo(r)
14414 this.reduce(r)
14415}
8b095871 14416
9987f0c1
IC
14417Classic.prototype.convert = cConvert
14418Classic.prototype.revert = cRevert
14419Classic.prototype.reduce = cReduce
14420Classic.prototype.mulTo = cMulTo
14421Classic.prototype.sqrTo = cSqrTo
8b095871 14422
9987f0c1
IC
14423// (protected) return "-1/this % 2^DB"; useful for Mont. reduction
14424// justification:
14425// xy == 1 (mod m)
14426// xy = 1+km
14427// xy(2-xy) = (1+km)(1-km)
14428// x[y(2-xy)] = 1-k^2m^2
14429// x[y(2-xy)] == 1 (mod m^2)
14430// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
14431// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
14432// JS multiply "overflows" differently from C/C++, so care is needed here.
14433function bnpInvDigit() {
14434 if (this.t < 1) return 0
14435 var x = this[0]
14436 if ((x & 1) == 0) return 0
14437 var y = x & 3; // y == 1/x mod 2^2
14438 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
14439 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
14440 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
14441 // last step - calculate inverse mod DV directly
14442 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
14443 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
14444 // we really want the negative inverse, and -DV < y < DV
14445 return (y > 0) ? this.DV - y : -y
14446}
8b095871 14447
9987f0c1
IC
14448// Montgomery reduction
14449function Montgomery(m) {
14450 this.m = m
14451 this.mp = m.invDigit()
14452 this.mpl = this.mp & 0x7fff
14453 this.mph = this.mp >> 15
14454 this.um = (1 << (m.DB - 15)) - 1
14455 this.mt2 = 2 * m.t
14456}
8b095871 14457
9987f0c1
IC
14458// xR mod m
14459function montConvert(x) {
14460 var r = new BigInteger()
14461 x.abs()
14462 .dlShiftTo(this.m.t, r)
14463 r.divRemTo(this.m, null, r)
14464 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
14465 return r
8b095871
IC
14466}
14467
9987f0c1
IC
14468// x/R mod m
14469function montRevert(x) {
14470 var r = new BigInteger()
14471 x.copyTo(r)
14472 this.reduce(r)
14473 return r
8b095871
IC
14474}
14475
9987f0c1
IC
14476// x = x/R mod m (HAC 14.32)
14477function montReduce(x) {
14478 while (x.t <= this.mt2) // pad x so am has enough room later
14479 x[x.t++] = 0
14480 for (var i = 0; i < this.m.t; ++i) {
14481 // faster way of calculating u0 = x[i]*mp mod DV
14482 var j = x[i] & 0x7fff
14483 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
14484 // use am to combine the multiply-shift-add into one call
14485 j = i + this.m.t
14486 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
14487 // propagate carry
14488 while (x[j] >= x.DV) {
14489 x[j] -= x.DV
14490 x[++j]++
14491 }
8b095871 14492 }
9987f0c1
IC
14493 x.clamp()
14494 x.drShiftTo(this.m.t, x)
14495 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
8b095871
IC
14496}
14497
9987f0c1
IC
14498// r = "x^2/R mod m"; x != r
14499function montSqrTo(x, r) {
14500 x.squareTo(r)
14501 this.reduce(r)
14502}
8b095871 14503
9987f0c1
IC
14504// r = "xy/R mod m"; x,y != r
14505function montMulTo(x, y, r) {
14506 x.multiplyTo(y, r)
14507 this.reduce(r)
14508}
8b095871 14509
9987f0c1
IC
14510Montgomery.prototype.convert = montConvert
14511Montgomery.prototype.revert = montRevert
14512Montgomery.prototype.reduce = montReduce
14513Montgomery.prototype.mulTo = montMulTo
14514Montgomery.prototype.sqrTo = montSqrTo
8b095871 14515
9987f0c1
IC
14516// (protected) true iff this is even
14517function bnpIsEven() {
14518 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
14519}
8b095871 14520
9987f0c1
IC
14521// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
14522function bnpExp(e, z) {
14523 if (e > 0xffffffff || e < 1) return BigInteger.ONE
14524 var r = new BigInteger(),
14525 r2 = new BigInteger(),
14526 g = z.convert(this),
14527 i = nbits(e) - 1
14528 g.copyTo(r)
14529 while (--i >= 0) {
14530 z.sqrTo(r, r2)
14531 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
14532 else {
14533 var t = r
14534 r = r2
14535 r2 = t
8b095871 14536 }
8b095871 14537 }
9987f0c1 14538 return z.revert(r)
8b095871
IC
14539}
14540
9987f0c1
IC
14541// (public) this^e % m, 0 <= e < 2^32
14542function bnModPowInt(e, m) {
14543 var z
14544 if (e < 256 || m.isEven()) z = new Classic(m)
14545 else z = new Montgomery(m)
14546 return this.exp(e, z)
14547}
8b095871 14548
9987f0c1
IC
14549// protected
14550proto.copyTo = bnpCopyTo
14551proto.fromInt = bnpFromInt
14552proto.fromString = bnpFromString
14553proto.clamp = bnpClamp
14554proto.dlShiftTo = bnpDLShiftTo
14555proto.drShiftTo = bnpDRShiftTo
14556proto.lShiftTo = bnpLShiftTo
14557proto.rShiftTo = bnpRShiftTo
14558proto.subTo = bnpSubTo
14559proto.multiplyTo = bnpMultiplyTo
14560proto.squareTo = bnpSquareTo
14561proto.divRemTo = bnpDivRemTo
14562proto.invDigit = bnpInvDigit
14563proto.isEven = bnpIsEven
14564proto.exp = bnpExp
8b095871 14565
9987f0c1
IC
14566// public
14567proto.toString = bnToString
14568proto.negate = bnNegate
14569proto.abs = bnAbs
14570proto.compareTo = bnCompareTo
14571proto.bitLength = bnBitLength
14572proto.byteLength = bnByteLength
14573proto.mod = bnMod
14574proto.modPowInt = bnModPowInt
8b095871 14575
9987f0c1
IC
14576// (public)
14577function bnClone() {
14578 var r = new BigInteger()
14579 this.copyTo(r)
14580 return r
14581}
8b095871 14582
9987f0c1
IC
14583// (public) return value as integer
14584function bnIntValue() {
14585 if (this.s < 0) {
14586 if (this.t == 1) return this[0] - this.DV
14587 else if (this.t == 0) return -1
14588 } else if (this.t == 1) return this[0]
14589 else if (this.t == 0) return 0
14590 // assumes 16 < DB < 32
14591 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
14592}
8b095871 14593
9987f0c1
IC
14594// (public) return value as byte
14595function bnByteValue() {
14596 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
14597}
8b095871 14598
9987f0c1
IC
14599// (public) return value as short (assumes DB>=16)
14600function bnShortValue() {
14601 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
14602}
8b095871 14603
9987f0c1
IC
14604// (protected) return x s.t. r^x < DV
14605function bnpChunkSize(r) {
14606 return Math.floor(Math.LN2 * this.DB / Math.log(r))
8b095871
IC
14607}
14608
9987f0c1
IC
14609// (public) 0 if this == 0, 1 if this > 0
14610function bnSigNum() {
14611 if (this.s < 0) return -1
14612 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
14613 else return 1
8b095871
IC
14614}
14615
9987f0c1
IC
14616// (protected) convert to radix string
14617function bnpToRadix(b) {
14618 if (b == null) b = 10
14619 if (this.signum() == 0 || b < 2 || b > 36) return "0"
14620 var cs = this.chunkSize(b)
14621 var a = Math.pow(b, cs)
14622 var d = nbv(a),
14623 y = new BigInteger(),
14624 z = new BigInteger(),
14625 r = ""
14626 this.divRemTo(d, y, z)
14627 while (y.signum() > 0) {
14628 r = (a + z.intValue())
14629 .toString(b)
14630 .substr(1) + r
14631 y.divRemTo(d, y, z)
8b095871 14632 }
9987f0c1
IC
14633 return z.intValue()
14634 .toString(b) + r
8b095871
IC
14635}
14636
9987f0c1
IC
14637// (protected) convert from radix string
14638function bnpFromRadix(s, b) {
14639 var self = this
14640 self.fromInt(0)
14641 if (b == null) b = 10
14642 var cs = self.chunkSize(b)
14643 var d = Math.pow(b, cs),
14644 mi = false,
14645 j = 0,
14646 w = 0
14647 for (var i = 0; i < s.length; ++i) {
14648 var x = intAt(s, i)
14649 if (x < 0) {
14650 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
14651 continue
14652 }
14653 w = b * w + x
14654 if (++j >= cs) {
14655 self.dMultiply(d)
14656 self.dAddOffset(w, 0)
14657 j = 0
14658 w = 0
14659 }
8b095871 14660 }
9987f0c1
IC
14661 if (j > 0) {
14662 self.dMultiply(Math.pow(b, j))
14663 self.dAddOffset(w, 0)
14664 }
14665 if (mi) BigInteger.ZERO.subTo(self, self)
8b095871
IC
14666}
14667
9987f0c1
IC
14668// (protected) alternate constructor
14669function bnpFromNumber(a, b, c) {
14670 var self = this
14671 if ("number" == typeof b) {
14672 // new BigInteger(int,int,RNG)
14673 if (a < 2) self.fromInt(1)
14674 else {
14675 self.fromNumber(a, c)
14676 if (!self.testBit(a - 1)) // force MSB set
14677 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
14678 if (self.isEven()) self.dAddOffset(1, 0); // force odd
14679 while (!self.isProbablePrime(b)) {
14680 self.dAddOffset(2, 0)
14681 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
14682 }
14683 }
14684 } else {
14685 // new BigInteger(int,RNG)
14686 var x = new Array(),
14687 t = a & 7
14688 x.length = (a >> 3) + 1
14689 b.nextBytes(x)
14690 if (t > 0) x[0] &= ((1 << t) - 1)
14691 else x[0] = 0
14692 self.fromString(x, 256)
14693 }
8b095871 14694}
8b095871 14695
9987f0c1
IC
14696// (public) convert to bigendian byte array
14697function bnToByteArray() {
14698 var self = this
14699 var i = self.t,
14700 r = new Array()
14701 r[0] = self.s
14702 var p = self.DB - (i * self.DB) % 8,
14703 d, k = 0
14704 if (i-- > 0) {
14705 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
14706 r[k++] = d | (self.s << (self.DB - p))
14707 while (i >= 0) {
14708 if (p < 8) {
14709 d = (self[i] & ((1 << p) - 1)) << (8 - p)
14710 d |= self[--i] >> (p += self.DB - 8)
14711 } else {
14712 d = (self[i] >> (p -= 8)) & 0xff
14713 if (p <= 0) {
14714 p += self.DB
14715 --i
14716 }
14717 }
14718 if ((d & 0x80) != 0) d |= -256
14719 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
14720 if (k > 0 || d != self.s) r[k++] = d
14721 }
14722 }
14723 return r
8b095871 14724}
8b095871 14725
9987f0c1
IC
14726function bnEquals(a) {
14727 return (this.compareTo(a) == 0)
8b095871 14728}
8b095871 14729
9987f0c1
IC
14730function bnMin(a) {
14731 return (this.compareTo(a) < 0) ? this : a
8b095871 14732}
8b095871 14733
9987f0c1
IC
14734function bnMax(a) {
14735 return (this.compareTo(a) > 0) ? this : a
8b095871 14736}
8b095871 14737
9987f0c1
IC
14738// (protected) r = this op a (bitwise)
14739function bnpBitwiseTo(a, op, r) {
14740 var self = this
14741 var i, f, m = Math.min(a.t, self.t)
14742 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
14743 if (a.t < self.t) {
14744 f = a.s & self.DM
14745 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
14746 r.t = self.t
14747 } else {
14748 f = self.s & self.DM
14749 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
14750 r.t = a.t
14751 }
14752 r.s = op(self.s, a.s)
14753 r.clamp()
8b095871 14754}
8b095871 14755
9987f0c1
IC
14756// (public) this & a
14757function op_and(x, y) {
14758 return x & y
8b095871 14759}
8b095871 14760
9987f0c1
IC
14761function bnAnd(a) {
14762 var r = new BigInteger()
14763 this.bitwiseTo(a, op_and, r)
14764 return r
8b095871 14765}
8b095871 14766
9987f0c1
IC
14767// (public) this | a
14768function op_or(x, y) {
14769 return x | y
8b095871 14770}
8b095871 14771
9987f0c1
IC
14772function bnOr(a) {
14773 var r = new BigInteger()
14774 this.bitwiseTo(a, op_or, r)
14775 return r
8b095871 14776}
8b095871 14777
9987f0c1
IC
14778// (public) this ^ a
14779function op_xor(x, y) {
14780 return x ^ y
8b095871 14781}
8b095871 14782
9987f0c1
IC
14783function bnXor(a) {
14784 var r = new BigInteger()
14785 this.bitwiseTo(a, op_xor, r)
14786 return r
8b095871 14787}
8b095871 14788
9987f0c1
IC
14789// (public) this & ~a
14790function op_andnot(x, y) {
14791 return x & ~y
8b095871 14792}
8b095871 14793
9987f0c1
IC
14794function bnAndNot(a) {
14795 var r = new BigInteger()
14796 this.bitwiseTo(a, op_andnot, r)
14797 return r
8b095871 14798}
8b095871 14799
9987f0c1
IC
14800// (public) ~this
14801function bnNot() {
14802 var r = new BigInteger()
14803 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
14804 r.t = this.t
14805 r.s = ~this.s
14806 return r
8b095871 14807}
8b095871 14808
9987f0c1
IC
14809// (public) this << n
14810function bnShiftLeft(n) {
14811 var r = new BigInteger()
14812 if (n < 0) this.rShiftTo(-n, r)
14813 else this.lShiftTo(n, r)
14814 return r
8b095871 14815}
8b095871 14816
9987f0c1
IC
14817// (public) this >> n
14818function bnShiftRight(n) {
14819 var r = new BigInteger()
14820 if (n < 0) this.lShiftTo(-n, r)
14821 else this.rShiftTo(n, r)
14822 return r
8b095871
IC
14823}
14824
9987f0c1
IC
14825// return index of lowest 1-bit in x, x < 2^31
14826function lbit(x) {
14827 if (x == 0) return -1
14828 var r = 0
14829 if ((x & 0xffff) == 0) {
14830 x >>= 16
14831 r += 16
8b095871 14832 }
9987f0c1
IC
14833 if ((x & 0xff) == 0) {
14834 x >>= 8
14835 r += 8
8b095871 14836 }
9987f0c1
IC
14837 if ((x & 0xf) == 0) {
14838 x >>= 4
14839 r += 4
8b095871 14840 }
9987f0c1
IC
14841 if ((x & 3) == 0) {
14842 x >>= 2
14843 r += 2
14844 }
14845 if ((x & 1) == 0)++r
14846 return r
14847}
8b095871 14848
9987f0c1
IC
14849// (public) returns index of lowest 1-bit (or -1 if none)
14850function bnGetLowestSetBit() {
14851 for (var i = 0; i < this.t; ++i)
14852 if (this[i] != 0) return i * this.DB + lbit(this[i])
14853 if (this.s < 0) return this.t * this.DB
14854 return -1
14855}
8b095871 14856
9987f0c1
IC
14857// return number of 1 bits in x
14858function cbit(x) {
14859 var r = 0
14860 while (x != 0) {
14861 x &= x - 1
14862 ++r
8b095871 14863 }
9987f0c1
IC
14864 return r
14865}
8b095871 14866
9987f0c1
IC
14867// (public) return number of set bits
14868function bnBitCount() {
14869 var r = 0,
14870 x = this.s & this.DM
14871 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
14872 return r
14873}
8b095871 14874
9987f0c1
IC
14875// (public) true iff nth bit is set
14876function bnTestBit(n) {
14877 var j = Math.floor(n / this.DB)
14878 if (j >= this.t) return (this.s != 0)
14879 return ((this[j] & (1 << (n % this.DB))) != 0)
14880}
8b095871 14881
9987f0c1
IC
14882// (protected) this op (1<<n)
14883function bnpChangeBit(n, op) {
14884 var r = BigInteger.ONE.shiftLeft(n)
14885 this.bitwiseTo(r, op, r)
14886 return r
14887}
8b095871 14888
9987f0c1
IC
14889// (public) this | (1<<n)
14890function bnSetBit(n) {
14891 return this.changeBit(n, op_or)
14892}
8b095871 14893
9987f0c1
IC
14894// (public) this & ~(1<<n)
14895function bnClearBit(n) {
14896 return this.changeBit(n, op_andnot)
14897}
8b095871 14898
9987f0c1
IC
14899// (public) this ^ (1<<n)
14900function bnFlipBit(n) {
14901 return this.changeBit(n, op_xor)
14902}
8b095871 14903
9987f0c1
IC
14904// (protected) r = this + a
14905function bnpAddTo(a, r) {
14906 var self = this
8b095871 14907
9987f0c1
IC
14908 var i = 0,
14909 c = 0,
14910 m = Math.min(a.t, self.t)
14911 while (i < m) {
14912 c += self[i] + a[i]
14913 r[i++] = c & self.DM
14914 c >>= self.DB
14915 }
14916 if (a.t < self.t) {
14917 c += a.s
14918 while (i < self.t) {
14919 c += self[i]
14920 r[i++] = c & self.DM
14921 c >>= self.DB
14922 }
14923 c += self.s
14924 } else {
14925 c += self.s
14926 while (i < a.t) {
14927 c += a[i]
14928 r[i++] = c & self.DM
14929 c >>= self.DB
14930 }
14931 c += a.s
14932 }
14933 r.s = (c < 0) ? -1 : 0
14934 if (c > 0) r[i++] = c
14935 else if (c < -1) r[i++] = self.DV + c
14936 r.t = i
14937 r.clamp()
14938}
8b095871 14939
9987f0c1
IC
14940// (public) this + a
14941function bnAdd(a) {
14942 var r = new BigInteger()
14943 this.addTo(a, r)
14944 return r
14945}
8b095871 14946
9987f0c1
IC
14947// (public) this - a
14948function bnSubtract(a) {
14949 var r = new BigInteger()
14950 this.subTo(a, r)
14951 return r
14952}
8b095871 14953
9987f0c1
IC
14954// (public) this * a
14955function bnMultiply(a) {
14956 var r = new BigInteger()
14957 this.multiplyTo(a, r)
14958 return r
14959}
8b095871 14960
9987f0c1
IC
14961// (public) this^2
14962function bnSquare() {
14963 var r = new BigInteger()
14964 this.squareTo(r)
14965 return r
14966}
8b095871 14967
9987f0c1
IC
14968// (public) this / a
14969function bnDivide(a) {
14970 var r = new BigInteger()
14971 this.divRemTo(a, r, null)
14972 return r
14973}
8b095871 14974
9987f0c1
IC
14975// (public) this % a
14976function bnRemainder(a) {
14977 var r = new BigInteger()
14978 this.divRemTo(a, null, r)
14979 return r
14980}
8b095871 14981
9987f0c1
IC
14982// (public) [this/a,this%a]
14983function bnDivideAndRemainder(a) {
14984 var q = new BigInteger(),
14985 r = new BigInteger()
14986 this.divRemTo(a, q, r)
14987 return new Array(q, r)
14988}
8b095871 14989
9987f0c1
IC
14990// (protected) this *= n, this >= 0, 1 < n < DV
14991function bnpDMultiply(n) {
14992 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
14993 ++this.t
14994 this.clamp()
8b095871
IC
14995}
14996
9987f0c1
IC
14997// (protected) this += n << w words, this >= 0
14998function bnpDAddOffset(n, w) {
14999 if (n == 0) return
15000 while (this.t <= w) this[this.t++] = 0
15001 this[w] += n
15002 while (this[w] >= this.DV) {
15003 this[w] -= this.DV
15004 if (++w >= this.t) this[this.t++] = 0
15005 ++this[w]
8b095871 15006 }
9987f0c1 15007}
8b095871 15008
9987f0c1
IC
15009// A "null" reducer
15010function NullExp() {}
8b095871 15011
9987f0c1
IC
15012function nNop(x) {
15013 return x
15014}
8b095871 15015
9987f0c1
IC
15016function nMulTo(x, y, r) {
15017 x.multiplyTo(y, r)
15018}
8b095871 15019
9987f0c1
IC
15020function nSqrTo(x, r) {
15021 x.squareTo(r)
15022}
8b095871 15023
9987f0c1
IC
15024NullExp.prototype.convert = nNop
15025NullExp.prototype.revert = nNop
15026NullExp.prototype.mulTo = nMulTo
15027NullExp.prototype.sqrTo = nSqrTo
8b095871 15028
9987f0c1
IC
15029// (public) this^e
15030function bnPow(e) {
15031 return this.exp(e, new NullExp())
15032}
8b095871 15033
9987f0c1
IC
15034// (protected) r = lower n words of "this * a", a.t <= n
15035// "this" should be the larger one if appropriate.
15036function bnpMultiplyLowerTo(a, n, r) {
15037 var i = Math.min(this.t + a.t, n)
15038 r.s = 0; // assumes a,this >= 0
15039 r.t = i
15040 while (i > 0) r[--i] = 0
15041 var j
15042 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
15043 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
15044 r.clamp()
15045}
8b095871 15046
9987f0c1
IC
15047// (protected) r = "this * a" without lower n words, n > 0
15048// "this" should be the larger one if appropriate.
15049function bnpMultiplyUpperTo(a, n, r) {
15050 --n
15051 var i = r.t = this.t + a.t - n
15052 r.s = 0; // assumes a,this >= 0
15053 while (--i >= 0) r[i] = 0
15054 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
15055 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
15056 r.clamp()
15057 r.drShiftTo(1, r)
15058}
8b095871 15059
9987f0c1
IC
15060// Barrett modular reduction
15061function Barrett(m) {
15062 // setup Barrett
15063 this.r2 = new BigInteger()
15064 this.q3 = new BigInteger()
15065 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
15066 this.mu = this.r2.divide(m)
15067 this.m = m
15068}
8b095871 15069
9987f0c1
IC
15070function barrettConvert(x) {
15071 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
15072 else if (x.compareTo(this.m) < 0) return x
15073 else {
15074 var r = new BigInteger()
15075 x.copyTo(r)
15076 this.reduce(r)
15077 return r
8b095871 15078 }
9987f0c1 15079}
8b095871 15080
9987f0c1
IC
15081function barrettRevert(x) {
15082 return x
15083}
8b095871 15084
9987f0c1
IC
15085// x = x mod m (HAC 14.42)
15086function barrettReduce(x) {
15087 var self = this
15088 x.drShiftTo(self.m.t - 1, self.r2)
15089 if (x.t > self.m.t + 1) {
15090 x.t = self.m.t + 1
15091 x.clamp()
8b095871 15092 }
9987f0c1
IC
15093 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
15094 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
15095 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
15096 x.subTo(self.r2, x)
15097 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
15098}
8b095871 15099
9987f0c1
IC
15100// r = x^2 mod m; x != r
15101function barrettSqrTo(x, r) {
15102 x.squareTo(r)
15103 this.reduce(r)
15104}
8b095871 15105
9987f0c1
IC
15106// r = x*y mod m; x,y != r
15107function barrettMulTo(x, y, r) {
15108 x.multiplyTo(y, r)
15109 this.reduce(r)
15110}
8b095871 15111
9987f0c1
IC
15112Barrett.prototype.convert = barrettConvert
15113Barrett.prototype.revert = barrettRevert
15114Barrett.prototype.reduce = barrettReduce
15115Barrett.prototype.mulTo = barrettMulTo
15116Barrett.prototype.sqrTo = barrettSqrTo
8b095871 15117
9987f0c1
IC
15118// (public) this^e % m (HAC 14.85)
15119function bnModPow(e, m) {
15120 var i = e.bitLength(),
15121 k, r = nbv(1),
15122 z
15123 if (i <= 0) return r
15124 else if (i < 18) k = 1
15125 else if (i < 48) k = 3
15126 else if (i < 144) k = 4
15127 else if (i < 768) k = 5
15128 else k = 6
15129 if (i < 8)
15130 z = new Classic(m)
15131 else if (m.isEven())
15132 z = new Barrett(m)
15133 else
15134 z = new Montgomery(m)
8b095871 15135
9987f0c1
IC
15136 // precomputation
15137 var g = new Array(),
15138 n = 3,
15139 k1 = k - 1,
15140 km = (1 << k) - 1
15141 g[1] = z.convert(this)
15142 if (k > 1) {
15143 var g2 = new BigInteger()
15144 z.sqrTo(g[1], g2)
15145 while (n <= km) {
15146 g[n] = new BigInteger()
15147 z.mulTo(g2, g[n - 2], g[n])
15148 n += 2
8b095871 15149 }
9987f0c1 15150 }
8b095871 15151
9987f0c1
IC
15152 var j = e.t - 1,
15153 w, is1 = true,
15154 r2 = new BigInteger(),
15155 t
15156 i = nbits(e[j]) - 1
15157 while (j >= 0) {
15158 if (i >= k1) w = (e[j] >> (i - k1)) & km
15159 else {
15160 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
15161 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
8b095871
IC
15162 }
15163
9987f0c1
IC
15164 n = k
15165 while ((w & 1) == 0) {
15166 w >>= 1
15167 --n
15168 }
15169 if ((i -= n) < 0) {
15170 i += this.DB
15171 --j
15172 }
15173 if (is1) { // ret == 1, don't bother squaring or multiplying it
15174 g[w].copyTo(r)
15175 is1 = false
15176 } else {
15177 while (n > 1) {
15178 z.sqrTo(r, r2)
15179 z.sqrTo(r2, r)
15180 n -= 2
15181 }
15182 if (n > 0) z.sqrTo(r, r2)
15183 else {
15184 t = r
15185 r = r2
15186 r2 = t
15187 }
15188 z.mulTo(r2, g[w], r)
8b095871 15189 }
8b095871 15190
9987f0c1
IC
15191 while (j >= 0 && (e[j] & (1 << i)) == 0) {
15192 z.sqrTo(r, r2)
15193 t = r
15194 r = r2
15195 r2 = t
15196 if (--i < 0) {
15197 i = this.DB - 1
15198 --j
15199 }
15200 }
15201 }
15202 return z.revert(r)
8b095871
IC
15203}
15204
9987f0c1
IC
15205// (public) gcd(this,a) (HAC 14.54)
15206function bnGCD(a) {
15207 var x = (this.s < 0) ? this.negate() : this.clone()
15208 var y = (a.s < 0) ? a.negate() : a.clone()
15209 if (x.compareTo(y) < 0) {
15210 var t = x
15211 x = y
15212 y = t
15213 }
15214 var i = x.getLowestSetBit(),
15215 g = y.getLowestSetBit()
15216 if (g < 0) return x
15217 if (i < g) g = i
15218 if (g > 0) {
15219 x.rShiftTo(g, x)
15220 y.rShiftTo(g, y)
15221 }
15222 while (x.signum() > 0) {
15223 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
15224 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
15225 if (x.compareTo(y) >= 0) {
15226 x.subTo(y, x)
15227 x.rShiftTo(1, x)
15228 } else {
15229 y.subTo(x, y)
15230 y.rShiftTo(1, y)
15231 }
15232 }
15233 if (g > 0) y.lShiftTo(g, y)
15234 return y
8b095871
IC
15235}
15236
9987f0c1
IC
15237// (protected) this % n, n < 2^26
15238function bnpModInt(n) {
15239 if (n <= 0) return 0
15240 var d = this.DV % n,
15241 r = (this.s < 0) ? n - 1 : 0
15242 if (this.t > 0)
15243 if (d == 0) r = this[0] % n
15244 else
15245 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
15246 return r
8b095871 15247}
8b095871 15248
9987f0c1
IC
15249// (public) 1/this % m (HAC 14.61)
15250function bnModInverse(m) {
15251 var ac = m.isEven()
15252 if (this.signum() === 0) throw new Error('division by zero')
15253 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
15254 var u = m.clone(),
15255 v = this.clone()
15256 var a = nbv(1),
15257 b = nbv(0),
15258 c = nbv(0),
15259 d = nbv(1)
15260 while (u.signum() != 0) {
15261 while (u.isEven()) {
15262 u.rShiftTo(1, u)
15263 if (ac) {
15264 if (!a.isEven() || !b.isEven()) {
15265 a.addTo(this, a)
15266 b.subTo(m, b)
15267 }
15268 a.rShiftTo(1, a)
15269 } else if (!b.isEven()) b.subTo(m, b)
15270 b.rShiftTo(1, b)
8b095871 15271 }
9987f0c1
IC
15272 while (v.isEven()) {
15273 v.rShiftTo(1, v)
15274 if (ac) {
15275 if (!c.isEven() || !d.isEven()) {
15276 c.addTo(this, c)
15277 d.subTo(m, d)
8b095871 15278 }
9987f0c1
IC
15279 c.rShiftTo(1, c)
15280 } else if (!d.isEven()) d.subTo(m, d)
15281 d.rShiftTo(1, d)
8b095871 15282 }
9987f0c1
IC
15283 if (u.compareTo(v) >= 0) {
15284 u.subTo(v, u)
15285 if (ac) a.subTo(c, a)
15286 b.subTo(d, b)
8b095871 15287 } else {
9987f0c1
IC
15288 v.subTo(u, v)
15289 if (ac) c.subTo(a, c)
15290 d.subTo(b, d)
8b095871
IC
15291 }
15292 }
9987f0c1
IC
15293 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
15294 while (d.compareTo(m) >= 0) d.subTo(m, d)
15295 while (d.signum() < 0) d.addTo(m, d)
15296 return d
15297}
8b095871 15298
9987f0c1
IC
15299var lowprimes = [
15300 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
15301 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
15302 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
15303 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
15304 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
15305 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
15306 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
15307 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
15308 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
15309 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
15310 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
15311]
8b095871 15312
9987f0c1 15313var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
8b095871 15314
9987f0c1
IC
15315// (public) test primality with certainty >= 1-.5^t
15316function bnIsProbablePrime(t) {
15317 var i, x = this.abs()
15318 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
15319 for (i = 0; i < lowprimes.length; ++i)
15320 if (x[0] == lowprimes[i]) return true
15321 return false
8b095871 15322 }
9987f0c1
IC
15323 if (x.isEven()) return false
15324 i = 1
15325 while (i < lowprimes.length) {
15326 var m = lowprimes[i],
15327 j = i + 1
15328 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
15329 m = x.modInt(m)
15330 while (i < j) if (m % lowprimes[i++] == 0) return false
15331 }
15332 return x.millerRabin(t)
15333}
8b095871 15334
9987f0c1
IC
15335// (protected) true if probably prime (HAC 4.24, Miller-Rabin)
15336function bnpMillerRabin(t) {
15337 var n1 = this.subtract(BigInteger.ONE)
15338 var k = n1.getLowestSetBit()
15339 if (k <= 0) return false
15340 var r = n1.shiftRight(k)
15341 t = (t + 1) >> 1
15342 if (t > lowprimes.length) t = lowprimes.length
15343 var a = new BigInteger(null)
15344 var j, bases = []
15345 for (var i = 0; i < t; ++i) {
15346 for (;;) {
15347 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
15348 if (bases.indexOf(j) == -1) break
15349 }
15350 bases.push(j)
15351 a.fromInt(j)
15352 var y = a.modPow(r, this)
15353 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
15354 var j = 1
15355 while (j++ < k && y.compareTo(n1) != 0) {
15356 y = y.modPowInt(2, this)
15357 if (y.compareTo(BigInteger.ONE) == 0) return false
8b095871 15358 }
9987f0c1 15359 if (y.compareTo(n1) != 0) return false
8b095871 15360 }
8b095871 15361 }
9987f0c1
IC
15362 return true
15363}
8b095871 15364
9987f0c1
IC
15365// protected
15366proto.chunkSize = bnpChunkSize
15367proto.toRadix = bnpToRadix
15368proto.fromRadix = bnpFromRadix
15369proto.fromNumber = bnpFromNumber
15370proto.bitwiseTo = bnpBitwiseTo
15371proto.changeBit = bnpChangeBit
15372proto.addTo = bnpAddTo
15373proto.dMultiply = bnpDMultiply
15374proto.dAddOffset = bnpDAddOffset
15375proto.multiplyLowerTo = bnpMultiplyLowerTo
15376proto.multiplyUpperTo = bnpMultiplyUpperTo
15377proto.modInt = bnpModInt
15378proto.millerRabin = bnpMillerRabin
8b095871 15379
9987f0c1
IC
15380// public
15381proto.clone = bnClone
15382proto.intValue = bnIntValue
15383proto.byteValue = bnByteValue
15384proto.shortValue = bnShortValue
15385proto.signum = bnSigNum
15386proto.toByteArray = bnToByteArray
15387proto.equals = bnEquals
15388proto.min = bnMin
15389proto.max = bnMax
15390proto.and = bnAnd
15391proto.or = bnOr
15392proto.xor = bnXor
15393proto.andNot = bnAndNot
15394proto.not = bnNot
15395proto.shiftLeft = bnShiftLeft
15396proto.shiftRight = bnShiftRight
15397proto.getLowestSetBit = bnGetLowestSetBit
15398proto.bitCount = bnBitCount
15399proto.testBit = bnTestBit
15400proto.setBit = bnSetBit
15401proto.clearBit = bnClearBit
15402proto.flipBit = bnFlipBit
15403proto.add = bnAdd
15404proto.subtract = bnSubtract
15405proto.multiply = bnMultiply
15406proto.divide = bnDivide
15407proto.remainder = bnRemainder
15408proto.divideAndRemainder = bnDivideAndRemainder
15409proto.modPow = bnModPow
15410proto.modInverse = bnModInverse
15411proto.pow = bnPow
15412proto.gcd = bnGCD
15413proto.isProbablePrime = bnIsProbablePrime
8b095871 15414
9987f0c1
IC
15415// JSBN-specific extension
15416proto.square = bnSquare
15417
15418// constants
15419BigInteger.ZERO = nbv(0)
15420BigInteger.ONE = nbv(1)
15421BigInteger.valueOf = nbv
8b095871 15422
9987f0c1
IC
15423module.exports = BigInteger
15424
15425},{"../package.json":38}],36:[function(require,module,exports){
15426(function (Buffer){
15427// FIXME: Kind of a weird way to throw exceptions, consider removing
15428var assert = require('assert')
15429var BigInteger = require('./bigi')
8b095871
IC
15430
15431/**
9987f0c1 15432 * Turns a byte array into a big integer.
8b095871 15433 *
9987f0c1
IC
15434 * This function will interpret a byte array as a big integer in big
15435 * endian notation.
8b095871 15436 */
9987f0c1
IC
15437BigInteger.fromByteArrayUnsigned = function(byteArray) {
15438 // BigInteger expects a DER integer conformant byte array
15439 if (byteArray[0] & 0x80) {
15440 return new BigInteger([0].concat(byteArray))
8b095871 15441 }
8b095871 15442
9987f0c1
IC
15443 return new BigInteger(byteArray)
15444}
8b095871 15445
9987f0c1
IC
15446/**
15447 * Returns a byte array representation of the big integer.
15448 *
15449 * This returns the absolute of the contained value in big endian
15450 * form. A value of zero results in an empty array.
15451 */
15452BigInteger.prototype.toByteArrayUnsigned = function() {
15453 var byteArray = this.toByteArray()
15454 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
15455}
8b095871 15456
9987f0c1
IC
15457BigInteger.fromDERInteger = function(byteArray) {
15458 return new BigInteger(byteArray)
15459}
8b095871 15460
9987f0c1
IC
15461/*
15462 * Converts BigInteger to a DER integer representation.
15463 *
15464 * The format for this value uses the most significant bit as a sign
15465 * bit. If the most significant bit is already set and the integer is
15466 * positive, a 0x00 is prepended.
15467 *
15468 * Examples:
15469 *
15470 * 0 => 0x00
15471 * 1 => 0x01
15472 * -1 => 0xff
15473 * 127 => 0x7f
15474 * -127 => 0x81
15475 * 128 => 0x0080
15476 * -128 => 0x80
15477 * 255 => 0x00ff
15478 * -255 => 0xff01
15479 * 16300 => 0x3fac
15480 * -16300 => 0xc054
15481 * 62300 => 0x00f35c
15482 * -62300 => 0xff0ca4
15483*/
15484BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
8b095871 15485
9987f0c1
IC
15486BigInteger.fromBuffer = function(buffer) {
15487 // BigInteger expects a DER integer conformant byte array
15488 if (buffer[0] & 0x80) {
15489 var byteArray = Array.prototype.slice.call(buffer)
8b095871 15490
9987f0c1 15491 return new BigInteger([0].concat(byteArray))
8b095871 15492 }
9987f0c1
IC
15493
15494 return new BigInteger(buffer)
8b095871
IC
15495}
15496
9987f0c1
IC
15497BigInteger.fromHex = function(hex) {
15498 if (hex === '') return BigInteger.ZERO
8b095871 15499
9987f0c1
IC
15500 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
15501 assert.equal(hex.length % 2, 0, 'Incomplete hex')
15502 return new BigInteger(hex, 16)
8b095871
IC
15503}
15504
9987f0c1
IC
15505BigInteger.prototype.toBuffer = function(size) {
15506 var byteArray = this.toByteArrayUnsigned()
15507 var zeros = []
8b095871 15508
9987f0c1
IC
15509 var padding = size - byteArray.length
15510 while (zeros.length < padding) zeros.push(0)
8b095871 15511
9987f0c1
IC
15512 return new Buffer(zeros.concat(byteArray))
15513}
8b095871 15514
9987f0c1
IC
15515BigInteger.prototype.toHex = function(size) {
15516 return this.toBuffer(size).toString('hex')
8b095871
IC
15517}
15518
9987f0c1
IC
15519}).call(this,require("buffer").Buffer)
15520},{"./bigi":35,"assert":1,"buffer":4}],37:[function(require,module,exports){
15521var BigInteger = require('./bigi')
8b095871 15522
9987f0c1
IC
15523//addons
15524require('./convert')
15525
15526module.exports = BigInteger
15527},{"./bigi":35,"./convert":36}],38:[function(require,module,exports){
15528module.exports={
15529 "_args": [
15530 [
15531 "bigi",
15532 "/home/ian/git/bitcoin/bitcoinjs-lib-browser"
15533 ]
15534 ],
15535 "_from": "bigi@latest",
15536 "_id": "bigi@1.4.2",
15537 "_inCache": true,
15538 "_installable": true,
15539 "_location": "/bigi",
15540 "_nodeVersion": "6.1.0",
15541 "_npmOperationalInternal": {
15542 "host": "packages-12-west.internal.npmjs.com",
15543 "tmp": "tmp/bigi-1.4.2.tgz_1469584192413_0.6801238611806184"
15544 },
15545 "_npmUser": {
15546 "email": "jprichardson@gmail.com",
15547 "name": "jprichardson"
15548 },
15549 "_npmVersion": "3.8.6",
15550 "_phantomChildren": {},
15551 "_requested": {
15552 "name": "bigi",
15553 "raw": "bigi",
15554 "rawSpec": "",
15555 "scope": null,
15556 "spec": "latest",
15557 "type": "tag"
15558 },
15559 "_requiredBy": [
15560 "#USER",
15561 "/bitcoinjs-lib",
15562 "/ecurve"
15563 ],
15564 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz",
15565 "_shasum": "9c665a95f88b8b08fc05cfd731f561859d725825",
15566 "_shrinkwrap": null,
15567 "_spec": "bigi",
15568 "_where": "/home/ian/git/bitcoin/bitcoinjs-lib-browser",
15569 "bugs": {
15570 "url": "https://github.com/cryptocoinjs/bigi/issues"
15571 },
15572 "dependencies": {},
15573 "description": "Big integers.",
15574 "devDependencies": {
15575 "coveralls": "^2.11.2",
15576 "istanbul": "^0.3.5",
15577 "jshint": "^2.5.1",
15578 "mocha": "^2.1.0",
15579 "mochify": "^2.1.0"
15580 },
15581 "directories": {},
15582 "dist": {
15583 "shasum": "9c665a95f88b8b08fc05cfd731f561859d725825",
15584 "tarball": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz"
15585 },
15586 "gitHead": "c25308081c896ff84702303722bf5ecd8b3f78e3",
15587 "homepage": "https://github.com/cryptocoinjs/bigi#readme",
15588 "keywords": [
15589 "cryptography",
15590 "math",
15591 "bitcoin",
15592 "arbitrary",
15593 "precision",
15594 "arithmetic",
15595 "big",
15596 "integer",
15597 "int",
15598 "number",
15599 "biginteger",
15600 "bigint",
15601 "bignumber",
15602 "decimal",
15603 "float"
15604 ],
15605 "main": "./lib/index.js",
15606 "maintainers": [
15607 {
15608 "email": "boydb@midnightdesign.ws",
15609 "name": "midnightlightning"
15610 },
15611 {
15612 "email": "sidazhang89@gmail.com",
15613 "name": "sidazhang"
15614 },
15615 {
15616 "email": "npm@shesek.info",
15617 "name": "nadav"
15618 },
15619 {
15620 "email": "jprichardson@gmail.com",
15621 "name": "jprichardson"
8b095871 15622 }
9987f0c1
IC
15623 ],
15624 "name": "bigi",
15625 "optionalDependencies": {},
15626 "readme": "ERROR: No README data found!",
15627 "repository": {
15628 "type": "git",
15629 "url": "git+https://github.com/cryptocoinjs/bigi.git"
15630 },
15631 "scripts": {
15632 "browser-test": "mochify --wd -R spec",
15633 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
15634 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info",
15635 "jshint": "jshint --config jshint.json lib/*.js ; true",
15636 "test": "_mocha -- test/*.js",
15637 "unit": "mocha"
15638 },
15639 "testling": {
15640 "browsers": [
15641 "ie/9..latest",
15642 "firefox/latest",
15643 "chrome/latest",
15644 "safari/6.0..latest",
15645 "iphone/6.0..latest",
15646 "android-browser/4.2..latest"
15647 ],
15648 "files": "test/*.js",
15649 "harness": "mocha"
15650 },
15651 "version": "1.4.2"
15652}
8b095871 15653
9987f0c1
IC
15654},{}],39:[function(require,module,exports){
15655// Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki
15656// Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
15657// NOTE: SIGHASH byte ignored AND restricted, truncate before use
8b095871 15658
9987f0c1 15659var Buffer = require('safe-buffer').Buffer
8b095871 15660
9987f0c1
IC
15661function check (buffer) {
15662 if (buffer.length < 8) return false
15663 if (buffer.length > 72) return false
15664 if (buffer[0] !== 0x30) return false
15665 if (buffer[1] !== buffer.length - 2) return false
15666 if (buffer[2] !== 0x02) return false
8b095871 15667
9987f0c1
IC
15668 var lenR = buffer[3]
15669 if (lenR === 0) return false
15670 if (5 + lenR >= buffer.length) return false
15671 if (buffer[4 + lenR] !== 0x02) return false
8b095871 15672
9987f0c1
IC
15673 var lenS = buffer[5 + lenR]
15674 if (lenS === 0) return false
15675 if ((6 + lenR + lenS) !== buffer.length) return false
8b095871 15676
9987f0c1
IC
15677 if (buffer[4] & 0x80) return false
15678 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false
8b095871 15679
9987f0c1
IC
15680 if (buffer[lenR + 6] & 0x80) return false
15681 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false
15682 return true
15683}
8b095871 15684
9987f0c1
IC
15685function decode (buffer) {
15686 if (buffer.length < 8) throw new Error('DER sequence length is too short')
15687 if (buffer.length > 72) throw new Error('DER sequence length is too long')
15688 if (buffer[0] !== 0x30) throw new Error('Expected DER sequence')
15689 if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid')
15690 if (buffer[2] !== 0x02) throw new Error('Expected DER integer')
8b095871 15691
9987f0c1
IC
15692 var lenR = buffer[3]
15693 if (lenR === 0) throw new Error('R length is zero')
15694 if (5 + lenR >= buffer.length) throw new Error('R length is too long')
15695 if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)')
8b095871 15696
9987f0c1
IC
15697 var lenS = buffer[5 + lenR]
15698 if (lenS === 0) throw new Error('S length is zero')
15699 if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid')
8b095871 15700
9987f0c1
IC
15701 if (buffer[4] & 0x80) throw new Error('R value is negative')
15702 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded')
8b095871 15703
9987f0c1
IC
15704 if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative')
15705 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded')
8b095871 15706
9987f0c1
IC
15707 // non-BIP66 - extract R, S values
15708 return {
15709 r: buffer.slice(4, 4 + lenR),
15710 s: buffer.slice(6 + lenR)
8b095871 15711 }
9987f0c1 15712}
8b095871 15713
9987f0c1
IC
15714/*
15715 * Expects r and s to be positive DER integers.
15716 *
15717 * The DER format uses the most significant bit as a sign bit (& 0x80).
15718 * If the significant bit is set AND the integer is positive, a 0x00 is prepended.
15719 *
15720 * Examples:
15721 *
15722 * 0 => 0x00
15723 * 1 => 0x01
15724 * -1 => 0xff
15725 * 127 => 0x7f
15726 * -127 => 0x81
15727 * 128 => 0x0080
15728 * -128 => 0x80
15729 * 255 => 0x00ff
15730 * -255 => 0xff01
15731 * 16300 => 0x3fac
15732 * -16300 => 0xc054
15733 * 62300 => 0x00f35c
15734 * -62300 => 0xff0ca4
15735*/
15736function encode (r, s) {
15737 var lenR = r.length
15738 var lenS = s.length
15739 if (lenR === 0) throw new Error('R length is zero')
15740 if (lenS === 0) throw new Error('S length is zero')
15741 if (lenR > 33) throw new Error('R length is too long')
15742 if (lenS > 33) throw new Error('S length is too long')
15743 if (r[0] & 0x80) throw new Error('R value is negative')
15744 if (s[0] & 0x80) throw new Error('S value is negative')
15745 if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded')
15746 if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded')
8b095871 15747
9987f0c1 15748 var signature = Buffer.allocUnsafe(6 + lenR + lenS)
8b095871 15749
9987f0c1
IC
15750 // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
15751 signature[0] = 0x30
15752 signature[1] = signature.length - 2
15753 signature[2] = 0x02
15754 signature[3] = r.length
15755 r.copy(signature, 4)
15756 signature[4 + lenR] = 0x02
15757 signature[5 + lenR] = s.length
15758 s.copy(signature, 6 + lenR)
8b095871 15759
9987f0c1 15760 return signature
8b095871
IC
15761}
15762
9987f0c1
IC
15763module.exports = {
15764 check: check,
15765 decode: decode,
15766 encode: encode
8b095871
IC
15767}
15768
9987f0c1
IC
15769},{"safe-buffer":98}],40:[function(require,module,exports){
15770module.exports={
15771 "OP_FALSE": 0,
15772 "OP_0": 0,
15773 "OP_PUSHDATA1": 76,
15774 "OP_PUSHDATA2": 77,
15775 "OP_PUSHDATA4": 78,
15776 "OP_1NEGATE": 79,
15777 "OP_RESERVED": 80,
15778 "OP_1": 81,
15779 "OP_TRUE": 81,
15780 "OP_2": 82,
15781 "OP_3": 83,
15782 "OP_4": 84,
15783 "OP_5": 85,
15784 "OP_6": 86,
15785 "OP_7": 87,
15786 "OP_8": 88,
15787 "OP_9": 89,
15788 "OP_10": 90,
15789 "OP_11": 91,
15790 "OP_12": 92,
15791 "OP_13": 93,
15792 "OP_14": 94,
15793 "OP_15": 95,
15794 "OP_16": 96,
15795
15796 "OP_NOP": 97,
15797 "OP_VER": 98,
15798 "OP_IF": 99,
15799 "OP_NOTIF": 100,
15800 "OP_VERIF": 101,
15801 "OP_VERNOTIF": 102,
15802 "OP_ELSE": 103,
15803 "OP_ENDIF": 104,
15804 "OP_VERIFY": 105,
15805 "OP_RETURN": 106,
15806
15807 "OP_TOALTSTACK": 107,
15808 "OP_FROMALTSTACK": 108,
15809 "OP_2DROP": 109,
15810 "OP_2DUP": 110,
15811 "OP_3DUP": 111,
15812 "OP_2OVER": 112,
15813 "OP_2ROT": 113,
15814 "OP_2SWAP": 114,
15815 "OP_IFDUP": 115,
15816 "OP_DEPTH": 116,
15817 "OP_DROP": 117,
15818 "OP_DUP": 118,
15819 "OP_NIP": 119,
15820 "OP_OVER": 120,
15821 "OP_PICK": 121,
15822 "OP_ROLL": 122,
15823 "OP_ROT": 123,
15824 "OP_SWAP": 124,
15825 "OP_TUCK": 125,
15826
15827 "OP_CAT": 126,
15828 "OP_SUBSTR": 127,
15829 "OP_LEFT": 128,
15830 "OP_RIGHT": 129,
15831 "OP_SIZE": 130,
15832
15833 "OP_INVERT": 131,
15834 "OP_AND": 132,
15835 "OP_OR": 133,
15836 "OP_XOR": 134,
15837 "OP_EQUAL": 135,
15838 "OP_EQUALVERIFY": 136,
15839 "OP_RESERVED1": 137,
15840 "OP_RESERVED2": 138,
15841
15842 "OP_1ADD": 139,
15843 "OP_1SUB": 140,
15844 "OP_2MUL": 141,
15845 "OP_2DIV": 142,
15846 "OP_NEGATE": 143,
15847 "OP_ABS": 144,
15848 "OP_NOT": 145,
15849 "OP_0NOTEQUAL": 146,
15850 "OP_ADD": 147,
15851 "OP_SUB": 148,
15852 "OP_MUL": 149,
15853 "OP_DIV": 150,
15854 "OP_MOD": 151,
15855 "OP_LSHIFT": 152,
15856 "OP_RSHIFT": 153,
15857
15858 "OP_BOOLAND": 154,
15859 "OP_BOOLOR": 155,
15860 "OP_NUMEQUAL": 156,
15861 "OP_NUMEQUALVERIFY": 157,
15862 "OP_NUMNOTEQUAL": 158,
15863 "OP_LESSTHAN": 159,
15864 "OP_GREATERTHAN": 160,
15865 "OP_LESSTHANOREQUAL": 161,
15866 "OP_GREATERTHANOREQUAL": 162,
15867 "OP_MIN": 163,
15868 "OP_MAX": 164,
15869
15870 "OP_WITHIN": 165,
15871
15872 "OP_RIPEMD160": 166,
15873 "OP_SHA1": 167,
15874 "OP_SHA256": 168,
15875 "OP_HASH160": 169,
15876 "OP_HASH256": 170,
15877 "OP_CODESEPARATOR": 171,
15878 "OP_CHECKSIG": 172,
15879 "OP_CHECKSIGVERIFY": 173,
15880 "OP_CHECKMULTISIG": 174,
15881 "OP_CHECKMULTISIGVERIFY": 175,
15882
15883 "OP_NOP1": 176,
15884 "OP_NOP2": 177,
15885 "OP_CHECKLOCKTIMEVERIFY": 177,
15886
15887 "OP_NOP3": 178,
15888 "OP_NOP4": 179,
15889 "OP_NOP5": 180,
15890 "OP_NOP6": 181,
15891 "OP_NOP7": 182,
15892 "OP_NOP8": 183,
15893 "OP_NOP9": 184,
15894 "OP_NOP10": 185,
15895
15896 "OP_PUBKEYHASH": 253,
15897 "OP_PUBKEY": 254,
15898 "OP_INVALIDOPCODE": 255
15899}
15900
15901},{}],41:[function(require,module,exports){
15902var OPS = require('./index.json')
15903
15904var map = {}
15905for (var op in OPS) {
15906 var code = OPS[op]
15907 map[code] = op
15908}
15909
15910module.exports = map
15911
15912},{"./index.json":40}],42:[function(require,module,exports){
15913var Buffer = require('safe-buffer').Buffer
15914var bs58check = require('bs58check')
15915var bscript = require('./script')
15916var networks = require('./networks')
15917var typeforce = require('typeforce')
15918var types = require('./types')
8b095871 15919
9987f0c1
IC
15920function fromBase58Check (address) {
15921 var payload = bs58check.decode(address)
15922 if (payload.length < 21) throw new TypeError(address + ' is too short')
15923 if (payload.length > 21) throw new TypeError(address + ' is too long')
8b095871 15924
9987f0c1
IC
15925 var version = payload.readUInt8(0)
15926 var hash = payload.slice(1)
8b095871 15927
9987f0c1 15928 return { hash: hash, version: version }
8b095871
IC
15929}
15930
9987f0c1
IC
15931function toBase58Check (hash, version) {
15932 typeforce(types.tuple(types.Hash160bit, types.UInt8), arguments)
8b095871 15933
9987f0c1
IC
15934 var payload = Buffer.allocUnsafe(21)
15935 payload.writeUInt8(version, 0)
15936 hash.copy(payload, 1)
8b095871 15937
9987f0c1 15938 return bs58check.encode(payload)
8b095871
IC
15939}
15940
9987f0c1
IC
15941function fromOutputScript (outputScript, network) {
15942 network = network || networks.bitcoin
8b095871 15943
9987f0c1
IC
15944 if (bscript.pubKeyHash.output.check(outputScript)) return toBase58Check(bscript.compile(outputScript).slice(3, 23), network.pubKeyHash)
15945 if (bscript.scriptHash.output.check(outputScript)) return toBase58Check(bscript.compile(outputScript).slice(2, 22), network.scriptHash)
8b095871 15946
9987f0c1 15947 throw new Error(bscript.toASM(outputScript) + ' has no matching Address')
8b095871
IC
15948}
15949
9987f0c1
IC
15950function toOutputScript (address, network) {
15951 network = network || networks.bitcoin
8b095871 15952
9987f0c1
IC
15953 var decode = fromBase58Check(address)
15954 if (decode.version === network.pubKeyHash) return bscript.pubKeyHash.output.encode(decode.hash)
15955 if (decode.version === network.scriptHash) return bscript.scriptHash.output.encode(decode.hash)
8b095871 15956
9987f0c1 15957 throw new Error(address + ' has no matching Script')
8b095871 15958}
8b095871 15959
9987f0c1
IC
15960module.exports = {
15961 fromBase58Check: fromBase58Check,
15962 fromOutputScript: fromOutputScript,
15963 toBase58Check: toBase58Check,
15964 toOutputScript: toOutputScript
8b095871 15965}
8b095871 15966
9987f0c1
IC
15967},{"./networks":51,"./script":52,"./types":78,"bs58check":80,"safe-buffer":98,"typeforce":109}],43:[function(require,module,exports){
15968var Buffer = require('safe-buffer').Buffer
15969var bcrypto = require('./crypto')
15970var fastMerkleRoot = require('merkle-lib/fastRoot')
15971var typeforce = require('typeforce')
15972var types = require('./types')
15973var varuint = require('varuint-bitcoin')
8b095871 15974
9987f0c1 15975var Transaction = require('./transaction')
8b095871 15976
9987f0c1
IC
15977function Block () {
15978 this.version = 1
15979 this.prevHash = null
15980 this.merkleRoot = null
15981 this.timestamp = 0
15982 this.bits = 0
15983 this.nonce = 0
8b095871 15984}
8b095871 15985
9987f0c1
IC
15986Block.fromBuffer = function (buffer) {
15987 if (buffer.length < 80) throw new Error('Buffer too small (< 80 bytes)')
8b095871 15988
9987f0c1
IC
15989 var offset = 0
15990 function readSlice (n) {
15991 offset += n
15992 return buffer.slice(offset - n, offset)
15993 }
8b095871 15994
9987f0c1
IC
15995 function readUInt32 () {
15996 var i = buffer.readUInt32LE(offset)
15997 offset += 4
15998 return i
15999 }
8b095871 16000
9987f0c1
IC
16001 function readInt32 () {
16002 var i = buffer.readInt32LE(offset)
16003 offset += 4
16004 return i
16005 }
8b095871 16006
9987f0c1
IC
16007 var block = new Block()
16008 block.version = readInt32()
16009 block.prevHash = readSlice(32)
16010 block.merkleRoot = readSlice(32)
16011 block.timestamp = readUInt32()
16012 block.bits = readUInt32()
16013 block.nonce = readUInt32()
8b095871 16014
9987f0c1 16015 if (buffer.length === 80) return block
8b095871 16016
9987f0c1
IC
16017 function readVarInt () {
16018 var vi = varuint.decode(buffer, offset)
16019 offset += varuint.decode.bytes
16020 return vi
16021 }
8b095871 16022
9987f0c1
IC
16023 function readTransaction () {
16024 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
16025 offset += tx.byteLength()
16026 return tx
16027 }
8b095871 16028
9987f0c1
IC
16029 var nTransactions = readVarInt()
16030 block.transactions = []
8b095871 16031
9987f0c1
IC
16032 for (var i = 0; i < nTransactions; ++i) {
16033 var tx = readTransaction()
16034 block.transactions.push(tx)
16035 }
8b095871 16036
9987f0c1 16037 return block
8b095871
IC
16038}
16039
9987f0c1
IC
16040Block.prototype.byteLength = function (headersOnly) {
16041 if (headersOnly || !this.transactions) return 80
8b095871 16042
9987f0c1
IC
16043 return 80 + varuint.encodingLength(this.transactions.length) + this.transactions.reduce(function (a, x) {
16044 return a + x.byteLength()
16045 }, 0)
8b095871
IC
16046}
16047
9987f0c1
IC
16048Block.fromHex = function (hex) {
16049 return Block.fromBuffer(Buffer.from(hex, 'hex'))
16050}
8b095871 16051
9987f0c1
IC
16052Block.prototype.getHash = function () {
16053 return bcrypto.hash256(this.toBuffer(true))
16054}
8b095871 16055
9987f0c1
IC
16056Block.prototype.getId = function () {
16057 return this.getHash().reverse().toString('hex')
8b095871
IC
16058}
16059
9987f0c1
IC
16060Block.prototype.getUTCDate = function () {
16061 var date = new Date(0) // epoch
16062 date.setUTCSeconds(this.timestamp)
8b095871 16063
9987f0c1 16064 return date
8b095871 16065}
8b095871 16066
9987f0c1
IC
16067// TODO: buffer, offset compatibility
16068Block.prototype.toBuffer = function (headersOnly) {
16069 var buffer = Buffer.allocUnsafe(this.byteLength(headersOnly))
16070
16071 var offset = 0
16072 function writeSlice (slice) {
16073 slice.copy(buffer, offset)
16074 offset += slice.length
16075 }
8b095871 16076
9987f0c1
IC
16077 function writeInt32 (i) {
16078 buffer.writeInt32LE(i, offset)
16079 offset += 4
16080 }
16081 function writeUInt32 (i) {
16082 buffer.writeUInt32LE(i, offset)
16083 offset += 4
16084 }
8b095871 16085
9987f0c1
IC
16086 writeInt32(this.version)
16087 writeSlice(this.prevHash)
16088 writeSlice(this.merkleRoot)
16089 writeUInt32(this.timestamp)
16090 writeUInt32(this.bits)
16091 writeUInt32(this.nonce)
8b095871 16092
9987f0c1 16093 if (headersOnly || !this.transactions) return buffer
8b095871 16094
9987f0c1
IC
16095 varuint.encode(this.transactions.length, buffer, offset)
16096 offset += varuint.encode.bytes
8b095871 16097
9987f0c1
IC
16098 this.transactions.forEach(function (tx) {
16099 var txSize = tx.byteLength() // TODO: extract from toBuffer?
16100 tx.toBuffer(buffer, offset)
16101 offset += txSize
16102 })
8b095871 16103
9987f0c1
IC
16104 return buffer
16105}
8b095871 16106
9987f0c1
IC
16107Block.prototype.toHex = function (headersOnly) {
16108 return this.toBuffer(headersOnly).toString('hex')
16109}
8b095871 16110
9987f0c1
IC
16111Block.calculateTarget = function (bits) {
16112 var exponent = ((bits & 0xff000000) >> 24) - 3
16113 var mantissa = bits & 0x007fffff
16114 var target = Buffer.alloc(32, 0)
16115 target.writeUInt32BE(mantissa, 28 - exponent)
16116 return target
8b095871
IC
16117}
16118
9987f0c1
IC
16119Block.calculateMerkleRoot = function (transactions) {
16120 typeforce([{ getHash: types.Function }], transactions)
16121 if (transactions.length === 0) throw TypeError('Cannot compute merkle root for zero transactions')
8b095871 16122
9987f0c1
IC
16123 var hashes = transactions.map(function (transaction) {
16124 return transaction.getHash()
16125 })
8b095871 16126
9987f0c1
IC
16127 return fastMerkleRoot(hashes, bcrypto.hash256)
16128}
8b095871 16129
9987f0c1
IC
16130Block.prototype.checkMerkleRoot = function () {
16131 if (!this.transactions) return false
8b095871 16132
9987f0c1
IC
16133 var actualMerkleRoot = Block.calculateMerkleRoot(this.transactions)
16134 return this.merkleRoot.compare(actualMerkleRoot) === 0
16135}
8b095871 16136
9987f0c1
IC
16137Block.prototype.checkProofOfWork = function () {
16138 var hash = this.getHash().reverse()
16139 var target = Block.calculateTarget(this.bits)
8b095871 16140
9987f0c1
IC
16141 return hash.compare(target) <= 0
16142}
8b095871 16143
9987f0c1 16144module.exports = Block
8b095871 16145
9987f0c1
IC
16146},{"./crypto":45,"./transaction":76,"./types":78,"merkle-lib/fastRoot":94,"safe-buffer":98,"typeforce":109,"varuint-bitcoin":111}],44:[function(require,module,exports){
16147var pushdata = require('pushdata-bitcoin')
16148var varuint = require('varuint-bitcoin')
8b095871 16149
9987f0c1
IC
16150// https://github.com/feross/buffer/blob/master/index.js#L1127
16151function verifuint (value, max) {
16152 if (typeof value !== 'number') throw new Error('cannot write a non-number as a number')
16153 if (value < 0) throw new Error('specified a negative value for writing an unsigned value')
16154 if (value > max) throw new Error('RangeError: value out of range')
16155 if (Math.floor(value) !== value) throw new Error('value has a fractional component')
8b095871
IC
16156}
16157
9987f0c1
IC
16158function readUInt64LE (buffer, offset) {
16159 var a = buffer.readUInt32LE(offset)
16160 var b = buffer.readUInt32LE(offset + 4)
16161 b *= 0x100000000
8b095871 16162
9987f0c1 16163 verifuint(b + a, 0x001fffffffffffff)
8b095871 16164
9987f0c1 16165 return b + a
8b095871
IC
16166}
16167
9987f0c1
IC
16168function writeUInt64LE (buffer, value, offset) {
16169 verifuint(value, 0x001fffffffffffff)
8b095871 16170
9987f0c1
IC
16171 buffer.writeInt32LE(value & -1, offset)
16172 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
16173 return offset + 8
8b095871
IC
16174}
16175
9987f0c1
IC
16176// TODO: remove in 4.0.0?
16177function readVarInt (buffer, offset) {
16178 var result = varuint.decode(buffer, offset)
8b095871 16179
9987f0c1
IC
16180 return {
16181 number: result,
16182 size: varuint.decode.bytes
8b095871 16183 }
9987f0c1 16184}
8b095871 16185
9987f0c1
IC
16186// TODO: remove in 4.0.0?
16187function writeVarInt (buffer, number, offset) {
16188 varuint.encode(number, buffer, offset)
16189 return varuint.encode.bytes
8b095871
IC
16190}
16191
16192module.exports = {
9987f0c1
IC
16193 pushDataSize: pushdata.encodingLength,
16194 readPushDataInt: pushdata.decode,
16195 readUInt64LE: readUInt64LE,
16196 readVarInt: readVarInt,
16197 varIntBuffer: varuint.encode,
16198 varIntSize: varuint.encodingLength,
16199 writePushDataInt: pushdata.encode,
16200 writeUInt64LE: writeUInt64LE,
16201 writeVarInt: writeVarInt
8b095871
IC
16202}
16203
9987f0c1
IC
16204},{"pushdata-bitcoin":95,"varuint-bitcoin":111}],45:[function(require,module,exports){
16205var createHash = require('create-hash')
8b095871 16206
9987f0c1
IC
16207function ripemd160 (buffer) {
16208 return createHash('rmd160').update(buffer).digest()
16209}
8b095871 16210
9987f0c1
IC
16211function sha1 (buffer) {
16212 return createHash('sha1').update(buffer).digest()
8b095871
IC
16213}
16214
9987f0c1
IC
16215function sha256 (buffer) {
16216 return createHash('sha256').update(buffer).digest()
16217}
8b095871 16218
9987f0c1
IC
16219function hash160 (buffer) {
16220 return ripemd160(sha256(buffer))
16221}
8b095871 16222
9987f0c1
IC
16223function hash256 (buffer) {
16224 return sha256(sha256(buffer))
8b095871
IC
16225}
16226
9987f0c1
IC
16227module.exports = {
16228 hash160: hash160,
16229 hash256: hash256,
16230 ripemd160: ripemd160,
16231 sha1: sha1,
16232 sha256: sha256
8b095871
IC
16233}
16234
9987f0c1
IC
16235},{"create-hash":82}],46:[function(require,module,exports){
16236var Buffer = require('safe-buffer').Buffer
16237var createHmac = require('create-hmac')
16238var typeforce = require('typeforce')
16239var types = require('./types')
8b095871 16240
9987f0c1
IC
16241var BigInteger = require('bigi')
16242var ECSignature = require('./ecsignature')
8b095871 16243
9987f0c1
IC
16244var ZERO = Buffer.alloc(1, 0)
16245var ONE = Buffer.alloc(1, 1)
8b095871 16246
9987f0c1
IC
16247var ecurve = require('ecurve')
16248var secp256k1 = ecurve.getCurveByName('secp256k1')
8b095871 16249
9987f0c1
IC
16250// https://tools.ietf.org/html/rfc6979#section-3.2
16251function deterministicGenerateK (hash, x, checkSig) {
16252 typeforce(types.tuple(
16253 types.Hash256bit,
16254 types.Buffer256bit,
16255 types.Function
16256 ), arguments)
8b095871 16257
9987f0c1
IC
16258 // Step A, ignored as hash already provided
16259 // Step B
16260 // Step C
16261 var k = Buffer.alloc(32, 0)
16262 var v = Buffer.alloc(32, 1)
8b095871 16263
9987f0c1
IC
16264 // Step D
16265 k = createHmac('sha256', k)
16266 .update(v)
16267 .update(ZERO)
16268 .update(x)
16269 .update(hash)
16270 .digest()
8b095871 16271
9987f0c1
IC
16272 // Step E
16273 v = createHmac('sha256', k).update(v).digest()
8b095871 16274
9987f0c1
IC
16275 // Step F
16276 k = createHmac('sha256', k)
16277 .update(v)
16278 .update(ONE)
16279 .update(x)
16280 .update(hash)
16281 .digest()
8b095871 16282
9987f0c1
IC
16283 // Step G
16284 v = createHmac('sha256', k).update(v).digest()
8b095871 16285
9987f0c1
IC
16286 // Step H1/H2a, ignored as tlen === qlen (256 bit)
16287 // Step H2b
16288 v = createHmac('sha256', k).update(v).digest()
8b095871 16289
9987f0c1 16290 var T = BigInteger.fromBuffer(v)
8b095871 16291
9987f0c1
IC
16292 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
16293 while (T.signum() <= 0 || T.compareTo(secp256k1.n) >= 0 || !checkSig(T)) {
16294 k = createHmac('sha256', k)
16295 .update(v)
16296 .update(ZERO)
16297 .digest()
16298
16299 v = createHmac('sha256', k).update(v).digest()
16300
16301 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
16302 // Step H2b again
16303 v = createHmac('sha256', k).update(v).digest()
16304 T = BigInteger.fromBuffer(v)
8b095871
IC
16305 }
16306
9987f0c1 16307 return T
8b095871
IC
16308}
16309
9987f0c1 16310var N_OVER_TWO = secp256k1.n.shiftRight(1)
8b095871 16311
9987f0c1
IC
16312function sign (hash, d) {
16313 typeforce(types.tuple(types.Hash256bit, types.BigInt), arguments)
8b095871 16314
9987f0c1
IC
16315 var x = d.toBuffer(32)
16316 var e = BigInteger.fromBuffer(hash)
16317 var n = secp256k1.n
16318 var G = secp256k1.G
8b095871 16319
9987f0c1
IC
16320 var r, s
16321 deterministicGenerateK(hash, x, function (k) {
16322 var Q = G.multiply(k)
8b095871 16323
9987f0c1 16324 if (secp256k1.isInfinity(Q)) return false
8b095871 16325
9987f0c1
IC
16326 r = Q.affineX.mod(n)
16327 if (r.signum() === 0) return false
8b095871 16328
9987f0c1
IC
16329 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
16330 if (s.signum() === 0) return false
8b095871 16331
9987f0c1
IC
16332 return true
16333 })
16334
16335 // enforce low S values, see bip62: 'low s values in signatures'
16336 if (s.compareTo(N_OVER_TWO) > 0) {
16337 s = n.subtract(s)
8b095871 16338 }
8b095871 16339
9987f0c1 16340 return new ECSignature(r, s)
8b095871 16341}
8b095871 16342
9987f0c1
IC
16343function verify (hash, signature, Q) {
16344 typeforce(types.tuple(
16345 types.Hash256bit,
16346 types.ECSignature,
16347 types.ECPoint
16348 ), arguments)
8b095871 16349
9987f0c1
IC
16350 var n = secp256k1.n
16351 var G = secp256k1.G
8b095871 16352
9987f0c1
IC
16353 var r = signature.r
16354 var s = signature.s
8b095871 16355
9987f0c1
IC
16356 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
16357 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
16358 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
8b095871 16359
9987f0c1
IC
16360 // 1.4.2 H = Hash(M), already done by the user
16361 // 1.4.3 e = H
16362 var e = BigInteger.fromBuffer(hash)
8b095871 16363
9987f0c1
IC
16364 // Compute s^-1
16365 var sInv = s.modInverse(n)
8b095871 16366
9987f0c1
IC
16367 // 1.4.4 Compute u1 = es^−1 mod n
16368 // u2 = rs^−1 mod n
16369 var u1 = e.multiply(sInv).mod(n)
16370 var u2 = r.multiply(sInv).mod(n)
8b095871 16371
9987f0c1
IC
16372 // 1.4.5 Compute R = (xR, yR)
16373 // R = u1G + u2Q
16374 var R = G.multiplyTwo(u1, Q, u2)
8b095871 16375
9987f0c1
IC
16376 // 1.4.5 (cont.) Enforce R is not at infinity
16377 if (secp256k1.isInfinity(R)) return false
8b095871 16378
9987f0c1
IC
16379 // 1.4.6 Convert the field element R.x to an integer
16380 var xR = R.affineX
8b095871 16381
9987f0c1
IC
16382 // 1.4.7 Set v = xR mod n
16383 var v = xR.mod(n)
8b095871 16384
9987f0c1
IC
16385 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
16386 return v.equals(r)
8b095871
IC
16387}
16388
9987f0c1
IC
16389module.exports = {
16390 deterministicGenerateK: deterministicGenerateK,
16391 sign: sign,
16392 verify: verify,
8b095871 16393
9987f0c1
IC
16394 // TODO: remove
16395 __curve: secp256k1
16396}
8b095871 16397
9987f0c1
IC
16398},{"./ecsignature":48,"./types":78,"bigi":37,"create-hmac":85,"ecurve":89,"safe-buffer":98,"typeforce":109}],47:[function(require,module,exports){
16399var baddress = require('./address')
16400var bcrypto = require('./crypto')
16401var ecdsa = require('./ecdsa')
16402var randomBytes = require('randombytes')
16403var typeforce = require('typeforce')
16404var types = require('./types')
16405var wif = require('wif')
8b095871 16406
9987f0c1
IC
16407var NETWORKS = require('./networks')
16408var BigInteger = require('bigi')
8b095871 16409
9987f0c1
IC
16410var ecurve = require('ecurve')
16411var secp256k1 = ecdsa.__curve
8b095871 16412
9987f0c1
IC
16413function ECPair (d, Q, options) {
16414 if (options) {
16415 typeforce({
16416 compressed: types.maybe(types.Boolean),
16417 network: types.maybe(types.Network)
16418 }, options)
16419 }
8b095871 16420
9987f0c1 16421 options = options || {}
8b095871 16422
9987f0c1
IC
16423 if (d) {
16424 if (d.signum() <= 0) throw new Error('Private key must be greater than 0')
16425 if (d.compareTo(secp256k1.n) >= 0) throw new Error('Private key must be less than the curve order')
16426 if (Q) throw new TypeError('Unexpected publicKey parameter')
8b095871 16427
9987f0c1
IC
16428 this.d = d
16429 } else {
16430 typeforce(types.ECPoint, Q)
8b095871 16431
9987f0c1 16432 this.__Q = Q
8b095871 16433 }
8b095871 16434
9987f0c1
IC
16435 this.compressed = options.compressed === undefined ? true : options.compressed
16436 this.network = options.network || NETWORKS.bitcoin
8b095871
IC
16437}
16438
9987f0c1
IC
16439Object.defineProperty(ECPair.prototype, 'Q', {
16440 get: function () {
16441 if (!this.__Q && this.d) {
16442 this.__Q = secp256k1.G.multiply(this.d)
16443 }
8b095871 16444
9987f0c1 16445 return this.__Q
8b095871 16446 }
9987f0c1 16447})
8b095871 16448
9987f0c1
IC
16449ECPair.fromPublicKeyBuffer = function (buffer, network) {
16450 var Q = ecurve.Point.decodeFrom(secp256k1, buffer)
8b095871 16451
9987f0c1
IC
16452 return new ECPair(null, Q, {
16453 compressed: Q.compressed,
16454 network: network
16455 })
16456}
8b095871 16457
9987f0c1
IC
16458ECPair.fromWIF = function (string, network) {
16459 var decoded = wif.decode(string)
16460 var version = decoded.version
8b095871 16461
9987f0c1
IC
16462 // list of networks?
16463 if (types.Array(network)) {
16464 network = network.filter(function (x) {
16465 return version === x.wif
16466 }).pop()
16467
16468 if (!network) throw new Error('Unknown network version')
16469
16470 // otherwise, assume a network object (or default to bitcoin)
16471 } else {
16472 network = network || NETWORKS.bitcoin
16473
16474 if (version !== network.wif) throw new Error('Invalid network version')
8b095871
IC
16475 }
16476
9987f0c1
IC
16477 var d = BigInteger.fromBuffer(decoded.privateKey)
16478
16479 return new ECPair(d, null, {
16480 compressed: decoded.compressed,
16481 network: network
16482 })
8b095871
IC
16483}
16484
9987f0c1
IC
16485ECPair.makeRandom = function (options) {
16486 options = options || {}
16487
16488 var rng = options.rng || randomBytes
16489
16490 var d
16491 do {
16492 var buffer = rng(32)
16493 typeforce(types.Buffer256bit, buffer)
16494
16495 d = BigInteger.fromBuffer(buffer)
16496 } while (d.signum() <= 0 || d.compareTo(secp256k1.n) >= 0)
16497
16498 return new ECPair(d, null, options)
8b095871
IC
16499}
16500
9987f0c1
IC
16501ECPair.prototype.getAddress = function () {
16502 return baddress.toBase58Check(bcrypto.hash160(this.getPublicKeyBuffer()), this.getNetwork().pubKeyHash)
8b095871
IC
16503}
16504
9987f0c1
IC
16505ECPair.prototype.getNetwork = function () {
16506 return this.network
8b095871
IC
16507}
16508
9987f0c1
IC
16509ECPair.prototype.getPublicKeyBuffer = function () {
16510 return this.Q.getEncoded(this.compressed)
8b095871
IC
16511}
16512
9987f0c1
IC
16513ECPair.prototype.sign = function (hash) {
16514 if (!this.d) throw new Error('Missing private key')
16515
16516 return ecdsa.sign(hash, this.d)
8b095871
IC
16517}
16518
9987f0c1
IC
16519ECPair.prototype.toWIF = function () {
16520 if (!this.d) throw new Error('Missing private key')
16521
16522 return wif.encode(this.network.wif, this.d.toBuffer(32), this.compressed)
8b095871
IC
16523}
16524
9987f0c1
IC
16525ECPair.prototype.verify = function (hash, signature) {
16526 return ecdsa.verify(hash, signature, this.Q)
16527}
8b095871 16528
9987f0c1 16529module.exports = ECPair
8b095871 16530
9987f0c1
IC
16531},{"./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){
16532(function (Buffer){
16533var bip66 = require('bip66')
16534var typeforce = require('typeforce')
16535var types = require('./types')
8b095871 16536
9987f0c1 16537var BigInteger = require('bigi')
8b095871 16538
9987f0c1
IC
16539function ECSignature (r, s) {
16540 typeforce(types.tuple(types.BigInt, types.BigInt), arguments)
8b095871 16541
9987f0c1
IC
16542 this.r = r
16543 this.s = s
16544}
16545
16546ECSignature.parseCompact = function (buffer) {
16547 if (buffer.length !== 65) throw new Error('Invalid signature length')
16548
16549 var flagByte = buffer.readUInt8(0) - 27
16550 if (flagByte !== (flagByte & 7)) throw new Error('Invalid signature parameter')
16551
16552 var compressed = !!(flagByte & 4)
16553 var recoveryParam = flagByte & 3
16554
16555 var r = BigInteger.fromBuffer(buffer.slice(1, 33))
16556 var s = BigInteger.fromBuffer(buffer.slice(33))
16557
16558 return {
16559 compressed: compressed,
16560 i: recoveryParam,
16561 signature: new ECSignature(r, s)
8b095871 16562 }
9987f0c1 16563}
8b095871 16564
9987f0c1
IC
16565ECSignature.fromDER = function (buffer) {
16566 var decode = bip66.decode(buffer)
16567 var r = BigInteger.fromDERInteger(decode.r)
16568 var s = BigInteger.fromDERInteger(decode.s)
8b095871 16569
9987f0c1
IC
16570 return new ECSignature(r, s)
16571}
16572
16573// BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
16574ECSignature.parseScriptSignature = function (buffer) {
16575 var hashType = buffer.readUInt8(buffer.length - 1)
16576 var hashTypeMod = hashType & ~0x80
16577
16578 if (hashTypeMod <= 0x00 || hashTypeMod >= 0x04) throw new Error('Invalid hashType ' + hashType)
16579
16580 return {
16581 signature: ECSignature.fromDER(buffer.slice(0, -1)),
16582 hashType: hashType
8b095871 16583 }
9987f0c1 16584}
8b095871 16585
9987f0c1
IC
16586ECSignature.prototype.toCompact = function (i, compressed) {
16587 if (compressed) {
16588 i += 4
16589 }
16590
16591 i += 27
16592
16593 var buffer = Buffer.alloc(65)
16594 buffer.writeUInt8(i, 0)
16595 this.r.toBuffer(32).copy(buffer, 1)
16596 this.s.toBuffer(32).copy(buffer, 33)
16597
16598 return buffer
8b095871
IC
16599}
16600
9987f0c1
IC
16601ECSignature.prototype.toDER = function () {
16602 var r = Buffer.from(this.r.toDERInteger())
16603 var s = Buffer.from(this.s.toDERInteger())
16604
16605 return bip66.encode(r, s)
16606}
16607
16608ECSignature.prototype.toScriptSignature = function (hashType) {
16609 var hashTypeMod = hashType & ~0x80
16610 if (hashTypeMod <= 0 || hashTypeMod >= 4) throw new Error('Invalid hashType ' + hashType)
16611
16612 var hashTypeBuffer = Buffer.alloc(1)
16613 hashTypeBuffer.writeUInt8(hashType, 0)
16614
16615 return Buffer.concat([this.toDER(), hashTypeBuffer])
16616}
16617
16618module.exports = ECSignature
8b095871
IC
16619
16620}).call(this,require("buffer").Buffer)
9987f0c1
IC
16621},{"./types":78,"bigi":37,"bip66":39,"buffer":4,"typeforce":109}],49:[function(require,module,exports){
16622var Buffer = require('safe-buffer').Buffer
16623var base58check = require('bs58check')
16624var bcrypto = require('./crypto')
16625var createHmac = require('create-hmac')
16626var typeforce = require('typeforce')
16627var types = require('./types')
16628var NETWORKS = require('./networks')
16629
16630var BigInteger = require('bigi')
16631var ECPair = require('./ecpair')
16632
16633var ecurve = require('ecurve')
16634var curve = ecurve.getCurveByName('secp256k1')
16635
16636function HDNode (keyPair, chainCode) {
16637 typeforce(types.tuple('ECPair', types.Buffer256bit), arguments)
16638
16639 if (!keyPair.compressed) throw new TypeError('BIP32 only allows compressed keyPairs')
16640
16641 this.keyPair = keyPair
16642 this.chainCode = chainCode
16643 this.depth = 0
16644 this.index = 0
16645 this.parentFingerprint = 0x00000000
8b095871
IC
16646}
16647
9987f0c1
IC
16648HDNode.HIGHEST_BIT = 0x80000000
16649HDNode.LENGTH = 78
16650HDNode.MASTER_SECRET = Buffer.from('Bitcoin seed', 'utf8')
8b095871 16651
9987f0c1
IC
16652HDNode.fromSeedBuffer = function (seed, network) {
16653 typeforce(types.tuple(types.Buffer, types.maybe(types.Network)), arguments)
8b095871 16654
9987f0c1
IC
16655 if (seed.length < 16) throw new TypeError('Seed should be at least 128 bits')
16656 if (seed.length > 64) throw new TypeError('Seed should be at most 512 bits')
8b095871 16657
9987f0c1
IC
16658 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
16659 var IL = I.slice(0, 32)
16660 var IR = I.slice(32)
8b095871 16661
9987f0c1
IC
16662 // In case IL is 0 or >= n, the master key is invalid
16663 // This is handled by the ECPair constructor
16664 var pIL = BigInteger.fromBuffer(IL)
16665 var keyPair = new ECPair(pIL, null, {
16666 network: network
16667 })
8b095871 16668
9987f0c1
IC
16669 return new HDNode(keyPair, IR)
16670}
8b095871 16671
9987f0c1
IC
16672HDNode.fromSeedHex = function (hex, network) {
16673 return HDNode.fromSeedBuffer(Buffer.from(hex, 'hex'), network)
8b095871
IC
16674}
16675
9987f0c1
IC
16676HDNode.fromBase58 = function (string, networks) {
16677 var buffer = base58check.decode(string)
16678 if (buffer.length !== 78) throw new Error('Invalid buffer length')
8b095871 16679
9987f0c1
IC
16680 // 4 bytes: version bytes
16681 var version = buffer.readUInt32BE(0)
16682 var network
8b095871 16683
9987f0c1
IC
16684 // list of networks?
16685 if (Array.isArray(networks)) {
16686 network = networks.filter(function (x) {
16687 return version === x.bip32.private ||
16688 version === x.bip32.public
16689 }).pop()
8b095871 16690
9987f0c1
IC
16691 if (!network) throw new Error('Unknown network version')
16692
16693 // otherwise, assume a network object (or default to bitcoin)
16694 } else {
16695 network = networks || NETWORKS.bitcoin
8b095871
IC
16696 }
16697
9987f0c1
IC
16698 if (version !== network.bip32.private &&
16699 version !== network.bip32.public) throw new Error('Invalid network version')
8b095871 16700
9987f0c1
IC
16701 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
16702 var depth = buffer[4]
8b095871 16703
9987f0c1
IC
16704 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
16705 var parentFingerprint = buffer.readUInt32BE(5)
16706 if (depth === 0) {
16707 if (parentFingerprint !== 0x00000000) throw new Error('Invalid parent fingerprint')
16708 }
8b095871 16709
9987f0c1
IC
16710 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
16711 // This is encoded in MSB order. (0x00000000 if master key)
16712 var index = buffer.readUInt32BE(9)
16713 if (depth === 0 && index !== 0) throw new Error('Invalid index')
16714
16715 // 32 bytes: the chain code
16716 var chainCode = buffer.slice(13, 45)
16717 var keyPair
16718
16719 // 33 bytes: private key data (0x00 + k)
16720 if (version === network.bip32.private) {
16721 if (buffer.readUInt8(45) !== 0x00) throw new Error('Invalid private key')
16722
16723 var d = BigInteger.fromBuffer(buffer.slice(46, 78))
16724 keyPair = new ECPair(d, null, { network: network })
16725
16726 // 33 bytes: public key data (0x02 + X or 0x03 + X)
16727 } else {
16728 var Q = ecurve.Point.decodeFrom(curve, buffer.slice(45, 78))
16729 // Q.compressed is assumed, if somehow this assumption is broken, `new HDNode` will throw
16730
16731 // Verify that the X coordinate in the public point corresponds to a point on the curve.
16732 // If not, the extended public key is invalid.
16733 curve.validate(Q)
16734
16735 keyPair = new ECPair(null, Q, { network: network })
16736 }
16737
16738 var hd = new HDNode(keyPair, chainCode)
16739 hd.depth = depth
16740 hd.index = index
16741 hd.parentFingerprint = parentFingerprint
16742
16743 return hd
8b095871
IC
16744}
16745
9987f0c1
IC
16746HDNode.prototype.getAddress = function () {
16747 return this.keyPair.getAddress()
16748}
8b095871 16749
9987f0c1
IC
16750HDNode.prototype.getIdentifier = function () {
16751 return bcrypto.hash160(this.keyPair.getPublicKeyBuffer())
16752}
8b095871 16753
9987f0c1
IC
16754HDNode.prototype.getFingerprint = function () {
16755 return this.getIdentifier().slice(0, 4)
16756}
8b095871 16757
9987f0c1
IC
16758HDNode.prototype.getNetwork = function () {
16759 return this.keyPair.getNetwork()
8b095871
IC
16760}
16761
9987f0c1
IC
16762HDNode.prototype.getPublicKeyBuffer = function () {
16763 return this.keyPair.getPublicKeyBuffer()
16764}
8b095871 16765
9987f0c1
IC
16766HDNode.prototype.neutered = function () {
16767 var neuteredKeyPair = new ECPair(null, this.keyPair.Q, {
16768 network: this.keyPair.network
16769 })
8b095871 16770
9987f0c1
IC
16771 var neutered = new HDNode(neuteredKeyPair, this.chainCode)
16772 neutered.depth = this.depth
16773 neutered.index = this.index
16774 neutered.parentFingerprint = this.parentFingerprint
8b095871 16775
9987f0c1
IC
16776 return neutered
16777}
8b095871 16778
9987f0c1
IC
16779HDNode.prototype.sign = function (hash) {
16780 return this.keyPair.sign(hash)
16781}
8b095871 16782
9987f0c1
IC
16783HDNode.prototype.verify = function (hash, signature) {
16784 return this.keyPair.verify(hash, signature)
8b095871
IC
16785}
16786
9987f0c1
IC
16787HDNode.prototype.toBase58 = function (__isPrivate) {
16788 if (__isPrivate !== undefined) throw new TypeError('Unsupported argument in 2.0.0')
8b095871 16789
9987f0c1
IC
16790 // Version
16791 var network = this.keyPair.network
16792 var version = (!this.isNeutered()) ? network.bip32.private : network.bip32.public
16793 var buffer = Buffer.allocUnsafe(78)
8b095871 16794
9987f0c1
IC
16795 // 4 bytes: version bytes
16796 buffer.writeUInt32BE(version, 0)
8b095871 16797
9987f0c1
IC
16798 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
16799 buffer.writeUInt8(this.depth, 4)
16800
16801 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
16802 buffer.writeUInt32BE(this.parentFingerprint, 5)
16803
16804 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
16805 // This is encoded in big endian. (0x00000000 if master key)
16806 buffer.writeUInt32BE(this.index, 9)
16807
16808 // 32 bytes: the chain code
16809 this.chainCode.copy(buffer, 13)
16810
16811 // 33 bytes: the public key or private key data
16812 if (!this.isNeutered()) {
16813 // 0x00 + k for private keys
16814 buffer.writeUInt8(0, 45)
16815 this.keyPair.d.toBuffer(32).copy(buffer, 46)
16816
16817 // 33 bytes: the public key
16818 } else {
16819 // X9.62 encoding for public keys
16820 this.keyPair.getPublicKeyBuffer().copy(buffer, 45)
16821 }
16822
16823 return base58check.encode(buffer)
8b095871
IC
16824}
16825
9987f0c1
IC
16826// https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
16827HDNode.prototype.derive = function (index) {
16828 typeforce(types.UInt32, index)
16829
16830 var isHardened = index >= HDNode.HIGHEST_BIT
16831 var data = Buffer.allocUnsafe(37)
16832
16833 // Hardened child
16834 if (isHardened) {
16835 if (this.isNeutered()) throw new TypeError('Could not derive hardened child key')
8b095871 16836
9987f0c1
IC
16837 // data = 0x00 || ser256(kpar) || ser32(index)
16838 data[0] = 0x00
16839 this.keyPair.d.toBuffer(32).copy(data, 1)
16840 data.writeUInt32BE(index, 33)
8b095871 16841
9987f0c1
IC
16842 // Normal child
16843 } else {
16844 // data = serP(point(kpar)) || ser32(index)
16845 // = serP(Kpar) || ser32(index)
16846 this.keyPair.getPublicKeyBuffer().copy(data, 0)
16847 data.writeUInt32BE(index, 33)
16848 }
8b095871 16849
9987f0c1
IC
16850 var I = createHmac('sha512', this.chainCode).update(data).digest()
16851 var IL = I.slice(0, 32)
16852 var IR = I.slice(32)
8b095871 16853
9987f0c1 16854 var pIL = BigInteger.fromBuffer(IL)
8b095871 16855
9987f0c1
IC
16856 // In case parse256(IL) >= n, proceed with the next value for i
16857 if (pIL.compareTo(curve.n) >= 0) {
16858 return this.derive(index + 1)
8b095871
IC
16859 }
16860
9987f0c1
IC
16861 // Private parent key -> private child key
16862 var derivedKeyPair
16863 if (!this.isNeutered()) {
16864 // ki = parse256(IL) + kpar (mod n)
16865 var ki = pIL.add(this.keyPair.d).mod(curve.n)
8b095871 16866
9987f0c1
IC
16867 // In case ki == 0, proceed with the next value for i
16868 if (ki.signum() === 0) {
16869 return this.derive(index + 1)
16870 }
16871
16872 derivedKeyPair = new ECPair(ki, null, {
16873 network: this.keyPair.network
16874 })
16875
16876 // Public parent key -> public child key
16877 } else {
16878 // Ki = point(parse256(IL)) + Kpar
16879 // = G*IL + Kpar
16880 var Ki = curve.G.multiply(pIL).add(this.keyPair.Q)
16881
16882 // In case Ki is the point at infinity, proceed with the next value for i
16883 if (curve.isInfinity(Ki)) {
16884 return this.derive(index + 1)
16885 }
16886
16887 derivedKeyPair = new ECPair(null, Ki, {
16888 network: this.keyPair.network
16889 })
16890 }
16891
16892 var hd = new HDNode(derivedKeyPair, IR)
16893 hd.depth = this.depth + 1
16894 hd.index = index
16895 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
16896
16897 return hd
8b095871
IC
16898}
16899
9987f0c1
IC
16900HDNode.prototype.deriveHardened = function (index) {
16901 typeforce(types.UInt31, index)
8b095871 16902
9987f0c1
IC
16903 // Only derives hardened private keys by default
16904 return this.derive(index + HDNode.HIGHEST_BIT)
16905}
8b095871 16906
9987f0c1
IC
16907// Private === not neutered
16908// Public === neutered
16909HDNode.prototype.isNeutered = function () {
16910 return !(this.keyPair.d)
8b095871
IC
16911}
16912
9987f0c1
IC
16913HDNode.prototype.derivePath = function (path) {
16914 typeforce(types.BIP32Path, path)
8b095871 16915
9987f0c1
IC
16916 var splitPath = path.split('/')
16917 if (splitPath[0] === 'm') {
16918 if (this.parentFingerprint) {
16919 throw new Error('Not a master node')
16920 }
8b095871 16921
9987f0c1
IC
16922 splitPath = splitPath.slice(1)
16923 }
8b095871 16924
9987f0c1
IC
16925 return splitPath.reduce(function (prevHd, indexStr) {
16926 var index
16927 if (indexStr.slice(-1) === "'") {
16928 index = parseInt(indexStr.slice(0, -1), 10)
16929 return prevHd.deriveHardened(index)
16930 } else {
16931 index = parseInt(indexStr, 10)
16932 return prevHd.derive(index)
16933 }
16934 }, this)
16935}
8b095871 16936
9987f0c1 16937module.exports = HDNode
8b095871 16938
9987f0c1
IC
16939},{"./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){
16940module.exports = {
16941 Block: require('./block'),
16942 ECPair: require('./ecpair'),
16943 ECSignature: require('./ecsignature'),
16944 HDNode: require('./hdnode'),
16945 Transaction: require('./transaction'),
16946 TransactionBuilder: require('./transaction_builder'),
8b095871 16947
9987f0c1
IC
16948 address: require('./address'),
16949 bufferutils: require('./bufferutils'), // TODO: remove in 4.0.0
16950 crypto: require('./crypto'),
16951 networks: require('./networks'),
16952 opcodes: require('bitcoin-ops'),
16953 script: require('./script')
8b095871
IC
16954}
16955
9987f0c1
IC
16956},{"./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){
16957// https://en.bitcoin.it/wiki/List_of_address_prefixes
16958// Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
8b095871 16959
9987f0c1
IC
16960module.exports = {
16961 bitcoin: {
16962 messagePrefix: '\x18Bitcoin Signed Message:\n',
16963 bip32: {
16964 public: 0x0488b21e,
16965 private: 0x0488ade4
16966 },
16967 pubKeyHash: 0x00,
16968 scriptHash: 0x05,
16969 wif: 0x80
16970 },
16971 testnet: {
16972 messagePrefix: '\x18Bitcoin Signed Message:\n',
16973 bip32: {
16974 public: 0x043587cf,
16975 private: 0x04358394
16976 },
16977 pubKeyHash: 0x6f,
16978 scriptHash: 0xc4,
16979 wif: 0xef
16980 },
16981 litecoin: {
8d18f379
IC
16982 messagePrefix: '\x19Litecoin Signed Message:\n',
16983 bip32: {
16984 public: 0x0488b21e,
16985 private: 0x0488ade4,
16986 },
16987 pubKeyHash: 0x30,
16988 scriptHash: 0x32,
16989 wif: 0xb0
16990 },
16991 litecoinLtub: {
9987f0c1
IC
16992 messagePrefix: '\x19Litecoin Signed Message:\n',
16993 bip32: {
16994 public: 0x019da462,
16995 private: 0x019d9cfe
16996 },
16997 pubKeyHash: 0x30,
16998 scriptHash: 0x32,
16999 wif: 0xb0
17000 }
17001}
8b095871 17002
9987f0c1
IC
17003},{}],52:[function(require,module,exports){
17004var Buffer = require('safe-buffer').Buffer
17005var bip66 = require('bip66')
17006var pushdata = require('pushdata-bitcoin')
17007var typeforce = require('typeforce')
17008var types = require('./types')
17009var scriptNumber = require('./script_number')
17010
17011var OPS = require('bitcoin-ops')
17012var REVERSE_OPS = require('bitcoin-ops/map')
17013var OP_INT_BASE = OPS.OP_RESERVED // OP_1 - 1
17014
17015function isOPInt (value) {
17016 return types.Number(value) &&
17017 ((value === OPS.OP_0) ||
17018 (value >= OPS.OP_1 && value <= OPS.OP_16) ||
17019 (value === OPS.OP_1NEGATE))
8b095871
IC
17020}
17021
9987f0c1
IC
17022function isPushOnlyChunk (value) {
17023 return types.Buffer(value) || isOPInt(value)
8b095871
IC
17024}
17025
9987f0c1
IC
17026function isPushOnly (value) {
17027 return types.Array(value) && value.every(isPushOnlyChunk)
17028}
8b095871 17029
9987f0c1
IC
17030function compile (chunks) {
17031 // TODO: remove me
17032 if (Buffer.isBuffer(chunks)) return chunks
8b095871 17033
9987f0c1 17034 typeforce(types.Array, chunks)
8b095871 17035
9987f0c1
IC
17036 var bufferSize = chunks.reduce(function (accum, chunk) {
17037 // data chunk
17038 if (Buffer.isBuffer(chunk)) {
17039 // adhere to BIP62.3, minimal push policy
17040 if (chunk.length === 1 && (chunk[0] === 0x81 || (chunk[0] >= 1 && chunk[0] <= 16))) {
17041 return accum + 1
17042 }
8b095871 17043
9987f0c1
IC
17044 return accum + pushdata.encodingLength(chunk.length) + chunk.length
17045 }
8b095871 17046
9987f0c1
IC
17047 // opcode
17048 return accum + 1
17049 }, 0.0)
8b095871 17050
9987f0c1
IC
17051 var buffer = Buffer.allocUnsafe(bufferSize)
17052 var offset = 0
8b095871 17053
9987f0c1
IC
17054 chunks.forEach(function (chunk) {
17055 // data chunk
17056 if (Buffer.isBuffer(chunk)) {
17057 // adhere to BIP62.3, minimal push policy
17058 if (chunk.length === 1 && chunk[0] >= 1 && chunk[0] <= 16) {
17059 var opcode = OP_INT_BASE + chunk[0]
17060 buffer.writeUInt8(opcode, offset)
17061 offset += 1
17062 return
17063 }
8b095871 17064
9987f0c1
IC
17065 if (chunk.length === 1 && chunk[0] === 0x81) {
17066 buffer.writeUInt8(OPS.OP_1NEGATE, offset)
17067 offset += 1
17068 return
17069 }
8b095871 17070
9987f0c1 17071 offset += pushdata.encode(buffer, chunk.length, offset)
8b095871 17072
9987f0c1
IC
17073 chunk.copy(buffer, offset)
17074 offset += chunk.length
8b095871 17075
9987f0c1
IC
17076 // opcode
17077 } else {
17078 buffer.writeUInt8(chunk, offset)
17079 offset += 1
17080 }
17081 })
8b095871 17082
9987f0c1
IC
17083 if (offset !== buffer.length) throw new Error('Could not decode chunks')
17084 return buffer
17085}
8b095871 17086
9987f0c1
IC
17087function decompile (buffer) {
17088 // TODO: remove me
17089 if (types.Array(buffer)) return buffer
8b095871 17090
9987f0c1 17091 typeforce(types.Buffer, buffer)
8b095871 17092
9987f0c1
IC
17093 var chunks = []
17094 var i = 0
8b095871 17095
9987f0c1
IC
17096 while (i < buffer.length) {
17097 var opcode = buffer[i]
8b095871 17098
9987f0c1
IC
17099 // data chunk
17100 if ((opcode > OPS.OP_0) && (opcode <= OPS.OP_PUSHDATA4)) {
17101 var d = pushdata.decode(buffer, i)
8b095871 17102
9987f0c1
IC
17103 // did reading a pushDataInt fail? empty script
17104 if (d === null) return []
17105 i += d.size
8b095871 17106
9987f0c1
IC
17107 // attempt to read too much data? empty script
17108 if (i + d.number > buffer.length) return []
8b095871 17109
9987f0c1
IC
17110 var data = buffer.slice(i, i + d.number)
17111 i += d.number
8b095871 17112
9987f0c1 17113 chunks.push(data)
8b095871 17114
9987f0c1
IC
17115 // opcode
17116 } else {
17117 chunks.push(opcode)
8b095871 17118
9987f0c1
IC
17119 i += 1
17120 }
17121 }
17122
17123 return chunks
8b095871
IC
17124}
17125
9987f0c1
IC
17126function toASM (chunks) {
17127 if (Buffer.isBuffer(chunks)) {
17128 chunks = decompile(chunks)
17129 }
8b095871 17130
9987f0c1
IC
17131 return chunks.map(function (chunk) {
17132 // data?
17133 if (Buffer.isBuffer(chunk)) return chunk.toString('hex')
8b095871 17134
9987f0c1
IC
17135 // opcode!
17136 return REVERSE_OPS[chunk]
17137 }).join(' ')
17138}
8b095871 17139
9987f0c1
IC
17140function fromASM (asm) {
17141 typeforce(types.String, asm)
8b095871 17142
9987f0c1
IC
17143 return compile(asm.split(' ').map(function (chunkStr) {
17144 // opcode?
17145 if (OPS[chunkStr] !== undefined) return OPS[chunkStr]
17146 typeforce(types.Hex, chunkStr)
8b095871 17147
9987f0c1
IC
17148 // data!
17149 return Buffer.from(chunkStr, 'hex')
17150 }))
17151}
8b095871 17152
9987f0c1
IC
17153function toStack (chunks) {
17154 chunks = decompile(chunks)
17155 typeforce(isPushOnly, chunks)
8b095871 17156
9987f0c1
IC
17157 return chunks.map(function (op) {
17158 if (Buffer.isBuffer(op)) return op
17159 if (op === OPS.OP_0) return Buffer.allocUnsafe(0)
17160
17161 return scriptNumber.encode(op - OP_INT_BASE)
17162 })
8b095871
IC
17163}
17164
9987f0c1
IC
17165function isCanonicalPubKey (buffer) {
17166 if (!Buffer.isBuffer(buffer)) return false
17167 if (buffer.length < 33) return false
8b095871 17168
9987f0c1
IC
17169 switch (buffer[0]) {
17170 case 0x02:
17171 case 0x03:
17172 return buffer.length === 33
17173 case 0x04:
17174 return buffer.length === 65
17175 }
8b095871 17176
9987f0c1 17177 return false
8b095871
IC
17178}
17179
9987f0c1
IC
17180function isDefinedHashType (hashType) {
17181 var hashTypeMod = hashType & ~0x80
8b095871 17182
9987f0c1
IC
17183// return hashTypeMod > SIGHASH_ALL && hashTypeMod < SIGHASH_SINGLE
17184 return hashTypeMod > 0x00 && hashTypeMod < 0x04
8b095871
IC
17185}
17186
9987f0c1
IC
17187function isCanonicalSignature (buffer) {
17188 if (!Buffer.isBuffer(buffer)) return false
17189 if (!isDefinedHashType(buffer[buffer.length - 1])) return false
8b095871 17190
9987f0c1 17191 return bip66.check(buffer.slice(0, -1))
8b095871
IC
17192}
17193
9987f0c1
IC
17194module.exports = {
17195 compile: compile,
17196 decompile: decompile,
17197 fromASM: fromASM,
17198 toASM: toASM,
17199 toStack: toStack,
8b095871 17200
9987f0c1 17201 number: require('./script_number'),
8b095871 17202
9987f0c1
IC
17203 isCanonicalPubKey: isCanonicalPubKey,
17204 isCanonicalSignature: isCanonicalSignature,
17205 isPushOnly: isPushOnly,
17206 isDefinedHashType: isDefinedHashType
8b095871
IC
17207}
17208
9987f0c1
IC
17209var templates = require('./templates')
17210for (var key in templates) {
17211 module.exports[key] = templates[key]
8b095871
IC
17212}
17213
9987f0c1
IC
17214},{"./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){
17215var Buffer = require('safe-buffer').Buffer
8b095871 17216
9987f0c1
IC
17217function decode (buffer, maxLength, minimal) {
17218 maxLength = maxLength || 4
17219 minimal = minimal === undefined ? true : minimal
8b095871 17220
9987f0c1
IC
17221 var length = buffer.length
17222 if (length === 0) return 0
17223 if (length > maxLength) throw new TypeError('Script number overflow')
17224 if (minimal) {
17225 if ((buffer[length - 1] & 0x7f) === 0) {
17226 if (length <= 1 || (buffer[length - 2] & 0x80) === 0) throw new Error('Non-minimally encoded script number')
17227 }
17228 }
8b095871 17229
9987f0c1
IC
17230 // 40-bit
17231 if (length === 5) {
17232 var a = buffer.readUInt32LE(0)
17233 var b = buffer.readUInt8(4)
8b095871 17234
9987f0c1
IC
17235 if (b & 0x80) return -(((b & ~0x80) * 0x100000000) + a)
17236 return (b * 0x100000000) + a
17237 }
8b095871 17238
9987f0c1 17239 var result = 0
8b095871 17240
9987f0c1
IC
17241 // 32-bit / 24-bit / 16-bit / 8-bit
17242 for (var i = 0; i < length; ++i) {
17243 result |= buffer[i] << (8 * i)
8b095871
IC
17244 }
17245
9987f0c1
IC
17246 if (buffer[length - 1] & 0x80) return -(result & ~(0x80 << (8 * (length - 1))))
17247 return result
17248}
8b095871 17249
9987f0c1
IC
17250function scriptNumSize (i) {
17251 return i > 0x7fffffff ? 5
17252 : i > 0x7fffff ? 4
17253 : i > 0x7fff ? 3
17254 : i > 0x7f ? 2
17255 : i > 0x00 ? 1
17256 : 0
8b095871
IC
17257}
17258
9987f0c1
IC
17259function encode (number) {
17260 var value = Math.abs(number)
17261 var size = scriptNumSize(value)
17262 var buffer = Buffer.allocUnsafe(size)
17263 var negative = number < 0
8b095871 17264
9987f0c1
IC
17265 for (var i = 0; i < size; ++i) {
17266 buffer.writeUInt8(value & 0xff, i)
17267 value >>= 8
17268 }
8b095871 17269
9987f0c1
IC
17270 if (buffer[size - 1] & 0x80) {
17271 buffer.writeUInt8(negative ? 0x80 : 0x00, size - 1)
17272 } else if (negative) {
17273 buffer[size - 1] |= 0x80
17274 }
17275
17276 return buffer
8b095871
IC
17277}
17278
9987f0c1
IC
17279module.exports = {
17280 decode: decode,
17281 encode: encode
17282}
8b095871 17283
9987f0c1
IC
17284},{"safe-buffer":98}],54:[function(require,module,exports){
17285var decompile = require('../script').decompile
17286var multisig = require('./multisig')
17287var nullData = require('./nulldata')
17288var pubKey = require('./pubkey')
17289var pubKeyHash = require('./pubkeyhash')
17290var scriptHash = require('./scripthash')
17291var witnessPubKeyHash = require('./witnesspubkeyhash')
17292var witnessScriptHash = require('./witnessscripthash')
17293var witnessCommitment = require('./witnesscommitment')
17294
17295var types = {
17296 MULTISIG: 'multisig',
17297 NONSTANDARD: 'nonstandard',
17298 NULLDATA: 'nulldata',
17299 P2PK: 'pubkey',
17300 P2PKH: 'pubkeyhash',
17301 P2SH: 'scripthash',
17302 P2WPKH: 'witnesspubkeyhash',
17303 P2WSH: 'witnessscripthash',
17304 WITNESS_COMMITMENT: 'witnesscommitment'
17305}
8b095871 17306
9987f0c1
IC
17307function classifyOutput (script) {
17308 if (witnessPubKeyHash.output.check(script)) return types.P2WPKH
17309 if (witnessScriptHash.output.check(script)) return types.P2WSH
17310 if (pubKeyHash.output.check(script)) return types.P2PKH
17311 if (scriptHash.output.check(script)) return types.P2SH
8b095871 17312
9987f0c1
IC
17313 // XXX: optimization, below functions .decompile before use
17314 var chunks = decompile(script)
17315 if (multisig.output.check(chunks)) return types.MULTISIG
17316 if (pubKey.output.check(chunks)) return types.P2PK
17317 if (witnessCommitment.output.check(chunks)) return types.WITNESS_COMMITMENT
17318 if (nullData.output.check(chunks)) return types.NULLDATA
8b095871 17319
9987f0c1 17320 return types.NONSTANDARD
8b095871
IC
17321}
17322
9987f0c1
IC
17323function classifyInput (script, allowIncomplete) {
17324 // XXX: optimization, below functions .decompile before use
17325 var chunks = decompile(script)
8b095871 17326
9987f0c1
IC
17327 if (pubKeyHash.input.check(chunks)) return types.P2PKH
17328 if (scriptHash.input.check(chunks, allowIncomplete)) return types.P2SH
17329 if (multisig.input.check(chunks, allowIncomplete)) return types.MULTISIG
17330 if (pubKey.input.check(chunks)) return types.P2PK
8b095871 17331
9987f0c1 17332 return types.NONSTANDARD
8b095871
IC
17333}
17334
9987f0c1
IC
17335function classifyWitness (script, allowIncomplete) {
17336 // XXX: optimization, below functions .decompile before use
17337 var chunks = decompile(script)
8b095871 17338
9987f0c1
IC
17339 if (witnessPubKeyHash.input.check(chunks)) return types.P2WPKH
17340 if (witnessScriptHash.input.check(chunks, allowIncomplete)) return types.P2WSH
8b095871 17341
9987f0c1
IC
17342 return types.NONSTANDARD
17343}
8b095871 17344
9987f0c1
IC
17345module.exports = {
17346 classifyInput: classifyInput,
17347 classifyOutput: classifyOutput,
17348 classifyWitness: classifyWitness,
17349 multisig: multisig,
17350 nullData: nullData,
17351 pubKey: pubKey,
17352 pubKeyHash: pubKeyHash,
17353 scriptHash: scriptHash,
17354 witnessPubKeyHash: witnessPubKeyHash,
17355 witnessScriptHash: witnessScriptHash,
17356 witnessCommitment: witnessCommitment,
17357 types: types
17358}
17359
17360},{"../script":52,"./multisig":55,"./nulldata":58,"./pubkey":59,"./pubkeyhash":62,"./scripthash":65,"./witnesscommitment":68,"./witnesspubkeyhash":70,"./witnessscripthash":73}],55:[function(require,module,exports){
17361module.exports = {
17362 input: require('./input'),
17363 output: require('./output')
8b095871
IC
17364}
17365
9987f0c1
IC
17366},{"./input":56,"./output":57}],56:[function(require,module,exports){
17367// OP_0 [signatures ...]
8b095871 17368
9987f0c1
IC
17369var Buffer = require('safe-buffer').Buffer
17370var bscript = require('../../script')
17371var typeforce = require('typeforce')
17372var OPS = require('bitcoin-ops')
8b095871 17373
9987f0c1
IC
17374function partialSignature (value) {
17375 return value === OPS.OP_0 || bscript.isCanonicalSignature(value)
17376}
8b095871 17377
9987f0c1
IC
17378function check (script, allowIncomplete) {
17379 var chunks = bscript.decompile(script)
17380 if (chunks.length < 2) return false
17381 if (chunks[0] !== OPS.OP_0) return false
8b095871 17382
9987f0c1
IC
17383 if (allowIncomplete) {
17384 return chunks.slice(1).every(partialSignature)
17385 }
8b095871 17386
9987f0c1 17387 return chunks.slice(1).every(bscript.isCanonicalSignature)
8b095871 17388}
9987f0c1 17389check.toJSON = function () { return 'multisig input' }
8b095871 17390
9987f0c1 17391var EMPTY_BUFFER = Buffer.allocUnsafe(0)
8b095871 17392
9987f0c1
IC
17393function encodeStack (signatures, scriptPubKey) {
17394 typeforce([partialSignature], signatures)
8b095871 17395
9987f0c1
IC
17396 if (scriptPubKey) {
17397 var scriptData = bscript.multisig.output.decode(scriptPubKey)
17398
17399 if (signatures.length < scriptData.m) {
17400 throw new TypeError('Not enough signatures provided')
17401 }
8b095871 17402
9987f0c1
IC
17403 if (signatures.length > scriptData.pubKeys.length) {
17404 throw new TypeError('Too many signatures provided')
17405 }
17406 }
17407
17408 return [].concat(EMPTY_BUFFER, signatures)
8b095871
IC
17409}
17410
9987f0c1
IC
17411function encode (signatures, scriptPubKey) {
17412 return bscript.compile(encodeStack(signatures, scriptPubKey))
8b095871
IC
17413}
17414
9987f0c1
IC
17415function decodeStack (stack, allowIncomplete) {
17416 typeforce(check, stack, allowIncomplete)
17417 return stack.slice(1)
8b095871
IC
17418}
17419
9987f0c1
IC
17420function decode (buffer, allowIncomplete) {
17421 var stack = bscript.decompile(buffer)
17422 return decodeStack(stack, allowIncomplete)
17423}
8b095871 17424
9987f0c1
IC
17425module.exports = {
17426 check: check,
17427 decode: decode,
17428 decodeStack: decodeStack,
17429 encode: encode,
17430 encodeStack: encodeStack
17431}
8b095871 17432
9987f0c1
IC
17433},{"../../script":52,"bitcoin-ops":40,"safe-buffer":98,"typeforce":109}],57:[function(require,module,exports){
17434// m [pubKeys ...] n OP_CHECKMULTISIG
8b095871 17435
9987f0c1
IC
17436var bscript = require('../../script')
17437var types = require('../../types')
17438var typeforce = require('typeforce')
17439var OPS = require('bitcoin-ops')
17440var OP_INT_BASE = OPS.OP_RESERVED // OP_1 - 1
17441
17442function check (script, allowIncomplete) {
17443 var chunks = bscript.decompile(script)
17444
17445 if (chunks.length < 4) return false
17446 if (chunks[chunks.length - 1] !== OPS.OP_CHECKMULTISIG) return false
17447 if (!types.Number(chunks[0])) return false
17448 if (!types.Number(chunks[chunks.length - 2])) return false
17449 var m = chunks[0] - OP_INT_BASE
17450 var n = chunks[chunks.length - 2] - OP_INT_BASE
17451
17452 if (m <= 0) return false
17453 if (n > 16) return false
17454 if (m > n) return false
17455 if (n !== chunks.length - 3) return false
17456 if (allowIncomplete) return true
17457
17458 var keys = chunks.slice(1, -2)
17459 return keys.every(bscript.isCanonicalPubKey)
17460}
17461check.toJSON = function () { return 'multi-sig output' }
17462
17463function encode (m, pubKeys) {
17464 typeforce({
17465 m: types.Number,
17466 pubKeys: [bscript.isCanonicalPubKey]
17467 }, {
17468 m: m,
17469 pubKeys: pubKeys
17470 })
8b095871 17471
9987f0c1
IC
17472 var n = pubKeys.length
17473 if (n < m) throw new TypeError('Not enough pubKeys provided')
8b095871 17474
9987f0c1
IC
17475 return bscript.compile([].concat(
17476 OP_INT_BASE + m,
17477 pubKeys,
17478 OP_INT_BASE + n,
17479 OPS.OP_CHECKMULTISIG
17480 ))
17481}
8b095871 17482
9987f0c1
IC
17483function decode (buffer, allowIncomplete) {
17484 var chunks = bscript.decompile(buffer)
17485 typeforce(check, chunks, allowIncomplete)
8b095871 17486
9987f0c1
IC
17487 return {
17488 m: chunks[0] - OP_INT_BASE,
17489 pubKeys: chunks.slice(1, -2)
8b095871 17490 }
9987f0c1 17491}
8b095871 17492
9987f0c1
IC
17493module.exports = {
17494 check: check,
17495 decode: decode,
17496 encode: encode
17497}
8b095871 17498
9987f0c1
IC
17499},{"../../script":52,"../../types":78,"bitcoin-ops":40,"typeforce":109}],58:[function(require,module,exports){
17500// OP_RETURN {data}
8b095871 17501
9987f0c1
IC
17502var bscript = require('../script')
17503var types = require('../types')
17504var typeforce = require('typeforce')
17505var OPS = require('bitcoin-ops')
8b095871 17506
9987f0c1
IC
17507function check (script) {
17508 var buffer = bscript.compile(script)
8b095871 17509
9987f0c1
IC
17510 return buffer.length > 1 &&
17511 buffer[0] === OPS.OP_RETURN
17512}
17513check.toJSON = function () { return 'null data output' }
8b095871 17514
9987f0c1
IC
17515function encode (data) {
17516 typeforce(types.Buffer, data)
8b095871 17517
9987f0c1
IC
17518 return bscript.compile([OPS.OP_RETURN, data])
17519}
8b095871 17520
9987f0c1
IC
17521function decode (buffer) {
17522 typeforce(check, buffer)
17523
17524 return buffer.slice(2)
17525}
8b095871 17526
9987f0c1
IC
17527module.exports = {
17528 output: {
17529 check: check,
17530 decode: decode,
17531 encode: encode
8b095871 17532 }
9987f0c1 17533}
8b095871 17534
9987f0c1
IC
17535},{"../script":52,"../types":78,"bitcoin-ops":40,"typeforce":109}],59:[function(require,module,exports){
17536arguments[4][55][0].apply(exports,arguments)
17537},{"./input":60,"./output":61,"dup":55}],60:[function(require,module,exports){
17538// {signature}
8b095871 17539
9987f0c1
IC
17540var bscript = require('../../script')
17541var types = require('../../types')
17542var typeforce = require('typeforce')
8b095871 17543
9987f0c1
IC
17544function check (script) {
17545 var chunks = bscript.decompile(script)
8b095871 17546
9987f0c1
IC
17547 return chunks.length === 1 &&
17548 bscript.isCanonicalSignature(chunks[0])
17549}
17550check.toJSON = function () { return 'pubKey input' }
8b095871 17551
9987f0c1
IC
17552function encodeStack (signature) {
17553 typeforce(types.Buffer, signature)
17554 return [signature]
8b095871
IC
17555}
17556
9987f0c1
IC
17557function encode (signature) {
17558 return bscript.compile(encodeStack(signature))
17559}
8b095871 17560
9987f0c1
IC
17561function decodeStack (stack) {
17562 typeforce(check, stack)
17563 return stack[0]
17564}
8b095871 17565
9987f0c1
IC
17566function decode (buffer) {
17567 var stack = bscript.decompile(buffer)
17568 return decodeStack(stack)
17569}
8b095871 17570
9987f0c1
IC
17571module.exports = {
17572 check: check,
17573 decode: decode,
17574 decodeStack: decodeStack,
17575 encode: encode,
17576 encodeStack: encodeStack
8b095871
IC
17577}
17578
9987f0c1
IC
17579},{"../../script":52,"../../types":78,"typeforce":109}],61:[function(require,module,exports){
17580// {pubKey} OP_CHECKSIG
8b095871 17581
9987f0c1
IC
17582var bscript = require('../../script')
17583var typeforce = require('typeforce')
17584var OPS = require('bitcoin-ops')
8b095871 17585
9987f0c1
IC
17586function check (script) {
17587 var chunks = bscript.decompile(script)
8b095871 17588
9987f0c1
IC
17589 return chunks.length === 2 &&
17590 bscript.isCanonicalPubKey(chunks[0]) &&
17591 chunks[1] === OPS.OP_CHECKSIG
17592}
17593check.toJSON = function () { return 'pubKey output' }
8b095871 17594
9987f0c1
IC
17595function encode (pubKey) {
17596 typeforce(bscript.isCanonicalPubKey, pubKey)
8b095871 17597
9987f0c1
IC
17598 return bscript.compile([pubKey, OPS.OP_CHECKSIG])
17599}
8b095871 17600
9987f0c1
IC
17601function decode (buffer) {
17602 var chunks = bscript.decompile(buffer)
17603 typeforce(check, chunks)
8b095871 17604
9987f0c1
IC
17605 return chunks[0]
17606}
8b095871 17607
9987f0c1
IC
17608module.exports = {
17609 check: check,
17610 decode: decode,
17611 encode: encode
17612}
8b095871 17613
9987f0c1
IC
17614},{"../../script":52,"bitcoin-ops":40,"typeforce":109}],62:[function(require,module,exports){
17615arguments[4][55][0].apply(exports,arguments)
17616},{"./input":63,"./output":64,"dup":55}],63:[function(require,module,exports){
17617// {signature} {pubKey}
8b095871 17618
9987f0c1
IC
17619var bscript = require('../../script')
17620var types = require('../../types')
17621var typeforce = require('typeforce')
8b095871 17622
9987f0c1
IC
17623function check (script) {
17624 var chunks = bscript.decompile(script)
8b095871 17625
9987f0c1
IC
17626 return chunks.length === 2 &&
17627 bscript.isCanonicalSignature(chunks[0]) &&
17628 bscript.isCanonicalPubKey(chunks[1])
8b095871 17629}
9987f0c1 17630check.toJSON = function () { return 'pubKeyHash input' }
8b095871 17631
9987f0c1
IC
17632function encodeStack (signature, pubKey) {
17633 typeforce({
17634 signature: types.Buffer, pubKey: types.Buffer
17635 }, {
17636 signature: signature, pubKey: pubKey
17637 })
8b095871 17638
9987f0c1 17639 return [signature, pubKey]
8b095871
IC
17640}
17641
9987f0c1
IC
17642function encode (signature, pubKey) {
17643 return bscript.compile(encodeStack(signature, pubKey))
8b095871
IC
17644}
17645
9987f0c1
IC
17646function decodeStack (stack) {
17647 typeforce(check, stack)
8b095871 17648
9987f0c1
IC
17649 return {
17650 signature: stack[0],
17651 pubKey: stack[1]
17652 }
8b095871
IC
17653}
17654
9987f0c1
IC
17655function decode (buffer) {
17656 var stack = bscript.decompile(buffer)
17657 return decodeStack(stack)
8b095871
IC
17658}
17659
9987f0c1
IC
17660module.exports = {
17661 check: check,
17662 decode: decode,
17663 decodeStack: decodeStack,
17664 encode: encode,
17665 encodeStack: encodeStack
8b095871
IC
17666}
17667
9987f0c1
IC
17668},{"../../script":52,"../../types":78,"typeforce":109}],64:[function(require,module,exports){
17669// OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
8b095871 17670
9987f0c1
IC
17671var bscript = require('../../script')
17672var types = require('../../types')
17673var typeforce = require('typeforce')
17674var OPS = require('bitcoin-ops')
8b095871 17675
9987f0c1
IC
17676function check (script) {
17677 var buffer = bscript.compile(script)
8b095871 17678
9987f0c1
IC
17679 return buffer.length === 25 &&
17680 buffer[0] === OPS.OP_DUP &&
17681 buffer[1] === OPS.OP_HASH160 &&
17682 buffer[2] === 0x14 &&
17683 buffer[23] === OPS.OP_EQUALVERIFY &&
17684 buffer[24] === OPS.OP_CHECKSIG
8b095871 17685}
9987f0c1 17686check.toJSON = function () { return 'pubKeyHash output' }
8b095871 17687
9987f0c1
IC
17688function encode (pubKeyHash) {
17689 typeforce(types.Hash160bit, pubKeyHash)
8b095871 17690
9987f0c1
IC
17691 return bscript.compile([
17692 OPS.OP_DUP,
17693 OPS.OP_HASH160,
17694 pubKeyHash,
17695 OPS.OP_EQUALVERIFY,
17696 OPS.OP_CHECKSIG
17697 ])
8b095871
IC
17698}
17699
9987f0c1
IC
17700function decode (buffer) {
17701 typeforce(check, buffer)
8b095871 17702
9987f0c1 17703 return buffer.slice(3, 23)
8b095871
IC
17704}
17705
9987f0c1
IC
17706module.exports = {
17707 check: check,
17708 decode: decode,
17709 encode: encode
8b095871
IC
17710}
17711
9987f0c1
IC
17712},{"../../script":52,"../../types":78,"bitcoin-ops":40,"typeforce":109}],65:[function(require,module,exports){
17713arguments[4][55][0].apply(exports,arguments)
17714},{"./input":66,"./output":67,"dup":55}],66:[function(require,module,exports){
17715// <scriptSig> {serialized scriptPubKey script}
8b095871 17716
9987f0c1
IC
17717var Buffer = require('safe-buffer').Buffer
17718var bscript = require('../../script')
17719var typeforce = require('typeforce')
8b095871 17720
9987f0c1
IC
17721function check (script, allowIncomplete) {
17722 var chunks = bscript.decompile(script)
17723 if (chunks.length < 1) return false
8b095871 17724
9987f0c1
IC
17725 var lastChunk = chunks[chunks.length - 1]
17726 if (!Buffer.isBuffer(lastChunk)) return false
8b095871 17727
9987f0c1
IC
17728 var scriptSigChunks = bscript.decompile(bscript.compile(chunks.slice(0, -1)))
17729 var redeemScriptChunks = bscript.decompile(lastChunk)
8b095871 17730
9987f0c1
IC
17731 // is redeemScript a valid script?
17732 if (redeemScriptChunks.length === 0) return false
17733
17734 // is redeemScriptSig push only?
17735 if (!bscript.isPushOnly(scriptSigChunks)) return false
17736
17737 var inputType = bscript.classifyInput(scriptSigChunks, allowIncomplete)
17738 var outputType = bscript.classifyOutput(redeemScriptChunks)
17739 if (chunks.length === 1) {
17740 return outputType === bscript.types.P2WSH || outputType === bscript.types.P2WPKH
17741 }
17742 return inputType === outputType
8b095871 17743}
9987f0c1 17744check.toJSON = function () { return 'scriptHash input' }
8b095871 17745
9987f0c1
IC
17746function encodeStack (redeemScriptStack, redeemScript) {
17747 var serializedScriptPubKey = bscript.compile(redeemScript)
8b095871 17748
9987f0c1
IC
17749 return [].concat(redeemScriptStack, serializedScriptPubKey)
17750}
8b095871 17751
9987f0c1
IC
17752function encode (redeemScriptSig, redeemScript) {
17753 var redeemScriptStack = bscript.decompile(redeemScriptSig)
8b095871 17754
9987f0c1
IC
17755 return bscript.compile(encodeStack(redeemScriptStack, redeemScript))
17756}
8b095871 17757
9987f0c1
IC
17758function decodeStack (stack) {
17759 typeforce(check, stack)
17760
17761 return {
17762 redeemScriptStack: stack.slice(0, -1),
17763 redeemScript: stack[stack.length - 1]
17764 }
8b095871
IC
17765}
17766
9987f0c1
IC
17767function decode (buffer) {
17768 var stack = bscript.decompile(buffer)
17769 var result = decodeStack(stack)
17770 result.redeemScriptSig = bscript.compile(result.redeemScriptStack)
17771 delete result.redeemScriptStack
17772 return result
17773}
8b095871 17774
9987f0c1
IC
17775module.exports = {
17776 check: check,
17777 decode: decode,
17778 decodeStack: decodeStack,
17779 encode: encode,
17780 encodeStack: encodeStack
17781}
8b095871 17782
9987f0c1
IC
17783},{"../../script":52,"safe-buffer":98,"typeforce":109}],67:[function(require,module,exports){
17784// OP_HASH160 {scriptHash} OP_EQUAL
8b095871 17785
9987f0c1
IC
17786var bscript = require('../../script')
17787var types = require('../../types')
17788var typeforce = require('typeforce')
17789var OPS = require('bitcoin-ops')
8b095871 17790
9987f0c1
IC
17791function check (script) {
17792 var buffer = bscript.compile(script)
8b095871 17793
9987f0c1
IC
17794 return buffer.length === 23 &&
17795 buffer[0] === OPS.OP_HASH160 &&
17796 buffer[1] === 0x14 &&
17797 buffer[22] === OPS.OP_EQUAL
8b095871 17798}
9987f0c1 17799check.toJSON = function () { return 'scriptHash output' }
8b095871 17800
9987f0c1
IC
17801function encode (scriptHash) {
17802 typeforce(types.Hash160bit, scriptHash)
8b095871 17803
9987f0c1
IC
17804 return bscript.compile([OPS.OP_HASH160, scriptHash, OPS.OP_EQUAL])
17805}
8b095871 17806
9987f0c1
IC
17807function decode (buffer) {
17808 typeforce(check, buffer)
8b095871 17809
9987f0c1
IC
17810 return buffer.slice(2, 22)
17811}
8b095871 17812
9987f0c1
IC
17813module.exports = {
17814 check: check,
17815 decode: decode,
17816 encode: encode
8b095871
IC
17817}
17818
9987f0c1
IC
17819},{"../../script":52,"../../types":78,"bitcoin-ops":40,"typeforce":109}],68:[function(require,module,exports){
17820module.exports = {
17821 output: require('./output')
17822}
8b095871 17823
9987f0c1
IC
17824},{"./output":69}],69:[function(require,module,exports){
17825// OP_RETURN {aa21a9ed} {commitment}
8b095871 17826
9987f0c1
IC
17827var Buffer = require('safe-buffer').Buffer
17828var bscript = require('../../script')
17829var types = require('../../types')
17830var typeforce = require('typeforce')
17831var OPS = require('bitcoin-ops')
8b095871 17832
9987f0c1 17833var HEADER = Buffer.from('aa21a9ed', 'hex')
8b095871 17834
9987f0c1
IC
17835function check (script) {
17836 var buffer = bscript.compile(script)
17837
17838 return buffer.length > 37 &&
17839 buffer[0] === OPS.OP_RETURN &&
17840 buffer[1] === 0x24 &&
17841 buffer.slice(2, 6).equals(HEADER)
8b095871
IC
17842}
17843
9987f0c1 17844check.toJSON = function () { return 'Witness commitment output' }
8b095871 17845
9987f0c1
IC
17846function encode (commitment) {
17847 typeforce(types.Hash256bit, commitment)
8b095871 17848
9987f0c1
IC
17849 var buffer = Buffer.allocUnsafe(36)
17850 HEADER.copy(buffer, 0)
17851 commitment.copy(buffer, 4)
8b095871 17852
9987f0c1
IC
17853 return bscript.compile([OPS.OP_RETURN, buffer])
17854}
8b095871 17855
9987f0c1
IC
17856function decode (buffer) {
17857 typeforce(check, buffer)
8b095871 17858
9987f0c1
IC
17859 return bscript.decompile(buffer)[1].slice(4, 36)
17860}
8b095871 17861
9987f0c1
IC
17862module.exports = {
17863 check: check,
17864 decode: decode,
17865 encode: encode
17866}
8b095871 17867
9987f0c1
IC
17868},{"../../script":52,"../../types":78,"bitcoin-ops":40,"safe-buffer":98,"typeforce":109}],70:[function(require,module,exports){
17869arguments[4][55][0].apply(exports,arguments)
17870},{"./input":71,"./output":72,"dup":55}],71:[function(require,module,exports){
17871// {signature} {pubKey}
8b095871 17872
9987f0c1 17873var pkh = require('../pubkeyhash/input')
8b095871 17874
9987f0c1
IC
17875module.exports = {
17876 check: pkh.check,
17877 decodeStack: pkh.decodeStack,
17878 encodeStack: pkh.encodeStack
8b095871
IC
17879}
17880
9987f0c1
IC
17881},{"../pubkeyhash/input":63}],72:[function(require,module,exports){
17882// OP_0 {pubKeyHash}
8b095871 17883
9987f0c1
IC
17884var bscript = require('../../script')
17885var types = require('../../types')
17886var typeforce = require('typeforce')
17887var OPS = require('bitcoin-ops')
8b095871 17888
9987f0c1
IC
17889function check (script) {
17890 var buffer = bscript.compile(script)
8b095871 17891
9987f0c1
IC
17892 return buffer.length === 22 &&
17893 buffer[0] === OPS.OP_0 &&
17894 buffer[1] === 0x14
17895}
17896check.toJSON = function () { return 'Witness pubKeyHash output' }
8b095871 17897
9987f0c1
IC
17898function encode (pubKeyHash) {
17899 typeforce(types.Hash160bit, pubKeyHash)
8b095871 17900
9987f0c1
IC
17901 return bscript.compile([OPS.OP_0, pubKeyHash])
17902}
8b095871 17903
9987f0c1
IC
17904function decode (buffer) {
17905 typeforce(check, buffer)
17906
17907 return buffer.slice(2)
8b095871
IC
17908}
17909
9987f0c1
IC
17910module.exports = {
17911 check: check,
17912 decode: decode,
17913 encode: encode
17914}
8b095871 17915
9987f0c1
IC
17916},{"../../script":52,"../../types":78,"bitcoin-ops":40,"typeforce":109}],73:[function(require,module,exports){
17917arguments[4][55][0].apply(exports,arguments)
17918},{"./input":74,"./output":75,"dup":55}],74:[function(require,module,exports){
17919// {signature} {pubKey}
8b095871 17920
9987f0c1 17921var p2sh = require('../scripthash/input')
8b095871 17922
9987f0c1
IC
17923module.exports = {
17924 check: p2sh.check,
17925 decodeStack: p2sh.decodeStack,
17926 encodeStack: p2sh.encodeStack
17927}
8b095871 17928
9987f0c1
IC
17929},{"../scripthash/input":66}],75:[function(require,module,exports){
17930// OP_0 {scriptHash}
8b095871 17931
9987f0c1
IC
17932var bscript = require('../../script')
17933var types = require('../../types')
17934var typeforce = require('typeforce')
17935var OPS = require('bitcoin-ops')
8b095871 17936
9987f0c1
IC
17937function check (script) {
17938 var buffer = bscript.compile(script)
17939
17940 return buffer.length === 34 &&
17941 buffer[0] === OPS.OP_0 &&
17942 buffer[1] === 0x20
8b095871 17943}
9987f0c1 17944check.toJSON = function () { return 'Witness scriptHash output' }
8b095871 17945
9987f0c1
IC
17946function encode (scriptHash) {
17947 typeforce(types.Hash256bit, scriptHash)
8b095871 17948
9987f0c1
IC
17949 return bscript.compile([OPS.OP_0, scriptHash])
17950}
8b095871 17951
9987f0c1
IC
17952function decode (buffer) {
17953 typeforce(check, buffer)
8b095871 17954
9987f0c1
IC
17955 return buffer.slice(2)
17956}
8b095871 17957
9987f0c1
IC
17958module.exports = {
17959 check: check,
17960 decode: decode,
17961 encode: encode
17962}
8b095871 17963
9987f0c1
IC
17964},{"../../script":52,"../../types":78,"bitcoin-ops":40,"typeforce":109}],76:[function(require,module,exports){
17965var Buffer = require('safe-buffer').Buffer
17966var bcrypto = require('./crypto')
17967var bscript = require('./script')
17968var bufferutils = require('./bufferutils')
17969var opcodes = require('bitcoin-ops')
17970var typeforce = require('typeforce')
17971var types = require('./types')
17972var varuint = require('varuint-bitcoin')
8b095871 17973
9987f0c1
IC
17974function varSliceSize (someScript) {
17975 var length = someScript.length
8b095871 17976
9987f0c1
IC
17977 return varuint.encodingLength(length) + length
17978}
8b095871 17979
9987f0c1
IC
17980function vectorSize (someVector) {
17981 var length = someVector.length
17982
17983 return varuint.encodingLength(length) + someVector.reduce(function (sum, witness) {
17984 return sum + varSliceSize(witness)
17985 }, 0)
8b095871
IC
17986}
17987
9987f0c1
IC
17988function Transaction () {
17989 this.version = 1
17990 this.locktime = 0
17991 this.ins = []
17992 this.outs = []
17993}
8b095871 17994
9987f0c1
IC
17995Transaction.DEFAULT_SEQUENCE = 0xffffffff
17996Transaction.SIGHASH_ALL = 0x01
17997Transaction.SIGHASH_NONE = 0x02
17998Transaction.SIGHASH_SINGLE = 0x03
17999Transaction.SIGHASH_ANYONECANPAY = 0x80
18000Transaction.ADVANCED_TRANSACTION_MARKER = 0x00
18001Transaction.ADVANCED_TRANSACTION_FLAG = 0x01
8b095871 18002
9987f0c1
IC
18003var EMPTY_SCRIPT = Buffer.allocUnsafe(0)
18004var EMPTY_WITNESS = []
18005var ZERO = Buffer.from('0000000000000000000000000000000000000000000000000000000000000000', 'hex')
18006var ONE = Buffer.from('0000000000000000000000000000000000000000000000000000000000000001', 'hex')
18007var VALUE_UINT64_MAX = Buffer.from('ffffffffffffffff', 'hex')
18008var BLANK_OUTPUT = {
18009 script: EMPTY_SCRIPT,
18010 valueBuffer: VALUE_UINT64_MAX
18011}
8b095871 18012
9987f0c1
IC
18013Transaction.fromBuffer = function (buffer, __noStrict) {
18014 var offset = 0
18015 function readSlice (n) {
18016 offset += n
18017 return buffer.slice(offset - n, offset)
18018 }
8b095871 18019
9987f0c1
IC
18020 function readUInt32 () {
18021 var i = buffer.readUInt32LE(offset)
18022 offset += 4
18023 return i
18024 }
8b095871 18025
9987f0c1
IC
18026 function readInt32 () {
18027 var i = buffer.readInt32LE(offset)
18028 offset += 4
18029 return i
18030 }
8b095871 18031
9987f0c1
IC
18032 function readUInt64 () {
18033 var i = bufferutils.readUInt64LE(buffer, offset)
18034 offset += 8
18035 return i
8b095871
IC
18036 }
18037
9987f0c1
IC
18038 function readVarInt () {
18039 var vi = varuint.decode(buffer, offset)
18040 offset += varuint.decode.bytes
18041 return vi
18042 }
8b095871 18043
9987f0c1
IC
18044 function readVarSlice () {
18045 return readSlice(readVarInt())
18046 }
8b095871 18047
9987f0c1
IC
18048 function readVector () {
18049 var count = readVarInt()
18050 var vector = []
18051 for (var i = 0; i < count; i++) vector.push(readVarSlice())
18052 return vector
18053 }
8b095871 18054
9987f0c1
IC
18055 var tx = new Transaction()
18056 tx.version = readInt32()
8b095871 18057
9987f0c1
IC
18058 var marker = buffer.readUInt8(offset)
18059 var flag = buffer.readUInt8(offset + 1)
8b095871 18060
9987f0c1
IC
18061 var hasWitnesses = false
18062 if (marker === Transaction.ADVANCED_TRANSACTION_MARKER &&
18063 flag === Transaction.ADVANCED_TRANSACTION_FLAG) {
18064 offset += 2
18065 hasWitnesses = true
18066 }
8b095871 18067
9987f0c1
IC
18068 var vinLen = readVarInt()
18069 for (var i = 0; i < vinLen; ++i) {
18070 tx.ins.push({
18071 hash: readSlice(32),
18072 index: readUInt32(),
18073 script: readVarSlice(),
18074 sequence: readUInt32(),
18075 witness: EMPTY_WITNESS
18076 })
18077 }
8b095871 18078
9987f0c1
IC
18079 var voutLen = readVarInt()
18080 for (i = 0; i < voutLen; ++i) {
18081 tx.outs.push({
18082 value: readUInt64(),
18083 script: readVarSlice()
18084 })
8b095871
IC
18085 }
18086
9987f0c1
IC
18087 if (hasWitnesses) {
18088 for (i = 0; i < vinLen; ++i) {
18089 tx.ins[i].witness = readVector()
18090 }
8b095871 18091
9987f0c1
IC
18092 // was this pointless?
18093 if (!tx.hasWitnesses()) throw new Error('Transaction has superfluous witness data')
18094 }
8b095871 18095
9987f0c1 18096 tx.locktime = readUInt32()
8b095871 18097
9987f0c1
IC
18098 if (__noStrict) return tx
18099 if (offset !== buffer.length) throw new Error('Transaction has unexpected data')
8b095871 18100
9987f0c1
IC
18101 return tx
18102}
8b095871 18103
9987f0c1
IC
18104Transaction.fromHex = function (hex) {
18105 return Transaction.fromBuffer(Buffer.from(hex, 'hex'))
8b095871 18106}
8b095871 18107
9987f0c1
IC
18108Transaction.isCoinbaseHash = function (buffer) {
18109 typeforce(types.Hash256bit, buffer)
18110 for (var i = 0; i < 32; ++i) {
18111 if (buffer[i] !== 0) return false
8b095871 18112 }
9987f0c1 18113 return true
8b095871 18114}
9987f0c1
IC
18115
18116Transaction.prototype.isCoinbase = function () {
18117 return this.ins.length === 1 && Transaction.isCoinbaseHash(this.ins[0].hash)
8b095871
IC
18118}
18119
9987f0c1
IC
18120Transaction.prototype.addInput = function (hash, index, sequence, scriptSig) {
18121 typeforce(types.tuple(
18122 types.Hash256bit,
18123 types.UInt32,
18124 types.maybe(types.UInt32),
18125 types.maybe(types.Buffer)
18126 ), arguments)
8b095871 18127
9987f0c1
IC
18128 if (types.Null(sequence)) {
18129 sequence = Transaction.DEFAULT_SEQUENCE
18130 }
18131
18132 // Add the input and return the input's index
18133 return (this.ins.push({
18134 hash: hash,
18135 index: index,
18136 script: scriptSig || EMPTY_SCRIPT,
18137 sequence: sequence,
18138 witness: EMPTY_WITNESS
18139 }) - 1)
8b095871
IC
18140}
18141
9987f0c1
IC
18142Transaction.prototype.addOutput = function (scriptPubKey, value) {
18143 typeforce(types.tuple(types.Buffer, types.Satoshi), arguments)
8b095871 18144
9987f0c1
IC
18145 // Add the output and return the output's index
18146 return (this.outs.push({
18147 script: scriptPubKey,
18148 value: value
18149 }) - 1)
8b095871
IC
18150}
18151
9987f0c1
IC
18152Transaction.prototype.hasWitnesses = function () {
18153 return this.ins.some(function (x) {
18154 return x.witness.length !== 0
18155 })
18156}
8b095871 18157
9987f0c1
IC
18158Transaction.prototype.weight = function () {
18159 var base = this.__byteLength(false)
18160 var total = this.__byteLength(true)
18161 return base * 3 + total
8b095871
IC
18162}
18163
9987f0c1
IC
18164Transaction.prototype.virtualSize = function () {
18165 return Math.ceil(this.weight() / 4)
18166}
8b095871 18167
9987f0c1
IC
18168Transaction.prototype.byteLength = function () {
18169 return this.__byteLength(true)
8b095871
IC
18170}
18171
9987f0c1
IC
18172Transaction.prototype.__byteLength = function (__allowWitness) {
18173 var hasWitnesses = __allowWitness && this.hasWitnesses()
18174
18175 return (
18176 (hasWitnesses ? 10 : 8) +
18177 varuint.encodingLength(this.ins.length) +
18178 varuint.encodingLength(this.outs.length) +
18179 this.ins.reduce(function (sum, input) { return sum + 40 + varSliceSize(input.script) }, 0) +
18180 this.outs.reduce(function (sum, output) { return sum + 8 + varSliceSize(output.script) }, 0) +
18181 (hasWitnesses ? this.ins.reduce(function (sum, input) { return sum + vectorSize(input.witness) }, 0) : 0)
18182 )
8b095871
IC
18183}
18184
9987f0c1
IC
18185Transaction.prototype.clone = function () {
18186 var newTx = new Transaction()
18187 newTx.version = this.version
18188 newTx.locktime = this.locktime
18189
18190 newTx.ins = this.ins.map(function (txIn) {
18191 return {
18192 hash: txIn.hash,
18193 index: txIn.index,
18194 script: txIn.script,
18195 sequence: txIn.sequence,
18196 witness: txIn.witness
8b095871 18197 }
9987f0c1 18198 })
8b095871 18199
9987f0c1
IC
18200 newTx.outs = this.outs.map(function (txOut) {
18201 return {
18202 script: txOut.script,
18203 value: txOut.value
18204 }
18205 })
8b095871 18206
9987f0c1
IC
18207 return newTx
18208}
18209
18210/**
18211 * Hash transaction for signing a specific input.
18212 *
18213 * Bitcoin uses a different hash for each signed transaction input.
18214 * This method copies the transaction, makes the necessary changes based on the
18215 * hashType, and then hashes the result.
18216 * This hash can then be used to sign the provided transaction input.
18217 */
18218Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
18219 typeforce(types.tuple(types.UInt32, types.Buffer, /* types.UInt8 */ types.Number), arguments)
18220
18221 // https://github.com/bitcoin/bitcoin/blob/master/src/test/sighash_tests.cpp#L29
18222 if (inIndex >= this.ins.length) return ONE
18223
18224 // ignore OP_CODESEPARATOR
18225 var ourScript = bscript.compile(bscript.decompile(prevOutScript).filter(function (x) {
18226 return x !== opcodes.OP_CODESEPARATOR
18227 }))
18228
18229 var txTmp = this.clone()
18230
18231 // SIGHASH_NONE: ignore all outputs? (wildcard payee)
18232 if ((hashType & 0x1f) === Transaction.SIGHASH_NONE) {
18233 txTmp.outs = []
18234
18235 // ignore sequence numbers (except at inIndex)
18236 txTmp.ins.forEach(function (input, i) {
18237 if (i === inIndex) return
18238
18239 input.sequence = 0
18240 })
18241
18242 // SIGHASH_SINGLE: ignore all outputs, except at the same index?
18243 } else if ((hashType & 0x1f) === Transaction.SIGHASH_SINGLE) {
18244 // https://github.com/bitcoin/bitcoin/blob/master/src/test/sighash_tests.cpp#L60
18245 if (inIndex >= this.outs.length) return ONE
18246
18247 // truncate outputs after
18248 txTmp.outs.length = inIndex + 1
18249
18250 // "blank" outputs before
18251 for (var i = 0; i < inIndex; i++) {
18252 txTmp.outs[i] = BLANK_OUTPUT
8b095871
IC
18253 }
18254
9987f0c1
IC
18255 // ignore sequence numbers (except at inIndex)
18256 txTmp.ins.forEach(function (input, y) {
18257 if (y === inIndex) return
8b095871 18258
9987f0c1
IC
18259 input.sequence = 0
18260 })
8b095871 18261 }
8b095871 18262
9987f0c1
IC
18263 // SIGHASH_ANYONECANPAY: ignore inputs entirely?
18264 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
18265 txTmp.ins = [txTmp.ins[inIndex]]
18266 txTmp.ins[0].script = ourScript
18267
18268 // SIGHASH_ALL: only ignore input scripts
18269 } else {
18270 // "blank" others input scripts
18271 txTmp.ins.forEach(function (input) { input.script = EMPTY_SCRIPT })
18272 txTmp.ins[inIndex].script = ourScript
18273 }
18274
18275 // serialize and hash
18276 var buffer = Buffer.allocUnsafe(txTmp.__byteLength(false) + 4)
18277 buffer.writeInt32LE(hashType, buffer.length - 4)
18278 txTmp.__toBuffer(buffer, 0, false)
18279
18280 return bcrypto.hash256(buffer)
8b095871
IC
18281}
18282
9987f0c1
IC
18283Transaction.prototype.hashForWitnessV0 = function (inIndex, prevOutScript, value, hashType) {
18284 typeforce(types.tuple(types.UInt32, types.Buffer, types.Satoshi, types.UInt32), arguments)
18285
18286 var tbuffer, toffset
18287 function writeSlice (slice) { toffset += slice.copy(tbuffer, toffset) }
18288 function writeUInt32 (i) { toffset = tbuffer.writeUInt32LE(i, toffset) }
18289 function writeUInt64 (i) { toffset = bufferutils.writeUInt64LE(tbuffer, i, toffset) }
18290 function writeVarInt (i) {
18291 varuint.encode(i, tbuffer, toffset)
18292 toffset += varuint.encode.bytes
18293 }
18294 function writeVarSlice (slice) { writeVarInt(slice.length); writeSlice(slice) }
18295
18296 var hashOutputs = ZERO
18297 var hashPrevouts = ZERO
18298 var hashSequence = ZERO
18299
18300 if (!(hashType & Transaction.SIGHASH_ANYONECANPAY)) {
18301 tbuffer = Buffer.allocUnsafe(36 * this.ins.length)
18302 toffset = 0
18303
18304 this.ins.forEach(function (txIn) {
18305 writeSlice(txIn.hash)
18306 writeUInt32(txIn.index)
18307 })
18308
18309 hashPrevouts = bcrypto.hash256(tbuffer)
18310 }
18311
18312 if (!(hashType & Transaction.SIGHASH_ANYONECANPAY) &&
18313 (hashType & 0x1f) !== Transaction.SIGHASH_SINGLE &&
18314 (hashType & 0x1f) !== Transaction.SIGHASH_NONE) {
18315 tbuffer = Buffer.allocUnsafe(4 * this.ins.length)
18316 toffset = 0
18317
18318 this.ins.forEach(function (txIn) {
18319 writeUInt32(txIn.sequence)
18320 })
18321
18322 hashSequence = bcrypto.hash256(tbuffer)
18323 }
18324
18325 if ((hashType & 0x1f) !== Transaction.SIGHASH_SINGLE &&
18326 (hashType & 0x1f) !== Transaction.SIGHASH_NONE) {
18327 var txOutsSize = this.outs.reduce(function (sum, output) {
18328 return sum + 8 + varSliceSize(output.script)
18329 }, 0)
18330
18331 tbuffer = Buffer.allocUnsafe(txOutsSize)
18332 toffset = 0
18333
18334 this.outs.forEach(function (out) {
18335 writeUInt64(out.value)
18336 writeVarSlice(out.script)
18337 })
18338
18339 hashOutputs = bcrypto.hash256(tbuffer)
18340 } else if ((hashType & 0x1f) === Transaction.SIGHASH_SINGLE && inIndex < this.outs.length) {
18341 var output = this.outs[inIndex]
18342
18343 tbuffer = Buffer.allocUnsafe(8 + varSliceSize(output.script))
18344 toffset = 0
18345 writeUInt64(output.value)
18346 writeVarSlice(output.script)
18347
18348 hashOutputs = bcrypto.hash256(tbuffer)
18349 }
18350
18351 tbuffer = Buffer.allocUnsafe(156 + varSliceSize(prevOutScript))
18352 toffset = 0
18353
18354 var input = this.ins[inIndex]
18355 writeUInt32(this.version)
18356 writeSlice(hashPrevouts)
18357 writeSlice(hashSequence)
18358 writeSlice(input.hash)
18359 writeUInt32(input.index)
18360 writeVarSlice(prevOutScript)
18361 writeUInt64(value)
18362 writeUInt32(input.sequence)
18363 writeSlice(hashOutputs)
18364 writeUInt32(this.locktime)
18365 writeUInt32(hashType)
18366 return bcrypto.hash256(tbuffer)
8b095871
IC
18367}
18368
9987f0c1
IC
18369Transaction.prototype.getHash = function () {
18370 return bcrypto.hash256(this.__toBuffer(undefined, undefined, false))
18371}
8b095871 18372
9987f0c1
IC
18373Transaction.prototype.getId = function () {
18374 // transaction hash's are displayed in reverse order
18375 return this.getHash().reverse().toString('hex')
18376}
8b095871 18377
9987f0c1
IC
18378Transaction.prototype.toBuffer = function (buffer, initialOffset) {
18379 return this.__toBuffer(buffer, initialOffset, true)
18380}
8b095871 18381
9987f0c1
IC
18382Transaction.prototype.__toBuffer = function (buffer, initialOffset, __allowWitness) {
18383 if (!buffer) buffer = Buffer.allocUnsafe(this.__byteLength(__allowWitness))
8b095871 18384
9987f0c1
IC
18385 var offset = initialOffset || 0
18386 function writeSlice (slice) { offset += slice.copy(buffer, offset) }
18387 function writeUInt8 (i) { offset = buffer.writeUInt8(i, offset) }
18388 function writeUInt32 (i) { offset = buffer.writeUInt32LE(i, offset) }
18389 function writeInt32 (i) { offset = buffer.writeInt32LE(i, offset) }
18390 function writeUInt64 (i) { offset = bufferutils.writeUInt64LE(buffer, i, offset) }
18391 function writeVarInt (i) {
18392 varuint.encode(i, buffer, offset)
18393 offset += varuint.encode.bytes
18394 }
18395 function writeVarSlice (slice) { writeVarInt(slice.length); writeSlice(slice) }
18396 function writeVector (vector) { writeVarInt(vector.length); vector.forEach(writeVarSlice) }
8b095871 18397
9987f0c1 18398 writeInt32(this.version)
8b095871 18399
9987f0c1 18400 var hasWitnesses = __allowWitness && this.hasWitnesses()
8b095871 18401
9987f0c1
IC
18402 if (hasWitnesses) {
18403 writeUInt8(Transaction.ADVANCED_TRANSACTION_MARKER)
18404 writeUInt8(Transaction.ADVANCED_TRANSACTION_FLAG)
18405 }
8b095871 18406
9987f0c1 18407 writeVarInt(this.ins.length)
8b095871 18408
9987f0c1
IC
18409 this.ins.forEach(function (txIn) {
18410 writeSlice(txIn.hash)
18411 writeUInt32(txIn.index)
18412 writeVarSlice(txIn.script)
18413 writeUInt32(txIn.sequence)
18414 })
8b095871 18415
9987f0c1
IC
18416 writeVarInt(this.outs.length)
18417 this.outs.forEach(function (txOut) {
18418 if (!txOut.valueBuffer) {
18419 writeUInt64(txOut.value)
18420 } else {
18421 writeSlice(txOut.valueBuffer)
8b095871 18422 }
8b095871 18423
9987f0c1
IC
18424 writeVarSlice(txOut.script)
18425 })
8b095871 18426
9987f0c1
IC
18427 if (hasWitnesses) {
18428 this.ins.forEach(function (input) {
18429 writeVector(input.witness)
18430 })
18431 }
8b095871 18432
9987f0c1 18433 writeUInt32(this.locktime)
8b095871 18434
9987f0c1
IC
18435 // avoid slicing unless necessary
18436 if (initialOffset !== undefined) return buffer.slice(initialOffset, offset)
18437 return buffer
18438}
8b095871 18439
9987f0c1
IC
18440Transaction.prototype.toHex = function () {
18441 return this.toBuffer().toString('hex')
18442}
8b095871 18443
9987f0c1
IC
18444Transaction.prototype.setInputScript = function (index, scriptSig) {
18445 typeforce(types.tuple(types.Number, types.Buffer), arguments)
8b095871 18446
9987f0c1
IC
18447 this.ins[index].script = scriptSig
18448}
8b095871 18449
9987f0c1
IC
18450Transaction.prototype.setWitness = function (index, witness) {
18451 typeforce(types.tuple(types.Number, [types.Buffer]), arguments)
18452
18453 this.ins[index].witness = witness
18454}
18455
18456module.exports = Transaction
18457
18458},{"./bufferutils":44,"./crypto":45,"./script":52,"./types":78,"bitcoin-ops":40,"safe-buffer":98,"typeforce":109,"varuint-bitcoin":111}],77:[function(require,module,exports){
18459var Buffer = require('safe-buffer').Buffer
18460var baddress = require('./address')
18461var bcrypto = require('./crypto')
18462var bscript = require('./script')
18463var networks = require('./networks')
18464var ops = require('bitcoin-ops')
18465var typeforce = require('typeforce')
18466var types = require('./types')
18467var scriptTypes = bscript.types
18468var SIGNABLE = [bscript.types.P2PKH, bscript.types.P2PK, bscript.types.MULTISIG]
18469var P2SH = SIGNABLE.concat([bscript.types.P2WPKH, bscript.types.P2WSH])
18470
18471var ECPair = require('./ecpair')
18472var ECSignature = require('./ecsignature')
18473var Transaction = require('./transaction')
18474
18475function extractChunks (type, chunks, script) {
18476 var pubKeys = []
18477 var signatures = []
18478 switch (type) {
18479 case scriptTypes.P2PKH:
18480 // if (redeemScript) throw new Error('Nonstandard... P2SH(P2PKH)')
18481 pubKeys = chunks.slice(1)
18482 signatures = chunks.slice(0, 1)
18483 break
18484
18485 case scriptTypes.P2PK:
18486 pubKeys[0] = script ? bscript.pubKey.output.decode(script) : undefined
18487 signatures = chunks.slice(0, 1)
18488 break
18489
18490 case scriptTypes.MULTISIG:
18491 if (script) {
18492 var multisig = bscript.multisig.output.decode(script)
18493 pubKeys = multisig.pubKeys
18494 }
18495
18496 signatures = chunks.slice(1).map(function (chunk) {
18497 return chunk.length === 0 ? undefined : chunk
18498 })
18499 break
18500 }
18501
18502 return {
18503 pubKeys: pubKeys,
18504 signatures: signatures
18505 }
18506}
18507function expandInput (scriptSig, witnessStack) {
18508 if (scriptSig.length === 0 && witnessStack.length === 0) return {}
18509
18510 var prevOutScript
18511 var prevOutType
18512 var scriptType
18513 var script
18514 var redeemScript
18515 var witnessScript
18516 var witnessScriptType
18517 var redeemScriptType
18518 var witness = false
18519 var p2wsh = false
18520 var p2sh = false
18521 var witnessProgram
18522 var chunks
18523
18524 var scriptSigChunks = bscript.decompile(scriptSig)
18525 var sigType = bscript.classifyInput(scriptSigChunks, true)
18526 if (sigType === scriptTypes.P2SH) {
18527 p2sh = true
18528 redeemScript = scriptSigChunks[scriptSigChunks.length - 1]
18529 redeemScriptType = bscript.classifyOutput(redeemScript)
18530 prevOutScript = bscript.scriptHash.output.encode(bcrypto.hash160(redeemScript))
18531 prevOutType = scriptTypes.P2SH
18532 script = redeemScript
18533 }
18534
18535 var classifyWitness = bscript.classifyWitness(witnessStack)
18536 if (classifyWitness === scriptTypes.P2WSH) {
18537 witnessScript = witnessStack[witnessStack.length - 1]
18538 witnessScriptType = bscript.classifyOutput(witnessScript)
18539 p2wsh = true
18540 if (scriptSig.length === 0) {
18541 prevOutScript = bscript.witnessScriptHash.output.encode(bcrypto.sha256(witnessScript))
18542 prevOutType = scriptTypes.P2WSH
18543 if (typeof redeemScript !== 'undefined') {
18544 throw new Error('Redeem script given when unnecessary')
18545 }
18546 // bare witness
18547 } else {
18548 if (!redeemScript) {
18549 throw new Error('No redeemScript provided for P2WSH, but scriptSig non-empty')
18550 }
18551 witnessProgram = bscript.witnessScriptHash.output.encode(bcrypto.sha256(witnessScript))
18552 if (!redeemScript.equals(witnessProgram)) {
18553 throw new Error('Redeem script didn\'t match witnessScript')
18554 }
8b095871 18555 }
8b095871 18556
9987f0c1
IC
18557 if (SIGNABLE.indexOf(bscript.classifyOutput(witnessScript)) === -1) {
18558 throw new Error('unsupported witness script')
18559 }
18560 script = witnessScript
18561 scriptType = witnessScriptType
18562 chunks = witnessStack.slice(0, -1)
18563 } else if (classifyWitness === scriptTypes.P2WPKH) {
18564 var key = witnessStack[witnessStack.length - 1]
18565 var keyHash = bcrypto.hash160(key)
18566 if (scriptSig.length === 0) {
18567 prevOutScript = bscript.witnessPubKeyHash.output.encode(keyHash)
18568 prevOutType = scriptTypes.P2WPKH
18569 if (typeof redeemScript !== 'undefined') {
18570 throw new Error('Redeem script given when unnecessary')
18571 }
18572 } else {
18573 if (!redeemScript) {
18574 throw new Error('No redeemScript provided for P2WPKH, but scriptSig wasn\'t empty')
18575 }
18576 witnessProgram = bscript.witnessPubKeyHash.output.encode(keyHash)
18577 if (!redeemScript.equals(witnessProgram)) {
18578 throw new Error('Redeem script did not have the right witness program')
18579 }
18580 }
8b095871 18581
9987f0c1
IC
18582 scriptType = scriptTypes.P2PKH
18583 chunks = witnessStack
18584 } else if (redeemScript) {
18585 if (P2SH.indexOf(redeemScriptType) === -1) {
18586 throw new Error('Bad redeemscript!')
8b095871 18587 }
8b095871 18588
9987f0c1
IC
18589 script = redeemScript
18590 scriptType = redeemScriptType
18591 chunks = scriptSigChunks.slice(0, -1)
18592 } else {
18593 prevOutType = scriptType = bscript.classifyInput(scriptSig)
18594 chunks = scriptSigChunks
8b095871 18595 }
8b095871 18596
9987f0c1 18597 var expanded = extractChunks(scriptType, chunks, script)
8b095871 18598
9987f0c1
IC
18599 var result = {
18600 pubKeys: expanded.pubKeys,
18601 signatures: expanded.signatures,
18602 prevOutScript: prevOutScript,
18603 prevOutType: prevOutType,
18604 signType: scriptType,
18605 signScript: script,
18606 witness: Boolean(witness)
18607 }
8b095871 18608
9987f0c1
IC
18609 if (p2sh) {
18610 result.redeemScript = redeemScript
18611 result.redeemScriptType = redeemScriptType
18612 }
8b095871 18613
9987f0c1
IC
18614 if (p2wsh) {
18615 result.witnessScript = witnessScript
18616 result.witnessScriptType = witnessScriptType
8b095871
IC
18617 }
18618
9987f0c1 18619 return result
8b095871
IC
18620}
18621
9987f0c1
IC
18622// could be done in expandInput, but requires the original Transaction for hashForSignature
18623function fixMultisigOrder (input, transaction, vin) {
18624 if (input.redeemScriptType !== scriptTypes.MULTISIG || !input.redeemScript) return
18625 if (input.pubKeys.length === input.signatures.length) return
8b095871 18626
9987f0c1 18627 var unmatched = input.signatures.concat()
8b095871 18628
9987f0c1
IC
18629 input.signatures = input.pubKeys.map(function (pubKey) {
18630 var keyPair = ECPair.fromPublicKeyBuffer(pubKey)
18631 var match
8b095871 18632
9987f0c1
IC
18633 // check for a signature
18634 unmatched.some(function (signature, i) {
18635 // skip if undefined || OP_0
18636 if (!signature) return false
8b095871 18637
9987f0c1
IC
18638 // TODO: avoid O(n) hashForSignature
18639 var parsed = ECSignature.parseScriptSignature(signature)
18640 var hash = transaction.hashForSignature(vin, input.redeemScript, parsed.hashType)
8b095871 18641
9987f0c1
IC
18642 // skip if signature does not match pubKey
18643 if (!keyPair.verify(hash, parsed.signature)) return false
8b095871 18644
9987f0c1
IC
18645 // remove matched signature from unmatched
18646 unmatched[i] = undefined
18647 match = signature
8b095871 18648
9987f0c1
IC
18649 return true
18650 })
8b095871 18651
9987f0c1
IC
18652 return match
18653 })
18654}
8b095871 18655
9987f0c1
IC
18656function expandOutput (script, scriptType, ourPubKey) {
18657 typeforce(types.Buffer, script)
8b095871 18658
9987f0c1
IC
18659 var scriptChunks = bscript.decompile(script)
18660 if (!scriptType) {
18661 scriptType = bscript.classifyOutput(script)
8b095871 18662 }
8b095871 18663
9987f0c1 18664 var pubKeys = []
8b095871 18665
9987f0c1
IC
18666 switch (scriptType) {
18667 // does our hash160(pubKey) match the output scripts?
18668 case scriptTypes.P2PKH:
18669 if (!ourPubKey) break
8b095871 18670
9987f0c1
IC
18671 var pkh1 = scriptChunks[2]
18672 var pkh2 = bcrypto.hash160(ourPubKey)
18673 if (pkh1.equals(pkh2)) pubKeys = [ourPubKey]
18674 break
8b095871 18675
9987f0c1
IC
18676 // does our hash160(pubKey) match the output scripts?
18677 case scriptTypes.P2WPKH:
18678 if (!ourPubKey) break
8b095871 18679
9987f0c1
IC
18680 var wpkh1 = scriptChunks[1]
18681 var wpkh2 = bcrypto.hash160(ourPubKey)
18682 if (wpkh1.equals(wpkh2)) pubKeys = [ourPubKey]
18683 break
8b095871 18684
9987f0c1
IC
18685 case scriptTypes.P2PK:
18686 pubKeys = scriptChunks.slice(0, 1)
18687 break
18688
18689 case scriptTypes.MULTISIG:
18690 pubKeys = scriptChunks.slice(1, -2)
18691 break
8b095871 18692
9987f0c1
IC
18693 default: return { scriptType: scriptType }
18694 }
8b095871 18695
9987f0c1
IC
18696 return {
18697 pubKeys: pubKeys,
18698 scriptType: scriptType,
18699 signatures: pubKeys.map(function () { return undefined })
18700 }
8b095871
IC
18701}
18702
9987f0c1
IC
18703function checkP2shInput (input, redeemScriptHash) {
18704 if (input.prevOutType) {
18705 if (input.prevOutType !== scriptTypes.P2SH) throw new Error('PrevOutScript must be P2SH')
8b095871 18706
9987f0c1
IC
18707 var prevOutScriptScriptHash = bscript.decompile(input.prevOutScript)[1]
18708 if (!prevOutScriptScriptHash.equals(redeemScriptHash)) throw new Error('Inconsistent hash160(RedeemScript)')
18709 }
8b095871
IC
18710}
18711
9987f0c1
IC
18712function checkP2WSHInput (input, witnessScriptHash) {
18713 if (input.prevOutType) {
18714 if (input.prevOutType !== scriptTypes.P2WSH) throw new Error('PrevOutScript must be P2WSH')
8b095871 18715
9987f0c1
IC
18716 var scriptHash = bscript.decompile(input.prevOutScript)[1]
18717 if (!scriptHash.equals(witnessScriptHash)) throw new Error('Inconsistent sha25(WitnessScript)')
18718 }
8b095871
IC
18719}
18720
9987f0c1
IC
18721function prepareInput (input, kpPubKey, redeemScript, witnessValue, witnessScript) {
18722 var expanded
18723 var prevOutType
18724 var prevOutScript
8b095871 18725
9987f0c1
IC
18726 var p2sh = false
18727 var p2shType
18728 var redeemScriptHash
18729
18730 var witness = false
18731 var p2wsh = false
18732 var witnessType
18733 var witnessScriptHash
18734
18735 var signType
18736 var signScript
18737
18738 if (redeemScript && witnessScript) {
18739 redeemScriptHash = bcrypto.hash160(redeemScript)
18740 witnessScriptHash = bcrypto.sha256(witnessScript)
18741 checkP2shInput(input, redeemScriptHash)
18742
18743 if (!redeemScript.equals(bscript.witnessScriptHash.output.encode(witnessScriptHash))) throw new Error('Witness script inconsistent with redeem script')
18744
18745 expanded = expandOutput(witnessScript, undefined, kpPubKey)
18746 if (!expanded.pubKeys) throw new Error('WitnessScript not supported "' + bscript.toASM(redeemScript) + '"')
18747 prevOutType = bscript.types.P2SH
18748 prevOutScript = bscript.scriptHash.output.encode(redeemScriptHash)
18749 p2sh = witness = p2wsh = true
18750 p2shType = bscript.types.P2WSH
18751 signType = witnessType = expanded.scriptType
18752 signScript = witnessScript
18753 } else if (redeemScript) {
18754 redeemScriptHash = bcrypto.hash160(redeemScript)
18755 checkP2shInput(input, redeemScriptHash)
18756
18757 expanded = expandOutput(redeemScript, undefined, kpPubKey)
18758 if (!expanded.pubKeys) throw new Error('RedeemScript not supported "' + bscript.toASM(redeemScript) + '"')
18759
18760 prevOutType = bscript.types.P2SH
18761 prevOutScript = bscript.scriptHash.output.encode(redeemScriptHash)
18762 p2sh = true
18763 signType = p2shType = expanded.scriptType
18764 signScript = redeemScript
18765 witness = signType === bscript.types.P2WPKH
18766 } else if (witnessScript) {
18767 witnessScriptHash = bcrypto.sha256(witnessScript)
18768 checkP2WSHInput(input, witnessScriptHash)
18769
18770 expanded = expandOutput(witnessScript, undefined, kpPubKey)
18771 if (!expanded.pubKeys) throw new Error('WitnessScript not supported "' + bscript.toASM(redeemScript) + '"')
18772
18773 prevOutType = bscript.types.P2WSH
18774 prevOutScript = bscript.witnessScriptHash.output.encode(witnessScriptHash)
18775 witness = p2wsh = true
18776 signType = witnessType = expanded.scriptType
18777 signScript = witnessScript
18778 } else if (input.prevOutType) {
18779 // embedded scripts are not possible without a redeemScript
18780 if (input.prevOutType === scriptTypes.P2SH ||
18781 input.prevOutType === scriptTypes.P2WSH) {
18782 throw new Error('PrevOutScript is ' + input.prevOutType + ', requires redeemScript')
18783 }
18784
18785 prevOutType = input.prevOutType
18786 prevOutScript = input.prevOutScript
18787 expanded = expandOutput(input.prevOutScript, input.prevOutType, kpPubKey)
18788 if (!expanded.pubKeys) return
18789
18790 witness = (input.prevOutType === scriptTypes.P2WPKH)
18791 signType = prevOutType
18792 signScript = prevOutScript
18793 } else {
18794 prevOutScript = bscript.pubKeyHash.output.encode(bcrypto.hash160(kpPubKey))
18795 expanded = expandOutput(prevOutScript, scriptTypes.P2PKH, kpPubKey)
18796 prevOutType = scriptTypes.P2PKH
18797 witness = false
18798 signType = prevOutType
18799 signScript = prevOutScript
18800 }
8b095871 18801
9987f0c1
IC
18802 if (witness && !types.Satoshi(witnessValue)) {
18803 throw new Error('Input was witness but not given witness value')
18804 }
8b095871 18805
9987f0c1
IC
18806 if (signType === scriptTypes.P2WPKH) {
18807 signScript = bscript.pubKeyHash.output.encode(bscript.witnessPubKeyHash.output.decode(signScript))
18808 }
8b095871 18809
9987f0c1
IC
18810 if (p2sh) {
18811 input.redeemScript = redeemScript
18812 input.redeemScriptType = p2shType
18813 }
8b095871 18814
9987f0c1
IC
18815 if (p2wsh) {
18816 input.witnessScript = witnessScript
18817 input.witnessScriptType = witnessType
18818 }
8b095871 18819
9987f0c1
IC
18820 input.pubKeys = expanded.pubKeys
18821 input.signatures = expanded.signatures
18822 input.signScript = signScript
18823 input.signType = signType
18824 input.prevOutScript = prevOutScript
18825 input.prevOutType = prevOutType
18826 input.witness = witness
8b095871
IC
18827}
18828
9987f0c1
IC
18829function buildStack (type, signatures, pubKeys, allowIncomplete) {
18830 if (type === scriptTypes.P2PKH) {
18831 if (signatures.length === 1 && Buffer.isBuffer(signatures[0]) && pubKeys.length === 1) return bscript.pubKeyHash.input.encodeStack(signatures[0], pubKeys[0])
18832 } else if (type === scriptTypes.P2PK) {
18833 if (signatures.length === 1 && Buffer.isBuffer(signatures[0])) return bscript.pubKey.input.encodeStack(signatures[0])
18834 } else if (type === scriptTypes.MULTISIG) {
18835 if (signatures.length > 0) {
18836 signatures = signatures.map(function (signature) {
18837 return signature || ops.OP_0
18838 })
18839 if (!allowIncomplete) {
18840 // remove blank signatures
18841 signatures = signatures.filter(function (x) { return x !== ops.OP_0 })
18842 }
8b095871 18843
9987f0c1
IC
18844 return bscript.multisig.input.encodeStack(signatures /* see if it's necessary first */)
18845 }
18846 } else {
18847 throw new Error('Not yet supported')
18848 }
8b095871 18849
9987f0c1 18850 if (!allowIncomplete) throw new Error('Not enough signatures provided')
8b095871 18851
9987f0c1 18852 return []
8b095871
IC
18853}
18854
9987f0c1
IC
18855function buildInput (input, allowIncomplete) {
18856 var scriptType = input.prevOutType
18857 var sig = []
18858 var witness = []
18859 if (SIGNABLE.indexOf(scriptType) !== -1) {
18860 sig = buildStack(scriptType, input.signatures, input.pubKeys, allowIncomplete)
8b095871
IC
18861 }
18862
9987f0c1
IC
18863 var p2sh = false
18864 if (scriptType === bscript.types.P2SH) {
18865 // We can remove this error later when we have a guarantee prepareInput
18866 // rejects unsignable scripts - it MUST be signable at this point.
18867 if (P2SH.indexOf(input.redeemScriptType) === -1) {
18868 throw new Error('Impossible to sign this type')
18869 }
18870 p2sh = true
18871 if (SIGNABLE.indexOf(input.redeemScriptType) !== -1) {
18872 sig = buildStack(input.redeemScriptType, input.signatures, input.pubKeys, allowIncomplete)
18873 }
18874 // If it wasn't SIGNABLE, it's witness, defer to that
18875 scriptType = input.redeemScriptType
8b095871
IC
18876 }
18877
9987f0c1
IC
18878 if (scriptType === bscript.types.P2WPKH) {
18879 // P2WPKH is a special case of P2PKH
18880 witness = buildStack(bscript.types.P2PKH, input.signatures, input.pubKeys, allowIncomplete)
18881 } else if (scriptType === bscript.types.P2WSH) {
18882 // We can remove this check later
18883 if (SIGNABLE.indexOf(input.witnessScriptType) !== -1) {
18884 witness = buildStack(input.witnessScriptType, input.signatures, input.pubKeys, allowIncomplete)
18885 witness.push(input.witnessScript)
18886 } else {
18887 // We can remove this error later when we have a guarantee prepareInput
18888 // rejects unsignble scripts - it MUST be signable at this point.
18889 throw new Error()
18890 }
8b095871 18891
9987f0c1 18892 scriptType = input.witnessScriptType
8b095871
IC
18893 }
18894
9987f0c1
IC
18895 // append redeemScript if necessary
18896 if (p2sh) {
18897 sig.push(input.redeemScript)
8b095871
IC
18898 }
18899
9987f0c1
IC
18900 return {
18901 type: scriptType,
18902 script: bscript.compile(sig),
18903 witness: witness
8b095871 18904 }
8b095871
IC
18905}
18906
9987f0c1
IC
18907function TransactionBuilder (network, maximumFeeRate) {
18908 this.prevTxMap = {}
18909 this.network = network || networks.bitcoin
8b095871 18910
9987f0c1
IC
18911 // WARNING: This is __NOT__ to be relied on, its just another potential safety mechanism (safety in-depth)
18912 this.maximumFeeRate = maximumFeeRate || 1000
8b095871 18913
9987f0c1
IC
18914 this.inputs = []
18915 this.tx = new Transaction()
8b095871
IC
18916}
18917
9987f0c1
IC
18918TransactionBuilder.prototype.setLockTime = function (locktime) {
18919 typeforce(types.UInt32, locktime)
8b095871 18920
9987f0c1
IC
18921 // if any signatures exist, throw
18922 if (this.inputs.some(function (input) {
18923 if (!input.signatures) return false
18924
18925 return input.signatures.some(function (s) { return s })
18926 })) {
18927 throw new Error('No, this would invalidate signatures')
18928 }
18929
18930 this.tx.locktime = locktime
8b095871
IC
18931}
18932
9987f0c1
IC
18933TransactionBuilder.prototype.setVersion = function (version) {
18934 typeforce(types.UInt32, version)
8b095871 18935
9987f0c1
IC
18936 // XXX: this might eventually become more complex depending on what the versions represent
18937 this.tx.version = version
18938}
8b095871 18939
9987f0c1
IC
18940TransactionBuilder.fromTransaction = function (transaction, network) {
18941 var txb = new TransactionBuilder(network)
8b095871 18942
9987f0c1
IC
18943 // Copy transaction fields
18944 txb.setVersion(transaction.version)
18945 txb.setLockTime(transaction.locktime)
8b095871 18946
9987f0c1
IC
18947 // Copy outputs (done first to avoid signature invalidation)
18948 transaction.outs.forEach(function (txOut) {
18949 txb.addOutput(txOut.script, txOut.value)
18950 })
8b095871 18951
9987f0c1
IC
18952 // Copy inputs
18953 transaction.ins.forEach(function (txIn) {
18954 txb.__addInputUnsafe(txIn.hash, txIn.index, {
18955 sequence: txIn.sequence,
18956 script: txIn.script,
18957 witness: txIn.witness
18958 })
8b095871
IC
18959 })
18960
9987f0c1
IC
18961 // fix some things not possible through the public API
18962 txb.inputs.forEach(function (input, i) {
18963 fixMultisigOrder(input, transaction, i)
18964 })
8b095871 18965
9987f0c1 18966 return txb
8b095871
IC
18967}
18968
9987f0c1
IC
18969TransactionBuilder.prototype.addInput = function (txHash, vout, sequence, prevOutScript) {
18970 if (!this.__canModifyInputs()) {
18971 throw new Error('No, this would invalidate signatures')
18972 }
8b095871 18973
9987f0c1 18974 var value
8b095871 18975
9987f0c1
IC
18976 // is it a hex string?
18977 if (typeof txHash === 'string') {
18978 // transaction hashs's are displayed in reverse order, un-reverse it
18979 txHash = Buffer.from(txHash, 'hex').reverse()
8b095871 18980
9987f0c1
IC
18981 // is it a Transaction object?
18982 } else if (txHash instanceof Transaction) {
18983 var txOut = txHash.outs[vout]
18984 prevOutScript = txOut.script
18985 value = txOut.value
8b095871 18986
9987f0c1
IC
18987 txHash = txHash.getHash()
18988 }
8b095871 18989
9987f0c1
IC
18990 return this.__addInputUnsafe(txHash, vout, {
18991 sequence: sequence,
18992 prevOutScript: prevOutScript,
18993 value: value
18994 })
18995}
8b095871 18996
9987f0c1
IC
18997TransactionBuilder.prototype.__addInputUnsafe = function (txHash, vout, options) {
18998 if (Transaction.isCoinbaseHash(txHash)) {
18999 throw new Error('coinbase inputs not supported')
19000 }
8b095871 19001
9987f0c1
IC
19002 var prevTxOut = txHash.toString('hex') + ':' + vout
19003 if (this.prevTxMap[prevTxOut] !== undefined) throw new Error('Duplicate TxOut: ' + prevTxOut)
8b095871 19004
9987f0c1 19005 var input = {}
8b095871 19006
9987f0c1
IC
19007 // derive what we can from the scriptSig
19008 if (options.script !== undefined) {
19009 input = expandInput(options.script, options.witness || [])
8b095871
IC
19010 }
19011
9987f0c1
IC
19012 // if an input value was given, retain it
19013 if (options.value !== undefined) {
19014 input.value = options.value
8b095871 19015 }
8b095871 19016
9987f0c1
IC
19017 // derive what we can from the previous transactions output script
19018 if (!input.prevOutScript && options.prevOutScript) {
19019 var prevOutType
8b095871 19020
9987f0c1
IC
19021 if (!input.pubKeys && !input.signatures) {
19022 var expanded = expandOutput(options.prevOutScript)
8b095871 19023
9987f0c1
IC
19024 if (expanded.pubKeys) {
19025 input.pubKeys = expanded.pubKeys
19026 input.signatures = expanded.signatures
19027 }
8b095871 19028
9987f0c1
IC
19029 prevOutType = expanded.scriptType
19030 }
8b095871 19031
9987f0c1
IC
19032 input.prevOutScript = options.prevOutScript
19033 input.prevOutType = prevOutType || bscript.classifyOutput(options.prevOutScript)
19034 }
8b095871 19035
9987f0c1
IC
19036 var vin = this.tx.addInput(txHash, vout, options.sequence, options.scriptSig)
19037 this.inputs[vin] = input
19038 this.prevTxMap[prevTxOut] = vin
8b095871 19039
9987f0c1
IC
19040 return vin
19041}
8b095871 19042
9987f0c1
IC
19043TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
19044 if (!this.__canModifyOutputs()) {
19045 throw new Error('No, this would invalidate signatures')
8b095871
IC
19046 }
19047
9987f0c1
IC
19048 // Attempt to get a script if it's a base58 address string
19049 if (typeof scriptPubKey === 'string') {
19050 scriptPubKey = baddress.toOutputScript(scriptPubKey, this.network)
8b095871 19051 }
8b095871 19052
9987f0c1
IC
19053 return this.tx.addOutput(scriptPubKey, value)
19054}
8b095871 19055
9987f0c1
IC
19056TransactionBuilder.prototype.build = function () {
19057 return this.__build(false)
19058}
19059TransactionBuilder.prototype.buildIncomplete = function () {
19060 return this.__build(true)
19061}
8b095871 19062
9987f0c1
IC
19063TransactionBuilder.prototype.__build = function (allowIncomplete) {
19064 if (!allowIncomplete) {
19065 if (!this.tx.ins.length) throw new Error('Transaction has no inputs')
19066 if (!this.tx.outs.length) throw new Error('Transaction has no outputs')
19067 }
8b095871 19068
9987f0c1
IC
19069 var tx = this.tx.clone()
19070 // Create script signatures from inputs
19071 this.inputs.forEach(function (input, i) {
19072 var scriptType = input.witnessScriptType || input.redeemScriptType || input.prevOutType
19073 if (!scriptType && !allowIncomplete) throw new Error('Transaction is not complete')
19074 var result = buildInput(input, allowIncomplete)
8b095871 19075
9987f0c1
IC
19076 // skip if no result
19077 if (!allowIncomplete) {
19078 if (SIGNABLE.indexOf(result.type) === -1 && result.type !== bscript.types.P2WPKH) {
19079 throw new Error(result.type + ' not supported')
19080 }
19081 }
8b095871 19082
9987f0c1
IC
19083 tx.setInputScript(i, result.script)
19084 tx.setWitness(i, result.witness)
19085 })
8b095871 19086
9987f0c1
IC
19087 if (!allowIncomplete) {
19088 // do not rely on this, its merely a last resort
19089 if (this.__overMaximumFees(tx.byteLength())) {
19090 throw new Error('Transaction has absurd fees')
19091 }
19092 }
8b095871 19093
9987f0c1 19094 return tx
8b095871
IC
19095}
19096
9987f0c1
IC
19097function canSign (input) {
19098 return input.prevOutScript !== undefined &&
19099 input.signScript !== undefined &&
19100 input.pubKeys !== undefined &&
19101 input.signatures !== undefined &&
19102 input.signatures.length === input.pubKeys.length &&
19103 input.pubKeys.length > 0 &&
19104 input.witness !== undefined
8b095871
IC
19105}
19106
9987f0c1
IC
19107TransactionBuilder.prototype.sign = function (vin, keyPair, redeemScript, hashType, witnessValue, witnessScript) {
19108 if (keyPair.network !== this.network) throw new Error('Inconsistent network')
19109 if (!this.inputs[vin]) throw new Error('No input at index: ' + vin)
19110 hashType = hashType || Transaction.SIGHASH_ALL
8b095871 19111
9987f0c1 19112 var input = this.inputs[vin]
8b095871 19113
9987f0c1
IC
19114 // if redeemScript was previously provided, enforce consistency
19115 if (input.redeemScript !== undefined &&
19116 redeemScript &&
19117 !input.redeemScript.equals(redeemScript)) {
19118 throw new Error('Inconsistent redeemScript')
19119 }
8b095871 19120
9987f0c1
IC
19121 var kpPubKey = keyPair.getPublicKeyBuffer()
19122 if (!canSign(input)) {
19123 prepareInput(input, kpPubKey, redeemScript, witnessValue, witnessScript)
19124 if (!canSign(input)) throw Error(input.prevOutType + ' not supported')
19125 }
8b095871 19126
9987f0c1
IC
19127 // ready to sign
19128 var signatureHash
19129 if (input.witness) {
19130 signatureHash = this.tx.hashForWitnessV0(vin, input.signScript, witnessValue, hashType)
8b095871 19131 } else {
9987f0c1 19132 signatureHash = this.tx.hashForSignature(vin, input.signScript, hashType)
8b095871 19133 }
9987f0c1
IC
19134 // enforce in order signing of public keys
19135 var signed = input.pubKeys.some(function (pubKey, i) {
19136 if (!kpPubKey.equals(pubKey)) return false
19137 if (input.signatures[i]) throw new Error('Signature already exists')
8b095871 19138
9987f0c1
IC
19139 input.signatures[i] = keyPair.sign(signatureHash).toScriptSignature(hashType)
19140 return true
19141 })
8b095871 19142
9987f0c1 19143 if (!signed) throw new Error('Key pair cannot sign for this input')
8b095871
IC
19144}
19145
9987f0c1
IC
19146function signatureHashType (buffer) {
19147 return buffer.readUInt8(buffer.length - 1)
8b095871
IC
19148}
19149
9987f0c1
IC
19150TransactionBuilder.prototype.__canModifyInputs = function () {
19151 return this.inputs.every(function (input) {
19152 // any signatures?
19153 if (input.signatures === undefined) return true
8b095871 19154
9987f0c1
IC
19155 return input.signatures.every(function (signature) {
19156 if (!signature) return true
19157 var hashType = signatureHashType(signature)
8b095871 19158
9987f0c1
IC
19159 // if SIGHASH_ANYONECANPAY is set, signatures would not
19160 // be invalidated by more inputs
19161 return hashType & Transaction.SIGHASH_ANYONECANPAY
19162 })
19163 })
8b095871
IC
19164}
19165
9987f0c1
IC
19166TransactionBuilder.prototype.__canModifyOutputs = function () {
19167 var nInputs = this.tx.ins.length
19168 var nOutputs = this.tx.outs.length
8b095871 19169
9987f0c1
IC
19170 return this.inputs.every(function (input) {
19171 if (input.signatures === undefined) return true
8b095871 19172
9987f0c1
IC
19173 return input.signatures.every(function (signature) {
19174 if (!signature) return true
19175 var hashType = signatureHashType(signature)
8b095871 19176
9987f0c1
IC
19177 var hashTypeMod = hashType & 0x1f
19178 if (hashTypeMod === Transaction.SIGHASH_NONE) return true
19179 if (hashTypeMod === Transaction.SIGHASH_SINGLE) {
19180 // if SIGHASH_SINGLE is set, and nInputs > nOutputs
19181 // some signatures would be invalidated by the addition
19182 // of more outputs
19183 return nInputs <= nOutputs
19184 }
19185 })
19186 })
8b095871
IC
19187}
19188
9987f0c1
IC
19189TransactionBuilder.prototype.__overMaximumFees = function (bytes) {
19190 // not all inputs will have .value defined
19191 var incoming = this.inputs.reduce(function (a, x) { return a + (x.value >>> 0) }, 0)
8b095871 19192
9987f0c1
IC
19193 // but all outputs do, and if we have any input value
19194 // we can immediately determine if the outputs are too small
19195 var outgoing = this.tx.outs.reduce(function (a, x) { return a + x.value }, 0)
19196 var fee = incoming - outgoing
19197 var feeRate = fee / bytes
8b095871 19198
9987f0c1 19199 return feeRate > this.maximumFeeRate
8b095871
IC
19200}
19201
9987f0c1 19202module.exports = TransactionBuilder
8b095871 19203
9987f0c1
IC
19204},{"./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){
19205var typeforce = require('typeforce')
8b095871 19206
9987f0c1
IC
19207var UINT31_MAX = Math.pow(2, 31) - 1
19208function UInt31 (value) {
19209 return typeforce.UInt32(value) && value <= UINT31_MAX
19210}
8b095871 19211
9987f0c1
IC
19212function BIP32Path (value) {
19213 return typeforce.String(value) && value.match(/^(m\/)?(\d+'?\/)*\d+'?$/)
19214}
19215BIP32Path.toJSON = function () { return 'BIP32 derivation path' }
8b095871 19216
9987f0c1
IC
19217var SATOSHI_MAX = 21 * 1e14
19218function Satoshi (value) {
19219 return typeforce.UInt53(value) && value <= SATOSHI_MAX
19220}
8b095871 19221
9987f0c1
IC
19222// external dependent types
19223var BigInt = typeforce.quacksLike('BigInteger')
19224var ECPoint = typeforce.quacksLike('Point')
8b095871 19225
9987f0c1
IC
19226// exposed, external API
19227var ECSignature = typeforce.compile({ r: BigInt, s: BigInt })
19228var Network = typeforce.compile({
19229 messagePrefix: typeforce.oneOf(typeforce.Buffer, typeforce.String),
19230 bip32: {
19231 public: typeforce.UInt32,
19232 private: typeforce.UInt32
19233 },
19234 pubKeyHash: typeforce.UInt8,
19235 scriptHash: typeforce.UInt8,
19236 wif: typeforce.UInt8
19237})
8b095871 19238
9987f0c1
IC
19239// extend typeforce types with ours
19240var types = {
19241 BigInt: BigInt,
19242 BIP32Path: BIP32Path,
19243 Buffer256bit: typeforce.BufferN(32),
19244 ECPoint: ECPoint,
19245 ECSignature: ECSignature,
19246 Hash160bit: typeforce.BufferN(20),
19247 Hash256bit: typeforce.BufferN(32),
19248 Network: Network,
19249 Satoshi: Satoshi,
19250 UInt31: UInt31
19251}
8b095871 19252
9987f0c1
IC
19253for (var typeName in typeforce) {
19254 types[typeName] = typeforce[typeName]
19255}
8b095871 19256
9987f0c1 19257module.exports = types
8b095871 19258
9987f0c1
IC
19259},{"typeforce":109}],79:[function(require,module,exports){
19260var basex = require('base-x')
19261var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
8b095871 19262
9987f0c1 19263module.exports = basex(ALPHABET)
8b095871 19264
9987f0c1
IC
19265},{"base-x":34}],80:[function(require,module,exports){
19266(function (Buffer){
19267'use strict'
8b095871 19268
9987f0c1
IC
19269var base58 = require('bs58')
19270var createHash = require('create-hash')
8b095871 19271
9987f0c1
IC
19272// SHA256(SHA256(buffer))
19273function sha256x2 (buffer) {
19274 var tmp = createHash('sha256').update(buffer).digest()
19275 return createHash('sha256').update(tmp).digest()
19276}
8b095871 19277
9987f0c1
IC
19278// Encode a buffer as a base58-check encoded string
19279function encode (payload) {
19280 var checksum = sha256x2(payload)
8b095871 19281
9987f0c1
IC
19282 return base58.encode(Buffer.concat([
19283 payload,
19284 checksum
19285 ], payload.length + 4))
19286}
8b095871 19287
9987f0c1
IC
19288function decodeRaw (buffer) {
19289 var payload = buffer.slice(0, -4)
19290 var checksum = buffer.slice(-4)
19291 var newChecksum = sha256x2(payload)
8b095871 19292
9987f0c1
IC
19293 if (checksum[0] ^ newChecksum[0] |
19294 checksum[1] ^ newChecksum[1] |
19295 checksum[2] ^ newChecksum[2] |
19296 checksum[3] ^ newChecksum[3]) return
8b095871 19297
9987f0c1
IC
19298 return payload
19299}
8b095871 19300
9987f0c1
IC
19301// Decode a base58-check encoded string to a buffer, no result if checksum is wrong
19302function decodeUnsafe (string) {
19303 var buffer = base58.decodeUnsafe(string)
19304 if (!buffer) return
8b095871 19305
9987f0c1
IC
19306 return decodeRaw(buffer)
19307}
8b095871 19308
9987f0c1
IC
19309function decode (string) {
19310 var buffer = base58.decode(string)
19311 var payload = decodeRaw(buffer)
19312 if (!payload) throw new Error('Invalid checksum')
19313 return payload
19314}
8b095871 19315
9987f0c1
IC
19316module.exports = {
19317 encode: encode,
19318 decode: decode,
19319 decodeUnsafe: decodeUnsafe
19320}
8b095871 19321
9987f0c1
IC
19322}).call(this,require("buffer").Buffer)
19323},{"bs58":79,"buffer":4,"create-hash":82}],81:[function(require,module,exports){
19324var Buffer = require('safe-buffer').Buffer
19325var Transform = require('stream').Transform
19326var StringDecoder = require('string_decoder').StringDecoder
19327var inherits = require('inherits')
8b095871 19328
9987f0c1
IC
19329function CipherBase (hashMode) {
19330 Transform.call(this)
19331 this.hashMode = typeof hashMode === 'string'
19332 if (this.hashMode) {
19333 this[hashMode] = this._finalOrDigest
19334 } else {
19335 this.final = this._finalOrDigest
8b095871 19336 }
9987f0c1
IC
19337 if (this._final) {
19338 this.__final = this._final
19339 this._final = null
19340 }
19341 this._decoder = null
19342 this._encoding = null
8b095871 19343}
9987f0c1 19344inherits(CipherBase, Transform)
8b095871 19345
9987f0c1
IC
19346CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
19347 if (typeof data === 'string') {
19348 data = Buffer.from(data, inputEnc)
19349 }
8b095871 19350
9987f0c1
IC
19351 var outData = this._update(data)
19352 if (this.hashMode) return this
8b095871 19353
9987f0c1
IC
19354 if (outputEnc) {
19355 outData = this._toString(outData, outputEnc)
19356 }
8b095871 19357
9987f0c1
IC
19358 return outData
19359}
8b095871 19360
9987f0c1
IC
19361CipherBase.prototype.setAutoPadding = function () {}
19362CipherBase.prototype.getAuthTag = function () {
19363 throw new Error('trying to get auth tag in unsupported state')
19364}
8b095871 19365
9987f0c1
IC
19366CipherBase.prototype.setAuthTag = function () {
19367 throw new Error('trying to set auth tag in unsupported state')
19368}
8b095871 19369
9987f0c1
IC
19370CipherBase.prototype.setAAD = function () {
19371 throw new Error('trying to set aad in unsupported state')
19372}
8b095871 19373
9987f0c1
IC
19374CipherBase.prototype._transform = function (data, _, next) {
19375 var err
19376 try {
19377 if (this.hashMode) {
19378 this._update(data)
19379 } else {
19380 this.push(this._update(data))
19381 }
19382 } catch (e) {
19383 err = e
19384 } finally {
19385 next(err)
19386 }
19387}
19388CipherBase.prototype._flush = function (done) {
19389 var err
19390 try {
19391 this.push(this.__final())
19392 } catch (e) {
19393 err = e
8b095871
IC
19394 }
19395
9987f0c1
IC
19396 done(err)
19397}
19398CipherBase.prototype._finalOrDigest = function (outputEnc) {
19399 var outData = this.__final() || Buffer.alloc(0)
19400 if (outputEnc) {
19401 outData = this._toString(outData, outputEnc, true)
19402 }
19403 return outData
8b095871
IC
19404}
19405
9987f0c1
IC
19406CipherBase.prototype._toString = function (value, enc, fin) {
19407 if (!this._decoder) {
19408 this._decoder = new StringDecoder(enc)
19409 this._encoding = enc
19410 }
8b095871 19411
9987f0c1 19412 if (this._encoding !== enc) throw new Error('can\'t switch encodings')
8b095871 19413
9987f0c1
IC
19414 var out = this._decoder.write(value)
19415 if (fin) {
19416 out += this._decoder.end()
19417 }
8b095871 19418
9987f0c1
IC
19419 return out
19420}
8b095871 19421
9987f0c1 19422module.exports = CipherBase
8b095871 19423
9987f0c1
IC
19424},{"inherits":93,"safe-buffer":98,"stream":27,"string_decoder":28}],82:[function(require,module,exports){
19425(function (Buffer){
19426'use strict'
19427var inherits = require('inherits')
19428var md5 = require('./md5')
19429var RIPEMD160 = require('ripemd160')
19430var sha = require('sha.js')
8b095871 19431
9987f0c1
IC
19432var Base = require('cipher-base')
19433
19434function HashNoConstructor (hash) {
19435 Base.call(this, 'digest')
8b095871 19436
9987f0c1
IC
19437 this._hash = hash
19438 this.buffers = []
8b095871
IC
19439}
19440
9987f0c1 19441inherits(HashNoConstructor, Base)
8b095871 19442
9987f0c1
IC
19443HashNoConstructor.prototype._update = function (data) {
19444 this.buffers.push(data)
8b095871
IC
19445}
19446
9987f0c1
IC
19447HashNoConstructor.prototype._final = function () {
19448 var buf = Buffer.concat(this.buffers)
19449 var r = this._hash(buf)
19450 this.buffers = null
8b095871 19451
9987f0c1
IC
19452 return r
19453}
8b095871 19454
9987f0c1
IC
19455function Hash (hash) {
19456 Base.call(this, 'digest')
8b095871 19457
9987f0c1
IC
19458 this._hash = hash
19459}
8b095871 19460
9987f0c1 19461inherits(Hash, Base)
8b095871 19462
9987f0c1
IC
19463Hash.prototype._update = function (data) {
19464 this._hash.update(data)
19465}
8b095871 19466
9987f0c1
IC
19467Hash.prototype._final = function () {
19468 return this._hash.digest()
19469}
8b095871 19470
9987f0c1
IC
19471module.exports = function createHash (alg) {
19472 alg = alg.toLowerCase()
19473 if (alg === 'md5') return new HashNoConstructor(md5)
19474 if (alg === 'rmd160' || alg === 'ripemd160') return new Hash(new RIPEMD160())
8b095871 19475
9987f0c1
IC
19476 return new Hash(sha(alg))
19477}
8b095871 19478
9987f0c1
IC
19479}).call(this,require("buffer").Buffer)
19480},{"./md5":84,"buffer":4,"cipher-base":81,"inherits":93,"ripemd160":97,"sha.js":100}],83:[function(require,module,exports){
19481(function (Buffer){
19482'use strict'
19483var intSize = 4
19484var zeroBuffer = new Buffer(intSize)
19485zeroBuffer.fill(0)
8b095871 19486
9987f0c1
IC
19487var charSize = 8
19488var hashSize = 16
8b095871 19489
9987f0c1
IC
19490function toArray (buf) {
19491 if ((buf.length % intSize) !== 0) {
19492 var len = buf.length + (intSize - (buf.length % intSize))
19493 buf = Buffer.concat([buf, zeroBuffer], len)
19494 }
8b095871 19495
9987f0c1
IC
19496 var arr = new Array(buf.length >>> 2)
19497 for (var i = 0, j = 0; i < buf.length; i += intSize, j++) {
19498 arr[j] = buf.readInt32LE(i)
8b095871
IC
19499 }
19500
9987f0c1 19501 return arr
8b095871
IC
19502}
19503
9987f0c1
IC
19504module.exports = function hash (buf, fn) {
19505 var arr = fn(toArray(buf), buf.length * charSize)
19506 buf = new Buffer(hashSize)
19507 for (var i = 0; i < arr.length; i++) {
19508 buf.writeInt32LE(arr[i], i << 2, true)
19509 }
19510 return buf
8b095871
IC
19511}
19512
19513}).call(this,require("buffer").Buffer)
9987f0c1
IC
19514},{"buffer":4}],84:[function(require,module,exports){
19515'use strict'
19516/*
19517 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
19518 * Digest Algorithm, as defined in RFC 1321.
19519 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
19520 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
19521 * Distributed under the BSD License
19522 * See http://pajhome.org.uk/crypt/md5 for more info.
19523 */
8b095871 19524
9987f0c1 19525var makeHash = require('./make-hash')
8b095871 19526
9987f0c1
IC
19527/*
19528 * Calculate the MD5 of an array of little-endian words, and a bit length
19529 */
19530function core_md5 (x, len) {
19531 /* append padding */
19532 x[len >> 5] |= 0x80 << ((len) % 32)
19533 x[(((len + 64) >>> 9) << 4) + 14] = len
19534
19535 var a = 1732584193
19536 var b = -271733879
19537 var c = -1732584194
19538 var d = 271733878
19539
19540 for (var i = 0; i < x.length; i += 16) {
19541 var olda = a
19542 var oldb = b
19543 var oldc = c
19544 var oldd = d
19545
19546 a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936)
19547 d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586)
19548 c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819)
19549 b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330)
19550 a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897)
19551 d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426)
19552 c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341)
19553 b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983)
19554 a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416)
19555 d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417)
19556 c = md5_ff(c, d, a, b, x[i + 10], 17, -42063)
19557 b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162)
19558 a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682)
19559 d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101)
19560 c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290)
19561 b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329)
19562
19563 a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510)
19564 d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632)
19565 c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713)
19566 b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302)
19567 a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691)
19568 d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083)
19569 c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335)
19570 b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848)
19571 a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438)
19572 d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690)
19573 c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961)
19574 b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501)
19575 a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467)
19576 d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784)
19577 c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473)
19578 b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734)
19579
19580 a = md5_hh(a, b, c, d, x[i + 5], 4, -378558)
19581 d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463)
19582 c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562)
19583 b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556)
19584 a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060)
19585 d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353)
19586 c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632)
19587 b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640)
19588 a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174)
19589 d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222)
19590 c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979)
19591 b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189)
19592 a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487)
19593 d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835)
19594 c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520)
19595 b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651)
19596
19597 a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844)
19598 d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415)
19599 c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905)
19600 b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055)
19601 a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571)
19602 d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606)
19603 c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523)
19604 b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799)
19605 a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359)
19606 d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744)
19607 c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380)
19608 b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649)
19609 a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070)
19610 d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379)
19611 c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259)
19612 b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551)
19613
19614 a = safe_add(a, olda)
19615 b = safe_add(b, oldb)
19616 c = safe_add(c, oldc)
19617 d = safe_add(d, oldd)
19618 }
19619
19620 return [a, b, c, d]
19621}
8b095871 19622
9987f0c1
IC
19623/*
19624 * These functions implement the four basic operations the algorithm uses.
19625 */
19626function md5_cmn (q, a, b, x, s, t) {
19627 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
8b095871
IC
19628}
19629
9987f0c1
IC
19630function md5_ff (a, b, c, d, x, s, t) {
19631 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t)
19632}
8b095871 19633
9987f0c1
IC
19634function md5_gg (a, b, c, d, x, s, t) {
19635 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t)
19636}
8b095871 19637
9987f0c1
IC
19638function md5_hh (a, b, c, d, x, s, t) {
19639 return md5_cmn(b ^ c ^ d, a, b, x, s, t)
19640}
8b095871 19641
9987f0c1
IC
19642function md5_ii (a, b, c, d, x, s, t) {
19643 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t)
19644}
8b095871 19645
9987f0c1
IC
19646/*
19647 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
19648 * to work around bugs in some JS interpreters.
19649 */
19650function safe_add (x, y) {
19651 var lsw = (x & 0xFFFF) + (y & 0xFFFF)
19652 var msw = (x >> 16) + (y >> 16) + (lsw >> 16)
19653 return (msw << 16) | (lsw & 0xFFFF)
19654}
8b095871 19655
9987f0c1
IC
19656/*
19657 * Bitwise rotate a 32-bit number to the left.
19658 */
19659function bit_rol (num, cnt) {
19660 return (num << cnt) | (num >>> (32 - cnt))
19661}
8b095871 19662
9987f0c1
IC
19663module.exports = function md5 (buf) {
19664 return makeHash(buf, core_md5)
8b095871
IC
19665}
19666
9987f0c1
IC
19667},{"./make-hash":83}],85:[function(require,module,exports){
19668'use strict'
19669var inherits = require('inherits')
19670var Legacy = require('./legacy')
19671var Base = require('cipher-base')
19672var Buffer = require('safe-buffer').Buffer
19673var md5 = require('create-hash/md5')
19674var RIPEMD160 = require('ripemd160')
8b095871 19675
9987f0c1 19676var sha = require('sha.js')
8b095871 19677
9987f0c1 19678var ZEROS = Buffer.alloc(128)
8b095871 19679
9987f0c1
IC
19680function Hmac (alg, key) {
19681 Base.call(this, 'digest')
19682 if (typeof key === 'string') {
19683 key = Buffer.from(key)
19684 }
8b095871 19685
9987f0c1 19686 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
8b095871 19687
9987f0c1
IC
19688 this._alg = alg
19689 this._key = key
19690 if (key.length > blocksize) {
19691 var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
19692 key = hash.update(key).digest()
19693 } else if (key.length < blocksize) {
19694 key = Buffer.concat([key, ZEROS], blocksize)
19695 }
8b095871 19696
9987f0c1
IC
19697 var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
19698 var opad = this._opad = Buffer.allocUnsafe(blocksize)
8b095871 19699
9987f0c1
IC
19700 for (var i = 0; i < blocksize; i++) {
19701 ipad[i] = key[i] ^ 0x36
19702 opad[i] = key[i] ^ 0x5C
8b095871 19703 }
9987f0c1
IC
19704 this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
19705 this._hash.update(ipad)
19706}
8b095871 19707
9987f0c1
IC
19708inherits(Hmac, Base)
19709
19710Hmac.prototype._update = function (data) {
19711 this._hash.update(data)
8b095871
IC
19712}
19713
9987f0c1
IC
19714Hmac.prototype._final = function () {
19715 var h = this._hash.digest()
19716 var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)
19717 return hash.update(this._opad).update(h).digest()
8b095871
IC
19718}
19719
9987f0c1
IC
19720module.exports = function createHmac (alg, key) {
19721 alg = alg.toLowerCase()
19722 if (alg === 'rmd160' || alg === 'ripemd160') {
19723 return new Hmac('rmd160', key)
19724 }
19725 if (alg === 'md5') {
19726 return new Legacy(md5, key)
19727 }
19728 return new Hmac(alg, key)
19729}
8b095871 19730
9987f0c1
IC
19731},{"./legacy":86,"cipher-base":81,"create-hash/md5":84,"inherits":93,"ripemd160":97,"safe-buffer":98,"sha.js":100}],86:[function(require,module,exports){
19732'use strict'
19733var inherits = require('inherits')
19734var Buffer = require('safe-buffer').Buffer
8b095871 19735
9987f0c1 19736var Base = require('cipher-base')
8b095871 19737
9987f0c1
IC
19738var ZEROS = Buffer.alloc(128)
19739var blocksize = 64
8b095871 19740
9987f0c1
IC
19741function Hmac (alg, key) {
19742 Base.call(this, 'digest')
19743 if (typeof key === 'string') {
19744 key = Buffer.from(key)
8b095871
IC
19745 }
19746
9987f0c1
IC
19747 this._alg = alg
19748 this._key = key
8b095871 19749
9987f0c1
IC
19750 if (key.length > blocksize) {
19751 key = alg(key)
19752 } else if (key.length < blocksize) {
19753 key = Buffer.concat([key, ZEROS], blocksize)
19754 }
8b095871 19755
9987f0c1
IC
19756 var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
19757 var opad = this._opad = Buffer.allocUnsafe(blocksize)
8b095871 19758
9987f0c1
IC
19759 for (var i = 0; i < blocksize; i++) {
19760 ipad[i] = key[i] ^ 0x36
19761 opad[i] = key[i] ^ 0x5C
19762 }
8b095871 19763
9987f0c1 19764 this._hash = [ipad]
8b095871
IC
19765}
19766
9987f0c1 19767inherits(Hmac, Base)
8b095871 19768
9987f0c1
IC
19769Hmac.prototype._update = function (data) {
19770 this._hash.push(data)
8b095871
IC
19771}
19772
9987f0c1
IC
19773Hmac.prototype._final = function () {
19774 var h = this._alg(Buffer.concat(this._hash))
19775 return this._alg(Buffer.concat([this._opad, h]))
8b095871 19776}
9987f0c1 19777module.exports = Hmac
8b095871 19778
9987f0c1 19779},{"cipher-base":81,"inherits":93,"safe-buffer":98}],87:[function(require,module,exports){
8b095871 19780var assert = require('assert')
8b095871
IC
19781var BigInteger = require('bigi')
19782
9987f0c1 19783var Point = require('./point')
8b095871 19784
9987f0c1
IC
19785function Curve (p, a, b, Gx, Gy, n, h) {
19786 this.p = p
19787 this.a = a
19788 this.b = b
19789 this.G = Point.fromAffine(this, Gx, Gy)
19790 this.n = n
19791 this.h = h
8b095871 19792
9987f0c1 19793 this.infinity = new Point(this, null, null, BigInteger.ZERO)
8b095871 19794
9987f0c1
IC
19795 // result caching
19796 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
8b095871 19797
9987f0c1
IC
19798 // determine size of p in bytes
19799 this.pLength = Math.floor((this.p.bitLength() + 7) / 8)
19800}
8b095871 19801
9987f0c1
IC
19802Curve.prototype.pointFromX = function (isOdd, x) {
19803 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
19804 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
8b095871 19805
9987f0c1
IC
19806 var y = beta
19807 if (beta.isEven() ^ !isOdd) {
19808 y = this.p.subtract(y) // -y % p
8b095871 19809 }
9987f0c1
IC
19810
19811 return Point.fromAffine(this, x, y)
8b095871
IC
19812}
19813
9987f0c1
IC
19814Curve.prototype.isInfinity = function (Q) {
19815 if (Q === this.infinity) return true
8b095871 19816
9987f0c1
IC
19817 return Q.z.signum() === 0 && Q.y.signum() !== 0
19818}
8b095871 19819
9987f0c1
IC
19820Curve.prototype.isOnCurve = function (Q) {
19821 if (this.isInfinity(Q)) return true
8b095871 19822
9987f0c1
IC
19823 var x = Q.affineX
19824 var y = Q.affineY
19825 var a = this.a
19826 var b = this.b
19827 var p = this.p
8b095871 19828
9987f0c1
IC
19829 // Check that xQ and yQ are integers in the interval [0, p - 1]
19830 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
19831 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
8b095871 19832
9987f0c1
IC
19833 // and check that y^2 = x^3 + ax + b (mod p)
19834 var lhs = y.square().mod(p)
19835 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
19836 return lhs.equals(rhs)
19837}
8b095871 19838
9987f0c1
IC
19839/**
19840 * Validate an elliptic curve point.
19841 *
19842 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
19843 */
19844Curve.prototype.validate = function (Q) {
19845 // Check Q != O
19846 assert(!this.isInfinity(Q), 'Point is at infinity')
19847 assert(this.isOnCurve(Q), 'Point is not on the curve')
19848
19849 // Check nQ = O (where Q is a scalar multiple of G)
19850 var nQ = Q.multiply(this.n)
19851 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
8b095871 19852
9987f0c1
IC
19853 return true
19854}
8b095871 19855
9987f0c1 19856module.exports = Curve
8b095871 19857
9987f0c1
IC
19858},{"./point":91,"assert":1,"bigi":37}],88:[function(require,module,exports){
19859module.exports={
19860 "secp128r1": {
19861 "p": "fffffffdffffffffffffffffffffffff",
19862 "a": "fffffffdfffffffffffffffffffffffc",
19863 "b": "e87579c11079f43dd824993c2cee5ed3",
19864 "n": "fffffffe0000000075a30d1b9038a115",
19865 "h": "01",
19866 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
19867 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
19868 },
19869 "secp160k1": {
19870 "p": "fffffffffffffffffffffffffffffffeffffac73",
19871 "a": "00",
19872 "b": "07",
19873 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
19874 "h": "01",
19875 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
19876 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
19877 },
19878 "secp160r1": {
19879 "p": "ffffffffffffffffffffffffffffffff7fffffff",
19880 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
19881 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
19882 "n": "0100000000000000000001f4c8f927aed3ca752257",
19883 "h": "01",
19884 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
19885 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
19886 },
19887 "secp192k1": {
19888 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
19889 "a": "00",
19890 "b": "03",
19891 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
19892 "h": "01",
19893 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
19894 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
19895 },
19896 "secp192r1": {
19897 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
19898 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
19899 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
19900 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
19901 "h": "01",
19902 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
19903 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
19904 },
19905 "secp256k1": {
19906 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
19907 "a": "00",
19908 "b": "07",
19909 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
19910 "h": "01",
19911 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
19912 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
19913 },
19914 "secp256r1": {
19915 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
19916 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
19917 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
19918 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
19919 "h": "01",
19920 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
19921 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
19922 }
8b095871
IC
19923}
19924
9987f0c1
IC
19925},{}],89:[function(require,module,exports){
19926var Point = require('./point')
19927var Curve = require('./curve')
8b095871 19928
9987f0c1 19929var getCurveByName = require('./names')
8b095871 19930
9987f0c1
IC
19931module.exports = {
19932 Curve: Curve,
19933 Point: Point,
19934 getCurveByName: getCurveByName
8b095871
IC
19935}
19936
9987f0c1
IC
19937},{"./curve":87,"./names":90,"./point":91}],90:[function(require,module,exports){
19938var BigInteger = require('bigi')
8b095871 19939
9987f0c1
IC
19940var curves = require('./curves.json')
19941var Curve = require('./curve')
8b095871 19942
9987f0c1
IC
19943function getCurveByName (name) {
19944 var curve = curves[name]
19945 if (!curve) return null
8b095871 19946
9987f0c1
IC
19947 var p = new BigInteger(curve.p, 16)
19948 var a = new BigInteger(curve.a, 16)
19949 var b = new BigInteger(curve.b, 16)
19950 var n = new BigInteger(curve.n, 16)
19951 var h = new BigInteger(curve.h, 16)
19952 var Gx = new BigInteger(curve.Gx, 16)
19953 var Gy = new BigInteger(curve.Gy, 16)
8b095871 19954
9987f0c1 19955 return new Curve(p, a, b, Gx, Gy, n, h)
8b095871
IC
19956}
19957
9987f0c1 19958module.exports = getCurveByName
8b095871 19959
9987f0c1
IC
19960},{"./curve":87,"./curves.json":88,"bigi":37}],91:[function(require,module,exports){
19961(function (Buffer){
19962var assert = require('assert')
19963var BigInteger = require('bigi')
8b095871 19964
9987f0c1 19965var THREE = BigInteger.valueOf(3)
8b095871 19966
9987f0c1
IC
19967function Point (curve, x, y, z) {
19968 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
8b095871 19969
9987f0c1
IC
19970 this.curve = curve
19971 this.x = x
19972 this.y = y
19973 this.z = z
19974 this._zInv = null
8b095871 19975
9987f0c1 19976 this.compressed = true
8b095871
IC
19977}
19978
9987f0c1
IC
19979Object.defineProperty(Point.prototype, 'zInv', {
19980 get: function () {
19981 if (this._zInv === null) {
19982 this._zInv = this.z.modInverse(this.curve.p)
19983 }
8b095871 19984
9987f0c1
IC
19985 return this._zInv
19986 }
19987})
8b095871 19988
9987f0c1
IC
19989Object.defineProperty(Point.prototype, 'affineX', {
19990 get: function () {
19991 return this.x.multiply(this.zInv).mod(this.curve.p)
19992 }
19993})
19994
19995Object.defineProperty(Point.prototype, 'affineY', {
19996 get: function () {
19997 return this.y.multiply(this.zInv).mod(this.curve.p)
19998 }
19999})
20000
20001Point.fromAffine = function (curve, x, y) {
20002 return new Point(curve, x, y, BigInteger.ONE)
8b095871
IC
20003}
20004
9987f0c1
IC
20005Point.prototype.equals = function (other) {
20006 if (other === this) return true
20007 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
20008 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
8b095871 20009
9987f0c1
IC
20010 // u = Y2 * Z1 - Y1 * Z2
20011 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
8b095871 20012
9987f0c1 20013 if (u.signum() !== 0) return false
8b095871 20014
9987f0c1
IC
20015 // v = X2 * Z1 - X1 * Z2
20016 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
8b095871 20017
9987f0c1
IC
20018 return v.signum() === 0
20019}
8b095871 20020
9987f0c1
IC
20021Point.prototype.negate = function () {
20022 var y = this.curve.p.subtract(this.y)
8b095871 20023
9987f0c1 20024 return new Point(this.curve, this.x, y, this.z)
8b095871
IC
20025}
20026
9987f0c1
IC
20027Point.prototype.add = function (b) {
20028 if (this.curve.isInfinity(this)) return b
20029 if (this.curve.isInfinity(b)) return this
20030
20031 var x1 = this.x
20032 var y1 = this.y
20033 var x2 = b.x
20034 var y2 = b.y
8b095871 20035
9987f0c1
IC
20036 // u = Y2 * Z1 - Y1 * Z2
20037 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
20038 // v = X2 * Z1 - X1 * Z2
20039 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
8b095871 20040
9987f0c1
IC
20041 if (v.signum() === 0) {
20042 if (u.signum() === 0) {
20043 return this.twice() // this == b, so double
20044 }
8b095871 20045
9987f0c1 20046 return this.curve.infinity // this = -b, so infinity
8b095871 20047 }
9987f0c1
IC
20048
20049 var v2 = v.square()
20050 var v3 = v2.multiply(v)
20051 var x1v2 = x1.multiply(v2)
20052 var zu2 = u.square().multiply(this.z)
20053
20054 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
20055 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
20056 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
20057 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)
20058 // z3 = v^3 * z1 * z2
20059 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
20060
20061 return new Point(this.curve, x3, y3, z3)
8b095871
IC
20062}
20063
9987f0c1
IC
20064Point.prototype.twice = function () {
20065 if (this.curve.isInfinity(this)) return this
20066 if (this.y.signum() === 0) return this.curve.infinity
8b095871 20067
9987f0c1
IC
20068 var x1 = this.x
20069 var y1 = this.y
8b095871 20070
9987f0c1
IC
20071 var y1z1 = y1.multiply(this.z).mod(this.curve.p)
20072 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
20073 var a = this.curve.a
8b095871 20074
9987f0c1
IC
20075 // w = 3 * x1^2 + a * z1^2
20076 var w = x1.square().multiply(THREE)
8b095871 20077
9987f0c1
IC
20078 if (a.signum() !== 0) {
20079 w = w.add(this.z.square().multiply(a))
20080 }
8b095871 20081
9987f0c1
IC
20082 w = w.mod(this.curve.p)
20083 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
20084 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
20085 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
20086 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
20087 // z3 = 8 * (y1 * z1)^3
20088 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
8b095871 20089
9987f0c1 20090 return new Point(this.curve, x3, y3, z3)
8b095871
IC
20091}
20092
9987f0c1
IC
20093// Simple NAF (Non-Adjacent Form) multiplication algorithm
20094// TODO: modularize the multiplication algorithm
20095Point.prototype.multiply = function (k) {
20096 if (this.curve.isInfinity(this)) return this
20097 if (k.signum() === 0) return this.curve.infinity
8b095871 20098
9987f0c1
IC
20099 var e = k
20100 var h = e.multiply(THREE)
8b095871 20101
9987f0c1
IC
20102 var neg = this.negate()
20103 var R = this
8b095871 20104
9987f0c1
IC
20105 for (var i = h.bitLength() - 2; i > 0; --i) {
20106 var hBit = h.testBit(i)
20107 var eBit = e.testBit(i)
8b095871 20108
9987f0c1 20109 R = R.twice()
8b095871 20110
9987f0c1
IC
20111 if (hBit !== eBit) {
20112 R = R.add(hBit ? this : neg)
20113 }
8b095871
IC
20114 }
20115
9987f0c1
IC
20116 return R
20117}
8b095871 20118
9987f0c1
IC
20119// Compute this*j + x*k (simultaneous multiplication)
20120Point.prototype.multiplyTwo = function (j, x, k) {
20121 var i = Math.max(j.bitLength(), k.bitLength()) - 1
20122 var R = this.curve.infinity
20123 var both = this.add(x)
20124
20125 while (i >= 0) {
20126 var jBit = j.testBit(i)
20127 var kBit = k.testBit(i)
20128
20129 R = R.twice()
20130
20131 if (jBit) {
20132 if (kBit) {
20133 R = R.add(both)
20134 } else {
20135 R = R.add(this)
20136 }
20137 } else if (kBit) {
20138 R = R.add(x)
20139 }
20140 --i
8b095871
IC
20141 }
20142
9987f0c1
IC
20143 return R
20144}
8b095871 20145
9987f0c1
IC
20146Point.prototype.getEncoded = function (compressed) {
20147 if (compressed == null) compressed = this.compressed
20148 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
8b095871 20149
9987f0c1
IC
20150 var x = this.affineX
20151 var y = this.affineY
20152 var byteLength = this.curve.pLength
20153 var buffer
20154
20155 // 0x02/0x03 | X
20156 if (compressed) {
20157 buffer = new Buffer(1 + byteLength)
20158 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
8b095871 20159
9987f0c1 20160 // 0x04 | X | Y
8b095871 20161 } else {
9987f0c1
IC
20162 buffer = new Buffer(1 + byteLength + byteLength)
20163 buffer.writeUInt8(0x04, 0)
8b095871 20164
9987f0c1 20165 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
8b095871
IC
20166 }
20167
9987f0c1 20168 x.toBuffer(byteLength).copy(buffer, 1)
8b095871 20169
9987f0c1 20170 return buffer
8b095871
IC
20171}
20172
9987f0c1
IC
20173Point.decodeFrom = function (curve, buffer) {
20174 var type = buffer.readUInt8(0)
20175 var compressed = (type !== 4)
8b095871 20176
9987f0c1
IC
20177 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
20178 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
8b095871 20179
9987f0c1
IC
20180 var Q
20181 if (compressed) {
20182 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
20183 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
8b095871 20184
9987f0c1
IC
20185 var isOdd = (type === 0x03)
20186 Q = curve.pointFromX(isOdd, x)
20187 } else {
20188 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
8b095871 20189
9987f0c1
IC
20190 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
20191 Q = Point.fromAffine(curve, x, y)
20192 }
8b095871 20193
9987f0c1
IC
20194 Q.compressed = compressed
20195 return Q
8b095871
IC
20196}
20197
9987f0c1
IC
20198Point.prototype.toString = function () {
20199 if (this.curve.isInfinity(this)) return '(INFINITY)'
8b095871 20200
9987f0c1
IC
20201 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
20202}
8b095871 20203
9987f0c1 20204module.exports = Point
8b095871 20205
9987f0c1
IC
20206}).call(this,require("buffer").Buffer)
20207},{"assert":1,"bigi":37,"buffer":4}],92:[function(require,module,exports){
20208(function (Buffer){
20209'use strict'
20210var Transform = require('stream').Transform
20211var inherits = require('inherits')
8b095871 20212
9987f0c1
IC
20213function HashBase (blockSize) {
20214 Transform.call(this)
8b095871 20215
9987f0c1
IC
20216 this._block = new Buffer(blockSize)
20217 this._blockSize = blockSize
20218 this._blockOffset = 0
20219 this._length = [0, 0, 0, 0]
8b095871 20220
9987f0c1
IC
20221 this._finalized = false
20222}
8b095871 20223
9987f0c1 20224inherits(HashBase, Transform)
8b095871 20225
9987f0c1
IC
20226HashBase.prototype._transform = function (chunk, encoding, callback) {
20227 var error = null
20228 try {
20229 if (encoding !== 'buffer') chunk = new Buffer(chunk, encoding)
20230 this.update(chunk)
20231 } catch (err) {
20232 error = err
20233 }
8b095871 20234
9987f0c1
IC
20235 callback(error)
20236}
8b095871 20237
9987f0c1
IC
20238HashBase.prototype._flush = function (callback) {
20239 var error = null
20240 try {
20241 this.push(this._digest())
20242 } catch (err) {
20243 error = err
8b095871
IC
20244 }
20245
9987f0c1 20246 callback(error)
8b095871
IC
20247}
20248
9987f0c1
IC
20249HashBase.prototype.update = function (data, encoding) {
20250 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
20251 if (this._finalized) throw new Error('Digest already called')
20252 if (!Buffer.isBuffer(data)) data = new Buffer(data, encoding || 'binary')
8b095871 20253
9987f0c1
IC
20254 // consume data
20255 var block = this._block
20256 var offset = 0
20257 while (this._blockOffset + data.length - offset >= this._blockSize) {
20258 for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]
20259 this._update()
20260 this._blockOffset = 0
20261 }
20262 while (offset < data.length) block[this._blockOffset++] = data[offset++]
8b095871 20263
9987f0c1
IC
20264 // update length
20265 for (var j = 0, carry = data.length * 8; carry > 0; ++j) {
20266 this._length[j] += carry
20267 carry = (this._length[j] / 0x0100000000) | 0
20268 if (carry > 0) this._length[j] -= 0x0100000000 * carry
20269 }
8b095871 20270
9987f0c1
IC
20271 return this
20272}
8b095871 20273
9987f0c1
IC
20274HashBase.prototype._update = function (data) {
20275 throw new Error('_update is not implemented')
20276}
8b095871 20277
9987f0c1
IC
20278HashBase.prototype.digest = function (encoding) {
20279 if (this._finalized) throw new Error('Digest already called')
20280 this._finalized = true
8b095871 20281
9987f0c1
IC
20282 var digest = this._digest()
20283 if (encoding !== undefined) digest = digest.toString(encoding)
20284 return digest
20285}
8b095871 20286
9987f0c1
IC
20287HashBase.prototype._digest = function () {
20288 throw new Error('_digest is not implemented')
20289}
8b095871 20290
9987f0c1 20291module.exports = HashBase
8b095871 20292
9987f0c1
IC
20293}).call(this,require("buffer").Buffer)
20294},{"buffer":4,"inherits":93,"stream":27}],93:[function(require,module,exports){
20295arguments[4][8][0].apply(exports,arguments)
20296},{"dup":8}],94:[function(require,module,exports){
20297(function (Buffer){
20298// constant-space merkle root calculation algorithm
20299module.exports = function fastRoot (values, digestFn) {
20300 if (!Array.isArray(values)) throw TypeError('Expected values Array')
20301 if (typeof digestFn !== 'function') throw TypeError('Expected digest Function')
8b095871 20302
9987f0c1
IC
20303 var length = values.length
20304 var results = values.concat()
8b095871 20305
9987f0c1
IC
20306 while (length > 1) {
20307 var j = 0
8b095871 20308
9987f0c1
IC
20309 for (var i = 0; i < length; i += 2, ++j) {
20310 var left = results[i]
20311 var right = i + 1 === length ? left : results[i + 1]
20312 var data = Buffer.concat([left, right])
8b095871 20313
9987f0c1 20314 results[j] = digestFn(data)
8b095871
IC
20315 }
20316
9987f0c1 20317 length = j
8b095871
IC
20318 }
20319
9987f0c1 20320 return results[0]
8b095871
IC
20321}
20322
8b095871 20323}).call(this,require("buffer").Buffer)
9987f0c1
IC
20324},{"buffer":4}],95:[function(require,module,exports){
20325var OPS = require('bitcoin-ops')
20326
20327function encodingLength (i) {
20328 return i < OPS.OP_PUSHDATA1 ? 1
20329 : i <= 0xff ? 2
20330 : i <= 0xffff ? 3
20331 : 5
8b095871
IC
20332}
20333
9987f0c1
IC
20334function encode (buffer, number, offset) {
20335 var size = encodingLength(number)
8b095871 20336
9987f0c1
IC
20337 // ~6 bit
20338 if (size === 1) {
20339 buffer.writeUInt8(number, offset)
8b095871 20340
9987f0c1
IC
20341 // 8 bit
20342 } else if (size === 2) {
20343 buffer.writeUInt8(OPS.OP_PUSHDATA1, offset)
20344 buffer.writeUInt8(number, offset + 1)
20345
20346 // 16 bit
20347 } else if (size === 3) {
20348 buffer.writeUInt8(OPS.OP_PUSHDATA2, offset)
20349 buffer.writeUInt16LE(number, offset + 1)
8b095871 20350
9987f0c1
IC
20351 // 32 bit
20352 } else {
20353 buffer.writeUInt8(OPS.OP_PUSHDATA4, offset)
20354 buffer.writeUInt32LE(number, offset + 1)
20355 }
8b095871 20356
9987f0c1 20357 return size
8b095871
IC
20358}
20359
9987f0c1
IC
20360function decode (buffer, offset) {
20361 var opcode = buffer.readUInt8(offset)
20362 var number, size
8b095871 20363
9987f0c1
IC
20364 // ~6 bit
20365 if (opcode < OPS.OP_PUSHDATA1) {
20366 number = opcode
20367 size = 1
8b095871 20368
9987f0c1
IC
20369 // 8 bit
20370 } else if (opcode === OPS.OP_PUSHDATA1) {
20371 if (offset + 2 > buffer.length) return null
20372 number = buffer.readUInt8(offset + 1)
20373 size = 2
8b095871 20374
9987f0c1
IC
20375 // 16 bit
20376 } else if (opcode === OPS.OP_PUSHDATA2) {
20377 if (offset + 3 > buffer.length) return null
20378 number = buffer.readUInt16LE(offset + 1)
20379 size = 3
8b095871 20380
9987f0c1
IC
20381 // 32 bit
20382 } else {
20383 if (offset + 5 > buffer.length) return null
20384 if (opcode !== OPS.OP_PUSHDATA4) throw new Error('Unexpected opcode')
8b095871 20385
9987f0c1
IC
20386 number = buffer.readUInt32LE(offset + 1)
20387 size = 5
20388 }
8b095871 20389
9987f0c1
IC
20390 return {
20391 opcode: opcode,
20392 number: number,
20393 size: size
20394 }
8b095871
IC
20395}
20396
20397module.exports = {
9987f0c1
IC
20398 encodingLength: encodingLength,
20399 encode: encode,
20400 decode: decode
8b095871
IC
20401}
20402
9987f0c1
IC
20403},{"bitcoin-ops":40}],96:[function(require,module,exports){
20404(function (process,global){
20405'use strict'
8b095871 20406
9987f0c1
IC
20407function oldBrowser () {
20408 throw new Error('secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11')
8b095871
IC
20409}
20410
9987f0c1
IC
20411var Buffer = require('safe-buffer').Buffer
20412var crypto = global.crypto || global.msCrypto
8b095871 20413
9987f0c1
IC
20414if (crypto && crypto.getRandomValues) {
20415 module.exports = randomBytes
20416} else {
20417 module.exports = oldBrowser
20418}
8b095871 20419
9987f0c1
IC
20420function randomBytes (size, cb) {
20421 // phantomjs needs to throw
20422 if (size > 65536) throw new Error('requested too many random bytes')
20423 // in case browserify isn't using the Uint8Array version
20424 var rawBytes = new global.Uint8Array(size)
8b095871 20425
9987f0c1
IC
20426 // This will not work in older browsers.
20427 // See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
20428 if (size > 0) { // getRandomValues fails on IE if size == 0
20429 crypto.getRandomValues(rawBytes)
8b095871 20430 }
8b095871 20431
9987f0c1
IC
20432 // XXX: phantomjs doesn't like a buffer being passed here
20433 var bytes = Buffer.from(rawBytes.buffer)
8b095871 20434
9987f0c1
IC
20435 if (typeof cb === 'function') {
20436 return process.nextTick(function () {
20437 cb(null, bytes)
20438 })
20439 }
8b095871 20440
9987f0c1 20441 return bytes
8b095871
IC
20442}
20443
9987f0c1
IC
20444}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
20445},{"_process":12,"safe-buffer":98}],97:[function(require,module,exports){
20446(function (Buffer){
20447'use strict'
20448var inherits = require('inherits')
20449var HashBase = require('hash-base')
8b095871 20450
9987f0c1
IC
20451function RIPEMD160 () {
20452 HashBase.call(this, 64)
8b095871 20453
9987f0c1
IC
20454 // state
20455 this._a = 0x67452301
20456 this._b = 0xefcdab89
20457 this._c = 0x98badcfe
20458 this._d = 0x10325476
20459 this._e = 0xc3d2e1f0
8b095871
IC
20460}
20461
9987f0c1
IC
20462inherits(RIPEMD160, HashBase)
20463
20464RIPEMD160.prototype._update = function () {
20465 var m = new Array(16)
20466 for (var i = 0; i < 16; ++i) m[i] = this._block.readInt32LE(i * 4)
20467
20468 var al = this._a
20469 var bl = this._b
20470 var cl = this._c
20471 var dl = this._d
20472 var el = this._e
20473
20474 // Mj = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
20475 // K = 0x00000000
20476 // Sj = 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8
20477 al = fn1(al, bl, cl, dl, el, m[0], 0x00000000, 11); cl = rotl(cl, 10)
20478 el = fn1(el, al, bl, cl, dl, m[1], 0x00000000, 14); bl = rotl(bl, 10)
20479 dl = fn1(dl, el, al, bl, cl, m[2], 0x00000000, 15); al = rotl(al, 10)
20480 cl = fn1(cl, dl, el, al, bl, m[3], 0x00000000, 12); el = rotl(el, 10)
20481 bl = fn1(bl, cl, dl, el, al, m[4], 0x00000000, 5); dl = rotl(dl, 10)
20482 al = fn1(al, bl, cl, dl, el, m[5], 0x00000000, 8); cl = rotl(cl, 10)
20483 el = fn1(el, al, bl, cl, dl, m[6], 0x00000000, 7); bl = rotl(bl, 10)
20484 dl = fn1(dl, el, al, bl, cl, m[7], 0x00000000, 9); al = rotl(al, 10)
20485 cl = fn1(cl, dl, el, al, bl, m[8], 0x00000000, 11); el = rotl(el, 10)
20486 bl = fn1(bl, cl, dl, el, al, m[9], 0x00000000, 13); dl = rotl(dl, 10)
20487 al = fn1(al, bl, cl, dl, el, m[10], 0x00000000, 14); cl = rotl(cl, 10)
20488 el = fn1(el, al, bl, cl, dl, m[11], 0x00000000, 15); bl = rotl(bl, 10)
20489 dl = fn1(dl, el, al, bl, cl, m[12], 0x00000000, 6); al = rotl(al, 10)
20490 cl = fn1(cl, dl, el, al, bl, m[13], 0x00000000, 7); el = rotl(el, 10)
20491 bl = fn1(bl, cl, dl, el, al, m[14], 0x00000000, 9); dl = rotl(dl, 10)
20492 al = fn1(al, bl, cl, dl, el, m[15], 0x00000000, 8); cl = rotl(cl, 10)
20493
20494 // Mj = 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8
20495 // K = 0x5a827999
20496 // Sj = 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12
20497 el = fn2(el, al, bl, cl, dl, m[7], 0x5a827999, 7); bl = rotl(bl, 10)
20498 dl = fn2(dl, el, al, bl, cl, m[4], 0x5a827999, 6); al = rotl(al, 10)
20499 cl = fn2(cl, dl, el, al, bl, m[13], 0x5a827999, 8); el = rotl(el, 10)
20500 bl = fn2(bl, cl, dl, el, al, m[1], 0x5a827999, 13); dl = rotl(dl, 10)
20501 al = fn2(al, bl, cl, dl, el, m[10], 0x5a827999, 11); cl = rotl(cl, 10)
20502 el = fn2(el, al, bl, cl, dl, m[6], 0x5a827999, 9); bl = rotl(bl, 10)
20503 dl = fn2(dl, el, al, bl, cl, m[15], 0x5a827999, 7); al = rotl(al, 10)
20504 cl = fn2(cl, dl, el, al, bl, m[3], 0x5a827999, 15); el = rotl(el, 10)
20505 bl = fn2(bl, cl, dl, el, al, m[12], 0x5a827999, 7); dl = rotl(dl, 10)
20506 al = fn2(al, bl, cl, dl, el, m[0], 0x5a827999, 12); cl = rotl(cl, 10)
20507 el = fn2(el, al, bl, cl, dl, m[9], 0x5a827999, 15); bl = rotl(bl, 10)
20508 dl = fn2(dl, el, al, bl, cl, m[5], 0x5a827999, 9); al = rotl(al, 10)
20509 cl = fn2(cl, dl, el, al, bl, m[2], 0x5a827999, 11); el = rotl(el, 10)
20510 bl = fn2(bl, cl, dl, el, al, m[14], 0x5a827999, 7); dl = rotl(dl, 10)
20511 al = fn2(al, bl, cl, dl, el, m[11], 0x5a827999, 13); cl = rotl(cl, 10)
20512 el = fn2(el, al, bl, cl, dl, m[8], 0x5a827999, 12); bl = rotl(bl, 10)
20513
20514 // Mj = 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12
20515 // K = 0x6ed9eba1
20516 // Sj = 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5
20517 dl = fn3(dl, el, al, bl, cl, m[3], 0x6ed9eba1, 11); al = rotl(al, 10)
20518 cl = fn3(cl, dl, el, al, bl, m[10], 0x6ed9eba1, 13); el = rotl(el, 10)
20519 bl = fn3(bl, cl, dl, el, al, m[14], 0x6ed9eba1, 6); dl = rotl(dl, 10)
20520 al = fn3(al, bl, cl, dl, el, m[4], 0x6ed9eba1, 7); cl = rotl(cl, 10)
20521 el = fn3(el, al, bl, cl, dl, m[9], 0x6ed9eba1, 14); bl = rotl(bl, 10)
20522 dl = fn3(dl, el, al, bl, cl, m[15], 0x6ed9eba1, 9); al = rotl(al, 10)
20523 cl = fn3(cl, dl, el, al, bl, m[8], 0x6ed9eba1, 13); el = rotl(el, 10)
20524 bl = fn3(bl, cl, dl, el, al, m[1], 0x6ed9eba1, 15); dl = rotl(dl, 10)
20525 al = fn3(al, bl, cl, dl, el, m[2], 0x6ed9eba1, 14); cl = rotl(cl, 10)
20526 el = fn3(el, al, bl, cl, dl, m[7], 0x6ed9eba1, 8); bl = rotl(bl, 10)
20527 dl = fn3(dl, el, al, bl, cl, m[0], 0x6ed9eba1, 13); al = rotl(al, 10)
20528 cl = fn3(cl, dl, el, al, bl, m[6], 0x6ed9eba1, 6); el = rotl(el, 10)
20529 bl = fn3(bl, cl, dl, el, al, m[13], 0x6ed9eba1, 5); dl = rotl(dl, 10)
20530 al = fn3(al, bl, cl, dl, el, m[11], 0x6ed9eba1, 12); cl = rotl(cl, 10)
20531 el = fn3(el, al, bl, cl, dl, m[5], 0x6ed9eba1, 7); bl = rotl(bl, 10)
20532 dl = fn3(dl, el, al, bl, cl, m[12], 0x6ed9eba1, 5); al = rotl(al, 10)
20533
20534 // Mj = 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2
20535 // K = 0x8f1bbcdc
20536 // Sj = 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12
20537 cl = fn4(cl, dl, el, al, bl, m[1], 0x8f1bbcdc, 11); el = rotl(el, 10)
20538 bl = fn4(bl, cl, dl, el, al, m[9], 0x8f1bbcdc, 12); dl = rotl(dl, 10)
20539 al = fn4(al, bl, cl, dl, el, m[11], 0x8f1bbcdc, 14); cl = rotl(cl, 10)
20540 el = fn4(el, al, bl, cl, dl, m[10], 0x8f1bbcdc, 15); bl = rotl(bl, 10)
20541 dl = fn4(dl, el, al, bl, cl, m[0], 0x8f1bbcdc, 14); al = rotl(al, 10)
20542 cl = fn4(cl, dl, el, al, bl, m[8], 0x8f1bbcdc, 15); el = rotl(el, 10)
20543 bl = fn4(bl, cl, dl, el, al, m[12], 0x8f1bbcdc, 9); dl = rotl(dl, 10)
20544 al = fn4(al, bl, cl, dl, el, m[4], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
20545 el = fn4(el, al, bl, cl, dl, m[13], 0x8f1bbcdc, 9); bl = rotl(bl, 10)
20546 dl = fn4(dl, el, al, bl, cl, m[3], 0x8f1bbcdc, 14); al = rotl(al, 10)
20547 cl = fn4(cl, dl, el, al, bl, m[7], 0x8f1bbcdc, 5); el = rotl(el, 10)
20548 bl = fn4(bl, cl, dl, el, al, m[15], 0x8f1bbcdc, 6); dl = rotl(dl, 10)
20549 al = fn4(al, bl, cl, dl, el, m[14], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
20550 el = fn4(el, al, bl, cl, dl, m[5], 0x8f1bbcdc, 6); bl = rotl(bl, 10)
20551 dl = fn4(dl, el, al, bl, cl, m[6], 0x8f1bbcdc, 5); al = rotl(al, 10)
20552 cl = fn4(cl, dl, el, al, bl, m[2], 0x8f1bbcdc, 12); el = rotl(el, 10)
20553
20554 // Mj = 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
20555 // K = 0xa953fd4e
20556 // Sj = 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
20557 bl = fn5(bl, cl, dl, el, al, m[4], 0xa953fd4e, 9); dl = rotl(dl, 10)
20558 al = fn5(al, bl, cl, dl, el, m[0], 0xa953fd4e, 15); cl = rotl(cl, 10)
20559 el = fn5(el, al, bl, cl, dl, m[5], 0xa953fd4e, 5); bl = rotl(bl, 10)
20560 dl = fn5(dl, el, al, bl, cl, m[9], 0xa953fd4e, 11); al = rotl(al, 10)
20561 cl = fn5(cl, dl, el, al, bl, m[7], 0xa953fd4e, 6); el = rotl(el, 10)
20562 bl = fn5(bl, cl, dl, el, al, m[12], 0xa953fd4e, 8); dl = rotl(dl, 10)
20563 al = fn5(al, bl, cl, dl, el, m[2], 0xa953fd4e, 13); cl = rotl(cl, 10)
20564 el = fn5(el, al, bl, cl, dl, m[10], 0xa953fd4e, 12); bl = rotl(bl, 10)
20565 dl = fn5(dl, el, al, bl, cl, m[14], 0xa953fd4e, 5); al = rotl(al, 10)
20566 cl = fn5(cl, dl, el, al, bl, m[1], 0xa953fd4e, 12); el = rotl(el, 10)
20567 bl = fn5(bl, cl, dl, el, al, m[3], 0xa953fd4e, 13); dl = rotl(dl, 10)
20568 al = fn5(al, bl, cl, dl, el, m[8], 0xa953fd4e, 14); cl = rotl(cl, 10)
20569 el = fn5(el, al, bl, cl, dl, m[11], 0xa953fd4e, 11); bl = rotl(bl, 10)
20570 dl = fn5(dl, el, al, bl, cl, m[6], 0xa953fd4e, 8); al = rotl(al, 10)
20571 cl = fn5(cl, dl, el, al, bl, m[15], 0xa953fd4e, 5); el = rotl(el, 10)
20572 bl = fn5(bl, cl, dl, el, al, m[13], 0xa953fd4e, 6); dl = rotl(dl, 10)
20573
20574 var ar = this._a
20575 var br = this._b
20576 var cr = this._c
20577 var dr = this._d
20578 var er = this._e
20579
20580 // M'j = 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12
20581 // K' = 0x50a28be6
20582 // S'j = 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6
20583 ar = fn5(ar, br, cr, dr, er, m[5], 0x50a28be6, 8); cr = rotl(cr, 10)
20584 er = fn5(er, ar, br, cr, dr, m[14], 0x50a28be6, 9); br = rotl(br, 10)
20585 dr = fn5(dr, er, ar, br, cr, m[7], 0x50a28be6, 9); ar = rotl(ar, 10)
20586 cr = fn5(cr, dr, er, ar, br, m[0], 0x50a28be6, 11); er = rotl(er, 10)
20587 br = fn5(br, cr, dr, er, ar, m[9], 0x50a28be6, 13); dr = rotl(dr, 10)
20588 ar = fn5(ar, br, cr, dr, er, m[2], 0x50a28be6, 15); cr = rotl(cr, 10)
20589 er = fn5(er, ar, br, cr, dr, m[11], 0x50a28be6, 15); br = rotl(br, 10)
20590 dr = fn5(dr, er, ar, br, cr, m[4], 0x50a28be6, 5); ar = rotl(ar, 10)
20591 cr = fn5(cr, dr, er, ar, br, m[13], 0x50a28be6, 7); er = rotl(er, 10)
20592 br = fn5(br, cr, dr, er, ar, m[6], 0x50a28be6, 7); dr = rotl(dr, 10)
20593 ar = fn5(ar, br, cr, dr, er, m[15], 0x50a28be6, 8); cr = rotl(cr, 10)
20594 er = fn5(er, ar, br, cr, dr, m[8], 0x50a28be6, 11); br = rotl(br, 10)
20595 dr = fn5(dr, er, ar, br, cr, m[1], 0x50a28be6, 14); ar = rotl(ar, 10)
20596 cr = fn5(cr, dr, er, ar, br, m[10], 0x50a28be6, 14); er = rotl(er, 10)
20597 br = fn5(br, cr, dr, er, ar, m[3], 0x50a28be6, 12); dr = rotl(dr, 10)
20598 ar = fn5(ar, br, cr, dr, er, m[12], 0x50a28be6, 6); cr = rotl(cr, 10)
20599
20600 // M'j = 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2
20601 // K' = 0x5c4dd124
20602 // S'j = 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11
20603 er = fn4(er, ar, br, cr, dr, m[6], 0x5c4dd124, 9); br = rotl(br, 10)
20604 dr = fn4(dr, er, ar, br, cr, m[11], 0x5c4dd124, 13); ar = rotl(ar, 10)
20605 cr = fn4(cr, dr, er, ar, br, m[3], 0x5c4dd124, 15); er = rotl(er, 10)
20606 br = fn4(br, cr, dr, er, ar, m[7], 0x5c4dd124, 7); dr = rotl(dr, 10)
20607 ar = fn4(ar, br, cr, dr, er, m[0], 0x5c4dd124, 12); cr = rotl(cr, 10)
20608 er = fn4(er, ar, br, cr, dr, m[13], 0x5c4dd124, 8); br = rotl(br, 10)
20609 dr = fn4(dr, er, ar, br, cr, m[5], 0x5c4dd124, 9); ar = rotl(ar, 10)
20610 cr = fn4(cr, dr, er, ar, br, m[10], 0x5c4dd124, 11); er = rotl(er, 10)
20611 br = fn4(br, cr, dr, er, ar, m[14], 0x5c4dd124, 7); dr = rotl(dr, 10)
20612 ar = fn4(ar, br, cr, dr, er, m[15], 0x5c4dd124, 7); cr = rotl(cr, 10)
20613 er = fn4(er, ar, br, cr, dr, m[8], 0x5c4dd124, 12); br = rotl(br, 10)
20614 dr = fn4(dr, er, ar, br, cr, m[12], 0x5c4dd124, 7); ar = rotl(ar, 10)
20615 cr = fn4(cr, dr, er, ar, br, m[4], 0x5c4dd124, 6); er = rotl(er, 10)
20616 br = fn4(br, cr, dr, er, ar, m[9], 0x5c4dd124, 15); dr = rotl(dr, 10)
20617 ar = fn4(ar, br, cr, dr, er, m[1], 0x5c4dd124, 13); cr = rotl(cr, 10)
20618 er = fn4(er, ar, br, cr, dr, m[2], 0x5c4dd124, 11); br = rotl(br, 10)
20619
20620 // M'j = 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13
20621 // K' = 0x6d703ef3
20622 // S'j = 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5
20623 dr = fn3(dr, er, ar, br, cr, m[15], 0x6d703ef3, 9); ar = rotl(ar, 10)
20624 cr = fn3(cr, dr, er, ar, br, m[5], 0x6d703ef3, 7); er = rotl(er, 10)
20625 br = fn3(br, cr, dr, er, ar, m[1], 0x6d703ef3, 15); dr = rotl(dr, 10)
20626 ar = fn3(ar, br, cr, dr, er, m[3], 0x6d703ef3, 11); cr = rotl(cr, 10)
20627 er = fn3(er, ar, br, cr, dr, m[7], 0x6d703ef3, 8); br = rotl(br, 10)
20628 dr = fn3(dr, er, ar, br, cr, m[14], 0x6d703ef3, 6); ar = rotl(ar, 10)
20629 cr = fn3(cr, dr, er, ar, br, m[6], 0x6d703ef3, 6); er = rotl(er, 10)
20630 br = fn3(br, cr, dr, er, ar, m[9], 0x6d703ef3, 14); dr = rotl(dr, 10)
20631 ar = fn3(ar, br, cr, dr, er, m[11], 0x6d703ef3, 12); cr = rotl(cr, 10)
20632 er = fn3(er, ar, br, cr, dr, m[8], 0x6d703ef3, 13); br = rotl(br, 10)
20633 dr = fn3(dr, er, ar, br, cr, m[12], 0x6d703ef3, 5); ar = rotl(ar, 10)
20634 cr = fn3(cr, dr, er, ar, br, m[2], 0x6d703ef3, 14); er = rotl(er, 10)
20635 br = fn3(br, cr, dr, er, ar, m[10], 0x6d703ef3, 13); dr = rotl(dr, 10)
20636 ar = fn3(ar, br, cr, dr, er, m[0], 0x6d703ef3, 13); cr = rotl(cr, 10)
20637 er = fn3(er, ar, br, cr, dr, m[4], 0x6d703ef3, 7); br = rotl(br, 10)
20638 dr = fn3(dr, er, ar, br, cr, m[13], 0x6d703ef3, 5); ar = rotl(ar, 10)
20639
20640 // M'j = 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14
20641 // K' = 0x7a6d76e9
20642 // S'j = 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8
20643 cr = fn2(cr, dr, er, ar, br, m[8], 0x7a6d76e9, 15); er = rotl(er, 10)
20644 br = fn2(br, cr, dr, er, ar, m[6], 0x7a6d76e9, 5); dr = rotl(dr, 10)
20645 ar = fn2(ar, br, cr, dr, er, m[4], 0x7a6d76e9, 8); cr = rotl(cr, 10)
20646 er = fn2(er, ar, br, cr, dr, m[1], 0x7a6d76e9, 11); br = rotl(br, 10)
20647 dr = fn2(dr, er, ar, br, cr, m[3], 0x7a6d76e9, 14); ar = rotl(ar, 10)
20648 cr = fn2(cr, dr, er, ar, br, m[11], 0x7a6d76e9, 14); er = rotl(er, 10)
20649 br = fn2(br, cr, dr, er, ar, m[15], 0x7a6d76e9, 6); dr = rotl(dr, 10)
20650 ar = fn2(ar, br, cr, dr, er, m[0], 0x7a6d76e9, 14); cr = rotl(cr, 10)
20651 er = fn2(er, ar, br, cr, dr, m[5], 0x7a6d76e9, 6); br = rotl(br, 10)
20652 dr = fn2(dr, er, ar, br, cr, m[12], 0x7a6d76e9, 9); ar = rotl(ar, 10)
20653 cr = fn2(cr, dr, er, ar, br, m[2], 0x7a6d76e9, 12); er = rotl(er, 10)
20654 br = fn2(br, cr, dr, er, ar, m[13], 0x7a6d76e9, 9); dr = rotl(dr, 10)
20655 ar = fn2(ar, br, cr, dr, er, m[9], 0x7a6d76e9, 12); cr = rotl(cr, 10)
20656 er = fn2(er, ar, br, cr, dr, m[7], 0x7a6d76e9, 5); br = rotl(br, 10)
20657 dr = fn2(dr, er, ar, br, cr, m[10], 0x7a6d76e9, 15); ar = rotl(ar, 10)
20658 cr = fn2(cr, dr, er, ar, br, m[14], 0x7a6d76e9, 8); er = rotl(er, 10)
20659
20660 // M'j = 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
20661 // K' = 0x00000000
20662 // S'j = 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
20663 br = fn1(br, cr, dr, er, ar, m[12], 0x00000000, 8); dr = rotl(dr, 10)
20664 ar = fn1(ar, br, cr, dr, er, m[15], 0x00000000, 5); cr = rotl(cr, 10)
20665 er = fn1(er, ar, br, cr, dr, m[10], 0x00000000, 12); br = rotl(br, 10)
20666 dr = fn1(dr, er, ar, br, cr, m[4], 0x00000000, 9); ar = rotl(ar, 10)
20667 cr = fn1(cr, dr, er, ar, br, m[1], 0x00000000, 12); er = rotl(er, 10)
20668 br = fn1(br, cr, dr, er, ar, m[5], 0x00000000, 5); dr = rotl(dr, 10)
20669 ar = fn1(ar, br, cr, dr, er, m[8], 0x00000000, 14); cr = rotl(cr, 10)
20670 er = fn1(er, ar, br, cr, dr, m[7], 0x00000000, 6); br = rotl(br, 10)
20671 dr = fn1(dr, er, ar, br, cr, m[6], 0x00000000, 8); ar = rotl(ar, 10)
20672 cr = fn1(cr, dr, er, ar, br, m[2], 0x00000000, 13); er = rotl(er, 10)
20673 br = fn1(br, cr, dr, er, ar, m[13], 0x00000000, 6); dr = rotl(dr, 10)
20674 ar = fn1(ar, br, cr, dr, er, m[14], 0x00000000, 5); cr = rotl(cr, 10)
20675 er = fn1(er, ar, br, cr, dr, m[0], 0x00000000, 15); br = rotl(br, 10)
20676 dr = fn1(dr, er, ar, br, cr, m[3], 0x00000000, 13); ar = rotl(ar, 10)
20677 cr = fn1(cr, dr, er, ar, br, m[9], 0x00000000, 11); er = rotl(er, 10)
20678 br = fn1(br, cr, dr, er, ar, m[11], 0x00000000, 11); dr = rotl(dr, 10)
20679
20680 // change state
20681 var t = (this._b + cl + dr) | 0
20682 this._b = (this._c + dl + er) | 0
20683 this._c = (this._d + el + ar) | 0
20684 this._d = (this._e + al + br) | 0
20685 this._e = (this._a + bl + cr) | 0
20686 this._a = t
20687}
20688
20689RIPEMD160.prototype._digest = function () {
20690 // create padding and handle blocks
20691 this._block[this._blockOffset++] = 0x80
20692 if (this._blockOffset > 56) {
20693 this._block.fill(0, this._blockOffset, 64)
20694 this._update()
20695 this._blockOffset = 0
20696 }
20697
20698 this._block.fill(0, this._blockOffset, 56)
20699 this._block.writeUInt32LE(this._length[0], 56)
20700 this._block.writeUInt32LE(this._length[1], 60)
20701 this._update()
20702
20703 // produce result
20704 var buffer = new Buffer(20)
20705 buffer.writeInt32LE(this._a, 0)
20706 buffer.writeInt32LE(this._b, 4)
20707 buffer.writeInt32LE(this._c, 8)
20708 buffer.writeInt32LE(this._d, 12)
20709 buffer.writeInt32LE(this._e, 16)
20710 return buffer
20711}
8b095871 20712
9987f0c1
IC
20713function rotl (x, n) {
20714 return (x << n) | (x >>> (32 - n))
20715}
8b095871 20716
9987f0c1
IC
20717function fn1 (a, b, c, d, e, m, k, s) {
20718 return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0
20719}
8b095871 20720
9987f0c1
IC
20721function fn2 (a, b, c, d, e, m, k, s) {
20722 return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0
20723}
8b095871 20724
9987f0c1
IC
20725function fn3 (a, b, c, d, e, m, k, s) {
20726 return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0
20727}
8b095871 20728
9987f0c1
IC
20729function fn4 (a, b, c, d, e, m, k, s) {
20730 return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0
20731}
8b095871 20732
9987f0c1
IC
20733function fn5 (a, b, c, d, e, m, k, s) {
20734 return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0
20735}
8b095871 20736
9987f0c1 20737module.exports = RIPEMD160
8b095871 20738
9987f0c1
IC
20739}).call(this,require("buffer").Buffer)
20740},{"buffer":4,"hash-base":92,"inherits":93}],98:[function(require,module,exports){
20741arguments[4][26][0].apply(exports,arguments)
20742},{"buffer":4,"dup":26}],99:[function(require,module,exports){
20743(function (Buffer){
20744// prototype class for hash functions
20745function Hash (blockSize, finalSize) {
20746 this._block = new Buffer(blockSize)
20747 this._finalSize = finalSize
20748 this._blockSize = blockSize
20749 this._len = 0
20750 this._s = 0
20751}
20752
20753Hash.prototype.update = function (data, enc) {
20754 if (typeof data === 'string') {
20755 enc = enc || 'utf8'
20756 data = new Buffer(data, enc)
8b095871
IC
20757 }
20758
9987f0c1
IC
20759 var l = this._len += data.length
20760 var s = this._s || 0
20761 var f = 0
20762 var buffer = this._block
8b095871 20763
9987f0c1
IC
20764 while (s < l) {
20765 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
20766 var ch = (t - f)
8b095871 20767
9987f0c1
IC
20768 for (var i = 0; i < ch; i++) {
20769 buffer[(s % this._blockSize) + i] = data[i + f]
8b095871
IC
20770 }
20771
9987f0c1
IC
20772 s += ch
20773 f += ch
8b095871 20774
9987f0c1
IC
20775 if ((s % this._blockSize) === 0) {
20776 this._update(buffer)
20777 }
20778 }
20779 this._s = s
8b095871 20780
9987f0c1
IC
20781 return this
20782}
8b095871 20783
9987f0c1
IC
20784Hash.prototype.digest = function (enc) {
20785 // Suppose the length of the message M, in bits, is l
20786 var l = this._len * 8
8b095871 20787
9987f0c1
IC
20788 // Append the bit 1 to the end of the message
20789 this._block[this._len % this._blockSize] = 0x80
8b095871 20790
9987f0c1
IC
20791 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
20792 this._block.fill(0, this._len % this._blockSize + 1)
8b095871 20793
9987f0c1
IC
20794 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
20795 this._update(this._block)
20796 this._block.fill(0)
20797 }
8b095871 20798
9987f0c1
IC
20799 // to this append the block which is equal to the number l written in binary
20800 // TODO: handle case where l is > Math.pow(2, 29)
20801 this._block.writeInt32BE(l, this._blockSize - 4)
8b095871 20802
9987f0c1 20803 var hash = this._update(this._block) || this._hash()
8b095871 20804
9987f0c1 20805 return enc ? hash.toString(enc) : hash
8b095871
IC
20806}
20807
9987f0c1
IC
20808Hash.prototype._update = function () {
20809 throw new Error('_update must be implemented by subclass')
8b095871
IC
20810}
20811
9987f0c1 20812module.exports = Hash
8b095871 20813
9987f0c1
IC
20814}).call(this,require("buffer").Buffer)
20815},{"buffer":4}],100:[function(require,module,exports){
20816var exports = module.exports = function SHA (algorithm) {
20817 algorithm = algorithm.toLowerCase()
8b095871 20818
9987f0c1
IC
20819 var Algorithm = exports[algorithm]
20820 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
8b095871 20821
9987f0c1 20822 return new Algorithm()
8b095871
IC
20823}
20824
9987f0c1
IC
20825exports.sha = require('./sha')
20826exports.sha1 = require('./sha1')
20827exports.sha224 = require('./sha224')
20828exports.sha256 = require('./sha256')
20829exports.sha384 = require('./sha384')
20830exports.sha512 = require('./sha512')
8b095871 20831
9987f0c1 20832},{"./sha":101,"./sha1":102,"./sha224":103,"./sha256":104,"./sha384":105,"./sha512":106}],101:[function(require,module,exports){
8b095871 20833(function (Buffer){
9987f0c1
IC
20834/*
20835 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
20836 * in FIPS PUB 180-1
20837 * This source code is derived from sha1.js of the same repository.
20838 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
20839 * operation was added.
20840 */
8b095871 20841
9987f0c1
IC
20842var inherits = require('inherits')
20843var Hash = require('./hash')
8b095871 20844
9987f0c1
IC
20845var K = [
20846 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
20847]
8b095871 20848
9987f0c1 20849var W = new Array(80)
8b095871 20850
9987f0c1
IC
20851function Sha () {
20852 this.init()
20853 this._w = W
8b095871 20854
9987f0c1 20855 Hash.call(this, 64, 56)
8b095871
IC
20856}
20857
9987f0c1 20858inherits(Sha, Hash)
8b095871 20859
9987f0c1
IC
20860Sha.prototype.init = function () {
20861 this._a = 0x67452301
20862 this._b = 0xefcdab89
20863 this._c = 0x98badcfe
20864 this._d = 0x10325476
20865 this._e = 0xc3d2e1f0
8b095871 20866
9987f0c1 20867 return this
8b095871
IC
20868}
20869
9987f0c1
IC
20870function rotl5 (num) {
20871 return (num << 5) | (num >>> 27)
8b095871
IC
20872}
20873
9987f0c1
IC
20874function rotl30 (num) {
20875 return (num << 30) | (num >>> 2)
8b095871
IC
20876}
20877
9987f0c1
IC
20878function ft (s, b, c, d) {
20879 if (s === 0) return (b & c) | ((~b) & d)
20880 if (s === 2) return (b & c) | (b & d) | (c & d)
20881 return b ^ c ^ d
8b095871
IC
20882}
20883
9987f0c1
IC
20884Sha.prototype._update = function (M) {
20885 var W = this._w
8b095871 20886
9987f0c1
IC
20887 var a = this._a | 0
20888 var b = this._b | 0
20889 var c = this._c | 0
20890 var d = this._d | 0
20891 var e = this._e | 0
8b095871 20892
9987f0c1
IC
20893 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
20894 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
8b095871 20895
9987f0c1
IC
20896 for (var j = 0; j < 80; ++j) {
20897 var s = ~~(j / 20)
20898 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
8b095871 20899
9987f0c1
IC
20900 e = d
20901 d = c
20902 c = rotl30(b)
20903 b = a
20904 a = t
20905 }
8b095871 20906
9987f0c1
IC
20907 this._a = (a + this._a) | 0
20908 this._b = (b + this._b) | 0
20909 this._c = (c + this._c) | 0
20910 this._d = (d + this._d) | 0
20911 this._e = (e + this._e) | 0
8b095871
IC
20912}
20913
9987f0c1
IC
20914Sha.prototype._hash = function () {
20915 var H = new Buffer(20)
8b095871 20916
9987f0c1
IC
20917 H.writeInt32BE(this._a | 0, 0)
20918 H.writeInt32BE(this._b | 0, 4)
20919 H.writeInt32BE(this._c | 0, 8)
20920 H.writeInt32BE(this._d | 0, 12)
20921 H.writeInt32BE(this._e | 0, 16)
8b095871 20922
9987f0c1 20923 return H
8b095871
IC
20924}
20925
9987f0c1 20926module.exports = Sha
8b095871 20927
9987f0c1
IC
20928}).call(this,require("buffer").Buffer)
20929},{"./hash":99,"buffer":4,"inherits":93}],102:[function(require,module,exports){
20930(function (Buffer){
20931/*
20932 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
20933 * in FIPS PUB 180-1
20934 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
20935 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
20936 * Distributed under the BSD License
20937 * See http://pajhome.org.uk/crypt/md5 for details.
20938 */
8b095871 20939
9987f0c1
IC
20940var inherits = require('inherits')
20941var Hash = require('./hash')
8b095871 20942
9987f0c1
IC
20943var K = [
20944 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
20945]
8b095871 20946
9987f0c1 20947var W = new Array(80)
8b095871 20948
9987f0c1
IC
20949function Sha1 () {
20950 this.init()
20951 this._w = W
8b095871 20952
9987f0c1 20953 Hash.call(this, 64, 56)
8b095871
IC
20954}
20955
9987f0c1 20956inherits(Sha1, Hash)
8b095871 20957
9987f0c1
IC
20958Sha1.prototype.init = function () {
20959 this._a = 0x67452301
20960 this._b = 0xefcdab89
20961 this._c = 0x98badcfe
20962 this._d = 0x10325476
20963 this._e = 0xc3d2e1f0
8b095871 20964
9987f0c1 20965 return this
8b095871
IC
20966}
20967
9987f0c1
IC
20968function rotl1 (num) {
20969 return (num << 1) | (num >>> 31)
20970}
8b095871 20971
9987f0c1
IC
20972function rotl5 (num) {
20973 return (num << 5) | (num >>> 27)
8b095871
IC
20974}
20975
9987f0c1
IC
20976function rotl30 (num) {
20977 return (num << 30) | (num >>> 2)
8b095871
IC
20978}
20979
9987f0c1
IC
20980function ft (s, b, c, d) {
20981 if (s === 0) return (b & c) | ((~b) & d)
20982 if (s === 2) return (b & c) | (b & d) | (c & d)
20983 return b ^ c ^ d
8b095871
IC
20984}
20985
9987f0c1
IC
20986Sha1.prototype._update = function (M) {
20987 var W = this._w
8b095871 20988
9987f0c1
IC
20989 var a = this._a | 0
20990 var b = this._b | 0
20991 var c = this._c | 0
20992 var d = this._d | 0
20993 var e = this._e | 0
8b095871 20994
9987f0c1
IC
20995 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
20996 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
8b095871 20997
9987f0c1
IC
20998 for (var j = 0; j < 80; ++j) {
20999 var s = ~~(j / 20)
21000 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
8b095871 21001
9987f0c1
IC
21002 e = d
21003 d = c
21004 c = rotl30(b)
21005 b = a
21006 a = t
21007 }
8b095871 21008
9987f0c1
IC
21009 this._a = (a + this._a) | 0
21010 this._b = (b + this._b) | 0
21011 this._c = (c + this._c) | 0
21012 this._d = (d + this._d) | 0
21013 this._e = (e + this._e) | 0
8b095871
IC
21014}
21015
9987f0c1
IC
21016Sha1.prototype._hash = function () {
21017 var H = new Buffer(20)
21018
21019 H.writeInt32BE(this._a | 0, 0)
21020 H.writeInt32BE(this._b | 0, 4)
21021 H.writeInt32BE(this._c | 0, 8)
21022 H.writeInt32BE(this._d | 0, 12)
21023 H.writeInt32BE(this._e | 0, 16)
8b095871 21024
9987f0c1 21025 return H
8b095871
IC
21026}
21027
9987f0c1 21028module.exports = Sha1
8b095871 21029
9987f0c1
IC
21030}).call(this,require("buffer").Buffer)
21031},{"./hash":99,"buffer":4,"inherits":93}],103:[function(require,module,exports){
21032(function (Buffer){
21033/**
21034 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
21035 * in FIPS 180-2
21036 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
21037 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
21038 *
21039 */
8b095871 21040
9987f0c1
IC
21041var inherits = require('inherits')
21042var Sha256 = require('./sha256')
21043var Hash = require('./hash')
8b095871 21044
9987f0c1 21045var W = new Array(64)
8b095871 21046
9987f0c1
IC
21047function Sha224 () {
21048 this.init()
8b095871 21049
9987f0c1 21050 this._w = W // new Array(64)
8b095871 21051
9987f0c1 21052 Hash.call(this, 64, 56)
8b095871
IC
21053}
21054
9987f0c1 21055inherits(Sha224, Sha256)
8b095871 21056
9987f0c1
IC
21057Sha224.prototype.init = function () {
21058 this._a = 0xc1059ed8
21059 this._b = 0x367cd507
21060 this._c = 0x3070dd17
21061 this._d = 0xf70e5939
21062 this._e = 0xffc00b31
21063 this._f = 0x68581511
21064 this._g = 0x64f98fa7
21065 this._h = 0xbefa4fa4
21066
21067 return this
8b095871
IC
21068}
21069
9987f0c1
IC
21070Sha224.prototype._hash = function () {
21071 var H = new Buffer(28)
8b095871 21072
9987f0c1
IC
21073 H.writeInt32BE(this._a, 0)
21074 H.writeInt32BE(this._b, 4)
21075 H.writeInt32BE(this._c, 8)
21076 H.writeInt32BE(this._d, 12)
21077 H.writeInt32BE(this._e, 16)
21078 H.writeInt32BE(this._f, 20)
21079 H.writeInt32BE(this._g, 24)
8b095871 21080
9987f0c1 21081 return H
8b095871
IC
21082}
21083
9987f0c1 21084module.exports = Sha224
8b095871 21085
9987f0c1
IC
21086}).call(this,require("buffer").Buffer)
21087},{"./hash":99,"./sha256":104,"buffer":4,"inherits":93}],104:[function(require,module,exports){
21088(function (Buffer){
21089/**
21090 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
21091 * in FIPS 180-2
21092 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
21093 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
21094 *
21095 */
8b095871 21096
9987f0c1
IC
21097var inherits = require('inherits')
21098var Hash = require('./hash')
8b095871 21099
9987f0c1
IC
21100var K = [
21101 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
21102 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
21103 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
21104 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
21105 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
21106 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
21107 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
21108 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
21109 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
21110 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
21111 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
21112 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
21113 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
21114 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
21115 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
21116 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
21117]
8b095871 21118
9987f0c1 21119var W = new Array(64)
8b095871 21120
9987f0c1
IC
21121function Sha256 () {
21122 this.init()
8b095871 21123
9987f0c1 21124 this._w = W // new Array(64)
8b095871 21125
9987f0c1
IC
21126 Hash.call(this, 64, 56)
21127}
8b095871 21128
9987f0c1 21129inherits(Sha256, Hash)
8b095871 21130
9987f0c1
IC
21131Sha256.prototype.init = function () {
21132 this._a = 0x6a09e667
21133 this._b = 0xbb67ae85
21134 this._c = 0x3c6ef372
21135 this._d = 0xa54ff53a
21136 this._e = 0x510e527f
21137 this._f = 0x9b05688c
21138 this._g = 0x1f83d9ab
21139 this._h = 0x5be0cd19
8b095871 21140
9987f0c1
IC
21141 return this
21142}
8b095871 21143
9987f0c1
IC
21144function ch (x, y, z) {
21145 return z ^ (x & (y ^ z))
8b095871
IC
21146}
21147
9987f0c1
IC
21148function maj (x, y, z) {
21149 return (x & y) | (z & (x | y))
8b095871
IC
21150}
21151
9987f0c1
IC
21152function sigma0 (x) {
21153 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
8b095871
IC
21154}
21155
9987f0c1
IC
21156function sigma1 (x) {
21157 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
21158}
8b095871 21159
9987f0c1
IC
21160function gamma0 (x) {
21161 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
21162}
8b095871 21163
9987f0c1
IC
21164function gamma1 (x) {
21165 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
21166}
8b095871 21167
9987f0c1
IC
21168Sha256.prototype._update = function (M) {
21169 var W = this._w
8b095871 21170
9987f0c1
IC
21171 var a = this._a | 0
21172 var b = this._b | 0
21173 var c = this._c | 0
21174 var d = this._d | 0
21175 var e = this._e | 0
21176 var f = this._f | 0
21177 var g = this._g | 0
21178 var h = this._h | 0
8b095871 21179
9987f0c1
IC
21180 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
21181 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
8b095871 21182
9987f0c1
IC
21183 for (var j = 0; j < 64; ++j) {
21184 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
21185 var T2 = (sigma0(a) + maj(a, b, c)) | 0
8b095871 21186
9987f0c1
IC
21187 h = g
21188 g = f
21189 f = e
21190 e = (d + T1) | 0
21191 d = c
21192 c = b
21193 b = a
21194 a = (T1 + T2) | 0
8b095871
IC
21195 }
21196
9987f0c1
IC
21197 this._a = (a + this._a) | 0
21198 this._b = (b + this._b) | 0
21199 this._c = (c + this._c) | 0
21200 this._d = (d + this._d) | 0
21201 this._e = (e + this._e) | 0
21202 this._f = (f + this._f) | 0
21203 this._g = (g + this._g) | 0
21204 this._h = (h + this._h) | 0
8b095871
IC
21205}
21206
9987f0c1
IC
21207Sha256.prototype._hash = function () {
21208 var H = new Buffer(32)
8b095871 21209
9987f0c1
IC
21210 H.writeInt32BE(this._a, 0)
21211 H.writeInt32BE(this._b, 4)
21212 H.writeInt32BE(this._c, 8)
21213 H.writeInt32BE(this._d, 12)
21214 H.writeInt32BE(this._e, 16)
21215 H.writeInt32BE(this._f, 20)
21216 H.writeInt32BE(this._g, 24)
21217 H.writeInt32BE(this._h, 28)
8b095871 21218
9987f0c1 21219 return H
8b095871
IC
21220}
21221
9987f0c1 21222module.exports = Sha256
8b095871 21223
9987f0c1
IC
21224}).call(this,require("buffer").Buffer)
21225},{"./hash":99,"buffer":4,"inherits":93}],105:[function(require,module,exports){
21226(function (Buffer){
21227var inherits = require('inherits')
21228var SHA512 = require('./sha512')
21229var Hash = require('./hash')
8b095871 21230
9987f0c1 21231var W = new Array(160)
8b095871 21232
9987f0c1
IC
21233function Sha384 () {
21234 this.init()
21235 this._w = W
8b095871 21236
9987f0c1
IC
21237 Hash.call(this, 128, 112)
21238}
8b095871 21239
9987f0c1 21240inherits(Sha384, SHA512)
8b095871 21241
9987f0c1
IC
21242Sha384.prototype.init = function () {
21243 this._ah = 0xcbbb9d5d
21244 this._bh = 0x629a292a
21245 this._ch = 0x9159015a
21246 this._dh = 0x152fecd8
21247 this._eh = 0x67332667
21248 this._fh = 0x8eb44a87
21249 this._gh = 0xdb0c2e0d
21250 this._hh = 0x47b5481d
8b095871 21251
9987f0c1
IC
21252 this._al = 0xc1059ed8
21253 this._bl = 0x367cd507
21254 this._cl = 0x3070dd17
21255 this._dl = 0xf70e5939
21256 this._el = 0xffc00b31
21257 this._fl = 0x68581511
21258 this._gl = 0x64f98fa7
21259 this._hl = 0xbefa4fa4
8b095871 21260
9987f0c1 21261 return this
8b095871
IC
21262}
21263
9987f0c1
IC
21264Sha384.prototype._hash = function () {
21265 var H = new Buffer(48)
8b095871 21266
9987f0c1
IC
21267 function writeInt64BE (h, l, offset) {
21268 H.writeInt32BE(h, offset)
21269 H.writeInt32BE(l, offset + 4)
21270 }
8b095871 21271
9987f0c1
IC
21272 writeInt64BE(this._ah, this._al, 0)
21273 writeInt64BE(this._bh, this._bl, 8)
21274 writeInt64BE(this._ch, this._cl, 16)
21275 writeInt64BE(this._dh, this._dl, 24)
21276 writeInt64BE(this._eh, this._el, 32)
21277 writeInt64BE(this._fh, this._fl, 40)
8b095871 21278
9987f0c1
IC
21279 return H
21280}
8b095871 21281
9987f0c1 21282module.exports = Sha384
8b095871 21283
9987f0c1
IC
21284}).call(this,require("buffer").Buffer)
21285},{"./hash":99,"./sha512":106,"buffer":4,"inherits":93}],106:[function(require,module,exports){
21286(function (Buffer){
21287var inherits = require('inherits')
21288var Hash = require('./hash')
8b095871 21289
9987f0c1
IC
21290var K = [
21291 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
21292 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
21293 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
21294 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
21295 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
21296 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
21297 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
21298 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
21299 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
21300 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
21301 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
21302 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
21303 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
21304 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
21305 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
21306 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
21307 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
21308 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
21309 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
21310 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
21311 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
21312 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
21313 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
21314 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
21315 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
21316 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
21317 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
21318 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
21319 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
21320 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
21321 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
21322 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
21323 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
21324 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
21325 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
21326 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
21327 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
21328 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
21329 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
21330 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
21331]
8b095871 21332
9987f0c1 21333var W = new Array(160)
8b095871 21334
9987f0c1
IC
21335function Sha512 () {
21336 this.init()
21337 this._w = W
8b095871 21338
9987f0c1
IC
21339 Hash.call(this, 128, 112)
21340}
8b095871 21341
9987f0c1 21342inherits(Sha512, Hash)
8b095871 21343
9987f0c1
IC
21344Sha512.prototype.init = function () {
21345 this._ah = 0x6a09e667
21346 this._bh = 0xbb67ae85
21347 this._ch = 0x3c6ef372
21348 this._dh = 0xa54ff53a
21349 this._eh = 0x510e527f
21350 this._fh = 0x9b05688c
21351 this._gh = 0x1f83d9ab
21352 this._hh = 0x5be0cd19
8b095871 21353
9987f0c1
IC
21354 this._al = 0xf3bcc908
21355 this._bl = 0x84caa73b
21356 this._cl = 0xfe94f82b
21357 this._dl = 0x5f1d36f1
21358 this._el = 0xade682d1
21359 this._fl = 0x2b3e6c1f
21360 this._gl = 0xfb41bd6b
21361 this._hl = 0x137e2179
8b095871 21362
9987f0c1 21363 return this
8b095871
IC
21364}
21365
9987f0c1
IC
21366function Ch (x, y, z) {
21367 return z ^ (x & (y ^ z))
8b095871
IC
21368}
21369
9987f0c1
IC
21370function maj (x, y, z) {
21371 return (x & y) | (z & (x | y))
8b095871
IC
21372}
21373
9987f0c1
IC
21374function sigma0 (x, xl) {
21375 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
21376}
8b095871 21377
9987f0c1
IC
21378function sigma1 (x, xl) {
21379 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
21380}
8b095871 21381
9987f0c1
IC
21382function Gamma0 (x, xl) {
21383 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
8b095871
IC
21384}
21385
9987f0c1
IC
21386function Gamma0l (x, xl) {
21387 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
21388}
8b095871 21389
9987f0c1
IC
21390function Gamma1 (x, xl) {
21391 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
21392}
8b095871 21393
9987f0c1
IC
21394function Gamma1l (x, xl) {
21395 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
21396}
8b095871 21397
9987f0c1
IC
21398function getCarry (a, b) {
21399 return (a >>> 0) < (b >>> 0) ? 1 : 0
8b095871
IC
21400}
21401
9987f0c1
IC
21402Sha512.prototype._update = function (M) {
21403 var W = this._w
8b095871 21404
9987f0c1
IC
21405 var ah = this._ah | 0
21406 var bh = this._bh | 0
21407 var ch = this._ch | 0
21408 var dh = this._dh | 0
21409 var eh = this._eh | 0
21410 var fh = this._fh | 0
21411 var gh = this._gh | 0
21412 var hh = this._hh | 0
8b095871 21413
9987f0c1
IC
21414 var al = this._al | 0
21415 var bl = this._bl | 0
21416 var cl = this._cl | 0
21417 var dl = this._dl | 0
21418 var el = this._el | 0
21419 var fl = this._fl | 0
21420 var gl = this._gl | 0
21421 var hl = this._hl | 0
8b095871 21422
9987f0c1
IC
21423 for (var i = 0; i < 32; i += 2) {
21424 W[i] = M.readInt32BE(i * 4)
21425 W[i + 1] = M.readInt32BE(i * 4 + 4)
21426 }
21427 for (; i < 160; i += 2) {
21428 var xh = W[i - 15 * 2]
21429 var xl = W[i - 15 * 2 + 1]
21430 var gamma0 = Gamma0(xh, xl)
21431 var gamma0l = Gamma0l(xl, xh)
8b095871 21432
9987f0c1
IC
21433 xh = W[i - 2 * 2]
21434 xl = W[i - 2 * 2 + 1]
21435 var gamma1 = Gamma1(xh, xl)
21436 var gamma1l = Gamma1l(xl, xh)
8b095871 21437
9987f0c1
IC
21438 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
21439 var Wi7h = W[i - 7 * 2]
21440 var Wi7l = W[i - 7 * 2 + 1]
8b095871 21441
9987f0c1
IC
21442 var Wi16h = W[i - 16 * 2]
21443 var Wi16l = W[i - 16 * 2 + 1]
8b095871 21444
9987f0c1
IC
21445 var Wil = (gamma0l + Wi7l) | 0
21446 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
21447 Wil = (Wil + gamma1l) | 0
21448 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
21449 Wil = (Wil + Wi16l) | 0
21450 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
8b095871 21451
9987f0c1
IC
21452 W[i] = Wih
21453 W[i + 1] = Wil
8b095871
IC
21454 }
21455
9987f0c1
IC
21456 for (var j = 0; j < 160; j += 2) {
21457 Wih = W[j]
21458 Wil = W[j + 1]
8b095871 21459
9987f0c1
IC
21460 var majh = maj(ah, bh, ch)
21461 var majl = maj(al, bl, cl)
8b095871 21462
9987f0c1
IC
21463 var sigma0h = sigma0(ah, al)
21464 var sigma0l = sigma0(al, ah)
21465 var sigma1h = sigma1(eh, el)
21466 var sigma1l = sigma1(el, eh)
8b095871 21467
9987f0c1
IC
21468 // t1 = h + sigma1 + ch + K[j] + W[j]
21469 var Kih = K[j]
21470 var Kil = K[j + 1]
8b095871 21471
9987f0c1
IC
21472 var chh = Ch(eh, fh, gh)
21473 var chl = Ch(el, fl, gl)
8b095871 21474
9987f0c1
IC
21475 var t1l = (hl + sigma1l) | 0
21476 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
21477 t1l = (t1l + chl) | 0
21478 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
21479 t1l = (t1l + Kil) | 0
21480 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
21481 t1l = (t1l + Wil) | 0
21482 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
8b095871 21483
9987f0c1
IC
21484 // t2 = sigma0 + maj
21485 var t2l = (sigma0l + majl) | 0
21486 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
21487
21488 hh = gh
21489 hl = gl
21490 gh = fh
21491 gl = fl
21492 fh = eh
21493 fl = el
21494 el = (dl + t1l) | 0
21495 eh = (dh + t1h + getCarry(el, dl)) | 0
21496 dh = ch
21497 dl = cl
21498 ch = bh
21499 cl = bl
21500 bh = ah
21501 bl = al
21502 al = (t1l + t2l) | 0
21503 ah = (t1h + t2h + getCarry(al, t1l)) | 0
21504 }
8b095871 21505
9987f0c1
IC
21506 this._al = (this._al + al) | 0
21507 this._bl = (this._bl + bl) | 0
21508 this._cl = (this._cl + cl) | 0
21509 this._dl = (this._dl + dl) | 0
21510 this._el = (this._el + el) | 0
21511 this._fl = (this._fl + fl) | 0
21512 this._gl = (this._gl + gl) | 0
21513 this._hl = (this._hl + hl) | 0
8b095871 21514
9987f0c1
IC
21515 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
21516 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
21517 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
21518 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
21519 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
21520 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
21521 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
21522 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
21523}
8b095871 21524
9987f0c1
IC
21525Sha512.prototype._hash = function () {
21526 var H = new Buffer(64)
8b095871 21527
9987f0c1
IC
21528 function writeInt64BE (h, l, offset) {
21529 H.writeInt32BE(h, offset)
21530 H.writeInt32BE(l, offset + 4)
8b095871
IC
21531 }
21532
9987f0c1
IC
21533 writeInt64BE(this._ah, this._al, 0)
21534 writeInt64BE(this._bh, this._bl, 8)
21535 writeInt64BE(this._ch, this._cl, 16)
21536 writeInt64BE(this._dh, this._dl, 24)
21537 writeInt64BE(this._eh, this._el, 32)
21538 writeInt64BE(this._fh, this._fl, 40)
21539 writeInt64BE(this._gh, this._gl, 48)
21540 writeInt64BE(this._hh, this._hl, 56)
21541
21542 return H
8b095871
IC
21543}
21544
9987f0c1 21545module.exports = Sha512
8b095871 21546
9987f0c1
IC
21547}).call(this,require("buffer").Buffer)
21548},{"./hash":99,"buffer":4,"inherits":93}],107:[function(require,module,exports){
21549var inherits = require('inherits')
21550var native = require('./native')
8b095871 21551
9987f0c1
IC
21552function TfTypeError (type, value, valueTypeName) {
21553 this.__error = Error.call(this)
21554 this.__type = type
21555 this.__value = value
21556 this.__valueTypeName = valueTypeName
8b095871 21557
9987f0c1
IC
21558 var message
21559 Object.defineProperty(this, 'message', {
21560 enumerable: true,
21561 get: function () {
21562 if (message) return message
8b095871 21563
9987f0c1
IC
21564 valueTypeName = valueTypeName || getValueTypeName(value)
21565 message = tfErrorString(type, value, valueTypeName)
8b095871 21566
9987f0c1
IC
21567 return message
21568 }
8b095871 21569 })
9987f0c1 21570}
8b095871 21571
9987f0c1
IC
21572function TfPropertyTypeError (type, property, label, value, error, valueTypeName) {
21573 this.__error = error || Error.call(this)
21574 this.__label = label
21575 this.__property = property
21576 this.__type = type
21577 this.__value = value
21578 this.__valueTypeName = valueTypeName
8b095871 21579
9987f0c1
IC
21580 var message
21581 Object.defineProperty(this, 'message', {
21582 enumerable: true,
21583 get: function () {
21584 if (message) return message
21585 if (type) {
21586 valueTypeName = valueTypeName || getValueTypeName(value)
21587 message = tfPropertyErrorString(type, label, property, value, valueTypeName)
21588 } else {
21589 message = 'Unexpected property "' + property + '"'
21590 }
8b095871 21591
9987f0c1
IC
21592 return message
21593 }
8b095871 21594 })
8b095871
IC
21595}
21596
9987f0c1
IC
21597// inherit from Error, assign stack
21598[TfTypeError, TfPropertyTypeError].forEach(function (tfErrorType) {
21599 inherits(tfErrorType, Error)
21600 Object.defineProperty(tfErrorType, 'stack', {
21601 get: function () { return this.__error.stack }
21602 })
21603})
8b095871 21604
9987f0c1
IC
21605function tfCustomError (expected, actual) {
21606 return new TfTypeError(expected, {}, actual)
21607}
8b095871 21608
9987f0c1
IC
21609function tfSubError (e, property, label) {
21610 // sub child?
21611 if (e instanceof TfPropertyTypeError) {
21612 property = property + '.' + e.__property
21613 label = e.__label
8b095871 21614
9987f0c1
IC
21615 return new TfPropertyTypeError(
21616 e.__type, property, label, e.__value, e.__error, e.__valueTypeName
21617 )
8b095871
IC
21618 }
21619
9987f0c1
IC
21620 // child?
21621 if (e instanceof TfTypeError) {
21622 return new TfPropertyTypeError(
21623 e.__type, property, label, e.__value, e.__error, e.__valueTypeName
21624 )
21625 }
8b095871 21626
9987f0c1
IC
21627 return e
21628}
8b095871 21629
9987f0c1
IC
21630function getTypeName (fn) {
21631 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1]
21632}
8b095871 21633
9987f0c1
IC
21634function getValueTypeName (value) {
21635 return native.Nil(value) ? '' : getTypeName(value.constructor)
21636}
8b095871 21637
9987f0c1
IC
21638function getValue (value) {
21639 if (native.Function(value)) return ''
21640 if (native.String(value)) return JSON.stringify(value)
21641 if (value && native.Object(value)) return ''
21642 return value
21643}
8b095871 21644
9987f0c1
IC
21645function tfJSON (type) {
21646 if (native.Function(type)) return type.toJSON ? type.toJSON() : getTypeName(type)
21647 if (native.Array(type)) return 'Array'
21648 if (type && native.Object(type)) return 'Object'
8b095871 21649
9987f0c1
IC
21650 return type !== undefined ? type : ''
21651}
8b095871 21652
9987f0c1
IC
21653function tfErrorString (type, value, valueTypeName) {
21654 var valueJson = getValue(value)
8b095871 21655
9987f0c1
IC
21656 return 'Expected ' + tfJSON(type) + ', got' +
21657 (valueTypeName !== '' ? ' ' + valueTypeName : '') +
21658 (valueJson !== '' ? ' ' + valueJson : '')
8b095871
IC
21659}
21660
9987f0c1
IC
21661function tfPropertyErrorString (type, label, name, value, valueTypeName) {
21662 var description = '" of type '
21663 if (label === 'key') description = '" with key type '
8b095871 21664
9987f0c1 21665 return tfErrorString('property "' + tfJSON(name) + description + tfJSON(type), value, valueTypeName)
8b095871
IC
21666}
21667
9987f0c1
IC
21668module.exports = {
21669 TfTypeError: TfTypeError,
21670 TfPropertyTypeError: TfPropertyTypeError,
21671 tfCustomError: tfCustomError,
21672 tfSubError: tfSubError,
21673 tfJSON: tfJSON,
21674 getValueTypeName: getValueTypeName
8b095871
IC
21675}
21676
9987f0c1
IC
21677},{"./native":110,"inherits":93}],108:[function(require,module,exports){
21678(function (Buffer){
21679var NATIVE = require('./native')
21680var ERRORS = require('./errors')
21681
21682function _Buffer (value) {
21683 return Buffer.isBuffer(value)
8b095871
IC
21684}
21685
9987f0c1
IC
21686function Hex (value) {
21687 return typeof value === 'string' && /^([0-9a-f]{2})+$/i.test(value)
21688}
8b095871 21689
9987f0c1
IC
21690function _LengthN (type, length) {
21691 var name = type.toJSON()
8b095871 21692
9987f0c1
IC
21693 function Length (value) {
21694 if (!type(value)) return false
21695 if (value.length === length) return true
8b095871 21696
9987f0c1
IC
21697 throw ERRORS.tfCustomError(name + '(Length: ' + length + ')', name + '(Length: ' + value.length + ')')
21698 }
21699 Length.toJSON = function () { return name }
8b095871 21700
9987f0c1
IC
21701 return Length
21702}
8b095871 21703
9987f0c1
IC
21704var _ArrayN = _LengthN.bind(null, NATIVE.Array)
21705var _BufferN = _LengthN.bind(null, _Buffer)
21706var _HexN = _LengthN.bind(null, Hex)
8b095871 21707
9987f0c1 21708var UINT53_MAX = Math.pow(2, 53) - 1
8b095871 21709
9987f0c1
IC
21710function Finite (value) {
21711 return typeof value === 'number' && isFinite(value)
21712}
21713function Int8 (value) { return ((value << 24) >> 24) === value }
21714function Int16 (value) { return ((value << 16) >> 16) === value }
21715function Int32 (value) { return (value | 0) === value }
21716function UInt8 (value) { return (value & 0xff) === value }
21717function UInt16 (value) { return (value & 0xffff) === value }
21718function UInt32 (value) { return (value >>> 0) === value }
21719function UInt53 (value) {
21720 return typeof value === 'number' &&
21721 value >= 0 &&
21722 value <= UINT53_MAX &&
21723 Math.floor(value) === value
21724}
8b095871 21725
9987f0c1
IC
21726var types = {
21727 ArrayN: _ArrayN,
21728 Buffer: _Buffer,
21729 BufferN: _BufferN,
21730 Finite: Finite,
21731 Hex: Hex,
21732 HexN: _HexN,
21733 Int8: Int8,
21734 Int16: Int16,
21735 Int32: Int32,
21736 UInt8: UInt8,
21737 UInt16: UInt16,
21738 UInt32: UInt32,
21739 UInt53: UInt53
21740}
8b095871 21741
9987f0c1
IC
21742for (var typeName in types) {
21743 types[typeName].toJSON = function (t) {
21744 return t
21745 }.bind(null, typeName)
21746}
8b095871 21747
9987f0c1 21748module.exports = types
8b095871 21749
9987f0c1
IC
21750}).call(this,{"isBuffer":require("../../../../../.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
21751},{"../../../../../.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){
21752var ERRORS = require('./errors')
21753var NATIVE = require('./native')
8b095871 21754
9987f0c1
IC
21755// short-hand
21756var tfJSON = ERRORS.tfJSON
21757var TfTypeError = ERRORS.TfTypeError
21758var TfPropertyTypeError = ERRORS.TfPropertyTypeError
21759var tfSubError = ERRORS.tfSubError
21760var getValueTypeName = ERRORS.getValueTypeName
8b095871 21761
9987f0c1
IC
21762var TYPES = {
21763 arrayOf: function arrayOf (type) {
21764 type = compile(type)
8b095871 21765
9987f0c1
IC
21766 function _arrayOf (array, strict) {
21767 if (!NATIVE.Array(array)) return false
8b095871 21768
9987f0c1
IC
21769 return array.every(function (value, i) {
21770 try {
21771 return typeforce(type, value, strict)
21772 } catch (e) {
21773 throw tfSubError(e, i)
21774 }
21775 })
8b095871 21776 }
9987f0c1 21777 _arrayOf.toJSON = function () { return '[' + tfJSON(type) + ']' }
8b095871 21778
9987f0c1
IC
21779 return _arrayOf
21780 },
8b095871 21781
9987f0c1
IC
21782 maybe: function maybe (type) {
21783 type = compile(type)
8b095871 21784
9987f0c1
IC
21785 function _maybe (value, strict) {
21786 return NATIVE.Nil(value) || type(value, strict, maybe)
21787 }
21788 _maybe.toJSON = function () { return '?' + tfJSON(type) }
8b095871 21789
9987f0c1
IC
21790 return _maybe
21791 },
8b095871 21792
9987f0c1
IC
21793 map: function map (propertyType, propertyKeyType) {
21794 propertyType = compile(propertyType)
21795 if (propertyKeyType) propertyKeyType = compile(propertyKeyType)
8b095871 21796
9987f0c1
IC
21797 function _map (value, strict) {
21798 if (!NATIVE.Object(value, strict)) return false
21799 if (NATIVE.Nil(value, strict)) return false
8b095871 21800
9987f0c1
IC
21801 for (var propertyName in value) {
21802 try {
21803 if (propertyKeyType) {
21804 typeforce(propertyKeyType, propertyName, strict)
21805 }
21806 } catch (e) {
21807 throw tfSubError(e, propertyName, 'key')
8b095871
IC
21808 }
21809
9987f0c1
IC
21810 try {
21811 var propertyValue = value[propertyName]
21812 typeforce(propertyType, propertyValue, strict)
21813 } catch (e) {
21814 throw tfSubError(e, propertyName)
8b095871
IC
21815 }
21816 }
21817
9987f0c1
IC
21818 return true
21819 }
8b095871 21820
9987f0c1
IC
21821 if (propertyKeyType) {
21822 _map.toJSON = function () {
21823 return '{' + tfJSON(propertyKeyType) + ': ' + tfJSON(propertyType) + '}'
8b095871 21824 }
9987f0c1
IC
21825 } else {
21826 _map.toJSON = function () { return '{' + tfJSON(propertyType) + '}' }
8b095871
IC
21827 }
21828
9987f0c1
IC
21829 return _map
21830 },
8b095871 21831
9987f0c1
IC
21832 object: function object (uncompiled) {
21833 var type = {}
8b095871 21834
9987f0c1
IC
21835 for (var typePropertyName in uncompiled) {
21836 type[typePropertyName] = compile(uncompiled[typePropertyName])
21837 }
8b095871 21838
9987f0c1
IC
21839 function _object (value, strict) {
21840 if (!NATIVE.Object(value)) return false
21841 if (NATIVE.Nil(value)) return false
8b095871 21842
9987f0c1 21843 var propertyName
8b095871 21844
9987f0c1
IC
21845 try {
21846 for (propertyName in type) {
21847 var propertyType = type[propertyName]
21848 var propertyValue = value[propertyName]
8b095871 21849
9987f0c1
IC
21850 typeforce(propertyType, propertyValue, strict)
21851 }
21852 } catch (e) {
21853 throw tfSubError(e, propertyName)
21854 }
8b095871 21855
9987f0c1
IC
21856 if (strict) {
21857 for (propertyName in value) {
21858 if (type[propertyName]) continue
8b095871 21859
9987f0c1
IC
21860 throw new TfPropertyTypeError(undefined, propertyName)
21861 }
21862 }
8b095871 21863
9987f0c1
IC
21864 return true
21865 }
21866 _object.toJSON = function () { return tfJSON(type) }
8b095871 21867
9987f0c1
IC
21868 return _object
21869 },
8b095871 21870
9987f0c1
IC
21871 oneOf: function oneOf () {
21872 var types = [].slice.call(arguments).map(compile)
8b095871 21873
9987f0c1
IC
21874 function _oneOf (value, strict) {
21875 return types.some(function (type) {
21876 try {
21877 return typeforce(type, value, strict)
21878 } catch (e) {
21879 return false
21880 }
21881 })
21882 }
21883 _oneOf.toJSON = function () { return types.map(tfJSON).join('|') }
8b095871 21884
9987f0c1
IC
21885 return _oneOf
21886 },
8b095871 21887
9987f0c1
IC
21888 quacksLike: function quacksLike (type) {
21889 function _quacksLike (value) {
21890 return type === getValueTypeName(value)
21891 }
21892 _quacksLike.toJSON = function () { return type }
8b095871 21893
9987f0c1
IC
21894 return _quacksLike
21895 },
8b095871 21896
9987f0c1
IC
21897 tuple: function tuple () {
21898 var types = [].slice.call(arguments).map(compile)
8b095871 21899
9987f0c1
IC
21900 function _tuple (values, strict) {
21901 return types.every(function (type, i) {
21902 try {
21903 return typeforce(type, values[i], strict)
21904 } catch (e) {
21905 throw tfSubError(e, i)
21906 }
21907 }) && (!strict || values.length === arguments.length)
21908 }
21909 _tuple.toJSON = function () { return '(' + types.map(tfJSON).join(', ') + ')' }
8b095871 21910
9987f0c1
IC
21911 return _tuple
21912 },
8b095871 21913
9987f0c1
IC
21914 value: function value (expected) {
21915 function _value (actual) {
21916 return actual === expected
21917 }
21918 _value.toJSON = function () { return expected }
8b095871 21919
9987f0c1 21920 return _value
8b095871
IC
21921 }
21922}
21923
9987f0c1
IC
21924function compile (type) {
21925 if (NATIVE.String(type)) {
21926 if (type[0] === '?') return TYPES.maybe(compile(type.slice(1)))
8b095871 21927
9987f0c1
IC
21928 return NATIVE[type] || TYPES.quacksLike(type)
21929 } else if (type && NATIVE.Object(type)) {
21930 if (NATIVE.Array(type)) return TYPES.arrayOf(compile(type[0]))
8b095871 21931
9987f0c1
IC
21932 return TYPES.object(type)
21933 } else if (NATIVE.Function(type)) {
21934 return type
21935 }
8b095871 21936
9987f0c1
IC
21937 return TYPES.value(type)
21938}
8b095871 21939
9987f0c1
IC
21940function typeforce (type, value, strict, surrogate) {
21941 if (NATIVE.Function(type)) {
21942 if (type(value, strict)) return true
8b095871 21943
9987f0c1 21944 throw new TfTypeError(surrogate || type, value)
ab78acc6 21945 }
8b095871 21946
9987f0c1
IC
21947 // JIT
21948 return typeforce(compile(type), value, strict)
21949}
8b095871 21950
9987f0c1
IC
21951// assign types to typeforce function
21952for (var typeName in NATIVE) {
21953 typeforce[typeName] = NATIVE[typeName]
8b095871
IC
21954}
21955
9987f0c1
IC
21956for (typeName in TYPES) {
21957 typeforce[typeName] = TYPES[typeName]
8b095871
IC
21958}
21959
9987f0c1
IC
21960var EXTRA = require('./extra')
21961for (typeName in EXTRA) {
21962 typeforce[typeName] = EXTRA[typeName]
8b095871
IC
21963}
21964
9987f0c1
IC
21965// async wrapper
21966function __async (type, value, strict, callback) {
21967 // default to falsy strict if using shorthand overload
21968 if (typeof strict === 'function') return __async(type, value, false, strict)
8b095871 21969
9987f0c1
IC
21970 try {
21971 typeforce(type, value, strict)
21972 } catch (e) {
21973 return callback(e)
21974 }
8b095871 21975
9987f0c1
IC
21976 callback()
21977}
8b095871 21978
9987f0c1
IC
21979typeforce.async = __async
21980typeforce.compile = compile
21981typeforce.TfTypeError = TfTypeError
21982typeforce.TfPropertyTypeError = TfPropertyTypeError
8b095871 21983
9987f0c1 21984module.exports = typeforce
8b095871 21985
9987f0c1
IC
21986},{"./errors":107,"./extra":108,"./native":110}],110:[function(require,module,exports){
21987var types = {
21988 Array: function (value) { return value !== null && value !== undefined && value.constructor === Array },
21989 Boolean: function (value) { return typeof value === 'boolean' },
21990 Function: function (value) { return typeof value === 'function' },
21991 Nil: function (value) { return value === undefined || value === null },
21992 Number: function (value) { return typeof value === 'number' },
21993 Object: function (value) { return typeof value === 'object' },
21994 String: function (value) { return typeof value === 'string' },
21995 '': function () { return true }
21996}
8b095871 21997
9987f0c1
IC
21998// TODO: deprecate
21999types.Null = types.Nil
8b095871 22000
9987f0c1
IC
22001for (var typeName in types) {
22002 types[typeName].toJSON = function (t) {
22003 return t
22004 }.bind(null, typeName)
22005}
8b095871 22006
9987f0c1 22007module.exports = types
8b095871 22008
9987f0c1
IC
22009},{}],111:[function(require,module,exports){
22010(function (Buffer){
22011'use strict'
8b095871 22012
9987f0c1
IC
22013// Number.MAX_SAFE_INTEGER
22014var MAX_SAFE_INTEGER = 9007199254740991
8b095871 22015
9987f0c1
IC
22016function checkUInt53 (n) {
22017 if (n < 0 || n > MAX_SAFE_INTEGER || n % 1 !== 0) throw new RangeError('value out of range')
8b095871
IC
22018}
22019
9987f0c1
IC
22020function encode (number, buffer, offset) {
22021 checkUInt53(number)
8b095871 22022
9987f0c1
IC
22023 if (!buffer) buffer = new Buffer(encodingLength(number))
22024 if (!Buffer.isBuffer(buffer)) throw new TypeError('buffer must be a Buffer instance')
22025 if (!offset) offset = 0
8b095871 22026
9987f0c1
IC
22027 // 8 bit
22028 if (number < 0xfd) {
22029 buffer.writeUInt8(number, offset)
22030 encode.bytes = 1
8b095871 22031
9987f0c1
IC
22032 // 16 bit
22033 } else if (number <= 0xffff) {
22034 buffer.writeUInt8(0xfd, offset)
22035 buffer.writeUInt16LE(number, offset + 1)
22036 encode.bytes = 3
8b095871 22037
9987f0c1
IC
22038 // 32 bit
22039 } else if (number <= 0xffffffff) {
22040 buffer.writeUInt8(0xfe, offset)
22041 buffer.writeUInt32LE(number, offset + 1)
22042 encode.bytes = 5
8b095871 22043
9987f0c1
IC
22044 // 64 bit
22045 } else {
22046 buffer.writeUInt8(0xff, offset)
22047 buffer.writeUInt32LE(number >>> 0, offset + 1)
22048 buffer.writeUInt32LE((number / 0x100000000) | 0, offset + 5)
22049 encode.bytes = 9
ab78acc6 22050 }
8b095871 22051
9987f0c1 22052 return buffer
8b095871
IC
22053}
22054
9987f0c1
IC
22055function decode (buffer, offset) {
22056 if (!Buffer.isBuffer(buffer)) throw new TypeError('buffer must be a Buffer instance')
22057 if (!offset) offset = 0
8b095871 22058
9987f0c1 22059 var first = buffer.readUInt8(offset)
8b095871 22060
9987f0c1
IC
22061 // 8 bit
22062 if (first < 0xfd) {
22063 decode.bytes = 1
22064 return first
8b095871 22065
9987f0c1
IC
22066 // 16 bit
22067 } else if (first === 0xfd) {
22068 decode.bytes = 3
22069 return buffer.readUInt16LE(offset + 1)
8b095871 22070
9987f0c1
IC
22071 // 32 bit
22072 } else if (first === 0xfe) {
22073 decode.bytes = 5
22074 return buffer.readUInt32LE(offset + 1)
8b095871 22075
9987f0c1
IC
22076 // 64 bit
22077 } else {
22078 decode.bytes = 9
22079 var lo = buffer.readUInt32LE(offset + 1)
22080 var hi = buffer.readUInt32LE(offset + 5)
22081 var number = hi * 0x0100000000 + lo
22082 checkUInt53(number)
8b095871 22083
9987f0c1 22084 return number
8b095871 22085 }
ab78acc6
IC
22086}
22087
9987f0c1
IC
22088function encodingLength (number) {
22089 checkUInt53(number)
8b095871 22090
9987f0c1
IC
22091 return (
22092 number < 0xfd ? 1
22093 : number <= 0xffff ? 3
22094 : number <= 0xffffffff ? 5
22095 : 9
22096 )
ab78acc6 22097}
3af2954a 22098
9987f0c1 22099module.exports = { encode: encode, decode: decode, encodingLength: encodingLength }
3af2954a 22100
9987f0c1
IC
22101}).call(this,require("buffer").Buffer)
22102},{"buffer":4}],112:[function(require,module,exports){
22103(function (Buffer){
22104var bs58check = require('bs58check')
3af2954a 22105
9987f0c1
IC
22106function decodeRaw (buffer, version) {
22107 // check version only if defined
22108 if (version !== undefined && buffer[0] !== version) throw new Error('Invalid network version')
3af2954a 22109
9987f0c1
IC
22110 // uncompressed
22111 if (buffer.length === 33) {
22112 return {
22113 version: buffer[0],
22114 privateKey: buffer.slice(1, 33),
22115 compressed: false
ab78acc6 22116 }
9987f0c1 22117 }
8b095871 22118
9987f0c1
IC
22119 // invalid length
22120 if (buffer.length !== 34) throw new Error('Invalid WIF length')
8b095871 22121
9987f0c1
IC
22122 // invalid compression flag
22123 if (buffer[33] !== 0x01) throw new Error('Invalid compression flag')
8b095871 22124
9987f0c1
IC
22125 return {
22126 version: buffer[0],
22127 privateKey: buffer.slice(1, 33),
22128 compressed: true
22129 }
22130}
3af2954a 22131
9987f0c1
IC
22132function encodeRaw (version, privateKey, compressed) {
22133 var result = new Buffer(compressed ? 34 : 33)
8b095871 22134
9987f0c1
IC
22135 result.writeUInt8(version, 0)
22136 privateKey.copy(result, 1)
3af2954a 22137
9987f0c1
IC
22138 if (compressed) {
22139 result[33] = 0x01
22140 }
8b095871 22141
9987f0c1
IC
22142 return result
22143}
8b095871 22144
9987f0c1
IC
22145function decode (string, version) {
22146 return decodeRaw(bs58check.decode(string), version)
ab78acc6 22147}
3af2954a 22148
9987f0c1
IC
22149function encode (version, privateKey, compressed) {
22150 if (typeof version === 'number') return bs58check.encode(encodeRaw(version, privateKey, compressed))
8b095871 22151
9987f0c1
IC
22152 return bs58check.encode(
22153 encodeRaw(
22154 version.version,
22155 version.privateKey,
22156 version.compressed
22157 )
22158 )
ab78acc6 22159}
3af2954a 22160
9987f0c1
IC
22161module.exports = {
22162 decode: decode,
22163 decodeRaw: decodeRaw,
22164 encode: encode,
22165 encodeRaw: encodeRaw
22166}
8b095871
IC
22167
22168}).call(this,require("buffer").Buffer)
9987f0c1 22169},{"bs58check":80,"buffer":4}]},{},[33])(33)
8d18f379
IC
22170});
22171</script>
9987f0c1 22172 <script>bitcoinjs.bitcoin.networks.shadow = {
861750ae 22173 messagePrefix: 'unused',
8b095871
IC
22174 bip32: {
22175 public: 0xEE80286A,
22176 private: 0xEE8031E8
22177 },
22178 pubKeyHash: 0x3f,
22179 scriptHash: 0x7d,
861750ae 22180 wif: 0xbf
8b095871
IC
22181};
22182
9987f0c1 22183bitcoinjs.bitcoin.networks.shadowtn = {
861750ae 22184 messagePrefix: 'unused',
8b095871
IC
22185 bip32: {
22186 public: 0x76C0FDFB,
22187 private: 0x76C1077A
22188 },
22189 pubKeyHash: 0x7f,
22190 scriptHash: 0xc4,
861750ae 22191 wif: 0xff
8b095871 22192};
3af2954a 22193
9987f0c1 22194bitcoinjs.bitcoin.networks.clam = {
861750ae 22195 messagePrefix: 'unused',
8b095871
IC
22196 bip32: {
22197 public: 0xa8c26d64,
22198 private: 0xa8c17826
22199 },
22200 pubKeyHash: 0x89,
9987f0c1 22201 scriptHash: 0x00, // TODO set this correctly
861750ae 22202 wif: 0x85
8b095871 22203};
3af2954a 22204
9987f0c1 22205bitcoinjs.bitcoin.networks.crown = {
861750ae 22206 messagePrefix: 'unused',
0921f370 22207 bip32: {
22208 public: 0x0488b21e,
22209 private: 0x0488ade4
22210 },
22211 pubKeyHash: 0x00,
22212 scriptHash: 0x05,
861750ae 22213 wif: 0x80
0921f370 22214};
22215
9987f0c1 22216bitcoinjs.bitcoin.networks.dash = {
861750ae 22217 messagePrefix: 'unused',
8b095871
IC
22218 bip32: {
22219 public: 0x0488b21e,
22220 private: 0x0488ade4
22221 },
22222 pubKeyHash: 0x4c,
22223 scriptHash: 0x10,
861750ae 22224 wif: 0xcc
8b095871 22225};
ab78acc6 22226
56ad9601 22227bitcoinjs.bitcoin.networks.maza = {
861750ae 22228 messagePrefix: 'unused',
56ad9601
JS
22229 bip32: {
22230 public: 0x0488b21e,
22231 private: 0x0488ade4
22232 },
22233 pubKeyHash: 0x32,
22234 scriptHash: 0x09,
861750ae 22235 wif: 0xe0
56ad9601
JS
22236};
22237
9987f0c1 22238bitcoinjs.bitcoin.networks.dashtn = {
861750ae 22239 messagePrefix: 'unused',
c0386f3b
KR
22240 bip32: {
22241 public: 0x043587cf,
22242 private: 0x04358394
22243 },
22244 pubKeyHash: 0x8c,
22245 scriptHash: 0x13,
861750ae 22246 wif: 0xef
c0386f3b
KR
22247};
22248
9987f0c1 22249bitcoinjs.bitcoin.networks.game = {
861750ae 22250 messagePrefix: 'unused',
f88fab20 22251 bip32: {
22252 public: 0x0488b21e,
22253 private: 0x0488ade4
22254 },
22255 pubKeyHash: 0x26,
22256 scriptHash: 0x05,
861750ae 22257 wif: 0xa6
f88fab20 22258};
22259
9987f0c1 22260bitcoinjs.bitcoin.networks.namecoin = {
861750ae 22261 messagePrefix: 'unused',
8b095871
IC
22262 bip32: {
22263 public: 0x0488b21e,
22264 private: 0x0488ade4
22265 },
22266 pubKeyHash: 0x34,
9987f0c1 22267 scriptHash: 0x00, // TODO set this correctly
861750ae 22268 wif: 0x80
8b095871 22269};
3af2954a 22270
9987f0c1 22271bitcoinjs.bitcoin.networks.peercoin = {
861750ae 22272 messagePrefix: 'unused',
8b095871
IC
22273 bip32: {
22274 public: 0x0488b21e,
22275 private: 0x0488ade4
22276 },
22277 pubKeyHash: 0x37,
9987f0c1 22278 scriptHash: 0x00, // TODO set this correctly
861750ae 22279 wif: 0xb7
8b095871 22280};
3af2954a 22281
9987f0c1 22282bitcoinjs.bitcoin.networks.slimcoin = {
861750ae 22283 messagePrefix: 'unused',
01e81e53
GH
22284 bip32: {
22285 public: 0xef6adf10,
22286 private: 0xef69ea80
22287 },
22288 pubKeyHash: 0x3f,
22289 scriptHash: 0x7d,
861750ae 22290 wif: 0x46
01e81e53
GH
22291};
22292
9987f0c1 22293bitcoinjs.bitcoin.networks.slimcointn = {
861750ae 22294 messagePrefix: 'unused',
01e81e53
GH
22295 bip32: {
22296 public: 0x043587CF,
22297 private: 0x04358394
22298 },
22299 pubKeyHash: 0x6f,
22300 scriptHash: 0xc4,
861750ae 22301 wif: 0x57
01e81e53
GH
22302};
22303
9987f0c1
IC
22304bitcoinjs.bitcoin.networks.dogecoin = {
22305 messagePrefix: '\x19Dogecoin Signed Message:\n',
22306 bip32: {
22307 public: 0x02facafd,
22308 private: 0x02fac398
22309 },
22310 pubKeyHash: 0x1e,
22311 scriptHash: 0x16,
861750ae
JC
22312 wif: 0x9e
22313};
9987f0c1
IC
22314
22315bitcoinjs.bitcoin.networks.viacoin = {
22316 messagePrefix: '\x18Viacoin Signed Message:\n',
22317 bip32: {
22318 public: 0x0488b21e,
22319 private: 0x0488ade4
22320 },
22321 pubKeyHash: 0x47,
22322 scriptHash: 0x21,
861750ae
JC
22323 wif: 0xc7
22324};
9987f0c1
IC
22325
22326bitcoinjs.bitcoin.networks.viacointestnet = {
22327 messagePrefix: '\x18Viacoin Signed Message:\n',
22328 bip32: {
22329 public: 0x043587cf,
22330 private: 0x04358394
22331 },
22332 pubKeyHash: 0x7f,
22333 scriptHash: 0xc4,
861750ae
JC
22334 wif: 0xff
22335};
9987f0c1
IC
22336
22337bitcoinjs.bitcoin.networks.gamerscoin = {
22338 messagePrefix: '\x19Gamerscoin Signed Message:\n',
22339 bip32: {
22340 public: 0x019da462,
22341 private: 0x019d9cfe
22342 },
22343 pubKeyHash: 0x26,
22344 scriptHash: 0x05,
861750ae
JC
22345 wif: 0xA6
22346};
9987f0c1
IC
22347
22348bitcoinjs.bitcoin.networks.jumbucks = {
22349 messagePrefix: '\x19Jumbucks Signed Message:\n',
22350 bip32: {
22351 public: 0x037a689a,
22352 private: 0x037a6460
22353 },
22354 pubKeyHash: 0x2b,
22355 scriptHash: 0x05,
861750ae
JC
22356 wif: 0xab
22357};
9987f0c1
IC
22358
22359bitcoinjs.bitcoin.networks.zetacoin = {
22360 messagePrefix: '\x18Zetacoin Signed Message:\n',
22361 bip32: {
22362 public: 0x0488b21e,
22363 private: 0x0488ade4
22364 },
22365 pubKeyHash: 0x50,
22366 scriptHash: 0x09,
861750ae
JC
22367 wif: 0xe0
22368};
b3cc3930
IC
22369
22370bitcoinjs.bitcoin.networks.myriadcoin = {
861750ae 22371 messagePrefix: 'unused',
b3cc3930
IC
22372 bip32: {
22373 public: 0x0488b21e,
22374 private: 0x0488ade4
22375 },
22376 pubKeyHash: 0x32,
22377 scriptHash: 0x00, // TODO set this correctly
861750ae 22378 wif: 0xb2
b3cc3930 22379};
f128bd58
IC
22380
22381bitcoinjs.bitcoin.networks.pivx = {
861750ae 22382 messagePrefix: 'unused',
f128bd58
IC
22383 bip32: {
22384 public: 0x022d2533,
22385 private: 0x0221312b
22386 },
22387 pubKeyHash: 0x1e,
22388 scriptHash: 0x0d,
861750ae 22389 wif: 0xd4
f128bd58
IC
22390};
22391
22392bitcoinjs.bitcoin.networks.pivxtestnet = {
861750ae 22393 messagePrefix: 'unused',
f128bd58
IC
22394 bip32: {
22395 public: 0x3a8061a0,
22396 private: 0x3a805837
22397 },
22398 pubKeyHash: 0x8b,
22399 scriptHash: 0x13,
861750ae 22400 wif: 0xef
f128bd58 22401};
1102f201
IC
22402
22403bitcoinjs.bitcoin.networks.fujicoin = {
22404 messagePrefix: '\x19FujiCoin Signed Message:\n',
22405 bip32: {
22406 public: 0x0488b21e,
22407 private: 0x0488ade4
22408 },
22409 pubKeyHash: 0x24,
22410 scriptHash: 0x10,
22411 wif: 0xa4
22412};
0f6b34d6
IC
22413
22414bitcoinjs.bitcoin.networks.nubits = {
22415 messagePrefix: '\x18Nu Signed Message:\n',
22416 bip32: {
22417 public: 0x0488b21e,
22418 private: 0x0488ade4
22419 },
22420 pubKeyHash: 0x19,
22421 scriptHash: 0x1a,
22422 wif: 0x96,
22423};
22424
39608073
RS
22425bitcoinjs.bitcoin.networks.bgold = {
22426 messagePrefix: 'unused',
22427 bip32: {
22428 public: 0x0488b21e,
22429 private: 0x0488ade4
22430 },
22431 pubKeyHash: 38,
22432 scriptHash: 23,
22433 wif: 128
22434};
22435
0f6b34d6
IC
22436bitcoinjs.bitcoin.networks.bitcoinCashBitbpay = {
22437 messagePrefix: '\x18Bitcoin Signed Message:\n',
22438 bip32: {
22439 public: 0x0488b21e,
22440 private: 0x0488ade4
22441 },
22442 pubKeyHash: 0x1c,
22443 scriptHash: 0x28,
22444 wif: 0x80
22445};
22446
22447bitcoinjs.bitcoin.networks.bitcoinBip49 = {
22448 messagePrefix: '\x18Bitcoin Signed Message:\n',
22449 bip32: {
22450 public: 0x049d7cb2,
22451 private: 0x049d7878
22452 },
22453 pubKeyHash: 0x00,
22454 scriptHash: 0x05,
22455 wif: 0x80
22456};
22457
22458bitcoinjs.bitcoin.networks.testnetBip49 = {
22459 messagePrefix: '\x18Bitcoin Signed Message:\n',
22460 bip32: {
22461 public: 0x044a5262,
22462 private: 0x044a4e28
22463 },
22464 pubKeyHash: 0x6f,
22465 scriptHash: 0xc4,
22466 wif: 0xef
22467};
22468
22469bitcoinjs.bitcoin.networks.litecoinBip49 = {
22470 messagePrefix: '\x19Litecoin Signed Message:\n',
22471 bip32: {
22472 public: 0x01b26ef6,
22473 private: 0x01b26792
22474 },
22475 pubKeyHash: 0x30,
22476 scriptHash: 0x32,
22477 wif: 0xb0
22478};
8b095871
IC
22479</script>
22480 <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){
22481(function (global){
22482'use strict';
3af2954a 22483
8b095871
IC
22484// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
22485// original notice:
3af2954a 22486
8b095871
IC
22487/*!
22488 * The buffer module from node.js, for the browser.
22489 *
22490 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
22491 * @license MIT
22492 */
22493function compare(a, b) {
22494 if (a === b) {
22495 return 0;
22496 }
3af2954a 22497
8b095871
IC
22498 var x = a.length;
22499 var y = b.length;
3af2954a 22500
8b095871
IC
22501 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
22502 if (a[i] !== b[i]) {
22503 x = a[i];
22504 y = b[i];
22505 break;
22506 }
22507 }
3af2954a 22508
8b095871
IC
22509 if (x < y) {
22510 return -1;
22511 }
22512 if (y < x) {
22513 return 1;
22514 }
22515 return 0;
ab78acc6 22516}
8b095871
IC
22517function isBuffer(b) {
22518 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
22519 return global.Buffer.isBuffer(b);
22520 }
22521 return !!(b != null && b._isBuffer);
ab78acc6 22522}
3af2954a 22523
8b095871
IC
22524// based on node assert, original notice:
22525
22526// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
22527//
22528// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
22529//
22530// Originally from narwhal.js (http://narwhaljs.org)
22531// Copyright (c) 2009 Thomas Robinson <280north.com>
22532//
22533// Permission is hereby granted, free of charge, to any person obtaining a copy
22534// of this software and associated documentation files (the 'Software'), to
22535// deal in the Software without restriction, including without limitation the
22536// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
22537// sell copies of the Software, and to permit persons to whom the Software is
22538// furnished to do so, subject to the following conditions:
22539//
22540// The above copyright notice and this permission notice shall be included in
22541// all copies or substantial portions of the Software.
22542//
22543// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22544// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22545// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22546// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
22547// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22548// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22549
22550var util = require('util/');
22551var hasOwn = Object.prototype.hasOwnProperty;
22552var pSlice = Array.prototype.slice;
22553var functionsHaveNames = (function () {
22554 return function foo() {}.name === 'foo';
22555}());
22556function pToString (obj) {
22557 return Object.prototype.toString.call(obj);
22558}
22559function isView(arrbuf) {
22560 if (isBuffer(arrbuf)) {
22561 return false;
ab78acc6 22562 }
8b095871
IC
22563 if (typeof global.ArrayBuffer !== 'function') {
22564 return false;
22565 }
22566 if (typeof ArrayBuffer.isView === 'function') {
22567 return ArrayBuffer.isView(arrbuf);
22568 }
22569 if (!arrbuf) {
22570 return false;
22571 }
22572 if (arrbuf instanceof DataView) {
22573 return true;
22574 }
22575 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
22576 return true;
22577 }
22578 return false;
ab78acc6 22579}
8b095871
IC
22580// 1. The assert module provides functions that throw
22581// AssertionError's when particular conditions are not met. The
22582// assert module must conform to the following interface.
3af2954a 22583
8b095871 22584var assert = module.exports = ok;
3af2954a 22585
8b095871
IC
22586// 2. The AssertionError is defined in assert.
22587// new assert.AssertionError({ message: message,
22588// actual: actual,
22589// expected: expected })
22590
22591var regex = /\s*function\s+([^\(\s]*)\s*/;
22592// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
22593function getName(func) {
22594 if (!util.isFunction(func)) {
22595 return;
22596 }
22597 if (functionsHaveNames) {
22598 return func.name;
22599 }
22600 var str = func.toString();
22601 var match = str.match(regex);
22602 return match && match[1];
ab78acc6 22603}
8b095871
IC
22604assert.AssertionError = function AssertionError(options) {
22605 this.name = 'AssertionError';
22606 this.actual = options.actual;
22607 this.expected = options.expected;
22608 this.operator = options.operator;
22609 if (options.message) {
22610 this.message = options.message;
22611 this.generatedMessage = false;
22612 } else {
22613 this.message = getMessage(this);
22614 this.generatedMessage = true;
22615 }
22616 var stackStartFunction = options.stackStartFunction || fail;
22617 if (Error.captureStackTrace) {
22618 Error.captureStackTrace(this, stackStartFunction);
22619 } else {
22620 // non v8 browsers so we can have a stacktrace
22621 var err = new Error();
22622 if (err.stack) {
22623 var out = err.stack;
22624
22625 // try to strip useless frames
22626 var fn_name = getName(stackStartFunction);
22627 var idx = out.indexOf('\n' + fn_name);
22628 if (idx >= 0) {
22629 // once we have located the function frame
22630 // we need to strip out everything before it (and its line)
22631 var next_line = out.indexOf('\n', idx + 1);
22632 out = out.substring(next_line + 1);
22633 }
3af2954a 22634
8b095871
IC
22635 this.stack = out;
22636 }
22637 }
22638};
3af2954a 22639
8b095871
IC
22640// assert.AssertionError instanceof Error
22641util.inherits(assert.AssertionError, Error);
3af2954a 22642
8b095871
IC
22643function truncate(s, n) {
22644 if (typeof s === 'string') {
22645 return s.length < n ? s : s.slice(0, n);
22646 } else {
22647 return s;
3af2954a 22648 }
ab78acc6 22649}
8b095871
IC
22650function inspect(something) {
22651 if (functionsHaveNames || !util.isFunction(something)) {
22652 return util.inspect(something);
22653 }
22654 var rawname = getName(something);
22655 var name = rawname ? ': ' + rawname : '';
22656 return '[Function' + name + ']';
22657}
22658function getMessage(self) {
22659 return truncate(inspect(self.actual), 128) + ' ' +
22660 self.operator + ' ' +
22661 truncate(inspect(self.expected), 128);
ab78acc6 22662}
3af2954a 22663
8b095871
IC
22664// At present only the three keys mentioned above are used and
22665// understood by the spec. Implementations or sub modules can pass
22666// other keys to the AssertionError's constructor - they will be
22667// ignored.
3af2954a 22668
8b095871
IC
22669// 3. All of the following functions must throw an AssertionError
22670// when a corresponding condition is not met, with a message that
22671// may be undefined if not provided. All assertion methods provide
22672// both the actual and expected values to the assertion error for
22673// display purposes.
3af2954a 22674
8b095871
IC
22675function fail(actual, expected, message, operator, stackStartFunction) {
22676 throw new assert.AssertionError({
22677 message: message,
22678 actual: actual,
22679 expected: expected,
22680 operator: operator,
22681 stackStartFunction: stackStartFunction
22682 });
ab78acc6 22683}
3af2954a 22684
8b095871
IC
22685// EXTENSION! allows for well behaved errors defined elsewhere.
22686assert.fail = fail;
3af2954a 22687
8b095871
IC
22688// 4. Pure assertion tests whether a value is truthy, as determined
22689// by !!guard.
22690// assert.ok(guard, message_opt);
22691// This statement is equivalent to assert.equal(true, !!guard,
22692// message_opt);. To test strictly for the value true, use
22693// assert.strictEqual(true, guard, message_opt);.
3af2954a 22694
8b095871
IC
22695function ok(value, message) {
22696 if (!value) fail(value, true, message, '==', assert.ok);
ab78acc6 22697}
8b095871 22698assert.ok = ok;
3af2954a 22699
8b095871
IC
22700// 5. The equality assertion tests shallow, coercive equality with
22701// ==.
22702// assert.equal(actual, expected, message_opt);
3af2954a 22703
8b095871
IC
22704assert.equal = function equal(actual, expected, message) {
22705 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
22706};
3af2954a 22707
8b095871
IC
22708// 6. The non-equality assertion tests for whether two objects are not equal
22709// with != assert.notEqual(actual, expected, message_opt);
3af2954a 22710
8b095871
IC
22711assert.notEqual = function notEqual(actual, expected, message) {
22712 if (actual == expected) {
22713 fail(actual, expected, message, '!=', assert.notEqual);
ab78acc6 22714 }
8b095871
IC
22715};
22716
22717// 7. The equivalence assertion tests a deep equality relation.
22718// assert.deepEqual(actual, expected, message_opt);
22719
22720assert.deepEqual = function deepEqual(actual, expected, message) {
22721 if (!_deepEqual(actual, expected, false)) {
22722 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
ab78acc6 22723 }
8b095871 22724};
3af2954a 22725
8b095871
IC
22726assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
22727 if (!_deepEqual(actual, expected, true)) {
22728 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
3af2954a 22729 }
8b095871
IC
22730};
22731
22732function _deepEqual(actual, expected, strict, memos) {
22733 // 7.1. All identical values are equivalent, as determined by ===.
22734 if (actual === expected) {
22735 return true;
22736 } else if (isBuffer(actual) && isBuffer(expected)) {
22737 return compare(actual, expected) === 0;
22738
22739 // 7.2. If the expected value is a Date object, the actual value is
22740 // equivalent if it is also a Date object that refers to the same time.
22741 } else if (util.isDate(actual) && util.isDate(expected)) {
22742 return actual.getTime() === expected.getTime();
22743
22744 // 7.3 If the expected value is a RegExp object, the actual value is
22745 // equivalent if it is also a RegExp object with the same source and
22746 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
22747 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
22748 return actual.source === expected.source &&
22749 actual.global === expected.global &&
22750 actual.multiline === expected.multiline &&
22751 actual.lastIndex === expected.lastIndex &&
22752 actual.ignoreCase === expected.ignoreCase;
22753
22754 // 7.4. Other pairs that do not both pass typeof value == 'object',
22755 // equivalence is determined by ==.
22756 } else if ((actual === null || typeof actual !== 'object') &&
22757 (expected === null || typeof expected !== 'object')) {
22758 return strict ? actual === expected : actual == expected;
22759
22760 // If both values are instances of typed arrays, wrap their underlying
22761 // ArrayBuffers in a Buffer each to increase performance
22762 // This optimization requires the arrays to have the same type as checked by
22763 // Object.prototype.toString (aka pToString). Never perform binary
22764 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
22765 // bit patterns are not identical.
22766 } else if (isView(actual) && isView(expected) &&
22767 pToString(actual) === pToString(expected) &&
22768 !(actual instanceof Float32Array ||
22769 actual instanceof Float64Array)) {
22770 return compare(new Uint8Array(actual.buffer),
22771 new Uint8Array(expected.buffer)) === 0;
22772
22773 // 7.5 For all other Object pairs, including Array objects, equivalence is
22774 // determined by having the same number of owned properties (as verified
22775 // with Object.prototype.hasOwnProperty.call), the same set of keys
22776 // (although not necessarily the same order), equivalent values for every
22777 // corresponding key, and an identical 'prototype' property. Note: this
22778 // accounts for both named and indexed properties on Arrays.
22779 } else if (isBuffer(actual) !== isBuffer(expected)) {
22780 return false;
22781 } else {
22782 memos = memos || {actual: [], expected: []};
3af2954a 22783
8b095871
IC
22784 var actualIndex = memos.actual.indexOf(actual);
22785 if (actualIndex !== -1) {
22786 if (actualIndex === memos.expected.indexOf(expected)) {
22787 return true;
ab78acc6 22788 }
3af2954a 22789 }
8b095871
IC
22790
22791 memos.actual.push(actual);
22792 memos.expected.push(expected);
22793
22794 return objEquiv(actual, expected, strict, memos);
3af2954a 22795 }
ab78acc6 22796}
3af2954a 22797
8b095871
IC
22798function isArguments(object) {
22799 return Object.prototype.toString.call(object) == '[object Arguments]';
ab78acc6 22800}
3af2954a 22801
8b095871
IC
22802function objEquiv(a, b, strict, actualVisitedObjects) {
22803 if (a === null || a === undefined || b === null || b === undefined)
22804 return false;
22805 // if one is a primitive, the other must be same
22806 if (util.isPrimitive(a) || util.isPrimitive(b))
22807 return a === b;
22808 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
22809 return false;
22810 var aIsArgs = isArguments(a);
22811 var bIsArgs = isArguments(b);
22812 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
22813 return false;
22814 if (aIsArgs) {
22815 a = pSlice.call(a);
22816 b = pSlice.call(b);
22817 return _deepEqual(a, b, strict);
22818 }
22819 var ka = objectKeys(a);
22820 var kb = objectKeys(b);
22821 var key, i;
22822 // having the same number of owned properties (keys incorporates
22823 // hasOwnProperty)
22824 if (ka.length !== kb.length)
22825 return false;
22826 //the same set of keys (although not necessarily the same order),
22827 ka.sort();
22828 kb.sort();
22829 //~~~cheap key test
22830 for (i = ka.length - 1; i >= 0; i--) {
22831 if (ka[i] !== kb[i])
22832 return false;
22833 }
22834 //equivalent values for every corresponding key, and
22835 //~~~possibly expensive deep test
22836 for (i = ka.length - 1; i >= 0; i--) {
22837 key = ka[i];
22838 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
22839 return false;
22840 }
22841 return true;
ab78acc6 22842}
3af2954a 22843
8b095871
IC
22844// 8. The non-equivalence assertion tests for any deep inequality.
22845// assert.notDeepEqual(actual, expected, message_opt);
3af2954a 22846
8b095871
IC
22847assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
22848 if (_deepEqual(actual, expected, false)) {
22849 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
3af2954a 22850 }
8b095871 22851};
3af2954a 22852
8b095871
IC
22853assert.notDeepStrictEqual = notDeepStrictEqual;
22854function notDeepStrictEqual(actual, expected, message) {
22855 if (_deepEqual(actual, expected, true)) {
22856 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
22857 }
ab78acc6 22858}
3af2954a 22859
3af2954a 22860
8b095871
IC
22861// 9. The strict equality assertion tests strict equality, as determined by ===.
22862// assert.strictEqual(actual, expected, message_opt);
3af2954a 22863
8b095871
IC
22864assert.strictEqual = function strictEqual(actual, expected, message) {
22865 if (actual !== expected) {
22866 fail(actual, expected, message, '===', assert.strictEqual);
22867 }
22868};
3af2954a 22869
8b095871
IC
22870// 10. The strict non-equality assertion tests for strict inequality, as
22871// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
3af2954a 22872
8b095871
IC
22873assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
22874 if (actual === expected) {
22875 fail(actual, expected, message, '!==', assert.notStrictEqual);
22876 }
22877};
3af2954a 22878
8b095871
IC
22879function expectedException(actual, expected) {
22880 if (!actual || !expected) {
22881 return false;
22882 }
3af2954a 22883
8b095871
IC
22884 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
22885 return expected.test(actual);
22886 }
3af2954a 22887
8b095871
IC
22888 try {
22889 if (actual instanceof expected) {
22890 return true;
22891 }
22892 } catch (e) {
22893 // Ignore. The instanceof check doesn't work for arrow functions.
22894 }
3af2954a 22895
8b095871
IC
22896 if (Error.isPrototypeOf(expected)) {
22897 return false;
22898 }
22899
22900 return expected.call({}, actual) === true;
ab78acc6 22901}
3af2954a 22902
8b095871
IC
22903function _tryBlock(block) {
22904 var error;
22905 try {
22906 block();
22907 } catch (e) {
22908 error = e;
22909 }
22910 return error;
ab78acc6 22911}
3af2954a 22912
8b095871
IC
22913function _throws(shouldThrow, block, expected, message) {
22914 var actual;
22915
22916 if (typeof block !== 'function') {
22917 throw new TypeError('"block" argument must be a function');
3af2954a 22918 }
8b095871
IC
22919
22920 if (typeof expected === 'string') {
22921 message = expected;
22922 expected = null;
ab78acc6 22923 }
8b095871
IC
22924
22925 actual = _tryBlock(block);
22926
22927 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
22928 (message ? ' ' + message : '.');
22929
22930 if (shouldThrow && !actual) {
22931 fail(actual, expected, 'Missing expected exception' + message);
ab78acc6 22932 }
8b095871
IC
22933
22934 var userProvidedMessage = typeof message === 'string';
22935 var isUnwantedException = !shouldThrow && util.isError(actual);
22936 var isUnexpectedException = !shouldThrow && actual && !expected;
22937
22938 if ((isUnwantedException &&
22939 userProvidedMessage &&
22940 expectedException(actual, expected)) ||
22941 isUnexpectedException) {
22942 fail(actual, expected, 'Got unwanted exception' + message);
ab78acc6 22943 }
3af2954a 22944
8b095871
IC
22945 if ((shouldThrow && actual && expected &&
22946 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
22947 throw actual;
22948 }
ab78acc6 22949}
3af2954a 22950
8b095871
IC
22951// 11. Expected to throw an error:
22952// assert.throws(block, Error_opt, message_opt);
22953
22954assert.throws = function(block, /*optional*/error, /*optional*/message) {
22955 _throws(true, block, error, message);
22956};
22957
22958// EXTENSION! This is annoying to write outside this module.
22959assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
22960 _throws(false, block, error, message);
22961};
22962
22963assert.ifError = function(err) { if (err) throw err; };
22964
22965var objectKeys = Object.keys || function (obj) {
22966 var keys = [];
22967 for (var key in obj) {
22968 if (hasOwn.call(obj, key)) keys.push(key);
3af2954a 22969 }
8b095871
IC
22970 return keys;
22971};
3af2954a 22972
8b095871
IC
22973}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
22974},{"util/":30}],2:[function(require,module,exports){
22975'use strict'
22976
22977exports.byteLength = byteLength
22978exports.toByteArray = toByteArray
22979exports.fromByteArray = fromByteArray
22980
22981var lookup = []
22982var revLookup = []
22983var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
22984
22985var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
22986for (var i = 0, len = code.length; i < len; ++i) {
22987 lookup[i] = code[i]
22988 revLookup[code.charCodeAt(i)] = i
22989}
22990
22991revLookup['-'.charCodeAt(0)] = 62
22992revLookup['_'.charCodeAt(0)] = 63
22993
22994function placeHoldersCount (b64) {
22995 var len = b64.length
22996 if (len % 4 > 0) {
22997 throw new Error('Invalid string. Length must be a multiple of 4')
22998 }
22999
23000 // the number of equal signs (place holders)
23001 // if there are two placeholders, than the two characters before it
23002 // represent one byte
23003 // if there is only one, then the three characters before it represent 2 bytes
23004 // this is just a cheap hack to not do indexOf twice
23005 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
ab78acc6
IC
23006}
23007
8b095871
IC
23008function byteLength (b64) {
23009 // base64 is 4/3 + up to two characters of the original data
23010 return b64.length * 3 / 4 - placeHoldersCount(b64)
ab78acc6 23011}
3af2954a 23012
8b095871
IC
23013function toByteArray (b64) {
23014 var i, j, l, tmp, placeHolders, arr
23015 var len = b64.length
23016 placeHolders = placeHoldersCount(b64)
23017
23018 arr = new Arr(len * 3 / 4 - placeHolders)
23019
23020 // if there are placeholders, only get up to the last complete 4 chars
23021 l = placeHolders > 0 ? len - 4 : len
23022
23023 var L = 0
23024
23025 for (i = 0, j = 0; i < l; i += 4, j += 3) {
23026 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
23027 arr[L++] = (tmp >> 16) & 0xFF
23028 arr[L++] = (tmp >> 8) & 0xFF
23029 arr[L++] = tmp & 0xFF
23030 }
23031
23032 if (placeHolders === 2) {
23033 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
23034 arr[L++] = tmp & 0xFF
23035 } else if (placeHolders === 1) {
23036 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
23037 arr[L++] = (tmp >> 8) & 0xFF
23038 arr[L++] = tmp & 0xFF
23039 }
23040
23041 return arr
ab78acc6 23042}
3af2954a 23043
8b095871
IC
23044function tripletToBase64 (num) {
23045 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
ab78acc6 23046}
3af2954a 23047
8b095871
IC
23048function encodeChunk (uint8, start, end) {
23049 var tmp
23050 var output = []
23051 for (var i = start; i < end; i += 3) {
23052 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
23053 output.push(tripletToBase64(tmp))
23054 }
23055 return output.join('')
ab78acc6 23056}
3af2954a 23057
8b095871
IC
23058function fromByteArray (uint8) {
23059 var tmp
23060 var len = uint8.length
23061 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
23062 var output = ''
23063 var parts = []
23064 var maxChunkLength = 16383 // must be multiple of 3
23065
23066 // go through the array every three bytes, we'll deal with trailing stuff later
23067 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
23068 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
23069 }
23070
23071 // pad the end with zeros, but make sure to not forget the extra bytes
23072 if (extraBytes === 1) {
23073 tmp = uint8[len - 1]
23074 output += lookup[tmp >> 2]
23075 output += lookup[(tmp << 4) & 0x3F]
23076 output += '=='
23077 } else if (extraBytes === 2) {
23078 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
23079 output += lookup[tmp >> 10]
23080 output += lookup[(tmp >> 4) & 0x3F]
23081 output += lookup[(tmp << 2) & 0x3F]
23082 output += '='
23083 }
23084
23085 parts.push(output)
23086
23087 return parts.join('')
ab78acc6 23088}
3af2954a 23089
8b095871 23090},{}],3:[function(require,module,exports){
3af2954a 23091
8b095871
IC
23092},{}],4:[function(require,module,exports){
23093(function (global){
23094'use strict';
23095
23096var buffer = require('buffer');
23097var Buffer = buffer.Buffer;
23098var SlowBuffer = buffer.SlowBuffer;
23099var MAX_LEN = buffer.kMaxLength || 2147483647;
23100exports.alloc = function alloc(size, fill, encoding) {
23101 if (typeof Buffer.alloc === 'function') {
23102 return Buffer.alloc(size, fill, encoding);
ab78acc6 23103 }
8b095871
IC
23104 if (typeof encoding === 'number') {
23105 throw new TypeError('encoding must not be number');
23106 }
23107 if (typeof size !== 'number') {
23108 throw new TypeError('size must be a number');
23109 }
23110 if (size > MAX_LEN) {
23111 throw new RangeError('size is too large');
23112 }
23113 var enc = encoding;
23114 var _fill = fill;
23115 if (_fill === undefined) {
23116 enc = undefined;
23117 _fill = 0;
23118 }
23119 var buf = new Buffer(size);
23120 if (typeof _fill === 'string') {
23121 var fillBuf = new Buffer(_fill, enc);
23122 var flen = fillBuf.length;
23123 var i = -1;
23124 while (++i < size) {
23125 buf[i] = fillBuf[i % flen];
ab78acc6 23126 }
ab78acc6 23127 } else {
8b095871 23128 buf.fill(_fill);
ab78acc6 23129 }
8b095871 23130 return buf;
ab78acc6 23131}
8b095871
IC
23132exports.allocUnsafe = function allocUnsafe(size) {
23133 if (typeof Buffer.allocUnsafe === 'function') {
23134 return Buffer.allocUnsafe(size);
23135 }
23136 if (typeof size !== 'number') {
23137 throw new TypeError('size must be a number');
23138 }
23139 if (size > MAX_LEN) {
23140 throw new RangeError('size is too large');
23141 }
23142 return new Buffer(size);
ab78acc6 23143}
8b095871
IC
23144exports.from = function from(value, encodingOrOffset, length) {
23145 if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
23146 return Buffer.from(value, encodingOrOffset, length);
23147 }
23148 if (typeof value === 'number') {
23149 throw new TypeError('"value" argument must not be a number');
23150 }
23151 if (typeof value === 'string') {
23152 return new Buffer(value, encodingOrOffset);
23153 }
23154 if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
23155 var offset = encodingOrOffset;
23156 if (arguments.length === 1) {
23157 return new Buffer(value);
23158 }
23159 if (typeof offset === 'undefined') {
23160 offset = 0;
23161 }
23162 var len = length;
23163 if (typeof len === 'undefined') {
23164 len = value.byteLength - offset;
23165 }
23166 if (offset >= value.byteLength) {
23167 throw new RangeError('\'offset\' is out of bounds');
23168 }
23169 if (len > value.byteLength - offset) {
23170 throw new RangeError('\'length\' is out of bounds');
23171 }
23172 return new Buffer(value.slice(offset, offset + len));
23173 }
23174 if (Buffer.isBuffer(value)) {
23175 var out = new Buffer(value.length);
23176 value.copy(out, 0, 0, value.length);
23177 return out;
23178 }
23179 if (value) {
23180 if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
23181 return new Buffer(value);
23182 }
23183 if (value.type === 'Buffer' && Array.isArray(value.data)) {
23184 return new Buffer(value.data);
23185 }
23186 }
3af2954a 23187
8b095871 23188 throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
ab78acc6 23189}
8b095871
IC
23190exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
23191 if (typeof Buffer.allocUnsafeSlow === 'function') {
23192 return Buffer.allocUnsafeSlow(size);
23193 }
23194 if (typeof size !== 'number') {
23195 throw new TypeError('size must be a number');
23196 }
23197 if (size >= MAX_LEN) {
23198 throw new RangeError('size is too large');
23199 }
23200 return new SlowBuffer(size);
ab78acc6 23201}
3af2954a 23202
8b095871
IC
23203}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
23204},{"buffer":5}],5:[function(require,module,exports){
23205/*!
23206 * The buffer module from node.js, for the browser.
23207 *
23208 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
23209 * @license MIT
23210 */
23211/* eslint-disable no-proto */
3af2954a 23212
8b095871 23213'use strict'
3af2954a 23214
8b095871
IC
23215var base64 = require('base64-js')
23216var ieee754 = require('ieee754')
3af2954a 23217
8b095871
IC
23218exports.Buffer = Buffer
23219exports.SlowBuffer = SlowBuffer
23220exports.INSPECT_MAX_BYTES = 50
23221
23222var K_MAX_LENGTH = 0x7fffffff
23223exports.kMaxLength = K_MAX_LENGTH
23224
23225/**
23226 * If `Buffer.TYPED_ARRAY_SUPPORT`:
23227 * === true Use Uint8Array implementation (fastest)
23228 * === false Print warning and recommend using `buffer` v4.x which has an Object
23229 * implementation (most compatible, even IE6)
23230 *
23231 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
23232 * Opera 11.6+, iOS 4.2+.
23233 *
23234 * We report that the browser does not support typed arrays if the are not subclassable
23235 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
23236 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
23237 * for __proto__ and has a buggy typed array implementation.
23238 */
23239Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
23240
23241if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
23242 typeof console.error === 'function') {
23243 console.error(
23244 'This browser lacks typed array (Uint8Array) support which is required by ' +
23245 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
23246 )
ab78acc6 23247}
3af2954a 23248
8b095871
IC
23249function typedArraySupport () {
23250 // Can typed array instances can be augmented?
23251 try {
23252 var arr = new Uint8Array(1)
23253 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
23254 return arr.foo() === 42
23255 } catch (e) {
23256 return false
23257 }
ab78acc6 23258}
3af2954a 23259
8b095871
IC
23260function createBuffer (length) {
23261 if (length > K_MAX_LENGTH) {
23262 throw new RangeError('Invalid typed array length')
3af2954a 23263 }
8b095871
IC
23264 // Return an augmented `Uint8Array` instance
23265 var buf = new Uint8Array(length)
23266 buf.__proto__ = Buffer.prototype
23267 return buf
ab78acc6 23268}
3af2954a 23269
8b095871
IC
23270/**
23271 * The Buffer constructor returns instances of `Uint8Array` that have their
23272 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
23273 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
23274 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
23275 * returns a single octet.
23276 *
23277 * The `Uint8Array` prototype remains unmodified.
23278 */
3af2954a 23279
8b095871
IC
23280function Buffer (arg, encodingOrOffset, length) {
23281 // Common case.
23282 if (typeof arg === 'number') {
23283 if (typeof encodingOrOffset === 'string') {
23284 throw new Error(
23285 'If encoding is specified then the first argument must be a string'
23286 )
23287 }
23288 return allocUnsafe(arg)
23289 }
23290 return from(arg, encodingOrOffset, length)
ab78acc6 23291}
3af2954a 23292
8b095871
IC
23293// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
23294if (typeof Symbol !== 'undefined' && Symbol.species &&
23295 Buffer[Symbol.species] === Buffer) {
23296 Object.defineProperty(Buffer, Symbol.species, {
23297 value: null,
23298 configurable: true,
23299 enumerable: false,
23300 writable: false
23301 })
ab78acc6 23302}
3af2954a 23303
8b095871 23304Buffer.poolSize = 8192 // not used by this implementation
3af2954a 23305
8b095871
IC
23306function from (value, encodingOrOffset, length) {
23307 if (typeof value === 'number') {
23308 throw new TypeError('"value" argument must not be a number')
23309 }
3af2954a 23310
8b095871
IC
23311 if (value instanceof ArrayBuffer) {
23312 return fromArrayBuffer(value, encodingOrOffset, length)
23313 }
3af2954a 23314
8b095871
IC
23315 if (typeof value === 'string') {
23316 return fromString(value, encodingOrOffset)
23317 }
3af2954a 23318
8b095871 23319 return fromObject(value)
ab78acc6 23320}
3af2954a 23321
8b095871
IC
23322/**
23323 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
23324 * if value is a number.
23325 * Buffer.from(str[, encoding])
23326 * Buffer.from(array)
23327 * Buffer.from(buffer)
23328 * Buffer.from(arrayBuffer[, byteOffset[, length]])
23329 **/
23330Buffer.from = function (value, encodingOrOffset, length) {
23331 return from(value, encodingOrOffset, length)
ab78acc6 23332}
3af2954a 23333
8b095871
IC
23334// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
23335// https://github.com/feross/buffer/pull/148
23336Buffer.prototype.__proto__ = Uint8Array.prototype
23337Buffer.__proto__ = Uint8Array
23338
23339function assertSize (size) {
23340 if (typeof size !== 'number') {
23341 throw new TypeError('"size" argument must be a number')
23342 } else if (size < 0) {
23343 throw new RangeError('"size" argument must not be negative')
23344 }
23345}
23346
23347function alloc (size, fill, encoding) {
23348 assertSize(size)
23349 if (size <= 0) {
23350 return createBuffer(size)
3af2954a 23351 }
8b095871
IC
23352 if (fill !== undefined) {
23353 // Only pay attention to encoding if it's a string. This
23354 // prevents accidentally sending in a number that would
23355 // be interpretted as a start offset.
23356 return typeof encoding === 'string'
23357 ? createBuffer(size).fill(fill, encoding)
23358 : createBuffer(size).fill(fill)
23359 }
23360 return createBuffer(size)
ab78acc6 23361}
3af2954a 23362
8b095871
IC
23363/**
23364 * Creates a new filled Buffer instance.
23365 * alloc(size[, fill[, encoding]])
23366 **/
23367Buffer.alloc = function (size, fill, encoding) {
23368 return alloc(size, fill, encoding)
ab78acc6 23369}
3af2954a 23370
8b095871
IC
23371function allocUnsafe (size) {
23372 assertSize(size)
23373 return createBuffer(size < 0 ? 0 : checked(size) | 0)
ab78acc6 23374}
3af2954a 23375
8b095871
IC
23376/**
23377 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
23378 * */
23379Buffer.allocUnsafe = function (size) {
23380 return allocUnsafe(size)
23381}
23382/**
23383 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
23384 */
23385Buffer.allocUnsafeSlow = function (size) {
23386 return allocUnsafe(size)
ab78acc6 23387}
3af2954a 23388
8b095871
IC
23389function fromString (string, encoding) {
23390 if (typeof encoding !== 'string' || encoding === '') {
23391 encoding = 'utf8'
23392 }
23393
23394 if (!Buffer.isEncoding(encoding)) {
23395 throw new TypeError('"encoding" must be a valid string encoding')
23396 }
23397
23398 var length = byteLength(string, encoding) | 0
23399 var buf = createBuffer(length)
23400
23401 var actual = buf.write(string, encoding)
23402
23403 if (actual !== length) {
23404 // Writing a hex string, for example, that contains invalid characters will
23405 // cause everything after the first invalid character to be ignored. (e.g.
23406 // 'abxxcd' will be treated as 'ab')
23407 buf = buf.slice(0, actual)
23408 }
23409
23410 return buf
ab78acc6 23411}
3af2954a 23412
8b095871
IC
23413function fromArrayLike (array) {
23414 var length = array.length < 0 ? 0 : checked(array.length) | 0
23415 var buf = createBuffer(length)
23416 for (var i = 0; i < length; i += 1) {
23417 buf[i] = array[i] & 255
23418 }
23419 return buf
23420}
3af2954a 23421
8b095871
IC
23422function fromArrayBuffer (array, byteOffset, length) {
23423 if (byteOffset < 0 || array.byteLength < byteOffset) {
23424 throw new RangeError('\'offset\' is out of bounds')
23425 }
3af2954a 23426
8b095871
IC
23427 if (array.byteLength < byteOffset + (length || 0)) {
23428 throw new RangeError('\'length\' is out of bounds')
ab78acc6
IC
23429 }
23430
8b095871
IC
23431 var buf
23432 if (byteOffset === undefined && length === undefined) {
23433 buf = new Uint8Array(array)
23434 } else if (length === undefined) {
23435 buf = new Uint8Array(array, byteOffset)
23436 } else {
23437 buf = new Uint8Array(array, byteOffset, length)
23438 }
3af2954a 23439
8b095871
IC
23440 // Return an augmented `Uint8Array` instance
23441 buf.__proto__ = Buffer.prototype
23442 return buf
23443}
23444
23445function fromObject (obj) {
23446 if (Buffer.isBuffer(obj)) {
23447 var len = checked(obj.length) | 0
23448 var buf = createBuffer(len)
23449
23450 if (buf.length === 0) {
23451 return buf
ab78acc6 23452 }
8b095871
IC
23453
23454 obj.copy(buf, 0, 0, len)
23455 return buf
23456 }
23457
23458 if (obj) {
23459 if (ArrayBuffer.isView(obj) || 'length' in obj) {
23460 if (typeof obj.length !== 'number' || isnan(obj.length)) {
23461 return createBuffer(0)
ab78acc6 23462 }
8b095871 23463 return fromArrayLike(obj)
ab78acc6 23464 }
3af2954a 23465
8b095871
IC
23466 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
23467 return fromArrayLike(obj.data)
3af2954a
IC
23468 }
23469 }
8b095871
IC
23470
23471 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
ab78acc6 23472}
3af2954a 23473
8b095871
IC
23474function checked (length) {
23475 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
23476 // length is NaN (which is otherwise coerced to zero.)
23477 if (length >= K_MAX_LENGTH) {
23478 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
23479 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
ab78acc6 23480 }
8b095871
IC
23481 return length | 0
23482}
23483
23484function SlowBuffer (length) {
23485 if (+length != length) { // eslint-disable-line eqeqeq
23486 length = 0
3af2954a 23487 }
8b095871 23488 return Buffer.alloc(+length)
ab78acc6 23489}
3af2954a 23490
8b095871
IC
23491Buffer.isBuffer = function isBuffer (b) {
23492 return b != null && b._isBuffer === true
ab78acc6 23493}
3af2954a 23494
8b095871
IC
23495Buffer.compare = function compare (a, b) {
23496 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
23497 throw new TypeError('Arguments must be Buffers')
23498 }
23499
23500 if (a === b) return 0
23501
23502 var x = a.length
23503 var y = b.length
23504
23505 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
23506 if (a[i] !== b[i]) {
23507 x = a[i]
23508 y = b[i]
23509 break
ab78acc6
IC
23510 }
23511 }
8b095871
IC
23512
23513 if (x < y) return -1
23514 if (y < x) return 1
23515 return 0
23516}
23517
23518Buffer.isEncoding = function isEncoding (encoding) {
23519 switch (String(encoding).toLowerCase()) {
23520 case 'hex':
23521 case 'utf8':
23522 case 'utf-8':
23523 case 'ascii':
23524 case 'latin1':
23525 case 'binary':
23526 case 'base64':
23527 case 'ucs2':
23528 case 'ucs-2':
23529 case 'utf16le':
23530 case 'utf-16le':
23531 return true
23532 default:
23533 return false
23534 }
ab78acc6
IC
23535}
23536
8b095871
IC
23537Buffer.concat = function concat (list, length) {
23538 if (!Array.isArray(list)) {
23539 throw new TypeError('"list" argument must be an Array of Buffers')
23540 }
ab78acc6 23541
8b095871
IC
23542 if (list.length === 0) {
23543 return Buffer.alloc(0)
23544 }
ab78acc6 23545
8b095871
IC
23546 var i
23547 if (length === undefined) {
23548 length = 0
23549 for (i = 0; i < list.length; ++i) {
23550 length += list[i].length
23551 }
3af2954a 23552 }
8b095871
IC
23553
23554 var buffer = Buffer.allocUnsafe(length)
23555 var pos = 0
23556 for (i = 0; i < list.length; ++i) {
23557 var buf = list[i]
23558 if (!Buffer.isBuffer(buf)) {
23559 throw new TypeError('"list" argument must be an Array of Buffers')
23560 }
23561 buf.copy(buffer, pos)
23562 pos += buf.length
ab78acc6 23563 }
8b095871 23564 return buffer
ab78acc6
IC
23565}
23566
8b095871
IC
23567function byteLength (string, encoding) {
23568 if (Buffer.isBuffer(string)) {
23569 return string.length
23570 }
23571 if (ArrayBuffer.isView(string) || string instanceof ArrayBuffer) {
23572 return string.byteLength
23573 }
23574 if (typeof string !== 'string') {
23575 string = '' + string
23576 }
23577
23578 var len = string.length
23579 if (len === 0) return 0
23580
23581 // Use a for loop to avoid recursion
23582 var loweredCase = false
23583 for (;;) {
23584 switch (encoding) {
23585 case 'ascii':
23586 case 'latin1':
23587 case 'binary':
23588 return len
23589 case 'utf8':
23590 case 'utf-8':
23591 case undefined:
23592 return utf8ToBytes(string).length
23593 case 'ucs2':
23594 case 'ucs-2':
23595 case 'utf16le':
23596 case 'utf-16le':
23597 return len * 2
23598 case 'hex':
23599 return len >>> 1
23600 case 'base64':
23601 return base64ToBytes(string).length
23602 default:
23603 if (loweredCase) return utf8ToBytes(string).length // assume utf8
23604 encoding = ('' + encoding).toLowerCase()
23605 loweredCase = true
ab78acc6 23606 }
3af2954a 23607 }
ab78acc6 23608}
8b095871 23609Buffer.byteLength = byteLength
3af2954a 23610
8b095871
IC
23611function slowToString (encoding, start, end) {
23612 var loweredCase = false
3af2954a 23613
8b095871
IC
23614 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
23615 // property of a typed array.
3af2954a 23616
8b095871
IC
23617 // This behaves neither like String nor Uint8Array in that we set start/end
23618 // to their upper/lower bounds if the value passed is out of range.
23619 // undefined is handled specially as per ECMA-262 6th Edition,
23620 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
23621 if (start === undefined || start < 0) {
23622 start = 0
23623 }
23624 // Return early if start > this.length. Done here to prevent potential uint32
23625 // coercion fail below.
23626 if (start > this.length) {
23627 return ''
23628 }
3af2954a 23629
8b095871
IC
23630 if (end === undefined || end > this.length) {
23631 end = this.length
23632 }
3af2954a 23633
8b095871
IC
23634 if (end <= 0) {
23635 return ''
23636 }
3af2954a 23637
8b095871
IC
23638 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
23639 end >>>= 0
23640 start >>>= 0
3af2954a 23641
8b095871
IC
23642 if (end <= start) {
23643 return ''
3af2954a
IC
23644 }
23645
8b095871 23646 if (!encoding) encoding = 'utf8'
3af2954a 23647
8b095871
IC
23648 while (true) {
23649 switch (encoding) {
23650 case 'hex':
23651 return hexSlice(this, start, end)
23652
23653 case 'utf8':
23654 case 'utf-8':
23655 return utf8Slice(this, start, end)
23656
23657 case 'ascii':
23658 return asciiSlice(this, start, end)
23659
23660 case 'latin1':
23661 case 'binary':
23662 return latin1Slice(this, start, end)
23663
23664 case 'base64':
23665 return base64Slice(this, start, end)
23666
23667 case 'ucs2':
23668 case 'ucs-2':
23669 case 'utf16le':
23670 case 'utf-16le':
23671 return utf16leSlice(this, start, end)
23672
23673 default:
23674 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
23675 encoding = (encoding + '').toLowerCase()
23676 loweredCase = true
23677 }
23678 }
ab78acc6 23679}
3af2954a 23680
8b095871
IC
23681// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
23682// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
23683// reliably in a browserify context because there could be multiple different
23684// copies of the 'buffer' package in use. This method works even for Buffer
23685// instances that were created from another copy of the `buffer` package.
23686// See: https://github.com/feross/buffer/issues/154
23687Buffer.prototype._isBuffer = true
23688
23689function swap (b, n, m) {
23690 var i = b[n]
23691 b[n] = b[m]
23692 b[m] = i
ab78acc6 23693}
3af2954a 23694
8b095871
IC
23695Buffer.prototype.swap16 = function swap16 () {
23696 var len = this.length
23697 if (len % 2 !== 0) {
23698 throw new RangeError('Buffer size must be a multiple of 16-bits')
23699 }
23700 for (var i = 0; i < len; i += 2) {
23701 swap(this, i, i + 1)
23702 }
23703 return this
23704}
3af2954a 23705
8b095871
IC
23706Buffer.prototype.swap32 = function swap32 () {
23707 var len = this.length
23708 if (len % 4 !== 0) {
23709 throw new RangeError('Buffer size must be a multiple of 32-bits')
23710 }
23711 for (var i = 0; i < len; i += 4) {
23712 swap(this, i, i + 3)
23713 swap(this, i + 1, i + 2)
23714 }
23715 return this
23716}
3af2954a 23717
8b095871
IC
23718Buffer.prototype.swap64 = function swap64 () {
23719 var len = this.length
23720 if (len % 8 !== 0) {
23721 throw new RangeError('Buffer size must be a multiple of 64-bits')
3af2954a 23722 }
8b095871
IC
23723 for (var i = 0; i < len; i += 8) {
23724 swap(this, i, i + 7)
23725 swap(this, i + 1, i + 6)
23726 swap(this, i + 2, i + 5)
23727 swap(this, i + 3, i + 4)
23728 }
23729 return this
23730}
3af2954a 23731
8b095871
IC
23732Buffer.prototype.toString = function toString () {
23733 var length = this.length
23734 if (length === 0) return ''
23735 if (arguments.length === 0) return utf8Slice(this, 0, length)
23736 return slowToString.apply(this, arguments)
ab78acc6 23737}
3af2954a 23738
8b095871
IC
23739Buffer.prototype.equals = function equals (b) {
23740 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
23741 if (this === b) return true
23742 return Buffer.compare(this, b) === 0
23743}
3af2954a 23744
8b095871
IC
23745Buffer.prototype.inspect = function inspect () {
23746 var str = ''
23747 var max = exports.INSPECT_MAX_BYTES
23748 if (this.length > 0) {
23749 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
23750 if (this.length > max) str += ' ... '
23751 }
23752 return '<Buffer ' + str + '>'
ab78acc6 23753}
3af2954a 23754
8b095871
IC
23755Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
23756 if (!Buffer.isBuffer(target)) {
23757 throw new TypeError('Argument must be a Buffer')
23758 }
3af2954a 23759
8b095871
IC
23760 if (start === undefined) {
23761 start = 0
23762 }
23763 if (end === undefined) {
23764 end = target ? target.length : 0
23765 }
23766 if (thisStart === undefined) {
23767 thisStart = 0
23768 }
23769 if (thisEnd === undefined) {
23770 thisEnd = this.length
23771 }
3af2954a 23772
8b095871
IC
23773 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
23774 throw new RangeError('out of range index')
23775 }
3af2954a 23776
8b095871
IC
23777 if (thisStart >= thisEnd && start >= end) {
23778 return 0
23779 }
23780 if (thisStart >= thisEnd) {
23781 return -1
23782 }
23783 if (start >= end) {
23784 return 1
23785 }
3af2954a 23786
8b095871
IC
23787 start >>>= 0
23788 end >>>= 0
23789 thisStart >>>= 0
23790 thisEnd >>>= 0
3af2954a 23791
8b095871 23792 if (this === target) return 0
3af2954a 23793
8b095871
IC
23794 var x = thisEnd - thisStart
23795 var y = end - start
23796 var len = Math.min(x, y)
23797
23798 var thisCopy = this.slice(thisStart, thisEnd)
23799 var targetCopy = target.slice(start, end)
23800
23801 for (var i = 0; i < len; ++i) {
23802 if (thisCopy[i] !== targetCopy[i]) {
23803 x = thisCopy[i]
23804 y = targetCopy[i]
23805 break
3af2954a 23806 }
8b095871
IC
23807 }
23808
23809 if (x < y) return -1
23810 if (y < x) return 1
23811 return 0
ab78acc6 23812}
3af2954a 23813
8b095871
IC
23814// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
23815// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
ab78acc6 23816//
8b095871
IC
23817// Arguments:
23818// - buffer - a Buffer to search
23819// - val - a string, Buffer, or number
23820// - byteOffset - an index into `buffer`; will be clamped to an int32
23821// - encoding - an optional encoding, relevant is val is a string
23822// - dir - true for indexOf, false for lastIndexOf
23823function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
23824 // Empty buffer means no match
23825 if (buffer.length === 0) return -1
23826
23827 // Normalize byteOffset
23828 if (typeof byteOffset === 'string') {
23829 encoding = byteOffset
23830 byteOffset = 0
23831 } else if (byteOffset > 0x7fffffff) {
23832 byteOffset = 0x7fffffff
23833 } else if (byteOffset < -0x80000000) {
23834 byteOffset = -0x80000000
23835 }
23836 byteOffset = +byteOffset // Coerce to Number.
23837 if (isNaN(byteOffset)) {
23838 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
23839 byteOffset = dir ? 0 : (buffer.length - 1)
23840 }
23841
23842 // Normalize byteOffset: negative offsets start from the end of the buffer
23843 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
23844 if (byteOffset >= buffer.length) {
23845 if (dir) return -1
23846 else byteOffset = buffer.length - 1
23847 } else if (byteOffset < 0) {
23848 if (dir) byteOffset = 0
23849 else return -1
23850 }
23851
23852 // Normalize val
23853 if (typeof val === 'string') {
23854 val = Buffer.from(val, encoding)
23855 }
3af2954a 23856
8b095871
IC
23857 // Finally, search either indexOf (if dir is true) or lastIndexOf
23858 if (Buffer.isBuffer(val)) {
23859 // Special case: looking for empty string/buffer always fails
23860 if (val.length === 0) {
23861 return -1
23862 }
23863 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
23864 } else if (typeof val === 'number') {
23865 val = val & 0xFF // Search for a byte value [0-255]
23866 if (typeof Uint8Array.prototype.indexOf === 'function') {
23867 if (dir) {
23868 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
23869 } else {
23870 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
23871 }
23872 }
23873 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
23874 }
3af2954a 23875
8b095871
IC
23876 throw new TypeError('val must be string, number or Buffer')
23877}
3af2954a 23878
8b095871
IC
23879function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
23880 var indexSize = 1
23881 var arrLength = arr.length
23882 var valLength = val.length
3af2954a 23883
8b095871
IC
23884 if (encoding !== undefined) {
23885 encoding = String(encoding).toLowerCase()
23886 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
23887 encoding === 'utf16le' || encoding === 'utf-16le') {
23888 if (arr.length < 2 || val.length < 2) {
23889 return -1
23890 }
23891 indexSize = 2
23892 arrLength /= 2
23893 valLength /= 2
23894 byteOffset /= 2
23895 }
23896 }
3af2954a 23897
8b095871
IC
23898 function read (buf, i) {
23899 if (indexSize === 1) {
23900 return buf[i]
23901 } else {
23902 return buf.readUInt16BE(i * indexSize)
23903 }
23904 }
3af2954a 23905
8b095871
IC
23906 var i
23907 if (dir) {
23908 var foundIndex = -1
23909 for (i = byteOffset; i < arrLength; i++) {
23910 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
23911 if (foundIndex === -1) foundIndex = i
23912 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
23913 } else {
23914 if (foundIndex !== -1) i -= i - foundIndex
23915 foundIndex = -1
23916 }
23917 }
ab78acc6 23918 } else {
8b095871
IC
23919 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
23920 for (i = byteOffset; i >= 0; i--) {
23921 var found = true
23922 for (var j = 0; j < valLength; j++) {
23923 if (read(arr, i + j) !== read(val, j)) {
23924 found = false
23925 break
23926 }
23927 }
23928 if (found) return i
23929 }
ab78acc6 23930 }
3af2954a 23931
8b095871
IC
23932 return -1
23933}
3af2954a 23934
8b095871
IC
23935Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
23936 return this.indexOf(val, byteOffset, encoding) !== -1
23937}
23938
23939Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
23940 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
23941}
3af2954a 23942
8b095871
IC
23943Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
23944 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
23945}
23946
23947function hexWrite (buf, string, offset, length) {
23948 offset = Number(offset) || 0
23949 var remaining = buf.length - offset
23950 if (!length) {
23951 length = remaining
23952 } else {
23953 length = Number(length)
23954 if (length > remaining) {
23955 length = remaining
3af2954a 23956 }
3af2954a
IC
23957 }
23958
8b095871
IC
23959 // must be an even number of digits
23960 var strLen = string.length
23961 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
3af2954a 23962
8b095871
IC
23963 if (length > strLen / 2) {
23964 length = strLen / 2
ab78acc6 23965 }
8b095871
IC
23966 for (var i = 0; i < length; ++i) {
23967 var parsed = parseInt(string.substr(i * 2, 2), 16)
23968 if (isNaN(parsed)) return i
23969 buf[offset + i] = parsed
ab78acc6 23970 }
8b095871 23971 return i
ab78acc6 23972}
3af2954a 23973
8b095871
IC
23974function utf8Write (buf, string, offset, length) {
23975 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
ab78acc6 23976}
3af2954a 23977
8b095871
IC
23978function asciiWrite (buf, string, offset, length) {
23979 return blitBuffer(asciiToBytes(string), buf, offset, length)
ab78acc6 23980}
3af2954a 23981
8b095871
IC
23982function latin1Write (buf, string, offset, length) {
23983 return asciiWrite(buf, string, offset, length)
ab78acc6 23984}
3af2954a 23985
8b095871
IC
23986function base64Write (buf, string, offset, length) {
23987 return blitBuffer(base64ToBytes(string), buf, offset, length)
ab78acc6 23988}
3af2954a 23989
8b095871
IC
23990function ucs2Write (buf, string, offset, length) {
23991 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
23992}
3af2954a 23993
8b095871
IC
23994Buffer.prototype.write = function write (string, offset, length, encoding) {
23995 // Buffer#write(string)
23996 if (offset === undefined) {
23997 encoding = 'utf8'
23998 length = this.length
23999 offset = 0
24000 // Buffer#write(string, encoding)
24001 } else if (length === undefined && typeof offset === 'string') {
24002 encoding = offset
24003 length = this.length
24004 offset = 0
24005 // Buffer#write(string, offset[, length][, encoding])
24006 } else if (isFinite(offset)) {
24007 offset = offset >>> 0
24008 if (isFinite(length)) {
24009 length = length >>> 0
24010 if (encoding === undefined) encoding = 'utf8'
24011 } else {
24012 encoding = length
24013 length = undefined
24014 }
24015 } else {
24016 throw new Error(
24017 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
24018 )
3af2954a
IC
24019 }
24020
8b095871
IC
24021 var remaining = this.length - offset
24022 if (length === undefined || length > remaining) length = remaining
3af2954a 24023
8b095871
IC
24024 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
24025 throw new RangeError('Attempt to write outside buffer bounds')
ab78acc6 24026 }
3af2954a 24027
8b095871 24028 if (!encoding) encoding = 'utf8'
3af2954a 24029
8b095871
IC
24030 var loweredCase = false
24031 for (;;) {
24032 switch (encoding) {
24033 case 'hex':
24034 return hexWrite(this, string, offset, length)
3af2954a 24035
8b095871
IC
24036 case 'utf8':
24037 case 'utf-8':
24038 return utf8Write(this, string, offset, length)
3af2954a 24039
8b095871
IC
24040 case 'ascii':
24041 return asciiWrite(this, string, offset, length)
3af2954a 24042
8b095871
IC
24043 case 'latin1':
24044 case 'binary':
24045 return latin1Write(this, string, offset, length)
3af2954a 24046
8b095871
IC
24047 case 'base64':
24048 // Warning: maxLength not taken into account in base64Write
24049 return base64Write(this, string, offset, length)
3af2954a 24050
8b095871
IC
24051 case 'ucs2':
24052 case 'ucs-2':
24053 case 'utf16le':
24054 case 'utf-16le':
24055 return ucs2Write(this, string, offset, length)
3af2954a 24056
8b095871
IC
24057 default:
24058 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
24059 encoding = ('' + encoding).toLowerCase()
24060 loweredCase = true
24061 }
3af2954a 24062 }
ab78acc6 24063}
3af2954a 24064
8b095871
IC
24065Buffer.prototype.toJSON = function toJSON () {
24066 return {
24067 type: 'Buffer',
24068 data: Array.prototype.slice.call(this._arr || this, 0)
3af2954a 24069 }
ab78acc6
IC
24070}
24071
8b095871
IC
24072function base64Slice (buf, start, end) {
24073 if (start === 0 && end === buf.length) {
24074 return base64.fromByteArray(buf)
24075 } else {
24076 return base64.fromByteArray(buf.slice(start, end))
3af2954a 24077 }
8b095871 24078}
3af2954a 24079
8b095871
IC
24080function utf8Slice (buf, start, end) {
24081 end = Math.min(buf.length, end)
24082 var res = []
3af2954a 24083
8b095871
IC
24084 var i = start
24085 while (i < end) {
24086 var firstByte = buf[i]
24087 var codePoint = null
24088 var bytesPerSequence = (firstByte > 0xEF) ? 4
24089 : (firstByte > 0xDF) ? 3
24090 : (firstByte > 0xBF) ? 2
24091 : 1
3af2954a 24092
8b095871
IC
24093 if (i + bytesPerSequence <= end) {
24094 var secondByte, thirdByte, fourthByte, tempCodePoint
3af2954a 24095
8b095871
IC
24096 switch (bytesPerSequence) {
24097 case 1:
24098 if (firstByte < 0x80) {
24099 codePoint = firstByte
24100 }
24101 break
24102 case 2:
24103 secondByte = buf[i + 1]
24104 if ((secondByte & 0xC0) === 0x80) {
24105 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
24106 if (tempCodePoint > 0x7F) {
24107 codePoint = tempCodePoint
24108 }
24109 }
24110 break
24111 case 3:
24112 secondByte = buf[i + 1]
24113 thirdByte = buf[i + 2]
24114 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
24115 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
24116 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
24117 codePoint = tempCodePoint
24118 }
24119 }
24120 break
24121 case 4:
24122 secondByte = buf[i + 1]
24123 thirdByte = buf[i + 2]
24124 fourthByte = buf[i + 3]
24125 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
24126 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
24127 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
24128 codePoint = tempCodePoint
24129 }
24130 }
24131 }
24132 }
3af2954a 24133
8b095871
IC
24134 if (codePoint === null) {
24135 // we did not generate a valid codePoint so insert a
24136 // replacement char (U+FFFD) and advance only 1 byte
24137 codePoint = 0xFFFD
24138 bytesPerSequence = 1
24139 } else if (codePoint > 0xFFFF) {
24140 // encode to utf16 (surrogate pair dance)
24141 codePoint -= 0x10000
24142 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
24143 codePoint = 0xDC00 | codePoint & 0x3FF
24144 }
24145
24146 res.push(codePoint)
24147 i += bytesPerSequence
3af2954a
IC
24148 }
24149
8b095871 24150 return decodeCodePointsArray(res)
ab78acc6 24151}
3af2954a 24152
8b095871
IC
24153// Based on http://stackoverflow.com/a/22747272/680742, the browser with
24154// the lowest limit is Chrome, with 0x10000 args.
24155// We go 1 magnitude less, for safety
24156var MAX_ARGUMENTS_LENGTH = 0x1000
3af2954a 24157
8b095871
IC
24158function decodeCodePointsArray (codePoints) {
24159 var len = codePoints.length
24160 if (len <= MAX_ARGUMENTS_LENGTH) {
24161 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
3af2954a
IC
24162 }
24163
8b095871
IC
24164 // Decode in chunks to avoid "call stack size exceeded".
24165 var res = ''
24166 var i = 0
24167 while (i < len) {
24168 res += String.fromCharCode.apply(
24169 String,
24170 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
24171 )
3af2954a 24172 }
8b095871
IC
24173 return res
24174}
3af2954a 24175
8b095871
IC
24176function asciiSlice (buf, start, end) {
24177 var ret = ''
24178 end = Math.min(buf.length, end)
3af2954a 24179
8b095871
IC
24180 for (var i = start; i < end; ++i) {
24181 ret += String.fromCharCode(buf[i] & 0x7F)
3af2954a 24182 }
8b095871
IC
24183 return ret
24184}
3af2954a 24185
8b095871
IC
24186function latin1Slice (buf, start, end) {
24187 var ret = ''
24188 end = Math.min(buf.length, end)
3af2954a 24189
8b095871
IC
24190 for (var i = start; i < end; ++i) {
24191 ret += String.fromCharCode(buf[i])
3af2954a 24192 }
8b095871 24193 return ret
ab78acc6 24194}
3af2954a 24195
8b095871
IC
24196function hexSlice (buf, start, end) {
24197 var len = buf.length
3af2954a 24198
8b095871
IC
24199 if (!start || start < 0) start = 0
24200 if (!end || end < 0 || end > len) end = len
3af2954a 24201
8b095871
IC
24202 var out = ''
24203 for (var i = start; i < end; ++i) {
24204 out += toHex(buf[i])
3af2954a 24205 }
8b095871
IC
24206 return out
24207}
3af2954a 24208
8b095871
IC
24209function utf16leSlice (buf, start, end) {
24210 var bytes = buf.slice(start, end)
24211 var res = ''
24212 for (var i = 0; i < bytes.length; i += 2) {
24213 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
24214 }
24215 return res
24216}
3af2954a 24217
8b095871
IC
24218Buffer.prototype.slice = function slice (start, end) {
24219 var len = this.length
24220 start = ~~start
24221 end = end === undefined ? len : ~~end
3af2954a 24222
8b095871
IC
24223 if (start < 0) {
24224 start += len
24225 if (start < 0) start = 0
24226 } else if (start > len) {
24227 start = len
24228 }
3af2954a 24229
8b095871
IC
24230 if (end < 0) {
24231 end += len
24232 if (end < 0) end = 0
24233 } else if (end > len) {
24234 end = len
24235 }
3af2954a 24236
8b095871 24237 if (end < start) end = start
3af2954a 24238
8b095871
IC
24239 var newBuf = this.subarray(start, end)
24240 // Return an augmented `Uint8Array` instance
24241 newBuf.__proto__ = Buffer.prototype
24242 return newBuf
24243}
3af2954a 24244
8b095871
IC
24245/*
24246 * Need to make sure that buffer isn't trying to write out of bounds.
ab78acc6 24247 */
8b095871
IC
24248function checkOffset (offset, ext, length) {
24249 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
24250 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
ab78acc6 24251}
3af2954a 24252
8b095871
IC
24253Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
24254 offset = offset >>> 0
24255 byteLength = byteLength >>> 0
24256 if (!noAssert) checkOffset(offset, byteLength, this.length)
24257
24258 var val = this[offset]
24259 var mul = 1
24260 var i = 0
24261 while (++i < byteLength && (mul *= 0x100)) {
24262 val += this[offset + i] * mul
3af2954a
IC
24263 }
24264
8b095871
IC
24265 return val
24266}
3af2954a 24267
8b095871
IC
24268Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
24269 offset = offset >>> 0
24270 byteLength = byteLength >>> 0
24271 if (!noAssert) {
24272 checkOffset(offset, byteLength, this.length)
ab78acc6 24273 }
3af2954a 24274
8b095871
IC
24275 var val = this[offset + --byteLength]
24276 var mul = 1
24277 while (byteLength > 0 && (mul *= 0x100)) {
24278 val += this[offset + --byteLength] * mul
ab78acc6 24279 }
3af2954a 24280
8b095871 24281 return val
ab78acc6 24282}
3af2954a 24283
8b095871
IC
24284Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
24285 offset = offset >>> 0
24286 if (!noAssert) checkOffset(offset, 1, this.length)
24287 return this[offset]
ab78acc6 24288}
3af2954a 24289
8b095871
IC
24290Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
24291 offset = offset >>> 0
24292 if (!noAssert) checkOffset(offset, 2, this.length)
24293 return this[offset] | (this[offset + 1] << 8)
24294}
3af2954a 24295
8b095871
IC
24296Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
24297 offset = offset >>> 0
24298 if (!noAssert) checkOffset(offset, 2, this.length)
24299 return (this[offset] << 8) | this[offset + 1]
24300}
3af2954a 24301
8b095871
IC
24302Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
24303 offset = offset >>> 0
24304 if (!noAssert) checkOffset(offset, 4, this.length)
24305
24306 return ((this[offset]) |
24307 (this[offset + 1] << 8) |
24308 (this[offset + 2] << 16)) +
24309 (this[offset + 3] * 0x1000000)
ab78acc6 24310}
3af2954a 24311
8b095871
IC
24312Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
24313 offset = offset >>> 0
24314 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 24315
8b095871
IC
24316 return (this[offset] * 0x1000000) +
24317 ((this[offset + 1] << 16) |
24318 (this[offset + 2] << 8) |
24319 this[offset + 3])
24320}
3af2954a 24321
8b095871
IC
24322Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
24323 offset = offset >>> 0
24324 byteLength = byteLength >>> 0
24325 if (!noAssert) checkOffset(offset, byteLength, this.length)
3af2954a 24326
8b095871
IC
24327 var val = this[offset]
24328 var mul = 1
24329 var i = 0
24330 while (++i < byteLength && (mul *= 0x100)) {
24331 val += this[offset + i] * mul
3af2954a 24332 }
8b095871 24333 mul *= 0x80
3af2954a 24334
8b095871 24335 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3af2954a 24336
8b095871 24337 return val
ab78acc6 24338}
3af2954a 24339
8b095871
IC
24340Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
24341 offset = offset >>> 0
24342 byteLength = byteLength >>> 0
24343 if (!noAssert) checkOffset(offset, byteLength, this.length)
3af2954a 24344
8b095871
IC
24345 var i = byteLength
24346 var mul = 1
24347 var val = this[offset + --i]
24348 while (i > 0 && (mul *= 0x100)) {
24349 val += this[offset + --i] * mul
3af2954a 24350 }
8b095871 24351 mul *= 0x80
3af2954a 24352
8b095871
IC
24353 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
24354
24355 return val
ab78acc6 24356}
3af2954a 24357
8b095871
IC
24358Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
24359 offset = offset >>> 0
24360 if (!noAssert) checkOffset(offset, 1, this.length)
24361 if (!(this[offset] & 0x80)) return (this[offset])
24362 return ((0xff - this[offset] + 1) * -1)
ab78acc6 24363}
3af2954a 24364
8b095871
IC
24365Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
24366 offset = offset >>> 0
24367 if (!noAssert) checkOffset(offset, 2, this.length)
24368 var val = this[offset] | (this[offset + 1] << 8)
24369 return (val & 0x8000) ? val | 0xFFFF0000 : val
ab78acc6 24370}
3af2954a 24371
8b095871
IC
24372Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
24373 offset = offset >>> 0
24374 if (!noAssert) checkOffset(offset, 2, this.length)
24375 var val = this[offset + 1] | (this[offset] << 8)
24376 return (val & 0x8000) ? val | 0xFFFF0000 : val
24377}
ab78acc6 24378
8b095871
IC
24379Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
24380 offset = offset >>> 0
24381 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 24382
8b095871
IC
24383 return (this[offset]) |
24384 (this[offset + 1] << 8) |
24385 (this[offset + 2] << 16) |
24386 (this[offset + 3] << 24)
ab78acc6 24387}
3af2954a 24388
8b095871
IC
24389Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
24390 offset = offset >>> 0
24391 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 24392
8b095871
IC
24393 return (this[offset] << 24) |
24394 (this[offset + 1] << 16) |
24395 (this[offset + 2] << 8) |
24396 (this[offset + 3])
24397}
3af2954a 24398
8b095871
IC
24399Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
24400 offset = offset >>> 0
24401 if (!noAssert) checkOffset(offset, 4, this.length)
24402 return ieee754.read(this, offset, true, 23, 4)
ab78acc6 24403}
3af2954a 24404
8b095871
IC
24405Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
24406 offset = offset >>> 0
24407 if (!noAssert) checkOffset(offset, 4, this.length)
24408 return ieee754.read(this, offset, false, 23, 4)
ab78acc6 24409}
3af2954a 24410
8b095871
IC
24411Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
24412 offset = offset >>> 0
24413 if (!noAssert) checkOffset(offset, 8, this.length)
24414 return ieee754.read(this, offset, true, 52, 8)
24415}
3af2954a 24416
8b095871
IC
24417Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
24418 offset = offset >>> 0
24419 if (!noAssert) checkOffset(offset, 8, this.length)
24420 return ieee754.read(this, offset, false, 52, 8)
ab78acc6 24421}
3af2954a 24422
8b095871
IC
24423function checkInt (buf, value, offset, ext, max, min) {
24424 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
24425 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
24426 if (offset + ext > buf.length) throw new RangeError('Index out of range')
ab78acc6 24427}
3af2954a 24428
8b095871
IC
24429Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
24430 value = +value
24431 offset = offset >>> 0
24432 byteLength = byteLength >>> 0
24433 if (!noAssert) {
24434 var maxBytes = Math.pow(2, 8 * byteLength) - 1
24435 checkInt(this, value, offset, byteLength, maxBytes, 0)
3af2954a
IC
24436 }
24437
8b095871 24438 var mul = 1
ab78acc6 24439 var i = 0
8b095871
IC
24440 this[offset] = value & 0xFF
24441 while (++i < byteLength && (mul *= 0x100)) {
24442 this[offset + i] = (value / mul) & 0xFF
24443 }
3af2954a 24444
8b095871
IC
24445 return offset + byteLength
24446}
24447
24448Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
24449 value = +value
24450 offset = offset >>> 0
24451 byteLength = byteLength >>> 0
24452 if (!noAssert) {
24453 var maxBytes = Math.pow(2, 8 * byteLength) - 1
24454 checkInt(this, value, offset, byteLength, maxBytes, 0)
ab78acc6 24455 }
3af2954a 24456
8b095871
IC
24457 var i = byteLength - 1
24458 var mul = 1
24459 this[offset + i] = value & 0xFF
24460 while (--i >= 0 && (mul *= 0x100)) {
24461 this[offset + i] = (value / mul) & 0xFF
ab78acc6 24462 }
3af2954a 24463
8b095871
IC
24464 return offset + byteLength
24465}
24466
24467Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
24468 value = +value
24469 offset = offset >>> 0
24470 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
24471 this[offset] = (value & 0xff)
24472 return offset + 1
24473}
24474
24475Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
24476 value = +value
24477 offset = offset >>> 0
24478 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
24479 this[offset] = (value & 0xff)
24480 this[offset + 1] = (value >>> 8)
24481 return offset + 2
24482}
24483
24484Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
24485 value = +value
24486 offset = offset >>> 0
24487 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
24488 this[offset] = (value >>> 8)
24489 this[offset + 1] = (value & 0xff)
24490 return offset + 2
ab78acc6 24491}
3af2954a 24492
8b095871
IC
24493Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
24494 value = +value
24495 offset = offset >>> 0
24496 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
24497 this[offset + 3] = (value >>> 24)
24498 this[offset + 2] = (value >>> 16)
24499 this[offset + 1] = (value >>> 8)
24500 this[offset] = (value & 0xff)
24501 return offset + 4
ab78acc6 24502}
3af2954a 24503
8b095871
IC
24504Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
24505 value = +value
24506 offset = offset >>> 0
24507 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
24508 this[offset] = (value >>> 24)
24509 this[offset + 1] = (value >>> 16)
24510 this[offset + 2] = (value >>> 8)
24511 this[offset + 3] = (value & 0xff)
24512 return offset + 4
24513}
3af2954a 24514
8b095871
IC
24515Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
24516 value = +value
24517 offset = offset >>> 0
24518 if (!noAssert) {
24519 var limit = Math.pow(2, (8 * byteLength) - 1)
24520
24521 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3af2954a
IC
24522 }
24523
8b095871
IC
24524 var i = 0
24525 var mul = 1
24526 var sub = 0
24527 this[offset] = value & 0xFF
24528 while (++i < byteLength && (mul *= 0x100)) {
24529 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
24530 sub = 1
ab78acc6 24531 }
8b095871 24532 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3af2954a
IC
24533 }
24534
8b095871 24535 return offset + byteLength
ab78acc6 24536}
3af2954a 24537
8b095871
IC
24538Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
24539 value = +value
24540 offset = offset >>> 0
24541 if (!noAssert) {
24542 var limit = Math.pow(2, (8 * byteLength) - 1)
ab78acc6 24543
8b095871
IC
24544 checkInt(this, value, offset, byteLength, limit - 1, -limit)
24545 }
ab78acc6 24546
8b095871
IC
24547 var i = byteLength - 1
24548 var mul = 1
24549 var sub = 0
24550 this[offset + i] = value & 0xFF
24551 while (--i >= 0 && (mul *= 0x100)) {
24552 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
24553 sub = 1
3af2954a 24554 }
8b095871 24555 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3af2954a 24556 }
3af2954a 24557
8b095871
IC
24558 return offset + byteLength
24559}
3af2954a 24560
8b095871
IC
24561Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
24562 value = +value
24563 offset = offset >>> 0
24564 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
24565 if (value < 0) value = 0xff + value + 1
24566 this[offset] = (value & 0xff)
24567 return offset + 1
24568}
3af2954a 24569
8b095871
IC
24570Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
24571 value = +value
24572 offset = offset >>> 0
24573 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
24574 this[offset] = (value & 0xff)
24575 this[offset + 1] = (value >>> 8)
24576 return offset + 2
24577}
3af2954a 24578
8b095871
IC
24579Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
24580 value = +value
24581 offset = offset >>> 0
24582 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
24583 this[offset] = (value >>> 8)
24584 this[offset + 1] = (value & 0xff)
24585 return offset + 2
24586}
3af2954a 24587
8b095871
IC
24588Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
24589 value = +value
24590 offset = offset >>> 0
24591 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
24592 this[offset] = (value & 0xff)
24593 this[offset + 1] = (value >>> 8)
24594 this[offset + 2] = (value >>> 16)
24595 this[offset + 3] = (value >>> 24)
24596 return offset + 4
24597}
3af2954a 24598
8b095871
IC
24599Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
24600 value = +value
24601 offset = offset >>> 0
24602 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
24603 if (value < 0) value = 0xffffffff + value + 1
24604 this[offset] = (value >>> 24)
24605 this[offset + 1] = (value >>> 16)
24606 this[offset + 2] = (value >>> 8)
24607 this[offset + 3] = (value & 0xff)
24608 return offset + 4
24609}
3af2954a 24610
8b095871
IC
24611function checkIEEE754 (buf, value, offset, ext, max, min) {
24612 if (offset + ext > buf.length) throw new RangeError('Index out of range')
24613 if (offset < 0) throw new RangeError('Index out of range')
24614}
3af2954a 24615
8b095871
IC
24616function writeFloat (buf, value, offset, littleEndian, noAssert) {
24617 value = +value
24618 offset = offset >>> 0
24619 if (!noAssert) {
24620 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
3af2954a 24621 }
8b095871
IC
24622 ieee754.write(buf, value, offset, littleEndian, 23, 4)
24623 return offset + 4
ab78acc6 24624}
3af2954a 24625
8b095871
IC
24626Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
24627 return writeFloat(this, value, offset, true, noAssert)
ab78acc6 24628}
3af2954a 24629
8b095871
IC
24630Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
24631 return writeFloat(this, value, offset, false, noAssert)
ab78acc6 24632}
3af2954a 24633
8b095871
IC
24634function writeDouble (buf, value, offset, littleEndian, noAssert) {
24635 value = +value
24636 offset = offset >>> 0
24637 if (!noAssert) {
24638 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
3af2954a 24639 }
8b095871
IC
24640 ieee754.write(buf, value, offset, littleEndian, 52, 8)
24641 return offset + 8
ab78acc6 24642}
3af2954a 24643
8b095871
IC
24644Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
24645 return writeDouble(this, value, offset, true, noAssert)
ab78acc6 24646}
3af2954a 24647
8b095871
IC
24648Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
24649 return writeDouble(this, value, offset, false, noAssert)
24650}
3af2954a 24651
8b095871
IC
24652// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
24653Buffer.prototype.copy = function copy (target, targetStart, start, end) {
24654 if (!start) start = 0
24655 if (!end && end !== 0) end = this.length
24656 if (targetStart >= target.length) targetStart = target.length
24657 if (!targetStart) targetStart = 0
24658 if (end > 0 && end < start) end = start
3af2954a 24659
8b095871
IC
24660 // Copy 0 bytes; we're done
24661 if (end === start) return 0
24662 if (target.length === 0 || this.length === 0) return 0
3af2954a 24663
8b095871
IC
24664 // Fatal error conditions
24665 if (targetStart < 0) {
24666 throw new RangeError('targetStart out of bounds')
3af2954a 24667 }
8b095871
IC
24668 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
24669 if (end < 0) throw new RangeError('sourceEnd out of bounds')
24670
24671 // Are we oob?
24672 if (end > this.length) end = this.length
24673 if (target.length - targetStart < end - start) {
24674 end = target.length - targetStart + start
3af2954a 24675 }
8b095871
IC
24676
24677 var len = end - start
24678 var i
24679
24680 if (this === target && start < targetStart && targetStart < end) {
24681 // descending copy from end
24682 for (i = len - 1; i >= 0; --i) {
24683 target[i + targetStart] = this[i + start]
3af2954a 24684 }
8b095871
IC
24685 } else if (len < 1000) {
24686 // ascending copy from start
24687 for (i = 0; i < len; ++i) {
24688 target[i + targetStart] = this[i + start]
24689 }
24690 } else {
24691 Uint8Array.prototype.set.call(
24692 target,
24693 this.subarray(start, start + len),
24694 targetStart
24695 )
3af2954a
IC
24696 }
24697
8b095871
IC
24698 return len
24699}
24700
24701// Usage:
24702// buffer.fill(number[, offset[, end]])
24703// buffer.fill(buffer[, offset[, end]])
24704// buffer.fill(string[, offset[, end]][, encoding])
24705Buffer.prototype.fill = function fill (val, start, end, encoding) {
24706 // Handle string cases:
24707 if (typeof val === 'string') {
24708 if (typeof start === 'string') {
24709 encoding = start
24710 start = 0
24711 end = this.length
24712 } else if (typeof end === 'string') {
24713 encoding = end
24714 end = this.length
24715 }
24716 if (val.length === 1) {
24717 var code = val.charCodeAt(0)
24718 if (code < 256) {
24719 val = code
3af2954a 24720 }
3af2954a 24721 }
8b095871
IC
24722 if (encoding !== undefined && typeof encoding !== 'string') {
24723 throw new TypeError('encoding must be a string')
24724 }
24725 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
24726 throw new TypeError('Unknown encoding: ' + encoding)
24727 }
24728 } else if (typeof val === 'number') {
24729 val = val & 255
ab78acc6 24730 }
3af2954a 24731
8b095871
IC
24732 // Invalid ranges are not set to a default, so can range check early.
24733 if (start < 0 || this.length < start || this.length < end) {
24734 throw new RangeError('Out of range index')
24735 }
3af2954a 24736
8b095871
IC
24737 if (end <= start) {
24738 return this
24739 }
3af2954a 24740
8b095871
IC
24741 start = start >>> 0
24742 end = end === undefined ? this.length : end >>> 0
3af2954a 24743
8b095871
IC
24744 if (!val) val = 0
24745
24746 var i
24747 if (typeof val === 'number') {
24748 for (i = start; i < end; ++i) {
24749 this[i] = val
24750 }
ab78acc6 24751 } else {
8b095871
IC
24752 var bytes = Buffer.isBuffer(val)
24753 ? val
24754 : new Buffer(val, encoding)
24755 var len = bytes.length
24756 for (i = 0; i < end - start; ++i) {
24757 this[i + start] = bytes[i % len]
ab78acc6
IC
24758 }
24759 }
3af2954a 24760
8b095871
IC
24761 return this
24762}
3af2954a 24763
8b095871
IC
24764// HELPER FUNCTIONS
24765// ================
24766
24767var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
24768
24769function base64clean (str) {
24770 // Node strips out invalid characters like \n and \t from the string, base64-js does not
24771 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
24772 // Node converts strings with length < 2 to ''
24773 if (str.length < 2) return ''
24774 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
24775 while (str.length % 4 !== 0) {
24776 str = str + '='
3af2954a 24777 }
8b095871 24778 return str
ab78acc6
IC
24779}
24780
8b095871
IC
24781function stringtrim (str) {
24782 if (str.trim) return str.trim()
24783 return str.replace(/^\s+|\s+$/g, '')
ab78acc6 24784}
3af2954a 24785
8b095871
IC
24786function toHex (n) {
24787 if (n < 16) return '0' + n.toString(16)
24788 return n.toString(16)
ab78acc6 24789}
3af2954a 24790
8b095871
IC
24791function utf8ToBytes (string, units) {
24792 units = units || Infinity
24793 var codePoint
24794 var length = string.length
24795 var leadSurrogate = null
24796 var bytes = []
3af2954a 24797
8b095871
IC
24798 for (var i = 0; i < length; ++i) {
24799 codePoint = string.charCodeAt(i)
3af2954a 24800
8b095871
IC
24801 // is surrogate component
24802 if (codePoint > 0xD7FF && codePoint < 0xE000) {
24803 // last char was a lead
24804 if (!leadSurrogate) {
24805 // no lead yet
24806 if (codePoint > 0xDBFF) {
24807 // unexpected trail
24808 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
24809 continue
24810 } else if (i + 1 === length) {
24811 // unpaired lead
24812 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
24813 continue
24814 }
3af2954a 24815
8b095871
IC
24816 // valid lead
24817 leadSurrogate = codePoint
24818
24819 continue
24820 }
24821
24822 // 2 leads in a row
24823 if (codePoint < 0xDC00) {
24824 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
24825 leadSurrogate = codePoint
24826 continue
24827 }
24828
24829 // valid surrogate pair
24830 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
24831 } else if (leadSurrogate) {
24832 // valid bmp char, but last char was a lead
24833 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
24834 }
24835
24836 leadSurrogate = null
24837
24838 // encode utf8
24839 if (codePoint < 0x80) {
24840 if ((units -= 1) < 0) break
24841 bytes.push(codePoint)
24842 } else if (codePoint < 0x800) {
24843 if ((units -= 2) < 0) break
24844 bytes.push(
24845 codePoint >> 0x6 | 0xC0,
24846 codePoint & 0x3F | 0x80
24847 )
24848 } else if (codePoint < 0x10000) {
24849 if ((units -= 3) < 0) break
24850 bytes.push(
24851 codePoint >> 0xC | 0xE0,
24852 codePoint >> 0x6 & 0x3F | 0x80,
24853 codePoint & 0x3F | 0x80
24854 )
24855 } else if (codePoint < 0x110000) {
24856 if ((units -= 4) < 0) break
24857 bytes.push(
24858 codePoint >> 0x12 | 0xF0,
24859 codePoint >> 0xC & 0x3F | 0x80,
24860 codePoint >> 0x6 & 0x3F | 0x80,
24861 codePoint & 0x3F | 0x80
24862 )
ab78acc6 24863 } else {
8b095871 24864 throw new Error('Invalid code point')
ab78acc6 24865 }
3af2954a
IC
24866 }
24867
8b095871
IC
24868 return bytes
24869}
3af2954a 24870
8b095871
IC
24871function asciiToBytes (str) {
24872 var byteArray = []
24873 for (var i = 0; i < str.length; ++i) {
24874 // Node's code seems to be doing this and not & 0x7F..
24875 byteArray.push(str.charCodeAt(i) & 0xFF)
ab78acc6 24876 }
8b095871
IC
24877 return byteArray
24878}
3af2954a 24879
8b095871
IC
24880function utf16leToBytes (str, units) {
24881 var c, hi, lo
24882 var byteArray = []
24883 for (var i = 0; i < str.length; ++i) {
24884 if ((units -= 2) < 0) break
3af2954a 24885
8b095871
IC
24886 c = str.charCodeAt(i)
24887 hi = c >> 8
24888 lo = c % 256
24889 byteArray.push(lo)
24890 byteArray.push(hi)
24891 }
ebd8d4e8 24892
8b095871
IC
24893 return byteArray
24894}
24895
24896function base64ToBytes (str) {
24897 return base64.toByteArray(base64clean(str))
24898}
24899
24900function blitBuffer (src, dst, offset, length) {
24901 for (var i = 0; i < length; ++i) {
24902 if ((i + offset >= dst.length) || (i >= src.length)) break
24903 dst[i + offset] = src[i]
24904 }
24905 return i
24906}
24907
24908function isnan (val) {
24909 return val !== val // eslint-disable-line no-self-compare
24910}
24911
24912},{"base64-js":2,"ieee754":8}],6:[function(require,module,exports){
24913(function (Buffer){
24914// Copyright Joyent, Inc. and other Node contributors.
24915//
24916// Permission is hereby granted, free of charge, to any person obtaining a
24917// copy of this software and associated documentation files (the
24918// "Software"), to deal in the Software without restriction, including
24919// without limitation the rights to use, copy, modify, merge, publish,
24920// distribute, sublicense, and/or sell copies of the Software, and to permit
24921// persons to whom the Software is furnished to do so, subject to the
24922// following conditions:
24923//
24924// The above copyright notice and this permission notice shall be included
24925// in all copies or substantial portions of the Software.
24926//
24927// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
24928// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24929// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
24930// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
24931// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
24932// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
24933// USE OR OTHER DEALINGS IN THE SOFTWARE.
24934
24935// NOTE: These type checking functions intentionally don't use `instanceof`
24936// because it is fragile and can be easily faked with `Object.create()`.
ebd8d4e8 24937
8b095871
IC
24938function isArray(arg) {
24939 if (Array.isArray) {
24940 return Array.isArray(arg);
24941 }
24942 return objectToString(arg) === '[object Array]';
24943}
24944exports.isArray = isArray;
ebd8d4e8 24945
8b095871
IC
24946function isBoolean(arg) {
24947 return typeof arg === 'boolean';
24948}
24949exports.isBoolean = isBoolean;
ebd8d4e8 24950
8b095871
IC
24951function isNull(arg) {
24952 return arg === null;
24953}
24954exports.isNull = isNull;
ebd8d4e8 24955
8b095871
IC
24956function isNullOrUndefined(arg) {
24957 return arg == null;
24958}
24959exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 24960
8b095871
IC
24961function isNumber(arg) {
24962 return typeof arg === 'number';
ab78acc6 24963}
8b095871 24964exports.isNumber = isNumber;
212b1b46 24965
8b095871
IC
24966function isString(arg) {
24967 return typeof arg === 'string';
ab78acc6 24968}
8b095871 24969exports.isString = isString;
212b1b46 24970
8b095871
IC
24971function isSymbol(arg) {
24972 return typeof arg === 'symbol';
ab78acc6 24973}
8b095871 24974exports.isSymbol = isSymbol;
ab78acc6 24975
8b095871
IC
24976function isUndefined(arg) {
24977 return arg === void 0;
24978}
24979exports.isUndefined = isUndefined;
ab78acc6 24980
8b095871
IC
24981function isRegExp(re) {
24982 return objectToString(re) === '[object RegExp]';
24983}
24984exports.isRegExp = isRegExp;
ab78acc6 24985
8b095871
IC
24986function isObject(arg) {
24987 return typeof arg === 'object' && arg !== null;
24988}
24989exports.isObject = isObject;
212b1b46 24990
8b095871
IC
24991function isDate(d) {
24992 return objectToString(d) === '[object Date]';
24993}
24994exports.isDate = isDate;
212b1b46 24995
8b095871
IC
24996function isError(e) {
24997 return (objectToString(e) === '[object Error]' || e instanceof Error);
24998}
24999exports.isError = isError;
212b1b46 25000
8b095871
IC
25001function isFunction(arg) {
25002 return typeof arg === 'function';
25003}
25004exports.isFunction = isFunction;
212b1b46 25005
8b095871
IC
25006function isPrimitive(arg) {
25007 return arg === null ||
25008 typeof arg === 'boolean' ||
25009 typeof arg === 'number' ||
25010 typeof arg === 'string' ||
25011 typeof arg === 'symbol' || // ES6 symbol
25012 typeof arg === 'undefined';
ab78acc6 25013}
8b095871 25014exports.isPrimitive = isPrimitive;
212b1b46 25015
8b095871 25016exports.isBuffer = Buffer.isBuffer;
ab78acc6 25017
8b095871
IC
25018function objectToString(o) {
25019 return Object.prototype.toString.call(o);
ab78acc6 25020}
212b1b46 25021
8b095871
IC
25022}).call(this,{"isBuffer":require("../../is-buffer/index.js")})
25023},{"../../is-buffer/index.js":10}],7:[function(require,module,exports){
25024// Copyright Joyent, Inc. and other Node contributors.
25025//
25026// Permission is hereby granted, free of charge, to any person obtaining a
25027// copy of this software and associated documentation files (the
25028// "Software"), to deal in the Software without restriction, including
25029// without limitation the rights to use, copy, modify, merge, publish,
25030// distribute, sublicense, and/or sell copies of the Software, and to permit
25031// persons to whom the Software is furnished to do so, subject to the
25032// following conditions:
25033//
25034// The above copyright notice and this permission notice shall be included
25035// in all copies or substantial portions of the Software.
25036//
25037// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
25038// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25039// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
25040// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
25041// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
25042// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
25043// USE OR OTHER DEALINGS IN THE SOFTWARE.
212b1b46 25044
8b095871
IC
25045function EventEmitter() {
25046 this._events = this._events || {};
25047 this._maxListeners = this._maxListeners || undefined;
ab78acc6 25048}
8b095871 25049module.exports = EventEmitter;
212b1b46 25050
8b095871
IC
25051// Backwards-compat with node 0.10.x
25052EventEmitter.EventEmitter = EventEmitter;
212b1b46 25053
8b095871
IC
25054EventEmitter.prototype._events = undefined;
25055EventEmitter.prototype._maxListeners = undefined;
212b1b46 25056
8b095871
IC
25057// By default EventEmitters will print a warning if more than 10 listeners are
25058// added to it. This is a useful default which helps finding memory leaks.
25059EventEmitter.defaultMaxListeners = 10;
212b1b46 25060
8b095871
IC
25061// Obviously not all Emitters should be limited to 10. This function allows
25062// that to be increased. Set to zero for unlimited.
25063EventEmitter.prototype.setMaxListeners = function(n) {
25064 if (!isNumber(n) || n < 0 || isNaN(n))
25065 throw TypeError('n must be a positive number');
25066 this._maxListeners = n;
25067 return this;
25068};
212b1b46 25069
8b095871
IC
25070EventEmitter.prototype.emit = function(type) {
25071 var er, handler, len, args, i, listeners;
212b1b46 25072
8b095871
IC
25073 if (!this._events)
25074 this._events = {};
212b1b46 25075
8b095871
IC
25076 // If there is no 'error' event listener then throw.
25077 if (type === 'error') {
25078 if (!this._events.error ||
25079 (isObject(this._events.error) && !this._events.error.length)) {
25080 er = arguments[1];
25081 if (er instanceof Error) {
25082 throw er; // Unhandled 'error' event
25083 } else {
25084 // At least give some kind of context to the user
25085 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
25086 err.context = er;
25087 throw err;
25088 }
25089 }
ab78acc6 25090 }
212b1b46 25091
8b095871 25092 handler = this._events[type];
212b1b46 25093
8b095871
IC
25094 if (isUndefined(handler))
25095 return false;
25096
25097 if (isFunction(handler)) {
25098 switch (arguments.length) {
25099 // fast cases
25100 case 1:
25101 handler.call(this);
25102 break;
25103 case 2:
25104 handler.call(this, arguments[1]);
25105 break;
25106 case 3:
25107 handler.call(this, arguments[1], arguments[2]);
25108 break;
25109 // slower
25110 default:
25111 args = Array.prototype.slice.call(arguments, 1);
25112 handler.apply(this, args);
3af2954a 25113 }
8b095871
IC
25114 } else if (isObject(handler)) {
25115 args = Array.prototype.slice.call(arguments, 1);
25116 listeners = handler.slice();
25117 len = listeners.length;
25118 for (i = 0; i < len; i++)
25119 listeners[i].apply(this, args);
3af2954a 25120 }
212b1b46 25121
8b095871
IC
25122 return true;
25123};
ebd8d4e8 25124
8b095871
IC
25125EventEmitter.prototype.addListener = function(type, listener) {
25126 var m;
ebd8d4e8 25127
8b095871
IC
25128 if (!isFunction(listener))
25129 throw TypeError('listener must be a function');
ebd8d4e8 25130
8b095871
IC
25131 if (!this._events)
25132 this._events = {};
3af2954a 25133
8b095871
IC
25134 // To avoid recursion in the case that type === "newListener"! Before
25135 // adding it to the listeners, first emit "newListener".
25136 if (this._events.newListener)
25137 this.emit('newListener', type,
25138 isFunction(listener.listener) ?
25139 listener.listener : listener);
3af2954a 25140
8b095871
IC
25141 if (!this._events[type])
25142 // Optimize the case of one listener. Don't need the extra array object.
25143 this._events[type] = listener;
25144 else if (isObject(this._events[type]))
25145 // If we've already got an array, just append.
25146 this._events[type].push(listener);
25147 else
25148 // Adding the second element, need to change to array.
25149 this._events[type] = [this._events[type], listener];
3af2954a 25150
8b095871
IC
25151 // Check for listener leak
25152 if (isObject(this._events[type]) && !this._events[type].warned) {
25153 if (!isUndefined(this._maxListeners)) {
25154 m = this._maxListeners;
25155 } else {
25156 m = EventEmitter.defaultMaxListeners;
25157 }
3af2954a 25158
8b095871
IC
25159 if (m && m > 0 && this._events[type].length > m) {
25160 this._events[type].warned = true;
25161 console.error('(node) warning: possible EventEmitter memory ' +
25162 'leak detected. %d listeners added. ' +
25163 'Use emitter.setMaxListeners() to increase limit.',
25164 this._events[type].length);
25165 if (typeof console.trace === 'function') {
25166 // not supported in IE 10
25167 console.trace();
25168 }
25169 }
3af2954a
IC
25170 }
25171
8b095871
IC
25172 return this;
25173};
3af2954a 25174
8b095871 25175EventEmitter.prototype.on = EventEmitter.prototype.addListener;
3af2954a 25176
8b095871
IC
25177EventEmitter.prototype.once = function(type, listener) {
25178 if (!isFunction(listener))
25179 throw TypeError('listener must be a function');
3af2954a 25180
8b095871 25181 var fired = false;
ebd8d4e8 25182
8b095871
IC
25183 function g() {
25184 this.removeListener(type, g);
3af2954a 25185
8b095871
IC
25186 if (!fired) {
25187 fired = true;
25188 listener.apply(this, arguments);
25189 }
25190 }
3af2954a 25191
8b095871
IC
25192 g.listener = listener;
25193 this.on(type, g);
ebd8d4e8 25194
8b095871
IC
25195 return this;
25196};
ebd8d4e8 25197
8b095871
IC
25198// emits a 'removeListener' event iff the listener was removed
25199EventEmitter.prototype.removeListener = function(type, listener) {
25200 var list, position, length, i;
ebd8d4e8 25201
8b095871
IC
25202 if (!isFunction(listener))
25203 throw TypeError('listener must be a function');
ebd8d4e8 25204
8b095871
IC
25205 if (!this._events || !this._events[type])
25206 return this;
ab78acc6 25207
8b095871
IC
25208 list = this._events[type];
25209 length = list.length;
25210 position = -1;
ebd8d4e8 25211
8b095871
IC
25212 if (list === listener ||
25213 (isFunction(list.listener) && list.listener === listener)) {
25214 delete this._events[type];
25215 if (this._events.removeListener)
25216 this.emit('removeListener', type, listener);
ebd8d4e8 25217
8b095871
IC
25218 } else if (isObject(list)) {
25219 for (i = length; i-- > 0;) {
25220 if (list[i] === listener ||
25221 (list[i].listener && list[i].listener === listener)) {
25222 position = i;
25223 break;
25224 }
25225 }
25226
25227 if (position < 0)
25228 return this;
25229
25230 if (list.length === 1) {
25231 list.length = 0;
25232 delete this._events[type];
25233 } else {
25234 list.splice(position, 1);
25235 }
25236
25237 if (this._events.removeListener)
25238 this.emit('removeListener', type, listener);
ab78acc6 25239 }
ebd8d4e8 25240
8b095871
IC
25241 return this;
25242};
ebd8d4e8 25243
8b095871
IC
25244EventEmitter.prototype.removeAllListeners = function(type) {
25245 var key, listeners;
ebd8d4e8 25246
8b095871
IC
25247 if (!this._events)
25248 return this;
ab78acc6 25249
8b095871
IC
25250 // not listening for removeListener, no need to emit
25251 if (!this._events.removeListener) {
25252 if (arguments.length === 0)
25253 this._events = {};
25254 else if (this._events[type])
25255 delete this._events[type];
25256 return this;
25257 }
ab78acc6 25258
8b095871
IC
25259 // emit removeListener for all listeners on all events
25260 if (arguments.length === 0) {
25261 for (key in this._events) {
25262 if (key === 'removeListener') continue;
25263 this.removeAllListeners(key);
25264 }
25265 this.removeAllListeners('removeListener');
25266 this._events = {};
25267 return this;
25268 }
ebd8d4e8 25269
8b095871 25270 listeners = this._events[type];
ebd8d4e8 25271
8b095871
IC
25272 if (isFunction(listeners)) {
25273 this.removeListener(type, listeners);
25274 } else if (listeners) {
25275 // LIFO order
25276 while (listeners.length)
25277 this.removeListener(type, listeners[listeners.length - 1]);
25278 }
25279 delete this._events[type];
ebd8d4e8 25280
8b095871
IC
25281 return this;
25282};
ebd8d4e8 25283
8b095871
IC
25284EventEmitter.prototype.listeners = function(type) {
25285 var ret;
25286 if (!this._events || !this._events[type])
25287 ret = [];
25288 else if (isFunction(this._events[type]))
25289 ret = [this._events[type]];
25290 else
25291 ret = this._events[type].slice();
25292 return ret;
25293};
ebd8d4e8 25294
8b095871
IC
25295EventEmitter.prototype.listenerCount = function(type) {
25296 if (this._events) {
25297 var evlistener = this._events[type];
ebd8d4e8 25298
8b095871
IC
25299 if (isFunction(evlistener))
25300 return 1;
25301 else if (evlistener)
25302 return evlistener.length;
25303 }
25304 return 0;
25305};
25306
25307EventEmitter.listenerCount = function(emitter, type) {
25308 return emitter.listenerCount(type);
25309};
25310
25311function isFunction(arg) {
25312 return typeof arg === 'function';
ebd8d4e8
IC
25313}
25314
8b095871
IC
25315function isNumber(arg) {
25316 return typeof arg === 'number';
ebd8d4e8
IC
25317}
25318
8b095871
IC
25319function isObject(arg) {
25320 return typeof arg === 'object' && arg !== null;
ebd8d4e8
IC
25321}
25322
8b095871
IC
25323function isUndefined(arg) {
25324 return arg === void 0;
ebd8d4e8
IC
25325}
25326
8b095871
IC
25327},{}],8:[function(require,module,exports){
25328exports.read = function (buffer, offset, isLE, mLen, nBytes) {
25329 var e, m
25330 var eLen = nBytes * 8 - mLen - 1
25331 var eMax = (1 << eLen) - 1
25332 var eBias = eMax >> 1
25333 var nBits = -7
25334 var i = isLE ? (nBytes - 1) : 0
25335 var d = isLE ? -1 : 1
25336 var s = buffer[offset + i]
ebd8d4e8 25337
8b095871 25338 i += d
ebd8d4e8 25339
8b095871
IC
25340 e = s & ((1 << (-nBits)) - 1)
25341 s >>= (-nBits)
25342 nBits += eLen
25343 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
ebd8d4e8 25344
8b095871
IC
25345 m = e & ((1 << (-nBits)) - 1)
25346 e >>= (-nBits)
25347 nBits += mLen
25348 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
ebd8d4e8 25349
8b095871
IC
25350 if (e === 0) {
25351 e = 1 - eBias
25352 } else if (e === eMax) {
25353 return m ? NaN : ((s ? -1 : 1) * Infinity)
25354 } else {
25355 m = m + Math.pow(2, mLen)
25356 e = e - eBias
ab78acc6 25357 }
8b095871 25358 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
ebd8d4e8
IC
25359}
25360
8b095871
IC
25361exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
25362 var e, m, c
25363 var eLen = nBytes * 8 - mLen - 1
25364 var eMax = (1 << eLen) - 1
25365 var eBias = eMax >> 1
25366 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
25367 var i = isLE ? 0 : (nBytes - 1)
25368 var d = isLE ? 1 : -1
25369 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
ebd8d4e8 25370
8b095871 25371 value = Math.abs(value)
ebd8d4e8 25372
8b095871
IC
25373 if (isNaN(value) || value === Infinity) {
25374 m = isNaN(value) ? 1 : 0
25375 e = eMax
ab78acc6 25376 } else {
8b095871
IC
25377 e = Math.floor(Math.log(value) / Math.LN2)
25378 if (value * (c = Math.pow(2, -e)) < 1) {
25379 e--
25380 c *= 2
25381 }
25382 if (e + eBias >= 1) {
25383 value += rt / c
25384 } else {
25385 value += rt * Math.pow(2, 1 - eBias)
25386 }
25387 if (value * c >= 2) {
25388 e++
25389 c /= 2
25390 }
ebd8d4e8 25391
8b095871
IC
25392 if (e + eBias >= eMax) {
25393 m = 0
25394 e = eMax
25395 } else if (e + eBias >= 1) {
25396 m = (value * c - 1) * Math.pow(2, mLen)
25397 e = e + eBias
25398 } else {
25399 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
25400 e = 0
25401 }
ebd8d4e8 25402 }
ebd8d4e8 25403
8b095871 25404 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
ebd8d4e8 25405
8b095871
IC
25406 e = (e << mLen) | m
25407 eLen += mLen
25408 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
ebd8d4e8 25409
8b095871 25410 buffer[offset + i - d] |= s * 128
ab78acc6
IC
25411}
25412
8b095871
IC
25413},{}],9:[function(require,module,exports){
25414if (typeof Object.create === 'function') {
25415 // implementation from standard node.js 'util' module
25416 module.exports = function inherits(ctor, superCtor) {
25417 ctor.super_ = superCtor
25418 ctor.prototype = Object.create(superCtor.prototype, {
25419 constructor: {
25420 value: ctor,
25421 enumerable: false,
25422 writable: true,
25423 configurable: true
25424 }
25425 });
25426 };
25427} else {
25428 // old school shim for old browsers
25429 module.exports = function inherits(ctor, superCtor) {
25430 ctor.super_ = superCtor
25431 var TempCtor = function () {}
25432 TempCtor.prototype = superCtor.prototype
25433 ctor.prototype = new TempCtor()
25434 ctor.prototype.constructor = ctor
ebd8d4e8 25435 }
8b095871 25436}
ab78acc6 25437
8b095871
IC
25438},{}],10:[function(require,module,exports){
25439/*!
25440 * Determine if an object is a Buffer
25441 *
25442 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
25443 * @license MIT
25444 */
ebd8d4e8 25445
8b095871
IC
25446// The _isBuffer check is for Safari 5-7 support, because it's missing
25447// Object.prototype.constructor. Remove this eventually
25448module.exports = function (obj) {
25449 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
ebd8d4e8
IC
25450}
25451
8b095871
IC
25452function isBuffer (obj) {
25453 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
25454}
ebd8d4e8 25455
8b095871
IC
25456// For Node v0.10 support. Remove this eventually.
25457function isSlowBuffer (obj) {
25458 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
25459}
ebd8d4e8 25460
8b095871
IC
25461},{}],11:[function(require,module,exports){
25462var toString = {}.toString;
ab78acc6 25463
8b095871
IC
25464module.exports = Array.isArray || function (arr) {
25465 return toString.call(arr) == '[object Array]';
25466};
ebd8d4e8 25467
8b095871
IC
25468},{}],12:[function(require,module,exports){
25469(function (process){
25470'use strict';
ebd8d4e8 25471
8b095871
IC
25472if (!process.version ||
25473 process.version.indexOf('v0.') === 0 ||
25474 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
25475 module.exports = nextTick;
25476} else {
25477 module.exports = process.nextTick;
25478}
25479
25480function nextTick(fn, arg1, arg2, arg3) {
25481 if (typeof fn !== 'function') {
25482 throw new TypeError('"callback" argument must be a function');
25483 }
25484 var len = arguments.length;
25485 var args, i;
25486 switch (len) {
25487 case 0:
25488 case 1:
25489 return process.nextTick(fn);
25490 case 2:
25491 return process.nextTick(function afterTickOne() {
25492 fn.call(null, arg1);
25493 });
25494 case 3:
25495 return process.nextTick(function afterTickTwo() {
25496 fn.call(null, arg1, arg2);
25497 });
25498 case 4:
25499 return process.nextTick(function afterTickThree() {
25500 fn.call(null, arg1, arg2, arg3);
25501 });
25502 default:
25503 args = new Array(len - 1);
25504 i = 0;
25505 while (i < args.length) {
25506 args[i++] = arguments[i];
25507 }
25508 return process.nextTick(function afterTick() {
25509 fn.apply(null, args);
25510 });
ab78acc6 25511 }
ebd8d4e8
IC
25512}
25513
8b095871
IC
25514}).call(this,require('_process'))
25515},{"_process":13}],13:[function(require,module,exports){
25516// shim for using process in browser
25517var process = module.exports = {};
ebd8d4e8 25518
8b095871
IC
25519// cached from whatever global is present so that test runners that stub it
25520// don't break things. But we need to wrap it in a try catch in case it is
25521// wrapped in strict mode code which doesn't define any globals. It's inside a
25522// function because try/catches deoptimize in certain engines.
ab78acc6 25523
8b095871
IC
25524var cachedSetTimeout;
25525var cachedClearTimeout;
ebd8d4e8 25526
8b095871
IC
25527function defaultSetTimout() {
25528 throw new Error('setTimeout has not been defined');
ab78acc6 25529}
8b095871
IC
25530function defaultClearTimeout () {
25531 throw new Error('clearTimeout has not been defined');
ab78acc6 25532}
8b095871
IC
25533(function () {
25534 try {
25535 if (typeof setTimeout === 'function') {
25536 cachedSetTimeout = setTimeout;
25537 } else {
25538 cachedSetTimeout = defaultSetTimout;
25539 }
25540 } catch (e) {
25541 cachedSetTimeout = defaultSetTimout;
25542 }
25543 try {
25544 if (typeof clearTimeout === 'function') {
25545 cachedClearTimeout = clearTimeout;
25546 } else {
25547 cachedClearTimeout = defaultClearTimeout;
25548 }
25549 } catch (e) {
25550 cachedClearTimeout = defaultClearTimeout;
25551 }
25552} ())
25553function runTimeout(fun) {
25554 if (cachedSetTimeout === setTimeout) {
25555 //normal enviroments in sane situations
25556 return setTimeout(fun, 0);
25557 }
25558 // if setTimeout wasn't available but was latter defined
25559 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
25560 cachedSetTimeout = setTimeout;
25561 return setTimeout(fun, 0);
25562 }
25563 try {
25564 // when when somebody has screwed with setTimeout but no I.E. maddness
25565 return cachedSetTimeout(fun, 0);
25566 } catch(e){
25567 try {
25568 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
25569 return cachedSetTimeout.call(null, fun, 0);
25570 } catch(e){
25571 // 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
25572 return cachedSetTimeout.call(this, fun, 0);
25573 }
25574 }
25575
ebd8d4e8 25576
ab78acc6 25577}
8b095871
IC
25578function runClearTimeout(marker) {
25579 if (cachedClearTimeout === clearTimeout) {
25580 //normal enviroments in sane situations
25581 return clearTimeout(marker);
25582 }
25583 // if clearTimeout wasn't available but was latter defined
25584 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
25585 cachedClearTimeout = clearTimeout;
25586 return clearTimeout(marker);
25587 }
25588 try {
25589 // when when somebody has screwed with setTimeout but no I.E. maddness
25590 return cachedClearTimeout(marker);
25591 } catch (e){
25592 try {
25593 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
25594 return cachedClearTimeout.call(null, marker);
25595 } catch (e){
25596 // 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.
25597 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
25598 return cachedClearTimeout.call(this, marker);
25599 }
25600 }
25601
25602
ebd8d4e8 25603
ab78acc6 25604}
8b095871
IC
25605var queue = [];
25606var draining = false;
25607var currentQueue;
25608var queueIndex = -1;
ebd8d4e8 25609
8b095871
IC
25610function cleanUpNextTick() {
25611 if (!draining || !currentQueue) {
25612 return;
25613 }
25614 draining = false;
25615 if (currentQueue.length) {
25616 queue = currentQueue.concat(queue);
25617 } else {
25618 queueIndex = -1;
25619 }
25620 if (queue.length) {
25621 drainQueue();
25622 }
ebd8d4e8
IC
25623}
25624
8b095871
IC
25625function drainQueue() {
25626 if (draining) {
25627 return;
25628 }
25629 var timeout = runTimeout(cleanUpNextTick);
25630 draining = true;
25631
25632 var len = queue.length;
25633 while(len) {
25634 currentQueue = queue;
25635 queue = [];
25636 while (++queueIndex < len) {
25637 if (currentQueue) {
25638 currentQueue[queueIndex].run();
25639 }
25640 }
25641 queueIndex = -1;
25642 len = queue.length;
25643 }
25644 currentQueue = null;
25645 draining = false;
25646 runClearTimeout(timeout);
ebd8d4e8
IC
25647}
25648
8b095871
IC
25649process.nextTick = function (fun) {
25650 var args = new Array(arguments.length - 1);
25651 if (arguments.length > 1) {
25652 for (var i = 1; i < arguments.length; i++) {
25653 args[i - 1] = arguments[i];
25654 }
25655 }
25656 queue.push(new Item(fun, args));
25657 if (queue.length === 1 && !draining) {
25658 runTimeout(drainQueue);
25659 }
25660};
25661
25662// v8 likes predictible objects
25663function Item(fun, array) {
25664 this.fun = fun;
25665 this.array = array;
ab78acc6 25666}
8b095871
IC
25667Item.prototype.run = function () {
25668 this.fun.apply(null, this.array);
25669};
25670process.title = 'browser';
25671process.browser = true;
25672process.env = {};
25673process.argv = [];
25674process.version = ''; // empty string to avoid regexp issues
25675process.versions = {};
ebd8d4e8 25676
8b095871
IC
25677function noop() {}
25678
25679process.on = noop;
25680process.addListener = noop;
25681process.once = noop;
25682process.off = noop;
25683process.removeListener = noop;
25684process.removeAllListeners = noop;
25685process.emit = noop;
25686
25687process.binding = function (name) {
25688 throw new Error('process.binding is not supported');
25689};
25690
25691process.cwd = function () { return '/' };
25692process.chdir = function (dir) {
25693 throw new Error('process.chdir is not supported');
25694};
25695process.umask = function() { return 0; };
25696
25697},{}],14:[function(require,module,exports){
25698module.exports = require("./lib/_stream_duplex.js")
25699
25700},{"./lib/_stream_duplex.js":15}],15:[function(require,module,exports){
25701// a duplex stream is just a stream that is both readable and writable.
25702// Since JS doesn't have multiple prototypal inheritance, this class
25703// prototypally inherits from Readable, and then parasitically from
25704// Writable.
25705
25706'use strict';
25707
25708/*<replacement>*/
ab78acc6 25709
8b095871
IC
25710var objectKeys = Object.keys || function (obj) {
25711 var keys = [];
25712 for (var key in obj) {
25713 keys.push(key);
25714 }return keys;
25715};
25716/*</replacement>*/
ebd8d4e8 25717
8b095871 25718module.exports = Duplex;
ebd8d4e8 25719
8b095871
IC
25720/*<replacement>*/
25721var processNextTick = require('process-nextick-args');
25722/*</replacement>*/
ebd8d4e8 25723
8b095871
IC
25724/*<replacement>*/
25725var util = require('core-util-is');
25726util.inherits = require('inherits');
25727/*</replacement>*/
ebd8d4e8 25728
8b095871
IC
25729var Readable = require('./_stream_readable');
25730var Writable = require('./_stream_writable');
ebd8d4e8 25731
8b095871
IC
25732util.inherits(Duplex, Readable);
25733
25734var keys = objectKeys(Writable.prototype);
25735for (var v = 0; v < keys.length; v++) {
25736 var method = keys[v];
25737 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
ab78acc6 25738}
ebd8d4e8 25739
8b095871
IC
25740function Duplex(options) {
25741 if (!(this instanceof Duplex)) return new Duplex(options);
ebd8d4e8 25742
8b095871
IC
25743 Readable.call(this, options);
25744 Writable.call(this, options);
ebd8d4e8 25745
8b095871 25746 if (options && options.readable === false) this.readable = false;
ebd8d4e8 25747
8b095871 25748 if (options && options.writable === false) this.writable = false;
ebd8d4e8 25749
8b095871
IC
25750 this.allowHalfOpen = true;
25751 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
ebd8d4e8 25752
8b095871 25753 this.once('end', onend);
ebd8d4e8
IC
25754}
25755
8b095871
IC
25756// the no-half-open enforcer
25757function onend() {
25758 // if we allow half-open state, or if the writable side ended,
25759 // then we're ok.
25760 if (this.allowHalfOpen || this._writableState.ended) return;
25761
25762 // no more data can be written.
25763 // But allow more writes to happen in this tick.
25764 processNextTick(onEndNT, this);
ebd8d4e8
IC
25765}
25766
8b095871
IC
25767function onEndNT(self) {
25768 self.end();
25769}
ebd8d4e8 25770
8b095871
IC
25771function forEach(xs, f) {
25772 for (var i = 0, l = xs.length; i < l; i++) {
25773 f(xs[i], i);
25774 }
25775}
25776},{"./_stream_readable":17,"./_stream_writable":19,"core-util-is":6,"inherits":9,"process-nextick-args":12}],16:[function(require,module,exports){
25777// a passthrough stream.
25778// basically just the most minimal sort of Transform stream.
25779// Every written chunk gets output as-is.
ebd8d4e8 25780
8b095871 25781'use strict';
ebd8d4e8 25782
8b095871 25783module.exports = PassThrough;
ebd8d4e8 25784
8b095871 25785var Transform = require('./_stream_transform');
ebd8d4e8 25786
8b095871
IC
25787/*<replacement>*/
25788var util = require('core-util-is');
25789util.inherits = require('inherits');
25790/*</replacement>*/
ebd8d4e8 25791
8b095871 25792util.inherits(PassThrough, Transform);
ebd8d4e8 25793
8b095871
IC
25794function PassThrough(options) {
25795 if (!(this instanceof PassThrough)) return new PassThrough(options);
ebd8d4e8 25796
8b095871 25797 Transform.call(this, options);
ebd8d4e8
IC
25798}
25799
8b095871
IC
25800PassThrough.prototype._transform = function (chunk, encoding, cb) {
25801 cb(null, chunk);
25802};
25803},{"./_stream_transform":18,"core-util-is":6,"inherits":9}],17:[function(require,module,exports){
25804(function (process){
25805'use strict';
ebd8d4e8 25806
8b095871 25807module.exports = Readable;
ebd8d4e8 25808
8b095871
IC
25809/*<replacement>*/
25810var processNextTick = require('process-nextick-args');
25811/*</replacement>*/
ebd8d4e8 25812
8b095871
IC
25813/*<replacement>*/
25814var isArray = require('isarray');
25815/*</replacement>*/
ebd8d4e8 25816
8b095871
IC
25817/*<replacement>*/
25818var Duplex;
25819/*</replacement>*/
ebd8d4e8 25820
8b095871 25821Readable.ReadableState = ReadableState;
ebd8d4e8 25822
8b095871
IC
25823/*<replacement>*/
25824var EE = require('events').EventEmitter;
ebd8d4e8 25825
8b095871
IC
25826var EElistenerCount = function (emitter, type) {
25827 return emitter.listeners(type).length;
25828};
25829/*</replacement>*/
ebd8d4e8 25830
8b095871
IC
25831/*<replacement>*/
25832var Stream;
25833(function () {
25834 try {
25835 Stream = require('st' + 'ream');
25836 } catch (_) {} finally {
25837 if (!Stream) Stream = require('events').EventEmitter;
25838 }
25839})();
25840/*</replacement>*/
ebd8d4e8 25841
8b095871
IC
25842var Buffer = require('buffer').Buffer;
25843/*<replacement>*/
25844var bufferShim = require('buffer-shims');
25845/*</replacement>*/
ab78acc6 25846
8b095871
IC
25847/*<replacement>*/
25848var util = require('core-util-is');
25849util.inherits = require('inherits');
25850/*</replacement>*/
ab78acc6 25851
8b095871
IC
25852/*<replacement>*/
25853var debugUtil = require('util');
25854var debug = void 0;
25855if (debugUtil && debugUtil.debuglog) {
25856 debug = debugUtil.debuglog('stream');
25857} else {
25858 debug = function () {};
25859}
25860/*</replacement>*/
ab78acc6 25861
8b095871
IC
25862var BufferList = require('./internal/streams/BufferList');
25863var StringDecoder;
ab78acc6 25864
8b095871 25865util.inherits(Readable, Stream);
ab78acc6 25866
8b095871
IC
25867function prependListener(emitter, event, fn) {
25868 // Sadly this is not cacheable as some libraries bundle their own
25869 // event emitter implementation with them.
25870 if (typeof emitter.prependListener === 'function') {
25871 return emitter.prependListener(event, fn);
25872 } else {
25873 // This is a hack to make sure that our error handler is attached before any
25874 // userland ones. NEVER DO THIS. This is here only because this code needs
25875 // to continue to work with older versions of Node.js that do not include
25876 // the prependListener() method. The goal is to eventually remove this hack.
25877 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 25878 }
ebd8d4e8
IC
25879}
25880
8b095871
IC
25881function ReadableState(options, stream) {
25882 Duplex = Duplex || require('./_stream_duplex');
ebd8d4e8 25883
8b095871 25884 options = options || {};
ebd8d4e8 25885
8b095871
IC
25886 // object stream flag. Used to make read(n) ignore n and to
25887 // make all the buffer merging and length checks go away
25888 this.objectMode = !!options.objectMode;
ebd8d4e8 25889
8b095871 25890 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
ebd8d4e8 25891
8b095871
IC
25892 // the point at which it stops calling _read() to fill the buffer
25893 // Note: 0 is a valid value, means "don't call _read preemptively ever"
25894 var hwm = options.highWaterMark;
25895 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
25896 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
ab78acc6 25897
8b095871
IC
25898 // cast to ints.
25899 this.highWaterMark = ~ ~this.highWaterMark;
ab78acc6 25900
8b095871
IC
25901 // A linked list is used to store data chunks instead of an array because the
25902 // linked list can remove elements from the beginning faster than
25903 // array.shift()
25904 this.buffer = new BufferList();
25905 this.length = 0;
25906 this.pipes = null;
25907 this.pipesCount = 0;
25908 this.flowing = null;
25909 this.ended = false;
25910 this.endEmitted = false;
25911 this.reading = false;
ab78acc6 25912
8b095871
IC
25913 // a flag to be able to tell if the onwrite cb is called immediately,
25914 // or on a later tick. We set this to true at first, because any
25915 // actions that shouldn't happen until "later" should generally also
25916 // not happen before the first write call.
25917 this.sync = true;
ebd8d4e8 25918
8b095871
IC
25919 // whenever we return null, then we set a flag to say
25920 // that we're awaiting a 'readable' event emission.
25921 this.needReadable = false;
25922 this.emittedReadable = false;
25923 this.readableListening = false;
25924 this.resumeScheduled = false;
ebd8d4e8 25925
8b095871
IC
25926 // Crypto is kind of old and crusty. Historically, its default string
25927 // encoding is 'binary' so we have to make this configurable.
25928 // Everything else in the universe uses 'utf8', though.
25929 this.defaultEncoding = options.defaultEncoding || 'utf8';
ebd8d4e8 25930
8b095871
IC
25931 // when piping, we only care about 'readable' events that happen
25932 // after read()ing all the bytes and not getting any pushback.
25933 this.ranOut = false;
ebd8d4e8 25934
8b095871
IC
25935 // the number of writers that are awaiting a drain event in .pipe()s
25936 this.awaitDrain = 0;
ebd8d4e8 25937
8b095871
IC
25938 // if true, a maybeReadMore has been scheduled
25939 this.readingMore = false;
ebd8d4e8 25940
8b095871
IC
25941 this.decoder = null;
25942 this.encoding = null;
25943 if (options.encoding) {
25944 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
25945 this.decoder = new StringDecoder(options.encoding);
25946 this.encoding = options.encoding;
25947 }
25948}
ebd8d4e8 25949
8b095871
IC
25950function Readable(options) {
25951 Duplex = Duplex || require('./_stream_duplex');
ebd8d4e8 25952
8b095871 25953 if (!(this instanceof Readable)) return new Readable(options);
ebd8d4e8 25954
8b095871 25955 this._readableState = new ReadableState(options, this);
ebd8d4e8 25956
8b095871
IC
25957 // legacy
25958 this.readable = true;
ebd8d4e8 25959
8b095871 25960 if (options && typeof options.read === 'function') this._read = options.read;
ebd8d4e8 25961
8b095871
IC
25962 Stream.call(this);
25963}
ebd8d4e8 25964
8b095871
IC
25965// Manually shove something into the read() buffer.
25966// This returns true if the highWaterMark has not been hit yet,
25967// similar to how Writable.write() returns true if you should
25968// write() some more.
25969Readable.prototype.push = function (chunk, encoding) {
25970 var state = this._readableState;
ebd8d4e8 25971
8b095871
IC
25972 if (!state.objectMode && typeof chunk === 'string') {
25973 encoding = encoding || state.defaultEncoding;
25974 if (encoding !== state.encoding) {
25975 chunk = bufferShim.from(chunk, encoding);
25976 encoding = '';
25977 }
25978 }
ebd8d4e8 25979
8b095871
IC
25980 return readableAddChunk(this, state, chunk, encoding, false);
25981};
ebd8d4e8 25982
8b095871
IC
25983// Unshift should *always* be something directly out of read()
25984Readable.prototype.unshift = function (chunk) {
25985 var state = this._readableState;
25986 return readableAddChunk(this, state, chunk, '', true);
25987};
ebd8d4e8 25988
8b095871
IC
25989Readable.prototype.isPaused = function () {
25990 return this._readableState.flowing === false;
25991};
25992
25993function readableAddChunk(stream, state, chunk, encoding, addToFront) {
25994 var er = chunkInvalid(state, chunk);
25995 if (er) {
25996 stream.emit('error', er);
25997 } else if (chunk === null) {
25998 state.reading = false;
25999 onEofChunk(stream, state);
26000 } else if (state.objectMode || chunk && chunk.length > 0) {
26001 if (state.ended && !addToFront) {
26002 var e = new Error('stream.push() after EOF');
26003 stream.emit('error', e);
26004 } else if (state.endEmitted && addToFront) {
26005 var _e = new Error('stream.unshift() after end event');
26006 stream.emit('error', _e);
26007 } else {
26008 var skipAdd;
26009 if (state.decoder && !addToFront && !encoding) {
26010 chunk = state.decoder.write(chunk);
26011 skipAdd = !state.objectMode && chunk.length === 0;
26012 }
ebd8d4e8 26013
8b095871 26014 if (!addToFront) state.reading = false;
ebd8d4e8 26015
8b095871
IC
26016 // Don't add to the buffer if we've decoded to an empty string chunk and
26017 // we're not in object mode
26018 if (!skipAdd) {
26019 // if we want the data now, just emit it.
26020 if (state.flowing && state.length === 0 && !state.sync) {
26021 stream.emit('data', chunk);
26022 stream.read(0);
26023 } else {
26024 // update the buffer info.
26025 state.length += state.objectMode ? 1 : chunk.length;
26026 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
ebd8d4e8 26027
8b095871
IC
26028 if (state.needReadable) emitReadable(stream);
26029 }
26030 }
ab78acc6 26031
8b095871
IC
26032 maybeReadMore(stream, state);
26033 }
26034 } else if (!addToFront) {
26035 state.reading = false;
26036 }
ab78acc6 26037
8b095871
IC
26038 return needMoreData(state);
26039}
ab78acc6 26040
8b095871
IC
26041// if it's past the high water mark, we can push in some more.
26042// Also, if we have no data yet, we can stand some
26043// more bytes. This is to work around cases where hwm=0,
26044// such as the repl. Also, if the push() triggered a
26045// readable event, and the user called read(largeNumber) such that
26046// needReadable was set, then we ought to push more, so that another
26047// 'readable' event will be triggered.
26048function needMoreData(state) {
26049 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
26050}
ebd8d4e8 26051
8b095871
IC
26052// backwards compatibility.
26053Readable.prototype.setEncoding = function (enc) {
26054 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
26055 this._readableState.decoder = new StringDecoder(enc);
26056 this._readableState.encoding = enc;
26057 return this;
26058};
26059
26060// Don't raise the hwm > 8MB
26061var MAX_HWM = 0x800000;
26062function computeNewHighWaterMark(n) {
26063 if (n >= MAX_HWM) {
26064 n = MAX_HWM;
ab78acc6 26065 } else {
8b095871
IC
26066 // Get the next highest power of 2 to prevent increasing hwm excessively in
26067 // tiny amounts
26068 n--;
26069 n |= n >>> 1;
26070 n |= n >>> 2;
26071 n |= n >>> 4;
26072 n |= n >>> 8;
26073 n |= n >>> 16;
26074 n++;
ebd8d4e8 26075 }
8b095871 26076 return n;
ebd8d4e8
IC
26077}
26078
8b095871
IC
26079// This function is designed to be inlinable, so please take care when making
26080// changes to the function body.
26081function howMuchToRead(n, state) {
26082 if (n <= 0 || state.length === 0 && state.ended) return 0;
26083 if (state.objectMode) return 1;
26084 if (n !== n) {
26085 // Only flow one buffer at a time
26086 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
26087 }
26088 // If we're asking for more than the current hwm, then raise the hwm.
26089 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
26090 if (n <= state.length) return n;
26091 // Don't have enough
26092 if (!state.ended) {
26093 state.needReadable = true;
26094 return 0;
26095 }
26096 return state.length;
26097}
ebd8d4e8 26098
8b095871
IC
26099// you can override either this method, or the async _read(n) below.
26100Readable.prototype.read = function (n) {
26101 debug('read', n);
26102 n = parseInt(n, 10);
26103 var state = this._readableState;
26104 var nOrig = n;
ebd8d4e8 26105
8b095871 26106 if (n !== 0) state.emittedReadable = false;
ab78acc6 26107
8b095871
IC
26108 // if we're doing read(0) to trigger a readable event, but we
26109 // already have a bunch of data in the buffer, then just trigger
26110 // the 'readable' event and move on.
26111 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
26112 debug('read: emitReadable', state.length, state.ended);
26113 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
26114 return null;
ebd8d4e8 26115 }
ebd8d4e8 26116
8b095871 26117 n = howMuchToRead(n, state);
ebd8d4e8 26118
8b095871
IC
26119 // if we've ended, and we're now clear, then finish it up.
26120 if (n === 0 && state.ended) {
26121 if (state.length === 0) endReadable(this);
26122 return null;
26123 }
ebd8d4e8 26124
8b095871
IC
26125 // All the actual chunk generation logic needs to be
26126 // *below* the call to _read. The reason is that in certain
26127 // synthetic stream cases, such as passthrough streams, _read
26128 // may be a completely synchronous operation which may change
26129 // the state of the read buffer, providing enough data when
26130 // before there was *not* enough.
26131 //
26132 // So, the steps are:
26133 // 1. Figure out what the state of things will be after we do
26134 // a read from the buffer.
26135 //
26136 // 2. If that resulting state will trigger a _read, then call _read.
26137 // Note that this may be asynchronous, or synchronous. Yes, it is
26138 // deeply ugly to write APIs this way, but that still doesn't mean
26139 // that the Readable class should behave improperly, as streams are
26140 // designed to be sync/async agnostic.
26141 // Take note if the _read call is sync or async (ie, if the read call
26142 // has returned yet), so that we know whether or not it's safe to emit
26143 // 'readable' etc.
26144 //
26145 // 3. Actually pull the requested chunks out of the buffer and return.
ebd8d4e8 26146
8b095871
IC
26147 // if we need a readable event, then we need to do some reading.
26148 var doRead = state.needReadable;
26149 debug('need readable', doRead);
ebd8d4e8 26150
8b095871
IC
26151 // if we currently have less than the highWaterMark, then also read some
26152 if (state.length === 0 || state.length - n < state.highWaterMark) {
26153 doRead = true;
26154 debug('length less than watermark', doRead);
26155 }
ebd8d4e8 26156
8b095871
IC
26157 // however, if we've ended, then there's no point, and if we're already
26158 // reading, then it's unnecessary.
26159 if (state.ended || state.reading) {
26160 doRead = false;
26161 debug('reading or ended', doRead);
26162 } else if (doRead) {
26163 debug('do read');
26164 state.reading = true;
26165 state.sync = true;
26166 // if the length is currently zero, then we *need* a readable event.
26167 if (state.length === 0) state.needReadable = true;
26168 // call internal read method
26169 this._read(state.highWaterMark);
26170 state.sync = false;
26171 // If _read pushed data synchronously, then `reading` will be false,
26172 // and we need to re-evaluate how much data we can return to the user.
26173 if (!state.reading) n = howMuchToRead(nOrig, state);
26174 }
ebd8d4e8 26175
8b095871
IC
26176 var ret;
26177 if (n > 0) ret = fromList(n, state);else ret = null;
ebd8d4e8 26178
8b095871
IC
26179 if (ret === null) {
26180 state.needReadable = true;
26181 n = 0;
26182 } else {
26183 state.length -= n;
26184 }
ebd8d4e8 26185
8b095871
IC
26186 if (state.length === 0) {
26187 // If we have nothing in the buffer, then we want to know
26188 // as soon as we *do* get something into the buffer.
26189 if (!state.ended) state.needReadable = true;
ebd8d4e8 26190
8b095871
IC
26191 // If we tried to read() past the EOF, then emit end on the next tick.
26192 if (nOrig !== n && state.ended) endReadable(this);
26193 }
26194
26195 if (ret !== null) this.emit('data', ret);
26196
26197 return ret;
ab78acc6
IC
26198};
26199
8b095871
IC
26200function chunkInvalid(state, chunk) {
26201 var er = null;
26202 if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
26203 er = new TypeError('Invalid non-string/buffer chunk');
26204 }
26205 return er;
26206}
ab78acc6 26207
8b095871
IC
26208function onEofChunk(stream, state) {
26209 if (state.ended) return;
26210 if (state.decoder) {
26211 var chunk = state.decoder.end();
26212 if (chunk && chunk.length) {
26213 state.buffer.push(chunk);
26214 state.length += state.objectMode ? 1 : chunk.length;
26215 }
26216 }
26217 state.ended = true;
26218
26219 // emit 'readable' now to make sure it gets picked up.
26220 emitReadable(stream);
26221}
26222
26223// Don't emit readable right away in sync mode, because this can trigger
26224// another read() call => stack overflow. This way, it might trigger
26225// a nextTick recursion warning, but that's not so bad.
26226function emitReadable(stream) {
26227 var state = stream._readableState;
26228 state.needReadable = false;
26229 if (!state.emittedReadable) {
26230 debug('emitReadable', state.flowing);
26231 state.emittedReadable = true;
26232 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
26233 }
ebd8d4e8
IC
26234}
26235
8b095871
IC
26236function emitReadable_(stream) {
26237 debug('emit readable');
26238 stream.emit('readable');
26239 flow(stream);
26240}
ebd8d4e8 26241
8b095871
IC
26242// at this point, the user has presumably seen the 'readable' event,
26243// and called read() to consume some data. that may have triggered
26244// in turn another _read(n) call, in which case reading = true if
26245// it's in progress.
26246// However, if we're not ended, or reading, and the length < hwm,
26247// then go ahead and try to read some more preemptively.
26248function maybeReadMore(stream, state) {
26249 if (!state.readingMore) {
26250 state.readingMore = true;
26251 processNextTick(maybeReadMore_, stream, state);
26252 }
26253}
ab78acc6 26254
8b095871
IC
26255function maybeReadMore_(stream, state) {
26256 var len = state.length;
26257 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
26258 debug('maybeReadMore read 0');
26259 stream.read(0);
26260 if (len === state.length)
26261 // didn't get any data, stop spinning.
26262 break;else len = state.length;
26263 }
26264 state.readingMore = false;
26265}
ab78acc6 26266
8b095871
IC
26267// abstract method. to be overridden in specific implementation classes.
26268// call cb(er, data) where data is <= n in length.
26269// for virtual (non-string, non-buffer) streams, "length" is somewhat
26270// arbitrary, and perhaps not very meaningful.
26271Readable.prototype._read = function (n) {
26272 this.emit('error', new Error('_read() is not implemented'));
ab78acc6
IC
26273};
26274
8b095871
IC
26275Readable.prototype.pipe = function (dest, pipeOpts) {
26276 var src = this;
26277 var state = this._readableState;
ab78acc6 26278
8b095871
IC
26279 switch (state.pipesCount) {
26280 case 0:
26281 state.pipes = dest;
26282 break;
26283 case 1:
26284 state.pipes = [state.pipes, dest];
26285 break;
26286 default:
26287 state.pipes.push(dest);
26288 break;
ab78acc6 26289 }
8b095871
IC
26290 state.pipesCount += 1;
26291 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
ab78acc6 26292
8b095871 26293 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
ab78acc6 26294
8b095871
IC
26295 var endFn = doEnd ? onend : cleanup;
26296 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
ab78acc6 26297
8b095871
IC
26298 dest.on('unpipe', onunpipe);
26299 function onunpipe(readable) {
26300 debug('onunpipe');
26301 if (readable === src) {
26302 cleanup();
ab78acc6 26303 }
8b095871 26304 }
ebd8d4e8 26305
8b095871
IC
26306 function onend() {
26307 debug('onend');
26308 dest.end();
ebd8d4e8
IC
26309 }
26310
8b095871
IC
26311 // when the dest drains, it reduces the awaitDrain counter
26312 // on the source. This would be more elegant with a .once()
26313 // handler in flow(), but adding and removing repeatedly is
26314 // too slow.
26315 var ondrain = pipeOnDrain(src);
26316 dest.on('drain', ondrain);
ebd8d4e8 26317
8b095871
IC
26318 var cleanedUp = false;
26319 function cleanup() {
26320 debug('cleanup');
26321 // cleanup event handlers once the pipe is broken
26322 dest.removeListener('close', onclose);
26323 dest.removeListener('finish', onfinish);
26324 dest.removeListener('drain', ondrain);
26325 dest.removeListener('error', onerror);
26326 dest.removeListener('unpipe', onunpipe);
26327 src.removeListener('end', onend);
26328 src.removeListener('end', cleanup);
26329 src.removeListener('data', ondata);
ebd8d4e8 26330
8b095871 26331 cleanedUp = true;
ebd8d4e8 26332
8b095871
IC
26333 // if the reader is waiting for a drain event from this
26334 // specific writer, then it would cause it to never start
26335 // flowing again.
26336 // So, if this is awaiting a drain, then we just call it now.
26337 // If we don't know, then assume that we are waiting for one.
26338 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
26339 }
ebd8d4e8 26340
8b095871
IC
26341 // If the user pushes more data while we're writing to dest then we'll end up
26342 // in ondata again. However, we only want to increase awaitDrain once because
26343 // dest will only emit one 'drain' event for the multiple writes.
26344 // => Introduce a guard on increasing awaitDrain.
26345 var increasedAwaitDrain = false;
26346 src.on('data', ondata);
26347 function ondata(chunk) {
26348 debug('ondata');
26349 increasedAwaitDrain = false;
26350 var ret = dest.write(chunk);
26351 if (false === ret && !increasedAwaitDrain) {
26352 // If the user unpiped during `dest.write()`, it is possible
26353 // to get stuck in a permanently paused state if that write
26354 // also returned false.
26355 // => Check whether `dest` is still a piping destination.
26356 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
26357 debug('false write response, pause', src._readableState.awaitDrain);
26358 src._readableState.awaitDrain++;
26359 increasedAwaitDrain = true;
26360 }
26361 src.pause();
26362 }
26363 }
ebd8d4e8 26364
8b095871
IC
26365 // if the dest has an error, then stop piping into it.
26366 // however, don't suppress the throwing behavior for this.
26367 function onerror(er) {
26368 debug('onerror', er);
26369 unpipe();
26370 dest.removeListener('error', onerror);
26371 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
26372 }
ab78acc6 26373
8b095871
IC
26374 // Make sure our error handler is attached before userland ones.
26375 prependListener(dest, 'error', onerror);
ab78acc6 26376
8b095871
IC
26377 // Both close and finish should trigger unpipe, but only once.
26378 function onclose() {
26379 dest.removeListener('finish', onfinish);
26380 unpipe();
26381 }
26382 dest.once('close', onclose);
26383 function onfinish() {
26384 debug('onfinish');
26385 dest.removeListener('close', onclose);
26386 unpipe();
ab78acc6 26387 }
8b095871 26388 dest.once('finish', onfinish);
ebd8d4e8 26389
8b095871
IC
26390 function unpipe() {
26391 debug('unpipe');
26392 src.unpipe(dest);
26393 }
26394
26395 // tell the dest that it's being piped to
26396 dest.emit('pipe', src);
26397
26398 // start the flow if it hasn't been started already.
26399 if (!state.flowing) {
26400 debug('pipe resume');
26401 src.resume();
26402 }
26403
26404 return dest;
ab78acc6 26405};
ebd8d4e8 26406
8b095871
IC
26407function pipeOnDrain(src) {
26408 return function () {
26409 var state = src._readableState;
26410 debug('pipeOnDrain', state.awaitDrain);
26411 if (state.awaitDrain) state.awaitDrain--;
26412 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
26413 state.flowing = true;
26414 flow(src);
26415 }
26416 };
26417}
ebd8d4e8 26418
8b095871
IC
26419Readable.prototype.unpipe = function (dest) {
26420 var state = this._readableState;
ebd8d4e8 26421
8b095871
IC
26422 // if we're not piping anywhere, then do nothing.
26423 if (state.pipesCount === 0) return this;
ebd8d4e8 26424
8b095871
IC
26425 // just one destination. most common case.
26426 if (state.pipesCount === 1) {
26427 // passed in one, but it's not the right one.
26428 if (dest && dest !== state.pipes) return this;
ebd8d4e8 26429
8b095871
IC
26430 if (!dest) dest = state.pipes;
26431
26432 // got a match.
26433 state.pipes = null;
26434 state.pipesCount = 0;
26435 state.flowing = false;
26436 if (dest) dest.emit('unpipe', this);
26437 return this;
ab78acc6 26438 }
ebd8d4e8 26439
8b095871 26440 // slow case. multiple pipe destinations.
ebd8d4e8 26441
8b095871
IC
26442 if (!dest) {
26443 // remove all.
26444 var dests = state.pipes;
26445 var len = state.pipesCount;
26446 state.pipes = null;
26447 state.pipesCount = 0;
26448 state.flowing = false;
ebd8d4e8 26449
8b095871
IC
26450 for (var i = 0; i < len; i++) {
26451 dests[i].emit('unpipe', this);
26452 }return this;
26453 }
ebd8d4e8 26454
8b095871
IC
26455 // try to find the right one.
26456 var index = indexOf(state.pipes, dest);
26457 if (index === -1) return this;
ebd8d4e8 26458
8b095871
IC
26459 state.pipes.splice(index, 1);
26460 state.pipesCount -= 1;
26461 if (state.pipesCount === 1) state.pipes = state.pipes[0];
ebd8d4e8 26462
8b095871 26463 dest.emit('unpipe', this);
ab78acc6 26464
8b095871
IC
26465 return this;
26466};
ab78acc6 26467
8b095871
IC
26468// set up data events if they are asked for
26469// Ensure readable listeners eventually get something
26470Readable.prototype.on = function (ev, fn) {
26471 var res = Stream.prototype.on.call(this, ev, fn);
26472
26473 if (ev === 'data') {
26474 // Start flowing on next tick if stream isn't explicitly paused
26475 if (this._readableState.flowing !== false) this.resume();
26476 } else if (ev === 'readable') {
26477 var state = this._readableState;
26478 if (!state.endEmitted && !state.readableListening) {
26479 state.readableListening = state.needReadable = true;
26480 state.emittedReadable = false;
26481 if (!state.reading) {
26482 processNextTick(nReadingNextTick, this);
26483 } else if (state.length) {
26484 emitReadable(this, state);
ebd8d4e8 26485 }
ab78acc6 26486 }
8b095871 26487 }
ebd8d4e8 26488
8b095871
IC
26489 return res;
26490};
26491Readable.prototype.addListener = Readable.prototype.on;
ab78acc6 26492
8b095871
IC
26493function nReadingNextTick(self) {
26494 debug('readable nexttick read 0');
26495 self.read(0);
26496}
ab78acc6 26497
8b095871
IC
26498// pause() and resume() are remnants of the legacy readable stream API
26499// If the user uses them, then switch into old mode.
26500Readable.prototype.resume = function () {
26501 var state = this._readableState;
26502 if (!state.flowing) {
26503 debug('resume');
26504 state.flowing = true;
26505 resume(this, state);
ebd8d4e8 26506 }
ab78acc6 26507 return this;
ebd8d4e8
IC
26508};
26509
8b095871
IC
26510function resume(stream, state) {
26511 if (!state.resumeScheduled) {
26512 state.resumeScheduled = true;
26513 processNextTick(resume_, stream, state);
ebd8d4e8 26514 }
8b095871 26515}
ab78acc6 26516
8b095871
IC
26517function resume_(stream, state) {
26518 if (!state.reading) {
26519 debug('resume read 0');
26520 stream.read(0);
ebd8d4e8 26521 }
ebd8d4e8 26522
8b095871
IC
26523 state.resumeScheduled = false;
26524 state.awaitDrain = 0;
26525 stream.emit('resume');
26526 flow(stream);
26527 if (state.flowing && !state.reading) stream.read(0);
26528}
ab78acc6 26529
8b095871
IC
26530Readable.prototype.pause = function () {
26531 debug('call pause flowing=%j', this._readableState.flowing);
26532 if (false !== this._readableState.flowing) {
26533 debug('pause');
26534 this._readableState.flowing = false;
26535 this.emit('pause');
ebd8d4e8 26536 }
ab78acc6
IC
26537 return this;
26538};
ebd8d4e8 26539
8b095871
IC
26540function flow(stream) {
26541 var state = stream._readableState;
26542 debug('flow', state.flowing);
26543 while (state.flowing && stream.read() !== null) {}
26544}
ebd8d4e8 26545
8b095871
IC
26546// wrap an old-style stream as the async data source.
26547// This is *not* part of the readable stream interface.
26548// It is an ugly unfortunate mess of history.
26549Readable.prototype.wrap = function (stream) {
26550 var state = this._readableState;
26551 var paused = false;
ebd8d4e8 26552
8b095871
IC
26553 var self = this;
26554 stream.on('end', function () {
26555 debug('wrapped end');
26556 if (state.decoder && !state.ended) {
26557 var chunk = state.decoder.end();
26558 if (chunk && chunk.length) self.push(chunk);
26559 }
ebd8d4e8 26560
8b095871
IC
26561 self.push(null);
26562 });
ebd8d4e8 26563
8b095871
IC
26564 stream.on('data', function (chunk) {
26565 debug('wrapped data');
26566 if (state.decoder) chunk = state.decoder.write(chunk);
ebd8d4e8 26567
8b095871
IC
26568 // don't skip over falsy values in objectMode
26569 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
ebd8d4e8 26570
8b095871
IC
26571 var ret = self.push(chunk);
26572 if (!ret) {
26573 paused = true;
26574 stream.pause();
26575 }
26576 });
26577
26578 // proxy all the other methods.
26579 // important when wrapping filters and duplexes.
26580 for (var i in stream) {
26581 if (this[i] === undefined && typeof stream[i] === 'function') {
26582 this[i] = function (method) {
26583 return function () {
26584 return stream[method].apply(stream, arguments);
26585 };
26586 }(i);
26587 }
ab78acc6 26588 }
ebd8d4e8 26589
8b095871
IC
26590 // proxy certain important events.
26591 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
26592 forEach(events, function (ev) {
26593 stream.on(ev, self.emit.bind(self, ev));
26594 });
26595
26596 // when we try to consume some more bytes, simply unpause the
26597 // underlying stream.
26598 self._read = function (n) {
26599 debug('wrapped _read', n);
26600 if (paused) {
26601 paused = false;
26602 stream.resume();
26603 }
26604 };
26605
26606 return self;
ebd8d4e8
IC
26607};
26608
8b095871
IC
26609// exposed for testing purposes only.
26610Readable._fromList = fromList;
ebd8d4e8 26611
8b095871
IC
26612// Pluck off n bytes from an array of buffers.
26613// Length is the combined lengths of all the buffers in the list.
26614// This function is designed to be inlinable, so please take care when making
26615// changes to the function body.
26616function fromList(n, state) {
26617 // nothing buffered
26618 if (state.length === 0) return null;
ab78acc6 26619
8b095871
IC
26620 var ret;
26621 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
26622 // read it all, truncate the list
26623 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);
26624 state.buffer.clear();
26625 } else {
26626 // read part of list
26627 ret = fromListPartial(n, state.buffer, state.decoder);
26628 }
26629
26630 return ret;
26631}
26632
26633// Extracts only enough buffered data to satisfy the amount requested.
26634// This function is designed to be inlinable, so please take care when making
26635// changes to the function body.
26636function fromListPartial(n, list, hasStrings) {
26637 var ret;
26638 if (n < list.head.data.length) {
26639 // slice is the same for buffers and strings
26640 ret = list.head.data.slice(0, n);
26641 list.head.data = list.head.data.slice(n);
26642 } else if (n === list.head.data.length) {
26643 // first chunk is a perfect match
26644 ret = list.shift();
26645 } else {
26646 // result spans more than one buffer
26647 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
26648 }
26649 return ret;
ab78acc6 26650}
ebd8d4e8 26651
8b095871
IC
26652// Copies a specified amount of characters from the list of buffered data
26653// chunks.
26654// This function is designed to be inlinable, so please take care when making
26655// changes to the function body.
26656function copyFromBufferString(n, list) {
26657 var p = list.head;
26658 var c = 1;
26659 var ret = p.data;
26660 n -= ret.length;
26661 while (p = p.next) {
26662 var str = p.data;
26663 var nb = n > str.length ? str.length : n;
26664 if (nb === str.length) ret += str;else ret += str.slice(0, n);
26665 n -= nb;
26666 if (n === 0) {
26667 if (nb === str.length) {
26668 ++c;
26669 if (p.next) list.head = p.next;else list.head = list.tail = null;
26670 } else {
26671 list.head = p;
26672 p.data = str.slice(nb);
26673 }
26674 break;
ab78acc6 26675 }
8b095871
IC
26676 ++c;
26677 }
26678 list.length -= c;
26679 return ret;
ab78acc6
IC
26680}
26681
8b095871
IC
26682// Copies a specified amount of bytes from the list of buffered data chunks.
26683// This function is designed to be inlinable, so please take care when making
26684// changes to the function body.
26685function copyFromBuffer(n, list) {
26686 var ret = bufferShim.allocUnsafe(n);
26687 var p = list.head;
26688 var c = 1;
26689 p.data.copy(ret);
26690 n -= p.data.length;
26691 while (p = p.next) {
26692 var buf = p.data;
26693 var nb = n > buf.length ? buf.length : n;
26694 buf.copy(ret, ret.length - n, 0, nb);
26695 n -= nb;
26696 if (n === 0) {
26697 if (nb === buf.length) {
26698 ++c;
26699 if (p.next) list.head = p.next;else list.head = list.tail = null;
26700 } else {
26701 list.head = p;
26702 p.data = buf.slice(nb);
26703 }
26704 break;
ab78acc6 26705 }
8b095871
IC
26706 ++c;
26707 }
26708 list.length -= c;
26709 return ret;
ab78acc6 26710}
ebd8d4e8 26711
8b095871
IC
26712function endReadable(stream) {
26713 var state = stream._readableState;
ab78acc6 26714
8b095871
IC
26715 // If we get here before consuming all the bytes, then that is a
26716 // bug in node. Should never happen.
26717 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
ab78acc6 26718
8b095871
IC
26719 if (!state.endEmitted) {
26720 state.ended = true;
26721 processNextTick(endReadableNT, state, stream);
26722 }
26723}
ebd8d4e8 26724
8b095871
IC
26725function endReadableNT(state, stream) {
26726 // Check that we didn't get one last unshift.
26727 if (!state.endEmitted && state.length === 0) {
26728 state.endEmitted = true;
26729 stream.readable = false;
26730 stream.emit('end');
26731 }
26732}
ebd8d4e8 26733
8b095871
IC
26734function forEach(xs, f) {
26735 for (var i = 0, l = xs.length; i < l; i++) {
26736 f(xs[i], i);
26737 }
26738}
ebd8d4e8 26739
8b095871
IC
26740function indexOf(xs, x) {
26741 for (var i = 0, l = xs.length; i < l; i++) {
26742 if (xs[i] === x) return i;
26743 }
26744 return -1;
26745}
26746}).call(this,require('_process'))
26747},{"./_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){
26748// a transform stream is a readable/writable stream where you do
26749// something with the data. Sometimes it's called a "filter",
26750// but that's not a great name for it, since that implies a thing where
26751// some bits pass through, and others are simply ignored. (That would
26752// be a valid example of a transform, of course.)
ab78acc6 26753//
8b095871
IC
26754// While the output is causally related to the input, it's not a
26755// necessarily symmetric or synchronous transformation. For example,
26756// a zlib stream might take multiple plain-text writes(), and then
26757// emit a single compressed chunk some time in the future.
ab78acc6 26758//
8b095871 26759// Here's how this works:
ab78acc6 26760//
8b095871
IC
26761// The Transform stream has all the aspects of the readable and writable
26762// stream classes. When you write(chunk), that calls _write(chunk,cb)
26763// internally, and returns false if there's a lot of pending writes
26764// buffered up. When you call read(), that calls _read(n) until
26765// there's enough pending readable data buffered up.
26766//
26767// In a transform stream, the written data is placed in a buffer. When
26768// _read(n) is called, it transforms the queued up data, calling the
26769// buffered _write cb's as it consumes chunks. If consuming a single
26770// written chunk would result in multiple output chunks, then the first
26771// outputted bit calls the readcb, and subsequent chunks just go into
26772// the read buffer, and will cause it to emit 'readable' if necessary.
26773//
26774// This way, back-pressure is actually determined by the reading side,
26775// since _read has to be called to start processing a new chunk. However,
26776// a pathological inflate type of transform can cause excessive buffering
26777// here. For example, imagine a stream where every byte of input is
26778// interpreted as an integer from 0-255, and then results in that many
26779// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
26780// 1kb of data being output. In this case, you could write a very small
26781// amount of input, and end up with a very large amount of output. In
26782// such a pathological inflating mechanism, there'd be no way to tell
26783// the system to stop doing the transform. A single 4MB write could
26784// cause the system to run out of memory.
26785//
26786// However, even in such a pathological case, only a single written chunk
26787// would be consumed, and then the rest would wait (un-transformed) until
26788// the results of the previous transformed chunk were consumed.
ebd8d4e8 26789
8b095871 26790'use strict';
ebd8d4e8 26791
8b095871 26792module.exports = Transform;
ebd8d4e8 26793
8b095871 26794var Duplex = require('./_stream_duplex');
ebd8d4e8 26795
ab78acc6
IC
26796/*<replacement>*/
26797var util = require('core-util-is');
26798util.inherits = require('inherits');
26799/*</replacement>*/
ebd8d4e8 26800
8b095871 26801util.inherits(Transform, Duplex);
ebd8d4e8 26802
8b095871
IC
26803function TransformState(stream) {
26804 this.afterTransform = function (er, data) {
26805 return afterTransform(stream, er, data);
26806 };
ebd8d4e8 26807
8b095871
IC
26808 this.needTransform = false;
26809 this.transforming = false;
26810 this.writecb = null;
26811 this.writechunk = null;
26812 this.writeencoding = null;
26813}
ebd8d4e8 26814
8b095871
IC
26815function afterTransform(stream, er, data) {
26816 var ts = stream._transformState;
26817 ts.transforming = false;
ebd8d4e8 26818
8b095871 26819 var cb = ts.writecb;
ebd8d4e8 26820
8b095871 26821 if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
ebd8d4e8 26822
8b095871
IC
26823 ts.writechunk = null;
26824 ts.writecb = null;
ebd8d4e8 26825
8b095871 26826 if (data !== null && data !== undefined) stream.push(data);
ebd8d4e8 26827
8b095871
IC
26828 cb(er);
26829
26830 var rs = stream._readableState;
26831 rs.reading = false;
26832 if (rs.needReadable || rs.length < rs.highWaterMark) {
26833 stream._read(rs.highWaterMark);
26834 }
ebd8d4e8
IC
26835}
26836
8b095871
IC
26837function Transform(options) {
26838 if (!(this instanceof Transform)) return new Transform(options);
ebd8d4e8 26839
8b095871 26840 Duplex.call(this, options);
ebd8d4e8 26841
8b095871
IC
26842 this._transformState = new TransformState(this);
26843
26844 var stream = this;
26845
26846 // start out asking for a readable event once data is transformed.
26847 this._readableState.needReadable = true;
26848
26849 // we have implemented the _read method, and done the other things
26850 // that Readable wants before the first _read call, so unset the
26851 // sync guard flag.
26852 this._readableState.sync = false;
26853
26854 if (options) {
26855 if (typeof options.transform === 'function') this._transform = options.transform;
26856
26857 if (typeof options.flush === 'function') this._flush = options.flush;
ebd8d4e8 26858 }
8b095871
IC
26859
26860 // When the writable side finishes, then flush out anything remaining.
26861 this.once('prefinish', function () {
26862 if (typeof this._flush === 'function') this._flush(function (er, data) {
26863 done(stream, er, data);
26864 });else done(stream);
26865 });
ab78acc6 26866}
ebd8d4e8 26867
8b095871
IC
26868Transform.prototype.push = function (chunk, encoding) {
26869 this._transformState.needTransform = false;
26870 return Duplex.prototype.push.call(this, chunk, encoding);
26871};
26872
26873// This is the part where you do stuff!
26874// override this function in implementation classes.
26875// 'chunk' is an input chunk.
ab78acc6 26876//
8b095871
IC
26877// Call `push(newChunk)` to pass along transformed output
26878// to the readable side. You may call 'push' zero or more times.
ab78acc6 26879//
8b095871
IC
26880// Call `cb(err)` when you are done with this chunk. If you pass
26881// an error, then that'll put the hurt on the whole operation. If you
26882// never call cb(), then you'll never get another chunk.
26883Transform.prototype._transform = function (chunk, encoding, cb) {
26884 throw new Error('_transform() is not implemented');
26885};
ebd8d4e8 26886
8b095871
IC
26887Transform.prototype._write = function (chunk, encoding, cb) {
26888 var ts = this._transformState;
26889 ts.writecb = cb;
26890 ts.writechunk = chunk;
26891 ts.writeencoding = encoding;
26892 if (!ts.transforming) {
26893 var rs = this._readableState;
26894 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
26895 }
26896};
ebd8d4e8 26897
8b095871
IC
26898// Doesn't matter what the args are here.
26899// _transform does all the work.
26900// That we got here means that the readable side wants more data.
26901Transform.prototype._read = function (n) {
26902 var ts = this._transformState;
ebd8d4e8 26903
8b095871
IC
26904 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
26905 ts.transforming = true;
26906 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
26907 } else {
26908 // mark that we need a transform, so that any data that comes in
26909 // will get processed, now that we've asked for it.
26910 ts.needTransform = true;
26911 }
26912};
ebd8d4e8 26913
8b095871
IC
26914function done(stream, er, data) {
26915 if (er) return stream.emit('error', er);
ebd8d4e8 26916
8b095871 26917 if (data !== null && data !== undefined) stream.push(data);
ebd8d4e8 26918
8b095871
IC
26919 // if there's nothing in the write buffer, then that means
26920 // that nothing more will ever be provided
26921 var ws = stream._writableState;
26922 var ts = stream._transformState;
ebd8d4e8 26923
8b095871 26924 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
ebd8d4e8 26925
8b095871 26926 if (ts.transforming) throw new Error('Calling transform done when still transforming');
ebd8d4e8 26927
8b095871
IC
26928 return stream.push(null);
26929}
26930},{"./_stream_duplex":15,"core-util-is":6,"inherits":9}],19:[function(require,module,exports){
ab78acc6 26931(function (process){
8b095871
IC
26932// A bit simpler than readable streams.
26933// Implement an async ._write(chunk, encoding, cb), and it'll handle all
26934// the drain event emission and buffering.
ebd8d4e8 26935
8b095871
IC
26936'use strict';
26937
26938module.exports = Writable;
ebd8d4e8 26939
ab78acc6 26940/*<replacement>*/
8b095871 26941var processNextTick = require('process-nextick-args');
ab78acc6
IC
26942/*</replacement>*/
26943
ab78acc6 26944/*<replacement>*/
8b095871 26945var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
ab78acc6
IC
26946/*</replacement>*/
26947
ab78acc6 26948/*<replacement>*/
8b095871 26949var Duplex;
ab78acc6
IC
26950/*</replacement>*/
26951
8b095871 26952Writable.WritableState = WritableState;
ab78acc6
IC
26953
26954/*<replacement>*/
26955var util = require('core-util-is');
26956util.inherits = require('inherits');
26957/*</replacement>*/
26958
8b095871
IC
26959/*<replacement>*/
26960var internalUtil = {
26961 deprecate: require('util-deprecate')
26962};
26963/*</replacement>*/
ab78acc6 26964
8b095871
IC
26965/*<replacement>*/
26966var Stream;
26967(function () {
26968 try {
26969 Stream = require('st' + 'ream');
26970 } catch (_) {} finally {
26971 if (!Stream) Stream = require('events').EventEmitter;
26972 }
26973})();
26974/*</replacement>*/
ab78acc6 26975
8b095871 26976var Buffer = require('buffer').Buffer;
ab78acc6 26977/*<replacement>*/
8b095871 26978var bufferShim = require('buffer-shims');
ab78acc6
IC
26979/*</replacement>*/
26980
8b095871
IC
26981util.inherits(Writable, Stream);
26982
26983function nop() {}
ab78acc6 26984
8b095871
IC
26985function WriteReq(chunk, encoding, cb) {
26986 this.chunk = chunk;
26987 this.encoding = encoding;
26988 this.callback = cb;
26989 this.next = null;
26990}
ab78acc6 26991
8b095871
IC
26992function WritableState(options, stream) {
26993 Duplex = Duplex || require('./_stream_duplex');
ab78acc6
IC
26994
26995 options = options || {};
26996
8b095871
IC
26997 // object stream flag to indicate whether or not this stream
26998 // contains buffers or objects.
26999 this.objectMode = !!options.objectMode;
27000
27001 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
27002
27003 // the point at which write() starts returning false
27004 // Note: 0 is a valid value, means that we always return false if
27005 // the entire buffer is not flushed immediately on write()
ab78acc6 27006 var hwm = options.highWaterMark;
8b095871
IC
27007 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
27008 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
ab78acc6
IC
27009
27010 // cast to ints.
8b095871 27011 this.highWaterMark = ~ ~this.highWaterMark;
ab78acc6 27012
8b095871
IC
27013 // drain event flag.
27014 this.needDrain = false;
27015 // at the start of calling end()
27016 this.ending = false;
27017 // when end() has been called, and returned
ab78acc6 27018 this.ended = false;
8b095871
IC
27019 // when 'finish' is emitted
27020 this.finished = false;
27021
27022 // should we decode strings into buffers before passing to _write?
27023 // this is here so that some node-core streams can optimize string
27024 // handling at a lower level.
27025 var noDecode = options.decodeStrings === false;
27026 this.decodeStrings = !noDecode;
27027
27028 // Crypto is kind of old and crusty. Historically, its default string
27029 // encoding is 'binary' so we have to make this configurable.
27030 // Everything else in the universe uses 'utf8', though.
27031 this.defaultEncoding = options.defaultEncoding || 'utf8';
27032
27033 // not an actual buffer we keep track of, but a measurement
27034 // of how much we're waiting to get pushed to some underlying
27035 // socket or file.
27036 this.length = 0;
27037
27038 // a flag to see when we're in the middle of a write.
27039 this.writing = false;
27040
27041 // when true all writes will be buffered until .uncork() call
27042 this.corked = 0;
ebd8d4e8 27043
ab78acc6
IC
27044 // a flag to be able to tell if the onwrite cb is called immediately,
27045 // or on a later tick. We set this to true at first, because any
27046 // actions that shouldn't happen until "later" should generally also
27047 // not happen before the first write call.
27048 this.sync = true;
ebd8d4e8 27049
8b095871
IC
27050 // a flag to know if we're processing previously buffered items, which
27051 // may call the _write() callback in the same tick, so that we don't
27052 // end up in an overlapped onwrite situation.
27053 this.bufferProcessing = false;
27054
27055 // the callback that's passed to _write(chunk,cb)
27056 this.onwrite = function (er) {
27057 onwrite(stream, er);
27058 };
27059
27060 // the callback that the user supplies to write(chunk,encoding,cb)
27061 this.writecb = null;
27062
27063 // the amount that is being written when _write is called.
27064 this.writelen = 0;
27065
27066 this.bufferedRequest = null;
27067 this.lastBufferedRequest = null;
27068
27069 // number of pending user-supplied write callbacks
27070 // this must be 0 before 'finish' can be emitted
27071 this.pendingcb = 0;
27072
27073 // emit prefinish if the only thing we're waiting for is _write cbs
27074 // This is relevant for synchronous Transform streams
27075 this.prefinished = false;
27076
27077 // True if the error was already emitted and should not be thrown again
27078 this.errorEmitted = false;
27079
27080 // count buffered requests
27081 this.bufferedRequestCount = 0;
27082
27083 // allocate the first CorkedRequest, there is always
27084 // one allocated and free to use, and we maintain at most two
27085 this.corkedRequestsFree = new CorkedRequest(this);
27086}
27087
27088WritableState.prototype.getBuffer = function getBuffer() {
27089 var current = this.bufferedRequest;
27090 var out = [];
27091 while (current) {
27092 out.push(current);
27093 current = current.next;
27094 }
27095 return out;
27096};
27097
27098(function () {
27099 try {
27100 Object.defineProperty(WritableState.prototype, 'buffer', {
27101 get: internalUtil.deprecate(function () {
27102 return this.getBuffer();
27103 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
27104 });
27105 } catch (_) {}
27106})();
27107
27108// Test _writableState for inheritance to account for Duplex streams,
27109// whose prototype chain only points to Readable.
27110var realHasInstance;
27111if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
27112 realHasInstance = Function.prototype[Symbol.hasInstance];
27113 Object.defineProperty(Writable, Symbol.hasInstance, {
27114 value: function (object) {
27115 if (realHasInstance.call(this, object)) return true;
27116
27117 return object && object._writableState instanceof WritableState;
27118 }
27119 });
27120} else {
27121 realHasInstance = function (object) {
27122 return object instanceof this;
27123 };
27124}
27125
27126function Writable(options) {
27127 Duplex = Duplex || require('./_stream_duplex');
27128
27129 // Writable ctor is applied to Duplexes, too.
27130 // `realHasInstance` is necessary because using plain `instanceof`
27131 // would return false, as no `_writableState` property is attached.
27132
27133 // Trying to use the custom `instanceof` for Writable here will also break the
27134 // Node.js LazyTransform implementation, which has a non-trivial getter for
27135 // `_writableState` that would lead to infinite recursion.
27136 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
27137 return new Writable(options);
27138 }
27139
27140 this._writableState = new WritableState(options, this);
27141
27142 // legacy.
27143 this.writable = true;
27144
27145 if (options) {
27146 if (typeof options.write === 'function') this._write = options.write;
27147
27148 if (typeof options.writev === 'function') this._writev = options.writev;
27149 }
27150
27151 Stream.call(this);
27152}
27153
27154// Otherwise people can pipe Writable streams, which is just wrong.
27155Writable.prototype.pipe = function () {
27156 this.emit('error', new Error('Cannot pipe, not readable'));
27157};
27158
27159function writeAfterEnd(stream, cb) {
27160 var er = new Error('write after end');
27161 // TODO: defer error events consistently everywhere, not just the cb
27162 stream.emit('error', er);
27163 processNextTick(cb, er);
27164}
27165
27166// If we get something that is not a buffer, string, null, or undefined,
27167// and we're not in objectMode, then that's an error.
27168// Otherwise stream chunks are all considered to be of length=1, and the
27169// watermarks determine how many objects to keep in the buffer, rather than
27170// how many bytes or characters.
27171function validChunk(stream, state, chunk, cb) {
27172 var valid = true;
27173 var er = false;
27174 // Always throw error if a null is written
27175 // if we are not in object mode then throw
27176 // if it is not a buffer, string, or undefined.
27177 if (chunk === null) {
27178 er = new TypeError('May not write null values to stream');
27179 } else if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
27180 er = new TypeError('Invalid non-string/buffer chunk');
27181 }
27182 if (er) {
27183 stream.emit('error', er);
27184 processNextTick(cb, er);
27185 valid = false;
27186 }
27187 return valid;
27188}
ebd8d4e8 27189
8b095871
IC
27190Writable.prototype.write = function (chunk, encoding, cb) {
27191 var state = this._writableState;
27192 var ret = false;
ab78acc6 27193
8b095871
IC
27194 if (typeof encoding === 'function') {
27195 cb = encoding;
27196 encoding = null;
27197 }
ab78acc6 27198
8b095871 27199 if (Buffer.isBuffer(chunk)) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
ab78acc6 27200
8b095871 27201 if (typeof cb !== 'function') cb = nop;
ab78acc6 27202
8b095871
IC
27203 if (state.ended) writeAfterEnd(this, cb);else if (validChunk(this, state, chunk, cb)) {
27204 state.pendingcb++;
27205 ret = writeOrBuffer(this, state, chunk, encoding, cb);
27206 }
ab78acc6 27207
8b095871
IC
27208 return ret;
27209};
ab78acc6 27210
8b095871
IC
27211Writable.prototype.cork = function () {
27212 var state = this._writableState;
ab78acc6 27213
8b095871
IC
27214 state.corked++;
27215};
ebd8d4e8 27216
8b095871
IC
27217Writable.prototype.uncork = function () {
27218 var state = this._writableState;
ab78acc6 27219
8b095871
IC
27220 if (state.corked) {
27221 state.corked--;
ab78acc6 27222
8b095871
IC
27223 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
27224 }
27225};
ab78acc6 27226
8b095871
IC
27227Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
27228 // node::ParseEncoding() requires lower case.
27229 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
27230 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);
27231 this._writableState.defaultEncoding = encoding;
27232 return this;
27233};
ab78acc6 27234
8b095871
IC
27235function decodeChunk(state, chunk, encoding) {
27236 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
27237 chunk = bufferShim.from(chunk, encoding);
27238 }
27239 return chunk;
ab78acc6
IC
27240}
27241
8b095871
IC
27242// if we're already writing something, then just put this
27243// in the queue, and wait our turn. Otherwise, call _write
27244// If we return false, then we need a drain event, so set that flag.
27245function writeOrBuffer(stream, state, chunk, encoding, cb) {
27246 chunk = decodeChunk(state, chunk, encoding);
ab78acc6 27247
8b095871
IC
27248 if (Buffer.isBuffer(chunk)) encoding = 'buffer';
27249 var len = state.objectMode ? 1 : chunk.length;
ebd8d4e8 27250
8b095871 27251 state.length += len;
ebd8d4e8 27252
8b095871
IC
27253 var ret = state.length < state.highWaterMark;
27254 // we must ensure that previous needDrain will not be reset to false.
27255 if (!ret) state.needDrain = true;
ebd8d4e8 27256
8b095871
IC
27257 if (state.writing || state.corked) {
27258 var last = state.lastBufferedRequest;
27259 state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
27260 if (last) {
27261 last.next = state.lastBufferedRequest;
ebd8d4e8 27262 } else {
8b095871
IC
27263 state.bufferedRequest = state.lastBufferedRequest;
27264 }
27265 state.bufferedRequestCount += 1;
27266 } else {
27267 doWrite(stream, state, false, len, chunk, encoding, cb);
27268 }
ab78acc6 27269
8b095871
IC
27270 return ret;
27271}
ab78acc6 27272
8b095871
IC
27273function doWrite(stream, state, writev, len, chunk, encoding, cb) {
27274 state.writelen = len;
27275 state.writecb = cb;
27276 state.writing = true;
27277 state.sync = true;
27278 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
27279 state.sync = false;
27280}
ab78acc6 27281
8b095871
IC
27282function onwriteError(stream, state, sync, er, cb) {
27283 --state.pendingcb;
27284 if (sync) processNextTick(cb, er);else cb(er);
ab78acc6 27285
8b095871
IC
27286 stream._writableState.errorEmitted = true;
27287 stream.emit('error', er);
27288}
ebd8d4e8 27289
8b095871
IC
27290function onwriteStateUpdate(state) {
27291 state.writing = false;
27292 state.writecb = null;
27293 state.length -= state.writelen;
27294 state.writelen = 0;
ab78acc6 27295}
ebd8d4e8 27296
8b095871
IC
27297function onwrite(stream, er) {
27298 var state = stream._writableState;
27299 var sync = state.sync;
27300 var cb = state.writecb;
ab78acc6 27301
8b095871 27302 onwriteStateUpdate(state);
ab78acc6 27303
8b095871
IC
27304 if (er) onwriteError(stream, state, sync, er, cb);else {
27305 // Check if we're actually ready to finish, but don't emit yet
27306 var finished = needFinish(state);
27307
27308 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
27309 clearBuffer(stream, state);
27310 }
27311
27312 if (sync) {
27313 /*<replacement>*/
27314 asyncWrite(afterWrite, stream, state, finished, cb);
27315 /*</replacement>*/
27316 } else {
27317 afterWrite(stream, state, finished, cb);
27318 }
27319 }
ab78acc6
IC
27320}
27321
8b095871
IC
27322function afterWrite(stream, state, finished, cb) {
27323 if (!finished) onwriteDrain(stream, state);
27324 state.pendingcb--;
27325 cb();
27326 finishMaybe(stream, state);
27327}
ab78acc6 27328
8b095871
IC
27329// Must force callback to be called on nextTick, so that we don't
27330// emit 'drain' before the write() consumer gets the 'false' return
27331// value, and has a chance to attach a 'drain' listener.
27332function onwriteDrain(stream, state) {
27333 if (state.length === 0 && state.needDrain) {
27334 state.needDrain = false;
27335 stream.emit('drain');
ebd8d4e8 27336 }
ebd8d4e8 27337}
ebd8d4e8 27338
8b095871
IC
27339// if there's something in the buffer waiting, then process it
27340function clearBuffer(stream, state) {
27341 state.bufferProcessing = true;
27342 var entry = state.bufferedRequest;
ebd8d4e8 27343
8b095871
IC
27344 if (stream._writev && entry && entry.next) {
27345 // Fast case, write everything using _writev()
27346 var l = state.bufferedRequestCount;
27347 var buffer = new Array(l);
27348 var holder = state.corkedRequestsFree;
27349 holder.entry = entry;
ebd8d4e8 27350
8b095871
IC
27351 var count = 0;
27352 while (entry) {
27353 buffer[count] = entry;
27354 entry = entry.next;
27355 count += 1;
27356 }
ebd8d4e8 27357
8b095871 27358 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
ebd8d4e8 27359
8b095871
IC
27360 // doWrite is almost always async, defer these to save a bit of time
27361 // as the hot path ends with doWrite
27362 state.pendingcb++;
27363 state.lastBufferedRequest = null;
27364 if (holder.next) {
27365 state.corkedRequestsFree = holder.next;
27366 holder.next = null;
27367 } else {
27368 state.corkedRequestsFree = new CorkedRequest(state);
27369 }
27370 } else {
27371 // Slow case, write chunks one-by-one
27372 while (entry) {
27373 var chunk = entry.chunk;
27374 var encoding = entry.encoding;
27375 var cb = entry.callback;
27376 var len = state.objectMode ? 1 : chunk.length;
ebd8d4e8 27377
8b095871
IC
27378 doWrite(stream, state, false, len, chunk, encoding, cb);
27379 entry = entry.next;
27380 // if we didn't call the onwrite immediately, then
27381 // it means that we need to wait until it does.
27382 // also, that means that the chunk and cb are currently
27383 // being processed, so move the buffer counter past them.
27384 if (state.writing) {
27385 break;
27386 }
27387 }
27388
27389 if (entry === null) state.lastBufferedRequest = null;
ebd8d4e8 27390 }
ab78acc6 27391
8b095871
IC
27392 state.bufferedRequestCount = 0;
27393 state.bufferedRequest = entry;
27394 state.bufferProcessing = false;
ebd8d4e8
IC
27395}
27396
8b095871
IC
27397Writable.prototype._write = function (chunk, encoding, cb) {
27398 cb(new Error('_write() is not implemented'));
27399};
ebd8d4e8 27400
8b095871 27401Writable.prototype._writev = null;
ab78acc6 27402
8b095871
IC
27403Writable.prototype.end = function (chunk, encoding, cb) {
27404 var state = this._writableState;
27405
27406 if (typeof chunk === 'function') {
27407 cb = chunk;
27408 chunk = null;
27409 encoding = null;
27410 } else if (typeof encoding === 'function') {
27411 cb = encoding;
27412 encoding = null;
ab78acc6
IC
27413 }
27414
8b095871 27415 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
ab78acc6 27416
8b095871
IC
27417 // .end() fully uncorks
27418 if (state.corked) {
27419 state.corked = 1;
27420 this.uncork();
ab78acc6
IC
27421 }
27422
8b095871
IC
27423 // ignore unnecessary end() calls.
27424 if (!state.ending && !state.finished) endWritable(this, state, cb);
27425};
ab78acc6 27426
8b095871
IC
27427function needFinish(state) {
27428 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
27429}
ab78acc6 27430
8b095871
IC
27431function prefinish(stream, state) {
27432 if (!state.prefinished) {
27433 state.prefinished = true;
27434 stream.emit('prefinish');
ab78acc6 27435 }
8b095871 27436}
ab78acc6 27437
8b095871
IC
27438function finishMaybe(stream, state) {
27439 var need = needFinish(state);
27440 if (need) {
27441 if (state.pendingcb === 0) {
27442 prefinish(stream, state);
27443 state.finished = true;
27444 stream.emit('finish');
27445 } else {
27446 prefinish(stream, state);
27447 }
ab78acc6 27448 }
8b095871
IC
27449 return need;
27450}
ab78acc6 27451
8b095871
IC
27452function endWritable(stream, state, cb) {
27453 state.ending = true;
27454 finishMaybe(stream, state);
27455 if (cb) {
27456 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
ab78acc6 27457 }
8b095871
IC
27458 state.ended = true;
27459 stream.writable = false;
27460}
ab78acc6 27461
8b095871
IC
27462// It seems a linked list but it is not
27463// there will be only 2 of these for each stream
27464function CorkedRequest(state) {
27465 var _this = this;
ab78acc6 27466
8b095871
IC
27467 this.next = null;
27468 this.entry = null;
ebd8d4e8 27469
8b095871
IC
27470 this.finish = function (err) {
27471 var entry = _this.entry;
27472 _this.entry = null;
27473 while (entry) {
27474 var cb = entry.callback;
27475 state.pendingcb--;
27476 cb(err);
27477 entry = entry.next;
27478 }
27479 if (state.corkedRequestsFree) {
27480 state.corkedRequestsFree.next = _this;
27481 } else {
27482 state.corkedRequestsFree = _this;
27483 }
27484 };
27485}
27486}).call(this,require('_process'))
27487},{"./_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){
27488'use strict';
ebd8d4e8 27489
8b095871
IC
27490var Buffer = require('buffer').Buffer;
27491/*<replacement>*/
27492var bufferShim = require('buffer-shims');
27493/*</replacement>*/
ebd8d4e8 27494
8b095871 27495module.exports = BufferList;
ebd8d4e8 27496
8b095871
IC
27497function BufferList() {
27498 this.head = null;
27499 this.tail = null;
27500 this.length = 0;
27501}
ab78acc6 27502
8b095871
IC
27503BufferList.prototype.push = function (v) {
27504 var entry = { data: v, next: null };
27505 if (this.length > 0) this.tail.next = entry;else this.head = entry;
27506 this.tail = entry;
27507 ++this.length;
27508};
27509
27510BufferList.prototype.unshift = function (v) {
27511 var entry = { data: v, next: this.head };
27512 if (this.length === 0) this.tail = entry;
27513 this.head = entry;
27514 ++this.length;
27515};
ab78acc6 27516
8b095871
IC
27517BufferList.prototype.shift = function () {
27518 if (this.length === 0) return;
27519 var ret = this.head.data;
27520 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
27521 --this.length;
ab78acc6
IC
27522 return ret;
27523};
27524
8b095871
IC
27525BufferList.prototype.clear = function () {
27526 this.head = this.tail = null;
27527 this.length = 0;
27528};
ebd8d4e8 27529
8b095871
IC
27530BufferList.prototype.join = function (s) {
27531 if (this.length === 0) return '';
27532 var p = this.head;
27533 var ret = '' + p.data;
27534 while (p = p.next) {
27535 ret += s + p.data;
27536 }return ret;
27537};
ebd8d4e8 27538
8b095871
IC
27539BufferList.prototype.concat = function (n) {
27540 if (this.length === 0) return bufferShim.alloc(0);
27541 if (this.length === 1) return this.head.data;
27542 var ret = bufferShim.allocUnsafe(n >>> 0);
27543 var p = this.head;
27544 var i = 0;
27545 while (p) {
27546 p.data.copy(ret, i);
27547 i += p.data.length;
27548 p = p.next;
ebd8d4e8 27549 }
8b095871
IC
27550 return ret;
27551};
27552},{"buffer":5,"buffer-shims":4}],21:[function(require,module,exports){
27553module.exports = require("./lib/_stream_passthrough.js")
ebd8d4e8 27554
8b095871
IC
27555},{"./lib/_stream_passthrough.js":16}],22:[function(require,module,exports){
27556(function (process){
27557var Stream = (function (){
27558 try {
27559 return require('st' + 'ream'); // hack to fix a circular dependency issue when used with browserify
27560 } catch(_){}
27561}());
27562exports = module.exports = require('./lib/_stream_readable.js');
27563exports.Stream = Stream || exports;
27564exports.Readable = exports;
27565exports.Writable = require('./lib/_stream_writable.js');
27566exports.Duplex = require('./lib/_stream_duplex.js');
27567exports.Transform = require('./lib/_stream_transform.js');
27568exports.PassThrough = require('./lib/_stream_passthrough.js');
ab78acc6 27569
8b095871
IC
27570if (!process.browser && process.env.READABLE_STREAM === 'disable' && Stream) {
27571 module.exports = Stream;
ab78acc6 27572}
ebd8d4e8 27573
8b095871
IC
27574}).call(this,require('_process'))
27575},{"./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){
27576module.exports = require("./lib/_stream_transform.js")
ebd8d4e8 27577
8b095871
IC
27578},{"./lib/_stream_transform.js":18}],24:[function(require,module,exports){
27579module.exports = require("./lib/_stream_writable.js")
ab78acc6 27580
8b095871
IC
27581},{"./lib/_stream_writable.js":19}],25:[function(require,module,exports){
27582// Copyright Joyent, Inc. and other Node contributors.
27583//
27584// Permission is hereby granted, free of charge, to any person obtaining a
27585// copy of this software and associated documentation files (the
27586// "Software"), to deal in the Software without restriction, including
27587// without limitation the rights to use, copy, modify, merge, publish,
27588// distribute, sublicense, and/or sell copies of the Software, and to permit
27589// persons to whom the Software is furnished to do so, subject to the
27590// following conditions:
27591//
27592// The above copyright notice and this permission notice shall be included
27593// in all copies or substantial portions of the Software.
27594//
27595// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
27596// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27597// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
27598// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
27599// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
27600// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
27601// USE OR OTHER DEALINGS IN THE SOFTWARE.
27602
27603module.exports = Stream;
27604
27605var EE = require('events').EventEmitter;
27606var inherits = require('inherits');
27607
27608inherits(Stream, EE);
27609Stream.Readable = require('readable-stream/readable.js');
27610Stream.Writable = require('readable-stream/writable.js');
27611Stream.Duplex = require('readable-stream/duplex.js');
27612Stream.Transform = require('readable-stream/transform.js');
27613Stream.PassThrough = require('readable-stream/passthrough.js');
ebd8d4e8 27614
8b095871
IC
27615// Backwards-compat with node 0.4.x
27616Stream.Stream = Stream;
ebd8d4e8 27617
ab78acc6 27618
ab78acc6 27619
8b095871
IC
27620// old-style streams. Note that the pipe method (the only relevant
27621// part of this class) is overridden in the Readable class.
ebd8d4e8 27622
8b095871
IC
27623function Stream() {
27624 EE.call(this);
27625}
ebd8d4e8 27626
8b095871
IC
27627Stream.prototype.pipe = function(dest, options) {
27628 var source = this;
ab78acc6 27629
8b095871
IC
27630 function ondata(chunk) {
27631 if (dest.writable) {
27632 if (false === dest.write(chunk) && source.pause) {
27633 source.pause();
27634 }
ab78acc6
IC
27635 }
27636 }
27637
8b095871
IC
27638 source.on('data', ondata);
27639
27640 function ondrain() {
27641 if (source.readable && source.resume) {
27642 source.resume();
27643 }
ab78acc6
IC
27644 }
27645
ab78acc6
IC
27646 dest.on('drain', ondrain);
27647
8b095871
IC
27648 // If the 'end' option is not supplied, dest.end() will be called when
27649 // source gets the 'end' or 'close' events. Only dest.end() once.
27650 if (!dest._isStdio && (!options || options.end !== false)) {
27651 source.on('end', onend);
27652 source.on('close', onclose);
ab78acc6
IC
27653 }
27654
8b095871
IC
27655 var didOnEnd = false;
27656 function onend() {
27657 if (didOnEnd) return;
27658 didOnEnd = true;
ab78acc6 27659
8b095871 27660 dest.end();
ab78acc6 27661 }
ab78acc6
IC
27662
27663
ab78acc6 27664 function onclose() {
8b095871
IC
27665 if (didOnEnd) return;
27666 didOnEnd = true;
ebd8d4e8 27667
8b095871 27668 if (typeof dest.destroy === 'function') dest.destroy();
ebd8d4e8
IC
27669 }
27670
8b095871
IC
27671 // don't leave dangling pipes when there are errors.
27672 function onerror(er) {
27673 cleanup();
27674 if (EE.listenerCount(this, 'error') === 0) {
27675 throw er; // Unhandled stream error in pipe.
27676 }
ebd8d4e8
IC
27677 }
27678
8b095871
IC
27679 source.on('error', onerror);
27680 dest.on('error', onerror);
ab78acc6 27681
8b095871
IC
27682 // remove all the event listeners that were added.
27683 function cleanup() {
27684 source.removeListener('data', ondata);
27685 dest.removeListener('drain', ondrain);
ab78acc6 27686
8b095871
IC
27687 source.removeListener('end', onend);
27688 source.removeListener('close', onclose);
ab78acc6 27689
8b095871
IC
27690 source.removeListener('error', onerror);
27691 dest.removeListener('error', onerror);
ab78acc6 27692
8b095871
IC
27693 source.removeListener('end', cleanup);
27694 source.removeListener('close', cleanup);
ab78acc6 27695
8b095871
IC
27696 dest.removeListener('close', cleanup);
27697 }
ab78acc6 27698
8b095871
IC
27699 source.on('end', cleanup);
27700 source.on('close', cleanup);
ab78acc6 27701
8b095871 27702 dest.on('close', cleanup);
ebd8d4e8 27703
8b095871 27704 dest.emit('pipe', source);
ab78acc6 27705
8b095871
IC
27706 // Allow for unix-like usage: A.pipe(B).pipe(C)
27707 return dest;
27708};
ab78acc6 27709
8b095871
IC
27710},{"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){
27711// Copyright Joyent, Inc. and other Node contributors.
27712//
27713// Permission is hereby granted, free of charge, to any person obtaining a
27714// copy of this software and associated documentation files (the
27715// "Software"), to deal in the Software without restriction, including
27716// without limitation the rights to use, copy, modify, merge, publish,
27717// distribute, sublicense, and/or sell copies of the Software, and to permit
27718// persons to whom the Software is furnished to do so, subject to the
27719// following conditions:
27720//
27721// The above copyright notice and this permission notice shall be included
27722// in all copies or substantial portions of the Software.
27723//
27724// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
27725// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27726// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
27727// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
27728// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
27729// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
27730// USE OR OTHER DEALINGS IN THE SOFTWARE.
27731
27732var Buffer = require('buffer').Buffer;
ebd8d4e8 27733
8b095871
IC
27734var isBufferEncoding = Buffer.isEncoding
27735 || function(encoding) {
27736 switch (encoding && encoding.toLowerCase()) {
27737 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;
27738 default: return false;
27739 }
27740 }
ab78acc6 27741
ab78acc6 27742
8b095871
IC
27743function assertEncoding(encoding) {
27744 if (encoding && !isBufferEncoding(encoding)) {
27745 throw new Error('Unknown encoding: ' + encoding);
27746 }
27747}
ebd8d4e8 27748
8b095871
IC
27749// StringDecoder provides an interface for efficiently splitting a series of
27750// buffers into a series of JS strings without breaking apart multi-byte
27751// characters. CESU-8 is handled as part of the UTF-8 encoding.
27752//
27753// @TODO Handling all encodings inside a single object makes it very difficult
27754// to reason about this code, so it should be split up in the future.
27755// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
27756// points as used by CESU-8.
27757var StringDecoder = exports.StringDecoder = function(encoding) {
27758 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
27759 assertEncoding(encoding);
27760 switch (this.encoding) {
27761 case 'utf8':
27762 // CESU-8 represents each of Surrogate Pair by 3-bytes
27763 this.surrogateSize = 3;
27764 break;
27765 case 'ucs2':
27766 case 'utf16le':
27767 // UTF-16 represents each of Surrogate Pair by 2-bytes
27768 this.surrogateSize = 2;
27769 this.detectIncompleteChar = utf16DetectIncompleteChar;
27770 break;
27771 case 'base64':
27772 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
27773 this.surrogateSize = 3;
27774 this.detectIncompleteChar = base64DetectIncompleteChar;
27775 break;
27776 default:
27777 this.write = passThroughWrite;
27778 return;
27779 }
27780
27781 // Enough space to store all bytes of a single character. UTF-8 needs 4
27782 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
27783 this.charBuffer = new Buffer(6);
27784 // Number of bytes received for the current incomplete multi-byte character.
27785 this.charReceived = 0;
27786 // Number of bytes expected for the current incomplete multi-byte character.
27787 this.charLength = 0;
ab78acc6
IC
27788};
27789
ab78acc6 27790
8b095871
IC
27791// write decodes the given buffer and returns it as JS string that is
27792// guaranteed to not contain any partial multi-byte characters. Any partial
27793// character found at the end of the buffer is buffered up, and will be
27794// returned when calling write again with the remaining bytes.
27795//
27796// Note: Converting a Buffer containing an orphan surrogate to a String
27797// currently works, but converting a String to a Buffer (via `new Buffer`, or
27798// Buffer#write) will replace incomplete surrogates with the unicode
27799// replacement character. See https://codereview.chromium.org/121173009/ .
27800StringDecoder.prototype.write = function(buffer) {
27801 var charStr = '';
27802 // if our last write ended with an incomplete multibyte character
27803 while (this.charLength) {
27804 // determine how many remaining bytes this buffer has to offer for this char
27805 var available = (buffer.length >= this.charLength - this.charReceived) ?
27806 this.charLength - this.charReceived :
27807 buffer.length;
ab78acc6 27808
8b095871
IC
27809 // add the new bytes to the char buffer
27810 buffer.copy(this.charBuffer, this.charReceived, 0, available);
27811 this.charReceived += available;
27812
27813 if (this.charReceived < this.charLength) {
27814 // still not enough chars in this buffer? wait for more ...
27815 return '';
ebd8d4e8 27816 }
ebd8d4e8 27817
8b095871
IC
27818 // remove bytes belonging to the current character from the buffer
27819 buffer = buffer.slice(available, buffer.length);
ab78acc6 27820
8b095871
IC
27821 // get the character that was split
27822 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
27823
27824 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
27825 var charCode = charStr.charCodeAt(charStr.length - 1);
27826 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
27827 this.charLength += this.surrogateSize;
27828 charStr = '';
27829 continue;
ab78acc6 27830 }
8b095871 27831 this.charReceived = this.charLength = 0;
ebd8d4e8 27832
8b095871
IC
27833 // if there are no more bytes in this buffer, just emit our char
27834 if (buffer.length === 0) {
27835 return charStr;
27836 }
27837 break;
ebd8d4e8 27838 }
ebd8d4e8 27839
8b095871
IC
27840 // determine and set charLength / charReceived
27841 this.detectIncompleteChar(buffer);
ebd8d4e8 27842
8b095871
IC
27843 var end = buffer.length;
27844 if (this.charLength) {
27845 // buffer the incomplete character bytes we got
27846 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
27847 end -= this.charReceived;
ab78acc6 27848 }
ebd8d4e8 27849
8b095871
IC
27850 charStr += buffer.toString(this.encoding, 0, end);
27851
27852 var end = charStr.length - 1;
27853 var charCode = charStr.charCodeAt(end);
27854 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
27855 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
27856 var size = this.surrogateSize;
27857 this.charLength += size;
27858 this.charReceived += size;
27859 this.charBuffer.copy(this.charBuffer, size, 0, size);
27860 buffer.copy(this.charBuffer, 0, 0, size);
27861 return charStr.substring(0, end);
ab78acc6 27862 }
ebd8d4e8 27863
8b095871
IC
27864 // or just emit the charStr
27865 return charStr;
27866};
ebd8d4e8 27867
8b095871
IC
27868// detectIncompleteChar determines if there is an incomplete UTF-8 character at
27869// the end of the given buffer. If so, it sets this.charLength to the byte
27870// length that character, and sets this.charReceived to the number of bytes
27871// that are available for this character.
27872StringDecoder.prototype.detectIncompleteChar = function(buffer) {
27873 // determine how many bytes we have to check at the end of this buffer
27874 var i = (buffer.length >= 3) ? 3 : buffer.length;
ab78acc6 27875
8b095871
IC
27876 // Figure out if one of the last i bytes of our buffer announces an
27877 // incomplete char.
27878 for (; i > 0; i--) {
27879 var c = buffer[buffer.length - i];
ebd8d4e8 27880
8b095871 27881 // See http://en.wikipedia.org/wiki/UTF-8#Description
ebd8d4e8 27882
8b095871
IC
27883 // 110XXXXX
27884 if (i == 1 && c >> 5 == 0x06) {
27885 this.charLength = 2;
27886 break;
ebd8d4e8 27887 }
ab78acc6 27888
8b095871
IC
27889 // 1110XXXX
27890 if (i <= 2 && c >> 4 == 0x0E) {
27891 this.charLength = 3;
27892 break;
27893 }
27894
27895 // 11110XXX
27896 if (i <= 3 && c >> 3 == 0x1E) {
27897 this.charLength = 4;
27898 break;
ebd8d4e8
IC
27899 }
27900 }
8b095871
IC
27901 this.charReceived = i;
27902};
ab78acc6 27903
8b095871
IC
27904StringDecoder.prototype.end = function(buffer) {
27905 var res = '';
27906 if (buffer && buffer.length)
27907 res = this.write(buffer);
ab78acc6 27908
8b095871
IC
27909 if (this.charReceived) {
27910 var cr = this.charReceived;
27911 var buf = this.charBuffer;
27912 var enc = this.encoding;
27913 res += buf.slice(0, cr).toString(enc);
27914 }
ab78acc6 27915
8b095871 27916 return res;
ab78acc6
IC
27917};
27918
8b095871
IC
27919function passThroughWrite(buffer) {
27920 return buffer.toString(this.encoding);
27921}
ab78acc6 27922
8b095871
IC
27923function utf16DetectIncompleteChar(buffer) {
27924 this.charReceived = buffer.length % 2;
27925 this.charLength = this.charReceived ? 2 : 0;
27926}
ab78acc6 27927
8b095871
IC
27928function base64DetectIncompleteChar(buffer) {
27929 this.charReceived = buffer.length % 3;
27930 this.charLength = this.charReceived ? 3 : 0;
27931}
ab78acc6 27932
8b095871
IC
27933},{"buffer":5}],27:[function(require,module,exports){
27934(function (global){
ab78acc6 27935
8b095871
IC
27936/**
27937 * Module exports.
27938 */
ebd8d4e8 27939
8b095871 27940module.exports = deprecate;
ebd8d4e8 27941
8b095871
IC
27942/**
27943 * Mark that a method should not be used.
27944 * Returns a modified function which warns once by default.
27945 *
27946 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
27947 *
27948 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
27949 * will throw an Error when invoked.
27950 *
27951 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
27952 * will invoke `console.trace()` instead of `console.error()`.
27953 *
27954 * @param {Function} fn - the function to deprecate
27955 * @param {String} msg - the string to print to the console when `fn` is invoked
27956 * @returns {Function} a new "deprecated" version of `fn`
27957 * @api public
27958 */
ebd8d4e8 27959
8b095871
IC
27960function deprecate (fn, msg) {
27961 if (config('noDeprecation')) {
27962 return fn;
27963 }
ebd8d4e8 27964
8b095871
IC
27965 var warned = false;
27966 function deprecated() {
27967 if (!warned) {
27968 if (config('throwDeprecation')) {
27969 throw new Error(msg);
27970 } else if (config('traceDeprecation')) {
27971 console.trace(msg);
27972 } else {
27973 console.warn(msg);
ab78acc6 27974 }
8b095871 27975 warned = true;
ab78acc6 27976 }
8b095871 27977 return fn.apply(this, arguments);
ebd8d4e8
IC
27978 }
27979
8b095871 27980 return deprecated;
ebd8d4e8
IC
27981}
27982
8b095871
IC
27983/**
27984 * Checks `localStorage` for boolean values for the given `name`.
27985 *
27986 * @param {String} name
27987 * @returns {Boolean}
27988 * @api private
27989 */
ebd8d4e8 27990
8b095871
IC
27991function config (name) {
27992 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
27993 try {
27994 if (!global.localStorage) return false;
27995 } catch (_) {
27996 return false;
ab78acc6 27997 }
8b095871
IC
27998 var val = global.localStorage[name];
27999 if (null == val) return false;
28000 return String(val).toLowerCase() === 'true';
ebd8d4e8 28001}
ebd8d4e8 28002
8b095871
IC
28003}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
28004},{}],28:[function(require,module,exports){
28005arguments[4][9][0].apply(exports,arguments)
28006},{"dup":9}],29:[function(require,module,exports){
28007module.exports = function isBuffer(arg) {
28008 return arg && typeof arg === 'object'
28009 && typeof arg.copy === 'function'
28010 && typeof arg.fill === 'function'
28011 && typeof arg.readUInt8 === 'function';
ebd8d4e8 28012}
8b095871
IC
28013},{}],30:[function(require,module,exports){
28014(function (process,global){
ab78acc6
IC
28015// Copyright Joyent, Inc. and other Node contributors.
28016//
28017// Permission is hereby granted, free of charge, to any person obtaining a
28018// copy of this software and associated documentation files (the
28019// "Software"), to deal in the Software without restriction, including
28020// without limitation the rights to use, copy, modify, merge, publish,
28021// distribute, sublicense, and/or sell copies of the Software, and to permit
28022// persons to whom the Software is furnished to do so, subject to the
28023// following conditions:
28024//
28025// The above copyright notice and this permission notice shall be included
28026// in all copies or substantial portions of the Software.
28027//
28028// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
28029// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
28030// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
28031// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
28032// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
28033// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
28034// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 28035
8b095871
IC
28036var formatRegExp = /%[sdj%]/g;
28037exports.format = function(f) {
28038 if (!isString(f)) {
28039 var objects = [];
28040 for (var i = 0; i < arguments.length; i++) {
28041 objects.push(inspect(arguments[i]));
28042 }
28043 return objects.join(' ');
28044 }
ebd8d4e8 28045
8b095871
IC
28046 var i = 1;
28047 var args = arguments;
28048 var len = args.length;
28049 var str = String(f).replace(formatRegExp, function(x) {
28050 if (x === '%%') return '%';
28051 if (i >= len) return x;
28052 switch (x) {
28053 case '%s': return String(args[i++]);
28054 case '%d': return Number(args[i++]);
28055 case '%j':
28056 try {
28057 return JSON.stringify(args[i++]);
28058 } catch (_) {
28059 return '[Circular]';
28060 }
28061 default:
28062 return x;
28063 }
28064 });
28065 for (var x = args[i]; i < len; x = args[++i]) {
28066 if (isNull(x) || !isObject(x)) {
28067 str += ' ' + x;
28068 } else {
28069 str += ' ' + inspect(x);
28070 }
28071 }
28072 return str;
28073};
ebd8d4e8 28074
ebd8d4e8 28075
8b095871
IC
28076// Mark that a method should not be used.
28077// Returns a modified function which warns once by default.
28078// If --no-deprecation is set, then it is a no-op.
28079exports.deprecate = function(fn, msg) {
28080 // Allow for deprecating things in the process of starting up.
28081 if (isUndefined(global.process)) {
28082 return function() {
28083 return exports.deprecate(fn, msg).apply(this, arguments);
28084 };
28085 }
28086
28087 if (process.noDeprecation === true) {
28088 return fn;
28089 }
28090
28091 var warned = false;
28092 function deprecated() {
28093 if (!warned) {
28094 if (process.throwDeprecation) {
28095 throw new Error(msg);
28096 } else if (process.traceDeprecation) {
28097 console.trace(msg);
28098 } else {
28099 console.error(msg);
28100 }
28101 warned = true;
28102 }
28103 return fn.apply(this, arguments);
28104 }
28105
28106 return deprecated;
28107};
ebd8d4e8 28108
ab78acc6 28109
8b095871
IC
28110var debugs = {};
28111var debugEnviron;
28112exports.debuglog = function(set) {
28113 if (isUndefined(debugEnviron))
28114 debugEnviron = process.env.NODE_DEBUG || '';
28115 set = set.toUpperCase();
28116 if (!debugs[set]) {
28117 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
28118 var pid = process.pid;
28119 debugs[set] = function() {
28120 var msg = exports.format.apply(exports, arguments);
28121 console.error('%s %d: %s', set, pid, msg);
28122 };
28123 } else {
28124 debugs[set] = function() {};
28125 }
28126 }
28127 return debugs[set];
28128};
ab78acc6
IC
28129
28130
8b095871
IC
28131/**
28132 * Echos the value of a value. Trys to print the value out
28133 * in the best way possible given the different types.
28134 *
28135 * @param {Object} obj The object to print out.
28136 * @param {Object} opts Optional options object that alters the output.
28137 */
28138/* legacy: obj, showHidden, depth, colors*/
28139function inspect(obj, opts) {
28140 // default options
28141 var ctx = {
28142 seen: [],
28143 stylize: stylizeNoColor
ab78acc6 28144 };
8b095871
IC
28145 // legacy...
28146 if (arguments.length >= 3) ctx.depth = arguments[2];
28147 if (arguments.length >= 4) ctx.colors = arguments[3];
28148 if (isBoolean(opts)) {
28149 // legacy...
28150 ctx.showHidden = opts;
28151 } else if (opts) {
28152 // got an "options" object
28153 exports._extend(ctx, opts);
28154 }
28155 // set default options
28156 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
28157 if (isUndefined(ctx.depth)) ctx.depth = 2;
28158 if (isUndefined(ctx.colors)) ctx.colors = false;
28159 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
28160 if (ctx.colors) ctx.stylize = stylizeWithColor;
28161 return formatValue(ctx, obj, ctx.depth);
ebd8d4e8 28162}
8b095871 28163exports.inspect = inspect;
ebd8d4e8 28164
ab78acc6 28165
8b095871
IC
28166// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
28167inspect.colors = {
28168 'bold' : [1, 22],
28169 'italic' : [3, 23],
28170 'underline' : [4, 24],
28171 'inverse' : [7, 27],
28172 'white' : [37, 39],
28173 'grey' : [90, 39],
28174 'black' : [30, 39],
28175 'blue' : [34, 39],
28176 'cyan' : [36, 39],
28177 'green' : [32, 39],
28178 'magenta' : [35, 39],
28179 'red' : [31, 39],
28180 'yellow' : [33, 39]
28181};
ab78acc6 28182
8b095871
IC
28183// Don't use 'blue' not visible on cmd.exe
28184inspect.styles = {
28185 'special': 'cyan',
28186 'number': 'yellow',
28187 'boolean': 'yellow',
28188 'undefined': 'grey',
28189 'null': 'bold',
28190 'string': 'green',
28191 'date': 'magenta',
28192 // "name": intentionally not styling
28193 'regexp': 'red'
28194};
ab78acc6 28195
ab78acc6 28196
8b095871
IC
28197function stylizeWithColor(str, styleType) {
28198 var style = inspect.styles[styleType];
ab78acc6 28199
8b095871
IC
28200 if (style) {
28201 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
28202 '\u001b[' + inspect.colors[style][1] + 'm';
28203 } else {
28204 return str;
ab78acc6 28205 }
ebd8d4e8 28206}
ebd8d4e8 28207
ab78acc6 28208
8b095871
IC
28209function stylizeNoColor(str, styleType) {
28210 return str;
28211}
ab78acc6 28212
ab78acc6 28213
8b095871
IC
28214function arrayToHash(array) {
28215 var hash = {};
ab78acc6 28216
8b095871
IC
28217 array.forEach(function(val, idx) {
28218 hash[val] = true;
ab78acc6 28219 });
ebd8d4e8 28220
8b095871
IC
28221 return hash;
28222}
ab78acc6 28223
ab78acc6 28224
8b095871
IC
28225function formatValue(ctx, value, recurseTimes) {
28226 // Provide a hook for user-specified inspect functions.
28227 // Check that value is an object with an inspect function on it
28228 if (ctx.customInspect &&
28229 value &&
28230 isFunction(value.inspect) &&
28231 // Filter out the util module, it's inspect function is special
28232 value.inspect !== exports.inspect &&
28233 // Also filter out any prototype objects using the circular check.
28234 !(value.constructor && value.constructor.prototype === value)) {
28235 var ret = value.inspect(recurseTimes, ctx);
28236 if (!isString(ret)) {
28237 ret = formatValue(ctx, ret, recurseTimes);
28238 }
28239 return ret;
ab78acc6 28240 }
ebd8d4e8 28241
8b095871
IC
28242 // Primitive types cannot have properties
28243 var primitive = formatPrimitive(ctx, value);
28244 if (primitive) {
28245 return primitive;
ab78acc6 28246 }
ebd8d4e8 28247
8b095871
IC
28248 // Look up the keys of the object.
28249 var keys = Object.keys(value);
28250 var visibleKeys = arrayToHash(keys);
ebd8d4e8 28251
8b095871
IC
28252 if (ctx.showHidden) {
28253 keys = Object.getOwnPropertyNames(value);
28254 }
ebd8d4e8 28255
8b095871
IC
28256 // IE doesn't make error fields non-enumerable
28257 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
28258 if (isError(value)
28259 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
28260 return formatError(value);
28261 }
ebd8d4e8 28262
8b095871
IC
28263 // Some type of object without properties can be shortcutted.
28264 if (keys.length === 0) {
28265 if (isFunction(value)) {
28266 var name = value.name ? ': ' + value.name : '';
28267 return ctx.stylize('[Function' + name + ']', 'special');
28268 }
28269 if (isRegExp(value)) {
28270 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
28271 }
28272 if (isDate(value)) {
28273 return ctx.stylize(Date.prototype.toString.call(value), 'date');
28274 }
28275 if (isError(value)) {
28276 return formatError(value);
28277 }
28278 }
ab78acc6 28279
8b095871 28280 var base = '', array = false, braces = ['{', '}'];
ab78acc6 28281
8b095871
IC
28282 // Make Array say that they are Array
28283 if (isArray(value)) {
28284 array = true;
28285 braces = ['[', ']'];
28286 }
ebd8d4e8 28287
8b095871
IC
28288 // Make functions say that they are functions
28289 if (isFunction(value)) {
28290 var n = value.name ? ': ' + value.name : '';
28291 base = ' [Function' + n + ']';
28292 }
ebd8d4e8 28293
8b095871
IC
28294 // Make RegExps say that they are RegExps
28295 if (isRegExp(value)) {
28296 base = ' ' + RegExp.prototype.toString.call(value);
28297 }
ebd8d4e8 28298
8b095871
IC
28299 // Make dates with properties first say the date
28300 if (isDate(value)) {
28301 base = ' ' + Date.prototype.toUTCString.call(value);
28302 }
ebd8d4e8 28303
8b095871
IC
28304 // Make error with message first say the error
28305 if (isError(value)) {
28306 base = ' ' + formatError(value);
28307 }
ebd8d4e8 28308
8b095871
IC
28309 if (keys.length === 0 && (!array || value.length == 0)) {
28310 return braces[0] + base + braces[1];
28311 }
ebd8d4e8 28312
8b095871
IC
28313 if (recurseTimes < 0) {
28314 if (isRegExp(value)) {
28315 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
28316 } else {
28317 return ctx.stylize('[Object]', 'special');
28318 }
28319 }
ebd8d4e8 28320
8b095871 28321 ctx.seen.push(value);
ebd8d4e8 28322
8b095871
IC
28323 var output;
28324 if (array) {
28325 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
28326 } else {
28327 output = keys.map(function(key) {
28328 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
28329 });
28330 }
ebd8d4e8 28331
8b095871 28332 ctx.seen.pop();
ebd8d4e8 28333
8b095871 28334 return reduceToSingleString(output, base, braces);
ebd8d4e8
IC
28335}
28336
ebd8d4e8 28337
8b095871
IC
28338function formatPrimitive(ctx, value) {
28339 if (isUndefined(value))
28340 return ctx.stylize('undefined', 'undefined');
28341 if (isString(value)) {
28342 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
28343 .replace(/'/g, "\\'")
28344 .replace(/\\"/g, '"') + '\'';
28345 return ctx.stylize(simple, 'string');
28346 }
28347 if (isNumber(value))
28348 return ctx.stylize('' + value, 'number');
28349 if (isBoolean(value))
28350 return ctx.stylize('' + value, 'boolean');
28351 // For some reason typeof null is "object", so special case here.
28352 if (isNull(value))
28353 return ctx.stylize('null', 'null');
28354}
ebd8d4e8 28355
ebd8d4e8 28356
8b095871
IC
28357function formatError(value) {
28358 return '[' + Error.prototype.toString.call(value) + ']';
28359}
ebd8d4e8 28360
ebd8d4e8 28361
8b095871
IC
28362function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
28363 var output = [];
28364 for (var i = 0, l = value.length; i < l; ++i) {
28365 if (hasOwnProperty(value, String(i))) {
28366 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
28367 String(i), true));
28368 } else {
28369 output.push('');
28370 }
28371 }
28372 keys.forEach(function(key) {
28373 if (!key.match(/^\d+$/)) {
28374 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
28375 key, true));
28376 }
28377 });
28378 return output;
28379}
ebd8d4e8 28380
ebd8d4e8 28381
8b095871
IC
28382function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
28383 var name, str, desc;
28384 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
28385 if (desc.get) {
28386 if (desc.set) {
28387 str = ctx.stylize('[Getter/Setter]', 'special');
28388 } else {
28389 str = ctx.stylize('[Getter]', 'special');
28390 }
28391 } else {
28392 if (desc.set) {
28393 str = ctx.stylize('[Setter]', 'special');
28394 }
28395 }
28396 if (!hasOwnProperty(visibleKeys, key)) {
28397 name = '[' + key + ']';
28398 }
28399 if (!str) {
28400 if (ctx.seen.indexOf(desc.value) < 0) {
28401 if (isNull(recurseTimes)) {
28402 str = formatValue(ctx, desc.value, null);
28403 } else {
28404 str = formatValue(ctx, desc.value, recurseTimes - 1);
28405 }
28406 if (str.indexOf('\n') > -1) {
28407 if (array) {
28408 str = str.split('\n').map(function(line) {
28409 return ' ' + line;
28410 }).join('\n').substr(2);
28411 } else {
28412 str = '\n' + str.split('\n').map(function(line) {
28413 return ' ' + line;
28414 }).join('\n');
28415 }
28416 }
28417 } else {
28418 str = ctx.stylize('[Circular]', 'special');
28419 }
28420 }
28421 if (isUndefined(name)) {
28422 if (array && key.match(/^\d+$/)) {
28423 return str;
28424 }
28425 name = JSON.stringify('' + key);
28426 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
28427 name = name.substr(1, name.length - 2);
28428 name = ctx.stylize(name, 'name');
28429 } else {
28430 name = name.replace(/'/g, "\\'")
28431 .replace(/\\"/g, '"')
28432 .replace(/(^"|"$)/g, "'");
28433 name = ctx.stylize(name, 'string');
28434 }
28435 }
ebd8d4e8 28436
8b095871
IC
28437 return name + ': ' + str;
28438}
ebd8d4e8 28439
ebd8d4e8 28440
8b095871
IC
28441function reduceToSingleString(output, base, braces) {
28442 var numLinesEst = 0;
28443 var length = output.reduce(function(prev, cur) {
28444 numLinesEst++;
28445 if (cur.indexOf('\n') >= 0) numLinesEst++;
28446 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
28447 }, 0);
ebd8d4e8 28448
8b095871
IC
28449 if (length > 60) {
28450 return braces[0] +
28451 (base === '' ? '' : base + '\n ') +
28452 ' ' +
28453 output.join(',\n ') +
28454 ' ' +
28455 braces[1];
28456 }
ebd8d4e8 28457
8b095871
IC
28458 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
28459}
ebd8d4e8 28460
ebd8d4e8 28461
8b095871
IC
28462// NOTE: These type checking functions intentionally don't use `instanceof`
28463// because it is fragile and can be easily faked with `Object.create()`.
28464function isArray(ar) {
28465 return Array.isArray(ar);
28466}
28467exports.isArray = isArray;
ebd8d4e8 28468
8b095871
IC
28469function isBoolean(arg) {
28470 return typeof arg === 'boolean';
28471}
28472exports.isBoolean = isBoolean;
ebd8d4e8 28473
8b095871
IC
28474function isNull(arg) {
28475 return arg === null;
28476}
28477exports.isNull = isNull;
ebd8d4e8 28478
8b095871
IC
28479function isNullOrUndefined(arg) {
28480 return arg == null;
ebd8d4e8 28481}
8b095871 28482exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 28483
8b095871
IC
28484function isNumber(arg) {
28485 return typeof arg === 'number';
28486}
28487exports.isNumber = isNumber;
ebd8d4e8 28488
8b095871
IC
28489function isString(arg) {
28490 return typeof arg === 'string';
28491}
28492exports.isString = isString;
ebd8d4e8 28493
8b095871
IC
28494function isSymbol(arg) {
28495 return typeof arg === 'symbol';
28496}
28497exports.isSymbol = isSymbol;
ebd8d4e8 28498
8b095871
IC
28499function isUndefined(arg) {
28500 return arg === void 0;
28501}
28502exports.isUndefined = isUndefined;
ebd8d4e8 28503
8b095871
IC
28504function isRegExp(re) {
28505 return isObject(re) && objectToString(re) === '[object RegExp]';
ebd8d4e8 28506}
8b095871 28507exports.isRegExp = isRegExp;
ebd8d4e8 28508
8b095871
IC
28509function isObject(arg) {
28510 return typeof arg === 'object' && arg !== null;
28511}
28512exports.isObject = isObject;
ebd8d4e8 28513
8b095871
IC
28514function isDate(d) {
28515 return isObject(d) && objectToString(d) === '[object Date]';
28516}
28517exports.isDate = isDate;
ebd8d4e8 28518
8b095871
IC
28519function isError(e) {
28520 return isObject(e) &&
28521 (objectToString(e) === '[object Error]' || e instanceof Error);
ebd8d4e8 28522}
8b095871 28523exports.isError = isError;
ebd8d4e8 28524
8b095871
IC
28525function isFunction(arg) {
28526 return typeof arg === 'function';
ebd8d4e8 28527}
8b095871 28528exports.isFunction = isFunction;
ebd8d4e8 28529
8b095871
IC
28530function isPrimitive(arg) {
28531 return arg === null ||
28532 typeof arg === 'boolean' ||
28533 typeof arg === 'number' ||
28534 typeof arg === 'string' ||
28535 typeof arg === 'symbol' || // ES6 symbol
28536 typeof arg === 'undefined';
28537}
28538exports.isPrimitive = isPrimitive;
ebd8d4e8 28539
8b095871 28540exports.isBuffer = require('./support/isBuffer');
ebd8d4e8 28541
8b095871
IC
28542function objectToString(o) {
28543 return Object.prototype.toString.call(o);
28544}
ab78acc6 28545
ab78acc6 28546
8b095871
IC
28547function pad(n) {
28548 return n < 10 ? '0' + n.toString(10) : n.toString(10);
28549}
ebd8d4e8 28550
ab78acc6 28551
8b095871
IC
28552var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
28553 'Oct', 'Nov', 'Dec'];
ab78acc6 28554
8b095871
IC
28555// 26 Feb 16:19:34
28556function timestamp() {
28557 var d = new Date();
28558 var time = [pad(d.getHours()),
28559 pad(d.getMinutes()),
28560 pad(d.getSeconds())].join(':');
28561 return [d.getDate(), months[d.getMonth()], time].join(' ');
28562}
28563
28564
28565// log is just a thin wrapper to console.log that prepends a timestamp
28566exports.log = function() {
28567 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
ab78acc6 28568};
ebd8d4e8 28569
ebd8d4e8 28570
8b095871
IC
28571/**
28572 * Inherit the prototype methods from one constructor into another.
28573 *
28574 * The Function.prototype.inherits from lang.js rewritten as a standalone
28575 * function (not on Function.prototype). NOTE: If this file is to be loaded
28576 * during bootstrapping this function needs to be rewritten using some native
28577 * functions as prototype setup using normal JavaScript does not work as
28578 * expected during bootstrapping (see mirror.js in r114903).
28579 *
28580 * @param {function} ctor Constructor function which needs to inherit the
28581 * prototype.
28582 * @param {function} superCtor Constructor function to inherit prototype from.
28583 */
28584exports.inherits = require('inherits');
ebd8d4e8 28585
8b095871
IC
28586exports._extend = function(origin, add) {
28587 // Don't do anything if add isn't an object
28588 if (!add || !isObject(add)) return origin;
28589
28590 var keys = Object.keys(add);
28591 var i = keys.length;
28592 while (i--) {
28593 origin[keys[i]] = add[keys[i]];
ebd8d4e8 28594 }
8b095871 28595 return origin;
ab78acc6 28596};
ebd8d4e8 28597
8b095871
IC
28598function hasOwnProperty(obj, prop) {
28599 return Object.prototype.hasOwnProperty.call(obj, prop);
ebd8d4e8
IC
28600}
28601
8b095871
IC
28602}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
28603},{"./support/isBuffer":29,"_process":13,"inherits":28}],31:[function(require,module,exports){
28604(function (Buffer){
28605const createKeccakHash = require('keccak')
28606const secp256k1 = require('secp256k1')
28607const assert = require('assert')
28608const rlp = require('rlp')
28609const BN = require('bn.js')
28610const createHash = require('create-hash')
28611Object.assign(exports, require('ethjs-util'))
ab78acc6 28612
8b095871
IC
28613/**
28614 * the max integer that this VM can handle (a ```BN```)
28615 * @var {BN} MAX_INTEGER
28616 */
28617exports.MAX_INTEGER = new BN('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)
ab78acc6 28618
8b095871
IC
28619/**
28620 * 2^256 (a ```BN```)
28621 * @var {BN} TWO_POW256
28622 */
28623exports.TWO_POW256 = new BN('10000000000000000000000000000000000000000000000000000000000000000', 16)
ab78acc6 28624
8b095871
IC
28625/**
28626 * SHA3-256 hash of null (a ```String```)
28627 * @var {String} SHA3_NULL_S
28628 */
28629exports.SHA3_NULL_S = 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'
ebd8d4e8 28630
8b095871
IC
28631/**
28632 * SHA3-256 hash of null (a ```Buffer```)
28633 * @var {Buffer} SHA3_NULL
28634 */
28635exports.SHA3_NULL = Buffer.from(exports.SHA3_NULL_S, 'hex')
ebd8d4e8 28636
8b095871
IC
28637/**
28638 * SHA3-256 of an RLP of an empty array (a ```String```)
28639 * @var {String} SHA3_RLP_ARRAY_S
28640 */
28641exports.SHA3_RLP_ARRAY_S = '1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347'
ebd8d4e8 28642
8b095871
IC
28643/**
28644 * SHA3-256 of an RLP of an empty array (a ```Buffer```)
28645 * @var {Buffer} SHA3_RLP_ARRAY
28646 */
28647exports.SHA3_RLP_ARRAY = Buffer.from(exports.SHA3_RLP_ARRAY_S, 'hex')
ebd8d4e8 28648
8b095871
IC
28649/**
28650 * SHA3-256 hash of the RLP of null (a ```String```)
28651 * @var {String} SHA3_RLP_S
28652 */
28653exports.SHA3_RLP_S = '56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421'
ebd8d4e8 28654
8b095871
IC
28655/**
28656 * SHA3-256 hash of the RLP of null (a ```Buffer```)
28657 * @var {Buffer} SHA3_RLP
28658 */
28659exports.SHA3_RLP = Buffer.from(exports.SHA3_RLP_S, 'hex')
ebd8d4e8 28660
8b095871
IC
28661/**
28662 * [`BN`](https://github.com/indutny/bn.js)
28663 * @var {Function}
28664 */
28665exports.BN = BN
ebd8d4e8 28666
8b095871
IC
28667/**
28668 * [`rlp`](https://github.com/ethereumjs/rlp)
28669 * @var {Function}
28670 */
28671exports.rlp = rlp
ebd8d4e8 28672
8b095871
IC
28673/**
28674 * [`secp256k1`](https://github.com/cryptocoinjs/secp256k1-node/)
28675 * @var {Object}
28676 */
28677exports.secp256k1 = secp256k1
ab78acc6 28678
8b095871
IC
28679/**
28680 * Returns a buffer filled with 0s
28681 * @method zeros
28682 * @param {Number} bytes the number of bytes the buffer should be
28683 * @return {Buffer}
28684 */
28685exports.zeros = function (bytes) {
28686 return Buffer.allocUnsafe(bytes).fill(0)
28687}
28688
28689/**
28690 * Left Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
28691 * Or it truncates the beginning if it exceeds.
28692 * @method lsetLength
28693 * @param {Buffer|Array} msg the value to pad
28694 * @param {Number} length the number of bytes the output should be
28695 * @param {Boolean} [right=false] whether to start padding form the left or right
28696 * @return {Buffer|Array}
28697 */
28698exports.setLengthLeft = exports.setLength = function (msg, length, right) {
28699 var buf = exports.zeros(length)
28700 msg = exports.toBuffer(msg)
28701 if (right) {
28702 if (msg.length < length) {
28703 msg.copy(buf)
28704 return buf
28705 }
28706 return msg.slice(0, length)
28707 } else {
28708 if (msg.length < length) {
28709 msg.copy(buf, length - msg.length)
28710 return buf
ebd8d4e8 28711 }
8b095871 28712 return msg.slice(-length)
ebd8d4e8
IC
28713 }
28714}
28715
8b095871
IC
28716/**
28717 * Right Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
28718 * Or it truncates the beginning if it exceeds.
28719 * @param {Buffer|Array} msg the value to pad
28720 * @param {Number} length the number of bytes the output should be
28721 * @return {Buffer|Array}
28722 */
28723exports.setLengthRight = function (msg, length) {
28724 return exports.setLength(msg, length, true)
ab78acc6
IC
28725}
28726
8b095871
IC
28727/**
28728 * Trims leading zeros from a `Buffer` or an `Array`
28729 * @param {Buffer|Array|String} a
28730 * @return {Buffer|Array|String}
28731 */
28732exports.unpad = exports.stripZeros = function (a) {
28733 a = exports.stripHexPrefix(a)
28734 var first = a[0]
28735 while (a.length > 0 && first.toString() === '0') {
28736 a = a.slice(1)
28737 first = a[0]
28738 }
28739 return a
28740}
28741/**
28742 * 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.
28743 * @param {*} v the value
28744 */
28745exports.toBuffer = function (v) {
28746 if (!Buffer.isBuffer(v)) {
28747 if (Array.isArray(v)) {
28748 v = Buffer.from(v)
28749 } else if (typeof v === 'string') {
28750 if (exports.isHexPrefixed(v)) {
28751 v = Buffer.from(exports.padToEven(exports.stripHexPrefix(v)), 'hex')
28752 } else {
28753 v = Buffer.from(v)
28754 }
28755 } else if (typeof v === 'number') {
28756 v = exports.intToBuffer(v)
28757 } else if (v === null || v === undefined) {
28758 v = Buffer.allocUnsafe(0)
28759 } else if (v.toArray) {
28760 // converts a BN to a Buffer
28761 v = Buffer.from(v.toArray())
28762 } else {
28763 throw new Error('invalid type')
28764 }
ebd8d4e8 28765 }
8b095871 28766 return v
ebd8d4e8
IC
28767}
28768
8b095871
IC
28769/**
28770 * Converts a `Buffer` to a `Number`
28771 * @param {Buffer} buf
28772 * @return {Number}
28773 * @throws If the input number exceeds 53 bits.
28774 */
28775exports.bufferToInt = function (buf) {
28776 return new BN(exports.toBuffer(buf)).toNumber()
28777}
ebd8d4e8 28778
8b095871
IC
28779/**
28780 * Converts a `Buffer` into a hex `String`
28781 * @param {Buffer} buf
28782 * @return {String}
28783 */
28784exports.bufferToHex = function (buf) {
28785 buf = exports.toBuffer(buf)
28786 return '0x' + buf.toString('hex')
28787}
ab78acc6 28788
8b095871
IC
28789/**
28790 * Interprets a `Buffer` as a signed integer and returns a `BN`. Assumes 256-bit numbers.
28791 * @param {Buffer} num
28792 * @return {BN}
28793 */
28794exports.fromSigned = function (num) {
28795 return new BN(num).fromTwos(256)
28796}
ab78acc6 28797
8b095871
IC
28798/**
28799 * Converts a `BN` to an unsigned integer and returns it as a `Buffer`. Assumes 256-bit numbers.
28800 * @param {BN} num
28801 * @return {Buffer}
28802 */
28803exports.toUnsigned = function (num) {
28804 return Buffer.from(num.toTwos(256).toArray())
28805}
ab78acc6 28806
8b095871
IC
28807/**
28808 * Creates SHA-3 hash of the input
28809 * @param {Buffer|Array|String|Number} a the input data
28810 * @param {Number} [bits=256] the SHA width
28811 * @return {Buffer}
28812 */
28813exports.sha3 = function (a, bits) {
28814 a = exports.toBuffer(a)
28815 if (!bits) bits = 256
ab78acc6 28816
8b095871
IC
28817 return createKeccakHash('keccak' + bits).update(a).digest()
28818}
ab78acc6 28819
8b095871
IC
28820/**
28821 * Creates SHA256 hash of the input
28822 * @param {Buffer|Array|String|Number} a the input data
28823 * @return {Buffer}
28824 */
28825exports.sha256 = function (a) {
28826 a = exports.toBuffer(a)
28827 return createHash('sha256').update(a).digest()
28828}
ab78acc6 28829
8b095871
IC
28830/**
28831 * Creates RIPEMD160 hash of the input
28832 * @param {Buffer|Array|String|Number} a the input data
28833 * @param {Boolean} padded whether it should be padded to 256 bits or not
28834 * @return {Buffer}
28835 */
28836exports.ripemd160 = function (a, padded) {
28837 a = exports.toBuffer(a)
28838 var hash = createHash('rmd160').update(a).digest()
28839 if (padded === true) {
28840 return exports.setLength(hash, 32)
28841 } else {
28842 return hash
ebd8d4e8 28843 }
8b095871 28844}
ebd8d4e8 28845
8b095871
IC
28846/**
28847 * Creates SHA-3 hash of the RLP encoded version of the input
28848 * @param {Buffer|Array|String|Number} a the input data
28849 * @return {Buffer}
28850 */
28851exports.rlphash = function (a) {
28852 return exports.sha3(rlp.encode(a))
ebd8d4e8
IC
28853}
28854
8b095871
IC
28855/**
28856 * Checks if the private key satisfies the rules of the curve secp256k1.
28857 * @param {Buffer} privateKey
28858 * @return {Boolean}
28859 */
28860exports.isValidPrivate = function (privateKey) {
28861 return secp256k1.privateKeyVerify(privateKey)
28862}
ebd8d4e8 28863
8b095871
IC
28864/**
28865 * Checks if the public key satisfies the rules of the curve secp256k1
28866 * and the requirements of Ethereum.
28867 * @param {Buffer} publicKey The two points of an uncompressed key, unless sanitize is enabled
28868 * @param {Boolean} [sanitize=false] Accept public keys in other formats
28869 * @return {Boolean}
28870 */
28871exports.isValidPublic = function (publicKey, sanitize) {
28872 if (publicKey.length === 64) {
28873 // Convert to SEC1 for secp256k1
28874 return secp256k1.publicKeyVerify(Buffer.concat([ Buffer.from([4]), publicKey ]))
28875 }
ebd8d4e8 28876
8b095871
IC
28877 if (!sanitize) {
28878 return false
28879 }
ebd8d4e8 28880
8b095871
IC
28881 return secp256k1.publicKeyVerify(publicKey)
28882}
ebd8d4e8 28883
8b095871
IC
28884/**
28885 * Returns the ethereum address of a given public key.
28886 * Accepts "Ethereum public keys" and SEC1 encoded keys.
28887 * @param {Buffer} pubKey The two points of an uncompressed key, unless sanitize is enabled
28888 * @param {Boolean} [sanitize=false] Accept public keys in other formats
28889 * @return {Buffer}
28890 */
28891exports.pubToAddress = exports.publicToAddress = function (pubKey, sanitize) {
28892 pubKey = exports.toBuffer(pubKey)
28893 if (sanitize && (pubKey.length !== 64)) {
28894 pubKey = secp256k1.publicKeyConvert(pubKey, false).slice(1)
ab78acc6 28895 }
8b095871
IC
28896 assert(pubKey.length === 64)
28897 // Only take the lower 160bits of the hash
28898 return exports.sha3(pubKey).slice(-20)
28899}
ebd8d4e8 28900
8b095871
IC
28901/**
28902 * Returns the ethereum public key of a given private key
28903 * @param {Buffer} privateKey A private key must be 256 bits wide
28904 * @return {Buffer}
28905 */
28906var privateToPublic = exports.privateToPublic = function (privateKey) {
28907 privateKey = exports.toBuffer(privateKey)
28908 // skip the type flag and use the X, Y points
28909 return secp256k1.publicKeyCreate(privateKey, false).slice(1)
28910}
ab78acc6 28911
8b095871
IC
28912/**
28913 * Converts a public key to the Ethereum format.
28914 * @param {Buffer} publicKey
28915 * @return {Buffer}
28916 */
28917exports.importPublic = function (publicKey) {
28918 publicKey = exports.toBuffer(publicKey)
28919 if (publicKey.length !== 64) {
28920 publicKey = secp256k1.publicKeyConvert(publicKey, false).slice(1)
ebd8d4e8 28921 }
8b095871
IC
28922 return publicKey
28923}
ab78acc6 28924
8b095871
IC
28925/**
28926 * ECDSA sign
28927 * @param {Buffer} msgHash
28928 * @param {Buffer} privateKey
28929 * @return {Object}
28930 */
28931exports.ecsign = function (msgHash, privateKey) {
28932 var sig = secp256k1.sign(msgHash, privateKey)
ab78acc6 28933
8b095871
IC
28934 var ret = {}
28935 ret.r = sig.signature.slice(0, 32)
28936 ret.s = sig.signature.slice(32, 64)
28937 ret.v = sig.recovery + 27
28938 return ret
ebd8d4e8
IC
28939}
28940
8b095871
IC
28941/**
28942 * Returns the keccak-256 hash of `message`, prefixed with the header used by the `eth_sign` RPC call.
28943 * The output of this function can be fed into `ecsign` to produce the same signature as the `eth_sign`
28944 * call for a given `message`, or fed to `ecrecover` along with a signature to recover the public key
28945 * used to produce the signature.
28946 * @param message
28947 * @returns {Buffer} hash
28948 */
28949exports.hashPersonalMessage = function (message) {
28950 var prefix = exports.toBuffer('\u0019Ethereum Signed Message:\n' + message.length.toString())
28951 return exports.sha3(Buffer.concat([prefix, message]))
ebd8d4e8
IC
28952}
28953
8b095871
IC
28954/**
28955 * ECDSA public key recovery from signature
28956 * @param {Buffer} msgHash
28957 * @param {Number} v
28958 * @param {Buffer} r
28959 * @param {Buffer} s
28960 * @return {Buffer} publicKey
28961 */
28962exports.ecrecover = function (msgHash, v, r, s) {
28963 var signature = Buffer.concat([exports.setLength(r, 32), exports.setLength(s, 32)], 64)
28964 var recovery = v - 27
28965 if (recovery !== 0 && recovery !== 1) {
28966 throw new Error('Invalid signature v value')
ab78acc6 28967 }
8b095871
IC
28968 var senderPubKey = secp256k1.recover(msgHash, signature, recovery)
28969 return secp256k1.publicKeyConvert(senderPubKey, false).slice(1)
ab78acc6 28970}
ebd8d4e8 28971
8b095871
IC
28972/**
28973 * Convert signature parameters into the format of `eth_sign` RPC method
28974 * @param {Number} v
28975 * @param {Buffer} r
28976 * @param {Buffer} s
28977 * @return {String} sig
28978 */
28979exports.toRpcSig = function (v, r, s) {
28980 // NOTE: with potential introduction of chainId this might need to be updated
28981 if (v !== 27 && v !== 28) {
28982 throw new Error('Invalid recovery id')
28983 }
28984
28985 // geth (and the RPC eth_sign method) uses the 65 byte format used by Bitcoin
28986 // FIXME: this might change in the future - https://github.com/ethereum/go-ethereum/issues/2053
28987 return exports.bufferToHex(Buffer.concat([
28988 exports.setLengthLeft(r, 32),
28989 exports.setLengthLeft(s, 32),
28990 exports.toBuffer(v - 27)
28991 ]))
ebd8d4e8
IC
28992}
28993
8b095871
IC
28994/**
28995 * Convert signature format of the `eth_sign` RPC method to signature parameters
28996 * NOTE: all because of a bug in geth: https://github.com/ethereum/go-ethereum/issues/2053
28997 * @param {String} sig
28998 * @return {Object}
28999 */
29000exports.fromRpcSig = function (sig) {
29001 sig = exports.toBuffer(sig)
ebd8d4e8 29002
8b095871
IC
29003 // NOTE: with potential introduction of chainId this might need to be updated
29004 if (sig.length !== 65) {
29005 throw new Error('Invalid signature length')
29006 }
29007
29008 var v = sig[64]
29009 // support both versions of `eth_sign` responses
29010 if (v < 27) {
29011 v += 27
29012 }
29013
29014 return {
29015 v: v,
29016 r: sig.slice(0, 32),
29017 s: sig.slice(32, 64)
29018 }
ebd8d4e8
IC
29019}
29020
8b095871
IC
29021/**
29022 * Returns the ethereum address of a given private key
29023 * @param {Buffer} privateKey A private key must be 256 bits wide
29024 * @return {Buffer}
29025 */
29026exports.privateToAddress = function (privateKey) {
29027 return exports.publicToAddress(privateToPublic(privateKey))
ab78acc6 29028}
ebd8d4e8 29029
8b095871
IC
29030/**
29031 * Checks if the address is a valid. Accepts checksummed addresses too
29032 * @param {String} address
29033 * @return {Boolean}
29034 */
29035exports.isValidAddress = function (address) {
29036 return /^0x[0-9a-fA-F]{40}$/i.test(address)
ab78acc6 29037}
ebd8d4e8 29038
8b095871
IC
29039/**
29040 * Returns a checksummed address
29041 * @param {String} address
29042 * @return {String}
29043 */
29044exports.toChecksumAddress = function (address) {
29045 address = exports.stripHexPrefix(address).toLowerCase()
29046 var hash = exports.sha3(address).toString('hex')
29047 var ret = '0x'
29048
29049 for (var i = 0; i < address.length; i++) {
29050 if (parseInt(hash[i], 16) >= 8) {
29051 ret += address[i].toUpperCase()
29052 } else {
29053 ret += address[i]
29054 }
29055 }
29056
29057 return ret
ebd8d4e8
IC
29058}
29059
8b095871
IC
29060/**
29061 * Checks if the address is a valid checksummed address
29062 * @param {Buffer} address
29063 * @return {Boolean}
29064 */
29065exports.isValidChecksumAddress = function (address) {
29066 return exports.isValidAddress(address) && (exports.toChecksumAddress(address) === address)
ab78acc6 29067}
ebd8d4e8 29068
8b095871
IC
29069/**
29070 * Generates an address of a newly created contract
29071 * @param {Buffer} from the address which is creating this new address
29072 * @param {Buffer} nonce the nonce of the from account
29073 * @return {Buffer}
29074 */
29075exports.generateAddress = function (from, nonce) {
29076 from = exports.toBuffer(from)
29077 nonce = new BN(nonce)
29078
29079 if (nonce.isZero()) {
29080 // in RLP we want to encode null in the case of zero nonce
29081 // read the RLP documentation for an answer if you dare
29082 nonce = null
29083 } else {
29084 nonce = Buffer.from(nonce.toArray())
29085 }
29086
29087 // Only take the lower 160bits of the hash
29088 return exports.rlphash([from, nonce]).slice(-20)
ab78acc6 29089}
ebd8d4e8 29090
8b095871
IC
29091/**
29092 * Returns true if the supplied address belongs to a precompiled account
29093 * @param {Buffer|String} address
29094 * @return {Boolean}
29095 */
29096exports.isPrecompiled = function (address) {
29097 var a = exports.unpad(address)
29098 return a.length === 1 && a[0] > 0 && a[0] < 5
ebd8d4e8
IC
29099}
29100
8b095871
IC
29101/**
29102 * Adds "0x" to a given `String` if it does not already start with "0x"
29103 * @param {String} str
29104 * @return {String}
29105 */
29106exports.addHexPrefix = function (str) {
29107 if (typeof str !== 'string') {
29108 return str
29109 }
29110
29111 return exports.isHexPrefixed(str) ? str : '0x' + str
ebd8d4e8
IC
29112}
29113
8b095871
IC
29114/**
29115 * Validate ECDSA signature
29116 * @method isValidSignature
29117 * @param {Buffer} v
29118 * @param {Buffer} r
29119 * @param {Buffer} s
29120 * @param {Boolean} [homestead=true]
29121 * @return {Boolean}
29122 */
29123
29124exports.isValidSignature = function (v, r, s, homestead) {
29125 const SECP256K1_N_DIV_2 = new BN('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0', 16)
29126 const SECP256K1_N = new BN('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141', 16)
29127
29128 if (r.length !== 32 || s.length !== 32) {
29129 return false
29130 }
29131
29132 if (v !== 27 && v !== 28) {
29133 return false
29134 }
29135
29136 r = new BN(r)
29137 s = new BN(s)
29138
29139 if (r.isZero() || r.gt(SECP256K1_N) || s.isZero() || s.gt(SECP256K1_N)) {
29140 return false
29141 }
29142
29143 if ((homestead === false) && (new BN(s).cmp(SECP256K1_N_DIV_2) === 1)) {
29144 return false
29145 }
29146
29147 return true
ebd8d4e8
IC
29148}
29149
8b095871
IC
29150/**
29151 * Converts a `Buffer` or `Array` to JSON
29152 * @param {Buffer|Array} ba
29153 * @return {Array|String|null}
29154 */
29155exports.baToJSON = function (ba) {
29156 if (Buffer.isBuffer(ba)) {
29157 return '0x' + ba.toString('hex')
29158 } else if (ba instanceof Array) {
29159 var array = []
29160 for (var i = 0; i < ba.length; i++) {
29161 array.push(exports.baToJSON(ba[i]))
29162 }
29163 return array
29164 }
ab78acc6 29165}
ebd8d4e8 29166
8b095871
IC
29167/**
29168 * Defines properties on a `Object`. It make the assumption that underlying data is binary.
29169 * @param {Object} self the `Object` to define properties on
29170 * @param {Array} fields an array fields to define. Fields can contain:
29171 * * `name` - the name of the properties
29172 * * `length` - the number of bytes the field can have
29173 * * `allowLess` - if the field can be less than the length
29174 * * `allowEmpty`
29175 * @param {*} data data to be validated against the definitions
29176 */
29177exports.defineProperties = function (self, fields, data) {
29178 self.raw = []
29179 self._fields = []
29180
29181 // attach the `toJSON`
29182 self.toJSON = function (label) {
29183 if (label) {
29184 var obj = {}
29185 self._fields.forEach(function (field) {
29186 obj[field] = '0x' + self[field].toString('hex')
29187 })
29188 return obj
29189 }
29190 return exports.baToJSON(this.raw)
29191 }
29192
29193 self.serialize = function serialize () {
29194 return rlp.encode(self.raw)
29195 }
29196
29197 fields.forEach(function (field, i) {
29198 self._fields.push(field.name)
29199 function getter () {
29200 return self.raw[i]
29201 }
29202 function setter (v) {
29203 v = exports.toBuffer(v)
29204
29205 if (v.toString('hex') === '00' && !field.allowZero) {
29206 v = Buffer.allocUnsafe(0)
29207 }
29208
29209 if (field.allowLess && field.length) {
29210 v = exports.stripZeros(v)
29211 assert(field.length >= v.length, 'The field ' + field.name + ' must not have more ' + field.length + ' bytes')
29212 } else if (!(field.allowZero && v.length === 0) && field.length) {
29213 assert(field.length === v.length, 'The field ' + field.name + ' must have byte length of ' + field.length)
29214 }
29215
29216 self.raw[i] = v
29217 }
29218
29219 Object.defineProperty(self, field.name, {
29220 enumerable: true,
29221 configurable: true,
29222 get: getter,
29223 set: setter
29224 })
29225
29226 if (field.default) {
29227 self[field.name] = field.default
29228 }
29229
29230 // attach alias
29231 if (field.alias) {
29232 Object.defineProperty(self, field.alias, {
29233 enumerable: false,
29234 configurable: true,
29235 set: setter,
29236 get: getter
29237 })
29238 }
29239 })
29240
29241 // if the constuctor is passed data
29242 if (data) {
29243 if (typeof data === 'string') {
29244 data = Buffer.from(exports.stripHexPrefix(data), 'hex')
29245 }
29246
29247 if (Buffer.isBuffer(data)) {
29248 data = rlp.decode(data)
29249 }
29250
29251 if (Array.isArray(data)) {
29252 if (data.length > self._fields.length) {
29253 throw (new Error('wrong number of fields in data'))
29254 }
29255
29256 // make sure all the items are buffers
29257 data.forEach(function (d, i) {
29258 self[self._fields[i]] = exports.toBuffer(d)
29259 })
29260 } else if (typeof data === 'object') {
29261 const keys = Object.keys(data)
29262 fields.forEach(function (field) {
29263 if (keys.indexOf(field.name) !== -1) self[field.name] = data[field.name]
29264 if (keys.indexOf(field.alias) !== -1) self[field.alias] = data[field.alias]
29265 })
29266 } else {
29267 throw new Error('invalid data')
29268 }
29269 }
ab78acc6 29270}
ebd8d4e8 29271
8b095871
IC
29272}).call(this,require("buffer").Buffer)
29273},{"assert":1,"bn.js":33,"buffer":5,"create-hash":36,"ethjs-util":56,"keccak":65,"rlp":72,"secp256k1":73}],32:[function(require,module,exports){
29274(function (Buffer){
29275// Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki
29276// Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
29277// NOTE: SIGHASH byte ignored AND restricted, truncate before use
29278
29279function check (buffer) {
29280 if (buffer.length < 8) return false
29281 if (buffer.length > 72) return false
29282 if (buffer[0] !== 0x30) return false
29283 if (buffer[1] !== buffer.length - 2) return false
29284 if (buffer[2] !== 0x02) return false
29285
29286 var lenR = buffer[3]
29287 if (lenR === 0) return false
29288 if (5 + lenR >= buffer.length) return false
29289 if (buffer[4 + lenR] !== 0x02) return false
29290
29291 var lenS = buffer[5 + lenR]
29292 if (lenS === 0) return false
29293 if ((6 + lenR + lenS) !== buffer.length) return false
29294
29295 if (buffer[4] & 0x80) return false
29296 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false
29297
29298 if (buffer[lenR + 6] & 0x80) return false
29299 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false
29300 return true
ab78acc6 29301}
ab78acc6 29302
8b095871
IC
29303function decode (buffer) {
29304 if (buffer.length < 8) throw new Error('DER sequence length is too short')
29305 if (buffer.length > 72) throw new Error('DER sequence length is too long')
29306 if (buffer[0] !== 0x30) throw new Error('Expected DER sequence')
29307 if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid')
29308 if (buffer[2] !== 0x02) throw new Error('Expected DER integer')
29309
29310 var lenR = buffer[3]
29311 if (lenR === 0) throw new Error('R length is zero')
29312 if (5 + lenR >= buffer.length) throw new Error('R length is too long')
29313 if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)')
29314
29315 var lenS = buffer[5 + lenR]
29316 if (lenS === 0) throw new Error('S length is zero')
29317 if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid')
29318
29319 if (buffer[4] & 0x80) throw new Error('R value is negative')
29320 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded')
29321
29322 if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative')
29323 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded')
29324
29325 // non-BIP66 - extract R, S values
29326 return {
29327 r: buffer.slice(4, 4 + lenR),
29328 s: buffer.slice(6 + lenR)
29329 }
ebd8d4e8
IC
29330}
29331
8b095871
IC
29332/*
29333 * Expects r and s to be positive DER integers.
29334 *
29335 * The DER format uses the most significant bit as a sign bit (& 0x80).
29336 * If the significant bit is set AND the integer is positive, a 0x00 is prepended.
29337 *
29338 * Examples:
29339 *
29340 * 0 => 0x00
29341 * 1 => 0x01
29342 * -1 => 0xff
29343 * 127 => 0x7f
29344 * -127 => 0x81
29345 * 128 => 0x0080
29346 * -128 => 0x80
29347 * 255 => 0x00ff
29348 * -255 => 0xff01
29349 * 16300 => 0x3fac
29350 * -16300 => 0xc054
29351 * 62300 => 0x00f35c
29352 * -62300 => 0xff0ca4
29353*/
29354function encode (r, s) {
29355 var lenR = r.length
29356 var lenS = s.length
29357 if (lenR === 0) throw new Error('R length is zero')
29358 if (lenS === 0) throw new Error('S length is zero')
29359 if (lenR > 33) throw new Error('R length is too long')
29360 if (lenS > 33) throw new Error('S length is too long')
29361 if (r[0] & 0x80) throw new Error('R value is negative')
29362 if (s[0] & 0x80) throw new Error('S value is negative')
29363 if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded')
29364 if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded')
29365
29366 var signature = new Buffer(6 + lenR + lenS)
29367
29368 // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
29369 signature[0] = 0x30
29370 signature[1] = signature.length - 2
29371 signature[2] = 0x02
29372 signature[3] = r.length
29373 r.copy(signature, 4)
29374 signature[4 + lenR] = 0x02
29375 signature[5 + lenR] = s.length
29376 s.copy(signature, 6 + lenR)
29377
29378 return signature
ebd8d4e8
IC
29379}
29380
8b095871
IC
29381module.exports = {
29382 check: check,
29383 decode: decode,
29384 encode: encode
ebd8d4e8 29385}
8b095871 29386
ab78acc6 29387}).call(this,require("buffer").Buffer)
8b095871
IC
29388},{"buffer":5}],33:[function(require,module,exports){
29389(function (module, exports) {
29390 'use strict';
ebd8d4e8 29391
8b095871
IC
29392 // Utils
29393 function assert (val, msg) {
29394 if (!val) throw new Error(msg || 'Assertion failed');
29395 }
ebd8d4e8 29396
8b095871
IC
29397 // Could use `inherits` module, but don't want to move from single file
29398 // architecture yet.
29399 function inherits (ctor, superCtor) {
29400 ctor.super_ = superCtor;
29401 var TempCtor = function () {};
29402 TempCtor.prototype = superCtor.prototype;
29403 ctor.prototype = new TempCtor();
29404 ctor.prototype.constructor = ctor;
29405 }
ebd8d4e8 29406
8b095871 29407 // BN
ab78acc6 29408
8b095871
IC
29409 function BN (number, base, endian) {
29410 if (BN.isBN(number)) {
29411 return number;
29412 }
ab78acc6 29413
8b095871
IC
29414 this.negative = 0;
29415 this.words = null;
29416 this.length = 0;
ab78acc6 29417
8b095871
IC
29418 // Reduction context
29419 this.red = null;
ab78acc6 29420
8b095871
IC
29421 if (number !== null) {
29422 if (base === 'le' || base === 'be') {
29423 endian = base;
29424 base = 10;
29425 }
ab78acc6 29426
8b095871
IC
29427 this._init(number || 0, base || 10, endian || 'be');
29428 }
29429 }
29430 if (typeof module === 'object') {
29431 module.exports = BN;
29432 } else {
29433 exports.BN = BN;
29434 }
ab78acc6 29435
8b095871
IC
29436 BN.BN = BN;
29437 BN.wordSize = 26;
ab78acc6 29438
8b095871
IC
29439 var Buffer;
29440 try {
29441 Buffer = require('buf' + 'fer').Buffer;
29442 } catch (e) {
29443 }
ab78acc6 29444
8b095871
IC
29445 BN.isBN = function isBN (num) {
29446 if (num instanceof BN) {
29447 return true;
29448 }
ab78acc6 29449
8b095871
IC
29450 return num !== null && typeof num === 'object' &&
29451 num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
29452 };
ebd8d4e8 29453
8b095871
IC
29454 BN.max = function max (left, right) {
29455 if (left.cmp(right) > 0) return left;
29456 return right;
29457 };
ebd8d4e8 29458
8b095871
IC
29459 BN.min = function min (left, right) {
29460 if (left.cmp(right) < 0) return left;
29461 return right;
29462 };
29463
29464 BN.prototype._init = function init (number, base, endian) {
29465 if (typeof number === 'number') {
29466 return this._initNumber(number, base, endian);
ab78acc6 29467 }
ebd8d4e8 29468
8b095871
IC
29469 if (typeof number === 'object') {
29470 return this._initArray(number, base, endian);
29471 }
ebd8d4e8 29472
8b095871
IC
29473 if (base === 'hex') {
29474 base = 16;
29475 }
29476 assert(base === (base | 0) && base >= 2 && base <= 36);
29477
29478 number = number.toString().replace(/\s+/g, '');
29479 var start = 0;
29480 if (number[0] === '-') {
29481 start++;
29482 }
29483
29484 if (base === 16) {
29485 this._parseHex(number, start);
29486 } else {
29487 this._parseBase(number, base, start);
ab78acc6 29488 }
ebd8d4e8 29489
8b095871
IC
29490 if (number[0] === '-') {
29491 this.negative = 1;
29492 }
ebd8d4e8 29493
8b095871 29494 this.strip();
ebd8d4e8 29495
8b095871 29496 if (endian !== 'le') return;
ebd8d4e8 29497
8b095871
IC
29498 this._initArray(this.toArray(), base, endian);
29499 };
ebd8d4e8 29500
8b095871
IC
29501 BN.prototype._initNumber = function _initNumber (number, base, endian) {
29502 if (number < 0) {
29503 this.negative = 1;
29504 number = -number;
29505 }
29506 if (number < 0x4000000) {
29507 this.words = [ number & 0x3ffffff ];
29508 this.length = 1;
29509 } else if (number < 0x10000000000000) {
29510 this.words = [
29511 number & 0x3ffffff,
29512 (number / 0x4000000) & 0x3ffffff
29513 ];
29514 this.length = 2;
29515 } else {
29516 assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
29517 this.words = [
29518 number & 0x3ffffff,
29519 (number / 0x4000000) & 0x3ffffff,
29520 1
29521 ];
29522 this.length = 3;
29523 }
ebd8d4e8 29524
8b095871 29525 if (endian !== 'le') return;
ebd8d4e8 29526
8b095871
IC
29527 // Reverse the bytes
29528 this._initArray(this.toArray(), base, endian);
29529 };
ebd8d4e8 29530
8b095871
IC
29531 BN.prototype._initArray = function _initArray (number, base, endian) {
29532 // Perhaps a Uint8Array
29533 assert(typeof number.length === 'number');
29534 if (number.length <= 0) {
29535 this.words = [ 0 ];
29536 this.length = 1;
29537 return this;
ab78acc6 29538 }
ebd8d4e8 29539
8b095871
IC
29540 this.length = Math.ceil(number.length / 3);
29541 this.words = new Array(this.length);
29542 for (var i = 0; i < this.length; i++) {
29543 this.words[i] = 0;
29544 }
ebd8d4e8 29545
8b095871
IC
29546 var j, w;
29547 var off = 0;
29548 if (endian === 'be') {
29549 for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
29550 w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
29551 this.words[j] |= (w << off) & 0x3ffffff;
29552 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
29553 off += 24;
29554 if (off >= 26) {
29555 off -= 26;
29556 j++;
29557 }
29558 }
29559 } else if (endian === 'le') {
29560 for (i = 0, j = 0; i < number.length; i += 3) {
29561 w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
29562 this.words[j] |= (w << off) & 0x3ffffff;
29563 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
29564 off += 24;
29565 if (off >= 26) {
29566 off -= 26;
29567 j++;
29568 }
29569 }
29570 }
29571 return this.strip();
29572 };
ebd8d4e8 29573
8b095871
IC
29574 function parseHex (str, start, end) {
29575 var r = 0;
29576 var len = Math.min(str.length, end);
29577 for (var i = start; i < len; i++) {
29578 var c = str.charCodeAt(i) - 48;
ab78acc6 29579
8b095871 29580 r <<= 4;
ab78acc6 29581
8b095871
IC
29582 // 'a' - 'f'
29583 if (c >= 49 && c <= 54) {
29584 r |= c - 49 + 0xa;
ab78acc6 29585
8b095871
IC
29586 // 'A' - 'F'
29587 } else if (c >= 17 && c <= 22) {
29588 r |= c - 17 + 0xa;
ebd8d4e8 29589
8b095871
IC
29590 // '0' - '9'
29591 } else {
29592 r |= c & 0xf;
29593 }
29594 }
29595 return r;
29596 }
29597
29598 BN.prototype._parseHex = function _parseHex (number, start) {
29599 // Create possibly bigger array to ensure that it fits the number
29600 this.length = Math.ceil((number.length - start) / 6);
29601 this.words = new Array(this.length);
29602 for (var i = 0; i < this.length; i++) {
29603 this.words[i] = 0;
29604 }
29605
29606 var j, w;
29607 // Scan 24-bit chunks and add them to the number
29608 var off = 0;
29609 for (i = number.length - 6, j = 0; i >= start; i -= 6) {
29610 w = parseHex(number, i, i + 6);
29611 this.words[j] |= (w << off) & 0x3ffffff;
29612 // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb
29613 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
29614 off += 24;
29615 if (off >= 26) {
29616 off -= 26;
29617 j++;
29618 }
29619 }
29620 if (i + 6 !== start) {
29621 w = parseHex(number, start, i + 6);
29622 this.words[j] |= (w << off) & 0x3ffffff;
29623 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
29624 }
29625 this.strip();
29626 };
ebd8d4e8 29627
8b095871
IC
29628 function parseBase (str, start, end, mul) {
29629 var r = 0;
29630 var len = Math.min(str.length, end);
29631 for (var i = start; i < len; i++) {
29632 var c = str.charCodeAt(i) - 48;
ebd8d4e8 29633
8b095871 29634 r *= mul;
ebd8d4e8 29635
8b095871
IC
29636 // 'a'
29637 if (c >= 49) {
29638 r += c - 49 + 0xa;
ebd8d4e8 29639
8b095871
IC
29640 // 'A'
29641 } else if (c >= 17) {
29642 r += c - 17 + 0xa;
ebd8d4e8 29643
8b095871
IC
29644 // '0' - '9'
29645 } else {
29646 r += c;
29647 }
29648 }
29649 return r;
29650 }
ebd8d4e8 29651
8b095871
IC
29652 BN.prototype._parseBase = function _parseBase (number, base, start) {
29653 // Initialize as zero
29654 this.words = [ 0 ];
29655 this.length = 1;
ebd8d4e8 29656
8b095871
IC
29657 // Find length of limb in base
29658 for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
29659 limbLen++;
29660 }
29661 limbLen--;
29662 limbPow = (limbPow / base) | 0;
ebd8d4e8 29663
8b095871
IC
29664 var total = number.length - start;
29665 var mod = total % limbLen;
29666 var end = Math.min(total, total - mod) + start;
ebd8d4e8 29667
8b095871
IC
29668 var word = 0;
29669 for (var i = start; i < end; i += limbLen) {
29670 word = parseBase(number, i, i + limbLen, base);
ebd8d4e8 29671
8b095871
IC
29672 this.imuln(limbPow);
29673 if (this.words[0] + word < 0x4000000) {
29674 this.words[0] += word;
29675 } else {
29676 this._iaddn(word);
29677 }
29678 }
ebd8d4e8 29679
8b095871
IC
29680 if (mod !== 0) {
29681 var pow = 1;
29682 word = parseBase(number, i, number.length, base);
ebd8d4e8 29683
8b095871
IC
29684 for (i = 0; i < mod; i++) {
29685 pow *= base;
29686 }
ab78acc6 29687
8b095871
IC
29688 this.imuln(pow);
29689 if (this.words[0] + word < 0x4000000) {
29690 this.words[0] += word;
29691 } else {
29692 this._iaddn(word);
29693 }
29694 }
29695 };
ab78acc6 29696
8b095871
IC
29697 BN.prototype.copy = function copy (dest) {
29698 dest.words = new Array(this.length);
29699 for (var i = 0; i < this.length; i++) {
29700 dest.words[i] = this.words[i];
ab78acc6 29701 }
8b095871
IC
29702 dest.length = this.length;
29703 dest.negative = this.negative;
29704 dest.red = this.red;
29705 };
ab78acc6 29706
8b095871
IC
29707 BN.prototype.clone = function clone () {
29708 var r = new BN(null);
29709 this.copy(r);
29710 return r;
29711 };
ab78acc6 29712
8b095871
IC
29713 BN.prototype._expand = function _expand (size) {
29714 while (this.length < size) {
29715 this.words[this.length++] = 0;
29716 }
29717 return this;
29718 };
ab78acc6 29719
8b095871
IC
29720 // Remove leading `0` from `this`
29721 BN.prototype.strip = function strip () {
29722 while (this.length > 1 && this.words[this.length - 1] === 0) {
29723 this.length--;
ab78acc6 29724 }
8b095871
IC
29725 return this._normSign();
29726 };
ebd8d4e8 29727
8b095871
IC
29728 BN.prototype._normSign = function _normSign () {
29729 // -0 = 0
29730 if (this.length === 1 && this.words[0] === 0) {
29731 this.negative = 0;
ab78acc6 29732 }
8b095871
IC
29733 return this;
29734 };
ebd8d4e8 29735
8b095871
IC
29736 BN.prototype.inspect = function inspect () {
29737 return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
29738 };
ebd8d4e8 29739
8b095871 29740 /*
ebd8d4e8 29741
8b095871
IC
29742 var zeros = [];
29743 var groupSizes = [];
29744 var groupBases = [];
ebd8d4e8 29745
8b095871
IC
29746 var s = '';
29747 var i = -1;
29748 while (++i < BN.wordSize) {
29749 zeros[i] = s;
29750 s += '0';
29751 }
29752 groupSizes[0] = 0;
29753 groupSizes[1] = 0;
29754 groupBases[0] = 0;
29755 groupBases[1] = 0;
29756 var base = 2 - 1;
29757 while (++base < 36 + 1) {
29758 var groupSize = 0;
29759 var groupBase = 1;
29760 while (groupBase < (1 << BN.wordSize) / base) {
29761 groupBase *= base;
29762 groupSize += 1;
29763 }
29764 groupSizes[base] = groupSize;
29765 groupBases[base] = groupBase;
ebd8d4e8
IC
29766 }
29767
8b095871 29768 */
ebd8d4e8 29769
8b095871
IC
29770 var zeros = [
29771 '',
29772 '0',
29773 '00',
29774 '000',
29775 '0000',
29776 '00000',
29777 '000000',
29778 '0000000',
29779 '00000000',
29780 '000000000',
29781 '0000000000',
29782 '00000000000',
29783 '000000000000',
29784 '0000000000000',
29785 '00000000000000',
29786 '000000000000000',
29787 '0000000000000000',
29788 '00000000000000000',
29789 '000000000000000000',
29790 '0000000000000000000',
29791 '00000000000000000000',
29792 '000000000000000000000',
29793 '0000000000000000000000',
29794 '00000000000000000000000',
29795 '000000000000000000000000',
29796 '0000000000000000000000000'
29797 ];
29798
29799 var groupSizes = [
29800 0, 0,
29801 25, 16, 12, 11, 10, 9, 8,
29802 8, 7, 7, 7, 7, 6, 6,
29803 6, 6, 6, 6, 6, 5, 5,
29804 5, 5, 5, 5, 5, 5, 5,
29805 5, 5, 5, 5, 5, 5, 5
29806 ];
29807
29808 var groupBases = [
29809 0, 0,
29810 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
29811 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
29812 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
29813 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
29814 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
29815 ];
29816
29817 BN.prototype.toString = function toString (base, padding) {
29818 base = base || 10;
29819 padding = padding | 0 || 1;
29820
29821 var out;
29822 if (base === 16 || base === 'hex') {
29823 out = '';
29824 var off = 0;
29825 var carry = 0;
29826 for (var i = 0; i < this.length; i++) {
29827 var w = this.words[i];
29828 var word = (((w << off) | carry) & 0xffffff).toString(16);
29829 carry = (w >>> (24 - off)) & 0xffffff;
29830 if (carry !== 0 || i !== this.length - 1) {
29831 out = zeros[6 - word.length] + word + out;
29832 } else {
29833 out = word + out;
29834 }
29835 off += 2;
29836 if (off >= 26) {
29837 off -= 26;
29838 i--;
29839 }
29840 }
29841 if (carry !== 0) {
29842 out = carry.toString(16) + out;
29843 }
29844 while (out.length % padding !== 0) {
29845 out = '0' + out;
29846 }
29847 if (this.negative !== 0) {
29848 out = '-' + out;
29849 }
29850 return out;
29851 }
29852
29853 if (base === (base | 0) && base >= 2 && base <= 36) {
29854 // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
29855 var groupSize = groupSizes[base];
29856 // var groupBase = Math.pow(base, groupSize);
29857 var groupBase = groupBases[base];
29858 out = '';
29859 var c = this.clone();
29860 c.negative = 0;
29861 while (!c.isZero()) {
29862 var r = c.modn(groupBase).toString(base);
29863 c = c.idivn(groupBase);
29864
29865 if (!c.isZero()) {
29866 out = zeros[groupSize - r.length] + r + out;
29867 } else {
29868 out = r + out;
29869 }
29870 }
29871 if (this.isZero()) {
29872 out = '0' + out;
29873 }
29874 while (out.length % padding !== 0) {
29875 out = '0' + out;
29876 }
29877 if (this.negative !== 0) {
29878 out = '-' + out;
29879 }
29880 return out;
29881 }
29882
29883 assert(false, 'Base should be between 2 and 36');
29884 };
29885
29886 BN.prototype.toNumber = function toNumber () {
29887 var ret = this.words[0];
29888 if (this.length === 2) {
29889 ret += this.words[1] * 0x4000000;
29890 } else if (this.length === 3 && this.words[2] === 0x01) {
29891 // NOTE: at this stage it is known that the top bit is set
29892 ret += 0x10000000000000 + (this.words[1] * 0x4000000);
29893 } else if (this.length > 2) {
29894 assert(false, 'Number can only safely store up to 53 bits');
29895 }
29896 return (this.negative !== 0) ? -ret : ret;
29897 };
29898
29899 BN.prototype.toJSON = function toJSON () {
29900 return this.toString(16);
29901 };
29902
29903 BN.prototype.toBuffer = function toBuffer (endian, length) {
29904 assert(typeof Buffer !== 'undefined');
29905 return this.toArrayLike(Buffer, endian, length);
29906 };
ebd8d4e8 29907
8b095871
IC
29908 BN.prototype.toArray = function toArray (endian, length) {
29909 return this.toArrayLike(Array, endian, length);
29910 };
ebd8d4e8 29911
8b095871
IC
29912 BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
29913 var byteLength = this.byteLength();
29914 var reqLength = length || Math.max(1, byteLength);
29915 assert(byteLength <= reqLength, 'byte array longer than desired length');
29916 assert(reqLength > 0, 'Requested array length <= 0');
29917
29918 this.strip();
29919 var littleEndian = endian === 'le';
29920 var res = new ArrayType(reqLength);
29921
29922 var b, i;
29923 var q = this.clone();
29924 if (!littleEndian) {
29925 // Assume big-endian
29926 for (i = 0; i < reqLength - byteLength; i++) {
29927 res[i] = 0;
29928 }
ebd8d4e8 29929
8b095871
IC
29930 for (i = 0; !q.isZero(); i++) {
29931 b = q.andln(0xff);
29932 q.iushrn(8);
ebd8d4e8 29933
8b095871
IC
29934 res[reqLength - i - 1] = b;
29935 }
29936 } else {
29937 for (i = 0; !q.isZero(); i++) {
29938 b = q.andln(0xff);
29939 q.iushrn(8);
ebd8d4e8 29940
8b095871
IC
29941 res[i] = b;
29942 }
29943
29944 for (; i < reqLength; i++) {
29945 res[i] = 0;
29946 }
ab78acc6 29947 }
ebd8d4e8 29948
8b095871
IC
29949 return res;
29950 };
ebd8d4e8 29951
8b095871
IC
29952 if (Math.clz32) {
29953 BN.prototype._countBits = function _countBits (w) {
29954 return 32 - Math.clz32(w);
29955 };
29956 } else {
29957 BN.prototype._countBits = function _countBits (w) {
29958 var t = w;
29959 var r = 0;
29960 if (t >= 0x1000) {
29961 r += 13;
29962 t >>>= 13;
29963 }
29964 if (t >= 0x40) {
29965 r += 7;
29966 t >>>= 7;
29967 }
29968 if (t >= 0x8) {
29969 r += 4;
29970 t >>>= 4;
29971 }
29972 if (t >= 0x02) {
29973 r += 2;
29974 t >>>= 2;
29975 }
29976 return r + t;
29977 };
ebd8d4e8
IC
29978 }
29979
8b095871
IC
29980 BN.prototype._zeroBits = function _zeroBits (w) {
29981 // Short-cut
29982 if (w === 0) return 26;
ebd8d4e8 29983
8b095871
IC
29984 var t = w;
29985 var r = 0;
29986 if ((t & 0x1fff) === 0) {
29987 r += 13;
29988 t >>>= 13;
29989 }
29990 if ((t & 0x7f) === 0) {
29991 r += 7;
29992 t >>>= 7;
29993 }
29994 if ((t & 0xf) === 0) {
29995 r += 4;
29996 t >>>= 4;
29997 }
29998 if ((t & 0x3) === 0) {
29999 r += 2;
30000 t >>>= 2;
30001 }
30002 if ((t & 0x1) === 0) {
30003 r++;
30004 }
30005 return r;
30006 };
ebd8d4e8 30007
8b095871
IC
30008 // Return number of used bits in a BN
30009 BN.prototype.bitLength = function bitLength () {
30010 var w = this.words[this.length - 1];
30011 var hi = this._countBits(w);
30012 return (this.length - 1) * 26 + hi;
30013 };
ebd8d4e8 30014
8b095871
IC
30015 function toBitArray (num) {
30016 var w = new Array(num.bitLength());
ebd8d4e8 30017
8b095871
IC
30018 for (var bit = 0; bit < w.length; bit++) {
30019 var off = (bit / 26) | 0;
30020 var wbit = bit % 26;
ebd8d4e8 30021
8b095871 30022 w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
ab78acc6 30023 }
8b095871
IC
30024
30025 return w;
ab78acc6 30026 }
ebd8d4e8 30027
8b095871
IC
30028 // Number of trailing zero bits
30029 BN.prototype.zeroBits = function zeroBits () {
30030 if (this.isZero()) return 0;
30031
30032 var r = 0;
30033 for (var i = 0; i < this.length; i++) {
30034 var b = this._zeroBits(this.words[i]);
30035 r += b;
30036 if (b !== 26) break;
ab78acc6 30037 }
8b095871
IC
30038 return r;
30039 };
30040
30041 BN.prototype.byteLength = function byteLength () {
30042 return Math.ceil(this.bitLength() / 8);
30043 };
30044
30045 BN.prototype.toTwos = function toTwos (width) {
30046 if (this.negative !== 0) {
30047 return this.abs().inotn(width).iaddn(1);
ab78acc6 30048 }
8b095871
IC
30049 return this.clone();
30050 };
ebd8d4e8 30051
8b095871
IC
30052 BN.prototype.fromTwos = function fromTwos (width) {
30053 if (this.testn(width - 1)) {
30054 return this.notn(width).iaddn(1).ineg();
30055 }
30056 return this.clone();
30057 };
ebd8d4e8 30058
8b095871
IC
30059 BN.prototype.isNeg = function isNeg () {
30060 return this.negative !== 0;
30061 };
ebd8d4e8 30062
8b095871
IC
30063 // Return negative clone of `this`
30064 BN.prototype.neg = function neg () {
30065 return this.clone().ineg();
30066 };
ebd8d4e8 30067
8b095871
IC
30068 BN.prototype.ineg = function ineg () {
30069 if (!this.isZero()) {
30070 this.negative ^= 1;
ab78acc6 30071 }
ebd8d4e8 30072
8b095871
IC
30073 return this;
30074 };
ebd8d4e8 30075
8b095871
IC
30076 // Or `num` with `this` in-place
30077 BN.prototype.iuor = function iuor (num) {
30078 while (this.length < num.length) {
30079 this.words[this.length++] = 0;
30080 }
ebd8d4e8 30081
8b095871
IC
30082 for (var i = 0; i < num.length; i++) {
30083 this.words[i] = this.words[i] | num.words[i];
ebd8d4e8 30084 }
ebd8d4e8 30085
8b095871
IC
30086 return this.strip();
30087 };
ebd8d4e8 30088
8b095871
IC
30089 BN.prototype.ior = function ior (num) {
30090 assert((this.negative | num.negative) === 0);
30091 return this.iuor(num);
ab78acc6 30092 };
ebd8d4e8 30093
8b095871
IC
30094 // Or `num` with `this`
30095 BN.prototype.or = function or (num) {
30096 if (this.length > num.length) return this.clone().ior(num);
30097 return num.clone().ior(this);
30098 };
ebd8d4e8 30099
8b095871
IC
30100 BN.prototype.uor = function uor (num) {
30101 if (this.length > num.length) return this.clone().iuor(num);
30102 return num.clone().iuor(this);
30103 };
ebd8d4e8 30104
8b095871
IC
30105 // And `num` with `this` in-place
30106 BN.prototype.iuand = function iuand (num) {
30107 // b = min-length(num, this)
30108 var b;
30109 if (this.length > num.length) {
30110 b = num;
30111 } else {
30112 b = this;
30113 }
30114
30115 for (var i = 0; i < b.length; i++) {
30116 this.words[i] = this.words[i] & num.words[i];
30117 }
ebd8d4e8 30118
8b095871 30119 this.length = b.length;
ebd8d4e8 30120
8b095871
IC
30121 return this.strip();
30122 };
ebd8d4e8 30123
8b095871
IC
30124 BN.prototype.iand = function iand (num) {
30125 assert((this.negative | num.negative) === 0);
30126 return this.iuand(num);
30127 };
ebd8d4e8 30128
8b095871
IC
30129 // And `num` with `this`
30130 BN.prototype.and = function and (num) {
30131 if (this.length > num.length) return this.clone().iand(num);
30132 return num.clone().iand(this);
30133 };
ebd8d4e8 30134
8b095871
IC
30135 BN.prototype.uand = function uand (num) {
30136 if (this.length > num.length) return this.clone().iuand(num);
30137 return num.clone().iuand(this);
30138 };
ebd8d4e8 30139
8b095871
IC
30140 // Xor `num` with `this` in-place
30141 BN.prototype.iuxor = function iuxor (num) {
30142 // a.length > b.length
30143 var a;
30144 var b;
30145 if (this.length > num.length) {
30146 a = this;
30147 b = num;
30148 } else {
30149 a = num;
30150 b = this;
30151 }
ebd8d4e8 30152
8b095871
IC
30153 for (var i = 0; i < b.length; i++) {
30154 this.words[i] = a.words[i] ^ b.words[i];
30155 }
ebd8d4e8 30156
8b095871
IC
30157 if (this !== a) {
30158 for (; i < a.length; i++) {
30159 this.words[i] = a.words[i];
30160 }
30161 }
ebd8d4e8 30162
8b095871 30163 this.length = a.length;
ebd8d4e8 30164
8b095871
IC
30165 return this.strip();
30166 };
ebd8d4e8 30167
8b095871
IC
30168 BN.prototype.ixor = function ixor (num) {
30169 assert((this.negative | num.negative) === 0);
30170 return this.iuxor(num);
30171 };
ebd8d4e8 30172
8b095871
IC
30173 // Xor `num` with `this`
30174 BN.prototype.xor = function xor (num) {
30175 if (this.length > num.length) return this.clone().ixor(num);
30176 return num.clone().ixor(this);
30177 };
ebd8d4e8 30178
8b095871
IC
30179 BN.prototype.uxor = function uxor (num) {
30180 if (this.length > num.length) return this.clone().iuxor(num);
30181 return num.clone().iuxor(this);
30182 };
ebd8d4e8 30183
8b095871
IC
30184 // Not ``this`` with ``width`` bitwidth
30185 BN.prototype.inotn = function inotn (width) {
30186 assert(typeof width === 'number' && width >= 0);
ebd8d4e8 30187
8b095871
IC
30188 var bytesNeeded = Math.ceil(width / 26) | 0;
30189 var bitsLeft = width % 26;
ebd8d4e8 30190
8b095871
IC
30191 // Extend the buffer with leading zeroes
30192 this._expand(bytesNeeded);
30193
30194 if (bitsLeft > 0) {
30195 bytesNeeded--;
ab78acc6 30196 }
8b095871
IC
30197
30198 // Handle complete words
30199 for (var i = 0; i < bytesNeeded; i++) {
30200 this.words[i] = ~this.words[i] & 0x3ffffff;
ab78acc6 30201 }
8b095871
IC
30202
30203 // Handle the residue
30204 if (bitsLeft > 0) {
30205 this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
ab78acc6 30206 }
ebd8d4e8 30207
8b095871
IC
30208 // And remove leading zeroes
30209 return this.strip();
30210 };
ebd8d4e8 30211
8b095871
IC
30212 BN.prototype.notn = function notn (width) {
30213 return this.clone().inotn(width);
30214 };
ebd8d4e8 30215
8b095871
IC
30216 // Set `bit` of `this`
30217 BN.prototype.setn = function setn (bit, val) {
30218 assert(typeof bit === 'number' && bit >= 0);
ebd8d4e8 30219
8b095871
IC
30220 var off = (bit / 26) | 0;
30221 var wbit = bit % 26;
ebd8d4e8 30222
8b095871 30223 this._expand(off + 1);
ebd8d4e8 30224
8b095871
IC
30225 if (val) {
30226 this.words[off] = this.words[off] | (1 << wbit);
30227 } else {
30228 this.words[off] = this.words[off] & ~(1 << wbit);
30229 }
ebd8d4e8 30230
8b095871
IC
30231 return this.strip();
30232 };
ebd8d4e8 30233
8b095871
IC
30234 // Add `num` to `this` in-place
30235 BN.prototype.iadd = function iadd (num) {
30236 var r;
30237
30238 // negative + positive
30239 if (this.negative !== 0 && num.negative === 0) {
30240 this.negative = 0;
30241 r = this.isub(num);
30242 this.negative ^= 1;
30243 return this._normSign();
30244
30245 // positive + negative
30246 } else if (this.negative === 0 && num.negative !== 0) {
30247 num.negative = 0;
30248 r = this.isub(num);
30249 num.negative = 1;
30250 return r._normSign();
30251 }
30252
30253 // a.length > b.length
30254 var a, b;
30255 if (this.length > num.length) {
30256 a = this;
30257 b = num;
ab78acc6 30258 } else {
8b095871
IC
30259 a = num;
30260 b = this;
30261 }
30262
30263 var carry = 0;
30264 for (var i = 0; i < b.length; i++) {
30265 r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
30266 this.words[i] = r & 0x3ffffff;
30267 carry = r >>> 26;
30268 }
30269 for (; carry !== 0 && i < a.length; i++) {
30270 r = (a.words[i] | 0) + carry;
30271 this.words[i] = r & 0x3ffffff;
30272 carry = r >>> 26;
30273 }
30274
30275 this.length = a.length;
30276 if (carry !== 0) {
30277 this.words[this.length] = carry;
30278 this.length++;
30279 // Copy the rest of the words
30280 } else if (a !== this) {
30281 for (; i < a.length; i++) {
30282 this.words[i] = a.words[i];
30283 }
ab78acc6 30284 }
ebd8d4e8 30285
8b095871
IC
30286 return this;
30287 };
ebd8d4e8 30288
8b095871
IC
30289 // Add `num` to `this`
30290 BN.prototype.add = function add (num) {
30291 var res;
30292 if (num.negative !== 0 && this.negative === 0) {
30293 num.negative = 0;
30294 res = this.sub(num);
30295 num.negative ^= 1;
30296 return res;
30297 } else if (num.negative === 0 && this.negative !== 0) {
30298 this.negative = 0;
30299 res = num.sub(this);
30300 this.negative = 1;
30301 return res;
30302 }
ebd8d4e8 30303
8b095871 30304 if (this.length > num.length) return this.clone().iadd(num);
ebd8d4e8 30305
8b095871
IC
30306 return num.clone().iadd(this);
30307 };
ebd8d4e8 30308
8b095871
IC
30309 // Subtract `num` from `this` in-place
30310 BN.prototype.isub = function isub (num) {
30311 // this - (-num) = this + num
30312 if (num.negative !== 0) {
30313 num.negative = 0;
30314 var r = this.iadd(num);
30315 num.negative = 1;
30316 return r._normSign();
30317
30318 // -this - num = -(this + num)
30319 } else if (this.negative !== 0) {
30320 this.negative = 0;
30321 this.iadd(num);
30322 this.negative = 1;
30323 return this._normSign();
30324 }
30325
30326 // At this point both numbers are positive
30327 var cmp = this.cmp(num);
30328
30329 // Optimization - zeroify
30330 if (cmp === 0) {
30331 this.negative = 0;
30332 this.length = 1;
30333 this.words[0] = 0;
30334 return this;
30335 }
ebd8d4e8 30336
8b095871
IC
30337 // a > b
30338 var a, b;
30339 if (cmp > 0) {
30340 a = this;
30341 b = num;
30342 } else {
30343 a = num;
30344 b = this;
30345 }
ebd8d4e8 30346
8b095871
IC
30347 var carry = 0;
30348 for (var i = 0; i < b.length; i++) {
30349 r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
30350 carry = r >> 26;
30351 this.words[i] = r & 0x3ffffff;
30352 }
30353 for (; carry !== 0 && i < a.length; i++) {
30354 r = (a.words[i] | 0) + carry;
30355 carry = r >> 26;
30356 this.words[i] = r & 0x3ffffff;
30357 }
ebd8d4e8 30358
8b095871
IC
30359 // Copy rest of the words
30360 if (carry === 0 && i < a.length && a !== this) {
30361 for (; i < a.length; i++) {
30362 this.words[i] = a.words[i];
30363 }
30364 }
ebd8d4e8 30365
8b095871 30366 this.length = Math.max(this.length, i);
ebd8d4e8 30367
8b095871
IC
30368 if (a !== this) {
30369 this.negative = 1;
ab78acc6 30370 }
ebd8d4e8 30371
8b095871
IC
30372 return this.strip();
30373 };
ebd8d4e8 30374
8b095871
IC
30375 // Subtract `num` from `this`
30376 BN.prototype.sub = function sub (num) {
30377 return this.clone().isub(num);
30378 };
30379
30380 function smallMulTo (self, num, out) {
30381 out.negative = num.negative ^ self.negative;
30382 var len = (self.length + num.length) | 0;
30383 out.length = len;
30384 len = (len - 1) | 0;
30385
30386 // Peel one iteration (compiler can't do it, because of code complexity)
30387 var a = self.words[0] | 0;
30388 var b = num.words[0] | 0;
30389 var r = a * b;
30390
30391 var lo = r & 0x3ffffff;
30392 var carry = (r / 0x4000000) | 0;
30393 out.words[0] = lo;
30394
30395 for (var k = 1; k < len; k++) {
30396 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
30397 // note that ncarry could be >= 0x3ffffff
30398 var ncarry = carry >>> 26;
30399 var rword = carry & 0x3ffffff;
30400 var maxJ = Math.min(k, num.length - 1);
30401 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
30402 var i = (k - j) | 0;
30403 a = self.words[i] | 0;
30404 b = num.words[j] | 0;
30405 r = a * b + rword;
30406 ncarry += (r / 0x4000000) | 0;
30407 rword = r & 0x3ffffff;
30408 }
30409 out.words[k] = rword | 0;
30410 carry = ncarry | 0;
30411 }
30412 if (carry !== 0) {
30413 out.words[k] = carry | 0;
ab78acc6 30414 } else {
8b095871
IC
30415 out.length--;
30416 }
30417
30418 return out.strip();
30419 }
30420
30421 // TODO(indutny): it may be reasonable to omit it for users who don't need
30422 // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
30423 // multiplication (like elliptic secp256k1).
30424 var comb10MulTo = function comb10MulTo (self, num, out) {
30425 var a = self.words;
30426 var b = num.words;
30427 var o = out.words;
30428 var c = 0;
30429 var lo;
30430 var mid;
30431 var hi;
30432 var a0 = a[0] | 0;
30433 var al0 = a0 & 0x1fff;
30434 var ah0 = a0 >>> 13;
30435 var a1 = a[1] | 0;
30436 var al1 = a1 & 0x1fff;
30437 var ah1 = a1 >>> 13;
30438 var a2 = a[2] | 0;
30439 var al2 = a2 & 0x1fff;
30440 var ah2 = a2 >>> 13;
30441 var a3 = a[3] | 0;
30442 var al3 = a3 & 0x1fff;
30443 var ah3 = a3 >>> 13;
30444 var a4 = a[4] | 0;
30445 var al4 = a4 & 0x1fff;
30446 var ah4 = a4 >>> 13;
30447 var a5 = a[5] | 0;
30448 var al5 = a5 & 0x1fff;
30449 var ah5 = a5 >>> 13;
30450 var a6 = a[6] | 0;
30451 var al6 = a6 & 0x1fff;
30452 var ah6 = a6 >>> 13;
30453 var a7 = a[7] | 0;
30454 var al7 = a7 & 0x1fff;
30455 var ah7 = a7 >>> 13;
30456 var a8 = a[8] | 0;
30457 var al8 = a8 & 0x1fff;
30458 var ah8 = a8 >>> 13;
30459 var a9 = a[9] | 0;
30460 var al9 = a9 & 0x1fff;
30461 var ah9 = a9 >>> 13;
30462 var b0 = b[0] | 0;
30463 var bl0 = b0 & 0x1fff;
30464 var bh0 = b0 >>> 13;
30465 var b1 = b[1] | 0;
30466 var bl1 = b1 & 0x1fff;
30467 var bh1 = b1 >>> 13;
30468 var b2 = b[2] | 0;
30469 var bl2 = b2 & 0x1fff;
30470 var bh2 = b2 >>> 13;
30471 var b3 = b[3] | 0;
30472 var bl3 = b3 & 0x1fff;
30473 var bh3 = b3 >>> 13;
30474 var b4 = b[4] | 0;
30475 var bl4 = b4 & 0x1fff;
30476 var bh4 = b4 >>> 13;
30477 var b5 = b[5] | 0;
30478 var bl5 = b5 & 0x1fff;
30479 var bh5 = b5 >>> 13;
30480 var b6 = b[6] | 0;
30481 var bl6 = b6 & 0x1fff;
30482 var bh6 = b6 >>> 13;
30483 var b7 = b[7] | 0;
30484 var bl7 = b7 & 0x1fff;
30485 var bh7 = b7 >>> 13;
30486 var b8 = b[8] | 0;
30487 var bl8 = b8 & 0x1fff;
30488 var bh8 = b8 >>> 13;
30489 var b9 = b[9] | 0;
30490 var bl9 = b9 & 0x1fff;
30491 var bh9 = b9 >>> 13;
30492
30493 out.negative = self.negative ^ num.negative;
30494 out.length = 19;
30495 /* k = 0 */
30496 lo = Math.imul(al0, bl0);
30497 mid = Math.imul(al0, bh0);
30498 mid = (mid + Math.imul(ah0, bl0)) | 0;
30499 hi = Math.imul(ah0, bh0);
30500 var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30501 c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
30502 w0 &= 0x3ffffff;
30503 /* k = 1 */
30504 lo = Math.imul(al1, bl0);
30505 mid = Math.imul(al1, bh0);
30506 mid = (mid + Math.imul(ah1, bl0)) | 0;
30507 hi = Math.imul(ah1, bh0);
30508 lo = (lo + Math.imul(al0, bl1)) | 0;
30509 mid = (mid + Math.imul(al0, bh1)) | 0;
30510 mid = (mid + Math.imul(ah0, bl1)) | 0;
30511 hi = (hi + Math.imul(ah0, bh1)) | 0;
30512 var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30513 c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
30514 w1 &= 0x3ffffff;
30515 /* k = 2 */
30516 lo = Math.imul(al2, bl0);
30517 mid = Math.imul(al2, bh0);
30518 mid = (mid + Math.imul(ah2, bl0)) | 0;
30519 hi = Math.imul(ah2, bh0);
30520 lo = (lo + Math.imul(al1, bl1)) | 0;
30521 mid = (mid + Math.imul(al1, bh1)) | 0;
30522 mid = (mid + Math.imul(ah1, bl1)) | 0;
30523 hi = (hi + Math.imul(ah1, bh1)) | 0;
30524 lo = (lo + Math.imul(al0, bl2)) | 0;
30525 mid = (mid + Math.imul(al0, bh2)) | 0;
30526 mid = (mid + Math.imul(ah0, bl2)) | 0;
30527 hi = (hi + Math.imul(ah0, bh2)) | 0;
30528 var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30529 c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
30530 w2 &= 0x3ffffff;
30531 /* k = 3 */
30532 lo = Math.imul(al3, bl0);
30533 mid = Math.imul(al3, bh0);
30534 mid = (mid + Math.imul(ah3, bl0)) | 0;
30535 hi = Math.imul(ah3, bh0);
30536 lo = (lo + Math.imul(al2, bl1)) | 0;
30537 mid = (mid + Math.imul(al2, bh1)) | 0;
30538 mid = (mid + Math.imul(ah2, bl1)) | 0;
30539 hi = (hi + Math.imul(ah2, bh1)) | 0;
30540 lo = (lo + Math.imul(al1, bl2)) | 0;
30541 mid = (mid + Math.imul(al1, bh2)) | 0;
30542 mid = (mid + Math.imul(ah1, bl2)) | 0;
30543 hi = (hi + Math.imul(ah1, bh2)) | 0;
30544 lo = (lo + Math.imul(al0, bl3)) | 0;
30545 mid = (mid + Math.imul(al0, bh3)) | 0;
30546 mid = (mid + Math.imul(ah0, bl3)) | 0;
30547 hi = (hi + Math.imul(ah0, bh3)) | 0;
30548 var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30549 c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
30550 w3 &= 0x3ffffff;
30551 /* k = 4 */
30552 lo = Math.imul(al4, bl0);
30553 mid = Math.imul(al4, bh0);
30554 mid = (mid + Math.imul(ah4, bl0)) | 0;
30555 hi = Math.imul(ah4, bh0);
30556 lo = (lo + Math.imul(al3, bl1)) | 0;
30557 mid = (mid + Math.imul(al3, bh1)) | 0;
30558 mid = (mid + Math.imul(ah3, bl1)) | 0;
30559 hi = (hi + Math.imul(ah3, bh1)) | 0;
30560 lo = (lo + Math.imul(al2, bl2)) | 0;
30561 mid = (mid + Math.imul(al2, bh2)) | 0;
30562 mid = (mid + Math.imul(ah2, bl2)) | 0;
30563 hi = (hi + Math.imul(ah2, bh2)) | 0;
30564 lo = (lo + Math.imul(al1, bl3)) | 0;
30565 mid = (mid + Math.imul(al1, bh3)) | 0;
30566 mid = (mid + Math.imul(ah1, bl3)) | 0;
30567 hi = (hi + Math.imul(ah1, bh3)) | 0;
30568 lo = (lo + Math.imul(al0, bl4)) | 0;
30569 mid = (mid + Math.imul(al0, bh4)) | 0;
30570 mid = (mid + Math.imul(ah0, bl4)) | 0;
30571 hi = (hi + Math.imul(ah0, bh4)) | 0;
30572 var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30573 c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
30574 w4 &= 0x3ffffff;
30575 /* k = 5 */
30576 lo = Math.imul(al5, bl0);
30577 mid = Math.imul(al5, bh0);
30578 mid = (mid + Math.imul(ah5, bl0)) | 0;
30579 hi = Math.imul(ah5, bh0);
30580 lo = (lo + Math.imul(al4, bl1)) | 0;
30581 mid = (mid + Math.imul(al4, bh1)) | 0;
30582 mid = (mid + Math.imul(ah4, bl1)) | 0;
30583 hi = (hi + Math.imul(ah4, bh1)) | 0;
30584 lo = (lo + Math.imul(al3, bl2)) | 0;
30585 mid = (mid + Math.imul(al3, bh2)) | 0;
30586 mid = (mid + Math.imul(ah3, bl2)) | 0;
30587 hi = (hi + Math.imul(ah3, bh2)) | 0;
30588 lo = (lo + Math.imul(al2, bl3)) | 0;
30589 mid = (mid + Math.imul(al2, bh3)) | 0;
30590 mid = (mid + Math.imul(ah2, bl3)) | 0;
30591 hi = (hi + Math.imul(ah2, bh3)) | 0;
30592 lo = (lo + Math.imul(al1, bl4)) | 0;
30593 mid = (mid + Math.imul(al1, bh4)) | 0;
30594 mid = (mid + Math.imul(ah1, bl4)) | 0;
30595 hi = (hi + Math.imul(ah1, bh4)) | 0;
30596 lo = (lo + Math.imul(al0, bl5)) | 0;
30597 mid = (mid + Math.imul(al0, bh5)) | 0;
30598 mid = (mid + Math.imul(ah0, bl5)) | 0;
30599 hi = (hi + Math.imul(ah0, bh5)) | 0;
30600 var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30601 c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
30602 w5 &= 0x3ffffff;
30603 /* k = 6 */
30604 lo = Math.imul(al6, bl0);
30605 mid = Math.imul(al6, bh0);
30606 mid = (mid + Math.imul(ah6, bl0)) | 0;
30607 hi = Math.imul(ah6, bh0);
30608 lo = (lo + Math.imul(al5, bl1)) | 0;
30609 mid = (mid + Math.imul(al5, bh1)) | 0;
30610 mid = (mid + Math.imul(ah5, bl1)) | 0;
30611 hi = (hi + Math.imul(ah5, bh1)) | 0;
30612 lo = (lo + Math.imul(al4, bl2)) | 0;
30613 mid = (mid + Math.imul(al4, bh2)) | 0;
30614 mid = (mid + Math.imul(ah4, bl2)) | 0;
30615 hi = (hi + Math.imul(ah4, bh2)) | 0;
30616 lo = (lo + Math.imul(al3, bl3)) | 0;
30617 mid = (mid + Math.imul(al3, bh3)) | 0;
30618 mid = (mid + Math.imul(ah3, bl3)) | 0;
30619 hi = (hi + Math.imul(ah3, bh3)) | 0;
30620 lo = (lo + Math.imul(al2, bl4)) | 0;
30621 mid = (mid + Math.imul(al2, bh4)) | 0;
30622 mid = (mid + Math.imul(ah2, bl4)) | 0;
30623 hi = (hi + Math.imul(ah2, bh4)) | 0;
30624 lo = (lo + Math.imul(al1, bl5)) | 0;
30625 mid = (mid + Math.imul(al1, bh5)) | 0;
30626 mid = (mid + Math.imul(ah1, bl5)) | 0;
30627 hi = (hi + Math.imul(ah1, bh5)) | 0;
30628 lo = (lo + Math.imul(al0, bl6)) | 0;
30629 mid = (mid + Math.imul(al0, bh6)) | 0;
30630 mid = (mid + Math.imul(ah0, bl6)) | 0;
30631 hi = (hi + Math.imul(ah0, bh6)) | 0;
30632 var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30633 c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
30634 w6 &= 0x3ffffff;
30635 /* k = 7 */
30636 lo = Math.imul(al7, bl0);
30637 mid = Math.imul(al7, bh0);
30638 mid = (mid + Math.imul(ah7, bl0)) | 0;
30639 hi = Math.imul(ah7, bh0);
30640 lo = (lo + Math.imul(al6, bl1)) | 0;
30641 mid = (mid + Math.imul(al6, bh1)) | 0;
30642 mid = (mid + Math.imul(ah6, bl1)) | 0;
30643 hi = (hi + Math.imul(ah6, bh1)) | 0;
30644 lo = (lo + Math.imul(al5, bl2)) | 0;
30645 mid = (mid + Math.imul(al5, bh2)) | 0;
30646 mid = (mid + Math.imul(ah5, bl2)) | 0;
30647 hi = (hi + Math.imul(ah5, bh2)) | 0;
30648 lo = (lo + Math.imul(al4, bl3)) | 0;
30649 mid = (mid + Math.imul(al4, bh3)) | 0;
30650 mid = (mid + Math.imul(ah4, bl3)) | 0;
30651 hi = (hi + Math.imul(ah4, bh3)) | 0;
30652 lo = (lo + Math.imul(al3, bl4)) | 0;
30653 mid = (mid + Math.imul(al3, bh4)) | 0;
30654 mid = (mid + Math.imul(ah3, bl4)) | 0;
30655 hi = (hi + Math.imul(ah3, bh4)) | 0;
30656 lo = (lo + Math.imul(al2, bl5)) | 0;
30657 mid = (mid + Math.imul(al2, bh5)) | 0;
30658 mid = (mid + Math.imul(ah2, bl5)) | 0;
30659 hi = (hi + Math.imul(ah2, bh5)) | 0;
30660 lo = (lo + Math.imul(al1, bl6)) | 0;
30661 mid = (mid + Math.imul(al1, bh6)) | 0;
30662 mid = (mid + Math.imul(ah1, bl6)) | 0;
30663 hi = (hi + Math.imul(ah1, bh6)) | 0;
30664 lo = (lo + Math.imul(al0, bl7)) | 0;
30665 mid = (mid + Math.imul(al0, bh7)) | 0;
30666 mid = (mid + Math.imul(ah0, bl7)) | 0;
30667 hi = (hi + Math.imul(ah0, bh7)) | 0;
30668 var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30669 c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
30670 w7 &= 0x3ffffff;
30671 /* k = 8 */
30672 lo = Math.imul(al8, bl0);
30673 mid = Math.imul(al8, bh0);
30674 mid = (mid + Math.imul(ah8, bl0)) | 0;
30675 hi = Math.imul(ah8, bh0);
30676 lo = (lo + Math.imul(al7, bl1)) | 0;
30677 mid = (mid + Math.imul(al7, bh1)) | 0;
30678 mid = (mid + Math.imul(ah7, bl1)) | 0;
30679 hi = (hi + Math.imul(ah7, bh1)) | 0;
30680 lo = (lo + Math.imul(al6, bl2)) | 0;
30681 mid = (mid + Math.imul(al6, bh2)) | 0;
30682 mid = (mid + Math.imul(ah6, bl2)) | 0;
30683 hi = (hi + Math.imul(ah6, bh2)) | 0;
30684 lo = (lo + Math.imul(al5, bl3)) | 0;
30685 mid = (mid + Math.imul(al5, bh3)) | 0;
30686 mid = (mid + Math.imul(ah5, bl3)) | 0;
30687 hi = (hi + Math.imul(ah5, bh3)) | 0;
30688 lo = (lo + Math.imul(al4, bl4)) | 0;
30689 mid = (mid + Math.imul(al4, bh4)) | 0;
30690 mid = (mid + Math.imul(ah4, bl4)) | 0;
30691 hi = (hi + Math.imul(ah4, bh4)) | 0;
30692 lo = (lo + Math.imul(al3, bl5)) | 0;
30693 mid = (mid + Math.imul(al3, bh5)) | 0;
30694 mid = (mid + Math.imul(ah3, bl5)) | 0;
30695 hi = (hi + Math.imul(ah3, bh5)) | 0;
30696 lo = (lo + Math.imul(al2, bl6)) | 0;
30697 mid = (mid + Math.imul(al2, bh6)) | 0;
30698 mid = (mid + Math.imul(ah2, bl6)) | 0;
30699 hi = (hi + Math.imul(ah2, bh6)) | 0;
30700 lo = (lo + Math.imul(al1, bl7)) | 0;
30701 mid = (mid + Math.imul(al1, bh7)) | 0;
30702 mid = (mid + Math.imul(ah1, bl7)) | 0;
30703 hi = (hi + Math.imul(ah1, bh7)) | 0;
30704 lo = (lo + Math.imul(al0, bl8)) | 0;
30705 mid = (mid + Math.imul(al0, bh8)) | 0;
30706 mid = (mid + Math.imul(ah0, bl8)) | 0;
30707 hi = (hi + Math.imul(ah0, bh8)) | 0;
30708 var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30709 c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
30710 w8 &= 0x3ffffff;
30711 /* k = 9 */
30712 lo = Math.imul(al9, bl0);
30713 mid = Math.imul(al9, bh0);
30714 mid = (mid + Math.imul(ah9, bl0)) | 0;
30715 hi = Math.imul(ah9, bh0);
30716 lo = (lo + Math.imul(al8, bl1)) | 0;
30717 mid = (mid + Math.imul(al8, bh1)) | 0;
30718 mid = (mid + Math.imul(ah8, bl1)) | 0;
30719 hi = (hi + Math.imul(ah8, bh1)) | 0;
30720 lo = (lo + Math.imul(al7, bl2)) | 0;
30721 mid = (mid + Math.imul(al7, bh2)) | 0;
30722 mid = (mid + Math.imul(ah7, bl2)) | 0;
30723 hi = (hi + Math.imul(ah7, bh2)) | 0;
30724 lo = (lo + Math.imul(al6, bl3)) | 0;
30725 mid = (mid + Math.imul(al6, bh3)) | 0;
30726 mid = (mid + Math.imul(ah6, bl3)) | 0;
30727 hi = (hi + Math.imul(ah6, bh3)) | 0;
30728 lo = (lo + Math.imul(al5, bl4)) | 0;
30729 mid = (mid + Math.imul(al5, bh4)) | 0;
30730 mid = (mid + Math.imul(ah5, bl4)) | 0;
30731 hi = (hi + Math.imul(ah5, bh4)) | 0;
30732 lo = (lo + Math.imul(al4, bl5)) | 0;
30733 mid = (mid + Math.imul(al4, bh5)) | 0;
30734 mid = (mid + Math.imul(ah4, bl5)) | 0;
30735 hi = (hi + Math.imul(ah4, bh5)) | 0;
30736 lo = (lo + Math.imul(al3, bl6)) | 0;
30737 mid = (mid + Math.imul(al3, bh6)) | 0;
30738 mid = (mid + Math.imul(ah3, bl6)) | 0;
30739 hi = (hi + Math.imul(ah3, bh6)) | 0;
30740 lo = (lo + Math.imul(al2, bl7)) | 0;
30741 mid = (mid + Math.imul(al2, bh7)) | 0;
30742 mid = (mid + Math.imul(ah2, bl7)) | 0;
30743 hi = (hi + Math.imul(ah2, bh7)) | 0;
30744 lo = (lo + Math.imul(al1, bl8)) | 0;
30745 mid = (mid + Math.imul(al1, bh8)) | 0;
30746 mid = (mid + Math.imul(ah1, bl8)) | 0;
30747 hi = (hi + Math.imul(ah1, bh8)) | 0;
30748 lo = (lo + Math.imul(al0, bl9)) | 0;
30749 mid = (mid + Math.imul(al0, bh9)) | 0;
30750 mid = (mid + Math.imul(ah0, bl9)) | 0;
30751 hi = (hi + Math.imul(ah0, bh9)) | 0;
30752 var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30753 c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
30754 w9 &= 0x3ffffff;
30755 /* k = 10 */
30756 lo = Math.imul(al9, bl1);
30757 mid = Math.imul(al9, bh1);
30758 mid = (mid + Math.imul(ah9, bl1)) | 0;
30759 hi = Math.imul(ah9, bh1);
30760 lo = (lo + Math.imul(al8, bl2)) | 0;
30761 mid = (mid + Math.imul(al8, bh2)) | 0;
30762 mid = (mid + Math.imul(ah8, bl2)) | 0;
30763 hi = (hi + Math.imul(ah8, bh2)) | 0;
30764 lo = (lo + Math.imul(al7, bl3)) | 0;
30765 mid = (mid + Math.imul(al7, bh3)) | 0;
30766 mid = (mid + Math.imul(ah7, bl3)) | 0;
30767 hi = (hi + Math.imul(ah7, bh3)) | 0;
30768 lo = (lo + Math.imul(al6, bl4)) | 0;
30769 mid = (mid + Math.imul(al6, bh4)) | 0;
30770 mid = (mid + Math.imul(ah6, bl4)) | 0;
30771 hi = (hi + Math.imul(ah6, bh4)) | 0;
30772 lo = (lo + Math.imul(al5, bl5)) | 0;
30773 mid = (mid + Math.imul(al5, bh5)) | 0;
30774 mid = (mid + Math.imul(ah5, bl5)) | 0;
30775 hi = (hi + Math.imul(ah5, bh5)) | 0;
30776 lo = (lo + Math.imul(al4, bl6)) | 0;
30777 mid = (mid + Math.imul(al4, bh6)) | 0;
30778 mid = (mid + Math.imul(ah4, bl6)) | 0;
30779 hi = (hi + Math.imul(ah4, bh6)) | 0;
30780 lo = (lo + Math.imul(al3, bl7)) | 0;
30781 mid = (mid + Math.imul(al3, bh7)) | 0;
30782 mid = (mid + Math.imul(ah3, bl7)) | 0;
30783 hi = (hi + Math.imul(ah3, bh7)) | 0;
30784 lo = (lo + Math.imul(al2, bl8)) | 0;
30785 mid = (mid + Math.imul(al2, bh8)) | 0;
30786 mid = (mid + Math.imul(ah2, bl8)) | 0;
30787 hi = (hi + Math.imul(ah2, bh8)) | 0;
30788 lo = (lo + Math.imul(al1, bl9)) | 0;
30789 mid = (mid + Math.imul(al1, bh9)) | 0;
30790 mid = (mid + Math.imul(ah1, bl9)) | 0;
30791 hi = (hi + Math.imul(ah1, bh9)) | 0;
30792 var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30793 c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
30794 w10 &= 0x3ffffff;
30795 /* k = 11 */
30796 lo = Math.imul(al9, bl2);
30797 mid = Math.imul(al9, bh2);
30798 mid = (mid + Math.imul(ah9, bl2)) | 0;
30799 hi = Math.imul(ah9, bh2);
30800 lo = (lo + Math.imul(al8, bl3)) | 0;
30801 mid = (mid + Math.imul(al8, bh3)) | 0;
30802 mid = (mid + Math.imul(ah8, bl3)) | 0;
30803 hi = (hi + Math.imul(ah8, bh3)) | 0;
30804 lo = (lo + Math.imul(al7, bl4)) | 0;
30805 mid = (mid + Math.imul(al7, bh4)) | 0;
30806 mid = (mid + Math.imul(ah7, bl4)) | 0;
30807 hi = (hi + Math.imul(ah7, bh4)) | 0;
30808 lo = (lo + Math.imul(al6, bl5)) | 0;
30809 mid = (mid + Math.imul(al6, bh5)) | 0;
30810 mid = (mid + Math.imul(ah6, bl5)) | 0;
30811 hi = (hi + Math.imul(ah6, bh5)) | 0;
30812 lo = (lo + Math.imul(al5, bl6)) | 0;
30813 mid = (mid + Math.imul(al5, bh6)) | 0;
30814 mid = (mid + Math.imul(ah5, bl6)) | 0;
30815 hi = (hi + Math.imul(ah5, bh6)) | 0;
30816 lo = (lo + Math.imul(al4, bl7)) | 0;
30817 mid = (mid + Math.imul(al4, bh7)) | 0;
30818 mid = (mid + Math.imul(ah4, bl7)) | 0;
30819 hi = (hi + Math.imul(ah4, bh7)) | 0;
30820 lo = (lo + Math.imul(al3, bl8)) | 0;
30821 mid = (mid + Math.imul(al3, bh8)) | 0;
30822 mid = (mid + Math.imul(ah3, bl8)) | 0;
30823 hi = (hi + Math.imul(ah3, bh8)) | 0;
30824 lo = (lo + Math.imul(al2, bl9)) | 0;
30825 mid = (mid + Math.imul(al2, bh9)) | 0;
30826 mid = (mid + Math.imul(ah2, bl9)) | 0;
30827 hi = (hi + Math.imul(ah2, bh9)) | 0;
30828 var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30829 c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
30830 w11 &= 0x3ffffff;
30831 /* k = 12 */
30832 lo = Math.imul(al9, bl3);
30833 mid = Math.imul(al9, bh3);
30834 mid = (mid + Math.imul(ah9, bl3)) | 0;
30835 hi = Math.imul(ah9, bh3);
30836 lo = (lo + Math.imul(al8, bl4)) | 0;
30837 mid = (mid + Math.imul(al8, bh4)) | 0;
30838 mid = (mid + Math.imul(ah8, bl4)) | 0;
30839 hi = (hi + Math.imul(ah8, bh4)) | 0;
30840 lo = (lo + Math.imul(al7, bl5)) | 0;
30841 mid = (mid + Math.imul(al7, bh5)) | 0;
30842 mid = (mid + Math.imul(ah7, bl5)) | 0;
30843 hi = (hi + Math.imul(ah7, bh5)) | 0;
30844 lo = (lo + Math.imul(al6, bl6)) | 0;
30845 mid = (mid + Math.imul(al6, bh6)) | 0;
30846 mid = (mid + Math.imul(ah6, bl6)) | 0;
30847 hi = (hi + Math.imul(ah6, bh6)) | 0;
30848 lo = (lo + Math.imul(al5, bl7)) | 0;
30849 mid = (mid + Math.imul(al5, bh7)) | 0;
30850 mid = (mid + Math.imul(ah5, bl7)) | 0;
30851 hi = (hi + Math.imul(ah5, bh7)) | 0;
30852 lo = (lo + Math.imul(al4, bl8)) | 0;
30853 mid = (mid + Math.imul(al4, bh8)) | 0;
30854 mid = (mid + Math.imul(ah4, bl8)) | 0;
30855 hi = (hi + Math.imul(ah4, bh8)) | 0;
30856 lo = (lo + Math.imul(al3, bl9)) | 0;
30857 mid = (mid + Math.imul(al3, bh9)) | 0;
30858 mid = (mid + Math.imul(ah3, bl9)) | 0;
30859 hi = (hi + Math.imul(ah3, bh9)) | 0;
30860 var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30861 c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
30862 w12 &= 0x3ffffff;
30863 /* k = 13 */
30864 lo = Math.imul(al9, bl4);
30865 mid = Math.imul(al9, bh4);
30866 mid = (mid + Math.imul(ah9, bl4)) | 0;
30867 hi = Math.imul(ah9, bh4);
30868 lo = (lo + Math.imul(al8, bl5)) | 0;
30869 mid = (mid + Math.imul(al8, bh5)) | 0;
30870 mid = (mid + Math.imul(ah8, bl5)) | 0;
30871 hi = (hi + Math.imul(ah8, bh5)) | 0;
30872 lo = (lo + Math.imul(al7, bl6)) | 0;
30873 mid = (mid + Math.imul(al7, bh6)) | 0;
30874 mid = (mid + Math.imul(ah7, bl6)) | 0;
30875 hi = (hi + Math.imul(ah7, bh6)) | 0;
30876 lo = (lo + Math.imul(al6, bl7)) | 0;
30877 mid = (mid + Math.imul(al6, bh7)) | 0;
30878 mid = (mid + Math.imul(ah6, bl7)) | 0;
30879 hi = (hi + Math.imul(ah6, bh7)) | 0;
30880 lo = (lo + Math.imul(al5, bl8)) | 0;
30881 mid = (mid + Math.imul(al5, bh8)) | 0;
30882 mid = (mid + Math.imul(ah5, bl8)) | 0;
30883 hi = (hi + Math.imul(ah5, bh8)) | 0;
30884 lo = (lo + Math.imul(al4, bl9)) | 0;
30885 mid = (mid + Math.imul(al4, bh9)) | 0;
30886 mid = (mid + Math.imul(ah4, bl9)) | 0;
30887 hi = (hi + Math.imul(ah4, bh9)) | 0;
30888 var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30889 c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
30890 w13 &= 0x3ffffff;
30891 /* k = 14 */
30892 lo = Math.imul(al9, bl5);
30893 mid = Math.imul(al9, bh5);
30894 mid = (mid + Math.imul(ah9, bl5)) | 0;
30895 hi = Math.imul(ah9, bh5);
30896 lo = (lo + Math.imul(al8, bl6)) | 0;
30897 mid = (mid + Math.imul(al8, bh6)) | 0;
30898 mid = (mid + Math.imul(ah8, bl6)) | 0;
30899 hi = (hi + Math.imul(ah8, bh6)) | 0;
30900 lo = (lo + Math.imul(al7, bl7)) | 0;
30901 mid = (mid + Math.imul(al7, bh7)) | 0;
30902 mid = (mid + Math.imul(ah7, bl7)) | 0;
30903 hi = (hi + Math.imul(ah7, bh7)) | 0;
30904 lo = (lo + Math.imul(al6, bl8)) | 0;
30905 mid = (mid + Math.imul(al6, bh8)) | 0;
30906 mid = (mid + Math.imul(ah6, bl8)) | 0;
30907 hi = (hi + Math.imul(ah6, bh8)) | 0;
30908 lo = (lo + Math.imul(al5, bl9)) | 0;
30909 mid = (mid + Math.imul(al5, bh9)) | 0;
30910 mid = (mid + Math.imul(ah5, bl9)) | 0;
30911 hi = (hi + Math.imul(ah5, bh9)) | 0;
30912 var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30913 c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
30914 w14 &= 0x3ffffff;
30915 /* k = 15 */
30916 lo = Math.imul(al9, bl6);
30917 mid = Math.imul(al9, bh6);
30918 mid = (mid + Math.imul(ah9, bl6)) | 0;
30919 hi = Math.imul(ah9, bh6);
30920 lo = (lo + Math.imul(al8, bl7)) | 0;
30921 mid = (mid + Math.imul(al8, bh7)) | 0;
30922 mid = (mid + Math.imul(ah8, bl7)) | 0;
30923 hi = (hi + Math.imul(ah8, bh7)) | 0;
30924 lo = (lo + Math.imul(al7, bl8)) | 0;
30925 mid = (mid + Math.imul(al7, bh8)) | 0;
30926 mid = (mid + Math.imul(ah7, bl8)) | 0;
30927 hi = (hi + Math.imul(ah7, bh8)) | 0;
30928 lo = (lo + Math.imul(al6, bl9)) | 0;
30929 mid = (mid + Math.imul(al6, bh9)) | 0;
30930 mid = (mid + Math.imul(ah6, bl9)) | 0;
30931 hi = (hi + Math.imul(ah6, bh9)) | 0;
30932 var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30933 c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
30934 w15 &= 0x3ffffff;
30935 /* k = 16 */
30936 lo = Math.imul(al9, bl7);
30937 mid = Math.imul(al9, bh7);
30938 mid = (mid + Math.imul(ah9, bl7)) | 0;
30939 hi = Math.imul(ah9, bh7);
30940 lo = (lo + Math.imul(al8, bl8)) | 0;
30941 mid = (mid + Math.imul(al8, bh8)) | 0;
30942 mid = (mid + Math.imul(ah8, bl8)) | 0;
30943 hi = (hi + Math.imul(ah8, bh8)) | 0;
30944 lo = (lo + Math.imul(al7, bl9)) | 0;
30945 mid = (mid + Math.imul(al7, bh9)) | 0;
30946 mid = (mid + Math.imul(ah7, bl9)) | 0;
30947 hi = (hi + Math.imul(ah7, bh9)) | 0;
30948 var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30949 c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
30950 w16 &= 0x3ffffff;
30951 /* k = 17 */
30952 lo = Math.imul(al9, bl8);
30953 mid = Math.imul(al9, bh8);
30954 mid = (mid + Math.imul(ah9, bl8)) | 0;
30955 hi = Math.imul(ah9, bh8);
30956 lo = (lo + Math.imul(al8, bl9)) | 0;
30957 mid = (mid + Math.imul(al8, bh9)) | 0;
30958 mid = (mid + Math.imul(ah8, bl9)) | 0;
30959 hi = (hi + Math.imul(ah8, bh9)) | 0;
30960 var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30961 c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
30962 w17 &= 0x3ffffff;
30963 /* k = 18 */
30964 lo = Math.imul(al9, bl9);
30965 mid = Math.imul(al9, bh9);
30966 mid = (mid + Math.imul(ah9, bl9)) | 0;
30967 hi = Math.imul(ah9, bh9);
30968 var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30969 c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
30970 w18 &= 0x3ffffff;
30971 o[0] = w0;
30972 o[1] = w1;
30973 o[2] = w2;
30974 o[3] = w3;
30975 o[4] = w4;
30976 o[5] = w5;
30977 o[6] = w6;
30978 o[7] = w7;
30979 o[8] = w8;
30980 o[9] = w9;
30981 o[10] = w10;
30982 o[11] = w11;
30983 o[12] = w12;
30984 o[13] = w13;
30985 o[14] = w14;
30986 o[15] = w15;
30987 o[16] = w16;
30988 o[17] = w17;
30989 o[18] = w18;
30990 if (c !== 0) {
30991 o[19] = c;
30992 out.length++;
ab78acc6 30993 }
8b095871
IC
30994 return out;
30995 };
30996
30997 // Polyfill comb
30998 if (!Math.imul) {
30999 comb10MulTo = smallMulTo;
31000 }
31001
31002 function bigMulTo (self, num, out) {
31003 out.negative = num.negative ^ self.negative;
31004 out.length = self.length + num.length;
31005
31006 var carry = 0;
31007 var hncarry = 0;
31008 for (var k = 0; k < out.length - 1; k++) {
31009 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
31010 // note that ncarry could be >= 0x3ffffff
31011 var ncarry = hncarry;
31012 hncarry = 0;
31013 var rword = carry & 0x3ffffff;
31014 var maxJ = Math.min(k, num.length - 1);
31015 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
31016 var i = k - j;
31017 var a = self.words[i] | 0;
31018 var b = num.words[j] | 0;
31019 var r = a * b;
31020
31021 var lo = r & 0x3ffffff;
31022 ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
31023 lo = (lo + rword) | 0;
31024 rword = lo & 0x3ffffff;
31025 ncarry = (ncarry + (lo >>> 26)) | 0;
31026
31027 hncarry += ncarry >>> 26;
31028 ncarry &= 0x3ffffff;
31029 }
31030 out.words[k] = rword;
31031 carry = ncarry;
31032 ncarry = hncarry;
31033 }
31034 if (carry !== 0) {
31035 out.words[k] = carry;
31036 } else {
31037 out.length--;
ab78acc6 31038 }
8b095871
IC
31039
31040 return out.strip();
ab78acc6 31041 }
8b095871
IC
31042
31043 function jumboMulTo (self, num, out) {
31044 var fftm = new FFTM();
31045 return fftm.mulp(self, num, out);
ab78acc6 31046 }
8b095871
IC
31047
31048 BN.prototype.mulTo = function mulTo (num, out) {
31049 var res;
31050 var len = this.length + num.length;
31051 if (this.length === 10 && num.length === 10) {
31052 res = comb10MulTo(this, num, out);
31053 } else if (len < 63) {
31054 res = smallMulTo(this, num, out);
31055 } else if (len < 1024) {
31056 res = bigMulTo(this, num, out);
ab78acc6 31057 } else {
8b095871 31058 res = jumboMulTo(this, num, out);
ab78acc6 31059 }
8b095871
IC
31060
31061 return res;
31062 };
31063
31064 // Cooley-Tukey algorithm for FFT
31065 // slightly revisited to rely on looping instead of recursion
31066
31067 function FFTM (x, y) {
31068 this.x = x;
31069 this.y = y;
ab78acc6 31070 }
8b095871
IC
31071
31072 FFTM.prototype.makeRBT = function makeRBT (N) {
31073 var t = new Array(N);
31074 var l = BN.prototype._countBits(N) - 1;
31075 for (var i = 0; i < N; i++) {
31076 t[i] = this.revBin(i, l, N);
31077 }
31078
31079 return t;
31080 };
31081
31082 // Returns binary-reversed representation of `x`
31083 FFTM.prototype.revBin = function revBin (x, l, N) {
31084 if (x === 0 || x === N - 1) return x;
31085
31086 var rb = 0;
31087 for (var i = 0; i < l; i++) {
31088 rb |= (x & 1) << (l - i - 1);
31089 x >>= 1;
31090 }
31091
31092 return rb;
31093 };
31094
31095 // Performs "tweedling" phase, therefore 'emulating'
31096 // behaviour of the recursive algorithm
31097 FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
31098 for (var i = 0; i < N; i++) {
31099 rtws[i] = rws[rbt[i]];
31100 itws[i] = iws[rbt[i]];
31101 }
31102 };
31103
31104 FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
31105 this.permute(rbt, rws, iws, rtws, itws, N);
31106
31107 for (var s = 1; s < N; s <<= 1) {
31108 var l = s << 1;
31109
31110 var rtwdf = Math.cos(2 * Math.PI / l);
31111 var itwdf = Math.sin(2 * Math.PI / l);
31112
31113 for (var p = 0; p < N; p += l) {
31114 var rtwdf_ = rtwdf;
31115 var itwdf_ = itwdf;
31116
31117 for (var j = 0; j < s; j++) {
31118 var re = rtws[p + j];
31119 var ie = itws[p + j];
31120
31121 var ro = rtws[p + j + s];
31122 var io = itws[p + j + s];
31123
31124 var rx = rtwdf_ * ro - itwdf_ * io;
31125
31126 io = rtwdf_ * io + itwdf_ * ro;
31127 ro = rx;
31128
31129 rtws[p + j] = re + ro;
31130 itws[p + j] = ie + io;
31131
31132 rtws[p + j + s] = re - ro;
31133 itws[p + j + s] = ie - io;
31134
31135 /* jshint maxdepth : false */
31136 if (j !== l) {
31137 rx = rtwdf * rtwdf_ - itwdf * itwdf_;
31138
31139 itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
31140 rtwdf_ = rx;
31141 }
31142 }
31143 }
ab78acc6 31144 }
8b095871
IC
31145 };
31146
31147 FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
31148 var N = Math.max(m, n) | 1;
31149 var odd = N & 1;
31150 var i = 0;
31151 for (N = N / 2 | 0; N; N = N >>> 1) {
31152 i++;
ab78acc6 31153 }
ebd8d4e8 31154
8b095871
IC
31155 return 1 << i + 1 + odd;
31156 };
ebd8d4e8 31157
8b095871
IC
31158 FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
31159 if (N <= 1) return;
ebd8d4e8 31160
8b095871
IC
31161 for (var i = 0; i < N / 2; i++) {
31162 var t = rws[i];
ebd8d4e8 31163
8b095871
IC
31164 rws[i] = rws[N - i - 1];
31165 rws[N - i - 1] = t;
ebd8d4e8 31166
8b095871 31167 t = iws[i];
ebd8d4e8 31168
8b095871
IC
31169 iws[i] = -iws[N - i - 1];
31170 iws[N - i - 1] = -t;
31171 }
31172 };
ebd8d4e8 31173
8b095871
IC
31174 FFTM.prototype.normalize13b = function normalize13b (ws, N) {
31175 var carry = 0;
31176 for (var i = 0; i < N / 2; i++) {
31177 var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
31178 Math.round(ws[2 * i] / N) +
31179 carry;
ebd8d4e8 31180
8b095871 31181 ws[i] = w & 0x3ffffff;
ebd8d4e8 31182
8b095871
IC
31183 if (w < 0x4000000) {
31184 carry = 0;
31185 } else {
31186 carry = w / 0x4000000 | 0;
31187 }
31188 }
ebd8d4e8 31189
8b095871
IC
31190 return ws;
31191 };
ebd8d4e8 31192
8b095871
IC
31193 FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
31194 var carry = 0;
31195 for (var i = 0; i < len; i++) {
31196 carry = carry + (ws[i] | 0);
ebd8d4e8 31197
8b095871
IC
31198 rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
31199 rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
31200 }
ebd8d4e8 31201
8b095871
IC
31202 // Pad with zeroes
31203 for (i = 2 * len; i < N; ++i) {
31204 rws[i] = 0;
31205 }
ebd8d4e8 31206
8b095871
IC
31207 assert(carry === 0);
31208 assert((carry & ~0x1fff) === 0);
31209 };
ebd8d4e8 31210
8b095871
IC
31211 FFTM.prototype.stub = function stub (N) {
31212 var ph = new Array(N);
31213 for (var i = 0; i < N; i++) {
31214 ph[i] = 0;
31215 }
ebd8d4e8 31216
8b095871
IC
31217 return ph;
31218 };
ebd8d4e8 31219
8b095871
IC
31220 FFTM.prototype.mulp = function mulp (x, y, out) {
31221 var N = 2 * this.guessLen13b(x.length, y.length);
ebd8d4e8 31222
8b095871 31223 var rbt = this.makeRBT(N);
ebd8d4e8 31224
8b095871 31225 var _ = this.stub(N);
ebd8d4e8 31226
8b095871
IC
31227 var rws = new Array(N);
31228 var rwst = new Array(N);
31229 var iwst = new Array(N);
ebd8d4e8 31230
8b095871
IC
31231 var nrws = new Array(N);
31232 var nrwst = new Array(N);
31233 var niwst = new Array(N);
ebd8d4e8 31234
8b095871
IC
31235 var rmws = out.words;
31236 rmws.length = N;
ebd8d4e8 31237
8b095871
IC
31238 this.convert13b(x.words, x.length, rws, N);
31239 this.convert13b(y.words, y.length, nrws, N);
ebd8d4e8 31240
8b095871
IC
31241 this.transform(rws, _, rwst, iwst, N, rbt);
31242 this.transform(nrws, _, nrwst, niwst, N, rbt);
ebd8d4e8 31243
8b095871
IC
31244 for (var i = 0; i < N; i++) {
31245 var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
31246 iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
31247 rwst[i] = rx;
31248 }
ebd8d4e8 31249
8b095871
IC
31250 this.conjugate(rwst, iwst, N);
31251 this.transform(rwst, iwst, rmws, _, N, rbt);
31252 this.conjugate(rmws, _, N);
31253 this.normalize13b(rmws, N);
ebd8d4e8 31254
8b095871
IC
31255 out.negative = x.negative ^ y.negative;
31256 out.length = x.length + y.length;
31257 return out.strip();
31258 };
ebd8d4e8 31259
8b095871
IC
31260 // Multiply `this` by `num`
31261 BN.prototype.mul = function mul (num) {
31262 var out = new BN(null);
31263 out.words = new Array(this.length + num.length);
31264 return this.mulTo(num, out);
31265 };
ab78acc6 31266
8b095871
IC
31267 // Multiply employing FFT
31268 BN.prototype.mulf = function mulf (num) {
31269 var out = new BN(null);
31270 out.words = new Array(this.length + num.length);
31271 return jumboMulTo(this, num, out);
31272 };
ebd8d4e8 31273
8b095871
IC
31274 // In-place Multiplication
31275 BN.prototype.imul = function imul (num) {
31276 return this.clone().mulTo(num, this);
31277 };
ab78acc6 31278
8b095871
IC
31279 BN.prototype.imuln = function imuln (num) {
31280 assert(typeof num === 'number');
31281 assert(num < 0x4000000);
ab78acc6 31282
8b095871
IC
31283 // Carry
31284 var carry = 0;
31285 for (var i = 0; i < this.length; i++) {
31286 var w = (this.words[i] | 0) * num;
31287 var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
31288 carry >>= 26;
31289 carry += (w / 0x4000000) | 0;
31290 // NOTE: lo is 27bit maximum
31291 carry += lo >>> 26;
31292 this.words[i] = lo & 0x3ffffff;
31293 }
ab78acc6 31294
8b095871
IC
31295 if (carry !== 0) {
31296 this.words[i] = carry;
31297 this.length++;
31298 }
ab78acc6 31299
8b095871
IC
31300 return this;
31301 };
ab78acc6 31302
8b095871
IC
31303 BN.prototype.muln = function muln (num) {
31304 return this.clone().imuln(num);
31305 };
ebd8d4e8 31306
8b095871
IC
31307 // `this` * `this`
31308 BN.prototype.sqr = function sqr () {
31309 return this.mul(this);
31310 };
ebd8d4e8 31311
8b095871
IC
31312 // `this` * `this` in-place
31313 BN.prototype.isqr = function isqr () {
31314 return this.imul(this.clone());
31315 };
ab78acc6 31316
8b095871
IC
31317 // Math.pow(`this`, `num`)
31318 BN.prototype.pow = function pow (num) {
31319 var w = toBitArray(num);
31320 if (w.length === 0) return new BN(1);
ab78acc6 31321
8b095871
IC
31322 // Skip leading zeroes
31323 var res = this;
31324 for (var i = 0; i < w.length; i++, res = res.sqr()) {
31325 if (w[i] !== 0) break;
31326 }
ebd8d4e8 31327
8b095871
IC
31328 if (++i < w.length) {
31329 for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
31330 if (w[i] === 0) continue;
ebd8d4e8 31331
8b095871
IC
31332 res = res.mul(q);
31333 }
ab78acc6
IC
31334 }
31335
8b095871
IC
31336 return res;
31337 };
ab78acc6 31338
8b095871
IC
31339 // Shift-left in-place
31340 BN.prototype.iushln = function iushln (bits) {
31341 assert(typeof bits === 'number' && bits >= 0);
31342 var r = bits % 26;
31343 var s = (bits - r) / 26;
31344 var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
31345 var i;
31346
31347 if (r !== 0) {
31348 var carry = 0;
31349
31350 for (i = 0; i < this.length; i++) {
31351 var newCarry = this.words[i] & carryMask;
31352 var c = ((this.words[i] | 0) - newCarry) << r;
31353 this.words[i] = c | carry;
31354 carry = newCarry >>> (26 - r);
31355 }
31356
31357 if (carry) {
31358 this.words[i] = carry;
31359 this.length++;
31360 }
ab78acc6 31361 }
ebd8d4e8 31362
8b095871
IC
31363 if (s !== 0) {
31364 for (i = this.length - 1; i >= 0; i--) {
31365 this.words[i + s] = this.words[i];
31366 }
ebd8d4e8 31367
8b095871
IC
31368 for (i = 0; i < s; i++) {
31369 this.words[i] = 0;
31370 }
ebd8d4e8 31371
8b095871
IC
31372 this.length += s;
31373 }
ebd8d4e8 31374
8b095871
IC
31375 return this.strip();
31376 };
ebd8d4e8 31377
8b095871
IC
31378 BN.prototype.ishln = function ishln (bits) {
31379 // TODO(indutny): implement me
31380 assert(this.negative === 0);
31381 return this.iushln(bits);
31382 };
ebd8d4e8 31383
8b095871
IC
31384 // Shift-right in-place
31385 // NOTE: `hint` is a lowest bit before trailing zeroes
31386 // NOTE: if `extended` is present - it will be filled with destroyed bits
31387 BN.prototype.iushrn = function iushrn (bits, hint, extended) {
31388 assert(typeof bits === 'number' && bits >= 0);
31389 var h;
31390 if (hint) {
31391 h = (hint - (hint % 26)) / 26;
31392 } else {
31393 h = 0;
31394 }
ebd8d4e8 31395
8b095871
IC
31396 var r = bits % 26;
31397 var s = Math.min((bits - r) / 26, this.length);
31398 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
31399 var maskedWords = extended;
31400
31401 h -= s;
31402 h = Math.max(0, h);
31403
31404 // Extended mode, copy masked part
31405 if (maskedWords) {
31406 for (var i = 0; i < s; i++) {
31407 maskedWords.words[i] = this.words[i];
31408 }
31409 maskedWords.length = s;
ab78acc6 31410 }
ebd8d4e8 31411
8b095871
IC
31412 if (s === 0) {
31413 // No-op, we should not move anything at all
31414 } else if (this.length > s) {
31415 this.length -= s;
31416 for (i = 0; i < this.length; i++) {
31417 this.words[i] = this.words[i + s];
31418 }
31419 } else {
31420 this.words[0] = 0;
31421 this.length = 1;
31422 }
ab78acc6 31423
8b095871
IC
31424 var carry = 0;
31425 for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
31426 var word = this.words[i] | 0;
31427 this.words[i] = (carry << (26 - r)) | (word >>> r);
31428 carry = word & mask;
ab78acc6 31429 }
ebd8d4e8 31430
8b095871
IC
31431 // Push carried bits as a mask
31432 if (maskedWords && carry !== 0) {
31433 maskedWords.words[maskedWords.length++] = carry;
31434 }
31435
31436 if (this.length === 0) {
31437 this.words[0] = 0;
31438 this.length = 1;
31439 }
31440
31441 return this.strip();
31442 };
31443
31444 BN.prototype.ishrn = function ishrn (bits, hint, extended) {
31445 // TODO(indutny): implement me
31446 assert(this.negative === 0);
31447 return this.iushrn(bits, hint, extended);
31448 };
31449
31450 // Shift-left
31451 BN.prototype.shln = function shln (bits) {
31452 return this.clone().ishln(bits);
31453 };
31454
31455 BN.prototype.ushln = function ushln (bits) {
31456 return this.clone().iushln(bits);
31457 };
31458
31459 // Shift-right
31460 BN.prototype.shrn = function shrn (bits) {
31461 return this.clone().ishrn(bits);
31462 };
ebd8d4e8 31463
8b095871
IC
31464 BN.prototype.ushrn = function ushrn (bits) {
31465 return this.clone().iushrn(bits);
31466 };
ebd8d4e8 31467
8b095871
IC
31468 // Test if n bit is set
31469 BN.prototype.testn = function testn (bit) {
31470 assert(typeof bit === 'number' && bit >= 0);
31471 var r = bit % 26;
31472 var s = (bit - r) / 26;
31473 var q = 1 << r;
ebd8d4e8 31474
8b095871
IC
31475 // Fast case: bit is much higher than all existing words
31476 if (this.length <= s) return false;
ab78acc6 31477
8b095871
IC
31478 // Check bit and return
31479 var w = this.words[s];
ab78acc6 31480
8b095871
IC
31481 return !!(w & q);
31482 };
ab78acc6 31483
8b095871
IC
31484 // Return only lowers bits of number (in-place)
31485 BN.prototype.imaskn = function imaskn (bits) {
31486 assert(typeof bits === 'number' && bits >= 0);
31487 var r = bits % 26;
31488 var s = (bits - r) / 26;
ab78acc6 31489
8b095871 31490 assert(this.negative === 0, 'imaskn works only with positive numbers');
ab78acc6 31491
8b095871
IC
31492 if (this.length <= s) {
31493 return this;
31494 }
ab78acc6 31495
8b095871
IC
31496 if (r !== 0) {
31497 s++;
31498 }
31499 this.length = Math.min(s, this.length);
ab78acc6 31500
8b095871
IC
31501 if (r !== 0) {
31502 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
31503 this.words[this.length - 1] &= mask;
31504 }
ab78acc6 31505
8b095871
IC
31506 return this.strip();
31507 };
ab78acc6 31508
8b095871
IC
31509 // Return only lowers bits of number
31510 BN.prototype.maskn = function maskn (bits) {
31511 return this.clone().imaskn(bits);
31512 };
ebd8d4e8 31513
8b095871
IC
31514 // Add plain number `num` to `this`
31515 BN.prototype.iaddn = function iaddn (num) {
31516 assert(typeof num === 'number');
31517 assert(num < 0x4000000);
31518 if (num < 0) return this.isubn(-num);
31519
31520 // Possible sign change
31521 if (this.negative !== 0) {
31522 if (this.length === 1 && (this.words[0] | 0) < num) {
31523 this.words[0] = num - (this.words[0] | 0);
31524 this.negative = 0;
31525 return this;
31526 }
ebd8d4e8 31527
8b095871
IC
31528 this.negative = 0;
31529 this.isubn(num);
31530 this.negative = 1;
31531 return this;
31532 }
ebd8d4e8 31533
8b095871
IC
31534 // Add without checks
31535 return this._iaddn(num);
31536 };
ebd8d4e8 31537
8b095871
IC
31538 BN.prototype._iaddn = function _iaddn (num) {
31539 this.words[0] += num;
ebd8d4e8 31540
8b095871
IC
31541 // Carry
31542 for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
31543 this.words[i] -= 0x4000000;
31544 if (i === this.length - 1) {
31545 this.words[i + 1] = 1;
31546 } else {
31547 this.words[i + 1]++;
31548 }
31549 }
31550 this.length = Math.max(this.length, i + 1);
ebd8d4e8 31551
8b095871
IC
31552 return this;
31553 };
ebd8d4e8 31554
8b095871
IC
31555 // Subtract plain number `num` from `this`
31556 BN.prototype.isubn = function isubn (num) {
31557 assert(typeof num === 'number');
31558 assert(num < 0x4000000);
31559 if (num < 0) return this.iaddn(-num);
ebd8d4e8 31560
8b095871
IC
31561 if (this.negative !== 0) {
31562 this.negative = 0;
31563 this.iaddn(num);
31564 this.negative = 1;
31565 return this;
31566 }
ebd8d4e8 31567
8b095871 31568 this.words[0] -= num;
ab78acc6 31569
8b095871
IC
31570 if (this.length === 1 && this.words[0] < 0) {
31571 this.words[0] = -this.words[0];
31572 this.negative = 1;
31573 } else {
31574 // Carry
31575 for (var i = 0; i < this.length && this.words[i] < 0; i++) {
31576 this.words[i] += 0x4000000;
31577 this.words[i + 1] -= 1;
31578 }
31579 }
ebd8d4e8 31580
8b095871
IC
31581 return this.strip();
31582 };
ab78acc6 31583
8b095871
IC
31584 BN.prototype.addn = function addn (num) {
31585 return this.clone().iaddn(num);
31586 };
ab78acc6 31587
8b095871
IC
31588 BN.prototype.subn = function subn (num) {
31589 return this.clone().isubn(num);
31590 };
ab78acc6 31591
8b095871
IC
31592 BN.prototype.iabs = function iabs () {
31593 this.negative = 0;
ab78acc6 31594
8b095871
IC
31595 return this;
31596 };
ab78acc6 31597
8b095871
IC
31598 BN.prototype.abs = function abs () {
31599 return this.clone().iabs();
31600 };
ab78acc6 31601
8b095871
IC
31602 BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
31603 var len = num.length + shift;
31604 var i;
ab78acc6 31605
8b095871 31606 this._expand(len);
ab78acc6 31607
8b095871
IC
31608 var w;
31609 var carry = 0;
31610 for (i = 0; i < num.length; i++) {
31611 w = (this.words[i + shift] | 0) + carry;
31612 var right = (num.words[i] | 0) * mul;
31613 w -= right & 0x3ffffff;
31614 carry = (w >> 26) - ((right / 0x4000000) | 0);
31615 this.words[i + shift] = w & 0x3ffffff;
31616 }
31617 for (; i < this.length - shift; i++) {
31618 w = (this.words[i + shift] | 0) + carry;
31619 carry = w >> 26;
31620 this.words[i + shift] = w & 0x3ffffff;
31621 }
ebd8d4e8 31622
8b095871 31623 if (carry === 0) return this.strip();
ab78acc6 31624
8b095871
IC
31625 // Subtraction overflow
31626 assert(carry === -1);
31627 carry = 0;
31628 for (i = 0; i < this.length; i++) {
31629 w = -(this.words[i] | 0) + carry;
31630 carry = w >> 26;
31631 this.words[i] = w & 0x3ffffff;
31632 }
31633 this.negative = 1;
ab78acc6 31634
8b095871
IC
31635 return this.strip();
31636 };
ab78acc6 31637
8b095871
IC
31638 BN.prototype._wordDiv = function _wordDiv (num, mode) {
31639 var shift = this.length - num.length;
ebd8d4e8 31640
8b095871
IC
31641 var a = this.clone();
31642 var b = num;
ab78acc6 31643
8b095871
IC
31644 // Normalize
31645 var bhi = b.words[b.length - 1] | 0;
31646 var bhiBits = this._countBits(bhi);
31647 shift = 26 - bhiBits;
31648 if (shift !== 0) {
31649 b = b.ushln(shift);
31650 a.iushln(shift);
31651 bhi = b.words[b.length - 1] | 0;
31652 }
ebd8d4e8 31653
8b095871
IC
31654 // Initialize quotient
31655 var m = a.length - b.length;
31656 var q;
ab78acc6 31657
8b095871
IC
31658 if (mode !== 'mod') {
31659 q = new BN(null);
31660 q.length = m + 1;
31661 q.words = new Array(q.length);
31662 for (var i = 0; i < q.length; i++) {
31663 q.words[i] = 0;
31664 }
31665 }
ebd8d4e8 31666
8b095871
IC
31667 var diff = a.clone()._ishlnsubmul(b, 1, m);
31668 if (diff.negative === 0) {
31669 a = diff;
31670 if (q) {
31671 q.words[m] = 1;
31672 }
31673 }
ebd8d4e8 31674
8b095871
IC
31675 for (var j = m - 1; j >= 0; j--) {
31676 var qj = (a.words[b.length + j] | 0) * 0x4000000 +
31677 (a.words[b.length + j - 1] | 0);
ebd8d4e8 31678
8b095871
IC
31679 // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
31680 // (0x7ffffff)
31681 qj = Math.min((qj / bhi) | 0, 0x3ffffff);
ebd8d4e8 31682
8b095871
IC
31683 a._ishlnsubmul(b, qj, j);
31684 while (a.negative !== 0) {
31685 qj--;
31686 a.negative = 0;
31687 a._ishlnsubmul(b, 1, j);
31688 if (!a.isZero()) {
31689 a.negative ^= 1;
31690 }
31691 }
31692 if (q) {
31693 q.words[j] = qj;
31694 }
31695 }
31696 if (q) {
31697 q.strip();
31698 }
31699 a.strip();
ebd8d4e8 31700
8b095871
IC
31701 // Denormalize
31702 if (mode !== 'div' && shift !== 0) {
31703 a.iushrn(shift);
31704 }
ebd8d4e8 31705
8b095871
IC
31706 return {
31707 div: q || null,
31708 mod: a
31709 };
31710 };
ebd8d4e8 31711
8b095871
IC
31712 // NOTE: 1) `mode` can be set to `mod` to request mod only,
31713 // to `div` to request div only, or be absent to
31714 // request both div & mod
31715 // 2) `positive` is true if unsigned mod is requested
31716 BN.prototype.divmod = function divmod (num, mode, positive) {
31717 assert(!num.isZero());
31718
31719 if (this.isZero()) {
31720 return {
31721 div: new BN(0),
31722 mod: new BN(0)
31723 };
31724 }
ebd8d4e8 31725
8b095871
IC
31726 var div, mod, res;
31727 if (this.negative !== 0 && num.negative === 0) {
31728 res = this.neg().divmod(num, mode);
ebd8d4e8 31729
8b095871
IC
31730 if (mode !== 'mod') {
31731 div = res.div.neg();
31732 }
ebd8d4e8 31733
8b095871
IC
31734 if (mode !== 'div') {
31735 mod = res.mod.neg();
31736 if (positive && mod.negative !== 0) {
31737 mod.iadd(num);
31738 }
31739 }
ebd8d4e8 31740
8b095871
IC
31741 return {
31742 div: div,
31743 mod: mod
31744 };
31745 }
ebd8d4e8 31746
8b095871
IC
31747 if (this.negative === 0 && num.negative !== 0) {
31748 res = this.divmod(num.neg(), mode);
ebd8d4e8 31749
8b095871
IC
31750 if (mode !== 'mod') {
31751 div = res.div.neg();
31752 }
ebd8d4e8 31753
8b095871
IC
31754 return {
31755 div: div,
31756 mod: res.mod
31757 };
31758 }
ebd8d4e8 31759
8b095871
IC
31760 if ((this.negative & num.negative) !== 0) {
31761 res = this.neg().divmod(num.neg(), mode);
ebd8d4e8 31762
8b095871
IC
31763 if (mode !== 'div') {
31764 mod = res.mod.neg();
31765 if (positive && mod.negative !== 0) {
31766 mod.isub(num);
31767 }
31768 }
ebd8d4e8 31769
8b095871
IC
31770 return {
31771 div: res.div,
31772 mod: mod
31773 };
31774 }
ebd8d4e8 31775
8b095871 31776 // Both numbers are positive at this point
ebd8d4e8 31777
8b095871
IC
31778 // Strip both numbers to approximate shift value
31779 if (num.length > this.length || this.cmp(num) < 0) {
31780 return {
31781 div: new BN(0),
31782 mod: this
31783 };
31784 }
ebd8d4e8 31785
8b095871
IC
31786 // Very short reduction
31787 if (num.length === 1) {
31788 if (mode === 'div') {
31789 return {
31790 div: this.divn(num.words[0]),
31791 mod: null
31792 };
31793 }
ebd8d4e8 31794
8b095871
IC
31795 if (mode === 'mod') {
31796 return {
31797 div: null,
31798 mod: new BN(this.modn(num.words[0]))
31799 };
31800 }
ebd8d4e8 31801
8b095871
IC
31802 return {
31803 div: this.divn(num.words[0]),
31804 mod: new BN(this.modn(num.words[0]))
31805 };
31806 }
ebd8d4e8 31807
8b095871
IC
31808 return this._wordDiv(num, mode);
31809 };
ab78acc6 31810
8b095871
IC
31811 // Find `this` / `num`
31812 BN.prototype.div = function div (num) {
31813 return this.divmod(num, 'div', false).div;
31814 };
ab78acc6 31815
8b095871
IC
31816 // Find `this` % `num`
31817 BN.prototype.mod = function mod (num) {
31818 return this.divmod(num, 'mod', false).mod;
31819 };
ab78acc6 31820
8b095871
IC
31821 BN.prototype.umod = function umod (num) {
31822 return this.divmod(num, 'mod', true).mod;
31823 };
ebd8d4e8 31824
8b095871
IC
31825 // Find Round(`this` / `num`)
31826 BN.prototype.divRound = function divRound (num) {
31827 var dm = this.divmod(num);
ebd8d4e8 31828
8b095871
IC
31829 // Fast case - exact division
31830 if (dm.mod.isZero()) return dm.div;
ebd8d4e8 31831
8b095871 31832 var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
ebd8d4e8 31833
8b095871
IC
31834 var half = num.ushrn(1);
31835 var r2 = num.andln(1);
31836 var cmp = mod.cmp(half);
ebd8d4e8 31837
8b095871
IC
31838 // Round down
31839 if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
ebd8d4e8 31840
8b095871
IC
31841 // Round up
31842 return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
31843 };
ab78acc6 31844
8b095871
IC
31845 BN.prototype.modn = function modn (num) {
31846 assert(num <= 0x3ffffff);
31847 var p = (1 << 26) % num;
ab78acc6 31848
8b095871
IC
31849 var acc = 0;
31850 for (var i = this.length - 1; i >= 0; i--) {
31851 acc = (p * acc + (this.words[i] | 0)) % num;
ab78acc6 31852 }
ab78acc6 31853
8b095871
IC
31854 return acc;
31855 };
31856
31857 // In-place division by number
31858 BN.prototype.idivn = function idivn (num) {
31859 assert(num <= 0x3ffffff);
31860
31861 var carry = 0;
31862 for (var i = this.length - 1; i >= 0; i--) {
31863 var w = (this.words[i] | 0) + carry * 0x4000000;
31864 this.words[i] = (w / num) | 0;
31865 carry = w % num;
ebd8d4e8 31866 }
ebd8d4e8 31867
8b095871
IC
31868 return this.strip();
31869 };
ab78acc6 31870
8b095871
IC
31871 BN.prototype.divn = function divn (num) {
31872 return this.clone().idivn(num);
31873 };
ebd8d4e8 31874
8b095871
IC
31875 BN.prototype.egcd = function egcd (p) {
31876 assert(p.negative === 0);
31877 assert(!p.isZero());
ebd8d4e8 31878
8b095871
IC
31879 var x = this;
31880 var y = p.clone();
31881
31882 if (x.negative !== 0) {
31883 x = x.umod(p);
31884 } else {
31885 x = x.clone();
31886 }
31887
31888 // A * x + B * y = x
31889 var A = new BN(1);
31890 var B = new BN(0);
31891
31892 // C * x + D * y = y
31893 var C = new BN(0);
31894 var D = new BN(1);
31895
31896 var g = 0;
31897
31898 while (x.isEven() && y.isEven()) {
31899 x.iushrn(1);
31900 y.iushrn(1);
31901 ++g;
31902 }
ebd8d4e8 31903
8b095871
IC
31904 var yp = y.clone();
31905 var xp = x.clone();
ebd8d4e8 31906
8b095871
IC
31907 while (!x.isZero()) {
31908 for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
31909 if (i > 0) {
31910 x.iushrn(i);
31911 while (i-- > 0) {
31912 if (A.isOdd() || B.isOdd()) {
31913 A.iadd(yp);
31914 B.isub(xp);
31915 }
ebd8d4e8 31916
8b095871
IC
31917 A.iushrn(1);
31918 B.iushrn(1);
31919 }
31920 }
ebd8d4e8 31921
8b095871
IC
31922 for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
31923 if (j > 0) {
31924 y.iushrn(j);
31925 while (j-- > 0) {
31926 if (C.isOdd() || D.isOdd()) {
31927 C.iadd(yp);
31928 D.isub(xp);
31929 }
ab78acc6 31930
8b095871
IC
31931 C.iushrn(1);
31932 D.iushrn(1);
31933 }
31934 }
ebd8d4e8 31935
8b095871
IC
31936 if (x.cmp(y) >= 0) {
31937 x.isub(y);
31938 A.isub(C);
31939 B.isub(D);
31940 } else {
31941 y.isub(x);
31942 C.isub(A);
31943 D.isub(B);
31944 }
31945 }
ebd8d4e8 31946
8b095871
IC
31947 return {
31948 a: C,
31949 b: D,
31950 gcd: y.iushln(g)
31951 };
31952 };
ebd8d4e8 31953
8b095871
IC
31954 // This is reduced incarnation of the binary EEA
31955 // above, designated to invert members of the
31956 // _prime_ fields F(p) at a maximal speed
31957 BN.prototype._invmp = function _invmp (p) {
31958 assert(p.negative === 0);
31959 assert(!p.isZero());
ebd8d4e8 31960
8b095871
IC
31961 var a = this;
31962 var b = p.clone();
ebd8d4e8 31963
8b095871
IC
31964 if (a.negative !== 0) {
31965 a = a.umod(p);
31966 } else {
31967 a = a.clone();
31968 }
ebd8d4e8 31969
8b095871
IC
31970 var x1 = new BN(1);
31971 var x2 = new BN(0);
ebd8d4e8 31972
8b095871 31973 var delta = b.clone();
ebd8d4e8 31974
8b095871
IC
31975 while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
31976 for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
31977 if (i > 0) {
31978 a.iushrn(i);
31979 while (i-- > 0) {
31980 if (x1.isOdd()) {
31981 x1.iadd(delta);
31982 }
ebd8d4e8 31983
8b095871
IC
31984 x1.iushrn(1);
31985 }
31986 }
ab78acc6 31987
8b095871
IC
31988 for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
31989 if (j > 0) {
31990 b.iushrn(j);
31991 while (j-- > 0) {
31992 if (x2.isOdd()) {
31993 x2.iadd(delta);
31994 }
ebd8d4e8 31995
8b095871
IC
31996 x2.iushrn(1);
31997 }
31998 }
ebd8d4e8 31999
8b095871
IC
32000 if (a.cmp(b) >= 0) {
32001 a.isub(b);
32002 x1.isub(x2);
32003 } else {
32004 b.isub(a);
32005 x2.isub(x1);
32006 }
32007 }
ebd8d4e8 32008
8b095871
IC
32009 var res;
32010 if (a.cmpn(1) === 0) {
32011 res = x1;
32012 } else {
32013 res = x2;
32014 }
ebd8d4e8 32015
8b095871
IC
32016 if (res.cmpn(0) < 0) {
32017 res.iadd(p);
ab78acc6
IC
32018 }
32019
8b095871
IC
32020 return res;
32021 };
ebd8d4e8 32022
8b095871
IC
32023 BN.prototype.gcd = function gcd (num) {
32024 if (this.isZero()) return num.abs();
32025 if (num.isZero()) return this.abs();
32026
32027 var a = this.clone();
32028 var b = num.clone();
32029 a.negative = 0;
32030 b.negative = 0;
32031
32032 // Remove common factor of two
32033 for (var shift = 0; a.isEven() && b.isEven(); shift++) {
32034 a.iushrn(1);
32035 b.iushrn(1);
ab78acc6 32036 }
ab78acc6 32037
8b095871
IC
32038 do {
32039 while (a.isEven()) {
32040 a.iushrn(1);
32041 }
32042 while (b.isEven()) {
32043 b.iushrn(1);
32044 }
ebd8d4e8 32045
8b095871
IC
32046 var r = a.cmp(b);
32047 if (r < 0) {
32048 // Swap `a` and `b` to make `a` always bigger than `b`
32049 var t = a;
32050 a = b;
32051 b = t;
32052 } else if (r === 0 || b.cmpn(1) === 0) {
32053 break;
32054 }
ab78acc6 32055
8b095871
IC
32056 a.isub(b);
32057 } while (true);
ab78acc6 32058
8b095871
IC
32059 return b.iushln(shift);
32060 };
ab78acc6 32061
8b095871
IC
32062 // Invert number in the field F(num)
32063 BN.prototype.invm = function invm (num) {
32064 return this.egcd(num).a.umod(num);
32065 };
ebd8d4e8 32066
8b095871
IC
32067 BN.prototype.isEven = function isEven () {
32068 return (this.words[0] & 1) === 0;
32069 };
ab78acc6 32070
8b095871
IC
32071 BN.prototype.isOdd = function isOdd () {
32072 return (this.words[0] & 1) === 1;
32073 };
ebd8d4e8 32074
8b095871
IC
32075 // And first word and num
32076 BN.prototype.andln = function andln (num) {
32077 return this.words[0] & num;
32078 };
ebd8d4e8 32079
8b095871
IC
32080 // Increment at the bit position in-line
32081 BN.prototype.bincn = function bincn (bit) {
32082 assert(typeof bit === 'number');
32083 var r = bit % 26;
32084 var s = (bit - r) / 26;
32085 var q = 1 << r;
32086
32087 // Fast case: bit is much higher than all existing words
32088 if (this.length <= s) {
32089 this._expand(s + 1);
32090 this.words[s] |= q;
32091 return this;
32092 }
ebd8d4e8 32093
8b095871
IC
32094 // Add bit and propagate, if needed
32095 var carry = q;
32096 for (var i = s; carry !== 0 && i < this.length; i++) {
32097 var w = this.words[i] | 0;
32098 w += carry;
32099 carry = w >>> 26;
32100 w &= 0x3ffffff;
32101 this.words[i] = w;
32102 }
32103 if (carry !== 0) {
32104 this.words[i] = carry;
32105 this.length++;
32106 }
32107 return this;
32108 };
ebd8d4e8 32109
8b095871
IC
32110 BN.prototype.isZero = function isZero () {
32111 return this.length === 1 && this.words[0] === 0;
32112 };
ebd8d4e8 32113
8b095871
IC
32114 BN.prototype.cmpn = function cmpn (num) {
32115 var negative = num < 0;
ebd8d4e8 32116
8b095871
IC
32117 if (this.negative !== 0 && !negative) return -1;
32118 if (this.negative === 0 && negative) return 1;
ab78acc6 32119
8b095871 32120 this.strip();
ab78acc6 32121
8b095871
IC
32122 var res;
32123 if (this.length > 1) {
32124 res = 1;
32125 } else {
32126 if (negative) {
32127 num = -num;
32128 }
ebd8d4e8 32129
8b095871 32130 assert(num <= 0x3ffffff, 'Number is too big');
ebd8d4e8 32131
8b095871
IC
32132 var w = this.words[0] | 0;
32133 res = w === num ? 0 : w < num ? -1 : 1;
32134 }
32135 if (this.negative !== 0) return -res | 0;
32136 return res;
32137 };
ebd8d4e8 32138
8b095871
IC
32139 // Compare two numbers and return:
32140 // 1 - if `this` > `num`
32141 // 0 - if `this` == `num`
32142 // -1 - if `this` < `num`
32143 BN.prototype.cmp = function cmp (num) {
32144 if (this.negative !== 0 && num.negative === 0) return -1;
32145 if (this.negative === 0 && num.negative !== 0) return 1;
32146
32147 var res = this.ucmp(num);
32148 if (this.negative !== 0) return -res | 0;
32149 return res;
32150 };
ebd8d4e8 32151
8b095871
IC
32152 // Unsigned comparison
32153 BN.prototype.ucmp = function ucmp (num) {
32154 // At this point both numbers have the same sign
32155 if (this.length > num.length) return 1;
32156 if (this.length < num.length) return -1;
32157
32158 var res = 0;
32159 for (var i = this.length - 1; i >= 0; i--) {
32160 var a = this.words[i] | 0;
32161 var b = num.words[i] | 0;
32162
32163 if (a === b) continue;
32164 if (a < b) {
32165 res = -1;
32166 } else if (a > b) {
32167 res = 1;
32168 }
32169 break;
32170 }
32171 return res;
32172 };
ebd8d4e8 32173
8b095871
IC
32174 BN.prototype.gtn = function gtn (num) {
32175 return this.cmpn(num) === 1;
32176 };
ebd8d4e8 32177
8b095871
IC
32178 BN.prototype.gt = function gt (num) {
32179 return this.cmp(num) === 1;
32180 };
ebd8d4e8 32181
8b095871
IC
32182 BN.prototype.gten = function gten (num) {
32183 return this.cmpn(num) >= 0;
32184 };
ab78acc6 32185
8b095871
IC
32186 BN.prototype.gte = function gte (num) {
32187 return this.cmp(num) >= 0;
32188 };
ab78acc6 32189
8b095871
IC
32190 BN.prototype.ltn = function ltn (num) {
32191 return this.cmpn(num) === -1;
32192 };
ab78acc6 32193
8b095871
IC
32194 BN.prototype.lt = function lt (num) {
32195 return this.cmp(num) === -1;
32196 };
ebd8d4e8 32197
8b095871
IC
32198 BN.prototype.lten = function lten (num) {
32199 return this.cmpn(num) <= 0;
32200 };
ab78acc6 32201
8b095871
IC
32202 BN.prototype.lte = function lte (num) {
32203 return this.cmp(num) <= 0;
32204 };
ab78acc6 32205
8b095871
IC
32206 BN.prototype.eqn = function eqn (num) {
32207 return this.cmpn(num) === 0;
32208 };
ab78acc6 32209
8b095871
IC
32210 BN.prototype.eq = function eq (num) {
32211 return this.cmp(num) === 0;
32212 };
ebd8d4e8 32213
8b095871
IC
32214 //
32215 // A reduce context, could be using montgomery or something better, depending
32216 // on the `m` itself.
32217 //
32218 BN.red = function red (num) {
32219 return new Red(num);
32220 };
ab78acc6 32221
8b095871
IC
32222 BN.prototype.toRed = function toRed (ctx) {
32223 assert(!this.red, 'Already a number in reduction context');
32224 assert(this.negative === 0, 'red works only with positives');
32225 return ctx.convertTo(this)._forceRed(ctx);
32226 };
32227
32228 BN.prototype.fromRed = function fromRed () {
32229 assert(this.red, 'fromRed works only with numbers in reduction context');
32230 return this.red.convertFrom(this);
32231 };
32232
32233 BN.prototype._forceRed = function _forceRed (ctx) {
32234 this.red = ctx;
32235 return this;
32236 };
32237
32238 BN.prototype.forceRed = function forceRed (ctx) {
32239 assert(!this.red, 'Already a number in reduction context');
32240 return this._forceRed(ctx);
32241 };
32242
32243 BN.prototype.redAdd = function redAdd (num) {
32244 assert(this.red, 'redAdd works only with red numbers');
32245 return this.red.add(this, num);
32246 };
ebd8d4e8 32247
8b095871
IC
32248 BN.prototype.redIAdd = function redIAdd (num) {
32249 assert(this.red, 'redIAdd works only with red numbers');
32250 return this.red.iadd(this, num);
32251 };
ab78acc6 32252
8b095871
IC
32253 BN.prototype.redSub = function redSub (num) {
32254 assert(this.red, 'redSub works only with red numbers');
32255 return this.red.sub(this, num);
32256 };
ab78acc6 32257
8b095871
IC
32258 BN.prototype.redISub = function redISub (num) {
32259 assert(this.red, 'redISub works only with red numbers');
32260 return this.red.isub(this, num);
32261 };
ebd8d4e8 32262
8b095871
IC
32263 BN.prototype.redShl = function redShl (num) {
32264 assert(this.red, 'redShl works only with red numbers');
32265 return this.red.shl(this, num);
32266 };
ebd8d4e8 32267
8b095871
IC
32268 BN.prototype.redMul = function redMul (num) {
32269 assert(this.red, 'redMul works only with red numbers');
32270 this.red._verify2(this, num);
32271 return this.red.mul(this, num);
32272 };
ebd8d4e8 32273
8b095871
IC
32274 BN.prototype.redIMul = function redIMul (num) {
32275 assert(this.red, 'redMul works only with red numbers');
32276 this.red._verify2(this, num);
32277 return this.red.imul(this, num);
32278 };
ebd8d4e8 32279
8b095871
IC
32280 BN.prototype.redSqr = function redSqr () {
32281 assert(this.red, 'redSqr works only with red numbers');
32282 this.red._verify1(this);
32283 return this.red.sqr(this);
32284 };
ebd8d4e8 32285
8b095871
IC
32286 BN.prototype.redISqr = function redISqr () {
32287 assert(this.red, 'redISqr works only with red numbers');
32288 this.red._verify1(this);
32289 return this.red.isqr(this);
32290 };
ebd8d4e8 32291
8b095871
IC
32292 // Square root over p
32293 BN.prototype.redSqrt = function redSqrt () {
32294 assert(this.red, 'redSqrt works only with red numbers');
32295 this.red._verify1(this);
32296 return this.red.sqrt(this);
32297 };
ebd8d4e8 32298
8b095871
IC
32299 BN.prototype.redInvm = function redInvm () {
32300 assert(this.red, 'redInvm works only with red numbers');
32301 this.red._verify1(this);
32302 return this.red.invm(this);
32303 };
ebd8d4e8 32304
8b095871
IC
32305 // Return negative clone of `this` % `red modulo`
32306 BN.prototype.redNeg = function redNeg () {
32307 assert(this.red, 'redNeg works only with red numbers');
32308 this.red._verify1(this);
32309 return this.red.neg(this);
32310 };
ebd8d4e8 32311
8b095871
IC
32312 BN.prototype.redPow = function redPow (num) {
32313 assert(this.red && !num.red, 'redPow(normalNum)');
32314 this.red._verify1(this);
32315 return this.red.pow(this, num);
32316 };
ebd8d4e8 32317
8b095871
IC
32318 // Prime numbers with efficient reduction
32319 var primes = {
32320 k256: null,
32321 p224: null,
32322 p192: null,
32323 p25519: null
32324 };
ebd8d4e8 32325
8b095871
IC
32326 // Pseudo-Mersenne prime
32327 function MPrime (name, p) {
32328 // P = 2 ^ N - K
32329 this.name = name;
32330 this.p = new BN(p, 16);
32331 this.n = this.p.bitLength();
32332 this.k = new BN(1).iushln(this.n).isub(this.p);
ebd8d4e8 32333
8b095871
IC
32334 this.tmp = this._tmp();
32335 }
ebd8d4e8 32336
8b095871
IC
32337 MPrime.prototype._tmp = function _tmp () {
32338 var tmp = new BN(null);
32339 tmp.words = new Array(Math.ceil(this.n / 13));
32340 return tmp;
32341 };
ebd8d4e8 32342
8b095871
IC
32343 MPrime.prototype.ireduce = function ireduce (num) {
32344 // Assumes that `num` is less than `P^2`
32345 // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
32346 var r = num;
32347 var rlen;
ebd8d4e8 32348
8b095871
IC
32349 do {
32350 this.split(r, this.tmp);
32351 r = this.imulK(r);
32352 r = r.iadd(this.tmp);
32353 rlen = r.bitLength();
32354 } while (rlen > this.n);
32355
32356 var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
32357 if (cmp === 0) {
32358 r.words[0] = 0;
32359 r.length = 1;
32360 } else if (cmp > 0) {
32361 r.isub(this.p);
32362 } else {
32363 r.strip();
32364 }
ebd8d4e8 32365
8b095871
IC
32366 return r;
32367 };
ebd8d4e8 32368
8b095871
IC
32369 MPrime.prototype.split = function split (input, out) {
32370 input.iushrn(this.n, 0, out);
32371 };
ebd8d4e8 32372
8b095871
IC
32373 MPrime.prototype.imulK = function imulK (num) {
32374 return num.imul(this.k);
32375 };
ebd8d4e8 32376
8b095871
IC
32377 function K256 () {
32378 MPrime.call(
32379 this,
32380 'k256',
32381 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
32382 }
32383 inherits(K256, MPrime);
ebd8d4e8 32384
8b095871
IC
32385 K256.prototype.split = function split (input, output) {
32386 // 256 = 9 * 26 + 22
32387 var mask = 0x3fffff;
ebd8d4e8 32388
8b095871
IC
32389 var outLen = Math.min(input.length, 9);
32390 for (var i = 0; i < outLen; i++) {
32391 output.words[i] = input.words[i];
32392 }
32393 output.length = outLen;
ebd8d4e8 32394
8b095871
IC
32395 if (input.length <= 9) {
32396 input.words[0] = 0;
32397 input.length = 1;
32398 return;
32399 }
ebd8d4e8 32400
8b095871
IC
32401 // Shift by 9 limbs
32402 var prev = input.words[9];
32403 output.words[output.length++] = prev & mask;
ebd8d4e8 32404
8b095871
IC
32405 for (i = 10; i < input.length; i++) {
32406 var next = input.words[i] | 0;
32407 input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
32408 prev = next;
32409 }
32410 prev >>>= 22;
32411 input.words[i - 10] = prev;
32412 if (prev === 0 && input.length > 10) {
32413 input.length -= 10;
32414 } else {
32415 input.length -= 9;
32416 }
32417 };
ebd8d4e8 32418
8b095871
IC
32419 K256.prototype.imulK = function imulK (num) {
32420 // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
32421 num.words[num.length] = 0;
32422 num.words[num.length + 1] = 0;
32423 num.length += 2;
32424
32425 // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
32426 var lo = 0;
32427 for (var i = 0; i < num.length; i++) {
32428 var w = num.words[i] | 0;
32429 lo += w * 0x3d1;
32430 num.words[i] = lo & 0x3ffffff;
32431 lo = w * 0x40 + ((lo / 0x4000000) | 0);
32432 }
32433
32434 // Fast length reduction
32435 if (num.words[num.length - 1] === 0) {
32436 num.length--;
32437 if (num.words[num.length - 1] === 0) {
32438 num.length--;
32439 }
32440 }
32441 return num;
32442 };
ebd8d4e8 32443
8b095871
IC
32444 function P224 () {
32445 MPrime.call(
32446 this,
32447 'p224',
32448 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
32449 }
32450 inherits(P224, MPrime);
ebd8d4e8 32451
8b095871
IC
32452 function P192 () {
32453 MPrime.call(
32454 this,
32455 'p192',
32456 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
32457 }
32458 inherits(P192, MPrime);
ebd8d4e8 32459
8b095871
IC
32460 function P25519 () {
32461 // 2 ^ 255 - 19
32462 MPrime.call(
32463 this,
32464 '25519',
32465 '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
32466 }
32467 inherits(P25519, MPrime);
ebd8d4e8 32468
8b095871
IC
32469 P25519.prototype.imulK = function imulK (num) {
32470 // K = 0x13
32471 var carry = 0;
32472 for (var i = 0; i < num.length; i++) {
32473 var hi = (num.words[i] | 0) * 0x13 + carry;
32474 var lo = hi & 0x3ffffff;
32475 hi >>>= 26;
ebd8d4e8 32476
8b095871
IC
32477 num.words[i] = lo;
32478 carry = hi;
32479 }
32480 if (carry !== 0) {
32481 num.words[num.length++] = carry;
32482 }
32483 return num;
32484 };
ebd8d4e8 32485
8b095871
IC
32486 // Exported mostly for testing purposes, use plain name instead
32487 BN._prime = function prime (name) {
32488 // Cached version of prime
32489 if (primes[name]) return primes[name];
32490
32491 var prime;
32492 if (name === 'k256') {
32493 prime = new K256();
32494 } else if (name === 'p224') {
32495 prime = new P224();
32496 } else if (name === 'p192') {
32497 prime = new P192();
32498 } else if (name === 'p25519') {
32499 prime = new P25519();
32500 } else {
32501 throw new Error('Unknown prime ' + name);
32502 }
32503 primes[name] = prime;
ab78acc6 32504
8b095871
IC
32505 return prime;
32506 };
ab78acc6 32507
8b095871
IC
32508 //
32509 // Base reduction engine
32510 //
32511 function Red (m) {
32512 if (typeof m === 'string') {
32513 var prime = BN._prime(m);
32514 this.m = prime.p;
32515 this.prime = prime;
32516 } else {
32517 assert(m.gtn(1), 'modulus must be greater than 1');
32518 this.m = m;
32519 this.prime = null;
32520 }
32521 }
ab78acc6 32522
8b095871
IC
32523 Red.prototype._verify1 = function _verify1 (a) {
32524 assert(a.negative === 0, 'red works only with positives');
32525 assert(a.red, 'red works only with red numbers');
32526 };
ab78acc6 32527
8b095871
IC
32528 Red.prototype._verify2 = function _verify2 (a, b) {
32529 assert((a.negative | b.negative) === 0, 'red works only with positives');
32530 assert(a.red && a.red === b.red,
32531 'red works only with red numbers');
32532 };
ebd8d4e8 32533
8b095871
IC
32534 Red.prototype.imod = function imod (a) {
32535 if (this.prime) return this.prime.ireduce(a)._forceRed(this);
32536 return a.umod(this.m)._forceRed(this);
32537 };
ebd8d4e8 32538
8b095871
IC
32539 Red.prototype.neg = function neg (a) {
32540 if (a.isZero()) {
32541 return a.clone();
32542 }
ebd8d4e8 32543
8b095871
IC
32544 return this.m.sub(a)._forceRed(this);
32545 };
ab78acc6 32546
8b095871
IC
32547 Red.prototype.add = function add (a, b) {
32548 this._verify2(a, b);
ab78acc6 32549
8b095871
IC
32550 var res = a.add(b);
32551 if (res.cmp(this.m) >= 0) {
32552 res.isub(this.m);
32553 }
32554 return res._forceRed(this);
32555 };
ab78acc6 32556
8b095871
IC
32557 Red.prototype.iadd = function iadd (a, b) {
32558 this._verify2(a, b);
ab78acc6 32559
8b095871
IC
32560 var res = a.iadd(b);
32561 if (res.cmp(this.m) >= 0) {
32562 res.isub(this.m);
32563 }
32564 return res;
32565 };
ab78acc6 32566
8b095871
IC
32567 Red.prototype.sub = function sub (a, b) {
32568 this._verify2(a, b);
ab78acc6 32569
8b095871
IC
32570 var res = a.sub(b);
32571 if (res.cmpn(0) < 0) {
32572 res.iadd(this.m);
32573 }
32574 return res._forceRed(this);
32575 };
ab78acc6 32576
8b095871
IC
32577 Red.prototype.isub = function isub (a, b) {
32578 this._verify2(a, b);
ebd8d4e8 32579
8b095871
IC
32580 var res = a.isub(b);
32581 if (res.cmpn(0) < 0) {
32582 res.iadd(this.m);
32583 }
32584 return res;
32585 };
ebd8d4e8 32586
8b095871
IC
32587 Red.prototype.shl = function shl (a, num) {
32588 this._verify1(a);
32589 return this.imod(a.ushln(num));
32590 };
ebd8d4e8 32591
8b095871
IC
32592 Red.prototype.imul = function imul (a, b) {
32593 this._verify2(a, b);
32594 return this.imod(a.imul(b));
32595 };
ebd8d4e8 32596
8b095871
IC
32597 Red.prototype.mul = function mul (a, b) {
32598 this._verify2(a, b);
32599 return this.imod(a.mul(b));
32600 };
ebd8d4e8 32601
8b095871
IC
32602 Red.prototype.isqr = function isqr (a) {
32603 return this.imul(a, a.clone());
32604 };
32605
32606 Red.prototype.sqr = function sqr (a) {
32607 return this.mul(a, a);
32608 };
ebd8d4e8 32609
8b095871
IC
32610 Red.prototype.sqrt = function sqrt (a) {
32611 if (a.isZero()) return a.clone();
ebd8d4e8 32612
8b095871
IC
32613 var mod3 = this.m.andln(3);
32614 assert(mod3 % 2 === 1);
ebd8d4e8 32615
8b095871
IC
32616 // Fast case
32617 if (mod3 === 3) {
32618 var pow = this.m.add(new BN(1)).iushrn(2);
32619 return this.pow(a, pow);
32620 }
ebd8d4e8 32621
8b095871
IC
32622 // Tonelli-Shanks algorithm (Totally unoptimized and slow)
32623 //
32624 // Find Q and S, that Q * 2 ^ S = (P - 1)
32625 var q = this.m.subn(1);
32626 var s = 0;
32627 while (!q.isZero() && q.andln(1) === 0) {
32628 s++;
32629 q.iushrn(1);
32630 }
32631 assert(!q.isZero());
ebd8d4e8 32632
8b095871
IC
32633 var one = new BN(1).toRed(this);
32634 var nOne = one.redNeg();
ebd8d4e8 32635
8b095871
IC
32636 // Find quadratic non-residue
32637 // NOTE: Max is such because of generalized Riemann hypothesis.
32638 var lpow = this.m.subn(1).iushrn(1);
32639 var z = this.m.bitLength();
32640 z = new BN(2 * z * z).toRed(this);
ebd8d4e8 32641
8b095871
IC
32642 while (this.pow(z, lpow).cmp(nOne) !== 0) {
32643 z.redIAdd(nOne);
32644 }
ebd8d4e8 32645
8b095871
IC
32646 var c = this.pow(z, q);
32647 var r = this.pow(a, q.addn(1).iushrn(1));
32648 var t = this.pow(a, q);
32649 var m = s;
32650 while (t.cmp(one) !== 0) {
32651 var tmp = t;
32652 for (var i = 0; tmp.cmp(one) !== 0; i++) {
32653 tmp = tmp.redSqr();
32654 }
32655 assert(i < m);
32656 var b = this.pow(c, new BN(1).iushln(m - i - 1));
ebd8d4e8 32657
8b095871
IC
32658 r = r.redMul(b);
32659 c = b.redSqr();
32660 t = t.redMul(c);
32661 m = i;
32662 }
ebd8d4e8 32663
8b095871
IC
32664 return r;
32665 };
ebd8d4e8 32666
8b095871
IC
32667 Red.prototype.invm = function invm (a) {
32668 var inv = a._invmp(this.m);
32669 if (inv.negative !== 0) {
32670 inv.negative = 0;
32671 return this.imod(inv).redNeg();
32672 } else {
32673 return this.imod(inv);
32674 }
32675 };
ebd8d4e8 32676
8b095871
IC
32677 Red.prototype.pow = function pow (a, num) {
32678 if (num.isZero()) return new BN(1);
32679 if (num.cmpn(1) === 0) return a.clone();
ebd8d4e8 32680
8b095871
IC
32681 var windowSize = 4;
32682 var wnd = new Array(1 << windowSize);
32683 wnd[0] = new BN(1).toRed(this);
32684 wnd[1] = a;
32685 for (var i = 2; i < wnd.length; i++) {
32686 wnd[i] = this.mul(wnd[i - 1], a);
32687 }
ebd8d4e8 32688
8b095871
IC
32689 var res = wnd[0];
32690 var current = 0;
32691 var currentLen = 0;
32692 var start = num.bitLength() % 26;
32693 if (start === 0) {
32694 start = 26;
32695 }
ebd8d4e8 32696
8b095871
IC
32697 for (i = num.length - 1; i >= 0; i--) {
32698 var word = num.words[i];
32699 for (var j = start - 1; j >= 0; j--) {
32700 var bit = (word >> j) & 1;
32701 if (res !== wnd[0]) {
32702 res = this.sqr(res);
32703 }
ebd8d4e8 32704
8b095871
IC
32705 if (bit === 0 && current === 0) {
32706 currentLen = 0;
32707 continue;
32708 }
ebd8d4e8 32709
8b095871
IC
32710 current <<= 1;
32711 current |= bit;
32712 currentLen++;
32713 if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
ebd8d4e8 32714
8b095871
IC
32715 res = this.mul(res, wnd[current]);
32716 currentLen = 0;
32717 current = 0;
32718 }
32719 start = 26;
32720 }
ebd8d4e8 32721
8b095871
IC
32722 return res;
32723 };
ebd8d4e8 32724
8b095871
IC
32725 Red.prototype.convertTo = function convertTo (num) {
32726 var r = num.umod(this.m);
ebd8d4e8 32727
8b095871
IC
32728 return r === num ? r.clone() : r;
32729 };
ebd8d4e8 32730
8b095871
IC
32731 Red.prototype.convertFrom = function convertFrom (num) {
32732 var res = num.clone();
32733 res.red = null;
32734 return res;
32735 };
ebd8d4e8 32736
8b095871
IC
32737 //
32738 // Montgomery method engine
32739 //
ebd8d4e8 32740
8b095871
IC
32741 BN.mont = function mont (num) {
32742 return new Mont(num);
32743 };
ebd8d4e8 32744
8b095871
IC
32745 function Mont (m) {
32746 Red.call(this, m);
ebd8d4e8 32747
8b095871
IC
32748 this.shift = this.m.bitLength();
32749 if (this.shift % 26 !== 0) {
32750 this.shift += 26 - (this.shift % 26);
32751 }
ebd8d4e8 32752
8b095871
IC
32753 this.r = new BN(1).iushln(this.shift);
32754 this.r2 = this.imod(this.r.sqr());
32755 this.rinv = this.r._invmp(this.m);
32756
32757 this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
32758 this.minv = this.minv.umod(this.r);
32759 this.minv = this.r.sub(this.minv);
ebd8d4e8 32760 }
8b095871 32761 inherits(Mont, Red);
ebd8d4e8 32762
8b095871
IC
32763 Mont.prototype.convertTo = function convertTo (num) {
32764 return this.imod(num.ushln(this.shift));
32765 };
ab78acc6 32766
8b095871
IC
32767 Mont.prototype.convertFrom = function convertFrom (num) {
32768 var r = this.imod(num.mul(this.rinv));
32769 r.red = null;
32770 return r;
32771 };
ebd8d4e8 32772
8b095871
IC
32773 Mont.prototype.imul = function imul (a, b) {
32774 if (a.isZero() || b.isZero()) {
32775 a.words[0] = 0;
32776 a.length = 1;
32777 return a;
32778 }
ebd8d4e8 32779
8b095871
IC
32780 var t = a.imul(b);
32781 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
32782 var u = t.isub(c).iushrn(this.shift);
32783 var res = u;
ab78acc6 32784
8b095871
IC
32785 if (u.cmp(this.m) >= 0) {
32786 res = u.isub(this.m);
32787 } else if (u.cmpn(0) < 0) {
32788 res = u.iadd(this.m);
32789 }
ab78acc6 32790
8b095871
IC
32791 return res._forceRed(this);
32792 };
ab78acc6 32793
8b095871
IC
32794 Mont.prototype.mul = function mul (a, b) {
32795 if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
ab78acc6 32796
8b095871
IC
32797 var t = a.mul(b);
32798 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
32799 var u = t.isub(c).iushrn(this.shift);
32800 var res = u;
32801 if (u.cmp(this.m) >= 0) {
32802 res = u.isub(this.m);
32803 } else if (u.cmpn(0) < 0) {
32804 res = u.iadd(this.m);
32805 }
ab78acc6 32806
8b095871
IC
32807 return res._forceRed(this);
32808 };
ab78acc6 32809
8b095871
IC
32810 Mont.prototype.invm = function invm (a) {
32811 // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
32812 var res = this.imod(a._invmp(this.m).mul(this.r2));
32813 return res._forceRed(this);
32814 };
32815})(typeof module === 'undefined' || module, this);
ab78acc6 32816
8b095871
IC
32817},{}],34:[function(require,module,exports){
32818var r;
ebd8d4e8 32819
8b095871
IC
32820module.exports = function rand(len) {
32821 if (!r)
32822 r = new Rand(null);
ebd8d4e8 32823
8b095871
IC
32824 return r.generate(len);
32825};
ab78acc6 32826
8b095871
IC
32827function Rand(rand) {
32828 this.rand = rand;
ab78acc6 32829}
8b095871 32830module.exports.Rand = Rand;
ab78acc6 32831
8b095871
IC
32832Rand.prototype.generate = function generate(len) {
32833 return this._rand(len);
32834};
ab78acc6 32835
8b095871
IC
32836if (typeof self === 'object') {
32837 if (self.crypto && self.crypto.getRandomValues) {
32838 // Modern browsers
32839 Rand.prototype._rand = function _rand(n) {
32840 var arr = new Uint8Array(n);
32841 self.crypto.getRandomValues(arr);
32842 return arr;
32843 };
32844 } else if (self.msCrypto && self.msCrypto.getRandomValues) {
32845 // IE
32846 Rand.prototype._rand = function _rand(n) {
32847 var arr = new Uint8Array(n);
32848 self.msCrypto.getRandomValues(arr);
32849 return arr;
32850 };
32851 } else {
32852 // Old junk
32853 Rand.prototype._rand = function() {
32854 throw new Error('Not implemented yet');
32855 };
32856 }
32857} else {
32858 // Node.js or Web worker with no crypto support
32859 try {
32860 var crypto = require('crypto');
ab78acc6 32861
8b095871
IC
32862 Rand.prototype._rand = function _rand(n) {
32863 return crypto.randomBytes(n);
32864 };
32865 } catch (e) {
32866 // Emulate crypto API using randy
32867 Rand.prototype._rand = function _rand(n) {
32868 var res = new Uint8Array(n);
32869 for (var i = 0; i < res.length; i++)
32870 res[i] = this.rand.getByte();
32871 return res;
32872 };
32873 }
32874}
32875
32876},{"crypto":3}],35:[function(require,module,exports){
32877(function (Buffer){
32878var Transform = require('stream').Transform
32879var inherits = require('inherits')
32880var StringDecoder = require('string_decoder').StringDecoder
32881module.exports = CipherBase
32882inherits(CipherBase, Transform)
32883function CipherBase (hashMode) {
32884 Transform.call(this)
32885 this.hashMode = typeof hashMode === 'string'
32886 if (this.hashMode) {
32887 this[hashMode] = this._finalOrDigest
32888 } else {
32889 this.final = this._finalOrDigest
32890 }
32891 this._decoder = null
32892 this._encoding = null
32893}
32894CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
32895 if (typeof data === 'string') {
32896 data = new Buffer(data, inputEnc)
32897 }
32898 var outData = this._update(data)
32899 if (this.hashMode) {
32900 return this
32901 }
32902 if (outputEnc) {
32903 outData = this._toString(outData, outputEnc)
32904 }
32905 return outData
32906}
ab78acc6 32907
8b095871 32908CipherBase.prototype.setAutoPadding = function () {}
ab78acc6 32909
8b095871
IC
32910CipherBase.prototype.getAuthTag = function () {
32911 throw new Error('trying to get auth tag in unsupported state')
32912}
ab78acc6 32913
8b095871
IC
32914CipherBase.prototype.setAuthTag = function () {
32915 throw new Error('trying to set auth tag in unsupported state')
32916}
ab78acc6 32917
8b095871
IC
32918CipherBase.prototype.setAAD = function () {
32919 throw new Error('trying to set aad in unsupported state')
32920}
ab78acc6 32921
8b095871
IC
32922CipherBase.prototype._transform = function (data, _, next) {
32923 var err
32924 try {
32925 if (this.hashMode) {
32926 this._update(data)
32927 } else {
32928 this.push(this._update(data))
32929 }
32930 } catch (e) {
32931 err = e
32932 } finally {
32933 next(err)
32934 }
32935}
32936CipherBase.prototype._flush = function (done) {
32937 var err
32938 try {
32939 this.push(this._final())
32940 } catch (e) {
32941 err = e
32942 } finally {
32943 done(err)
32944 }
32945}
32946CipherBase.prototype._finalOrDigest = function (outputEnc) {
32947 var outData = this._final() || new Buffer('')
32948 if (outputEnc) {
32949 outData = this._toString(outData, outputEnc, true)
32950 }
32951 return outData
32952}
ebd8d4e8 32953
8b095871
IC
32954CipherBase.prototype._toString = function (value, enc, fin) {
32955 if (!this._decoder) {
32956 this._decoder = new StringDecoder(enc)
32957 this._encoding = enc
32958 }
32959 if (this._encoding !== enc) {
32960 throw new Error('can\'t switch encodings')
32961 }
32962 var out = this._decoder.write(value)
32963 if (fin) {
32964 out += this._decoder.end()
ab78acc6 32965 }
8b095871
IC
32966 return out
32967}
ab78acc6 32968
8b095871
IC
32969}).call(this,require("buffer").Buffer)
32970},{"buffer":5,"inherits":63,"stream":25,"string_decoder":26}],36:[function(require,module,exports){
32971(function (Buffer){
32972'use strict';
32973var inherits = require('inherits')
32974var md5 = require('./md5')
32975var rmd160 = require('ripemd160')
32976var sha = require('sha.js')
ebd8d4e8 32977
8b095871 32978var Base = require('cipher-base')
ebd8d4e8 32979
8b095871
IC
32980function HashNoConstructor(hash) {
32981 Base.call(this, 'digest')
ebd8d4e8 32982
8b095871
IC
32983 this._hash = hash
32984 this.buffers = []
32985}
ebd8d4e8 32986
8b095871 32987inherits(HashNoConstructor, Base)
ebd8d4e8 32988
8b095871
IC
32989HashNoConstructor.prototype._update = function (data) {
32990 this.buffers.push(data)
32991}
ebd8d4e8 32992
8b095871
IC
32993HashNoConstructor.prototype._final = function () {
32994 var buf = Buffer.concat(this.buffers)
32995 var r = this._hash(buf)
32996 this.buffers = null
ebd8d4e8 32997
8b095871
IC
32998 return r
32999}
ab78acc6 33000
8b095871
IC
33001function Hash(hash) {
33002 Base.call(this, 'digest')
ab78acc6 33003
8b095871
IC
33004 this._hash = hash
33005}
ab78acc6 33006
8b095871 33007inherits(Hash, Base)
ab78acc6 33008
8b095871
IC
33009Hash.prototype._update = function (data) {
33010 this._hash.update(data)
33011}
ab78acc6 33012
8b095871
IC
33013Hash.prototype._final = function () {
33014 return this._hash.digest()
33015}
ab78acc6 33016
8b095871
IC
33017module.exports = function createHash (alg) {
33018 alg = alg.toLowerCase()
33019 if ('md5' === alg) return new HashNoConstructor(md5)
33020 if ('rmd160' === alg || 'ripemd160' === alg) return new HashNoConstructor(rmd160)
33021
33022 return new Hash(sha(alg))
ab78acc6
IC
33023}
33024
8b095871
IC
33025}).call(this,require("buffer").Buffer)
33026},{"./md5":38,"buffer":5,"cipher-base":35,"inherits":63,"ripemd160":71,"sha.js":80}],37:[function(require,module,exports){
33027(function (Buffer){
33028'use strict';
33029var intSize = 4;
33030var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
33031var chrsz = 8;
ab78acc6 33032
8b095871
IC
33033function toArray(buf, bigEndian) {
33034 if ((buf.length % intSize) !== 0) {
33035 var len = buf.length + (intSize - (buf.length % intSize));
33036 buf = Buffer.concat([buf, zeroBuffer], len);
ab78acc6
IC
33037 }
33038
8b095871
IC
33039 var arr = [];
33040 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
33041 for (var i = 0; i < buf.length; i += intSize) {
33042 arr.push(fn.call(buf, i));
33043 }
33044 return arr;
ab78acc6
IC
33045}
33046
8b095871
IC
33047function toBuffer(arr, size, bigEndian) {
33048 var buf = new Buffer(size);
33049 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
33050 for (var i = 0; i < arr.length; i++) {
33051 fn.call(buf, arr[i], i * 4, true);
33052 }
33053 return buf;
33054}
ab78acc6 33055
8b095871
IC
33056function hash(buf, fn, hashSize, bigEndian) {
33057 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
33058 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
33059 return toBuffer(arr, hashSize, bigEndian);
33060}
33061exports.hash = hash;
ab78acc6 33062}).call(this,require("buffer").Buffer)
8b095871 33063},{"buffer":5}],38:[function(require,module,exports){
ab78acc6 33064'use strict';
8b095871
IC
33065/*
33066 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
33067 * Digest Algorithm, as defined in RFC 1321.
33068 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
33069 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
33070 * Distributed under the BSD License
33071 * See http://pajhome.org.uk/crypt/md5 for more info.
33072 */
ebd8d4e8 33073
8b095871 33074var helpers = require('./helpers');
ebd8d4e8 33075
8b095871
IC
33076/*
33077 * Calculate the MD5 of an array of little-endian words, and a bit length
33078 */
33079function core_md5(x, len)
33080{
33081 /* append padding */
33082 x[len >> 5] |= 0x80 << ((len) % 32);
33083 x[(((len + 64) >>> 9) << 4) + 14] = len;
ebd8d4e8 33084
8b095871
IC
33085 var a = 1732584193;
33086 var b = -271733879;
33087 var c = -1732584194;
33088 var d = 271733878;
ebd8d4e8 33089
8b095871
IC
33090 for(var i = 0; i < x.length; i += 16)
33091 {
33092 var olda = a;
33093 var oldb = b;
33094 var oldc = c;
33095 var oldd = d;
ebd8d4e8 33096
8b095871
IC
33097 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
33098 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
33099 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
33100 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
33101 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
33102 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
33103 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
33104 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
33105 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
33106 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
33107 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
33108 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
33109 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
33110 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
33111 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
33112 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
ebd8d4e8 33113
8b095871
IC
33114 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
33115 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
33116 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
33117 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
33118 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
33119 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
33120 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
33121 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
33122 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
33123 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
33124 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
33125 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
33126 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
33127 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
33128 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
33129 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
ebd8d4e8 33130
8b095871
IC
33131 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
33132 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
33133 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
33134 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
33135 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
33136 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
33137 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
33138 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
33139 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
33140 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
33141 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
33142 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
33143 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
33144 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
33145 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
33146 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
ebd8d4e8 33147
8b095871
IC
33148 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
33149 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
33150 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
33151 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
33152 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
33153 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
33154 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
33155 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
33156 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
33157 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
33158 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
33159 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
33160 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
33161 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
33162 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
33163 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
ebd8d4e8 33164
8b095871
IC
33165 a = safe_add(a, olda);
33166 b = safe_add(b, oldb);
33167 c = safe_add(c, oldc);
33168 d = safe_add(d, oldd);
ab78acc6 33169 }
8b095871 33170 return Array(a, b, c, d);
ebd8d4e8 33171
ab78acc6 33172}
ebd8d4e8 33173
8b095871
IC
33174/*
33175 * These functions implement the four basic operations the algorithm uses.
33176 */
33177function md5_cmn(q, a, b, x, s, t)
33178{
33179 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
ab78acc6 33180}
8b095871
IC
33181function md5_ff(a, b, c, d, x, s, t)
33182{
33183 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
ab78acc6 33184}
8b095871
IC
33185function md5_gg(a, b, c, d, x, s, t)
33186{
33187 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
ab78acc6 33188}
8b095871
IC
33189function md5_hh(a, b, c, d, x, s, t)
33190{
33191 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
33192}
33193function md5_ii(a, b, c, d, x, s, t)
33194{
33195 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
ab78acc6 33196}
ebd8d4e8 33197
8b095871
IC
33198/*
33199 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
33200 * to work around bugs in some JS interpreters.
33201 */
33202function safe_add(x, y)
33203{
33204 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
33205 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
33206 return (msw << 16) | (lsw & 0xFFFF);
ab78acc6 33207}
ebd8d4e8 33208
8b095871
IC
33209/*
33210 * Bitwise rotate a 32-bit number to the left.
33211 */
33212function bit_rol(num, cnt)
33213{
33214 return (num << cnt) | (num >>> (32 - cnt));
33215}
ebd8d4e8 33216
8b095871
IC
33217module.exports = function md5(buf) {
33218 return helpers.hash(buf, core_md5, 16);
33219};
33220},{"./helpers":37}],39:[function(require,module,exports){
33221'use strict';
ebd8d4e8 33222
8b095871 33223var elliptic = exports;
ebd8d4e8 33224
8b095871
IC
33225elliptic.version = require('../package.json').version;
33226elliptic.utils = require('./elliptic/utils');
33227elliptic.rand = require('brorand');
33228elliptic.hmacDRBG = require('./elliptic/hmac-drbg');
33229elliptic.curve = require('./elliptic/curve');
33230elliptic.curves = require('./elliptic/curves');
ebd8d4e8 33231
8b095871
IC
33232// Protocols
33233elliptic.ec = require('./elliptic/ec');
33234elliptic.eddsa = require('./elliptic/eddsa');
ebd8d4e8 33235
8b095871
IC
33236},{"../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){
33237'use strict';
ebd8d4e8 33238
8b095871
IC
33239var BN = require('bn.js');
33240var elliptic = require('../../elliptic');
33241var utils = elliptic.utils;
33242var getNAF = utils.getNAF;
33243var getJSF = utils.getJSF;
33244var assert = utils.assert;
33245
33246function BaseCurve(type, conf) {
33247 this.type = type;
33248 this.p = new BN(conf.p, 16);
33249
33250 // Use Montgomery, when there is no fast reduction for the prime
33251 this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
33252
33253 // Useful for many curves
33254 this.zero = new BN(0).toRed(this.red);
33255 this.one = new BN(1).toRed(this.red);
33256 this.two = new BN(2).toRed(this.red);
33257
33258 // Curve configuration, optional
33259 this.n = conf.n && new BN(conf.n, 16);
33260 this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
33261
33262 // Temporary arrays
33263 this._wnafT1 = new Array(4);
33264 this._wnafT2 = new Array(4);
33265 this._wnafT3 = new Array(4);
33266 this._wnafT4 = new Array(4);
33267
33268 // Generalized Greg Maxwell's trick
33269 var adjustCount = this.n && this.p.div(this.n);
33270 if (!adjustCount || adjustCount.cmpn(100) > 0) {
33271 this.redN = null;
33272 } else {
33273 this._maxwellTrick = true;
33274 this.redN = this.n.toRed(this.red);
ebd8d4e8 33275 }
ebd8d4e8 33276}
8b095871 33277module.exports = BaseCurve;
ebd8d4e8 33278
8b095871
IC
33279BaseCurve.prototype.point = function point() {
33280 throw new Error('Not implemented');
33281};
ebd8d4e8 33282
8b095871
IC
33283BaseCurve.prototype.validate = function validate() {
33284 throw new Error('Not implemented');
33285};
ebd8d4e8 33286
8b095871
IC
33287BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
33288 assert(p.precomputed);
33289 var doubles = p._getDoubles();
ebd8d4e8 33290
8b095871
IC
33291 var naf = getNAF(k, 1);
33292 var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);
33293 I /= 3;
ebd8d4e8 33294
8b095871
IC
33295 // Translate into more windowed form
33296 var repr = [];
33297 for (var j = 0; j < naf.length; j += doubles.step) {
33298 var nafW = 0;
33299 for (var k = j + doubles.step - 1; k >= j; k--)
33300 nafW = (nafW << 1) + naf[k];
33301 repr.push(nafW);
33302 }
ebd8d4e8 33303
8b095871
IC
33304 var a = this.jpoint(null, null, null);
33305 var b = this.jpoint(null, null, null);
33306 for (var i = I; i > 0; i--) {
33307 for (var j = 0; j < repr.length; j++) {
33308 var nafW = repr[j];
33309 if (nafW === i)
33310 b = b.mixedAdd(doubles.points[j]);
33311 else if (nafW === -i)
33312 b = b.mixedAdd(doubles.points[j].neg());
33313 }
33314 a = a.add(b);
33315 }
33316 return a.toP();
33317};
ebd8d4e8 33318
8b095871
IC
33319BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
33320 var w = 4;
ebd8d4e8 33321
8b095871
IC
33322 // Precompute window
33323 var nafPoints = p._getNAFPoints(w);
33324 w = nafPoints.wnd;
33325 var wnd = nafPoints.points;
ebd8d4e8 33326
8b095871
IC
33327 // Get NAF form
33328 var naf = getNAF(k, w);
ebd8d4e8 33329
8b095871
IC
33330 // Add `this`*(N+1) for every w-NAF index
33331 var acc = this.jpoint(null, null, null);
33332 for (var i = naf.length - 1; i >= 0; i--) {
33333 // Count zeroes
33334 for (var k = 0; i >= 0 && naf[i] === 0; i--)
33335 k++;
33336 if (i >= 0)
33337 k++;
33338 acc = acc.dblp(k);
ebd8d4e8 33339
8b095871
IC
33340 if (i < 0)
33341 break;
33342 var z = naf[i];
33343 assert(z !== 0);
33344 if (p.type === 'affine') {
33345 // J +- P
33346 if (z > 0)
33347 acc = acc.mixedAdd(wnd[(z - 1) >> 1]);
33348 else
33349 acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());
33350 } else {
33351 // J +- J
33352 if (z > 0)
33353 acc = acc.add(wnd[(z - 1) >> 1]);
33354 else
33355 acc = acc.add(wnd[(-z - 1) >> 1].neg());
33356 }
ebd8d4e8 33357 }
8b095871
IC
33358 return p.type === 'affine' ? acc.toP() : acc;
33359};
ebd8d4e8 33360
8b095871
IC
33361BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,
33362 points,
33363 coeffs,
33364 len,
33365 jacobianResult) {
33366 var wndWidth = this._wnafT1;
33367 var wnd = this._wnafT2;
33368 var naf = this._wnafT3;
33369
33370 // Fill all arrays
33371 var max = 0;
33372 for (var i = 0; i < len; i++) {
33373 var p = points[i];
33374 var nafPoints = p._getNAFPoints(defW);
33375 wndWidth[i] = nafPoints.wnd;
33376 wnd[i] = nafPoints.points;
33377 }
33378
33379 // Comb small window NAFs
33380 for (var i = len - 1; i >= 1; i -= 2) {
33381 var a = i - 1;
33382 var b = i;
33383 if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
33384 naf[a] = getNAF(coeffs[a], wndWidth[a]);
33385 naf[b] = getNAF(coeffs[b], wndWidth[b]);
33386 max = Math.max(naf[a].length, max);
33387 max = Math.max(naf[b].length, max);
33388 continue;
33389 }
ebd8d4e8 33390
8b095871
IC
33391 var comb = [
33392 points[a], /* 1 */
33393 null, /* 3 */
33394 null, /* 5 */
33395 points[b] /* 7 */
33396 ];
33397
33398 // Try to avoid Projective points, if possible
33399 if (points[a].y.cmp(points[b].y) === 0) {
33400 comb[1] = points[a].add(points[b]);
33401 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
33402 } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
33403 comb[1] = points[a].toJ().mixedAdd(points[b]);
33404 comb[2] = points[a].add(points[b].neg());
33405 } else {
33406 comb[1] = points[a].toJ().mixedAdd(points[b]);
33407 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
33408 }
ebd8d4e8 33409
8b095871
IC
33410 var index = [
33411 -3, /* -1 -1 */
33412 -1, /* -1 0 */
33413 -5, /* -1 1 */
33414 -7, /* 0 -1 */
33415 0, /* 0 0 */
33416 7, /* 0 1 */
33417 5, /* 1 -1 */
33418 1, /* 1 0 */
33419 3 /* 1 1 */
33420 ];
ebd8d4e8 33421
8b095871
IC
33422 var jsf = getJSF(coeffs[a], coeffs[b]);
33423 max = Math.max(jsf[0].length, max);
33424 naf[a] = new Array(max);
33425 naf[b] = new Array(max);
33426 for (var j = 0; j < max; j++) {
33427 var ja = jsf[0][j] | 0;
33428 var jb = jsf[1][j] | 0;
ebd8d4e8 33429
8b095871
IC
33430 naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
33431 naf[b][j] = 0;
33432 wnd[a] = comb;
33433 }
33434 }
ebd8d4e8 33435
8b095871
IC
33436 var acc = this.jpoint(null, null, null);
33437 var tmp = this._wnafT4;
33438 for (var i = max; i >= 0; i--) {
33439 var k = 0;
ebd8d4e8 33440
8b095871
IC
33441 while (i >= 0) {
33442 var zero = true;
33443 for (var j = 0; j < len; j++) {
33444 tmp[j] = naf[j][i] | 0;
33445 if (tmp[j] !== 0)
33446 zero = false;
33447 }
33448 if (!zero)
33449 break;
33450 k++;
33451 i--;
33452 }
33453 if (i >= 0)
33454 k++;
33455 acc = acc.dblp(k);
33456 if (i < 0)
33457 break;
ebd8d4e8 33458
8b095871
IC
33459 for (var j = 0; j < len; j++) {
33460 var z = tmp[j];
33461 var p;
33462 if (z === 0)
33463 continue;
33464 else if (z > 0)
33465 p = wnd[j][(z - 1) >> 1];
33466 else if (z < 0)
33467 p = wnd[j][(-z - 1) >> 1].neg();
33468
33469 if (p.type === 'affine')
33470 acc = acc.mixedAdd(p);
33471 else
33472 acc = acc.add(p);
33473 }
33474 }
33475 // Zeroify references
33476 for (var i = 0; i < len; i++)
33477 wnd[i] = null;
ebd8d4e8 33478
8b095871
IC
33479 if (jacobianResult)
33480 return acc;
33481 else
33482 return acc.toP();
33483};
ebd8d4e8 33484
8b095871
IC
33485function BasePoint(curve, type) {
33486 this.curve = curve;
33487 this.type = type;
33488 this.precomputed = null;
33489}
33490BaseCurve.BasePoint = BasePoint;
ebd8d4e8 33491
8b095871
IC
33492BasePoint.prototype.eq = function eq(/*other*/) {
33493 throw new Error('Not implemented');
33494};
ebd8d4e8 33495
8b095871
IC
33496BasePoint.prototype.validate = function validate() {
33497 return this.curve.validate(this);
33498};
ebd8d4e8 33499
8b095871
IC
33500BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
33501 bytes = utils.toArray(bytes, enc);
ebd8d4e8 33502
8b095871 33503 var len = this.p.byteLength();
ebd8d4e8 33504
8b095871
IC
33505 // uncompressed, hybrid-odd, hybrid-even
33506 if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&
33507 bytes.length - 1 === 2 * len) {
33508 if (bytes[0] === 0x06)
33509 assert(bytes[bytes.length - 1] % 2 === 0);
33510 else if (bytes[0] === 0x07)
33511 assert(bytes[bytes.length - 1] % 2 === 1);
ebd8d4e8 33512
8b095871
IC
33513 var res = this.point(bytes.slice(1, 1 + len),
33514 bytes.slice(1 + len, 1 + 2 * len));
ebd8d4e8 33515
8b095871
IC
33516 return res;
33517 } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&
33518 bytes.length - 1 === len) {
33519 return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
ebd8d4e8 33520 }
8b095871
IC
33521 throw new Error('Unknown point format');
33522};
ebd8d4e8 33523
8b095871
IC
33524BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
33525 return this.encode(enc, true);
33526};
33527
33528BasePoint.prototype._encode = function _encode(compact) {
33529 var len = this.curve.p.byteLength();
33530 var x = this.getX().toArray('be', len);
33531
33532 if (compact)
33533 return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);
33534
33535 return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;
33536};
33537
33538BasePoint.prototype.encode = function encode(enc, compact) {
33539 return utils.encode(this._encode(compact), enc);
33540};
33541
33542BasePoint.prototype.precompute = function precompute(power) {
33543 if (this.precomputed)
33544 return this;
33545
33546 var precomputed = {
33547 doubles: null,
33548 naf: null,
33549 beta: null
33550 };
33551 precomputed.naf = this._getNAFPoints(8);
33552 precomputed.doubles = this._getDoubles(4, power);
33553 precomputed.beta = this._getBeta();
33554 this.precomputed = precomputed;
33555
33556 return this;
33557};
33558
33559BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
33560 if (!this.precomputed)
33561 return false;
33562
33563 var doubles = this.precomputed.doubles;
33564 if (!doubles)
33565 return false;
33566
33567 return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
33568};
33569
33570BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
33571 if (this.precomputed && this.precomputed.doubles)
33572 return this.precomputed.doubles;
33573
33574 var doubles = [ this ];
33575 var acc = this;
33576 for (var i = 0; i < power; i += step) {
33577 for (var j = 0; j < step; j++)
33578 acc = acc.dbl();
33579 doubles.push(acc);
ebd8d4e8 33580 }
8b095871
IC
33581 return {
33582 step: step,
33583 points: doubles
33584 };
33585};
ebd8d4e8 33586
8b095871
IC
33587BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
33588 if (this.precomputed && this.precomputed.naf)
33589 return this.precomputed.naf;
ebd8d4e8 33590
8b095871
IC
33591 var res = [ this ];
33592 var max = (1 << wnd) - 1;
33593 var dbl = max === 1 ? null : this.dbl();
33594 for (var i = 1; i < max; i++)
33595 res[i] = res[i - 1].add(dbl);
33596 return {
33597 wnd: wnd,
33598 points: res
33599 };
33600};
ebd8d4e8 33601
8b095871
IC
33602BasePoint.prototype._getBeta = function _getBeta() {
33603 return null;
33604};
ebd8d4e8 33605
8b095871
IC
33606BasePoint.prototype.dblp = function dblp(k) {
33607 var r = this;
33608 for (var i = 0; i < k; i++)
33609 r = r.dbl();
33610 return r;
33611};
ebd8d4e8 33612
8b095871
IC
33613},{"../../elliptic":39,"bn.js":33}],41:[function(require,module,exports){
33614'use strict';
ebd8d4e8 33615
8b095871
IC
33616var curve = require('../curve');
33617var elliptic = require('../../elliptic');
33618var BN = require('bn.js');
33619var inherits = require('inherits');
33620var Base = curve.base;
ebd8d4e8 33621
8b095871 33622var assert = elliptic.utils.assert;
ebd8d4e8 33623
8b095871
IC
33624function EdwardsCurve(conf) {
33625 // NOTE: Important as we are creating point in Base.call()
33626 this.twisted = (conf.a | 0) !== 1;
33627 this.mOneA = this.twisted && (conf.a | 0) === -1;
33628 this.extended = this.mOneA;
33629
33630 Base.call(this, 'edwards', conf);
33631
33632 this.a = new BN(conf.a, 16).umod(this.red.m);
33633 this.a = this.a.toRed(this.red);
33634 this.c = new BN(conf.c, 16).toRed(this.red);
33635 this.c2 = this.c.redSqr();
33636 this.d = new BN(conf.d, 16).toRed(this.red);
33637 this.dd = this.d.redAdd(this.d);
33638
33639 assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
33640 this.oneC = (conf.c | 0) === 1;
ebd8d4e8 33641}
8b095871
IC
33642inherits(EdwardsCurve, Base);
33643module.exports = EdwardsCurve;
ebd8d4e8 33644
8b095871
IC
33645EdwardsCurve.prototype._mulA = function _mulA(num) {
33646 if (this.mOneA)
33647 return num.redNeg();
33648 else
33649 return this.a.redMul(num);
33650};
ebd8d4e8 33651
8b095871
IC
33652EdwardsCurve.prototype._mulC = function _mulC(num) {
33653 if (this.oneC)
33654 return num;
33655 else
33656 return this.c.redMul(num);
33657};
ebd8d4e8 33658
8b095871
IC
33659// Just for compatibility with Short curve
33660EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
33661 return this.point(x, y, z, t);
33662};
ebd8d4e8 33663
8b095871
IC
33664EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
33665 x = new BN(x, 16);
33666 if (!x.red)
33667 x = x.toRed(this.red);
ebd8d4e8 33668
8b095871
IC
33669 var x2 = x.redSqr();
33670 var rhs = this.c2.redSub(this.a.redMul(x2));
33671 var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
33672
33673 var y2 = rhs.redMul(lhs.redInvm());
33674 var y = y2.redSqrt();
33675 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
33676 throw new Error('invalid point');
33677
33678 var isOdd = y.fromRed().isOdd();
33679 if (odd && !isOdd || !odd && isOdd)
33680 y = y.redNeg();
33681
33682 return this.point(x, y);
33683};
33684
33685EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
33686 y = new BN(y, 16);
33687 if (!y.red)
33688 y = y.toRed(this.red);
33689
33690 // x^2 = (y^2 - 1) / (d y^2 + 1)
33691 var y2 = y.redSqr();
33692 var lhs = y2.redSub(this.one);
33693 var rhs = y2.redMul(this.d).redAdd(this.one);
33694 var x2 = lhs.redMul(rhs.redInvm());
33695
33696 if (x2.cmp(this.zero) === 0) {
33697 if (odd)
33698 throw new Error('invalid point');
33699 else
33700 return this.point(this.zero, y);
ebd8d4e8
IC
33701 }
33702
8b095871
IC
33703 var x = x2.redSqrt();
33704 if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
33705 throw new Error('invalid point');
ebd8d4e8 33706
8b095871
IC
33707 if (x.isOdd() !== odd)
33708 x = x.redNeg();
ebd8d4e8 33709
8b095871
IC
33710 return this.point(x, y);
33711};
ebd8d4e8 33712
8b095871
IC
33713EdwardsCurve.prototype.validate = function validate(point) {
33714 if (point.isInfinity())
33715 return true;
ebd8d4e8 33716
8b095871
IC
33717 // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)
33718 point.normalize();
ebd8d4e8 33719
8b095871
IC
33720 var x2 = point.x.redSqr();
33721 var y2 = point.y.redSqr();
33722 var lhs = x2.redMul(this.a).redAdd(y2);
33723 var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
ebd8d4e8 33724
8b095871
IC
33725 return lhs.cmp(rhs) === 0;
33726};
ebd8d4e8 33727
8b095871
IC
33728function Point(curve, x, y, z, t) {
33729 Base.BasePoint.call(this, curve, 'projective');
33730 if (x === null && y === null && z === null) {
33731 this.x = this.curve.zero;
33732 this.y = this.curve.one;
33733 this.z = this.curve.one;
33734 this.t = this.curve.zero;
33735 this.zOne = true;
33736 } else {
33737 this.x = new BN(x, 16);
33738 this.y = new BN(y, 16);
33739 this.z = z ? new BN(z, 16) : this.curve.one;
33740 this.t = t && new BN(t, 16);
33741 if (!this.x.red)
33742 this.x = this.x.toRed(this.curve.red);
33743 if (!this.y.red)
33744 this.y = this.y.toRed(this.curve.red);
33745 if (!this.z.red)
33746 this.z = this.z.toRed(this.curve.red);
33747 if (this.t && !this.t.red)
33748 this.t = this.t.toRed(this.curve.red);
33749 this.zOne = this.z === this.curve.one;
33750
33751 // Use extended coordinates
33752 if (this.curve.extended && !this.t) {
33753 this.t = this.x.redMul(this.y);
33754 if (!this.zOne)
33755 this.t = this.t.redMul(this.z.redInvm());
33756 }
33757 }
33758}
33759inherits(Point, Base.BasePoint);
33760
33761EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
33762 return Point.fromJSON(this, obj);
33763};
33764
33765EdwardsCurve.prototype.point = function point(x, y, z, t) {
33766 return new Point(this, x, y, z, t);
33767};
33768
33769Point.fromJSON = function fromJSON(curve, obj) {
33770 return new Point(curve, obj[0], obj[1], obj[2]);
33771};
33772
33773Point.prototype.inspect = function inspect() {
33774 if (this.isInfinity())
33775 return '<EC Point Infinity>';
33776 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
33777 ' y: ' + this.y.fromRed().toString(16, 2) +
33778 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
33779};
33780
33781Point.prototype.isInfinity = function isInfinity() {
33782 // XXX This code assumes that zero is always zero in red
33783 return this.x.cmpn(0) === 0 &&
33784 this.y.cmp(this.z) === 0;
33785};
33786
33787Point.prototype._extDbl = function _extDbl() {
33788 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
33789 // #doubling-dbl-2008-hwcd
33790 // 4M + 4S
33791
33792 // A = X1^2
33793 var a = this.x.redSqr();
33794 // B = Y1^2
33795 var b = this.y.redSqr();
33796 // C = 2 * Z1^2
33797 var c = this.z.redSqr();
33798 c = c.redIAdd(c);
33799 // D = a * A
33800 var d = this.curve._mulA(a);
33801 // E = (X1 + Y1)^2 - A - B
33802 var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
33803 // G = D + B
33804 var g = d.redAdd(b);
33805 // F = G - C
33806 var f = g.redSub(c);
33807 // H = D - B
33808 var h = d.redSub(b);
33809 // X3 = E * F
33810 var nx = e.redMul(f);
33811 // Y3 = G * H
33812 var ny = g.redMul(h);
33813 // T3 = E * H
33814 var nt = e.redMul(h);
33815 // Z3 = F * G
33816 var nz = f.redMul(g);
33817 return this.curve.point(nx, ny, nz, nt);
33818};
33819
33820Point.prototype._projDbl = function _projDbl() {
33821 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
33822 // #doubling-dbl-2008-bbjlp
33823 // #doubling-dbl-2007-bl
33824 // and others
33825 // Generally 3M + 4S or 2M + 4S
33826
33827 // B = (X1 + Y1)^2
33828 var b = this.x.redAdd(this.y).redSqr();
33829 // C = X1^2
33830 var c = this.x.redSqr();
33831 // D = Y1^2
33832 var d = this.y.redSqr();
33833
33834 var nx;
33835 var ny;
33836 var nz;
33837 if (this.curve.twisted) {
33838 // E = a * C
33839 var e = this.curve._mulA(c);
33840 // F = E + D
33841 var f = e.redAdd(d);
33842 if (this.zOne) {
33843 // X3 = (B - C - D) * (F - 2)
33844 nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
33845 // Y3 = F * (E - D)
33846 ny = f.redMul(e.redSub(d));
33847 // Z3 = F^2 - 2 * F
33848 nz = f.redSqr().redSub(f).redSub(f);
33849 } else {
33850 // H = Z1^2
33851 var h = this.z.redSqr();
33852 // J = F - 2 * H
33853 var j = f.redSub(h).redISub(h);
33854 // X3 = (B-C-D)*J
33855 nx = b.redSub(c).redISub(d).redMul(j);
33856 // Y3 = F * (E - D)
33857 ny = f.redMul(e.redSub(d));
33858 // Z3 = F * J
33859 nz = f.redMul(j);
33860 }
33861 } else {
33862 // E = C + D
33863 var e = c.redAdd(d);
33864 // H = (c * Z1)^2
33865 var h = this.curve._mulC(this.c.redMul(this.z)).redSqr();
33866 // J = E - 2 * H
33867 var j = e.redSub(h).redSub(h);
33868 // X3 = c * (B - E) * J
33869 nx = this.curve._mulC(b.redISub(e)).redMul(j);
33870 // Y3 = c * E * (C - D)
33871 ny = this.curve._mulC(e).redMul(c.redISub(d));
33872 // Z3 = E * J
33873 nz = e.redMul(j);
33874 }
33875 return this.curve.point(nx, ny, nz);
33876};
33877
33878Point.prototype.dbl = function dbl() {
33879 if (this.isInfinity())
33880 return this;
33881
33882 // Double in extended coordinates
33883 if (this.curve.extended)
33884 return this._extDbl();
33885 else
33886 return this._projDbl();
33887};
33888
33889Point.prototype._extAdd = function _extAdd(p) {
33890 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
33891 // #addition-add-2008-hwcd-3
33892 // 8M
33893
33894 // A = (Y1 - X1) * (Y2 - X2)
33895 var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
33896 // B = (Y1 + X1) * (Y2 + X2)
33897 var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
33898 // C = T1 * k * T2
33899 var c = this.t.redMul(this.curve.dd).redMul(p.t);
33900 // D = Z1 * 2 * Z2
33901 var d = this.z.redMul(p.z.redAdd(p.z));
33902 // E = B - A
33903 var e = b.redSub(a);
33904 // F = D - C
33905 var f = d.redSub(c);
33906 // G = D + C
33907 var g = d.redAdd(c);
33908 // H = B + A
33909 var h = b.redAdd(a);
33910 // X3 = E * F
33911 var nx = e.redMul(f);
33912 // Y3 = G * H
33913 var ny = g.redMul(h);
33914 // T3 = E * H
33915 var nt = e.redMul(h);
33916 // Z3 = F * G
33917 var nz = f.redMul(g);
33918 return this.curve.point(nx, ny, nz, nt);
33919};
33920
33921Point.prototype._projAdd = function _projAdd(p) {
33922 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
33923 // #addition-add-2008-bbjlp
33924 // #addition-add-2007-bl
33925 // 10M + 1S
33926
33927 // A = Z1 * Z2
33928 var a = this.z.redMul(p.z);
33929 // B = A^2
33930 var b = a.redSqr();
33931 // C = X1 * X2
33932 var c = this.x.redMul(p.x);
33933 // D = Y1 * Y2
33934 var d = this.y.redMul(p.y);
33935 // E = d * C * D
33936 var e = this.curve.d.redMul(c).redMul(d);
33937 // F = B - E
33938 var f = b.redSub(e);
33939 // G = B + E
33940 var g = b.redAdd(e);
33941 // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)
33942 var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
33943 var nx = a.redMul(f).redMul(tmp);
33944 var ny;
33945 var nz;
33946 if (this.curve.twisted) {
33947 // Y3 = A * G * (D - a * C)
33948 ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
33949 // Z3 = F * G
33950 nz = f.redMul(g);
33951 } else {
33952 // Y3 = A * G * (D - C)
33953 ny = a.redMul(g).redMul(d.redSub(c));
33954 // Z3 = c * F * G
33955 nz = this.curve._mulC(f).redMul(g);
ebd8d4e8 33956 }
8b095871
IC
33957 return this.curve.point(nx, ny, nz);
33958};
ebd8d4e8 33959
8b095871
IC
33960Point.prototype.add = function add(p) {
33961 if (this.isInfinity())
33962 return p;
33963 if (p.isInfinity())
33964 return this;
ebd8d4e8 33965
8b095871
IC
33966 if (this.curve.extended)
33967 return this._extAdd(p);
33968 else
33969 return this._projAdd(p);
33970};
ebd8d4e8 33971
8b095871
IC
33972Point.prototype.mul = function mul(k) {
33973 if (this._hasDoubles(k))
33974 return this.curve._fixedNafMul(this, k);
33975 else
33976 return this.curve._wnafMul(this, k);
33977};
ebd8d4e8 33978
8b095871
IC
33979Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
33980 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);
33981};
ebd8d4e8 33982
8b095871
IC
33983Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
33984 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);
33985};
ebd8d4e8 33986
8b095871
IC
33987Point.prototype.normalize = function normalize() {
33988 if (this.zOne)
33989 return this;
33990
33991 // Normalize coordinates
33992 var zi = this.z.redInvm();
33993 this.x = this.x.redMul(zi);
33994 this.y = this.y.redMul(zi);
33995 if (this.t)
33996 this.t = this.t.redMul(zi);
33997 this.z = this.curve.one;
33998 this.zOne = true;
33999 return this;
34000};
34001
34002Point.prototype.neg = function neg() {
34003 return this.curve.point(this.x.redNeg(),
34004 this.y,
34005 this.z,
34006 this.t && this.t.redNeg());
34007};
34008
34009Point.prototype.getX = function getX() {
34010 this.normalize();
34011 return this.x.fromRed();
34012};
34013
34014Point.prototype.getY = function getY() {
34015 this.normalize();
34016 return this.y.fromRed();
34017};
34018
34019Point.prototype.eq = function eq(other) {
34020 return this === other ||
34021 this.getX().cmp(other.getX()) === 0 &&
34022 this.getY().cmp(other.getY()) === 0;
34023};
34024
34025Point.prototype.eqXToP = function eqXToP(x) {
34026 var rx = x.toRed(this.curve.red).redMul(this.z);
34027 if (this.x.cmp(rx) === 0)
34028 return true;
ebd8d4e8 34029
8b095871
IC
34030 var xc = x.clone();
34031 var t = this.curve.redN.redMul(this.z);
34032 for (;;) {
34033 xc.iadd(this.curve.n);
34034 if (xc.cmp(this.curve.p) >= 0)
34035 return false;
ebd8d4e8 34036
8b095871
IC
34037 rx.redIAdd(t);
34038 if (this.x.cmp(rx) === 0)
34039 return true;
ebd8d4e8 34040 }
8b095871
IC
34041 return false;
34042};
ebd8d4e8 34043
8b095871
IC
34044// Compatibility with BaseCurve
34045Point.prototype.toP = Point.prototype.normalize;
34046Point.prototype.mixedAdd = Point.prototype.add;
ebd8d4e8 34047
8b095871
IC
34048},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],42:[function(require,module,exports){
34049'use strict';
ebd8d4e8 34050
8b095871 34051var curve = exports;
ebd8d4e8 34052
8b095871
IC
34053curve.base = require('./base');
34054curve.short = require('./short');
34055curve.mont = require('./mont');
34056curve.edwards = require('./edwards');
ebd8d4e8 34057
8b095871
IC
34058},{"./base":40,"./edwards":41,"./mont":43,"./short":44}],43:[function(require,module,exports){
34059'use strict';
ebd8d4e8 34060
8b095871
IC
34061var curve = require('../curve');
34062var BN = require('bn.js');
34063var inherits = require('inherits');
34064var Base = curve.base;
ebd8d4e8 34065
8b095871
IC
34066var elliptic = require('../../elliptic');
34067var utils = elliptic.utils;
ebd8d4e8 34068
8b095871
IC
34069function MontCurve(conf) {
34070 Base.call(this, 'mont', conf);
ebd8d4e8 34071
8b095871
IC
34072 this.a = new BN(conf.a, 16).toRed(this.red);
34073 this.b = new BN(conf.b, 16).toRed(this.red);
34074 this.i4 = new BN(4).toRed(this.red).redInvm();
34075 this.two = new BN(2).toRed(this.red);
34076 this.a24 = this.i4.redMul(this.a.redAdd(this.two));
ebd8d4e8 34077}
8b095871
IC
34078inherits(MontCurve, Base);
34079module.exports = MontCurve;
ebd8d4e8 34080
8b095871
IC
34081MontCurve.prototype.validate = function validate(point) {
34082 var x = point.normalize().x;
34083 var x2 = x.redSqr();
34084 var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
34085 var y = rhs.redSqrt();
ebd8d4e8 34086
8b095871
IC
34087 return y.redSqr().cmp(rhs) === 0;
34088};
ebd8d4e8 34089
8b095871
IC
34090function Point(curve, x, z) {
34091 Base.BasePoint.call(this, curve, 'projective');
34092 if (x === null && z === null) {
34093 this.x = this.curve.one;
34094 this.z = this.curve.zero;
34095 } else {
34096 this.x = new BN(x, 16);
34097 this.z = new BN(z, 16);
34098 if (!this.x.red)
34099 this.x = this.x.toRed(this.curve.red);
34100 if (!this.z.red)
34101 this.z = this.z.toRed(this.curve.red);
34102 }
34103}
34104inherits(Point, Base.BasePoint);
ebd8d4e8 34105
8b095871
IC
34106MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
34107 return this.point(utils.toArray(bytes, enc), 1);
34108};
ebd8d4e8 34109
8b095871
IC
34110MontCurve.prototype.point = function point(x, z) {
34111 return new Point(this, x, z);
34112};
ebd8d4e8 34113
8b095871
IC
34114MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
34115 return Point.fromJSON(this, obj);
34116};
ebd8d4e8 34117
8b095871
IC
34118Point.prototype.precompute = function precompute() {
34119 // No-op
34120};
ebd8d4e8 34121
8b095871
IC
34122Point.prototype._encode = function _encode() {
34123 return this.getX().toArray('be', this.curve.p.byteLength());
34124};
ebd8d4e8 34125
8b095871
IC
34126Point.fromJSON = function fromJSON(curve, obj) {
34127 return new Point(curve, obj[0], obj[1] || curve.one);
34128};
ebd8d4e8 34129
8b095871
IC
34130Point.prototype.inspect = function inspect() {
34131 if (this.isInfinity())
34132 return '<EC Point Infinity>';
34133 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
34134 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
34135};
ebd8d4e8 34136
8b095871
IC
34137Point.prototype.isInfinity = function isInfinity() {
34138 // XXX This code assumes that zero is always zero in red
34139 return this.z.cmpn(0) === 0;
34140};
ebd8d4e8 34141
8b095871
IC
34142Point.prototype.dbl = function dbl() {
34143 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3
34144 // 2M + 2S + 4A
34145
34146 // A = X1 + Z1
34147 var a = this.x.redAdd(this.z);
34148 // AA = A^2
34149 var aa = a.redSqr();
34150 // B = X1 - Z1
34151 var b = this.x.redSub(this.z);
34152 // BB = B^2
34153 var bb = b.redSqr();
34154 // C = AA - BB
34155 var c = aa.redSub(bb);
34156 // X3 = AA * BB
34157 var nx = aa.redMul(bb);
34158 // Z3 = C * (BB + A24 * C)
34159 var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
34160 return this.curve.point(nx, nz);
34161};
ebd8d4e8 34162
8b095871
IC
34163Point.prototype.add = function add() {
34164 throw new Error('Not supported on Montgomery curve');
34165};
ebd8d4e8 34166
8b095871
IC
34167Point.prototype.diffAdd = function diffAdd(p, diff) {
34168 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3
34169 // 4M + 2S + 6A
34170
34171 // A = X2 + Z2
34172 var a = this.x.redAdd(this.z);
34173 // B = X2 - Z2
34174 var b = this.x.redSub(this.z);
34175 // C = X3 + Z3
34176 var c = p.x.redAdd(p.z);
34177 // D = X3 - Z3
34178 var d = p.x.redSub(p.z);
34179 // DA = D * A
34180 var da = d.redMul(a);
34181 // CB = C * B
34182 var cb = c.redMul(b);
34183 // X5 = Z1 * (DA + CB)^2
34184 var nx = diff.z.redMul(da.redAdd(cb).redSqr());
34185 // Z5 = X1 * (DA - CB)^2
34186 var nz = diff.x.redMul(da.redISub(cb).redSqr());
34187 return this.curve.point(nx, nz);
34188};
ebd8d4e8 34189
8b095871
IC
34190Point.prototype.mul = function mul(k) {
34191 var t = k.clone();
34192 var a = this; // (N / 2) * Q + Q
34193 var b = this.curve.point(null, null); // (N / 2) * Q
34194 var c = this; // Q
34195
34196 for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
34197 bits.push(t.andln(1));
34198
34199 for (var i = bits.length - 1; i >= 0; i--) {
34200 if (bits[i] === 0) {
34201 // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q
34202 a = a.diffAdd(b, c);
34203 // N * Q = 2 * ((N / 2) * Q + Q))
34204 b = b.dbl();
34205 } else {
34206 // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)
34207 b = a.diffAdd(b, c);
34208 // N * Q + Q = 2 * ((N / 2) * Q + Q)
34209 a = a.dbl();
34210 }
ebd8d4e8 34211 }
8b095871
IC
34212 return b;
34213};
ebd8d4e8 34214
8b095871
IC
34215Point.prototype.mulAdd = function mulAdd() {
34216 throw new Error('Not supported on Montgomery curve');
34217};
ebd8d4e8 34218
8b095871
IC
34219Point.prototype.jumlAdd = function jumlAdd() {
34220 throw new Error('Not supported on Montgomery curve');
34221};
ebd8d4e8 34222
8b095871
IC
34223Point.prototype.eq = function eq(other) {
34224 return this.getX().cmp(other.getX()) === 0;
34225};
ebd8d4e8 34226
8b095871
IC
34227Point.prototype.normalize = function normalize() {
34228 this.x = this.x.redMul(this.z.redInvm());
34229 this.z = this.curve.one;
34230 return this;
34231};
ebd8d4e8 34232
8b095871
IC
34233Point.prototype.getX = function getX() {
34234 // Normalize coordinates
34235 this.normalize();
34236
34237 return this.x.fromRed();
34238};
34239
34240},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],44:[function(require,module,exports){
ab78acc6 34241'use strict';
ebd8d4e8 34242
8b095871
IC
34243var curve = require('../curve');
34244var elliptic = require('../../elliptic');
34245var BN = require('bn.js');
34246var inherits = require('inherits');
34247var Base = curve.base;
ab78acc6 34248
8b095871 34249var assert = elliptic.utils.assert;
ebd8d4e8 34250
8b095871
IC
34251function ShortCurve(conf) {
34252 Base.call(this, 'short', conf);
ebd8d4e8 34253
8b095871
IC
34254 this.a = new BN(conf.a, 16).toRed(this.red);
34255 this.b = new BN(conf.b, 16).toRed(this.red);
34256 this.tinv = this.two.redInvm();
ab78acc6 34257
8b095871
IC
34258 this.zeroA = this.a.fromRed().cmpn(0) === 0;
34259 this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
ab78acc6 34260
8b095871
IC
34261 // If the curve is endomorphic, precalculate beta and lambda
34262 this.endo = this._getEndomorphism(conf);
34263 this._endoWnafT1 = new Array(4);
34264 this._endoWnafT2 = new Array(4);
ebd8d4e8 34265}
8b095871
IC
34266inherits(ShortCurve, Base);
34267module.exports = ShortCurve;
ebd8d4e8 34268
8b095871
IC
34269ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
34270 // No efficient endomorphism
34271 if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
34272 return;
ebd8d4e8 34273
8b095871
IC
34274 // Compute beta and lambda, that lambda * P = (beta * Px; Py)
34275 var beta;
34276 var lambda;
34277 if (conf.beta) {
34278 beta = new BN(conf.beta, 16).toRed(this.red);
34279 } else {
34280 var betas = this._getEndoRoots(this.p);
34281 // Choose the smallest beta
34282 beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
34283 beta = beta.toRed(this.red);
34284 }
34285 if (conf.lambda) {
34286 lambda = new BN(conf.lambda, 16);
34287 } else {
34288 // Choose the lambda that is matching selected beta
34289 var lambdas = this._getEndoRoots(this.n);
34290 if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
34291 lambda = lambdas[0];
34292 } else {
34293 lambda = lambdas[1];
34294 assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
34295 }
34296 }
ab78acc6 34297
8b095871
IC
34298 // Get basis vectors, used for balanced length-two representation
34299 var basis;
34300 if (conf.basis) {
34301 basis = conf.basis.map(function(vec) {
34302 return {
34303 a: new BN(vec.a, 16),
34304 b: new BN(vec.b, 16)
34305 };
34306 });
34307 } else {
34308 basis = this._getEndoBasis(lambda);
34309 }
ab78acc6 34310
8b095871
IC
34311 return {
34312 beta: beta,
34313 lambda: lambda,
34314 basis: basis
34315 };
34316};
ab78acc6 34317
8b095871
IC
34318ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
34319 // Find roots of for x^2 + x + 1 in F
34320 // Root = (-1 +- Sqrt(-3)) / 2
34321 //
34322 var red = num === this.p ? this.red : BN.mont(num);
34323 var tinv = new BN(2).toRed(red).redInvm();
34324 var ntinv = tinv.redNeg();
ab78acc6 34325
8b095871 34326 var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
ab78acc6 34327
8b095871
IC
34328 var l1 = ntinv.redAdd(s).fromRed();
34329 var l2 = ntinv.redSub(s).fromRed();
34330 return [ l1, l2 ];
34331};
ab78acc6 34332
8b095871
IC
34333ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
34334 // aprxSqrt >= sqrt(this.n)
34335 var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
34336
34337 // 3.74
34338 // Run EGCD, until r(L + 1) < aprxSqrt
34339 var u = lambda;
34340 var v = this.n.clone();
34341 var x1 = new BN(1);
34342 var y1 = new BN(0);
34343 var x2 = new BN(0);
34344 var y2 = new BN(1);
34345
34346 // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
34347 var a0;
34348 var b0;
34349 // First vector
34350 var a1;
34351 var b1;
34352 // Second vector
34353 var a2;
34354 var b2;
34355
34356 var prevR;
34357 var i = 0;
34358 var r;
34359 var x;
34360 while (u.cmpn(0) !== 0) {
34361 var q = v.div(u);
34362 r = v.sub(q.mul(u));
34363 x = x2.sub(q.mul(x1));
34364 var y = y2.sub(q.mul(y1));
34365
34366 if (!a1 && r.cmp(aprxSqrt) < 0) {
34367 a0 = prevR.neg();
34368 b0 = x1;
34369 a1 = r.neg();
34370 b1 = x;
34371 } else if (a1 && ++i === 2) {
34372 break;
ab78acc6 34373 }
8b095871 34374 prevR = r;
ab78acc6 34375
8b095871
IC
34376 v = u;
34377 u = r;
34378 x2 = x1;
34379 x1 = x;
34380 y2 = y1;
34381 y1 = y;
ebd8d4e8 34382 }
8b095871
IC
34383 a2 = r.neg();
34384 b2 = x;
ab78acc6 34385
8b095871
IC
34386 var len1 = a1.sqr().add(b1.sqr());
34387 var len2 = a2.sqr().add(b2.sqr());
34388 if (len2.cmp(len1) >= 0) {
34389 a2 = a0;
34390 b2 = b0;
34391 }
ebd8d4e8 34392
8b095871
IC
34393 // Normalize signs
34394 if (a1.negative) {
34395 a1 = a1.neg();
34396 b1 = b1.neg();
34397 }
34398 if (a2.negative) {
34399 a2 = a2.neg();
34400 b2 = b2.neg();
34401 }
ebd8d4e8 34402
8b095871
IC
34403 return [
34404 { a: a1, b: b1 },
34405 { a: a2, b: b2 }
34406 ];
34407};
ab78acc6 34408
8b095871
IC
34409ShortCurve.prototype._endoSplit = function _endoSplit(k) {
34410 var basis = this.endo.basis;
34411 var v1 = basis[0];
34412 var v2 = basis[1];
ab78acc6 34413
8b095871
IC
34414 var c1 = v2.b.mul(k).divRound(this.n);
34415 var c2 = v1.b.neg().mul(k).divRound(this.n);
ab78acc6 34416
8b095871
IC
34417 var p1 = c1.mul(v1.a);
34418 var p2 = c2.mul(v2.a);
34419 var q1 = c1.mul(v1.b);
34420 var q2 = c2.mul(v2.b);
ab78acc6 34421
8b095871
IC
34422 // Calculate answer
34423 var k1 = k.sub(p1).sub(p2);
34424 var k2 = q1.add(q2).neg();
34425 return { k1: k1, k2: k2 };
34426};
ab78acc6 34427
8b095871
IC
34428ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
34429 x = new BN(x, 16);
34430 if (!x.red)
34431 x = x.toRed(this.red);
ab78acc6 34432
8b095871
IC
34433 var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
34434 var y = y2.redSqrt();
34435 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
34436 throw new Error('invalid point');
ab78acc6 34437
8b095871
IC
34438 // XXX Is there any way to tell if the number is odd without converting it
34439 // to non-red form?
34440 var isOdd = y.fromRed().isOdd();
34441 if (odd && !isOdd || !odd && isOdd)
34442 y = y.redNeg();
ab78acc6 34443
8b095871
IC
34444 return this.point(x, y);
34445};
ab78acc6 34446
8b095871
IC
34447ShortCurve.prototype.validate = function validate(point) {
34448 if (point.inf)
34449 return true;
ab78acc6 34450
8b095871
IC
34451 var x = point.x;
34452 var y = point.y;
ab78acc6 34453
8b095871
IC
34454 var ax = this.a.redMul(x);
34455 var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
34456 return y.redSqr().redISub(rhs).cmpn(0) === 0;
34457};
ab78acc6 34458
8b095871
IC
34459ShortCurve.prototype._endoWnafMulAdd =
34460 function _endoWnafMulAdd(points, coeffs, jacobianResult) {
34461 var npoints = this._endoWnafT1;
34462 var ncoeffs = this._endoWnafT2;
34463 for (var i = 0; i < points.length; i++) {
34464 var split = this._endoSplit(coeffs[i]);
34465 var p = points[i];
34466 var beta = p._getBeta();
ab78acc6 34467
8b095871
IC
34468 if (split.k1.negative) {
34469 split.k1.ineg();
34470 p = p.neg(true);
34471 }
34472 if (split.k2.negative) {
34473 split.k2.ineg();
34474 beta = beta.neg(true);
ab78acc6 34475 }
ab78acc6 34476
8b095871
IC
34477 npoints[i * 2] = p;
34478 npoints[i * 2 + 1] = beta;
34479 ncoeffs[i * 2] = split.k1;
34480 ncoeffs[i * 2 + 1] = split.k2;
34481 }
34482 var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);
ab78acc6 34483
8b095871
IC
34484 // Clean-up references to points and coefficients
34485 for (var j = 0; j < i * 2; j++) {
34486 npoints[j] = null;
34487 ncoeffs[j] = null;
34488 }
34489 return res;
34490};
34491
34492function Point(curve, x, y, isRed) {
34493 Base.BasePoint.call(this, curve, 'affine');
34494 if (x === null && y === null) {
34495 this.x = null;
34496 this.y = null;
34497 this.inf = true;
34498 } else {
34499 this.x = new BN(x, 16);
34500 this.y = new BN(y, 16);
34501 // Force redgomery representation when loading from JSON
34502 if (isRed) {
34503 this.x.forceRed(this.curve.red);
34504 this.y.forceRed(this.curve.red);
ab78acc6 34505 }
8b095871
IC
34506 if (!this.x.red)
34507 this.x = this.x.toRed(this.curve.red);
34508 if (!this.y.red)
34509 this.y = this.y.toRed(this.curve.red);
34510 this.inf = false;
34511 }
34512}
34513inherits(Point, Base.BasePoint);
ab78acc6 34514
8b095871
IC
34515ShortCurve.prototype.point = function point(x, y, isRed) {
34516 return new Point(this, x, y, isRed);
34517};
ab78acc6 34518
8b095871
IC
34519ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
34520 return Point.fromJSON(this, obj, red);
34521};
ab78acc6 34522
8b095871
IC
34523Point.prototype._getBeta = function _getBeta() {
34524 if (!this.curve.endo)
34525 return;
ab78acc6 34526
8b095871
IC
34527 var pre = this.precomputed;
34528 if (pre && pre.beta)
34529 return pre.beta;
ab78acc6 34530
8b095871
IC
34531 var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
34532 if (pre) {
34533 var curve = this.curve;
34534 var endoMul = function(p) {
34535 return curve.point(p.x.redMul(curve.endo.beta), p.y);
34536 };
34537 pre.beta = beta;
34538 beta.precomputed = {
34539 beta: null,
34540 naf: pre.naf && {
34541 wnd: pre.naf.wnd,
34542 points: pre.naf.points.map(endoMul)
34543 },
34544 doubles: pre.doubles && {
34545 step: pre.doubles.step,
34546 points: pre.doubles.points.map(endoMul)
34547 }
ab78acc6 34548 };
ab78acc6 34549 }
8b095871 34550 return beta;
ab78acc6
IC
34551};
34552
8b095871
IC
34553Point.prototype.toJSON = function toJSON() {
34554 if (!this.precomputed)
34555 return [ this.x, this.y ];
ab78acc6 34556
8b095871
IC
34557 return [ this.x, this.y, this.precomputed && {
34558 doubles: this.precomputed.doubles && {
34559 step: this.precomputed.doubles.step,
34560 points: this.precomputed.doubles.points.slice(1)
34561 },
34562 naf: this.precomputed.naf && {
34563 wnd: this.precomputed.naf.wnd,
34564 points: this.precomputed.naf.points.slice(1)
34565 }
34566 } ];
34567};
ab78acc6 34568
8b095871
IC
34569Point.fromJSON = function fromJSON(curve, obj, red) {
34570 if (typeof obj === 'string')
34571 obj = JSON.parse(obj);
34572 var res = curve.point(obj[0], obj[1], red);
34573 if (!obj[2])
34574 return res;
ab78acc6 34575
8b095871
IC
34576 function obj2point(obj) {
34577 return curve.point(obj[0], obj[1], red);
34578 }
34579
34580 var pre = obj[2];
34581 res.precomputed = {
34582 beta: null,
34583 doubles: pre.doubles && {
34584 step: pre.doubles.step,
34585 points: [ res ].concat(pre.doubles.points.map(obj2point))
34586 },
34587 naf: pre.naf && {
34588 wnd: pre.naf.wnd,
34589 points: [ res ].concat(pre.naf.points.map(obj2point))
ab78acc6 34590 }
8b095871
IC
34591 };
34592 return res;
34593};
ab78acc6 34594
8b095871
IC
34595Point.prototype.inspect = function inspect() {
34596 if (this.isInfinity())
34597 return '<EC Point Infinity>';
34598 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
34599 ' y: ' + this.y.fromRed().toString(16, 2) + '>';
34600};
ab78acc6 34601
8b095871
IC
34602Point.prototype.isInfinity = function isInfinity() {
34603 return this.inf;
34604};
ebd8d4e8 34605
8b095871
IC
34606Point.prototype.add = function add(p) {
34607 // O + P = P
34608 if (this.inf)
34609 return p;
ab78acc6 34610
8b095871
IC
34611 // P + O = P
34612 if (p.inf)
34613 return this;
ab78acc6 34614
8b095871
IC
34615 // P + P = 2P
34616 if (this.eq(p))
34617 return this.dbl();
ab78acc6 34618
8b095871
IC
34619 // P + (-P) = O
34620 if (this.neg().eq(p))
34621 return this.curve.point(null, null);
ab78acc6 34622
8b095871
IC
34623 // P + Q = O
34624 if (this.x.cmp(p.x) === 0)
34625 return this.curve.point(null, null);
ebd8d4e8 34626
8b095871
IC
34627 var c = this.y.redSub(p.y);
34628 if (c.cmpn(0) !== 0)
34629 c = c.redMul(this.x.redSub(p.x).redInvm());
34630 var nx = c.redSqr().redISub(this.x).redISub(p.x);
34631 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
34632 return this.curve.point(nx, ny);
34633};
ab78acc6 34634
8b095871
IC
34635Point.prototype.dbl = function dbl() {
34636 if (this.inf)
34637 return this;
ebd8d4e8 34638
8b095871
IC
34639 // 2P = O
34640 var ys1 = this.y.redAdd(this.y);
34641 if (ys1.cmpn(0) === 0)
34642 return this.curve.point(null, null);
ebd8d4e8 34643
8b095871 34644 var a = this.curve.a;
ebd8d4e8 34645
8b095871
IC
34646 var x2 = this.x.redSqr();
34647 var dyinv = ys1.redInvm();
34648 var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
ebd8d4e8 34649
8b095871
IC
34650 var nx = c.redSqr().redISub(this.x.redAdd(this.x));
34651 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
34652 return this.curve.point(nx, ny);
34653};
ebd8d4e8 34654
8b095871
IC
34655Point.prototype.getX = function getX() {
34656 return this.x.fromRed();
34657};
ab78acc6 34658
8b095871
IC
34659Point.prototype.getY = function getY() {
34660 return this.y.fromRed();
34661};
ebd8d4e8 34662
8b095871
IC
34663Point.prototype.mul = function mul(k) {
34664 k = new BN(k, 16);
ebd8d4e8 34665
8b095871
IC
34666 if (this._hasDoubles(k))
34667 return this.curve._fixedNafMul(this, k);
34668 else if (this.curve.endo)
34669 return this.curve._endoWnafMulAdd([ this ], [ k ]);
34670 else
34671 return this.curve._wnafMul(this, k);
34672};
ebd8d4e8 34673
8b095871
IC
34674Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
34675 var points = [ this, p2 ];
34676 var coeffs = [ k1, k2 ];
34677 if (this.curve.endo)
34678 return this.curve._endoWnafMulAdd(points, coeffs);
34679 else
34680 return this.curve._wnafMulAdd(1, points, coeffs, 2);
34681};
ebd8d4e8 34682
8b095871
IC
34683Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
34684 var points = [ this, p2 ];
34685 var coeffs = [ k1, k2 ];
34686 if (this.curve.endo)
34687 return this.curve._endoWnafMulAdd(points, coeffs, true);
34688 else
34689 return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
34690};
ebd8d4e8 34691
8b095871
IC
34692Point.prototype.eq = function eq(p) {
34693 return this === p ||
34694 this.inf === p.inf &&
34695 (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
34696};
ebd8d4e8 34697
8b095871
IC
34698Point.prototype.neg = function neg(_precompute) {
34699 if (this.inf)
34700 return this;
ebd8d4e8 34701
8b095871
IC
34702 var res = this.curve.point(this.x, this.y.redNeg());
34703 if (_precompute && this.precomputed) {
34704 var pre = this.precomputed;
34705 var negate = function(p) {
34706 return p.neg();
34707 };
34708 res.precomputed = {
34709 naf: pre.naf && {
34710 wnd: pre.naf.wnd,
34711 points: pre.naf.points.map(negate)
34712 },
34713 doubles: pre.doubles && {
34714 step: pre.doubles.step,
34715 points: pre.doubles.points.map(negate)
34716 }
34717 };
34718 }
34719 return res;
34720};
ebd8d4e8 34721
8b095871
IC
34722Point.prototype.toJ = function toJ() {
34723 if (this.inf)
34724 return this.curve.jpoint(null, null, null);
ebd8d4e8 34725
8b095871
IC
34726 var res = this.curve.jpoint(this.x, this.y, this.curve.one);
34727 return res;
34728};
ebd8d4e8 34729
8b095871
IC
34730function JPoint(curve, x, y, z) {
34731 Base.BasePoint.call(this, curve, 'jacobian');
34732 if (x === null && y === null && z === null) {
34733 this.x = this.curve.one;
34734 this.y = this.curve.one;
34735 this.z = new BN(0);
34736 } else {
34737 this.x = new BN(x, 16);
34738 this.y = new BN(y, 16);
34739 this.z = new BN(z, 16);
34740 }
34741 if (!this.x.red)
34742 this.x = this.x.toRed(this.curve.red);
34743 if (!this.y.red)
34744 this.y = this.y.toRed(this.curve.red);
34745 if (!this.z.red)
34746 this.z = this.z.toRed(this.curve.red);
ebd8d4e8 34747
8b095871 34748 this.zOne = this.z === this.curve.one;
ab78acc6 34749}
8b095871 34750inherits(JPoint, Base.BasePoint);
ab78acc6 34751
8b095871
IC
34752ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
34753 return new JPoint(this, x, y, z);
34754};
ab78acc6 34755
8b095871
IC
34756JPoint.prototype.toP = function toP() {
34757 if (this.isInfinity())
34758 return this.curve.point(null, null);
ab78acc6 34759
8b095871
IC
34760 var zinv = this.z.redInvm();
34761 var zinv2 = zinv.redSqr();
34762 var ax = this.x.redMul(zinv2);
34763 var ay = this.y.redMul(zinv2).redMul(zinv);
ab78acc6 34764
8b095871
IC
34765 return this.curve.point(ax, ay);
34766};
ab78acc6 34767
8b095871
IC
34768JPoint.prototype.neg = function neg() {
34769 return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
34770};
ab78acc6 34771
8b095871
IC
34772JPoint.prototype.add = function add(p) {
34773 // O + P = P
34774 if (this.isInfinity())
34775 return p;
ab78acc6 34776
8b095871
IC
34777 // P + O = P
34778 if (p.isInfinity())
34779 return this;
ab78acc6 34780
8b095871
IC
34781 // 12M + 4S + 7A
34782 var pz2 = p.z.redSqr();
34783 var z2 = this.z.redSqr();
34784 var u1 = this.x.redMul(pz2);
34785 var u2 = p.x.redMul(z2);
34786 var s1 = this.y.redMul(pz2.redMul(p.z));
34787 var s2 = p.y.redMul(z2.redMul(this.z));
34788
34789 var h = u1.redSub(u2);
34790 var r = s1.redSub(s2);
34791 if (h.cmpn(0) === 0) {
34792 if (r.cmpn(0) !== 0)
34793 return this.curve.jpoint(null, null, null);
34794 else
34795 return this.dbl();
34796 }
ab78acc6 34797
8b095871
IC
34798 var h2 = h.redSqr();
34799 var h3 = h2.redMul(h);
34800 var v = u1.redMul(h2);
ab78acc6 34801
8b095871
IC
34802 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
34803 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
34804 var nz = this.z.redMul(p.z).redMul(h);
ab78acc6 34805
8b095871
IC
34806 return this.curve.jpoint(nx, ny, nz);
34807};
ab78acc6 34808
8b095871
IC
34809JPoint.prototype.mixedAdd = function mixedAdd(p) {
34810 // O + P = P
34811 if (this.isInfinity())
34812 return p.toJ();
ab78acc6 34813
8b095871
IC
34814 // P + O = P
34815 if (p.isInfinity())
34816 return this;
ab78acc6 34817
8b095871
IC
34818 // 8M + 3S + 7A
34819 var z2 = this.z.redSqr();
34820 var u1 = this.x;
34821 var u2 = p.x.redMul(z2);
34822 var s1 = this.y;
34823 var s2 = p.y.redMul(z2).redMul(this.z);
34824
34825 var h = u1.redSub(u2);
34826 var r = s1.redSub(s2);
34827 if (h.cmpn(0) === 0) {
34828 if (r.cmpn(0) !== 0)
34829 return this.curve.jpoint(null, null, null);
34830 else
34831 return this.dbl();
ab78acc6
IC
34832 }
34833
8b095871
IC
34834 var h2 = h.redSqr();
34835 var h3 = h2.redMul(h);
34836 var v = u1.redMul(h2);
ab78acc6 34837
8b095871
IC
34838 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
34839 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
34840 var nz = this.z.redMul(h);
ab78acc6 34841
8b095871
IC
34842 return this.curve.jpoint(nx, ny, nz);
34843};
ab78acc6 34844
8b095871
IC
34845JPoint.prototype.dblp = function dblp(pow) {
34846 if (pow === 0)
34847 return this;
34848 if (this.isInfinity())
34849 return this;
34850 if (!pow)
34851 return this.dbl();
34852
34853 if (this.curve.zeroA || this.curve.threeA) {
34854 var r = this;
34855 for (var i = 0; i < pow; i++)
34856 r = r.dbl();
34857 return r;
34858 }
34859
34860 // 1M + 2S + 1A + N * (4S + 5M + 8A)
34861 // N = 1 => 6M + 6S + 9A
34862 var a = this.curve.a;
34863 var tinv = this.curve.tinv;
34864
34865 var jx = this.x;
34866 var jy = this.y;
34867 var jz = this.z;
34868 var jz4 = jz.redSqr().redSqr();
34869
34870 // Reuse results
34871 var jyd = jy.redAdd(jy);
34872 for (var i = 0; i < pow; i++) {
34873 var jx2 = jx.redSqr();
34874 var jyd2 = jyd.redSqr();
34875 var jyd4 = jyd2.redSqr();
34876 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
34877
34878 var t1 = jx.redMul(jyd2);
34879 var nx = c.redSqr().redISub(t1.redAdd(t1));
34880 var t2 = t1.redISub(nx);
34881 var dny = c.redMul(t2);
34882 dny = dny.redIAdd(dny).redISub(jyd4);
34883 var nz = jyd.redMul(jz);
34884 if (i + 1 < pow)
34885 jz4 = jz4.redMul(jyd4);
34886
34887 jx = nx;
34888 jz = nz;
34889 jyd = dny;
34890 }
34891
34892 return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
34893};
ab78acc6 34894
8b095871
IC
34895JPoint.prototype.dbl = function dbl() {
34896 if (this.isInfinity())
34897 return this;
ab78acc6 34898
8b095871
IC
34899 if (this.curve.zeroA)
34900 return this._zeroDbl();
34901 else if (this.curve.threeA)
34902 return this._threeDbl();
34903 else
34904 return this._dbl();
34905};
ab78acc6 34906
8b095871
IC
34907JPoint.prototype._zeroDbl = function _zeroDbl() {
34908 var nx;
34909 var ny;
34910 var nz;
34911 // Z = 1
34912 if (this.zOne) {
34913 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
34914 // #doubling-mdbl-2007-bl
34915 // 1M + 5S + 14A
34916
34917 // XX = X1^2
34918 var xx = this.x.redSqr();
34919 // YY = Y1^2
34920 var yy = this.y.redSqr();
34921 // YYYY = YY^2
34922 var yyyy = yy.redSqr();
34923 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
34924 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
34925 s = s.redIAdd(s);
34926 // M = 3 * XX + a; a = 0
34927 var m = xx.redAdd(xx).redIAdd(xx);
34928 // T = M ^ 2 - 2*S
34929 var t = m.redSqr().redISub(s).redISub(s);
34930
34931 // 8 * YYYY
34932 var yyyy8 = yyyy.redIAdd(yyyy);
34933 yyyy8 = yyyy8.redIAdd(yyyy8);
34934 yyyy8 = yyyy8.redIAdd(yyyy8);
34935
34936 // X3 = T
34937 nx = t;
34938 // Y3 = M * (S - T) - 8 * YYYY
34939 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
34940 // Z3 = 2*Y1
34941 nz = this.y.redAdd(this.y);
34942 } else {
34943 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
34944 // #doubling-dbl-2009-l
34945 // 2M + 5S + 13A
34946
34947 // A = X1^2
34948 var a = this.x.redSqr();
34949 // B = Y1^2
34950 var b = this.y.redSqr();
34951 // C = B^2
34952 var c = b.redSqr();
34953 // D = 2 * ((X1 + B)^2 - A - C)
34954 var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
34955 d = d.redIAdd(d);
34956 // E = 3 * A
34957 var e = a.redAdd(a).redIAdd(a);
34958 // F = E^2
34959 var f = e.redSqr();
34960
34961 // 8 * C
34962 var c8 = c.redIAdd(c);
34963 c8 = c8.redIAdd(c8);
34964 c8 = c8.redIAdd(c8);
34965
34966 // X3 = F - 2 * D
34967 nx = f.redISub(d).redISub(d);
34968 // Y3 = E * (D - X3) - 8 * C
34969 ny = e.redMul(d.redISub(nx)).redISub(c8);
34970 // Z3 = 2 * Y1 * Z1
34971 nz = this.y.redMul(this.z);
34972 nz = nz.redIAdd(nz);
34973 }
34974
34975 return this.curve.jpoint(nx, ny, nz);
34976};
ab78acc6 34977
8b095871
IC
34978JPoint.prototype._threeDbl = function _threeDbl() {
34979 var nx;
34980 var ny;
34981 var nz;
34982 // Z = 1
34983 if (this.zOne) {
34984 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html
34985 // #doubling-mdbl-2007-bl
34986 // 1M + 5S + 15A
34987
34988 // XX = X1^2
34989 var xx = this.x.redSqr();
34990 // YY = Y1^2
34991 var yy = this.y.redSqr();
34992 // YYYY = YY^2
34993 var yyyy = yy.redSqr();
34994 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
34995 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
34996 s = s.redIAdd(s);
34997 // M = 3 * XX + a
34998 var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
34999 // T = M^2 - 2 * S
35000 var t = m.redSqr().redISub(s).redISub(s);
35001 // X3 = T
35002 nx = t;
35003 // Y3 = M * (S - T) - 8 * YYYY
35004 var yyyy8 = yyyy.redIAdd(yyyy);
35005 yyyy8 = yyyy8.redIAdd(yyyy8);
35006 yyyy8 = yyyy8.redIAdd(yyyy8);
35007 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
35008 // Z3 = 2 * Y1
35009 nz = this.y.redAdd(this.y);
35010 } else {
35011 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
35012 // 3M + 5S
35013
35014 // delta = Z1^2
35015 var delta = this.z.redSqr();
35016 // gamma = Y1^2
35017 var gamma = this.y.redSqr();
35018 // beta = X1 * gamma
35019 var beta = this.x.redMul(gamma);
35020 // alpha = 3 * (X1 - delta) * (X1 + delta)
35021 var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
35022 alpha = alpha.redAdd(alpha).redIAdd(alpha);
35023 // X3 = alpha^2 - 8 * beta
35024 var beta4 = beta.redIAdd(beta);
35025 beta4 = beta4.redIAdd(beta4);
35026 var beta8 = beta4.redAdd(beta4);
35027 nx = alpha.redSqr().redISub(beta8);
35028 // Z3 = (Y1 + Z1)^2 - gamma - delta
35029 nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
35030 // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2
35031 var ggamma8 = gamma.redSqr();
35032 ggamma8 = ggamma8.redIAdd(ggamma8);
35033 ggamma8 = ggamma8.redIAdd(ggamma8);
35034 ggamma8 = ggamma8.redIAdd(ggamma8);
35035 ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
35036 }
35037
35038 return this.curve.jpoint(nx, ny, nz);
35039};
ab78acc6 35040
8b095871
IC
35041JPoint.prototype._dbl = function _dbl() {
35042 var a = this.curve.a;
ab78acc6 35043
8b095871
IC
35044 // 4M + 6S + 10A
35045 var jx = this.x;
35046 var jy = this.y;
35047 var jz = this.z;
35048 var jz4 = jz.redSqr().redSqr();
ab78acc6 35049
8b095871
IC
35050 var jx2 = jx.redSqr();
35051 var jy2 = jy.redSqr();
ebd8d4e8 35052
8b095871 35053 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
ebd8d4e8 35054
8b095871
IC
35055 var jxd4 = jx.redAdd(jx);
35056 jxd4 = jxd4.redIAdd(jxd4);
35057 var t1 = jxd4.redMul(jy2);
35058 var nx = c.redSqr().redISub(t1.redAdd(t1));
35059 var t2 = t1.redISub(nx);
ebd8d4e8 35060
8b095871
IC
35061 var jyd8 = jy2.redSqr();
35062 jyd8 = jyd8.redIAdd(jyd8);
35063 jyd8 = jyd8.redIAdd(jyd8);
35064 jyd8 = jyd8.redIAdd(jyd8);
35065 var ny = c.redMul(t2).redISub(jyd8);
35066 var nz = jy.redAdd(jy).redMul(jz);
ebd8d4e8 35067
8b095871
IC
35068 return this.curve.jpoint(nx, ny, nz);
35069};
ebd8d4e8 35070
8b095871
IC
35071JPoint.prototype.trpl = function trpl() {
35072 if (!this.curve.zeroA)
35073 return this.dbl().add(this);
35074
35075 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl
35076 // 5M + 10S + ...
35077
35078 // XX = X1^2
35079 var xx = this.x.redSqr();
35080 // YY = Y1^2
35081 var yy = this.y.redSqr();
35082 // ZZ = Z1^2
35083 var zz = this.z.redSqr();
35084 // YYYY = YY^2
35085 var yyyy = yy.redSqr();
35086 // M = 3 * XX + a * ZZ2; a = 0
35087 var m = xx.redAdd(xx).redIAdd(xx);
35088 // MM = M^2
35089 var mm = m.redSqr();
35090 // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM
35091 var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
35092 e = e.redIAdd(e);
35093 e = e.redAdd(e).redIAdd(e);
35094 e = e.redISub(mm);
35095 // EE = E^2
35096 var ee = e.redSqr();
35097 // T = 16*YYYY
35098 var t = yyyy.redIAdd(yyyy);
35099 t = t.redIAdd(t);
35100 t = t.redIAdd(t);
35101 t = t.redIAdd(t);
35102 // U = (M + E)^2 - MM - EE - T
35103 var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
35104 // X3 = 4 * (X1 * EE - 4 * YY * U)
35105 var yyu4 = yy.redMul(u);
35106 yyu4 = yyu4.redIAdd(yyu4);
35107 yyu4 = yyu4.redIAdd(yyu4);
35108 var nx = this.x.redMul(ee).redISub(yyu4);
35109 nx = nx.redIAdd(nx);
35110 nx = nx.redIAdd(nx);
35111 // Y3 = 8 * Y1 * (U * (T - U) - E * EE)
35112 var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
35113 ny = ny.redIAdd(ny);
35114 ny = ny.redIAdd(ny);
35115 ny = ny.redIAdd(ny);
35116 // Z3 = (Z1 + E)^2 - ZZ - EE
35117 var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
35118
35119 return this.curve.jpoint(nx, ny, nz);
35120};
ebd8d4e8 35121
8b095871
IC
35122JPoint.prototype.mul = function mul(k, kbase) {
35123 k = new BN(k, kbase);
ebd8d4e8 35124
8b095871
IC
35125 return this.curve._wnafMul(this, k);
35126};
ebd8d4e8 35127
8b095871
IC
35128JPoint.prototype.eq = function eq(p) {
35129 if (p.type === 'affine')
35130 return this.eq(p.toJ());
ebd8d4e8 35131
8b095871
IC
35132 if (this === p)
35133 return true;
ebd8d4e8 35134
8b095871
IC
35135 // x1 * z2^2 == x2 * z1^2
35136 var z2 = this.z.redSqr();
35137 var pz2 = p.z.redSqr();
35138 if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
35139 return false;
ebd8d4e8 35140
8b095871
IC
35141 // y1 * z2^3 == y2 * z1^3
35142 var z3 = z2.redMul(this.z);
35143 var pz3 = pz2.redMul(p.z);
35144 return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
35145};
ab78acc6 35146
8b095871
IC
35147JPoint.prototype.eqXToP = function eqXToP(x) {
35148 var zs = this.z.redSqr();
35149 var rx = x.toRed(this.curve.red).redMul(zs);
35150 if (this.x.cmp(rx) === 0)
35151 return true;
ebd8d4e8 35152
8b095871
IC
35153 var xc = x.clone();
35154 var t = this.curve.redN.redMul(zs);
35155 for (;;) {
35156 xc.iadd(this.curve.n);
35157 if (xc.cmp(this.curve.p) >= 0)
35158 return false;
ebd8d4e8 35159
8b095871
IC
35160 rx.redIAdd(t);
35161 if (this.x.cmp(rx) === 0)
35162 return true;
35163 }
35164 return false;
35165};
ebd8d4e8 35166
8b095871
IC
35167JPoint.prototype.inspect = function inspect() {
35168 if (this.isInfinity())
35169 return '<EC JPoint Infinity>';
35170 return '<EC JPoint x: ' + this.x.toString(16, 2) +
35171 ' y: ' + this.y.toString(16, 2) +
35172 ' z: ' + this.z.toString(16, 2) + '>';
35173};
ebd8d4e8 35174
8b095871
IC
35175JPoint.prototype.isInfinity = function isInfinity() {
35176 // XXX This code assumes that zero is always zero in red
35177 return this.z.cmpn(0) === 0;
35178};
ebd8d4e8 35179
8b095871
IC
35180},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],45:[function(require,module,exports){
35181'use strict';
ebd8d4e8 35182
8b095871 35183var curves = exports;
ebd8d4e8 35184
8b095871
IC
35185var hash = require('hash.js');
35186var elliptic = require('../elliptic');
ebd8d4e8 35187
8b095871 35188var assert = elliptic.utils.assert;
ebd8d4e8 35189
8b095871
IC
35190function PresetCurve(options) {
35191 if (options.type === 'short')
35192 this.curve = new elliptic.curve.short(options);
35193 else if (options.type === 'edwards')
35194 this.curve = new elliptic.curve.edwards(options);
35195 else
35196 this.curve = new elliptic.curve.mont(options);
35197 this.g = this.curve.g;
35198 this.n = this.curve.n;
35199 this.hash = options.hash;
35200
35201 assert(this.g.validate(), 'Invalid curve');
35202 assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');
35203}
35204curves.PresetCurve = PresetCurve;
35205
35206function defineCurve(name, options) {
35207 Object.defineProperty(curves, name, {
35208 configurable: true,
35209 enumerable: true,
35210 get: function() {
35211 var curve = new PresetCurve(options);
35212 Object.defineProperty(curves, name, {
35213 configurable: true,
35214 enumerable: true,
35215 value: curve
35216 });
35217 return curve;
35218 }
35219 });
ebd8d4e8
IC
35220}
35221
8b095871
IC
35222defineCurve('p192', {
35223 type: 'short',
35224 prime: 'p192',
35225 p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
35226 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
35227 b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
35228 n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
35229 hash: hash.sha256,
35230 gRed: false,
35231 g: [
35232 '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',
35233 '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'
35234 ]
35235});
ebd8d4e8 35236
8b095871
IC
35237defineCurve('p224', {
35238 type: 'short',
35239 prime: 'p224',
35240 p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
35241 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
35242 b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
35243 n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
35244 hash: hash.sha256,
35245 gRed: false,
35246 g: [
35247 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',
35248 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'
35249 ]
35250});
ebd8d4e8 35251
8b095871
IC
35252defineCurve('p256', {
35253 type: 'short',
35254 prime: null,
35255 p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
35256 a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
35257 b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
35258 n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
35259 hash: hash.sha256,
35260 gRed: false,
35261 g: [
35262 '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',
35263 '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'
35264 ]
35265});
ebd8d4e8 35266
8b095871
IC
35267defineCurve('p384', {
35268 type: 'short',
35269 prime: null,
35270 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
35271 'fffffffe ffffffff 00000000 00000000 ffffffff',
35272 a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
35273 'fffffffe ffffffff 00000000 00000000 fffffffc',
35274 b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +
35275 '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
35276 n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +
35277 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
35278 hash: hash.sha384,
35279 gRed: false,
35280 g: [
35281 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +
35282 '5502f25d bf55296c 3a545e38 72760ab7',
35283 '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +
35284 '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'
35285 ]
35286});
ebd8d4e8 35287
8b095871
IC
35288defineCurve('p521', {
35289 type: 'short',
35290 prime: null,
35291 p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
35292 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
35293 'ffffffff ffffffff ffffffff ffffffff ffffffff',
35294 a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
35295 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
35296 'ffffffff ffffffff ffffffff ffffffff fffffffc',
35297 b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +
35298 '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +
35299 '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
35300 n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
35301 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +
35302 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
35303 hash: hash.sha512,
35304 gRed: false,
35305 g: [
35306 '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +
35307 '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +
35308 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',
35309 '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +
35310 '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +
35311 '3fad0761 353c7086 a272c240 88be9476 9fd16650'
35312 ]
35313});
ebd8d4e8 35314
8b095871
IC
35315defineCurve('curve25519', {
35316 type: 'mont',
35317 prime: 'p25519',
35318 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
35319 a: '76d06',
35320 b: '1',
35321 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
35322 hash: hash.sha256,
35323 gRed: false,
35324 g: [
35325 '9'
35326 ]
35327});
ebd8d4e8 35328
8b095871
IC
35329defineCurve('ed25519', {
35330 type: 'edwards',
35331 prime: 'p25519',
35332 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
35333 a: '-1',
35334 c: '1',
35335 // -121665 * (121666^(-1)) (mod P)
35336 d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
35337 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
35338 hash: hash.sha256,
35339 gRed: false,
35340 g: [
35341 '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',
35342
35343 // 4/5
35344 '6666666666666666666666666666666666666666666666666666666666666658'
35345 ]
35346});
ebd8d4e8 35347
8b095871
IC
35348var pre;
35349try {
35350 pre = require('./precomputed/secp256k1');
35351} catch (e) {
35352 pre = undefined;
35353}
35354
35355defineCurve('secp256k1', {
35356 type: 'short',
35357 prime: 'k256',
35358 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
35359 a: '0',
35360 b: '7',
35361 n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
35362 h: '1',
35363 hash: hash.sha256,
35364
35365 // Precomputed endomorphism
35366 beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
35367 lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
35368 basis: [
35369 {
35370 a: '3086d221a7d46bcde86c90e49284eb15',
35371 b: '-e4437ed6010e88286f547fa90abfe4c3'
35372 },
35373 {
35374 a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
35375 b: '3086d221a7d46bcde86c90e49284eb15'
35376 }
35377 ],
ebd8d4e8 35378
8b095871
IC
35379 gRed: false,
35380 g: [
35381 '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
35382 '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
35383 pre
35384 ]
35385});
ebd8d4e8 35386
8b095871
IC
35387},{"../elliptic":39,"./precomputed/secp256k1":53,"hash.js":57}],46:[function(require,module,exports){
35388'use strict';
ebd8d4e8 35389
8b095871
IC
35390var BN = require('bn.js');
35391var elliptic = require('../../elliptic');
35392var utils = elliptic.utils;
35393var assert = utils.assert;
ebd8d4e8 35394
8b095871
IC
35395var KeyPair = require('./key');
35396var Signature = require('./signature');
ebd8d4e8 35397
8b095871
IC
35398function EC(options) {
35399 if (!(this instanceof EC))
35400 return new EC(options);
ebd8d4e8 35401
8b095871
IC
35402 // Shortcut `elliptic.ec(curve-name)`
35403 if (typeof options === 'string') {
35404 assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);
35405
35406 options = elliptic.curves[options];
ebd8d4e8
IC
35407 }
35408
8b095871
IC
35409 // Shortcut for `elliptic.ec(elliptic.curves.curveName)`
35410 if (options instanceof elliptic.curves.PresetCurve)
35411 options = { curve: options };
ebd8d4e8 35412
8b095871
IC
35413 this.curve = options.curve.curve;
35414 this.n = this.curve.n;
35415 this.nh = this.n.ushrn(1);
35416 this.g = this.curve.g;
ebd8d4e8 35417
8b095871
IC
35418 // Point on curve
35419 this.g = options.curve.g;
35420 this.g.precompute(options.curve.n.bitLength() + 1);
ebd8d4e8 35421
8b095871
IC
35422 // Hash for function for DRBG
35423 this.hash = options.hash || options.curve.hash;
ebd8d4e8 35424}
8b095871 35425module.exports = EC;
ebd8d4e8 35426
8b095871
IC
35427EC.prototype.keyPair = function keyPair(options) {
35428 return new KeyPair(this, options);
35429};
35430
35431EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
35432 return KeyPair.fromPrivate(this, priv, enc);
35433};
35434
35435EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
35436 return KeyPair.fromPublic(this, pub, enc);
35437};
35438
35439EC.prototype.genKeyPair = function genKeyPair(options) {
35440 if (!options)
35441 options = {};
35442
35443 // Instantiate Hmac_DRBG
35444 var drbg = new elliptic.hmacDRBG({
35445 hash: this.hash,
35446 pers: options.pers,
35447 entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),
35448 nonce: this.n.toArray()
35449 });
ebd8d4e8 35450
8b095871
IC
35451 var bytes = this.n.byteLength();
35452 var ns2 = this.n.sub(new BN(2));
35453 do {
35454 var priv = new BN(drbg.generate(bytes));
35455 if (priv.cmp(ns2) > 0)
35456 continue;
ebd8d4e8 35457
8b095871
IC
35458 priv.iaddn(1);
35459 return this.keyFromPrivate(priv);
35460 } while (true);
35461};
ebd8d4e8 35462
8b095871
IC
35463EC.prototype._truncateToN = function truncateToN(msg, truncOnly) {
35464 var delta = msg.byteLength() * 8 - this.n.bitLength();
35465 if (delta > 0)
35466 msg = msg.ushrn(delta);
35467 if (!truncOnly && msg.cmp(this.n) >= 0)
35468 return msg.sub(this.n);
35469 else
35470 return msg;
35471};
ebd8d4e8 35472
8b095871
IC
35473EC.prototype.sign = function sign(msg, key, enc, options) {
35474 if (typeof enc === 'object') {
35475 options = enc;
35476 enc = null;
ebd8d4e8 35477 }
8b095871
IC
35478 if (!options)
35479 options = {};
ebd8d4e8 35480
8b095871
IC
35481 key = this.keyFromPrivate(key, enc);
35482 msg = this._truncateToN(new BN(msg, 16));
ebd8d4e8 35483
8b095871
IC
35484 // Zero-extend key to provide enough entropy
35485 var bytes = this.n.byteLength();
35486 var bkey = key.getPrivate().toArray('be', bytes);
ab78acc6 35487
8b095871
IC
35488 // Zero-extend nonce to have the same byte size as N
35489 var nonce = msg.toArray('be', bytes);
ab78acc6 35490
8b095871
IC
35491 // Instantiate Hmac_DRBG
35492 var drbg = new elliptic.hmacDRBG({
35493 hash: this.hash,
35494 entropy: bkey,
35495 nonce: nonce,
35496 pers: options.pers,
35497 persEnc: options.persEnc
35498 });
ab78acc6 35499
8b095871
IC
35500 // Number of bytes to generate
35501 var ns1 = this.n.sub(new BN(1));
ebd8d4e8 35502
8b095871
IC
35503 for (var iter = 0; true; iter++) {
35504 var k = options.k ?
35505 options.k(iter) :
35506 new BN(drbg.generate(this.n.byteLength()));
35507 k = this._truncateToN(k, true);
35508 if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
35509 continue;
ebd8d4e8 35510
8b095871
IC
35511 var kp = this.g.mul(k);
35512 if (kp.isInfinity())
35513 continue;
ebd8d4e8 35514
8b095871
IC
35515 var kpX = kp.getX();
35516 var r = kpX.umod(this.n);
35517 if (r.cmpn(0) === 0)
35518 continue;
ebd8d4e8 35519
8b095871
IC
35520 var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
35521 s = s.umod(this.n);
35522 if (s.cmpn(0) === 0)
35523 continue;
ebd8d4e8 35524
8b095871
IC
35525 var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |
35526 (kpX.cmp(r) !== 0 ? 2 : 0);
ebd8d4e8 35527
8b095871
IC
35528 // Use complement of `s`, if it is > `n / 2`
35529 if (options.canonical && s.cmp(this.nh) > 0) {
35530 s = this.n.sub(s);
35531 recoveryParam ^= 1;
35532 }
ebd8d4e8 35533
8b095871
IC
35534 return new Signature({ r: r, s: s, recoveryParam: recoveryParam });
35535 }
35536};
ebd8d4e8 35537
8b095871
IC
35538EC.prototype.verify = function verify(msg, signature, key, enc) {
35539 msg = this._truncateToN(new BN(msg, 16));
35540 key = this.keyFromPublic(key, enc);
35541 signature = new Signature(signature, 'hex');
ebd8d4e8 35542
8b095871
IC
35543 // Perform primitive values validation
35544 var r = signature.r;
35545 var s = signature.s;
35546 if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
35547 return false;
35548 if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
35549 return false;
ebd8d4e8 35550
8b095871
IC
35551 // Validate signature
35552 var sinv = s.invm(this.n);
35553 var u1 = sinv.mul(msg).umod(this.n);
35554 var u2 = sinv.mul(r).umod(this.n);
ebd8d4e8 35555
8b095871
IC
35556 if (!this.curve._maxwellTrick) {
35557 var p = this.g.mulAdd(u1, key.getPublic(), u2);
35558 if (p.isInfinity())
35559 return false;
ebd8d4e8 35560
8b095871
IC
35561 return p.getX().umod(this.n).cmp(r) === 0;
35562 }
ab78acc6 35563
8b095871
IC
35564 // NOTE: Greg Maxwell's trick, inspired by:
35565 // https://git.io/vad3K
ebd8d4e8 35566
8b095871
IC
35567 var p = this.g.jmulAdd(u1, key.getPublic(), u2);
35568 if (p.isInfinity())
35569 return false;
ab78acc6 35570
8b095871
IC
35571 // Compare `p.x` of Jacobian point with `r`,
35572 // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
35573 // inverse of `p.z^2`
35574 return p.eqXToP(r);
35575};
ab78acc6 35576
8b095871
IC
35577EC.prototype.recoverPubKey = function(msg, signature, j, enc) {
35578 assert((3 & j) === j, 'The recovery param is more than two bits');
35579 signature = new Signature(signature, enc);
ab78acc6 35580
8b095871
IC
35581 var n = this.n;
35582 var e = new BN(msg);
35583 var r = signature.r;
35584 var s = signature.s;
ab78acc6 35585
8b095871
IC
35586 // A set LSB signifies that the y-coordinate is odd
35587 var isYOdd = j & 1;
35588 var isSecondKey = j >> 1;
35589 if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
35590 throw new Error('Unable to find sencond key candinate');
35591
35592 // 1.1. Let x = r + jn.
35593 if (isSecondKey)
35594 r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
35595 else
35596 r = this.curve.pointFromX(r, isYOdd);
ab78acc6 35597
8b095871
IC
35598 var rInv = signature.r.invm(n);
35599 var s1 = n.sub(e).mul(rInv).umod(n);
35600 var s2 = s.mul(rInv).umod(n);
ab78acc6 35601
8b095871
IC
35602 // 1.6.1 Compute Q = r^-1 (sR - eG)
35603 // Q = r^-1 (sR + -eG)
35604 return this.g.mulAdd(s1, r, s2);
35605};
ab78acc6 35606
8b095871
IC
35607EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {
35608 signature = new Signature(signature, enc);
35609 if (signature.recoveryParam !== null)
35610 return signature.recoveryParam;
ab78acc6 35611
8b095871
IC
35612 for (var i = 0; i < 4; i++) {
35613 var Qprime;
35614 try {
35615 Qprime = this.recoverPubKey(e, signature, i);
35616 } catch (e) {
35617 continue;
ab78acc6 35618 }
ab78acc6 35619
8b095871
IC
35620 if (Qprime.eq(Q))
35621 return i;
35622 }
35623 throw new Error('Unable to find valid recovery factor');
35624};
ebd8d4e8 35625
8b095871
IC
35626},{"../../elliptic":39,"./key":47,"./signature":48,"bn.js":33}],47:[function(require,module,exports){
35627'use strict';
ebd8d4e8 35628
8b095871
IC
35629var BN = require('bn.js');
35630var elliptic = require('../../elliptic');
35631var utils = elliptic.utils;
35632var assert = utils.assert;
ebd8d4e8 35633
8b095871
IC
35634function KeyPair(ec, options) {
35635 this.ec = ec;
35636 this.priv = null;
35637 this.pub = null;
ebd8d4e8 35638
8b095871
IC
35639 // KeyPair(ec, { priv: ..., pub: ... })
35640 if (options.priv)
35641 this._importPrivate(options.priv, options.privEnc);
35642 if (options.pub)
35643 this._importPublic(options.pub, options.pubEnc);
35644}
35645module.exports = KeyPair;
ebd8d4e8 35646
8b095871
IC
35647KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
35648 if (pub instanceof KeyPair)
35649 return pub;
ebd8d4e8 35650
8b095871
IC
35651 return new KeyPair(ec, {
35652 pub: pub,
35653 pubEnc: enc
35654 });
35655};
ebd8d4e8 35656
8b095871
IC
35657KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
35658 if (priv instanceof KeyPair)
35659 return priv;
ebd8d4e8 35660
8b095871
IC
35661 return new KeyPair(ec, {
35662 priv: priv,
35663 privEnc: enc
35664 });
35665};
ebd8d4e8 35666
8b095871
IC
35667KeyPair.prototype.validate = function validate() {
35668 var pub = this.getPublic();
ebd8d4e8 35669
8b095871
IC
35670 if (pub.isInfinity())
35671 return { result: false, reason: 'Invalid public key' };
35672 if (!pub.validate())
35673 return { result: false, reason: 'Public key is not a point' };
35674 if (!pub.mul(this.ec.curve.n).isInfinity())
35675 return { result: false, reason: 'Public key * N != O' };
ab78acc6 35676
8b095871
IC
35677 return { result: true, reason: null };
35678};
ebd8d4e8 35679
8b095871
IC
35680KeyPair.prototype.getPublic = function getPublic(compact, enc) {
35681 // compact is optional argument
35682 if (typeof compact === 'string') {
35683 enc = compact;
35684 compact = null;
ebd8d4e8
IC
35685 }
35686
8b095871
IC
35687 if (!this.pub)
35688 this.pub = this.ec.g.mul(this.priv);
ebd8d4e8 35689
8b095871
IC
35690 if (!enc)
35691 return this.pub;
ebd8d4e8 35692
8b095871
IC
35693 return this.pub.encode(enc, compact);
35694};
ebd8d4e8 35695
8b095871
IC
35696KeyPair.prototype.getPrivate = function getPrivate(enc) {
35697 if (enc === 'hex')
35698 return this.priv.toString(16, 2);
35699 else
35700 return this.priv;
35701};
ab78acc6 35702
8b095871
IC
35703KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
35704 this.priv = new BN(key, enc || 16);
ab78acc6 35705
8b095871
IC
35706 // Ensure that the priv won't be bigger than n, otherwise we may fail
35707 // in fixed multiplication method
35708 this.priv = this.priv.umod(this.ec.curve.n);
35709};
ab78acc6 35710
8b095871
IC
35711KeyPair.prototype._importPublic = function _importPublic(key, enc) {
35712 if (key.x || key.y) {
35713 // Montgomery points only have an `x` coordinate.
35714 // Weierstrass/Edwards points on the other hand have both `x` and
35715 // `y` coordinates.
35716 if (this.ec.curve.type === 'mont') {
35717 assert(key.x, 'Need x coordinate');
35718 } else if (this.ec.curve.type === 'short' ||
35719 this.ec.curve.type === 'edwards') {
35720 assert(key.x && key.y, 'Need both x and y coordinate');
35721 }
35722 this.pub = this.ec.curve.point(key.x, key.y);
35723 return;
35724 }
35725 this.pub = this.ec.curve.decodePoint(key, enc);
35726};
ebd8d4e8 35727
8b095871
IC
35728// ECDH
35729KeyPair.prototype.derive = function derive(pub) {
35730 return pub.mul(this.priv).getX();
35731};
ebd8d4e8 35732
8b095871
IC
35733// ECDSA
35734KeyPair.prototype.sign = function sign(msg, enc, options) {
35735 return this.ec.sign(msg, this, enc, options);
35736};
ebd8d4e8 35737
8b095871
IC
35738KeyPair.prototype.verify = function verify(msg, signature) {
35739 return this.ec.verify(msg, signature, this);
35740};
ebd8d4e8 35741
8b095871
IC
35742KeyPair.prototype.inspect = function inspect() {
35743 return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +
35744 ' pub: ' + (this.pub && this.pub.inspect()) + ' >';
35745};
ebd8d4e8 35746
8b095871
IC
35747},{"../../elliptic":39,"bn.js":33}],48:[function(require,module,exports){
35748'use strict';
ebd8d4e8 35749
8b095871 35750var BN = require('bn.js');
ebd8d4e8 35751
8b095871
IC
35752var elliptic = require('../../elliptic');
35753var utils = elliptic.utils;
35754var assert = utils.assert;
ebd8d4e8 35755
8b095871
IC
35756function Signature(options, enc) {
35757 if (options instanceof Signature)
35758 return options;
ebd8d4e8 35759
8b095871
IC
35760 if (this._importDER(options, enc))
35761 return;
ebd8d4e8 35762
8b095871
IC
35763 assert(options.r && options.s, 'Signature without r or s');
35764 this.r = new BN(options.r, 16);
35765 this.s = new BN(options.s, 16);
35766 if (options.recoveryParam === undefined)
35767 this.recoveryParam = null;
35768 else
35769 this.recoveryParam = options.recoveryParam;
35770}
35771module.exports = Signature;
35772
35773function Position() {
35774 this.place = 0;
35775}
35776
35777function getLength(buf, p) {
35778 var initial = buf[p.place++];
35779 if (!(initial & 0x80)) {
35780 return initial;
35781 }
35782 var octetLen = initial & 0xf;
35783 var val = 0;
35784 for (var i = 0, off = p.place; i < octetLen; i++, off++) {
35785 val <<= 8;
35786 val |= buf[off];
35787 }
35788 p.place = off;
35789 return val;
35790}
35791
35792function rmPadding(buf) {
35793 var i = 0;
35794 var len = buf.length - 1;
35795 while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {
35796 i++;
35797 }
35798 if (i === 0) {
35799 return buf;
35800 }
35801 return buf.slice(i);
35802}
ebd8d4e8 35803
8b095871
IC
35804Signature.prototype._importDER = function _importDER(data, enc) {
35805 data = utils.toArray(data, enc);
35806 var p = new Position();
35807 if (data[p.place++] !== 0x30) {
35808 return false;
35809 }
35810 var len = getLength(data, p);
35811 if ((len + p.place) !== data.length) {
35812 return false;
35813 }
35814 if (data[p.place++] !== 0x02) {
35815 return false;
35816 }
35817 var rlen = getLength(data, p);
35818 var r = data.slice(p.place, rlen + p.place);
35819 p.place += rlen;
35820 if (data[p.place++] !== 0x02) {
35821 return false;
35822 }
35823 var slen = getLength(data, p);
35824 if (data.length !== slen + p.place) {
35825 return false;
35826 }
35827 var s = data.slice(p.place, slen + p.place);
35828 if (r[0] === 0 && (r[1] & 0x80)) {
35829 r = r.slice(1);
35830 }
35831 if (s[0] === 0 && (s[1] & 0x80)) {
35832 s = s.slice(1);
35833 }
ab78acc6 35834
8b095871
IC
35835 this.r = new BN(r);
35836 this.s = new BN(s);
35837 this.recoveryParam = null;
ebd8d4e8 35838
8b095871
IC
35839 return true;
35840};
ab78acc6 35841
8b095871
IC
35842function constructLength(arr, len) {
35843 if (len < 0x80) {
35844 arr.push(len);
35845 return;
35846 }
35847 var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
35848 arr.push(octets | 0x80);
35849 while (--octets) {
35850 arr.push((len >>> (octets << 3)) & 0xff);
35851 }
35852 arr.push(len);
35853}
35854
35855Signature.prototype.toDER = function toDER(enc) {
35856 var r = this.r.toArray();
35857 var s = this.s.toArray();
35858
35859 // Pad values
35860 if (r[0] & 0x80)
35861 r = [ 0 ].concat(r);
35862 // Pad values
35863 if (s[0] & 0x80)
35864 s = [ 0 ].concat(s);
35865
35866 r = rmPadding(r);
35867 s = rmPadding(s);
35868
35869 while (!s[0] && !(s[1] & 0x80)) {
35870 s = s.slice(1);
35871 }
35872 var arr = [ 0x02 ];
35873 constructLength(arr, r.length);
35874 arr = arr.concat(r);
35875 arr.push(0x02);
35876 constructLength(arr, s.length);
35877 var backHalf = arr.concat(s);
35878 var res = [ 0x30 ];
35879 constructLength(res, backHalf.length);
35880 res = res.concat(backHalf);
35881 return utils.encode(res, enc);
35882};
ab78acc6 35883
8b095871
IC
35884},{"../../elliptic":39,"bn.js":33}],49:[function(require,module,exports){
35885'use strict';
ebd8d4e8 35886
8b095871
IC
35887var hash = require('hash.js');
35888var elliptic = require('../../elliptic');
35889var utils = elliptic.utils;
35890var assert = utils.assert;
35891var parseBytes = utils.parseBytes;
35892var KeyPair = require('./key');
35893var Signature = require('./signature');
ab78acc6 35894
8b095871
IC
35895function EDDSA(curve) {
35896 assert(curve === 'ed25519', 'only tested with ed25519 so far');
ebd8d4e8 35897
8b095871
IC
35898 if (!(this instanceof EDDSA))
35899 return new EDDSA(curve);
ab78acc6 35900
8b095871
IC
35901 var curve = elliptic.curves[curve].curve;
35902 this.curve = curve;
35903 this.g = curve.g;
35904 this.g.precompute(curve.n.bitLength() + 1);
ebd8d4e8 35905
8b095871
IC
35906 this.pointClass = curve.point().constructor;
35907 this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
35908 this.hash = hash.sha512;
35909}
ebd8d4e8 35910
8b095871 35911module.exports = EDDSA;
ebd8d4e8 35912
8b095871
IC
35913/**
35914* @param {Array|String} message - message bytes
35915* @param {Array|String|KeyPair} secret - secret bytes or a keypair
35916* @returns {Signature} - signature
35917*/
35918EDDSA.prototype.sign = function sign(message, secret) {
35919 message = parseBytes(message);
35920 var key = this.keyFromSecret(secret);
35921 var r = this.hashInt(key.messagePrefix(), message);
35922 var R = this.g.mul(r);
35923 var Rencoded = this.encodePoint(R);
35924 var s_ = this.hashInt(Rencoded, key.pubBytes(), message)
35925 .mul(key.priv());
35926 var S = r.add(s_).umod(this.curve.n);
35927 return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });
35928};
ebd8d4e8 35929
8b095871
IC
35930/**
35931* @param {Array} message - message bytes
35932* @param {Array|String|Signature} sig - sig bytes
35933* @param {Array|String|Point|KeyPair} pub - public key
35934* @returns {Boolean} - true if public key matches sig of message
35935*/
35936EDDSA.prototype.verify = function verify(message, sig, pub) {
35937 message = parseBytes(message);
35938 sig = this.makeSignature(sig);
35939 var key = this.keyFromPublic(pub);
35940 var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
35941 var SG = this.g.mul(sig.S());
35942 var RplusAh = sig.R().add(key.pub().mul(h));
35943 return RplusAh.eq(SG);
35944};
ebd8d4e8 35945
8b095871
IC
35946EDDSA.prototype.hashInt = function hashInt() {
35947 var hash = this.hash();
35948 for (var i = 0; i < arguments.length; i++)
35949 hash.update(arguments[i]);
35950 return utils.intFromLE(hash.digest()).umod(this.curve.n);
35951};
ebd8d4e8 35952
8b095871
IC
35953EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
35954 return KeyPair.fromPublic(this, pub);
35955};
ebd8d4e8 35956
8b095871
IC
35957EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
35958 return KeyPair.fromSecret(this, secret);
35959};
35960
35961EDDSA.prototype.makeSignature = function makeSignature(sig) {
35962 if (sig instanceof Signature)
35963 return sig;
35964 return new Signature(this, sig);
35965};
ebd8d4e8
IC
35966
35967/**
8b095871
IC
35968* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
35969*
35970* EDDSA defines methods for encoding and decoding points and integers. These are
35971* helper convenience methods, that pass along to utility functions implied
35972* parameters.
35973*
35974*/
35975EDDSA.prototype.encodePoint = function encodePoint(point) {
35976 var enc = point.getY().toArray('le', this.encodingLength);
35977 enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
35978 return enc;
35979};
ebd8d4e8 35980
8b095871
IC
35981EDDSA.prototype.decodePoint = function decodePoint(bytes) {
35982 bytes = utils.parseBytes(bytes);
ebd8d4e8 35983
8b095871
IC
35984 var lastIx = bytes.length - 1;
35985 var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
35986 var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
ebd8d4e8 35987
8b095871
IC
35988 var y = utils.intFromLE(normed);
35989 return this.curve.pointFromY(y, xIsOdd);
35990};
ebd8d4e8 35991
8b095871
IC
35992EDDSA.prototype.encodeInt = function encodeInt(num) {
35993 return num.toArray('le', this.encodingLength);
35994};
ebd8d4e8 35995
8b095871
IC
35996EDDSA.prototype.decodeInt = function decodeInt(bytes) {
35997 return utils.intFromLE(bytes);
35998};
ebd8d4e8 35999
8b095871
IC
36000EDDSA.prototype.isPoint = function isPoint(val) {
36001 return val instanceof this.pointClass;
36002};
ebd8d4e8 36003
8b095871
IC
36004},{"../../elliptic":39,"./key":50,"./signature":51,"hash.js":57}],50:[function(require,module,exports){
36005'use strict';
ebd8d4e8 36006
8b095871
IC
36007var elliptic = require('../../elliptic');
36008var utils = elliptic.utils;
36009var assert = utils.assert;
36010var parseBytes = utils.parseBytes;
36011var cachedProperty = utils.cachedProperty;
ebd8d4e8 36012
8b095871
IC
36013/**
36014* @param {EDDSA} eddsa - instance
36015* @param {Object} params - public/private key parameters
36016*
36017* @param {Array<Byte>} [params.secret] - secret seed bytes
36018* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
36019* @param {Array<Byte>} [params.pub] - public key point encoded as bytes
36020*
36021*/
36022function KeyPair(eddsa, params) {
36023 this.eddsa = eddsa;
36024 this._secret = parseBytes(params.secret);
36025 if (eddsa.isPoint(params.pub))
36026 this._pub = params.pub;
36027 else
36028 this._pubBytes = parseBytes(params.pub);
ebd8d4e8
IC
36029}
36030
8b095871
IC
36031KeyPair.fromPublic = function fromPublic(eddsa, pub) {
36032 if (pub instanceof KeyPair)
36033 return pub;
36034 return new KeyPair(eddsa, { pub: pub });
36035};
ebd8d4e8 36036
8b095871
IC
36037KeyPair.fromSecret = function fromSecret(eddsa, secret) {
36038 if (secret instanceof KeyPair)
36039 return secret;
36040 return new KeyPair(eddsa, { secret: secret });
36041};
ebd8d4e8 36042
8b095871
IC
36043KeyPair.prototype.secret = function secret() {
36044 return this._secret;
36045};
ebd8d4e8 36046
8b095871
IC
36047cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
36048 return this.eddsa.encodePoint(this.pub());
36049});
ebd8d4e8 36050
8b095871
IC
36051cachedProperty(KeyPair, 'pub', function pub() {
36052 if (this._pubBytes)
36053 return this.eddsa.decodePoint(this._pubBytes);
36054 return this.eddsa.g.mul(this.priv());
36055});
ebd8d4e8 36056
8b095871
IC
36057cachedProperty(KeyPair, 'privBytes', function privBytes() {
36058 var eddsa = this.eddsa;
36059 var hash = this.hash();
36060 var lastIx = eddsa.encodingLength - 1;
ebd8d4e8 36061
8b095871
IC
36062 var a = hash.slice(0, eddsa.encodingLength);
36063 a[0] &= 248;
36064 a[lastIx] &= 127;
36065 a[lastIx] |= 64;
ebd8d4e8 36066
8b095871
IC
36067 return a;
36068});
ebd8d4e8 36069
8b095871
IC
36070cachedProperty(KeyPair, 'priv', function priv() {
36071 return this.eddsa.decodeInt(this.privBytes());
36072});
ebd8d4e8 36073
8b095871
IC
36074cachedProperty(KeyPair, 'hash', function hash() {
36075 return this.eddsa.hash().update(this.secret()).digest();
36076});
ebd8d4e8 36077
8b095871
IC
36078cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
36079 return this.hash().slice(this.eddsa.encodingLength);
36080});
ebd8d4e8 36081
8b095871
IC
36082KeyPair.prototype.sign = function sign(message) {
36083 assert(this._secret, 'KeyPair can only verify');
36084 return this.eddsa.sign(message, this);
36085};
ebd8d4e8 36086
8b095871
IC
36087KeyPair.prototype.verify = function verify(message, sig) {
36088 return this.eddsa.verify(message, sig, this);
36089};
ebd8d4e8 36090
8b095871
IC
36091KeyPair.prototype.getSecret = function getSecret(enc) {
36092 assert(this._secret, 'KeyPair is public only');
36093 return utils.encode(this.secret(), enc);
36094};
ebd8d4e8 36095
8b095871
IC
36096KeyPair.prototype.getPublic = function getPublic(enc) {
36097 return utils.encode(this.pubBytes(), enc);
36098};
ebd8d4e8 36099
8b095871 36100module.exports = KeyPair;
ebd8d4e8 36101
8b095871
IC
36102},{"../../elliptic":39}],51:[function(require,module,exports){
36103'use strict';
ebd8d4e8 36104
8b095871
IC
36105var BN = require('bn.js');
36106var elliptic = require('../../elliptic');
36107var utils = elliptic.utils;
36108var assert = utils.assert;
36109var cachedProperty = utils.cachedProperty;
36110var parseBytes = utils.parseBytes;
ebd8d4e8 36111
8b095871
IC
36112/**
36113* @param {EDDSA} eddsa - eddsa instance
36114* @param {Array<Bytes>|Object} sig -
36115* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
36116* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
36117* @param {Array<Bytes>} [sig.Rencoded] - R point encoded
36118* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
36119*/
36120function Signature(eddsa, sig) {
36121 this.eddsa = eddsa;
ebd8d4e8 36122
8b095871
IC
36123 if (typeof sig !== 'object')
36124 sig = parseBytes(sig);
ebd8d4e8 36125
8b095871
IC
36126 if (Array.isArray(sig)) {
36127 sig = {
36128 R: sig.slice(0, eddsa.encodingLength),
36129 S: sig.slice(eddsa.encodingLength)
36130 };
ab78acc6 36131 }
ebd8d4e8 36132
8b095871 36133 assert(sig.R && sig.S, 'Signature without R or S');
ebd8d4e8 36134
8b095871
IC
36135 if (eddsa.isPoint(sig.R))
36136 this._R = sig.R;
36137 if (sig.S instanceof BN)
36138 this._S = sig.S;
36139
36140 this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
36141 this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
ebd8d4e8
IC
36142}
36143
8b095871
IC
36144cachedProperty(Signature, 'S', function S() {
36145 return this.eddsa.decodeInt(this.Sencoded());
36146});
ab78acc6 36147
8b095871
IC
36148cachedProperty(Signature, 'R', function R() {
36149 return this.eddsa.decodePoint(this.Rencoded());
36150});
ebd8d4e8 36151
8b095871
IC
36152cachedProperty(Signature, 'Rencoded', function Rencoded() {
36153 return this.eddsa.encodePoint(this.R());
36154});
ebd8d4e8 36155
8b095871
IC
36156cachedProperty(Signature, 'Sencoded', function Sencoded() {
36157 return this.eddsa.encodeInt(this.S());
36158});
ebd8d4e8 36159
8b095871
IC
36160Signature.prototype.toBytes = function toBytes() {
36161 return this.Rencoded().concat(this.Sencoded());
36162};
ebd8d4e8 36163
8b095871
IC
36164Signature.prototype.toHex = function toHex() {
36165 return utils.encode(this.toBytes(), 'hex').toUpperCase();
36166};
ebd8d4e8 36167
8b095871 36168module.exports = Signature;
ebd8d4e8 36169
8b095871
IC
36170},{"../../elliptic":39,"bn.js":33}],52:[function(require,module,exports){
36171'use strict';
ebd8d4e8 36172
8b095871
IC
36173var hash = require('hash.js');
36174var elliptic = require('../elliptic');
36175var utils = elliptic.utils;
36176var assert = utils.assert;
ebd8d4e8 36177
8b095871
IC
36178function HmacDRBG(options) {
36179 if (!(this instanceof HmacDRBG))
36180 return new HmacDRBG(options);
36181 this.hash = options.hash;
36182 this.predResist = !!options.predResist;
ab78acc6 36183
8b095871
IC
36184 this.outLen = this.hash.outSize;
36185 this.minEntropy = options.minEntropy || this.hash.hmacStrength;
ab78acc6 36186
8b095871
IC
36187 this.reseed = null;
36188 this.reseedInterval = null;
36189 this.K = null;
36190 this.V = null;
ebd8d4e8 36191
8b095871
IC
36192 var entropy = utils.toArray(options.entropy, options.entropyEnc);
36193 var nonce = utils.toArray(options.nonce, options.nonceEnc);
36194 var pers = utils.toArray(options.pers, options.persEnc);
36195 assert(entropy.length >= (this.minEntropy / 8),
36196 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
36197 this._init(entropy, nonce, pers);
ebd8d4e8 36198}
8b095871 36199module.exports = HmacDRBG;
ebd8d4e8 36200
8b095871
IC
36201HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
36202 var seed = entropy.concat(nonce).concat(pers);
ebd8d4e8 36203
8b095871
IC
36204 this.K = new Array(this.outLen / 8);
36205 this.V = new Array(this.outLen / 8);
36206 for (var i = 0; i < this.V.length; i++) {
36207 this.K[i] = 0x00;
36208 this.V[i] = 0x01;
36209 }
ebd8d4e8 36210
8b095871
IC
36211 this._update(seed);
36212 this.reseed = 1;
36213 this.reseedInterval = 0x1000000000000; // 2^48
36214};
ebd8d4e8 36215
8b095871
IC
36216HmacDRBG.prototype._hmac = function hmac() {
36217 return new hash.hmac(this.hash, this.K);
36218};
ebd8d4e8 36219
8b095871
IC
36220HmacDRBG.prototype._update = function update(seed) {
36221 var kmac = this._hmac()
36222 .update(this.V)
36223 .update([ 0x00 ]);
36224 if (seed)
36225 kmac = kmac.update(seed);
36226 this.K = kmac.digest();
36227 this.V = this._hmac().update(this.V).digest();
36228 if (!seed)
36229 return;
36230
36231 this.K = this._hmac()
36232 .update(this.V)
36233 .update([ 0x01 ])
36234 .update(seed)
36235 .digest();
36236 this.V = this._hmac().update(this.V).digest();
36237};
36238
36239HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
36240 // Optional entropy enc
36241 if (typeof entropyEnc !== 'string') {
36242 addEnc = add;
36243 add = entropyEnc;
36244 entropyEnc = null;
ebd8d4e8 36245 }
ebd8d4e8 36246
8b095871
IC
36247 entropy = utils.toBuffer(entropy, entropyEnc);
36248 add = utils.toBuffer(add, addEnc);
ebd8d4e8 36249
8b095871
IC
36250 assert(entropy.length >= (this.minEntropy / 8),
36251 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
ebd8d4e8 36252
8b095871
IC
36253 this._update(entropy.concat(add || []));
36254 this.reseed = 1;
36255};
ebd8d4e8 36256
8b095871
IC
36257HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
36258 if (this.reseed > this.reseedInterval)
36259 throw new Error('Reseed is required');
ebd8d4e8 36260
8b095871
IC
36261 // Optional encoding
36262 if (typeof enc !== 'string') {
36263 addEnc = add;
36264 add = enc;
36265 enc = null;
36266 }
ebd8d4e8 36267
8b095871
IC
36268 // Optional additional data
36269 if (add) {
36270 add = utils.toArray(add, addEnc);
36271 this._update(add);
ebd8d4e8
IC
36272 }
36273
8b095871
IC
36274 var temp = [];
36275 while (temp.length < len) {
36276 this.V = this._hmac().update(this.V).digest();
36277 temp = temp.concat(this.V);
ebd8d4e8
IC
36278 }
36279
8b095871
IC
36280 var res = temp.slice(0, len);
36281 this._update(add);
36282 this.reseed++;
36283 return utils.encode(res, enc);
36284};
ebd8d4e8 36285
8b095871
IC
36286},{"../elliptic":39,"hash.js":57}],53:[function(require,module,exports){
36287module.exports = {
36288 doubles: {
36289 step: 4,
36290 points: [
36291 [
36292 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',
36293 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'
36294 ],
36295 [
36296 '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',
36297 '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'
36298 ],
36299 [
36300 '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',
36301 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'
36302 ],
36303 [
36304 '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',
36305 '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'
36306 ],
36307 [
36308 '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',
36309 '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'
36310 ],
36311 [
36312 '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',
36313 '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'
36314 ],
36315 [
36316 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',
36317 '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'
36318 ],
36319 [
36320 '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',
36321 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'
36322 ],
36323 [
36324 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',
36325 '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'
36326 ],
36327 [
36328 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',
36329 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'
36330 ],
36331 [
36332 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',
36333 '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'
36334 ],
36335 [
36336 '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',
36337 '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'
36338 ],
36339 [
36340 '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',
36341 '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'
36342 ],
36343 [
36344 '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',
36345 '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'
36346 ],
36347 [
36348 '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',
36349 '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'
36350 ],
36351 [
36352 '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',
36353 '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'
36354 ],
36355 [
36356 '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',
36357 '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'
36358 ],
36359 [
36360 '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',
36361 '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'
36362 ],
36363 [
36364 '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',
36365 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'
36366 ],
36367 [
36368 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',
36369 '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'
36370 ],
36371 [
36372 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',
36373 '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'
36374 ],
36375 [
36376 '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',
36377 '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'
36378 ],
36379 [
36380 '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',
36381 '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'
36382 ],
36383 [
36384 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',
36385 '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'
36386 ],
36387 [
36388 '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',
36389 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'
36390 ],
36391 [
36392 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',
36393 '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'
36394 ],
36395 [
36396 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',
36397 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'
36398 ],
36399 [
36400 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',
36401 '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'
36402 ],
36403 [
36404 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',
36405 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'
36406 ],
36407 [
36408 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',
36409 '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'
36410 ],
36411 [
36412 '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',
36413 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'
36414 ],
36415 [
36416 '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',
36417 '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'
36418 ],
36419 [
36420 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',
36421 '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'
36422 ],
36423 [
36424 '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',
36425 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'
36426 ],
36427 [
36428 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',
36429 '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'
36430 ],
36431 [
36432 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',
36433 '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'
36434 ],
36435 [
36436 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',
36437 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'
36438 ],
36439 [
36440 '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',
36441 '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'
36442 ],
36443 [
36444 '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',
36445 '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'
36446 ],
36447 [
36448 '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',
36449 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'
36450 ],
36451 [
36452 '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',
36453 '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'
36454 ],
36455 [
36456 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',
36457 '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'
36458 ],
36459 [
36460 '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',
36461 '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'
36462 ],
36463 [
36464 '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',
36465 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'
36466 ],
36467 [
36468 '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',
36469 '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'
36470 ],
36471 [
36472 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',
36473 '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'
36474 ],
36475 [
36476 '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',
36477 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'
36478 ],
36479 [
36480 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',
36481 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'
36482 ],
36483 [
36484 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',
36485 '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'
36486 ],
36487 [
36488 '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',
36489 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'
36490 ],
36491 [
36492 '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',
36493 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'
36494 ],
36495 [
36496 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',
36497 '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'
36498 ],
36499 [
36500 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',
36501 '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'
36502 ],
36503 [
36504 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',
36505 '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'
36506 ],
36507 [
36508 '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',
36509 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'
36510 ],
36511 [
36512 '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',
36513 '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'
36514 ],
36515 [
36516 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',
36517 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'
36518 ],
36519 [
36520 '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',
36521 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'
36522 ],
36523 [
36524 '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',
36525 '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'
36526 ],
36527 [
36528 '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',
36529 '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'
36530 ],
36531 [
36532 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',
36533 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'
36534 ],
36535 [
36536 '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',
36537 '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'
36538 ],
36539 [
36540 '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',
36541 '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'
36542 ],
36543 [
36544 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',
36545 '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'
36546 ],
36547 [
36548 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',
36549 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'
36550 ]
36551 ]
36552 },
36553 naf: {
36554 wnd: 7,
36555 points: [
36556 [
36557 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
36558 '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'
36559 ],
36560 [
36561 '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',
36562 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'
36563 ],
36564 [
36565 '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',
36566 '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'
36567 ],
36568 [
36569 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',
36570 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'
36571 ],
36572 [
36573 '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',
36574 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'
36575 ],
36576 [
36577 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',
36578 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'
36579 ],
36580 [
36581 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',
36582 '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'
36583 ],
36584 [
36585 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',
36586 '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'
36587 ],
36588 [
36589 '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',
36590 '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'
36591 ],
36592 [
36593 '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',
36594 '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'
36595 ],
36596 [
36597 '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',
36598 '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'
36599 ],
36600 [
36601 '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',
36602 '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'
36603 ],
36604 [
36605 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',
36606 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'
36607 ],
36608 [
36609 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',
36610 '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'
36611 ],
36612 [
36613 '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',
36614 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'
36615 ],
36616 [
36617 '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',
36618 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'
36619 ],
36620 [
36621 '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',
36622 '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'
36623 ],
36624 [
36625 '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',
36626 '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'
36627 ],
36628 [
36629 '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',
36630 '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'
36631 ],
36632 [
36633 '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',
36634 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'
36635 ],
36636 [
36637 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',
36638 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'
36639 ],
36640 [
36641 '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',
36642 '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'
36643 ],
36644 [
36645 '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',
36646 '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'
36647 ],
36648 [
36649 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',
36650 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'
36651 ],
36652 [
36653 '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',
36654 '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'
36655 ],
36656 [
36657 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',
36658 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'
36659 ],
36660 [
36661 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',
36662 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'
36663 ],
36664 [
36665 '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',
36666 '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'
36667 ],
36668 [
36669 '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',
36670 '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'
36671 ],
36672 [
36673 '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',
36674 '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'
36675 ],
36676 [
36677 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',
36678 '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'
36679 ],
36680 [
36681 '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',
36682 '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'
36683 ],
36684 [
36685 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',
36686 '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'
36687 ],
36688 [
36689 '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',
36690 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'
36691 ],
36692 [
36693 '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',
36694 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'
36695 ],
36696 [
36697 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',
36698 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'
36699 ],
36700 [
36701 '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',
36702 '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'
36703 ],
36704 [
36705 '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',
36706 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'
36707 ],
36708 [
36709 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',
36710 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'
36711 ],
36712 [
36713 '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',
36714 '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'
36715 ],
36716 [
36717 '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',
36718 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'
36719 ],
36720 [
36721 '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',
36722 '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'
36723 ],
36724 [
36725 '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',
36726 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'
36727 ],
36728 [
36729 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',
36730 '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'
36731 ],
36732 [
36733 '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',
36734 '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'
36735 ],
36736 [
36737 '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',
36738 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'
36739 ],
36740 [
36741 '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',
36742 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'
36743 ],
36744 [
36745 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',
36746 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'
36747 ],
36748 [
36749 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',
36750 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'
36751 ],
36752 [
36753 '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',
36754 '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'
36755 ],
36756 [
36757 '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',
36758 '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'
36759 ],
36760 [
36761 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',
36762 '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'
36763 ],
36764 [
36765 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',
36766 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'
36767 ],
36768 [
36769 '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',
36770 '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'
36771 ],
36772 [
36773 '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',
36774 '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'
36775 ],
36776 [
36777 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',
36778 '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'
36779 ],
36780 [
36781 '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',
36782 '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'
36783 ],
36784 [
36785 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',
36786 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'
36787 ],
36788 [
36789 '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',
36790 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'
36791 ],
36792 [
36793 '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',
36794 '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'
36795 ],
36796 [
36797 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',
36798 '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'
36799 ],
36800 [
36801 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',
36802 '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'
36803 ],
36804 [
36805 '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',
36806 '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'
36807 ],
36808 [
36809 '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',
36810 '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'
36811 ],
36812 [
36813 '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',
36814 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'
36815 ],
36816 [
36817 '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',
36818 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'
36819 ],
36820 [
36821 '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',
36822 '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'
36823 ],
36824 [
36825 '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',
36826 '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'
36827 ],
36828 [
36829 '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',
36830 '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'
36831 ],
36832 [
36833 '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',
36834 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'
36835 ],
36836 [
36837 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',
36838 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'
36839 ],
36840 [
36841 '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',
36842 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'
36843 ],
36844 [
36845 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',
36846 '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'
36847 ],
36848 [
36849 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',
36850 '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'
36851 ],
36852 [
36853 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',
36854 '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'
36855 ],
36856 [
36857 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',
36858 '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'
36859 ],
36860 [
36861 '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',
36862 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'
36863 ],
36864 [
36865 '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',
36866 '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'
36867 ],
36868 [
36869 '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',
36870 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'
36871 ],
36872 [
36873 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',
36874 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'
36875 ],
36876 [
36877 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',
36878 '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'
36879 ],
36880 [
36881 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',
36882 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'
36883 ],
36884 [
36885 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',
36886 '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'
36887 ],
36888 [
36889 '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',
36890 '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'
36891 ],
36892 [
36893 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',
36894 '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'
36895 ],
36896 [
36897 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',
36898 '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'
36899 ],
36900 [
36901 '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',
36902 '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'
36903 ],
36904 [
36905 '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',
36906 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'
36907 ],
36908 [
36909 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',
36910 '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'
36911 ],
36912 [
36913 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',
36914 '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'
36915 ],
36916 [
36917 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',
36918 '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'
36919 ],
36920 [
36921 '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',
36922 '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'
36923 ],
36924 [
36925 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',
36926 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'
36927 ],
36928 [
36929 '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',
36930 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'
36931 ],
36932 [
36933 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',
36934 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'
36935 ],
36936 [
36937 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',
36938 '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'
36939 ],
36940 [
36941 '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',
36942 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'
36943 ],
36944 [
36945 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',
36946 '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'
36947 ],
36948 [
36949 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',
36950 '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'
36951 ],
36952 [
36953 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',
36954 '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'
36955 ],
36956 [
36957 '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',
36958 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'
36959 ],
36960 [
36961 '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',
36962 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'
36963 ],
36964 [
36965 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',
36966 '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'
36967 ],
36968 [
36969 '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',
36970 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'
36971 ],
36972 [
36973 '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',
36974 '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'
36975 ],
36976 [
36977 '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',
36978 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'
36979 ],
36980 [
36981 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',
36982 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'
36983 ],
36984 [
36985 '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',
36986 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'
36987 ],
36988 [
36989 '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',
36990 '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'
36991 ],
36992 [
36993 '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',
36994 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'
36995 ],
36996 [
36997 '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',
36998 '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'
36999 ],
37000 [
37001 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',
37002 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'
37003 ],
37004 [
37005 '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',
37006 '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'
37007 ],
37008 [
37009 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',
37010 '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'
37011 ],
37012 [
37013 '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',
37014 '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'
37015 ],
37016 [
37017 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',
37018 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'
37019 ],
37020 [
37021 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',
37022 '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'
37023 ],
37024 [
37025 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',
37026 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'
37027 ],
37028 [
37029 '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',
37030 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'
37031 ],
37032 [
37033 '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',
37034 '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'
37035 ],
37036 [
37037 '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',
37038 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'
37039 ],
37040 [
37041 '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',
37042 '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'
37043 ],
37044 [
37045 '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',
37046 '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'
37047 ],
37048 [
37049 '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',
37050 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'
37051 ],
37052 [
37053 '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',
37054 '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'
37055 ],
37056 [
37057 '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',
37058 '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'
37059 ],
37060 [
37061 '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',
37062 '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'
37063 ]
37064 ]
37065 }
37066};
ebd8d4e8 37067
8b095871
IC
37068},{}],54:[function(require,module,exports){
37069'use strict';
ebd8d4e8 37070
8b095871
IC
37071var utils = exports;
37072var BN = require('bn.js');
ebd8d4e8 37073
8b095871
IC
37074utils.assert = function assert(val, msg) {
37075 if (!val)
37076 throw new Error(msg || 'Assertion failed');
37077};
ebd8d4e8 37078
8b095871
IC
37079function toArray(msg, enc) {
37080 if (Array.isArray(msg))
37081 return msg.slice();
37082 if (!msg)
37083 return [];
37084 var res = [];
37085 if (typeof msg !== 'string') {
37086 for (var i = 0; i < msg.length; i++)
37087 res[i] = msg[i] | 0;
37088 return res;
37089 }
37090 if (!enc) {
37091 for (var i = 0; i < msg.length; i++) {
37092 var c = msg.charCodeAt(i);
37093 var hi = c >> 8;
37094 var lo = c & 0xff;
37095 if (hi)
37096 res.push(hi, lo);
37097 else
37098 res.push(lo);
37099 }
37100 } else if (enc === 'hex') {
37101 msg = msg.replace(/[^a-z0-9]+/ig, '');
37102 if (msg.length % 2 !== 0)
37103 msg = '0' + msg;
37104 for (var i = 0; i < msg.length; i += 2)
37105 res.push(parseInt(msg[i] + msg[i + 1], 16));
ebd8d4e8 37106 }
8b095871 37107 return res;
ebd8d4e8 37108}
8b095871 37109utils.toArray = toArray;
ebd8d4e8 37110
8b095871
IC
37111function zero2(word) {
37112 if (word.length === 1)
37113 return '0' + word;
37114 else
37115 return word;
37116}
37117utils.zero2 = zero2;
ab78acc6 37118
8b095871
IC
37119function toHex(msg) {
37120 var res = '';
37121 for (var i = 0; i < msg.length; i++)
37122 res += zero2(msg[i].toString(16));
37123 return res;
37124}
37125utils.toHex = toHex;
ebd8d4e8 37126
8b095871
IC
37127utils.encode = function encode(arr, enc) {
37128 if (enc === 'hex')
37129 return toHex(arr);
37130 else
37131 return arr;
37132};
ebd8d4e8 37133
8b095871
IC
37134// Represent num in a w-NAF form
37135function getNAF(num, w) {
37136 var naf = [];
37137 var ws = 1 << (w + 1);
37138 var k = num.clone();
37139 while (k.cmpn(1) >= 0) {
37140 var z;
37141 if (k.isOdd()) {
37142 var mod = k.andln(ws - 1);
37143 if (mod > (ws >> 1) - 1)
37144 z = (ws >> 1) - mod;
37145 else
37146 z = mod;
37147 k.isubn(z);
37148 } else {
37149 z = 0;
37150 }
37151 naf.push(z);
37152
37153 // Optimization, shift by word if possible
37154 var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;
37155 for (var i = 1; i < shift; i++)
37156 naf.push(0);
37157 k.iushrn(shift);
37158 }
37159
37160 return naf;
37161}
37162utils.getNAF = getNAF;
37163
37164// Represent k1, k2 in a Joint Sparse Form
37165function getJSF(k1, k2) {
37166 var jsf = [
37167 [],
37168 []
37169 ];
37170
37171 k1 = k1.clone();
37172 k2 = k2.clone();
37173 var d1 = 0;
37174 var d2 = 0;
37175 while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
37176
37177 // First phase
37178 var m14 = (k1.andln(3) + d1) & 3;
37179 var m24 = (k2.andln(3) + d2) & 3;
37180 if (m14 === 3)
37181 m14 = -1;
37182 if (m24 === 3)
37183 m24 = -1;
37184 var u1;
37185 if ((m14 & 1) === 0) {
37186 u1 = 0;
37187 } else {
37188 var m8 = (k1.andln(7) + d1) & 7;
37189 if ((m8 === 3 || m8 === 5) && m24 === 2)
37190 u1 = -m14;
37191 else
37192 u1 = m14;
37193 }
37194 jsf[0].push(u1);
ebd8d4e8 37195
8b095871
IC
37196 var u2;
37197 if ((m24 & 1) === 0) {
37198 u2 = 0;
37199 } else {
37200 var m8 = (k2.andln(7) + d2) & 7;
37201 if ((m8 === 3 || m8 === 5) && m14 === 2)
37202 u2 = -m24;
37203 else
37204 u2 = m24;
37205 }
37206 jsf[1].push(u2);
ebd8d4e8 37207
8b095871
IC
37208 // Second phase
37209 if (2 * d1 === u1 + 1)
37210 d1 = 1 - d1;
37211 if (2 * d2 === u2 + 1)
37212 d2 = 1 - d2;
37213 k1.iushrn(1);
37214 k2.iushrn(1);
37215 }
ebd8d4e8 37216
8b095871
IC
37217 return jsf;
37218}
37219utils.getJSF = getJSF;
ab78acc6 37220
8b095871
IC
37221function cachedProperty(obj, name, computer) {
37222 var key = '_' + name;
37223 obj.prototype[name] = function cachedProperty() {
37224 return this[key] !== undefined ? this[key] :
37225 this[key] = computer.call(this);
37226 };
37227}
37228utils.cachedProperty = cachedProperty;
ebd8d4e8 37229
8b095871
IC
37230function parseBytes(bytes) {
37231 return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :
37232 bytes;
37233}
37234utils.parseBytes = parseBytes;
ebd8d4e8 37235
8b095871
IC
37236function intFromLE(bytes) {
37237 return new BN(bytes, 'hex', 'le');
37238}
37239utils.intFromLE = intFromLE;
ebd8d4e8 37240
8b095871
IC
37241
37242},{"bn.js":33}],55:[function(require,module,exports){
37243module.exports={
37244 "_args": [
37245 [
37246 {
37247 "raw": "elliptic@^6.2.3",
37248 "scope": null,
37249 "escapedName": "elliptic",
37250 "name": "elliptic",
37251 "rawSpec": "^6.2.3",
37252 "spec": ">=6.2.3 <7.0.0",
37253 "type": "range"
37254 },
37255 "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1"
37256 ]
37257 ],
37258 "_from": "elliptic@>=6.2.3 <7.0.0",
37259 "_id": "elliptic@6.3.3",
37260 "_inCache": true,
37261 "_location": "/elliptic",
37262 "_nodeVersion": "7.0.0",
37263 "_npmOperationalInternal": {
37264 "host": "packages-18-east.internal.npmjs.com",
37265 "tmp": "tmp/elliptic-6.3.3.tgz_1486422837740_0.10658654430881143"
37266 },
37267 "_npmUser": {
37268 "name": "indutny",
37269 "email": "fedor@indutny.com"
37270 },
37271 "_npmVersion": "3.10.8",
37272 "_phantomChildren": {},
37273 "_requested": {
37274 "raw": "elliptic@^6.2.3",
37275 "scope": null,
37276 "escapedName": "elliptic",
37277 "name": "elliptic",
37278 "rawSpec": "^6.2.3",
37279 "spec": ">=6.2.3 <7.0.0",
37280 "type": "range"
37281 },
37282 "_requiredBy": [
37283 "/browserify-sign",
37284 "/create-ecdh",
37285 "/secp256k1"
37286 ],
37287 "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz",
37288 "_shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
37289 "_shrinkwrap": null,
37290 "_spec": "elliptic@^6.2.3",
37291 "_where": "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1",
37292 "author": {
37293 "name": "Fedor Indutny",
37294 "email": "fedor@indutny.com"
37295 },
37296 "bugs": {
37297 "url": "https://github.com/indutny/elliptic/issues"
37298 },
37299 "dependencies": {
37300 "bn.js": "^4.4.0",
37301 "brorand": "^1.0.1",
37302 "hash.js": "^1.0.0",
37303 "inherits": "^2.0.1"
37304 },
37305 "description": "EC cryptography",
37306 "devDependencies": {
37307 "brfs": "^1.4.3",
37308 "coveralls": "^2.11.3",
37309 "grunt": "^0.4.5",
37310 "grunt-browserify": "^5.0.0",
37311 "grunt-cli": "^1.2.0",
37312 "grunt-contrib-connect": "^1.0.0",
37313 "grunt-contrib-copy": "^1.0.0",
37314 "grunt-contrib-uglify": "^1.0.1",
37315 "grunt-mocha-istanbul": "^3.0.1",
37316 "grunt-saucelabs": "^8.6.2",
37317 "istanbul": "^0.4.2",
37318 "jscs": "^2.9.0",
37319 "jshint": "^2.6.0",
37320 "mocha": "^2.1.0"
37321 },
37322 "directories": {},
37323 "dist": {
37324 "shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
37325 "tarball": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz"
37326 },
37327 "files": [
37328 "lib"
37329 ],
37330 "gitHead": "63aee8d697e9b7fac37ece24222029117a890a7e",
37331 "homepage": "https://github.com/indutny/elliptic",
37332 "keywords": [
37333 "EC",
37334 "Elliptic",
37335 "curve",
37336 "Cryptography"
37337 ],
37338 "license": "MIT",
37339 "main": "lib/elliptic.js",
37340 "maintainers": [
37341 {
37342 "name": "indutny",
37343 "email": "fedor@indutny.com"
37344 }
37345 ],
37346 "name": "elliptic",
37347 "optionalDependencies": {},
37348 "readme": "ERROR: No README data found!",
37349 "repository": {
37350 "type": "git",
37351 "url": "git+ssh://git@github.com/indutny/elliptic.git"
37352 },
37353 "scripts": {
37354 "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
37355 "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
37356 "lint": "npm run jscs && npm run jshint",
37357 "test": "npm run lint && npm run unit",
37358 "unit": "istanbul test _mocha --reporter=spec test/index.js",
37359 "version": "grunt dist && git add dist/"
37360 },
37361 "version": "6.3.3"
ebd8d4e8
IC
37362}
37363
8b095871
IC
37364},{}],56:[function(require,module,exports){
37365(function (Buffer){
37366'use strict';
ab78acc6 37367
8b095871
IC
37368var isHexPrefixed = require('is-hex-prefixed');
37369var stripHexPrefix = require('strip-hex-prefix');
ebd8d4e8 37370
8b095871
IC
37371/**
37372 * Pads a `String` to have an even length
37373 * @param {String} value
37374 * @return {String} output
37375 */
37376function padToEven(value) {
37377 var a = value; // eslint-disable-line
37378
37379 if (typeof a !== 'string') {
37380 throw new Error('[ethjs-util] while padding to even, value must be string, is currently ' + typeof a + ', while padToEven.');
37381 }
37382
37383 if (a.length % 2) {
37384 a = '0' + a;
37385 }
37386
37387 return a;
ebd8d4e8
IC
37388}
37389
8b095871
IC
37390/**
37391 * Converts a `Number` into a hex `String`
37392 * @param {Number} i
37393 * @return {String}
37394 */
37395function intToHex(i) {
37396 var hex = i.toString(16); // eslint-disable-line
ebd8d4e8 37397
8b095871
IC
37398 return '0x' + padToEven(hex);
37399}
ab78acc6 37400
8b095871
IC
37401/**
37402 * Converts an `Number` to a `Buffer`
37403 * @param {Number} i
37404 * @return {Buffer}
37405 */
37406function intToBuffer(i) {
37407 var hex = intToHex(i);
ab78acc6 37408
8b095871
IC
37409 return new Buffer(hex.slice(2), 'hex');
37410}
ebd8d4e8 37411
8b095871
IC
37412/**
37413 * Get the binary size of a string
37414 * @param {String} str
37415 * @return {Number}
37416 */
37417function getBinarySize(str) {
37418 if (typeof str !== 'string') {
37419 throw new Error('[ethjs-util] while getting binary size, method getBinarySize requires input \'str\' to be type String, got \'' + typeof str + '\'.');
37420 }
ebd8d4e8 37421
8b095871
IC
37422 return Buffer.byteLength(str, 'utf8');
37423}
37424
37425/**
37426 * Returns TRUE if the first specified array contains all elements
37427 * from the second one. FALSE otherwise.
37428 *
37429 * @param {array} superset
37430 * @param {array} subset
37431 *
37432 * @returns {boolean}
37433 */
37434function arrayContainsArray(superset, subset, some) {
37435 if (Array.isArray(superset) !== true) {
37436 throw new Error('[ethjs-util] method arrayContainsArray requires input \'superset\' to be an array got type \'' + typeof superset + '\'');
37437 }
37438 if (Array.isArray(subset) !== true) {
37439 throw new Error('[ethjs-util] method arrayContainsArray requires input \'subset\' to be an array got type \'' + typeof subset + '\'');
ebd8d4e8
IC
37440 }
37441
8b095871
IC
37442 return subset[Boolean(some) && 'some' || 'every'](function (value) {
37443 return superset.indexOf(value) >= 0;
37444 });
ebd8d4e8
IC
37445}
37446
8b095871
IC
37447/**
37448 * Should be called to get utf8 from it's hex representation
37449 *
37450 * @method toUtf8
37451 * @param {String} string in hex
37452 * @returns {String} ascii string representation of hex value
37453 */
37454function toUtf8(hex) {
37455 var bufferValue = new Buffer(padToEven(stripHexPrefix(hex).replace(/^0+|0+$/g, '')), 'hex');
ebd8d4e8 37456
8b095871
IC
37457 return bufferValue.toString('utf8');
37458}
ab78acc6 37459
8b095871
IC
37460/**
37461 * Should be called to get ascii from it's hex representation
37462 *
37463 * @method toAscii
37464 * @param {String} string in hex
37465 * @returns {String} ascii string representation of hex value
37466 */
37467function toAscii(hex) {
37468 var str = ''; // eslint-disable-line
37469 var i = 0,
37470 l = hex.length; // eslint-disable-line
ebd8d4e8 37471
8b095871
IC
37472 if (hex.substring(0, 2) === '0x') {
37473 i = 2;
37474 }
ebd8d4e8 37475
8b095871
IC
37476 for (; i < l; i += 2) {
37477 var code = parseInt(hex.substr(i, 2), 16);
37478 str += String.fromCharCode(code);
ebd8d4e8 37479 }
8b095871
IC
37480
37481 return str;
ebd8d4e8
IC
37482}
37483
8b095871
IC
37484/**
37485 * Should be called to get hex representation (prefixed by 0x) of utf8 string
37486 *
37487 * @method fromUtf8
37488 * @param {String} string
37489 * @param {Number} optional padding
37490 * @returns {String} hex representation of input string
37491 */
37492function fromUtf8(stringValue) {
37493 var str = new Buffer(stringValue, 'utf8');
ebd8d4e8 37494
8b095871
IC
37495 return '0x' + padToEven(str.toString('hex')).replace(/^0+|0+$/g, '');
37496}
ab78acc6 37497
8b095871
IC
37498/**
37499 * Should be called to get hex representation (prefixed by 0x) of ascii string
37500 *
37501 * @method fromAscii
37502 * @param {String} string
37503 * @param {Number} optional padding
37504 * @returns {String} hex representation of input string
37505 */
37506function fromAscii(stringValue) {
37507 var hex = ''; // eslint-disable-line
37508 for (var i = 0; i < stringValue.length; i++) {
37509 // eslint-disable-line
37510 var code = stringValue.charCodeAt(i);
37511 var n = code.toString(16);
37512 hex += n.length < 2 ? '0' + n : n;
37513 }
ab78acc6 37514
8b095871
IC
37515 return '0x' + hex;
37516}
ebd8d4e8 37517
8b095871
IC
37518/**
37519 * getKeys([{a: 1, b: 2}, {a: 3, b: 4}], 'a') => [1, 3]
37520 *
37521 * @method getKeys get specific key from inner object array of objects
37522 * @param {String} params
37523 * @param {String} key
37524 * @param {Boolean} allowEmpty
37525 * @returns {Array} output just a simple array of output keys
37526 */
37527function getKeys(params, key, allowEmpty) {
37528 if (!Array.isArray(params)) {
37529 throw new Error('[ethjs-util] method getKeys expecting type Array as \'params\' input, got \'' + typeof params + '\'');
37530 }
37531 if (typeof key !== 'string') {
37532 throw new Error('[ethjs-util] method getKeys expecting type String for input \'key\' got \'' + typeof key + '\'.');
37533 }
ebd8d4e8 37534
8b095871 37535 var result = []; // eslint-disable-line
ebd8d4e8 37536
8b095871
IC
37537 for (var i = 0; i < params.length; i++) {
37538 // eslint-disable-line
37539 var value = params[i][key]; // eslint-disable-line
37540 if (allowEmpty && !value) {
37541 value = '';
37542 } else if (typeof value !== 'string') {
37543 throw new Error('invalid abi');
37544 }
37545 result.push(value);
37546 }
ebd8d4e8 37547
8b095871 37548 return result;
ebd8d4e8
IC
37549}
37550
8b095871
IC
37551/**
37552 * Is the string a hex string.
37553 *
37554 * @method check if string is hex string of specific length
37555 * @param {String} value
37556 * @param {Number} length
37557 * @returns {Boolean} output the string is a hex string
37558 */
37559function isHexString(value, length) {
37560 if (typeof value !== 'string' || !value.match(/^0x[0-9A-Fa-f]*$/)) {
37561 return false;
ab78acc6
IC
37562 }
37563
8b095871
IC
37564 if (length && value.length !== 2 + 2 * length) {
37565 return false;
37566 }
ebd8d4e8 37567
8b095871
IC
37568 return true;
37569}
ab78acc6 37570
8b095871
IC
37571module.exports = {
37572 arrayContainsArray: arrayContainsArray,
37573 intToBuffer: intToBuffer,
37574 getBinarySize: getBinarySize,
37575 isHexPrefixed: isHexPrefixed,
37576 stripHexPrefix: stripHexPrefix,
37577 padToEven: padToEven,
37578 intToHex: intToHex,
37579 fromAscii: fromAscii,
37580 fromUtf8: fromUtf8,
37581 toAscii: toAscii,
37582 toUtf8: toUtf8,
37583 getKeys: getKeys,
37584 isHexString: isHexString
37585};
37586}).call(this,require("buffer").Buffer)
37587},{"buffer":5,"is-hex-prefixed":64,"strip-hex-prefix":87}],57:[function(require,module,exports){
37588var hash = exports;
37589
37590hash.utils = require('./hash/utils');
37591hash.common = require('./hash/common');
37592hash.sha = require('./hash/sha');
37593hash.ripemd = require('./hash/ripemd');
37594hash.hmac = require('./hash/hmac');
37595
37596// Proxy hash functions to the main object
37597hash.sha1 = hash.sha.sha1;
37598hash.sha256 = hash.sha.sha256;
37599hash.sha224 = hash.sha.sha224;
37600hash.sha384 = hash.sha.sha384;
37601hash.sha512 = hash.sha.sha512;
37602hash.ripemd160 = hash.ripemd.ripemd160;
37603
37604},{"./hash/common":58,"./hash/hmac":59,"./hash/ripemd":60,"./hash/sha":61,"./hash/utils":62}],58:[function(require,module,exports){
37605var hash = require('../hash');
37606var utils = hash.utils;
37607var assert = utils.assert;
37608
37609function BlockHash() {
37610 this.pending = null;
37611 this.pendingTotal = 0;
37612 this.blockSize = this.constructor.blockSize;
37613 this.outSize = this.constructor.outSize;
37614 this.hmacStrength = this.constructor.hmacStrength;
37615 this.padLength = this.constructor.padLength / 8;
37616 this.endian = 'big';
37617
37618 this._delta8 = this.blockSize / 8;
37619 this._delta32 = this.blockSize / 32;
37620}
37621exports.BlockHash = BlockHash;
37622
37623BlockHash.prototype.update = function update(msg, enc) {
37624 // Convert message to array, pad it, and join into 32bit blocks
37625 msg = utils.toArray(msg, enc);
37626 if (!this.pending)
37627 this.pending = msg;
37628 else
37629 this.pending = this.pending.concat(msg);
37630 this.pendingTotal += msg.length;
ab78acc6 37631
8b095871
IC
37632 // Enough data, try updating
37633 if (this.pending.length >= this._delta8) {
37634 msg = this.pending;
ebd8d4e8 37635
8b095871
IC
37636 // Process pending data in blocks
37637 var r = msg.length % this._delta8;
37638 this.pending = msg.slice(msg.length - r, msg.length);
37639 if (this.pending.length === 0)
37640 this.pending = null;
ebd8d4e8 37641
8b095871
IC
37642 msg = utils.join32(msg, 0, msg.length - r, this.endian);
37643 for (var i = 0; i < msg.length; i += this._delta32)
37644 this._update(msg, i, i + this._delta32);
ebd8d4e8
IC
37645 }
37646
8b095871
IC
37647 return this;
37648};
ebd8d4e8 37649
8b095871
IC
37650BlockHash.prototype.digest = function digest(enc) {
37651 this.update(this._pad());
37652 assert(this.pending === null);
ebd8d4e8 37653
8b095871
IC
37654 return this._digest(enc);
37655};
ebd8d4e8 37656
8b095871
IC
37657BlockHash.prototype._pad = function pad() {
37658 var len = this.pendingTotal;
37659 var bytes = this._delta8;
37660 var k = bytes - ((len + this.padLength) % bytes);
37661 var res = new Array(k + this.padLength);
37662 res[0] = 0x80;
37663 for (var i = 1; i < k; i++)
37664 res[i] = 0;
37665
37666 // Append length
37667 len <<= 3;
37668 if (this.endian === 'big') {
37669 for (var t = 8; t < this.padLength; t++)
37670 res[i++] = 0;
37671
37672 res[i++] = 0;
37673 res[i++] = 0;
37674 res[i++] = 0;
37675 res[i++] = 0;
37676 res[i++] = (len >>> 24) & 0xff;
37677 res[i++] = (len >>> 16) & 0xff;
37678 res[i++] = (len >>> 8) & 0xff;
37679 res[i++] = len & 0xff;
ebd8d4e8 37680 } else {
8b095871
IC
37681 res[i++] = len & 0xff;
37682 res[i++] = (len >>> 8) & 0xff;
37683 res[i++] = (len >>> 16) & 0xff;
37684 res[i++] = (len >>> 24) & 0xff;
37685 res[i++] = 0;
37686 res[i++] = 0;
37687 res[i++] = 0;
37688 res[i++] = 0;
ebd8d4e8 37689
8b095871
IC
37690 for (var t = 8; t < this.padLength; t++)
37691 res[i++] = 0;
ebd8d4e8
IC
37692 }
37693
8b095871
IC
37694 return res;
37695};
ebd8d4e8 37696
8b095871
IC
37697},{"../hash":57}],59:[function(require,module,exports){
37698var hmac = exports;
ebd8d4e8 37699
8b095871
IC
37700var hash = require('../hash');
37701var utils = hash.utils;
37702var assert = utils.assert;
ebd8d4e8 37703
8b095871
IC
37704function Hmac(hash, key, enc) {
37705 if (!(this instanceof Hmac))
37706 return new Hmac(hash, key, enc);
37707 this.Hash = hash;
37708 this.blockSize = hash.blockSize / 8;
37709 this.outSize = hash.outSize / 8;
37710 this.inner = null;
37711 this.outer = null;
ebd8d4e8 37712
8b095871 37713 this._init(utils.toArray(key, enc));
ebd8d4e8 37714}
8b095871 37715module.exports = Hmac;
ebd8d4e8 37716
8b095871
IC
37717Hmac.prototype._init = function init(key) {
37718 // Shorten key, if needed
37719 if (key.length > this.blockSize)
37720 key = new this.Hash().update(key).digest();
37721 assert(key.length <= this.blockSize);
ebd8d4e8 37722
8b095871
IC
37723 // Add padding to key
37724 for (var i = key.length; i < this.blockSize; i++)
37725 key.push(0);
ab78acc6 37726
8b095871
IC
37727 for (var i = 0; i < key.length; i++)
37728 key[i] ^= 0x36;
37729 this.inner = new this.Hash().update(key);
ab78acc6 37730
8b095871
IC
37731 // 0x36 ^ 0x5c = 0x6a
37732 for (var i = 0; i < key.length; i++)
37733 key[i] ^= 0x6a;
37734 this.outer = new this.Hash().update(key);
37735};
ebd8d4e8 37736
8b095871
IC
37737Hmac.prototype.update = function update(msg, enc) {
37738 this.inner.update(msg, enc);
37739 return this;
37740};
ab78acc6 37741
8b095871
IC
37742Hmac.prototype.digest = function digest(enc) {
37743 this.outer.update(this.inner.digest());
37744 return this.outer.digest(enc);
37745};
ab78acc6 37746
8b095871
IC
37747},{"../hash":57}],60:[function(require,module,exports){
37748var hash = require('../hash');
37749var utils = hash.utils;
37750
37751var rotl32 = utils.rotl32;
37752var sum32 = utils.sum32;
37753var sum32_3 = utils.sum32_3;
37754var sum32_4 = utils.sum32_4;
37755var BlockHash = hash.common.BlockHash;
37756
37757function RIPEMD160() {
37758 if (!(this instanceof RIPEMD160))
37759 return new RIPEMD160();
37760
37761 BlockHash.call(this);
37762
37763 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
37764 this.endian = 'little';
37765}
37766utils.inherits(RIPEMD160, BlockHash);
37767exports.ripemd160 = RIPEMD160;
37768
37769RIPEMD160.blockSize = 512;
37770RIPEMD160.outSize = 160;
37771RIPEMD160.hmacStrength = 192;
37772RIPEMD160.padLength = 64;
37773
37774RIPEMD160.prototype._update = function update(msg, start) {
37775 var A = this.h[0];
37776 var B = this.h[1];
37777 var C = this.h[2];
37778 var D = this.h[3];
37779 var E = this.h[4];
37780 var Ah = A;
37781 var Bh = B;
37782 var Ch = C;
37783 var Dh = D;
37784 var Eh = E;
37785 for (var j = 0; j < 80; j++) {
37786 var T = sum32(
37787 rotl32(
37788 sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
37789 s[j]),
37790 E);
37791 A = E;
37792 E = D;
37793 D = rotl32(C, 10);
37794 C = B;
37795 B = T;
37796 T = sum32(
37797 rotl32(
37798 sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
37799 sh[j]),
37800 Eh);
37801 Ah = Eh;
37802 Eh = Dh;
37803 Dh = rotl32(Ch, 10);
37804 Ch = Bh;
37805 Bh = T;
37806 }
37807 T = sum32_3(this.h[1], C, Dh);
37808 this.h[1] = sum32_3(this.h[2], D, Eh);
37809 this.h[2] = sum32_3(this.h[3], E, Ah);
37810 this.h[3] = sum32_3(this.h[4], A, Bh);
37811 this.h[4] = sum32_3(this.h[0], B, Ch);
37812 this.h[0] = T;
37813};
ebd8d4e8 37814
8b095871
IC
37815RIPEMD160.prototype._digest = function digest(enc) {
37816 if (enc === 'hex')
37817 return utils.toHex32(this.h, 'little');
37818 else
37819 return utils.split32(this.h, 'little');
37820};
ebd8d4e8 37821
8b095871
IC
37822function f(j, x, y, z) {
37823 if (j <= 15)
37824 return x ^ y ^ z;
37825 else if (j <= 31)
37826 return (x & y) | ((~x) & z);
37827 else if (j <= 47)
37828 return (x | (~y)) ^ z;
37829 else if (j <= 63)
37830 return (x & z) | (y & (~z));
37831 else
37832 return x ^ (y | (~z));
37833}
37834
37835function K(j) {
37836 if (j <= 15)
37837 return 0x00000000;
37838 else if (j <= 31)
37839 return 0x5a827999;
37840 else if (j <= 47)
37841 return 0x6ed9eba1;
37842 else if (j <= 63)
37843 return 0x8f1bbcdc;
37844 else
37845 return 0xa953fd4e;
37846}
37847
37848function Kh(j) {
37849 if (j <= 15)
37850 return 0x50a28be6;
37851 else if (j <= 31)
37852 return 0x5c4dd124;
37853 else if (j <= 47)
37854 return 0x6d703ef3;
37855 else if (j <= 63)
37856 return 0x7a6d76e9;
37857 else
37858 return 0x00000000;
37859}
ebd8d4e8 37860
8b095871
IC
37861var r = [
37862 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
37863 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
37864 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
37865 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
37866 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
37867];
ebd8d4e8 37868
8b095871
IC
37869var rh = [
37870 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
37871 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
37872 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
37873 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
37874 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
37875];
ebd8d4e8 37876
8b095871
IC
37877var s = [
37878 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
37879 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
37880 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
37881 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
37882 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
37883];
ebd8d4e8 37884
8b095871
IC
37885var sh = [
37886 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
37887 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
37888 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
37889 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
37890 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
37891];
ebd8d4e8 37892
8b095871
IC
37893},{"../hash":57}],61:[function(require,module,exports){
37894var hash = require('../hash');
37895var utils = hash.utils;
37896var assert = utils.assert;
37897
37898var rotr32 = utils.rotr32;
37899var rotl32 = utils.rotl32;
37900var sum32 = utils.sum32;
37901var sum32_4 = utils.sum32_4;
37902var sum32_5 = utils.sum32_5;
37903var rotr64_hi = utils.rotr64_hi;
37904var rotr64_lo = utils.rotr64_lo;
37905var shr64_hi = utils.shr64_hi;
37906var shr64_lo = utils.shr64_lo;
37907var sum64 = utils.sum64;
37908var sum64_hi = utils.sum64_hi;
37909var sum64_lo = utils.sum64_lo;
37910var sum64_4_hi = utils.sum64_4_hi;
37911var sum64_4_lo = utils.sum64_4_lo;
37912var sum64_5_hi = utils.sum64_5_hi;
37913var sum64_5_lo = utils.sum64_5_lo;
37914var BlockHash = hash.common.BlockHash;
37915
37916var sha256_K = [
37917 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
37918 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
37919 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
37920 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
37921 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
37922 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
37923 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
37924 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
37925 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
37926 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
37927 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
37928 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
37929 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
37930 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
37931 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
37932 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
37933];
ebd8d4e8 37934
8b095871
IC
37935var sha512_K = [
37936 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
37937 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
37938 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
37939 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
37940 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
37941 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
37942 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
37943 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
37944 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
37945 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
37946 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
37947 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
37948 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
37949 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
37950 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
37951 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
37952 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
37953 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
37954 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
37955 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
37956 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
37957 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
37958 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
37959 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
37960 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
37961 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
37962 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
37963 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
37964 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
37965 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
37966 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
37967 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
37968 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
37969 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
37970 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
37971 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
37972 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
37973 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
37974 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
37975 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
37976];
ebd8d4e8 37977
8b095871
IC
37978var sha1_K = [
37979 0x5A827999, 0x6ED9EBA1,
37980 0x8F1BBCDC, 0xCA62C1D6
37981];
ebd8d4e8 37982
8b095871
IC
37983function SHA256() {
37984 if (!(this instanceof SHA256))
37985 return new SHA256();
37986
37987 BlockHash.call(this);
37988 this.h = [ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
37989 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ];
37990 this.k = sha256_K;
37991 this.W = new Array(64);
37992}
37993utils.inherits(SHA256, BlockHash);
37994exports.sha256 = SHA256;
37995
37996SHA256.blockSize = 512;
37997SHA256.outSize = 256;
37998SHA256.hmacStrength = 192;
37999SHA256.padLength = 64;
38000
38001SHA256.prototype._update = function _update(msg, start) {
38002 var W = this.W;
38003
38004 for (var i = 0; i < 16; i++)
38005 W[i] = msg[start + i];
38006 for (; i < W.length; i++)
38007 W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
38008
38009 var a = this.h[0];
38010 var b = this.h[1];
38011 var c = this.h[2];
38012 var d = this.h[3];
38013 var e = this.h[4];
38014 var f = this.h[5];
38015 var g = this.h[6];
38016 var h = this.h[7];
38017
38018 assert(this.k.length === W.length);
38019 for (var i = 0; i < W.length; i++) {
38020 var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
38021 var T2 = sum32(s0_256(a), maj32(a, b, c));
38022 h = g;
38023 g = f;
38024 f = e;
38025 e = sum32(d, T1);
38026 d = c;
38027 c = b;
38028 b = a;
38029 a = sum32(T1, T2);
38030 }
38031
38032 this.h[0] = sum32(this.h[0], a);
38033 this.h[1] = sum32(this.h[1], b);
38034 this.h[2] = sum32(this.h[2], c);
38035 this.h[3] = sum32(this.h[3], d);
38036 this.h[4] = sum32(this.h[4], e);
38037 this.h[5] = sum32(this.h[5], f);
38038 this.h[6] = sum32(this.h[6], g);
38039 this.h[7] = sum32(this.h[7], h);
38040};
ebd8d4e8 38041
8b095871
IC
38042SHA256.prototype._digest = function digest(enc) {
38043 if (enc === 'hex')
38044 return utils.toHex32(this.h, 'big');
38045 else
38046 return utils.split32(this.h, 'big');
38047};
ebd8d4e8 38048
8b095871
IC
38049function SHA224() {
38050 if (!(this instanceof SHA224))
38051 return new SHA224();
ebd8d4e8 38052
8b095871
IC
38053 SHA256.call(this);
38054 this.h = [ 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
38055 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];
38056}
38057utils.inherits(SHA224, SHA256);
38058exports.sha224 = SHA224;
ebd8d4e8 38059
8b095871
IC
38060SHA224.blockSize = 512;
38061SHA224.outSize = 224;
38062SHA224.hmacStrength = 192;
38063SHA224.padLength = 64;
ebd8d4e8 38064
8b095871
IC
38065SHA224.prototype._digest = function digest(enc) {
38066 // Just truncate output
38067 if (enc === 'hex')
38068 return utils.toHex32(this.h.slice(0, 7), 'big');
38069 else
38070 return utils.split32(this.h.slice(0, 7), 'big');
38071};
38072
38073function SHA512() {
38074 if (!(this instanceof SHA512))
38075 return new SHA512();
38076
38077 BlockHash.call(this);
38078 this.h = [ 0x6a09e667, 0xf3bcc908,
38079 0xbb67ae85, 0x84caa73b,
38080 0x3c6ef372, 0xfe94f82b,
38081 0xa54ff53a, 0x5f1d36f1,
38082 0x510e527f, 0xade682d1,
38083 0x9b05688c, 0x2b3e6c1f,
38084 0x1f83d9ab, 0xfb41bd6b,
38085 0x5be0cd19, 0x137e2179 ];
38086 this.k = sha512_K;
38087 this.W = new Array(160);
38088}
38089utils.inherits(SHA512, BlockHash);
38090exports.sha512 = SHA512;
38091
38092SHA512.blockSize = 1024;
38093SHA512.outSize = 512;
38094SHA512.hmacStrength = 192;
38095SHA512.padLength = 128;
38096
38097SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
38098 var W = this.W;
38099
38100 // 32 x 32bit words
38101 for (var i = 0; i < 32; i++)
38102 W[i] = msg[start + i];
38103 for (; i < W.length; i += 2) {
38104 var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2
38105 var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
38106 var c1_hi = W[i - 14]; // i - 7
38107 var c1_lo = W[i - 13];
38108 var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15
38109 var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
38110 var c3_hi = W[i - 32]; // i - 16
38111 var c3_lo = W[i - 31];
38112
38113 W[i] = sum64_4_hi(c0_hi, c0_lo,
38114 c1_hi, c1_lo,
38115 c2_hi, c2_lo,
38116 c3_hi, c3_lo);
38117 W[i + 1] = sum64_4_lo(c0_hi, c0_lo,
38118 c1_hi, c1_lo,
38119 c2_hi, c2_lo,
38120 c3_hi, c3_lo);
ebd8d4e8 38121 }
8b095871
IC
38122};
38123
38124SHA512.prototype._update = function _update(msg, start) {
38125 this._prepareBlock(msg, start);
38126
38127 var W = this.W;
38128
38129 var ah = this.h[0];
38130 var al = this.h[1];
38131 var bh = this.h[2];
38132 var bl = this.h[3];
38133 var ch = this.h[4];
38134 var cl = this.h[5];
38135 var dh = this.h[6];
38136 var dl = this.h[7];
38137 var eh = this.h[8];
38138 var el = this.h[9];
38139 var fh = this.h[10];
38140 var fl = this.h[11];
38141 var gh = this.h[12];
38142 var gl = this.h[13];
38143 var hh = this.h[14];
38144 var hl = this.h[15];
38145
38146 assert(this.k.length === W.length);
38147 for (var i = 0; i < W.length; i += 2) {
38148 var c0_hi = hh;
38149 var c0_lo = hl;
38150 var c1_hi = s1_512_hi(eh, el);
38151 var c1_lo = s1_512_lo(eh, el);
38152 var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
38153 var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
38154 var c3_hi = this.k[i];
38155 var c3_lo = this.k[i + 1];
38156 var c4_hi = W[i];
38157 var c4_lo = W[i + 1];
38158
38159 var T1_hi = sum64_5_hi(c0_hi, c0_lo,
38160 c1_hi, c1_lo,
38161 c2_hi, c2_lo,
38162 c3_hi, c3_lo,
38163 c4_hi, c4_lo);
38164 var T1_lo = sum64_5_lo(c0_hi, c0_lo,
38165 c1_hi, c1_lo,
38166 c2_hi, c2_lo,
38167 c3_hi, c3_lo,
38168 c4_hi, c4_lo);
38169
38170 var c0_hi = s0_512_hi(ah, al);
38171 var c0_lo = s0_512_lo(ah, al);
38172 var c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
38173 var c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
38174
38175 var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
38176 var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
38177
38178 hh = gh;
38179 hl = gl;
38180
38181 gh = fh;
38182 gl = fl;
38183
38184 fh = eh;
38185 fl = el;
38186
38187 eh = sum64_hi(dh, dl, T1_hi, T1_lo);
38188 el = sum64_lo(dl, dl, T1_hi, T1_lo);
38189
38190 dh = ch;
38191 dl = cl;
38192
38193 ch = bh;
38194 cl = bl;
38195
38196 bh = ah;
38197 bl = al;
38198
38199 ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
38200 al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
38201 }
38202
38203 sum64(this.h, 0, ah, al);
38204 sum64(this.h, 2, bh, bl);
38205 sum64(this.h, 4, ch, cl);
38206 sum64(this.h, 6, dh, dl);
38207 sum64(this.h, 8, eh, el);
38208 sum64(this.h, 10, fh, fl);
38209 sum64(this.h, 12, gh, gl);
38210 sum64(this.h, 14, hh, hl);
38211};
38212
38213SHA512.prototype._digest = function digest(enc) {
38214 if (enc === 'hex')
38215 return utils.toHex32(this.h, 'big');
38216 else
38217 return utils.split32(this.h, 'big');
38218};
38219
38220function SHA384() {
38221 if (!(this instanceof SHA384))
38222 return new SHA384();
38223
38224 SHA512.call(this);
38225 this.h = [ 0xcbbb9d5d, 0xc1059ed8,
38226 0x629a292a, 0x367cd507,
38227 0x9159015a, 0x3070dd17,
38228 0x152fecd8, 0xf70e5939,
38229 0x67332667, 0xffc00b31,
38230 0x8eb44a87, 0x68581511,
38231 0xdb0c2e0d, 0x64f98fa7,
38232 0x47b5481d, 0xbefa4fa4 ];
38233}
38234utils.inherits(SHA384, SHA512);
38235exports.sha384 = SHA384;
38236
38237SHA384.blockSize = 1024;
38238SHA384.outSize = 384;
38239SHA384.hmacStrength = 192;
38240SHA384.padLength = 128;
38241
38242SHA384.prototype._digest = function digest(enc) {
38243 if (enc === 'hex')
38244 return utils.toHex32(this.h.slice(0, 12), 'big');
38245 else
38246 return utils.split32(this.h.slice(0, 12), 'big');
38247};
ebd8d4e8 38248
8b095871
IC
38249function SHA1() {
38250 if (!(this instanceof SHA1))
38251 return new SHA1();
ebd8d4e8 38252
8b095871
IC
38253 BlockHash.call(this);
38254 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe,
38255 0x10325476, 0xc3d2e1f0 ];
38256 this.W = new Array(80);
38257}
ebd8d4e8 38258
8b095871
IC
38259utils.inherits(SHA1, BlockHash);
38260exports.sha1 = SHA1;
ebd8d4e8 38261
8b095871
IC
38262SHA1.blockSize = 512;
38263SHA1.outSize = 160;
38264SHA1.hmacStrength = 80;
38265SHA1.padLength = 64;
ebd8d4e8 38266
8b095871
IC
38267SHA1.prototype._update = function _update(msg, start) {
38268 var W = this.W;
ebd8d4e8 38269
8b095871
IC
38270 for (var i = 0; i < 16; i++)
38271 W[i] = msg[start + i];
ebd8d4e8 38272
8b095871
IC
38273 for(; i < W.length; i++)
38274 W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
ebd8d4e8 38275
8b095871
IC
38276 var a = this.h[0];
38277 var b = this.h[1];
38278 var c = this.h[2];
38279 var d = this.h[3];
38280 var e = this.h[4];
ebd8d4e8 38281
8b095871
IC
38282 for (var i = 0; i < W.length; i++) {
38283 var s = ~~(i / 20);
38284 var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
38285 e = d;
38286 d = c;
38287 c = rotl32(b, 30);
38288 b = a;
38289 a = t;
ebd8d4e8
IC
38290 }
38291
8b095871
IC
38292 this.h[0] = sum32(this.h[0], a);
38293 this.h[1] = sum32(this.h[1], b);
38294 this.h[2] = sum32(this.h[2], c);
38295 this.h[3] = sum32(this.h[3], d);
38296 this.h[4] = sum32(this.h[4], e);
38297};
ebd8d4e8 38298
8b095871
IC
38299SHA1.prototype._digest = function digest(enc) {
38300 if (enc === 'hex')
38301 return utils.toHex32(this.h, 'big');
38302 else
38303 return utils.split32(this.h, 'big');
38304};
38305
38306function ch32(x, y, z) {
38307 return (x & y) ^ ((~x) & z);
ebd8d4e8
IC
38308}
38309
8b095871
IC
38310function maj32(x, y, z) {
38311 return (x & y) ^ (x & z) ^ (y & z);
ebd8d4e8
IC
38312}
38313
8b095871
IC
38314function p32(x, y, z) {
38315 return x ^ y ^ z;
38316}
ebd8d4e8 38317
8b095871
IC
38318function s0_256(x) {
38319 return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
38320}
ebd8d4e8 38321
8b095871
IC
38322function s1_256(x) {
38323 return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
ab78acc6
IC
38324}
38325
8b095871
IC
38326function g0_256(x) {
38327 return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);
38328}
ab78acc6 38329
8b095871
IC
38330function g1_256(x) {
38331 return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
38332}
ab78acc6 38333
8b095871
IC
38334function ft_1(s, x, y, z) {
38335 if (s === 0)
38336 return ch32(x, y, z);
38337 if (s === 1 || s === 3)
38338 return p32(x, y, z);
38339 if (s === 2)
38340 return maj32(x, y, z);
38341}
ebd8d4e8 38342
8b095871
IC
38343function ch64_hi(xh, xl, yh, yl, zh, zl) {
38344 var r = (xh & yh) ^ ((~xh) & zh);
38345 if (r < 0)
38346 r += 0x100000000;
38347 return r;
38348}
ebd8d4e8 38349
8b095871
IC
38350function ch64_lo(xh, xl, yh, yl, zh, zl) {
38351 var r = (xl & yl) ^ ((~xl) & zl);
38352 if (r < 0)
38353 r += 0x100000000;
38354 return r;
ebd8d4e8
IC
38355}
38356
8b095871
IC
38357function maj64_hi(xh, xl, yh, yl, zh, zl) {
38358 var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);
38359 if (r < 0)
38360 r += 0x100000000;
38361 return r;
38362}
ebd8d4e8 38363
8b095871
IC
38364function maj64_lo(xh, xl, yh, yl, zh, zl) {
38365 var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);
38366 if (r < 0)
38367 r += 0x100000000;
38368 return r;
38369}
ebd8d4e8 38370
8b095871
IC
38371function s0_512_hi(xh, xl) {
38372 var c0_hi = rotr64_hi(xh, xl, 28);
38373 var c1_hi = rotr64_hi(xl, xh, 2); // 34
38374 var c2_hi = rotr64_hi(xl, xh, 7); // 39
38375
38376 var r = c0_hi ^ c1_hi ^ c2_hi;
38377 if (r < 0)
38378 r += 0x100000000;
38379 return r;
ebd8d4e8
IC
38380}
38381
8b095871
IC
38382function s0_512_lo(xh, xl) {
38383 var c0_lo = rotr64_lo(xh, xl, 28);
38384 var c1_lo = rotr64_lo(xl, xh, 2); // 34
38385 var c2_lo = rotr64_lo(xl, xh, 7); // 39
ab78acc6 38386
8b095871
IC
38387 var r = c0_lo ^ c1_lo ^ c2_lo;
38388 if (r < 0)
38389 r += 0x100000000;
38390 return r;
38391}
ebd8d4e8 38392
8b095871
IC
38393function s1_512_hi(xh, xl) {
38394 var c0_hi = rotr64_hi(xh, xl, 14);
38395 var c1_hi = rotr64_hi(xh, xl, 18);
38396 var c2_hi = rotr64_hi(xl, xh, 9); // 41
ebd8d4e8 38397
8b095871
IC
38398 var r = c0_hi ^ c1_hi ^ c2_hi;
38399 if (r < 0)
38400 r += 0x100000000;
38401 return r;
ebd8d4e8
IC
38402}
38403
8b095871
IC
38404function s1_512_lo(xh, xl) {
38405 var c0_lo = rotr64_lo(xh, xl, 14);
38406 var c1_lo = rotr64_lo(xh, xl, 18);
38407 var c2_lo = rotr64_lo(xl, xh, 9); // 41
38408
38409 var r = c0_lo ^ c1_lo ^ c2_lo;
38410 if (r < 0)
38411 r += 0x100000000;
38412 return r;
ebd8d4e8
IC
38413}
38414
8b095871
IC
38415function g0_512_hi(xh, xl) {
38416 var c0_hi = rotr64_hi(xh, xl, 1);
38417 var c1_hi = rotr64_hi(xh, xl, 8);
38418 var c2_hi = shr64_hi(xh, xl, 7);
ebd8d4e8 38419
8b095871
IC
38420 var r = c0_hi ^ c1_hi ^ c2_hi;
38421 if (r < 0)
38422 r += 0x100000000;
38423 return r;
38424}
38425
38426function g0_512_lo(xh, xl) {
38427 var c0_lo = rotr64_lo(xh, xl, 1);
38428 var c1_lo = rotr64_lo(xh, xl, 8);
38429 var c2_lo = shr64_lo(xh, xl, 7);
38430
38431 var r = c0_lo ^ c1_lo ^ c2_lo;
38432 if (r < 0)
38433 r += 0x100000000;
38434 return r;
38435}
38436
38437function g1_512_hi(xh, xl) {
38438 var c0_hi = rotr64_hi(xh, xl, 19);
38439 var c1_hi = rotr64_hi(xl, xh, 29); // 61
38440 var c2_hi = shr64_hi(xh, xl, 6);
38441
38442 var r = c0_hi ^ c1_hi ^ c2_hi;
38443 if (r < 0)
38444 r += 0x100000000;
38445 return r;
38446}
38447
38448function g1_512_lo(xh, xl) {
38449 var c0_lo = rotr64_lo(xh, xl, 19);
38450 var c1_lo = rotr64_lo(xl, xh, 29); // 61
38451 var c2_lo = shr64_lo(xh, xl, 6);
38452
38453 var r = c0_lo ^ c1_lo ^ c2_lo;
38454 if (r < 0)
38455 r += 0x100000000;
38456 return r;
38457}
38458
38459},{"../hash":57}],62:[function(require,module,exports){
38460var utils = exports;
38461var inherits = require('inherits');
38462
38463function toArray(msg, enc) {
38464 if (Array.isArray(msg))
38465 return msg.slice();
38466 if (!msg)
38467 return [];
38468 var res = [];
38469 if (typeof msg === 'string') {
38470 if (!enc) {
38471 for (var i = 0; i < msg.length; i++) {
38472 var c = msg.charCodeAt(i);
38473 var hi = c >> 8;
38474 var lo = c & 0xff;
38475 if (hi)
38476 res.push(hi, lo);
38477 else
38478 res.push(lo);
38479 }
38480 } else if (enc === 'hex') {
38481 msg = msg.replace(/[^a-z0-9]+/ig, '');
38482 if (msg.length % 2 !== 0)
38483 msg = '0' + msg;
38484 for (var i = 0; i < msg.length; i += 2)
38485 res.push(parseInt(msg[i] + msg[i + 1], 16));
38486 }
38487 } else {
38488 for (var i = 0; i < msg.length; i++)
38489 res[i] = msg[i] | 0;
ebd8d4e8 38490 }
8b095871 38491 return res;
ebd8d4e8 38492}
8b095871 38493utils.toArray = toArray;
ebd8d4e8 38494
8b095871
IC
38495function toHex(msg) {
38496 var res = '';
38497 for (var i = 0; i < msg.length; i++)
38498 res += zero2(msg[i].toString(16));
38499 return res;
38500}
38501utils.toHex = toHex;
ebd8d4e8 38502
8b095871
IC
38503function htonl(w) {
38504 var res = (w >>> 24) |
38505 ((w >>> 8) & 0xff00) |
38506 ((w << 8) & 0xff0000) |
38507 ((w & 0xff) << 24);
38508 return res >>> 0;
38509}
38510utils.htonl = htonl;
ebd8d4e8 38511
8b095871
IC
38512function toHex32(msg, endian) {
38513 var res = '';
38514 for (var i = 0; i < msg.length; i++) {
38515 var w = msg[i];
38516 if (endian === 'little')
38517 w = htonl(w);
38518 res += zero8(w.toString(16));
38519 }
38520 return res;
38521}
38522utils.toHex32 = toHex32;
ebd8d4e8 38523
8b095871
IC
38524function zero2(word) {
38525 if (word.length === 1)
38526 return '0' + word;
38527 else
38528 return word;
38529}
38530utils.zero2 = zero2;
38531
38532function zero8(word) {
38533 if (word.length === 7)
38534 return '0' + word;
38535 else if (word.length === 6)
38536 return '00' + word;
38537 else if (word.length === 5)
38538 return '000' + word;
38539 else if (word.length === 4)
38540 return '0000' + word;
38541 else if (word.length === 3)
38542 return '00000' + word;
38543 else if (word.length === 2)
38544 return '000000' + word;
38545 else if (word.length === 1)
38546 return '0000000' + word;
38547 else
38548 return word;
38549}
38550utils.zero8 = zero8;
38551
38552function join32(msg, start, end, endian) {
38553 var len = end - start;
38554 assert(len % 4 === 0);
38555 var res = new Array(len / 4);
38556 for (var i = 0, k = start; i < res.length; i++, k += 4) {
38557 var w;
38558 if (endian === 'big')
38559 w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
38560 else
38561 w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
38562 res[i] = w >>> 0;
38563 }
38564 return res;
38565}
38566utils.join32 = join32;
38567
38568function split32(msg, endian) {
38569 var res = new Array(msg.length * 4);
38570 for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
38571 var m = msg[i];
38572 if (endian === 'big') {
38573 res[k] = m >>> 24;
38574 res[k + 1] = (m >>> 16) & 0xff;
38575 res[k + 2] = (m >>> 8) & 0xff;
38576 res[k + 3] = m & 0xff;
38577 } else {
38578 res[k + 3] = m >>> 24;
38579 res[k + 2] = (m >>> 16) & 0xff;
38580 res[k + 1] = (m >>> 8) & 0xff;
38581 res[k] = m & 0xff;
38582 }
ebd8d4e8 38583 }
8b095871 38584 return res;
ebd8d4e8 38585}
8b095871 38586utils.split32 = split32;
ebd8d4e8 38587
8b095871
IC
38588function rotr32(w, b) {
38589 return (w >>> b) | (w << (32 - b));
38590}
38591utils.rotr32 = rotr32;
ebd8d4e8 38592
8b095871
IC
38593function rotl32(w, b) {
38594 return (w << b) | (w >>> (32 - b));
38595}
38596utils.rotl32 = rotl32;
ebd8d4e8 38597
8b095871
IC
38598function sum32(a, b) {
38599 return (a + b) >>> 0;
38600}
38601utils.sum32 = sum32;
ebd8d4e8 38602
8b095871
IC
38603function sum32_3(a, b, c) {
38604 return (a + b + c) >>> 0;
38605}
38606utils.sum32_3 = sum32_3;
ebd8d4e8 38607
8b095871
IC
38608function sum32_4(a, b, c, d) {
38609 return (a + b + c + d) >>> 0;
38610}
38611utils.sum32_4 = sum32_4;
ebd8d4e8 38612
8b095871
IC
38613function sum32_5(a, b, c, d, e) {
38614 return (a + b + c + d + e) >>> 0;
38615}
38616utils.sum32_5 = sum32_5;
ebd8d4e8 38617
8b095871
IC
38618function assert(cond, msg) {
38619 if (!cond)
38620 throw new Error(msg || 'Assertion failed');
38621}
38622utils.assert = assert;
ab78acc6 38623
8b095871 38624utils.inherits = inherits;
ab78acc6 38625
8b095871
IC
38626function sum64(buf, pos, ah, al) {
38627 var bh = buf[pos];
38628 var bl = buf[pos + 1];
ab78acc6 38629
8b095871
IC
38630 var lo = (al + bl) >>> 0;
38631 var hi = (lo < al ? 1 : 0) + ah + bh;
38632 buf[pos] = hi >>> 0;
38633 buf[pos + 1] = lo;
38634}
38635exports.sum64 = sum64;
ebd8d4e8 38636
8b095871
IC
38637function sum64_hi(ah, al, bh, bl) {
38638 var lo = (al + bl) >>> 0;
38639 var hi = (lo < al ? 1 : 0) + ah + bh;
38640 return hi >>> 0;
38641};
38642exports.sum64_hi = sum64_hi;
ebd8d4e8 38643
8b095871
IC
38644function sum64_lo(ah, al, bh, bl) {
38645 var lo = al + bl;
38646 return lo >>> 0;
38647};
38648exports.sum64_lo = sum64_lo;
38649
38650function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
38651 var carry = 0;
38652 var lo = al;
38653 lo = (lo + bl) >>> 0;
38654 carry += lo < al ? 1 : 0;
38655 lo = (lo + cl) >>> 0;
38656 carry += lo < cl ? 1 : 0;
38657 lo = (lo + dl) >>> 0;
38658 carry += lo < dl ? 1 : 0;
38659
38660 var hi = ah + bh + ch + dh + carry;
38661 return hi >>> 0;
38662};
38663exports.sum64_4_hi = sum64_4_hi;
ebd8d4e8 38664
8b095871
IC
38665function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
38666 var lo = al + bl + cl + dl;
38667 return lo >>> 0;
38668};
38669exports.sum64_4_lo = sum64_4_lo;
38670
38671function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
38672 var carry = 0;
38673 var lo = al;
38674 lo = (lo + bl) >>> 0;
38675 carry += lo < al ? 1 : 0;
38676 lo = (lo + cl) >>> 0;
38677 carry += lo < cl ? 1 : 0;
38678 lo = (lo + dl) >>> 0;
38679 carry += lo < dl ? 1 : 0;
38680 lo = (lo + el) >>> 0;
38681 carry += lo < el ? 1 : 0;
38682
38683 var hi = ah + bh + ch + dh + eh + carry;
38684 return hi >>> 0;
38685};
38686exports.sum64_5_hi = sum64_5_hi;
38687
38688function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
38689 var lo = al + bl + cl + dl + el;
38690
38691 return lo >>> 0;
38692};
38693exports.sum64_5_lo = sum64_5_lo;
38694
38695function rotr64_hi(ah, al, num) {
38696 var r = (al << (32 - num)) | (ah >>> num);
38697 return r >>> 0;
38698};
38699exports.rotr64_hi = rotr64_hi;
38700
38701function rotr64_lo(ah, al, num) {
38702 var r = (ah << (32 - num)) | (al >>> num);
38703 return r >>> 0;
38704};
38705exports.rotr64_lo = rotr64_lo;
38706
38707function shr64_hi(ah, al, num) {
38708 return ah >>> num;
38709};
38710exports.shr64_hi = shr64_hi;
38711
38712function shr64_lo(ah, al, num) {
38713 var r = (ah << (32 - num)) | (al >>> num);
38714 return r >>> 0;
38715};
38716exports.shr64_lo = shr64_lo;
38717
38718},{"inherits":63}],63:[function(require,module,exports){
38719arguments[4][9][0].apply(exports,arguments)
38720},{"dup":9}],64:[function(require,module,exports){
38721/**
38722 * Returns a `Boolean` on whether or not the a `String` starts with '0x'
38723 * @param {String} str the string input value
38724 * @return {Boolean} a boolean if it is or is not hex prefixed
38725 * @throws if the str input is not a string
38726 */
38727module.exports = function isHexPrefixed(str) {
38728 if (typeof str !== 'string') {
38729 throw new Error("[is-hex-prefixed] value must be type 'string', is currently type " + (typeof str) + ", while checking isHexPrefixed.");
38730 }
38731
38732 return str.slice(0, 2) === '0x';
ebd8d4e8
IC
38733}
38734
8b095871
IC
38735},{}],65:[function(require,module,exports){
38736'use strict'
38737module.exports = require('./lib/api')(require('./lib/keccak'))
38738
38739},{"./lib/api":66,"./lib/keccak":70}],66:[function(require,module,exports){
38740'use strict'
38741var createKeccak = require('./keccak')
38742var createShake = require('./shake')
38743
38744module.exports = function (KeccakState) {
38745 var Keccak = createKeccak(KeccakState)
38746 var Shake = createShake(KeccakState)
38747
38748 return function (algorithm, options) {
38749 var hash = typeof algorithm === 'string' ? algorithm.toLowerCase() : algorithm
38750 switch (hash) {
38751 case 'keccak224': return new Keccak(1152, 448, null, 224, options)
38752 case 'keccak256': return new Keccak(1088, 512, null, 256, options)
38753 case 'keccak384': return new Keccak(832, 768, null, 384, options)
38754 case 'keccak512': return new Keccak(576, 1024, null, 512, options)
38755
38756 case 'sha3-224': return new Keccak(1152, 448, 0x06, 224, options)
38757 case 'sha3-256': return new Keccak(1088, 512, 0x06, 256, options)
38758 case 'sha3-384': return new Keccak(832, 768, 0x06, 384, options)
38759 case 'sha3-512': return new Keccak(576, 1024, 0x06, 512, options)
38760
38761 case 'shake128': return new Shake(1344, 256, 0x1f, options)
38762 case 'shake256': return new Shake(1088, 512, 0x1f, options)
38763
38764 default: throw new Error('Invald algorithm: ' + algorithm)
38765 }
38766 }
38767}
38768
38769},{"./keccak":67,"./shake":68}],67:[function(require,module,exports){
ebd8d4e8 38770(function (Buffer){
8b095871
IC
38771'use strict'
38772var Transform = require('stream').Transform
38773var inherits = require('inherits')
38774
38775module.exports = function (KeccakState) {
38776 function Keccak (rate, capacity, delimitedSuffix, hashBitLength, options) {
38777 Transform.call(this, options)
38778
38779 this._rate = rate
38780 this._capacity = capacity
38781 this._delimitedSuffix = delimitedSuffix
38782 this._hashBitLength = hashBitLength
38783 this._options = options
38784
38785 this._state = new KeccakState()
38786 this._state.initialize(rate, capacity)
38787 this._finalized = false
38788 }
38789
38790 inherits(Keccak, Transform)
38791
38792 Keccak.prototype._transform = function (chunk, encoding, callback) {
38793 var error = null
38794 try {
38795 this.update(chunk, encoding)
38796 } catch (err) {
38797 error = err
38798 }
38799
38800 callback(error)
38801 }
38802
38803 Keccak.prototype._flush = function (callback) {
38804 var error = null
38805 try {
38806 this.push(this.digest())
38807 } catch (err) {
38808 error = err
38809 }
38810
38811 callback(error)
38812 }
38813
38814 Keccak.prototype.update = function (data, encoding) {
38815 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
38816 if (this._finalized) throw new Error('Digest already called')
38817 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
38818
38819 this._state.absorb(data)
38820
38821 return this
38822 }
38823
38824 Keccak.prototype.digest = function (encoding) {
38825 if (this._finalized) throw new Error('Digest already called')
38826 this._finalized = true
38827
38828 if (this._delimitedSuffix) this._state.absorbLastFewBits(this._delimitedSuffix)
38829 var digest = this._state.squeeze(this._hashBitLength / 8)
38830 if (encoding !== undefined) digest = digest.toString(encoding)
38831
38832 this._resetState()
38833
38834 return digest
38835 }
38836
38837 // remove result from memory
38838 Keccak.prototype._resetState = function () {
38839 this._state.initialize(this._rate, this._capacity)
38840 return this
38841 }
38842
38843 // because sometimes we need hash right now and little later
38844 Keccak.prototype._clone = function () {
38845 var clone = new Keccak(this._rate, this._capacity, this._delimitedSuffix, this._hashBitLength, this._options)
38846 this._state.copy(clone._state)
38847 clone._finalized = this._finalized
38848
38849 return clone
38850 }
38851
38852 return Keccak
38853}
38854
38855}).call(this,require("buffer").Buffer)
38856},{"buffer":5,"inherits":63,"stream":25}],68:[function(require,module,exports){
38857(function (Buffer){
38858'use strict'
38859var Transform = require('stream').Transform
38860var inherits = require('inherits')
38861
38862module.exports = function (KeccakState) {
38863 function Shake (rate, capacity, delimitedSuffix, options) {
38864 Transform.call(this, options)
38865
38866 this._rate = rate
38867 this._capacity = capacity
38868 this._delimitedSuffix = delimitedSuffix
38869 this._options = options
38870
38871 this._state = new KeccakState()
38872 this._state.initialize(rate, capacity)
38873 this._finalized = false
38874 }
38875
38876 inherits(Shake, Transform)
38877
38878 Shake.prototype._transform = function (chunk, encoding, callback) {
38879 var error = null
38880 try {
38881 this.update(chunk, encoding)
38882 } catch (err) {
38883 error = err
38884 }
ebd8d4e8 38885
8b095871
IC
38886 callback(error)
38887 }
ebd8d4e8 38888
8b095871 38889 Shake.prototype._flush = function () {}
ebd8d4e8 38890
8b095871
IC
38891 Shake.prototype._read = function (size) {
38892 this.push(this.squeeze(size))
38893 }
ebd8d4e8 38894
8b095871
IC
38895 Shake.prototype.update = function (data, encoding) {
38896 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
38897 if (this._finalized) throw new Error('Squeeze already called')
38898 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
38899
38900 this._state.absorb(data)
38901
38902 return this
38903 }
38904
38905 Shake.prototype.squeeze = function (dataByteLength, encoding) {
38906 if (!this._finalized) {
38907 this._finalized = true
38908 this._state.absorbLastFewBits(this._delimitedSuffix)
ebd8d4e8 38909 }
ebd8d4e8 38910
8b095871
IC
38911 var data = this._state.squeeze(dataByteLength)
38912 if (encoding !== undefined) data = data.toString(encoding)
ebd8d4e8 38913
8b095871
IC
38914 return data
38915 }
ebd8d4e8 38916
8b095871
IC
38917 Shake.prototype._resetState = function () {
38918 this._state.initialize(this._rate, this._capacity)
38919 return this
38920 }
ebd8d4e8 38921
8b095871
IC
38922 Shake.prototype._clone = function () {
38923 var clone = new Shake(this._rate, this._capacity, this._delimitedSuffix, this._options)
38924 this._state.copy(clone._state)
38925 clone._finalized = this._finalized
ab78acc6 38926
8b095871
IC
38927 return clone
38928 }
ebd8d4e8 38929
8b095871
IC
38930 return Shake
38931}
ab78acc6 38932
8b095871
IC
38933}).call(this,require("buffer").Buffer)
38934},{"buffer":5,"inherits":63,"stream":25}],69:[function(require,module,exports){
38935'use strict'
38936var 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]
38937
38938exports.p1600 = function (s) {
38939 for (var round = 0; round < 24; ++round) {
38940 // theta
38941 var lo0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]
38942 var hi0 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]
38943 var lo1 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]
38944 var hi1 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]
38945 var lo2 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]
38946 var hi2 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]
38947 var lo3 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]
38948 var hi3 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]
38949 var lo4 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]
38950 var hi4 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]
38951
38952 var lo = lo4 ^ (lo1 << 1 | hi1 >>> 31)
38953 var hi = hi4 ^ (hi1 << 1 | lo1 >>> 31)
38954 var t1slo0 = s[0] ^ lo
38955 var t1shi0 = s[1] ^ hi
38956 var t1slo5 = s[10] ^ lo
38957 var t1shi5 = s[11] ^ hi
38958 var t1slo10 = s[20] ^ lo
38959 var t1shi10 = s[21] ^ hi
38960 var t1slo15 = s[30] ^ lo
38961 var t1shi15 = s[31] ^ hi
38962 var t1slo20 = s[40] ^ lo
38963 var t1shi20 = s[41] ^ hi
38964 lo = lo0 ^ (lo2 << 1 | hi2 >>> 31)
38965 hi = hi0 ^ (hi2 << 1 | lo2 >>> 31)
38966 var t1slo1 = s[2] ^ lo
38967 var t1shi1 = s[3] ^ hi
38968 var t1slo6 = s[12] ^ lo
38969 var t1shi6 = s[13] ^ hi
38970 var t1slo11 = s[22] ^ lo
38971 var t1shi11 = s[23] ^ hi
38972 var t1slo16 = s[32] ^ lo
38973 var t1shi16 = s[33] ^ hi
38974 var t1slo21 = s[42] ^ lo
38975 var t1shi21 = s[43] ^ hi
38976 lo = lo1 ^ (lo3 << 1 | hi3 >>> 31)
38977 hi = hi1 ^ (hi3 << 1 | lo3 >>> 31)
38978 var t1slo2 = s[4] ^ lo
38979 var t1shi2 = s[5] ^ hi
38980 var t1slo7 = s[14] ^ lo
38981 var t1shi7 = s[15] ^ hi
38982 var t1slo12 = s[24] ^ lo
38983 var t1shi12 = s[25] ^ hi
38984 var t1slo17 = s[34] ^ lo
38985 var t1shi17 = s[35] ^ hi
38986 var t1slo22 = s[44] ^ lo
38987 var t1shi22 = s[45] ^ hi
38988 lo = lo2 ^ (lo4 << 1 | hi4 >>> 31)
38989 hi = hi2 ^ (hi4 << 1 | lo4 >>> 31)
38990 var t1slo3 = s[6] ^ lo
38991 var t1shi3 = s[7] ^ hi
38992 var t1slo8 = s[16] ^ lo
38993 var t1shi8 = s[17] ^ hi
38994 var t1slo13 = s[26] ^ lo
38995 var t1shi13 = s[27] ^ hi
38996 var t1slo18 = s[36] ^ lo
38997 var t1shi18 = s[37] ^ hi
38998 var t1slo23 = s[46] ^ lo
38999 var t1shi23 = s[47] ^ hi
39000 lo = lo3 ^ (lo0 << 1 | hi0 >>> 31)
39001 hi = hi3 ^ (hi0 << 1 | lo0 >>> 31)
39002 var t1slo4 = s[8] ^ lo
39003 var t1shi4 = s[9] ^ hi
39004 var t1slo9 = s[18] ^ lo
39005 var t1shi9 = s[19] ^ hi
39006 var t1slo14 = s[28] ^ lo
39007 var t1shi14 = s[29] ^ hi
39008 var t1slo19 = s[38] ^ lo
39009 var t1shi19 = s[39] ^ hi
39010 var t1slo24 = s[48] ^ lo
39011 var t1shi24 = s[49] ^ hi
39012
39013 // rho & pi
39014 var t2slo0 = t1slo0
39015 var t2shi0 = t1shi0
39016 var t2slo16 = (t1shi5 << 4 | t1slo5 >>> 28)
39017 var t2shi16 = (t1slo5 << 4 | t1shi5 >>> 28)
39018 var t2slo7 = (t1slo10 << 3 | t1shi10 >>> 29)
39019 var t2shi7 = (t1shi10 << 3 | t1slo10 >>> 29)
39020 var t2slo23 = (t1shi15 << 9 | t1slo15 >>> 23)
39021 var t2shi23 = (t1slo15 << 9 | t1shi15 >>> 23)
39022 var t2slo14 = (t1slo20 << 18 | t1shi20 >>> 14)
39023 var t2shi14 = (t1shi20 << 18 | t1slo20 >>> 14)
39024 var t2slo10 = (t1slo1 << 1 | t1shi1 >>> 31)
39025 var t2shi10 = (t1shi1 << 1 | t1slo1 >>> 31)
39026 var t2slo1 = (t1shi6 << 12 | t1slo6 >>> 20)
39027 var t2shi1 = (t1slo6 << 12 | t1shi6 >>> 20)
39028 var t2slo17 = (t1slo11 << 10 | t1shi11 >>> 22)
39029 var t2shi17 = (t1shi11 << 10 | t1slo11 >>> 22)
39030 var t2slo8 = (t1shi16 << 13 | t1slo16 >>> 19)
39031 var t2shi8 = (t1slo16 << 13 | t1shi16 >>> 19)
39032 var t2slo24 = (t1slo21 << 2 | t1shi21 >>> 30)
39033 var t2shi24 = (t1shi21 << 2 | t1slo21 >>> 30)
39034 var t2slo20 = (t1shi2 << 30 | t1slo2 >>> 2)
39035 var t2shi20 = (t1slo2 << 30 | t1shi2 >>> 2)
39036 var t2slo11 = (t1slo7 << 6 | t1shi7 >>> 26)
39037 var t2shi11 = (t1shi7 << 6 | t1slo7 >>> 26)
39038 var t2slo2 = (t1shi12 << 11 | t1slo12 >>> 21)
39039 var t2shi2 = (t1slo12 << 11 | t1shi12 >>> 21)
39040 var t2slo18 = (t1slo17 << 15 | t1shi17 >>> 17)
39041 var t2shi18 = (t1shi17 << 15 | t1slo17 >>> 17)
39042 var t2slo9 = (t1shi22 << 29 | t1slo22 >>> 3)
39043 var t2shi9 = (t1slo22 << 29 | t1shi22 >>> 3)
39044 var t2slo5 = (t1slo3 << 28 | t1shi3 >>> 4)
39045 var t2shi5 = (t1shi3 << 28 | t1slo3 >>> 4)
39046 var t2slo21 = (t1shi8 << 23 | t1slo8 >>> 9)
39047 var t2shi21 = (t1slo8 << 23 | t1shi8 >>> 9)
39048 var t2slo12 = (t1slo13 << 25 | t1shi13 >>> 7)
39049 var t2shi12 = (t1shi13 << 25 | t1slo13 >>> 7)
39050 var t2slo3 = (t1slo18 << 21 | t1shi18 >>> 11)
39051 var t2shi3 = (t1shi18 << 21 | t1slo18 >>> 11)
39052 var t2slo19 = (t1shi23 << 24 | t1slo23 >>> 8)
39053 var t2shi19 = (t1slo23 << 24 | t1shi23 >>> 8)
39054 var t2slo15 = (t1slo4 << 27 | t1shi4 >>> 5)
39055 var t2shi15 = (t1shi4 << 27 | t1slo4 >>> 5)
39056 var t2slo6 = (t1slo9 << 20 | t1shi9 >>> 12)
39057 var t2shi6 = (t1shi9 << 20 | t1slo9 >>> 12)
39058 var t2slo22 = (t1shi14 << 7 | t1slo14 >>> 25)
39059 var t2shi22 = (t1slo14 << 7 | t1shi14 >>> 25)
39060 var t2slo13 = (t1slo19 << 8 | t1shi19 >>> 24)
39061 var t2shi13 = (t1shi19 << 8 | t1slo19 >>> 24)
39062 var t2slo4 = (t1slo24 << 14 | t1shi24 >>> 18)
39063 var t2shi4 = (t1shi24 << 14 | t1slo24 >>> 18)
39064
39065 // chi
39066 s[0] = t2slo0 ^ (~t2slo1 & t2slo2)
39067 s[1] = t2shi0 ^ (~t2shi1 & t2shi2)
39068 s[10] = t2slo5 ^ (~t2slo6 & t2slo7)
39069 s[11] = t2shi5 ^ (~t2shi6 & t2shi7)
39070 s[20] = t2slo10 ^ (~t2slo11 & t2slo12)
39071 s[21] = t2shi10 ^ (~t2shi11 & t2shi12)
39072 s[30] = t2slo15 ^ (~t2slo16 & t2slo17)
39073 s[31] = t2shi15 ^ (~t2shi16 & t2shi17)
39074 s[40] = t2slo20 ^ (~t2slo21 & t2slo22)
39075 s[41] = t2shi20 ^ (~t2shi21 & t2shi22)
39076 s[2] = t2slo1 ^ (~t2slo2 & t2slo3)
39077 s[3] = t2shi1 ^ (~t2shi2 & t2shi3)
39078 s[12] = t2slo6 ^ (~t2slo7 & t2slo8)
39079 s[13] = t2shi6 ^ (~t2shi7 & t2shi8)
39080 s[22] = t2slo11 ^ (~t2slo12 & t2slo13)
39081 s[23] = t2shi11 ^ (~t2shi12 & t2shi13)
39082 s[32] = t2slo16 ^ (~t2slo17 & t2slo18)
39083 s[33] = t2shi16 ^ (~t2shi17 & t2shi18)
39084 s[42] = t2slo21 ^ (~t2slo22 & t2slo23)
39085 s[43] = t2shi21 ^ (~t2shi22 & t2shi23)
39086 s[4] = t2slo2 ^ (~t2slo3 & t2slo4)
39087 s[5] = t2shi2 ^ (~t2shi3 & t2shi4)
39088 s[14] = t2slo7 ^ (~t2slo8 & t2slo9)
39089 s[15] = t2shi7 ^ (~t2shi8 & t2shi9)
39090 s[24] = t2slo12 ^ (~t2slo13 & t2slo14)
39091 s[25] = t2shi12 ^ (~t2shi13 & t2shi14)
39092 s[34] = t2slo17 ^ (~t2slo18 & t2slo19)
39093 s[35] = t2shi17 ^ (~t2shi18 & t2shi19)
39094 s[44] = t2slo22 ^ (~t2slo23 & t2slo24)
39095 s[45] = t2shi22 ^ (~t2shi23 & t2shi24)
39096 s[6] = t2slo3 ^ (~t2slo4 & t2slo0)
39097 s[7] = t2shi3 ^ (~t2shi4 & t2shi0)
39098 s[16] = t2slo8 ^ (~t2slo9 & t2slo5)
39099 s[17] = t2shi8 ^ (~t2shi9 & t2shi5)
39100 s[26] = t2slo13 ^ (~t2slo14 & t2slo10)
39101 s[27] = t2shi13 ^ (~t2shi14 & t2shi10)
39102 s[36] = t2slo18 ^ (~t2slo19 & t2slo15)
39103 s[37] = t2shi18 ^ (~t2shi19 & t2shi15)
39104 s[46] = t2slo23 ^ (~t2slo24 & t2slo20)
39105 s[47] = t2shi23 ^ (~t2shi24 & t2shi20)
39106 s[8] = t2slo4 ^ (~t2slo0 & t2slo1)
39107 s[9] = t2shi4 ^ (~t2shi0 & t2shi1)
39108 s[18] = t2slo9 ^ (~t2slo5 & t2slo6)
39109 s[19] = t2shi9 ^ (~t2shi5 & t2shi6)
39110 s[28] = t2slo14 ^ (~t2slo10 & t2slo11)
39111 s[29] = t2shi14 ^ (~t2shi10 & t2shi11)
39112 s[38] = t2slo19 ^ (~t2slo15 & t2slo16)
39113 s[39] = t2shi19 ^ (~t2shi15 & t2shi16)
39114 s[48] = t2slo24 ^ (~t2slo20 & t2slo21)
39115 s[49] = t2shi24 ^ (~t2shi20 & t2shi21)
39116
39117 // iota
39118 s[0] ^= P1600_ROUND_CONSTANTS[round * 2]
39119 s[1] ^= P1600_ROUND_CONSTANTS[round * 2 + 1]
39120 }
39121}
39122
39123},{}],70:[function(require,module,exports){
39124(function (Buffer){
39125'use strict'
39126var keccakState = require('./keccak-state-unroll')
ebd8d4e8 39127
8b095871
IC
39128function Keccak () {
39129 // much faster than `new Array(50)`
39130 this.state = [
39131 0, 0, 0, 0, 0,
39132 0, 0, 0, 0, 0,
39133 0, 0, 0, 0, 0,
39134 0, 0, 0, 0, 0,
39135 0, 0, 0, 0, 0
39136 ]
ebd8d4e8 39137
8b095871
IC
39138 this.blockSize = null
39139 this.count = 0
39140 this.squeezing = false
39141}
ebd8d4e8 39142
8b095871
IC
39143Keccak.prototype.initialize = function (rate, capacity) {
39144 for (var i = 0; i < 50; ++i) this.state[i] = 0
39145 this.blockSize = rate / 8
39146 this.count = 0
39147 this.squeezing = false
39148}
39149
39150Keccak.prototype.absorb = function (data) {
39151 for (var i = 0; i < data.length; ++i) {
39152 this.state[~~(this.count / 4)] ^= data[i] << (8 * (this.count % 4))
39153 this.count += 1
39154 if (this.count === this.blockSize) {
39155 keccakState.p1600(this.state)
39156 this.count = 0
ebd8d4e8
IC
39157 }
39158 }
8b095871 39159}
ebd8d4e8 39160
8b095871
IC
39161Keccak.prototype.absorbLastFewBits = function (bits) {
39162 this.state[~~(this.count / 4)] ^= bits << (8 * (this.count % 4))
39163 if ((bits & 0x80) !== 0 && this.count === (this.blockSize - 1)) keccakState.p1600(this.state)
39164 this.state[~~((this.blockSize - 1) / 4)] ^= 0x80 << (8 * ((this.blockSize - 1) % 4))
39165 keccakState.p1600(this.state)
39166 this.count = 0
39167 this.squeezing = true
ebd8d4e8
IC
39168}
39169
8b095871
IC
39170Keccak.prototype.squeeze = function (length) {
39171 if (!this.squeezing) this.absorbLastFewBits(0x01)
ebd8d4e8 39172
8b095871
IC
39173 var output = Buffer.allocUnsafe(length)
39174 for (var i = 0; i < length; ++i) {
39175 output[i] = (this.state[~~(this.count / 4)] >>> (8 * (this.count % 4))) & 0xff
39176 this.count += 1
39177 if (this.count === this.blockSize) {
39178 keccakState.p1600(this.state)
39179 this.count = 0
ebd8d4e8 39180 }
8b095871 39181 }
ebd8d4e8 39182
8b095871
IC
39183 return output
39184}
ebd8d4e8 39185
8b095871
IC
39186Keccak.prototype.copy = function (dest) {
39187 for (var i = 0; i < 50; ++i) dest.state[i] = this.state[i]
39188 dest.blockSize = this.blockSize
39189 dest.count = this.count
39190 dest.squeezing = this.squeezing
39191}
ebd8d4e8 39192
8b095871 39193module.exports = Keccak
ebd8d4e8 39194
8b095871
IC
39195}).call(this,require("buffer").Buffer)
39196},{"./keccak-state-unroll":69,"buffer":5}],71:[function(require,module,exports){
39197(function (Buffer){
39198/*
39199CryptoJS v3.1.2
39200code.google.com/p/crypto-js
39201(c) 2009-2013 by Jeff Mott. All rights reserved.
39202code.google.com/p/crypto-js/wiki/License
39203*/
39204/** @preserve
39205(c) 2012 by Cédric Mesnil. All rights reserved.
ebd8d4e8 39206
8b095871 39207Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
ebd8d4e8 39208
8b095871
IC
39209 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
39210 - 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.
39211
39212THIS 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.
39213*/
39214
39215// constants table
39216var zl = [
39217 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
39218 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
39219 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
39220 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
39221 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
39222]
39223
39224var zr = [
39225 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
39226 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
39227 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
39228 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
39229 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
39230]
39231
39232var sl = [
39233 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
39234 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
39235 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
39236 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
39237 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
39238]
39239
39240var sr = [
39241 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
39242 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
39243 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
39244 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
39245 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
39246]
39247
39248var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
39249var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
39250
39251function bytesToWords (bytes) {
39252 var words = []
39253 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
39254 words[b >>> 5] |= bytes[i] << (24 - b % 32)
39255 }
39256 return words
ebd8d4e8
IC
39257}
39258
8b095871
IC
39259function wordsToBytes (words) {
39260 var bytes = []
39261 for (var b = 0; b < words.length * 32; b += 8) {
39262 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
39263 }
39264 return bytes
ebd8d4e8
IC
39265}
39266
8b095871
IC
39267function processBlock (H, M, offset) {
39268 // swap endian
39269 for (var i = 0; i < 16; i++) {
39270 var offset_i = offset + i
39271 var M_offset_i = M[offset_i]
ebd8d4e8 39272
8b095871
IC
39273 // Swap
39274 M[offset_i] = (
39275 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
39276 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
39277 )
39278 }
ebd8d4e8 39279
8b095871
IC
39280 // Working variables
39281 var al, bl, cl, dl, el
39282 var ar, br, cr, dr, er
39283
39284 ar = al = H[0]
39285 br = bl = H[1]
39286 cr = cl = H[2]
39287 dr = dl = H[3]
39288 er = el = H[4]
39289
39290 // computation
39291 var t
39292 for (i = 0; i < 80; i += 1) {
39293 t = (al + M[offset + zl[i]]) | 0
39294 if (i < 16) {
39295 t += f1(bl, cl, dl) + hl[0]
39296 } else if (i < 32) {
39297 t += f2(bl, cl, dl) + hl[1]
39298 } else if (i < 48) {
39299 t += f3(bl, cl, dl) + hl[2]
39300 } else if (i < 64) {
39301 t += f4(bl, cl, dl) + hl[3]
39302 } else {// if (i<80) {
39303 t += f5(bl, cl, dl) + hl[4]
39304 }
39305 t = t | 0
39306 t = rotl(t, sl[i])
39307 t = (t + el) | 0
39308 al = el
39309 el = dl
39310 dl = rotl(cl, 10)
39311 cl = bl
39312 bl = t
39313
39314 t = (ar + M[offset + zr[i]]) | 0
39315 if (i < 16) {
39316 t += f5(br, cr, dr) + hr[0]
39317 } else if (i < 32) {
39318 t += f4(br, cr, dr) + hr[1]
39319 } else if (i < 48) {
39320 t += f3(br, cr, dr) + hr[2]
39321 } else if (i < 64) {
39322 t += f2(br, cr, dr) + hr[3]
39323 } else {// if (i<80) {
39324 t += f1(br, cr, dr) + hr[4]
39325 }
39326
39327 t = t | 0
39328 t = rotl(t, sr[i])
39329 t = (t + er) | 0
39330 ar = er
39331 er = dr
39332 dr = rotl(cr, 10)
39333 cr = br
39334 br = t
39335 }
39336
39337 // intermediate hash value
39338 t = (H[1] + cl + dr) | 0
39339 H[1] = (H[2] + dl + er) | 0
39340 H[2] = (H[3] + el + ar) | 0
39341 H[3] = (H[4] + al + br) | 0
39342 H[4] = (H[0] + bl + cr) | 0
39343 H[0] = t
ebd8d4e8
IC
39344}
39345
8b095871
IC
39346function f1 (x, y, z) {
39347 return ((x) ^ (y) ^ (z))
ebd8d4e8
IC
39348}
39349
8b095871
IC
39350function f2 (x, y, z) {
39351 return (((x) & (y)) | ((~x) & (z)))
39352}
ebd8d4e8 39353
8b095871
IC
39354function f3 (x, y, z) {
39355 return (((x) | (~(y))) ^ (z))
ebd8d4e8
IC
39356}
39357
8b095871
IC
39358function f4 (x, y, z) {
39359 return (((x) & (z)) | ((y) & (~(z))))
ebd8d4e8
IC
39360}
39361
8b095871
IC
39362function f5 (x, y, z) {
39363 return ((x) ^ ((y) | (~(z))))
ebd8d4e8
IC
39364}
39365
8b095871
IC
39366function rotl (x, n) {
39367 return (x << n) | (x >>> (32 - n))
39368}
ebd8d4e8 39369
8b095871
IC
39370function ripemd160 (message) {
39371 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
ebd8d4e8 39372
8b095871
IC
39373 if (typeof message === 'string') {
39374 message = new Buffer(message, 'utf8')
39375 }
ebd8d4e8 39376
8b095871 39377 var m = bytesToWords(message)
ebd8d4e8 39378
8b095871
IC
39379 var nBitsLeft = message.length * 8
39380 var nBitsTotal = message.length * 8
ebd8d4e8 39381
8b095871
IC
39382 // Add padding
39383 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
39384 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
39385 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
39386 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
39387 )
ebd8d4e8 39388
8b095871
IC
39389 for (var i = 0; i < m.length; i += 16) {
39390 processBlock(H, m, i)
ebd8d4e8
IC
39391 }
39392
8b095871
IC
39393 // swap endian
39394 for (i = 0; i < 5; i++) {
39395 // shortcut
39396 var H_i = H[i]
ebd8d4e8 39397
8b095871
IC
39398 // Swap
39399 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
39400 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
ebd8d4e8
IC
39401 }
39402
8b095871
IC
39403 var digestbytes = wordsToBytes(H)
39404 return new Buffer(digestbytes)
ebd8d4e8
IC
39405}
39406
8b095871 39407module.exports = ripemd160
ebd8d4e8 39408
8b095871
IC
39409}).call(this,require("buffer").Buffer)
39410},{"buffer":5}],72:[function(require,module,exports){
39411(function (Buffer){
39412const assert = require('assert')
39413/**
39414 * RLP Encoding based on: https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP
39415 * This function takes in a data, convert it to buffer if not, and a length for recursion
39416 *
39417 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
39418 * @returns {Buffer} - returns buffer of encoded data
39419 **/
39420exports.encode = function (input) {
39421 if (input instanceof Array) {
39422 var output = []
39423 for (var i = 0; i < input.length; i++) {
39424 output.push(exports.encode(input[i]))
39425 }
39426 var buf = Buffer.concat(output)
39427 return Buffer.concat([encodeLength(buf.length, 192), buf])
39428 } else {
39429 input = toBuffer(input)
39430 if (input.length === 1 && input[0] < 128) {
39431 return input
39432 } else {
39433 return Buffer.concat([encodeLength(input.length, 128), input])
39434 }
39435 }
ebd8d4e8
IC
39436}
39437
8b095871
IC
39438function safeParseInt (v, base) {
39439 if (v.slice(0, 2) === '00') {
39440 throw (new Error('invalid RLP: extra zeros'))
39441 }
ebd8d4e8 39442
8b095871 39443 return parseInt(v, base)
ebd8d4e8
IC
39444}
39445
8b095871
IC
39446function encodeLength (len, offset) {
39447 if (len < 56) {
39448 return new Buffer([len + offset])
39449 } else {
39450 var hexLength = intToHex(len)
39451 var lLength = hexLength.length / 2
39452 var firstByte = intToHex(offset + 55 + lLength)
39453 return new Buffer(firstByte + hexLength, 'hex')
39454 }
39455}
ebd8d4e8 39456
8b095871
IC
39457/**
39458 * RLP Decoding based on: {@link https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP|RLP}
39459 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
39460 * @returns {Array} - returns decode Array of Buffers containg the original message
39461 **/
39462exports.decode = function (input, stream) {
39463 if (!input || input.length === 0) {
39464 return new Buffer([])
39465 }
ebd8d4e8 39466
8b095871
IC
39467 input = toBuffer(input)
39468 var decoded = _decode(input)
ab78acc6 39469
8b095871
IC
39470 if (stream) {
39471 return decoded
39472 }
ebd8d4e8 39473
8b095871
IC
39474 assert.equal(decoded.remainder.length, 0, 'invalid remainder')
39475 return decoded.data
ebd8d4e8
IC
39476}
39477
8b095871
IC
39478exports.getLength = function (input) {
39479 if (!input || input.length === 0) {
39480 return new Buffer([])
ab78acc6
IC
39481 }
39482
8b095871
IC
39483 input = toBuffer(input)
39484 var firstByte = input[0]
39485 if (firstByte <= 0x7f) {
39486 return input.length
39487 } else if (firstByte <= 0xb7) {
39488 return firstByte - 0x7f
39489 } else if (firstByte <= 0xbf) {
39490 return firstByte - 0xb6
39491 } else if (firstByte <= 0xf7) {
39492 // a list between 0-55 bytes long
39493 return firstByte - 0xbf
39494 } else {
39495 // a list over 55 bytes long
39496 var llength = firstByte - 0xf6
39497 var length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
39498 return llength + length
39499 }
ebd8d4e8
IC
39500}
39501
8b095871
IC
39502function _decode (input) {
39503 var length, llength, data, innerRemainder, d
39504 var decoded = []
39505 var firstByte = input[0]
ebd8d4e8 39506
8b095871
IC
39507 if (firstByte <= 0x7f) {
39508 // a single byte whose value is in the [0x00, 0x7f] range, that byte is its own RLP encoding.
39509 return {
39510 data: input.slice(0, 1),
39511 remainder: input.slice(1)
39512 }
39513 } else if (firstByte <= 0xb7) {
39514 // string is 0-55 bytes long. A single byte with value 0x80 plus the length of the string followed by the string
39515 // The range of the first byte is [0x80, 0xb7]
39516 length = firstByte - 0x7f
ebd8d4e8 39517
8b095871
IC
39518 // set 0x80 null to 0
39519 if (firstByte === 0x80) {
39520 data = new Buffer([])
39521 } else {
39522 data = input.slice(1, length)
39523 }
ebd8d4e8 39524
8b095871
IC
39525 if (length === 2 && data[0] < 0x80) {
39526 throw new Error('invalid rlp encoding: byte must be less 0x80')
39527 }
ebd8d4e8 39528
8b095871
IC
39529 return {
39530 data: data,
39531 remainder: input.slice(length)
39532 }
39533 } else if (firstByte <= 0xbf) {
39534 llength = firstByte - 0xb6
39535 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
39536 data = input.slice(llength, length + llength)
39537 if (data.length < length) {
39538 throw (new Error('invalid RLP'))
39539 }
ebd8d4e8 39540
8b095871
IC
39541 return {
39542 data: data,
39543 remainder: input.slice(length + llength)
39544 }
39545 } else if (firstByte <= 0xf7) {
39546 // a list between 0-55 bytes long
39547 length = firstByte - 0xbf
39548 innerRemainder = input.slice(1, length)
39549 while (innerRemainder.length) {
39550 d = _decode(innerRemainder)
39551 decoded.push(d.data)
39552 innerRemainder = d.remainder
39553 }
ebd8d4e8 39554
8b095871
IC
39555 return {
39556 data: decoded,
39557 remainder: input.slice(length)
39558 }
39559 } else {
39560 // a list over 55 bytes long
39561 llength = firstByte - 0xf6
39562 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
39563 var totalLength = llength + length
39564 if (totalLength > input.length) {
39565 throw new Error('invalid rlp: total length is larger than the data')
39566 }
ab78acc6 39567
8b095871
IC
39568 innerRemainder = input.slice(llength, totalLength)
39569 if (innerRemainder.length === 0) {
39570 throw new Error('invalid rlp, List has a invalid length')
39571 }
ab78acc6 39572
8b095871
IC
39573 while (innerRemainder.length) {
39574 d = _decode(innerRemainder)
39575 decoded.push(d.data)
39576 innerRemainder = d.remainder
39577 }
39578 return {
39579 data: decoded,
39580 remainder: input.slice(totalLength)
39581 }
ab78acc6 39582 }
8b095871 39583}
ab78acc6 39584
8b095871
IC
39585function isHexPrefixed (str) {
39586 return str.slice(0, 2) === '0x'
ab78acc6
IC
39587}
39588
8b095871
IC
39589// Removes 0x from a given String
39590function stripHexPrefix (str) {
39591 if (typeof str !== 'string') {
39592 return str
39593 }
39594 return isHexPrefixed(str) ? str.slice(2) : str
39595}
ab78acc6 39596
8b095871
IC
39597function intToHex (i) {
39598 var hex = i.toString(16)
39599 if (hex.length % 2) {
39600 hex = '0' + hex
ab78acc6
IC
39601 }
39602
8b095871 39603 return hex
ebd8d4e8
IC
39604}
39605
8b095871
IC
39606function padToEven (a) {
39607 if (a.length % 2) a = '0' + a
39608 return a
ebd8d4e8
IC
39609}
39610
8b095871
IC
39611function intToBuffer (i) {
39612 var hex = intToHex(i)
39613 return new Buffer(hex, 'hex')
ebd8d4e8
IC
39614}
39615
8b095871
IC
39616function toBuffer (v) {
39617 if (!Buffer.isBuffer(v)) {
39618 if (typeof v === 'string') {
39619 if (isHexPrefixed(v)) {
39620 v = new Buffer(padToEven(stripHexPrefix(v)), 'hex')
39621 } else {
39622 v = new Buffer(v)
39623 }
39624 } else if (typeof v === 'number') {
39625 if (!v) {
39626 v = new Buffer([])
39627 } else {
39628 v = intToBuffer(v)
39629 }
39630 } else if (v === null || v === undefined) {
39631 v = new Buffer([])
39632 } else if (v.toArray) {
39633 // converts a BN to a Buffer
39634 v = new Buffer(v.toArray())
39635 } else {
39636 throw new Error('invalid type')
39637 }
39638 }
39639 return v
ebd8d4e8
IC
39640}
39641
8b095871
IC
39642}).call(this,require("buffer").Buffer)
39643},{"assert":1,"buffer":5}],73:[function(require,module,exports){
39644'use strict'
39645module.exports = require('./lib')(require('./lib/elliptic'))
ebd8d4e8 39646
8b095871
IC
39647},{"./lib":77,"./lib/elliptic":76}],74:[function(require,module,exports){
39648(function (Buffer){
39649'use strict'
39650var toString = Object.prototype.toString
ebd8d4e8 39651
8b095871
IC
39652// TypeError
39653exports.isArray = function (value, message) {
39654 if (!Array.isArray(value)) throw TypeError(message)
ebd8d4e8
IC
39655}
39656
8b095871
IC
39657exports.isBoolean = function (value, message) {
39658 if (toString.call(value) !== '[object Boolean]') throw TypeError(message)
39659}
ebd8d4e8 39660
8b095871
IC
39661exports.isBuffer = function (value, message) {
39662 if (!Buffer.isBuffer(value)) throw TypeError(message)
ebd8d4e8
IC
39663}
39664
8b095871
IC
39665exports.isFunction = function (value, message) {
39666 if (toString.call(value) !== '[object Function]') throw TypeError(message)
ebd8d4e8
IC
39667}
39668
8b095871
IC
39669exports.isNumber = function (value, message) {
39670 if (toString.call(value) !== '[object Number]') throw TypeError(message)
39671}
ab78acc6 39672
8b095871
IC
39673exports.isObject = function (value, message) {
39674 if (toString.call(value) !== '[object Object]') throw TypeError(message)
39675}
ebd8d4e8 39676
8b095871
IC
39677// RangeError
39678exports.isBufferLength = function (buffer, length, message) {
39679 if (buffer.length !== length) throw RangeError(message)
39680}
ebd8d4e8 39681
8b095871
IC
39682exports.isBufferLength2 = function (buffer, length1, length2, message) {
39683 if (buffer.length !== length1 && buffer.length !== length2) throw RangeError(message)
ab78acc6
IC
39684}
39685
8b095871
IC
39686exports.isLengthGTZero = function (value, message) {
39687 if (value.length === 0) throw RangeError(message)
ebd8d4e8
IC
39688}
39689
8b095871
IC
39690exports.isNumberInInterval = function (number, x, y, message) {
39691 if (number <= x || number >= y) throw RangeError(message)
ebd8d4e8
IC
39692}
39693
8b095871
IC
39694}).call(this,{"isBuffer":require("../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
39695},{"../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js":10}],75:[function(require,module,exports){
ebd8d4e8 39696(function (Buffer){
8b095871
IC
39697'use strict'
39698var bip66 = require('bip66')
39699
39700var EC_PRIVKEY_EXPORT_DER_COMPRESSED = new Buffer([
39701 // begin
39702 0x30, 0x81, 0xd3, 0x02, 0x01, 0x01, 0x04, 0x20,
39703 // private key
39704 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39705 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39706 // middle
39707 0xa0, 0x81, 0x85, 0x30, 0x81, 0x82, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
39708 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
39709 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
39710 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
39711 0x21, 0x02, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
39712 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
39713 0x17, 0x98, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
39714 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
39715 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x24, 0x03, 0x22, 0x00,
39716 // public key
39717 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39718 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39719 0x00
39720])
39721
39722var EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED = new Buffer([
39723 // begin
39724 0x30, 0x82, 0x01, 0x13, 0x02, 0x01, 0x01, 0x04, 0x20,
39725 // private key
39726 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39727 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39728 // middle
39729 0xa0, 0x81, 0xa5, 0x30, 0x81, 0xa2, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
39730 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
39731 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
39732 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
39733 0x41, 0x04, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
39734 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
39735 0x17, 0x98, 0x48, 0x3a, 0xda, 0x77, 0x26, 0xa3, 0xc4, 0x65, 0x5d, 0xa4, 0xfb, 0xfc, 0x0E, 0x11,
39736 0x08, 0xa8, 0xfd, 0x17, 0xb4, 0x48, 0xa6, 0x85, 0x54, 0x19, 0x9c, 0x47, 0xd0, 0x8f, 0xfb, 0x10,
39737 0xd4, 0xb8, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
39738 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
39739 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x44, 0x03, 0x42, 0x00,
39740 // public key
39741 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39742 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39743 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39744 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39745 0x00
39746])
39747
39748var ZERO_BUFFER_32 = new Buffer([
39749 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39750 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
39751])
39752
39753exports.privateKeyExport = function (privateKey, publicKey, compressed) {
39754 var result = new Buffer(compressed ? EC_PRIVKEY_EXPORT_DER_COMPRESSED : EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED)
39755 privateKey.copy(result, compressed ? 8 : 9)
39756 publicKey.copy(result, compressed ? 181 : 214)
39757 return result
39758}
39759
39760exports.privateKeyImport = function (privateKey) {
39761 var length = privateKey.length
39762
39763 // sequence header
39764 var index = 0
39765 if (length < index + 1 || privateKey[index] !== 0x30) return
39766 index += 1
39767
39768 // sequence length constructor
39769 if (length < index + 1 || !(privateKey[index] & 0x80)) return
39770
39771 var lenb = privateKey[index] & 0x7f
39772 index += 1
39773 if (lenb < 1 || lenb > 2) return
39774 if (length < index + lenb) return
39775
39776 // sequence length
39777 var len = privateKey[index + lenb - 1] | (lenb > 1 ? privateKey[index + lenb - 2] << 8 : 0)
39778 index += lenb
39779 if (length < index + len) return
39780
39781 // sequence element 0: version number (=1)
39782 if (length < index + 3 ||
39783 privateKey[index] !== 0x02 ||
39784 privateKey[index + 1] !== 0x01 ||
39785 privateKey[index + 2] !== 0x01) {
39786 return
39787 }
39788 index += 3
ab78acc6 39789
8b095871
IC
39790 // sequence element 1: octet string, up to 32 bytes
39791 if (length < index + 2 ||
39792 privateKey[index] !== 0x04 ||
39793 privateKey[index + 1] > 0x20 ||
39794 length < index + 2 + privateKey[index + 1]) {
39795 return
39796 }
ab78acc6 39797
8b095871 39798 return privateKey.slice(index + 2, index + 2 + privateKey[index + 1])
ab78acc6 39799}
ebd8d4e8 39800
8b095871
IC
39801exports.signatureExport = function (sigObj) {
39802 var r = Buffer.concat([new Buffer([0]), sigObj.r])
39803 for (var lenR = 33, posR = 0; lenR > 1 && r[posR] === 0x00 && !(r[posR + 1] & 0x80); --lenR, ++posR);
ebd8d4e8 39804
8b095871
IC
39805 var s = Buffer.concat([new Buffer([0]), sigObj.s])
39806 for (var lenS = 33, posS = 0; lenS > 1 && s[posS] === 0x00 && !(s[posS + 1] & 0x80); --lenS, ++posS);
ab78acc6 39807
8b095871
IC
39808 return bip66.encode(r.slice(posR), s.slice(posS))
39809}
ab78acc6 39810
8b095871
IC
39811exports.signatureImport = function (sig) {
39812 var r = new Buffer(ZERO_BUFFER_32)
39813 var s = new Buffer(ZERO_BUFFER_32)
ab78acc6 39814
8b095871
IC
39815 try {
39816 var sigObj = bip66.decode(sig)
39817 if (sigObj.r.length === 33 && sigObj.r[0] === 0x00) sigObj.r = sigObj.r.slice(1)
39818 if (sigObj.r.length > 32) throw new Error('R length is too long')
39819 if (sigObj.s.length === 33 && sigObj.s[0] === 0x00) sigObj.s = sigObj.s.slice(1)
39820 if (sigObj.s.length > 32) throw new Error('S length is too long')
39821 } catch (err) {
39822 return
ab78acc6
IC
39823 }
39824
8b095871
IC
39825 sigObj.r.copy(r, 32 - sigObj.r.length)
39826 sigObj.s.copy(s, 32 - sigObj.s.length)
ab78acc6 39827
8b095871
IC
39828 return { r: r, s: s }
39829}
ab78acc6 39830
8b095871
IC
39831exports.signatureImportLax = function (sig) {
39832 var r = new Buffer(ZERO_BUFFER_32)
39833 var s = new Buffer(ZERO_BUFFER_32)
ab78acc6 39834
8b095871
IC
39835 var length = sig.length
39836 var index = 0
ab78acc6 39837
8b095871
IC
39838 // sequence tag byte
39839 if (sig[index++] !== 0x30) return
39840
39841 // sequence length byte
39842 var lenbyte = sig[index++]
39843 if (lenbyte & 0x80) {
39844 index += lenbyte - 0x80
39845 if (index > length) return
ab78acc6
IC
39846 }
39847
8b095871
IC
39848 // sequence tag byte for r
39849 if (sig[index++] !== 0x02) return
39850
39851 // length for r
39852 var rlen = sig[index++]
39853 if (rlen & 0x80) {
39854 lenbyte = rlen - 0x80
39855 if (index + lenbyte > length) return
39856 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
39857 for (rlen = 0; lenbyte > 0; index += 1, lenbyte -= 1) rlen = (rlen << 8) + sig[index]
ab78acc6 39858 }
8b095871
IC
39859 if (rlen > length - index) return
39860 var rindex = index
39861 index += rlen
ab78acc6 39862
8b095871
IC
39863 // sequence tag byte for s
39864 if (sig[index++] !== 0x02) return
ab78acc6 39865
8b095871
IC
39866 // length for s
39867 var slen = sig[index++]
39868 if (slen & 0x80) {
39869 lenbyte = slen - 0x80
39870 if (index + lenbyte > length) return
39871 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
39872 for (slen = 0; lenbyte > 0; index += 1, lenbyte -= 1) slen = (slen << 8) + sig[index]
ab78acc6 39873 }
8b095871
IC
39874 if (slen > length - index) return
39875 var sindex = index
39876 index += slen
ab78acc6 39877
8b095871
IC
39878 // ignore leading zeros in r
39879 for (; rlen > 0 && sig[rindex] === 0x00; rlen -= 1, rindex += 1);
39880 // copy r value
39881 if (rlen > 32) return
39882 var rvalue = sig.slice(rindex, rindex + rlen)
39883 rvalue.copy(r, 32 - rvalue.length)
ab78acc6 39884
8b095871
IC
39885 // ignore leading zeros in s
39886 for (; slen > 0 && sig[sindex] === 0x00; slen -= 1, sindex += 1);
39887 // copy s value
39888 if (slen > 32) return
39889 var svalue = sig.slice(sindex, sindex + slen)
39890 svalue.copy(s, 32 - svalue.length)
39891
39892 return { r: r, s: s }
ab78acc6
IC
39893}
39894
8b095871
IC
39895}).call(this,require("buffer").Buffer)
39896},{"bip66":32,"buffer":5}],76:[function(require,module,exports){
39897(function (Buffer){
39898'use strict'
39899var createHash = require('create-hash')
39900var BN = require('bn.js')
39901var EC = require('elliptic').ec
39902
39903var messages = require('../messages.json')
39904
39905var ec = new EC('secp256k1')
39906var ecparams = ec.curve
39907
39908function loadCompressedPublicKey (first, xBuffer) {
39909 var x = new BN(xBuffer)
39910
39911 // overflow
39912 if (x.cmp(ecparams.p) >= 0) return null
39913 x = x.toRed(ecparams.red)
39914
39915 // compute corresponding Y
39916 var y = x.redSqr().redIMul(x).redIAdd(ecparams.b).redSqrt()
39917 if ((first === 0x03) !== y.isOdd()) y = y.redNeg()
39918
39919 return ec.keyPair({ pub: { x: x, y: y } })
ebd8d4e8
IC
39920}
39921
8b095871
IC
39922function loadUncompressedPublicKey (first, xBuffer, yBuffer) {
39923 var x = new BN(xBuffer)
39924 var y = new BN(yBuffer)
ebd8d4e8 39925
8b095871
IC
39926 // overflow
39927 if (x.cmp(ecparams.p) >= 0 || y.cmp(ecparams.p) >= 0) return null
ebd8d4e8 39928
8b095871
IC
39929 x = x.toRed(ecparams.red)
39930 y = y.toRed(ecparams.red)
ebd8d4e8 39931
8b095871
IC
39932 // is odd flag
39933 if ((first === 0x06 || first === 0x07) && y.isOdd() !== (first === 0x07)) return null
ab78acc6 39934
8b095871
IC
39935 // x*x*x + b = y*y
39936 var x3 = x.redSqr().redIMul(x)
39937 if (!y.redSqr().redISub(x3.redIAdd(ecparams.b)).isZero()) return null
ebd8d4e8 39938
8b095871 39939 return ec.keyPair({ pub: { x: x, y: y } })
ebd8d4e8
IC
39940}
39941
8b095871
IC
39942function loadPublicKey (publicKey) {
39943 var first = publicKey[0]
39944 switch (first) {
39945 case 0x02:
39946 case 0x03:
39947 if (publicKey.length !== 33) return null
39948 return loadCompressedPublicKey(first, publicKey.slice(1, 33))
39949 case 0x04:
39950 case 0x06:
39951 case 0x07:
39952 if (publicKey.length !== 65) return null
39953 return loadUncompressedPublicKey(first, publicKey.slice(1, 33), publicKey.slice(33, 65))
39954 default:
39955 return null
ebd8d4e8 39956 }
8b095871 39957}
ebd8d4e8 39958
8b095871
IC
39959exports.privateKeyVerify = function (privateKey) {
39960 var bn = new BN(privateKey)
39961 return bn.cmp(ecparams.n) < 0 && !bn.isZero()
39962}
ebd8d4e8 39963
8b095871
IC
39964exports.privateKeyExport = function (privateKey, compressed) {
39965 var d = new BN(privateKey)
39966 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PRIVATE_KEY_EXPORT_DER_FAIL)
ab78acc6 39967
8b095871 39968 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
ebd8d4e8
IC
39969}
39970
8b095871
IC
39971exports.privateKeyTweakAdd = function (privateKey, tweak) {
39972 var bn = new BN(tweak)
39973 if (bn.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
ab78acc6 39974
8b095871
IC
39975 bn.iadd(new BN(privateKey))
39976 if (bn.cmp(ecparams.n) >= 0) bn.isub(ecparams.n)
39977 if (bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
ab78acc6 39978
8b095871
IC
39979 return bn.toArrayLike(Buffer, 'be', 32)
39980}
39981
39982exports.privateKeyTweakMul = function (privateKey, tweak) {
39983 var bn = new BN(tweak)
39984 if (bn.cmp(ecparams.n) >= 0 || bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_MUL_FAIL)
39985
39986 bn.imul(new BN(privateKey))
39987 if (bn.cmp(ecparams.n)) bn = bn.umod(ecparams.n)
39988
39989 return bn.toArrayLike(Buffer, 'be', 32)
39990}
39991
39992exports.publicKeyCreate = function (privateKey, compressed) {
39993 var d = new BN(privateKey)
39994 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PUBLIC_KEY_CREATE_FAIL)
39995
39996 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
39997}
39998
39999exports.publicKeyConvert = function (publicKey, compressed) {
40000 var pair = loadPublicKey(publicKey)
40001 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 40002
8b095871 40003 return new Buffer(pair.getPublic(compressed, true))
ab78acc6
IC
40004}
40005
8b095871
IC
40006exports.publicKeyVerify = function (publicKey) {
40007 return loadPublicKey(publicKey) !== null
40008}
ab78acc6 40009
8b095871
IC
40010exports.publicKeyTweakAdd = function (publicKey, tweak, compressed) {
40011 var pair = loadPublicKey(publicKey)
40012 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 40013
8b095871
IC
40014 tweak = new BN(tweak)
40015 if (tweak.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_ADD_FAIL)
ab78acc6 40016
8b095871
IC
40017 return new Buffer(ecparams.g.mul(tweak).add(pair.pub).encode(true, compressed))
40018}
ab78acc6 40019
8b095871
IC
40020exports.publicKeyTweakMul = function (publicKey, tweak, compressed) {
40021 var pair = loadPublicKey(publicKey)
40022 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 40023
8b095871
IC
40024 tweak = new BN(tweak)
40025 if (tweak.cmp(ecparams.n) >= 0 || tweak.isZero()) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_MUL_FAIL)
ab78acc6 40026
8b095871
IC
40027 return new Buffer(pair.pub.mul(tweak).encode(true, compressed))
40028}
ab78acc6 40029
8b095871
IC
40030exports.publicKeyCombine = function (publicKeys, compressed) {
40031 var pairs = new Array(publicKeys.length)
40032 for (var i = 0; i < publicKeys.length; ++i) {
40033 pairs[i] = loadPublicKey(publicKeys[i])
40034 if (pairs[i] === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6
IC
40035 }
40036
8b095871
IC
40037 var point = pairs[0].pub
40038 for (var j = 1; j < pairs.length; ++j) point = point.add(pairs[j].pub)
40039 if (point.isInfinity()) throw new Error(messages.EC_PUBLIC_KEY_COMBINE_FAIL)
ab78acc6 40040
8b095871
IC
40041 return new Buffer(point.encode(true, compressed))
40042}
ab78acc6 40043
8b095871
IC
40044exports.signatureNormalize = function (signature) {
40045 var r = new BN(signature.slice(0, 32))
40046 var s = new BN(signature.slice(32, 64))
40047 if (r.cmp(ecparams.n) >= 0 || s.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
40048
40049 var result = new Buffer(signature)
40050 if (s.cmp(ec.nh) === 1) ecparams.n.sub(s).toArrayLike(Buffer, 'be', 32).copy(result, 32)
40051
40052 return result
ab78acc6
IC
40053}
40054
8b095871
IC
40055exports.signatureExport = function (signature) {
40056 var r = signature.slice(0, 32)
40057 var s = signature.slice(32, 64)
40058 if (new BN(r).cmp(ecparams.n) >= 0 || new BN(s).cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
40059
40060 return { r: r, s: s }
ab78acc6
IC
40061}
40062
8b095871
IC
40063exports.signatureImport = function (sigObj) {
40064 var r = new BN(sigObj.r)
40065 if (r.cmp(ecparams.n) >= 0) r = new BN(0)
40066
40067 var s = new BN(sigObj.s)
40068 if (s.cmp(ecparams.n) >= 0) s = new BN(0)
40069
40070 return Buffer.concat([
40071 r.toArrayLike(Buffer, 'be', 32),
40072 s.toArrayLike(Buffer, 'be', 32)
40073 ])
ab78acc6
IC
40074}
40075
8b095871
IC
40076exports.sign = function (message, privateKey, noncefn, data) {
40077 if (typeof noncefn === 'function') {
40078 var getNonce = noncefn
40079 noncefn = function (counter) {
40080 var nonce = getNonce(message, privateKey, null, data, counter)
40081 if (!Buffer.isBuffer(nonce) || nonce.length !== 32) throw new Error(messages.ECDSA_SIGN_FAIL)
ebd8d4e8 40082
8b095871
IC
40083 return new BN(nonce)
40084 }
ab78acc6 40085 }
ebd8d4e8 40086
8b095871
IC
40087 var d = new BN(privateKey)
40088 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.ECDSA_SIGN_FAIL)
ebd8d4e8 40089
8b095871
IC
40090 var result = ec.sign(message, privateKey, { canonical: true, k: noncefn, pers: data })
40091 return {
40092 signature: Buffer.concat([
40093 result.r.toArrayLike(Buffer, 'be', 32),
40094 result.s.toArrayLike(Buffer, 'be', 32)
40095 ]),
40096 recovery: result.recoveryParam
ebd8d4e8 40097 }
8b095871 40098}
ab78acc6 40099
8b095871
IC
40100exports.verify = function (message, signature, publicKey) {
40101 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
ab78acc6 40102
8b095871
IC
40103 var sigr = new BN(sigObj.r)
40104 var sigs = new BN(sigObj.s)
40105 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
40106 if (sigs.cmp(ec.nh) === 1 || sigr.isZero() || sigs.isZero()) return false
ab78acc6 40107
8b095871
IC
40108 var pair = loadPublicKey(publicKey)
40109 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ebd8d4e8 40110
8b095871
IC
40111 return ec.verify(message, sigObj, {x: pair.pub.x, y: pair.pub.y})
40112}
ebd8d4e8 40113
8b095871
IC
40114exports.recover = function (message, signature, recovery, compressed) {
40115 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
ebd8d4e8 40116
8b095871
IC
40117 var sigr = new BN(sigObj.r)
40118 var sigs = new BN(sigObj.s)
40119 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
ebd8d4e8 40120
8b095871
IC
40121 try {
40122 if (sigr.isZero() || sigs.isZero()) throw new Error()
ebd8d4e8 40123
8b095871
IC
40124 var point = ec.recoverPubKey(message, sigObj, recovery)
40125 return new Buffer(point.encode(true, compressed))
40126 } catch (err) {
40127 throw new Error(messages.ECDSA_RECOVER_FAIL)
40128 }
ebd8d4e8
IC
40129}
40130
8b095871
IC
40131exports.ecdh = function (publicKey, privateKey) {
40132 var shared = exports.ecdhUnsafe(publicKey, privateKey, true)
40133 return createHash('sha256').update(shared).digest()
ebd8d4e8
IC
40134}
40135
8b095871
IC
40136exports.ecdhUnsafe = function (publicKey, privateKey, compressed) {
40137 var pair = loadPublicKey(publicKey)
40138 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 40139
8b095871
IC
40140 var scalar = new BN(privateKey)
40141 if (scalar.cmp(ecparams.n) >= 0 || scalar.isZero()) throw new Error(messages.ECDH_FAIL)
40142
40143 return new Buffer(pair.pub.mul(scalar).encode(true, compressed))
ab78acc6
IC
40144}
40145
8b095871
IC
40146}).call(this,require("buffer").Buffer)
40147},{"../messages.json":78,"bn.js":33,"buffer":5,"create-hash":36,"elliptic":39}],77:[function(require,module,exports){
40148'use strict'
40149var assert = require('./assert')
40150var der = require('./der')
40151var messages = require('./messages.json')
ab78acc6 40152
8b095871
IC
40153function initCompressedValue (value, defaultValue) {
40154 if (value === undefined) return defaultValue
ab78acc6 40155
8b095871
IC
40156 assert.isBoolean(value, messages.COMPRESSED_TYPE_INVALID)
40157 return value
ab78acc6
IC
40158}
40159
8b095871
IC
40160module.exports = function (secp256k1) {
40161 return {
40162 privateKeyVerify: function (privateKey) {
40163 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
40164 return privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)
40165 },
ab78acc6 40166
8b095871
IC
40167 privateKeyExport: function (privateKey, compressed) {
40168 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
40169 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 40170
8b095871
IC
40171 compressed = initCompressedValue(compressed, true)
40172 var publicKey = secp256k1.privateKeyExport(privateKey, compressed)
ab78acc6 40173
8b095871
IC
40174 return der.privateKeyExport(privateKey, publicKey, compressed)
40175 },
ab78acc6 40176
8b095871
IC
40177 privateKeyImport: function (privateKey) {
40178 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
ab78acc6 40179
8b095871
IC
40180 privateKey = der.privateKeyImport(privateKey)
40181 if (privateKey && privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)) return privateKey
ab78acc6 40182
8b095871
IC
40183 throw new Error(messages.EC_PRIVATE_KEY_IMPORT_DER_FAIL)
40184 },
ab78acc6 40185
8b095871
IC
40186 privateKeyTweakAdd: function (privateKey, tweak) {
40187 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
40188 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 40189
8b095871
IC
40190 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
40191 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
ab78acc6 40192
8b095871
IC
40193 return secp256k1.privateKeyTweakAdd(privateKey, tweak)
40194 },
ab78acc6 40195
8b095871
IC
40196 privateKeyTweakMul: function (privateKey, tweak) {
40197 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
40198 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 40199
8b095871
IC
40200 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
40201 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
ab78acc6 40202
8b095871
IC
40203 return secp256k1.privateKeyTweakMul(privateKey, tweak)
40204 },
ab78acc6 40205
8b095871
IC
40206 publicKeyCreate: function (privateKey, compressed) {
40207 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
40208 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 40209
8b095871 40210 compressed = initCompressedValue(compressed, true)
ab78acc6 40211
8b095871
IC
40212 return secp256k1.publicKeyCreate(privateKey, compressed)
40213 },
ab78acc6 40214
8b095871
IC
40215 publicKeyConvert: function (publicKey, compressed) {
40216 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
40217 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6 40218
8b095871
IC
40219 compressed = initCompressedValue(compressed, true)
40220
40221 return secp256k1.publicKeyConvert(publicKey, compressed)
40222 },
40223
40224 publicKeyVerify: function (publicKey) {
40225 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
40226 return secp256k1.publicKeyVerify(publicKey)
40227 },
40228
40229 publicKeyTweakAdd: function (publicKey, tweak, compressed) {
40230 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
40231 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
40232
40233 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
40234 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
40235
40236 compressed = initCompressedValue(compressed, true)
40237
40238 return secp256k1.publicKeyTweakAdd(publicKey, tweak, compressed)
40239 },
40240
40241 publicKeyTweakMul: function (publicKey, tweak, compressed) {
40242 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
40243 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
40244
40245 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
40246 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
40247
40248 compressed = initCompressedValue(compressed, true)
40249
40250 return secp256k1.publicKeyTweakMul(publicKey, tweak, compressed)
40251 },
40252
40253 publicKeyCombine: function (publicKeys, compressed) {
40254 assert.isArray(publicKeys, messages.EC_PUBLIC_KEYS_TYPE_INVALID)
40255 assert.isLengthGTZero(publicKeys, messages.EC_PUBLIC_KEYS_LENGTH_INVALID)
40256 for (var i = 0; i < publicKeys.length; ++i) {
40257 assert.isBuffer(publicKeys[i], messages.EC_PUBLIC_KEY_TYPE_INVALID)
40258 assert.isBufferLength2(publicKeys[i], 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6
IC
40259 }
40260
8b095871 40261 compressed = initCompressedValue(compressed, true)
ab78acc6 40262
8b095871
IC
40263 return secp256k1.publicKeyCombine(publicKeys, compressed)
40264 },
ab78acc6 40265
8b095871
IC
40266 signatureNormalize: function (signature) {
40267 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
40268 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
ab78acc6 40269
8b095871
IC
40270 return secp256k1.signatureNormalize(signature)
40271 },
ab78acc6 40272
8b095871
IC
40273 signatureExport: function (signature) {
40274 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
40275 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
40276
40277 var sigObj = secp256k1.signatureExport(signature)
40278 return der.signatureExport(sigObj)
40279 },
40280
40281 signatureImport: function (sig) {
40282 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
40283 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
40284
40285 var sigObj = der.signatureImport(sig)
40286 if (sigObj) return secp256k1.signatureImport(sigObj)
40287
40288 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
40289 },
40290
40291 signatureImportLax: function (sig) {
40292 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
40293 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
40294
40295 var sigObj = der.signatureImportLax(sig)
40296 if (sigObj) return secp256k1.signatureImport(sigObj)
40297
40298 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
40299 },
40300
40301 sign: function (message, privateKey, options) {
40302 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
40303 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
40304
40305 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
40306 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
40307
40308 var data = null
40309 var noncefn = null
40310 if (options !== undefined) {
40311 assert.isObject(options, messages.OPTIONS_TYPE_INVALID)
40312
40313 if (options.data !== undefined) {
40314 assert.isBuffer(options.data, messages.OPTIONS_DATA_TYPE_INVALID)
40315 assert.isBufferLength(options.data, 32, messages.OPTIONS_DATA_LENGTH_INVALID)
40316 data = options.data
40317 }
40318
40319 if (options.noncefn !== undefined) {
40320 assert.isFunction(options.noncefn, messages.OPTIONS_NONCEFN_TYPE_INVALID)
40321 noncefn = options.noncefn
40322 }
ab78acc6
IC
40323 }
40324
8b095871
IC
40325 return secp256k1.sign(message, privateKey, noncefn, data)
40326 },
ab78acc6 40327
8b095871
IC
40328 verify: function (message, signature, publicKey) {
40329 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
40330 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
ab78acc6 40331
8b095871
IC
40332 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
40333 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
ab78acc6 40334
8b095871
IC
40335 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
40336 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
40337
40338 return secp256k1.verify(message, signature, publicKey)
40339 },
ab78acc6 40340
8b095871
IC
40341 recover: function (message, signature, recovery, compressed) {
40342 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
40343 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
ab78acc6 40344
8b095871
IC
40345 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
40346 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
ab78acc6 40347
8b095871
IC
40348 assert.isNumber(recovery, messages.RECOVERY_ID_TYPE_INVALID)
40349 assert.isNumberInInterval(recovery, -1, 4, messages.RECOVERY_ID_VALUE_INVALID)
ab78acc6 40350
8b095871 40351 compressed = initCompressedValue(compressed, true)
ab78acc6 40352
8b095871
IC
40353 return secp256k1.recover(message, signature, recovery, compressed)
40354 },
ab78acc6 40355
8b095871
IC
40356 ecdh: function (publicKey, privateKey) {
40357 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
40358 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6 40359
8b095871
IC
40360 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
40361 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 40362
8b095871
IC
40363 return secp256k1.ecdh(publicKey, privateKey)
40364 },
ab78acc6 40365
8b095871
IC
40366 ecdhUnsafe: function (publicKey, privateKey, compressed) {
40367 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
40368 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6 40369
8b095871
IC
40370 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
40371 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 40372
8b095871 40373 compressed = initCompressedValue(compressed, true)
ab78acc6 40374
8b095871
IC
40375 return secp256k1.ecdhUnsafe(publicKey, privateKey, compressed)
40376 }
40377 }
40378}
ab78acc6 40379
8b095871
IC
40380},{"./assert":74,"./der":75,"./messages.json":78}],78:[function(require,module,exports){
40381module.exports={
40382 "COMPRESSED_TYPE_INVALID": "compressed should be a boolean",
40383 "EC_PRIVATE_KEY_TYPE_INVALID": "private key should be a Buffer",
40384 "EC_PRIVATE_KEY_LENGTH_INVALID": "private key length is invalid",
40385 "EC_PRIVATE_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting private key is invalid",
40386 "EC_PRIVATE_KEY_TWEAK_MUL_FAIL": "tweak out of range",
40387 "EC_PRIVATE_KEY_EXPORT_DER_FAIL": "couldn't export to DER format",
40388 "EC_PRIVATE_KEY_IMPORT_DER_FAIL": "couldn't import from DER format",
40389 "EC_PUBLIC_KEYS_TYPE_INVALID": "public keys should be an Array",
40390 "EC_PUBLIC_KEYS_LENGTH_INVALID": "public keys Array should have at least 1 element",
40391 "EC_PUBLIC_KEY_TYPE_INVALID": "public key should be a Buffer",
40392 "EC_PUBLIC_KEY_LENGTH_INVALID": "public key length is invalid",
40393 "EC_PUBLIC_KEY_PARSE_FAIL": "the public key could not be parsed or is invalid",
40394 "EC_PUBLIC_KEY_CREATE_FAIL": "private was invalid, try again",
40395 "EC_PUBLIC_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting public key is invalid",
40396 "EC_PUBLIC_KEY_TWEAK_MUL_FAIL": "tweak out of range",
40397 "EC_PUBLIC_KEY_COMBINE_FAIL": "the sum of the public keys is not valid",
40398 "ECDH_FAIL": "scalar was invalid (zero or overflow)",
40399 "ECDSA_SIGNATURE_TYPE_INVALID": "signature should be a Buffer",
40400 "ECDSA_SIGNATURE_LENGTH_INVALID": "signature length is invalid",
40401 "ECDSA_SIGNATURE_PARSE_FAIL": "couldn't parse signature",
40402 "ECDSA_SIGNATURE_PARSE_DER_FAIL": "couldn't parse DER signature",
40403 "ECDSA_SIGNATURE_SERIALIZE_DER_FAIL": "couldn't serialize signature to DER format",
40404 "ECDSA_SIGN_FAIL": "nonce generation function failed or private key is invalid",
40405 "ECDSA_RECOVER_FAIL": "couldn't recover public key from signature",
40406 "MSG32_TYPE_INVALID": "message should be a Buffer",
40407 "MSG32_LENGTH_INVALID": "message length is invalid",
40408 "OPTIONS_TYPE_INVALID": "options should be an Object",
40409 "OPTIONS_DATA_TYPE_INVALID": "options.data should be a Buffer",
40410 "OPTIONS_DATA_LENGTH_INVALID": "options.data length is invalid",
40411 "OPTIONS_NONCEFN_TYPE_INVALID": "options.noncefn should be a Function",
40412 "RECOVERY_ID_TYPE_INVALID": "recovery should be a Number",
40413 "RECOVERY_ID_VALUE_INVALID": "recovery should have value between -1 and 4",
40414 "TWEAK_TYPE_INVALID": "tweak should be a Buffer",
40415 "TWEAK_LENGTH_INVALID": "tweak length is invalid"
40416}
40417
40418},{}],79:[function(require,module,exports){
40419(function (Buffer){
40420// prototype class for hash functions
40421function Hash (blockSize, finalSize) {
40422 this._block = new Buffer(blockSize)
40423 this._finalSize = finalSize
40424 this._blockSize = blockSize
40425 this._len = 0
40426 this._s = 0
40427}
40428
40429Hash.prototype.update = function (data, enc) {
40430 if (typeof data === 'string') {
40431 enc = enc || 'utf8'
40432 data = new Buffer(data, enc)
ab78acc6
IC
40433 }
40434
8b095871
IC
40435 var l = this._len += data.length
40436 var s = this._s || 0
40437 var f = 0
40438 var buffer = this._block
ab78acc6 40439
8b095871
IC
40440 while (s < l) {
40441 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
40442 var ch = (t - f)
ab78acc6 40443
8b095871
IC
40444 for (var i = 0; i < ch; i++) {
40445 buffer[(s % this._blockSize) + i] = data[i + f]
ab78acc6
IC
40446 }
40447
8b095871
IC
40448 s += ch
40449 f += ch
ab78acc6 40450
8b095871
IC
40451 if ((s % this._blockSize) === 0) {
40452 this._update(buffer)
40453 }
ab78acc6 40454 }
8b095871 40455 this._s = s
ab78acc6 40456
8b095871
IC
40457 return this
40458}
ab78acc6 40459
8b095871
IC
40460Hash.prototype.digest = function (enc) {
40461 // Suppose the length of the message M, in bits, is l
40462 var l = this._len * 8
ab78acc6 40463
8b095871
IC
40464 // Append the bit 1 to the end of the message
40465 this._block[this._len % this._blockSize] = 0x80
ab78acc6 40466
8b095871
IC
40467 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
40468 this._block.fill(0, this._len % this._blockSize + 1)
ab78acc6 40469
8b095871
IC
40470 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
40471 this._update(this._block)
40472 this._block.fill(0)
40473 }
ab78acc6 40474
8b095871
IC
40475 // to this append the block which is equal to the number l written in binary
40476 // TODO: handle case where l is > Math.pow(2, 29)
40477 this._block.writeInt32BE(l, this._blockSize - 4)
ebd8d4e8 40478
8b095871 40479 var hash = this._update(this._block) || this._hash()
ebd8d4e8 40480
8b095871 40481 return enc ? hash.toString(enc) : hash
ab78acc6 40482}
ebd8d4e8 40483
8b095871
IC
40484Hash.prototype._update = function () {
40485 throw new Error('_update must be implemented by subclass')
ab78acc6 40486}
8b095871
IC
40487
40488module.exports = Hash
40489
40490}).call(this,require("buffer").Buffer)
40491},{"buffer":5}],80:[function(require,module,exports){
40492var exports = module.exports = function SHA (algorithm) {
40493 algorithm = algorithm.toLowerCase()
40494
40495 var Algorithm = exports[algorithm]
40496 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
40497
40498 return new Algorithm()
ab78acc6 40499}
ebd8d4e8 40500
8b095871
IC
40501exports.sha = require('./sha')
40502exports.sha1 = require('./sha1')
40503exports.sha224 = require('./sha224')
40504exports.sha256 = require('./sha256')
40505exports.sha384 = require('./sha384')
40506exports.sha512 = require('./sha512')
40507
40508},{"./sha":81,"./sha1":82,"./sha224":83,"./sha256":84,"./sha384":85,"./sha512":86}],81:[function(require,module,exports){
40509(function (Buffer){
40510/*
40511 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
40512 * in FIPS PUB 180-1
40513 * This source code is derived from sha1.js of the same repository.
40514 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
40515 * operation was added.
40516 */
40517
40518var inherits = require('inherits')
40519var Hash = require('./hash')
40520
40521var K = [
40522 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
40523]
40524
40525var W = new Array(80)
40526
40527function Sha () {
40528 this.init()
40529 this._w = W
40530
40531 Hash.call(this, 64, 56)
ab78acc6 40532}
ebd8d4e8 40533
8b095871 40534inherits(Sha, Hash)
ebd8d4e8 40535
8b095871
IC
40536Sha.prototype.init = function () {
40537 this._a = 0x67452301
40538 this._b = 0xefcdab89
40539 this._c = 0x98badcfe
40540 this._d = 0x10325476
40541 this._e = 0xc3d2e1f0
ebd8d4e8 40542
8b095871
IC
40543 return this
40544}
ebd8d4e8 40545
8b095871
IC
40546function rotl5 (num) {
40547 return (num << 5) | (num >>> 27)
40548}
ebd8d4e8 40549
8b095871
IC
40550function rotl30 (num) {
40551 return (num << 30) | (num >>> 2)
40552}
ebd8d4e8 40553
8b095871
IC
40554function ft (s, b, c, d) {
40555 if (s === 0) return (b & c) | ((~b) & d)
40556 if (s === 2) return (b & c) | (b & d) | (c & d)
40557 return b ^ c ^ d
40558}
ebd8d4e8 40559
8b095871
IC
40560Sha.prototype._update = function (M) {
40561 var W = this._w
ebd8d4e8 40562
8b095871
IC
40563 var a = this._a | 0
40564 var b = this._b | 0
40565 var c = this._c | 0
40566 var d = this._d | 0
40567 var e = this._e | 0
ebd8d4e8 40568
8b095871
IC
40569 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
40570 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
ebd8d4e8 40571
8b095871
IC
40572 for (var j = 0; j < 80; ++j) {
40573 var s = ~~(j / 20)
40574 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
ebd8d4e8 40575
8b095871
IC
40576 e = d
40577 d = c
40578 c = rotl30(b)
40579 b = a
40580 a = t
40581 }
40582
40583 this._a = (a + this._a) | 0
40584 this._b = (b + this._b) | 0
40585 this._c = (c + this._c) | 0
40586 this._d = (d + this._d) | 0
40587 this._e = (e + this._e) | 0
40588}
40589
40590Sha.prototype._hash = function () {
40591 var H = new Buffer(20)
ab78acc6 40592
8b095871
IC
40593 H.writeInt32BE(this._a | 0, 0)
40594 H.writeInt32BE(this._b | 0, 4)
40595 H.writeInt32BE(this._c | 0, 8)
40596 H.writeInt32BE(this._d | 0, 12)
40597 H.writeInt32BE(this._e | 0, 16)
ebd8d4e8 40598
8b095871 40599 return H
ebd8d4e8
IC
40600}
40601
8b095871 40602module.exports = Sha
ebd8d4e8 40603
8b095871
IC
40604}).call(this,require("buffer").Buffer)
40605},{"./hash":79,"buffer":5,"inherits":63}],82:[function(require,module,exports){
40606(function (Buffer){
40607/*
40608 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
40609 * in FIPS PUB 180-1
40610 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
40611 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
40612 * Distributed under the BSD License
40613 * See http://pajhome.org.uk/crypt/md5 for details.
40614 */
ebd8d4e8 40615
8b095871
IC
40616var inherits = require('inherits')
40617var Hash = require('./hash')
ebd8d4e8 40618
8b095871
IC
40619var K = [
40620 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
40621]
ebd8d4e8 40622
8b095871 40623var W = new Array(80)
ab78acc6 40624
8b095871
IC
40625function Sha1 () {
40626 this.init()
40627 this._w = W
ebd8d4e8 40628
8b095871
IC
40629 Hash.call(this, 64, 56)
40630}
ebd8d4e8 40631
8b095871 40632inherits(Sha1, Hash)
ebd8d4e8 40633
8b095871
IC
40634Sha1.prototype.init = function () {
40635 this._a = 0x67452301
40636 this._b = 0xefcdab89
40637 this._c = 0x98badcfe
40638 this._d = 0x10325476
40639 this._e = 0xc3d2e1f0
ebd8d4e8 40640
8b095871
IC
40641 return this
40642}
ebd8d4e8 40643
8b095871
IC
40644function rotl1 (num) {
40645 return (num << 1) | (num >>> 31)
40646}
ebd8d4e8 40647
8b095871
IC
40648function rotl5 (num) {
40649 return (num << 5) | (num >>> 27)
40650}
ebd8d4e8 40651
8b095871
IC
40652function rotl30 (num) {
40653 return (num << 30) | (num >>> 2)
40654}
ebd8d4e8 40655
8b095871
IC
40656function ft (s, b, c, d) {
40657 if (s === 0) return (b & c) | ((~b) & d)
40658 if (s === 2) return (b & c) | (b & d) | (c & d)
40659 return b ^ c ^ d
40660}
ebd8d4e8 40661
8b095871
IC
40662Sha1.prototype._update = function (M) {
40663 var W = this._w
ebd8d4e8 40664
8b095871
IC
40665 var a = this._a | 0
40666 var b = this._b | 0
40667 var c = this._c | 0
40668 var d = this._d | 0
40669 var e = this._e | 0
ebd8d4e8 40670
8b095871
IC
40671 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
40672 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
40673
40674 for (var j = 0; j < 80; ++j) {
40675 var s = ~~(j / 20)
40676 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
40677
40678 e = d
40679 d = c
40680 c = rotl30(b)
40681 b = a
40682 a = t
ab78acc6
IC
40683 }
40684
8b095871
IC
40685 this._a = (a + this._a) | 0
40686 this._b = (b + this._b) | 0
40687 this._c = (c + this._c) | 0
40688 this._d = (d + this._d) | 0
40689 this._e = (e + this._e) | 0
40690}
ab78acc6 40691
8b095871
IC
40692Sha1.prototype._hash = function () {
40693 var H = new Buffer(20)
ab78acc6 40694
8b095871
IC
40695 H.writeInt32BE(this._a | 0, 0)
40696 H.writeInt32BE(this._b | 0, 4)
40697 H.writeInt32BE(this._c | 0, 8)
40698 H.writeInt32BE(this._d | 0, 12)
40699 H.writeInt32BE(this._e | 0, 16)
ab78acc6 40700
8b095871
IC
40701 return H
40702}
ab78acc6 40703
8b095871 40704module.exports = Sha1
ab78acc6 40705
8b095871
IC
40706}).call(this,require("buffer").Buffer)
40707},{"./hash":79,"buffer":5,"inherits":63}],83:[function(require,module,exports){
40708(function (Buffer){
40709/**
40710 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
40711 * in FIPS 180-2
40712 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
40713 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
40714 *
40715 */
ab78acc6 40716
8b095871
IC
40717var inherits = require('inherits')
40718var Sha256 = require('./sha256')
40719var Hash = require('./hash')
ab78acc6 40720
8b095871 40721var W = new Array(64)
ab78acc6 40722
8b095871
IC
40723function Sha224 () {
40724 this.init()
ab78acc6 40725
8b095871 40726 this._w = W // new Array(64)
ebd8d4e8 40727
8b095871
IC
40728 Hash.call(this, 64, 56)
40729}
ebd8d4e8 40730
8b095871 40731inherits(Sha224, Sha256)
ebd8d4e8 40732
8b095871
IC
40733Sha224.prototype.init = function () {
40734 this._a = 0xc1059ed8
40735 this._b = 0x367cd507
40736 this._c = 0x3070dd17
40737 this._d = 0xf70e5939
40738 this._e = 0xffc00b31
40739 this._f = 0x68581511
40740 this._g = 0x64f98fa7
40741 this._h = 0xbefa4fa4
ebd8d4e8 40742
8b095871
IC
40743 return this
40744}
ab78acc6 40745
8b095871
IC
40746Sha224.prototype._hash = function () {
40747 var H = new Buffer(28)
ebd8d4e8 40748
8b095871
IC
40749 H.writeInt32BE(this._a, 0)
40750 H.writeInt32BE(this._b, 4)
40751 H.writeInt32BE(this._c, 8)
40752 H.writeInt32BE(this._d, 12)
40753 H.writeInt32BE(this._e, 16)
40754 H.writeInt32BE(this._f, 20)
40755 H.writeInt32BE(this._g, 24)
ab78acc6 40756
8b095871
IC
40757 return H
40758}
ebd8d4e8 40759
8b095871 40760module.exports = Sha224
ebd8d4e8 40761
8b095871
IC
40762}).call(this,require("buffer").Buffer)
40763},{"./hash":79,"./sha256":84,"buffer":5,"inherits":63}],84:[function(require,module,exports){
40764(function (Buffer){
40765/**
40766 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
40767 * in FIPS 180-2
40768 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
40769 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
40770 *
40771 */
ebd8d4e8 40772
8b095871
IC
40773var inherits = require('inherits')
40774var Hash = require('./hash')
ab78acc6 40775
8b095871
IC
40776var K = [
40777 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
40778 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
40779 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
40780 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
40781 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
40782 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
40783 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
40784 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
40785 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
40786 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
40787 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
40788 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
40789 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
40790 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
40791 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
40792 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
40793]
ebd8d4e8 40794
8b095871 40795var W = new Array(64)
ebd8d4e8 40796
8b095871
IC
40797function Sha256 () {
40798 this.init()
ebd8d4e8 40799
8b095871 40800 this._w = W // new Array(64)
ebd8d4e8 40801
8b095871 40802 Hash.call(this, 64, 56)
ab78acc6 40803}
ebd8d4e8 40804
8b095871 40805inherits(Sha256, Hash)
ebd8d4e8 40806
8b095871
IC
40807Sha256.prototype.init = function () {
40808 this._a = 0x6a09e667
40809 this._b = 0xbb67ae85
40810 this._c = 0x3c6ef372
40811 this._d = 0xa54ff53a
40812 this._e = 0x510e527f
40813 this._f = 0x9b05688c
40814 this._g = 0x1f83d9ab
40815 this._h = 0x5be0cd19
ebd8d4e8 40816
8b095871
IC
40817 return this
40818}
ebd8d4e8 40819
8b095871
IC
40820function ch (x, y, z) {
40821 return z ^ (x & (y ^ z))
40822}
ebd8d4e8 40823
8b095871
IC
40824function maj (x, y, z) {
40825 return (x & y) | (z & (x | y))
40826}
ebd8d4e8 40827
8b095871
IC
40828function sigma0 (x) {
40829 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
40830}
ebd8d4e8 40831
8b095871
IC
40832function sigma1 (x) {
40833 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
40834}
ebd8d4e8 40835
8b095871
IC
40836function gamma0 (x) {
40837 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
40838}
ebd8d4e8 40839
8b095871
IC
40840function gamma1 (x) {
40841 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
40842}
ab78acc6 40843
8b095871
IC
40844Sha256.prototype._update = function (M) {
40845 var W = this._w
ebd8d4e8 40846
8b095871
IC
40847 var a = this._a | 0
40848 var b = this._b | 0
40849 var c = this._c | 0
40850 var d = this._d | 0
40851 var e = this._e | 0
40852 var f = this._f | 0
40853 var g = this._g | 0
40854 var h = this._h | 0
ab78acc6 40855
8b095871
IC
40856 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
40857 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
ab78acc6 40858
8b095871
IC
40859 for (var j = 0; j < 64; ++j) {
40860 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
40861 var T2 = (sigma0(a) + maj(a, b, c)) | 0
ebd8d4e8 40862
8b095871
IC
40863 h = g
40864 g = f
40865 f = e
40866 e = (d + T1) | 0
40867 d = c
40868 c = b
40869 b = a
40870 a = (T1 + T2) | 0
ebd8d4e8
IC
40871 }
40872
8b095871
IC
40873 this._a = (a + this._a) | 0
40874 this._b = (b + this._b) | 0
40875 this._c = (c + this._c) | 0
40876 this._d = (d + this._d) | 0
40877 this._e = (e + this._e) | 0
40878 this._f = (f + this._f) | 0
40879 this._g = (g + this._g) | 0
40880 this._h = (h + this._h) | 0
ab78acc6 40881}
ebd8d4e8 40882
8b095871
IC
40883Sha256.prototype._hash = function () {
40884 var H = new Buffer(32)
ebd8d4e8 40885
8b095871
IC
40886 H.writeInt32BE(this._a, 0)
40887 H.writeInt32BE(this._b, 4)
40888 H.writeInt32BE(this._c, 8)
40889 H.writeInt32BE(this._d, 12)
40890 H.writeInt32BE(this._e, 16)
40891 H.writeInt32BE(this._f, 20)
40892 H.writeInt32BE(this._g, 24)
40893 H.writeInt32BE(this._h, 28)
40894
40895 return H
ab78acc6 40896}
ebd8d4e8 40897
8b095871 40898module.exports = Sha256
ebd8d4e8 40899
8b095871
IC
40900}).call(this,require("buffer").Buffer)
40901},{"./hash":79,"buffer":5,"inherits":63}],85:[function(require,module,exports){
40902(function (Buffer){
40903var inherits = require('inherits')
40904var SHA512 = require('./sha512')
40905var Hash = require('./hash')
ebd8d4e8 40906
8b095871 40907var W = new Array(160)
ebd8d4e8 40908
8b095871
IC
40909function Sha384 () {
40910 this.init()
40911 this._w = W
ab78acc6 40912
8b095871
IC
40913 Hash.call(this, 128, 112)
40914}
ab78acc6 40915
8b095871 40916inherits(Sha384, SHA512)
ebd8d4e8 40917
8b095871
IC
40918Sha384.prototype.init = function () {
40919 this._ah = 0xcbbb9d5d
40920 this._bh = 0x629a292a
40921 this._ch = 0x9159015a
40922 this._dh = 0x152fecd8
40923 this._eh = 0x67332667
40924 this._fh = 0x8eb44a87
40925 this._gh = 0xdb0c2e0d
40926 this._hh = 0x47b5481d
40927
40928 this._al = 0xc1059ed8
40929 this._bl = 0x367cd507
40930 this._cl = 0x3070dd17
40931 this._dl = 0xf70e5939
40932 this._el = 0xffc00b31
40933 this._fl = 0x68581511
40934 this._gl = 0x64f98fa7
40935 this._hl = 0xbefa4fa4
ebd8d4e8 40936
8b095871
IC
40937 return this
40938}
ebd8d4e8 40939
8b095871
IC
40940Sha384.prototype._hash = function () {
40941 var H = new Buffer(48)
ebd8d4e8 40942
8b095871
IC
40943 function writeInt64BE (h, l, offset) {
40944 H.writeInt32BE(h, offset)
40945 H.writeInt32BE(l, offset + 4)
40946 }
ebd8d4e8 40947
8b095871
IC
40948 writeInt64BE(this._ah, this._al, 0)
40949 writeInt64BE(this._bh, this._bl, 8)
40950 writeInt64BE(this._ch, this._cl, 16)
40951 writeInt64BE(this._dh, this._dl, 24)
40952 writeInt64BE(this._eh, this._el, 32)
40953 writeInt64BE(this._fh, this._fl, 40)
ebd8d4e8 40954
8b095871 40955 return H
ab78acc6 40956}
ebd8d4e8 40957
8b095871
IC
40958module.exports = Sha384
40959
40960}).call(this,require("buffer").Buffer)
40961},{"./hash":79,"./sha512":86,"buffer":5,"inherits":63}],86:[function(require,module,exports){
40962(function (Buffer){
40963var inherits = require('inherits')
40964var Hash = require('./hash')
40965
40966var K = [
40967 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
40968 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
40969 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
40970 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
40971 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
40972 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
40973 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
40974 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
40975 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
40976 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
40977 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
40978 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
40979 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
40980 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
40981 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
40982 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
40983 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
40984 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
40985 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
40986 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
40987 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
40988 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
40989 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
40990 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
40991 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
40992 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
40993 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
40994 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
40995 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
40996 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
40997 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
40998 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
40999 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
41000 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
41001 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
41002 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
41003 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
41004 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
41005 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
41006 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
41007]
41008
41009var W = new Array(160)
ebd8d4e8 41010
8b095871
IC
41011function Sha512 () {
41012 this.init()
41013 this._w = W
ebd8d4e8 41014
8b095871 41015 Hash.call(this, 128, 112)
ab78acc6 41016}
ebd8d4e8 41017
8b095871 41018inherits(Sha512, Hash)
ebd8d4e8 41019
8b095871
IC
41020Sha512.prototype.init = function () {
41021 this._ah = 0x6a09e667
41022 this._bh = 0xbb67ae85
41023 this._ch = 0x3c6ef372
41024 this._dh = 0xa54ff53a
41025 this._eh = 0x510e527f
41026 this._fh = 0x9b05688c
41027 this._gh = 0x1f83d9ab
41028 this._hh = 0x5be0cd19
41029
41030 this._al = 0xf3bcc908
41031 this._bl = 0x84caa73b
41032 this._cl = 0xfe94f82b
41033 this._dl = 0x5f1d36f1
41034 this._el = 0xade682d1
41035 this._fl = 0x2b3e6c1f
41036 this._gl = 0xfb41bd6b
41037 this._hl = 0x137e2179
ebd8d4e8 41038
8b095871 41039 return this
ab78acc6 41040}
ebd8d4e8 41041
8b095871
IC
41042function Ch (x, y, z) {
41043 return z ^ (x & (y ^ z))
41044}
ebd8d4e8 41045
8b095871
IC
41046function maj (x, y, z) {
41047 return (x & y) | (z & (x | y))
ab78acc6 41048}
ebd8d4e8 41049
8b095871
IC
41050function sigma0 (x, xl) {
41051 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
41052}
ebd8d4e8 41053
8b095871
IC
41054function sigma1 (x, xl) {
41055 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
41056}
ab78acc6 41057
8b095871
IC
41058function Gamma0 (x, xl) {
41059 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
ab78acc6 41060}
ebd8d4e8 41061
8b095871
IC
41062function Gamma0l (x, xl) {
41063 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
41064}
ebd8d4e8 41065
8b095871
IC
41066function Gamma1 (x, xl) {
41067 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
ab78acc6
IC
41068}
41069
8b095871
IC
41070function Gamma1l (x, xl) {
41071 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
ab78acc6
IC
41072}
41073
8b095871
IC
41074function getCarry (a, b) {
41075 return (a >>> 0) < (b >>> 0) ? 1 : 0
ab78acc6
IC
41076}
41077
8b095871
IC
41078Sha512.prototype._update = function (M) {
41079 var W = this._w
ebd8d4e8 41080
8b095871
IC
41081 var ah = this._ah | 0
41082 var bh = this._bh | 0
41083 var ch = this._ch | 0
41084 var dh = this._dh | 0
41085 var eh = this._eh | 0
41086 var fh = this._fh | 0
41087 var gh = this._gh | 0
41088 var hh = this._hh | 0
ebd8d4e8 41089
8b095871
IC
41090 var al = this._al | 0
41091 var bl = this._bl | 0
41092 var cl = this._cl | 0
41093 var dl = this._dl | 0
41094 var el = this._el | 0
41095 var fl = this._fl | 0
41096 var gl = this._gl | 0
41097 var hl = this._hl | 0
ebd8d4e8 41098
8b095871
IC
41099 for (var i = 0; i < 32; i += 2) {
41100 W[i] = M.readInt32BE(i * 4)
41101 W[i + 1] = M.readInt32BE(i * 4 + 4)
41102 }
41103 for (; i < 160; i += 2) {
41104 var xh = W[i - 15 * 2]
41105 var xl = W[i - 15 * 2 + 1]
41106 var gamma0 = Gamma0(xh, xl)
41107 var gamma0l = Gamma0l(xl, xh)
ebd8d4e8 41108
8b095871
IC
41109 xh = W[i - 2 * 2]
41110 xl = W[i - 2 * 2 + 1]
41111 var gamma1 = Gamma1(xh, xl)
41112 var gamma1l = Gamma1l(xl, xh)
ebd8d4e8 41113
8b095871
IC
41114 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
41115 var Wi7h = W[i - 7 * 2]
41116 var Wi7l = W[i - 7 * 2 + 1]
ebd8d4e8 41117
8b095871
IC
41118 var Wi16h = W[i - 16 * 2]
41119 var Wi16l = W[i - 16 * 2 + 1]
ab78acc6 41120
8b095871
IC
41121 var Wil = (gamma0l + Wi7l) | 0
41122 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
41123 Wil = (Wil + gamma1l) | 0
41124 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
41125 Wil = (Wil + Wi16l) | 0
41126 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
ebd8d4e8 41127
8b095871
IC
41128 W[i] = Wih
41129 W[i + 1] = Wil
41130 }
ebd8d4e8 41131
8b095871
IC
41132 for (var j = 0; j < 160; j += 2) {
41133 Wih = W[j]
41134 Wil = W[j + 1]
ebd8d4e8 41135
8b095871
IC
41136 var majh = maj(ah, bh, ch)
41137 var majl = maj(al, bl, cl)
ebd8d4e8 41138
8b095871
IC
41139 var sigma0h = sigma0(ah, al)
41140 var sigma0l = sigma0(al, ah)
41141 var sigma1h = sigma1(eh, el)
41142 var sigma1l = sigma1(el, eh)
ab78acc6 41143
8b095871
IC
41144 // t1 = h + sigma1 + ch + K[j] + W[j]
41145 var Kih = K[j]
41146 var Kil = K[j + 1]
ab78acc6 41147
8b095871
IC
41148 var chh = Ch(eh, fh, gh)
41149 var chl = Ch(el, fl, gl)
ebd8d4e8 41150
8b095871
IC
41151 var t1l = (hl + sigma1l) | 0
41152 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
41153 t1l = (t1l + chl) | 0
41154 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
41155 t1l = (t1l + Kil) | 0
41156 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
41157 t1l = (t1l + Wil) | 0
41158 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
ebd8d4e8 41159
8b095871
IC
41160 // t2 = sigma0 + maj
41161 var t2l = (sigma0l + majl) | 0
41162 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
ebd8d4e8 41163
8b095871
IC
41164 hh = gh
41165 hl = gl
41166 gh = fh
41167 gl = fl
41168 fh = eh
41169 fl = el
41170 el = (dl + t1l) | 0
41171 eh = (dh + t1h + getCarry(el, dl)) | 0
41172 dh = ch
41173 dl = cl
41174 ch = bh
41175 cl = bl
41176 bh = ah
41177 bl = al
41178 al = (t1l + t2l) | 0
41179 ah = (t1h + t2h + getCarry(al, t1l)) | 0
41180 }
ab78acc6 41181
8b095871
IC
41182 this._al = (this._al + al) | 0
41183 this._bl = (this._bl + bl) | 0
41184 this._cl = (this._cl + cl) | 0
41185 this._dl = (this._dl + dl) | 0
41186 this._el = (this._el + el) | 0
41187 this._fl = (this._fl + fl) | 0
41188 this._gl = (this._gl + gl) | 0
41189 this._hl = (this._hl + hl) | 0
ab78acc6 41190
8b095871
IC
41191 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
41192 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
41193 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
41194 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
41195 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
41196 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
41197 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
41198 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
ab78acc6
IC
41199}
41200
8b095871
IC
41201Sha512.prototype._hash = function () {
41202 var H = new Buffer(64)
ab78acc6 41203
8b095871
IC
41204 function writeInt64BE (h, l, offset) {
41205 H.writeInt32BE(h, offset)
41206 H.writeInt32BE(l, offset + 4)
41207 }
ab78acc6 41208
8b095871
IC
41209 writeInt64BE(this._ah, this._al, 0)
41210 writeInt64BE(this._bh, this._bl, 8)
41211 writeInt64BE(this._ch, this._cl, 16)
41212 writeInt64BE(this._dh, this._dl, 24)
41213 writeInt64BE(this._eh, this._el, 32)
41214 writeInt64BE(this._fh, this._fl, 40)
41215 writeInt64BE(this._gh, this._gl, 48)
41216 writeInt64BE(this._hh, this._hl, 56)
ab78acc6 41217
8b095871 41218 return H
ebd8d4e8
IC
41219}
41220
8b095871 41221module.exports = Sha512
ebd8d4e8 41222
ab78acc6 41223}).call(this,require("buffer").Buffer)
8b095871
IC
41224},{"./hash":79,"buffer":5,"inherits":63}],87:[function(require,module,exports){
41225var isHexPrefixed = require('is-hex-prefixed');
d5dc92fd 41226
8b095871
IC
41227/**
41228 * Removes '0x' from a given `String` is present
41229 * @param {String} str the string value
41230 * @return {String|Optional} a string by pass if necessary
41231 */
41232module.exports = function stripHexPrefix(str) {
41233 if (typeof str !== 'string') {
41234 return str;
41235 }
07ac4350 41236
8b095871
IC
41237 return isHexPrefixed(str) ? str.slice(2) : str;
41238}
07ac4350 41239
8b095871
IC
41240},{"is-hex-prefixed":64}]},{},[31])(31)
41241});</script>
8a1f452d 41242 <script>function convertRippleAdrr(address) {
41243 return window.basex('rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz').encode(
41244 window.basex('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz').decode(address)
41245 )
41246 }
41247
41248function convertRipplePriv(priv) {
920eb591 41249 return window.basex('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz').decode(priv).toString("hex").slice(2,66)
8a1f452d 41250}
41251
41252</script>
ab78acc6 41253 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
80c4dd2a
IC
41254
41255//// base.js
41256
41257/** @fileOverview Javascript cryptography implementation.
41258 *
41259 * Crush to remove comments, shorten variable names and
41260 * generally reduce transmission size.
41261 *
41262 * @author Emily Stark
41263 * @author Mike Hamburg
41264 * @author Dan Boneh
41265 */
41266
41267"use strict";
41268/*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
41269/*global document, window, escape, unescape, module, require, Uint32Array */
41270
41271/** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
41272var sjcl = {
41273 /** @namespace Symmetric ciphers. */
41274 cipher: {},
41275
41276 /** @namespace Hash functions. Right now only SHA256 is implemented. */
41277 hash: {},
41278
41279 /** @namespace Key exchange functions. Right now only SRP is implemented. */
41280 keyexchange: {},
41281
41282 /** @namespace Block cipher modes of operation. */
41283 mode: {},
41284
41285 /** @namespace Miscellaneous. HMAC and PBKDF2. */
41286 misc: {},
41287
41288 /**
41289 * @namespace Bit array encoders and decoders.
41290 *
41291 * @description
41292 * The members of this namespace are functions which translate between
41293 * SJCL's bitArrays and other objects (usually strings). Because it
41294 * isn't always clear which direction is encoding and which is decoding,
41295 * the method names are "fromBits" and "toBits".
41296 */
41297 codec: {},
41298
41299 /** @namespace Exceptions. */
41300 exception: {
41301 /** @constructor Ciphertext is corrupt. */
41302 corrupt: function(message) {
41303 this.toString = function() { return "CORRUPT: "+this.message; };
41304 this.message = message;
41305 },
41306
41307 /** @constructor Invalid parameter. */
41308 invalid: function(message) {
41309 this.toString = function() { return "INVALID: "+this.message; };
41310 this.message = message;
41311 },
41312
41313 /** @constructor Bug or missing feature in SJCL. @constructor */
41314 bug: function(message) {
41315 this.toString = function() { return "BUG: "+this.message; };
41316 this.message = message;
41317 },
41318
41319 /** @constructor Something isn't ready. */
41320 notReady: function(message) {
41321 this.toString = function() { return "NOT READY: "+this.message; };
41322 this.message = message;
ebd8d4e8 41323 }
80c4dd2a
IC
41324 }
41325};
41326
41327if(typeof module !== 'undefined' && module.exports){
41328 module.exports = sjcl;
41329}
41330if (typeof define === "function") {
41331 define([], function () {
41332 return sjcl;
41333 });
41334}
41335
41336
41337//// bitArray.js
41338
41339/** @fileOverview Arrays of bits, encoded as arrays of Numbers.
41340 *
41341 * @author Emily Stark
41342 * @author Mike Hamburg
41343 * @author Dan Boneh
41344 */
41345
41346/** @namespace Arrays of bits, encoded as arrays of Numbers.
41347 *
41348 * @description
41349 * <p>
41350 * These objects are the currency accepted by SJCL's crypto functions.
41351 * </p>
41352 *
41353 * <p>
41354 * Most of our crypto primitives operate on arrays of 4-byte words internally,
41355 * but many of them can take arguments that are not a multiple of 4 bytes.
41356 * This library encodes arrays of bits (whose size need not be a multiple of 8
41357 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
41358 * array of words, 32 bits at a time. Since the words are double-precision
41359 * floating point numbers, they fit some extra data. We use this (in a private,
41360 * possibly-changing manner) to encode the number of bits actually present
41361 * in the last word of the array.
41362 * </p>
41363 *
41364 * <p>
41365 * Because bitwise ops clear this out-of-band data, these arrays can be passed
41366 * to ciphers like AES which want arrays of words.
41367 * </p>
41368 */
41369sjcl.bitArray = {
41370 /**
41371 * Array slices in units of bits.
41372 * @param {bitArray} a The array to slice.
41373 * @param {Number} bstart The offset to the start of the slice, in bits.
41374 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
41375 * slice until the end of the array.
41376 * @return {bitArray} The requested slice.
41377 */
41378 bitSlice: function (a, bstart, bend) {
41379 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
41380 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
41381 },
41382
41383 /**
41384 * Extract a number packed into a bit array.
41385 * @param {bitArray} a The array to slice.
41386 * @param {Number} bstart The offset to the start of the slice, in bits.
41387 * @param {Number} length The length of the number to extract.
41388 * @return {Number} The requested slice.
41389 */
41390 extract: function(a, bstart, blength) {
41391 // FIXME: this Math.floor is not necessary at all, but for some reason
41392 // seems to suppress a bug in the Chromium JIT.
41393 var x, sh = Math.floor((-bstart-blength) & 31);
41394 if ((bstart + blength - 1 ^ bstart) & -32) {
41395 // it crosses a boundary
41396 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
41397 } else {
41398 // within a single word
41399 x = a[bstart/32|0] >>> sh;
ebd8d4e8 41400 }
80c4dd2a
IC
41401 return x & ((1<<blength) - 1);
41402 },
41403
41404 /**
41405 * Concatenate two bit arrays.
41406 * @param {bitArray} a1 The first array.
41407 * @param {bitArray} a2 The second array.
41408 * @return {bitArray} The concatenation of a1 and a2.
41409 */
41410 concat: function (a1, a2) {
41411 if (a1.length === 0 || a2.length === 0) {
41412 return a1.concat(a2);
41413 }
41414
41415 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
41416 if (shift === 32) {
41417 return a1.concat(a2);
41418 } else {
41419 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
ebd8d4e8 41420 }
80c4dd2a
IC
41421 },
41422
41423 /**
41424 * Find the length of an array of bits.
41425 * @param {bitArray} a The array.
41426 * @return {Number} The length of a, in bits.
41427 */
41428 bitLength: function (a) {
41429 var l = a.length, x;
41430 if (l === 0) { return 0; }
41431 x = a[l - 1];
41432 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
41433 },
41434
41435 /**
41436 * Truncate an array.
41437 * @param {bitArray} a The array.
41438 * @param {Number} len The length to truncate to, in bits.
41439 * @return {bitArray} A new array, truncated to len bits.
41440 */
41441 clamp: function (a, len) {
41442 if (a.length * 32 < len) { return a; }
41443 a = a.slice(0, Math.ceil(len / 32));
41444 var l = a.length;
41445 len = len & 31;
41446 if (l > 0 && len) {
41447 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
41448 }
41449 return a;
41450 },
41451
41452 /**
41453 * Make a partial word for a bit array.
41454 * @param {Number} len The number of bits in the word.
41455 * @param {Number} x The bits.
41456 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
41457 * @return {Number} The partial word.
41458 */
41459 partial: function (len, x, _end) {
41460 if (len === 32) { return x; }
41461 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
41462 },
41463
41464 /**
41465 * Get the number of bits used by a partial word.
41466 * @param {Number} x The partial word.
41467 * @return {Number} The number of bits used by the partial word.
41468 */
41469 getPartial: function (x) {
41470 return Math.round(x/0x10000000000) || 32;
41471 },
41472
41473 /**
41474 * Compare two arrays for equality in a predictable amount of time.
41475 * @param {bitArray} a The first array.
41476 * @param {bitArray} b The second array.
41477 * @return {boolean} true if a == b; false otherwise.
41478 */
41479 equal: function (a, b) {
41480 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
41481 return false;
ebd8d4e8 41482 }
80c4dd2a
IC
41483 var x = 0, i;
41484 for (i=0; i<a.length; i++) {
41485 x |= a[i]^b[i];
ebd8d4e8 41486 }
80c4dd2a
IC
41487 return (x === 0);
41488 },
41489
41490 /** Shift an array right.
41491 * @param {bitArray} a The array to shift.
41492 * @param {Number} shift The number of bits to shift.
41493 * @param {Number} [carry=0] A byte to carry in
41494 * @param {bitArray} [out=[]] An array to prepend to the output.
41495 * @private
41496 */
41497 _shiftRight: function (a, shift, carry, out) {
41498 var i, last2=0, shift2;
41499 if (out === undefined) { out = []; }
41500
41501 for (; shift >= 32; shift -= 32) {
41502 out.push(carry);
41503 carry = 0;
41504 }
41505 if (shift === 0) {
41506 return out.concat(a);
41507 }
41508
41509 for (i=0; i<a.length; i++) {
41510 out.push(carry | a[i]>>>shift);
41511 carry = a[i] << (32-shift);
41512 }
41513 last2 = a.length ? a[a.length-1] : 0;
41514 shift2 = sjcl.bitArray.getPartial(last2);
41515 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
41516 return out;
41517 },
41518
41519 /** xor a block of 4 words together.
41520 * @private
41521 */
41522 _xor4: function(x,y) {
41523 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
41524 },
41525
41526 /** byteswap a word array inplace.
41527 * (does not handle partial words)
41528 * @param {sjcl.bitArray} a word array
41529 * @return {sjcl.bitArray} byteswapped array
41530 */
41531 byteswapM: function(a) {
41532 var i, v, m = 0xff00;
41533 for (i = 0; i < a.length; ++i) {
41534 v = a[i];
41535 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
ebd8d4e8 41536 }
80c4dd2a
IC
41537 return a;
41538 }
41539};
41540
41541
41542//// codecString.js
41543
41544/** @fileOverview Bit array codec implementations.
41545 *
41546 * @author Emily Stark
41547 * @author Mike Hamburg
41548 * @author Dan Boneh
41549 */
41550
41551/** @namespace UTF-8 strings */
41552sjcl.codec.utf8String = {
41553 /** Convert from a bitArray to a UTF-8 string. */
41554 fromBits: function (arr) {
41555 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
41556 for (i=0; i<bl/8; i++) {
41557 if ((i&3) === 0) {
41558 tmp = arr[i/4];
41559 }
41560 out += String.fromCharCode(tmp >>> 24);
41561 tmp <<= 8;
ebd8d4e8 41562 }
80c4dd2a
IC
41563 return decodeURIComponent(escape(out));
41564 },
41565
41566 /** Convert from a UTF-8 string to a bitArray. */
41567 toBits: function (str) {
41568 str = unescape(encodeURIComponent(str));
41569 var out = [], i, tmp=0;
41570 for (i=0; i<str.length; i++) {
41571 tmp = tmp << 8 | str.charCodeAt(i);
41572 if ((i&3) === 3) {
41573 out.push(tmp);
41574 tmp = 0;
41575 }
ebd8d4e8 41576 }
80c4dd2a
IC
41577 if (i&3) {
41578 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
ebd8d4e8 41579 }
80c4dd2a
IC
41580 return out;
41581 }
41582};
41583
41584
41585//// codecHex.js
41586
41587/** @fileOverview Bit array codec implementations.
41588 *
41589 * @author Emily Stark
41590 * @author Mike Hamburg
41591 * @author Dan Boneh
41592 */
41593
41594/** @namespace Hexadecimal */
41595sjcl.codec.hex = {
41596 /** Convert from a bitArray to a hex string. */
41597 fromBits: function (arr) {
41598 var out = "", i;
41599 for (i=0; i<arr.length; i++) {
41600 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
ebd8d4e8 41601 }
80c4dd2a
IC
41602 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
41603 },
41604 /** Convert from a hex string to a bitArray. */
41605 toBits: function (str) {
41606 var i, out=[], len;
41607 str = str.replace(/\s|0x/g, "");
41608 len = str.length;
41609 str = str + "00000000";
41610 for (i=0; i<str.length; i+=8) {
41611 out.push(parseInt(str.substr(i,8),16)^0);
ebd8d4e8 41612 }
80c4dd2a
IC
41613 return sjcl.bitArray.clamp(out, len*4);
41614 }
41615};
41616
41617
41618//// sha512.js
41619
41620/** @fileOverview Javascript SHA-512 implementation.
41621 *
41622 * This implementation was written for CryptoJS by Jeff Mott and adapted for
41623 * SJCL by Stefan Thomas.
41624 *
41625 * CryptoJS (c) 2009–2012 by Jeff Mott. All rights reserved.
41626 * Released with New BSD License
41627 *
41628 * @author Emily Stark
41629 * @author Mike Hamburg
41630 * @author Dan Boneh
41631 * @author Jeff Mott
41632 * @author Stefan Thomas
41633 */
41634
41635/**
41636 * Context for a SHA-512 operation in progress.
41637 * @constructor
41638 * @class Secure Hash Algorithm, 512 bits.
41639 */
41640sjcl.hash.sha512 = function (hash) {
41641 if (!this._key[0]) { this._precompute(); }
41642 if (hash) {
41643 this._h = hash._h.slice(0);
41644 this._buffer = hash._buffer.slice(0);
41645 this._length = hash._length;
41646 } else {
41647 this.reset();
41648 }
41649};
41650
41651/**
41652 * Hash a string or an array of words.
41653 * @static
41654 * @param {bitArray|String} data the data to hash.
41655 * @return {bitArray} The hash value, an array of 16 big-endian words.
41656 */
41657sjcl.hash.sha512.hash = function (data) {
41658 return (new sjcl.hash.sha512()).update(data).finalize();
41659};
41660
41661sjcl.hash.sha512.prototype = {
41662 /**
41663 * The hash's block size, in bits.
41664 * @constant
41665 */
41666 blockSize: 1024,
41667
41668 /**
41669 * Reset the hash state.
41670 * @return this
41671 */
41672 reset:function () {
41673 this._h = this._init.slice(0);
41674 this._buffer = [];
41675 this._length = 0;
41676 return this;
41677 },
41678
41679 /**
41680 * Input several words to the hash.
41681 * @param {bitArray|String} data the data to hash.
41682 * @return this
41683 */
41684 update: function (data) {
41685 if (typeof data === "string") {
41686 data = sjcl.codec.utf8String.toBits(data);
ebd8d4e8 41687 }
80c4dd2a
IC
41688 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
41689 ol = this._length,
41690 nl = this._length = ol + sjcl.bitArray.bitLength(data);
41691 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
41692 this._block(b.splice(0,32));
ebd8d4e8 41693 }
80c4dd2a
IC
41694 return this;
41695 },
41696
41697 /**
41698 * Complete hashing and output the hash value.
41699 * @return {bitArray} The hash value, an array of 16 big-endian words.
41700 */
41701 finalize:function () {
41702 var i, b = this._buffer, h = this._h;
41703
41704 // Round out and push the buffer
41705 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
41706
41707 // Round out the buffer to a multiple of 32 words, less the 4 length words.
41708 for (i = b.length + 4; i & 31; i++) {
41709 b.push(0);
ebd8d4e8 41710 }
80c4dd2a
IC
41711
41712 // append the length
41713 b.push(0);
41714 b.push(0);
41715 b.push(Math.floor(this._length / 0x100000000));
41716 b.push(this._length | 0);
41717
41718 while (b.length) {
41719 this._block(b.splice(0,32));
ebd8d4e8 41720 }
80c4dd2a
IC
41721
41722 this.reset();
41723 return h;
41724 },
41725
41726 /**
41727 * The SHA-512 initialization vector, to be precomputed.
41728 * @private
41729 */
41730 _init:[],
41731
41732 /**
41733 * Least significant 24 bits of SHA512 initialization values.
41734 *
41735 * Javascript only has 53 bits of precision, so we compute the 40 most
41736 * significant bits and add the remaining 24 bits as constants.
41737 *
41738 * @private
41739 */
41740 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
41741
41742 /*
41743 _init:
41744 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
41745 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
41746 */
41747
41748 /**
41749 * The SHA-512 hash key, to be precomputed.
41750 * @private
41751 */
41752 _key:[],
41753
41754 /**
41755 * Least significant 24 bits of SHA512 key values.
41756 * @private
41757 */
41758 _keyr:
41759 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
41760 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
41761 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
41762 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
41763 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
41764 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
41765 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
41766 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
41767 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
41768 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
41769
41770 /*
41771 _key:
41772 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
41773 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
41774 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
41775 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
41776 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
41777 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
41778 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
41779 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
41780 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
41781 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
41782 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
41783 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
41784 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
41785 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
41786 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
41787 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
41788 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
41789 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
41790 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
41791 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
41792 */
41793
41794 /**
41795 * Function to precompute _init and _key.
41796 * @private
41797 */
41798 _precompute: function () {
41799 // XXX: This code is for precomputing the SHA256 constants, change for
41800 // SHA512 and re-enable.
41801 var i = 0, prime = 2, factor;
41802
41803 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
41804 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
41805
41806 outer: for (; i<80; prime++) {
41807 for (factor=2; factor*factor <= prime; factor++) {
41808 if (prime % factor === 0) {
41809 // not a prime
41810 continue outer;
ebd8d4e8 41811 }
80c4dd2a
IC
41812 }
41813
41814 if (i<8) {
41815 this._init[i*2] = frac(Math.pow(prime, 1/2));
41816 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
41817 }
41818 this._key[i*2] = frac(Math.pow(prime, 1/3));
41819 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
41820 i++;
ebd8d4e8 41821 }
80c4dd2a
IC
41822 },
41823
41824 /**
41825 * Perform one cycle of SHA-512.
41826 * @param {bitArray} words one block of words.
41827 * @private
41828 */
41829 _block:function (words) {
41830 var i, wrh, wrl,
41831 w = words.slice(0),
41832 h = this._h,
41833 k = this._key,
41834 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
41835 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
41836 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
41837 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
41838
41839 // Working variables
41840 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
41841 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
41842 eh = h4h, el = h4l, fh = h5h, fl = h5l,
41843 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
41844
41845 for (i=0; i<80; i++) {
41846 // load up the input word for this round
41847 if (i<16) {
41848 wrh = w[i * 2];
41849 wrl = w[i * 2 + 1];
41850 } else {
41851 // Gamma0
41852 var gamma0xh = w[(i-15) * 2];
41853 var gamma0xl = w[(i-15) * 2 + 1];
41854 var gamma0h =
41855 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
41856 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
41857 (gamma0xh >>> 7);
41858 var gamma0l =
41859 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
41860 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
41861 ((gamma0xh << 25) | (gamma0xl >>> 7));
41862
41863 // Gamma1
41864 var gamma1xh = w[(i-2) * 2];
41865 var gamma1xl = w[(i-2) * 2 + 1];
41866 var gamma1h =
41867 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
41868 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
41869 (gamma1xh >>> 6);
41870 var gamma1l =
41871 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
41872 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
41873 ((gamma1xh << 26) | (gamma1xl >>> 6));
41874
41875 // Shortcuts
41876 var wr7h = w[(i-7) * 2];
41877 var wr7l = w[(i-7) * 2 + 1];
41878
41879 var wr16h = w[(i-16) * 2];
41880 var wr16l = w[(i-16) * 2 + 1];
41881
41882 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
41883 wrl = gamma0l + wr7l;
41884 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
41885 wrl += gamma1l;
41886 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
41887 wrl += wr16l;
41888 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
41889 }
41890
41891 w[i*2] = wrh |= 0;
41892 w[i*2 + 1] = wrl |= 0;
41893
41894 // Ch
41895 var chh = (eh & fh) ^ (~eh & gh);
41896 var chl = (el & fl) ^ (~el & gl);
41897
41898 // Maj
41899 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
41900 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
41901
41902 // Sigma0
41903 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
41904 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
41905
41906 // Sigma1
41907 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
41908 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
41909
41910 // K(round)
41911 var krh = k[i*2];
41912 var krl = k[i*2+1];
41913
41914 // t1 = h + sigma1 + ch + K(round) + W(round)
41915 var t1l = hl + sigma1l;
41916 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
41917 t1l += chl;
41918 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
41919 t1l += krl;
41920 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
41921 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
41922 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
41923
41924 // t2 = sigma0 + maj
41925 var t2l = sigma0l + majl;
41926 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
41927
41928 // Update working variables
41929 hh = gh;
41930 hl = gl;
41931 gh = fh;
41932 gl = fl;
41933 fh = eh;
41934 fl = el;
41935 el = (dl + t1l) | 0;
41936 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
41937 dh = ch;
41938 dl = cl;
41939 ch = bh;
41940 cl = bl;
41941 bh = ah;
41942 bl = al;
41943 al = (t1l + t2l) | 0;
41944 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
41945 }
41946
41947 // Intermediate hash
41948 h0l = h[1] = (h0l + al) | 0;
41949 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
41950 h1l = h[3] = (h1l + bl) | 0;
41951 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
41952 h2l = h[5] = (h2l + cl) | 0;
41953 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
41954 h3l = h[7] = (h3l + dl) | 0;
41955 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
41956 h4l = h[9] = (h4l + el) | 0;
41957 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
41958 h5l = h[11] = (h5l + fl) | 0;
41959 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
41960 h6l = h[13] = (h6l + gl) | 0;
41961 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
41962 h7l = h[15] = (h7l + hl) | 0;
41963 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
41964 }
41965};
41966
41967
41968//// hmac.js
41969
41970/** @fileOverview HMAC implementation.
41971 *
41972 * @author Emily Stark
41973 * @author Mike Hamburg
41974 * @author Dan Boneh
41975 */
41976
41977/** HMAC with the specified hash function.
41978 * @constructor
41979 * @param {bitArray} key the key for HMAC.
41980 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
41981 */
41982sjcl.misc.hmac = function (key, Hash) {
41983 this._hash = Hash = Hash || sjcl.hash.sha256;
41984 var exKey = [[],[]], i,
41985 bs = Hash.prototype.blockSize / 32;
41986 this._baseHash = [new Hash(), new Hash()];
41987
41988 if (key.length > bs) {
41989 key = Hash.hash(key);
41990 }
41991
41992 for (i=0; i<bs; i++) {
41993 exKey[0][i] = key[i]^0x36363636;
41994 exKey[1][i] = key[i]^0x5C5C5C5C;
41995 }
41996
41997 this._baseHash[0].update(exKey[0]);
41998 this._baseHash[1].update(exKey[1]);
41999 this._resultHash = new Hash(this._baseHash[0]);
42000};
42001
42002/** HMAC with the specified hash function. Also called encrypt since it's a prf.
42003 * @param {bitArray|String} data The data to mac.
42004 */
42005sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
42006 if (!this._updated) {
42007 this.update(data);
42008 return this.digest(data);
42009 } else {
42010 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
42011 }
42012};
42013
42014sjcl.misc.hmac.prototype.reset = function () {
42015 this._resultHash = new this._hash(this._baseHash[0]);
42016 this._updated = false;
42017};
42018
42019sjcl.misc.hmac.prototype.update = function (data) {
42020 this._updated = true;
42021 this._resultHash.update(data);
42022};
42023
42024sjcl.misc.hmac.prototype.digest = function () {
42025 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
42026
42027 this.reset();
42028
42029 return result;
42030};
42031
42032
42033//// pbkdf2.js
42034
42035
42036/** @fileOverview Password-based key-derivation function, version 2.0.
42037 *
42038 * @author Emily Stark
42039 * @author Mike Hamburg
42040 * @author Dan Boneh
42041 */
42042
42043/** Password-Based Key-Derivation Function, version 2.0.
42044 *
42045 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
42046 *
42047 * This is the method specified by RSA's PKCS #5 standard.
42048 *
42049 * @param {bitArray|String} password The password.
42050 * @param {bitArray|String} salt The salt. Should have lots of entropy.
42051 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
42052 * @param {Number} [length] The length of the derived key. Defaults to the
42053 output size of the hash function.
42054 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
42055 * @return {bitArray} the derived key.
42056 */
42057sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
42058 count = count || 1000;
42059
42060 if (length < 0 || count < 0) {
42061 throw sjcl.exception.invalid("invalid params to pbkdf2");
42062 }
42063
42064 if (typeof password === "string") {
42065 password = sjcl.codec.utf8String.toBits(password);
42066 }
42067
42068 if (typeof salt === "string") {
42069 salt = sjcl.codec.utf8String.toBits(salt);
42070 }
42071
42072 Prff = Prff || sjcl.misc.hmac;
42073
42074 var prf = new Prff(password),
42075 u, ui, i, j, k, out = [], b = sjcl.bitArray;
42076
42077 for (k = 1; 32 * out.length < (length || 1); k++) {
42078 u = ui = prf.encrypt(b.concat(salt,[k]));
42079
42080 for (i=1; i<count; i++) {
42081 ui = prf.encrypt(ui);
42082 for (j=0; j<ui.length; j++) {
42083 u[j] ^= ui[j];
42084 }
ebd8d4e8 42085 }
80c4dd2a
IC
42086
42087 out = out.concat(u);
42088 }
42089
42090 if (length) { out = b.clamp(out, length); }
42091
42092 return out;
42093};
42094
42095
42096//// sha256.js
42097
42098/** @fileOverview Javascript SHA-256 implementation.
42099 *
42100 * An older version of this implementation is available in the public
42101 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
42102 * Stanford University 2008-2010 and BSD-licensed for liability
42103 * reasons.
42104 *
42105 * Special thanks to Aldo Cortesi for pointing out several bugs in
42106 * this code.
42107 *
42108 * @author Emily Stark
42109 * @author Mike Hamburg
42110 * @author Dan Boneh
42111 */
42112
42113/**
42114 * Context for a SHA-256 operation in progress.
42115 * @constructor
42116 * @class Secure Hash Algorithm, 256 bits.
42117 */
42118sjcl.hash.sha256 = function (hash) {
42119 if (!this._key[0]) { this._precompute(); }
42120 if (hash) {
42121 this._h = hash._h.slice(0);
42122 this._buffer = hash._buffer.slice(0);
42123 this._length = hash._length;
42124 } else {
42125 this.reset();
42126 }
42127};
42128
42129/**
42130 * Hash a string or an array of words.
42131 * @static
42132 * @param {bitArray|String} data the data to hash.
42133 * @return {bitArray} The hash value, an array of 16 big-endian words.
42134 */
42135sjcl.hash.sha256.hash = function (data) {
42136 return (new sjcl.hash.sha256()).update(data).finalize();
42137};
42138
42139sjcl.hash.sha256.prototype = {
42140 /**
42141 * The hash's block size, in bits.
42142 * @constant
42143 */
42144 blockSize: 512,
42145
42146 /**
42147 * Reset the hash state.
42148 * @return this
42149 */
42150 reset:function () {
42151 this._h = this._init.slice(0);
42152 this._buffer = [];
42153 this._length = 0;
42154 return this;
42155 },
42156
42157 /**
42158 * Input several words to the hash.
42159 * @param {bitArray|String} data the data to hash.
42160 * @return this
42161 */
42162 update: function (data) {
42163 if (typeof data === "string") {
42164 data = sjcl.codec.utf8String.toBits(data);
42165 }
42166 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
42167 ol = this._length,
42168 nl = this._length = ol + sjcl.bitArray.bitLength(data);
42169 for (i = 512+ol & -512; i <= nl; i+= 512) {
42170 this._block(b.splice(0,16));
ebd8d4e8 42171 }
3af2954a 42172 return this;
80c4dd2a
IC
42173 },
42174
42175 /**
42176 * Complete hashing and output the hash value.
42177 * @return {bitArray} The hash value, an array of 8 big-endian words.
42178 */
42179 finalize:function () {
42180 var i, b = this._buffer, h = this._h;
42181
42182 // Round out and push the buffer
42183 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
42184
42185 // Round out the buffer to a multiple of 16 words, less the 2 length words.
42186 for (i = b.length + 2; i & 15; i++) {
42187 b.push(0);
42188 }
42189
42190 // append the length
42191 b.push(Math.floor(this._length / 0x100000000));
42192 b.push(this._length | 0);
42193
42194 while (b.length) {
42195 this._block(b.splice(0,16));
42196 }
42197
42198 this.reset();
42199 return h;
42200 },
42201
42202 /**
42203 * The SHA-256 initialization vector, to be precomputed.
42204 * @private
42205 */
42206 _init:[],
42207 /*
42208 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
42209 */
42210
42211 /**
42212 * The SHA-256 hash key, to be precomputed.
42213 * @private
42214 */
42215 _key:[],
42216 /*
42217 _key:
42218 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
42219 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
42220 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
42221 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
42222 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
42223 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
42224 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
42225 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
42226 */
42227
42228
42229 /**
42230 * Function to precompute _init and _key.
42231 * @private
42232 */
42233 _precompute: function () {
42234 var i = 0, prime = 2, factor;
42235
42236 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
42237
42238 outer: for (; i<64; prime++) {
42239 for (factor=2; factor*factor <= prime; factor++) {
42240 if (prime % factor === 0) {
42241 // not a prime
42242 continue outer;
ebd8d4e8 42243 }
80c4dd2a
IC
42244 }
42245
42246 if (i<8) {
42247 this._init[i] = frac(Math.pow(prime, 1/2));
42248 }
42249 this._key[i] = frac(Math.pow(prime, 1/3));
42250 i++;
ebd8d4e8 42251 }
80c4dd2a
IC
42252 },
42253
42254 /**
42255 * Perform one cycle of SHA-256.
42256 * @param {bitArray} words one block of words.
42257 * @private
42258 */
42259 _block:function (words) {
42260 var i, tmp, a, b,
42261 w = words.slice(0),
42262 h = this._h,
42263 k = this._key,
42264 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
42265 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
42266
42267 /* Rationale for placement of |0 :
42268 * If a value can overflow is original 32 bits by a factor of more than a few
42269 * million (2^23 ish), there is a possibility that it might overflow the
42270 * 53-bit mantissa and lose precision.
42271 *
42272 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
42273 * propagates around the loop, and on the hash state h[]. I don't believe
42274 * that the clamps on h4 and on h0 are strictly necessary, but it's close
42275 * (for h4 anyway), and better safe than sorry.
42276 *
42277 * The clamps on h[] are necessary for the output to be correct even in the
42278 * common case and for short inputs.
42279 */
42280 for (i=0; i<64; i++) {
42281 // load up the input word for this round
42282 if (i<16) {
42283 tmp = w[i];
42284 } else {
42285 a = w[(i+1 ) & 15];
42286 b = w[(i+14) & 15];
42287 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
42288 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
42289 w[i&15] + w[(i+9) & 15]) | 0;
42290 }
42291
42292 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
42293
42294 // shift register
42295 h7 = h6; h6 = h5; h5 = h4;
42296 h4 = h3 + tmp | 0;
42297 h3 = h2; h2 = h1; h1 = h0;
42298
42299 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
42300 }
42301
42302 h[0] = h[0]+h0 | 0;
42303 h[1] = h[1]+h1 | 0;
42304 h[2] = h[2]+h2 | 0;
42305 h[3] = h[3]+h3 | 0;
42306 h[4] = h[4]+h4 | 0;
42307 h[5] = h[5]+h5 | 0;
42308 h[6] = h[6]+h6 | 0;
42309 h[7] = h[7]+h7 | 0;
42310 }
42311};
dc55c6b0 42312</script>
ab78acc6 42313 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
3af2954a 42314WORDLISTS["english"] = [
ebd8d4e8
IC
42315"abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
42316"access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
42317"action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
42318"adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
42319"agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
42320"alien","all","alley","allow","almost","alone","alpha","already","also","alter",
42321"always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
42322"angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
42323"anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
42324"area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
42325"arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
42326"assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
42327"audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
42328"aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
42329"bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
42330"barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
42331"beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
42332"best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
42333"bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
42334"blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
42335"boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
42336"bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
42337"breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
42338"broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
42339"bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
42340"butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
42341"calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
42342"canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
42343"cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
42344"cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
42345"cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
42346"chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
42347"chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
42348"citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
42349"clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
42350"cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
42351"code","coffee","coil","coin","collect","color","column","combine","come","comfort",
42352"comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
42353"convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
42354"cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
42355"craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
42356"crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
42357"cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
42358"cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
42359"damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
42360"debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
42361"define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
42362"depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
42363"despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
42364"diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
42365"direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
42366"divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
42367"donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
42368"drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
42369"drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
42370"dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
42371"ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
42372"elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
42373"embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
42374"endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
42375"enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
42376"era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
42377"eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
42378"excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
42379"exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
42380"eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
42381"family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
42382"fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
42383"fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
42384"film","filter","final","find","fine","finger","finish","fire","firm","first",
42385"fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
42386"flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
42387"foam","focus","fog","foil","fold","follow","food","foot","force","forest",
42388"forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
42389"frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
42390"fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
42391"gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
42392"gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
42393"ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
42394"glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
42395"goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
42396"grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
42397"grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
42398"guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
42399"harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
42400"heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
42401"high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
42402"holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
42403"host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
42404"hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
42405"identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
42406"impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
42407"indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
42408"inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
42409"intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
42410"item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
42411"job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
42412"junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
42413"kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
42414"knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
42415"laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
42416"layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
42417"legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
42418"liar","liberty","library","license","life","lift","light","like","limb","limit",
42419"link","lion","liquid","list","little","live","lizard","load","loan","lobster",
42420"local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
42421"loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
42422"magic","magnet","maid","mail","main","major","make","mammal","man","manage",
42423"mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
42424"marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
42425"maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
42426"member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
42427"metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
42428"minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
42429"model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
42430"more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
42431"much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
42432"myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
42433"near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
42434"network","neutral","never","news","next","nice","night","noble","noise","nominee",
42435"noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
42436"nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
42437"obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
42438"oil","okay","old","olive","olympic","omit","once","one","onion","online",
42439"only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
42440"ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
42441"outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
42442"paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
42443"parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
42444"pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
42445"penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
42446"phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
42447"pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
42448"play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
42449"pole","police","pond","pony","pool","popular","portion","position","possible","post",
42450"potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
42451"present","pretty","prevent","price","pride","primary","print","priority","prison","private",
42452"prize","problem","process","produce","profit","program","project","promote","proof","property",
42453"prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
42454"punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
42455"pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
42456"raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
42457"ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
42458"ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
42459"reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
42460"relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
42461"repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
42462"result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
42463"ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
42464"ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
42465"romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
42466"rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
42467"safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
42468"satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
42469"scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
42470"scrub","sea","search","season","seat","second","secret","section","security","seed",
42471"seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
42472"session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
42473"sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
42474"short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
42475"siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
42476"sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
42477"skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
42478"slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
42479"snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
42480"soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
42481"sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
42482"speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
42483"spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
42484"spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
42485"stand","start","state","stay","steak","steel","stem","step","stereo","stick",
42486"still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
42487"strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
42488"success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
42489"sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
42490"suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
42491"swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
42492"tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
42493"teach","team","tell","ten","tenant","tennis","tent","term","test","text",
42494"thank","that","theme","then","theory","there","they","thing","this","thought",
42495"three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
42496"time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
42497"toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
42498"tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
42499"toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
42500"trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
42501"trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
42502"truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
42503"twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
42504"unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
42505"unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
42506"uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
42507"useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
42508"vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
42509"verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
42510"video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
42511"vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
42512"wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
42513"wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
42514"web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
42515"wheel","when","where","whip","whisper","wide","width","wife","wild","will",
42516"win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
42517"wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
42518"worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
42519"yellow","you","young","youth","zebra","zero","zone","zoo"]
0515eeec
IC
42520</script>
42521 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
42522WORDLISTS["japanese"] = [
42523"あいこくしん", "あいさつ", "あいだ", "あおぞら", "あかちゃん", "あきる", "あけがた", "あける", "あこがれる", "あさい",
42524"あさひ", "あしあと", "あじわう", "あずかる", "あずき", "あそぶ", "あたえる", "あたためる", "あたりまえ", "あたる",
42525"あつい", "あつかう", "あっしゅく", "あつまり", "あつめる", "あてな", "あてはまる", "あひる", "あぶら", "あぶる",
42526"あふれる", "あまい", "あまど", "あまやかす", "あまり", "あみもの", "あめりか", "あやまる", "あゆむ", "あらいぐま",
42527"あらし", "あらすじ", "あらためる", "あらゆる", "あらわす", "ありがとう", "あわせる", "あわてる", "あんい", "あんがい",
42528"あんこ", "あんぜん", "あんてい", "あんない", "あんまり", "いいだす", "いおん", "いがい", "いがく", "いきおい",
42529"いきなり", "いきもの", "いきる", "いくじ", "いくぶん", "いけばな", "いけん", "いこう", "いこく", "いこつ",
42530"いさましい", "いさん", "いしき", "いじゅう", "いじょう", "いじわる", "いずみ", "いずれ", "いせい", "いせえび",
42531"いせかい", "いせき", "いぜん", "いそうろう", "いそがしい", "いだい", "いだく", "いたずら", "いたみ", "いたりあ",
42532"いちおう", "いちじ", "いちど", "いちば", "いちぶ", "いちりゅう", "いつか", "いっしゅん", "いっせい", "いっそう",
42533"いったん", "いっち", "いってい", "いっぽう", "いてざ", "いてん", "いどう", "いとこ", "いない", "いなか",
42534"いねむり", "いのち", "いのる", "いはつ", "いばる", "いはん", "いびき", "いひん", "いふく", "いへん",
42535"いほう", "いみん", "いもうと", "いもたれ", "いもり", "いやがる", "いやす", "いよかん", "いよく", "いらい",
42536"いらすと", "いりぐち", "いりょう", "いれい", "いれもの", "いれる", "いろえんぴつ", "いわい", "いわう", "いわかん",
42537"いわば", "いわゆる", "いんげんまめ", "いんさつ", "いんしょう", "いんよう", "うえき", "うえる", "うおざ", "うがい",
42538"うかぶ", "うかべる", "うきわ", "うくらいな", "うくれれ", "うけたまわる", "うけつけ", "うけとる", "うけもつ", "うける",
42539"うごかす", "うごく", "うこん", "うさぎ", "うしなう", "うしろがみ", "うすい", "うすぎ", "うすぐらい", "うすめる",
42540"うせつ", "うちあわせ", "うちがわ", "うちき", "うちゅう", "うっかり", "うつくしい", "うったえる", "うつる", "うどん",
42541"うなぎ", "うなじ", "うなずく", "うなる", "うねる", "うのう", "うぶげ", "うぶごえ", "うまれる", "うめる",
42542"うもう", "うやまう", "うよく", "うらがえす", "うらぐち", "うらない", "うりあげ", "うりきれ", "うるさい", "うれしい",
42543"うれゆき", "うれる", "うろこ", "うわき", "うわさ", "うんこう", "うんちん", "うんてん", "うんどう", "えいえん",
42544"えいが", "えいきょう", "えいご", "えいせい", "えいぶん", "えいよう", "えいわ", "えおり", "えがお", "えがく",
42545"えきたい", "えくせる", "えしゃく", "えすて", "えつらん", "えのぐ", "えほうまき", "えほん", "えまき", "えもじ",
42546"えもの", "えらい", "えらぶ", "えりあ", "えんえん", "えんかい", "えんぎ", "えんげき", "えんしゅう", "えんぜつ",
42547"えんそく", "えんちょう", "えんとつ", "おいかける", "おいこす", "おいしい", "おいつく", "おうえん", "おうさま", "おうじ",
42548"おうせつ", "おうたい", "おうふく", "おうべい", "おうよう", "おえる", "おおい", "おおう", "おおどおり", "おおや",
42549"おおよそ", "おかえり", "おかず", "おがむ", "おかわり", "おぎなう", "おきる", "おくさま", "おくじょう", "おくりがな",
42550"おくる", "おくれる", "おこす", "おこなう", "おこる", "おさえる", "おさない", "おさめる", "おしいれ", "おしえる",
42551"おじぎ", "おじさん", "おしゃれ", "おそらく", "おそわる", "おたがい", "おたく", "おだやか", "おちつく", "おっと",
42552"おつり", "おでかけ", "おとしもの", "おとなしい", "おどり", "おどろかす", "おばさん", "おまいり", "おめでとう", "おもいで",
42553"おもう", "おもたい", "おもちゃ", "おやつ", "おやゆび", "およぼす", "おらんだ", "おろす", "おんがく", "おんけい",
42554"おんしゃ", "おんせん", "おんだん", "おんちゅう", "おんどけい", "かあつ", "かいが", "がいき", "がいけん", "がいこう",
42555"かいさつ", "かいしゃ", "かいすいよく", "かいぜん", "かいぞうど", "かいつう", "かいてん", "かいとう", "かいふく", "がいへき",
42556"かいほう", "かいよう", "がいらい", "かいわ", "かえる", "かおり", "かかえる", "かがく", "かがし", "かがみ",
42557"かくご", "かくとく", "かざる", "がぞう", "かたい", "かたち", "がちょう", "がっきゅう", "がっこう", "がっさん",
42558"がっしょう", "かなざわし", "かのう", "がはく", "かぶか", "かほう", "かほご", "かまう", "かまぼこ", "かめれおん",
42559"かゆい", "かようび", "からい", "かるい", "かろう", "かわく", "かわら", "がんか", "かんけい", "かんこう",
42560"かんしゃ", "かんそう", "かんたん", "かんち", "がんばる", "きあい", "きあつ", "きいろ", "ぎいん", "きうい",
42561"きうん", "きえる", "きおう", "きおく", "きおち", "きおん", "きかい", "きかく", "きかんしゃ", "ききて",
42562"きくばり", "きくらげ", "きけんせい", "きこう", "きこえる", "きこく", "きさい", "きさく", "きさま", "きさらぎ",
42563"ぎじかがく", "ぎしき", "ぎじたいけん", "ぎじにってい", "ぎじゅつしゃ", "きすう", "きせい", "きせき", "きせつ", "きそう",
42564"きぞく", "きぞん", "きたえる", "きちょう", "きつえん", "ぎっちり", "きつつき", "きつね", "きてい", "きどう",
42565"きどく", "きない", "きなが", "きなこ", "きぬごし", "きねん", "きのう", "きのした", "きはく", "きびしい",
42566"きひん", "きふく", "きぶん", "きぼう", "きほん", "きまる", "きみつ", "きむずかしい", "きめる", "きもだめし",
42567"きもち", "きもの", "きゃく", "きやく", "ぎゅうにく", "きよう", "きょうりゅう", "きらい", "きらく", "きりん",
42568"きれい", "きれつ", "きろく", "ぎろん", "きわめる", "ぎんいろ", "きんかくじ", "きんじょ", "きんようび", "ぐあい",
42569"くいず", "くうかん", "くうき", "くうぐん", "くうこう", "ぐうせい", "くうそう", "ぐうたら", "くうふく", "くうぼ",
42570"くかん", "くきょう", "くげん", "ぐこう", "くさい", "くさき", "くさばな", "くさる", "くしゃみ", "くしょう",
42571"くすのき", "くすりゆび", "くせげ", "くせん", "ぐたいてき", "くださる", "くたびれる", "くちこみ", "くちさき", "くつした",
42572"ぐっすり", "くつろぐ", "くとうてん", "くどく", "くなん", "くねくね", "くのう", "くふう", "くみあわせ", "くみたてる",
42573"くめる", "くやくしょ", "くらす", "くらべる", "くるま", "くれる", "くろう", "くわしい", "ぐんかん", "ぐんしょく",
42574"ぐんたい", "ぐんて", "けあな", "けいかく", "けいけん", "けいこ", "けいさつ", "げいじゅつ", "けいたい", "げいのうじん",
42575"けいれき", "けいろ", "けおとす", "けおりもの", "げきか", "げきげん", "げきだん", "げきちん", "げきとつ", "げきは",
42576"げきやく", "げこう", "げこくじょう", "げざい", "けさき", "げざん", "けしき", "けしごむ", "けしょう", "げすと",
42577"けたば", "けちゃっぷ", "けちらす", "けつあつ", "けつい", "けつえき", "けっこん", "けつじょ", "けっせき", "けってい",
42578"けつまつ", "げつようび", "げつれい", "けつろん", "げどく", "けとばす", "けとる", "けなげ", "けなす", "けなみ",
42579"けぬき", "げねつ", "けねん", "けはい", "げひん", "けぶかい", "げぼく", "けまり", "けみかる", "けむし",
42580"けむり", "けもの", "けらい", "けろけろ", "けわしい", "けんい", "けんえつ", "けんお", "けんか", "げんき",
42581"けんげん", "けんこう", "けんさく", "けんしゅう", "けんすう", "げんそう", "けんちく", "けんてい", "けんとう", "けんない",
42582"けんにん", "げんぶつ", "けんま", "けんみん", "けんめい", "けんらん", "けんり", "こあくま", "こいぬ", "こいびと",
42583"ごうい", "こうえん", "こうおん", "こうかん", "ごうきゅう", "ごうけい", "こうこう", "こうさい", "こうじ", "こうすい",
42584"ごうせい", "こうそく", "こうたい", "こうちゃ", "こうつう", "こうてい", "こうどう", "こうない", "こうはい", "ごうほう",
42585"ごうまん", "こうもく", "こうりつ", "こえる", "こおり", "ごかい", "ごがつ", "ごかん", "こくご", "こくさい",
42586"こくとう", "こくない", "こくはく", "こぐま", "こけい", "こける", "ここのか", "こころ", "こさめ", "こしつ",
42587"こすう", "こせい", "こせき", "こぜん", "こそだて", "こたい", "こたえる", "こたつ", "こちょう", "こっか",
42588"こつこつ", "こつばん", "こつぶ", "こてい", "こてん", "ことがら", "ことし", "ことば", "ことり", "こなごな",
42589"こねこね", "このまま", "このみ", "このよ", "ごはん", "こひつじ", "こふう", "こふん", "こぼれる", "ごまあぶら",
42590"こまかい", "ごますり", "こまつな", "こまる", "こむぎこ", "こもじ", "こもち", "こもの", "こもん", "こやく",
42591"こやま", "こゆう", "こゆび", "こよい", "こよう", "こりる", "これくしょん", "ころっけ", "こわもて", "こわれる",
42592"こんいん", "こんかい", "こんき", "こんしゅう", "こんすい", "こんだて", "こんとん", "こんなん", "こんびに", "こんぽん",
42593"こんまけ", "こんや", "こんれい", "こんわく", "ざいえき", "さいかい", "さいきん", "ざいげん", "ざいこ", "さいしょ",
42594"さいせい", "ざいたく", "ざいちゅう", "さいてき", "ざいりょう", "さうな", "さかいし", "さがす", "さかな", "さかみち",
42595"さがる", "さぎょう", "さくし", "さくひん", "さくら", "さこく", "さこつ", "さずかる", "ざせき", "さたん",
42596"さつえい", "ざつおん", "ざっか", "ざつがく", "さっきょく", "ざっし", "さつじん", "ざっそう", "さつたば", "さつまいも",
42597"さてい", "さといも", "さとう", "さとおや", "さとし", "さとる", "さのう", "さばく", "さびしい", "さべつ",
42598"さほう", "さほど", "さます", "さみしい", "さみだれ", "さむけ", "さめる", "さやえんどう", "さゆう", "さよう",
42599"さよく", "さらだ", "ざるそば", "さわやか", "さわる", "さんいん", "さんか", "さんきゃく", "さんこう", "さんさい",
42600"ざんしょ", "さんすう", "さんせい", "さんそ", "さんち", "さんま", "さんみ", "さんらん", "しあい", "しあげ",
42601"しあさって", "しあわせ", "しいく", "しいん", "しうち", "しえい", "しおけ", "しかい", "しかく", "じかん",
42602"しごと", "しすう", "じだい", "したうけ", "したぎ", "したて", "したみ", "しちょう", "しちりん", "しっかり",
42603"しつじ", "しつもん", "してい", "してき", "してつ", "じてん", "じどう", "しなぎれ", "しなもの", "しなん",
42604"しねま", "しねん", "しのぐ", "しのぶ", "しはい", "しばかり", "しはつ", "しはらい", "しはん", "しひょう",
42605"しふく", "じぶん", "しへい", "しほう", "しほん", "しまう", "しまる", "しみん", "しむける", "じむしょ",
42606"しめい", "しめる", "しもん", "しゃいん", "しゃうん", "しゃおん", "じゃがいも", "しやくしょ", "しゃくほう", "しゃけん",
42607"しゃこ", "しゃざい", "しゃしん", "しゃせん", "しゃそう", "しゃたい", "しゃちょう", "しゃっきん", "じゃま", "しゃりん",
42608"しゃれい", "じゆう", "じゅうしょ", "しゅくはく", "じゅしん", "しゅっせき", "しゅみ", "しゅらば", "じゅんばん", "しょうかい",
42609"しょくたく", "しょっけん", "しょどう", "しょもつ", "しらせる", "しらべる", "しんか", "しんこう", "じんじゃ", "しんせいじ",
42610"しんちく", "しんりん", "すあげ", "すあし", "すあな", "ずあん", "すいえい", "すいか", "すいとう", "ずいぶん",
42611"すいようび", "すうがく", "すうじつ", "すうせん", "すおどり", "すきま", "すくう", "すくない", "すける", "すごい",
42612"すこし", "ずさん", "すずしい", "すすむ", "すすめる", "すっかり", "ずっしり", "ずっと", "すてき", "すてる",
42613"すねる", "すのこ", "すはだ", "すばらしい", "ずひょう", "ずぶぬれ", "すぶり", "すふれ", "すべて", "すべる",
42614"ずほう", "すぼん", "すまい", "すめし", "すもう", "すやき", "すらすら", "するめ", "すれちがう", "すろっと",
42615"すわる", "すんぜん", "すんぽう", "せあぶら", "せいかつ", "せいげん", "せいじ", "せいよう", "せおう", "せかいかん",
42616"せきにん", "せきむ", "せきゆ", "せきらんうん", "せけん", "せこう", "せすじ", "せたい", "せたけ", "せっかく",
42617"せっきゃく", "ぜっく", "せっけん", "せっこつ", "せっさたくま", "せつぞく", "せつだん", "せつでん", "せっぱん", "せつび",
42618"せつぶん", "せつめい", "せつりつ", "せなか", "せのび", "せはば", "せびろ", "せぼね", "せまい", "せまる",
42619"せめる", "せもたれ", "せりふ", "ぜんあく", "せんい", "せんえい", "せんか", "せんきょ", "せんく", "せんげん",
42620"ぜんご", "せんさい", "せんしゅ", "せんすい", "せんせい", "せんぞ", "せんたく", "せんちょう", "せんてい", "せんとう",
42621"せんぬき", "せんねん", "せんぱい", "ぜんぶ", "ぜんぽう", "せんむ", "せんめんじょ", "せんもん", "せんやく", "せんゆう",
42622"せんよう", "ぜんら", "ぜんりゃく", "せんれい", "せんろ", "そあく", "そいとげる", "そいね", "そうがんきょう", "そうき",
42623"そうご", "そうしん", "そうだん", "そうなん", "そうび", "そうめん", "そうり", "そえもの", "そえん", "そがい",
42624"そげき", "そこう", "そこそこ", "そざい", "そしな", "そせい", "そせん", "そそぐ", "そだてる", "そつう",
42625"そつえん", "そっかん", "そつぎょう", "そっけつ", "そっこう", "そっせん", "そっと", "そとがわ", "そとづら", "そなえる",
42626"そなた", "そふぼ", "そぼく", "そぼろ", "そまつ", "そまる", "そむく", "そむりえ", "そめる", "そもそも",
42627"そよかぜ", "そらまめ", "そろう", "そんかい", "そんけい", "そんざい", "そんしつ", "そんぞく", "そんちょう", "ぞんび",
42628"ぞんぶん", "そんみん", "たあい", "たいいん", "たいうん", "たいえき", "たいおう", "だいがく", "たいき", "たいぐう",
42629"たいけん", "たいこ", "たいざい", "だいじょうぶ", "だいすき", "たいせつ", "たいそう", "だいたい", "たいちょう", "たいてい",
42630"だいどころ", "たいない", "たいねつ", "たいのう", "たいはん", "だいひょう", "たいふう", "たいへん", "たいほ", "たいまつばな",
42631"たいみんぐ", "たいむ", "たいめん", "たいやき", "たいよう", "たいら", "たいりょく", "たいる", "たいわん", "たうえ",
42632"たえる", "たおす", "たおる", "たおれる", "たかい", "たかね", "たきび", "たくさん", "たこく", "たこやき",
42633"たさい", "たしざん", "だじゃれ", "たすける", "たずさわる", "たそがれ", "たたかう", "たたく", "ただしい", "たたみ",
42634"たちばな", "だっかい", "だっきゃく", "だっこ", "だっしゅつ", "だったい", "たてる", "たとえる", "たなばた", "たにん",
42635"たぬき", "たのしみ", "たはつ", "たぶん", "たべる", "たぼう", "たまご", "たまる", "だむる", "ためいき",
42636"ためす", "ためる", "たもつ", "たやすい", "たよる", "たらす", "たりきほんがん", "たりょう", "たりる", "たると",
42637"たれる", "たれんと", "たろっと", "たわむれる", "だんあつ", "たんい", "たんおん", "たんか", "たんき", "たんけん",
42638"たんご", "たんさん", "たんじょうび", "だんせい", "たんそく", "たんたい", "だんち", "たんてい", "たんとう", "だんな",
42639"たんにん", "だんねつ", "たんのう", "たんぴん", "だんぼう", "たんまつ", "たんめい", "だんれつ", "だんろ", "だんわ",
42640"ちあい", "ちあん", "ちいき", "ちいさい", "ちえん", "ちかい", "ちから", "ちきゅう", "ちきん", "ちけいず",
42641"ちけん", "ちこく", "ちさい", "ちしき", "ちしりょう", "ちせい", "ちそう", "ちたい", "ちたん", "ちちおや",
42642"ちつじょ", "ちてき", "ちてん", "ちぬき", "ちぬり", "ちのう", "ちひょう", "ちへいせん", "ちほう", "ちまた",
42643"ちみつ", "ちみどろ", "ちめいど", "ちゃんこなべ", "ちゅうい", "ちゆりょく", "ちょうし", "ちょさくけん", "ちらし", "ちらみ",
42644"ちりがみ", "ちりょう", "ちるど", "ちわわ", "ちんたい", "ちんもく", "ついか", "ついたち", "つうか", "つうじょう",
42645"つうはん", "つうわ", "つかう", "つかれる", "つくね", "つくる", "つけね", "つける", "つごう", "つたえる",
42646"つづく", "つつじ", "つつむ", "つとめる", "つながる", "つなみ", "つねづね", "つのる", "つぶす", "つまらない",
42647"つまる", "つみき", "つめたい", "つもり", "つもる", "つよい", "つるぼ", "つるみく", "つわもの", "つわり",
42648"てあし", "てあて", "てあみ", "ていおん", "ていか", "ていき", "ていけい", "ていこく", "ていさつ", "ていし",
42649"ていせい", "ていたい", "ていど", "ていねい", "ていひょう", "ていへん", "ていぼう", "てうち", "ておくれ", "てきとう",
42650"てくび", "でこぼこ", "てさぎょう", "てさげ", "てすり", "てそう", "てちがい", "てちょう", "てつがく", "てつづき",
42651"でっぱ", "てつぼう", "てつや", "でぬかえ", "てぬき", "てぬぐい", "てのひら", "てはい", "てぶくろ", "てふだ",
42652"てほどき", "てほん", "てまえ", "てまきずし", "てみじか", "てみやげ", "てらす", "てれび", "てわけ", "てわたし",
42653"でんあつ", "てんいん", "てんかい", "てんき", "てんぐ", "てんけん", "てんごく", "てんさい", "てんし", "てんすう",
42654"でんち", "てんてき", "てんとう", "てんない", "てんぷら", "てんぼうだい", "てんめつ", "てんらんかい", "でんりょく", "でんわ",
42655"どあい", "といれ", "どうかん", "とうきゅう", "どうぐ", "とうし", "とうむぎ", "とおい", "とおか", "とおく",
42656"とおす", "とおる", "とかい", "とかす", "ときおり", "ときどき", "とくい", "とくしゅう", "とくてん", "とくに",
42657"とくべつ", "とけい", "とける", "とこや", "とさか", "としょかん", "とそう", "とたん", "とちゅう", "とっきゅう",
42658"とっくん", "とつぜん", "とつにゅう", "とどける", "ととのえる", "とない", "となえる", "となり", "とのさま", "とばす",
42659"どぶがわ", "とほう", "とまる", "とめる", "ともだち", "ともる", "どようび", "とらえる", "とんかつ", "どんぶり",
42660"ないかく", "ないこう", "ないしょ", "ないす", "ないせん", "ないそう", "なおす", "ながい", "なくす", "なげる",
42661"なこうど", "なさけ", "なたでここ", "なっとう", "なつやすみ", "ななおし", "なにごと", "なにもの", "なにわ", "なのか",
42662"なふだ", "なまいき", "なまえ", "なまみ", "なみだ", "なめらか", "なめる", "なやむ", "ならう", "ならび",
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</script>
42729 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
42730WORDLISTS["spanish"] = [
42731"ábaco", "abdomen", "abeja", "abierto", "abogado", "abono", "aborto", "abrazo", "abrir", "abuelo",
42732"abuso", "acabar", "academia", "acceso", "acción", "aceite", "acelga", "acento", "aceptar", "ácido",
42733"aclarar", "acné", "acoger", "acoso", "activo", "acto", "actriz", "actuar", "acudir", "acuerdo",
42734"acusar", "adicto", "admitir", "adoptar", "adorno", "aduana", "adulto", "aéreo", "afectar", "afición",
42735"afinar", "afirmar", "ágil", "agitar", "agonía", "agosto", "agotar", "agregar", "agrio", "agua",
42736"agudo", "águila", "aguja", "ahogo", "ahorro", "aire", "aislar", "ajedrez", "ajeno", "ajuste",
42737"alacrán", "alambre", "alarma", "alba", "álbum", "alcalde", "aldea", "alegre", "alejar", "alerta",
42738"aleta", "alfiler", "alga", "algodón", "aliado", "aliento", "alivio", "alma", "almeja", "almíbar",
42739"altar", "alteza", "altivo", "alto", "altura", "alumno", "alzar", "amable", "amante", "amapola",
42740"amargo", "amasar", "ámbar", "ámbito", "ameno", "amigo", "amistad", "amor", "amparo", "amplio",
42741"ancho", "anciano", "ancla", "andar", "andén", "anemia", "ángulo", "anillo", "ánimo", "anís",
42742"anotar", "antena", "antiguo", "antojo", "anual", "anular", "anuncio", "añadir", "añejo", "año",
42743"apagar", "aparato", "apetito", "apio", "aplicar", "apodo", "aporte", "apoyo", "aprender", "aprobar",
42744"apuesta", "apuro", "arado", "araña", "arar", "árbitro", "árbol", "arbusto", "archivo", "arco",
42745"arder", "ardilla", "arduo", "área", "árido", "aries", "armonía", "arnés", "aroma", "arpa",
42746"arpón", "arreglo", "arroz", "arruga", "arte", "artista", "asa", "asado", "asalto", "ascenso",
42747"asegurar", "aseo", "asesor", "asiento", "asilo", "asistir", "asno", "asombro", "áspero", "astilla",
42748"astro", "astuto", "asumir", "asunto", "atajo", "ataque", "atar", "atento", "ateo", "ático",
42749"atleta", "átomo", "atraer", "atroz", "atún", "audaz", "audio", "auge", "aula", "aumento",
42750"ausente", "autor", "aval", "avance", "avaro", "ave", "avellana", "avena", "avestruz", "avión",
42751"aviso", "ayer", "ayuda", "ayuno", "azafrán", "azar", "azote", "azúcar", "azufre", "azul",
42752"baba", "babor", "bache", "bahía", "baile", "bajar", "balanza", "balcón", "balde", "bambú",
42753"banco", "banda", "baño", "barba", "barco", "barniz", "barro", "báscula", "bastón", "basura",
42754"batalla", "batería", "batir", "batuta", "baúl", "bazar", "bebé", "bebida", "bello", "besar",
42755"beso", "bestia", "bicho", "bien", "bingo", "blanco", "bloque", "blusa", "boa", "bobina",
42756"bobo", "boca", "bocina", "boda", "bodega", "boina", "bola", "bolero", "bolsa", "bomba",
42757"bondad", "bonito", "bono", "bonsái", "borde", "borrar", "bosque", "bote", "botín", "bóveda",
42758"bozal", "bravo", "brazo", "brecha", "breve", "brillo", "brinco", "brisa", "broca", "broma",
42759"bronce", "brote", "bruja", "brusco", "bruto", "buceo", "bucle", "bueno", "buey", "bufanda",
42760"bufón", "búho", "buitre", "bulto", "burbuja", "burla", "burro", "buscar", "butaca", "buzón",
42761"caballo", "cabeza", "cabina", "cabra", "cacao", "cadáver", "cadena", "caer", "café", "caída",
42762"caimán", "caja", "cajón", "cal", "calamar", "calcio", "caldo", "calidad", "calle", "calma",
42763"calor", "calvo", "cama", "cambio", "camello", "camino", "campo", "cáncer", "candil", "canela",
42764"canguro", "canica", "canto", "caña", "cañón", "caoba", "caos", "capaz", "capitán", "capote",
42765"captar", "capucha", "cara", "carbón", "cárcel", "careta", "carga", "cariño", "carne", "carpeta",
42766"carro", "carta", "casa", "casco", "casero", "caspa", "castor", "catorce", "catre", "caudal",
42767"causa", "cazo", "cebolla", "ceder", "cedro", "celda", "célebre", "celoso", "célula", "cemento",
42768"ceniza", "centro", "cerca", "cerdo", "cereza", "cero", "cerrar", "certeza", "césped", "cetro",
42769"chacal", "chaleco", "champú", "chancla", "chapa", "charla", "chico", "chiste", "chivo", "choque",
42770"choza", "chuleta", "chupar", "ciclón", "ciego", "cielo", "cien", "cierto", "cifra", "cigarro",
42771"cima", "cinco", "cine", "cinta", "ciprés", "circo", "ciruela", "cisne", "cita", "ciudad",
42772"clamor", "clan", "claro", "clase", "clave", "cliente", "clima", "clínica", "cobre", "cocción",
42773"cochino", "cocina", "coco", "código", "codo", "cofre", "coger", "cohete", "cojín", "cojo",
42774"cola", "colcha", "colegio", "colgar", "colina", "collar", "colmo", "columna", "combate", "comer",
42775"comida", "cómodo", "compra", "conde", "conejo", "conga", "conocer", "consejo", "contar", "copa",
42776"copia", "corazón", "corbata", "corcho", "cordón", "corona", "correr", "coser", "cosmos", "costa",
42777"cráneo", "cráter", "crear", "crecer", "creído", "crema", "cría", "crimen", "cripta", "crisis",
42778"cromo", "crónica", "croqueta", "crudo", "cruz", "cuadro", "cuarto", "cuatro", "cubo", "cubrir",
42779"cuchara", "cuello", "cuento", "cuerda", "cuesta", "cueva", "cuidar", "culebra", "culpa", "culto",
42780"cumbre", "cumplir", "cuna", "cuneta", "cuota", "cupón", "cúpula", "curar", "curioso", "curso",
42781"curva", "cutis", "dama", "danza", "dar", "dardo", "dátil", "deber", "débil", "década",
42782"decir", "dedo", "defensa", "definir", "dejar", "delfín", "delgado", "delito", "demora", "denso",
42783"dental", "deporte", "derecho", "derrota", "desayuno", "deseo", "desfile", "desnudo", "destino", "desvío",
42784"detalle", "detener", "deuda", "día", "diablo", "diadema", "diamante", "diana", "diario", "dibujo",
42785"dictar", "diente", "dieta", "diez", "difícil", "digno", "dilema", "diluir", "dinero", "directo",
42786"dirigir", "disco", "diseño", "disfraz", "diva", "divino", "doble", "doce", "dolor", "domingo",
42787"don", "donar", "dorado", "dormir", "dorso", "dos", "dosis", "dragón", "droga", "ducha",
42788"duda", "duelo", "dueño", "dulce", "dúo", "duque", "durar", "dureza", "duro", "ébano",
42789"ebrio", "echar", "eco", "ecuador", "edad", "edición", "edificio", "editor", "educar", "efecto",
42790"eficaz", "eje", "ejemplo", "elefante", "elegir", "elemento", "elevar", "elipse", "élite", "elixir",
42791"elogio", "eludir", "embudo", "emitir", "emoción", "empate", "empeño", "empleo", "empresa", "enano",
42792"encargo", "enchufe", "encía", "enemigo", "enero", "enfado", "enfermo", "engaño", "enigma", "enlace",
42793"enorme", "enredo", "ensayo", "enseñar", "entero", "entrar", "envase", "envío", "época", "equipo",
42794"erizo", "escala", "escena", "escolar", "escribir", "escudo", "esencia", "esfera", "esfuerzo", "espada",
42795"espejo", "espía", "esposa", "espuma", "esquí", "estar", "este", "estilo", "estufa", "etapa",
42796"eterno", "ética", "etnia", "evadir", "evaluar", "evento", "evitar", "exacto", "examen", "exceso",
42797"excusa", "exento", "exigir", "exilio", "existir", "éxito", "experto", "explicar", "exponer", "extremo",
42798"fábrica", "fábula", "fachada", "fácil", "factor", "faena", "faja", "falda", "fallo", "falso",
42799"faltar", "fama", "familia", "famoso", "faraón", "farmacia", "farol", "farsa", "fase", "fatiga",
42800"fauna", "favor", "fax", "febrero", "fecha", "feliz", "feo", "feria", "feroz", "fértil",
42801"fervor", "festín", "fiable", "fianza", "fiar", "fibra", "ficción", "ficha", "fideo", "fiebre",
42802"fiel", "fiera", "fiesta", "figura", "fijar", "fijo", "fila", "filete", "filial", "filtro",
42803"fin", "finca", "fingir", "finito", "firma", "flaco", "flauta", "flecha", "flor", "flota",
42804"fluir", "flujo", "flúor", "fobia", "foca", "fogata", "fogón", "folio", "folleto", "fondo",
42805"forma", "forro", "fortuna", "forzar", "fosa", "foto", "fracaso", "frágil", "franja", "frase",
42806"fraude", "freír", "freno", "fresa", "frío", "frito", "fruta", "fuego", "fuente", "fuerza",
42807"fuga", "fumar", "función", "funda", "furgón", "furia", "fusil", "fútbol", "futuro", "gacela",
42808"gafas", "gaita", "gajo", "gala", "galería", "gallo", "gamba", "ganar", "gancho", "ganga",
42809"ganso", "garaje", "garza", "gasolina", "gastar", "gato", "gavilán", "gemelo", "gemir", "gen",
42810"género", "genio", "gente", "geranio", "gerente", "germen", "gesto", "gigante", "gimnasio", "girar",
42811"giro", "glaciar", "globo", "gloria", "gol", "golfo", "goloso", "golpe", "goma", "gordo",
42812"gorila", "gorra", "gota", "goteo", "gozar", "grada", "gráfico", "grano", "grasa", "gratis",
42813"grave", "grieta", "grillo", "gripe", "gris", "grito", "grosor", "grúa", "grueso", "grumo",
42814"grupo", "guante", "guapo", "guardia", "guerra", "guía", "guiño", "guion", "guiso", "guitarra",
42815"gusano", "gustar", "haber", "hábil", "hablar", "hacer", "hacha", "hada", "hallar", "hamaca",
42816"harina", "haz", "hazaña", "hebilla", "hebra", "hecho", "helado", "helio", "hembra", "herir",
42817"hermano", "héroe", "hervir", "hielo", "hierro", "hígado", "higiene", "hijo", "himno", "historia",
42818"hocico", "hogar", "hoguera", "hoja", "hombre", "hongo", "honor", "honra", "hora", "hormiga",
42819"horno", "hostil", "hoyo", "hueco", "huelga", "huerta", "hueso", "huevo", "huida", "huir",
42820"humano", "húmedo", "humilde", "humo", "hundir", "huracán", "hurto", "icono", "ideal", "idioma",
42821"ídolo", "iglesia", "iglú", "igual", "ilegal", "ilusión", "imagen", "imán", "imitar", "impar",
42822"imperio", "imponer", "impulso", "incapaz", "índice", "inerte", "infiel", "informe", "ingenio", "inicio",
42823"inmenso", "inmune", "innato", "insecto", "instante", "interés", "íntimo", "intuir", "inútil", "invierno",
42824"ira", "iris", "ironía", "isla", "islote", "jabalí", "jabón", "jamón", "jarabe", "jardín",
42825"jarra", "jaula", "jazmín", "jefe", "jeringa", "jinete", "jornada", "joroba", "joven", "joya",
42826"juerga", "jueves", "juez", "jugador", "jugo", "juguete", "juicio", "junco", "jungla", "junio",
42827"juntar", "júpiter", "jurar", "justo", "juvenil", "juzgar", "kilo", "koala", "labio", "lacio",
42828"lacra", "lado", "ladrón", "lagarto", "lágrima", "laguna", "laico", "lamer", "lámina", "lámpara",
42829"lana", "lancha", "langosta", "lanza", "lápiz", "largo", "larva", "lástima", "lata", "látex",
42830"latir", "laurel", "lavar", "lazo", "leal", "lección", "leche", "lector", "leer", "legión",
42831"legumbre", "lejano", "lengua", "lento", "leña", "león", "leopardo", "lesión", "letal", "letra",
42832"leve", "leyenda", "libertad", "libro", "licor", "líder", "lidiar", "lienzo", "liga", "ligero",
42833"lima", "límite", "limón", "limpio", "lince", "lindo", "línea", "lingote", "lino", "linterna",
42834"líquido", "liso", "lista", "litera", "litio", "litro", "llaga", "llama", "llanto", "llave",
42835"llegar", "llenar", "llevar", "llorar", "llover", "lluvia", "lobo", "loción", "loco", "locura",
42836"lógica", "logro", "lombriz", "lomo", "lonja", "lote", "lucha", "lucir", "lugar", "lujo",
42837"luna", "lunes", "lupa", "lustro", "luto", "luz", "maceta", "macho", "madera", "madre",
42838"maduro", "maestro", "mafia", "magia", "mago", "maíz", "maldad", "maleta", "malla", "malo",
42839"mamá", "mambo", "mamut", "manco", "mando", "manejar", "manga", "maniquí", "manjar", "mano",
42840"manso", "manta", "mañana", "mapa", "máquina", "mar", "marco", "marea", "marfil", "margen",
42841"marido", "mármol", "marrón", "martes", "marzo", "masa", "máscara", "masivo", "matar", "materia",
42842"matiz", "matriz", "máximo", "mayor", "mazorca", "mecha", "medalla", "medio", "médula", "mejilla",
42843"mejor", "melena", "melón", "memoria", "menor", "mensaje", "mente", "menú", "mercado", "merengue",
42844"mérito", "mes", "mesón", "meta", "meter", "método", "metro", "mezcla", "miedo", "miel",
42845"miembro", "miga", "mil", "milagro", "militar", "millón", "mimo", "mina", "minero", "mínimo",
42846"minuto", "miope", "mirar", "misa", "miseria", "misil", "mismo", "mitad", "mito", "mochila",
42847"moción", "moda", "modelo", "moho", "mojar", "molde", "moler", "molino", "momento", "momia",
42848"monarca", "moneda", "monja", "monto", "moño", "morada", "morder", "moreno", "morir", "morro",
42849"morsa", "mortal", "mosca", "mostrar", "motivo", "mover", "móvil", "mozo", "mucho", "mudar",
42850"mueble", "muela", "muerte", "muestra", "mugre", "mujer", "mula", "muleta", "multa", "mundo",
42851"muñeca", "mural", "muro", "músculo", "museo", "musgo", "música", "muslo", "nácar", "nación",
42852"nadar", "naipe", "naranja", "nariz", "narrar", "nasal", "natal", "nativo", "natural", "náusea",
42853"naval", "nave", "navidad", "necio", "néctar", "negar", "negocio", "negro", "neón", "nervio",
42854"neto", "neutro", "nevar", "nevera", "nicho", "nido", "niebla", "nieto", "niñez", "niño",
42855"nítido", "nivel", "nobleza", "noche", "nómina", "noria", "norma", "norte", "nota", "noticia",
42856"novato", "novela", "novio", "nube", "nuca", "núcleo", "nudillo", "nudo", "nuera", "nueve",
42857"nuez", "nulo", "número", "nutria", "oasis", "obeso", "obispo", "objeto", "obra", "obrero",
42858"observar", "obtener", "obvio", "oca", "ocaso", "océano", "ochenta", "ocho", "ocio", "ocre",
42859"octavo", "octubre", "oculto", "ocupar", "ocurrir", "odiar", "odio", "odisea", "oeste", "ofensa",
42860"oferta", "oficio", "ofrecer", "ogro", "oído", "oír", "ojo", "ola", "oleada", "olfato",
42861"olivo", "olla", "olmo", "olor", "olvido", "ombligo", "onda", "onza", "opaco", "opción",
42862"ópera", "opinar", "oponer", "optar", "óptica", "opuesto", "oración", "orador", "oral", "órbita",
42863"orca", "orden", "oreja", "órgano", "orgía", "orgullo", "oriente", "origen", "orilla", "oro",
42864"orquesta", "oruga", "osadía", "oscuro", "osezno", "oso", "ostra", "otoño", "otro", "oveja",
42865"óvulo", "óxido", "oxígeno", "oyente", "ozono", "pacto", "padre", "paella", "página", "pago",
42866"país", "pájaro", "palabra", "palco", "paleta", "pálido", "palma", "paloma", "palpar", "pan",
42867"panal", "pánico", "pantera", "pañuelo", "papá", "papel", "papilla", "paquete", "parar", "parcela",
42868"pared", "parir", "paro", "párpado", "parque", "párrafo", "parte", "pasar", "paseo", "pasión",
42869"paso", "pasta", "pata", "patio", "patria", "pausa", "pauta", "pavo", "payaso", "peatón",
42870"pecado", "pecera", "pecho", "pedal", "pedir", "pegar", "peine", "pelar", "peldaño", "pelea",
42871"peligro", "pellejo", "pelo", "peluca", "pena", "pensar", "peñón", "peón", "peor", "pepino",
42872"pequeño", "pera", "percha", "perder", "pereza", "perfil", "perico", "perla", "permiso", "perro",
42873"persona", "pesa", "pesca", "pésimo", "pestaña", "pétalo", "petróleo", "pez", "pezuña", "picar",
42874"pichón", "pie", "piedra", "pierna", "pieza", "pijama", "pilar", "piloto", "pimienta", "pino",
42875"pintor", "pinza", "piña", "piojo", "pipa", "pirata", "pisar", "piscina", "piso", "pista",
42876"pitón", "pizca", "placa", "plan", "plata", "playa", "plaza", "pleito", "pleno", "plomo",
42877"pluma", "plural", "pobre", "poco", "poder", "podio", "poema", "poesía", "poeta", "polen",
42878"policía", "pollo", "polvo", "pomada", "pomelo", "pomo", "pompa", "poner", "porción", "portal",
42879"posada", "poseer", "posible", "poste", "potencia", "potro", "pozo", "prado", "precoz", "pregunta",
42880"premio", "prensa", "preso", "previo", "primo", "príncipe", "prisión", "privar", "proa", "probar",
42881"proceso", "producto", "proeza", "profesor", "programa", "prole", "promesa", "pronto", "propio", "próximo",
42882"prueba", "público", "puchero", "pudor", "pueblo", "puerta", "puesto", "pulga", "pulir", "pulmón",
42883"pulpo", "pulso", "puma", "punto", "puñal", "puño", "pupa", "pupila", "puré", "quedar",
42884"queja", "quemar", "querer", "queso", "quieto", "química", "quince", "quitar", "rábano", "rabia",
42885"rabo", "ración", "radical", "raíz", "rama", "rampa", "rancho", "rango", "rapaz", "rápido",
42886"rapto", "rasgo", "raspa", "rato", "rayo", "raza", "razón", "reacción", "realidad", "rebaño",
42887"rebote", "recaer", "receta", "rechazo", "recoger", "recreo", "recto", "recurso", "red", "redondo",
42888"reducir", "reflejo", "reforma", "refrán", "refugio", "regalo", "regir", "regla", "regreso", "rehén",
42889"reino", "reír", "reja", "relato", "relevo", "relieve", "relleno", "reloj", "remar", "remedio",
42890"remo", "rencor", "rendir", "renta", "reparto", "repetir", "reposo", "reptil", "res", "rescate",
42891"resina", "respeto", "resto", "resumen", "retiro", "retorno", "retrato", "reunir", "revés", "revista",
42892"rey", "rezar", "rico", "riego", "rienda", "riesgo", "rifa", "rígido", "rigor", "rincón",
42893"riñón", "río", "riqueza", "risa", "ritmo", "rito", "rizo", "roble", "roce", "rociar",
42894"rodar", "rodeo", "rodilla", "roer", "rojizo", "rojo", "romero", "romper", "ron", "ronco",
42895"ronda", "ropa", "ropero", "rosa", "rosca", "rostro", "rotar", "rubí", "rubor", "rudo",
42896"rueda", "rugir", "ruido", "ruina", "ruleta", "rulo", "rumbo", "rumor", "ruptura", "ruta",
42897"rutina", "sábado", "saber", "sabio", "sable", "sacar", "sagaz", "sagrado", "sala", "saldo",
42898"salero", "salir", "salmón", "salón", "salsa", "salto", "salud", "salvar", "samba", "sanción",
42899"sandía", "sanear", "sangre", "sanidad", "sano", "santo", "sapo", "saque", "sardina", "sartén",
42900"sastre", "satán", "sauna", "saxofón", "sección", "seco", "secreto", "secta", "sed", "seguir",
42901"seis", "sello", "selva", "semana", "semilla", "senda", "sensor", "señal", "señor", "separar",
42902"sepia", "sequía", "ser", "serie", "sermón", "servir", "sesenta", "sesión", "seta", "setenta",
42903"severo", "sexo", "sexto", "sidra", "siesta", "siete", "siglo", "signo", "sílaba", "silbar",
42904"silencio", "silla", "símbolo", "simio", "sirena", "sistema", "sitio", "situar", "sobre", "socio",
42905"sodio", "sol", "solapa", "soldado", "soledad", "sólido", "soltar", "solución", "sombra", "sondeo",
42906"sonido", "sonoro", "sonrisa", "sopa", "soplar", "soporte", "sordo", "sorpresa", "sorteo", "sostén",
42907"sótano", "suave", "subir", "suceso", "sudor", "suegra", "suelo", "sueño", "suerte", "sufrir",
42908"sujeto", "sultán", "sumar", "superar", "suplir", "suponer", "supremo", "sur", "surco", "sureño",
42909"surgir", "susto", "sutil", "tabaco", "tabique", "tabla", "tabú", "taco", "tacto", "tajo",
42910"talar", "talco", "talento", "talla", "talón", "tamaño", "tambor", "tango", "tanque", "tapa",
42911"tapete", "tapia", "tapón", "taquilla", "tarde", "tarea", "tarifa", "tarjeta", "tarot", "tarro",
42912"tarta", "tatuaje", "tauro", "taza", "tazón", "teatro", "techo", "tecla", "técnica", "tejado",
42913"tejer", "tejido", "tela", "teléfono", "tema", "temor", "templo", "tenaz", "tender", "tener",
42914"tenis", "tenso", "teoría", "terapia", "terco", "término", "ternura", "terror", "tesis", "tesoro",
42915"testigo", "tetera", "texto", "tez", "tibio", "tiburón", "tiempo", "tienda", "tierra", "tieso",
42916"tigre", "tijera", "tilde", "timbre", "tímido", "timo", "tinta", "tío", "típico", "tipo",
42917"tira", "tirón", "titán", "títere", "título", "tiza", "toalla", "tobillo", "tocar", "tocino",
42918"todo", "toga", "toldo", "tomar", "tono", "tonto", "topar", "tope", "toque", "tórax",
42919"torero", "tormenta", "torneo", "toro", "torpedo", "torre", "torso", "tortuga", "tos", "tosco",
42920"toser", "tóxico", "trabajo", "tractor", "traer", "tráfico", "trago", "traje", "tramo", "trance",
42921"trato", "trauma", "trazar", "trébol", "tregua", "treinta", "tren", "trepar", "tres", "tribu",
42922"trigo", "tripa", "triste", "triunfo", "trofeo", "trompa", "tronco", "tropa", "trote", "trozo",
42923"truco", "trueno", "trufa", "tubería", "tubo", "tuerto", "tumba", "tumor", "túnel", "túnica",
42924"turbina", "turismo", "turno", "tutor", "ubicar", "úlcera", "umbral", "unidad", "unir", "universo",
42925"uno", "untar", "uña", "urbano", "urbe", "urgente", "urna", "usar", "usuario", "útil",
42926"utopía", "uva", "vaca", "vacío", "vacuna", "vagar", "vago", "vaina", "vajilla", "vale",
42927"válido", "valle", "valor", "válvula", "vampiro", "vara", "variar", "varón", "vaso", "vecino",
42928"vector", "vehículo", "veinte", "vejez", "vela", "velero", "veloz", "vena", "vencer", "venda",
42929"veneno", "vengar", "venir", "venta", "venus", "ver", "verano", "verbo", "verde", "vereda",
42930"verja", "verso", "verter", "vía", "viaje", "vibrar", "vicio", "víctima", "vida", "vídeo",
42931"vidrio", "viejo", "viernes", "vigor", "vil", "villa", "vinagre", "vino", "viñedo", "violín",
42932"viral", "virgo", "virtud", "visor", "víspera", "vista", "vitamina", "viudo", "vivaz", "vivero",
42933"vivir", "vivo", "volcán", "volumen", "volver", "voraz", "votar", "voto", "voz", "vuelo",
42934"vulgar", "yacer", "yate", "yegua", "yema", "yerno", "yeso", "yodo", "yoga", "yogur",
42935"zafiro", "zanja", "zapato", "zarza", "zona", "zorro", "zumo", "zurdo"]
42936</script>
42937 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
42938WORDLISTS["chinese_simplified"] = [
42939"的", "一", "是", "在", "不", "了", "有", "和", "人", "这",
42940"中", "大", "为", "上", "个", "国", "我", "以", "要", "他",
42941"时", "来", "用", "们", "生", "到", "作", "地", "于", "出",
42942"就", "分", "对", "成", "会", "可", "主", "发", "年", "动",
42943"同", "工", "也", "能", "下", "过", "子", "说", "产", "种",
42944"面", "而", "方", "后", "多", "定", "行", "学", "法", "所",
42945"民", "得", "经", "十", "三", "之", "进", "着", "等", "部",
42946"度", "家", "电", "力", "里", "如", "水", "化", "高", "自",
42947"二", "理", "起", "小", "物", "现", "实", "加", "量", "都",
42948"两", "体", "制", "机", "当", "使", "点", "从", "业", "本",
42949"去", "把", "性", "好", "应", "开", "它", "合", "还", "因",
42950"由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
42951"那", "社", "义", "事", "平", "形", "相", "全", "表", "间",
42952"样", "与", "关", "各", "重", "新", "线", "内", "数", "正",
42953"心", "反", "你", "明", "看", "原", "又", "么", "利", "比",
42954"或", "但", "质", "气", "第", "向", "道", "命", "此", "变",
42955"条", "只", "没", "结", "解", "问", "意", "建", "月", "公",
42956"无", "系", "军", "很", "情", "者", "最", "立", "代", "想",
42957"已", "通", "并", "提", "直", "题", "党", "程", "展", "五",
42958"果", "料", "象", "员", "革", "位", "入", "常", "文", "总",
42959"次", "品", "式", "活", "设", "及", "管", "特", "件", "长",
42960"求", "老", "头", "基", "资", "边", "流", "路", "级", "少",
42961"图", "山", "统", "接", "知", "较", "将", "组", "见", "计",
42962"别", "她", "手", "角", "期", "根", "论", "运", "农", "指",
42963"几", "九", "区", "强", "放", "决", "西", "被", "干", "做",
42964"必", "战", "先", "回", "则", "任", "取", "据", "处", "队",
42965"南", "给", "色", "光", "门", "即", "保", "治", "北", "造",
42966"百", "规", "热", "领", "七", "海", "口", "东", "导", "器",
42967"压", "志", "世", "金", "增", "争", "济", "阶", "油", "思",
42968"术", "极", "交", "受", "联", "什", "认", "六", "共", "权",
42969"收", "证", "改", "清", "美", "再", "采", "转", "更", "单",
42970"风", "切", "打", "白", "教", "速", "花", "带", "安", "场",
42971"身", "车", "例", "真", "务", "具", "万", "每", "目", "至",
42972"达", "走", "积", "示", "议", "声", "报", "斗", "完", "类",
42973"八", "离", "华", "名", "确", "才", "科", "张", "信", "马",
42974"节", "话", "米", "整", "空", "元", "况", "今", "集", "温",
42975"传", "土", "许", "步", "群", "广", "石", "记", "需", "段",
42976"研", "界", "拉", "林", "律", "叫", "且", "究", "观", "越",
42977"织", "装", "影", "算", "低", "持", "音", "众", "书", "布",
42978"复", "容", "儿", "须", "际", "商", "非", "验", "连", "断",
42979"深", "难", "近", "矿", "千", "周", "委", "素", "技", "备",
42980"半", "办", "青", "省", "列", "习", "响", "约", "支", "般",
42981"史", "感", "劳", "便", "团", "往", "酸", "历", "市", "克",
42982"何", "除", "消", "构", "府", "称", "太", "准", "精", "值",
42983"号", "率", "族", "维", "划", "选", "标", "写", "存", "候",
42984"毛", "亲", "快", "效", "斯", "院", "查", "江", "型", "眼",
42985"王", "按", "格", "养", "易", "置", "派", "层", "片", "始",
42986"却", "专", "状", "育", "厂", "京", "识", "适", "属", "圆",
42987"包", "火", "住", "调", "满", "县", "局", "照", "参", "红",
42988"细", "引", "听", "该", "铁", "价", "严", "首", "底", "液",
42989"官", "德", "随", "病", "苏", "失", "尔", "死", "讲", "配",
42990"女", "黄", "推", "显", "谈", "罪", "神", "艺", "呢", "席",
42991"含", "企", "望", "密", "批", "营", "项", "防", "举", "球",
42992"英", "氧", "势", "告", "李", "台", "落", "木", "帮", "轮",
42993"破", "亚", "师", "围", "注", "远", "字", "材", "排", "供",
42994"河", "态", "封", "另", "施", "减", "树", "溶", "怎", "止",
42995"案", "言", "士", "均", "武", "固", "叶", "鱼", "波", "视",
42996"仅", "费", "紧", "爱", "左", "章", "早", "朝", "害", "续",
42997"轻", "服", "试", "食", "充", "兵", "源", "判", "护", "司",
42998"足", "某", "练", "差", "致", "板", "田", "降", "黑", "犯",
42999"负", "击", "范", "继", "兴", "似", "余", "坚", "曲", "输",
43000"修", "故", "城", "夫", "够", "送", "笔", "船", "占", "右",
43001"财", "吃", "富", "春", "职", "觉", "汉", "画", "功", "巴",
43002"跟", "虽", "杂", "飞", "检", "吸", "助", "升", "阳", "互",
43003"初", "创", "抗", "考", "投", "坏", "策", "古", "径", "换",
43004"未", "跑", "留", "钢", "曾", "端", "责", "站", "简", "述",
43005"钱", "副", "尽", "帝", "射", "草", "冲", "承", "独", "令",
43006"限", "阿", "宣", "环", "双", "请", "超", "微", "让", "控",
43007"州", "良", "轴", "找", "否", "纪", "益", "依", "优", "顶",
43008"础", "载", "倒", "房", "突", "坐", "粉", "敌", "略", "客",
43009"袁", "冷", "胜", "绝", "析", "块", "剂", "测", "丝", "协",
43010"诉", "念", "陈", "仍", "罗", "盐", "友", "洋", "错", "苦",
43011"夜", "刑", "移", "频", "逐", "靠", "混", "母", "短", "皮",
43012"终", "聚", "汽", "村", "云", "哪", "既", "距", "卫", "停",
43013"烈", "央", "察", "烧", "迅", "境", "若", "印", "洲", "刻",
43014"括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
43015"侵", "吧", "甲", "游", "久", "菜", "味", "旧", "模", "湖",
43016"货", "损", "预", "阻", "毫", "普", "稳", "乙", "妈", "植",
43017"息", "扩", "银", "语", "挥", "酒", "守", "拿", "序", "纸",
43018"医", "缺", "雨", "吗", "针", "刘", "啊", "急", "唱", "误",
43019"训", "愿", "审", "附", "获", "茶", "鲜", "粮", "斤", "孩",
43020"脱", "硫", "肥", "善", "龙", "演", "父", "渐", "血", "欢",
43021"械", "掌", "歌", "沙", "刚", "攻", "谓", "盾", "讨", "晚",
43022"粒", "乱", "燃", "矛", "乎", "杀", "药", "宁", "鲁", "贵",
43023"钟", "煤", "读", "班", "伯", "香", "介", "迫", "句", "丰",
43024"培", "握", "兰", "担", "弦", "蛋", "沉", "假", "穿", "执",
43025"答", "乐", "谁", "顺", "烟", "缩", "征", "脸", "喜", "松",
43026"脚", "困", "异", "免", "背", "星", "福", "买", "染", "井",
43027"概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "静", "补",
43028"评", "翻", "肉", "践", "尼", "衣", "宽", "扬", "棉", "希",
43029"伤", "操", "垂", "秋", "宜", "氢", "套", "督", "振", "架",
43030"亮", "末", "宪", "庆", "编", "牛", "触", "映", "雷", "销",
43031"诗", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
43032"绿", "晶", "厚", "盟", "衡", "鸡", "孙", "延", "危", "胶",
43033"屋", "乡", "临", "陆", "顾", "掉", "呀", "灯", "岁", "措",
43034"束", "耐", "剧", "玉", "赵", "跳", "哥", "季", "课", "凯",
43035"胡", "额", "款", "绍", "卷", "齐", "伟", "蒸", "殖", "永",
43036"宗", "苗", "川", "炉", "岩", "弱", "零", "杨", "奏", "沿",
43037"露", "杆", "探", "滑", "镇", "饭", "浓", "航", "怀", "赶",
43038"库", "夺", "伊", "灵", "税", "途", "灭", "赛", "归", "召",
43039"鼓", "播", "盘", "裁", "险", "康", "唯", "录", "菌", "纯",
43040"借", "糖", "盖", "横", "符", "私", "努", "堂", "域", "枪",
43041"润", "幅", "哈", "竟", "熟", "虫", "泽", "脑", "壤", "碳",
43042"欧", "遍", "侧", "寨", "敢", "彻", "虑", "斜", "薄", "庭",
43043"纳", "弹", "饲", "伸", "折", "麦", "湿", "暗", "荷", "瓦",
43044"塞", "床", "筑", "恶", "户", "访", "塔", "奇", "透", "梁",
43045"刀", "旋", "迹", "卡", "氯", "遇", "份", "毒", "泥", "退",
43046"洗", "摆", "灰", "彩", "卖", "耗", "夏", "择", "忙", "铜",
43047"献", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
43048"阵", "阴", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
43049"楼", "避", "谋", "吨", "野", "猪", "旗", "累", "偏", "典",
43050"馆", "索", "秦", "脂", "潮", "爷", "豆", "忽", "托", "惊",
43051"塑", "遗", "愈", "朱", "替", "纤", "粗", "倾", "尚", "痛",
43052"楚", "谢", "奋", "购", "磨", "君", "池", "旁", "碎", "骨",
43053"监", "捕", "弟", "暴", "割", "贯", "殊", "释", "词", "亡",
43054"壁", "顿", "宝", "午", "尘", "闻", "揭", "炮", "残", "冬",
43055"桥", "妇", "警", "综", "招", "吴", "付", "浮", "遭", "徐",
43056"您", "摇", "谷", "赞", "箱", "隔", "订", "男", "吹", "园",
43057"纷", "唐", "败", "宋", "玻", "巨", "耕", "坦", "荣", "闭",
43058"湾", "键", "凡", "驻", "锅", "救", "恩", "剥", "凝", "碱",
43059"齿", "截", "炼", "麻", "纺", "禁", "废", "盛", "版", "缓",
43060"净", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
43061"庄", "街", "藏", "姑", "贸", "腐", "奴", "啦", "惯", "乘",
43062"伙", "恢", "匀", "纱", "扎", "辩", "耳", "彪", "臣", "亿",
43063"璃", "抵", "脉", "秀", "萨", "俄", "网", "舞", "店", "喷",
43064"纵", "寸", "汗", "挂", "洪", "贺", "闪", "柬", "爆", "烯",
43065"津", "稻", "墙", "软", "勇", "像", "滚", "厘", "蒙", "芳",
43066"肯", "坡", "柱", "荡", "腿", "仪", "旅", "尾", "轧", "冰",
43067"贡", "登", "黎", "削", "钻", "勒", "逃", "障", "氨", "郭",
43068"峰", "币", "港", "伏", "轨", "亩", "毕", "擦", "莫", "刺",
43069"浪", "秘", "援", "株", "健", "售", "股", "岛", "甘", "泡",
43070"睡", "童", "铸", "汤", "阀", "休", "汇", "舍", "牧", "绕",
43071"炸", "哲", "磷", "绩", "朋", "淡", "尖", "启", "陷", "柴",
43072"呈", "徒", "颜", "泪", "稍", "忘", "泵", "蓝", "拖", "洞",
43073"授", "镜", "辛", "壮", "锋", "贫", "虚", "弯", "摩", "泰",
43074"幼", "廷", "尊", "窗", "纲", "弄", "隶", "疑", "氏", "宫",
43075"姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "违",
43076"夹", "腰", "缘", "珠", "穷", "森", "枝", "竹", "沟", "催",
43077"绳", "忆", "邦", "剩", "幸", "浆", "栏", "拥", "牙", "贮",
43078"礼", "滤", "钠", "纹", "罢", "拍", "咱", "喊", "袖", "埃",
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</script>
43145 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
43146WORDLISTS["chinese_traditional"] = [
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"夾", "腰", "緣", "珠", "窮", "森", "枝", "竹", "溝", "催",
43285"繩", "憶", "邦", "剩", "幸", "漿", "欄", "擁", "牙", "貯",
43286"禮", "濾", "鈉", "紋", "罷", "拍", "咱", "喊", "袖", "埃",
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</script>
43353 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
43354WORDLISTS["french"] = [
43355"abaisser", "abandon", "abdiquer", "abeille", "abolir", "aborder", "aboutir", "aboyer", "abrasif", "abreuver",
43356"abriter", "abroger", "abrupt", "absence", "absolu", "absurde", "abusif", "abyssal", "académie", "acajou",
43357"acarien", "accabler", "accepter", "acclamer", "accolade", "accroche", "accuser", "acerbe", "achat", "acheter",
43358"aciduler", "acier", "acompte", "acquérir", "acronyme", "acteur", "actif", "actuel", "adepte", "adéquat",
43359"adhésif", "adjectif", "adjuger", "admettre", "admirer", "adopter", "adorer", "adoucir", "adresse", "adroit",
43360"adulte", "adverbe", "aérer", "aéronef", "affaire", "affecter", "affiche", "affreux", "affubler", "agacer",
43361"agencer", "agile", "agiter", "agrafer", "agréable", "agrume", "aider", "aiguille", "ailier", "aimable",
43362"aisance", "ajouter", "ajuster", "alarmer", "alchimie", "alerte", "algèbre", "algue", "aliéner", "aliment",
43363"alléger", "alliage", "allouer", "allumer", "alourdir", "alpaga", "altesse", "alvéole", "amateur", "ambigu",
43364"ambre", "aménager", "amertume", "amidon", "amiral", "amorcer", "amour", "amovible", "amphibie", "ampleur",
43365"amusant", "analyse", "anaphore", "anarchie", "anatomie", "ancien", "anéantir", "angle", "angoisse", "anguleux",
43366"animal", "annexer", "annonce", "annuel", "anodin", "anomalie", "anonyme", "anormal", "antenne", "antidote",
43367"anxieux", "apaiser", "apéritif", "aplanir", "apologie", "appareil", "appeler", "apporter", "appuyer", "aquarium",
43368"aqueduc", "arbitre", "arbuste", "ardeur", "ardoise", "argent", "arlequin", "armature", "armement", "armoire",
43369"armure", "arpenter", "arracher", "arriver", "arroser", "arsenic", "artériel", "article", "aspect", "asphalte",
43370"aspirer", "assaut", "asservir", "assiette", "associer", "assurer", "asticot", "astre", "astuce", "atelier",
43371"atome", "atrium", "atroce", "attaque", "attentif", "attirer", "attraper", "aubaine", "auberge", "audace",
43372"audible", "augurer", "aurore", "automne", "autruche", "avaler", "avancer", "avarice", "avenir", "averse",
43373"aveugle", "aviateur", "avide", "avion", "aviser", "avoine", "avouer", "avril", "axial", "axiome",
43374"badge", "bafouer", "bagage", "baguette", "baignade", "balancer", "balcon", "baleine", "balisage", "bambin",
43375"bancaire", "bandage", "banlieue", "bannière", "banquier", "barbier", "baril", "baron", "barque", "barrage",
43376"bassin", "bastion", "bataille", "bateau", "batterie", "baudrier", "bavarder", "belette", "bélier", "belote",
43377"bénéfice", "berceau", "berger", "berline", "bermuda", "besace", "besogne", "bétail", "beurre", "biberon",
43378"bicycle", "bidule", "bijou", "bilan", "bilingue", "billard", "binaire", "biologie", "biopsie", "biotype",
43379"biscuit", "bison", "bistouri", "bitume", "bizarre", "blafard", "blague", "blanchir", "blessant", "blinder",
43380"blond", "bloquer", "blouson", "bobard", "bobine", "boire", "boiser", "bolide", "bonbon", "bondir",
43381"bonheur", "bonifier", "bonus", "bordure", "borne", "botte", "boucle", "boueux", "bougie", "boulon",
43382"bouquin", "bourse", "boussole", "boutique", "boxeur", "branche", "brasier", "brave", "brebis", "brèche",
43383"breuvage", "bricoler", "brigade", "brillant", "brioche", "brique", "brochure", "broder", "bronzer", "brousse",
43384"broyeur", "brume", "brusque", "brutal", "bruyant", "buffle", "buisson", "bulletin", "bureau", "burin",
43385"bustier", "butiner", "butoir", "buvable", "buvette", "cabanon", "cabine", "cachette", "cadeau", "cadre",
43386"caféine", "caillou", "caisson", "calculer", "calepin", "calibre", "calmer", "calomnie", "calvaire", "camarade",
43387"caméra", "camion", "campagne", "canal", "caneton", "canon", "cantine", "canular", "capable", "caporal",
43388"caprice", "capsule", "capter", "capuche", "carabine", "carbone", "caresser", "caribou", "carnage", "carotte",
43389"carreau", "carton", "cascade", "casier", "casque", "cassure", "causer", "caution", "cavalier", "caverne",
43390"caviar", "cédille", "ceinture", "céleste", "cellule", "cendrier", "censurer", "central", "cercle", "cérébral",
43391"cerise", "cerner", "cerveau", "cesser", "chagrin", "chaise", "chaleur", "chambre", "chance", "chapitre",
43392"charbon", "chasseur", "chaton", "chausson", "chavirer", "chemise", "chenille", "chéquier", "chercher", "cheval",
43393"chien", "chiffre", "chignon", "chimère", "chiot", "chlorure", "chocolat", "choisir", "chose", "chouette",
43394"chrome", "chute", "cigare", "cigogne", "cimenter", "cinéma", "cintrer", "circuler", "cirer", "cirque",
43395"citerne", "citoyen", "citron", "civil", "clairon", "clameur", "claquer", "classe", "clavier", "client",
43396"cligner", "climat", "clivage", "cloche", "clonage", "cloporte", "cobalt", "cobra", "cocasse", "cocotier",
43397"coder", "codifier", "coffre", "cogner", "cohésion", "coiffer", "coincer", "colère", "colibri", "colline",
43398"colmater", "colonel", "combat", "comédie", "commande", "compact", "concert", "conduire", "confier", "congeler",
43399"connoter", "consonne", "contact", "convexe", "copain", "copie", "corail", "corbeau", "cordage", "corniche",
43400"corpus", "correct", "cortège", "cosmique", "costume", "coton", "coude", "coupure", "courage", "couteau",
43401"couvrir", "coyote", "crabe", "crainte", "cravate", "crayon", "créature", "créditer", "crémeux", "creuser",
43402"crevette", "cribler", "crier", "cristal", "critère", "croire", "croquer", "crotale", "crucial", "cruel",
43403"crypter", "cubique", "cueillir", "cuillère", "cuisine", "cuivre", "culminer", "cultiver", "cumuler", "cupide",
43404"curatif", "curseur", "cyanure", "cycle", "cylindre", "cynique", "daigner", "damier", "danger", "danseur",
43405"dauphin", "débattre", "débiter", "déborder", "débrider", "débutant", "décaler", "décembre", "déchirer", "décider",
43406"déclarer", "décorer", "décrire", "décupler", "dédale", "déductif", "déesse", "défensif", "défiler", "défrayer",
43407"dégager", "dégivrer", "déglutir", "dégrafer", "déjeuner", "délice", "déloger", "demander", "demeurer", "démolir",
43408"dénicher", "dénouer", "dentelle", "dénuder", "départ", "dépenser", "déphaser", "déplacer", "déposer", "déranger",
43409"dérober", "désastre", "descente", "désert", "désigner", "désobéir", "dessiner", "destrier", "détacher", "détester",
43410"détourer", "détresse", "devancer", "devenir", "deviner", "devoir", "diable", "dialogue", "diamant", "dicter",
43411"différer", "digérer", "digital", "digne", "diluer", "dimanche", "diminuer", "dioxyde", "directif", "diriger",
43412"discuter", "disposer", "dissiper", "distance", "divertir", "diviser", "docile", "docteur", "dogme", "doigt",
43413"domaine", "domicile", "dompter", "donateur", "donjon", "donner", "dopamine", "dortoir", "dorure", "dosage",
43414"doseur", "dossier", "dotation", "douanier", "double", "douceur", "douter", "doyen", "dragon", "draper",
43415"dresser", "dribbler", "droiture", "duperie", "duplexe", "durable", "durcir", "dynastie", "éblouir", "écarter",
43416"écharpe", "échelle", "éclairer", "éclipse", "éclore", "écluse", "école", "économie", "écorce", "écouter",
43417"écraser", "écrémer", "écrivain", "écrou", "écume", "écureuil", "édifier", "éduquer", "effacer", "effectif",
43418"effigie", "effort", "effrayer", "effusion", "égaliser", "égarer", "éjecter", "élaborer", "élargir", "électron",
43419"élégant", "éléphant", "élève", "éligible", "élitisme", "éloge", "élucider", "éluder", "emballer", "embellir",
43420"embryon", "émeraude", "émission", "emmener", "émotion", "émouvoir", "empereur", "employer", "emporter", "emprise",
43421"émulsion", "encadrer", "enchère", "enclave", "encoche", "endiguer", "endosser", "endroit", "enduire", "énergie",
43422"enfance", "enfermer", "enfouir", "engager", "engin", "englober", "énigme", "enjamber", "enjeu", "enlever",
43423"ennemi", "ennuyeux", "enrichir", "enrobage", "enseigne", "entasser", "entendre", "entier", "entourer", "entraver",
43424"énumérer", "envahir", "enviable", "envoyer", "enzyme", "éolien", "épaissir", "épargne", "épatant", "épaule",
43425"épicerie", "épidémie", "épier", "épilogue", "épine", "épisode", "épitaphe", "époque", "épreuve", "éprouver",
43426"épuisant", "équerre", "équipe", "ériger", "érosion", "erreur", "éruption", "escalier", "espadon", "espèce",
43427"espiègle", "espoir", "esprit", "esquiver", "essayer", "essence", "essieu", "essorer", "estime", "estomac",
43428"estrade", "étagère", "étaler", "étanche", "étatique", "éteindre", "étendoir", "éternel", "éthanol", "éthique",
43429"ethnie", "étirer", "étoffer", "étoile", "étonnant", "étourdir", "étrange", "étroit", "étude", "euphorie",
43430"évaluer", "évasion", "éventail", "évidence", "éviter", "évolutif", "évoquer", "exact", "exagérer", "exaucer",
43431"exceller", "excitant", "exclusif", "excuse", "exécuter", "exemple", "exercer", "exhaler", "exhorter", "exigence",
43432"exiler", "exister", "exotique", "expédier", "explorer", "exposer", "exprimer", "exquis", "extensif", "extraire",
43433"exulter", "fable", "fabuleux", "facette", "facile", "facture", "faiblir", "falaise", "fameux", "famille",
43434"farceur", "farfelu", "farine", "farouche", "fasciner", "fatal", "fatigue", "faucon", "fautif", "faveur",
43435"favori", "fébrile", "féconder", "fédérer", "félin", "femme", "fémur", "fendoir", "féodal", "fermer",
43436"féroce", "ferveur", "festival", "feuille", "feutre", "février", "fiasco", "ficeler", "fictif", "fidèle",
43437"figure", "filature", "filetage", "filière", "filleul", "filmer", "filou", "filtrer", "financer", "finir",
43438"fiole", "firme", "fissure", "fixer", "flairer", "flamme", "flasque", "flatteur", "fléau", "flèche",
43439"fleur", "flexion", "flocon", "flore", "fluctuer", "fluide", "fluvial", "folie", "fonderie", "fongible",
43440"fontaine", "forcer", "forgeron", "formuler", "fortune", "fossile", "foudre", "fougère", "fouiller", "foulure",
43441"fourmi", "fragile", "fraise", "franchir", "frapper", "frayeur", "frégate", "freiner", "frelon", "frémir",
43442"frénésie", "frère", "friable", "friction", "frisson", "frivole", "froid", "fromage", "frontal", "frotter",
43443"fruit", "fugitif", "fuite", "fureur", "furieux", "furtif", "fusion", "futur", "gagner", "galaxie",
43444"galerie", "gambader", "garantir", "gardien", "garnir", "garrigue", "gazelle", "gazon", "géant", "gélatine",
43445"gélule", "gendarme", "général", "génie", "genou", "gentil", "géologie", "géomètre", "géranium", "germe",
43446"gestuel", "geyser", "gibier", "gicler", "girafe", "givre", "glace", "glaive", "glisser", "globe",
43447"gloire", "glorieux", "golfeur", "gomme", "gonfler", "gorge", "gorille", "goudron", "gouffre", "goulot",
43448"goupille", "gourmand", "goutte", "graduel", "graffiti", "graine", "grand", "grappin", "gratuit", "gravir",
43449"grenat", "griffure", "griller", "grimper", "grogner", "gronder", "grotte", "groupe", "gruger", "grutier",
43450"gruyère", "guépard", "guerrier", "guide", "guimauve", "guitare", "gustatif", "gymnaste", "gyrostat", "habitude",
43451"hachoir", "halte", "hameau", "hangar", "hanneton", "haricot", "harmonie", "harpon", "hasard", "hélium",
43452"hématome", "herbe", "hérisson", "hermine", "héron", "hésiter", "heureux", "hiberner", "hibou", "hilarant",
43453"histoire", "hiver", "homard", "hommage", "homogène", "honneur", "honorer", "honteux", "horde", "horizon",
43454"horloge", "hormone", "horrible", "houleux", "housse", "hublot", "huileux", "humain", "humble", "humide",
43455"humour", "hurler", "hydromel", "hygiène", "hymne", "hypnose", "idylle", "ignorer", "iguane", "illicite",
43456"illusion", "image", "imbiber", "imiter", "immense", "immobile", "immuable", "impact", "impérial", "implorer",
43457"imposer", "imprimer", "imputer", "incarner", "incendie", "incident", "incliner", "incolore", "indexer", "indice",
43458"inductif", "inédit", "ineptie", "inexact", "infini", "infliger", "informer", "infusion", "ingérer", "inhaler",
43459"inhiber", "injecter", "injure", "innocent", "inoculer", "inonder", "inscrire", "insecte", "insigne", "insolite",
43460"inspirer", "instinct", "insulter", "intact", "intense", "intime", "intrigue", "intuitif", "inutile", "invasion",
43461"inventer", "inviter", "invoquer", "ironique", "irradier", "irréel", "irriter", "isoler", "ivoire", "ivresse",
43462"jaguar", "jaillir", "jambe", "janvier", "jardin", "jauger", "jaune", "javelot", "jetable", "jeton",
43463"jeudi", "jeunesse", "joindre", "joncher", "jongler", "joueur", "jouissif", "journal", "jovial", "joyau",
43464"joyeux", "jubiler", "jugement", "junior", "jupon", "juriste", "justice", "juteux", "juvénile", "kayak",
43465"kimono", "kiosque", "label", "labial", "labourer", "lacérer", "lactose", "lagune", "laine", "laisser",
43466"laitier", "lambeau", "lamelle", "lampe", "lanceur", "langage", "lanterne", "lapin", "largeur", "larme",
43467"laurier", "lavabo", "lavoir", "lecture", "légal", "léger", "légume", "lessive", "lettre", "levier",
43468"lexique", "lézard", "liasse", "libérer", "libre", "licence", "licorne", "liège", "lièvre", "ligature",
43469"ligoter", "ligue", "limer", "limite", "limonade", "limpide", "linéaire", "lingot", "lionceau", "liquide",
43470"lisière", "lister", "lithium", "litige", "littoral", "livreur", "logique", "lointain", "loisir", "lombric",
43471"loterie", "louer", "lourd", "loutre", "louve", "loyal", "lubie", "lucide", "lucratif", "lueur",
43472"lugubre", "luisant", "lumière", "lunaire", "lundi", "luron", "lutter", "luxueux", "machine", "magasin",
43473"magenta", "magique", "maigre", "maillon", "maintien", "mairie", "maison", "majorer", "malaxer", "maléfice",
43474"malheur", "malice", "mallette", "mammouth", "mandater", "maniable", "manquant", "manteau", "manuel", "marathon",
43475"marbre", "marchand", "mardi", "maritime", "marqueur", "marron", "marteler", "mascotte", "massif", "matériel",
43476"matière", "matraque", "maudire", "maussade", "mauve", "maximal", "méchant", "méconnu", "médaille", "médecin",
43477"méditer", "méduse", "meilleur", "mélange", "mélodie", "membre", "mémoire", "menacer", "mener", "menhir",
43478"mensonge", "mentor", "mercredi", "mérite", "merle", "messager", "mesure", "métal", "météore", "méthode",
43479"métier", "meuble", "miauler", "microbe", "miette", "mignon", "migrer", "milieu", "million", "mimique",
43480"mince", "minéral", "minimal", "minorer", "minute", "miracle", "miroiter", "missile", "mixte", "mobile",
43481"moderne", "moelleux", "mondial", "moniteur", "monnaie", "monotone", "monstre", "montagne", "monument", "moqueur",
43482"morceau", "morsure", "mortier", "moteur", "motif", "mouche", "moufle", "moulin", "mousson", "mouton",
43483"mouvant", "multiple", "munition", "muraille", "murène", "murmure", "muscle", "muséum", "musicien", "mutation",
43484"muter", "mutuel", "myriade", "myrtille", "mystère", "mythique", "nageur", "nappe", "narquois", "narrer",
43485"natation", "nation", "nature", "naufrage", "nautique", "navire", "nébuleux", "nectar", "néfaste", "négation",
43486"négliger", "négocier", "neige", "nerveux", "nettoyer", "neurone", "neutron", "neveu", "niche", "nickel",
43487"nitrate", "niveau", "noble", "nocif", "nocturne", "noirceur", "noisette", "nomade", "nombreux", "nommer",
43488"normatif", "notable", "notifier", "notoire", "nourrir", "nouveau", "novateur", "novembre", "novice", "nuage",
43489"nuancer", "nuire", "nuisible", "numéro", "nuptial", "nuque", "nutritif", "obéir", "objectif", "obliger",
43490"obscur", "observer", "obstacle", "obtenir", "obturer", "occasion", "occuper", "océan", "octobre", "octroyer",
43491"octupler", "oculaire", "odeur", "odorant", "offenser", "officier", "offrir", "ogive", "oiseau", "oisillon",
43492"olfactif", "olivier", "ombrage", "omettre", "onctueux", "onduler", "onéreux", "onirique", "opale", "opaque",
43493"opérer", "opinion", "opportun", "opprimer", "opter", "optique", "orageux", "orange", "orbite", "ordonner",
43494"oreille", "organe", "orgueil", "orifice", "ornement", "orque", "ortie", "osciller", "osmose", "ossature",
43495"otarie", "ouragan", "ourson", "outil", "outrager", "ouvrage", "ovation", "oxyde", "oxygène", "ozone",
43496"paisible", "palace", "palmarès", "palourde", "palper", "panache", "panda", "pangolin", "paniquer", "panneau",
43497"panorama", "pantalon", "papaye", "papier", "papoter", "papyrus", "paradoxe", "parcelle", "paresse", "parfumer",
43498"parler", "parole", "parrain", "parsemer", "partager", "parure", "parvenir", "passion", "pastèque", "paternel",
43499"patience", "patron", "pavillon", "pavoiser", "payer", "paysage", "peigne", "peintre", "pelage", "pélican",
43500"pelle", "pelouse", "peluche", "pendule", "pénétrer", "pénible", "pensif", "pénurie", "pépite", "péplum",
43501"perdrix", "perforer", "période", "permuter", "perplexe", "persil", "perte", "peser", "pétale", "petit",
43502"pétrir", "peuple", "pharaon", "phobie", "phoque", "photon", "phrase", "physique", "piano", "pictural",
43503"pièce", "pierre", "pieuvre", "pilote", "pinceau", "pipette", "piquer", "pirogue", "piscine", "piston",
43504"pivoter", "pixel", "pizza", "placard", "plafond", "plaisir", "planer", "plaque", "plastron", "plateau",
43505"pleurer", "plexus", "pliage", "plomb", "plonger", "pluie", "plumage", "pochette", "poésie", "poète",
43506"pointe", "poirier", "poisson", "poivre", "polaire", "policier", "pollen", "polygone", "pommade", "pompier",
43507"ponctuel", "pondérer", "poney", "portique", "position", "posséder", "posture", "potager", "poteau", "potion",
43508"pouce", "poulain", "poumon", "pourpre", "poussin", "pouvoir", "prairie", "pratique", "précieux", "prédire",
43509"préfixe", "prélude", "prénom", "présence", "prétexte", "prévoir", "primitif", "prince", "prison", "priver",
43510"problème", "procéder", "prodige", "profond", "progrès", "proie", "projeter", "prologue", "promener", "propre",
43511"prospère", "protéger", "prouesse", "proverbe", "prudence", "pruneau", "psychose", "public", "puceron", "puiser",
43512"pulpe", "pulsar", "punaise", "punitif", "pupitre", "purifier", "puzzle", "pyramide", "quasar", "querelle",
43513"question", "quiétude", "quitter", "quotient", "racine", "raconter", "radieux", "ragondin", "raideur", "raisin",
43514"ralentir", "rallonge", "ramasser", "rapide", "rasage", "ratisser", "ravager", "ravin", "rayonner", "réactif",
43515"réagir", "réaliser", "réanimer", "recevoir", "réciter", "réclamer", "récolter", "recruter", "reculer", "recycler",
43516"rédiger", "redouter", "refaire", "réflexe", "réformer", "refrain", "refuge", "régalien", "région", "réglage",
43517"régulier", "réitérer", "rejeter", "rejouer", "relatif", "relever", "relief", "remarque", "remède", "remise",
43518"remonter", "remplir", "remuer", "renard", "renfort", "renifler", "renoncer", "rentrer", "renvoi", "replier",
43519"reporter", "reprise", "reptile", "requin", "réserve", "résineux", "résoudre", "respect", "rester", "résultat",
43520"rétablir", "retenir", "réticule", "retomber", "retracer", "réunion", "réussir", "revanche", "revivre", "révolte",
43521"révulsif", "richesse", "rideau", "rieur", "rigide", "rigoler", "rincer", "riposter", "risible", "risque",
43522"rituel", "rival", "rivière", "rocheux", "romance", "rompre", "ronce", "rondin", "roseau", "rosier",
43523"rotatif", "rotor", "rotule", "rouge", "rouille", "rouleau", "routine", "royaume", "ruban", "rubis",
43524"ruche", "ruelle", "rugueux", "ruiner", "ruisseau", "ruser", "rustique", "rythme", "sabler", "saboter",
43525"sabre", "sacoche", "safari", "sagesse", "saisir", "salade", "salive", "salon", "saluer", "samedi",
43526"sanction", "sanglier", "sarcasme", "sardine", "saturer", "saugrenu", "saumon", "sauter", "sauvage", "savant",
43527"savonner", "scalpel", "scandale", "scélérat", "scénario", "sceptre", "schéma", "science", "scinder", "score",
43528"scrutin", "sculpter", "séance", "sécable", "sécher", "secouer", "sécréter", "sédatif", "séduire", "seigneur",
43529"séjour", "sélectif", "semaine", "sembler", "semence", "séminal", "sénateur", "sensible", "sentence", "séparer",
43530"séquence", "serein", "sergent", "sérieux", "serrure", "sérum", "service", "sésame", "sévir", "sevrage",
43531"sextuple", "sidéral", "siècle", "siéger", "siffler", "sigle", "signal", "silence", "silicium", "simple",
43532"sincère", "sinistre", "siphon", "sirop", "sismique", "situer", "skier", "social", "socle", "sodium",
43533"soigneux", "soldat", "soleil", "solitude", "soluble", "sombre", "sommeil", "somnoler", "sonde", "songeur",
43534"sonnette", "sonore", "sorcier", "sortir", "sosie", "sottise", "soucieux", "soudure", "souffle", "soulever",
43535"soupape", "source", "soutirer", "souvenir", "spacieux", "spatial", "spécial", "sphère", "spiral", "stable",
43536"station", "sternum", "stimulus", "stipuler", "strict", "studieux", "stupeur", "styliste", "sublime", "substrat",
43537"subtil", "subvenir", "succès", "sucre", "suffixe", "suggérer", "suiveur", "sulfate", "superbe", "supplier",
43538"surface", "suricate", "surmener", "surprise", "sursaut", "survie", "suspect", "syllabe", "symbole", "symétrie",
43539"synapse", "syntaxe", "système", "tabac", "tablier", "tactile", "tailler", "talent", "talisman", "talonner",
43540"tambour", "tamiser", "tangible", "tapis", "taquiner", "tarder", "tarif", "tartine", "tasse", "tatami",
43541"tatouage", "taupe", "taureau", "taxer", "témoin", "temporel", "tenaille", "tendre", "teneur", "tenir",
43542"tension", "terminer", "terne", "terrible", "tétine", "texte", "thème", "théorie", "thérapie", "thorax",
43543"tibia", "tiède", "timide", "tirelire", "tiroir", "tissu", "titane", "titre", "tituber", "toboggan",
43544"tolérant", "tomate", "tonique", "tonneau", "toponyme", "torche", "tordre", "tornade", "torpille", "torrent",
43545"torse", "tortue", "totem", "toucher", "tournage", "tousser", "toxine", "traction", "trafic", "tragique",
43546"trahir", "train", "trancher", "travail", "trèfle", "tremper", "trésor", "treuil", "triage", "tribunal",
43547"tricoter", "trilogie", "triomphe", "tripler", "triturer", "trivial", "trombone", "tronc", "tropical", "troupeau",
43548"tuile", "tulipe", "tumulte", "tunnel", "turbine", "tuteur", "tutoyer", "tuyau", "tympan", "typhon",
43549"typique", "tyran", "ubuesque", "ultime", "ultrason", "unanime", "unifier", "union", "unique", "unitaire",
43550"univers", "uranium", "urbain", "urticant", "usage", "usine", "usuel", "usure", "utile", "utopie",
43551"vacarme", "vaccin", "vagabond", "vague", "vaillant", "vaincre", "vaisseau", "valable", "valise", "vallon",
43552"valve", "vampire", "vanille", "vapeur", "varier", "vaseux", "vassal", "vaste", "vecteur", "vedette",
43553"végétal", "véhicule", "veinard", "véloce", "vendredi", "vénérer", "venger", "venimeux", "ventouse", "verdure",
43554"vérin", "vernir", "verrou", "verser", "vertu", "veston", "vétéran", "vétuste", "vexant", "vexer",
43555"viaduc", "viande", "victoire", "vidange", "vidéo", "vignette", "vigueur", "vilain", "village", "vinaigre",
43556"violon", "vipère", "virement", "virtuose", "virus", "visage", "viseur", "vision", "visqueux", "visuel",
43557"vital", "vitesse", "viticole", "vitrine", "vivace", "vivipare", "vocation", "voguer", "voile", "voisin",
43558"voiture", "volaille", "volcan", "voltiger", "volume", "vorace", "vortex", "voter", "vouloir", "voyage",
43559"voyelle", "wagon", "xénon", "yacht", "zèbre", "zénith", "zeste", "zoologie"]
43560</script>
43561 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
43562WORDLISTS["italian"] = [
43563"abaco", "abbaglio", "abbinato", "abete", "abisso", "abolire", "abrasivo", "abrogato", "accadere", "accenno",
43564"accusato", "acetone", "achille", "acido", "acqua", "acre", "acrilico", "acrobata", "acuto", "adagio",
43565"addebito", "addome", "adeguato", "aderire", "adipe", "adottare", "adulare", "affabile", "affetto", "affisso",
43566"affranto", "aforisma", "afoso", "africano", "agave", "agente", "agevole", "aggancio", "agire", "agitare",
43567"agonismo", "agricolo", "agrumeto", "aguzzo", "alabarda", "alato", "albatro", "alberato", "albo", "albume",
43568"alce", "alcolico", "alettone", "alfa", "algebra", "aliante", "alibi", "alimento", "allagato", "allegro",
43569"allievo", "allodola", "allusivo", "almeno", "alogeno", "alpaca", "alpestre", "altalena", "alterno", "alticcio",
43570"altrove", "alunno", "alveolo", "alzare", "amalgama", "amanita", "amarena", "ambito", "ambrato", "ameba",
43571"america", "ametista", "amico", "ammasso", "ammenda", "ammirare", "ammonito", "amore", "ampio", "ampliare",
43572"amuleto", "anacardo", "anagrafe", "analista", "anarchia", "anatra", "anca", "ancella", "ancora", "andare",
43573"andrea", "anello", "angelo", "angolare", "angusto", "anima", "annegare", "annidato", "anno", "annuncio",
43574"anonimo", "anticipo", "anzi", "apatico", "apertura", "apode", "apparire", "appetito", "appoggio", "approdo",
43575"appunto", "aprile", "arabica", "arachide", "aragosta", "araldica", "arancio", "aratura", "arazzo", "arbitro",
43576"archivio", "ardito", "arenile", "argento", "argine", "arguto", "aria", "armonia", "arnese", "arredato",
43577"arringa", "arrosto", "arsenico", "arso", "artefice", "arzillo", "asciutto", "ascolto", "asepsi", "asettico",
43578"asfalto", "asino", "asola", "aspirato", "aspro", "assaggio", "asse", "assoluto", "assurdo", "asta",
43579"astenuto", "astice", "astratto", "atavico", "ateismo", "atomico", "atono", "attesa", "attivare", "attorno",
43580"attrito", "attuale", "ausilio", "austria", "autista", "autonomo", "autunno", "avanzato", "avere", "avvenire",
43581"avviso", "avvolgere", "azione", "azoto", "azzimo", "azzurro", "babele", "baccano", "bacino", "baco",
43582"badessa", "badilata", "bagnato", "baita", "balcone", "baldo", "balena", "ballata", "balzano", "bambino",
43583"bandire", "baraonda", "barbaro", "barca", "baritono", "barlume", "barocco", "basilico", "basso", "batosta",
43584"battuto", "baule", "bava", "bavosa", "becco", "beffa", "belgio", "belva", "benda", "benevole",
43585"benigno", "benzina", "bere", "berlina", "beta", "bibita", "bici", "bidone", "bifido", "biga",
43586"bilancia", "bimbo", "binocolo", "biologo", "bipede", "bipolare", "birbante", "birra", "biscotto", "bisesto",
43587"bisnonno", "bisonte", "bisturi", "bizzarro", "blando", "blatta", "bollito", "bonifico", "bordo", "bosco",
43588"botanico", "bottino", "bozzolo", "braccio", "bradipo", "brama", "branca", "bravura", "bretella", "brevetto",
43589"brezza", "briglia", "brillante", "brindare", "broccolo", "brodo", "bronzina", "brullo", "bruno", "bubbone",
43590"buca", "budino", "buffone", "buio", "bulbo", "buono", "burlone", "burrasca", "bussola", "busta",
43591"cadetto", "caduco", "calamaro", "calcolo", "calesse", "calibro", "calmo", "caloria", "cambusa", "camerata",
43592"camicia", "cammino", "camola", "campale", "canapa", "candela", "cane", "canino", "canotto", "cantina",
43593"capace", "capello", "capitolo", "capogiro", "cappero", "capra", "capsula", "carapace", "carcassa", "cardo",
43594"carisma", "carovana", "carretto", "cartolina", "casaccio", "cascata", "caserma", "caso", "cassone", "castello",
43595"casuale", "catasta", "catena", "catrame", "cauto", "cavillo", "cedibile", "cedrata", "cefalo", "celebre",
43596"cellulare", "cena", "cenone", "centesimo", "ceramica", "cercare", "certo", "cerume", "cervello", "cesoia",
43597"cespo", "ceto", "chela", "chiaro", "chicca", "chiedere", "chimera", "china", "chirurgo", "chitarra",
43598"ciao", "ciclismo", "cifrare", "cigno", "cilindro", "ciottolo", "circa", "cirrosi", "citrico", "cittadino",
43599"ciuffo", "civetta", "civile", "classico", "clinica", "cloro", "cocco", "codardo", "codice", "coerente",
43600"cognome", "collare", "colmato", "colore", "colposo", "coltivato", "colza", "coma", "cometa", "commando",
43601"comodo", "computer", "comune", "conciso", "condurre", "conferma", "congelare", "coniuge", "connesso", "conoscere",
43602"consumo", "continuo", "convegno", "coperto", "copione", "coppia", "copricapo", "corazza", "cordata", "coricato",
43603"cornice", "corolla", "corpo", "corredo", "corsia", "cortese", "cosmico", "costante", "cottura", "covato",
43604"cratere", "cravatta", "creato", "credere", "cremoso", "crescita", "creta", "criceto", "crinale", "crisi",
43605"critico", "croce", "cronaca", "crostata", "cruciale", "crusca", "cucire", "cuculo", "cugino", "cullato",
43606"cupola", "curatore", "cursore", "curvo", "cuscino", "custode", "dado", "daino", "dalmata", "damerino",
43607"daniela", "dannoso", "danzare", "datato", "davanti", "davvero", "debutto", "decennio", "deciso", "declino",
43608"decollo", "decreto", "dedicato", "definito", "deforme", "degno", "delegare", "delfino", "delirio", "delta",
43609"demenza", "denotato", "dentro", "deposito", "derapata", "derivare", "deroga", "descritto", "deserto", "desiderio",
43610"desumere", "detersivo", "devoto", "diametro", "dicembre", "diedro", "difeso", "diffuso", "digerire", "digitale",
43611"diluvio", "dinamico", "dinnanzi", "dipinto", "diploma", "dipolo", "diradare", "dire", "dirotto", "dirupo",
43612"disagio", "discreto", "disfare", "disgelo", "disposto", "distanza", "disumano", "dito", "divano", "divelto",
43613"dividere", "divorato", "doblone", "docente", "doganale", "dogma", "dolce", "domato", "domenica", "dominare",
43614"dondolo", "dono", "dormire", "dote", "dottore", "dovuto", "dozzina", "drago", "druido", "dubbio",
43615"dubitare", "ducale", "duna", "duomo", "duplice", "duraturo", "ebano", "eccesso", "ecco", "eclissi",
43616"economia", "edera", "edicola", "edile", "editoria", "educare", "egemonia", "egli", "egoismo", "egregio",
43617"elaborato", "elargire", "elegante", "elencato", "eletto", "elevare", "elfico", "elica", "elmo", "elsa",
43618"eluso", "emanato", "emblema", "emesso", "emiro", "emotivo", "emozione", "empirico", "emulo", "endemico",
43619"enduro", "energia", "enfasi", "enoteca", "entrare", "enzima", "epatite", "epilogo", "episodio", "epocale",
43620"eppure", "equatore", "erario", "erba", "erboso", "erede", "eremita", "erigere", "ermetico", "eroe",
43621"erosivo", "errante", "esagono", "esame", "esanime", "esaudire", "esca", "esempio", "esercito", "esibito",
43622"esigente", "esistere", "esito", "esofago", "esortato", "esoso", "espanso", "espresso", "essenza", "esso",
43623"esteso", "estimare", "estonia", "estroso", "esultare", "etilico", "etnico", "etrusco", "etto", "euclideo",
43624"europa", "evaso", "evidenza", "evitato", "evoluto", "evviva", "fabbrica", "faccenda", "fachiro", "falco",
43625"famiglia", "fanale", "fanfara", "fango", "fantasma", "fare", "farfalla", "farinoso", "farmaco", "fascia",
43626"fastoso", "fasullo", "faticare", "fato", "favoloso", "febbre", "fecola", "fede", "fegato", "felpa",
43627"feltro", "femmina", "fendere", "fenomeno", "fermento", "ferro", "fertile", "fessura", "festivo", "fetta",
43628"feudo", "fiaba", "fiducia", "fifa", "figurato", "filo", "finanza", "finestra", "finire", "fiore",
43629"fiscale", "fisico", "fiume", "flacone", "flamenco", "flebo", "flemma", "florido", "fluente", "fluoro",
43630"fobico", "focaccia", "focoso", "foderato", "foglio", "folata", "folclore", "folgore", "fondente", "fonetico",
43631"fonia", "fontana", "forbito", "forchetta", "foresta", "formica", "fornaio", "foro", "fortezza", "forzare",
43632"fosfato", "fosso", "fracasso", "frana", "frassino", "fratello", "freccetta", "frenata", "fresco", "frigo",
43633"frollino", "fronde", "frugale", "frutta", "fucilata", "fucsia", "fuggente", "fulmine", "fulvo", "fumante",
43634"fumetto", "fumoso", "fune", "funzione", "fuoco", "furbo", "furgone", "furore", "fuso", "futile",
43635"gabbiano", "gaffe", "galateo", "gallina", "galoppo", "gambero", "gamma", "garanzia", "garbo", "garofano",
43636"garzone", "gasdotto", "gasolio", "gastrico", "gatto", "gaudio", "gazebo", "gazzella", "geco", "gelatina",
43637"gelso", "gemello", "gemmato", "gene", "genitore", "gennaio", "genotipo", "gergo", "ghepardo", "ghiaccio",
43638"ghisa", "giallo", "gilda", "ginepro", "giocare", "gioiello", "giorno", "giove", "girato", "girone",
43639"gittata", "giudizio", "giurato", "giusto", "globulo", "glutine", "gnomo", "gobba", "golf", "gomito",
43640"gommone", "gonfio", "gonna", "governo", "gracile", "grado", "grafico", "grammo", "grande", "grattare",
43641"gravoso", "grazia", "greca", "gregge", "grifone", "grigio", "grinza", "grotta", "gruppo", "guadagno",
43642"guaio", "guanto", "guardare", "gufo", "guidare", "ibernato", "icona", "identico", "idillio", "idolo",
43643"idra", "idrico", "idrogeno", "igiene", "ignaro", "ignorato", "ilare", "illeso", "illogico", "illudere",
43644"imballo", "imbevuto", "imbocco", "imbuto", "immane", "immerso", "immolato", "impacco", "impeto", "impiego",
43645"importo", "impronta", "inalare", "inarcare", "inattivo", "incanto", "incendio", "inchino", "incisivo", "incluso",
43646"incontro", "incrocio", "incubo", "indagine", "india", "indole", "inedito", "infatti", "infilare", "inflitto",
43647"ingaggio", "ingegno", "inglese", "ingordo", "ingrosso", "innesco", "inodore", "inoltrare", "inondato", "insano",
43648"insetto", "insieme", "insonnia", "insulina", "intasato", "intero", "intonaco", "intuito", "inumidire", "invalido",
43649"invece", "invito", "iperbole", "ipnotico", "ipotesi", "ippica", "iride", "irlanda", "ironico", "irrigato",
43650"irrorare", "isolato", "isotopo", "isterico", "istituto", "istrice", "italia", "iterare", "labbro", "labirinto",
43651"lacca", "lacerato", "lacrima", "lacuna", "laddove", "lago", "lampo", "lancetta", "lanterna", "lardoso",
43652"larga", "laringe", "lastra", "latenza", "latino", "lattuga", "lavagna", "lavoro", "legale", "leggero",
43653"lembo", "lentezza", "lenza", "leone", "lepre", "lesivo", "lessato", "lesto", "letterale", "leva",
43654"levigato", "libero", "lido", "lievito", "lilla", "limatura", "limitare", "limpido", "lineare", "lingua",
43655"liquido", "lira", "lirica", "lisca", "lite", "litigio", "livrea", "locanda", "lode", "logica",
43656"lombare", "londra", "longevo", "loquace", "lorenzo", "loto", "lotteria", "luce", "lucidato", "lumaca",
43657"luminoso", "lungo", "lupo", "luppolo", "lusinga", "lusso", "lutto", "macabro", "macchina", "macero",
43658"macinato", "madama", "magico", "maglia", "magnete", "magro", "maiolica", "malafede", "malgrado", "malinteso",
43659"malsano", "malto", "malumore", "mana", "mancia", "mandorla", "mangiare", "manifesto", "mannaro", "manovra",
43660"mansarda", "mantide", "manubrio", "mappa", "maratona", "marcire", "maretta", "marmo", "marsupio", "maschera",
43661"massaia", "mastino", "materasso", "matricola", "mattone", "maturo", "mazurca", "meandro", "meccanico", "mecenate",
43662"medesimo", "meditare", "mega", "melassa", "melis", "melodia", "meninge", "meno", "mensola", "mercurio",
43663"merenda", "merlo", "meschino", "mese", "messere", "mestolo", "metallo", "metodo", "mettere", "miagolare",
43664"mica", "micelio", "michele", "microbo", "midollo", "miele", "migliore", "milano", "milite", "mimosa",
43665"minerale", "mini", "minore", "mirino", "mirtillo", "miscela", "missiva", "misto", "misurare", "mitezza",
43666"mitigare", "mitra", "mittente", "mnemonico", "modello", "modifica", "modulo", "mogano", "mogio", "mole",
43667"molosso", "monastero", "monco", "mondina", "monetario", "monile", "monotono", "monsone", "montato", "monviso",
43668"mora", "mordere", "morsicato", "mostro", "motivato", "motosega", "motto", "movenza", "movimento", "mozzo",
43669"mucca", "mucosa", "muffa", "mughetto", "mugnaio", "mulatto", "mulinello", "multiplo", "mummia", "munto",
43670"muovere", "murale", "musa", "muscolo", "musica", "mutevole", "muto", "nababbo", "nafta", "nanometro",
43671"narciso", "narice", "narrato", "nascere", "nastrare", "naturale", "nautica", "naviglio", "nebulosa", "necrosi",
43672"negativo", "negozio", "nemmeno", "neofita", "neretto", "nervo", "nessuno", "nettuno", "neutrale", "neve",
43673"nevrotico", "nicchia", "ninfa", "nitido", "nobile", "nocivo", "nodo", "nome", "nomina", "nordico",
43674"normale", "norvegese", "nostrano", "notare", "notizia", "notturno", "novella", "nucleo", "nulla", "numero",
43675"nuovo", "nutrire", "nuvola", "nuziale", "oasi", "obbedire", "obbligo", "obelisco", "oblio", "obolo",
43676"obsoleto", "occasione", "occhio", "occidente", "occorrere", "occultare", "ocra", "oculato", "odierno", "odorare",
43677"offerta", "offrire", "offuscato", "oggetto", "oggi", "ognuno", "olandese", "olfatto", "oliato", "oliva",
43678"ologramma", "oltre", "omaggio", "ombelico", "ombra", "omega", "omissione", "ondoso", "onere", "onice",
43679"onnivoro", "onorevole", "onta", "operato", "opinione", "opposto", "oracolo", "orafo", "ordine", "orecchino",
43680"orefice", "orfano", "organico", "origine", "orizzonte", "orma", "ormeggio", "ornativo", "orologio", "orrendo",
43681"orribile", "ortensia", "ortica", "orzata", "orzo", "osare", "oscurare", "osmosi", "ospedale", "ospite",
43682"ossa", "ossidare", "ostacolo", "oste", "otite", "otre", "ottagono", "ottimo", "ottobre", "ovale",
43683"ovest", "ovino", "oviparo", "ovocito", "ovunque", "ovviare", "ozio", "pacchetto", "pace", "pacifico",
43684"padella", "padrone", "paese", "paga", "pagina", "palazzina", "palesare", "pallido", "palo", "palude",
43685"pandoro", "pannello", "paolo", "paonazzo", "paprica", "parabola", "parcella", "parere", "pargolo", "pari",
43686"parlato", "parola", "partire", "parvenza", "parziale", "passivo", "pasticca", "patacca", "patologia", "pattume",
43687"pavone", "peccato", "pedalare", "pedonale", "peggio", "peloso", "penare", "pendice", "penisola", "pennuto",
43688"penombra", "pensare", "pentola", "pepe", "pepita", "perbene", "percorso", "perdonato", "perforare", "pergamena",
43689"periodo", "permesso", "perno", "perplesso", "persuaso", "pertugio", "pervaso", "pesatore", "pesista", "peso",
43690"pestifero", "petalo", "pettine", "petulante", "pezzo", "piacere", "pianta", "piattino", "piccino", "picozza",
43691"piega", "pietra", "piffero", "pigiama", "pigolio", "pigro", "pila", "pilifero", "pillola", "pilota",
43692"pimpante", "pineta", "pinna", "pinolo", "pioggia", "piombo", "piramide", "piretico", "pirite", "pirolisi",
43693"pitone", "pizzico", "placebo", "planare", "plasma", "platano", "plenario", "pochezza", "poderoso", "podismo",
43694"poesia", "poggiare", "polenta", "poligono", "pollice", "polmonite", "polpetta", "polso", "poltrona", "polvere",
43695"pomice", "pomodoro", "ponte", "popoloso", "porfido", "poroso", "porpora", "porre", "portata", "posa",
43696"positivo", "possesso", "postulato", "potassio", "potere", "pranzo", "prassi", "pratica", "precluso", "predica",
43697"prefisso", "pregiato", "prelievo", "premere", "prenotare", "preparato", "presenza", "pretesto", "prevalso", "prima",
43698"principe", "privato", "problema", "procura", "produrre", "profumo", "progetto", "prolunga", "promessa", "pronome",
43699"proposta", "proroga", "proteso", "prova", "prudente", "prugna", "prurito", "psiche", "pubblico", "pudica",
43700"pugilato", "pugno", "pulce", "pulito", "pulsante", "puntare", "pupazzo", "pupilla", "puro", "quadro",
43701"qualcosa", "quasi", "querela", "quota", "raccolto", "raddoppio", "radicale", "radunato", "raffica", "ragazzo",
43702"ragione", "ragno", "ramarro", "ramingo", "ramo", "randagio", "rantolare", "rapato", "rapina", "rappreso",
43703"rasatura", "raschiato", "rasente", "rassegna", "rastrello", "rata", "ravveduto", "reale", "recepire", "recinto",
43704"recluta", "recondito", "recupero", "reddito", "redimere", "regalato", "registro", "regola", "regresso", "relazione",
43705"remare", "remoto", "renna", "replica", "reprimere", "reputare", "resa", "residente", "responso", "restauro",
43706"rete", "retina", "retorica", "rettifica", "revocato", "riassunto", "ribadire", "ribelle", "ribrezzo", "ricarica",
43707"ricco", "ricevere", "riciclato", "ricordo", "ricreduto", "ridicolo", "ridurre", "rifasare", "riflesso", "riforma",
43708"rifugio", "rigare", "rigettato", "righello", "rilassato", "rilevato", "rimanere", "rimbalzo", "rimedio", "rimorchio",
43709"rinascita", "rincaro", "rinforzo", "rinnovo", "rinomato", "rinsavito", "rintocco", "rinuncia", "rinvenire", "riparato",
43710"ripetuto", "ripieno", "riportare", "ripresa", "ripulire", "risata", "rischio", "riserva", "risibile", "riso",
43711"rispetto", "ristoro", "risultato", "risvolto", "ritardo", "ritegno", "ritmico", "ritrovo", "riunione", "riva",
43712"riverso", "rivincita", "rivolto", "rizoma", "roba", "robotico", "robusto", "roccia", "roco", "rodaggio",
43713"rodere", "roditore", "rogito", "rollio", "romantico", "rompere", "ronzio", "rosolare", "rospo", "rotante",
43714"rotondo", "rotula", "rovescio", "rubizzo", "rubrica", "ruga", "rullino", "rumine", "rumoroso", "ruolo",
43715"rupe", "russare", "rustico", "sabato", "sabbiare", "sabotato", "sagoma", "salasso", "saldatura", "salgemma",
43716"salivare", "salmone", "salone", "saltare", "saluto", "salvo", "sapere", "sapido", "saporito", "saraceno",
43717"sarcasmo", "sarto", "sassoso", "satellite", "satira", "satollo", "saturno", "savana", "savio", "saziato",
43718"sbadiglio", "sbalzo", "sbancato", "sbarra", "sbattere", "sbavare", "sbendare", "sbirciare", "sbloccato", "sbocciato",
43719"sbrinare", "sbruffone", "sbuffare", "scabroso", "scadenza", "scala", "scambiare", "scandalo", "scapola", "scarso",
43720"scatenare", "scavato", "scelto", "scenico", "scettro", "scheda", "schiena", "sciarpa", "scienza", "scindere",
43721"scippo", "sciroppo", "scivolo", "sclerare", "scodella", "scolpito", "scomparto", "sconforto", "scoprire", "scorta",
43722"scossone", "scozzese", "scriba", "scrollare", "scrutinio", "scuderia", "scultore", "scuola", "scuro", "scusare",
43723"sdebitare", "sdoganare", "seccatura", "secondo", "sedano", "seggiola", "segnalato", "segregato", "seguito", "selciato",
43724"selettivo", "sella", "selvaggio", "semaforo", "sembrare", "seme", "seminato", "sempre", "senso", "sentire",
43725"sepolto", "sequenza", "serata", "serbato", "sereno", "serio", "serpente", "serraglio", "servire", "sestina",
43726"setola", "settimana", "sfacelo", "sfaldare", "sfamato", "sfarzoso", "sfaticato", "sfera", "sfida", "sfilato",
43727"sfinge", "sfocato", "sfoderare", "sfogo", "sfoltire", "sforzato", "sfratto", "sfruttato", "sfuggito", "sfumare",
43728"sfuso", "sgabello", "sgarbato", "sgonfiare", "sgorbio", "sgrassato", "sguardo", "sibilo", "siccome", "sierra",
43729"sigla", "signore", "silenzio", "sillaba", "simbolo", "simpatico", "simulato", "sinfonia", "singolo", "sinistro",
43730"sino", "sintesi", "sinusoide", "sipario", "sisma", "sistole", "situato", "slitta", "slogatura", "sloveno",
43731"smarrito", "smemorato", "smentito", "smeraldo", "smilzo", "smontare", "smottato", "smussato", "snellire", "snervato",
43732"snodo", "sobbalzo", "sobrio", "soccorso", "sociale", "sodale", "soffitto", "sogno", "soldato", "solenne",
43733"solido", "sollazzo", "solo", "solubile", "solvente", "somatico", "somma", "sonda", "sonetto", "sonnifero",
43734"sopire", "soppeso", "sopra", "sorgere", "sorpasso", "sorriso", "sorso", "sorteggio", "sorvolato", "sospiro",
43735"sosta", "sottile", "spada", "spalla", "spargere", "spatola", "spavento", "spazzola", "specie", "spedire",
43736"spegnere", "spelatura", "speranza", "spessore", "spettrale", "spezzato", "spia", "spigoloso", "spillato", "spinoso",
43737"spirale", "splendido", "sportivo", "sposo", "spranga", "sprecare", "spronato", "spruzzo", "spuntino", "squillo",
43738"sradicare", "srotolato", "stabile", "stacco", "staffa", "stagnare", "stampato", "stantio", "starnuto", "stasera",
43739"statuto", "stelo", "steppa", "sterzo", "stiletto", "stima", "stirpe", "stivale", "stizzoso", "stonato",
43740"storico", "strappo", "stregato", "stridulo", "strozzare", "strutto", "stuccare", "stufo", "stupendo", "subentro",
43741"succoso", "sudore", "suggerito", "sugo", "sultano", "suonare", "superbo", "supporto", "surgelato", "surrogato",
43742"sussurro", "sutura", "svagare", "svedese", "sveglio", "svelare", "svenuto", "svezia", "sviluppo", "svista",
43743"svizzera", "svolta", "svuotare", "tabacco", "tabulato", "tacciare", "taciturno", "tale", "talismano", "tampone",
43744"tannino", "tara", "tardivo", "targato", "tariffa", "tarpare", "tartaruga", "tasto", "tattico", "taverna",
43745"tavolata", "tazza", "teca", "tecnico", "telefono", "temerario", "tempo", "temuto", "tendone", "tenero",
43746"tensione", "tentacolo", "teorema", "terme", "terrazzo", "terzetto", "tesi", "tesserato", "testato", "tetro",
43747"tettoia", "tifare", "tigella", "timbro", "tinto", "tipico", "tipografo", "tiraggio", "tiro", "titanio",
43748"titolo", "titubante", "tizio", "tizzone", "toccare", "tollerare", "tolto", "tombola", "tomo", "tonfo",
43749"tonsilla", "topazio", "topologia", "toppa", "torba", "tornare", "torrone", "tortora", "toscano", "tossire",
43750"tostatura", "totano", "trabocco", "trachea", "trafila", "tragedia", "tralcio", "tramonto", "transito", "trapano",
43751"trarre", "trasloco", "trattato", "trave", "treccia", "tremolio", "trespolo", "tributo", "tricheco", "trifoglio",
43752"trillo", "trincea", "trio", "tristezza", "triturato", "trivella", "tromba", "trono", "troppo", "trottola",
43753"trovare", "truccato", "tubatura", "tuffato", "tulipano", "tumulto", "tunisia", "turbare", "turchino", "tuta",
43754"tutela", "ubicato", "uccello", "uccisore", "udire", "uditivo", "uffa", "ufficio", "uguale", "ulisse",
43755"ultimato", "umano", "umile", "umorismo", "uncinetto", "ungere", "ungherese", "unicorno", "unificato", "unisono",
43756"unitario", "unte", "uovo", "upupa", "uragano", "urgenza", "urlo", "usanza", "usato", "uscito",
43757"usignolo", "usuraio", "utensile", "utilizzo", "utopia", "vacante", "vaccinato", "vagabondo", "vagliato", "valanga",
43758"valgo", "valico", "valletta", "valoroso", "valutare", "valvola", "vampata", "vangare", "vanitoso", "vano",
43759"vantaggio", "vanvera", "vapore", "varano", "varcato", "variante", "vasca", "vedetta", "vedova", "veduto",
43760"vegetale", "veicolo", "velcro", "velina", "velluto", "veloce", "venato", "vendemmia", "vento", "verace",
43761"verbale", "vergogna", "verifica", "vero", "verruca", "verticale", "vescica", "vessillo", "vestale", "veterano",
43762"vetrina", "vetusto", "viandante", "vibrante", "vicenda", "vichingo", "vicinanza", "vidimare", "vigilia", "vigneto",
43763"vigore", "vile", "villano", "vimini", "vincitore", "viola", "vipera", "virgola", "virologo", "virulento",
43764"viscoso", "visione", "vispo", "vissuto", "visura", "vita", "vitello", "vittima", "vivanda", "vivido",
43765"viziare", "voce", "voga", "volatile", "volere", "volpe", "voragine", "vulcano", "zampogna", "zanna",
43766"zappato", "zattera", "zavorra", "zefiro", "zelante", "zelo", "zenzero", "zerbino", "zibetto", "zinco",
43767"zircone", "zitto", "zolla", "zotico", "zucchero", "zufolo", "zulu", "zuppa"]
dc55c6b0 43768</script>
ab78acc6 43769 <script>/*
3af2954a
IC
43770 * Copyright (c) 2013 Pavol Rusnak
43771 *
43772 * Permission is hereby granted, free of charge, to any person obtaining a copy of
43773 * this software and associated documentation files (the "Software"), to deal in
43774 * the Software without restriction, including without limitation the rights to
43775 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
43776 * of the Software, and to permit persons to whom the Software is furnished to do
43777 * so, subject to the following conditions:
43778 *
43779 * The above copyright notice and this permission notice shall be included in all
43780 * copies or substantial portions of the Software.
43781 *
43782 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
43783 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
43784 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
43785 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
43786 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
43787 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
43788 */
43789
43790/*
43791 * Javascript port from python by Ian Coleman
43792 *
80c4dd2a
IC
43793 * Requires code from sjcl
43794 * https://github.com/bitwiseshiftleft/sjcl
3af2954a
IC
43795 */
43796
43797var Mnemonic = function(language) {
43798
43799 var PBKDF2_ROUNDS = 2048;
43800 var RADIX = 2048;
43801
43802 var self = this;
43803 var wordlist = [];
43804
80c4dd2a
IC
43805 var hmacSHA512 = function(key) {
43806 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
43807 this.encrypt = function() {
43808 return hasher.encrypt.apply(hasher, arguments);
43809 };
43810 };
43811
3af2954a
IC
43812 function init() {
43813 wordlist = WORDLISTS[language];
43814 if (wordlist.length != RADIX) {
43815 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
43816 throw err;
43817 }
43818 }
43819
43820 self.generate = function(strength) {
43821 strength = strength || 128;
43822 var r = strength % 32;
43823 if (r > 0) {
43824 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
43825 }
43826 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
43827 if (!hasStrongCrypto) {
43828 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
43829 }
43830 var buffer = new Uint8Array(strength / 8);
43831 var data = crypto.getRandomValues(buffer);
43832 return self.toMnemonic(data);
43833 }
43834
80c4dd2a
IC
43835 self.toMnemonic = function(byteArray) {
43836 if (byteArray.length % 4 > 0) {
43837 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
3af2954a
IC
43838 }
43839
43840 //h = hashlib.sha256(data).hexdigest()
80c4dd2a
IC
43841 var data = byteArrayToWordArray(byteArray);
43842 var hash = sjcl.hash.sha256.hash(data);
43843 var h = sjcl.codec.hex.fromBits(hash);
3af2954a
IC
43844
43845 // b is a binary string, eg '00111010101100...'
43846 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
43847 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
43848 //
43849 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
43850 // c = bin(int(h, 16))[2:].zfill(256)
43851 // d = c[:len(data) * 8 / 32]
80c4dd2a
IC
43852 var a = byteArrayToBinaryString(byteArray);
43853 var c = zfill(hexStringToBinaryString(h), 256);
43854 var d = c.substring(0, byteArray.length * 8 / 32);
3af2954a
IC
43855 // b = line1 + line2
43856 var b = a + d;
43857
43858 var result = [];
43859 var blen = b.length / 11;
43860 for (var i=0; i<blen; i++) {
43861 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
43862 result.push(wordlist[idx]);
43863 }
0515eeec 43864 return self.joinWords(result);
3af2954a
IC
43865 }
43866
43867 self.check = function(mnemonic) {
0515eeec 43868 var mnemonic = self.splitWords(mnemonic);
18abe53b 43869 if (mnemonic.length == 0 || mnemonic.length % 3 > 0) {
3af2954a
IC
43870 return false
43871 }
43872 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
43873 var idx = [];
43874 for (var i=0; i<mnemonic.length; i++) {
43875 var word = mnemonic[i];
43876 var wordIndex = wordlist.indexOf(word);
43877 if (wordIndex == -1) {
43878 return false;
43879 }
43880 var binaryIndex = zfill(wordIndex.toString(2), 11);
43881 idx.push(binaryIndex);
43882 }
43883 var b = idx.join('');
43884 var l = b.length;
43885 //d = b[:l / 33 * 32]
43886 //h = b[-l / 33:]
43887 var d = b.substring(0, l / 33 * 32);
43888 var h = b.substring(l - l / 33, l);
43889 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
80c4dd2a 43890 var nd = binaryStringToWordArray(d);
3af2954a 43891 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
80c4dd2a
IC
43892 var ndHash = sjcl.hash.sha256.hash(nd);
43893 var ndHex = sjcl.codec.hex.fromBits(ndHash);
43894 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
3af2954a
IC
43895 var nh = ndBstr.substring(0,l/33);
43896 return h == nh;
43897 }
43898
43899 self.toSeed = function(mnemonic, passphrase) {
43900 passphrase = passphrase || '';
599fb39e
IC
43901 mnemonic = self.joinWords(self.splitWords(mnemonic)); // removes duplicate blanks
43902 var mnemonicNormalized = self.normalizeString(mnemonic);
3af2954a
IC
43903 passphrase = self.normalizeString(passphrase)
43904 passphrase = "mnemonic" + passphrase;
599fb39e 43905 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonicNormalized);
80c4dd2a
IC
43906 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
43907 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
43908 var hashHex = sjcl.codec.hex.fromBits(result);
43909 return hashHex;
3af2954a
IC
43910 }
43911
0515eeec
IC
43912 self.splitWords = function(mnemonic) {
43913 return mnemonic.split(/\s/g).filter(function(x) { return x.length; });
43914 }
43915
43916 self.joinWords = function(words) {
43917 // Set space correctly depending on the language
43918 // see https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md#japanese
43919 var space = " ";
43920 if (language == "japanese") {
43921 space = "\u3000"; // ideographic space
43922 }
43923 return words.join(space);
43924 }
43925
3af2954a
IC
43926 self.normalizeString = function(str) {
43927 if (typeof str.normalize == "function") {
43928 return str.normalize("NFKD");
43929 }
43930 else {
43931 // TODO decide how to handle this in the future.
43932 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
43933 return str;
43934 }
43935 }
43936
80c4dd2a
IC
43937 function byteArrayToWordArray(data) {
43938 var a = [];
43939 for (var i=0; i<data.length/4; i++) {
43940 v = 0;
43941 v += data[i*4 + 0] << 8 * 3;
43942 v += data[i*4 + 1] << 8 * 2;
43943 v += data[i*4 + 2] << 8 * 1;
43944 v += data[i*4 + 3] << 8 * 0;
43945 a.push(v);
43946 }
43947 return a;
43948 }
43949
3af2954a
IC
43950 function byteArrayToBinaryString(data) {
43951 var bin = "";
43952 for (var i=0; i<data.length; i++) {
43953 bin += zfill(data[i].toString(2), 8);
43954 }
43955 return bin;
43956 }
43957
80c4dd2a
IC
43958 function hexStringToBinaryString(hexString) {
43959 binaryString = "";
43960 for (var i=0; i<hexString.length; i++) {
43961 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
43962 }
43963 return binaryString;
43964 }
43965
43966 function binaryStringToWordArray(binary) {
43967 var aLen = binary.length / 32;
43968 var a = [];
43969 for (var i=0; i<aLen; i++) {
43970 var valueStr = binary.substring(0,32);
3af2954a 43971 var value = parseInt(valueStr, 2);
80c4dd2a
IC
43972 a.push(value);
43973 binary = binary.slice(32);
3af2954a 43974 }
80c4dd2a 43975 return a;
3af2954a
IC
43976 }
43977
43978 // Pad a numeric string on the left with zero digits until the given width
43979 // is reached.
43980 // Note this differs to the python implementation because it does not
43981 // handle numbers starting with a sign.
43982 function zfill(source, length) {
43983 source = source.toString();
43984 while (source.length < length) {
43985 source = '0' + source;
43986 }
43987 return source;
43988 }
43989
43990 init();
ebd8d4e8 43991
3af2954a 43992}
dc55c6b0 43993</script>
95f04905
IC
43994 <script>/*
43995 JavaScript BigInteger library version 0.9.1
43996 http://silentmatt.com/biginteger/
18abe53b 43997
95f04905
IC
43998 Copyright (c) 2009 Matthew Crumley <email@matthewcrumley.com>
43999 Copyright (c) 2010,2011 by John Tobey <John.Tobey@gmail.com>
44000 Licensed under the MIT license.
c6624d51 44001
95f04905
IC
44002 Support for arbitrary internal representation base was added by
44003 Vitaly Magerya.
44004*/
18abe53b 44005
95f04905
IC
44006/*
44007 File: biginteger.js
18abe53b 44008
95f04905 44009 Exports:
18abe53b 44010
95f04905
IC
44011 <BigInteger>
44012*/
44013(function(exports) {
44014"use strict";
44015/*
44016 Class: BigInteger
44017 An arbitrarily-large integer.
18abe53b 44018
95f04905
IC
44019 <BigInteger> objects should be considered immutable. None of the "built-in"
44020 methods modify *this* or their arguments. All properties should be
44021 considered private.
18abe53b 44022
95f04905
IC
44023 All the methods of <BigInteger> instances can be called "statically". The
44024 static versions are convenient if you don't already have a <BigInteger>
44025 object.
18abe53b 44026
95f04905 44027 As an example, these calls are equivalent.
18abe53b 44028
95f04905
IC
44029 > BigInteger(4).multiply(5); // returns BigInteger(20);
44030 > BigInteger.multiply(4, 5); // returns BigInteger(20);
18abe53b 44031
95f04905
IC
44032 > var a = 42;
44033 > var a = BigInteger.toJSValue("0b101010"); // Not completely useless...
44034*/
c6624d51 44035
95f04905 44036var CONSTRUCT = {}; // Unique token to call "private" version of constructor
c6624d51
IC
44037
44038/*
44039 Constructor: BigInteger()
44040 Convert a value to a <BigInteger>.
44041
44042 Although <BigInteger()> is the constructor for <BigInteger> objects, it is
44043 best not to call it as a constructor. If *n* is a <BigInteger> object, it is
44044 simply returned as-is. Otherwise, <BigInteger()> is equivalent to <parse>
44045 without a radix argument.
44046
44047 > var n0 = BigInteger(); // Same as <BigInteger.ZERO>
44048 > var n1 = BigInteger("123"); // Create a new <BigInteger> with value 123
44049 > var n2 = BigInteger(123); // Create a new <BigInteger> with value 123
44050 > var n3 = BigInteger(n2); // Return n2, unchanged
44051
44052 The constructor form only takes an array and a sign. *n* must be an
44053 array of numbers in little-endian order, where each digit is between 0
44054 and BigInteger.base. The second parameter sets the sign: -1 for
44055 negative, +1 for positive, or 0 for zero. The array is *not copied and
44056 may be modified*. If the array contains only zeros, the sign parameter
44057 is ignored and is forced to zero.
44058
44059 > new BigInteger([5], -1): create a new BigInteger with value -5
44060
44061 Parameters:
44062
44063 n - Value to convert to a <BigInteger>.
44064
44065 Returns:
44066
44067 A <BigInteger> value.
44068
44069 See Also:
44070
44071 <parse>, <BigInteger>
44072*/
44073function BigInteger(n, s, token) {
44074 if (token !== CONSTRUCT) {
44075 if (n instanceof BigInteger) {
44076 return n;
44077 }
44078 else if (typeof n === "undefined") {
44079 return ZERO;
44080 }
44081 return BigInteger.parse(n);
44082 }
44083
44084 n = n || []; // Provide the nullary constructor for subclasses.
44085 while (n.length && !n[n.length - 1]) {
44086 --n.length;
44087 }
44088 this._d = n;
44089 this._s = n.length ? (s || 1) : 0;
44090}
44091
44092BigInteger._construct = function(n, s) {
44093 return new BigInteger(n, s, CONSTRUCT);
44094};
44095
44096// Base-10 speedup hacks in parse, toString, exp10 and log functions
44097// require base to be a power of 10. 10^7 is the largest such power
44098// that won't cause a precision loss when digits are multiplied.
44099var BigInteger_base = 10000000;
44100var BigInteger_base_log10 = 7;
44101
44102BigInteger.base = BigInteger_base;
44103BigInteger.base_log10 = BigInteger_base_log10;
44104
44105var ZERO = new BigInteger([], 0, CONSTRUCT);
44106// Constant: ZERO
44107// <BigInteger> 0.
44108BigInteger.ZERO = ZERO;
44109
44110var ONE = new BigInteger([1], 1, CONSTRUCT);
44111// Constant: ONE
44112// <BigInteger> 1.
44113BigInteger.ONE = ONE;
44114
44115var M_ONE = new BigInteger(ONE._d, -1, CONSTRUCT);
44116// Constant: M_ONE
44117// <BigInteger> -1.
44118BigInteger.M_ONE = M_ONE;
44119
44120// Constant: _0
44121// Shortcut for <ZERO>.
44122BigInteger._0 = ZERO;
44123
44124// Constant: _1
44125// Shortcut for <ONE>.
44126BigInteger._1 = ONE;
44127
44128/*
44129 Constant: small
44130 Array of <BigIntegers> from 0 to 36.
44131
44132 These are used internally for parsing, but useful when you need a "small"
44133 <BigInteger>.
44134
44135 See Also:
44136
44137 <ZERO>, <ONE>, <_0>, <_1>
44138*/
44139BigInteger.small = [
44140 ZERO,
44141 ONE,
44142 /* Assuming BigInteger_base > 36 */
44143 new BigInteger( [2], 1, CONSTRUCT),
44144 new BigInteger( [3], 1, CONSTRUCT),
44145 new BigInteger( [4], 1, CONSTRUCT),
44146 new BigInteger( [5], 1, CONSTRUCT),
44147 new BigInteger( [6], 1, CONSTRUCT),
44148 new BigInteger( [7], 1, CONSTRUCT),
44149 new BigInteger( [8], 1, CONSTRUCT),
44150 new BigInteger( [9], 1, CONSTRUCT),
44151 new BigInteger([10], 1, CONSTRUCT),
44152 new BigInteger([11], 1, CONSTRUCT),
44153 new BigInteger([12], 1, CONSTRUCT),
44154 new BigInteger([13], 1, CONSTRUCT),
44155 new BigInteger([14], 1, CONSTRUCT),
44156 new BigInteger([15], 1, CONSTRUCT),
44157 new BigInteger([16], 1, CONSTRUCT),
44158 new BigInteger([17], 1, CONSTRUCT),
44159 new BigInteger([18], 1, CONSTRUCT),
44160 new BigInteger([19], 1, CONSTRUCT),
44161 new BigInteger([20], 1, CONSTRUCT),
44162 new BigInteger([21], 1, CONSTRUCT),
44163 new BigInteger([22], 1, CONSTRUCT),
44164 new BigInteger([23], 1, CONSTRUCT),
44165 new BigInteger([24], 1, CONSTRUCT),
44166 new BigInteger([25], 1, CONSTRUCT),
44167 new BigInteger([26], 1, CONSTRUCT),
44168 new BigInteger([27], 1, CONSTRUCT),
44169 new BigInteger([28], 1, CONSTRUCT),
44170 new BigInteger([29], 1, CONSTRUCT),
44171 new BigInteger([30], 1, CONSTRUCT),
44172 new BigInteger([31], 1, CONSTRUCT),
44173 new BigInteger([32], 1, CONSTRUCT),
44174 new BigInteger([33], 1, CONSTRUCT),
44175 new BigInteger([34], 1, CONSTRUCT),
44176 new BigInteger([35], 1, CONSTRUCT),
44177 new BigInteger([36], 1, CONSTRUCT)
44178];
44179
44180// Used for parsing/radix conversion
44181BigInteger.digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
44182
44183/*
44184 Method: toString
44185 Convert a <BigInteger> to a string.
44186
44187 When *base* is greater than 10, letters are upper case.
44188
44189 Parameters:
44190
44191 base - Optional base to represent the number in (default is base 10).
44192 Must be between 2 and 36 inclusive, or an Error will be thrown.
44193
44194 Returns:
44195
44196 The string representation of the <BigInteger>.
44197*/
44198BigInteger.prototype.toString = function(base) {
44199 base = +base || 10;
44200 if (base < 2 || base > 36) {
44201 throw new Error("illegal radix " + base + ".");
44202 }
44203 if (this._s === 0) {
44204 return "0";
44205 }
44206 if (base === 10) {
44207 var str = this._s < 0 ? "-" : "";
44208 str += this._d[this._d.length - 1].toString();
44209 for (var i = this._d.length - 2; i >= 0; i--) {
44210 var group = this._d[i].toString();
44211 while (group.length < BigInteger_base_log10) group = '0' + group;
44212 str += group;
44213 }
44214 return str;
44215 }
44216 else {
44217 var numerals = BigInteger.digits;
44218 base = BigInteger.small[base];
44219 var sign = this._s;
44220
44221 var n = this.abs();
44222 var digits = [];
44223 var digit;
44224
44225 while (n._s !== 0) {
44226 var divmod = n.divRem(base);
44227 n = divmod[0];
44228 digit = divmod[1];
44229 // TODO: This could be changed to unshift instead of reversing at the end.
44230 // Benchmark both to compare speeds.
44231 digits.push(numerals[digit.valueOf()]);
44232 }
44233 return (sign < 0 ? "-" : "") + digits.reverse().join("");
44234 }
44235};
44236
44237// Verify strings for parsing
44238BigInteger.radixRegex = [
44239 /^$/,
44240 /^$/,
44241 /^[01]*$/,
44242 /^[012]*$/,
44243 /^[0-3]*$/,
44244 /^[0-4]*$/,
44245 /^[0-5]*$/,
44246 /^[0-6]*$/,
44247 /^[0-7]*$/,
44248 /^[0-8]*$/,
44249 /^[0-9]*$/,
44250 /^[0-9aA]*$/,
44251 /^[0-9abAB]*$/,
44252 /^[0-9abcABC]*$/,
44253 /^[0-9a-dA-D]*$/,
44254 /^[0-9a-eA-E]*$/,
44255 /^[0-9a-fA-F]*$/,
44256 /^[0-9a-gA-G]*$/,
44257 /^[0-9a-hA-H]*$/,
44258 /^[0-9a-iA-I]*$/,
44259 /^[0-9a-jA-J]*$/,
44260 /^[0-9a-kA-K]*$/,
44261 /^[0-9a-lA-L]*$/,
44262 /^[0-9a-mA-M]*$/,
44263 /^[0-9a-nA-N]*$/,
44264 /^[0-9a-oA-O]*$/,
44265 /^[0-9a-pA-P]*$/,
44266 /^[0-9a-qA-Q]*$/,
44267 /^[0-9a-rA-R]*$/,
44268 /^[0-9a-sA-S]*$/,
44269 /^[0-9a-tA-T]*$/,
44270 /^[0-9a-uA-U]*$/,
44271 /^[0-9a-vA-V]*$/,
44272 /^[0-9a-wA-W]*$/,
44273 /^[0-9a-xA-X]*$/,
44274 /^[0-9a-yA-Y]*$/,
44275 /^[0-9a-zA-Z]*$/
44276];
44277
44278/*
44279 Function: parse
44280 Parse a string into a <BigInteger>.
44281
44282 *base* is optional but, if provided, must be from 2 to 36 inclusive. If
44283 *base* is not provided, it will be guessed based on the leading characters
44284 of *s* as follows:
44285
44286 - "0x" or "0X": *base* = 16
44287 - "0c" or "0C": *base* = 8
44288 - "0b" or "0B": *base* = 2
44289 - else: *base* = 10
44290
44291 If no base is provided, or *base* is 10, the number can be in exponential
44292 form. For example, these are all valid:
44293
44294 > BigInteger.parse("1e9"); // Same as "1000000000"
44295 > BigInteger.parse("1.234*10^3"); // Same as 1234
44296 > BigInteger.parse("56789 * 10 ** -2"); // Same as 567
44297
44298 If any characters fall outside the range defined by the radix, an exception
44299 will be thrown.
44300
44301 Parameters:
44302
44303 s - The string to parse.
44304 base - Optional radix (default is to guess based on *s*).
44305
44306 Returns:
44307
44308 a <BigInteger> instance.
44309*/
44310BigInteger.parse = function(s, base) {
44311 // Expands a number in exponential form to decimal form.
44312 // expandExponential("-13.441*10^5") === "1344100";
44313 // expandExponential("1.12300e-1") === "0.112300";
44314 // expandExponential(1000000000000000000000000000000) === "1000000000000000000000000000000";
44315 function expandExponential(str) {
44316 str = str.replace(/\s*[*xX]\s*10\s*(\^|\*\*)\s*/, "e");
44317
44318 return str.replace(/^([+\-])?(\d+)\.?(\d*)[eE]([+\-]?\d+)$/, function(x, s, n, f, c) {
44319 c = +c;
44320 var l = c < 0;
44321 var i = n.length + c;
44322 x = (l ? n : f).length;
44323 c = ((c = Math.abs(c)) >= x ? c - x + l : 0);
44324 var z = (new Array(c + 1)).join("0");
44325 var r = n + f;
44326 return (s || "") + (l ? r = z + r : r += z).substr(0, i += l ? z.length : 0) + (i < r.length ? "." + r.substr(i) : "");
44327 });
44328 }
44329
44330 s = s.toString();
44331 if (typeof base === "undefined" || +base === 10) {
44332 s = expandExponential(s);
44333 }
44334
44335 var prefixRE;
44336 if (typeof base === "undefined") {
44337 prefixRE = '0[xcb]';
44338 }
44339 else if (base == 16) {
44340 prefixRE = '0x';
44341 }
44342 else if (base == 8) {
44343 prefixRE = '0c';
44344 }
44345 else if (base == 2) {
44346 prefixRE = '0b';
44347 }
44348 else {
44349 prefixRE = '';
44350 }
44351 var parts = new RegExp('^([+\\-]?)(' + prefixRE + ')?([0-9a-z]*)(?:\\.\\d*)?$', 'i').exec(s);
44352 if (parts) {
44353 var sign = parts[1] || "+";
44354 var baseSection = parts[2] || "";
44355 var digits = parts[3] || "";
44356
44357 if (typeof base === "undefined") {
44358 // Guess base
44359 if (baseSection === "0x" || baseSection === "0X") { // Hex
44360 base = 16;
44361 }
44362 else if (baseSection === "0c" || baseSection === "0C") { // Octal
44363 base = 8;
44364 }
44365 else if (baseSection === "0b" || baseSection === "0B") { // Binary
44366 base = 2;
44367 }
44368 else {
44369 base = 10;
44370 }
44371 }
44372 else if (base < 2 || base > 36) {
44373 throw new Error("Illegal radix " + base + ".");
44374 }
44375
44376 base = +base;
44377
44378 // Check for digits outside the range
44379 if (!(BigInteger.radixRegex[base].test(digits))) {
44380 throw new Error("Bad digit for radix " + base);
44381 }
44382
44383 // Strip leading zeros, and convert to array
44384 digits = digits.replace(/^0+/, "").split("");
44385 if (digits.length === 0) {
44386 return ZERO;
44387 }
44388
44389 // Get the sign (we know it's not zero)
44390 sign = (sign === "-") ? -1 : 1;
44391
44392 // Optimize 10
44393 if (base == 10) {
44394 var d = [];
44395 while (digits.length >= BigInteger_base_log10) {
44396 d.push(parseInt(digits.splice(digits.length-BigInteger.base_log10, BigInteger.base_log10).join(''), 10));
44397 }
44398 d.push(parseInt(digits.join(''), 10));
44399 return new BigInteger(d, sign, CONSTRUCT);
44400 }
44401
44402 // Do the conversion
44403 var d = ZERO;
44404 base = BigInteger.small[base];
44405 var small = BigInteger.small;
44406 for (var i = 0; i < digits.length; i++) {
44407 d = d.multiply(base).add(small[parseInt(digits[i], 36)]);
44408 }
44409 return new BigInteger(d._d, sign, CONSTRUCT);
44410 }
44411 else {
44412 throw new Error("Invalid BigInteger format: " + s);
44413 }
44414};
44415
44416/*
44417 Function: add
44418 Add two <BigIntegers>.
44419
44420 Parameters:
44421
44422 n - The number to add to *this*. Will be converted to a <BigInteger>.
44423
44424 Returns:
44425
44426 The numbers added together.
44427
44428 See Also:
44429
44430 <subtract>, <multiply>, <quotient>, <next>
44431*/
44432BigInteger.prototype.add = function(n) {
44433 if (this._s === 0) {
44434 return BigInteger(n);
44435 }
44436
44437 n = BigInteger(n);
44438 if (n._s === 0) {
44439 return this;
44440 }
44441 if (this._s !== n._s) {
44442 n = n.negate();
44443 return this.subtract(n);
44444 }
44445
44446 var a = this._d;
44447 var b = n._d;
44448 var al = a.length;
44449 var bl = b.length;
44450 var sum = new Array(Math.max(al, bl) + 1);
44451 var size = Math.min(al, bl);
44452 var carry = 0;
44453 var digit;
44454
44455 for (var i = 0; i < size; i++) {
44456 digit = a[i] + b[i] + carry;
44457 sum[i] = digit % BigInteger_base;
44458 carry = (digit / BigInteger_base) | 0;
44459 }
44460 if (bl > al) {
44461 a = b;
44462 al = bl;
44463 }
44464 for (i = size; carry && i < al; i++) {
44465 digit = a[i] + carry;
44466 sum[i] = digit % BigInteger_base;
44467 carry = (digit / BigInteger_base) | 0;
44468 }
44469 if (carry) {
44470 sum[i] = carry;
44471 }
44472
44473 for ( ; i < al; i++) {
44474 sum[i] = a[i];
44475 }
44476
44477 return new BigInteger(sum, this._s, CONSTRUCT);
44478};
44479
44480/*
44481 Function: negate
44482 Get the additive inverse of a <BigInteger>.
44483
44484 Returns:
44485
44486 A <BigInteger> with the same magnatude, but with the opposite sign.
44487
44488 See Also:
44489
44490 <abs>
44491*/
44492BigInteger.prototype.negate = function() {
44493 return new BigInteger(this._d, (-this._s) | 0, CONSTRUCT);
44494};
44495
44496/*
44497 Function: abs
44498 Get the absolute value of a <BigInteger>.
44499
44500 Returns:
44501
44502 A <BigInteger> with the same magnatude, but always positive (or zero).
44503
44504 See Also:
44505
44506 <negate>
44507*/
44508BigInteger.prototype.abs = function() {
44509 return (this._s < 0) ? this.negate() : this;
44510};
44511
44512/*
44513 Function: subtract
44514 Subtract two <BigIntegers>.
44515
44516 Parameters:
44517
44518 n - The number to subtract from *this*. Will be converted to a <BigInteger>.
44519
44520 Returns:
44521
44522 The *n* subtracted from *this*.
44523
44524 See Also:
44525
44526 <add>, <multiply>, <quotient>, <prev>
44527*/
44528BigInteger.prototype.subtract = function(n) {
44529 if (this._s === 0) {
44530 return BigInteger(n).negate();
44531 }
44532
44533 n = BigInteger(n);
44534 if (n._s === 0) {
44535 return this;
44536 }
44537 if (this._s !== n._s) {
44538 n = n.negate();
44539 return this.add(n);
44540 }
44541
44542 var m = this;
44543 // negative - negative => -|a| - -|b| => -|a| + |b| => |b| - |a|
44544 if (this._s < 0) {
44545 m = new BigInteger(n._d, 1, CONSTRUCT);
44546 n = new BigInteger(this._d, 1, CONSTRUCT);
44547 }
44548
44549 // Both are positive => a - b
44550 var sign = m.compareAbs(n);
44551 if (sign === 0) {
44552 return ZERO;
44553 }
44554 else if (sign < 0) {
44555 // swap m and n
44556 var t = n;
44557 n = m;
44558 m = t;
44559 }
44560
44561 // a > b
44562 var a = m._d;
44563 var b = n._d;
44564 var al = a.length;
44565 var bl = b.length;
44566 var diff = new Array(al); // al >= bl since a > b
44567 var borrow = 0;
44568 var i;
44569 var digit;
44570
44571 for (i = 0; i < bl; i++) {
44572 digit = a[i] - borrow - b[i];
44573 if (digit < 0) {
44574 digit += BigInteger_base;
44575 borrow = 1;
44576 }
44577 else {
44578 borrow = 0;
44579 }
44580 diff[i] = digit;
44581 }
44582 for (i = bl; i < al; i++) {
44583 digit = a[i] - borrow;
44584 if (digit < 0) {
44585 digit += BigInteger_base;
44586 }
44587 else {
44588 diff[i++] = digit;
44589 break;
44590 }
44591 diff[i] = digit;
44592 }
44593 for ( ; i < al; i++) {
44594 diff[i] = a[i];
44595 }
44596
44597 return new BigInteger(diff, sign, CONSTRUCT);
44598};
44599
44600(function() {
44601 function addOne(n, sign) {
44602 var a = n._d;
44603 var sum = a.slice();
44604 var carry = true;
44605 var i = 0;
44606
44607 while (true) {
44608 var digit = (a[i] || 0) + 1;
44609 sum[i] = digit % BigInteger_base;
44610 if (digit <= BigInteger_base - 1) {
44611 break;
44612 }
44613 ++i;
44614 }
44615
44616 return new BigInteger(sum, sign, CONSTRUCT);
44617 }
44618
44619 function subtractOne(n, sign) {
44620 var a = n._d;
44621 var sum = a.slice();
44622 var borrow = true;
44623 var i = 0;
44624
44625 while (true) {
44626 var digit = (a[i] || 0) - 1;
44627 if (digit < 0) {
44628 sum[i] = digit + BigInteger_base;
44629 }
44630 else {
44631 sum[i] = digit;
44632 break;
44633 }
44634 ++i;
44635 }
44636
44637 return new BigInteger(sum, sign, CONSTRUCT);
44638 }
44639
44640 /*
44641 Function: next
44642 Get the next <BigInteger> (add one).
44643
44644 Returns:
44645
44646 *this* + 1.
44647
44648 See Also:
44649
44650 <add>, <prev>
44651 */
44652 BigInteger.prototype.next = function() {
44653 switch (this._s) {
44654 case 0:
44655 return ONE;
44656 case -1:
44657 return subtractOne(this, -1);
44658 // case 1:
44659 default:
44660 return addOne(this, 1);
44661 }
44662 };
44663
44664 /*
44665 Function: prev
44666 Get the previous <BigInteger> (subtract one).
44667
44668 Returns:
44669
44670 *this* - 1.
44671
44672 See Also:
44673
44674 <next>, <subtract>
44675 */
44676 BigInteger.prototype.prev = function() {
44677 switch (this._s) {
44678 case 0:
44679 return M_ONE;
44680 case -1:
44681 return addOne(this, -1);
44682 // case 1:
44683 default:
44684 return subtractOne(this, 1);
44685 }
44686 };
44687})();
44688
44689/*
44690 Function: compareAbs
44691 Compare the absolute value of two <BigIntegers>.
44692
44693 Calling <compareAbs> is faster than calling <abs> twice, then <compare>.
44694
44695 Parameters:
44696
44697 n - The number to compare to *this*. Will be converted to a <BigInteger>.
44698
44699 Returns:
44700
44701 -1, 0, or +1 if *|this|* is less than, equal to, or greater than *|n|*.
44702
44703 See Also:
44704
44705 <compare>, <abs>
44706*/
44707BigInteger.prototype.compareAbs = function(n) {
44708 if (this === n) {
44709 return 0;
44710 }
44711
44712 if (!(n instanceof BigInteger)) {
44713 if (!isFinite(n)) {
44714 return(isNaN(n) ? n : -1);
44715 }
44716 n = BigInteger(n);
44717 }
44718
44719 if (this._s === 0) {
44720 return (n._s !== 0) ? -1 : 0;
44721 }
44722 if (n._s === 0) {
44723 return 1;
44724 }
44725
44726 var l = this._d.length;
44727 var nl = n._d.length;
44728 if (l < nl) {
44729 return -1;
44730 }
44731 else if (l > nl) {
44732 return 1;
44733 }
44734
44735 var a = this._d;
44736 var b = n._d;
44737 for (var i = l-1; i >= 0; i--) {
44738 if (a[i] !== b[i]) {
44739 return a[i] < b[i] ? -1 : 1;
44740 }
44741 }
44742
44743 return 0;
44744};
44745
44746/*
44747 Function: compare
44748 Compare two <BigIntegers>.
44749
44750 Parameters:
44751
44752 n - The number to compare to *this*. Will be converted to a <BigInteger>.
44753
44754 Returns:
44755
44756 -1, 0, or +1 if *this* is less than, equal to, or greater than *n*.
44757
44758 See Also:
44759
44760 <compareAbs>, <isPositive>, <isNegative>, <isUnit>
44761*/
44762BigInteger.prototype.compare = function(n) {
44763 if (this === n) {
44764 return 0;
44765 }
44766
44767 n = BigInteger(n);
44768
44769 if (this._s === 0) {
44770 return -n._s;
44771 }
44772
44773 if (this._s === n._s) { // both positive or both negative
44774 var cmp = this.compareAbs(n);
44775 return cmp * this._s;
44776 }
44777 else {
44778 return this._s;
44779 }
44780};
44781
44782/*
44783 Function: isUnit
44784 Return true iff *this* is either 1 or -1.
44785
44786 Returns:
44787
44788 true if *this* compares equal to <BigInteger.ONE> or <BigInteger.M_ONE>.
44789
44790 See Also:
44791
44792 <isZero>, <isNegative>, <isPositive>, <compareAbs>, <compare>,
44793 <BigInteger.ONE>, <BigInteger.M_ONE>
44794*/
44795BigInteger.prototype.isUnit = function() {
44796 return this === ONE ||
44797 this === M_ONE ||
44798 (this._d.length === 1 && this._d[0] === 1);
44799};
44800
44801/*
44802 Function: multiply
44803 Multiply two <BigIntegers>.
44804
44805 Parameters:
44806
44807 n - The number to multiply *this* by. Will be converted to a
44808 <BigInteger>.
44809
44810 Returns:
44811
44812 The numbers multiplied together.
44813
44814 See Also:
44815
44816 <add>, <subtract>, <quotient>, <square>
44817*/
44818BigInteger.prototype.multiply = function(n) {
44819 // TODO: Consider adding Karatsuba multiplication for large numbers
44820 if (this._s === 0) {
44821 return ZERO;
44822 }
44823
44824 n = BigInteger(n);
44825 if (n._s === 0) {
44826 return ZERO;
44827 }
44828 if (this.isUnit()) {
44829 if (this._s < 0) {
44830 return n.negate();
44831 }
44832 return n;
44833 }
44834 if (n.isUnit()) {
44835 if (n._s < 0) {
44836 return this.negate();
44837 }
44838 return this;
44839 }
44840 if (this === n) {
44841 return this.square();
44842 }
44843
44844 var r = (this._d.length >= n._d.length);
44845 var a = (r ? this : n)._d; // a will be longer than b
44846 var b = (r ? n : this)._d;
44847 var al = a.length;
44848 var bl = b.length;
44849
44850 var pl = al + bl;
44851 var partial = new Array(pl);
44852 var i;
44853 for (i = 0; i < pl; i++) {
44854 partial[i] = 0;
44855 }
44856
44857 for (i = 0; i < bl; i++) {
44858 var carry = 0;
44859 var bi = b[i];
44860 var jlimit = al + i;
44861 var digit;
44862 for (var j = i; j < jlimit; j++) {
44863 digit = partial[j] + bi * a[j - i] + carry;
44864 carry = (digit / BigInteger_base) | 0;
44865 partial[j] = (digit % BigInteger_base) | 0;
44866 }
44867 if (carry) {
44868 digit = partial[j] + carry;
44869 carry = (digit / BigInteger_base) | 0;
44870 partial[j] = digit % BigInteger_base;
44871 }
44872 }
44873 return new BigInteger(partial, this._s * n._s, CONSTRUCT);
44874};
44875
44876// Multiply a BigInteger by a single-digit native number
44877// Assumes that this and n are >= 0
44878// This is not really intended to be used outside the library itself
44879BigInteger.prototype.multiplySingleDigit = function(n) {
44880 if (n === 0 || this._s === 0) {
44881 return ZERO;
44882 }
44883 if (n === 1) {
44884 return this;
44885 }
44886
44887 var digit;
44888 if (this._d.length === 1) {
44889 digit = this._d[0] * n;
44890 if (digit >= BigInteger_base) {
44891 return new BigInteger([(digit % BigInteger_base)|0,
44892 (digit / BigInteger_base)|0], 1, CONSTRUCT);
44893 }
44894 return new BigInteger([digit], 1, CONSTRUCT);
44895 }
44896
44897 if (n === 2) {
44898 return this.add(this);
44899 }
44900 if (this.isUnit()) {
44901 return new BigInteger([n], 1, CONSTRUCT);
44902 }
44903
44904 var a = this._d;
44905 var al = a.length;
44906
44907 var pl = al + 1;
44908 var partial = new Array(pl);
44909 for (var i = 0; i < pl; i++) {
44910 partial[i] = 0;
44911 }
44912
44913 var carry = 0;
44914 for (var j = 0; j < al; j++) {
44915 digit = n * a[j] + carry;
44916 carry = (digit / BigInteger_base) | 0;
44917 partial[j] = (digit % BigInteger_base) | 0;
44918 }
44919 if (carry) {
44920 partial[j] = carry;
44921 }
44922
44923 return new BigInteger(partial, 1, CONSTRUCT);
44924};
44925
44926/*
44927 Function: square
44928 Multiply a <BigInteger> by itself.
44929
44930 This is slightly faster than regular multiplication, since it removes the
44931 duplicated multiplcations.
44932
44933 Returns:
44934
44935 > this.multiply(this)
44936
44937 See Also:
44938 <multiply>
44939*/
44940BigInteger.prototype.square = function() {
44941 // Normally, squaring a 10-digit number would take 100 multiplications.
44942 // Of these 10 are unique diagonals, of the remaining 90 (100-10), 45 are repeated.
44943 // This procedure saves (N*(N-1))/2 multiplications, (e.g., 45 of 100 multiplies).
44944 // Based on code by Gary Darby, Intellitech Systems Inc., www.DelphiForFun.org
44945
44946 if (this._s === 0) {
44947 return ZERO;
44948 }
44949 if (this.isUnit()) {
44950 return ONE;
44951 }
44952
44953 var digits = this._d;
44954 var length = digits.length;
44955 var imult1 = new Array(length + length + 1);
44956 var product, carry, k;
44957 var i;
44958
44959 // Calculate diagonal
44960 for (i = 0; i < length; i++) {
44961 k = i * 2;
44962 product = digits[i] * digits[i];
44963 carry = (product / BigInteger_base) | 0;
44964 imult1[k] = product % BigInteger_base;
44965 imult1[k + 1] = carry;
44966 }
44967
44968 // Calculate repeating part
44969 for (i = 0; i < length; i++) {
44970 carry = 0;
44971 k = i * 2 + 1;
44972 for (var j = i + 1; j < length; j++, k++) {
44973 product = digits[j] * digits[i] * 2 + imult1[k] + carry;
44974 carry = (product / BigInteger_base) | 0;
44975 imult1[k] = product % BigInteger_base;
44976 }
44977 k = length + i;
44978 var digit = carry + imult1[k];
44979 carry = (digit / BigInteger_base) | 0;
44980 imult1[k] = digit % BigInteger_base;
44981 imult1[k + 1] += carry;
44982 }
44983
44984 return new BigInteger(imult1, 1, CONSTRUCT);
44985};
44986
44987/*
44988 Function: quotient
44989 Divide two <BigIntegers> and truncate towards zero.
44990
44991 <quotient> throws an exception if *n* is zero.
44992
44993 Parameters:
44994
44995 n - The number to divide *this* by. Will be converted to a <BigInteger>.
44996
44997 Returns:
44998
44999 The *this* / *n*, truncated to an integer.
45000
45001 See Also:
45002
45003 <add>, <subtract>, <multiply>, <divRem>, <remainder>
45004*/
45005BigInteger.prototype.quotient = function(n) {
45006 return this.divRem(n)[0];
45007};
45008
45009/*
45010 Function: divide
45011 Deprecated synonym for <quotient>.
45012*/
45013BigInteger.prototype.divide = BigInteger.prototype.quotient;
45014
45015/*
45016 Function: remainder
45017 Calculate the remainder of two <BigIntegers>.
45018
45019 <remainder> throws an exception if *n* is zero.
45020
45021 Parameters:
45022
45023 n - The remainder after *this* is divided *this* by *n*. Will be
45024 converted to a <BigInteger>.
45025
45026 Returns:
45027
45028 *this* % *n*.
45029
45030 See Also:
45031
45032 <divRem>, <quotient>
45033*/
45034BigInteger.prototype.remainder = function(n) {
45035 return this.divRem(n)[1];
45036};
45037
45038/*
45039 Function: divRem
45040 Calculate the integer quotient and remainder of two <BigIntegers>.
45041
45042 <divRem> throws an exception if *n* is zero.
45043
45044 Parameters:
45045
45046 n - The number to divide *this* by. Will be converted to a <BigInteger>.
45047
45048 Returns:
45049
45050 A two-element array containing the quotient and the remainder.
45051
45052 > a.divRem(b)
45053
45054 is exactly equivalent to
45055
45056 > [a.quotient(b), a.remainder(b)]
45057
45058 except it is faster, because they are calculated at the same time.
45059
45060 See Also:
45061
45062 <quotient>, <remainder>
45063*/
45064BigInteger.prototype.divRem = function(n) {
45065 n = BigInteger(n);
45066 if (n._s === 0) {
45067 throw new Error("Divide by zero");
45068 }
45069 if (this._s === 0) {
45070 return [ZERO, ZERO];
45071 }
45072 if (n._d.length === 1) {
45073 return this.divRemSmall(n._s * n._d[0]);
45074 }
45075
45076 // Test for easy cases -- |n1| <= |n2|
45077 switch (this.compareAbs(n)) {
45078 case 0: // n1 == n2
45079 return [this._s === n._s ? ONE : M_ONE, ZERO];
45080 case -1: // |n1| < |n2|
45081 return [ZERO, this];
45082 }
45083
45084 var sign = this._s * n._s;
45085 var a = n.abs();
45086 var b_digits = this._d;
45087 var b_index = b_digits.length;
45088 var digits = n._d.length;
45089 var quot = [];
45090 var guess;
45091
45092 var part = new BigInteger([], 0, CONSTRUCT);
45093
45094 while (b_index) {
45095 part._d.unshift(b_digits[--b_index]);
45096 part = new BigInteger(part._d, 1, CONSTRUCT);
45097
45098 if (part.compareAbs(n) < 0) {
45099 quot.push(0);
45100 continue;
45101 }
45102 if (part._s === 0) {
45103 guess = 0;
45104 }
45105 else {
45106 var xlen = part._d.length, ylen = a._d.length;
45107 var highx = part._d[xlen-1]*BigInteger_base + part._d[xlen-2];
45108 var highy = a._d[ylen-1]*BigInteger_base + a._d[ylen-2];
45109 if (part._d.length > a._d.length) {
45110 // The length of part._d can either match a._d length,
45111 // or exceed it by one.
45112 highx = (highx+1)*BigInteger_base;
45113 }
45114 guess = Math.ceil(highx/highy);
45115 }
45116 do {
45117 var check = a.multiplySingleDigit(guess);
45118 if (check.compareAbs(part) <= 0) {
45119 break;
45120 }
45121 guess--;
45122 } while (guess);
45123
45124 quot.push(guess);
45125 if (!guess) {
45126 continue;
45127 }
45128 var diff = part.subtract(check);
45129 part._d = diff._d.slice();
45130 }
45131
45132 return [new BigInteger(quot.reverse(), sign, CONSTRUCT),
45133 new BigInteger(part._d, this._s, CONSTRUCT)];
45134};
45135
45136// Throws an exception if n is outside of (-BigInteger.base, -1] or
45137// [1, BigInteger.base). It's not necessary to call this, since the
45138// other division functions will call it if they are able to.
45139BigInteger.prototype.divRemSmall = function(n) {
45140 var r;
45141 n = +n;
45142 if (n === 0) {
45143 throw new Error("Divide by zero");
45144 }
45145
45146 var n_s = n < 0 ? -1 : 1;
45147 var sign = this._s * n_s;
45148 n = Math.abs(n);
45149
45150 if (n < 1 || n >= BigInteger_base) {
45151 throw new Error("Argument out of range");
45152 }
45153
45154 if (this._s === 0) {
45155 return [ZERO, ZERO];
45156 }
45157
45158 if (n === 1 || n === -1) {
45159 return [(sign === 1) ? this.abs() : new BigInteger(this._d, sign, CONSTRUCT), ZERO];
45160 }
45161
45162 // 2 <= n < BigInteger_base
45163
45164 // divide a single digit by a single digit
45165 if (this._d.length === 1) {
45166 var q = new BigInteger([(this._d[0] / n) | 0], 1, CONSTRUCT);
45167 r = new BigInteger([(this._d[0] % n) | 0], 1, CONSTRUCT);
45168 if (sign < 0) {
45169 q = q.negate();
45170 }
45171 if (this._s < 0) {
45172 r = r.negate();
45173 }
45174 return [q, r];
45175 }
45176
45177 var digits = this._d.slice();
45178 var quot = new Array(digits.length);
45179 var part = 0;
45180 var diff = 0;
45181 var i = 0;
45182 var guess;
45183
45184 while (digits.length) {
45185 part = part * BigInteger_base + digits[digits.length - 1];
45186 if (part < n) {
45187 quot[i++] = 0;
45188 digits.pop();
45189 diff = BigInteger_base * diff + part;
45190 continue;
45191 }
45192 if (part === 0) {
45193 guess = 0;
45194 }
45195 else {
45196 guess = (part / n) | 0;
45197 }
45198
45199 var check = n * guess;
45200 diff = part - check;
45201 quot[i++] = guess;
45202 if (!guess) {
45203 digits.pop();
45204 continue;
45205 }
45206
45207 digits.pop();
45208 part = diff;
45209 }
45210
45211 r = new BigInteger([diff], 1, CONSTRUCT);
45212 if (this._s < 0) {
45213 r = r.negate();
45214 }
45215 return [new BigInteger(quot.reverse(), sign, CONSTRUCT), r];
45216};
45217
45218/*
45219 Function: isEven
45220 Return true iff *this* is divisible by two.
45221
45222 Note that <BigInteger.ZERO> is even.
45223
45224 Returns:
45225
45226 true if *this* is even, false otherwise.
45227
45228 See Also:
45229
45230 <isOdd>
45231*/
45232BigInteger.prototype.isEven = function() {
45233 var digits = this._d;
45234 return this._s === 0 || digits.length === 0 || (digits[0] % 2) === 0;
45235};
45236
45237/*
45238 Function: isOdd
45239 Return true iff *this* is not divisible by two.
45240
45241 Returns:
45242
45243 true if *this* is odd, false otherwise.
45244
45245 See Also:
45246
45247 <isEven>
45248*/
45249BigInteger.prototype.isOdd = function() {
45250 return !this.isEven();
45251};
45252
45253/*
45254 Function: sign
45255 Get the sign of a <BigInteger>.
45256
45257 Returns:
45258
45259 * -1 if *this* < 0
45260 * 0 if *this* == 0
45261 * +1 if *this* > 0
45262
45263 See Also:
45264
45265 <isZero>, <isPositive>, <isNegative>, <compare>, <BigInteger.ZERO>
45266*/
45267BigInteger.prototype.sign = function() {
45268 return this._s;
45269};
45270
45271/*
45272 Function: isPositive
45273 Return true iff *this* > 0.
45274
45275 Returns:
45276
45277 true if *this*.compare(<BigInteger.ZERO>) == 1.
45278
45279 See Also:
45280
45281 <sign>, <isZero>, <isNegative>, <isUnit>, <compare>, <BigInteger.ZERO>
45282*/
45283BigInteger.prototype.isPositive = function() {
45284 return this._s > 0;
45285};
45286
45287/*
45288 Function: isNegative
45289 Return true iff *this* < 0.
45290
45291 Returns:
45292
45293 true if *this*.compare(<BigInteger.ZERO>) == -1.
45294
45295 See Also:
45296
45297 <sign>, <isPositive>, <isZero>, <isUnit>, <compare>, <BigInteger.ZERO>
45298*/
45299BigInteger.prototype.isNegative = function() {
45300 return this._s < 0;
45301};
45302
45303/*
45304 Function: isZero
45305 Return true iff *this* == 0.
45306
45307 Returns:
45308
45309 true if *this*.compare(<BigInteger.ZERO>) == 0.
45310
45311 See Also:
45312
45313 <sign>, <isPositive>, <isNegative>, <isUnit>, <BigInteger.ZERO>
45314*/
45315BigInteger.prototype.isZero = function() {
45316 return this._s === 0;
45317};
45318
45319/*
45320 Function: exp10
45321 Multiply a <BigInteger> by a power of 10.
45322
45323 This is equivalent to, but faster than
45324
45325 > if (n >= 0) {
45326 > return this.multiply(BigInteger("1e" + n));
45327 > }
45328 > else { // n <= 0
45329 > return this.quotient(BigInteger("1e" + -n));
45330 > }
45331
45332 Parameters:
45333
45334 n - The power of 10 to multiply *this* by. *n* is converted to a
45335 javascipt number and must be no greater than <BigInteger.MAX_EXP>
45336 (0x7FFFFFFF), or an exception will be thrown.
45337
45338 Returns:
45339
45340 *this* * (10 ** *n*), truncated to an integer if necessary.
45341
45342 See Also:
45343
45344 <pow>, <multiply>
45345*/
45346BigInteger.prototype.exp10 = function(n) {
45347 n = +n;
45348 if (n === 0) {
45349 return this;
45350 }
45351 if (Math.abs(n) > Number(MAX_EXP)) {
45352 throw new Error("exponent too large in BigInteger.exp10");
45353 }
45354 // Optimization for this == 0. This also keeps us from having to trim zeros in the positive n case
45355 if (this._s === 0) {
45356 return ZERO;
45357 }
45358 if (n > 0) {
45359 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
45360
45361 for (; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
45362 k._d.unshift(0);
45363 }
45364 if (n == 0)
45365 return k;
45366 k._s = 1;
45367 k = k.multiplySingleDigit(Math.pow(10, n));
45368 return (this._s < 0 ? k.negate() : k);
45369 } else if (-n >= this._d.length*BigInteger_base_log10) {
45370 return ZERO;
45371 } else {
45372 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
45373
45374 for (n = -n; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
45375 k._d.shift();
45376 }
45377 return (n == 0) ? k : k.divRemSmall(Math.pow(10, n))[0];
45378 }
45379};
45380
45381/*
45382 Function: pow
45383 Raise a <BigInteger> to a power.
45384
45385 In this implementation, 0**0 is 1.
45386
45387 Parameters:
45388
45389 n - The exponent to raise *this* by. *n* must be no greater than
45390 <BigInteger.MAX_EXP> (0x7FFFFFFF), or an exception will be thrown.
45391
45392 Returns:
45393
45394 *this* raised to the *nth* power.
45395
45396 See Also:
45397
45398 <modPow>
45399*/
45400BigInteger.prototype.pow = function(n) {
45401 if (this.isUnit()) {
45402 if (this._s > 0) {
45403 return this;
45404 }
45405 else {
45406 return BigInteger(n).isOdd() ? this : this.negate();
45407 }
45408 }
45409
45410 n = BigInteger(n);
45411 if (n._s === 0) {
45412 return ONE;
45413 }
45414 else if (n._s < 0) {
45415 if (this._s === 0) {
45416 throw new Error("Divide by zero");
45417 }
45418 else {
45419 return ZERO;
45420 }
45421 }
45422 if (this._s === 0) {
45423 return ZERO;
45424 }
45425 if (n.isUnit()) {
45426 return this;
45427 }
45428
45429 if (n.compareAbs(MAX_EXP) > 0) {
45430 throw new Error("exponent too large in BigInteger.pow");
45431 }
45432 var x = this;
45433 var aux = ONE;
45434 var two = BigInteger.small[2];
45435
45436 while (n.isPositive()) {
45437 if (n.isOdd()) {
45438 aux = aux.multiply(x);
45439 if (n.isUnit()) {
45440 return aux;
45441 }
45442 }
45443 x = x.square();
45444 n = n.quotient(two);
45445 }
45446
45447 return aux;
45448};
45449
45450/*
45451 Function: modPow
45452 Raise a <BigInteger> to a power (mod m).
45453
45454 Because it is reduced by a modulus, <modPow> is not limited by
45455 <BigInteger.MAX_EXP> like <pow>.
45456
45457 Parameters:
45458
45459 exponent - The exponent to raise *this* by. Must be positive.
45460 modulus - The modulus.
45461
45462 Returns:
45463
45464 *this* ^ *exponent* (mod *modulus*).
45465
45466 See Also:
45467
45468 <pow>, <mod>
45469*/
45470BigInteger.prototype.modPow = function(exponent, modulus) {
45471 var result = ONE;
45472 var base = this;
45473
45474 while (exponent.isPositive()) {
45475 if (exponent.isOdd()) {
45476 result = result.multiply(base).remainder(modulus);
45477 }
45478
45479 exponent = exponent.quotient(BigInteger.small[2]);
45480 if (exponent.isPositive()) {
45481 base = base.square().remainder(modulus);
45482 }
45483 }
45484
45485 return result;
45486};
45487
45488/*
45489 Function: log
45490 Get the natural logarithm of a <BigInteger> as a native JavaScript number.
45491
45492 This is equivalent to
45493
45494 > Math.log(this.toJSValue())
45495
45496 but handles values outside of the native number range.
45497
45498 Returns:
45499
45500 log( *this* )
45501
45502 See Also:
45503
45504 <toJSValue>
45505*/
45506BigInteger.prototype.log = function() {
45507 switch (this._s) {
45508 case 0: return -Infinity;
45509 case -1: return NaN;
45510 default: // Fall through.
45511 }
45512
45513 var l = this._d.length;
45514
45515 if (l*BigInteger_base_log10 < 30) {
45516 return Math.log(this.valueOf());
45517 }
45518
45519 var N = Math.ceil(30/BigInteger_base_log10);
45520 var firstNdigits = this._d.slice(l - N);
45521 return Math.log((new BigInteger(firstNdigits, 1, CONSTRUCT)).valueOf()) + (l - N) * Math.log(BigInteger_base);
45522};
45523
45524/*
45525 Function: valueOf
45526 Convert a <BigInteger> to a native JavaScript integer.
45527
45528 This is called automatically by JavaScipt to convert a <BigInteger> to a
45529 native value.
45530
45531 Returns:
45532
45533 > parseInt(this.toString(), 10)
45534
45535 See Also:
45536
45537 <toString>, <toJSValue>
45538*/
45539BigInteger.prototype.valueOf = function() {
45540 return parseInt(this.toString(), 10);
45541};
45542
45543/*
45544 Function: toJSValue
45545 Convert a <BigInteger> to a native JavaScript integer.
45546
45547 This is the same as valueOf, but more explicitly named.
45548
45549 Returns:
45550
45551 > parseInt(this.toString(), 10)
45552
45553 See Also:
45554
45555 <toString>, <valueOf>
45556*/
45557BigInteger.prototype.toJSValue = function() {
45558 return parseInt(this.toString(), 10);
45559};
45560
45561var MAX_EXP = BigInteger(0x7FFFFFFF);
45562// Constant: MAX_EXP
45563// The largest exponent allowed in <pow> and <exp10> (0x7FFFFFFF or 2147483647).
45564BigInteger.MAX_EXP = MAX_EXP;
45565
45566(function() {
45567 function makeUnary(fn) {
45568 return function(a) {
45569 return fn.call(BigInteger(a));
45570 };
45571 }
45572
45573 function makeBinary(fn) {
45574 return function(a, b) {
45575 return fn.call(BigInteger(a), BigInteger(b));
45576 };
45577 }
45578
45579 function makeTrinary(fn) {
45580 return function(a, b, c) {
45581 return fn.call(BigInteger(a), BigInteger(b), BigInteger(c));
45582 };
45583 }
45584
45585 (function() {
45586 var i, fn;
45587 var unary = "toJSValue,isEven,isOdd,sign,isZero,isNegative,abs,isUnit,square,negate,isPositive,toString,next,prev,log".split(",");
45588 var binary = "compare,remainder,divRem,subtract,add,quotient,divide,multiply,pow,compareAbs".split(",");
45589 var trinary = ["modPow"];
45590
45591 for (i = 0; i < unary.length; i++) {
45592 fn = unary[i];
45593 BigInteger[fn] = makeUnary(BigInteger.prototype[fn]);
45594 }
45595
45596 for (i = 0; i < binary.length; i++) {
45597 fn = binary[i];
45598 BigInteger[fn] = makeBinary(BigInteger.prototype[fn]);
45599 }
45600
45601 for (i = 0; i < trinary.length; i++) {
45602 fn = trinary[i];
45603 BigInteger[fn] = makeTrinary(BigInteger.prototype[fn]);
45604 }
45605
45606 BigInteger.exp10 = function(x, n) {
45607 return BigInteger(x).exp10(n);
45608 };
45609 })();
45610})();
45611
45612exports.BigInteger = BigInteger;
45613})(typeof exports !== 'undefined' ? exports : this);
95f04905
IC
45614</script>
45615 <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){
45616var 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;
45617
45618},{}],2:[function(require,module,exports){
45619var 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;
45620
45621},{"./scoring":6}],3:[function(require,module,exports){
45622var 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(","),
45623english_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(","),
45624female_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(","),
45625us_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(","),
45626male_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;
45627
45628},{}],4:[function(require,module,exports){
45629var 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;
45630
45631},{"./feedback":2,"./matching":5,"./scoring":6,"./time_estimates":7}],5:[function(require,module,exports){
45632var 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;
45633
45634},{"./adjacency_graphs":1,"./frequency_lists":3,"./scoring":6}],6:[function(require,module,exports){
45635var 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;
45636
45637},{"./adjacency_graphs":1}],7:[function(require,module,exports){
45638var 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;
45639
45640},{}]},{},[4])(4)
45641});
861750ae 45642
95f04905
IC
45643</script>
45644 <script>/*
45645 * Detects entropy from a string.
45646 *
45647 * Formats include:
45648 * binary [0-1]
45649 * base 6 [0-5]
45650 * dice 6 [1-6]
45651 * decimal [0-9]
45652 * hexadecimal [0-9A-F]
9e97eb76 45653 * card [A2-9TJQK][CDHS]
95f04905
IC
45654 *
45655 * Automatically uses lowest entropy to avoid issues such as interpretting 0101
45656 * as hexadecimal which would be 16 bits when really it's only 4 bits of binary
45657 * entropy.
45658 */
45659
45660window.Entropy = new (function() {
45661
78b8d604
IC
45662 var TWO = new BigInteger(2);
45663
95f04905
IC
45664 // matchers returns an array of the matched events for each type of entropy.
45665 // eg
45666 // matchers.binary("010") returns ["0", "1", "0"]
45667 // matchers.binary("a10") returns ["1", "0"]
45668 // matchers.hex("a10") returns ["a", "1", "0"]
45669 var matchers = {
45670 binary: function(str) {
45671 return str.match(/[0-1]/gi) || [];
45672 },
45673 base6: function(str) {
45674 return str.match(/[0-5]/gi) || [];
45675 },
45676 dice: function(str) {
45677 return str.match(/[1-6]/gi) || []; // ie dice numbers
45678 },
45679 base10: function(str) {
45680 return str.match(/[0-9]/gi) || [];
45681 },
45682 hex: function(str) {
45683 return str.match(/[0-9A-F]/gi) || [];
45684 },
45685 card: function(str) {
45686 // Format is NumberSuit, eg
45687 // AH ace of hearts
45688 // 8C eight of clubs
45689 // TD ten of diamonds
45690 // JS jack of spades
45691 // QH queen of hearts
45692 // KC king of clubs
45693 return str.match(/([A2-9TJQK][CDHS])/gi) || [];
45694 }
45695 }
45696
45697 // Convert array of cards from ["ac", "4d", "ks"]
45698 // to numbers between 0 and 51 [0, 16, 51]
45699 function convertCardsToInts(cards) {
45700 var ints = [];
45701 var values = "a23456789tjqk";
45702 var suits = "cdhs";
45703 for (var i=0; i<cards.length; i++) {
45704 var card = cards[i].toLowerCase();
45705 var value = card[0];
45706 var suit = card[1];
45707 var asInt = 13 * suits.indexOf(suit) + values.indexOf(value);
45708 ints.push(asInt);
45709 }
45710 return ints;
45711 }
45712
45713 this.fromString = function(rawEntropyStr) {
45714 // Find type of entropy being used (binary, hex, dice etc)
45715 var base = getBase(rawEntropyStr);
45716 // Convert dice to base6 entropy (ie 1-6 to 0-5)
45717 // This is done by changing all 6s to 0s
45718 if (base.str == "dice") {
45719 var newParts = [];
45720 var newInts = [];
45721 for (var i=0; i<base.parts.length; i++) {
45722 var c = base.parts[i];
45723 if ("12345".indexOf(c) > -1) {
45724 newParts[i] = base.parts[i];
45725 newInts[i] = base.ints[i];
45726 }
45727 else {
45728 newParts[i] = "0";
45729 newInts[i] = 0;
45730 }
45731 }
45732 base.str = "base 6 (dice)";
45733 base.ints = newInts;
45734 base.parts = newParts;
45735 base.matcher = matchers.base6;
45736 }
45737 // Detect empty entropy
45738 if (base.parts.length == 0) {
45739 return {
45740 binaryStr: "",
45741 cleanStr: "",
45742 cleanHtml: "",
45743 base: base,
45744 };
45745 }
45746 // Convert base.ints to BigInteger.
45747 // Due to using unusual bases, eg cards of base52, this is not as simple as
45748 // using BigInteger.parse()
45749 var entropyInt = BigInteger.ZERO;
45750 for (var i=base.ints.length-1; i>=0; i--) {
45751 var thisInt = BigInteger.parse(base.ints[i]);
45752 var power = (base.ints.length - 1) - i;
45753 var additionalEntropy = BigInteger.parse(base.asInt).pow(power).multiply(thisInt);
45754 entropyInt = entropyInt.add(additionalEntropy);
45755 }
45756 // Convert entropy to binary
45757 var entropyBin = entropyInt.toString(2);
45758 // If the first integer is small, it must be padded with zeros.
45759 // Otherwise the chance of the first bit being 1 is 100%, which is
45760 // obviously incorrect.
45761 // This is not perfect for non-2^n bases.
45762 var expectedBits = Math.floor(base.parts.length * Math.log2(base.asInt));
45763 while (entropyBin.length < expectedBits) {
45764 entropyBin = "0" + entropyBin;
45765 }
94959756
IC
45766 // Calculate the number of bits per event
45767 var bitsPerEvent = Math.log2(base.asInt);
ea87f1d3 45768 // Cards binary must be handled differently, since they're not replaced
9e97eb76 45769 if (base.asInt == 52) {
94959756
IC
45770 var cardEntropy = processCardEntropy(base.parts);
45771 entropyBin = cardEntropy.binaryStr;
45772 bitsPerEvent = cardEntropy.bitsPerEvent;
9e97eb76 45773 }
95f04905
IC
45774 // Supply a 'filtered' entropy string for display purposes
45775 var entropyClean = base.parts.join("");
45776 var entropyHtml = base.parts.join("");
45777 if (base.asInt == 52) {
45778 entropyClean = base.parts.join(" ").toUpperCase();
45779 entropyClean = entropyClean.replace(/C/g, "\u2663");
45780 entropyClean = entropyClean.replace(/D/g, "\u2666");
45781 entropyClean = entropyClean.replace(/H/g, "\u2665");
45782 entropyClean = entropyClean.replace(/S/g, "\u2660");
45783 entropyHtml = base.parts.join(" ").toUpperCase();
45784 entropyHtml = entropyHtml.replace(/C/g, "<span class='card-suit club'>\u2663</span>");
45785 entropyHtml = entropyHtml.replace(/D/g, "<span class='card-suit diamond'>\u2666</span>");
45786 entropyHtml = entropyHtml.replace(/H/g, "<span class='card-suit heart'>\u2665</span>");
45787 entropyHtml = entropyHtml.replace(/S/g, "<span class='card-suit spade'>\u2660</span>");
45788 }
9e97eb76 45789 // Return the result
95f04905
IC
45790 var e = {
45791 binaryStr: entropyBin,
45792 cleanStr: entropyClean,
45793 cleanHtml: entropyHtml,
94959756 45794 bitsPerEvent: bitsPerEvent,
95f04905
IC
45795 base: base,
45796 }
45797 return e;
45798 }
45799
78b8d604
IC
45800 function getSortedDeck() {
45801 var s = [];
45802 var suits = "CDHS";
45803 var values = "A23456789TJQK";
45804 for (var i=0; i<suits.length; i++) {
45805 for (var j=0; j<values.length; j++) {
45806 s.push(values[j]+suits[i]);
45807 }
45808 }
45809 return s;
45810 }
45811
95f04905
IC
45812 function getBase(str) {
45813 // Need to get the lowest base for the supplied entropy.
45814 // This prevents interpreting, say, dice rolls as hexadecimal.
45815 var binaryMatches = matchers.binary(str);
45816 var hexMatches = matchers.hex(str);
45817 // Find the lowest base that can be used, whilst ignoring any irrelevant chars
45818 if (binaryMatches.length == hexMatches.length && hexMatches.length > 0) {
45819 var ints = binaryMatches.map(function(i) { return parseInt(i, 2) });
45820 return {
45821 ints: ints,
45822 parts: binaryMatches,
45823 matcher: matchers.binary,
45824 asInt: 2,
45825 str: "binary",
45826 }
45827 }
45828 var cardMatches = matchers.card(str);
45829 if (cardMatches.length >= hexMatches.length / 2) {
45830 var ints = convertCardsToInts(cardMatches);
45831 return {
45832 ints: ints,
45833 parts: cardMatches,
45834 matcher: matchers.card,
45835 asInt: 52,
45836 str: "card",
45837 }
45838 }
45839 var diceMatches = matchers.dice(str);
45840 if (diceMatches.length == hexMatches.length && hexMatches.length > 0) {
45841 var ints = diceMatches.map(function(i) { return parseInt(i) });
45842 return {
45843 ints: ints,
45844 parts: diceMatches,
45845 matcher: matchers.dice,
45846 asInt: 6,
45847 str: "dice",
45848 }
45849 }
45850 var base6Matches = matchers.base6(str);
45851 if (base6Matches.length == hexMatches.length && hexMatches.length > 0) {
45852 var ints = base6Matches.map(function(i) { return parseInt(i) });
45853 return {
45854 ints: ints,
45855 parts: base6Matches,
45856 matcher: matchers.base6,
45857 asInt: 6,
45858 str: "base 6",
45859 }
45860 }
45861 var base10Matches = matchers.base10(str);
45862 if (base10Matches.length == hexMatches.length && hexMatches.length > 0) {
45863 var ints = base10Matches.map(function(i) { return parseInt(i) });
45864 return {
45865 ints: ints,
45866 parts: base10Matches,
45867 matcher: matchers.base10,
45868 asInt: 10,
45869 str: "base 10",
45870 }
45871 }
45872 var ints = hexMatches.map(function(i) { return parseInt(i, 16) });
45873 return {
45874 ints: ints,
45875 parts: hexMatches,
45876 matcher: matchers.hex,
45877 asInt: 16,
45878 str: "hexadecimal",
45879 }
45880 }
45881
ea87f1d3
IC
45882 // Assume cards are NOT replaced.
45883 // Additional entropy decreases as more cards are used. This means
45884 // total possible entropy is measured using n!, not base^n.
45885 // eg the second last card can be only one of two, not one of fifty two
45886 // so the added entropy for that card is only one bit at most
94959756 45887 function processCardEntropy(cards) {
ea87f1d3
IC
45888 // Track how many instances of each card have been used, and thus
45889 // how many decks are in use.
45890 var cardCounts = {};
45891 var numberOfDecks = 0;
45892 // Work out number of decks by max(duplicates)
45893 for (var i=0; i<cards.length; i++) {
45894 // Get the card that was drawn
45895 var cardLower = cards[i];
45896 var card = cardLower.toUpperCase();
45897 // Initialize the count for this card if needed
45898 if (!(card in cardCounts)) {
45899 cardCounts[card] = 0;
45900 }
45901 cardCounts[card] += 1;
45902 // See if this is max(duplicates)
45903 if (cardCounts[card] > numberOfDecks) {
45904 numberOfDecks = cardCounts[card];
45905 }
45906 }
45907 // Work out the total number of bits for this many decks
45908 // See http://crypto.stackexchange.com/q/41886
fc7c248f
IC
45909 var gainedBits = 0;
45910 // Equivalent of Math.log2(factorial(52*numberOfDecks))
45911 // which becomes infinity for numberOfDecks > 4
45912 for (var i=1; i<=52*numberOfDecks; i++) {
45913 gainedBits = gainedBits + Math.log2(i);
45914 }
ea87f1d3
IC
45915 var lostBits = 52 * Math.log2(factorial(numberOfDecks));
45916 var maxBits = gainedBits - lostBits;
45917 // Convert the drawn cards to a binary representation.
45918 // The exact technique for doing this is unclear.
45919 // See
45920 // http://crypto.stackexchange.com/a/41896
45921 // "I even doubt that this is well defined (only the average entropy
45922 // is, I believe)."
45923 // See
45924 // https://github.com/iancoleman/bip39/issues/33#issuecomment-263021856
45925 // "The binary representation can be the first log(permutations,2) bits
45926 // of the sha-2 hash of the normalized deck string."
45927 //
45928 // In this specific implementation, the first N bits of the hash of the
45929 // normalized cards string is being used. Uppercase, no spaces; eg
45930 // sha256("AH8DQSTC2H")
45931 var totalCards = numberOfDecks * 52;
45932 var percentUsed = cards.length / totalCards;
45933 // Calculate the average number of bits of entropy for the number of
45934 // cards drawn.
45935 var numberOfBits = Math.floor(maxBits * percentUsed);
45936 // Create a normalized string of the selected cards
45937 var normalizedCards = cards.join("").toUpperCase();
45938 // Convert to binary using the SHA256 hash of the normalized cards.
434caecd 45939 // If the number of bits is more than 256, multiple hashes
ea87f1d3
IC
45940 // are used until the required number of bits is reached.
45941 var entropyBin = "";
45942 var iterations = 0;
45943 while (entropyBin.length < numberOfBits) {
434caecd 45944 var hashedCards = sjcl.hash.sha256.hash(normalizedCards + ":" + iterations);
ea87f1d3
IC
45945 var hashHex = sjcl.codec.hex.fromBits(hashedCards);
45946 for (var i=0; i<hashHex.length; i++) {
45947 var decimal = parseInt(hashHex[i], 16);
45948 var binary = decimal.toString(2);
45949 while (binary.length < 4) {
45950 binary = "0" + binary;
45951 }
45952 entropyBin = entropyBin + binary;
45953 }
45954 iterations = iterations + 1;
45955 }
45956 // Truncate to the appropriate number of bits.
45957 entropyBin = entropyBin.substring(0, numberOfBits);
94959756
IC
45958 // Get the number of bits per event
45959 bitsPerEvent = maxBits / totalCards;
45960 return {
45961 binaryStr: entropyBin,
45962 bitsPerEvent: bitsPerEvent,
45963 }
ea87f1d3
IC
45964 }
45965
95f04905
IC
45966 // Polyfill for Math.log2
45967 // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log2#Polyfill
45968 Math.log2 = Math.log2 || function(x) {
45969 // The polyfill isn't good enough because of the poor accuracy of
45970 // Math.LOG2E
45971 // log2(8) gave 2.9999999999999996 which when floored causes issues.
45972 // So instead use the BigInteger library to get it right.
45973 return BigInteger.log(x) / BigInteger.log(2);
45974 };
45975
9e97eb76
IC
45976 // Depends on BigInteger
45977 function factorial(n) {
45978 if (n == 0) {
45979 return 1;
45980 }
45981 f = BigInteger.ONE;
45982 for (var i=1; i<=n; i++) {
45983 f = f.multiply(new BigInteger(i));
45984 }
45985 return f;
45986 }
45987
95f04905 45988})();
c6624d51
IC
45989</script>
45990 <script>(function() {
45991
45992 // mnemonics is populated as required by getLanguage
45993 var mnemonics = { "english": new Mnemonic("english") };
45994 var mnemonic = mnemonics["english"];
3725abb5 45995 var seed = null;
c6624d51
IC
45996 var bip32RootKey = null;
45997 var bip32ExtendedKey = null;
9987f0c1 45998 var network = bitcoinjs.bitcoin.networks.bitcoin;
c6624d51
IC
45999 var addressRowTemplate = $("#address-row-template");
46000
46001 var showIndex = true;
46002 var showAddress = true;
46003 var showPubKey = true;
46004 var showPrivKey = true;
52da415f 46005 var showQr = false;
8d18f379 46006 var litecoinUseLtub = false;
c6624d51
IC
46007
46008 var entropyChangeTimeoutEvent = null;
46009 var phraseChangeTimeoutEvent = null;
46010 var rootKeyChangedTimeoutEvent = null;
46011
40892aba
IC
46012 var generationProcesses = [];
46013
c6624d51
IC
46014 var DOM = {};
46015 DOM.network = $(".network");
56530adc 46016 DOM.bip32Client = $("#bip32-client");
c6624d51
IC
46017 DOM.phraseNetwork = $("#network-phrase");
46018 DOM.useEntropy = $(".use-entropy");
46019 DOM.entropyContainer = $(".entropy-container");
46020 DOM.entropy = $(".entropy");
2a6dd137
IC
46021 DOM.entropyFiltered = DOM.entropyContainer.find(".filtered");
46022 DOM.entropyType = DOM.entropyContainer.find(".type");
f1e5d484 46023 DOM.entropyCrackTime = DOM.entropyContainer.find(".crack-time");
2a6dd137
IC
46024 DOM.entropyEventCount = DOM.entropyContainer.find(".event-count");
46025 DOM.entropyBits = DOM.entropyContainer.find(".bits");
46026 DOM.entropyBitsPerEvent = DOM.entropyContainer.find(".bits-per-event");
46027 DOM.entropyWordCount = DOM.entropyContainer.find(".word-count");
46028 DOM.entropyBinary = DOM.entropyContainer.find(".binary");
46029 DOM.entropyMnemonicLength = DOM.entropyContainer.find(".mnemonic-length");
9ff30bab 46030 DOM.entropyFilterWarning = DOM.entropyContainer.find(".filter-warning");
c6624d51
IC
46031 DOM.phrase = $(".phrase");
46032 DOM.passphrase = $(".passphrase");
46033 DOM.generateContainer = $(".generate-container");
46034 DOM.generate = $(".generate");
46035 DOM.seed = $(".seed");
46036 DOM.rootKey = $(".root-key");
8d18f379
IC
46037 DOM.litecoinLtubContainer = $(".litecoin-ltub-container");
46038 DOM.litecoinUseLtub = $(".litecoin-use-ltub");
c6624d51
IC
46039 DOM.extendedPrivKey = $(".extended-priv-key");
46040 DOM.extendedPubKey = $(".extended-pub-key");
46041 DOM.bip32tab = $("#bip32-tab");
46042 DOM.bip44tab = $("#bip44-tab");
9987f0c1 46043 DOM.bip49tab = $("#bip49-tab");
c6624d51
IC
46044 DOM.bip32panel = $("#bip32");
46045 DOM.bip44panel = $("#bip44");
9987f0c1 46046 DOM.bip49panel = $("#bip49");
c6624d51
IC
46047 DOM.bip32path = $("#bip32-path");
46048 DOM.bip44path = $("#bip44-path");
46049 DOM.bip44purpose = $("#bip44 .purpose");
46050 DOM.bip44coin = $("#bip44 .coin");
46051 DOM.bip44account = $("#bip44 .account");
20083ab9
IC
46052 DOM.bip44accountXprv = $("#bip44 .account-xprv");
46053 DOM.bip44accountXpub = $("#bip44 .account-xpub");
c6624d51 46054 DOM.bip44change = $("#bip44 .change");
9987f0c1
IC
46055 DOM.bip49unavailable = $("#bip49 .unavailable");
46056 DOM.bip49available = $("#bip49 .available");
46057 DOM.bip49path = $("#bip49-path");
46058 DOM.bip49purpose = $("#bip49 .purpose");
46059 DOM.bip49coin = $("#bip49 .coin");
46060 DOM.bip49account = $("#bip49 .account");
46061 DOM.bip49accountXprv = $("#bip49 .account-xprv");
46062 DOM.bip49accountXpub = $("#bip49 .account-xpub");
46063 DOM.bip49change = $("#bip49 .change");
18abe53b 46064 DOM.generatedStrength = $(".generate-container .strength");
c6624d51 46065 DOM.hardenedAddresses = $(".hardened-addresses");
0a8d06d0 46066 DOM.useP2wpkhNestedInP2sh = $(".p2wpkh-nested-in-p2sh");
0f6b34d6
IC
46067 DOM.useBitpayAddressesContainer = $(".use-bitpay-addresses-container");
46068 DOM.useBitpayAddresses = $(".use-bitpay-addresses");
c6624d51
IC
46069 DOM.addresses = $(".addresses");
46070 DOM.rowsToAdd = $(".rows-to-add");
46071 DOM.more = $(".more");
46072 DOM.feedback = $(".feedback");
46073 DOM.tab = $(".derivation-type a");
46074 DOM.indexToggle = $(".index-toggle");
46075 DOM.addressToggle = $(".address-toggle");
46076 DOM.publicKeyToggle = $(".public-key-toggle");
46077 DOM.privateKeyToggle = $(".private-key-toggle");
46078 DOM.languages = $(".languages a");
e00964cc 46079 DOM.qrContainer = $(".qr-container");
52da415f 46080 DOM.qrHider = DOM.qrContainer.find(".qr-hider");
e00964cc
IC
46081 DOM.qrImage = DOM.qrContainer.find(".qr-image");
46082 DOM.qrHint = DOM.qrContainer.find(".qr-hint");
46083 DOM.showQrEls = $("[data-show-qr]");
c6624d51
IC
46084
46085 function init() {
46086 // Events
46087 DOM.network.on("change", networkChanged);
56530adc 46088 DOM.bip32Client.on("change", bip32ClientChanged);
c6624d51
IC
46089 DOM.useEntropy.on("change", setEntropyVisibility);
46090 DOM.entropy.on("input", delayedEntropyChanged);
18abe53b 46091 DOM.entropyMnemonicLength.on("change", entropyChanged);
c6624d51
IC
46092 DOM.phrase.on("input", delayedPhraseChanged);
46093 DOM.passphrase.on("input", delayedPhraseChanged);
46094 DOM.generate.on("click", generateClicked);
46095 DOM.more.on("click", showMore);
46096 DOM.rootKey.on("input", delayedRootKeyChanged);
8d18f379 46097 DOM.litecoinUseLtub.on("change", litecoinUseLtubChanged);
c6624d51 46098 DOM.bip32path.on("input", calcForDerivationPath);
c6624d51
IC
46099 DOM.bip44account.on("input", calcForDerivationPath);
46100 DOM.bip44change.on("input", calcForDerivationPath);
9987f0c1
IC
46101 DOM.bip49account.on("input", calcForDerivationPath);
46102 DOM.bip49change.on("input", calcForDerivationPath);
0f6b34d6 46103 DOM.tab.on("shown.bs.tab", tabChanged);
c6624d51 46104 DOM.hardenedAddresses.on("change", calcForDerivationPath);
0a8d06d0 46105 DOM.useP2wpkhNestedInP2sh.on("change", calcForDerivationPath);
c6624d51
IC
46106 DOM.indexToggle.on("click", toggleIndexes);
46107 DOM.addressToggle.on("click", toggleAddresses);
46108 DOM.publicKeyToggle.on("click", togglePublicKeys);
46109 DOM.privateKeyToggle.on("click", togglePrivateKeys);
46110 DOM.languages.on("click", languageChanged);
0f6b34d6 46111 DOM.useBitpayAddresses.on("change", useBitpayAddressesChange);
e00964cc 46112 setQrEvents(DOM.showQrEls);
c6624d51
IC
46113 disableForms();
46114 hidePending();
46115 hideValidationError();
46116 populateNetworkSelect();
56530adc 46117 populateClientSelect();
c6624d51
IC
46118 }
46119
46120 // Event handlers
46121
46122 function networkChanged(e) {
9987f0c1
IC
46123 clearDerivedKeys();
46124 clearAddressesList();
8d18f379 46125 DOM.litecoinLtubContainer.addClass("hidden");
0f6b34d6 46126 DOM.useBitpayAddressesContainer.addClass("hidden");
c6624d51 46127 var networkIndex = e.target.value;
9987f0c1
IC
46128 var network = networks[networkIndex];
46129 network.onSelect();
0a8d06d0
IC
46130 if (network.p2wpkhNestedInP2shAvailable) {
46131 showP2wpkhNestedInP2shAvailable();
9987f0c1
IC
46132 }
46133 else {
0a8d06d0 46134 showP2wpkhNestedInP2shUnavailable();
9987f0c1 46135 }
c6624d51
IC
46136 if (seed != null) {
46137 phraseChanged();
46138 }
46139 else {
46140 rootKeyChanged();
46141 }
46142 }
46143
56530adc
IC
46144 function bip32ClientChanged(e) {
46145 var clientIndex = DOM.bip32Client.val();
46146 if (clientIndex == "custom") {
46147 DOM.bip32path.prop("readonly", false);
46148 }
46149 else {
46150 DOM.bip32path.prop("readonly", true);
46151 clients[clientIndex].onSelect();
46152 if (seed != null) {
46153 phraseChanged();
46154 }
46155 else {
46156 rootKeyChanged();
46157 }
46158 }
46159 }
46160
c6624d51
IC
46161 function setEntropyVisibility() {
46162 if (isUsingOwnEntropy()) {
46163 DOM.entropyContainer.removeClass("hidden");
46164 DOM.generateContainer.addClass("hidden");
46165 DOM.phrase.prop("readonly", true);
46166 DOM.entropy.focus();
46167 entropyChanged();
46168 }
46169 else {
46170 DOM.entropyContainer.addClass("hidden");
46171 DOM.generateContainer.removeClass("hidden");
46172 DOM.phrase.prop("readonly", false);
18abe53b 46173 hidePending();
c6624d51
IC
46174 }
46175 }
46176
46177 function delayedPhraseChanged() {
46178 hideValidationError();
f128bd58
IC
46179 seed = null;
46180 bip32RootKey = null;
46181 bip32ExtendedKey = null;
46182 clearAddressesList();
c6624d51
IC
46183 showPending();
46184 if (phraseChangeTimeoutEvent != null) {
46185 clearTimeout(phraseChangeTimeoutEvent);
46186 }
46187 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
46188 }
46189
46190 function phraseChanged() {
46191 showPending();
c6624d51
IC
46192 setMnemonicLanguage();
46193 // Get the mnemonic phrase
46194 var phrase = DOM.phrase.val();
46195 var errorText = findPhraseErrors(phrase);
46196 if (errorText) {
46197 showValidationError(errorText);
46198 return;
46199 }
46200 // Calculate and display
46201 var passphrase = DOM.passphrase.val();
46202 calcBip32RootKeyFromSeed(phrase, passphrase);
46203 calcForDerivationPath();
c6624d51
IC
46204 }
46205
0f6b34d6
IC
46206 function tabChanged() {
46207 showPending();
46208 adjustNetworkForBip49();
46209 var phrase = DOM.phrase.val();
46210 if (phrase != "") {
46211 // Calculate and display for mnemonic
46212 var errorText = findPhraseErrors(phrase);
46213 if (errorText) {
46214 showValidationError(errorText);
46215 return;
46216 }
46217 // Calculate and display
46218 var passphrase = DOM.passphrase.val();
46219 calcBip32RootKeyFromSeed(phrase, passphrase);
46220 }
46221 else {
46222 // Calculate and display for root key
46223 var rootKeyBase58 = DOM.rootKey.val();
46224 var errorText = validateRootKey(rootKeyBase58);
46225 if (errorText) {
46226 showValidationError(errorText);
46227 return;
46228 }
46229 // Calculate and display
46230 calcBip32RootKeyFromBase58(rootKeyBase58);
46231 }
46232 calcForDerivationPath();
46233 }
46234
c6624d51
IC
46235 function delayedEntropyChanged() {
46236 hideValidationError();
46237 showPending();
46238 if (entropyChangeTimeoutEvent != null) {
46239 clearTimeout(entropyChangeTimeoutEvent);
46240 }
46241 entropyChangeTimeoutEvent = setTimeout(entropyChanged, 400);
46242 }
46243
46244 function entropyChanged() {
18abe53b
IC
46245 // If blank entropy, clear mnemonic, addresses, errors
46246 if (DOM.entropy.val().trim().length == 0) {
46247 clearDisplay();
2a6dd137 46248 clearEntropyFeedback();
18abe53b
IC
46249 DOM.phrase.val("");
46250 showValidationError("Blank entropy");
46251 return;
46252 }
46253 // Get the current phrase to detect changes
46254 var phrase = DOM.phrase.val();
46255 // Set the phrase from the entropy
c6624d51 46256 setMnemonicFromEntropy();
18abe53b
IC
46257 // Recalc addresses if the phrase has changed
46258 var newPhrase = DOM.phrase.val();
46259 if (newPhrase != phrase) {
46260 if (newPhrase.length == 0) {
46261 clearDisplay();
46262 }
46263 else {
46264 phraseChanged();
46265 }
46266 }
46267 else {
46268 hidePending();
46269 }
c6624d51
IC
46270 }
46271
46272 function delayedRootKeyChanged() {
46273 // Warn if there is an existing mnemonic or passphrase.
46274 if (DOM.phrase.val().length > 0 || DOM.passphrase.val().length > 0) {
46275 if (!confirm("This will clear existing mnemonic and passphrase")) {
46276 DOM.rootKey.val(bip32RootKey);
46277 return
46278 }
46279 }
46280 hideValidationError();
46281 showPending();
46282 // Clear existing mnemonic and passphrase
46283 DOM.phrase.val("");
46284 DOM.passphrase.val("");
46285 seed = null;
46286 if (rootKeyChangedTimeoutEvent != null) {
46287 clearTimeout(rootKeyChangedTimeoutEvent);
46288 }
46289 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged, 400);
46290 }
46291
46292 function rootKeyChanged() {
46293 showPending();
46294 hideValidationError();
c6624d51
IC
46295 var rootKeyBase58 = DOM.rootKey.val();
46296 var errorText = validateRootKey(rootKeyBase58);
46297 if (errorText) {
46298 showValidationError(errorText);
46299 return;
46300 }
46301 // Calculate and display
46302 calcBip32RootKeyFromBase58(rootKeyBase58);
46303 calcForDerivationPath();
c6624d51
IC
46304 }
46305
8d18f379
IC
46306 function litecoinUseLtubChanged() {
46307 litecoinUseLtub = DOM.litecoinUseLtub.prop("checked");
46308 if (litecoinUseLtub) {
46309 network = bitcoinjs.bitcoin.networks.litecoinLtub;
46310 }
46311 else {
46312 network = bitcoinjs.bitcoin.networks.litecoin;
46313 }
46314 phraseChanged();
46315 }
46316
c6624d51 46317 function calcForDerivationPath() {
9987f0c1 46318 clearDerivedKeys();
ba3cb9ec 46319 clearAddressesList();
f128bd58 46320 showPending();
9987f0c1
IC
46321 // Don't show bip49 if it's selected but network doesn't support it
46322 if (bip49TabSelected() && !networkHasBip49()) {
46323 return;
46324 }
c6624d51
IC
46325 // Get the derivation path
46326 var derivationPath = getDerivationPath();
46327 var errorText = findDerivationPathErrors(derivationPath);
46328 if (errorText) {
46329 showValidationError(errorText);
46330 return;
46331 }
20083ab9
IC
46332 bip32ExtendedKey = calcBip32ExtendedKey(derivationPath);
46333 if (bip44TabSelected()) {
46334 displayBip44Info();
46335 }
9987f0c1
IC
46336 if (bip49TabSelected()) {
46337 displayBip49Info();
46338 }
c6624d51 46339 displayBip32Info();
c6624d51
IC
46340 }
46341
46342 function generateClicked() {
46343 if (isUsingOwnEntropy()) {
46344 return;
46345 }
46346 clearDisplay();
46347 showPending();
46348 setTimeout(function() {
46349 setMnemonicLanguage();
46350 var phrase = generateRandomPhrase();
46351 if (!phrase) {
46352 return;
46353 }
46354 phraseChanged();
46355 }, 50);
46356 }
46357
46358 function languageChanged() {
46359 setTimeout(function() {
46360 setMnemonicLanguage();
46361 if (DOM.phrase.val().length > 0) {
46362 var newPhrase = convertPhraseToNewLanguage();
46363 DOM.phrase.val(newPhrase);
46364 phraseChanged();
46365 }
46366 else {
46367 DOM.generate.trigger("click");
46368 }
46369 }, 50);
46370 }
46371
0f6b34d6
IC
46372 function useBitpayAddressesChange() {
46373 setBitcoinCashNetworkValues();
46374 phraseChanged();
46375 }
46376
c6624d51
IC
46377 function toggleIndexes() {
46378 showIndex = !showIndex;
46379 $("td.index span").toggleClass("invisible");
46380 }
46381
46382 function toggleAddresses() {
46383 showAddress = !showAddress;
46384 $("td.address span").toggleClass("invisible");
46385 }
46386
46387 function togglePublicKeys() {
46388 showPubKey = !showPubKey;
46389 $("td.pubkey span").toggleClass("invisible");
46390 }
46391
46392 function togglePrivateKeys() {
46393 showPrivKey = !showPrivKey;
46394 $("td.privkey span").toggleClass("invisible");
46395 }
46396
46397 // Private methods
46398
46399 function generateRandomPhrase() {
46400 if (!hasStrongRandom()) {
46401 var errorText = "This browser does not support strong randomness";
46402 showValidationError(errorText);
46403 return;
46404 }
18abe53b 46405 var numWords = parseInt(DOM.generatedStrength.val());
c6624d51
IC
46406 var strength = numWords / 3 * 32;
46407 var words = mnemonic.generate(strength);
46408 DOM.phrase.val(words);
46409 return words;
46410 }
46411
46412 function calcBip32RootKeyFromSeed(phrase, passphrase) {
46413 seed = mnemonic.toSeed(phrase, passphrase);
9987f0c1 46414 bip32RootKey = bitcoinjs.bitcoin.HDNode.fromSeedHex(seed, network);
c6624d51
IC
46415 }
46416
46417 function calcBip32RootKeyFromBase58(rootKeyBase58) {
9987f0c1 46418 bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network);
c6624d51
IC
46419 }
46420
46421 function calcBip32ExtendedKey(path) {
0a1f0259
IC
46422 // Check there's a root key to derive from
46423 if (!bip32RootKey) {
46424 return bip32RootKey;
46425 }
20083ab9 46426 var extendedKey = bip32RootKey;
c6624d51
IC
46427 // Derive the key from the path
46428 var pathBits = path.split("/");
ebd8d4e8
IC
46429 for (var i=0; i<pathBits.length; i++) {
46430 var bit = pathBits[i];
46431 var index = parseInt(bit);
46432 if (isNaN(index)) {
46433 continue;
46434 }
46435 var hardened = bit[bit.length-1] == "'";
9987f0c1 46436 var isPriv = !(extendedKey.isNeutered());
ba3cb9ec
IC
46437 var invalidDerivationPath = hardened && !isPriv;
46438 if (invalidDerivationPath) {
46439 extendedKey = null;
46440 }
46441 else if (hardened) {
20083ab9 46442 extendedKey = extendedKey.deriveHardened(index);
ebd8d4e8
IC
46443 }
46444 else {
20083ab9 46445 extendedKey = extendedKey.derive(index);
ebd8d4e8
IC
46446 }
46447 }
20083ab9 46448 return extendedKey
ebd8d4e8
IC
46449 }
46450
46451 function showValidationError(errorText) {
46452 DOM.feedback
46453 .text(errorText)
46454 .show();
46455 }
46456
46457 function hideValidationError() {
46458 DOM.feedback
46459 .text("")
46460 .hide();
46461 }
46462
46463 function findPhraseErrors(phrase) {
ebd8d4e8 46464 // Preprocess the words
783981de 46465 phrase = mnemonic.normalizeString(phrase);
0515eeec 46466 var words = phraseToWordArray(phrase);
18abe53b
IC
46467 // Detect blank phrase
46468 if (words.length == 0) {
46469 return "Blank mnemonic";
46470 }
563e401a 46471 // Check each word
0515eeec
IC
46472 for (var i=0; i<words.length; i++) {
46473 var word = words[i];
46474 var language = getLanguage();
46475 if (WORDLISTS[language].indexOf(word) == -1) {
563e401a
IC
46476 console.log("Finding closest match to " + word);
46477 var nearestWord = findNearestWord(word);
46478 return word + " not in wordlist, did you mean " + nearestWord + "?";
46479 }
46480 }
ebd8d4e8 46481 // Check the words are valid
0515eeec 46482 var properPhrase = wordArrayToPhrase(words);
ebd8d4e8
IC
46483 var isValid = mnemonic.check(properPhrase);
46484 if (!isValid) {
46485 return "Invalid mnemonic";
46486 }
46487 return false;
46488 }
46489
efe41586
IC
46490 function validateRootKey(rootKeyBase58) {
46491 try {
0a8d06d0 46492 bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network);
efe41586
IC
46493 }
46494 catch (e) {
46495 return "Invalid root key";
46496 }
46497 return "";
46498 }
46499
38523d36 46500 function getDerivationPath() {
20083ab9 46501 if (bip44TabSelected()) {
38523d36
IC
46502 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
46503 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
46504 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
46505 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
46506 var path = "m/";
46507 path += purpose + "'/";
46508 path += coin + "'/";
46509 path += account + "'/";
46510 path += change;
46511 DOM.bip44path.val(path);
46512 var derivationPath = DOM.bip44path.val();
46513 console.log("Using derivation path from BIP44 tab: " + derivationPath);
46514 return derivationPath;
46515 }
9987f0c1
IC
46516 if (bip49TabSelected()) {
46517 var purpose = parseIntNoNaN(DOM.bip49purpose.val(), 49);
46518 var coin = parseIntNoNaN(DOM.bip49coin.val(), 0);
46519 var account = parseIntNoNaN(DOM.bip49account.val(), 0);
46520 var change = parseIntNoNaN(DOM.bip49change.val(), 0);
46521 var path = "m/";
46522 path += purpose + "'/";
46523 path += coin + "'/";
46524 path += account + "'/";
46525 path += change;
46526 DOM.bip49path.val(path);
46527 var derivationPath = DOM.bip49path.val();
46528 console.log("Using derivation path from BIP49 tab: " + derivationPath);
46529 return derivationPath;
46530 }
20083ab9 46531 else if (bip32TabSelected()) {
38523d36
IC
46532 var derivationPath = DOM.bip32path.val();
46533 console.log("Using derivation path from BIP32 tab: " + derivationPath);
46534 return derivationPath;
46535 }
46536 else {
46537 console.log("Unknown derivation path");
46538 }
46539 }
46540
ebd8d4e8 46541 function findDerivationPathErrors(path) {
30c9e79d
IC
46542 // TODO is not perfect but is better than nothing
46543 // Inspired by
46544 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#test-vectors
46545 // and
46546 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keys
46547 var maxDepth = 255; // TODO verify this!!
46548 var maxIndexValue = Math.pow(2, 31); // TODO verify this!!
46549 if (path[0] != "m") {
46550 return "First character must be 'm'";
46551 }
46552 if (path.length > 1) {
46553 if (path[1] != "/") {
46554 return "Separator must be '/'";
46555 }
46556 var indexes = path.split("/");
46557 if (indexes.length > maxDepth) {
46558 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
46559 }
46560 for (var depth = 1; depth<indexes.length; depth++) {
46561 var index = indexes[depth];
46562 var invalidChars = index.replace(/^[0-9]+'?$/g, "")
46563 if (invalidChars.length > 0) {
46564 return "Invalid characters " + invalidChars + " found at depth " + depth;
46565 }
46566 var indexValue = parseInt(index.replace("'", ""));
46567 if (isNaN(depth)) {
46568 return "Invalid number at depth " + depth;
46569 }
46570 if (indexValue > maxIndexValue) {
46571 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
46572 }
46573 }
46574 }
0a1f0259
IC
46575 // Check root key exists or else derivation path is useless!
46576 if (!bip32RootKey) {
46577 return "No root key";
46578 }
ba3cb9ec 46579 // Check no hardened derivation path when using xpub keys
8d18f379
IC
46580 var hardenedPath = path.indexOf("'") > -1;
46581 var hardenedAddresses = bip32TabSelected() && DOM.hardenedAddresses.prop("checked");
46582 var hardened = hardenedPath || hardenedAddresses;
9987f0c1 46583 var isXpubkey = bip32RootKey.isNeutered();
ba3cb9ec
IC
46584 if (hardened && isXpubkey) {
46585 return "Hardened derivation path is invalid with xpub key";
46586 }
ebd8d4e8
IC
46587 return false;
46588 }
46589
20083ab9
IC
46590 function displayBip44Info() {
46591 // Get the derivation path for the account
46592 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
46593 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
46594 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
46595 var path = "m/";
46596 path += purpose + "'/";
46597 path += coin + "'/";
46598 path += account + "'/";
46599 // Calculate the account extended keys
46600 var accountExtendedKey = calcBip32ExtendedKey(path);
46601 var accountXprv = accountExtendedKey.toBase58();
9987f0c1 46602 var accountXpub = accountExtendedKey.neutered().toBase58();
20083ab9
IC
46603 // Display the extended keys
46604 DOM.bip44accountXprv.val(accountXprv);
46605 DOM.bip44accountXpub.val(accountXpub);
46606 }
46607
9987f0c1
IC
46608 function displayBip49Info() {
46609 // Get the derivation path for the account
46610 var purpose = parseIntNoNaN(DOM.bip49purpose.val(), 49);
46611 var coin = parseIntNoNaN(DOM.bip49coin.val(), 0);
46612 var account = parseIntNoNaN(DOM.bip49account.val(), 0);
46613 var path = "m/";
46614 path += purpose + "'/";
46615 path += coin + "'/";
46616 path += account + "'/";
46617 // Calculate the account extended keys
46618 var accountExtendedKey = calcBip32ExtendedKey(path);
46619 var accountXprv = accountExtendedKey.toBase58();
46620 var accountXpub = accountExtendedKey.neutered().toBase58();
46621 // Display the extended keys
46622 DOM.bip49accountXprv.val(accountXprv);
46623 DOM.bip49accountXpub.val(accountXpub);
46624 }
46625
ebd8d4e8
IC
46626 function displayBip32Info() {
46627 // Display the key
73161a92 46628 DOM.seed.val(seed);
ebd8d4e8
IC
46629 var rootKey = bip32RootKey.toBase58();
46630 DOM.rootKey.val(rootKey);
ba3cb9ec 46631 var xprvkeyB58 = "NA";
9987f0c1 46632 if (!bip32ExtendedKey.isNeutered()) {
ba3cb9ec
IC
46633 xprvkeyB58 = bip32ExtendedKey.toBase58();
46634 }
46635 var extendedPrivKey = xprvkeyB58;
ebd8d4e8 46636 DOM.extendedPrivKey.val(extendedPrivKey);
9987f0c1 46637 var extendedPubKey = bip32ExtendedKey.neutered().toBase58();
ebd8d4e8
IC
46638 DOM.extendedPubKey.val(extendedPubKey);
46639 // Display the addresses and privkeys
46640 clearAddressesList();
46641 displayAddresses(0, 20);
46642 }
46643
46644 function displayAddresses(start, total) {
40892aba
IC
46645 generationProcesses.push(new (function() {
46646
46647 var rows = [];
46648
46649 this.stop = function() {
46650 for (var i=0; i<rows.length; i++) {
46651 rows[i].shouldGenerate = false;
46652 }
f128bd58 46653 hidePending();
40892aba
IC
46654 }
46655
46656 for (var i=0; i<total; i++) {
46657 var index = i + start;
f128bd58
IC
46658 var isLast = i == total - 1;
46659 rows.push(new TableRow(index, isLast));
40892aba
IC
46660 }
46661
46662 })());
80c4dd2a
IC
46663 }
46664
0f6b34d6
IC
46665 function P2wpkhNestedInP2shSelected() {
46666 return bip49TabSelected() || (bip32TabSelected() && useP2wpkhNestedInP2sh());
46667 }
46668
f128bd58 46669 function TableRow(index, isLast) {
80c4dd2a 46670
40892aba
IC
46671 var self = this;
46672 this.shouldGenerate = true;
1975bfbc 46673 var useHardenedAddresses = DOM.hardenedAddresses.prop("checked");
0f6b34d6 46674 var isP2wpkhNestedInP2sh = P2wpkhNestedInP2shSelected();
0a8d06d0 46675 var p2wpkhNestedInP2shAvailable = networkHasBip49();
1975bfbc 46676
80c4dd2a
IC
46677 function init() {
46678 calculateValues();
46679 }
46680
46681 function calculateValues() {
46682 setTimeout(function() {
40892aba
IC
46683 if (!self.shouldGenerate) {
46684 return;
46685 }
9987f0c1 46686 var key = "NA";
1975bfbc
IC
46687 if (useHardenedAddresses) {
46688 key = bip32ExtendedKey.deriveHardened(index);
46689 }
46690 else {
46691 key = bip32ExtendedKey.derive(index);
46692 }
80c4dd2a 46693 var address = key.getAddress().toString();
ba3cb9ec 46694 var privkey = "NA";
9987f0c1
IC
46695 if (!key.isNeutered()) {
46696 privkey = key.keyPair.toWIF(network);
ba3cb9ec 46697 }
9987f0c1 46698 var pubkey = key.getPublicKeyBuffer().toString('hex');
38523d36 46699 var indexText = getDerivationPath() + "/" + index;
1975bfbc
IC
46700 if (useHardenedAddresses) {
46701 indexText = indexText + "'";
46702 }
8b095871 46703 // Ethereum values are different
534481b6 46704 if (networks[DOM.network.val()].name == "ETH - Ethereum") {
9987f0c1 46705 var privKeyBuffer = key.keyPair.d.toBuffer();
8b095871
IC
46706 privkey = privKeyBuffer.toString('hex');
46707 var addressBuffer = ethUtil.privateToAddress(privKeyBuffer);
49b21f12
IC
46708 var hexAddress = addressBuffer.toString('hex');
46709 var checksumAddress = ethUtil.toChecksumAddress(hexAddress);
46710 address = ethUtil.addHexPrefix(checksumAddress);
920eb591
IC
46711 privkey = ethUtil.addHexPrefix(privkey);
46712 pubkey = ethUtil.addHexPrefix(pubkey);
8b095871 46713 }
8a1f452d 46714 // Ripple values are different
534481b6 46715 if (networks[DOM.network.val()].name == "XRP - Ripple") {
8a1f452d 46716 privkey = convertRipplePriv(privkey);
46717 address = convertRippleAdrr(address);
46718 }
9987f0c1 46719 // BIP49 addresses are different
0a8d06d0
IC
46720 if (isP2wpkhNestedInP2sh) {
46721 if (!p2wpkhNestedInP2shAvailable) {
9987f0c1
IC
46722 return;
46723 }
46724 var keyhash = bitcoinjs.bitcoin.crypto.hash160(key.getPublicKeyBuffer());
46725 var scriptsig = bitcoinjs.bitcoin.script.witnessPubKeyHash.output.encode(keyhash);
46726 var addressbytes = bitcoinjs.bitcoin.crypto.hash160(scriptsig);
46727 var scriptpubkey = bitcoinjs.bitcoin.script.scriptHash.output.encode(addressbytes);
46728 address = bitcoinjs.bitcoin.address.fromOutputScript(scriptpubkey, network)
46729 }
1b12b2f5 46730 addAddressToList(indexText, address, pubkey, privkey);
f128bd58
IC
46731 if (isLast) {
46732 hidePending();
46733 }
80c4dd2a 46734 }, 50)
ebd8d4e8 46735 }
80c4dd2a
IC
46736
46737 init();
46738
ebd8d4e8
IC
46739 }
46740
46741 function showMore() {
46742 var start = DOM.addresses.children().length;
46743 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
46744 if (isNaN(rowsToAdd)) {
46745 rowsToAdd = 20;
46746 DOM.rowsToAdd.val("20");
46747 }
46748 if (rowsToAdd > 200) {
46749 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
46750 msg += "Do you want to continue?";
46751 if (!confirm(msg)) {
46752 return;
46753 }
46754 }
ebd8d4e8 46755 displayAddresses(start, rowsToAdd);
ebd8d4e8
IC
46756 }
46757
46758 function clearDisplay() {
46759 clearAddressesList();
9987f0c1 46760 clearKeys();
ebd8d4e8
IC
46761 hideValidationError();
46762 }
46763
46764 function clearAddressesList() {
46765 DOM.addresses.empty();
40892aba
IC
46766 stopGenerating();
46767 }
46768
46769 function stopGenerating() {
46770 while (generationProcesses.length > 0) {
46771 var generation = generationProcesses.shift();
46772 generation.stop();
46773 }
ebd8d4e8
IC
46774 }
46775
9987f0c1
IC
46776 function clearKeys() {
46777 clearRootKey();
46778 clearDerivedKeys();
46779 }
46780
46781 function clearRootKey() {
ebd8d4e8 46782 DOM.rootKey.val("");
9987f0c1
IC
46783 }
46784
46785 function clearDerivedKeys() {
ebd8d4e8
IC
46786 DOM.extendedPrivKey.val("");
46787 DOM.extendedPubKey.val("");
9987f0c1
IC
46788 DOM.bip44accountXprv.val("");
46789 DOM.bip44accountXpub.val("");
ebd8d4e8
IC
46790 }
46791
1b12b2f5 46792 function addAddressToList(indexText, address, pubkey, privkey) {
ebd8d4e8 46793 var row = $(addressRowTemplate.html());
80c4dd2a
IC
46794 // Elements
46795 var indexCell = row.find(".index span");
46796 var addressCell = row.find(".address span");
1b12b2f5 46797 var pubkeyCell = row.find(".pubkey span");
80c4dd2a
IC
46798 var privkeyCell = row.find(".privkey span");
46799 // Content
ae30fed8 46800 indexCell.text(indexText);
80c4dd2a 46801 addressCell.text(address);
1b12b2f5 46802 pubkeyCell.text(pubkey);
80c4dd2a
IC
46803 privkeyCell.text(privkey);
46804 // Visibility
46805 if (!showIndex) {
46806 indexCell.addClass("invisible");
46807 }
46808 if (!showAddress) {
46809 addressCell.addClass("invisible");
46810 }
1b12b2f5
IC
46811 if (!showPubKey) {
46812 pubkeyCell.addClass("invisible");
46813 }
80c4dd2a 46814 if (!showPrivKey) {
6d628db7 46815 privkeyCell.addClass("invisible");
80c4dd2a 46816 }
ebd8d4e8 46817 DOM.addresses.append(row);
e00964cc
IC
46818 var rowShowQrEls = row.find("[data-show-qr]");
46819 setQrEvents(rowShowQrEls);
ebd8d4e8
IC
46820 }
46821
46822 function hasStrongRandom() {
46823 return 'crypto' in window && window['crypto'] !== null;
46824 }
46825
46826 function disableForms() {
46827 $("form").on("submit", function(e) {
46828 e.preventDefault();
46829 });
46830 }
46831
ebd8d4e8
IC
46832 function parseIntNoNaN(val, defaultVal) {
46833 var v = parseInt(val);
46834 if (isNaN(v)) {
46835 return defaultVal;
46836 }
46837 return v;
46838 }
46839
46840 function showPending() {
46841 DOM.feedback
46842 .text("Calculating...")
46843 .show();
46844 }
46845
563e401a 46846 function findNearestWord(word) {
0515eeec
IC
46847 var language = getLanguage();
46848 var words = WORDLISTS[language];
563e401a
IC
46849 var minDistance = 99;
46850 var closestWord = words[0];
46851 for (var i=0; i<words.length; i++) {
46852 var comparedTo = words[i];
6ea15134
IC
46853 if (comparedTo.indexOf(word) == 0) {
46854 return comparedTo;
46855 }
563e401a
IC
46856 var distance = Levenshtein.get(word, comparedTo);
46857 if (distance < minDistance) {
46858 closestWord = comparedTo;
46859 minDistance = distance;
46860 }
46861 }
46862 return closestWord;
46863 }
46864
ebd8d4e8
IC
46865 function hidePending() {
46866 DOM.feedback
46867 .text("")
46868 .hide();
46869 }
46870
ab78acc6
IC
46871 function populateNetworkSelect() {
46872 for (var i=0; i<networks.length; i++) {
46873 var network = networks[i];
46874 var option = $("<option>");
46875 option.attr("value", i);
46876 option.text(network.name);
b3cc3930
IC
46877 if (network.name == "BTC - Bitcoin") {
46878 option.prop("selected", true);
46879 }
ab78acc6
IC
46880 DOM.phraseNetwork.append(option);
46881 }
46882 }
46883
56530adc
IC
46884 function populateClientSelect() {
46885 for (var i=0; i<clients.length; i++) {
46886 var client = clients[i];
46887 var option = $("<option>");
46888 option.attr("value", i);
46889 option.text(client.name);
46890 DOM.bip32Client.append(option);
46891 }
46892 }
46893
0515eeec
IC
46894 function getLanguage() {
46895 var defaultLanguage = "english";
46896 // Try to get from existing phrase
46897 var language = getLanguageFromPhrase();
46898 // Try to get from url if not from phrase
46899 if (language.length == 0) {
46900 language = getLanguageFromUrl();
46901 }
46902 // Default to English if no other option
46903 if (language.length == 0) {
46904 language = defaultLanguage;
46905 }
46906 return language;
46907 }
46908
46909 function getLanguageFromPhrase(phrase) {
46910 // Check if how many words from existing phrase match a language.
46911 var language = "";
46912 if (!phrase) {
46913 phrase = DOM.phrase.val();
46914 }
46915 if (phrase.length > 0) {
46916 var words = phraseToWordArray(phrase);
46917 var languageMatches = {};
46918 for (l in WORDLISTS) {
46919 // Track how many words match in this language
46920 languageMatches[l] = 0;
46921 for (var i=0; i<words.length; i++) {
46922 var wordInLanguage = WORDLISTS[l].indexOf(words[i]) > -1;
46923 if (wordInLanguage) {
46924 languageMatches[l]++;
46925 }
46926 }
46927 // Find languages with most word matches.
46928 // This is made difficult due to commonalities between Chinese
46929 // simplified vs traditional.
46930 var mostMatches = 0;
46931 var mostMatchedLanguages = [];
46932 for (var l in languageMatches) {
46933 var numMatches = languageMatches[l];
46934 if (numMatches > mostMatches) {
46935 mostMatches = numMatches;
46936 mostMatchedLanguages = [l];
46937 }
46938 else if (numMatches == mostMatches) {
46939 mostMatchedLanguages.push(l);
46940 }
46941 }
46942 }
46943 if (mostMatchedLanguages.length > 0) {
46944 // Use first language and warn if multiple detected
46945 language = mostMatchedLanguages[0];
46946 if (mostMatchedLanguages.length > 1) {
46947 console.warn("Multiple possible languages");
46948 console.warn(mostMatchedLanguages);
46949 }
46950 }
46951 }
46952 return language;
46953 }
46954
46955 function getLanguageFromUrl() {
c6624d51
IC
46956 for (var language in WORDLISTS) {
46957 if (window.location.hash.indexOf(language) > -1) {
46958 return language;
46959 }
46960 }
46961 return "";
0515eeec
IC
46962 }
46963
46964 function setMnemonicLanguage() {
46965 var language = getLanguage();
46966 // Load the bip39 mnemonic generator for this language if required
46967 if (!(language in mnemonics)) {
46968 mnemonics[language] = new Mnemonic(language);
46969 }
46970 mnemonic = mnemonics[language];
46971 }
46972
46973 function convertPhraseToNewLanguage() {
46974 var oldLanguage = getLanguageFromPhrase();
46975 var newLanguage = getLanguageFromUrl();
46976 var oldPhrase = DOM.phrase.val();
46977 var oldWords = phraseToWordArray(oldPhrase);
46978 var newWords = [];
46979 for (var i=0; i<oldWords.length; i++) {
46980 var oldWord = oldWords[i];
46981 var index = WORDLISTS[oldLanguage].indexOf(oldWord);
46982 var newWord = WORDLISTS[newLanguage][index];
46983 newWords.push(newWord);
46984 }
46985 newPhrase = wordArrayToPhrase(newWords);
46986 return newPhrase;
46987 }
46988
46989 // TODO look at jsbip39 - mnemonic.splitWords
46990 function phraseToWordArray(phrase) {
46991 var words = phrase.split(/\s/g);
46992 var noBlanks = [];
46993 for (var i=0; i<words.length; i++) {
46994 var word = words[i];
46995 if (word.length > 0) {
46996 noBlanks.push(word);
46997 }
46998 }
46999 return noBlanks;
47000 }
47001
47002 // TODO look at jsbip39 - mnemonic.joinWords
47003 function wordArrayToPhrase(words) {
47004 var phrase = words.join(" ");
47005 var language = getLanguageFromPhrase(phrase);
47006 if (language == "japanese") {
47007 phrase = words.join("\u3000");
47008 }
47009 return phrase;
47010 }
47011
c6624d51
IC
47012 function isUsingOwnEntropy() {
47013 return DOM.useEntropy.prop("checked");
47014 }
47015
47016 function setMnemonicFromEntropy() {
2a6dd137 47017 clearEntropyFeedback();
18abe53b 47018 // Get entropy value
c6624d51 47019 var entropyStr = DOM.entropy.val();
18abe53b 47020 // Work out minimum base for entropy
c6624d51 47021 var entropy = Entropy.fromString(entropyStr);
18abe53b 47022 if (entropy.binaryStr.length == 0) {
c6624d51
IC
47023 return;
47024 }
47025 // Show entropy details
18abe53b
IC
47026 showEntropyFeedback(entropy);
47027 // Use entropy hash if not using raw entropy
47028 var bits = entropy.binaryStr;
47029 var mnemonicLength = DOM.entropyMnemonicLength.val();
47030 if (mnemonicLength != "raw") {
47031 // Get bits by hashing entropy with SHA256
47032 var hash = sjcl.hash.sha256.hash(entropy.cleanStr);
47033 var hex = sjcl.codec.hex.fromBits(hash);
47034 bits = BigInteger.parse(hex, 16).toString(2);
53aaab27 47035 while (bits.length % 256 != 0) {
18abe53b
IC
47036 bits = "0" + bits;
47037 }
47038 // Truncate hash to suit number of words
47039 mnemonicLength = parseInt(mnemonicLength);
47040 var numberOfBits = 32 * mnemonicLength / 3;
47041 bits = bits.substring(0, numberOfBits);
c6624d51 47042 }
c6624d51 47043 // Discard trailing entropy
18abe53b 47044 var bitsToUse = Math.floor(bits.length / 32) * 32;
2a6dd137
IC
47045 var start = bits.length - bitsToUse;
47046 var binaryStr = bits.substring(start);
c6624d51
IC
47047 // Convert entropy string to numeric array
47048 var entropyArr = [];
18abe53b
IC
47049 for (var i=0; i<binaryStr.length / 8; i++) {
47050 var byteAsBits = binaryStr.substring(i*8, i*8+8);
47051 var entropyByte = parseInt(byteAsBits, 2);
c6624d51
IC
47052 entropyArr.push(entropyByte)
47053 }
47054 // Convert entropy array to mnemonic
47055 var phrase = mnemonic.toMnemonic(entropyArr);
47056 // Set the mnemonic in the UI
47057 DOM.phrase.val(phrase);
47058 }
47059
2a6dd137 47060 function clearEntropyFeedback() {
f1e5d484 47061 DOM.entropyCrackTime.text("...");
18abe53b 47062 DOM.entropyType.text("");
2a6dd137
IC
47063 DOM.entropyWordCount.text("0");
47064 DOM.entropyEventCount.text("0");
47065 DOM.entropyBitsPerEvent.text("0");
47066 DOM.entropyBits.text("0");
47067 DOM.entropyFiltered.html("&nbsp;");
47068 DOM.entropyBinary.html("&nbsp;");
c6624d51
IC
47069 }
47070
18abe53b 47071 function showEntropyFeedback(entropy) {
9e97eb76 47072 var numberOfBits = entropy.binaryStr.length;
f1e5d484 47073 var timeToCrack = "unknown";
95f04905
IC
47074 try {
47075 var z = zxcvbn(entropy.base.parts.join(""));
f1e5d484
IC
47076 timeToCrack = z.crack_times_display.offline_fast_hashing_1e10_per_second;
47077 if (z.feedback.warning != "") {
47078 timeToCrack = timeToCrack + " - " + z.feedback.warning;
47079 };
18abe53b 47080 }
95f04905 47081 catch (e) {
95f04905
IC
47082 console.log("Error detecting entropy strength with zxcvbn:");
47083 console.log(e);
47084 }
95f04905 47085 var entropyTypeStr = getEntropyTypeStr(entropy);
9e97eb76 47086 var wordCount = Math.floor(numberOfBits / 32) * 3;
94959756 47087 var bitsPerEvent = entropy.bitsPerEvent.toFixed(2);
2a6dd137 47088 DOM.entropyFiltered.html(entropy.cleanHtml);
95f04905 47089 DOM.entropyType.text(entropyTypeStr);
f1e5d484 47090 DOM.entropyCrackTime.text(timeToCrack);
18abe53b 47091 DOM.entropyEventCount.text(entropy.base.ints.length);
9e97eb76 47092 DOM.entropyBits.text(numberOfBits);
2a6dd137
IC
47093 DOM.entropyWordCount.text(wordCount);
47094 DOM.entropyBinary.text(entropy.binaryStr);
9e97eb76 47095 DOM.entropyBitsPerEvent.text(bitsPerEvent);
9ff30bab
IC
47096 // detect and warn of filtering
47097 var rawNoSpaces = DOM.entropy.val().replace(/\s/g, "");
47098 var cleanNoSpaces = entropy.cleanStr.replace(/\s/g, "");
47099 var isFiltered = rawNoSpaces.length != cleanNoSpaces.length;
47100 if (isFiltered) {
47101 DOM.entropyFilterWarning.removeClass('hidden');
47102 }
47103 else {
47104 DOM.entropyFilterWarning.addClass('hidden');
47105 }
95f04905
IC
47106 }
47107
47108 function getEntropyTypeStr(entropy) {
47109 var typeStr = entropy.base.str;
47110 // Add some detail if these are cards
47111 if (entropy.base.asInt == 52) {
47112 var cardDetail = []; // array of message strings
47113 // Detect duplicates
47114 var dupes = [];
47115 var dupeTracker = {};
47116 for (var i=0; i<entropy.base.parts.length; i++) {
47117 var card = entropy.base.parts[i];
9e97eb76
IC
47118 var cardUpper = card.toUpperCase();
47119 if (cardUpper in dupeTracker) {
95f04905
IC
47120 dupes.push(card);
47121 }
9e97eb76 47122 dupeTracker[cardUpper] = true;
95f04905
IC
47123 }
47124 if (dupes.length > 0) {
47125 var dupeWord = "duplicates";
47126 if (dupes.length == 1) {
47127 dupeWord = "duplicate";
47128 }
47129 var msg = dupes.length + " " + dupeWord + ": " + dupes.slice(0,3).join(" ");
47130 if (dupes.length > 3) {
47131 msg += "...";
47132 }
47133 cardDetail.push(msg);
47134 }
47135 // Detect full deck
47136 var uniqueCards = [];
47137 for (var uniqueCard in dupeTracker) {
47138 uniqueCards.push(uniqueCard);
47139 }
47140 if (uniqueCards.length == 52) {
47141 cardDetail.unshift("full deck");
47142 }
9e97eb76
IC
47143 // Detect missing cards
47144 var values = "A23456789TJQK";
47145 var suits = "CDHS";
47146 var missingCards = [];
47147 for (var i=0; i<suits.length; i++) {
47148 for (var j=0; j<values.length; j++) {
47149 var card = values[j] + suits[i];
47150 if (!(card in dupeTracker)) {
47151 missingCards.push(card);
47152 }
47153 }
47154 }
47155 // Display missing cards if six or less, ie clearly going for full deck
47156 if (missingCards.length > 0 && missingCards.length <= 6) {
47157 var msg = missingCards.length + " missing: " + missingCards.slice(0,3).join(" ");
47158 if (missingCards.length > 3) {
47159 msg += "...";
47160 }
47161 cardDetail.push(msg);
47162 }
95f04905
IC
47163 // Add card details to typeStr
47164 if (cardDetail.length > 0) {
47165 typeStr += " (" + cardDetail.join(", ") + ")";
47166 }
47167 }
47168 return typeStr;
47169 }
47170
e00964cc
IC
47171 function setQrEvents(els) {
47172 els.on("mouseenter", createQr);
47173 els.on("mouseleave", destroyQr);
47174 els.on("click", toggleQr);
47175 }
47176
47177 function createQr(e) {
47178 var content = e.target.textContent || e.target.value;
47179 if (content) {
47180 var size = 130;
47181 DOM.qrImage.qrcode({width: size, height: size, text: content});
47182 if (!showQr) {
52da415f
IC
47183 DOM.qrHider.addClass("hidden");
47184 }
47185 else {
47186 DOM.qrHider.removeClass("hidden");
e00964cc
IC
47187 }
47188 DOM.qrContainer.removeClass("hidden");
47189 }
47190 }
47191
47192 function destroyQr() {
47193 DOM.qrImage.text("");
47194 DOM.qrContainer.addClass("hidden");
47195 }
47196
47197 function toggleQr() {
47198 showQr = !showQr;
52da415f 47199 DOM.qrHider.toggleClass("hidden");
e00964cc
IC
47200 DOM.qrHint.toggleClass("hidden");
47201 }
47202
20083ab9
IC
47203 function bip44TabSelected() {
47204 return DOM.bip44tab.hasClass("active");
47205 }
47206
47207 function bip32TabSelected() {
47208 return DOM.bip32tab.hasClass("active");
47209 }
47210
0a8d06d0
IC
47211 function useP2wpkhNestedInP2sh() {
47212 return DOM.useP2wpkhNestedInP2sh.prop("checked");
47213 }
47214
9987f0c1 47215 function networkHasBip49() {
0a8d06d0 47216 return networks[DOM.network.val()].p2wpkhNestedInP2shAvailable;
9987f0c1
IC
47217 }
47218
47219 function bip49TabSelected() {
47220 return DOM.bip49tab.hasClass("active");
47221 }
47222
47223 function setHdCoin(coinValue) {
47224 DOM.bip44coin.val(coinValue);
47225 DOM.bip49coin.val(coinValue);
47226 }
47227
0a8d06d0 47228 function showP2wpkhNestedInP2shAvailable() {
9987f0c1
IC
47229 DOM.bip49unavailable.addClass("hidden");
47230 DOM.bip49available.removeClass("hidden");
0a8d06d0 47231 DOM.useP2wpkhNestedInP2sh.prop("disabled", false);
9987f0c1
IC
47232 }
47233
0a8d06d0 47234 function showP2wpkhNestedInP2shUnavailable() {
9987f0c1
IC
47235 DOM.bip49available.addClass("hidden");
47236 DOM.bip49unavailable.removeClass("hidden");
0a8d06d0
IC
47237 DOM.useP2wpkhNestedInP2sh.prop("disabled", true);
47238 DOM.useP2wpkhNestedInP2sh.prop("checked", false);
9987f0c1
IC
47239 }
47240
0f6b34d6
IC
47241 function useBitpayAddresses() {
47242 return !(DOM.useBitpayAddresses.prop("checked"));
47243 }
47244
47245 function setBitcoinCashNetworkValues() {
47246 if (useBitpayAddresses()) {
47247 network = bitcoinjs.bitcoin.networks.bitcoin;
47248 }
47249 else {
47250 network = bitcoinjs.bitcoin.networks.bitcoinCashBitbpay;
47251 }
47252 }
47253
47254 function adjustNetworkForBip49() {
47255 // If bip49 is selected the xpub/xprv prefixes need to be adjusted
47256 // to avoid accidentally importing BIP49 xpub to BIP44 watch only
47257 // wallet.
47258 // See https://github.com/iancoleman/bip39/issues/125
47259 if (P2wpkhNestedInP2shSelected()) {
47260 if (network == bitcoinjs.bitcoin.networks.bitcoin) {
47261 network = bitcoinjs.bitcoin.networks.bitcoinBip49;
47262 }
47263 else if (network == bitcoinjs.bitcoin.networks.testnet) {
47264 network = bitcoinjs.bitcoin.networks.testnetBip49;
47265 }
47266 else if (network == bitcoinjs.bitcoin.networks.litecoin) {
47267 network = bitcoinjs.bitcoin.networks.litecoinBip49;
47268 }
47269 }
47270 else {
47271 if (network == bitcoinjs.bitcoin.networks.bitcoinBip49) {
47272 network = bitcoinjs.bitcoin.networks.bitcoin;
47273 }
47274 else if (network == bitcoinjs.bitcoin.networks.testnetBip49) {
47275 network = bitcoinjs.bitcoin.networks.testnet;
47276 }
47277 else if (network == bitcoinjs.bitcoin.networks.litecoinBip49) {
47278 network = bitcoinjs.bitcoin.networks.litecoin;
47279 }
47280 }
47281 }
47282
ab78acc6 47283 var networks = [
b3cc3930
IC
47284 {
47285 name: "BCH - Bitcoin Cash",
0a8d06d0 47286 p2wpkhNestedInP2shAvailable: false,
b3cc3930 47287 onSelect: function() {
0f6b34d6
IC
47288 DOM.useBitpayAddressesContainer.removeClass("hidden");
47289 setBitcoinCashNetworkValues();
b3cc3930
IC
47290 setHdCoin(145);
47291 },
47292 },
ab78acc6 47293 {
534481b6 47294 name: "BTC - Bitcoin",
0a8d06d0 47295 p2wpkhNestedInP2shAvailable: true,
ab78acc6 47296 onSelect: function() {
9987f0c1
IC
47297 network = bitcoinjs.bitcoin.networks.bitcoin;
47298 setHdCoin(0);
ab78acc6
IC
47299 },
47300 },
47301 {
534481b6 47302 name: "BTC - Bitcoin Testnet",
0a8d06d0 47303 p2wpkhNestedInP2shAvailable: true,
ab78acc6 47304 onSelect: function() {
9987f0c1
IC
47305 network = bitcoinjs.bitcoin.networks.testnet;
47306 setHdCoin(1);
ab78acc6
IC
47307 },
47308 },
39608073
RS
47309 {
47310 name: "BTG - Bitcoin Gold",
47311 p2wpkhNestedInP2shAvailable: true,
47312 onSelect: function() {
47313 network = bitcoinjs.bitcoin.networks.bgold;
47314 setHdCoin(0);
47315 },
47316 },
ab78acc6 47317 {
534481b6 47318 name: "CLAM - Clams",
0a8d06d0 47319 p2wpkhNestedInP2shAvailable: false,
ab78acc6 47320 onSelect: function() {
9987f0c1
IC
47321 network = bitcoinjs.bitcoin.networks.clam;
47322 setHdCoin(23);
ab78acc6
IC
47323 },
47324 },
0921f370 47325 {
47326 name: "CRW - Crown",
0a8d06d0 47327 p2wpkhNestedInP2shAvailable: false,
0921f370 47328 onSelect: function() {
9987f0c1
IC
47329 network = bitcoinjs.bitcoin.networks.crown;
47330 setHdCoin(72);
0921f370 47331 },
47332 },
ab78acc6 47333 {
534481b6 47334 name: "DASH - Dash",
0a8d06d0 47335 p2wpkhNestedInP2shAvailable: false,
d5dc92fd 47336 onSelect: function() {
9987f0c1
IC
47337 network = bitcoinjs.bitcoin.networks.dash;
47338 setHdCoin(5);
d5dc92fd
IC
47339 },
47340 },
c0386f3b 47341 {
534481b6 47342 name: "DASH - Dash Testnet",
0a8d06d0 47343 p2wpkhNestedInP2shAvailable: false,
c0386f3b 47344 onSelect: function() {
9987f0c1
IC
47345 network = bitcoinjs.bitcoin.networks.dashtn;
47346 setHdCoin(1);
c0386f3b
KR
47347 },
47348 },
d5dc92fd 47349 {
534481b6 47350 name: "DOGE - Dogecoin",
0a8d06d0 47351 p2wpkhNestedInP2shAvailable: false,
534481b6 47352 onSelect: function() {
9987f0c1
IC
47353 network = bitcoinjs.bitcoin.networks.dogecoin;
47354 setHdCoin(3);
534481b6 47355 },
47356 },
47357 {
47358 name: "ETH - Ethereum",
0a8d06d0 47359 p2wpkhNestedInP2shAvailable: false,
d5dc92fd 47360 onSelect: function() {
9987f0c1
IC
47361 network = bitcoinjs.bitcoin.networks.bitcoin;
47362 setHdCoin(60);
d5dc92fd
IC
47363 },
47364 },
1102f201
IC
47365 {
47366 name: "FJC - Fujicoin",
47367 p2wpkhNestedInP2shAvailable: false,
47368 onSelect: function() {
47369 network = bitcoinjs.bitcoin.networks.fujicoin;
47370 setHdCoin(75);
47371 },
47372 },
f88fab20 47373 {
534481b6 47374 name: "GAME - GameCredits",
0a8d06d0 47375 p2wpkhNestedInP2shAvailable: false,
f88fab20 47376 onSelect: function() {
9987f0c1
IC
47377 network = bitcoinjs.bitcoin.networks.game;
47378 setHdCoin(101);
f88fab20 47379 },
47380 },
a3baa26e 47381 {
534481b6 47382 name: "JBS - Jumbucks",
0a8d06d0 47383 p2wpkhNestedInP2shAvailable: false,
a3baa26e 47384 onSelect: function() {
9987f0c1
IC
47385 network = bitcoinjs.bitcoin.networks.jumbucks;
47386 setHdCoin(26);
a3baa26e
IC
47387 },
47388 },
47389 {
534481b6 47390 name: "LTC - Litecoin",
0f6b34d6 47391 p2wpkhNestedInP2shAvailable: true,
a3baa26e 47392 onSelect: function() {
9987f0c1
IC
47393 network = bitcoinjs.bitcoin.networks.litecoin;
47394 setHdCoin(2);
8d18f379 47395 DOM.litecoinLtubContainer.removeClass("hidden");
a3baa26e
IC
47396 },
47397 },
56ad9601
JS
47398 {
47399 name: "MAZA - Maza",
0a8d06d0 47400 p2wpkhNestedInP2shAvailable: false,
56ad9601
JS
47401 onSelect: function() {
47402 network = bitcoinjs.bitcoin.networks.maza;
47403 setHdCoin(13);
47404 },
47405 },
47406
a3baa26e 47407 {
534481b6 47408 name: "NMC - Namecoin",
0a8d06d0 47409 p2wpkhNestedInP2shAvailable: false,
a3baa26e 47410 onSelect: function() {
9987f0c1
IC
47411 network = bitcoinjs.bitcoin.networks.namecoin;
47412 setHdCoin(7);
a3baa26e
IC
47413 },
47414 },
f128bd58
IC
47415 {
47416 name: "PIVX - PIVX",
0a8d06d0 47417 p2wpkhNestedInP2shAvailable: false,
f128bd58
IC
47418 onSelect: function() {
47419 network = bitcoinjs.bitcoin.networks.pivx;
47420 setHdCoin(119);
47421 },
47422 },
47423 {
47424 name: "PIVX - PIVX Testnet",
0a8d06d0 47425 p2wpkhNestedInP2shAvailable: false,
f128bd58
IC
47426 onSelect: function() {
47427 network = bitcoinjs.bitcoin.networks.pivxtestnet;
47428 setHdCoin(1);
47429 },
47430 },
5c434a8a 47431 {
534481b6 47432 name: "PPC - Peercoin",
0a8d06d0 47433 p2wpkhNestedInP2shAvailable: false,
5c434a8a 47434 onSelect: function() {
9987f0c1
IC
47435 network = bitcoinjs.bitcoin.networks.peercoin;
47436 setHdCoin(6);
5c434a8a
CM
47437 },
47438 },
8a1f452d 47439 {
534481b6 47440 name: "SDC - ShadowCash",
0a8d06d0 47441 p2wpkhNestedInP2shAvailable: false,
5493efc3 47442 onSelect: function() {
9987f0c1
IC
47443 network = bitcoinjs.bitcoin.networks.shadow;
47444 setHdCoin(35);
5493efc3 47445 },
47446 },
07ac4350 47447 {
534481b6 47448 name: "SDC - ShadowCash Testnet",
0a8d06d0 47449 p2wpkhNestedInP2shAvailable: false,
07ac4350 47450 onSelect: function() {
9987f0c1
IC
47451 network = bitcoinjs.bitcoin.networks.shadowtn;
47452 setHdCoin(1);
07ac4350 47453 },
47454 },
01e81e53 47455 {
534481b6 47456 name: "SLM - Slimcoin",
0a8d06d0 47457 p2wpkhNestedInP2shAvailable: false,
01e81e53 47458 onSelect: function() {
9987f0c1
IC
47459 network = bitcoinjs.bitcoin.networks.slimcoin;
47460 setHdCoin(63);
01e81e53
GH
47461 },
47462 },
47463 {
534481b6 47464 name: "SLM - Slimcoin Testnet",
0a8d06d0 47465 p2wpkhNestedInP2shAvailable: false,
01e81e53 47466 onSelect: function() {
9987f0c1
IC
47467 network = bitcoinjs.bitcoin.networks.slimcointn;
47468 setHdCoin(111);
01e81e53
GH
47469 },
47470 },
0f6b34d6
IC
47471 {
47472 name: "USNBT - NuBits",
47473 p2wpkhNestedInP2shAvailable: false,
47474 onSelect: function() {
47475 network = bitcoinjs.bitcoin.networks.nubits;
47476 setHdCoin(12);
47477 },
47478 },
07ac4350 47479 {
534481b6 47480 name: "VIA - Viacoin",
0a8d06d0 47481 p2wpkhNestedInP2shAvailable: false,
07ac4350 47482 onSelect: function() {
9987f0c1
IC
47483 network = bitcoinjs.bitcoin.networks.viacoin;
47484 setHdCoin(14);
07ac4350 47485 },
47486 },
8b095871 47487 {
534481b6 47488 name: "VIA - Viacoin Testnet",
0a8d06d0 47489 p2wpkhNestedInP2shAvailable: false,
8b095871 47490 onSelect: function() {
9987f0c1
IC
47491 network = bitcoinjs.bitcoin.networks.viacointestnet;
47492 setHdCoin(1);
8b095871
IC
47493 },
47494 },
b3cc3930
IC
47495 {
47496 name: "XMY - Myriadcoin",
0a8d06d0 47497 p2wpkhNestedInP2shAvailable: false,
b3cc3930
IC
47498 onSelect: function() {
47499 network = bitcoinjs.bitcoin.networks.myriadcoin;
47500 setHdCoin(90);
47501 },
47502 },
534481b6 47503 {
47504 name: "XRP - Ripple",
0a8d06d0 47505 p2wpkhNestedInP2shAvailable: false,
534481b6 47506 onSelect: function() {
9987f0c1
IC
47507 network = bitcoinjs.bitcoin.networks.bitcoin;
47508 setHdCoin(144);
534481b6 47509 },
47510 }
ab78acc6
IC
47511 ]
47512
56530adc
IC
47513 var clients = [
47514 {
47515 name: "Bitcoin Core",
47516 onSelect: function() {
47517 DOM.bip32path.val("m/0'/0'");
47518 DOM.hardenedAddresses.prop('checked', true);
47519 },
47520 },
47521 {
47522 name: "blockchain.info",
47523 onSelect: function() {
47524 DOM.bip32path.val("m/44'/0'/0'");
47525 DOM.hardenedAddresses.prop('checked', false);
47526 },
47527 },
47528 {
47529 name: "MultiBit HD",
47530 onSelect: function() {
47531 DOM.bip32path.val("m/0'/0");
47532 DOM.hardenedAddresses.prop('checked', false);
47533 },
47534 }
47535 ]
47536
ebd8d4e8
IC
47537 init();
47538
47539})();
dc55c6b0 47540</script>
ebd8d4e8
IC
47541 </body>
47542</html>