]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blame - bip39-standalone.html
Add GAME support
[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 }
ab78acc6
IC
110 </style>
111 </head>
112 <body>
113 <div class="container">
3af2954a 114
ab78acc6
IC
115 <h1 class="text-center">Mnemonic Code Converter</h1>
116 <hr>
117 <div class="row">
118 <div class="col-md-12">
119 <h2>Mnemonic</h2>
120 <form class="form-horizontal" role="form">
ab78acc6 121 <div class="form-group">
c6624d51
IC
122 <div class="col-sm-2"></div>
123 <div class="col-sm-10">
ea87f1d3
IC
124 <p data-translate>You can enter an existing BIP39 mnemonic, or generate a new random one. Typing your own twelve words will probably not work how you expect, since the words require a particular structure (the last word is a checksum).</p>
125 <p data-translate-html>
126 For more info see the
127 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target="_blank">BIP39 spec</a>.
128 </p>
c6624d51
IC
129 </div>
130 </div>
131 <div class="form-group generate-container">
b0818b31 132 <label class="col-sm-2 control-label"></label>
ab78acc6 133 <div class="col-sm-10">
b0818b31
IC
134 <div class="form-inline">
135 <div class="input-group-inline">
ea87f1d3 136 <span data-translate>Generate a random mnemonic, or enter your own below</span>:
b0818b31 137 <button class="btn generate">Generate</button>
b0818b31
IC
138 <select id="strength" class="strength form-control">
139 <option value="3">3</option>
140 <option value="6">6</option>
141 <option value="9">9</option>
142 <option value="12">12</option>
143 <option value="15" selected>15</option>
144 <option value="18">18</option>
145 <option value="21">21</option>
146 <option value="24">24</option>
147 </select>
ea87f1d3 148 <span data-translate>words</span>
b0818b31
IC
149 </div>
150 </div>
ab78acc6 151 </div>
0515eeec 152 </div>
c6624d51 153 <div class="entropy-container hidden">
2a6dd137 154 <div class="form-group text-danger">
ea87f1d3 155 <label class="col-sm-2 control-label" data-translate>Warning</label>
2a6dd137 156 <div class="col-sm-10 form-control-static">
ea87f1d3
IC
157 <span data-translate>Entropy is an advanced feature. Your mnemonic may be insecure if this feature is used incorrectly.</span>
158 <a href="#entropy-notes" data-translate>Read more</a>
18abe53b
IC
159 </div>
160 </div>
2a6dd137 161 <div class="form-group">
ea87f1d3 162 <label for="entropy" class="col-sm-2 control-label" data-translate>Entropy</label>
2a6dd137 163 <div class="col-sm-7">
ea87f1d3 164 <textarea id="entropy" rows="2" class="entropy form-control" placeholder="Accepts binary, base 6, 6-sided dice, base 10, hexadecimal, cards" data-translate-placeholder></textarea>
95f04905 165 <div class="row">
ea87f1d3 166 <label class="col-sm-3 control-label" data-translate>Strength</label>
95f04905 167 <div class="strength col-sm-3 form-control-static"></div>
ea87f1d3 168 <label class="col-sm-3 control-label" data-translate>Event Count</label>
95f04905
IC
169 <div class="event-count col-sm-3 form-control-static"></div>
170 </div>
171 <div class="row">
ea87f1d3 172 <label class="col-sm-3 control-label" data-translate>Entropy Type</label>
95f04905 173 <div class="type col-sm-3 form-control-static"></div>
ea87f1d3 174 <label class="col-sm-3 control-label" data-translate>Bits Per Event</label>
95f04905
IC
175 <div class="bits-per-event col-sm-3 form-control-static"></div>
176 </div>
177 <div class="row">
ea87f1d3 178 <label class="col-sm-3 control-label" data-translate>Word Count</label>
95f04905 179 <div class="word-count col-sm-3 form-control-static"></div>
52da415f 180 <label class="col-sm-3 control-label" data-translate><span class="more-info" data-translate-title title="Total bits of entropy may be less than indicated if any entropy event uses a weak source.">Total Bits</span></label>
95f04905
IC
181 <div class="bits col-sm-3 form-control-static"></div>
182 </div>
ea87f1d3 183 <label class="col-sm-3 control-label" data-translate>Filtered Entropy</label>
2a6dd137 184 <div class="filtered col-sm-9 form-control-static"></div>
ea87f1d3 185 <label class="col-sm-3 control-label" data-translate>Raw Binary</label>
2a6dd137 186 <div class="binary col-sm-9 form-control-static"></div>
ea87f1d3 187 <label class="col-sm-3 control-label" data-translate>Mnemonic Length</label>
2a6dd137 188 <div class="col-sm-9">
18abe53b 189 <select class="mnemonic-length form-control">
5ed50bd9 190 <option value="raw" selected data-translate>Use Raw Entropy (3 words per 32 bits)</option>
ea87f1d3 191 <option value="12">12 <span data-translate>Words</span></option>
5ed50bd9 192 <option value="15">15 <span data-translate>Words</option>
ea87f1d3
IC
193 <option value="18">18 <span data-translate>Words</span></option>
194 <option value="21">21 <span data-translate>Words</span></option>
195 <option value="24">24 <span data-translate>Words</span></option>
18abe53b 196 </select>
c6624d51 197 </div>
18abe53b 198 </div>
2a6dd137 199 <div class="col-sm-3">
ea87f1d3 200 <p data-translate>Valid entropy values include:</p>
2a6dd137 201 <ul>
ea87f1d3
IC
202 <li><strong data-translate>Binary</strong> [0-1]<br>101010011</li>
203 <li><strong data-translate>Base 6</strong> [0-5]<br>123434014</li>
204 <li><strong data-translate>Dice</strong> [1-6]<br>62535634</li>
205 <li><strong data-translate>Base 10</strong> [0-9]<br>90834528</li>
206 <li><strong data-translate>Hex</strong> [0-9A-F]<br>4187a8bfd9</li>
207 <li><strong data-translate>Card</strong> [A2-9TJQK][CDHS]<br>ahqs9dtc</li>
2a6dd137
IC
208 </ul>
209 </div>
c6624d51
IC
210 </div>
211 </div>
212 <div class="form-group">
213 <div class="col-sm-2"></div>
214 <div class="col-sm-10 checkbox">
215 <label>
216 <input type="checkbox" class="use-entropy">
ea87f1d3 217 <span data-translate>Supply my own source of entropy</span>
c6624d51
IC
218 </label>
219 </div>
220 </div>
221 <div class="form-group">
ea87f1d3 222 <label class="col-sm-2 control-label" data-translate>Mnemonic Language</label>
0515eeec 223 <div class="col-sm-10 languages">
ea87f1d3
IC
224 <div class="form-control no-border">
225 <a href="#english">English</a>
226 <a href="#japanese" title="Japanese">日本語</a>
227 <a href="#spanish" title="Spanish">Español</a>
228 <a href="#chinese_simplified" title="Chinese (Simplified)">中文(简体)</a>
229 <a href="#chinese_traditional" title="Chinese (Traditional)">中文(繁體)</a>
230 <a href="#french" title="French">Français</a>
231 <a href="#italian" title="Italian">Italiano</a>
232 </div>
0515eeec 233 </div>
ab78acc6
IC
234 </div>
235 <div class="form-group">
ea87f1d3 236 <label for="phrase" class="col-sm-2 control-label" data-translate>BIP39 Mnemonic</label>
ab78acc6 237 <div class="col-sm-10">
e00964cc 238 <textarea id="phrase" class="phrase form-control" data-show-qr></textarea>
ab78acc6
IC
239 </div>
240 </div>
241 <div class="form-group">
ea87f1d3 242 <label for="passphrase" class="col-sm-2 control-label" data-translate>BIP39 Passphrase (optional)</label>
ab78acc6
IC
243 <div class="col-sm-10">
244 <textarea id="passphrase" class="passphrase form-control"></textarea>
245 </div>
246 </div>
73161a92 247 <div class="form-group">
ea87f1d3 248 <label for="seed" class="col-sm-2 control-label" data-translate>BIP39 Seed</label>
73161a92 249 <div class="col-sm-10">
e00964cc 250 <textarea id="seed" class="seed form-control" readonly="readonly" data-show-qr></textarea>
73161a92
IC
251 </div>
252 </div>
ab78acc6 253 <div class="form-group">
ea87f1d3 254 <label for="network-phrase" class="col-sm-2 control-label" data-translate>Coin</label>
ab78acc6
IC
255 <div class="col-sm-10">
256 <select id="network-phrase" class="network form-control">
257 <!-- populated by javascript -->
258 </select>
259 </div>
260 </div>
261 <div class="form-group">
ea87f1d3 262 <label for="root-key" class="col-sm-2 control-label" data-translate>BIP32 Root Key</label>
ab78acc6 263 <div class="col-sm-10">
e00964cc 264 <textarea id="root-key" class="root-key form-control" data-show-qr></textarea>
ab78acc6
IC
265 </div>
266 </div>
267 </form>
268 </div>
269 </div>
3af2954a 270
ab78acc6 271 <hr>
3af2954a 272
ab78acc6
IC
273 <div class="row">
274 <div class="col-md-12">
275 <h2>Derivation Path</h2>
276 <ul class="derivation-type nav nav-tabs" role="tablist">
d5dc92fd 277 <li id="bip44-tab" class="active">
ab78acc6
IC
278 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a>
279 </li>
280 <li id="bip32-tab">
281 <a href="#bip32" role="tab" data-toggle="tab">BIP32</a>
282 </li>
283 </ul>
284 <div class="derivation-type tab-content">
d5dc92fd 285 <div id="bip44" class="tab-pane active">
ab78acc6
IC
286 <form class="form-horizontal" role="form">
287 <br>
288 <div class="col-sm-2"></div>
289 <div class="col-sm-10">
ea87f1d3
IC
290 <p data-translate-html>
291 For more info see the
292 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a>.
293 </p>
ab78acc6
IC
294 </div>
295 <div class="form-group">
296 <label for="purpose" class="col-sm-2 control-label">
ea87f1d3 297 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank" data-translate>Purpose</a>
ab78acc6
IC
298 </label>
299 <div class="col-sm-10">
300 <input id="purpose" type="text" class="purpose form-control" value="44">
301 </div>
302 </div>
303 <div class="form-group">
304 <label for="coin" class="col-sm-2 control-label">
ea87f1d3 305 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank" data-translate>Coin</a>
ab78acc6
IC
306 </label>
307 <div class="col-sm-10">
308 <input id="coin" type="text" class="coin form-control" value="0">
309 </div>
310 </div>
311 <div class="form-group">
312 <label for="account" class="col-sm-2 control-label">
ea87f1d3 313 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank" data-translate>Account</a>
ab78acc6
IC
314 </label>
315 <div class="col-sm-10">
316 <input id="account" type="text" class="account form-control" value="0">
317 </div>
318 </div>
319 <div class="form-group">
320 <label for="change" class="col-sm-2 control-label">
ea87f1d3 321 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank" data-translate>External / Internal</a>
ab78acc6
IC
322 </label>
323 <div class="col-sm-10">
324 <input id="change" type="text" class="change form-control" value="0">
325 </div>
326 </div>
20083ab9
IC
327 <div class="form-group">
328 <label class="col-sm-2 control-label">
329 </label>
330 <div class="col-sm-10">
f3bfd2a5 331 <p data-translate>The account extended keys can be used for importing to most BIP44 compatible wallets, such as mycelium or electrum.</p>
20083ab9
IC
332 </div>
333 </div>
334 <div class="form-group">
335 <label for="account-xprv" class="col-sm-2 control-label">
336 <span data-translate>Account Extended Private Key</span>
337 </label>
338 <div class="col-sm-10">
339 <textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
340 </div>
341 </div>
342 <div class="form-group">
343 <label for="account-xpub" class="col-sm-2 control-label">
344 <span data-translate>Account Extended Public Key</span>
345 </label>
346 <div class="col-sm-10">
347 <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
348 </div>
349 </div>
350 <div class="form-group">
351 <label class="col-sm-2 control-label">
352 </label>
353 <div class="col-sm-10">
354 <p data-translate>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
355 </div>
356 </div>
ab78acc6 357 <div class="form-group">
ea87f1d3 358 <label for="bip44-path" class="col-sm-2 control-label" data-translate>BIP32 Derivation Path</label>
ab78acc6
IC
359 <div class="col-sm-10">
360 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
361 </div>
362 </div>
363 </form>
364 </div>
365 <div id="bip32" class="tab-pane">
366 <form class="form-horizontal" role="form">
367 <br>
368 <div class="col-sm-2"></div>
369 <div class="col-sm-10">
ea87f1d3
IC
370 <p data-translate>
371 For more info see the
372 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a>
373 </p>
ab78acc6 374 </div>
56530adc
IC
375 <div class="form-group">
376 <label for="bip32-client" class="col-sm-2 control-label" data-translate>Client</label>
377 <div class="col-sm-10">
378 <select id="bip32-client" class="client form-control">
379 <option value="custom">Custom derivation path</option>
380 <!-- populated by javascript -->
381 </select>
382 </div>
383 </div>
ab78acc6 384 <div class="form-group">
ea87f1d3 385 <label for="bip32-path" class="col-sm-2 control-label" data-translate>BIP32 Derivation Path</label>
ab78acc6
IC
386 <div class="col-sm-10">
387 <input id="bip32-path" type="text" class="path form-control" value="m/0">
388 </div>
389 </div>
1975bfbc
IC
390 <div class="form-group">
391 <div class="col-sm-2"></div>
392 <label class="col-sm-10">
393 <input class="hardened-addresses" type="checkbox">
ea87f1d3 394 <span data-translate>Use hardened addresses</span>
1975bfbc
IC
395 </label>
396 </div>
1975bfbc 397 <div class="form-group">
ea87f1d3 398 <label for="core-path" class="col-sm-2 control-label" data-translate>Bitcoin Core</label>
1975bfbc 399 <div class="col-sm-10">
ea87f1d3 400 <p class="form-control no-border" data-translate-html>
1975bfbc 401 Use path <code>m/0'/0'</code> with hardened addresses.
c866242d 402 </p>
ea87f1d3
IC
403 <p class="form-control no-border" data-translate-html>
404 For more info see the
405 <a href="https://github.com/bitcoin/bitcoin/pull/8035" target="_blank">Bitcoin Core BIP32 implementation</a>
1975bfbc
IC
406 </p>
407 </div>
408 </div>
56530adc
IC
409 <div class="form-group">
410 <label for="core-path" class="col-sm-2 control-label" data-translate>Multibit</label>
411 <div class="col-sm-10">
412 <p class="form-control no-border">
413 <span data-translate-html>Use path <code>m/0'/0</code>.</span>
414 </p>
415 <p class="form-control no-border">
416 <span data-translate>For more info see</span>
417 <a href="https://multibit.org/" target="_blank">MultiBit HD</a>
418 </p>
419 </div>
420 </div>
aa51da11 421 <div class="form-group">
ea87f1d3 422 <label class="col-sm-2 control-label" data-translate>Block Explorers</label>
aa51da11
IC
423 <div class="col-sm-10">
424 <p class="form-control no-border">
ea87f1d3
IC
425 <span data-translate-html>Use path <code>m/44'/0'/0'</code>.</span>
426 <span data-translate-html>Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xprv</code> key.</span>
c866242d
IC
427 </p>
428 <p class="form-control no-border">
ea87f1d3
IC
429 <span data-translate>Can be used with</span>:
430 <a href="https://blockchain.info/" target="_blank">blockchain.info</a>
aa51da11
IC
431 </p>
432 </div>
433 </div>
ab78acc6
IC
434 </form>
435 </div>
436 </div>
437 <form class="form-horizontal" role="form">
438 <div class="form-group">
20083ab9 439 <label for="extended-priv-key" class="col-sm-2 control-label" data-translate>BIP32 Extended Private Key</label>
ab78acc6 440 <div class="col-sm-10">
e00964cc 441 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly" data-show-qr></textarea>
ab78acc6
IC
442 </div>
443 </div>
444 <div class="form-group">
20083ab9 445 <label for="extended-pub-key" class="col-sm-2 control-label" data-translate>BIP32 Extended Public Key</label>
ab78acc6 446 <div class="col-sm-10">
e00964cc 447 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly" data-show-qr></textarea>
ab78acc6
IC
448 </div>
449 </div>
450 </form>
451 </div>
452 </div>
3af2954a 453
ab78acc6 454 <hr>
3af2954a 455
ab78acc6
IC
456 <div class="row">
457 <div class="col-md-12">
458 <h2>Derived Addresses</h2>
ea87f1d3 459 <p data-translate>Note these addreses are derived from the BIP32 Extended Key</p>
ab78acc6
IC
460 <table class="table table-striped">
461 <thead>
462 <th>
463 <div class="input-group">
ea87f1d3
IC
464 <span data-translate>Path</span>&nbsp;&nbsp;
465 <button class="index-toggle" data-translate>Toggle</button>
ab78acc6
IC
466 </div>
467 </th>
468 <th>
469 <div class="input-group">
ea87f1d3
IC
470 <span data-translate>Address</span>&nbsp;&nbsp;
471 <button class="address-toggle" data-translate>Toggle</button>
ab78acc6
IC
472 </div>
473 </th>
1b12b2f5
IC
474 <th>
475 <div class="input-group">
ea87f1d3
IC
476 <span data-translate>Public Key</span>&nbsp;&nbsp;
477 <button class="public-key-toggle" data-translate>Toggle</button>
1b12b2f5
IC
478 </div>
479 </th>
ab78acc6
IC
480 <th>
481 <div class="input-group">
ea87f1d3
IC
482 <span data-translate>Private Key</span>&nbsp;&nbsp;
483 <button class="private-key-toggle" data-translate>Toggle</button>
ab78acc6
IC
484 </div>
485 </th>
486 </thead>
d737abf6 487 <tbody class="addresses monospace">
c866242d
IC
488 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
489 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
490 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
491 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
492 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
ab78acc6
IC
493 </tbody>
494 </table>
495 </div>
496 </div>
ea87f1d3 497 <span data-translate>Show more rows</span>:
ab78acc6 498 <input type="number" class="rows-to-add" value="20">
ea87f1d3 499 <button class="more" data-translate>Show</button>
3af2954a 500
ab78acc6 501 <hr>
3af2954a 502
ab78acc6
IC
503 <div class="row">
504 <div class="col-md-12">
ea87f1d3
IC
505 <h2 data-translate>More info</h2>
506 <h3>BIP39 <span class="small" data-translate>Mnemonic code for generating deterministic keys</span></h3>
507 <p data-translate-html>
ab78acc6
IC
508 Read more at the
509 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
510 </p>
ea87f1d3
IC
511 <h3>BIP32 <span class="small" data-translate>Hierarchical Deterministic Wallets</span></h3>
512 <p data-translate-html>
ab78acc6
IC
513 Read more at the
514 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
ea87f1d3
IC
515 </p>
516 <p data-translate-html>
517 See the demo at
ab78acc6
IC
518 <a href="http://bip32.org/" target="_blank">bip32.org</a>
519 </p>
ea87f1d3
IC
520 <h3>BIP44 <span class="small" data-translate>Multi-Account Hierarchy for Deterministic Wallets</span></h3>
521 <p data-translate-html>
ab78acc6
IC
522 Read more at the
523 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
524 </p>
ea87f1d3 525 <h3 data-translate>Private Keys</h3>
ab78acc6 526 <p>
ea87f1d3
IC
527 <span data-translate-html>
528 Use private keys at
529 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>.
530 </span>
531 <span data-translate>Be careful - it can be easy to make mistakes if you don't know what you're doing.</span>
ab78acc6 532 </p>
ea87f1d3 533 <h3 id="entropy-notes" data-translate>Entropy</h3>
c6624d51 534 <p>
ea87f1d3
IC
535 <span data-translate-html>
536 Entropy values must be sourced from a
537 <a href="https://en.wikipedia.org/wiki/Random_number_generation" target="_blank">strong source of randomness</a>.
538 </span>
539 <span data-translate>This means flipping a fair coin, rolling a fair dice, noise measurements etc.</span>
540 <span data-translate-html>
541 Do <strong>NOT</strong> use phrases from books, lyrics from songs, your birthday or steet address,
542 keyboard mashing, or anything you <i>think</i> is random, because chances are overwhelming it isn't
543 random enough for the needs of this tool.
544 </span>
c6624d51 545 </p>
434caecd
IC
546 <p>
547 <strong><span data-translate>Do not store entropy.</span></strong>
548 </p>
549 <p>
550 <span data-translate>Storing entropy (such as keeping a deck of cards in a specific shuffled order) is unreliable compared to storing a mnemonic.</span>
551 <span data-translate>Instead of storing entropy, store the mnemonic generated from the entropy.</span>
552 <span data-translate-html><a href="https://en.wikipedia.org/wiki/Steganography#Physical" target="_blank">Steganography</a> may be beneficial when storing the mnemonic.</span>
553 </p>
c6624d51 554 <p>
ea87f1d3
IC
555 <span data-translate-html>
556 The random mnemonic generator on this page uses a
557 <a href="https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues" target="_blank">cryptographically secure random number generator</a>.
558 </span>
559 <span data-translate>The built in random generator can generally be trusted more than your own intuition about randomness.</span>
560 <span data-translate>If cryptographic randomness isn't available in your browser, this page will show a warning and the generate button will not work.</span>
561 <span data-translate>In that case you might choose to use your own source of entropy.</span>
c6624d51
IC
562 </p>
563 <p>
ea87f1d3 564 <a href="https://bitcointalk.org/index.php?topic=311000.msg3345309#msg3345309" target="_blank" data-translate>You are not a good source of entropy.</a>
c6624d51 565 </p>
52da415f
IC
566 <h3 data-translate>License</h3>
567 <p>
568 <span data-translate-html>Please refer to <a href="https://github.com/iancoleman/bip39/blob/master/LICENSE" target="_blank">the software license</a> for more detail.
569 </span>
570 </p>
571 <p data-translate>The software is provided "as is", without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software.</p>
ab78acc6
IC
572 </div>
573 </div>
3af2954a 574
ab78acc6 575 <hr>
3af2954a 576
ab78acc6
IC
577 <div class="row">
578 <div class="col-md-12">
3af2954a 579
ea87f1d3 580 <h2 data-translate>Offline Usage</h2>
3af2954a 581
ea87f1d3 582 <p data-translate>
ab78acc6
IC
583 You can use this tool without having to be online.
584 </p>
ea87f1d3 585 <p data-translate>
ab78acc6
IC
586 In your browser, select file save-as, and save this page
587 as a file.
588 </p>
ea87f1d3 589 <p data-translate>
ab78acc6
IC
590 Double-click that file to open it in a browser
591 on any offline computer.
592 </p>
593 <p>
ea87f1d3
IC
594 <span data-translate>Alternatively, download the file from the repository</span>
595 -
596 <a href="https://github.com/iancoleman/bip39">https://github.com/iancoleman/bip39</a>
597 </p>
3af2954a 598
ab78acc6
IC
599 </div>
600 </div>
3af2954a 601
ab78acc6 602 <hr>
3af2954a 603
ab78acc6
IC
604 <div class="row">
605 <div class="col-md-12">
3af2954a 606
ea87f1d3 607 <h2 data-translate>This project is 100% open-source code</h2>
3af2954a 608
ab78acc6 609 <p>
ea87f1d3
IC
610 <span data-translate>Get the source code from the repository</span>
611 -
b630f83d
IC
612 <a href="https://github.com/iancoleman/bip39" target="_blank">
613 https://github.com/iancoleman/bip39
ab78acc6
IC
614 </a>
615 </p>
3af2954a 616
ea87f1d3 617 <h3 data-translate>Libraries</h3>
3af2954a 618
ab78acc6
IC
619 <p>
620 <span>BitcoinJS - </span>
621 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
622 https://github.com/bitcoinjs/bitcoinjs-lib
623 </a>
624 </p>
3af2954a 625
ab78acc6
IC
626 <p>
627 <span>jsBIP39 - </span>
628 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
629 https://github.com/iancoleman/jsbip39
630 </a>
631 </p>
3af2954a 632
ab78acc6
IC
633 <p>
634 <span>sjcl - </span>
635 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
636 https://github.com/bitwiseshiftleft/sjcl
637 </a>
638 </p>
3af2954a 639
ab78acc6
IC
640 <p>
641 <span>jQuery - </span>
642 <a href="https://jquery.com/" target="_blank">
643 https://jquery.com/
644 </a>
645 </p>
3af2954a 646
ab78acc6
IC
647 <p>
648 <span>Twitter Bootstrap - </span>
649 <a href="http://getbootstrap.com/" target="_blank">
650 http://getbootstrap.com/
651 </a>
652 </p>
3af2954a 653
ab78acc6
IC
654 </div>
655 </div>
3af2954a 656
ab78acc6 657 </div>
3af2954a 658
e00964cc 659 <div class="qr-container hidden">
52da415f
IC
660 <div class="qr-hint bg-primary hidden" data-translate>Click field to hide QR</div>
661 <div class="qr-hint bg-primary" data-translate>Click field to show QR</div>
662 <div class="qr-hider hidden">
663 <div class="qr-image"></div>
664 <div class="qr-warning bg-primary" data-translate>Caution: Scanner may keep history</div>
665 </div>
e00964cc
IC
666 </div>
667
ab78acc6
IC
668 <div class="feedback-container">
669 <div class="feedback">Loading...</div>
670 </div>
3af2954a 671
ab78acc6
IC
672 <script type="text/template" id="address-row-template">
673 <tr>
674 <td class="index"><span></span></td>
e00964cc
IC
675 <td class="address"><span data-show-qr></span></td>
676 <td class="pubkey"><span data-show-qr></span></td>
677 <td class="privkey"><span data-show-qr></span></td>
ab78acc6
IC
678 </tr>
679 </script>
8b095871
IC
680 <script>// From
681// https://raw.githubusercontent.com/inexorabletash/polyfill/a6bc6ced78160c994f76a909b6ff6bbbab3d43de/es6.js
682// Required for ethereumjs-utils.js when run in phantomjs-2.1.1
683// but is not required in any modern browsers.
684// For more information, see
685// https://www.bountysource.com/issues/38485709-error-rendering-plot-with-phantomjs
686
687//----------------------------------------------------------------------
688//
689// ECMAScript 2015 Polyfills
690//
691//----------------------------------------------------------------------
563e401a 692
8b095871
IC
693(function (global) {
694 "use strict";
695
696 // Set this to always override native implementations, for testing
697 // the polyfill in browsers with partial/full ES2015 support.
698 var OVERRIDE_NATIVE_FOR_TESTING = false;
699
700 var undefined = (void 0); // Paranoia
701
702 // Helpers
703
704 function strict(o) {
705 return o === global ? undefined : o;
706 }
707
708 function hook(o, p, f) {
709 var op = o[p];
710 console.assert(typeof op === 'function', 'Hooking a non-function');
711 o[p] = function() {
712 var o = strict(this);
713 var r = f.apply(o, arguments);
714 return r !== undefined ? r : op.apply(o, arguments);
715 };
716 }
717
718 function isSymbol(s) {
719 return (typeof s === 'symbol') || ('Symbol' in global && s instanceof global.Symbol);
720 }
721
722 function getPropertyDescriptor(target, name) {
723 var desc = Object.getOwnPropertyDescriptor(target, name);
724 var proto = Object.getPrototypeOf(target);
725 while (!desc && proto) {
726 desc = Object.getOwnPropertyDescriptor(proto, name);
727 proto = Object.getPrototypeOf(proto);
563e401a 728 }
8b095871
IC
729 return desc;
730 }
563e401a 731
8b095871
IC
732 var enqueue = (function(nativePromise, nativeSetImmediate) {
733 if (nativePromise)
734 return function(job) { nativePromise.resolve().then(function() { job(); }); };
735 if (nativeSetImmediate)
736 return function(job) { nativeSetImmediate(job); };
737 return function(job) { setTimeout(job, 0); };
738 }(global['Promise'], global['setImmediate']));
563e401a 739
8b095871
IC
740 function define(o, p, v, override) {
741 if (p in o && !override && !OVERRIDE_NATIVE_FOR_TESTING)
742 return;
743
744 if (typeof v === 'function') {
745 // Sanity check that functions are appropriately named (where possible)
746 console.assert(isSymbol(p) || !('name' in v) || v.name === p || v.name === p + '_', 'Expected function name "' + p.toString() + '", was "' + v.name + '"');
747 Object.defineProperty(o, p, {
748 value: v,
749 configurable: true,
750 enumerable: false,
751 writable: true
752 });
563e401a 753 } else {
8b095871
IC
754 Object.defineProperty(o, p, {
755 value: v,
756 configurable: false,
757 enumerable: false,
758 writable: false
759 });
563e401a 760 }
8b095871 761 }
563e401a 762
8b095871
IC
763 function set_internal(o, p, v) {
764 Object.defineProperty(o, p, {
765 value: v,
766 configurable: false,
767 enumerable: false,
768 writable: true
769 });
770 }
563e401a 771
8b095871
IC
772 // Snapshot intrinsic functions
773 var $isNaN = global.isNaN,
774 $parseInt = global.parseInt,
775 $parseFloat = global.parseFloat;
776
777 var E = Math.E,
778 LOG10E = Math.LOG10E,
779 LOG2E = Math.LOG2E,
780 abs = Math.abs,
781 ceil = Math.ceil,
782 exp = Math.exp,
783 floor = Math.floor,
784 log = Math.log,
785 max = Math.max,
786 min = Math.min,
787 pow = Math.pow,
788 random = Math.random,
789 sqrt = Math.sqrt;
790
791 var orig_match = String.prototype.match,
792 orig_replace = String.prototype.replace,
793 orig_search = String.prototype.search,
794 orig_split = String.prototype.split;
795
796 // These are used for implementing the polyfills, but not exported.
797
798 // Inspired by https://gist.github.com/1638059
799 /** @constructor */
800 function EphemeronTable() {
801 var secretKey = ObjectCreate(null);
802
803 function conceal(o) {
804 var oValueOf = o.valueOf, secrets = ObjectCreate(null);
805 Object.defineProperty(o, 'valueOf', {
806 value: (function(secretKey) {
807 return function (k) {
808 return (k === secretKey) ? secrets : oValueOf.apply(o, arguments);
809 };
810 }(secretKey)),
811 configurable: true,
812 writeable: true,
813 enumerable: false
814 });
815 return secrets;
816 }
563e401a 817
8b095871
IC
818 function reveal(o) {
819 var v = typeof o.valueOf === 'function' && o.valueOf(secretKey);
820 return v === o ? null : v;
821 }
822
823 return {
824 clear: function() {
825 secretKey = ObjectCreate(null);
826 },
827 remove: function(key) {
828 var secrets = reveal(key);
829 if (secrets && HasOwnProperty(secrets, 'value')) {
830 delete secrets.value;
831 return true;
832 }
833 return false;
834 },
835 get: function(key, defaultValue) {
836 var secrets = reveal(key);
837 return (secrets && HasOwnProperty(secrets, 'value')) ? secrets.value : defaultValue;
838 },
839 has: function(key) {
840 var secrets = reveal(key);
841 return Boolean(secrets && HasOwnProperty(secrets, 'value'));
842 },
843 set: function(key, value) {
844 var secrets = reveal(key) || conceal(key);
845 secrets.value = value;
563e401a 846 }
8b095871
IC
847 };
848 }
563e401a 849
8b095871 850 var empty = Object.create(null);
563e401a 851
8b095871
IC
852 //----------------------------------------------------------------------
853 //
854 // ECMAScript 2015
855 // http://www.ecma-international.org/ecma-262/6.0/
856 //
857 //----------------------------------------------------------------------
563e401a 858
8b095871
IC
859 // ---------------------------------------
860 // 19.4 Symbol Objects
861 // ---------------------------------------
563e401a 862
8b095871
IC
863 // NOTE: Symbols are defined here - out of spec order - since we need the
864 // properties and prototype to be populated for other polyfills.
563e401a 865
8b095871 866 // NOTE: Not secure, nor is obj[$$symbol] hidden from Object.keys()
563e401a 867
8b095871
IC
868 var symbolForKey;
869 (function() {
870 var secret = Object.create(null);
871 var symbolMap = {};
872 symbolForKey = function(k) {
873 return symbolMap[k];
874 };
563e401a 875
8b095871 876 var GlobalSymbolRegistry = [];
563e401a 877
8b095871
IC
878 function unique(bits) {
879 return Array(bits + 1).join('x').replace(/x/g, function() {
880 return random() < 0.5 ? '\u200C' : '\u200D'; // JWNJ / ZWJ
881 });
882 }
563e401a 883
8b095871
IC
884 // 19.4.1 The Symbol Constructor
885 // 19.4.1.1 Symbol ( description=undefined )
886 function Symbol(description) {
887 if (!(this instanceof Symbol)) return new Symbol(description, secret);
888 if (this instanceof Symbol && arguments[1] !== secret) throw TypeError();
563e401a 889
8b095871
IC
890 var descString = description === undefined ? undefined : String(description);
891
892 set_internal(this, '[[SymbolData]]', unique(128));
893 set_internal(this, '[[Description]]', descString);
894
895 symbolMap[this] = this;
896 return this;
897 }
898
899 if (!('Symbol' in global) || OVERRIDE_NATIVE_FOR_TESTING)
900 global.Symbol = Symbol;
901
902 // 19.4.2 Properties of the Symbol Constructor
903
904 // 19.4.2.1 Symbol.for (key)
905 define(Symbol, 'for', function for_(key) {
906 var stringKey = String(key);
907 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
908 var e = GlobalSymbolRegistry[i];
909 if (SameValue(e['[[key]]'], stringKey)) return e['[[symbol]]'];
563e401a 910 }
8b095871
IC
911 var newSymbol = Symbol(key);
912 GlobalSymbolRegistry.push({'[[key]]': stringKey, '[[symbol]]': newSymbol});
913 return newSymbol;
914 });
563e401a 915
8b095871
IC
916 // 19.4.2.2 Symbol.hasInstance
917 // 19.4.2.3 Symbol.isConcatSpreadable
563e401a 918
8b095871
IC
919 // 19.4.2.4 Symbol.iterator
920 define(global.Symbol, 'iterator', global.Symbol('Symbol.iterator'));
563e401a 921
8b095871
IC
922 // 19.4.2.5 Symbol.keyFor (sym)
923 define(Symbol, 'keyFor', function keyFor(sym) {
924 if (!(sym instanceof Symbol)) throw TypeError();
925 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
926 var e = GlobalSymbolRegistry[i];
927 if (SameValue(e['[[symbol]]'], sym)) return e['[[key]]'];
928 }
929 return undefined;
930 });
563e401a 931
8b095871
IC
932 // 19.4.2.6 Symbol.match
933 define(global.Symbol, 'match', global.Symbol('Symbol.match'));
563e401a 934
8b095871 935 // 19.4.2.7 Symbol.prototype
563e401a 936
8b095871
IC
937 // 19.4.2.8 Symbol.replace
938 define(global.Symbol, 'replace', global.Symbol('Symbol.replace'));
563e401a 939
8b095871
IC
940 // 19.4.2.9 Symbol.search
941 define(global.Symbol, 'search', global.Symbol('Symbol.search'));
563e401a 942
8b095871 943 // 19.4.2.10 Symbol.species
563e401a 944
8b095871
IC
945 // 19.4.2.11 Symbol.search
946 define(global.Symbol, 'split', global.Symbol('Symbol.split'));
563e401a 947
8b095871 948 // 19.4.2.12 Symbol.toPrimitive
563e401a 949
8b095871
IC
950 // 19.4.2.13 Symbol.toStringTag
951 define(global.Symbol, 'toStringTag', global.Symbol('Symbol.toStringTag'));
952
953 // 19.4.2.14 Symbol.unscopables
954
955 // 19.4.3 Properties of the Symbol Prototype Object
956 // 19.4.3.1 Symbol.prototype.constructor
957
958 // 19.4.3.2 Symbol.prototype.toString ( )
959 Object.defineProperty(Symbol.prototype, 'toString', {
960 value: function toString() {
961 var s = strict(this);
962 var desc = s['[[Description]]'];
963 return 'Symbol(' + (desc === undefined ? '' : desc) + s['[[SymbolData]]'] + ')';
964 },
965 configurable: true, writeable: true, enumerable: false });
966
967 // 19.4.3.3 Symbol.prototype.valueOf ( )
968 Object.defineProperty(Symbol.prototype, 'valueOf', {
969 value: function valueOf() {
970 // To prevent automatic string conversion:
971 throw TypeError();
972
973 // Spec has approximately the following:
974 //var s = strict(this);
975 //if (Type(s) === 'symbol') return s;
976 //if (Type(s) !== 'object') throw TypeError();
977 //if (!('[[SymbolData]]' in s)) throw TypeError();
978 //return s['[[SymbolData]]'];
979 },
980 configurable: true, writeable: true, enumerable: false });
981
982 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
983 // (Done later to polyfill partial implementations)
984
985 // 19.4.4 Properties of Symbol Instances
986 }());
987
988 console.assert(typeof global.Symbol() === 'symbol' || symbolForKey(String(global.Symbol('x'))));
989
990 // Defined here so that other prototypes can reference it
991 // 25.1.2 The %IteratorPrototype% Object
992 var $IteratorPrototype$ = {};
993
994 //----------------------------------------
995 // 6 ECMAScript Data Types and Values
996 //----------------------------------------
997
998 // 6.1 ECMAScript Language Types
999
1000 // "Type(x)" is used as shorthand for "the type of x"...
1001 function Type(v) {
1002 switch (typeof v) {
1003 case 'undefined': return 'undefined';
1004 case 'boolean': return 'boolean';
1005 case 'number': return 'number';
1006 case 'string': return 'string';
1007 case 'symbol': return 'symbol';
1008 default:
1009 if (v === null) return 'null';
1010 if (v instanceof global.Symbol) return 'symbol';
1011 return 'object';
563e401a 1012 }
8b095871 1013 }
563e401a 1014
8b095871
IC
1015 // 6.1.5.1 Well-Known Symbols
1016 var $$iterator = global.Symbol.iterator,
1017 $$match = global.Symbol.match,
1018 $$replace = global.Symbol.replace,
1019 $$search = global.Symbol.search,
1020 $$split = global.Symbol.split,
1021 $$toStringTag = global.Symbol.toStringTag;
563e401a 1022
8b095871
IC
1023 //----------------------------------------
1024 // 7 Abstract Operations
1025 //----------------------------------------
1026
1027 //----------------------------------------
1028 // 7.1 Type Conversion
1029 //----------------------------------------
1030
1031 // 7.1.1 ToPrimitive ( input [, PreferredType] )
1032 // just use valueOf()
1033
1034 // 7.1.2 ToBoolean ( argument )
1035 // just use Boolean()
1036
1037 // 7.1.3 ToNumber ( argument )
1038 // just use Number()
1039
1040 // 7.1.4 ToInteger ( argument )
1041 function ToInteger(n) {
1042 n = Number(n);
1043 if ($isNaN(n)) return 0;
1044 if (n === 0 || n === Infinity || n === -Infinity) return n;
1045 return ((n < 0) ? -1 : 1) * floor(abs(n));
563e401a 1046 }
8b095871
IC
1047
1048 // 7.1.5 ToInt32 ( argument )
1049 function ToInt32(v) { return v >> 0; }
1050
1051 // 7.1.6 ToUint32 ( argument )
1052 function ToUint32(v) { return v >>> 0; }
1053
1054 // 7.1.7 ToInt16 ( argument )
1055 function ToInt16(v) { return (v << 16) >> 16; }
1056
1057 // 7.1.8 ToUint16 ( argument )
1058 function ToUint16(v) { return v & 0xFFFF; }
1059
1060 // 7.1.9 ToInt8 ( argument )
1061 function ToInt8(v) { return (v << 24) >> 24; }
1062
1063 // 7.1.10 ToUint8 ( argument )
1064 function ToUint8(v) { return v & 0xFF; }
1065
1066 // 7.1.11 ToUint8Clamp ( argument )
1067 function ToUint8Clamp(argument) {
1068 var number = Number(argument);
1069 if ($isNaN(number)) return 0;
1070 if (number <= 0) return 0;
1071 if (number >= 255) return 255;
1072 var f = floor(number);
1073 if ((f + 0.5) < number) return f + 1;
1074 if (number < (f + 0.5)) return f;
1075 if (f % 2) return f + 1;
1076 return f;
563e401a 1077 }
8b095871
IC
1078
1079 // 7.1.12 ToString ( argument )
1080 // just use String()
1081
1082 // 7.1.13 ToObject ( argument )
1083 function ToObject(v) {
1084 if (v === null || v === undefined) throw TypeError();
1085 return Object(v);
563e401a 1086 }
563e401a 1087
8b095871
IC
1088 // 7.1.14 ToPropertyKey ( argument )
1089 function ToPropertyKey(v) {
1090 return String(v);
1091 }
3af2954a 1092
8b095871
IC
1093 // 7.1.15 ToLength ( argument )
1094 function ToLength(v) {
1095 var len = ToInteger(v);
1096 if (len <= 0) return 0;
1097 if (len === Infinity) return 0x20000000000000 - 1; // 2^53-1
1098 return min(len, 0x20000000000000 - 1); // 2^53-1
ab78acc6 1099 }
3af2954a 1100
8b095871 1101 // 7.1.16 CanonicalNumericIndexString ( argument )
3af2954a 1102
8b095871
IC
1103 //----------------------------------------
1104 // 7.2 Testing and Comparison Operations
1105 //----------------------------------------
3af2954a 1106
8b095871
IC
1107 // 7.2.1 RequireObjectCoercible ( argument )
1108 // 7.2.2 IsArray ( argument )
3af2954a 1109
8b095871
IC
1110 // 7.2.3 IsCallable ( argument )
1111 function IsCallable(o) { return typeof o === 'function'; }
3af2954a 1112
8b095871
IC
1113 // 7.2.4 IsConstructor ( argument )
1114 function IsConstructor(o) {
1115 // Hacks for Safari 7 TypedArray XXXConstructor objects
1116 if (/Constructor/.test(Object.prototype.toString.call(o))) return true;
1117 if (/Function/.test(Object.prototype.toString.call(o))) return true;
1118 // TODO: Can this be improved on?
1119 return typeof o === 'function';
3af2954a 1120 }
8b095871
IC
1121
1122 // 7.2.5 IsExtensible (O)
1123 // 7.2.6 IsInteger ( argument )
1124
1125 // 7.2.7 IsPropertyKey ( argument )
1126 function IsPropertyKey(argument) {
1127 if (Type(argument) === 'string') return true;
1128 if (Type(argument) === 'symbol') return true;
1129 return false;
3af2954a
IC
1130 }
1131
8b095871
IC
1132 // 7.2.8 IsRegExp ( argument )
1133 // 7.2.5 IsConstructor ( argument )
3af2954a 1134
8b095871
IC
1135 // 7.2.9 SameValue(x, y)
1136 function SameValue(x, y) {
1137 if (typeof x !== typeof y) return false;
1138 switch (typeof x) {
1139 case 'undefined':
1140 return true;
1141 case 'number':
1142 if (x !== x && y !== y) return true;
1143 if (x === 0 && y === 0) return 1/x === 1/y;
1144 return x === y;
1145 case 'boolean':
1146 case 'string':
1147 case 'object':
1148 default:
1149 return x === y;
1150 }
1151 }
3af2954a 1152
8b095871
IC
1153 // 7.2.10 SameValueZero(x, y)
1154 function SameValueZero(x, y) {
1155 if (typeof x !== typeof y) return false;
1156 switch (typeof x) {
1157 case 'undefined':
1158 return true;
1159 case 'number':
1160 if (x !== x && y !== y) return true;
1161 return x === y;
1162 case 'boolean':
1163 case 'string':
1164 case 'object':
1165 default:
1166 return x === y;
1167 }
1168 }
3af2954a 1169
8b095871
IC
1170 //----------------------------------------
1171 // 7.3 Operations on Objects
1172 //----------------------------------------
3af2954a 1173
8b095871
IC
1174 // 7.3.1 Get (O, P)
1175 // - just use o.p or o[p]
3af2954a 1176
8b095871
IC
1177 // 7.3.2 GetV (V, P)
1178 function GetV(v, p) {
1179 var o = ToObject(v);
1180 return o[p];
1181 }
3af2954a 1182
8b095871
IC
1183 // 7.3.3 Set (O, P, V, Throw)
1184 // - just use o.p = v or o[p] = v
3af2954a 1185
3af2954a 1186
3af2954a 1187
3af2954a 1188
8b095871
IC
1189 // 7.3.9 GetMethod (O, P)
1190 function GetMethod(o, p) {
1191 var func = GetV(o, p);
1192 if (func === undefined || func === null) return undefined;
1193 if (!IsCallable(func)) throw TypeError();
1194 return func;
ab78acc6 1195 }
8b095871
IC
1196
1197 // 7.3.10 HasProperty (O, P)
1198 function HasProperty(o, p) {
1199 while (o) {
1200 if (Object.prototype.hasOwnProperty.call(o, p)) return true;
1201 if (Type(o) !== 'object') return false;
1202 o = Object.getPrototypeOf(o);
ab78acc6 1203 }
8b095871 1204 return false;
ab78acc6 1205 }
8b095871
IC
1206
1207 // 7.3.11 HasOwnProperty (O, P)
1208 function HasOwnProperty(o, p) {
1209 return Object.prototype.hasOwnProperty.call(o, p);
ab78acc6 1210 }
3af2954a 1211
8b095871
IC
1212 //----------------------------------------
1213 // 7.4 Operations on Iterator Objects
1214 //----------------------------------------
3af2954a 1215
8b095871
IC
1216 // 7.4.1 GetIterator ( obj, method )
1217 function GetIterator(obj, method) {
1218 if (arguments.length < 2)
1219 method = GetMethod(obj, $$iterator);
1220 var iterator = method.call(obj);
1221 if (Type(iterator) !== 'object') throw TypeError();
1222 return iterator;
3af2954a
IC
1223 }
1224
8b095871
IC
1225 // 7.4.2 IteratorNext ( iterator, value )
1226 function IteratorNext(iterator, value) {
1227 if (arguments.length < 2)
1228 var result = iterator.next();
1229 else
1230 result = iterator.next(value);
1231 if (Type(result) !== 'object') throw TypeError();
1232 return result;
1233 }
3af2954a 1234
8b095871
IC
1235 // 7.4.3 IteratorComplete ( iterResult )
1236 function IteratorComplete(iterResult) {
1237 console.assert(Type(iterResult) === 'object');
1238 return Boolean(iterResult.done);
1239 }
3af2954a 1240
8b095871
IC
1241 // 7.4.4 IteratorValue ( iterResult )
1242 function IteratorValue(iterResult) {
1243 console.assert(Type(iterResult) === 'object');
1244 return iterResult.value;
1245 }
1246
1247 // 7.4.5 IteratorStep ( iterator )
1248 function IteratorStep( iterator, value ) {
1249 var result = IteratorNext(iterator, value);
1250 var done = result['done'];
1251 if (Boolean(done) === true) return false;
1252 return result;
1253 }
1254
1255 // 7.4.6 IteratorClose( iterator, completion )
1256 function IteratorClose( iterator, completion ) {
1257 console.assert(Type(iterator) === 'object');
1258 var _return = GetMethod(iterator, 'return');
1259 if (_return === undefined) return completion;
1260 try {
1261 var innerResult = _return[iterator]();
1262 } catch (result) {
1263 // TODO: If completion.[[type]] is throw, return completion
1264 return result;
1265 }
1266 if (Type(innerResult) !== 'object') throw TypeError();
1267 return completion;
1268 }
1269
1270 // 7.4.7 CreateIterResultObject (value, done)
1271 function CreateIterResultObject(value, done) {
1272 console.assert(Type(done) === 'boolean');
1273 var obj = {};
1274 obj["value"] = value;
1275 obj["done"] = done;
1276 return obj;
1277 }
1278
1279 // 7.4.8 CreateListIterator (list)
1280 // 7.4.8.1 ListIterator next( )
1281 // 7.4.9 CreateCompoundIterator ( iterator1, iterator2 )
1282 // 7.4.9.1 CompoundIterator next( )
1283
1284 //----------------------------------------
1285 // 8 Executable Code and Execution Contexts
1286 //----------------------------------------
1287
1288 //----------------------------------------
1289 // 8.4 Jobs and Job Queues
1290 //----------------------------------------
1291
1292 // 8.4.1 EnqueueJob ( queueName, job, arguments)
1293 function EnqueueJob(queueName, job, args) {
1294 var fn = function() { job.apply(undefined, args); };
1295 enqueue(fn);
1296 }
1297
1298 // 8.4.2 NextJob result
1299 function NextJob(result) {
1300 // no-op
1301 }
1302
1303 //----------------------------------------
1304 // 9 Ordinary and Exotic Objects Behaviors
1305 //----------------------------------------
1306
1307 // 9.1.11 [[Enumerate]] ()
1308 function Enumerate(obj) {
1309 var e = [];
1310 if (Object(obj) !== obj) return e;
1311 var visited = new Set;
1312 while (obj !== null) {
1313 Object.getOwnPropertyNames(obj).forEach(function(name) {
1314 if (!visited.has(name)) {
1315 var desc = Object.getOwnPropertyDescriptor(obj, name);
1316 if (desc) {
1317 visited.add(name);
1318 if (desc.enumerable) e.push(name);
1319 }
1320 }
1321 });
1322 obj = Object.getPrototypeOf(obj);
1323 }
1324 return e[$$iterator]();
1325 }
1326
1327 // 9.1.12 [[OwnPropertyKeys]] ( )
1328 function OwnPropertyKeys(o) {
1329 return Object.getOwnPropertyNames(o);
1330 }
1331
1332 // 9.1.13 ObjectCreate(proto, internalSlotsList)
1333 function ObjectCreate(proto, internalSlotsList) {
1334 return Object.create(proto, internalSlotsList);
1335 }
1336
1337 // ---------------------------------------
1338 // 19 Fundamental Objects
1339 // ---------------------------------------
1340
1341 // ---------------------------------------
1342 // 19.1 Object Objects
1343 // ---------------------------------------
1344
1345 // 19.1.1 The Object Constructor
1346 // 19.1.1.1 Object ( [ value ] )
1347 // 19.1.2 Properties of the Object Constructor
1348 // 19.1.2.1 Object.assign ( target, ...sources )
1349 define(
1350 Object, 'assign',
1351 function assign(target, /*...*/sources) {
1352 var to = ToObject(target);
1353 if (arguments.length < 2) return to;
1354
1355 var sourcesIndex = 1;
1356 while (sourcesIndex < arguments.length) {
1357 var nextSource = arguments[sourcesIndex++];
1358 if (nextSource === undefined || nextSource === null) {
1359 var keys = [];
1360 } else {
1361 var from = ToObject(nextSource);
1362 keys = OwnPropertyKeys(from);
1363 }
1364 for (var keysIndex = 0; keysIndex < keys.length; ++keysIndex) {
1365 var nextKey = keys[keysIndex];
1366 var desc = Object.getOwnPropertyDescriptor(from, nextKey);
1367 if (desc !== undefined && desc.enumerable) {
1368 var propValue = from[nextKey];
1369 to[nextKey] = propValue;
1370 }
1371 }
1372 }
1373 return to;
1374 });
1375
1376 // 19.1.2.2 Object.create ( O [ , Properties ] )
1377 // 19.1.2.3 Object.defineProperties ( O, Properties )
1378 // 19.1.2.4 Object.defineProperty ( O, P, Attributes )
1379 // 19.1.2.5 Object.freeze ( O )
1380 // 19.1.2.6 Object.getOwnPropertyDescriptor ( O, P )
1381
1382 (function() {
1383 var nativeSymbols = (typeof global.Symbol() === 'symbol'),
1384 $getOwnPropertyNames = Object.getOwnPropertyNames,
1385 $keys = Object.keys,
1386 $window_names = (typeof window === 'object' ? $getOwnPropertyNames(window) : []);
1387
1388 function isStringKey(k) { return !symbolForKey(k); }
1389
1390 // 19.1.2.7 Object.getOwnPropertyNames ( O )
1391 define(
1392 Object, 'getOwnPropertyNames',
1393 function getOwnPropertyNames(o) {
1394 if (Object.prototype.toString.call(o) === '[object Window]') {
1395 // Workaround for cross-realm calling by IE itself.
1396 // https://github.com/inexorabletash/polyfill/issues/96
1397 try {
1398 return $getOwnPropertyNames(o).filter(isStringKey);
1399 } catch (_) {
1400 return $window_names.slice();
1401 }
1402 }
1403 return $getOwnPropertyNames(o).filter(isStringKey);
1404 }, !nativeSymbols);
1405
1406 // 19.1.2.8 Object.getOwnPropertySymbols ( O )
1407 define(
1408 Object, 'getOwnPropertySymbols',
1409 function getOwnPropertySymbols(o) {
1410 return $getOwnPropertyNames(o).filter(symbolForKey).map(symbolForKey);
1411 }, !nativeSymbols);
1412
1413 // 19.1.2.14 Object.keys ( O )
1414 define(
1415 Object, 'keys',
1416 function keys(o) {
1417 return $keys(o).filter(isStringKey);
1418 }, !nativeSymbols);
1419 }());
1420
1421 // 19.1.2.9 Object.getPrototypeOf ( O )
1422 // 19.1.2.10 Object.is ( value1, value2 )
1423 define(
1424 Object, 'is',
1425 function is(value1, value2) {
1426 return SameValue(value1, value2);
1427 });
1428
1429 // 19.1.2.11 Object.isExtensible ( O )
1430 // 19.1.2.12 Object.isFrozen ( O )
1431 // 19.1.2.13 Object.isSealed ( O )
1432
1433 // 19.1.2.14 Object.keys ( O )
1434 // see above
1435
1436 // 19.1.2.15 Object.preventExtensions ( O )
1437 // 19.1.2.16 Object.prototype
1438 // 19.1.2.17 Object.seal ( O )
1439
1440 // 19.1.2.18 Object.setPrototypeOf ( O, proto )
1441 define(
1442 Object, 'setPrototypeOf',
1443 function setPrototypeOf(o, proto) {
1444 if (Type(o) !== 'object') throw TypeError();
1445 if (Type(proto) !== 'object' && Type(proto) !== 'null') throw TypeError();
1446 o.__proto__ = proto;
1447 return o;
1448 }
1449 );
1450
1451 // 19.1.3 Properties of the Object Prototype Object
1452 // 19.1.3.1 Object.prototype.constructor
1453 // 19.1.3.2 Object.prototype.hasOwnProperty ( V )
1454 // 19.1.3.3 Object.prototype.isPrototypeOf ( V )
1455 // 19.1.3.4 Object.prototype.propertyIsEnumerable ( V )
1456 // 19.1.3.5 Object.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
1457 // 19.1.3.6 Object.prototype.toString ( )
1458 hook(Object.prototype, 'toString',
1459 function() {
1460 var o = strict(this);
1461 if (o === Object(o) && $$toStringTag in o) {
1462 return '[object ' + o[$$toStringTag] + ']';
1463 }
1464 return undefined;
1465 });
1466
1467 // 19.1.3.7 Object.prototype.valueOf ( )
1468 // 19.1.4 Properties of Object Instances
1469
1470 // ---------------------------------------
1471 // 19.2 Function Objects
1472 // ---------------------------------------
1473
1474 // 19.2.1 The Function Constructor
1475 // 19.2.1.1 Function ( p1, p2, … , pn, body )
1476 // 19.2.2 Properties of the Function Constructor
1477 // 19.2.2.1 Function.length
1478 // 19.2.2.2 Function.prototype
1479 // 19.2.3 Properties of the Function Prototype Object
1480 // 19.2.3.1 Function.prototype.apply ( thisArg, argArray )
1481 // 19.2.3.2 Function.prototype.bind ( thisArg , ...args)
1482 // 19.2.3.3 Function.prototype.call (thisArg , ...args)
1483 // 19.2.3.4 Function.prototype.constructor
1484 // 19.2.3.5 Function.prototype.toString ( )
1485 // 19.2.3.6 Function.prototype[@@hasInstance] ( V )
1486 // 19.2.4 Function Instances
1487 // 19.2.4.1 length
1488 // 19.2.4.2 name
1489 // 19.2.4.3 prototype
1490
1491 // (No polyfillable changes from ES5)
1492
1493 // ---------------------------------------
1494 // 19.3 Boolean Objects
1495 // ---------------------------------------
1496
1497 // 19.3.1 The Boolean Constructor
1498 // 19.3.1.1 Boolean ( value )
1499 // 19.3.2 Properties of the Boolean Constructor
1500 // 19.3.2.1 Boolean.prototype
1501 // 19.3.3 Properties of the Boolean Prototype Object
1502 // 19.3.3.1 Boolean.prototype.constructor
1503 // 19.3.3.2 Boolean.prototype.toString ( )
1504 // 19.3.3.3 Boolean.prototype.valueOf ( )
1505 // 19.3.4 Properties of Boolean Instances
1506
1507 // (No polyfillable changes from ES5)
1508
1509 // ---------------------------------------
1510 // 19.4 Symbol Objects
1511 // ---------------------------------------
1512
1513 // Moved earlier in this script, so that other polyfills can depend on them.
1514
1515 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
1516 define(global.Symbol.prototype, global.Symbol.toStringTag, 'Symbol');
1517
1518 // ---------------------------------------
1519 // 19.5 Error Objects
1520 // ---------------------------------------
1521
1522 // 19.5.1 The Error Constructor
1523 // 19.5.1.1 Error ( message )
1524 // 19.5.1.2 new Error( ...argumentsList )
1525 // 19.5.2 Properties of the Error Constructor
1526 // 19.5.2.1 Error.prototype
1527 // 19.5.3 Properties of the Error Prototype Object
1528 // 19.5.3.1 Error.prototype.constructor
1529 // 19.5.3.2 Error.prototype.message
1530 // 19.5.3.3 Error.prototype.name
1531 // 19.5.3.4 Error.prototype.toString ( )
1532 // 19.5.4 Properties of Error Instances
1533 // 19.5.5 Native Error Types Used in This Standard
1534 // 19.5.5.1 EvalError
1535 // 19.5.5.2 RangeError
1536 // 19.5.5.3 ReferenceError
1537 // 19.5.5.4 SyntaxError
1538 // 19.5.5.5 TypeError
1539 // 19.5.5.6 URIError
1540 // 19.5.6 NativeError Object Structure
1541 // 19.5.6.1 NativeError Constructors
1542 // 19.5.6.1.1 NativeError ( message )
1543 // 19.5.6.1.2 new NativeError ( ...argumentsList )
1544 // 19.5.6.2 Properties of the NativeError Constructors
1545 // 19.5.6.2.1 NativeError.prototype
1546 // 19.5.6.3 Properties of the NativeError Prototype Objects
1547 // 19.5.6.4 Properties of NativeError Instances
1548
1549 // (No polyfillable changes from ES5)
1550
1551 // ---------------------------------------
1552 // 20 Numbers and Dates
1553 // ---------------------------------------
1554
1555 // ---------------------------------------
1556 // 20.1 Number Objects
1557 // ---------------------------------------
1558
1559 // 20.1.1 The Number Constructor
1560 // 20.1.1.1 Number ( [ value ] )
1561 // 20.1.1.2 new Number ( ...argumentsList )
1562 // 20.1.2 Properties of the Number Constructor
1563
1564 // 20.1.2.1 Number.EPSILON
1565 define(
1566 Number, 'EPSILON',
1567 (function () {
1568 var next, result;
1569 for (next = 1; 1 + next !== 1; next = next / 2)
1570 result = next;
1571 return result;
1572 }()));
1573
1574 // 20.1.2.2 Number.isFinite ( number )
1575 define(
1576 Number, 'isFinite',
1577 function isFinite(number) {
1578 if (Type(number) !== 'number') return false;
1579 if (number !== number || number === +Infinity || number === -Infinity) return false;
1580 return true;
1581 });
1582
1583 // 20.1.2.3 Number.isInteger ( number )
1584 define(
1585 Number, 'isInteger',
1586 function isInteger(number) {
1587 if (Type(number) !== 'number') return false;
1588 if (number !== number || number === +Infinity || number === -Infinity) return false;
1589 var integer = ToInteger(number);
1590 if (integer !== number) return false;
1591 return true;
1592 });
1593
1594 // 20.1.2.4 Number.isNaN ( number )
1595 define(
1596 Number, 'isNaN',
1597 function isNaN(number) {
1598 if (Type(number) !== 'number') return false;
1599 if (number !== number) return true;
1600 return false;
1601 });
1602
1603 // 20.1.2.5 Number.isSafeInteger ( number )
1604 define(
1605 Number, 'isSafeInteger',
1606 function isSafeInteger(number) {
1607 if (Type(number) !== 'number') return false;
1608 if (number !== number || number === +Infinity || number === -Infinity) return false;
1609 var integer = ToInteger(number);
1610 if (integer !== number) return false;
1611 if (abs(integer) <= (0x20000000000000 - 1)) // 2^53-1
1612 return true;
1613 return false;
1614 });
1615
1616 // 20.1.2.6 Number.MAX_SAFE_INTEGER
1617 define(
1618 Number, 'MAX_SAFE_INTEGER',
1619 9007199254740991); // 2^53-1
1620
1621 // 20.1.2.7 Number.MAX_VALUE
1622
1623 // 20.1.2.8 Number.MIN_SAFE_INTEGER
1624 define(
1625 Number, 'MIN_SAFE_INTEGER',
1626 -9007199254740991); // -2^53+1
1627
1628 // 20.1.2.9 Number.MIN_VALUE
1629 // 20.1.2.10 Number.NaN
1630 // 20.1.2.11 Number.NEGATIVE_INFINITY
1631
1632 // 20.1.2.12 Number.parseFloat ( string )
1633 define(Number, 'parseFloat', $parseFloat);
1634
1635 // 20.1.2.13 Number.parseInt ( string, radix )
1636 define(Number, 'parseInt', $parseInt);
1637
1638 // 20.1.2.14 Number.POSITIVE_INFINITY
1639 // 20.1.2.15 Number.prototype
1640
1641 // 20.1.3 Properties of the Number Prototype Object
1642 // 20.1.3.1 Number.prototype.constructor
1643 // 20.1.3.2 Number.prototype.toExponential ( fractionDigits )
1644 // 20.1.3.3 Number.prototype.toFixed ( fractionDigits )
1645 // 20.1.3.4 Number.prototype.toLocaleString( [ reserved1 [ , reserved2 ] ])
1646 // 20.1.3.5 Number.prototype.toPrecision ( precision )
1647 // 20.1.3.6 Number.prototype.toString ( [ radix ] )
1648 // 20.1.3.7 Number.prototype.valueOf ( )
1649 // 20.1.4 Properties of Number Instances
1650
1651 // ---------------------------------------
1652 // 20.2 The Math Object
1653 // ---------------------------------------
1654
1655 // 20.2.1 Value Properties of the Math Object
1656 // 20.2.1.1 Math.E
1657 // 20.2.1.2 Math.LN10
1658 // 20.2.1.3 Math.LN2
1659 // 20.2.1.4 Math.LOG10E
1660 // 20.2.1.5 Math.LOG2E
1661 // 20.2.1.6 Math.PI
1662 // 20.2.1.7 Math.SQRT1_2
1663 // 20.2.1.8 Math.SQRT2
1664
1665 // 20.2.1.9 Math [ @@toStringTag ]
1666 define(Math, $$toStringTag, 'Math');
1667
1668 // 20.2.2 Function Properties of the Math Object
1669 // 20.2.2.1 Math.abs ( x )
1670 // 20.2.2.2 Math.acos ( x )
1671
1672 // 20.2.2.3 Math.acosh(x)
1673 define(
1674 Math, 'acosh',
1675 function acosh(x) {
1676 x = Number(x);
1677 return log(x + sqrt(x * x - 1));
1678 });
1679
1680 // 20.2.2.4 Math.asin ( x )
1681
1682 // 20.2.2.5 Math.asinh( x )
1683 define(
1684 Math, 'asinh',
1685 function asinh(x) {
1686 x = Number(x);
1687 if (SameValue(x, -0)) {
1688 return x;
1689 }
1690 var s = sqrt(x * x + 1);
1691 return (s === -x) ? log(0) : log(x + s);
1692 });
1693
1694 // 20.2.2.6 Math.atan ( x )
1695
1696 // 20.2.2.7 Math.atanh( x )
1697 define(
1698 Math, 'atanh',
1699 function atanh(x) {
1700 x = Number(x);
1701 return (x === 0) ? x : log((1 + x) / (1 - x)) / 2;
1702 });
1703
1704 // 20.2.2.8 Math.atan2 ( y, x )
1705
1706 // 20.2.2.9 Math.cbrt ( x )
1707 define(
1708 Math, 'cbrt',
1709 function cbrt(x) {
1710 x = Number(x);
1711 if ($isNaN(x/x)) {
1712 return x;
1713 }
1714 var r = pow(abs(x), 1/3);
1715 var t = x/r/r;
1716 return r + (r * (t-r) / (2*r + t));
1717 });
1718
1719 // 20.2.2.10 Math.ceil ( x )
1720
1721 // 20.2.2.11 Math.clz32 ( x )
1722 define(
1723 Math, 'clz32',
1724 function clz32(x) {
1725 function clz8(x) {
1726 return (x & 0xf0) ? (x & 0x80 ? 0 : x & 0x40 ? 1 : x & 0x20 ? 2 : 3) :
1727 (x & 0x08 ? 4 : x & 0x04 ? 5 : x & 0x02 ? 6 : x & 0x01 ? 7 : 8);
1728 }
1729 x = ToUint32(x);
1730 return x & 0xff000000 ? clz8(x >> 24) :
1731 x & 0xff0000 ? clz8(x >> 16) + 8 :
1732 x & 0xff00 ? clz8(x >> 8) + 16 : clz8(x) + 24;
1733 });
1734
1735
1736
1737 // 20.2.2.12 Math.cos ( x )
1738
1739 // 20.2.2.13 Math.cosh ( x )
1740 define(
1741 Math, 'cosh',
1742 function cosh(x) {
1743 x = Number(x);
1744 return (pow(E, x) + pow(E, -x)) / 2;
1745 });
1746
1747 // 20.2.2.14 Math.exp ( x )
1748
1749 // 20.2.2.15 Math.expm1 ( x )
1750 define(
1751 Math, 'expm1',
1752 function expm1(x) {
1753 x = Number(x);
1754 // from: http://www.johndcook.com/cpp_log1p.html
1755 if (SameValue(x, -0)) {
1756 return -0;
1757 } else if (abs(x) < 1e-5) {
1758 return x + 0.5 * x * x; // two terms of Taylor expansion
1759 } else {
1760 return exp(x) - 1;
1761 }
1762 });
1763
1764 // 20.2.2.16 Math.floor ( x )
1765
1766 // 20.2.2.17 Math.fround ( x )
1767 define(
1768 Math, 'fround',
1769 function fround(x) {
1770 if ($isNaN(x)) {
1771 return NaN;
1772 }
1773 if (1/x === +Infinity || 1/x === -Infinity || x === +Infinity || x === -Infinity) {
1774 return x;
1775 }
1776 return (new Float32Array([x]))[0];
1777 });
1778
1779 // 20.2.2.18 Math.hypot ( value1 [, value2 [ ... ] ] )
1780 define(
1781 Math, 'hypot',
1782 function hypot() {
1783 var values = [];
1784 var m = 0, sawNaN = false;
1785 for (var i = 0; i < arguments.length; ++i) {
1786 var n = abs(Number(arguments[i]));
1787 if (n === Infinity) return n;
1788 if (n !== n) sawNaN = true;
1789 if (n > m) m = n;
1790 values[i] = n;
1791 }
1792 if (sawNaN) return NaN;
1793 if (m === 0) return +0;
1794 var sum = +0;
1795 for (i = 0; i < values.length; ++i) {
1796 var r = values[i] / m;
1797 sum = sum + r * r;
1798 }
1799 return m * sqrt(sum);
1800 });
1801
1802 // 20.2.2.19 Math.imul ( x, y )
1803 define(
1804 Math, 'imul',
1805 function imul(x, y) {
1806 var a = ToUint32(x);
1807 var b = ToUint32(y);
1808 // (slow but accurate)
1809 var ah = (a >>> 16) & 0xffff;
1810 var al = a & 0xffff;
1811 var bh = (b >>> 16) & 0xffff;
1812 var bl = b & 0xffff;
1813 return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0)|0);
1814 }, ('imul' in Math && Math.imul(1, 0x80000000) === 0) // Safari 7 bug
1815 );
1816
1817 // 20.2.2.20 Math.log ( x )
1818
1819 // 20.2.2.21 Math.log1p ( x )
1820 define(
1821 Math, 'log1p',
1822 function log1p(x) {
1823 x = Number(x);
1824 // from: http://www.johndcook.com/cpp_expm1.html
1825 if (x < -1) {
1826 return NaN;
1827 } else if (SameValue(x, -0)) {
1828 return -0;
1829 } else if (abs(x) > 1e-4) {
1830 return log(1 + x);
1831 } else {
1832 return (-0.5 * x + 1) * x;
1833 }
1834 });
1835
1836 // 20.2.2.22 Math.log10 ( x )
1837 define(
1838 Math, 'log10',
1839 function log10(x) {
1840 x = Number(x);
1841 return log(x) * LOG10E;
1842 });
1843
1844 // 20.2.2.23 Math.log2 ( x )
1845 define(
1846 Math, 'log2',
1847 function log2(x) {
1848 x = Number(x);
1849 return log(x) * LOG2E;
1850 });
1851
1852 // 20.2.2.24 Math.max ( value1, value2 , ...values )
1853 // 20.2.2.25 Math.min ( value1, value2 , ...values )
1854 // 20.2.2.26 Math.pow ( x, y )
1855 // 20.2.2.27 Math.random ( )
1856 // 20.2.2.28 Math.round ( x )
1857
1858 // 20.2.2.29 Math.sign(x)
1859 define(
1860 Math, 'sign',
1861 function sign(x) {
1862 x = Number(x);
1863 return x < 0 ? -1 : x > 0 ? 1 : x;
1864 });
1865
1866 // 20.2.2.30 Math.sin ( x )
1867
1868 // 20.2.2.31 Math.sinh( x )
1869 define(
1870 Math, 'sinh',
1871 function sinh(x) {
1872 x = Number(x);
1873 return SameValue(x, -0) ? x : (pow(E, x) - pow(E, -x)) / 2;
1874 });
1875
1876 // 20.2.2.32 Math.sqrt ( x )
1877 // 20.2.2.33 Math.tan ( x )
1878
1879 // 20.2.2.34 Math.tanh ( x )
1880 define(
1881 Math, 'tanh',
1882 function tanh(x) {
1883 x = Number(x);
1884 var n = pow(E, 2 * x) - 1,
1885 d = pow(E, 2 * x) + 1;
1886 if (SameValue(x, -0))
1887 return x;
1888 return (n === d) ? 1 : n / d; // Handle Infinity/Infinity
1889 });
1890
1891 // 20.2.2.35 Math.trunc ( x )
1892 define(
1893 Math, 'trunc',
1894 function trunc(x) {
1895 x = Number(x);
1896 return $isNaN(x) ? NaN :
1897 x < 0 ? ceil(x) : floor(x);
1898 });
1899
1900 // ---------------------------------------
1901 // 20.3 Date Objects
1902 // ---------------------------------------
1903
1904 // 20.3.1 Overview of Date Objects and Definitions of Abstract Operations
1905 // 20.3.1.1 Time Values and Time Range
1906 // 20.3.1.2 Day Number and Time within Day
1907 // 20.3.1.3 Year Number
1908 // 20.3.1.4 Month Number
1909 // 20.3.1.5 Date Number
1910 // 20.3.1.6 Week Day
1911 // 20.3.1.7 Local Time Zone Adjustment
1912 // 20.3.1.8 Daylight Saving Time Adjustment
1913 // 20.3.1.9 Local Time
1914 // 20.3.1.10 Hours, Minutes, Second, and Milliseconds
1915 // 20.3.1.11 MakeTime (hour, min, sec, ms)
1916 // 20.3.1.12 MakeDay (year, month, date)
1917 // 20.3.1.13 MakeDate (day, time)
1918 // 20.3.1.14 TimeClip (time)
1919 // 20.3.1.15 Date Time String Format
1920 // 20.3.1.15.1 Extended years
1921 // 20.3.2 The Date Constructor
1922 // 20.3.2.1 Date ( year, month [, date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
1923 // 20.3.2.2 Date ( value )
1924 // 20.3.2.3 Date ( )
1925 // 20.3.3 Properties of the Date Constructor
1926 // 20.3.3.1 Date.now ( )
1927 // 20.3.3.2 Date.parse (string)
1928 // 20.3.3.3 Date.prototype
1929 // 20.3.3.4 Date.UTC ( year, month [ , date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
1930 // 20.3.4 Properties of the Date Prototype Object
1931 // 20.3.4.1 Date.prototype.constructor
1932 // 20.3.4.2 Date.prototype.getDate ( )
1933 // 20.3.4.3 Date.prototype.getDay ( )
1934 // 20.3.4.4 Date.prototype.getFullYear ( )
1935 // 20.3.4.5 Date.prototype.getHours ( )
1936 // 20.3.4.6 Date.prototype.getMilliseconds ( )
1937 // 20.3.4.7 Date.prototype.getMinutes ( )
1938 // 20.3.4.8 Date.prototype.getMonth ( )
1939 // 20.3.4.9 Date.prototype.getSeconds ( )
1940 // 20.3.4.10 Date.prototype.getTime ( )
1941 // 20.3.4.11 Date.prototype.getTimezoneOffset ( )
1942 // 20.3.4.12 Date.prototype.getUTCDate ( )
1943 // 20.3.4.13 Date.prototype.getUTCDay ( )
1944 // 20.3.4.14 Date.prototype.getUTCFullYear ( )
1945 // 20.3.4.15 Date.prototype.getUTCHours ( )
1946 // 20.3.4.16 Date.prototype.getUTCMilliseconds ( )
1947 // 20.3.4.17 Date.prototype.getUTCMinutes ( )
1948 // 20.3.4.18 Date.prototype.getUTCMonth ( )
1949 // 20.3.4.19 Date.prototype.getUTCSeconds ( )
1950 // 20.3.4.20 Date.prototype.setDate ( date )
1951 // 20.3.4.21 Date.prototype.setFullYear ( year [ , month [ , date ] ] )
1952 // 20.3.4.22 Date.prototype.setHours ( hour [ , min [ , sec [ , ms ] ] ] )
1953 // 20.3.4.23 Date.prototype.setMilliseconds ( ms )
1954 // 20.3.4.24 Date.prototype.setMinutes ( min [ , sec [ , ms ] ] )
1955 // 20.3.4.25 Date.prototype.setMonth ( month [ , date ] )
1956 // 20.3.4.26 Date.prototype.setSeconds ( sec [ , ms ] )
1957 // 20.3.4.27 Date.prototype.setTime ( time )
1958 // 20.3.4.28 Date.prototype.setUTCDate ( date )
1959 // 20.3.4.29 Date.prototype.setUTCFullYear ( year [ , month [ , date ] ] )
1960 // 20.3.4.30 Date.prototype.setUTCHours ( hour [ , min [ , sec [ , ms ] ] ] )
1961 // 20.3.4.31 Date.prototype.setUTCMilliseconds ( ms )
1962 // 20.3.4.32 Date.prototype.setUTCMinutes ( min [ , sec [, ms ] ] )
1963 // 20.3.4.33 Date.prototype.setUTCMonth ( month [ , date ] )
1964 // 20.3.4.34 Date.prototype.setUTCSeconds ( sec [ , ms ] )
1965 // 20.3.4.35 Date.prototype.toDateString ( )
1966 // 20.3.4.36 Date.prototype.toISOString ( )
1967 // 20.3.4.37 Date.prototype.toJSON ( key )
1968 // 20.3.4.38 Date.prototype.toLocaleDateString ( [ reserved1 [ , reserved2 ] ] )
1969 // 20.3.4.39 Date.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
1970 // 20.3.4.40 Date.prototype.toLocaleTimeString ( [ reserved1 [ , reserved2 ] ] )
1971 // 20.3.4.41 Date.prototype.toString ( )
1972 // 20.3.4.42 Date.prototype.toTimeString ( )
1973 // 20.3.4.43 Date.prototype.toUTCString ( )
1974 // 20.3.4.44 Date.prototype.valueOf ( )
1975 // 20.3.4.45 Date.prototype [ @@toPrimitive ] ( hint )
1976 // 20.3.5 Properties of Date Instances
1977
1978 // (No polyfillable changes from ES5)
1979
1980 // ---------------------------------------
1981 // 21 Text Processing
1982 // ---------------------------------------
1983
1984 var string_regexp_dispatch = (function() {
1985 var faux = {}, secret = Symbol();
1986 faux[Symbol.match] = function() { return secret; };
1987 return ("").match(faux) === secret;
1988 }());
1989
1990 // 21.1 String Objects
1991 // 21.1.1 The String Constructor
1992 // 21.1.1.1 String ( value )
1993 // 21.1.2 Properties of the String Constructor
1994 // 21.1.2.1 String.fromCharCode ( ...codeUnits )
1995
1996 // 21.1.2.2 String.fromCodePoint ( ...codePoints )
1997 define(
1998 String, 'fromCodePoint',
1999 function fromCodePoint(/*...codePoints*/) {
2000 var codePoints = arguments,
2001 length = codePoints.length,
2002 elements = [],
2003 nextIndex = 0;
2004 while (nextIndex < length) {
2005 var next = codePoints[nextIndex];
2006 var nextCP = Number(next);
2007 if (!SameValue(nextCP, ToInteger(nextCP)) ||
2008 nextCP < 0 || nextCP > 0x10FFFF) {
2009 throw RangeError('Invalid code point ' + nextCP);
2010 }
2011 if (nextCP < 0x10000) {
2012 elements.push(String.fromCharCode(nextCP));
2013 } else {
2014 nextCP -= 0x10000;
2015 elements.push(String.fromCharCode((nextCP >> 10) + 0xD800));
2016 elements.push(String.fromCharCode((nextCP % 0x400) + 0xDC00));
2017 }
2018 nextIndex += 1;
2019 }
2020 return elements.join('');
2021 });
2022
2023 // 21.1.2.3 String.prototype
2024
2025 // 21.1.2.4 String.raw ( template , ...substitutions )
2026 define(
2027 String, 'raw',
2028 function raw(template /*, ...substitutions*/) {
2029 var substitutions = [].slice.call(arguments, 1);
2030
2031 var cooked = Object(template);
2032 var rawValue = cooked['raw'];
2033 var raw = Object(rawValue);
2034 var len = raw['length'];
2035 var literalSegments = ToLength(len);
2036 if (literalSegments <= 0) return '';
2037 var stringElements = [];
2038 var nextIndex = 0;
2039 while (true) {
2040 var next = raw[nextIndex];
2041 var nextSeg = String(next);
2042 stringElements.push(nextSeg);
2043 if (nextIndex + 1 === literalSegments)
2044 return stringElements.join('');
2045 next = substitutions[nextIndex];
2046 var nextSub = String(next);
2047 stringElements.push(nextSub);
2048 nextIndex = nextIndex + 1;
2049 }
2050 });
2051
2052 // See https://githib.com/inexorabletash/uate for a more useful version.
2053
2054 // 21.1.3 Properties of the String Prototype Object
2055 // 21.1.3.1 String.prototype.charAt ( pos )
2056 // 21.1.3.2 String.prototype.charCodeAt ( pos )
2057
2058 // 21.1.3.3 String.prototype.codePointAt ( pos )
2059 define(
2060 String.prototype, 'codePointAt',
2061 function codePointAt(pos) {
2062 var o = strict(this);
2063 var s = String(o);
2064 var position = ToInteger(pos);
2065 var size = s.length;
2066 if (position < 0 || position >= size) return undefined;
2067 var first = s.charCodeAt(position);
2068 if (first < 0xD800 || first > 0xDBFF || position + 1 === size) return first;
2069 var second = s.charCodeAt(position + 1);
2070 if (second < 0xDC00 || second > 0xDFFF) return first;
2071 return ((first - 0xD800) * 1024) + (second - 0xDC00) + 0x10000;
2072 });
2073
2074 // 21.1.3.4 String.prototype.concat ( ...args )
2075 // 21.1.3.5 String.prototype.constructor
2076
2077 // 21.1.3.6 String.prototype.endsWith ( searchString [ , endPosition] )
2078 define(
2079 String.prototype, 'endsWith',
2080 function endsWith(searchString) {
2081 var endPosition = arguments[1];
2082
2083 var o = strict(this);
2084 var s = String(o);
2085 var searchStr = String(searchString);
2086 var len = s.length;
2087 var pos = (endPosition === undefined) ? len : ToInteger(endPosition);
2088 var end = min(max(pos, 0), len);
2089 var searchLength = searchStr.length;
2090 var start = end - searchLength;
2091 if (start < 0) return false;
2092 if (s.substring(start, start + searchLength) === searchStr) return true;
2093 return false;
2094 });
2095
2096 // 21.1.3.7 String.prototype.includes ( searchString [ , position ] )
2097 define(
2098 String.prototype, 'includes',
2099 function includes(searchString) {
2100 var position = arguments[1];
2101
2102 var o = strict(this);
2103 var s = String(o);
2104 var searchStr = String(searchString);
2105 var pos = ToInteger(position);
2106 var len = s.length;
2107 var start = min(max(pos, 0), len);
2108 return s.indexOf(searchStr, start) !== -1;
2109 });
2110
2111 // 21.1.3.8 String.prototype.indexOf ( searchString [ , position ] )
2112 // 21.1.3.9 String.prototype.lastIndexOf ( searchString [ , position ] )
2113 // 21.1.3.10 String.prototype.localeCompare ( that [, reserved1 [ , reserved2 ] ] )
2114 // 21.1.3.11 String.prototype.match ( regexp )
2115 define(
2116 String.prototype, 'match',
2117 function match(regexp) {
2118 var o = strict(this);
2119 var s = String(o);
2120 if (HasProperty(regexp, $$match)) var rx = regexp;
2121 else rx = new RegExp(regexp);
2122 return rx[$$match](s);
2123 }, !string_regexp_dispatch);
2124
2125 // 21.1.3.12 String.prototype.normalize ( [ form ] )
2126
2127 // Not practical due to table sizes; if needed, pull in:
2128 // https://github.com/walling/unorm/
2129
2130 // 21.1.3.13 String.prototype.repeat ( count )
2131 define(
2132 String.prototype, 'repeat',
2133 function repeat(count) {
2134 var o = strict(this);
2135 var s = String(o);
2136 var n = ToInteger(count);
2137 if (n < 0) throw RangeError();
2138 if (n === Infinity) throw RangeError();
2139 var t = new Array(n + 1).join(s);
2140 return t;
2141 });
2142
2143 // 21.1.3.14 String.prototype.replace (searchValue, replaceValue )
2144 define(
2145 String.prototype, 'replace',
2146 function replace(searchValue, replaceValue) {
2147 var o = strict(this);
2148 if (HasProperty(searchValue, $$replace))
2149 return searchValue[$$replace](o, replaceValue);
2150 return orig_replace.call(o, searchValue, replaceValue);
2151 }, !string_regexp_dispatch);
2152
2153 // 21.1.3.15 String.prototype.search ( regexp )
2154 define(
2155 String.prototype, 'search',
2156 function search(regexp) {
2157 var o = strict(this);
2158 var string = String(o);
2159 if (HasProperty(regexp, $$search)) var rx = regexp;
2160 else rx = new RegExp(regexp);
2161 return rx[$$search](string);
2162 }, !string_regexp_dispatch);
2163
2164 // 21.1.3.16 String.prototype.slice ( start, end )
2165 // 21.1.3.17 String.prototype.split ( separator, limit )
2166 define(
2167 String.prototype, 'split',
2168 function split(separator, limit) {
2169 var o = strict(this);
2170 if (HasProperty(separator, $$split))
2171 return separator[$$split](o, limit);
2172 return orig_split.call(o, separator, limit);
2173 }, !string_regexp_dispatch);
2174
2175 // 21.1.3.18 String.prototype.startsWith ( searchString [, position ] )
2176 define(
2177 String.prototype, 'startsWith',
2178 function startsWith(searchString) {
2179 var position = arguments[1];
2180
2181 var o = strict(this);
2182 var s = String(o);
2183 var searchStr = String(searchString);
2184 var pos = ToInteger(position);
2185 var len = s.length;
2186 var start = min(max(pos, 0), len);
2187 var searchLength = searchStr.length;
2188 if (searchLength + start > len) return false;
2189 if (s.substring(start, start + searchLength) === searchStr) return true;
2190 return false;
2191 });
2192
2193 // 21.1.3.19 String.prototype.substring ( start, end )
2194 // 21.1.3.20 String.prototype.toLocaleLowerCase ( [ reserved1 [ , reserved2 ] ] )
2195 // 21.1.3.21 String.prototype.toLocaleUpperCase ([ reserved1 [ , reserved2 ] ] )
2196 // 21.1.3.22 String.prototype.toLowerCase ( )
2197 // 21.1.3.23 String.prototype.toString ( )
2198 // 21.1.3.24 String.prototype.toUpperCase ( )
2199 // 21.1.3.25 String.prototype.trim ( )
2200 // 21.1.3.26 String.prototype.valueOf ( )
2201
2202 // 21.1.3.27 String.prototype [ @@iterator ]( )
2203 define(
2204 String.prototype, $$iterator,
2205 function entries() {
2206 return CreateStringIterator(this, 'value');
2207 });
2208
2209 // 21.1.4 Properties of String Instances
2210 // 21.1.4.1 length
2211
2212 // 21.1.5 String Iterator Objects
2213 /** @constructor */
2214 function StringIterator() {}
2215
2216 // 21.1.5.1 CreateStringIterator Abstract Operation
2217 function CreateStringIterator(string, kind) {
2218 var s = String(string);
2219 var iterator = new StringIterator;
2220 set_internal(iterator, '[[IteratedString]]', s);
2221 set_internal(iterator, '[[StringIteratorNextIndex]]', 0);
2222 set_internal(iterator, '[[StringIterationKind]]', kind);
2223 return iterator;
2224 }
2225
2226 // 21.1.5.2 The %StringIteratorPrototype% Object
2227 var $StringIteratorPrototype$ = Object.create($IteratorPrototype$);
2228 StringIterator.prototype = $StringIteratorPrototype$;
2229
2230 // 21.1.5.2.1 %StringIteratorPrototype%.next ( )
2231 define(
2232 $StringIteratorPrototype$, 'next',
2233 function next() {
2234 var o = ToObject(this);
2235 var s = String(o['[[IteratedString]]']),
2236 index = o['[[StringIteratorNextIndex]]'],
2237 len = s.length;
2238 if (index >= len) {
2239 set_internal(o, '[[StringIteratorNextIndex]]', Infinity);
2240 return CreateIterResultObject(undefined, true);
2241 }
2242 var cp = s.codePointAt(index);
2243 set_internal(o, '[[StringIteratorNextIndex]]', index + (cp > 0xFFFF ? 2 : 1));
2244 return CreateIterResultObject(String.fromCodePoint(cp), false);
2245 });
2246
2247 // 21.1.5.2.2 %StringIteratorPrototype% [ @@toStringTag ]
2248 define($StringIteratorPrototype$, $$toStringTag, 'String Iterator');
2249
2250 // 21.1.5.3 Properties of String Iterator Instances
2251
2252 // ---------------------------------------
2253 // 21.2 RegExp (Regular Expression) Objects
2254 // ---------------------------------------
2255
2256 // 21.2.1 Patterns
2257 // 21.2.2 Pattern Semantics
2258 // 21.2.2.1 Notation
2259 // 21.2.2.2 Pattern
2260 // 21.2.2.3 Disjunction
2261 // 21.2.2.4 Alternative
2262 // 21.2.2.5 Term
2263 // 21.2.2.6 Assertion
2264 // 21.2.2.7 Quantifier
2265 // 21.2.2.8 Atom
2266 // 21.2.2.9 AtomEscape
2267 // 21.2.2.10 CharacterEscape
2268 // 21.2.2.11 DecimalEscape
2269 // 21.2.2.12 CharacterClassEscape
2270 // 21.2.2.13 CharacterClass
2271 // 21.2.2.14 ClassRanges
2272 // 21.2.2.15 NonemptyClassRanges
2273 // 21.2.2.16 NonemptyClassRangesNoDash
2274 // 21.2.2.17 ClassAtom
2275 // 21.2.2.18 ClassAtomNoDash
2276 // 21.2.2.19 ClassEscape
2277 // 21.2.3 The RegExp Constructor
2278 // 21.2.3.1 RegExp ( pattern, flags )
2279 // 21.2.3.2 new RegExp( ...argumentsList )
2280 // 21.2.3.3 Abstract Operations for the RegExp Constructor
2281 // 21.2.4 Properties of the RegExp Constructor
2282 // 21.2.4.1 RegExp.prototype
2283 // 21.2.5 Properties of the RegExp Prototype Object
2284 // 21.2.5.1 RegExp.prototype.constructor
2285 // 21.2.5.2 RegExp.prototype.exec ( string )
2286
2287 // 21.2.5.3 get RegExp.prototype.flags
2288 if (!('flags' in RegExp.prototype)) {
2289 Object.defineProperty(
2290 RegExp.prototype, 'flags', {
2291 get: function() {
2292 var s = String(this);
2293 return s.substring(s.lastIndexOf('/') + 1);
2294 }
2295 });
2296 }
2297
2298 // 21.2.5.4 get RegExp.prototype.global
2299 // 21.2.5.5 get RegExp.prototype.ignoreCase
2300
2301 // 21.2.5.6 RegExp.prototype [ @@match ] ( string )
2302 define(RegExp.prototype, $$match, function(string) {
2303 var o = strict(this);
2304 return orig_match.call(string, o);
2305 });
2306
2307 // 21.2.5.7 get RegExp.prototype.multiline
2308
2309 // 21.2.5.8 RegExp.prototype [ @@replace ] ( string, replaceValue )
2310 define(RegExp.prototype, $$replace, function(string, replaceValue) {
2311 var o = strict(this);
2312 return orig_replace.call(string, o, replaceValue);
2313 });
2314
2315 // 21.2.5.9 RegExp.prototype [ @@search ] ( string )
2316 define(RegExp.prototype, $$search, function(string) {
2317 var o = strict(this);
2318 return orig_search.call(string, o);
2319 });
2320
2321 // 21.2.5.10 get RegExp.prototype.source
2322
2323 // 21.2.5.11 RegExp.prototype [ @@split ] ( string, limit )
2324 define(RegExp.prototype, $$split, function(string, limit) {
2325 var o = strict(this);
2326 return orig_split.call(string, o, limit);
2327 });
2328
2329 // 21.2.5.12 get RegExp.prototype.sticky
2330 // 21.2.5.13 RegExp.prototype.test( S )
2331 // 21.2.5.14 RegExp.prototype.toString ( )
2332 // 21.2.5.15 get RegExp.prototype.unicode
2333
2334 // 21.2.6 Properties of RegExp Instances
2335 // 21.2.6.1 lastIndex
2336
2337 // (No polyfillable changes from ES5)
2338
2339 // ---------------------------------------
2340 // 22 Indexed Collections
2341 // ---------------------------------------
2342
2343 // ---------------------------------------
2344 // 22.1 Array Objects
2345 // ---------------------------------------
2346
2347 // 22.1.1 The Array Constructor
2348 // 22.1.1.1 Array ( )
2349 // 22.1.1.2 Array (len)
2350 // 22.1.1.3 Array (...items )
2351
2352 // 22.1.2 Properties of the Array Constructor
2353
2354 // 22.1.2.1 Array.from ( items [ , mapfn [ , thisArg ] ] )
2355 define(
2356 Array, 'from',
2357 function from(items) {
2358 var mapfn = arguments[1];
2359 var thisArg = arguments[2];
2360
2361 var c = strict(this);
2362 if (mapfn === undefined) {
2363 var mapping = false;
2364 } else {
2365 if (!IsCallable(mapfn)) throw TypeError();
2366 var t = thisArg;
2367 mapping = true;
2368 }
2369 var usingIterator = GetMethod(items, $$iterator);
2370 if (usingIterator !== undefined) {
2371 if (IsConstructor(c)) {
2372 var a = new c();
2373 } else {
2374 a = new Array(0);
2375 }
2376 var iterator = GetIterator(items, usingIterator);
2377 var k = 0;
2378 while (true) {
2379 var next = IteratorStep(iterator);
2380 if (next === false) {
2381 a.length = k;
2382 return a;
2383 }
2384 var nextValue = IteratorValue(next);
2385 if (mapping)
2386 var mappedValue = mapfn.call(t, nextValue);
2387 else
2388 mappedValue = nextValue;
2389 a[k] = mappedValue;
2390 k += 1;
2391 }
2392 }
2393 var arrayLike = ToObject(items);
2394 var lenValue = arrayLike.length;
2395 var len = ToLength(lenValue);
2396 if (IsConstructor(c)) {
2397 a = new c(len);
2398 } else {
2399 a = new Array(len);
2400 }
2401 k = 0;
2402 while (k < len) {
2403 var kValue = arrayLike[k];
2404 if (mapping)
2405 mappedValue = mapfn.call(t, kValue, k);
2406 else
2407 mappedValue = kValue;
2408 a[k] = mappedValue;
2409 k += 1;
2410 }
2411 a.length = len;
2412 return a;
2413 });
2414
2415 // 22.1.2.2 Array.isArray ( arg )
2416
2417 // 22.1.2.3 Array.of ( ...items )
2418 define(
2419 Array, 'of',
2420 function of() {
2421 var items = arguments;
2422
2423 var lenValue = items.length;
2424 var len = ToUint32(lenValue);
2425 var c = strict(this), a;
2426 if (IsConstructor(c)) {
2427 a = new c(len);
2428 a = ToObject(a);
2429 } else {
2430 a = new Array(len);
2431 }
2432 var k = 0;
2433 while (k < len) {
2434 a[k] = items[k];
2435 k += 1;
2436 }
2437 a.length = len;
2438 return a;
2439 });
2440
2441 // 22.1.2.4 Array.prototype
2442 // 22.1.2.5 get Array [ @@species ]
2443 // 22.1.3 Properties of the Array Prototype Object
2444 // 22.1.3.1 Array.prototype.concat ( ...arguments )
2445 // 22.1.3.1.1 Runtime Semantics: IsConcatSpreadable ( O )
2446 // 22.1.3.2 Array.prototype.constructor
2447 // 22.1.3.3 Array.prototype.copyWithin (target, start [ , end ] )
2448 define(
2449 Array.prototype, 'copyWithin',
2450 function copyWithin(target, start/*, end*/) {
2451 var end = arguments[2];
2452
2453 var o = ToObject(this);
2454 var lenVal = o.length;
2455 var len = ToLength(lenVal);
2456 len = max(len, 0);
2457 var relativeTarget = ToInteger(target);
2458 var to;
2459 if (relativeTarget < 0)
2460 to = max(len + relativeTarget, 0);
2461 else
2462 to = min(relativeTarget, len);
2463 var relativeStart = ToInteger(start);
2464 var from;
2465 if (relativeStart < 0)
2466 from = max(len + relativeStart, 0);
2467 else
2468 from = min(relativeStart, len);
2469 var relativeEnd;
2470 if (end === undefined)
2471 relativeEnd = len;
2472 else
2473 relativeEnd = ToInteger(end);
2474 var final;
2475 if (relativeEnd < 0)
2476 final = max(len + relativeEnd, 0);
2477 else
2478 final = min(relativeEnd, len);
2479 var count = min(final - from, len - to);
2480 var direction;
2481 if (from < to && to < from + count) {
2482 direction = -1;
2483 from = from + count - 1;
2484 to = to + count - 1;
2485 } else {
2486 direction = 1;
2487 }
2488 while (count > 0) {
2489 var fromKey = String(from);
2490 var toKey = String(to);
2491 var fromPresent = HasProperty(o, fromKey);
2492 if (fromPresent) {
2493 var fromVal = o[fromKey];
2494 o[toKey] = fromVal;
2495 } else {
2496 delete o[toKey];
2497 }
2498 from = from + direction;
2499 to = to + direction;
2500 count = count - 1;
2501 }
2502 return o;
2503 });
2504
2505 // 22.1.3.4 Array.prototype.entries ( )
2506 var nativeArrayIteratorMethods =
2507 ('entries' in Array.prototype && 'next' in [].entries());
2508
2509 define(
2510 Array.prototype, 'entries',
2511 function entries() {
2512 return CreateArrayIterator(this, 'key+value');
2513 }, !nativeArrayIteratorMethods);
2514
2515 // 22.1.3.5 Array.prototype.every ( callbackfn [ , thisArg] )
2516
2517 // 22.1.3.6 Array.prototype.fill (value [ , start [ , end ] ] )
2518 define(
2519 Array.prototype, 'fill',
2520 function fill(value/*, start, end*/) {
2521 var start = arguments[1],
2522 end = arguments[2];
2523
2524 var o = ToObject(this);
2525 var lenVal = o.length;
2526 var len = ToLength(lenVal);
2527 len = max(len, 0);
2528 var relativeStart = ToInteger(start);
2529 var k;
2530 if (relativeStart < 0)
2531 k = max((len + relativeStart), 0);
2532 else
2533 k = min(relativeStart, len);
2534 var relativeEnd;
2535 if (end === undefined)
2536 relativeEnd = len;
2537 else
2538 relativeEnd = ToInteger(end);
2539 var final;
2540 if (relativeEnd < 0)
2541 final = max((len + relativeEnd), 0);
2542 else
2543 final = min(relativeEnd, len);
2544 while (k < final) {
2545 var pk = String(k);
2546 o[pk] = value;
2547 k += 1;
2548 }
2549 return o;
2550 });
2551
2552 // 22.1.3.7 Array.prototype.filter ( callbackfn [ , thisArg ] )
2553
2554 // 22.1.3.8 Array.prototype.find ( predicate [ , thisArg ] )
2555 define(
2556 Array.prototype, 'find',
2557 function find(predicate) {
2558 var o = ToObject(this);
2559 var lenValue = o.length;
2560 var len = ToInteger(lenValue);
2561 if (!IsCallable(predicate)) throw TypeError();
2562 var t = arguments.length > 1 ? arguments[1] : undefined;
2563 var k = 0;
2564 while (k < len) {
2565 var pk = String(k);
2566 var kPresent = HasProperty(o, pk);
2567 if (kPresent) {
2568 var kValue = o[pk];
2569 var testResult = predicate.call(t, kValue, k, o);
2570 if (Boolean(testResult)) {
2571 return kValue;
2572 }
2573 }
2574 ++k;
2575 }
2576 return undefined;
2577 });
2578
2579 // 22.1.3.9 Array.prototype.findIndex ( predicate [ , thisArg ] )
2580 define(
2581 Array.prototype, 'findIndex',
2582 function findIndex(predicate) {
2583 var o = ToObject(this);
2584 var lenValue = o.length;
2585 var len = ToLength(lenValue);
2586 if (!IsCallable(predicate)) throw TypeError();
2587 var t = arguments.length > 1 ? arguments[1] : undefined;
2588 var k = 0;
2589 while (k < len) {
2590 var pk = String(k);
2591 var kPresent = HasProperty(o, pk);
2592 if (kPresent) {
2593 var kValue = o[pk];
2594 var testResult = predicate.call(t, kValue, k, o);
2595 if (Boolean(testResult)) {
2596 return k;
2597 }
2598 }
2599 ++k;
2600 }
2601 return -1;
2602 });
2603
2604 // 22.1.3.10 Array.prototype.forEach ( callbackfn [ , thisArg ] )
2605 // 22.1.3.11 Array.prototype.indexOf ( searchElement [ , fromIndex ] )
2606 // 22.1.3.12 Array.prototype.join (separator)
2607
2608 // 22.1.3.13 Array.prototype.keys ( )
2609 define(
2610 Array.prototype, 'keys',
2611 function keys() {
2612 return CreateArrayIterator(this, 'key');
2613 }, !nativeArrayIteratorMethods);
2614
2615 // 22.1.3.14 Array.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
2616 // 22.1.3.15 Array.prototype.map ( callbackfn [ , thisArg ] )
2617 // 22.1.3.16 Array.prototype.pop ( )
2618 // 22.1.3.17 Array.prototype.push ( ...items )
2619 // 22.1.3.18 Array.prototype.reduce ( callbackfn [ , initialValue ] )
2620 // 22.1.3.19 Array.prototype.reduceRight ( callbackfn [ , initialValue ] )
2621 // 22.1.3.20 Array.prototype.reverse ( )
2622 // 22.1.3.21 Array.prototype.shift ( )
2623 // 22.1.3.22 Array.prototype.slice (start, end)
2624 // 22.1.3.23 Array.prototype.some ( callbackfn [ , thisArg ] )
2625 // 22.1.3.24 Array.prototype.sort (comparefn)
2626 // 22.1.3.25 Array.prototype.splice (start, deleteCount , ...items )
2627 // 22.1.3.26 Array.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
2628 // 22.1.3.27 Array.prototype.toString ( )
2629 // 22.1.3.28 Array.prototype.unshift ( ...items )
2630
2631 // 22.1.3.29 Array.prototype.values ( )
2632 define(
2633 Array.prototype, 'values',
2634 function values() {
2635 return CreateArrayIterator(this, 'value');
2636 }, !nativeArrayIteratorMethods);
2637
2638 // 22.1.3.30 Array.prototype [ @@iterator ] ( )
2639 define(
2640 Array.prototype, $$iterator,
2641 Array.prototype.values
2642 );
2643
2644 // 22.1.3.31 Array.prototype [ @@unscopables ]
2645 // 22.1.4 Properties of Array Instances
2646 // 22.1.4.1 length
2647
2648 // 22.1.5 Array Iterator Objects
2649 function ArrayIterator() {}
2650
2651 // 22.1.5.1 CreateArrayIterator Abstract Operation
2652 function CreateArrayIterator(array, kind) {
2653 var o = ToObject(array);
2654 var iterator = new ArrayIterator;
2655 set_internal(iterator, '[[IteratedObject]]', o);
2656 set_internal(iterator, '[[ArrayIteratorNextIndex]]', 0);
2657 set_internal(iterator, '[[ArrayIterationKind]]', kind);
2658 return iterator;
2659 }
2660
2661 // 22.1.5.2 The %ArrayIteratorPrototype% Object
2662 var $ArrayIteratorPrototype$ = Object.create($IteratorPrototype$);
2663 ArrayIterator.prototype = $ArrayIteratorPrototype$;
2664
2665 // 22.1.5.2.1 %ArrayIteratorPrototype%. next( )
2666 define(
2667 $ArrayIteratorPrototype$, 'next',
2668 function next() {
2669 var o = strict(this);
2670 if (Type(o) !== 'object') throw TypeError();
2671 var a = o['[[IteratedObject]]'],
2672 index = o['[[ArrayIteratorNextIndex]]'],
2673 itemKind = o['[[ArrayIterationKind]]'],
2674 lenValue = a.length,
2675 len = ToUint32(lenValue),
2676 elementKey,
2677 elementValue;
2678 if (itemKind.indexOf('sparse') !== -1) {
2679 var found = false;
2680 while (!found && index < len) {
2681 elementKey = String(index);
2682 found = HasProperty(a, elementKey);
2683 if (!found) {
2684 index += 1;
2685 }
2686 }
2687 }
2688 if (index >= len) {
2689 set_internal(o, '[[ArrayIteratorNextIndex]]', Infinity);
2690 return CreateIterResultObject(undefined, true);
2691 }
2692 elementKey = index;
2693 set_internal(o, '[[ArrayIteratorNextIndex]]', index + 1);
2694 if (itemKind.indexOf('value') !== -1)
2695 elementValue = a[elementKey];
2696 if (itemKind.indexOf('key+value') !== -1)
2697 return CreateIterResultObject([elementKey, elementValue], false);
2698 if (itemKind.indexOf('key') !== -1)
2699 return CreateIterResultObject(elementKey, false);
2700 if (itemKind === 'value')
2701 return CreateIterResultObject(elementValue, false);
2702 throw Error('Internal error');
2703 });
2704
2705 // 22.1.5.2.2 %ArrayIteratorPrototype% [ @@toStringTag ]
2706 define($ArrayIteratorPrototype$, $$toStringTag, 'Array Iterator');
2707
2708 // 22.1.5.3 Properties of Array Iterator Instances
2709
2710
2711 // ---------------------------------------
2712 // 22.2 TypedArray Objects
2713 // ---------------------------------------
2714
2715 // See typedarray.js for TypedArray polyfill
2716
2717 ['Int8Array', 'Uint8Array', 'Uint8ClampedArray',
2718 'Int16Array', 'Uint16Array',
2719 'Int32Array', 'Uint32Array',
2720 'Float32Array', 'Float64Array'].forEach(function ($TypedArrayName$) {
2721 if (!($TypedArrayName$ in global))
2722 return;
2723 var $TypedArray$ = global[$TypedArrayName$];
2724
2725 // 22.2.1 The %TypedArray% Intrinsic Object
2726 // 22.2.1.1 %TypedArray% ( length )
2727 // 22.2.1.2 %TypedArray% ( typedArray )
2728 // 22.2.1.3 %TypedArray% ( object )
2729 // 22.2.1.4 %TypedArray% ( buffer [ , byteOffset [ , length ] ] )
2730 // 22.2.1.5 %TypedArray% ( all other argument combinations )
2731 // 22.2.2 Properties of the %TypedArray% Intrinsic Object
2732
2733 // 22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
2734 define(
2735 $TypedArray$, 'from',
2736 function from(source) {
2737 var mapfn = arguments[1];
2738 var thisArg = arguments[2];
2739
2740 var c = strict(this);
2741 if (!IsConstructor(c)) throw TypeError();
2742 if (mapfn === undefined) {
2743 var mapping = false;
2744 } else {
2745 if (IsCallable(mapfn)) throw TypeError();
2746 var t = thisArg;
2747 mapping = true;
2748 }
2749 var usingIterator = GetMethod(source, $$iterator);
2750 if (usingIterator !== undefined) {
2751 var iterator = GetIterator(source, usingIterator);
2752 var values = [];
2753 var next = true;
2754 while (next !== false) {
2755 next = IteratorStep(iterator);
2756 if (next !== false) {
2757 var nextValue = IteratorValue(next);
2758 values.push(nextValue);
2759 }
2760 }
2761 var len = values.length;
2762 var newObj = new c(len);
2763 var k = 0;
2764 while (k < len) {
2765 var kValue = values.shift();
2766 if (mapping) {
2767 var mappedValue = mapfn.call(t, kValue);
2768 } else {
2769 mappedValue = kValue;
2770 }
2771 newObj[k] = mappedValue;
2772 ++k;
2773 }
2774 console.assert(values.length === 0);
2775 return newObj;
2776 }
2777 var arrayLike = ToObject(source);
2778 var lenValue = arrayLike.length;
2779 len = ToLength(lenValue);
2780 newObj = new c(len);
2781 k = 0;
2782 while (k < len) {
2783 kValue = arrayLike[k];
2784 if (mapping) {
2785 mappedValue = mapfn.call(t, kValue, k);
2786 } else {
2787 mappedValue = kValue;
2788 }
2789 newObj[k] = mappedValue;
2790 ++k;
2791 }
2792 return newObj;
2793 });
2794
2795 // 22.2.2.2 %TypedArray%.of ( ...items )
2796 define(
2797 $TypedArray$, 'of',
2798 function of() {
2799 var items = arguments;
2800
2801 var len = items.length;
2802 var c = strict(this);
2803 var newObj = new c(len);
2804 var k = 0;
2805 while (k < len) {
2806 newObj[k] = items[k];
2807 ++k;
2808 }
2809 return newObj;
2810 });
2811
2812 // 22.2.2.3 %TypedArray%.prototype
2813 // 22.2.2.4 get %TypedArray% [ @@species ]
2814 // 22.2.3 Properties of the %TypedArrayPrototype% Object
2815 // 22.2.3.1 get %TypedArray%.prototype.buffer
2816 // 22.2.3.2 get %TypedArray%.prototype.byteLength
2817 // 22.2.3.3 get %TypedArray%.prototype.byteOffset
2818 // 22.2.3.4 %TypedArray%.prototype.constructor
2819
2820 // 22.2.3.5 %TypedArray%.prototype.copyWithin (target, start [, end ] )
2821 define($TypedArray$.prototype, 'copyWithin', Array.prototype.copyWithin);
2822
2823 // 22.2.3.6 %TypedArray%.prototype.entries ( )
2824 define($TypedArray$.prototype, 'entries', Array.prototype.entries);
2825
2826 // 22.2.3.7 %TypedArray%.prototype.every ( callbackfn [ , thisArg ] )
2827 define($TypedArray$.prototype, 'every', Array.prototype.every);
2828
2829 // 22.2.3.8 %TypedArray%.prototype.fill (value [ , start [ , end ] ] )
2830 define(
2831 $TypedArray$.prototype, 'fill',
2832 //Array.prototype.fill // Doesn't work in Safari 7
2833 function fill(value/*, start, end*/) {
2834 var start = arguments[1],
2835 end = arguments[2];
2836
2837 var o = ToObject(this);
2838 var lenVal = o.length;
2839 var len = ToLength(lenVal);
2840 len = max(len, 0);
2841 var relativeStart = ToInteger(start);
2842 var k;
2843 if (relativeStart < 0) k = max((len + relativeStart), 0);
2844 else k = min(relativeStart, len);
2845 var relativeEnd;
2846 if (end === undefined) relativeEnd = len;
2847 else relativeEnd = ToInteger(end);
2848 var final;
2849 if (relativeEnd < 0) final = max((len + relativeEnd), 0);
2850 else final = min(relativeEnd, len);
2851 while (k < final) {
2852 var pk = String(k);
2853 o[pk] = value;
2854 k += 1;
2855 }
2856 return o;
2857 });
2858
2859 // 22.2.3.9 %TypedArray%.prototype.filter ( callbackfn [ , thisArg ] )
2860 define(
2861 $TypedArray$.prototype, 'filter',
2862 function filter(callbackfn) {
2863 var thisArg = arguments[1];
2864
2865 var o = ToObject(this);
2866 var lenVal = o.length;
2867 var len = ToLength(lenVal);
2868 if (!IsCallable(callbackfn)) throw TypeError();
2869 var t = thisArg;
2870 var c = o.constructor;
2871 var kept = [];
2872 var k = 0;
2873 var captured = 0;
2874 while (k < len) {
2875 var kValue = o[k];
2876 var selected = callbackfn.call(t, kValue, k, o);
2877 if (selected) {
2878 kept.push(kValue);
2879 ++captured;
2880 }
2881 ++k;
2882 }
2883 var a = new c(captured);
2884 var n = 0;
2885 for (var i = 0; i < kept.length; ++i) {
2886 var e = kept[i];
2887 a[n] = e;
2888 ++n;
2889 }
2890 return a;
2891 });
2892
2893 // 22.2.3.10 %TypedArray%.prototype.find (predicate [ , thisArg ] )
2894 define($TypedArray$.prototype, 'find', Array.prototype.find);
2895
2896 // 22.2.3.11 %TypedArray%.prototype.findIndex ( predicate [ , thisArg ] )
2897 define($TypedArray$.prototype, 'findIndex', Array.prototype.findIndex);
2898
2899 // 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
2900 define($TypedArray$.prototype, 'forEach', Array.prototype.forEach);
2901
2902 // 22.2.3.13 %TypedArray%.prototype.indexOf (searchElement [ , fromIndex ] )
2903 define($TypedArray$.prototype, 'indexOf', Array.prototype.indexOf);
2904
2905 // 22.2.3.14 %TypedArray%.prototype.join ( separator )
2906 define($TypedArray$.prototype, 'join', Array.prototype.join);
2907
2908 // 22.2.3.15 %TypedArray%.prototype.keys ( )
2909 define($TypedArray$.prototype, 'keys', Array.prototype.keys);
2910
2911 // 22.2.3.16 %TypedArray%.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
2912 define($TypedArray$.prototype, 'lastIndexOf', Array.prototype.lastIndexOf);
2913
2914 // 22.2.3.17 get %TypedArray%.prototype.length
2915
2916 // 22.2.3.18 %TypedArray%.prototype.map ( callbackfn [ , thisArg ] )
2917 define(
2918 $TypedArray$.prototype, 'map',
2919 function map(callbackfn) {
2920 var thisArg = arguments[1];
2921
2922 var o = ToObject(this);
2923 var lenValue = o.length;
2924 var len = ToLength(lenValue);
2925 if (!IsCallable(callbackfn)) throw TypeError();
2926 var t = thisArg;
2927 var a = undefined;
2928 var c = o.constructor;
2929 if (IsConstructor(c))
2930 a = new c(len);
2931 if (a === undefined)
2932 a = new Array(len);
2933 var k = 0;
2934 while (k < len) {
2935 var kPresent = HasProperty(o, k);
2936 if (kPresent) {
2937 var kValue = o[k];
2938 var mappedValue = callbackfn.call(t, kValue, k, o);
2939 a[k] = mappedValue;
2940 }
2941 ++k;
2942 }
2943 return a;
2944 });
2945
2946 // 22.2.3.19 %TypedArray%.prototype.reduce ( callbackfn [, initialValue] )
2947 define($TypedArray$.prototype, 'reduce', Array.prototype.reduce);
2948
2949 // 22.2.3.20 %TypedArray%.prototype.reduceRight ( callbackfn [, initialValue] )
2950 define($TypedArray$.prototype, 'reduceRight', Array.prototype.reduceRight);
2951
2952 // 22.2.3.21 %TypedArray%.prototype.reverse ( )
2953 define($TypedArray$.prototype, 'reverse', Array.prototype.reverse);
2954
2955 // 22.2.3.22 %TypedArray%.prototype.set ( overloaded [ , offset ])
2956 // 22.2.3.22.1 %TypedArray%.prototype.set (array [ , offset ] )
2957 // 22.2.3.22.2 %TypedArray%.prototype.set(typedArray [, offset ] )
2958
2959 // 22.2.3.23 %TypedArray%.prototype.slice ( start, end )
2960 define(
2961 $TypedArray$.prototype, 'slice',
2962 function slice(start, end) {
2963 var o = ToObject(this);
2964 var lenVal = o.length;
2965 var len = ToLength(lenVal);
2966 var relativeStart = ToInteger(start);
2967 var k = (relativeStart < 0) ? max(len + relativeStart, 0) : min(relativeStart, len);
2968 var relativeEnd = (end === undefined) ? len : ToInteger(end);
2969 var final = (relativeEnd < 0) ? max(len + relativeEnd, 0) : min(relativeEnd, len);
2970 var count = final - k;
2971 var c = o.constructor;
2972 if (IsConstructor(c)) {
2973 var a = new c(count);
2974 } else {
2975 throw TypeError();
2976 }
2977 var n = 0;
2978 while (k < final) {
2979 var kValue = o[k];
2980 a[n] = kValue;
2981 ++k;
2982 ++n;
2983 }
2984 return a;
2985 });
2986
2987 // 22.2.3.24 %TypedArray%.prototype.some ( callbackfn [ , thisArg ] )
2988 define($TypedArray$.prototype, 'some', Array.prototype.some);
2989
2990 // 22.2.3.25 %TypedArray%.prototype.sort ( comparefn )
2991 define(
2992 $TypedArray$.prototype, 'sort',
2993 function sort() {
2994 var comparefn = arguments[0];
2995
2996 function sortCompare(x, y) {
2997 console.assert(Type(x) === 'number' && Type(y) === 'number');
2998 if (x !== x && y !== y) return +0;
2999 if (x !== x) return 1;
3000 if (y !== y) return -1;
3001 if (comparefn !== undefined) {
3002 return comparefn(x, y);
3003 }
3004 if (x < y) return -1;
3005 if (x > y) return 1;
3006 return +0;
3007 }
3008 return Array.prototype.sort.call(this, sortCompare);
3009 });
3010
3011 // 22.2.3.26 %TypedArray%.prototype.subarray( [ begin [ , end ] ] )
3012 // 22.2.3.27 %TypedArray%.prototype.toLocaleString ([ reserved1 [ , reserved2 ] ])
3013 // 22.2.3.28 %TypedArray%.prototype.toString ( )
3014
3015 // 22.2.3.29 %TypedArray%.prototype.values ( )
3016 define($TypedArray$.prototype, 'values', Array.prototype.values);
3017
3018 // 22.2.3.30 %TypedArray%.prototype [ @@iterator ] ( )
3019 define(
3020 $TypedArray$.prototype, $$iterator,
3021 $TypedArray$.prototype.values
3022 );
3023
3024 // 22.2.3.31 get %TypedArray%.prototype [ @@toStringTag ]
3025 define($TypedArray$.prototype, $$toStringTag, $TypedArrayName$);
3026
3027 // 22.2.4 The TypedArray Constructors
3028 // 22.2.4.1TypedArray( ... argumentsList)
3029 // 22.2.5 Properties of the TypedArray Constructors
3030 // 22.2.5.1 TypedArray.BYTES_PER_ELEMENT
3031 // 22.2.5.2 TypedArray.prototype
3032 // 22.2.6 Properties of TypedArray Prototype Objects
3033 // 22.2.6.1 TypedArray.prototype.BYTES_PER_ELEMENT
3034 // 22.2.6.2 TypedArray.prototype.constructor
3035 // 22.2.7 Properties of TypedArray Instances
3036 });
3037
3038 // ---------------------------------------
3039 // 23 Keyed Collection
3040 // ---------------------------------------
3041
3042 // ---------------------------------------
3043 // 23.1 Map Objects
3044 // ---------------------------------------
3045
3046 (function() {
3047 // 23.1.1 The Map Constructor
3048
3049 // 23.1.1.1 Map ( [ iterable ] )
3050 /** @constructor */
3051 function Map(/*iterable*/) {
3052 var map = strict(this);
3053 var iterable = arguments[0];
3054
3055 if (Type(map) !== 'object') throw TypeError();
3056 if ('[[MapData]]' in map) throw TypeError();
3057
3058 if (iterable !== undefined) {
3059 var adder = map['set'];
3060 if (!IsCallable(adder)) throw TypeError();
3061 var iter = GetIterator(ToObject(iterable));
3062 }
3063 set_internal(map, '[[MapData]]', { keys: [], values: [] });
3064 if (iter === undefined) return map;
3065 while (true) {
3066 var next = IteratorStep(iter);
3067 if (next === false)
3068 return map;
3069 var nextItem = IteratorValue(next);
3070 if (Type(nextItem) !== 'object') throw TypeError();
3071 var k = nextItem[0];
3072 var v = nextItem[1];
3073 adder.call(map, k, v);
3074 }
3075
3076 return map;
3077 }
3078
3079 if (!('Map' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
3080 (function() { try { new global.Map([]); return false; } catch (_) { return true; } }()) ||
3081 (function() { try { return !new global.Map().entries().next; } catch (_) { return true; } }()) ||
3082 (new global.Map([['a', 1]]).size !== 1))
3083 global.Map = Map;
3084
3085
3086 function MapDataIndexOf(mapData, key) {
3087 var i;
3088 if (key === key) return mapData.keys.indexOf(key);
3089 // Slow case for NaN
3090 for (i = 0; i < mapData.keys.length; i += 1)
3091 if (SameValueZero(mapData.keys[i], key)) return i;
3092 return -1;
3093 }
3094
3095 // 23.1.1.2 new Map ( ... argumentsList )
3096 // 23.1.2 Properties of the Map Constructor
3097 // 23.1.2.1 Map.prototype
3098 var $MapPrototype$ = {};
3099 Map.prototype = $MapPrototype$;
3100
3101 // 23.1.2.2 get Map [ @@species ]
3102
3103 // 23.1.3 Properties of the Map Prototype Object
3104 // 23.1.3.1 Map.prototype.clear ()
3105 define(
3106 Map.prototype, 'clear',
3107 function clear() {
3108 var m = strict(this);
3109 if (Type(m) !== 'object') throw TypeError();
3110 if (!('[[MapData]]' in m)) throw TypeError();
3111 if (m['[[MapData]]'] === undefined) throw TypeError();
3112 var entries = m['[[MapData]]'];
3113 entries.keys.length = 0;
3114 entries.values.length = 0;
3115 return undefined;
3116 });
3117
3118 // 23.1.3.2 Map.prototype.constructor
3119
3120 // 23.1.3.3 Map.prototype.delete ( key )
3121 define(
3122 Map.prototype, 'delete',
3123 function delete_(key) {
3124 var m = strict(this);
3125 if (Type(m) !== 'object') throw TypeError();
3126 if (!('[[MapData]]' in m)) throw TypeError();
3127 if (m['[[MapData]]'] === undefined) throw TypeError();
3128 var entries = m['[[MapData]]'];
3129 var i = MapDataIndexOf(entries, key);
3130 if (i < 0) return false;
3131 entries.keys[i] = empty;
3132 entries.values[i] = empty;
3133 return true;
3134 });
3135
3136 // 23.1.3.4 Map.prototype.entries ( )
3137 define(
3138 Map.prototype, 'entries',
3139 function entries() {
3140 var m = strict(this);
3141 if (Type(m) !== 'object') throw TypeError();
3142 return CreateMapIterator(m, 'key+value');
3143 });
3144
3145 // 23.1.3.5 Map.prototype.forEach ( callbackfn [ , thisArg ] )
3146 define(
3147 Map.prototype, 'forEach',
3148 function forEach(callbackfn /*, thisArg*/) {
3149 var thisArg = arguments[1];
3150
3151 var m = strict(this);
3152 if (Type(m) !== 'object') throw TypeError();
3153 if (!('[[MapData]]' in m)) throw TypeError();
3154 if (m['[[MapData]]'] === undefined) throw TypeError();
3155 var entries = m['[[MapData]]'];
3156
3157 if (!IsCallable(callbackfn)) {
3158 throw TypeError('First argument to forEach is not callable.');
3159 }
3160 for (var i = 0; i < entries.keys.length; ++i) {
3161 if (entries.keys[i] !== empty) {
3162 callbackfn.call(thisArg, entries.values[i], entries.keys[i], m);
3163 }
3164 }
3165 return undefined;
3166 });
3167
3168 // 23.1.3.6 Map.prototype.get ( key )
3169 define(
3170 Map.prototype, 'get',
3171 function get(key) {
3172 var m = strict(this);
3173 if (Type(m) !== 'object') throw TypeError();
3174 if (!('[[MapData]]' in m)) throw TypeError();
3175 if (m['[[MapData]]'] === undefined) throw TypeError();
3176 var entries = m['[[MapData]]'];
3177 var i = MapDataIndexOf(entries, key);
3178 if (i >= 0) return entries.values[i];
3179 return undefined;
3180 });
3181
3182 // 23.1.3.7 Map.prototype.has ( key )
3183 define(
3184 Map.prototype, 'has',
3185 function has(key) {
3186 var m = strict(this);
3187 if (Type(m) !== 'object') throw TypeError();
3188 if (!('[[MapData]]' in m)) throw TypeError();
3189 if (m['[[MapData]]'] === undefined) throw TypeError();
3190 var entries = m['[[MapData]]'];
3191 if (MapDataIndexOf(entries, key) >= 0) return true;
3192 return false;
3193 });
3194
3195 // 23.1.3.8 Map.prototype.keys ( )
3196 define(
3197 Map.prototype, 'keys',
3198 function keys() {
3199 var m = strict(this);
3200 if (Type(m) !== 'object') throw TypeError();
3201 return CreateMapIterator(m, 'key');
3202 });
3203
3204 // 23.1.3.9 Map.prototype.set ( key , value )
3205 define(
3206 Map.prototype, 'set',
3207 function set(key, value) {
3208 var m = strict(this);
3209 if (Type(m) !== 'object') throw TypeError();
3210 if (!('[[MapData]]' in m)) throw TypeError();
3211 if (m['[[MapData]]'] === undefined) throw TypeError();
3212 var entries = m['[[MapData]]'];
3213 var i = MapDataIndexOf(entries, key);
3214 if (i < 0) i = entries.keys.length;
3215 if (SameValue(key, -0)) key = 0;
3216 entries.keys[i] = key;
3217 entries.values[i] = value;
3218 return m;
3219 });
3220
3221 // 23.1.3.10 get Map.prototype.size
3222 Object.defineProperty(
3223 Map.prototype, 'size', {
3224 get: function() {
3225 var m = strict(this);
3226 if (Type(m) !== 'object') throw TypeError();
3227 if (!('[[MapData]]' in m)) throw TypeError();
3228 if (m['[[MapData]]'] === undefined) throw TypeError();
3229 var entries = m['[[MapData]]'];
3230 var count = 0;
3231 for (var i = 0; i < entries.keys.length; ++i) {
3232 if (entries.keys[i] !== empty)
3233 count = count + 1;
3234 }
3235 return count;
3236 }
3237 });
3238
3239 // 23.1.3.11 Map.prototype.values ( )
3240 define(
3241 Map.prototype, 'values',
3242 function values() {
3243 var m = strict(this);
3244 if (Type(m) !== 'object') throw TypeError();
3245 return CreateMapIterator(m, 'value');
3246 });
3247
3248 // 23.1.3.12 Map.prototype [ @@iterator ]( )
3249 define(
3250 Map.prototype, $$iterator,
3251 function() {
3252 var m = strict(this);
3253 if (Type(m) !== 'object') throw TypeError();
3254 return CreateMapIterator(m, 'key+value');
3255 });
3256
3257 // 23.1.3.13 Map.prototype [ @@toStringTag ]
3258 define(global.Map.prototype, $$toStringTag, 'Map');
3259
3260 // 23.1.4 Properties of Map Instances
3261 // 23.1.5 Map Iterator Objects
3262
3263 /** @constructor */
3264 function MapIterator() {}
3265
3266 // 23.1.5.1 CreateMapIterator Abstract Operation
3267 function CreateMapIterator(map, kind) {
3268 if (Type(map) !== 'object') throw TypeError();
3269 if (!('[[MapData]]' in map)) throw TypeError();
3270 if (map['[[MapData]]'] === undefined) throw TypeError();
3271 var iterator = new MapIterator;
3272 set_internal(iterator, '[[Map]]', map);
3273 set_internal(iterator, '[[MapNextIndex]]', 0);
3274 set_internal(iterator, '[[MapIterationKind]]', kind);
3275 return iterator;
3276 }
3277
3278 // 23.1.5.2 The %MapIteratorPrototype% Object
3279 var $MapIteratorPrototype$ = Object.create($IteratorPrototype$);
3280 MapIterator.prototype = $MapIteratorPrototype$;
3281
3282 // 23.1.5.2.1 %MapIteratorPrototype%.next ( )
3283 define(
3284 $MapIteratorPrototype$, 'next',
3285 function next() {
3286 var o = strict(this);
3287 if (Type(o) !== 'object') throw TypeError();
3288 var m = o['[[Map]]'],
3289 index = o['[[MapNextIndex]]'],
3290 itemKind = o['[[MapIterationKind]]'],
3291 entries = m['[[MapData]]'];
3292 while (index < entries.keys.length) {
3293 var e = {key: entries.keys[index], value: entries.values[index]};
3294 index = index += 1;
3295 set_internal(o, '[[MapNextIndex]]', index);
3296 if (e.key !== empty) {
3297 if (itemKind === 'key') {
3298 return CreateIterResultObject(e.key, false);
3299 } else if (itemKind === 'value') {
3300 return CreateIterResultObject(e.value, false);
3301 } else {
3302 return CreateIterResultObject([e.key, e.value], false);
3303 }
3304 }
3305 }
3306 return CreateIterResultObject(undefined, true);
3307 });
3308
3309 // 23.1.5.2.2 %MapIteratorPrototype% [ @@toStringTag ]
3310 define($MapIteratorPrototype$, $$toStringTag, 'Map Iterator');
3311
3312 // 23.1.5.3 Properties of Map Iterator Instances
3313 }());
3314
3315 // ---------------------------------------
3316 // 23.2 Set Objects
3317 // ---------------------------------------
3318
3319 (function() {
3320 // 23.2.1 The Set Constructor
3321 // 23.2.1.1 Set ( [ iterable ] )
3322
3323 /** @constructor */
3324 function Set(/*iterable*/) {
3325 var set = strict(this);
3326 var iterable = arguments[0];
3327
3328 if (Type(set) !== 'object') throw TypeError();
3329 if ('[[SetData]]' in set) throw TypeError();
3330
3331 if (iterable !== undefined) {
3332 var adder = set['add'];
3333 if (!IsCallable(adder)) throw TypeError();
3334 var iter = GetIterator(ToObject(iterable));
3335 }
3336 set_internal(set, '[[SetData]]', []);
3337 if (iter === undefined) return set;
3338 while (true) {
3339 var next = IteratorStep(iter);
3340 if (next === false)
3341 return set;
3342 var nextValue = IteratorValue(next);
3343 adder.call(set, nextValue);
3344 }
3345
3346 return set;
3347 }
3348
3349 if (!('Set' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
3350 (function() { try { return !new global.Set().entries().next; } catch (_) { return true; } }()) ||
3351 (new global.Set([1]).size !== 1))
3352 global.Set = Set;
3353
3354 function SetDataIndexOf(setData, key) {
3355 var i;
3356 if (key === key)
3357 return setData.indexOf(key);
3358 // Slow case for NaN
3359 for (i = 0; i < setData.length; i += 1)
3360 if (SameValueZero(setData[i], key)) return i;
3361 return -1;
3362 }
3363
3364 // 23.2.1.2 new Set ( ...argumentsList )
3365 // 23.2.2 Properties of the Set Constructor
3366
3367 // 23.2.2.1 Set.prototype
3368 var $SetPrototype$ = {};
3369 Set.prototype = $SetPrototype$;
3370
3371 // 23.2.2.2 get Set [ @@species ]
3372 // 23.2.3 Properties of the Set Prototype Object
3373
3374 // 23.2.3.1 Set.prototype.add (value )
3375 define(
3376 Set.prototype, 'add',
3377 function add(value) {
3378 var s = strict(this);
3379 if (Type(s) !== 'object') throw TypeError();
3380 if (!('[[SetData]]' in s)) throw TypeError();
3381 if (s['[[SetData]]'] === undefined) throw TypeError();
3382 if (SameValue(value, -0)) value = 0;
3383 var entries = s['[[SetData]]'];
3384 var i = SetDataIndexOf(entries, value);
3385 if (i < 0) i = s['[[SetData]]'].length;
3386 s['[[SetData]]'][i] = value;
3387
3388 return s;
3389 });
3390
3391 // 23.2.3.2 Set.prototype.clear ()
3392 define(
3393 Set.prototype, 'clear',
3394 function clear() {
3395 var s = strict(this);
3396 if (Type(s) !== 'object') throw TypeError();
3397 if (!('[[SetData]]' in s)) throw TypeError();
3398 if (s['[[SetData]]'] === undefined) throw TypeError();
3399 var entries = s['[[SetData]]'];
3400 entries.length = 0;
3401 return undefined;
3402 });
3403
3404 // 23.2.3.3 Set.prototype.constructor
3405 // 23.2.3.4 Set.prototype.delete ( value )
3406 define(
3407 Set.prototype, 'delete',
3408 function delete_(value) {
3409 var s = strict(this);
3410 if (Type(s) !== 'object') throw TypeError();
3411 if (!('[[SetData]]' in s)) throw TypeError();
3412 if (s['[[SetData]]'] === undefined) throw TypeError();
3413 var entries = s['[[SetData]]'];
3414 var i = SetDataIndexOf(entries, value);
3415 if (i < 0) return false;
3416 entries[i] = empty;
3417 return true;
3418 });
3419
3420 // 23.2.3.5 Set.prototype.entries ( )
3421 define(
3422 Set.prototype, 'entries',
3423 function entries() {
3424 var s = strict(this);
3425 if (Type(s) !== 'object') throw TypeError();
3426 return CreateSetIterator(s, 'key+value');
3427 });
3428
3429 // 23.2.3.6 Set.prototype.forEach ( callbackfn [ , thisArg ] )
3430 define(
3431 Set.prototype, 'forEach',
3432 function forEach(callbackfn/*, thisArg*/) {
3433 var thisArg = arguments[1];
3434
3435 var s = strict(this);
3436 if (Type(s) !== 'object') throw TypeError();
3437 if (!('[[SetData]]' in s)) throw TypeError();
3438 if (s['[[SetData]]'] === undefined) throw TypeError();
3439 var entries = s['[[SetData]]'];
3440
3441 if (!IsCallable(callbackfn)) {
3442 throw TypeError('First argument to forEach is not callable.');
3443 }
3444 for (var i = 0; i < entries.length; ++i) {
3445 if (entries[i] !== empty) {
3446 callbackfn.call(thisArg, entries[i], entries[i], s);
3447 }
3448 }
3449 });
3450
3451 // 23.2.3.7 Set.prototype.has ( value )
3452 define(
3453 Set.prototype, 'has',
3454 function has(key) {
3455 var s = strict(this);
3456 if (Type(s) !== 'object') throw TypeError();
3457 if (!('[[SetData]]' in s)) throw TypeError();
3458 if (s['[[SetData]]'] === undefined) throw TypeError();
3459 var entries = s['[[SetData]]'];
3460 return SetDataIndexOf(entries, key) !== -1;
3461 });
3462
3463 // 23.2.3.8 Set.prototype.keys ( )
3464 // See Set.prototype.values
3465
3466 // 23.2.3.9 get Set.prototype.size
3467 Object.defineProperty(
3468 Set.prototype, 'size', {
3469 get: function() {
3470 var s = strict(this);
3471 if (Type(s) !== 'object') throw TypeError();
3472 if (!('[[SetData]]' in s)) throw TypeError();
3473 if (s['[[SetData]]'] === undefined) throw TypeError();
3474 var entries = s['[[SetData]]'];
3475 var count = 0;
3476 for (var i = 0; i < entries.length; ++i) {
3477 if (entries[i] !== empty)
3478 count = count + 1;
3479 }
3480 return count;
3481 }
3482 });
3483
3484 // 23.2.3.10 Set.prototype.values ( )
3485 define(
3486 Set.prototype, 'values',
3487 function values() {
3488 var s = strict(this);
3489 if (Type(s) !== 'object') throw TypeError();
3490 return CreateSetIterator(s, 'value');
3491 });
3492 // NOTE: function name is still 'values':
3493 Set.prototype.keys = Set.prototype.values;
3494
3495 // 23.2.3.11 Set.prototype [@@iterator ] ( )
3496 define(
3497 Set.prototype, $$iterator,
3498 function() {
3499 var s = strict(this);
3500 if (Type(s) !== 'object') throw TypeError();
3501 return CreateSetIterator(s);
3502 });
3503
3504 // 23.2.3.12 Set.prototype [ @@toStringTag ]
3505 define(global.Set.prototype, $$toStringTag, 'Set');
3506
3507 // 23.2.4 Properties of Set Instances
3508 // 23.2.5 Set Iterator Objects
3509 /** @constructor */
3510 function SetIterator() {}
3511
3512 // 23.2.5.1 CreateSetIterator Abstract Operation
3513 function CreateSetIterator(set, kind) {
3514 if (Type(set) !== 'object') throw TypeError();
3515 if (!('[[SetData]]' in set)) throw TypeError();
3516 if (set['[[SetData]]'] === undefined) throw TypeError();
3517 var iterator = new SetIterator;
3518 set_internal(iterator, '[[IteratedSet]]', set);
3519 set_internal(iterator, '[[SetNextIndex]]', 0);
3520 set_internal(iterator, '[[SetIterationKind]]', kind);
3521 return iterator;
3522 }
3523
3524 // 23.2.5.2 The %SetIteratorPrototype% Object
3525 var $SetIteratorPrototype$ = Object.create($IteratorPrototype$);
3526 SetIterator.prototype = $SetIteratorPrototype$;
3527
3528 // 23.2.5.2.1 %SetIteratorPrototype%.next( )
3529 define(
3530 $SetIteratorPrototype$, 'next',
3531 function next() {
3532 var o = strict(this);
3533 if (Type(o) !== 'object') throw TypeError();
3534 var s = o['[[IteratedSet]]'],
3535 index = o['[[SetNextIndex]]'],
3536 itemKind = o['[[SetIterationKind]]'],
3537 entries = s['[[SetData]]'];
3538 while (index < entries.length) {
3539 var e = entries[index];
3540 index = index += 1;
3541 set_internal(o, '[[SetNextIndex]]', index);
3542 if (e !== empty) {
3543 if (itemKind === 'key+value')
3544 return CreateIterResultObject([e, e], false);
3545 return CreateIterResultObject(e, false);
3546 }
3547 }
3548 return CreateIterResultObject(undefined, true);
3549 });
3550
3551 // 23.2.5.2.2 %SetIteratorPrototype% [ @@toStringTag ]
3552 define($SetIteratorPrototype$, $$toStringTag, 'Set Iterator');
3553
3554 // 23.2.5.3 Properties of Set Iterator Instances
3555
3556 }());
3557
3558 // ---------------------------------------
3559 // 23.3 WeakMap Objects
3560 // ---------------------------------------
3561
3562 (function() {
3563 // 23.3.1 The WeakMap Constructor
3564 // 23.3.1.1 WeakMap ( [ iterable ] )
3565 /** @constructor */
3566 function WeakMap(/*iterable*/) {
3567 var map = strict(this);
3568 var iterable = arguments[0];
3569
3570 if (Type(map) !== 'object') throw TypeError();
3571 if ('[[WeakMapData]]' in map) throw TypeError();
3572
3573 if (iterable !== undefined) {
3574 var adder = map['set'];
3575 if (!IsCallable(adder)) throw TypeError();
3576 var iter = GetIterator(ToObject(iterable));
3577 }
3578 set_internal(map, '[[WeakMapData]]', new EphemeronTable);
3579 if (iter === undefined) return map;
3580 while (true) {
3581 var next = IteratorStep(iter);
3582 if (next === false)
3583 return map;
3584 var nextValue = IteratorValue(next);
3585 if (Type(nextValue) !== 'object') throw TypeError();
3586 var k = nextValue[0];
3587 var v = nextValue[1];
3588 adder.call(map, k, v);
3589 }
3590
3591 return map;
3592 }
3593
3594 if (!('WeakMap' in global) || OVERRIDE_NATIVE_FOR_TESTING)
3595 global.WeakMap = WeakMap;
3596
3597 // 23.3.2 Properties of the WeakMap Constructor
3598 // 23.3.2.1 WeakMap.prototype
3599 var $WeakMapPrototype$ = {};
3600 WeakMap.prototype = $WeakMapPrototype$;
3601
3602
3603
3604 // 23.3.2.2 WeakMap[ @@create ] ( )
3605 // 23.3.3 Properties of the WeakMap Prototype Object
3606
3607 // 23.3.3.1 WeakMap.prototype.constructor
3608
3609 // 23.3.3.2 WeakMap.prototype.delete ( key )
3610 define(
3611 WeakMap.prototype, 'delete',
3612 function delete_(key) {
3613 var M = strict(this);
3614 if (Type(M) !== 'object') throw TypeError();
3615 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3616 if (Type(key) !== 'object') throw TypeError('Expected object');
3617 return M['[[WeakMapData]]'].remove(key);
3618 });
3619
3620 // 23.3.3.3 WeakMap.prototype.get ( key )
3621 define(
3622 WeakMap.prototype, 'get',
3623 function get(key, defaultValue) {
3624 var M = strict(this);
3625 if (Type(M) !== 'object') throw TypeError();
3626 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3627 if (Type(key) !== 'object') throw TypeError('Expected object');
3628 return M['[[WeakMapData]]'].get(key, defaultValue);
3629 });
3630
3631 // 23.3.3.4 WeakMap.prototype.has ( key )
3632 define(
3633 WeakMap.prototype, 'has',
3634 function has(key) {
3635 var M = strict(this);
3636 if (Type(M) !== 'object') throw TypeError();
3637 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3638 if (Type(key) !== 'object') throw TypeError('Expected object');
3639 return M['[[WeakMapData]]'].has(key);
3640 });
3641
3642 // 23.3.3.5 WeakMap.prototype.set ( key , value )
3643 define(
3644 WeakMap.prototype, 'set',
3645 function set(key, value) {
3646 var M = strict(this);
3647 if (Type(M) !== 'object') throw TypeError();
3648 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3649 if (Type(key) !== 'object') throw TypeError('Expected object');
3650 M['[[WeakMapData]]'].set(key, value);
3651 return M;
3652 });
3653
3654 // 23.3.3.6 WeakMap.prototype [ @@toStringTag ]
3655 define(global.WeakMap.prototype, $$toStringTag, 'WeakMap');
3656
3657 // 23.3.4 Properties of WeakMap Instances
3658
3659 // Polyfills for incomplete native implementations:
3660 (function() {
3661 var wm = new global.WeakMap();
3662 var orig = global.WeakMap.prototype.set;
3663 define(global.WeakMap.prototype, 'set', function set() {
3664 orig.apply(this, arguments);
3665 return this;
3666 }, wm.set({}, 0) !== wm);
3667 }());
3668 }());
3669
3670 // ---------------------------------------
3671 // 23.4 WeakSet Objects
3672 // ---------------------------------------
3673
3674 (function() {
3675 // 23.4.1 The WeakSet Constructor
3676 // 23.4.1.1 WeakSet ( [ iterable ] )
3677 /** @constructor */
3678 function WeakSet(/*iterable*/) {
3679 var set = strict(this);
3680 var iterable = arguments[0];
3681
3682 if (Type(set) !== 'object') throw TypeError();
3683 if ('[[WeakSetData]]' in set) throw TypeError();
3684
3685 if (iterable !== undefined) {
3686 var adder = set['add'];
3687 if (!IsCallable(adder)) throw TypeError();
3688 var iter = GetIterator(ToObject(iterable));
3689 }
3690 set_internal(set, '[[WeakSetData]]', new EphemeronTable);
3691 if (iter === undefined) return set;
3692 while (true) {
3693 var next = IteratorStep(iter);
3694 if (next === false)
3695 return set;
3696 var nextValue = IteratorValue(next);
3697 adder.call(set, nextValue);
3698 }
3699
3700 return set;
3701 }
3702
3703 if (!('WeakSet' in global) || OVERRIDE_NATIVE_FOR_TESTING)
3704 global.WeakSet = WeakSet;
3705
3706 // 23.4.2 Properties of the WeakSet Constructor
3707 // 23.4.2.1 WeakSet.prototype
3708 var $WeakSetPrototype$ = {};
3709 WeakSet.prototype = $WeakSetPrototype$;
3710
3711 // 23.4.3 Properties of the WeakSet Prototype Object
3712 // 23.4.3.1 WeakSet.prototype.add (value )
3713 define(
3714 WeakSet.prototype, 'add',
3715 function add(value) {
3716 var S = strict(this);
3717 if (Type(S) !== 'object') throw TypeError();
3718 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3719 if (Type(value) !== 'object') throw TypeError('Expected object');
3720 S['[[WeakSetData]]'].set(value, true);
3721 return S;
3722 });
3723
3724 // 23.4.3.2 WeakSet.prototype.constructor
3725 // 23.4.3.3 WeakSet.prototype.delete ( value )
3726 define(
3727 WeakSet.prototype, 'delete',
3728 function delete_(value) {
3729 var S = strict(this);
3730 if (Type(S) !== 'object') throw TypeError();
3731 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3732 if (Type(value) !== 'object') throw TypeError('Expected object');
3733 return S['[[WeakSetData]]'].remove(value);
3734 });
3735
3736 // 23.4.3.4 WeakSet.prototype.has ( value )
3737 define(
3738 WeakSet.prototype, 'has',
3739 function has(key) {
3740 var S = strict(this);
3741 if (Type(S) !== 'object') throw TypeError();
3742 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3743 if (Type(key) !== 'object') throw TypeError('Expected object');
3744 return S['[[WeakSetData]]'].has(key);
3745 });
3746
3747 // 23.4.3.5 WeakSet.prototype [ @@toStringTag ]
3748 define(global.WeakSet.prototype, $$toStringTag, 'WeakSet');
3749
3750 // 23.4.4 Properties of WeakSet Instances
3751
3752 // Polyfills for incomplete native implementations:
3753 (function() {
3754 var ws = new global.WeakSet();
3755 var orig = global.WeakSet.prototype.add;
3756 define(global.WeakSet.prototype, 'add', function add() {
3757 orig.apply(this, arguments);
3758 return this;
3759 }, ws.add({}) !== ws);
3760 }());
3761 }());
3762
3763 // ---------------------------------------
3764 // 24 Structured Data
3765 // ---------------------------------------
3766
3767 // ---------------------------------------
3768 // 24.1 ArrayBuffer Objects
3769 // ---------------------------------------
3770
3771 // See typedarray.js for TypedArray polyfill
3772
3773 (function() {
3774 if (!('ArrayBuffer' in global))
3775 return;
3776
3777 // 24.1.1 Abstract Operations For ArrayBuffer Objects
3778 // 24.1.1.1 AllocateArrayBuffer( constructor, byteLength )
3779 // 24.1.1.2 IsDetachedBuffer( arrayBuffer )
3780 // 24.1.1.3 DetachArrayBuffer( arrayBuffer )
3781 // 24.1.1.4 CloneArrayBuffer( srcBuffer, srcByteOffset [, cloneConstructor] )
3782 // 24.1.1.5 GetValueFromBuffer ( arrayBuffer, byteIndex, type, isLittleEndian )
3783 // 24.1.1.6 SetValueInBuffer ( arrayBuffer, byteIndex, type, value, isLittleEndian )
3784 // 24.1.2 The ArrayBuffer Constructor
3785 // 24.1.2.1 ArrayBuffer( length )
3786 // 24.1.3 Properties of the ArrayBuffer Constructor
3787
3788 // 24.1.3.1 ArrayBuffer.isView ( arg )
3789 define(
3790 ArrayBuffer, 'isView',
3791 function isView(arg) {
3792 if (Type(arg) !== 'object') return false;
3793 if ('buffer' in arg && arg.buffer instanceof ArrayBuffer) return true;
3794 return false;
3795 });
3796
3797 // 24.1.3.2 ArrayBuffer.prototype
3798 // 24.1.3.3 get ArrayBuffer [ @@species ]
3799 // 24.1.4 Properties of the ArrayBuffer Prototype Object
3800 // 24.1.4.1 get ArrayBuffer.prototype.byteLength
3801 // 24.1.4.2 ArrayBuffer.prototype.constructor
3802 // 24.1.4.3 ArrayBuffer.prototype.slice ( start , end)
3803
3804 // 24.1.4.4 ArrayBuffer.prototype [ @@toStringTag ]
3805 define(ArrayBuffer.prototype, $$toStringTag, 'ArrayBuffer');
3806
3807 // 24.1.5 Properties of the ArrayBuffer Instances
3808 }());
3809
3810 // ---------------------------------------
3811 // 24.2 DataView Objects
3812 // ---------------------------------------
3813
3814 // See typedarray.js for TypedArray polyfill
3815
3816 (function() {
3817 if (!('DataView' in global))
3818 return;
3819
3820 // 24.2.1 Abstract Operations For DataView Objects
3821 // 24.2.1.1 GetViewValue(view, requestIndex, isLittleEndian, type)
3822 // 24.2.1.2 SetViewValue(view, requestIndex, isLittleEndian, type, value)
3823 // 24.2.2 The DataView Constructor
3824 // 24.2.2.1 DataView (buffer [ , byteOffset [ , byteLength ] ] )
3825 // 24.2.3 Properties of the DataView Constructor
3826 // 24.2.3.1 DataView.prototype
3827 // 24.2.4 Properties of the DataView Prototype Object
3828 // 24.2.4.1 get DataView.prototype.buffer
3829 // 24.2.4.2 get DataView.prototype.byteLength
3830 // 24.2.4.3 get DataView.prototype.byteOffset
3831 // 24.2.4.4 DataView.prototype.constructor
3832 // 24.2.4.5 DataView.prototype.getFloat32 ( byteOffset [ , littleEndian ] )
3833 // 24.2.4.6 DataView.prototype.getFloat64 ( byteOffset [ , littleEndian ] )
3834 // 24.2.4.7 DataView.prototype.getInt8 ( byteOffset )
3835 // 24.2.4.8 DataView.prototype.getInt16 ( byteOffset [ , littleEndian ] )
3836 // 24.2.4.9 DataView.prototype.getInt32 ( byteOffset [ , littleEndian ] )
3837 // 24.2.4.10 DataView.prototype.getUint8 ( byteOffset )
3838 // 24.2.4.11 DataView.prototype.getUint16 ( byteOffset [ , littleEndian ] )
3839 // 24.2.4.12 DataView.prototype.getUint32 ( byteOffset [ , littleEndian ] )
3840 // 24.2.4.13 DataView.prototype.setFloat32 ( byteOffset, value [ , littleEndian ] )
3841 // 24.2.4.14 DataView.prototype.setFloat64 ( byteOffset, value [ , littleEndian ] )
3842 // 24.2.4.15 DataView.prototype.setInt8 ( byteOffset, value )
3843 // 24.2.4.16 DataView.prototype.setInt16 ( byteOffset, value [ , littleEndian ] )
3844 // 24.2.4.17 DataView.prototype.setInt32 ( byteOffset, value [ , littleEndian ] )
3845 // 24.2.4.18 DataView.prototype.setUint8 ( byteOffset, value )
3846 // 24.2.4.19 DataView.prototype.setUint16 ( byteOffset, value [ , littleEndian ] )
3847 // 24.2.4.20 DataView.prototype.setUint32 ( byteOffset, value [ , littleEndian ] )
3848
3849 // 24.2.4.21 DataView.prototype[ @@toStringTag ]
3850 define(DataView.prototype, $$toStringTag, 'DataView');
3851
3852 // 24.2.5 Properties of DataView Instances
3853 }());
3854
3855 // ---------------------------------------
3856 // 24.3 The JSON Object
3857 // ---------------------------------------
3858
3859 // 24.3.1 JSON.parse ( text [ , reviver ] )
3860 // 24.3.2 JSON.stringify ( value [ , replacer [ , space ] ] )
3861 // 24.3.3 JSON [ @@toStringTag ]
3862 define(JSON, $$toStringTag, 'JSON');
3863
3864 // ---------------------------------------
3865 // 25.1 Iteration
3866 // ---------------------------------------
3867
3868 // 25.1.1 Common Iteration Interfaces
3869 // 25.1.1.1 The Iterable Interface
3870 // 25.1.1.2 The Iterator Interface
3871 // 25.1.1.3 The IteratorResult Interface
3872
3873 // 25.1.2 The %IteratorPrototype% Object
3874 // Defined earlier, so other prototypes can reference it.
3875 // 25.1.2.1 %IteratorPrototype% [ @@iterator ] ( )
3876 define($IteratorPrototype$, $$iterator, function() {
3877 return this;
3878 });
3879
3880
3881 // ---------------------------------------
3882 // 25.4 Promise Objects
3883 // ---------------------------------------
3884
3885 (function() {
3886 // 25.4 Promise Objects
3887
3888 // 25.4.1 Promise Abstract Operations
3889
3890 // 25.4.1.1 PromiseCapability Records
3891 // 25.4.1.1.1 IfAbruptRejectPromise ( value, capability )
3892
3893 function IfAbruptRejectPromise(value, capability) {
3894 var rejectResult = capability['[[Reject]]'].call(undefined, value);
3895 return capability['[[Promise]]'];
3896 }
3897
3898 // 25.4.1.2 PromiseReaction Records
3899
3900 // 25.4.1.3 CreateResolvingFunctions ( promise )
3901
3902 function CreateResolvingFunctions(promise) {
3903 var alreadyResolved = {'[[value]]': false};
3904 var resolve = PromiseResolveFunction();
3905 set_internal(resolve, '[[Promise]]', promise);
3906 set_internal(resolve, '[[AlreadyResolved]]', alreadyResolved);
3907 var reject = PromiseRejectFunction();
3908 set_internal(reject, '[[Promise]]', promise);
3909 set_internal(reject, '[[AlreadyResolved]]', alreadyResolved);
3910 return { '[[Resolve]]': resolve, '[[Reject]]': reject};
3911 }
3912
3913 // 25.4.1.3.1 Promise Reject Functions
3914
3915 function PromiseRejectFunction() {
3916 var F = function(reason) {
3917 console.assert(Type(F['[[Promise]]']) === 'object');
3918 var promise = F['[[Promise]]'];
3919 var alreadyResolved = F['[[AlreadyResolved]]'];
3920 if (alreadyResolved['[[value]]']) return undefined;
3921 set_internal(alreadyResolved, '[[value]]', true);
3922 return RejectPromise(promise, reason);
3923 };
3924 return F;
3925 }
3926
3927 // 25.4.1.3.2 Promise Resolve Functions
3928
3929 function PromiseResolveFunction() {
3930 var F = function(resolution) {
3931 console.assert(Type(F['[[Promise]]']) === 'object');
3932 var promise = F['[[Promise]]'];
3933 var alreadyResolved = F['[[AlreadyResolved]]'];
3934 if (alreadyResolved['[[value]]']) return undefined;
3935 set_internal(alreadyResolved, '[[value]]', true);
3936
3937 if (SameValue(resolution, promise)) {
3938 var selfResolutionError = TypeError();
3939 return RejectPromise(promise, selfResolutionError);
3940 }
3941 if (Type(resolution) !== 'object')
3942 return FulfillPromise(promise, resolution);
3943 try {
3944 var then = resolution['then'];
3945 } catch(then) {
3946 return RejectPromise(promise, then);
3947 }
3948 if (!IsCallable(then))
3949 return FulfillPromise(promise, resolution);
3950 EnqueueJob('PromiseJobs', PromiseResolveThenableJob, [promise, resolution, then]);
3951 return undefined;
3952 };
3953 return F;
3954 }
3955
3956 // 25.4.1.4 FulfillPromise ( promise, value )
3957
3958 function FulfillPromise(promise, value) {
3959 console.assert(promise['[[PromiseState]]'] === 'pending');
3960 var reactions = promise['[[PromiseFulfillReactions]]'];
3961 set_internal(promise, '[[PromiseResult]]', value);
3962 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
3963 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
3964 set_internal(promise, '[[PromiseState]]', 'fulfilled');
3965 return TriggerPromiseReactions(reactions, value);
3966 }
3967
3968 // 25.4.1.5 NewPromiseCapability ( C )
3969
3970 function NewPromiseCapability(c) {
3971 // To keep Promise hermetic, this doesn't look much like the spec.
3972 return CreatePromiseCapabilityRecord(undefined, c);
3973 }
3974
3975 // 25.4.1.5.1 CreatePromiseCapabilityRecord ( promise, constructor )
3976
3977 function CreatePromiseCapabilityRecord(promise, constructor) {
3978 // To keep Promise hermetic, this doesn't look much like the spec.
3979 console.assert(IsConstructor(constructor));
3980 var promiseCapability = {};
3981 set_internal(promiseCapability, '[[Promise]]', promise);
3982 set_internal(promiseCapability, '[[Resolve]]', undefined);
3983 set_internal(promiseCapability, '[[Reject]]', undefined);
3984 var executor = GetCapabilitiesExecutor();
3985 set_internal(executor, '[[Capability]]', promiseCapability);
3986
3987 // NOTE: Differs from spec; object is constructed here
3988 var constructorResult = promise = new constructor(executor);
3989 set_internal(promiseCapability, '[[Promise]]', promise);
3990
3991 if (!IsCallable(promiseCapability['[[Resolve]]'])) throw TypeError();
3992 if (!IsCallable(promiseCapability['[[Reject]]'])) throw TypeError();
3993 if (Type(constructorResult) === 'object' && !SameValue(promise, constructorResult)) throw TypeError();
3994 return promiseCapability;
3995 }
3996
3997 // 25.4.1.5.2 GetCapabilitiesExecutor Functions
3998
3999 function GetCapabilitiesExecutor() {
4000 var F = function(resolve, reject) {
4001 console.assert(F['[[Capability]]']);
4002 var promiseCapability = F['[[Capability]]'];
4003 if (promiseCapability['[[Resolve]]'] !== undefined) throw TypeError();
4004 if (promiseCapability['[[Reject]]'] !== undefined) throw TypeError();
4005 set_internal(promiseCapability, '[[Resolve]]', resolve);
4006 set_internal(promiseCapability, '[[Reject]]', reject);
4007 return undefined;
4008 };
4009 return F;
4010 }
4011
4012 // 25.4.1.6 IsPromise ( x )
4013
4014 function IsPromise(x) {
4015 if (Type(x) !== 'object') return false;
4016 if (!('[[PromiseState]]' in x)) return false;
4017 if (x['[[PromiseState]]'] === undefined) return false;
4018 return true;
4019 }
4020
4021 // 25.4.1.7 RejectPromise ( promise, reason )
4022
4023 function RejectPromise(promise, reason) {
4024 console.assert(promise['[[PromiseState]]'] === 'pending');
4025 var reactions = promise['[[PromiseRejectReactions]]'];
4026 set_internal(promise, '[[PromiseResult]]', reason);
4027 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
4028 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
4029 set_internal(promise, '[[PromiseState]]', 'rejected');
4030 return TriggerPromiseReactions(reactions, reason);
4031 }
4032
4033 // 25.4.1.8 TriggerPromiseReactions ( reactions, argument )
4034
4035 function TriggerPromiseReactions(reactions, argument) {
4036 for (var i = 0, len = reactions.length; i < len; ++i)
4037 EnqueueJob('PromiseJobs', PromiseReactionJob, [reactions[i], argument]);
4038 return undefined;
4039 }
4040
4041 // 25.4.2 Promise Jobs
4042
4043 // 25.4.2.1 PromiseReactionJob ( reaction, argument )
4044
4045 function PromiseReactionJob(reaction, argument) {
4046 var promiseCapability = reaction['[[Capabilities]]'];
4047 var handler = reaction['[[Handler]]'];
4048 var handlerResult, status;
4049 try {
4050 if (handler === 'Identity') handlerResult = argument;
4051 else if (handler === 'Thrower') throw argument;
4052 else handlerResult = handler.call(undefined, argument);
4053 } catch (handlerResult) {
4054 status = promiseCapability['[[Reject]]'].call(undefined, handlerResult);
4055 NextJob(status); return;
4056 }
4057 status = promiseCapability['[[Resolve]]'].call(undefined, handlerResult);
4058 NextJob(status);
4059 }
4060
4061 // 25.4.2.2 PromiseResolveThenableJob ( promiseToResolve, thenable, then)
4062
4063 function PromiseResolveThenableJob(promiseToResolve, thenable, then) {
4064 // SPEC BUG: promise vs. promiseToResolve
4065 var resolvingFunctions = CreateResolvingFunctions(promiseToResolve);
4066 try {
4067 var thenCallResult = then.call(thenable, resolvingFunctions['[[Resolve]]'],
4068 resolvingFunctions['[[Reject]]']);
4069 } catch (thenCallResult) {
4070 var status = resolvingFunctions['[[Reject]]'].call(undefined, thenCallResult);
4071 NextJob(status); return;
4072 }
4073 NextJob(thenCallResult);
4074 }
4075
4076 // 25.4.3 The Promise Constructor
4077
4078 // 25.4.3.1 Promise ( executor )
4079
4080 function Promise(executor) {
4081 var config = { configurable: false, enumerable: false, writable: true, value: undefined };
4082 Object.defineProperty(this, '[[PromiseState]]', config);
4083 Object.defineProperty(this, '[[PromiseConstructor]]', config);
4084 Object.defineProperty(this, '[[PromiseResult]]', config);
4085 Object.defineProperty(this, '[[PromiseFulfillReactions]]', config);
4086 Object.defineProperty(this, '[[PromiseRejectReactions]]', config);
4087
4088 var promise = this;
4089 if (Type(promise) !== 'object') throw new TypeError();
4090 if (!('[[PromiseState]]' in promise)) throw TypeError();
4091 if (promise['[[PromiseState]]'] !== undefined) throw TypeError();
4092 if (!IsCallable(executor)) throw TypeError();
4093
4094 set_internal(promise, '[[PromiseConstructor]]', Promise);
4095
4096 return InitializePromise(promise, executor);
4097 }
4098
4099 // 25.4.3.1.1 InitializePromise ( promise, executor )
4100
4101 function InitializePromise(promise, executor) {
4102 console.assert('[[PromiseState]]' in promise);
4103 console.assert(IsCallable(executor));
4104 set_internal(promise, '[[PromiseState]]', 'pending');
4105 set_internal(promise, '[[PromiseFulfillReactions]]', []);
4106 set_internal(promise, '[[PromiseRejectReactions]]', []);
4107 var resolvingFunctions = CreateResolvingFunctions(promise);
4108 try {
4109 var completion = executor.call(undefined, resolvingFunctions['[[Resolve]]'],
4110 resolvingFunctions['[[Reject]]']);
4111 } catch (completion) {
4112 var status = resolvingFunctions['[[Reject]]'].call(undefined, completion);
4113 }
4114 return promise;
4115 }
4116
4117 // 25.4.4 Properties of the Promise Constructor
4118 // 25.4.4.1 Promise.all ( iterable )
4119
4120 define(Promise, 'all', function all(iterable) {
4121 var c = strict(this);
4122 var promiseCapability = NewPromiseCapability(c);
4123 try {
4124 var iterator = GetIterator(iterable);
4125 } catch (value) {
4126 promiseCapability['[[Reject]]'].call(undefined, value);
4127 return promiseCapability['[[Promise]]'];
4128 }
4129 var values = [];
4130 var remainingElementsCount = { value: 1 };
4131 var index = 0;
4132 while (true) {
4133 try {
4134 var next = IteratorStep(iterator);
4135 } catch (value) {
4136 promiseCapability['[[Reject]]'].call(undefined, value);
4137 return promiseCapability['[[Promise]]'];
4138 }
4139 if (!next) {
4140 remainingElementsCount.value -= 1;
4141 if (remainingElementsCount.value === 0) {
4142 var resolveResult = promiseCapability['[[Resolve]]'].apply(undefined, values);
4143
4144
4145 }
4146 return promiseCapability['[[Promise]]'];
4147 }
4148 try {
4149 var nextValue = IteratorValue(next);
4150 } catch (value) {
4151 promiseCapability['[[Reject]]'].call(undefined, value);
4152 return promiseCapability['[[Promise]]'];
4153 }
4154 try {
4155 var nextPromise = c.resolve(nextValue);
4156 } catch (value) {
4157 promiseCapability['[[Reject]]'].call(undefined, value);
4158 return promiseCapability['[[Promise]]'];
4159 }
4160 var resolveElement = PromiseAllResolveElementFunction();
4161 set_internal(resolveElement, '[[AlreadyCalled]]', { value: false });
4162 set_internal(resolveElement, '[[Index]]', index);
4163 set_internal(resolveElement, '[[Values]]', values);
4164 set_internal(resolveElement, '[[Capabilities]]', promiseCapability);
4165 set_internal(resolveElement, '[[RemainingElements]]', remainingElementsCount);
4166 remainingElementsCount.value += 1;
4167 try {
4168 var result = nextPromise.then(resolveElement, promiseCapability['[[Reject]]']);
4169 } catch (value) {
4170 promiseCapability['[[Reject]]'].call(undefined, value);
4171 return promiseCapability['[[Promise]]'];
4172 }
4173 index += 1;
4174 }
4175 });
4176
4177 // 25.4.4.1.1 Promise.all Resolve Element Functions
4178
4179 function PromiseAllResolveElementFunction() {
4180 var F = function(x) {
4181 var alreadyCalled = F['[[AlreadyCalled]]'];
4182 if (alreadyCalled.value) return undefined;
4183 alreadyCalled.value = true;
4184 var index = F['[[Index]]'];
4185 var values = F['[[Values]]'];
4186 var promiseCapability = F['[[Capabilities]]'];
4187 var remainingElementsCount = F['[[RemainingElements]]'];
4188 try {
4189 values[index] = x;
4190 } catch (result) {
4191 promiseCapability['[[Reject]]'].call(undefined, result);
4192 return promiseCapability['[[Promise]]'];
4193 }
4194 remainingElementsCount.value -= 1;
4195 if (remainingElementsCount.value === 0)
4196 return promiseCapability['[[Resolve]]'].call(undefined, values);
4197 return undefined;
4198 };
4199 return F;
4200 }
4201
4202 // 25.4.4.2 Promise.prototype
4203
4204 Promise.prototype = {};
4205
4206 // 25.4.4.3 Promise.race ( iterable )
4207
4208 define(Promise, 'race', function race(iterable) {
4209 var c = strict(this);
4210 var promiseCapability = NewPromiseCapability(c);
4211 try {
4212 var iterator = GetIterator(iterable);
4213 } catch (value) {
4214 promiseCapability['[[Reject]]'].call(undefined, value);
4215 return promiseCapability['[[Promise]]'];
4216 }
4217 while (true) {
4218 try {
4219 var next = IteratorStep(iterator);
4220 } catch (value) {
4221 promiseCapability['[[Reject]]'].call(undefined, value);
4222 return promiseCapability['[[Promise]]'];
4223 }
4224 if (!next) return promiseCapability['[[Promise]]'];
4225 try {
4226 var nextValue = IteratorValue(next);
4227 } catch (value) {
4228 promiseCapability['[[Reject]]'].call(undefined, value);
4229 return promiseCapability['[[Promise]]'];
4230 }
4231 try {
4232 var nextPromise = c.resolve(nextValue);
4233 } catch (value) {
4234 promiseCapability['[[Reject]]'].call(undefined, value);
4235 return promiseCapability['[[Promise]]'];
4236 }
4237 try {
4238 nextPromise.then(promiseCapability['[[Resolve]]'], promiseCapability['[[Reject]]']);
4239 } catch (value) {
4240 promiseCapability['[[Reject]]'].call(undefined, value);
4241 return promiseCapability['[[Promise]]'];
4242 }
4243 }
4244 });
4245
4246 // 25.4.4.4 Promise.reject ( r )
4247
4248 define(Promise, 'reject', function reject(r) {
4249 var c = strict(this);
4250 var promiseCapability = NewPromiseCapability(c);
4251 var rejectResult = promiseCapability['[[Reject]]'].call(undefined, r);
4252 return promiseCapability['[[Promise]]'];
4253 });
4254
4255 // 25.4.4.5 Promise.resolve ( x )
4256
4257 define(Promise, 'resolve', function resolve(x) {
4258 var c = strict(this);
4259 if (IsPromise(x)) {
4260 var constructor = x['[[PromiseConstructor]]'];
4261 if (SameValue(constructor, c)) return x;
4262 }
4263 var promiseCapability = NewPromiseCapability(c);
4264 var resolveResult = promiseCapability['[[Resolve]]'].call(undefined, x);
4265 return promiseCapability['[[Promise]]'];
4266 });
4267
4268 // 25.4.4.6 Promise [ @@create ] ( )
4269 // 25.4.4.6.1 AllocatePromise ( constructor )
4270 // 25.4.5 Properties of the Promise Prototype Object
4271 // 25.4.5.1 Promise.prototype.catch ( onRejected )
4272
4273 define(Promise.prototype, 'catch', function catch_(onRejected) {
4274 var promise = this;
4275 return promise.then(undefined, onRejected);
4276 });
4277
4278 // 25.4.5.2 Promise.prototype.constructor
4279
4280 Promise.prototype.constructor = Promise;
4281
4282 // 25.4.5.3 Promise.prototype.then ( onFulfilled , onRejected )
4283
4284 define(Promise.prototype, 'then', function then(onFulfilled, onRejected) {
4285 var promise = this;
4286 if (!IsPromise(promise)) throw TypeError();
4287 if (!IsCallable(onFulfilled)) onFulfilled = 'Identity';
4288 if (!IsCallable(onRejected)) onRejected = 'Thrower';
4289 var c = promise.constructor;
4290 var promiseCapability = NewPromiseCapability(c);
4291 var fulfillReaction = { '[[Capabilities]]': promiseCapability,
4292 '[[Handler]]': onFulfilled };
4293 var rejectReaction = { '[[Capabilities]]': promiseCapability,
4294 '[[Handler]]': onRejected };
4295 if (promise['[[PromiseState]]'] === 'pending') {
4296 promise['[[PromiseFulfillReactions]]'].push(fulfillReaction);
4297 promise['[[PromiseRejectReactions]]'].push(rejectReaction);
4298 } else if (promise['[[PromiseState]]'] === 'fulfilled') {
4299 var value = promise['[[PromiseResult]]'];
4300 EnqueueJob('PromiseJobs', PromiseReactionJob, [fulfillReaction, value]);
4301 } else if (promise['[[PromiseState]]'] === 'rejected') {
4302 var reason = promise['[[PromiseResult]]'];
4303 EnqueueJob('PromiseJobs', PromiseReactionJob, [rejectReaction, reason]);
4304 }
4305 return promiseCapability['[[Promise]]'];
4306 });
4307
4308 // 25.4.6 Properties of Promise Instances
4309
4310 if (!('Promise' in global) || OVERRIDE_NATIVE_FOR_TESTING)
4311 global.Promise = Promise;
4312
4313 // Patch early Promise.cast vs. Promise.resolve implementations
4314 if ('cast' in global.Promise) global.Promise.resolve = global.Promise.cast;
4315 }());
4316
4317 // 25.4.5.1 Promise.prototype [ @@toStringTag ]
4318 define(Promise.prototype, $$toStringTag, 'Promise');
4319
4320 // ---------------------------------------
4321 // 26 Reflection
4322 // ---------------------------------------
4323
4324 (function() {
4325 // 26.1 The Reflect Object
4326 if (!('Reflect' in global) || OVERRIDE_NATIVE_FOR_TESTING)
4327 global.Reflect = {};
4328
4329 // 26.1.1 Reflect.apply ( target, thisArgument, argumentsList )
4330 define(
4331 Reflect, 'apply',
4332 function apply(target, thisArgument, argumentsList) {
4333 if (!IsCallable(target)) throw TypeError();
4334 return Function.prototype.apply.call(target, thisArgument, argumentsList);
4335 });
4336
4337 // 26.1.2 Reflect.construct ( target, argumentsList [, newTarget] )
4338 define(
4339 Reflect, 'construct',
4340 function construct(target, argumentsList) {
4341 return __cons(target, argumentsList);
4342 });
4343
4344 // 26.1.3 Reflect.defineProperty ( target, propertyKey, attributes )
4345 define(
4346 Reflect, 'defineProperty',
4347 function defineProperty(target, propertyKey, attributes) {
4348 try {
4349 Object.defineProperty(target, propertyKey, attributes);
4350 return true;
4351 } catch (_) {
4352 return false;
4353 }
4354 });
4355
4356 // 26.1.4 Reflect.deleteProperty ( target, propertyKey )
4357 define(
4358 Reflect, 'deleteProperty',
4359 function deleteProperty(target,name) {
4360 try {
4361 delete target[name];
4362 return !HasOwnProperty(target, name);
4363 } catch (_) {
4364 return false;
4365 }
4366 });
4367
4368 // 26.1.5 Reflect.enumerate ( target )
4369 define(
4370 Reflect, 'enumerate',
4371 function enumerate(target) {
4372 target = ToObject(target);
4373 var iterator = Enumerate(target);
4374 return iterator;
4375 });
4376
4377 // 26.1.6 Reflect.get ( target, propertyKey [ , receiver ])
4378 define(
4379 Reflect, 'get',
4380 function get(target, name, receiver) {
4381 target = ToObject(target);
4382 name = String(name);
4383 receiver = (receiver === undefined) ? target : ToObject(receiver);
4384 var desc = getPropertyDescriptor(target, name);
4385 if (desc && 'get' in desc)
4386 return Function.prototype.call.call(desc['get'], receiver);
4387 return target[name];
4388 });
4389
4390 // 26.1.7 Reflect.getOwnPropertyDescriptor ( target, propertyKey )
4391 define(
4392 Reflect, 'getOwnPropertyDescriptor',
4393 Object.getOwnPropertyDescriptor);
4394
4395 // 26.1.8 Reflect.getPrototypeOf ( target )
4396 define(
4397 Reflect, 'getPrototypeOf',
4398 Object.getPrototypeOf);
4399
4400 // 26.1.9 Reflect.has ( target, propertyKey )
4401 define(
4402 Reflect, 'has',
4403 function has(target,name) {
4404 return String(name) in ToObject(target);
4405 });
4406
4407 // 26.1.10 Reflect.isExtensible (target)
4408 define(
4409 Reflect, 'isExtensible',
4410 Object.isExtensible);
4411
4412 // 26.1.11 Reflect.ownKeys ( target )
4413 define(
4414 Reflect, 'ownKeys',
4415 function ownKeys(target) {
4416 var obj = ToObject(target);
4417 return Object.getOwnPropertyNames(obj);
4418 });
4419
4420 // 26.1.12 Reflect.preventExtensions ( target )
4421 define(
4422 Reflect, 'preventExtensions',
4423 function preventExtensions(target) {
4424 try { Object.preventExtensions(target); return true; } catch (_) { return false; }
4425 });
4426
4427 // 26.1.13 Reflect.set ( target, propertyKey, V [ , receiver ] )
4428 define(
4429 Reflect, 'set',
4430 function set(target, name, value, receiver) {
4431 target = ToObject(target);
4432 name = String(name);
4433 receiver = (receiver === undefined) ? target : ToObject(receiver);
4434 var desc = getPropertyDescriptor(target, name);
4435 try {
4436 if (desc && 'set' in desc)
4437 Function.prototype.call.call(desc['set'], receiver, value);
4438 else
4439 target[name] = value;
4440 return true;
4441 } catch (_) {
4442 return false;
4443 }
4444 });
4445
4446 // 26.1.14 Reflect.setPrototypeOf ( target, proto )
4447 define(
4448 Reflect, 'setPrototypeOf',
4449 function setPrototypeOf(target, proto) {
4450 try {
4451 target.__proto__ = proto;
4452 return Reflect.getPrototypeOf(target) === proto;
4453 } catch(_) {
4454 return false;
4455 }
4456 });
4457
4458 }());
4459
4460 // ---------------------------------------
4461 // 26.2 Proxy Objects
4462 // ---------------------------------------
4463
4464 // Not polyfillable.
4465
4466}(self));
4467
4468// This helper is defined outside the main scope so that the use of
4469// 'eval' does not taint the scope for minifiers.
4470function __cons(t, a) {
4471 return eval('new t(' + a.map(function(_, i) { return 'a[' + i + ']'; }).join(',') + ')');
4472}
6e0f24b1
IC
4473</script>
4474 <script>(function (root) {
4475 "use strict";
4476
4477/***** unorm.js *****/
4478
4479/*
4480 * UnicodeNormalizer 1.0.0
4481 * Copyright (c) 2008 Matsuza
4482 * Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
4483 * $Date: 2008-06-05 16:44:17 +0200 (Thu, 05 Jun 2008) $
4484 * $Rev: 13309 $
4485 */
4486
4487 var DEFAULT_FEATURE = [null, 0, {}];
4488 var CACHE_THRESHOLD = 10;
4489 var SBase = 0xAC00, LBase = 0x1100, VBase = 0x1161, TBase = 0x11A7, LCount = 19, VCount = 21, TCount = 28;
4490 var NCount = VCount * TCount; // 588
4491 var SCount = LCount * NCount; // 11172
4492
4493 var UChar = function(cp, feature){
4494 this.codepoint = cp;
4495 this.feature = feature;
4496 };
4497
4498 // Strategies
4499 var cache = {};
4500 var cacheCounter = [];
4501 for (var i = 0; i <= 0xFF; ++i){
4502 cacheCounter[i] = 0;
4503 }
4504
4505 function fromCache(next, cp, needFeature){
4506 var ret = cache[cp];
4507 if(!ret){
4508 ret = next(cp, needFeature);
4509 if(!!ret.feature && ++cacheCounter[(cp >> 8) & 0xFF] > CACHE_THRESHOLD){
4510 cache[cp] = ret;
4511 }
4512 }
4513 return ret;
4514 }
4515
4516 function fromData(next, cp, needFeature){
4517 var hash = cp & 0xFF00;
4518 var dunit = UChar.udata[hash] || {};
4519 var f = dunit[cp];
4520 return f ? new UChar(cp, f) : new UChar(cp, DEFAULT_FEATURE);
4521 }
4522 function fromCpOnly(next, cp, needFeature){
4523 return !!needFeature ? next(cp, needFeature) : new UChar(cp, null);
4524 }
4525 function fromRuleBasedJamo(next, cp, needFeature){
4526 var j;
4527 if(cp < LBase || (LBase + LCount <= cp && cp < SBase) || (SBase + SCount < cp)){
4528 return next(cp, needFeature);
4529 }
4530 if(LBase <= cp && cp < LBase + LCount){
4531 var c = {};
4532 var base = (cp - LBase) * VCount;
4533 for (j = 0; j < VCount; ++j){
4534 c[VBase + j] = SBase + TCount * (j + base);
4535 }
4536 return new UChar(cp, [,,c]);
4537 }
4538
4539 var SIndex = cp - SBase;
4540 var TIndex = SIndex % TCount;
4541 var feature = [];
4542 if(TIndex !== 0){
4543 feature[0] = [SBase + SIndex - TIndex, TBase + TIndex];
4544 } else {
4545 feature[0] = [LBase + Math.floor(SIndex / NCount), VBase + Math.floor((SIndex % NCount) / TCount)];
4546 feature[2] = {};
4547 for (j = 1; j < TCount; ++j){
4548 feature[2][TBase + j] = cp + j;
4549 }
4550 }
4551 return new UChar(cp, feature);
4552 }
4553 function fromCpFilter(next, cp, needFeature){
4554 return cp < 60 || 13311 < cp && cp < 42607 ? new UChar(cp, DEFAULT_FEATURE) : next(cp, needFeature);
4555 }
4556
4557 var strategies = [fromCpFilter, fromCache, fromCpOnly, fromRuleBasedJamo, fromData];
4558
4559 UChar.fromCharCode = strategies.reduceRight(function (next, strategy) {
4560 return function (cp, needFeature) {
4561 return strategy(next, cp, needFeature);
4562 };
4563 }, null);
4564
4565 UChar.isHighSurrogate = function(cp){
4566 return cp >= 0xD800 && cp <= 0xDBFF;
4567 };
4568 UChar.isLowSurrogate = function(cp){
4569 return cp >= 0xDC00 && cp <= 0xDFFF;
4570 };
4571
4572 UChar.prototype.prepFeature = function(){
4573 if(!this.feature){
4574 this.feature = UChar.fromCharCode(this.codepoint, true).feature;
4575 }
4576 };
4577
4578 UChar.prototype.toString = function(){
4579 if(this.codepoint < 0x10000){
4580 return String.fromCharCode(this.codepoint);
4581 } else {
4582 var x = this.codepoint - 0x10000;
4583 return String.fromCharCode(Math.floor(x / 0x400) + 0xD800, x % 0x400 + 0xDC00);
4584 }
4585 };
4586
4587 UChar.prototype.getDecomp = function(){
4588 this.prepFeature();
4589 return this.feature[0] || null;
4590 };
4591
4592 UChar.prototype.isCompatibility = function(){
4593 this.prepFeature();
4594 return !!this.feature[1] && (this.feature[1] & (1 << 8));
4595 };
4596 UChar.prototype.isExclude = function(){
4597 this.prepFeature();
4598 return !!this.feature[1] && (this.feature[1] & (1 << 9));
4599 };
4600 UChar.prototype.getCanonicalClass = function(){
4601 this.prepFeature();
4602 return !!this.feature[1] ? (this.feature[1] & 0xff) : 0;
4603 };
4604 UChar.prototype.getComposite = function(following){
4605 this.prepFeature();
4606 if(!this.feature[2]){
4607 return null;
4608 }
4609 var cp = this.feature[2][following.codepoint];
4610 return cp ? UChar.fromCharCode(cp) : null;
4611 };
4612
4613 var UCharIterator = function(str){
4614 this.str = str;
4615 this.cursor = 0;
4616 };
4617 UCharIterator.prototype.next = function(){
4618 if(!!this.str && this.cursor < this.str.length){
4619 var cp = this.str.charCodeAt(this.cursor++);
4620 var d;
4621 if(UChar.isHighSurrogate(cp) && this.cursor < this.str.length && UChar.isLowSurrogate((d = this.str.charCodeAt(this.cursor)))){
4622 cp = (cp - 0xD800) * 0x400 + (d -0xDC00) + 0x10000;
4623 ++this.cursor;
4624 }
4625 return UChar.fromCharCode(cp);
4626 } else {
4627 this.str = null;
4628 return null;
4629 }
4630 };
4631
4632 var RecursDecompIterator = function(it, cano){
4633 this.it = it;
4634 this.canonical = cano;
4635 this.resBuf = [];
4636 };
4637
4638 RecursDecompIterator.prototype.next = function(){
4639 function recursiveDecomp(cano, uchar){
4640 var decomp = uchar.getDecomp();
4641 if(!!decomp && !(cano && uchar.isCompatibility())){
4642 var ret = [];
4643 for(var i = 0; i < decomp.length; ++i){
4644 var a = recursiveDecomp(cano, UChar.fromCharCode(decomp[i]));
4645 ret = ret.concat(a);
4646 }
4647 return ret;
4648 } else {
4649 return [uchar];
4650 }
4651 }
4652 if(this.resBuf.length === 0){
4653 var uchar = this.it.next();
4654 if(!uchar){
4655 return null;
4656 }
4657 this.resBuf = recursiveDecomp(this.canonical, uchar);
4658 }
4659 return this.resBuf.shift();
4660 };
4661
4662 var DecompIterator = function(it){
4663 this.it = it;
4664 this.resBuf = [];
4665 };
4666
4667 DecompIterator.prototype.next = function(){
4668 var cc;
4669 if(this.resBuf.length === 0){
4670 do{
4671 var uchar = this.it.next();
4672 if(!uchar){
4673 break;
4674 }
4675 cc = uchar.getCanonicalClass();
4676 var inspt = this.resBuf.length;
4677 if(cc !== 0){
4678 for(; inspt > 0; --inspt){
4679 var uchar2 = this.resBuf[inspt - 1];
4680 var cc2 = uchar2.getCanonicalClass();
4681 if(cc2 <= cc){
4682 break;
4683 }
4684 }
4685 }
4686 this.resBuf.splice(inspt, 0, uchar);
4687 } while(cc !== 0);
4688 }
4689 return this.resBuf.shift();
4690 };
4691
4692 var CompIterator = function(it){
4693 this.it = it;
4694 this.procBuf = [];
4695 this.resBuf = [];
4696 this.lastClass = null;
4697 };
4698
4699 CompIterator.prototype.next = function(){
4700 while(this.resBuf.length === 0){
4701 var uchar = this.it.next();
4702 if(!uchar){
4703 this.resBuf = this.procBuf;
4704 this.procBuf = [];
4705 break;
4706 }
4707 if(this.procBuf.length === 0){
4708 this.lastClass = uchar.getCanonicalClass();
4709 this.procBuf.push(uchar);
4710 } else {
4711 var starter = this.procBuf[0];
4712 var composite = starter.getComposite(uchar);
4713 var cc = uchar.getCanonicalClass();
4714 if(!!composite && (this.lastClass < cc || this.lastClass === 0)){
4715 this.procBuf[0] = composite;
4716 } else {
4717 if(cc === 0){
4718 this.resBuf = this.procBuf;
4719 this.procBuf = [];
4720 }
4721 this.lastClass = cc;
4722 this.procBuf.push(uchar);
4723 }
4724 }
4725 }
4726 return this.resBuf.shift();
4727 };
4728
4729 var createIterator = function(mode, str){
4730 switch(mode){
4731 case "NFD":
4732 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true));
4733 case "NFKD":
4734 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false));
4735 case "NFC":
4736 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true)));
4737 case "NFKC":
4738 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false)));
4739 }
4740 throw mode + " is invalid";
4741 };
4742 var normalize = function(mode, str){
4743 var it = createIterator(mode, str);
4744 var ret = "";
4745 var uchar;
4746 while(!!(uchar = it.next())){
4747 ret += uchar.toString();
4748 }
4749 return ret;
4750 };
4751
4752 /* API functions */
4753 function nfd(str){
4754 return normalize("NFD", str);
4755 }
4756
4757 function nfkd(str){
4758 return normalize("NFKD", str);
4759 }
4760
4761 function nfc(str){
4762 return normalize("NFC", str);
4763 }
4764
4765 function nfkc(str){
4766 return normalize("NFKC", str);
4767 }
4768
4769/* Unicode data */
4770UChar.udata={
47710:{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]]},
4772256:{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]},
4773512:{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]},
4774768:{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]},
47751024:{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]]},
47761280:{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]},
47771536:{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]},
47781792:{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]},
47792048:{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]},
47802304:{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]},
47812560:{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]},
47822816:{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]},
47833072:{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]},
47843328:{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]]},
47853584:{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]},
47863840:{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]},
47874096:{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]},
47884352:{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]},
47894608:{70197:[,9],70198:[,7],70377:[,7],70378:[,9]},
47904864:{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]},
47915120:{70841:[,,{70832:70844,70842:70843,70845:70846}],70843:[[70841,70842]],70844:[[70841,70832]],70846:[[70841,70845]],70850:[,9],70851:[,7]},
47925376:{71096:[,,{71087:71098}],71097:[,,{71087:71099}],71098:[[71096,71087]],71099:[[71097,71087]],71103:[,9],71104:[,7]},
47935632:{71231:[,9],71350:[,9],71351:[,7]},
47945888:{5908:[,9],5940:[,9],6098:[,9],6109:[,230]},
47956144:{6313:[,228]},
47966400:{6457:[,222],6458:[,230],6459:[,220]},
47976656:{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]},
47986912:{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]},
47997168:{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]},
48007424:{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]},
48017680:{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]]},
48027936:{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}]},
48038192:{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]},
48048448:{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}]},
48058704:{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]]},
48068960:{9001:[[12296]],9002:[[12297]]},
48079216:{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]},
480810752:{10764:[[8747,8747,8747,8747],256],10868:[[58,58,61],256],10869:[[61,61],256],10870:[[61,61,61],256],10972:[[10973,824],512]},
480911264:{11388:[[106],256],11389:[[86],256],11503:[,230],11504:[,230],11505:[,230]},
481011520:{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]},
481111776:{11935:[[27597],256],12019:[[40863],256]},
481212032:{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]},
481312288:{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]},
481412544:{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]},
481512800:{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]},
481613056:{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]},
481727136:{92912:[,1],92913:[,1],92914:[,1],92915:[,1],92916:[,1]},
481827392:{92976:[,230],92977:[,230],92978:[,230],92979:[,230],92980:[,230],92981:[,230],92982:[,230]},
481942496:{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]},
482042752:{42864:[[42863],256],43000:[[294],256],43001:[[339],256]},
482143008:{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]},
482243264:{43307:[,220],43308:[,220],43309:[,220],43347:[,9],43443:[,7],43456:[,9]},
482343520:{43696:[,230],43698:[,230],43699:[,230],43700:[,220],43703:[,230],43704:[,230],43710:[,230],43711:[,230],43713:[,230],43766:[,9]},
482443776:{43868:[[42791],256],43869:[[43831],256],43870:[[619],256],43871:[[43858],256],44013:[,9]},
482548128:{113822:[,1]},
482653504:{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]},
482753760:{119362:[,230],119363:[,230],119364:[,230]},
482854272:{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]},
482954528:{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]},
483054784:{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]},
483155040:{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]},
483259392:{125136:[,220],125137:[,220],125138:[,220],125139:[,220],125140:[,220],125141:[,220],125142:[,220]},
483360928:{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]},
483461696:{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]},
483561952:{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]},
483663488:{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]]},
483763744:{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]]},
483864000:{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]]},
483964256:{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]},
484064512:{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]},
484164768:{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]},
484265024:{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]},
484365280:{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]}
4844
4845};
4846
4847 /***** Module to export */
4848 var unorm = {
4849 nfc: nfc,
4850 nfd: nfd,
4851 nfkc: nfkc,
4852 nfkd: nfkd
4853 };
4854
4855 /*globals module:true,define:true*/
4856
4857 // CommonJS
4858 if (typeof module === "object") {
4859 module.exports = unorm;
4860
4861 // AMD
4862 } else if (typeof define === "function" && define.amd) {
4863 define("unorm", function () {
4864 return unorm;
4865 });
4866
4867 // Global
4868 } else {
4869 root.unorm = unorm;
4870 }
4871
4872 /***** Export as shim for String::normalize method *****/
4873 /*
4874 http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts#november_8_2013_draft_rev_21
4875
4876 21.1.3.12 String.prototype.normalize(form="NFC")
4877 When the normalize method is called with one argument form, the following steps are taken:
4878
4879 1. Let O be CheckObjectCoercible(this value).
4880 2. Let S be ToString(O).
4881 3. ReturnIfAbrupt(S).
4882 4. If form is not provided or undefined let form be "NFC".
4883 5. Let f be ToString(form).
4884 6. ReturnIfAbrupt(f).
4885 7. If f is not one of "NFC", "NFD", "NFKC", or "NFKD", then throw a RangeError Exception.
4886 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.
4887 9. Return ns.
4888
4889 The length property of the normalize method is 0.
4890
4891 *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.
4892 */
4893 unorm.shimApplied = false;
4894
4895 if (!String.prototype.normalize) {
4896 String.prototype.normalize = function(form) {
4897 var str = "" + this;
4898 form = form === undefined ? "NFC" : form;
4899
4900 if (form === "NFC") {
4901 return unorm.nfc(str);
4902 } else if (form === "NFD") {
4903 return unorm.nfd(str);
4904 } else if (form === "NFKC") {
4905 return unorm.nfkc(str);
4906 } else if (form === "NFKD") {
4907 return unorm.nfkd(str);
4908 } else {
4909 throw new RangeError("Invalid normalization form: " + form);
4910 }
4911 };
4912
4913 unorm.shimApplied = true;
4914 }
4915}(this));
8b095871
IC
4916</script>
4917 <script>/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
4918!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)
4919},_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))
4920},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});
4921</script>
4922 <script>/*!
4923 * Bootstrap v3.2.0 (http://getbootstrap.com)
4924 * Copyright 2011-2014 Twitter, Inc.
4925 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
4926 */
4927if("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>
4928 <script>(function() {
4929 'use strict';
4930
4931 /**
4932 * Extend an Object with another Object's properties.
4933 *
4934 * The source objects are specified as additional arguments.
4935 *
4936 * @param dst Object the object to extend.
4937 *
4938 * @return Object the final object.
4939 */
4940 var _extend = function(dst) {
4941 var sources = Array.prototype.slice.call(arguments, 1);
4942 for (var i=0; i<sources.length; ++i) {
4943 var src = sources[i];
4944 for (var p in src) {
4945 if (src.hasOwnProperty(p)) dst[p] = src[p];
4946 }
4947 }
4948 return dst;
4949 };
4950
4951
4952 /**
4953 * Defer execution of given function.
4954 * @param {Function} func
4955 */
4956 var _defer = function(func) {
4957 if (typeof setImmediate === 'function') {
4958 return setImmediate(func);
4959 } else {
4960 return setTimeout(func, 0);
4961 }
4962 };
4963
4964 /**
4965 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
4966 */
4967 var Levenshtein = {
4968 /**
4969 * Calculate levenshtein distance of the two strings.
4970 *
4971 * @param str1 String the first string.
4972 * @param str2 String the second string.
4973 * @return Integer the levenshtein distance (0 and above).
4974 */
4975 get: function(str1, str2) {
4976 // base cases
4977 if (str1 === str2) return 0;
4978 if (str1.length === 0) return str2.length;
4979 if (str2.length === 0) return str1.length;
4980
4981 // two rows
4982 var prevRow = new Array(str2.length + 1),
4983 curCol, nextCol, i, j, tmp;
4984
4985 // initialise previous row
4986 for (i=0; i<prevRow.length; ++i) {
4987 prevRow[i] = i;
4988 }
4989
4990 // calculate current row distance from previous row
4991 for (i=0; i<str1.length; ++i) {
4992 nextCol = i + 1;
4993
4994 for (j=0; j<str2.length; ++j) {
4995 curCol = nextCol;
4996
4997 // substution
4998 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
4999 // insertion
5000 tmp = curCol + 1;
5001 if (nextCol > tmp) {
5002 nextCol = tmp;
5003 }
5004 // deletion
5005 tmp = prevRow[j + 1] + 1;
5006 if (nextCol > tmp) {
5007 nextCol = tmp;
5008 }
5009
5010 // copy current col value into previous (in preparation for next iteration)
5011 prevRow[j] = curCol;
5012 }
5013
5014 // copy last col value into previous (in preparation for next iteration)
5015 prevRow[j] = nextCol;
5016 }
5017
5018 return nextCol;
5019 },
5020
5021 /**
5022 * Asynchronously calculate levenshtein distance of the two strings.
5023 *
5024 * @param str1 String the first string.
5025 * @param str2 String the second string.
5026 * @param cb Function callback function with signature: function(Error err, int distance)
5027 * @param [options] Object additional options.
5028 * @param [options.progress] Function progress callback with signature: function(percentComplete)
5029 */
5030 getAsync: function(str1, str2, cb, options) {
5031 options = _extend({}, {
5032 progress: null
5033 }, options);
5034
5035 // base cases
5036 if (str1 === str2) return cb(null, 0);
5037 if (str1.length === 0) return cb(null, str2.length);
5038 if (str2.length === 0) return cb(null, str1.length);
5039
5040 // two rows
5041 var prevRow = new Array(str2.length + 1),
5042 curCol, nextCol,
5043 i, j, tmp,
5044 startTime, currentTime;
5045
5046 // initialise previous row
5047 for (i=0; i<prevRow.length; ++i) {
5048 prevRow[i] = i;
5049 }
5050
5051 nextCol = 1;
5052 i = 0;
5053 j = -1;
5054
5055 var __calculate = function() {
5056 // reset timer
5057 startTime = new Date().valueOf();
5058 currentTime = startTime;
5059
5060 // keep going until one second has elapsed
5061 while (currentTime - startTime < 1000) {
5062 // reached end of current row?
5063 if (str2.length <= (++j)) {
5064 // copy current into previous (in preparation for next iteration)
5065 prevRow[j] = nextCol;
5066
5067 // if already done all chars
5068 if (str1.length <= (++i)) {
5069 return cb(null, nextCol);
5070 }
5071 // else if we have more left to do
5072 else {
5073 nextCol = i + 1;
5074 j = 0;
5075 }
5076 }
5077
5078 // calculation
5079 curCol = nextCol;
5080
5081 // substution
5082 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
5083 // insertion
5084 tmp = curCol + 1;
5085 if (nextCol > tmp) {
5086 nextCol = tmp;
5087 }
5088 // deletion
5089 tmp = prevRow[j + 1] + 1;
5090 if (nextCol > tmp) {
5091 nextCol = tmp;
5092 }
5093
5094 // copy current into previous (in preparation for next iteration)
5095 prevRow[j] = curCol;
5096
5097 // get current time
5098 currentTime = new Date().valueOf();
5099 }
5100
5101 // send a progress update?
5102 if (null !== options.progress) {
5103 try {
5104 options.progress.call(null, (i * 100.0/ str1.length));
5105 } catch (err) {
5106 return cb('Progress callback: ' + err.toString());
5107 }
5108 }
5109
5110 // next iteration
5111 _defer(__calculate);
5112 };
5113
5114 __calculate();
5115 }
5116
5117 };
5118
5119 // amd
5120 if (typeof define !== "undefined" && define !== null && define.amd) {
5121 define(function() {
5122 return Levenshtein;
5123 });
5124 }
5125 // commonjs
5126 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
5127 module.exports = Levenshtein;
5128 }
5129 // web worker
5130 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
5131 self.Levenshtein = Levenshtein;
5132 }
5133 // browser main thread
5134 else if (typeof window !== "undefined" && window !== null) {
5135 window.Levenshtein = Levenshtein;
5136 }
5137}());
5138
5139</script>
5140 <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},
5141write: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;
5142for(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-
51437,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]=
51440<=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},
5145setupTimingPattern: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=
5146j.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-
5147b-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,
5148c),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=
51490,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&&
5150(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,
515178,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)-
5152j.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:"+
5153a);}},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:"+
5154a);}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+
51552)&&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),
5156LOG_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>
5157this.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],
5158[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,
5159116],[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,
516043,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,
51613,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,
516255,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,
516345,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*
5164(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,
5165correctLevel:2,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),
5166j=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",
5167d+"px").css("background-color",a.isDark(e,i)?h.foreground:h.background).appendTo(f)}}a=c;$(a).appendTo(this)})}})($);
5168</script>
5169 <script>(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.bitcoin = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
5170// (public) Constructor
5171function BigInteger(a, b, c) {
5172 if (!(this instanceof BigInteger))
5173 return new BigInteger(a, b, c)
5174
5175 if (a != null) {
5176 if ("number" == typeof a) this.fromNumber(a, b, c)
5177 else if (b == null && "string" != typeof a) this.fromString(a, 256)
5178 else this.fromString(a, b)
5179 }
5180}
5181
5182var proto = BigInteger.prototype
5183
5184// duck-typed isBigInteger
5185proto.__bigi = require('../package.json').version
5186BigInteger.isBigInteger = function (obj, check_ver) {
5187 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
5188}
5189
5190// Bits per digit
5191var dbits
5192
5193// am: Compute w_j += (x*this_i), propagate carries,
5194// c is initial carry, returns final carry.
5195// c < 3*dvalue, x < 2*dvalue, this_i < dvalue
5196// We need to select the fastest one that works in this environment.
5197
5198// am1: use a single mult and divide to get the high bits,
5199// max digit bits should be 26 because
5200// max internal value = 2*dvalue^2-2*dvalue (< 2^53)
5201function am1(i, x, w, j, c, n) {
5202 while (--n >= 0) {
5203 var v = x * this[i++] + w[j] + c
5204 c = Math.floor(v / 0x4000000)
5205 w[j++] = v & 0x3ffffff
5206 }
5207 return c
5208}
5209// am2 avoids a big mult-and-extract completely.
5210// Max digit bits should be <= 30 because we do bitwise ops
5211// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
5212function am2(i, x, w, j, c, n) {
5213 var xl = x & 0x7fff,
5214 xh = x >> 15
5215 while (--n >= 0) {
5216 var l = this[i] & 0x7fff
5217 var h = this[i++] >> 15
5218 var m = xh * l + h * xl
5219 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
5220 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
5221 w[j++] = l & 0x3fffffff
5222 }
5223 return c
5224}
5225// Alternately, set max digit bits to 28 since some
5226// browsers slow down when dealing with 32-bit numbers.
5227function am3(i, x, w, j, c, n) {
5228 var xl = x & 0x3fff,
5229 xh = x >> 14
5230 while (--n >= 0) {
5231 var l = this[i] & 0x3fff
5232 var h = this[i++] >> 14
5233 var m = xh * l + h * xl
5234 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
5235 c = (l >> 28) + (m >> 14) + xh * h
5236 w[j++] = l & 0xfffffff
5237 }
5238 return c
5239}
5240
5241// wtf?
5242BigInteger.prototype.am = am1
5243dbits = 26
5244
5245BigInteger.prototype.DB = dbits
5246BigInteger.prototype.DM = ((1 << dbits) - 1)
5247var DV = BigInteger.prototype.DV = (1 << dbits)
5248
5249var BI_FP = 52
5250BigInteger.prototype.FV = Math.pow(2, BI_FP)
5251BigInteger.prototype.F1 = BI_FP - dbits
5252BigInteger.prototype.F2 = 2 * dbits - BI_FP
5253
5254// Digit conversions
5255var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
5256var BI_RC = new Array()
5257var rr, vv
5258rr = "0".charCodeAt(0)
5259for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
5260rr = "a".charCodeAt(0)
5261for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
5262rr = "A".charCodeAt(0)
5263for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
5264
5265function int2char(n) {
5266 return BI_RM.charAt(n)
5267}
5268
5269function intAt(s, i) {
5270 var c = BI_RC[s.charCodeAt(i)]
5271 return (c == null) ? -1 : c
5272}
5273
5274// (protected) copy this to r
5275function bnpCopyTo(r) {
5276 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
5277 r.t = this.t
5278 r.s = this.s
5279}
5280
5281// (protected) set from integer value x, -DV <= x < DV
5282function bnpFromInt(x) {
5283 this.t = 1
5284 this.s = (x < 0) ? -1 : 0
5285 if (x > 0) this[0] = x
5286 else if (x < -1) this[0] = x + DV
5287 else this.t = 0
5288}
5289
5290// return bigint initialized to value
5291function nbv(i) {
5292 var r = new BigInteger()
5293 r.fromInt(i)
5294 return r
5295}
5296
5297// (protected) set from string and radix
5298function bnpFromString(s, b) {
5299 var self = this
5300
5301 var k
5302 if (b == 16) k = 4
5303 else if (b == 8) k = 3
5304 else if (b == 256) k = 8; // byte array
5305 else if (b == 2) k = 1
5306 else if (b == 32) k = 5
5307 else if (b == 4) k = 2
5308 else {
5309 self.fromRadix(s, b)
5310 return
5311 }
5312 self.t = 0
5313 self.s = 0
5314 var i = s.length,
5315 mi = false,
5316 sh = 0
5317 while (--i >= 0) {
5318 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
5319 if (x < 0) {
5320 if (s.charAt(i) == "-") mi = true
5321 continue
5322 }
5323 mi = false
5324 if (sh == 0)
5325 self[self.t++] = x
5326 else if (sh + k > self.DB) {
5327 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
5328 self[self.t++] = (x >> (self.DB - sh))
5329 } else
5330 self[self.t - 1] |= x << sh
5331 sh += k
5332 if (sh >= self.DB) sh -= self.DB
5333 }
5334 if (k == 8 && (s[0] & 0x80) != 0) {
5335 self.s = -1
5336 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
5337 }
5338 self.clamp()
5339 if (mi) BigInteger.ZERO.subTo(self, self)
5340}
5341
5342// (protected) clamp off excess high words
5343function bnpClamp() {
5344 var c = this.s & this.DM
5345 while (this.t > 0 && this[this.t - 1] == c)--this.t
5346}
5347
5348// (public) return string representation in given radix
5349function bnToString(b) {
5350 var self = this
5351 if (self.s < 0) return "-" + self.negate()
5352 .toString(b)
5353 var k
5354 if (b == 16) k = 4
5355 else if (b == 8) k = 3
5356 else if (b == 2) k = 1
5357 else if (b == 32) k = 5
5358 else if (b == 4) k = 2
5359 else return self.toRadix(b)
5360 var km = (1 << k) - 1,
5361 d, m = false,
5362 r = "",
5363 i = self.t
5364 var p = self.DB - (i * self.DB) % k
5365 if (i-- > 0) {
5366 if (p < self.DB && (d = self[i] >> p) > 0) {
5367 m = true
5368 r = int2char(d)
5369 }
5370 while (i >= 0) {
5371 if (p < k) {
5372 d = (self[i] & ((1 << p) - 1)) << (k - p)
5373 d |= self[--i] >> (p += self.DB - k)
5374 } else {
5375 d = (self[i] >> (p -= k)) & km
5376 if (p <= 0) {
5377 p += self.DB
5378 --i
5379 }
5380 }
5381 if (d > 0) m = true
5382 if (m) r += int2char(d)
5383 }
5384 }
5385 return m ? r : "0"
5386}
5387
5388// (public) -this
5389function bnNegate() {
5390 var r = new BigInteger()
5391 BigInteger.ZERO.subTo(this, r)
5392 return r
5393}
5394
5395// (public) |this|
5396function bnAbs() {
5397 return (this.s < 0) ? this.negate() : this
5398}
5399
5400// (public) return + if this > a, - if this < a, 0 if equal
5401function bnCompareTo(a) {
5402 var r = this.s - a.s
ab78acc6
IC
5403 if (r != 0) return r
5404 var i = this.t
5405 r = i - a.t
5406 if (r != 0) return (this.s < 0) ? -r : r
5407 while (--i >= 0)
5408 if ((r = this[i] - a[i]) != 0) return r
5409 return 0
5410}
3af2954a 5411
8b095871
IC
5412// returns bit length of the integer x
5413function nbits(x) {
5414 var r = 1,
5415 t
5416 if ((t = x >>> 16) != 0) {
5417 x = t
5418 r += 16
5419 }
5420 if ((t = x >> 8) != 0) {
5421 x = t
5422 r += 8
5423 }
5424 if ((t = x >> 4) != 0) {
5425 x = t
5426 r += 4
5427 }
5428 if ((t = x >> 2) != 0) {
5429 x = t
5430 r += 2
5431 }
5432 if ((t = x >> 1) != 0) {
5433 x = t
5434 r += 1
5435 }
5436 return r
5437}
5438
5439// (public) return the number of bits in "this"
5440function bnBitLength() {
5441 if (this.t <= 0) return 0
5442 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
5443}
5444
5445// (public) return the number of bytes in "this"
5446function bnByteLength() {
5447 return this.bitLength() >> 3
5448}
5449
5450// (protected) r = this << n*DB
5451function bnpDLShiftTo(n, r) {
5452 var i
5453 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
5454 for (i = n - 1; i >= 0; --i) r[i] = 0
5455 r.t = this.t + n
5456 r.s = this.s
5457}
5458
5459// (protected) r = this >> n*DB
5460function bnpDRShiftTo(n, r) {
5461 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
5462 r.t = Math.max(this.t - n, 0)
5463 r.s = this.s
5464}
5465
5466// (protected) r = this << n
5467function bnpLShiftTo(n, r) {
5468 var self = this
5469 var bs = n % self.DB
5470 var cbs = self.DB - bs
5471 var bm = (1 << cbs) - 1
5472 var ds = Math.floor(n / self.DB),
5473 c = (self.s << bs) & self.DM,
5474 i
5475 for (i = self.t - 1; i >= 0; --i) {
5476 r[i + ds + 1] = (self[i] >> cbs) | c
5477 c = (self[i] & bm) << bs
5478 }
5479 for (i = ds - 1; i >= 0; --i) r[i] = 0
5480 r[ds] = c
5481 r.t = self.t + ds + 1
5482 r.s = self.s
5483 r.clamp()
5484}
5485
5486// (protected) r = this >> n
5487function bnpRShiftTo(n, r) {
5488 var self = this
5489 r.s = self.s
5490 var ds = Math.floor(n / self.DB)
5491 if (ds >= self.t) {
5492 r.t = 0
5493 return
5494 }
5495 var bs = n % self.DB
5496 var cbs = self.DB - bs
5497 var bm = (1 << bs) - 1
5498 r[0] = self[ds] >> bs
5499 for (var i = ds + 1; i < self.t; ++i) {
5500 r[i - ds - 1] |= (self[i] & bm) << cbs
5501 r[i - ds] = self[i] >> bs
5502 }
5503 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
5504 r.t = self.t - ds
5505 r.clamp()
5506}
5507
5508// (protected) r = this - a
5509function bnpSubTo(a, r) {
5510 var self = this
5511 var i = 0,
5512 c = 0,
5513 m = Math.min(a.t, self.t)
5514 while (i < m) {
5515 c += self[i] - a[i]
5516 r[i++] = c & self.DM
5517 c >>= self.DB
5518 }
5519 if (a.t < self.t) {
5520 c -= a.s
5521 while (i < self.t) {
5522 c += self[i]
5523 r[i++] = c & self.DM
5524 c >>= self.DB
5525 }
5526 c += self.s
5527 } else {
5528 c += self.s
5529 while (i < a.t) {
5530 c -= a[i]
5531 r[i++] = c & self.DM
5532 c >>= self.DB
5533 }
5534 c -= a.s
5535 }
5536 r.s = (c < 0) ? -1 : 0
5537 if (c < -1) r[i++] = self.DV + c
5538 else if (c > 0) r[i++] = c
5539 r.t = i
5540 r.clamp()
5541}
5542
5543// (protected) r = this * a, r != this,a (HAC 14.12)
5544// "this" should be the larger one if appropriate.
5545function bnpMultiplyTo(a, r) {
5546 var x = this.abs(),
5547 y = a.abs()
5548 var i = x.t
5549 r.t = i + y.t
5550 while (--i >= 0) r[i] = 0
5551 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
5552 r.s = 0
5553 r.clamp()
5554 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
5555}
5556
5557// (protected) r = this^2, r != this (HAC 14.16)
5558function bnpSquareTo(r) {
5559 var x = this.abs()
5560 var i = r.t = 2 * x.t
5561 while (--i >= 0) r[i] = 0
5562 for (i = 0; i < x.t - 1; ++i) {
5563 var c = x.am(i, x[i], r, 2 * i, 0, 1)
5564 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
5565 r[i + x.t] -= x.DV
5566 r[i + x.t + 1] = 1
5567 }
5568 }
5569 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
5570 r.s = 0
5571 r.clamp()
5572}
5573
5574// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
5575// r != q, this != m. q or r may be null.
5576function bnpDivRemTo(m, q, r) {
5577 var self = this
5578 var pm = m.abs()
5579 if (pm.t <= 0) return
5580 var pt = self.abs()
5581 if (pt.t < pm.t) {
5582 if (q != null) q.fromInt(0)
5583 if (r != null) self.copyTo(r)
5584 return
5585 }
5586 if (r == null) r = new BigInteger()
5587 var y = new BigInteger(),
5588 ts = self.s,
5589 ms = m.s
5590 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
5591 if (nsh > 0) {
5592 pm.lShiftTo(nsh, y)
5593 pt.lShiftTo(nsh, r)
5594 } else {
5595 pm.copyTo(y)
5596 pt.copyTo(r)
5597 }
5598 var ys = y.t
5599 var y0 = y[ys - 1]
5600 if (y0 == 0) return
5601 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
5602 var d1 = self.FV / yt,
5603 d2 = (1 << self.F1) / yt,
5604 e = 1 << self.F2
5605 var i = r.t,
5606 j = i - ys,
5607 t = (q == null) ? new BigInteger() : q
5608 y.dlShiftTo(j, t)
5609 if (r.compareTo(t) >= 0) {
5610 r[r.t++] = 1
5611 r.subTo(t, r)
5612 }
5613 BigInteger.ONE.dlShiftTo(ys, t)
5614 t.subTo(y, y); // "negative" y so we can replace sub with am later
5615 while (y.t < ys) y[y.t++] = 0
5616 while (--j >= 0) {
5617 // Estimate quotient digit
5618 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
5619 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
5620 y.dlShiftTo(j, t)
5621 r.subTo(t, r)
5622 while (r[i] < --qd) r.subTo(t, r)
5623 }
5624 }
5625 if (q != null) {
5626 r.drShiftTo(ys, q)
5627 if (ts != ms) BigInteger.ZERO.subTo(q, q)
5628 }
5629 r.t = ys
5630 r.clamp()
5631 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
5632 if (ts < 0) BigInteger.ZERO.subTo(r, r)
5633}
5634
5635// (public) this mod a
5636function bnMod(a) {
5637 var r = new BigInteger()
5638 this.abs()
5639 .divRemTo(a, null, r)
5640 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
5641 return r
5642}
5643
5644// Modular reduction using "classic" algorithm
5645function Classic(m) {
5646 this.m = m
5647}
5648
5649function cConvert(x) {
5650 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
5651 else return x
5652}
5653
5654function cRevert(x) {
5655 return x
5656}
5657
5658function cReduce(x) {
5659 x.divRemTo(this.m, null, x)
5660}
5661
5662function cMulTo(x, y, r) {
5663 x.multiplyTo(y, r)
5664 this.reduce(r)
5665}
5666
5667function cSqrTo(x, r) {
5668 x.squareTo(r)
5669 this.reduce(r)
5670}
5671
5672Classic.prototype.convert = cConvert
5673Classic.prototype.revert = cRevert
5674Classic.prototype.reduce = cReduce
5675Classic.prototype.mulTo = cMulTo
5676Classic.prototype.sqrTo = cSqrTo
5677
5678// (protected) return "-1/this % 2^DB"; useful for Mont. reduction
5679// justification:
5680// xy == 1 (mod m)
5681// xy = 1+km
5682// xy(2-xy) = (1+km)(1-km)
5683// x[y(2-xy)] = 1-k^2m^2
5684// x[y(2-xy)] == 1 (mod m^2)
5685// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
5686// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
5687// JS multiply "overflows" differently from C/C++, so care is needed here.
5688function bnpInvDigit() {
5689 if (this.t < 1) return 0
5690 var x = this[0]
5691 if ((x & 1) == 0) return 0
5692 var y = x & 3; // y == 1/x mod 2^2
5693 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
5694 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
5695 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
5696 // last step - calculate inverse mod DV directly
5697 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
5698 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
5699 // we really want the negative inverse, and -DV < y < DV
5700 return (y > 0) ? this.DV - y : -y
5701}
5702
5703// Montgomery reduction
5704function Montgomery(m) {
5705 this.m = m
5706 this.mp = m.invDigit()
5707 this.mpl = this.mp & 0x7fff
5708 this.mph = this.mp >> 15
5709 this.um = (1 << (m.DB - 15)) - 1
5710 this.mt2 = 2 * m.t
5711}
5712
5713// xR mod m
5714function montConvert(x) {
5715 var r = new BigInteger()
5716 x.abs()
5717 .dlShiftTo(this.m.t, r)
5718 r.divRemTo(this.m, null, r)
5719 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
5720 return r
5721}
5722
5723// x/R mod m
5724function montRevert(x) {
5725 var r = new BigInteger()
5726 x.copyTo(r)
5727 this.reduce(r)
5728 return r
5729}
5730
5731// x = x/R mod m (HAC 14.32)
5732function montReduce(x) {
5733 while (x.t <= this.mt2) // pad x so am has enough room later
5734 x[x.t++] = 0
5735 for (var i = 0; i < this.m.t; ++i) {
5736 // faster way of calculating u0 = x[i]*mp mod DV
5737 var j = x[i] & 0x7fff
5738 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
5739 // use am to combine the multiply-shift-add into one call
5740 j = i + this.m.t
5741 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
5742 // propagate carry
5743 while (x[j] >= x.DV) {
5744 x[j] -= x.DV
5745 x[++j]++
5746 }
5747 }
5748 x.clamp()
5749 x.drShiftTo(this.m.t, x)
5750 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
5751}
5752
5753// r = "x^2/R mod m"; x != r
5754function montSqrTo(x, r) {
5755 x.squareTo(r)
5756 this.reduce(r)
5757}
5758
5759// r = "xy/R mod m"; x,y != r
5760function montMulTo(x, y, r) {
5761 x.multiplyTo(y, r)
5762 this.reduce(r)
5763}
5764
5765Montgomery.prototype.convert = montConvert
5766Montgomery.prototype.revert = montRevert
5767Montgomery.prototype.reduce = montReduce
5768Montgomery.prototype.mulTo = montMulTo
5769Montgomery.prototype.sqrTo = montSqrTo
5770
5771// (protected) true iff this is even
5772function bnpIsEven() {
5773 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
5774}
5775
5776// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
5777function bnpExp(e, z) {
5778 if (e > 0xffffffff || e < 1) return BigInteger.ONE
5779 var r = new BigInteger(),
5780 r2 = new BigInteger(),
5781 g = z.convert(this),
5782 i = nbits(e) - 1
5783 g.copyTo(r)
5784 while (--i >= 0) {
5785 z.sqrTo(r, r2)
5786 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
5787 else {
5788 var t = r
5789 r = r2
5790 r2 = t
5791 }
5792 }
5793 return z.revert(r)
5794}
5795
5796// (public) this^e % m, 0 <= e < 2^32
5797function bnModPowInt(e, m) {
5798 var z
5799 if (e < 256 || m.isEven()) z = new Classic(m)
5800 else z = new Montgomery(m)
5801 return this.exp(e, z)
5802}
5803
5804// protected
5805proto.copyTo = bnpCopyTo
5806proto.fromInt = bnpFromInt
5807proto.fromString = bnpFromString
5808proto.clamp = bnpClamp
5809proto.dlShiftTo = bnpDLShiftTo
5810proto.drShiftTo = bnpDRShiftTo
5811proto.lShiftTo = bnpLShiftTo
5812proto.rShiftTo = bnpRShiftTo
5813proto.subTo = bnpSubTo
5814proto.multiplyTo = bnpMultiplyTo
5815proto.squareTo = bnpSquareTo
5816proto.divRemTo = bnpDivRemTo
5817proto.invDigit = bnpInvDigit
5818proto.isEven = bnpIsEven
5819proto.exp = bnpExp
5820
5821// public
5822proto.toString = bnToString
5823proto.negate = bnNegate
5824proto.abs = bnAbs
5825proto.compareTo = bnCompareTo
5826proto.bitLength = bnBitLength
5827proto.byteLength = bnByteLength
5828proto.mod = bnMod
5829proto.modPowInt = bnModPowInt
5830
5831// (public)
5832function bnClone() {
5833 var r = new BigInteger()
5834 this.copyTo(r)
5835 return r
5836}
5837
5838// (public) return value as integer
5839function bnIntValue() {
5840 if (this.s < 0) {
5841 if (this.t == 1) return this[0] - this.DV
5842 else if (this.t == 0) return -1
5843 } else if (this.t == 1) return this[0]
5844 else if (this.t == 0) return 0
5845 // assumes 16 < DB < 32
5846 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
5847}
5848
5849// (public) return value as byte
5850function bnByteValue() {
5851 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
5852}
5853
5854// (public) return value as short (assumes DB>=16)
5855function bnShortValue() {
5856 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
5857}
5858
5859// (protected) return x s.t. r^x < DV
5860function bnpChunkSize(r) {
5861 return Math.floor(Math.LN2 * this.DB / Math.log(r))
5862}
5863
5864// (public) 0 if this == 0, 1 if this > 0
5865function bnSigNum() {
5866 if (this.s < 0) return -1
5867 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
5868 else return 1
5869}
5870
5871// (protected) convert to radix string
5872function bnpToRadix(b) {
5873 if (b == null) b = 10
5874 if (this.signum() == 0 || b < 2 || b > 36) return "0"
5875 var cs = this.chunkSize(b)
5876 var a = Math.pow(b, cs)
5877 var d = nbv(a),
5878 y = new BigInteger(),
5879 z = new BigInteger(),
5880 r = ""
5881 this.divRemTo(d, y, z)
5882 while (y.signum() > 0) {
5883 r = (a + z.intValue())
5884 .toString(b)
5885 .substr(1) + r
5886 y.divRemTo(d, y, z)
5887 }
5888 return z.intValue()
5889 .toString(b) + r
5890}
5891
5892// (protected) convert from radix string
5893function bnpFromRadix(s, b) {
5894 var self = this
5895 self.fromInt(0)
5896 if (b == null) b = 10
5897 var cs = self.chunkSize(b)
5898 var d = Math.pow(b, cs),
5899 mi = false,
5900 j = 0,
5901 w = 0
5902 for (var i = 0; i < s.length; ++i) {
5903 var x = intAt(s, i)
5904 if (x < 0) {
5905 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
5906 continue
5907 }
5908 w = b * w + x
5909 if (++j >= cs) {
5910 self.dMultiply(d)
5911 self.dAddOffset(w, 0)
5912 j = 0
5913 w = 0
5914 }
5915 }
5916 if (j > 0) {
5917 self.dMultiply(Math.pow(b, j))
5918 self.dAddOffset(w, 0)
5919 }
5920 if (mi) BigInteger.ZERO.subTo(self, self)
5921}
5922
5923// (protected) alternate constructor
5924function bnpFromNumber(a, b, c) {
5925 var self = this
5926 if ("number" == typeof b) {
5927 // new BigInteger(int,int,RNG)
5928 if (a < 2) self.fromInt(1)
5929 else {
5930 self.fromNumber(a, c)
5931 if (!self.testBit(a - 1)) // force MSB set
5932 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
5933 if (self.isEven()) self.dAddOffset(1, 0); // force odd
5934 while (!self.isProbablePrime(b)) {
5935 self.dAddOffset(2, 0)
5936 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
5937 }
5938 }
5939 } else {
5940 // new BigInteger(int,RNG)
5941 var x = new Array(),
5942 t = a & 7
5943 x.length = (a >> 3) + 1
5944 b.nextBytes(x)
5945 if (t > 0) x[0] &= ((1 << t) - 1)
5946 else x[0] = 0
5947 self.fromString(x, 256)
5948 }
5949}
5950
5951// (public) convert to bigendian byte array
5952function bnToByteArray() {
5953 var self = this
5954 var i = self.t,
5955 r = new Array()
5956 r[0] = self.s
5957 var p = self.DB - (i * self.DB) % 8,
5958 d, k = 0
5959 if (i-- > 0) {
5960 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
5961 r[k++] = d | (self.s << (self.DB - p))
5962 while (i >= 0) {
5963 if (p < 8) {
5964 d = (self[i] & ((1 << p) - 1)) << (8 - p)
5965 d |= self[--i] >> (p += self.DB - 8)
5966 } else {
5967 d = (self[i] >> (p -= 8)) & 0xff
5968 if (p <= 0) {
5969 p += self.DB
5970 --i
5971 }
5972 }
5973 if ((d & 0x80) != 0) d |= -256
5974 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
5975 if (k > 0 || d != self.s) r[k++] = d
5976 }
5977 }
5978 return r
5979}
5980
5981function bnEquals(a) {
5982 return (this.compareTo(a) == 0)
5983}
5984
5985function bnMin(a) {
5986 return (this.compareTo(a) < 0) ? this : a
5987}
5988
5989function bnMax(a) {
5990 return (this.compareTo(a) > 0) ? this : a
5991}
5992
5993// (protected) r = this op a (bitwise)
5994function bnpBitwiseTo(a, op, r) {
5995 var self = this
5996 var i, f, m = Math.min(a.t, self.t)
5997 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
5998 if (a.t < self.t) {
5999 f = a.s & self.DM
6000 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
6001 r.t = self.t
6002 } else {
6003 f = self.s & self.DM
6004 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
6005 r.t = a.t
6006 }
6007 r.s = op(self.s, a.s)
6008 r.clamp()
6009}
6010
6011// (public) this & a
6012function op_and(x, y) {
6013 return x & y
6014}
6015
6016function bnAnd(a) {
6017 var r = new BigInteger()
6018 this.bitwiseTo(a, op_and, r)
6019 return r
6020}
6021
6022// (public) this | a
6023function op_or(x, y) {
6024 return x | y
6025}
6026
6027function bnOr(a) {
6028 var r = new BigInteger()
6029 this.bitwiseTo(a, op_or, r)
6030 return r
6031}
6032
6033// (public) this ^ a
6034function op_xor(x, y) {
6035 return x ^ y
6036}
6037
6038function bnXor(a) {
6039 var r = new BigInteger()
6040 this.bitwiseTo(a, op_xor, r)
6041 return r
6042}
6043
6044// (public) this & ~a
6045function op_andnot(x, y) {
6046 return x & ~y
6047}
6048
6049function bnAndNot(a) {
6050 var r = new BigInteger()
6051 this.bitwiseTo(a, op_andnot, r)
6052 return r
6053}
6054
6055// (public) ~this
6056function bnNot() {
6057 var r = new BigInteger()
6058 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
6059 r.t = this.t
6060 r.s = ~this.s
6061 return r
6062}
6063
6064// (public) this << n
6065function bnShiftLeft(n) {
6066 var r = new BigInteger()
6067 if (n < 0) this.rShiftTo(-n, r)
6068 else this.lShiftTo(n, r)
6069 return r
6070}
6071
6072// (public) this >> n
6073function bnShiftRight(n) {
6074 var r = new BigInteger()
6075 if (n < 0) this.lShiftTo(-n, r)
6076 else this.rShiftTo(n, r)
6077 return r
6078}
6079
6080// return index of lowest 1-bit in x, x < 2^31
6081function lbit(x) {
6082 if (x == 0) return -1
6083 var r = 0
6084 if ((x & 0xffff) == 0) {
6085 x >>= 16
6086 r += 16
6087 }
6088 if ((x & 0xff) == 0) {
6089 x >>= 8
6090 r += 8
6091 }
6092 if ((x & 0xf) == 0) {
6093 x >>= 4
6094 r += 4
6095 }
6096 if ((x & 3) == 0) {
6097 x >>= 2
6098 r += 2
6099 }
6100 if ((x & 1) == 0)++r
6101 return r
6102}
6103
6104// (public) returns index of lowest 1-bit (or -1 if none)
6105function bnGetLowestSetBit() {
6106 for (var i = 0; i < this.t; ++i)
6107 if (this[i] != 0) return i * this.DB + lbit(this[i])
6108 if (this.s < 0) return this.t * this.DB
6109 return -1
6110}
6111
6112// return number of 1 bits in x
6113function cbit(x) {
6114 var r = 0
6115 while (x != 0) {
6116 x &= x - 1
6117 ++r
6118 }
6119 return r
6120}
6121
6122// (public) return number of set bits
6123function bnBitCount() {
6124 var r = 0,
6125 x = this.s & this.DM
6126 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
6127 return r
6128}
6129
6130// (public) true iff nth bit is set
6131function bnTestBit(n) {
6132 var j = Math.floor(n / this.DB)
6133 if (j >= this.t) return (this.s != 0)
6134 return ((this[j] & (1 << (n % this.DB))) != 0)
6135}
6136
6137// (protected) this op (1<<n)
6138function bnpChangeBit(n, op) {
6139 var r = BigInteger.ONE.shiftLeft(n)
6140 this.bitwiseTo(r, op, r)
6141 return r
6142}
6143
6144// (public) this | (1<<n)
6145function bnSetBit(n) {
6146 return this.changeBit(n, op_or)
6147}
6148
6149// (public) this & ~(1<<n)
6150function bnClearBit(n) {
6151 return this.changeBit(n, op_andnot)
6152}
6153
6154// (public) this ^ (1<<n)
6155function bnFlipBit(n) {
6156 return this.changeBit(n, op_xor)
6157}
6158
6159// (protected) r = this + a
6160function bnpAddTo(a, r) {
6161 var self = this
6162
6163 var i = 0,
6164 c = 0,
6165 m = Math.min(a.t, self.t)
6166 while (i < m) {
6167 c += self[i] + a[i]
6168 r[i++] = c & self.DM
6169 c >>= self.DB
6170 }
6171 if (a.t < self.t) {
6172 c += a.s
6173 while (i < self.t) {
6174 c += self[i]
6175 r[i++] = c & self.DM
6176 c >>= self.DB
6177 }
6178 c += self.s
6179 } else {
6180 c += self.s
6181 while (i < a.t) {
6182 c += a[i]
6183 r[i++] = c & self.DM
6184 c >>= self.DB
6185 }
6186 c += a.s
6187 }
6188 r.s = (c < 0) ? -1 : 0
6189 if (c > 0) r[i++] = c
6190 else if (c < -1) r[i++] = self.DV + c
6191 r.t = i
6192 r.clamp()
6193}
6194
6195// (public) this + a
6196function bnAdd(a) {
6197 var r = new BigInteger()
6198 this.addTo(a, r)
6199 return r
6200}
6201
6202// (public) this - a
6203function bnSubtract(a) {
6204 var r = new BigInteger()
6205 this.subTo(a, r)
6206 return r
6207}
6208
6209// (public) this * a
6210function bnMultiply(a) {
6211 var r = new BigInteger()
6212 this.multiplyTo(a, r)
6213 return r
6214}
6215
6216// (public) this^2
6217function bnSquare() {
6218 var r = new BigInteger()
6219 this.squareTo(r)
6220 return r
6221}
6222
6223// (public) this / a
6224function bnDivide(a) {
6225 var r = new BigInteger()
6226 this.divRemTo(a, r, null)
6227 return r
6228}
6229
6230// (public) this % a
6231function bnRemainder(a) {
6232 var r = new BigInteger()
6233 this.divRemTo(a, null, r)
6234 return r
6235}
6236
6237// (public) [this/a,this%a]
6238function bnDivideAndRemainder(a) {
6239 var q = new BigInteger(),
6240 r = new BigInteger()
6241 this.divRemTo(a, q, r)
6242 return new Array(q, r)
6243}
6244
6245// (protected) this *= n, this >= 0, 1 < n < DV
6246function bnpDMultiply(n) {
6247 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
6248 ++this.t
6249 this.clamp()
6250}
6251
6252// (protected) this += n << w words, this >= 0
6253function bnpDAddOffset(n, w) {
6254 if (n == 0) return
6255 while (this.t <= w) this[this.t++] = 0
6256 this[w] += n
6257 while (this[w] >= this.DV) {
6258 this[w] -= this.DV
6259 if (++w >= this.t) this[this.t++] = 0
6260 ++this[w]
6261 }
6262}
6263
6264// A "null" reducer
6265function NullExp() {}
6266
6267function nNop(x) {
6268 return x
6269}
6270
6271function nMulTo(x, y, r) {
6272 x.multiplyTo(y, r)
6273}
6274
6275function nSqrTo(x, r) {
6276 x.squareTo(r)
6277}
6278
6279NullExp.prototype.convert = nNop
6280NullExp.prototype.revert = nNop
6281NullExp.prototype.mulTo = nMulTo
6282NullExp.prototype.sqrTo = nSqrTo
6283
6284// (public) this^e
6285function bnPow(e) {
6286 return this.exp(e, new NullExp())
6287}
6288
6289// (protected) r = lower n words of "this * a", a.t <= n
6290// "this" should be the larger one if appropriate.
6291function bnpMultiplyLowerTo(a, n, r) {
6292 var i = Math.min(this.t + a.t, n)
6293 r.s = 0; // assumes a,this >= 0
6294 r.t = i
6295 while (i > 0) r[--i] = 0
6296 var j
6297 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
6298 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
6299 r.clamp()
6300}
6301
6302// (protected) r = "this * a" without lower n words, n > 0
6303// "this" should be the larger one if appropriate.
6304function bnpMultiplyUpperTo(a, n, r) {
6305 --n
6306 var i = r.t = this.t + a.t - n
6307 r.s = 0; // assumes a,this >= 0
6308 while (--i >= 0) r[i] = 0
6309 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
6310 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
6311 r.clamp()
6312 r.drShiftTo(1, r)
6313}
6314
6315// Barrett modular reduction
6316function Barrett(m) {
6317 // setup Barrett
6318 this.r2 = new BigInteger()
6319 this.q3 = new BigInteger()
6320 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
6321 this.mu = this.r2.divide(m)
6322 this.m = m
6323}
6324
6325function barrettConvert(x) {
6326 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
6327 else if (x.compareTo(this.m) < 0) return x
6328 else {
6329 var r = new BigInteger()
6330 x.copyTo(r)
6331 this.reduce(r)
6332 return r
6333 }
6334}
6335
6336function barrettRevert(x) {
6337 return x
6338}
6339
6340// x = x mod m (HAC 14.42)
6341function barrettReduce(x) {
6342 var self = this
6343 x.drShiftTo(self.m.t - 1, self.r2)
6344 if (x.t > self.m.t + 1) {
6345 x.t = self.m.t + 1
6346 x.clamp()
6347 }
6348 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
6349 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
6350 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
6351 x.subTo(self.r2, x)
6352 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
6353}
6354
6355// r = x^2 mod m; x != r
6356function barrettSqrTo(x, r) {
6357 x.squareTo(r)
6358 this.reduce(r)
6359}
6360
6361// r = x*y mod m; x,y != r
6362function barrettMulTo(x, y, r) {
6363 x.multiplyTo(y, r)
6364 this.reduce(r)
6365}
6366
6367Barrett.prototype.convert = barrettConvert
6368Barrett.prototype.revert = barrettRevert
6369Barrett.prototype.reduce = barrettReduce
6370Barrett.prototype.mulTo = barrettMulTo
6371Barrett.prototype.sqrTo = barrettSqrTo
6372
6373// (public) this^e % m (HAC 14.85)
6374function bnModPow(e, m) {
6375 var i = e.bitLength(),
6376 k, r = nbv(1),
6377 z
6378 if (i <= 0) return r
6379 else if (i < 18) k = 1
6380 else if (i < 48) k = 3
6381 else if (i < 144) k = 4
6382 else if (i < 768) k = 5
6383 else k = 6
6384 if (i < 8)
6385 z = new Classic(m)
6386 else if (m.isEven())
6387 z = new Barrett(m)
6388 else
6389 z = new Montgomery(m)
6390
6391 // precomputation
6392 var g = new Array(),
6393 n = 3,
6394 k1 = k - 1,
6395 km = (1 << k) - 1
6396 g[1] = z.convert(this)
6397 if (k > 1) {
6398 var g2 = new BigInteger()
6399 z.sqrTo(g[1], g2)
6400 while (n <= km) {
6401 g[n] = new BigInteger()
6402 z.mulTo(g2, g[n - 2], g[n])
6403 n += 2
6404 }
6405 }
6406
6407 var j = e.t - 1,
6408 w, is1 = true,
6409 r2 = new BigInteger(),
6410 t
6411 i = nbits(e[j]) - 1
6412 while (j >= 0) {
6413 if (i >= k1) w = (e[j] >> (i - k1)) & km
6414 else {
6415 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
6416 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
6417 }
6418
6419 n = k
6420 while ((w & 1) == 0) {
6421 w >>= 1
6422 --n
6423 }
6424 if ((i -= n) < 0) {
6425 i += this.DB
6426 --j
6427 }
6428 if (is1) { // ret == 1, don't bother squaring or multiplying it
6429 g[w].copyTo(r)
6430 is1 = false
6431 } else {
6432 while (n > 1) {
6433 z.sqrTo(r, r2)
6434 z.sqrTo(r2, r)
6435 n -= 2
6436 }
6437 if (n > 0) z.sqrTo(r, r2)
6438 else {
6439 t = r
6440 r = r2
6441 r2 = t
6442 }
6443 z.mulTo(r2, g[w], r)
6444 }
6445
6446 while (j >= 0 && (e[j] & (1 << i)) == 0) {
6447 z.sqrTo(r, r2)
6448 t = r
6449 r = r2
6450 r2 = t
6451 if (--i < 0) {
6452 i = this.DB - 1
6453 --j
6454 }
6455 }
6456 }
6457 return z.revert(r)
6458}
6459
6460// (public) gcd(this,a) (HAC 14.54)
6461function bnGCD(a) {
6462 var x = (this.s < 0) ? this.negate() : this.clone()
6463 var y = (a.s < 0) ? a.negate() : a.clone()
6464 if (x.compareTo(y) < 0) {
6465 var t = x
6466 x = y
6467 y = t
6468 }
6469 var i = x.getLowestSetBit(),
6470 g = y.getLowestSetBit()
6471 if (g < 0) return x
6472 if (i < g) g = i
6473 if (g > 0) {
6474 x.rShiftTo(g, x)
6475 y.rShiftTo(g, y)
6476 }
6477 while (x.signum() > 0) {
6478 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
6479 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
6480 if (x.compareTo(y) >= 0) {
6481 x.subTo(y, x)
6482 x.rShiftTo(1, x)
6483 } else {
6484 y.subTo(x, y)
6485 y.rShiftTo(1, y)
6486 }
6487 }
6488 if (g > 0) y.lShiftTo(g, y)
6489 return y
6490}
6491
6492// (protected) this % n, n < 2^26
6493function bnpModInt(n) {
6494 if (n <= 0) return 0
6495 var d = this.DV % n,
6496 r = (this.s < 0) ? n - 1 : 0
6497 if (this.t > 0)
6498 if (d == 0) r = this[0] % n
6499 else
6500 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
6501 return r
6502}
6503
6504// (public) 1/this % m (HAC 14.61)
6505function bnModInverse(m) {
6506 var ac = m.isEven()
6507 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
6508 var u = m.clone(),
6509 v = this.clone()
6510 var a = nbv(1),
6511 b = nbv(0),
6512 c = nbv(0),
6513 d = nbv(1)
6514 while (u.signum() != 0) {
6515 while (u.isEven()) {
6516 u.rShiftTo(1, u)
6517 if (ac) {
6518 if (!a.isEven() || !b.isEven()) {
6519 a.addTo(this, a)
6520 b.subTo(m, b)
6521 }
6522 a.rShiftTo(1, a)
6523 } else if (!b.isEven()) b.subTo(m, b)
6524 b.rShiftTo(1, b)
6525 }
6526 while (v.isEven()) {
6527 v.rShiftTo(1, v)
6528 if (ac) {
6529 if (!c.isEven() || !d.isEven()) {
6530 c.addTo(this, c)
6531 d.subTo(m, d)
6532 }
6533 c.rShiftTo(1, c)
6534 } else if (!d.isEven()) d.subTo(m, d)
6535 d.rShiftTo(1, d)
6536 }
6537 if (u.compareTo(v) >= 0) {
6538 u.subTo(v, u)
6539 if (ac) a.subTo(c, a)
6540 b.subTo(d, b)
6541 } else {
6542 v.subTo(u, v)
6543 if (ac) c.subTo(a, c)
6544 d.subTo(b, d)
6545 }
6546 }
6547 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
6548 if (d.compareTo(m) >= 0) return d.subtract(m)
6549 if (d.signum() < 0) d.addTo(m, d)
6550 else return d
6551 if (d.signum() < 0) return d.add(m)
6552 else return d
6553}
6554
6555var lowprimes = [
6556 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
6557 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
6558 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
6559 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
6560 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
6561 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
6562 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
6563 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
6564 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
6565 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
6566 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
6567]
6568
6569var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
6570
6571// (public) test primality with certainty >= 1-.5^t
6572function bnIsProbablePrime(t) {
6573 var i, x = this.abs()
6574 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
6575 for (i = 0; i < lowprimes.length; ++i)
6576 if (x[0] == lowprimes[i]) return true
6577 return false
6578 }
6579 if (x.isEven()) return false
6580 i = 1
6581 while (i < lowprimes.length) {
6582 var m = lowprimes[i],
6583 j = i + 1
6584 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
6585 m = x.modInt(m)
6586 while (i < j) if (m % lowprimes[i++] == 0) return false
6587 }
6588 return x.millerRabin(t)
6589}
6590
6591// (protected) true if probably prime (HAC 4.24, Miller-Rabin)
6592function bnpMillerRabin(t) {
6593 var n1 = this.subtract(BigInteger.ONE)
6594 var k = n1.getLowestSetBit()
6595 if (k <= 0) return false
6596 var r = n1.shiftRight(k)
6597 t = (t + 1) >> 1
6598 if (t > lowprimes.length) t = lowprimes.length
6599 var a = new BigInteger(null)
6600 var j, bases = []
6601 for (var i = 0; i < t; ++i) {
6602 for (;;) {
6603 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
6604 if (bases.indexOf(j) == -1) break
6605 }
6606 bases.push(j)
6607 a.fromInt(j)
6608 var y = a.modPow(r, this)
6609 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
6610 var j = 1
6611 while (j++ < k && y.compareTo(n1) != 0) {
6612 y = y.modPowInt(2, this)
6613 if (y.compareTo(BigInteger.ONE) == 0) return false
6614 }
6615 if (y.compareTo(n1) != 0) return false
6616 }
6617 }
6618 return true
6619}
6620
6621// protected
6622proto.chunkSize = bnpChunkSize
6623proto.toRadix = bnpToRadix
6624proto.fromRadix = bnpFromRadix
6625proto.fromNumber = bnpFromNumber
6626proto.bitwiseTo = bnpBitwiseTo
6627proto.changeBit = bnpChangeBit
6628proto.addTo = bnpAddTo
6629proto.dMultiply = bnpDMultiply
6630proto.dAddOffset = bnpDAddOffset
6631proto.multiplyLowerTo = bnpMultiplyLowerTo
6632proto.multiplyUpperTo = bnpMultiplyUpperTo
6633proto.modInt = bnpModInt
6634proto.millerRabin = bnpMillerRabin
6635
6636// public
6637proto.clone = bnClone
6638proto.intValue = bnIntValue
6639proto.byteValue = bnByteValue
6640proto.shortValue = bnShortValue
6641proto.signum = bnSigNum
6642proto.toByteArray = bnToByteArray
6643proto.equals = bnEquals
6644proto.min = bnMin
6645proto.max = bnMax
6646proto.and = bnAnd
6647proto.or = bnOr
6648proto.xor = bnXor
6649proto.andNot = bnAndNot
6650proto.not = bnNot
6651proto.shiftLeft = bnShiftLeft
6652proto.shiftRight = bnShiftRight
6653proto.getLowestSetBit = bnGetLowestSetBit
6654proto.bitCount = bnBitCount
6655proto.testBit = bnTestBit
6656proto.setBit = bnSetBit
6657proto.clearBit = bnClearBit
6658proto.flipBit = bnFlipBit
6659proto.add = bnAdd
6660proto.subtract = bnSubtract
6661proto.multiply = bnMultiply
6662proto.divide = bnDivide
6663proto.remainder = bnRemainder
6664proto.divideAndRemainder = bnDivideAndRemainder
6665proto.modPow = bnModPow
6666proto.modInverse = bnModInverse
6667proto.pow = bnPow
6668proto.gcd = bnGCD
6669proto.isProbablePrime = bnIsProbablePrime
6670
6671// JSBN-specific extension
6672proto.square = bnSquare
6673
6674// constants
6675BigInteger.ZERO = nbv(0)
6676BigInteger.ONE = nbv(1)
6677BigInteger.valueOf = nbv
6678
6679module.exports = BigInteger
6680
6681},{"../package.json":4}],2:[function(require,module,exports){
6682(function (Buffer){
6683// FIXME: Kind of a weird way to throw exceptions, consider removing
6684var assert = require('assert')
6685var BigInteger = require('./bigi')
6686
6687/**
6688 * Turns a byte array into a big integer.
6689 *
6690 * This function will interpret a byte array as a big integer in big
6691 * endian notation.
6692 */
6693BigInteger.fromByteArrayUnsigned = function(byteArray) {
6694 // BigInteger expects a DER integer conformant byte array
6695 if (byteArray[0] & 0x80) {
6696 return new BigInteger([0].concat(byteArray))
6697 }
6698
6699 return new BigInteger(byteArray)
6700}
6701
6702/**
6703 * Returns a byte array representation of the big integer.
6704 *
6705 * This returns the absolute of the contained value in big endian
6706 * form. A value of zero results in an empty array.
6707 */
6708BigInteger.prototype.toByteArrayUnsigned = function() {
6709 var byteArray = this.toByteArray()
6710 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
6711}
6712
6713BigInteger.fromDERInteger = function(byteArray) {
6714 return new BigInteger(byteArray)
6715}
6716
6717/*
6718 * Converts BigInteger to a DER integer representation.
6719 *
6720 * The format for this value uses the most significant bit as a sign
6721 * bit. If the most significant bit is already set and the integer is
6722 * positive, a 0x00 is prepended.
6723 *
6724 * Examples:
6725 *
6726 * 0 => 0x00
6727 * 1 => 0x01
6728 * -1 => 0xff
6729 * 127 => 0x7f
6730 * -127 => 0x81
6731 * 128 => 0x0080
6732 * -128 => 0x80
6733 * 255 => 0x00ff
6734 * -255 => 0xff01
6735 * 16300 => 0x3fac
6736 * -16300 => 0xc054
6737 * 62300 => 0x00f35c
6738 * -62300 => 0xff0ca4
6739*/
6740BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
6741
6742BigInteger.fromBuffer = function(buffer) {
6743 // BigInteger expects a DER integer conformant byte array
6744 if (buffer[0] & 0x80) {
6745 var byteArray = Array.prototype.slice.call(buffer)
6746
6747 return new BigInteger([0].concat(byteArray))
6748 }
6749
6750 return new BigInteger(buffer)
6751}
6752
6753BigInteger.fromHex = function(hex) {
6754 if (hex === '') return BigInteger.ZERO
6755
6756 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
6757 assert.equal(hex.length % 2, 0, 'Incomplete hex')
6758 return new BigInteger(hex, 16)
6759}
6760
6761BigInteger.prototype.toBuffer = function(size) {
6762 var byteArray = this.toByteArrayUnsigned()
6763 var zeros = []
6764
6765 var padding = size - byteArray.length
6766 while (zeros.length < padding) zeros.push(0)
6767
6768 return new Buffer(zeros.concat(byteArray))
6769}
6770
6771BigInteger.prototype.toHex = function(size) {
6772 return this.toBuffer(size).toString('hex')
6773}
6774
6775}).call(this,require("buffer").Buffer)
6776},{"./bigi":1,"assert":5,"buffer":7}],3:[function(require,module,exports){
6777var BigInteger = require('./bigi')
6778
6779//addons
6780require('./convert')
6781
6782module.exports = BigInteger
6783},{"./bigi":1,"./convert":2}],4:[function(require,module,exports){
6784module.exports={
6785 "name": "bigi",
6786 "version": "1.4.0",
6787 "description": "Big integers.",
6788 "keywords": [
6789 "cryptography",
6790 "math",
6791 "bitcoin",
6792 "arbitrary",
6793 "precision",
6794 "arithmetic",
6795 "big",
6796 "integer",
6797 "int",
6798 "number",
6799 "biginteger",
6800 "bigint",
6801 "bignumber",
6802 "decimal",
6803 "float"
6804 ],
6805 "devDependencies": {
6806 "mocha": "^1.20.1",
6807 "jshint": "^2.5.1",
6808 "coveralls": "^2.10.0",
6809 "istanbul": "^0.2.11"
6810 },
6811 "repository": {
6812 "url": "https://github.com/cryptocoinjs/bigi",
6813 "type": "git"
6814 },
6815 "main": "./lib/index.js",
6816 "scripts": {
6817 "test": "_mocha -- test/*.js",
6818 "jshint": "jshint --config jshint.json lib/*.js ; true",
6819 "unit": "mocha",
6820 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
6821 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"
6822 },
6823 "dependencies": {},
6824 "testling": {
6825 "files": "test/*.js",
6826 "harness": "mocha",
6827 "browsers": [
6828 "ie/9..latest",
6829 "firefox/latest",
6830 "chrome/latest",
6831 "safari/6.0..latest",
6832 "iphone/6.0..latest",
6833 "android-browser/4.2..latest"
6834 ]
6835 },
6836 "bugs": {
6837 "url": "https://github.com/cryptocoinjs/bigi/issues"
6838 },
6839 "homepage": "https://github.com/cryptocoinjs/bigi",
6840 "_id": "bigi@1.4.0",
6841 "dist": {
6842 "shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
6843 "tarball": "http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
6844 },
6845 "_from": "bigi@^1.4.0",
6846 "_npmVersion": "1.4.3",
6847 "_npmUser": {
6848 "name": "jp",
6849 "email": "jprichardson@gmail.com"
6850 },
6851 "maintainers": [
6852 {
6853 "name": "jp",
6854 "email": "jprichardson@gmail.com"
6855 },
6856 {
6857 "name": "midnightlightning",
6858 "email": "boydb@midnightdesign.ws"
6859 },
6860 {
6861 "name": "sidazhang",
6862 "email": "sidazhang89@gmail.com"
6863 },
6864 {
6865 "name": "nadav",
6866 "email": "npm@shesek.info"
6867 }
6868 ],
6869 "directories": {},
6870 "_shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
6871 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
6872}
6873
6874},{}],5:[function(require,module,exports){
6875// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
6876//
6877// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
6878//
6879// Originally from narwhal.js (http://narwhaljs.org)
6880// Copyright (c) 2009 Thomas Robinson <280north.com>
6881//
6882// Permission is hereby granted, free of charge, to any person obtaining a copy
6883// of this software and associated documentation files (the 'Software'), to
6884// deal in the Software without restriction, including without limitation the
6885// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
6886// sell copies of the Software, and to permit persons to whom the Software is
6887// furnished to do so, subject to the following conditions:
6888//
6889// The above copyright notice and this permission notice shall be included in
6890// all copies or substantial portions of the Software.
6891//
6892// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
6893// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
6894// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
6895// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
6896// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
6897// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
6898
6899// when used in node, this will actually load the util module we depend on
6900// versus loading the builtin util module as happens otherwise
6901// this is a bug in node module loading as far as I am concerned
6902var util = require('util/');
6903
6904var pSlice = Array.prototype.slice;
6905var hasOwn = Object.prototype.hasOwnProperty;
6906
6907// 1. The assert module provides functions that throw
6908// AssertionError's when particular conditions are not met. The
6909// assert module must conform to the following interface.
6910
6911var assert = module.exports = ok;
6912
6913// 2. The AssertionError is defined in assert.
6914// new assert.AssertionError({ message: message,
6915// actual: actual,
6916// expected: expected })
6917
6918assert.AssertionError = function AssertionError(options) {
6919 this.name = 'AssertionError';
6920 this.actual = options.actual;
6921 this.expected = options.expected;
6922 this.operator = options.operator;
6923 if (options.message) {
6924 this.message = options.message;
6925 this.generatedMessage = false;
6926 } else {
6927 this.message = getMessage(this);
6928 this.generatedMessage = true;
6929 }
6930 var stackStartFunction = options.stackStartFunction || fail;
6931
6932 if (Error.captureStackTrace) {
6933 Error.captureStackTrace(this, stackStartFunction);
6934 }
6935 else {
6936 // non v8 browsers so we can have a stacktrace
6937 var err = new Error();
6938 if (err.stack) {
6939 var out = err.stack;
6940
6941 // try to strip useless frames
6942 var fn_name = stackStartFunction.name;
6943 var idx = out.indexOf('\n' + fn_name);
6944 if (idx >= 0) {
6945 // once we have located the function frame
6946 // we need to strip out everything before it (and its line)
6947 var next_line = out.indexOf('\n', idx + 1);
6948 out = out.substring(next_line + 1);
6949 }
6950
6951 this.stack = out;
6952 }
6953 }
6954};
6955
6956// assert.AssertionError instanceof Error
6957util.inherits(assert.AssertionError, Error);
6958
6959function replacer(key, value) {
6960 if (util.isUndefined(value)) {
6961 return '' + value;
6962 }
6963 if (util.isNumber(value) && !isFinite(value)) {
6964 return value.toString();
6965 }
6966 if (util.isFunction(value) || util.isRegExp(value)) {
6967 return value.toString();
6968 }
6969 return value;
6970}
6971
6972function truncate(s, n) {
6973 if (util.isString(s)) {
6974 return s.length < n ? s : s.slice(0, n);
6975 } else {
6976 return s;
6977 }
6978}
6979
6980function getMessage(self) {
6981 return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
6982 self.operator + ' ' +
6983 truncate(JSON.stringify(self.expected, replacer), 128);
6984}
6985
6986// At present only the three keys mentioned above are used and
6987// understood by the spec. Implementations or sub modules can pass
6988// other keys to the AssertionError's constructor - they will be
6989// ignored.
6990
6991// 3. All of the following functions must throw an AssertionError
6992// when a corresponding condition is not met, with a message that
6993// may be undefined if not provided. All assertion methods provide
6994// both the actual and expected values to the assertion error for
6995// display purposes.
6996
6997function fail(actual, expected, message, operator, stackStartFunction) {
6998 throw new assert.AssertionError({
6999 message: message,
7000 actual: actual,
7001 expected: expected,
7002 operator: operator,
7003 stackStartFunction: stackStartFunction
7004 });
7005}
7006
7007// EXTENSION! allows for well behaved errors defined elsewhere.
7008assert.fail = fail;
7009
7010// 4. Pure assertion tests whether a value is truthy, as determined
7011// by !!guard.
7012// assert.ok(guard, message_opt);
7013// This statement is equivalent to assert.equal(true, !!guard,
7014// message_opt);. To test strictly for the value true, use
7015// assert.strictEqual(true, guard, message_opt);.
7016
7017function ok(value, message) {
7018 if (!value) fail(value, true, message, '==', assert.ok);
7019}
7020assert.ok = ok;
7021
7022// 5. The equality assertion tests shallow, coercive equality with
7023// ==.
7024// assert.equal(actual, expected, message_opt);
7025
7026assert.equal = function equal(actual, expected, message) {
7027 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
7028};
7029
7030// 6. The non-equality assertion tests for whether two objects are not equal
7031// with != assert.notEqual(actual, expected, message_opt);
7032
7033assert.notEqual = function notEqual(actual, expected, message) {
7034 if (actual == expected) {
7035 fail(actual, expected, message, '!=', assert.notEqual);
7036 }
7037};
7038
7039// 7. The equivalence assertion tests a deep equality relation.
7040// assert.deepEqual(actual, expected, message_opt);
7041
7042assert.deepEqual = function deepEqual(actual, expected, message) {
7043 if (!_deepEqual(actual, expected)) {
7044 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
7045 }
7046};
7047
7048function _deepEqual(actual, expected) {
7049 // 7.1. All identical values are equivalent, as determined by ===.
7050 if (actual === expected) {
7051 return true;
7052
7053 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
7054 if (actual.length != expected.length) return false;
7055
7056 for (var i = 0; i < actual.length; i++) {
7057 if (actual[i] !== expected[i]) return false;
7058 }
7059
7060 return true;
7061
7062 // 7.2. If the expected value is a Date object, the actual value is
7063 // equivalent if it is also a Date object that refers to the same time.
7064 } else if (util.isDate(actual) && util.isDate(expected)) {
7065 return actual.getTime() === expected.getTime();
7066
7067 // 7.3 If the expected value is a RegExp object, the actual value is
7068 // equivalent if it is also a RegExp object with the same source and
7069 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
7070 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
7071 return actual.source === expected.source &&
7072 actual.global === expected.global &&
7073 actual.multiline === expected.multiline &&
7074 actual.lastIndex === expected.lastIndex &&
7075 actual.ignoreCase === expected.ignoreCase;
7076
7077 // 7.4. Other pairs that do not both pass typeof value == 'object',
7078 // equivalence is determined by ==.
7079 } else if (!util.isObject(actual) && !util.isObject(expected)) {
7080 return actual == expected;
7081
7082 // 7.5 For all other Object pairs, including Array objects, equivalence is
7083 // determined by having the same number of owned properties (as verified
7084 // with Object.prototype.hasOwnProperty.call), the same set of keys
7085 // (although not necessarily the same order), equivalent values for every
7086 // corresponding key, and an identical 'prototype' property. Note: this
7087 // accounts for both named and indexed properties on Arrays.
7088 } else {
7089 return objEquiv(actual, expected);
7090 }
7091}
7092
7093function isArguments(object) {
7094 return Object.prototype.toString.call(object) == '[object Arguments]';
7095}
7096
7097function objEquiv(a, b) {
7098 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
7099 return false;
7100 // an identical 'prototype' property.
7101 if (a.prototype !== b.prototype) return false;
7102 // if one is a primitive, the other must be same
7103 if (util.isPrimitive(a) || util.isPrimitive(b)) {
7104 return a === b;
7105 }
7106 var aIsArgs = isArguments(a),
7107 bIsArgs = isArguments(b);
7108 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
7109 return false;
7110 if (aIsArgs) {
7111 a = pSlice.call(a);
7112 b = pSlice.call(b);
7113 return _deepEqual(a, b);
7114 }
7115 var ka = objectKeys(a),
7116 kb = objectKeys(b),
7117 key, i;
7118 // having the same number of owned properties (keys incorporates
7119 // hasOwnProperty)
7120 if (ka.length != kb.length)
7121 return false;
7122 //the same set of keys (although not necessarily the same order),
7123 ka.sort();
7124 kb.sort();
7125 //~~~cheap key test
7126 for (i = ka.length - 1; i >= 0; i--) {
7127 if (ka[i] != kb[i])
7128 return false;
7129 }
7130 //equivalent values for every corresponding key, and
7131 //~~~possibly expensive deep test
7132 for (i = ka.length - 1; i >= 0; i--) {
7133 key = ka[i];
7134 if (!_deepEqual(a[key], b[key])) return false;
7135 }
7136 return true;
7137}
7138
7139// 8. The non-equivalence assertion tests for any deep inequality.
7140// assert.notDeepEqual(actual, expected, message_opt);
7141
7142assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
7143 if (_deepEqual(actual, expected)) {
7144 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
7145 }
7146};
7147
7148// 9. The strict equality assertion tests strict equality, as determined by ===.
7149// assert.strictEqual(actual, expected, message_opt);
7150
7151assert.strictEqual = function strictEqual(actual, expected, message) {
7152 if (actual !== expected) {
7153 fail(actual, expected, message, '===', assert.strictEqual);
7154 }
7155};
7156
7157// 10. The strict non-equality assertion tests for strict inequality, as
7158// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
7159
7160assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
7161 if (actual === expected) {
7162 fail(actual, expected, message, '!==', assert.notStrictEqual);
7163 }
7164};
7165
7166function expectedException(actual, expected) {
7167 if (!actual || !expected) {
7168 return false;
7169 }
7170
7171 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
7172 return expected.test(actual);
7173 } else if (actual instanceof expected) {
7174 return true;
7175 } else if (expected.call({}, actual) === true) {
7176 return true;
7177 }
7178
7179 return false;
7180}
7181
7182function _throws(shouldThrow, block, expected, message) {
7183 var actual;
7184
7185 if (util.isString(expected)) {
7186 message = expected;
7187 expected = null;
7188 }
7189
7190 try {
7191 block();
7192 } catch (e) {
7193 actual = e;
7194 }
7195
7196 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
7197 (message ? ' ' + message : '.');
7198
7199 if (shouldThrow && !actual) {
7200 fail(actual, expected, 'Missing expected exception' + message);
7201 }
7202
7203 if (!shouldThrow && expectedException(actual, expected)) {
7204 fail(actual, expected, 'Got unwanted exception' + message);
7205 }
7206
7207 if ((shouldThrow && actual && expected &&
7208 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
7209 throw actual;
7210 }
7211}
7212
7213// 11. Expected to throw an error:
7214// assert.throws(block, Error_opt, message_opt);
7215
7216assert.throws = function(block, /*optional*/error, /*optional*/message) {
7217 _throws.apply(this, [true].concat(pSlice.call(arguments)));
7218};
7219
7220// EXTENSION! This is annoying to write outside this module.
7221assert.doesNotThrow = function(block, /*optional*/message) {
7222 _throws.apply(this, [false].concat(pSlice.call(arguments)));
7223};
7224
7225assert.ifError = function(err) { if (err) {throw err;}};
7226
7227var objectKeys = Object.keys || function (obj) {
7228 var keys = [];
7229 for (var key in obj) {
7230 if (hasOwn.call(obj, key)) keys.push(key);
7231 }
7232 return keys;
7233};
7234
7235},{"util/":29}],6:[function(require,module,exports){
7236
7237},{}],7:[function(require,module,exports){
7238/*!
7239 * The buffer module from node.js, for the browser.
7240 *
7241 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
7242 * @license MIT
7243 */
7244
7245var base64 = require('base64-js')
7246var ieee754 = require('ieee754')
7247var isArray = require('is-array')
7248
7249exports.Buffer = Buffer
7250exports.SlowBuffer = SlowBuffer
7251exports.INSPECT_MAX_BYTES = 50
7252Buffer.poolSize = 8192 // not used by this implementation
7253
7254var rootParent = {}
7255
7256/**
7257 * If `Buffer.TYPED_ARRAY_SUPPORT`:
7258 * === true Use Uint8Array implementation (fastest)
7259 * === false Use Object implementation (most compatible, even IE6)
7260 *
7261 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
7262 * Opera 11.6+, iOS 4.2+.
7263 *
7264 * Due to various browser bugs, sometimes the Object implementation will be used even
7265 * when the browser supports typed arrays.
7266 *
7267 * Note:
7268 *
7269 * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
7270 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
7271 *
7272 * - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property
7273 * on objects.
7274 *
7275 * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
7276 *
7277 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
7278 * incorrect length in some situations.
7279
7280 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
7281 * get the Object implementation, which is slower but behaves correctly.
7282 */
7283Buffer.TYPED_ARRAY_SUPPORT = (function () {
7284 function Bar () {}
7285 try {
7286 var arr = new Uint8Array(1)
7287 arr.foo = function () { return 42 }
7288 arr.constructor = Bar
7289 return arr.foo() === 42 && // typed array instances can be augmented
7290 arr.constructor === Bar && // constructor can be set
7291 typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
7292 arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
7293 } catch (e) {
7294 return false
7295 }
7296})()
7297
7298function kMaxLength () {
7299 return Buffer.TYPED_ARRAY_SUPPORT
7300 ? 0x7fffffff
7301 : 0x3fffffff
7302}
7303
7304/**
7305 * Class: Buffer
7306 * =============
7307 *
7308 * The Buffer constructor returns instances of `Uint8Array` that are augmented
7309 * with function properties for all the node `Buffer` API functions. We use
7310 * `Uint8Array` so that square bracket notation works as expected -- it returns
7311 * a single octet.
7312 *
7313 * By augmenting the instances, we can avoid modifying the `Uint8Array`
7314 * prototype.
7315 */
7316function Buffer (arg) {
7317 if (!(this instanceof Buffer)) {
7318 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
7319 if (arguments.length > 1) return new Buffer(arg, arguments[1])
7320 return new Buffer(arg)
7321 }
7322
7323 this.length = 0
7324 this.parent = undefined
7325
7326 // Common case.
7327 if (typeof arg === 'number') {
7328 return fromNumber(this, arg)
7329 }
7330
7331 // Slightly less common case.
7332 if (typeof arg === 'string') {
7333 return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')
7334 }
7335
7336 // Unusual.
7337 return fromObject(this, arg)
7338}
7339
7340function fromNumber (that, length) {
7341 that = allocate(that, length < 0 ? 0 : checked(length) | 0)
7342 if (!Buffer.TYPED_ARRAY_SUPPORT) {
7343 for (var i = 0; i < length; i++) {
7344 that[i] = 0
7345 }
7346 }
7347 return that
7348}
7349
7350function fromString (that, string, encoding) {
7351 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
7352
7353 // Assumption: byteLength() return value is always < kMaxLength.
7354 var length = byteLength(string, encoding) | 0
7355 that = allocate(that, length)
7356
7357 that.write(string, encoding)
7358 return that
7359}
7360
7361function fromObject (that, object) {
7362 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
7363
7364 if (isArray(object)) return fromArray(that, object)
7365
7366 if (object == null) {
7367 throw new TypeError('must start with number, buffer, array or string')
7368 }
7369
7370 if (typeof ArrayBuffer !== 'undefined') {
7371 if (object.buffer instanceof ArrayBuffer) {
7372 return fromTypedArray(that, object)
7373 }
7374 if (object instanceof ArrayBuffer) {
7375 return fromArrayBuffer(that, object)
7376 }
7377 }
7378
7379 if (object.length) return fromArrayLike(that, object)
7380
7381 return fromJsonObject(that, object)
7382}
7383
7384function fromBuffer (that, buffer) {
7385 var length = checked(buffer.length) | 0
7386 that = allocate(that, length)
7387 buffer.copy(that, 0, 0, length)
7388 return that
7389}
7390
7391function fromArray (that, array) {
7392 var length = checked(array.length) | 0
7393 that = allocate(that, length)
7394 for (var i = 0; i < length; i += 1) {
7395 that[i] = array[i] & 255
7396 }
7397 return that
7398}
7399
7400// Duplicate of fromArray() to keep fromArray() monomorphic.
7401function fromTypedArray (that, array) {
7402 var length = checked(array.length) | 0
7403 that = allocate(that, length)
7404 // Truncating the elements is probably not what people expect from typed
7405 // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior
7406 // of the old Buffer constructor.
7407 for (var i = 0; i < length; i += 1) {
7408 that[i] = array[i] & 255
7409 }
7410 return that
7411}
7412
7413function fromArrayBuffer (that, array) {
7414 if (Buffer.TYPED_ARRAY_SUPPORT) {
7415 // Return an augmented `Uint8Array` instance, for best performance
7416 array.byteLength
7417 that = Buffer._augment(new Uint8Array(array))
7418 } else {
7419 // Fallback: Return an object instance of the Buffer class
7420 that = fromTypedArray(that, new Uint8Array(array))
7421 }
7422 return that
7423}
7424
7425function fromArrayLike (that, array) {
7426 var length = checked(array.length) | 0
7427 that = allocate(that, length)
7428 for (var i = 0; i < length; i += 1) {
7429 that[i] = array[i] & 255
7430 }
7431 return that
7432}
7433
7434// Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.
7435// Returns a zero-length buffer for inputs that don't conform to the spec.
7436function fromJsonObject (that, object) {
7437 var array
7438 var length = 0
7439
7440 if (object.type === 'Buffer' && isArray(object.data)) {
7441 array = object.data
7442 length = checked(array.length) | 0
7443 }
7444 that = allocate(that, length)
7445
7446 for (var i = 0; i < length; i += 1) {
7447 that[i] = array[i] & 255
7448 }
7449 return that
7450}
7451
7452function allocate (that, length) {
7453 if (Buffer.TYPED_ARRAY_SUPPORT) {
7454 // Return an augmented `Uint8Array` instance, for best performance
7455 that = Buffer._augment(new Uint8Array(length))
7456 } else {
7457 // Fallback: Return an object instance of the Buffer class
7458 that.length = length
7459 that._isBuffer = true
7460 }
7461
7462 var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1
7463 if (fromPool) that.parent = rootParent
7464
7465 return that
7466}
7467
7468function checked (length) {
7469 // Note: cannot use `length < kMaxLength` here because that fails when
7470 // length is NaN (which is otherwise coerced to zero.)
7471 if (length >= kMaxLength()) {
7472 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
7473 'size: 0x' + kMaxLength().toString(16) + ' bytes')
7474 }
7475 return length | 0
7476}
7477
7478function SlowBuffer (subject, encoding) {
7479 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
7480
7481 var buf = new Buffer(subject, encoding)
7482 delete buf.parent
7483 return buf
7484}
7485
7486Buffer.isBuffer = function isBuffer (b) {
7487 return !!(b != null && b._isBuffer)
7488}
7489
7490Buffer.compare = function compare (a, b) {
7491 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
7492 throw new TypeError('Arguments must be Buffers')
7493 }
7494
7495 if (a === b) return 0
7496
7497 var x = a.length
7498 var y = b.length
7499
7500 var i = 0
7501 var len = Math.min(x, y)
7502 while (i < len) {
7503 if (a[i] !== b[i]) break
7504
7505 ++i
7506 }
7507
7508 if (i !== len) {
7509 x = a[i]
7510 y = b[i]
7511 }
7512
7513 if (x < y) return -1
7514 if (y < x) return 1
7515 return 0
7516}
7517
7518Buffer.isEncoding = function isEncoding (encoding) {
7519 switch (String(encoding).toLowerCase()) {
7520 case 'hex':
7521 case 'utf8':
7522 case 'utf-8':
7523 case 'ascii':
7524 case 'binary':
7525 case 'base64':
7526 case 'raw':
7527 case 'ucs2':
7528 case 'ucs-2':
7529 case 'utf16le':
7530 case 'utf-16le':
7531 return true
7532 default:
7533 return false
7534 }
7535}
7536
7537Buffer.concat = function concat (list, length) {
7538 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
7539
7540 if (list.length === 0) {
7541 return new Buffer(0)
7542 }
7543
7544 var i
7545 if (length === undefined) {
7546 length = 0
7547 for (i = 0; i < list.length; i++) {
7548 length += list[i].length
7549 }
7550 }
7551
7552 var buf = new Buffer(length)
7553 var pos = 0
7554 for (i = 0; i < list.length; i++) {
7555 var item = list[i]
7556 item.copy(buf, pos)
7557 pos += item.length
7558 }
7559 return buf
7560}
7561
7562function byteLength (string, encoding) {
7563 if (typeof string !== 'string') string = '' + string
7564
7565 var len = string.length
7566 if (len === 0) return 0
7567
7568 // Use a for loop to avoid recursion
7569 var loweredCase = false
7570 for (;;) {
7571 switch (encoding) {
7572 case 'ascii':
7573 case 'binary':
7574 // Deprecated
7575 case 'raw':
7576 case 'raws':
7577 return len
7578 case 'utf8':
7579 case 'utf-8':
7580 return utf8ToBytes(string).length
7581 case 'ucs2':
7582 case 'ucs-2':
7583 case 'utf16le':
7584 case 'utf-16le':
7585 return len * 2
7586 case 'hex':
7587 return len >>> 1
7588 case 'base64':
7589 return base64ToBytes(string).length
7590 default:
7591 if (loweredCase) return utf8ToBytes(string).length // assume utf8
7592 encoding = ('' + encoding).toLowerCase()
7593 loweredCase = true
7594 }
7595 }
7596}
7597Buffer.byteLength = byteLength
7598
7599// pre-set for values that may exist in the future
7600Buffer.prototype.length = undefined
7601Buffer.prototype.parent = undefined
7602
7603function slowToString (encoding, start, end) {
7604 var loweredCase = false
7605
7606 start = start | 0
7607 end = end === undefined || end === Infinity ? this.length : end | 0
7608
7609 if (!encoding) encoding = 'utf8'
7610 if (start < 0) start = 0
7611 if (end > this.length) end = this.length
7612 if (end <= start) return ''
7613
7614 while (true) {
7615 switch (encoding) {
7616 case 'hex':
7617 return hexSlice(this, start, end)
7618
7619 case 'utf8':
7620 case 'utf-8':
7621 return utf8Slice(this, start, end)
7622
7623 case 'ascii':
7624 return asciiSlice(this, start, end)
7625
7626 case 'binary':
7627 return binarySlice(this, start, end)
7628
7629 case 'base64':
7630 return base64Slice(this, start, end)
7631
7632 case 'ucs2':
7633 case 'ucs-2':
7634 case 'utf16le':
7635 case 'utf-16le':
7636 return utf16leSlice(this, start, end)
7637
7638 default:
7639 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
7640 encoding = (encoding + '').toLowerCase()
7641 loweredCase = true
7642 }
7643 }
7644}
7645
7646Buffer.prototype.toString = function toString () {
7647 var length = this.length | 0
7648 if (length === 0) return ''
7649 if (arguments.length === 0) return utf8Slice(this, 0, length)
7650 return slowToString.apply(this, arguments)
7651}
7652
7653Buffer.prototype.equals = function equals (b) {
7654 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
7655 if (this === b) return true
7656 return Buffer.compare(this, b) === 0
7657}
7658
7659Buffer.prototype.inspect = function inspect () {
7660 var str = ''
7661 var max = exports.INSPECT_MAX_BYTES
7662 if (this.length > 0) {
7663 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
7664 if (this.length > max) str += ' ... '
7665 }
7666 return '<Buffer ' + str + '>'
7667}
7668
7669Buffer.prototype.compare = function compare (b) {
7670 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
7671 if (this === b) return 0
7672 return Buffer.compare(this, b)
7673}
7674
7675Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
7676 if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff
7677 else if (byteOffset < -0x80000000) byteOffset = -0x80000000
7678 byteOffset >>= 0
7679
7680 if (this.length === 0) return -1
7681 if (byteOffset >= this.length) return -1
7682
7683 // Negative offsets start from the end of the buffer
7684 if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)
7685
7686 if (typeof val === 'string') {
7687 if (val.length === 0) return -1 // special case: looking for empty string always fails
7688 return String.prototype.indexOf.call(this, val, byteOffset)
7689 }
7690 if (Buffer.isBuffer(val)) {
7691 return arrayIndexOf(this, val, byteOffset)
7692 }
7693 if (typeof val === 'number') {
7694 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
7695 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
7696 }
7697 return arrayIndexOf(this, [ val ], byteOffset)
7698 }
7699
7700 function arrayIndexOf (arr, val, byteOffset) {
7701 var foundIndex = -1
7702 for (var i = 0; byteOffset + i < arr.length; i++) {
7703 if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {
7704 if (foundIndex === -1) foundIndex = i
7705 if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex
7706 } else {
7707 foundIndex = -1
7708 }
7709 }
7710 return -1
7711 }
7712
7713 throw new TypeError('val must be string, number or Buffer')
7714}
7715
7716// `get` is deprecated
7717Buffer.prototype.get = function get (offset) {
7718 console.log('.get() is deprecated. Access using array indexes instead.')
7719 return this.readUInt8(offset)
7720}
7721
7722// `set` is deprecated
7723Buffer.prototype.set = function set (v, offset) {
7724 console.log('.set() is deprecated. Access using array indexes instead.')
7725 return this.writeUInt8(v, offset)
7726}
7727
7728function hexWrite (buf, string, offset, length) {
7729 offset = Number(offset) || 0
7730 var remaining = buf.length - offset
7731 if (!length) {
7732 length = remaining
7733 } else {
7734 length = Number(length)
7735 if (length > remaining) {
7736 length = remaining
7737 }
7738 }
7739
7740 // must be an even number of digits
7741 var strLen = string.length
7742 if (strLen % 2 !== 0) throw new Error('Invalid hex string')
7743
7744 if (length > strLen / 2) {
7745 length = strLen / 2
7746 }
7747 for (var i = 0; i < length; i++) {
7748 var parsed = parseInt(string.substr(i * 2, 2), 16)
7749 if (isNaN(parsed)) throw new Error('Invalid hex string')
7750 buf[offset + i] = parsed
7751 }
7752 return i
7753}
7754
7755function utf8Write (buf, string, offset, length) {
7756 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
7757}
7758
7759function asciiWrite (buf, string, offset, length) {
7760 return blitBuffer(asciiToBytes(string), buf, offset, length)
7761}
7762
7763function binaryWrite (buf, string, offset, length) {
7764 return asciiWrite(buf, string, offset, length)
7765}
7766
7767function base64Write (buf, string, offset, length) {
7768 return blitBuffer(base64ToBytes(string), buf, offset, length)
7769}
7770
7771function ucs2Write (buf, string, offset, length) {
7772 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
7773}
7774
7775Buffer.prototype.write = function write (string, offset, length, encoding) {
7776 // Buffer#write(string)
7777 if (offset === undefined) {
7778 encoding = 'utf8'
7779 length = this.length
7780 offset = 0
7781 // Buffer#write(string, encoding)
7782 } else if (length === undefined && typeof offset === 'string') {
7783 encoding = offset
7784 length = this.length
7785 offset = 0
7786 // Buffer#write(string, offset[, length][, encoding])
7787 } else if (isFinite(offset)) {
7788 offset = offset | 0
7789 if (isFinite(length)) {
7790 length = length | 0
7791 if (encoding === undefined) encoding = 'utf8'
7792 } else {
7793 encoding = length
7794 length = undefined
7795 }
7796 // legacy write(string, encoding, offset, length) - remove in v0.13
7797 } else {
7798 var swap = encoding
7799 encoding = offset
7800 offset = length | 0
7801 length = swap
7802 }
7803
7804 var remaining = this.length - offset
7805 if (length === undefined || length > remaining) length = remaining
7806
7807 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
7808 throw new RangeError('attempt to write outside buffer bounds')
7809 }
7810
7811 if (!encoding) encoding = 'utf8'
7812
7813 var loweredCase = false
7814 for (;;) {
7815 switch (encoding) {
7816 case 'hex':
7817 return hexWrite(this, string, offset, length)
7818
7819 case 'utf8':
7820 case 'utf-8':
7821 return utf8Write(this, string, offset, length)
7822
7823 case 'ascii':
7824 return asciiWrite(this, string, offset, length)
7825
7826 case 'binary':
7827 return binaryWrite(this, string, offset, length)
7828
7829 case 'base64':
7830 // Warning: maxLength not taken into account in base64Write
7831 return base64Write(this, string, offset, length)
7832
7833 case 'ucs2':
7834 case 'ucs-2':
7835 case 'utf16le':
7836 case 'utf-16le':
7837 return ucs2Write(this, string, offset, length)
7838
7839 default:
7840 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
7841 encoding = ('' + encoding).toLowerCase()
7842 loweredCase = true
7843 }
7844 }
7845}
7846
7847Buffer.prototype.toJSON = function toJSON () {
7848 return {
7849 type: 'Buffer',
7850 data: Array.prototype.slice.call(this._arr || this, 0)
7851 }
7852}
7853
7854function base64Slice (buf, start, end) {
7855 if (start === 0 && end === buf.length) {
7856 return base64.fromByteArray(buf)
7857 } else {
7858 return base64.fromByteArray(buf.slice(start, end))
7859 }
7860}
7861
7862function utf8Slice (buf, start, end) {
7863 end = Math.min(buf.length, end)
7864 var firstByte
7865 var secondByte
7866 var thirdByte
7867 var fourthByte
7868 var bytesPerSequence
7869 var tempCodePoint
7870 var codePoint
7871 var res = []
7872 var i = start
7873
7874 for (; i < end; i += bytesPerSequence) {
7875 firstByte = buf[i]
7876 codePoint = 0xFFFD
7877
7878 if (firstByte > 0xEF) {
7879 bytesPerSequence = 4
7880 } else if (firstByte > 0xDF) {
7881 bytesPerSequence = 3
7882 } else if (firstByte > 0xBF) {
7883 bytesPerSequence = 2
7884 } else {
7885 bytesPerSequence = 1
7886 }
7887
7888 if (i + bytesPerSequence <= end) {
7889 switch (bytesPerSequence) {
7890 case 1:
7891 if (firstByte < 0x80) {
7892 codePoint = firstByte
7893 }
7894 break
7895 case 2:
7896 secondByte = buf[i + 1]
7897 if ((secondByte & 0xC0) === 0x80) {
7898 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
7899 if (tempCodePoint > 0x7F) {
7900 codePoint = tempCodePoint
7901 }
7902 }
7903 break
7904 case 3:
7905 secondByte = buf[i + 1]
7906 thirdByte = buf[i + 2]
7907 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
7908 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
7909 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
7910 codePoint = tempCodePoint
7911 }
7912 }
7913 break
7914 case 4:
7915 secondByte = buf[i + 1]
7916 thirdByte = buf[i + 2]
7917 fourthByte = buf[i + 3]
7918 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
7919 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
7920 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
7921 codePoint = tempCodePoint
7922 }
7923 }
7924 }
7925 }
7926
7927 if (codePoint === 0xFFFD) {
7928 // we generated an invalid codePoint so make sure to only advance by 1 byte
7929 bytesPerSequence = 1
7930 } else if (codePoint > 0xFFFF) {
7931 // encode to utf16 (surrogate pair dance)
7932 codePoint -= 0x10000
7933 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
7934 codePoint = 0xDC00 | codePoint & 0x3FF
7935 }
7936
7937 res.push(codePoint)
7938 }
7939
7940 return String.fromCharCode.apply(String, res)
7941}
7942
7943function asciiSlice (buf, start, end) {
7944 var ret = ''
7945 end = Math.min(buf.length, end)
7946
7947 for (var i = start; i < end; i++) {
7948 ret += String.fromCharCode(buf[i] & 0x7F)
7949 }
7950 return ret
7951}
7952
7953function binarySlice (buf, start, end) {
7954 var ret = ''
7955 end = Math.min(buf.length, end)
7956
7957 for (var i = start; i < end; i++) {
7958 ret += String.fromCharCode(buf[i])
7959 }
7960 return ret
7961}
7962
7963function hexSlice (buf, start, end) {
7964 var len = buf.length
7965
7966 if (!start || start < 0) start = 0
7967 if (!end || end < 0 || end > len) end = len
7968
7969 var out = ''
7970 for (var i = start; i < end; i++) {
7971 out += toHex(buf[i])
7972 }
7973 return out
7974}
7975
7976function utf16leSlice (buf, start, end) {
7977 var bytes = buf.slice(start, end)
7978 var res = ''
7979 for (var i = 0; i < bytes.length; i += 2) {
7980 res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
7981 }
7982 return res
7983}
7984
7985Buffer.prototype.slice = function slice (start, end) {
7986 var len = this.length
7987 start = ~~start
7988 end = end === undefined ? len : ~~end
7989
7990 if (start < 0) {
7991 start += len
7992 if (start < 0) start = 0
7993 } else if (start > len) {
7994 start = len
7995 }
7996
7997 if (end < 0) {
7998 end += len
7999 if (end < 0) end = 0
8000 } else if (end > len) {
8001 end = len
8002 }
8003
8004 if (end < start) end = start
8005
8006 var newBuf
8007 if (Buffer.TYPED_ARRAY_SUPPORT) {
8008 newBuf = Buffer._augment(this.subarray(start, end))
8009 } else {
8010 var sliceLen = end - start
8011 newBuf = new Buffer(sliceLen, undefined)
8012 for (var i = 0; i < sliceLen; i++) {
8013 newBuf[i] = this[i + start]
8014 }
8015 }
8016
8017 if (newBuf.length) newBuf.parent = this.parent || this
8018
8019 return newBuf
8020}
8021
8022/*
8023 * Need to make sure that buffer isn't trying to write out of bounds.
8024 */
8025function checkOffset (offset, ext, length) {
8026 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
8027 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
8028}
8029
8030Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
8031 offset = offset | 0
8032 byteLength = byteLength | 0
8033 if (!noAssert) checkOffset(offset, byteLength, this.length)
8034
8035 var val = this[offset]
8036 var mul = 1
8037 var i = 0
8038 while (++i < byteLength && (mul *= 0x100)) {
8039 val += this[offset + i] * mul
8040 }
8041
8042 return val
8043}
8044
8045Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
8046 offset = offset | 0
8047 byteLength = byteLength | 0
8048 if (!noAssert) {
8049 checkOffset(offset, byteLength, this.length)
8050 }
8051
8052 var val = this[offset + --byteLength]
8053 var mul = 1
8054 while (byteLength > 0 && (mul *= 0x100)) {
8055 val += this[offset + --byteLength] * mul
8056 }
8057
8058 return val
8059}
8060
8061Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
8062 if (!noAssert) checkOffset(offset, 1, this.length)
8063 return this[offset]
8064}
8065
8066Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
8067 if (!noAssert) checkOffset(offset, 2, this.length)
8068 return this[offset] | (this[offset + 1] << 8)
8069}
8070
8071Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
8072 if (!noAssert) checkOffset(offset, 2, this.length)
8073 return (this[offset] << 8) | this[offset + 1]
8074}
8075
8076Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
8077 if (!noAssert) checkOffset(offset, 4, this.length)
8078
8079 return ((this[offset]) |
8080 (this[offset + 1] << 8) |
8081 (this[offset + 2] << 16)) +
8082 (this[offset + 3] * 0x1000000)
8083}
8084
8085Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
8086 if (!noAssert) checkOffset(offset, 4, this.length)
8087
8088 return (this[offset] * 0x1000000) +
8089 ((this[offset + 1] << 16) |
8090 (this[offset + 2] << 8) |
8091 this[offset + 3])
8092}
8093
8094Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
8095 offset = offset | 0
8096 byteLength = byteLength | 0
8097 if (!noAssert) checkOffset(offset, byteLength, this.length)
8098
8099 var val = this[offset]
8100 var mul = 1
8101 var i = 0
8102 while (++i < byteLength && (mul *= 0x100)) {
8103 val += this[offset + i] * mul
8104 }
8105 mul *= 0x80
8106
8107 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
8108
8109 return val
8110}
8111
8112Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
8113 offset = offset | 0
8114 byteLength = byteLength | 0
8115 if (!noAssert) checkOffset(offset, byteLength, this.length)
8116
8117 var i = byteLength
8118 var mul = 1
8119 var val = this[offset + --i]
8120 while (i > 0 && (mul *= 0x100)) {
8121 val += this[offset + --i] * mul
8122 }
8123 mul *= 0x80
8124
8125 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
8126
8127 return val
8128}
8129
8130Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
8131 if (!noAssert) checkOffset(offset, 1, this.length)
8132 if (!(this[offset] & 0x80)) return (this[offset])
8133 return ((0xff - this[offset] + 1) * -1)
8134}
8135
8136Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
8137 if (!noAssert) checkOffset(offset, 2, this.length)
8138 var val = this[offset] | (this[offset + 1] << 8)
8139 return (val & 0x8000) ? val | 0xFFFF0000 : val
8140}
8141
8142Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
8143 if (!noAssert) checkOffset(offset, 2, this.length)
8144 var val = this[offset + 1] | (this[offset] << 8)
8145 return (val & 0x8000) ? val | 0xFFFF0000 : val
8146}
8147
8148Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
8149 if (!noAssert) checkOffset(offset, 4, this.length)
8150
8151 return (this[offset]) |
8152 (this[offset + 1] << 8) |
8153 (this[offset + 2] << 16) |
8154 (this[offset + 3] << 24)
8155}
8156
8157Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
8158 if (!noAssert) checkOffset(offset, 4, this.length)
8159
8160 return (this[offset] << 24) |
8161 (this[offset + 1] << 16) |
8162 (this[offset + 2] << 8) |
8163 (this[offset + 3])
8164}
8165
8166Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
8167 if (!noAssert) checkOffset(offset, 4, this.length)
8168 return ieee754.read(this, offset, true, 23, 4)
8169}
8170
8171Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
8172 if (!noAssert) checkOffset(offset, 4, this.length)
8173 return ieee754.read(this, offset, false, 23, 4)
8174}
8175
8176Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
8177 if (!noAssert) checkOffset(offset, 8, this.length)
8178 return ieee754.read(this, offset, true, 52, 8)
8179}
8180
8181Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
8182 if (!noAssert) checkOffset(offset, 8, this.length)
8183 return ieee754.read(this, offset, false, 52, 8)
8184}
8185
8186function checkInt (buf, value, offset, ext, max, min) {
8187 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
8188 if (value > max || value < min) throw new RangeError('value is out of bounds')
8189 if (offset + ext > buf.length) throw new RangeError('index out of range')
8190}
8191
8192Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
8193 value = +value
8194 offset = offset | 0
8195 byteLength = byteLength | 0
8196 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
8197
8198 var mul = 1
8199 var i = 0
8200 this[offset] = value & 0xFF
8201 while (++i < byteLength && (mul *= 0x100)) {
8202 this[offset + i] = (value / mul) & 0xFF
8203 }
8204
8205 return offset + byteLength
8206}
8207
8208Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
8209 value = +value
8210 offset = offset | 0
8211 byteLength = byteLength | 0
8212 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
8213
8214 var i = byteLength - 1
8215 var mul = 1
8216 this[offset + i] = value & 0xFF
8217 while (--i >= 0 && (mul *= 0x100)) {
8218 this[offset + i] = (value / mul) & 0xFF
8219 }
8220
8221 return offset + byteLength
8222}
8223
8224Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
8225 value = +value
8226 offset = offset | 0
8227 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
8228 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
8229 this[offset] = value
8230 return offset + 1
8231}
8232
8233function objectWriteUInt16 (buf, value, offset, littleEndian) {
8234 if (value < 0) value = 0xffff + value + 1
8235 for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {
8236 buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
8237 (littleEndian ? i : 1 - i) * 8
8238 }
8239}
8240
8241Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
8242 value = +value
8243 offset = offset | 0
8244 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
8245 if (Buffer.TYPED_ARRAY_SUPPORT) {
8246 this[offset] = value
8247 this[offset + 1] = (value >>> 8)
8248 } else {
8249 objectWriteUInt16(this, value, offset, true)
8250 }
8251 return offset + 2
8252}
8253
8254Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
8255 value = +value
8256 offset = offset | 0
8257 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
8258 if (Buffer.TYPED_ARRAY_SUPPORT) {
8259 this[offset] = (value >>> 8)
8260 this[offset + 1] = value
8261 } else {
8262 objectWriteUInt16(this, value, offset, false)
8263 }
8264 return offset + 2
8265}
8266
8267function objectWriteUInt32 (buf, value, offset, littleEndian) {
8268 if (value < 0) value = 0xffffffff + value + 1
8269 for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {
8270 buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
8271 }
8272}
8273
8274Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
8275 value = +value
8276 offset = offset | 0
8277 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
8278 if (Buffer.TYPED_ARRAY_SUPPORT) {
8279 this[offset + 3] = (value >>> 24)
8280 this[offset + 2] = (value >>> 16)
8281 this[offset + 1] = (value >>> 8)
8282 this[offset] = value
8283 } else {
8284 objectWriteUInt32(this, value, offset, true)
8285 }
8286 return offset + 4
8287}
8288
8289Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
8290 value = +value
8291 offset = offset | 0
8292 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
8293 if (Buffer.TYPED_ARRAY_SUPPORT) {
8294 this[offset] = (value >>> 24)
8295 this[offset + 1] = (value >>> 16)
8296 this[offset + 2] = (value >>> 8)
8297 this[offset + 3] = value
8298 } else {
8299 objectWriteUInt32(this, value, offset, false)
8300 }
8301 return offset + 4
8302}
8303
8304Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
8305 value = +value
8306 offset = offset | 0
8307 if (!noAssert) {
8308 var limit = Math.pow(2, 8 * byteLength - 1)
8309
8310 checkInt(this, value, offset, byteLength, limit - 1, -limit)
8311 }
8312
8313 var i = 0
8314 var mul = 1
8315 var sub = value < 0 ? 1 : 0
8316 this[offset] = value & 0xFF
8317 while (++i < byteLength && (mul *= 0x100)) {
8318 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
8319 }
8320
8321 return offset + byteLength
8322}
8323
8324Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
8325 value = +value
8326 offset = offset | 0
8327 if (!noAssert) {
8328 var limit = Math.pow(2, 8 * byteLength - 1)
8329
8330 checkInt(this, value, offset, byteLength, limit - 1, -limit)
8331 }
8332
8333 var i = byteLength - 1
8334 var mul = 1
8335 var sub = value < 0 ? 1 : 0
8336 this[offset + i] = value & 0xFF
8337 while (--i >= 0 && (mul *= 0x100)) {
8338 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
8339 }
8340
8341 return offset + byteLength
8342}
8343
8344Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
8345 value = +value
8346 offset = offset | 0
8347 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
8348 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
8349 if (value < 0) value = 0xff + value + 1
8350 this[offset] = value
8351 return offset + 1
8352}
8353
8354Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
8355 value = +value
8356 offset = offset | 0
8357 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
8358 if (Buffer.TYPED_ARRAY_SUPPORT) {
8359 this[offset] = value
8360 this[offset + 1] = (value >>> 8)
8361 } else {
8362 objectWriteUInt16(this, value, offset, true)
8363 }
8364 return offset + 2
8365}
8366
8367Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
8368 value = +value
8369 offset = offset | 0
8370 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
8371 if (Buffer.TYPED_ARRAY_SUPPORT) {
8372 this[offset] = (value >>> 8)
8373 this[offset + 1] = value
8374 } else {
8375 objectWriteUInt16(this, value, offset, false)
8376 }
8377 return offset + 2
8378}
8379
8380Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
8381 value = +value
8382 offset = offset | 0
8383 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
8384 if (Buffer.TYPED_ARRAY_SUPPORT) {
8385 this[offset] = value
8386 this[offset + 1] = (value >>> 8)
8387 this[offset + 2] = (value >>> 16)
8388 this[offset + 3] = (value >>> 24)
8389 } else {
8390 objectWriteUInt32(this, value, offset, true)
8391 }
8392 return offset + 4
8393}
8394
8395Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
8396 value = +value
8397 offset = offset | 0
8398 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
8399 if (value < 0) value = 0xffffffff + value + 1
8400 if (Buffer.TYPED_ARRAY_SUPPORT) {
8401 this[offset] = (value >>> 24)
8402 this[offset + 1] = (value >>> 16)
8403 this[offset + 2] = (value >>> 8)
8404 this[offset + 3] = value
8405 } else {
8406 objectWriteUInt32(this, value, offset, false)
8407 }
8408 return offset + 4
8409}
8410
8411function checkIEEE754 (buf, value, offset, ext, max, min) {
8412 if (value > max || value < min) throw new RangeError('value is out of bounds')
8413 if (offset + ext > buf.length) throw new RangeError('index out of range')
8414 if (offset < 0) throw new RangeError('index out of range')
8415}
8416
8417function writeFloat (buf, value, offset, littleEndian, noAssert) {
8418 if (!noAssert) {
8419 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
8420 }
8421 ieee754.write(buf, value, offset, littleEndian, 23, 4)
8422 return offset + 4
8423}
8424
8425Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
8426 return writeFloat(this, value, offset, true, noAssert)
8427}
8428
8429Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
8430 return writeFloat(this, value, offset, false, noAssert)
8431}
8432
8433function writeDouble (buf, value, offset, littleEndian, noAssert) {
8434 if (!noAssert) {
8435 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
8436 }
8437 ieee754.write(buf, value, offset, littleEndian, 52, 8)
8438 return offset + 8
8439}
8440
8441Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
8442 return writeDouble(this, value, offset, true, noAssert)
8443}
8444
8445Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
8446 return writeDouble(this, value, offset, false, noAssert)
8447}
8448
8449// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
8450Buffer.prototype.copy = function copy (target, targetStart, start, end) {
8451 if (!start) start = 0
8452 if (!end && end !== 0) end = this.length
8453 if (targetStart >= target.length) targetStart = target.length
8454 if (!targetStart) targetStart = 0
8455 if (end > 0 && end < start) end = start
8456
8457 // Copy 0 bytes; we're done
8458 if (end === start) return 0
8459 if (target.length === 0 || this.length === 0) return 0
8460
8461 // Fatal error conditions
8462 if (targetStart < 0) {
8463 throw new RangeError('targetStart out of bounds')
8464 }
8465 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
8466 if (end < 0) throw new RangeError('sourceEnd out of bounds')
8467
8468 // Are we oob?
8469 if (end > this.length) end = this.length
8470 if (target.length - targetStart < end - start) {
8471 end = target.length - targetStart + start
8472 }
8473
8474 var len = end - start
8475 var i
8476
8477 if (this === target && start < targetStart && targetStart < end) {
8478 // descending copy from end
8479 for (i = len - 1; i >= 0; i--) {
8480 target[i + targetStart] = this[i + start]
8481 }
8482 } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
8483 // ascending copy from start
8484 for (i = 0; i < len; i++) {
8485 target[i + targetStart] = this[i + start]
8486 }
8487 } else {
8488 target._set(this.subarray(start, start + len), targetStart)
8489 }
8490
8491 return len
8492}
8493
8494// fill(value, start=0, end=buffer.length)
8495Buffer.prototype.fill = function fill (value, start, end) {
8496 if (!value) value = 0
8497 if (!start) start = 0
8498 if (!end) end = this.length
8499
8500 if (end < start) throw new RangeError('end < start')
8501
8502 // Fill 0 bytes; we're done
8503 if (end === start) return
8504 if (this.length === 0) return
8505
8506 if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')
8507 if (end < 0 || end > this.length) throw new RangeError('end out of bounds')
8508
8509 var i
8510 if (typeof value === 'number') {
8511 for (i = start; i < end; i++) {
8512 this[i] = value
8513 }
8514 } else {
8515 var bytes = utf8ToBytes(value.toString())
8516 var len = bytes.length
8517 for (i = start; i < end; i++) {
8518 this[i] = bytes[i % len]
8519 }
8520 }
8521
8522 return this
8523}
8524
8525/**
8526 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
8527 * Added in Node 0.12. Only available in browsers that support ArrayBuffer.
8528 */
8529Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
8530 if (typeof Uint8Array !== 'undefined') {
8531 if (Buffer.TYPED_ARRAY_SUPPORT) {
8532 return (new Buffer(this)).buffer
8533 } else {
8534 var buf = new Uint8Array(this.length)
8535 for (var i = 0, len = buf.length; i < len; i += 1) {
8536 buf[i] = this[i]
8537 }
8538 return buf.buffer
8539 }
8540 } else {
8541 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
8542 }
8543}
8544
8545// HELPER FUNCTIONS
8546// ================
8547
8548var BP = Buffer.prototype
8549
8550/**
8551 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
8552 */
8553Buffer._augment = function _augment (arr) {
8554 arr.constructor = Buffer
8555 arr._isBuffer = true
8556
8557 // save reference to original Uint8Array set method before overwriting
8558 arr._set = arr.set
8559
8560 // deprecated
8561 arr.get = BP.get
8562 arr.set = BP.set
8563
8564 arr.write = BP.write
8565 arr.toString = BP.toString
8566 arr.toLocaleString = BP.toString
8567 arr.toJSON = BP.toJSON
8568 arr.equals = BP.equals
8569 arr.compare = BP.compare
8570 arr.indexOf = BP.indexOf
8571 arr.copy = BP.copy
8572 arr.slice = BP.slice
8573 arr.readUIntLE = BP.readUIntLE
8574 arr.readUIntBE = BP.readUIntBE
8575 arr.readUInt8 = BP.readUInt8
8576 arr.readUInt16LE = BP.readUInt16LE
8577 arr.readUInt16BE = BP.readUInt16BE
8578 arr.readUInt32LE = BP.readUInt32LE
8579 arr.readUInt32BE = BP.readUInt32BE
8580 arr.readIntLE = BP.readIntLE
8581 arr.readIntBE = BP.readIntBE
8582 arr.readInt8 = BP.readInt8
8583 arr.readInt16LE = BP.readInt16LE
8584 arr.readInt16BE = BP.readInt16BE
8585 arr.readInt32LE = BP.readInt32LE
8586 arr.readInt32BE = BP.readInt32BE
8587 arr.readFloatLE = BP.readFloatLE
8588 arr.readFloatBE = BP.readFloatBE
8589 arr.readDoubleLE = BP.readDoubleLE
8590 arr.readDoubleBE = BP.readDoubleBE
8591 arr.writeUInt8 = BP.writeUInt8
8592 arr.writeUIntLE = BP.writeUIntLE
8593 arr.writeUIntBE = BP.writeUIntBE
8594 arr.writeUInt16LE = BP.writeUInt16LE
8595 arr.writeUInt16BE = BP.writeUInt16BE
8596 arr.writeUInt32LE = BP.writeUInt32LE
8597 arr.writeUInt32BE = BP.writeUInt32BE
8598 arr.writeIntLE = BP.writeIntLE
8599 arr.writeIntBE = BP.writeIntBE
8600 arr.writeInt8 = BP.writeInt8
8601 arr.writeInt16LE = BP.writeInt16LE
8602 arr.writeInt16BE = BP.writeInt16BE
8603 arr.writeInt32LE = BP.writeInt32LE
8604 arr.writeInt32BE = BP.writeInt32BE
8605 arr.writeFloatLE = BP.writeFloatLE
8606 arr.writeFloatBE = BP.writeFloatBE
8607 arr.writeDoubleLE = BP.writeDoubleLE
8608 arr.writeDoubleBE = BP.writeDoubleBE
8609 arr.fill = BP.fill
8610 arr.inspect = BP.inspect
8611 arr.toArrayBuffer = BP.toArrayBuffer
8612
8613 return arr
8614}
8615
8616var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
8617
8618function base64clean (str) {
8619 // Node strips out invalid characters like \n and \t from the string, base64-js does not
8620 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
8621 // Node converts strings with length < 2 to ''
8622 if (str.length < 2) return ''
8623 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
8624 while (str.length % 4 !== 0) {
8625 str = str + '='
8626 }
8627 return str
8628}
8629
8630function stringtrim (str) {
8631 if (str.trim) return str.trim()
8632 return str.replace(/^\s+|\s+$/g, '')
8633}
8634
8635function toHex (n) {
8636 if (n < 16) return '0' + n.toString(16)
8637 return n.toString(16)
8638}
8639
8640function utf8ToBytes (string, units) {
8641 units = units || Infinity
8642 var codePoint
8643 var length = string.length
8644 var leadSurrogate = null
8645 var bytes = []
8646
8647 for (var i = 0; i < length; i++) {
8648 codePoint = string.charCodeAt(i)
8649
8650 // is surrogate component
8651 if (codePoint > 0xD7FF && codePoint < 0xE000) {
8652 // last char was a lead
8653 if (!leadSurrogate) {
8654 // no lead yet
8655 if (codePoint > 0xDBFF) {
8656 // unexpected trail
8657 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
8658 continue
8659
8660 } else if (i + 1 === length) {
8661 // unpaired lead
8662 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
8663 continue
8664 }
8665
8666 // valid lead
8667 leadSurrogate = codePoint
8668
8669 continue
8670 }
8671
8672 // 2 leads in a row
8673 if (codePoint < 0xDC00) {
8674 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
8675 leadSurrogate = codePoint
8676 continue
8677 }
8678
8679 // valid surrogate pair
8680 codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000
8681
8682 } else if (leadSurrogate) {
8683 // valid bmp char, but last char was a lead
8684 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
8685 }
8686
8687 leadSurrogate = null
8688
8689 // encode utf8
8690 if (codePoint < 0x80) {
8691 if ((units -= 1) < 0) break
8692 bytes.push(codePoint)
8693 } else if (codePoint < 0x800) {
8694 if ((units -= 2) < 0) break
8695 bytes.push(
8696 codePoint >> 0x6 | 0xC0,
8697 codePoint & 0x3F | 0x80
8698 )
8699 } else if (codePoint < 0x10000) {
8700 if ((units -= 3) < 0) break
8701 bytes.push(
8702 codePoint >> 0xC | 0xE0,
8703 codePoint >> 0x6 & 0x3F | 0x80,
8704 codePoint & 0x3F | 0x80
8705 )
8706 } else if (codePoint < 0x110000) {
8707 if ((units -= 4) < 0) break
8708 bytes.push(
8709 codePoint >> 0x12 | 0xF0,
8710 codePoint >> 0xC & 0x3F | 0x80,
8711 codePoint >> 0x6 & 0x3F | 0x80,
8712 codePoint & 0x3F | 0x80
8713 )
8714 } else {
8715 throw new Error('Invalid code point')
8716 }
8717 }
8718
8719 return bytes
8720}
8721
8722function asciiToBytes (str) {
8723 var byteArray = []
8724 for (var i = 0; i < str.length; i++) {
8725 // Node's code seems to be doing this and not & 0x7F..
8726 byteArray.push(str.charCodeAt(i) & 0xFF)
8727 }
8728 return byteArray
8729}
8730
8731function utf16leToBytes (str, units) {
8732 var c, hi, lo
8733 var byteArray = []
8734 for (var i = 0; i < str.length; i++) {
8735 if ((units -= 2) < 0) break
8736
8737 c = str.charCodeAt(i)
8738 hi = c >> 8
8739 lo = c % 256
8740 byteArray.push(lo)
8741 byteArray.push(hi)
8742 }
8743
8744 return byteArray
8745}
8746
8747function base64ToBytes (str) {
8748 return base64.toByteArray(base64clean(str))
8749}
8750
8751function blitBuffer (src, dst, offset, length) {
8752 for (var i = 0; i < length; i++) {
8753 if ((i + offset >= dst.length) || (i >= src.length)) break
8754 dst[i + offset] = src[i]
8755 }
8756 return i
8757}
8758
8759},{"base64-js":8,"ieee754":9,"is-array":10}],8:[function(require,module,exports){
8760var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
8761
8762;(function (exports) {
8763 'use strict';
8764
8765 var Arr = (typeof Uint8Array !== 'undefined')
8766 ? Uint8Array
8767 : Array
8768
8769 var PLUS = '+'.charCodeAt(0)
8770 var SLASH = '/'.charCodeAt(0)
8771 var NUMBER = '0'.charCodeAt(0)
8772 var LOWER = 'a'.charCodeAt(0)
8773 var UPPER = 'A'.charCodeAt(0)
8774 var PLUS_URL_SAFE = '-'.charCodeAt(0)
8775 var SLASH_URL_SAFE = '_'.charCodeAt(0)
8776
8777 function decode (elt) {
8778 var code = elt.charCodeAt(0)
8779 if (code === PLUS ||
8780 code === PLUS_URL_SAFE)
8781 return 62 // '+'
8782 if (code === SLASH ||
8783 code === SLASH_URL_SAFE)
8784 return 63 // '/'
8785 if (code < NUMBER)
8786 return -1 //no match
8787 if (code < NUMBER + 10)
8788 return code - NUMBER + 26 + 26
8789 if (code < UPPER + 26)
8790 return code - UPPER
8791 if (code < LOWER + 26)
8792 return code - LOWER + 26
8793 }
8794
8795 function b64ToByteArray (b64) {
8796 var i, j, l, tmp, placeHolders, arr
8797
8798 if (b64.length % 4 > 0) {
8799 throw new Error('Invalid string. Length must be a multiple of 4')
8800 }
8801
8802 // the number of equal signs (place holders)
8803 // if there are two placeholders, than the two characters before it
8804 // represent one byte
8805 // if there is only one, then the three characters before it represent 2 bytes
8806 // this is just a cheap hack to not do indexOf twice
8807 var len = b64.length
8808 placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
8809
8810 // base64 is 4/3 + up to two characters of the original data
8811 arr = new Arr(b64.length * 3 / 4 - placeHolders)
8812
8813 // if there are placeholders, only get up to the last complete 4 chars
8814 l = placeHolders > 0 ? b64.length - 4 : b64.length
8815
8816 var L = 0
8817
8818 function push (v) {
8819 arr[L++] = v
8820 }
8821
8822 for (i = 0, j = 0; i < l; i += 4, j += 3) {
8823 tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
8824 push((tmp & 0xFF0000) >> 16)
8825 push((tmp & 0xFF00) >> 8)
8826 push(tmp & 0xFF)
8827 }
8828
8829 if (placeHolders === 2) {
8830 tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
8831 push(tmp & 0xFF)
8832 } else if (placeHolders === 1) {
8833 tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
8834 push((tmp >> 8) & 0xFF)
8835 push(tmp & 0xFF)
8836 }
8837
8838 return arr
8839 }
8840
8841 function uint8ToBase64 (uint8) {
8842 var i,
8843 extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
8844 output = "",
8845 temp, length
8846
8847 function encode (num) {
8848 return lookup.charAt(num)
8849 }
8850
8851 function tripletToBase64 (num) {
8852 return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
8853 }
8854
8855 // go through the array every three bytes, we'll deal with trailing stuff later
8856 for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
8857 temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
8858 output += tripletToBase64(temp)
8859 }
8860
8861 // pad the end with zeros, but make sure to not forget the extra bytes
8862 switch (extraBytes) {
8863 case 1:
8864 temp = uint8[uint8.length - 1]
8865 output += encode(temp >> 2)
8866 output += encode((temp << 4) & 0x3F)
8867 output += '=='
8868 break
8869 case 2:
8870 temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
8871 output += encode(temp >> 10)
8872 output += encode((temp >> 4) & 0x3F)
8873 output += encode((temp << 2) & 0x3F)
8874 output += '='
8875 break
8876 }
8877
8878 return output
8879 }
8880
8881 exports.toByteArray = b64ToByteArray
8882 exports.fromByteArray = uint8ToBase64
8883}(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
8884
8885},{}],9:[function(require,module,exports){
8886exports.read = function (buffer, offset, isLE, mLen, nBytes) {
8887 var e, m
8888 var eLen = nBytes * 8 - mLen - 1
8889 var eMax = (1 << eLen) - 1
8890 var eBias = eMax >> 1
8891 var nBits = -7
8892 var i = isLE ? (nBytes - 1) : 0
8893 var d = isLE ? -1 : 1
8894 var s = buffer[offset + i]
8895
8896 i += d
8897
8898 e = s & ((1 << (-nBits)) - 1)
8899 s >>= (-nBits)
8900 nBits += eLen
8901 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
8902
8903 m = e & ((1 << (-nBits)) - 1)
8904 e >>= (-nBits)
8905 nBits += mLen
8906 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
8907
8908 if (e === 0) {
8909 e = 1 - eBias
8910 } else if (e === eMax) {
8911 return m ? NaN : ((s ? -1 : 1) * Infinity)
8912 } else {
8913 m = m + Math.pow(2, mLen)
8914 e = e - eBias
8915 }
8916 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
8917}
8918
8919exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
8920 var e, m, c
8921 var eLen = nBytes * 8 - mLen - 1
8922 var eMax = (1 << eLen) - 1
8923 var eBias = eMax >> 1
8924 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
8925 var i = isLE ? 0 : (nBytes - 1)
8926 var d = isLE ? 1 : -1
8927 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
8928
8929 value = Math.abs(value)
8930
8931 if (isNaN(value) || value === Infinity) {
8932 m = isNaN(value) ? 1 : 0
8933 e = eMax
8934 } else {
8935 e = Math.floor(Math.log(value) / Math.LN2)
8936 if (value * (c = Math.pow(2, -e)) < 1) {
8937 e--
8938 c *= 2
8939 }
8940 if (e + eBias >= 1) {
8941 value += rt / c
8942 } else {
8943 value += rt * Math.pow(2, 1 - eBias)
8944 }
8945 if (value * c >= 2) {
8946 e++
8947 c /= 2
8948 }
8949
8950 if (e + eBias >= eMax) {
8951 m = 0
8952 e = eMax
8953 } else if (e + eBias >= 1) {
8954 m = (value * c - 1) * Math.pow(2, mLen)
8955 e = e + eBias
8956 } else {
8957 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
8958 e = 0
8959 }
8960 }
8961
8962 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
8963
8964 e = (e << mLen) | m
8965 eLen += mLen
8966 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
8967
8968 buffer[offset + i - d] |= s * 128
8969}
8970
8971},{}],10:[function(require,module,exports){
8972
8973/**
8974 * isArray
8975 */
8976
8977var isArray = Array.isArray;
8978
8979/**
8980 * toString
8981 */
8982
8983var str = Object.prototype.toString;
8984
8985/**
8986 * Whether or not the given `val`
8987 * is an array.
8988 *
8989 * example:
8990 *
8991 * isArray([]);
8992 * // > true
8993 * isArray(arguments);
8994 * // > false
8995 * isArray('');
8996 * // > false
8997 *
8998 * @param {mixed} val
8999 * @return {bool}
9000 */
9001
9002module.exports = isArray || function (val) {
9003 return !! val && '[object Array]' == str.call(val);
9004};
9005
9006},{}],11:[function(require,module,exports){
9007// Copyright Joyent, Inc. and other Node contributors.
9008//
9009// Permission is hereby granted, free of charge, to any person obtaining a
9010// copy of this software and associated documentation files (the
9011// "Software"), to deal in the Software without restriction, including
9012// without limitation the rights to use, copy, modify, merge, publish,
9013// distribute, sublicense, and/or sell copies of the Software, and to permit
9014// persons to whom the Software is furnished to do so, subject to the
9015// following conditions:
9016//
9017// The above copyright notice and this permission notice shall be included
9018// in all copies or substantial portions of the Software.
9019//
9020// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
9021// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
9022// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
9023// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
9024// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
9025// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
9026// USE OR OTHER DEALINGS IN THE SOFTWARE.
9027
9028function EventEmitter() {
9029 this._events = this._events || {};
9030 this._maxListeners = this._maxListeners || undefined;
9031}
9032module.exports = EventEmitter;
9033
9034// Backwards-compat with node 0.10.x
9035EventEmitter.EventEmitter = EventEmitter;
9036
9037EventEmitter.prototype._events = undefined;
9038EventEmitter.prototype._maxListeners = undefined;
9039
9040// By default EventEmitters will print a warning if more than 10 listeners are
9041// added to it. This is a useful default which helps finding memory leaks.
9042EventEmitter.defaultMaxListeners = 10;
9043
9044// Obviously not all Emitters should be limited to 10. This function allows
9045// that to be increased. Set to zero for unlimited.
9046EventEmitter.prototype.setMaxListeners = function(n) {
9047 if (!isNumber(n) || n < 0 || isNaN(n))
9048 throw TypeError('n must be a positive number');
9049 this._maxListeners = n;
9050 return this;
9051};
9052
9053EventEmitter.prototype.emit = function(type) {
9054 var er, handler, len, args, i, listeners;
9055
9056 if (!this._events)
9057 this._events = {};
9058
9059 // If there is no 'error' event listener then throw.
9060 if (type === 'error') {
9061 if (!this._events.error ||
9062 (isObject(this._events.error) && !this._events.error.length)) {
9063 er = arguments[1];
9064 if (er instanceof Error) {
9065 throw er; // Unhandled 'error' event
9066 }
9067 throw TypeError('Uncaught, unspecified "error" event.');
9068 }
9069 }
9070
9071 handler = this._events[type];
9072
9073 if (isUndefined(handler))
9074 return false;
9075
9076 if (isFunction(handler)) {
9077 switch (arguments.length) {
9078 // fast cases
9079 case 1:
9080 handler.call(this);
9081 break;
9082 case 2:
9083 handler.call(this, arguments[1]);
9084 break;
9085 case 3:
9086 handler.call(this, arguments[1], arguments[2]);
9087 break;
9088 // slower
9089 default:
9090 len = arguments.length;
9091 args = new Array(len - 1);
9092 for (i = 1; i < len; i++)
9093 args[i - 1] = arguments[i];
9094 handler.apply(this, args);
9095 }
9096 } else if (isObject(handler)) {
9097 len = arguments.length;
9098 args = new Array(len - 1);
9099 for (i = 1; i < len; i++)
9100 args[i - 1] = arguments[i];
9101
9102 listeners = handler.slice();
9103 len = listeners.length;
9104 for (i = 0; i < len; i++)
9105 listeners[i].apply(this, args);
9106 }
9107
9108 return true;
9109};
9110
9111EventEmitter.prototype.addListener = function(type, listener) {
9112 var m;
9113
9114 if (!isFunction(listener))
9115 throw TypeError('listener must be a function');
9116
9117 if (!this._events)
9118 this._events = {};
9119
9120 // To avoid recursion in the case that type === "newListener"! Before
9121 // adding it to the listeners, first emit "newListener".
9122 if (this._events.newListener)
9123 this.emit('newListener', type,
9124 isFunction(listener.listener) ?
9125 listener.listener : listener);
9126
9127 if (!this._events[type])
9128 // Optimize the case of one listener. Don't need the extra array object.
9129 this._events[type] = listener;
9130 else if (isObject(this._events[type]))
9131 // If we've already got an array, just append.
9132 this._events[type].push(listener);
9133 else
9134 // Adding the second element, need to change to array.
9135 this._events[type] = [this._events[type], listener];
9136
9137 // Check for listener leak
9138 if (isObject(this._events[type]) && !this._events[type].warned) {
9139 var m;
9140 if (!isUndefined(this._maxListeners)) {
9141 m = this._maxListeners;
9142 } else {
9143 m = EventEmitter.defaultMaxListeners;
9144 }
9145
9146 if (m && m > 0 && this._events[type].length > m) {
9147 this._events[type].warned = true;
9148 console.error('(node) warning: possible EventEmitter memory ' +
9149 'leak detected. %d listeners added. ' +
9150 'Use emitter.setMaxListeners() to increase limit.',
9151 this._events[type].length);
9152 if (typeof console.trace === 'function') {
9153 // not supported in IE 10
9154 console.trace();
9155 }
9156 }
9157 }
9158
9159 return this;
9160};
9161
9162EventEmitter.prototype.on = EventEmitter.prototype.addListener;
9163
9164EventEmitter.prototype.once = function(type, listener) {
9165 if (!isFunction(listener))
9166 throw TypeError('listener must be a function');
9167
9168 var fired = false;
9169
9170 function g() {
9171 this.removeListener(type, g);
9172
9173 if (!fired) {
9174 fired = true;
9175 listener.apply(this, arguments);
9176 }
9177 }
9178
9179 g.listener = listener;
9180 this.on(type, g);
9181
9182 return this;
9183};
9184
9185// emits a 'removeListener' event iff the listener was removed
9186EventEmitter.prototype.removeListener = function(type, listener) {
9187 var list, position, length, i;
9188
9189 if (!isFunction(listener))
9190 throw TypeError('listener must be a function');
9191
9192 if (!this._events || !this._events[type])
9193 return this;
9194
9195 list = this._events[type];
9196 length = list.length;
9197 position = -1;
9198
9199 if (list === listener ||
9200 (isFunction(list.listener) && list.listener === listener)) {
9201 delete this._events[type];
9202 if (this._events.removeListener)
9203 this.emit('removeListener', type, listener);
9204
9205 } else if (isObject(list)) {
9206 for (i = length; i-- > 0;) {
9207 if (list[i] === listener ||
9208 (list[i].listener && list[i].listener === listener)) {
9209 position = i;
9210 break;
9211 }
9212 }
9213
9214 if (position < 0)
9215 return this;
9216
9217 if (list.length === 1) {
9218 list.length = 0;
9219 delete this._events[type];
9220 } else {
9221 list.splice(position, 1);
9222 }
9223
9224 if (this._events.removeListener)
9225 this.emit('removeListener', type, listener);
9226 }
9227
9228 return this;
9229};
9230
9231EventEmitter.prototype.removeAllListeners = function(type) {
9232 var key, listeners;
9233
9234 if (!this._events)
9235 return this;
9236
9237 // not listening for removeListener, no need to emit
9238 if (!this._events.removeListener) {
9239 if (arguments.length === 0)
9240 this._events = {};
9241 else if (this._events[type])
9242 delete this._events[type];
9243 return this;
9244 }
9245
9246 // emit removeListener for all listeners on all events
9247 if (arguments.length === 0) {
9248 for (key in this._events) {
9249 if (key === 'removeListener') continue;
9250 this.removeAllListeners(key);
9251 }
9252 this.removeAllListeners('removeListener');
9253 this._events = {};
9254 return this;
9255 }
9256
9257 listeners = this._events[type];
9258
9259 if (isFunction(listeners)) {
9260 this.removeListener(type, listeners);
9261 } else {
9262 // LIFO order
9263 while (listeners.length)
9264 this.removeListener(type, listeners[listeners.length - 1]);
9265 }
9266 delete this._events[type];
9267
9268 return this;
9269};
9270
9271EventEmitter.prototype.listeners = function(type) {
9272 var ret;
9273 if (!this._events || !this._events[type])
9274 ret = [];
9275 else if (isFunction(this._events[type]))
9276 ret = [this._events[type]];
9277 else
9278 ret = this._events[type].slice();
9279 return ret;
9280};
9281
9282EventEmitter.listenerCount = function(emitter, type) {
9283 var ret;
9284 if (!emitter._events || !emitter._events[type])
9285 ret = 0;
9286 else if (isFunction(emitter._events[type]))
9287 ret = 1;
9288 else
9289 ret = emitter._events[type].length;
9290 return ret;
9291};
9292
9293function isFunction(arg) {
9294 return typeof arg === 'function';
9295}
9296
9297function isNumber(arg) {
9298 return typeof arg === 'number';
9299}
9300
9301function isObject(arg) {
9302 return typeof arg === 'object' && arg !== null;
9303}
9304
9305function isUndefined(arg) {
9306 return arg === void 0;
9307}
9308
9309},{}],12:[function(require,module,exports){
9310if (typeof Object.create === 'function') {
9311 // implementation from standard node.js 'util' module
9312 module.exports = function inherits(ctor, superCtor) {
9313 ctor.super_ = superCtor
9314 ctor.prototype = Object.create(superCtor.prototype, {
9315 constructor: {
9316 value: ctor,
9317 enumerable: false,
9318 writable: true,
9319 configurable: true
9320 }
9321 });
9322 };
9323} else {
9324 // old school shim for old browsers
9325 module.exports = function inherits(ctor, superCtor) {
9326 ctor.super_ = superCtor
9327 var TempCtor = function () {}
9328 TempCtor.prototype = superCtor.prototype
9329 ctor.prototype = new TempCtor()
9330 ctor.prototype.constructor = ctor
9331 }
9332}
9333
9334},{}],13:[function(require,module,exports){
9335module.exports = Array.isArray || function (arr) {
9336 return Object.prototype.toString.call(arr) == '[object Array]';
9337};
9338
9339},{}],14:[function(require,module,exports){
9340// shim for using process in browser
9341
9342var process = module.exports = {};
9343var queue = [];
9344var draining = false;
9345var currentQueue;
9346var queueIndex = -1;
9347
9348function cleanUpNextTick() {
9349 draining = false;
9350 if (currentQueue.length) {
9351 queue = currentQueue.concat(queue);
9352 } else {
9353 queueIndex = -1;
9354 }
9355 if (queue.length) {
9356 drainQueue();
9357 }
9358}
9359
9360function drainQueue() {
9361 if (draining) {
9362 return;
9363 }
9364 var timeout = setTimeout(cleanUpNextTick);
9365 draining = true;
9366
9367 var len = queue.length;
9368 while(len) {
9369 currentQueue = queue;
9370 queue = [];
9371 while (++queueIndex < len) {
9372 currentQueue[queueIndex].run();
9373 }
9374 queueIndex = -1;
9375 len = queue.length;
9376 }
9377 currentQueue = null;
9378 draining = false;
9379 clearTimeout(timeout);
9380}
9381
9382process.nextTick = function (fun) {
9383 var args = new Array(arguments.length - 1);
9384 if (arguments.length > 1) {
9385 for (var i = 1; i < arguments.length; i++) {
9386 args[i - 1] = arguments[i];
9387 }
9388 }
9389 queue.push(new Item(fun, args));
9390 if (queue.length === 1 && !draining) {
9391 setTimeout(drainQueue, 0);
9392 }
9393};
9394
9395// v8 likes predictible objects
9396function Item(fun, array) {
9397 this.fun = fun;
9398 this.array = array;
9399}
9400Item.prototype.run = function () {
9401 this.fun.apply(null, this.array);
9402};
9403process.title = 'browser';
9404process.browser = true;
9405process.env = {};
9406process.argv = [];
9407process.version = ''; // empty string to avoid regexp issues
9408process.versions = {};
9409
9410function noop() {}
9411
9412process.on = noop;
9413process.addListener = noop;
9414process.once = noop;
9415process.off = noop;
9416process.removeListener = noop;
9417process.removeAllListeners = noop;
9418process.emit = noop;
9419
9420process.binding = function (name) {
9421 throw new Error('process.binding is not supported');
9422};
9423
9424// TODO(shtylman)
9425process.cwd = function () { return '/' };
9426process.chdir = function (dir) {
9427 throw new Error('process.chdir is not supported');
9428};
9429process.umask = function() { return 0; };
9430
9431},{}],15:[function(require,module,exports){
9432module.exports = require("./lib/_stream_duplex.js")
9433
9434},{"./lib/_stream_duplex.js":16}],16:[function(require,module,exports){
9435(function (process){
9436// Copyright Joyent, Inc. and other Node contributors.
9437//
9438// Permission is hereby granted, free of charge, to any person obtaining a
9439// copy of this software and associated documentation files (the
9440// "Software"), to deal in the Software without restriction, including
9441// without limitation the rights to use, copy, modify, merge, publish,
9442// distribute, sublicense, and/or sell copies of the Software, and to permit
9443// persons to whom the Software is furnished to do so, subject to the
9444// following conditions:
9445//
9446// The above copyright notice and this permission notice shall be included
9447// in all copies or substantial portions of the Software.
9448//
9449// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
9450// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
9451// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
9452// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
9453// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
9454// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
9455// USE OR OTHER DEALINGS IN THE SOFTWARE.
9456
9457// a duplex stream is just a stream that is both readable and writable.
9458// Since JS doesn't have multiple prototypal inheritance, this class
9459// prototypally inherits from Readable, and then parasitically from
9460// Writable.
9461
9462module.exports = Duplex;
9463
9464/*<replacement>*/
9465var objectKeys = Object.keys || function (obj) {
9466 var keys = [];
9467 for (var key in obj) keys.push(key);
9468 return keys;
9469}
9470/*</replacement>*/
9471
9472
9473/*<replacement>*/
9474var util = require('core-util-is');
9475util.inherits = require('inherits');
9476/*</replacement>*/
9477
9478var Readable = require('./_stream_readable');
9479var Writable = require('./_stream_writable');
9480
9481util.inherits(Duplex, Readable);
9482
9483forEach(objectKeys(Writable.prototype), function(method) {
9484 if (!Duplex.prototype[method])
9485 Duplex.prototype[method] = Writable.prototype[method];
9486});
9487
9488function Duplex(options) {
9489 if (!(this instanceof Duplex))
9490 return new Duplex(options);
9491
9492 Readable.call(this, options);
9493 Writable.call(this, options);
9494
9495 if (options && options.readable === false)
9496 this.readable = false;
9497
9498 if (options && options.writable === false)
9499 this.writable = false;
9500
9501 this.allowHalfOpen = true;
9502 if (options && options.allowHalfOpen === false)
9503 this.allowHalfOpen = false;
9504
9505 this.once('end', onend);
9506}
9507
9508// the no-half-open enforcer
9509function onend() {
9510 // if we allow half-open state, or if the writable side ended,
9511 // then we're ok.
9512 if (this.allowHalfOpen || this._writableState.ended)
9513 return;
9514
9515 // no more data can be written.
9516 // But allow more writes to happen in this tick.
9517 process.nextTick(this.end.bind(this));
9518}
9519
9520function forEach (xs, f) {
9521 for (var i = 0, l = xs.length; i < l; i++) {
9522 f(xs[i], i);
9523 }
9524}
9525
9526}).call(this,require('_process'))
9527},{"./_stream_readable":18,"./_stream_writable":20,"_process":14,"core-util-is":21,"inherits":12}],17:[function(require,module,exports){
9528// Copyright Joyent, Inc. and other Node contributors.
9529//
9530// Permission is hereby granted, free of charge, to any person obtaining a
9531// copy of this software and associated documentation files (the
9532// "Software"), to deal in the Software without restriction, including
9533// without limitation the rights to use, copy, modify, merge, publish,
9534// distribute, sublicense, and/or sell copies of the Software, and to permit
9535// persons to whom the Software is furnished to do so, subject to the
9536// following conditions:
9537//
9538// The above copyright notice and this permission notice shall be included
9539// in all copies or substantial portions of the Software.
9540//
9541// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
9542// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
9543// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
9544// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
9545// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
9546// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
9547// USE OR OTHER DEALINGS IN THE SOFTWARE.
9548
9549// a passthrough stream.
9550// basically just the most minimal sort of Transform stream.
9551// Every written chunk gets output as-is.
9552
9553module.exports = PassThrough;
9554
9555var Transform = require('./_stream_transform');
9556
9557/*<replacement>*/
9558var util = require('core-util-is');
9559util.inherits = require('inherits');
9560/*</replacement>*/
9561
9562util.inherits(PassThrough, Transform);
9563
9564function PassThrough(options) {
9565 if (!(this instanceof PassThrough))
9566 return new PassThrough(options);
9567
9568 Transform.call(this, options);
9569}
9570
9571PassThrough.prototype._transform = function(chunk, encoding, cb) {
9572 cb(null, chunk);
9573};
9574
9575},{"./_stream_transform":19,"core-util-is":21,"inherits":12}],18:[function(require,module,exports){
9576(function (process){
9577// Copyright Joyent, Inc. and other Node contributors.
9578//
9579// Permission is hereby granted, free of charge, to any person obtaining a
9580// copy of this software and associated documentation files (the
9581// "Software"), to deal in the Software without restriction, including
9582// without limitation the rights to use, copy, modify, merge, publish,
9583// distribute, sublicense, and/or sell copies of the Software, and to permit
9584// persons to whom the Software is furnished to do so, subject to the
9585// following conditions:
9586//
9587// The above copyright notice and this permission notice shall be included
9588// in all copies or substantial portions of the Software.
9589//
9590// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
9591// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
9592// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
9593// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
9594// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
9595// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
9596// USE OR OTHER DEALINGS IN THE SOFTWARE.
9597
9598module.exports = Readable;
9599
9600/*<replacement>*/
9601var isArray = require('isarray');
9602/*</replacement>*/
9603
9604
9605/*<replacement>*/
9606var Buffer = require('buffer').Buffer;
9607/*</replacement>*/
9608
9609Readable.ReadableState = ReadableState;
9610
9611var EE = require('events').EventEmitter;
9612
9613/*<replacement>*/
9614if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
9615 return emitter.listeners(type).length;
9616};
9617/*</replacement>*/
9618
9619var Stream = require('stream');
9620
9621/*<replacement>*/
9622var util = require('core-util-is');
9623util.inherits = require('inherits');
9624/*</replacement>*/
9625
9626var StringDecoder;
9627
9628
9629/*<replacement>*/
9630var debug = require('util');
9631if (debug && debug.debuglog) {
9632 debug = debug.debuglog('stream');
9633} else {
9634 debug = function () {};
9635}
9636/*</replacement>*/
9637
9638
9639util.inherits(Readable, Stream);
9640
9641function ReadableState(options, stream) {
9642 var Duplex = require('./_stream_duplex');
9643
9644 options = options || {};
9645
9646 // the point at which it stops calling _read() to fill the buffer
9647 // Note: 0 is a valid value, means "don't call _read preemptively ever"
9648 var hwm = options.highWaterMark;
9649 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
9650 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
9651
9652 // cast to ints.
9653 this.highWaterMark = ~~this.highWaterMark;
9654
9655 this.buffer = [];
9656 this.length = 0;
9657 this.pipes = null;
9658 this.pipesCount = 0;
9659 this.flowing = null;
9660 this.ended = false;
9661 this.endEmitted = false;
9662 this.reading = false;
9663
9664 // a flag to be able to tell if the onwrite cb is called immediately,
9665 // or on a later tick. We set this to true at first, because any
9666 // actions that shouldn't happen until "later" should generally also
9667 // not happen before the first write call.
9668 this.sync = true;
9669
9670 // whenever we return null, then we set a flag to say
9671 // that we're awaiting a 'readable' event emission.
9672 this.needReadable = false;
9673 this.emittedReadable = false;
9674 this.readableListening = false;
9675
9676
9677 // object stream flag. Used to make read(n) ignore n and to
9678 // make all the buffer merging and length checks go away
9679 this.objectMode = !!options.objectMode;
9680
9681 if (stream instanceof Duplex)
9682 this.objectMode = this.objectMode || !!options.readableObjectMode;
9683
9684 // Crypto is kind of old and crusty. Historically, its default string
9685 // encoding is 'binary' so we have to make this configurable.
9686 // Everything else in the universe uses 'utf8', though.
9687 this.defaultEncoding = options.defaultEncoding || 'utf8';
9688
9689 // when piping, we only care about 'readable' events that happen
9690 // after read()ing all the bytes and not getting any pushback.
9691 this.ranOut = false;
9692
9693 // the number of writers that are awaiting a drain event in .pipe()s
9694 this.awaitDrain = 0;
9695
9696 // if true, a maybeReadMore has been scheduled
9697 this.readingMore = false;
9698
9699 this.decoder = null;
9700 this.encoding = null;
9701 if (options.encoding) {
9702 if (!StringDecoder)
9703 StringDecoder = require('string_decoder/').StringDecoder;
9704 this.decoder = new StringDecoder(options.encoding);
9705 this.encoding = options.encoding;
9706 }
9707}
9708
9709function Readable(options) {
9710 var Duplex = require('./_stream_duplex');
9711
9712 if (!(this instanceof Readable))
9713 return new Readable(options);
9714
9715 this._readableState = new ReadableState(options, this);
9716
9717 // legacy
9718 this.readable = true;
9719
9720 Stream.call(this);
9721}
9722
9723// Manually shove something into the read() buffer.
9724// This returns true if the highWaterMark has not been hit yet,
9725// similar to how Writable.write() returns true if you should
9726// write() some more.
9727Readable.prototype.push = function(chunk, encoding) {
9728 var state = this._readableState;
9729
9730 if (util.isString(chunk) && !state.objectMode) {
9731 encoding = encoding || state.defaultEncoding;
9732 if (encoding !== state.encoding) {
9733 chunk = new Buffer(chunk, encoding);
9734 encoding = '';
9735 }
9736 }
9737
9738 return readableAddChunk(this, state, chunk, encoding, false);
9739};
9740
9741// Unshift should *always* be something directly out of read()
9742Readable.prototype.unshift = function(chunk) {
9743 var state = this._readableState;
9744 return readableAddChunk(this, state, chunk, '', true);
9745};
9746
9747function readableAddChunk(stream, state, chunk, encoding, addToFront) {
9748 var er = chunkInvalid(state, chunk);
9749 if (er) {
9750 stream.emit('error', er);
9751 } else if (util.isNullOrUndefined(chunk)) {
9752 state.reading = false;
9753 if (!state.ended)
9754 onEofChunk(stream, state);
9755 } else if (state.objectMode || chunk && chunk.length > 0) {
9756 if (state.ended && !addToFront) {
9757 var e = new Error('stream.push() after EOF');
9758 stream.emit('error', e);
9759 } else if (state.endEmitted && addToFront) {
9760 var e = new Error('stream.unshift() after end event');
9761 stream.emit('error', e);
9762 } else {
9763 if (state.decoder && !addToFront && !encoding)
9764 chunk = state.decoder.write(chunk);
9765
9766 if (!addToFront)
9767 state.reading = false;
9768
9769 // if we want the data now, just emit it.
9770 if (state.flowing && state.length === 0 && !state.sync) {
9771 stream.emit('data', chunk);
9772 stream.read(0);
9773 } else {
9774 // update the buffer info.
9775 state.length += state.objectMode ? 1 : chunk.length;
9776 if (addToFront)
9777 state.buffer.unshift(chunk);
9778 else
9779 state.buffer.push(chunk);
9780
9781 if (state.needReadable)
9782 emitReadable(stream);
9783 }
9784
9785 maybeReadMore(stream, state);
9786 }
9787 } else if (!addToFront) {
9788 state.reading = false;
9789 }
9790
9791 return needMoreData(state);
9792}
9793
9794
9795
9796// if it's past the high water mark, we can push in some more.
9797// Also, if we have no data yet, we can stand some
9798// more bytes. This is to work around cases where hwm=0,
9799// such as the repl. Also, if the push() triggered a
9800// readable event, and the user called read(largeNumber) such that
9801// needReadable was set, then we ought to push more, so that another
9802// 'readable' event will be triggered.
9803function needMoreData(state) {
9804 return !state.ended &&
9805 (state.needReadable ||
9806 state.length < state.highWaterMark ||
9807 state.length === 0);
9808}
9809
9810// backwards compatibility.
9811Readable.prototype.setEncoding = function(enc) {
9812 if (!StringDecoder)
9813 StringDecoder = require('string_decoder/').StringDecoder;
9814 this._readableState.decoder = new StringDecoder(enc);
9815 this._readableState.encoding = enc;
9816 return this;
9817};
9818
9819// Don't raise the hwm > 128MB
9820var MAX_HWM = 0x800000;
9821function roundUpToNextPowerOf2(n) {
9822 if (n >= MAX_HWM) {
9823 n = MAX_HWM;
9824 } else {
9825 // Get the next highest power of 2
9826 n--;
9827 for (var p = 1; p < 32; p <<= 1) n |= n >> p;
9828 n++;
9829 }
9830 return n;
9831}
9832
9833function howMuchToRead(n, state) {
9834 if (state.length === 0 && state.ended)
9835 return 0;
9836
9837 if (state.objectMode)
9838 return n === 0 ? 0 : 1;
9839
9840 if (isNaN(n) || util.isNull(n)) {
9841 // only flow one buffer at a time
9842 if (state.flowing && state.buffer.length)
9843 return state.buffer[0].length;
9844 else
9845 return state.length;
9846 }
9847
9848 if (n <= 0)
9849 return 0;
9850
9851 // If we're asking for more than the target buffer level,
9852 // then raise the water mark. Bump up to the next highest
9853 // power of 2, to prevent increasing it excessively in tiny
9854 // amounts.
9855 if (n > state.highWaterMark)
9856 state.highWaterMark = roundUpToNextPowerOf2(n);
9857
9858 // don't have that much. return null, unless we've ended.
9859 if (n > state.length) {
9860 if (!state.ended) {
9861 state.needReadable = true;
9862 return 0;
9863 } else
9864 return state.length;
9865 }
9866
9867 return n;
9868}
9869
9870// you can override either this method, or the async _read(n) below.
9871Readable.prototype.read = function(n) {
9872 debug('read', n);
9873 var state = this._readableState;
9874 var nOrig = n;
9875
9876 if (!util.isNumber(n) || n > 0)
9877 state.emittedReadable = false;
9878
9879 // if we're doing read(0) to trigger a readable event, but we
9880 // already have a bunch of data in the buffer, then just trigger
9881 // the 'readable' event and move on.
9882 if (n === 0 &&
9883 state.needReadable &&
9884 (state.length >= state.highWaterMark || state.ended)) {
9885 debug('read: emitReadable', state.length, state.ended);
9886 if (state.length === 0 && state.ended)
9887 endReadable(this);
9888 else
9889 emitReadable(this);
9890 return null;
9891 }
9892
9893 n = howMuchToRead(n, state);
9894
9895 // if we've ended, and we're now clear, then finish it up.
9896 if (n === 0 && state.ended) {
9897 if (state.length === 0)
9898 endReadable(this);
9899 return null;
9900 }
9901
9902 // All the actual chunk generation logic needs to be
9903 // *below* the call to _read. The reason is that in certain
9904 // synthetic stream cases, such as passthrough streams, _read
9905 // may be a completely synchronous operation which may change
9906 // the state of the read buffer, providing enough data when
9907 // before there was *not* enough.
9908 //
9909 // So, the steps are:
9910 // 1. Figure out what the state of things will be after we do
9911 // a read from the buffer.
9912 //
9913 // 2. If that resulting state will trigger a _read, then call _read.
9914 // Note that this may be asynchronous, or synchronous. Yes, it is
9915 // deeply ugly to write APIs this way, but that still doesn't mean
9916 // that the Readable class should behave improperly, as streams are
9917 // designed to be sync/async agnostic.
9918 // Take note if the _read call is sync or async (ie, if the read call
9919 // has returned yet), so that we know whether or not it's safe to emit
9920 // 'readable' etc.
9921 //
9922 // 3. Actually pull the requested chunks out of the buffer and return.
9923
9924 // if we need a readable event, then we need to do some reading.
9925 var doRead = state.needReadable;
9926 debug('need readable', doRead);
9927
9928 // if we currently have less than the highWaterMark, then also read some
9929 if (state.length === 0 || state.length - n < state.highWaterMark) {
9930 doRead = true;
9931 debug('length less than watermark', doRead);
9932 }
9933
9934 // however, if we've ended, then there's no point, and if we're already
9935 // reading, then it's unnecessary.
9936 if (state.ended || state.reading) {
9937 doRead = false;
9938 debug('reading or ended', doRead);
9939 }
9940
9941 if (doRead) {
9942 debug('do read');
9943 state.reading = true;
9944 state.sync = true;
9945 // if the length is currently zero, then we *need* a readable event.
9946 if (state.length === 0)
9947 state.needReadable = true;
9948 // call internal read method
9949 this._read(state.highWaterMark);
9950 state.sync = false;
9951 }
9952
9953 // If _read pushed data synchronously, then `reading` will be false,
9954 // and we need to re-evaluate how much data we can return to the user.
9955 if (doRead && !state.reading)
9956 n = howMuchToRead(nOrig, state);
9957
9958 var ret;
9959 if (n > 0)
9960 ret = fromList(n, state);
9961 else
9962 ret = null;
9963
9964 if (util.isNull(ret)) {
9965 state.needReadable = true;
9966 n = 0;
9967 }
9968
9969 state.length -= n;
9970
9971 // If we have nothing in the buffer, then we want to know
9972 // as soon as we *do* get something into the buffer.
9973 if (state.length === 0 && !state.ended)
9974 state.needReadable = true;
9975
9976 // If we tried to read() past the EOF, then emit end on the next tick.
9977 if (nOrig !== n && state.ended && state.length === 0)
9978 endReadable(this);
9979
9980 if (!util.isNull(ret))
9981 this.emit('data', ret);
9982
9983 return ret;
9984};
9985
9986function chunkInvalid(state, chunk) {
9987 var er = null;
9988 if (!util.isBuffer(chunk) &&
9989 !util.isString(chunk) &&
9990 !util.isNullOrUndefined(chunk) &&
9991 !state.objectMode) {
9992 er = new TypeError('Invalid non-string/buffer chunk');
9993 }
9994 return er;
9995}
9996
9997
9998function onEofChunk(stream, state) {
9999 if (state.decoder && !state.ended) {
10000 var chunk = state.decoder.end();
10001 if (chunk && chunk.length) {
10002 state.buffer.push(chunk);
10003 state.length += state.objectMode ? 1 : chunk.length;
10004 }
10005 }
10006 state.ended = true;
10007
10008 // emit 'readable' now to make sure it gets picked up.
10009 emitReadable(stream);
10010}
10011
10012// Don't emit readable right away in sync mode, because this can trigger
10013// another read() call => stack overflow. This way, it might trigger
10014// a nextTick recursion warning, but that's not so bad.
10015function emitReadable(stream) {
10016 var state = stream._readableState;
10017 state.needReadable = false;
10018 if (!state.emittedReadable) {
10019 debug('emitReadable', state.flowing);
10020 state.emittedReadable = true;
10021 if (state.sync)
10022 process.nextTick(function() {
10023 emitReadable_(stream);
10024 });
10025 else
10026 emitReadable_(stream);
10027 }
10028}
10029
10030function emitReadable_(stream) {
10031 debug('emit readable');
10032 stream.emit('readable');
10033 flow(stream);
10034}
10035
10036
10037// at this point, the user has presumably seen the 'readable' event,
10038// and called read() to consume some data. that may have triggered
10039// in turn another _read(n) call, in which case reading = true if
10040// it's in progress.
10041// However, if we're not ended, or reading, and the length < hwm,
10042// then go ahead and try to read some more preemptively.
10043function maybeReadMore(stream, state) {
10044 if (!state.readingMore) {
10045 state.readingMore = true;
10046 process.nextTick(function() {
10047 maybeReadMore_(stream, state);
10048 });
10049 }
10050}
10051
10052function maybeReadMore_(stream, state) {
10053 var len = state.length;
10054 while (!state.reading && !state.flowing && !state.ended &&
10055 state.length < state.highWaterMark) {
10056 debug('maybeReadMore read 0');
10057 stream.read(0);
10058 if (len === state.length)
10059 // didn't get any data, stop spinning.
10060 break;
10061 else
10062 len = state.length;
10063 }
10064 state.readingMore = false;
10065}
10066
10067// abstract method. to be overridden in specific implementation classes.
10068// call cb(er, data) where data is <= n in length.
10069// for virtual (non-string, non-buffer) streams, "length" is somewhat
10070// arbitrary, and perhaps not very meaningful.
10071Readable.prototype._read = function(n) {
10072 this.emit('error', new Error('not implemented'));
10073};
10074
10075Readable.prototype.pipe = function(dest, pipeOpts) {
10076 var src = this;
10077 var state = this._readableState;
10078
10079 switch (state.pipesCount) {
10080 case 0:
10081 state.pipes = dest;
10082 break;
10083 case 1:
10084 state.pipes = [state.pipes, dest];
10085 break;
10086 default:
10087 state.pipes.push(dest);
10088 break;
10089 }
10090 state.pipesCount += 1;
10091 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
10092
10093 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
10094 dest !== process.stdout &&
10095 dest !== process.stderr;
10096
10097 var endFn = doEnd ? onend : cleanup;
10098 if (state.endEmitted)
10099 process.nextTick(endFn);
10100 else
10101 src.once('end', endFn);
10102
10103 dest.on('unpipe', onunpipe);
10104 function onunpipe(readable) {
10105 debug('onunpipe');
10106 if (readable === src) {
10107 cleanup();
10108 }
10109 }
10110
10111 function onend() {
10112 debug('onend');
10113 dest.end();
10114 }
10115
10116 // when the dest drains, it reduces the awaitDrain counter
10117 // on the source. This would be more elegant with a .once()
10118 // handler in flow(), but adding and removing repeatedly is
10119 // too slow.
10120 var ondrain = pipeOnDrain(src);
10121 dest.on('drain', ondrain);
10122
10123 function cleanup() {
10124 debug('cleanup');
10125 // cleanup event handlers once the pipe is broken
10126 dest.removeListener('close', onclose);
10127 dest.removeListener('finish', onfinish);
10128 dest.removeListener('drain', ondrain);
10129 dest.removeListener('error', onerror);
10130 dest.removeListener('unpipe', onunpipe);
10131 src.removeListener('end', onend);
10132 src.removeListener('end', cleanup);
10133 src.removeListener('data', ondata);
10134
10135 // if the reader is waiting for a drain event from this
10136 // specific writer, then it would cause it to never start
10137 // flowing again.
10138 // So, if this is awaiting a drain, then we just call it now.
10139 // If we don't know, then assume that we are waiting for one.
10140 if (state.awaitDrain &&
10141 (!dest._writableState || dest._writableState.needDrain))
10142 ondrain();
10143 }
10144
10145 src.on('data', ondata);
10146 function ondata(chunk) {
10147 debug('ondata');
10148 var ret = dest.write(chunk);
10149 if (false === ret) {
10150 debug('false write response, pause',
10151 src._readableState.awaitDrain);
10152 src._readableState.awaitDrain++;
10153 src.pause();
10154 }
10155 }
10156
10157 // if the dest has an error, then stop piping into it.
10158 // however, don't suppress the throwing behavior for this.
10159 function onerror(er) {
10160 debug('onerror', er);
10161 unpipe();
10162 dest.removeListener('error', onerror);
10163 if (EE.listenerCount(dest, 'error') === 0)
10164 dest.emit('error', er);
10165 }
10166 // This is a brutally ugly hack to make sure that our error handler
10167 // is attached before any userland ones. NEVER DO THIS.
10168 if (!dest._events || !dest._events.error)
10169 dest.on('error', onerror);
10170 else if (isArray(dest._events.error))
10171 dest._events.error.unshift(onerror);
10172 else
10173 dest._events.error = [onerror, dest._events.error];
10174
10175
10176
10177 // Both close and finish should trigger unpipe, but only once.
10178 function onclose() {
10179 dest.removeListener('finish', onfinish);
10180 unpipe();
10181 }
10182 dest.once('close', onclose);
10183 function onfinish() {
10184 debug('onfinish');
10185 dest.removeListener('close', onclose);
10186 unpipe();
10187 }
10188 dest.once('finish', onfinish);
10189
10190 function unpipe() {
10191 debug('unpipe');
10192 src.unpipe(dest);
10193 }
10194
10195 // tell the dest that it's being piped to
10196 dest.emit('pipe', src);
10197
10198 // start the flow if it hasn't been started already.
10199 if (!state.flowing) {
10200 debug('pipe resume');
10201 src.resume();
10202 }
10203
10204 return dest;
10205};
10206
10207function pipeOnDrain(src) {
10208 return function() {
10209 var state = src._readableState;
10210 debug('pipeOnDrain', state.awaitDrain);
10211 if (state.awaitDrain)
10212 state.awaitDrain--;
10213 if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {
10214 state.flowing = true;
10215 flow(src);
10216 }
10217 };
10218}
10219
10220
10221Readable.prototype.unpipe = function(dest) {
10222 var state = this._readableState;
10223
10224 // if we're not piping anywhere, then do nothing.
10225 if (state.pipesCount === 0)
10226 return this;
10227
10228 // just one destination. most common case.
10229 if (state.pipesCount === 1) {
10230 // passed in one, but it's not the right one.
10231 if (dest && dest !== state.pipes)
10232 return this;
10233
10234 if (!dest)
10235 dest = state.pipes;
10236
10237 // got a match.
10238 state.pipes = null;
10239 state.pipesCount = 0;
10240 state.flowing = false;
10241 if (dest)
10242 dest.emit('unpipe', this);
10243 return this;
10244 }
10245
10246 // slow case. multiple pipe destinations.
10247
10248 if (!dest) {
10249 // remove all.
10250 var dests = state.pipes;
10251 var len = state.pipesCount;
10252 state.pipes = null;
10253 state.pipesCount = 0;
10254 state.flowing = false;
10255
10256 for (var i = 0; i < len; i++)
10257 dests[i].emit('unpipe', this);
10258 return this;
10259 }
10260
10261 // try to find the right one.
10262 var i = indexOf(state.pipes, dest);
10263 if (i === -1)
10264 return this;
10265
10266 state.pipes.splice(i, 1);
10267 state.pipesCount -= 1;
10268 if (state.pipesCount === 1)
10269 state.pipes = state.pipes[0];
10270
10271 dest.emit('unpipe', this);
10272
10273 return this;
10274};
10275
10276// set up data events if they are asked for
10277// Ensure readable listeners eventually get something
10278Readable.prototype.on = function(ev, fn) {
10279 var res = Stream.prototype.on.call(this, ev, fn);
10280
10281 // If listening to data, and it has not explicitly been paused,
10282 // then call resume to start the flow of data on the next tick.
10283 if (ev === 'data' && false !== this._readableState.flowing) {
10284 this.resume();
10285 }
10286
10287 if (ev === 'readable' && this.readable) {
10288 var state = this._readableState;
10289 if (!state.readableListening) {
10290 state.readableListening = true;
10291 state.emittedReadable = false;
10292 state.needReadable = true;
10293 if (!state.reading) {
10294 var self = this;
10295 process.nextTick(function() {
10296 debug('readable nexttick read 0');
10297 self.read(0);
10298 });
10299 } else if (state.length) {
10300 emitReadable(this, state);
10301 }
10302 }
10303 }
10304
10305 return res;
10306};
10307Readable.prototype.addListener = Readable.prototype.on;
10308
10309// pause() and resume() are remnants of the legacy readable stream API
10310// If the user uses them, then switch into old mode.
10311Readable.prototype.resume = function() {
10312 var state = this._readableState;
10313 if (!state.flowing) {
10314 debug('resume');
10315 state.flowing = true;
10316 if (!state.reading) {
10317 debug('resume read 0');
10318 this.read(0);
10319 }
10320 resume(this, state);
10321 }
10322 return this;
10323};
10324
10325function resume(stream, state) {
10326 if (!state.resumeScheduled) {
10327 state.resumeScheduled = true;
10328 process.nextTick(function() {
10329 resume_(stream, state);
10330 });
10331 }
10332}
10333
10334function resume_(stream, state) {
10335 state.resumeScheduled = false;
10336 stream.emit('resume');
10337 flow(stream);
10338 if (state.flowing && !state.reading)
10339 stream.read(0);
10340}
10341
10342Readable.prototype.pause = function() {
10343 debug('call pause flowing=%j', this._readableState.flowing);
10344 if (false !== this._readableState.flowing) {
10345 debug('pause');
10346 this._readableState.flowing = false;
10347 this.emit('pause');
10348 }
10349 return this;
10350};
10351
10352function flow(stream) {
10353 var state = stream._readableState;
10354 debug('flow', state.flowing);
10355 if (state.flowing) {
10356 do {
10357 var chunk = stream.read();
10358 } while (null !== chunk && state.flowing);
10359 }
10360}
10361
10362// wrap an old-style stream as the async data source.
10363// This is *not* part of the readable stream interface.
10364// It is an ugly unfortunate mess of history.
10365Readable.prototype.wrap = function(stream) {
10366 var state = this._readableState;
10367 var paused = false;
10368
10369 var self = this;
10370 stream.on('end', function() {
10371 debug('wrapped end');
10372 if (state.decoder && !state.ended) {
10373 var chunk = state.decoder.end();
10374 if (chunk && chunk.length)
10375 self.push(chunk);
10376 }
10377
10378 self.push(null);
10379 });
10380
10381 stream.on('data', function(chunk) {
10382 debug('wrapped data');
10383 if (state.decoder)
10384 chunk = state.decoder.write(chunk);
10385 if (!chunk || !state.objectMode && !chunk.length)
10386 return;
10387
10388 var ret = self.push(chunk);
10389 if (!ret) {
10390 paused = true;
10391 stream.pause();
10392 }
10393 });
10394
10395 // proxy all the other methods.
10396 // important when wrapping filters and duplexes.
10397 for (var i in stream) {
10398 if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
10399 this[i] = function(method) { return function() {
10400 return stream[method].apply(stream, arguments);
10401 }}(i);
10402 }
10403 }
10404
10405 // proxy certain important events.
10406 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
10407 forEach(events, function(ev) {
10408 stream.on(ev, self.emit.bind(self, ev));
10409 });
10410
10411 // when we try to consume some more bytes, simply unpause the
10412 // underlying stream.
10413 self._read = function(n) {
10414 debug('wrapped _read', n);
10415 if (paused) {
10416 paused = false;
10417 stream.resume();
10418 }
10419 };
10420
10421 return self;
10422};
10423
10424
10425
10426// exposed for testing purposes only.
10427Readable._fromList = fromList;
10428
10429// Pluck off n bytes from an array of buffers.
10430// Length is the combined lengths of all the buffers in the list.
10431function fromList(n, state) {
10432 var list = state.buffer;
10433 var length = state.length;
10434 var stringMode = !!state.decoder;
10435 var objectMode = !!state.objectMode;
10436 var ret;
10437
10438 // nothing in the list, definitely empty.
10439 if (list.length === 0)
10440 return null;
10441
10442 if (length === 0)
10443 ret = null;
10444 else if (objectMode)
10445 ret = list.shift();
10446 else if (!n || n >= length) {
10447 // read it all, truncate the array.
10448 if (stringMode)
10449 ret = list.join('');
10450 else
10451 ret = Buffer.concat(list, length);
10452 list.length = 0;
10453 } else {
10454 // read just some of it.
10455 if (n < list[0].length) {
10456 // just take a part of the first list item.
10457 // slice is the same for buffers and strings.
10458 var buf = list[0];
10459 ret = buf.slice(0, n);
10460 list[0] = buf.slice(n);
10461 } else if (n === list[0].length) {
10462 // first list is a perfect match
10463 ret = list.shift();
10464 } else {
10465 // complex case.
10466 // we have enough to cover it, but it spans past the first buffer.
10467 if (stringMode)
10468 ret = '';
10469 else
10470 ret = new Buffer(n);
10471
10472 var c = 0;
10473 for (var i = 0, l = list.length; i < l && c < n; i++) {
10474 var buf = list[0];
10475 var cpy = Math.min(n - c, buf.length);
10476
10477 if (stringMode)
10478 ret += buf.slice(0, cpy);
10479 else
10480 buf.copy(ret, c, 0, cpy);
10481
10482 if (cpy < buf.length)
10483 list[0] = buf.slice(cpy);
10484 else
10485 list.shift();
10486
10487 c += cpy;
10488 }
10489 }
10490 }
10491
10492 return ret;
10493}
10494
10495function endReadable(stream) {
10496 var state = stream._readableState;
10497
10498 // If we get here before consuming all the bytes, then that is a
10499 // bug in node. Should never happen.
10500 if (state.length > 0)
10501 throw new Error('endReadable called on non-empty stream');
10502
10503 if (!state.endEmitted) {
10504 state.ended = true;
10505 process.nextTick(function() {
10506 // Check that we didn't get one last unshift.
10507 if (!state.endEmitted && state.length === 0) {
10508 state.endEmitted = true;
10509 stream.readable = false;
10510 stream.emit('end');
10511 }
10512 });
10513 }
10514}
10515
10516function forEach (xs, f) {
10517 for (var i = 0, l = xs.length; i < l; i++) {
10518 f(xs[i], i);
10519 }
10520}
10521
10522function indexOf (xs, x) {
10523 for (var i = 0, l = xs.length; i < l; i++) {
10524 if (xs[i] === x) return i;
10525 }
10526 return -1;
10527}
10528
10529}).call(this,require('_process'))
10530},{"./_stream_duplex":16,"_process":14,"buffer":7,"core-util-is":21,"events":11,"inherits":12,"isarray":13,"stream":26,"string_decoder/":27,"util":6}],19:[function(require,module,exports){
10531// Copyright Joyent, Inc. and other Node contributors.
10532//
10533// Permission is hereby granted, free of charge, to any person obtaining a
10534// copy of this software and associated documentation files (the
10535// "Software"), to deal in the Software without restriction, including
10536// without limitation the rights to use, copy, modify, merge, publish,
10537// distribute, sublicense, and/or sell copies of the Software, and to permit
10538// persons to whom the Software is furnished to do so, subject to the
10539// following conditions:
10540//
10541// The above copyright notice and this permission notice shall be included
10542// in all copies or substantial portions of the Software.
10543//
10544// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
10545// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
10546// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
10547// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
10548// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
10549// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
10550// USE OR OTHER DEALINGS IN THE SOFTWARE.
10551
10552
10553// a transform stream is a readable/writable stream where you do
10554// something with the data. Sometimes it's called a "filter",
10555// but that's not a great name for it, since that implies a thing where
10556// some bits pass through, and others are simply ignored. (That would
10557// be a valid example of a transform, of course.)
10558//
10559// While the output is causally related to the input, it's not a
10560// necessarily symmetric or synchronous transformation. For example,
10561// a zlib stream might take multiple plain-text writes(), and then
10562// emit a single compressed chunk some time in the future.
10563//
10564// Here's how this works:
10565//
10566// The Transform stream has all the aspects of the readable and writable
10567// stream classes. When you write(chunk), that calls _write(chunk,cb)
10568// internally, and returns false if there's a lot of pending writes
10569// buffered up. When you call read(), that calls _read(n) until
10570// there's enough pending readable data buffered up.
10571//
10572// In a transform stream, the written data is placed in a buffer. When
10573// _read(n) is called, it transforms the queued up data, calling the
10574// buffered _write cb's as it consumes chunks. If consuming a single
10575// written chunk would result in multiple output chunks, then the first
10576// outputted bit calls the readcb, and subsequent chunks just go into
10577// the read buffer, and will cause it to emit 'readable' if necessary.
10578//
10579// This way, back-pressure is actually determined by the reading side,
10580// since _read has to be called to start processing a new chunk. However,
10581// a pathological inflate type of transform can cause excessive buffering
10582// here. For example, imagine a stream where every byte of input is
10583// interpreted as an integer from 0-255, and then results in that many
10584// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
10585// 1kb of data being output. In this case, you could write a very small
10586// amount of input, and end up with a very large amount of output. In
10587// such a pathological inflating mechanism, there'd be no way to tell
10588// the system to stop doing the transform. A single 4MB write could
10589// cause the system to run out of memory.
10590//
10591// However, even in such a pathological case, only a single written chunk
10592// would be consumed, and then the rest would wait (un-transformed) until
10593// the results of the previous transformed chunk were consumed.
10594
10595module.exports = Transform;
10596
10597var Duplex = require('./_stream_duplex');
10598
10599/*<replacement>*/
10600var util = require('core-util-is');
10601util.inherits = require('inherits');
10602/*</replacement>*/
10603
10604util.inherits(Transform, Duplex);
10605
10606
10607function TransformState(options, stream) {
10608 this.afterTransform = function(er, data) {
10609 return afterTransform(stream, er, data);
10610 };
10611
10612 this.needTransform = false;
10613 this.transforming = false;
10614 this.writecb = null;
10615 this.writechunk = null;
10616}
10617
10618function afterTransform(stream, er, data) {
10619 var ts = stream._transformState;
10620 ts.transforming = false;
10621
10622 var cb = ts.writecb;
10623
10624 if (!cb)
10625 return stream.emit('error', new Error('no writecb in Transform class'));
10626
10627 ts.writechunk = null;
10628 ts.writecb = null;
10629
10630 if (!util.isNullOrUndefined(data))
10631 stream.push(data);
10632
10633 if (cb)
10634 cb(er);
10635
10636 var rs = stream._readableState;
10637 rs.reading = false;
10638 if (rs.needReadable || rs.length < rs.highWaterMark) {
10639 stream._read(rs.highWaterMark);
10640 }
10641}
10642
10643
10644function Transform(options) {
10645 if (!(this instanceof Transform))
10646 return new Transform(options);
10647
10648 Duplex.call(this, options);
10649
10650 this._transformState = new TransformState(options, this);
10651
10652 // when the writable side finishes, then flush out anything remaining.
10653 var stream = this;
10654
10655 // start out asking for a readable event once data is transformed.
10656 this._readableState.needReadable = true;
10657
10658 // we have implemented the _read method, and done the other things
10659 // that Readable wants before the first _read call, so unset the
10660 // sync guard flag.
10661 this._readableState.sync = false;
10662
10663 this.once('prefinish', function() {
10664 if (util.isFunction(this._flush))
10665 this._flush(function(er) {
10666 done(stream, er);
10667 });
10668 else
10669 done(stream);
10670 });
10671}
10672
10673Transform.prototype.push = function(chunk, encoding) {
10674 this._transformState.needTransform = false;
10675 return Duplex.prototype.push.call(this, chunk, encoding);
10676};
10677
10678// This is the part where you do stuff!
10679// override this function in implementation classes.
10680// 'chunk' is an input chunk.
10681//
10682// Call `push(newChunk)` to pass along transformed output
10683// to the readable side. You may call 'push' zero or more times.
10684//
10685// Call `cb(err)` when you are done with this chunk. If you pass
10686// an error, then that'll put the hurt on the whole operation. If you
10687// never call cb(), then you'll never get another chunk.
10688Transform.prototype._transform = function(chunk, encoding, cb) {
10689 throw new Error('not implemented');
10690};
10691
10692Transform.prototype._write = function(chunk, encoding, cb) {
10693 var ts = this._transformState;
10694 ts.writecb = cb;
10695 ts.writechunk = chunk;
10696 ts.writeencoding = encoding;
10697 if (!ts.transforming) {
10698 var rs = this._readableState;
10699 if (ts.needTransform ||
10700 rs.needReadable ||
10701 rs.length < rs.highWaterMark)
10702 this._read(rs.highWaterMark);
10703 }
10704};
10705
10706// Doesn't matter what the args are here.
10707// _transform does all the work.
10708// That we got here means that the readable side wants more data.
10709Transform.prototype._read = function(n) {
10710 var ts = this._transformState;
10711
10712 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
10713 ts.transforming = true;
10714 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
10715 } else {
10716 // mark that we need a transform, so that any data that comes in
10717 // will get processed, now that we've asked for it.
10718 ts.needTransform = true;
10719 }
10720};
10721
10722
10723function done(stream, er) {
10724 if (er)
10725 return stream.emit('error', er);
10726
10727 // if there's nothing in the write buffer, then that means
10728 // that nothing more will ever be provided
10729 var ws = stream._writableState;
10730 var ts = stream._transformState;
10731
10732 if (ws.length)
10733 throw new Error('calling transform done when ws.length != 0');
10734
10735 if (ts.transforming)
10736 throw new Error('calling transform done when still transforming');
10737
10738 return stream.push(null);
10739}
10740
10741},{"./_stream_duplex":16,"core-util-is":21,"inherits":12}],20:[function(require,module,exports){
10742(function (process){
10743// Copyright Joyent, Inc. and other Node contributors.
10744//
10745// Permission is hereby granted, free of charge, to any person obtaining a
10746// copy of this software and associated documentation files (the
10747// "Software"), to deal in the Software without restriction, including
10748// without limitation the rights to use, copy, modify, merge, publish,
10749// distribute, sublicense, and/or sell copies of the Software, and to permit
10750// persons to whom the Software is furnished to do so, subject to the
10751// following conditions:
10752//
10753// The above copyright notice and this permission notice shall be included
10754// in all copies or substantial portions of the Software.
10755//
10756// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
10757// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
10758// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
10759// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
10760// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
10761// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
10762// USE OR OTHER DEALINGS IN THE SOFTWARE.
10763
10764// A bit simpler than readable streams.
10765// Implement an async ._write(chunk, cb), and it'll handle all
10766// the drain event emission and buffering.
10767
10768module.exports = Writable;
10769
10770/*<replacement>*/
10771var Buffer = require('buffer').Buffer;
10772/*</replacement>*/
10773
10774Writable.WritableState = WritableState;
10775
10776
10777/*<replacement>*/
10778var util = require('core-util-is');
10779util.inherits = require('inherits');
10780/*</replacement>*/
10781
10782var Stream = require('stream');
10783
10784util.inherits(Writable, Stream);
10785
10786function WriteReq(chunk, encoding, cb) {
10787 this.chunk = chunk;
10788 this.encoding = encoding;
10789 this.callback = cb;
10790}
10791
10792function WritableState(options, stream) {
10793 var Duplex = require('./_stream_duplex');
10794
10795 options = options || {};
10796
10797 // the point at which write() starts returning false
10798 // Note: 0 is a valid value, means that we always return false if
10799 // the entire buffer is not flushed immediately on write()
10800 var hwm = options.highWaterMark;
10801 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
10802 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
10803
10804 // object stream flag to indicate whether or not this stream
10805 // contains buffers or objects.
10806 this.objectMode = !!options.objectMode;
10807
10808 if (stream instanceof Duplex)
10809 this.objectMode = this.objectMode || !!options.writableObjectMode;
10810
10811 // cast to ints.
10812 this.highWaterMark = ~~this.highWaterMark;
10813
10814 this.needDrain = false;
10815 // at the start of calling end()
10816 this.ending = false;
10817 // when end() has been called, and returned
10818 this.ended = false;
10819 // when 'finish' is emitted
10820 this.finished = false;
10821
10822 // should we decode strings into buffers before passing to _write?
10823 // this is here so that some node-core streams can optimize string
10824 // handling at a lower level.
10825 var noDecode = options.decodeStrings === false;
10826 this.decodeStrings = !noDecode;
10827
10828 // Crypto is kind of old and crusty. Historically, its default string
10829 // encoding is 'binary' so we have to make this configurable.
10830 // Everything else in the universe uses 'utf8', though.
10831 this.defaultEncoding = options.defaultEncoding || 'utf8';
10832
10833 // not an actual buffer we keep track of, but a measurement
10834 // of how much we're waiting to get pushed to some underlying
10835 // socket or file.
10836 this.length = 0;
10837
10838 // a flag to see when we're in the middle of a write.
10839 this.writing = false;
10840
10841 // when true all writes will be buffered until .uncork() call
10842 this.corked = 0;
10843
10844 // a flag to be able to tell if the onwrite cb is called immediately,
10845 // or on a later tick. We set this to true at first, because any
10846 // actions that shouldn't happen until "later" should generally also
10847 // not happen before the first write call.
10848 this.sync = true;
10849
10850 // a flag to know if we're processing previously buffered items, which
10851 // may call the _write() callback in the same tick, so that we don't
10852 // end up in an overlapped onwrite situation.
10853 this.bufferProcessing = false;
10854
10855 // the callback that's passed to _write(chunk,cb)
10856 this.onwrite = function(er) {
10857 onwrite(stream, er);
10858 };
10859
10860 // the callback that the user supplies to write(chunk,encoding,cb)
10861 this.writecb = null;
10862
10863 // the amount that is being written when _write is called.
10864 this.writelen = 0;
10865
10866 this.buffer = [];
10867
10868 // number of pending user-supplied write callbacks
10869 // this must be 0 before 'finish' can be emitted
10870 this.pendingcb = 0;
10871
10872 // emit prefinish if the only thing we're waiting for is _write cbs
10873 // This is relevant for synchronous Transform streams
10874 this.prefinished = false;
10875
10876 // True if the error was already emitted and should not be thrown again
10877 this.errorEmitted = false;
10878}
10879
10880function Writable(options) {
10881 var Duplex = require('./_stream_duplex');
10882
10883 // Writable ctor is applied to Duplexes, though they're not
10884 // instanceof Writable, they're instanceof Readable.
10885 if (!(this instanceof Writable) && !(this instanceof Duplex))
10886 return new Writable(options);
10887
10888 this._writableState = new WritableState(options, this);
10889
10890 // legacy.
10891 this.writable = true;
10892
10893 Stream.call(this);
10894}
10895
10896// Otherwise people can pipe Writable streams, which is just wrong.
10897Writable.prototype.pipe = function() {
10898 this.emit('error', new Error('Cannot pipe. Not readable.'));
10899};
10900
10901
10902function writeAfterEnd(stream, state, cb) {
10903 var er = new Error('write after end');
10904 // TODO: defer error events consistently everywhere, not just the cb
10905 stream.emit('error', er);
10906 process.nextTick(function() {
10907 cb(er);
10908 });
10909}
10910
10911// If we get something that is not a buffer, string, null, or undefined,
10912// and we're not in objectMode, then that's an error.
10913// Otherwise stream chunks are all considered to be of length=1, and the
10914// watermarks determine how many objects to keep in the buffer, rather than
10915// how many bytes or characters.
10916function validChunk(stream, state, chunk, cb) {
10917 var valid = true;
10918 if (!util.isBuffer(chunk) &&
10919 !util.isString(chunk) &&
10920 !util.isNullOrUndefined(chunk) &&
10921 !state.objectMode) {
10922 var er = new TypeError('Invalid non-string/buffer chunk');
10923 stream.emit('error', er);
10924 process.nextTick(function() {
10925 cb(er);
10926 });
10927 valid = false;
10928 }
10929 return valid;
10930}
10931
10932Writable.prototype.write = function(chunk, encoding, cb) {
10933 var state = this._writableState;
10934 var ret = false;
10935
10936 if (util.isFunction(encoding)) {
10937 cb = encoding;
10938 encoding = null;
10939 }
10940
10941 if (util.isBuffer(chunk))
10942 encoding = 'buffer';
10943 else if (!encoding)
10944 encoding = state.defaultEncoding;
10945
10946 if (!util.isFunction(cb))
10947 cb = function() {};
10948
10949 if (state.ended)
10950 writeAfterEnd(this, state, cb);
10951 else if (validChunk(this, state, chunk, cb)) {
10952 state.pendingcb++;
10953 ret = writeOrBuffer(this, state, chunk, encoding, cb);
10954 }
10955
10956 return ret;
10957};
10958
10959Writable.prototype.cork = function() {
10960 var state = this._writableState;
10961
10962 state.corked++;
10963};
10964
10965Writable.prototype.uncork = function() {
10966 var state = this._writableState;
10967
10968 if (state.corked) {
10969 state.corked--;
10970
10971 if (!state.writing &&
10972 !state.corked &&
10973 !state.finished &&
10974 !state.bufferProcessing &&
10975 state.buffer.length)
10976 clearBuffer(this, state);
10977 }
10978};
10979
10980function decodeChunk(state, chunk, encoding) {
10981 if (!state.objectMode &&
10982 state.decodeStrings !== false &&
10983 util.isString(chunk)) {
10984 chunk = new Buffer(chunk, encoding);
10985 }
10986 return chunk;
10987}
10988
10989// if we're already writing something, then just put this
10990// in the queue, and wait our turn. Otherwise, call _write
10991// If we return false, then we need a drain event, so set that flag.
10992function writeOrBuffer(stream, state, chunk, encoding, cb) {
10993 chunk = decodeChunk(state, chunk, encoding);
10994 if (util.isBuffer(chunk))
10995 encoding = 'buffer';
10996 var len = state.objectMode ? 1 : chunk.length;
10997
10998 state.length += len;
10999
11000 var ret = state.length < state.highWaterMark;
11001 // we must ensure that previous needDrain will not be reset to false.
11002 if (!ret)
11003 state.needDrain = true;
11004
11005 if (state.writing || state.corked)
11006 state.buffer.push(new WriteReq(chunk, encoding, cb));
11007 else
11008 doWrite(stream, state, false, len, chunk, encoding, cb);
11009
11010 return ret;
11011}
11012
11013function doWrite(stream, state, writev, len, chunk, encoding, cb) {
11014 state.writelen = len;
11015 state.writecb = cb;
11016 state.writing = true;
11017 state.sync = true;
11018 if (writev)
11019 stream._writev(chunk, state.onwrite);
11020 else
11021 stream._write(chunk, encoding, state.onwrite);
11022 state.sync = false;
11023}
11024
11025function onwriteError(stream, state, sync, er, cb) {
11026 if (sync)
11027 process.nextTick(function() {
11028 state.pendingcb--;
11029 cb(er);
11030 });
11031 else {
11032 state.pendingcb--;
11033 cb(er);
11034 }
11035
11036 stream._writableState.errorEmitted = true;
11037 stream.emit('error', er);
11038}
11039
11040function onwriteStateUpdate(state) {
11041 state.writing = false;
11042 state.writecb = null;
11043 state.length -= state.writelen;
11044 state.writelen = 0;
11045}
11046
11047function onwrite(stream, er) {
11048 var state = stream._writableState;
11049 var sync = state.sync;
11050 var cb = state.writecb;
11051
11052 onwriteStateUpdate(state);
11053
11054 if (er)
11055 onwriteError(stream, state, sync, er, cb);
11056 else {
11057 // Check if we're actually ready to finish, but don't emit yet
11058 var finished = needFinish(stream, state);
11059
11060 if (!finished &&
11061 !state.corked &&
11062 !state.bufferProcessing &&
11063 state.buffer.length) {
11064 clearBuffer(stream, state);
11065 }
11066
11067 if (sync) {
11068 process.nextTick(function() {
11069 afterWrite(stream, state, finished, cb);
11070 });
11071 } else {
11072 afterWrite(stream, state, finished, cb);
11073 }
11074 }
11075}
11076
11077function afterWrite(stream, state, finished, cb) {
11078 if (!finished)
11079 onwriteDrain(stream, state);
11080 state.pendingcb--;
11081 cb();
11082 finishMaybe(stream, state);
11083}
11084
11085// Must force callback to be called on nextTick, so that we don't
11086// emit 'drain' before the write() consumer gets the 'false' return
11087// value, and has a chance to attach a 'drain' listener.
11088function onwriteDrain(stream, state) {
11089 if (state.length === 0 && state.needDrain) {
11090 state.needDrain = false;
11091 stream.emit('drain');
11092 }
11093}
11094
11095
11096// if there's something in the buffer waiting, then process it
11097function clearBuffer(stream, state) {
11098 state.bufferProcessing = true;
11099
11100 if (stream._writev && state.buffer.length > 1) {
11101 // Fast case, write everything using _writev()
11102 var cbs = [];
11103 for (var c = 0; c < state.buffer.length; c++)
11104 cbs.push(state.buffer[c].callback);
11105
11106 // count the one we are adding, as well.
11107 // TODO(isaacs) clean this up
11108 state.pendingcb++;
11109 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
11110 for (var i = 0; i < cbs.length; i++) {
11111 state.pendingcb--;
11112 cbs[i](err);
11113 }
11114 });
11115
11116 // Clear buffer
11117 state.buffer = [];
11118 } else {
11119 // Slow case, write chunks one-by-one
11120 for (var c = 0; c < state.buffer.length; c++) {
11121 var entry = state.buffer[c];
11122 var chunk = entry.chunk;
11123 var encoding = entry.encoding;
11124 var cb = entry.callback;
11125 var len = state.objectMode ? 1 : chunk.length;
11126
11127 doWrite(stream, state, false, len, chunk, encoding, cb);
11128
11129 // if we didn't call the onwrite immediately, then
11130 // it means that we need to wait until it does.
11131 // also, that means that the chunk and cb are currently
11132 // being processed, so move the buffer counter past them.
11133 if (state.writing) {
11134 c++;
11135 break;
11136 }
11137 }
11138
11139 if (c < state.buffer.length)
11140 state.buffer = state.buffer.slice(c);
11141 else
11142 state.buffer.length = 0;
11143 }
11144
11145 state.bufferProcessing = false;
11146}
11147
11148Writable.prototype._write = function(chunk, encoding, cb) {
11149 cb(new Error('not implemented'));
11150
11151};
11152
11153Writable.prototype._writev = null;
11154
11155Writable.prototype.end = function(chunk, encoding, cb) {
11156 var state = this._writableState;
11157
11158 if (util.isFunction(chunk)) {
11159 cb = chunk;
11160 chunk = null;
11161 encoding = null;
11162 } else if (util.isFunction(encoding)) {
11163 cb = encoding;
11164 encoding = null;
11165 }
11166
11167 if (!util.isNullOrUndefined(chunk))
11168 this.write(chunk, encoding);
11169
11170 // .end() fully uncorks
11171 if (state.corked) {
11172 state.corked = 1;
11173 this.uncork();
11174 }
11175
11176 // ignore unnecessary end() calls.
11177 if (!state.ending && !state.finished)
11178 endWritable(this, state, cb);
11179};
11180
11181
11182function needFinish(stream, state) {
11183 return (state.ending &&
11184 state.length === 0 &&
11185 !state.finished &&
11186 !state.writing);
11187}
11188
11189function prefinish(stream, state) {
11190 if (!state.prefinished) {
11191 state.prefinished = true;
11192 stream.emit('prefinish');
11193 }
11194}
11195
11196function finishMaybe(stream, state) {
11197 var need = needFinish(stream, state);
11198 if (need) {
11199 if (state.pendingcb === 0) {
11200 prefinish(stream, state);
11201 state.finished = true;
11202 stream.emit('finish');
11203 } else
11204 prefinish(stream, state);
11205 }
11206 return need;
11207}
11208
11209function endWritable(stream, state, cb) {
11210 state.ending = true;
11211 finishMaybe(stream, state);
11212 if (cb) {
11213 if (state.finished)
11214 process.nextTick(cb);
11215 else
11216 stream.once('finish', cb);
11217 }
11218 state.ended = true;
11219}
11220
11221}).call(this,require('_process'))
11222},{"./_stream_duplex":16,"_process":14,"buffer":7,"core-util-is":21,"inherits":12,"stream":26}],21:[function(require,module,exports){
11223(function (Buffer){
11224// Copyright Joyent, Inc. and other Node contributors.
11225//
11226// Permission is hereby granted, free of charge, to any person obtaining a
11227// copy of this software and associated documentation files (the
11228// "Software"), to deal in the Software without restriction, including
11229// without limitation the rights to use, copy, modify, merge, publish,
11230// distribute, sublicense, and/or sell copies of the Software, and to permit
11231// persons to whom the Software is furnished to do so, subject to the
11232// following conditions:
11233//
11234// The above copyright notice and this permission notice shall be included
11235// in all copies or substantial portions of the Software.
11236//
11237// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11238// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
11239// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
11240// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
11241// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
11242// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
11243// USE OR OTHER DEALINGS IN THE SOFTWARE.
11244
11245// NOTE: These type checking functions intentionally don't use `instanceof`
11246// because it is fragile and can be easily faked with `Object.create()`.
11247function isArray(ar) {
11248 return Array.isArray(ar);
11249}
11250exports.isArray = isArray;
11251
11252function isBoolean(arg) {
11253 return typeof arg === 'boolean';
11254}
11255exports.isBoolean = isBoolean;
11256
11257function isNull(arg) {
11258 return arg === null;
11259}
11260exports.isNull = isNull;
11261
11262function isNullOrUndefined(arg) {
11263 return arg == null;
11264}
11265exports.isNullOrUndefined = isNullOrUndefined;
11266
11267function isNumber(arg) {
11268 return typeof arg === 'number';
11269}
11270exports.isNumber = isNumber;
11271
11272function isString(arg) {
11273 return typeof arg === 'string';
11274}
11275exports.isString = isString;
11276
11277function isSymbol(arg) {
11278 return typeof arg === 'symbol';
11279}
11280exports.isSymbol = isSymbol;
11281
11282function isUndefined(arg) {
11283 return arg === void 0;
11284}
11285exports.isUndefined = isUndefined;
11286
11287function isRegExp(re) {
11288 return isObject(re) && objectToString(re) === '[object RegExp]';
11289}
11290exports.isRegExp = isRegExp;
11291
11292function isObject(arg) {
11293 return typeof arg === 'object' && arg !== null;
11294}
11295exports.isObject = isObject;
11296
11297function isDate(d) {
11298 return isObject(d) && objectToString(d) === '[object Date]';
11299}
11300exports.isDate = isDate;
11301
11302function isError(e) {
11303 return isObject(e) &&
11304 (objectToString(e) === '[object Error]' || e instanceof Error);
11305}
11306exports.isError = isError;
11307
11308function isFunction(arg) {
11309 return typeof arg === 'function';
11310}
11311exports.isFunction = isFunction;
11312
11313function isPrimitive(arg) {
11314 return arg === null ||
11315 typeof arg === 'boolean' ||
11316 typeof arg === 'number' ||
11317 typeof arg === 'string' ||
11318 typeof arg === 'symbol' || // ES6 symbol
11319 typeof arg === 'undefined';
11320}
11321exports.isPrimitive = isPrimitive;
11322
11323function isBuffer(arg) {
11324 return Buffer.isBuffer(arg);
11325}
11326exports.isBuffer = isBuffer;
11327
11328function objectToString(o) {
11329 return Object.prototype.toString.call(o);
11330}
11331}).call(this,require("buffer").Buffer)
11332},{"buffer":7}],22:[function(require,module,exports){
11333module.exports = require("./lib/_stream_passthrough.js")
11334
11335},{"./lib/_stream_passthrough.js":17}],23:[function(require,module,exports){
11336exports = module.exports = require('./lib/_stream_readable.js');
11337exports.Stream = require('stream');
11338exports.Readable = exports;
11339exports.Writable = require('./lib/_stream_writable.js');
11340exports.Duplex = require('./lib/_stream_duplex.js');
11341exports.Transform = require('./lib/_stream_transform.js');
11342exports.PassThrough = require('./lib/_stream_passthrough.js');
11343
11344},{"./lib/_stream_duplex.js":16,"./lib/_stream_passthrough.js":17,"./lib/_stream_readable.js":18,"./lib/_stream_transform.js":19,"./lib/_stream_writable.js":20,"stream":26}],24:[function(require,module,exports){
11345module.exports = require("./lib/_stream_transform.js")
11346
11347},{"./lib/_stream_transform.js":19}],25:[function(require,module,exports){
11348module.exports = require("./lib/_stream_writable.js")
11349
11350},{"./lib/_stream_writable.js":20}],26:[function(require,module,exports){
11351// Copyright Joyent, Inc. and other Node contributors.
11352//
11353// Permission is hereby granted, free of charge, to any person obtaining a
11354// copy of this software and associated documentation files (the
11355// "Software"), to deal in the Software without restriction, including
11356// without limitation the rights to use, copy, modify, merge, publish,
11357// distribute, sublicense, and/or sell copies of the Software, and to permit
11358// persons to whom the Software is furnished to do so, subject to the
11359// following conditions:
11360//
11361// The above copyright notice and this permission notice shall be included
11362// in all copies or substantial portions of the Software.
11363//
11364// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11365// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
11366// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
11367// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
11368// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
11369// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
11370// USE OR OTHER DEALINGS IN THE SOFTWARE.
11371
11372module.exports = Stream;
11373
11374var EE = require('events').EventEmitter;
11375var inherits = require('inherits');
11376
11377inherits(Stream, EE);
11378Stream.Readable = require('readable-stream/readable.js');
11379Stream.Writable = require('readable-stream/writable.js');
11380Stream.Duplex = require('readable-stream/duplex.js');
11381Stream.Transform = require('readable-stream/transform.js');
11382Stream.PassThrough = require('readable-stream/passthrough.js');
11383
11384// Backwards-compat with node 0.4.x
11385Stream.Stream = Stream;
11386
11387
11388
11389// old-style streams. Note that the pipe method (the only relevant
11390// part of this class) is overridden in the Readable class.
11391
11392function Stream() {
11393 EE.call(this);
11394}
11395
11396Stream.prototype.pipe = function(dest, options) {
11397 var source = this;
11398
11399 function ondata(chunk) {
11400 if (dest.writable) {
11401 if (false === dest.write(chunk) && source.pause) {
11402 source.pause();
11403 }
11404 }
11405 }
11406
11407 source.on('data', ondata);
11408
11409 function ondrain() {
11410 if (source.readable && source.resume) {
11411 source.resume();
11412 }
11413 }
11414
11415 dest.on('drain', ondrain);
11416
11417 // If the 'end' option is not supplied, dest.end() will be called when
11418 // source gets the 'end' or 'close' events. Only dest.end() once.
11419 if (!dest._isStdio && (!options || options.end !== false)) {
11420 source.on('end', onend);
11421 source.on('close', onclose);
11422 }
11423
11424 var didOnEnd = false;
11425 function onend() {
11426 if (didOnEnd) return;
11427 didOnEnd = true;
11428
11429 dest.end();
11430 }
11431
11432
11433 function onclose() {
11434 if (didOnEnd) return;
11435 didOnEnd = true;
11436
11437 if (typeof dest.destroy === 'function') dest.destroy();
11438 }
11439
11440 // don't leave dangling pipes when there are errors.
11441 function onerror(er) {
11442 cleanup();
11443 if (EE.listenerCount(this, 'error') === 0) {
11444 throw er; // Unhandled stream error in pipe.
11445 }
11446 }
11447
11448 source.on('error', onerror);
11449 dest.on('error', onerror);
11450
11451 // remove all the event listeners that were added.
11452 function cleanup() {
11453 source.removeListener('data', ondata);
11454 dest.removeListener('drain', ondrain);
11455
11456 source.removeListener('end', onend);
11457 source.removeListener('close', onclose);
11458
11459 source.removeListener('error', onerror);
11460 dest.removeListener('error', onerror);
11461
11462 source.removeListener('end', cleanup);
11463 source.removeListener('close', cleanup);
11464
11465 dest.removeListener('close', cleanup);
11466 }
11467
11468 source.on('end', cleanup);
11469 source.on('close', cleanup);
11470
11471 dest.on('close', cleanup);
11472
11473 dest.emit('pipe', source);
11474
11475 // Allow for unix-like usage: A.pipe(B).pipe(C)
11476 return dest;
11477};
11478
11479},{"events":11,"inherits":12,"readable-stream/duplex.js":15,"readable-stream/passthrough.js":22,"readable-stream/readable.js":23,"readable-stream/transform.js":24,"readable-stream/writable.js":25}],27:[function(require,module,exports){
11480// Copyright Joyent, Inc. and other Node contributors.
11481//
11482// Permission is hereby granted, free of charge, to any person obtaining a
11483// copy of this software and associated documentation files (the
11484// "Software"), to deal in the Software without restriction, including
11485// without limitation the rights to use, copy, modify, merge, publish,
11486// distribute, sublicense, and/or sell copies of the Software, and to permit
11487// persons to whom the Software is furnished to do so, subject to the
11488// following conditions:
11489//
11490// The above copyright notice and this permission notice shall be included
11491// in all copies or substantial portions of the Software.
11492//
11493// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11494// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
11495// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
11496// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
11497// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
11498// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
11499// USE OR OTHER DEALINGS IN THE SOFTWARE.
11500
11501var Buffer = require('buffer').Buffer;
11502
11503var isBufferEncoding = Buffer.isEncoding
11504 || function(encoding) {
11505 switch (encoding && encoding.toLowerCase()) {
11506 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;
11507 default: return false;
11508 }
11509 }
11510
11511
11512function assertEncoding(encoding) {
11513 if (encoding && !isBufferEncoding(encoding)) {
11514 throw new Error('Unknown encoding: ' + encoding);
11515 }
11516}
11517
11518// StringDecoder provides an interface for efficiently splitting a series of
11519// buffers into a series of JS strings without breaking apart multi-byte
11520// characters. CESU-8 is handled as part of the UTF-8 encoding.
11521//
11522// @TODO Handling all encodings inside a single object makes it very difficult
11523// to reason about this code, so it should be split up in the future.
11524// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
11525// points as used by CESU-8.
11526var StringDecoder = exports.StringDecoder = function(encoding) {
11527 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
11528 assertEncoding(encoding);
11529 switch (this.encoding) {
11530 case 'utf8':
11531 // CESU-8 represents each of Surrogate Pair by 3-bytes
11532 this.surrogateSize = 3;
11533 break;
11534 case 'ucs2':
11535 case 'utf16le':
11536 // UTF-16 represents each of Surrogate Pair by 2-bytes
11537 this.surrogateSize = 2;
11538 this.detectIncompleteChar = utf16DetectIncompleteChar;
11539 break;
11540 case 'base64':
11541 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
11542 this.surrogateSize = 3;
11543 this.detectIncompleteChar = base64DetectIncompleteChar;
11544 break;
11545 default:
11546 this.write = passThroughWrite;
11547 return;
11548 }
11549
11550 // Enough space to store all bytes of a single character. UTF-8 needs 4
11551 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
11552 this.charBuffer = new Buffer(6);
11553 // Number of bytes received for the current incomplete multi-byte character.
11554 this.charReceived = 0;
11555 // Number of bytes expected for the current incomplete multi-byte character.
11556 this.charLength = 0;
11557};
11558
11559
11560// write decodes the given buffer and returns it as JS string that is
11561// guaranteed to not contain any partial multi-byte characters. Any partial
11562// character found at the end of the buffer is buffered up, and will be
11563// returned when calling write again with the remaining bytes.
11564//
11565// Note: Converting a Buffer containing an orphan surrogate to a String
11566// currently works, but converting a String to a Buffer (via `new Buffer`, or
11567// Buffer#write) will replace incomplete surrogates with the unicode
11568// replacement character. See https://codereview.chromium.org/121173009/ .
11569StringDecoder.prototype.write = function(buffer) {
11570 var charStr = '';
11571 // if our last write ended with an incomplete multibyte character
11572 while (this.charLength) {
11573 // determine how many remaining bytes this buffer has to offer for this char
11574 var available = (buffer.length >= this.charLength - this.charReceived) ?
11575 this.charLength - this.charReceived :
11576 buffer.length;
11577
11578 // add the new bytes to the char buffer
11579 buffer.copy(this.charBuffer, this.charReceived, 0, available);
11580 this.charReceived += available;
11581
11582 if (this.charReceived < this.charLength) {
11583 // still not enough chars in this buffer? wait for more ...
11584 return '';
11585 }
11586
11587 // remove bytes belonging to the current character from the buffer
11588 buffer = buffer.slice(available, buffer.length);
11589
11590 // get the character that was split
11591 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
11592
11593 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
11594 var charCode = charStr.charCodeAt(charStr.length - 1);
11595 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
11596 this.charLength += this.surrogateSize;
11597 charStr = '';
11598 continue;
11599 }
11600 this.charReceived = this.charLength = 0;
11601
11602 // if there are no more bytes in this buffer, just emit our char
11603 if (buffer.length === 0) {
11604 return charStr;
11605 }
11606 break;
11607 }
11608
11609 // determine and set charLength / charReceived
11610 this.detectIncompleteChar(buffer);
11611
11612 var end = buffer.length;
11613 if (this.charLength) {
11614 // buffer the incomplete character bytes we got
11615 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
11616 end -= this.charReceived;
11617 }
11618
11619 charStr += buffer.toString(this.encoding, 0, end);
11620
11621 var end = charStr.length - 1;
11622 var charCode = charStr.charCodeAt(end);
11623 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
11624 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
11625 var size = this.surrogateSize;
11626 this.charLength += size;
11627 this.charReceived += size;
11628 this.charBuffer.copy(this.charBuffer, size, 0, size);
11629 buffer.copy(this.charBuffer, 0, 0, size);
11630 return charStr.substring(0, end);
11631 }
11632
11633 // or just emit the charStr
11634 return charStr;
11635};
11636
11637// detectIncompleteChar determines if there is an incomplete UTF-8 character at
11638// the end of the given buffer. If so, it sets this.charLength to the byte
11639// length that character, and sets this.charReceived to the number of bytes
11640// that are available for this character.
11641StringDecoder.prototype.detectIncompleteChar = function(buffer) {
11642 // determine how many bytes we have to check at the end of this buffer
11643 var i = (buffer.length >= 3) ? 3 : buffer.length;
11644
11645 // Figure out if one of the last i bytes of our buffer announces an
11646 // incomplete char.
11647 for (; i > 0; i--) {
11648 var c = buffer[buffer.length - i];
11649
11650 // See http://en.wikipedia.org/wiki/UTF-8#Description
11651
11652 // 110XXXXX
11653 if (i == 1 && c >> 5 == 0x06) {
11654 this.charLength = 2;
11655 break;
11656 }
11657
11658 // 1110XXXX
11659 if (i <= 2 && c >> 4 == 0x0E) {
11660 this.charLength = 3;
11661 break;
11662 }
11663
11664 // 11110XXX
11665 if (i <= 3 && c >> 3 == 0x1E) {
11666 this.charLength = 4;
11667 break;
11668 }
11669 }
11670 this.charReceived = i;
11671};
11672
11673StringDecoder.prototype.end = function(buffer) {
11674 var res = '';
11675 if (buffer && buffer.length)
11676 res = this.write(buffer);
11677
11678 if (this.charReceived) {
11679 var cr = this.charReceived;
11680 var buf = this.charBuffer;
11681 var enc = this.encoding;
11682 res += buf.slice(0, cr).toString(enc);
11683 }
11684
11685 return res;
11686};
11687
11688function passThroughWrite(buffer) {
11689 return buffer.toString(this.encoding);
11690}
11691
11692function utf16DetectIncompleteChar(buffer) {
11693 this.charReceived = buffer.length % 2;
11694 this.charLength = this.charReceived ? 2 : 0;
11695}
11696
11697function base64DetectIncompleteChar(buffer) {
11698 this.charReceived = buffer.length % 3;
11699 this.charLength = this.charReceived ? 3 : 0;
11700}
11701
11702},{"buffer":7}],28:[function(require,module,exports){
11703module.exports = function isBuffer(arg) {
11704 return arg && typeof arg === 'object'
11705 && typeof arg.copy === 'function'
11706 && typeof arg.fill === 'function'
11707 && typeof arg.readUInt8 === 'function';
11708}
11709},{}],29:[function(require,module,exports){
11710(function (process,global){
11711// Copyright Joyent, Inc. and other Node contributors.
11712//
11713// Permission is hereby granted, free of charge, to any person obtaining a
11714// copy of this software and associated documentation files (the
11715// "Software"), to deal in the Software without restriction, including
11716// without limitation the rights to use, copy, modify, merge, publish,
11717// distribute, sublicense, and/or sell copies of the Software, and to permit
11718// persons to whom the Software is furnished to do so, subject to the
11719// following conditions:
11720//
11721// The above copyright notice and this permission notice shall be included
11722// in all copies or substantial portions of the Software.
11723//
11724// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11725// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
11726// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
11727// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
11728// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
11729// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
11730// USE OR OTHER DEALINGS IN THE SOFTWARE.
11731
11732var formatRegExp = /%[sdj%]/g;
11733exports.format = function(f) {
11734 if (!isString(f)) {
11735 var objects = [];
11736 for (var i = 0; i < arguments.length; i++) {
11737 objects.push(inspect(arguments[i]));
11738 }
11739 return objects.join(' ');
11740 }
11741
11742 var i = 1;
11743 var args = arguments;
11744 var len = args.length;
11745 var str = String(f).replace(formatRegExp, function(x) {
11746 if (x === '%%') return '%';
11747 if (i >= len) return x;
11748 switch (x) {
11749 case '%s': return String(args[i++]);
11750 case '%d': return Number(args[i++]);
11751 case '%j':
11752 try {
11753 return JSON.stringify(args[i++]);
11754 } catch (_) {
11755 return '[Circular]';
11756 }
11757 default:
11758 return x;
11759 }
11760 });
11761 for (var x = args[i]; i < len; x = args[++i]) {
11762 if (isNull(x) || !isObject(x)) {
11763 str += ' ' + x;
11764 } else {
11765 str += ' ' + inspect(x);
11766 }
11767 }
11768 return str;
11769};
11770
11771
11772// Mark that a method should not be used.
11773// Returns a modified function which warns once by default.
11774// If --no-deprecation is set, then it is a no-op.
11775exports.deprecate = function(fn, msg) {
11776 // Allow for deprecating things in the process of starting up.
11777 if (isUndefined(global.process)) {
11778 return function() {
11779 return exports.deprecate(fn, msg).apply(this, arguments);
11780 };
11781 }
11782
11783 if (process.noDeprecation === true) {
11784 return fn;
11785 }
11786
11787 var warned = false;
11788 function deprecated() {
11789 if (!warned) {
11790 if (process.throwDeprecation) {
11791 throw new Error(msg);
11792 } else if (process.traceDeprecation) {
11793 console.trace(msg);
11794 } else {
11795 console.error(msg);
11796 }
11797 warned = true;
11798 }
11799 return fn.apply(this, arguments);
11800 }
11801
11802 return deprecated;
11803};
11804
11805
11806var debugs = {};
11807var debugEnviron;
11808exports.debuglog = function(set) {
11809 if (isUndefined(debugEnviron))
11810 debugEnviron = process.env.NODE_DEBUG || '';
11811 set = set.toUpperCase();
11812 if (!debugs[set]) {
11813 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
11814 var pid = process.pid;
11815 debugs[set] = function() {
11816 var msg = exports.format.apply(exports, arguments);
11817 console.error('%s %d: %s', set, pid, msg);
11818 };
11819 } else {
11820 debugs[set] = function() {};
11821 }
11822 }
11823 return debugs[set];
11824};
11825
11826
11827/**
11828 * Echos the value of a value. Trys to print the value out
11829 * in the best way possible given the different types.
11830 *
11831 * @param {Object} obj The object to print out.
11832 * @param {Object} opts Optional options object that alters the output.
11833 */
11834/* legacy: obj, showHidden, depth, colors*/
11835function inspect(obj, opts) {
11836 // default options
11837 var ctx = {
11838 seen: [],
11839 stylize: stylizeNoColor
11840 };
11841 // legacy...
11842 if (arguments.length >= 3) ctx.depth = arguments[2];
11843 if (arguments.length >= 4) ctx.colors = arguments[3];
11844 if (isBoolean(opts)) {
11845 // legacy...
11846 ctx.showHidden = opts;
11847 } else if (opts) {
11848 // got an "options" object
11849 exports._extend(ctx, opts);
11850 }
11851 // set default options
11852 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
11853 if (isUndefined(ctx.depth)) ctx.depth = 2;
11854 if (isUndefined(ctx.colors)) ctx.colors = false;
11855 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
11856 if (ctx.colors) ctx.stylize = stylizeWithColor;
11857 return formatValue(ctx, obj, ctx.depth);
11858}
11859exports.inspect = inspect;
11860
11861
11862// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
11863inspect.colors = {
11864 'bold' : [1, 22],
11865 'italic' : [3, 23],
11866 'underline' : [4, 24],
11867 'inverse' : [7, 27],
11868 'white' : [37, 39],
11869 'grey' : [90, 39],
11870 'black' : [30, 39],
11871 'blue' : [34, 39],
11872 'cyan' : [36, 39],
11873 'green' : [32, 39],
11874 'magenta' : [35, 39],
11875 'red' : [31, 39],
11876 'yellow' : [33, 39]
11877};
11878
11879// Don't use 'blue' not visible on cmd.exe
11880inspect.styles = {
11881 'special': 'cyan',
11882 'number': 'yellow',
11883 'boolean': 'yellow',
11884 'undefined': 'grey',
11885 'null': 'bold',
11886 'string': 'green',
11887 'date': 'magenta',
11888 // "name": intentionally not styling
11889 'regexp': 'red'
11890};
11891
11892
11893function stylizeWithColor(str, styleType) {
11894 var style = inspect.styles[styleType];
11895
11896 if (style) {
11897 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
11898 '\u001b[' + inspect.colors[style][1] + 'm';
11899 } else {
11900 return str;
11901 }
11902}
11903
11904
11905function stylizeNoColor(str, styleType) {
11906 return str;
11907}
11908
11909
11910function arrayToHash(array) {
11911 var hash = {};
11912
11913 array.forEach(function(val, idx) {
11914 hash[val] = true;
11915 });
11916
11917 return hash;
11918}
11919
11920
11921function formatValue(ctx, value, recurseTimes) {
11922 // Provide a hook for user-specified inspect functions.
11923 // Check that value is an object with an inspect function on it
11924 if (ctx.customInspect &&
11925 value &&
11926 isFunction(value.inspect) &&
11927 // Filter out the util module, it's inspect function is special
11928 value.inspect !== exports.inspect &&
11929 // Also filter out any prototype objects using the circular check.
11930 !(value.constructor && value.constructor.prototype === value)) {
11931 var ret = value.inspect(recurseTimes, ctx);
11932 if (!isString(ret)) {
11933 ret = formatValue(ctx, ret, recurseTimes);
11934 }
11935 return ret;
11936 }
11937
11938 // Primitive types cannot have properties
11939 var primitive = formatPrimitive(ctx, value);
11940 if (primitive) {
11941 return primitive;
11942 }
11943
11944 // Look up the keys of the object.
11945 var keys = Object.keys(value);
11946 var visibleKeys = arrayToHash(keys);
11947
11948 if (ctx.showHidden) {
11949 keys = Object.getOwnPropertyNames(value);
11950 }
11951
11952 // IE doesn't make error fields non-enumerable
11953 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
11954 if (isError(value)
11955 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
11956 return formatError(value);
11957 }
11958
11959 // Some type of object without properties can be shortcutted.
11960 if (keys.length === 0) {
11961 if (isFunction(value)) {
11962 var name = value.name ? ': ' + value.name : '';
11963 return ctx.stylize('[Function' + name + ']', 'special');
11964 }
11965 if (isRegExp(value)) {
11966 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
11967 }
11968 if (isDate(value)) {
11969 return ctx.stylize(Date.prototype.toString.call(value), 'date');
11970 }
11971 if (isError(value)) {
11972 return formatError(value);
11973 }
11974 }
11975
11976 var base = '', array = false, braces = ['{', '}'];
11977
11978 // Make Array say that they are Array
11979 if (isArray(value)) {
11980 array = true;
11981 braces = ['[', ']'];
11982 }
11983
11984 // Make functions say that they are functions
11985 if (isFunction(value)) {
11986 var n = value.name ? ': ' + value.name : '';
11987 base = ' [Function' + n + ']';
11988 }
11989
11990 // Make RegExps say that they are RegExps
11991 if (isRegExp(value)) {
11992 base = ' ' + RegExp.prototype.toString.call(value);
11993 }
11994
11995 // Make dates with properties first say the date
11996 if (isDate(value)) {
11997 base = ' ' + Date.prototype.toUTCString.call(value);
11998 }
11999
12000 // Make error with message first say the error
12001 if (isError(value)) {
12002 base = ' ' + formatError(value);
12003 }
12004
12005 if (keys.length === 0 && (!array || value.length == 0)) {
12006 return braces[0] + base + braces[1];
12007 }
12008
12009 if (recurseTimes < 0) {
12010 if (isRegExp(value)) {
12011 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
12012 } else {
12013 return ctx.stylize('[Object]', 'special');
12014 }
12015 }
12016
12017 ctx.seen.push(value);
12018
12019 var output;
12020 if (array) {
12021 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
12022 } else {
12023 output = keys.map(function(key) {
12024 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
12025 });
12026 }
12027
12028 ctx.seen.pop();
12029
12030 return reduceToSingleString(output, base, braces);
12031}
12032
12033
12034function formatPrimitive(ctx, value) {
12035 if (isUndefined(value))
12036 return ctx.stylize('undefined', 'undefined');
12037 if (isString(value)) {
12038 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
12039 .replace(/'/g, "\\'")
12040 .replace(/\\"/g, '"') + '\'';
12041 return ctx.stylize(simple, 'string');
12042 }
12043 if (isNumber(value))
12044 return ctx.stylize('' + value, 'number');
12045 if (isBoolean(value))
12046 return ctx.stylize('' + value, 'boolean');
12047 // For some reason typeof null is "object", so special case here.
12048 if (isNull(value))
12049 return ctx.stylize('null', 'null');
12050}
12051
12052
12053function formatError(value) {
12054 return '[' + Error.prototype.toString.call(value) + ']';
12055}
12056
12057
12058function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
12059 var output = [];
12060 for (var i = 0, l = value.length; i < l; ++i) {
12061 if (hasOwnProperty(value, String(i))) {
12062 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
12063 String(i), true));
12064 } else {
12065 output.push('');
12066 }
12067 }
12068 keys.forEach(function(key) {
12069 if (!key.match(/^\d+$/)) {
12070 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
12071 key, true));
12072 }
12073 });
12074 return output;
12075}
12076
12077
12078function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
12079 var name, str, desc;
12080 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
12081 if (desc.get) {
12082 if (desc.set) {
12083 str = ctx.stylize('[Getter/Setter]', 'special');
12084 } else {
12085 str = ctx.stylize('[Getter]', 'special');
12086 }
12087 } else {
12088 if (desc.set) {
12089 str = ctx.stylize('[Setter]', 'special');
12090 }
12091 }
12092 if (!hasOwnProperty(visibleKeys, key)) {
12093 name = '[' + key + ']';
12094 }
12095 if (!str) {
12096 if (ctx.seen.indexOf(desc.value) < 0) {
12097 if (isNull(recurseTimes)) {
12098 str = formatValue(ctx, desc.value, null);
12099 } else {
12100 str = formatValue(ctx, desc.value, recurseTimes - 1);
12101 }
12102 if (str.indexOf('\n') > -1) {
12103 if (array) {
12104 str = str.split('\n').map(function(line) {
12105 return ' ' + line;
12106 }).join('\n').substr(2);
12107 } else {
12108 str = '\n' + str.split('\n').map(function(line) {
12109 return ' ' + line;
12110 }).join('\n');
12111 }
12112 }
12113 } else {
12114 str = ctx.stylize('[Circular]', 'special');
12115 }
12116 }
12117 if (isUndefined(name)) {
12118 if (array && key.match(/^\d+$/)) {
12119 return str;
12120 }
12121 name = JSON.stringify('' + key);
12122 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
12123 name = name.substr(1, name.length - 2);
12124 name = ctx.stylize(name, 'name');
12125 } else {
12126 name = name.replace(/'/g, "\\'")
12127 .replace(/\\"/g, '"')
12128 .replace(/(^"|"$)/g, "'");
12129 name = ctx.stylize(name, 'string');
12130 }
12131 }
12132
12133 return name + ': ' + str;
12134}
12135
12136
12137function reduceToSingleString(output, base, braces) {
12138 var numLinesEst = 0;
12139 var length = output.reduce(function(prev, cur) {
12140 numLinesEst++;
12141 if (cur.indexOf('\n') >= 0) numLinesEst++;
12142 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
12143 }, 0);
12144
12145 if (length > 60) {
12146 return braces[0] +
12147 (base === '' ? '' : base + '\n ') +
12148 ' ' +
12149 output.join(',\n ') +
12150 ' ' +
12151 braces[1];
12152 }
12153
12154 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
12155}
12156
12157
12158// NOTE: These type checking functions intentionally don't use `instanceof`
12159// because it is fragile and can be easily faked with `Object.create()`.
12160function isArray(ar) {
12161 return Array.isArray(ar);
12162}
12163exports.isArray = isArray;
12164
12165function isBoolean(arg) {
12166 return typeof arg === 'boolean';
12167}
12168exports.isBoolean = isBoolean;
12169
12170function isNull(arg) {
12171 return arg === null;
12172}
12173exports.isNull = isNull;
12174
12175function isNullOrUndefined(arg) {
12176 return arg == null;
12177}
12178exports.isNullOrUndefined = isNullOrUndefined;
12179
12180function isNumber(arg) {
12181 return typeof arg === 'number';
12182}
12183exports.isNumber = isNumber;
12184
12185function isString(arg) {
12186 return typeof arg === 'string';
12187}
12188exports.isString = isString;
12189
12190function isSymbol(arg) {
12191 return typeof arg === 'symbol';
12192}
12193exports.isSymbol = isSymbol;
12194
12195function isUndefined(arg) {
12196 return arg === void 0;
12197}
12198exports.isUndefined = isUndefined;
12199
12200function isRegExp(re) {
12201 return isObject(re) && objectToString(re) === '[object RegExp]';
12202}
12203exports.isRegExp = isRegExp;
12204
12205function isObject(arg) {
12206 return typeof arg === 'object' && arg !== null;
12207}
12208exports.isObject = isObject;
12209
12210function isDate(d) {
12211 return isObject(d) && objectToString(d) === '[object Date]';
12212}
12213exports.isDate = isDate;
12214
12215function isError(e) {
12216 return isObject(e) &&
12217 (objectToString(e) === '[object Error]' || e instanceof Error);
12218}
12219exports.isError = isError;
12220
12221function isFunction(arg) {
12222 return typeof arg === 'function';
12223}
12224exports.isFunction = isFunction;
12225
12226function isPrimitive(arg) {
12227 return arg === null ||
12228 typeof arg === 'boolean' ||
12229 typeof arg === 'number' ||
12230 typeof arg === 'string' ||
12231 typeof arg === 'symbol' || // ES6 symbol
12232 typeof arg === 'undefined';
12233}
12234exports.isPrimitive = isPrimitive;
12235
12236exports.isBuffer = require('./support/isBuffer');
12237
12238function objectToString(o) {
12239 return Object.prototype.toString.call(o);
12240}
12241
12242
12243function pad(n) {
12244 return n < 10 ? '0' + n.toString(10) : n.toString(10);
12245}
12246
12247
12248var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
12249 'Oct', 'Nov', 'Dec'];
12250
12251// 26 Feb 16:19:34
12252function timestamp() {
12253 var d = new Date();
12254 var time = [pad(d.getHours()),
12255 pad(d.getMinutes()),
12256 pad(d.getSeconds())].join(':');
12257 return [d.getDate(), months[d.getMonth()], time].join(' ');
12258}
12259
12260
12261// log is just a thin wrapper to console.log that prepends a timestamp
12262exports.log = function() {
12263 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
12264};
12265
12266
12267/**
12268 * Inherit the prototype methods from one constructor into another.
12269 *
12270 * The Function.prototype.inherits from lang.js rewritten as a standalone
12271 * function (not on Function.prototype). NOTE: If this file is to be loaded
12272 * during bootstrapping this function needs to be rewritten using some native
12273 * functions as prototype setup using normal JavaScript does not work as
12274 * expected during bootstrapping (see mirror.js in r114903).
12275 *
12276 * @param {function} ctor Constructor function which needs to inherit the
12277 * prototype.
12278 * @param {function} superCtor Constructor function to inherit prototype from.
12279 */
12280exports.inherits = require('inherits');
12281
12282exports._extend = function(origin, add) {
12283 // Don't do anything if add isn't an object
12284 if (!add || !isObject(add)) return origin;
12285
12286 var keys = Object.keys(add);
12287 var i = keys.length;
12288 while (i--) {
12289 origin[keys[i]] = add[keys[i]];
12290 }
12291 return origin;
12292};
12293
12294function hasOwnProperty(obj, prop) {
12295 return Object.prototype.hasOwnProperty.call(obj, prop);
12296}
12297
12298}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
12299},{"./support/isBuffer":28,"_process":14,"inherits":12}],30:[function(require,module,exports){
12300// Base58 encoding/decoding
12301// Originally written by Mike Hearn for BitcoinJ
12302// Copyright (c) 2011 Google Inc
12303// Ported to JavaScript by Stefan Thomas
12304// Merged Buffer refactorings from base58-native by Stephen Pair
12305// Copyright (c) 2013 BitPay Inc
12306
12307var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
12308var ALPHABET_MAP = {}
12309for(var i = 0; i < ALPHABET.length; i++) {
12310 ALPHABET_MAP[ALPHABET.charAt(i)] = i
12311}
12312var BASE = 58
12313
12314function encode(buffer) {
12315 if (buffer.length === 0) return ''
12316
12317 var i, j, digits = [0]
12318 for (i = 0; i < buffer.length; i++) {
12319 for (j = 0; j < digits.length; j++) digits[j] <<= 8
12320
12321 digits[0] += buffer[i]
12322
12323 var carry = 0
12324 for (j = 0; j < digits.length; ++j) {
12325 digits[j] += carry
12326
12327 carry = (digits[j] / BASE) | 0
12328 digits[j] %= BASE
12329 }
12330
12331 while (carry) {
12332 digits.push(carry % BASE)
12333
12334 carry = (carry / BASE) | 0
12335 }
12336 }
12337
12338 // deal with leading zeros
12339 for (i = 0; buffer[i] === 0 && i < buffer.length - 1; i++) digits.push(0)
12340
12341 // convert digits to a string
12342 var stringOutput = ""
12343 for (var i = digits.length - 1; i >= 0; i--) {
12344 stringOutput = stringOutput + ALPHABET[digits[i]]
12345 }
12346 return stringOutput
12347}
12348
12349function decode(string) {
12350 if (string.length === 0) return []
12351
12352 var i, j, bytes = [0]
12353 for (i = 0; i < string.length; i++) {
12354 var c = string[i]
12355 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
12356
12357 for (j = 0; j < bytes.length; j++) bytes[j] *= BASE
12358 bytes[0] += ALPHABET_MAP[c]
12359
12360 var carry = 0
12361 for (j = 0; j < bytes.length; ++j) {
12362 bytes[j] += carry
12363
12364 carry = bytes[j] >> 8
12365 bytes[j] &= 0xff
12366 }
12367
12368 while (carry) {
12369 bytes.push(carry & 0xff)
12370
12371 carry >>= 8
12372 }
12373 }
12374
12375 // deal with leading zeros
12376 for (i = 0; string[i] === '1' && i < string.length - 1; i++) bytes.push(0)
12377
12378 return bytes.reverse()
12379}
12380
12381module.exports = {
12382 encode: encode,
12383 decode: decode
12384}
12385
12386},{}],31:[function(require,module,exports){
12387(function (Buffer){
12388'use strict'
12389
12390var base58 = require('bs58')
12391var createHash = require('create-hash')
12392
12393// SHA256(SHA256(buffer))
12394function sha256x2 (buffer) {
12395 buffer = createHash('sha256').update(buffer).digest()
12396 return createHash('sha256').update(buffer).digest()
12397}
12398
12399// Encode a buffer as a base58-check encoded string
12400function encode (payload) {
12401 var checksum = sha256x2(payload).slice(0, 4)
12402
12403 return base58.encode(Buffer.concat([
12404 payload,
12405 checksum
12406 ]))
12407}
12408
12409// Decode a base58-check encoded string to a buffer
12410function decode (string) {
12411 var buffer = new Buffer(base58.decode(string))
12412
12413 var payload = buffer.slice(0, -4)
12414 var checksum = buffer.slice(-4)
12415 var newChecksum = sha256x2(payload).slice(0, 4)
12416
12417 for (var i = 0; i < newChecksum.length; ++i) {
12418 if (newChecksum[i] === checksum[i]) continue
12419
12420 throw new Error('Invalid checksum')
12421 }
12422
12423 return payload
12424}
12425
12426module.exports = {
12427 encode: encode,
12428 decode: decode
12429}
12430
12431}).call(this,require("buffer").Buffer)
12432},{"bs58":30,"buffer":7,"create-hash":32}],32:[function(require,module,exports){
12433(function (Buffer){
12434'use strict';
12435var inherits = require('inherits')
12436var md5 = require('./md5')
12437var rmd160 = require('ripemd160')
12438var sha = require('sha.js')
12439
12440var Transform = require('stream').Transform
12441
12442function HashNoConstructor(hash) {
12443 Transform.call(this)
12444
12445 this._hash = hash
12446 this.buffers = []
12447}
12448
12449inherits(HashNoConstructor, Transform)
12450
12451HashNoConstructor.prototype._transform = function (data, _, next) {
12452 this.buffers.push(data)
12453
12454 next()
12455}
12456
12457HashNoConstructor.prototype._flush = function (next) {
12458 this.push(this.digest())
12459 next()
12460}
12461
12462HashNoConstructor.prototype.update = function (data, enc) {
12463 if (typeof data === 'string') {
12464 data = new Buffer(data, enc)
12465 }
12466
12467 this.buffers.push(data)
12468 return this
12469}
12470
12471HashNoConstructor.prototype.digest = function (enc) {
12472 var buf = Buffer.concat(this.buffers)
12473 var r = this._hash(buf)
12474 this.buffers = null
12475
12476 return enc ? r.toString(enc) : r
12477}
12478
12479function Hash(hash) {
12480 Transform.call(this)
12481
12482 this._hash = hash
12483}
12484
12485inherits(Hash, Transform)
12486
12487Hash.prototype._transform = function (data, enc, next) {
12488 if (enc) data = new Buffer(data, enc)
12489
12490 this._hash.update(data)
12491
12492 next()
12493}
12494
12495Hash.prototype._flush = function (next) {
12496 this.push(this._hash.digest())
12497 this._hash = null
12498
12499 next()
12500}
12501
12502Hash.prototype.update = function (data, enc) {
12503 if (typeof data === 'string') {
12504 data = new Buffer(data, enc)
12505 }
12506
12507 this._hash.update(data)
12508 return this
12509}
12510
12511Hash.prototype.digest = function (enc) {
12512 var outData = this._hash.digest()
12513
12514 return enc ? outData.toString(enc) : outData
12515}
12516
12517module.exports = function createHash (alg) {
12518 if ('md5' === alg) return new HashNoConstructor(md5)
12519 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
12520
12521 return new Hash(sha(alg))
12522}
12523
12524}).call(this,require("buffer").Buffer)
12525},{"./md5":34,"buffer":7,"inherits":35,"ripemd160":36,"sha.js":38,"stream":26}],33:[function(require,module,exports){
12526(function (Buffer){
12527'use strict';
12528var intSize = 4;
12529var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
12530var chrsz = 8;
12531
12532function toArray(buf, bigEndian) {
12533 if ((buf.length % intSize) !== 0) {
12534 var len = buf.length + (intSize - (buf.length % intSize));
12535 buf = Buffer.concat([buf, zeroBuffer], len);
12536 }
12537
12538 var arr = [];
12539 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
12540 for (var i = 0; i < buf.length; i += intSize) {
12541 arr.push(fn.call(buf, i));
12542 }
12543 return arr;
12544}
12545
12546function toBuffer(arr, size, bigEndian) {
12547 var buf = new Buffer(size);
12548 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
12549 for (var i = 0; i < arr.length; i++) {
12550 fn.call(buf, arr[i], i * 4, true);
12551 }
12552 return buf;
12553}
12554
12555function hash(buf, fn, hashSize, bigEndian) {
12556 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
12557 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
12558 return toBuffer(arr, hashSize, bigEndian);
12559}
12560exports.hash = hash;
12561}).call(this,require("buffer").Buffer)
12562},{"buffer":7}],34:[function(require,module,exports){
12563'use strict';
12564/*
12565 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
12566 * Digest Algorithm, as defined in RFC 1321.
12567 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
12568 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
12569 * Distributed under the BSD License
12570 * See http://pajhome.org.uk/crypt/md5 for more info.
12571 */
12572
12573var helpers = require('./helpers');
12574
12575/*
12576 * Calculate the MD5 of an array of little-endian words, and a bit length
12577 */
12578function core_md5(x, len)
12579{
12580 /* append padding */
12581 x[len >> 5] |= 0x80 << ((len) % 32);
12582 x[(((len + 64) >>> 9) << 4) + 14] = len;
12583
12584 var a = 1732584193;
12585 var b = -271733879;
12586 var c = -1732584194;
12587 var d = 271733878;
12588
12589 for(var i = 0; i < x.length; i += 16)
12590 {
12591 var olda = a;
12592 var oldb = b;
12593 var oldc = c;
12594 var oldd = d;
12595
12596 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
12597 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
12598 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
12599 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
12600 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
12601 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
12602 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
12603 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
12604 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
12605 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
12606 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
12607 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
12608 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
12609 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
12610 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
12611 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
12612
12613 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
12614 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
12615 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
12616 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
12617 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
12618 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
12619 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
12620 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
12621 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
12622 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
12623 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
12624 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
12625 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
12626 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
12627 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
12628 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
12629
12630 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
12631 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
12632 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
12633 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
12634 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
12635 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
12636 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
12637 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
12638 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
12639 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
12640 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
12641 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
12642 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
12643 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
12644 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
12645 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
12646
12647 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
12648 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
12649 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
12650 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
12651 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
12652 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
12653 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
12654 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
12655 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
12656 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
12657 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
12658 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
12659 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
12660 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
12661 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
12662 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
12663
12664 a = safe_add(a, olda);
12665 b = safe_add(b, oldb);
12666 c = safe_add(c, oldc);
12667 d = safe_add(d, oldd);
12668 }
12669 return Array(a, b, c, d);
12670
12671}
12672
12673/*
12674 * These functions implement the four basic operations the algorithm uses.
12675 */
12676function md5_cmn(q, a, b, x, s, t)
12677{
12678 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
12679}
12680function md5_ff(a, b, c, d, x, s, t)
12681{
12682 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
12683}
12684function md5_gg(a, b, c, d, x, s, t)
12685{
12686 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
12687}
12688function md5_hh(a, b, c, d, x, s, t)
12689{
12690 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
12691}
12692function md5_ii(a, b, c, d, x, s, t)
12693{
12694 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
12695}
12696
12697/*
12698 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
12699 * to work around bugs in some JS interpreters.
12700 */
12701function safe_add(x, y)
12702{
12703 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
12704 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
12705 return (msw << 16) | (lsw & 0xFFFF);
12706}
12707
12708/*
12709 * Bitwise rotate a 32-bit number to the left.
12710 */
12711function bit_rol(num, cnt)
12712{
12713 return (num << cnt) | (num >>> (32 - cnt));
12714}
12715
12716module.exports = function md5(buf) {
12717 return helpers.hash(buf, core_md5, 16);
12718};
12719},{"./helpers":33}],35:[function(require,module,exports){
12720arguments[4][12][0].apply(exports,arguments)
12721},{"dup":12}],36:[function(require,module,exports){
12722(function (Buffer){
12723/*
12724CryptoJS v3.1.2
12725code.google.com/p/crypto-js
12726(c) 2009-2013 by Jeff Mott. All rights reserved.
12727code.google.com/p/crypto-js/wiki/License
12728*/
12729/** @preserve
12730(c) 2012 by Cédric Mesnil. All rights reserved.
12731
12732Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
12733
12734 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
12735 - 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.
12736
12737THIS 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.
12738*/
12739
12740// constants table
12741var zl = [
12742 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
12743 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
12744 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
12745 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
12746 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
12747]
12748
12749var zr = [
12750 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
12751 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
12752 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
12753 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
12754 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
12755]
12756
12757var sl = [
12758 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
12759 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
12760 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
12761 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
12762 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
12763]
12764
12765var sr = [
12766 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
12767 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
12768 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
12769 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
12770 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
12771]
12772
12773var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
12774var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
12775
12776function bytesToWords (bytes) {
12777 var words = []
12778 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
12779 words[b >>> 5] |= bytes[i] << (24 - b % 32)
12780 }
12781 return words
12782}
12783
12784function wordsToBytes (words) {
12785 var bytes = []
12786 for (var b = 0; b < words.length * 32; b += 8) {
12787 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
12788 }
12789 return bytes
12790}
12791
12792function processBlock (H, M, offset) {
12793 // swap endian
12794 for (var i = 0; i < 16; i++) {
12795 var offset_i = offset + i
12796 var M_offset_i = M[offset_i]
12797
12798 // Swap
12799 M[offset_i] = (
12800 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
12801 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
12802 )
12803 }
12804
12805 // Working variables
12806 var al, bl, cl, dl, el
12807 var ar, br, cr, dr, er
12808
12809 ar = al = H[0]
12810 br = bl = H[1]
12811 cr = cl = H[2]
12812 dr = dl = H[3]
12813 er = el = H[4]
12814
12815 // computation
12816 var t
12817 for (i = 0; i < 80; i += 1) {
12818 t = (al + M[offset + zl[i]]) | 0
12819 if (i < 16) {
12820 t += f1(bl, cl, dl) + hl[0]
12821 } else if (i < 32) {
12822 t += f2(bl, cl, dl) + hl[1]
12823 } else if (i < 48) {
12824 t += f3(bl, cl, dl) + hl[2]
12825 } else if (i < 64) {
12826 t += f4(bl, cl, dl) + hl[3]
12827 } else {// if (i<80) {
12828 t += f5(bl, cl, dl) + hl[4]
12829 }
12830 t = t | 0
12831 t = rotl(t, sl[i])
12832 t = (t + el) | 0
12833 al = el
12834 el = dl
12835 dl = rotl(cl, 10)
12836 cl = bl
12837 bl = t
12838
12839 t = (ar + M[offset + zr[i]]) | 0
12840 if (i < 16) {
12841 t += f5(br, cr, dr) + hr[0]
12842 } else if (i < 32) {
12843 t += f4(br, cr, dr) + hr[1]
12844 } else if (i < 48) {
12845 t += f3(br, cr, dr) + hr[2]
12846 } else if (i < 64) {
12847 t += f2(br, cr, dr) + hr[3]
12848 } else {// if (i<80) {
12849 t += f1(br, cr, dr) + hr[4]
12850 }
12851
12852 t = t | 0
12853 t = rotl(t, sr[i])
12854 t = (t + er) | 0
12855 ar = er
12856 er = dr
12857 dr = rotl(cr, 10)
12858 cr = br
12859 br = t
12860 }
12861
12862 // intermediate hash value
12863 t = (H[1] + cl + dr) | 0
12864 H[1] = (H[2] + dl + er) | 0
12865 H[2] = (H[3] + el + ar) | 0
12866 H[3] = (H[4] + al + br) | 0
12867 H[4] = (H[0] + bl + cr) | 0
12868 H[0] = t
12869}
12870
12871function f1 (x, y, z) {
12872 return ((x) ^ (y) ^ (z))
12873}
12874
12875function f2 (x, y, z) {
12876 return (((x) & (y)) | ((~x) & (z)))
12877}
12878
12879function f3 (x, y, z) {
12880 return (((x) | (~(y))) ^ (z))
12881}
12882
12883function f4 (x, y, z) {
12884 return (((x) & (z)) | ((y) & (~(z))))
12885}
12886
12887function f5 (x, y, z) {
12888 return ((x) ^ ((y) | (~(z))))
12889}
12890
12891function rotl (x, n) {
12892 return (x << n) | (x >>> (32 - n))
12893}
12894
12895function ripemd160 (message) {
12896 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
12897
12898 if (typeof message === 'string') {
12899 message = new Buffer(message, 'utf8')
12900 }
12901
12902 var m = bytesToWords(message)
12903
12904 var nBitsLeft = message.length * 8
12905 var nBitsTotal = message.length * 8
12906
12907 // Add padding
12908 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
12909 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
12910 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
12911 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
12912 )
12913
12914 for (var i = 0; i < m.length; i += 16) {
12915 processBlock(H, m, i)
12916 }
12917
12918 // swap endian
12919 for (i = 0; i < 5; i++) {
12920 // shortcut
12921 var H_i = H[i]
12922
12923 // Swap
12924 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
12925 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
12926 }
12927
12928 var digestbytes = wordsToBytes(H)
12929 return new Buffer(digestbytes)
12930}
12931
12932module.exports = ripemd160
12933
12934}).call(this,require("buffer").Buffer)
12935},{"buffer":7}],37:[function(require,module,exports){
12936(function (Buffer){
12937// prototype class for hash functions
12938function Hash (blockSize, finalSize) {
12939 this._block = new Buffer(blockSize)
12940 this._finalSize = finalSize
12941 this._blockSize = blockSize
12942 this._len = 0
12943 this._s = 0
12944}
12945
12946Hash.prototype.update = function (data, enc) {
12947 if (typeof data === 'string') {
12948 enc = enc || 'utf8'
12949 data = new Buffer(data, enc)
12950 }
12951
12952 var l = this._len += data.length
12953 var s = this._s || 0
12954 var f = 0
12955 var buffer = this._block
12956
12957 while (s < l) {
12958 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
12959 var ch = (t - f)
12960
12961 for (var i = 0; i < ch; i++) {
12962 buffer[(s % this._blockSize) + i] = data[i + f]
12963 }
12964
12965 s += ch
12966 f += ch
12967
12968 if ((s % this._blockSize) === 0) {
12969 this._update(buffer)
12970 }
12971 }
12972 this._s = s
12973
12974 return this
12975}
12976
12977Hash.prototype.digest = function (enc) {
12978 // Suppose the length of the message M, in bits, is l
12979 var l = this._len * 8
12980
12981 // Append the bit 1 to the end of the message
12982 this._block[this._len % this._blockSize] = 0x80
12983
12984 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
12985 this._block.fill(0, this._len % this._blockSize + 1)
12986
12987 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
12988 this._update(this._block)
12989 this._block.fill(0)
12990 }
12991
12992 // to this append the block which is equal to the number l written in binary
12993 // TODO: handle case where l is > Math.pow(2, 29)
12994 this._block.writeInt32BE(l, this._blockSize - 4)
12995
12996 var hash = this._update(this._block) || this._hash()
12997
12998 return enc ? hash.toString(enc) : hash
12999}
13000
13001Hash.prototype._update = function () {
13002 throw new Error('_update must be implemented by subclass')
13003}
13004
13005module.exports = Hash
13006
13007}).call(this,require("buffer").Buffer)
13008},{"buffer":7}],38:[function(require,module,exports){
13009var exports = module.exports = function SHA (algorithm) {
13010 algorithm = algorithm.toLowerCase()
13011
13012 var Algorithm = exports[algorithm]
13013 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
13014
13015 return new Algorithm()
13016}
13017
13018exports.sha = require('./sha')
13019exports.sha1 = require('./sha1')
13020exports.sha224 = require('./sha224')
13021exports.sha256 = require('./sha256')
13022exports.sha384 = require('./sha384')
13023exports.sha512 = require('./sha512')
13024
13025},{"./sha":39,"./sha1":40,"./sha224":41,"./sha256":42,"./sha384":43,"./sha512":44}],39:[function(require,module,exports){
13026(function (Buffer){
13027/*
13028 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
13029 * in FIPS PUB 180-1
13030 * This source code is derived from sha1.js of the same repository.
13031 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
13032 * operation was added.
13033 */
13034
13035var inherits = require('inherits')
13036var Hash = require('./hash')
13037
13038var W = new Array(80)
13039
13040function Sha () {
13041 this.init()
13042 this._w = W
13043
13044 Hash.call(this, 64, 56)
13045}
13046
13047inherits(Sha, Hash)
13048
13049Sha.prototype.init = function () {
13050 this._a = 0x67452301 | 0
13051 this._b = 0xefcdab89 | 0
13052 this._c = 0x98badcfe | 0
13053 this._d = 0x10325476 | 0
13054 this._e = 0xc3d2e1f0 | 0
13055
13056 return this
13057}
13058
13059/*
13060 * Bitwise rotate a 32-bit number to the left.
13061 */
13062function rol (num, cnt) {
13063 return (num << cnt) | (num >>> (32 - cnt))
13064}
13065
13066Sha.prototype._update = function (M) {
13067 var W = this._w
13068
13069 var a = this._a
13070 var b = this._b
13071 var c = this._c
13072 var d = this._d
13073 var e = this._e
13074
13075 var j = 0, k
13076
13077 /*
13078 * SHA-1 has a bitwise rotate left operation. But, SHA is not
13079 * function calcW() { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
13080 */
13081 function calcW () { return W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16] }
13082 function loop (w, f) {
13083 W[j] = w
13084
13085 var t = rol(a, 5) + f + e + w + k
13086
13087 e = d
13088 d = c
13089 c = rol(b, 30)
13090 b = a
13091 a = t
13092 j++
13093 }
13094
13095 k = 1518500249
13096 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
13097 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
13098 k = 1859775393
13099 while (j < 40) loop(calcW(), b ^ c ^ d)
13100 k = -1894007588
13101 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
13102 k = -899497514
13103 while (j < 80) loop(calcW(), b ^ c ^ d)
13104
13105 this._a = (a + this._a) | 0
13106 this._b = (b + this._b) | 0
13107 this._c = (c + this._c) | 0
13108 this._d = (d + this._d) | 0
13109 this._e = (e + this._e) | 0
13110}
13111
13112Sha.prototype._hash = function () {
13113 var H = new Buffer(20)
13114
13115 H.writeInt32BE(this._a | 0, 0)
13116 H.writeInt32BE(this._b | 0, 4)
13117 H.writeInt32BE(this._c | 0, 8)
13118 H.writeInt32BE(this._d | 0, 12)
13119 H.writeInt32BE(this._e | 0, 16)
13120
13121 return H
13122}
13123
13124module.exports = Sha
13125
13126
13127}).call(this,require("buffer").Buffer)
13128},{"./hash":37,"buffer":7,"inherits":35}],40:[function(require,module,exports){
13129(function (Buffer){
13130/*
13131 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
13132 * in FIPS PUB 180-1
13133 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
13134 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
13135 * Distributed under the BSD License
13136 * See http://pajhome.org.uk/crypt/md5 for details.
13137 */
13138
13139var inherits = require('inherits')
13140var Hash = require('./hash')
13141
13142var W = new Array(80)
13143
13144function Sha1 () {
13145 this.init()
13146 this._w = W
13147
13148 Hash.call(this, 64, 56)
13149}
13150
13151inherits(Sha1, Hash)
13152
13153Sha1.prototype.init = function () {
13154 this._a = 0x67452301 | 0
13155 this._b = 0xefcdab89 | 0
13156 this._c = 0x98badcfe | 0
13157 this._d = 0x10325476 | 0
13158 this._e = 0xc3d2e1f0 | 0
13159
13160 return this
13161}
13162
13163/*
13164 * Bitwise rotate a 32-bit number to the left.
13165 */
13166function rol (num, cnt) {
13167 return (num << cnt) | (num >>> (32 - cnt))
13168}
13169
13170Sha1.prototype._update = function (M) {
13171 var W = this._w
13172
13173 var a = this._a
13174 var b = this._b
13175 var c = this._c
13176 var d = this._d
13177 var e = this._e
13178
13179 var j = 0, k
13180
13181 function calcW () { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
13182 function loop (w, f) {
13183 W[j] = w
13184
13185 var t = rol(a, 5) + f + e + w + k
13186
13187 e = d
13188 d = c
13189 c = rol(b, 30)
13190 b = a
13191 a = t
13192 j++
13193 }
13194
13195 k = 1518500249
13196 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
13197 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
13198 k = 1859775393
13199 while (j < 40) loop(calcW(), b ^ c ^ d)
13200 k = -1894007588
13201 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
13202 k = -899497514
13203 while (j < 80) loop(calcW(), b ^ c ^ d)
13204
13205 this._a = (a + this._a) | 0
13206 this._b = (b + this._b) | 0
13207 this._c = (c + this._c) | 0
13208 this._d = (d + this._d) | 0
13209 this._e = (e + this._e) | 0
13210}
13211
13212Sha1.prototype._hash = function () {
13213 var H = new Buffer(20)
13214
13215 H.writeInt32BE(this._a | 0, 0)
13216 H.writeInt32BE(this._b | 0, 4)
13217 H.writeInt32BE(this._c | 0, 8)
13218 H.writeInt32BE(this._d | 0, 12)
13219 H.writeInt32BE(this._e | 0, 16)
13220
13221 return H
13222}
13223
13224module.exports = Sha1
13225
13226}).call(this,require("buffer").Buffer)
13227},{"./hash":37,"buffer":7,"inherits":35}],41:[function(require,module,exports){
13228(function (Buffer){
13229/**
13230 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
13231 * in FIPS 180-2
13232 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
13233 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
13234 *
13235 */
13236
13237var inherits = require('inherits')
13238var Sha256 = require('./sha256')
13239var Hash = require('./hash')
13240
13241var W = new Array(64)
13242
13243function Sha224 () {
13244 this.init()
13245
13246 this._w = W // new Array(64)
13247
13248 Hash.call(this, 64, 56)
13249}
13250
13251inherits(Sha224, Sha256)
13252
13253Sha224.prototype.init = function () {
13254 this._a = 0xc1059ed8 | 0
13255 this._b = 0x367cd507 | 0
13256 this._c = 0x3070dd17 | 0
13257 this._d = 0xf70e5939 | 0
13258 this._e = 0xffc00b31 | 0
13259 this._f = 0x68581511 | 0
13260 this._g = 0x64f98fa7 | 0
13261 this._h = 0xbefa4fa4 | 0
13262
13263 return this
13264}
13265
13266Sha224.prototype._hash = function () {
13267 var H = new Buffer(28)
13268
13269 H.writeInt32BE(this._a, 0)
13270 H.writeInt32BE(this._b, 4)
13271 H.writeInt32BE(this._c, 8)
13272 H.writeInt32BE(this._d, 12)
13273 H.writeInt32BE(this._e, 16)
13274 H.writeInt32BE(this._f, 20)
13275 H.writeInt32BE(this._g, 24)
13276
13277 return H
13278}
13279
13280module.exports = Sha224
13281
13282}).call(this,require("buffer").Buffer)
13283},{"./hash":37,"./sha256":42,"buffer":7,"inherits":35}],42:[function(require,module,exports){
13284(function (Buffer){
13285/**
13286 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
13287 * in FIPS 180-2
13288 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
13289 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
13290 *
13291 */
13292
13293var inherits = require('inherits')
13294var Hash = require('./hash')
13295
13296var K = [
13297 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
13298 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
13299 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
13300 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
13301 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
13302 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
13303 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
13304 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
13305 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
13306 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
13307 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
13308 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
13309 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
13310 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
13311 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
13312 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
13313]
13314
13315var W = new Array(64)
13316
13317function Sha256 () {
13318 this.init()
13319
13320 this._w = W // new Array(64)
13321
13322 Hash.call(this, 64, 56)
13323}
13324
13325inherits(Sha256, Hash)
13326
13327Sha256.prototype.init = function () {
13328 this._a = 0x6a09e667 | 0
13329 this._b = 0xbb67ae85 | 0
13330 this._c = 0x3c6ef372 | 0
13331 this._d = 0xa54ff53a | 0
13332 this._e = 0x510e527f | 0
13333 this._f = 0x9b05688c | 0
13334 this._g = 0x1f83d9ab | 0
13335 this._h = 0x5be0cd19 | 0
13336
13337 return this
13338}
13339
13340function S (X, n) {
13341 return (X >>> n) | (X << (32 - n))
13342}
13343
13344function R (X, n) {
13345 return (X >>> n)
13346}
13347
13348function Ch (x, y, z) {
13349 return ((x & y) ^ ((~x) & z))
13350}
13351
13352function Maj (x, y, z) {
13353 return ((x & y) ^ (x & z) ^ (y & z))
13354}
13355
13356function Sigma0256 (x) {
13357 return (S(x, 2) ^ S(x, 13) ^ S(x, 22))
13358}
13359
13360function Sigma1256 (x) {
13361 return (S(x, 6) ^ S(x, 11) ^ S(x, 25))
13362}
13363
13364function Gamma0256 (x) {
13365 return (S(x, 7) ^ S(x, 18) ^ R(x, 3))
13366}
13367
13368function Gamma1256 (x) {
13369 return (S(x, 17) ^ S(x, 19) ^ R(x, 10))
13370}
13371
13372Sha256.prototype._update = function (M) {
13373 var W = this._w
13374
13375 var a = this._a | 0
13376 var b = this._b | 0
13377 var c = this._c | 0
13378 var d = this._d | 0
13379 var e = this._e | 0
13380 var f = this._f | 0
13381 var g = this._g | 0
13382 var h = this._h | 0
13383
13384 var j = 0
13385
13386 function calcW () { return Gamma1256(W[j - 2]) + W[j - 7] + Gamma0256(W[j - 15]) + W[j - 16] }
13387 function loop (w) {
13388 W[j] = w
13389
13390 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
13391 var T2 = Sigma0256(a) + Maj(a, b, c)
13392
13393 h = g
13394 g = f
13395 f = e
13396 e = d + T1
13397 d = c
13398 c = b
13399 b = a
13400 a = T1 + T2
13401
13402 j++
13403 }
13404
13405 while (j < 16) loop(M.readInt32BE(j * 4))
13406 while (j < 64) loop(calcW())
13407
13408 this._a = (a + this._a) | 0
13409 this._b = (b + this._b) | 0
13410 this._c = (c + this._c) | 0
13411 this._d = (d + this._d) | 0
13412 this._e = (e + this._e) | 0
13413 this._f = (f + this._f) | 0
13414 this._g = (g + this._g) | 0
13415 this._h = (h + this._h) | 0
13416}
13417
13418Sha256.prototype._hash = function () {
13419 var H = new Buffer(32)
13420
13421 H.writeInt32BE(this._a, 0)
13422 H.writeInt32BE(this._b, 4)
13423 H.writeInt32BE(this._c, 8)
13424 H.writeInt32BE(this._d, 12)
13425 H.writeInt32BE(this._e, 16)
13426 H.writeInt32BE(this._f, 20)
13427 H.writeInt32BE(this._g, 24)
13428 H.writeInt32BE(this._h, 28)
13429
13430 return H
13431}
13432
13433module.exports = Sha256
13434
13435}).call(this,require("buffer").Buffer)
13436},{"./hash":37,"buffer":7,"inherits":35}],43:[function(require,module,exports){
13437(function (Buffer){
13438var inherits = require('inherits')
13439var SHA512 = require('./sha512')
13440var Hash = require('./hash')
13441
13442var W = new Array(160)
13443
13444function Sha384 () {
13445 this.init()
13446 this._w = W
13447
13448 Hash.call(this, 128, 112)
13449}
13450
13451inherits(Sha384, SHA512)
13452
13453Sha384.prototype.init = function () {
13454 this._a = 0xcbbb9d5d | 0
13455 this._b = 0x629a292a | 0
13456 this._c = 0x9159015a | 0
13457 this._d = 0x152fecd8 | 0
13458 this._e = 0x67332667 | 0
13459 this._f = 0x8eb44a87 | 0
13460 this._g = 0xdb0c2e0d | 0
13461 this._h = 0x47b5481d | 0
13462
13463 this._al = 0xc1059ed8 | 0
13464 this._bl = 0x367cd507 | 0
13465 this._cl = 0x3070dd17 | 0
13466 this._dl = 0xf70e5939 | 0
13467 this._el = 0xffc00b31 | 0
13468 this._fl = 0x68581511 | 0
13469 this._gl = 0x64f98fa7 | 0
13470 this._hl = 0xbefa4fa4 | 0
13471
13472 return this
13473}
13474
13475Sha384.prototype._hash = function () {
13476 var H = new Buffer(48)
13477
13478 function writeInt64BE (h, l, offset) {
13479 H.writeInt32BE(h, offset)
13480 H.writeInt32BE(l, offset + 4)
13481 }
13482
13483 writeInt64BE(this._a, this._al, 0)
13484 writeInt64BE(this._b, this._bl, 8)
13485 writeInt64BE(this._c, this._cl, 16)
13486 writeInt64BE(this._d, this._dl, 24)
13487 writeInt64BE(this._e, this._el, 32)
13488 writeInt64BE(this._f, this._fl, 40)
13489
13490 return H
13491}
13492
13493module.exports = Sha384
13494
13495}).call(this,require("buffer").Buffer)
13496},{"./hash":37,"./sha512":44,"buffer":7,"inherits":35}],44:[function(require,module,exports){
13497(function (Buffer){
13498var inherits = require('inherits')
13499var Hash = require('./hash')
13500
13501var K = [
13502 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
13503 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
13504 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
13505 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
13506 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
13507 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
13508 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
13509 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
13510 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
13511 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
13512 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
13513 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
13514 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
13515 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
13516 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
13517 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
13518 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
13519 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
13520 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
13521 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
13522 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
13523 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
13524 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
13525 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
13526 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
13527 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
13528 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
13529 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
13530 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
13531 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
13532 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
13533 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
13534 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
13535 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
13536 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
13537 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
13538 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
13539 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
13540 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
13541 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
13542]
13543
13544var W = new Array(160)
13545
13546function Sha512 () {
13547 this.init()
13548 this._w = W
13549
13550 Hash.call(this, 128, 112)
13551}
13552
13553inherits(Sha512, Hash)
13554
13555Sha512.prototype.init = function () {
13556 this._a = 0x6a09e667 | 0
13557 this._b = 0xbb67ae85 | 0
13558 this._c = 0x3c6ef372 | 0
13559 this._d = 0xa54ff53a | 0
13560 this._e = 0x510e527f | 0
13561 this._f = 0x9b05688c | 0
13562 this._g = 0x1f83d9ab | 0
13563 this._h = 0x5be0cd19 | 0
13564
13565 this._al = 0xf3bcc908 | 0
13566 this._bl = 0x84caa73b | 0
13567 this._cl = 0xfe94f82b | 0
13568 this._dl = 0x5f1d36f1 | 0
13569 this._el = 0xade682d1 | 0
13570 this._fl = 0x2b3e6c1f | 0
13571 this._gl = 0xfb41bd6b | 0
13572 this._hl = 0x137e2179 | 0
13573
13574 return this
13575}
13576
13577function S (X, Xl, n) {
13578 return (X >>> n) | (Xl << (32 - n))
13579}
13580
13581function Ch (x, y, z) {
13582 return ((x & y) ^ ((~x) & z))
13583}
13584
13585function Maj (x, y, z) {
13586 return ((x & y) ^ (x & z) ^ (y & z))
13587}
13588
13589Sha512.prototype._update = function (M) {
13590 var W = this._w
13591
13592 var a = this._a | 0
13593 var b = this._b | 0
13594 var c = this._c | 0
13595 var d = this._d | 0
13596 var e = this._e | 0
13597 var f = this._f | 0
13598 var g = this._g | 0
13599 var h = this._h | 0
13600
13601 var al = this._al | 0
13602 var bl = this._bl | 0
13603 var cl = this._cl | 0
13604 var dl = this._dl | 0
13605 var el = this._el | 0
13606 var fl = this._fl | 0
13607 var gl = this._gl | 0
13608 var hl = this._hl | 0
13609
13610 var i = 0, j = 0
13611 var Wi, Wil
13612 function calcW () {
13613 var x = W[j - 15 * 2]
13614 var xl = W[j - 15 * 2 + 1]
13615 var gamma0 = S(x, xl, 1) ^ S(x, xl, 8) ^ (x >>> 7)
13616 var gamma0l = S(xl, x, 1) ^ S(xl, x, 8) ^ S(xl, x, 7)
13617
13618 x = W[j - 2 * 2]
13619 xl = W[j - 2 * 2 + 1]
13620 var gamma1 = S(x, xl, 19) ^ S(xl, x, 29) ^ (x >>> 6)
13621 var gamma1l = S(xl, x, 19) ^ S(x, xl, 29) ^ S(xl, x, 6)
13622
13623 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
13624 var Wi7 = W[j - 7 * 2]
13625 var Wi7l = W[j - 7 * 2 + 1]
13626
13627 var Wi16 = W[j - 16 * 2]
13628 var Wi16l = W[j - 16 * 2 + 1]
13629
13630 Wil = gamma0l + Wi7l
13631 Wi = gamma0 + Wi7 + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0)
13632 Wil = Wil + gamma1l
13633 Wi = Wi + gamma1 + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0)
13634 Wil = Wil + Wi16l
13635 Wi = Wi + Wi16 + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0)
13636 }
13637
13638 function loop () {
13639 W[j] = Wi
13640 W[j + 1] = Wil
13641
13642 var maj = Maj(a, b, c)
13643 var majl = Maj(al, bl, cl)
13644
13645 var sigma0h = S(a, al, 28) ^ S(al, a, 2) ^ S(al, a, 7)
13646 var sigma0l = S(al, a, 28) ^ S(a, al, 2) ^ S(a, al, 7)
13647 var sigma1h = S(e, el, 14) ^ S(e, el, 18) ^ S(el, e, 9)
13648 var sigma1l = S(el, e, 14) ^ S(el, e, 18) ^ S(e, el, 9)
13649
13650 // t1 = h + sigma1 + ch + K[i] + W[i]
13651 var Ki = K[j]
13652 var Kil = K[j + 1]
13653
13654 var ch = Ch(e, f, g)
13655 var chl = Ch(el, fl, gl)
13656
13657 var t1l = hl + sigma1l
13658 var t1 = h + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0)
13659 t1l = t1l + chl
13660 t1 = t1 + ch + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0)
13661 t1l = t1l + Kil
13662 t1 = t1 + Ki + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0)
13663 t1l = t1l + Wil
13664 t1 = t1 + Wi + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0)
13665
13666 // t2 = sigma0 + maj
13667 var t2l = sigma0l + majl
13668 var t2 = sigma0h + maj + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0)
13669
13670 h = g
13671 hl = gl
13672 g = f
13673 gl = fl
13674 f = e
13675 fl = el
13676 el = (dl + t1l) | 0
13677 e = (d + t1 + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
13678 d = c
13679 dl = cl
13680 c = b
13681 cl = bl
13682 b = a
13683 bl = al
13684 al = (t1l + t2l) | 0
13685 a = (t1 + t2 + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0
13686
13687 i++
13688 j += 2
13689 }
13690
13691 while (i < 16) {
13692 Wi = M.readInt32BE(j * 4)
13693 Wil = M.readInt32BE(j * 4 + 4)
13694
13695 loop()
13696 }
13697
13698 while (i < 80) {
13699 calcW()
13700 loop()
13701 }
13702
13703 this._al = (this._al + al) | 0
13704 this._bl = (this._bl + bl) | 0
13705 this._cl = (this._cl + cl) | 0
13706 this._dl = (this._dl + dl) | 0
13707 this._el = (this._el + el) | 0
13708 this._fl = (this._fl + fl) | 0
13709 this._gl = (this._gl + gl) | 0
13710 this._hl = (this._hl + hl) | 0
13711
13712 this._a = (this._a + a + ((this._al >>> 0) < (al >>> 0) ? 1 : 0)) | 0
13713 this._b = (this._b + b + ((this._bl >>> 0) < (bl >>> 0) ? 1 : 0)) | 0
13714 this._c = (this._c + c + ((this._cl >>> 0) < (cl >>> 0) ? 1 : 0)) | 0
13715 this._d = (this._d + d + ((this._dl >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
13716 this._e = (this._e + e + ((this._el >>> 0) < (el >>> 0) ? 1 : 0)) | 0
13717 this._f = (this._f + f + ((this._fl >>> 0) < (fl >>> 0) ? 1 : 0)) | 0
13718 this._g = (this._g + g + ((this._gl >>> 0) < (gl >>> 0) ? 1 : 0)) | 0
13719 this._h = (this._h + h + ((this._hl >>> 0) < (hl >>> 0) ? 1 : 0)) | 0
13720}
13721
13722Sha512.prototype._hash = function () {
13723 var H = new Buffer(64)
13724
13725 function writeInt64BE (h, l, offset) {
13726 H.writeInt32BE(h, offset)
13727 H.writeInt32BE(l, offset + 4)
13728 }
13729
13730 writeInt64BE(this._a, this._al, 0)
13731 writeInt64BE(this._b, this._bl, 8)
13732 writeInt64BE(this._c, this._cl, 16)
13733 writeInt64BE(this._d, this._dl, 24)
13734 writeInt64BE(this._e, this._el, 32)
13735 writeInt64BE(this._f, this._fl, 40)
13736 writeInt64BE(this._g, this._gl, 48)
13737 writeInt64BE(this._h, this._hl, 56)
13738
13739 return H
13740}
13741
13742module.exports = Sha512
13743
13744}).call(this,require("buffer").Buffer)
13745},{"./hash":37,"buffer":7,"inherits":35}],45:[function(require,module,exports){
13746(function (Buffer){
13747'use strict';
13748var createHash = require('create-hash/browser');
13749var inherits = require('inherits')
13750
13751var Transform = require('stream').Transform
13752
13753var ZEROS = new Buffer(128)
13754ZEROS.fill(0)
13755
13756function Hmac(alg, key) {
13757 Transform.call(this)
13758
13759 if (typeof key === 'string') {
13760 key = new Buffer(key)
13761 }
13762
13763 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
13764
13765 this._alg = alg
13766 this._key = key
13767
13768 if (key.length > blocksize) {
13769 key = createHash(alg).update(key).digest()
13770
13771 } else if (key.length < blocksize) {
13772 key = Buffer.concat([key, ZEROS], blocksize)
13773 }
13774
13775 var ipad = this._ipad = new Buffer(blocksize)
13776 var opad = this._opad = new Buffer(blocksize)
13777
13778 for (var i = 0; i < blocksize; i++) {
13779 ipad[i] = key[i] ^ 0x36
13780 opad[i] = key[i] ^ 0x5C
13781 }
13782
13783 this._hash = createHash(alg).update(ipad)
13784}
13785
13786inherits(Hmac, Transform)
13787
13788Hmac.prototype.update = function (data, enc) {
13789 this._hash.update(data, enc)
13790
13791 return this
13792}
13793
13794Hmac.prototype._transform = function (data, _, next) {
13795 this._hash.update(data)
13796
13797 next()
13798}
13799
13800Hmac.prototype._flush = function (next) {
13801 this.push(this.digest())
13802
13803 next()
13804}
13805
13806Hmac.prototype.digest = function (enc) {
13807 var h = this._hash.digest()
13808
13809 return createHash(this._alg).update(this._opad).update(h).digest(enc)
13810}
13811
13812module.exports = function createHmac(alg, key) {
13813 return new Hmac(alg, key)
13814}
13815
13816}).call(this,require("buffer").Buffer)
13817},{"buffer":7,"create-hash/browser":32,"inherits":46,"stream":26}],46:[function(require,module,exports){
13818arguments[4][12][0].apply(exports,arguments)
13819},{"dup":12}],47:[function(require,module,exports){
13820var assert = require('assert')
13821var BigInteger = require('bigi')
13822
13823var Point = require('./point')
13824
13825function Curve(p, a, b, Gx, Gy, n, h) {
13826 this.p = p
13827 this.a = a
13828 this.b = b
13829 this.G = Point.fromAffine(this, Gx, Gy)
13830 this.n = n
13831 this.h = h
13832
13833 this.infinity = new Point(this, null, null, BigInteger.ZERO)
13834
13835 // result caching
13836 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
13837}
13838
13839Curve.prototype.pointFromX = function(isOdd, x) {
13840 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
13841 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
13842
13843 var y = beta
13844 if (beta.isEven() ^ !isOdd) {
13845 y = this.p.subtract(y) // -y % p
13846 }
13847
13848 return Point.fromAffine(this, x, y)
13849}
13850
13851Curve.prototype.isInfinity = function(Q) {
13852 if (Q === this.infinity) return true
13853
13854 return Q.z.signum() === 0 && Q.y.signum() !== 0
13855}
13856
13857Curve.prototype.isOnCurve = function(Q) {
13858 if (this.isInfinity(Q)) return true
13859
13860 var x = Q.affineX
13861 var y = Q.affineY
13862 var a = this.a
13863 var b = this.b
13864 var p = this.p
13865
13866 // Check that xQ and yQ are integers in the interval [0, p - 1]
13867 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
13868 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
13869
13870 // and check that y^2 = x^3 + ax + b (mod p)
13871 var lhs = y.square().mod(p)
13872 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
13873 return lhs.equals(rhs)
13874}
13875
13876/**
13877 * Validate an elliptic curve point.
13878 *
13879 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
13880 */
13881Curve.prototype.validate = function(Q) {
13882 // Check Q != O
13883 assert(!this.isInfinity(Q), 'Point is at infinity')
13884 assert(this.isOnCurve(Q), 'Point is not on the curve')
13885
13886 // Check nQ = O (where Q is a scalar multiple of G)
13887 var nQ = Q.multiply(this.n)
13888 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
13889
13890 return true
13891}
13892
13893module.exports = Curve
13894
13895},{"./point":51,"assert":5,"bigi":3}],48:[function(require,module,exports){
13896module.exports={
13897 "secp128r1": {
13898 "p": "fffffffdffffffffffffffffffffffff",
13899 "a": "fffffffdfffffffffffffffffffffffc",
13900 "b": "e87579c11079f43dd824993c2cee5ed3",
13901 "n": "fffffffe0000000075a30d1b9038a115",
13902 "h": "01",
13903 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
13904 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
13905 },
13906 "secp160k1": {
13907 "p": "fffffffffffffffffffffffffffffffeffffac73",
13908 "a": "00",
13909 "b": "07",
13910 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
13911 "h": "01",
13912 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
13913 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
13914 },
13915 "secp160r1": {
13916 "p": "ffffffffffffffffffffffffffffffff7fffffff",
13917 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
13918 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
13919 "n": "0100000000000000000001f4c8f927aed3ca752257",
13920 "h": "01",
13921 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
13922 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
13923 },
13924 "secp192k1": {
13925 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
13926 "a": "00",
13927 "b": "03",
13928 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
13929 "h": "01",
13930 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
13931 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
13932 },
13933 "secp192r1": {
13934 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
13935 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
13936 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
13937 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
13938 "h": "01",
13939 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
13940 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
13941 },
13942 "secp256k1": {
13943 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
13944 "a": "00",
13945 "b": "07",
13946 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
13947 "h": "01",
13948 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
13949 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
13950 },
13951 "secp256r1": {
13952 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
13953 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
13954 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
13955 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
13956 "h": "01",
13957 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
13958 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
13959 }
13960}
13961
13962},{}],49:[function(require,module,exports){
13963var Point = require('./point')
13964var Curve = require('./curve')
13965
13966var getCurveByName = require('./names')
13967
13968module.exports = {
13969 Curve: Curve,
13970 Point: Point,
13971 getCurveByName: getCurveByName
13972}
13973
13974},{"./curve":47,"./names":50,"./point":51}],50:[function(require,module,exports){
13975var BigInteger = require('bigi')
13976
13977var curves = require('./curves')
13978var Curve = require('./curve')
13979
13980function getCurveByName(name) {
13981 var curve = curves[name]
13982 if (!curve) return null
13983
13984 var p = new BigInteger(curve.p, 16)
13985 var a = new BigInteger(curve.a, 16)
13986 var b = new BigInteger(curve.b, 16)
13987 var n = new BigInteger(curve.n, 16)
13988 var h = new BigInteger(curve.h, 16)
13989 var Gx = new BigInteger(curve.Gx, 16)
13990 var Gy = new BigInteger(curve.Gy, 16)
13991
13992 return new Curve(p, a, b, Gx, Gy, n, h)
13993}
13994
13995module.exports = getCurveByName
13996
13997},{"./curve":47,"./curves":48,"bigi":3}],51:[function(require,module,exports){
13998(function (Buffer){
13999var assert = require('assert')
14000var BigInteger = require('bigi')
14001
14002var THREE = BigInteger.valueOf(3)
14003
14004function Point(curve, x, y, z) {
14005 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
14006
14007 this.curve = curve
14008 this.x = x
14009 this.y = y
14010 this.z = z
14011 this._zInv = null
14012
14013 this.compressed = true
14014}
14015
14016Object.defineProperty(Point.prototype, 'zInv', {
14017 get: function() {
14018 if (this._zInv === null) {
14019 this._zInv = this.z.modInverse(this.curve.p)
14020 }
14021
14022 return this._zInv
14023 }
14024})
14025
14026Object.defineProperty(Point.prototype, 'affineX', {
14027 get: function() {
14028 return this.x.multiply(this.zInv).mod(this.curve.p)
14029 }
14030})
14031
14032Object.defineProperty(Point.prototype, 'affineY', {
14033 get: function() {
14034 return this.y.multiply(this.zInv).mod(this.curve.p)
14035 }
14036})
14037
14038Point.fromAffine = function(curve, x, y) {
14039 return new Point(curve, x, y, BigInteger.ONE)
14040}
14041
14042Point.prototype.equals = function(other) {
14043 if (other === this) return true
14044 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
14045 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
14046
14047 // u = Y2 * Z1 - Y1 * Z2
14048 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
14049
14050 if (u.signum() !== 0) return false
14051
14052 // v = X2 * Z1 - X1 * Z2
14053 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
14054
14055 return v.signum() === 0
14056}
14057
14058Point.prototype.negate = function() {
14059 var y = this.curve.p.subtract(this.y)
14060
14061 return new Point(this.curve, this.x, y, this.z)
14062}
14063
14064Point.prototype.add = function(b) {
14065 if (this.curve.isInfinity(this)) return b
14066 if (this.curve.isInfinity(b)) return this
14067
14068 var x1 = this.x
14069 var y1 = this.y
14070 var x2 = b.x
14071 var y2 = b.y
14072
14073 // u = Y2 * Z1 - Y1 * Z2
14074 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
14075 // v = X2 * Z1 - X1 * Z2
14076 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
14077
14078 if (v.signum() === 0) {
14079 if (u.signum() === 0) {
14080 return this.twice() // this == b, so double
14081 }
14082
14083 return this.curve.infinity // this = -b, so infinity
14084 }
14085
14086 var v2 = v.square()
14087 var v3 = v2.multiply(v)
14088 var x1v2 = x1.multiply(v2)
14089 var zu2 = u.square().multiply(this.z)
14090
14091 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
14092 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
14093 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
14094 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)
14095 // z3 = v^3 * z1 * z2
14096 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
14097
14098 return new Point(this.curve, x3, y3, z3)
14099}
14100
14101Point.prototype.twice = function() {
14102 if (this.curve.isInfinity(this)) return this
14103 if (this.y.signum() === 0) return this.curve.infinity
14104
14105 var x1 = this.x
14106 var y1 = this.y
14107
14108 var y1z1 = y1.multiply(this.z)
14109 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
14110 var a = this.curve.a
14111
14112 // w = 3 * x1^2 + a * z1^2
14113 var w = x1.square().multiply(THREE)
14114
14115 if (a.signum() !== 0) {
14116 w = w.add(this.z.square().multiply(a))
14117 }
14118
14119 w = w.mod(this.curve.p)
14120 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
14121 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
14122 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
14123 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
14124 // z3 = 8 * (y1 * z1)^3
14125 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
14126
14127 return new Point(this.curve, x3, y3, z3)
14128}
14129
14130// Simple NAF (Non-Adjacent Form) multiplication algorithm
14131// TODO: modularize the multiplication algorithm
14132Point.prototype.multiply = function(k) {
14133 if (this.curve.isInfinity(this)) return this
14134 if (k.signum() === 0) return this.curve.infinity
14135
14136 var e = k
14137 var h = e.multiply(THREE)
14138
14139 var neg = this.negate()
14140 var R = this
14141
14142 for (var i = h.bitLength() - 2; i > 0; --i) {
14143 R = R.twice()
14144
14145 var hBit = h.testBit(i)
14146 var eBit = e.testBit(i)
14147
14148 if (hBit != eBit) {
14149 R = R.add(hBit ? this : neg)
14150 }
14151 }
14152
14153 return R
14154}
14155
14156// Compute this*j + x*k (simultaneous multiplication)
14157Point.prototype.multiplyTwo = function(j, x, k) {
14158 var i
14159
14160 if (j.bitLength() > k.bitLength())
14161 i = j.bitLength() - 1
14162 else
14163 i = k.bitLength() - 1
14164
14165 var R = this.curve.infinity
14166 var both = this.add(x)
14167
14168 while (i >= 0) {
14169 R = R.twice()
14170
14171 var jBit = j.testBit(i)
14172 var kBit = k.testBit(i)
14173
14174 if (jBit) {
14175 if (kBit) {
14176 R = R.add(both)
14177
14178 } else {
14179 R = R.add(this)
14180 }
14181
14182 } else {
14183 if (kBit) {
14184 R = R.add(x)
14185 }
14186 }
14187 --i
14188 }
14189
14190 return R
14191}
14192
14193Point.prototype.getEncoded = function(compressed) {
14194 if (compressed == undefined) compressed = this.compressed
14195 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
14196
14197 var x = this.affineX
14198 var y = this.affineY
14199
14200 var buffer
14201
14202 // Determine size of q in bytes
14203 var byteLength = Math.floor((this.curve.p.bitLength() + 7) / 8)
14204
14205 // 0x02/0x03 | X
14206 if (compressed) {
14207 buffer = new Buffer(1 + byteLength)
14208 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
14209
14210 // 0x04 | X | Y
14211 } else {
14212 buffer = new Buffer(1 + byteLength + byteLength)
14213 buffer.writeUInt8(0x04, 0)
14214
14215 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
14216 }
14217
14218 x.toBuffer(byteLength).copy(buffer, 1)
14219
14220 return buffer
14221}
14222
14223Point.decodeFrom = function(curve, buffer) {
14224 var type = buffer.readUInt8(0)
14225 var compressed = (type !== 4)
14226
14227 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
14228 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
14229
14230 var Q
14231 if (compressed) {
14232 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
14233 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
14234
14235 var isOdd = (type === 0x03)
14236 Q = curve.pointFromX(isOdd, x)
14237
14238 } else {
14239 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
14240
14241 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
14242 Q = Point.fromAffine(curve, x, y)
14243 }
14244
14245 Q.compressed = compressed
14246 return Q
14247}
14248
14249Point.prototype.toString = function () {
14250 if (this.curve.isInfinity(this)) return '(INFINITY)'
14251
14252 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
14253}
14254
14255module.exports = Point
14256
14257}).call(this,require("buffer").Buffer)
14258},{"assert":5,"bigi":3,"buffer":7}],52:[function(require,module,exports){
14259(function (process,global,Buffer){
14260'use strict';
14261
14262var crypto = global.crypto || global.msCrypto
14263if(crypto && crypto.getRandomValues) {
14264 module.exports = randomBytes;
14265} else {
14266 module.exports = oldBrowser;
14267}
14268function randomBytes(size, cb) {
14269 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
14270 /* This will not work in older browsers.
14271 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
14272 */
14273
14274 crypto.getRandomValues(bytes);
14275 if (typeof cb === 'function') {
14276 return process.nextTick(function () {
14277 cb(null, bytes);
14278 });
14279 }
14280 return bytes;
14281}
14282function oldBrowser() {
14283 throw new Error(
14284 'secure random number generation not supported by this browser\n'+
14285 'use chrome, FireFox or Internet Explorer 11'
14286 )
14287}
14288
14289}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
14290},{"_process":14,"buffer":7}],53:[function(require,module,exports){
14291(function (Buffer){
14292'use strict';
14293
14294function getFunctionName(fn) {
14295 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1];
14296}
14297
14298function getTypeTypeName(type) {
14299 if (nativeTypes.Function(type)) {
14300 type = type.toJSON ? type.toJSON() : getFunctionName(type);
14301 }
14302 if (nativeTypes.Object(type)) return JSON.stringify(type);
14303
14304 return type;
14305}
14306
14307function getValueTypeName(value) {
14308 if (nativeTypes.Null(value)) return '';
14309
14310 return getFunctionName(value.constructor);
14311}
14312
14313function tfErrorString(type, value) {
14314 var typeTypeName = getTypeTypeName(type);
14315 var valueTypeName = getValueTypeName(value);
14316
14317 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
14318}
14319
14320function tfPropertyErrorString(type, name, value) {
14321 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
14322}
14323
14324var nativeTypes = {
14325 Array: (function (_Array) {
14326 function Array(_x) {
14327 return _Array.apply(this, arguments);
14328 }
14329
14330 Array.toString = function () {
14331 return _Array.toString();
14332 };
14333
14334 return Array;
14335 })(function (value) {
14336 return value !== null && value !== undefined && value.constructor === Array;
14337 }),
14338 Boolean: function Boolean(value) {
14339 return typeof value === 'boolean';
14340 },
14341 Buffer: (function (_Buffer) {
14342 function Buffer(_x2) {
14343 return _Buffer.apply(this, arguments);
14344 }
14345
14346 Buffer.toString = function () {
14347 return _Buffer.toString();
14348 };
14349
14350 return Buffer;
14351 })(function (value) {
14352 return Buffer.isBuffer(value);
14353 }),
14354 Function: function Function(value) {
14355 return typeof value === 'function';
14356 },
14357 Null: function Null(value) {
14358 return value === undefined || value === null;
14359 },
14360 Number: function Number(value) {
14361 return typeof value === 'number';
14362 },
14363 Object: function Object(value) {
14364 return typeof value === 'object';
14365 },
14366 String: function String(value) {
14367 return typeof value === 'string';
14368 },
14369 '': function _() {
14370 return true;
14371 }
14372};
14373
14374function tJSON(type) {
14375 return type && type.toJSON ? type.toJSON() : type;
14376}
14377
14378function sJSON(type) {
14379 var json = tJSON(type);
14380 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
14381}
14382
14383var otherTypes = {
14384 arrayOf: function arrayOf(type) {
14385 function arrayOf(value, strict) {
14386 try {
14387 return nativeTypes.Array(value) && value.every(function (x) {
14388 return typeforce(type, x, strict);
14389 });
14390 } catch (e) {
14391 return false;
14392 }
14393 }
14394 arrayOf.toJSON = function () {
14395 return [tJSON(type)];
14396 };
14397
14398 return arrayOf;
14399 },
14400
14401 maybe: function maybe(type) {
14402 function maybe(value, strict) {
14403 return nativeTypes.Null(value) || typeforce(type, value, strict);
14404 }
14405 maybe.toJSON = function () {
14406 return '?' + sJSON(type);
14407 };
14408
14409 return maybe;
14410 },
14411
14412 object: function object(type) {
14413 function object(value, strict) {
14414 typeforce(nativeTypes.Object, value, strict);
14415
14416 var propertyName, propertyType, propertyValue;
14417
14418 try {
14419 for (propertyName in type) {
14420 propertyType = type[propertyName];
14421 propertyValue = value[propertyName];
14422
14423 typeforce(propertyType, propertyValue, strict);
14424 }
14425 } catch (e) {
14426 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
14427 }
14428
14429 if (strict) {
14430 for (propertyName in value) {
14431 if (type[propertyName]) continue;
14432
14433 throw new TypeError('Unexpected property "' + propertyName + '"');
14434 }
14435 }
14436
14437 return true;
14438 }
14439 object.toJSON = function () {
14440 return type;
14441 };
14442
14443 return object;
14444 },
14445
14446 oneOf: function oneOf() {
14447 for (var _len = arguments.length, types = Array(_len), _key = 0; _key < _len; _key++) {
14448 types[_key] = arguments[_key];
14449 }
14450
14451 function oneOf(value, strict) {
14452 return types.some(function (type) {
14453 try {
14454 return typeforce(type, value, strict);
14455 } catch (e) {
14456 return false;
14457 }
14458 });
14459 }
14460 oneOf.toJSON = function () {
14461 return types.map(sJSON).join('|');
14462 };
14463
14464 return oneOf;
14465 },
14466
14467 quacksLike: function quacksLike(type) {
14468 function quacksLike(value, strict) {
14469 return type === getValueTypeName(value);
14470 }
14471 quacksLike.toJSON = function () {
14472 return type;
14473 };
14474
14475 return quacksLike;
14476 },
14477
14478 tuple: function tuple() {
14479 for (var _len2 = arguments.length, types = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
14480 types[_key2] = arguments[_key2];
14481 }
14482
14483 function tuple(value, strict) {
14484 return types.every(function (type, i) {
14485 return typeforce(type, value[i], strict);
14486 });
14487 }
14488 tuple.toJSON = function () {
14489 return '(' + types.map(sJSON).join(', ') + ')';
14490 };
14491
14492 return tuple;
14493 },
14494
14495 value: function value(expected) {
14496 function value(actual) {
14497 return actual === expected;
14498 }
14499 value.toJSON = function () {
14500 return expected;
14501 };
14502
14503 return value;
14504 }
14505};
14506
14507function compile(type) {
14508 if (nativeTypes.String(type)) {
14509 if (type[0] === '?') return otherTypes.maybe(compile(type.slice(1)));
14510
14511 return nativeTypes[type] || otherTypes.quacksLike(type);
14512 } else if (type && nativeTypes.Object(type)) {
14513 if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[0]));
14514
14515 var compiled = {};
14516
14517 for (var propertyName in type) {
14518 compiled[propertyName] = compile(type[propertyName]);
14519 }
14520
14521 return otherTypes.object(compiled);
14522 } else if (nativeTypes.Function(type)) {
14523 return type;
14524 }
14525
14526 return otherTypes.value(type);
14527}
14528
14529function typeforce(_x3, _x4, _x5) {
14530 var _again = true;
14531
14532 _function: while (_again) {
14533 var type = _x3,
14534 value = _x4,
14535 strict = _x5;
14536 _again = false;
14537
14538 if (nativeTypes.Function(type)) {
14539 if (type(value, strict)) return true;
14540
14541 throw new TypeError(tfErrorString(type, value));
14542 }
14543
14544 // JIT
14545 _x3 = compile(type);
14546 _x4 = value;
14547 _x5 = strict;
14548 _again = true;
14549 continue _function;
14550 }
14551}
14552
14553// assign all types to typeforce function
14554var typeName;
14555Object.keys(nativeTypes).forEach(function (typeName) {
14556 var nativeType = nativeTypes[typeName];
14557 nativeType.toJSON = function () {
14558 return typeName;
14559 };
14560
14561 typeforce[typeName] = nativeType;
14562});
14563
14564for (typeName in otherTypes) {
14565 typeforce[typeName] = otherTypes[typeName];
14566}
14567
14568module.exports = typeforce;
14569module.exports.compile = compile;
14570}).call(this,require("buffer").Buffer)
14571},{"buffer":7}],54:[function(require,module,exports){
14572(function (Buffer){
14573var assert = require('assert')
14574var base58check = require('bs58check')
14575var typeForce = require('typeforce')
14576var networks = require('./networks')
14577var scripts = require('./scripts')
14578
14579function findScriptTypeByVersion (version) {
14580 for (var networkName in networks) {
14581 var network = networks[networkName]
14582
14583 if (version === network.pubKeyHash) return 'pubkeyhash'
14584 if (version === network.scriptHash) return 'scripthash'
14585 }
14586}
14587
14588function Address (hash, version) {
14589 typeForce('Buffer', hash)
14590
14591 assert.strictEqual(hash.length, 20, 'Invalid hash length')
14592 assert.strictEqual(version & 0xff, version, 'Invalid version byte')
14593
14594 this.hash = hash
14595 this.version = version
14596}
14597
14598Address.fromBase58Check = function (string) {
14599 var payload = base58check.decode(string)
14600 var version = payload.readUInt8(0)
14601 var hash = payload.slice(1)
14602
14603 return new Address(hash, version)
14604}
14605
14606Address.fromOutputScript = function (script, network) {
14607 network = network || networks.bitcoin
14608
14609 if (scripts.isPubKeyHashOutput(script)) return new Address(script.chunks[2], network.pubKeyHash)
14610 if (scripts.isScriptHashOutput(script)) return new Address(script.chunks[1], network.scriptHash)
14611
14612 assert(false, script.toASM() + ' has no matching Address')
14613}
14614
14615Address.prototype.toBase58Check = function () {
14616 var payload = new Buffer(21)
14617 payload.writeUInt8(this.version, 0)
14618 this.hash.copy(payload, 1)
14619
14620 return base58check.encode(payload)
14621}
14622
14623Address.prototype.toOutputScript = function () {
14624 var scriptType = findScriptTypeByVersion(this.version)
14625
14626 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
14627 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
14628
14629 assert(false, this.toString() + ' has no matching Script')
14630}
14631
14632Address.prototype.toString = Address.prototype.toBase58Check
14633
14634module.exports = Address
14635
14636}).call(this,require("buffer").Buffer)
14637},{"./networks":66,"./scripts":69,"assert":5,"bs58check":31,"buffer":7,"typeforce":53}],55:[function(require,module,exports){
14638var bs58check = require('bs58check')
14639
14640function decode () {
14641 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
14642
14643 return bs58check.decode.apply(undefined, arguments)
14644}
14645
14646function encode () {
14647 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
14648
14649 return bs58check.encode.apply(undefined, arguments)
14650}
14651
14652module.exports = {
14653 decode: decode,
14654 encode: encode
14655}
14656
14657},{"bs58check":31}],56:[function(require,module,exports){
14658(function (Buffer){
14659var assert = require('assert')
14660var bufferutils = require('./bufferutils')
14661var crypto = require('./crypto')
14662
14663var Transaction = require('./transaction')
14664
14665function Block () {
14666 this.version = 1
14667 this.prevHash = null
14668 this.merkleRoot = null
14669 this.timestamp = 0
14670 this.bits = 0
14671 this.nonce = 0
14672}
14673
14674Block.fromBuffer = function (buffer) {
14675 assert(buffer.length >= 80, 'Buffer too small (< 80 bytes)')
14676
14677 var offset = 0
14678 function readSlice (n) {
14679 offset += n
14680 return buffer.slice(offset - n, offset)
14681 }
14682
14683 function readUInt32 () {
14684 var i = buffer.readUInt32LE(offset)
14685 offset += 4
14686 return i
14687 }
14688
14689 var block = new Block()
14690 block.version = readUInt32()
14691 block.prevHash = readSlice(32)
14692 block.merkleRoot = readSlice(32)
14693 block.timestamp = readUInt32()
14694 block.bits = readUInt32()
14695 block.nonce = readUInt32()
14696
14697 if (buffer.length === 80) return block
14698
14699 function readVarInt () {
14700 var vi = bufferutils.readVarInt(buffer, offset)
14701 offset += vi.size
14702 return vi.number
14703 }
14704
14705 // FIXME: poor performance
14706 function readTransaction () {
14707 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
14708
14709 offset += tx.toBuffer().length
14710 return tx
14711 }
14712
14713 var nTransactions = readVarInt()
14714 block.transactions = []
14715
14716 for (var i = 0; i < nTransactions; ++i) {
14717 var tx = readTransaction()
14718 block.transactions.push(tx)
14719 }
14720
14721 return block
14722}
14723
14724Block.fromHex = function (hex) {
14725 return Block.fromBuffer(new Buffer(hex, 'hex'))
14726}
14727
14728Block.prototype.getHash = function () {
14729 return crypto.hash256(this.toBuffer(true))
14730}
14731
14732Block.prototype.getId = function () {
14733 return bufferutils.reverse(this.getHash()).toString('hex')
14734}
14735
14736Block.prototype.getUTCDate = function () {
14737 var date = new Date(0) // epoch
14738 date.setUTCSeconds(this.timestamp)
14739
14740 return date
14741}
14742
14743Block.prototype.toBuffer = function (headersOnly) {
14744 var buffer = new Buffer(80)
14745
14746 var offset = 0
14747 function writeSlice (slice) {
14748 slice.copy(buffer, offset)
14749 offset += slice.length
14750 }
14751
14752 function writeUInt32 (i) {
14753 buffer.writeUInt32LE(i, offset)
14754 offset += 4
14755 }
14756
14757 writeUInt32(this.version)
14758 writeSlice(this.prevHash)
14759 writeSlice(this.merkleRoot)
14760 writeUInt32(this.timestamp)
14761 writeUInt32(this.bits)
14762 writeUInt32(this.nonce)
14763
14764 if (headersOnly || !this.transactions) return buffer
14765
14766 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
14767 var txBuffers = this.transactions.map(function (tx) {
14768 return tx.toBuffer()
14769 })
14770
14771 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
14772}
14773
14774Block.prototype.toHex = function (headersOnly) {
14775 return this.toBuffer(headersOnly).toString('hex')
14776}
14777
14778module.exports = Block
14779
14780}).call(this,require("buffer").Buffer)
14781},{"./bufferutils":57,"./crypto":58,"./transaction":70,"assert":5,"buffer":7}],57:[function(require,module,exports){
14782(function (Buffer){
14783var assert = require('assert')
14784var opcodes = require('./opcodes')
14785
14786// https://github.com/feross/buffer/blob/master/index.js#L1127
14787function verifuint (value, max) {
14788 assert(typeof value === 'number', 'cannot write a non-number as a number')
14789 assert(value >= 0, 'specified a negative value for writing an unsigned value')
14790 assert(value <= max, 'value is larger than maximum value for type')
14791 assert(Math.floor(value) === value, 'value has a fractional component')
14792}
14793
14794function pushDataSize (i) {
14795 return i < opcodes.OP_PUSHDATA1 ? 1
14796 : i < 0xff ? 2
14797 : i < 0xffff ? 3
14798 : 5
14799}
14800
14801function readPushDataInt (buffer, offset) {
14802 var opcode = buffer.readUInt8(offset)
14803 var number, size
14804
14805 // ~6 bit
14806 if (opcode < opcodes.OP_PUSHDATA1) {
14807 number = opcode
14808 size = 1
14809
14810 // 8 bit
14811 } else if (opcode === opcodes.OP_PUSHDATA1) {
14812 if (offset + 2 > buffer.length) return null
14813 number = buffer.readUInt8(offset + 1)
14814 size = 2
14815
14816 // 16 bit
14817 } else if (opcode === opcodes.OP_PUSHDATA2) {
14818 if (offset + 3 > buffer.length) return null
14819 number = buffer.readUInt16LE(offset + 1)
14820 size = 3
14821
14822 // 32 bit
14823 } else {
14824 if (offset + 5 > buffer.length) return null
14825 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
14826
14827 number = buffer.readUInt32LE(offset + 1)
14828 size = 5
14829 }
14830
14831 return {
14832 opcode: opcode,
14833 number: number,
14834 size: size
14835 }
14836}
14837
14838function readUInt64LE (buffer, offset) {
14839 var a = buffer.readUInt32LE(offset)
14840 var b = buffer.readUInt32LE(offset + 4)
14841 b *= 0x100000000
14842
14843 verifuint(b + a, 0x001fffffffffffff)
14844
14845 return b + a
14846}
14847
14848function readVarInt (buffer, offset) {
14849 var t = buffer.readUInt8(offset)
14850 var number, size
14851
14852 // 8 bit
14853 if (t < 253) {
14854 number = t
14855 size = 1
14856
14857 // 16 bit
14858 } else if (t < 254) {
14859 number = buffer.readUInt16LE(offset + 1)
14860 size = 3
14861
14862 // 32 bit
14863 } else if (t < 255) {
14864 number = buffer.readUInt32LE(offset + 1)
14865 size = 5
14866
14867 // 64 bit
14868 } else {
14869 number = readUInt64LE(buffer, offset + 1)
14870 size = 9
14871 }
14872
14873 return {
14874 number: number,
14875 size: size
14876 }
14877}
14878
14879function writePushDataInt (buffer, number, offset) {
14880 var size = pushDataSize(number)
14881
14882 // ~6 bit
14883 if (size === 1) {
14884 buffer.writeUInt8(number, offset)
14885
14886 // 8 bit
14887 } else if (size === 2) {
14888 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
14889 buffer.writeUInt8(number, offset + 1)
14890
14891 // 16 bit
14892 } else if (size === 3) {
14893 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
14894 buffer.writeUInt16LE(number, offset + 1)
14895
14896 // 32 bit
14897 } else {
14898 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
14899 buffer.writeUInt32LE(number, offset + 1)
14900 }
14901
14902 return size
14903}
14904
14905function writeUInt64LE (buffer, value, offset) {
14906 verifuint(value, 0x001fffffffffffff)
14907
14908 buffer.writeInt32LE(value & -1, offset)
14909 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
14910}
14911
14912function varIntSize (i) {
14913 return i < 253 ? 1
14914 : i < 0x10000 ? 3
14915 : i < 0x100000000 ? 5
14916 : 9
14917}
14918
14919function writeVarInt (buffer, number, offset) {
14920 var size = varIntSize(number)
14921
14922 // 8 bit
14923 if (size === 1) {
14924 buffer.writeUInt8(number, offset)
14925
14926 // 16 bit
14927 } else if (size === 3) {
14928 buffer.writeUInt8(253, offset)
14929 buffer.writeUInt16LE(number, offset + 1)
14930
14931 // 32 bit
14932 } else if (size === 5) {
14933 buffer.writeUInt8(254, offset)
14934 buffer.writeUInt32LE(number, offset + 1)
14935
14936 // 64 bit
14937 } else {
14938 buffer.writeUInt8(255, offset)
14939 writeUInt64LE(buffer, number, offset + 1)
14940 }
14941
14942 return size
14943}
14944
14945function varIntBuffer (i) {
14946 var size = varIntSize(i)
14947 var buffer = new Buffer(size)
14948 writeVarInt(buffer, i, 0)
14949
14950 return buffer
14951}
14952
14953function reverse (buffer) {
14954 var buffer2 = new Buffer(buffer)
14955 Array.prototype.reverse.call(buffer2)
14956 return buffer2
14957}
14958
14959module.exports = {
14960 pushDataSize: pushDataSize,
14961 readPushDataInt: readPushDataInt,
14962 readUInt64LE: readUInt64LE,
14963 readVarInt: readVarInt,
14964 reverse: reverse,
14965 varIntBuffer: varIntBuffer,
14966 varIntSize: varIntSize,
14967 writePushDataInt: writePushDataInt,
14968 writeUInt64LE: writeUInt64LE,
14969 writeVarInt: writeVarInt
14970}
14971
14972}).call(this,require("buffer").Buffer)
14973},{"./opcodes":67,"assert":5,"buffer":7}],58:[function(require,module,exports){
14974var createHash = require('create-hash')
14975
14976function hash160 (buffer) {
14977 return ripemd160(sha256(buffer))
14978}
14979
14980function hash256 (buffer) {
14981 return sha256(sha256(buffer))
14982}
14983
14984function ripemd160 (buffer) {
14985 return createHash('rmd160').update(buffer).digest()
14986}
14987
14988function sha1 (buffer) {
14989 return createHash('sha1').update(buffer).digest()
14990}
14991
14992function sha256 (buffer) {
14993 return createHash('sha256').update(buffer).digest()
14994}
14995
14996// FIXME: Name not consistent with others
14997var createHmac = require('create-hmac')
14998
14999function HmacSHA256 (buffer, secret) {
15000 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
15001 return createHmac('sha256', secret).update(buffer).digest()
15002}
15003
15004function HmacSHA512 (buffer, secret) {
15005 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
15006 return createHmac('sha512', secret).update(buffer).digest()
15007}
15008
15009module.exports = {
15010 ripemd160: ripemd160,
15011 sha1: sha1,
15012 sha256: sha256,
15013 hash160: hash160,
15014 hash256: hash256,
15015 HmacSHA256: HmacSHA256,
15016 HmacSHA512: HmacSHA512
15017}
15018
15019},{"create-hash":32,"create-hmac":45}],59:[function(require,module,exports){
15020(function (Buffer){
15021var assert = require('assert')
15022var createHmac = require('create-hmac')
15023var typeForce = require('typeforce')
15024
15025var BigInteger = require('bigi')
15026var ECSignature = require('./ecsignature')
15027
15028var ZERO = new Buffer([0])
15029var ONE = new Buffer([1])
15030
15031// https://tools.ietf.org/html/rfc6979#section-3.2
15032function deterministicGenerateK (curve, hash, d, checkSig) {
15033 typeForce('Buffer', hash)
15034 typeForce('BigInteger', d)
15035
15036 // FIXME: remove/uncomment for 2.0.0
15037 // typeForce('Function', checkSig)
15038
15039 if (typeof checkSig !== 'function') {
15040 console.warn('deterministicGenerateK requires a checkSig callback in 2.0.0, see #337 for more information')
15041
15042 checkSig = function (k) {
15043 var G = curve.G
15044 var n = curve.n
15045 var e = BigInteger.fromBuffer(hash)
15046
15047 var Q = G.multiply(k)
15048
15049 if (curve.isInfinity(Q))
15050 return false
15051
15052 var r = Q.affineX.mod(n)
15053 if (r.signum() === 0)
15054 return false
15055
15056 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
15057 if (s.signum() === 0)
15058 return false
15059
15060 return true
15061 }
15062 }
15063
15064 // sanity check
15065 assert.equal(hash.length, 32, 'Hash must be 256 bit')
15066
15067 var x = d.toBuffer(32)
15068 var k = new Buffer(32)
15069 var v = new Buffer(32)
15070
15071 // Step A, ignored as hash already provided
15072 // Step B
15073 v.fill(1)
15074
15075 // Step C
15076 k.fill(0)
15077
15078 // Step D
15079 k = createHmac('sha256', k)
15080 .update(v)
15081 .update(ZERO)
15082 .update(x)
15083 .update(hash)
15084 .digest()
15085
15086 // Step E
15087 v = createHmac('sha256', k).update(v).digest()
15088
15089 // Step F
15090 k = createHmac('sha256', k)
15091 .update(v)
15092 .update(ONE)
15093 .update(x)
15094 .update(hash)
15095 .digest()
15096
15097 // Step G
15098 v = createHmac('sha256', k).update(v).digest()
15099
15100 // Step H1/H2a, ignored as tlen === qlen (256 bit)
15101 // Step H2b
15102 v = createHmac('sha256', k).update(v).digest()
15103
15104 var T = BigInteger.fromBuffer(v)
15105
15106 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
15107 while ((T.signum() <= 0) || (T.compareTo(curve.n) >= 0) || !checkSig(T)) {
15108 k = createHmac('sha256', k)
15109 .update(v)
15110 .update(ZERO)
15111 .digest()
15112
15113 v = createHmac('sha256', k).update(v).digest()
15114
15115 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
15116 // Step H2b again
15117 v = createHmac('sha256', k).update(v).digest()
15118 T = BigInteger.fromBuffer(v)
15119 }
15120
15121 return T
15122}
15123
15124function sign (curve, hash, d) {
15125 var r, s
15126
15127 var e = BigInteger.fromBuffer(hash)
15128 var n = curve.n
15129 var G = curve.G
15130
15131 deterministicGenerateK(curve, hash, d, function (k) {
15132 var Q = G.multiply(k)
15133
15134 if (curve.isInfinity(Q))
15135 return false
15136
15137 r = Q.affineX.mod(n)
15138 if (r.signum() === 0)
15139 return false
15140
15141 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
15142 if (s.signum() === 0)
15143 return false
15144
15145 return true
15146 })
15147
15148 var N_OVER_TWO = n.shiftRight(1)
15149
15150 // enforce low S values, see bip62: 'low s values in signatures'
15151 if (s.compareTo(N_OVER_TWO) > 0) {
15152 s = n.subtract(s)
15153 }
15154
15155 return new ECSignature(r, s)
15156}
15157
15158function verifyRaw (curve, e, signature, Q) {
15159 var n = curve.n
15160 var G = curve.G
15161
15162 var r = signature.r
15163 var s = signature.s
15164
15165 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
15166 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
15167 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
15168
15169 // c = s^-1 mod n
15170 var c = s.modInverse(n)
15171
15172 // 1.4.4 Compute u1 = es^−1 mod n
15173 // u2 = rs^−1 mod n
15174 var u1 = e.multiply(c).mod(n)
15175 var u2 = r.multiply(c).mod(n)
15176
15177 // 1.4.5 Compute R = (xR, yR) = u1G + u2Q
15178 var R = G.multiplyTwo(u1, Q, u2)
15179 var v = R.affineX.mod(n)
15180
15181 // 1.4.5 (cont.) Enforce R is not at infinity
15182 if (curve.isInfinity(R)) return false
15183
15184 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
15185 return v.equals(r)
15186}
15187
15188function verify (curve, hash, signature, Q) {
15189 // 1.4.2 H = Hash(M), already done by the user
15190 // 1.4.3 e = H
15191 var e = BigInteger.fromBuffer(hash)
15192
15193 return verifyRaw(curve, e, signature, Q)
15194}
15195
15196/**
15197 * Recover a public key from a signature.
15198 *
15199 * See SEC 1: Elliptic Curve Cryptography, section 4.1.6, "Public
15200 * Key Recovery Operation".
15201 *
15202 * http://www.secg.org/download/aid-780/sec1-v2.pdf
15203 */
15204function recoverPubKey (curve, e, signature, i) {
15205 assert.strictEqual(i & 3, i, 'Recovery param is more than two bits')
15206
15207 var n = curve.n
15208 var G = curve.G
15209
15210 var r = signature.r
15211 var s = signature.s
15212
15213 assert(r.signum() > 0 && r.compareTo(n) < 0, 'Invalid r value')
15214 assert(s.signum() > 0 && s.compareTo(n) < 0, 'Invalid s value')
15215
15216 // A set LSB signifies that the y-coordinate is odd
15217 var isYOdd = i & 1
15218
15219 // The more significant bit specifies whether we should use the
15220 // first or second candidate key.
15221 var isSecondKey = i >> 1
15222
15223 // 1.1 Let x = r + jn
15224 var x = isSecondKey ? r.add(n) : r
15225 var R = curve.pointFromX(isYOdd, x)
15226
15227 // 1.4 Check that nR is at infinity
15228 var nR = R.multiply(n)
15229 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
15230
15231 // Compute -e from e
15232 var eNeg = e.negate().mod(n)
15233
15234 // 1.6.1 Compute Q = r^-1 (sR - eG)
15235 // Q = r^-1 (sR + -eG)
15236 var rInv = r.modInverse(n)
15237
15238 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
15239 curve.validate(Q)
15240
15241 return Q
15242}
15243
15244/**
15245 * Calculate pubkey extraction parameter.
15246 *
15247 * When extracting a pubkey from a signature, we have to
15248 * distinguish four different cases. Rather than putting this
15249 * burden on the verifier, Bitcoin includes a 2-bit value with the
15250 * signature.
15251 *
15252 * This function simply tries all four cases and returns the value
15253 * that resulted in a successful pubkey recovery.
15254 */
15255function calcPubKeyRecoveryParam (curve, e, signature, Q) {
15256 for (var i = 0; i < 4; i++) {
15257 var Qprime = recoverPubKey(curve, e, signature, i)
15258
15259 // 1.6.2 Verify Q
15260 if (Qprime.equals(Q)) {
15261 return i
15262 }
15263 }
15264
15265 throw new Error('Unable to find valid recovery factor')
15266}
15267
15268module.exports = {
15269 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
15270 deterministicGenerateK: deterministicGenerateK,
15271 recoverPubKey: recoverPubKey,
15272 sign: sign,
15273 verify: verify,
15274 verifyRaw: verifyRaw
15275}
15276
15277}).call(this,require("buffer").Buffer)
15278},{"./ecsignature":62,"assert":5,"bigi":3,"buffer":7,"create-hmac":45,"typeforce":53}],60:[function(require,module,exports){
15279(function (Buffer){
15280var assert = require('assert')
15281var base58check = require('bs58check')
15282var ecdsa = require('./ecdsa')
15283var networks = require('./networks')
15284var randomBytes = require('randombytes')
15285var typeForce = require('typeforce')
15286
15287var BigInteger = require('bigi')
15288var ECPubKey = require('./ecpubkey')
15289
15290var ecurve = require('ecurve')
15291var secp256k1 = ecurve.getCurveByName('secp256k1')
15292
15293function ECKey (d, compressed) {
15294 assert(d.signum() > 0, 'Private key must be greater than 0')
15295 assert(d.compareTo(ECKey.curve.n) < 0, 'Private key must be less than the curve order')
15296
15297 var Q = ECKey.curve.G.multiply(d)
15298
15299 this.d = d
15300 this.pub = new ECPubKey(Q, compressed)
15301}
15302
15303// Constants
15304ECKey.curve = secp256k1
15305
15306// Static constructors
15307ECKey.fromWIF = function (string) {
15308 var payload = base58check.decode(string)
15309 var compressed = false
15310
15311 // Ignore the version byte
15312 payload = payload.slice(1)
15313
15314 if (payload.length === 33) {
15315 assert.strictEqual(payload[32], 0x01, 'Invalid compression flag')
15316
15317 // Truncate the compression flag
15318 payload = payload.slice(0, -1)
15319 compressed = true
15320 }
15321
15322 assert.equal(payload.length, 32, 'Invalid WIF payload length')
15323
15324 var d = BigInteger.fromBuffer(payload)
15325 return new ECKey(d, compressed)
15326}
15327
15328ECKey.makeRandom = function (compressed, rng) {
15329 rng = rng || randomBytes
15330
15331 var buffer = rng(32)
15332 typeForce('Buffer', buffer)
15333 assert.equal(buffer.length, 32, 'Expected 256-bit Buffer from RNG')
15334
15335 var d = BigInteger.fromBuffer(buffer)
15336 d = d.mod(ECKey.curve.n)
15337
15338 return new ECKey(d, compressed)
15339}
15340
15341// Export functions
15342ECKey.prototype.toWIF = function (network) {
15343 network = network || networks.bitcoin
15344
15345 var bufferLen = this.pub.compressed ? 34 : 33
15346 var buffer = new Buffer(bufferLen)
15347
15348 buffer.writeUInt8(network.wif, 0)
15349 this.d.toBuffer(32).copy(buffer, 1)
15350
15351 if (this.pub.compressed) {
15352 buffer.writeUInt8(0x01, 33)
15353 }
15354
15355 return base58check.encode(buffer)
15356}
15357
15358// Operations
15359ECKey.prototype.sign = function (hash) {
15360 return ecdsa.sign(ECKey.curve, hash, this.d)
15361}
15362
15363module.exports = ECKey
15364
15365}).call(this,require("buffer").Buffer)
15366},{"./ecdsa":59,"./ecpubkey":61,"./networks":66,"assert":5,"bigi":3,"bs58check":31,"buffer":7,"ecurve":49,"randombytes":52,"typeforce":53}],61:[function(require,module,exports){
15367(function (Buffer){
15368var crypto = require('./crypto')
15369var ecdsa = require('./ecdsa')
15370var typeForce = require('typeforce')
15371var networks = require('./networks')
15372
15373var Address = require('./address')
15374
15375var ecurve = require('ecurve')
15376var secp256k1 = ecurve.getCurveByName('secp256k1')
15377
15378function ECPubKey (Q, compressed) {
15379 if (compressed === undefined) {
15380 compressed = true
15381 }
15382
15383 typeForce('Point', Q)
15384 typeForce('Boolean', compressed)
15385
15386 this.compressed = compressed
15387 this.Q = Q
15388}
15389
15390// Constants
15391ECPubKey.curve = secp256k1
15392
15393// Static constructors
15394ECPubKey.fromBuffer = function (buffer) {
15395 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
15396 return new ECPubKey(Q, Q.compressed)
15397}
15398
15399ECPubKey.fromHex = function (hex) {
15400 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
15401}
15402
15403// Operations
15404ECPubKey.prototype.getAddress = function (network) {
15405 network = network || networks.bitcoin
15406
15407 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
15408}
15409
15410ECPubKey.prototype.verify = function (hash, signature) {
15411 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
15412}
15413
15414// Export functions
15415ECPubKey.prototype.toBuffer = function () {
15416 return this.Q.getEncoded(this.compressed)
15417}
15418
15419ECPubKey.prototype.toHex = function () {
15420 return this.toBuffer().toString('hex')
15421}
15422
15423module.exports = ECPubKey
15424
15425}).call(this,require("buffer").Buffer)
15426},{"./address":54,"./crypto":58,"./ecdsa":59,"./networks":66,"buffer":7,"ecurve":49,"typeforce":53}],62:[function(require,module,exports){
15427(function (Buffer){
15428var assert = require('assert')
15429var typeForce = require('typeforce')
15430
15431var BigInteger = require('bigi')
15432
15433function ECSignature (r, s) {
15434 typeForce('BigInteger', r)
15435 typeForce('BigInteger', s)
15436
15437 this.r = r
15438 this.s = s
15439}
15440
15441ECSignature.parseCompact = function (buffer) {
15442 assert.equal(buffer.length, 65, 'Invalid signature length')
15443 var i = buffer.readUInt8(0) - 27
15444
15445 // At most 3 bits
15446 assert.equal(i, i & 7, 'Invalid signature parameter')
15447 var compressed = !!(i & 4)
15448
15449 // Recovery param only
15450 i = i & 3
15451
15452 var r = BigInteger.fromBuffer(buffer.slice(1, 33))
15453 var s = BigInteger.fromBuffer(buffer.slice(33))
15454
15455 return {
15456 compressed: compressed,
15457 i: i,
15458 signature: new ECSignature(r, s)
15459 }
15460}
15461
15462ECSignature.fromDER = function (buffer) {
15463 assert.equal(buffer.readUInt8(0), 0x30, 'Not a DER sequence')
15464 assert.equal(buffer.readUInt8(1), buffer.length - 2, 'Invalid sequence length')
15465 assert.equal(buffer.readUInt8(2), 0x02, 'Expected a DER integer')
15466
15467 var rLen = buffer.readUInt8(3)
15468 assert(rLen > 0, 'R length is zero')
15469
15470 var offset = 4 + rLen
15471 assert.equal(buffer.readUInt8(offset), 0x02, 'Expected a DER integer (2)')
15472
15473 var sLen = buffer.readUInt8(offset + 1)
15474 assert(sLen > 0, 'S length is zero')
15475
15476 var rB = buffer.slice(4, offset)
15477 var sB = buffer.slice(offset + 2)
15478 offset += 2 + sLen
15479
15480 if (rLen > 1 && rB.readUInt8(0) === 0x00) {
15481 assert(rB.readUInt8(1) & 0x80, 'R value excessively padded')
15482 }
15483
15484 if (sLen > 1 && sB.readUInt8(0) === 0x00) {
15485 assert(sB.readUInt8(1) & 0x80, 'S value excessively padded')
15486 }
15487
15488 assert.equal(offset, buffer.length, 'Invalid DER encoding')
15489 var r = BigInteger.fromDERInteger(rB)
15490 var s = BigInteger.fromDERInteger(sB)
15491
15492 assert(r.signum() >= 0, 'R value is negative')
15493 assert(s.signum() >= 0, 'S value is negative')
15494
15495 return new ECSignature(r, s)
15496}
15497
15498// BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
15499ECSignature.parseScriptSignature = function (buffer) {
15500 var hashType = buffer.readUInt8(buffer.length - 1)
15501 var hashTypeMod = hashType & ~0x80
15502
15503 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
15504
15505 return {
15506 signature: ECSignature.fromDER(buffer.slice(0, -1)),
15507 hashType: hashType
15508 }
15509}
15510
15511ECSignature.prototype.toCompact = function (i, compressed) {
15512 if (compressed) {
15513 i += 4
15514 }
15515
15516 i += 27
15517
15518 var buffer = new Buffer(65)
15519 buffer.writeUInt8(i, 0)
15520
15521 this.r.toBuffer(32).copy(buffer, 1)
15522 this.s.toBuffer(32).copy(buffer, 33)
15523
15524 return buffer
15525}
15526
15527ECSignature.prototype.toDER = function () {
15528 var rBa = this.r.toDERInteger()
15529 var sBa = this.s.toDERInteger()
15530
15531 var sequence = []
15532
15533 // INTEGER
15534 sequence.push(0x02, rBa.length)
15535 sequence = sequence.concat(rBa)
15536
15537 // INTEGER
15538 sequence.push(0x02, sBa.length)
15539 sequence = sequence.concat(sBa)
15540
15541 // SEQUENCE
15542 sequence.unshift(0x30, sequence.length)
15543
15544 return new Buffer(sequence)
15545}
15546
15547ECSignature.prototype.toScriptSignature = function (hashType) {
15548 var hashTypeMod = hashType & ~0x80
15549 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
15550
15551 var hashTypeBuffer = new Buffer(1)
15552 hashTypeBuffer.writeUInt8(hashType, 0)
15553
15554 return Buffer.concat([this.toDER(), hashTypeBuffer])
15555}
15556
15557module.exports = ECSignature
15558
15559}).call(this,require("buffer").Buffer)
15560},{"assert":5,"bigi":3,"buffer":7,"typeforce":53}],63:[function(require,module,exports){
15561(function (Buffer){
15562var assert = require('assert')
15563var base58check = require('bs58check')
15564var bcrypto = require('./crypto')
15565var createHmac = require('create-hmac')
15566var typeForce = require('typeforce')
15567var networks = require('./networks')
15568
15569var BigInteger = require('bigi')
15570var ECKey = require('./eckey')
15571var ECPubKey = require('./ecpubkey')
15572
15573var ecurve = require('ecurve')
15574var curve = ecurve.getCurveByName('secp256k1')
15575
15576function findBIP32NetworkByVersion (version) {
15577 for (var name in networks) {
15578 var network = networks[name]
15579
15580 if (version === network.bip32.private || version === network.bip32.public) {
15581 return network
15582 }
15583 }
15584
15585 assert(false, 'Could not find network for ' + version.toString(16))
15586}
15587
15588function HDNode (K, chainCode, network) {
15589 network = network || networks.bitcoin
15590
15591 typeForce('Buffer', chainCode)
15592
15593 assert.equal(chainCode.length, 32, 'Expected chainCode length of 32, got ' + chainCode.length)
15594 assert(network.bip32, 'Unknown BIP32 constants for network')
15595
15596 this.chainCode = chainCode
15597 this.depth = 0
15598 this.index = 0
15599 this.parentFingerprint = 0x00000000
15600 this.network = network
15601
15602 if (K instanceof BigInteger) {
15603 this.privKey = new ECKey(K, true)
15604 this.pubKey = this.privKey.pub
15605 } else if (K instanceof ECKey) {
15606 assert(K.pub.compressed, 'ECKey must be compressed')
15607 this.privKey = K
15608 this.pubKey = K.pub
15609 } else if (K instanceof ECPubKey) {
15610 assert(K.compressed, 'ECPubKey must be compressed')
15611 this.pubKey = K
15612 } else {
15613 this.pubKey = new ECPubKey(K, true)
15614 }
15615}
15616
15617HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
15618HDNode.HIGHEST_BIT = 0x80000000
15619HDNode.LENGTH = 78
15620
15621HDNode.fromSeedBuffer = function (seed, network) {
15622 typeForce('Buffer', seed)
15623
15624 assert(seed.length >= 16, 'Seed should be at least 128 bits')
15625 assert(seed.length <= 64, 'Seed should be at most 512 bits')
15626
15627 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
15628 var IL = I.slice(0, 32)
15629 var IR = I.slice(32)
15630
15631 // In case IL is 0 or >= n, the master key is invalid
15632 // This is handled by `new ECKey` in the HDNode constructor
15633 var pIL = BigInteger.fromBuffer(IL)
15634
15635 return new HDNode(pIL, IR, network)
15636}
15637
15638HDNode.fromSeedHex = function (hex, network) {
15639 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
15640}
15641
15642HDNode.fromBase58 = function (string, network) {
15643 return HDNode.fromBuffer(base58check.decode(string), network, true)
15644}
15645
15646// FIXME: remove in 2.x.y
15647HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
15648 if (!__ignoreDeprecation) {
15649 console.warn('HDNode.fromBuffer() is deprecated for removal in 2.x.y, use fromBase58 instead')
15650 }
15651
15652 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
15653
15654 // 4 byte: version bytes
15655 var version = buffer.readUInt32BE(0)
15656
15657 if (network) {
15658 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
15659
15660 // auto-detect
15661 } else {
15662 network = findBIP32NetworkByVersion(version)
15663 }
15664
15665 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
15666 var depth = buffer.readUInt8(4)
15667
15668 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
15669 var parentFingerprint = buffer.readUInt32BE(5)
15670 if (depth === 0) {
15671 assert.strictEqual(parentFingerprint, 0x00000000, 'Invalid parent fingerprint')
15672 }
15673
15674 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
15675 // This is encoded in MSB order. (0x00000000 if master key)
15676 var index = buffer.readUInt32BE(9)
15677 assert(depth > 0 || index === 0, 'Invalid index')
15678
15679 // 32 bytes: the chain code
15680 var chainCode = buffer.slice(13, 45)
15681 var data, hd
15682
15683 // 33 bytes: private key data (0x00 + k)
15684 if (version === network.bip32.private) {
15685 assert.strictEqual(buffer.readUInt8(45), 0x00, 'Invalid private key')
15686 data = buffer.slice(46, 78)
15687 var d = BigInteger.fromBuffer(data)
15688 hd = new HDNode(d, chainCode, network)
15689
15690 // 33 bytes: public key data (0x02 + X or 0x03 + X)
15691 } else {
15692 data = buffer.slice(45, 78)
15693 var Q = ecurve.Point.decodeFrom(curve, data)
15694 assert.equal(Q.compressed, true, 'Invalid public key')
15695
15696 // Verify that the X coordinate in the public point corresponds to a point on the curve.
15697 // If not, the extended public key is invalid.
15698 curve.validate(Q)
15699
15700 hd = new HDNode(Q, chainCode, network)
15701 }
15702
15703 hd.depth = depth
15704 hd.index = index
15705 hd.parentFingerprint = parentFingerprint
15706
15707 return hd
15708}
15709
15710// FIXME: remove in 2.x.y
15711HDNode.fromHex = function (hex, network) {
15712 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
15713}
15714
15715HDNode.prototype.getIdentifier = function () {
15716 return bcrypto.hash160(this.pubKey.toBuffer())
15717}
15718
15719HDNode.prototype.getFingerprint = function () {
15720 return this.getIdentifier().slice(0, 4)
15721}
15722
15723HDNode.prototype.getAddress = function () {
15724 return this.pubKey.getAddress(this.network)
15725}
15726
15727HDNode.prototype.neutered = function () {
15728 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
15729 neutered.depth = this.depth
15730 neutered.index = this.index
15731 neutered.parentFingerprint = this.parentFingerprint
15732
15733 return neutered
15734}
15735
15736HDNode.prototype.toBase58 = function (isPrivate) {
15737 return base58check.encode(this.toBuffer(isPrivate, true))
15738}
15739
15740// FIXME: remove in 2.x.y
15741HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
15742 if (isPrivate === undefined) {
15743 isPrivate = !!this.privKey
15744
15745 // FIXME: remove in 2.x.y
15746 } else {
15747 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
15748 }
15749
15750 if (!__ignoreDeprecation) {
15751 console.warn('HDNode.toBuffer() is deprecated for removal in 2.x.y, use toBase58 instead')
15752 }
15753
15754 // Version
15755 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
15756 var buffer = new Buffer(HDNode.LENGTH)
15757
15758 // 4 bytes: version bytes
15759 buffer.writeUInt32BE(version, 0)
15760
15761 // Depth
15762 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
15763 buffer.writeUInt8(this.depth, 4)
15764
15765 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
15766 buffer.writeUInt32BE(this.parentFingerprint, 5)
15767
15768 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
15769 // This is encoded in Big endian. (0x00000000 if master key)
15770 buffer.writeUInt32BE(this.index, 9)
15771
15772 // 32 bytes: the chain code
15773 this.chainCode.copy(buffer, 13)
15774
15775 // 33 bytes: the public key or private key data
15776 if (isPrivate) {
15777 // FIXME: remove in 2.x.y
15778 assert(this.privKey, 'Missing private key')
15779
15780 // 0x00 + k for private keys
15781 buffer.writeUInt8(0, 45)
15782 this.privKey.d.toBuffer(32).copy(buffer, 46)
15783 } else {
15784 // X9.62 encoding for public keys
15785 this.pubKey.toBuffer().copy(buffer, 45)
15786 }
15787
15788 return buffer
15789}
15790
15791// FIXME: remove in 2.x.y
15792HDNode.prototype.toHex = function (isPrivate) {
15793 return this.toBuffer(isPrivate).toString('hex')
15794}
15795
15796// https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
15797HDNode.prototype.derive = function (index) {
15798 var isHardened = index >= HDNode.HIGHEST_BIT
15799 var indexBuffer = new Buffer(4)
15800 indexBuffer.writeUInt32BE(index, 0)
15801
15802 var data
15803
15804 // Hardened child
15805 if (isHardened) {
15806 assert(this.privKey, 'Could not derive hardened child key')
15807
15808 // data = 0x00 || ser256(kpar) || ser32(index)
15809 data = Buffer.concat([
15810 this.privKey.d.toBuffer(33),
15811 indexBuffer
15812 ])
15813
15814 // Normal child
15815 } else {
15816 // data = serP(point(kpar)) || ser32(index)
15817 // = serP(Kpar) || ser32(index)
15818 data = Buffer.concat([
15819 this.pubKey.toBuffer(),
15820 indexBuffer
15821 ])
15822 }
15823
15824 var I = createHmac('sha512', this.chainCode).update(data).digest()
15825 var IL = I.slice(0, 32)
15826 var IR = I.slice(32)
15827
15828 var pIL = BigInteger.fromBuffer(IL)
15829
15830 // In case parse256(IL) >= n, proceed with the next value for i
15831 if (pIL.compareTo(curve.n) >= 0) {
15832 return this.derive(index + 1)
15833 }
15834
15835 // Private parent key -> private child key
15836 var hd
15837 if (this.privKey) {
15838 // ki = parse256(IL) + kpar (mod n)
15839 var ki = pIL.add(this.privKey.d).mod(curve.n)
15840
15841 // In case ki == 0, proceed with the next value for i
15842 if (ki.signum() === 0) {
15843 return this.derive(index + 1)
15844 }
15845
15846 hd = new HDNode(ki, IR, this.network)
15847
15848 // Public parent key -> public child key
15849 } else {
15850 // Ki = point(parse256(IL)) + Kpar
15851 // = G*IL + Kpar
15852 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
15853
15854 // In case Ki is the point at infinity, proceed with the next value for i
15855 if (curve.isInfinity(Ki)) {
15856 return this.derive(index + 1)
15857 }
15858
15859 hd = new HDNode(Ki, IR, this.network)
15860 }
15861
15862 hd.depth = this.depth + 1
15863 hd.index = index
15864 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
15865
15866 return hd
15867}
15868
15869HDNode.prototype.deriveHardened = function (index) {
15870 // Only derives hardened private keys by default
15871 return this.derive(index + HDNode.HIGHEST_BIT)
15872}
15873
15874HDNode.prototype.toString = HDNode.prototype.toBase58
15875
15876module.exports = HDNode
15877
15878}).call(this,require("buffer").Buffer)
15879},{"./crypto":58,"./eckey":60,"./ecpubkey":61,"./networks":66,"assert":5,"bigi":3,"bs58check":31,"buffer":7,"create-hmac":45,"ecurve":49,"typeforce":53}],64:[function(require,module,exports){
15880module.exports = {
15881 Address: require('./address'),
15882 base58check: require('./base58check'),
15883 Block: require('./block'),
15884 bufferutils: require('./bufferutils'),
15885 crypto: require('./crypto'),
15886 ecdsa: require('./ecdsa'),
15887 ECKey: require('./eckey'),
15888 ECPubKey: require('./ecpubkey'),
15889 ECSignature: require('./ecsignature'),
15890 Message: require('./message'),
15891 opcodes: require('./opcodes'),
15892 HDNode: require('./hdnode'),
15893 Script: require('./script'),
15894 scripts: require('./scripts'),
15895 Transaction: require('./transaction'),
15896 TransactionBuilder: require('./transaction_builder'),
15897 networks: require('./networks'),
15898 Wallet: require('./wallet')
15899}
15900
15901},{"./address":54,"./base58check":55,"./block":56,"./bufferutils":57,"./crypto":58,"./ecdsa":59,"./eckey":60,"./ecpubkey":61,"./ecsignature":62,"./hdnode":63,"./message":65,"./networks":66,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"./transaction_builder":71,"./wallet":72}],65:[function(require,module,exports){
15902(function (Buffer){
15903var bufferutils = require('./bufferutils')
15904var crypto = require('./crypto')
15905var ecdsa = require('./ecdsa')
15906var networks = require('./networks')
15907
15908var BigInteger = require('bigi')
15909var ECPubKey = require('./ecpubkey')
15910var ECSignature = require('./ecsignature')
15911
15912var ecurve = require('ecurve')
15913var ecparams = ecurve.getCurveByName('secp256k1')
15914
15915function magicHash (message, network) {
15916 var magicPrefix = new Buffer(network.magicPrefix)
15917 var messageBuffer = new Buffer(message)
15918 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
15919
15920 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
15921 return crypto.hash256(buffer)
15922}
15923
15924function sign (privKey, message, network) {
15925 network = network || networks.bitcoin
15926
15927 var hash = magicHash(message, network)
15928 var signature = privKey.sign(hash)
15929 var e = BigInteger.fromBuffer(hash)
15930 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
15931
15932 return signature.toCompact(i, privKey.pub.compressed)
15933}
15934
15935// TODO: network could be implied from address
15936function verify (address, signature, message, network) {
15937 if (!Buffer.isBuffer(signature)) {
15938 signature = new Buffer(signature, 'base64')
15939 }
15940
15941 network = network || networks.bitcoin
15942
15943 var hash = magicHash(message, network)
15944 var parsed = ECSignature.parseCompact(signature)
15945 var e = BigInteger.fromBuffer(hash)
15946 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
15947
15948 var pubKey = new ECPubKey(Q, parsed.compressed)
15949 return pubKey.getAddress(network).toString() === address.toString()
15950}
15951
15952module.exports = {
15953 magicHash: magicHash,
15954 sign: sign,
15955 verify: verify
15956}
15957
15958}).call(this,require("buffer").Buffer)
15959},{"./bufferutils":57,"./crypto":58,"./ecdsa":59,"./ecpubkey":61,"./ecsignature":62,"./networks":66,"bigi":3,"buffer":7,"ecurve":49}],66:[function(require,module,exports){
15960// https://en.bitcoin.it/wiki/List_of_address_prefixes
15961// Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
15962
15963var networks = {
15964 bitcoin: {
15965 magicPrefix: '\x18Bitcoin Signed Message:\n',
15966 bip32: {
15967 public: 0x0488b21e,
15968 private: 0x0488ade4
15969 },
15970 pubKeyHash: 0x00,
15971 scriptHash: 0x05,
15972 wif: 0x80,
15973 dustThreshold: 546, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/core.h#L151-L162
15974 feePerKb: 10000, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/main.cpp#L53
15975 estimateFee: estimateFee('bitcoin')
15976 },
15977 testnet: {
15978 magicPrefix: '\x18Bitcoin Signed Message:\n',
15979 bip32: {
15980 public: 0x043587cf,
15981 private: 0x04358394
15982 },
15983 pubKeyHash: 0x6f,
15984 scriptHash: 0xc4,
15985 wif: 0xef,
15986 dustThreshold: 546,
15987 feePerKb: 10000,
15988 estimateFee: estimateFee('testnet')
15989 },
15990 litecoin: {
15991 magicPrefix: '\x19Litecoin Signed Message:\n',
15992 bip32: {
15993 public: 0x019da462,
15994 private: 0x019d9cfe
15995 },
15996 pubKeyHash: 0x30,
15997 scriptHash: 0x05,
15998 wif: 0xb0,
15999 dustThreshold: 0, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L360-L365
16000 dustSoftThreshold: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.h#L53
16001 feePerKb: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L56
16002 estimateFee: estimateFee('litecoin')
16003 },
16004 dogecoin: {
16005 magicPrefix: '\x19Dogecoin Signed Message:\n',
16006 bip32: {
16007 public: 0x02facafd,
16008 private: 0x02fac398
16009 },
16010 pubKeyHash: 0x1e,
16011 scriptHash: 0x16,
16012 wif: 0x9e,
16013 dustThreshold: 0, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/core.h#L155-L160
16014 dustSoftThreshold: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.h#L62
16015 feePerKb: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.cpp#L58
16016 estimateFee: estimateFee('dogecoin')
16017 },
16018 viacoin: {
16019 magicPrefix: '\x18Viacoin Signed Message:\n',
16020 bip32: {
16021 public: 0x0488b21e,
16022 private: 0x0488ade4
16023 },
16024 pubKeyHash: 0x47,
16025 scriptHash: 0x21,
16026 wif: 0xc7,
16027 dustThreshold: 560,
16028 dustSoftThreshold: 100000,
16029 feePerKb: 100000, //
16030 estimateFee: estimateFee('viacoin')
16031 },
16032 viacointestnet: {
16033 magicPrefix: '\x18Viacoin Signed Message:\n',
16034 bip32: {
16035 public: 0x043587cf,
16036 private: 0x04358394
16037 },
16038 pubKeyHash: 0x7f,
16039 scriptHash: 0xc4,
16040 wif: 0xff,
16041 dustThreshold: 560,
16042 dustSoftThreshold: 100000,
16043 feePerKb: 100000,
16044 estimateFee: estimateFee('viacointestnet')
16045 },
16046 gamerscoin: {
16047 magicPrefix: '\x19Gamerscoin Signed Message:\n',
16048 bip32: {
16049 public: 0x019da462,
16050 private: 0x019d9cfe
16051 },
16052 pubKeyHash: 0x26,
16053 scriptHash: 0x05,
16054 wif: 0xA6,
16055 dustThreshold: 0, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L358-L363
16056 dustSoftThreshold: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L51
16057 feePerKb: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L54
16058 estimateFee: estimateFee('gamerscoin')
16059 },
16060 jumbucks: {
16061 magicPrefix: '\x19Jumbucks Signed Message:\n',
16062 bip32: {
16063 public: 0x037a689a,
16064 private: 0x037a6460
16065 },
16066 pubKeyHash: 0x2b,
16067 scriptHash: 0x05,
16068 wif: 0xab,
16069 dustThreshold: 0,
16070 dustSoftThreshold: 10000,
16071 feePerKb: 10000,
16072 estimateFee: estimateFee('jumbucks')
16073 },
16074 zetacoin: {
16075 magicPrefix: '\x18Zetacoin Signed Message:\n',
16076 bip32: {
16077 public: 0x0488b21e,
16078 private: 0x0488ade4
16079 },
16080 pubKeyHash: 0x50,
16081 scriptHash: 0x09,
16082 wif: 0xe0,
16083 dustThreshold: 546, // https://github.com/zetacoin/zetacoin/blob/master/src/core.h#L159
16084 feePerKb: 10000, // https://github.com/zetacoin/zetacoin/blob/master/src/main.cpp#L54
16085 estimateFee: estimateFee('zetacoin')
16086 }
16087}
16088
16089function estimateFee (type) {
16090 return function (tx) {
16091 var network = networks[type]
16092 var baseFee = network.feePerKb
16093 var byteSize = tx.toBuffer().length
16094
16095 var fee = baseFee * Math.ceil(byteSize / 1000)
16096 if (network.dustSoftThreshold === undefined) return fee
16097
16098 tx.outs.forEach(function (e) {
16099 if (e.value < network.dustSoftThreshold) {
16100 fee += baseFee
16101 }
16102 })
16103
16104 return fee
16105 }
16106}
16107
16108module.exports = networks
16109
16110},{}],67:[function(require,module,exports){
16111module.exports = {
16112 // push value
16113 OP_FALSE: 0,
16114 OP_0: 0,
16115 OP_PUSHDATA1: 76,
16116 OP_PUSHDATA2: 77,
16117 OP_PUSHDATA4: 78,
16118 OP_1NEGATE: 79,
16119 OP_RESERVED: 80,
16120 OP_1: 81,
16121 OP_TRUE: 81,
16122 OP_2: 82,
16123 OP_3: 83,
16124 OP_4: 84,
16125 OP_5: 85,
16126 OP_6: 86,
16127 OP_7: 87,
16128 OP_8: 88,
16129 OP_9: 89,
16130 OP_10: 90,
16131 OP_11: 91,
16132 OP_12: 92,
16133 OP_13: 93,
16134 OP_14: 94,
16135 OP_15: 95,
16136 OP_16: 96,
16137
16138 // control
16139 OP_NOP: 97,
16140 OP_VER: 98,
16141 OP_IF: 99,
16142 OP_NOTIF: 100,
16143 OP_VERIF: 101,
16144 OP_VERNOTIF: 102,
16145 OP_ELSE: 103,
16146 OP_ENDIF: 104,
16147 OP_VERIFY: 105,
16148 OP_RETURN: 106,
16149
16150 // stack ops
16151 OP_TOALTSTACK: 107,
16152 OP_FROMALTSTACK: 108,
16153 OP_2DROP: 109,
16154 OP_2DUP: 110,
16155 OP_3DUP: 111,
16156 OP_2OVER: 112,
16157 OP_2ROT: 113,
16158 OP_2SWAP: 114,
16159 OP_IFDUP: 115,
16160 OP_DEPTH: 116,
16161 OP_DROP: 117,
16162 OP_DUP: 118,
16163 OP_NIP: 119,
16164 OP_OVER: 120,
16165 OP_PICK: 121,
16166 OP_ROLL: 122,
16167 OP_ROT: 123,
16168 OP_SWAP: 124,
16169 OP_TUCK: 125,
16170
16171 // splice ops
16172 OP_CAT: 126,
16173 OP_SUBSTR: 127,
16174 OP_LEFT: 128,
16175 OP_RIGHT: 129,
16176 OP_SIZE: 130,
16177
16178 // bit logic
16179 OP_INVERT: 131,
16180 OP_AND: 132,
16181 OP_OR: 133,
16182 OP_XOR: 134,
16183 OP_EQUAL: 135,
16184 OP_EQUALVERIFY: 136,
16185 OP_RESERVED1: 137,
16186 OP_RESERVED2: 138,
16187
16188 // numeric
16189 OP_1ADD: 139,
16190 OP_1SUB: 140,
16191 OP_2MUL: 141,
16192 OP_2DIV: 142,
16193 OP_NEGATE: 143,
16194 OP_ABS: 144,
16195 OP_NOT: 145,
16196 OP_0NOTEQUAL: 146,
16197
16198 OP_ADD: 147,
16199 OP_SUB: 148,
16200 OP_MUL: 149,
16201 OP_DIV: 150,
16202 OP_MOD: 151,
16203 OP_LSHIFT: 152,
16204 OP_RSHIFT: 153,
16205
16206 OP_BOOLAND: 154,
16207 OP_BOOLOR: 155,
16208 OP_NUMEQUAL: 156,
16209 OP_NUMEQUALVERIFY: 157,
16210 OP_NUMNOTEQUAL: 158,
16211 OP_LESSTHAN: 159,
16212 OP_GREATERTHAN: 160,
16213 OP_LESSTHANOREQUAL: 161,
16214 OP_GREATERTHANOREQUAL: 162,
16215 OP_MIN: 163,
16216 OP_MAX: 164,
16217
16218 OP_WITHIN: 165,
16219
16220 // crypto
16221 OP_RIPEMD160: 166,
16222 OP_SHA1: 167,
16223 OP_SHA256: 168,
16224 OP_HASH160: 169,
16225 OP_HASH256: 170,
16226 OP_CODESEPARATOR: 171,
16227 OP_CHECKSIG: 172,
16228 OP_CHECKSIGVERIFY: 173,
16229 OP_CHECKMULTISIG: 174,
16230 OP_CHECKMULTISIGVERIFY: 175,
16231
16232 // expansion
16233 OP_NOP1: 176,
16234 OP_NOP2: 177,
16235 OP_NOP3: 178,
16236 OP_NOP4: 179,
16237 OP_NOP5: 180,
16238 OP_NOP6: 181,
16239 OP_NOP7: 182,
16240 OP_NOP8: 183,
16241 OP_NOP9: 184,
16242 OP_NOP10: 185,
16243
16244 // template matching params
16245 OP_PUBKEYHASH: 253,
16246 OP_PUBKEY: 254,
16247 OP_INVALIDOPCODE: 255
16248}
16249
16250},{}],68:[function(require,module,exports){
16251(function (Buffer){
16252var assert = require('assert')
16253var bufferutils = require('./bufferutils')
16254var crypto = require('./crypto')
16255var typeForce = require('typeforce')
16256var opcodes = require('./opcodes')
16257
16258function Script (buffer, chunks) {
16259 typeForce('Buffer', buffer)
16260 typeForce('Array', chunks)
16261
16262 this.buffer = buffer
16263 this.chunks = chunks
16264}
16265
16266Script.fromASM = function (asm) {
16267 var strChunks = asm.split(' ')
16268 var chunks = strChunks.map(function (strChunk) {
16269 // opcode
16270 if (strChunk in opcodes) {
16271 return opcodes[strChunk]
16272
16273 // data chunk
16274 } else {
16275 return new Buffer(strChunk, 'hex')
16276 }
16277 })
16278
16279 return Script.fromChunks(chunks)
16280}
16281
16282Script.fromBuffer = function (buffer) {
16283 var chunks = []
16284 var i = 0
16285
16286 while (i < buffer.length) {
16287 var opcode = buffer.readUInt8(i)
16288
16289 // data chunk
16290 if ((opcode > opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
16291 var d = bufferutils.readPushDataInt(buffer, i)
16292
16293 // did reading a pushDataInt fail? return non-chunked script
16294 if (d === null) return new Script(buffer, [])
16295 i += d.size
16296
16297 // attempt to read too much data?
16298 if (i + d.number > buffer.length) return new Script(buffer, [])
16299
16300 var data = buffer.slice(i, i + d.number)
16301 i += d.number
16302
16303 chunks.push(data)
16304
16305 // opcode
16306 } else {
16307 chunks.push(opcode)
16308
16309 i += 1
16310 }
16311 }
16312
16313 return new Script(buffer, chunks)
16314}
16315
16316Script.fromChunks = function (chunks) {
16317 typeForce('Array', chunks)
16318
16319 var bufferSize = chunks.reduce(function (accum, chunk) {
16320 // data chunk
16321 if (Buffer.isBuffer(chunk)) {
16322 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
16323 }
16324
16325 // opcode
16326 return accum + 1
16327 }, 0.0)
16328
16329 var buffer = new Buffer(bufferSize)
16330 var offset = 0
16331
16332 chunks.forEach(function (chunk) {
16333 // data chunk
16334 if (Buffer.isBuffer(chunk)) {
16335 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
16336
16337 chunk.copy(buffer, offset)
16338 offset += chunk.length
16339
16340 // opcode
16341 } else {
16342 buffer.writeUInt8(chunk, offset)
16343 offset += 1
16344 }
16345 })
16346
16347 assert.equal(offset, buffer.length, 'Could not decode chunks')
16348 return new Script(buffer, chunks)
16349}
16350
16351Script.fromHex = function (hex) {
16352 return Script.fromBuffer(new Buffer(hex, 'hex'))
16353}
16354
16355Script.EMPTY = Script.fromChunks([])
16356
16357Script.prototype.getHash = function () {
16358 return crypto.hash160(this.buffer)
16359}
16360
16361// FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
16362Script.prototype.without = function (needle) {
16363 return Script.fromChunks(this.chunks.filter(function (op) {
16364 return op !== needle
16365 }))
16366}
16367
16368var reverseOps = []
16369for (var op in opcodes) {
16370 var code = opcodes[op]
16371 reverseOps[code] = op
16372}
16373
16374Script.prototype.toASM = function () {
16375 return this.chunks.map(function (chunk) {
16376 // data chunk
16377 if (Buffer.isBuffer(chunk)) {
16378 return chunk.toString('hex')
16379
16380 // opcode
16381 } else {
16382 return reverseOps[chunk]
16383 }
16384 }).join(' ')
16385}
16386
16387Script.prototype.toBuffer = function () {
16388 return this.buffer
16389}
16390
16391Script.prototype.toHex = function () {
16392 return this.toBuffer().toString('hex')
16393}
16394
16395module.exports = Script
16396
16397}).call(this,require("buffer").Buffer)
16398},{"./bufferutils":57,"./crypto":58,"./opcodes":67,"assert":5,"buffer":7,"typeforce":53}],69:[function(require,module,exports){
16399(function (Buffer){
16400var assert = require('assert')
16401var ops = require('./opcodes')
16402var typeForce = require('typeforce')
16403
16404var ecurve = require('ecurve')
16405var curve = ecurve.getCurveByName('secp256k1')
16406
16407var ECSignature = require('./ecsignature')
16408var Script = require('./script')
16409
16410function isCanonicalPubKey (buffer) {
16411 if (!Buffer.isBuffer(buffer)) return false
16412
16413 try {
16414 ecurve.Point.decodeFrom(curve, buffer)
16415 } catch (e) {
16416 if (!(e.message.match(/Invalid sequence (length|tag)/)))
16417 throw e
16418
16419 return false
16420 }
16421
16422 return true
16423}
16424
16425function isCanonicalSignature (buffer) {
16426 if (!Buffer.isBuffer(buffer)) return false
16427
16428 try {
16429 ECSignature.parseScriptSignature(buffer)
16430 } catch (e) {
16431 if (!(e.message.match(/Not a DER sequence|Invalid sequence length|Expected a DER integer|R length is zero|S length is zero|R value excessively padded|S value excessively padded|R value is negative|S value is negative|Invalid hashType/))) {
16432 throw e
16433 }
16434
16435 return false
16436 }
16437
16438 return true
16439}
16440
16441function isPubKeyHashInput (script) {
16442 return script.chunks.length === 2 &&
16443 isCanonicalSignature(script.chunks[0]) &&
16444 isCanonicalPubKey(script.chunks[1])
16445}
16446
16447function isPubKeyHashOutput (script) {
16448 return script.chunks.length === 5 &&
16449 script.chunks[0] === ops.OP_DUP &&
16450 script.chunks[1] === ops.OP_HASH160 &&
16451 Buffer.isBuffer(script.chunks[2]) &&
16452 script.chunks[2].length === 20 &&
16453 script.chunks[3] === ops.OP_EQUALVERIFY &&
16454 script.chunks[4] === ops.OP_CHECKSIG
16455}
16456
16457function isPubKeyInput (script) {
16458 return script.chunks.length === 1 &&
16459 isCanonicalSignature(script.chunks[0])
16460}
16461
16462function isPubKeyOutput (script) {
16463 return script.chunks.length === 2 &&
16464 isCanonicalPubKey(script.chunks[0]) &&
16465 script.chunks[1] === ops.OP_CHECKSIG
16466}
16467
16468function isScriptHashInput (script, allowIncomplete) {
16469 if (script.chunks.length < 2) return false
16470
16471 var lastChunk = script.chunks[script.chunks.length - 1]
16472 if (!Buffer.isBuffer(lastChunk)) return false
16473
16474 var scriptSig = Script.fromChunks(script.chunks.slice(0, -1))
16475 var redeemScript = Script.fromBuffer(lastChunk)
16476
16477 // is redeemScript a valid script?
16478 if (redeemScript.chunks.length === 0) return false
16479
16480 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
16481}
16482
16483function isScriptHashOutput (script) {
16484 return script.chunks.length === 3 &&
16485 script.chunks[0] === ops.OP_HASH160 &&
16486 Buffer.isBuffer(script.chunks[1]) &&
16487 script.chunks[1].length === 20 &&
16488 script.chunks[2] === ops.OP_EQUAL
16489}
16490
16491// allowIncomplete is to account for combining signatures
16492// See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
16493function isMultisigInput (script, allowIncomplete) {
16494 if (script.chunks.length < 2) return false
16495 if (script.chunks[0] !== ops.OP_0) return false
16496
16497 if (allowIncomplete) {
16498 return script.chunks.slice(1).every(function (chunk) {
16499 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
16500 })
16501 }
16502
16503 return script.chunks.slice(1).every(isCanonicalSignature)
16504}
16505
16506function isMultisigOutput (script) {
16507 if (script.chunks.length < 4) return false
16508 if (script.chunks[script.chunks.length - 1] !== ops.OP_CHECKMULTISIG) return false
16509
16510 var mOp = script.chunks[0]
16511 if (mOp === ops.OP_0) return false
16512 if (mOp < ops.OP_1) return false
16513 if (mOp > ops.OP_16) return false
16514
16515 var nOp = script.chunks[script.chunks.length - 2]
16516 if (nOp === ops.OP_0) return false
16517 if (nOp < ops.OP_1) return false
16518 if (nOp > ops.OP_16) return false
16519
16520 var m = mOp - (ops.OP_1 - 1)
16521 var n = nOp - (ops.OP_1 - 1)
16522 if (n < m) return false
16523
16524 var pubKeys = script.chunks.slice(1, -2)
16525 if (n < pubKeys.length) return false
16526
16527 return pubKeys.every(isCanonicalPubKey)
16528}
16529
16530function isNullDataOutput (script) {
16531 return script.chunks[0] === ops.OP_RETURN
16532}
16533
16534function classifyOutput (script) {
16535 typeForce('Script', script)
16536
16537 if (isPubKeyHashOutput(script)) {
16538 return 'pubkeyhash'
16539 } else if (isScriptHashOutput(script)) {
16540 return 'scripthash'
16541 } else if (isMultisigOutput(script)) {
16542 return 'multisig'
16543 } else if (isPubKeyOutput(script)) {
16544 return 'pubkey'
16545 } else if (isNullDataOutput(script)) {
16546 return 'nulldata'
16547 }
16548
16549 return 'nonstandard'
16550}
16551
16552function classifyInput (script, allowIncomplete) {
16553 typeForce('Script', script)
16554
16555 if (isPubKeyHashInput(script)) {
16556 return 'pubkeyhash'
16557 } else if (isMultisigInput(script, allowIncomplete)) {
16558 return 'multisig'
16559 } else if (isScriptHashInput(script, allowIncomplete)) {
16560 return 'scripthash'
16561 } else if (isPubKeyInput(script)) {
16562 return 'pubkey'
16563 }
16564
16565 return 'nonstandard'
16566}
16567
16568// Standard Script Templates
16569// {pubKey} OP_CHECKSIG
16570function pubKeyOutput (pubKey) {
16571 return Script.fromChunks([
16572 pubKey.toBuffer(),
16573 ops.OP_CHECKSIG
16574 ])
16575}
16576
16577// OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
16578function pubKeyHashOutput (hash) {
16579 typeForce('Buffer', hash)
16580
16581 return Script.fromChunks([
16582 ops.OP_DUP,
16583 ops.OP_HASH160,
16584 hash,
16585 ops.OP_EQUALVERIFY,
16586 ops.OP_CHECKSIG
16587 ])
16588}
16589
16590// OP_HASH160 {scriptHash} OP_EQUAL
16591function scriptHashOutput (hash) {
16592 typeForce('Buffer', hash)
16593
16594 return Script.fromChunks([
16595 ops.OP_HASH160,
16596 hash,
16597 ops.OP_EQUAL
16598 ])
16599}
16600
16601// m [pubKeys ...] n OP_CHECKMULTISIG
16602function multisigOutput (m, pubKeys) {
16603 typeForce(['ECPubKey'], pubKeys)
16604
16605 assert(pubKeys.length >= m, 'Not enough pubKeys provided')
16606
16607 var pubKeyBuffers = pubKeys.map(function (pubKey) {
16608 return pubKey.toBuffer()
16609 })
16610 var n = pubKeys.length
16611
16612 return Script.fromChunks([].concat(
16613 (ops.OP_1 - 1) + m,
16614 pubKeyBuffers,
16615 (ops.OP_1 - 1) + n,
16616 ops.OP_CHECKMULTISIG
16617 ))
16618}
16619
16620// {signature}
16621function pubKeyInput (signature) {
16622 typeForce('Buffer', signature)
16623
16624 return Script.fromChunks([signature])
16625}
16626
16627// {signature} {pubKey}
16628function pubKeyHashInput (signature, pubKey) {
16629 typeForce('Buffer', signature)
16630
16631 return Script.fromChunks([signature, pubKey.toBuffer()])
16632}
16633
16634// <scriptSig> {serialized scriptPubKey script}
16635function scriptHashInput (scriptSig, scriptPubKey) {
16636 return Script.fromChunks([].concat(
16637 scriptSig.chunks,
16638 scriptPubKey.toBuffer()
16639 ))
16640}
16641
16642// OP_0 [signatures ...]
16643function multisigInput (signatures, scriptPubKey) {
16644 if (scriptPubKey) {
16645 assert(isMultisigOutput(scriptPubKey))
16646
16647 var mOp = scriptPubKey.chunks[0]
16648 var nOp = scriptPubKey.chunks[scriptPubKey.chunks.length - 2]
16649 var m = mOp - (ops.OP_1 - 1)
16650 var n = nOp - (ops.OP_1 - 1)
16651
16652 assert(signatures.length >= m, 'Not enough signatures provided')
16653 assert(signatures.length <= n, 'Too many signatures provided')
16654 }
16655
16656 return Script.fromChunks([].concat(ops.OP_0, signatures))
16657}
16658
16659function nullDataOutput (data) {
16660 return Script.fromChunks([ops.OP_RETURN, data])
16661}
16662
16663module.exports = {
16664 isCanonicalPubKey: isCanonicalPubKey,
16665 isCanonicalSignature: isCanonicalSignature,
16666 isPubKeyHashInput: isPubKeyHashInput,
16667 isPubKeyHashOutput: isPubKeyHashOutput,
16668 isPubKeyInput: isPubKeyInput,
16669 isPubKeyOutput: isPubKeyOutput,
16670 isScriptHashInput: isScriptHashInput,
16671 isScriptHashOutput: isScriptHashOutput,
16672 isMultisigInput: isMultisigInput,
16673 isMultisigOutput: isMultisigOutput,
16674 isNullDataOutput: isNullDataOutput,
16675 classifyOutput: classifyOutput,
16676 classifyInput: classifyInput,
16677 pubKeyOutput: pubKeyOutput,
16678 pubKeyHashOutput: pubKeyHashOutput,
16679 scriptHashOutput: scriptHashOutput,
16680 multisigOutput: multisigOutput,
16681 pubKeyInput: pubKeyInput,
16682 pubKeyHashInput: pubKeyHashInput,
16683 scriptHashInput: scriptHashInput,
16684 multisigInput: multisigInput,
16685 dataOutput: function (data) {
16686 console.warn('dataOutput is deprecated, use nullDataOutput by 2.0.0')
16687 return nullDataOutput(data)
16688 },
16689 nullDataOutput: nullDataOutput
16690}
16691
16692}).call(this,require("buffer").Buffer)
16693},{"./ecsignature":62,"./opcodes":67,"./script":68,"assert":5,"buffer":7,"ecurve":49,"typeforce":53}],70:[function(require,module,exports){
16694(function (Buffer){
16695var assert = require('assert')
16696var bufferutils = require('./bufferutils')
16697var crypto = require('./crypto')
16698var typeForce = require('typeforce')
16699var opcodes = require('./opcodes')
16700var scripts = require('./scripts')
16701
16702var Address = require('./address')
16703var ECSignature = require('./ecsignature')
16704var Script = require('./script')
16705
16706function Transaction () {
16707 this.version = 1
16708 this.locktime = 0
16709 this.ins = []
16710 this.outs = []
16711}
16712
16713Transaction.DEFAULT_SEQUENCE = 0xffffffff
16714Transaction.SIGHASH_ALL = 0x01
16715Transaction.SIGHASH_NONE = 0x02
16716Transaction.SIGHASH_SINGLE = 0x03
16717Transaction.SIGHASH_ANYONECANPAY = 0x80
16718
16719Transaction.fromBuffer = function (buffer, __disableAssert) {
16720 var offset = 0
16721 function readSlice (n) {
16722 offset += n
16723 return buffer.slice(offset - n, offset)
16724 }
16725
16726 function readUInt32 () {
16727 var i = buffer.readUInt32LE(offset)
16728 offset += 4
16729 return i
16730 }
16731
16732 function readUInt64 () {
16733 var i = bufferutils.readUInt64LE(buffer, offset)
16734 offset += 8
16735 return i
16736 }
16737
16738 function readVarInt () {
16739 var vi = bufferutils.readVarInt(buffer, offset)
16740 offset += vi.size
16741 return vi.number
16742 }
16743
16744 function readScript () {
16745 return Script.fromBuffer(readSlice(readVarInt()))
16746 }
16747
16748 function readGenerationScript () {
16749 return new Script(readSlice(readVarInt()), [])
16750 }
16751
16752 var tx = new Transaction()
16753 tx.version = readUInt32()
16754
16755 var vinLen = readVarInt()
16756 for (var i = 0; i < vinLen; ++i) {
16757 var hash = readSlice(32)
16758
16759 if (Transaction.isCoinbaseHash(hash)) {
16760 tx.ins.push({
16761 hash: hash,
16762 index: readUInt32(),
16763 script: readGenerationScript(),
16764 sequence: readUInt32()
16765 })
16766 } else {
16767 tx.ins.push({
16768 hash: hash,
16769 index: readUInt32(),
16770 script: readScript(),
16771 sequence: readUInt32()
16772 })
16773 }
16774 }
16775
16776 var voutLen = readVarInt()
16777 for (i = 0; i < voutLen; ++i) {
16778 tx.outs.push({
16779 value: readUInt64(),
16780 script: readScript()
16781 })
16782 }
16783
16784 tx.locktime = readUInt32()
16785
16786 if (!__disableAssert) {
16787 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
16788 }
16789
16790 return tx
16791}
16792
16793Transaction.fromHex = function (hex) {
16794 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
16795}
16796
16797Transaction.isCoinbaseHash = function (buffer) {
16798 return Array.prototype.every.call(buffer, function (x) {
16799 return x === 0
16800 })
16801}
16802
16803/**
16804 * Create a new txIn.
16805 *
16806 * Can be called with any of:
16807 *
16808 * - A transaction and an index
16809 * - A transaction hash and an index
16810 *
16811 * Note that this method does not sign the created input.
16812 */
16813Transaction.prototype.addInput = function (hash, index, sequence, script) {
16814 if (sequence === undefined || sequence === null) {
16815 sequence = Transaction.DEFAULT_SEQUENCE
16816 }
16817
16818 script = script || Script.EMPTY
16819
16820 if (typeof hash === 'string') {
16821 // TxId hex is big-endian, we need little-endian
16822 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
16823 } else if (hash instanceof Transaction) {
16824 hash = hash.getHash()
16825 }
16826
16827 typeForce('Buffer', hash)
16828 typeForce('Number', index)
16829 typeForce('Number', sequence)
16830 typeForce('Script', script)
16831
16832 assert.equal(hash.length, 32, 'Expected hash length of 32, got ' + hash.length)
16833
16834 // Add the input and return the input's index
16835 return (this.ins.push({
16836 hash: hash,
16837 index: index,
16838 script: script,
16839 sequence: sequence
16840 }) - 1)
16841}
16842
16843/**
16844 * Create a new txOut.
16845 *
16846 * Can be called with:
16847 *
16848 * - A base58 address string and a value
16849 * - An Address object and a value
16850 * - A scriptPubKey Script and a value
16851 */
16852Transaction.prototype.addOutput = function (scriptPubKey, value) {
16853 // Attempt to get a valid address if it's a base58 address string
16854 if (typeof scriptPubKey === 'string') {
16855 scriptPubKey = Address.fromBase58Check(scriptPubKey)
16856 }
16857
16858 // Attempt to get a valid script if it's an Address object
16859 if (scriptPubKey instanceof Address) {
16860 scriptPubKey = scriptPubKey.toOutputScript()
16861 }
16862
16863 typeForce('Script', scriptPubKey)
16864 typeForce('Number', value)
16865
16866 // Add the output and return the output's index
16867 return (this.outs.push({
16868 script: scriptPubKey,
16869 value: value
16870 }) - 1)
16871}
16872
16873Transaction.prototype.clone = function () {
16874 var newTx = new Transaction()
16875 newTx.version = this.version
16876 newTx.locktime = this.locktime
16877
16878 newTx.ins = this.ins.map(function (txIn) {
16879 return {
16880 hash: txIn.hash,
16881 index: txIn.index,
16882 script: txIn.script,
16883 sequence: txIn.sequence
16884 }
16885 })
16886
16887 newTx.outs = this.outs.map(function (txOut) {
16888 return {
16889 script: txOut.script,
16890 value: txOut.value
16891 }
16892 })
16893
16894 return newTx
16895}
16896
16897/**
16898 * Hash transaction for signing a specific input.
16899 *
16900 * Bitcoin uses a different hash for each signed transaction input. This
16901 * method copies the transaction, makes the necessary changes based on the
16902 * hashType, serializes and finally hashes the result. This hash can then be
16903 * used to sign the transaction input in question.
16904 */
16905Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
16906 // FIXME: remove in 2.x.y
16907 if (arguments[0] instanceof Script) {
16908 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
16909
16910 // swap the arguments (must be stored in tmp, arguments is special)
16911 var tmp = arguments[0]
16912 inIndex = arguments[1]
16913 prevOutScript = tmp
16914 }
16915
16916 typeForce('Number', inIndex)
16917 typeForce('Script', prevOutScript)
16918 typeForce('Number', hashType)
16919
16920 assert(inIndex >= 0, 'Invalid vin index')
16921 assert(inIndex < this.ins.length, 'Invalid vin index')
16922
16923 var txTmp = this.clone()
16924 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
16925
16926 // Blank out other inputs' signatures
16927 txTmp.ins.forEach(function (txIn) {
16928 txIn.script = Script.EMPTY
16929 })
16930 txTmp.ins[inIndex].script = hashScript
16931
16932 var hashTypeModifier = hashType & 0x1f
16933
16934 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
16935 assert(false, 'SIGHASH_NONE not yet supported')
16936 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
16937 assert(false, 'SIGHASH_SINGLE not yet supported')
16938 }
16939
16940 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
16941 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
16942 }
16943
16944 var hashTypeBuffer = new Buffer(4)
16945 hashTypeBuffer.writeInt32LE(hashType, 0)
16946
16947 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
16948 return crypto.hash256(buffer)
16949}
16950
16951Transaction.prototype.getHash = function () {
16952 return crypto.hash256(this.toBuffer())
16953}
16954
16955Transaction.prototype.getId = function () {
16956 // TxHash is little-endian, we need big-endian
16957 return bufferutils.reverse(this.getHash()).toString('hex')
16958}
16959
16960Transaction.prototype.toBuffer = function () {
16961 function scriptSize (script) {
16962 var length = script.buffer.length
16963
16964 return bufferutils.varIntSize(length) + length
16965 }
16966
16967 var buffer = new Buffer(
16968 8 +
16969 bufferutils.varIntSize(this.ins.length) +
16970 bufferutils.varIntSize(this.outs.length) +
16971 this.ins.reduce(function (sum, input) { return sum + 40 + scriptSize(input.script) }, 0) +
16972 this.outs.reduce(function (sum, output) { return sum + 8 + scriptSize(output.script) }, 0)
16973 )
16974
16975 var offset = 0
16976 function writeSlice (slice) {
16977 slice.copy(buffer, offset)
16978 offset += slice.length
16979 }
16980
16981 function writeUInt32 (i) {
16982 buffer.writeUInt32LE(i, offset)
16983 offset += 4
16984 }
16985
16986 function writeUInt64 (i) {
16987 bufferutils.writeUInt64LE(buffer, i, offset)
16988 offset += 8
16989 }
16990
16991 function writeVarInt (i) {
16992 var n = bufferutils.writeVarInt(buffer, i, offset)
16993 offset += n
16994 }
16995
16996 writeUInt32(this.version)
16997 writeVarInt(this.ins.length)
16998
16999 this.ins.forEach(function (txIn) {
17000 writeSlice(txIn.hash)
17001 writeUInt32(txIn.index)
17002 writeVarInt(txIn.script.buffer.length)
17003 writeSlice(txIn.script.buffer)
17004 writeUInt32(txIn.sequence)
17005 })
17006
17007 writeVarInt(this.outs.length)
17008 this.outs.forEach(function (txOut) {
17009 writeUInt64(txOut.value)
17010 writeVarInt(txOut.script.buffer.length)
17011 writeSlice(txOut.script.buffer)
17012 })
17013
17014 writeUInt32(this.locktime)
17015
17016 return buffer
17017}
17018
17019Transaction.prototype.toHex = function () {
17020 return this.toBuffer().toString('hex')
17021}
17022
17023Transaction.prototype.setInputScript = function (index, script) {
17024 typeForce('Number', index)
17025 typeForce('Script', script)
17026
17027 this.ins[index].script = script
17028}
17029
17030// FIXME: remove in 2.x.y
17031Transaction.prototype.sign = function (index, privKey, hashType) {
17032 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
17033
17034 var prevOutScript = privKey.pub.getAddress().toOutputScript()
17035 var signature = this.signInput(index, prevOutScript, privKey, hashType)
17036
17037 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
17038 this.setInputScript(index, scriptSig)
17039}
17040
17041// FIXME: remove in 2.x.y
17042Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
17043 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
17044
17045 hashType = hashType || Transaction.SIGHASH_ALL
17046
17047 var hash = this.hashForSignature(index, prevOutScript, hashType)
17048 var signature = privKey.sign(hash)
17049
17050 return signature.toScriptSignature(hashType)
17051}
17052
17053// FIXME: remove in 2.x.y
17054Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
17055 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
17056
17057 var parsed = ECSignature.parseScriptSignature(buffer)
17058 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
17059
17060 return pubKey.verify(hash, parsed.signature)
17061}
17062
17063module.exports = Transaction
17064
17065}).call(this,require("buffer").Buffer)
17066},{"./address":54,"./bufferutils":57,"./crypto":58,"./ecsignature":62,"./opcodes":67,"./script":68,"./scripts":69,"assert":5,"buffer":7,"typeforce":53}],71:[function(require,module,exports){
17067(function (Buffer){
17068var assert = require('assert')
17069var ops = require('./opcodes')
17070var scripts = require('./scripts')
17071
17072var ECPubKey = require('./ecpubkey')
17073var ECSignature = require('./ecsignature')
17074var Script = require('./script')
17075var Transaction = require('./transaction')
17076
17077function extractInput (txIn) {
17078 var redeemScript
17079 var scriptSig = txIn.script
17080 var prevOutScript
17081 var prevOutType = scripts.classifyInput(scriptSig, true)
17082 var scriptType
17083
17084 // Re-classify if scriptHash
17085 if (prevOutType === 'scripthash') {
17086 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-1)[0])
17087 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
17088
17089 scriptSig = Script.fromChunks(scriptSig.chunks.slice(0, -1))
17090 scriptType = scripts.classifyInput(scriptSig, true)
17091 } else {
17092 scriptType = prevOutType
17093 }
17094
17095 // Extract hashType, pubKeys and signatures
17096 var hashType, parsed, pubKeys, signatures
17097
17098 switch (scriptType) {
17099 case 'pubkeyhash': {
17100 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
17101 hashType = parsed.hashType
17102 pubKeys = [ECPubKey.fromBuffer(scriptSig.chunks[1])]
17103 signatures = [parsed.signature]
17104 prevOutScript = pubKeys[0].getAddress().toOutputScript()
17105
17106 break
17107 }
17108
17109 case 'pubkey': {
17110 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
17111 hashType = parsed.hashType
17112 signatures = [parsed.signature]
17113
17114 if (redeemScript) {
17115 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[0])]
17116 }
17117
17118 break
17119 }
17120
17121 case 'multisig': {
17122 signatures = scriptSig.chunks.slice(1).map(function (chunk) {
17123 if (chunk === ops.OP_0) return chunk
17124
17125 var parsed = ECSignature.parseScriptSignature(chunk)
17126 hashType = parsed.hashType
17127
17128 return parsed.signature
17129 })
17130
17131 if (redeemScript) {
17132 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
17133 }
17134
17135 break
17136 }
17137 }
17138
17139 return {
17140 hashType: hashType,
17141 prevOutScript: prevOutScript,
17142 prevOutType: prevOutType,
17143 pubKeys: pubKeys,
17144 redeemScript: redeemScript,
17145 scriptType: scriptType,
17146 signatures: signatures
17147 }
17148}
17149
17150function TransactionBuilder () {
17151 this.prevTxMap = {}
17152 this.prevOutScripts = {}
17153 this.prevOutTypes = {}
17154
17155 this.inputs = []
17156 this.tx = new Transaction()
17157}
17158
17159TransactionBuilder.fromTransaction = function (transaction) {
17160 var txb = new TransactionBuilder()
17161
17162 // Copy other transaction fields
17163 txb.tx.version = transaction.version
17164 txb.tx.locktime = transaction.locktime
17165
17166 // Extract/add inputs
17167 transaction.ins.forEach(function (txIn) {
17168 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
17169 })
17170
17171 // Extract/add outputs
17172 transaction.outs.forEach(function (txOut) {
17173 txb.addOutput(txOut.script, txOut.value)
17174 })
17175
17176 // Extract/add signatures
17177 txb.inputs = transaction.ins.map(function (txIn) {
17178 // TODO: remove me after testcase added
17179 assert(!Transaction.isCoinbaseHash(txIn.hash), 'coinbase inputs not supported')
17180
17181 // Ignore empty scripts
17182 if (txIn.script.buffer.length === 0) return {}
17183
17184 return extractInput(txIn)
17185 })
17186
17187 return txb
17188}
17189
17190TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
17191 var prevOutHash
17192
17193 // txId
17194 if (typeof prevTx === 'string') {
17195 prevOutHash = new Buffer(prevTx, 'hex')
17196
17197 // TxId hex is big-endian, we want little-endian hash
17198 Array.prototype.reverse.call(prevOutHash)
17199
17200 // Transaction
17201 } else if (prevTx instanceof Transaction) {
17202 prevOutHash = prevTx.getHash()
17203 prevOutScript = prevTx.outs[index].script
17204
17205 // txHash
17206 } else {
17207 prevOutHash = prevTx
17208 }
17209
17210 var input = {}
17211 if (prevOutScript) {
17212 var prevOutType = scripts.classifyOutput(prevOutScript)
17213
17214 // if we can, extract pubKey information
17215 switch (prevOutType) {
17216 case 'multisig': {
17217 input.pubKeys = prevOutScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
17218 break
17219 }
17220
17221 case 'pubkey': {
17222 input.pubKeys = prevOutScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
17223 break
17224 }
17225 }
17226
17227 if (prevOutType !== 'scripthash') {
17228 input.scriptType = prevOutType
17229 }
17230
17231 input.prevOutScript = prevOutScript
17232 input.prevOutType = prevOutType
17233 }
17234
17235 assert(this.inputs.every(function (input2) {
17236 if (input2.hashType === undefined) return true
17237
17238 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
17239 }), 'No, this would invalidate signatures')
17240
17241 var prevOut = prevOutHash.toString('hex') + ':' + index
17242 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
17243
17244 var vin = this.tx.addInput(prevOutHash, index, sequence)
17245 this.inputs[vin] = input
17246 this.prevTxMap[prevOut] = vin
17247
17248 return vin
17249}
17250
17251TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
17252 assert(this.inputs.every(function (input) {
17253 if (input.hashType === undefined) return true
17254
17255 return (input.hashType & 0x1f) === Transaction.SIGHASH_SINGLE
17256 }), 'No, this would invalidate signatures')
17257
17258 return this.tx.addOutput(scriptPubKey, value)
17259}
17260
17261TransactionBuilder.prototype.build = function () {
17262 return this.__build(false)
17263}
17264TransactionBuilder.prototype.buildIncomplete = function () {
17265 return this.__build(true)
17266}
17267
17268var canSignTypes = {
17269 'pubkeyhash': true,
17270 'multisig': true,
17271 'pubkey': true
17272}
17273
17274TransactionBuilder.prototype.__build = function (allowIncomplete) {
17275 if (!allowIncomplete) {
17276 assert(this.tx.ins.length > 0, 'Transaction has no inputs')
17277 assert(this.tx.outs.length > 0, 'Transaction has no outputs')
17278 }
17279
17280 var tx = this.tx.clone()
17281
17282 // Create script signatures from signature meta-data
17283 this.inputs.forEach(function (input, index) {
17284 var scriptType = input.scriptType
17285 var scriptSig
17286
17287 if (!allowIncomplete) {
17288 assert(!!scriptType, 'Transaction is not complete')
17289 assert(scriptType in canSignTypes, scriptType + ' not supported')
17290 assert(input.signatures, 'Transaction is missing signatures')
17291 }
17292
17293 if (input.signatures) {
17294 switch (scriptType) {
17295 case 'pubkeyhash': {
17296 var pkhSignature = input.signatures[0].toScriptSignature(input.hashType)
17297 scriptSig = scripts.pubKeyHashInput(pkhSignature, input.pubKeys[0])
17298 break
17299 }
17300
17301 case 'multisig': {
17302 // Array.prototype.map is sparse-compatible
17303 var msSignatures = input.signatures.map(function (signature) {
17304 return signature && signature.toScriptSignature(input.hashType)
17305 })
17306
17307 // fill in blanks with OP_0
17308 if (allowIncomplete) {
17309 for (var i = 0; i < msSignatures.length; ++i) {
17310 if (msSignatures[i]) continue
17311
17312 msSignatures[i] = ops.OP_0
17313 }
17314 } else {
17315 // Array.prototype.filter returns non-sparse array
17316 msSignatures = msSignatures.filter(function (x) { return x })
17317 }
17318
17319 var redeemScript = allowIncomplete ? undefined : input.redeemScript
17320 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
17321 break
17322 }
17323
17324 case 'pubkey': {
17325 var pkSignature = input.signatures[0].toScriptSignature(input.hashType)
17326 scriptSig = scripts.pubKeyInput(pkSignature)
17327 break
17328 }
17329 }
17330 }
17331
17332 // did we build a scriptSig?
17333 if (scriptSig) {
17334 // wrap as scriptHash if necessary
17335 if (input.prevOutType === 'scripthash') {
17336 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
17337 }
17338
17339 tx.setInputScript(index, scriptSig)
17340 }
17341 })
17342
17343 return tx
17344}
17345
17346TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
17347 assert(index in this.inputs, 'No input at index: ' + index)
17348 hashType = hashType || Transaction.SIGHASH_ALL
17349
17350 var input = this.inputs[index]
17351 var canSign = input.hashType &&
17352 input.prevOutScript &&
17353 input.prevOutType &&
17354 input.pubKeys &&
17355 input.scriptType &&
17356 input.signatures
17357
17358 // are we almost ready to sign?
17359 if (canSign) {
17360 // if redeemScript was provided, enforce consistency
17361 if (redeemScript) {
17362 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
17363 }
17364
17365 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
17366
17367 // no? prepare
17368 } else {
17369 // must be pay-to-scriptHash?
17370 if (redeemScript) {
17371 // if we have a prevOutScript, enforce scriptHash equality to the redeemScript
17372 if (input.prevOutScript) {
17373 assert.equal(input.prevOutType, 'scripthash', 'PrevOutScript must be P2SH')
17374
17375 var scriptHash = input.prevOutScript.chunks[1]
17376 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
17377 }
17378
17379 var scriptType = scripts.classifyOutput(redeemScript)
17380 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
17381
17382 var pubKeys = []
17383 switch (scriptType) {
17384 case 'multisig': {
17385 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
17386 break
17387 }
17388
17389 case 'pubkeyhash': {
17390 var pkh1 = redeemScript.chunks[2]
17391 var pkh2 = privKey.pub.getAddress().hash
17392
17393 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
17394 pubKeys = [privKey.pub]
17395 break
17396 }
17397
17398 case 'pubkey': {
17399 pubKeys = redeemScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
17400 break
17401 }
17402 }
17403
17404 if (!input.prevOutScript) {
17405 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
17406 input.prevOutType = 'scripthash'
17407 }
17408
17409 input.pubKeys = pubKeys
17410 input.redeemScript = redeemScript
17411 input.scriptType = scriptType
17412
17413 // cannot be pay-to-scriptHash
17414 } else {
17415 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
17416
17417 // can we otherwise sign this?
17418 if (input.scriptType) {
17419 assert(input.pubKeys, input.scriptType + ' not supported')
17420
17421 // we know nothin' Jon Snow, assume pubKeyHash
17422 } else {
17423 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
17424 input.prevOutType = 'pubkeyhash'
17425 input.pubKeys = [privKey.pub]
17426 input.scriptType = input.prevOutType
17427 }
17428 }
17429
17430 input.hashType = hashType
17431 input.signatures = input.signatures || []
17432 }
17433
17434 var signatureScript = input.redeemScript || input.prevOutScript
17435 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
17436
17437 // enforce signature order matches public keys
17438 if (input.scriptType === 'multisig' && input.redeemScript && input.signatures.length !== input.pubKeys.length) {
17439 // maintain a local copy of unmatched signatures
17440 var unmatched = input.signatures.slice()
17441
17442 input.signatures = input.pubKeys.map(function (pubKey) {
17443 var match
17444
17445 // check for any matching signatures
17446 unmatched.some(function (signature, i) {
17447 if (!pubKey.verify(signatureHash, signature)) return false
17448 match = signature
17449
17450 // remove matched signature from unmatched
17451 unmatched.splice(i, 1)
17452
17453 return true
17454 })
17455
17456 return match || undefined
17457 })
17458 }
17459
17460 // enforce in order signing of public keys
17461 assert(input.pubKeys.some(function (pubKey, i) {
17462 if (!privKey.pub.Q.equals(pubKey.Q)) return false
17463
17464 assert(!input.signatures[i], 'Signature already exists')
17465 var signature = privKey.sign(signatureHash)
17466 input.signatures[i] = signature
17467
17468 return true
17469 }, this), 'privateKey cannot sign for this input')
17470}
17471
17472module.exports = TransactionBuilder
17473
17474}).call(this,require("buffer").Buffer)
17475},{"./ecpubkey":61,"./ecsignature":62,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"assert":5,"buffer":7}],72:[function(require,module,exports){
17476(function (Buffer){
17477var assert = require('assert')
17478var bufferutils = require('./bufferutils')
17479var typeForce = require('typeforce')
17480var networks = require('./networks')
17481var randomBytes = require('randombytes')
17482
17483var Address = require('./address')
17484var HDNode = require('./hdnode')
17485var TransactionBuilder = require('./transaction_builder')
17486var Script = require('./script')
17487
17488function Wallet (seed, network) {
17489 console.warn('Wallet is deprecated and will be removed in 2.0.0, see #296')
17490
17491 seed = seed || randomBytes(32)
17492 network = network || networks.bitcoin
17493
17494 // Stored in a closure to make accidental serialization less likely
17495 var masterKey = HDNode.fromSeedBuffer(seed, network)
17496
17497 // HD first-level child derivation method should be hardened
17498 // See https://bitcointalk.org/index.php?topic=405179.msg4415254#msg4415254
17499 var accountZero = masterKey.deriveHardened(0)
17500 var externalAccount = accountZero.derive(0)
17501 var internalAccount = accountZero.derive(1)
17502
17503 this.addresses = []
17504 this.changeAddresses = []
17505 this.network = network
17506 this.unspents = []
17507
17508 // FIXME: remove in 2.0.0
17509 this.unspentMap = {}
17510
17511 // FIXME: remove in 2.0.0
17512 var me = this
17513 this.newMasterKey = function (seed) {
17514 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
17515
17516 seed = seed || randomBytes(32)
17517 masterKey = HDNode.fromSeedBuffer(seed, network)
17518
17519 accountZero = masterKey.deriveHardened(0)
17520 externalAccount = accountZero.derive(0)
17521 internalAccount = accountZero.derive(1)
17522
17523 me.addresses = []
17524 me.changeAddresses = []
17525
17526 me.unspents = []
17527 me.unspentMap = {}
17528 }
17529
17530 this.getMasterKey = function () {
17531 return masterKey
17532 }
17533 this.getAccountZero = function () {
17534 return accountZero
17535 }
17536 this.getExternalAccount = function () {
17537 return externalAccount
17538 }
17539 this.getInternalAccount = function () {
17540 return internalAccount
17541 }
17542}
17543
17544Wallet.prototype.createTransaction = function (to, value, options) {
17545 // FIXME: remove in 2.0.0
17546 if (typeof options !== 'object') {
17547 if (options !== undefined) {
17548 console.warn('Non options object parameters are deprecated, use options object instead')
17549
17550 options = {
17551 fixedFee: arguments[2],
17552 changeAddress: arguments[3]
17553 }
17554 }
ab78acc6 17555 }
8b095871
IC
17556
17557 options = options || {}
17558
17559 assert(value > this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
17560
17561 var changeAddress = options.changeAddress
17562 var fixedFee = options.fixedFee
17563 var minConf = options.minConf === undefined ? 0 : options.minConf // FIXME: change minConf:1 by default in 2.0.0
17564
17565 // filter by minConf, then pending and sort by descending value
17566 var unspents = this.unspents.filter(function (unspent) {
17567 return unspent.confirmations >= minConf
17568 }).filter(function (unspent) {
17569 return !unspent.pending
17570 }).sort(function (o1, o2) {
17571 return o2.value - o1.value
17572 })
17573
17574 var accum = 0
17575 var addresses = []
17576 var subTotal = value
17577
17578 var txb = new TransactionBuilder()
17579 txb.addOutput(to, value)
17580
17581 for (var i = 0; i < unspents.length; ++i) {
17582 var unspent = unspents[i]
17583 addresses.push(unspent.address)
17584
17585 txb.addInput(unspent.txHash, unspent.index)
17586
17587 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
17588
17589 accum += unspent.value
17590 subTotal = value + fee
17591
17592 if (accum >= subTotal) {
17593 var change = accum - subTotal
17594
17595 if (change > this.network.dustThreshold) {
17596 txb.addOutput(changeAddress || this.getChangeAddress(), change)
17597 }
17598
17599 break
17600 }
ab78acc6 17601 }
8b095871
IC
17602
17603 assert(accum >= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
17604
17605 return this.signWith(txb, addresses).build()
17606}
17607
17608// FIXME: remove in 2.0.0
17609Wallet.prototype.processPendingTx = function (tx) {
17610 this.__processTx(tx, true)
17611}
17612
17613// FIXME: remove in 2.0.0
17614Wallet.prototype.processConfirmedTx = function (tx) {
17615 this.__processTx(tx, false)
17616}
17617
17618// FIXME: remove in 2.0.0
17619Wallet.prototype.__processTx = function (tx, isPending) {
17620 console.warn('processTransaction is considered harmful, see issue #260 for more information')
17621
17622 var txId = tx.getId()
17623 var txHash = tx.getHash()
17624
17625 tx.outs.forEach(function (txOut, i) {
17626 var address
17627
17628 try {
17629 address = Address.fromOutputScript(txOut.script, this.network).toString()
17630 } catch (e) {
17631 if (!(e.message.match(/has no matching Address/)))
17632 throw e
17633 }
17634
17635 var myAddresses = this.addresses.concat(this.changeAddresses)
17636 if (myAddresses.indexOf(address) > -1) {
17637 var lookup = txId + ':' + i
17638 if (lookup in this.unspentMap) return
17639
17640 // its unique, add it
17641 var unspent = {
17642 address: address,
17643 confirmations: 0, // no way to determine this without more information
17644 index: i,
17645 txHash: txHash,
17646 txId: txId,
17647 value: txOut.value,
17648 pending: isPending
17649 }
17650
17651 this.unspentMap[lookup] = unspent
17652 this.unspents.push(unspent)
17653 }
17654 }, this)
17655
17656 tx.ins.forEach(function (txIn) {
17657 // copy and convert to big-endian hex
17658 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
17659
17660 var lookup = txInId + ':' + txIn.index
17661 if (!(lookup in this.unspentMap)) return
17662
17663 var unspent = this.unspentMap[lookup]
17664
17665 if (isPending) {
17666 unspent.pending = true
17667 unspent.spent = true
17668 } else {
17669 delete this.unspentMap[lookup]
17670
17671 this.unspents = this.unspents.filter(function (unspent2) {
17672 return unspent !== unspent2
17673 })
17674 }
17675 }, this)
17676}
17677
17678Wallet.prototype.generateAddress = function () {
17679 var k = this.addresses.length
17680 var address = this.getExternalAccount().derive(k).getAddress()
17681
17682 this.addresses.push(address.toString())
17683
17684 return this.getReceiveAddress()
17685}
17686
17687Wallet.prototype.generateChangeAddress = function () {
17688 var k = this.changeAddresses.length
17689 var address = this.getInternalAccount().derive(k).getAddress()
17690
17691 this.changeAddresses.push(address.toString())
17692
17693 return this.getChangeAddress()
17694}
17695
17696Wallet.prototype.getAddress = function () {
17697 if (this.addresses.length === 0) {
17698 this.generateAddress()
ab78acc6 17699 }
8b095871
IC
17700
17701 return this.addresses[this.addresses.length - 1]
17702}
17703
17704Wallet.prototype.getBalance = function (minConf) {
17705 minConf = minConf || 0
17706
17707 return this.unspents.filter(function (unspent) {
17708 return unspent.confirmations >= minConf
17709
17710 // FIXME: remove spent filter in 2.0.0
17711 }).filter(function (unspent) {
17712 return !unspent.spent
17713 }).reduce(function (accum, unspent) {
17714 return accum + unspent.value
17715 }, 0)
17716}
17717
17718Wallet.prototype.getChangeAddress = function () {
17719 if (this.changeAddresses.length === 0) {
17720 this.generateChangeAddress()
3af2954a 17721 }
8b095871
IC
17722
17723 return this.changeAddresses[this.changeAddresses.length - 1]
17724}
17725
17726Wallet.prototype.getInternalPrivateKey = function (index) {
17727 return this.getInternalAccount().derive(index).privKey
17728}
17729
17730Wallet.prototype.getPrivateKey = function (index) {
17731 return this.getExternalAccount().derive(index).privKey
17732}
17733
17734Wallet.prototype.getPrivateKeyForAddress = function (address) {
17735 var index
17736
17737 if ((index = this.addresses.indexOf(address)) > -1) {
17738 return this.getPrivateKey(index)
ab78acc6 17739 }
8b095871
IC
17740
17741 if ((index = this.changeAddresses.indexOf(address)) > -1) {
17742 return this.getInternalPrivateKey(index)
17743 }
17744
17745 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
ab78acc6
IC
17746}
17747
8b095871
IC
17748Wallet.prototype.getUnspentOutputs = function (minConf) {
17749 minConf = minConf || 0
17750
17751 return this.unspents.filter(function (unspent) {
17752 return unspent.confirmations >= minConf
17753
17754 // FIXME: remove spent filter in 2.0.0
17755 }).filter(function (unspent) {
17756 return !unspent.spent
17757 }).map(function (unspent) {
17758 return {
17759 address: unspent.address,
17760 confirmations: unspent.confirmations,
17761 index: unspent.index,
17762 txId: unspent.txId,
17763 value: unspent.value,
17764
17765 // FIXME: remove in 2.0.0
17766 hash: unspent.txId,
17767 pending: unspent.pending
17768 }
17769 })
ab78acc6 17770}
3af2954a 17771
8b095871
IC
17772Wallet.prototype.setUnspentOutputs = function (unspents) {
17773 this.unspentMap = {}
17774 this.unspents = unspents.map(function (unspent) {
17775 // FIXME: remove unspent.hash in 2.0.0
17776 var txId = unspent.txId || unspent.hash
17777 var index = unspent.index
3af2954a 17778
8b095871
IC
17779 // FIXME: remove in 2.0.0
17780 if (unspent.hash !== undefined) {
17781 console.warn('unspent.hash is deprecated, use unspent.txId instead')
17782 }
3af2954a 17783
8b095871
IC
17784 // FIXME: remove in 2.0.0
17785 if (index === undefined) {
17786 console.warn('unspent.outputIndex is deprecated, use unspent.index instead')
17787 index = unspent.outputIndex
17788 }
3af2954a 17789
8b095871
IC
17790 typeForce('String', txId)
17791 typeForce('Number', index)
17792 typeForce('Number', unspent.value)
3af2954a 17793
8b095871
IC
17794 assert.equal(txId.length, 64, 'Expected valid txId, got ' + txId)
17795 assert.doesNotThrow(function () {
17796 Address.fromBase58Check(unspent.address)
17797 }, 'Expected Base58 Address, got ' + unspent.address)
17798 assert(isFinite(index), 'Expected finite index, got ' + index)
3af2954a 17799
8b095871
IC
17800 // FIXME: remove branch in 2.0.0
17801 if (unspent.confirmations !== undefined) {
17802 typeForce('Number', unspent.confirmations)
ab78acc6 17803 }
8b095871
IC
17804
17805 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
17806
17807 unspent = {
17808 address: unspent.address,
17809 confirmations: unspent.confirmations || 0,
17810 index: index,
17811 txHash: txHash,
17812 txId: txId,
17813 value: unspent.value,
17814
17815 // FIXME: remove in 2.0.0
17816 pending: unspent.pending || false
ab78acc6 17817 }
3af2954a 17818
8b095871
IC
17819 // FIXME: remove in 2.0.0
17820 this.unspentMap[txId + ':' + index] = unspent
17821
17822 return unspent
17823 }, this)
ab78acc6 17824}
3af2954a 17825
8b095871
IC
17826Wallet.prototype.signWith = function (tx, addresses) {
17827 addresses.forEach(function (address, i) {
17828 var privKey = this.getPrivateKeyForAddress(address)
17829
17830 tx.sign(i, privKey)
17831 }, this)
17832
17833 return tx
ab78acc6 17834}
3af2954a 17835
8b095871
IC
17836function estimatePaddedFee (tx, network) {
17837 var tmpTx = tx.clone()
17838 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold || 0)
17839
17840 return network.estimateFee(tmpTx)
ab78acc6 17841}
3af2954a 17842
8b095871
IC
17843// FIXME: 1.0.0 shims, remove in 2.0.0
17844Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
17845Wallet.prototype.createTx = Wallet.prototype.createTransaction
17846
17847module.exports = Wallet
17848
17849}).call(this,require("buffer").Buffer)
17850},{"./address":54,"./bufferutils":57,"./hdnode":63,"./networks":66,"./script":68,"./transaction_builder":71,"assert":5,"buffer":7,"randombytes":52,"typeforce":53}]},{},[64])(64)
17851});</script>
17852 <script>bitcoin.networks.shadow = {
17853 magicPrefix: '\x19ShadowCash Signed Message:\n',
17854 bip32: {
17855 public: 0xEE80286A,
17856 private: 0xEE8031E8
17857 },
17858 pubKeyHash: 0x3f,
17859 scriptHash: 0x7d,
17860 wif: 0xbf,
17861 dustThreshold: 0,
17862 feePerKb: 1000,
17863 estimateFee: function() { return "unused in this app" },
17864};
17865
17866bitcoin.networks.shadowtn = {
17867 magicPrefix: '\x19ShadowCash Signed Message:\n',
17868 bip32: {
17869 public: 0x76C0FDFB,
17870 private: 0x76C1077A
17871 },
17872 pubKeyHash: 0x7f,
17873 scriptHash: 0xc4,
17874 wif: 0xff,
17875 dustThreshold: 0,
17876 feePerKb: 1000,
17877 estimateFee: function() { return "unused in this app" },
17878};
3af2954a 17879
8b095871
IC
17880bitcoin.networks.clam = {
17881 bip32: {
17882 public: 0xa8c26d64,
17883 private: 0xa8c17826
17884 },
17885 pubKeyHash: 0x89,
17886 wif: 0x85,
17887};
3af2954a 17888
8b095871
IC
17889bitcoin.networks.dash = {
17890 bip32: {
17891 public: 0x0488b21e,
17892 private: 0x0488ade4
17893 },
17894 pubKeyHash: 0x4c,
17895 scriptHash: 0x10,
17896 wif: 0xcc,
17897};
ab78acc6 17898
f88fab20 17899bitcoin.networks.game = {
17900 bip32: {
17901 public: 0x0488b21e,
17902 private: 0x0488ade4
17903 },
17904 pubKeyHash: 0x26,
17905 scriptHash: 0x05,
17906 wif: 0xa6,
17907};
17908
8b095871
IC
17909bitcoin.networks.namecoin = {
17910 bip32: {
17911 public: 0x0488b21e,
17912 private: 0x0488ade4
17913 },
17914 pubKeyHash: 0x34,
17915 //scriptHash: 0x10,
17916 wif: 0x80,
17917};
3af2954a 17918
8b095871
IC
17919bitcoin.networks.peercoin = {
17920 bip32: {
17921 public: 0x0488b21e,
17922 private: 0x0488ade4
17923 },
17924 pubKeyHash: 0x37,
17925 //scriptHash: 0x10,
17926 wif: 0xb7,
17927};
3af2954a 17928
8b095871
IC
17929</script>
17930 <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){
17931(function (global){
17932'use strict';
3af2954a 17933
8b095871
IC
17934// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
17935// original notice:
3af2954a 17936
8b095871
IC
17937/*!
17938 * The buffer module from node.js, for the browser.
17939 *
17940 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
17941 * @license MIT
17942 */
17943function compare(a, b) {
17944 if (a === b) {
17945 return 0;
17946 }
3af2954a 17947
8b095871
IC
17948 var x = a.length;
17949 var y = b.length;
3af2954a 17950
8b095871
IC
17951 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
17952 if (a[i] !== b[i]) {
17953 x = a[i];
17954 y = b[i];
17955 break;
17956 }
17957 }
3af2954a 17958
8b095871
IC
17959 if (x < y) {
17960 return -1;
17961 }
17962 if (y < x) {
17963 return 1;
17964 }
17965 return 0;
ab78acc6 17966}
8b095871
IC
17967function isBuffer(b) {
17968 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
17969 return global.Buffer.isBuffer(b);
17970 }
17971 return !!(b != null && b._isBuffer);
ab78acc6 17972}
3af2954a 17973
8b095871
IC
17974// based on node assert, original notice:
17975
17976// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
17977//
17978// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
17979//
17980// Originally from narwhal.js (http://narwhaljs.org)
17981// Copyright (c) 2009 Thomas Robinson <280north.com>
17982//
17983// Permission is hereby granted, free of charge, to any person obtaining a copy
17984// of this software and associated documentation files (the 'Software'), to
17985// deal in the Software without restriction, including without limitation the
17986// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
17987// sell copies of the Software, and to permit persons to whom the Software is
17988// furnished to do so, subject to the following conditions:
17989//
17990// The above copyright notice and this permission notice shall be included in
17991// all copies or substantial portions of the Software.
17992//
17993// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17994// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17995// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17996// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
17997// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
17998// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
17999
18000var util = require('util/');
18001var hasOwn = Object.prototype.hasOwnProperty;
18002var pSlice = Array.prototype.slice;
18003var functionsHaveNames = (function () {
18004 return function foo() {}.name === 'foo';
18005}());
18006function pToString (obj) {
18007 return Object.prototype.toString.call(obj);
18008}
18009function isView(arrbuf) {
18010 if (isBuffer(arrbuf)) {
18011 return false;
ab78acc6 18012 }
8b095871
IC
18013 if (typeof global.ArrayBuffer !== 'function') {
18014 return false;
18015 }
18016 if (typeof ArrayBuffer.isView === 'function') {
18017 return ArrayBuffer.isView(arrbuf);
18018 }
18019 if (!arrbuf) {
18020 return false;
18021 }
18022 if (arrbuf instanceof DataView) {
18023 return true;
18024 }
18025 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
18026 return true;
18027 }
18028 return false;
ab78acc6 18029}
8b095871
IC
18030// 1. The assert module provides functions that throw
18031// AssertionError's when particular conditions are not met. The
18032// assert module must conform to the following interface.
3af2954a 18033
8b095871 18034var assert = module.exports = ok;
3af2954a 18035
8b095871
IC
18036// 2. The AssertionError is defined in assert.
18037// new assert.AssertionError({ message: message,
18038// actual: actual,
18039// expected: expected })
18040
18041var regex = /\s*function\s+([^\(\s]*)\s*/;
18042// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
18043function getName(func) {
18044 if (!util.isFunction(func)) {
18045 return;
18046 }
18047 if (functionsHaveNames) {
18048 return func.name;
18049 }
18050 var str = func.toString();
18051 var match = str.match(regex);
18052 return match && match[1];
ab78acc6 18053}
8b095871
IC
18054assert.AssertionError = function AssertionError(options) {
18055 this.name = 'AssertionError';
18056 this.actual = options.actual;
18057 this.expected = options.expected;
18058 this.operator = options.operator;
18059 if (options.message) {
18060 this.message = options.message;
18061 this.generatedMessage = false;
18062 } else {
18063 this.message = getMessage(this);
18064 this.generatedMessage = true;
18065 }
18066 var stackStartFunction = options.stackStartFunction || fail;
18067 if (Error.captureStackTrace) {
18068 Error.captureStackTrace(this, stackStartFunction);
18069 } else {
18070 // non v8 browsers so we can have a stacktrace
18071 var err = new Error();
18072 if (err.stack) {
18073 var out = err.stack;
18074
18075 // try to strip useless frames
18076 var fn_name = getName(stackStartFunction);
18077 var idx = out.indexOf('\n' + fn_name);
18078 if (idx >= 0) {
18079 // once we have located the function frame
18080 // we need to strip out everything before it (and its line)
18081 var next_line = out.indexOf('\n', idx + 1);
18082 out = out.substring(next_line + 1);
18083 }
3af2954a 18084
8b095871
IC
18085 this.stack = out;
18086 }
18087 }
18088};
3af2954a 18089
8b095871
IC
18090// assert.AssertionError instanceof Error
18091util.inherits(assert.AssertionError, Error);
3af2954a 18092
8b095871
IC
18093function truncate(s, n) {
18094 if (typeof s === 'string') {
18095 return s.length < n ? s : s.slice(0, n);
18096 } else {
18097 return s;
3af2954a 18098 }
ab78acc6 18099}
8b095871
IC
18100function inspect(something) {
18101 if (functionsHaveNames || !util.isFunction(something)) {
18102 return util.inspect(something);
18103 }
18104 var rawname = getName(something);
18105 var name = rawname ? ': ' + rawname : '';
18106 return '[Function' + name + ']';
18107}
18108function getMessage(self) {
18109 return truncate(inspect(self.actual), 128) + ' ' +
18110 self.operator + ' ' +
18111 truncate(inspect(self.expected), 128);
ab78acc6 18112}
3af2954a 18113
8b095871
IC
18114// At present only the three keys mentioned above are used and
18115// understood by the spec. Implementations or sub modules can pass
18116// other keys to the AssertionError's constructor - they will be
18117// ignored.
3af2954a 18118
8b095871
IC
18119// 3. All of the following functions must throw an AssertionError
18120// when a corresponding condition is not met, with a message that
18121// may be undefined if not provided. All assertion methods provide
18122// both the actual and expected values to the assertion error for
18123// display purposes.
3af2954a 18124
8b095871
IC
18125function fail(actual, expected, message, operator, stackStartFunction) {
18126 throw new assert.AssertionError({
18127 message: message,
18128 actual: actual,
18129 expected: expected,
18130 operator: operator,
18131 stackStartFunction: stackStartFunction
18132 });
ab78acc6 18133}
3af2954a 18134
8b095871
IC
18135// EXTENSION! allows for well behaved errors defined elsewhere.
18136assert.fail = fail;
3af2954a 18137
8b095871
IC
18138// 4. Pure assertion tests whether a value is truthy, as determined
18139// by !!guard.
18140// assert.ok(guard, message_opt);
18141// This statement is equivalent to assert.equal(true, !!guard,
18142// message_opt);. To test strictly for the value true, use
18143// assert.strictEqual(true, guard, message_opt);.
3af2954a 18144
8b095871
IC
18145function ok(value, message) {
18146 if (!value) fail(value, true, message, '==', assert.ok);
ab78acc6 18147}
8b095871 18148assert.ok = ok;
3af2954a 18149
8b095871
IC
18150// 5. The equality assertion tests shallow, coercive equality with
18151// ==.
18152// assert.equal(actual, expected, message_opt);
3af2954a 18153
8b095871
IC
18154assert.equal = function equal(actual, expected, message) {
18155 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
18156};
3af2954a 18157
8b095871
IC
18158// 6. The non-equality assertion tests for whether two objects are not equal
18159// with != assert.notEqual(actual, expected, message_opt);
3af2954a 18160
8b095871
IC
18161assert.notEqual = function notEqual(actual, expected, message) {
18162 if (actual == expected) {
18163 fail(actual, expected, message, '!=', assert.notEqual);
ab78acc6 18164 }
8b095871
IC
18165};
18166
18167// 7. The equivalence assertion tests a deep equality relation.
18168// assert.deepEqual(actual, expected, message_opt);
18169
18170assert.deepEqual = function deepEqual(actual, expected, message) {
18171 if (!_deepEqual(actual, expected, false)) {
18172 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
ab78acc6 18173 }
8b095871 18174};
3af2954a 18175
8b095871
IC
18176assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
18177 if (!_deepEqual(actual, expected, true)) {
18178 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
3af2954a 18179 }
8b095871
IC
18180};
18181
18182function _deepEqual(actual, expected, strict, memos) {
18183 // 7.1. All identical values are equivalent, as determined by ===.
18184 if (actual === expected) {
18185 return true;
18186 } else if (isBuffer(actual) && isBuffer(expected)) {
18187 return compare(actual, expected) === 0;
18188
18189 // 7.2. If the expected value is a Date object, the actual value is
18190 // equivalent if it is also a Date object that refers to the same time.
18191 } else if (util.isDate(actual) && util.isDate(expected)) {
18192 return actual.getTime() === expected.getTime();
18193
18194 // 7.3 If the expected value is a RegExp object, the actual value is
18195 // equivalent if it is also a RegExp object with the same source and
18196 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
18197 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
18198 return actual.source === expected.source &&
18199 actual.global === expected.global &&
18200 actual.multiline === expected.multiline &&
18201 actual.lastIndex === expected.lastIndex &&
18202 actual.ignoreCase === expected.ignoreCase;
18203
18204 // 7.4. Other pairs that do not both pass typeof value == 'object',
18205 // equivalence is determined by ==.
18206 } else if ((actual === null || typeof actual !== 'object') &&
18207 (expected === null || typeof expected !== 'object')) {
18208 return strict ? actual === expected : actual == expected;
18209
18210 // If both values are instances of typed arrays, wrap their underlying
18211 // ArrayBuffers in a Buffer each to increase performance
18212 // This optimization requires the arrays to have the same type as checked by
18213 // Object.prototype.toString (aka pToString). Never perform binary
18214 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
18215 // bit patterns are not identical.
18216 } else if (isView(actual) && isView(expected) &&
18217 pToString(actual) === pToString(expected) &&
18218 !(actual instanceof Float32Array ||
18219 actual instanceof Float64Array)) {
18220 return compare(new Uint8Array(actual.buffer),
18221 new Uint8Array(expected.buffer)) === 0;
18222
18223 // 7.5 For all other Object pairs, including Array objects, equivalence is
18224 // determined by having the same number of owned properties (as verified
18225 // with Object.prototype.hasOwnProperty.call), the same set of keys
18226 // (although not necessarily the same order), equivalent values for every
18227 // corresponding key, and an identical 'prototype' property. Note: this
18228 // accounts for both named and indexed properties on Arrays.
18229 } else if (isBuffer(actual) !== isBuffer(expected)) {
18230 return false;
18231 } else {
18232 memos = memos || {actual: [], expected: []};
3af2954a 18233
8b095871
IC
18234 var actualIndex = memos.actual.indexOf(actual);
18235 if (actualIndex !== -1) {
18236 if (actualIndex === memos.expected.indexOf(expected)) {
18237 return true;
ab78acc6 18238 }
3af2954a 18239 }
8b095871
IC
18240
18241 memos.actual.push(actual);
18242 memos.expected.push(expected);
18243
18244 return objEquiv(actual, expected, strict, memos);
3af2954a 18245 }
ab78acc6 18246}
3af2954a 18247
8b095871
IC
18248function isArguments(object) {
18249 return Object.prototype.toString.call(object) == '[object Arguments]';
ab78acc6 18250}
3af2954a 18251
8b095871
IC
18252function objEquiv(a, b, strict, actualVisitedObjects) {
18253 if (a === null || a === undefined || b === null || b === undefined)
18254 return false;
18255 // if one is a primitive, the other must be same
18256 if (util.isPrimitive(a) || util.isPrimitive(b))
18257 return a === b;
18258 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
18259 return false;
18260 var aIsArgs = isArguments(a);
18261 var bIsArgs = isArguments(b);
18262 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
18263 return false;
18264 if (aIsArgs) {
18265 a = pSlice.call(a);
18266 b = pSlice.call(b);
18267 return _deepEqual(a, b, strict);
18268 }
18269 var ka = objectKeys(a);
18270 var kb = objectKeys(b);
18271 var key, i;
18272 // having the same number of owned properties (keys incorporates
18273 // hasOwnProperty)
18274 if (ka.length !== kb.length)
18275 return false;
18276 //the same set of keys (although not necessarily the same order),
18277 ka.sort();
18278 kb.sort();
18279 //~~~cheap key test
18280 for (i = ka.length - 1; i >= 0; i--) {
18281 if (ka[i] !== kb[i])
18282 return false;
18283 }
18284 //equivalent values for every corresponding key, and
18285 //~~~possibly expensive deep test
18286 for (i = ka.length - 1; i >= 0; i--) {
18287 key = ka[i];
18288 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
18289 return false;
18290 }
18291 return true;
ab78acc6 18292}
3af2954a 18293
8b095871
IC
18294// 8. The non-equivalence assertion tests for any deep inequality.
18295// assert.notDeepEqual(actual, expected, message_opt);
3af2954a 18296
8b095871
IC
18297assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
18298 if (_deepEqual(actual, expected, false)) {
18299 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
3af2954a 18300 }
8b095871 18301};
3af2954a 18302
8b095871
IC
18303assert.notDeepStrictEqual = notDeepStrictEqual;
18304function notDeepStrictEqual(actual, expected, message) {
18305 if (_deepEqual(actual, expected, true)) {
18306 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
18307 }
ab78acc6 18308}
3af2954a 18309
3af2954a 18310
8b095871
IC
18311// 9. The strict equality assertion tests strict equality, as determined by ===.
18312// assert.strictEqual(actual, expected, message_opt);
3af2954a 18313
8b095871
IC
18314assert.strictEqual = function strictEqual(actual, expected, message) {
18315 if (actual !== expected) {
18316 fail(actual, expected, message, '===', assert.strictEqual);
18317 }
18318};
3af2954a 18319
8b095871
IC
18320// 10. The strict non-equality assertion tests for strict inequality, as
18321// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
3af2954a 18322
8b095871
IC
18323assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
18324 if (actual === expected) {
18325 fail(actual, expected, message, '!==', assert.notStrictEqual);
18326 }
18327};
3af2954a 18328
8b095871
IC
18329function expectedException(actual, expected) {
18330 if (!actual || !expected) {
18331 return false;
18332 }
3af2954a 18333
8b095871
IC
18334 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
18335 return expected.test(actual);
18336 }
3af2954a 18337
8b095871
IC
18338 try {
18339 if (actual instanceof expected) {
18340 return true;
18341 }
18342 } catch (e) {
18343 // Ignore. The instanceof check doesn't work for arrow functions.
18344 }
3af2954a 18345
8b095871
IC
18346 if (Error.isPrototypeOf(expected)) {
18347 return false;
18348 }
18349
18350 return expected.call({}, actual) === true;
ab78acc6 18351}
3af2954a 18352
8b095871
IC
18353function _tryBlock(block) {
18354 var error;
18355 try {
18356 block();
18357 } catch (e) {
18358 error = e;
18359 }
18360 return error;
ab78acc6 18361}
3af2954a 18362
8b095871
IC
18363function _throws(shouldThrow, block, expected, message) {
18364 var actual;
18365
18366 if (typeof block !== 'function') {
18367 throw new TypeError('"block" argument must be a function');
3af2954a 18368 }
8b095871
IC
18369
18370 if (typeof expected === 'string') {
18371 message = expected;
18372 expected = null;
ab78acc6 18373 }
8b095871
IC
18374
18375 actual = _tryBlock(block);
18376
18377 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
18378 (message ? ' ' + message : '.');
18379
18380 if (shouldThrow && !actual) {
18381 fail(actual, expected, 'Missing expected exception' + message);
ab78acc6 18382 }
8b095871
IC
18383
18384 var userProvidedMessage = typeof message === 'string';
18385 var isUnwantedException = !shouldThrow && util.isError(actual);
18386 var isUnexpectedException = !shouldThrow && actual && !expected;
18387
18388 if ((isUnwantedException &&
18389 userProvidedMessage &&
18390 expectedException(actual, expected)) ||
18391 isUnexpectedException) {
18392 fail(actual, expected, 'Got unwanted exception' + message);
ab78acc6 18393 }
3af2954a 18394
8b095871
IC
18395 if ((shouldThrow && actual && expected &&
18396 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
18397 throw actual;
18398 }
ab78acc6 18399}
3af2954a 18400
8b095871
IC
18401// 11. Expected to throw an error:
18402// assert.throws(block, Error_opt, message_opt);
18403
18404assert.throws = function(block, /*optional*/error, /*optional*/message) {
18405 _throws(true, block, error, message);
18406};
18407
18408// EXTENSION! This is annoying to write outside this module.
18409assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
18410 _throws(false, block, error, message);
18411};
18412
18413assert.ifError = function(err) { if (err) throw err; };
18414
18415var objectKeys = Object.keys || function (obj) {
18416 var keys = [];
18417 for (var key in obj) {
18418 if (hasOwn.call(obj, key)) keys.push(key);
3af2954a 18419 }
8b095871
IC
18420 return keys;
18421};
3af2954a 18422
8b095871
IC
18423}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
18424},{"util/":30}],2:[function(require,module,exports){
18425'use strict'
18426
18427exports.byteLength = byteLength
18428exports.toByteArray = toByteArray
18429exports.fromByteArray = fromByteArray
18430
18431var lookup = []
18432var revLookup = []
18433var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
18434
18435var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
18436for (var i = 0, len = code.length; i < len; ++i) {
18437 lookup[i] = code[i]
18438 revLookup[code.charCodeAt(i)] = i
18439}
18440
18441revLookup['-'.charCodeAt(0)] = 62
18442revLookup['_'.charCodeAt(0)] = 63
18443
18444function placeHoldersCount (b64) {
18445 var len = b64.length
18446 if (len % 4 > 0) {
18447 throw new Error('Invalid string. Length must be a multiple of 4')
18448 }
18449
18450 // the number of equal signs (place holders)
18451 // if there are two placeholders, than the two characters before it
18452 // represent one byte
18453 // if there is only one, then the three characters before it represent 2 bytes
18454 // this is just a cheap hack to not do indexOf twice
18455 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
ab78acc6
IC
18456}
18457
8b095871
IC
18458function byteLength (b64) {
18459 // base64 is 4/3 + up to two characters of the original data
18460 return b64.length * 3 / 4 - placeHoldersCount(b64)
ab78acc6 18461}
3af2954a 18462
8b095871
IC
18463function toByteArray (b64) {
18464 var i, j, l, tmp, placeHolders, arr
18465 var len = b64.length
18466 placeHolders = placeHoldersCount(b64)
18467
18468 arr = new Arr(len * 3 / 4 - placeHolders)
18469
18470 // if there are placeholders, only get up to the last complete 4 chars
18471 l = placeHolders > 0 ? len - 4 : len
18472
18473 var L = 0
18474
18475 for (i = 0, j = 0; i < l; i += 4, j += 3) {
18476 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
18477 arr[L++] = (tmp >> 16) & 0xFF
18478 arr[L++] = (tmp >> 8) & 0xFF
18479 arr[L++] = tmp & 0xFF
18480 }
18481
18482 if (placeHolders === 2) {
18483 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
18484 arr[L++] = tmp & 0xFF
18485 } else if (placeHolders === 1) {
18486 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
18487 arr[L++] = (tmp >> 8) & 0xFF
18488 arr[L++] = tmp & 0xFF
18489 }
18490
18491 return arr
ab78acc6 18492}
3af2954a 18493
8b095871
IC
18494function tripletToBase64 (num) {
18495 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
ab78acc6 18496}
3af2954a 18497
8b095871
IC
18498function encodeChunk (uint8, start, end) {
18499 var tmp
18500 var output = []
18501 for (var i = start; i < end; i += 3) {
18502 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
18503 output.push(tripletToBase64(tmp))
18504 }
18505 return output.join('')
ab78acc6 18506}
3af2954a 18507
8b095871
IC
18508function fromByteArray (uint8) {
18509 var tmp
18510 var len = uint8.length
18511 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
18512 var output = ''
18513 var parts = []
18514 var maxChunkLength = 16383 // must be multiple of 3
18515
18516 // go through the array every three bytes, we'll deal with trailing stuff later
18517 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
18518 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
18519 }
18520
18521 // pad the end with zeros, but make sure to not forget the extra bytes
18522 if (extraBytes === 1) {
18523 tmp = uint8[len - 1]
18524 output += lookup[tmp >> 2]
18525 output += lookup[(tmp << 4) & 0x3F]
18526 output += '=='
18527 } else if (extraBytes === 2) {
18528 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
18529 output += lookup[tmp >> 10]
18530 output += lookup[(tmp >> 4) & 0x3F]
18531 output += lookup[(tmp << 2) & 0x3F]
18532 output += '='
18533 }
18534
18535 parts.push(output)
18536
18537 return parts.join('')
ab78acc6 18538}
3af2954a 18539
8b095871 18540},{}],3:[function(require,module,exports){
3af2954a 18541
8b095871
IC
18542},{}],4:[function(require,module,exports){
18543(function (global){
18544'use strict';
18545
18546var buffer = require('buffer');
18547var Buffer = buffer.Buffer;
18548var SlowBuffer = buffer.SlowBuffer;
18549var MAX_LEN = buffer.kMaxLength || 2147483647;
18550exports.alloc = function alloc(size, fill, encoding) {
18551 if (typeof Buffer.alloc === 'function') {
18552 return Buffer.alloc(size, fill, encoding);
ab78acc6 18553 }
8b095871
IC
18554 if (typeof encoding === 'number') {
18555 throw new TypeError('encoding must not be number');
18556 }
18557 if (typeof size !== 'number') {
18558 throw new TypeError('size must be a number');
18559 }
18560 if (size > MAX_LEN) {
18561 throw new RangeError('size is too large');
18562 }
18563 var enc = encoding;
18564 var _fill = fill;
18565 if (_fill === undefined) {
18566 enc = undefined;
18567 _fill = 0;
18568 }
18569 var buf = new Buffer(size);
18570 if (typeof _fill === 'string') {
18571 var fillBuf = new Buffer(_fill, enc);
18572 var flen = fillBuf.length;
18573 var i = -1;
18574 while (++i < size) {
18575 buf[i] = fillBuf[i % flen];
ab78acc6 18576 }
ab78acc6 18577 } else {
8b095871 18578 buf.fill(_fill);
ab78acc6 18579 }
8b095871 18580 return buf;
ab78acc6 18581}
8b095871
IC
18582exports.allocUnsafe = function allocUnsafe(size) {
18583 if (typeof Buffer.allocUnsafe === 'function') {
18584 return Buffer.allocUnsafe(size);
18585 }
18586 if (typeof size !== 'number') {
18587 throw new TypeError('size must be a number');
18588 }
18589 if (size > MAX_LEN) {
18590 throw new RangeError('size is too large');
18591 }
18592 return new Buffer(size);
ab78acc6 18593}
8b095871
IC
18594exports.from = function from(value, encodingOrOffset, length) {
18595 if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
18596 return Buffer.from(value, encodingOrOffset, length);
18597 }
18598 if (typeof value === 'number') {
18599 throw new TypeError('"value" argument must not be a number');
18600 }
18601 if (typeof value === 'string') {
18602 return new Buffer(value, encodingOrOffset);
18603 }
18604 if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
18605 var offset = encodingOrOffset;
18606 if (arguments.length === 1) {
18607 return new Buffer(value);
18608 }
18609 if (typeof offset === 'undefined') {
18610 offset = 0;
18611 }
18612 var len = length;
18613 if (typeof len === 'undefined') {
18614 len = value.byteLength - offset;
18615 }
18616 if (offset >= value.byteLength) {
18617 throw new RangeError('\'offset\' is out of bounds');
18618 }
18619 if (len > value.byteLength - offset) {
18620 throw new RangeError('\'length\' is out of bounds');
18621 }
18622 return new Buffer(value.slice(offset, offset + len));
18623 }
18624 if (Buffer.isBuffer(value)) {
18625 var out = new Buffer(value.length);
18626 value.copy(out, 0, 0, value.length);
18627 return out;
18628 }
18629 if (value) {
18630 if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
18631 return new Buffer(value);
18632 }
18633 if (value.type === 'Buffer' && Array.isArray(value.data)) {
18634 return new Buffer(value.data);
18635 }
18636 }
3af2954a 18637
8b095871 18638 throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
ab78acc6 18639}
8b095871
IC
18640exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
18641 if (typeof Buffer.allocUnsafeSlow === 'function') {
18642 return Buffer.allocUnsafeSlow(size);
18643 }
18644 if (typeof size !== 'number') {
18645 throw new TypeError('size must be a number');
18646 }
18647 if (size >= MAX_LEN) {
18648 throw new RangeError('size is too large');
18649 }
18650 return new SlowBuffer(size);
ab78acc6 18651}
3af2954a 18652
8b095871
IC
18653}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
18654},{"buffer":5}],5:[function(require,module,exports){
18655/*!
18656 * The buffer module from node.js, for the browser.
18657 *
18658 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
18659 * @license MIT
18660 */
18661/* eslint-disable no-proto */
3af2954a 18662
8b095871 18663'use strict'
3af2954a 18664
8b095871
IC
18665var base64 = require('base64-js')
18666var ieee754 = require('ieee754')
3af2954a 18667
8b095871
IC
18668exports.Buffer = Buffer
18669exports.SlowBuffer = SlowBuffer
18670exports.INSPECT_MAX_BYTES = 50
18671
18672var K_MAX_LENGTH = 0x7fffffff
18673exports.kMaxLength = K_MAX_LENGTH
18674
18675/**
18676 * If `Buffer.TYPED_ARRAY_SUPPORT`:
18677 * === true Use Uint8Array implementation (fastest)
18678 * === false Print warning and recommend using `buffer` v4.x which has an Object
18679 * implementation (most compatible, even IE6)
18680 *
18681 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
18682 * Opera 11.6+, iOS 4.2+.
18683 *
18684 * We report that the browser does not support typed arrays if the are not subclassable
18685 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
18686 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
18687 * for __proto__ and has a buggy typed array implementation.
18688 */
18689Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
18690
18691if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
18692 typeof console.error === 'function') {
18693 console.error(
18694 'This browser lacks typed array (Uint8Array) support which is required by ' +
18695 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
18696 )
ab78acc6 18697}
3af2954a 18698
8b095871
IC
18699function typedArraySupport () {
18700 // Can typed array instances can be augmented?
18701 try {
18702 var arr = new Uint8Array(1)
18703 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
18704 return arr.foo() === 42
18705 } catch (e) {
18706 return false
18707 }
ab78acc6 18708}
3af2954a 18709
8b095871
IC
18710function createBuffer (length) {
18711 if (length > K_MAX_LENGTH) {
18712 throw new RangeError('Invalid typed array length')
3af2954a 18713 }
8b095871
IC
18714 // Return an augmented `Uint8Array` instance
18715 var buf = new Uint8Array(length)
18716 buf.__proto__ = Buffer.prototype
18717 return buf
ab78acc6 18718}
3af2954a 18719
8b095871
IC
18720/**
18721 * The Buffer constructor returns instances of `Uint8Array` that have their
18722 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
18723 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
18724 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
18725 * returns a single octet.
18726 *
18727 * The `Uint8Array` prototype remains unmodified.
18728 */
3af2954a 18729
8b095871
IC
18730function Buffer (arg, encodingOrOffset, length) {
18731 // Common case.
18732 if (typeof arg === 'number') {
18733 if (typeof encodingOrOffset === 'string') {
18734 throw new Error(
18735 'If encoding is specified then the first argument must be a string'
18736 )
18737 }
18738 return allocUnsafe(arg)
18739 }
18740 return from(arg, encodingOrOffset, length)
ab78acc6 18741}
3af2954a 18742
8b095871
IC
18743// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
18744if (typeof Symbol !== 'undefined' && Symbol.species &&
18745 Buffer[Symbol.species] === Buffer) {
18746 Object.defineProperty(Buffer, Symbol.species, {
18747 value: null,
18748 configurable: true,
18749 enumerable: false,
18750 writable: false
18751 })
ab78acc6 18752}
3af2954a 18753
8b095871 18754Buffer.poolSize = 8192 // not used by this implementation
3af2954a 18755
8b095871
IC
18756function from (value, encodingOrOffset, length) {
18757 if (typeof value === 'number') {
18758 throw new TypeError('"value" argument must not be a number')
18759 }
3af2954a 18760
8b095871
IC
18761 if (value instanceof ArrayBuffer) {
18762 return fromArrayBuffer(value, encodingOrOffset, length)
18763 }
3af2954a 18764
8b095871
IC
18765 if (typeof value === 'string') {
18766 return fromString(value, encodingOrOffset)
18767 }
3af2954a 18768
8b095871 18769 return fromObject(value)
ab78acc6 18770}
3af2954a 18771
8b095871
IC
18772/**
18773 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
18774 * if value is a number.
18775 * Buffer.from(str[, encoding])
18776 * Buffer.from(array)
18777 * Buffer.from(buffer)
18778 * Buffer.from(arrayBuffer[, byteOffset[, length]])
18779 **/
18780Buffer.from = function (value, encodingOrOffset, length) {
18781 return from(value, encodingOrOffset, length)
ab78acc6 18782}
3af2954a 18783
8b095871
IC
18784// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
18785// https://github.com/feross/buffer/pull/148
18786Buffer.prototype.__proto__ = Uint8Array.prototype
18787Buffer.__proto__ = Uint8Array
18788
18789function assertSize (size) {
18790 if (typeof size !== 'number') {
18791 throw new TypeError('"size" argument must be a number')
18792 } else if (size < 0) {
18793 throw new RangeError('"size" argument must not be negative')
18794 }
18795}
18796
18797function alloc (size, fill, encoding) {
18798 assertSize(size)
18799 if (size <= 0) {
18800 return createBuffer(size)
3af2954a 18801 }
8b095871
IC
18802 if (fill !== undefined) {
18803 // Only pay attention to encoding if it's a string. This
18804 // prevents accidentally sending in a number that would
18805 // be interpretted as a start offset.
18806 return typeof encoding === 'string'
18807 ? createBuffer(size).fill(fill, encoding)
18808 : createBuffer(size).fill(fill)
18809 }
18810 return createBuffer(size)
ab78acc6 18811}
3af2954a 18812
8b095871
IC
18813/**
18814 * Creates a new filled Buffer instance.
18815 * alloc(size[, fill[, encoding]])
18816 **/
18817Buffer.alloc = function (size, fill, encoding) {
18818 return alloc(size, fill, encoding)
ab78acc6 18819}
3af2954a 18820
8b095871
IC
18821function allocUnsafe (size) {
18822 assertSize(size)
18823 return createBuffer(size < 0 ? 0 : checked(size) | 0)
ab78acc6 18824}
3af2954a 18825
8b095871
IC
18826/**
18827 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
18828 * */
18829Buffer.allocUnsafe = function (size) {
18830 return allocUnsafe(size)
18831}
18832/**
18833 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
18834 */
18835Buffer.allocUnsafeSlow = function (size) {
18836 return allocUnsafe(size)
ab78acc6 18837}
3af2954a 18838
8b095871
IC
18839function fromString (string, encoding) {
18840 if (typeof encoding !== 'string' || encoding === '') {
18841 encoding = 'utf8'
18842 }
18843
18844 if (!Buffer.isEncoding(encoding)) {
18845 throw new TypeError('"encoding" must be a valid string encoding')
18846 }
18847
18848 var length = byteLength(string, encoding) | 0
18849 var buf = createBuffer(length)
18850
18851 var actual = buf.write(string, encoding)
18852
18853 if (actual !== length) {
18854 // Writing a hex string, for example, that contains invalid characters will
18855 // cause everything after the first invalid character to be ignored. (e.g.
18856 // 'abxxcd' will be treated as 'ab')
18857 buf = buf.slice(0, actual)
18858 }
18859
18860 return buf
ab78acc6 18861}
3af2954a 18862
8b095871
IC
18863function fromArrayLike (array) {
18864 var length = array.length < 0 ? 0 : checked(array.length) | 0
18865 var buf = createBuffer(length)
18866 for (var i = 0; i < length; i += 1) {
18867 buf[i] = array[i] & 255
18868 }
18869 return buf
18870}
3af2954a 18871
8b095871
IC
18872function fromArrayBuffer (array, byteOffset, length) {
18873 if (byteOffset < 0 || array.byteLength < byteOffset) {
18874 throw new RangeError('\'offset\' is out of bounds')
18875 }
3af2954a 18876
8b095871
IC
18877 if (array.byteLength < byteOffset + (length || 0)) {
18878 throw new RangeError('\'length\' is out of bounds')
ab78acc6
IC
18879 }
18880
8b095871
IC
18881 var buf
18882 if (byteOffset === undefined && length === undefined) {
18883 buf = new Uint8Array(array)
18884 } else if (length === undefined) {
18885 buf = new Uint8Array(array, byteOffset)
18886 } else {
18887 buf = new Uint8Array(array, byteOffset, length)
18888 }
3af2954a 18889
8b095871
IC
18890 // Return an augmented `Uint8Array` instance
18891 buf.__proto__ = Buffer.prototype
18892 return buf
18893}
18894
18895function fromObject (obj) {
18896 if (Buffer.isBuffer(obj)) {
18897 var len = checked(obj.length) | 0
18898 var buf = createBuffer(len)
18899
18900 if (buf.length === 0) {
18901 return buf
ab78acc6 18902 }
8b095871
IC
18903
18904 obj.copy(buf, 0, 0, len)
18905 return buf
18906 }
18907
18908 if (obj) {
18909 if (ArrayBuffer.isView(obj) || 'length' in obj) {
18910 if (typeof obj.length !== 'number' || isnan(obj.length)) {
18911 return createBuffer(0)
ab78acc6 18912 }
8b095871 18913 return fromArrayLike(obj)
ab78acc6 18914 }
3af2954a 18915
8b095871
IC
18916 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
18917 return fromArrayLike(obj.data)
3af2954a
IC
18918 }
18919 }
8b095871
IC
18920
18921 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
ab78acc6 18922}
3af2954a 18923
8b095871
IC
18924function checked (length) {
18925 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
18926 // length is NaN (which is otherwise coerced to zero.)
18927 if (length >= K_MAX_LENGTH) {
18928 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
18929 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
ab78acc6 18930 }
8b095871
IC
18931 return length | 0
18932}
18933
18934function SlowBuffer (length) {
18935 if (+length != length) { // eslint-disable-line eqeqeq
18936 length = 0
3af2954a 18937 }
8b095871 18938 return Buffer.alloc(+length)
ab78acc6 18939}
3af2954a 18940
8b095871
IC
18941Buffer.isBuffer = function isBuffer (b) {
18942 return b != null && b._isBuffer === true
ab78acc6 18943}
3af2954a 18944
8b095871
IC
18945Buffer.compare = function compare (a, b) {
18946 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
18947 throw new TypeError('Arguments must be Buffers')
18948 }
18949
18950 if (a === b) return 0
18951
18952 var x = a.length
18953 var y = b.length
18954
18955 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
18956 if (a[i] !== b[i]) {
18957 x = a[i]
18958 y = b[i]
18959 break
ab78acc6
IC
18960 }
18961 }
8b095871
IC
18962
18963 if (x < y) return -1
18964 if (y < x) return 1
18965 return 0
18966}
18967
18968Buffer.isEncoding = function isEncoding (encoding) {
18969 switch (String(encoding).toLowerCase()) {
18970 case 'hex':
18971 case 'utf8':
18972 case 'utf-8':
18973 case 'ascii':
18974 case 'latin1':
18975 case 'binary':
18976 case 'base64':
18977 case 'ucs2':
18978 case 'ucs-2':
18979 case 'utf16le':
18980 case 'utf-16le':
18981 return true
18982 default:
18983 return false
18984 }
ab78acc6
IC
18985}
18986
8b095871
IC
18987Buffer.concat = function concat (list, length) {
18988 if (!Array.isArray(list)) {
18989 throw new TypeError('"list" argument must be an Array of Buffers')
18990 }
ab78acc6 18991
8b095871
IC
18992 if (list.length === 0) {
18993 return Buffer.alloc(0)
18994 }
ab78acc6 18995
8b095871
IC
18996 var i
18997 if (length === undefined) {
18998 length = 0
18999 for (i = 0; i < list.length; ++i) {
19000 length += list[i].length
19001 }
3af2954a 19002 }
8b095871
IC
19003
19004 var buffer = Buffer.allocUnsafe(length)
19005 var pos = 0
19006 for (i = 0; i < list.length; ++i) {
19007 var buf = list[i]
19008 if (!Buffer.isBuffer(buf)) {
19009 throw new TypeError('"list" argument must be an Array of Buffers')
19010 }
19011 buf.copy(buffer, pos)
19012 pos += buf.length
ab78acc6 19013 }
8b095871 19014 return buffer
ab78acc6
IC
19015}
19016
8b095871
IC
19017function byteLength (string, encoding) {
19018 if (Buffer.isBuffer(string)) {
19019 return string.length
19020 }
19021 if (ArrayBuffer.isView(string) || string instanceof ArrayBuffer) {
19022 return string.byteLength
19023 }
19024 if (typeof string !== 'string') {
19025 string = '' + string
19026 }
19027
19028 var len = string.length
19029 if (len === 0) return 0
19030
19031 // Use a for loop to avoid recursion
19032 var loweredCase = false
19033 for (;;) {
19034 switch (encoding) {
19035 case 'ascii':
19036 case 'latin1':
19037 case 'binary':
19038 return len
19039 case 'utf8':
19040 case 'utf-8':
19041 case undefined:
19042 return utf8ToBytes(string).length
19043 case 'ucs2':
19044 case 'ucs-2':
19045 case 'utf16le':
19046 case 'utf-16le':
19047 return len * 2
19048 case 'hex':
19049 return len >>> 1
19050 case 'base64':
19051 return base64ToBytes(string).length
19052 default:
19053 if (loweredCase) return utf8ToBytes(string).length // assume utf8
19054 encoding = ('' + encoding).toLowerCase()
19055 loweredCase = true
ab78acc6 19056 }
3af2954a 19057 }
ab78acc6 19058}
8b095871 19059Buffer.byteLength = byteLength
3af2954a 19060
8b095871
IC
19061function slowToString (encoding, start, end) {
19062 var loweredCase = false
3af2954a 19063
8b095871
IC
19064 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
19065 // property of a typed array.
3af2954a 19066
8b095871
IC
19067 // This behaves neither like String nor Uint8Array in that we set start/end
19068 // to their upper/lower bounds if the value passed is out of range.
19069 // undefined is handled specially as per ECMA-262 6th Edition,
19070 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
19071 if (start === undefined || start < 0) {
19072 start = 0
19073 }
19074 // Return early if start > this.length. Done here to prevent potential uint32
19075 // coercion fail below.
19076 if (start > this.length) {
19077 return ''
19078 }
3af2954a 19079
8b095871
IC
19080 if (end === undefined || end > this.length) {
19081 end = this.length
19082 }
3af2954a 19083
8b095871
IC
19084 if (end <= 0) {
19085 return ''
19086 }
3af2954a 19087
8b095871
IC
19088 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
19089 end >>>= 0
19090 start >>>= 0
3af2954a 19091
8b095871
IC
19092 if (end <= start) {
19093 return ''
3af2954a
IC
19094 }
19095
8b095871 19096 if (!encoding) encoding = 'utf8'
3af2954a 19097
8b095871
IC
19098 while (true) {
19099 switch (encoding) {
19100 case 'hex':
19101 return hexSlice(this, start, end)
19102
19103 case 'utf8':
19104 case 'utf-8':
19105 return utf8Slice(this, start, end)
19106
19107 case 'ascii':
19108 return asciiSlice(this, start, end)
19109
19110 case 'latin1':
19111 case 'binary':
19112 return latin1Slice(this, start, end)
19113
19114 case 'base64':
19115 return base64Slice(this, start, end)
19116
19117 case 'ucs2':
19118 case 'ucs-2':
19119 case 'utf16le':
19120 case 'utf-16le':
19121 return utf16leSlice(this, start, end)
19122
19123 default:
19124 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
19125 encoding = (encoding + '').toLowerCase()
19126 loweredCase = true
19127 }
19128 }
ab78acc6 19129}
3af2954a 19130
8b095871
IC
19131// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
19132// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
19133// reliably in a browserify context because there could be multiple different
19134// copies of the 'buffer' package in use. This method works even for Buffer
19135// instances that were created from another copy of the `buffer` package.
19136// See: https://github.com/feross/buffer/issues/154
19137Buffer.prototype._isBuffer = true
19138
19139function swap (b, n, m) {
19140 var i = b[n]
19141 b[n] = b[m]
19142 b[m] = i
ab78acc6 19143}
3af2954a 19144
8b095871
IC
19145Buffer.prototype.swap16 = function swap16 () {
19146 var len = this.length
19147 if (len % 2 !== 0) {
19148 throw new RangeError('Buffer size must be a multiple of 16-bits')
19149 }
19150 for (var i = 0; i < len; i += 2) {
19151 swap(this, i, i + 1)
19152 }
19153 return this
19154}
3af2954a 19155
8b095871
IC
19156Buffer.prototype.swap32 = function swap32 () {
19157 var len = this.length
19158 if (len % 4 !== 0) {
19159 throw new RangeError('Buffer size must be a multiple of 32-bits')
19160 }
19161 for (var i = 0; i < len; i += 4) {
19162 swap(this, i, i + 3)
19163 swap(this, i + 1, i + 2)
19164 }
19165 return this
19166}
3af2954a 19167
8b095871
IC
19168Buffer.prototype.swap64 = function swap64 () {
19169 var len = this.length
19170 if (len % 8 !== 0) {
19171 throw new RangeError('Buffer size must be a multiple of 64-bits')
3af2954a 19172 }
8b095871
IC
19173 for (var i = 0; i < len; i += 8) {
19174 swap(this, i, i + 7)
19175 swap(this, i + 1, i + 6)
19176 swap(this, i + 2, i + 5)
19177 swap(this, i + 3, i + 4)
19178 }
19179 return this
19180}
3af2954a 19181
8b095871
IC
19182Buffer.prototype.toString = function toString () {
19183 var length = this.length
19184 if (length === 0) return ''
19185 if (arguments.length === 0) return utf8Slice(this, 0, length)
19186 return slowToString.apply(this, arguments)
ab78acc6 19187}
3af2954a 19188
8b095871
IC
19189Buffer.prototype.equals = function equals (b) {
19190 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
19191 if (this === b) return true
19192 return Buffer.compare(this, b) === 0
19193}
3af2954a 19194
8b095871
IC
19195Buffer.prototype.inspect = function inspect () {
19196 var str = ''
19197 var max = exports.INSPECT_MAX_BYTES
19198 if (this.length > 0) {
19199 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
19200 if (this.length > max) str += ' ... '
19201 }
19202 return '<Buffer ' + str + '>'
ab78acc6 19203}
3af2954a 19204
8b095871
IC
19205Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
19206 if (!Buffer.isBuffer(target)) {
19207 throw new TypeError('Argument must be a Buffer')
19208 }
3af2954a 19209
8b095871
IC
19210 if (start === undefined) {
19211 start = 0
19212 }
19213 if (end === undefined) {
19214 end = target ? target.length : 0
19215 }
19216 if (thisStart === undefined) {
19217 thisStart = 0
19218 }
19219 if (thisEnd === undefined) {
19220 thisEnd = this.length
19221 }
3af2954a 19222
8b095871
IC
19223 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
19224 throw new RangeError('out of range index')
19225 }
3af2954a 19226
8b095871
IC
19227 if (thisStart >= thisEnd && start >= end) {
19228 return 0
19229 }
19230 if (thisStart >= thisEnd) {
19231 return -1
19232 }
19233 if (start >= end) {
19234 return 1
19235 }
3af2954a 19236
8b095871
IC
19237 start >>>= 0
19238 end >>>= 0
19239 thisStart >>>= 0
19240 thisEnd >>>= 0
3af2954a 19241
8b095871 19242 if (this === target) return 0
3af2954a 19243
8b095871
IC
19244 var x = thisEnd - thisStart
19245 var y = end - start
19246 var len = Math.min(x, y)
19247
19248 var thisCopy = this.slice(thisStart, thisEnd)
19249 var targetCopy = target.slice(start, end)
19250
19251 for (var i = 0; i < len; ++i) {
19252 if (thisCopy[i] !== targetCopy[i]) {
19253 x = thisCopy[i]
19254 y = targetCopy[i]
19255 break
3af2954a 19256 }
8b095871
IC
19257 }
19258
19259 if (x < y) return -1
19260 if (y < x) return 1
19261 return 0
ab78acc6 19262}
3af2954a 19263
8b095871
IC
19264// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
19265// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
ab78acc6 19266//
8b095871
IC
19267// Arguments:
19268// - buffer - a Buffer to search
19269// - val - a string, Buffer, or number
19270// - byteOffset - an index into `buffer`; will be clamped to an int32
19271// - encoding - an optional encoding, relevant is val is a string
19272// - dir - true for indexOf, false for lastIndexOf
19273function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
19274 // Empty buffer means no match
19275 if (buffer.length === 0) return -1
19276
19277 // Normalize byteOffset
19278 if (typeof byteOffset === 'string') {
19279 encoding = byteOffset
19280 byteOffset = 0
19281 } else if (byteOffset > 0x7fffffff) {
19282 byteOffset = 0x7fffffff
19283 } else if (byteOffset < -0x80000000) {
19284 byteOffset = -0x80000000
19285 }
19286 byteOffset = +byteOffset // Coerce to Number.
19287 if (isNaN(byteOffset)) {
19288 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
19289 byteOffset = dir ? 0 : (buffer.length - 1)
19290 }
19291
19292 // Normalize byteOffset: negative offsets start from the end of the buffer
19293 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
19294 if (byteOffset >= buffer.length) {
19295 if (dir) return -1
19296 else byteOffset = buffer.length - 1
19297 } else if (byteOffset < 0) {
19298 if (dir) byteOffset = 0
19299 else return -1
19300 }
19301
19302 // Normalize val
19303 if (typeof val === 'string') {
19304 val = Buffer.from(val, encoding)
19305 }
3af2954a 19306
8b095871
IC
19307 // Finally, search either indexOf (if dir is true) or lastIndexOf
19308 if (Buffer.isBuffer(val)) {
19309 // Special case: looking for empty string/buffer always fails
19310 if (val.length === 0) {
19311 return -1
19312 }
19313 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
19314 } else if (typeof val === 'number') {
19315 val = val & 0xFF // Search for a byte value [0-255]
19316 if (typeof Uint8Array.prototype.indexOf === 'function') {
19317 if (dir) {
19318 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
19319 } else {
19320 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
19321 }
19322 }
19323 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
19324 }
3af2954a 19325
8b095871
IC
19326 throw new TypeError('val must be string, number or Buffer')
19327}
3af2954a 19328
8b095871
IC
19329function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
19330 var indexSize = 1
19331 var arrLength = arr.length
19332 var valLength = val.length
3af2954a 19333
8b095871
IC
19334 if (encoding !== undefined) {
19335 encoding = String(encoding).toLowerCase()
19336 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
19337 encoding === 'utf16le' || encoding === 'utf-16le') {
19338 if (arr.length < 2 || val.length < 2) {
19339 return -1
19340 }
19341 indexSize = 2
19342 arrLength /= 2
19343 valLength /= 2
19344 byteOffset /= 2
19345 }
19346 }
3af2954a 19347
8b095871
IC
19348 function read (buf, i) {
19349 if (indexSize === 1) {
19350 return buf[i]
19351 } else {
19352 return buf.readUInt16BE(i * indexSize)
19353 }
19354 }
3af2954a 19355
8b095871
IC
19356 var i
19357 if (dir) {
19358 var foundIndex = -1
19359 for (i = byteOffset; i < arrLength; i++) {
19360 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
19361 if (foundIndex === -1) foundIndex = i
19362 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
19363 } else {
19364 if (foundIndex !== -1) i -= i - foundIndex
19365 foundIndex = -1
19366 }
19367 }
ab78acc6 19368 } else {
8b095871
IC
19369 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
19370 for (i = byteOffset; i >= 0; i--) {
19371 var found = true
19372 for (var j = 0; j < valLength; j++) {
19373 if (read(arr, i + j) !== read(val, j)) {
19374 found = false
19375 break
19376 }
19377 }
19378 if (found) return i
19379 }
ab78acc6 19380 }
3af2954a 19381
8b095871
IC
19382 return -1
19383}
3af2954a 19384
8b095871
IC
19385Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
19386 return this.indexOf(val, byteOffset, encoding) !== -1
19387}
19388
19389Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
19390 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
19391}
3af2954a 19392
8b095871
IC
19393Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
19394 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
19395}
19396
19397function hexWrite (buf, string, offset, length) {
19398 offset = Number(offset) || 0
19399 var remaining = buf.length - offset
19400 if (!length) {
19401 length = remaining
19402 } else {
19403 length = Number(length)
19404 if (length > remaining) {
19405 length = remaining
3af2954a 19406 }
3af2954a
IC
19407 }
19408
8b095871
IC
19409 // must be an even number of digits
19410 var strLen = string.length
19411 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
3af2954a 19412
8b095871
IC
19413 if (length > strLen / 2) {
19414 length = strLen / 2
ab78acc6 19415 }
8b095871
IC
19416 for (var i = 0; i < length; ++i) {
19417 var parsed = parseInt(string.substr(i * 2, 2), 16)
19418 if (isNaN(parsed)) return i
19419 buf[offset + i] = parsed
ab78acc6 19420 }
8b095871 19421 return i
ab78acc6 19422}
3af2954a 19423
8b095871
IC
19424function utf8Write (buf, string, offset, length) {
19425 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
ab78acc6 19426}
3af2954a 19427
8b095871
IC
19428function asciiWrite (buf, string, offset, length) {
19429 return blitBuffer(asciiToBytes(string), buf, offset, length)
ab78acc6 19430}
3af2954a 19431
8b095871
IC
19432function latin1Write (buf, string, offset, length) {
19433 return asciiWrite(buf, string, offset, length)
ab78acc6 19434}
3af2954a 19435
8b095871
IC
19436function base64Write (buf, string, offset, length) {
19437 return blitBuffer(base64ToBytes(string), buf, offset, length)
ab78acc6 19438}
3af2954a 19439
8b095871
IC
19440function ucs2Write (buf, string, offset, length) {
19441 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
19442}
3af2954a 19443
8b095871
IC
19444Buffer.prototype.write = function write (string, offset, length, encoding) {
19445 // Buffer#write(string)
19446 if (offset === undefined) {
19447 encoding = 'utf8'
19448 length = this.length
19449 offset = 0
19450 // Buffer#write(string, encoding)
19451 } else if (length === undefined && typeof offset === 'string') {
19452 encoding = offset
19453 length = this.length
19454 offset = 0
19455 // Buffer#write(string, offset[, length][, encoding])
19456 } else if (isFinite(offset)) {
19457 offset = offset >>> 0
19458 if (isFinite(length)) {
19459 length = length >>> 0
19460 if (encoding === undefined) encoding = 'utf8'
19461 } else {
19462 encoding = length
19463 length = undefined
19464 }
19465 } else {
19466 throw new Error(
19467 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
19468 )
3af2954a
IC
19469 }
19470
8b095871
IC
19471 var remaining = this.length - offset
19472 if (length === undefined || length > remaining) length = remaining
3af2954a 19473
8b095871
IC
19474 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
19475 throw new RangeError('Attempt to write outside buffer bounds')
ab78acc6 19476 }
3af2954a 19477
8b095871 19478 if (!encoding) encoding = 'utf8'
3af2954a 19479
8b095871
IC
19480 var loweredCase = false
19481 for (;;) {
19482 switch (encoding) {
19483 case 'hex':
19484 return hexWrite(this, string, offset, length)
3af2954a 19485
8b095871
IC
19486 case 'utf8':
19487 case 'utf-8':
19488 return utf8Write(this, string, offset, length)
3af2954a 19489
8b095871
IC
19490 case 'ascii':
19491 return asciiWrite(this, string, offset, length)
3af2954a 19492
8b095871
IC
19493 case 'latin1':
19494 case 'binary':
19495 return latin1Write(this, string, offset, length)
3af2954a 19496
8b095871
IC
19497 case 'base64':
19498 // Warning: maxLength not taken into account in base64Write
19499 return base64Write(this, string, offset, length)
3af2954a 19500
8b095871
IC
19501 case 'ucs2':
19502 case 'ucs-2':
19503 case 'utf16le':
19504 case 'utf-16le':
19505 return ucs2Write(this, string, offset, length)
3af2954a 19506
8b095871
IC
19507 default:
19508 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
19509 encoding = ('' + encoding).toLowerCase()
19510 loweredCase = true
19511 }
3af2954a 19512 }
ab78acc6 19513}
3af2954a 19514
8b095871
IC
19515Buffer.prototype.toJSON = function toJSON () {
19516 return {
19517 type: 'Buffer',
19518 data: Array.prototype.slice.call(this._arr || this, 0)
3af2954a 19519 }
ab78acc6
IC
19520}
19521
8b095871
IC
19522function base64Slice (buf, start, end) {
19523 if (start === 0 && end === buf.length) {
19524 return base64.fromByteArray(buf)
19525 } else {
19526 return base64.fromByteArray(buf.slice(start, end))
3af2954a 19527 }
8b095871 19528}
3af2954a 19529
8b095871
IC
19530function utf8Slice (buf, start, end) {
19531 end = Math.min(buf.length, end)
19532 var res = []
3af2954a 19533
8b095871
IC
19534 var i = start
19535 while (i < end) {
19536 var firstByte = buf[i]
19537 var codePoint = null
19538 var bytesPerSequence = (firstByte > 0xEF) ? 4
19539 : (firstByte > 0xDF) ? 3
19540 : (firstByte > 0xBF) ? 2
19541 : 1
3af2954a 19542
8b095871
IC
19543 if (i + bytesPerSequence <= end) {
19544 var secondByte, thirdByte, fourthByte, tempCodePoint
3af2954a 19545
8b095871
IC
19546 switch (bytesPerSequence) {
19547 case 1:
19548 if (firstByte < 0x80) {
19549 codePoint = firstByte
19550 }
19551 break
19552 case 2:
19553 secondByte = buf[i + 1]
19554 if ((secondByte & 0xC0) === 0x80) {
19555 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
19556 if (tempCodePoint > 0x7F) {
19557 codePoint = tempCodePoint
19558 }
19559 }
19560 break
19561 case 3:
19562 secondByte = buf[i + 1]
19563 thirdByte = buf[i + 2]
19564 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
19565 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
19566 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
19567 codePoint = tempCodePoint
19568 }
19569 }
19570 break
19571 case 4:
19572 secondByte = buf[i + 1]
19573 thirdByte = buf[i + 2]
19574 fourthByte = buf[i + 3]
19575 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
19576 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
19577 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
19578 codePoint = tempCodePoint
19579 }
19580 }
19581 }
19582 }
3af2954a 19583
8b095871
IC
19584 if (codePoint === null) {
19585 // we did not generate a valid codePoint so insert a
19586 // replacement char (U+FFFD) and advance only 1 byte
19587 codePoint = 0xFFFD
19588 bytesPerSequence = 1
19589 } else if (codePoint > 0xFFFF) {
19590 // encode to utf16 (surrogate pair dance)
19591 codePoint -= 0x10000
19592 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
19593 codePoint = 0xDC00 | codePoint & 0x3FF
19594 }
19595
19596 res.push(codePoint)
19597 i += bytesPerSequence
3af2954a
IC
19598 }
19599
8b095871 19600 return decodeCodePointsArray(res)
ab78acc6 19601}
3af2954a 19602
8b095871
IC
19603// Based on http://stackoverflow.com/a/22747272/680742, the browser with
19604// the lowest limit is Chrome, with 0x10000 args.
19605// We go 1 magnitude less, for safety
19606var MAX_ARGUMENTS_LENGTH = 0x1000
3af2954a 19607
8b095871
IC
19608function decodeCodePointsArray (codePoints) {
19609 var len = codePoints.length
19610 if (len <= MAX_ARGUMENTS_LENGTH) {
19611 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
3af2954a
IC
19612 }
19613
8b095871
IC
19614 // Decode in chunks to avoid "call stack size exceeded".
19615 var res = ''
19616 var i = 0
19617 while (i < len) {
19618 res += String.fromCharCode.apply(
19619 String,
19620 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
19621 )
3af2954a 19622 }
8b095871
IC
19623 return res
19624}
3af2954a 19625
8b095871
IC
19626function asciiSlice (buf, start, end) {
19627 var ret = ''
19628 end = Math.min(buf.length, end)
3af2954a 19629
8b095871
IC
19630 for (var i = start; i < end; ++i) {
19631 ret += String.fromCharCode(buf[i] & 0x7F)
3af2954a 19632 }
8b095871
IC
19633 return ret
19634}
3af2954a 19635
8b095871
IC
19636function latin1Slice (buf, start, end) {
19637 var ret = ''
19638 end = Math.min(buf.length, end)
3af2954a 19639
8b095871
IC
19640 for (var i = start; i < end; ++i) {
19641 ret += String.fromCharCode(buf[i])
3af2954a 19642 }
8b095871 19643 return ret
ab78acc6 19644}
3af2954a 19645
8b095871
IC
19646function hexSlice (buf, start, end) {
19647 var len = buf.length
3af2954a 19648
8b095871
IC
19649 if (!start || start < 0) start = 0
19650 if (!end || end < 0 || end > len) end = len
3af2954a 19651
8b095871
IC
19652 var out = ''
19653 for (var i = start; i < end; ++i) {
19654 out += toHex(buf[i])
3af2954a 19655 }
8b095871
IC
19656 return out
19657}
3af2954a 19658
8b095871
IC
19659function utf16leSlice (buf, start, end) {
19660 var bytes = buf.slice(start, end)
19661 var res = ''
19662 for (var i = 0; i < bytes.length; i += 2) {
19663 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
19664 }
19665 return res
19666}
3af2954a 19667
8b095871
IC
19668Buffer.prototype.slice = function slice (start, end) {
19669 var len = this.length
19670 start = ~~start
19671 end = end === undefined ? len : ~~end
3af2954a 19672
8b095871
IC
19673 if (start < 0) {
19674 start += len
19675 if (start < 0) start = 0
19676 } else if (start > len) {
19677 start = len
19678 }
3af2954a 19679
8b095871
IC
19680 if (end < 0) {
19681 end += len
19682 if (end < 0) end = 0
19683 } else if (end > len) {
19684 end = len
19685 }
3af2954a 19686
8b095871 19687 if (end < start) end = start
3af2954a 19688
8b095871
IC
19689 var newBuf = this.subarray(start, end)
19690 // Return an augmented `Uint8Array` instance
19691 newBuf.__proto__ = Buffer.prototype
19692 return newBuf
19693}
3af2954a 19694
8b095871
IC
19695/*
19696 * Need to make sure that buffer isn't trying to write out of bounds.
ab78acc6 19697 */
8b095871
IC
19698function checkOffset (offset, ext, length) {
19699 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
19700 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
ab78acc6 19701}
3af2954a 19702
8b095871
IC
19703Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
19704 offset = offset >>> 0
19705 byteLength = byteLength >>> 0
19706 if (!noAssert) checkOffset(offset, byteLength, this.length)
19707
19708 var val = this[offset]
19709 var mul = 1
19710 var i = 0
19711 while (++i < byteLength && (mul *= 0x100)) {
19712 val += this[offset + i] * mul
3af2954a
IC
19713 }
19714
8b095871
IC
19715 return val
19716}
3af2954a 19717
8b095871
IC
19718Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
19719 offset = offset >>> 0
19720 byteLength = byteLength >>> 0
19721 if (!noAssert) {
19722 checkOffset(offset, byteLength, this.length)
ab78acc6 19723 }
3af2954a 19724
8b095871
IC
19725 var val = this[offset + --byteLength]
19726 var mul = 1
19727 while (byteLength > 0 && (mul *= 0x100)) {
19728 val += this[offset + --byteLength] * mul
ab78acc6 19729 }
3af2954a 19730
8b095871 19731 return val
ab78acc6 19732}
3af2954a 19733
8b095871
IC
19734Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
19735 offset = offset >>> 0
19736 if (!noAssert) checkOffset(offset, 1, this.length)
19737 return this[offset]
ab78acc6 19738}
3af2954a 19739
8b095871
IC
19740Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
19741 offset = offset >>> 0
19742 if (!noAssert) checkOffset(offset, 2, this.length)
19743 return this[offset] | (this[offset + 1] << 8)
19744}
3af2954a 19745
8b095871
IC
19746Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
19747 offset = offset >>> 0
19748 if (!noAssert) checkOffset(offset, 2, this.length)
19749 return (this[offset] << 8) | this[offset + 1]
19750}
3af2954a 19751
8b095871
IC
19752Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
19753 offset = offset >>> 0
19754 if (!noAssert) checkOffset(offset, 4, this.length)
19755
19756 return ((this[offset]) |
19757 (this[offset + 1] << 8) |
19758 (this[offset + 2] << 16)) +
19759 (this[offset + 3] * 0x1000000)
ab78acc6 19760}
3af2954a 19761
8b095871
IC
19762Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
19763 offset = offset >>> 0
19764 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 19765
8b095871
IC
19766 return (this[offset] * 0x1000000) +
19767 ((this[offset + 1] << 16) |
19768 (this[offset + 2] << 8) |
19769 this[offset + 3])
19770}
3af2954a 19771
8b095871
IC
19772Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
19773 offset = offset >>> 0
19774 byteLength = byteLength >>> 0
19775 if (!noAssert) checkOffset(offset, byteLength, this.length)
3af2954a 19776
8b095871
IC
19777 var val = this[offset]
19778 var mul = 1
19779 var i = 0
19780 while (++i < byteLength && (mul *= 0x100)) {
19781 val += this[offset + i] * mul
3af2954a 19782 }
8b095871 19783 mul *= 0x80
3af2954a 19784
8b095871 19785 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3af2954a 19786
8b095871 19787 return val
ab78acc6 19788}
3af2954a 19789
8b095871
IC
19790Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
19791 offset = offset >>> 0
19792 byteLength = byteLength >>> 0
19793 if (!noAssert) checkOffset(offset, byteLength, this.length)
3af2954a 19794
8b095871
IC
19795 var i = byteLength
19796 var mul = 1
19797 var val = this[offset + --i]
19798 while (i > 0 && (mul *= 0x100)) {
19799 val += this[offset + --i] * mul
3af2954a 19800 }
8b095871 19801 mul *= 0x80
3af2954a 19802
8b095871
IC
19803 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
19804
19805 return val
ab78acc6 19806}
3af2954a 19807
8b095871
IC
19808Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
19809 offset = offset >>> 0
19810 if (!noAssert) checkOffset(offset, 1, this.length)
19811 if (!(this[offset] & 0x80)) return (this[offset])
19812 return ((0xff - this[offset] + 1) * -1)
ab78acc6 19813}
3af2954a 19814
8b095871
IC
19815Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
19816 offset = offset >>> 0
19817 if (!noAssert) checkOffset(offset, 2, this.length)
19818 var val = this[offset] | (this[offset + 1] << 8)
19819 return (val & 0x8000) ? val | 0xFFFF0000 : val
ab78acc6 19820}
3af2954a 19821
8b095871
IC
19822Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
19823 offset = offset >>> 0
19824 if (!noAssert) checkOffset(offset, 2, this.length)
19825 var val = this[offset + 1] | (this[offset] << 8)
19826 return (val & 0x8000) ? val | 0xFFFF0000 : val
19827}
ab78acc6 19828
8b095871
IC
19829Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
19830 offset = offset >>> 0
19831 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 19832
8b095871
IC
19833 return (this[offset]) |
19834 (this[offset + 1] << 8) |
19835 (this[offset + 2] << 16) |
19836 (this[offset + 3] << 24)
ab78acc6 19837}
3af2954a 19838
8b095871
IC
19839Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
19840 offset = offset >>> 0
19841 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 19842
8b095871
IC
19843 return (this[offset] << 24) |
19844 (this[offset + 1] << 16) |
19845 (this[offset + 2] << 8) |
19846 (this[offset + 3])
19847}
3af2954a 19848
8b095871
IC
19849Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
19850 offset = offset >>> 0
19851 if (!noAssert) checkOffset(offset, 4, this.length)
19852 return ieee754.read(this, offset, true, 23, 4)
ab78acc6 19853}
3af2954a 19854
8b095871
IC
19855Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
19856 offset = offset >>> 0
19857 if (!noAssert) checkOffset(offset, 4, this.length)
19858 return ieee754.read(this, offset, false, 23, 4)
ab78acc6 19859}
3af2954a 19860
8b095871
IC
19861Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
19862 offset = offset >>> 0
19863 if (!noAssert) checkOffset(offset, 8, this.length)
19864 return ieee754.read(this, offset, true, 52, 8)
19865}
3af2954a 19866
8b095871
IC
19867Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
19868 offset = offset >>> 0
19869 if (!noAssert) checkOffset(offset, 8, this.length)
19870 return ieee754.read(this, offset, false, 52, 8)
ab78acc6 19871}
3af2954a 19872
8b095871
IC
19873function checkInt (buf, value, offset, ext, max, min) {
19874 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
19875 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
19876 if (offset + ext > buf.length) throw new RangeError('Index out of range')
ab78acc6 19877}
3af2954a 19878
8b095871
IC
19879Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
19880 value = +value
19881 offset = offset >>> 0
19882 byteLength = byteLength >>> 0
19883 if (!noAssert) {
19884 var maxBytes = Math.pow(2, 8 * byteLength) - 1
19885 checkInt(this, value, offset, byteLength, maxBytes, 0)
3af2954a
IC
19886 }
19887
8b095871 19888 var mul = 1
ab78acc6 19889 var i = 0
8b095871
IC
19890 this[offset] = value & 0xFF
19891 while (++i < byteLength && (mul *= 0x100)) {
19892 this[offset + i] = (value / mul) & 0xFF
19893 }
3af2954a 19894
8b095871
IC
19895 return offset + byteLength
19896}
19897
19898Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
19899 value = +value
19900 offset = offset >>> 0
19901 byteLength = byteLength >>> 0
19902 if (!noAssert) {
19903 var maxBytes = Math.pow(2, 8 * byteLength) - 1
19904 checkInt(this, value, offset, byteLength, maxBytes, 0)
ab78acc6 19905 }
3af2954a 19906
8b095871
IC
19907 var i = byteLength - 1
19908 var mul = 1
19909 this[offset + i] = value & 0xFF
19910 while (--i >= 0 && (mul *= 0x100)) {
19911 this[offset + i] = (value / mul) & 0xFF
ab78acc6 19912 }
3af2954a 19913
8b095871
IC
19914 return offset + byteLength
19915}
19916
19917Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
19918 value = +value
19919 offset = offset >>> 0
19920 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
19921 this[offset] = (value & 0xff)
19922 return offset + 1
19923}
19924
19925Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
19926 value = +value
19927 offset = offset >>> 0
19928 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
19929 this[offset] = (value & 0xff)
19930 this[offset + 1] = (value >>> 8)
19931 return offset + 2
19932}
19933
19934Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
19935 value = +value
19936 offset = offset >>> 0
19937 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
19938 this[offset] = (value >>> 8)
19939 this[offset + 1] = (value & 0xff)
19940 return offset + 2
ab78acc6 19941}
3af2954a 19942
8b095871
IC
19943Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
19944 value = +value
19945 offset = offset >>> 0
19946 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
19947 this[offset + 3] = (value >>> 24)
19948 this[offset + 2] = (value >>> 16)
19949 this[offset + 1] = (value >>> 8)
19950 this[offset] = (value & 0xff)
19951 return offset + 4
ab78acc6 19952}
3af2954a 19953
8b095871
IC
19954Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
19955 value = +value
19956 offset = offset >>> 0
19957 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
19958 this[offset] = (value >>> 24)
19959 this[offset + 1] = (value >>> 16)
19960 this[offset + 2] = (value >>> 8)
19961 this[offset + 3] = (value & 0xff)
19962 return offset + 4
19963}
3af2954a 19964
8b095871
IC
19965Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
19966 value = +value
19967 offset = offset >>> 0
19968 if (!noAssert) {
19969 var limit = Math.pow(2, (8 * byteLength) - 1)
19970
19971 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3af2954a
IC
19972 }
19973
8b095871
IC
19974 var i = 0
19975 var mul = 1
19976 var sub = 0
19977 this[offset] = value & 0xFF
19978 while (++i < byteLength && (mul *= 0x100)) {
19979 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
19980 sub = 1
ab78acc6 19981 }
8b095871 19982 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3af2954a
IC
19983 }
19984
8b095871 19985 return offset + byteLength
ab78acc6 19986}
3af2954a 19987
8b095871
IC
19988Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
19989 value = +value
19990 offset = offset >>> 0
19991 if (!noAssert) {
19992 var limit = Math.pow(2, (8 * byteLength) - 1)
ab78acc6 19993
8b095871
IC
19994 checkInt(this, value, offset, byteLength, limit - 1, -limit)
19995 }
ab78acc6 19996
8b095871
IC
19997 var i = byteLength - 1
19998 var mul = 1
19999 var sub = 0
20000 this[offset + i] = value & 0xFF
20001 while (--i >= 0 && (mul *= 0x100)) {
20002 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
20003 sub = 1
3af2954a 20004 }
8b095871 20005 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3af2954a 20006 }
3af2954a 20007
8b095871
IC
20008 return offset + byteLength
20009}
3af2954a 20010
8b095871
IC
20011Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
20012 value = +value
20013 offset = offset >>> 0
20014 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
20015 if (value < 0) value = 0xff + value + 1
20016 this[offset] = (value & 0xff)
20017 return offset + 1
20018}
3af2954a 20019
8b095871
IC
20020Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
20021 value = +value
20022 offset = offset >>> 0
20023 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
20024 this[offset] = (value & 0xff)
20025 this[offset + 1] = (value >>> 8)
20026 return offset + 2
20027}
3af2954a 20028
8b095871
IC
20029Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
20030 value = +value
20031 offset = offset >>> 0
20032 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
20033 this[offset] = (value >>> 8)
20034 this[offset + 1] = (value & 0xff)
20035 return offset + 2
20036}
3af2954a 20037
8b095871
IC
20038Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
20039 value = +value
20040 offset = offset >>> 0
20041 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
20042 this[offset] = (value & 0xff)
20043 this[offset + 1] = (value >>> 8)
20044 this[offset + 2] = (value >>> 16)
20045 this[offset + 3] = (value >>> 24)
20046 return offset + 4
20047}
3af2954a 20048
8b095871
IC
20049Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
20050 value = +value
20051 offset = offset >>> 0
20052 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
20053 if (value < 0) value = 0xffffffff + value + 1
20054 this[offset] = (value >>> 24)
20055 this[offset + 1] = (value >>> 16)
20056 this[offset + 2] = (value >>> 8)
20057 this[offset + 3] = (value & 0xff)
20058 return offset + 4
20059}
3af2954a 20060
8b095871
IC
20061function checkIEEE754 (buf, value, offset, ext, max, min) {
20062 if (offset + ext > buf.length) throw new RangeError('Index out of range')
20063 if (offset < 0) throw new RangeError('Index out of range')
20064}
3af2954a 20065
8b095871
IC
20066function writeFloat (buf, value, offset, littleEndian, noAssert) {
20067 value = +value
20068 offset = offset >>> 0
20069 if (!noAssert) {
20070 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
3af2954a 20071 }
8b095871
IC
20072 ieee754.write(buf, value, offset, littleEndian, 23, 4)
20073 return offset + 4
ab78acc6 20074}
3af2954a 20075
8b095871
IC
20076Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
20077 return writeFloat(this, value, offset, true, noAssert)
ab78acc6 20078}
3af2954a 20079
8b095871
IC
20080Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
20081 return writeFloat(this, value, offset, false, noAssert)
ab78acc6 20082}
3af2954a 20083
8b095871
IC
20084function writeDouble (buf, value, offset, littleEndian, noAssert) {
20085 value = +value
20086 offset = offset >>> 0
20087 if (!noAssert) {
20088 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
3af2954a 20089 }
8b095871
IC
20090 ieee754.write(buf, value, offset, littleEndian, 52, 8)
20091 return offset + 8
ab78acc6 20092}
3af2954a 20093
8b095871
IC
20094Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
20095 return writeDouble(this, value, offset, true, noAssert)
ab78acc6 20096}
3af2954a 20097
8b095871
IC
20098Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
20099 return writeDouble(this, value, offset, false, noAssert)
20100}
3af2954a 20101
8b095871
IC
20102// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
20103Buffer.prototype.copy = function copy (target, targetStart, start, end) {
20104 if (!start) start = 0
20105 if (!end && end !== 0) end = this.length
20106 if (targetStart >= target.length) targetStart = target.length
20107 if (!targetStart) targetStart = 0
20108 if (end > 0 && end < start) end = start
3af2954a 20109
8b095871
IC
20110 // Copy 0 bytes; we're done
20111 if (end === start) return 0
20112 if (target.length === 0 || this.length === 0) return 0
3af2954a 20113
8b095871
IC
20114 // Fatal error conditions
20115 if (targetStart < 0) {
20116 throw new RangeError('targetStart out of bounds')
3af2954a 20117 }
8b095871
IC
20118 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
20119 if (end < 0) throw new RangeError('sourceEnd out of bounds')
20120
20121 // Are we oob?
20122 if (end > this.length) end = this.length
20123 if (target.length - targetStart < end - start) {
20124 end = target.length - targetStart + start
3af2954a 20125 }
8b095871
IC
20126
20127 var len = end - start
20128 var i
20129
20130 if (this === target && start < targetStart && targetStart < end) {
20131 // descending copy from end
20132 for (i = len - 1; i >= 0; --i) {
20133 target[i + targetStart] = this[i + start]
3af2954a 20134 }
8b095871
IC
20135 } else if (len < 1000) {
20136 // ascending copy from start
20137 for (i = 0; i < len; ++i) {
20138 target[i + targetStart] = this[i + start]
20139 }
20140 } else {
20141 Uint8Array.prototype.set.call(
20142 target,
20143 this.subarray(start, start + len),
20144 targetStart
20145 )
3af2954a
IC
20146 }
20147
8b095871
IC
20148 return len
20149}
20150
20151// Usage:
20152// buffer.fill(number[, offset[, end]])
20153// buffer.fill(buffer[, offset[, end]])
20154// buffer.fill(string[, offset[, end]][, encoding])
20155Buffer.prototype.fill = function fill (val, start, end, encoding) {
20156 // Handle string cases:
20157 if (typeof val === 'string') {
20158 if (typeof start === 'string') {
20159 encoding = start
20160 start = 0
20161 end = this.length
20162 } else if (typeof end === 'string') {
20163 encoding = end
20164 end = this.length
20165 }
20166 if (val.length === 1) {
20167 var code = val.charCodeAt(0)
20168 if (code < 256) {
20169 val = code
3af2954a 20170 }
3af2954a 20171 }
8b095871
IC
20172 if (encoding !== undefined && typeof encoding !== 'string') {
20173 throw new TypeError('encoding must be a string')
20174 }
20175 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
20176 throw new TypeError('Unknown encoding: ' + encoding)
20177 }
20178 } else if (typeof val === 'number') {
20179 val = val & 255
ab78acc6 20180 }
3af2954a 20181
8b095871
IC
20182 // Invalid ranges are not set to a default, so can range check early.
20183 if (start < 0 || this.length < start || this.length < end) {
20184 throw new RangeError('Out of range index')
20185 }
3af2954a 20186
8b095871
IC
20187 if (end <= start) {
20188 return this
20189 }
3af2954a 20190
8b095871
IC
20191 start = start >>> 0
20192 end = end === undefined ? this.length : end >>> 0
3af2954a 20193
8b095871
IC
20194 if (!val) val = 0
20195
20196 var i
20197 if (typeof val === 'number') {
20198 for (i = start; i < end; ++i) {
20199 this[i] = val
20200 }
ab78acc6 20201 } else {
8b095871
IC
20202 var bytes = Buffer.isBuffer(val)
20203 ? val
20204 : new Buffer(val, encoding)
20205 var len = bytes.length
20206 for (i = 0; i < end - start; ++i) {
20207 this[i + start] = bytes[i % len]
ab78acc6
IC
20208 }
20209 }
3af2954a 20210
8b095871
IC
20211 return this
20212}
3af2954a 20213
8b095871
IC
20214// HELPER FUNCTIONS
20215// ================
20216
20217var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
20218
20219function base64clean (str) {
20220 // Node strips out invalid characters like \n and \t from the string, base64-js does not
20221 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
20222 // Node converts strings with length < 2 to ''
20223 if (str.length < 2) return ''
20224 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
20225 while (str.length % 4 !== 0) {
20226 str = str + '='
3af2954a 20227 }
8b095871 20228 return str
ab78acc6
IC
20229}
20230
8b095871
IC
20231function stringtrim (str) {
20232 if (str.trim) return str.trim()
20233 return str.replace(/^\s+|\s+$/g, '')
ab78acc6 20234}
3af2954a 20235
8b095871
IC
20236function toHex (n) {
20237 if (n < 16) return '0' + n.toString(16)
20238 return n.toString(16)
ab78acc6 20239}
3af2954a 20240
8b095871
IC
20241function utf8ToBytes (string, units) {
20242 units = units || Infinity
20243 var codePoint
20244 var length = string.length
20245 var leadSurrogate = null
20246 var bytes = []
3af2954a 20247
8b095871
IC
20248 for (var i = 0; i < length; ++i) {
20249 codePoint = string.charCodeAt(i)
3af2954a 20250
8b095871
IC
20251 // is surrogate component
20252 if (codePoint > 0xD7FF && codePoint < 0xE000) {
20253 // last char was a lead
20254 if (!leadSurrogate) {
20255 // no lead yet
20256 if (codePoint > 0xDBFF) {
20257 // unexpected trail
20258 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
20259 continue
20260 } else if (i + 1 === length) {
20261 // unpaired lead
20262 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
20263 continue
20264 }
3af2954a 20265
8b095871
IC
20266 // valid lead
20267 leadSurrogate = codePoint
20268
20269 continue
20270 }
20271
20272 // 2 leads in a row
20273 if (codePoint < 0xDC00) {
20274 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
20275 leadSurrogate = codePoint
20276 continue
20277 }
20278
20279 // valid surrogate pair
20280 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
20281 } else if (leadSurrogate) {
20282 // valid bmp char, but last char was a lead
20283 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
20284 }
20285
20286 leadSurrogate = null
20287
20288 // encode utf8
20289 if (codePoint < 0x80) {
20290 if ((units -= 1) < 0) break
20291 bytes.push(codePoint)
20292 } else if (codePoint < 0x800) {
20293 if ((units -= 2) < 0) break
20294 bytes.push(
20295 codePoint >> 0x6 | 0xC0,
20296 codePoint & 0x3F | 0x80
20297 )
20298 } else if (codePoint < 0x10000) {
20299 if ((units -= 3) < 0) break
20300 bytes.push(
20301 codePoint >> 0xC | 0xE0,
20302 codePoint >> 0x6 & 0x3F | 0x80,
20303 codePoint & 0x3F | 0x80
20304 )
20305 } else if (codePoint < 0x110000) {
20306 if ((units -= 4) < 0) break
20307 bytes.push(
20308 codePoint >> 0x12 | 0xF0,
20309 codePoint >> 0xC & 0x3F | 0x80,
20310 codePoint >> 0x6 & 0x3F | 0x80,
20311 codePoint & 0x3F | 0x80
20312 )
ab78acc6 20313 } else {
8b095871 20314 throw new Error('Invalid code point')
ab78acc6 20315 }
3af2954a
IC
20316 }
20317
8b095871
IC
20318 return bytes
20319}
3af2954a 20320
8b095871
IC
20321function asciiToBytes (str) {
20322 var byteArray = []
20323 for (var i = 0; i < str.length; ++i) {
20324 // Node's code seems to be doing this and not & 0x7F..
20325 byteArray.push(str.charCodeAt(i) & 0xFF)
ab78acc6 20326 }
8b095871
IC
20327 return byteArray
20328}
3af2954a 20329
8b095871
IC
20330function utf16leToBytes (str, units) {
20331 var c, hi, lo
20332 var byteArray = []
20333 for (var i = 0; i < str.length; ++i) {
20334 if ((units -= 2) < 0) break
3af2954a 20335
8b095871
IC
20336 c = str.charCodeAt(i)
20337 hi = c >> 8
20338 lo = c % 256
20339 byteArray.push(lo)
20340 byteArray.push(hi)
20341 }
ebd8d4e8 20342
8b095871
IC
20343 return byteArray
20344}
20345
20346function base64ToBytes (str) {
20347 return base64.toByteArray(base64clean(str))
20348}
20349
20350function blitBuffer (src, dst, offset, length) {
20351 for (var i = 0; i < length; ++i) {
20352 if ((i + offset >= dst.length) || (i >= src.length)) break
20353 dst[i + offset] = src[i]
20354 }
20355 return i
20356}
20357
20358function isnan (val) {
20359 return val !== val // eslint-disable-line no-self-compare
20360}
20361
20362},{"base64-js":2,"ieee754":8}],6:[function(require,module,exports){
20363(function (Buffer){
20364// Copyright Joyent, Inc. and other Node contributors.
20365//
20366// Permission is hereby granted, free of charge, to any person obtaining a
20367// copy of this software and associated documentation files (the
20368// "Software"), to deal in the Software without restriction, including
20369// without limitation the rights to use, copy, modify, merge, publish,
20370// distribute, sublicense, and/or sell copies of the Software, and to permit
20371// persons to whom the Software is furnished to do so, subject to the
20372// following conditions:
20373//
20374// The above copyright notice and this permission notice shall be included
20375// in all copies or substantial portions of the Software.
20376//
20377// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20378// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20379// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
20380// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
20381// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
20382// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20383// USE OR OTHER DEALINGS IN THE SOFTWARE.
20384
20385// NOTE: These type checking functions intentionally don't use `instanceof`
20386// because it is fragile and can be easily faked with `Object.create()`.
ebd8d4e8 20387
8b095871
IC
20388function isArray(arg) {
20389 if (Array.isArray) {
20390 return Array.isArray(arg);
20391 }
20392 return objectToString(arg) === '[object Array]';
20393}
20394exports.isArray = isArray;
ebd8d4e8 20395
8b095871
IC
20396function isBoolean(arg) {
20397 return typeof arg === 'boolean';
20398}
20399exports.isBoolean = isBoolean;
ebd8d4e8 20400
8b095871
IC
20401function isNull(arg) {
20402 return arg === null;
20403}
20404exports.isNull = isNull;
ebd8d4e8 20405
8b095871
IC
20406function isNullOrUndefined(arg) {
20407 return arg == null;
20408}
20409exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 20410
8b095871
IC
20411function isNumber(arg) {
20412 return typeof arg === 'number';
ab78acc6 20413}
8b095871 20414exports.isNumber = isNumber;
212b1b46 20415
8b095871
IC
20416function isString(arg) {
20417 return typeof arg === 'string';
ab78acc6 20418}
8b095871 20419exports.isString = isString;
212b1b46 20420
8b095871
IC
20421function isSymbol(arg) {
20422 return typeof arg === 'symbol';
ab78acc6 20423}
8b095871 20424exports.isSymbol = isSymbol;
ab78acc6 20425
8b095871
IC
20426function isUndefined(arg) {
20427 return arg === void 0;
20428}
20429exports.isUndefined = isUndefined;
ab78acc6 20430
8b095871
IC
20431function isRegExp(re) {
20432 return objectToString(re) === '[object RegExp]';
20433}
20434exports.isRegExp = isRegExp;
ab78acc6 20435
8b095871
IC
20436function isObject(arg) {
20437 return typeof arg === 'object' && arg !== null;
20438}
20439exports.isObject = isObject;
212b1b46 20440
8b095871
IC
20441function isDate(d) {
20442 return objectToString(d) === '[object Date]';
20443}
20444exports.isDate = isDate;
212b1b46 20445
8b095871
IC
20446function isError(e) {
20447 return (objectToString(e) === '[object Error]' || e instanceof Error);
20448}
20449exports.isError = isError;
212b1b46 20450
8b095871
IC
20451function isFunction(arg) {
20452 return typeof arg === 'function';
20453}
20454exports.isFunction = isFunction;
212b1b46 20455
8b095871
IC
20456function isPrimitive(arg) {
20457 return arg === null ||
20458 typeof arg === 'boolean' ||
20459 typeof arg === 'number' ||
20460 typeof arg === 'string' ||
20461 typeof arg === 'symbol' || // ES6 symbol
20462 typeof arg === 'undefined';
ab78acc6 20463}
8b095871 20464exports.isPrimitive = isPrimitive;
212b1b46 20465
8b095871 20466exports.isBuffer = Buffer.isBuffer;
ab78acc6 20467
8b095871
IC
20468function objectToString(o) {
20469 return Object.prototype.toString.call(o);
ab78acc6 20470}
212b1b46 20471
8b095871
IC
20472}).call(this,{"isBuffer":require("../../is-buffer/index.js")})
20473},{"../../is-buffer/index.js":10}],7:[function(require,module,exports){
20474// Copyright Joyent, Inc. and other Node contributors.
20475//
20476// Permission is hereby granted, free of charge, to any person obtaining a
20477// copy of this software and associated documentation files (the
20478// "Software"), to deal in the Software without restriction, including
20479// without limitation the rights to use, copy, modify, merge, publish,
20480// distribute, sublicense, and/or sell copies of the Software, and to permit
20481// persons to whom the Software is furnished to do so, subject to the
20482// following conditions:
20483//
20484// The above copyright notice and this permission notice shall be included
20485// in all copies or substantial portions of the Software.
20486//
20487// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20488// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20489// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
20490// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
20491// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
20492// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20493// USE OR OTHER DEALINGS IN THE SOFTWARE.
212b1b46 20494
8b095871
IC
20495function EventEmitter() {
20496 this._events = this._events || {};
20497 this._maxListeners = this._maxListeners || undefined;
ab78acc6 20498}
8b095871 20499module.exports = EventEmitter;
212b1b46 20500
8b095871
IC
20501// Backwards-compat with node 0.10.x
20502EventEmitter.EventEmitter = EventEmitter;
212b1b46 20503
8b095871
IC
20504EventEmitter.prototype._events = undefined;
20505EventEmitter.prototype._maxListeners = undefined;
212b1b46 20506
8b095871
IC
20507// By default EventEmitters will print a warning if more than 10 listeners are
20508// added to it. This is a useful default which helps finding memory leaks.
20509EventEmitter.defaultMaxListeners = 10;
212b1b46 20510
8b095871
IC
20511// Obviously not all Emitters should be limited to 10. This function allows
20512// that to be increased. Set to zero for unlimited.
20513EventEmitter.prototype.setMaxListeners = function(n) {
20514 if (!isNumber(n) || n < 0 || isNaN(n))
20515 throw TypeError('n must be a positive number');
20516 this._maxListeners = n;
20517 return this;
20518};
212b1b46 20519
8b095871
IC
20520EventEmitter.prototype.emit = function(type) {
20521 var er, handler, len, args, i, listeners;
212b1b46 20522
8b095871
IC
20523 if (!this._events)
20524 this._events = {};
212b1b46 20525
8b095871
IC
20526 // If there is no 'error' event listener then throw.
20527 if (type === 'error') {
20528 if (!this._events.error ||
20529 (isObject(this._events.error) && !this._events.error.length)) {
20530 er = arguments[1];
20531 if (er instanceof Error) {
20532 throw er; // Unhandled 'error' event
20533 } else {
20534 // At least give some kind of context to the user
20535 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
20536 err.context = er;
20537 throw err;
20538 }
20539 }
ab78acc6 20540 }
212b1b46 20541
8b095871 20542 handler = this._events[type];
212b1b46 20543
8b095871
IC
20544 if (isUndefined(handler))
20545 return false;
20546
20547 if (isFunction(handler)) {
20548 switch (arguments.length) {
20549 // fast cases
20550 case 1:
20551 handler.call(this);
20552 break;
20553 case 2:
20554 handler.call(this, arguments[1]);
20555 break;
20556 case 3:
20557 handler.call(this, arguments[1], arguments[2]);
20558 break;
20559 // slower
20560 default:
20561 args = Array.prototype.slice.call(arguments, 1);
20562 handler.apply(this, args);
3af2954a 20563 }
8b095871
IC
20564 } else if (isObject(handler)) {
20565 args = Array.prototype.slice.call(arguments, 1);
20566 listeners = handler.slice();
20567 len = listeners.length;
20568 for (i = 0; i < len; i++)
20569 listeners[i].apply(this, args);
3af2954a 20570 }
212b1b46 20571
8b095871
IC
20572 return true;
20573};
ebd8d4e8 20574
8b095871
IC
20575EventEmitter.prototype.addListener = function(type, listener) {
20576 var m;
ebd8d4e8 20577
8b095871
IC
20578 if (!isFunction(listener))
20579 throw TypeError('listener must be a function');
ebd8d4e8 20580
8b095871
IC
20581 if (!this._events)
20582 this._events = {};
3af2954a 20583
8b095871
IC
20584 // To avoid recursion in the case that type === "newListener"! Before
20585 // adding it to the listeners, first emit "newListener".
20586 if (this._events.newListener)
20587 this.emit('newListener', type,
20588 isFunction(listener.listener) ?
20589 listener.listener : listener);
3af2954a 20590
8b095871
IC
20591 if (!this._events[type])
20592 // Optimize the case of one listener. Don't need the extra array object.
20593 this._events[type] = listener;
20594 else if (isObject(this._events[type]))
20595 // If we've already got an array, just append.
20596 this._events[type].push(listener);
20597 else
20598 // Adding the second element, need to change to array.
20599 this._events[type] = [this._events[type], listener];
3af2954a 20600
8b095871
IC
20601 // Check for listener leak
20602 if (isObject(this._events[type]) && !this._events[type].warned) {
20603 if (!isUndefined(this._maxListeners)) {
20604 m = this._maxListeners;
20605 } else {
20606 m = EventEmitter.defaultMaxListeners;
20607 }
3af2954a 20608
8b095871
IC
20609 if (m && m > 0 && this._events[type].length > m) {
20610 this._events[type].warned = true;
20611 console.error('(node) warning: possible EventEmitter memory ' +
20612 'leak detected. %d listeners added. ' +
20613 'Use emitter.setMaxListeners() to increase limit.',
20614 this._events[type].length);
20615 if (typeof console.trace === 'function') {
20616 // not supported in IE 10
20617 console.trace();
20618 }
20619 }
3af2954a
IC
20620 }
20621
8b095871
IC
20622 return this;
20623};
3af2954a 20624
8b095871 20625EventEmitter.prototype.on = EventEmitter.prototype.addListener;
3af2954a 20626
8b095871
IC
20627EventEmitter.prototype.once = function(type, listener) {
20628 if (!isFunction(listener))
20629 throw TypeError('listener must be a function');
3af2954a 20630
8b095871 20631 var fired = false;
ebd8d4e8 20632
8b095871
IC
20633 function g() {
20634 this.removeListener(type, g);
3af2954a 20635
8b095871
IC
20636 if (!fired) {
20637 fired = true;
20638 listener.apply(this, arguments);
20639 }
20640 }
3af2954a 20641
8b095871
IC
20642 g.listener = listener;
20643 this.on(type, g);
ebd8d4e8 20644
8b095871
IC
20645 return this;
20646};
ebd8d4e8 20647
8b095871
IC
20648// emits a 'removeListener' event iff the listener was removed
20649EventEmitter.prototype.removeListener = function(type, listener) {
20650 var list, position, length, i;
ebd8d4e8 20651
8b095871
IC
20652 if (!isFunction(listener))
20653 throw TypeError('listener must be a function');
ebd8d4e8 20654
8b095871
IC
20655 if (!this._events || !this._events[type])
20656 return this;
ab78acc6 20657
8b095871
IC
20658 list = this._events[type];
20659 length = list.length;
20660 position = -1;
ebd8d4e8 20661
8b095871
IC
20662 if (list === listener ||
20663 (isFunction(list.listener) && list.listener === listener)) {
20664 delete this._events[type];
20665 if (this._events.removeListener)
20666 this.emit('removeListener', type, listener);
ebd8d4e8 20667
8b095871
IC
20668 } else if (isObject(list)) {
20669 for (i = length; i-- > 0;) {
20670 if (list[i] === listener ||
20671 (list[i].listener && list[i].listener === listener)) {
20672 position = i;
20673 break;
20674 }
20675 }
20676
20677 if (position < 0)
20678 return this;
20679
20680 if (list.length === 1) {
20681 list.length = 0;
20682 delete this._events[type];
20683 } else {
20684 list.splice(position, 1);
20685 }
20686
20687 if (this._events.removeListener)
20688 this.emit('removeListener', type, listener);
ab78acc6 20689 }
ebd8d4e8 20690
8b095871
IC
20691 return this;
20692};
ebd8d4e8 20693
8b095871
IC
20694EventEmitter.prototype.removeAllListeners = function(type) {
20695 var key, listeners;
ebd8d4e8 20696
8b095871
IC
20697 if (!this._events)
20698 return this;
ab78acc6 20699
8b095871
IC
20700 // not listening for removeListener, no need to emit
20701 if (!this._events.removeListener) {
20702 if (arguments.length === 0)
20703 this._events = {};
20704 else if (this._events[type])
20705 delete this._events[type];
20706 return this;
20707 }
ab78acc6 20708
8b095871
IC
20709 // emit removeListener for all listeners on all events
20710 if (arguments.length === 0) {
20711 for (key in this._events) {
20712 if (key === 'removeListener') continue;
20713 this.removeAllListeners(key);
20714 }
20715 this.removeAllListeners('removeListener');
20716 this._events = {};
20717 return this;
20718 }
ebd8d4e8 20719
8b095871 20720 listeners = this._events[type];
ebd8d4e8 20721
8b095871
IC
20722 if (isFunction(listeners)) {
20723 this.removeListener(type, listeners);
20724 } else if (listeners) {
20725 // LIFO order
20726 while (listeners.length)
20727 this.removeListener(type, listeners[listeners.length - 1]);
20728 }
20729 delete this._events[type];
ebd8d4e8 20730
8b095871
IC
20731 return this;
20732};
ebd8d4e8 20733
8b095871
IC
20734EventEmitter.prototype.listeners = function(type) {
20735 var ret;
20736 if (!this._events || !this._events[type])
20737 ret = [];
20738 else if (isFunction(this._events[type]))
20739 ret = [this._events[type]];
20740 else
20741 ret = this._events[type].slice();
20742 return ret;
20743};
ebd8d4e8 20744
8b095871
IC
20745EventEmitter.prototype.listenerCount = function(type) {
20746 if (this._events) {
20747 var evlistener = this._events[type];
ebd8d4e8 20748
8b095871
IC
20749 if (isFunction(evlistener))
20750 return 1;
20751 else if (evlistener)
20752 return evlistener.length;
20753 }
20754 return 0;
20755};
20756
20757EventEmitter.listenerCount = function(emitter, type) {
20758 return emitter.listenerCount(type);
20759};
20760
20761function isFunction(arg) {
20762 return typeof arg === 'function';
ebd8d4e8
IC
20763}
20764
8b095871
IC
20765function isNumber(arg) {
20766 return typeof arg === 'number';
ebd8d4e8
IC
20767}
20768
8b095871
IC
20769function isObject(arg) {
20770 return typeof arg === 'object' && arg !== null;
ebd8d4e8
IC
20771}
20772
8b095871
IC
20773function isUndefined(arg) {
20774 return arg === void 0;
ebd8d4e8
IC
20775}
20776
8b095871
IC
20777},{}],8:[function(require,module,exports){
20778exports.read = function (buffer, offset, isLE, mLen, nBytes) {
20779 var e, m
20780 var eLen = nBytes * 8 - mLen - 1
20781 var eMax = (1 << eLen) - 1
20782 var eBias = eMax >> 1
20783 var nBits = -7
20784 var i = isLE ? (nBytes - 1) : 0
20785 var d = isLE ? -1 : 1
20786 var s = buffer[offset + i]
ebd8d4e8 20787
8b095871 20788 i += d
ebd8d4e8 20789
8b095871
IC
20790 e = s & ((1 << (-nBits)) - 1)
20791 s >>= (-nBits)
20792 nBits += eLen
20793 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
ebd8d4e8 20794
8b095871
IC
20795 m = e & ((1 << (-nBits)) - 1)
20796 e >>= (-nBits)
20797 nBits += mLen
20798 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
ebd8d4e8 20799
8b095871
IC
20800 if (e === 0) {
20801 e = 1 - eBias
20802 } else if (e === eMax) {
20803 return m ? NaN : ((s ? -1 : 1) * Infinity)
20804 } else {
20805 m = m + Math.pow(2, mLen)
20806 e = e - eBias
ab78acc6 20807 }
8b095871 20808 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
ebd8d4e8
IC
20809}
20810
8b095871
IC
20811exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
20812 var e, m, c
20813 var eLen = nBytes * 8 - mLen - 1
20814 var eMax = (1 << eLen) - 1
20815 var eBias = eMax >> 1
20816 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
20817 var i = isLE ? 0 : (nBytes - 1)
20818 var d = isLE ? 1 : -1
20819 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
ebd8d4e8 20820
8b095871 20821 value = Math.abs(value)
ebd8d4e8 20822
8b095871
IC
20823 if (isNaN(value) || value === Infinity) {
20824 m = isNaN(value) ? 1 : 0
20825 e = eMax
ab78acc6 20826 } else {
8b095871
IC
20827 e = Math.floor(Math.log(value) / Math.LN2)
20828 if (value * (c = Math.pow(2, -e)) < 1) {
20829 e--
20830 c *= 2
20831 }
20832 if (e + eBias >= 1) {
20833 value += rt / c
20834 } else {
20835 value += rt * Math.pow(2, 1 - eBias)
20836 }
20837 if (value * c >= 2) {
20838 e++
20839 c /= 2
20840 }
ebd8d4e8 20841
8b095871
IC
20842 if (e + eBias >= eMax) {
20843 m = 0
20844 e = eMax
20845 } else if (e + eBias >= 1) {
20846 m = (value * c - 1) * Math.pow(2, mLen)
20847 e = e + eBias
20848 } else {
20849 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
20850 e = 0
20851 }
ebd8d4e8 20852 }
ebd8d4e8 20853
8b095871 20854 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
ebd8d4e8 20855
8b095871
IC
20856 e = (e << mLen) | m
20857 eLen += mLen
20858 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
ebd8d4e8 20859
8b095871 20860 buffer[offset + i - d] |= s * 128
ab78acc6
IC
20861}
20862
8b095871
IC
20863},{}],9:[function(require,module,exports){
20864if (typeof Object.create === 'function') {
20865 // implementation from standard node.js 'util' module
20866 module.exports = function inherits(ctor, superCtor) {
20867 ctor.super_ = superCtor
20868 ctor.prototype = Object.create(superCtor.prototype, {
20869 constructor: {
20870 value: ctor,
20871 enumerable: false,
20872 writable: true,
20873 configurable: true
20874 }
20875 });
20876 };
20877} else {
20878 // old school shim for old browsers
20879 module.exports = function inherits(ctor, superCtor) {
20880 ctor.super_ = superCtor
20881 var TempCtor = function () {}
20882 TempCtor.prototype = superCtor.prototype
20883 ctor.prototype = new TempCtor()
20884 ctor.prototype.constructor = ctor
ebd8d4e8 20885 }
8b095871 20886}
ab78acc6 20887
8b095871
IC
20888},{}],10:[function(require,module,exports){
20889/*!
20890 * Determine if an object is a Buffer
20891 *
20892 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
20893 * @license MIT
20894 */
ebd8d4e8 20895
8b095871
IC
20896// The _isBuffer check is for Safari 5-7 support, because it's missing
20897// Object.prototype.constructor. Remove this eventually
20898module.exports = function (obj) {
20899 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
ebd8d4e8
IC
20900}
20901
8b095871
IC
20902function isBuffer (obj) {
20903 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
20904}
ebd8d4e8 20905
8b095871
IC
20906// For Node v0.10 support. Remove this eventually.
20907function isSlowBuffer (obj) {
20908 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
20909}
ebd8d4e8 20910
8b095871
IC
20911},{}],11:[function(require,module,exports){
20912var toString = {}.toString;
ab78acc6 20913
8b095871
IC
20914module.exports = Array.isArray || function (arr) {
20915 return toString.call(arr) == '[object Array]';
20916};
ebd8d4e8 20917
8b095871
IC
20918},{}],12:[function(require,module,exports){
20919(function (process){
20920'use strict';
ebd8d4e8 20921
8b095871
IC
20922if (!process.version ||
20923 process.version.indexOf('v0.') === 0 ||
20924 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
20925 module.exports = nextTick;
20926} else {
20927 module.exports = process.nextTick;
20928}
20929
20930function nextTick(fn, arg1, arg2, arg3) {
20931 if (typeof fn !== 'function') {
20932 throw new TypeError('"callback" argument must be a function');
20933 }
20934 var len = arguments.length;
20935 var args, i;
20936 switch (len) {
20937 case 0:
20938 case 1:
20939 return process.nextTick(fn);
20940 case 2:
20941 return process.nextTick(function afterTickOne() {
20942 fn.call(null, arg1);
20943 });
20944 case 3:
20945 return process.nextTick(function afterTickTwo() {
20946 fn.call(null, arg1, arg2);
20947 });
20948 case 4:
20949 return process.nextTick(function afterTickThree() {
20950 fn.call(null, arg1, arg2, arg3);
20951 });
20952 default:
20953 args = new Array(len - 1);
20954 i = 0;
20955 while (i < args.length) {
20956 args[i++] = arguments[i];
20957 }
20958 return process.nextTick(function afterTick() {
20959 fn.apply(null, args);
20960 });
ab78acc6 20961 }
ebd8d4e8
IC
20962}
20963
8b095871
IC
20964}).call(this,require('_process'))
20965},{"_process":13}],13:[function(require,module,exports){
20966// shim for using process in browser
20967var process = module.exports = {};
ebd8d4e8 20968
8b095871
IC
20969// cached from whatever global is present so that test runners that stub it
20970// don't break things. But we need to wrap it in a try catch in case it is
20971// wrapped in strict mode code which doesn't define any globals. It's inside a
20972// function because try/catches deoptimize in certain engines.
ab78acc6 20973
8b095871
IC
20974var cachedSetTimeout;
20975var cachedClearTimeout;
ebd8d4e8 20976
8b095871
IC
20977function defaultSetTimout() {
20978 throw new Error('setTimeout has not been defined');
ab78acc6 20979}
8b095871
IC
20980function defaultClearTimeout () {
20981 throw new Error('clearTimeout has not been defined');
ab78acc6 20982}
8b095871
IC
20983(function () {
20984 try {
20985 if (typeof setTimeout === 'function') {
20986 cachedSetTimeout = setTimeout;
20987 } else {
20988 cachedSetTimeout = defaultSetTimout;
20989 }
20990 } catch (e) {
20991 cachedSetTimeout = defaultSetTimout;
20992 }
20993 try {
20994 if (typeof clearTimeout === 'function') {
20995 cachedClearTimeout = clearTimeout;
20996 } else {
20997 cachedClearTimeout = defaultClearTimeout;
20998 }
20999 } catch (e) {
21000 cachedClearTimeout = defaultClearTimeout;
21001 }
21002} ())
21003function runTimeout(fun) {
21004 if (cachedSetTimeout === setTimeout) {
21005 //normal enviroments in sane situations
21006 return setTimeout(fun, 0);
21007 }
21008 // if setTimeout wasn't available but was latter defined
21009 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
21010 cachedSetTimeout = setTimeout;
21011 return setTimeout(fun, 0);
21012 }
21013 try {
21014 // when when somebody has screwed with setTimeout but no I.E. maddness
21015 return cachedSetTimeout(fun, 0);
21016 } catch(e){
21017 try {
21018 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
21019 return cachedSetTimeout.call(null, fun, 0);
21020 } catch(e){
21021 // 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
21022 return cachedSetTimeout.call(this, fun, 0);
21023 }
21024 }
21025
ebd8d4e8 21026
ab78acc6 21027}
8b095871
IC
21028function runClearTimeout(marker) {
21029 if (cachedClearTimeout === clearTimeout) {
21030 //normal enviroments in sane situations
21031 return clearTimeout(marker);
21032 }
21033 // if clearTimeout wasn't available but was latter defined
21034 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
21035 cachedClearTimeout = clearTimeout;
21036 return clearTimeout(marker);
21037 }
21038 try {
21039 // when when somebody has screwed with setTimeout but no I.E. maddness
21040 return cachedClearTimeout(marker);
21041 } catch (e){
21042 try {
21043 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
21044 return cachedClearTimeout.call(null, marker);
21045 } catch (e){
21046 // 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.
21047 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
21048 return cachedClearTimeout.call(this, marker);
21049 }
21050 }
21051
21052
ebd8d4e8 21053
ab78acc6 21054}
8b095871
IC
21055var queue = [];
21056var draining = false;
21057var currentQueue;
21058var queueIndex = -1;
ebd8d4e8 21059
8b095871
IC
21060function cleanUpNextTick() {
21061 if (!draining || !currentQueue) {
21062 return;
21063 }
21064 draining = false;
21065 if (currentQueue.length) {
21066 queue = currentQueue.concat(queue);
21067 } else {
21068 queueIndex = -1;
21069 }
21070 if (queue.length) {
21071 drainQueue();
21072 }
ebd8d4e8
IC
21073}
21074
8b095871
IC
21075function drainQueue() {
21076 if (draining) {
21077 return;
21078 }
21079 var timeout = runTimeout(cleanUpNextTick);
21080 draining = true;
21081
21082 var len = queue.length;
21083 while(len) {
21084 currentQueue = queue;
21085 queue = [];
21086 while (++queueIndex < len) {
21087 if (currentQueue) {
21088 currentQueue[queueIndex].run();
21089 }
21090 }
21091 queueIndex = -1;
21092 len = queue.length;
21093 }
21094 currentQueue = null;
21095 draining = false;
21096 runClearTimeout(timeout);
ebd8d4e8
IC
21097}
21098
8b095871
IC
21099process.nextTick = function (fun) {
21100 var args = new Array(arguments.length - 1);
21101 if (arguments.length > 1) {
21102 for (var i = 1; i < arguments.length; i++) {
21103 args[i - 1] = arguments[i];
21104 }
21105 }
21106 queue.push(new Item(fun, args));
21107 if (queue.length === 1 && !draining) {
21108 runTimeout(drainQueue);
21109 }
21110};
21111
21112// v8 likes predictible objects
21113function Item(fun, array) {
21114 this.fun = fun;
21115 this.array = array;
ab78acc6 21116}
8b095871
IC
21117Item.prototype.run = function () {
21118 this.fun.apply(null, this.array);
21119};
21120process.title = 'browser';
21121process.browser = true;
21122process.env = {};
21123process.argv = [];
21124process.version = ''; // empty string to avoid regexp issues
21125process.versions = {};
ebd8d4e8 21126
8b095871
IC
21127function noop() {}
21128
21129process.on = noop;
21130process.addListener = noop;
21131process.once = noop;
21132process.off = noop;
21133process.removeListener = noop;
21134process.removeAllListeners = noop;
21135process.emit = noop;
21136
21137process.binding = function (name) {
21138 throw new Error('process.binding is not supported');
21139};
21140
21141process.cwd = function () { return '/' };
21142process.chdir = function (dir) {
21143 throw new Error('process.chdir is not supported');
21144};
21145process.umask = function() { return 0; };
21146
21147},{}],14:[function(require,module,exports){
21148module.exports = require("./lib/_stream_duplex.js")
21149
21150},{"./lib/_stream_duplex.js":15}],15:[function(require,module,exports){
21151// a duplex stream is just a stream that is both readable and writable.
21152// Since JS doesn't have multiple prototypal inheritance, this class
21153// prototypally inherits from Readable, and then parasitically from
21154// Writable.
21155
21156'use strict';
21157
21158/*<replacement>*/
ab78acc6 21159
8b095871
IC
21160var objectKeys = Object.keys || function (obj) {
21161 var keys = [];
21162 for (var key in obj) {
21163 keys.push(key);
21164 }return keys;
21165};
21166/*</replacement>*/
ebd8d4e8 21167
8b095871 21168module.exports = Duplex;
ebd8d4e8 21169
8b095871
IC
21170/*<replacement>*/
21171var processNextTick = require('process-nextick-args');
21172/*</replacement>*/
ebd8d4e8 21173
8b095871
IC
21174/*<replacement>*/
21175var util = require('core-util-is');
21176util.inherits = require('inherits');
21177/*</replacement>*/
ebd8d4e8 21178
8b095871
IC
21179var Readable = require('./_stream_readable');
21180var Writable = require('./_stream_writable');
ebd8d4e8 21181
8b095871
IC
21182util.inherits(Duplex, Readable);
21183
21184var keys = objectKeys(Writable.prototype);
21185for (var v = 0; v < keys.length; v++) {
21186 var method = keys[v];
21187 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
ab78acc6 21188}
ebd8d4e8 21189
8b095871
IC
21190function Duplex(options) {
21191 if (!(this instanceof Duplex)) return new Duplex(options);
ebd8d4e8 21192
8b095871
IC
21193 Readable.call(this, options);
21194 Writable.call(this, options);
ebd8d4e8 21195
8b095871 21196 if (options && options.readable === false) this.readable = false;
ebd8d4e8 21197
8b095871 21198 if (options && options.writable === false) this.writable = false;
ebd8d4e8 21199
8b095871
IC
21200 this.allowHalfOpen = true;
21201 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
ebd8d4e8 21202
8b095871 21203 this.once('end', onend);
ebd8d4e8
IC
21204}
21205
8b095871
IC
21206// the no-half-open enforcer
21207function onend() {
21208 // if we allow half-open state, or if the writable side ended,
21209 // then we're ok.
21210 if (this.allowHalfOpen || this._writableState.ended) return;
21211
21212 // no more data can be written.
21213 // But allow more writes to happen in this tick.
21214 processNextTick(onEndNT, this);
ebd8d4e8
IC
21215}
21216
8b095871
IC
21217function onEndNT(self) {
21218 self.end();
21219}
ebd8d4e8 21220
8b095871
IC
21221function forEach(xs, f) {
21222 for (var i = 0, l = xs.length; i < l; i++) {
21223 f(xs[i], i);
21224 }
21225}
21226},{"./_stream_readable":17,"./_stream_writable":19,"core-util-is":6,"inherits":9,"process-nextick-args":12}],16:[function(require,module,exports){
21227// a passthrough stream.
21228// basically just the most minimal sort of Transform stream.
21229// Every written chunk gets output as-is.
ebd8d4e8 21230
8b095871 21231'use strict';
ebd8d4e8 21232
8b095871 21233module.exports = PassThrough;
ebd8d4e8 21234
8b095871 21235var Transform = require('./_stream_transform');
ebd8d4e8 21236
8b095871
IC
21237/*<replacement>*/
21238var util = require('core-util-is');
21239util.inherits = require('inherits');
21240/*</replacement>*/
ebd8d4e8 21241
8b095871 21242util.inherits(PassThrough, Transform);
ebd8d4e8 21243
8b095871
IC
21244function PassThrough(options) {
21245 if (!(this instanceof PassThrough)) return new PassThrough(options);
ebd8d4e8 21246
8b095871 21247 Transform.call(this, options);
ebd8d4e8
IC
21248}
21249
8b095871
IC
21250PassThrough.prototype._transform = function (chunk, encoding, cb) {
21251 cb(null, chunk);
21252};
21253},{"./_stream_transform":18,"core-util-is":6,"inherits":9}],17:[function(require,module,exports){
21254(function (process){
21255'use strict';
ebd8d4e8 21256
8b095871 21257module.exports = Readable;
ebd8d4e8 21258
8b095871
IC
21259/*<replacement>*/
21260var processNextTick = require('process-nextick-args');
21261/*</replacement>*/
ebd8d4e8 21262
8b095871
IC
21263/*<replacement>*/
21264var isArray = require('isarray');
21265/*</replacement>*/
ebd8d4e8 21266
8b095871
IC
21267/*<replacement>*/
21268var Duplex;
21269/*</replacement>*/
ebd8d4e8 21270
8b095871 21271Readable.ReadableState = ReadableState;
ebd8d4e8 21272
8b095871
IC
21273/*<replacement>*/
21274var EE = require('events').EventEmitter;
ebd8d4e8 21275
8b095871
IC
21276var EElistenerCount = function (emitter, type) {
21277 return emitter.listeners(type).length;
21278};
21279/*</replacement>*/
ebd8d4e8 21280
8b095871
IC
21281/*<replacement>*/
21282var Stream;
21283(function () {
21284 try {
21285 Stream = require('st' + 'ream');
21286 } catch (_) {} finally {
21287 if (!Stream) Stream = require('events').EventEmitter;
21288 }
21289})();
21290/*</replacement>*/
ebd8d4e8 21291
8b095871
IC
21292var Buffer = require('buffer').Buffer;
21293/*<replacement>*/
21294var bufferShim = require('buffer-shims');
21295/*</replacement>*/
ab78acc6 21296
8b095871
IC
21297/*<replacement>*/
21298var util = require('core-util-is');
21299util.inherits = require('inherits');
21300/*</replacement>*/
ab78acc6 21301
8b095871
IC
21302/*<replacement>*/
21303var debugUtil = require('util');
21304var debug = void 0;
21305if (debugUtil && debugUtil.debuglog) {
21306 debug = debugUtil.debuglog('stream');
21307} else {
21308 debug = function () {};
21309}
21310/*</replacement>*/
ab78acc6 21311
8b095871
IC
21312var BufferList = require('./internal/streams/BufferList');
21313var StringDecoder;
ab78acc6 21314
8b095871 21315util.inherits(Readable, Stream);
ab78acc6 21316
8b095871
IC
21317function prependListener(emitter, event, fn) {
21318 // Sadly this is not cacheable as some libraries bundle their own
21319 // event emitter implementation with them.
21320 if (typeof emitter.prependListener === 'function') {
21321 return emitter.prependListener(event, fn);
21322 } else {
21323 // This is a hack to make sure that our error handler is attached before any
21324 // userland ones. NEVER DO THIS. This is here only because this code needs
21325 // to continue to work with older versions of Node.js that do not include
21326 // the prependListener() method. The goal is to eventually remove this hack.
21327 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 21328 }
ebd8d4e8
IC
21329}
21330
8b095871
IC
21331function ReadableState(options, stream) {
21332 Duplex = Duplex || require('./_stream_duplex');
ebd8d4e8 21333
8b095871 21334 options = options || {};
ebd8d4e8 21335
8b095871
IC
21336 // object stream flag. Used to make read(n) ignore n and to
21337 // make all the buffer merging and length checks go away
21338 this.objectMode = !!options.objectMode;
ebd8d4e8 21339
8b095871 21340 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
ebd8d4e8 21341
8b095871
IC
21342 // the point at which it stops calling _read() to fill the buffer
21343 // Note: 0 is a valid value, means "don't call _read preemptively ever"
21344 var hwm = options.highWaterMark;
21345 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
21346 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
ab78acc6 21347
8b095871
IC
21348 // cast to ints.
21349 this.highWaterMark = ~ ~this.highWaterMark;
ab78acc6 21350
8b095871
IC
21351 // A linked list is used to store data chunks instead of an array because the
21352 // linked list can remove elements from the beginning faster than
21353 // array.shift()
21354 this.buffer = new BufferList();
21355 this.length = 0;
21356 this.pipes = null;
21357 this.pipesCount = 0;
21358 this.flowing = null;
21359 this.ended = false;
21360 this.endEmitted = false;
21361 this.reading = false;
ab78acc6 21362
8b095871
IC
21363 // a flag to be able to tell if the onwrite cb is called immediately,
21364 // or on a later tick. We set this to true at first, because any
21365 // actions that shouldn't happen until "later" should generally also
21366 // not happen before the first write call.
21367 this.sync = true;
ebd8d4e8 21368
8b095871
IC
21369 // whenever we return null, then we set a flag to say
21370 // that we're awaiting a 'readable' event emission.
21371 this.needReadable = false;
21372 this.emittedReadable = false;
21373 this.readableListening = false;
21374 this.resumeScheduled = false;
ebd8d4e8 21375
8b095871
IC
21376 // Crypto is kind of old and crusty. Historically, its default string
21377 // encoding is 'binary' so we have to make this configurable.
21378 // Everything else in the universe uses 'utf8', though.
21379 this.defaultEncoding = options.defaultEncoding || 'utf8';
ebd8d4e8 21380
8b095871
IC
21381 // when piping, we only care about 'readable' events that happen
21382 // after read()ing all the bytes and not getting any pushback.
21383 this.ranOut = false;
ebd8d4e8 21384
8b095871
IC
21385 // the number of writers that are awaiting a drain event in .pipe()s
21386 this.awaitDrain = 0;
ebd8d4e8 21387
8b095871
IC
21388 // if true, a maybeReadMore has been scheduled
21389 this.readingMore = false;
ebd8d4e8 21390
8b095871
IC
21391 this.decoder = null;
21392 this.encoding = null;
21393 if (options.encoding) {
21394 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
21395 this.decoder = new StringDecoder(options.encoding);
21396 this.encoding = options.encoding;
21397 }
21398}
ebd8d4e8 21399
8b095871
IC
21400function Readable(options) {
21401 Duplex = Duplex || require('./_stream_duplex');
ebd8d4e8 21402
8b095871 21403 if (!(this instanceof Readable)) return new Readable(options);
ebd8d4e8 21404
8b095871 21405 this._readableState = new ReadableState(options, this);
ebd8d4e8 21406
8b095871
IC
21407 // legacy
21408 this.readable = true;
ebd8d4e8 21409
8b095871 21410 if (options && typeof options.read === 'function') this._read = options.read;
ebd8d4e8 21411
8b095871
IC
21412 Stream.call(this);
21413}
ebd8d4e8 21414
8b095871
IC
21415// Manually shove something into the read() buffer.
21416// This returns true if the highWaterMark has not been hit yet,
21417// similar to how Writable.write() returns true if you should
21418// write() some more.
21419Readable.prototype.push = function (chunk, encoding) {
21420 var state = this._readableState;
ebd8d4e8 21421
8b095871
IC
21422 if (!state.objectMode && typeof chunk === 'string') {
21423 encoding = encoding || state.defaultEncoding;
21424 if (encoding !== state.encoding) {
21425 chunk = bufferShim.from(chunk, encoding);
21426 encoding = '';
21427 }
21428 }
ebd8d4e8 21429
8b095871
IC
21430 return readableAddChunk(this, state, chunk, encoding, false);
21431};
ebd8d4e8 21432
8b095871
IC
21433// Unshift should *always* be something directly out of read()
21434Readable.prototype.unshift = function (chunk) {
21435 var state = this._readableState;
21436 return readableAddChunk(this, state, chunk, '', true);
21437};
ebd8d4e8 21438
8b095871
IC
21439Readable.prototype.isPaused = function () {
21440 return this._readableState.flowing === false;
21441};
21442
21443function readableAddChunk(stream, state, chunk, encoding, addToFront) {
21444 var er = chunkInvalid(state, chunk);
21445 if (er) {
21446 stream.emit('error', er);
21447 } else if (chunk === null) {
21448 state.reading = false;
21449 onEofChunk(stream, state);
21450 } else if (state.objectMode || chunk && chunk.length > 0) {
21451 if (state.ended && !addToFront) {
21452 var e = new Error('stream.push() after EOF');
21453 stream.emit('error', e);
21454 } else if (state.endEmitted && addToFront) {
21455 var _e = new Error('stream.unshift() after end event');
21456 stream.emit('error', _e);
21457 } else {
21458 var skipAdd;
21459 if (state.decoder && !addToFront && !encoding) {
21460 chunk = state.decoder.write(chunk);
21461 skipAdd = !state.objectMode && chunk.length === 0;
21462 }
ebd8d4e8 21463
8b095871 21464 if (!addToFront) state.reading = false;
ebd8d4e8 21465
8b095871
IC
21466 // Don't add to the buffer if we've decoded to an empty string chunk and
21467 // we're not in object mode
21468 if (!skipAdd) {
21469 // if we want the data now, just emit it.
21470 if (state.flowing && state.length === 0 && !state.sync) {
21471 stream.emit('data', chunk);
21472 stream.read(0);
21473 } else {
21474 // update the buffer info.
21475 state.length += state.objectMode ? 1 : chunk.length;
21476 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
ebd8d4e8 21477
8b095871
IC
21478 if (state.needReadable) emitReadable(stream);
21479 }
21480 }
ab78acc6 21481
8b095871
IC
21482 maybeReadMore(stream, state);
21483 }
21484 } else if (!addToFront) {
21485 state.reading = false;
21486 }
ab78acc6 21487
8b095871
IC
21488 return needMoreData(state);
21489}
ab78acc6 21490
8b095871
IC
21491// if it's past the high water mark, we can push in some more.
21492// Also, if we have no data yet, we can stand some
21493// more bytes. This is to work around cases where hwm=0,
21494// such as the repl. Also, if the push() triggered a
21495// readable event, and the user called read(largeNumber) such that
21496// needReadable was set, then we ought to push more, so that another
21497// 'readable' event will be triggered.
21498function needMoreData(state) {
21499 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
21500}
ebd8d4e8 21501
8b095871
IC
21502// backwards compatibility.
21503Readable.prototype.setEncoding = function (enc) {
21504 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
21505 this._readableState.decoder = new StringDecoder(enc);
21506 this._readableState.encoding = enc;
21507 return this;
21508};
21509
21510// Don't raise the hwm > 8MB
21511var MAX_HWM = 0x800000;
21512function computeNewHighWaterMark(n) {
21513 if (n >= MAX_HWM) {
21514 n = MAX_HWM;
ab78acc6 21515 } else {
8b095871
IC
21516 // Get the next highest power of 2 to prevent increasing hwm excessively in
21517 // tiny amounts
21518 n--;
21519 n |= n >>> 1;
21520 n |= n >>> 2;
21521 n |= n >>> 4;
21522 n |= n >>> 8;
21523 n |= n >>> 16;
21524 n++;
ebd8d4e8 21525 }
8b095871 21526 return n;
ebd8d4e8
IC
21527}
21528
8b095871
IC
21529// This function is designed to be inlinable, so please take care when making
21530// changes to the function body.
21531function howMuchToRead(n, state) {
21532 if (n <= 0 || state.length === 0 && state.ended) return 0;
21533 if (state.objectMode) return 1;
21534 if (n !== n) {
21535 // Only flow one buffer at a time
21536 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
21537 }
21538 // If we're asking for more than the current hwm, then raise the hwm.
21539 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
21540 if (n <= state.length) return n;
21541 // Don't have enough
21542 if (!state.ended) {
21543 state.needReadable = true;
21544 return 0;
21545 }
21546 return state.length;
21547}
ebd8d4e8 21548
8b095871
IC
21549// you can override either this method, or the async _read(n) below.
21550Readable.prototype.read = function (n) {
21551 debug('read', n);
21552 n = parseInt(n, 10);
21553 var state = this._readableState;
21554 var nOrig = n;
ebd8d4e8 21555
8b095871 21556 if (n !== 0) state.emittedReadable = false;
ab78acc6 21557
8b095871
IC
21558 // if we're doing read(0) to trigger a readable event, but we
21559 // already have a bunch of data in the buffer, then just trigger
21560 // the 'readable' event and move on.
21561 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
21562 debug('read: emitReadable', state.length, state.ended);
21563 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
21564 return null;
ebd8d4e8 21565 }
ebd8d4e8 21566
8b095871 21567 n = howMuchToRead(n, state);
ebd8d4e8 21568
8b095871
IC
21569 // if we've ended, and we're now clear, then finish it up.
21570 if (n === 0 && state.ended) {
21571 if (state.length === 0) endReadable(this);
21572 return null;
21573 }
ebd8d4e8 21574
8b095871
IC
21575 // All the actual chunk generation logic needs to be
21576 // *below* the call to _read. The reason is that in certain
21577 // synthetic stream cases, such as passthrough streams, _read
21578 // may be a completely synchronous operation which may change
21579 // the state of the read buffer, providing enough data when
21580 // before there was *not* enough.
21581 //
21582 // So, the steps are:
21583 // 1. Figure out what the state of things will be after we do
21584 // a read from the buffer.
21585 //
21586 // 2. If that resulting state will trigger a _read, then call _read.
21587 // Note that this may be asynchronous, or synchronous. Yes, it is
21588 // deeply ugly to write APIs this way, but that still doesn't mean
21589 // that the Readable class should behave improperly, as streams are
21590 // designed to be sync/async agnostic.
21591 // Take note if the _read call is sync or async (ie, if the read call
21592 // has returned yet), so that we know whether or not it's safe to emit
21593 // 'readable' etc.
21594 //
21595 // 3. Actually pull the requested chunks out of the buffer and return.
ebd8d4e8 21596
8b095871
IC
21597 // if we need a readable event, then we need to do some reading.
21598 var doRead = state.needReadable;
21599 debug('need readable', doRead);
ebd8d4e8 21600
8b095871
IC
21601 // if we currently have less than the highWaterMark, then also read some
21602 if (state.length === 0 || state.length - n < state.highWaterMark) {
21603 doRead = true;
21604 debug('length less than watermark', doRead);
21605 }
ebd8d4e8 21606
8b095871
IC
21607 // however, if we've ended, then there's no point, and if we're already
21608 // reading, then it's unnecessary.
21609 if (state.ended || state.reading) {
21610 doRead = false;
21611 debug('reading or ended', doRead);
21612 } else if (doRead) {
21613 debug('do read');
21614 state.reading = true;
21615 state.sync = true;
21616 // if the length is currently zero, then we *need* a readable event.
21617 if (state.length === 0) state.needReadable = true;
21618 // call internal read method
21619 this._read(state.highWaterMark);
21620 state.sync = false;
21621 // If _read pushed data synchronously, then `reading` will be false,
21622 // and we need to re-evaluate how much data we can return to the user.
21623 if (!state.reading) n = howMuchToRead(nOrig, state);
21624 }
ebd8d4e8 21625
8b095871
IC
21626 var ret;
21627 if (n > 0) ret = fromList(n, state);else ret = null;
ebd8d4e8 21628
8b095871
IC
21629 if (ret === null) {
21630 state.needReadable = true;
21631 n = 0;
21632 } else {
21633 state.length -= n;
21634 }
ebd8d4e8 21635
8b095871
IC
21636 if (state.length === 0) {
21637 // If we have nothing in the buffer, then we want to know
21638 // as soon as we *do* get something into the buffer.
21639 if (!state.ended) state.needReadable = true;
ebd8d4e8 21640
8b095871
IC
21641 // If we tried to read() past the EOF, then emit end on the next tick.
21642 if (nOrig !== n && state.ended) endReadable(this);
21643 }
21644
21645 if (ret !== null) this.emit('data', ret);
21646
21647 return ret;
ab78acc6
IC
21648};
21649
8b095871
IC
21650function chunkInvalid(state, chunk) {
21651 var er = null;
21652 if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
21653 er = new TypeError('Invalid non-string/buffer chunk');
21654 }
21655 return er;
21656}
ab78acc6 21657
8b095871
IC
21658function onEofChunk(stream, state) {
21659 if (state.ended) return;
21660 if (state.decoder) {
21661 var chunk = state.decoder.end();
21662 if (chunk && chunk.length) {
21663 state.buffer.push(chunk);
21664 state.length += state.objectMode ? 1 : chunk.length;
21665 }
21666 }
21667 state.ended = true;
21668
21669 // emit 'readable' now to make sure it gets picked up.
21670 emitReadable(stream);
21671}
21672
21673// Don't emit readable right away in sync mode, because this can trigger
21674// another read() call => stack overflow. This way, it might trigger
21675// a nextTick recursion warning, but that's not so bad.
21676function emitReadable(stream) {
21677 var state = stream._readableState;
21678 state.needReadable = false;
21679 if (!state.emittedReadable) {
21680 debug('emitReadable', state.flowing);
21681 state.emittedReadable = true;
21682 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
21683 }
ebd8d4e8
IC
21684}
21685
8b095871
IC
21686function emitReadable_(stream) {
21687 debug('emit readable');
21688 stream.emit('readable');
21689 flow(stream);
21690}
ebd8d4e8 21691
8b095871
IC
21692// at this point, the user has presumably seen the 'readable' event,
21693// and called read() to consume some data. that may have triggered
21694// in turn another _read(n) call, in which case reading = true if
21695// it's in progress.
21696// However, if we're not ended, or reading, and the length < hwm,
21697// then go ahead and try to read some more preemptively.
21698function maybeReadMore(stream, state) {
21699 if (!state.readingMore) {
21700 state.readingMore = true;
21701 processNextTick(maybeReadMore_, stream, state);
21702 }
21703}
ab78acc6 21704
8b095871
IC
21705function maybeReadMore_(stream, state) {
21706 var len = state.length;
21707 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
21708 debug('maybeReadMore read 0');
21709 stream.read(0);
21710 if (len === state.length)
21711 // didn't get any data, stop spinning.
21712 break;else len = state.length;
21713 }
21714 state.readingMore = false;
21715}
ab78acc6 21716
8b095871
IC
21717// abstract method. to be overridden in specific implementation classes.
21718// call cb(er, data) where data is <= n in length.
21719// for virtual (non-string, non-buffer) streams, "length" is somewhat
21720// arbitrary, and perhaps not very meaningful.
21721Readable.prototype._read = function (n) {
21722 this.emit('error', new Error('_read() is not implemented'));
ab78acc6
IC
21723};
21724
8b095871
IC
21725Readable.prototype.pipe = function (dest, pipeOpts) {
21726 var src = this;
21727 var state = this._readableState;
ab78acc6 21728
8b095871
IC
21729 switch (state.pipesCount) {
21730 case 0:
21731 state.pipes = dest;
21732 break;
21733 case 1:
21734 state.pipes = [state.pipes, dest];
21735 break;
21736 default:
21737 state.pipes.push(dest);
21738 break;
ab78acc6 21739 }
8b095871
IC
21740 state.pipesCount += 1;
21741 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
ab78acc6 21742
8b095871 21743 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
ab78acc6 21744
8b095871
IC
21745 var endFn = doEnd ? onend : cleanup;
21746 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
ab78acc6 21747
8b095871
IC
21748 dest.on('unpipe', onunpipe);
21749 function onunpipe(readable) {
21750 debug('onunpipe');
21751 if (readable === src) {
21752 cleanup();
ab78acc6 21753 }
8b095871 21754 }
ebd8d4e8 21755
8b095871
IC
21756 function onend() {
21757 debug('onend');
21758 dest.end();
ebd8d4e8
IC
21759 }
21760
8b095871
IC
21761 // when the dest drains, it reduces the awaitDrain counter
21762 // on the source. This would be more elegant with a .once()
21763 // handler in flow(), but adding and removing repeatedly is
21764 // too slow.
21765 var ondrain = pipeOnDrain(src);
21766 dest.on('drain', ondrain);
ebd8d4e8 21767
8b095871
IC
21768 var cleanedUp = false;
21769 function cleanup() {
21770 debug('cleanup');
21771 // cleanup event handlers once the pipe is broken
21772 dest.removeListener('close', onclose);
21773 dest.removeListener('finish', onfinish);
21774 dest.removeListener('drain', ondrain);
21775 dest.removeListener('error', onerror);
21776 dest.removeListener('unpipe', onunpipe);
21777 src.removeListener('end', onend);
21778 src.removeListener('end', cleanup);
21779 src.removeListener('data', ondata);
ebd8d4e8 21780
8b095871 21781 cleanedUp = true;
ebd8d4e8 21782
8b095871
IC
21783 // if the reader is waiting for a drain event from this
21784 // specific writer, then it would cause it to never start
21785 // flowing again.
21786 // So, if this is awaiting a drain, then we just call it now.
21787 // If we don't know, then assume that we are waiting for one.
21788 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
21789 }
ebd8d4e8 21790
8b095871
IC
21791 // If the user pushes more data while we're writing to dest then we'll end up
21792 // in ondata again. However, we only want to increase awaitDrain once because
21793 // dest will only emit one 'drain' event for the multiple writes.
21794 // => Introduce a guard on increasing awaitDrain.
21795 var increasedAwaitDrain = false;
21796 src.on('data', ondata);
21797 function ondata(chunk) {
21798 debug('ondata');
21799 increasedAwaitDrain = false;
21800 var ret = dest.write(chunk);
21801 if (false === ret && !increasedAwaitDrain) {
21802 // If the user unpiped during `dest.write()`, it is possible
21803 // to get stuck in a permanently paused state if that write
21804 // also returned false.
21805 // => Check whether `dest` is still a piping destination.
21806 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
21807 debug('false write response, pause', src._readableState.awaitDrain);
21808 src._readableState.awaitDrain++;
21809 increasedAwaitDrain = true;
21810 }
21811 src.pause();
21812 }
21813 }
ebd8d4e8 21814
8b095871
IC
21815 // if the dest has an error, then stop piping into it.
21816 // however, don't suppress the throwing behavior for this.
21817 function onerror(er) {
21818 debug('onerror', er);
21819 unpipe();
21820 dest.removeListener('error', onerror);
21821 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
21822 }
ab78acc6 21823
8b095871
IC
21824 // Make sure our error handler is attached before userland ones.
21825 prependListener(dest, 'error', onerror);
ab78acc6 21826
8b095871
IC
21827 // Both close and finish should trigger unpipe, but only once.
21828 function onclose() {
21829 dest.removeListener('finish', onfinish);
21830 unpipe();
21831 }
21832 dest.once('close', onclose);
21833 function onfinish() {
21834 debug('onfinish');
21835 dest.removeListener('close', onclose);
21836 unpipe();
ab78acc6 21837 }
8b095871 21838 dest.once('finish', onfinish);
ebd8d4e8 21839
8b095871
IC
21840 function unpipe() {
21841 debug('unpipe');
21842 src.unpipe(dest);
21843 }
21844
21845 // tell the dest that it's being piped to
21846 dest.emit('pipe', src);
21847
21848 // start the flow if it hasn't been started already.
21849 if (!state.flowing) {
21850 debug('pipe resume');
21851 src.resume();
21852 }
21853
21854 return dest;
ab78acc6 21855};
ebd8d4e8 21856
8b095871
IC
21857function pipeOnDrain(src) {
21858 return function () {
21859 var state = src._readableState;
21860 debug('pipeOnDrain', state.awaitDrain);
21861 if (state.awaitDrain) state.awaitDrain--;
21862 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
21863 state.flowing = true;
21864 flow(src);
21865 }
21866 };
21867}
ebd8d4e8 21868
8b095871
IC
21869Readable.prototype.unpipe = function (dest) {
21870 var state = this._readableState;
ebd8d4e8 21871
8b095871
IC
21872 // if we're not piping anywhere, then do nothing.
21873 if (state.pipesCount === 0) return this;
ebd8d4e8 21874
8b095871
IC
21875 // just one destination. most common case.
21876 if (state.pipesCount === 1) {
21877 // passed in one, but it's not the right one.
21878 if (dest && dest !== state.pipes) return this;
ebd8d4e8 21879
8b095871
IC
21880 if (!dest) dest = state.pipes;
21881
21882 // got a match.
21883 state.pipes = null;
21884 state.pipesCount = 0;
21885 state.flowing = false;
21886 if (dest) dest.emit('unpipe', this);
21887 return this;
ab78acc6 21888 }
ebd8d4e8 21889
8b095871 21890 // slow case. multiple pipe destinations.
ebd8d4e8 21891
8b095871
IC
21892 if (!dest) {
21893 // remove all.
21894 var dests = state.pipes;
21895 var len = state.pipesCount;
21896 state.pipes = null;
21897 state.pipesCount = 0;
21898 state.flowing = false;
ebd8d4e8 21899
8b095871
IC
21900 for (var i = 0; i < len; i++) {
21901 dests[i].emit('unpipe', this);
21902 }return this;
21903 }
ebd8d4e8 21904
8b095871
IC
21905 // try to find the right one.
21906 var index = indexOf(state.pipes, dest);
21907 if (index === -1) return this;
ebd8d4e8 21908
8b095871
IC
21909 state.pipes.splice(index, 1);
21910 state.pipesCount -= 1;
21911 if (state.pipesCount === 1) state.pipes = state.pipes[0];
ebd8d4e8 21912
8b095871 21913 dest.emit('unpipe', this);
ab78acc6 21914
8b095871
IC
21915 return this;
21916};
ab78acc6 21917
8b095871
IC
21918// set up data events if they are asked for
21919// Ensure readable listeners eventually get something
21920Readable.prototype.on = function (ev, fn) {
21921 var res = Stream.prototype.on.call(this, ev, fn);
21922
21923 if (ev === 'data') {
21924 // Start flowing on next tick if stream isn't explicitly paused
21925 if (this._readableState.flowing !== false) this.resume();
21926 } else if (ev === 'readable') {
21927 var state = this._readableState;
21928 if (!state.endEmitted && !state.readableListening) {
21929 state.readableListening = state.needReadable = true;
21930 state.emittedReadable = false;
21931 if (!state.reading) {
21932 processNextTick(nReadingNextTick, this);
21933 } else if (state.length) {
21934 emitReadable(this, state);
ebd8d4e8 21935 }
ab78acc6 21936 }
8b095871 21937 }
ebd8d4e8 21938
8b095871
IC
21939 return res;
21940};
21941Readable.prototype.addListener = Readable.prototype.on;
ab78acc6 21942
8b095871
IC
21943function nReadingNextTick(self) {
21944 debug('readable nexttick read 0');
21945 self.read(0);
21946}
ab78acc6 21947
8b095871
IC
21948// pause() and resume() are remnants of the legacy readable stream API
21949// If the user uses them, then switch into old mode.
21950Readable.prototype.resume = function () {
21951 var state = this._readableState;
21952 if (!state.flowing) {
21953 debug('resume');
21954 state.flowing = true;
21955 resume(this, state);
ebd8d4e8 21956 }
ab78acc6 21957 return this;
ebd8d4e8
IC
21958};
21959
8b095871
IC
21960function resume(stream, state) {
21961 if (!state.resumeScheduled) {
21962 state.resumeScheduled = true;
21963 processNextTick(resume_, stream, state);
ebd8d4e8 21964 }
8b095871 21965}
ab78acc6 21966
8b095871
IC
21967function resume_(stream, state) {
21968 if (!state.reading) {
21969 debug('resume read 0');
21970 stream.read(0);
ebd8d4e8 21971 }
ebd8d4e8 21972
8b095871
IC
21973 state.resumeScheduled = false;
21974 state.awaitDrain = 0;
21975 stream.emit('resume');
21976 flow(stream);
21977 if (state.flowing && !state.reading) stream.read(0);
21978}
ab78acc6 21979
8b095871
IC
21980Readable.prototype.pause = function () {
21981 debug('call pause flowing=%j', this._readableState.flowing);
21982 if (false !== this._readableState.flowing) {
21983 debug('pause');
21984 this._readableState.flowing = false;
21985 this.emit('pause');
ebd8d4e8 21986 }
ab78acc6
IC
21987 return this;
21988};
ebd8d4e8 21989
8b095871
IC
21990function flow(stream) {
21991 var state = stream._readableState;
21992 debug('flow', state.flowing);
21993 while (state.flowing && stream.read() !== null) {}
21994}
ebd8d4e8 21995
8b095871
IC
21996// wrap an old-style stream as the async data source.
21997// This is *not* part of the readable stream interface.
21998// It is an ugly unfortunate mess of history.
21999Readable.prototype.wrap = function (stream) {
22000 var state = this._readableState;
22001 var paused = false;
ebd8d4e8 22002
8b095871
IC
22003 var self = this;
22004 stream.on('end', function () {
22005 debug('wrapped end');
22006 if (state.decoder && !state.ended) {
22007 var chunk = state.decoder.end();
22008 if (chunk && chunk.length) self.push(chunk);
22009 }
ebd8d4e8 22010
8b095871
IC
22011 self.push(null);
22012 });
ebd8d4e8 22013
8b095871
IC
22014 stream.on('data', function (chunk) {
22015 debug('wrapped data');
22016 if (state.decoder) chunk = state.decoder.write(chunk);
ebd8d4e8 22017
8b095871
IC
22018 // don't skip over falsy values in objectMode
22019 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
ebd8d4e8 22020
8b095871
IC
22021 var ret = self.push(chunk);
22022 if (!ret) {
22023 paused = true;
22024 stream.pause();
22025 }
22026 });
22027
22028 // proxy all the other methods.
22029 // important when wrapping filters and duplexes.
22030 for (var i in stream) {
22031 if (this[i] === undefined && typeof stream[i] === 'function') {
22032 this[i] = function (method) {
22033 return function () {
22034 return stream[method].apply(stream, arguments);
22035 };
22036 }(i);
22037 }
ab78acc6 22038 }
ebd8d4e8 22039
8b095871
IC
22040 // proxy certain important events.
22041 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
22042 forEach(events, function (ev) {
22043 stream.on(ev, self.emit.bind(self, ev));
22044 });
22045
22046 // when we try to consume some more bytes, simply unpause the
22047 // underlying stream.
22048 self._read = function (n) {
22049 debug('wrapped _read', n);
22050 if (paused) {
22051 paused = false;
22052 stream.resume();
22053 }
22054 };
22055
22056 return self;
ebd8d4e8
IC
22057};
22058
8b095871
IC
22059// exposed for testing purposes only.
22060Readable._fromList = fromList;
ebd8d4e8 22061
8b095871
IC
22062// Pluck off n bytes from an array of buffers.
22063// Length is the combined lengths of all the buffers in the list.
22064// This function is designed to be inlinable, so please take care when making
22065// changes to the function body.
22066function fromList(n, state) {
22067 // nothing buffered
22068 if (state.length === 0) return null;
ab78acc6 22069
8b095871
IC
22070 var ret;
22071 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
22072 // read it all, truncate the list
22073 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);
22074 state.buffer.clear();
22075 } else {
22076 // read part of list
22077 ret = fromListPartial(n, state.buffer, state.decoder);
22078 }
22079
22080 return ret;
22081}
22082
22083// Extracts only enough buffered data to satisfy the amount requested.
22084// This function is designed to be inlinable, so please take care when making
22085// changes to the function body.
22086function fromListPartial(n, list, hasStrings) {
22087 var ret;
22088 if (n < list.head.data.length) {
22089 // slice is the same for buffers and strings
22090 ret = list.head.data.slice(0, n);
22091 list.head.data = list.head.data.slice(n);
22092 } else if (n === list.head.data.length) {
22093 // first chunk is a perfect match
22094 ret = list.shift();
22095 } else {
22096 // result spans more than one buffer
22097 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
22098 }
22099 return ret;
ab78acc6 22100}
ebd8d4e8 22101
8b095871
IC
22102// Copies a specified amount of characters from the list of buffered data
22103// chunks.
22104// This function is designed to be inlinable, so please take care when making
22105// changes to the function body.
22106function copyFromBufferString(n, list) {
22107 var p = list.head;
22108 var c = 1;
22109 var ret = p.data;
22110 n -= ret.length;
22111 while (p = p.next) {
22112 var str = p.data;
22113 var nb = n > str.length ? str.length : n;
22114 if (nb === str.length) ret += str;else ret += str.slice(0, n);
22115 n -= nb;
22116 if (n === 0) {
22117 if (nb === str.length) {
22118 ++c;
22119 if (p.next) list.head = p.next;else list.head = list.tail = null;
22120 } else {
22121 list.head = p;
22122 p.data = str.slice(nb);
22123 }
22124 break;
ab78acc6 22125 }
8b095871
IC
22126 ++c;
22127 }
22128 list.length -= c;
22129 return ret;
ab78acc6
IC
22130}
22131
8b095871
IC
22132// Copies a specified amount of bytes from the list of buffered data chunks.
22133// This function is designed to be inlinable, so please take care when making
22134// changes to the function body.
22135function copyFromBuffer(n, list) {
22136 var ret = bufferShim.allocUnsafe(n);
22137 var p = list.head;
22138 var c = 1;
22139 p.data.copy(ret);
22140 n -= p.data.length;
22141 while (p = p.next) {
22142 var buf = p.data;
22143 var nb = n > buf.length ? buf.length : n;
22144 buf.copy(ret, ret.length - n, 0, nb);
22145 n -= nb;
22146 if (n === 0) {
22147 if (nb === buf.length) {
22148 ++c;
22149 if (p.next) list.head = p.next;else list.head = list.tail = null;
22150 } else {
22151 list.head = p;
22152 p.data = buf.slice(nb);
22153 }
22154 break;
ab78acc6 22155 }
8b095871
IC
22156 ++c;
22157 }
22158 list.length -= c;
22159 return ret;
ab78acc6 22160}
ebd8d4e8 22161
8b095871
IC
22162function endReadable(stream) {
22163 var state = stream._readableState;
ab78acc6 22164
8b095871
IC
22165 // If we get here before consuming all the bytes, then that is a
22166 // bug in node. Should never happen.
22167 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
ab78acc6 22168
8b095871
IC
22169 if (!state.endEmitted) {
22170 state.ended = true;
22171 processNextTick(endReadableNT, state, stream);
22172 }
22173}
ebd8d4e8 22174
8b095871
IC
22175function endReadableNT(state, stream) {
22176 // Check that we didn't get one last unshift.
22177 if (!state.endEmitted && state.length === 0) {
22178 state.endEmitted = true;
22179 stream.readable = false;
22180 stream.emit('end');
22181 }
22182}
ebd8d4e8 22183
8b095871
IC
22184function forEach(xs, f) {
22185 for (var i = 0, l = xs.length; i < l; i++) {
22186 f(xs[i], i);
22187 }
22188}
ebd8d4e8 22189
8b095871
IC
22190function indexOf(xs, x) {
22191 for (var i = 0, l = xs.length; i < l; i++) {
22192 if (xs[i] === x) return i;
22193 }
22194 return -1;
22195}
22196}).call(this,require('_process'))
22197},{"./_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){
22198// a transform stream is a readable/writable stream where you do
22199// something with the data. Sometimes it's called a "filter",
22200// but that's not a great name for it, since that implies a thing where
22201// some bits pass through, and others are simply ignored. (That would
22202// be a valid example of a transform, of course.)
ab78acc6 22203//
8b095871
IC
22204// While the output is causally related to the input, it's not a
22205// necessarily symmetric or synchronous transformation. For example,
22206// a zlib stream might take multiple plain-text writes(), and then
22207// emit a single compressed chunk some time in the future.
ab78acc6 22208//
8b095871 22209// Here's how this works:
ab78acc6 22210//
8b095871
IC
22211// The Transform stream has all the aspects of the readable and writable
22212// stream classes. When you write(chunk), that calls _write(chunk,cb)
22213// internally, and returns false if there's a lot of pending writes
22214// buffered up. When you call read(), that calls _read(n) until
22215// there's enough pending readable data buffered up.
22216//
22217// In a transform stream, the written data is placed in a buffer. When
22218// _read(n) is called, it transforms the queued up data, calling the
22219// buffered _write cb's as it consumes chunks. If consuming a single
22220// written chunk would result in multiple output chunks, then the first
22221// outputted bit calls the readcb, and subsequent chunks just go into
22222// the read buffer, and will cause it to emit 'readable' if necessary.
22223//
22224// This way, back-pressure is actually determined by the reading side,
22225// since _read has to be called to start processing a new chunk. However,
22226// a pathological inflate type of transform can cause excessive buffering
22227// here. For example, imagine a stream where every byte of input is
22228// interpreted as an integer from 0-255, and then results in that many
22229// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
22230// 1kb of data being output. In this case, you could write a very small
22231// amount of input, and end up with a very large amount of output. In
22232// such a pathological inflating mechanism, there'd be no way to tell
22233// the system to stop doing the transform. A single 4MB write could
22234// cause the system to run out of memory.
22235//
22236// However, even in such a pathological case, only a single written chunk
22237// would be consumed, and then the rest would wait (un-transformed) until
22238// the results of the previous transformed chunk were consumed.
ebd8d4e8 22239
8b095871 22240'use strict';
ebd8d4e8 22241
8b095871 22242module.exports = Transform;
ebd8d4e8 22243
8b095871 22244var Duplex = require('./_stream_duplex');
ebd8d4e8 22245
ab78acc6
IC
22246/*<replacement>*/
22247var util = require('core-util-is');
22248util.inherits = require('inherits');
22249/*</replacement>*/
ebd8d4e8 22250
8b095871 22251util.inherits(Transform, Duplex);
ebd8d4e8 22252
8b095871
IC
22253function TransformState(stream) {
22254 this.afterTransform = function (er, data) {
22255 return afterTransform(stream, er, data);
22256 };
ebd8d4e8 22257
8b095871
IC
22258 this.needTransform = false;
22259 this.transforming = false;
22260 this.writecb = null;
22261 this.writechunk = null;
22262 this.writeencoding = null;
22263}
ebd8d4e8 22264
8b095871
IC
22265function afterTransform(stream, er, data) {
22266 var ts = stream._transformState;
22267 ts.transforming = false;
ebd8d4e8 22268
8b095871 22269 var cb = ts.writecb;
ebd8d4e8 22270
8b095871 22271 if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
ebd8d4e8 22272
8b095871
IC
22273 ts.writechunk = null;
22274 ts.writecb = null;
ebd8d4e8 22275
8b095871 22276 if (data !== null && data !== undefined) stream.push(data);
ebd8d4e8 22277
8b095871
IC
22278 cb(er);
22279
22280 var rs = stream._readableState;
22281 rs.reading = false;
22282 if (rs.needReadable || rs.length < rs.highWaterMark) {
22283 stream._read(rs.highWaterMark);
22284 }
ebd8d4e8
IC
22285}
22286
8b095871
IC
22287function Transform(options) {
22288 if (!(this instanceof Transform)) return new Transform(options);
ebd8d4e8 22289
8b095871 22290 Duplex.call(this, options);
ebd8d4e8 22291
8b095871
IC
22292 this._transformState = new TransformState(this);
22293
22294 var stream = this;
22295
22296 // start out asking for a readable event once data is transformed.
22297 this._readableState.needReadable = true;
22298
22299 // we have implemented the _read method, and done the other things
22300 // that Readable wants before the first _read call, so unset the
22301 // sync guard flag.
22302 this._readableState.sync = false;
22303
22304 if (options) {
22305 if (typeof options.transform === 'function') this._transform = options.transform;
22306
22307 if (typeof options.flush === 'function') this._flush = options.flush;
ebd8d4e8 22308 }
8b095871
IC
22309
22310 // When the writable side finishes, then flush out anything remaining.
22311 this.once('prefinish', function () {
22312 if (typeof this._flush === 'function') this._flush(function (er, data) {
22313 done(stream, er, data);
22314 });else done(stream);
22315 });
ab78acc6 22316}
ebd8d4e8 22317
8b095871
IC
22318Transform.prototype.push = function (chunk, encoding) {
22319 this._transformState.needTransform = false;
22320 return Duplex.prototype.push.call(this, chunk, encoding);
22321};
22322
22323// This is the part where you do stuff!
22324// override this function in implementation classes.
22325// 'chunk' is an input chunk.
ab78acc6 22326//
8b095871
IC
22327// Call `push(newChunk)` to pass along transformed output
22328// to the readable side. You may call 'push' zero or more times.
ab78acc6 22329//
8b095871
IC
22330// Call `cb(err)` when you are done with this chunk. If you pass
22331// an error, then that'll put the hurt on the whole operation. If you
22332// never call cb(), then you'll never get another chunk.
22333Transform.prototype._transform = function (chunk, encoding, cb) {
22334 throw new Error('_transform() is not implemented');
22335};
ebd8d4e8 22336
8b095871
IC
22337Transform.prototype._write = function (chunk, encoding, cb) {
22338 var ts = this._transformState;
22339 ts.writecb = cb;
22340 ts.writechunk = chunk;
22341 ts.writeencoding = encoding;
22342 if (!ts.transforming) {
22343 var rs = this._readableState;
22344 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
22345 }
22346};
ebd8d4e8 22347
8b095871
IC
22348// Doesn't matter what the args are here.
22349// _transform does all the work.
22350// That we got here means that the readable side wants more data.
22351Transform.prototype._read = function (n) {
22352 var ts = this._transformState;
ebd8d4e8 22353
8b095871
IC
22354 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
22355 ts.transforming = true;
22356 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
22357 } else {
22358 // mark that we need a transform, so that any data that comes in
22359 // will get processed, now that we've asked for it.
22360 ts.needTransform = true;
22361 }
22362};
ebd8d4e8 22363
8b095871
IC
22364function done(stream, er, data) {
22365 if (er) return stream.emit('error', er);
ebd8d4e8 22366
8b095871 22367 if (data !== null && data !== undefined) stream.push(data);
ebd8d4e8 22368
8b095871
IC
22369 // if there's nothing in the write buffer, then that means
22370 // that nothing more will ever be provided
22371 var ws = stream._writableState;
22372 var ts = stream._transformState;
ebd8d4e8 22373
8b095871 22374 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
ebd8d4e8 22375
8b095871 22376 if (ts.transforming) throw new Error('Calling transform done when still transforming');
ebd8d4e8 22377
8b095871
IC
22378 return stream.push(null);
22379}
22380},{"./_stream_duplex":15,"core-util-is":6,"inherits":9}],19:[function(require,module,exports){
ab78acc6 22381(function (process){
8b095871
IC
22382// A bit simpler than readable streams.
22383// Implement an async ._write(chunk, encoding, cb), and it'll handle all
22384// the drain event emission and buffering.
ebd8d4e8 22385
8b095871
IC
22386'use strict';
22387
22388module.exports = Writable;
ebd8d4e8 22389
ab78acc6 22390/*<replacement>*/
8b095871 22391var processNextTick = require('process-nextick-args');
ab78acc6
IC
22392/*</replacement>*/
22393
ab78acc6 22394/*<replacement>*/
8b095871 22395var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
ab78acc6
IC
22396/*</replacement>*/
22397
ab78acc6 22398/*<replacement>*/
8b095871 22399var Duplex;
ab78acc6
IC
22400/*</replacement>*/
22401
8b095871 22402Writable.WritableState = WritableState;
ab78acc6
IC
22403
22404/*<replacement>*/
22405var util = require('core-util-is');
22406util.inherits = require('inherits');
22407/*</replacement>*/
22408
8b095871
IC
22409/*<replacement>*/
22410var internalUtil = {
22411 deprecate: require('util-deprecate')
22412};
22413/*</replacement>*/
ab78acc6 22414
8b095871
IC
22415/*<replacement>*/
22416var Stream;
22417(function () {
22418 try {
22419 Stream = require('st' + 'ream');
22420 } catch (_) {} finally {
22421 if (!Stream) Stream = require('events').EventEmitter;
22422 }
22423})();
22424/*</replacement>*/
ab78acc6 22425
8b095871 22426var Buffer = require('buffer').Buffer;
ab78acc6 22427/*<replacement>*/
8b095871 22428var bufferShim = require('buffer-shims');
ab78acc6
IC
22429/*</replacement>*/
22430
8b095871
IC
22431util.inherits(Writable, Stream);
22432
22433function nop() {}
ab78acc6 22434
8b095871
IC
22435function WriteReq(chunk, encoding, cb) {
22436 this.chunk = chunk;
22437 this.encoding = encoding;
22438 this.callback = cb;
22439 this.next = null;
22440}
ab78acc6 22441
8b095871
IC
22442function WritableState(options, stream) {
22443 Duplex = Duplex || require('./_stream_duplex');
ab78acc6
IC
22444
22445 options = options || {};
22446
8b095871
IC
22447 // object stream flag to indicate whether or not this stream
22448 // contains buffers or objects.
22449 this.objectMode = !!options.objectMode;
22450
22451 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
22452
22453 // the point at which write() starts returning false
22454 // Note: 0 is a valid value, means that we always return false if
22455 // the entire buffer is not flushed immediately on write()
ab78acc6 22456 var hwm = options.highWaterMark;
8b095871
IC
22457 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
22458 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
ab78acc6
IC
22459
22460 // cast to ints.
8b095871 22461 this.highWaterMark = ~ ~this.highWaterMark;
ab78acc6 22462
8b095871
IC
22463 // drain event flag.
22464 this.needDrain = false;
22465 // at the start of calling end()
22466 this.ending = false;
22467 // when end() has been called, and returned
ab78acc6 22468 this.ended = false;
8b095871
IC
22469 // when 'finish' is emitted
22470 this.finished = false;
22471
22472 // should we decode strings into buffers before passing to _write?
22473 // this is here so that some node-core streams can optimize string
22474 // handling at a lower level.
22475 var noDecode = options.decodeStrings === false;
22476 this.decodeStrings = !noDecode;
22477
22478 // Crypto is kind of old and crusty. Historically, its default string
22479 // encoding is 'binary' so we have to make this configurable.
22480 // Everything else in the universe uses 'utf8', though.
22481 this.defaultEncoding = options.defaultEncoding || 'utf8';
22482
22483 // not an actual buffer we keep track of, but a measurement
22484 // of how much we're waiting to get pushed to some underlying
22485 // socket or file.
22486 this.length = 0;
22487
22488 // a flag to see when we're in the middle of a write.
22489 this.writing = false;
22490
22491 // when true all writes will be buffered until .uncork() call
22492 this.corked = 0;
ebd8d4e8 22493
ab78acc6
IC
22494 // a flag to be able to tell if the onwrite cb is called immediately,
22495 // or on a later tick. We set this to true at first, because any
22496 // actions that shouldn't happen until "later" should generally also
22497 // not happen before the first write call.
22498 this.sync = true;
ebd8d4e8 22499
8b095871
IC
22500 // a flag to know if we're processing previously buffered items, which
22501 // may call the _write() callback in the same tick, so that we don't
22502 // end up in an overlapped onwrite situation.
22503 this.bufferProcessing = false;
22504
22505 // the callback that's passed to _write(chunk,cb)
22506 this.onwrite = function (er) {
22507 onwrite(stream, er);
22508 };
22509
22510 // the callback that the user supplies to write(chunk,encoding,cb)
22511 this.writecb = null;
22512
22513 // the amount that is being written when _write is called.
22514 this.writelen = 0;
22515
22516 this.bufferedRequest = null;
22517 this.lastBufferedRequest = null;
22518
22519 // number of pending user-supplied write callbacks
22520 // this must be 0 before 'finish' can be emitted
22521 this.pendingcb = 0;
22522
22523 // emit prefinish if the only thing we're waiting for is _write cbs
22524 // This is relevant for synchronous Transform streams
22525 this.prefinished = false;
22526
22527 // True if the error was already emitted and should not be thrown again
22528 this.errorEmitted = false;
22529
22530 // count buffered requests
22531 this.bufferedRequestCount = 0;
22532
22533 // allocate the first CorkedRequest, there is always
22534 // one allocated and free to use, and we maintain at most two
22535 this.corkedRequestsFree = new CorkedRequest(this);
22536}
22537
22538WritableState.prototype.getBuffer = function getBuffer() {
22539 var current = this.bufferedRequest;
22540 var out = [];
22541 while (current) {
22542 out.push(current);
22543 current = current.next;
22544 }
22545 return out;
22546};
22547
22548(function () {
22549 try {
22550 Object.defineProperty(WritableState.prototype, 'buffer', {
22551 get: internalUtil.deprecate(function () {
22552 return this.getBuffer();
22553 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
22554 });
22555 } catch (_) {}
22556})();
22557
22558// Test _writableState for inheritance to account for Duplex streams,
22559// whose prototype chain only points to Readable.
22560var realHasInstance;
22561if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
22562 realHasInstance = Function.prototype[Symbol.hasInstance];
22563 Object.defineProperty(Writable, Symbol.hasInstance, {
22564 value: function (object) {
22565 if (realHasInstance.call(this, object)) return true;
22566
22567 return object && object._writableState instanceof WritableState;
22568 }
22569 });
22570} else {
22571 realHasInstance = function (object) {
22572 return object instanceof this;
22573 };
22574}
22575
22576function Writable(options) {
22577 Duplex = Duplex || require('./_stream_duplex');
22578
22579 // Writable ctor is applied to Duplexes, too.
22580 // `realHasInstance` is necessary because using plain `instanceof`
22581 // would return false, as no `_writableState` property is attached.
22582
22583 // Trying to use the custom `instanceof` for Writable here will also break the
22584 // Node.js LazyTransform implementation, which has a non-trivial getter for
22585 // `_writableState` that would lead to infinite recursion.
22586 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
22587 return new Writable(options);
22588 }
22589
22590 this._writableState = new WritableState(options, this);
22591
22592 // legacy.
22593 this.writable = true;
22594
22595 if (options) {
22596 if (typeof options.write === 'function') this._write = options.write;
22597
22598 if (typeof options.writev === 'function') this._writev = options.writev;
22599 }
22600
22601 Stream.call(this);
22602}
22603
22604// Otherwise people can pipe Writable streams, which is just wrong.
22605Writable.prototype.pipe = function () {
22606 this.emit('error', new Error('Cannot pipe, not readable'));
22607};
22608
22609function writeAfterEnd(stream, cb) {
22610 var er = new Error('write after end');
22611 // TODO: defer error events consistently everywhere, not just the cb
22612 stream.emit('error', er);
22613 processNextTick(cb, er);
22614}
22615
22616// If we get something that is not a buffer, string, null, or undefined,
22617// and we're not in objectMode, then that's an error.
22618// Otherwise stream chunks are all considered to be of length=1, and the
22619// watermarks determine how many objects to keep in the buffer, rather than
22620// how many bytes or characters.
22621function validChunk(stream, state, chunk, cb) {
22622 var valid = true;
22623 var er = false;
22624 // Always throw error if a null is written
22625 // if we are not in object mode then throw
22626 // if it is not a buffer, string, or undefined.
22627 if (chunk === null) {
22628 er = new TypeError('May not write null values to stream');
22629 } else if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
22630 er = new TypeError('Invalid non-string/buffer chunk');
22631 }
22632 if (er) {
22633 stream.emit('error', er);
22634 processNextTick(cb, er);
22635 valid = false;
22636 }
22637 return valid;
22638}
ebd8d4e8 22639
8b095871
IC
22640Writable.prototype.write = function (chunk, encoding, cb) {
22641 var state = this._writableState;
22642 var ret = false;
ab78acc6 22643
8b095871
IC
22644 if (typeof encoding === 'function') {
22645 cb = encoding;
22646 encoding = null;
22647 }
ab78acc6 22648
8b095871 22649 if (Buffer.isBuffer(chunk)) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
ab78acc6 22650
8b095871 22651 if (typeof cb !== 'function') cb = nop;
ab78acc6 22652
8b095871
IC
22653 if (state.ended) writeAfterEnd(this, cb);else if (validChunk(this, state, chunk, cb)) {
22654 state.pendingcb++;
22655 ret = writeOrBuffer(this, state, chunk, encoding, cb);
22656 }
ab78acc6 22657
8b095871
IC
22658 return ret;
22659};
ab78acc6 22660
8b095871
IC
22661Writable.prototype.cork = function () {
22662 var state = this._writableState;
ab78acc6 22663
8b095871
IC
22664 state.corked++;
22665};
ebd8d4e8 22666
8b095871
IC
22667Writable.prototype.uncork = function () {
22668 var state = this._writableState;
ab78acc6 22669
8b095871
IC
22670 if (state.corked) {
22671 state.corked--;
ab78acc6 22672
8b095871
IC
22673 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
22674 }
22675};
ab78acc6 22676
8b095871
IC
22677Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
22678 // node::ParseEncoding() requires lower case.
22679 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
22680 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);
22681 this._writableState.defaultEncoding = encoding;
22682 return this;
22683};
ab78acc6 22684
8b095871
IC
22685function decodeChunk(state, chunk, encoding) {
22686 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
22687 chunk = bufferShim.from(chunk, encoding);
22688 }
22689 return chunk;
ab78acc6
IC
22690}
22691
8b095871
IC
22692// if we're already writing something, then just put this
22693// in the queue, and wait our turn. Otherwise, call _write
22694// If we return false, then we need a drain event, so set that flag.
22695function writeOrBuffer(stream, state, chunk, encoding, cb) {
22696 chunk = decodeChunk(state, chunk, encoding);
ab78acc6 22697
8b095871
IC
22698 if (Buffer.isBuffer(chunk)) encoding = 'buffer';
22699 var len = state.objectMode ? 1 : chunk.length;
ebd8d4e8 22700
8b095871 22701 state.length += len;
ebd8d4e8 22702
8b095871
IC
22703 var ret = state.length < state.highWaterMark;
22704 // we must ensure that previous needDrain will not be reset to false.
22705 if (!ret) state.needDrain = true;
ebd8d4e8 22706
8b095871
IC
22707 if (state.writing || state.corked) {
22708 var last = state.lastBufferedRequest;
22709 state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
22710 if (last) {
22711 last.next = state.lastBufferedRequest;
ebd8d4e8 22712 } else {
8b095871
IC
22713 state.bufferedRequest = state.lastBufferedRequest;
22714 }
22715 state.bufferedRequestCount += 1;
22716 } else {
22717 doWrite(stream, state, false, len, chunk, encoding, cb);
22718 }
ab78acc6 22719
8b095871
IC
22720 return ret;
22721}
ab78acc6 22722
8b095871
IC
22723function doWrite(stream, state, writev, len, chunk, encoding, cb) {
22724 state.writelen = len;
22725 state.writecb = cb;
22726 state.writing = true;
22727 state.sync = true;
22728 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
22729 state.sync = false;
22730}
ab78acc6 22731
8b095871
IC
22732function onwriteError(stream, state, sync, er, cb) {
22733 --state.pendingcb;
22734 if (sync) processNextTick(cb, er);else cb(er);
ab78acc6 22735
8b095871
IC
22736 stream._writableState.errorEmitted = true;
22737 stream.emit('error', er);
22738}
ebd8d4e8 22739
8b095871
IC
22740function onwriteStateUpdate(state) {
22741 state.writing = false;
22742 state.writecb = null;
22743 state.length -= state.writelen;
22744 state.writelen = 0;
ab78acc6 22745}
ebd8d4e8 22746
8b095871
IC
22747function onwrite(stream, er) {
22748 var state = stream._writableState;
22749 var sync = state.sync;
22750 var cb = state.writecb;
ab78acc6 22751
8b095871 22752 onwriteStateUpdate(state);
ab78acc6 22753
8b095871
IC
22754 if (er) onwriteError(stream, state, sync, er, cb);else {
22755 // Check if we're actually ready to finish, but don't emit yet
22756 var finished = needFinish(state);
22757
22758 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
22759 clearBuffer(stream, state);
22760 }
22761
22762 if (sync) {
22763 /*<replacement>*/
22764 asyncWrite(afterWrite, stream, state, finished, cb);
22765 /*</replacement>*/
22766 } else {
22767 afterWrite(stream, state, finished, cb);
22768 }
22769 }
ab78acc6
IC
22770}
22771
8b095871
IC
22772function afterWrite(stream, state, finished, cb) {
22773 if (!finished) onwriteDrain(stream, state);
22774 state.pendingcb--;
22775 cb();
22776 finishMaybe(stream, state);
22777}
ab78acc6 22778
8b095871
IC
22779// Must force callback to be called on nextTick, so that we don't
22780// emit 'drain' before the write() consumer gets the 'false' return
22781// value, and has a chance to attach a 'drain' listener.
22782function onwriteDrain(stream, state) {
22783 if (state.length === 0 && state.needDrain) {
22784 state.needDrain = false;
22785 stream.emit('drain');
ebd8d4e8 22786 }
ebd8d4e8 22787}
ebd8d4e8 22788
8b095871
IC
22789// if there's something in the buffer waiting, then process it
22790function clearBuffer(stream, state) {
22791 state.bufferProcessing = true;
22792 var entry = state.bufferedRequest;
ebd8d4e8 22793
8b095871
IC
22794 if (stream._writev && entry && entry.next) {
22795 // Fast case, write everything using _writev()
22796 var l = state.bufferedRequestCount;
22797 var buffer = new Array(l);
22798 var holder = state.corkedRequestsFree;
22799 holder.entry = entry;
ebd8d4e8 22800
8b095871
IC
22801 var count = 0;
22802 while (entry) {
22803 buffer[count] = entry;
22804 entry = entry.next;
22805 count += 1;
22806 }
ebd8d4e8 22807
8b095871 22808 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
ebd8d4e8 22809
8b095871
IC
22810 // doWrite is almost always async, defer these to save a bit of time
22811 // as the hot path ends with doWrite
22812 state.pendingcb++;
22813 state.lastBufferedRequest = null;
22814 if (holder.next) {
22815 state.corkedRequestsFree = holder.next;
22816 holder.next = null;
22817 } else {
22818 state.corkedRequestsFree = new CorkedRequest(state);
22819 }
22820 } else {
22821 // Slow case, write chunks one-by-one
22822 while (entry) {
22823 var chunk = entry.chunk;
22824 var encoding = entry.encoding;
22825 var cb = entry.callback;
22826 var len = state.objectMode ? 1 : chunk.length;
ebd8d4e8 22827
8b095871
IC
22828 doWrite(stream, state, false, len, chunk, encoding, cb);
22829 entry = entry.next;
22830 // if we didn't call the onwrite immediately, then
22831 // it means that we need to wait until it does.
22832 // also, that means that the chunk and cb are currently
22833 // being processed, so move the buffer counter past them.
22834 if (state.writing) {
22835 break;
22836 }
22837 }
22838
22839 if (entry === null) state.lastBufferedRequest = null;
ebd8d4e8 22840 }
ab78acc6 22841
8b095871
IC
22842 state.bufferedRequestCount = 0;
22843 state.bufferedRequest = entry;
22844 state.bufferProcessing = false;
ebd8d4e8
IC
22845}
22846
8b095871
IC
22847Writable.prototype._write = function (chunk, encoding, cb) {
22848 cb(new Error('_write() is not implemented'));
22849};
ebd8d4e8 22850
8b095871 22851Writable.prototype._writev = null;
ab78acc6 22852
8b095871
IC
22853Writable.prototype.end = function (chunk, encoding, cb) {
22854 var state = this._writableState;
22855
22856 if (typeof chunk === 'function') {
22857 cb = chunk;
22858 chunk = null;
22859 encoding = null;
22860 } else if (typeof encoding === 'function') {
22861 cb = encoding;
22862 encoding = null;
ab78acc6
IC
22863 }
22864
8b095871 22865 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
ab78acc6 22866
8b095871
IC
22867 // .end() fully uncorks
22868 if (state.corked) {
22869 state.corked = 1;
22870 this.uncork();
ab78acc6
IC
22871 }
22872
8b095871
IC
22873 // ignore unnecessary end() calls.
22874 if (!state.ending && !state.finished) endWritable(this, state, cb);
22875};
ab78acc6 22876
8b095871
IC
22877function needFinish(state) {
22878 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
22879}
ab78acc6 22880
8b095871
IC
22881function prefinish(stream, state) {
22882 if (!state.prefinished) {
22883 state.prefinished = true;
22884 stream.emit('prefinish');
ab78acc6 22885 }
8b095871 22886}
ab78acc6 22887
8b095871
IC
22888function finishMaybe(stream, state) {
22889 var need = needFinish(state);
22890 if (need) {
22891 if (state.pendingcb === 0) {
22892 prefinish(stream, state);
22893 state.finished = true;
22894 stream.emit('finish');
22895 } else {
22896 prefinish(stream, state);
22897 }
ab78acc6 22898 }
8b095871
IC
22899 return need;
22900}
ab78acc6 22901
8b095871
IC
22902function endWritable(stream, state, cb) {
22903 state.ending = true;
22904 finishMaybe(stream, state);
22905 if (cb) {
22906 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
ab78acc6 22907 }
8b095871
IC
22908 state.ended = true;
22909 stream.writable = false;
22910}
ab78acc6 22911
8b095871
IC
22912// It seems a linked list but it is not
22913// there will be only 2 of these for each stream
22914function CorkedRequest(state) {
22915 var _this = this;
ab78acc6 22916
8b095871
IC
22917 this.next = null;
22918 this.entry = null;
ebd8d4e8 22919
8b095871
IC
22920 this.finish = function (err) {
22921 var entry = _this.entry;
22922 _this.entry = null;
22923 while (entry) {
22924 var cb = entry.callback;
22925 state.pendingcb--;
22926 cb(err);
22927 entry = entry.next;
22928 }
22929 if (state.corkedRequestsFree) {
22930 state.corkedRequestsFree.next = _this;
22931 } else {
22932 state.corkedRequestsFree = _this;
22933 }
22934 };
22935}
22936}).call(this,require('_process'))
22937},{"./_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){
22938'use strict';
ebd8d4e8 22939
8b095871
IC
22940var Buffer = require('buffer').Buffer;
22941/*<replacement>*/
22942var bufferShim = require('buffer-shims');
22943/*</replacement>*/
ebd8d4e8 22944
8b095871 22945module.exports = BufferList;
ebd8d4e8 22946
8b095871
IC
22947function BufferList() {
22948 this.head = null;
22949 this.tail = null;
22950 this.length = 0;
22951}
ab78acc6 22952
8b095871
IC
22953BufferList.prototype.push = function (v) {
22954 var entry = { data: v, next: null };
22955 if (this.length > 0) this.tail.next = entry;else this.head = entry;
22956 this.tail = entry;
22957 ++this.length;
22958};
22959
22960BufferList.prototype.unshift = function (v) {
22961 var entry = { data: v, next: this.head };
22962 if (this.length === 0) this.tail = entry;
22963 this.head = entry;
22964 ++this.length;
22965};
ab78acc6 22966
8b095871
IC
22967BufferList.prototype.shift = function () {
22968 if (this.length === 0) return;
22969 var ret = this.head.data;
22970 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
22971 --this.length;
ab78acc6
IC
22972 return ret;
22973};
22974
8b095871
IC
22975BufferList.prototype.clear = function () {
22976 this.head = this.tail = null;
22977 this.length = 0;
22978};
ebd8d4e8 22979
8b095871
IC
22980BufferList.prototype.join = function (s) {
22981 if (this.length === 0) return '';
22982 var p = this.head;
22983 var ret = '' + p.data;
22984 while (p = p.next) {
22985 ret += s + p.data;
22986 }return ret;
22987};
ebd8d4e8 22988
8b095871
IC
22989BufferList.prototype.concat = function (n) {
22990 if (this.length === 0) return bufferShim.alloc(0);
22991 if (this.length === 1) return this.head.data;
22992 var ret = bufferShim.allocUnsafe(n >>> 0);
22993 var p = this.head;
22994 var i = 0;
22995 while (p) {
22996 p.data.copy(ret, i);
22997 i += p.data.length;
22998 p = p.next;
ebd8d4e8 22999 }
8b095871
IC
23000 return ret;
23001};
23002},{"buffer":5,"buffer-shims":4}],21:[function(require,module,exports){
23003module.exports = require("./lib/_stream_passthrough.js")
ebd8d4e8 23004
8b095871
IC
23005},{"./lib/_stream_passthrough.js":16}],22:[function(require,module,exports){
23006(function (process){
23007var Stream = (function (){
23008 try {
23009 return require('st' + 'ream'); // hack to fix a circular dependency issue when used with browserify
23010 } catch(_){}
23011}());
23012exports = module.exports = require('./lib/_stream_readable.js');
23013exports.Stream = Stream || exports;
23014exports.Readable = exports;
23015exports.Writable = require('./lib/_stream_writable.js');
23016exports.Duplex = require('./lib/_stream_duplex.js');
23017exports.Transform = require('./lib/_stream_transform.js');
23018exports.PassThrough = require('./lib/_stream_passthrough.js');
ab78acc6 23019
8b095871
IC
23020if (!process.browser && process.env.READABLE_STREAM === 'disable' && Stream) {
23021 module.exports = Stream;
ab78acc6 23022}
ebd8d4e8 23023
8b095871
IC
23024}).call(this,require('_process'))
23025},{"./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){
23026module.exports = require("./lib/_stream_transform.js")
ebd8d4e8 23027
8b095871
IC
23028},{"./lib/_stream_transform.js":18}],24:[function(require,module,exports){
23029module.exports = require("./lib/_stream_writable.js")
ab78acc6 23030
8b095871
IC
23031},{"./lib/_stream_writable.js":19}],25:[function(require,module,exports){
23032// Copyright Joyent, Inc. and other Node contributors.
23033//
23034// Permission is hereby granted, free of charge, to any person obtaining a
23035// copy of this software and associated documentation files (the
23036// "Software"), to deal in the Software without restriction, including
23037// without limitation the rights to use, copy, modify, merge, publish,
23038// distribute, sublicense, and/or sell copies of the Software, and to permit
23039// persons to whom the Software is furnished to do so, subject to the
23040// following conditions:
23041//
23042// The above copyright notice and this permission notice shall be included
23043// in all copies or substantial portions of the Software.
23044//
23045// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
23046// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23047// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
23048// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
23049// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
23050// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
23051// USE OR OTHER DEALINGS IN THE SOFTWARE.
23052
23053module.exports = Stream;
23054
23055var EE = require('events').EventEmitter;
23056var inherits = require('inherits');
23057
23058inherits(Stream, EE);
23059Stream.Readable = require('readable-stream/readable.js');
23060Stream.Writable = require('readable-stream/writable.js');
23061Stream.Duplex = require('readable-stream/duplex.js');
23062Stream.Transform = require('readable-stream/transform.js');
23063Stream.PassThrough = require('readable-stream/passthrough.js');
ebd8d4e8 23064
8b095871
IC
23065// Backwards-compat with node 0.4.x
23066Stream.Stream = Stream;
ebd8d4e8 23067
ab78acc6 23068
ab78acc6 23069
8b095871
IC
23070// old-style streams. Note that the pipe method (the only relevant
23071// part of this class) is overridden in the Readable class.
ebd8d4e8 23072
8b095871
IC
23073function Stream() {
23074 EE.call(this);
23075}
ebd8d4e8 23076
8b095871
IC
23077Stream.prototype.pipe = function(dest, options) {
23078 var source = this;
ab78acc6 23079
8b095871
IC
23080 function ondata(chunk) {
23081 if (dest.writable) {
23082 if (false === dest.write(chunk) && source.pause) {
23083 source.pause();
23084 }
ab78acc6
IC
23085 }
23086 }
23087
8b095871
IC
23088 source.on('data', ondata);
23089
23090 function ondrain() {
23091 if (source.readable && source.resume) {
23092 source.resume();
23093 }
ab78acc6
IC
23094 }
23095
ab78acc6
IC
23096 dest.on('drain', ondrain);
23097
8b095871
IC
23098 // If the 'end' option is not supplied, dest.end() will be called when
23099 // source gets the 'end' or 'close' events. Only dest.end() once.
23100 if (!dest._isStdio && (!options || options.end !== false)) {
23101 source.on('end', onend);
23102 source.on('close', onclose);
ab78acc6
IC
23103 }
23104
8b095871
IC
23105 var didOnEnd = false;
23106 function onend() {
23107 if (didOnEnd) return;
23108 didOnEnd = true;
ab78acc6 23109
8b095871 23110 dest.end();
ab78acc6 23111 }
ab78acc6
IC
23112
23113
ab78acc6 23114 function onclose() {
8b095871
IC
23115 if (didOnEnd) return;
23116 didOnEnd = true;
ebd8d4e8 23117
8b095871 23118 if (typeof dest.destroy === 'function') dest.destroy();
ebd8d4e8
IC
23119 }
23120
8b095871
IC
23121 // don't leave dangling pipes when there are errors.
23122 function onerror(er) {
23123 cleanup();
23124 if (EE.listenerCount(this, 'error') === 0) {
23125 throw er; // Unhandled stream error in pipe.
23126 }
ebd8d4e8
IC
23127 }
23128
8b095871
IC
23129 source.on('error', onerror);
23130 dest.on('error', onerror);
ab78acc6 23131
8b095871
IC
23132 // remove all the event listeners that were added.
23133 function cleanup() {
23134 source.removeListener('data', ondata);
23135 dest.removeListener('drain', ondrain);
ab78acc6 23136
8b095871
IC
23137 source.removeListener('end', onend);
23138 source.removeListener('close', onclose);
ab78acc6 23139
8b095871
IC
23140 source.removeListener('error', onerror);
23141 dest.removeListener('error', onerror);
ab78acc6 23142
8b095871
IC
23143 source.removeListener('end', cleanup);
23144 source.removeListener('close', cleanup);
ab78acc6 23145
8b095871
IC
23146 dest.removeListener('close', cleanup);
23147 }
ab78acc6 23148
8b095871
IC
23149 source.on('end', cleanup);
23150 source.on('close', cleanup);
ab78acc6 23151
8b095871 23152 dest.on('close', cleanup);
ebd8d4e8 23153
8b095871 23154 dest.emit('pipe', source);
ab78acc6 23155
8b095871
IC
23156 // Allow for unix-like usage: A.pipe(B).pipe(C)
23157 return dest;
23158};
ab78acc6 23159
8b095871
IC
23160},{"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){
23161// Copyright Joyent, Inc. and other Node contributors.
23162//
23163// Permission is hereby granted, free of charge, to any person obtaining a
23164// copy of this software and associated documentation files (the
23165// "Software"), to deal in the Software without restriction, including
23166// without limitation the rights to use, copy, modify, merge, publish,
23167// distribute, sublicense, and/or sell copies of the Software, and to permit
23168// persons to whom the Software is furnished to do so, subject to the
23169// following conditions:
23170//
23171// The above copyright notice and this permission notice shall be included
23172// in all copies or substantial portions of the Software.
23173//
23174// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
23175// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23176// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
23177// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
23178// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
23179// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
23180// USE OR OTHER DEALINGS IN THE SOFTWARE.
23181
23182var Buffer = require('buffer').Buffer;
ebd8d4e8 23183
8b095871
IC
23184var isBufferEncoding = Buffer.isEncoding
23185 || function(encoding) {
23186 switch (encoding && encoding.toLowerCase()) {
23187 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;
23188 default: return false;
23189 }
23190 }
ab78acc6 23191
ab78acc6 23192
8b095871
IC
23193function assertEncoding(encoding) {
23194 if (encoding && !isBufferEncoding(encoding)) {
23195 throw new Error('Unknown encoding: ' + encoding);
23196 }
23197}
ebd8d4e8 23198
8b095871
IC
23199// StringDecoder provides an interface for efficiently splitting a series of
23200// buffers into a series of JS strings without breaking apart multi-byte
23201// characters. CESU-8 is handled as part of the UTF-8 encoding.
23202//
23203// @TODO Handling all encodings inside a single object makes it very difficult
23204// to reason about this code, so it should be split up in the future.
23205// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
23206// points as used by CESU-8.
23207var StringDecoder = exports.StringDecoder = function(encoding) {
23208 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
23209 assertEncoding(encoding);
23210 switch (this.encoding) {
23211 case 'utf8':
23212 // CESU-8 represents each of Surrogate Pair by 3-bytes
23213 this.surrogateSize = 3;
23214 break;
23215 case 'ucs2':
23216 case 'utf16le':
23217 // UTF-16 represents each of Surrogate Pair by 2-bytes
23218 this.surrogateSize = 2;
23219 this.detectIncompleteChar = utf16DetectIncompleteChar;
23220 break;
23221 case 'base64':
23222 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
23223 this.surrogateSize = 3;
23224 this.detectIncompleteChar = base64DetectIncompleteChar;
23225 break;
23226 default:
23227 this.write = passThroughWrite;
23228 return;
23229 }
23230
23231 // Enough space to store all bytes of a single character. UTF-8 needs 4
23232 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
23233 this.charBuffer = new Buffer(6);
23234 // Number of bytes received for the current incomplete multi-byte character.
23235 this.charReceived = 0;
23236 // Number of bytes expected for the current incomplete multi-byte character.
23237 this.charLength = 0;
ab78acc6
IC
23238};
23239
ab78acc6 23240
8b095871
IC
23241// write decodes the given buffer and returns it as JS string that is
23242// guaranteed to not contain any partial multi-byte characters. Any partial
23243// character found at the end of the buffer is buffered up, and will be
23244// returned when calling write again with the remaining bytes.
23245//
23246// Note: Converting a Buffer containing an orphan surrogate to a String
23247// currently works, but converting a String to a Buffer (via `new Buffer`, or
23248// Buffer#write) will replace incomplete surrogates with the unicode
23249// replacement character. See https://codereview.chromium.org/121173009/ .
23250StringDecoder.prototype.write = function(buffer) {
23251 var charStr = '';
23252 // if our last write ended with an incomplete multibyte character
23253 while (this.charLength) {
23254 // determine how many remaining bytes this buffer has to offer for this char
23255 var available = (buffer.length >= this.charLength - this.charReceived) ?
23256 this.charLength - this.charReceived :
23257 buffer.length;
ab78acc6 23258
8b095871
IC
23259 // add the new bytes to the char buffer
23260 buffer.copy(this.charBuffer, this.charReceived, 0, available);
23261 this.charReceived += available;
23262
23263 if (this.charReceived < this.charLength) {
23264 // still not enough chars in this buffer? wait for more ...
23265 return '';
ebd8d4e8 23266 }
ebd8d4e8 23267
8b095871
IC
23268 // remove bytes belonging to the current character from the buffer
23269 buffer = buffer.slice(available, buffer.length);
ab78acc6 23270
8b095871
IC
23271 // get the character that was split
23272 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
23273
23274 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
23275 var charCode = charStr.charCodeAt(charStr.length - 1);
23276 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
23277 this.charLength += this.surrogateSize;
23278 charStr = '';
23279 continue;
ab78acc6 23280 }
8b095871 23281 this.charReceived = this.charLength = 0;
ebd8d4e8 23282
8b095871
IC
23283 // if there are no more bytes in this buffer, just emit our char
23284 if (buffer.length === 0) {
23285 return charStr;
23286 }
23287 break;
ebd8d4e8 23288 }
ebd8d4e8 23289
8b095871
IC
23290 // determine and set charLength / charReceived
23291 this.detectIncompleteChar(buffer);
ebd8d4e8 23292
8b095871
IC
23293 var end = buffer.length;
23294 if (this.charLength) {
23295 // buffer the incomplete character bytes we got
23296 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
23297 end -= this.charReceived;
ab78acc6 23298 }
ebd8d4e8 23299
8b095871
IC
23300 charStr += buffer.toString(this.encoding, 0, end);
23301
23302 var end = charStr.length - 1;
23303 var charCode = charStr.charCodeAt(end);
23304 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
23305 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
23306 var size = this.surrogateSize;
23307 this.charLength += size;
23308 this.charReceived += size;
23309 this.charBuffer.copy(this.charBuffer, size, 0, size);
23310 buffer.copy(this.charBuffer, 0, 0, size);
23311 return charStr.substring(0, end);
ab78acc6 23312 }
ebd8d4e8 23313
8b095871
IC
23314 // or just emit the charStr
23315 return charStr;
23316};
ebd8d4e8 23317
8b095871
IC
23318// detectIncompleteChar determines if there is an incomplete UTF-8 character at
23319// the end of the given buffer. If so, it sets this.charLength to the byte
23320// length that character, and sets this.charReceived to the number of bytes
23321// that are available for this character.
23322StringDecoder.prototype.detectIncompleteChar = function(buffer) {
23323 // determine how many bytes we have to check at the end of this buffer
23324 var i = (buffer.length >= 3) ? 3 : buffer.length;
ab78acc6 23325
8b095871
IC
23326 // Figure out if one of the last i bytes of our buffer announces an
23327 // incomplete char.
23328 for (; i > 0; i--) {
23329 var c = buffer[buffer.length - i];
ebd8d4e8 23330
8b095871 23331 // See http://en.wikipedia.org/wiki/UTF-8#Description
ebd8d4e8 23332
8b095871
IC
23333 // 110XXXXX
23334 if (i == 1 && c >> 5 == 0x06) {
23335 this.charLength = 2;
23336 break;
ebd8d4e8 23337 }
ab78acc6 23338
8b095871
IC
23339 // 1110XXXX
23340 if (i <= 2 && c >> 4 == 0x0E) {
23341 this.charLength = 3;
23342 break;
23343 }
23344
23345 // 11110XXX
23346 if (i <= 3 && c >> 3 == 0x1E) {
23347 this.charLength = 4;
23348 break;
ebd8d4e8
IC
23349 }
23350 }
8b095871
IC
23351 this.charReceived = i;
23352};
ab78acc6 23353
8b095871
IC
23354StringDecoder.prototype.end = function(buffer) {
23355 var res = '';
23356 if (buffer && buffer.length)
23357 res = this.write(buffer);
ab78acc6 23358
8b095871
IC
23359 if (this.charReceived) {
23360 var cr = this.charReceived;
23361 var buf = this.charBuffer;
23362 var enc = this.encoding;
23363 res += buf.slice(0, cr).toString(enc);
23364 }
ab78acc6 23365
8b095871 23366 return res;
ab78acc6
IC
23367};
23368
8b095871
IC
23369function passThroughWrite(buffer) {
23370 return buffer.toString(this.encoding);
23371}
ab78acc6 23372
8b095871
IC
23373function utf16DetectIncompleteChar(buffer) {
23374 this.charReceived = buffer.length % 2;
23375 this.charLength = this.charReceived ? 2 : 0;
23376}
ab78acc6 23377
8b095871
IC
23378function base64DetectIncompleteChar(buffer) {
23379 this.charReceived = buffer.length % 3;
23380 this.charLength = this.charReceived ? 3 : 0;
23381}
ab78acc6 23382
8b095871
IC
23383},{"buffer":5}],27:[function(require,module,exports){
23384(function (global){
ab78acc6 23385
8b095871
IC
23386/**
23387 * Module exports.
23388 */
ebd8d4e8 23389
8b095871 23390module.exports = deprecate;
ebd8d4e8 23391
8b095871
IC
23392/**
23393 * Mark that a method should not be used.
23394 * Returns a modified function which warns once by default.
23395 *
23396 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
23397 *
23398 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
23399 * will throw an Error when invoked.
23400 *
23401 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
23402 * will invoke `console.trace()` instead of `console.error()`.
23403 *
23404 * @param {Function} fn - the function to deprecate
23405 * @param {String} msg - the string to print to the console when `fn` is invoked
23406 * @returns {Function} a new "deprecated" version of `fn`
23407 * @api public
23408 */
ebd8d4e8 23409
8b095871
IC
23410function deprecate (fn, msg) {
23411 if (config('noDeprecation')) {
23412 return fn;
23413 }
ebd8d4e8 23414
8b095871
IC
23415 var warned = false;
23416 function deprecated() {
23417 if (!warned) {
23418 if (config('throwDeprecation')) {
23419 throw new Error(msg);
23420 } else if (config('traceDeprecation')) {
23421 console.trace(msg);
23422 } else {
23423 console.warn(msg);
ab78acc6 23424 }
8b095871 23425 warned = true;
ab78acc6 23426 }
8b095871 23427 return fn.apply(this, arguments);
ebd8d4e8
IC
23428 }
23429
8b095871 23430 return deprecated;
ebd8d4e8
IC
23431}
23432
8b095871
IC
23433/**
23434 * Checks `localStorage` for boolean values for the given `name`.
23435 *
23436 * @param {String} name
23437 * @returns {Boolean}
23438 * @api private
23439 */
ebd8d4e8 23440
8b095871
IC
23441function config (name) {
23442 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
23443 try {
23444 if (!global.localStorage) return false;
23445 } catch (_) {
23446 return false;
ab78acc6 23447 }
8b095871
IC
23448 var val = global.localStorage[name];
23449 if (null == val) return false;
23450 return String(val).toLowerCase() === 'true';
ebd8d4e8 23451}
ebd8d4e8 23452
8b095871
IC
23453}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
23454},{}],28:[function(require,module,exports){
23455arguments[4][9][0].apply(exports,arguments)
23456},{"dup":9}],29:[function(require,module,exports){
23457module.exports = function isBuffer(arg) {
23458 return arg && typeof arg === 'object'
23459 && typeof arg.copy === 'function'
23460 && typeof arg.fill === 'function'
23461 && typeof arg.readUInt8 === 'function';
ebd8d4e8 23462}
8b095871
IC
23463},{}],30:[function(require,module,exports){
23464(function (process,global){
ab78acc6
IC
23465// Copyright Joyent, Inc. and other Node contributors.
23466//
23467// Permission is hereby granted, free of charge, to any person obtaining a
23468// copy of this software and associated documentation files (the
23469// "Software"), to deal in the Software without restriction, including
23470// without limitation the rights to use, copy, modify, merge, publish,
23471// distribute, sublicense, and/or sell copies of the Software, and to permit
23472// persons to whom the Software is furnished to do so, subject to the
23473// following conditions:
23474//
23475// The above copyright notice and this permission notice shall be included
23476// in all copies or substantial portions of the Software.
23477//
23478// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
23479// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23480// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
23481// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
23482// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
23483// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
23484// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 23485
8b095871
IC
23486var formatRegExp = /%[sdj%]/g;
23487exports.format = function(f) {
23488 if (!isString(f)) {
23489 var objects = [];
23490 for (var i = 0; i < arguments.length; i++) {
23491 objects.push(inspect(arguments[i]));
23492 }
23493 return objects.join(' ');
23494 }
ebd8d4e8 23495
8b095871
IC
23496 var i = 1;
23497 var args = arguments;
23498 var len = args.length;
23499 var str = String(f).replace(formatRegExp, function(x) {
23500 if (x === '%%') return '%';
23501 if (i >= len) return x;
23502 switch (x) {
23503 case '%s': return String(args[i++]);
23504 case '%d': return Number(args[i++]);
23505 case '%j':
23506 try {
23507 return JSON.stringify(args[i++]);
23508 } catch (_) {
23509 return '[Circular]';
23510 }
23511 default:
23512 return x;
23513 }
23514 });
23515 for (var x = args[i]; i < len; x = args[++i]) {
23516 if (isNull(x) || !isObject(x)) {
23517 str += ' ' + x;
23518 } else {
23519 str += ' ' + inspect(x);
23520 }
23521 }
23522 return str;
23523};
ebd8d4e8 23524
ebd8d4e8 23525
8b095871
IC
23526// Mark that a method should not be used.
23527// Returns a modified function which warns once by default.
23528// If --no-deprecation is set, then it is a no-op.
23529exports.deprecate = function(fn, msg) {
23530 // Allow for deprecating things in the process of starting up.
23531 if (isUndefined(global.process)) {
23532 return function() {
23533 return exports.deprecate(fn, msg).apply(this, arguments);
23534 };
23535 }
23536
23537 if (process.noDeprecation === true) {
23538 return fn;
23539 }
23540
23541 var warned = false;
23542 function deprecated() {
23543 if (!warned) {
23544 if (process.throwDeprecation) {
23545 throw new Error(msg);
23546 } else if (process.traceDeprecation) {
23547 console.trace(msg);
23548 } else {
23549 console.error(msg);
23550 }
23551 warned = true;
23552 }
23553 return fn.apply(this, arguments);
23554 }
23555
23556 return deprecated;
23557};
ebd8d4e8 23558
ab78acc6 23559
8b095871
IC
23560var debugs = {};
23561var debugEnviron;
23562exports.debuglog = function(set) {
23563 if (isUndefined(debugEnviron))
23564 debugEnviron = process.env.NODE_DEBUG || '';
23565 set = set.toUpperCase();
23566 if (!debugs[set]) {
23567 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
23568 var pid = process.pid;
23569 debugs[set] = function() {
23570 var msg = exports.format.apply(exports, arguments);
23571 console.error('%s %d: %s', set, pid, msg);
23572 };
23573 } else {
23574 debugs[set] = function() {};
23575 }
23576 }
23577 return debugs[set];
23578};
ab78acc6
IC
23579
23580
8b095871
IC
23581/**
23582 * Echos the value of a value. Trys to print the value out
23583 * in the best way possible given the different types.
23584 *
23585 * @param {Object} obj The object to print out.
23586 * @param {Object} opts Optional options object that alters the output.
23587 */
23588/* legacy: obj, showHidden, depth, colors*/
23589function inspect(obj, opts) {
23590 // default options
23591 var ctx = {
23592 seen: [],
23593 stylize: stylizeNoColor
ab78acc6 23594 };
8b095871
IC
23595 // legacy...
23596 if (arguments.length >= 3) ctx.depth = arguments[2];
23597 if (arguments.length >= 4) ctx.colors = arguments[3];
23598 if (isBoolean(opts)) {
23599 // legacy...
23600 ctx.showHidden = opts;
23601 } else if (opts) {
23602 // got an "options" object
23603 exports._extend(ctx, opts);
23604 }
23605 // set default options
23606 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
23607 if (isUndefined(ctx.depth)) ctx.depth = 2;
23608 if (isUndefined(ctx.colors)) ctx.colors = false;
23609 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
23610 if (ctx.colors) ctx.stylize = stylizeWithColor;
23611 return formatValue(ctx, obj, ctx.depth);
ebd8d4e8 23612}
8b095871 23613exports.inspect = inspect;
ebd8d4e8 23614
ab78acc6 23615
8b095871
IC
23616// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
23617inspect.colors = {
23618 'bold' : [1, 22],
23619 'italic' : [3, 23],
23620 'underline' : [4, 24],
23621 'inverse' : [7, 27],
23622 'white' : [37, 39],
23623 'grey' : [90, 39],
23624 'black' : [30, 39],
23625 'blue' : [34, 39],
23626 'cyan' : [36, 39],
23627 'green' : [32, 39],
23628 'magenta' : [35, 39],
23629 'red' : [31, 39],
23630 'yellow' : [33, 39]
23631};
ab78acc6 23632
8b095871
IC
23633// Don't use 'blue' not visible on cmd.exe
23634inspect.styles = {
23635 'special': 'cyan',
23636 'number': 'yellow',
23637 'boolean': 'yellow',
23638 'undefined': 'grey',
23639 'null': 'bold',
23640 'string': 'green',
23641 'date': 'magenta',
23642 // "name": intentionally not styling
23643 'regexp': 'red'
23644};
ab78acc6 23645
ab78acc6 23646
8b095871
IC
23647function stylizeWithColor(str, styleType) {
23648 var style = inspect.styles[styleType];
ab78acc6 23649
8b095871
IC
23650 if (style) {
23651 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
23652 '\u001b[' + inspect.colors[style][1] + 'm';
23653 } else {
23654 return str;
ab78acc6 23655 }
ebd8d4e8 23656}
ebd8d4e8 23657
ab78acc6 23658
8b095871
IC
23659function stylizeNoColor(str, styleType) {
23660 return str;
23661}
ab78acc6 23662
ab78acc6 23663
8b095871
IC
23664function arrayToHash(array) {
23665 var hash = {};
ab78acc6 23666
8b095871
IC
23667 array.forEach(function(val, idx) {
23668 hash[val] = true;
ab78acc6 23669 });
ebd8d4e8 23670
8b095871
IC
23671 return hash;
23672}
ab78acc6 23673
ab78acc6 23674
8b095871
IC
23675function formatValue(ctx, value, recurseTimes) {
23676 // Provide a hook for user-specified inspect functions.
23677 // Check that value is an object with an inspect function on it
23678 if (ctx.customInspect &&
23679 value &&
23680 isFunction(value.inspect) &&
23681 // Filter out the util module, it's inspect function is special
23682 value.inspect !== exports.inspect &&
23683 // Also filter out any prototype objects using the circular check.
23684 !(value.constructor && value.constructor.prototype === value)) {
23685 var ret = value.inspect(recurseTimes, ctx);
23686 if (!isString(ret)) {
23687 ret = formatValue(ctx, ret, recurseTimes);
23688 }
23689 return ret;
ab78acc6 23690 }
ebd8d4e8 23691
8b095871
IC
23692 // Primitive types cannot have properties
23693 var primitive = formatPrimitive(ctx, value);
23694 if (primitive) {
23695 return primitive;
ab78acc6 23696 }
ebd8d4e8 23697
8b095871
IC
23698 // Look up the keys of the object.
23699 var keys = Object.keys(value);
23700 var visibleKeys = arrayToHash(keys);
ebd8d4e8 23701
8b095871
IC
23702 if (ctx.showHidden) {
23703 keys = Object.getOwnPropertyNames(value);
23704 }
ebd8d4e8 23705
8b095871
IC
23706 // IE doesn't make error fields non-enumerable
23707 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
23708 if (isError(value)
23709 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
23710 return formatError(value);
23711 }
ebd8d4e8 23712
8b095871
IC
23713 // Some type of object without properties can be shortcutted.
23714 if (keys.length === 0) {
23715 if (isFunction(value)) {
23716 var name = value.name ? ': ' + value.name : '';
23717 return ctx.stylize('[Function' + name + ']', 'special');
23718 }
23719 if (isRegExp(value)) {
23720 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
23721 }
23722 if (isDate(value)) {
23723 return ctx.stylize(Date.prototype.toString.call(value), 'date');
23724 }
23725 if (isError(value)) {
23726 return formatError(value);
23727 }
23728 }
ab78acc6 23729
8b095871 23730 var base = '', array = false, braces = ['{', '}'];
ab78acc6 23731
8b095871
IC
23732 // Make Array say that they are Array
23733 if (isArray(value)) {
23734 array = true;
23735 braces = ['[', ']'];
23736 }
ebd8d4e8 23737
8b095871
IC
23738 // Make functions say that they are functions
23739 if (isFunction(value)) {
23740 var n = value.name ? ': ' + value.name : '';
23741 base = ' [Function' + n + ']';
23742 }
ebd8d4e8 23743
8b095871
IC
23744 // Make RegExps say that they are RegExps
23745 if (isRegExp(value)) {
23746 base = ' ' + RegExp.prototype.toString.call(value);
23747 }
ebd8d4e8 23748
8b095871
IC
23749 // Make dates with properties first say the date
23750 if (isDate(value)) {
23751 base = ' ' + Date.prototype.toUTCString.call(value);
23752 }
ebd8d4e8 23753
8b095871
IC
23754 // Make error with message first say the error
23755 if (isError(value)) {
23756 base = ' ' + formatError(value);
23757 }
ebd8d4e8 23758
8b095871
IC
23759 if (keys.length === 0 && (!array || value.length == 0)) {
23760 return braces[0] + base + braces[1];
23761 }
ebd8d4e8 23762
8b095871
IC
23763 if (recurseTimes < 0) {
23764 if (isRegExp(value)) {
23765 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
23766 } else {
23767 return ctx.stylize('[Object]', 'special');
23768 }
23769 }
ebd8d4e8 23770
8b095871 23771 ctx.seen.push(value);
ebd8d4e8 23772
8b095871
IC
23773 var output;
23774 if (array) {
23775 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
23776 } else {
23777 output = keys.map(function(key) {
23778 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
23779 });
23780 }
ebd8d4e8 23781
8b095871 23782 ctx.seen.pop();
ebd8d4e8 23783
8b095871 23784 return reduceToSingleString(output, base, braces);
ebd8d4e8
IC
23785}
23786
ebd8d4e8 23787
8b095871
IC
23788function formatPrimitive(ctx, value) {
23789 if (isUndefined(value))
23790 return ctx.stylize('undefined', 'undefined');
23791 if (isString(value)) {
23792 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
23793 .replace(/'/g, "\\'")
23794 .replace(/\\"/g, '"') + '\'';
23795 return ctx.stylize(simple, 'string');
23796 }
23797 if (isNumber(value))
23798 return ctx.stylize('' + value, 'number');
23799 if (isBoolean(value))
23800 return ctx.stylize('' + value, 'boolean');
23801 // For some reason typeof null is "object", so special case here.
23802 if (isNull(value))
23803 return ctx.stylize('null', 'null');
23804}
ebd8d4e8 23805
ebd8d4e8 23806
8b095871
IC
23807function formatError(value) {
23808 return '[' + Error.prototype.toString.call(value) + ']';
23809}
ebd8d4e8 23810
ebd8d4e8 23811
8b095871
IC
23812function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
23813 var output = [];
23814 for (var i = 0, l = value.length; i < l; ++i) {
23815 if (hasOwnProperty(value, String(i))) {
23816 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
23817 String(i), true));
23818 } else {
23819 output.push('');
23820 }
23821 }
23822 keys.forEach(function(key) {
23823 if (!key.match(/^\d+$/)) {
23824 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
23825 key, true));
23826 }
23827 });
23828 return output;
23829}
ebd8d4e8 23830
ebd8d4e8 23831
8b095871
IC
23832function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
23833 var name, str, desc;
23834 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
23835 if (desc.get) {
23836 if (desc.set) {
23837 str = ctx.stylize('[Getter/Setter]', 'special');
23838 } else {
23839 str = ctx.stylize('[Getter]', 'special');
23840 }
23841 } else {
23842 if (desc.set) {
23843 str = ctx.stylize('[Setter]', 'special');
23844 }
23845 }
23846 if (!hasOwnProperty(visibleKeys, key)) {
23847 name = '[' + key + ']';
23848 }
23849 if (!str) {
23850 if (ctx.seen.indexOf(desc.value) < 0) {
23851 if (isNull(recurseTimes)) {
23852 str = formatValue(ctx, desc.value, null);
23853 } else {
23854 str = formatValue(ctx, desc.value, recurseTimes - 1);
23855 }
23856 if (str.indexOf('\n') > -1) {
23857 if (array) {
23858 str = str.split('\n').map(function(line) {
23859 return ' ' + line;
23860 }).join('\n').substr(2);
23861 } else {
23862 str = '\n' + str.split('\n').map(function(line) {
23863 return ' ' + line;
23864 }).join('\n');
23865 }
23866 }
23867 } else {
23868 str = ctx.stylize('[Circular]', 'special');
23869 }
23870 }
23871 if (isUndefined(name)) {
23872 if (array && key.match(/^\d+$/)) {
23873 return str;
23874 }
23875 name = JSON.stringify('' + key);
23876 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
23877 name = name.substr(1, name.length - 2);
23878 name = ctx.stylize(name, 'name');
23879 } else {
23880 name = name.replace(/'/g, "\\'")
23881 .replace(/\\"/g, '"')
23882 .replace(/(^"|"$)/g, "'");
23883 name = ctx.stylize(name, 'string');
23884 }
23885 }
ebd8d4e8 23886
8b095871
IC
23887 return name + ': ' + str;
23888}
ebd8d4e8 23889
ebd8d4e8 23890
8b095871
IC
23891function reduceToSingleString(output, base, braces) {
23892 var numLinesEst = 0;
23893 var length = output.reduce(function(prev, cur) {
23894 numLinesEst++;
23895 if (cur.indexOf('\n') >= 0) numLinesEst++;
23896 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
23897 }, 0);
ebd8d4e8 23898
8b095871
IC
23899 if (length > 60) {
23900 return braces[0] +
23901 (base === '' ? '' : base + '\n ') +
23902 ' ' +
23903 output.join(',\n ') +
23904 ' ' +
23905 braces[1];
23906 }
ebd8d4e8 23907
8b095871
IC
23908 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
23909}
ebd8d4e8 23910
ebd8d4e8 23911
8b095871
IC
23912// NOTE: These type checking functions intentionally don't use `instanceof`
23913// because it is fragile and can be easily faked with `Object.create()`.
23914function isArray(ar) {
23915 return Array.isArray(ar);
23916}
23917exports.isArray = isArray;
ebd8d4e8 23918
8b095871
IC
23919function isBoolean(arg) {
23920 return typeof arg === 'boolean';
23921}
23922exports.isBoolean = isBoolean;
ebd8d4e8 23923
8b095871
IC
23924function isNull(arg) {
23925 return arg === null;
23926}
23927exports.isNull = isNull;
ebd8d4e8 23928
8b095871
IC
23929function isNullOrUndefined(arg) {
23930 return arg == null;
ebd8d4e8 23931}
8b095871 23932exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 23933
8b095871
IC
23934function isNumber(arg) {
23935 return typeof arg === 'number';
23936}
23937exports.isNumber = isNumber;
ebd8d4e8 23938
8b095871
IC
23939function isString(arg) {
23940 return typeof arg === 'string';
23941}
23942exports.isString = isString;
ebd8d4e8 23943
8b095871
IC
23944function isSymbol(arg) {
23945 return typeof arg === 'symbol';
23946}
23947exports.isSymbol = isSymbol;
ebd8d4e8 23948
8b095871
IC
23949function isUndefined(arg) {
23950 return arg === void 0;
23951}
23952exports.isUndefined = isUndefined;
ebd8d4e8 23953
8b095871
IC
23954function isRegExp(re) {
23955 return isObject(re) && objectToString(re) === '[object RegExp]';
ebd8d4e8 23956}
8b095871 23957exports.isRegExp = isRegExp;
ebd8d4e8 23958
8b095871
IC
23959function isObject(arg) {
23960 return typeof arg === 'object' && arg !== null;
23961}
23962exports.isObject = isObject;
ebd8d4e8 23963
8b095871
IC
23964function isDate(d) {
23965 return isObject(d) && objectToString(d) === '[object Date]';
23966}
23967exports.isDate = isDate;
ebd8d4e8 23968
8b095871
IC
23969function isError(e) {
23970 return isObject(e) &&
23971 (objectToString(e) === '[object Error]' || e instanceof Error);
ebd8d4e8 23972}
8b095871 23973exports.isError = isError;
ebd8d4e8 23974
8b095871
IC
23975function isFunction(arg) {
23976 return typeof arg === 'function';
ebd8d4e8 23977}
8b095871 23978exports.isFunction = isFunction;
ebd8d4e8 23979
8b095871
IC
23980function isPrimitive(arg) {
23981 return arg === null ||
23982 typeof arg === 'boolean' ||
23983 typeof arg === 'number' ||
23984 typeof arg === 'string' ||
23985 typeof arg === 'symbol' || // ES6 symbol
23986 typeof arg === 'undefined';
23987}
23988exports.isPrimitive = isPrimitive;
ebd8d4e8 23989
8b095871 23990exports.isBuffer = require('./support/isBuffer');
ebd8d4e8 23991
8b095871
IC
23992function objectToString(o) {
23993 return Object.prototype.toString.call(o);
23994}
ab78acc6 23995
ab78acc6 23996
8b095871
IC
23997function pad(n) {
23998 return n < 10 ? '0' + n.toString(10) : n.toString(10);
23999}
ebd8d4e8 24000
ab78acc6 24001
8b095871
IC
24002var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
24003 'Oct', 'Nov', 'Dec'];
ab78acc6 24004
8b095871
IC
24005// 26 Feb 16:19:34
24006function timestamp() {
24007 var d = new Date();
24008 var time = [pad(d.getHours()),
24009 pad(d.getMinutes()),
24010 pad(d.getSeconds())].join(':');
24011 return [d.getDate(), months[d.getMonth()], time].join(' ');
24012}
24013
24014
24015// log is just a thin wrapper to console.log that prepends a timestamp
24016exports.log = function() {
24017 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
ab78acc6 24018};
ebd8d4e8 24019
ebd8d4e8 24020
8b095871
IC
24021/**
24022 * Inherit the prototype methods from one constructor into another.
24023 *
24024 * The Function.prototype.inherits from lang.js rewritten as a standalone
24025 * function (not on Function.prototype). NOTE: If this file is to be loaded
24026 * during bootstrapping this function needs to be rewritten using some native
24027 * functions as prototype setup using normal JavaScript does not work as
24028 * expected during bootstrapping (see mirror.js in r114903).
24029 *
24030 * @param {function} ctor Constructor function which needs to inherit the
24031 * prototype.
24032 * @param {function} superCtor Constructor function to inherit prototype from.
24033 */
24034exports.inherits = require('inherits');
ebd8d4e8 24035
8b095871
IC
24036exports._extend = function(origin, add) {
24037 // Don't do anything if add isn't an object
24038 if (!add || !isObject(add)) return origin;
24039
24040 var keys = Object.keys(add);
24041 var i = keys.length;
24042 while (i--) {
24043 origin[keys[i]] = add[keys[i]];
ebd8d4e8 24044 }
8b095871 24045 return origin;
ab78acc6 24046};
ebd8d4e8 24047
8b095871
IC
24048function hasOwnProperty(obj, prop) {
24049 return Object.prototype.hasOwnProperty.call(obj, prop);
ebd8d4e8
IC
24050}
24051
8b095871
IC
24052}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
24053},{"./support/isBuffer":29,"_process":13,"inherits":28}],31:[function(require,module,exports){
24054(function (Buffer){
24055const createKeccakHash = require('keccak')
24056const secp256k1 = require('secp256k1')
24057const assert = require('assert')
24058const rlp = require('rlp')
24059const BN = require('bn.js')
24060const createHash = require('create-hash')
24061Object.assign(exports, require('ethjs-util'))
ab78acc6 24062
8b095871
IC
24063/**
24064 * the max integer that this VM can handle (a ```BN```)
24065 * @var {BN} MAX_INTEGER
24066 */
24067exports.MAX_INTEGER = new BN('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)
ab78acc6 24068
8b095871
IC
24069/**
24070 * 2^256 (a ```BN```)
24071 * @var {BN} TWO_POW256
24072 */
24073exports.TWO_POW256 = new BN('10000000000000000000000000000000000000000000000000000000000000000', 16)
ab78acc6 24074
8b095871
IC
24075/**
24076 * SHA3-256 hash of null (a ```String```)
24077 * @var {String} SHA3_NULL_S
24078 */
24079exports.SHA3_NULL_S = 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'
ebd8d4e8 24080
8b095871
IC
24081/**
24082 * SHA3-256 hash of null (a ```Buffer```)
24083 * @var {Buffer} SHA3_NULL
24084 */
24085exports.SHA3_NULL = Buffer.from(exports.SHA3_NULL_S, 'hex')
ebd8d4e8 24086
8b095871
IC
24087/**
24088 * SHA3-256 of an RLP of an empty array (a ```String```)
24089 * @var {String} SHA3_RLP_ARRAY_S
24090 */
24091exports.SHA3_RLP_ARRAY_S = '1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347'
ebd8d4e8 24092
8b095871
IC
24093/**
24094 * SHA3-256 of an RLP of an empty array (a ```Buffer```)
24095 * @var {Buffer} SHA3_RLP_ARRAY
24096 */
24097exports.SHA3_RLP_ARRAY = Buffer.from(exports.SHA3_RLP_ARRAY_S, 'hex')
ebd8d4e8 24098
8b095871
IC
24099/**
24100 * SHA3-256 hash of the RLP of null (a ```String```)
24101 * @var {String} SHA3_RLP_S
24102 */
24103exports.SHA3_RLP_S = '56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421'
ebd8d4e8 24104
8b095871
IC
24105/**
24106 * SHA3-256 hash of the RLP of null (a ```Buffer```)
24107 * @var {Buffer} SHA3_RLP
24108 */
24109exports.SHA3_RLP = Buffer.from(exports.SHA3_RLP_S, 'hex')
ebd8d4e8 24110
8b095871
IC
24111/**
24112 * [`BN`](https://github.com/indutny/bn.js)
24113 * @var {Function}
24114 */
24115exports.BN = BN
ebd8d4e8 24116
8b095871
IC
24117/**
24118 * [`rlp`](https://github.com/ethereumjs/rlp)
24119 * @var {Function}
24120 */
24121exports.rlp = rlp
ebd8d4e8 24122
8b095871
IC
24123/**
24124 * [`secp256k1`](https://github.com/cryptocoinjs/secp256k1-node/)
24125 * @var {Object}
24126 */
24127exports.secp256k1 = secp256k1
ab78acc6 24128
8b095871
IC
24129/**
24130 * Returns a buffer filled with 0s
24131 * @method zeros
24132 * @param {Number} bytes the number of bytes the buffer should be
24133 * @return {Buffer}
24134 */
24135exports.zeros = function (bytes) {
24136 return Buffer.allocUnsafe(bytes).fill(0)
24137}
24138
24139/**
24140 * Left Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
24141 * Or it truncates the beginning if it exceeds.
24142 * @method lsetLength
24143 * @param {Buffer|Array} msg the value to pad
24144 * @param {Number} length the number of bytes the output should be
24145 * @param {Boolean} [right=false] whether to start padding form the left or right
24146 * @return {Buffer|Array}
24147 */
24148exports.setLengthLeft = exports.setLength = function (msg, length, right) {
24149 var buf = exports.zeros(length)
24150 msg = exports.toBuffer(msg)
24151 if (right) {
24152 if (msg.length < length) {
24153 msg.copy(buf)
24154 return buf
24155 }
24156 return msg.slice(0, length)
24157 } else {
24158 if (msg.length < length) {
24159 msg.copy(buf, length - msg.length)
24160 return buf
ebd8d4e8 24161 }
8b095871 24162 return msg.slice(-length)
ebd8d4e8
IC
24163 }
24164}
24165
8b095871
IC
24166/**
24167 * Right Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
24168 * Or it truncates the beginning if it exceeds.
24169 * @param {Buffer|Array} msg the value to pad
24170 * @param {Number} length the number of bytes the output should be
24171 * @return {Buffer|Array}
24172 */
24173exports.setLengthRight = function (msg, length) {
24174 return exports.setLength(msg, length, true)
ab78acc6
IC
24175}
24176
8b095871
IC
24177/**
24178 * Trims leading zeros from a `Buffer` or an `Array`
24179 * @param {Buffer|Array|String} a
24180 * @return {Buffer|Array|String}
24181 */
24182exports.unpad = exports.stripZeros = function (a) {
24183 a = exports.stripHexPrefix(a)
24184 var first = a[0]
24185 while (a.length > 0 && first.toString() === '0') {
24186 a = a.slice(1)
24187 first = a[0]
24188 }
24189 return a
24190}
24191/**
24192 * 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.
24193 * @param {*} v the value
24194 */
24195exports.toBuffer = function (v) {
24196 if (!Buffer.isBuffer(v)) {
24197 if (Array.isArray(v)) {
24198 v = Buffer.from(v)
24199 } else if (typeof v === 'string') {
24200 if (exports.isHexPrefixed(v)) {
24201 v = Buffer.from(exports.padToEven(exports.stripHexPrefix(v)), 'hex')
24202 } else {
24203 v = Buffer.from(v)
24204 }
24205 } else if (typeof v === 'number') {
24206 v = exports.intToBuffer(v)
24207 } else if (v === null || v === undefined) {
24208 v = Buffer.allocUnsafe(0)
24209 } else if (v.toArray) {
24210 // converts a BN to a Buffer
24211 v = Buffer.from(v.toArray())
24212 } else {
24213 throw new Error('invalid type')
24214 }
ebd8d4e8 24215 }
8b095871 24216 return v
ebd8d4e8
IC
24217}
24218
8b095871
IC
24219/**
24220 * Converts a `Buffer` to a `Number`
24221 * @param {Buffer} buf
24222 * @return {Number}
24223 * @throws If the input number exceeds 53 bits.
24224 */
24225exports.bufferToInt = function (buf) {
24226 return new BN(exports.toBuffer(buf)).toNumber()
24227}
ebd8d4e8 24228
8b095871
IC
24229/**
24230 * Converts a `Buffer` into a hex `String`
24231 * @param {Buffer} buf
24232 * @return {String}
24233 */
24234exports.bufferToHex = function (buf) {
24235 buf = exports.toBuffer(buf)
24236 return '0x' + buf.toString('hex')
24237}
ab78acc6 24238
8b095871
IC
24239/**
24240 * Interprets a `Buffer` as a signed integer and returns a `BN`. Assumes 256-bit numbers.
24241 * @param {Buffer} num
24242 * @return {BN}
24243 */
24244exports.fromSigned = function (num) {
24245 return new BN(num).fromTwos(256)
24246}
ab78acc6 24247
8b095871
IC
24248/**
24249 * Converts a `BN` to an unsigned integer and returns it as a `Buffer`. Assumes 256-bit numbers.
24250 * @param {BN} num
24251 * @return {Buffer}
24252 */
24253exports.toUnsigned = function (num) {
24254 return Buffer.from(num.toTwos(256).toArray())
24255}
ab78acc6 24256
8b095871
IC
24257/**
24258 * Creates SHA-3 hash of the input
24259 * @param {Buffer|Array|String|Number} a the input data
24260 * @param {Number} [bits=256] the SHA width
24261 * @return {Buffer}
24262 */
24263exports.sha3 = function (a, bits) {
24264 a = exports.toBuffer(a)
24265 if (!bits) bits = 256
ab78acc6 24266
8b095871
IC
24267 return createKeccakHash('keccak' + bits).update(a).digest()
24268}
ab78acc6 24269
8b095871
IC
24270/**
24271 * Creates SHA256 hash of the input
24272 * @param {Buffer|Array|String|Number} a the input data
24273 * @return {Buffer}
24274 */
24275exports.sha256 = function (a) {
24276 a = exports.toBuffer(a)
24277 return createHash('sha256').update(a).digest()
24278}
ab78acc6 24279
8b095871
IC
24280/**
24281 * Creates RIPEMD160 hash of the input
24282 * @param {Buffer|Array|String|Number} a the input data
24283 * @param {Boolean} padded whether it should be padded to 256 bits or not
24284 * @return {Buffer}
24285 */
24286exports.ripemd160 = function (a, padded) {
24287 a = exports.toBuffer(a)
24288 var hash = createHash('rmd160').update(a).digest()
24289 if (padded === true) {
24290 return exports.setLength(hash, 32)
24291 } else {
24292 return hash
ebd8d4e8 24293 }
8b095871 24294}
ebd8d4e8 24295
8b095871
IC
24296/**
24297 * Creates SHA-3 hash of the RLP encoded version of the input
24298 * @param {Buffer|Array|String|Number} a the input data
24299 * @return {Buffer}
24300 */
24301exports.rlphash = function (a) {
24302 return exports.sha3(rlp.encode(a))
ebd8d4e8
IC
24303}
24304
8b095871
IC
24305/**
24306 * Checks if the private key satisfies the rules of the curve secp256k1.
24307 * @param {Buffer} privateKey
24308 * @return {Boolean}
24309 */
24310exports.isValidPrivate = function (privateKey) {
24311 return secp256k1.privateKeyVerify(privateKey)
24312}
ebd8d4e8 24313
8b095871
IC
24314/**
24315 * Checks if the public key satisfies the rules of the curve secp256k1
24316 * and the requirements of Ethereum.
24317 * @param {Buffer} publicKey The two points of an uncompressed key, unless sanitize is enabled
24318 * @param {Boolean} [sanitize=false] Accept public keys in other formats
24319 * @return {Boolean}
24320 */
24321exports.isValidPublic = function (publicKey, sanitize) {
24322 if (publicKey.length === 64) {
24323 // Convert to SEC1 for secp256k1
24324 return secp256k1.publicKeyVerify(Buffer.concat([ Buffer.from([4]), publicKey ]))
24325 }
ebd8d4e8 24326
8b095871
IC
24327 if (!sanitize) {
24328 return false
24329 }
ebd8d4e8 24330
8b095871
IC
24331 return secp256k1.publicKeyVerify(publicKey)
24332}
ebd8d4e8 24333
8b095871
IC
24334/**
24335 * Returns the ethereum address of a given public key.
24336 * Accepts "Ethereum public keys" and SEC1 encoded keys.
24337 * @param {Buffer} pubKey The two points of an uncompressed key, unless sanitize is enabled
24338 * @param {Boolean} [sanitize=false] Accept public keys in other formats
24339 * @return {Buffer}
24340 */
24341exports.pubToAddress = exports.publicToAddress = function (pubKey, sanitize) {
24342 pubKey = exports.toBuffer(pubKey)
24343 if (sanitize && (pubKey.length !== 64)) {
24344 pubKey = secp256k1.publicKeyConvert(pubKey, false).slice(1)
ab78acc6 24345 }
8b095871
IC
24346 assert(pubKey.length === 64)
24347 // Only take the lower 160bits of the hash
24348 return exports.sha3(pubKey).slice(-20)
24349}
ebd8d4e8 24350
8b095871
IC
24351/**
24352 * Returns the ethereum public key of a given private key
24353 * @param {Buffer} privateKey A private key must be 256 bits wide
24354 * @return {Buffer}
24355 */
24356var privateToPublic = exports.privateToPublic = function (privateKey) {
24357 privateKey = exports.toBuffer(privateKey)
24358 // skip the type flag and use the X, Y points
24359 return secp256k1.publicKeyCreate(privateKey, false).slice(1)
24360}
ab78acc6 24361
8b095871
IC
24362/**
24363 * Converts a public key to the Ethereum format.
24364 * @param {Buffer} publicKey
24365 * @return {Buffer}
24366 */
24367exports.importPublic = function (publicKey) {
24368 publicKey = exports.toBuffer(publicKey)
24369 if (publicKey.length !== 64) {
24370 publicKey = secp256k1.publicKeyConvert(publicKey, false).slice(1)
ebd8d4e8 24371 }
8b095871
IC
24372 return publicKey
24373}
ab78acc6 24374
8b095871
IC
24375/**
24376 * ECDSA sign
24377 * @param {Buffer} msgHash
24378 * @param {Buffer} privateKey
24379 * @return {Object}
24380 */
24381exports.ecsign = function (msgHash, privateKey) {
24382 var sig = secp256k1.sign(msgHash, privateKey)
ab78acc6 24383
8b095871
IC
24384 var ret = {}
24385 ret.r = sig.signature.slice(0, 32)
24386 ret.s = sig.signature.slice(32, 64)
24387 ret.v = sig.recovery + 27
24388 return ret
ebd8d4e8
IC
24389}
24390
8b095871
IC
24391/**
24392 * Returns the keccak-256 hash of `message`, prefixed with the header used by the `eth_sign` RPC call.
24393 * The output of this function can be fed into `ecsign` to produce the same signature as the `eth_sign`
24394 * call for a given `message`, or fed to `ecrecover` along with a signature to recover the public key
24395 * used to produce the signature.
24396 * @param message
24397 * @returns {Buffer} hash
24398 */
24399exports.hashPersonalMessage = function (message) {
24400 var prefix = exports.toBuffer('\u0019Ethereum Signed Message:\n' + message.length.toString())
24401 return exports.sha3(Buffer.concat([prefix, message]))
ebd8d4e8
IC
24402}
24403
8b095871
IC
24404/**
24405 * ECDSA public key recovery from signature
24406 * @param {Buffer} msgHash
24407 * @param {Number} v
24408 * @param {Buffer} r
24409 * @param {Buffer} s
24410 * @return {Buffer} publicKey
24411 */
24412exports.ecrecover = function (msgHash, v, r, s) {
24413 var signature = Buffer.concat([exports.setLength(r, 32), exports.setLength(s, 32)], 64)
24414 var recovery = v - 27
24415 if (recovery !== 0 && recovery !== 1) {
24416 throw new Error('Invalid signature v value')
ab78acc6 24417 }
8b095871
IC
24418 var senderPubKey = secp256k1.recover(msgHash, signature, recovery)
24419 return secp256k1.publicKeyConvert(senderPubKey, false).slice(1)
ab78acc6 24420}
ebd8d4e8 24421
8b095871
IC
24422/**
24423 * Convert signature parameters into the format of `eth_sign` RPC method
24424 * @param {Number} v
24425 * @param {Buffer} r
24426 * @param {Buffer} s
24427 * @return {String} sig
24428 */
24429exports.toRpcSig = function (v, r, s) {
24430 // NOTE: with potential introduction of chainId this might need to be updated
24431 if (v !== 27 && v !== 28) {
24432 throw new Error('Invalid recovery id')
24433 }
24434
24435 // geth (and the RPC eth_sign method) uses the 65 byte format used by Bitcoin
24436 // FIXME: this might change in the future - https://github.com/ethereum/go-ethereum/issues/2053
24437 return exports.bufferToHex(Buffer.concat([
24438 exports.setLengthLeft(r, 32),
24439 exports.setLengthLeft(s, 32),
24440 exports.toBuffer(v - 27)
24441 ]))
ebd8d4e8
IC
24442}
24443
8b095871
IC
24444/**
24445 * Convert signature format of the `eth_sign` RPC method to signature parameters
24446 * NOTE: all because of a bug in geth: https://github.com/ethereum/go-ethereum/issues/2053
24447 * @param {String} sig
24448 * @return {Object}
24449 */
24450exports.fromRpcSig = function (sig) {
24451 sig = exports.toBuffer(sig)
ebd8d4e8 24452
8b095871
IC
24453 // NOTE: with potential introduction of chainId this might need to be updated
24454 if (sig.length !== 65) {
24455 throw new Error('Invalid signature length')
24456 }
24457
24458 var v = sig[64]
24459 // support both versions of `eth_sign` responses
24460 if (v < 27) {
24461 v += 27
24462 }
24463
24464 return {
24465 v: v,
24466 r: sig.slice(0, 32),
24467 s: sig.slice(32, 64)
24468 }
ebd8d4e8
IC
24469}
24470
8b095871
IC
24471/**
24472 * Returns the ethereum address of a given private key
24473 * @param {Buffer} privateKey A private key must be 256 bits wide
24474 * @return {Buffer}
24475 */
24476exports.privateToAddress = function (privateKey) {
24477 return exports.publicToAddress(privateToPublic(privateKey))
ab78acc6 24478}
ebd8d4e8 24479
8b095871
IC
24480/**
24481 * Checks if the address is a valid. Accepts checksummed addresses too
24482 * @param {String} address
24483 * @return {Boolean}
24484 */
24485exports.isValidAddress = function (address) {
24486 return /^0x[0-9a-fA-F]{40}$/i.test(address)
ab78acc6 24487}
ebd8d4e8 24488
8b095871
IC
24489/**
24490 * Returns a checksummed address
24491 * @param {String} address
24492 * @return {String}
24493 */
24494exports.toChecksumAddress = function (address) {
24495 address = exports.stripHexPrefix(address).toLowerCase()
24496 var hash = exports.sha3(address).toString('hex')
24497 var ret = '0x'
24498
24499 for (var i = 0; i < address.length; i++) {
24500 if (parseInt(hash[i], 16) >= 8) {
24501 ret += address[i].toUpperCase()
24502 } else {
24503 ret += address[i]
24504 }
24505 }
24506
24507 return ret
ebd8d4e8
IC
24508}
24509
8b095871
IC
24510/**
24511 * Checks if the address is a valid checksummed address
24512 * @param {Buffer} address
24513 * @return {Boolean}
24514 */
24515exports.isValidChecksumAddress = function (address) {
24516 return exports.isValidAddress(address) && (exports.toChecksumAddress(address) === address)
ab78acc6 24517}
ebd8d4e8 24518
8b095871
IC
24519/**
24520 * Generates an address of a newly created contract
24521 * @param {Buffer} from the address which is creating this new address
24522 * @param {Buffer} nonce the nonce of the from account
24523 * @return {Buffer}
24524 */
24525exports.generateAddress = function (from, nonce) {
24526 from = exports.toBuffer(from)
24527 nonce = new BN(nonce)
24528
24529 if (nonce.isZero()) {
24530 // in RLP we want to encode null in the case of zero nonce
24531 // read the RLP documentation for an answer if you dare
24532 nonce = null
24533 } else {
24534 nonce = Buffer.from(nonce.toArray())
24535 }
24536
24537 // Only take the lower 160bits of the hash
24538 return exports.rlphash([from, nonce]).slice(-20)
ab78acc6 24539}
ebd8d4e8 24540
8b095871
IC
24541/**
24542 * Returns true if the supplied address belongs to a precompiled account
24543 * @param {Buffer|String} address
24544 * @return {Boolean}
24545 */
24546exports.isPrecompiled = function (address) {
24547 var a = exports.unpad(address)
24548 return a.length === 1 && a[0] > 0 && a[0] < 5
ebd8d4e8
IC
24549}
24550
8b095871
IC
24551/**
24552 * Adds "0x" to a given `String` if it does not already start with "0x"
24553 * @param {String} str
24554 * @return {String}
24555 */
24556exports.addHexPrefix = function (str) {
24557 if (typeof str !== 'string') {
24558 return str
24559 }
24560
24561 return exports.isHexPrefixed(str) ? str : '0x' + str
ebd8d4e8
IC
24562}
24563
8b095871
IC
24564/**
24565 * Validate ECDSA signature
24566 * @method isValidSignature
24567 * @param {Buffer} v
24568 * @param {Buffer} r
24569 * @param {Buffer} s
24570 * @param {Boolean} [homestead=true]
24571 * @return {Boolean}
24572 */
24573
24574exports.isValidSignature = function (v, r, s, homestead) {
24575 const SECP256K1_N_DIV_2 = new BN('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0', 16)
24576 const SECP256K1_N = new BN('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141', 16)
24577
24578 if (r.length !== 32 || s.length !== 32) {
24579 return false
24580 }
24581
24582 if (v !== 27 && v !== 28) {
24583 return false
24584 }
24585
24586 r = new BN(r)
24587 s = new BN(s)
24588
24589 if (r.isZero() || r.gt(SECP256K1_N) || s.isZero() || s.gt(SECP256K1_N)) {
24590 return false
24591 }
24592
24593 if ((homestead === false) && (new BN(s).cmp(SECP256K1_N_DIV_2) === 1)) {
24594 return false
24595 }
24596
24597 return true
ebd8d4e8
IC
24598}
24599
8b095871
IC
24600/**
24601 * Converts a `Buffer` or `Array` to JSON
24602 * @param {Buffer|Array} ba
24603 * @return {Array|String|null}
24604 */
24605exports.baToJSON = function (ba) {
24606 if (Buffer.isBuffer(ba)) {
24607 return '0x' + ba.toString('hex')
24608 } else if (ba instanceof Array) {
24609 var array = []
24610 for (var i = 0; i < ba.length; i++) {
24611 array.push(exports.baToJSON(ba[i]))
24612 }
24613 return array
24614 }
ab78acc6 24615}
ebd8d4e8 24616
8b095871
IC
24617/**
24618 * Defines properties on a `Object`. It make the assumption that underlying data is binary.
24619 * @param {Object} self the `Object` to define properties on
24620 * @param {Array} fields an array fields to define. Fields can contain:
24621 * * `name` - the name of the properties
24622 * * `length` - the number of bytes the field can have
24623 * * `allowLess` - if the field can be less than the length
24624 * * `allowEmpty`
24625 * @param {*} data data to be validated against the definitions
24626 */
24627exports.defineProperties = function (self, fields, data) {
24628 self.raw = []
24629 self._fields = []
24630
24631 // attach the `toJSON`
24632 self.toJSON = function (label) {
24633 if (label) {
24634 var obj = {}
24635 self._fields.forEach(function (field) {
24636 obj[field] = '0x' + self[field].toString('hex')
24637 })
24638 return obj
24639 }
24640 return exports.baToJSON(this.raw)
24641 }
24642
24643 self.serialize = function serialize () {
24644 return rlp.encode(self.raw)
24645 }
24646
24647 fields.forEach(function (field, i) {
24648 self._fields.push(field.name)
24649 function getter () {
24650 return self.raw[i]
24651 }
24652 function setter (v) {
24653 v = exports.toBuffer(v)
24654
24655 if (v.toString('hex') === '00' && !field.allowZero) {
24656 v = Buffer.allocUnsafe(0)
24657 }
24658
24659 if (field.allowLess && field.length) {
24660 v = exports.stripZeros(v)
24661 assert(field.length >= v.length, 'The field ' + field.name + ' must not have more ' + field.length + ' bytes')
24662 } else if (!(field.allowZero && v.length === 0) && field.length) {
24663 assert(field.length === v.length, 'The field ' + field.name + ' must have byte length of ' + field.length)
24664 }
24665
24666 self.raw[i] = v
24667 }
24668
24669 Object.defineProperty(self, field.name, {
24670 enumerable: true,
24671 configurable: true,
24672 get: getter,
24673 set: setter
24674 })
24675
24676 if (field.default) {
24677 self[field.name] = field.default
24678 }
24679
24680 // attach alias
24681 if (field.alias) {
24682 Object.defineProperty(self, field.alias, {
24683 enumerable: false,
24684 configurable: true,
24685 set: setter,
24686 get: getter
24687 })
24688 }
24689 })
24690
24691 // if the constuctor is passed data
24692 if (data) {
24693 if (typeof data === 'string') {
24694 data = Buffer.from(exports.stripHexPrefix(data), 'hex')
24695 }
24696
24697 if (Buffer.isBuffer(data)) {
24698 data = rlp.decode(data)
24699 }
24700
24701 if (Array.isArray(data)) {
24702 if (data.length > self._fields.length) {
24703 throw (new Error('wrong number of fields in data'))
24704 }
24705
24706 // make sure all the items are buffers
24707 data.forEach(function (d, i) {
24708 self[self._fields[i]] = exports.toBuffer(d)
24709 })
24710 } else if (typeof data === 'object') {
24711 const keys = Object.keys(data)
24712 fields.forEach(function (field) {
24713 if (keys.indexOf(field.name) !== -1) self[field.name] = data[field.name]
24714 if (keys.indexOf(field.alias) !== -1) self[field.alias] = data[field.alias]
24715 })
24716 } else {
24717 throw new Error('invalid data')
24718 }
24719 }
ab78acc6 24720}
ebd8d4e8 24721
8b095871
IC
24722}).call(this,require("buffer").Buffer)
24723},{"assert":1,"bn.js":33,"buffer":5,"create-hash":36,"ethjs-util":56,"keccak":65,"rlp":72,"secp256k1":73}],32:[function(require,module,exports){
24724(function (Buffer){
24725// Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki
24726// Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
24727// NOTE: SIGHASH byte ignored AND restricted, truncate before use
24728
24729function check (buffer) {
24730 if (buffer.length < 8) return false
24731 if (buffer.length > 72) return false
24732 if (buffer[0] !== 0x30) return false
24733 if (buffer[1] !== buffer.length - 2) return false
24734 if (buffer[2] !== 0x02) return false
24735
24736 var lenR = buffer[3]
24737 if (lenR === 0) return false
24738 if (5 + lenR >= buffer.length) return false
24739 if (buffer[4 + lenR] !== 0x02) return false
24740
24741 var lenS = buffer[5 + lenR]
24742 if (lenS === 0) return false
24743 if ((6 + lenR + lenS) !== buffer.length) return false
24744
24745 if (buffer[4] & 0x80) return false
24746 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false
24747
24748 if (buffer[lenR + 6] & 0x80) return false
24749 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false
24750 return true
ab78acc6 24751}
ab78acc6 24752
8b095871
IC
24753function decode (buffer) {
24754 if (buffer.length < 8) throw new Error('DER sequence length is too short')
24755 if (buffer.length > 72) throw new Error('DER sequence length is too long')
24756 if (buffer[0] !== 0x30) throw new Error('Expected DER sequence')
24757 if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid')
24758 if (buffer[2] !== 0x02) throw new Error('Expected DER integer')
24759
24760 var lenR = buffer[3]
24761 if (lenR === 0) throw new Error('R length is zero')
24762 if (5 + lenR >= buffer.length) throw new Error('R length is too long')
24763 if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)')
24764
24765 var lenS = buffer[5 + lenR]
24766 if (lenS === 0) throw new Error('S length is zero')
24767 if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid')
24768
24769 if (buffer[4] & 0x80) throw new Error('R value is negative')
24770 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded')
24771
24772 if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative')
24773 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded')
24774
24775 // non-BIP66 - extract R, S values
24776 return {
24777 r: buffer.slice(4, 4 + lenR),
24778 s: buffer.slice(6 + lenR)
24779 }
ebd8d4e8
IC
24780}
24781
8b095871
IC
24782/*
24783 * Expects r and s to be positive DER integers.
24784 *
24785 * The DER format uses the most significant bit as a sign bit (& 0x80).
24786 * If the significant bit is set AND the integer is positive, a 0x00 is prepended.
24787 *
24788 * Examples:
24789 *
24790 * 0 => 0x00
24791 * 1 => 0x01
24792 * -1 => 0xff
24793 * 127 => 0x7f
24794 * -127 => 0x81
24795 * 128 => 0x0080
24796 * -128 => 0x80
24797 * 255 => 0x00ff
24798 * -255 => 0xff01
24799 * 16300 => 0x3fac
24800 * -16300 => 0xc054
24801 * 62300 => 0x00f35c
24802 * -62300 => 0xff0ca4
24803*/
24804function encode (r, s) {
24805 var lenR = r.length
24806 var lenS = s.length
24807 if (lenR === 0) throw new Error('R length is zero')
24808 if (lenS === 0) throw new Error('S length is zero')
24809 if (lenR > 33) throw new Error('R length is too long')
24810 if (lenS > 33) throw new Error('S length is too long')
24811 if (r[0] & 0x80) throw new Error('R value is negative')
24812 if (s[0] & 0x80) throw new Error('S value is negative')
24813 if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded')
24814 if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded')
24815
24816 var signature = new Buffer(6 + lenR + lenS)
24817
24818 // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
24819 signature[0] = 0x30
24820 signature[1] = signature.length - 2
24821 signature[2] = 0x02
24822 signature[3] = r.length
24823 r.copy(signature, 4)
24824 signature[4 + lenR] = 0x02
24825 signature[5 + lenR] = s.length
24826 s.copy(signature, 6 + lenR)
24827
24828 return signature
ebd8d4e8
IC
24829}
24830
8b095871
IC
24831module.exports = {
24832 check: check,
24833 decode: decode,
24834 encode: encode
ebd8d4e8 24835}
8b095871 24836
ab78acc6 24837}).call(this,require("buffer").Buffer)
8b095871
IC
24838},{"buffer":5}],33:[function(require,module,exports){
24839(function (module, exports) {
24840 'use strict';
ebd8d4e8 24841
8b095871
IC
24842 // Utils
24843 function assert (val, msg) {
24844 if (!val) throw new Error(msg || 'Assertion failed');
24845 }
ebd8d4e8 24846
8b095871
IC
24847 // Could use `inherits` module, but don't want to move from single file
24848 // architecture yet.
24849 function inherits (ctor, superCtor) {
24850 ctor.super_ = superCtor;
24851 var TempCtor = function () {};
24852 TempCtor.prototype = superCtor.prototype;
24853 ctor.prototype = new TempCtor();
24854 ctor.prototype.constructor = ctor;
24855 }
ebd8d4e8 24856
8b095871 24857 // BN
ab78acc6 24858
8b095871
IC
24859 function BN (number, base, endian) {
24860 if (BN.isBN(number)) {
24861 return number;
24862 }
ab78acc6 24863
8b095871
IC
24864 this.negative = 0;
24865 this.words = null;
24866 this.length = 0;
ab78acc6 24867
8b095871
IC
24868 // Reduction context
24869 this.red = null;
ab78acc6 24870
8b095871
IC
24871 if (number !== null) {
24872 if (base === 'le' || base === 'be') {
24873 endian = base;
24874 base = 10;
24875 }
ab78acc6 24876
8b095871
IC
24877 this._init(number || 0, base || 10, endian || 'be');
24878 }
24879 }
24880 if (typeof module === 'object') {
24881 module.exports = BN;
24882 } else {
24883 exports.BN = BN;
24884 }
ab78acc6 24885
8b095871
IC
24886 BN.BN = BN;
24887 BN.wordSize = 26;
ab78acc6 24888
8b095871
IC
24889 var Buffer;
24890 try {
24891 Buffer = require('buf' + 'fer').Buffer;
24892 } catch (e) {
24893 }
ab78acc6 24894
8b095871
IC
24895 BN.isBN = function isBN (num) {
24896 if (num instanceof BN) {
24897 return true;
24898 }
ab78acc6 24899
8b095871
IC
24900 return num !== null && typeof num === 'object' &&
24901 num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
24902 };
ebd8d4e8 24903
8b095871
IC
24904 BN.max = function max (left, right) {
24905 if (left.cmp(right) > 0) return left;
24906 return right;
24907 };
ebd8d4e8 24908
8b095871
IC
24909 BN.min = function min (left, right) {
24910 if (left.cmp(right) < 0) return left;
24911 return right;
24912 };
24913
24914 BN.prototype._init = function init (number, base, endian) {
24915 if (typeof number === 'number') {
24916 return this._initNumber(number, base, endian);
ab78acc6 24917 }
ebd8d4e8 24918
8b095871
IC
24919 if (typeof number === 'object') {
24920 return this._initArray(number, base, endian);
24921 }
ebd8d4e8 24922
8b095871
IC
24923 if (base === 'hex') {
24924 base = 16;
24925 }
24926 assert(base === (base | 0) && base >= 2 && base <= 36);
24927
24928 number = number.toString().replace(/\s+/g, '');
24929 var start = 0;
24930 if (number[0] === '-') {
24931 start++;
24932 }
24933
24934 if (base === 16) {
24935 this._parseHex(number, start);
24936 } else {
24937 this._parseBase(number, base, start);
ab78acc6 24938 }
ebd8d4e8 24939
8b095871
IC
24940 if (number[0] === '-') {
24941 this.negative = 1;
24942 }
ebd8d4e8 24943
8b095871 24944 this.strip();
ebd8d4e8 24945
8b095871 24946 if (endian !== 'le') return;
ebd8d4e8 24947
8b095871
IC
24948 this._initArray(this.toArray(), base, endian);
24949 };
ebd8d4e8 24950
8b095871
IC
24951 BN.prototype._initNumber = function _initNumber (number, base, endian) {
24952 if (number < 0) {
24953 this.negative = 1;
24954 number = -number;
24955 }
24956 if (number < 0x4000000) {
24957 this.words = [ number & 0x3ffffff ];
24958 this.length = 1;
24959 } else if (number < 0x10000000000000) {
24960 this.words = [
24961 number & 0x3ffffff,
24962 (number / 0x4000000) & 0x3ffffff
24963 ];
24964 this.length = 2;
24965 } else {
24966 assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
24967 this.words = [
24968 number & 0x3ffffff,
24969 (number / 0x4000000) & 0x3ffffff,
24970 1
24971 ];
24972 this.length = 3;
24973 }
ebd8d4e8 24974
8b095871 24975 if (endian !== 'le') return;
ebd8d4e8 24976
8b095871
IC
24977 // Reverse the bytes
24978 this._initArray(this.toArray(), base, endian);
24979 };
ebd8d4e8 24980
8b095871
IC
24981 BN.prototype._initArray = function _initArray (number, base, endian) {
24982 // Perhaps a Uint8Array
24983 assert(typeof number.length === 'number');
24984 if (number.length <= 0) {
24985 this.words = [ 0 ];
24986 this.length = 1;
24987 return this;
ab78acc6 24988 }
ebd8d4e8 24989
8b095871
IC
24990 this.length = Math.ceil(number.length / 3);
24991 this.words = new Array(this.length);
24992 for (var i = 0; i < this.length; i++) {
24993 this.words[i] = 0;
24994 }
ebd8d4e8 24995
8b095871
IC
24996 var j, w;
24997 var off = 0;
24998 if (endian === 'be') {
24999 for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
25000 w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
25001 this.words[j] |= (w << off) & 0x3ffffff;
25002 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
25003 off += 24;
25004 if (off >= 26) {
25005 off -= 26;
25006 j++;
25007 }
25008 }
25009 } else if (endian === 'le') {
25010 for (i = 0, j = 0; i < number.length; i += 3) {
25011 w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
25012 this.words[j] |= (w << off) & 0x3ffffff;
25013 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
25014 off += 24;
25015 if (off >= 26) {
25016 off -= 26;
25017 j++;
25018 }
25019 }
25020 }
25021 return this.strip();
25022 };
ebd8d4e8 25023
8b095871
IC
25024 function parseHex (str, start, end) {
25025 var r = 0;
25026 var len = Math.min(str.length, end);
25027 for (var i = start; i < len; i++) {
25028 var c = str.charCodeAt(i) - 48;
ab78acc6 25029
8b095871 25030 r <<= 4;
ab78acc6 25031
8b095871
IC
25032 // 'a' - 'f'
25033 if (c >= 49 && c <= 54) {
25034 r |= c - 49 + 0xa;
ab78acc6 25035
8b095871
IC
25036 // 'A' - 'F'
25037 } else if (c >= 17 && c <= 22) {
25038 r |= c - 17 + 0xa;
ebd8d4e8 25039
8b095871
IC
25040 // '0' - '9'
25041 } else {
25042 r |= c & 0xf;
25043 }
25044 }
25045 return r;
25046 }
25047
25048 BN.prototype._parseHex = function _parseHex (number, start) {
25049 // Create possibly bigger array to ensure that it fits the number
25050 this.length = Math.ceil((number.length - start) / 6);
25051 this.words = new Array(this.length);
25052 for (var i = 0; i < this.length; i++) {
25053 this.words[i] = 0;
25054 }
25055
25056 var j, w;
25057 // Scan 24-bit chunks and add them to the number
25058 var off = 0;
25059 for (i = number.length - 6, j = 0; i >= start; i -= 6) {
25060 w = parseHex(number, i, i + 6);
25061 this.words[j] |= (w << off) & 0x3ffffff;
25062 // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb
25063 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
25064 off += 24;
25065 if (off >= 26) {
25066 off -= 26;
25067 j++;
25068 }
25069 }
25070 if (i + 6 !== start) {
25071 w = parseHex(number, start, i + 6);
25072 this.words[j] |= (w << off) & 0x3ffffff;
25073 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
25074 }
25075 this.strip();
25076 };
ebd8d4e8 25077
8b095871
IC
25078 function parseBase (str, start, end, mul) {
25079 var r = 0;
25080 var len = Math.min(str.length, end);
25081 for (var i = start; i < len; i++) {
25082 var c = str.charCodeAt(i) - 48;
ebd8d4e8 25083
8b095871 25084 r *= mul;
ebd8d4e8 25085
8b095871
IC
25086 // 'a'
25087 if (c >= 49) {
25088 r += c - 49 + 0xa;
ebd8d4e8 25089
8b095871
IC
25090 // 'A'
25091 } else if (c >= 17) {
25092 r += c - 17 + 0xa;
ebd8d4e8 25093
8b095871
IC
25094 // '0' - '9'
25095 } else {
25096 r += c;
25097 }
25098 }
25099 return r;
25100 }
ebd8d4e8 25101
8b095871
IC
25102 BN.prototype._parseBase = function _parseBase (number, base, start) {
25103 // Initialize as zero
25104 this.words = [ 0 ];
25105 this.length = 1;
ebd8d4e8 25106
8b095871
IC
25107 // Find length of limb in base
25108 for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
25109 limbLen++;
25110 }
25111 limbLen--;
25112 limbPow = (limbPow / base) | 0;
ebd8d4e8 25113
8b095871
IC
25114 var total = number.length - start;
25115 var mod = total % limbLen;
25116 var end = Math.min(total, total - mod) + start;
ebd8d4e8 25117
8b095871
IC
25118 var word = 0;
25119 for (var i = start; i < end; i += limbLen) {
25120 word = parseBase(number, i, i + limbLen, base);
ebd8d4e8 25121
8b095871
IC
25122 this.imuln(limbPow);
25123 if (this.words[0] + word < 0x4000000) {
25124 this.words[0] += word;
25125 } else {
25126 this._iaddn(word);
25127 }
25128 }
ebd8d4e8 25129
8b095871
IC
25130 if (mod !== 0) {
25131 var pow = 1;
25132 word = parseBase(number, i, number.length, base);
ebd8d4e8 25133
8b095871
IC
25134 for (i = 0; i < mod; i++) {
25135 pow *= base;
25136 }
ab78acc6 25137
8b095871
IC
25138 this.imuln(pow);
25139 if (this.words[0] + word < 0x4000000) {
25140 this.words[0] += word;
25141 } else {
25142 this._iaddn(word);
25143 }
25144 }
25145 };
ab78acc6 25146
8b095871
IC
25147 BN.prototype.copy = function copy (dest) {
25148 dest.words = new Array(this.length);
25149 for (var i = 0; i < this.length; i++) {
25150 dest.words[i] = this.words[i];
ab78acc6 25151 }
8b095871
IC
25152 dest.length = this.length;
25153 dest.negative = this.negative;
25154 dest.red = this.red;
25155 };
ab78acc6 25156
8b095871
IC
25157 BN.prototype.clone = function clone () {
25158 var r = new BN(null);
25159 this.copy(r);
25160 return r;
25161 };
ab78acc6 25162
8b095871
IC
25163 BN.prototype._expand = function _expand (size) {
25164 while (this.length < size) {
25165 this.words[this.length++] = 0;
25166 }
25167 return this;
25168 };
ab78acc6 25169
8b095871
IC
25170 // Remove leading `0` from `this`
25171 BN.prototype.strip = function strip () {
25172 while (this.length > 1 && this.words[this.length - 1] === 0) {
25173 this.length--;
ab78acc6 25174 }
8b095871
IC
25175 return this._normSign();
25176 };
ebd8d4e8 25177
8b095871
IC
25178 BN.prototype._normSign = function _normSign () {
25179 // -0 = 0
25180 if (this.length === 1 && this.words[0] === 0) {
25181 this.negative = 0;
ab78acc6 25182 }
8b095871
IC
25183 return this;
25184 };
ebd8d4e8 25185
8b095871
IC
25186 BN.prototype.inspect = function inspect () {
25187 return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
25188 };
ebd8d4e8 25189
8b095871 25190 /*
ebd8d4e8 25191
8b095871
IC
25192 var zeros = [];
25193 var groupSizes = [];
25194 var groupBases = [];
ebd8d4e8 25195
8b095871
IC
25196 var s = '';
25197 var i = -1;
25198 while (++i < BN.wordSize) {
25199 zeros[i] = s;
25200 s += '0';
25201 }
25202 groupSizes[0] = 0;
25203 groupSizes[1] = 0;
25204 groupBases[0] = 0;
25205 groupBases[1] = 0;
25206 var base = 2 - 1;
25207 while (++base < 36 + 1) {
25208 var groupSize = 0;
25209 var groupBase = 1;
25210 while (groupBase < (1 << BN.wordSize) / base) {
25211 groupBase *= base;
25212 groupSize += 1;
25213 }
25214 groupSizes[base] = groupSize;
25215 groupBases[base] = groupBase;
ebd8d4e8
IC
25216 }
25217
8b095871 25218 */
ebd8d4e8 25219
8b095871
IC
25220 var zeros = [
25221 '',
25222 '0',
25223 '00',
25224 '000',
25225 '0000',
25226 '00000',
25227 '000000',
25228 '0000000',
25229 '00000000',
25230 '000000000',
25231 '0000000000',
25232 '00000000000',
25233 '000000000000',
25234 '0000000000000',
25235 '00000000000000',
25236 '000000000000000',
25237 '0000000000000000',
25238 '00000000000000000',
25239 '000000000000000000',
25240 '0000000000000000000',
25241 '00000000000000000000',
25242 '000000000000000000000',
25243 '0000000000000000000000',
25244 '00000000000000000000000',
25245 '000000000000000000000000',
25246 '0000000000000000000000000'
25247 ];
25248
25249 var groupSizes = [
25250 0, 0,
25251 25, 16, 12, 11, 10, 9, 8,
25252 8, 7, 7, 7, 7, 6, 6,
25253 6, 6, 6, 6, 6, 5, 5,
25254 5, 5, 5, 5, 5, 5, 5,
25255 5, 5, 5, 5, 5, 5, 5
25256 ];
25257
25258 var groupBases = [
25259 0, 0,
25260 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
25261 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
25262 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
25263 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
25264 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
25265 ];
25266
25267 BN.prototype.toString = function toString (base, padding) {
25268 base = base || 10;
25269 padding = padding | 0 || 1;
25270
25271 var out;
25272 if (base === 16 || base === 'hex') {
25273 out = '';
25274 var off = 0;
25275 var carry = 0;
25276 for (var i = 0; i < this.length; i++) {
25277 var w = this.words[i];
25278 var word = (((w << off) | carry) & 0xffffff).toString(16);
25279 carry = (w >>> (24 - off)) & 0xffffff;
25280 if (carry !== 0 || i !== this.length - 1) {
25281 out = zeros[6 - word.length] + word + out;
25282 } else {
25283 out = word + out;
25284 }
25285 off += 2;
25286 if (off >= 26) {
25287 off -= 26;
25288 i--;
25289 }
25290 }
25291 if (carry !== 0) {
25292 out = carry.toString(16) + out;
25293 }
25294 while (out.length % padding !== 0) {
25295 out = '0' + out;
25296 }
25297 if (this.negative !== 0) {
25298 out = '-' + out;
25299 }
25300 return out;
25301 }
25302
25303 if (base === (base | 0) && base >= 2 && base <= 36) {
25304 // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
25305 var groupSize = groupSizes[base];
25306 // var groupBase = Math.pow(base, groupSize);
25307 var groupBase = groupBases[base];
25308 out = '';
25309 var c = this.clone();
25310 c.negative = 0;
25311 while (!c.isZero()) {
25312 var r = c.modn(groupBase).toString(base);
25313 c = c.idivn(groupBase);
25314
25315 if (!c.isZero()) {
25316 out = zeros[groupSize - r.length] + r + out;
25317 } else {
25318 out = r + out;
25319 }
25320 }
25321 if (this.isZero()) {
25322 out = '0' + out;
25323 }
25324 while (out.length % padding !== 0) {
25325 out = '0' + out;
25326 }
25327 if (this.negative !== 0) {
25328 out = '-' + out;
25329 }
25330 return out;
25331 }
25332
25333 assert(false, 'Base should be between 2 and 36');
25334 };
25335
25336 BN.prototype.toNumber = function toNumber () {
25337 var ret = this.words[0];
25338 if (this.length === 2) {
25339 ret += this.words[1] * 0x4000000;
25340 } else if (this.length === 3 && this.words[2] === 0x01) {
25341 // NOTE: at this stage it is known that the top bit is set
25342 ret += 0x10000000000000 + (this.words[1] * 0x4000000);
25343 } else if (this.length > 2) {
25344 assert(false, 'Number can only safely store up to 53 bits');
25345 }
25346 return (this.negative !== 0) ? -ret : ret;
25347 };
25348
25349 BN.prototype.toJSON = function toJSON () {
25350 return this.toString(16);
25351 };
25352
25353 BN.prototype.toBuffer = function toBuffer (endian, length) {
25354 assert(typeof Buffer !== 'undefined');
25355 return this.toArrayLike(Buffer, endian, length);
25356 };
ebd8d4e8 25357
8b095871
IC
25358 BN.prototype.toArray = function toArray (endian, length) {
25359 return this.toArrayLike(Array, endian, length);
25360 };
ebd8d4e8 25361
8b095871
IC
25362 BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
25363 var byteLength = this.byteLength();
25364 var reqLength = length || Math.max(1, byteLength);
25365 assert(byteLength <= reqLength, 'byte array longer than desired length');
25366 assert(reqLength > 0, 'Requested array length <= 0');
25367
25368 this.strip();
25369 var littleEndian = endian === 'le';
25370 var res = new ArrayType(reqLength);
25371
25372 var b, i;
25373 var q = this.clone();
25374 if (!littleEndian) {
25375 // Assume big-endian
25376 for (i = 0; i < reqLength - byteLength; i++) {
25377 res[i] = 0;
25378 }
ebd8d4e8 25379
8b095871
IC
25380 for (i = 0; !q.isZero(); i++) {
25381 b = q.andln(0xff);
25382 q.iushrn(8);
ebd8d4e8 25383
8b095871
IC
25384 res[reqLength - i - 1] = b;
25385 }
25386 } else {
25387 for (i = 0; !q.isZero(); i++) {
25388 b = q.andln(0xff);
25389 q.iushrn(8);
ebd8d4e8 25390
8b095871
IC
25391 res[i] = b;
25392 }
25393
25394 for (; i < reqLength; i++) {
25395 res[i] = 0;
25396 }
ab78acc6 25397 }
ebd8d4e8 25398
8b095871
IC
25399 return res;
25400 };
ebd8d4e8 25401
8b095871
IC
25402 if (Math.clz32) {
25403 BN.prototype._countBits = function _countBits (w) {
25404 return 32 - Math.clz32(w);
25405 };
25406 } else {
25407 BN.prototype._countBits = function _countBits (w) {
25408 var t = w;
25409 var r = 0;
25410 if (t >= 0x1000) {
25411 r += 13;
25412 t >>>= 13;
25413 }
25414 if (t >= 0x40) {
25415 r += 7;
25416 t >>>= 7;
25417 }
25418 if (t >= 0x8) {
25419 r += 4;
25420 t >>>= 4;
25421 }
25422 if (t >= 0x02) {
25423 r += 2;
25424 t >>>= 2;
25425 }
25426 return r + t;
25427 };
ebd8d4e8
IC
25428 }
25429
8b095871
IC
25430 BN.prototype._zeroBits = function _zeroBits (w) {
25431 // Short-cut
25432 if (w === 0) return 26;
ebd8d4e8 25433
8b095871
IC
25434 var t = w;
25435 var r = 0;
25436 if ((t & 0x1fff) === 0) {
25437 r += 13;
25438 t >>>= 13;
25439 }
25440 if ((t & 0x7f) === 0) {
25441 r += 7;
25442 t >>>= 7;
25443 }
25444 if ((t & 0xf) === 0) {
25445 r += 4;
25446 t >>>= 4;
25447 }
25448 if ((t & 0x3) === 0) {
25449 r += 2;
25450 t >>>= 2;
25451 }
25452 if ((t & 0x1) === 0) {
25453 r++;
25454 }
25455 return r;
25456 };
ebd8d4e8 25457
8b095871
IC
25458 // Return number of used bits in a BN
25459 BN.prototype.bitLength = function bitLength () {
25460 var w = this.words[this.length - 1];
25461 var hi = this._countBits(w);
25462 return (this.length - 1) * 26 + hi;
25463 };
ebd8d4e8 25464
8b095871
IC
25465 function toBitArray (num) {
25466 var w = new Array(num.bitLength());
ebd8d4e8 25467
8b095871
IC
25468 for (var bit = 0; bit < w.length; bit++) {
25469 var off = (bit / 26) | 0;
25470 var wbit = bit % 26;
ebd8d4e8 25471
8b095871 25472 w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
ab78acc6 25473 }
8b095871
IC
25474
25475 return w;
ab78acc6 25476 }
ebd8d4e8 25477
8b095871
IC
25478 // Number of trailing zero bits
25479 BN.prototype.zeroBits = function zeroBits () {
25480 if (this.isZero()) return 0;
25481
25482 var r = 0;
25483 for (var i = 0; i < this.length; i++) {
25484 var b = this._zeroBits(this.words[i]);
25485 r += b;
25486 if (b !== 26) break;
ab78acc6 25487 }
8b095871
IC
25488 return r;
25489 };
25490
25491 BN.prototype.byteLength = function byteLength () {
25492 return Math.ceil(this.bitLength() / 8);
25493 };
25494
25495 BN.prototype.toTwos = function toTwos (width) {
25496 if (this.negative !== 0) {
25497 return this.abs().inotn(width).iaddn(1);
ab78acc6 25498 }
8b095871
IC
25499 return this.clone();
25500 };
ebd8d4e8 25501
8b095871
IC
25502 BN.prototype.fromTwos = function fromTwos (width) {
25503 if (this.testn(width - 1)) {
25504 return this.notn(width).iaddn(1).ineg();
25505 }
25506 return this.clone();
25507 };
ebd8d4e8 25508
8b095871
IC
25509 BN.prototype.isNeg = function isNeg () {
25510 return this.negative !== 0;
25511 };
ebd8d4e8 25512
8b095871
IC
25513 // Return negative clone of `this`
25514 BN.prototype.neg = function neg () {
25515 return this.clone().ineg();
25516 };
ebd8d4e8 25517
8b095871
IC
25518 BN.prototype.ineg = function ineg () {
25519 if (!this.isZero()) {
25520 this.negative ^= 1;
ab78acc6 25521 }
ebd8d4e8 25522
8b095871
IC
25523 return this;
25524 };
ebd8d4e8 25525
8b095871
IC
25526 // Or `num` with `this` in-place
25527 BN.prototype.iuor = function iuor (num) {
25528 while (this.length < num.length) {
25529 this.words[this.length++] = 0;
25530 }
ebd8d4e8 25531
8b095871
IC
25532 for (var i = 0; i < num.length; i++) {
25533 this.words[i] = this.words[i] | num.words[i];
ebd8d4e8 25534 }
ebd8d4e8 25535
8b095871
IC
25536 return this.strip();
25537 };
ebd8d4e8 25538
8b095871
IC
25539 BN.prototype.ior = function ior (num) {
25540 assert((this.negative | num.negative) === 0);
25541 return this.iuor(num);
ab78acc6 25542 };
ebd8d4e8 25543
8b095871
IC
25544 // Or `num` with `this`
25545 BN.prototype.or = function or (num) {
25546 if (this.length > num.length) return this.clone().ior(num);
25547 return num.clone().ior(this);
25548 };
ebd8d4e8 25549
8b095871
IC
25550 BN.prototype.uor = function uor (num) {
25551 if (this.length > num.length) return this.clone().iuor(num);
25552 return num.clone().iuor(this);
25553 };
ebd8d4e8 25554
8b095871
IC
25555 // And `num` with `this` in-place
25556 BN.prototype.iuand = function iuand (num) {
25557 // b = min-length(num, this)
25558 var b;
25559 if (this.length > num.length) {
25560 b = num;
25561 } else {
25562 b = this;
25563 }
25564
25565 for (var i = 0; i < b.length; i++) {
25566 this.words[i] = this.words[i] & num.words[i];
25567 }
ebd8d4e8 25568
8b095871 25569 this.length = b.length;
ebd8d4e8 25570
8b095871
IC
25571 return this.strip();
25572 };
ebd8d4e8 25573
8b095871
IC
25574 BN.prototype.iand = function iand (num) {
25575 assert((this.negative | num.negative) === 0);
25576 return this.iuand(num);
25577 };
ebd8d4e8 25578
8b095871
IC
25579 // And `num` with `this`
25580 BN.prototype.and = function and (num) {
25581 if (this.length > num.length) return this.clone().iand(num);
25582 return num.clone().iand(this);
25583 };
ebd8d4e8 25584
8b095871
IC
25585 BN.prototype.uand = function uand (num) {
25586 if (this.length > num.length) return this.clone().iuand(num);
25587 return num.clone().iuand(this);
25588 };
ebd8d4e8 25589
8b095871
IC
25590 // Xor `num` with `this` in-place
25591 BN.prototype.iuxor = function iuxor (num) {
25592 // a.length > b.length
25593 var a;
25594 var b;
25595 if (this.length > num.length) {
25596 a = this;
25597 b = num;
25598 } else {
25599 a = num;
25600 b = this;
25601 }
ebd8d4e8 25602
8b095871
IC
25603 for (var i = 0; i < b.length; i++) {
25604 this.words[i] = a.words[i] ^ b.words[i];
25605 }
ebd8d4e8 25606
8b095871
IC
25607 if (this !== a) {
25608 for (; i < a.length; i++) {
25609 this.words[i] = a.words[i];
25610 }
25611 }
ebd8d4e8 25612
8b095871 25613 this.length = a.length;
ebd8d4e8 25614
8b095871
IC
25615 return this.strip();
25616 };
ebd8d4e8 25617
8b095871
IC
25618 BN.prototype.ixor = function ixor (num) {
25619 assert((this.negative | num.negative) === 0);
25620 return this.iuxor(num);
25621 };
ebd8d4e8 25622
8b095871
IC
25623 // Xor `num` with `this`
25624 BN.prototype.xor = function xor (num) {
25625 if (this.length > num.length) return this.clone().ixor(num);
25626 return num.clone().ixor(this);
25627 };
ebd8d4e8 25628
8b095871
IC
25629 BN.prototype.uxor = function uxor (num) {
25630 if (this.length > num.length) return this.clone().iuxor(num);
25631 return num.clone().iuxor(this);
25632 };
ebd8d4e8 25633
8b095871
IC
25634 // Not ``this`` with ``width`` bitwidth
25635 BN.prototype.inotn = function inotn (width) {
25636 assert(typeof width === 'number' && width >= 0);
ebd8d4e8 25637
8b095871
IC
25638 var bytesNeeded = Math.ceil(width / 26) | 0;
25639 var bitsLeft = width % 26;
ebd8d4e8 25640
8b095871
IC
25641 // Extend the buffer with leading zeroes
25642 this._expand(bytesNeeded);
25643
25644 if (bitsLeft > 0) {
25645 bytesNeeded--;
ab78acc6 25646 }
8b095871
IC
25647
25648 // Handle complete words
25649 for (var i = 0; i < bytesNeeded; i++) {
25650 this.words[i] = ~this.words[i] & 0x3ffffff;
ab78acc6 25651 }
8b095871
IC
25652
25653 // Handle the residue
25654 if (bitsLeft > 0) {
25655 this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
ab78acc6 25656 }
ebd8d4e8 25657
8b095871
IC
25658 // And remove leading zeroes
25659 return this.strip();
25660 };
ebd8d4e8 25661
8b095871
IC
25662 BN.prototype.notn = function notn (width) {
25663 return this.clone().inotn(width);
25664 };
ebd8d4e8 25665
8b095871
IC
25666 // Set `bit` of `this`
25667 BN.prototype.setn = function setn (bit, val) {
25668 assert(typeof bit === 'number' && bit >= 0);
ebd8d4e8 25669
8b095871
IC
25670 var off = (bit / 26) | 0;
25671 var wbit = bit % 26;
ebd8d4e8 25672
8b095871 25673 this._expand(off + 1);
ebd8d4e8 25674
8b095871
IC
25675 if (val) {
25676 this.words[off] = this.words[off] | (1 << wbit);
25677 } else {
25678 this.words[off] = this.words[off] & ~(1 << wbit);
25679 }
ebd8d4e8 25680
8b095871
IC
25681 return this.strip();
25682 };
ebd8d4e8 25683
8b095871
IC
25684 // Add `num` to `this` in-place
25685 BN.prototype.iadd = function iadd (num) {
25686 var r;
25687
25688 // negative + positive
25689 if (this.negative !== 0 && num.negative === 0) {
25690 this.negative = 0;
25691 r = this.isub(num);
25692 this.negative ^= 1;
25693 return this._normSign();
25694
25695 // positive + negative
25696 } else if (this.negative === 0 && num.negative !== 0) {
25697 num.negative = 0;
25698 r = this.isub(num);
25699 num.negative = 1;
25700 return r._normSign();
25701 }
25702
25703 // a.length > b.length
25704 var a, b;
25705 if (this.length > num.length) {
25706 a = this;
25707 b = num;
ab78acc6 25708 } else {
8b095871
IC
25709 a = num;
25710 b = this;
25711 }
25712
25713 var carry = 0;
25714 for (var i = 0; i < b.length; i++) {
25715 r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
25716 this.words[i] = r & 0x3ffffff;
25717 carry = r >>> 26;
25718 }
25719 for (; carry !== 0 && i < a.length; i++) {
25720 r = (a.words[i] | 0) + carry;
25721 this.words[i] = r & 0x3ffffff;
25722 carry = r >>> 26;
25723 }
25724
25725 this.length = a.length;
25726 if (carry !== 0) {
25727 this.words[this.length] = carry;
25728 this.length++;
25729 // Copy the rest of the words
25730 } else if (a !== this) {
25731 for (; i < a.length; i++) {
25732 this.words[i] = a.words[i];
25733 }
ab78acc6 25734 }
ebd8d4e8 25735
8b095871
IC
25736 return this;
25737 };
ebd8d4e8 25738
8b095871
IC
25739 // Add `num` to `this`
25740 BN.prototype.add = function add (num) {
25741 var res;
25742 if (num.negative !== 0 && this.negative === 0) {
25743 num.negative = 0;
25744 res = this.sub(num);
25745 num.negative ^= 1;
25746 return res;
25747 } else if (num.negative === 0 && this.negative !== 0) {
25748 this.negative = 0;
25749 res = num.sub(this);
25750 this.negative = 1;
25751 return res;
25752 }
ebd8d4e8 25753
8b095871 25754 if (this.length > num.length) return this.clone().iadd(num);
ebd8d4e8 25755
8b095871
IC
25756 return num.clone().iadd(this);
25757 };
ebd8d4e8 25758
8b095871
IC
25759 // Subtract `num` from `this` in-place
25760 BN.prototype.isub = function isub (num) {
25761 // this - (-num) = this + num
25762 if (num.negative !== 0) {
25763 num.negative = 0;
25764 var r = this.iadd(num);
25765 num.negative = 1;
25766 return r._normSign();
25767
25768 // -this - num = -(this + num)
25769 } else if (this.negative !== 0) {
25770 this.negative = 0;
25771 this.iadd(num);
25772 this.negative = 1;
25773 return this._normSign();
25774 }
25775
25776 // At this point both numbers are positive
25777 var cmp = this.cmp(num);
25778
25779 // Optimization - zeroify
25780 if (cmp === 0) {
25781 this.negative = 0;
25782 this.length = 1;
25783 this.words[0] = 0;
25784 return this;
25785 }
ebd8d4e8 25786
8b095871
IC
25787 // a > b
25788 var a, b;
25789 if (cmp > 0) {
25790 a = this;
25791 b = num;
25792 } else {
25793 a = num;
25794 b = this;
25795 }
ebd8d4e8 25796
8b095871
IC
25797 var carry = 0;
25798 for (var i = 0; i < b.length; i++) {
25799 r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
25800 carry = r >> 26;
25801 this.words[i] = r & 0x3ffffff;
25802 }
25803 for (; carry !== 0 && i < a.length; i++) {
25804 r = (a.words[i] | 0) + carry;
25805 carry = r >> 26;
25806 this.words[i] = r & 0x3ffffff;
25807 }
ebd8d4e8 25808
8b095871
IC
25809 // Copy rest of the words
25810 if (carry === 0 && i < a.length && a !== this) {
25811 for (; i < a.length; i++) {
25812 this.words[i] = a.words[i];
25813 }
25814 }
ebd8d4e8 25815
8b095871 25816 this.length = Math.max(this.length, i);
ebd8d4e8 25817
8b095871
IC
25818 if (a !== this) {
25819 this.negative = 1;
ab78acc6 25820 }
ebd8d4e8 25821
8b095871
IC
25822 return this.strip();
25823 };
ebd8d4e8 25824
8b095871
IC
25825 // Subtract `num` from `this`
25826 BN.prototype.sub = function sub (num) {
25827 return this.clone().isub(num);
25828 };
25829
25830 function smallMulTo (self, num, out) {
25831 out.negative = num.negative ^ self.negative;
25832 var len = (self.length + num.length) | 0;
25833 out.length = len;
25834 len = (len - 1) | 0;
25835
25836 // Peel one iteration (compiler can't do it, because of code complexity)
25837 var a = self.words[0] | 0;
25838 var b = num.words[0] | 0;
25839 var r = a * b;
25840
25841 var lo = r & 0x3ffffff;
25842 var carry = (r / 0x4000000) | 0;
25843 out.words[0] = lo;
25844
25845 for (var k = 1; k < len; k++) {
25846 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
25847 // note that ncarry could be >= 0x3ffffff
25848 var ncarry = carry >>> 26;
25849 var rword = carry & 0x3ffffff;
25850 var maxJ = Math.min(k, num.length - 1);
25851 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
25852 var i = (k - j) | 0;
25853 a = self.words[i] | 0;
25854 b = num.words[j] | 0;
25855 r = a * b + rword;
25856 ncarry += (r / 0x4000000) | 0;
25857 rword = r & 0x3ffffff;
25858 }
25859 out.words[k] = rword | 0;
25860 carry = ncarry | 0;
25861 }
25862 if (carry !== 0) {
25863 out.words[k] = carry | 0;
ab78acc6 25864 } else {
8b095871
IC
25865 out.length--;
25866 }
25867
25868 return out.strip();
25869 }
25870
25871 // TODO(indutny): it may be reasonable to omit it for users who don't need
25872 // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
25873 // multiplication (like elliptic secp256k1).
25874 var comb10MulTo = function comb10MulTo (self, num, out) {
25875 var a = self.words;
25876 var b = num.words;
25877 var o = out.words;
25878 var c = 0;
25879 var lo;
25880 var mid;
25881 var hi;
25882 var a0 = a[0] | 0;
25883 var al0 = a0 & 0x1fff;
25884 var ah0 = a0 >>> 13;
25885 var a1 = a[1] | 0;
25886 var al1 = a1 & 0x1fff;
25887 var ah1 = a1 >>> 13;
25888 var a2 = a[2] | 0;
25889 var al2 = a2 & 0x1fff;
25890 var ah2 = a2 >>> 13;
25891 var a3 = a[3] | 0;
25892 var al3 = a3 & 0x1fff;
25893 var ah3 = a3 >>> 13;
25894 var a4 = a[4] | 0;
25895 var al4 = a4 & 0x1fff;
25896 var ah4 = a4 >>> 13;
25897 var a5 = a[5] | 0;
25898 var al5 = a5 & 0x1fff;
25899 var ah5 = a5 >>> 13;
25900 var a6 = a[6] | 0;
25901 var al6 = a6 & 0x1fff;
25902 var ah6 = a6 >>> 13;
25903 var a7 = a[7] | 0;
25904 var al7 = a7 & 0x1fff;
25905 var ah7 = a7 >>> 13;
25906 var a8 = a[8] | 0;
25907 var al8 = a8 & 0x1fff;
25908 var ah8 = a8 >>> 13;
25909 var a9 = a[9] | 0;
25910 var al9 = a9 & 0x1fff;
25911 var ah9 = a9 >>> 13;
25912 var b0 = b[0] | 0;
25913 var bl0 = b0 & 0x1fff;
25914 var bh0 = b0 >>> 13;
25915 var b1 = b[1] | 0;
25916 var bl1 = b1 & 0x1fff;
25917 var bh1 = b1 >>> 13;
25918 var b2 = b[2] | 0;
25919 var bl2 = b2 & 0x1fff;
25920 var bh2 = b2 >>> 13;
25921 var b3 = b[3] | 0;
25922 var bl3 = b3 & 0x1fff;
25923 var bh3 = b3 >>> 13;
25924 var b4 = b[4] | 0;
25925 var bl4 = b4 & 0x1fff;
25926 var bh4 = b4 >>> 13;
25927 var b5 = b[5] | 0;
25928 var bl5 = b5 & 0x1fff;
25929 var bh5 = b5 >>> 13;
25930 var b6 = b[6] | 0;
25931 var bl6 = b6 & 0x1fff;
25932 var bh6 = b6 >>> 13;
25933 var b7 = b[7] | 0;
25934 var bl7 = b7 & 0x1fff;
25935 var bh7 = b7 >>> 13;
25936 var b8 = b[8] | 0;
25937 var bl8 = b8 & 0x1fff;
25938 var bh8 = b8 >>> 13;
25939 var b9 = b[9] | 0;
25940 var bl9 = b9 & 0x1fff;
25941 var bh9 = b9 >>> 13;
25942
25943 out.negative = self.negative ^ num.negative;
25944 out.length = 19;
25945 /* k = 0 */
25946 lo = Math.imul(al0, bl0);
25947 mid = Math.imul(al0, bh0);
25948 mid = (mid + Math.imul(ah0, bl0)) | 0;
25949 hi = Math.imul(ah0, bh0);
25950 var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25951 c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
25952 w0 &= 0x3ffffff;
25953 /* k = 1 */
25954 lo = Math.imul(al1, bl0);
25955 mid = Math.imul(al1, bh0);
25956 mid = (mid + Math.imul(ah1, bl0)) | 0;
25957 hi = Math.imul(ah1, bh0);
25958 lo = (lo + Math.imul(al0, bl1)) | 0;
25959 mid = (mid + Math.imul(al0, bh1)) | 0;
25960 mid = (mid + Math.imul(ah0, bl1)) | 0;
25961 hi = (hi + Math.imul(ah0, bh1)) | 0;
25962 var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25963 c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
25964 w1 &= 0x3ffffff;
25965 /* k = 2 */
25966 lo = Math.imul(al2, bl0);
25967 mid = Math.imul(al2, bh0);
25968 mid = (mid + Math.imul(ah2, bl0)) | 0;
25969 hi = Math.imul(ah2, bh0);
25970 lo = (lo + Math.imul(al1, bl1)) | 0;
25971 mid = (mid + Math.imul(al1, bh1)) | 0;
25972 mid = (mid + Math.imul(ah1, bl1)) | 0;
25973 hi = (hi + Math.imul(ah1, bh1)) | 0;
25974 lo = (lo + Math.imul(al0, bl2)) | 0;
25975 mid = (mid + Math.imul(al0, bh2)) | 0;
25976 mid = (mid + Math.imul(ah0, bl2)) | 0;
25977 hi = (hi + Math.imul(ah0, bh2)) | 0;
25978 var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25979 c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
25980 w2 &= 0x3ffffff;
25981 /* k = 3 */
25982 lo = Math.imul(al3, bl0);
25983 mid = Math.imul(al3, bh0);
25984 mid = (mid + Math.imul(ah3, bl0)) | 0;
25985 hi = Math.imul(ah3, bh0);
25986 lo = (lo + Math.imul(al2, bl1)) | 0;
25987 mid = (mid + Math.imul(al2, bh1)) | 0;
25988 mid = (mid + Math.imul(ah2, bl1)) | 0;
25989 hi = (hi + Math.imul(ah2, bh1)) | 0;
25990 lo = (lo + Math.imul(al1, bl2)) | 0;
25991 mid = (mid + Math.imul(al1, bh2)) | 0;
25992 mid = (mid + Math.imul(ah1, bl2)) | 0;
25993 hi = (hi + Math.imul(ah1, bh2)) | 0;
25994 lo = (lo + Math.imul(al0, bl3)) | 0;
25995 mid = (mid + Math.imul(al0, bh3)) | 0;
25996 mid = (mid + Math.imul(ah0, bl3)) | 0;
25997 hi = (hi + Math.imul(ah0, bh3)) | 0;
25998 var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25999 c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
26000 w3 &= 0x3ffffff;
26001 /* k = 4 */
26002 lo = Math.imul(al4, bl0);
26003 mid = Math.imul(al4, bh0);
26004 mid = (mid + Math.imul(ah4, bl0)) | 0;
26005 hi = Math.imul(ah4, bh0);
26006 lo = (lo + Math.imul(al3, bl1)) | 0;
26007 mid = (mid + Math.imul(al3, bh1)) | 0;
26008 mid = (mid + Math.imul(ah3, bl1)) | 0;
26009 hi = (hi + Math.imul(ah3, bh1)) | 0;
26010 lo = (lo + Math.imul(al2, bl2)) | 0;
26011 mid = (mid + Math.imul(al2, bh2)) | 0;
26012 mid = (mid + Math.imul(ah2, bl2)) | 0;
26013 hi = (hi + Math.imul(ah2, bh2)) | 0;
26014 lo = (lo + Math.imul(al1, bl3)) | 0;
26015 mid = (mid + Math.imul(al1, bh3)) | 0;
26016 mid = (mid + Math.imul(ah1, bl3)) | 0;
26017 hi = (hi + Math.imul(ah1, bh3)) | 0;
26018 lo = (lo + Math.imul(al0, bl4)) | 0;
26019 mid = (mid + Math.imul(al0, bh4)) | 0;
26020 mid = (mid + Math.imul(ah0, bl4)) | 0;
26021 hi = (hi + Math.imul(ah0, bh4)) | 0;
26022 var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26023 c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
26024 w4 &= 0x3ffffff;
26025 /* k = 5 */
26026 lo = Math.imul(al5, bl0);
26027 mid = Math.imul(al5, bh0);
26028 mid = (mid + Math.imul(ah5, bl0)) | 0;
26029 hi = Math.imul(ah5, bh0);
26030 lo = (lo + Math.imul(al4, bl1)) | 0;
26031 mid = (mid + Math.imul(al4, bh1)) | 0;
26032 mid = (mid + Math.imul(ah4, bl1)) | 0;
26033 hi = (hi + Math.imul(ah4, bh1)) | 0;
26034 lo = (lo + Math.imul(al3, bl2)) | 0;
26035 mid = (mid + Math.imul(al3, bh2)) | 0;
26036 mid = (mid + Math.imul(ah3, bl2)) | 0;
26037 hi = (hi + Math.imul(ah3, bh2)) | 0;
26038 lo = (lo + Math.imul(al2, bl3)) | 0;
26039 mid = (mid + Math.imul(al2, bh3)) | 0;
26040 mid = (mid + Math.imul(ah2, bl3)) | 0;
26041 hi = (hi + Math.imul(ah2, bh3)) | 0;
26042 lo = (lo + Math.imul(al1, bl4)) | 0;
26043 mid = (mid + Math.imul(al1, bh4)) | 0;
26044 mid = (mid + Math.imul(ah1, bl4)) | 0;
26045 hi = (hi + Math.imul(ah1, bh4)) | 0;
26046 lo = (lo + Math.imul(al0, bl5)) | 0;
26047 mid = (mid + Math.imul(al0, bh5)) | 0;
26048 mid = (mid + Math.imul(ah0, bl5)) | 0;
26049 hi = (hi + Math.imul(ah0, bh5)) | 0;
26050 var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26051 c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
26052 w5 &= 0x3ffffff;
26053 /* k = 6 */
26054 lo = Math.imul(al6, bl0);
26055 mid = Math.imul(al6, bh0);
26056 mid = (mid + Math.imul(ah6, bl0)) | 0;
26057 hi = Math.imul(ah6, bh0);
26058 lo = (lo + Math.imul(al5, bl1)) | 0;
26059 mid = (mid + Math.imul(al5, bh1)) | 0;
26060 mid = (mid + Math.imul(ah5, bl1)) | 0;
26061 hi = (hi + Math.imul(ah5, bh1)) | 0;
26062 lo = (lo + Math.imul(al4, bl2)) | 0;
26063 mid = (mid + Math.imul(al4, bh2)) | 0;
26064 mid = (mid + Math.imul(ah4, bl2)) | 0;
26065 hi = (hi + Math.imul(ah4, bh2)) | 0;
26066 lo = (lo + Math.imul(al3, bl3)) | 0;
26067 mid = (mid + Math.imul(al3, bh3)) | 0;
26068 mid = (mid + Math.imul(ah3, bl3)) | 0;
26069 hi = (hi + Math.imul(ah3, bh3)) | 0;
26070 lo = (lo + Math.imul(al2, bl4)) | 0;
26071 mid = (mid + Math.imul(al2, bh4)) | 0;
26072 mid = (mid + Math.imul(ah2, bl4)) | 0;
26073 hi = (hi + Math.imul(ah2, bh4)) | 0;
26074 lo = (lo + Math.imul(al1, bl5)) | 0;
26075 mid = (mid + Math.imul(al1, bh5)) | 0;
26076 mid = (mid + Math.imul(ah1, bl5)) | 0;
26077 hi = (hi + Math.imul(ah1, bh5)) | 0;
26078 lo = (lo + Math.imul(al0, bl6)) | 0;
26079 mid = (mid + Math.imul(al0, bh6)) | 0;
26080 mid = (mid + Math.imul(ah0, bl6)) | 0;
26081 hi = (hi + Math.imul(ah0, bh6)) | 0;
26082 var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26083 c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
26084 w6 &= 0x3ffffff;
26085 /* k = 7 */
26086 lo = Math.imul(al7, bl0);
26087 mid = Math.imul(al7, bh0);
26088 mid = (mid + Math.imul(ah7, bl0)) | 0;
26089 hi = Math.imul(ah7, bh0);
26090 lo = (lo + Math.imul(al6, bl1)) | 0;
26091 mid = (mid + Math.imul(al6, bh1)) | 0;
26092 mid = (mid + Math.imul(ah6, bl1)) | 0;
26093 hi = (hi + Math.imul(ah6, bh1)) | 0;
26094 lo = (lo + Math.imul(al5, bl2)) | 0;
26095 mid = (mid + Math.imul(al5, bh2)) | 0;
26096 mid = (mid + Math.imul(ah5, bl2)) | 0;
26097 hi = (hi + Math.imul(ah5, bh2)) | 0;
26098 lo = (lo + Math.imul(al4, bl3)) | 0;
26099 mid = (mid + Math.imul(al4, bh3)) | 0;
26100 mid = (mid + Math.imul(ah4, bl3)) | 0;
26101 hi = (hi + Math.imul(ah4, bh3)) | 0;
26102 lo = (lo + Math.imul(al3, bl4)) | 0;
26103 mid = (mid + Math.imul(al3, bh4)) | 0;
26104 mid = (mid + Math.imul(ah3, bl4)) | 0;
26105 hi = (hi + Math.imul(ah3, bh4)) | 0;
26106 lo = (lo + Math.imul(al2, bl5)) | 0;
26107 mid = (mid + Math.imul(al2, bh5)) | 0;
26108 mid = (mid + Math.imul(ah2, bl5)) | 0;
26109 hi = (hi + Math.imul(ah2, bh5)) | 0;
26110 lo = (lo + Math.imul(al1, bl6)) | 0;
26111 mid = (mid + Math.imul(al1, bh6)) | 0;
26112 mid = (mid + Math.imul(ah1, bl6)) | 0;
26113 hi = (hi + Math.imul(ah1, bh6)) | 0;
26114 lo = (lo + Math.imul(al0, bl7)) | 0;
26115 mid = (mid + Math.imul(al0, bh7)) | 0;
26116 mid = (mid + Math.imul(ah0, bl7)) | 0;
26117 hi = (hi + Math.imul(ah0, bh7)) | 0;
26118 var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26119 c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
26120 w7 &= 0x3ffffff;
26121 /* k = 8 */
26122 lo = Math.imul(al8, bl0);
26123 mid = Math.imul(al8, bh0);
26124 mid = (mid + Math.imul(ah8, bl0)) | 0;
26125 hi = Math.imul(ah8, bh0);
26126 lo = (lo + Math.imul(al7, bl1)) | 0;
26127 mid = (mid + Math.imul(al7, bh1)) | 0;
26128 mid = (mid + Math.imul(ah7, bl1)) | 0;
26129 hi = (hi + Math.imul(ah7, bh1)) | 0;
26130 lo = (lo + Math.imul(al6, bl2)) | 0;
26131 mid = (mid + Math.imul(al6, bh2)) | 0;
26132 mid = (mid + Math.imul(ah6, bl2)) | 0;
26133 hi = (hi + Math.imul(ah6, bh2)) | 0;
26134 lo = (lo + Math.imul(al5, bl3)) | 0;
26135 mid = (mid + Math.imul(al5, bh3)) | 0;
26136 mid = (mid + Math.imul(ah5, bl3)) | 0;
26137 hi = (hi + Math.imul(ah5, bh3)) | 0;
26138 lo = (lo + Math.imul(al4, bl4)) | 0;
26139 mid = (mid + Math.imul(al4, bh4)) | 0;
26140 mid = (mid + Math.imul(ah4, bl4)) | 0;
26141 hi = (hi + Math.imul(ah4, bh4)) | 0;
26142 lo = (lo + Math.imul(al3, bl5)) | 0;
26143 mid = (mid + Math.imul(al3, bh5)) | 0;
26144 mid = (mid + Math.imul(ah3, bl5)) | 0;
26145 hi = (hi + Math.imul(ah3, bh5)) | 0;
26146 lo = (lo + Math.imul(al2, bl6)) | 0;
26147 mid = (mid + Math.imul(al2, bh6)) | 0;
26148 mid = (mid + Math.imul(ah2, bl6)) | 0;
26149 hi = (hi + Math.imul(ah2, bh6)) | 0;
26150 lo = (lo + Math.imul(al1, bl7)) | 0;
26151 mid = (mid + Math.imul(al1, bh7)) | 0;
26152 mid = (mid + Math.imul(ah1, bl7)) | 0;
26153 hi = (hi + Math.imul(ah1, bh7)) | 0;
26154 lo = (lo + Math.imul(al0, bl8)) | 0;
26155 mid = (mid + Math.imul(al0, bh8)) | 0;
26156 mid = (mid + Math.imul(ah0, bl8)) | 0;
26157 hi = (hi + Math.imul(ah0, bh8)) | 0;
26158 var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26159 c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
26160 w8 &= 0x3ffffff;
26161 /* k = 9 */
26162 lo = Math.imul(al9, bl0);
26163 mid = Math.imul(al9, bh0);
26164 mid = (mid + Math.imul(ah9, bl0)) | 0;
26165 hi = Math.imul(ah9, bh0);
26166 lo = (lo + Math.imul(al8, bl1)) | 0;
26167 mid = (mid + Math.imul(al8, bh1)) | 0;
26168 mid = (mid + Math.imul(ah8, bl1)) | 0;
26169 hi = (hi + Math.imul(ah8, bh1)) | 0;
26170 lo = (lo + Math.imul(al7, bl2)) | 0;
26171 mid = (mid + Math.imul(al7, bh2)) | 0;
26172 mid = (mid + Math.imul(ah7, bl2)) | 0;
26173 hi = (hi + Math.imul(ah7, bh2)) | 0;
26174 lo = (lo + Math.imul(al6, bl3)) | 0;
26175 mid = (mid + Math.imul(al6, bh3)) | 0;
26176 mid = (mid + Math.imul(ah6, bl3)) | 0;
26177 hi = (hi + Math.imul(ah6, bh3)) | 0;
26178 lo = (lo + Math.imul(al5, bl4)) | 0;
26179 mid = (mid + Math.imul(al5, bh4)) | 0;
26180 mid = (mid + Math.imul(ah5, bl4)) | 0;
26181 hi = (hi + Math.imul(ah5, bh4)) | 0;
26182 lo = (lo + Math.imul(al4, bl5)) | 0;
26183 mid = (mid + Math.imul(al4, bh5)) | 0;
26184 mid = (mid + Math.imul(ah4, bl5)) | 0;
26185 hi = (hi + Math.imul(ah4, bh5)) | 0;
26186 lo = (lo + Math.imul(al3, bl6)) | 0;
26187 mid = (mid + Math.imul(al3, bh6)) | 0;
26188 mid = (mid + Math.imul(ah3, bl6)) | 0;
26189 hi = (hi + Math.imul(ah3, bh6)) | 0;
26190 lo = (lo + Math.imul(al2, bl7)) | 0;
26191 mid = (mid + Math.imul(al2, bh7)) | 0;
26192 mid = (mid + Math.imul(ah2, bl7)) | 0;
26193 hi = (hi + Math.imul(ah2, bh7)) | 0;
26194 lo = (lo + Math.imul(al1, bl8)) | 0;
26195 mid = (mid + Math.imul(al1, bh8)) | 0;
26196 mid = (mid + Math.imul(ah1, bl8)) | 0;
26197 hi = (hi + Math.imul(ah1, bh8)) | 0;
26198 lo = (lo + Math.imul(al0, bl9)) | 0;
26199 mid = (mid + Math.imul(al0, bh9)) | 0;
26200 mid = (mid + Math.imul(ah0, bl9)) | 0;
26201 hi = (hi + Math.imul(ah0, bh9)) | 0;
26202 var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26203 c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
26204 w9 &= 0x3ffffff;
26205 /* k = 10 */
26206 lo = Math.imul(al9, bl1);
26207 mid = Math.imul(al9, bh1);
26208 mid = (mid + Math.imul(ah9, bl1)) | 0;
26209 hi = Math.imul(ah9, bh1);
26210 lo = (lo + Math.imul(al8, bl2)) | 0;
26211 mid = (mid + Math.imul(al8, bh2)) | 0;
26212 mid = (mid + Math.imul(ah8, bl2)) | 0;
26213 hi = (hi + Math.imul(ah8, bh2)) | 0;
26214 lo = (lo + Math.imul(al7, bl3)) | 0;
26215 mid = (mid + Math.imul(al7, bh3)) | 0;
26216 mid = (mid + Math.imul(ah7, bl3)) | 0;
26217 hi = (hi + Math.imul(ah7, bh3)) | 0;
26218 lo = (lo + Math.imul(al6, bl4)) | 0;
26219 mid = (mid + Math.imul(al6, bh4)) | 0;
26220 mid = (mid + Math.imul(ah6, bl4)) | 0;
26221 hi = (hi + Math.imul(ah6, bh4)) | 0;
26222 lo = (lo + Math.imul(al5, bl5)) | 0;
26223 mid = (mid + Math.imul(al5, bh5)) | 0;
26224 mid = (mid + Math.imul(ah5, bl5)) | 0;
26225 hi = (hi + Math.imul(ah5, bh5)) | 0;
26226 lo = (lo + Math.imul(al4, bl6)) | 0;
26227 mid = (mid + Math.imul(al4, bh6)) | 0;
26228 mid = (mid + Math.imul(ah4, bl6)) | 0;
26229 hi = (hi + Math.imul(ah4, bh6)) | 0;
26230 lo = (lo + Math.imul(al3, bl7)) | 0;
26231 mid = (mid + Math.imul(al3, bh7)) | 0;
26232 mid = (mid + Math.imul(ah3, bl7)) | 0;
26233 hi = (hi + Math.imul(ah3, bh7)) | 0;
26234 lo = (lo + Math.imul(al2, bl8)) | 0;
26235 mid = (mid + Math.imul(al2, bh8)) | 0;
26236 mid = (mid + Math.imul(ah2, bl8)) | 0;
26237 hi = (hi + Math.imul(ah2, bh8)) | 0;
26238 lo = (lo + Math.imul(al1, bl9)) | 0;
26239 mid = (mid + Math.imul(al1, bh9)) | 0;
26240 mid = (mid + Math.imul(ah1, bl9)) | 0;
26241 hi = (hi + Math.imul(ah1, bh9)) | 0;
26242 var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26243 c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
26244 w10 &= 0x3ffffff;
26245 /* k = 11 */
26246 lo = Math.imul(al9, bl2);
26247 mid = Math.imul(al9, bh2);
26248 mid = (mid + Math.imul(ah9, bl2)) | 0;
26249 hi = Math.imul(ah9, bh2);
26250 lo = (lo + Math.imul(al8, bl3)) | 0;
26251 mid = (mid + Math.imul(al8, bh3)) | 0;
26252 mid = (mid + Math.imul(ah8, bl3)) | 0;
26253 hi = (hi + Math.imul(ah8, bh3)) | 0;
26254 lo = (lo + Math.imul(al7, bl4)) | 0;
26255 mid = (mid + Math.imul(al7, bh4)) | 0;
26256 mid = (mid + Math.imul(ah7, bl4)) | 0;
26257 hi = (hi + Math.imul(ah7, bh4)) | 0;
26258 lo = (lo + Math.imul(al6, bl5)) | 0;
26259 mid = (mid + Math.imul(al6, bh5)) | 0;
26260 mid = (mid + Math.imul(ah6, bl5)) | 0;
26261 hi = (hi + Math.imul(ah6, bh5)) | 0;
26262 lo = (lo + Math.imul(al5, bl6)) | 0;
26263 mid = (mid + Math.imul(al5, bh6)) | 0;
26264 mid = (mid + Math.imul(ah5, bl6)) | 0;
26265 hi = (hi + Math.imul(ah5, bh6)) | 0;
26266 lo = (lo + Math.imul(al4, bl7)) | 0;
26267 mid = (mid + Math.imul(al4, bh7)) | 0;
26268 mid = (mid + Math.imul(ah4, bl7)) | 0;
26269 hi = (hi + Math.imul(ah4, bh7)) | 0;
26270 lo = (lo + Math.imul(al3, bl8)) | 0;
26271 mid = (mid + Math.imul(al3, bh8)) | 0;
26272 mid = (mid + Math.imul(ah3, bl8)) | 0;
26273 hi = (hi + Math.imul(ah3, bh8)) | 0;
26274 lo = (lo + Math.imul(al2, bl9)) | 0;
26275 mid = (mid + Math.imul(al2, bh9)) | 0;
26276 mid = (mid + Math.imul(ah2, bl9)) | 0;
26277 hi = (hi + Math.imul(ah2, bh9)) | 0;
26278 var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26279 c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
26280 w11 &= 0x3ffffff;
26281 /* k = 12 */
26282 lo = Math.imul(al9, bl3);
26283 mid = Math.imul(al9, bh3);
26284 mid = (mid + Math.imul(ah9, bl3)) | 0;
26285 hi = Math.imul(ah9, bh3);
26286 lo = (lo + Math.imul(al8, bl4)) | 0;
26287 mid = (mid + Math.imul(al8, bh4)) | 0;
26288 mid = (mid + Math.imul(ah8, bl4)) | 0;
26289 hi = (hi + Math.imul(ah8, bh4)) | 0;
26290 lo = (lo + Math.imul(al7, bl5)) | 0;
26291 mid = (mid + Math.imul(al7, bh5)) | 0;
26292 mid = (mid + Math.imul(ah7, bl5)) | 0;
26293 hi = (hi + Math.imul(ah7, bh5)) | 0;
26294 lo = (lo + Math.imul(al6, bl6)) | 0;
26295 mid = (mid + Math.imul(al6, bh6)) | 0;
26296 mid = (mid + Math.imul(ah6, bl6)) | 0;
26297 hi = (hi + Math.imul(ah6, bh6)) | 0;
26298 lo = (lo + Math.imul(al5, bl7)) | 0;
26299 mid = (mid + Math.imul(al5, bh7)) | 0;
26300 mid = (mid + Math.imul(ah5, bl7)) | 0;
26301 hi = (hi + Math.imul(ah5, bh7)) | 0;
26302 lo = (lo + Math.imul(al4, bl8)) | 0;
26303 mid = (mid + Math.imul(al4, bh8)) | 0;
26304 mid = (mid + Math.imul(ah4, bl8)) | 0;
26305 hi = (hi + Math.imul(ah4, bh8)) | 0;
26306 lo = (lo + Math.imul(al3, bl9)) | 0;
26307 mid = (mid + Math.imul(al3, bh9)) | 0;
26308 mid = (mid + Math.imul(ah3, bl9)) | 0;
26309 hi = (hi + Math.imul(ah3, bh9)) | 0;
26310 var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26311 c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
26312 w12 &= 0x3ffffff;
26313 /* k = 13 */
26314 lo = Math.imul(al9, bl4);
26315 mid = Math.imul(al9, bh4);
26316 mid = (mid + Math.imul(ah9, bl4)) | 0;
26317 hi = Math.imul(ah9, bh4);
26318 lo = (lo + Math.imul(al8, bl5)) | 0;
26319 mid = (mid + Math.imul(al8, bh5)) | 0;
26320 mid = (mid + Math.imul(ah8, bl5)) | 0;
26321 hi = (hi + Math.imul(ah8, bh5)) | 0;
26322 lo = (lo + Math.imul(al7, bl6)) | 0;
26323 mid = (mid + Math.imul(al7, bh6)) | 0;
26324 mid = (mid + Math.imul(ah7, bl6)) | 0;
26325 hi = (hi + Math.imul(ah7, bh6)) | 0;
26326 lo = (lo + Math.imul(al6, bl7)) | 0;
26327 mid = (mid + Math.imul(al6, bh7)) | 0;
26328 mid = (mid + Math.imul(ah6, bl7)) | 0;
26329 hi = (hi + Math.imul(ah6, bh7)) | 0;
26330 lo = (lo + Math.imul(al5, bl8)) | 0;
26331 mid = (mid + Math.imul(al5, bh8)) | 0;
26332 mid = (mid + Math.imul(ah5, bl8)) | 0;
26333 hi = (hi + Math.imul(ah5, bh8)) | 0;
26334 lo = (lo + Math.imul(al4, bl9)) | 0;
26335 mid = (mid + Math.imul(al4, bh9)) | 0;
26336 mid = (mid + Math.imul(ah4, bl9)) | 0;
26337 hi = (hi + Math.imul(ah4, bh9)) | 0;
26338 var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26339 c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
26340 w13 &= 0x3ffffff;
26341 /* k = 14 */
26342 lo = Math.imul(al9, bl5);
26343 mid = Math.imul(al9, bh5);
26344 mid = (mid + Math.imul(ah9, bl5)) | 0;
26345 hi = Math.imul(ah9, bh5);
26346 lo = (lo + Math.imul(al8, bl6)) | 0;
26347 mid = (mid + Math.imul(al8, bh6)) | 0;
26348 mid = (mid + Math.imul(ah8, bl6)) | 0;
26349 hi = (hi + Math.imul(ah8, bh6)) | 0;
26350 lo = (lo + Math.imul(al7, bl7)) | 0;
26351 mid = (mid + Math.imul(al7, bh7)) | 0;
26352 mid = (mid + Math.imul(ah7, bl7)) | 0;
26353 hi = (hi + Math.imul(ah7, bh7)) | 0;
26354 lo = (lo + Math.imul(al6, bl8)) | 0;
26355 mid = (mid + Math.imul(al6, bh8)) | 0;
26356 mid = (mid + Math.imul(ah6, bl8)) | 0;
26357 hi = (hi + Math.imul(ah6, bh8)) | 0;
26358 lo = (lo + Math.imul(al5, bl9)) | 0;
26359 mid = (mid + Math.imul(al5, bh9)) | 0;
26360 mid = (mid + Math.imul(ah5, bl9)) | 0;
26361 hi = (hi + Math.imul(ah5, bh9)) | 0;
26362 var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26363 c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
26364 w14 &= 0x3ffffff;
26365 /* k = 15 */
26366 lo = Math.imul(al9, bl6);
26367 mid = Math.imul(al9, bh6);
26368 mid = (mid + Math.imul(ah9, bl6)) | 0;
26369 hi = Math.imul(ah9, bh6);
26370 lo = (lo + Math.imul(al8, bl7)) | 0;
26371 mid = (mid + Math.imul(al8, bh7)) | 0;
26372 mid = (mid + Math.imul(ah8, bl7)) | 0;
26373 hi = (hi + Math.imul(ah8, bh7)) | 0;
26374 lo = (lo + Math.imul(al7, bl8)) | 0;
26375 mid = (mid + Math.imul(al7, bh8)) | 0;
26376 mid = (mid + Math.imul(ah7, bl8)) | 0;
26377 hi = (hi + Math.imul(ah7, bh8)) | 0;
26378 lo = (lo + Math.imul(al6, bl9)) | 0;
26379 mid = (mid + Math.imul(al6, bh9)) | 0;
26380 mid = (mid + Math.imul(ah6, bl9)) | 0;
26381 hi = (hi + Math.imul(ah6, bh9)) | 0;
26382 var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26383 c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
26384 w15 &= 0x3ffffff;
26385 /* k = 16 */
26386 lo = Math.imul(al9, bl7);
26387 mid = Math.imul(al9, bh7);
26388 mid = (mid + Math.imul(ah9, bl7)) | 0;
26389 hi = Math.imul(ah9, bh7);
26390 lo = (lo + Math.imul(al8, bl8)) | 0;
26391 mid = (mid + Math.imul(al8, bh8)) | 0;
26392 mid = (mid + Math.imul(ah8, bl8)) | 0;
26393 hi = (hi + Math.imul(ah8, bh8)) | 0;
26394 lo = (lo + Math.imul(al7, bl9)) | 0;
26395 mid = (mid + Math.imul(al7, bh9)) | 0;
26396 mid = (mid + Math.imul(ah7, bl9)) | 0;
26397 hi = (hi + Math.imul(ah7, bh9)) | 0;
26398 var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26399 c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
26400 w16 &= 0x3ffffff;
26401 /* k = 17 */
26402 lo = Math.imul(al9, bl8);
26403 mid = Math.imul(al9, bh8);
26404 mid = (mid + Math.imul(ah9, bl8)) | 0;
26405 hi = Math.imul(ah9, bh8);
26406 lo = (lo + Math.imul(al8, bl9)) | 0;
26407 mid = (mid + Math.imul(al8, bh9)) | 0;
26408 mid = (mid + Math.imul(ah8, bl9)) | 0;
26409 hi = (hi + Math.imul(ah8, bh9)) | 0;
26410 var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26411 c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
26412 w17 &= 0x3ffffff;
26413 /* k = 18 */
26414 lo = Math.imul(al9, bl9);
26415 mid = Math.imul(al9, bh9);
26416 mid = (mid + Math.imul(ah9, bl9)) | 0;
26417 hi = Math.imul(ah9, bh9);
26418 var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26419 c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
26420 w18 &= 0x3ffffff;
26421 o[0] = w0;
26422 o[1] = w1;
26423 o[2] = w2;
26424 o[3] = w3;
26425 o[4] = w4;
26426 o[5] = w5;
26427 o[6] = w6;
26428 o[7] = w7;
26429 o[8] = w8;
26430 o[9] = w9;
26431 o[10] = w10;
26432 o[11] = w11;
26433 o[12] = w12;
26434 o[13] = w13;
26435 o[14] = w14;
26436 o[15] = w15;
26437 o[16] = w16;
26438 o[17] = w17;
26439 o[18] = w18;
26440 if (c !== 0) {
26441 o[19] = c;
26442 out.length++;
ab78acc6 26443 }
8b095871
IC
26444 return out;
26445 };
26446
26447 // Polyfill comb
26448 if (!Math.imul) {
26449 comb10MulTo = smallMulTo;
26450 }
26451
26452 function bigMulTo (self, num, out) {
26453 out.negative = num.negative ^ self.negative;
26454 out.length = self.length + num.length;
26455
26456 var carry = 0;
26457 var hncarry = 0;
26458 for (var k = 0; k < out.length - 1; k++) {
26459 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
26460 // note that ncarry could be >= 0x3ffffff
26461 var ncarry = hncarry;
26462 hncarry = 0;
26463 var rword = carry & 0x3ffffff;
26464 var maxJ = Math.min(k, num.length - 1);
26465 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
26466 var i = k - j;
26467 var a = self.words[i] | 0;
26468 var b = num.words[j] | 0;
26469 var r = a * b;
26470
26471 var lo = r & 0x3ffffff;
26472 ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
26473 lo = (lo + rword) | 0;
26474 rword = lo & 0x3ffffff;
26475 ncarry = (ncarry + (lo >>> 26)) | 0;
26476
26477 hncarry += ncarry >>> 26;
26478 ncarry &= 0x3ffffff;
26479 }
26480 out.words[k] = rword;
26481 carry = ncarry;
26482 ncarry = hncarry;
26483 }
26484 if (carry !== 0) {
26485 out.words[k] = carry;
26486 } else {
26487 out.length--;
ab78acc6 26488 }
8b095871
IC
26489
26490 return out.strip();
ab78acc6 26491 }
8b095871
IC
26492
26493 function jumboMulTo (self, num, out) {
26494 var fftm = new FFTM();
26495 return fftm.mulp(self, num, out);
ab78acc6 26496 }
8b095871
IC
26497
26498 BN.prototype.mulTo = function mulTo (num, out) {
26499 var res;
26500 var len = this.length + num.length;
26501 if (this.length === 10 && num.length === 10) {
26502 res = comb10MulTo(this, num, out);
26503 } else if (len < 63) {
26504 res = smallMulTo(this, num, out);
26505 } else if (len < 1024) {
26506 res = bigMulTo(this, num, out);
ab78acc6 26507 } else {
8b095871 26508 res = jumboMulTo(this, num, out);
ab78acc6 26509 }
8b095871
IC
26510
26511 return res;
26512 };
26513
26514 // Cooley-Tukey algorithm for FFT
26515 // slightly revisited to rely on looping instead of recursion
26516
26517 function FFTM (x, y) {
26518 this.x = x;
26519 this.y = y;
ab78acc6 26520 }
8b095871
IC
26521
26522 FFTM.prototype.makeRBT = function makeRBT (N) {
26523 var t = new Array(N);
26524 var l = BN.prototype._countBits(N) - 1;
26525 for (var i = 0; i < N; i++) {
26526 t[i] = this.revBin(i, l, N);
26527 }
26528
26529 return t;
26530 };
26531
26532 // Returns binary-reversed representation of `x`
26533 FFTM.prototype.revBin = function revBin (x, l, N) {
26534 if (x === 0 || x === N - 1) return x;
26535
26536 var rb = 0;
26537 for (var i = 0; i < l; i++) {
26538 rb |= (x & 1) << (l - i - 1);
26539 x >>= 1;
26540 }
26541
26542 return rb;
26543 };
26544
26545 // Performs "tweedling" phase, therefore 'emulating'
26546 // behaviour of the recursive algorithm
26547 FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
26548 for (var i = 0; i < N; i++) {
26549 rtws[i] = rws[rbt[i]];
26550 itws[i] = iws[rbt[i]];
26551 }
26552 };
26553
26554 FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
26555 this.permute(rbt, rws, iws, rtws, itws, N);
26556
26557 for (var s = 1; s < N; s <<= 1) {
26558 var l = s << 1;
26559
26560 var rtwdf = Math.cos(2 * Math.PI / l);
26561 var itwdf = Math.sin(2 * Math.PI / l);
26562
26563 for (var p = 0; p < N; p += l) {
26564 var rtwdf_ = rtwdf;
26565 var itwdf_ = itwdf;
26566
26567 for (var j = 0; j < s; j++) {
26568 var re = rtws[p + j];
26569 var ie = itws[p + j];
26570
26571 var ro = rtws[p + j + s];
26572 var io = itws[p + j + s];
26573
26574 var rx = rtwdf_ * ro - itwdf_ * io;
26575
26576 io = rtwdf_ * io + itwdf_ * ro;
26577 ro = rx;
26578
26579 rtws[p + j] = re + ro;
26580 itws[p + j] = ie + io;
26581
26582 rtws[p + j + s] = re - ro;
26583 itws[p + j + s] = ie - io;
26584
26585 /* jshint maxdepth : false */
26586 if (j !== l) {
26587 rx = rtwdf * rtwdf_ - itwdf * itwdf_;
26588
26589 itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
26590 rtwdf_ = rx;
26591 }
26592 }
26593 }
ab78acc6 26594 }
8b095871
IC
26595 };
26596
26597 FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
26598 var N = Math.max(m, n) | 1;
26599 var odd = N & 1;
26600 var i = 0;
26601 for (N = N / 2 | 0; N; N = N >>> 1) {
26602 i++;
ab78acc6 26603 }
ebd8d4e8 26604
8b095871
IC
26605 return 1 << i + 1 + odd;
26606 };
ebd8d4e8 26607
8b095871
IC
26608 FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
26609 if (N <= 1) return;
ebd8d4e8 26610
8b095871
IC
26611 for (var i = 0; i < N / 2; i++) {
26612 var t = rws[i];
ebd8d4e8 26613
8b095871
IC
26614 rws[i] = rws[N - i - 1];
26615 rws[N - i - 1] = t;
ebd8d4e8 26616
8b095871 26617 t = iws[i];
ebd8d4e8 26618
8b095871
IC
26619 iws[i] = -iws[N - i - 1];
26620 iws[N - i - 1] = -t;
26621 }
26622 };
ebd8d4e8 26623
8b095871
IC
26624 FFTM.prototype.normalize13b = function normalize13b (ws, N) {
26625 var carry = 0;
26626 for (var i = 0; i < N / 2; i++) {
26627 var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
26628 Math.round(ws[2 * i] / N) +
26629 carry;
ebd8d4e8 26630
8b095871 26631 ws[i] = w & 0x3ffffff;
ebd8d4e8 26632
8b095871
IC
26633 if (w < 0x4000000) {
26634 carry = 0;
26635 } else {
26636 carry = w / 0x4000000 | 0;
26637 }
26638 }
ebd8d4e8 26639
8b095871
IC
26640 return ws;
26641 };
ebd8d4e8 26642
8b095871
IC
26643 FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
26644 var carry = 0;
26645 for (var i = 0; i < len; i++) {
26646 carry = carry + (ws[i] | 0);
ebd8d4e8 26647
8b095871
IC
26648 rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
26649 rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
26650 }
ebd8d4e8 26651
8b095871
IC
26652 // Pad with zeroes
26653 for (i = 2 * len; i < N; ++i) {
26654 rws[i] = 0;
26655 }
ebd8d4e8 26656
8b095871
IC
26657 assert(carry === 0);
26658 assert((carry & ~0x1fff) === 0);
26659 };
ebd8d4e8 26660
8b095871
IC
26661 FFTM.prototype.stub = function stub (N) {
26662 var ph = new Array(N);
26663 for (var i = 0; i < N; i++) {
26664 ph[i] = 0;
26665 }
ebd8d4e8 26666
8b095871
IC
26667 return ph;
26668 };
ebd8d4e8 26669
8b095871
IC
26670 FFTM.prototype.mulp = function mulp (x, y, out) {
26671 var N = 2 * this.guessLen13b(x.length, y.length);
ebd8d4e8 26672
8b095871 26673 var rbt = this.makeRBT(N);
ebd8d4e8 26674
8b095871 26675 var _ = this.stub(N);
ebd8d4e8 26676
8b095871
IC
26677 var rws = new Array(N);
26678 var rwst = new Array(N);
26679 var iwst = new Array(N);
ebd8d4e8 26680
8b095871
IC
26681 var nrws = new Array(N);
26682 var nrwst = new Array(N);
26683 var niwst = new Array(N);
ebd8d4e8 26684
8b095871
IC
26685 var rmws = out.words;
26686 rmws.length = N;
ebd8d4e8 26687
8b095871
IC
26688 this.convert13b(x.words, x.length, rws, N);
26689 this.convert13b(y.words, y.length, nrws, N);
ebd8d4e8 26690
8b095871
IC
26691 this.transform(rws, _, rwst, iwst, N, rbt);
26692 this.transform(nrws, _, nrwst, niwst, N, rbt);
ebd8d4e8 26693
8b095871
IC
26694 for (var i = 0; i < N; i++) {
26695 var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
26696 iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
26697 rwst[i] = rx;
26698 }
ebd8d4e8 26699
8b095871
IC
26700 this.conjugate(rwst, iwst, N);
26701 this.transform(rwst, iwst, rmws, _, N, rbt);
26702 this.conjugate(rmws, _, N);
26703 this.normalize13b(rmws, N);
ebd8d4e8 26704
8b095871
IC
26705 out.negative = x.negative ^ y.negative;
26706 out.length = x.length + y.length;
26707 return out.strip();
26708 };
ebd8d4e8 26709
8b095871
IC
26710 // Multiply `this` by `num`
26711 BN.prototype.mul = function mul (num) {
26712 var out = new BN(null);
26713 out.words = new Array(this.length + num.length);
26714 return this.mulTo(num, out);
26715 };
ab78acc6 26716
8b095871
IC
26717 // Multiply employing FFT
26718 BN.prototype.mulf = function mulf (num) {
26719 var out = new BN(null);
26720 out.words = new Array(this.length + num.length);
26721 return jumboMulTo(this, num, out);
26722 };
ebd8d4e8 26723
8b095871
IC
26724 // In-place Multiplication
26725 BN.prototype.imul = function imul (num) {
26726 return this.clone().mulTo(num, this);
26727 };
ab78acc6 26728
8b095871
IC
26729 BN.prototype.imuln = function imuln (num) {
26730 assert(typeof num === 'number');
26731 assert(num < 0x4000000);
ab78acc6 26732
8b095871
IC
26733 // Carry
26734 var carry = 0;
26735 for (var i = 0; i < this.length; i++) {
26736 var w = (this.words[i] | 0) * num;
26737 var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
26738 carry >>= 26;
26739 carry += (w / 0x4000000) | 0;
26740 // NOTE: lo is 27bit maximum
26741 carry += lo >>> 26;
26742 this.words[i] = lo & 0x3ffffff;
26743 }
ab78acc6 26744
8b095871
IC
26745 if (carry !== 0) {
26746 this.words[i] = carry;
26747 this.length++;
26748 }
ab78acc6 26749
8b095871
IC
26750 return this;
26751 };
ab78acc6 26752
8b095871
IC
26753 BN.prototype.muln = function muln (num) {
26754 return this.clone().imuln(num);
26755 };
ebd8d4e8 26756
8b095871
IC
26757 // `this` * `this`
26758 BN.prototype.sqr = function sqr () {
26759 return this.mul(this);
26760 };
ebd8d4e8 26761
8b095871
IC
26762 // `this` * `this` in-place
26763 BN.prototype.isqr = function isqr () {
26764 return this.imul(this.clone());
26765 };
ab78acc6 26766
8b095871
IC
26767 // Math.pow(`this`, `num`)
26768 BN.prototype.pow = function pow (num) {
26769 var w = toBitArray(num);
26770 if (w.length === 0) return new BN(1);
ab78acc6 26771
8b095871
IC
26772 // Skip leading zeroes
26773 var res = this;
26774 for (var i = 0; i < w.length; i++, res = res.sqr()) {
26775 if (w[i] !== 0) break;
26776 }
ebd8d4e8 26777
8b095871
IC
26778 if (++i < w.length) {
26779 for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
26780 if (w[i] === 0) continue;
ebd8d4e8 26781
8b095871
IC
26782 res = res.mul(q);
26783 }
ab78acc6
IC
26784 }
26785
8b095871
IC
26786 return res;
26787 };
ab78acc6 26788
8b095871
IC
26789 // Shift-left in-place
26790 BN.prototype.iushln = function iushln (bits) {
26791 assert(typeof bits === 'number' && bits >= 0);
26792 var r = bits % 26;
26793 var s = (bits - r) / 26;
26794 var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
26795 var i;
26796
26797 if (r !== 0) {
26798 var carry = 0;
26799
26800 for (i = 0; i < this.length; i++) {
26801 var newCarry = this.words[i] & carryMask;
26802 var c = ((this.words[i] | 0) - newCarry) << r;
26803 this.words[i] = c | carry;
26804 carry = newCarry >>> (26 - r);
26805 }
26806
26807 if (carry) {
26808 this.words[i] = carry;
26809 this.length++;
26810 }
ab78acc6 26811 }
ebd8d4e8 26812
8b095871
IC
26813 if (s !== 0) {
26814 for (i = this.length - 1; i >= 0; i--) {
26815 this.words[i + s] = this.words[i];
26816 }
ebd8d4e8 26817
8b095871
IC
26818 for (i = 0; i < s; i++) {
26819 this.words[i] = 0;
26820 }
ebd8d4e8 26821
8b095871
IC
26822 this.length += s;
26823 }
ebd8d4e8 26824
8b095871
IC
26825 return this.strip();
26826 };
ebd8d4e8 26827
8b095871
IC
26828 BN.prototype.ishln = function ishln (bits) {
26829 // TODO(indutny): implement me
26830 assert(this.negative === 0);
26831 return this.iushln(bits);
26832 };
ebd8d4e8 26833
8b095871
IC
26834 // Shift-right in-place
26835 // NOTE: `hint` is a lowest bit before trailing zeroes
26836 // NOTE: if `extended` is present - it will be filled with destroyed bits
26837 BN.prototype.iushrn = function iushrn (bits, hint, extended) {
26838 assert(typeof bits === 'number' && bits >= 0);
26839 var h;
26840 if (hint) {
26841 h = (hint - (hint % 26)) / 26;
26842 } else {
26843 h = 0;
26844 }
ebd8d4e8 26845
8b095871
IC
26846 var r = bits % 26;
26847 var s = Math.min((bits - r) / 26, this.length);
26848 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
26849 var maskedWords = extended;
26850
26851 h -= s;
26852 h = Math.max(0, h);
26853
26854 // Extended mode, copy masked part
26855 if (maskedWords) {
26856 for (var i = 0; i < s; i++) {
26857 maskedWords.words[i] = this.words[i];
26858 }
26859 maskedWords.length = s;
ab78acc6 26860 }
ebd8d4e8 26861
8b095871
IC
26862 if (s === 0) {
26863 // No-op, we should not move anything at all
26864 } else if (this.length > s) {
26865 this.length -= s;
26866 for (i = 0; i < this.length; i++) {
26867 this.words[i] = this.words[i + s];
26868 }
26869 } else {
26870 this.words[0] = 0;
26871 this.length = 1;
26872 }
ab78acc6 26873
8b095871
IC
26874 var carry = 0;
26875 for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
26876 var word = this.words[i] | 0;
26877 this.words[i] = (carry << (26 - r)) | (word >>> r);
26878 carry = word & mask;
ab78acc6 26879 }
ebd8d4e8 26880
8b095871
IC
26881 // Push carried bits as a mask
26882 if (maskedWords && carry !== 0) {
26883 maskedWords.words[maskedWords.length++] = carry;
26884 }
26885
26886 if (this.length === 0) {
26887 this.words[0] = 0;
26888 this.length = 1;
26889 }
26890
26891 return this.strip();
26892 };
26893
26894 BN.prototype.ishrn = function ishrn (bits, hint, extended) {
26895 // TODO(indutny): implement me
26896 assert(this.negative === 0);
26897 return this.iushrn(bits, hint, extended);
26898 };
26899
26900 // Shift-left
26901 BN.prototype.shln = function shln (bits) {
26902 return this.clone().ishln(bits);
26903 };
26904
26905 BN.prototype.ushln = function ushln (bits) {
26906 return this.clone().iushln(bits);
26907 };
26908
26909 // Shift-right
26910 BN.prototype.shrn = function shrn (bits) {
26911 return this.clone().ishrn(bits);
26912 };
ebd8d4e8 26913
8b095871
IC
26914 BN.prototype.ushrn = function ushrn (bits) {
26915 return this.clone().iushrn(bits);
26916 };
ebd8d4e8 26917
8b095871
IC
26918 // Test if n bit is set
26919 BN.prototype.testn = function testn (bit) {
26920 assert(typeof bit === 'number' && bit >= 0);
26921 var r = bit % 26;
26922 var s = (bit - r) / 26;
26923 var q = 1 << r;
ebd8d4e8 26924
8b095871
IC
26925 // Fast case: bit is much higher than all existing words
26926 if (this.length <= s) return false;
ab78acc6 26927
8b095871
IC
26928 // Check bit and return
26929 var w = this.words[s];
ab78acc6 26930
8b095871
IC
26931 return !!(w & q);
26932 };
ab78acc6 26933
8b095871
IC
26934 // Return only lowers bits of number (in-place)
26935 BN.prototype.imaskn = function imaskn (bits) {
26936 assert(typeof bits === 'number' && bits >= 0);
26937 var r = bits % 26;
26938 var s = (bits - r) / 26;
ab78acc6 26939
8b095871 26940 assert(this.negative === 0, 'imaskn works only with positive numbers');
ab78acc6 26941
8b095871
IC
26942 if (this.length <= s) {
26943 return this;
26944 }
ab78acc6 26945
8b095871
IC
26946 if (r !== 0) {
26947 s++;
26948 }
26949 this.length = Math.min(s, this.length);
ab78acc6 26950
8b095871
IC
26951 if (r !== 0) {
26952 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
26953 this.words[this.length - 1] &= mask;
26954 }
ab78acc6 26955
8b095871
IC
26956 return this.strip();
26957 };
ab78acc6 26958
8b095871
IC
26959 // Return only lowers bits of number
26960 BN.prototype.maskn = function maskn (bits) {
26961 return this.clone().imaskn(bits);
26962 };
ebd8d4e8 26963
8b095871
IC
26964 // Add plain number `num` to `this`
26965 BN.prototype.iaddn = function iaddn (num) {
26966 assert(typeof num === 'number');
26967 assert(num < 0x4000000);
26968 if (num < 0) return this.isubn(-num);
26969
26970 // Possible sign change
26971 if (this.negative !== 0) {
26972 if (this.length === 1 && (this.words[0] | 0) < num) {
26973 this.words[0] = num - (this.words[0] | 0);
26974 this.negative = 0;
26975 return this;
26976 }
ebd8d4e8 26977
8b095871
IC
26978 this.negative = 0;
26979 this.isubn(num);
26980 this.negative = 1;
26981 return this;
26982 }
ebd8d4e8 26983
8b095871
IC
26984 // Add without checks
26985 return this._iaddn(num);
26986 };
ebd8d4e8 26987
8b095871
IC
26988 BN.prototype._iaddn = function _iaddn (num) {
26989 this.words[0] += num;
ebd8d4e8 26990
8b095871
IC
26991 // Carry
26992 for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
26993 this.words[i] -= 0x4000000;
26994 if (i === this.length - 1) {
26995 this.words[i + 1] = 1;
26996 } else {
26997 this.words[i + 1]++;
26998 }
26999 }
27000 this.length = Math.max(this.length, i + 1);
ebd8d4e8 27001
8b095871
IC
27002 return this;
27003 };
ebd8d4e8 27004
8b095871
IC
27005 // Subtract plain number `num` from `this`
27006 BN.prototype.isubn = function isubn (num) {
27007 assert(typeof num === 'number');
27008 assert(num < 0x4000000);
27009 if (num < 0) return this.iaddn(-num);
ebd8d4e8 27010
8b095871
IC
27011 if (this.negative !== 0) {
27012 this.negative = 0;
27013 this.iaddn(num);
27014 this.negative = 1;
27015 return this;
27016 }
ebd8d4e8 27017
8b095871 27018 this.words[0] -= num;
ab78acc6 27019
8b095871
IC
27020 if (this.length === 1 && this.words[0] < 0) {
27021 this.words[0] = -this.words[0];
27022 this.negative = 1;
27023 } else {
27024 // Carry
27025 for (var i = 0; i < this.length && this.words[i] < 0; i++) {
27026 this.words[i] += 0x4000000;
27027 this.words[i + 1] -= 1;
27028 }
27029 }
ebd8d4e8 27030
8b095871
IC
27031 return this.strip();
27032 };
ab78acc6 27033
8b095871
IC
27034 BN.prototype.addn = function addn (num) {
27035 return this.clone().iaddn(num);
27036 };
ab78acc6 27037
8b095871
IC
27038 BN.prototype.subn = function subn (num) {
27039 return this.clone().isubn(num);
27040 };
ab78acc6 27041
8b095871
IC
27042 BN.prototype.iabs = function iabs () {
27043 this.negative = 0;
ab78acc6 27044
8b095871
IC
27045 return this;
27046 };
ab78acc6 27047
8b095871
IC
27048 BN.prototype.abs = function abs () {
27049 return this.clone().iabs();
27050 };
ab78acc6 27051
8b095871
IC
27052 BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
27053 var len = num.length + shift;
27054 var i;
ab78acc6 27055
8b095871 27056 this._expand(len);
ab78acc6 27057
8b095871
IC
27058 var w;
27059 var carry = 0;
27060 for (i = 0; i < num.length; i++) {
27061 w = (this.words[i + shift] | 0) + carry;
27062 var right = (num.words[i] | 0) * mul;
27063 w -= right & 0x3ffffff;
27064 carry = (w >> 26) - ((right / 0x4000000) | 0);
27065 this.words[i + shift] = w & 0x3ffffff;
27066 }
27067 for (; i < this.length - shift; i++) {
27068 w = (this.words[i + shift] | 0) + carry;
27069 carry = w >> 26;
27070 this.words[i + shift] = w & 0x3ffffff;
27071 }
ebd8d4e8 27072
8b095871 27073 if (carry === 0) return this.strip();
ab78acc6 27074
8b095871
IC
27075 // Subtraction overflow
27076 assert(carry === -1);
27077 carry = 0;
27078 for (i = 0; i < this.length; i++) {
27079 w = -(this.words[i] | 0) + carry;
27080 carry = w >> 26;
27081 this.words[i] = w & 0x3ffffff;
27082 }
27083 this.negative = 1;
ab78acc6 27084
8b095871
IC
27085 return this.strip();
27086 };
ab78acc6 27087
8b095871
IC
27088 BN.prototype._wordDiv = function _wordDiv (num, mode) {
27089 var shift = this.length - num.length;
ebd8d4e8 27090
8b095871
IC
27091 var a = this.clone();
27092 var b = num;
ab78acc6 27093
8b095871
IC
27094 // Normalize
27095 var bhi = b.words[b.length - 1] | 0;
27096 var bhiBits = this._countBits(bhi);
27097 shift = 26 - bhiBits;
27098 if (shift !== 0) {
27099 b = b.ushln(shift);
27100 a.iushln(shift);
27101 bhi = b.words[b.length - 1] | 0;
27102 }
ebd8d4e8 27103
8b095871
IC
27104 // Initialize quotient
27105 var m = a.length - b.length;
27106 var q;
ab78acc6 27107
8b095871
IC
27108 if (mode !== 'mod') {
27109 q = new BN(null);
27110 q.length = m + 1;
27111 q.words = new Array(q.length);
27112 for (var i = 0; i < q.length; i++) {
27113 q.words[i] = 0;
27114 }
27115 }
ebd8d4e8 27116
8b095871
IC
27117 var diff = a.clone()._ishlnsubmul(b, 1, m);
27118 if (diff.negative === 0) {
27119 a = diff;
27120 if (q) {
27121 q.words[m] = 1;
27122 }
27123 }
ebd8d4e8 27124
8b095871
IC
27125 for (var j = m - 1; j >= 0; j--) {
27126 var qj = (a.words[b.length + j] | 0) * 0x4000000 +
27127 (a.words[b.length + j - 1] | 0);
ebd8d4e8 27128
8b095871
IC
27129 // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
27130 // (0x7ffffff)
27131 qj = Math.min((qj / bhi) | 0, 0x3ffffff);
ebd8d4e8 27132
8b095871
IC
27133 a._ishlnsubmul(b, qj, j);
27134 while (a.negative !== 0) {
27135 qj--;
27136 a.negative = 0;
27137 a._ishlnsubmul(b, 1, j);
27138 if (!a.isZero()) {
27139 a.negative ^= 1;
27140 }
27141 }
27142 if (q) {
27143 q.words[j] = qj;
27144 }
27145 }
27146 if (q) {
27147 q.strip();
27148 }
27149 a.strip();
ebd8d4e8 27150
8b095871
IC
27151 // Denormalize
27152 if (mode !== 'div' && shift !== 0) {
27153 a.iushrn(shift);
27154 }
ebd8d4e8 27155
8b095871
IC
27156 return {
27157 div: q || null,
27158 mod: a
27159 };
27160 };
ebd8d4e8 27161
8b095871
IC
27162 // NOTE: 1) `mode` can be set to `mod` to request mod only,
27163 // to `div` to request div only, or be absent to
27164 // request both div & mod
27165 // 2) `positive` is true if unsigned mod is requested
27166 BN.prototype.divmod = function divmod (num, mode, positive) {
27167 assert(!num.isZero());
27168
27169 if (this.isZero()) {
27170 return {
27171 div: new BN(0),
27172 mod: new BN(0)
27173 };
27174 }
ebd8d4e8 27175
8b095871
IC
27176 var div, mod, res;
27177 if (this.negative !== 0 && num.negative === 0) {
27178 res = this.neg().divmod(num, mode);
ebd8d4e8 27179
8b095871
IC
27180 if (mode !== 'mod') {
27181 div = res.div.neg();
27182 }
ebd8d4e8 27183
8b095871
IC
27184 if (mode !== 'div') {
27185 mod = res.mod.neg();
27186 if (positive && mod.negative !== 0) {
27187 mod.iadd(num);
27188 }
27189 }
ebd8d4e8 27190
8b095871
IC
27191 return {
27192 div: div,
27193 mod: mod
27194 };
27195 }
ebd8d4e8 27196
8b095871
IC
27197 if (this.negative === 0 && num.negative !== 0) {
27198 res = this.divmod(num.neg(), mode);
ebd8d4e8 27199
8b095871
IC
27200 if (mode !== 'mod') {
27201 div = res.div.neg();
27202 }
ebd8d4e8 27203
8b095871
IC
27204 return {
27205 div: div,
27206 mod: res.mod
27207 };
27208 }
ebd8d4e8 27209
8b095871
IC
27210 if ((this.negative & num.negative) !== 0) {
27211 res = this.neg().divmod(num.neg(), mode);
ebd8d4e8 27212
8b095871
IC
27213 if (mode !== 'div') {
27214 mod = res.mod.neg();
27215 if (positive && mod.negative !== 0) {
27216 mod.isub(num);
27217 }
27218 }
ebd8d4e8 27219
8b095871
IC
27220 return {
27221 div: res.div,
27222 mod: mod
27223 };
27224 }
ebd8d4e8 27225
8b095871 27226 // Both numbers are positive at this point
ebd8d4e8 27227
8b095871
IC
27228 // Strip both numbers to approximate shift value
27229 if (num.length > this.length || this.cmp(num) < 0) {
27230 return {
27231 div: new BN(0),
27232 mod: this
27233 };
27234 }
ebd8d4e8 27235
8b095871
IC
27236 // Very short reduction
27237 if (num.length === 1) {
27238 if (mode === 'div') {
27239 return {
27240 div: this.divn(num.words[0]),
27241 mod: null
27242 };
27243 }
ebd8d4e8 27244
8b095871
IC
27245 if (mode === 'mod') {
27246 return {
27247 div: null,
27248 mod: new BN(this.modn(num.words[0]))
27249 };
27250 }
ebd8d4e8 27251
8b095871
IC
27252 return {
27253 div: this.divn(num.words[0]),
27254 mod: new BN(this.modn(num.words[0]))
27255 };
27256 }
ebd8d4e8 27257
8b095871
IC
27258 return this._wordDiv(num, mode);
27259 };
ab78acc6 27260
8b095871
IC
27261 // Find `this` / `num`
27262 BN.prototype.div = function div (num) {
27263 return this.divmod(num, 'div', false).div;
27264 };
ab78acc6 27265
8b095871
IC
27266 // Find `this` % `num`
27267 BN.prototype.mod = function mod (num) {
27268 return this.divmod(num, 'mod', false).mod;
27269 };
ab78acc6 27270
8b095871
IC
27271 BN.prototype.umod = function umod (num) {
27272 return this.divmod(num, 'mod', true).mod;
27273 };
ebd8d4e8 27274
8b095871
IC
27275 // Find Round(`this` / `num`)
27276 BN.prototype.divRound = function divRound (num) {
27277 var dm = this.divmod(num);
ebd8d4e8 27278
8b095871
IC
27279 // Fast case - exact division
27280 if (dm.mod.isZero()) return dm.div;
ebd8d4e8 27281
8b095871 27282 var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
ebd8d4e8 27283
8b095871
IC
27284 var half = num.ushrn(1);
27285 var r2 = num.andln(1);
27286 var cmp = mod.cmp(half);
ebd8d4e8 27287
8b095871
IC
27288 // Round down
27289 if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
ebd8d4e8 27290
8b095871
IC
27291 // Round up
27292 return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
27293 };
ab78acc6 27294
8b095871
IC
27295 BN.prototype.modn = function modn (num) {
27296 assert(num <= 0x3ffffff);
27297 var p = (1 << 26) % num;
ab78acc6 27298
8b095871
IC
27299 var acc = 0;
27300 for (var i = this.length - 1; i >= 0; i--) {
27301 acc = (p * acc + (this.words[i] | 0)) % num;
ab78acc6 27302 }
ab78acc6 27303
8b095871
IC
27304 return acc;
27305 };
27306
27307 // In-place division by number
27308 BN.prototype.idivn = function idivn (num) {
27309 assert(num <= 0x3ffffff);
27310
27311 var carry = 0;
27312 for (var i = this.length - 1; i >= 0; i--) {
27313 var w = (this.words[i] | 0) + carry * 0x4000000;
27314 this.words[i] = (w / num) | 0;
27315 carry = w % num;
ebd8d4e8 27316 }
ebd8d4e8 27317
8b095871
IC
27318 return this.strip();
27319 };
ab78acc6 27320
8b095871
IC
27321 BN.prototype.divn = function divn (num) {
27322 return this.clone().idivn(num);
27323 };
ebd8d4e8 27324
8b095871
IC
27325 BN.prototype.egcd = function egcd (p) {
27326 assert(p.negative === 0);
27327 assert(!p.isZero());
ebd8d4e8 27328
8b095871
IC
27329 var x = this;
27330 var y = p.clone();
27331
27332 if (x.negative !== 0) {
27333 x = x.umod(p);
27334 } else {
27335 x = x.clone();
27336 }
27337
27338 // A * x + B * y = x
27339 var A = new BN(1);
27340 var B = new BN(0);
27341
27342 // C * x + D * y = y
27343 var C = new BN(0);
27344 var D = new BN(1);
27345
27346 var g = 0;
27347
27348 while (x.isEven() && y.isEven()) {
27349 x.iushrn(1);
27350 y.iushrn(1);
27351 ++g;
27352 }
ebd8d4e8 27353
8b095871
IC
27354 var yp = y.clone();
27355 var xp = x.clone();
ebd8d4e8 27356
8b095871
IC
27357 while (!x.isZero()) {
27358 for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
27359 if (i > 0) {
27360 x.iushrn(i);
27361 while (i-- > 0) {
27362 if (A.isOdd() || B.isOdd()) {
27363 A.iadd(yp);
27364 B.isub(xp);
27365 }
ebd8d4e8 27366
8b095871
IC
27367 A.iushrn(1);
27368 B.iushrn(1);
27369 }
27370 }
ebd8d4e8 27371
8b095871
IC
27372 for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
27373 if (j > 0) {
27374 y.iushrn(j);
27375 while (j-- > 0) {
27376 if (C.isOdd() || D.isOdd()) {
27377 C.iadd(yp);
27378 D.isub(xp);
27379 }
ab78acc6 27380
8b095871
IC
27381 C.iushrn(1);
27382 D.iushrn(1);
27383 }
27384 }
ebd8d4e8 27385
8b095871
IC
27386 if (x.cmp(y) >= 0) {
27387 x.isub(y);
27388 A.isub(C);
27389 B.isub(D);
27390 } else {
27391 y.isub(x);
27392 C.isub(A);
27393 D.isub(B);
27394 }
27395 }
ebd8d4e8 27396
8b095871
IC
27397 return {
27398 a: C,
27399 b: D,
27400 gcd: y.iushln(g)
27401 };
27402 };
ebd8d4e8 27403
8b095871
IC
27404 // This is reduced incarnation of the binary EEA
27405 // above, designated to invert members of the
27406 // _prime_ fields F(p) at a maximal speed
27407 BN.prototype._invmp = function _invmp (p) {
27408 assert(p.negative === 0);
27409 assert(!p.isZero());
ebd8d4e8 27410
8b095871
IC
27411 var a = this;
27412 var b = p.clone();
ebd8d4e8 27413
8b095871
IC
27414 if (a.negative !== 0) {
27415 a = a.umod(p);
27416 } else {
27417 a = a.clone();
27418 }
ebd8d4e8 27419
8b095871
IC
27420 var x1 = new BN(1);
27421 var x2 = new BN(0);
ebd8d4e8 27422
8b095871 27423 var delta = b.clone();
ebd8d4e8 27424
8b095871
IC
27425 while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
27426 for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
27427 if (i > 0) {
27428 a.iushrn(i);
27429 while (i-- > 0) {
27430 if (x1.isOdd()) {
27431 x1.iadd(delta);
27432 }
ebd8d4e8 27433
8b095871
IC
27434 x1.iushrn(1);
27435 }
27436 }
ab78acc6 27437
8b095871
IC
27438 for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
27439 if (j > 0) {
27440 b.iushrn(j);
27441 while (j-- > 0) {
27442 if (x2.isOdd()) {
27443 x2.iadd(delta);
27444 }
ebd8d4e8 27445
8b095871
IC
27446 x2.iushrn(1);
27447 }
27448 }
ebd8d4e8 27449
8b095871
IC
27450 if (a.cmp(b) >= 0) {
27451 a.isub(b);
27452 x1.isub(x2);
27453 } else {
27454 b.isub(a);
27455 x2.isub(x1);
27456 }
27457 }
ebd8d4e8 27458
8b095871
IC
27459 var res;
27460 if (a.cmpn(1) === 0) {
27461 res = x1;
27462 } else {
27463 res = x2;
27464 }
ebd8d4e8 27465
8b095871
IC
27466 if (res.cmpn(0) < 0) {
27467 res.iadd(p);
ab78acc6
IC
27468 }
27469
8b095871
IC
27470 return res;
27471 };
ebd8d4e8 27472
8b095871
IC
27473 BN.prototype.gcd = function gcd (num) {
27474 if (this.isZero()) return num.abs();
27475 if (num.isZero()) return this.abs();
27476
27477 var a = this.clone();
27478 var b = num.clone();
27479 a.negative = 0;
27480 b.negative = 0;
27481
27482 // Remove common factor of two
27483 for (var shift = 0; a.isEven() && b.isEven(); shift++) {
27484 a.iushrn(1);
27485 b.iushrn(1);
ab78acc6 27486 }
ab78acc6 27487
8b095871
IC
27488 do {
27489 while (a.isEven()) {
27490 a.iushrn(1);
27491 }
27492 while (b.isEven()) {
27493 b.iushrn(1);
27494 }
ebd8d4e8 27495
8b095871
IC
27496 var r = a.cmp(b);
27497 if (r < 0) {
27498 // Swap `a` and `b` to make `a` always bigger than `b`
27499 var t = a;
27500 a = b;
27501 b = t;
27502 } else if (r === 0 || b.cmpn(1) === 0) {
27503 break;
27504 }
ab78acc6 27505
8b095871
IC
27506 a.isub(b);
27507 } while (true);
ab78acc6 27508
8b095871
IC
27509 return b.iushln(shift);
27510 };
ab78acc6 27511
8b095871
IC
27512 // Invert number in the field F(num)
27513 BN.prototype.invm = function invm (num) {
27514 return this.egcd(num).a.umod(num);
27515 };
ebd8d4e8 27516
8b095871
IC
27517 BN.prototype.isEven = function isEven () {
27518 return (this.words[0] & 1) === 0;
27519 };
ab78acc6 27520
8b095871
IC
27521 BN.prototype.isOdd = function isOdd () {
27522 return (this.words[0] & 1) === 1;
27523 };
ebd8d4e8 27524
8b095871
IC
27525 // And first word and num
27526 BN.prototype.andln = function andln (num) {
27527 return this.words[0] & num;
27528 };
ebd8d4e8 27529
8b095871
IC
27530 // Increment at the bit position in-line
27531 BN.prototype.bincn = function bincn (bit) {
27532 assert(typeof bit === 'number');
27533 var r = bit % 26;
27534 var s = (bit - r) / 26;
27535 var q = 1 << r;
27536
27537 // Fast case: bit is much higher than all existing words
27538 if (this.length <= s) {
27539 this._expand(s + 1);
27540 this.words[s] |= q;
27541 return this;
27542 }
ebd8d4e8 27543
8b095871
IC
27544 // Add bit and propagate, if needed
27545 var carry = q;
27546 for (var i = s; carry !== 0 && i < this.length; i++) {
27547 var w = this.words[i] | 0;
27548 w += carry;
27549 carry = w >>> 26;
27550 w &= 0x3ffffff;
27551 this.words[i] = w;
27552 }
27553 if (carry !== 0) {
27554 this.words[i] = carry;
27555 this.length++;
27556 }
27557 return this;
27558 };
ebd8d4e8 27559
8b095871
IC
27560 BN.prototype.isZero = function isZero () {
27561 return this.length === 1 && this.words[0] === 0;
27562 };
ebd8d4e8 27563
8b095871
IC
27564 BN.prototype.cmpn = function cmpn (num) {
27565 var negative = num < 0;
ebd8d4e8 27566
8b095871
IC
27567 if (this.negative !== 0 && !negative) return -1;
27568 if (this.negative === 0 && negative) return 1;
ab78acc6 27569
8b095871 27570 this.strip();
ab78acc6 27571
8b095871
IC
27572 var res;
27573 if (this.length > 1) {
27574 res = 1;
27575 } else {
27576 if (negative) {
27577 num = -num;
27578 }
ebd8d4e8 27579
8b095871 27580 assert(num <= 0x3ffffff, 'Number is too big');
ebd8d4e8 27581
8b095871
IC
27582 var w = this.words[0] | 0;
27583 res = w === num ? 0 : w < num ? -1 : 1;
27584 }
27585 if (this.negative !== 0) return -res | 0;
27586 return res;
27587 };
ebd8d4e8 27588
8b095871
IC
27589 // Compare two numbers and return:
27590 // 1 - if `this` > `num`
27591 // 0 - if `this` == `num`
27592 // -1 - if `this` < `num`
27593 BN.prototype.cmp = function cmp (num) {
27594 if (this.negative !== 0 && num.negative === 0) return -1;
27595 if (this.negative === 0 && num.negative !== 0) return 1;
27596
27597 var res = this.ucmp(num);
27598 if (this.negative !== 0) return -res | 0;
27599 return res;
27600 };
ebd8d4e8 27601
8b095871
IC
27602 // Unsigned comparison
27603 BN.prototype.ucmp = function ucmp (num) {
27604 // At this point both numbers have the same sign
27605 if (this.length > num.length) return 1;
27606 if (this.length < num.length) return -1;
27607
27608 var res = 0;
27609 for (var i = this.length - 1; i >= 0; i--) {
27610 var a = this.words[i] | 0;
27611 var b = num.words[i] | 0;
27612
27613 if (a === b) continue;
27614 if (a < b) {
27615 res = -1;
27616 } else if (a > b) {
27617 res = 1;
27618 }
27619 break;
27620 }
27621 return res;
27622 };
ebd8d4e8 27623
8b095871
IC
27624 BN.prototype.gtn = function gtn (num) {
27625 return this.cmpn(num) === 1;
27626 };
ebd8d4e8 27627
8b095871
IC
27628 BN.prototype.gt = function gt (num) {
27629 return this.cmp(num) === 1;
27630 };
ebd8d4e8 27631
8b095871
IC
27632 BN.prototype.gten = function gten (num) {
27633 return this.cmpn(num) >= 0;
27634 };
ab78acc6 27635
8b095871
IC
27636 BN.prototype.gte = function gte (num) {
27637 return this.cmp(num) >= 0;
27638 };
ab78acc6 27639
8b095871
IC
27640 BN.prototype.ltn = function ltn (num) {
27641 return this.cmpn(num) === -1;
27642 };
ab78acc6 27643
8b095871
IC
27644 BN.prototype.lt = function lt (num) {
27645 return this.cmp(num) === -1;
27646 };
ebd8d4e8 27647
8b095871
IC
27648 BN.prototype.lten = function lten (num) {
27649 return this.cmpn(num) <= 0;
27650 };
ab78acc6 27651
8b095871
IC
27652 BN.prototype.lte = function lte (num) {
27653 return this.cmp(num) <= 0;
27654 };
ab78acc6 27655
8b095871
IC
27656 BN.prototype.eqn = function eqn (num) {
27657 return this.cmpn(num) === 0;
27658 };
ab78acc6 27659
8b095871
IC
27660 BN.prototype.eq = function eq (num) {
27661 return this.cmp(num) === 0;
27662 };
ebd8d4e8 27663
8b095871
IC
27664 //
27665 // A reduce context, could be using montgomery or something better, depending
27666 // on the `m` itself.
27667 //
27668 BN.red = function red (num) {
27669 return new Red(num);
27670 };
ab78acc6 27671
8b095871
IC
27672 BN.prototype.toRed = function toRed (ctx) {
27673 assert(!this.red, 'Already a number in reduction context');
27674 assert(this.negative === 0, 'red works only with positives');
27675 return ctx.convertTo(this)._forceRed(ctx);
27676 };
27677
27678 BN.prototype.fromRed = function fromRed () {
27679 assert(this.red, 'fromRed works only with numbers in reduction context');
27680 return this.red.convertFrom(this);
27681 };
27682
27683 BN.prototype._forceRed = function _forceRed (ctx) {
27684 this.red = ctx;
27685 return this;
27686 };
27687
27688 BN.prototype.forceRed = function forceRed (ctx) {
27689 assert(!this.red, 'Already a number in reduction context');
27690 return this._forceRed(ctx);
27691 };
27692
27693 BN.prototype.redAdd = function redAdd (num) {
27694 assert(this.red, 'redAdd works only with red numbers');
27695 return this.red.add(this, num);
27696 };
ebd8d4e8 27697
8b095871
IC
27698 BN.prototype.redIAdd = function redIAdd (num) {
27699 assert(this.red, 'redIAdd works only with red numbers');
27700 return this.red.iadd(this, num);
27701 };
ab78acc6 27702
8b095871
IC
27703 BN.prototype.redSub = function redSub (num) {
27704 assert(this.red, 'redSub works only with red numbers');
27705 return this.red.sub(this, num);
27706 };
ab78acc6 27707
8b095871
IC
27708 BN.prototype.redISub = function redISub (num) {
27709 assert(this.red, 'redISub works only with red numbers');
27710 return this.red.isub(this, num);
27711 };
ebd8d4e8 27712
8b095871
IC
27713 BN.prototype.redShl = function redShl (num) {
27714 assert(this.red, 'redShl works only with red numbers');
27715 return this.red.shl(this, num);
27716 };
ebd8d4e8 27717
8b095871
IC
27718 BN.prototype.redMul = function redMul (num) {
27719 assert(this.red, 'redMul works only with red numbers');
27720 this.red._verify2(this, num);
27721 return this.red.mul(this, num);
27722 };
ebd8d4e8 27723
8b095871
IC
27724 BN.prototype.redIMul = function redIMul (num) {
27725 assert(this.red, 'redMul works only with red numbers');
27726 this.red._verify2(this, num);
27727 return this.red.imul(this, num);
27728 };
ebd8d4e8 27729
8b095871
IC
27730 BN.prototype.redSqr = function redSqr () {
27731 assert(this.red, 'redSqr works only with red numbers');
27732 this.red._verify1(this);
27733 return this.red.sqr(this);
27734 };
ebd8d4e8 27735
8b095871
IC
27736 BN.prototype.redISqr = function redISqr () {
27737 assert(this.red, 'redISqr works only with red numbers');
27738 this.red._verify1(this);
27739 return this.red.isqr(this);
27740 };
ebd8d4e8 27741
8b095871
IC
27742 // Square root over p
27743 BN.prototype.redSqrt = function redSqrt () {
27744 assert(this.red, 'redSqrt works only with red numbers');
27745 this.red._verify1(this);
27746 return this.red.sqrt(this);
27747 };
ebd8d4e8 27748
8b095871
IC
27749 BN.prototype.redInvm = function redInvm () {
27750 assert(this.red, 'redInvm works only with red numbers');
27751 this.red._verify1(this);
27752 return this.red.invm(this);
27753 };
ebd8d4e8 27754
8b095871
IC
27755 // Return negative clone of `this` % `red modulo`
27756 BN.prototype.redNeg = function redNeg () {
27757 assert(this.red, 'redNeg works only with red numbers');
27758 this.red._verify1(this);
27759 return this.red.neg(this);
27760 };
ebd8d4e8 27761
8b095871
IC
27762 BN.prototype.redPow = function redPow (num) {
27763 assert(this.red && !num.red, 'redPow(normalNum)');
27764 this.red._verify1(this);
27765 return this.red.pow(this, num);
27766 };
ebd8d4e8 27767
8b095871
IC
27768 // Prime numbers with efficient reduction
27769 var primes = {
27770 k256: null,
27771 p224: null,
27772 p192: null,
27773 p25519: null
27774 };
ebd8d4e8 27775
8b095871
IC
27776 // Pseudo-Mersenne prime
27777 function MPrime (name, p) {
27778 // P = 2 ^ N - K
27779 this.name = name;
27780 this.p = new BN(p, 16);
27781 this.n = this.p.bitLength();
27782 this.k = new BN(1).iushln(this.n).isub(this.p);
ebd8d4e8 27783
8b095871
IC
27784 this.tmp = this._tmp();
27785 }
ebd8d4e8 27786
8b095871
IC
27787 MPrime.prototype._tmp = function _tmp () {
27788 var tmp = new BN(null);
27789 tmp.words = new Array(Math.ceil(this.n / 13));
27790 return tmp;
27791 };
ebd8d4e8 27792
8b095871
IC
27793 MPrime.prototype.ireduce = function ireduce (num) {
27794 // Assumes that `num` is less than `P^2`
27795 // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
27796 var r = num;
27797 var rlen;
ebd8d4e8 27798
8b095871
IC
27799 do {
27800 this.split(r, this.tmp);
27801 r = this.imulK(r);
27802 r = r.iadd(this.tmp);
27803 rlen = r.bitLength();
27804 } while (rlen > this.n);
27805
27806 var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
27807 if (cmp === 0) {
27808 r.words[0] = 0;
27809 r.length = 1;
27810 } else if (cmp > 0) {
27811 r.isub(this.p);
27812 } else {
27813 r.strip();
27814 }
ebd8d4e8 27815
8b095871
IC
27816 return r;
27817 };
ebd8d4e8 27818
8b095871
IC
27819 MPrime.prototype.split = function split (input, out) {
27820 input.iushrn(this.n, 0, out);
27821 };
ebd8d4e8 27822
8b095871
IC
27823 MPrime.prototype.imulK = function imulK (num) {
27824 return num.imul(this.k);
27825 };
ebd8d4e8 27826
8b095871
IC
27827 function K256 () {
27828 MPrime.call(
27829 this,
27830 'k256',
27831 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
27832 }
27833 inherits(K256, MPrime);
ebd8d4e8 27834
8b095871
IC
27835 K256.prototype.split = function split (input, output) {
27836 // 256 = 9 * 26 + 22
27837 var mask = 0x3fffff;
ebd8d4e8 27838
8b095871
IC
27839 var outLen = Math.min(input.length, 9);
27840 for (var i = 0; i < outLen; i++) {
27841 output.words[i] = input.words[i];
27842 }
27843 output.length = outLen;
ebd8d4e8 27844
8b095871
IC
27845 if (input.length <= 9) {
27846 input.words[0] = 0;
27847 input.length = 1;
27848 return;
27849 }
ebd8d4e8 27850
8b095871
IC
27851 // Shift by 9 limbs
27852 var prev = input.words[9];
27853 output.words[output.length++] = prev & mask;
ebd8d4e8 27854
8b095871
IC
27855 for (i = 10; i < input.length; i++) {
27856 var next = input.words[i] | 0;
27857 input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
27858 prev = next;
27859 }
27860 prev >>>= 22;
27861 input.words[i - 10] = prev;
27862 if (prev === 0 && input.length > 10) {
27863 input.length -= 10;
27864 } else {
27865 input.length -= 9;
27866 }
27867 };
ebd8d4e8 27868
8b095871
IC
27869 K256.prototype.imulK = function imulK (num) {
27870 // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
27871 num.words[num.length] = 0;
27872 num.words[num.length + 1] = 0;
27873 num.length += 2;
27874
27875 // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
27876 var lo = 0;
27877 for (var i = 0; i < num.length; i++) {
27878 var w = num.words[i] | 0;
27879 lo += w * 0x3d1;
27880 num.words[i] = lo & 0x3ffffff;
27881 lo = w * 0x40 + ((lo / 0x4000000) | 0);
27882 }
27883
27884 // Fast length reduction
27885 if (num.words[num.length - 1] === 0) {
27886 num.length--;
27887 if (num.words[num.length - 1] === 0) {
27888 num.length--;
27889 }
27890 }
27891 return num;
27892 };
ebd8d4e8 27893
8b095871
IC
27894 function P224 () {
27895 MPrime.call(
27896 this,
27897 'p224',
27898 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
27899 }
27900 inherits(P224, MPrime);
ebd8d4e8 27901
8b095871
IC
27902 function P192 () {
27903 MPrime.call(
27904 this,
27905 'p192',
27906 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
27907 }
27908 inherits(P192, MPrime);
ebd8d4e8 27909
8b095871
IC
27910 function P25519 () {
27911 // 2 ^ 255 - 19
27912 MPrime.call(
27913 this,
27914 '25519',
27915 '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
27916 }
27917 inherits(P25519, MPrime);
ebd8d4e8 27918
8b095871
IC
27919 P25519.prototype.imulK = function imulK (num) {
27920 // K = 0x13
27921 var carry = 0;
27922 for (var i = 0; i < num.length; i++) {
27923 var hi = (num.words[i] | 0) * 0x13 + carry;
27924 var lo = hi & 0x3ffffff;
27925 hi >>>= 26;
ebd8d4e8 27926
8b095871
IC
27927 num.words[i] = lo;
27928 carry = hi;
27929 }
27930 if (carry !== 0) {
27931 num.words[num.length++] = carry;
27932 }
27933 return num;
27934 };
ebd8d4e8 27935
8b095871
IC
27936 // Exported mostly for testing purposes, use plain name instead
27937 BN._prime = function prime (name) {
27938 // Cached version of prime
27939 if (primes[name]) return primes[name];
27940
27941 var prime;
27942 if (name === 'k256') {
27943 prime = new K256();
27944 } else if (name === 'p224') {
27945 prime = new P224();
27946 } else if (name === 'p192') {
27947 prime = new P192();
27948 } else if (name === 'p25519') {
27949 prime = new P25519();
27950 } else {
27951 throw new Error('Unknown prime ' + name);
27952 }
27953 primes[name] = prime;
ab78acc6 27954
8b095871
IC
27955 return prime;
27956 };
ab78acc6 27957
8b095871
IC
27958 //
27959 // Base reduction engine
27960 //
27961 function Red (m) {
27962 if (typeof m === 'string') {
27963 var prime = BN._prime(m);
27964 this.m = prime.p;
27965 this.prime = prime;
27966 } else {
27967 assert(m.gtn(1), 'modulus must be greater than 1');
27968 this.m = m;
27969 this.prime = null;
27970 }
27971 }
ab78acc6 27972
8b095871
IC
27973 Red.prototype._verify1 = function _verify1 (a) {
27974 assert(a.negative === 0, 'red works only with positives');
27975 assert(a.red, 'red works only with red numbers');
27976 };
ab78acc6 27977
8b095871
IC
27978 Red.prototype._verify2 = function _verify2 (a, b) {
27979 assert((a.negative | b.negative) === 0, 'red works only with positives');
27980 assert(a.red && a.red === b.red,
27981 'red works only with red numbers');
27982 };
ebd8d4e8 27983
8b095871
IC
27984 Red.prototype.imod = function imod (a) {
27985 if (this.prime) return this.prime.ireduce(a)._forceRed(this);
27986 return a.umod(this.m)._forceRed(this);
27987 };
ebd8d4e8 27988
8b095871
IC
27989 Red.prototype.neg = function neg (a) {
27990 if (a.isZero()) {
27991 return a.clone();
27992 }
ebd8d4e8 27993
8b095871
IC
27994 return this.m.sub(a)._forceRed(this);
27995 };
ab78acc6 27996
8b095871
IC
27997 Red.prototype.add = function add (a, b) {
27998 this._verify2(a, b);
ab78acc6 27999
8b095871
IC
28000 var res = a.add(b);
28001 if (res.cmp(this.m) >= 0) {
28002 res.isub(this.m);
28003 }
28004 return res._forceRed(this);
28005 };
ab78acc6 28006
8b095871
IC
28007 Red.prototype.iadd = function iadd (a, b) {
28008 this._verify2(a, b);
ab78acc6 28009
8b095871
IC
28010 var res = a.iadd(b);
28011 if (res.cmp(this.m) >= 0) {
28012 res.isub(this.m);
28013 }
28014 return res;
28015 };
ab78acc6 28016
8b095871
IC
28017 Red.prototype.sub = function sub (a, b) {
28018 this._verify2(a, b);
ab78acc6 28019
8b095871
IC
28020 var res = a.sub(b);
28021 if (res.cmpn(0) < 0) {
28022 res.iadd(this.m);
28023 }
28024 return res._forceRed(this);
28025 };
ab78acc6 28026
8b095871
IC
28027 Red.prototype.isub = function isub (a, b) {
28028 this._verify2(a, b);
ebd8d4e8 28029
8b095871
IC
28030 var res = a.isub(b);
28031 if (res.cmpn(0) < 0) {
28032 res.iadd(this.m);
28033 }
28034 return res;
28035 };
ebd8d4e8 28036
8b095871
IC
28037 Red.prototype.shl = function shl (a, num) {
28038 this._verify1(a);
28039 return this.imod(a.ushln(num));
28040 };
ebd8d4e8 28041
8b095871
IC
28042 Red.prototype.imul = function imul (a, b) {
28043 this._verify2(a, b);
28044 return this.imod(a.imul(b));
28045 };
ebd8d4e8 28046
8b095871
IC
28047 Red.prototype.mul = function mul (a, b) {
28048 this._verify2(a, b);
28049 return this.imod(a.mul(b));
28050 };
ebd8d4e8 28051
8b095871
IC
28052 Red.prototype.isqr = function isqr (a) {
28053 return this.imul(a, a.clone());
28054 };
28055
28056 Red.prototype.sqr = function sqr (a) {
28057 return this.mul(a, a);
28058 };
ebd8d4e8 28059
8b095871
IC
28060 Red.prototype.sqrt = function sqrt (a) {
28061 if (a.isZero()) return a.clone();
ebd8d4e8 28062
8b095871
IC
28063 var mod3 = this.m.andln(3);
28064 assert(mod3 % 2 === 1);
ebd8d4e8 28065
8b095871
IC
28066 // Fast case
28067 if (mod3 === 3) {
28068 var pow = this.m.add(new BN(1)).iushrn(2);
28069 return this.pow(a, pow);
28070 }
ebd8d4e8 28071
8b095871
IC
28072 // Tonelli-Shanks algorithm (Totally unoptimized and slow)
28073 //
28074 // Find Q and S, that Q * 2 ^ S = (P - 1)
28075 var q = this.m.subn(1);
28076 var s = 0;
28077 while (!q.isZero() && q.andln(1) === 0) {
28078 s++;
28079 q.iushrn(1);
28080 }
28081 assert(!q.isZero());
ebd8d4e8 28082
8b095871
IC
28083 var one = new BN(1).toRed(this);
28084 var nOne = one.redNeg();
ebd8d4e8 28085
8b095871
IC
28086 // Find quadratic non-residue
28087 // NOTE: Max is such because of generalized Riemann hypothesis.
28088 var lpow = this.m.subn(1).iushrn(1);
28089 var z = this.m.bitLength();
28090 z = new BN(2 * z * z).toRed(this);
ebd8d4e8 28091
8b095871
IC
28092 while (this.pow(z, lpow).cmp(nOne) !== 0) {
28093 z.redIAdd(nOne);
28094 }
ebd8d4e8 28095
8b095871
IC
28096 var c = this.pow(z, q);
28097 var r = this.pow(a, q.addn(1).iushrn(1));
28098 var t = this.pow(a, q);
28099 var m = s;
28100 while (t.cmp(one) !== 0) {
28101 var tmp = t;
28102 for (var i = 0; tmp.cmp(one) !== 0; i++) {
28103 tmp = tmp.redSqr();
28104 }
28105 assert(i < m);
28106 var b = this.pow(c, new BN(1).iushln(m - i - 1));
ebd8d4e8 28107
8b095871
IC
28108 r = r.redMul(b);
28109 c = b.redSqr();
28110 t = t.redMul(c);
28111 m = i;
28112 }
ebd8d4e8 28113
8b095871
IC
28114 return r;
28115 };
ebd8d4e8 28116
8b095871
IC
28117 Red.prototype.invm = function invm (a) {
28118 var inv = a._invmp(this.m);
28119 if (inv.negative !== 0) {
28120 inv.negative = 0;
28121 return this.imod(inv).redNeg();
28122 } else {
28123 return this.imod(inv);
28124 }
28125 };
ebd8d4e8 28126
8b095871
IC
28127 Red.prototype.pow = function pow (a, num) {
28128 if (num.isZero()) return new BN(1);
28129 if (num.cmpn(1) === 0) return a.clone();
ebd8d4e8 28130
8b095871
IC
28131 var windowSize = 4;
28132 var wnd = new Array(1 << windowSize);
28133 wnd[0] = new BN(1).toRed(this);
28134 wnd[1] = a;
28135 for (var i = 2; i < wnd.length; i++) {
28136 wnd[i] = this.mul(wnd[i - 1], a);
28137 }
ebd8d4e8 28138
8b095871
IC
28139 var res = wnd[0];
28140 var current = 0;
28141 var currentLen = 0;
28142 var start = num.bitLength() % 26;
28143 if (start === 0) {
28144 start = 26;
28145 }
ebd8d4e8 28146
8b095871
IC
28147 for (i = num.length - 1; i >= 0; i--) {
28148 var word = num.words[i];
28149 for (var j = start - 1; j >= 0; j--) {
28150 var bit = (word >> j) & 1;
28151 if (res !== wnd[0]) {
28152 res = this.sqr(res);
28153 }
ebd8d4e8 28154
8b095871
IC
28155 if (bit === 0 && current === 0) {
28156 currentLen = 0;
28157 continue;
28158 }
ebd8d4e8 28159
8b095871
IC
28160 current <<= 1;
28161 current |= bit;
28162 currentLen++;
28163 if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
ebd8d4e8 28164
8b095871
IC
28165 res = this.mul(res, wnd[current]);
28166 currentLen = 0;
28167 current = 0;
28168 }
28169 start = 26;
28170 }
ebd8d4e8 28171
8b095871
IC
28172 return res;
28173 };
ebd8d4e8 28174
8b095871
IC
28175 Red.prototype.convertTo = function convertTo (num) {
28176 var r = num.umod(this.m);
ebd8d4e8 28177
8b095871
IC
28178 return r === num ? r.clone() : r;
28179 };
ebd8d4e8 28180
8b095871
IC
28181 Red.prototype.convertFrom = function convertFrom (num) {
28182 var res = num.clone();
28183 res.red = null;
28184 return res;
28185 };
ebd8d4e8 28186
8b095871
IC
28187 //
28188 // Montgomery method engine
28189 //
ebd8d4e8 28190
8b095871
IC
28191 BN.mont = function mont (num) {
28192 return new Mont(num);
28193 };
ebd8d4e8 28194
8b095871
IC
28195 function Mont (m) {
28196 Red.call(this, m);
ebd8d4e8 28197
8b095871
IC
28198 this.shift = this.m.bitLength();
28199 if (this.shift % 26 !== 0) {
28200 this.shift += 26 - (this.shift % 26);
28201 }
ebd8d4e8 28202
8b095871
IC
28203 this.r = new BN(1).iushln(this.shift);
28204 this.r2 = this.imod(this.r.sqr());
28205 this.rinv = this.r._invmp(this.m);
28206
28207 this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
28208 this.minv = this.minv.umod(this.r);
28209 this.minv = this.r.sub(this.minv);
ebd8d4e8 28210 }
8b095871 28211 inherits(Mont, Red);
ebd8d4e8 28212
8b095871
IC
28213 Mont.prototype.convertTo = function convertTo (num) {
28214 return this.imod(num.ushln(this.shift));
28215 };
ab78acc6 28216
8b095871
IC
28217 Mont.prototype.convertFrom = function convertFrom (num) {
28218 var r = this.imod(num.mul(this.rinv));
28219 r.red = null;
28220 return r;
28221 };
ebd8d4e8 28222
8b095871
IC
28223 Mont.prototype.imul = function imul (a, b) {
28224 if (a.isZero() || b.isZero()) {
28225 a.words[0] = 0;
28226 a.length = 1;
28227 return a;
28228 }
ebd8d4e8 28229
8b095871
IC
28230 var t = a.imul(b);
28231 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
28232 var u = t.isub(c).iushrn(this.shift);
28233 var res = u;
ab78acc6 28234
8b095871
IC
28235 if (u.cmp(this.m) >= 0) {
28236 res = u.isub(this.m);
28237 } else if (u.cmpn(0) < 0) {
28238 res = u.iadd(this.m);
28239 }
ab78acc6 28240
8b095871
IC
28241 return res._forceRed(this);
28242 };
ab78acc6 28243
8b095871
IC
28244 Mont.prototype.mul = function mul (a, b) {
28245 if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
ab78acc6 28246
8b095871
IC
28247 var t = a.mul(b);
28248 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
28249 var u = t.isub(c).iushrn(this.shift);
28250 var res = u;
28251 if (u.cmp(this.m) >= 0) {
28252 res = u.isub(this.m);
28253 } else if (u.cmpn(0) < 0) {
28254 res = u.iadd(this.m);
28255 }
ab78acc6 28256
8b095871
IC
28257 return res._forceRed(this);
28258 };
ab78acc6 28259
8b095871
IC
28260 Mont.prototype.invm = function invm (a) {
28261 // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
28262 var res = this.imod(a._invmp(this.m).mul(this.r2));
28263 return res._forceRed(this);
28264 };
28265})(typeof module === 'undefined' || module, this);
ab78acc6 28266
8b095871
IC
28267},{}],34:[function(require,module,exports){
28268var r;
ebd8d4e8 28269
8b095871
IC
28270module.exports = function rand(len) {
28271 if (!r)
28272 r = new Rand(null);
ebd8d4e8 28273
8b095871
IC
28274 return r.generate(len);
28275};
ab78acc6 28276
8b095871
IC
28277function Rand(rand) {
28278 this.rand = rand;
ab78acc6 28279}
8b095871 28280module.exports.Rand = Rand;
ab78acc6 28281
8b095871
IC
28282Rand.prototype.generate = function generate(len) {
28283 return this._rand(len);
28284};
ab78acc6 28285
8b095871
IC
28286if (typeof self === 'object') {
28287 if (self.crypto && self.crypto.getRandomValues) {
28288 // Modern browsers
28289 Rand.prototype._rand = function _rand(n) {
28290 var arr = new Uint8Array(n);
28291 self.crypto.getRandomValues(arr);
28292 return arr;
28293 };
28294 } else if (self.msCrypto && self.msCrypto.getRandomValues) {
28295 // IE
28296 Rand.prototype._rand = function _rand(n) {
28297 var arr = new Uint8Array(n);
28298 self.msCrypto.getRandomValues(arr);
28299 return arr;
28300 };
28301 } else {
28302 // Old junk
28303 Rand.prototype._rand = function() {
28304 throw new Error('Not implemented yet');
28305 };
28306 }
28307} else {
28308 // Node.js or Web worker with no crypto support
28309 try {
28310 var crypto = require('crypto');
ab78acc6 28311
8b095871
IC
28312 Rand.prototype._rand = function _rand(n) {
28313 return crypto.randomBytes(n);
28314 };
28315 } catch (e) {
28316 // Emulate crypto API using randy
28317 Rand.prototype._rand = function _rand(n) {
28318 var res = new Uint8Array(n);
28319 for (var i = 0; i < res.length; i++)
28320 res[i] = this.rand.getByte();
28321 return res;
28322 };
28323 }
28324}
28325
28326},{"crypto":3}],35:[function(require,module,exports){
28327(function (Buffer){
28328var Transform = require('stream').Transform
28329var inherits = require('inherits')
28330var StringDecoder = require('string_decoder').StringDecoder
28331module.exports = CipherBase
28332inherits(CipherBase, Transform)
28333function CipherBase (hashMode) {
28334 Transform.call(this)
28335 this.hashMode = typeof hashMode === 'string'
28336 if (this.hashMode) {
28337 this[hashMode] = this._finalOrDigest
28338 } else {
28339 this.final = this._finalOrDigest
28340 }
28341 this._decoder = null
28342 this._encoding = null
28343}
28344CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
28345 if (typeof data === 'string') {
28346 data = new Buffer(data, inputEnc)
28347 }
28348 var outData = this._update(data)
28349 if (this.hashMode) {
28350 return this
28351 }
28352 if (outputEnc) {
28353 outData = this._toString(outData, outputEnc)
28354 }
28355 return outData
28356}
ab78acc6 28357
8b095871 28358CipherBase.prototype.setAutoPadding = function () {}
ab78acc6 28359
8b095871
IC
28360CipherBase.prototype.getAuthTag = function () {
28361 throw new Error('trying to get auth tag in unsupported state')
28362}
ab78acc6 28363
8b095871
IC
28364CipherBase.prototype.setAuthTag = function () {
28365 throw new Error('trying to set auth tag in unsupported state')
28366}
ab78acc6 28367
8b095871
IC
28368CipherBase.prototype.setAAD = function () {
28369 throw new Error('trying to set aad in unsupported state')
28370}
ab78acc6 28371
8b095871
IC
28372CipherBase.prototype._transform = function (data, _, next) {
28373 var err
28374 try {
28375 if (this.hashMode) {
28376 this._update(data)
28377 } else {
28378 this.push(this._update(data))
28379 }
28380 } catch (e) {
28381 err = e
28382 } finally {
28383 next(err)
28384 }
28385}
28386CipherBase.prototype._flush = function (done) {
28387 var err
28388 try {
28389 this.push(this._final())
28390 } catch (e) {
28391 err = e
28392 } finally {
28393 done(err)
28394 }
28395}
28396CipherBase.prototype._finalOrDigest = function (outputEnc) {
28397 var outData = this._final() || new Buffer('')
28398 if (outputEnc) {
28399 outData = this._toString(outData, outputEnc, true)
28400 }
28401 return outData
28402}
ebd8d4e8 28403
8b095871
IC
28404CipherBase.prototype._toString = function (value, enc, fin) {
28405 if (!this._decoder) {
28406 this._decoder = new StringDecoder(enc)
28407 this._encoding = enc
28408 }
28409 if (this._encoding !== enc) {
28410 throw new Error('can\'t switch encodings')
28411 }
28412 var out = this._decoder.write(value)
28413 if (fin) {
28414 out += this._decoder.end()
ab78acc6 28415 }
8b095871
IC
28416 return out
28417}
ab78acc6 28418
8b095871
IC
28419}).call(this,require("buffer").Buffer)
28420},{"buffer":5,"inherits":63,"stream":25,"string_decoder":26}],36:[function(require,module,exports){
28421(function (Buffer){
28422'use strict';
28423var inherits = require('inherits')
28424var md5 = require('./md5')
28425var rmd160 = require('ripemd160')
28426var sha = require('sha.js')
ebd8d4e8 28427
8b095871 28428var Base = require('cipher-base')
ebd8d4e8 28429
8b095871
IC
28430function HashNoConstructor(hash) {
28431 Base.call(this, 'digest')
ebd8d4e8 28432
8b095871
IC
28433 this._hash = hash
28434 this.buffers = []
28435}
ebd8d4e8 28436
8b095871 28437inherits(HashNoConstructor, Base)
ebd8d4e8 28438
8b095871
IC
28439HashNoConstructor.prototype._update = function (data) {
28440 this.buffers.push(data)
28441}
ebd8d4e8 28442
8b095871
IC
28443HashNoConstructor.prototype._final = function () {
28444 var buf = Buffer.concat(this.buffers)
28445 var r = this._hash(buf)
28446 this.buffers = null
ebd8d4e8 28447
8b095871
IC
28448 return r
28449}
ab78acc6 28450
8b095871
IC
28451function Hash(hash) {
28452 Base.call(this, 'digest')
ab78acc6 28453
8b095871
IC
28454 this._hash = hash
28455}
ab78acc6 28456
8b095871 28457inherits(Hash, Base)
ab78acc6 28458
8b095871
IC
28459Hash.prototype._update = function (data) {
28460 this._hash.update(data)
28461}
ab78acc6 28462
8b095871
IC
28463Hash.prototype._final = function () {
28464 return this._hash.digest()
28465}
ab78acc6 28466
8b095871
IC
28467module.exports = function createHash (alg) {
28468 alg = alg.toLowerCase()
28469 if ('md5' === alg) return new HashNoConstructor(md5)
28470 if ('rmd160' === alg || 'ripemd160' === alg) return new HashNoConstructor(rmd160)
28471
28472 return new Hash(sha(alg))
ab78acc6
IC
28473}
28474
8b095871
IC
28475}).call(this,require("buffer").Buffer)
28476},{"./md5":38,"buffer":5,"cipher-base":35,"inherits":63,"ripemd160":71,"sha.js":80}],37:[function(require,module,exports){
28477(function (Buffer){
28478'use strict';
28479var intSize = 4;
28480var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
28481var chrsz = 8;
ab78acc6 28482
8b095871
IC
28483function toArray(buf, bigEndian) {
28484 if ((buf.length % intSize) !== 0) {
28485 var len = buf.length + (intSize - (buf.length % intSize));
28486 buf = Buffer.concat([buf, zeroBuffer], len);
ab78acc6
IC
28487 }
28488
8b095871
IC
28489 var arr = [];
28490 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
28491 for (var i = 0; i < buf.length; i += intSize) {
28492 arr.push(fn.call(buf, i));
28493 }
28494 return arr;
ab78acc6
IC
28495}
28496
8b095871
IC
28497function toBuffer(arr, size, bigEndian) {
28498 var buf = new Buffer(size);
28499 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
28500 for (var i = 0; i < arr.length; i++) {
28501 fn.call(buf, arr[i], i * 4, true);
28502 }
28503 return buf;
28504}
ab78acc6 28505
8b095871
IC
28506function hash(buf, fn, hashSize, bigEndian) {
28507 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
28508 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
28509 return toBuffer(arr, hashSize, bigEndian);
28510}
28511exports.hash = hash;
ab78acc6 28512}).call(this,require("buffer").Buffer)
8b095871 28513},{"buffer":5}],38:[function(require,module,exports){
ab78acc6 28514'use strict';
8b095871
IC
28515/*
28516 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
28517 * Digest Algorithm, as defined in RFC 1321.
28518 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
28519 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
28520 * Distributed under the BSD License
28521 * See http://pajhome.org.uk/crypt/md5 for more info.
28522 */
ebd8d4e8 28523
8b095871 28524var helpers = require('./helpers');
ebd8d4e8 28525
8b095871
IC
28526/*
28527 * Calculate the MD5 of an array of little-endian words, and a bit length
28528 */
28529function core_md5(x, len)
28530{
28531 /* append padding */
28532 x[len >> 5] |= 0x80 << ((len) % 32);
28533 x[(((len + 64) >>> 9) << 4) + 14] = len;
ebd8d4e8 28534
8b095871
IC
28535 var a = 1732584193;
28536 var b = -271733879;
28537 var c = -1732584194;
28538 var d = 271733878;
ebd8d4e8 28539
8b095871
IC
28540 for(var i = 0; i < x.length; i += 16)
28541 {
28542 var olda = a;
28543 var oldb = b;
28544 var oldc = c;
28545 var oldd = d;
ebd8d4e8 28546
8b095871
IC
28547 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
28548 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
28549 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
28550 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
28551 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
28552 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
28553 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
28554 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
28555 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
28556 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
28557 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
28558 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
28559 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
28560 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
28561 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
28562 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
ebd8d4e8 28563
8b095871
IC
28564 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
28565 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
28566 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
28567 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
28568 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
28569 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
28570 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
28571 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
28572 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
28573 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
28574 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
28575 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
28576 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
28577 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
28578 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
28579 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
ebd8d4e8 28580
8b095871
IC
28581 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
28582 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
28583 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
28584 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
28585 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
28586 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
28587 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
28588 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
28589 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
28590 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
28591 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
28592 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
28593 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
28594 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
28595 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
28596 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
ebd8d4e8 28597
8b095871
IC
28598 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
28599 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
28600 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
28601 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
28602 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
28603 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
28604 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
28605 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
28606 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
28607 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
28608 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
28609 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
28610 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
28611 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
28612 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
28613 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
ebd8d4e8 28614
8b095871
IC
28615 a = safe_add(a, olda);
28616 b = safe_add(b, oldb);
28617 c = safe_add(c, oldc);
28618 d = safe_add(d, oldd);
ab78acc6 28619 }
8b095871 28620 return Array(a, b, c, d);
ebd8d4e8 28621
ab78acc6 28622}
ebd8d4e8 28623
8b095871
IC
28624/*
28625 * These functions implement the four basic operations the algorithm uses.
28626 */
28627function md5_cmn(q, a, b, x, s, t)
28628{
28629 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
ab78acc6 28630}
8b095871
IC
28631function md5_ff(a, b, c, d, x, s, t)
28632{
28633 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
ab78acc6 28634}
8b095871
IC
28635function md5_gg(a, b, c, d, x, s, t)
28636{
28637 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
ab78acc6 28638}
8b095871
IC
28639function md5_hh(a, b, c, d, x, s, t)
28640{
28641 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
28642}
28643function md5_ii(a, b, c, d, x, s, t)
28644{
28645 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
ab78acc6 28646}
ebd8d4e8 28647
8b095871
IC
28648/*
28649 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
28650 * to work around bugs in some JS interpreters.
28651 */
28652function safe_add(x, y)
28653{
28654 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
28655 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
28656 return (msw << 16) | (lsw & 0xFFFF);
ab78acc6 28657}
ebd8d4e8 28658
8b095871
IC
28659/*
28660 * Bitwise rotate a 32-bit number to the left.
28661 */
28662function bit_rol(num, cnt)
28663{
28664 return (num << cnt) | (num >>> (32 - cnt));
28665}
ebd8d4e8 28666
8b095871
IC
28667module.exports = function md5(buf) {
28668 return helpers.hash(buf, core_md5, 16);
28669};
28670},{"./helpers":37}],39:[function(require,module,exports){
28671'use strict';
ebd8d4e8 28672
8b095871 28673var elliptic = exports;
ebd8d4e8 28674
8b095871
IC
28675elliptic.version = require('../package.json').version;
28676elliptic.utils = require('./elliptic/utils');
28677elliptic.rand = require('brorand');
28678elliptic.hmacDRBG = require('./elliptic/hmac-drbg');
28679elliptic.curve = require('./elliptic/curve');
28680elliptic.curves = require('./elliptic/curves');
ebd8d4e8 28681
8b095871
IC
28682// Protocols
28683elliptic.ec = require('./elliptic/ec');
28684elliptic.eddsa = require('./elliptic/eddsa');
ebd8d4e8 28685
8b095871
IC
28686},{"../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){
28687'use strict';
ebd8d4e8 28688
8b095871
IC
28689var BN = require('bn.js');
28690var elliptic = require('../../elliptic');
28691var utils = elliptic.utils;
28692var getNAF = utils.getNAF;
28693var getJSF = utils.getJSF;
28694var assert = utils.assert;
28695
28696function BaseCurve(type, conf) {
28697 this.type = type;
28698 this.p = new BN(conf.p, 16);
28699
28700 // Use Montgomery, when there is no fast reduction for the prime
28701 this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
28702
28703 // Useful for many curves
28704 this.zero = new BN(0).toRed(this.red);
28705 this.one = new BN(1).toRed(this.red);
28706 this.two = new BN(2).toRed(this.red);
28707
28708 // Curve configuration, optional
28709 this.n = conf.n && new BN(conf.n, 16);
28710 this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
28711
28712 // Temporary arrays
28713 this._wnafT1 = new Array(4);
28714 this._wnafT2 = new Array(4);
28715 this._wnafT3 = new Array(4);
28716 this._wnafT4 = new Array(4);
28717
28718 // Generalized Greg Maxwell's trick
28719 var adjustCount = this.n && this.p.div(this.n);
28720 if (!adjustCount || adjustCount.cmpn(100) > 0) {
28721 this.redN = null;
28722 } else {
28723 this._maxwellTrick = true;
28724 this.redN = this.n.toRed(this.red);
ebd8d4e8 28725 }
ebd8d4e8 28726}
8b095871 28727module.exports = BaseCurve;
ebd8d4e8 28728
8b095871
IC
28729BaseCurve.prototype.point = function point() {
28730 throw new Error('Not implemented');
28731};
ebd8d4e8 28732
8b095871
IC
28733BaseCurve.prototype.validate = function validate() {
28734 throw new Error('Not implemented');
28735};
ebd8d4e8 28736
8b095871
IC
28737BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
28738 assert(p.precomputed);
28739 var doubles = p._getDoubles();
ebd8d4e8 28740
8b095871
IC
28741 var naf = getNAF(k, 1);
28742 var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);
28743 I /= 3;
ebd8d4e8 28744
8b095871
IC
28745 // Translate into more windowed form
28746 var repr = [];
28747 for (var j = 0; j < naf.length; j += doubles.step) {
28748 var nafW = 0;
28749 for (var k = j + doubles.step - 1; k >= j; k--)
28750 nafW = (nafW << 1) + naf[k];
28751 repr.push(nafW);
28752 }
ebd8d4e8 28753
8b095871
IC
28754 var a = this.jpoint(null, null, null);
28755 var b = this.jpoint(null, null, null);
28756 for (var i = I; i > 0; i--) {
28757 for (var j = 0; j < repr.length; j++) {
28758 var nafW = repr[j];
28759 if (nafW === i)
28760 b = b.mixedAdd(doubles.points[j]);
28761 else if (nafW === -i)
28762 b = b.mixedAdd(doubles.points[j].neg());
28763 }
28764 a = a.add(b);
28765 }
28766 return a.toP();
28767};
ebd8d4e8 28768
8b095871
IC
28769BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
28770 var w = 4;
ebd8d4e8 28771
8b095871
IC
28772 // Precompute window
28773 var nafPoints = p._getNAFPoints(w);
28774 w = nafPoints.wnd;
28775 var wnd = nafPoints.points;
ebd8d4e8 28776
8b095871
IC
28777 // Get NAF form
28778 var naf = getNAF(k, w);
ebd8d4e8 28779
8b095871
IC
28780 // Add `this`*(N+1) for every w-NAF index
28781 var acc = this.jpoint(null, null, null);
28782 for (var i = naf.length - 1; i >= 0; i--) {
28783 // Count zeroes
28784 for (var k = 0; i >= 0 && naf[i] === 0; i--)
28785 k++;
28786 if (i >= 0)
28787 k++;
28788 acc = acc.dblp(k);
ebd8d4e8 28789
8b095871
IC
28790 if (i < 0)
28791 break;
28792 var z = naf[i];
28793 assert(z !== 0);
28794 if (p.type === 'affine') {
28795 // J +- P
28796 if (z > 0)
28797 acc = acc.mixedAdd(wnd[(z - 1) >> 1]);
28798 else
28799 acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());
28800 } else {
28801 // J +- J
28802 if (z > 0)
28803 acc = acc.add(wnd[(z - 1) >> 1]);
28804 else
28805 acc = acc.add(wnd[(-z - 1) >> 1].neg());
28806 }
ebd8d4e8 28807 }
8b095871
IC
28808 return p.type === 'affine' ? acc.toP() : acc;
28809};
ebd8d4e8 28810
8b095871
IC
28811BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,
28812 points,
28813 coeffs,
28814 len,
28815 jacobianResult) {
28816 var wndWidth = this._wnafT1;
28817 var wnd = this._wnafT2;
28818 var naf = this._wnafT3;
28819
28820 // Fill all arrays
28821 var max = 0;
28822 for (var i = 0; i < len; i++) {
28823 var p = points[i];
28824 var nafPoints = p._getNAFPoints(defW);
28825 wndWidth[i] = nafPoints.wnd;
28826 wnd[i] = nafPoints.points;
28827 }
28828
28829 // Comb small window NAFs
28830 for (var i = len - 1; i >= 1; i -= 2) {
28831 var a = i - 1;
28832 var b = i;
28833 if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
28834 naf[a] = getNAF(coeffs[a], wndWidth[a]);
28835 naf[b] = getNAF(coeffs[b], wndWidth[b]);
28836 max = Math.max(naf[a].length, max);
28837 max = Math.max(naf[b].length, max);
28838 continue;
28839 }
ebd8d4e8 28840
8b095871
IC
28841 var comb = [
28842 points[a], /* 1 */
28843 null, /* 3 */
28844 null, /* 5 */
28845 points[b] /* 7 */
28846 ];
28847
28848 // Try to avoid Projective points, if possible
28849 if (points[a].y.cmp(points[b].y) === 0) {
28850 comb[1] = points[a].add(points[b]);
28851 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
28852 } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
28853 comb[1] = points[a].toJ().mixedAdd(points[b]);
28854 comb[2] = points[a].add(points[b].neg());
28855 } else {
28856 comb[1] = points[a].toJ().mixedAdd(points[b]);
28857 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
28858 }
ebd8d4e8 28859
8b095871
IC
28860 var index = [
28861 -3, /* -1 -1 */
28862 -1, /* -1 0 */
28863 -5, /* -1 1 */
28864 -7, /* 0 -1 */
28865 0, /* 0 0 */
28866 7, /* 0 1 */
28867 5, /* 1 -1 */
28868 1, /* 1 0 */
28869 3 /* 1 1 */
28870 ];
ebd8d4e8 28871
8b095871
IC
28872 var jsf = getJSF(coeffs[a], coeffs[b]);
28873 max = Math.max(jsf[0].length, max);
28874 naf[a] = new Array(max);
28875 naf[b] = new Array(max);
28876 for (var j = 0; j < max; j++) {
28877 var ja = jsf[0][j] | 0;
28878 var jb = jsf[1][j] | 0;
ebd8d4e8 28879
8b095871
IC
28880 naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
28881 naf[b][j] = 0;
28882 wnd[a] = comb;
28883 }
28884 }
ebd8d4e8 28885
8b095871
IC
28886 var acc = this.jpoint(null, null, null);
28887 var tmp = this._wnafT4;
28888 for (var i = max; i >= 0; i--) {
28889 var k = 0;
ebd8d4e8 28890
8b095871
IC
28891 while (i >= 0) {
28892 var zero = true;
28893 for (var j = 0; j < len; j++) {
28894 tmp[j] = naf[j][i] | 0;
28895 if (tmp[j] !== 0)
28896 zero = false;
28897 }
28898 if (!zero)
28899 break;
28900 k++;
28901 i--;
28902 }
28903 if (i >= 0)
28904 k++;
28905 acc = acc.dblp(k);
28906 if (i < 0)
28907 break;
ebd8d4e8 28908
8b095871
IC
28909 for (var j = 0; j < len; j++) {
28910 var z = tmp[j];
28911 var p;
28912 if (z === 0)
28913 continue;
28914 else if (z > 0)
28915 p = wnd[j][(z - 1) >> 1];
28916 else if (z < 0)
28917 p = wnd[j][(-z - 1) >> 1].neg();
28918
28919 if (p.type === 'affine')
28920 acc = acc.mixedAdd(p);
28921 else
28922 acc = acc.add(p);
28923 }
28924 }
28925 // Zeroify references
28926 for (var i = 0; i < len; i++)
28927 wnd[i] = null;
ebd8d4e8 28928
8b095871
IC
28929 if (jacobianResult)
28930 return acc;
28931 else
28932 return acc.toP();
28933};
ebd8d4e8 28934
8b095871
IC
28935function BasePoint(curve, type) {
28936 this.curve = curve;
28937 this.type = type;
28938 this.precomputed = null;
28939}
28940BaseCurve.BasePoint = BasePoint;
ebd8d4e8 28941
8b095871
IC
28942BasePoint.prototype.eq = function eq(/*other*/) {
28943 throw new Error('Not implemented');
28944};
ebd8d4e8 28945
8b095871
IC
28946BasePoint.prototype.validate = function validate() {
28947 return this.curve.validate(this);
28948};
ebd8d4e8 28949
8b095871
IC
28950BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
28951 bytes = utils.toArray(bytes, enc);
ebd8d4e8 28952
8b095871 28953 var len = this.p.byteLength();
ebd8d4e8 28954
8b095871
IC
28955 // uncompressed, hybrid-odd, hybrid-even
28956 if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&
28957 bytes.length - 1 === 2 * len) {
28958 if (bytes[0] === 0x06)
28959 assert(bytes[bytes.length - 1] % 2 === 0);
28960 else if (bytes[0] === 0x07)
28961 assert(bytes[bytes.length - 1] % 2 === 1);
ebd8d4e8 28962
8b095871
IC
28963 var res = this.point(bytes.slice(1, 1 + len),
28964 bytes.slice(1 + len, 1 + 2 * len));
ebd8d4e8 28965
8b095871
IC
28966 return res;
28967 } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&
28968 bytes.length - 1 === len) {
28969 return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
ebd8d4e8 28970 }
8b095871
IC
28971 throw new Error('Unknown point format');
28972};
ebd8d4e8 28973
8b095871
IC
28974BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
28975 return this.encode(enc, true);
28976};
28977
28978BasePoint.prototype._encode = function _encode(compact) {
28979 var len = this.curve.p.byteLength();
28980 var x = this.getX().toArray('be', len);
28981
28982 if (compact)
28983 return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);
28984
28985 return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;
28986};
28987
28988BasePoint.prototype.encode = function encode(enc, compact) {
28989 return utils.encode(this._encode(compact), enc);
28990};
28991
28992BasePoint.prototype.precompute = function precompute(power) {
28993 if (this.precomputed)
28994 return this;
28995
28996 var precomputed = {
28997 doubles: null,
28998 naf: null,
28999 beta: null
29000 };
29001 precomputed.naf = this._getNAFPoints(8);
29002 precomputed.doubles = this._getDoubles(4, power);
29003 precomputed.beta = this._getBeta();
29004 this.precomputed = precomputed;
29005
29006 return this;
29007};
29008
29009BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
29010 if (!this.precomputed)
29011 return false;
29012
29013 var doubles = this.precomputed.doubles;
29014 if (!doubles)
29015 return false;
29016
29017 return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
29018};
29019
29020BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
29021 if (this.precomputed && this.precomputed.doubles)
29022 return this.precomputed.doubles;
29023
29024 var doubles = [ this ];
29025 var acc = this;
29026 for (var i = 0; i < power; i += step) {
29027 for (var j = 0; j < step; j++)
29028 acc = acc.dbl();
29029 doubles.push(acc);
ebd8d4e8 29030 }
8b095871
IC
29031 return {
29032 step: step,
29033 points: doubles
29034 };
29035};
ebd8d4e8 29036
8b095871
IC
29037BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
29038 if (this.precomputed && this.precomputed.naf)
29039 return this.precomputed.naf;
ebd8d4e8 29040
8b095871
IC
29041 var res = [ this ];
29042 var max = (1 << wnd) - 1;
29043 var dbl = max === 1 ? null : this.dbl();
29044 for (var i = 1; i < max; i++)
29045 res[i] = res[i - 1].add(dbl);
29046 return {
29047 wnd: wnd,
29048 points: res
29049 };
29050};
ebd8d4e8 29051
8b095871
IC
29052BasePoint.prototype._getBeta = function _getBeta() {
29053 return null;
29054};
ebd8d4e8 29055
8b095871
IC
29056BasePoint.prototype.dblp = function dblp(k) {
29057 var r = this;
29058 for (var i = 0; i < k; i++)
29059 r = r.dbl();
29060 return r;
29061};
ebd8d4e8 29062
8b095871
IC
29063},{"../../elliptic":39,"bn.js":33}],41:[function(require,module,exports){
29064'use strict';
ebd8d4e8 29065
8b095871
IC
29066var curve = require('../curve');
29067var elliptic = require('../../elliptic');
29068var BN = require('bn.js');
29069var inherits = require('inherits');
29070var Base = curve.base;
ebd8d4e8 29071
8b095871 29072var assert = elliptic.utils.assert;
ebd8d4e8 29073
8b095871
IC
29074function EdwardsCurve(conf) {
29075 // NOTE: Important as we are creating point in Base.call()
29076 this.twisted = (conf.a | 0) !== 1;
29077 this.mOneA = this.twisted && (conf.a | 0) === -1;
29078 this.extended = this.mOneA;
29079
29080 Base.call(this, 'edwards', conf);
29081
29082 this.a = new BN(conf.a, 16).umod(this.red.m);
29083 this.a = this.a.toRed(this.red);
29084 this.c = new BN(conf.c, 16).toRed(this.red);
29085 this.c2 = this.c.redSqr();
29086 this.d = new BN(conf.d, 16).toRed(this.red);
29087 this.dd = this.d.redAdd(this.d);
29088
29089 assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
29090 this.oneC = (conf.c | 0) === 1;
ebd8d4e8 29091}
8b095871
IC
29092inherits(EdwardsCurve, Base);
29093module.exports = EdwardsCurve;
ebd8d4e8 29094
8b095871
IC
29095EdwardsCurve.prototype._mulA = function _mulA(num) {
29096 if (this.mOneA)
29097 return num.redNeg();
29098 else
29099 return this.a.redMul(num);
29100};
ebd8d4e8 29101
8b095871
IC
29102EdwardsCurve.prototype._mulC = function _mulC(num) {
29103 if (this.oneC)
29104 return num;
29105 else
29106 return this.c.redMul(num);
29107};
ebd8d4e8 29108
8b095871
IC
29109// Just for compatibility with Short curve
29110EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
29111 return this.point(x, y, z, t);
29112};
ebd8d4e8 29113
8b095871
IC
29114EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
29115 x = new BN(x, 16);
29116 if (!x.red)
29117 x = x.toRed(this.red);
ebd8d4e8 29118
8b095871
IC
29119 var x2 = x.redSqr();
29120 var rhs = this.c2.redSub(this.a.redMul(x2));
29121 var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
29122
29123 var y2 = rhs.redMul(lhs.redInvm());
29124 var y = y2.redSqrt();
29125 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
29126 throw new Error('invalid point');
29127
29128 var isOdd = y.fromRed().isOdd();
29129 if (odd && !isOdd || !odd && isOdd)
29130 y = y.redNeg();
29131
29132 return this.point(x, y);
29133};
29134
29135EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
29136 y = new BN(y, 16);
29137 if (!y.red)
29138 y = y.toRed(this.red);
29139
29140 // x^2 = (y^2 - 1) / (d y^2 + 1)
29141 var y2 = y.redSqr();
29142 var lhs = y2.redSub(this.one);
29143 var rhs = y2.redMul(this.d).redAdd(this.one);
29144 var x2 = lhs.redMul(rhs.redInvm());
29145
29146 if (x2.cmp(this.zero) === 0) {
29147 if (odd)
29148 throw new Error('invalid point');
29149 else
29150 return this.point(this.zero, y);
ebd8d4e8
IC
29151 }
29152
8b095871
IC
29153 var x = x2.redSqrt();
29154 if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
29155 throw new Error('invalid point');
ebd8d4e8 29156
8b095871
IC
29157 if (x.isOdd() !== odd)
29158 x = x.redNeg();
ebd8d4e8 29159
8b095871
IC
29160 return this.point(x, y);
29161};
ebd8d4e8 29162
8b095871
IC
29163EdwardsCurve.prototype.validate = function validate(point) {
29164 if (point.isInfinity())
29165 return true;
ebd8d4e8 29166
8b095871
IC
29167 // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)
29168 point.normalize();
ebd8d4e8 29169
8b095871
IC
29170 var x2 = point.x.redSqr();
29171 var y2 = point.y.redSqr();
29172 var lhs = x2.redMul(this.a).redAdd(y2);
29173 var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
ebd8d4e8 29174
8b095871
IC
29175 return lhs.cmp(rhs) === 0;
29176};
ebd8d4e8 29177
8b095871
IC
29178function Point(curve, x, y, z, t) {
29179 Base.BasePoint.call(this, curve, 'projective');
29180 if (x === null && y === null && z === null) {
29181 this.x = this.curve.zero;
29182 this.y = this.curve.one;
29183 this.z = this.curve.one;
29184 this.t = this.curve.zero;
29185 this.zOne = true;
29186 } else {
29187 this.x = new BN(x, 16);
29188 this.y = new BN(y, 16);
29189 this.z = z ? new BN(z, 16) : this.curve.one;
29190 this.t = t && new BN(t, 16);
29191 if (!this.x.red)
29192 this.x = this.x.toRed(this.curve.red);
29193 if (!this.y.red)
29194 this.y = this.y.toRed(this.curve.red);
29195 if (!this.z.red)
29196 this.z = this.z.toRed(this.curve.red);
29197 if (this.t && !this.t.red)
29198 this.t = this.t.toRed(this.curve.red);
29199 this.zOne = this.z === this.curve.one;
29200
29201 // Use extended coordinates
29202 if (this.curve.extended && !this.t) {
29203 this.t = this.x.redMul(this.y);
29204 if (!this.zOne)
29205 this.t = this.t.redMul(this.z.redInvm());
29206 }
29207 }
29208}
29209inherits(Point, Base.BasePoint);
29210
29211EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
29212 return Point.fromJSON(this, obj);
29213};
29214
29215EdwardsCurve.prototype.point = function point(x, y, z, t) {
29216 return new Point(this, x, y, z, t);
29217};
29218
29219Point.fromJSON = function fromJSON(curve, obj) {
29220 return new Point(curve, obj[0], obj[1], obj[2]);
29221};
29222
29223Point.prototype.inspect = function inspect() {
29224 if (this.isInfinity())
29225 return '<EC Point Infinity>';
29226 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
29227 ' y: ' + this.y.fromRed().toString(16, 2) +
29228 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
29229};
29230
29231Point.prototype.isInfinity = function isInfinity() {
29232 // XXX This code assumes that zero is always zero in red
29233 return this.x.cmpn(0) === 0 &&
29234 this.y.cmp(this.z) === 0;
29235};
29236
29237Point.prototype._extDbl = function _extDbl() {
29238 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
29239 // #doubling-dbl-2008-hwcd
29240 // 4M + 4S
29241
29242 // A = X1^2
29243 var a = this.x.redSqr();
29244 // B = Y1^2
29245 var b = this.y.redSqr();
29246 // C = 2 * Z1^2
29247 var c = this.z.redSqr();
29248 c = c.redIAdd(c);
29249 // D = a * A
29250 var d = this.curve._mulA(a);
29251 // E = (X1 + Y1)^2 - A - B
29252 var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
29253 // G = D + B
29254 var g = d.redAdd(b);
29255 // F = G - C
29256 var f = g.redSub(c);
29257 // H = D - B
29258 var h = d.redSub(b);
29259 // X3 = E * F
29260 var nx = e.redMul(f);
29261 // Y3 = G * H
29262 var ny = g.redMul(h);
29263 // T3 = E * H
29264 var nt = e.redMul(h);
29265 // Z3 = F * G
29266 var nz = f.redMul(g);
29267 return this.curve.point(nx, ny, nz, nt);
29268};
29269
29270Point.prototype._projDbl = function _projDbl() {
29271 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
29272 // #doubling-dbl-2008-bbjlp
29273 // #doubling-dbl-2007-bl
29274 // and others
29275 // Generally 3M + 4S or 2M + 4S
29276
29277 // B = (X1 + Y1)^2
29278 var b = this.x.redAdd(this.y).redSqr();
29279 // C = X1^2
29280 var c = this.x.redSqr();
29281 // D = Y1^2
29282 var d = this.y.redSqr();
29283
29284 var nx;
29285 var ny;
29286 var nz;
29287 if (this.curve.twisted) {
29288 // E = a * C
29289 var e = this.curve._mulA(c);
29290 // F = E + D
29291 var f = e.redAdd(d);
29292 if (this.zOne) {
29293 // X3 = (B - C - D) * (F - 2)
29294 nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
29295 // Y3 = F * (E - D)
29296 ny = f.redMul(e.redSub(d));
29297 // Z3 = F^2 - 2 * F
29298 nz = f.redSqr().redSub(f).redSub(f);
29299 } else {
29300 // H = Z1^2
29301 var h = this.z.redSqr();
29302 // J = F - 2 * H
29303 var j = f.redSub(h).redISub(h);
29304 // X3 = (B-C-D)*J
29305 nx = b.redSub(c).redISub(d).redMul(j);
29306 // Y3 = F * (E - D)
29307 ny = f.redMul(e.redSub(d));
29308 // Z3 = F * J
29309 nz = f.redMul(j);
29310 }
29311 } else {
29312 // E = C + D
29313 var e = c.redAdd(d);
29314 // H = (c * Z1)^2
29315 var h = this.curve._mulC(this.c.redMul(this.z)).redSqr();
29316 // J = E - 2 * H
29317 var j = e.redSub(h).redSub(h);
29318 // X3 = c * (B - E) * J
29319 nx = this.curve._mulC(b.redISub(e)).redMul(j);
29320 // Y3 = c * E * (C - D)
29321 ny = this.curve._mulC(e).redMul(c.redISub(d));
29322 // Z3 = E * J
29323 nz = e.redMul(j);
29324 }
29325 return this.curve.point(nx, ny, nz);
29326};
29327
29328Point.prototype.dbl = function dbl() {
29329 if (this.isInfinity())
29330 return this;
29331
29332 // Double in extended coordinates
29333 if (this.curve.extended)
29334 return this._extDbl();
29335 else
29336 return this._projDbl();
29337};
29338
29339Point.prototype._extAdd = function _extAdd(p) {
29340 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
29341 // #addition-add-2008-hwcd-3
29342 // 8M
29343
29344 // A = (Y1 - X1) * (Y2 - X2)
29345 var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
29346 // B = (Y1 + X1) * (Y2 + X2)
29347 var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
29348 // C = T1 * k * T2
29349 var c = this.t.redMul(this.curve.dd).redMul(p.t);
29350 // D = Z1 * 2 * Z2
29351 var d = this.z.redMul(p.z.redAdd(p.z));
29352 // E = B - A
29353 var e = b.redSub(a);
29354 // F = D - C
29355 var f = d.redSub(c);
29356 // G = D + C
29357 var g = d.redAdd(c);
29358 // H = B + A
29359 var h = b.redAdd(a);
29360 // X3 = E * F
29361 var nx = e.redMul(f);
29362 // Y3 = G * H
29363 var ny = g.redMul(h);
29364 // T3 = E * H
29365 var nt = e.redMul(h);
29366 // Z3 = F * G
29367 var nz = f.redMul(g);
29368 return this.curve.point(nx, ny, nz, nt);
29369};
29370
29371Point.prototype._projAdd = function _projAdd(p) {
29372 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
29373 // #addition-add-2008-bbjlp
29374 // #addition-add-2007-bl
29375 // 10M + 1S
29376
29377 // A = Z1 * Z2
29378 var a = this.z.redMul(p.z);
29379 // B = A^2
29380 var b = a.redSqr();
29381 // C = X1 * X2
29382 var c = this.x.redMul(p.x);
29383 // D = Y1 * Y2
29384 var d = this.y.redMul(p.y);
29385 // E = d * C * D
29386 var e = this.curve.d.redMul(c).redMul(d);
29387 // F = B - E
29388 var f = b.redSub(e);
29389 // G = B + E
29390 var g = b.redAdd(e);
29391 // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)
29392 var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
29393 var nx = a.redMul(f).redMul(tmp);
29394 var ny;
29395 var nz;
29396 if (this.curve.twisted) {
29397 // Y3 = A * G * (D - a * C)
29398 ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
29399 // Z3 = F * G
29400 nz = f.redMul(g);
29401 } else {
29402 // Y3 = A * G * (D - C)
29403 ny = a.redMul(g).redMul(d.redSub(c));
29404 // Z3 = c * F * G
29405 nz = this.curve._mulC(f).redMul(g);
ebd8d4e8 29406 }
8b095871
IC
29407 return this.curve.point(nx, ny, nz);
29408};
ebd8d4e8 29409
8b095871
IC
29410Point.prototype.add = function add(p) {
29411 if (this.isInfinity())
29412 return p;
29413 if (p.isInfinity())
29414 return this;
ebd8d4e8 29415
8b095871
IC
29416 if (this.curve.extended)
29417 return this._extAdd(p);
29418 else
29419 return this._projAdd(p);
29420};
ebd8d4e8 29421
8b095871
IC
29422Point.prototype.mul = function mul(k) {
29423 if (this._hasDoubles(k))
29424 return this.curve._fixedNafMul(this, k);
29425 else
29426 return this.curve._wnafMul(this, k);
29427};
ebd8d4e8 29428
8b095871
IC
29429Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
29430 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);
29431};
ebd8d4e8 29432
8b095871
IC
29433Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
29434 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);
29435};
ebd8d4e8 29436
8b095871
IC
29437Point.prototype.normalize = function normalize() {
29438 if (this.zOne)
29439 return this;
29440
29441 // Normalize coordinates
29442 var zi = this.z.redInvm();
29443 this.x = this.x.redMul(zi);
29444 this.y = this.y.redMul(zi);
29445 if (this.t)
29446 this.t = this.t.redMul(zi);
29447 this.z = this.curve.one;
29448 this.zOne = true;
29449 return this;
29450};
29451
29452Point.prototype.neg = function neg() {
29453 return this.curve.point(this.x.redNeg(),
29454 this.y,
29455 this.z,
29456 this.t && this.t.redNeg());
29457};
29458
29459Point.prototype.getX = function getX() {
29460 this.normalize();
29461 return this.x.fromRed();
29462};
29463
29464Point.prototype.getY = function getY() {
29465 this.normalize();
29466 return this.y.fromRed();
29467};
29468
29469Point.prototype.eq = function eq(other) {
29470 return this === other ||
29471 this.getX().cmp(other.getX()) === 0 &&
29472 this.getY().cmp(other.getY()) === 0;
29473};
29474
29475Point.prototype.eqXToP = function eqXToP(x) {
29476 var rx = x.toRed(this.curve.red).redMul(this.z);
29477 if (this.x.cmp(rx) === 0)
29478 return true;
ebd8d4e8 29479
8b095871
IC
29480 var xc = x.clone();
29481 var t = this.curve.redN.redMul(this.z);
29482 for (;;) {
29483 xc.iadd(this.curve.n);
29484 if (xc.cmp(this.curve.p) >= 0)
29485 return false;
ebd8d4e8 29486
8b095871
IC
29487 rx.redIAdd(t);
29488 if (this.x.cmp(rx) === 0)
29489 return true;
ebd8d4e8 29490 }
8b095871
IC
29491 return false;
29492};
ebd8d4e8 29493
8b095871
IC
29494// Compatibility with BaseCurve
29495Point.prototype.toP = Point.prototype.normalize;
29496Point.prototype.mixedAdd = Point.prototype.add;
ebd8d4e8 29497
8b095871
IC
29498},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],42:[function(require,module,exports){
29499'use strict';
ebd8d4e8 29500
8b095871 29501var curve = exports;
ebd8d4e8 29502
8b095871
IC
29503curve.base = require('./base');
29504curve.short = require('./short');
29505curve.mont = require('./mont');
29506curve.edwards = require('./edwards');
ebd8d4e8 29507
8b095871
IC
29508},{"./base":40,"./edwards":41,"./mont":43,"./short":44}],43:[function(require,module,exports){
29509'use strict';
ebd8d4e8 29510
8b095871
IC
29511var curve = require('../curve');
29512var BN = require('bn.js');
29513var inherits = require('inherits');
29514var Base = curve.base;
ebd8d4e8 29515
8b095871
IC
29516var elliptic = require('../../elliptic');
29517var utils = elliptic.utils;
ebd8d4e8 29518
8b095871
IC
29519function MontCurve(conf) {
29520 Base.call(this, 'mont', conf);
ebd8d4e8 29521
8b095871
IC
29522 this.a = new BN(conf.a, 16).toRed(this.red);
29523 this.b = new BN(conf.b, 16).toRed(this.red);
29524 this.i4 = new BN(4).toRed(this.red).redInvm();
29525 this.two = new BN(2).toRed(this.red);
29526 this.a24 = this.i4.redMul(this.a.redAdd(this.two));
ebd8d4e8 29527}
8b095871
IC
29528inherits(MontCurve, Base);
29529module.exports = MontCurve;
ebd8d4e8 29530
8b095871
IC
29531MontCurve.prototype.validate = function validate(point) {
29532 var x = point.normalize().x;
29533 var x2 = x.redSqr();
29534 var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
29535 var y = rhs.redSqrt();
ebd8d4e8 29536
8b095871
IC
29537 return y.redSqr().cmp(rhs) === 0;
29538};
ebd8d4e8 29539
8b095871
IC
29540function Point(curve, x, z) {
29541 Base.BasePoint.call(this, curve, 'projective');
29542 if (x === null && z === null) {
29543 this.x = this.curve.one;
29544 this.z = this.curve.zero;
29545 } else {
29546 this.x = new BN(x, 16);
29547 this.z = new BN(z, 16);
29548 if (!this.x.red)
29549 this.x = this.x.toRed(this.curve.red);
29550 if (!this.z.red)
29551 this.z = this.z.toRed(this.curve.red);
29552 }
29553}
29554inherits(Point, Base.BasePoint);
ebd8d4e8 29555
8b095871
IC
29556MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
29557 return this.point(utils.toArray(bytes, enc), 1);
29558};
ebd8d4e8 29559
8b095871
IC
29560MontCurve.prototype.point = function point(x, z) {
29561 return new Point(this, x, z);
29562};
ebd8d4e8 29563
8b095871
IC
29564MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
29565 return Point.fromJSON(this, obj);
29566};
ebd8d4e8 29567
8b095871
IC
29568Point.prototype.precompute = function precompute() {
29569 // No-op
29570};
ebd8d4e8 29571
8b095871
IC
29572Point.prototype._encode = function _encode() {
29573 return this.getX().toArray('be', this.curve.p.byteLength());
29574};
ebd8d4e8 29575
8b095871
IC
29576Point.fromJSON = function fromJSON(curve, obj) {
29577 return new Point(curve, obj[0], obj[1] || curve.one);
29578};
ebd8d4e8 29579
8b095871
IC
29580Point.prototype.inspect = function inspect() {
29581 if (this.isInfinity())
29582 return '<EC Point Infinity>';
29583 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
29584 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
29585};
ebd8d4e8 29586
8b095871
IC
29587Point.prototype.isInfinity = function isInfinity() {
29588 // XXX This code assumes that zero is always zero in red
29589 return this.z.cmpn(0) === 0;
29590};
ebd8d4e8 29591
8b095871
IC
29592Point.prototype.dbl = function dbl() {
29593 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3
29594 // 2M + 2S + 4A
29595
29596 // A = X1 + Z1
29597 var a = this.x.redAdd(this.z);
29598 // AA = A^2
29599 var aa = a.redSqr();
29600 // B = X1 - Z1
29601 var b = this.x.redSub(this.z);
29602 // BB = B^2
29603 var bb = b.redSqr();
29604 // C = AA - BB
29605 var c = aa.redSub(bb);
29606 // X3 = AA * BB
29607 var nx = aa.redMul(bb);
29608 // Z3 = C * (BB + A24 * C)
29609 var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
29610 return this.curve.point(nx, nz);
29611};
ebd8d4e8 29612
8b095871
IC
29613Point.prototype.add = function add() {
29614 throw new Error('Not supported on Montgomery curve');
29615};
ebd8d4e8 29616
8b095871
IC
29617Point.prototype.diffAdd = function diffAdd(p, diff) {
29618 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3
29619 // 4M + 2S + 6A
29620
29621 // A = X2 + Z2
29622 var a = this.x.redAdd(this.z);
29623 // B = X2 - Z2
29624 var b = this.x.redSub(this.z);
29625 // C = X3 + Z3
29626 var c = p.x.redAdd(p.z);
29627 // D = X3 - Z3
29628 var d = p.x.redSub(p.z);
29629 // DA = D * A
29630 var da = d.redMul(a);
29631 // CB = C * B
29632 var cb = c.redMul(b);
29633 // X5 = Z1 * (DA + CB)^2
29634 var nx = diff.z.redMul(da.redAdd(cb).redSqr());
29635 // Z5 = X1 * (DA - CB)^2
29636 var nz = diff.x.redMul(da.redISub(cb).redSqr());
29637 return this.curve.point(nx, nz);
29638};
ebd8d4e8 29639
8b095871
IC
29640Point.prototype.mul = function mul(k) {
29641 var t = k.clone();
29642 var a = this; // (N / 2) * Q + Q
29643 var b = this.curve.point(null, null); // (N / 2) * Q
29644 var c = this; // Q
29645
29646 for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
29647 bits.push(t.andln(1));
29648
29649 for (var i = bits.length - 1; i >= 0; i--) {
29650 if (bits[i] === 0) {
29651 // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q
29652 a = a.diffAdd(b, c);
29653 // N * Q = 2 * ((N / 2) * Q + Q))
29654 b = b.dbl();
29655 } else {
29656 // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)
29657 b = a.diffAdd(b, c);
29658 // N * Q + Q = 2 * ((N / 2) * Q + Q)
29659 a = a.dbl();
29660 }
ebd8d4e8 29661 }
8b095871
IC
29662 return b;
29663};
ebd8d4e8 29664
8b095871
IC
29665Point.prototype.mulAdd = function mulAdd() {
29666 throw new Error('Not supported on Montgomery curve');
29667};
ebd8d4e8 29668
8b095871
IC
29669Point.prototype.jumlAdd = function jumlAdd() {
29670 throw new Error('Not supported on Montgomery curve');
29671};
ebd8d4e8 29672
8b095871
IC
29673Point.prototype.eq = function eq(other) {
29674 return this.getX().cmp(other.getX()) === 0;
29675};
ebd8d4e8 29676
8b095871
IC
29677Point.prototype.normalize = function normalize() {
29678 this.x = this.x.redMul(this.z.redInvm());
29679 this.z = this.curve.one;
29680 return this;
29681};
ebd8d4e8 29682
8b095871
IC
29683Point.prototype.getX = function getX() {
29684 // Normalize coordinates
29685 this.normalize();
29686
29687 return this.x.fromRed();
29688};
29689
29690},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],44:[function(require,module,exports){
ab78acc6 29691'use strict';
ebd8d4e8 29692
8b095871
IC
29693var curve = require('../curve');
29694var elliptic = require('../../elliptic');
29695var BN = require('bn.js');
29696var inherits = require('inherits');
29697var Base = curve.base;
ab78acc6 29698
8b095871 29699var assert = elliptic.utils.assert;
ebd8d4e8 29700
8b095871
IC
29701function ShortCurve(conf) {
29702 Base.call(this, 'short', conf);
ebd8d4e8 29703
8b095871
IC
29704 this.a = new BN(conf.a, 16).toRed(this.red);
29705 this.b = new BN(conf.b, 16).toRed(this.red);
29706 this.tinv = this.two.redInvm();
ab78acc6 29707
8b095871
IC
29708 this.zeroA = this.a.fromRed().cmpn(0) === 0;
29709 this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
ab78acc6 29710
8b095871
IC
29711 // If the curve is endomorphic, precalculate beta and lambda
29712 this.endo = this._getEndomorphism(conf);
29713 this._endoWnafT1 = new Array(4);
29714 this._endoWnafT2 = new Array(4);
ebd8d4e8 29715}
8b095871
IC
29716inherits(ShortCurve, Base);
29717module.exports = ShortCurve;
ebd8d4e8 29718
8b095871
IC
29719ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
29720 // No efficient endomorphism
29721 if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
29722 return;
ebd8d4e8 29723
8b095871
IC
29724 // Compute beta and lambda, that lambda * P = (beta * Px; Py)
29725 var beta;
29726 var lambda;
29727 if (conf.beta) {
29728 beta = new BN(conf.beta, 16).toRed(this.red);
29729 } else {
29730 var betas = this._getEndoRoots(this.p);
29731 // Choose the smallest beta
29732 beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
29733 beta = beta.toRed(this.red);
29734 }
29735 if (conf.lambda) {
29736 lambda = new BN(conf.lambda, 16);
29737 } else {
29738 // Choose the lambda that is matching selected beta
29739 var lambdas = this._getEndoRoots(this.n);
29740 if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
29741 lambda = lambdas[0];
29742 } else {
29743 lambda = lambdas[1];
29744 assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
29745 }
29746 }
ab78acc6 29747
8b095871
IC
29748 // Get basis vectors, used for balanced length-two representation
29749 var basis;
29750 if (conf.basis) {
29751 basis = conf.basis.map(function(vec) {
29752 return {
29753 a: new BN(vec.a, 16),
29754 b: new BN(vec.b, 16)
29755 };
29756 });
29757 } else {
29758 basis = this._getEndoBasis(lambda);
29759 }
ab78acc6 29760
8b095871
IC
29761 return {
29762 beta: beta,
29763 lambda: lambda,
29764 basis: basis
29765 };
29766};
ab78acc6 29767
8b095871
IC
29768ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
29769 // Find roots of for x^2 + x + 1 in F
29770 // Root = (-1 +- Sqrt(-3)) / 2
29771 //
29772 var red = num === this.p ? this.red : BN.mont(num);
29773 var tinv = new BN(2).toRed(red).redInvm();
29774 var ntinv = tinv.redNeg();
ab78acc6 29775
8b095871 29776 var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
ab78acc6 29777
8b095871
IC
29778 var l1 = ntinv.redAdd(s).fromRed();
29779 var l2 = ntinv.redSub(s).fromRed();
29780 return [ l1, l2 ];
29781};
ab78acc6 29782
8b095871
IC
29783ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
29784 // aprxSqrt >= sqrt(this.n)
29785 var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
29786
29787 // 3.74
29788 // Run EGCD, until r(L + 1) < aprxSqrt
29789 var u = lambda;
29790 var v = this.n.clone();
29791 var x1 = new BN(1);
29792 var y1 = new BN(0);
29793 var x2 = new BN(0);
29794 var y2 = new BN(1);
29795
29796 // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
29797 var a0;
29798 var b0;
29799 // First vector
29800 var a1;
29801 var b1;
29802 // Second vector
29803 var a2;
29804 var b2;
29805
29806 var prevR;
29807 var i = 0;
29808 var r;
29809 var x;
29810 while (u.cmpn(0) !== 0) {
29811 var q = v.div(u);
29812 r = v.sub(q.mul(u));
29813 x = x2.sub(q.mul(x1));
29814 var y = y2.sub(q.mul(y1));
29815
29816 if (!a1 && r.cmp(aprxSqrt) < 0) {
29817 a0 = prevR.neg();
29818 b0 = x1;
29819 a1 = r.neg();
29820 b1 = x;
29821 } else if (a1 && ++i === 2) {
29822 break;
ab78acc6 29823 }
8b095871 29824 prevR = r;
ab78acc6 29825
8b095871
IC
29826 v = u;
29827 u = r;
29828 x2 = x1;
29829 x1 = x;
29830 y2 = y1;
29831 y1 = y;
ebd8d4e8 29832 }
8b095871
IC
29833 a2 = r.neg();
29834 b2 = x;
ab78acc6 29835
8b095871
IC
29836 var len1 = a1.sqr().add(b1.sqr());
29837 var len2 = a2.sqr().add(b2.sqr());
29838 if (len2.cmp(len1) >= 0) {
29839 a2 = a0;
29840 b2 = b0;
29841 }
ebd8d4e8 29842
8b095871
IC
29843 // Normalize signs
29844 if (a1.negative) {
29845 a1 = a1.neg();
29846 b1 = b1.neg();
29847 }
29848 if (a2.negative) {
29849 a2 = a2.neg();
29850 b2 = b2.neg();
29851 }
ebd8d4e8 29852
8b095871
IC
29853 return [
29854 { a: a1, b: b1 },
29855 { a: a2, b: b2 }
29856 ];
29857};
ab78acc6 29858
8b095871
IC
29859ShortCurve.prototype._endoSplit = function _endoSplit(k) {
29860 var basis = this.endo.basis;
29861 var v1 = basis[0];
29862 var v2 = basis[1];
ab78acc6 29863
8b095871
IC
29864 var c1 = v2.b.mul(k).divRound(this.n);
29865 var c2 = v1.b.neg().mul(k).divRound(this.n);
ab78acc6 29866
8b095871
IC
29867 var p1 = c1.mul(v1.a);
29868 var p2 = c2.mul(v2.a);
29869 var q1 = c1.mul(v1.b);
29870 var q2 = c2.mul(v2.b);
ab78acc6 29871
8b095871
IC
29872 // Calculate answer
29873 var k1 = k.sub(p1).sub(p2);
29874 var k2 = q1.add(q2).neg();
29875 return { k1: k1, k2: k2 };
29876};
ab78acc6 29877
8b095871
IC
29878ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
29879 x = new BN(x, 16);
29880 if (!x.red)
29881 x = x.toRed(this.red);
ab78acc6 29882
8b095871
IC
29883 var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
29884 var y = y2.redSqrt();
29885 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
29886 throw new Error('invalid point');
ab78acc6 29887
8b095871
IC
29888 // XXX Is there any way to tell if the number is odd without converting it
29889 // to non-red form?
29890 var isOdd = y.fromRed().isOdd();
29891 if (odd && !isOdd || !odd && isOdd)
29892 y = y.redNeg();
ab78acc6 29893
8b095871
IC
29894 return this.point(x, y);
29895};
ab78acc6 29896
8b095871
IC
29897ShortCurve.prototype.validate = function validate(point) {
29898 if (point.inf)
29899 return true;
ab78acc6 29900
8b095871
IC
29901 var x = point.x;
29902 var y = point.y;
ab78acc6 29903
8b095871
IC
29904 var ax = this.a.redMul(x);
29905 var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
29906 return y.redSqr().redISub(rhs).cmpn(0) === 0;
29907};
ab78acc6 29908
8b095871
IC
29909ShortCurve.prototype._endoWnafMulAdd =
29910 function _endoWnafMulAdd(points, coeffs, jacobianResult) {
29911 var npoints = this._endoWnafT1;
29912 var ncoeffs = this._endoWnafT2;
29913 for (var i = 0; i < points.length; i++) {
29914 var split = this._endoSplit(coeffs[i]);
29915 var p = points[i];
29916 var beta = p._getBeta();
ab78acc6 29917
8b095871
IC
29918 if (split.k1.negative) {
29919 split.k1.ineg();
29920 p = p.neg(true);
29921 }
29922 if (split.k2.negative) {
29923 split.k2.ineg();
29924 beta = beta.neg(true);
ab78acc6 29925 }
ab78acc6 29926
8b095871
IC
29927 npoints[i * 2] = p;
29928 npoints[i * 2 + 1] = beta;
29929 ncoeffs[i * 2] = split.k1;
29930 ncoeffs[i * 2 + 1] = split.k2;
29931 }
29932 var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);
ab78acc6 29933
8b095871
IC
29934 // Clean-up references to points and coefficients
29935 for (var j = 0; j < i * 2; j++) {
29936 npoints[j] = null;
29937 ncoeffs[j] = null;
29938 }
29939 return res;
29940};
29941
29942function Point(curve, x, y, isRed) {
29943 Base.BasePoint.call(this, curve, 'affine');
29944 if (x === null && y === null) {
29945 this.x = null;
29946 this.y = null;
29947 this.inf = true;
29948 } else {
29949 this.x = new BN(x, 16);
29950 this.y = new BN(y, 16);
29951 // Force redgomery representation when loading from JSON
29952 if (isRed) {
29953 this.x.forceRed(this.curve.red);
29954 this.y.forceRed(this.curve.red);
ab78acc6 29955 }
8b095871
IC
29956 if (!this.x.red)
29957 this.x = this.x.toRed(this.curve.red);
29958 if (!this.y.red)
29959 this.y = this.y.toRed(this.curve.red);
29960 this.inf = false;
29961 }
29962}
29963inherits(Point, Base.BasePoint);
ab78acc6 29964
8b095871
IC
29965ShortCurve.prototype.point = function point(x, y, isRed) {
29966 return new Point(this, x, y, isRed);
29967};
ab78acc6 29968
8b095871
IC
29969ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
29970 return Point.fromJSON(this, obj, red);
29971};
ab78acc6 29972
8b095871
IC
29973Point.prototype._getBeta = function _getBeta() {
29974 if (!this.curve.endo)
29975 return;
ab78acc6 29976
8b095871
IC
29977 var pre = this.precomputed;
29978 if (pre && pre.beta)
29979 return pre.beta;
ab78acc6 29980
8b095871
IC
29981 var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
29982 if (pre) {
29983 var curve = this.curve;
29984 var endoMul = function(p) {
29985 return curve.point(p.x.redMul(curve.endo.beta), p.y);
29986 };
29987 pre.beta = beta;
29988 beta.precomputed = {
29989 beta: null,
29990 naf: pre.naf && {
29991 wnd: pre.naf.wnd,
29992 points: pre.naf.points.map(endoMul)
29993 },
29994 doubles: pre.doubles && {
29995 step: pre.doubles.step,
29996 points: pre.doubles.points.map(endoMul)
29997 }
ab78acc6 29998 };
ab78acc6 29999 }
8b095871 30000 return beta;
ab78acc6
IC
30001};
30002
8b095871
IC
30003Point.prototype.toJSON = function toJSON() {
30004 if (!this.precomputed)
30005 return [ this.x, this.y ];
ab78acc6 30006
8b095871
IC
30007 return [ this.x, this.y, this.precomputed && {
30008 doubles: this.precomputed.doubles && {
30009 step: this.precomputed.doubles.step,
30010 points: this.precomputed.doubles.points.slice(1)
30011 },
30012 naf: this.precomputed.naf && {
30013 wnd: this.precomputed.naf.wnd,
30014 points: this.precomputed.naf.points.slice(1)
30015 }
30016 } ];
30017};
ab78acc6 30018
8b095871
IC
30019Point.fromJSON = function fromJSON(curve, obj, red) {
30020 if (typeof obj === 'string')
30021 obj = JSON.parse(obj);
30022 var res = curve.point(obj[0], obj[1], red);
30023 if (!obj[2])
30024 return res;
ab78acc6 30025
8b095871
IC
30026 function obj2point(obj) {
30027 return curve.point(obj[0], obj[1], red);
30028 }
30029
30030 var pre = obj[2];
30031 res.precomputed = {
30032 beta: null,
30033 doubles: pre.doubles && {
30034 step: pre.doubles.step,
30035 points: [ res ].concat(pre.doubles.points.map(obj2point))
30036 },
30037 naf: pre.naf && {
30038 wnd: pre.naf.wnd,
30039 points: [ res ].concat(pre.naf.points.map(obj2point))
ab78acc6 30040 }
8b095871
IC
30041 };
30042 return res;
30043};
ab78acc6 30044
8b095871
IC
30045Point.prototype.inspect = function inspect() {
30046 if (this.isInfinity())
30047 return '<EC Point Infinity>';
30048 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
30049 ' y: ' + this.y.fromRed().toString(16, 2) + '>';
30050};
ab78acc6 30051
8b095871
IC
30052Point.prototype.isInfinity = function isInfinity() {
30053 return this.inf;
30054};
ebd8d4e8 30055
8b095871
IC
30056Point.prototype.add = function add(p) {
30057 // O + P = P
30058 if (this.inf)
30059 return p;
ab78acc6 30060
8b095871
IC
30061 // P + O = P
30062 if (p.inf)
30063 return this;
ab78acc6 30064
8b095871
IC
30065 // P + P = 2P
30066 if (this.eq(p))
30067 return this.dbl();
ab78acc6 30068
8b095871
IC
30069 // P + (-P) = O
30070 if (this.neg().eq(p))
30071 return this.curve.point(null, null);
ab78acc6 30072
8b095871
IC
30073 // P + Q = O
30074 if (this.x.cmp(p.x) === 0)
30075 return this.curve.point(null, null);
ebd8d4e8 30076
8b095871
IC
30077 var c = this.y.redSub(p.y);
30078 if (c.cmpn(0) !== 0)
30079 c = c.redMul(this.x.redSub(p.x).redInvm());
30080 var nx = c.redSqr().redISub(this.x).redISub(p.x);
30081 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
30082 return this.curve.point(nx, ny);
30083};
ab78acc6 30084
8b095871
IC
30085Point.prototype.dbl = function dbl() {
30086 if (this.inf)
30087 return this;
ebd8d4e8 30088
8b095871
IC
30089 // 2P = O
30090 var ys1 = this.y.redAdd(this.y);
30091 if (ys1.cmpn(0) === 0)
30092 return this.curve.point(null, null);
ebd8d4e8 30093
8b095871 30094 var a = this.curve.a;
ebd8d4e8 30095
8b095871
IC
30096 var x2 = this.x.redSqr();
30097 var dyinv = ys1.redInvm();
30098 var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
ebd8d4e8 30099
8b095871
IC
30100 var nx = c.redSqr().redISub(this.x.redAdd(this.x));
30101 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
30102 return this.curve.point(nx, ny);
30103};
ebd8d4e8 30104
8b095871
IC
30105Point.prototype.getX = function getX() {
30106 return this.x.fromRed();
30107};
ab78acc6 30108
8b095871
IC
30109Point.prototype.getY = function getY() {
30110 return this.y.fromRed();
30111};
ebd8d4e8 30112
8b095871
IC
30113Point.prototype.mul = function mul(k) {
30114 k = new BN(k, 16);
ebd8d4e8 30115
8b095871
IC
30116 if (this._hasDoubles(k))
30117 return this.curve._fixedNafMul(this, k);
30118 else if (this.curve.endo)
30119 return this.curve._endoWnafMulAdd([ this ], [ k ]);
30120 else
30121 return this.curve._wnafMul(this, k);
30122};
ebd8d4e8 30123
8b095871
IC
30124Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
30125 var points = [ this, p2 ];
30126 var coeffs = [ k1, k2 ];
30127 if (this.curve.endo)
30128 return this.curve._endoWnafMulAdd(points, coeffs);
30129 else
30130 return this.curve._wnafMulAdd(1, points, coeffs, 2);
30131};
ebd8d4e8 30132
8b095871
IC
30133Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
30134 var points = [ this, p2 ];
30135 var coeffs = [ k1, k2 ];
30136 if (this.curve.endo)
30137 return this.curve._endoWnafMulAdd(points, coeffs, true);
30138 else
30139 return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
30140};
ebd8d4e8 30141
8b095871
IC
30142Point.prototype.eq = function eq(p) {
30143 return this === p ||
30144 this.inf === p.inf &&
30145 (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
30146};
ebd8d4e8 30147
8b095871
IC
30148Point.prototype.neg = function neg(_precompute) {
30149 if (this.inf)
30150 return this;
ebd8d4e8 30151
8b095871
IC
30152 var res = this.curve.point(this.x, this.y.redNeg());
30153 if (_precompute && this.precomputed) {
30154 var pre = this.precomputed;
30155 var negate = function(p) {
30156 return p.neg();
30157 };
30158 res.precomputed = {
30159 naf: pre.naf && {
30160 wnd: pre.naf.wnd,
30161 points: pre.naf.points.map(negate)
30162 },
30163 doubles: pre.doubles && {
30164 step: pre.doubles.step,
30165 points: pre.doubles.points.map(negate)
30166 }
30167 };
30168 }
30169 return res;
30170};
ebd8d4e8 30171
8b095871
IC
30172Point.prototype.toJ = function toJ() {
30173 if (this.inf)
30174 return this.curve.jpoint(null, null, null);
ebd8d4e8 30175
8b095871
IC
30176 var res = this.curve.jpoint(this.x, this.y, this.curve.one);
30177 return res;
30178};
ebd8d4e8 30179
8b095871
IC
30180function JPoint(curve, x, y, z) {
30181 Base.BasePoint.call(this, curve, 'jacobian');
30182 if (x === null && y === null && z === null) {
30183 this.x = this.curve.one;
30184 this.y = this.curve.one;
30185 this.z = new BN(0);
30186 } else {
30187 this.x = new BN(x, 16);
30188 this.y = new BN(y, 16);
30189 this.z = new BN(z, 16);
30190 }
30191 if (!this.x.red)
30192 this.x = this.x.toRed(this.curve.red);
30193 if (!this.y.red)
30194 this.y = this.y.toRed(this.curve.red);
30195 if (!this.z.red)
30196 this.z = this.z.toRed(this.curve.red);
ebd8d4e8 30197
8b095871 30198 this.zOne = this.z === this.curve.one;
ab78acc6 30199}
8b095871 30200inherits(JPoint, Base.BasePoint);
ab78acc6 30201
8b095871
IC
30202ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
30203 return new JPoint(this, x, y, z);
30204};
ab78acc6 30205
8b095871
IC
30206JPoint.prototype.toP = function toP() {
30207 if (this.isInfinity())
30208 return this.curve.point(null, null);
ab78acc6 30209
8b095871
IC
30210 var zinv = this.z.redInvm();
30211 var zinv2 = zinv.redSqr();
30212 var ax = this.x.redMul(zinv2);
30213 var ay = this.y.redMul(zinv2).redMul(zinv);
ab78acc6 30214
8b095871
IC
30215 return this.curve.point(ax, ay);
30216};
ab78acc6 30217
8b095871
IC
30218JPoint.prototype.neg = function neg() {
30219 return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
30220};
ab78acc6 30221
8b095871
IC
30222JPoint.prototype.add = function add(p) {
30223 // O + P = P
30224 if (this.isInfinity())
30225 return p;
ab78acc6 30226
8b095871
IC
30227 // P + O = P
30228 if (p.isInfinity())
30229 return this;
ab78acc6 30230
8b095871
IC
30231 // 12M + 4S + 7A
30232 var pz2 = p.z.redSqr();
30233 var z2 = this.z.redSqr();
30234 var u1 = this.x.redMul(pz2);
30235 var u2 = p.x.redMul(z2);
30236 var s1 = this.y.redMul(pz2.redMul(p.z));
30237 var s2 = p.y.redMul(z2.redMul(this.z));
30238
30239 var h = u1.redSub(u2);
30240 var r = s1.redSub(s2);
30241 if (h.cmpn(0) === 0) {
30242 if (r.cmpn(0) !== 0)
30243 return this.curve.jpoint(null, null, null);
30244 else
30245 return this.dbl();
30246 }
ab78acc6 30247
8b095871
IC
30248 var h2 = h.redSqr();
30249 var h3 = h2.redMul(h);
30250 var v = u1.redMul(h2);
ab78acc6 30251
8b095871
IC
30252 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
30253 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
30254 var nz = this.z.redMul(p.z).redMul(h);
ab78acc6 30255
8b095871
IC
30256 return this.curve.jpoint(nx, ny, nz);
30257};
ab78acc6 30258
8b095871
IC
30259JPoint.prototype.mixedAdd = function mixedAdd(p) {
30260 // O + P = P
30261 if (this.isInfinity())
30262 return p.toJ();
ab78acc6 30263
8b095871
IC
30264 // P + O = P
30265 if (p.isInfinity())
30266 return this;
ab78acc6 30267
8b095871
IC
30268 // 8M + 3S + 7A
30269 var z2 = this.z.redSqr();
30270 var u1 = this.x;
30271 var u2 = p.x.redMul(z2);
30272 var s1 = this.y;
30273 var s2 = p.y.redMul(z2).redMul(this.z);
30274
30275 var h = u1.redSub(u2);
30276 var r = s1.redSub(s2);
30277 if (h.cmpn(0) === 0) {
30278 if (r.cmpn(0) !== 0)
30279 return this.curve.jpoint(null, null, null);
30280 else
30281 return this.dbl();
ab78acc6
IC
30282 }
30283
8b095871
IC
30284 var h2 = h.redSqr();
30285 var h3 = h2.redMul(h);
30286 var v = u1.redMul(h2);
ab78acc6 30287
8b095871
IC
30288 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
30289 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
30290 var nz = this.z.redMul(h);
ab78acc6 30291
8b095871
IC
30292 return this.curve.jpoint(nx, ny, nz);
30293};
ab78acc6 30294
8b095871
IC
30295JPoint.prototype.dblp = function dblp(pow) {
30296 if (pow === 0)
30297 return this;
30298 if (this.isInfinity())
30299 return this;
30300 if (!pow)
30301 return this.dbl();
30302
30303 if (this.curve.zeroA || this.curve.threeA) {
30304 var r = this;
30305 for (var i = 0; i < pow; i++)
30306 r = r.dbl();
30307 return r;
30308 }
30309
30310 // 1M + 2S + 1A + N * (4S + 5M + 8A)
30311 // N = 1 => 6M + 6S + 9A
30312 var a = this.curve.a;
30313 var tinv = this.curve.tinv;
30314
30315 var jx = this.x;
30316 var jy = this.y;
30317 var jz = this.z;
30318 var jz4 = jz.redSqr().redSqr();
30319
30320 // Reuse results
30321 var jyd = jy.redAdd(jy);
30322 for (var i = 0; i < pow; i++) {
30323 var jx2 = jx.redSqr();
30324 var jyd2 = jyd.redSqr();
30325 var jyd4 = jyd2.redSqr();
30326 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
30327
30328 var t1 = jx.redMul(jyd2);
30329 var nx = c.redSqr().redISub(t1.redAdd(t1));
30330 var t2 = t1.redISub(nx);
30331 var dny = c.redMul(t2);
30332 dny = dny.redIAdd(dny).redISub(jyd4);
30333 var nz = jyd.redMul(jz);
30334 if (i + 1 < pow)
30335 jz4 = jz4.redMul(jyd4);
30336
30337 jx = nx;
30338 jz = nz;
30339 jyd = dny;
30340 }
30341
30342 return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
30343};
ab78acc6 30344
8b095871
IC
30345JPoint.prototype.dbl = function dbl() {
30346 if (this.isInfinity())
30347 return this;
ab78acc6 30348
8b095871
IC
30349 if (this.curve.zeroA)
30350 return this._zeroDbl();
30351 else if (this.curve.threeA)
30352 return this._threeDbl();
30353 else
30354 return this._dbl();
30355};
ab78acc6 30356
8b095871
IC
30357JPoint.prototype._zeroDbl = function _zeroDbl() {
30358 var nx;
30359 var ny;
30360 var nz;
30361 // Z = 1
30362 if (this.zOne) {
30363 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
30364 // #doubling-mdbl-2007-bl
30365 // 1M + 5S + 14A
30366
30367 // XX = X1^2
30368 var xx = this.x.redSqr();
30369 // YY = Y1^2
30370 var yy = this.y.redSqr();
30371 // YYYY = YY^2
30372 var yyyy = yy.redSqr();
30373 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
30374 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
30375 s = s.redIAdd(s);
30376 // M = 3 * XX + a; a = 0
30377 var m = xx.redAdd(xx).redIAdd(xx);
30378 // T = M ^ 2 - 2*S
30379 var t = m.redSqr().redISub(s).redISub(s);
30380
30381 // 8 * YYYY
30382 var yyyy8 = yyyy.redIAdd(yyyy);
30383 yyyy8 = yyyy8.redIAdd(yyyy8);
30384 yyyy8 = yyyy8.redIAdd(yyyy8);
30385
30386 // X3 = T
30387 nx = t;
30388 // Y3 = M * (S - T) - 8 * YYYY
30389 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
30390 // Z3 = 2*Y1
30391 nz = this.y.redAdd(this.y);
30392 } else {
30393 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
30394 // #doubling-dbl-2009-l
30395 // 2M + 5S + 13A
30396
30397 // A = X1^2
30398 var a = this.x.redSqr();
30399 // B = Y1^2
30400 var b = this.y.redSqr();
30401 // C = B^2
30402 var c = b.redSqr();
30403 // D = 2 * ((X1 + B)^2 - A - C)
30404 var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
30405 d = d.redIAdd(d);
30406 // E = 3 * A
30407 var e = a.redAdd(a).redIAdd(a);
30408 // F = E^2
30409 var f = e.redSqr();
30410
30411 // 8 * C
30412 var c8 = c.redIAdd(c);
30413 c8 = c8.redIAdd(c8);
30414 c8 = c8.redIAdd(c8);
30415
30416 // X3 = F - 2 * D
30417 nx = f.redISub(d).redISub(d);
30418 // Y3 = E * (D - X3) - 8 * C
30419 ny = e.redMul(d.redISub(nx)).redISub(c8);
30420 // Z3 = 2 * Y1 * Z1
30421 nz = this.y.redMul(this.z);
30422 nz = nz.redIAdd(nz);
30423 }
30424
30425 return this.curve.jpoint(nx, ny, nz);
30426};
ab78acc6 30427
8b095871
IC
30428JPoint.prototype._threeDbl = function _threeDbl() {
30429 var nx;
30430 var ny;
30431 var nz;
30432 // Z = 1
30433 if (this.zOne) {
30434 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html
30435 // #doubling-mdbl-2007-bl
30436 // 1M + 5S + 15A
30437
30438 // XX = X1^2
30439 var xx = this.x.redSqr();
30440 // YY = Y1^2
30441 var yy = this.y.redSqr();
30442 // YYYY = YY^2
30443 var yyyy = yy.redSqr();
30444 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
30445 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
30446 s = s.redIAdd(s);
30447 // M = 3 * XX + a
30448 var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
30449 // T = M^2 - 2 * S
30450 var t = m.redSqr().redISub(s).redISub(s);
30451 // X3 = T
30452 nx = t;
30453 // Y3 = M * (S - T) - 8 * YYYY
30454 var yyyy8 = yyyy.redIAdd(yyyy);
30455 yyyy8 = yyyy8.redIAdd(yyyy8);
30456 yyyy8 = yyyy8.redIAdd(yyyy8);
30457 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
30458 // Z3 = 2 * Y1
30459 nz = this.y.redAdd(this.y);
30460 } else {
30461 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
30462 // 3M + 5S
30463
30464 // delta = Z1^2
30465 var delta = this.z.redSqr();
30466 // gamma = Y1^2
30467 var gamma = this.y.redSqr();
30468 // beta = X1 * gamma
30469 var beta = this.x.redMul(gamma);
30470 // alpha = 3 * (X1 - delta) * (X1 + delta)
30471 var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
30472 alpha = alpha.redAdd(alpha).redIAdd(alpha);
30473 // X3 = alpha^2 - 8 * beta
30474 var beta4 = beta.redIAdd(beta);
30475 beta4 = beta4.redIAdd(beta4);
30476 var beta8 = beta4.redAdd(beta4);
30477 nx = alpha.redSqr().redISub(beta8);
30478 // Z3 = (Y1 + Z1)^2 - gamma - delta
30479 nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
30480 // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2
30481 var ggamma8 = gamma.redSqr();
30482 ggamma8 = ggamma8.redIAdd(ggamma8);
30483 ggamma8 = ggamma8.redIAdd(ggamma8);
30484 ggamma8 = ggamma8.redIAdd(ggamma8);
30485 ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
30486 }
30487
30488 return this.curve.jpoint(nx, ny, nz);
30489};
ab78acc6 30490
8b095871
IC
30491JPoint.prototype._dbl = function _dbl() {
30492 var a = this.curve.a;
ab78acc6 30493
8b095871
IC
30494 // 4M + 6S + 10A
30495 var jx = this.x;
30496 var jy = this.y;
30497 var jz = this.z;
30498 var jz4 = jz.redSqr().redSqr();
ab78acc6 30499
8b095871
IC
30500 var jx2 = jx.redSqr();
30501 var jy2 = jy.redSqr();
ebd8d4e8 30502
8b095871 30503 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
ebd8d4e8 30504
8b095871
IC
30505 var jxd4 = jx.redAdd(jx);
30506 jxd4 = jxd4.redIAdd(jxd4);
30507 var t1 = jxd4.redMul(jy2);
30508 var nx = c.redSqr().redISub(t1.redAdd(t1));
30509 var t2 = t1.redISub(nx);
ebd8d4e8 30510
8b095871
IC
30511 var jyd8 = jy2.redSqr();
30512 jyd8 = jyd8.redIAdd(jyd8);
30513 jyd8 = jyd8.redIAdd(jyd8);
30514 jyd8 = jyd8.redIAdd(jyd8);
30515 var ny = c.redMul(t2).redISub(jyd8);
30516 var nz = jy.redAdd(jy).redMul(jz);
ebd8d4e8 30517
8b095871
IC
30518 return this.curve.jpoint(nx, ny, nz);
30519};
ebd8d4e8 30520
8b095871
IC
30521JPoint.prototype.trpl = function trpl() {
30522 if (!this.curve.zeroA)
30523 return this.dbl().add(this);
30524
30525 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl
30526 // 5M + 10S + ...
30527
30528 // XX = X1^2
30529 var xx = this.x.redSqr();
30530 // YY = Y1^2
30531 var yy = this.y.redSqr();
30532 // ZZ = Z1^2
30533 var zz = this.z.redSqr();
30534 // YYYY = YY^2
30535 var yyyy = yy.redSqr();
30536 // M = 3 * XX + a * ZZ2; a = 0
30537 var m = xx.redAdd(xx).redIAdd(xx);
30538 // MM = M^2
30539 var mm = m.redSqr();
30540 // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM
30541 var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
30542 e = e.redIAdd(e);
30543 e = e.redAdd(e).redIAdd(e);
30544 e = e.redISub(mm);
30545 // EE = E^2
30546 var ee = e.redSqr();
30547 // T = 16*YYYY
30548 var t = yyyy.redIAdd(yyyy);
30549 t = t.redIAdd(t);
30550 t = t.redIAdd(t);
30551 t = t.redIAdd(t);
30552 // U = (M + E)^2 - MM - EE - T
30553 var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
30554 // X3 = 4 * (X1 * EE - 4 * YY * U)
30555 var yyu4 = yy.redMul(u);
30556 yyu4 = yyu4.redIAdd(yyu4);
30557 yyu4 = yyu4.redIAdd(yyu4);
30558 var nx = this.x.redMul(ee).redISub(yyu4);
30559 nx = nx.redIAdd(nx);
30560 nx = nx.redIAdd(nx);
30561 // Y3 = 8 * Y1 * (U * (T - U) - E * EE)
30562 var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
30563 ny = ny.redIAdd(ny);
30564 ny = ny.redIAdd(ny);
30565 ny = ny.redIAdd(ny);
30566 // Z3 = (Z1 + E)^2 - ZZ - EE
30567 var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
30568
30569 return this.curve.jpoint(nx, ny, nz);
30570};
ebd8d4e8 30571
8b095871
IC
30572JPoint.prototype.mul = function mul(k, kbase) {
30573 k = new BN(k, kbase);
ebd8d4e8 30574
8b095871
IC
30575 return this.curve._wnafMul(this, k);
30576};
ebd8d4e8 30577
8b095871
IC
30578JPoint.prototype.eq = function eq(p) {
30579 if (p.type === 'affine')
30580 return this.eq(p.toJ());
ebd8d4e8 30581
8b095871
IC
30582 if (this === p)
30583 return true;
ebd8d4e8 30584
8b095871
IC
30585 // x1 * z2^2 == x2 * z1^2
30586 var z2 = this.z.redSqr();
30587 var pz2 = p.z.redSqr();
30588 if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
30589 return false;
ebd8d4e8 30590
8b095871
IC
30591 // y1 * z2^3 == y2 * z1^3
30592 var z3 = z2.redMul(this.z);
30593 var pz3 = pz2.redMul(p.z);
30594 return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
30595};
ab78acc6 30596
8b095871
IC
30597JPoint.prototype.eqXToP = function eqXToP(x) {
30598 var zs = this.z.redSqr();
30599 var rx = x.toRed(this.curve.red).redMul(zs);
30600 if (this.x.cmp(rx) === 0)
30601 return true;
ebd8d4e8 30602
8b095871
IC
30603 var xc = x.clone();
30604 var t = this.curve.redN.redMul(zs);
30605 for (;;) {
30606 xc.iadd(this.curve.n);
30607 if (xc.cmp(this.curve.p) >= 0)
30608 return false;
ebd8d4e8 30609
8b095871
IC
30610 rx.redIAdd(t);
30611 if (this.x.cmp(rx) === 0)
30612 return true;
30613 }
30614 return false;
30615};
ebd8d4e8 30616
8b095871
IC
30617JPoint.prototype.inspect = function inspect() {
30618 if (this.isInfinity())
30619 return '<EC JPoint Infinity>';
30620 return '<EC JPoint x: ' + this.x.toString(16, 2) +
30621 ' y: ' + this.y.toString(16, 2) +
30622 ' z: ' + this.z.toString(16, 2) + '>';
30623};
ebd8d4e8 30624
8b095871
IC
30625JPoint.prototype.isInfinity = function isInfinity() {
30626 // XXX This code assumes that zero is always zero in red
30627 return this.z.cmpn(0) === 0;
30628};
ebd8d4e8 30629
8b095871
IC
30630},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],45:[function(require,module,exports){
30631'use strict';
ebd8d4e8 30632
8b095871 30633var curves = exports;
ebd8d4e8 30634
8b095871
IC
30635var hash = require('hash.js');
30636var elliptic = require('../elliptic');
ebd8d4e8 30637
8b095871 30638var assert = elliptic.utils.assert;
ebd8d4e8 30639
8b095871
IC
30640function PresetCurve(options) {
30641 if (options.type === 'short')
30642 this.curve = new elliptic.curve.short(options);
30643 else if (options.type === 'edwards')
30644 this.curve = new elliptic.curve.edwards(options);
30645 else
30646 this.curve = new elliptic.curve.mont(options);
30647 this.g = this.curve.g;
30648 this.n = this.curve.n;
30649 this.hash = options.hash;
30650
30651 assert(this.g.validate(), 'Invalid curve');
30652 assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');
30653}
30654curves.PresetCurve = PresetCurve;
30655
30656function defineCurve(name, options) {
30657 Object.defineProperty(curves, name, {
30658 configurable: true,
30659 enumerable: true,
30660 get: function() {
30661 var curve = new PresetCurve(options);
30662 Object.defineProperty(curves, name, {
30663 configurable: true,
30664 enumerable: true,
30665 value: curve
30666 });
30667 return curve;
30668 }
30669 });
ebd8d4e8
IC
30670}
30671
8b095871
IC
30672defineCurve('p192', {
30673 type: 'short',
30674 prime: 'p192',
30675 p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
30676 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
30677 b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
30678 n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
30679 hash: hash.sha256,
30680 gRed: false,
30681 g: [
30682 '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',
30683 '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'
30684 ]
30685});
ebd8d4e8 30686
8b095871
IC
30687defineCurve('p224', {
30688 type: 'short',
30689 prime: 'p224',
30690 p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
30691 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
30692 b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
30693 n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
30694 hash: hash.sha256,
30695 gRed: false,
30696 g: [
30697 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',
30698 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'
30699 ]
30700});
ebd8d4e8 30701
8b095871
IC
30702defineCurve('p256', {
30703 type: 'short',
30704 prime: null,
30705 p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
30706 a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
30707 b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
30708 n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
30709 hash: hash.sha256,
30710 gRed: false,
30711 g: [
30712 '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',
30713 '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'
30714 ]
30715});
ebd8d4e8 30716
8b095871
IC
30717defineCurve('p384', {
30718 type: 'short',
30719 prime: null,
30720 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
30721 'fffffffe ffffffff 00000000 00000000 ffffffff',
30722 a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
30723 'fffffffe ffffffff 00000000 00000000 fffffffc',
30724 b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +
30725 '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
30726 n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +
30727 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
30728 hash: hash.sha384,
30729 gRed: false,
30730 g: [
30731 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +
30732 '5502f25d bf55296c 3a545e38 72760ab7',
30733 '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +
30734 '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'
30735 ]
30736});
ebd8d4e8 30737
8b095871
IC
30738defineCurve('p521', {
30739 type: 'short',
30740 prime: null,
30741 p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
30742 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
30743 'ffffffff ffffffff ffffffff ffffffff ffffffff',
30744 a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
30745 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
30746 'ffffffff ffffffff ffffffff ffffffff fffffffc',
30747 b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +
30748 '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +
30749 '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
30750 n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
30751 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +
30752 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
30753 hash: hash.sha512,
30754 gRed: false,
30755 g: [
30756 '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +
30757 '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +
30758 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',
30759 '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +
30760 '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +
30761 '3fad0761 353c7086 a272c240 88be9476 9fd16650'
30762 ]
30763});
ebd8d4e8 30764
8b095871
IC
30765defineCurve('curve25519', {
30766 type: 'mont',
30767 prime: 'p25519',
30768 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
30769 a: '76d06',
30770 b: '1',
30771 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
30772 hash: hash.sha256,
30773 gRed: false,
30774 g: [
30775 '9'
30776 ]
30777});
ebd8d4e8 30778
8b095871
IC
30779defineCurve('ed25519', {
30780 type: 'edwards',
30781 prime: 'p25519',
30782 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
30783 a: '-1',
30784 c: '1',
30785 // -121665 * (121666^(-1)) (mod P)
30786 d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
30787 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
30788 hash: hash.sha256,
30789 gRed: false,
30790 g: [
30791 '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',
30792
30793 // 4/5
30794 '6666666666666666666666666666666666666666666666666666666666666658'
30795 ]
30796});
ebd8d4e8 30797
8b095871
IC
30798var pre;
30799try {
30800 pre = require('./precomputed/secp256k1');
30801} catch (e) {
30802 pre = undefined;
30803}
30804
30805defineCurve('secp256k1', {
30806 type: 'short',
30807 prime: 'k256',
30808 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
30809 a: '0',
30810 b: '7',
30811 n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
30812 h: '1',
30813 hash: hash.sha256,
30814
30815 // Precomputed endomorphism
30816 beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
30817 lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
30818 basis: [
30819 {
30820 a: '3086d221a7d46bcde86c90e49284eb15',
30821 b: '-e4437ed6010e88286f547fa90abfe4c3'
30822 },
30823 {
30824 a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
30825 b: '3086d221a7d46bcde86c90e49284eb15'
30826 }
30827 ],
ebd8d4e8 30828
8b095871
IC
30829 gRed: false,
30830 g: [
30831 '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
30832 '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
30833 pre
30834 ]
30835});
ebd8d4e8 30836
8b095871
IC
30837},{"../elliptic":39,"./precomputed/secp256k1":53,"hash.js":57}],46:[function(require,module,exports){
30838'use strict';
ebd8d4e8 30839
8b095871
IC
30840var BN = require('bn.js');
30841var elliptic = require('../../elliptic');
30842var utils = elliptic.utils;
30843var assert = utils.assert;
ebd8d4e8 30844
8b095871
IC
30845var KeyPair = require('./key');
30846var Signature = require('./signature');
ebd8d4e8 30847
8b095871
IC
30848function EC(options) {
30849 if (!(this instanceof EC))
30850 return new EC(options);
ebd8d4e8 30851
8b095871
IC
30852 // Shortcut `elliptic.ec(curve-name)`
30853 if (typeof options === 'string') {
30854 assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);
30855
30856 options = elliptic.curves[options];
ebd8d4e8
IC
30857 }
30858
8b095871
IC
30859 // Shortcut for `elliptic.ec(elliptic.curves.curveName)`
30860 if (options instanceof elliptic.curves.PresetCurve)
30861 options = { curve: options };
ebd8d4e8 30862
8b095871
IC
30863 this.curve = options.curve.curve;
30864 this.n = this.curve.n;
30865 this.nh = this.n.ushrn(1);
30866 this.g = this.curve.g;
ebd8d4e8 30867
8b095871
IC
30868 // Point on curve
30869 this.g = options.curve.g;
30870 this.g.precompute(options.curve.n.bitLength() + 1);
ebd8d4e8 30871
8b095871
IC
30872 // Hash for function for DRBG
30873 this.hash = options.hash || options.curve.hash;
ebd8d4e8 30874}
8b095871 30875module.exports = EC;
ebd8d4e8 30876
8b095871
IC
30877EC.prototype.keyPair = function keyPair(options) {
30878 return new KeyPair(this, options);
30879};
30880
30881EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
30882 return KeyPair.fromPrivate(this, priv, enc);
30883};
30884
30885EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
30886 return KeyPair.fromPublic(this, pub, enc);
30887};
30888
30889EC.prototype.genKeyPair = function genKeyPair(options) {
30890 if (!options)
30891 options = {};
30892
30893 // Instantiate Hmac_DRBG
30894 var drbg = new elliptic.hmacDRBG({
30895 hash: this.hash,
30896 pers: options.pers,
30897 entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),
30898 nonce: this.n.toArray()
30899 });
ebd8d4e8 30900
8b095871
IC
30901 var bytes = this.n.byteLength();
30902 var ns2 = this.n.sub(new BN(2));
30903 do {
30904 var priv = new BN(drbg.generate(bytes));
30905 if (priv.cmp(ns2) > 0)
30906 continue;
ebd8d4e8 30907
8b095871
IC
30908 priv.iaddn(1);
30909 return this.keyFromPrivate(priv);
30910 } while (true);
30911};
ebd8d4e8 30912
8b095871
IC
30913EC.prototype._truncateToN = function truncateToN(msg, truncOnly) {
30914 var delta = msg.byteLength() * 8 - this.n.bitLength();
30915 if (delta > 0)
30916 msg = msg.ushrn(delta);
30917 if (!truncOnly && msg.cmp(this.n) >= 0)
30918 return msg.sub(this.n);
30919 else
30920 return msg;
30921};
ebd8d4e8 30922
8b095871
IC
30923EC.prototype.sign = function sign(msg, key, enc, options) {
30924 if (typeof enc === 'object') {
30925 options = enc;
30926 enc = null;
ebd8d4e8 30927 }
8b095871
IC
30928 if (!options)
30929 options = {};
ebd8d4e8 30930
8b095871
IC
30931 key = this.keyFromPrivate(key, enc);
30932 msg = this._truncateToN(new BN(msg, 16));
ebd8d4e8 30933
8b095871
IC
30934 // Zero-extend key to provide enough entropy
30935 var bytes = this.n.byteLength();
30936 var bkey = key.getPrivate().toArray('be', bytes);
ab78acc6 30937
8b095871
IC
30938 // Zero-extend nonce to have the same byte size as N
30939 var nonce = msg.toArray('be', bytes);
ab78acc6 30940
8b095871
IC
30941 // Instantiate Hmac_DRBG
30942 var drbg = new elliptic.hmacDRBG({
30943 hash: this.hash,
30944 entropy: bkey,
30945 nonce: nonce,
30946 pers: options.pers,
30947 persEnc: options.persEnc
30948 });
ab78acc6 30949
8b095871
IC
30950 // Number of bytes to generate
30951 var ns1 = this.n.sub(new BN(1));
ebd8d4e8 30952
8b095871
IC
30953 for (var iter = 0; true; iter++) {
30954 var k = options.k ?
30955 options.k(iter) :
30956 new BN(drbg.generate(this.n.byteLength()));
30957 k = this._truncateToN(k, true);
30958 if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
30959 continue;
ebd8d4e8 30960
8b095871
IC
30961 var kp = this.g.mul(k);
30962 if (kp.isInfinity())
30963 continue;
ebd8d4e8 30964
8b095871
IC
30965 var kpX = kp.getX();
30966 var r = kpX.umod(this.n);
30967 if (r.cmpn(0) === 0)
30968 continue;
ebd8d4e8 30969
8b095871
IC
30970 var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
30971 s = s.umod(this.n);
30972 if (s.cmpn(0) === 0)
30973 continue;
ebd8d4e8 30974
8b095871
IC
30975 var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |
30976 (kpX.cmp(r) !== 0 ? 2 : 0);
ebd8d4e8 30977
8b095871
IC
30978 // Use complement of `s`, if it is > `n / 2`
30979 if (options.canonical && s.cmp(this.nh) > 0) {
30980 s = this.n.sub(s);
30981 recoveryParam ^= 1;
30982 }
ebd8d4e8 30983
8b095871
IC
30984 return new Signature({ r: r, s: s, recoveryParam: recoveryParam });
30985 }
30986};
ebd8d4e8 30987
8b095871
IC
30988EC.prototype.verify = function verify(msg, signature, key, enc) {
30989 msg = this._truncateToN(new BN(msg, 16));
30990 key = this.keyFromPublic(key, enc);
30991 signature = new Signature(signature, 'hex');
ebd8d4e8 30992
8b095871
IC
30993 // Perform primitive values validation
30994 var r = signature.r;
30995 var s = signature.s;
30996 if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
30997 return false;
30998 if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
30999 return false;
ebd8d4e8 31000
8b095871
IC
31001 // Validate signature
31002 var sinv = s.invm(this.n);
31003 var u1 = sinv.mul(msg).umod(this.n);
31004 var u2 = sinv.mul(r).umod(this.n);
ebd8d4e8 31005
8b095871
IC
31006 if (!this.curve._maxwellTrick) {
31007 var p = this.g.mulAdd(u1, key.getPublic(), u2);
31008 if (p.isInfinity())
31009 return false;
ebd8d4e8 31010
8b095871
IC
31011 return p.getX().umod(this.n).cmp(r) === 0;
31012 }
ab78acc6 31013
8b095871
IC
31014 // NOTE: Greg Maxwell's trick, inspired by:
31015 // https://git.io/vad3K
ebd8d4e8 31016
8b095871
IC
31017 var p = this.g.jmulAdd(u1, key.getPublic(), u2);
31018 if (p.isInfinity())
31019 return false;
ab78acc6 31020
8b095871
IC
31021 // Compare `p.x` of Jacobian point with `r`,
31022 // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
31023 // inverse of `p.z^2`
31024 return p.eqXToP(r);
31025};
ab78acc6 31026
8b095871
IC
31027EC.prototype.recoverPubKey = function(msg, signature, j, enc) {
31028 assert((3 & j) === j, 'The recovery param is more than two bits');
31029 signature = new Signature(signature, enc);
ab78acc6 31030
8b095871
IC
31031 var n = this.n;
31032 var e = new BN(msg);
31033 var r = signature.r;
31034 var s = signature.s;
ab78acc6 31035
8b095871
IC
31036 // A set LSB signifies that the y-coordinate is odd
31037 var isYOdd = j & 1;
31038 var isSecondKey = j >> 1;
31039 if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
31040 throw new Error('Unable to find sencond key candinate');
31041
31042 // 1.1. Let x = r + jn.
31043 if (isSecondKey)
31044 r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
31045 else
31046 r = this.curve.pointFromX(r, isYOdd);
ab78acc6 31047
8b095871
IC
31048 var rInv = signature.r.invm(n);
31049 var s1 = n.sub(e).mul(rInv).umod(n);
31050 var s2 = s.mul(rInv).umod(n);
ab78acc6 31051
8b095871
IC
31052 // 1.6.1 Compute Q = r^-1 (sR - eG)
31053 // Q = r^-1 (sR + -eG)
31054 return this.g.mulAdd(s1, r, s2);
31055};
ab78acc6 31056
8b095871
IC
31057EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {
31058 signature = new Signature(signature, enc);
31059 if (signature.recoveryParam !== null)
31060 return signature.recoveryParam;
ab78acc6 31061
8b095871
IC
31062 for (var i = 0; i < 4; i++) {
31063 var Qprime;
31064 try {
31065 Qprime = this.recoverPubKey(e, signature, i);
31066 } catch (e) {
31067 continue;
ab78acc6 31068 }
ab78acc6 31069
8b095871
IC
31070 if (Qprime.eq(Q))
31071 return i;
31072 }
31073 throw new Error('Unable to find valid recovery factor');
31074};
ebd8d4e8 31075
8b095871
IC
31076},{"../../elliptic":39,"./key":47,"./signature":48,"bn.js":33}],47:[function(require,module,exports){
31077'use strict';
ebd8d4e8 31078
8b095871
IC
31079var BN = require('bn.js');
31080var elliptic = require('../../elliptic');
31081var utils = elliptic.utils;
31082var assert = utils.assert;
ebd8d4e8 31083
8b095871
IC
31084function KeyPair(ec, options) {
31085 this.ec = ec;
31086 this.priv = null;
31087 this.pub = null;
ebd8d4e8 31088
8b095871
IC
31089 // KeyPair(ec, { priv: ..., pub: ... })
31090 if (options.priv)
31091 this._importPrivate(options.priv, options.privEnc);
31092 if (options.pub)
31093 this._importPublic(options.pub, options.pubEnc);
31094}
31095module.exports = KeyPair;
ebd8d4e8 31096
8b095871
IC
31097KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
31098 if (pub instanceof KeyPair)
31099 return pub;
ebd8d4e8 31100
8b095871
IC
31101 return new KeyPair(ec, {
31102 pub: pub,
31103 pubEnc: enc
31104 });
31105};
ebd8d4e8 31106
8b095871
IC
31107KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
31108 if (priv instanceof KeyPair)
31109 return priv;
ebd8d4e8 31110
8b095871
IC
31111 return new KeyPair(ec, {
31112 priv: priv,
31113 privEnc: enc
31114 });
31115};
ebd8d4e8 31116
8b095871
IC
31117KeyPair.prototype.validate = function validate() {
31118 var pub = this.getPublic();
ebd8d4e8 31119
8b095871
IC
31120 if (pub.isInfinity())
31121 return { result: false, reason: 'Invalid public key' };
31122 if (!pub.validate())
31123 return { result: false, reason: 'Public key is not a point' };
31124 if (!pub.mul(this.ec.curve.n).isInfinity())
31125 return { result: false, reason: 'Public key * N != O' };
ab78acc6 31126
8b095871
IC
31127 return { result: true, reason: null };
31128};
ebd8d4e8 31129
8b095871
IC
31130KeyPair.prototype.getPublic = function getPublic(compact, enc) {
31131 // compact is optional argument
31132 if (typeof compact === 'string') {
31133 enc = compact;
31134 compact = null;
ebd8d4e8
IC
31135 }
31136
8b095871
IC
31137 if (!this.pub)
31138 this.pub = this.ec.g.mul(this.priv);
ebd8d4e8 31139
8b095871
IC
31140 if (!enc)
31141 return this.pub;
ebd8d4e8 31142
8b095871
IC
31143 return this.pub.encode(enc, compact);
31144};
ebd8d4e8 31145
8b095871
IC
31146KeyPair.prototype.getPrivate = function getPrivate(enc) {
31147 if (enc === 'hex')
31148 return this.priv.toString(16, 2);
31149 else
31150 return this.priv;
31151};
ab78acc6 31152
8b095871
IC
31153KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
31154 this.priv = new BN(key, enc || 16);
ab78acc6 31155
8b095871
IC
31156 // Ensure that the priv won't be bigger than n, otherwise we may fail
31157 // in fixed multiplication method
31158 this.priv = this.priv.umod(this.ec.curve.n);
31159};
ab78acc6 31160
8b095871
IC
31161KeyPair.prototype._importPublic = function _importPublic(key, enc) {
31162 if (key.x || key.y) {
31163 // Montgomery points only have an `x` coordinate.
31164 // Weierstrass/Edwards points on the other hand have both `x` and
31165 // `y` coordinates.
31166 if (this.ec.curve.type === 'mont') {
31167 assert(key.x, 'Need x coordinate');
31168 } else if (this.ec.curve.type === 'short' ||
31169 this.ec.curve.type === 'edwards') {
31170 assert(key.x && key.y, 'Need both x and y coordinate');
31171 }
31172 this.pub = this.ec.curve.point(key.x, key.y);
31173 return;
31174 }
31175 this.pub = this.ec.curve.decodePoint(key, enc);
31176};
ebd8d4e8 31177
8b095871
IC
31178// ECDH
31179KeyPair.prototype.derive = function derive(pub) {
31180 return pub.mul(this.priv).getX();
31181};
ebd8d4e8 31182
8b095871
IC
31183// ECDSA
31184KeyPair.prototype.sign = function sign(msg, enc, options) {
31185 return this.ec.sign(msg, this, enc, options);
31186};
ebd8d4e8 31187
8b095871
IC
31188KeyPair.prototype.verify = function verify(msg, signature) {
31189 return this.ec.verify(msg, signature, this);
31190};
ebd8d4e8 31191
8b095871
IC
31192KeyPair.prototype.inspect = function inspect() {
31193 return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +
31194 ' pub: ' + (this.pub && this.pub.inspect()) + ' >';
31195};
ebd8d4e8 31196
8b095871
IC
31197},{"../../elliptic":39,"bn.js":33}],48:[function(require,module,exports){
31198'use strict';
ebd8d4e8 31199
8b095871 31200var BN = require('bn.js');
ebd8d4e8 31201
8b095871
IC
31202var elliptic = require('../../elliptic');
31203var utils = elliptic.utils;
31204var assert = utils.assert;
ebd8d4e8 31205
8b095871
IC
31206function Signature(options, enc) {
31207 if (options instanceof Signature)
31208 return options;
ebd8d4e8 31209
8b095871
IC
31210 if (this._importDER(options, enc))
31211 return;
ebd8d4e8 31212
8b095871
IC
31213 assert(options.r && options.s, 'Signature without r or s');
31214 this.r = new BN(options.r, 16);
31215 this.s = new BN(options.s, 16);
31216 if (options.recoveryParam === undefined)
31217 this.recoveryParam = null;
31218 else
31219 this.recoveryParam = options.recoveryParam;
31220}
31221module.exports = Signature;
31222
31223function Position() {
31224 this.place = 0;
31225}
31226
31227function getLength(buf, p) {
31228 var initial = buf[p.place++];
31229 if (!(initial & 0x80)) {
31230 return initial;
31231 }
31232 var octetLen = initial & 0xf;
31233 var val = 0;
31234 for (var i = 0, off = p.place; i < octetLen; i++, off++) {
31235 val <<= 8;
31236 val |= buf[off];
31237 }
31238 p.place = off;
31239 return val;
31240}
31241
31242function rmPadding(buf) {
31243 var i = 0;
31244 var len = buf.length - 1;
31245 while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {
31246 i++;
31247 }
31248 if (i === 0) {
31249 return buf;
31250 }
31251 return buf.slice(i);
31252}
ebd8d4e8 31253
8b095871
IC
31254Signature.prototype._importDER = function _importDER(data, enc) {
31255 data = utils.toArray(data, enc);
31256 var p = new Position();
31257 if (data[p.place++] !== 0x30) {
31258 return false;
31259 }
31260 var len = getLength(data, p);
31261 if ((len + p.place) !== data.length) {
31262 return false;
31263 }
31264 if (data[p.place++] !== 0x02) {
31265 return false;
31266 }
31267 var rlen = getLength(data, p);
31268 var r = data.slice(p.place, rlen + p.place);
31269 p.place += rlen;
31270 if (data[p.place++] !== 0x02) {
31271 return false;
31272 }
31273 var slen = getLength(data, p);
31274 if (data.length !== slen + p.place) {
31275 return false;
31276 }
31277 var s = data.slice(p.place, slen + p.place);
31278 if (r[0] === 0 && (r[1] & 0x80)) {
31279 r = r.slice(1);
31280 }
31281 if (s[0] === 0 && (s[1] & 0x80)) {
31282 s = s.slice(1);
31283 }
ab78acc6 31284
8b095871
IC
31285 this.r = new BN(r);
31286 this.s = new BN(s);
31287 this.recoveryParam = null;
ebd8d4e8 31288
8b095871
IC
31289 return true;
31290};
ab78acc6 31291
8b095871
IC
31292function constructLength(arr, len) {
31293 if (len < 0x80) {
31294 arr.push(len);
31295 return;
31296 }
31297 var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
31298 arr.push(octets | 0x80);
31299 while (--octets) {
31300 arr.push((len >>> (octets << 3)) & 0xff);
31301 }
31302 arr.push(len);
31303}
31304
31305Signature.prototype.toDER = function toDER(enc) {
31306 var r = this.r.toArray();
31307 var s = this.s.toArray();
31308
31309 // Pad values
31310 if (r[0] & 0x80)
31311 r = [ 0 ].concat(r);
31312 // Pad values
31313 if (s[0] & 0x80)
31314 s = [ 0 ].concat(s);
31315
31316 r = rmPadding(r);
31317 s = rmPadding(s);
31318
31319 while (!s[0] && !(s[1] & 0x80)) {
31320 s = s.slice(1);
31321 }
31322 var arr = [ 0x02 ];
31323 constructLength(arr, r.length);
31324 arr = arr.concat(r);
31325 arr.push(0x02);
31326 constructLength(arr, s.length);
31327 var backHalf = arr.concat(s);
31328 var res = [ 0x30 ];
31329 constructLength(res, backHalf.length);
31330 res = res.concat(backHalf);
31331 return utils.encode(res, enc);
31332};
ab78acc6 31333
8b095871
IC
31334},{"../../elliptic":39,"bn.js":33}],49:[function(require,module,exports){
31335'use strict';
ebd8d4e8 31336
8b095871
IC
31337var hash = require('hash.js');
31338var elliptic = require('../../elliptic');
31339var utils = elliptic.utils;
31340var assert = utils.assert;
31341var parseBytes = utils.parseBytes;
31342var KeyPair = require('./key');
31343var Signature = require('./signature');
ab78acc6 31344
8b095871
IC
31345function EDDSA(curve) {
31346 assert(curve === 'ed25519', 'only tested with ed25519 so far');
ebd8d4e8 31347
8b095871
IC
31348 if (!(this instanceof EDDSA))
31349 return new EDDSA(curve);
ab78acc6 31350
8b095871
IC
31351 var curve = elliptic.curves[curve].curve;
31352 this.curve = curve;
31353 this.g = curve.g;
31354 this.g.precompute(curve.n.bitLength() + 1);
ebd8d4e8 31355
8b095871
IC
31356 this.pointClass = curve.point().constructor;
31357 this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
31358 this.hash = hash.sha512;
31359}
ebd8d4e8 31360
8b095871 31361module.exports = EDDSA;
ebd8d4e8 31362
8b095871
IC
31363/**
31364* @param {Array|String} message - message bytes
31365* @param {Array|String|KeyPair} secret - secret bytes or a keypair
31366* @returns {Signature} - signature
31367*/
31368EDDSA.prototype.sign = function sign(message, secret) {
31369 message = parseBytes(message);
31370 var key = this.keyFromSecret(secret);
31371 var r = this.hashInt(key.messagePrefix(), message);
31372 var R = this.g.mul(r);
31373 var Rencoded = this.encodePoint(R);
31374 var s_ = this.hashInt(Rencoded, key.pubBytes(), message)
31375 .mul(key.priv());
31376 var S = r.add(s_).umod(this.curve.n);
31377 return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });
31378};
ebd8d4e8 31379
8b095871
IC
31380/**
31381* @param {Array} message - message bytes
31382* @param {Array|String|Signature} sig - sig bytes
31383* @param {Array|String|Point|KeyPair} pub - public key
31384* @returns {Boolean} - true if public key matches sig of message
31385*/
31386EDDSA.prototype.verify = function verify(message, sig, pub) {
31387 message = parseBytes(message);
31388 sig = this.makeSignature(sig);
31389 var key = this.keyFromPublic(pub);
31390 var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
31391 var SG = this.g.mul(sig.S());
31392 var RplusAh = sig.R().add(key.pub().mul(h));
31393 return RplusAh.eq(SG);
31394};
ebd8d4e8 31395
8b095871
IC
31396EDDSA.prototype.hashInt = function hashInt() {
31397 var hash = this.hash();
31398 for (var i = 0; i < arguments.length; i++)
31399 hash.update(arguments[i]);
31400 return utils.intFromLE(hash.digest()).umod(this.curve.n);
31401};
ebd8d4e8 31402
8b095871
IC
31403EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
31404 return KeyPair.fromPublic(this, pub);
31405};
ebd8d4e8 31406
8b095871
IC
31407EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
31408 return KeyPair.fromSecret(this, secret);
31409};
31410
31411EDDSA.prototype.makeSignature = function makeSignature(sig) {
31412 if (sig instanceof Signature)
31413 return sig;
31414 return new Signature(this, sig);
31415};
ebd8d4e8
IC
31416
31417/**
8b095871
IC
31418* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
31419*
31420* EDDSA defines methods for encoding and decoding points and integers. These are
31421* helper convenience methods, that pass along to utility functions implied
31422* parameters.
31423*
31424*/
31425EDDSA.prototype.encodePoint = function encodePoint(point) {
31426 var enc = point.getY().toArray('le', this.encodingLength);
31427 enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
31428 return enc;
31429};
ebd8d4e8 31430
8b095871
IC
31431EDDSA.prototype.decodePoint = function decodePoint(bytes) {
31432 bytes = utils.parseBytes(bytes);
ebd8d4e8 31433
8b095871
IC
31434 var lastIx = bytes.length - 1;
31435 var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
31436 var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
ebd8d4e8 31437
8b095871
IC
31438 var y = utils.intFromLE(normed);
31439 return this.curve.pointFromY(y, xIsOdd);
31440};
ebd8d4e8 31441
8b095871
IC
31442EDDSA.prototype.encodeInt = function encodeInt(num) {
31443 return num.toArray('le', this.encodingLength);
31444};
ebd8d4e8 31445
8b095871
IC
31446EDDSA.prototype.decodeInt = function decodeInt(bytes) {
31447 return utils.intFromLE(bytes);
31448};
ebd8d4e8 31449
8b095871
IC
31450EDDSA.prototype.isPoint = function isPoint(val) {
31451 return val instanceof this.pointClass;
31452};
ebd8d4e8 31453
8b095871
IC
31454},{"../../elliptic":39,"./key":50,"./signature":51,"hash.js":57}],50:[function(require,module,exports){
31455'use strict';
ebd8d4e8 31456
8b095871
IC
31457var elliptic = require('../../elliptic');
31458var utils = elliptic.utils;
31459var assert = utils.assert;
31460var parseBytes = utils.parseBytes;
31461var cachedProperty = utils.cachedProperty;
ebd8d4e8 31462
8b095871
IC
31463/**
31464* @param {EDDSA} eddsa - instance
31465* @param {Object} params - public/private key parameters
31466*
31467* @param {Array<Byte>} [params.secret] - secret seed bytes
31468* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
31469* @param {Array<Byte>} [params.pub] - public key point encoded as bytes
31470*
31471*/
31472function KeyPair(eddsa, params) {
31473 this.eddsa = eddsa;
31474 this._secret = parseBytes(params.secret);
31475 if (eddsa.isPoint(params.pub))
31476 this._pub = params.pub;
31477 else
31478 this._pubBytes = parseBytes(params.pub);
ebd8d4e8
IC
31479}
31480
8b095871
IC
31481KeyPair.fromPublic = function fromPublic(eddsa, pub) {
31482 if (pub instanceof KeyPair)
31483 return pub;
31484 return new KeyPair(eddsa, { pub: pub });
31485};
ebd8d4e8 31486
8b095871
IC
31487KeyPair.fromSecret = function fromSecret(eddsa, secret) {
31488 if (secret instanceof KeyPair)
31489 return secret;
31490 return new KeyPair(eddsa, { secret: secret });
31491};
ebd8d4e8 31492
8b095871
IC
31493KeyPair.prototype.secret = function secret() {
31494 return this._secret;
31495};
ebd8d4e8 31496
8b095871
IC
31497cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
31498 return this.eddsa.encodePoint(this.pub());
31499});
ebd8d4e8 31500
8b095871
IC
31501cachedProperty(KeyPair, 'pub', function pub() {
31502 if (this._pubBytes)
31503 return this.eddsa.decodePoint(this._pubBytes);
31504 return this.eddsa.g.mul(this.priv());
31505});
ebd8d4e8 31506
8b095871
IC
31507cachedProperty(KeyPair, 'privBytes', function privBytes() {
31508 var eddsa = this.eddsa;
31509 var hash = this.hash();
31510 var lastIx = eddsa.encodingLength - 1;
ebd8d4e8 31511
8b095871
IC
31512 var a = hash.slice(0, eddsa.encodingLength);
31513 a[0] &= 248;
31514 a[lastIx] &= 127;
31515 a[lastIx] |= 64;
ebd8d4e8 31516
8b095871
IC
31517 return a;
31518});
ebd8d4e8 31519
8b095871
IC
31520cachedProperty(KeyPair, 'priv', function priv() {
31521 return this.eddsa.decodeInt(this.privBytes());
31522});
ebd8d4e8 31523
8b095871
IC
31524cachedProperty(KeyPair, 'hash', function hash() {
31525 return this.eddsa.hash().update(this.secret()).digest();
31526});
ebd8d4e8 31527
8b095871
IC
31528cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
31529 return this.hash().slice(this.eddsa.encodingLength);
31530});
ebd8d4e8 31531
8b095871
IC
31532KeyPair.prototype.sign = function sign(message) {
31533 assert(this._secret, 'KeyPair can only verify');
31534 return this.eddsa.sign(message, this);
31535};
ebd8d4e8 31536
8b095871
IC
31537KeyPair.prototype.verify = function verify(message, sig) {
31538 return this.eddsa.verify(message, sig, this);
31539};
ebd8d4e8 31540
8b095871
IC
31541KeyPair.prototype.getSecret = function getSecret(enc) {
31542 assert(this._secret, 'KeyPair is public only');
31543 return utils.encode(this.secret(), enc);
31544};
ebd8d4e8 31545
8b095871
IC
31546KeyPair.prototype.getPublic = function getPublic(enc) {
31547 return utils.encode(this.pubBytes(), enc);
31548};
ebd8d4e8 31549
8b095871 31550module.exports = KeyPair;
ebd8d4e8 31551
8b095871
IC
31552},{"../../elliptic":39}],51:[function(require,module,exports){
31553'use strict';
ebd8d4e8 31554
8b095871
IC
31555var BN = require('bn.js');
31556var elliptic = require('../../elliptic');
31557var utils = elliptic.utils;
31558var assert = utils.assert;
31559var cachedProperty = utils.cachedProperty;
31560var parseBytes = utils.parseBytes;
ebd8d4e8 31561
8b095871
IC
31562/**
31563* @param {EDDSA} eddsa - eddsa instance
31564* @param {Array<Bytes>|Object} sig -
31565* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
31566* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
31567* @param {Array<Bytes>} [sig.Rencoded] - R point encoded
31568* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
31569*/
31570function Signature(eddsa, sig) {
31571 this.eddsa = eddsa;
ebd8d4e8 31572
8b095871
IC
31573 if (typeof sig !== 'object')
31574 sig = parseBytes(sig);
ebd8d4e8 31575
8b095871
IC
31576 if (Array.isArray(sig)) {
31577 sig = {
31578 R: sig.slice(0, eddsa.encodingLength),
31579 S: sig.slice(eddsa.encodingLength)
31580 };
ab78acc6 31581 }
ebd8d4e8 31582
8b095871 31583 assert(sig.R && sig.S, 'Signature without R or S');
ebd8d4e8 31584
8b095871
IC
31585 if (eddsa.isPoint(sig.R))
31586 this._R = sig.R;
31587 if (sig.S instanceof BN)
31588 this._S = sig.S;
31589
31590 this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
31591 this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
ebd8d4e8
IC
31592}
31593
8b095871
IC
31594cachedProperty(Signature, 'S', function S() {
31595 return this.eddsa.decodeInt(this.Sencoded());
31596});
ab78acc6 31597
8b095871
IC
31598cachedProperty(Signature, 'R', function R() {
31599 return this.eddsa.decodePoint(this.Rencoded());
31600});
ebd8d4e8 31601
8b095871
IC
31602cachedProperty(Signature, 'Rencoded', function Rencoded() {
31603 return this.eddsa.encodePoint(this.R());
31604});
ebd8d4e8 31605
8b095871
IC
31606cachedProperty(Signature, 'Sencoded', function Sencoded() {
31607 return this.eddsa.encodeInt(this.S());
31608});
ebd8d4e8 31609
8b095871
IC
31610Signature.prototype.toBytes = function toBytes() {
31611 return this.Rencoded().concat(this.Sencoded());
31612};
ebd8d4e8 31613
8b095871
IC
31614Signature.prototype.toHex = function toHex() {
31615 return utils.encode(this.toBytes(), 'hex').toUpperCase();
31616};
ebd8d4e8 31617
8b095871 31618module.exports = Signature;
ebd8d4e8 31619
8b095871
IC
31620},{"../../elliptic":39,"bn.js":33}],52:[function(require,module,exports){
31621'use strict';
ebd8d4e8 31622
8b095871
IC
31623var hash = require('hash.js');
31624var elliptic = require('../elliptic');
31625var utils = elliptic.utils;
31626var assert = utils.assert;
ebd8d4e8 31627
8b095871
IC
31628function HmacDRBG(options) {
31629 if (!(this instanceof HmacDRBG))
31630 return new HmacDRBG(options);
31631 this.hash = options.hash;
31632 this.predResist = !!options.predResist;
ab78acc6 31633
8b095871
IC
31634 this.outLen = this.hash.outSize;
31635 this.minEntropy = options.minEntropy || this.hash.hmacStrength;
ab78acc6 31636
8b095871
IC
31637 this.reseed = null;
31638 this.reseedInterval = null;
31639 this.K = null;
31640 this.V = null;
ebd8d4e8 31641
8b095871
IC
31642 var entropy = utils.toArray(options.entropy, options.entropyEnc);
31643 var nonce = utils.toArray(options.nonce, options.nonceEnc);
31644 var pers = utils.toArray(options.pers, options.persEnc);
31645 assert(entropy.length >= (this.minEntropy / 8),
31646 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
31647 this._init(entropy, nonce, pers);
ebd8d4e8 31648}
8b095871 31649module.exports = HmacDRBG;
ebd8d4e8 31650
8b095871
IC
31651HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
31652 var seed = entropy.concat(nonce).concat(pers);
ebd8d4e8 31653
8b095871
IC
31654 this.K = new Array(this.outLen / 8);
31655 this.V = new Array(this.outLen / 8);
31656 for (var i = 0; i < this.V.length; i++) {
31657 this.K[i] = 0x00;
31658 this.V[i] = 0x01;
31659 }
ebd8d4e8 31660
8b095871
IC
31661 this._update(seed);
31662 this.reseed = 1;
31663 this.reseedInterval = 0x1000000000000; // 2^48
31664};
ebd8d4e8 31665
8b095871
IC
31666HmacDRBG.prototype._hmac = function hmac() {
31667 return new hash.hmac(this.hash, this.K);
31668};
ebd8d4e8 31669
8b095871
IC
31670HmacDRBG.prototype._update = function update(seed) {
31671 var kmac = this._hmac()
31672 .update(this.V)
31673 .update([ 0x00 ]);
31674 if (seed)
31675 kmac = kmac.update(seed);
31676 this.K = kmac.digest();
31677 this.V = this._hmac().update(this.V).digest();
31678 if (!seed)
31679 return;
31680
31681 this.K = this._hmac()
31682 .update(this.V)
31683 .update([ 0x01 ])
31684 .update(seed)
31685 .digest();
31686 this.V = this._hmac().update(this.V).digest();
31687};
31688
31689HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
31690 // Optional entropy enc
31691 if (typeof entropyEnc !== 'string') {
31692 addEnc = add;
31693 add = entropyEnc;
31694 entropyEnc = null;
ebd8d4e8 31695 }
ebd8d4e8 31696
8b095871
IC
31697 entropy = utils.toBuffer(entropy, entropyEnc);
31698 add = utils.toBuffer(add, addEnc);
ebd8d4e8 31699
8b095871
IC
31700 assert(entropy.length >= (this.minEntropy / 8),
31701 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
ebd8d4e8 31702
8b095871
IC
31703 this._update(entropy.concat(add || []));
31704 this.reseed = 1;
31705};
ebd8d4e8 31706
8b095871
IC
31707HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
31708 if (this.reseed > this.reseedInterval)
31709 throw new Error('Reseed is required');
ebd8d4e8 31710
8b095871
IC
31711 // Optional encoding
31712 if (typeof enc !== 'string') {
31713 addEnc = add;
31714 add = enc;
31715 enc = null;
31716 }
ebd8d4e8 31717
8b095871
IC
31718 // Optional additional data
31719 if (add) {
31720 add = utils.toArray(add, addEnc);
31721 this._update(add);
ebd8d4e8
IC
31722 }
31723
8b095871
IC
31724 var temp = [];
31725 while (temp.length < len) {
31726 this.V = this._hmac().update(this.V).digest();
31727 temp = temp.concat(this.V);
ebd8d4e8
IC
31728 }
31729
8b095871
IC
31730 var res = temp.slice(0, len);
31731 this._update(add);
31732 this.reseed++;
31733 return utils.encode(res, enc);
31734};
ebd8d4e8 31735
8b095871
IC
31736},{"../elliptic":39,"hash.js":57}],53:[function(require,module,exports){
31737module.exports = {
31738 doubles: {
31739 step: 4,
31740 points: [
31741 [
31742 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',
31743 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'
31744 ],
31745 [
31746 '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',
31747 '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'
31748 ],
31749 [
31750 '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',
31751 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'
31752 ],
31753 [
31754 '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',
31755 '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'
31756 ],
31757 [
31758 '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',
31759 '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'
31760 ],
31761 [
31762 '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',
31763 '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'
31764 ],
31765 [
31766 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',
31767 '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'
31768 ],
31769 [
31770 '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',
31771 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'
31772 ],
31773 [
31774 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',
31775 '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'
31776 ],
31777 [
31778 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',
31779 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'
31780 ],
31781 [
31782 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',
31783 '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'
31784 ],
31785 [
31786 '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',
31787 '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'
31788 ],
31789 [
31790 '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',
31791 '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'
31792 ],
31793 [
31794 '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',
31795 '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'
31796 ],
31797 [
31798 '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',
31799 '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'
31800 ],
31801 [
31802 '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',
31803 '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'
31804 ],
31805 [
31806 '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',
31807 '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'
31808 ],
31809 [
31810 '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',
31811 '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'
31812 ],
31813 [
31814 '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',
31815 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'
31816 ],
31817 [
31818 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',
31819 '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'
31820 ],
31821 [
31822 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',
31823 '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'
31824 ],
31825 [
31826 '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',
31827 '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'
31828 ],
31829 [
31830 '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',
31831 '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'
31832 ],
31833 [
31834 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',
31835 '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'
31836 ],
31837 [
31838 '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',
31839 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'
31840 ],
31841 [
31842 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',
31843 '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'
31844 ],
31845 [
31846 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',
31847 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'
31848 ],
31849 [
31850 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',
31851 '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'
31852 ],
31853 [
31854 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',
31855 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'
31856 ],
31857 [
31858 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',
31859 '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'
31860 ],
31861 [
31862 '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',
31863 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'
31864 ],
31865 [
31866 '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',
31867 '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'
31868 ],
31869 [
31870 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',
31871 '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'
31872 ],
31873 [
31874 '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',
31875 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'
31876 ],
31877 [
31878 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',
31879 '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'
31880 ],
31881 [
31882 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',
31883 '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'
31884 ],
31885 [
31886 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',
31887 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'
31888 ],
31889 [
31890 '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',
31891 '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'
31892 ],
31893 [
31894 '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',
31895 '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'
31896 ],
31897 [
31898 '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',
31899 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'
31900 ],
31901 [
31902 '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',
31903 '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'
31904 ],
31905 [
31906 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',
31907 '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'
31908 ],
31909 [
31910 '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',
31911 '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'
31912 ],
31913 [
31914 '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',
31915 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'
31916 ],
31917 [
31918 '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',
31919 '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'
31920 ],
31921 [
31922 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',
31923 '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'
31924 ],
31925 [
31926 '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',
31927 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'
31928 ],
31929 [
31930 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',
31931 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'
31932 ],
31933 [
31934 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',
31935 '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'
31936 ],
31937 [
31938 '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',
31939 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'
31940 ],
31941 [
31942 '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',
31943 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'
31944 ],
31945 [
31946 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',
31947 '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'
31948 ],
31949 [
31950 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',
31951 '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'
31952 ],
31953 [
31954 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',
31955 '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'
31956 ],
31957 [
31958 '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',
31959 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'
31960 ],
31961 [
31962 '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',
31963 '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'
31964 ],
31965 [
31966 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',
31967 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'
31968 ],
31969 [
31970 '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',
31971 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'
31972 ],
31973 [
31974 '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',
31975 '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'
31976 ],
31977 [
31978 '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',
31979 '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'
31980 ],
31981 [
31982 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',
31983 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'
31984 ],
31985 [
31986 '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',
31987 '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'
31988 ],
31989 [
31990 '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',
31991 '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'
31992 ],
31993 [
31994 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',
31995 '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'
31996 ],
31997 [
31998 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',
31999 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'
32000 ]
32001 ]
32002 },
32003 naf: {
32004 wnd: 7,
32005 points: [
32006 [
32007 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
32008 '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'
32009 ],
32010 [
32011 '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',
32012 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'
32013 ],
32014 [
32015 '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',
32016 '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'
32017 ],
32018 [
32019 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',
32020 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'
32021 ],
32022 [
32023 '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',
32024 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'
32025 ],
32026 [
32027 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',
32028 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'
32029 ],
32030 [
32031 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',
32032 '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'
32033 ],
32034 [
32035 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',
32036 '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'
32037 ],
32038 [
32039 '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',
32040 '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'
32041 ],
32042 [
32043 '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',
32044 '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'
32045 ],
32046 [
32047 '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',
32048 '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'
32049 ],
32050 [
32051 '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',
32052 '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'
32053 ],
32054 [
32055 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',
32056 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'
32057 ],
32058 [
32059 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',
32060 '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'
32061 ],
32062 [
32063 '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',
32064 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'
32065 ],
32066 [
32067 '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',
32068 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'
32069 ],
32070 [
32071 '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',
32072 '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'
32073 ],
32074 [
32075 '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',
32076 '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'
32077 ],
32078 [
32079 '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',
32080 '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'
32081 ],
32082 [
32083 '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',
32084 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'
32085 ],
32086 [
32087 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',
32088 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'
32089 ],
32090 [
32091 '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',
32092 '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'
32093 ],
32094 [
32095 '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',
32096 '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'
32097 ],
32098 [
32099 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',
32100 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'
32101 ],
32102 [
32103 '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',
32104 '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'
32105 ],
32106 [
32107 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',
32108 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'
32109 ],
32110 [
32111 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',
32112 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'
32113 ],
32114 [
32115 '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',
32116 '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'
32117 ],
32118 [
32119 '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',
32120 '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'
32121 ],
32122 [
32123 '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',
32124 '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'
32125 ],
32126 [
32127 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',
32128 '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'
32129 ],
32130 [
32131 '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',
32132 '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'
32133 ],
32134 [
32135 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',
32136 '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'
32137 ],
32138 [
32139 '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',
32140 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'
32141 ],
32142 [
32143 '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',
32144 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'
32145 ],
32146 [
32147 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',
32148 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'
32149 ],
32150 [
32151 '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',
32152 '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'
32153 ],
32154 [
32155 '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',
32156 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'
32157 ],
32158 [
32159 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',
32160 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'
32161 ],
32162 [
32163 '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',
32164 '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'
32165 ],
32166 [
32167 '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',
32168 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'
32169 ],
32170 [
32171 '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',
32172 '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'
32173 ],
32174 [
32175 '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',
32176 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'
32177 ],
32178 [
32179 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',
32180 '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'
32181 ],
32182 [
32183 '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',
32184 '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'
32185 ],
32186 [
32187 '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',
32188 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'
32189 ],
32190 [
32191 '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',
32192 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'
32193 ],
32194 [
32195 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',
32196 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'
32197 ],
32198 [
32199 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',
32200 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'
32201 ],
32202 [
32203 '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',
32204 '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'
32205 ],
32206 [
32207 '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',
32208 '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'
32209 ],
32210 [
32211 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',
32212 '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'
32213 ],
32214 [
32215 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',
32216 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'
32217 ],
32218 [
32219 '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',
32220 '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'
32221 ],
32222 [
32223 '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',
32224 '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'
32225 ],
32226 [
32227 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',
32228 '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'
32229 ],
32230 [
32231 '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',
32232 '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'
32233 ],
32234 [
32235 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',
32236 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'
32237 ],
32238 [
32239 '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',
32240 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'
32241 ],
32242 [
32243 '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',
32244 '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'
32245 ],
32246 [
32247 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',
32248 '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'
32249 ],
32250 [
32251 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',
32252 '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'
32253 ],
32254 [
32255 '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',
32256 '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'
32257 ],
32258 [
32259 '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',
32260 '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'
32261 ],
32262 [
32263 '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',
32264 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'
32265 ],
32266 [
32267 '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',
32268 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'
32269 ],
32270 [
32271 '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',
32272 '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'
32273 ],
32274 [
32275 '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',
32276 '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'
32277 ],
32278 [
32279 '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',
32280 '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'
32281 ],
32282 [
32283 '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',
32284 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'
32285 ],
32286 [
32287 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',
32288 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'
32289 ],
32290 [
32291 '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',
32292 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'
32293 ],
32294 [
32295 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',
32296 '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'
32297 ],
32298 [
32299 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',
32300 '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'
32301 ],
32302 [
32303 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',
32304 '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'
32305 ],
32306 [
32307 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',
32308 '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'
32309 ],
32310 [
32311 '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',
32312 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'
32313 ],
32314 [
32315 '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',
32316 '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'
32317 ],
32318 [
32319 '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',
32320 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'
32321 ],
32322 [
32323 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',
32324 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'
32325 ],
32326 [
32327 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',
32328 '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'
32329 ],
32330 [
32331 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',
32332 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'
32333 ],
32334 [
32335 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',
32336 '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'
32337 ],
32338 [
32339 '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',
32340 '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'
32341 ],
32342 [
32343 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',
32344 '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'
32345 ],
32346 [
32347 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',
32348 '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'
32349 ],
32350 [
32351 '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',
32352 '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'
32353 ],
32354 [
32355 '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',
32356 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'
32357 ],
32358 [
32359 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',
32360 '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'
32361 ],
32362 [
32363 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',
32364 '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'
32365 ],
32366 [
32367 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',
32368 '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'
32369 ],
32370 [
32371 '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',
32372 '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'
32373 ],
32374 [
32375 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',
32376 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'
32377 ],
32378 [
32379 '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',
32380 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'
32381 ],
32382 [
32383 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',
32384 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'
32385 ],
32386 [
32387 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',
32388 '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'
32389 ],
32390 [
32391 '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',
32392 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'
32393 ],
32394 [
32395 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',
32396 '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'
32397 ],
32398 [
32399 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',
32400 '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'
32401 ],
32402 [
32403 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',
32404 '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'
32405 ],
32406 [
32407 '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',
32408 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'
32409 ],
32410 [
32411 '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',
32412 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'
32413 ],
32414 [
32415 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',
32416 '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'
32417 ],
32418 [
32419 '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',
32420 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'
32421 ],
32422 [
32423 '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',
32424 '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'
32425 ],
32426 [
32427 '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',
32428 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'
32429 ],
32430 [
32431 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',
32432 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'
32433 ],
32434 [
32435 '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',
32436 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'
32437 ],
32438 [
32439 '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',
32440 '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'
32441 ],
32442 [
32443 '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',
32444 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'
32445 ],
32446 [
32447 '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',
32448 '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'
32449 ],
32450 [
32451 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',
32452 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'
32453 ],
32454 [
32455 '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',
32456 '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'
32457 ],
32458 [
32459 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',
32460 '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'
32461 ],
32462 [
32463 '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',
32464 '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'
32465 ],
32466 [
32467 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',
32468 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'
32469 ],
32470 [
32471 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',
32472 '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'
32473 ],
32474 [
32475 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',
32476 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'
32477 ],
32478 [
32479 '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',
32480 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'
32481 ],
32482 [
32483 '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',
32484 '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'
32485 ],
32486 [
32487 '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',
32488 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'
32489 ],
32490 [
32491 '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',
32492 '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'
32493 ],
32494 [
32495 '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',
32496 '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'
32497 ],
32498 [
32499 '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',
32500 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'
32501 ],
32502 [
32503 '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',
32504 '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'
32505 ],
32506 [
32507 '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',
32508 '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'
32509 ],
32510 [
32511 '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',
32512 '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'
32513 ]
32514 ]
32515 }
32516};
ebd8d4e8 32517
8b095871
IC
32518},{}],54:[function(require,module,exports){
32519'use strict';
ebd8d4e8 32520
8b095871
IC
32521var utils = exports;
32522var BN = require('bn.js');
ebd8d4e8 32523
8b095871
IC
32524utils.assert = function assert(val, msg) {
32525 if (!val)
32526 throw new Error(msg || 'Assertion failed');
32527};
ebd8d4e8 32528
8b095871
IC
32529function toArray(msg, enc) {
32530 if (Array.isArray(msg))
32531 return msg.slice();
32532 if (!msg)
32533 return [];
32534 var res = [];
32535 if (typeof msg !== 'string') {
32536 for (var i = 0; i < msg.length; i++)
32537 res[i] = msg[i] | 0;
32538 return res;
32539 }
32540 if (!enc) {
32541 for (var i = 0; i < msg.length; i++) {
32542 var c = msg.charCodeAt(i);
32543 var hi = c >> 8;
32544 var lo = c & 0xff;
32545 if (hi)
32546 res.push(hi, lo);
32547 else
32548 res.push(lo);
32549 }
32550 } else if (enc === 'hex') {
32551 msg = msg.replace(/[^a-z0-9]+/ig, '');
32552 if (msg.length % 2 !== 0)
32553 msg = '0' + msg;
32554 for (var i = 0; i < msg.length; i += 2)
32555 res.push(parseInt(msg[i] + msg[i + 1], 16));
ebd8d4e8 32556 }
8b095871 32557 return res;
ebd8d4e8 32558}
8b095871 32559utils.toArray = toArray;
ebd8d4e8 32560
8b095871
IC
32561function zero2(word) {
32562 if (word.length === 1)
32563 return '0' + word;
32564 else
32565 return word;
32566}
32567utils.zero2 = zero2;
ab78acc6 32568
8b095871
IC
32569function toHex(msg) {
32570 var res = '';
32571 for (var i = 0; i < msg.length; i++)
32572 res += zero2(msg[i].toString(16));
32573 return res;
32574}
32575utils.toHex = toHex;
ebd8d4e8 32576
8b095871
IC
32577utils.encode = function encode(arr, enc) {
32578 if (enc === 'hex')
32579 return toHex(arr);
32580 else
32581 return arr;
32582};
ebd8d4e8 32583
8b095871
IC
32584// Represent num in a w-NAF form
32585function getNAF(num, w) {
32586 var naf = [];
32587 var ws = 1 << (w + 1);
32588 var k = num.clone();
32589 while (k.cmpn(1) >= 0) {
32590 var z;
32591 if (k.isOdd()) {
32592 var mod = k.andln(ws - 1);
32593 if (mod > (ws >> 1) - 1)
32594 z = (ws >> 1) - mod;
32595 else
32596 z = mod;
32597 k.isubn(z);
32598 } else {
32599 z = 0;
32600 }
32601 naf.push(z);
32602
32603 // Optimization, shift by word if possible
32604 var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;
32605 for (var i = 1; i < shift; i++)
32606 naf.push(0);
32607 k.iushrn(shift);
32608 }
32609
32610 return naf;
32611}
32612utils.getNAF = getNAF;
32613
32614// Represent k1, k2 in a Joint Sparse Form
32615function getJSF(k1, k2) {
32616 var jsf = [
32617 [],
32618 []
32619 ];
32620
32621 k1 = k1.clone();
32622 k2 = k2.clone();
32623 var d1 = 0;
32624 var d2 = 0;
32625 while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
32626
32627 // First phase
32628 var m14 = (k1.andln(3) + d1) & 3;
32629 var m24 = (k2.andln(3) + d2) & 3;
32630 if (m14 === 3)
32631 m14 = -1;
32632 if (m24 === 3)
32633 m24 = -1;
32634 var u1;
32635 if ((m14 & 1) === 0) {
32636 u1 = 0;
32637 } else {
32638 var m8 = (k1.andln(7) + d1) & 7;
32639 if ((m8 === 3 || m8 === 5) && m24 === 2)
32640 u1 = -m14;
32641 else
32642 u1 = m14;
32643 }
32644 jsf[0].push(u1);
ebd8d4e8 32645
8b095871
IC
32646 var u2;
32647 if ((m24 & 1) === 0) {
32648 u2 = 0;
32649 } else {
32650 var m8 = (k2.andln(7) + d2) & 7;
32651 if ((m8 === 3 || m8 === 5) && m14 === 2)
32652 u2 = -m24;
32653 else
32654 u2 = m24;
32655 }
32656 jsf[1].push(u2);
ebd8d4e8 32657
8b095871
IC
32658 // Second phase
32659 if (2 * d1 === u1 + 1)
32660 d1 = 1 - d1;
32661 if (2 * d2 === u2 + 1)
32662 d2 = 1 - d2;
32663 k1.iushrn(1);
32664 k2.iushrn(1);
32665 }
ebd8d4e8 32666
8b095871
IC
32667 return jsf;
32668}
32669utils.getJSF = getJSF;
ab78acc6 32670
8b095871
IC
32671function cachedProperty(obj, name, computer) {
32672 var key = '_' + name;
32673 obj.prototype[name] = function cachedProperty() {
32674 return this[key] !== undefined ? this[key] :
32675 this[key] = computer.call(this);
32676 };
32677}
32678utils.cachedProperty = cachedProperty;
ebd8d4e8 32679
8b095871
IC
32680function parseBytes(bytes) {
32681 return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :
32682 bytes;
32683}
32684utils.parseBytes = parseBytes;
ebd8d4e8 32685
8b095871
IC
32686function intFromLE(bytes) {
32687 return new BN(bytes, 'hex', 'le');
32688}
32689utils.intFromLE = intFromLE;
ebd8d4e8 32690
8b095871
IC
32691
32692},{"bn.js":33}],55:[function(require,module,exports){
32693module.exports={
32694 "_args": [
32695 [
32696 {
32697 "raw": "elliptic@^6.2.3",
32698 "scope": null,
32699 "escapedName": "elliptic",
32700 "name": "elliptic",
32701 "rawSpec": "^6.2.3",
32702 "spec": ">=6.2.3 <7.0.0",
32703 "type": "range"
32704 },
32705 "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1"
32706 ]
32707 ],
32708 "_from": "elliptic@>=6.2.3 <7.0.0",
32709 "_id": "elliptic@6.3.3",
32710 "_inCache": true,
32711 "_location": "/elliptic",
32712 "_nodeVersion": "7.0.0",
32713 "_npmOperationalInternal": {
32714 "host": "packages-18-east.internal.npmjs.com",
32715 "tmp": "tmp/elliptic-6.3.3.tgz_1486422837740_0.10658654430881143"
32716 },
32717 "_npmUser": {
32718 "name": "indutny",
32719 "email": "fedor@indutny.com"
32720 },
32721 "_npmVersion": "3.10.8",
32722 "_phantomChildren": {},
32723 "_requested": {
32724 "raw": "elliptic@^6.2.3",
32725 "scope": null,
32726 "escapedName": "elliptic",
32727 "name": "elliptic",
32728 "rawSpec": "^6.2.3",
32729 "spec": ">=6.2.3 <7.0.0",
32730 "type": "range"
32731 },
32732 "_requiredBy": [
32733 "/browserify-sign",
32734 "/create-ecdh",
32735 "/secp256k1"
32736 ],
32737 "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz",
32738 "_shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
32739 "_shrinkwrap": null,
32740 "_spec": "elliptic@^6.2.3",
32741 "_where": "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1",
32742 "author": {
32743 "name": "Fedor Indutny",
32744 "email": "fedor@indutny.com"
32745 },
32746 "bugs": {
32747 "url": "https://github.com/indutny/elliptic/issues"
32748 },
32749 "dependencies": {
32750 "bn.js": "^4.4.0",
32751 "brorand": "^1.0.1",
32752 "hash.js": "^1.0.0",
32753 "inherits": "^2.0.1"
32754 },
32755 "description": "EC cryptography",
32756 "devDependencies": {
32757 "brfs": "^1.4.3",
32758 "coveralls": "^2.11.3",
32759 "grunt": "^0.4.5",
32760 "grunt-browserify": "^5.0.0",
32761 "grunt-cli": "^1.2.0",
32762 "grunt-contrib-connect": "^1.0.0",
32763 "grunt-contrib-copy": "^1.0.0",
32764 "grunt-contrib-uglify": "^1.0.1",
32765 "grunt-mocha-istanbul": "^3.0.1",
32766 "grunt-saucelabs": "^8.6.2",
32767 "istanbul": "^0.4.2",
32768 "jscs": "^2.9.0",
32769 "jshint": "^2.6.0",
32770 "mocha": "^2.1.0"
32771 },
32772 "directories": {},
32773 "dist": {
32774 "shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
32775 "tarball": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz"
32776 },
32777 "files": [
32778 "lib"
32779 ],
32780 "gitHead": "63aee8d697e9b7fac37ece24222029117a890a7e",
32781 "homepage": "https://github.com/indutny/elliptic",
32782 "keywords": [
32783 "EC",
32784 "Elliptic",
32785 "curve",
32786 "Cryptography"
32787 ],
32788 "license": "MIT",
32789 "main": "lib/elliptic.js",
32790 "maintainers": [
32791 {
32792 "name": "indutny",
32793 "email": "fedor@indutny.com"
32794 }
32795 ],
32796 "name": "elliptic",
32797 "optionalDependencies": {},
32798 "readme": "ERROR: No README data found!",
32799 "repository": {
32800 "type": "git",
32801 "url": "git+ssh://git@github.com/indutny/elliptic.git"
32802 },
32803 "scripts": {
32804 "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
32805 "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
32806 "lint": "npm run jscs && npm run jshint",
32807 "test": "npm run lint && npm run unit",
32808 "unit": "istanbul test _mocha --reporter=spec test/index.js",
32809 "version": "grunt dist && git add dist/"
32810 },
32811 "version": "6.3.3"
ebd8d4e8
IC
32812}
32813
8b095871
IC
32814},{}],56:[function(require,module,exports){
32815(function (Buffer){
32816'use strict';
ab78acc6 32817
8b095871
IC
32818var isHexPrefixed = require('is-hex-prefixed');
32819var stripHexPrefix = require('strip-hex-prefix');
ebd8d4e8 32820
8b095871
IC
32821/**
32822 * Pads a `String` to have an even length
32823 * @param {String} value
32824 * @return {String} output
32825 */
32826function padToEven(value) {
32827 var a = value; // eslint-disable-line
32828
32829 if (typeof a !== 'string') {
32830 throw new Error('[ethjs-util] while padding to even, value must be string, is currently ' + typeof a + ', while padToEven.');
32831 }
32832
32833 if (a.length % 2) {
32834 a = '0' + a;
32835 }
32836
32837 return a;
ebd8d4e8
IC
32838}
32839
8b095871
IC
32840/**
32841 * Converts a `Number` into a hex `String`
32842 * @param {Number} i
32843 * @return {String}
32844 */
32845function intToHex(i) {
32846 var hex = i.toString(16); // eslint-disable-line
ebd8d4e8 32847
8b095871
IC
32848 return '0x' + padToEven(hex);
32849}
ab78acc6 32850
8b095871
IC
32851/**
32852 * Converts an `Number` to a `Buffer`
32853 * @param {Number} i
32854 * @return {Buffer}
32855 */
32856function intToBuffer(i) {
32857 var hex = intToHex(i);
ab78acc6 32858
8b095871
IC
32859 return new Buffer(hex.slice(2), 'hex');
32860}
ebd8d4e8 32861
8b095871
IC
32862/**
32863 * Get the binary size of a string
32864 * @param {String} str
32865 * @return {Number}
32866 */
32867function getBinarySize(str) {
32868 if (typeof str !== 'string') {
32869 throw new Error('[ethjs-util] while getting binary size, method getBinarySize requires input \'str\' to be type String, got \'' + typeof str + '\'.');
32870 }
ebd8d4e8 32871
8b095871
IC
32872 return Buffer.byteLength(str, 'utf8');
32873}
32874
32875/**
32876 * Returns TRUE if the first specified array contains all elements
32877 * from the second one. FALSE otherwise.
32878 *
32879 * @param {array} superset
32880 * @param {array} subset
32881 *
32882 * @returns {boolean}
32883 */
32884function arrayContainsArray(superset, subset, some) {
32885 if (Array.isArray(superset) !== true) {
32886 throw new Error('[ethjs-util] method arrayContainsArray requires input \'superset\' to be an array got type \'' + typeof superset + '\'');
32887 }
32888 if (Array.isArray(subset) !== true) {
32889 throw new Error('[ethjs-util] method arrayContainsArray requires input \'subset\' to be an array got type \'' + typeof subset + '\'');
ebd8d4e8
IC
32890 }
32891
8b095871
IC
32892 return subset[Boolean(some) && 'some' || 'every'](function (value) {
32893 return superset.indexOf(value) >= 0;
32894 });
ebd8d4e8
IC
32895}
32896
8b095871
IC
32897/**
32898 * Should be called to get utf8 from it's hex representation
32899 *
32900 * @method toUtf8
32901 * @param {String} string in hex
32902 * @returns {String} ascii string representation of hex value
32903 */
32904function toUtf8(hex) {
32905 var bufferValue = new Buffer(padToEven(stripHexPrefix(hex).replace(/^0+|0+$/g, '')), 'hex');
ebd8d4e8 32906
8b095871
IC
32907 return bufferValue.toString('utf8');
32908}
ab78acc6 32909
8b095871
IC
32910/**
32911 * Should be called to get ascii from it's hex representation
32912 *
32913 * @method toAscii
32914 * @param {String} string in hex
32915 * @returns {String} ascii string representation of hex value
32916 */
32917function toAscii(hex) {
32918 var str = ''; // eslint-disable-line
32919 var i = 0,
32920 l = hex.length; // eslint-disable-line
ebd8d4e8 32921
8b095871
IC
32922 if (hex.substring(0, 2) === '0x') {
32923 i = 2;
32924 }
ebd8d4e8 32925
8b095871
IC
32926 for (; i < l; i += 2) {
32927 var code = parseInt(hex.substr(i, 2), 16);
32928 str += String.fromCharCode(code);
ebd8d4e8 32929 }
8b095871
IC
32930
32931 return str;
ebd8d4e8
IC
32932}
32933
8b095871
IC
32934/**
32935 * Should be called to get hex representation (prefixed by 0x) of utf8 string
32936 *
32937 * @method fromUtf8
32938 * @param {String} string
32939 * @param {Number} optional padding
32940 * @returns {String} hex representation of input string
32941 */
32942function fromUtf8(stringValue) {
32943 var str = new Buffer(stringValue, 'utf8');
ebd8d4e8 32944
8b095871
IC
32945 return '0x' + padToEven(str.toString('hex')).replace(/^0+|0+$/g, '');
32946}
ab78acc6 32947
8b095871
IC
32948/**
32949 * Should be called to get hex representation (prefixed by 0x) of ascii string
32950 *
32951 * @method fromAscii
32952 * @param {String} string
32953 * @param {Number} optional padding
32954 * @returns {String} hex representation of input string
32955 */
32956function fromAscii(stringValue) {
32957 var hex = ''; // eslint-disable-line
32958 for (var i = 0; i < stringValue.length; i++) {
32959 // eslint-disable-line
32960 var code = stringValue.charCodeAt(i);
32961 var n = code.toString(16);
32962 hex += n.length < 2 ? '0' + n : n;
32963 }
ab78acc6 32964
8b095871
IC
32965 return '0x' + hex;
32966}
ebd8d4e8 32967
8b095871
IC
32968/**
32969 * getKeys([{a: 1, b: 2}, {a: 3, b: 4}], 'a') => [1, 3]
32970 *
32971 * @method getKeys get specific key from inner object array of objects
32972 * @param {String} params
32973 * @param {String} key
32974 * @param {Boolean} allowEmpty
32975 * @returns {Array} output just a simple array of output keys
32976 */
32977function getKeys(params, key, allowEmpty) {
32978 if (!Array.isArray(params)) {
32979 throw new Error('[ethjs-util] method getKeys expecting type Array as \'params\' input, got \'' + typeof params + '\'');
32980 }
32981 if (typeof key !== 'string') {
32982 throw new Error('[ethjs-util] method getKeys expecting type String for input \'key\' got \'' + typeof key + '\'.');
32983 }
ebd8d4e8 32984
8b095871 32985 var result = []; // eslint-disable-line
ebd8d4e8 32986
8b095871
IC
32987 for (var i = 0; i < params.length; i++) {
32988 // eslint-disable-line
32989 var value = params[i][key]; // eslint-disable-line
32990 if (allowEmpty && !value) {
32991 value = '';
32992 } else if (typeof value !== 'string') {
32993 throw new Error('invalid abi');
32994 }
32995 result.push(value);
32996 }
ebd8d4e8 32997
8b095871 32998 return result;
ebd8d4e8
IC
32999}
33000
8b095871
IC
33001/**
33002 * Is the string a hex string.
33003 *
33004 * @method check if string is hex string of specific length
33005 * @param {String} value
33006 * @param {Number} length
33007 * @returns {Boolean} output the string is a hex string
33008 */
33009function isHexString(value, length) {
33010 if (typeof value !== 'string' || !value.match(/^0x[0-9A-Fa-f]*$/)) {
33011 return false;
ab78acc6
IC
33012 }
33013
8b095871
IC
33014 if (length && value.length !== 2 + 2 * length) {
33015 return false;
33016 }
ebd8d4e8 33017
8b095871
IC
33018 return true;
33019}
ab78acc6 33020
8b095871
IC
33021module.exports = {
33022 arrayContainsArray: arrayContainsArray,
33023 intToBuffer: intToBuffer,
33024 getBinarySize: getBinarySize,
33025 isHexPrefixed: isHexPrefixed,
33026 stripHexPrefix: stripHexPrefix,
33027 padToEven: padToEven,
33028 intToHex: intToHex,
33029 fromAscii: fromAscii,
33030 fromUtf8: fromUtf8,
33031 toAscii: toAscii,
33032 toUtf8: toUtf8,
33033 getKeys: getKeys,
33034 isHexString: isHexString
33035};
33036}).call(this,require("buffer").Buffer)
33037},{"buffer":5,"is-hex-prefixed":64,"strip-hex-prefix":87}],57:[function(require,module,exports){
33038var hash = exports;
33039
33040hash.utils = require('./hash/utils');
33041hash.common = require('./hash/common');
33042hash.sha = require('./hash/sha');
33043hash.ripemd = require('./hash/ripemd');
33044hash.hmac = require('./hash/hmac');
33045
33046// Proxy hash functions to the main object
33047hash.sha1 = hash.sha.sha1;
33048hash.sha256 = hash.sha.sha256;
33049hash.sha224 = hash.sha.sha224;
33050hash.sha384 = hash.sha.sha384;
33051hash.sha512 = hash.sha.sha512;
33052hash.ripemd160 = hash.ripemd.ripemd160;
33053
33054},{"./hash/common":58,"./hash/hmac":59,"./hash/ripemd":60,"./hash/sha":61,"./hash/utils":62}],58:[function(require,module,exports){
33055var hash = require('../hash');
33056var utils = hash.utils;
33057var assert = utils.assert;
33058
33059function BlockHash() {
33060 this.pending = null;
33061 this.pendingTotal = 0;
33062 this.blockSize = this.constructor.blockSize;
33063 this.outSize = this.constructor.outSize;
33064 this.hmacStrength = this.constructor.hmacStrength;
33065 this.padLength = this.constructor.padLength / 8;
33066 this.endian = 'big';
33067
33068 this._delta8 = this.blockSize / 8;
33069 this._delta32 = this.blockSize / 32;
33070}
33071exports.BlockHash = BlockHash;
33072
33073BlockHash.prototype.update = function update(msg, enc) {
33074 // Convert message to array, pad it, and join into 32bit blocks
33075 msg = utils.toArray(msg, enc);
33076 if (!this.pending)
33077 this.pending = msg;
33078 else
33079 this.pending = this.pending.concat(msg);
33080 this.pendingTotal += msg.length;
ab78acc6 33081
8b095871
IC
33082 // Enough data, try updating
33083 if (this.pending.length >= this._delta8) {
33084 msg = this.pending;
ebd8d4e8 33085
8b095871
IC
33086 // Process pending data in blocks
33087 var r = msg.length % this._delta8;
33088 this.pending = msg.slice(msg.length - r, msg.length);
33089 if (this.pending.length === 0)
33090 this.pending = null;
ebd8d4e8 33091
8b095871
IC
33092 msg = utils.join32(msg, 0, msg.length - r, this.endian);
33093 for (var i = 0; i < msg.length; i += this._delta32)
33094 this._update(msg, i, i + this._delta32);
ebd8d4e8
IC
33095 }
33096
8b095871
IC
33097 return this;
33098};
ebd8d4e8 33099
8b095871
IC
33100BlockHash.prototype.digest = function digest(enc) {
33101 this.update(this._pad());
33102 assert(this.pending === null);
ebd8d4e8 33103
8b095871
IC
33104 return this._digest(enc);
33105};
ebd8d4e8 33106
8b095871
IC
33107BlockHash.prototype._pad = function pad() {
33108 var len = this.pendingTotal;
33109 var bytes = this._delta8;
33110 var k = bytes - ((len + this.padLength) % bytes);
33111 var res = new Array(k + this.padLength);
33112 res[0] = 0x80;
33113 for (var i = 1; i < k; i++)
33114 res[i] = 0;
33115
33116 // Append length
33117 len <<= 3;
33118 if (this.endian === 'big') {
33119 for (var t = 8; t < this.padLength; t++)
33120 res[i++] = 0;
33121
33122 res[i++] = 0;
33123 res[i++] = 0;
33124 res[i++] = 0;
33125 res[i++] = 0;
33126 res[i++] = (len >>> 24) & 0xff;
33127 res[i++] = (len >>> 16) & 0xff;
33128 res[i++] = (len >>> 8) & 0xff;
33129 res[i++] = len & 0xff;
ebd8d4e8 33130 } else {
8b095871
IC
33131 res[i++] = len & 0xff;
33132 res[i++] = (len >>> 8) & 0xff;
33133 res[i++] = (len >>> 16) & 0xff;
33134 res[i++] = (len >>> 24) & 0xff;
33135 res[i++] = 0;
33136 res[i++] = 0;
33137 res[i++] = 0;
33138 res[i++] = 0;
ebd8d4e8 33139
8b095871
IC
33140 for (var t = 8; t < this.padLength; t++)
33141 res[i++] = 0;
ebd8d4e8
IC
33142 }
33143
8b095871
IC
33144 return res;
33145};
ebd8d4e8 33146
8b095871
IC
33147},{"../hash":57}],59:[function(require,module,exports){
33148var hmac = exports;
ebd8d4e8 33149
8b095871
IC
33150var hash = require('../hash');
33151var utils = hash.utils;
33152var assert = utils.assert;
ebd8d4e8 33153
8b095871
IC
33154function Hmac(hash, key, enc) {
33155 if (!(this instanceof Hmac))
33156 return new Hmac(hash, key, enc);
33157 this.Hash = hash;
33158 this.blockSize = hash.blockSize / 8;
33159 this.outSize = hash.outSize / 8;
33160 this.inner = null;
33161 this.outer = null;
ebd8d4e8 33162
8b095871 33163 this._init(utils.toArray(key, enc));
ebd8d4e8 33164}
8b095871 33165module.exports = Hmac;
ebd8d4e8 33166
8b095871
IC
33167Hmac.prototype._init = function init(key) {
33168 // Shorten key, if needed
33169 if (key.length > this.blockSize)
33170 key = new this.Hash().update(key).digest();
33171 assert(key.length <= this.blockSize);
ebd8d4e8 33172
8b095871
IC
33173 // Add padding to key
33174 for (var i = key.length; i < this.blockSize; i++)
33175 key.push(0);
ab78acc6 33176
8b095871
IC
33177 for (var i = 0; i < key.length; i++)
33178 key[i] ^= 0x36;
33179 this.inner = new this.Hash().update(key);
ab78acc6 33180
8b095871
IC
33181 // 0x36 ^ 0x5c = 0x6a
33182 for (var i = 0; i < key.length; i++)
33183 key[i] ^= 0x6a;
33184 this.outer = new this.Hash().update(key);
33185};
ebd8d4e8 33186
8b095871
IC
33187Hmac.prototype.update = function update(msg, enc) {
33188 this.inner.update(msg, enc);
33189 return this;
33190};
ab78acc6 33191
8b095871
IC
33192Hmac.prototype.digest = function digest(enc) {
33193 this.outer.update(this.inner.digest());
33194 return this.outer.digest(enc);
33195};
ab78acc6 33196
8b095871
IC
33197},{"../hash":57}],60:[function(require,module,exports){
33198var hash = require('../hash');
33199var utils = hash.utils;
33200
33201var rotl32 = utils.rotl32;
33202var sum32 = utils.sum32;
33203var sum32_3 = utils.sum32_3;
33204var sum32_4 = utils.sum32_4;
33205var BlockHash = hash.common.BlockHash;
33206
33207function RIPEMD160() {
33208 if (!(this instanceof RIPEMD160))
33209 return new RIPEMD160();
33210
33211 BlockHash.call(this);
33212
33213 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
33214 this.endian = 'little';
33215}
33216utils.inherits(RIPEMD160, BlockHash);
33217exports.ripemd160 = RIPEMD160;
33218
33219RIPEMD160.blockSize = 512;
33220RIPEMD160.outSize = 160;
33221RIPEMD160.hmacStrength = 192;
33222RIPEMD160.padLength = 64;
33223
33224RIPEMD160.prototype._update = function update(msg, start) {
33225 var A = this.h[0];
33226 var B = this.h[1];
33227 var C = this.h[2];
33228 var D = this.h[3];
33229 var E = this.h[4];
33230 var Ah = A;
33231 var Bh = B;
33232 var Ch = C;
33233 var Dh = D;
33234 var Eh = E;
33235 for (var j = 0; j < 80; j++) {
33236 var T = sum32(
33237 rotl32(
33238 sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
33239 s[j]),
33240 E);
33241 A = E;
33242 E = D;
33243 D = rotl32(C, 10);
33244 C = B;
33245 B = T;
33246 T = sum32(
33247 rotl32(
33248 sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
33249 sh[j]),
33250 Eh);
33251 Ah = Eh;
33252 Eh = Dh;
33253 Dh = rotl32(Ch, 10);
33254 Ch = Bh;
33255 Bh = T;
33256 }
33257 T = sum32_3(this.h[1], C, Dh);
33258 this.h[1] = sum32_3(this.h[2], D, Eh);
33259 this.h[2] = sum32_3(this.h[3], E, Ah);
33260 this.h[3] = sum32_3(this.h[4], A, Bh);
33261 this.h[4] = sum32_3(this.h[0], B, Ch);
33262 this.h[0] = T;
33263};
ebd8d4e8 33264
8b095871
IC
33265RIPEMD160.prototype._digest = function digest(enc) {
33266 if (enc === 'hex')
33267 return utils.toHex32(this.h, 'little');
33268 else
33269 return utils.split32(this.h, 'little');
33270};
ebd8d4e8 33271
8b095871
IC
33272function f(j, x, y, z) {
33273 if (j <= 15)
33274 return x ^ y ^ z;
33275 else if (j <= 31)
33276 return (x & y) | ((~x) & z);
33277 else if (j <= 47)
33278 return (x | (~y)) ^ z;
33279 else if (j <= 63)
33280 return (x & z) | (y & (~z));
33281 else
33282 return x ^ (y | (~z));
33283}
33284
33285function K(j) {
33286 if (j <= 15)
33287 return 0x00000000;
33288 else if (j <= 31)
33289 return 0x5a827999;
33290 else if (j <= 47)
33291 return 0x6ed9eba1;
33292 else if (j <= 63)
33293 return 0x8f1bbcdc;
33294 else
33295 return 0xa953fd4e;
33296}
33297
33298function Kh(j) {
33299 if (j <= 15)
33300 return 0x50a28be6;
33301 else if (j <= 31)
33302 return 0x5c4dd124;
33303 else if (j <= 47)
33304 return 0x6d703ef3;
33305 else if (j <= 63)
33306 return 0x7a6d76e9;
33307 else
33308 return 0x00000000;
33309}
ebd8d4e8 33310
8b095871
IC
33311var r = [
33312 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
33313 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
33314 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
33315 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
33316 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
33317];
ebd8d4e8 33318
8b095871
IC
33319var rh = [
33320 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
33321 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
33322 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
33323 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
33324 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
33325];
ebd8d4e8 33326
8b095871
IC
33327var s = [
33328 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
33329 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
33330 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
33331 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
33332 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
33333];
ebd8d4e8 33334
8b095871
IC
33335var sh = [
33336 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
33337 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
33338 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
33339 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
33340 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
33341];
ebd8d4e8 33342
8b095871
IC
33343},{"../hash":57}],61:[function(require,module,exports){
33344var hash = require('../hash');
33345var utils = hash.utils;
33346var assert = utils.assert;
33347
33348var rotr32 = utils.rotr32;
33349var rotl32 = utils.rotl32;
33350var sum32 = utils.sum32;
33351var sum32_4 = utils.sum32_4;
33352var sum32_5 = utils.sum32_5;
33353var rotr64_hi = utils.rotr64_hi;
33354var rotr64_lo = utils.rotr64_lo;
33355var shr64_hi = utils.shr64_hi;
33356var shr64_lo = utils.shr64_lo;
33357var sum64 = utils.sum64;
33358var sum64_hi = utils.sum64_hi;
33359var sum64_lo = utils.sum64_lo;
33360var sum64_4_hi = utils.sum64_4_hi;
33361var sum64_4_lo = utils.sum64_4_lo;
33362var sum64_5_hi = utils.sum64_5_hi;
33363var sum64_5_lo = utils.sum64_5_lo;
33364var BlockHash = hash.common.BlockHash;
33365
33366var sha256_K = [
33367 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
33368 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
33369 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
33370 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
33371 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
33372 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
33373 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
33374 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
33375 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
33376 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
33377 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
33378 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
33379 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
33380 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
33381 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
33382 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
33383];
ebd8d4e8 33384
8b095871
IC
33385var sha512_K = [
33386 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
33387 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
33388 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
33389 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
33390 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
33391 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
33392 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
33393 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
33394 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
33395 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
33396 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
33397 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
33398 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
33399 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
33400 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
33401 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
33402 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
33403 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
33404 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
33405 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
33406 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
33407 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
33408 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
33409 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
33410 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
33411 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
33412 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
33413 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
33414 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
33415 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
33416 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
33417 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
33418 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
33419 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
33420 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
33421 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
33422 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
33423 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
33424 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
33425 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
33426];
ebd8d4e8 33427
8b095871
IC
33428var sha1_K = [
33429 0x5A827999, 0x6ED9EBA1,
33430 0x8F1BBCDC, 0xCA62C1D6
33431];
ebd8d4e8 33432
8b095871
IC
33433function SHA256() {
33434 if (!(this instanceof SHA256))
33435 return new SHA256();
33436
33437 BlockHash.call(this);
33438 this.h = [ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
33439 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ];
33440 this.k = sha256_K;
33441 this.W = new Array(64);
33442}
33443utils.inherits(SHA256, BlockHash);
33444exports.sha256 = SHA256;
33445
33446SHA256.blockSize = 512;
33447SHA256.outSize = 256;
33448SHA256.hmacStrength = 192;
33449SHA256.padLength = 64;
33450
33451SHA256.prototype._update = function _update(msg, start) {
33452 var W = this.W;
33453
33454 for (var i = 0; i < 16; i++)
33455 W[i] = msg[start + i];
33456 for (; i < W.length; i++)
33457 W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
33458
33459 var a = this.h[0];
33460 var b = this.h[1];
33461 var c = this.h[2];
33462 var d = this.h[3];
33463 var e = this.h[4];
33464 var f = this.h[5];
33465 var g = this.h[6];
33466 var h = this.h[7];
33467
33468 assert(this.k.length === W.length);
33469 for (var i = 0; i < W.length; i++) {
33470 var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
33471 var T2 = sum32(s0_256(a), maj32(a, b, c));
33472 h = g;
33473 g = f;
33474 f = e;
33475 e = sum32(d, T1);
33476 d = c;
33477 c = b;
33478 b = a;
33479 a = sum32(T1, T2);
33480 }
33481
33482 this.h[0] = sum32(this.h[0], a);
33483 this.h[1] = sum32(this.h[1], b);
33484 this.h[2] = sum32(this.h[2], c);
33485 this.h[3] = sum32(this.h[3], d);
33486 this.h[4] = sum32(this.h[4], e);
33487 this.h[5] = sum32(this.h[5], f);
33488 this.h[6] = sum32(this.h[6], g);
33489 this.h[7] = sum32(this.h[7], h);
33490};
ebd8d4e8 33491
8b095871
IC
33492SHA256.prototype._digest = function digest(enc) {
33493 if (enc === 'hex')
33494 return utils.toHex32(this.h, 'big');
33495 else
33496 return utils.split32(this.h, 'big');
33497};
ebd8d4e8 33498
8b095871
IC
33499function SHA224() {
33500 if (!(this instanceof SHA224))
33501 return new SHA224();
ebd8d4e8 33502
8b095871
IC
33503 SHA256.call(this);
33504 this.h = [ 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
33505 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];
33506}
33507utils.inherits(SHA224, SHA256);
33508exports.sha224 = SHA224;
ebd8d4e8 33509
8b095871
IC
33510SHA224.blockSize = 512;
33511SHA224.outSize = 224;
33512SHA224.hmacStrength = 192;
33513SHA224.padLength = 64;
ebd8d4e8 33514
8b095871
IC
33515SHA224.prototype._digest = function digest(enc) {
33516 // Just truncate output
33517 if (enc === 'hex')
33518 return utils.toHex32(this.h.slice(0, 7), 'big');
33519 else
33520 return utils.split32(this.h.slice(0, 7), 'big');
33521};
33522
33523function SHA512() {
33524 if (!(this instanceof SHA512))
33525 return new SHA512();
33526
33527 BlockHash.call(this);
33528 this.h = [ 0x6a09e667, 0xf3bcc908,
33529 0xbb67ae85, 0x84caa73b,
33530 0x3c6ef372, 0xfe94f82b,
33531 0xa54ff53a, 0x5f1d36f1,
33532 0x510e527f, 0xade682d1,
33533 0x9b05688c, 0x2b3e6c1f,
33534 0x1f83d9ab, 0xfb41bd6b,
33535 0x5be0cd19, 0x137e2179 ];
33536 this.k = sha512_K;
33537 this.W = new Array(160);
33538}
33539utils.inherits(SHA512, BlockHash);
33540exports.sha512 = SHA512;
33541
33542SHA512.blockSize = 1024;
33543SHA512.outSize = 512;
33544SHA512.hmacStrength = 192;
33545SHA512.padLength = 128;
33546
33547SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
33548 var W = this.W;
33549
33550 // 32 x 32bit words
33551 for (var i = 0; i < 32; i++)
33552 W[i] = msg[start + i];
33553 for (; i < W.length; i += 2) {
33554 var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2
33555 var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
33556 var c1_hi = W[i - 14]; // i - 7
33557 var c1_lo = W[i - 13];
33558 var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15
33559 var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
33560 var c3_hi = W[i - 32]; // i - 16
33561 var c3_lo = W[i - 31];
33562
33563 W[i] = sum64_4_hi(c0_hi, c0_lo,
33564 c1_hi, c1_lo,
33565 c2_hi, c2_lo,
33566 c3_hi, c3_lo);
33567 W[i + 1] = sum64_4_lo(c0_hi, c0_lo,
33568 c1_hi, c1_lo,
33569 c2_hi, c2_lo,
33570 c3_hi, c3_lo);
ebd8d4e8 33571 }
8b095871
IC
33572};
33573
33574SHA512.prototype._update = function _update(msg, start) {
33575 this._prepareBlock(msg, start);
33576
33577 var W = this.W;
33578
33579 var ah = this.h[0];
33580 var al = this.h[1];
33581 var bh = this.h[2];
33582 var bl = this.h[3];
33583 var ch = this.h[4];
33584 var cl = this.h[5];
33585 var dh = this.h[6];
33586 var dl = this.h[7];
33587 var eh = this.h[8];
33588 var el = this.h[9];
33589 var fh = this.h[10];
33590 var fl = this.h[11];
33591 var gh = this.h[12];
33592 var gl = this.h[13];
33593 var hh = this.h[14];
33594 var hl = this.h[15];
33595
33596 assert(this.k.length === W.length);
33597 for (var i = 0; i < W.length; i += 2) {
33598 var c0_hi = hh;
33599 var c0_lo = hl;
33600 var c1_hi = s1_512_hi(eh, el);
33601 var c1_lo = s1_512_lo(eh, el);
33602 var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
33603 var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
33604 var c3_hi = this.k[i];
33605 var c3_lo = this.k[i + 1];
33606 var c4_hi = W[i];
33607 var c4_lo = W[i + 1];
33608
33609 var T1_hi = sum64_5_hi(c0_hi, c0_lo,
33610 c1_hi, c1_lo,
33611 c2_hi, c2_lo,
33612 c3_hi, c3_lo,
33613 c4_hi, c4_lo);
33614 var T1_lo = sum64_5_lo(c0_hi, c0_lo,
33615 c1_hi, c1_lo,
33616 c2_hi, c2_lo,
33617 c3_hi, c3_lo,
33618 c4_hi, c4_lo);
33619
33620 var c0_hi = s0_512_hi(ah, al);
33621 var c0_lo = s0_512_lo(ah, al);
33622 var c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
33623 var c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
33624
33625 var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
33626 var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
33627
33628 hh = gh;
33629 hl = gl;
33630
33631 gh = fh;
33632 gl = fl;
33633
33634 fh = eh;
33635 fl = el;
33636
33637 eh = sum64_hi(dh, dl, T1_hi, T1_lo);
33638 el = sum64_lo(dl, dl, T1_hi, T1_lo);
33639
33640 dh = ch;
33641 dl = cl;
33642
33643 ch = bh;
33644 cl = bl;
33645
33646 bh = ah;
33647 bl = al;
33648
33649 ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
33650 al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
33651 }
33652
33653 sum64(this.h, 0, ah, al);
33654 sum64(this.h, 2, bh, bl);
33655 sum64(this.h, 4, ch, cl);
33656 sum64(this.h, 6, dh, dl);
33657 sum64(this.h, 8, eh, el);
33658 sum64(this.h, 10, fh, fl);
33659 sum64(this.h, 12, gh, gl);
33660 sum64(this.h, 14, hh, hl);
33661};
33662
33663SHA512.prototype._digest = function digest(enc) {
33664 if (enc === 'hex')
33665 return utils.toHex32(this.h, 'big');
33666 else
33667 return utils.split32(this.h, 'big');
33668};
33669
33670function SHA384() {
33671 if (!(this instanceof SHA384))
33672 return new SHA384();
33673
33674 SHA512.call(this);
33675 this.h = [ 0xcbbb9d5d, 0xc1059ed8,
33676 0x629a292a, 0x367cd507,
33677 0x9159015a, 0x3070dd17,
33678 0x152fecd8, 0xf70e5939,
33679 0x67332667, 0xffc00b31,
33680 0x8eb44a87, 0x68581511,
33681 0xdb0c2e0d, 0x64f98fa7,
33682 0x47b5481d, 0xbefa4fa4 ];
33683}
33684utils.inherits(SHA384, SHA512);
33685exports.sha384 = SHA384;
33686
33687SHA384.blockSize = 1024;
33688SHA384.outSize = 384;
33689SHA384.hmacStrength = 192;
33690SHA384.padLength = 128;
33691
33692SHA384.prototype._digest = function digest(enc) {
33693 if (enc === 'hex')
33694 return utils.toHex32(this.h.slice(0, 12), 'big');
33695 else
33696 return utils.split32(this.h.slice(0, 12), 'big');
33697};
ebd8d4e8 33698
8b095871
IC
33699function SHA1() {
33700 if (!(this instanceof SHA1))
33701 return new SHA1();
ebd8d4e8 33702
8b095871
IC
33703 BlockHash.call(this);
33704 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe,
33705 0x10325476, 0xc3d2e1f0 ];
33706 this.W = new Array(80);
33707}
ebd8d4e8 33708
8b095871
IC
33709utils.inherits(SHA1, BlockHash);
33710exports.sha1 = SHA1;
ebd8d4e8 33711
8b095871
IC
33712SHA1.blockSize = 512;
33713SHA1.outSize = 160;
33714SHA1.hmacStrength = 80;
33715SHA1.padLength = 64;
ebd8d4e8 33716
8b095871
IC
33717SHA1.prototype._update = function _update(msg, start) {
33718 var W = this.W;
ebd8d4e8 33719
8b095871
IC
33720 for (var i = 0; i < 16; i++)
33721 W[i] = msg[start + i];
ebd8d4e8 33722
8b095871
IC
33723 for(; i < W.length; i++)
33724 W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
ebd8d4e8 33725
8b095871
IC
33726 var a = this.h[0];
33727 var b = this.h[1];
33728 var c = this.h[2];
33729 var d = this.h[3];
33730 var e = this.h[4];
ebd8d4e8 33731
8b095871
IC
33732 for (var i = 0; i < W.length; i++) {
33733 var s = ~~(i / 20);
33734 var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
33735 e = d;
33736 d = c;
33737 c = rotl32(b, 30);
33738 b = a;
33739 a = t;
ebd8d4e8
IC
33740 }
33741
8b095871
IC
33742 this.h[0] = sum32(this.h[0], a);
33743 this.h[1] = sum32(this.h[1], b);
33744 this.h[2] = sum32(this.h[2], c);
33745 this.h[3] = sum32(this.h[3], d);
33746 this.h[4] = sum32(this.h[4], e);
33747};
ebd8d4e8 33748
8b095871
IC
33749SHA1.prototype._digest = function digest(enc) {
33750 if (enc === 'hex')
33751 return utils.toHex32(this.h, 'big');
33752 else
33753 return utils.split32(this.h, 'big');
33754};
33755
33756function ch32(x, y, z) {
33757 return (x & y) ^ ((~x) & z);
ebd8d4e8
IC
33758}
33759
8b095871
IC
33760function maj32(x, y, z) {
33761 return (x & y) ^ (x & z) ^ (y & z);
ebd8d4e8
IC
33762}
33763
8b095871
IC
33764function p32(x, y, z) {
33765 return x ^ y ^ z;
33766}
ebd8d4e8 33767
8b095871
IC
33768function s0_256(x) {
33769 return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
33770}
ebd8d4e8 33771
8b095871
IC
33772function s1_256(x) {
33773 return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
ab78acc6
IC
33774}
33775
8b095871
IC
33776function g0_256(x) {
33777 return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);
33778}
ab78acc6 33779
8b095871
IC
33780function g1_256(x) {
33781 return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
33782}
ab78acc6 33783
8b095871
IC
33784function ft_1(s, x, y, z) {
33785 if (s === 0)
33786 return ch32(x, y, z);
33787 if (s === 1 || s === 3)
33788 return p32(x, y, z);
33789 if (s === 2)
33790 return maj32(x, y, z);
33791}
ebd8d4e8 33792
8b095871
IC
33793function ch64_hi(xh, xl, yh, yl, zh, zl) {
33794 var r = (xh & yh) ^ ((~xh) & zh);
33795 if (r < 0)
33796 r += 0x100000000;
33797 return r;
33798}
ebd8d4e8 33799
8b095871
IC
33800function ch64_lo(xh, xl, yh, yl, zh, zl) {
33801 var r = (xl & yl) ^ ((~xl) & zl);
33802 if (r < 0)
33803 r += 0x100000000;
33804 return r;
ebd8d4e8
IC
33805}
33806
8b095871
IC
33807function maj64_hi(xh, xl, yh, yl, zh, zl) {
33808 var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);
33809 if (r < 0)
33810 r += 0x100000000;
33811 return r;
33812}
ebd8d4e8 33813
8b095871
IC
33814function maj64_lo(xh, xl, yh, yl, zh, zl) {
33815 var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);
33816 if (r < 0)
33817 r += 0x100000000;
33818 return r;
33819}
ebd8d4e8 33820
8b095871
IC
33821function s0_512_hi(xh, xl) {
33822 var c0_hi = rotr64_hi(xh, xl, 28);
33823 var c1_hi = rotr64_hi(xl, xh, 2); // 34
33824 var c2_hi = rotr64_hi(xl, xh, 7); // 39
33825
33826 var r = c0_hi ^ c1_hi ^ c2_hi;
33827 if (r < 0)
33828 r += 0x100000000;
33829 return r;
ebd8d4e8
IC
33830}
33831
8b095871
IC
33832function s0_512_lo(xh, xl) {
33833 var c0_lo = rotr64_lo(xh, xl, 28);
33834 var c1_lo = rotr64_lo(xl, xh, 2); // 34
33835 var c2_lo = rotr64_lo(xl, xh, 7); // 39
ab78acc6 33836
8b095871
IC
33837 var r = c0_lo ^ c1_lo ^ c2_lo;
33838 if (r < 0)
33839 r += 0x100000000;
33840 return r;
33841}
ebd8d4e8 33842
8b095871
IC
33843function s1_512_hi(xh, xl) {
33844 var c0_hi = rotr64_hi(xh, xl, 14);
33845 var c1_hi = rotr64_hi(xh, xl, 18);
33846 var c2_hi = rotr64_hi(xl, xh, 9); // 41
ebd8d4e8 33847
8b095871
IC
33848 var r = c0_hi ^ c1_hi ^ c2_hi;
33849 if (r < 0)
33850 r += 0x100000000;
33851 return r;
ebd8d4e8
IC
33852}
33853
8b095871
IC
33854function s1_512_lo(xh, xl) {
33855 var c0_lo = rotr64_lo(xh, xl, 14);
33856 var c1_lo = rotr64_lo(xh, xl, 18);
33857 var c2_lo = rotr64_lo(xl, xh, 9); // 41
33858
33859 var r = c0_lo ^ c1_lo ^ c2_lo;
33860 if (r < 0)
33861 r += 0x100000000;
33862 return r;
ebd8d4e8
IC
33863}
33864
8b095871
IC
33865function g0_512_hi(xh, xl) {
33866 var c0_hi = rotr64_hi(xh, xl, 1);
33867 var c1_hi = rotr64_hi(xh, xl, 8);
33868 var c2_hi = shr64_hi(xh, xl, 7);
ebd8d4e8 33869
8b095871
IC
33870 var r = c0_hi ^ c1_hi ^ c2_hi;
33871 if (r < 0)
33872 r += 0x100000000;
33873 return r;
33874}
33875
33876function g0_512_lo(xh, xl) {
33877 var c0_lo = rotr64_lo(xh, xl, 1);
33878 var c1_lo = rotr64_lo(xh, xl, 8);
33879 var c2_lo = shr64_lo(xh, xl, 7);
33880
33881 var r = c0_lo ^ c1_lo ^ c2_lo;
33882 if (r < 0)
33883 r += 0x100000000;
33884 return r;
33885}
33886
33887function g1_512_hi(xh, xl) {
33888 var c0_hi = rotr64_hi(xh, xl, 19);
33889 var c1_hi = rotr64_hi(xl, xh, 29); // 61
33890 var c2_hi = shr64_hi(xh, xl, 6);
33891
33892 var r = c0_hi ^ c1_hi ^ c2_hi;
33893 if (r < 0)
33894 r += 0x100000000;
33895 return r;
33896}
33897
33898function g1_512_lo(xh, xl) {
33899 var c0_lo = rotr64_lo(xh, xl, 19);
33900 var c1_lo = rotr64_lo(xl, xh, 29); // 61
33901 var c2_lo = shr64_lo(xh, xl, 6);
33902
33903 var r = c0_lo ^ c1_lo ^ c2_lo;
33904 if (r < 0)
33905 r += 0x100000000;
33906 return r;
33907}
33908
33909},{"../hash":57}],62:[function(require,module,exports){
33910var utils = exports;
33911var inherits = require('inherits');
33912
33913function toArray(msg, enc) {
33914 if (Array.isArray(msg))
33915 return msg.slice();
33916 if (!msg)
33917 return [];
33918 var res = [];
33919 if (typeof msg === 'string') {
33920 if (!enc) {
33921 for (var i = 0; i < msg.length; i++) {
33922 var c = msg.charCodeAt(i);
33923 var hi = c >> 8;
33924 var lo = c & 0xff;
33925 if (hi)
33926 res.push(hi, lo);
33927 else
33928 res.push(lo);
33929 }
33930 } else if (enc === 'hex') {
33931 msg = msg.replace(/[^a-z0-9]+/ig, '');
33932 if (msg.length % 2 !== 0)
33933 msg = '0' + msg;
33934 for (var i = 0; i < msg.length; i += 2)
33935 res.push(parseInt(msg[i] + msg[i + 1], 16));
33936 }
33937 } else {
33938 for (var i = 0; i < msg.length; i++)
33939 res[i] = msg[i] | 0;
ebd8d4e8 33940 }
8b095871 33941 return res;
ebd8d4e8 33942}
8b095871 33943utils.toArray = toArray;
ebd8d4e8 33944
8b095871
IC
33945function toHex(msg) {
33946 var res = '';
33947 for (var i = 0; i < msg.length; i++)
33948 res += zero2(msg[i].toString(16));
33949 return res;
33950}
33951utils.toHex = toHex;
ebd8d4e8 33952
8b095871
IC
33953function htonl(w) {
33954 var res = (w >>> 24) |
33955 ((w >>> 8) & 0xff00) |
33956 ((w << 8) & 0xff0000) |
33957 ((w & 0xff) << 24);
33958 return res >>> 0;
33959}
33960utils.htonl = htonl;
ebd8d4e8 33961
8b095871
IC
33962function toHex32(msg, endian) {
33963 var res = '';
33964 for (var i = 0; i < msg.length; i++) {
33965 var w = msg[i];
33966 if (endian === 'little')
33967 w = htonl(w);
33968 res += zero8(w.toString(16));
33969 }
33970 return res;
33971}
33972utils.toHex32 = toHex32;
ebd8d4e8 33973
8b095871
IC
33974function zero2(word) {
33975 if (word.length === 1)
33976 return '0' + word;
33977 else
33978 return word;
33979}
33980utils.zero2 = zero2;
33981
33982function zero8(word) {
33983 if (word.length === 7)
33984 return '0' + word;
33985 else if (word.length === 6)
33986 return '00' + word;
33987 else if (word.length === 5)
33988 return '000' + word;
33989 else if (word.length === 4)
33990 return '0000' + word;
33991 else if (word.length === 3)
33992 return '00000' + word;
33993 else if (word.length === 2)
33994 return '000000' + word;
33995 else if (word.length === 1)
33996 return '0000000' + word;
33997 else
33998 return word;
33999}
34000utils.zero8 = zero8;
34001
34002function join32(msg, start, end, endian) {
34003 var len = end - start;
34004 assert(len % 4 === 0);
34005 var res = new Array(len / 4);
34006 for (var i = 0, k = start; i < res.length; i++, k += 4) {
34007 var w;
34008 if (endian === 'big')
34009 w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
34010 else
34011 w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
34012 res[i] = w >>> 0;
34013 }
34014 return res;
34015}
34016utils.join32 = join32;
34017
34018function split32(msg, endian) {
34019 var res = new Array(msg.length * 4);
34020 for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
34021 var m = msg[i];
34022 if (endian === 'big') {
34023 res[k] = m >>> 24;
34024 res[k + 1] = (m >>> 16) & 0xff;
34025 res[k + 2] = (m >>> 8) & 0xff;
34026 res[k + 3] = m & 0xff;
34027 } else {
34028 res[k + 3] = m >>> 24;
34029 res[k + 2] = (m >>> 16) & 0xff;
34030 res[k + 1] = (m >>> 8) & 0xff;
34031 res[k] = m & 0xff;
34032 }
ebd8d4e8 34033 }
8b095871 34034 return res;
ebd8d4e8 34035}
8b095871 34036utils.split32 = split32;
ebd8d4e8 34037
8b095871
IC
34038function rotr32(w, b) {
34039 return (w >>> b) | (w << (32 - b));
34040}
34041utils.rotr32 = rotr32;
ebd8d4e8 34042
8b095871
IC
34043function rotl32(w, b) {
34044 return (w << b) | (w >>> (32 - b));
34045}
34046utils.rotl32 = rotl32;
ebd8d4e8 34047
8b095871
IC
34048function sum32(a, b) {
34049 return (a + b) >>> 0;
34050}
34051utils.sum32 = sum32;
ebd8d4e8 34052
8b095871
IC
34053function sum32_3(a, b, c) {
34054 return (a + b + c) >>> 0;
34055}
34056utils.sum32_3 = sum32_3;
ebd8d4e8 34057
8b095871
IC
34058function sum32_4(a, b, c, d) {
34059 return (a + b + c + d) >>> 0;
34060}
34061utils.sum32_4 = sum32_4;
ebd8d4e8 34062
8b095871
IC
34063function sum32_5(a, b, c, d, e) {
34064 return (a + b + c + d + e) >>> 0;
34065}
34066utils.sum32_5 = sum32_5;
ebd8d4e8 34067
8b095871
IC
34068function assert(cond, msg) {
34069 if (!cond)
34070 throw new Error(msg || 'Assertion failed');
34071}
34072utils.assert = assert;
ab78acc6 34073
8b095871 34074utils.inherits = inherits;
ab78acc6 34075
8b095871
IC
34076function sum64(buf, pos, ah, al) {
34077 var bh = buf[pos];
34078 var bl = buf[pos + 1];
ab78acc6 34079
8b095871
IC
34080 var lo = (al + bl) >>> 0;
34081 var hi = (lo < al ? 1 : 0) + ah + bh;
34082 buf[pos] = hi >>> 0;
34083 buf[pos + 1] = lo;
34084}
34085exports.sum64 = sum64;
ebd8d4e8 34086
8b095871
IC
34087function sum64_hi(ah, al, bh, bl) {
34088 var lo = (al + bl) >>> 0;
34089 var hi = (lo < al ? 1 : 0) + ah + bh;
34090 return hi >>> 0;
34091};
34092exports.sum64_hi = sum64_hi;
ebd8d4e8 34093
8b095871
IC
34094function sum64_lo(ah, al, bh, bl) {
34095 var lo = al + bl;
34096 return lo >>> 0;
34097};
34098exports.sum64_lo = sum64_lo;
34099
34100function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
34101 var carry = 0;
34102 var lo = al;
34103 lo = (lo + bl) >>> 0;
34104 carry += lo < al ? 1 : 0;
34105 lo = (lo + cl) >>> 0;
34106 carry += lo < cl ? 1 : 0;
34107 lo = (lo + dl) >>> 0;
34108 carry += lo < dl ? 1 : 0;
34109
34110 var hi = ah + bh + ch + dh + carry;
34111 return hi >>> 0;
34112};
34113exports.sum64_4_hi = sum64_4_hi;
ebd8d4e8 34114
8b095871
IC
34115function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
34116 var lo = al + bl + cl + dl;
34117 return lo >>> 0;
34118};
34119exports.sum64_4_lo = sum64_4_lo;
34120
34121function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
34122 var carry = 0;
34123 var lo = al;
34124 lo = (lo + bl) >>> 0;
34125 carry += lo < al ? 1 : 0;
34126 lo = (lo + cl) >>> 0;
34127 carry += lo < cl ? 1 : 0;
34128 lo = (lo + dl) >>> 0;
34129 carry += lo < dl ? 1 : 0;
34130 lo = (lo + el) >>> 0;
34131 carry += lo < el ? 1 : 0;
34132
34133 var hi = ah + bh + ch + dh + eh + carry;
34134 return hi >>> 0;
34135};
34136exports.sum64_5_hi = sum64_5_hi;
34137
34138function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
34139 var lo = al + bl + cl + dl + el;
34140
34141 return lo >>> 0;
34142};
34143exports.sum64_5_lo = sum64_5_lo;
34144
34145function rotr64_hi(ah, al, num) {
34146 var r = (al << (32 - num)) | (ah >>> num);
34147 return r >>> 0;
34148};
34149exports.rotr64_hi = rotr64_hi;
34150
34151function rotr64_lo(ah, al, num) {
34152 var r = (ah << (32 - num)) | (al >>> num);
34153 return r >>> 0;
34154};
34155exports.rotr64_lo = rotr64_lo;
34156
34157function shr64_hi(ah, al, num) {
34158 return ah >>> num;
34159};
34160exports.shr64_hi = shr64_hi;
34161
34162function shr64_lo(ah, al, num) {
34163 var r = (ah << (32 - num)) | (al >>> num);
34164 return r >>> 0;
34165};
34166exports.shr64_lo = shr64_lo;
34167
34168},{"inherits":63}],63:[function(require,module,exports){
34169arguments[4][9][0].apply(exports,arguments)
34170},{"dup":9}],64:[function(require,module,exports){
34171/**
34172 * Returns a `Boolean` on whether or not the a `String` starts with '0x'
34173 * @param {String} str the string input value
34174 * @return {Boolean} a boolean if it is or is not hex prefixed
34175 * @throws if the str input is not a string
34176 */
34177module.exports = function isHexPrefixed(str) {
34178 if (typeof str !== 'string') {
34179 throw new Error("[is-hex-prefixed] value must be type 'string', is currently type " + (typeof str) + ", while checking isHexPrefixed.");
34180 }
34181
34182 return str.slice(0, 2) === '0x';
ebd8d4e8
IC
34183}
34184
8b095871
IC
34185},{}],65:[function(require,module,exports){
34186'use strict'
34187module.exports = require('./lib/api')(require('./lib/keccak'))
34188
34189},{"./lib/api":66,"./lib/keccak":70}],66:[function(require,module,exports){
34190'use strict'
34191var createKeccak = require('./keccak')
34192var createShake = require('./shake')
34193
34194module.exports = function (KeccakState) {
34195 var Keccak = createKeccak(KeccakState)
34196 var Shake = createShake(KeccakState)
34197
34198 return function (algorithm, options) {
34199 var hash = typeof algorithm === 'string' ? algorithm.toLowerCase() : algorithm
34200 switch (hash) {
34201 case 'keccak224': return new Keccak(1152, 448, null, 224, options)
34202 case 'keccak256': return new Keccak(1088, 512, null, 256, options)
34203 case 'keccak384': return new Keccak(832, 768, null, 384, options)
34204 case 'keccak512': return new Keccak(576, 1024, null, 512, options)
34205
34206 case 'sha3-224': return new Keccak(1152, 448, 0x06, 224, options)
34207 case 'sha3-256': return new Keccak(1088, 512, 0x06, 256, options)
34208 case 'sha3-384': return new Keccak(832, 768, 0x06, 384, options)
34209 case 'sha3-512': return new Keccak(576, 1024, 0x06, 512, options)
34210
34211 case 'shake128': return new Shake(1344, 256, 0x1f, options)
34212 case 'shake256': return new Shake(1088, 512, 0x1f, options)
34213
34214 default: throw new Error('Invald algorithm: ' + algorithm)
34215 }
34216 }
34217}
34218
34219},{"./keccak":67,"./shake":68}],67:[function(require,module,exports){
ebd8d4e8 34220(function (Buffer){
8b095871
IC
34221'use strict'
34222var Transform = require('stream').Transform
34223var inherits = require('inherits')
34224
34225module.exports = function (KeccakState) {
34226 function Keccak (rate, capacity, delimitedSuffix, hashBitLength, options) {
34227 Transform.call(this, options)
34228
34229 this._rate = rate
34230 this._capacity = capacity
34231 this._delimitedSuffix = delimitedSuffix
34232 this._hashBitLength = hashBitLength
34233 this._options = options
34234
34235 this._state = new KeccakState()
34236 this._state.initialize(rate, capacity)
34237 this._finalized = false
34238 }
34239
34240 inherits(Keccak, Transform)
34241
34242 Keccak.prototype._transform = function (chunk, encoding, callback) {
34243 var error = null
34244 try {
34245 this.update(chunk, encoding)
34246 } catch (err) {
34247 error = err
34248 }
34249
34250 callback(error)
34251 }
34252
34253 Keccak.prototype._flush = function (callback) {
34254 var error = null
34255 try {
34256 this.push(this.digest())
34257 } catch (err) {
34258 error = err
34259 }
34260
34261 callback(error)
34262 }
34263
34264 Keccak.prototype.update = function (data, encoding) {
34265 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
34266 if (this._finalized) throw new Error('Digest already called')
34267 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
34268
34269 this._state.absorb(data)
34270
34271 return this
34272 }
34273
34274 Keccak.prototype.digest = function (encoding) {
34275 if (this._finalized) throw new Error('Digest already called')
34276 this._finalized = true
34277
34278 if (this._delimitedSuffix) this._state.absorbLastFewBits(this._delimitedSuffix)
34279 var digest = this._state.squeeze(this._hashBitLength / 8)
34280 if (encoding !== undefined) digest = digest.toString(encoding)
34281
34282 this._resetState()
34283
34284 return digest
34285 }
34286
34287 // remove result from memory
34288 Keccak.prototype._resetState = function () {
34289 this._state.initialize(this._rate, this._capacity)
34290 return this
34291 }
34292
34293 // because sometimes we need hash right now and little later
34294 Keccak.prototype._clone = function () {
34295 var clone = new Keccak(this._rate, this._capacity, this._delimitedSuffix, this._hashBitLength, this._options)
34296 this._state.copy(clone._state)
34297 clone._finalized = this._finalized
34298
34299 return clone
34300 }
34301
34302 return Keccak
34303}
34304
34305}).call(this,require("buffer").Buffer)
34306},{"buffer":5,"inherits":63,"stream":25}],68:[function(require,module,exports){
34307(function (Buffer){
34308'use strict'
34309var Transform = require('stream').Transform
34310var inherits = require('inherits')
34311
34312module.exports = function (KeccakState) {
34313 function Shake (rate, capacity, delimitedSuffix, options) {
34314 Transform.call(this, options)
34315
34316 this._rate = rate
34317 this._capacity = capacity
34318 this._delimitedSuffix = delimitedSuffix
34319 this._options = options
34320
34321 this._state = new KeccakState()
34322 this._state.initialize(rate, capacity)
34323 this._finalized = false
34324 }
34325
34326 inherits(Shake, Transform)
34327
34328 Shake.prototype._transform = function (chunk, encoding, callback) {
34329 var error = null
34330 try {
34331 this.update(chunk, encoding)
34332 } catch (err) {
34333 error = err
34334 }
ebd8d4e8 34335
8b095871
IC
34336 callback(error)
34337 }
ebd8d4e8 34338
8b095871 34339 Shake.prototype._flush = function () {}
ebd8d4e8 34340
8b095871
IC
34341 Shake.prototype._read = function (size) {
34342 this.push(this.squeeze(size))
34343 }
ebd8d4e8 34344
8b095871
IC
34345 Shake.prototype.update = function (data, encoding) {
34346 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
34347 if (this._finalized) throw new Error('Squeeze already called')
34348 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
34349
34350 this._state.absorb(data)
34351
34352 return this
34353 }
34354
34355 Shake.prototype.squeeze = function (dataByteLength, encoding) {
34356 if (!this._finalized) {
34357 this._finalized = true
34358 this._state.absorbLastFewBits(this._delimitedSuffix)
ebd8d4e8 34359 }
ebd8d4e8 34360
8b095871
IC
34361 var data = this._state.squeeze(dataByteLength)
34362 if (encoding !== undefined) data = data.toString(encoding)
ebd8d4e8 34363
8b095871
IC
34364 return data
34365 }
ebd8d4e8 34366
8b095871
IC
34367 Shake.prototype._resetState = function () {
34368 this._state.initialize(this._rate, this._capacity)
34369 return this
34370 }
ebd8d4e8 34371
8b095871
IC
34372 Shake.prototype._clone = function () {
34373 var clone = new Shake(this._rate, this._capacity, this._delimitedSuffix, this._options)
34374 this._state.copy(clone._state)
34375 clone._finalized = this._finalized
ab78acc6 34376
8b095871
IC
34377 return clone
34378 }
ebd8d4e8 34379
8b095871
IC
34380 return Shake
34381}
ab78acc6 34382
8b095871
IC
34383}).call(this,require("buffer").Buffer)
34384},{"buffer":5,"inherits":63,"stream":25}],69:[function(require,module,exports){
34385'use strict'
34386var 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]
34387
34388exports.p1600 = function (s) {
34389 for (var round = 0; round < 24; ++round) {
34390 // theta
34391 var lo0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]
34392 var hi0 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]
34393 var lo1 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]
34394 var hi1 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]
34395 var lo2 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]
34396 var hi2 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]
34397 var lo3 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]
34398 var hi3 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]
34399 var lo4 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]
34400 var hi4 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]
34401
34402 var lo = lo4 ^ (lo1 << 1 | hi1 >>> 31)
34403 var hi = hi4 ^ (hi1 << 1 | lo1 >>> 31)
34404 var t1slo0 = s[0] ^ lo
34405 var t1shi0 = s[1] ^ hi
34406 var t1slo5 = s[10] ^ lo
34407 var t1shi5 = s[11] ^ hi
34408 var t1slo10 = s[20] ^ lo
34409 var t1shi10 = s[21] ^ hi
34410 var t1slo15 = s[30] ^ lo
34411 var t1shi15 = s[31] ^ hi
34412 var t1slo20 = s[40] ^ lo
34413 var t1shi20 = s[41] ^ hi
34414 lo = lo0 ^ (lo2 << 1 | hi2 >>> 31)
34415 hi = hi0 ^ (hi2 << 1 | lo2 >>> 31)
34416 var t1slo1 = s[2] ^ lo
34417 var t1shi1 = s[3] ^ hi
34418 var t1slo6 = s[12] ^ lo
34419 var t1shi6 = s[13] ^ hi
34420 var t1slo11 = s[22] ^ lo
34421 var t1shi11 = s[23] ^ hi
34422 var t1slo16 = s[32] ^ lo
34423 var t1shi16 = s[33] ^ hi
34424 var t1slo21 = s[42] ^ lo
34425 var t1shi21 = s[43] ^ hi
34426 lo = lo1 ^ (lo3 << 1 | hi3 >>> 31)
34427 hi = hi1 ^ (hi3 << 1 | lo3 >>> 31)
34428 var t1slo2 = s[4] ^ lo
34429 var t1shi2 = s[5] ^ hi
34430 var t1slo7 = s[14] ^ lo
34431 var t1shi7 = s[15] ^ hi
34432 var t1slo12 = s[24] ^ lo
34433 var t1shi12 = s[25] ^ hi
34434 var t1slo17 = s[34] ^ lo
34435 var t1shi17 = s[35] ^ hi
34436 var t1slo22 = s[44] ^ lo
34437 var t1shi22 = s[45] ^ hi
34438 lo = lo2 ^ (lo4 << 1 | hi4 >>> 31)
34439 hi = hi2 ^ (hi4 << 1 | lo4 >>> 31)
34440 var t1slo3 = s[6] ^ lo
34441 var t1shi3 = s[7] ^ hi
34442 var t1slo8 = s[16] ^ lo
34443 var t1shi8 = s[17] ^ hi
34444 var t1slo13 = s[26] ^ lo
34445 var t1shi13 = s[27] ^ hi
34446 var t1slo18 = s[36] ^ lo
34447 var t1shi18 = s[37] ^ hi
34448 var t1slo23 = s[46] ^ lo
34449 var t1shi23 = s[47] ^ hi
34450 lo = lo3 ^ (lo0 << 1 | hi0 >>> 31)
34451 hi = hi3 ^ (hi0 << 1 | lo0 >>> 31)
34452 var t1slo4 = s[8] ^ lo
34453 var t1shi4 = s[9] ^ hi
34454 var t1slo9 = s[18] ^ lo
34455 var t1shi9 = s[19] ^ hi
34456 var t1slo14 = s[28] ^ lo
34457 var t1shi14 = s[29] ^ hi
34458 var t1slo19 = s[38] ^ lo
34459 var t1shi19 = s[39] ^ hi
34460 var t1slo24 = s[48] ^ lo
34461 var t1shi24 = s[49] ^ hi
34462
34463 // rho & pi
34464 var t2slo0 = t1slo0
34465 var t2shi0 = t1shi0
34466 var t2slo16 = (t1shi5 << 4 | t1slo5 >>> 28)
34467 var t2shi16 = (t1slo5 << 4 | t1shi5 >>> 28)
34468 var t2slo7 = (t1slo10 << 3 | t1shi10 >>> 29)
34469 var t2shi7 = (t1shi10 << 3 | t1slo10 >>> 29)
34470 var t2slo23 = (t1shi15 << 9 | t1slo15 >>> 23)
34471 var t2shi23 = (t1slo15 << 9 | t1shi15 >>> 23)
34472 var t2slo14 = (t1slo20 << 18 | t1shi20 >>> 14)
34473 var t2shi14 = (t1shi20 << 18 | t1slo20 >>> 14)
34474 var t2slo10 = (t1slo1 << 1 | t1shi1 >>> 31)
34475 var t2shi10 = (t1shi1 << 1 | t1slo1 >>> 31)
34476 var t2slo1 = (t1shi6 << 12 | t1slo6 >>> 20)
34477 var t2shi1 = (t1slo6 << 12 | t1shi6 >>> 20)
34478 var t2slo17 = (t1slo11 << 10 | t1shi11 >>> 22)
34479 var t2shi17 = (t1shi11 << 10 | t1slo11 >>> 22)
34480 var t2slo8 = (t1shi16 << 13 | t1slo16 >>> 19)
34481 var t2shi8 = (t1slo16 << 13 | t1shi16 >>> 19)
34482 var t2slo24 = (t1slo21 << 2 | t1shi21 >>> 30)
34483 var t2shi24 = (t1shi21 << 2 | t1slo21 >>> 30)
34484 var t2slo20 = (t1shi2 << 30 | t1slo2 >>> 2)
34485 var t2shi20 = (t1slo2 << 30 | t1shi2 >>> 2)
34486 var t2slo11 = (t1slo7 << 6 | t1shi7 >>> 26)
34487 var t2shi11 = (t1shi7 << 6 | t1slo7 >>> 26)
34488 var t2slo2 = (t1shi12 << 11 | t1slo12 >>> 21)
34489 var t2shi2 = (t1slo12 << 11 | t1shi12 >>> 21)
34490 var t2slo18 = (t1slo17 << 15 | t1shi17 >>> 17)
34491 var t2shi18 = (t1shi17 << 15 | t1slo17 >>> 17)
34492 var t2slo9 = (t1shi22 << 29 | t1slo22 >>> 3)
34493 var t2shi9 = (t1slo22 << 29 | t1shi22 >>> 3)
34494 var t2slo5 = (t1slo3 << 28 | t1shi3 >>> 4)
34495 var t2shi5 = (t1shi3 << 28 | t1slo3 >>> 4)
34496 var t2slo21 = (t1shi8 << 23 | t1slo8 >>> 9)
34497 var t2shi21 = (t1slo8 << 23 | t1shi8 >>> 9)
34498 var t2slo12 = (t1slo13 << 25 | t1shi13 >>> 7)
34499 var t2shi12 = (t1shi13 << 25 | t1slo13 >>> 7)
34500 var t2slo3 = (t1slo18 << 21 | t1shi18 >>> 11)
34501 var t2shi3 = (t1shi18 << 21 | t1slo18 >>> 11)
34502 var t2slo19 = (t1shi23 << 24 | t1slo23 >>> 8)
34503 var t2shi19 = (t1slo23 << 24 | t1shi23 >>> 8)
34504 var t2slo15 = (t1slo4 << 27 | t1shi4 >>> 5)
34505 var t2shi15 = (t1shi4 << 27 | t1slo4 >>> 5)
34506 var t2slo6 = (t1slo9 << 20 | t1shi9 >>> 12)
34507 var t2shi6 = (t1shi9 << 20 | t1slo9 >>> 12)
34508 var t2slo22 = (t1shi14 << 7 | t1slo14 >>> 25)
34509 var t2shi22 = (t1slo14 << 7 | t1shi14 >>> 25)
34510 var t2slo13 = (t1slo19 << 8 | t1shi19 >>> 24)
34511 var t2shi13 = (t1shi19 << 8 | t1slo19 >>> 24)
34512 var t2slo4 = (t1slo24 << 14 | t1shi24 >>> 18)
34513 var t2shi4 = (t1shi24 << 14 | t1slo24 >>> 18)
34514
34515 // chi
34516 s[0] = t2slo0 ^ (~t2slo1 & t2slo2)
34517 s[1] = t2shi0 ^ (~t2shi1 & t2shi2)
34518 s[10] = t2slo5 ^ (~t2slo6 & t2slo7)
34519 s[11] = t2shi5 ^ (~t2shi6 & t2shi7)
34520 s[20] = t2slo10 ^ (~t2slo11 & t2slo12)
34521 s[21] = t2shi10 ^ (~t2shi11 & t2shi12)
34522 s[30] = t2slo15 ^ (~t2slo16 & t2slo17)
34523 s[31] = t2shi15 ^ (~t2shi16 & t2shi17)
34524 s[40] = t2slo20 ^ (~t2slo21 & t2slo22)
34525 s[41] = t2shi20 ^ (~t2shi21 & t2shi22)
34526 s[2] = t2slo1 ^ (~t2slo2 & t2slo3)
34527 s[3] = t2shi1 ^ (~t2shi2 & t2shi3)
34528 s[12] = t2slo6 ^ (~t2slo7 & t2slo8)
34529 s[13] = t2shi6 ^ (~t2shi7 & t2shi8)
34530 s[22] = t2slo11 ^ (~t2slo12 & t2slo13)
34531 s[23] = t2shi11 ^ (~t2shi12 & t2shi13)
34532 s[32] = t2slo16 ^ (~t2slo17 & t2slo18)
34533 s[33] = t2shi16 ^ (~t2shi17 & t2shi18)
34534 s[42] = t2slo21 ^ (~t2slo22 & t2slo23)
34535 s[43] = t2shi21 ^ (~t2shi22 & t2shi23)
34536 s[4] = t2slo2 ^ (~t2slo3 & t2slo4)
34537 s[5] = t2shi2 ^ (~t2shi3 & t2shi4)
34538 s[14] = t2slo7 ^ (~t2slo8 & t2slo9)
34539 s[15] = t2shi7 ^ (~t2shi8 & t2shi9)
34540 s[24] = t2slo12 ^ (~t2slo13 & t2slo14)
34541 s[25] = t2shi12 ^ (~t2shi13 & t2shi14)
34542 s[34] = t2slo17 ^ (~t2slo18 & t2slo19)
34543 s[35] = t2shi17 ^ (~t2shi18 & t2shi19)
34544 s[44] = t2slo22 ^ (~t2slo23 & t2slo24)
34545 s[45] = t2shi22 ^ (~t2shi23 & t2shi24)
34546 s[6] = t2slo3 ^ (~t2slo4 & t2slo0)
34547 s[7] = t2shi3 ^ (~t2shi4 & t2shi0)
34548 s[16] = t2slo8 ^ (~t2slo9 & t2slo5)
34549 s[17] = t2shi8 ^ (~t2shi9 & t2shi5)
34550 s[26] = t2slo13 ^ (~t2slo14 & t2slo10)
34551 s[27] = t2shi13 ^ (~t2shi14 & t2shi10)
34552 s[36] = t2slo18 ^ (~t2slo19 & t2slo15)
34553 s[37] = t2shi18 ^ (~t2shi19 & t2shi15)
34554 s[46] = t2slo23 ^ (~t2slo24 & t2slo20)
34555 s[47] = t2shi23 ^ (~t2shi24 & t2shi20)
34556 s[8] = t2slo4 ^ (~t2slo0 & t2slo1)
34557 s[9] = t2shi4 ^ (~t2shi0 & t2shi1)
34558 s[18] = t2slo9 ^ (~t2slo5 & t2slo6)
34559 s[19] = t2shi9 ^ (~t2shi5 & t2shi6)
34560 s[28] = t2slo14 ^ (~t2slo10 & t2slo11)
34561 s[29] = t2shi14 ^ (~t2shi10 & t2shi11)
34562 s[38] = t2slo19 ^ (~t2slo15 & t2slo16)
34563 s[39] = t2shi19 ^ (~t2shi15 & t2shi16)
34564 s[48] = t2slo24 ^ (~t2slo20 & t2slo21)
34565 s[49] = t2shi24 ^ (~t2shi20 & t2shi21)
34566
34567 // iota
34568 s[0] ^= P1600_ROUND_CONSTANTS[round * 2]
34569 s[1] ^= P1600_ROUND_CONSTANTS[round * 2 + 1]
34570 }
34571}
34572
34573},{}],70:[function(require,module,exports){
34574(function (Buffer){
34575'use strict'
34576var keccakState = require('./keccak-state-unroll')
ebd8d4e8 34577
8b095871
IC
34578function Keccak () {
34579 // much faster than `new Array(50)`
34580 this.state = [
34581 0, 0, 0, 0, 0,
34582 0, 0, 0, 0, 0,
34583 0, 0, 0, 0, 0,
34584 0, 0, 0, 0, 0,
34585 0, 0, 0, 0, 0
34586 ]
ebd8d4e8 34587
8b095871
IC
34588 this.blockSize = null
34589 this.count = 0
34590 this.squeezing = false
34591}
ebd8d4e8 34592
8b095871
IC
34593Keccak.prototype.initialize = function (rate, capacity) {
34594 for (var i = 0; i < 50; ++i) this.state[i] = 0
34595 this.blockSize = rate / 8
34596 this.count = 0
34597 this.squeezing = false
34598}
34599
34600Keccak.prototype.absorb = function (data) {
34601 for (var i = 0; i < data.length; ++i) {
34602 this.state[~~(this.count / 4)] ^= data[i] << (8 * (this.count % 4))
34603 this.count += 1
34604 if (this.count === this.blockSize) {
34605 keccakState.p1600(this.state)
34606 this.count = 0
ebd8d4e8
IC
34607 }
34608 }
8b095871 34609}
ebd8d4e8 34610
8b095871
IC
34611Keccak.prototype.absorbLastFewBits = function (bits) {
34612 this.state[~~(this.count / 4)] ^= bits << (8 * (this.count % 4))
34613 if ((bits & 0x80) !== 0 && this.count === (this.blockSize - 1)) keccakState.p1600(this.state)
34614 this.state[~~((this.blockSize - 1) / 4)] ^= 0x80 << (8 * ((this.blockSize - 1) % 4))
34615 keccakState.p1600(this.state)
34616 this.count = 0
34617 this.squeezing = true
ebd8d4e8
IC
34618}
34619
8b095871
IC
34620Keccak.prototype.squeeze = function (length) {
34621 if (!this.squeezing) this.absorbLastFewBits(0x01)
ebd8d4e8 34622
8b095871
IC
34623 var output = Buffer.allocUnsafe(length)
34624 for (var i = 0; i < length; ++i) {
34625 output[i] = (this.state[~~(this.count / 4)] >>> (8 * (this.count % 4))) & 0xff
34626 this.count += 1
34627 if (this.count === this.blockSize) {
34628 keccakState.p1600(this.state)
34629 this.count = 0
ebd8d4e8 34630 }
8b095871 34631 }
ebd8d4e8 34632
8b095871
IC
34633 return output
34634}
ebd8d4e8 34635
8b095871
IC
34636Keccak.prototype.copy = function (dest) {
34637 for (var i = 0; i < 50; ++i) dest.state[i] = this.state[i]
34638 dest.blockSize = this.blockSize
34639 dest.count = this.count
34640 dest.squeezing = this.squeezing
34641}
ebd8d4e8 34642
8b095871 34643module.exports = Keccak
ebd8d4e8 34644
8b095871
IC
34645}).call(this,require("buffer").Buffer)
34646},{"./keccak-state-unroll":69,"buffer":5}],71:[function(require,module,exports){
34647(function (Buffer){
34648/*
34649CryptoJS v3.1.2
34650code.google.com/p/crypto-js
34651(c) 2009-2013 by Jeff Mott. All rights reserved.
34652code.google.com/p/crypto-js/wiki/License
34653*/
34654/** @preserve
34655(c) 2012 by Cédric Mesnil. All rights reserved.
ebd8d4e8 34656
8b095871 34657Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
ebd8d4e8 34658
8b095871
IC
34659 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
34660 - 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.
34661
34662THIS 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.
34663*/
34664
34665// constants table
34666var zl = [
34667 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
34668 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
34669 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
34670 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
34671 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
34672]
34673
34674var zr = [
34675 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
34676 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
34677 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
34678 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
34679 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
34680]
34681
34682var sl = [
34683 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
34684 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
34685 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
34686 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
34687 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
34688]
34689
34690var sr = [
34691 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
34692 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
34693 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
34694 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
34695 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
34696]
34697
34698var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
34699var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
34700
34701function bytesToWords (bytes) {
34702 var words = []
34703 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
34704 words[b >>> 5] |= bytes[i] << (24 - b % 32)
34705 }
34706 return words
ebd8d4e8
IC
34707}
34708
8b095871
IC
34709function wordsToBytes (words) {
34710 var bytes = []
34711 for (var b = 0; b < words.length * 32; b += 8) {
34712 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
34713 }
34714 return bytes
ebd8d4e8
IC
34715}
34716
8b095871
IC
34717function processBlock (H, M, offset) {
34718 // swap endian
34719 for (var i = 0; i < 16; i++) {
34720 var offset_i = offset + i
34721 var M_offset_i = M[offset_i]
ebd8d4e8 34722
8b095871
IC
34723 // Swap
34724 M[offset_i] = (
34725 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
34726 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
34727 )
34728 }
ebd8d4e8 34729
8b095871
IC
34730 // Working variables
34731 var al, bl, cl, dl, el
34732 var ar, br, cr, dr, er
34733
34734 ar = al = H[0]
34735 br = bl = H[1]
34736 cr = cl = H[2]
34737 dr = dl = H[3]
34738 er = el = H[4]
34739
34740 // computation
34741 var t
34742 for (i = 0; i < 80; i += 1) {
34743 t = (al + M[offset + zl[i]]) | 0
34744 if (i < 16) {
34745 t += f1(bl, cl, dl) + hl[0]
34746 } else if (i < 32) {
34747 t += f2(bl, cl, dl) + hl[1]
34748 } else if (i < 48) {
34749 t += f3(bl, cl, dl) + hl[2]
34750 } else if (i < 64) {
34751 t += f4(bl, cl, dl) + hl[3]
34752 } else {// if (i<80) {
34753 t += f5(bl, cl, dl) + hl[4]
34754 }
34755 t = t | 0
34756 t = rotl(t, sl[i])
34757 t = (t + el) | 0
34758 al = el
34759 el = dl
34760 dl = rotl(cl, 10)
34761 cl = bl
34762 bl = t
34763
34764 t = (ar + M[offset + zr[i]]) | 0
34765 if (i < 16) {
34766 t += f5(br, cr, dr) + hr[0]
34767 } else if (i < 32) {
34768 t += f4(br, cr, dr) + hr[1]
34769 } else if (i < 48) {
34770 t += f3(br, cr, dr) + hr[2]
34771 } else if (i < 64) {
34772 t += f2(br, cr, dr) + hr[3]
34773 } else {// if (i<80) {
34774 t += f1(br, cr, dr) + hr[4]
34775 }
34776
34777 t = t | 0
34778 t = rotl(t, sr[i])
34779 t = (t + er) | 0
34780 ar = er
34781 er = dr
34782 dr = rotl(cr, 10)
34783 cr = br
34784 br = t
34785 }
34786
34787 // intermediate hash value
34788 t = (H[1] + cl + dr) | 0
34789 H[1] = (H[2] + dl + er) | 0
34790 H[2] = (H[3] + el + ar) | 0
34791 H[3] = (H[4] + al + br) | 0
34792 H[4] = (H[0] + bl + cr) | 0
34793 H[0] = t
ebd8d4e8
IC
34794}
34795
8b095871
IC
34796function f1 (x, y, z) {
34797 return ((x) ^ (y) ^ (z))
ebd8d4e8
IC
34798}
34799
8b095871
IC
34800function f2 (x, y, z) {
34801 return (((x) & (y)) | ((~x) & (z)))
34802}
ebd8d4e8 34803
8b095871
IC
34804function f3 (x, y, z) {
34805 return (((x) | (~(y))) ^ (z))
ebd8d4e8
IC
34806}
34807
8b095871
IC
34808function f4 (x, y, z) {
34809 return (((x) & (z)) | ((y) & (~(z))))
ebd8d4e8
IC
34810}
34811
8b095871
IC
34812function f5 (x, y, z) {
34813 return ((x) ^ ((y) | (~(z))))
ebd8d4e8
IC
34814}
34815
8b095871
IC
34816function rotl (x, n) {
34817 return (x << n) | (x >>> (32 - n))
34818}
ebd8d4e8 34819
8b095871
IC
34820function ripemd160 (message) {
34821 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
ebd8d4e8 34822
8b095871
IC
34823 if (typeof message === 'string') {
34824 message = new Buffer(message, 'utf8')
34825 }
ebd8d4e8 34826
8b095871 34827 var m = bytesToWords(message)
ebd8d4e8 34828
8b095871
IC
34829 var nBitsLeft = message.length * 8
34830 var nBitsTotal = message.length * 8
ebd8d4e8 34831
8b095871
IC
34832 // Add padding
34833 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
34834 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
34835 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
34836 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
34837 )
ebd8d4e8 34838
8b095871
IC
34839 for (var i = 0; i < m.length; i += 16) {
34840 processBlock(H, m, i)
ebd8d4e8
IC
34841 }
34842
8b095871
IC
34843 // swap endian
34844 for (i = 0; i < 5; i++) {
34845 // shortcut
34846 var H_i = H[i]
ebd8d4e8 34847
8b095871
IC
34848 // Swap
34849 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
34850 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
ebd8d4e8
IC
34851 }
34852
8b095871
IC
34853 var digestbytes = wordsToBytes(H)
34854 return new Buffer(digestbytes)
ebd8d4e8
IC
34855}
34856
8b095871 34857module.exports = ripemd160
ebd8d4e8 34858
8b095871
IC
34859}).call(this,require("buffer").Buffer)
34860},{"buffer":5}],72:[function(require,module,exports){
34861(function (Buffer){
34862const assert = require('assert')
34863/**
34864 * RLP Encoding based on: https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP
34865 * This function takes in a data, convert it to buffer if not, and a length for recursion
34866 *
34867 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
34868 * @returns {Buffer} - returns buffer of encoded data
34869 **/
34870exports.encode = function (input) {
34871 if (input instanceof Array) {
34872 var output = []
34873 for (var i = 0; i < input.length; i++) {
34874 output.push(exports.encode(input[i]))
34875 }
34876 var buf = Buffer.concat(output)
34877 return Buffer.concat([encodeLength(buf.length, 192), buf])
34878 } else {
34879 input = toBuffer(input)
34880 if (input.length === 1 && input[0] < 128) {
34881 return input
34882 } else {
34883 return Buffer.concat([encodeLength(input.length, 128), input])
34884 }
34885 }
ebd8d4e8
IC
34886}
34887
8b095871
IC
34888function safeParseInt (v, base) {
34889 if (v.slice(0, 2) === '00') {
34890 throw (new Error('invalid RLP: extra zeros'))
34891 }
ebd8d4e8 34892
8b095871 34893 return parseInt(v, base)
ebd8d4e8
IC
34894}
34895
8b095871
IC
34896function encodeLength (len, offset) {
34897 if (len < 56) {
34898 return new Buffer([len + offset])
34899 } else {
34900 var hexLength = intToHex(len)
34901 var lLength = hexLength.length / 2
34902 var firstByte = intToHex(offset + 55 + lLength)
34903 return new Buffer(firstByte + hexLength, 'hex')
34904 }
34905}
ebd8d4e8 34906
8b095871
IC
34907/**
34908 * RLP Decoding based on: {@link https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP|RLP}
34909 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
34910 * @returns {Array} - returns decode Array of Buffers containg the original message
34911 **/
34912exports.decode = function (input, stream) {
34913 if (!input || input.length === 0) {
34914 return new Buffer([])
34915 }
ebd8d4e8 34916
8b095871
IC
34917 input = toBuffer(input)
34918 var decoded = _decode(input)
ab78acc6 34919
8b095871
IC
34920 if (stream) {
34921 return decoded
34922 }
ebd8d4e8 34923
8b095871
IC
34924 assert.equal(decoded.remainder.length, 0, 'invalid remainder')
34925 return decoded.data
ebd8d4e8
IC
34926}
34927
8b095871
IC
34928exports.getLength = function (input) {
34929 if (!input || input.length === 0) {
34930 return new Buffer([])
ab78acc6
IC
34931 }
34932
8b095871
IC
34933 input = toBuffer(input)
34934 var firstByte = input[0]
34935 if (firstByte <= 0x7f) {
34936 return input.length
34937 } else if (firstByte <= 0xb7) {
34938 return firstByte - 0x7f
34939 } else if (firstByte <= 0xbf) {
34940 return firstByte - 0xb6
34941 } else if (firstByte <= 0xf7) {
34942 // a list between 0-55 bytes long
34943 return firstByte - 0xbf
34944 } else {
34945 // a list over 55 bytes long
34946 var llength = firstByte - 0xf6
34947 var length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
34948 return llength + length
34949 }
ebd8d4e8
IC
34950}
34951
8b095871
IC
34952function _decode (input) {
34953 var length, llength, data, innerRemainder, d
34954 var decoded = []
34955 var firstByte = input[0]
ebd8d4e8 34956
8b095871
IC
34957 if (firstByte <= 0x7f) {
34958 // a single byte whose value is in the [0x00, 0x7f] range, that byte is its own RLP encoding.
34959 return {
34960 data: input.slice(0, 1),
34961 remainder: input.slice(1)
34962 }
34963 } else if (firstByte <= 0xb7) {
34964 // string is 0-55 bytes long. A single byte with value 0x80 plus the length of the string followed by the string
34965 // The range of the first byte is [0x80, 0xb7]
34966 length = firstByte - 0x7f
ebd8d4e8 34967
8b095871
IC
34968 // set 0x80 null to 0
34969 if (firstByte === 0x80) {
34970 data = new Buffer([])
34971 } else {
34972 data = input.slice(1, length)
34973 }
ebd8d4e8 34974
8b095871
IC
34975 if (length === 2 && data[0] < 0x80) {
34976 throw new Error('invalid rlp encoding: byte must be less 0x80')
34977 }
ebd8d4e8 34978
8b095871
IC
34979 return {
34980 data: data,
34981 remainder: input.slice(length)
34982 }
34983 } else if (firstByte <= 0xbf) {
34984 llength = firstByte - 0xb6
34985 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
34986 data = input.slice(llength, length + llength)
34987 if (data.length < length) {
34988 throw (new Error('invalid RLP'))
34989 }
ebd8d4e8 34990
8b095871
IC
34991 return {
34992 data: data,
34993 remainder: input.slice(length + llength)
34994 }
34995 } else if (firstByte <= 0xf7) {
34996 // a list between 0-55 bytes long
34997 length = firstByte - 0xbf
34998 innerRemainder = input.slice(1, length)
34999 while (innerRemainder.length) {
35000 d = _decode(innerRemainder)
35001 decoded.push(d.data)
35002 innerRemainder = d.remainder
35003 }
ebd8d4e8 35004
8b095871
IC
35005 return {
35006 data: decoded,
35007 remainder: input.slice(length)
35008 }
35009 } else {
35010 // a list over 55 bytes long
35011 llength = firstByte - 0xf6
35012 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
35013 var totalLength = llength + length
35014 if (totalLength > input.length) {
35015 throw new Error('invalid rlp: total length is larger than the data')
35016 }
ab78acc6 35017
8b095871
IC
35018 innerRemainder = input.slice(llength, totalLength)
35019 if (innerRemainder.length === 0) {
35020 throw new Error('invalid rlp, List has a invalid length')
35021 }
ab78acc6 35022
8b095871
IC
35023 while (innerRemainder.length) {
35024 d = _decode(innerRemainder)
35025 decoded.push(d.data)
35026 innerRemainder = d.remainder
35027 }
35028 return {
35029 data: decoded,
35030 remainder: input.slice(totalLength)
35031 }
ab78acc6 35032 }
8b095871 35033}
ab78acc6 35034
8b095871
IC
35035function isHexPrefixed (str) {
35036 return str.slice(0, 2) === '0x'
ab78acc6
IC
35037}
35038
8b095871
IC
35039// Removes 0x from a given String
35040function stripHexPrefix (str) {
35041 if (typeof str !== 'string') {
35042 return str
35043 }
35044 return isHexPrefixed(str) ? str.slice(2) : str
35045}
ab78acc6 35046
8b095871
IC
35047function intToHex (i) {
35048 var hex = i.toString(16)
35049 if (hex.length % 2) {
35050 hex = '0' + hex
ab78acc6
IC
35051 }
35052
8b095871 35053 return hex
ebd8d4e8
IC
35054}
35055
8b095871
IC
35056function padToEven (a) {
35057 if (a.length % 2) a = '0' + a
35058 return a
ebd8d4e8
IC
35059}
35060
8b095871
IC
35061function intToBuffer (i) {
35062 var hex = intToHex(i)
35063 return new Buffer(hex, 'hex')
ebd8d4e8
IC
35064}
35065
8b095871
IC
35066function toBuffer (v) {
35067 if (!Buffer.isBuffer(v)) {
35068 if (typeof v === 'string') {
35069 if (isHexPrefixed(v)) {
35070 v = new Buffer(padToEven(stripHexPrefix(v)), 'hex')
35071 } else {
35072 v = new Buffer(v)
35073 }
35074 } else if (typeof v === 'number') {
35075 if (!v) {
35076 v = new Buffer([])
35077 } else {
35078 v = intToBuffer(v)
35079 }
35080 } else if (v === null || v === undefined) {
35081 v = new Buffer([])
35082 } else if (v.toArray) {
35083 // converts a BN to a Buffer
35084 v = new Buffer(v.toArray())
35085 } else {
35086 throw new Error('invalid type')
35087 }
35088 }
35089 return v
ebd8d4e8
IC
35090}
35091
8b095871
IC
35092}).call(this,require("buffer").Buffer)
35093},{"assert":1,"buffer":5}],73:[function(require,module,exports){
35094'use strict'
35095module.exports = require('./lib')(require('./lib/elliptic'))
ebd8d4e8 35096
8b095871
IC
35097},{"./lib":77,"./lib/elliptic":76}],74:[function(require,module,exports){
35098(function (Buffer){
35099'use strict'
35100var toString = Object.prototype.toString
ebd8d4e8 35101
8b095871
IC
35102// TypeError
35103exports.isArray = function (value, message) {
35104 if (!Array.isArray(value)) throw TypeError(message)
ebd8d4e8
IC
35105}
35106
8b095871
IC
35107exports.isBoolean = function (value, message) {
35108 if (toString.call(value) !== '[object Boolean]') throw TypeError(message)
35109}
ebd8d4e8 35110
8b095871
IC
35111exports.isBuffer = function (value, message) {
35112 if (!Buffer.isBuffer(value)) throw TypeError(message)
ebd8d4e8
IC
35113}
35114
8b095871
IC
35115exports.isFunction = function (value, message) {
35116 if (toString.call(value) !== '[object Function]') throw TypeError(message)
ebd8d4e8
IC
35117}
35118
8b095871
IC
35119exports.isNumber = function (value, message) {
35120 if (toString.call(value) !== '[object Number]') throw TypeError(message)
35121}
ab78acc6 35122
8b095871
IC
35123exports.isObject = function (value, message) {
35124 if (toString.call(value) !== '[object Object]') throw TypeError(message)
35125}
ebd8d4e8 35126
8b095871
IC
35127// RangeError
35128exports.isBufferLength = function (buffer, length, message) {
35129 if (buffer.length !== length) throw RangeError(message)
35130}
ebd8d4e8 35131
8b095871
IC
35132exports.isBufferLength2 = function (buffer, length1, length2, message) {
35133 if (buffer.length !== length1 && buffer.length !== length2) throw RangeError(message)
ab78acc6
IC
35134}
35135
8b095871
IC
35136exports.isLengthGTZero = function (value, message) {
35137 if (value.length === 0) throw RangeError(message)
ebd8d4e8
IC
35138}
35139
8b095871
IC
35140exports.isNumberInInterval = function (number, x, y, message) {
35141 if (number <= x || number >= y) throw RangeError(message)
ebd8d4e8
IC
35142}
35143
8b095871
IC
35144}).call(this,{"isBuffer":require("../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
35145},{"../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js":10}],75:[function(require,module,exports){
ebd8d4e8 35146(function (Buffer){
8b095871
IC
35147'use strict'
35148var bip66 = require('bip66')
35149
35150var EC_PRIVKEY_EXPORT_DER_COMPRESSED = new Buffer([
35151 // begin
35152 0x30, 0x81, 0xd3, 0x02, 0x01, 0x01, 0x04, 0x20,
35153 // private key
35154 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35155 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35156 // middle
35157 0xa0, 0x81, 0x85, 0x30, 0x81, 0x82, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
35158 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
35159 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
35160 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
35161 0x21, 0x02, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
35162 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
35163 0x17, 0x98, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
35164 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
35165 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x24, 0x03, 0x22, 0x00,
35166 // public key
35167 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35168 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35169 0x00
35170])
35171
35172var EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED = new Buffer([
35173 // begin
35174 0x30, 0x82, 0x01, 0x13, 0x02, 0x01, 0x01, 0x04, 0x20,
35175 // private key
35176 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35177 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35178 // middle
35179 0xa0, 0x81, 0xa5, 0x30, 0x81, 0xa2, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
35180 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
35181 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
35182 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
35183 0x41, 0x04, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
35184 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
35185 0x17, 0x98, 0x48, 0x3a, 0xda, 0x77, 0x26, 0xa3, 0xc4, 0x65, 0x5d, 0xa4, 0xfb, 0xfc, 0x0E, 0x11,
35186 0x08, 0xa8, 0xfd, 0x17, 0xb4, 0x48, 0xa6, 0x85, 0x54, 0x19, 0x9c, 0x47, 0xd0, 0x8f, 0xfb, 0x10,
35187 0xd4, 0xb8, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
35188 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
35189 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x44, 0x03, 0x42, 0x00,
35190 // public key
35191 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35192 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35193 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35194 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35195 0x00
35196])
35197
35198var ZERO_BUFFER_32 = new Buffer([
35199 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35200 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
35201])
35202
35203exports.privateKeyExport = function (privateKey, publicKey, compressed) {
35204 var result = new Buffer(compressed ? EC_PRIVKEY_EXPORT_DER_COMPRESSED : EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED)
35205 privateKey.copy(result, compressed ? 8 : 9)
35206 publicKey.copy(result, compressed ? 181 : 214)
35207 return result
35208}
35209
35210exports.privateKeyImport = function (privateKey) {
35211 var length = privateKey.length
35212
35213 // sequence header
35214 var index = 0
35215 if (length < index + 1 || privateKey[index] !== 0x30) return
35216 index += 1
35217
35218 // sequence length constructor
35219 if (length < index + 1 || !(privateKey[index] & 0x80)) return
35220
35221 var lenb = privateKey[index] & 0x7f
35222 index += 1
35223 if (lenb < 1 || lenb > 2) return
35224 if (length < index + lenb) return
35225
35226 // sequence length
35227 var len = privateKey[index + lenb - 1] | (lenb > 1 ? privateKey[index + lenb - 2] << 8 : 0)
35228 index += lenb
35229 if (length < index + len) return
35230
35231 // sequence element 0: version number (=1)
35232 if (length < index + 3 ||
35233 privateKey[index] !== 0x02 ||
35234 privateKey[index + 1] !== 0x01 ||
35235 privateKey[index + 2] !== 0x01) {
35236 return
35237 }
35238 index += 3
ab78acc6 35239
8b095871
IC
35240 // sequence element 1: octet string, up to 32 bytes
35241 if (length < index + 2 ||
35242 privateKey[index] !== 0x04 ||
35243 privateKey[index + 1] > 0x20 ||
35244 length < index + 2 + privateKey[index + 1]) {
35245 return
35246 }
ab78acc6 35247
8b095871 35248 return privateKey.slice(index + 2, index + 2 + privateKey[index + 1])
ab78acc6 35249}
ebd8d4e8 35250
8b095871
IC
35251exports.signatureExport = function (sigObj) {
35252 var r = Buffer.concat([new Buffer([0]), sigObj.r])
35253 for (var lenR = 33, posR = 0; lenR > 1 && r[posR] === 0x00 && !(r[posR + 1] & 0x80); --lenR, ++posR);
ebd8d4e8 35254
8b095871
IC
35255 var s = Buffer.concat([new Buffer([0]), sigObj.s])
35256 for (var lenS = 33, posS = 0; lenS > 1 && s[posS] === 0x00 && !(s[posS + 1] & 0x80); --lenS, ++posS);
ab78acc6 35257
8b095871
IC
35258 return bip66.encode(r.slice(posR), s.slice(posS))
35259}
ab78acc6 35260
8b095871
IC
35261exports.signatureImport = function (sig) {
35262 var r = new Buffer(ZERO_BUFFER_32)
35263 var s = new Buffer(ZERO_BUFFER_32)
ab78acc6 35264
8b095871
IC
35265 try {
35266 var sigObj = bip66.decode(sig)
35267 if (sigObj.r.length === 33 && sigObj.r[0] === 0x00) sigObj.r = sigObj.r.slice(1)
35268 if (sigObj.r.length > 32) throw new Error('R length is too long')
35269 if (sigObj.s.length === 33 && sigObj.s[0] === 0x00) sigObj.s = sigObj.s.slice(1)
35270 if (sigObj.s.length > 32) throw new Error('S length is too long')
35271 } catch (err) {
35272 return
ab78acc6
IC
35273 }
35274
8b095871
IC
35275 sigObj.r.copy(r, 32 - sigObj.r.length)
35276 sigObj.s.copy(s, 32 - sigObj.s.length)
ab78acc6 35277
8b095871
IC
35278 return { r: r, s: s }
35279}
ab78acc6 35280
8b095871
IC
35281exports.signatureImportLax = function (sig) {
35282 var r = new Buffer(ZERO_BUFFER_32)
35283 var s = new Buffer(ZERO_BUFFER_32)
ab78acc6 35284
8b095871
IC
35285 var length = sig.length
35286 var index = 0
ab78acc6 35287
8b095871
IC
35288 // sequence tag byte
35289 if (sig[index++] !== 0x30) return
35290
35291 // sequence length byte
35292 var lenbyte = sig[index++]
35293 if (lenbyte & 0x80) {
35294 index += lenbyte - 0x80
35295 if (index > length) return
ab78acc6
IC
35296 }
35297
8b095871
IC
35298 // sequence tag byte for r
35299 if (sig[index++] !== 0x02) return
35300
35301 // length for r
35302 var rlen = sig[index++]
35303 if (rlen & 0x80) {
35304 lenbyte = rlen - 0x80
35305 if (index + lenbyte > length) return
35306 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
35307 for (rlen = 0; lenbyte > 0; index += 1, lenbyte -= 1) rlen = (rlen << 8) + sig[index]
ab78acc6 35308 }
8b095871
IC
35309 if (rlen > length - index) return
35310 var rindex = index
35311 index += rlen
ab78acc6 35312
8b095871
IC
35313 // sequence tag byte for s
35314 if (sig[index++] !== 0x02) return
ab78acc6 35315
8b095871
IC
35316 // length for s
35317 var slen = sig[index++]
35318 if (slen & 0x80) {
35319 lenbyte = slen - 0x80
35320 if (index + lenbyte > length) return
35321 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
35322 for (slen = 0; lenbyte > 0; index += 1, lenbyte -= 1) slen = (slen << 8) + sig[index]
ab78acc6 35323 }
8b095871
IC
35324 if (slen > length - index) return
35325 var sindex = index
35326 index += slen
ab78acc6 35327
8b095871
IC
35328 // ignore leading zeros in r
35329 for (; rlen > 0 && sig[rindex] === 0x00; rlen -= 1, rindex += 1);
35330 // copy r value
35331 if (rlen > 32) return
35332 var rvalue = sig.slice(rindex, rindex + rlen)
35333 rvalue.copy(r, 32 - rvalue.length)
ab78acc6 35334
8b095871
IC
35335 // ignore leading zeros in s
35336 for (; slen > 0 && sig[sindex] === 0x00; slen -= 1, sindex += 1);
35337 // copy s value
35338 if (slen > 32) return
35339 var svalue = sig.slice(sindex, sindex + slen)
35340 svalue.copy(s, 32 - svalue.length)
35341
35342 return { r: r, s: s }
ab78acc6
IC
35343}
35344
8b095871
IC
35345}).call(this,require("buffer").Buffer)
35346},{"bip66":32,"buffer":5}],76:[function(require,module,exports){
35347(function (Buffer){
35348'use strict'
35349var createHash = require('create-hash')
35350var BN = require('bn.js')
35351var EC = require('elliptic').ec
35352
35353var messages = require('../messages.json')
35354
35355var ec = new EC('secp256k1')
35356var ecparams = ec.curve
35357
35358function loadCompressedPublicKey (first, xBuffer) {
35359 var x = new BN(xBuffer)
35360
35361 // overflow
35362 if (x.cmp(ecparams.p) >= 0) return null
35363 x = x.toRed(ecparams.red)
35364
35365 // compute corresponding Y
35366 var y = x.redSqr().redIMul(x).redIAdd(ecparams.b).redSqrt()
35367 if ((first === 0x03) !== y.isOdd()) y = y.redNeg()
35368
35369 return ec.keyPair({ pub: { x: x, y: y } })
ebd8d4e8
IC
35370}
35371
8b095871
IC
35372function loadUncompressedPublicKey (first, xBuffer, yBuffer) {
35373 var x = new BN(xBuffer)
35374 var y = new BN(yBuffer)
ebd8d4e8 35375
8b095871
IC
35376 // overflow
35377 if (x.cmp(ecparams.p) >= 0 || y.cmp(ecparams.p) >= 0) return null
ebd8d4e8 35378
8b095871
IC
35379 x = x.toRed(ecparams.red)
35380 y = y.toRed(ecparams.red)
ebd8d4e8 35381
8b095871
IC
35382 // is odd flag
35383 if ((first === 0x06 || first === 0x07) && y.isOdd() !== (first === 0x07)) return null
ab78acc6 35384
8b095871
IC
35385 // x*x*x + b = y*y
35386 var x3 = x.redSqr().redIMul(x)
35387 if (!y.redSqr().redISub(x3.redIAdd(ecparams.b)).isZero()) return null
ebd8d4e8 35388
8b095871 35389 return ec.keyPair({ pub: { x: x, y: y } })
ebd8d4e8
IC
35390}
35391
8b095871
IC
35392function loadPublicKey (publicKey) {
35393 var first = publicKey[0]
35394 switch (first) {
35395 case 0x02:
35396 case 0x03:
35397 if (publicKey.length !== 33) return null
35398 return loadCompressedPublicKey(first, publicKey.slice(1, 33))
35399 case 0x04:
35400 case 0x06:
35401 case 0x07:
35402 if (publicKey.length !== 65) return null
35403 return loadUncompressedPublicKey(first, publicKey.slice(1, 33), publicKey.slice(33, 65))
35404 default:
35405 return null
ebd8d4e8 35406 }
8b095871 35407}
ebd8d4e8 35408
8b095871
IC
35409exports.privateKeyVerify = function (privateKey) {
35410 var bn = new BN(privateKey)
35411 return bn.cmp(ecparams.n) < 0 && !bn.isZero()
35412}
ebd8d4e8 35413
8b095871
IC
35414exports.privateKeyExport = function (privateKey, compressed) {
35415 var d = new BN(privateKey)
35416 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PRIVATE_KEY_EXPORT_DER_FAIL)
ab78acc6 35417
8b095871 35418 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
ebd8d4e8
IC
35419}
35420
8b095871
IC
35421exports.privateKeyTweakAdd = function (privateKey, tweak) {
35422 var bn = new BN(tweak)
35423 if (bn.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
ab78acc6 35424
8b095871
IC
35425 bn.iadd(new BN(privateKey))
35426 if (bn.cmp(ecparams.n) >= 0) bn.isub(ecparams.n)
35427 if (bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
ab78acc6 35428
8b095871
IC
35429 return bn.toArrayLike(Buffer, 'be', 32)
35430}
35431
35432exports.privateKeyTweakMul = function (privateKey, tweak) {
35433 var bn = new BN(tweak)
35434 if (bn.cmp(ecparams.n) >= 0 || bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_MUL_FAIL)
35435
35436 bn.imul(new BN(privateKey))
35437 if (bn.cmp(ecparams.n)) bn = bn.umod(ecparams.n)
35438
35439 return bn.toArrayLike(Buffer, 'be', 32)
35440}
35441
35442exports.publicKeyCreate = function (privateKey, compressed) {
35443 var d = new BN(privateKey)
35444 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PUBLIC_KEY_CREATE_FAIL)
35445
35446 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
35447}
35448
35449exports.publicKeyConvert = function (publicKey, compressed) {
35450 var pair = loadPublicKey(publicKey)
35451 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 35452
8b095871 35453 return new Buffer(pair.getPublic(compressed, true))
ab78acc6
IC
35454}
35455
8b095871
IC
35456exports.publicKeyVerify = function (publicKey) {
35457 return loadPublicKey(publicKey) !== null
35458}
ab78acc6 35459
8b095871
IC
35460exports.publicKeyTweakAdd = function (publicKey, tweak, compressed) {
35461 var pair = loadPublicKey(publicKey)
35462 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 35463
8b095871
IC
35464 tweak = new BN(tweak)
35465 if (tweak.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_ADD_FAIL)
ab78acc6 35466
8b095871
IC
35467 return new Buffer(ecparams.g.mul(tweak).add(pair.pub).encode(true, compressed))
35468}
ab78acc6 35469
8b095871
IC
35470exports.publicKeyTweakMul = function (publicKey, tweak, compressed) {
35471 var pair = loadPublicKey(publicKey)
35472 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 35473
8b095871
IC
35474 tweak = new BN(tweak)
35475 if (tweak.cmp(ecparams.n) >= 0 || tweak.isZero()) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_MUL_FAIL)
ab78acc6 35476
8b095871
IC
35477 return new Buffer(pair.pub.mul(tweak).encode(true, compressed))
35478}
ab78acc6 35479
8b095871
IC
35480exports.publicKeyCombine = function (publicKeys, compressed) {
35481 var pairs = new Array(publicKeys.length)
35482 for (var i = 0; i < publicKeys.length; ++i) {
35483 pairs[i] = loadPublicKey(publicKeys[i])
35484 if (pairs[i] === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6
IC
35485 }
35486
8b095871
IC
35487 var point = pairs[0].pub
35488 for (var j = 1; j < pairs.length; ++j) point = point.add(pairs[j].pub)
35489 if (point.isInfinity()) throw new Error(messages.EC_PUBLIC_KEY_COMBINE_FAIL)
ab78acc6 35490
8b095871
IC
35491 return new Buffer(point.encode(true, compressed))
35492}
ab78acc6 35493
8b095871
IC
35494exports.signatureNormalize = function (signature) {
35495 var r = new BN(signature.slice(0, 32))
35496 var s = new BN(signature.slice(32, 64))
35497 if (r.cmp(ecparams.n) >= 0 || s.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
35498
35499 var result = new Buffer(signature)
35500 if (s.cmp(ec.nh) === 1) ecparams.n.sub(s).toArrayLike(Buffer, 'be', 32).copy(result, 32)
35501
35502 return result
ab78acc6
IC
35503}
35504
8b095871
IC
35505exports.signatureExport = function (signature) {
35506 var r = signature.slice(0, 32)
35507 var s = signature.slice(32, 64)
35508 if (new BN(r).cmp(ecparams.n) >= 0 || new BN(s).cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
35509
35510 return { r: r, s: s }
ab78acc6
IC
35511}
35512
8b095871
IC
35513exports.signatureImport = function (sigObj) {
35514 var r = new BN(sigObj.r)
35515 if (r.cmp(ecparams.n) >= 0) r = new BN(0)
35516
35517 var s = new BN(sigObj.s)
35518 if (s.cmp(ecparams.n) >= 0) s = new BN(0)
35519
35520 return Buffer.concat([
35521 r.toArrayLike(Buffer, 'be', 32),
35522 s.toArrayLike(Buffer, 'be', 32)
35523 ])
ab78acc6
IC
35524}
35525
8b095871
IC
35526exports.sign = function (message, privateKey, noncefn, data) {
35527 if (typeof noncefn === 'function') {
35528 var getNonce = noncefn
35529 noncefn = function (counter) {
35530 var nonce = getNonce(message, privateKey, null, data, counter)
35531 if (!Buffer.isBuffer(nonce) || nonce.length !== 32) throw new Error(messages.ECDSA_SIGN_FAIL)
ebd8d4e8 35532
8b095871
IC
35533 return new BN(nonce)
35534 }
ab78acc6 35535 }
ebd8d4e8 35536
8b095871
IC
35537 var d = new BN(privateKey)
35538 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.ECDSA_SIGN_FAIL)
ebd8d4e8 35539
8b095871
IC
35540 var result = ec.sign(message, privateKey, { canonical: true, k: noncefn, pers: data })
35541 return {
35542 signature: Buffer.concat([
35543 result.r.toArrayLike(Buffer, 'be', 32),
35544 result.s.toArrayLike(Buffer, 'be', 32)
35545 ]),
35546 recovery: result.recoveryParam
ebd8d4e8 35547 }
8b095871 35548}
ab78acc6 35549
8b095871
IC
35550exports.verify = function (message, signature, publicKey) {
35551 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
ab78acc6 35552
8b095871
IC
35553 var sigr = new BN(sigObj.r)
35554 var sigs = new BN(sigObj.s)
35555 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
35556 if (sigs.cmp(ec.nh) === 1 || sigr.isZero() || sigs.isZero()) return false
ab78acc6 35557
8b095871
IC
35558 var pair = loadPublicKey(publicKey)
35559 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ebd8d4e8 35560
8b095871
IC
35561 return ec.verify(message, sigObj, {x: pair.pub.x, y: pair.pub.y})
35562}
ebd8d4e8 35563
8b095871
IC
35564exports.recover = function (message, signature, recovery, compressed) {
35565 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
ebd8d4e8 35566
8b095871
IC
35567 var sigr = new BN(sigObj.r)
35568 var sigs = new BN(sigObj.s)
35569 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
ebd8d4e8 35570
8b095871
IC
35571 try {
35572 if (sigr.isZero() || sigs.isZero()) throw new Error()
ebd8d4e8 35573
8b095871
IC
35574 var point = ec.recoverPubKey(message, sigObj, recovery)
35575 return new Buffer(point.encode(true, compressed))
35576 } catch (err) {
35577 throw new Error(messages.ECDSA_RECOVER_FAIL)
35578 }
ebd8d4e8
IC
35579}
35580
8b095871
IC
35581exports.ecdh = function (publicKey, privateKey) {
35582 var shared = exports.ecdhUnsafe(publicKey, privateKey, true)
35583 return createHash('sha256').update(shared).digest()
ebd8d4e8
IC
35584}
35585
8b095871
IC
35586exports.ecdhUnsafe = function (publicKey, privateKey, compressed) {
35587 var pair = loadPublicKey(publicKey)
35588 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 35589
8b095871
IC
35590 var scalar = new BN(privateKey)
35591 if (scalar.cmp(ecparams.n) >= 0 || scalar.isZero()) throw new Error(messages.ECDH_FAIL)
35592
35593 return new Buffer(pair.pub.mul(scalar).encode(true, compressed))
ab78acc6
IC
35594}
35595
8b095871
IC
35596}).call(this,require("buffer").Buffer)
35597},{"../messages.json":78,"bn.js":33,"buffer":5,"create-hash":36,"elliptic":39}],77:[function(require,module,exports){
35598'use strict'
35599var assert = require('./assert')
35600var der = require('./der')
35601var messages = require('./messages.json')
ab78acc6 35602
8b095871
IC
35603function initCompressedValue (value, defaultValue) {
35604 if (value === undefined) return defaultValue
ab78acc6 35605
8b095871
IC
35606 assert.isBoolean(value, messages.COMPRESSED_TYPE_INVALID)
35607 return value
ab78acc6
IC
35608}
35609
8b095871
IC
35610module.exports = function (secp256k1) {
35611 return {
35612 privateKeyVerify: function (privateKey) {
35613 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35614 return privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)
35615 },
ab78acc6 35616
8b095871
IC
35617 privateKeyExport: function (privateKey, compressed) {
35618 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35619 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 35620
8b095871
IC
35621 compressed = initCompressedValue(compressed, true)
35622 var publicKey = secp256k1.privateKeyExport(privateKey, compressed)
ab78acc6 35623
8b095871
IC
35624 return der.privateKeyExport(privateKey, publicKey, compressed)
35625 },
ab78acc6 35626
8b095871
IC
35627 privateKeyImport: function (privateKey) {
35628 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
ab78acc6 35629
8b095871
IC
35630 privateKey = der.privateKeyImport(privateKey)
35631 if (privateKey && privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)) return privateKey
ab78acc6 35632
8b095871
IC
35633 throw new Error(messages.EC_PRIVATE_KEY_IMPORT_DER_FAIL)
35634 },
ab78acc6 35635
8b095871
IC
35636 privateKeyTweakAdd: function (privateKey, tweak) {
35637 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35638 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 35639
8b095871
IC
35640 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
35641 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
ab78acc6 35642
8b095871
IC
35643 return secp256k1.privateKeyTweakAdd(privateKey, tweak)
35644 },
ab78acc6 35645
8b095871
IC
35646 privateKeyTweakMul: function (privateKey, tweak) {
35647 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35648 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 35649
8b095871
IC
35650 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
35651 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
ab78acc6 35652
8b095871
IC
35653 return secp256k1.privateKeyTweakMul(privateKey, tweak)
35654 },
ab78acc6 35655
8b095871
IC
35656 publicKeyCreate: function (privateKey, compressed) {
35657 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35658 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 35659
8b095871 35660 compressed = initCompressedValue(compressed, true)
ab78acc6 35661
8b095871
IC
35662 return secp256k1.publicKeyCreate(privateKey, compressed)
35663 },
ab78acc6 35664
8b095871
IC
35665 publicKeyConvert: function (publicKey, compressed) {
35666 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
35667 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6 35668
8b095871
IC
35669 compressed = initCompressedValue(compressed, true)
35670
35671 return secp256k1.publicKeyConvert(publicKey, compressed)
35672 },
35673
35674 publicKeyVerify: function (publicKey) {
35675 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
35676 return secp256k1.publicKeyVerify(publicKey)
35677 },
35678
35679 publicKeyTweakAdd: function (publicKey, tweak, compressed) {
35680 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
35681 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
35682
35683 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
35684 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
35685
35686 compressed = initCompressedValue(compressed, true)
35687
35688 return secp256k1.publicKeyTweakAdd(publicKey, tweak, compressed)
35689 },
35690
35691 publicKeyTweakMul: function (publicKey, tweak, compressed) {
35692 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
35693 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
35694
35695 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
35696 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
35697
35698 compressed = initCompressedValue(compressed, true)
35699
35700 return secp256k1.publicKeyTweakMul(publicKey, tweak, compressed)
35701 },
35702
35703 publicKeyCombine: function (publicKeys, compressed) {
35704 assert.isArray(publicKeys, messages.EC_PUBLIC_KEYS_TYPE_INVALID)
35705 assert.isLengthGTZero(publicKeys, messages.EC_PUBLIC_KEYS_LENGTH_INVALID)
35706 for (var i = 0; i < publicKeys.length; ++i) {
35707 assert.isBuffer(publicKeys[i], messages.EC_PUBLIC_KEY_TYPE_INVALID)
35708 assert.isBufferLength2(publicKeys[i], 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6
IC
35709 }
35710
8b095871 35711 compressed = initCompressedValue(compressed, true)
ab78acc6 35712
8b095871
IC
35713 return secp256k1.publicKeyCombine(publicKeys, compressed)
35714 },
ab78acc6 35715
8b095871
IC
35716 signatureNormalize: function (signature) {
35717 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
35718 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
ab78acc6 35719
8b095871
IC
35720 return secp256k1.signatureNormalize(signature)
35721 },
ab78acc6 35722
8b095871
IC
35723 signatureExport: function (signature) {
35724 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
35725 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
35726
35727 var sigObj = secp256k1.signatureExport(signature)
35728 return der.signatureExport(sigObj)
35729 },
35730
35731 signatureImport: function (sig) {
35732 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
35733 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
35734
35735 var sigObj = der.signatureImport(sig)
35736 if (sigObj) return secp256k1.signatureImport(sigObj)
35737
35738 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
35739 },
35740
35741 signatureImportLax: function (sig) {
35742 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
35743 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
35744
35745 var sigObj = der.signatureImportLax(sig)
35746 if (sigObj) return secp256k1.signatureImport(sigObj)
35747
35748 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
35749 },
35750
35751 sign: function (message, privateKey, options) {
35752 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
35753 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
35754
35755 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35756 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
35757
35758 var data = null
35759 var noncefn = null
35760 if (options !== undefined) {
35761 assert.isObject(options, messages.OPTIONS_TYPE_INVALID)
35762
35763 if (options.data !== undefined) {
35764 assert.isBuffer(options.data, messages.OPTIONS_DATA_TYPE_INVALID)
35765 assert.isBufferLength(options.data, 32, messages.OPTIONS_DATA_LENGTH_INVALID)
35766 data = options.data
35767 }
35768
35769 if (options.noncefn !== undefined) {
35770 assert.isFunction(options.noncefn, messages.OPTIONS_NONCEFN_TYPE_INVALID)
35771 noncefn = options.noncefn
35772 }
ab78acc6
IC
35773 }
35774
8b095871
IC
35775 return secp256k1.sign(message, privateKey, noncefn, data)
35776 },
ab78acc6 35777
8b095871
IC
35778 verify: function (message, signature, publicKey) {
35779 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
35780 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
ab78acc6 35781
8b095871
IC
35782 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
35783 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
ab78acc6 35784
8b095871
IC
35785 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
35786 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
35787
35788 return secp256k1.verify(message, signature, publicKey)
35789 },
ab78acc6 35790
8b095871
IC
35791 recover: function (message, signature, recovery, compressed) {
35792 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
35793 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
ab78acc6 35794
8b095871
IC
35795 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
35796 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
ab78acc6 35797
8b095871
IC
35798 assert.isNumber(recovery, messages.RECOVERY_ID_TYPE_INVALID)
35799 assert.isNumberInInterval(recovery, -1, 4, messages.RECOVERY_ID_VALUE_INVALID)
ab78acc6 35800
8b095871 35801 compressed = initCompressedValue(compressed, true)
ab78acc6 35802
8b095871
IC
35803 return secp256k1.recover(message, signature, recovery, compressed)
35804 },
ab78acc6 35805
8b095871
IC
35806 ecdh: function (publicKey, privateKey) {
35807 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
35808 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6 35809
8b095871
IC
35810 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35811 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 35812
8b095871
IC
35813 return secp256k1.ecdh(publicKey, privateKey)
35814 },
ab78acc6 35815
8b095871
IC
35816 ecdhUnsafe: function (publicKey, privateKey, compressed) {
35817 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
35818 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6 35819
8b095871
IC
35820 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35821 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 35822
8b095871 35823 compressed = initCompressedValue(compressed, true)
ab78acc6 35824
8b095871
IC
35825 return secp256k1.ecdhUnsafe(publicKey, privateKey, compressed)
35826 }
35827 }
35828}
ab78acc6 35829
8b095871
IC
35830},{"./assert":74,"./der":75,"./messages.json":78}],78:[function(require,module,exports){
35831module.exports={
35832 "COMPRESSED_TYPE_INVALID": "compressed should be a boolean",
35833 "EC_PRIVATE_KEY_TYPE_INVALID": "private key should be a Buffer",
35834 "EC_PRIVATE_KEY_LENGTH_INVALID": "private key length is invalid",
35835 "EC_PRIVATE_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting private key is invalid",
35836 "EC_PRIVATE_KEY_TWEAK_MUL_FAIL": "tweak out of range",
35837 "EC_PRIVATE_KEY_EXPORT_DER_FAIL": "couldn't export to DER format",
35838 "EC_PRIVATE_KEY_IMPORT_DER_FAIL": "couldn't import from DER format",
35839 "EC_PUBLIC_KEYS_TYPE_INVALID": "public keys should be an Array",
35840 "EC_PUBLIC_KEYS_LENGTH_INVALID": "public keys Array should have at least 1 element",
35841 "EC_PUBLIC_KEY_TYPE_INVALID": "public key should be a Buffer",
35842 "EC_PUBLIC_KEY_LENGTH_INVALID": "public key length is invalid",
35843 "EC_PUBLIC_KEY_PARSE_FAIL": "the public key could not be parsed or is invalid",
35844 "EC_PUBLIC_KEY_CREATE_FAIL": "private was invalid, try again",
35845 "EC_PUBLIC_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting public key is invalid",
35846 "EC_PUBLIC_KEY_TWEAK_MUL_FAIL": "tweak out of range",
35847 "EC_PUBLIC_KEY_COMBINE_FAIL": "the sum of the public keys is not valid",
35848 "ECDH_FAIL": "scalar was invalid (zero or overflow)",
35849 "ECDSA_SIGNATURE_TYPE_INVALID": "signature should be a Buffer",
35850 "ECDSA_SIGNATURE_LENGTH_INVALID": "signature length is invalid",
35851 "ECDSA_SIGNATURE_PARSE_FAIL": "couldn't parse signature",
35852 "ECDSA_SIGNATURE_PARSE_DER_FAIL": "couldn't parse DER signature",
35853 "ECDSA_SIGNATURE_SERIALIZE_DER_FAIL": "couldn't serialize signature to DER format",
35854 "ECDSA_SIGN_FAIL": "nonce generation function failed or private key is invalid",
35855 "ECDSA_RECOVER_FAIL": "couldn't recover public key from signature",
35856 "MSG32_TYPE_INVALID": "message should be a Buffer",
35857 "MSG32_LENGTH_INVALID": "message length is invalid",
35858 "OPTIONS_TYPE_INVALID": "options should be an Object",
35859 "OPTIONS_DATA_TYPE_INVALID": "options.data should be a Buffer",
35860 "OPTIONS_DATA_LENGTH_INVALID": "options.data length is invalid",
35861 "OPTIONS_NONCEFN_TYPE_INVALID": "options.noncefn should be a Function",
35862 "RECOVERY_ID_TYPE_INVALID": "recovery should be a Number",
35863 "RECOVERY_ID_VALUE_INVALID": "recovery should have value between -1 and 4",
35864 "TWEAK_TYPE_INVALID": "tweak should be a Buffer",
35865 "TWEAK_LENGTH_INVALID": "tweak length is invalid"
35866}
35867
35868},{}],79:[function(require,module,exports){
35869(function (Buffer){
35870// prototype class for hash functions
35871function Hash (blockSize, finalSize) {
35872 this._block = new Buffer(blockSize)
35873 this._finalSize = finalSize
35874 this._blockSize = blockSize
35875 this._len = 0
35876 this._s = 0
35877}
35878
35879Hash.prototype.update = function (data, enc) {
35880 if (typeof data === 'string') {
35881 enc = enc || 'utf8'
35882 data = new Buffer(data, enc)
ab78acc6
IC
35883 }
35884
8b095871
IC
35885 var l = this._len += data.length
35886 var s = this._s || 0
35887 var f = 0
35888 var buffer = this._block
ab78acc6 35889
8b095871
IC
35890 while (s < l) {
35891 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
35892 var ch = (t - f)
ab78acc6 35893
8b095871
IC
35894 for (var i = 0; i < ch; i++) {
35895 buffer[(s % this._blockSize) + i] = data[i + f]
ab78acc6
IC
35896 }
35897
8b095871
IC
35898 s += ch
35899 f += ch
ab78acc6 35900
8b095871
IC
35901 if ((s % this._blockSize) === 0) {
35902 this._update(buffer)
35903 }
ab78acc6 35904 }
8b095871 35905 this._s = s
ab78acc6 35906
8b095871
IC
35907 return this
35908}
ab78acc6 35909
8b095871
IC
35910Hash.prototype.digest = function (enc) {
35911 // Suppose the length of the message M, in bits, is l
35912 var l = this._len * 8
ab78acc6 35913
8b095871
IC
35914 // Append the bit 1 to the end of the message
35915 this._block[this._len % this._blockSize] = 0x80
ab78acc6 35916
8b095871
IC
35917 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
35918 this._block.fill(0, this._len % this._blockSize + 1)
ab78acc6 35919
8b095871
IC
35920 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
35921 this._update(this._block)
35922 this._block.fill(0)
35923 }
ab78acc6 35924
8b095871
IC
35925 // to this append the block which is equal to the number l written in binary
35926 // TODO: handle case where l is > Math.pow(2, 29)
35927 this._block.writeInt32BE(l, this._blockSize - 4)
ebd8d4e8 35928
8b095871 35929 var hash = this._update(this._block) || this._hash()
ebd8d4e8 35930
8b095871 35931 return enc ? hash.toString(enc) : hash
ab78acc6 35932}
ebd8d4e8 35933
8b095871
IC
35934Hash.prototype._update = function () {
35935 throw new Error('_update must be implemented by subclass')
ab78acc6 35936}
8b095871
IC
35937
35938module.exports = Hash
35939
35940}).call(this,require("buffer").Buffer)
35941},{"buffer":5}],80:[function(require,module,exports){
35942var exports = module.exports = function SHA (algorithm) {
35943 algorithm = algorithm.toLowerCase()
35944
35945 var Algorithm = exports[algorithm]
35946 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
35947
35948 return new Algorithm()
ab78acc6 35949}
ebd8d4e8 35950
8b095871
IC
35951exports.sha = require('./sha')
35952exports.sha1 = require('./sha1')
35953exports.sha224 = require('./sha224')
35954exports.sha256 = require('./sha256')
35955exports.sha384 = require('./sha384')
35956exports.sha512 = require('./sha512')
35957
35958},{"./sha":81,"./sha1":82,"./sha224":83,"./sha256":84,"./sha384":85,"./sha512":86}],81:[function(require,module,exports){
35959(function (Buffer){
35960/*
35961 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
35962 * in FIPS PUB 180-1
35963 * This source code is derived from sha1.js of the same repository.
35964 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
35965 * operation was added.
35966 */
35967
35968var inherits = require('inherits')
35969var Hash = require('./hash')
35970
35971var K = [
35972 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
35973]
35974
35975var W = new Array(80)
35976
35977function Sha () {
35978 this.init()
35979 this._w = W
35980
35981 Hash.call(this, 64, 56)
ab78acc6 35982}
ebd8d4e8 35983
8b095871 35984inherits(Sha, Hash)
ebd8d4e8 35985
8b095871
IC
35986Sha.prototype.init = function () {
35987 this._a = 0x67452301
35988 this._b = 0xefcdab89
35989 this._c = 0x98badcfe
35990 this._d = 0x10325476
35991 this._e = 0xc3d2e1f0
ebd8d4e8 35992
8b095871
IC
35993 return this
35994}
ebd8d4e8 35995
8b095871
IC
35996function rotl5 (num) {
35997 return (num << 5) | (num >>> 27)
35998}
ebd8d4e8 35999
8b095871
IC
36000function rotl30 (num) {
36001 return (num << 30) | (num >>> 2)
36002}
ebd8d4e8 36003
8b095871
IC
36004function ft (s, b, c, d) {
36005 if (s === 0) return (b & c) | ((~b) & d)
36006 if (s === 2) return (b & c) | (b & d) | (c & d)
36007 return b ^ c ^ d
36008}
ebd8d4e8 36009
8b095871
IC
36010Sha.prototype._update = function (M) {
36011 var W = this._w
ebd8d4e8 36012
8b095871
IC
36013 var a = this._a | 0
36014 var b = this._b | 0
36015 var c = this._c | 0
36016 var d = this._d | 0
36017 var e = this._e | 0
ebd8d4e8 36018
8b095871
IC
36019 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
36020 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
ebd8d4e8 36021
8b095871
IC
36022 for (var j = 0; j < 80; ++j) {
36023 var s = ~~(j / 20)
36024 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
ebd8d4e8 36025
8b095871
IC
36026 e = d
36027 d = c
36028 c = rotl30(b)
36029 b = a
36030 a = t
36031 }
36032
36033 this._a = (a + this._a) | 0
36034 this._b = (b + this._b) | 0
36035 this._c = (c + this._c) | 0
36036 this._d = (d + this._d) | 0
36037 this._e = (e + this._e) | 0
36038}
36039
36040Sha.prototype._hash = function () {
36041 var H = new Buffer(20)
ab78acc6 36042
8b095871
IC
36043 H.writeInt32BE(this._a | 0, 0)
36044 H.writeInt32BE(this._b | 0, 4)
36045 H.writeInt32BE(this._c | 0, 8)
36046 H.writeInt32BE(this._d | 0, 12)
36047 H.writeInt32BE(this._e | 0, 16)
ebd8d4e8 36048
8b095871 36049 return H
ebd8d4e8
IC
36050}
36051
8b095871 36052module.exports = Sha
ebd8d4e8 36053
8b095871
IC
36054}).call(this,require("buffer").Buffer)
36055},{"./hash":79,"buffer":5,"inherits":63}],82:[function(require,module,exports){
36056(function (Buffer){
36057/*
36058 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
36059 * in FIPS PUB 180-1
36060 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
36061 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
36062 * Distributed under the BSD License
36063 * See http://pajhome.org.uk/crypt/md5 for details.
36064 */
ebd8d4e8 36065
8b095871
IC
36066var inherits = require('inherits')
36067var Hash = require('./hash')
ebd8d4e8 36068
8b095871
IC
36069var K = [
36070 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
36071]
ebd8d4e8 36072
8b095871 36073var W = new Array(80)
ab78acc6 36074
8b095871
IC
36075function Sha1 () {
36076 this.init()
36077 this._w = W
ebd8d4e8 36078
8b095871
IC
36079 Hash.call(this, 64, 56)
36080}
ebd8d4e8 36081
8b095871 36082inherits(Sha1, Hash)
ebd8d4e8 36083
8b095871
IC
36084Sha1.prototype.init = function () {
36085 this._a = 0x67452301
36086 this._b = 0xefcdab89
36087 this._c = 0x98badcfe
36088 this._d = 0x10325476
36089 this._e = 0xc3d2e1f0
ebd8d4e8 36090
8b095871
IC
36091 return this
36092}
ebd8d4e8 36093
8b095871
IC
36094function rotl1 (num) {
36095 return (num << 1) | (num >>> 31)
36096}
ebd8d4e8 36097
8b095871
IC
36098function rotl5 (num) {
36099 return (num << 5) | (num >>> 27)
36100}
ebd8d4e8 36101
8b095871
IC
36102function rotl30 (num) {
36103 return (num << 30) | (num >>> 2)
36104}
ebd8d4e8 36105
8b095871
IC
36106function ft (s, b, c, d) {
36107 if (s === 0) return (b & c) | ((~b) & d)
36108 if (s === 2) return (b & c) | (b & d) | (c & d)
36109 return b ^ c ^ d
36110}
ebd8d4e8 36111
8b095871
IC
36112Sha1.prototype._update = function (M) {
36113 var W = this._w
ebd8d4e8 36114
8b095871
IC
36115 var a = this._a | 0
36116 var b = this._b | 0
36117 var c = this._c | 0
36118 var d = this._d | 0
36119 var e = this._e | 0
ebd8d4e8 36120
8b095871
IC
36121 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
36122 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
36123
36124 for (var j = 0; j < 80; ++j) {
36125 var s = ~~(j / 20)
36126 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
36127
36128 e = d
36129 d = c
36130 c = rotl30(b)
36131 b = a
36132 a = t
ab78acc6
IC
36133 }
36134
8b095871
IC
36135 this._a = (a + this._a) | 0
36136 this._b = (b + this._b) | 0
36137 this._c = (c + this._c) | 0
36138 this._d = (d + this._d) | 0
36139 this._e = (e + this._e) | 0
36140}
ab78acc6 36141
8b095871
IC
36142Sha1.prototype._hash = function () {
36143 var H = new Buffer(20)
ab78acc6 36144
8b095871
IC
36145 H.writeInt32BE(this._a | 0, 0)
36146 H.writeInt32BE(this._b | 0, 4)
36147 H.writeInt32BE(this._c | 0, 8)
36148 H.writeInt32BE(this._d | 0, 12)
36149 H.writeInt32BE(this._e | 0, 16)
ab78acc6 36150
8b095871
IC
36151 return H
36152}
ab78acc6 36153
8b095871 36154module.exports = Sha1
ab78acc6 36155
8b095871
IC
36156}).call(this,require("buffer").Buffer)
36157},{"./hash":79,"buffer":5,"inherits":63}],83:[function(require,module,exports){
36158(function (Buffer){
36159/**
36160 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
36161 * in FIPS 180-2
36162 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
36163 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
36164 *
36165 */
ab78acc6 36166
8b095871
IC
36167var inherits = require('inherits')
36168var Sha256 = require('./sha256')
36169var Hash = require('./hash')
ab78acc6 36170
8b095871 36171var W = new Array(64)
ab78acc6 36172
8b095871
IC
36173function Sha224 () {
36174 this.init()
ab78acc6 36175
8b095871 36176 this._w = W // new Array(64)
ebd8d4e8 36177
8b095871
IC
36178 Hash.call(this, 64, 56)
36179}
ebd8d4e8 36180
8b095871 36181inherits(Sha224, Sha256)
ebd8d4e8 36182
8b095871
IC
36183Sha224.prototype.init = function () {
36184 this._a = 0xc1059ed8
36185 this._b = 0x367cd507
36186 this._c = 0x3070dd17
36187 this._d = 0xf70e5939
36188 this._e = 0xffc00b31
36189 this._f = 0x68581511
36190 this._g = 0x64f98fa7
36191 this._h = 0xbefa4fa4
ebd8d4e8 36192
8b095871
IC
36193 return this
36194}
ab78acc6 36195
8b095871
IC
36196Sha224.prototype._hash = function () {
36197 var H = new Buffer(28)
ebd8d4e8 36198
8b095871
IC
36199 H.writeInt32BE(this._a, 0)
36200 H.writeInt32BE(this._b, 4)
36201 H.writeInt32BE(this._c, 8)
36202 H.writeInt32BE(this._d, 12)
36203 H.writeInt32BE(this._e, 16)
36204 H.writeInt32BE(this._f, 20)
36205 H.writeInt32BE(this._g, 24)
ab78acc6 36206
8b095871
IC
36207 return H
36208}
ebd8d4e8 36209
8b095871 36210module.exports = Sha224
ebd8d4e8 36211
8b095871
IC
36212}).call(this,require("buffer").Buffer)
36213},{"./hash":79,"./sha256":84,"buffer":5,"inherits":63}],84:[function(require,module,exports){
36214(function (Buffer){
36215/**
36216 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
36217 * in FIPS 180-2
36218 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
36219 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
36220 *
36221 */
ebd8d4e8 36222
8b095871
IC
36223var inherits = require('inherits')
36224var Hash = require('./hash')
ab78acc6 36225
8b095871
IC
36226var K = [
36227 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
36228 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
36229 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
36230 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
36231 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
36232 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
36233 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
36234 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
36235 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
36236 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
36237 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
36238 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
36239 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
36240 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
36241 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
36242 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
36243]
ebd8d4e8 36244
8b095871 36245var W = new Array(64)
ebd8d4e8 36246
8b095871
IC
36247function Sha256 () {
36248 this.init()
ebd8d4e8 36249
8b095871 36250 this._w = W // new Array(64)
ebd8d4e8 36251
8b095871 36252 Hash.call(this, 64, 56)
ab78acc6 36253}
ebd8d4e8 36254
8b095871 36255inherits(Sha256, Hash)
ebd8d4e8 36256
8b095871
IC
36257Sha256.prototype.init = function () {
36258 this._a = 0x6a09e667
36259 this._b = 0xbb67ae85
36260 this._c = 0x3c6ef372
36261 this._d = 0xa54ff53a
36262 this._e = 0x510e527f
36263 this._f = 0x9b05688c
36264 this._g = 0x1f83d9ab
36265 this._h = 0x5be0cd19
ebd8d4e8 36266
8b095871
IC
36267 return this
36268}
ebd8d4e8 36269
8b095871
IC
36270function ch (x, y, z) {
36271 return z ^ (x & (y ^ z))
36272}
ebd8d4e8 36273
8b095871
IC
36274function maj (x, y, z) {
36275 return (x & y) | (z & (x | y))
36276}
ebd8d4e8 36277
8b095871
IC
36278function sigma0 (x) {
36279 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
36280}
ebd8d4e8 36281
8b095871
IC
36282function sigma1 (x) {
36283 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
36284}
ebd8d4e8 36285
8b095871
IC
36286function gamma0 (x) {
36287 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
36288}
ebd8d4e8 36289
8b095871
IC
36290function gamma1 (x) {
36291 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
36292}
ab78acc6 36293
8b095871
IC
36294Sha256.prototype._update = function (M) {
36295 var W = this._w
ebd8d4e8 36296
8b095871
IC
36297 var a = this._a | 0
36298 var b = this._b | 0
36299 var c = this._c | 0
36300 var d = this._d | 0
36301 var e = this._e | 0
36302 var f = this._f | 0
36303 var g = this._g | 0
36304 var h = this._h | 0
ab78acc6 36305
8b095871
IC
36306 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
36307 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
ab78acc6 36308
8b095871
IC
36309 for (var j = 0; j < 64; ++j) {
36310 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
36311 var T2 = (sigma0(a) + maj(a, b, c)) | 0
ebd8d4e8 36312
8b095871
IC
36313 h = g
36314 g = f
36315 f = e
36316 e = (d + T1) | 0
36317 d = c
36318 c = b
36319 b = a
36320 a = (T1 + T2) | 0
ebd8d4e8
IC
36321 }
36322
8b095871
IC
36323 this._a = (a + this._a) | 0
36324 this._b = (b + this._b) | 0
36325 this._c = (c + this._c) | 0
36326 this._d = (d + this._d) | 0
36327 this._e = (e + this._e) | 0
36328 this._f = (f + this._f) | 0
36329 this._g = (g + this._g) | 0
36330 this._h = (h + this._h) | 0
ab78acc6 36331}
ebd8d4e8 36332
8b095871
IC
36333Sha256.prototype._hash = function () {
36334 var H = new Buffer(32)
ebd8d4e8 36335
8b095871
IC
36336 H.writeInt32BE(this._a, 0)
36337 H.writeInt32BE(this._b, 4)
36338 H.writeInt32BE(this._c, 8)
36339 H.writeInt32BE(this._d, 12)
36340 H.writeInt32BE(this._e, 16)
36341 H.writeInt32BE(this._f, 20)
36342 H.writeInt32BE(this._g, 24)
36343 H.writeInt32BE(this._h, 28)
36344
36345 return H
ab78acc6 36346}
ebd8d4e8 36347
8b095871 36348module.exports = Sha256
ebd8d4e8 36349
8b095871
IC
36350}).call(this,require("buffer").Buffer)
36351},{"./hash":79,"buffer":5,"inherits":63}],85:[function(require,module,exports){
36352(function (Buffer){
36353var inherits = require('inherits')
36354var SHA512 = require('./sha512')
36355var Hash = require('./hash')
ebd8d4e8 36356
8b095871 36357var W = new Array(160)
ebd8d4e8 36358
8b095871
IC
36359function Sha384 () {
36360 this.init()
36361 this._w = W
ab78acc6 36362
8b095871
IC
36363 Hash.call(this, 128, 112)
36364}
ab78acc6 36365
8b095871 36366inherits(Sha384, SHA512)
ebd8d4e8 36367
8b095871
IC
36368Sha384.prototype.init = function () {
36369 this._ah = 0xcbbb9d5d
36370 this._bh = 0x629a292a
36371 this._ch = 0x9159015a
36372 this._dh = 0x152fecd8
36373 this._eh = 0x67332667
36374 this._fh = 0x8eb44a87
36375 this._gh = 0xdb0c2e0d
36376 this._hh = 0x47b5481d
36377
36378 this._al = 0xc1059ed8
36379 this._bl = 0x367cd507
36380 this._cl = 0x3070dd17
36381 this._dl = 0xf70e5939
36382 this._el = 0xffc00b31
36383 this._fl = 0x68581511
36384 this._gl = 0x64f98fa7
36385 this._hl = 0xbefa4fa4
ebd8d4e8 36386
8b095871
IC
36387 return this
36388}
ebd8d4e8 36389
8b095871
IC
36390Sha384.prototype._hash = function () {
36391 var H = new Buffer(48)
ebd8d4e8 36392
8b095871
IC
36393 function writeInt64BE (h, l, offset) {
36394 H.writeInt32BE(h, offset)
36395 H.writeInt32BE(l, offset + 4)
36396 }
ebd8d4e8 36397
8b095871
IC
36398 writeInt64BE(this._ah, this._al, 0)
36399 writeInt64BE(this._bh, this._bl, 8)
36400 writeInt64BE(this._ch, this._cl, 16)
36401 writeInt64BE(this._dh, this._dl, 24)
36402 writeInt64BE(this._eh, this._el, 32)
36403 writeInt64BE(this._fh, this._fl, 40)
ebd8d4e8 36404
8b095871 36405 return H
ab78acc6 36406}
ebd8d4e8 36407
8b095871
IC
36408module.exports = Sha384
36409
36410}).call(this,require("buffer").Buffer)
36411},{"./hash":79,"./sha512":86,"buffer":5,"inherits":63}],86:[function(require,module,exports){
36412(function (Buffer){
36413var inherits = require('inherits')
36414var Hash = require('./hash')
36415
36416var K = [
36417 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
36418 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
36419 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
36420 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
36421 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
36422 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
36423 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
36424 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
36425 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
36426 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
36427 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
36428 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
36429 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
36430 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
36431 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
36432 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
36433 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
36434 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
36435 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
36436 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
36437 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
36438 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
36439 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
36440 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
36441 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
36442 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
36443 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
36444 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
36445 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
36446 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
36447 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
36448 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
36449 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
36450 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
36451 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
36452 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
36453 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
36454 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
36455 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
36456 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
36457]
36458
36459var W = new Array(160)
ebd8d4e8 36460
8b095871
IC
36461function Sha512 () {
36462 this.init()
36463 this._w = W
ebd8d4e8 36464
8b095871 36465 Hash.call(this, 128, 112)
ab78acc6 36466}
ebd8d4e8 36467
8b095871 36468inherits(Sha512, Hash)
ebd8d4e8 36469
8b095871
IC
36470Sha512.prototype.init = function () {
36471 this._ah = 0x6a09e667
36472 this._bh = 0xbb67ae85
36473 this._ch = 0x3c6ef372
36474 this._dh = 0xa54ff53a
36475 this._eh = 0x510e527f
36476 this._fh = 0x9b05688c
36477 this._gh = 0x1f83d9ab
36478 this._hh = 0x5be0cd19
36479
36480 this._al = 0xf3bcc908
36481 this._bl = 0x84caa73b
36482 this._cl = 0xfe94f82b
36483 this._dl = 0x5f1d36f1
36484 this._el = 0xade682d1
36485 this._fl = 0x2b3e6c1f
36486 this._gl = 0xfb41bd6b
36487 this._hl = 0x137e2179
ebd8d4e8 36488
8b095871 36489 return this
ab78acc6 36490}
ebd8d4e8 36491
8b095871
IC
36492function Ch (x, y, z) {
36493 return z ^ (x & (y ^ z))
36494}
ebd8d4e8 36495
8b095871
IC
36496function maj (x, y, z) {
36497 return (x & y) | (z & (x | y))
ab78acc6 36498}
ebd8d4e8 36499
8b095871
IC
36500function sigma0 (x, xl) {
36501 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
36502}
ebd8d4e8 36503
8b095871
IC
36504function sigma1 (x, xl) {
36505 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
36506}
ab78acc6 36507
8b095871
IC
36508function Gamma0 (x, xl) {
36509 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
ab78acc6 36510}
ebd8d4e8 36511
8b095871
IC
36512function Gamma0l (x, xl) {
36513 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
36514}
ebd8d4e8 36515
8b095871
IC
36516function Gamma1 (x, xl) {
36517 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
ab78acc6
IC
36518}
36519
8b095871
IC
36520function Gamma1l (x, xl) {
36521 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
ab78acc6
IC
36522}
36523
8b095871
IC
36524function getCarry (a, b) {
36525 return (a >>> 0) < (b >>> 0) ? 1 : 0
ab78acc6
IC
36526}
36527
8b095871
IC
36528Sha512.prototype._update = function (M) {
36529 var W = this._w
ebd8d4e8 36530
8b095871
IC
36531 var ah = this._ah | 0
36532 var bh = this._bh | 0
36533 var ch = this._ch | 0
36534 var dh = this._dh | 0
36535 var eh = this._eh | 0
36536 var fh = this._fh | 0
36537 var gh = this._gh | 0
36538 var hh = this._hh | 0
ebd8d4e8 36539
8b095871
IC
36540 var al = this._al | 0
36541 var bl = this._bl | 0
36542 var cl = this._cl | 0
36543 var dl = this._dl | 0
36544 var el = this._el | 0
36545 var fl = this._fl | 0
36546 var gl = this._gl | 0
36547 var hl = this._hl | 0
ebd8d4e8 36548
8b095871
IC
36549 for (var i = 0; i < 32; i += 2) {
36550 W[i] = M.readInt32BE(i * 4)
36551 W[i + 1] = M.readInt32BE(i * 4 + 4)
36552 }
36553 for (; i < 160; i += 2) {
36554 var xh = W[i - 15 * 2]
36555 var xl = W[i - 15 * 2 + 1]
36556 var gamma0 = Gamma0(xh, xl)
36557 var gamma0l = Gamma0l(xl, xh)
ebd8d4e8 36558
8b095871
IC
36559 xh = W[i - 2 * 2]
36560 xl = W[i - 2 * 2 + 1]
36561 var gamma1 = Gamma1(xh, xl)
36562 var gamma1l = Gamma1l(xl, xh)
ebd8d4e8 36563
8b095871
IC
36564 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
36565 var Wi7h = W[i - 7 * 2]
36566 var Wi7l = W[i - 7 * 2 + 1]
ebd8d4e8 36567
8b095871
IC
36568 var Wi16h = W[i - 16 * 2]
36569 var Wi16l = W[i - 16 * 2 + 1]
ab78acc6 36570
8b095871
IC
36571 var Wil = (gamma0l + Wi7l) | 0
36572 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
36573 Wil = (Wil + gamma1l) | 0
36574 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
36575 Wil = (Wil + Wi16l) | 0
36576 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
ebd8d4e8 36577
8b095871
IC
36578 W[i] = Wih
36579 W[i + 1] = Wil
36580 }
ebd8d4e8 36581
8b095871
IC
36582 for (var j = 0; j < 160; j += 2) {
36583 Wih = W[j]
36584 Wil = W[j + 1]
ebd8d4e8 36585
8b095871
IC
36586 var majh = maj(ah, bh, ch)
36587 var majl = maj(al, bl, cl)
ebd8d4e8 36588
8b095871
IC
36589 var sigma0h = sigma0(ah, al)
36590 var sigma0l = sigma0(al, ah)
36591 var sigma1h = sigma1(eh, el)
36592 var sigma1l = sigma1(el, eh)
ab78acc6 36593
8b095871
IC
36594 // t1 = h + sigma1 + ch + K[j] + W[j]
36595 var Kih = K[j]
36596 var Kil = K[j + 1]
ab78acc6 36597
8b095871
IC
36598 var chh = Ch(eh, fh, gh)
36599 var chl = Ch(el, fl, gl)
ebd8d4e8 36600
8b095871
IC
36601 var t1l = (hl + sigma1l) | 0
36602 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
36603 t1l = (t1l + chl) | 0
36604 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
36605 t1l = (t1l + Kil) | 0
36606 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
36607 t1l = (t1l + Wil) | 0
36608 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
ebd8d4e8 36609
8b095871
IC
36610 // t2 = sigma0 + maj
36611 var t2l = (sigma0l + majl) | 0
36612 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
ebd8d4e8 36613
8b095871
IC
36614 hh = gh
36615 hl = gl
36616 gh = fh
36617 gl = fl
36618 fh = eh
36619 fl = el
36620 el = (dl + t1l) | 0
36621 eh = (dh + t1h + getCarry(el, dl)) | 0
36622 dh = ch
36623 dl = cl
36624 ch = bh
36625 cl = bl
36626 bh = ah
36627 bl = al
36628 al = (t1l + t2l) | 0
36629 ah = (t1h + t2h + getCarry(al, t1l)) | 0
36630 }
ab78acc6 36631
8b095871
IC
36632 this._al = (this._al + al) | 0
36633 this._bl = (this._bl + bl) | 0
36634 this._cl = (this._cl + cl) | 0
36635 this._dl = (this._dl + dl) | 0
36636 this._el = (this._el + el) | 0
36637 this._fl = (this._fl + fl) | 0
36638 this._gl = (this._gl + gl) | 0
36639 this._hl = (this._hl + hl) | 0
ab78acc6 36640
8b095871
IC
36641 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
36642 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
36643 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
36644 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
36645 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
36646 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
36647 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
36648 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
ab78acc6
IC
36649}
36650
8b095871
IC
36651Sha512.prototype._hash = function () {
36652 var H = new Buffer(64)
ab78acc6 36653
8b095871
IC
36654 function writeInt64BE (h, l, offset) {
36655 H.writeInt32BE(h, offset)
36656 H.writeInt32BE(l, offset + 4)
36657 }
ab78acc6 36658
8b095871
IC
36659 writeInt64BE(this._ah, this._al, 0)
36660 writeInt64BE(this._bh, this._bl, 8)
36661 writeInt64BE(this._ch, this._cl, 16)
36662 writeInt64BE(this._dh, this._dl, 24)
36663 writeInt64BE(this._eh, this._el, 32)
36664 writeInt64BE(this._fh, this._fl, 40)
36665 writeInt64BE(this._gh, this._gl, 48)
36666 writeInt64BE(this._hh, this._hl, 56)
ab78acc6 36667
8b095871 36668 return H
ebd8d4e8
IC
36669}
36670
8b095871 36671module.exports = Sha512
ebd8d4e8 36672
ab78acc6 36673}).call(this,require("buffer").Buffer)
8b095871
IC
36674},{"./hash":79,"buffer":5,"inherits":63}],87:[function(require,module,exports){
36675var isHexPrefixed = require('is-hex-prefixed');
d5dc92fd 36676
8b095871
IC
36677/**
36678 * Removes '0x' from a given `String` is present
36679 * @param {String} str the string value
36680 * @return {String|Optional} a string by pass if necessary
36681 */
36682module.exports = function stripHexPrefix(str) {
36683 if (typeof str !== 'string') {
36684 return str;
36685 }
07ac4350 36686
8b095871
IC
36687 return isHexPrefixed(str) ? str.slice(2) : str;
36688}
07ac4350 36689
8b095871
IC
36690},{"is-hex-prefixed":64}]},{},[31])(31)
36691});</script>
ab78acc6 36692 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
80c4dd2a
IC
36693
36694//// base.js
36695
36696/** @fileOverview Javascript cryptography implementation.
36697 *
36698 * Crush to remove comments, shorten variable names and
36699 * generally reduce transmission size.
36700 *
36701 * @author Emily Stark
36702 * @author Mike Hamburg
36703 * @author Dan Boneh
36704 */
36705
36706"use strict";
36707/*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
36708/*global document, window, escape, unescape, module, require, Uint32Array */
36709
36710/** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
36711var sjcl = {
36712 /** @namespace Symmetric ciphers. */
36713 cipher: {},
36714
36715 /** @namespace Hash functions. Right now only SHA256 is implemented. */
36716 hash: {},
36717
36718 /** @namespace Key exchange functions. Right now only SRP is implemented. */
36719 keyexchange: {},
36720
36721 /** @namespace Block cipher modes of operation. */
36722 mode: {},
36723
36724 /** @namespace Miscellaneous. HMAC and PBKDF2. */
36725 misc: {},
36726
36727 /**
36728 * @namespace Bit array encoders and decoders.
36729 *
36730 * @description
36731 * The members of this namespace are functions which translate between
36732 * SJCL's bitArrays and other objects (usually strings). Because it
36733 * isn't always clear which direction is encoding and which is decoding,
36734 * the method names are "fromBits" and "toBits".
36735 */
36736 codec: {},
36737
36738 /** @namespace Exceptions. */
36739 exception: {
36740 /** @constructor Ciphertext is corrupt. */
36741 corrupt: function(message) {
36742 this.toString = function() { return "CORRUPT: "+this.message; };
36743 this.message = message;
36744 },
36745
36746 /** @constructor Invalid parameter. */
36747 invalid: function(message) {
36748 this.toString = function() { return "INVALID: "+this.message; };
36749 this.message = message;
36750 },
36751
36752 /** @constructor Bug or missing feature in SJCL. @constructor */
36753 bug: function(message) {
36754 this.toString = function() { return "BUG: "+this.message; };
36755 this.message = message;
36756 },
36757
36758 /** @constructor Something isn't ready. */
36759 notReady: function(message) {
36760 this.toString = function() { return "NOT READY: "+this.message; };
36761 this.message = message;
ebd8d4e8 36762 }
80c4dd2a
IC
36763 }
36764};
36765
36766if(typeof module !== 'undefined' && module.exports){
36767 module.exports = sjcl;
36768}
36769if (typeof define === "function") {
36770 define([], function () {
36771 return sjcl;
36772 });
36773}
36774
36775
36776//// bitArray.js
36777
36778/** @fileOverview Arrays of bits, encoded as arrays of Numbers.
36779 *
36780 * @author Emily Stark
36781 * @author Mike Hamburg
36782 * @author Dan Boneh
36783 */
36784
36785/** @namespace Arrays of bits, encoded as arrays of Numbers.
36786 *
36787 * @description
36788 * <p>
36789 * These objects are the currency accepted by SJCL's crypto functions.
36790 * </p>
36791 *
36792 * <p>
36793 * Most of our crypto primitives operate on arrays of 4-byte words internally,
36794 * but many of them can take arguments that are not a multiple of 4 bytes.
36795 * This library encodes arrays of bits (whose size need not be a multiple of 8
36796 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
36797 * array of words, 32 bits at a time. Since the words are double-precision
36798 * floating point numbers, they fit some extra data. We use this (in a private,
36799 * possibly-changing manner) to encode the number of bits actually present
36800 * in the last word of the array.
36801 * </p>
36802 *
36803 * <p>
36804 * Because bitwise ops clear this out-of-band data, these arrays can be passed
36805 * to ciphers like AES which want arrays of words.
36806 * </p>
36807 */
36808sjcl.bitArray = {
36809 /**
36810 * Array slices in units of bits.
36811 * @param {bitArray} a The array to slice.
36812 * @param {Number} bstart The offset to the start of the slice, in bits.
36813 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
36814 * slice until the end of the array.
36815 * @return {bitArray} The requested slice.
36816 */
36817 bitSlice: function (a, bstart, bend) {
36818 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
36819 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
36820 },
36821
36822 /**
36823 * Extract a number packed into a bit array.
36824 * @param {bitArray} a The array to slice.
36825 * @param {Number} bstart The offset to the start of the slice, in bits.
36826 * @param {Number} length The length of the number to extract.
36827 * @return {Number} The requested slice.
36828 */
36829 extract: function(a, bstart, blength) {
36830 // FIXME: this Math.floor is not necessary at all, but for some reason
36831 // seems to suppress a bug in the Chromium JIT.
36832 var x, sh = Math.floor((-bstart-blength) & 31);
36833 if ((bstart + blength - 1 ^ bstart) & -32) {
36834 // it crosses a boundary
36835 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
36836 } else {
36837 // within a single word
36838 x = a[bstart/32|0] >>> sh;
ebd8d4e8 36839 }
80c4dd2a
IC
36840 return x & ((1<<blength) - 1);
36841 },
36842
36843 /**
36844 * Concatenate two bit arrays.
36845 * @param {bitArray} a1 The first array.
36846 * @param {bitArray} a2 The second array.
36847 * @return {bitArray} The concatenation of a1 and a2.
36848 */
36849 concat: function (a1, a2) {
36850 if (a1.length === 0 || a2.length === 0) {
36851 return a1.concat(a2);
36852 }
36853
36854 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
36855 if (shift === 32) {
36856 return a1.concat(a2);
36857 } else {
36858 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
ebd8d4e8 36859 }
80c4dd2a
IC
36860 },
36861
36862 /**
36863 * Find the length of an array of bits.
36864 * @param {bitArray} a The array.
36865 * @return {Number} The length of a, in bits.
36866 */
36867 bitLength: function (a) {
36868 var l = a.length, x;
36869 if (l === 0) { return 0; }
36870 x = a[l - 1];
36871 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
36872 },
36873
36874 /**
36875 * Truncate an array.
36876 * @param {bitArray} a The array.
36877 * @param {Number} len The length to truncate to, in bits.
36878 * @return {bitArray} A new array, truncated to len bits.
36879 */
36880 clamp: function (a, len) {
36881 if (a.length * 32 < len) { return a; }
36882 a = a.slice(0, Math.ceil(len / 32));
36883 var l = a.length;
36884 len = len & 31;
36885 if (l > 0 && len) {
36886 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
36887 }
36888 return a;
36889 },
36890
36891 /**
36892 * Make a partial word for a bit array.
36893 * @param {Number} len The number of bits in the word.
36894 * @param {Number} x The bits.
36895 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
36896 * @return {Number} The partial word.
36897 */
36898 partial: function (len, x, _end) {
36899 if (len === 32) { return x; }
36900 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
36901 },
36902
36903 /**
36904 * Get the number of bits used by a partial word.
36905 * @param {Number} x The partial word.
36906 * @return {Number} The number of bits used by the partial word.
36907 */
36908 getPartial: function (x) {
36909 return Math.round(x/0x10000000000) || 32;
36910 },
36911
36912 /**
36913 * Compare two arrays for equality in a predictable amount of time.
36914 * @param {bitArray} a The first array.
36915 * @param {bitArray} b The second array.
36916 * @return {boolean} true if a == b; false otherwise.
36917 */
36918 equal: function (a, b) {
36919 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
36920 return false;
ebd8d4e8 36921 }
80c4dd2a
IC
36922 var x = 0, i;
36923 for (i=0; i<a.length; i++) {
36924 x |= a[i]^b[i];
ebd8d4e8 36925 }
80c4dd2a
IC
36926 return (x === 0);
36927 },
36928
36929 /** Shift an array right.
36930 * @param {bitArray} a The array to shift.
36931 * @param {Number} shift The number of bits to shift.
36932 * @param {Number} [carry=0] A byte to carry in
36933 * @param {bitArray} [out=[]] An array to prepend to the output.
36934 * @private
36935 */
36936 _shiftRight: function (a, shift, carry, out) {
36937 var i, last2=0, shift2;
36938 if (out === undefined) { out = []; }
36939
36940 for (; shift >= 32; shift -= 32) {
36941 out.push(carry);
36942 carry = 0;
36943 }
36944 if (shift === 0) {
36945 return out.concat(a);
36946 }
36947
36948 for (i=0; i<a.length; i++) {
36949 out.push(carry | a[i]>>>shift);
36950 carry = a[i] << (32-shift);
36951 }
36952 last2 = a.length ? a[a.length-1] : 0;
36953 shift2 = sjcl.bitArray.getPartial(last2);
36954 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
36955 return out;
36956 },
36957
36958 /** xor a block of 4 words together.
36959 * @private
36960 */
36961 _xor4: function(x,y) {
36962 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
36963 },
36964
36965 /** byteswap a word array inplace.
36966 * (does not handle partial words)
36967 * @param {sjcl.bitArray} a word array
36968 * @return {sjcl.bitArray} byteswapped array
36969 */
36970 byteswapM: function(a) {
36971 var i, v, m = 0xff00;
36972 for (i = 0; i < a.length; ++i) {
36973 v = a[i];
36974 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
ebd8d4e8 36975 }
80c4dd2a
IC
36976 return a;
36977 }
36978};
36979
36980
36981//// codecString.js
36982
36983/** @fileOverview Bit array codec implementations.
36984 *
36985 * @author Emily Stark
36986 * @author Mike Hamburg
36987 * @author Dan Boneh
36988 */
36989
36990/** @namespace UTF-8 strings */
36991sjcl.codec.utf8String = {
36992 /** Convert from a bitArray to a UTF-8 string. */
36993 fromBits: function (arr) {
36994 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
36995 for (i=0; i<bl/8; i++) {
36996 if ((i&3) === 0) {
36997 tmp = arr[i/4];
36998 }
36999 out += String.fromCharCode(tmp >>> 24);
37000 tmp <<= 8;
ebd8d4e8 37001 }
80c4dd2a
IC
37002 return decodeURIComponent(escape(out));
37003 },
37004
37005 /** Convert from a UTF-8 string to a bitArray. */
37006 toBits: function (str) {
37007 str = unescape(encodeURIComponent(str));
37008 var out = [], i, tmp=0;
37009 for (i=0; i<str.length; i++) {
37010 tmp = tmp << 8 | str.charCodeAt(i);
37011 if ((i&3) === 3) {
37012 out.push(tmp);
37013 tmp = 0;
37014 }
ebd8d4e8 37015 }
80c4dd2a
IC
37016 if (i&3) {
37017 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
ebd8d4e8 37018 }
80c4dd2a
IC
37019 return out;
37020 }
37021};
37022
37023
37024//// codecHex.js
37025
37026/** @fileOverview Bit array codec implementations.
37027 *
37028 * @author Emily Stark
37029 * @author Mike Hamburg
37030 * @author Dan Boneh
37031 */
37032
37033/** @namespace Hexadecimal */
37034sjcl.codec.hex = {
37035 /** Convert from a bitArray to a hex string. */
37036 fromBits: function (arr) {
37037 var out = "", i;
37038 for (i=0; i<arr.length; i++) {
37039 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
ebd8d4e8 37040 }
80c4dd2a
IC
37041 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
37042 },
37043 /** Convert from a hex string to a bitArray. */
37044 toBits: function (str) {
37045 var i, out=[], len;
37046 str = str.replace(/\s|0x/g, "");
37047 len = str.length;
37048 str = str + "00000000";
37049 for (i=0; i<str.length; i+=8) {
37050 out.push(parseInt(str.substr(i,8),16)^0);
ebd8d4e8 37051 }
80c4dd2a
IC
37052 return sjcl.bitArray.clamp(out, len*4);
37053 }
37054};
37055
37056
37057//// sha512.js
37058
37059/** @fileOverview Javascript SHA-512 implementation.
37060 *
37061 * This implementation was written for CryptoJS by Jeff Mott and adapted for
37062 * SJCL by Stefan Thomas.
37063 *
37064 * CryptoJS (c) 2009–2012 by Jeff Mott. All rights reserved.
37065 * Released with New BSD License
37066 *
37067 * @author Emily Stark
37068 * @author Mike Hamburg
37069 * @author Dan Boneh
37070 * @author Jeff Mott
37071 * @author Stefan Thomas
37072 */
37073
37074/**
37075 * Context for a SHA-512 operation in progress.
37076 * @constructor
37077 * @class Secure Hash Algorithm, 512 bits.
37078 */
37079sjcl.hash.sha512 = function (hash) {
37080 if (!this._key[0]) { this._precompute(); }
37081 if (hash) {
37082 this._h = hash._h.slice(0);
37083 this._buffer = hash._buffer.slice(0);
37084 this._length = hash._length;
37085 } else {
37086 this.reset();
37087 }
37088};
37089
37090/**
37091 * Hash a string or an array of words.
37092 * @static
37093 * @param {bitArray|String} data the data to hash.
37094 * @return {bitArray} The hash value, an array of 16 big-endian words.
37095 */
37096sjcl.hash.sha512.hash = function (data) {
37097 return (new sjcl.hash.sha512()).update(data).finalize();
37098};
37099
37100sjcl.hash.sha512.prototype = {
37101 /**
37102 * The hash's block size, in bits.
37103 * @constant
37104 */
37105 blockSize: 1024,
37106
37107 /**
37108 * Reset the hash state.
37109 * @return this
37110 */
37111 reset:function () {
37112 this._h = this._init.slice(0);
37113 this._buffer = [];
37114 this._length = 0;
37115 return this;
37116 },
37117
37118 /**
37119 * Input several words to the hash.
37120 * @param {bitArray|String} data the data to hash.
37121 * @return this
37122 */
37123 update: function (data) {
37124 if (typeof data === "string") {
37125 data = sjcl.codec.utf8String.toBits(data);
ebd8d4e8 37126 }
80c4dd2a
IC
37127 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
37128 ol = this._length,
37129 nl = this._length = ol + sjcl.bitArray.bitLength(data);
37130 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
37131 this._block(b.splice(0,32));
ebd8d4e8 37132 }
80c4dd2a
IC
37133 return this;
37134 },
37135
37136 /**
37137 * Complete hashing and output the hash value.
37138 * @return {bitArray} The hash value, an array of 16 big-endian words.
37139 */
37140 finalize:function () {
37141 var i, b = this._buffer, h = this._h;
37142
37143 // Round out and push the buffer
37144 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
37145
37146 // Round out the buffer to a multiple of 32 words, less the 4 length words.
37147 for (i = b.length + 4; i & 31; i++) {
37148 b.push(0);
ebd8d4e8 37149 }
80c4dd2a
IC
37150
37151 // append the length
37152 b.push(0);
37153 b.push(0);
37154 b.push(Math.floor(this._length / 0x100000000));
37155 b.push(this._length | 0);
37156
37157 while (b.length) {
37158 this._block(b.splice(0,32));
ebd8d4e8 37159 }
80c4dd2a
IC
37160
37161 this.reset();
37162 return h;
37163 },
37164
37165 /**
37166 * The SHA-512 initialization vector, to be precomputed.
37167 * @private
37168 */
37169 _init:[],
37170
37171 /**
37172 * Least significant 24 bits of SHA512 initialization values.
37173 *
37174 * Javascript only has 53 bits of precision, so we compute the 40 most
37175 * significant bits and add the remaining 24 bits as constants.
37176 *
37177 * @private
37178 */
37179 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
37180
37181 /*
37182 _init:
37183 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
37184 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
37185 */
37186
37187 /**
37188 * The SHA-512 hash key, to be precomputed.
37189 * @private
37190 */
37191 _key:[],
37192
37193 /**
37194 * Least significant 24 bits of SHA512 key values.
37195 * @private
37196 */
37197 _keyr:
37198 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
37199 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
37200 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
37201 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
37202 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
37203 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
37204 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
37205 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
37206 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
37207 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
37208
37209 /*
37210 _key:
37211 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
37212 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
37213 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
37214 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
37215 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
37216 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
37217 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
37218 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
37219 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
37220 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
37221 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
37222 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
37223 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
37224 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
37225 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
37226 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
37227 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
37228 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
37229 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
37230 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
37231 */
37232
37233 /**
37234 * Function to precompute _init and _key.
37235 * @private
37236 */
37237 _precompute: function () {
37238 // XXX: This code is for precomputing the SHA256 constants, change for
37239 // SHA512 and re-enable.
37240 var i = 0, prime = 2, factor;
37241
37242 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
37243 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
37244
37245 outer: for (; i<80; prime++) {
37246 for (factor=2; factor*factor <= prime; factor++) {
37247 if (prime % factor === 0) {
37248 // not a prime
37249 continue outer;
ebd8d4e8 37250 }
80c4dd2a
IC
37251 }
37252
37253 if (i<8) {
37254 this._init[i*2] = frac(Math.pow(prime, 1/2));
37255 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
37256 }
37257 this._key[i*2] = frac(Math.pow(prime, 1/3));
37258 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
37259 i++;
ebd8d4e8 37260 }
80c4dd2a
IC
37261 },
37262
37263 /**
37264 * Perform one cycle of SHA-512.
37265 * @param {bitArray} words one block of words.
37266 * @private
37267 */
37268 _block:function (words) {
37269 var i, wrh, wrl,
37270 w = words.slice(0),
37271 h = this._h,
37272 k = this._key,
37273 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
37274 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
37275 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
37276 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
37277
37278 // Working variables
37279 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
37280 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
37281 eh = h4h, el = h4l, fh = h5h, fl = h5l,
37282 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
37283
37284 for (i=0; i<80; i++) {
37285 // load up the input word for this round
37286 if (i<16) {
37287 wrh = w[i * 2];
37288 wrl = w[i * 2 + 1];
37289 } else {
37290 // Gamma0
37291 var gamma0xh = w[(i-15) * 2];
37292 var gamma0xl = w[(i-15) * 2 + 1];
37293 var gamma0h =
37294 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
37295 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
37296 (gamma0xh >>> 7);
37297 var gamma0l =
37298 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
37299 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
37300 ((gamma0xh << 25) | (gamma0xl >>> 7));
37301
37302 // Gamma1
37303 var gamma1xh = w[(i-2) * 2];
37304 var gamma1xl = w[(i-2) * 2 + 1];
37305 var gamma1h =
37306 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
37307 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
37308 (gamma1xh >>> 6);
37309 var gamma1l =
37310 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
37311 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
37312 ((gamma1xh << 26) | (gamma1xl >>> 6));
37313
37314 // Shortcuts
37315 var wr7h = w[(i-7) * 2];
37316 var wr7l = w[(i-7) * 2 + 1];
37317
37318 var wr16h = w[(i-16) * 2];
37319 var wr16l = w[(i-16) * 2 + 1];
37320
37321 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
37322 wrl = gamma0l + wr7l;
37323 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
37324 wrl += gamma1l;
37325 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
37326 wrl += wr16l;
37327 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
37328 }
37329
37330 w[i*2] = wrh |= 0;
37331 w[i*2 + 1] = wrl |= 0;
37332
37333 // Ch
37334 var chh = (eh & fh) ^ (~eh & gh);
37335 var chl = (el & fl) ^ (~el & gl);
37336
37337 // Maj
37338 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
37339 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
37340
37341 // Sigma0
37342 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
37343 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
37344
37345 // Sigma1
37346 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
37347 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
37348
37349 // K(round)
37350 var krh = k[i*2];
37351 var krl = k[i*2+1];
37352
37353 // t1 = h + sigma1 + ch + K(round) + W(round)
37354 var t1l = hl + sigma1l;
37355 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
37356 t1l += chl;
37357 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
37358 t1l += krl;
37359 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
37360 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
37361 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
37362
37363 // t2 = sigma0 + maj
37364 var t2l = sigma0l + majl;
37365 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
37366
37367 // Update working variables
37368 hh = gh;
37369 hl = gl;
37370 gh = fh;
37371 gl = fl;
37372 fh = eh;
37373 fl = el;
37374 el = (dl + t1l) | 0;
37375 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
37376 dh = ch;
37377 dl = cl;
37378 ch = bh;
37379 cl = bl;
37380 bh = ah;
37381 bl = al;
37382 al = (t1l + t2l) | 0;
37383 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
37384 }
37385
37386 // Intermediate hash
37387 h0l = h[1] = (h0l + al) | 0;
37388 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
37389 h1l = h[3] = (h1l + bl) | 0;
37390 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
37391 h2l = h[5] = (h2l + cl) | 0;
37392 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
37393 h3l = h[7] = (h3l + dl) | 0;
37394 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
37395 h4l = h[9] = (h4l + el) | 0;
37396 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
37397 h5l = h[11] = (h5l + fl) | 0;
37398 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
37399 h6l = h[13] = (h6l + gl) | 0;
37400 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
37401 h7l = h[15] = (h7l + hl) | 0;
37402 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
37403 }
37404};
37405
37406
37407//// hmac.js
37408
37409/** @fileOverview HMAC implementation.
37410 *
37411 * @author Emily Stark
37412 * @author Mike Hamburg
37413 * @author Dan Boneh
37414 */
37415
37416/** HMAC with the specified hash function.
37417 * @constructor
37418 * @param {bitArray} key the key for HMAC.
37419 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
37420 */
37421sjcl.misc.hmac = function (key, Hash) {
37422 this._hash = Hash = Hash || sjcl.hash.sha256;
37423 var exKey = [[],[]], i,
37424 bs = Hash.prototype.blockSize / 32;
37425 this._baseHash = [new Hash(), new Hash()];
37426
37427 if (key.length > bs) {
37428 key = Hash.hash(key);
37429 }
37430
37431 for (i=0; i<bs; i++) {
37432 exKey[0][i] = key[i]^0x36363636;
37433 exKey[1][i] = key[i]^0x5C5C5C5C;
37434 }
37435
37436 this._baseHash[0].update(exKey[0]);
37437 this._baseHash[1].update(exKey[1]);
37438 this._resultHash = new Hash(this._baseHash[0]);
37439};
37440
37441/** HMAC with the specified hash function. Also called encrypt since it's a prf.
37442 * @param {bitArray|String} data The data to mac.
37443 */
37444sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
37445 if (!this._updated) {
37446 this.update(data);
37447 return this.digest(data);
37448 } else {
37449 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
37450 }
37451};
37452
37453sjcl.misc.hmac.prototype.reset = function () {
37454 this._resultHash = new this._hash(this._baseHash[0]);
37455 this._updated = false;
37456};
37457
37458sjcl.misc.hmac.prototype.update = function (data) {
37459 this._updated = true;
37460 this._resultHash.update(data);
37461};
37462
37463sjcl.misc.hmac.prototype.digest = function () {
37464 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
37465
37466 this.reset();
37467
37468 return result;
37469};
37470
37471
37472//// pbkdf2.js
37473
37474
37475/** @fileOverview Password-based key-derivation function, version 2.0.
37476 *
37477 * @author Emily Stark
37478 * @author Mike Hamburg
37479 * @author Dan Boneh
37480 */
37481
37482/** Password-Based Key-Derivation Function, version 2.0.
37483 *
37484 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
37485 *
37486 * This is the method specified by RSA's PKCS #5 standard.
37487 *
37488 * @param {bitArray|String} password The password.
37489 * @param {bitArray|String} salt The salt. Should have lots of entropy.
37490 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
37491 * @param {Number} [length] The length of the derived key. Defaults to the
37492 output size of the hash function.
37493 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
37494 * @return {bitArray} the derived key.
37495 */
37496sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
37497 count = count || 1000;
37498
37499 if (length < 0 || count < 0) {
37500 throw sjcl.exception.invalid("invalid params to pbkdf2");
37501 }
37502
37503 if (typeof password === "string") {
37504 password = sjcl.codec.utf8String.toBits(password);
37505 }
37506
37507 if (typeof salt === "string") {
37508 salt = sjcl.codec.utf8String.toBits(salt);
37509 }
37510
37511 Prff = Prff || sjcl.misc.hmac;
37512
37513 var prf = new Prff(password),
37514 u, ui, i, j, k, out = [], b = sjcl.bitArray;
37515
37516 for (k = 1; 32 * out.length < (length || 1); k++) {
37517 u = ui = prf.encrypt(b.concat(salt,[k]));
37518
37519 for (i=1; i<count; i++) {
37520 ui = prf.encrypt(ui);
37521 for (j=0; j<ui.length; j++) {
37522 u[j] ^= ui[j];
37523 }
ebd8d4e8 37524 }
80c4dd2a
IC
37525
37526 out = out.concat(u);
37527 }
37528
37529 if (length) { out = b.clamp(out, length); }
37530
37531 return out;
37532};
37533
37534
37535//// sha256.js
37536
37537/** @fileOverview Javascript SHA-256 implementation.
37538 *
37539 * An older version of this implementation is available in the public
37540 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
37541 * Stanford University 2008-2010 and BSD-licensed for liability
37542 * reasons.
37543 *
37544 * Special thanks to Aldo Cortesi for pointing out several bugs in
37545 * this code.
37546 *
37547 * @author Emily Stark
37548 * @author Mike Hamburg
37549 * @author Dan Boneh
37550 */
37551
37552/**
37553 * Context for a SHA-256 operation in progress.
37554 * @constructor
37555 * @class Secure Hash Algorithm, 256 bits.
37556 */
37557sjcl.hash.sha256 = function (hash) {
37558 if (!this._key[0]) { this._precompute(); }
37559 if (hash) {
37560 this._h = hash._h.slice(0);
37561 this._buffer = hash._buffer.slice(0);
37562 this._length = hash._length;
37563 } else {
37564 this.reset();
37565 }
37566};
37567
37568/**
37569 * Hash a string or an array of words.
37570 * @static
37571 * @param {bitArray|String} data the data to hash.
37572 * @return {bitArray} The hash value, an array of 16 big-endian words.
37573 */
37574sjcl.hash.sha256.hash = function (data) {
37575 return (new sjcl.hash.sha256()).update(data).finalize();
37576};
37577
37578sjcl.hash.sha256.prototype = {
37579 /**
37580 * The hash's block size, in bits.
37581 * @constant
37582 */
37583 blockSize: 512,
37584
37585 /**
37586 * Reset the hash state.
37587 * @return this
37588 */
37589 reset:function () {
37590 this._h = this._init.slice(0);
37591 this._buffer = [];
37592 this._length = 0;
37593 return this;
37594 },
37595
37596 /**
37597 * Input several words to the hash.
37598 * @param {bitArray|String} data the data to hash.
37599 * @return this
37600 */
37601 update: function (data) {
37602 if (typeof data === "string") {
37603 data = sjcl.codec.utf8String.toBits(data);
37604 }
37605 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
37606 ol = this._length,
37607 nl = this._length = ol + sjcl.bitArray.bitLength(data);
37608 for (i = 512+ol & -512; i <= nl; i+= 512) {
37609 this._block(b.splice(0,16));
ebd8d4e8 37610 }
3af2954a 37611 return this;
80c4dd2a
IC
37612 },
37613
37614 /**
37615 * Complete hashing and output the hash value.
37616 * @return {bitArray} The hash value, an array of 8 big-endian words.
37617 */
37618 finalize:function () {
37619 var i, b = this._buffer, h = this._h;
37620
37621 // Round out and push the buffer
37622 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
37623
37624 // Round out the buffer to a multiple of 16 words, less the 2 length words.
37625 for (i = b.length + 2; i & 15; i++) {
37626 b.push(0);
37627 }
37628
37629 // append the length
37630 b.push(Math.floor(this._length / 0x100000000));
37631 b.push(this._length | 0);
37632
37633 while (b.length) {
37634 this._block(b.splice(0,16));
37635 }
37636
37637 this.reset();
37638 return h;
37639 },
37640
37641 /**
37642 * The SHA-256 initialization vector, to be precomputed.
37643 * @private
37644 */
37645 _init:[],
37646 /*
37647 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
37648 */
37649
37650 /**
37651 * The SHA-256 hash key, to be precomputed.
37652 * @private
37653 */
37654 _key:[],
37655 /*
37656 _key:
37657 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
37658 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
37659 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
37660 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
37661 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
37662 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
37663 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
37664 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
37665 */
37666
37667
37668 /**
37669 * Function to precompute _init and _key.
37670 * @private
37671 */
37672 _precompute: function () {
37673 var i = 0, prime = 2, factor;
37674
37675 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
37676
37677 outer: for (; i<64; prime++) {
37678 for (factor=2; factor*factor <= prime; factor++) {
37679 if (prime % factor === 0) {
37680 // not a prime
37681 continue outer;
ebd8d4e8 37682 }
80c4dd2a
IC
37683 }
37684
37685 if (i<8) {
37686 this._init[i] = frac(Math.pow(prime, 1/2));
37687 }
37688 this._key[i] = frac(Math.pow(prime, 1/3));
37689 i++;
ebd8d4e8 37690 }
80c4dd2a
IC
37691 },
37692
37693 /**
37694 * Perform one cycle of SHA-256.
37695 * @param {bitArray} words one block of words.
37696 * @private
37697 */
37698 _block:function (words) {
37699 var i, tmp, a, b,
37700 w = words.slice(0),
37701 h = this._h,
37702 k = this._key,
37703 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
37704 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
37705
37706 /* Rationale for placement of |0 :
37707 * If a value can overflow is original 32 bits by a factor of more than a few
37708 * million (2^23 ish), there is a possibility that it might overflow the
37709 * 53-bit mantissa and lose precision.
37710 *
37711 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
37712 * propagates around the loop, and on the hash state h[]. I don't believe
37713 * that the clamps on h4 and on h0 are strictly necessary, but it's close
37714 * (for h4 anyway), and better safe than sorry.
37715 *
37716 * The clamps on h[] are necessary for the output to be correct even in the
37717 * common case and for short inputs.
37718 */
37719 for (i=0; i<64; i++) {
37720 // load up the input word for this round
37721 if (i<16) {
37722 tmp = w[i];
37723 } else {
37724 a = w[(i+1 ) & 15];
37725 b = w[(i+14) & 15];
37726 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
37727 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
37728 w[i&15] + w[(i+9) & 15]) | 0;
37729 }
37730
37731 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
37732
37733 // shift register
37734 h7 = h6; h6 = h5; h5 = h4;
37735 h4 = h3 + tmp | 0;
37736 h3 = h2; h2 = h1; h1 = h0;
37737
37738 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
37739 }
37740
37741 h[0] = h[0]+h0 | 0;
37742 h[1] = h[1]+h1 | 0;
37743 h[2] = h[2]+h2 | 0;
37744 h[3] = h[3]+h3 | 0;
37745 h[4] = h[4]+h4 | 0;
37746 h[5] = h[5]+h5 | 0;
37747 h[6] = h[6]+h6 | 0;
37748 h[7] = h[7]+h7 | 0;
37749 }
37750};
ea87f1d3
IC
37751</script>
37752 <script>// An extremely basic translation library
37753//
37754// Example usage:
37755//
37756// Set some html to be translated. Do this using the 'data-translate' attribute:
37757//
37758// <div data-translate>Test</div>
37759// <div data-translate-html><em>keep em tag</em></div>
52da415f
IC
37760// <input data-translate-placeholder placeholder="Example placeholder">
37761// <span data-translate-title title="Example title"></span>
ea87f1d3
IC
37762//
37763// Obtain all the phrases to be translated via js debug console:
37764//
37765// Translate.phrasesAsJson();
37766//
37767// Use that template to translate the phrases into another language.
37768// Leave the key the same. Change the value to the new language.
37769//
37770// Create a js file to load the new phrases. In this example for Spanish,
37771// es.js will contain the following code:
37772//
37773// Translate.loadForeignPhrases("es", {
37774// "Test": "Test in Spanish",
37775// "<em>keep em tag</em>": "<em>keep em tag in Spanish</em>",
52da415f
IC
37776// "Example placeholder": "Example placeholder in Spanish"
37777// "Example title": "Example title in Spanish"
ea87f1d3
IC
37778// });
37779//
37780// In your UI put a listener for clicking on the Spanish button:
37781//
37782// mySpanishButton.addEventListener("click", function() {
37783// Translate.setLanguage("es");
37784// });
37785// myEnglishButton.addEventListener("click", function() {
37786// Translate.setLanguage("en");
37787// });
37788
37789Translate = new (function() {
37790
37791 var defaultLanguage = "en";
37792
37793 var allPhrases = {};
37794 allPhrases[defaultLanguage] = {};
37795
37796 // Node types
37797
37798 var text = {
37799 selector: "[data-translate]",
37800 getKey: function() {
37801 return this.textContent.trim().replace(/\s+/g, " ");
37802 },
37803 setPhrase: function(p) {
37804 this.textContent = p;
37805 },
37806 }
37807
37808 var html = {
37809 selector: "[data-translate-html]",
37810 getKey: function() {
37811 return this.innerHTML.trim().replace(/\s+/g, " ");
37812 },
37813 setPhrase: function(p) {
37814 this.innerHTML = p;
37815 },
37816 }
37817
37818 var placeholder = {
37819 selector: "[data-translate-placeholder]",
37820 getKey: function() {
37821 return this.getAttribute("placeholder").trim().replace(/\s+/g, " ");
37822 },
37823 setPhrase: function(p) {
37824 this.setAttribute("placeholder", p);
37825 },
37826 }
37827
52da415f
IC
37828 var title = {
37829 selector: "[data-translate-title]",
37830 getKey: function() {
37831 return this.getAttribute("title").trim().replace(/\s+/g, " ");
37832 },
37833 setPhrase: function(p) {
37834 this.setAttribute("title", p);
37835 },
37836 }
37837
ea87f1d3
IC
37838 // Get elements to be translated
37839 var allEls = getEls(text)
37840 .concat(getEls(html))
52da415f
IC
37841 .concat(getEls(placeholder))
37842 .concat(getEls(title));
ea87f1d3
IC
37843
37844 // Provides access to phrases from a non-default language.
37845 // See phrases_en.js for example usage.
37846 this.loadForeignPhrases = function(language, phrases) {
37847 allPhrases[language] = phrases;
37848 }
37849
37850 // Displays a different language, eg "en" or "fr"
37851 this.setLanguage = function(language) {
37852 for (var i=0; i<allEls.length; i++) {
37853 var el = allEls[i];
37854 var key = el.key;
37855 if (!(language in allPhrases)) {
37856 console.log(language + " not in allPhrases");
37857 return;
37858 }
37859 if (!(key in allPhrases[language])) {
37860 console.log(language + " does not contain phrase: " + key);
37861 return;
37862 }
37863 var phrase = allPhrases[language][key];
37864 el.setPhrase(phrase);
37865 }
37866 }
37867
37868 // Converts the phrases to a key-pair json file.
37869 // This is a good way to export phrases for use in translation tools.
37870 this.phrasesAsJson = function(language) {
37871 var keys = [];
37872 for (var i=0; i<allEls.length; i++) {
37873 var el = allEls[i];
37874 var key = el.key;
37875 keys.push(key);
37876 }
37877 keys.sort();
37878 var output = {};
37879 for (var i=0; i<keys.length; i++) {
37880 var key = keys[i];
37881 var translated = "";
37882 if (language in allPhrases && key in allPhrases[language]) {
37883 translated = allPhrases[language][key];
37884 }
37885 output[key] = translated;
37886 }
37887 return JSON.stringify(output, null, 2);
37888 }
37889
37890 function getEls(nodeType) {
37891 var nodes = document.querySelectorAll(nodeType.selector);
37892 var els = [];
37893 for (var i=0; i<nodes.length; i++) {
37894 var node = nodes[i];
37895 node.getKey = nodeType.getKey;
37896 node.setPhrase = nodeType.setPhrase;
37897 node.key = node.getKey();
37898 allPhrases[defaultLanguage][node.key] = node.key;
37899 els.push(node);
37900 }
37901 return els;
37902 }
37903
37904})();
37905</script>
37906 <script>Translate.loadForeignPhrases("en",
37907{
37908 "<code>m/44'/0'/0'/0</code> generates public addresses": "<code>m/44'/0'/0'/0</code> generates public addresses",
37909 "<code>m/44'/0'/0'/1</code> generates change addresses": "<code>m/44'/0'/0'/1</code> generates change addresses",
37910 "<code>m/44'/0'/0'</code> generates extended keys for import / export": "<code>m/44'/0'/0'</code> generates extended keys for import / export",
37911 "<code>m/44'/0'/1'</code> for the next account. Continue incrementing for more accounts (most use a single account).": "<code>m/44'/0'/1'</code> for the next account. Continue incrementing for more accounts (most use a single account).",
37912 "Accepts binary, base 6, 6-sided dice, base 10, hexadecimal, cards": "Accepts binary, base 6, 6-sided dice, base 10, hexadecimal, cards",
37913 "Account": "Account",
37914 "Address": "Address",
37915 "Alternatively, download the file from the repository": "Alternatively, download the file from the repository",
37916 "BIP32 Derivation Path": "BIP32 Derivation Path",
37917 "BIP32 Extended Key": "BIP32 Extended Key",
37918 "BIP32 Extended Key (addresses only)": "BIP32 Extended Key (addresses only)",
37919 "BIP32 Root Key": "BIP32 Root Key",
37920 "BIP39 Mnemonic": "BIP39 Mnemonic",
37921 "BIP39 Passphrase (optional)": "BIP39 Passphrase (optional)",
37922 "BIP39 Seed": "BIP39 Seed",
37923 "Base 10": "Base 10",
37924 "Base 6": "Base 6",
37925 "Be careful - it can be easy to make mistakes if you don't know what you're doing.": "Be careful - it can be easy to make mistakes if you don't know what you're doing.",
37926 "Binary": "Binary",
37927 "Bitcoin Core": "Bitcoin Core",
37928 "Bits Per Event": "Bits Per Event",
37929 "Block Explorers": "Block Explorers",
37930 "Can be used with": "Can be used with",
37931 "Card": "Card",
37932 "Coin": "Coin",
37933 "Dice": "Dice",
37934 "Do <strong>NOT</strong> use phrases from books, lyrics from songs, your birthday or steet address, keyboard mashing, or anything you <i>think</i> is random, because chances are overwhelming it isn't random enough for the needs of this tool.": "Do <strong>NOT</strong> use phrases from books, lyrics from songs, your birthday or steet address, keyboard mashing, or anything you <i>think</i> is random, because chances are overwhelming it isn't random enough for the needs of this tool.",
37935 "Double-click that file to open it in a browser on any offline computer.": "Double-click that file to open it in a browser on any offline computer.",
37936 "Entropy": "Entropy",
37937 "Entropy Type": "Entropy Type",
37938 "Entropy is an advanced feature. Your mnemonic may be insecure if this feature is used incorrectly.": "Entropy is an advanced feature. Your mnemonic may be insecure if this feature is used incorrectly.",
37939 "Entropy values must be sourced from a <a href=\"https://en.wikipedia.org/wiki/Random_number_generation\" target=\"_blank\">strong source of randomness</a>.": "Entropy values must be sourced from a <a href=\"https://en.wikipedia.org/wiki/Random_number_generation\" target=\"_blank\">strong source of randomness</a>.",
37940 "Event Count": "Event Count",
37941 "External / Internal": "External / Internal",
37942 "Filtered Entropy": "Filtered Entropy",
37943 "For more info see the <a href=\"http://www.mycelium.com/\" target=\"_blank\">Mycelium Wallet homepage</a>": "For more info see the <a href=\"http://www.mycelium.com/\" target=\"_blank\">Mycelium Wallet homepage</a>",
37944 "For more info see the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki\" target=\"_blank\">BIP39 spec</a>.": "For more info see the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki\" target=\"_blank\">BIP39 spec</a>.",
37945 "For more info see the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki\" target=\"_blank\">BIP44 spec</a>.": "For more info see the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki\" target=\"_blank\">BIP44 spec</a>.",
37946 "For more info see the <a href=\"https://github.com/bitcoin/bitcoin/pull/8035\" target=\"_blank\">Bitcoin Core BIP32 implementation</a>": "For more info see the <a href=\"https://github.com/bitcoin/bitcoin/pull/8035\" target=\"_blank\">Bitcoin Core BIP32 implementation</a>",
37947 "For more info see the BIP32 spec": "For more info see the BIP32 spec",
37948 "From entropy length (3 words per 32 bits)": "From entropy length (3 words per 32 bits)",
37949 "Generate a random mnemonic, or enter your own below": "Generate a random mnemonic, or enter your own below",
37950 "Get the source code from the repository": "Get the source code from the repository",
37951 "Hex": "Hex",
37952 "Hierarchical Deterministic Wallets": "Hierarchical Deterministic Wallets",
37953 "If cryptographic randomness isn't available in your browser, this page will show a warning and the generate button will not work.": "If cryptographic randomness isn't available in your browser, this page will show a warning and the generate button will not work.",
37954 "In that case you might choose to use your own source of entropy.": "In that case you might choose to use your own source of entropy.",
37955 "In your browser, select file save-as, and save this page as a file.": "In your browser, select file save-as, and save this page as a file.",
37956 "Libraries": "Libraries",
37957 "Mnemonic Language": "Mnemonic Language",
37958 "Mnemonic Length": "Mnemonic Length",
37959 "Mnemonic code for generating deterministic keys": "Mnemonic code for generating deterministic keys",
37960 "More info": "More info",
37961 "Multi-Account Hierarchy for Deterministic Wallets": "Multi-Account Hierarchy for Deterministic Wallets",
37962 "Mycelium Wallet": "Mycelium Wallet",
37963 "Note these addreses are derived from the BIP32 Extended Key": "Note these addreses are derived from the BIP32 Extended Key",
37964 "Offline Usage": "Offline Usage",
37965 "Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xprv</code> key.": "Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xprv</code> key.",
37966 "Path": "Path",
37967 "Private Key": "Private Key",
37968 "Private Keys": "Private Keys",
37969 "Public Key": "Public Key",
37970 "Purpose": "Purpose",
37971 "Raw Binary": "Raw Binary",
37972 "Read more": "Read more",
37973 "Read more at the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki\" target=\"_blank\">official BIP32 spec</a>": "Read more at the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki\" target=\"_blank\">official BIP32 spec</a>",
37974 "Read more at the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki\">official BIP39 spec</a>": "Read more at the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki\">official BIP39 spec</a>",
37975 "Read more at the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki\" target=\"_blank\">official BIP44 spec</a>": "Read more at the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki\" target=\"_blank\">official BIP44 spec</a>",
37976 "See the demo at <a href=\"http://bip32.org/\" target=\"_blank\">bip32.org</a>": "See the demo at <a href=\"http://bip32.org/\" target=\"_blank\">bip32.org</a>",
37977 "Show": "Show",
37978 "Show more rows": "Show more rows",
37979 "Strength": "Strength",
37980 "Supply my own source of entropy": "Supply my own source of entropy",
37981 "The built in random generator can generally be trusted more than your own intuition about randomness.": "The built in random generator can generally be trusted more than your own intuition about randomness.",
37982 "The random mnemonic generator on this page uses a <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues\" target=\"_blank\">cryptographically secure random number generator</a>.": "The random mnemonic generator on this page uses a <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues\" target=\"_blank\">cryptographically secure random number generator</a>.",
37983 "This means flipping a fair coin, rolling a fair dice, noise measurements etc.": "This means flipping a fair coin, rolling a fair dice, noise measurements etc.",
37984 "This project is 100% open-source code": "This project is 100% open-source code",
37985 "Toggle": "Toggle",
37986 "Total Bits": "Total Bits",
37987 "Use hardened addresses": "Use hardened addresses",
37988 "Use path <code>m/0'/0'</code> with hardened addresses.": "Use path <code>m/0'/0'</code> with hardened addresses.",
37989 "Use path <code>m/44'/0'/0'</code>.": "Use path <code>m/44'/0'/0'</code>.",
37990 "Use private keys at <a href=\"https://web.archive.org/web/20150707020924/https://brainwallet.org/\" target=\"_blank\">brainwallet.org</a>.": "Use private keys at <a href=\"https://web.archive.org/web/20150707020924/https://brainwallet.org/\" target=\"_blank\">brainwallet.org</a>.",
37991 "Valid entropy values include:": "Valid entropy values include:",
37992 "Warning": "Warning",
37993 "Word Count": "Word Count",
37994 "You are not a good source of entropy.": "You are not a good source of entropy.",
37995 "You can enter an existing BIP39 mnemonic, or generate a new random one. Typing your own twelve words will probably not work how you expect, since the words require a particular structure (the last word is a checksum).": "You can enter an existing BIP39 mnemonic, or generate a new random one. Typing your own twelve words will probably not work how you expect, since the words require a particular structure (the last word is a checksum).",
37996 "You can use this tool without having to be online.": "You can use this tool without having to be online.",
37997 "words": "words"
37998}
37999);
dc55c6b0 38000</script>
ab78acc6 38001 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
3af2954a 38002WORDLISTS["english"] = [
ebd8d4e8
IC
38003"abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
38004"access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
38005"action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
38006"adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
38007"agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
38008"alien","all","alley","allow","almost","alone","alpha","already","also","alter",
38009"always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
38010"angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
38011"anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
38012"area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
38013"arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
38014"assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
38015"audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
38016"aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
38017"bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
38018"barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
38019"beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
38020"best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
38021"bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
38022"blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
38023"boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
38024"bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
38025"breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
38026"broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
38027"bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
38028"butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
38029"calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
38030"canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
38031"cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
38032"cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
38033"cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
38034"chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
38035"chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
38036"citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
38037"clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
38038"cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
38039"code","coffee","coil","coin","collect","color","column","combine","come","comfort",
38040"comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
38041"convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
38042"cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
38043"craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
38044"crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
38045"cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
38046"cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
38047"damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
38048"debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
38049"define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
38050"depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
38051"despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
38052"diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
38053"direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
38054"divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
38055"donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
38056"drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
38057"drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
38058"dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
38059"ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
38060"elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
38061"embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
38062"endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
38063"enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
38064"era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
38065"eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
38066"excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
38067"exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
38068"eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
38069"family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
38070"fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
38071"fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
38072"film","filter","final","find","fine","finger","finish","fire","firm","first",
38073"fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
38074"flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
38075"foam","focus","fog","foil","fold","follow","food","foot","force","forest",
38076"forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
38077"frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
38078"fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
38079"gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
38080"gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
38081"ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
38082"glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
38083"goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
38084"grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
38085"grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
38086"guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
38087"harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
38088"heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
38089"high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
38090"holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
38091"host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
38092"hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
38093"identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
38094"impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
38095"indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
38096"inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
38097"intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
38098"item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
38099"job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
38100"junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
38101"kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
38102"knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
38103"laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
38104"layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
38105"legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
38106"liar","liberty","library","license","life","lift","light","like","limb","limit",
38107"link","lion","liquid","list","little","live","lizard","load","loan","lobster",
38108"local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
38109"loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
38110"magic","magnet","maid","mail","main","major","make","mammal","man","manage",
38111"mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
38112"marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
38113"maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
38114"member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
38115"metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
38116"minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
38117"model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
38118"more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
38119"much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
38120"myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
38121"near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
38122"network","neutral","never","news","next","nice","night","noble","noise","nominee",
38123"noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
38124"nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
38125"obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
38126"oil","okay","old","olive","olympic","omit","once","one","onion","online",
38127"only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
38128"ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
38129"outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
38130"paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
38131"parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
38132"pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
38133"penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
38134"phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
38135"pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
38136"play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
38137"pole","police","pond","pony","pool","popular","portion","position","possible","post",
38138"potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
38139"present","pretty","prevent","price","pride","primary","print","priority","prison","private",
38140"prize","problem","process","produce","profit","program","project","promote","proof","property",
38141"prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
38142"punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
38143"pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
38144"raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
38145"ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
38146"ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
38147"reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
38148"relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
38149"repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
38150"result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
38151"ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
38152"ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
38153"romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
38154"rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
38155"safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
38156"satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
38157"scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
38158"scrub","sea","search","season","seat","second","secret","section","security","seed",
38159"seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
38160"session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
38161"sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
38162"short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
38163"siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
38164"sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
38165"skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
38166"slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
38167"snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
38168"soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
38169"sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
38170"speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
38171"spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
38172"spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
38173"stand","start","state","stay","steak","steel","stem","step","stereo","stick",
38174"still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
38175"strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
38176"success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
38177"sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
38178"suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
38179"swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
38180"tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
38181"teach","team","tell","ten","tenant","tennis","tent","term","test","text",
38182"thank","that","theme","then","theory","there","they","thing","this","thought",
38183"three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
38184"time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
38185"toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
38186"tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
38187"toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
38188"trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
38189"trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
38190"truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
38191"twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
38192"unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
38193"unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
38194"uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
38195"useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
38196"vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
38197"verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
38198"video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
38199"vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
38200"wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
38201"wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
38202"web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
38203"wheel","when","where","whip","whisper","wide","width","wife","wild","will",
38204"win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
38205"wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
38206"worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
38207"yellow","you","young","youth","zebra","zero","zone","zoo"]
0515eeec
IC
38208</script>
38209 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
38210WORDLISTS["japanese"] = [
38211"あいこくしん", "あいさつ", "あいだ", "あおぞら", "あかちゃん", "あきる", "あけがた", "あける", "あこがれる", "あさい",
38212"あさひ", "あしあと", "あじわう", "あずかる", "あずき", "あそぶ", "あたえる", "あたためる", "あたりまえ", "あたる",
38213"あつい", "あつかう", "あっしゅく", "あつまり", "あつめる", "あてな", "あてはまる", "あひる", "あぶら", "あぶる",
38214"あふれる", "あまい", "あまど", "あまやかす", "あまり", "あみもの", "あめりか", "あやまる", "あゆむ", "あらいぐま",
38215"あらし", "あらすじ", "あらためる", "あらゆる", "あらわす", "ありがとう", "あわせる", "あわてる", "あんい", "あんがい",
38216"あんこ", "あんぜん", "あんてい", "あんない", "あんまり", "いいだす", "いおん", "いがい", "いがく", "いきおい",
38217"いきなり", "いきもの", "いきる", "いくじ", "いくぶん", "いけばな", "いけん", "いこう", "いこく", "いこつ",
38218"いさましい", "いさん", "いしき", "いじゅう", "いじょう", "いじわる", "いずみ", "いずれ", "いせい", "いせえび",
38219"いせかい", "いせき", "いぜん", "いそうろう", "いそがしい", "いだい", "いだく", "いたずら", "いたみ", "いたりあ",
38220"いちおう", "いちじ", "いちど", "いちば", "いちぶ", "いちりゅう", "いつか", "いっしゅん", "いっせい", "いっそう",
38221"いったん", "いっち", "いってい", "いっぽう", "いてざ", "いてん", "いどう", "いとこ", "いない", "いなか",
38222"いねむり", "いのち", "いのる", "いはつ", "いばる", "いはん", "いびき", "いひん", "いふく", "いへん",
38223"いほう", "いみん", "いもうと", "いもたれ", "いもり", "いやがる", "いやす", "いよかん", "いよく", "いらい",
38224"いらすと", "いりぐち", "いりょう", "いれい", "いれもの", "いれる", "いろえんぴつ", "いわい", "いわう", "いわかん",
38225"いわば", "いわゆる", "いんげんまめ", "いんさつ", "いんしょう", "いんよう", "うえき", "うえる", "うおざ", "うがい",
38226"うかぶ", "うかべる", "うきわ", "うくらいな", "うくれれ", "うけたまわる", "うけつけ", "うけとる", "うけもつ", "うける",
38227"うごかす", "うごく", "うこん", "うさぎ", "うしなう", "うしろがみ", "うすい", "うすぎ", "うすぐらい", "うすめる",
38228"うせつ", "うちあわせ", "うちがわ", "うちき", "うちゅう", "うっかり", "うつくしい", "うったえる", "うつる", "うどん",
38229"うなぎ", "うなじ", "うなずく", "うなる", "うねる", "うのう", "うぶげ", "うぶごえ", "うまれる", "うめる",
38230"うもう", "うやまう", "うよく", "うらがえす", "うらぐち", "うらない", "うりあげ", "うりきれ", "うるさい", "うれしい",
38231"うれゆき", "うれる", "うろこ", "うわき", "うわさ", "うんこう", "うんちん", "うんてん", "うんどう", "えいえん",
38232"えいが", "えいきょう", "えいご", "えいせい", "えいぶん", "えいよう", "えいわ", "えおり", "えがお", "えがく",
38233"えきたい", "えくせる", "えしゃく", "えすて", "えつらん", "えのぐ", "えほうまき", "えほん", "えまき", "えもじ",
38234"えもの", "えらい", "えらぶ", "えりあ", "えんえん", "えんかい", "えんぎ", "えんげき", "えんしゅう", "えんぜつ",
38235"えんそく", "えんちょう", "えんとつ", "おいかける", "おいこす", "おいしい", "おいつく", "おうえん", "おうさま", "おうじ",
38236"おうせつ", "おうたい", "おうふく", "おうべい", "おうよう", "おえる", "おおい", "おおう", "おおどおり", "おおや",
38237"おおよそ", "おかえり", "おかず", "おがむ", "おかわり", "おぎなう", "おきる", "おくさま", "おくじょう", "おくりがな",
38238"おくる", "おくれる", "おこす", "おこなう", "おこる", "おさえる", "おさない", "おさめる", "おしいれ", "おしえる",
38239"おじぎ", "おじさん", "おしゃれ", "おそらく", "おそわる", "おたがい", "おたく", "おだやか", "おちつく", "おっと",
38240"おつり", "おでかけ", "おとしもの", "おとなしい", "おどり", "おどろかす", "おばさん", "おまいり", "おめでとう", "おもいで",
38241"おもう", "おもたい", "おもちゃ", "おやつ", "おやゆび", "およぼす", "おらんだ", "おろす", "おんがく", "おんけい",
38242"おんしゃ", "おんせん", "おんだん", "おんちゅう", "おんどけい", "かあつ", "かいが", "がいき", "がいけん", "がいこう",
38243"かいさつ", "かいしゃ", "かいすいよく", "かいぜん", "かいぞうど", "かいつう", "かいてん", "かいとう", "かいふく", "がいへき",
38244"かいほう", "かいよう", "がいらい", "かいわ", "かえる", "かおり", "かかえる", "かがく", "かがし", "かがみ",
38245"かくご", "かくとく", "かざる", "がぞう", "かたい", "かたち", "がちょう", "がっきゅう", "がっこう", "がっさん",
38246"がっしょう", "かなざわし", "かのう", "がはく", "かぶか", "かほう", "かほご", "かまう", "かまぼこ", "かめれおん",
38247"かゆい", "かようび", "からい", "かるい", "かろう", "かわく", "かわら", "がんか", "かんけい", "かんこう",
38248"かんしゃ", "かんそう", "かんたん", "かんち", "がんばる", "きあい", "きあつ", "きいろ", "ぎいん", "きうい",
38249"きうん", "きえる", "きおう", "きおく", "きおち", "きおん", "きかい", "きかく", "きかんしゃ", "ききて",
38250"きくばり", "きくらげ", "きけんせい", "きこう", "きこえる", "きこく", "きさい", "きさく", "きさま", "きさらぎ",
38251"ぎじかがく", "ぎしき", "ぎじたいけん", "ぎじにってい", "ぎじゅつしゃ", "きすう", "きせい", "きせき", "きせつ", "きそう",
38252"きぞく", "きぞん", "きたえる", "きちょう", "きつえん", "ぎっちり", "きつつき", "きつね", "きてい", "きどう",
38253"きどく", "きない", "きなが", "きなこ", "きぬごし", "きねん", "きのう", "きのした", "きはく", "きびしい",
38254"きひん", "きふく", "きぶん", "きぼう", "きほん", "きまる", "きみつ", "きむずかしい", "きめる", "きもだめし",
38255"きもち", "きもの", "きゃく", "きやく", "ぎゅうにく", "きよう", "きょうりゅう", "きらい", "きらく", "きりん",
38256"きれい", "きれつ", "きろく", "ぎろん", "きわめる", "ぎんいろ", "きんかくじ", "きんじょ", "きんようび", "ぐあい",
38257"くいず", "くうかん", "くうき", "くうぐん", "くうこう", "ぐうせい", "くうそう", "ぐうたら", "くうふく", "くうぼ",
38258"くかん", "くきょう", "くげん", "ぐこう", "くさい", "くさき", "くさばな", "くさる", "くしゃみ", "くしょう",
38259"くすのき", "くすりゆび", "くせげ", "くせん", "ぐたいてき", "くださる", "くたびれる", "くちこみ", "くちさき", "くつした",
38260"ぐっすり", "くつろぐ", "くとうてん", "くどく", "くなん", "くねくね", "くのう", "くふう", "くみあわせ", "くみたてる",
38261"くめる", "くやくしょ", "くらす", "くらべる", "くるま", "くれる", "くろう", "くわしい", "ぐんかん", "ぐんしょく",
38262"ぐんたい", "ぐんて", "けあな", "けいかく", "けいけん", "けいこ", "けいさつ", "げいじゅつ", "けいたい", "げいのうじん",
38263"けいれき", "けいろ", "けおとす", "けおりもの", "げきか", "げきげん", "げきだん", "げきちん", "げきとつ", "げきは",
38264"げきやく", "げこう", "げこくじょう", "げざい", "けさき", "げざん", "けしき", "けしごむ", "けしょう", "げすと",
38265"けたば", "けちゃっぷ", "けちらす", "けつあつ", "けつい", "けつえき", "けっこん", "けつじょ", "けっせき", "けってい",
38266"けつまつ", "げつようび", "げつれい", "けつろん", "げどく", "けとばす", "けとる", "けなげ", "けなす", "けなみ",
38267"けぬき", "げねつ", "けねん", "けはい", "げひん", "けぶかい", "げぼく", "けまり", "けみかる", "けむし",
38268"けむり", "けもの", "けらい", "けろけろ", "けわしい", "けんい", "けんえつ", "けんお", "けんか", "げんき",
38269"けんげん", "けんこう", "けんさく", "けんしゅう", "けんすう", "げんそう", "けんちく", "けんてい", "けんとう", "けんない",
38270"けんにん", "げんぶつ", "けんま", "けんみん", "けんめい", "けんらん", "けんり", "こあくま", "こいぬ", "こいびと",
38271"ごうい", "こうえん", "こうおん", "こうかん", "ごうきゅう", "ごうけい", "こうこう", "こうさい", "こうじ", "こうすい",
38272"ごうせい", "こうそく", "こうたい", "こうちゃ", "こうつう", "こうてい", "こうどう", "こうない", "こうはい", "ごうほう",
38273"ごうまん", "こうもく", "こうりつ", "こえる", "こおり", "ごかい", "ごがつ", "ごかん", "こくご", "こくさい",
38274"こくとう", "こくない", "こくはく", "こぐま", "こけい", "こける", "ここのか", "こころ", "こさめ", "こしつ",
38275"こすう", "こせい", "こせき", "こぜん", "こそだて", "こたい", "こたえる", "こたつ", "こちょう", "こっか",
38276"こつこつ", "こつばん", "こつぶ", "こてい", "こてん", "ことがら", "ことし", "ことば", "ことり", "こなごな",
38277"こねこね", "このまま", "このみ", "このよ", "ごはん", "こひつじ", "こふう", "こふん", "こぼれる", "ごまあぶら",
38278"こまかい", "ごますり", "こまつな", "こまる", "こむぎこ", "こもじ", "こもち", "こもの", "こもん", "こやく",
38279"こやま", "こゆう", "こゆび", "こよい", "こよう", "こりる", "これくしょん", "ころっけ", "こわもて", "こわれる",
38280"こんいん", "こんかい", "こんき", "こんしゅう", "こんすい", "こんだて", "こんとん", "こんなん", "こんびに", "こんぽん",
38281"こんまけ", "こんや", "こんれい", "こんわく", "ざいえき", "さいかい", "さいきん", "ざいげん", "ざいこ", "さいしょ",
38282"さいせい", "ざいたく", "ざいちゅう", "さいてき", "ざいりょう", "さうな", "さかいし", "さがす", "さかな", "さかみち",
38283"さがる", "さぎょう", "さくし", "さくひん", "さくら", "さこく", "さこつ", "さずかる", "ざせき", "さたん",
38284"さつえい", "ざつおん", "ざっか", "ざつがく", "さっきょく", "ざっし", "さつじん", "ざっそう", "さつたば", "さつまいも",
38285"さてい", "さといも", "さとう", "さとおや", "さとし", "さとる", "さのう", "さばく", "さびしい", "さべつ",
38286"さほう", "さほど", "さます", "さみしい", "さみだれ", "さむけ", "さめる", "さやえんどう", "さゆう", "さよう",
38287"さよく", "さらだ", "ざるそば", "さわやか", "さわる", "さんいん", "さんか", "さんきゃく", "さんこう", "さんさい",
38288"ざんしょ", "さんすう", "さんせい", "さんそ", "さんち", "さんま", "さんみ", "さんらん", "しあい", "しあげ",
38289"しあさって", "しあわせ", "しいく", "しいん", "しうち", "しえい", "しおけ", "しかい", "しかく", "じかん",
38290"しごと", "しすう", "じだい", "したうけ", "したぎ", "したて", "したみ", "しちょう", "しちりん", "しっかり",
38291"しつじ", "しつもん", "してい", "してき", "してつ", "じてん", "じどう", "しなぎれ", "しなもの", "しなん",
38292"しねま", "しねん", "しのぐ", "しのぶ", "しはい", "しばかり", "しはつ", "しはらい", "しはん", "しひょう",
38293"しふく", "じぶん", "しへい", "しほう", "しほん", "しまう", "しまる", "しみん", "しむける", "じむしょ",
38294"しめい", "しめる", "しもん", "しゃいん", "しゃうん", "しゃおん", "じゃがいも", "しやくしょ", "しゃくほう", "しゃけん",
38295"しゃこ", "しゃざい", "しゃしん", "しゃせん", "しゃそう", "しゃたい", "しゃちょう", "しゃっきん", "じゃま", "しゃりん",
38296"しゃれい", "じゆう", "じゅうしょ", "しゅくはく", "じゅしん", "しゅっせき", "しゅみ", "しゅらば", "じゅんばん", "しょうかい",
38297"しょくたく", "しょっけん", "しょどう", "しょもつ", "しらせる", "しらべる", "しんか", "しんこう", "じんじゃ", "しんせいじ",
38298"しんちく", "しんりん", "すあげ", "すあし", "すあな", "ずあん", "すいえい", "すいか", "すいとう", "ずいぶん",
38299"すいようび", "すうがく", "すうじつ", "すうせん", "すおどり", "すきま", "すくう", "すくない", "すける", "すごい",
38300"すこし", "ずさん", "すずしい", "すすむ", "すすめる", "すっかり", "ずっしり", "ずっと", "すてき", "すてる",
38301"すねる", "すのこ", "すはだ", "すばらしい", "ずひょう", "ずぶぬれ", "すぶり", "すふれ", "すべて", "すべる",
38302"ずほう", "すぼん", "すまい", "すめし", "すもう", "すやき", "すらすら", "するめ", "すれちがう", "すろっと",
38303"すわる", "すんぜん", "すんぽう", "せあぶら", "せいかつ", "せいげん", "せいじ", "せいよう", "せおう", "せかいかん",
38304"せきにん", "せきむ", "せきゆ", "せきらんうん", "せけん", "せこう", "せすじ", "せたい", "せたけ", "せっかく",
38305"せっきゃく", "ぜっく", "せっけん", "せっこつ", "せっさたくま", "せつぞく", "せつだん", "せつでん", "せっぱん", "せつび",
38306"せつぶん", "せつめい", "せつりつ", "せなか", "せのび", "せはば", "せびろ", "せぼね", "せまい", "せまる",
38307"せめる", "せもたれ", "せりふ", "ぜんあく", "せんい", "せんえい", "せんか", "せんきょ", "せんく", "せんげん",
38308"ぜんご", "せんさい", "せんしゅ", "せんすい", "せんせい", "せんぞ", "せんたく", "せんちょう", "せんてい", "せんとう",
38309"せんぬき", "せんねん", "せんぱい", "ぜんぶ", "ぜんぽう", "せんむ", "せんめんじょ", "せんもん", "せんやく", "せんゆう",
38310"せんよう", "ぜんら", "ぜんりゃく", "せんれい", "せんろ", "そあく", "そいとげる", "そいね", "そうがんきょう", "そうき",
38311"そうご", "そうしん", "そうだん", "そうなん", "そうび", "そうめん", "そうり", "そえもの", "そえん", "そがい",
38312"そげき", "そこう", "そこそこ", "そざい", "そしな", "そせい", "そせん", "そそぐ", "そだてる", "そつう",
38313"そつえん", "そっかん", "そつぎょう", "そっけつ", "そっこう", "そっせん", "そっと", "そとがわ", "そとづら", "そなえる",
38314"そなた", "そふぼ", "そぼく", "そぼろ", "そまつ", "そまる", "そむく", "そむりえ", "そめる", "そもそも",
38315"そよかぜ", "そらまめ", "そろう", "そんかい", "そんけい", "そんざい", "そんしつ", "そんぞく", "そんちょう", "ぞんび",
38316"ぞんぶん", "そんみん", "たあい", "たいいん", "たいうん", "たいえき", "たいおう", "だいがく", "たいき", "たいぐう",
38317"たいけん", "たいこ", "たいざい", "だいじょうぶ", "だいすき", "たいせつ", "たいそう", "だいたい", "たいちょう", "たいてい",
38318"だいどころ", "たいない", "たいねつ", "たいのう", "たいはん", "だいひょう", "たいふう", "たいへん", "たいほ", "たいまつばな",
38319"たいみんぐ", "たいむ", "たいめん", "たいやき", "たいよう", "たいら", "たいりょく", "たいる", "たいわん", "たうえ",
38320"たえる", "たおす", "たおる", "たおれる", "たかい", "たかね", "たきび", "たくさん", "たこく", "たこやき",
38321"たさい", "たしざん", "だじゃれ", "たすける", "たずさわる", "たそがれ", "たたかう", "たたく", "ただしい", "たたみ",
38322"たちばな", "だっかい", "だっきゃく", "だっこ", "だっしゅつ", "だったい", "たてる", "たとえる", "たなばた", "たにん",
38323"たぬき", "たのしみ", "たはつ", "たぶん", "たべる", "たぼう", "たまご", "たまる", "だむる", "ためいき",
38324"ためす", "ためる", "たもつ", "たやすい", "たよる", "たらす", "たりきほんがん", "たりょう", "たりる", "たると",
38325"たれる", "たれんと", "たろっと", "たわむれる", "だんあつ", "たんい", "たんおん", "たんか", "たんき", "たんけん",
38326"たんご", "たんさん", "たんじょうび", "だんせい", "たんそく", "たんたい", "だんち", "たんてい", "たんとう", "だんな",
38327"たんにん", "だんねつ", "たんのう", "たんぴん", "だんぼう", "たんまつ", "たんめい", "だんれつ", "だんろ", "だんわ",
38328"ちあい", "ちあん", "ちいき", "ちいさい", "ちえん", "ちかい", "ちから", "ちきゅう", "ちきん", "ちけいず",
38329"ちけん", "ちこく", "ちさい", "ちしき", "ちしりょう", "ちせい", "ちそう", "ちたい", "ちたん", "ちちおや",
38330"ちつじょ", "ちてき", "ちてん", "ちぬき", "ちぬり", "ちのう", "ちひょう", "ちへいせん", "ちほう", "ちまた",
38331"ちみつ", "ちみどろ", "ちめいど", "ちゃんこなべ", "ちゅうい", "ちゆりょく", "ちょうし", "ちょさくけん", "ちらし", "ちらみ",
38332"ちりがみ", "ちりょう", "ちるど", "ちわわ", "ちんたい", "ちんもく", "ついか", "ついたち", "つうか", "つうじょう",
38333"つうはん", "つうわ", "つかう", "つかれる", "つくね", "つくる", "つけね", "つける", "つごう", "つたえる",
38334"つづく", "つつじ", "つつむ", "つとめる", "つながる", "つなみ", "つねづね", "つのる", "つぶす", "つまらない",
38335"つまる", "つみき", "つめたい", "つもり", "つもる", "つよい", "つるぼ", "つるみく", "つわもの", "つわり",
38336"てあし", "てあて", "てあみ", "ていおん", "ていか", "ていき", "ていけい", "ていこく", "ていさつ", "ていし",
38337"ていせい", "ていたい", "ていど", "ていねい", "ていひょう", "ていへん", "ていぼう", "てうち", "ておくれ", "てきとう",
38338"てくび", "でこぼこ", "てさぎょう", "てさげ", "てすり", "てそう", "てちがい", "てちょう", "てつがく", "てつづき",
38339"でっぱ", "てつぼう", "てつや", "でぬかえ", "てぬき", "てぬぐい", "てのひら", "てはい", "てぶくろ", "てふだ",
38340"てほどき", "てほん", "てまえ", "てまきずし", "てみじか", "てみやげ", "てらす", "てれび", "てわけ", "てわたし",
38341"でんあつ", "てんいん", "てんかい", "てんき", "てんぐ", "てんけん", "てんごく", "てんさい", "てんし", "てんすう",
38342"でんち", "てんてき", "てんとう", "てんない", "てんぷら", "てんぼうだい", "てんめつ", "てんらんかい", "でんりょく", "でんわ",
38343"どあい", "といれ", "どうかん", "とうきゅう", "どうぐ", "とうし", "とうむぎ", "とおい", "とおか", "とおく",
38344"とおす", "とおる", "とかい", "とかす", "ときおり", "ときどき", "とくい", "とくしゅう", "とくてん", "とくに",
38345"とくべつ", "とけい", "とける", "とこや", "とさか", "としょかん", "とそう", "とたん", "とちゅう", "とっきゅう",
38346"とっくん", "とつぜん", "とつにゅう", "とどける", "ととのえる", "とない", "となえる", "となり", "とのさま", "とばす",
38347"どぶがわ", "とほう", "とまる", "とめる", "ともだち", "ともる", "どようび", "とらえる", "とんかつ", "どんぶり",
38348"ないかく", "ないこう", "ないしょ", "ないす", "ないせん", "ないそう", "なおす", "ながい", "なくす", "なげる",
38349"なこうど", "なさけ", "なたでここ", "なっとう", "なつやすみ", "ななおし", "なにごと", "なにもの", "なにわ", "なのか",
38350"なふだ", "なまいき", "なまえ", "なまみ", "なみだ", "なめらか", "なめる", "なやむ", "ならう", "ならび",
38351"ならぶ", "なれる", "なわとび", "なわばり", "にあう", "にいがた", "にうけ", "におい", "にかい", "にがて",
38352"にきび", "にくしみ", "にくまん", "にげる", "にさんかたんそ", "にしき", "にせもの", "にちじょう", "にちようび", "にっか",
38353"にっき", "にっけい", "にっこう", "にっさん", "にっしょく", "にっすう", "にっせき", "にってい", "になう", "にほん",
38354"にまめ", "にもつ", "にやり", "にゅういん", "にりんしゃ", "にわとり", "にんい", "にんか", "にんき", "にんげん",
38355"にんしき", "にんずう", "にんそう", "にんたい", "にんち", "にんてい", "にんにく", "にんぷ", "にんまり", "にんむ",
38356"にんめい", "にんよう", "ぬいくぎ", "ぬかす", "ぬぐいとる", "ぬぐう", "ぬくもり", "ぬすむ", "ぬまえび", "ぬめり",
38357"ぬらす", "ぬんちゃく", "ねあげ", "ねいき", "ねいる", "ねいろ", "ねぐせ", "ねくたい", "ねくら", "ねこぜ",
38358"ねこむ", "ねさげ", "ねすごす", "ねそべる", "ねだん", "ねつい", "ねっしん", "ねつぞう", "ねったいぎょ", "ねぶそく",
38359"ねふだ", "ねぼう", "ねほりはほり", "ねまき", "ねまわし", "ねみみ", "ねむい", "ねむたい", "ねもと", "ねらう",
38360"ねわざ", "ねんいり", "ねんおし", "ねんかん", "ねんきん", "ねんぐ", "ねんざ", "ねんし", "ねんちゃく", "ねんど",
38361"ねんぴ", "ねんぶつ", "ねんまつ", "ねんりょう", "ねんれい", "のいず", "のおづま", "のがす", "のきなみ", "のこぎり",
38362"のこす", "のこる", "のせる", "のぞく", "のぞむ", "のたまう", "のちほど", "のっく", "のばす", "のはら",
38363"のべる", "のぼる", "のみもの", "のやま", "のらいぬ", "のらねこ", "のりもの", "のりゆき", "のれん", "のんき",
38364"ばあい", "はあく", "ばあさん", "ばいか", "ばいく", "はいけん", "はいご", "はいしん", "はいすい", "はいせん",
38365"はいそう", "はいち", "ばいばい", "はいれつ", "はえる", "はおる", "はかい", "ばかり", "はかる", "はくしゅ",
38366"はけん", "はこぶ", "はさみ", "はさん", "はしご", "ばしょ", "はしる", "はせる", "ぱそこん", "はそん",
38367"はたん", "はちみつ", "はつおん", "はっかく", "はづき", "はっきり", "はっくつ", "はっけん", "はっこう", "はっさん",
38368"はっしん", "はったつ", "はっちゅう", "はってん", "はっぴょう", "はっぽう", "はなす", "はなび", "はにかむ", "はぶらし",
38369"はみがき", "はむかう", "はめつ", "はやい", "はやし", "はらう", "はろうぃん", "はわい", "はんい", "はんえい",
38370"はんおん", "はんかく", "はんきょう", "ばんぐみ", "はんこ", "はんしゃ", "はんすう", "はんだん", "ぱんち", "ぱんつ",
38371"はんてい", "はんとし", "はんのう", "はんぱ", "はんぶん", "はんぺん", "はんぼうき", "はんめい", "はんらん", "はんろん",
38372"ひいき", "ひうん", "ひえる", "ひかく", "ひかり", "ひかる", "ひかん", "ひくい", "ひけつ", "ひこうき",
38373"ひこく", "ひさい", "ひさしぶり", "ひさん", "びじゅつかん", "ひしょ", "ひそか", "ひそむ", "ひたむき", "ひだり",
38374"ひたる", "ひつぎ", "ひっこし", "ひっし", "ひつじゅひん", "ひっす", "ひつぜん", "ぴったり", "ぴっちり", "ひつよう",
38375"ひてい", "ひとごみ", "ひなまつり", "ひなん", "ひねる", "ひはん", "ひびく", "ひひょう", "ひほう", "ひまわり",
38376"ひまん", "ひみつ", "ひめい", "ひめじし", "ひやけ", "ひやす", "ひよう", "びょうき", "ひらがな", "ひらく",
38377"ひりつ", "ひりょう", "ひるま", "ひるやすみ", "ひれい", "ひろい", "ひろう", "ひろき", "ひろゆき", "ひんかく",
38378"ひんけつ", "ひんこん", "ひんしゅ", "ひんそう", "ぴんち", "ひんぱん", "びんぼう", "ふあん", "ふいうち", "ふうけい",
38379"ふうせん", "ぷうたろう", "ふうとう", "ふうふ", "ふえる", "ふおん", "ふかい", "ふきん", "ふくざつ", "ふくぶくろ",
38380"ふこう", "ふさい", "ふしぎ", "ふじみ", "ふすま", "ふせい", "ふせぐ", "ふそく", "ぶたにく", "ふたん",
38381"ふちょう", "ふつう", "ふつか", "ふっかつ", "ふっき", "ふっこく", "ぶどう", "ふとる", "ふとん", "ふのう",
38382"ふはい", "ふひょう", "ふへん", "ふまん", "ふみん", "ふめつ", "ふめん", "ふよう", "ふりこ", "ふりる",
38383"ふるい", "ふんいき", "ぶんがく", "ぶんぐ", "ふんしつ", "ぶんせき", "ふんそう", "ぶんぽう", "へいあん", "へいおん",
38384"へいがい", "へいき", "へいげん", "へいこう", "へいさ", "へいしゃ", "へいせつ", "へいそ", "へいたく", "へいてん",
38385"へいねつ", "へいわ", "へきが", "へこむ", "べにいろ", "べにしょうが", "へらす", "へんかん", "べんきょう", "べんごし",
38386"へんさい", "へんたい", "べんり", "ほあん", "ほいく", "ぼうぎょ", "ほうこく", "ほうそう", "ほうほう", "ほうもん",
38387"ほうりつ", "ほえる", "ほおん", "ほかん", "ほきょう", "ぼきん", "ほくろ", "ほけつ", "ほけん", "ほこう",
38388"ほこる", "ほしい", "ほしつ", "ほしゅ", "ほしょう", "ほせい", "ほそい", "ほそく", "ほたて", "ほたる",
38389"ぽちぶくろ", "ほっきょく", "ほっさ", "ほったん", "ほとんど", "ほめる", "ほんい", "ほんき", "ほんけ", "ほんしつ",
38390"ほんやく", "まいにち", "まかい", "まかせる", "まがる", "まける", "まこと", "まさつ", "まじめ", "ますく",
38391"まぜる", "まつり", "まとめ", "まなぶ", "まぬけ", "まねく", "まほう", "まもる", "まゆげ", "まよう",
38392"まろやか", "まわす", "まわり", "まわる", "まんが", "まんきつ", "まんぞく", "まんなか", "みいら", "みうち",
38393"みえる", "みがく", "みかた", "みかん", "みけん", "みこん", "みじかい", "みすい", "みすえる", "みせる",
38394"みっか", "みつかる", "みつける", "みてい", "みとめる", "みなと", "みなみかさい", "みねらる", "みのう", "みのがす",
38395"みほん", "みもと", "みやげ", "みらい", "みりょく", "みわく", "みんか", "みんぞく", "むいか", "むえき",
38396"むえん", "むかい", "むかう", "むかえ", "むかし", "むぎちゃ", "むける", "むげん", "むさぼる", "むしあつい",
38397"むしば", "むじゅん", "むしろ", "むすう", "むすこ", "むすぶ", "むすめ", "むせる", "むせん", "むちゅう",
38398"むなしい", "むのう", "むやみ", "むよう", "むらさき", "むりょう", "むろん", "めいあん", "めいうん", "めいえん",
38399"めいかく", "めいきょく", "めいさい", "めいし", "めいそう", "めいぶつ", "めいれい", "めいわく", "めぐまれる", "めざす",
38400"めした", "めずらしい", "めだつ", "めまい", "めやす", "めんきょ", "めんせき", "めんどう", "もうしあげる", "もうどうけん",
38401"もえる", "もくし", "もくてき", "もくようび", "もちろん", "もどる", "もらう", "もんく", "もんだい", "やおや",
38402"やける", "やさい", "やさしい", "やすい", "やすたろう", "やすみ", "やせる", "やそう", "やたい", "やちん",
38403"やっと", "やっぱり", "やぶる", "やめる", "ややこしい", "やよい", "やわらかい", "ゆうき", "ゆうびんきょく", "ゆうべ",
38404"ゆうめい", "ゆけつ", "ゆしゅつ", "ゆせん", "ゆそう", "ゆたか", "ゆちゃく", "ゆでる", "ゆにゅう", "ゆびわ",
38405"ゆらい", "ゆれる", "ようい", "ようか", "ようきゅう", "ようじ", "ようす", "ようちえん", "よかぜ", "よかん",
38406"よきん", "よくせい", "よくぼう", "よけい", "よごれる", "よさん", "よしゅう", "よそう", "よそく", "よっか",
38407"よてい", "よどがわく", "よねつ", "よやく", "よゆう", "よろこぶ", "よろしい", "らいう", "らくがき", "らくご",
38408"らくさつ", "らくだ", "らしんばん", "らせん", "らぞく", "らたい", "らっか", "られつ", "りえき", "りかい",
38409"りきさく", "りきせつ", "りくぐん", "りくつ", "りけん", "りこう", "りせい", "りそう", "りそく", "りてん",
38410"りねん", "りゆう", "りゅうがく", "りよう", "りょうり", "りょかん", "りょくちゃ", "りょこう", "りりく", "りれき",
38411"りろん", "りんご", "るいけい", "るいさい", "るいじ", "るいせき", "るすばん", "るりがわら", "れいかん", "れいぎ",
38412"れいせい", "れいぞうこ", "れいとう", "れいぼう", "れきし", "れきだい", "れんあい", "れんけい", "れんこん", "れんさい",
38413"れんしゅう", "れんぞく", "れんらく", "ろうか", "ろうご", "ろうじん", "ろうそく", "ろくが", "ろこつ", "ろじうら",
38414"ろしゅつ", "ろせん", "ろてん", "ろめん", "ろれつ", "ろんぎ", "ろんぱ", "ろんぶん", "ろんり", "わかす",
38415"わかめ", "わかやま", "わかれる", "わしつ", "わじまし", "わすれもの", "わらう", "われる"]
38416</script>
38417 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
38418WORDLISTS["spanish"] = [
38419"ábaco", "abdomen", "abeja", "abierto", "abogado", "abono", "aborto", "abrazo", "abrir", "abuelo",
38420"abuso", "acabar", "academia", "acceso", "acción", "aceite", "acelga", "acento", "aceptar", "ácido",
38421"aclarar", "acné", "acoger", "acoso", "activo", "acto", "actriz", "actuar", "acudir", "acuerdo",
38422"acusar", "adicto", "admitir", "adoptar", "adorno", "aduana", "adulto", "aéreo", "afectar", "afición",
38423"afinar", "afirmar", "ágil", "agitar", "agonía", "agosto", "agotar", "agregar", "agrio", "agua",
38424"agudo", "águila", "aguja", "ahogo", "ahorro", "aire", "aislar", "ajedrez", "ajeno", "ajuste",
38425"alacrán", "alambre", "alarma", "alba", "álbum", "alcalde", "aldea", "alegre", "alejar", "alerta",
38426"aleta", "alfiler", "alga", "algodón", "aliado", "aliento", "alivio", "alma", "almeja", "almíbar",
38427"altar", "alteza", "altivo", "alto", "altura", "alumno", "alzar", "amable", "amante", "amapola",
38428"amargo", "amasar", "ámbar", "ámbito", "ameno", "amigo", "amistad", "amor", "amparo", "amplio",
38429"ancho", "anciano", "ancla", "andar", "andén", "anemia", "ángulo", "anillo", "ánimo", "anís",
38430"anotar", "antena", "antiguo", "antojo", "anual", "anular", "anuncio", "añadir", "añejo", "año",
38431"apagar", "aparato", "apetito", "apio", "aplicar", "apodo", "aporte", "apoyo", "aprender", "aprobar",
38432"apuesta", "apuro", "arado", "araña", "arar", "árbitro", "árbol", "arbusto", "archivo", "arco",
38433"arder", "ardilla", "arduo", "área", "árido", "aries", "armonía", "arnés", "aroma", "arpa",
38434"arpón", "arreglo", "arroz", "arruga", "arte", "artista", "asa", "asado", "asalto", "ascenso",
38435"asegurar", "aseo", "asesor", "asiento", "asilo", "asistir", "asno", "asombro", "áspero", "astilla",
38436"astro", "astuto", "asumir", "asunto", "atajo", "ataque", "atar", "atento", "ateo", "ático",
38437"atleta", "átomo", "atraer", "atroz", "atún", "audaz", "audio", "auge", "aula", "aumento",
38438"ausente", "autor", "aval", "avance", "avaro", "ave", "avellana", "avena", "avestruz", "avión",
38439"aviso", "ayer", "ayuda", "ayuno", "azafrán", "azar", "azote", "azúcar", "azufre", "azul",
38440"baba", "babor", "bache", "bahía", "baile", "bajar", "balanza", "balcón", "balde", "bambú",
38441"banco", "banda", "baño", "barba", "barco", "barniz", "barro", "báscula", "bastón", "basura",
38442"batalla", "batería", "batir", "batuta", "baúl", "bazar", "bebé", "bebida", "bello", "besar",
38443"beso", "bestia", "bicho", "bien", "bingo", "blanco", "bloque", "blusa", "boa", "bobina",
38444"bobo", "boca", "bocina", "boda", "bodega", "boina", "bola", "bolero", "bolsa", "bomba",
38445"bondad", "bonito", "bono", "bonsái", "borde", "borrar", "bosque", "bote", "botín", "bóveda",
38446"bozal", "bravo", "brazo", "brecha", "breve", "brillo", "brinco", "brisa", "broca", "broma",
38447"bronce", "brote", "bruja", "brusco", "bruto", "buceo", "bucle", "bueno", "buey", "bufanda",
38448"bufón", "búho", "buitre", "bulto", "burbuja", "burla", "burro", "buscar", "butaca", "buzón",
38449"caballo", "cabeza", "cabina", "cabra", "cacao", "cadáver", "cadena", "caer", "café", "caída",
38450"caimán", "caja", "cajón", "cal", "calamar", "calcio", "caldo", "calidad", "calle", "calma",
38451"calor", "calvo", "cama", "cambio", "camello", "camino", "campo", "cáncer", "candil", "canela",
38452"canguro", "canica", "canto", "caña", "cañón", "caoba", "caos", "capaz", "capitán", "capote",
38453"captar", "capucha", "cara", "carbón", "cárcel", "careta", "carga", "cariño", "carne", "carpeta",
38454"carro", "carta", "casa", "casco", "casero", "caspa", "castor", "catorce", "catre", "caudal",
38455"causa", "cazo", "cebolla", "ceder", "cedro", "celda", "célebre", "celoso", "célula", "cemento",
38456"ceniza", "centro", "cerca", "cerdo", "cereza", "cero", "cerrar", "certeza", "césped", "cetro",
38457"chacal", "chaleco", "champú", "chancla", "chapa", "charla", "chico", "chiste", "chivo", "choque",
38458"choza", "chuleta", "chupar", "ciclón", "ciego", "cielo", "cien", "cierto", "cifra", "cigarro",
38459"cima", "cinco", "cine", "cinta", "ciprés", "circo", "ciruela", "cisne", "cita", "ciudad",
38460"clamor", "clan", "claro", "clase", "clave", "cliente", "clima", "clínica", "cobre", "cocción",
38461"cochino", "cocina", "coco", "código", "codo", "cofre", "coger", "cohete", "cojín", "cojo",
38462"cola", "colcha", "colegio", "colgar", "colina", "collar", "colmo", "columna", "combate", "comer",
38463"comida", "cómodo", "compra", "conde", "conejo", "conga", "conocer", "consejo", "contar", "copa",
38464"copia", "corazón", "corbata", "corcho", "cordón", "corona", "correr", "coser", "cosmos", "costa",
38465"cráneo", "cráter", "crear", "crecer", "creído", "crema", "cría", "crimen", "cripta", "crisis",
38466"cromo", "crónica", "croqueta", "crudo", "cruz", "cuadro", "cuarto", "cuatro", "cubo", "cubrir",
38467"cuchara", "cuello", "cuento", "cuerda", "cuesta", "cueva", "cuidar", "culebra", "culpa", "culto",
38468"cumbre", "cumplir", "cuna", "cuneta", "cuota", "cupón", "cúpula", "curar", "curioso", "curso",
38469"curva", "cutis", "dama", "danza", "dar", "dardo", "dátil", "deber", "débil", "década",
38470"decir", "dedo", "defensa", "definir", "dejar", "delfín", "delgado", "delito", "demora", "denso",
38471"dental", "deporte", "derecho", "derrota", "desayuno", "deseo", "desfile", "desnudo", "destino", "desvío",
38472"detalle", "detener", "deuda", "día", "diablo", "diadema", "diamante", "diana", "diario", "dibujo",
38473"dictar", "diente", "dieta", "diez", "difícil", "digno", "dilema", "diluir", "dinero", "directo",
38474"dirigir", "disco", "diseño", "disfraz", "diva", "divino", "doble", "doce", "dolor", "domingo",
38475"don", "donar", "dorado", "dormir", "dorso", "dos", "dosis", "dragón", "droga", "ducha",
38476"duda", "duelo", "dueño", "dulce", "dúo", "duque", "durar", "dureza", "duro", "ébano",
38477"ebrio", "echar", "eco", "ecuador", "edad", "edición", "edificio", "editor", "educar", "efecto",
38478"eficaz", "eje", "ejemplo", "elefante", "elegir", "elemento", "elevar", "elipse", "élite", "elixir",
38479"elogio", "eludir", "embudo", "emitir", "emoción", "empate", "empeño", "empleo", "empresa", "enano",
38480"encargo", "enchufe", "encía", "enemigo", "enero", "enfado", "enfermo", "engaño", "enigma", "enlace",
38481"enorme", "enredo", "ensayo", "enseñar", "entero", "entrar", "envase", "envío", "época", "equipo",
38482"erizo", "escala", "escena", "escolar", "escribir", "escudo", "esencia", "esfera", "esfuerzo", "espada",
38483"espejo", "espía", "esposa", "espuma", "esquí", "estar", "este", "estilo", "estufa", "etapa",
38484"eterno", "ética", "etnia", "evadir", "evaluar", "evento", "evitar", "exacto", "examen", "exceso",
38485"excusa", "exento", "exigir", "exilio", "existir", "éxito", "experto", "explicar", "exponer", "extremo",
38486"fábrica", "fábula", "fachada", "fácil", "factor", "faena", "faja", "falda", "fallo", "falso",
38487"faltar", "fama", "familia", "famoso", "faraón", "farmacia", "farol", "farsa", "fase", "fatiga",
38488"fauna", "favor", "fax", "febrero", "fecha", "feliz", "feo", "feria", "feroz", "fértil",
38489"fervor", "festín", "fiable", "fianza", "fiar", "fibra", "ficción", "ficha", "fideo", "fiebre",
38490"fiel", "fiera", "fiesta", "figura", "fijar", "fijo", "fila", "filete", "filial", "filtro",
38491"fin", "finca", "fingir", "finito", "firma", "flaco", "flauta", "flecha", "flor", "flota",
38492"fluir", "flujo", "flúor", "fobia", "foca", "fogata", "fogón", "folio", "folleto", "fondo",
38493"forma", "forro", "fortuna", "forzar", "fosa", "foto", "fracaso", "frágil", "franja", "frase",
38494"fraude", "freír", "freno", "fresa", "frío", "frito", "fruta", "fuego", "fuente", "fuerza",
38495"fuga", "fumar", "función", "funda", "furgón", "furia", "fusil", "fútbol", "futuro", "gacela",
38496"gafas", "gaita", "gajo", "gala", "galería", "gallo", "gamba", "ganar", "gancho", "ganga",
38497"ganso", "garaje", "garza", "gasolina", "gastar", "gato", "gavilán", "gemelo", "gemir", "gen",
38498"género", "genio", "gente", "geranio", "gerente", "germen", "gesto", "gigante", "gimnasio", "girar",
38499"giro", "glaciar", "globo", "gloria", "gol", "golfo", "goloso", "golpe", "goma", "gordo",
38500"gorila", "gorra", "gota", "goteo", "gozar", "grada", "gráfico", "grano", "grasa", "gratis",
38501"grave", "grieta", "grillo", "gripe", "gris", "grito", "grosor", "grúa", "grueso", "grumo",
38502"grupo", "guante", "guapo", "guardia", "guerra", "guía", "guiño", "guion", "guiso", "guitarra",
38503"gusano", "gustar", "haber", "hábil", "hablar", "hacer", "hacha", "hada", "hallar", "hamaca",
38504"harina", "haz", "hazaña", "hebilla", "hebra", "hecho", "helado", "helio", "hembra", "herir",
38505"hermano", "héroe", "hervir", "hielo", "hierro", "hígado", "higiene", "hijo", "himno", "historia",
38506"hocico", "hogar", "hoguera", "hoja", "hombre", "hongo", "honor", "honra", "hora", "hormiga",
38507"horno", "hostil", "hoyo", "hueco", "huelga", "huerta", "hueso", "huevo", "huida", "huir",
38508"humano", "húmedo", "humilde", "humo", "hundir", "huracán", "hurto", "icono", "ideal", "idioma",
38509"ídolo", "iglesia", "iglú", "igual", "ilegal", "ilusión", "imagen", "imán", "imitar", "impar",
38510"imperio", "imponer", "impulso", "incapaz", "índice", "inerte", "infiel", "informe", "ingenio", "inicio",
38511"inmenso", "inmune", "innato", "insecto", "instante", "interés", "íntimo", "intuir", "inútil", "invierno",
38512"ira", "iris", "ironía", "isla", "islote", "jabalí", "jabón", "jamón", "jarabe", "jardín",
38513"jarra", "jaula", "jazmín", "jefe", "jeringa", "jinete", "jornada", "joroba", "joven", "joya",
38514"juerga", "jueves", "juez", "jugador", "jugo", "juguete", "juicio", "junco", "jungla", "junio",
38515"juntar", "júpiter", "jurar", "justo", "juvenil", "juzgar", "kilo", "koala", "labio", "lacio",
38516"lacra", "lado", "ladrón", "lagarto", "lágrima", "laguna", "laico", "lamer", "lámina", "lámpara",
38517"lana", "lancha", "langosta", "lanza", "lápiz", "largo", "larva", "lástima", "lata", "látex",
38518"latir", "laurel", "lavar", "lazo", "leal", "lección", "leche", "lector", "leer", "legión",
38519"legumbre", "lejano", "lengua", "lento", "leña", "león", "leopardo", "lesión", "letal", "letra",
38520"leve", "leyenda", "libertad", "libro", "licor", "líder", "lidiar", "lienzo", "liga", "ligero",
38521"lima", "límite", "limón", "limpio", "lince", "lindo", "línea", "lingote", "lino", "linterna",
38522"líquido", "liso", "lista", "litera", "litio", "litro", "llaga", "llama", "llanto", "llave",
38523"llegar", "llenar", "llevar", "llorar", "llover", "lluvia", "lobo", "loción", "loco", "locura",
38524"lógica", "logro", "lombriz", "lomo", "lonja", "lote", "lucha", "lucir", "lugar", "lujo",
38525"luna", "lunes", "lupa", "lustro", "luto", "luz", "maceta", "macho", "madera", "madre",
38526"maduro", "maestro", "mafia", "magia", "mago", "maíz", "maldad", "maleta", "malla", "malo",
38527"mamá", "mambo", "mamut", "manco", "mando", "manejar", "manga", "maniquí", "manjar", "mano",
38528"manso", "manta", "mañana", "mapa", "máquina", "mar", "marco", "marea", "marfil", "margen",
38529"marido", "mármol", "marrón", "martes", "marzo", "masa", "máscara", "masivo", "matar", "materia",
38530"matiz", "matriz", "máximo", "mayor", "mazorca", "mecha", "medalla", "medio", "médula", "mejilla",
38531"mejor", "melena", "melón", "memoria", "menor", "mensaje", "mente", "menú", "mercado", "merengue",
38532"mérito", "mes", "mesón", "meta", "meter", "método", "metro", "mezcla", "miedo", "miel",
38533"miembro", "miga", "mil", "milagro", "militar", "millón", "mimo", "mina", "minero", "mínimo",
38534"minuto", "miope", "mirar", "misa", "miseria", "misil", "mismo", "mitad", "mito", "mochila",
38535"moción", "moda", "modelo", "moho", "mojar", "molde", "moler", "molino", "momento", "momia",
38536"monarca", "moneda", "monja", "monto", "moño", "morada", "morder", "moreno", "morir", "morro",
38537"morsa", "mortal", "mosca", "mostrar", "motivo", "mover", "móvil", "mozo", "mucho", "mudar",
38538"mueble", "muela", "muerte", "muestra", "mugre", "mujer", "mula", "muleta", "multa", "mundo",
38539"muñeca", "mural", "muro", "músculo", "museo", "musgo", "música", "muslo", "nácar", "nación",
38540"nadar", "naipe", "naranja", "nariz", "narrar", "nasal", "natal", "nativo", "natural", "náusea",
38541"naval", "nave", "navidad", "necio", "néctar", "negar", "negocio", "negro", "neón", "nervio",
38542"neto", "neutro", "nevar", "nevera", "nicho", "nido", "niebla", "nieto", "niñez", "niño",
38543"nítido", "nivel", "nobleza", "noche", "nómina", "noria", "norma", "norte", "nota", "noticia",
38544"novato", "novela", "novio", "nube", "nuca", "núcleo", "nudillo", "nudo", "nuera", "nueve",
38545"nuez", "nulo", "número", "nutria", "oasis", "obeso", "obispo", "objeto", "obra", "obrero",
38546"observar", "obtener", "obvio", "oca", "ocaso", "océano", "ochenta", "ocho", "ocio", "ocre",
38547"octavo", "octubre", "oculto", "ocupar", "ocurrir", "odiar", "odio", "odisea", "oeste", "ofensa",
38548"oferta", "oficio", "ofrecer", "ogro", "oído", "oír", "ojo", "ola", "oleada", "olfato",
38549"olivo", "olla", "olmo", "olor", "olvido", "ombligo", "onda", "onza", "opaco", "opción",
38550"ópera", "opinar", "oponer", "optar", "óptica", "opuesto", "oración", "orador", "oral", "órbita",
38551"orca", "orden", "oreja", "órgano", "orgía", "orgullo", "oriente", "origen", "orilla", "oro",
38552"orquesta", "oruga", "osadía", "oscuro", "osezno", "oso", "ostra", "otoño", "otro", "oveja",
38553"óvulo", "óxido", "oxígeno", "oyente", "ozono", "pacto", "padre", "paella", "página", "pago",
38554"país", "pájaro", "palabra", "palco", "paleta", "pálido", "palma", "paloma", "palpar", "pan",
38555"panal", "pánico", "pantera", "pañuelo", "papá", "papel", "papilla", "paquete", "parar", "parcela",
38556"pared", "parir", "paro", "párpado", "parque", "párrafo", "parte", "pasar", "paseo", "pasión",
38557"paso", "pasta", "pata", "patio", "patria", "pausa", "pauta", "pavo", "payaso", "peatón",
38558"pecado", "pecera", "pecho", "pedal", "pedir", "pegar", "peine", "pelar", "peldaño", "pelea",
38559"peligro", "pellejo", "pelo", "peluca", "pena", "pensar", "peñón", "peón", "peor", "pepino",
38560"pequeño", "pera", "percha", "perder", "pereza", "perfil", "perico", "perla", "permiso", "perro",
38561"persona", "pesa", "pesca", "pésimo", "pestaña", "pétalo", "petróleo", "pez", "pezuña", "picar",
38562"pichón", "pie", "piedra", "pierna", "pieza", "pijama", "pilar", "piloto", "pimienta", "pino",
38563"pintor", "pinza", "piña", "piojo", "pipa", "pirata", "pisar", "piscina", "piso", "pista",
38564"pitón", "pizca", "placa", "plan", "plata", "playa", "plaza", "pleito", "pleno", "plomo",
38565"pluma", "plural", "pobre", "poco", "poder", "podio", "poema", "poesía", "poeta", "polen",
38566"policía", "pollo", "polvo", "pomada", "pomelo", "pomo", "pompa", "poner", "porción", "portal",
38567"posada", "poseer", "posible", "poste", "potencia", "potro", "pozo", "prado", "precoz", "pregunta",
38568"premio", "prensa", "preso", "previo", "primo", "príncipe", "prisión", "privar", "proa", "probar",
38569"proceso", "producto", "proeza", "profesor", "programa", "prole", "promesa", "pronto", "propio", "próximo",
38570"prueba", "público", "puchero", "pudor", "pueblo", "puerta", "puesto", "pulga", "pulir", "pulmón",
38571"pulpo", "pulso", "puma", "punto", "puñal", "puño", "pupa", "pupila", "puré", "quedar",
38572"queja", "quemar", "querer", "queso", "quieto", "química", "quince", "quitar", "rábano", "rabia",
38573"rabo", "ración", "radical", "raíz", "rama", "rampa", "rancho", "rango", "rapaz", "rápido",
38574"rapto", "rasgo", "raspa", "rato", "rayo", "raza", "razón", "reacción", "realidad", "rebaño",
38575"rebote", "recaer", "receta", "rechazo", "recoger", "recreo", "recto", "recurso", "red", "redondo",
38576"reducir", "reflejo", "reforma", "refrán", "refugio", "regalo", "regir", "regla", "regreso", "rehén",
38577"reino", "reír", "reja", "relato", "relevo", "relieve", "relleno", "reloj", "remar", "remedio",
38578"remo", "rencor", "rendir", "renta", "reparto", "repetir", "reposo", "reptil", "res", "rescate",
38579"resina", "respeto", "resto", "resumen", "retiro", "retorno", "retrato", "reunir", "revés", "revista",
38580"rey", "rezar", "rico", "riego", "rienda", "riesgo", "rifa", "rígido", "rigor", "rincón",
38581"riñón", "río", "riqueza", "risa", "ritmo", "rito", "rizo", "roble", "roce", "rociar",
38582"rodar", "rodeo", "rodilla", "roer", "rojizo", "rojo", "romero", "romper", "ron", "ronco",
38583"ronda", "ropa", "ropero", "rosa", "rosca", "rostro", "rotar", "rubí", "rubor", "rudo",
38584"rueda", "rugir", "ruido", "ruina", "ruleta", "rulo", "rumbo", "rumor", "ruptura", "ruta",
38585"rutina", "sábado", "saber", "sabio", "sable", "sacar", "sagaz", "sagrado", "sala", "saldo",
38586"salero", "salir", "salmón", "salón", "salsa", "salto", "salud", "salvar", "samba", "sanción",
38587"sandía", "sanear", "sangre", "sanidad", "sano", "santo", "sapo", "saque", "sardina", "sartén",
38588"sastre", "satán", "sauna", "saxofón", "sección", "seco", "secreto", "secta", "sed", "seguir",
38589"seis", "sello", "selva", "semana", "semilla", "senda", "sensor", "señal", "señor", "separar",
38590"sepia", "sequía", "ser", "serie", "sermón", "servir", "sesenta", "sesión", "seta", "setenta",
38591"severo", "sexo", "sexto", "sidra", "siesta", "siete", "siglo", "signo", "sílaba", "silbar",
38592"silencio", "silla", "símbolo", "simio", "sirena", "sistema", "sitio", "situar", "sobre", "socio",
38593"sodio", "sol", "solapa", "soldado", "soledad", "sólido", "soltar", "solución", "sombra", "sondeo",
38594"sonido", "sonoro", "sonrisa", "sopa", "soplar", "soporte", "sordo", "sorpresa", "sorteo", "sostén",
38595"sótano", "suave", "subir", "suceso", "sudor", "suegra", "suelo", "sueño", "suerte", "sufrir",
38596"sujeto", "sultán", "sumar", "superar", "suplir", "suponer", "supremo", "sur", "surco", "sureño",
38597"surgir", "susto", "sutil", "tabaco", "tabique", "tabla", "tabú", "taco", "tacto", "tajo",
38598"talar", "talco", "talento", "talla", "talón", "tamaño", "tambor", "tango", "tanque", "tapa",
38599"tapete", "tapia", "tapón", "taquilla", "tarde", "tarea", "tarifa", "tarjeta", "tarot", "tarro",
38600"tarta", "tatuaje", "tauro", "taza", "tazón", "teatro", "techo", "tecla", "técnica", "tejado",
38601"tejer", "tejido", "tela", "teléfono", "tema", "temor", "templo", "tenaz", "tender", "tener",
38602"tenis", "tenso", "teoría", "terapia", "terco", "término", "ternura", "terror", "tesis", "tesoro",
38603"testigo", "tetera", "texto", "tez", "tibio", "tiburón", "tiempo", "tienda", "tierra", "tieso",
38604"tigre", "tijera", "tilde", "timbre", "tímido", "timo", "tinta", "tío", "típico", "tipo",
38605"tira", "tirón", "titán", "títere", "título", "tiza", "toalla", "tobillo", "tocar", "tocino",
38606"todo", "toga", "toldo", "tomar", "tono", "tonto", "topar", "tope", "toque", "tórax",
38607"torero", "tormenta", "torneo", "toro", "torpedo", "torre", "torso", "tortuga", "tos", "tosco",
38608"toser", "tóxico", "trabajo", "tractor", "traer", "tráfico", "trago", "traje", "tramo", "trance",
38609"trato", "trauma", "trazar", "trébol", "tregua", "treinta", "tren", "trepar", "tres", "tribu",
38610"trigo", "tripa", "triste", "triunfo", "trofeo", "trompa", "tronco", "tropa", "trote", "trozo",
38611"truco", "trueno", "trufa", "tubería", "tubo", "tuerto", "tumba", "tumor", "túnel", "túnica",
38612"turbina", "turismo", "turno", "tutor", "ubicar", "úlcera", "umbral", "unidad", "unir", "universo",
38613"uno", "untar", "uña", "urbano", "urbe", "urgente", "urna", "usar", "usuario", "útil",
38614"utopía", "uva", "vaca", "vacío", "vacuna", "vagar", "vago", "vaina", "vajilla", "vale",
38615"válido", "valle", "valor", "válvula", "vampiro", "vara", "variar", "varón", "vaso", "vecino",
38616"vector", "vehículo", "veinte", "vejez", "vela", "velero", "veloz", "vena", "vencer", "venda",
38617"veneno", "vengar", "venir", "venta", "venus", "ver", "verano", "verbo", "verde", "vereda",
38618"verja", "verso", "verter", "vía", "viaje", "vibrar", "vicio", "víctima", "vida", "vídeo",
38619"vidrio", "viejo", "viernes", "vigor", "vil", "villa", "vinagre", "vino", "viñedo", "violín",
38620"viral", "virgo", "virtud", "visor", "víspera", "vista", "vitamina", "viudo", "vivaz", "vivero",
38621"vivir", "vivo", "volcán", "volumen", "volver", "voraz", "votar", "voto", "voz", "vuelo",
38622"vulgar", "yacer", "yate", "yegua", "yema", "yerno", "yeso", "yodo", "yoga", "yogur",
38623"zafiro", "zanja", "zapato", "zarza", "zona", "zorro", "zumo", "zurdo"]
38624</script>
38625 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
38626WORDLISTS["chinese_simplified"] = [
38627"的", "一", "是", "在", "不", "了", "有", "和", "人", "这",
38628"中", "大", "为", "上", "个", "国", "我", "以", "要", "他",
38629"时", "来", "用", "们", "生", "到", "作", "地", "于", "出",
38630"就", "分", "对", "成", "会", "可", "主", "发", "年", "动",
38631"同", "工", "也", "能", "下", "过", "子", "说", "产", "种",
38632"面", "而", "方", "后", "多", "定", "行", "学", "法", "所",
38633"民", "得", "经", "十", "三", "之", "进", "着", "等", "部",
38634"度", "家", "电", "力", "里", "如", "水", "化", "高", "自",
38635"二", "理", "起", "小", "物", "现", "实", "加", "量", "都",
38636"两", "体", "制", "机", "当", "使", "点", "从", "业", "本",
38637"去", "把", "性", "好", "应", "开", "它", "合", "还", "因",
38638"由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
38639"那", "社", "义", "事", "平", "形", "相", "全", "表", "间",
38640"样", "与", "关", "各", "重", "新", "线", "内", "数", "正",
38641"心", "反", "你", "明", "看", "原", "又", "么", "利", "比",
38642"或", "但", "质", "气", "第", "向", "道", "命", "此", "变",
38643"条", "只", "没", "结", "解", "问", "意", "建", "月", "公",
38644"无", "系", "军", "很", "情", "者", "最", "立", "代", "想",
38645"已", "通", "并", "提", "直", "题", "党", "程", "展", "五",
38646"果", "料", "象", "员", "革", "位", "入", "常", "文", "总",
38647"次", "品", "式", "活", "设", "及", "管", "特", "件", "长",
38648"求", "老", "头", "基", "资", "边", "流", "路", "级", "少",
38649"图", "山", "统", "接", "知", "较", "将", "组", "见", "计",
38650"别", "她", "手", "角", "期", "根", "论", "运", "农", "指",
38651"几", "九", "区", "强", "放", "决", "西", "被", "干", "做",
38652"必", "战", "先", "回", "则", "任", "取", "据", "处", "队",
38653"南", "给", "色", "光", "门", "即", "保", "治", "北", "造",
38654"百", "规", "热", "领", "七", "海", "口", "东", "导", "器",
38655"压", "志", "世", "金", "增", "争", "济", "阶", "油", "思",
38656"术", "极", "交", "受", "联", "什", "认", "六", "共", "权",
38657"收", "证", "改", "清", "美", "再", "采", "转", "更", "单",
38658"风", "切", "打", "白", "教", "速", "花", "带", "安", "场",
38659"身", "车", "例", "真", "务", "具", "万", "每", "目", "至",
38660"达", "走", "积", "示", "议", "声", "报", "斗", "完", "类",
38661"八", "离", "华", "名", "确", "才", "科", "张", "信", "马",
38662"节", "话", "米", "整", "空", "元", "况", "今", "集", "温",
38663"传", "土", "许", "步", "群", "广", "石", "记", "需", "段",
38664"研", "界", "拉", "林", "律", "叫", "且", "究", "观", "越",
38665"织", "装", "影", "算", "低", "持", "音", "众", "书", "布",
38666"复", "容", "儿", "须", "际", "商", "非", "验", "连", "断",
38667"深", "难", "近", "矿", "千", "周", "委", "素", "技", "备",
38668"半", "办", "青", "省", "列", "习", "响", "约", "支", "般",
38669"史", "感", "劳", "便", "团", "往", "酸", "历", "市", "克",
38670"何", "除", "消", "构", "府", "称", "太", "准", "精", "值",
38671"号", "率", "族", "维", "划", "选", "标", "写", "存", "候",
38672"毛", "亲", "快", "效", "斯", "院", "查", "江", "型", "眼",
38673"王", "按", "格", "养", "易", "置", "派", "层", "片", "始",
38674"却", "专", "状", "育", "厂", "京", "识", "适", "属", "圆",
38675"包", "火", "住", "调", "满", "县", "局", "照", "参", "红",
38676"细", "引", "听", "该", "铁", "价", "严", "首", "底", "液",
38677"官", "德", "随", "病", "苏", "失", "尔", "死", "讲", "配",
38678"女", "黄", "推", "显", "谈", "罪", "神", "艺", "呢", "席",
38679"含", "企", "望", "密", "批", "营", "项", "防", "举", "球",
38680"英", "氧", "势", "告", "李", "台", "落", "木", "帮", "轮",
38681"破", "亚", "师", "围", "注", "远", "字", "材", "排", "供",
38682"河", "态", "封", "另", "施", "减", "树", "溶", "怎", "止",
38683"案", "言", "士", "均", "武", "固", "叶", "鱼", "波", "视",
38684"仅", "费", "紧", "爱", "左", "章", "早", "朝", "害", "续",
38685"轻", "服", "试", "食", "充", "兵", "源", "判", "护", "司",
38686"足", "某", "练", "差", "致", "板", "田", "降", "黑", "犯",
38687"负", "击", "范", "继", "兴", "似", "余", "坚", "曲", "输",
38688"修", "故", "城", "夫", "够", "送", "笔", "船", "占", "右",
38689"财", "吃", "富", "春", "职", "觉", "汉", "画", "功", "巴",
38690"跟", "虽", "杂", "飞", "检", "吸", "助", "升", "阳", "互",
38691"初", "创", "抗", "考", "投", "坏", "策", "古", "径", "换",
38692"未", "跑", "留", "钢", "曾", "端", "责", "站", "简", "述",
38693"钱", "副", "尽", "帝", "射", "草", "冲", "承", "独", "令",
38694"限", "阿", "宣", "环", "双", "请", "超", "微", "让", "控",
38695"州", "良", "轴", "找", "否", "纪", "益", "依", "优", "顶",
38696"础", "载", "倒", "房", "突", "坐", "粉", "敌", "略", "客",
38697"袁", "冷", "胜", "绝", "析", "块", "剂", "测", "丝", "协",
38698"诉", "念", "陈", "仍", "罗", "盐", "友", "洋", "错", "苦",
38699"夜", "刑", "移", "频", "逐", "靠", "混", "母", "短", "皮",
38700"终", "聚", "汽", "村", "云", "哪", "既", "距", "卫", "停",
38701"烈", "央", "察", "烧", "迅", "境", "若", "印", "洲", "刻",
38702"括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
38703"侵", "吧", "甲", "游", "久", "菜", "味", "旧", "模", "湖",
38704"货", "损", "预", "阻", "毫", "普", "稳", "乙", "妈", "植",
38705"息", "扩", "银", "语", "挥", "酒", "守", "拿", "序", "纸",
38706"医", "缺", "雨", "吗", "针", "刘", "啊", "急", "唱", "误",
38707"训", "愿", "审", "附", "获", "茶", "鲜", "粮", "斤", "孩",
38708"脱", "硫", "肥", "善", "龙", "演", "父", "渐", "血", "欢",
38709"械", "掌", "歌", "沙", "刚", "攻", "谓", "盾", "讨", "晚",
38710"粒", "乱", "燃", "矛", "乎", "杀", "药", "宁", "鲁", "贵",
38711"钟", "煤", "读", "班", "伯", "香", "介", "迫", "句", "丰",
38712"培", "握", "兰", "担", "弦", "蛋", "沉", "假", "穿", "执",
38713"答", "乐", "谁", "顺", "烟", "缩", "征", "脸", "喜", "松",
38714"脚", "困", "异", "免", "背", "星", "福", "买", "染", "井",
38715"概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "静", "补",
38716"评", "翻", "肉", "践", "尼", "衣", "宽", "扬", "棉", "希",
38717"伤", "操", "垂", "秋", "宜", "氢", "套", "督", "振", "架",
38718"亮", "末", "宪", "庆", "编", "牛", "触", "映", "雷", "销",
38719"诗", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
38720"绿", "晶", "厚", "盟", "衡", "鸡", "孙", "延", "危", "胶",
38721"屋", "乡", "临", "陆", "顾", "掉", "呀", "灯", "岁", "措",
38722"束", "耐", "剧", "玉", "赵", "跳", "哥", "季", "课", "凯",
38723"胡", "额", "款", "绍", "卷", "齐", "伟", "蒸", "殖", "永",
38724"宗", "苗", "川", "炉", "岩", "弱", "零", "杨", "奏", "沿",
38725"露", "杆", "探", "滑", "镇", "饭", "浓", "航", "怀", "赶",
38726"库", "夺", "伊", "灵", "税", "途", "灭", "赛", "归", "召",
38727"鼓", "播", "盘", "裁", "险", "康", "唯", "录", "菌", "纯",
38728"借", "糖", "盖", "横", "符", "私", "努", "堂", "域", "枪",
38729"润", "幅", "哈", "竟", "熟", "虫", "泽", "脑", "壤", "碳",
38730"欧", "遍", "侧", "寨", "敢", "彻", "虑", "斜", "薄", "庭",
38731"纳", "弹", "饲", "伸", "折", "麦", "湿", "暗", "荷", "瓦",
38732"塞", "床", "筑", "恶", "户", "访", "塔", "奇", "透", "梁",
38733"刀", "旋", "迹", "卡", "氯", "遇", "份", "毒", "泥", "退",
38734"洗", "摆", "灰", "彩", "卖", "耗", "夏", "择", "忙", "铜",
38735"献", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
38736"阵", "阴", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
38737"楼", "避", "谋", "吨", "野", "猪", "旗", "累", "偏", "典",
38738"馆", "索", "秦", "脂", "潮", "爷", "豆", "忽", "托", "惊",
38739"塑", "遗", "愈", "朱", "替", "纤", "粗", "倾", "尚", "痛",
38740"楚", "谢", "奋", "购", "磨", "君", "池", "旁", "碎", "骨",
38741"监", "捕", "弟", "暴", "割", "贯", "殊", "释", "词", "亡",
38742"壁", "顿", "宝", "午", "尘", "闻", "揭", "炮", "残", "冬",
38743"桥", "妇", "警", "综", "招", "吴", "付", "浮", "遭", "徐",
38744"您", "摇", "谷", "赞", "箱", "隔", "订", "男", "吹", "园",
38745"纷", "唐", "败", "宋", "玻", "巨", "耕", "坦", "荣", "闭",
38746"湾", "键", "凡", "驻", "锅", "救", "恩", "剥", "凝", "碱",
38747"齿", "截", "炼", "麻", "纺", "禁", "废", "盛", "版", "缓",
38748"净", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
38749"庄", "街", "藏", "姑", "贸", "腐", "奴", "啦", "惯", "乘",
38750"伙", "恢", "匀", "纱", "扎", "辩", "耳", "彪", "臣", "亿",
38751"璃", "抵", "脉", "秀", "萨", "俄", "网", "舞", "店", "喷",
38752"纵", "寸", "汗", "挂", "洪", "贺", "闪", "柬", "爆", "烯",
38753"津", "稻", "墙", "软", "勇", "像", "滚", "厘", "蒙", "芳",
38754"肯", "坡", "柱", "荡", "腿", "仪", "旅", "尾", "轧", "冰",
38755"贡", "登", "黎", "削", "钻", "勒", "逃", "障", "氨", "郭",
38756"峰", "币", "港", "伏", "轨", "亩", "毕", "擦", "莫", "刺",
38757"浪", "秘", "援", "株", "健", "售", "股", "岛", "甘", "泡",
38758"睡", "童", "铸", "汤", "阀", "休", "汇", "舍", "牧", "绕",
38759"炸", "哲", "磷", "绩", "朋", "淡", "尖", "启", "陷", "柴",
38760"呈", "徒", "颜", "泪", "稍", "忘", "泵", "蓝", "拖", "洞",
38761"授", "镜", "辛", "壮", "锋", "贫", "虚", "弯", "摩", "泰",
38762"幼", "廷", "尊", "窗", "纲", "弄", "隶", "疑", "氏", "宫",
38763"姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "违",
38764"夹", "腰", "缘", "珠", "穷", "森", "枝", "竹", "沟", "催",
38765"绳", "忆", "邦", "剩", "幸", "浆", "栏", "拥", "牙", "贮",
38766"礼", "滤", "钠", "纹", "罢", "拍", "咱", "喊", "袖", "埃",
38767"勤", "罚", "焦", "潜", "伍", "墨", "欲", "缝", "姓", "刊",
38768"饱", "仿", "奖", "铝", "鬼", "丽", "跨", "默", "挖", "链",
38769"扫", "喝", "袋", "炭", "污", "幕", "诸", "弧", "励", "梅",
38770"奶", "洁", "灾", "舟", "鉴", "苯", "讼", "抱", "毁", "懂",
38771"寒", "智", "埔", "寄", "届", "跃", "渡", "挑", "丹", "艰",
38772"贝", "碰", "拔", "爹", "戴", "码", "梦", "芽", "熔", "赤",
38773"渔", "哭", "敬", "颗", "奔", "铅", "仲", "虎", "稀", "妹",
38774"乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "仓", "魏",
38775"锐", "晓", "氮", "兼", "隐", "碍", "赫", "拨", "忠", "肃",
38776"缸", "牵", "抢", "博", "巧", "壳", "兄", "杜", "讯", "诚",
38777"碧", "祥", "柯", "页", "巡", "矩", "悲", "灌", "龄", "伦",
38778"票", "寻", "桂", "铺", "圣", "恐", "恰", "郑", "趣", "抬",
38779"荒", "腾", "贴", "柔", "滴", "猛", "阔", "辆", "妻", "填",
38780"撤", "储", "签", "闹", "扰", "紫", "砂", "递", "戏", "吊",
38781"陶", "伐", "喂", "疗", "瓶", "婆", "抚", "臂", "摸", "忍",
38782"虾", "蜡", "邻", "胸", "巩", "挤", "偶", "弃", "槽", "劲",
38783"乳", "邓", "吉", "仁", "烂", "砖", "租", "乌", "舰", "伴",
38784"瓜", "浅", "丙", "暂", "燥", "橡", "柳", "迷", "暖", "牌",
38785"秧", "胆", "详", "簧", "踏", "瓷", "谱", "呆", "宾", "糊",
38786"洛", "辉", "愤", "竞", "隙", "怒", "粘", "乃", "绪", "肩",
38787"籍", "敏", "涂", "熙", "皆", "侦", "悬", "掘", "享", "纠",
38788"醒", "狂", "锁", "淀", "恨", "牲", "霸", "爬", "赏", "逆",
38789"玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鸭",
38790"趋", "凤", "晨", "畜", "辈", "秩", "卵", "署", "梯", "炎",
38791"滩", "棋", "驱", "筛", "峡", "冒", "啥", "寿", "译", "浸",
38792"泉", "帽", "迟", "硅", "疆", "贷", "漏", "稿", "冠", "嫩",
38793"胁", "芯", "牢", "叛", "蚀", "奥", "鸣", "岭", "羊", "凭",
38794"串", "塘", "绘", "酵", "融", "盆", "锡", "庙", "筹", "冻",
38795"辅", "摄", "袭", "筋", "拒", "僚", "旱", "钾", "鸟", "漆",
38796"沈", "眉", "疏", "添", "棒", "穗", "硝", "韩", "逼", "扭",
38797"侨", "凉", "挺", "碗", "栽", "炒", "杯", "患", "馏", "劝",
38798"豪", "辽", "勃", "鸿", "旦", "吏", "拜", "狗", "埋", "辊",
38799"掩", "饮", "搬", "骂", "辞", "勾", "扣", "估", "蒋", "绒",
38800"雾", "丈", "朵", "姆", "拟", "宇", "辑", "陕", "雕", "偿",
38801"蓄", "崇", "剪", "倡", "厅", "咬", "驶", "薯", "刷", "斥",
38802"番", "赋", "奉", "佛", "浇", "漫", "曼", "扇", "钙", "桃",
38803"扶", "仔", "返", "俗", "亏", "腔", "鞋", "棱", "覆", "框",
38804"悄", "叔", "撞", "骗", "勘", "旺", "沸", "孤", "吐", "孟",
38805"渠", "屈", "疾", "妙", "惜", "仰", "狠", "胀", "谐", "抛",
38806"霉", "桑", "岗", "嘛", "衰", "盗", "渗", "脏", "赖", "涌",
38807"甜", "曹", "阅", "肌", "哩", "厉", "烃", "纬", "毅", "昨",
38808"伪", "症", "煮", "叹", "钉", "搭", "茎", "笼", "酷", "偷",
38809"弓", "锥", "恒", "杰", "坑", "鼻", "翼", "纶", "叙", "狱",
38810"逮", "罐", "络", "棚", "抑", "膨", "蔬", "寺", "骤", "穆",
38811"冶", "枯", "册", "尸", "凸", "绅", "坯", "牺", "焰", "轰",
38812"欣", "晋", "瘦", "御", "锭", "锦", "丧", "旬", "锻", "垄",
38813"搜", "扑", "邀", "亭", "酯", "迈", "舒", "脆", "酶", "闲",
38814"忧", "酚", "顽", "羽", "涨", "卸", "仗", "陪", "辟", "惩",
38815"杭", "姚", "肚", "捉", "飘", "漂", "昆", "欺", "吾", "郎",
38816"烷", "汁", "呵", "饰", "萧", "雅", "邮", "迁", "燕", "撒",
38817"姻", "赴", "宴", "烦", "债", "帐", "斑", "铃", "旨", "醇",
38818"董", "饼", "雏", "姿", "拌", "傅", "腹", "妥", "揉", "贤",
38819"拆", "歪", "葡", "胺", "丢", "浩", "徽", "昂", "垫", "挡",
38820"览", "贪", "慰", "缴", "汪", "慌", "冯", "诺", "姜", "谊",
38821"凶", "劣", "诬", "耀", "昏", "躺", "盈", "骑", "乔", "溪",
38822"丛", "卢", "抹", "闷", "咨", "刮", "驾", "缆", "悟", "摘",
38823"铒", "掷", "颇", "幻", "柄", "惠", "惨", "佳", "仇", "腊",
38824"窝", "涤", "剑", "瞧", "堡", "泼", "葱", "罩", "霍", "捞",
38825"胎", "苍", "滨", "俩", "捅", "湘", "砍", "霞", "邵", "萄",
38826"疯", "淮", "遂", "熊", "粪", "烘", "宿", "档", "戈", "驳",
38827"嫂", "裕", "徙", "箭", "捐", "肠", "撑", "晒", "辨", "殿",
38828"莲", "摊", "搅", "酱", "屏", "疫", "哀", "蔡", "堵", "沫",
38829"皱", "畅", "叠", "阁", "莱", "敲", "辖", "钩", "痕", "坝",
38830"巷", "饿", "祸", "丘", "玄", "溜", "曰", "逻", "彭", "尝",
38831"卿", "妨", "艇", "吞", "韦", "怨", "矮", "歇" ]
38832</script>
38833 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
38834WORDLISTS["chinese_traditional"] = [
38835"的", "一", "是", "在", "不", "了", "有", "和", "人", "這",
38836"中", "大", "為", "上", "個", "國", "我", "以", "要", "他",
38837"時", "來", "用", "們", "生", "到", "作", "地", "於", "出",
38838"就", "分", "對", "成", "會", "可", "主", "發", "年", "動",
38839"同", "工", "也", "能", "下", "過", "子", "說", "產", "種",
38840"面", "而", "方", "後", "多", "定", "行", "學", "法", "所",
38841"民", "得", "經", "十", "三", "之", "進", "著", "等", "部",
38842"度", "家", "電", "力", "裡", "如", "水", "化", "高", "自",
38843"二", "理", "起", "小", "物", "現", "實", "加", "量", "都",
38844"兩", "體", "制", "機", "當", "使", "點", "從", "業", "本",
38845"去", "把", "性", "好", "應", "開", "它", "合", "還", "因",
38846"由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
38847"那", "社", "義", "事", "平", "形", "相", "全", "表", "間",
38848"樣", "與", "關", "各", "重", "新", "線", "內", "數", "正",
38849"心", "反", "你", "明", "看", "原", "又", "麼", "利", "比",
38850"或", "但", "質", "氣", "第", "向", "道", "命", "此", "變",
38851"條", "只", "沒", "結", "解", "問", "意", "建", "月", "公",
38852"無", "系", "軍", "很", "情", "者", "最", "立", "代", "想",
38853"已", "通", "並", "提", "直", "題", "黨", "程", "展", "五",
38854"果", "料", "象", "員", "革", "位", "入", "常", "文", "總",
38855"次", "品", "式", "活", "設", "及", "管", "特", "件", "長",
38856"求", "老", "頭", "基", "資", "邊", "流", "路", "級", "少",
38857"圖", "山", "統", "接", "知", "較", "將", "組", "見", "計",
38858"別", "她", "手", "角", "期", "根", "論", "運", "農", "指",
38859"幾", "九", "區", "強", "放", "決", "西", "被", "幹", "做",
38860"必", "戰", "先", "回", "則", "任", "取", "據", "處", "隊",
38861"南", "給", "色", "光", "門", "即", "保", "治", "北", "造",
38862"百", "規", "熱", "領", "七", "海", "口", "東", "導", "器",
38863"壓", "志", "世", "金", "增", "爭", "濟", "階", "油", "思",
38864"術", "極", "交", "受", "聯", "什", "認", "六", "共", "權",
38865"收", "證", "改", "清", "美", "再", "採", "轉", "更", "單",
38866"風", "切", "打", "白", "教", "速", "花", "帶", "安", "場",
38867"身", "車", "例", "真", "務", "具", "萬", "每", "目", "至",
38868"達", "走", "積", "示", "議", "聲", "報", "鬥", "完", "類",
38869"八", "離", "華", "名", "確", "才", "科", "張", "信", "馬",
38870"節", "話", "米", "整", "空", "元", "況", "今", "集", "溫",
38871"傳", "土", "許", "步", "群", "廣", "石", "記", "需", "段",
38872"研", "界", "拉", "林", "律", "叫", "且", "究", "觀", "越",
38873"織", "裝", "影", "算", "低", "持", "音", "眾", "書", "布",
38874"复", "容", "兒", "須", "際", "商", "非", "驗", "連", "斷",
38875"深", "難", "近", "礦", "千", "週", "委", "素", "技", "備",
38876"半", "辦", "青", "省", "列", "習", "響", "約", "支", "般",
38877"史", "感", "勞", "便", "團", "往", "酸", "歷", "市", "克",
38878"何", "除", "消", "構", "府", "稱", "太", "準", "精", "值",
38879"號", "率", "族", "維", "劃", "選", "標", "寫", "存", "候",
38880"毛", "親", "快", "效", "斯", "院", "查", "江", "型", "眼",
38881"王", "按", "格", "養", "易", "置", "派", "層", "片", "始",
38882"卻", "專", "狀", "育", "廠", "京", "識", "適", "屬", "圓",
38883"包", "火", "住", "調", "滿", "縣", "局", "照", "參", "紅",
38884"細", "引", "聽", "該", "鐵", "價", "嚴", "首", "底", "液",
38885"官", "德", "隨", "病", "蘇", "失", "爾", "死", "講", "配",
38886"女", "黃", "推", "顯", "談", "罪", "神", "藝", "呢", "席",
38887"含", "企", "望", "密", "批", "營", "項", "防", "舉", "球",
38888"英", "氧", "勢", "告", "李", "台", "落", "木", "幫", "輪",
38889"破", "亞", "師", "圍", "注", "遠", "字", "材", "排", "供",
38890"河", "態", "封", "另", "施", "減", "樹", "溶", "怎", "止",
38891"案", "言", "士", "均", "武", "固", "葉", "魚", "波", "視",
38892"僅", "費", "緊", "愛", "左", "章", "早", "朝", "害", "續",
38893"輕", "服", "試", "食", "充", "兵", "源", "判", "護", "司",
38894"足", "某", "練", "差", "致", "板", "田", "降", "黑", "犯",
38895"負", "擊", "范", "繼", "興", "似", "餘", "堅", "曲", "輸",
38896"修", "故", "城", "夫", "夠", "送", "筆", "船", "佔", "右",
38897"財", "吃", "富", "春", "職", "覺", "漢", "畫", "功", "巴",
38898"跟", "雖", "雜", "飛", "檢", "吸", "助", "昇", "陽", "互",
38899"初", "創", "抗", "考", "投", "壞", "策", "古", "徑", "換",
38900"未", "跑", "留", "鋼", "曾", "端", "責", "站", "簡", "述",
38901"錢", "副", "盡", "帝", "射", "草", "衝", "承", "獨", "令",
38902"限", "阿", "宣", "環", "雙", "請", "超", "微", "讓", "控",
38903"州", "良", "軸", "找", "否", "紀", "益", "依", "優", "頂",
38904"礎", "載", "倒", "房", "突", "坐", "粉", "敵", "略", "客",
38905"袁", "冷", "勝", "絕", "析", "塊", "劑", "測", "絲", "協",
38906"訴", "念", "陳", "仍", "羅", "鹽", "友", "洋", "錯", "苦",
38907"夜", "刑", "移", "頻", "逐", "靠", "混", "母", "短", "皮",
38908"終", "聚", "汽", "村", "雲", "哪", "既", "距", "衛", "停",
38909"烈", "央", "察", "燒", "迅", "境", "若", "印", "洲", "刻",
38910"括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
38911"侵", "吧", "甲", "遊", "久", "菜", "味", "舊", "模", "湖",
38912"貨", "損", "預", "阻", "毫", "普", "穩", "乙", "媽", "植",
38913"息", "擴", "銀", "語", "揮", "酒", "守", "拿", "序", "紙",
38914"醫", "缺", "雨", "嗎", "針", "劉", "啊", "急", "唱", "誤",
38915"訓", "願", "審", "附", "獲", "茶", "鮮", "糧", "斤", "孩",
38916"脫", "硫", "肥", "善", "龍", "演", "父", "漸", "血", "歡",
38917"械", "掌", "歌", "沙", "剛", "攻", "謂", "盾", "討", "晚",
38918"粒", "亂", "燃", "矛", "乎", "殺", "藥", "寧", "魯", "貴",
38919"鐘", "煤", "讀", "班", "伯", "香", "介", "迫", "句", "豐",
38920"培", "握", "蘭", "擔", "弦", "蛋", "沉", "假", "穿", "執",
38921"答", "樂", "誰", "順", "煙", "縮", "徵", "臉", "喜", "松",
38922"腳", "困", "異", "免", "背", "星", "福", "買", "染", "井",
38923"概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "靜", "補",
38924"評", "翻", "肉", "踐", "尼", "衣", "寬", "揚", "棉", "希",
38925"傷", "操", "垂", "秋", "宜", "氫", "套", "督", "振", "架",
38926"亮", "末", "憲", "慶", "編", "牛", "觸", "映", "雷", "銷",
38927"詩", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
38928"綠", "晶", "厚", "盟", "衡", "雞", "孫", "延", "危", "膠",
38929"屋", "鄉", "臨", "陸", "顧", "掉", "呀", "燈", "歲", "措",
38930"束", "耐", "劇", "玉", "趙", "跳", "哥", "季", "課", "凱",
38931"胡", "額", "款", "紹", "卷", "齊", "偉", "蒸", "殖", "永",
38932"宗", "苗", "川", "爐", "岩", "弱", "零", "楊", "奏", "沿",
38933"露", "桿", "探", "滑", "鎮", "飯", "濃", "航", "懷", "趕",
38934"庫", "奪", "伊", "靈", "稅", "途", "滅", "賽", "歸", "召",
38935"鼓", "播", "盤", "裁", "險", "康", "唯", "錄", "菌", "純",
38936"借", "糖", "蓋", "橫", "符", "私", "努", "堂", "域", "槍",
38937"潤", "幅", "哈", "竟", "熟", "蟲", "澤", "腦", "壤", "碳",
38938"歐", "遍", "側", "寨", "敢", "徹", "慮", "斜", "薄", "庭",
38939"納", "彈", "飼", "伸", "折", "麥", "濕", "暗", "荷", "瓦",
38940"塞", "床", "築", "惡", "戶", "訪", "塔", "奇", "透", "梁",
38941"刀", "旋", "跡", "卡", "氯", "遇", "份", "毒", "泥", "退",
38942"洗", "擺", "灰", "彩", "賣", "耗", "夏", "擇", "忙", "銅",
38943"獻", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
38944"陣", "陰", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
38945"樓", "避", "謀", "噸", "野", "豬", "旗", "累", "偏", "典",
38946"館", "索", "秦", "脂", "潮", "爺", "豆", "忽", "托", "驚",
38947"塑", "遺", "愈", "朱", "替", "纖", "粗", "傾", "尚", "痛",
38948"楚", "謝", "奮", "購", "磨", "君", "池", "旁", "碎", "骨",
38949"監", "捕", "弟", "暴", "割", "貫", "殊", "釋", "詞", "亡",
38950"壁", "頓", "寶", "午", "塵", "聞", "揭", "炮", "殘", "冬",
38951"橋", "婦", "警", "綜", "招", "吳", "付", "浮", "遭", "徐",
38952"您", "搖", "谷", "贊", "箱", "隔", "訂", "男", "吹", "園",
38953"紛", "唐", "敗", "宋", "玻", "巨", "耕", "坦", "榮", "閉",
38954"灣", "鍵", "凡", "駐", "鍋", "救", "恩", "剝", "凝", "鹼",
38955"齒", "截", "煉", "麻", "紡", "禁", "廢", "盛", "版", "緩",
38956"淨", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
38957"莊", "街", "藏", "姑", "貿", "腐", "奴", "啦", "慣", "乘",
38958"夥", "恢", "勻", "紗", "扎", "辯", "耳", "彪", "臣", "億",
38959"璃", "抵", "脈", "秀", "薩", "俄", "網", "舞", "店", "噴",
38960"縱", "寸", "汗", "掛", "洪", "賀", "閃", "柬", "爆", "烯",
38961"津", "稻", "牆", "軟", "勇", "像", "滾", "厘", "蒙", "芳",
38962"肯", "坡", "柱", "盪", "腿", "儀", "旅", "尾", "軋", "冰",
38963"貢", "登", "黎", "削", "鑽", "勒", "逃", "障", "氨", "郭",
38964"峰", "幣", "港", "伏", "軌", "畝", "畢", "擦", "莫", "刺",
38965"浪", "秘", "援", "株", "健", "售", "股", "島", "甘", "泡",
38966"睡", "童", "鑄", "湯", "閥", "休", "匯", "舍", "牧", "繞",
38967"炸", "哲", "磷", "績", "朋", "淡", "尖", "啟", "陷", "柴",
38968"呈", "徒", "顏", "淚", "稍", "忘", "泵", "藍", "拖", "洞",
38969"授", "鏡", "辛", "壯", "鋒", "貧", "虛", "彎", "摩", "泰",
38970"幼", "廷", "尊", "窗", "綱", "弄", "隸", "疑", "氏", "宮",
38971"姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "違",
38972"夾", "腰", "緣", "珠", "窮", "森", "枝", "竹", "溝", "催",
38973"繩", "憶", "邦", "剩", "幸", "漿", "欄", "擁", "牙", "貯",
38974"禮", "濾", "鈉", "紋", "罷", "拍", "咱", "喊", "袖", "埃",
38975"勤", "罰", "焦", "潛", "伍", "墨", "欲", "縫", "姓", "刊",
38976"飽", "仿", "獎", "鋁", "鬼", "麗", "跨", "默", "挖", "鏈",
38977"掃", "喝", "袋", "炭", "污", "幕", "諸", "弧", "勵", "梅",
38978"奶", "潔", "災", "舟", "鑑", "苯", "訟", "抱", "毀", "懂",
38979"寒", "智", "埔", "寄", "屆", "躍", "渡", "挑", "丹", "艱",
38980"貝", "碰", "拔", "爹", "戴", "碼", "夢", "芽", "熔", "赤",
38981"漁", "哭", "敬", "顆", "奔", "鉛", "仲", "虎", "稀", "妹",
38982"乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "倉", "魏",
38983"銳", "曉", "氮", "兼", "隱", "礙", "赫", "撥", "忠", "肅",
38984"缸", "牽", "搶", "博", "巧", "殼", "兄", "杜", "訊", "誠",
38985"碧", "祥", "柯", "頁", "巡", "矩", "悲", "灌", "齡", "倫",
38986"票", "尋", "桂", "鋪", "聖", "恐", "恰", "鄭", "趣", "抬",
38987"荒", "騰", "貼", "柔", "滴", "猛", "闊", "輛", "妻", "填",
38988"撤", "儲", "簽", "鬧", "擾", "紫", "砂", "遞", "戲", "吊",
38989"陶", "伐", "餵", "療", "瓶", "婆", "撫", "臂", "摸", "忍",
38990"蝦", "蠟", "鄰", "胸", "鞏", "擠", "偶", "棄", "槽", "勁",
38991"乳", "鄧", "吉", "仁", "爛", "磚", "租", "烏", "艦", "伴",
38992"瓜", "淺", "丙", "暫", "燥", "橡", "柳", "迷", "暖", "牌",
38993"秧", "膽", "詳", "簧", "踏", "瓷", "譜", "呆", "賓", "糊",
38994"洛", "輝", "憤", "競", "隙", "怒", "粘", "乃", "緒", "肩",
38995"籍", "敏", "塗", "熙", "皆", "偵", "懸", "掘", "享", "糾",
38996"醒", "狂", "鎖", "淀", "恨", "牲", "霸", "爬", "賞", "逆",
38997"玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鴨",
38998"趨", "鳳", "晨", "畜", "輩", "秩", "卵", "署", "梯", "炎",
38999"灘", "棋", "驅", "篩", "峽", "冒", "啥", "壽", "譯", "浸",
39000"泉", "帽", "遲", "矽", "疆", "貸", "漏", "稿", "冠", "嫩",
39001"脅", "芯", "牢", "叛", "蝕", "奧", "鳴", "嶺", "羊", "憑",
39002"串", "塘", "繪", "酵", "融", "盆", "錫", "廟", "籌", "凍",
39003"輔", "攝", "襲", "筋", "拒", "僚", "旱", "鉀", "鳥", "漆",
39004"沈", "眉", "疏", "添", "棒", "穗", "硝", "韓", "逼", "扭",
39005"僑", "涼", "挺", "碗", "栽", "炒", "杯", "患", "餾", "勸",
39006"豪", "遼", "勃", "鴻", "旦", "吏", "拜", "狗", "埋", "輥",
39007"掩", "飲", "搬", "罵", "辭", "勾", "扣", "估", "蔣", "絨",
39008"霧", "丈", "朵", "姆", "擬", "宇", "輯", "陝", "雕", "償",
39009"蓄", "崇", "剪", "倡", "廳", "咬", "駛", "薯", "刷", "斥",
39010"番", "賦", "奉", "佛", "澆", "漫", "曼", "扇", "鈣", "桃",
39011"扶", "仔", "返", "俗", "虧", "腔", "鞋", "棱", "覆", "框",
39012"悄", "叔", "撞", "騙", "勘", "旺", "沸", "孤", "吐", "孟",
39013"渠", "屈", "疾", "妙", "惜", "仰", "狠", "脹", "諧", "拋",
39014"黴", "桑", "崗", "嘛", "衰", "盜", "滲", "臟", "賴", "湧",
39015"甜", "曹", "閱", "肌", "哩", "厲", "烴", "緯", "毅", "昨",
39016"偽", "症", "煮", "嘆", "釘", "搭", "莖", "籠", "酷", "偷",
39017"弓", "錐", "恆", "傑", "坑", "鼻", "翼", "綸", "敘", "獄",
39018"逮", "罐", "絡", "棚", "抑", "膨", "蔬", "寺", "驟", "穆",
39019"冶", "枯", "冊", "屍", "凸", "紳", "坯", "犧", "焰", "轟",
39020"欣", "晉", "瘦", "禦", "錠", "錦", "喪", "旬", "鍛", "壟",
39021"搜", "撲", "邀", "亭", "酯", "邁", "舒", "脆", "酶", "閒",
39022"憂", "酚", "頑", "羽", "漲", "卸", "仗", "陪", "闢", "懲",
39023"杭", "姚", "肚", "捉", "飄", "漂", "昆", "欺", "吾", "郎",
39024"烷", "汁", "呵", "飾", "蕭", "雅", "郵", "遷", "燕", "撒",
39025"姻", "赴", "宴", "煩", "債", "帳", "斑", "鈴", "旨", "醇",
39026"董", "餅", "雛", "姿", "拌", "傅", "腹", "妥", "揉", "賢",
39027"拆", "歪", "葡", "胺", "丟", "浩", "徽", "昂", "墊", "擋",
39028"覽", "貪", "慰", "繳", "汪", "慌", "馮", "諾", "姜", "誼",
39029"兇", "劣", "誣", "耀", "昏", "躺", "盈", "騎", "喬", "溪",
39030"叢", "盧", "抹", "悶", "諮", "刮", "駕", "纜", "悟", "摘",
39031"鉺", "擲", "頗", "幻", "柄", "惠", "慘", "佳", "仇", "臘",
39032"窩", "滌", "劍", "瞧", "堡", "潑", "蔥", "罩", "霍", "撈",
39033"胎", "蒼", "濱", "倆", "捅", "湘", "砍", "霞", "邵", "萄",
39034"瘋", "淮", "遂", "熊", "糞", "烘", "宿", "檔", "戈", "駁",
39035"嫂", "裕", "徙", "箭", "捐", "腸", "撐", "曬", "辨", "殿",
39036"蓮", "攤", "攪", "醬", "屏", "疫", "哀", "蔡", "堵", "沫",
39037"皺", "暢", "疊", "閣", "萊", "敲", "轄", "鉤", "痕", "壩",
39038"巷", "餓", "禍", "丘", "玄", "溜", "曰", "邏", "彭", "嘗",
39039"卿", "妨", "艇", "吞", "韋", "怨", "矮", "歇" ]
39040</script>
39041 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
39042WORDLISTS["french"] = [
39043"abaisser", "abandon", "abdiquer", "abeille", "abolir", "aborder", "aboutir", "aboyer", "abrasif", "abreuver",
39044"abriter", "abroger", "abrupt", "absence", "absolu", "absurde", "abusif", "abyssal", "académie", "acajou",
39045"acarien", "accabler", "accepter", "acclamer", "accolade", "accroche", "accuser", "acerbe", "achat", "acheter",
39046"aciduler", "acier", "acompte", "acquérir", "acronyme", "acteur", "actif", "actuel", "adepte", "adéquat",
39047"adhésif", "adjectif", "adjuger", "admettre", "admirer", "adopter", "adorer", "adoucir", "adresse", "adroit",
39048"adulte", "adverbe", "aérer", "aéronef", "affaire", "affecter", "affiche", "affreux", "affubler", "agacer",
39049"agencer", "agile", "agiter", "agrafer", "agréable", "agrume", "aider", "aiguille", "ailier", "aimable",
39050"aisance", "ajouter", "ajuster", "alarmer", "alchimie", "alerte", "algèbre", "algue", "aliéner", "aliment",
39051"alléger", "alliage", "allouer", "allumer", "alourdir", "alpaga", "altesse", "alvéole", "amateur", "ambigu",
39052"ambre", "aménager", "amertume", "amidon", "amiral", "amorcer", "amour", "amovible", "amphibie", "ampleur",
39053"amusant", "analyse", "anaphore", "anarchie", "anatomie", "ancien", "anéantir", "angle", "angoisse", "anguleux",
39054"animal", "annexer", "annonce", "annuel", "anodin", "anomalie", "anonyme", "anormal", "antenne", "antidote",
39055"anxieux", "apaiser", "apéritif", "aplanir", "apologie", "appareil", "appeler", "apporter", "appuyer", "aquarium",
39056"aqueduc", "arbitre", "arbuste", "ardeur", "ardoise", "argent", "arlequin", "armature", "armement", "armoire",
39057"armure", "arpenter", "arracher", "arriver", "arroser", "arsenic", "artériel", "article", "aspect", "asphalte",
39058"aspirer", "assaut", "asservir", "assiette", "associer", "assurer", "asticot", "astre", "astuce", "atelier",
39059"atome", "atrium", "atroce", "attaque", "attentif", "attirer", "attraper", "aubaine", "auberge", "audace",
39060"audible", "augurer", "aurore", "automne", "autruche", "avaler", "avancer", "avarice", "avenir", "averse",
39061"aveugle", "aviateur", "avide", "avion", "aviser", "avoine", "avouer", "avril", "axial", "axiome",
39062"badge", "bafouer", "bagage", "baguette", "baignade", "balancer", "balcon", "baleine", "balisage", "bambin",
39063"bancaire", "bandage", "banlieue", "bannière", "banquier", "barbier", "baril", "baron", "barque", "barrage",
39064"bassin", "bastion", "bataille", "bateau", "batterie", "baudrier", "bavarder", "belette", "bélier", "belote",
39065"bénéfice", "berceau", "berger", "berline", "bermuda", "besace", "besogne", "bétail", "beurre", "biberon",
39066"bicycle", "bidule", "bijou", "bilan", "bilingue", "billard", "binaire", "biologie", "biopsie", "biotype",
39067"biscuit", "bison", "bistouri", "bitume", "bizarre", "blafard", "blague", "blanchir", "blessant", "blinder",
39068"blond", "bloquer", "blouson", "bobard", "bobine", "boire", "boiser", "bolide", "bonbon", "bondir",
39069"bonheur", "bonifier", "bonus", "bordure", "borne", "botte", "boucle", "boueux", "bougie", "boulon",
39070"bouquin", "bourse", "boussole", "boutique", "boxeur", "branche", "brasier", "brave", "brebis", "brèche",
39071"breuvage", "bricoler", "brigade", "brillant", "brioche", "brique", "brochure", "broder", "bronzer", "brousse",
39072"broyeur", "brume", "brusque", "brutal", "bruyant", "buffle", "buisson", "bulletin", "bureau", "burin",
39073"bustier", "butiner", "butoir", "buvable", "buvette", "cabanon", "cabine", "cachette", "cadeau", "cadre",
39074"caféine", "caillou", "caisson", "calculer", "calepin", "calibre", "calmer", "calomnie", "calvaire", "camarade",
39075"caméra", "camion", "campagne", "canal", "caneton", "canon", "cantine", "canular", "capable", "caporal",
39076"caprice", "capsule", "capter", "capuche", "carabine", "carbone", "caresser", "caribou", "carnage", "carotte",
39077"carreau", "carton", "cascade", "casier", "casque", "cassure", "causer", "caution", "cavalier", "caverne",
39078"caviar", "cédille", "ceinture", "céleste", "cellule", "cendrier", "censurer", "central", "cercle", "cérébral",
39079"cerise", "cerner", "cerveau", "cesser", "chagrin", "chaise", "chaleur", "chambre", "chance", "chapitre",
39080"charbon", "chasseur", "chaton", "chausson", "chavirer", "chemise", "chenille", "chéquier", "chercher", "cheval",
39081"chien", "chiffre", "chignon", "chimère", "chiot", "chlorure", "chocolat", "choisir", "chose", "chouette",
39082"chrome", "chute", "cigare", "cigogne", "cimenter", "cinéma", "cintrer", "circuler", "cirer", "cirque",
39083"citerne", "citoyen", "citron", "civil", "clairon", "clameur", "claquer", "classe", "clavier", "client",
39084"cligner", "climat", "clivage", "cloche", "clonage", "cloporte", "cobalt", "cobra", "cocasse", "cocotier",
39085"coder", "codifier", "coffre", "cogner", "cohésion", "coiffer", "coincer", "colère", "colibri", "colline",
39086"colmater", "colonel", "combat", "comédie", "commande", "compact", "concert", "conduire", "confier", "congeler",
39087"connoter", "consonne", "contact", "convexe", "copain", "copie", "corail", "corbeau", "cordage", "corniche",
39088"corpus", "correct", "cortège", "cosmique", "costume", "coton", "coude", "coupure", "courage", "couteau",
39089"couvrir", "coyote", "crabe", "crainte", "cravate", "crayon", "créature", "créditer", "crémeux", "creuser",
39090"crevette", "cribler", "crier", "cristal", "critère", "croire", "croquer", "crotale", "crucial", "cruel",
39091"crypter", "cubique", "cueillir", "cuillère", "cuisine", "cuivre", "culminer", "cultiver", "cumuler", "cupide",
39092"curatif", "curseur", "cyanure", "cycle", "cylindre", "cynique", "daigner", "damier", "danger", "danseur",
39093"dauphin", "débattre", "débiter", "déborder", "débrider", "débutant", "décaler", "décembre", "déchirer", "décider",
39094"déclarer", "décorer", "décrire", "décupler", "dédale", "déductif", "déesse", "défensif", "défiler", "défrayer",
39095"dégager", "dégivrer", "déglutir", "dégrafer", "déjeuner", "délice", "déloger", "demander", "demeurer", "démolir",
39096"dénicher", "dénouer", "dentelle", "dénuder", "départ", "dépenser", "déphaser", "déplacer", "déposer", "déranger",
39097"dérober", "désastre", "descente", "désert", "désigner", "désobéir", "dessiner", "destrier", "détacher", "détester",
39098"détourer", "détresse", "devancer", "devenir", "deviner", "devoir", "diable", "dialogue", "diamant", "dicter",
39099"différer", "digérer", "digital", "digne", "diluer", "dimanche", "diminuer", "dioxyde", "directif", "diriger",
39100"discuter", "disposer", "dissiper", "distance", "divertir", "diviser", "docile", "docteur", "dogme", "doigt",
39101"domaine", "domicile", "dompter", "donateur", "donjon", "donner", "dopamine", "dortoir", "dorure", "dosage",
39102"doseur", "dossier", "dotation", "douanier", "double", "douceur", "douter", "doyen", "dragon", "draper",
39103"dresser", "dribbler", "droiture", "duperie", "duplexe", "durable", "durcir", "dynastie", "éblouir", "écarter",
39104"écharpe", "échelle", "éclairer", "éclipse", "éclore", "écluse", "école", "économie", "écorce", "écouter",
39105"écraser", "écrémer", "écrivain", "écrou", "écume", "écureuil", "édifier", "éduquer", "effacer", "effectif",
39106"effigie", "effort", "effrayer", "effusion", "égaliser", "égarer", "éjecter", "élaborer", "élargir", "électron",
39107"élégant", "éléphant", "élève", "éligible", "élitisme", "éloge", "élucider", "éluder", "emballer", "embellir",
39108"embryon", "émeraude", "émission", "emmener", "émotion", "émouvoir", "empereur", "employer", "emporter", "emprise",
39109"émulsion", "encadrer", "enchère", "enclave", "encoche", "endiguer", "endosser", "endroit", "enduire", "énergie",
39110"enfance", "enfermer", "enfouir", "engager", "engin", "englober", "énigme", "enjamber", "enjeu", "enlever",
39111"ennemi", "ennuyeux", "enrichir", "enrobage", "enseigne", "entasser", "entendre", "entier", "entourer", "entraver",
39112"énumérer", "envahir", "enviable", "envoyer", "enzyme", "éolien", "épaissir", "épargne", "épatant", "épaule",
39113"épicerie", "épidémie", "épier", "épilogue", "épine", "épisode", "épitaphe", "époque", "épreuve", "éprouver",
39114"épuisant", "équerre", "équipe", "ériger", "érosion", "erreur", "éruption", "escalier", "espadon", "espèce",
39115"espiègle", "espoir", "esprit", "esquiver", "essayer", "essence", "essieu", "essorer", "estime", "estomac",
39116"estrade", "étagère", "étaler", "étanche", "étatique", "éteindre", "étendoir", "éternel", "éthanol", "éthique",
39117"ethnie", "étirer", "étoffer", "étoile", "étonnant", "étourdir", "étrange", "étroit", "étude", "euphorie",
39118"évaluer", "évasion", "éventail", "évidence", "éviter", "évolutif", "évoquer", "exact", "exagérer", "exaucer",
39119"exceller", "excitant", "exclusif", "excuse", "exécuter", "exemple", "exercer", "exhaler", "exhorter", "exigence",
39120"exiler", "exister", "exotique", "expédier", "explorer", "exposer", "exprimer", "exquis", "extensif", "extraire",
39121"exulter", "fable", "fabuleux", "facette", "facile", "facture", "faiblir", "falaise", "fameux", "famille",
39122"farceur", "farfelu", "farine", "farouche", "fasciner", "fatal", "fatigue", "faucon", "fautif", "faveur",
39123"favori", "fébrile", "féconder", "fédérer", "félin", "femme", "fémur", "fendoir", "féodal", "fermer",
39124"féroce", "ferveur", "festival", "feuille", "feutre", "février", "fiasco", "ficeler", "fictif", "fidèle",
39125"figure", "filature", "filetage", "filière", "filleul", "filmer", "filou", "filtrer", "financer", "finir",
39126"fiole", "firme", "fissure", "fixer", "flairer", "flamme", "flasque", "flatteur", "fléau", "flèche",
39127"fleur", "flexion", "flocon", "flore", "fluctuer", "fluide", "fluvial", "folie", "fonderie", "fongible",
39128"fontaine", "forcer", "forgeron", "formuler", "fortune", "fossile", "foudre", "fougère", "fouiller", "foulure",
39129"fourmi", "fragile", "fraise", "franchir", "frapper", "frayeur", "frégate", "freiner", "frelon", "frémir",
39130"frénésie", "frère", "friable", "friction", "frisson", "frivole", "froid", "fromage", "frontal", "frotter",
39131"fruit", "fugitif", "fuite", "fureur", "furieux", "furtif", "fusion", "futur", "gagner", "galaxie",
39132"galerie", "gambader", "garantir", "gardien", "garnir", "garrigue", "gazelle", "gazon", "géant", "gélatine",
39133"gélule", "gendarme", "général", "génie", "genou", "gentil", "géologie", "géomètre", "géranium", "germe",
39134"gestuel", "geyser", "gibier", "gicler", "girafe", "givre", "glace", "glaive", "glisser", "globe",
39135"gloire", "glorieux", "golfeur", "gomme", "gonfler", "gorge", "gorille", "goudron", "gouffre", "goulot",
39136"goupille", "gourmand", "goutte", "graduel", "graffiti", "graine", "grand", "grappin", "gratuit", "gravir",
39137"grenat", "griffure", "griller", "grimper", "grogner", "gronder", "grotte", "groupe", "gruger", "grutier",
39138"gruyère", "guépard", "guerrier", "guide", "guimauve", "guitare", "gustatif", "gymnaste", "gyrostat", "habitude",
39139"hachoir", "halte", "hameau", "hangar", "hanneton", "haricot", "harmonie", "harpon", "hasard", "hélium",
39140"hématome", "herbe", "hérisson", "hermine", "héron", "hésiter", "heureux", "hiberner", "hibou", "hilarant",
39141"histoire", "hiver", "homard", "hommage", "homogène", "honneur", "honorer", "honteux", "horde", "horizon",
39142"horloge", "hormone", "horrible", "houleux", "housse", "hublot", "huileux", "humain", "humble", "humide",
39143"humour", "hurler", "hydromel", "hygiène", "hymne", "hypnose", "idylle", "ignorer", "iguane", "illicite",
39144"illusion", "image", "imbiber", "imiter", "immense", "immobile", "immuable", "impact", "impérial", "implorer",
39145"imposer", "imprimer", "imputer", "incarner", "incendie", "incident", "incliner", "incolore", "indexer", "indice",
39146"inductif", "inédit", "ineptie", "inexact", "infini", "infliger", "informer", "infusion", "ingérer", "inhaler",
39147"inhiber", "injecter", "injure", "innocent", "inoculer", "inonder", "inscrire", "insecte", "insigne", "insolite",
39148"inspirer", "instinct", "insulter", "intact", "intense", "intime", "intrigue", "intuitif", "inutile", "invasion",
39149"inventer", "inviter", "invoquer", "ironique", "irradier", "irréel", "irriter", "isoler", "ivoire", "ivresse",
39150"jaguar", "jaillir", "jambe", "janvier", "jardin", "jauger", "jaune", "javelot", "jetable", "jeton",
39151"jeudi", "jeunesse", "joindre", "joncher", "jongler", "joueur", "jouissif", "journal", "jovial", "joyau",
39152"joyeux", "jubiler", "jugement", "junior", "jupon", "juriste", "justice", "juteux", "juvénile", "kayak",
39153"kimono", "kiosque", "label", "labial", "labourer", "lacérer", "lactose", "lagune", "laine", "laisser",
39154"laitier", "lambeau", "lamelle", "lampe", "lanceur", "langage", "lanterne", "lapin", "largeur", "larme",
39155"laurier", "lavabo", "lavoir", "lecture", "légal", "léger", "légume", "lessive", "lettre", "levier",
39156"lexique", "lézard", "liasse", "libérer", "libre", "licence", "licorne", "liège", "lièvre", "ligature",
39157"ligoter", "ligue", "limer", "limite", "limonade", "limpide", "linéaire", "lingot", "lionceau", "liquide",
39158"lisière", "lister", "lithium", "litige", "littoral", "livreur", "logique", "lointain", "loisir", "lombric",
39159"loterie", "louer", "lourd", "loutre", "louve", "loyal", "lubie", "lucide", "lucratif", "lueur",
39160"lugubre", "luisant", "lumière", "lunaire", "lundi", "luron", "lutter", "luxueux", "machine", "magasin",
39161"magenta", "magique", "maigre", "maillon", "maintien", "mairie", "maison", "majorer", "malaxer", "maléfice",
39162"malheur", "malice", "mallette", "mammouth", "mandater", "maniable", "manquant", "manteau", "manuel", "marathon",
39163"marbre", "marchand", "mardi", "maritime", "marqueur", "marron", "marteler", "mascotte", "massif", "matériel",
39164"matière", "matraque", "maudire", "maussade", "mauve", "maximal", "méchant", "méconnu", "médaille", "médecin",
39165"méditer", "méduse", "meilleur", "mélange", "mélodie", "membre", "mémoire", "menacer", "mener", "menhir",
39166"mensonge", "mentor", "mercredi", "mérite", "merle", "messager", "mesure", "métal", "météore", "méthode",
39167"métier", "meuble", "miauler", "microbe", "miette", "mignon", "migrer", "milieu", "million", "mimique",
39168"mince", "minéral", "minimal", "minorer", "minute", "miracle", "miroiter", "missile", "mixte", "mobile",
39169"moderne", "moelleux", "mondial", "moniteur", "monnaie", "monotone", "monstre", "montagne", "monument", "moqueur",
39170"morceau", "morsure", "mortier", "moteur", "motif", "mouche", "moufle", "moulin", "mousson", "mouton",
39171"mouvant", "multiple", "munition", "muraille", "murène", "murmure", "muscle", "muséum", "musicien", "mutation",
39172"muter", "mutuel", "myriade", "myrtille", "mystère", "mythique", "nageur", "nappe", "narquois", "narrer",
39173"natation", "nation", "nature", "naufrage", "nautique", "navire", "nébuleux", "nectar", "néfaste", "négation",
39174"négliger", "négocier", "neige", "nerveux", "nettoyer", "neurone", "neutron", "neveu", "niche", "nickel",
39175"nitrate", "niveau", "noble", "nocif", "nocturne", "noirceur", "noisette", "nomade", "nombreux", "nommer",
39176"normatif", "notable", "notifier", "notoire", "nourrir", "nouveau", "novateur", "novembre", "novice", "nuage",
39177"nuancer", "nuire", "nuisible", "numéro", "nuptial", "nuque", "nutritif", "obéir", "objectif", "obliger",
39178"obscur", "observer", "obstacle", "obtenir", "obturer", "occasion", "occuper", "océan", "octobre", "octroyer",
39179"octupler", "oculaire", "odeur", "odorant", "offenser", "officier", "offrir", "ogive", "oiseau", "oisillon",
39180"olfactif", "olivier", "ombrage", "omettre", "onctueux", "onduler", "onéreux", "onirique", "opale", "opaque",
39181"opérer", "opinion", "opportun", "opprimer", "opter", "optique", "orageux", "orange", "orbite", "ordonner",
39182"oreille", "organe", "orgueil", "orifice", "ornement", "orque", "ortie", "osciller", "osmose", "ossature",
39183"otarie", "ouragan", "ourson", "outil", "outrager", "ouvrage", "ovation", "oxyde", "oxygène", "ozone",
39184"paisible", "palace", "palmarès", "palourde", "palper", "panache", "panda", "pangolin", "paniquer", "panneau",
39185"panorama", "pantalon", "papaye", "papier", "papoter", "papyrus", "paradoxe", "parcelle", "paresse", "parfumer",
39186"parler", "parole", "parrain", "parsemer", "partager", "parure", "parvenir", "passion", "pastèque", "paternel",
39187"patience", "patron", "pavillon", "pavoiser", "payer", "paysage", "peigne", "peintre", "pelage", "pélican",
39188"pelle", "pelouse", "peluche", "pendule", "pénétrer", "pénible", "pensif", "pénurie", "pépite", "péplum",
39189"perdrix", "perforer", "période", "permuter", "perplexe", "persil", "perte", "peser", "pétale", "petit",
39190"pétrir", "peuple", "pharaon", "phobie", "phoque", "photon", "phrase", "physique", "piano", "pictural",
39191"pièce", "pierre", "pieuvre", "pilote", "pinceau", "pipette", "piquer", "pirogue", "piscine", "piston",
39192"pivoter", "pixel", "pizza", "placard", "plafond", "plaisir", "planer", "plaque", "plastron", "plateau",
39193"pleurer", "plexus", "pliage", "plomb", "plonger", "pluie", "plumage", "pochette", "poésie", "poète",
39194"pointe", "poirier", "poisson", "poivre", "polaire", "policier", "pollen", "polygone", "pommade", "pompier",
39195"ponctuel", "pondérer", "poney", "portique", "position", "posséder", "posture", "potager", "poteau", "potion",
39196"pouce", "poulain", "poumon", "pourpre", "poussin", "pouvoir", "prairie", "pratique", "précieux", "prédire",
39197"préfixe", "prélude", "prénom", "présence", "prétexte", "prévoir", "primitif", "prince", "prison", "priver",
39198"problème", "procéder", "prodige", "profond", "progrès", "proie", "projeter", "prologue", "promener", "propre",
39199"prospère", "protéger", "prouesse", "proverbe", "prudence", "pruneau", "psychose", "public", "puceron", "puiser",
39200"pulpe", "pulsar", "punaise", "punitif", "pupitre", "purifier", "puzzle", "pyramide", "quasar", "querelle",
39201"question", "quiétude", "quitter", "quotient", "racine", "raconter", "radieux", "ragondin", "raideur", "raisin",
39202"ralentir", "rallonge", "ramasser", "rapide", "rasage", "ratisser", "ravager", "ravin", "rayonner", "réactif",
39203"réagir", "réaliser", "réanimer", "recevoir", "réciter", "réclamer", "récolter", "recruter", "reculer", "recycler",
39204"rédiger", "redouter", "refaire", "réflexe", "réformer", "refrain", "refuge", "régalien", "région", "réglage",
39205"régulier", "réitérer", "rejeter", "rejouer", "relatif", "relever", "relief", "remarque", "remède", "remise",
39206"remonter", "remplir", "remuer", "renard", "renfort", "renifler", "renoncer", "rentrer", "renvoi", "replier",
39207"reporter", "reprise", "reptile", "requin", "réserve", "résineux", "résoudre", "respect", "rester", "résultat",
39208"rétablir", "retenir", "réticule", "retomber", "retracer", "réunion", "réussir", "revanche", "revivre", "révolte",
39209"révulsif", "richesse", "rideau", "rieur", "rigide", "rigoler", "rincer", "riposter", "risible", "risque",
39210"rituel", "rival", "rivière", "rocheux", "romance", "rompre", "ronce", "rondin", "roseau", "rosier",
39211"rotatif", "rotor", "rotule", "rouge", "rouille", "rouleau", "routine", "royaume", "ruban", "rubis",
39212"ruche", "ruelle", "rugueux", "ruiner", "ruisseau", "ruser", "rustique", "rythme", "sabler", "saboter",
39213"sabre", "sacoche", "safari", "sagesse", "saisir", "salade", "salive", "salon", "saluer", "samedi",
39214"sanction", "sanglier", "sarcasme", "sardine", "saturer", "saugrenu", "saumon", "sauter", "sauvage", "savant",
39215"savonner", "scalpel", "scandale", "scélérat", "scénario", "sceptre", "schéma", "science", "scinder", "score",
39216"scrutin", "sculpter", "séance", "sécable", "sécher", "secouer", "sécréter", "sédatif", "séduire", "seigneur",
39217"séjour", "sélectif", "semaine", "sembler", "semence", "séminal", "sénateur", "sensible", "sentence", "séparer",
39218"séquence", "serein", "sergent", "sérieux", "serrure", "sérum", "service", "sésame", "sévir", "sevrage",
39219"sextuple", "sidéral", "siècle", "siéger", "siffler", "sigle", "signal", "silence", "silicium", "simple",
39220"sincère", "sinistre", "siphon", "sirop", "sismique", "situer", "skier", "social", "socle", "sodium",
39221"soigneux", "soldat", "soleil", "solitude", "soluble", "sombre", "sommeil", "somnoler", "sonde", "songeur",
39222"sonnette", "sonore", "sorcier", "sortir", "sosie", "sottise", "soucieux", "soudure", "souffle", "soulever",
39223"soupape", "source", "soutirer", "souvenir", "spacieux", "spatial", "spécial", "sphère", "spiral", "stable",
39224"station", "sternum", "stimulus", "stipuler", "strict", "studieux", "stupeur", "styliste", "sublime", "substrat",
39225"subtil", "subvenir", "succès", "sucre", "suffixe", "suggérer", "suiveur", "sulfate", "superbe", "supplier",
39226"surface", "suricate", "surmener", "surprise", "sursaut", "survie", "suspect", "syllabe", "symbole", "symétrie",
39227"synapse", "syntaxe", "système", "tabac", "tablier", "tactile", "tailler", "talent", "talisman", "talonner",
39228"tambour", "tamiser", "tangible", "tapis", "taquiner", "tarder", "tarif", "tartine", "tasse", "tatami",
39229"tatouage", "taupe", "taureau", "taxer", "témoin", "temporel", "tenaille", "tendre", "teneur", "tenir",
39230"tension", "terminer", "terne", "terrible", "tétine", "texte", "thème", "théorie", "thérapie", "thorax",
39231"tibia", "tiède", "timide", "tirelire", "tiroir", "tissu", "titane", "titre", "tituber", "toboggan",
39232"tolérant", "tomate", "tonique", "tonneau", "toponyme", "torche", "tordre", "tornade", "torpille", "torrent",
39233"torse", "tortue", "totem", "toucher", "tournage", "tousser", "toxine", "traction", "trafic", "tragique",
39234"trahir", "train", "trancher", "travail", "trèfle", "tremper", "trésor", "treuil", "triage", "tribunal",
39235"tricoter", "trilogie", "triomphe", "tripler", "triturer", "trivial", "trombone", "tronc", "tropical", "troupeau",
39236"tuile", "tulipe", "tumulte", "tunnel", "turbine", "tuteur", "tutoyer", "tuyau", "tympan", "typhon",
39237"typique", "tyran", "ubuesque", "ultime", "ultrason", "unanime", "unifier", "union", "unique", "unitaire",
39238"univers", "uranium", "urbain", "urticant", "usage", "usine", "usuel", "usure", "utile", "utopie",
39239"vacarme", "vaccin", "vagabond", "vague", "vaillant", "vaincre", "vaisseau", "valable", "valise", "vallon",
39240"valve", "vampire", "vanille", "vapeur", "varier", "vaseux", "vassal", "vaste", "vecteur", "vedette",
39241"végétal", "véhicule", "veinard", "véloce", "vendredi", "vénérer", "venger", "venimeux", "ventouse", "verdure",
39242"vérin", "vernir", "verrou", "verser", "vertu", "veston", "vétéran", "vétuste", "vexant", "vexer",
39243"viaduc", "viande", "victoire", "vidange", "vidéo", "vignette", "vigueur", "vilain", "village", "vinaigre",
39244"violon", "vipère", "virement", "virtuose", "virus", "visage", "viseur", "vision", "visqueux", "visuel",
39245"vital", "vitesse", "viticole", "vitrine", "vivace", "vivipare", "vocation", "voguer", "voile", "voisin",
39246"voiture", "volaille", "volcan", "voltiger", "volume", "vorace", "vortex", "voter", "vouloir", "voyage",
39247"voyelle", "wagon", "xénon", "yacht", "zèbre", "zénith", "zeste", "zoologie"]
39248</script>
39249 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
39250WORDLISTS["italian"] = [
39251"abaco", "abbaglio", "abbinato", "abete", "abisso", "abolire", "abrasivo", "abrogato", "accadere", "accenno",
39252"accusato", "acetone", "achille", "acido", "acqua", "acre", "acrilico", "acrobata", "acuto", "adagio",
39253"addebito", "addome", "adeguato", "aderire", "adipe", "adottare", "adulare", "affabile", "affetto", "affisso",
39254"affranto", "aforisma", "afoso", "africano", "agave", "agente", "agevole", "aggancio", "agire", "agitare",
39255"agonismo", "agricolo", "agrumeto", "aguzzo", "alabarda", "alato", "albatro", "alberato", "albo", "albume",
39256"alce", "alcolico", "alettone", "alfa", "algebra", "aliante", "alibi", "alimento", "allagato", "allegro",
39257"allievo", "allodola", "allusivo", "almeno", "alogeno", "alpaca", "alpestre", "altalena", "alterno", "alticcio",
39258"altrove", "alunno", "alveolo", "alzare", "amalgama", "amanita", "amarena", "ambito", "ambrato", "ameba",
39259"america", "ametista", "amico", "ammasso", "ammenda", "ammirare", "ammonito", "amore", "ampio", "ampliare",
39260"amuleto", "anacardo", "anagrafe", "analista", "anarchia", "anatra", "anca", "ancella", "ancora", "andare",
39261"andrea", "anello", "angelo", "angolare", "angusto", "anima", "annegare", "annidato", "anno", "annuncio",
39262"anonimo", "anticipo", "anzi", "apatico", "apertura", "apode", "apparire", "appetito", "appoggio", "approdo",
39263"appunto", "aprile", "arabica", "arachide", "aragosta", "araldica", "arancio", "aratura", "arazzo", "arbitro",
39264"archivio", "ardito", "arenile", "argento", "argine", "arguto", "aria", "armonia", "arnese", "arredato",
39265"arringa", "arrosto", "arsenico", "arso", "artefice", "arzillo", "asciutto", "ascolto", "asepsi", "asettico",
39266"asfalto", "asino", "asola", "aspirato", "aspro", "assaggio", "asse", "assoluto", "assurdo", "asta",
39267"astenuto", "astice", "astratto", "atavico", "ateismo", "atomico", "atono", "attesa", "attivare", "attorno",
39268"attrito", "attuale", "ausilio", "austria", "autista", "autonomo", "autunno", "avanzato", "avere", "avvenire",
39269"avviso", "avvolgere", "azione", "azoto", "azzimo", "azzurro", "babele", "baccano", "bacino", "baco",
39270"badessa", "badilata", "bagnato", "baita", "balcone", "baldo", "balena", "ballata", "balzano", "bambino",
39271"bandire", "baraonda", "barbaro", "barca", "baritono", "barlume", "barocco", "basilico", "basso", "batosta",
39272"battuto", "baule", "bava", "bavosa", "becco", "beffa", "belgio", "belva", "benda", "benevole",
39273"benigno", "benzina", "bere", "berlina", "beta", "bibita", "bici", "bidone", "bifido", "biga",
39274"bilancia", "bimbo", "binocolo", "biologo", "bipede", "bipolare", "birbante", "birra", "biscotto", "bisesto",
39275"bisnonno", "bisonte", "bisturi", "bizzarro", "blando", "blatta", "bollito", "bonifico", "bordo", "bosco",
39276"botanico", "bottino", "bozzolo", "braccio", "bradipo", "brama", "branca", "bravura", "bretella", "brevetto",
39277"brezza", "briglia", "brillante", "brindare", "broccolo", "brodo", "bronzina", "brullo", "bruno", "bubbone",
39278"buca", "budino", "buffone", "buio", "bulbo", "buono", "burlone", "burrasca", "bussola", "busta",
39279"cadetto", "caduco", "calamaro", "calcolo", "calesse", "calibro", "calmo", "caloria", "cambusa", "camerata",
39280"camicia", "cammino", "camola", "campale", "canapa", "candela", "cane", "canino", "canotto", "cantina",
39281"capace", "capello", "capitolo", "capogiro", "cappero", "capra", "capsula", "carapace", "carcassa", "cardo",
39282"carisma", "carovana", "carretto", "cartolina", "casaccio", "cascata", "caserma", "caso", "cassone", "castello",
39283"casuale", "catasta", "catena", "catrame", "cauto", "cavillo", "cedibile", "cedrata", "cefalo", "celebre",
39284"cellulare", "cena", "cenone", "centesimo", "ceramica", "cercare", "certo", "cerume", "cervello", "cesoia",
39285"cespo", "ceto", "chela", "chiaro", "chicca", "chiedere", "chimera", "china", "chirurgo", "chitarra",
39286"ciao", "ciclismo", "cifrare", "cigno", "cilindro", "ciottolo", "circa", "cirrosi", "citrico", "cittadino",
39287"ciuffo", "civetta", "civile", "classico", "clinica", "cloro", "cocco", "codardo", "codice", "coerente",
39288"cognome", "collare", "colmato", "colore", "colposo", "coltivato", "colza", "coma", "cometa", "commando",
39289"comodo", "computer", "comune", "conciso", "condurre", "conferma", "congelare", "coniuge", "connesso", "conoscere",
39290"consumo", "continuo", "convegno", "coperto", "copione", "coppia", "copricapo", "corazza", "cordata", "coricato",
39291"cornice", "corolla", "corpo", "corredo", "corsia", "cortese", "cosmico", "costante", "cottura", "covato",
39292"cratere", "cravatta", "creato", "credere", "cremoso", "crescita", "creta", "criceto", "crinale", "crisi",
39293"critico", "croce", "cronaca", "crostata", "cruciale", "crusca", "cucire", "cuculo", "cugino", "cullato",
39294"cupola", "curatore", "cursore", "curvo", "cuscino", "custode", "dado", "daino", "dalmata", "damerino",
39295"daniela", "dannoso", "danzare", "datato", "davanti", "davvero", "debutto", "decennio", "deciso", "declino",
39296"decollo", "decreto", "dedicato", "definito", "deforme", "degno", "delegare", "delfino", "delirio", "delta",
39297"demenza", "denotato", "dentro", "deposito", "derapata", "derivare", "deroga", "descritto", "deserto", "desiderio",
39298"desumere", "detersivo", "devoto", "diametro", "dicembre", "diedro", "difeso", "diffuso", "digerire", "digitale",
39299"diluvio", "dinamico", "dinnanzi", "dipinto", "diploma", "dipolo", "diradare", "dire", "dirotto", "dirupo",
39300"disagio", "discreto", "disfare", "disgelo", "disposto", "distanza", "disumano", "dito", "divano", "divelto",
39301"dividere", "divorato", "doblone", "docente", "doganale", "dogma", "dolce", "domato", "domenica", "dominare",
39302"dondolo", "dono", "dormire", "dote", "dottore", "dovuto", "dozzina", "drago", "druido", "dubbio",
39303"dubitare", "ducale", "duna", "duomo", "duplice", "duraturo", "ebano", "eccesso", "ecco", "eclissi",
39304"economia", "edera", "edicola", "edile", "editoria", "educare", "egemonia", "egli", "egoismo", "egregio",
39305"elaborato", "elargire", "elegante", "elencato", "eletto", "elevare", "elfico", "elica", "elmo", "elsa",
39306"eluso", "emanato", "emblema", "emesso", "emiro", "emotivo", "emozione", "empirico", "emulo", "endemico",
39307"enduro", "energia", "enfasi", "enoteca", "entrare", "enzima", "epatite", "epilogo", "episodio", "epocale",
39308"eppure", "equatore", "erario", "erba", "erboso", "erede", "eremita", "erigere", "ermetico", "eroe",
39309"erosivo", "errante", "esagono", "esame", "esanime", "esaudire", "esca", "esempio", "esercito", "esibito",
39310"esigente", "esistere", "esito", "esofago", "esortato", "esoso", "espanso", "espresso", "essenza", "esso",
39311"esteso", "estimare", "estonia", "estroso", "esultare", "etilico", "etnico", "etrusco", "etto", "euclideo",
39312"europa", "evaso", "evidenza", "evitato", "evoluto", "evviva", "fabbrica", "faccenda", "fachiro", "falco",
39313"famiglia", "fanale", "fanfara", "fango", "fantasma", "fare", "farfalla", "farinoso", "farmaco", "fascia",
39314"fastoso", "fasullo", "faticare", "fato", "favoloso", "febbre", "fecola", "fede", "fegato", "felpa",
39315"feltro", "femmina", "fendere", "fenomeno", "fermento", "ferro", "fertile", "fessura", "festivo", "fetta",
39316"feudo", "fiaba", "fiducia", "fifa", "figurato", "filo", "finanza", "finestra", "finire", "fiore",
39317"fiscale", "fisico", "fiume", "flacone", "flamenco", "flebo", "flemma", "florido", "fluente", "fluoro",
39318"fobico", "focaccia", "focoso", "foderato", "foglio", "folata", "folclore", "folgore", "fondente", "fonetico",
39319"fonia", "fontana", "forbito", "forchetta", "foresta", "formica", "fornaio", "foro", "fortezza", "forzare",
39320"fosfato", "fosso", "fracasso", "frana", "frassino", "fratello", "freccetta", "frenata", "fresco", "frigo",
39321"frollino", "fronde", "frugale", "frutta", "fucilata", "fucsia", "fuggente", "fulmine", "fulvo", "fumante",
39322"fumetto", "fumoso", "fune", "funzione", "fuoco", "furbo", "furgone", "furore", "fuso", "futile",
39323"gabbiano", "gaffe", "galateo", "gallina", "galoppo", "gambero", "gamma", "garanzia", "garbo", "garofano",
39324"garzone", "gasdotto", "gasolio", "gastrico", "gatto", "gaudio", "gazebo", "gazzella", "geco", "gelatina",
39325"gelso", "gemello", "gemmato", "gene", "genitore", "gennaio", "genotipo", "gergo", "ghepardo", "ghiaccio",
39326"ghisa", "giallo", "gilda", "ginepro", "giocare", "gioiello", "giorno", "giove", "girato", "girone",
39327"gittata", "giudizio", "giurato", "giusto", "globulo", "glutine", "gnomo", "gobba", "golf", "gomito",
39328"gommone", "gonfio", "gonna", "governo", "gracile", "grado", "grafico", "grammo", "grande", "grattare",
39329"gravoso", "grazia", "greca", "gregge", "grifone", "grigio", "grinza", "grotta", "gruppo", "guadagno",
39330"guaio", "guanto", "guardare", "gufo", "guidare", "ibernato", "icona", "identico", "idillio", "idolo",
39331"idra", "idrico", "idrogeno", "igiene", "ignaro", "ignorato", "ilare", "illeso", "illogico", "illudere",
39332"imballo", "imbevuto", "imbocco", "imbuto", "immane", "immerso", "immolato", "impacco", "impeto", "impiego",
39333"importo", "impronta", "inalare", "inarcare", "inattivo", "incanto", "incendio", "inchino", "incisivo", "incluso",
39334"incontro", "incrocio", "incubo", "indagine", "india", "indole", "inedito", "infatti", "infilare", "inflitto",
39335"ingaggio", "ingegno", "inglese", "ingordo", "ingrosso", "innesco", "inodore", "inoltrare", "inondato", "insano",
39336"insetto", "insieme", "insonnia", "insulina", "intasato", "intero", "intonaco", "intuito", "inumidire", "invalido",
39337"invece", "invito", "iperbole", "ipnotico", "ipotesi", "ippica", "iride", "irlanda", "ironico", "irrigato",
39338"irrorare", "isolato", "isotopo", "isterico", "istituto", "istrice", "italia", "iterare", "labbro", "labirinto",
39339"lacca", "lacerato", "lacrima", "lacuna", "laddove", "lago", "lampo", "lancetta", "lanterna", "lardoso",
39340"larga", "laringe", "lastra", "latenza", "latino", "lattuga", "lavagna", "lavoro", "legale", "leggero",
39341"lembo", "lentezza", "lenza", "leone", "lepre", "lesivo", "lessato", "lesto", "letterale", "leva",
39342"levigato", "libero", "lido", "lievito", "lilla", "limatura", "limitare", "limpido", "lineare", "lingua",
39343"liquido", "lira", "lirica", "lisca", "lite", "litigio", "livrea", "locanda", "lode", "logica",
39344"lombare", "londra", "longevo", "loquace", "lorenzo", "loto", "lotteria", "luce", "lucidato", "lumaca",
39345"luminoso", "lungo", "lupo", "luppolo", "lusinga", "lusso", "lutto", "macabro", "macchina", "macero",
39346"macinato", "madama", "magico", "maglia", "magnete", "magro", "maiolica", "malafede", "malgrado", "malinteso",
39347"malsano", "malto", "malumore", "mana", "mancia", "mandorla", "mangiare", "manifesto", "mannaro", "manovra",
39348"mansarda", "mantide", "manubrio", "mappa", "maratona", "marcire", "maretta", "marmo", "marsupio", "maschera",
39349"massaia", "mastino", "materasso", "matricola", "mattone", "maturo", "mazurca", "meandro", "meccanico", "mecenate",
39350"medesimo", "meditare", "mega", "melassa", "melis", "melodia", "meninge", "meno", "mensola", "mercurio",
39351"merenda", "merlo", "meschino", "mese", "messere", "mestolo", "metallo", "metodo", "mettere", "miagolare",
39352"mica", "micelio", "michele", "microbo", "midollo", "miele", "migliore", "milano", "milite", "mimosa",
39353"minerale", "mini", "minore", "mirino", "mirtillo", "miscela", "missiva", "misto", "misurare", "mitezza",
39354"mitigare", "mitra", "mittente", "mnemonico", "modello", "modifica", "modulo", "mogano", "mogio", "mole",
39355"molosso", "monastero", "monco", "mondina", "monetario", "monile", "monotono", "monsone", "montato", "monviso",
39356"mora", "mordere", "morsicato", "mostro", "motivato", "motosega", "motto", "movenza", "movimento", "mozzo",
39357"mucca", "mucosa", "muffa", "mughetto", "mugnaio", "mulatto", "mulinello", "multiplo", "mummia", "munto",
39358"muovere", "murale", "musa", "muscolo", "musica", "mutevole", "muto", "nababbo", "nafta", "nanometro",
39359"narciso", "narice", "narrato", "nascere", "nastrare", "naturale", "nautica", "naviglio", "nebulosa", "necrosi",
39360"negativo", "negozio", "nemmeno", "neofita", "neretto", "nervo", "nessuno", "nettuno", "neutrale", "neve",
39361"nevrotico", "nicchia", "ninfa", "nitido", "nobile", "nocivo", "nodo", "nome", "nomina", "nordico",
39362"normale", "norvegese", "nostrano", "notare", "notizia", "notturno", "novella", "nucleo", "nulla", "numero",
39363"nuovo", "nutrire", "nuvola", "nuziale", "oasi", "obbedire", "obbligo", "obelisco", "oblio", "obolo",
39364"obsoleto", "occasione", "occhio", "occidente", "occorrere", "occultare", "ocra", "oculato", "odierno", "odorare",
39365"offerta", "offrire", "offuscato", "oggetto", "oggi", "ognuno", "olandese", "olfatto", "oliato", "oliva",
39366"ologramma", "oltre", "omaggio", "ombelico", "ombra", "omega", "omissione", "ondoso", "onere", "onice",
39367"onnivoro", "onorevole", "onta", "operato", "opinione", "opposto", "oracolo", "orafo", "ordine", "orecchino",
39368"orefice", "orfano", "organico", "origine", "orizzonte", "orma", "ormeggio", "ornativo", "orologio", "orrendo",
39369"orribile", "ortensia", "ortica", "orzata", "orzo", "osare", "oscurare", "osmosi", "ospedale", "ospite",
39370"ossa", "ossidare", "ostacolo", "oste", "otite", "otre", "ottagono", "ottimo", "ottobre", "ovale",
39371"ovest", "ovino", "oviparo", "ovocito", "ovunque", "ovviare", "ozio", "pacchetto", "pace", "pacifico",
39372"padella", "padrone", "paese", "paga", "pagina", "palazzina", "palesare", "pallido", "palo", "palude",
39373"pandoro", "pannello", "paolo", "paonazzo", "paprica", "parabola", "parcella", "parere", "pargolo", "pari",
39374"parlato", "parola", "partire", "parvenza", "parziale", "passivo", "pasticca", "patacca", "patologia", "pattume",
39375"pavone", "peccato", "pedalare", "pedonale", "peggio", "peloso", "penare", "pendice", "penisola", "pennuto",
39376"penombra", "pensare", "pentola", "pepe", "pepita", "perbene", "percorso", "perdonato", "perforare", "pergamena",
39377"periodo", "permesso", "perno", "perplesso", "persuaso", "pertugio", "pervaso", "pesatore", "pesista", "peso",
39378"pestifero", "petalo", "pettine", "petulante", "pezzo", "piacere", "pianta", "piattino", "piccino", "picozza",
39379"piega", "pietra", "piffero", "pigiama", "pigolio", "pigro", "pila", "pilifero", "pillola", "pilota",
39380"pimpante", "pineta", "pinna", "pinolo", "pioggia", "piombo", "piramide", "piretico", "pirite", "pirolisi",
39381"pitone", "pizzico", "placebo", "planare", "plasma", "platano", "plenario", "pochezza", "poderoso", "podismo",
39382"poesia", "poggiare", "polenta", "poligono", "pollice", "polmonite", "polpetta", "polso", "poltrona", "polvere",
39383"pomice", "pomodoro", "ponte", "popoloso", "porfido", "poroso", "porpora", "porre", "portata", "posa",
39384"positivo", "possesso", "postulato", "potassio", "potere", "pranzo", "prassi", "pratica", "precluso", "predica",
39385"prefisso", "pregiato", "prelievo", "premere", "prenotare", "preparato", "presenza", "pretesto", "prevalso", "prima",
39386"principe", "privato", "problema", "procura", "produrre", "profumo", "progetto", "prolunga", "promessa", "pronome",
39387"proposta", "proroga", "proteso", "prova", "prudente", "prugna", "prurito", "psiche", "pubblico", "pudica",
39388"pugilato", "pugno", "pulce", "pulito", "pulsante", "puntare", "pupazzo", "pupilla", "puro", "quadro",
39389"qualcosa", "quasi", "querela", "quota", "raccolto", "raddoppio", "radicale", "radunato", "raffica", "ragazzo",
39390"ragione", "ragno", "ramarro", "ramingo", "ramo", "randagio", "rantolare", "rapato", "rapina", "rappreso",
39391"rasatura", "raschiato", "rasente", "rassegna", "rastrello", "rata", "ravveduto", "reale", "recepire", "recinto",
39392"recluta", "recondito", "recupero", "reddito", "redimere", "regalato", "registro", "regola", "regresso", "relazione",
39393"remare", "remoto", "renna", "replica", "reprimere", "reputare", "resa", "residente", "responso", "restauro",
39394"rete", "retina", "retorica", "rettifica", "revocato", "riassunto", "ribadire", "ribelle", "ribrezzo", "ricarica",
39395"ricco", "ricevere", "riciclato", "ricordo", "ricreduto", "ridicolo", "ridurre", "rifasare", "riflesso", "riforma",
39396"rifugio", "rigare", "rigettato", "righello", "rilassato", "rilevato", "rimanere", "rimbalzo", "rimedio", "rimorchio",
39397"rinascita", "rincaro", "rinforzo", "rinnovo", "rinomato", "rinsavito", "rintocco", "rinuncia", "rinvenire", "riparato",
39398"ripetuto", "ripieno", "riportare", "ripresa", "ripulire", "risata", "rischio", "riserva", "risibile", "riso",
39399"rispetto", "ristoro", "risultato", "risvolto", "ritardo", "ritegno", "ritmico", "ritrovo", "riunione", "riva",
39400"riverso", "rivincita", "rivolto", "rizoma", "roba", "robotico", "robusto", "roccia", "roco", "rodaggio",
39401"rodere", "roditore", "rogito", "rollio", "romantico", "rompere", "ronzio", "rosolare", "rospo", "rotante",
39402"rotondo", "rotula", "rovescio", "rubizzo", "rubrica", "ruga", "rullino", "rumine", "rumoroso", "ruolo",
39403"rupe", "russare", "rustico", "sabato", "sabbiare", "sabotato", "sagoma", "salasso", "saldatura", "salgemma",
39404"salivare", "salmone", "salone", "saltare", "saluto", "salvo", "sapere", "sapido", "saporito", "saraceno",
39405"sarcasmo", "sarto", "sassoso", "satellite", "satira", "satollo", "saturno", "savana", "savio", "saziato",
39406"sbadiglio", "sbalzo", "sbancato", "sbarra", "sbattere", "sbavare", "sbendare", "sbirciare", "sbloccato", "sbocciato",
39407"sbrinare", "sbruffone", "sbuffare", "scabroso", "scadenza", "scala", "scambiare", "scandalo", "scapola", "scarso",
39408"scatenare", "scavato", "scelto", "scenico", "scettro", "scheda", "schiena", "sciarpa", "scienza", "scindere",
39409"scippo", "sciroppo", "scivolo", "sclerare", "scodella", "scolpito", "scomparto", "sconforto", "scoprire", "scorta",
39410"scossone", "scozzese", "scriba", "scrollare", "scrutinio", "scuderia", "scultore", "scuola", "scuro", "scusare",
39411"sdebitare", "sdoganare", "seccatura", "secondo", "sedano", "seggiola", "segnalato", "segregato", "seguito", "selciato",
39412"selettivo", "sella", "selvaggio", "semaforo", "sembrare", "seme", "seminato", "sempre", "senso", "sentire",
39413"sepolto", "sequenza", "serata", "serbato", "sereno", "serio", "serpente", "serraglio", "servire", "sestina",
39414"setola", "settimana", "sfacelo", "sfaldare", "sfamato", "sfarzoso", "sfaticato", "sfera", "sfida", "sfilato",
39415"sfinge", "sfocato", "sfoderare", "sfogo", "sfoltire", "sforzato", "sfratto", "sfruttato", "sfuggito", "sfumare",
39416"sfuso", "sgabello", "sgarbato", "sgonfiare", "sgorbio", "sgrassato", "sguardo", "sibilo", "siccome", "sierra",
39417"sigla", "signore", "silenzio", "sillaba", "simbolo", "simpatico", "simulato", "sinfonia", "singolo", "sinistro",
39418"sino", "sintesi", "sinusoide", "sipario", "sisma", "sistole", "situato", "slitta", "slogatura", "sloveno",
39419"smarrito", "smemorato", "smentito", "smeraldo", "smilzo", "smontare", "smottato", "smussato", "snellire", "snervato",
39420"snodo", "sobbalzo", "sobrio", "soccorso", "sociale", "sodale", "soffitto", "sogno", "soldato", "solenne",
39421"solido", "sollazzo", "solo", "solubile", "solvente", "somatico", "somma", "sonda", "sonetto", "sonnifero",
39422"sopire", "soppeso", "sopra", "sorgere", "sorpasso", "sorriso", "sorso", "sorteggio", "sorvolato", "sospiro",
39423"sosta", "sottile", "spada", "spalla", "spargere", "spatola", "spavento", "spazzola", "specie", "spedire",
39424"spegnere", "spelatura", "speranza", "spessore", "spettrale", "spezzato", "spia", "spigoloso", "spillato", "spinoso",
39425"spirale", "splendido", "sportivo", "sposo", "spranga", "sprecare", "spronato", "spruzzo", "spuntino", "squillo",
39426"sradicare", "srotolato", "stabile", "stacco", "staffa", "stagnare", "stampato", "stantio", "starnuto", "stasera",
39427"statuto", "stelo", "steppa", "sterzo", "stiletto", "stima", "stirpe", "stivale", "stizzoso", "stonato",
39428"storico", "strappo", "stregato", "stridulo", "strozzare", "strutto", "stuccare", "stufo", "stupendo", "subentro",
39429"succoso", "sudore", "suggerito", "sugo", "sultano", "suonare", "superbo", "supporto", "surgelato", "surrogato",
39430"sussurro", "sutura", "svagare", "svedese", "sveglio", "svelare", "svenuto", "svezia", "sviluppo", "svista",
39431"svizzera", "svolta", "svuotare", "tabacco", "tabulato", "tacciare", "taciturno", "tale", "talismano", "tampone",
39432"tannino", "tara", "tardivo", "targato", "tariffa", "tarpare", "tartaruga", "tasto", "tattico", "taverna",
39433"tavolata", "tazza", "teca", "tecnico", "telefono", "temerario", "tempo", "temuto", "tendone", "tenero",
39434"tensione", "tentacolo", "teorema", "terme", "terrazzo", "terzetto", "tesi", "tesserato", "testato", "tetro",
39435"tettoia", "tifare", "tigella", "timbro", "tinto", "tipico", "tipografo", "tiraggio", "tiro", "titanio",
39436"titolo", "titubante", "tizio", "tizzone", "toccare", "tollerare", "tolto", "tombola", "tomo", "tonfo",
39437"tonsilla", "topazio", "topologia", "toppa", "torba", "tornare", "torrone", "tortora", "toscano", "tossire",
39438"tostatura", "totano", "trabocco", "trachea", "trafila", "tragedia", "tralcio", "tramonto", "transito", "trapano",
39439"trarre", "trasloco", "trattato", "trave", "treccia", "tremolio", "trespolo", "tributo", "tricheco", "trifoglio",
39440"trillo", "trincea", "trio", "tristezza", "triturato", "trivella", "tromba", "trono", "troppo", "trottola",
39441"trovare", "truccato", "tubatura", "tuffato", "tulipano", "tumulto", "tunisia", "turbare", "turchino", "tuta",
39442"tutela", "ubicato", "uccello", "uccisore", "udire", "uditivo", "uffa", "ufficio", "uguale", "ulisse",
39443"ultimato", "umano", "umile", "umorismo", "uncinetto", "ungere", "ungherese", "unicorno", "unificato", "unisono",
39444"unitario", "unte", "uovo", "upupa", "uragano", "urgenza", "urlo", "usanza", "usato", "uscito",
39445"usignolo", "usuraio", "utensile", "utilizzo", "utopia", "vacante", "vaccinato", "vagabondo", "vagliato", "valanga",
39446"valgo", "valico", "valletta", "valoroso", "valutare", "valvola", "vampata", "vangare", "vanitoso", "vano",
39447"vantaggio", "vanvera", "vapore", "varano", "varcato", "variante", "vasca", "vedetta", "vedova", "veduto",
39448"vegetale", "veicolo", "velcro", "velina", "velluto", "veloce", "venato", "vendemmia", "vento", "verace",
39449"verbale", "vergogna", "verifica", "vero", "verruca", "verticale", "vescica", "vessillo", "vestale", "veterano",
39450"vetrina", "vetusto", "viandante", "vibrante", "vicenda", "vichingo", "vicinanza", "vidimare", "vigilia", "vigneto",
39451"vigore", "vile", "villano", "vimini", "vincitore", "viola", "vipera", "virgola", "virologo", "virulento",
39452"viscoso", "visione", "vispo", "vissuto", "visura", "vita", "vitello", "vittima", "vivanda", "vivido",
39453"viziare", "voce", "voga", "volatile", "volere", "volpe", "voragine", "vulcano", "zampogna", "zanna",
39454"zappato", "zattera", "zavorra", "zefiro", "zelante", "zelo", "zenzero", "zerbino", "zibetto", "zinco",
39455"zircone", "zitto", "zolla", "zotico", "zucchero", "zufolo", "zulu", "zuppa"]
dc55c6b0 39456</script>
ab78acc6 39457 <script>/*
3af2954a
IC
39458 * Copyright (c) 2013 Pavol Rusnak
39459 *
39460 * Permission is hereby granted, free of charge, to any person obtaining a copy of
39461 * this software and associated documentation files (the "Software"), to deal in
39462 * the Software without restriction, including without limitation the rights to
39463 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
39464 * of the Software, and to permit persons to whom the Software is furnished to do
39465 * so, subject to the following conditions:
39466 *
39467 * The above copyright notice and this permission notice shall be included in all
39468 * copies or substantial portions of the Software.
39469 *
39470 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
39471 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
39472 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
39473 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
39474 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
39475 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
39476 */
39477
39478/*
39479 * Javascript port from python by Ian Coleman
39480 *
80c4dd2a
IC
39481 * Requires code from sjcl
39482 * https://github.com/bitwiseshiftleft/sjcl
3af2954a
IC
39483 */
39484
39485var Mnemonic = function(language) {
39486
39487 var PBKDF2_ROUNDS = 2048;
39488 var RADIX = 2048;
39489
39490 var self = this;
39491 var wordlist = [];
39492
80c4dd2a
IC
39493 var hmacSHA512 = function(key) {
39494 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
39495 this.encrypt = function() {
39496 return hasher.encrypt.apply(hasher, arguments);
39497 };
39498 };
39499
3af2954a
IC
39500 function init() {
39501 wordlist = WORDLISTS[language];
39502 if (wordlist.length != RADIX) {
39503 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
39504 throw err;
39505 }
39506 }
39507
39508 self.generate = function(strength) {
39509 strength = strength || 128;
39510 var r = strength % 32;
39511 if (r > 0) {
39512 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
39513 }
39514 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
39515 if (!hasStrongCrypto) {
39516 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
39517 }
39518 var buffer = new Uint8Array(strength / 8);
39519 var data = crypto.getRandomValues(buffer);
39520 return self.toMnemonic(data);
39521 }
39522
80c4dd2a
IC
39523 self.toMnemonic = function(byteArray) {
39524 if (byteArray.length % 4 > 0) {
39525 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
3af2954a
IC
39526 }
39527
39528 //h = hashlib.sha256(data).hexdigest()
80c4dd2a
IC
39529 var data = byteArrayToWordArray(byteArray);
39530 var hash = sjcl.hash.sha256.hash(data);
39531 var h = sjcl.codec.hex.fromBits(hash);
3af2954a
IC
39532
39533 // b is a binary string, eg '00111010101100...'
39534 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
39535 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
39536 //
39537 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
39538 // c = bin(int(h, 16))[2:].zfill(256)
39539 // d = c[:len(data) * 8 / 32]
80c4dd2a
IC
39540 var a = byteArrayToBinaryString(byteArray);
39541 var c = zfill(hexStringToBinaryString(h), 256);
39542 var d = c.substring(0, byteArray.length * 8 / 32);
3af2954a
IC
39543 // b = line1 + line2
39544 var b = a + d;
39545
39546 var result = [];
39547 var blen = b.length / 11;
39548 for (var i=0; i<blen; i++) {
39549 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
39550 result.push(wordlist[idx]);
39551 }
0515eeec 39552 return self.joinWords(result);
3af2954a
IC
39553 }
39554
39555 self.check = function(mnemonic) {
0515eeec 39556 var mnemonic = self.splitWords(mnemonic);
18abe53b 39557 if (mnemonic.length == 0 || mnemonic.length % 3 > 0) {
3af2954a
IC
39558 return false
39559 }
39560 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
39561 var idx = [];
39562 for (var i=0; i<mnemonic.length; i++) {
39563 var word = mnemonic[i];
39564 var wordIndex = wordlist.indexOf(word);
39565 if (wordIndex == -1) {
39566 return false;
39567 }
39568 var binaryIndex = zfill(wordIndex.toString(2), 11);
39569 idx.push(binaryIndex);
39570 }
39571 var b = idx.join('');
39572 var l = b.length;
39573 //d = b[:l / 33 * 32]
39574 //h = b[-l / 33:]
39575 var d = b.substring(0, l / 33 * 32);
39576 var h = b.substring(l - l / 33, l);
39577 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
80c4dd2a 39578 var nd = binaryStringToWordArray(d);
3af2954a 39579 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
80c4dd2a
IC
39580 var ndHash = sjcl.hash.sha256.hash(nd);
39581 var ndHex = sjcl.codec.hex.fromBits(ndHash);
39582 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
3af2954a
IC
39583 var nh = ndBstr.substring(0,l/33);
39584 return h == nh;
39585 }
39586
39587 self.toSeed = function(mnemonic, passphrase) {
39588 passphrase = passphrase || '';
599fb39e
IC
39589 mnemonic = self.joinWords(self.splitWords(mnemonic)); // removes duplicate blanks
39590 var mnemonicNormalized = self.normalizeString(mnemonic);
3af2954a
IC
39591 passphrase = self.normalizeString(passphrase)
39592 passphrase = "mnemonic" + passphrase;
599fb39e 39593 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonicNormalized);
80c4dd2a
IC
39594 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
39595 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
39596 var hashHex = sjcl.codec.hex.fromBits(result);
39597 return hashHex;
3af2954a
IC
39598 }
39599
0515eeec
IC
39600 self.splitWords = function(mnemonic) {
39601 return mnemonic.split(/\s/g).filter(function(x) { return x.length; });
39602 }
39603
39604 self.joinWords = function(words) {
39605 // Set space correctly depending on the language
39606 // see https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md#japanese
39607 var space = " ";
39608 if (language == "japanese") {
39609 space = "\u3000"; // ideographic space
39610 }
39611 return words.join(space);
39612 }
39613
3af2954a
IC
39614 self.normalizeString = function(str) {
39615 if (typeof str.normalize == "function") {
39616 return str.normalize("NFKD");
39617 }
39618 else {
39619 // TODO decide how to handle this in the future.
39620 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
39621 return str;
39622 }
39623 }
39624
80c4dd2a
IC
39625 function byteArrayToWordArray(data) {
39626 var a = [];
39627 for (var i=0; i<data.length/4; i++) {
39628 v = 0;
39629 v += data[i*4 + 0] << 8 * 3;
39630 v += data[i*4 + 1] << 8 * 2;
39631 v += data[i*4 + 2] << 8 * 1;
39632 v += data[i*4 + 3] << 8 * 0;
39633 a.push(v);
39634 }
39635 return a;
39636 }
39637
3af2954a
IC
39638 function byteArrayToBinaryString(data) {
39639 var bin = "";
39640 for (var i=0; i<data.length; i++) {
39641 bin += zfill(data[i].toString(2), 8);
39642 }
39643 return bin;
39644 }
39645
80c4dd2a
IC
39646 function hexStringToBinaryString(hexString) {
39647 binaryString = "";
39648 for (var i=0; i<hexString.length; i++) {
39649 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
39650 }
39651 return binaryString;
39652 }
39653
39654 function binaryStringToWordArray(binary) {
39655 var aLen = binary.length / 32;
39656 var a = [];
39657 for (var i=0; i<aLen; i++) {
39658 var valueStr = binary.substring(0,32);
3af2954a 39659 var value = parseInt(valueStr, 2);
80c4dd2a
IC
39660 a.push(value);
39661 binary = binary.slice(32);
3af2954a 39662 }
80c4dd2a 39663 return a;
3af2954a
IC
39664 }
39665
39666 // Pad a numeric string on the left with zero digits until the given width
39667 // is reached.
39668 // Note this differs to the python implementation because it does not
39669 // handle numbers starting with a sign.
39670 function zfill(source, length) {
39671 source = source.toString();
39672 while (source.length < length) {
39673 source = '0' + source;
39674 }
39675 return source;
39676 }
39677
39678 init();
ebd8d4e8 39679
3af2954a 39680}
dc55c6b0 39681</script>
95f04905
IC
39682 <script>/*
39683 JavaScript BigInteger library version 0.9.1
39684 http://silentmatt.com/biginteger/
18abe53b 39685
95f04905
IC
39686 Copyright (c) 2009 Matthew Crumley <email@matthewcrumley.com>
39687 Copyright (c) 2010,2011 by John Tobey <John.Tobey@gmail.com>
39688 Licensed under the MIT license.
c6624d51 39689
95f04905
IC
39690 Support for arbitrary internal representation base was added by
39691 Vitaly Magerya.
39692*/
18abe53b 39693
95f04905
IC
39694/*
39695 File: biginteger.js
18abe53b 39696
95f04905 39697 Exports:
18abe53b 39698
95f04905
IC
39699 <BigInteger>
39700*/
39701(function(exports) {
39702"use strict";
39703/*
39704 Class: BigInteger
39705 An arbitrarily-large integer.
18abe53b 39706
95f04905
IC
39707 <BigInteger> objects should be considered immutable. None of the "built-in"
39708 methods modify *this* or their arguments. All properties should be
39709 considered private.
18abe53b 39710
95f04905
IC
39711 All the methods of <BigInteger> instances can be called "statically". The
39712 static versions are convenient if you don't already have a <BigInteger>
39713 object.
18abe53b 39714
95f04905 39715 As an example, these calls are equivalent.
18abe53b 39716
95f04905
IC
39717 > BigInteger(4).multiply(5); // returns BigInteger(20);
39718 > BigInteger.multiply(4, 5); // returns BigInteger(20);
18abe53b 39719
95f04905
IC
39720 > var a = 42;
39721 > var a = BigInteger.toJSValue("0b101010"); // Not completely useless...
39722*/
c6624d51 39723
95f04905 39724var CONSTRUCT = {}; // Unique token to call "private" version of constructor
c6624d51
IC
39725
39726/*
39727 Constructor: BigInteger()
39728 Convert a value to a <BigInteger>.
39729
39730 Although <BigInteger()> is the constructor for <BigInteger> objects, it is
39731 best not to call it as a constructor. If *n* is a <BigInteger> object, it is
39732 simply returned as-is. Otherwise, <BigInteger()> is equivalent to <parse>
39733 without a radix argument.
39734
39735 > var n0 = BigInteger(); // Same as <BigInteger.ZERO>
39736 > var n1 = BigInteger("123"); // Create a new <BigInteger> with value 123
39737 > var n2 = BigInteger(123); // Create a new <BigInteger> with value 123
39738 > var n3 = BigInteger(n2); // Return n2, unchanged
39739
39740 The constructor form only takes an array and a sign. *n* must be an
39741 array of numbers in little-endian order, where each digit is between 0
39742 and BigInteger.base. The second parameter sets the sign: -1 for
39743 negative, +1 for positive, or 0 for zero. The array is *not copied and
39744 may be modified*. If the array contains only zeros, the sign parameter
39745 is ignored and is forced to zero.
39746
39747 > new BigInteger([5], -1): create a new BigInteger with value -5
39748
39749 Parameters:
39750
39751 n - Value to convert to a <BigInteger>.
39752
39753 Returns:
39754
39755 A <BigInteger> value.
39756
39757 See Also:
39758
39759 <parse>, <BigInteger>
39760*/
39761function BigInteger(n, s, token) {
39762 if (token !== CONSTRUCT) {
39763 if (n instanceof BigInteger) {
39764 return n;
39765 }
39766 else if (typeof n === "undefined") {
39767 return ZERO;
39768 }
39769 return BigInteger.parse(n);
39770 }
39771
39772 n = n || []; // Provide the nullary constructor for subclasses.
39773 while (n.length && !n[n.length - 1]) {
39774 --n.length;
39775 }
39776 this._d = n;
39777 this._s = n.length ? (s || 1) : 0;
39778}
39779
39780BigInteger._construct = function(n, s) {
39781 return new BigInteger(n, s, CONSTRUCT);
39782};
39783
39784// Base-10 speedup hacks in parse, toString, exp10 and log functions
39785// require base to be a power of 10. 10^7 is the largest such power
39786// that won't cause a precision loss when digits are multiplied.
39787var BigInteger_base = 10000000;
39788var BigInteger_base_log10 = 7;
39789
39790BigInteger.base = BigInteger_base;
39791BigInteger.base_log10 = BigInteger_base_log10;
39792
39793var ZERO = new BigInteger([], 0, CONSTRUCT);
39794// Constant: ZERO
39795// <BigInteger> 0.
39796BigInteger.ZERO = ZERO;
39797
39798var ONE = new BigInteger([1], 1, CONSTRUCT);
39799// Constant: ONE
39800// <BigInteger> 1.
39801BigInteger.ONE = ONE;
39802
39803var M_ONE = new BigInteger(ONE._d, -1, CONSTRUCT);
39804// Constant: M_ONE
39805// <BigInteger> -1.
39806BigInteger.M_ONE = M_ONE;
39807
39808// Constant: _0
39809// Shortcut for <ZERO>.
39810BigInteger._0 = ZERO;
39811
39812// Constant: _1
39813// Shortcut for <ONE>.
39814BigInteger._1 = ONE;
39815
39816/*
39817 Constant: small
39818 Array of <BigIntegers> from 0 to 36.
39819
39820 These are used internally for parsing, but useful when you need a "small"
39821 <BigInteger>.
39822
39823 See Also:
39824
39825 <ZERO>, <ONE>, <_0>, <_1>
39826*/
39827BigInteger.small = [
39828 ZERO,
39829 ONE,
39830 /* Assuming BigInteger_base > 36 */
39831 new BigInteger( [2], 1, CONSTRUCT),
39832 new BigInteger( [3], 1, CONSTRUCT),
39833 new BigInteger( [4], 1, CONSTRUCT),
39834 new BigInteger( [5], 1, CONSTRUCT),
39835 new BigInteger( [6], 1, CONSTRUCT),
39836 new BigInteger( [7], 1, CONSTRUCT),
39837 new BigInteger( [8], 1, CONSTRUCT),
39838 new BigInteger( [9], 1, CONSTRUCT),
39839 new BigInteger([10], 1, CONSTRUCT),
39840 new BigInteger([11], 1, CONSTRUCT),
39841 new BigInteger([12], 1, CONSTRUCT),
39842 new BigInteger([13], 1, CONSTRUCT),
39843 new BigInteger([14], 1, CONSTRUCT),
39844 new BigInteger([15], 1, CONSTRUCT),
39845 new BigInteger([16], 1, CONSTRUCT),
39846 new BigInteger([17], 1, CONSTRUCT),
39847 new BigInteger([18], 1, CONSTRUCT),
39848 new BigInteger([19], 1, CONSTRUCT),
39849 new BigInteger([20], 1, CONSTRUCT),
39850 new BigInteger([21], 1, CONSTRUCT),
39851 new BigInteger([22], 1, CONSTRUCT),
39852 new BigInteger([23], 1, CONSTRUCT),
39853 new BigInteger([24], 1, CONSTRUCT),
39854 new BigInteger([25], 1, CONSTRUCT),
39855 new BigInteger([26], 1, CONSTRUCT),
39856 new BigInteger([27], 1, CONSTRUCT),
39857 new BigInteger([28], 1, CONSTRUCT),
39858 new BigInteger([29], 1, CONSTRUCT),
39859 new BigInteger([30], 1, CONSTRUCT),
39860 new BigInteger([31], 1, CONSTRUCT),
39861 new BigInteger([32], 1, CONSTRUCT),
39862 new BigInteger([33], 1, CONSTRUCT),
39863 new BigInteger([34], 1, CONSTRUCT),
39864 new BigInteger([35], 1, CONSTRUCT),
39865 new BigInteger([36], 1, CONSTRUCT)
39866];
39867
39868// Used for parsing/radix conversion
39869BigInteger.digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
39870
39871/*
39872 Method: toString
39873 Convert a <BigInteger> to a string.
39874
39875 When *base* is greater than 10, letters are upper case.
39876
39877 Parameters:
39878
39879 base - Optional base to represent the number in (default is base 10).
39880 Must be between 2 and 36 inclusive, or an Error will be thrown.
39881
39882 Returns:
39883
39884 The string representation of the <BigInteger>.
39885*/
39886BigInteger.prototype.toString = function(base) {
39887 base = +base || 10;
39888 if (base < 2 || base > 36) {
39889 throw new Error("illegal radix " + base + ".");
39890 }
39891 if (this._s === 0) {
39892 return "0";
39893 }
39894 if (base === 10) {
39895 var str = this._s < 0 ? "-" : "";
39896 str += this._d[this._d.length - 1].toString();
39897 for (var i = this._d.length - 2; i >= 0; i--) {
39898 var group = this._d[i].toString();
39899 while (group.length < BigInteger_base_log10) group = '0' + group;
39900 str += group;
39901 }
39902 return str;
39903 }
39904 else {
39905 var numerals = BigInteger.digits;
39906 base = BigInteger.small[base];
39907 var sign = this._s;
39908
39909 var n = this.abs();
39910 var digits = [];
39911 var digit;
39912
39913 while (n._s !== 0) {
39914 var divmod = n.divRem(base);
39915 n = divmod[0];
39916 digit = divmod[1];
39917 // TODO: This could be changed to unshift instead of reversing at the end.
39918 // Benchmark both to compare speeds.
39919 digits.push(numerals[digit.valueOf()]);
39920 }
39921 return (sign < 0 ? "-" : "") + digits.reverse().join("");
39922 }
39923};
39924
39925// Verify strings for parsing
39926BigInteger.radixRegex = [
39927 /^$/,
39928 /^$/,
39929 /^[01]*$/,
39930 /^[012]*$/,
39931 /^[0-3]*$/,
39932 /^[0-4]*$/,
39933 /^[0-5]*$/,
39934 /^[0-6]*$/,
39935 /^[0-7]*$/,
39936 /^[0-8]*$/,
39937 /^[0-9]*$/,
39938 /^[0-9aA]*$/,
39939 /^[0-9abAB]*$/,
39940 /^[0-9abcABC]*$/,
39941 /^[0-9a-dA-D]*$/,
39942 /^[0-9a-eA-E]*$/,
39943 /^[0-9a-fA-F]*$/,
39944 /^[0-9a-gA-G]*$/,
39945 /^[0-9a-hA-H]*$/,
39946 /^[0-9a-iA-I]*$/,
39947 /^[0-9a-jA-J]*$/,
39948 /^[0-9a-kA-K]*$/,
39949 /^[0-9a-lA-L]*$/,
39950 /^[0-9a-mA-M]*$/,
39951 /^[0-9a-nA-N]*$/,
39952 /^[0-9a-oA-O]*$/,
39953 /^[0-9a-pA-P]*$/,
39954 /^[0-9a-qA-Q]*$/,
39955 /^[0-9a-rA-R]*$/,
39956 /^[0-9a-sA-S]*$/,
39957 /^[0-9a-tA-T]*$/,
39958 /^[0-9a-uA-U]*$/,
39959 /^[0-9a-vA-V]*$/,
39960 /^[0-9a-wA-W]*$/,
39961 /^[0-9a-xA-X]*$/,
39962 /^[0-9a-yA-Y]*$/,
39963 /^[0-9a-zA-Z]*$/
39964];
39965
39966/*
39967 Function: parse
39968 Parse a string into a <BigInteger>.
39969
39970 *base* is optional but, if provided, must be from 2 to 36 inclusive. If
39971 *base* is not provided, it will be guessed based on the leading characters
39972 of *s* as follows:
39973
39974 - "0x" or "0X": *base* = 16
39975 - "0c" or "0C": *base* = 8
39976 - "0b" or "0B": *base* = 2
39977 - else: *base* = 10
39978
39979 If no base is provided, or *base* is 10, the number can be in exponential
39980 form. For example, these are all valid:
39981
39982 > BigInteger.parse("1e9"); // Same as "1000000000"
39983 > BigInteger.parse("1.234*10^3"); // Same as 1234
39984 > BigInteger.parse("56789 * 10 ** -2"); // Same as 567
39985
39986 If any characters fall outside the range defined by the radix, an exception
39987 will be thrown.
39988
39989 Parameters:
39990
39991 s - The string to parse.
39992 base - Optional radix (default is to guess based on *s*).
39993
39994 Returns:
39995
39996 a <BigInteger> instance.
39997*/
39998BigInteger.parse = function(s, base) {
39999 // Expands a number in exponential form to decimal form.
40000 // expandExponential("-13.441*10^5") === "1344100";
40001 // expandExponential("1.12300e-1") === "0.112300";
40002 // expandExponential(1000000000000000000000000000000) === "1000000000000000000000000000000";
40003 function expandExponential(str) {
40004 str = str.replace(/\s*[*xX]\s*10\s*(\^|\*\*)\s*/, "e");
40005
40006 return str.replace(/^([+\-])?(\d+)\.?(\d*)[eE]([+\-]?\d+)$/, function(x, s, n, f, c) {
40007 c = +c;
40008 var l = c < 0;
40009 var i = n.length + c;
40010 x = (l ? n : f).length;
40011 c = ((c = Math.abs(c)) >= x ? c - x + l : 0);
40012 var z = (new Array(c + 1)).join("0");
40013 var r = n + f;
40014 return (s || "") + (l ? r = z + r : r += z).substr(0, i += l ? z.length : 0) + (i < r.length ? "." + r.substr(i) : "");
40015 });
40016 }
40017
40018 s = s.toString();
40019 if (typeof base === "undefined" || +base === 10) {
40020 s = expandExponential(s);
40021 }
40022
40023 var prefixRE;
40024 if (typeof base === "undefined") {
40025 prefixRE = '0[xcb]';
40026 }
40027 else if (base == 16) {
40028 prefixRE = '0x';
40029 }
40030 else if (base == 8) {
40031 prefixRE = '0c';
40032 }
40033 else if (base == 2) {
40034 prefixRE = '0b';
40035 }
40036 else {
40037 prefixRE = '';
40038 }
40039 var parts = new RegExp('^([+\\-]?)(' + prefixRE + ')?([0-9a-z]*)(?:\\.\\d*)?$', 'i').exec(s);
40040 if (parts) {
40041 var sign = parts[1] || "+";
40042 var baseSection = parts[2] || "";
40043 var digits = parts[3] || "";
40044
40045 if (typeof base === "undefined") {
40046 // Guess base
40047 if (baseSection === "0x" || baseSection === "0X") { // Hex
40048 base = 16;
40049 }
40050 else if (baseSection === "0c" || baseSection === "0C") { // Octal
40051 base = 8;
40052 }
40053 else if (baseSection === "0b" || baseSection === "0B") { // Binary
40054 base = 2;
40055 }
40056 else {
40057 base = 10;
40058 }
40059 }
40060 else if (base < 2 || base > 36) {
40061 throw new Error("Illegal radix " + base + ".");
40062 }
40063
40064 base = +base;
40065
40066 // Check for digits outside the range
40067 if (!(BigInteger.radixRegex[base].test(digits))) {
40068 throw new Error("Bad digit for radix " + base);
40069 }
40070
40071 // Strip leading zeros, and convert to array
40072 digits = digits.replace(/^0+/, "").split("");
40073 if (digits.length === 0) {
40074 return ZERO;
40075 }
40076
40077 // Get the sign (we know it's not zero)
40078 sign = (sign === "-") ? -1 : 1;
40079
40080 // Optimize 10
40081 if (base == 10) {
40082 var d = [];
40083 while (digits.length >= BigInteger_base_log10) {
40084 d.push(parseInt(digits.splice(digits.length-BigInteger.base_log10, BigInteger.base_log10).join(''), 10));
40085 }
40086 d.push(parseInt(digits.join(''), 10));
40087 return new BigInteger(d, sign, CONSTRUCT);
40088 }
40089
40090 // Do the conversion
40091 var d = ZERO;
40092 base = BigInteger.small[base];
40093 var small = BigInteger.small;
40094 for (var i = 0; i < digits.length; i++) {
40095 d = d.multiply(base).add(small[parseInt(digits[i], 36)]);
40096 }
40097 return new BigInteger(d._d, sign, CONSTRUCT);
40098 }
40099 else {
40100 throw new Error("Invalid BigInteger format: " + s);
40101 }
40102};
40103
40104/*
40105 Function: add
40106 Add two <BigIntegers>.
40107
40108 Parameters:
40109
40110 n - The number to add to *this*. Will be converted to a <BigInteger>.
40111
40112 Returns:
40113
40114 The numbers added together.
40115
40116 See Also:
40117
40118 <subtract>, <multiply>, <quotient>, <next>
40119*/
40120BigInteger.prototype.add = function(n) {
40121 if (this._s === 0) {
40122 return BigInteger(n);
40123 }
40124
40125 n = BigInteger(n);
40126 if (n._s === 0) {
40127 return this;
40128 }
40129 if (this._s !== n._s) {
40130 n = n.negate();
40131 return this.subtract(n);
40132 }
40133
40134 var a = this._d;
40135 var b = n._d;
40136 var al = a.length;
40137 var bl = b.length;
40138 var sum = new Array(Math.max(al, bl) + 1);
40139 var size = Math.min(al, bl);
40140 var carry = 0;
40141 var digit;
40142
40143 for (var i = 0; i < size; i++) {
40144 digit = a[i] + b[i] + carry;
40145 sum[i] = digit % BigInteger_base;
40146 carry = (digit / BigInteger_base) | 0;
40147 }
40148 if (bl > al) {
40149 a = b;
40150 al = bl;
40151 }
40152 for (i = size; carry && i < al; i++) {
40153 digit = a[i] + carry;
40154 sum[i] = digit % BigInteger_base;
40155 carry = (digit / BigInteger_base) | 0;
40156 }
40157 if (carry) {
40158 sum[i] = carry;
40159 }
40160
40161 for ( ; i < al; i++) {
40162 sum[i] = a[i];
40163 }
40164
40165 return new BigInteger(sum, this._s, CONSTRUCT);
40166};
40167
40168/*
40169 Function: negate
40170 Get the additive inverse of a <BigInteger>.
40171
40172 Returns:
40173
40174 A <BigInteger> with the same magnatude, but with the opposite sign.
40175
40176 See Also:
40177
40178 <abs>
40179*/
40180BigInteger.prototype.negate = function() {
40181 return new BigInteger(this._d, (-this._s) | 0, CONSTRUCT);
40182};
40183
40184/*
40185 Function: abs
40186 Get the absolute value of a <BigInteger>.
40187
40188 Returns:
40189
40190 A <BigInteger> with the same magnatude, but always positive (or zero).
40191
40192 See Also:
40193
40194 <negate>
40195*/
40196BigInteger.prototype.abs = function() {
40197 return (this._s < 0) ? this.negate() : this;
40198};
40199
40200/*
40201 Function: subtract
40202 Subtract two <BigIntegers>.
40203
40204 Parameters:
40205
40206 n - The number to subtract from *this*. Will be converted to a <BigInteger>.
40207
40208 Returns:
40209
40210 The *n* subtracted from *this*.
40211
40212 See Also:
40213
40214 <add>, <multiply>, <quotient>, <prev>
40215*/
40216BigInteger.prototype.subtract = function(n) {
40217 if (this._s === 0) {
40218 return BigInteger(n).negate();
40219 }
40220
40221 n = BigInteger(n);
40222 if (n._s === 0) {
40223 return this;
40224 }
40225 if (this._s !== n._s) {
40226 n = n.negate();
40227 return this.add(n);
40228 }
40229
40230 var m = this;
40231 // negative - negative => -|a| - -|b| => -|a| + |b| => |b| - |a|
40232 if (this._s < 0) {
40233 m = new BigInteger(n._d, 1, CONSTRUCT);
40234 n = new BigInteger(this._d, 1, CONSTRUCT);
40235 }
40236
40237 // Both are positive => a - b
40238 var sign = m.compareAbs(n);
40239 if (sign === 0) {
40240 return ZERO;
40241 }
40242 else if (sign < 0) {
40243 // swap m and n
40244 var t = n;
40245 n = m;
40246 m = t;
40247 }
40248
40249 // a > b
40250 var a = m._d;
40251 var b = n._d;
40252 var al = a.length;
40253 var bl = b.length;
40254 var diff = new Array(al); // al >= bl since a > b
40255 var borrow = 0;
40256 var i;
40257 var digit;
40258
40259 for (i = 0; i < bl; i++) {
40260 digit = a[i] - borrow - b[i];
40261 if (digit < 0) {
40262 digit += BigInteger_base;
40263 borrow = 1;
40264 }
40265 else {
40266 borrow = 0;
40267 }
40268 diff[i] = digit;
40269 }
40270 for (i = bl; i < al; i++) {
40271 digit = a[i] - borrow;
40272 if (digit < 0) {
40273 digit += BigInteger_base;
40274 }
40275 else {
40276 diff[i++] = digit;
40277 break;
40278 }
40279 diff[i] = digit;
40280 }
40281 for ( ; i < al; i++) {
40282 diff[i] = a[i];
40283 }
40284
40285 return new BigInteger(diff, sign, CONSTRUCT);
40286};
40287
40288(function() {
40289 function addOne(n, sign) {
40290 var a = n._d;
40291 var sum = a.slice();
40292 var carry = true;
40293 var i = 0;
40294
40295 while (true) {
40296 var digit = (a[i] || 0) + 1;
40297 sum[i] = digit % BigInteger_base;
40298 if (digit <= BigInteger_base - 1) {
40299 break;
40300 }
40301 ++i;
40302 }
40303
40304 return new BigInteger(sum, sign, CONSTRUCT);
40305 }
40306
40307 function subtractOne(n, sign) {
40308 var a = n._d;
40309 var sum = a.slice();
40310 var borrow = true;
40311 var i = 0;
40312
40313 while (true) {
40314 var digit = (a[i] || 0) - 1;
40315 if (digit < 0) {
40316 sum[i] = digit + BigInteger_base;
40317 }
40318 else {
40319 sum[i] = digit;
40320 break;
40321 }
40322 ++i;
40323 }
40324
40325 return new BigInteger(sum, sign, CONSTRUCT);
40326 }
40327
40328 /*
40329 Function: next
40330 Get the next <BigInteger> (add one).
40331
40332 Returns:
40333
40334 *this* + 1.
40335
40336 See Also:
40337
40338 <add>, <prev>
40339 */
40340 BigInteger.prototype.next = function() {
40341 switch (this._s) {
40342 case 0:
40343 return ONE;
40344 case -1:
40345 return subtractOne(this, -1);
40346 // case 1:
40347 default:
40348 return addOne(this, 1);
40349 }
40350 };
40351
40352 /*
40353 Function: prev
40354 Get the previous <BigInteger> (subtract one).
40355
40356 Returns:
40357
40358 *this* - 1.
40359
40360 See Also:
40361
40362 <next>, <subtract>
40363 */
40364 BigInteger.prototype.prev = function() {
40365 switch (this._s) {
40366 case 0:
40367 return M_ONE;
40368 case -1:
40369 return addOne(this, -1);
40370 // case 1:
40371 default:
40372 return subtractOne(this, 1);
40373 }
40374 };
40375})();
40376
40377/*
40378 Function: compareAbs
40379 Compare the absolute value of two <BigIntegers>.
40380
40381 Calling <compareAbs> is faster than calling <abs> twice, then <compare>.
40382
40383 Parameters:
40384
40385 n - The number to compare to *this*. Will be converted to a <BigInteger>.
40386
40387 Returns:
40388
40389 -1, 0, or +1 if *|this|* is less than, equal to, or greater than *|n|*.
40390
40391 See Also:
40392
40393 <compare>, <abs>
40394*/
40395BigInteger.prototype.compareAbs = function(n) {
40396 if (this === n) {
40397 return 0;
40398 }
40399
40400 if (!(n instanceof BigInteger)) {
40401 if (!isFinite(n)) {
40402 return(isNaN(n) ? n : -1);
40403 }
40404 n = BigInteger(n);
40405 }
40406
40407 if (this._s === 0) {
40408 return (n._s !== 0) ? -1 : 0;
40409 }
40410 if (n._s === 0) {
40411 return 1;
40412 }
40413
40414 var l = this._d.length;
40415 var nl = n._d.length;
40416 if (l < nl) {
40417 return -1;
40418 }
40419 else if (l > nl) {
40420 return 1;
40421 }
40422
40423 var a = this._d;
40424 var b = n._d;
40425 for (var i = l-1; i >= 0; i--) {
40426 if (a[i] !== b[i]) {
40427 return a[i] < b[i] ? -1 : 1;
40428 }
40429 }
40430
40431 return 0;
40432};
40433
40434/*
40435 Function: compare
40436 Compare two <BigIntegers>.
40437
40438 Parameters:
40439
40440 n - The number to compare to *this*. Will be converted to a <BigInteger>.
40441
40442 Returns:
40443
40444 -1, 0, or +1 if *this* is less than, equal to, or greater than *n*.
40445
40446 See Also:
40447
40448 <compareAbs>, <isPositive>, <isNegative>, <isUnit>
40449*/
40450BigInteger.prototype.compare = function(n) {
40451 if (this === n) {
40452 return 0;
40453 }
40454
40455 n = BigInteger(n);
40456
40457 if (this._s === 0) {
40458 return -n._s;
40459 }
40460
40461 if (this._s === n._s) { // both positive or both negative
40462 var cmp = this.compareAbs(n);
40463 return cmp * this._s;
40464 }
40465 else {
40466 return this._s;
40467 }
40468};
40469
40470/*
40471 Function: isUnit
40472 Return true iff *this* is either 1 or -1.
40473
40474 Returns:
40475
40476 true if *this* compares equal to <BigInteger.ONE> or <BigInteger.M_ONE>.
40477
40478 See Also:
40479
40480 <isZero>, <isNegative>, <isPositive>, <compareAbs>, <compare>,
40481 <BigInteger.ONE>, <BigInteger.M_ONE>
40482*/
40483BigInteger.prototype.isUnit = function() {
40484 return this === ONE ||
40485 this === M_ONE ||
40486 (this._d.length === 1 && this._d[0] === 1);
40487};
40488
40489/*
40490 Function: multiply
40491 Multiply two <BigIntegers>.
40492
40493 Parameters:
40494
40495 n - The number to multiply *this* by. Will be converted to a
40496 <BigInteger>.
40497
40498 Returns:
40499
40500 The numbers multiplied together.
40501
40502 See Also:
40503
40504 <add>, <subtract>, <quotient>, <square>
40505*/
40506BigInteger.prototype.multiply = function(n) {
40507 // TODO: Consider adding Karatsuba multiplication for large numbers
40508 if (this._s === 0) {
40509 return ZERO;
40510 }
40511
40512 n = BigInteger(n);
40513 if (n._s === 0) {
40514 return ZERO;
40515 }
40516 if (this.isUnit()) {
40517 if (this._s < 0) {
40518 return n.negate();
40519 }
40520 return n;
40521 }
40522 if (n.isUnit()) {
40523 if (n._s < 0) {
40524 return this.negate();
40525 }
40526 return this;
40527 }
40528 if (this === n) {
40529 return this.square();
40530 }
40531
40532 var r = (this._d.length >= n._d.length);
40533 var a = (r ? this : n)._d; // a will be longer than b
40534 var b = (r ? n : this)._d;
40535 var al = a.length;
40536 var bl = b.length;
40537
40538 var pl = al + bl;
40539 var partial = new Array(pl);
40540 var i;
40541 for (i = 0; i < pl; i++) {
40542 partial[i] = 0;
40543 }
40544
40545 for (i = 0; i < bl; i++) {
40546 var carry = 0;
40547 var bi = b[i];
40548 var jlimit = al + i;
40549 var digit;
40550 for (var j = i; j < jlimit; j++) {
40551 digit = partial[j] + bi * a[j - i] + carry;
40552 carry = (digit / BigInteger_base) | 0;
40553 partial[j] = (digit % BigInteger_base) | 0;
40554 }
40555 if (carry) {
40556 digit = partial[j] + carry;
40557 carry = (digit / BigInteger_base) | 0;
40558 partial[j] = digit % BigInteger_base;
40559 }
40560 }
40561 return new BigInteger(partial, this._s * n._s, CONSTRUCT);
40562};
40563
40564// Multiply a BigInteger by a single-digit native number
40565// Assumes that this and n are >= 0
40566// This is not really intended to be used outside the library itself
40567BigInteger.prototype.multiplySingleDigit = function(n) {
40568 if (n === 0 || this._s === 0) {
40569 return ZERO;
40570 }
40571 if (n === 1) {
40572 return this;
40573 }
40574
40575 var digit;
40576 if (this._d.length === 1) {
40577 digit = this._d[0] * n;
40578 if (digit >= BigInteger_base) {
40579 return new BigInteger([(digit % BigInteger_base)|0,
40580 (digit / BigInteger_base)|0], 1, CONSTRUCT);
40581 }
40582 return new BigInteger([digit], 1, CONSTRUCT);
40583 }
40584
40585 if (n === 2) {
40586 return this.add(this);
40587 }
40588 if (this.isUnit()) {
40589 return new BigInteger([n], 1, CONSTRUCT);
40590 }
40591
40592 var a = this._d;
40593 var al = a.length;
40594
40595 var pl = al + 1;
40596 var partial = new Array(pl);
40597 for (var i = 0; i < pl; i++) {
40598 partial[i] = 0;
40599 }
40600
40601 var carry = 0;
40602 for (var j = 0; j < al; j++) {
40603 digit = n * a[j] + carry;
40604 carry = (digit / BigInteger_base) | 0;
40605 partial[j] = (digit % BigInteger_base) | 0;
40606 }
40607 if (carry) {
40608 partial[j] = carry;
40609 }
40610
40611 return new BigInteger(partial, 1, CONSTRUCT);
40612};
40613
40614/*
40615 Function: square
40616 Multiply a <BigInteger> by itself.
40617
40618 This is slightly faster than regular multiplication, since it removes the
40619 duplicated multiplcations.
40620
40621 Returns:
40622
40623 > this.multiply(this)
40624
40625 See Also:
40626 <multiply>
40627*/
40628BigInteger.prototype.square = function() {
40629 // Normally, squaring a 10-digit number would take 100 multiplications.
40630 // Of these 10 are unique diagonals, of the remaining 90 (100-10), 45 are repeated.
40631 // This procedure saves (N*(N-1))/2 multiplications, (e.g., 45 of 100 multiplies).
40632 // Based on code by Gary Darby, Intellitech Systems Inc., www.DelphiForFun.org
40633
40634 if (this._s === 0) {
40635 return ZERO;
40636 }
40637 if (this.isUnit()) {
40638 return ONE;
40639 }
40640
40641 var digits = this._d;
40642 var length = digits.length;
40643 var imult1 = new Array(length + length + 1);
40644 var product, carry, k;
40645 var i;
40646
40647 // Calculate diagonal
40648 for (i = 0; i < length; i++) {
40649 k = i * 2;
40650 product = digits[i] * digits[i];
40651 carry = (product / BigInteger_base) | 0;
40652 imult1[k] = product % BigInteger_base;
40653 imult1[k + 1] = carry;
40654 }
40655
40656 // Calculate repeating part
40657 for (i = 0; i < length; i++) {
40658 carry = 0;
40659 k = i * 2 + 1;
40660 for (var j = i + 1; j < length; j++, k++) {
40661 product = digits[j] * digits[i] * 2 + imult1[k] + carry;
40662 carry = (product / BigInteger_base) | 0;
40663 imult1[k] = product % BigInteger_base;
40664 }
40665 k = length + i;
40666 var digit = carry + imult1[k];
40667 carry = (digit / BigInteger_base) | 0;
40668 imult1[k] = digit % BigInteger_base;
40669 imult1[k + 1] += carry;
40670 }
40671
40672 return new BigInteger(imult1, 1, CONSTRUCT);
40673};
40674
40675/*
40676 Function: quotient
40677 Divide two <BigIntegers> and truncate towards zero.
40678
40679 <quotient> throws an exception if *n* is zero.
40680
40681 Parameters:
40682
40683 n - The number to divide *this* by. Will be converted to a <BigInteger>.
40684
40685 Returns:
40686
40687 The *this* / *n*, truncated to an integer.
40688
40689 See Also:
40690
40691 <add>, <subtract>, <multiply>, <divRem>, <remainder>
40692*/
40693BigInteger.prototype.quotient = function(n) {
40694 return this.divRem(n)[0];
40695};
40696
40697/*
40698 Function: divide
40699 Deprecated synonym for <quotient>.
40700*/
40701BigInteger.prototype.divide = BigInteger.prototype.quotient;
40702
40703/*
40704 Function: remainder
40705 Calculate the remainder of two <BigIntegers>.
40706
40707 <remainder> throws an exception if *n* is zero.
40708
40709 Parameters:
40710
40711 n - The remainder after *this* is divided *this* by *n*. Will be
40712 converted to a <BigInteger>.
40713
40714 Returns:
40715
40716 *this* % *n*.
40717
40718 See Also:
40719
40720 <divRem>, <quotient>
40721*/
40722BigInteger.prototype.remainder = function(n) {
40723 return this.divRem(n)[1];
40724};
40725
40726/*
40727 Function: divRem
40728 Calculate the integer quotient and remainder of two <BigIntegers>.
40729
40730 <divRem> throws an exception if *n* is zero.
40731
40732 Parameters:
40733
40734 n - The number to divide *this* by. Will be converted to a <BigInteger>.
40735
40736 Returns:
40737
40738 A two-element array containing the quotient and the remainder.
40739
40740 > a.divRem(b)
40741
40742 is exactly equivalent to
40743
40744 > [a.quotient(b), a.remainder(b)]
40745
40746 except it is faster, because they are calculated at the same time.
40747
40748 See Also:
40749
40750 <quotient>, <remainder>
40751*/
40752BigInteger.prototype.divRem = function(n) {
40753 n = BigInteger(n);
40754 if (n._s === 0) {
40755 throw new Error("Divide by zero");
40756 }
40757 if (this._s === 0) {
40758 return [ZERO, ZERO];
40759 }
40760 if (n._d.length === 1) {
40761 return this.divRemSmall(n._s * n._d[0]);
40762 }
40763
40764 // Test for easy cases -- |n1| <= |n2|
40765 switch (this.compareAbs(n)) {
40766 case 0: // n1 == n2
40767 return [this._s === n._s ? ONE : M_ONE, ZERO];
40768 case -1: // |n1| < |n2|
40769 return [ZERO, this];
40770 }
40771
40772 var sign = this._s * n._s;
40773 var a = n.abs();
40774 var b_digits = this._d;
40775 var b_index = b_digits.length;
40776 var digits = n._d.length;
40777 var quot = [];
40778 var guess;
40779
40780 var part = new BigInteger([], 0, CONSTRUCT);
40781
40782 while (b_index) {
40783 part._d.unshift(b_digits[--b_index]);
40784 part = new BigInteger(part._d, 1, CONSTRUCT);
40785
40786 if (part.compareAbs(n) < 0) {
40787 quot.push(0);
40788 continue;
40789 }
40790 if (part._s === 0) {
40791 guess = 0;
40792 }
40793 else {
40794 var xlen = part._d.length, ylen = a._d.length;
40795 var highx = part._d[xlen-1]*BigInteger_base + part._d[xlen-2];
40796 var highy = a._d[ylen-1]*BigInteger_base + a._d[ylen-2];
40797 if (part._d.length > a._d.length) {
40798 // The length of part._d can either match a._d length,
40799 // or exceed it by one.
40800 highx = (highx+1)*BigInteger_base;
40801 }
40802 guess = Math.ceil(highx/highy);
40803 }
40804 do {
40805 var check = a.multiplySingleDigit(guess);
40806 if (check.compareAbs(part) <= 0) {
40807 break;
40808 }
40809 guess--;
40810 } while (guess);
40811
40812 quot.push(guess);
40813 if (!guess) {
40814 continue;
40815 }
40816 var diff = part.subtract(check);
40817 part._d = diff._d.slice();
40818 }
40819
40820 return [new BigInteger(quot.reverse(), sign, CONSTRUCT),
40821 new BigInteger(part._d, this._s, CONSTRUCT)];
40822};
40823
40824// Throws an exception if n is outside of (-BigInteger.base, -1] or
40825// [1, BigInteger.base). It's not necessary to call this, since the
40826// other division functions will call it if they are able to.
40827BigInteger.prototype.divRemSmall = function(n) {
40828 var r;
40829 n = +n;
40830 if (n === 0) {
40831 throw new Error("Divide by zero");
40832 }
40833
40834 var n_s = n < 0 ? -1 : 1;
40835 var sign = this._s * n_s;
40836 n = Math.abs(n);
40837
40838 if (n < 1 || n >= BigInteger_base) {
40839 throw new Error("Argument out of range");
40840 }
40841
40842 if (this._s === 0) {
40843 return [ZERO, ZERO];
40844 }
40845
40846 if (n === 1 || n === -1) {
40847 return [(sign === 1) ? this.abs() : new BigInteger(this._d, sign, CONSTRUCT), ZERO];
40848 }
40849
40850 // 2 <= n < BigInteger_base
40851
40852 // divide a single digit by a single digit
40853 if (this._d.length === 1) {
40854 var q = new BigInteger([(this._d[0] / n) | 0], 1, CONSTRUCT);
40855 r = new BigInteger([(this._d[0] % n) | 0], 1, CONSTRUCT);
40856 if (sign < 0) {
40857 q = q.negate();
40858 }
40859 if (this._s < 0) {
40860 r = r.negate();
40861 }
40862 return [q, r];
40863 }
40864
40865 var digits = this._d.slice();
40866 var quot = new Array(digits.length);
40867 var part = 0;
40868 var diff = 0;
40869 var i = 0;
40870 var guess;
40871
40872 while (digits.length) {
40873 part = part * BigInteger_base + digits[digits.length - 1];
40874 if (part < n) {
40875 quot[i++] = 0;
40876 digits.pop();
40877 diff = BigInteger_base * diff + part;
40878 continue;
40879 }
40880 if (part === 0) {
40881 guess = 0;
40882 }
40883 else {
40884 guess = (part / n) | 0;
40885 }
40886
40887 var check = n * guess;
40888 diff = part - check;
40889 quot[i++] = guess;
40890 if (!guess) {
40891 digits.pop();
40892 continue;
40893 }
40894
40895 digits.pop();
40896 part = diff;
40897 }
40898
40899 r = new BigInteger([diff], 1, CONSTRUCT);
40900 if (this._s < 0) {
40901 r = r.negate();
40902 }
40903 return [new BigInteger(quot.reverse(), sign, CONSTRUCT), r];
40904};
40905
40906/*
40907 Function: isEven
40908 Return true iff *this* is divisible by two.
40909
40910 Note that <BigInteger.ZERO> is even.
40911
40912 Returns:
40913
40914 true if *this* is even, false otherwise.
40915
40916 See Also:
40917
40918 <isOdd>
40919*/
40920BigInteger.prototype.isEven = function() {
40921 var digits = this._d;
40922 return this._s === 0 || digits.length === 0 || (digits[0] % 2) === 0;
40923};
40924
40925/*
40926 Function: isOdd
40927 Return true iff *this* is not divisible by two.
40928
40929 Returns:
40930
40931 true if *this* is odd, false otherwise.
40932
40933 See Also:
40934
40935 <isEven>
40936*/
40937BigInteger.prototype.isOdd = function() {
40938 return !this.isEven();
40939};
40940
40941/*
40942 Function: sign
40943 Get the sign of a <BigInteger>.
40944
40945 Returns:
40946
40947 * -1 if *this* < 0
40948 * 0 if *this* == 0
40949 * +1 if *this* > 0
40950
40951 See Also:
40952
40953 <isZero>, <isPositive>, <isNegative>, <compare>, <BigInteger.ZERO>
40954*/
40955BigInteger.prototype.sign = function() {
40956 return this._s;
40957};
40958
40959/*
40960 Function: isPositive
40961 Return true iff *this* > 0.
40962
40963 Returns:
40964
40965 true if *this*.compare(<BigInteger.ZERO>) == 1.
40966
40967 See Also:
40968
40969 <sign>, <isZero>, <isNegative>, <isUnit>, <compare>, <BigInteger.ZERO>
40970*/
40971BigInteger.prototype.isPositive = function() {
40972 return this._s > 0;
40973};
40974
40975/*
40976 Function: isNegative
40977 Return true iff *this* < 0.
40978
40979 Returns:
40980
40981 true if *this*.compare(<BigInteger.ZERO>) == -1.
40982
40983 See Also:
40984
40985 <sign>, <isPositive>, <isZero>, <isUnit>, <compare>, <BigInteger.ZERO>
40986*/
40987BigInteger.prototype.isNegative = function() {
40988 return this._s < 0;
40989};
40990
40991/*
40992 Function: isZero
40993 Return true iff *this* == 0.
40994
40995 Returns:
40996
40997 true if *this*.compare(<BigInteger.ZERO>) == 0.
40998
40999 See Also:
41000
41001 <sign>, <isPositive>, <isNegative>, <isUnit>, <BigInteger.ZERO>
41002*/
41003BigInteger.prototype.isZero = function() {
41004 return this._s === 0;
41005};
41006
41007/*
41008 Function: exp10
41009 Multiply a <BigInteger> by a power of 10.
41010
41011 This is equivalent to, but faster than
41012
41013 > if (n >= 0) {
41014 > return this.multiply(BigInteger("1e" + n));
41015 > }
41016 > else { // n <= 0
41017 > return this.quotient(BigInteger("1e" + -n));
41018 > }
41019
41020 Parameters:
41021
41022 n - The power of 10 to multiply *this* by. *n* is converted to a
41023 javascipt number and must be no greater than <BigInteger.MAX_EXP>
41024 (0x7FFFFFFF), or an exception will be thrown.
41025
41026 Returns:
41027
41028 *this* * (10 ** *n*), truncated to an integer if necessary.
41029
41030 See Also:
41031
41032 <pow>, <multiply>
41033*/
41034BigInteger.prototype.exp10 = function(n) {
41035 n = +n;
41036 if (n === 0) {
41037 return this;
41038 }
41039 if (Math.abs(n) > Number(MAX_EXP)) {
41040 throw new Error("exponent too large in BigInteger.exp10");
41041 }
41042 // Optimization for this == 0. This also keeps us from having to trim zeros in the positive n case
41043 if (this._s === 0) {
41044 return ZERO;
41045 }
41046 if (n > 0) {
41047 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
41048
41049 for (; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
41050 k._d.unshift(0);
41051 }
41052 if (n == 0)
41053 return k;
41054 k._s = 1;
41055 k = k.multiplySingleDigit(Math.pow(10, n));
41056 return (this._s < 0 ? k.negate() : k);
41057 } else if (-n >= this._d.length*BigInteger_base_log10) {
41058 return ZERO;
41059 } else {
41060 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
41061
41062 for (n = -n; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
41063 k._d.shift();
41064 }
41065 return (n == 0) ? k : k.divRemSmall(Math.pow(10, n))[0];
41066 }
41067};
41068
41069/*
41070 Function: pow
41071 Raise a <BigInteger> to a power.
41072
41073 In this implementation, 0**0 is 1.
41074
41075 Parameters:
41076
41077 n - The exponent to raise *this* by. *n* must be no greater than
41078 <BigInteger.MAX_EXP> (0x7FFFFFFF), or an exception will be thrown.
41079
41080 Returns:
41081
41082 *this* raised to the *nth* power.
41083
41084 See Also:
41085
41086 <modPow>
41087*/
41088BigInteger.prototype.pow = function(n) {
41089 if (this.isUnit()) {
41090 if (this._s > 0) {
41091 return this;
41092 }
41093 else {
41094 return BigInteger(n).isOdd() ? this : this.negate();
41095 }
41096 }
41097
41098 n = BigInteger(n);
41099 if (n._s === 0) {
41100 return ONE;
41101 }
41102 else if (n._s < 0) {
41103 if (this._s === 0) {
41104 throw new Error("Divide by zero");
41105 }
41106 else {
41107 return ZERO;
41108 }
41109 }
41110 if (this._s === 0) {
41111 return ZERO;
41112 }
41113 if (n.isUnit()) {
41114 return this;
41115 }
41116
41117 if (n.compareAbs(MAX_EXP) > 0) {
41118 throw new Error("exponent too large in BigInteger.pow");
41119 }
41120 var x = this;
41121 var aux = ONE;
41122 var two = BigInteger.small[2];
41123
41124 while (n.isPositive()) {
41125 if (n.isOdd()) {
41126 aux = aux.multiply(x);
41127 if (n.isUnit()) {
41128 return aux;
41129 }
41130 }
41131 x = x.square();
41132 n = n.quotient(two);
41133 }
41134
41135 return aux;
41136};
41137
41138/*
41139 Function: modPow
41140 Raise a <BigInteger> to a power (mod m).
41141
41142 Because it is reduced by a modulus, <modPow> is not limited by
41143 <BigInteger.MAX_EXP> like <pow>.
41144
41145 Parameters:
41146
41147 exponent - The exponent to raise *this* by. Must be positive.
41148 modulus - The modulus.
41149
41150 Returns:
41151
41152 *this* ^ *exponent* (mod *modulus*).
41153
41154 See Also:
41155
41156 <pow>, <mod>
41157*/
41158BigInteger.prototype.modPow = function(exponent, modulus) {
41159 var result = ONE;
41160 var base = this;
41161
41162 while (exponent.isPositive()) {
41163 if (exponent.isOdd()) {
41164 result = result.multiply(base).remainder(modulus);
41165 }
41166
41167 exponent = exponent.quotient(BigInteger.small[2]);
41168 if (exponent.isPositive()) {
41169 base = base.square().remainder(modulus);
41170 }
41171 }
41172
41173 return result;
41174};
41175
41176/*
41177 Function: log
41178 Get the natural logarithm of a <BigInteger> as a native JavaScript number.
41179
41180 This is equivalent to
41181
41182 > Math.log(this.toJSValue())
41183
41184 but handles values outside of the native number range.
41185
41186 Returns:
41187
41188 log( *this* )
41189
41190 See Also:
41191
41192 <toJSValue>
41193*/
41194BigInteger.prototype.log = function() {
41195 switch (this._s) {
41196 case 0: return -Infinity;
41197 case -1: return NaN;
41198 default: // Fall through.
41199 }
41200
41201 var l = this._d.length;
41202
41203 if (l*BigInteger_base_log10 < 30) {
41204 return Math.log(this.valueOf());
41205 }
41206
41207 var N = Math.ceil(30/BigInteger_base_log10);
41208 var firstNdigits = this._d.slice(l - N);
41209 return Math.log((new BigInteger(firstNdigits, 1, CONSTRUCT)).valueOf()) + (l - N) * Math.log(BigInteger_base);
41210};
41211
41212/*
41213 Function: valueOf
41214 Convert a <BigInteger> to a native JavaScript integer.
41215
41216 This is called automatically by JavaScipt to convert a <BigInteger> to a
41217 native value.
41218
41219 Returns:
41220
41221 > parseInt(this.toString(), 10)
41222
41223 See Also:
41224
41225 <toString>, <toJSValue>
41226*/
41227BigInteger.prototype.valueOf = function() {
41228 return parseInt(this.toString(), 10);
41229};
41230
41231/*
41232 Function: toJSValue
41233 Convert a <BigInteger> to a native JavaScript integer.
41234
41235 This is the same as valueOf, but more explicitly named.
41236
41237 Returns:
41238
41239 > parseInt(this.toString(), 10)
41240
41241 See Also:
41242
41243 <toString>, <valueOf>
41244*/
41245BigInteger.prototype.toJSValue = function() {
41246 return parseInt(this.toString(), 10);
41247};
41248
41249var MAX_EXP = BigInteger(0x7FFFFFFF);
41250// Constant: MAX_EXP
41251// The largest exponent allowed in <pow> and <exp10> (0x7FFFFFFF or 2147483647).
41252BigInteger.MAX_EXP = MAX_EXP;
41253
41254(function() {
41255 function makeUnary(fn) {
41256 return function(a) {
41257 return fn.call(BigInteger(a));
41258 };
41259 }
41260
41261 function makeBinary(fn) {
41262 return function(a, b) {
41263 return fn.call(BigInteger(a), BigInteger(b));
41264 };
41265 }
41266
41267 function makeTrinary(fn) {
41268 return function(a, b, c) {
41269 return fn.call(BigInteger(a), BigInteger(b), BigInteger(c));
41270 };
41271 }
41272
41273 (function() {
41274 var i, fn;
41275 var unary = "toJSValue,isEven,isOdd,sign,isZero,isNegative,abs,isUnit,square,negate,isPositive,toString,next,prev,log".split(",");
41276 var binary = "compare,remainder,divRem,subtract,add,quotient,divide,multiply,pow,compareAbs".split(",");
41277 var trinary = ["modPow"];
41278
41279 for (i = 0; i < unary.length; i++) {
41280 fn = unary[i];
41281 BigInteger[fn] = makeUnary(BigInteger.prototype[fn]);
41282 }
41283
41284 for (i = 0; i < binary.length; i++) {
41285 fn = binary[i];
41286 BigInteger[fn] = makeBinary(BigInteger.prototype[fn]);
41287 }
41288
41289 for (i = 0; i < trinary.length; i++) {
41290 fn = trinary[i];
41291 BigInteger[fn] = makeTrinary(BigInteger.prototype[fn]);
41292 }
41293
41294 BigInteger.exp10 = function(x, n) {
41295 return BigInteger(x).exp10(n);
41296 };
41297 })();
41298})();
41299
41300exports.BigInteger = BigInteger;
41301})(typeof exports !== 'undefined' ? exports : this);
95f04905
IC
41302</script>
41303 <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){
41304var 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;
41305
41306},{}],2:[function(require,module,exports){
41307var 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;
41308
41309},{"./scoring":6}],3:[function(require,module,exports){
41310var 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(","),
41311english_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(","),
41312female_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(","),
41313us_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(","),
41314male_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;
41315
41316},{}],4:[function(require,module,exports){
41317var 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;
41318
41319},{"./feedback":2,"./matching":5,"./scoring":6,"./time_estimates":7}],5:[function(require,module,exports){
41320var 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;
41321
41322},{"./adjacency_graphs":1,"./frequency_lists":3,"./scoring":6}],6:[function(require,module,exports){
41323var 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;
41324
41325},{"./adjacency_graphs":1}],7:[function(require,module,exports){
41326var 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;
41327
41328},{}]},{},[4])(4)
41329});
41330//# sourceMappingURL=zxcvbn.js.map
41331</script>
41332 <script>/*
41333 * Detects entropy from a string.
41334 *
41335 * Formats include:
41336 * binary [0-1]
41337 * base 6 [0-5]
41338 * dice 6 [1-6]
41339 * decimal [0-9]
41340 * hexadecimal [0-9A-F]
9e97eb76 41341 * card [A2-9TJQK][CDHS]
95f04905
IC
41342 *
41343 * Automatically uses lowest entropy to avoid issues such as interpretting 0101
41344 * as hexadecimal which would be 16 bits when really it's only 4 bits of binary
41345 * entropy.
41346 */
41347
41348window.Entropy = new (function() {
41349
78b8d604
IC
41350 var TWO = new BigInteger(2);
41351
95f04905
IC
41352 // matchers returns an array of the matched events for each type of entropy.
41353 // eg
41354 // matchers.binary("010") returns ["0", "1", "0"]
41355 // matchers.binary("a10") returns ["1", "0"]
41356 // matchers.hex("a10") returns ["a", "1", "0"]
41357 var matchers = {
41358 binary: function(str) {
41359 return str.match(/[0-1]/gi) || [];
41360 },
41361 base6: function(str) {
41362 return str.match(/[0-5]/gi) || [];
41363 },
41364 dice: function(str) {
41365 return str.match(/[1-6]/gi) || []; // ie dice numbers
41366 },
41367 base10: function(str) {
41368 return str.match(/[0-9]/gi) || [];
41369 },
41370 hex: function(str) {
41371 return str.match(/[0-9A-F]/gi) || [];
41372 },
41373 card: function(str) {
41374 // Format is NumberSuit, eg
41375 // AH ace of hearts
41376 // 8C eight of clubs
41377 // TD ten of diamonds
41378 // JS jack of spades
41379 // QH queen of hearts
41380 // KC king of clubs
41381 return str.match(/([A2-9TJQK][CDHS])/gi) || [];
41382 }
41383 }
41384
41385 // Convert array of cards from ["ac", "4d", "ks"]
41386 // to numbers between 0 and 51 [0, 16, 51]
41387 function convertCardsToInts(cards) {
41388 var ints = [];
41389 var values = "a23456789tjqk";
41390 var suits = "cdhs";
41391 for (var i=0; i<cards.length; i++) {
41392 var card = cards[i].toLowerCase();
41393 var value = card[0];
41394 var suit = card[1];
41395 var asInt = 13 * suits.indexOf(suit) + values.indexOf(value);
41396 ints.push(asInt);
41397 }
41398 return ints;
41399 }
41400
41401 this.fromString = function(rawEntropyStr) {
41402 // Find type of entropy being used (binary, hex, dice etc)
41403 var base = getBase(rawEntropyStr);
41404 // Convert dice to base6 entropy (ie 1-6 to 0-5)
41405 // This is done by changing all 6s to 0s
41406 if (base.str == "dice") {
41407 var newParts = [];
41408 var newInts = [];
41409 for (var i=0; i<base.parts.length; i++) {
41410 var c = base.parts[i];
41411 if ("12345".indexOf(c) > -1) {
41412 newParts[i] = base.parts[i];
41413 newInts[i] = base.ints[i];
41414 }
41415 else {
41416 newParts[i] = "0";
41417 newInts[i] = 0;
41418 }
41419 }
41420 base.str = "base 6 (dice)";
41421 base.ints = newInts;
41422 base.parts = newParts;
41423 base.matcher = matchers.base6;
41424 }
41425 // Detect empty entropy
41426 if (base.parts.length == 0) {
41427 return {
41428 binaryStr: "",
41429 cleanStr: "",
41430 cleanHtml: "",
41431 base: base,
41432 };
41433 }
41434 // Convert base.ints to BigInteger.
41435 // Due to using unusual bases, eg cards of base52, this is not as simple as
41436 // using BigInteger.parse()
41437 var entropyInt = BigInteger.ZERO;
41438 for (var i=base.ints.length-1; i>=0; i--) {
41439 var thisInt = BigInteger.parse(base.ints[i]);
41440 var power = (base.ints.length - 1) - i;
41441 var additionalEntropy = BigInteger.parse(base.asInt).pow(power).multiply(thisInt);
41442 entropyInt = entropyInt.add(additionalEntropy);
41443 }
41444 // Convert entropy to binary
41445 var entropyBin = entropyInt.toString(2);
41446 // If the first integer is small, it must be padded with zeros.
41447 // Otherwise the chance of the first bit being 1 is 100%, which is
41448 // obviously incorrect.
41449 // This is not perfect for non-2^n bases.
41450 var expectedBits = Math.floor(base.parts.length * Math.log2(base.asInt));
41451 while (entropyBin.length < expectedBits) {
41452 entropyBin = "0" + entropyBin;
41453 }
94959756
IC
41454 // Calculate the number of bits per event
41455 var bitsPerEvent = Math.log2(base.asInt);
ea87f1d3 41456 // Cards binary must be handled differently, since they're not replaced
9e97eb76 41457 if (base.asInt == 52) {
94959756
IC
41458 var cardEntropy = processCardEntropy(base.parts);
41459 entropyBin = cardEntropy.binaryStr;
41460 bitsPerEvent = cardEntropy.bitsPerEvent;
9e97eb76 41461 }
95f04905
IC
41462 // Supply a 'filtered' entropy string for display purposes
41463 var entropyClean = base.parts.join("");
41464 var entropyHtml = base.parts.join("");
41465 if (base.asInt == 52) {
41466 entropyClean = base.parts.join(" ").toUpperCase();
41467 entropyClean = entropyClean.replace(/C/g, "\u2663");
41468 entropyClean = entropyClean.replace(/D/g, "\u2666");
41469 entropyClean = entropyClean.replace(/H/g, "\u2665");
41470 entropyClean = entropyClean.replace(/S/g, "\u2660");
41471 entropyHtml = base.parts.join(" ").toUpperCase();
41472 entropyHtml = entropyHtml.replace(/C/g, "<span class='card-suit club'>\u2663</span>");
41473 entropyHtml = entropyHtml.replace(/D/g, "<span class='card-suit diamond'>\u2666</span>");
41474 entropyHtml = entropyHtml.replace(/H/g, "<span class='card-suit heart'>\u2665</span>");
41475 entropyHtml = entropyHtml.replace(/S/g, "<span class='card-suit spade'>\u2660</span>");
41476 }
9e97eb76 41477 // Return the result
95f04905
IC
41478 var e = {
41479 binaryStr: entropyBin,
41480 cleanStr: entropyClean,
41481 cleanHtml: entropyHtml,
94959756 41482 bitsPerEvent: bitsPerEvent,
95f04905
IC
41483 base: base,
41484 }
41485 return e;
41486 }
41487
78b8d604
IC
41488 function getSortedDeck() {
41489 var s = [];
41490 var suits = "CDHS";
41491 var values = "A23456789TJQK";
41492 for (var i=0; i<suits.length; i++) {
41493 for (var j=0; j<values.length; j++) {
41494 s.push(values[j]+suits[i]);
41495 }
41496 }
41497 return s;
41498 }
41499
95f04905
IC
41500 function getBase(str) {
41501 // Need to get the lowest base for the supplied entropy.
41502 // This prevents interpreting, say, dice rolls as hexadecimal.
41503 var binaryMatches = matchers.binary(str);
41504 var hexMatches = matchers.hex(str);
41505 // Find the lowest base that can be used, whilst ignoring any irrelevant chars
41506 if (binaryMatches.length == hexMatches.length && hexMatches.length > 0) {
41507 var ints = binaryMatches.map(function(i) { return parseInt(i, 2) });
41508 return {
41509 ints: ints,
41510 parts: binaryMatches,
41511 matcher: matchers.binary,
41512 asInt: 2,
41513 str: "binary",
41514 }
41515 }
41516 var cardMatches = matchers.card(str);
41517 if (cardMatches.length >= hexMatches.length / 2) {
41518 var ints = convertCardsToInts(cardMatches);
41519 return {
41520 ints: ints,
41521 parts: cardMatches,
41522 matcher: matchers.card,
41523 asInt: 52,
41524 str: "card",
41525 }
41526 }
41527 var diceMatches = matchers.dice(str);
41528 if (diceMatches.length == hexMatches.length && hexMatches.length > 0) {
41529 var ints = diceMatches.map(function(i) { return parseInt(i) });
41530 return {
41531 ints: ints,
41532 parts: diceMatches,
41533 matcher: matchers.dice,
41534 asInt: 6,
41535 str: "dice",
41536 }
41537 }
41538 var base6Matches = matchers.base6(str);
41539 if (base6Matches.length == hexMatches.length && hexMatches.length > 0) {
41540 var ints = base6Matches.map(function(i) { return parseInt(i) });
41541 return {
41542 ints: ints,
41543 parts: base6Matches,
41544 matcher: matchers.base6,
41545 asInt: 6,
41546 str: "base 6",
41547 }
41548 }
41549 var base10Matches = matchers.base10(str);
41550 if (base10Matches.length == hexMatches.length && hexMatches.length > 0) {
41551 var ints = base10Matches.map(function(i) { return parseInt(i) });
41552 return {
41553 ints: ints,
41554 parts: base10Matches,
41555 matcher: matchers.base10,
41556 asInt: 10,
41557 str: "base 10",
41558 }
41559 }
41560 var ints = hexMatches.map(function(i) { return parseInt(i, 16) });
41561 return {
41562 ints: ints,
41563 parts: hexMatches,
41564 matcher: matchers.hex,
41565 asInt: 16,
41566 str: "hexadecimal",
41567 }
41568 }
41569
ea87f1d3
IC
41570 // Assume cards are NOT replaced.
41571 // Additional entropy decreases as more cards are used. This means
41572 // total possible entropy is measured using n!, not base^n.
41573 // eg the second last card can be only one of two, not one of fifty two
41574 // so the added entropy for that card is only one bit at most
94959756 41575 function processCardEntropy(cards) {
ea87f1d3
IC
41576 // Track how many instances of each card have been used, and thus
41577 // how many decks are in use.
41578 var cardCounts = {};
41579 var numberOfDecks = 0;
41580 // Work out number of decks by max(duplicates)
41581 for (var i=0; i<cards.length; i++) {
41582 // Get the card that was drawn
41583 var cardLower = cards[i];
41584 var card = cardLower.toUpperCase();
41585 // Initialize the count for this card if needed
41586 if (!(card in cardCounts)) {
41587 cardCounts[card] = 0;
41588 }
41589 cardCounts[card] += 1;
41590 // See if this is max(duplicates)
41591 if (cardCounts[card] > numberOfDecks) {
41592 numberOfDecks = cardCounts[card];
41593 }
41594 }
41595 // Work out the total number of bits for this many decks
41596 // See http://crypto.stackexchange.com/q/41886
fc7c248f
IC
41597 var gainedBits = 0;
41598 // Equivalent of Math.log2(factorial(52*numberOfDecks))
41599 // which becomes infinity for numberOfDecks > 4
41600 for (var i=1; i<=52*numberOfDecks; i++) {
41601 gainedBits = gainedBits + Math.log2(i);
41602 }
ea87f1d3
IC
41603 var lostBits = 52 * Math.log2(factorial(numberOfDecks));
41604 var maxBits = gainedBits - lostBits;
41605 // Convert the drawn cards to a binary representation.
41606 // The exact technique for doing this is unclear.
41607 // See
41608 // http://crypto.stackexchange.com/a/41896
41609 // "I even doubt that this is well defined (only the average entropy
41610 // is, I believe)."
41611 // See
41612 // https://github.com/iancoleman/bip39/issues/33#issuecomment-263021856
41613 // "The binary representation can be the first log(permutations,2) bits
41614 // of the sha-2 hash of the normalized deck string."
41615 //
41616 // In this specific implementation, the first N bits of the hash of the
41617 // normalized cards string is being used. Uppercase, no spaces; eg
41618 // sha256("AH8DQSTC2H")
41619 var totalCards = numberOfDecks * 52;
41620 var percentUsed = cards.length / totalCards;
41621 // Calculate the average number of bits of entropy for the number of
41622 // cards drawn.
41623 var numberOfBits = Math.floor(maxBits * percentUsed);
41624 // Create a normalized string of the selected cards
41625 var normalizedCards = cards.join("").toUpperCase();
41626 // Convert to binary using the SHA256 hash of the normalized cards.
434caecd 41627 // If the number of bits is more than 256, multiple hashes
ea87f1d3
IC
41628 // are used until the required number of bits is reached.
41629 var entropyBin = "";
41630 var iterations = 0;
41631 while (entropyBin.length < numberOfBits) {
434caecd 41632 var hashedCards = sjcl.hash.sha256.hash(normalizedCards + ":" + iterations);
ea87f1d3
IC
41633 var hashHex = sjcl.codec.hex.fromBits(hashedCards);
41634 for (var i=0; i<hashHex.length; i++) {
41635 var decimal = parseInt(hashHex[i], 16);
41636 var binary = decimal.toString(2);
41637 while (binary.length < 4) {
41638 binary = "0" + binary;
41639 }
41640 entropyBin = entropyBin + binary;
41641 }
41642 iterations = iterations + 1;
41643 }
41644 // Truncate to the appropriate number of bits.
41645 entropyBin = entropyBin.substring(0, numberOfBits);
94959756
IC
41646 // Get the number of bits per event
41647 bitsPerEvent = maxBits / totalCards;
41648 return {
41649 binaryStr: entropyBin,
41650 bitsPerEvent: bitsPerEvent,
41651 }
ea87f1d3
IC
41652 }
41653
95f04905
IC
41654 // Polyfill for Math.log2
41655 // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log2#Polyfill
41656 Math.log2 = Math.log2 || function(x) {
41657 // The polyfill isn't good enough because of the poor accuracy of
41658 // Math.LOG2E
41659 // log2(8) gave 2.9999999999999996 which when floored causes issues.
41660 // So instead use the BigInteger library to get it right.
41661 return BigInteger.log(x) / BigInteger.log(2);
41662 };
41663
9e97eb76
IC
41664 // Depends on BigInteger
41665 function factorial(n) {
41666 if (n == 0) {
41667 return 1;
41668 }
41669 f = BigInteger.ONE;
41670 for (var i=1; i<=n; i++) {
41671 f = f.multiply(new BigInteger(i));
41672 }
41673 return f;
41674 }
41675
95f04905 41676})();
c6624d51
IC
41677</script>
41678 <script>(function() {
41679
41680 // mnemonics is populated as required by getLanguage
41681 var mnemonics = { "english": new Mnemonic("english") };
41682 var mnemonic = mnemonics["english"];
3725abb5 41683 var seed = null;
c6624d51
IC
41684 var bip32RootKey = null;
41685 var bip32ExtendedKey = null;
41686 var network = bitcoin.networks.bitcoin;
41687 var addressRowTemplate = $("#address-row-template");
41688
41689 var showIndex = true;
41690 var showAddress = true;
41691 var showPubKey = true;
41692 var showPrivKey = true;
52da415f 41693 var showQr = false;
c6624d51
IC
41694
41695 var entropyChangeTimeoutEvent = null;
41696 var phraseChangeTimeoutEvent = null;
41697 var rootKeyChangedTimeoutEvent = null;
41698
40892aba
IC
41699 var generationProcesses = [];
41700
c6624d51
IC
41701 var DOM = {};
41702 DOM.network = $(".network");
56530adc 41703 DOM.bip32Client = $("#bip32-client");
c6624d51
IC
41704 DOM.phraseNetwork = $("#network-phrase");
41705 DOM.useEntropy = $(".use-entropy");
41706 DOM.entropyContainer = $(".entropy-container");
41707 DOM.entropy = $(".entropy");
2a6dd137
IC
41708 DOM.entropyFiltered = DOM.entropyContainer.find(".filtered");
41709 DOM.entropyType = DOM.entropyContainer.find(".type");
41710 DOM.entropyStrength = DOM.entropyContainer.find(".strength");
41711 DOM.entropyEventCount = DOM.entropyContainer.find(".event-count");
41712 DOM.entropyBits = DOM.entropyContainer.find(".bits");
41713 DOM.entropyBitsPerEvent = DOM.entropyContainer.find(".bits-per-event");
41714 DOM.entropyWordCount = DOM.entropyContainer.find(".word-count");
41715 DOM.entropyBinary = DOM.entropyContainer.find(".binary");
41716 DOM.entropyMnemonicLength = DOM.entropyContainer.find(".mnemonic-length");
c6624d51
IC
41717 DOM.phrase = $(".phrase");
41718 DOM.passphrase = $(".passphrase");
41719 DOM.generateContainer = $(".generate-container");
41720 DOM.generate = $(".generate");
41721 DOM.seed = $(".seed");
41722 DOM.rootKey = $(".root-key");
41723 DOM.extendedPrivKey = $(".extended-priv-key");
41724 DOM.extendedPubKey = $(".extended-pub-key");
41725 DOM.bip32tab = $("#bip32-tab");
41726 DOM.bip44tab = $("#bip44-tab");
41727 DOM.bip32panel = $("#bip32");
41728 DOM.bip44panel = $("#bip44");
41729 DOM.bip32path = $("#bip32-path");
41730 DOM.bip44path = $("#bip44-path");
41731 DOM.bip44purpose = $("#bip44 .purpose");
41732 DOM.bip44coin = $("#bip44 .coin");
41733 DOM.bip44account = $("#bip44 .account");
20083ab9
IC
41734 DOM.bip44accountXprv = $("#bip44 .account-xprv");
41735 DOM.bip44accountXpub = $("#bip44 .account-xpub");
c6624d51 41736 DOM.bip44change = $("#bip44 .change");
18abe53b 41737 DOM.generatedStrength = $(".generate-container .strength");
c6624d51
IC
41738 DOM.hardenedAddresses = $(".hardened-addresses");
41739 DOM.addresses = $(".addresses");
41740 DOM.rowsToAdd = $(".rows-to-add");
41741 DOM.more = $(".more");
41742 DOM.feedback = $(".feedback");
41743 DOM.tab = $(".derivation-type a");
41744 DOM.indexToggle = $(".index-toggle");
41745 DOM.addressToggle = $(".address-toggle");
41746 DOM.publicKeyToggle = $(".public-key-toggle");
41747 DOM.privateKeyToggle = $(".private-key-toggle");
41748 DOM.languages = $(".languages a");
e00964cc 41749 DOM.qrContainer = $(".qr-container");
52da415f 41750 DOM.qrHider = DOM.qrContainer.find(".qr-hider");
e00964cc
IC
41751 DOM.qrImage = DOM.qrContainer.find(".qr-image");
41752 DOM.qrHint = DOM.qrContainer.find(".qr-hint");
41753 DOM.showQrEls = $("[data-show-qr]");
c6624d51
IC
41754
41755 function init() {
41756 // Events
41757 DOM.network.on("change", networkChanged);
56530adc 41758 DOM.bip32Client.on("change", bip32ClientChanged);
c6624d51
IC
41759 DOM.useEntropy.on("change", setEntropyVisibility);
41760 DOM.entropy.on("input", delayedEntropyChanged);
18abe53b 41761 DOM.entropyMnemonicLength.on("change", entropyChanged);
c6624d51
IC
41762 DOM.phrase.on("input", delayedPhraseChanged);
41763 DOM.passphrase.on("input", delayedPhraseChanged);
41764 DOM.generate.on("click", generateClicked);
41765 DOM.more.on("click", showMore);
41766 DOM.rootKey.on("input", delayedRootKeyChanged);
41767 DOM.bip32path.on("input", calcForDerivationPath);
41768 DOM.bip44purpose.on("input", calcForDerivationPath);
41769 DOM.bip44coin.on("input", calcForDerivationPath);
41770 DOM.bip44account.on("input", calcForDerivationPath);
41771 DOM.bip44change.on("input", calcForDerivationPath);
41772 DOM.tab.on("shown.bs.tab", calcForDerivationPath);
41773 DOM.hardenedAddresses.on("change", calcForDerivationPath);
41774 DOM.indexToggle.on("click", toggleIndexes);
41775 DOM.addressToggle.on("click", toggleAddresses);
41776 DOM.publicKeyToggle.on("click", togglePublicKeys);
41777 DOM.privateKeyToggle.on("click", togglePrivateKeys);
41778 DOM.languages.on("click", languageChanged);
e00964cc 41779 setQrEvents(DOM.showQrEls);
c6624d51
IC
41780 disableForms();
41781 hidePending();
41782 hideValidationError();
41783 populateNetworkSelect();
56530adc 41784 populateClientSelect();
c6624d51
IC
41785 }
41786
41787 // Event handlers
41788
41789 function networkChanged(e) {
41790 var networkIndex = e.target.value;
41791 networks[networkIndex].onSelect();
41792 if (seed != null) {
41793 phraseChanged();
41794 }
41795 else {
41796 rootKeyChanged();
41797 }
41798 }
41799
56530adc
IC
41800 function bip32ClientChanged(e) {
41801 var clientIndex = DOM.bip32Client.val();
41802 if (clientIndex == "custom") {
41803 DOM.bip32path.prop("readonly", false);
41804 }
41805 else {
41806 DOM.bip32path.prop("readonly", true);
41807 clients[clientIndex].onSelect();
41808 if (seed != null) {
41809 phraseChanged();
41810 }
41811 else {
41812 rootKeyChanged();
41813 }
41814 }
41815 }
41816
c6624d51
IC
41817 function setEntropyVisibility() {
41818 if (isUsingOwnEntropy()) {
41819 DOM.entropyContainer.removeClass("hidden");
41820 DOM.generateContainer.addClass("hidden");
41821 DOM.phrase.prop("readonly", true);
41822 DOM.entropy.focus();
41823 entropyChanged();
41824 }
41825 else {
41826 DOM.entropyContainer.addClass("hidden");
41827 DOM.generateContainer.removeClass("hidden");
41828 DOM.phrase.prop("readonly", false);
18abe53b 41829 hidePending();
c6624d51
IC
41830 }
41831 }
41832
41833 function delayedPhraseChanged() {
41834 hideValidationError();
41835 showPending();
41836 if (phraseChangeTimeoutEvent != null) {
41837 clearTimeout(phraseChangeTimeoutEvent);
41838 }
41839 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
41840 }
41841
41842 function phraseChanged() {
41843 showPending();
41844 hideValidationError();
41845 setMnemonicLanguage();
41846 // Get the mnemonic phrase
41847 var phrase = DOM.phrase.val();
41848 var errorText = findPhraseErrors(phrase);
41849 if (errorText) {
41850 showValidationError(errorText);
41851 return;
41852 }
41853 // Calculate and display
41854 var passphrase = DOM.passphrase.val();
41855 calcBip32RootKeyFromSeed(phrase, passphrase);
41856 calcForDerivationPath();
41857 hidePending();
41858 }
41859
41860 function delayedEntropyChanged() {
41861 hideValidationError();
41862 showPending();
41863 if (entropyChangeTimeoutEvent != null) {
41864 clearTimeout(entropyChangeTimeoutEvent);
41865 }
41866 entropyChangeTimeoutEvent = setTimeout(entropyChanged, 400);
41867 }
41868
41869 function entropyChanged() {
18abe53b
IC
41870 // If blank entropy, clear mnemonic, addresses, errors
41871 if (DOM.entropy.val().trim().length == 0) {
41872 clearDisplay();
2a6dd137 41873 clearEntropyFeedback();
18abe53b
IC
41874 DOM.phrase.val("");
41875 showValidationError("Blank entropy");
41876 return;
41877 }
41878 // Get the current phrase to detect changes
41879 var phrase = DOM.phrase.val();
41880 // Set the phrase from the entropy
c6624d51 41881 setMnemonicFromEntropy();
18abe53b
IC
41882 // Recalc addresses if the phrase has changed
41883 var newPhrase = DOM.phrase.val();
41884 if (newPhrase != phrase) {
41885 if (newPhrase.length == 0) {
41886 clearDisplay();
41887 }
41888 else {
41889 phraseChanged();
41890 }
41891 }
41892 else {
41893 hidePending();
41894 }
c6624d51
IC
41895 }
41896
41897 function delayedRootKeyChanged() {
41898 // Warn if there is an existing mnemonic or passphrase.
41899 if (DOM.phrase.val().length > 0 || DOM.passphrase.val().length > 0) {
41900 if (!confirm("This will clear existing mnemonic and passphrase")) {
41901 DOM.rootKey.val(bip32RootKey);
41902 return
41903 }
41904 }
41905 hideValidationError();
41906 showPending();
41907 // Clear existing mnemonic and passphrase
41908 DOM.phrase.val("");
41909 DOM.passphrase.val("");
41910 seed = null;
41911 if (rootKeyChangedTimeoutEvent != null) {
41912 clearTimeout(rootKeyChangedTimeoutEvent);
41913 }
41914 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged, 400);
41915 }
41916
41917 function rootKeyChanged() {
41918 showPending();
41919 hideValidationError();
41920 // Validate the root key TODO
41921 var rootKeyBase58 = DOM.rootKey.val();
41922 var errorText = validateRootKey(rootKeyBase58);
41923 if (errorText) {
41924 showValidationError(errorText);
41925 return;
41926 }
41927 // Calculate and display
41928 calcBip32RootKeyFromBase58(rootKeyBase58);
41929 calcForDerivationPath();
c6624d51
IC
41930 }
41931
41932 function calcForDerivationPath() {
41933 showPending();
ba3cb9ec 41934 clearAddressesList();
c6624d51
IC
41935 hideValidationError();
41936 // Get the derivation path
41937 var derivationPath = getDerivationPath();
41938 var errorText = findDerivationPathErrors(derivationPath);
41939 if (errorText) {
41940 showValidationError(errorText);
41941 return;
41942 }
20083ab9
IC
41943 bip32ExtendedKey = calcBip32ExtendedKey(derivationPath);
41944 if (bip44TabSelected()) {
41945 displayBip44Info();
41946 }
c6624d51
IC
41947 displayBip32Info();
41948 hidePending();
41949 }
41950
41951 function generateClicked() {
41952 if (isUsingOwnEntropy()) {
41953 return;
41954 }
41955 clearDisplay();
41956 showPending();
41957 setTimeout(function() {
41958 setMnemonicLanguage();
41959 var phrase = generateRandomPhrase();
41960 if (!phrase) {
41961 return;
41962 }
41963 phraseChanged();
41964 }, 50);
41965 }
41966
41967 function languageChanged() {
41968 setTimeout(function() {
41969 setMnemonicLanguage();
41970 if (DOM.phrase.val().length > 0) {
41971 var newPhrase = convertPhraseToNewLanguage();
41972 DOM.phrase.val(newPhrase);
41973 phraseChanged();
41974 }
41975 else {
41976 DOM.generate.trigger("click");
41977 }
41978 }, 50);
41979 }
41980
41981 function toggleIndexes() {
41982 showIndex = !showIndex;
41983 $("td.index span").toggleClass("invisible");
41984 }
41985
41986 function toggleAddresses() {
41987 showAddress = !showAddress;
41988 $("td.address span").toggleClass("invisible");
41989 }
41990
41991 function togglePublicKeys() {
41992 showPubKey = !showPubKey;
41993 $("td.pubkey span").toggleClass("invisible");
41994 }
41995
41996 function togglePrivateKeys() {
41997 showPrivKey = !showPrivKey;
41998 $("td.privkey span").toggleClass("invisible");
41999 }
42000
42001 // Private methods
42002
42003 function generateRandomPhrase() {
42004 if (!hasStrongRandom()) {
42005 var errorText = "This browser does not support strong randomness";
42006 showValidationError(errorText);
42007 return;
42008 }
18abe53b 42009 var numWords = parseInt(DOM.generatedStrength.val());
c6624d51
IC
42010 var strength = numWords / 3 * 32;
42011 var words = mnemonic.generate(strength);
42012 DOM.phrase.val(words);
42013 return words;
42014 }
42015
42016 function calcBip32RootKeyFromSeed(phrase, passphrase) {
42017 seed = mnemonic.toSeed(phrase, passphrase);
42018 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
42019 }
42020
42021 function calcBip32RootKeyFromBase58(rootKeyBase58) {
42022 bip32RootKey = bitcoin.HDNode.fromBase58(rootKeyBase58, network);
42023 }
42024
42025 function calcBip32ExtendedKey(path) {
0a1f0259
IC
42026 // Check there's a root key to derive from
42027 if (!bip32RootKey) {
42028 return bip32RootKey;
42029 }
20083ab9 42030 var extendedKey = bip32RootKey;
c6624d51
IC
42031 // Derive the key from the path
42032 var pathBits = path.split("/");
ebd8d4e8
IC
42033 for (var i=0; i<pathBits.length; i++) {
42034 var bit = pathBits[i];
42035 var index = parseInt(bit);
42036 if (isNaN(index)) {
42037 continue;
42038 }
42039 var hardened = bit[bit.length-1] == "'";
ba3cb9ec
IC
42040 var isPriv = "privKey" in extendedKey;
42041 var invalidDerivationPath = hardened && !isPriv;
42042 if (invalidDerivationPath) {
42043 extendedKey = null;
42044 }
42045 else if (hardened) {
20083ab9 42046 extendedKey = extendedKey.deriveHardened(index);
ebd8d4e8
IC
42047 }
42048 else {
20083ab9 42049 extendedKey = extendedKey.derive(index);
ebd8d4e8
IC
42050 }
42051 }
20083ab9 42052 return extendedKey
ebd8d4e8
IC
42053 }
42054
42055 function showValidationError(errorText) {
42056 DOM.feedback
42057 .text(errorText)
42058 .show();
42059 }
42060
42061 function hideValidationError() {
42062 DOM.feedback
42063 .text("")
42064 .hide();
42065 }
42066
42067 function findPhraseErrors(phrase) {
ebd8d4e8 42068 // Preprocess the words
783981de 42069 phrase = mnemonic.normalizeString(phrase);
0515eeec 42070 var words = phraseToWordArray(phrase);
18abe53b
IC
42071 // Detect blank phrase
42072 if (words.length == 0) {
42073 return "Blank mnemonic";
42074 }
563e401a 42075 // Check each word
0515eeec
IC
42076 for (var i=0; i<words.length; i++) {
42077 var word = words[i];
42078 var language = getLanguage();
42079 if (WORDLISTS[language].indexOf(word) == -1) {
563e401a
IC
42080 console.log("Finding closest match to " + word);
42081 var nearestWord = findNearestWord(word);
42082 return word + " not in wordlist, did you mean " + nearestWord + "?";
42083 }
42084 }
ebd8d4e8 42085 // Check the words are valid
0515eeec 42086 var properPhrase = wordArrayToPhrase(words);
ebd8d4e8
IC
42087 var isValid = mnemonic.check(properPhrase);
42088 if (!isValid) {
42089 return "Invalid mnemonic";
42090 }
42091 return false;
42092 }
42093
efe41586
IC
42094 function validateRootKey(rootKeyBase58) {
42095 try {
42096 bitcoin.HDNode.fromBase58(rootKeyBase58);
42097 }
42098 catch (e) {
42099 return "Invalid root key";
42100 }
42101 return "";
42102 }
42103
38523d36 42104 function getDerivationPath() {
20083ab9 42105 if (bip44TabSelected()) {
38523d36
IC
42106 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
42107 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
42108 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
42109 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
42110 var path = "m/";
42111 path += purpose + "'/";
42112 path += coin + "'/";
42113 path += account + "'/";
42114 path += change;
42115 DOM.bip44path.val(path);
42116 var derivationPath = DOM.bip44path.val();
42117 console.log("Using derivation path from BIP44 tab: " + derivationPath);
42118 return derivationPath;
42119 }
20083ab9 42120 else if (bip32TabSelected()) {
38523d36
IC
42121 var derivationPath = DOM.bip32path.val();
42122 console.log("Using derivation path from BIP32 tab: " + derivationPath);
42123 return derivationPath;
42124 }
42125 else {
42126 console.log("Unknown derivation path");
42127 }
42128 }
42129
ebd8d4e8 42130 function findDerivationPathErrors(path) {
30c9e79d
IC
42131 // TODO is not perfect but is better than nothing
42132 // Inspired by
42133 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#test-vectors
42134 // and
42135 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keys
42136 var maxDepth = 255; // TODO verify this!!
42137 var maxIndexValue = Math.pow(2, 31); // TODO verify this!!
42138 if (path[0] != "m") {
42139 return "First character must be 'm'";
42140 }
42141 if (path.length > 1) {
42142 if (path[1] != "/") {
42143 return "Separator must be '/'";
42144 }
42145 var indexes = path.split("/");
42146 if (indexes.length > maxDepth) {
42147 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
42148 }
42149 for (var depth = 1; depth<indexes.length; depth++) {
42150 var index = indexes[depth];
42151 var invalidChars = index.replace(/^[0-9]+'?$/g, "")
42152 if (invalidChars.length > 0) {
42153 return "Invalid characters " + invalidChars + " found at depth " + depth;
42154 }
42155 var indexValue = parseInt(index.replace("'", ""));
42156 if (isNaN(depth)) {
42157 return "Invalid number at depth " + depth;
42158 }
42159 if (indexValue > maxIndexValue) {
42160 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
42161 }
42162 }
42163 }
0a1f0259
IC
42164 // Check root key exists or else derivation path is useless!
42165 if (!bip32RootKey) {
42166 return "No root key";
42167 }
ba3cb9ec
IC
42168 // Check no hardened derivation path when using xpub keys
42169 var hardened = path.indexOf("'") > -1;
42170 var isXpubkey = !("privKey" in bip32RootKey);
42171 if (hardened && isXpubkey) {
42172 return "Hardened derivation path is invalid with xpub key";
42173 }
ebd8d4e8
IC
42174 return false;
42175 }
42176
20083ab9
IC
42177 function displayBip44Info() {
42178 // Get the derivation path for the account
42179 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
42180 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
42181 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
42182 var path = "m/";
42183 path += purpose + "'/";
42184 path += coin + "'/";
42185 path += account + "'/";
42186 // Calculate the account extended keys
42187 var accountExtendedKey = calcBip32ExtendedKey(path);
42188 var accountXprv = accountExtendedKey.toBase58();
42189 var accountXpub = accountExtendedKey.toBase58(false);
42190 // Display the extended keys
42191 DOM.bip44accountXprv.val(accountXprv);
42192 DOM.bip44accountXpub.val(accountXpub);
42193 }
42194
ebd8d4e8
IC
42195 function displayBip32Info() {
42196 // Display the key
73161a92 42197 DOM.seed.val(seed);
ebd8d4e8
IC
42198 var rootKey = bip32RootKey.toBase58();
42199 DOM.rootKey.val(rootKey);
ba3cb9ec
IC
42200 var xprvkeyB58 = "NA";
42201 if (bip32ExtendedKey.privKey) {
42202 xprvkeyB58 = bip32ExtendedKey.toBase58();
42203 }
42204 var extendedPrivKey = xprvkeyB58;
ebd8d4e8
IC
42205 DOM.extendedPrivKey.val(extendedPrivKey);
42206 var extendedPubKey = bip32ExtendedKey.toBase58(false);
42207 DOM.extendedPubKey.val(extendedPubKey);
42208 // Display the addresses and privkeys
42209 clearAddressesList();
42210 displayAddresses(0, 20);
42211 }
42212
42213 function displayAddresses(start, total) {
40892aba
IC
42214 generationProcesses.push(new (function() {
42215
42216 var rows = [];
42217
42218 this.stop = function() {
42219 for (var i=0; i<rows.length; i++) {
42220 rows[i].shouldGenerate = false;
42221 }
42222 }
42223
42224 for (var i=0; i<total; i++) {
42225 var index = i + start;
42226 rows.push(new TableRow(index));
42227 }
42228
42229 })());
80c4dd2a
IC
42230 }
42231
42232 function TableRow(index) {
42233
40892aba
IC
42234 var self = this;
42235 this.shouldGenerate = true;
1975bfbc
IC
42236 var useHardenedAddresses = DOM.hardenedAddresses.prop("checked");
42237
80c4dd2a
IC
42238 function init() {
42239 calculateValues();
42240 }
42241
42242 function calculateValues() {
42243 setTimeout(function() {
40892aba
IC
42244 if (!self.shouldGenerate) {
42245 return;
42246 }
1975bfbc
IC
42247 var key = "";
42248 if (useHardenedAddresses) {
42249 key = bip32ExtendedKey.deriveHardened(index);
42250 }
42251 else {
42252 key = bip32ExtendedKey.derive(index);
42253 }
80c4dd2a 42254 var address = key.getAddress().toString();
ba3cb9ec
IC
42255 var privkey = "NA";
42256 if (key.privKey) {
42257 privkey = key.privKey.toWIF(network);
42258 }
1b12b2f5 42259 var pubkey = key.pubKey.toHex();
38523d36 42260 var indexText = getDerivationPath() + "/" + index;
1975bfbc
IC
42261 if (useHardenedAddresses) {
42262 indexText = indexText + "'";
42263 }
8b095871
IC
42264 // Ethereum values are different
42265 if (networks[DOM.network.val()].name == "Ethereum") {
42266 var privKeyBuffer = key.privKey.d.toBuffer();
42267 privkey = privKeyBuffer.toString('hex');
42268 var addressBuffer = ethUtil.privateToAddress(privKeyBuffer);
49b21f12
IC
42269 var hexAddress = addressBuffer.toString('hex');
42270 var checksumAddress = ethUtil.toChecksumAddress(hexAddress);
42271 address = ethUtil.addHexPrefix(checksumAddress);
8b095871 42272 }
1b12b2f5 42273 addAddressToList(indexText, address, pubkey, privkey);
80c4dd2a 42274 }, 50)
ebd8d4e8 42275 }
80c4dd2a
IC
42276
42277 init();
42278
ebd8d4e8
IC
42279 }
42280
42281 function showMore() {
42282 var start = DOM.addresses.children().length;
42283 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
42284 if (isNaN(rowsToAdd)) {
42285 rowsToAdd = 20;
42286 DOM.rowsToAdd.val("20");
42287 }
42288 if (rowsToAdd > 200) {
42289 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
42290 msg += "Do you want to continue?";
42291 if (!confirm(msg)) {
42292 return;
42293 }
42294 }
ebd8d4e8 42295 displayAddresses(start, rowsToAdd);
ebd8d4e8
IC
42296 }
42297
42298 function clearDisplay() {
42299 clearAddressesList();
42300 clearKey();
42301 hideValidationError();
42302 }
42303
42304 function clearAddressesList() {
42305 DOM.addresses.empty();
40892aba
IC
42306 stopGenerating();
42307 }
42308
42309 function stopGenerating() {
42310 while (generationProcesses.length > 0) {
42311 var generation = generationProcesses.shift();
42312 generation.stop();
42313 }
ebd8d4e8
IC
42314 }
42315
42316 function clearKey() {
42317 DOM.rootKey.val("");
42318 DOM.extendedPrivKey.val("");
42319 DOM.extendedPubKey.val("");
42320 }
42321
1b12b2f5 42322 function addAddressToList(indexText, address, pubkey, privkey) {
ebd8d4e8 42323 var row = $(addressRowTemplate.html());
80c4dd2a
IC
42324 // Elements
42325 var indexCell = row.find(".index span");
42326 var addressCell = row.find(".address span");
1b12b2f5 42327 var pubkeyCell = row.find(".pubkey span");
80c4dd2a
IC
42328 var privkeyCell = row.find(".privkey span");
42329 // Content
ae30fed8 42330 indexCell.text(indexText);
80c4dd2a 42331 addressCell.text(address);
1b12b2f5 42332 pubkeyCell.text(pubkey);
80c4dd2a
IC
42333 privkeyCell.text(privkey);
42334 // Visibility
42335 if (!showIndex) {
42336 indexCell.addClass("invisible");
42337 }
42338 if (!showAddress) {
42339 addressCell.addClass("invisible");
42340 }
1b12b2f5
IC
42341 if (!showPubKey) {
42342 pubkeyCell.addClass("invisible");
42343 }
80c4dd2a 42344 if (!showPrivKey) {
6d628db7 42345 privkeyCell.addClass("invisible");
80c4dd2a 42346 }
ebd8d4e8 42347 DOM.addresses.append(row);
e00964cc
IC
42348 var rowShowQrEls = row.find("[data-show-qr]");
42349 setQrEvents(rowShowQrEls);
ebd8d4e8
IC
42350 }
42351
42352 function hasStrongRandom() {
42353 return 'crypto' in window && window['crypto'] !== null;
42354 }
42355
42356 function disableForms() {
42357 $("form").on("submit", function(e) {
42358 e.preventDefault();
42359 });
42360 }
42361
ebd8d4e8
IC
42362 function parseIntNoNaN(val, defaultVal) {
42363 var v = parseInt(val);
42364 if (isNaN(v)) {
42365 return defaultVal;
42366 }
42367 return v;
42368 }
42369
42370 function showPending() {
42371 DOM.feedback
42372 .text("Calculating...")
42373 .show();
42374 }
42375
563e401a 42376 function findNearestWord(word) {
0515eeec
IC
42377 var language = getLanguage();
42378 var words = WORDLISTS[language];
563e401a
IC
42379 var minDistance = 99;
42380 var closestWord = words[0];
42381 for (var i=0; i<words.length; i++) {
42382 var comparedTo = words[i];
6ea15134
IC
42383 if (comparedTo.indexOf(word) == 0) {
42384 return comparedTo;
42385 }
563e401a
IC
42386 var distance = Levenshtein.get(word, comparedTo);
42387 if (distance < minDistance) {
42388 closestWord = comparedTo;
42389 minDistance = distance;
42390 }
42391 }
42392 return closestWord;
42393 }
42394
ebd8d4e8
IC
42395 function hidePending() {
42396 DOM.feedback
42397 .text("")
42398 .hide();
42399 }
42400
ab78acc6
IC
42401 function populateNetworkSelect() {
42402 for (var i=0; i<networks.length; i++) {
42403 var network = networks[i];
42404 var option = $("<option>");
42405 option.attr("value", i);
42406 option.text(network.name);
42407 DOM.phraseNetwork.append(option);
42408 }
42409 }
42410
56530adc
IC
42411 function populateClientSelect() {
42412 for (var i=0; i<clients.length; i++) {
42413 var client = clients[i];
42414 var option = $("<option>");
42415 option.attr("value", i);
42416 option.text(client.name);
42417 DOM.bip32Client.append(option);
42418 }
42419 }
42420
0515eeec
IC
42421 function getLanguage() {
42422 var defaultLanguage = "english";
42423 // Try to get from existing phrase
42424 var language = getLanguageFromPhrase();
42425 // Try to get from url if not from phrase
42426 if (language.length == 0) {
42427 language = getLanguageFromUrl();
42428 }
42429 // Default to English if no other option
42430 if (language.length == 0) {
42431 language = defaultLanguage;
42432 }
42433 return language;
42434 }
42435
42436 function getLanguageFromPhrase(phrase) {
42437 // Check if how many words from existing phrase match a language.
42438 var language = "";
42439 if (!phrase) {
42440 phrase = DOM.phrase.val();
42441 }
42442 if (phrase.length > 0) {
42443 var words = phraseToWordArray(phrase);
42444 var languageMatches = {};
42445 for (l in WORDLISTS) {
42446 // Track how many words match in this language
42447 languageMatches[l] = 0;
42448 for (var i=0; i<words.length; i++) {
42449 var wordInLanguage = WORDLISTS[l].indexOf(words[i]) > -1;
42450 if (wordInLanguage) {
42451 languageMatches[l]++;
42452 }
42453 }
42454 // Find languages with most word matches.
42455 // This is made difficult due to commonalities between Chinese
42456 // simplified vs traditional.
42457 var mostMatches = 0;
42458 var mostMatchedLanguages = [];
42459 for (var l in languageMatches) {
42460 var numMatches = languageMatches[l];
42461 if (numMatches > mostMatches) {
42462 mostMatches = numMatches;
42463 mostMatchedLanguages = [l];
42464 }
42465 else if (numMatches == mostMatches) {
42466 mostMatchedLanguages.push(l);
42467 }
42468 }
42469 }
42470 if (mostMatchedLanguages.length > 0) {
42471 // Use first language and warn if multiple detected
42472 language = mostMatchedLanguages[0];
42473 if (mostMatchedLanguages.length > 1) {
42474 console.warn("Multiple possible languages");
42475 console.warn(mostMatchedLanguages);
42476 }
42477 }
42478 }
42479 return language;
42480 }
42481
42482 function getLanguageFromUrl() {
c6624d51
IC
42483 for (var language in WORDLISTS) {
42484 if (window.location.hash.indexOf(language) > -1) {
42485 return language;
42486 }
42487 }
42488 return "";
0515eeec
IC
42489 }
42490
42491 function setMnemonicLanguage() {
42492 var language = getLanguage();
42493 // Load the bip39 mnemonic generator for this language if required
42494 if (!(language in mnemonics)) {
42495 mnemonics[language] = new Mnemonic(language);
42496 }
42497 mnemonic = mnemonics[language];
42498 }
42499
42500 function convertPhraseToNewLanguage() {
42501 var oldLanguage = getLanguageFromPhrase();
42502 var newLanguage = getLanguageFromUrl();
42503 var oldPhrase = DOM.phrase.val();
42504 var oldWords = phraseToWordArray(oldPhrase);
42505 var newWords = [];
42506 for (var i=0; i<oldWords.length; i++) {
42507 var oldWord = oldWords[i];
42508 var index = WORDLISTS[oldLanguage].indexOf(oldWord);
42509 var newWord = WORDLISTS[newLanguage][index];
42510 newWords.push(newWord);
42511 }
42512 newPhrase = wordArrayToPhrase(newWords);
42513 return newPhrase;
42514 }
42515
42516 // TODO look at jsbip39 - mnemonic.splitWords
42517 function phraseToWordArray(phrase) {
42518 var words = phrase.split(/\s/g);
42519 var noBlanks = [];
42520 for (var i=0; i<words.length; i++) {
42521 var word = words[i];
42522 if (word.length > 0) {
42523 noBlanks.push(word);
42524 }
42525 }
42526 return noBlanks;
42527 }
42528
42529 // TODO look at jsbip39 - mnemonic.joinWords
42530 function wordArrayToPhrase(words) {
42531 var phrase = words.join(" ");
42532 var language = getLanguageFromPhrase(phrase);
42533 if (language == "japanese") {
42534 phrase = words.join("\u3000");
42535 }
42536 return phrase;
42537 }
42538
c6624d51
IC
42539 function isUsingOwnEntropy() {
42540 return DOM.useEntropy.prop("checked");
42541 }
42542
42543 function setMnemonicFromEntropy() {
2a6dd137 42544 clearEntropyFeedback();
18abe53b 42545 // Get entropy value
c6624d51 42546 var entropyStr = DOM.entropy.val();
18abe53b 42547 // Work out minimum base for entropy
c6624d51 42548 var entropy = Entropy.fromString(entropyStr);
18abe53b 42549 if (entropy.binaryStr.length == 0) {
c6624d51
IC
42550 return;
42551 }
42552 // Show entropy details
18abe53b
IC
42553 showEntropyFeedback(entropy);
42554 // Use entropy hash if not using raw entropy
42555 var bits = entropy.binaryStr;
42556 var mnemonicLength = DOM.entropyMnemonicLength.val();
42557 if (mnemonicLength != "raw") {
42558 // Get bits by hashing entropy with SHA256
42559 var hash = sjcl.hash.sha256.hash(entropy.cleanStr);
42560 var hex = sjcl.codec.hex.fromBits(hash);
42561 bits = BigInteger.parse(hex, 16).toString(2);
53aaab27 42562 while (bits.length % 256 != 0) {
18abe53b
IC
42563 bits = "0" + bits;
42564 }
42565 // Truncate hash to suit number of words
42566 mnemonicLength = parseInt(mnemonicLength);
42567 var numberOfBits = 32 * mnemonicLength / 3;
42568 bits = bits.substring(0, numberOfBits);
c6624d51 42569 }
c6624d51 42570 // Discard trailing entropy
18abe53b 42571 var bitsToUse = Math.floor(bits.length / 32) * 32;
2a6dd137
IC
42572 var start = bits.length - bitsToUse;
42573 var binaryStr = bits.substring(start);
c6624d51
IC
42574 // Convert entropy string to numeric array
42575 var entropyArr = [];
18abe53b
IC
42576 for (var i=0; i<binaryStr.length / 8; i++) {
42577 var byteAsBits = binaryStr.substring(i*8, i*8+8);
42578 var entropyByte = parseInt(byteAsBits, 2);
c6624d51
IC
42579 entropyArr.push(entropyByte)
42580 }
42581 // Convert entropy array to mnemonic
42582 var phrase = mnemonic.toMnemonic(entropyArr);
42583 // Set the mnemonic in the UI
42584 DOM.phrase.val(phrase);
42585 }
42586
2a6dd137
IC
42587 function clearEntropyFeedback() {
42588 DOM.entropyStrength.text("...");
18abe53b 42589 DOM.entropyType.text("");
2a6dd137
IC
42590 DOM.entropyWordCount.text("0");
42591 DOM.entropyEventCount.text("0");
42592 DOM.entropyBitsPerEvent.text("0");
42593 DOM.entropyBits.text("0");
42594 DOM.entropyFiltered.html("&nbsp;");
42595 DOM.entropyBinary.html("&nbsp;");
c6624d51
IC
42596 }
42597
18abe53b 42598 function showEntropyFeedback(entropy) {
9e97eb76 42599 var numberOfBits = entropy.binaryStr.length;
18abe53b 42600 var strength = "extremely weak";
9e97eb76 42601 if (numberOfBits >= 64) {
18abe53b
IC
42602 strength = "very weak";
42603 }
9e97eb76 42604 if (numberOfBits >= 96) {
18abe53b
IC
42605 strength = "weak";
42606 }
9e97eb76 42607 if (numberOfBits >= 128) {
18abe53b
IC
42608 strength = "strong";
42609 }
9e97eb76 42610 if (numberOfBits >= 160) {
18abe53b
IC
42611 strength = "very strong";
42612 }
9e97eb76 42613 if (numberOfBits >= 192) {
18abe53b
IC
42614 strength = "extremely strong";
42615 }
42616 // If time to crack is less than one day, and password is considered
42617 // strong or better based on the number of bits, rename strength to
42618 // 'easily cracked'.
95f04905
IC
42619 try {
42620 var z = zxcvbn(entropy.base.parts.join(""));
42621 var timeToCrack = z.crack_times_seconds.offline_fast_hashing_1e10_per_second;
42622 if (timeToCrack < 86400 && entropy.binaryStr.length >= 128) {
42623 strength = "easily cracked";
42624 if (z.feedback.warning != "") {
42625 strength = strength + " - " + z.feedback.warning;
42626 };
42627 }
18abe53b 42628 }
95f04905
IC
42629 catch (e) {
42630 strength = "unknown";
42631 console.log("Error detecting entropy strength with zxcvbn:");
42632 console.log(e);
42633 }
95f04905 42634 var entropyTypeStr = getEntropyTypeStr(entropy);
9e97eb76 42635 var wordCount = Math.floor(numberOfBits / 32) * 3;
94959756 42636 var bitsPerEvent = entropy.bitsPerEvent.toFixed(2);
2a6dd137 42637 DOM.entropyFiltered.html(entropy.cleanHtml);
95f04905 42638 DOM.entropyType.text(entropyTypeStr);
18abe53b
IC
42639 DOM.entropyStrength.text(strength);
42640 DOM.entropyEventCount.text(entropy.base.ints.length);
9e97eb76 42641 DOM.entropyBits.text(numberOfBits);
2a6dd137
IC
42642 DOM.entropyWordCount.text(wordCount);
42643 DOM.entropyBinary.text(entropy.binaryStr);
9e97eb76 42644 DOM.entropyBitsPerEvent.text(bitsPerEvent);
95f04905
IC
42645 }
42646
42647 function getEntropyTypeStr(entropy) {
42648 var typeStr = entropy.base.str;
42649 // Add some detail if these are cards
42650 if (entropy.base.asInt == 52) {
42651 var cardDetail = []; // array of message strings
42652 // Detect duplicates
42653 var dupes = [];
42654 var dupeTracker = {};
42655 for (var i=0; i<entropy.base.parts.length; i++) {
42656 var card = entropy.base.parts[i];
9e97eb76
IC
42657 var cardUpper = card.toUpperCase();
42658 if (cardUpper in dupeTracker) {
95f04905
IC
42659 dupes.push(card);
42660 }
9e97eb76 42661 dupeTracker[cardUpper] = true;
95f04905
IC
42662 }
42663 if (dupes.length > 0) {
42664 var dupeWord = "duplicates";
42665 if (dupes.length == 1) {
42666 dupeWord = "duplicate";
42667 }
42668 var msg = dupes.length + " " + dupeWord + ": " + dupes.slice(0,3).join(" ");
42669 if (dupes.length > 3) {
42670 msg += "...";
42671 }
42672 cardDetail.push(msg);
42673 }
42674 // Detect full deck
42675 var uniqueCards = [];
42676 for (var uniqueCard in dupeTracker) {
42677 uniqueCards.push(uniqueCard);
42678 }
42679 if (uniqueCards.length == 52) {
42680 cardDetail.unshift("full deck");
42681 }
9e97eb76
IC
42682 // Detect missing cards
42683 var values = "A23456789TJQK";
42684 var suits = "CDHS";
42685 var missingCards = [];
42686 for (var i=0; i<suits.length; i++) {
42687 for (var j=0; j<values.length; j++) {
42688 var card = values[j] + suits[i];
42689 if (!(card in dupeTracker)) {
42690 missingCards.push(card);
42691 }
42692 }
42693 }
42694 // Display missing cards if six or less, ie clearly going for full deck
42695 if (missingCards.length > 0 && missingCards.length <= 6) {
42696 var msg = missingCards.length + " missing: " + missingCards.slice(0,3).join(" ");
42697 if (missingCards.length > 3) {
42698 msg += "...";
42699 }
42700 cardDetail.push(msg);
42701 }
95f04905
IC
42702 // Add card details to typeStr
42703 if (cardDetail.length > 0) {
42704 typeStr += " (" + cardDetail.join(", ") + ")";
42705 }
42706 }
42707 return typeStr;
42708 }
42709
e00964cc
IC
42710 function setQrEvents(els) {
42711 els.on("mouseenter", createQr);
42712 els.on("mouseleave", destroyQr);
42713 els.on("click", toggleQr);
42714 }
42715
42716 function createQr(e) {
42717 var content = e.target.textContent || e.target.value;
42718 if (content) {
42719 var size = 130;
42720 DOM.qrImage.qrcode({width: size, height: size, text: content});
42721 if (!showQr) {
52da415f
IC
42722 DOM.qrHider.addClass("hidden");
42723 }
42724 else {
42725 DOM.qrHider.removeClass("hidden");
e00964cc
IC
42726 }
42727 DOM.qrContainer.removeClass("hidden");
42728 }
42729 }
42730
42731 function destroyQr() {
42732 DOM.qrImage.text("");
42733 DOM.qrContainer.addClass("hidden");
42734 }
42735
42736 function toggleQr() {
42737 showQr = !showQr;
52da415f 42738 DOM.qrHider.toggleClass("hidden");
e00964cc
IC
42739 DOM.qrHint.toggleClass("hidden");
42740 }
42741
20083ab9
IC
42742 function bip44TabSelected() {
42743 return DOM.bip44tab.hasClass("active");
42744 }
42745
42746 function bip32TabSelected() {
42747 return DOM.bip32tab.hasClass("active");
42748 }
42749
ab78acc6
IC
42750 var networks = [
42751 {
42752 name: "Bitcoin",
42753 onSelect: function() {
42754 network = bitcoin.networks.bitcoin;
42755 DOM.bip44coin.val(0);
ab78acc6
IC
42756 },
42757 },
42758 {
42759 name: "Bitcoin Testnet",
42760 onSelect: function() {
42761 network = bitcoin.networks.testnet;
42762 DOM.bip44coin.val(1);
ab78acc6
IC
42763 },
42764 },
42765 {
52d589ea 42766 name: "CLAM",
ab78acc6 42767 onSelect: function() {
52d589ea
IC
42768 network = bitcoin.networks.clam;
42769 DOM.bip44coin.val(23);
ab78acc6
IC
42770 },
42771 },
42772 {
42773 name: "Dogecoin",
42774 onSelect: function() {
42775 network = bitcoin.networks.dogecoin;
42776 DOM.bip44coin.val(3);
42777 },
42778 },
d5dc92fd 42779 {
52d589ea 42780 name: "DASH",
d5dc92fd 42781 onSelect: function() {
52d589ea
IC
42782 network = bitcoin.networks.dash;
42783 DOM.bip44coin.val(5);
d5dc92fd
IC
42784 },
42785 },
42786 {
52d589ea 42787 name: "Ethereum",
d5dc92fd 42788 onSelect: function() {
52d589ea
IC
42789 network = bitcoin.networks.bitcoin;
42790 DOM.bip44coin.val(60);
d5dc92fd
IC
42791 },
42792 },
f88fab20 42793 {
42794 name: "GAME",
42795 onSelect: function() {
42796 network = bitcoin.networks.game;
42797 DOM.bip44coin.val(101);
42798 },
42799 },
a3baa26e 42800 {
52d589ea 42801 name: "Jumbucks",
a3baa26e 42802 onSelect: function() {
52d589ea
IC
42803 network = bitcoin.networks.jumbucks;
42804 DOM.bip44coin.val(26);
a3baa26e
IC
42805 },
42806 },
42807 {
52d589ea 42808 name: "Litecoin",
a3baa26e 42809 onSelect: function() {
52d589ea
IC
42810 network = bitcoin.networks.litecoin;
42811 DOM.bip44coin.val(2);
a3baa26e
IC
42812 },
42813 },
42814 {
52d589ea 42815 name: "Namecoin",
a3baa26e 42816 onSelect: function() {
52d589ea
IC
42817 network = bitcoin.networks.namecoin;
42818 DOM.bip44coin.val(7);
a3baa26e
IC
42819 },
42820 },
5c434a8a 42821 {
52d589ea 42822 name: "Peercoin",
5c434a8a 42823 onSelect: function() {
52d589ea
IC
42824 network = bitcoin.networks.peercoin;
42825 DOM.bip44coin.val(6);
5c434a8a
CM
42826 },
42827 },
5493efc3 42828 {
52d589ea 42829 name: "ShadowCash",
5493efc3 42830 onSelect: function() {
52d589ea
IC
42831 network = bitcoin.networks.shadow;
42832 DOM.bip44coin.val(35);
5493efc3 42833 },
42834 },
07ac4350 42835 {
52d589ea 42836 name: "ShadowCash Testnet",
07ac4350 42837 onSelect: function() {
52d589ea
IC
42838 network = bitcoin.networks.shadowtn;
42839 DOM.bip44coin.val(1);
07ac4350 42840 },
42841 },
42842 {
52d589ea 42843 name: "Viacoin",
07ac4350 42844 onSelect: function() {
52d589ea
IC
42845 network = bitcoin.networks.viacoin;
42846 DOM.bip44coin.val(14);
07ac4350 42847 },
42848 },
8b095871 42849 {
52d589ea 42850 name: "Viacoin Testnet",
8b095871 42851 onSelect: function() {
52d589ea
IC
42852 network = bitcoin.networks.viacointestnet;
42853 DOM.bip44coin.val(1);
8b095871
IC
42854 },
42855 },
ab78acc6
IC
42856 ]
42857
56530adc
IC
42858 var clients = [
42859 {
42860 name: "Bitcoin Core",
42861 onSelect: function() {
42862 DOM.bip32path.val("m/0'/0'");
42863 DOM.hardenedAddresses.prop('checked', true);
42864 },
42865 },
42866 {
42867 name: "blockchain.info",
42868 onSelect: function() {
42869 DOM.bip32path.val("m/44'/0'/0'");
42870 DOM.hardenedAddresses.prop('checked', false);
42871 },
42872 },
42873 {
42874 name: "MultiBit HD",
42875 onSelect: function() {
42876 DOM.bip32path.val("m/0'/0");
42877 DOM.hardenedAddresses.prop('checked', false);
42878 },
42879 }
42880 ]
42881
ebd8d4e8
IC
42882 init();
42883
42884})();
dc55c6b0 42885</script>
ebd8d4e8
IC
42886 </body>
42887</html>