]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blob - bip39-standalone.html
typo
[perso/Immae/Projets/Cryptomonnaies/BIP39.git] / bip39-standalone.html
1 <!DOCTYPE html>
2 <html>
3 <head lang="en">
4 <meta charset="utf-8" />
5 <title>BIP39 - Mnemonic Code</title>
6 <style>/*!
7 * Bootstrap v3.3.7 (http://getbootstrap.com)
8 * Copyright 2011-2016 Twitter, Inc.
9 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
10 */
11 /*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
12 html {
13 font-family: sans-serif;
14 -webkit-text-size-adjust: 100%;
15 -ms-text-size-adjust: 100%;
16 }
17 body {
18 margin: 0;
19 }
20 article,
21 aside,
22 details,
23 figcaption,
24 figure,
25 footer,
26 header,
27 hgroup,
28 main,
29 menu,
30 nav,
31 section,
32 summary {
33 display: block;
34 }
35 audio,
36 canvas,
37 progress,
38 video {
39 display: inline-block;
40 vertical-align: baseline;
41 }
42 audio:not([controls]) {
43 display: none;
44 height: 0;
45 }
46 [hidden],
47 template {
48 display: none;
49 }
50 a {
51 background-color: transparent;
52 }
53 a:active,
54 a:hover {
55 outline: 0;
56 }
57 abbr[title] {
58 border-bottom: 1px dotted;
59 }
60 b,
61 strong {
62 font-weight: bold;
63 }
64 dfn {
65 font-style: italic;
66 }
67 h1 {
68 margin: .67em 0;
69 font-size: 2em;
70 }
71 mark {
72 color: #000;
73 background: #ff0;
74 }
75 small {
76 font-size: 80%;
77 }
78 sub,
79 sup {
80 position: relative;
81 font-size: 75%;
82 line-height: 0;
83 vertical-align: baseline;
84 }
85 sup {
86 top: -.5em;
87 }
88 sub {
89 bottom: -.25em;
90 }
91 img {
92 border: 0;
93 }
94 svg:not(:root) {
95 overflow: hidden;
96 }
97 figure {
98 margin: 1em 40px;
99 }
100 hr {
101 height: 0;
102 -webkit-box-sizing: content-box;
103 -moz-box-sizing: content-box;
104 box-sizing: content-box;
105 }
106 pre {
107 overflow: auto;
108 }
109 code,
110 kbd,
111 pre,
112 samp {
113 font-family: monospace, monospace;
114 font-size: 1em;
115 }
116 button,
117 input,
118 optgroup,
119 select,
120 textarea {
121 margin: 0;
122 font: inherit;
123 color: inherit;
124 }
125 button {
126 overflow: visible;
127 }
128 button,
129 select {
130 text-transform: none;
131 }
132 button,
133 html input[type="button"],
134 input[type="reset"],
135 input[type="submit"] {
136 -webkit-appearance: button;
137 cursor: pointer;
138 }
139 button[disabled],
140 html input[disabled] {
141 cursor: default;
142 }
143 button::-moz-focus-inner,
144 input::-moz-focus-inner {
145 padding: 0;
146 border: 0;
147 }
148 input {
149 line-height: normal;
150 }
151 input[type="checkbox"],
152 input[type="radio"] {
153 -webkit-box-sizing: border-box;
154 -moz-box-sizing: border-box;
155 box-sizing: border-box;
156 padding: 0;
157 }
158 input[type="number"]::-webkit-inner-spin-button,
159 input[type="number"]::-webkit-outer-spin-button {
160 height: auto;
161 }
162 input[type="search"] {
163 -webkit-box-sizing: content-box;
164 -moz-box-sizing: content-box;
165 box-sizing: content-box;
166 -webkit-appearance: textfield;
167 }
168 input[type="search"]::-webkit-search-cancel-button,
169 input[type="search"]::-webkit-search-decoration {
170 -webkit-appearance: none;
171 }
172 fieldset {
173 padding: .35em .625em .75em;
174 margin: 0 2px;
175 border: 1px solid #c0c0c0;
176 }
177 legend {
178 padding: 0;
179 border: 0;
180 }
181 textarea {
182 overflow: auto;
183 }
184 optgroup {
185 font-weight: bold;
186 }
187 table {
188 border-spacing: 0;
189 border-collapse: collapse;
190 }
191 td,
192 th {
193 padding: 0;
194 }
195 /*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
196 @media print {
197 *,
198 *:before,
199 *:after {
200 color: #000 !important;
201 text-shadow: none !important;
202 background: transparent !important;
203 -webkit-box-shadow: none !important;
204 box-shadow: none !important;
205 }
206 a,
207 a:visited {
208 text-decoration: underline;
209 }
210 a[href]:after {
211 content: " (" attr(href) ")";
212 }
213 abbr[title]:after {
214 content: " (" attr(title) ")";
215 }
216 a[href^="#"]:after,
217 a[href^="javascript:"]:after {
218 content: "";
219 }
220 pre,
221 blockquote {
222 border: 1px solid #999;
223
224 page-break-inside: avoid;
225 }
226 thead {
227 display: table-header-group;
228 }
229 tr,
230 img {
231 page-break-inside: avoid;
232 }
233 img {
234 max-width: 100% !important;
235 }
236 p,
237 h2,
238 h3 {
239 orphans: 3;
240 widows: 3;
241 }
242 h2,
243 h3 {
244 page-break-after: avoid;
245 }
246 .navbar {
247 display: none;
248 }
249 .btn > .caret,
250 .dropup > .btn > .caret {
251 border-top-color: #000 !important;
252 }
253 .label {
254 border: 1px solid #000;
255 }
256 .table {
257 border-collapse: collapse !important;
258 }
259 .table td,
260 .table th {
261 background-color: #fff !important;
262 }
263 .table-bordered th,
264 .table-bordered td {
265 border: 1px solid #ddd !important;
266 }
267 }
268 @font-face {
269 font-family: 'Glyphicons Halflings';
270
271 src: url('../fonts/glyphicons-halflings-regular.eot');
272 src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), 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');
273 }
274 .glyphicon {
275 position: relative;
276 top: 1px;
277 display: inline-block;
278 font-family: 'Glyphicons Halflings';
279 font-style: normal;
280 font-weight: normal;
281 line-height: 1;
282
283 -webkit-font-smoothing: antialiased;
284 -moz-osx-font-smoothing: grayscale;
285 }
286 .glyphicon-asterisk:before {
287 content: "\002a";
288 }
289 .glyphicon-plus:before {
290 content: "\002b";
291 }
292 .glyphicon-euro:before,
293 .glyphicon-eur:before {
294 content: "\20ac";
295 }
296 .glyphicon-minus:before {
297 content: "\2212";
298 }
299 .glyphicon-cloud:before {
300 content: "\2601";
301 }
302 .glyphicon-envelope:before {
303 content: "\2709";
304 }
305 .glyphicon-pencil:before {
306 content: "\270f";
307 }
308 .glyphicon-glass:before {
309 content: "\e001";
310 }
311 .glyphicon-music:before {
312 content: "\e002";
313 }
314 .glyphicon-search:before {
315 content: "\e003";
316 }
317 .glyphicon-heart:before {
318 content: "\e005";
319 }
320 .glyphicon-star:before {
321 content: "\e006";
322 }
323 .glyphicon-star-empty:before {
324 content: "\e007";
325 }
326 .glyphicon-user:before {
327 content: "\e008";
328 }
329 .glyphicon-film:before {
330 content: "\e009";
331 }
332 .glyphicon-th-large:before {
333 content: "\e010";
334 }
335 .glyphicon-th:before {
336 content: "\e011";
337 }
338 .glyphicon-th-list:before {
339 content: "\e012";
340 }
341 .glyphicon-ok:before {
342 content: "\e013";
343 }
344 .glyphicon-remove:before {
345 content: "\e014";
346 }
347 .glyphicon-zoom-in:before {
348 content: "\e015";
349 }
350 .glyphicon-zoom-out:before {
351 content: "\e016";
352 }
353 .glyphicon-off:before {
354 content: "\e017";
355 }
356 .glyphicon-signal:before {
357 content: "\e018";
358 }
359 .glyphicon-cog:before {
360 content: "\e019";
361 }
362 .glyphicon-trash:before {
363 content: "\e020";
364 }
365 .glyphicon-home:before {
366 content: "\e021";
367 }
368 .glyphicon-file:before {
369 content: "\e022";
370 }
371 .glyphicon-time:before {
372 content: "\e023";
373 }
374 .glyphicon-road:before {
375 content: "\e024";
376 }
377 .glyphicon-download-alt:before {
378 content: "\e025";
379 }
380 .glyphicon-download:before {
381 content: "\e026";
382 }
383 .glyphicon-upload:before {
384 content: "\e027";
385 }
386 .glyphicon-inbox:before {
387 content: "\e028";
388 }
389 .glyphicon-play-circle:before {
390 content: "\e029";
391 }
392 .glyphicon-repeat:before {
393 content: "\e030";
394 }
395 .glyphicon-refresh:before {
396 content: "\e031";
397 }
398 .glyphicon-list-alt:before {
399 content: "\e032";
400 }
401 .glyphicon-lock:before {
402 content: "\e033";
403 }
404 .glyphicon-flag:before {
405 content: "\e034";
406 }
407 .glyphicon-headphones:before {
408 content: "\e035";
409 }
410 .glyphicon-volume-off:before {
411 content: "\e036";
412 }
413 .glyphicon-volume-down:before {
414 content: "\e037";
415 }
416 .glyphicon-volume-up:before {
417 content: "\e038";
418 }
419 .glyphicon-qrcode:before {
420 content: "\e039";
421 }
422 .glyphicon-barcode:before {
423 content: "\e040";
424 }
425 .glyphicon-tag:before {
426 content: "\e041";
427 }
428 .glyphicon-tags:before {
429 content: "\e042";
430 }
431 .glyphicon-book:before {
432 content: "\e043";
433 }
434 .glyphicon-bookmark:before {
435 content: "\e044";
436 }
437 .glyphicon-print:before {
438 content: "\e045";
439 }
440 .glyphicon-camera:before {
441 content: "\e046";
442 }
443 .glyphicon-font:before {
444 content: "\e047";
445 }
446 .glyphicon-bold:before {
447 content: "\e048";
448 }
449 .glyphicon-italic:before {
450 content: "\e049";
451 }
452 .glyphicon-text-height:before {
453 content: "\e050";
454 }
455 .glyphicon-text-width:before {
456 content: "\e051";
457 }
458 .glyphicon-align-left:before {
459 content: "\e052";
460 }
461 .glyphicon-align-center:before {
462 content: "\e053";
463 }
464 .glyphicon-align-right:before {
465 content: "\e054";
466 }
467 .glyphicon-align-justify:before {
468 content: "\e055";
469 }
470 .glyphicon-list:before {
471 content: "\e056";
472 }
473 .glyphicon-indent-left:before {
474 content: "\e057";
475 }
476 .glyphicon-indent-right:before {
477 content: "\e058";
478 }
479 .glyphicon-facetime-video:before {
480 content: "\e059";
481 }
482 .glyphicon-picture:before {
483 content: "\e060";
484 }
485 .glyphicon-map-marker:before {
486 content: "\e062";
487 }
488 .glyphicon-adjust:before {
489 content: "\e063";
490 }
491 .glyphicon-tint:before {
492 content: "\e064";
493 }
494 .glyphicon-edit:before {
495 content: "\e065";
496 }
497 .glyphicon-share:before {
498 content: "\e066";
499 }
500 .glyphicon-check:before {
501 content: "\e067";
502 }
503 .glyphicon-move:before {
504 content: "\e068";
505 }
506 .glyphicon-step-backward:before {
507 content: "\e069";
508 }
509 .glyphicon-fast-backward:before {
510 content: "\e070";
511 }
512 .glyphicon-backward:before {
513 content: "\e071";
514 }
515 .glyphicon-play:before {
516 content: "\e072";
517 }
518 .glyphicon-pause:before {
519 content: "\e073";
520 }
521 .glyphicon-stop:before {
522 content: "\e074";
523 }
524 .glyphicon-forward:before {
525 content: "\e075";
526 }
527 .glyphicon-fast-forward:before {
528 content: "\e076";
529 }
530 .glyphicon-step-forward:before {
531 content: "\e077";
532 }
533 .glyphicon-eject:before {
534 content: "\e078";
535 }
536 .glyphicon-chevron-left:before {
537 content: "\e079";
538 }
539 .glyphicon-chevron-right:before {
540 content: "\e080";
541 }
542 .glyphicon-plus-sign:before {
543 content: "\e081";
544 }
545 .glyphicon-minus-sign:before {
546 content: "\e082";
547 }
548 .glyphicon-remove-sign:before {
549 content: "\e083";
550 }
551 .glyphicon-ok-sign:before {
552 content: "\e084";
553 }
554 .glyphicon-question-sign:before {
555 content: "\e085";
556 }
557 .glyphicon-info-sign:before {
558 content: "\e086";
559 }
560 .glyphicon-screenshot:before {
561 content: "\e087";
562 }
563 .glyphicon-remove-circle:before {
564 content: "\e088";
565 }
566 .glyphicon-ok-circle:before {
567 content: "\e089";
568 }
569 .glyphicon-ban-circle:before {
570 content: "\e090";
571 }
572 .glyphicon-arrow-left:before {
573 content: "\e091";
574 }
575 .glyphicon-arrow-right:before {
576 content: "\e092";
577 }
578 .glyphicon-arrow-up:before {
579 content: "\e093";
580 }
581 .glyphicon-arrow-down:before {
582 content: "\e094";
583 }
584 .glyphicon-share-alt:before {
585 content: "\e095";
586 }
587 .glyphicon-resize-full:before {
588 content: "\e096";
589 }
590 .glyphicon-resize-small:before {
591 content: "\e097";
592 }
593 .glyphicon-exclamation-sign:before {
594 content: "\e101";
595 }
596 .glyphicon-gift:before {
597 content: "\e102";
598 }
599 .glyphicon-leaf:before {
600 content: "\e103";
601 }
602 .glyphicon-fire:before {
603 content: "\e104";
604 }
605 .glyphicon-eye-open:before {
606 content: "\e105";
607 }
608 .glyphicon-eye-close:before {
609 content: "\e106";
610 }
611 .glyphicon-warning-sign:before {
612 content: "\e107";
613 }
614 .glyphicon-plane:before {
615 content: "\e108";
616 }
617 .glyphicon-calendar:before {
618 content: "\e109";
619 }
620 .glyphicon-random:before {
621 content: "\e110";
622 }
623 .glyphicon-comment:before {
624 content: "\e111";
625 }
626 .glyphicon-magnet:before {
627 content: "\e112";
628 }
629 .glyphicon-chevron-up:before {
630 content: "\e113";
631 }
632 .glyphicon-chevron-down:before {
633 content: "\e114";
634 }
635 .glyphicon-retweet:before {
636 content: "\e115";
637 }
638 .glyphicon-shopping-cart:before {
639 content: "\e116";
640 }
641 .glyphicon-folder-close:before {
642 content: "\e117";
643 }
644 .glyphicon-folder-open:before {
645 content: "\e118";
646 }
647 .glyphicon-resize-vertical:before {
648 content: "\e119";
649 }
650 .glyphicon-resize-horizontal:before {
651 content: "\e120";
652 }
653 .glyphicon-hdd:before {
654 content: "\e121";
655 }
656 .glyphicon-bullhorn:before {
657 content: "\e122";
658 }
659 .glyphicon-bell:before {
660 content: "\e123";
661 }
662 .glyphicon-certificate:before {
663 content: "\e124";
664 }
665 .glyphicon-thumbs-up:before {
666 content: "\e125";
667 }
668 .glyphicon-thumbs-down:before {
669 content: "\e126";
670 }
671 .glyphicon-hand-right:before {
672 content: "\e127";
673 }
674 .glyphicon-hand-left:before {
675 content: "\e128";
676 }
677 .glyphicon-hand-up:before {
678 content: "\e129";
679 }
680 .glyphicon-hand-down:before {
681 content: "\e130";
682 }
683 .glyphicon-circle-arrow-right:before {
684 content: "\e131";
685 }
686 .glyphicon-circle-arrow-left:before {
687 content: "\e132";
688 }
689 .glyphicon-circle-arrow-up:before {
690 content: "\e133";
691 }
692 .glyphicon-circle-arrow-down:before {
693 content: "\e134";
694 }
695 .glyphicon-globe:before {
696 content: "\e135";
697 }
698 .glyphicon-wrench:before {
699 content: "\e136";
700 }
701 .glyphicon-tasks:before {
702 content: "\e137";
703 }
704 .glyphicon-filter:before {
705 content: "\e138";
706 }
707 .glyphicon-briefcase:before {
708 content: "\e139";
709 }
710 .glyphicon-fullscreen:before {
711 content: "\e140";
712 }
713 .glyphicon-dashboard:before {
714 content: "\e141";
715 }
716 .glyphicon-paperclip:before {
717 content: "\e142";
718 }
719 .glyphicon-heart-empty:before {
720 content: "\e143";
721 }
722 .glyphicon-link:before {
723 content: "\e144";
724 }
725 .glyphicon-phone:before {
726 content: "\e145";
727 }
728 .glyphicon-pushpin:before {
729 content: "\e146";
730 }
731 .glyphicon-usd:before {
732 content: "\e148";
733 }
734 .glyphicon-gbp:before {
735 content: "\e149";
736 }
737 .glyphicon-sort:before {
738 content: "\e150";
739 }
740 .glyphicon-sort-by-alphabet:before {
741 content: "\e151";
742 }
743 .glyphicon-sort-by-alphabet-alt:before {
744 content: "\e152";
745 }
746 .glyphicon-sort-by-order:before {
747 content: "\e153";
748 }
749 .glyphicon-sort-by-order-alt:before {
750 content: "\e154";
751 }
752 .glyphicon-sort-by-attributes:before {
753 content: "\e155";
754 }
755 .glyphicon-sort-by-attributes-alt:before {
756 content: "\e156";
757 }
758 .glyphicon-unchecked:before {
759 content: "\e157";
760 }
761 .glyphicon-expand:before {
762 content: "\e158";
763 }
764 .glyphicon-collapse-down:before {
765 content: "\e159";
766 }
767 .glyphicon-collapse-up:before {
768 content: "\e160";
769 }
770 .glyphicon-log-in:before {
771 content: "\e161";
772 }
773 .glyphicon-flash:before {
774 content: "\e162";
775 }
776 .glyphicon-log-out:before {
777 content: "\e163";
778 }
779 .glyphicon-new-window:before {
780 content: "\e164";
781 }
782 .glyphicon-record:before {
783 content: "\e165";
784 }
785 .glyphicon-save:before {
786 content: "\e166";
787 }
788 .glyphicon-open:before {
789 content: "\e167";
790 }
791 .glyphicon-saved:before {
792 content: "\e168";
793 }
794 .glyphicon-import:before {
795 content: "\e169";
796 }
797 .glyphicon-export:before {
798 content: "\e170";
799 }
800 .glyphicon-send:before {
801 content: "\e171";
802 }
803 .glyphicon-floppy-disk:before {
804 content: "\e172";
805 }
806 .glyphicon-floppy-saved:before {
807 content: "\e173";
808 }
809 .glyphicon-floppy-remove:before {
810 content: "\e174";
811 }
812 .glyphicon-floppy-save:before {
813 content: "\e175";
814 }
815 .glyphicon-floppy-open:before {
816 content: "\e176";
817 }
818 .glyphicon-credit-card:before {
819 content: "\e177";
820 }
821 .glyphicon-transfer:before {
822 content: "\e178";
823 }
824 .glyphicon-cutlery:before {
825 content: "\e179";
826 }
827 .glyphicon-header:before {
828 content: "\e180";
829 }
830 .glyphicon-compressed:before {
831 content: "\e181";
832 }
833 .glyphicon-earphone:before {
834 content: "\e182";
835 }
836 .glyphicon-phone-alt:before {
837 content: "\e183";
838 }
839 .glyphicon-tower:before {
840 content: "\e184";
841 }
842 .glyphicon-stats:before {
843 content: "\e185";
844 }
845 .glyphicon-sd-video:before {
846 content: "\e186";
847 }
848 .glyphicon-hd-video:before {
849 content: "\e187";
850 }
851 .glyphicon-subtitles:before {
852 content: "\e188";
853 }
854 .glyphicon-sound-stereo:before {
855 content: "\e189";
856 }
857 .glyphicon-sound-dolby:before {
858 content: "\e190";
859 }
860 .glyphicon-sound-5-1:before {
861 content: "\e191";
862 }
863 .glyphicon-sound-6-1:before {
864 content: "\e192";
865 }
866 .glyphicon-sound-7-1:before {
867 content: "\e193";
868 }
869 .glyphicon-copyright-mark:before {
870 content: "\e194";
871 }
872 .glyphicon-registration-mark:before {
873 content: "\e195";
874 }
875 .glyphicon-cloud-download:before {
876 content: "\e197";
877 }
878 .glyphicon-cloud-upload:before {
879 content: "\e198";
880 }
881 .glyphicon-tree-conifer:before {
882 content: "\e199";
883 }
884 .glyphicon-tree-deciduous:before {
885 content: "\e200";
886 }
887 .glyphicon-cd:before {
888 content: "\e201";
889 }
890 .glyphicon-save-file:before {
891 content: "\e202";
892 }
893 .glyphicon-open-file:before {
894 content: "\e203";
895 }
896 .glyphicon-level-up:before {
897 content: "\e204";
898 }
899 .glyphicon-copy:before {
900 content: "\e205";
901 }
902 .glyphicon-paste:before {
903 content: "\e206";
904 }
905 .glyphicon-alert:before {
906 content: "\e209";
907 }
908 .glyphicon-equalizer:before {
909 content: "\e210";
910 }
911 .glyphicon-king:before {
912 content: "\e211";
913 }
914 .glyphicon-queen:before {
915 content: "\e212";
916 }
917 .glyphicon-pawn:before {
918 content: "\e213";
919 }
920 .glyphicon-bishop:before {
921 content: "\e214";
922 }
923 .glyphicon-knight:before {
924 content: "\e215";
925 }
926 .glyphicon-baby-formula:before {
927 content: "\e216";
928 }
929 .glyphicon-tent:before {
930 content: "\26fa";
931 }
932 .glyphicon-blackboard:before {
933 content: "\e218";
934 }
935 .glyphicon-bed:before {
936 content: "\e219";
937 }
938 .glyphicon-apple:before {
939 content: "\f8ff";
940 }
941 .glyphicon-erase:before {
942 content: "\e221";
943 }
944 .glyphicon-hourglass:before {
945 content: "\231b";
946 }
947 .glyphicon-lamp:before {
948 content: "\e223";
949 }
950 .glyphicon-duplicate:before {
951 content: "\e224";
952 }
953 .glyphicon-piggy-bank:before {
954 content: "\e225";
955 }
956 .glyphicon-scissors:before {
957 content: "\e226";
958 }
959 .glyphicon-bitcoin:before {
960 content: "\e227";
961 }
962 .glyphicon-btc:before {
963 content: "\e227";
964 }
965 .glyphicon-xbt:before {
966 content: "\e227";
967 }
968 .glyphicon-yen:before {
969 content: "\00a5";
970 }
971 .glyphicon-jpy:before {
972 content: "\00a5";
973 }
974 .glyphicon-ruble:before {
975 content: "\20bd";
976 }
977 .glyphicon-rub:before {
978 content: "\20bd";
979 }
980 .glyphicon-scale:before {
981 content: "\e230";
982 }
983 .glyphicon-ice-lolly:before {
984 content: "\e231";
985 }
986 .glyphicon-ice-lolly-tasted:before {
987 content: "\e232";
988 }
989 .glyphicon-education:before {
990 content: "\e233";
991 }
992 .glyphicon-option-horizontal:before {
993 content: "\e234";
994 }
995 .glyphicon-option-vertical:before {
996 content: "\e235";
997 }
998 .glyphicon-menu-hamburger:before {
999 content: "\e236";
1000 }
1001 .glyphicon-modal-window:before {
1002 content: "\e237";
1003 }
1004 .glyphicon-oil:before {
1005 content: "\e238";
1006 }
1007 .glyphicon-grain:before {
1008 content: "\e239";
1009 }
1010 .glyphicon-sunglasses:before {
1011 content: "\e240";
1012 }
1013 .glyphicon-text-size:before {
1014 content: "\e241";
1015 }
1016 .glyphicon-text-color:before {
1017 content: "\e242";
1018 }
1019 .glyphicon-text-background:before {
1020 content: "\e243";
1021 }
1022 .glyphicon-object-align-top:before {
1023 content: "\e244";
1024 }
1025 .glyphicon-object-align-bottom:before {
1026 content: "\e245";
1027 }
1028 .glyphicon-object-align-horizontal:before {
1029 content: "\e246";
1030 }
1031 .glyphicon-object-align-left:before {
1032 content: "\e247";
1033 }
1034 .glyphicon-object-align-vertical:before {
1035 content: "\e248";
1036 }
1037 .glyphicon-object-align-right:before {
1038 content: "\e249";
1039 }
1040 .glyphicon-triangle-right:before {
1041 content: "\e250";
1042 }
1043 .glyphicon-triangle-left:before {
1044 content: "\e251";
1045 }
1046 .glyphicon-triangle-bottom:before {
1047 content: "\e252";
1048 }
1049 .glyphicon-triangle-top:before {
1050 content: "\e253";
1051 }
1052 .glyphicon-console:before {
1053 content: "\e254";
1054 }
1055 .glyphicon-superscript:before {
1056 content: "\e255";
1057 }
1058 .glyphicon-subscript:before {
1059 content: "\e256";
1060 }
1061 .glyphicon-menu-left:before {
1062 content: "\e257";
1063 }
1064 .glyphicon-menu-right:before {
1065 content: "\e258";
1066 }
1067 .glyphicon-menu-down:before {
1068 content: "\e259";
1069 }
1070 .glyphicon-menu-up:before {
1071 content: "\e260";
1072 }
1073 * {
1074 -webkit-box-sizing: border-box;
1075 -moz-box-sizing: border-box;
1076 box-sizing: border-box;
1077 }
1078 *:before,
1079 *:after {
1080 -webkit-box-sizing: border-box;
1081 -moz-box-sizing: border-box;
1082 box-sizing: border-box;
1083 }
1084 html {
1085 font-size: 10px;
1086
1087 -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
1088 }
1089 body {
1090 font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
1091 font-size: 14px;
1092 line-height: 1.42857143;
1093 color: #333;
1094 background-color: #fff;
1095 }
1096 input,
1097 button,
1098 select,
1099 textarea {
1100 font-family: inherit;
1101 font-size: inherit;
1102 line-height: inherit;
1103 }
1104 a {
1105 color: #337ab7;
1106 text-decoration: none;
1107 }
1108 a:hover,
1109 a:focus {
1110 color: #23527c;
1111 text-decoration: underline;
1112 }
1113 a:focus {
1114 outline: 5px auto -webkit-focus-ring-color;
1115 outline-offset: -2px;
1116 }
1117 figure {
1118 margin: 0;
1119 }
1120 img {
1121 vertical-align: middle;
1122 }
1123 .img-responsive,
1124 .thumbnail > img,
1125 .thumbnail a > img,
1126 .carousel-inner > .item > img,
1127 .carousel-inner > .item > a > img {
1128 display: block;
1129 max-width: 100%;
1130 height: auto;
1131 }
1132 .img-rounded {
1133 border-radius: 6px;
1134 }
1135 .img-thumbnail {
1136 display: inline-block;
1137 max-width: 100%;
1138 height: auto;
1139 padding: 4px;
1140 line-height: 1.42857143;
1141 background-color: #fff;
1142 border: 1px solid #ddd;
1143 border-radius: 4px;
1144 -webkit-transition: all .2s ease-in-out;
1145 -o-transition: all .2s ease-in-out;
1146 transition: all .2s ease-in-out;
1147 }
1148 .img-circle {
1149 border-radius: 50%;
1150 }
1151 hr {
1152 margin-top: 20px;
1153 margin-bottom: 20px;
1154 border: 0;
1155 border-top: 1px solid #eee;
1156 }
1157 .sr-only {
1158 position: absolute;
1159 width: 1px;
1160 height: 1px;
1161 padding: 0;
1162 margin: -1px;
1163 overflow: hidden;
1164 clip: rect(0, 0, 0, 0);
1165 border: 0;
1166 }
1167 .sr-only-focusable:active,
1168 .sr-only-focusable:focus {
1169 position: static;
1170 width: auto;
1171 height: auto;
1172 margin: 0;
1173 overflow: visible;
1174 clip: auto;
1175 }
1176 [role="button"] {
1177 cursor: pointer;
1178 }
1179 h1,
1180 h2,
1181 h3,
1182 h4,
1183 h5,
1184 h6,
1185 .h1,
1186 .h2,
1187 .h3,
1188 .h4,
1189 .h5,
1190 .h6 {
1191 font-family: inherit;
1192 font-weight: 500;
1193 line-height: 1.1;
1194 color: inherit;
1195 }
1196 h1 small,
1197 h2 small,
1198 h3 small,
1199 h4 small,
1200 h5 small,
1201 h6 small,
1202 .h1 small,
1203 .h2 small,
1204 .h3 small,
1205 .h4 small,
1206 .h5 small,
1207 .h6 small,
1208 h1 .small,
1209 h2 .small,
1210 h3 .small,
1211 h4 .small,
1212 h5 .small,
1213 h6 .small,
1214 .h1 .small,
1215 .h2 .small,
1216 .h3 .small,
1217 .h4 .small,
1218 .h5 .small,
1219 .h6 .small {
1220 font-weight: normal;
1221 line-height: 1;
1222 color: #777;
1223 }
1224 h1,
1225 .h1,
1226 h2,
1227 .h2,
1228 h3,
1229 .h3 {
1230 margin-top: 20px;
1231 margin-bottom: 10px;
1232 }
1233 h1 small,
1234 .h1 small,
1235 h2 small,
1236 .h2 small,
1237 h3 small,
1238 .h3 small,
1239 h1 .small,
1240 .h1 .small,
1241 h2 .small,
1242 .h2 .small,
1243 h3 .small,
1244 .h3 .small {
1245 font-size: 65%;
1246 }
1247 h4,
1248 .h4,
1249 h5,
1250 .h5,
1251 h6,
1252 .h6 {
1253 margin-top: 10px;
1254 margin-bottom: 10px;
1255 }
1256 h4 small,
1257 .h4 small,
1258 h5 small,
1259 .h5 small,
1260 h6 small,
1261 .h6 small,
1262 h4 .small,
1263 .h4 .small,
1264 h5 .small,
1265 .h5 .small,
1266 h6 .small,
1267 .h6 .small {
1268 font-size: 75%;
1269 }
1270 h1,
1271 .h1 {
1272 font-size: 36px;
1273 }
1274 h2,
1275 .h2 {
1276 font-size: 30px;
1277 }
1278 h3,
1279 .h3 {
1280 font-size: 24px;
1281 }
1282 h4,
1283 .h4 {
1284 font-size: 18px;
1285 }
1286 h5,
1287 .h5 {
1288 font-size: 14px;
1289 }
1290 h6,
1291 .h6 {
1292 font-size: 12px;
1293 }
1294 p {
1295 margin: 0 0 10px;
1296 }
1297 .lead {
1298 margin-bottom: 20px;
1299 font-size: 16px;
1300 font-weight: 300;
1301 line-height: 1.4;
1302 }
1303 @media (min-width: 768px) {
1304 .lead {
1305 font-size: 21px;
1306 }
1307 }
1308 small,
1309 .small {
1310 font-size: 85%;
1311 }
1312 mark,
1313 .mark {
1314 padding: .2em;
1315 background-color: #fcf8e3;
1316 }
1317 .text-left {
1318 text-align: left;
1319 }
1320 .text-right {
1321 text-align: right;
1322 }
1323 .text-center {
1324 text-align: center;
1325 }
1326 .text-justify {
1327 text-align: justify;
1328 }
1329 .text-nowrap {
1330 white-space: nowrap;
1331 }
1332 .text-lowercase {
1333 text-transform: lowercase;
1334 }
1335 .text-uppercase {
1336 text-transform: uppercase;
1337 }
1338 .text-capitalize {
1339 text-transform: capitalize;
1340 }
1341 .text-muted {
1342 color: #777;
1343 }
1344 .text-primary {
1345 color: #337ab7;
1346 }
1347 a.text-primary:hover,
1348 a.text-primary:focus {
1349 color: #286090;
1350 }
1351 .text-success {
1352 color: #3c763d;
1353 }
1354 a.text-success:hover,
1355 a.text-success:focus {
1356 color: #2b542c;
1357 }
1358 .text-info {
1359 color: #31708f;
1360 }
1361 a.text-info:hover,
1362 a.text-info:focus {
1363 color: #245269;
1364 }
1365 .text-warning {
1366 color: #8a6d3b;
1367 }
1368 a.text-warning:hover,
1369 a.text-warning:focus {
1370 color: #66512c;
1371 }
1372 .text-danger {
1373 color: #a94442;
1374 }
1375 a.text-danger:hover,
1376 a.text-danger:focus {
1377 color: #843534;
1378 }
1379 .bg-primary {
1380 color: #fff;
1381 background-color: #337ab7;
1382 }
1383 a.bg-primary:hover,
1384 a.bg-primary:focus {
1385 background-color: #286090;
1386 }
1387 .bg-success {
1388 background-color: #dff0d8;
1389 }
1390 a.bg-success:hover,
1391 a.bg-success:focus {
1392 background-color: #c1e2b3;
1393 }
1394 .bg-info {
1395 background-color: #d9edf7;
1396 }
1397 a.bg-info:hover,
1398 a.bg-info:focus {
1399 background-color: #afd9ee;
1400 }
1401 .bg-warning {
1402 background-color: #fcf8e3;
1403 }
1404 a.bg-warning:hover,
1405 a.bg-warning:focus {
1406 background-color: #f7ecb5;
1407 }
1408 .bg-danger {
1409 background-color: #f2dede;
1410 }
1411 a.bg-danger:hover,
1412 a.bg-danger:focus {
1413 background-color: #e4b9b9;
1414 }
1415 .page-header {
1416 padding-bottom: 9px;
1417 margin: 40px 0 20px;
1418 border-bottom: 1px solid #eee;
1419 }
1420 ul,
1421 ol {
1422 margin-top: 0;
1423 margin-bottom: 10px;
1424 }
1425 ul ul,
1426 ol ul,
1427 ul ol,
1428 ol ol {
1429 margin-bottom: 0;
1430 }
1431 .list-unstyled {
1432 padding-left: 0;
1433 list-style: none;
1434 }
1435 .list-inline {
1436 padding-left: 0;
1437 margin-left: -5px;
1438 list-style: none;
1439 }
1440 .list-inline > li {
1441 display: inline-block;
1442 padding-right: 5px;
1443 padding-left: 5px;
1444 }
1445 dl {
1446 margin-top: 0;
1447 margin-bottom: 20px;
1448 }
1449 dt,
1450 dd {
1451 line-height: 1.42857143;
1452 }
1453 dt {
1454 font-weight: bold;
1455 }
1456 dd {
1457 margin-left: 0;
1458 }
1459 @media (min-width: 768px) {
1460 .dl-horizontal dt {
1461 float: left;
1462 width: 160px;
1463 overflow: hidden;
1464 clear: left;
1465 text-align: right;
1466 text-overflow: ellipsis;
1467 white-space: nowrap;
1468 }
1469 .dl-horizontal dd {
1470 margin-left: 180px;
1471 }
1472 }
1473 abbr[title],
1474 abbr[data-original-title] {
1475 cursor: help;
1476 border-bottom: 1px dotted #777;
1477 }
1478 .initialism {
1479 font-size: 90%;
1480 text-transform: uppercase;
1481 }
1482 blockquote {
1483 padding: 10px 20px;
1484 margin: 0 0 20px;
1485 font-size: 17.5px;
1486 border-left: 5px solid #eee;
1487 }
1488 blockquote p:last-child,
1489 blockquote ul:last-child,
1490 blockquote ol:last-child {
1491 margin-bottom: 0;
1492 }
1493 blockquote footer,
1494 blockquote small,
1495 blockquote .small {
1496 display: block;
1497 font-size: 80%;
1498 line-height: 1.42857143;
1499 color: #777;
1500 }
1501 blockquote footer:before,
1502 blockquote small:before,
1503 blockquote .small:before {
1504 content: '\2014 \00A0';
1505 }
1506 .blockquote-reverse,
1507 blockquote.pull-right {
1508 padding-right: 15px;
1509 padding-left: 0;
1510 text-align: right;
1511 border-right: 5px solid #eee;
1512 border-left: 0;
1513 }
1514 .blockquote-reverse footer:before,
1515 blockquote.pull-right footer:before,
1516 .blockquote-reverse small:before,
1517 blockquote.pull-right small:before,
1518 .blockquote-reverse .small:before,
1519 blockquote.pull-right .small:before {
1520 content: '';
1521 }
1522 .blockquote-reverse footer:after,
1523 blockquote.pull-right footer:after,
1524 .blockquote-reverse small:after,
1525 blockquote.pull-right small:after,
1526 .blockquote-reverse .small:after,
1527 blockquote.pull-right .small:after {
1528 content: '\00A0 \2014';
1529 }
1530 address {
1531 margin-bottom: 20px;
1532 font-style: normal;
1533 line-height: 1.42857143;
1534 }
1535 code,
1536 kbd,
1537 pre,
1538 samp {
1539 font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
1540 }
1541 code {
1542 padding: 2px 4px;
1543 font-size: 90%;
1544 color: #c7254e;
1545 background-color: #f9f2f4;
1546 border-radius: 4px;
1547 }
1548 kbd {
1549 padding: 2px 4px;
1550 font-size: 90%;
1551 color: #fff;
1552 background-color: #333;
1553 border-radius: 3px;
1554 -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
1555 box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
1556 }
1557 kbd kbd {
1558 padding: 0;
1559 font-size: 100%;
1560 font-weight: bold;
1561 -webkit-box-shadow: none;
1562 box-shadow: none;
1563 }
1564 pre {
1565 display: block;
1566 padding: 9.5px;
1567 margin: 0 0 10px;
1568 font-size: 13px;
1569 line-height: 1.42857143;
1570 color: #333;
1571 word-break: break-all;
1572 word-wrap: break-word;
1573 background-color: #f5f5f5;
1574 border: 1px solid #ccc;
1575 border-radius: 4px;
1576 }
1577 pre code {
1578 padding: 0;
1579 font-size: inherit;
1580 color: inherit;
1581 white-space: pre-wrap;
1582 background-color: transparent;
1583 border-radius: 0;
1584 }
1585 .pre-scrollable {
1586 max-height: 340px;
1587 overflow-y: scroll;
1588 }
1589 .container {
1590 padding-right: 15px;
1591 padding-left: 15px;
1592 margin-right: auto;
1593 margin-left: auto;
1594 }
1595 @media (min-width: 768px) {
1596 .container {
1597 width: 750px;
1598 }
1599 }
1600 @media (min-width: 992px) {
1601 .container {
1602 width: 970px;
1603 }
1604 }
1605 @media (min-width: 1200px) {
1606 .container {
1607 width: 1170px;
1608 }
1609 }
1610 .container-fluid {
1611 padding-right: 15px;
1612 padding-left: 15px;
1613 margin-right: auto;
1614 margin-left: auto;
1615 }
1616 .row {
1617 margin-right: -15px;
1618 margin-left: -15px;
1619 }
1620 .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 {
1621 position: relative;
1622 min-height: 1px;
1623 padding-right: 15px;
1624 padding-left: 15px;
1625 }
1626 .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 {
1627 float: left;
1628 }
1629 .col-xs-12 {
1630 width: 100%;
1631 }
1632 .col-xs-11 {
1633 width: 91.66666667%;
1634 }
1635 .col-xs-10 {
1636 width: 83.33333333%;
1637 }
1638 .col-xs-9 {
1639 width: 75%;
1640 }
1641 .col-xs-8 {
1642 width: 66.66666667%;
1643 }
1644 .col-xs-7 {
1645 width: 58.33333333%;
1646 }
1647 .col-xs-6 {
1648 width: 50%;
1649 }
1650 .col-xs-5 {
1651 width: 41.66666667%;
1652 }
1653 .col-xs-4 {
1654 width: 33.33333333%;
1655 }
1656 .col-xs-3 {
1657 width: 25%;
1658 }
1659 .col-xs-2 {
1660 width: 16.66666667%;
1661 }
1662 .col-xs-1 {
1663 width: 8.33333333%;
1664 }
1665 .col-xs-pull-12 {
1666 right: 100%;
1667 }
1668 .col-xs-pull-11 {
1669 right: 91.66666667%;
1670 }
1671 .col-xs-pull-10 {
1672 right: 83.33333333%;
1673 }
1674 .col-xs-pull-9 {
1675 right: 75%;
1676 }
1677 .col-xs-pull-8 {
1678 right: 66.66666667%;
1679 }
1680 .col-xs-pull-7 {
1681 right: 58.33333333%;
1682 }
1683 .col-xs-pull-6 {
1684 right: 50%;
1685 }
1686 .col-xs-pull-5 {
1687 right: 41.66666667%;
1688 }
1689 .col-xs-pull-4 {
1690 right: 33.33333333%;
1691 }
1692 .col-xs-pull-3 {
1693 right: 25%;
1694 }
1695 .col-xs-pull-2 {
1696 right: 16.66666667%;
1697 }
1698 .col-xs-pull-1 {
1699 right: 8.33333333%;
1700 }
1701 .col-xs-pull-0 {
1702 right: auto;
1703 }
1704 .col-xs-push-12 {
1705 left: 100%;
1706 }
1707 .col-xs-push-11 {
1708 left: 91.66666667%;
1709 }
1710 .col-xs-push-10 {
1711 left: 83.33333333%;
1712 }
1713 .col-xs-push-9 {
1714 left: 75%;
1715 }
1716 .col-xs-push-8 {
1717 left: 66.66666667%;
1718 }
1719 .col-xs-push-7 {
1720 left: 58.33333333%;
1721 }
1722 .col-xs-push-6 {
1723 left: 50%;
1724 }
1725 .col-xs-push-5 {
1726 left: 41.66666667%;
1727 }
1728 .col-xs-push-4 {
1729 left: 33.33333333%;
1730 }
1731 .col-xs-push-3 {
1732 left: 25%;
1733 }
1734 .col-xs-push-2 {
1735 left: 16.66666667%;
1736 }
1737 .col-xs-push-1 {
1738 left: 8.33333333%;
1739 }
1740 .col-xs-push-0 {
1741 left: auto;
1742 }
1743 .col-xs-offset-12 {
1744 margin-left: 100%;
1745 }
1746 .col-xs-offset-11 {
1747 margin-left: 91.66666667%;
1748 }
1749 .col-xs-offset-10 {
1750 margin-left: 83.33333333%;
1751 }
1752 .col-xs-offset-9 {
1753 margin-left: 75%;
1754 }
1755 .col-xs-offset-8 {
1756 margin-left: 66.66666667%;
1757 }
1758 .col-xs-offset-7 {
1759 margin-left: 58.33333333%;
1760 }
1761 .col-xs-offset-6 {
1762 margin-left: 50%;
1763 }
1764 .col-xs-offset-5 {
1765 margin-left: 41.66666667%;
1766 }
1767 .col-xs-offset-4 {
1768 margin-left: 33.33333333%;
1769 }
1770 .col-xs-offset-3 {
1771 margin-left: 25%;
1772 }
1773 .col-xs-offset-2 {
1774 margin-left: 16.66666667%;
1775 }
1776 .col-xs-offset-1 {
1777 margin-left: 8.33333333%;
1778 }
1779 .col-xs-offset-0 {
1780 margin-left: 0;
1781 }
1782 @media (min-width: 768px) {
1783 .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 {
1784 float: left;
1785 }
1786 .col-sm-12 {
1787 width: 100%;
1788 }
1789 .col-sm-11 {
1790 width: 91.66666667%;
1791 }
1792 .col-sm-10 {
1793 width: 83.33333333%;
1794 }
1795 .col-sm-9 {
1796 width: 75%;
1797 }
1798 .col-sm-8 {
1799 width: 66.66666667%;
1800 }
1801 .col-sm-7 {
1802 width: 58.33333333%;
1803 }
1804 .col-sm-6 {
1805 width: 50%;
1806 }
1807 .col-sm-5 {
1808 width: 41.66666667%;
1809 }
1810 .col-sm-4 {
1811 width: 33.33333333%;
1812 }
1813 .col-sm-3 {
1814 width: 25%;
1815 }
1816 .col-sm-2 {
1817 width: 16.66666667%;
1818 }
1819 .col-sm-1 {
1820 width: 8.33333333%;
1821 }
1822 .col-sm-pull-12 {
1823 right: 100%;
1824 }
1825 .col-sm-pull-11 {
1826 right: 91.66666667%;
1827 }
1828 .col-sm-pull-10 {
1829 right: 83.33333333%;
1830 }
1831 .col-sm-pull-9 {
1832 right: 75%;
1833 }
1834 .col-sm-pull-8 {
1835 right: 66.66666667%;
1836 }
1837 .col-sm-pull-7 {
1838 right: 58.33333333%;
1839 }
1840 .col-sm-pull-6 {
1841 right: 50%;
1842 }
1843 .col-sm-pull-5 {
1844 right: 41.66666667%;
1845 }
1846 .col-sm-pull-4 {
1847 right: 33.33333333%;
1848 }
1849 .col-sm-pull-3 {
1850 right: 25%;
1851 }
1852 .col-sm-pull-2 {
1853 right: 16.66666667%;
1854 }
1855 .col-sm-pull-1 {
1856 right: 8.33333333%;
1857 }
1858 .col-sm-pull-0 {
1859 right: auto;
1860 }
1861 .col-sm-push-12 {
1862 left: 100%;
1863 }
1864 .col-sm-push-11 {
1865 left: 91.66666667%;
1866 }
1867 .col-sm-push-10 {
1868 left: 83.33333333%;
1869 }
1870 .col-sm-push-9 {
1871 left: 75%;
1872 }
1873 .col-sm-push-8 {
1874 left: 66.66666667%;
1875 }
1876 .col-sm-push-7 {
1877 left: 58.33333333%;
1878 }
1879 .col-sm-push-6 {
1880 left: 50%;
1881 }
1882 .col-sm-push-5 {
1883 left: 41.66666667%;
1884 }
1885 .col-sm-push-4 {
1886 left: 33.33333333%;
1887 }
1888 .col-sm-push-3 {
1889 left: 25%;
1890 }
1891 .col-sm-push-2 {
1892 left: 16.66666667%;
1893 }
1894 .col-sm-push-1 {
1895 left: 8.33333333%;
1896 }
1897 .col-sm-push-0 {
1898 left: auto;
1899 }
1900 .col-sm-offset-12 {
1901 margin-left: 100%;
1902 }
1903 .col-sm-offset-11 {
1904 margin-left: 91.66666667%;
1905 }
1906 .col-sm-offset-10 {
1907 margin-left: 83.33333333%;
1908 }
1909 .col-sm-offset-9 {
1910 margin-left: 75%;
1911 }
1912 .col-sm-offset-8 {
1913 margin-left: 66.66666667%;
1914 }
1915 .col-sm-offset-7 {
1916 margin-left: 58.33333333%;
1917 }
1918 .col-sm-offset-6 {
1919 margin-left: 50%;
1920 }
1921 .col-sm-offset-5 {
1922 margin-left: 41.66666667%;
1923 }
1924 .col-sm-offset-4 {
1925 margin-left: 33.33333333%;
1926 }
1927 .col-sm-offset-3 {
1928 margin-left: 25%;
1929 }
1930 .col-sm-offset-2 {
1931 margin-left: 16.66666667%;
1932 }
1933 .col-sm-offset-1 {
1934 margin-left: 8.33333333%;
1935 }
1936 .col-sm-offset-0 {
1937 margin-left: 0;
1938 }
1939 }
1940 @media (min-width: 992px) {
1941 .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 {
1942 float: left;
1943 }
1944 .col-md-12 {
1945 width: 100%;
1946 }
1947 .col-md-11 {
1948 width: 91.66666667%;
1949 }
1950 .col-md-10 {
1951 width: 83.33333333%;
1952 }
1953 .col-md-9 {
1954 width: 75%;
1955 }
1956 .col-md-8 {
1957 width: 66.66666667%;
1958 }
1959 .col-md-7 {
1960 width: 58.33333333%;
1961 }
1962 .col-md-6 {
1963 width: 50%;
1964 }
1965 .col-md-5 {
1966 width: 41.66666667%;
1967 }
1968 .col-md-4 {
1969 width: 33.33333333%;
1970 }
1971 .col-md-3 {
1972 width: 25%;
1973 }
1974 .col-md-2 {
1975 width: 16.66666667%;
1976 }
1977 .col-md-1 {
1978 width: 8.33333333%;
1979 }
1980 .col-md-pull-12 {
1981 right: 100%;
1982 }
1983 .col-md-pull-11 {
1984 right: 91.66666667%;
1985 }
1986 .col-md-pull-10 {
1987 right: 83.33333333%;
1988 }
1989 .col-md-pull-9 {
1990 right: 75%;
1991 }
1992 .col-md-pull-8 {
1993 right: 66.66666667%;
1994 }
1995 .col-md-pull-7 {
1996 right: 58.33333333%;
1997 }
1998 .col-md-pull-6 {
1999 right: 50%;
2000 }
2001 .col-md-pull-5 {
2002 right: 41.66666667%;
2003 }
2004 .col-md-pull-4 {
2005 right: 33.33333333%;
2006 }
2007 .col-md-pull-3 {
2008 right: 25%;
2009 }
2010 .col-md-pull-2 {
2011 right: 16.66666667%;
2012 }
2013 .col-md-pull-1 {
2014 right: 8.33333333%;
2015 }
2016 .col-md-pull-0 {
2017 right: auto;
2018 }
2019 .col-md-push-12 {
2020 left: 100%;
2021 }
2022 .col-md-push-11 {
2023 left: 91.66666667%;
2024 }
2025 .col-md-push-10 {
2026 left: 83.33333333%;
2027 }
2028 .col-md-push-9 {
2029 left: 75%;
2030 }
2031 .col-md-push-8 {
2032 left: 66.66666667%;
2033 }
2034 .col-md-push-7 {
2035 left: 58.33333333%;
2036 }
2037 .col-md-push-6 {
2038 left: 50%;
2039 }
2040 .col-md-push-5 {
2041 left: 41.66666667%;
2042 }
2043 .col-md-push-4 {
2044 left: 33.33333333%;
2045 }
2046 .col-md-push-3 {
2047 left: 25%;
2048 }
2049 .col-md-push-2 {
2050 left: 16.66666667%;
2051 }
2052 .col-md-push-1 {
2053 left: 8.33333333%;
2054 }
2055 .col-md-push-0 {
2056 left: auto;
2057 }
2058 .col-md-offset-12 {
2059 margin-left: 100%;
2060 }
2061 .col-md-offset-11 {
2062 margin-left: 91.66666667%;
2063 }
2064 .col-md-offset-10 {
2065 margin-left: 83.33333333%;
2066 }
2067 .col-md-offset-9 {
2068 margin-left: 75%;
2069 }
2070 .col-md-offset-8 {
2071 margin-left: 66.66666667%;
2072 }
2073 .col-md-offset-7 {
2074 margin-left: 58.33333333%;
2075 }
2076 .col-md-offset-6 {
2077 margin-left: 50%;
2078 }
2079 .col-md-offset-5 {
2080 margin-left: 41.66666667%;
2081 }
2082 .col-md-offset-4 {
2083 margin-left: 33.33333333%;
2084 }
2085 .col-md-offset-3 {
2086 margin-left: 25%;
2087 }
2088 .col-md-offset-2 {
2089 margin-left: 16.66666667%;
2090 }
2091 .col-md-offset-1 {
2092 margin-left: 8.33333333%;
2093 }
2094 .col-md-offset-0 {
2095 margin-left: 0;
2096 }
2097 }
2098 @media (min-width: 1200px) {
2099 .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 {
2100 float: left;
2101 }
2102 .col-lg-12 {
2103 width: 100%;
2104 }
2105 .col-lg-11 {
2106 width: 91.66666667%;
2107 }
2108 .col-lg-10 {
2109 width: 83.33333333%;
2110 }
2111 .col-lg-9 {
2112 width: 75%;
2113 }
2114 .col-lg-8 {
2115 width: 66.66666667%;
2116 }
2117 .col-lg-7 {
2118 width: 58.33333333%;
2119 }
2120 .col-lg-6 {
2121 width: 50%;
2122 }
2123 .col-lg-5 {
2124 width: 41.66666667%;
2125 }
2126 .col-lg-4 {
2127 width: 33.33333333%;
2128 }
2129 .col-lg-3 {
2130 width: 25%;
2131 }
2132 .col-lg-2 {
2133 width: 16.66666667%;
2134 }
2135 .col-lg-1 {
2136 width: 8.33333333%;
2137 }
2138 .col-lg-pull-12 {
2139 right: 100%;
2140 }
2141 .col-lg-pull-11 {
2142 right: 91.66666667%;
2143 }
2144 .col-lg-pull-10 {
2145 right: 83.33333333%;
2146 }
2147 .col-lg-pull-9 {
2148 right: 75%;
2149 }
2150 .col-lg-pull-8 {
2151 right: 66.66666667%;
2152 }
2153 .col-lg-pull-7 {
2154 right: 58.33333333%;
2155 }
2156 .col-lg-pull-6 {
2157 right: 50%;
2158 }
2159 .col-lg-pull-5 {
2160 right: 41.66666667%;
2161 }
2162 .col-lg-pull-4 {
2163 right: 33.33333333%;
2164 }
2165 .col-lg-pull-3 {
2166 right: 25%;
2167 }
2168 .col-lg-pull-2 {
2169 right: 16.66666667%;
2170 }
2171 .col-lg-pull-1 {
2172 right: 8.33333333%;
2173 }
2174 .col-lg-pull-0 {
2175 right: auto;
2176 }
2177 .col-lg-push-12 {
2178 left: 100%;
2179 }
2180 .col-lg-push-11 {
2181 left: 91.66666667%;
2182 }
2183 .col-lg-push-10 {
2184 left: 83.33333333%;
2185 }
2186 .col-lg-push-9 {
2187 left: 75%;
2188 }
2189 .col-lg-push-8 {
2190 left: 66.66666667%;
2191 }
2192 .col-lg-push-7 {
2193 left: 58.33333333%;
2194 }
2195 .col-lg-push-6 {
2196 left: 50%;
2197 }
2198 .col-lg-push-5 {
2199 left: 41.66666667%;
2200 }
2201 .col-lg-push-4 {
2202 left: 33.33333333%;
2203 }
2204 .col-lg-push-3 {
2205 left: 25%;
2206 }
2207 .col-lg-push-2 {
2208 left: 16.66666667%;
2209 }
2210 .col-lg-push-1 {
2211 left: 8.33333333%;
2212 }
2213 .col-lg-push-0 {
2214 left: auto;
2215 }
2216 .col-lg-offset-12 {
2217 margin-left: 100%;
2218 }
2219 .col-lg-offset-11 {
2220 margin-left: 91.66666667%;
2221 }
2222 .col-lg-offset-10 {
2223 margin-left: 83.33333333%;
2224 }
2225 .col-lg-offset-9 {
2226 margin-left: 75%;
2227 }
2228 .col-lg-offset-8 {
2229 margin-left: 66.66666667%;
2230 }
2231 .col-lg-offset-7 {
2232 margin-left: 58.33333333%;
2233 }
2234 .col-lg-offset-6 {
2235 margin-left: 50%;
2236 }
2237 .col-lg-offset-5 {
2238 margin-left: 41.66666667%;
2239 }
2240 .col-lg-offset-4 {
2241 margin-left: 33.33333333%;
2242 }
2243 .col-lg-offset-3 {
2244 margin-left: 25%;
2245 }
2246 .col-lg-offset-2 {
2247 margin-left: 16.66666667%;
2248 }
2249 .col-lg-offset-1 {
2250 margin-left: 8.33333333%;
2251 }
2252 .col-lg-offset-0 {
2253 margin-left: 0;
2254 }
2255 }
2256 table {
2257 background-color: transparent;
2258 }
2259 caption {
2260 padding-top: 8px;
2261 padding-bottom: 8px;
2262 color: #777;
2263 text-align: left;
2264 }
2265 th {
2266 text-align: left;
2267 }
2268 .table {
2269 width: 100%;
2270 max-width: 100%;
2271 margin-bottom: 20px;
2272 }
2273 .table > thead > tr > th,
2274 .table > tbody > tr > th,
2275 .table > tfoot > tr > th,
2276 .table > thead > tr > td,
2277 .table > tbody > tr > td,
2278 .table > tfoot > tr > td {
2279 padding: 8px;
2280 line-height: 1.42857143;
2281 vertical-align: top;
2282 border-top: 1px solid #ddd;
2283 }
2284 .table > thead > tr > th {
2285 vertical-align: bottom;
2286 border-bottom: 2px solid #ddd;
2287 }
2288 .table > caption + thead > tr:first-child > th,
2289 .table > colgroup + thead > tr:first-child > th,
2290 .table > thead:first-child > tr:first-child > th,
2291 .table > caption + thead > tr:first-child > td,
2292 .table > colgroup + thead > tr:first-child > td,
2293 .table > thead:first-child > tr:first-child > td {
2294 border-top: 0;
2295 }
2296 .table > tbody + tbody {
2297 border-top: 2px solid #ddd;
2298 }
2299 .table .table {
2300 background-color: #fff;
2301 }
2302 .table-condensed > thead > tr > th,
2303 .table-condensed > tbody > tr > th,
2304 .table-condensed > tfoot > tr > th,
2305 .table-condensed > thead > tr > td,
2306 .table-condensed > tbody > tr > td,
2307 .table-condensed > tfoot > tr > td {
2308 padding: 5px;
2309 }
2310 .table-bordered {
2311 border: 1px solid #ddd;
2312 }
2313 .table-bordered > thead > tr > th,
2314 .table-bordered > tbody > tr > th,
2315 .table-bordered > tfoot > tr > th,
2316 .table-bordered > thead > tr > td,
2317 .table-bordered > tbody > tr > td,
2318 .table-bordered > tfoot > tr > td {
2319 border: 1px solid #ddd;
2320 }
2321 .table-bordered > thead > tr > th,
2322 .table-bordered > thead > tr > td {
2323 border-bottom-width: 2px;
2324 }
2325 .table-striped > tbody > tr:nth-of-type(odd) {
2326 background-color: #f9f9f9;
2327 }
2328 .table-hover > tbody > tr:hover {
2329 background-color: #f5f5f5;
2330 }
2331 table col[class*="col-"] {
2332 position: static;
2333 display: table-column;
2334 float: none;
2335 }
2336 table td[class*="col-"],
2337 table th[class*="col-"] {
2338 position: static;
2339 display: table-cell;
2340 float: none;
2341 }
2342 .table > thead > tr > td.active,
2343 .table > tbody > tr > td.active,
2344 .table > tfoot > tr > td.active,
2345 .table > thead > tr > th.active,
2346 .table > tbody > tr > th.active,
2347 .table > tfoot > tr > th.active,
2348 .table > thead > tr.active > td,
2349 .table > tbody > tr.active > td,
2350 .table > tfoot > tr.active > td,
2351 .table > thead > tr.active > th,
2352 .table > tbody > tr.active > th,
2353 .table > tfoot > tr.active > th {
2354 background-color: #f5f5f5;
2355 }
2356 .table-hover > tbody > tr > td.active:hover,
2357 .table-hover > tbody > tr > th.active:hover,
2358 .table-hover > tbody > tr.active:hover > td,
2359 .table-hover > tbody > tr:hover > .active,
2360 .table-hover > tbody > tr.active:hover > th {
2361 background-color: #e8e8e8;
2362 }
2363 .table > thead > tr > td.success,
2364 .table > tbody > tr > td.success,
2365 .table > tfoot > tr > td.success,
2366 .table > thead > tr > th.success,
2367 .table > tbody > tr > th.success,
2368 .table > tfoot > tr > th.success,
2369 .table > thead > tr.success > td,
2370 .table > tbody > tr.success > td,
2371 .table > tfoot > tr.success > td,
2372 .table > thead > tr.success > th,
2373 .table > tbody > tr.success > th,
2374 .table > tfoot > tr.success > th {
2375 background-color: #dff0d8;
2376 }
2377 .table-hover > tbody > tr > td.success:hover,
2378 .table-hover > tbody > tr > th.success:hover,
2379 .table-hover > tbody > tr.success:hover > td,
2380 .table-hover > tbody > tr:hover > .success,
2381 .table-hover > tbody > tr.success:hover > th {
2382 background-color: #d0e9c6;
2383 }
2384 .table > thead > tr > td.info,
2385 .table > tbody > tr > td.info,
2386 .table > tfoot > tr > td.info,
2387 .table > thead > tr > th.info,
2388 .table > tbody > tr > th.info,
2389 .table > tfoot > tr > th.info,
2390 .table > thead > tr.info > td,
2391 .table > tbody > tr.info > td,
2392 .table > tfoot > tr.info > td,
2393 .table > thead > tr.info > th,
2394 .table > tbody > tr.info > th,
2395 .table > tfoot > tr.info > th {
2396 background-color: #d9edf7;
2397 }
2398 .table-hover > tbody > tr > td.info:hover,
2399 .table-hover > tbody > tr > th.info:hover,
2400 .table-hover > tbody > tr.info:hover > td,
2401 .table-hover > tbody > tr:hover > .info,
2402 .table-hover > tbody > tr.info:hover > th {
2403 background-color: #c4e3f3;
2404 }
2405 .table > thead > tr > td.warning,
2406 .table > tbody > tr > td.warning,
2407 .table > tfoot > tr > td.warning,
2408 .table > thead > tr > th.warning,
2409 .table > tbody > tr > th.warning,
2410 .table > tfoot > tr > th.warning,
2411 .table > thead > tr.warning > td,
2412 .table > tbody > tr.warning > td,
2413 .table > tfoot > tr.warning > td,
2414 .table > thead > tr.warning > th,
2415 .table > tbody > tr.warning > th,
2416 .table > tfoot > tr.warning > th {
2417 background-color: #fcf8e3;
2418 }
2419 .table-hover > tbody > tr > td.warning:hover,
2420 .table-hover > tbody > tr > th.warning:hover,
2421 .table-hover > tbody > tr.warning:hover > td,
2422 .table-hover > tbody > tr:hover > .warning,
2423 .table-hover > tbody > tr.warning:hover > th {
2424 background-color: #faf2cc;
2425 }
2426 .table > thead > tr > td.danger,
2427 .table > tbody > tr > td.danger,
2428 .table > tfoot > tr > td.danger,
2429 .table > thead > tr > th.danger,
2430 .table > tbody > tr > th.danger,
2431 .table > tfoot > tr > th.danger,
2432 .table > thead > tr.danger > td,
2433 .table > tbody > tr.danger > td,
2434 .table > tfoot > tr.danger > td,
2435 .table > thead > tr.danger > th,
2436 .table > tbody > tr.danger > th,
2437 .table > tfoot > tr.danger > th {
2438 background-color: #f2dede;
2439 }
2440 .table-hover > tbody > tr > td.danger:hover,
2441 .table-hover > tbody > tr > th.danger:hover,
2442 .table-hover > tbody > tr.danger:hover > td,
2443 .table-hover > tbody > tr:hover > .danger,
2444 .table-hover > tbody > tr.danger:hover > th {
2445 background-color: #ebcccc;
2446 }
2447 .table-responsive {
2448 min-height: .01%;
2449 overflow-x: auto;
2450 }
2451 @media screen and (max-width: 767px) {
2452 .table-responsive {
2453 width: 100%;
2454 margin-bottom: 15px;
2455 overflow-y: hidden;
2456 -ms-overflow-style: -ms-autohiding-scrollbar;
2457 border: 1px solid #ddd;
2458 }
2459 .table-responsive > .table {
2460 margin-bottom: 0;
2461 }
2462 .table-responsive > .table > thead > tr > th,
2463 .table-responsive > .table > tbody > tr > th,
2464 .table-responsive > .table > tfoot > tr > th,
2465 .table-responsive > .table > thead > tr > td,
2466 .table-responsive > .table > tbody > tr > td,
2467 .table-responsive > .table > tfoot > tr > td {
2468 white-space: nowrap;
2469 }
2470 .table-responsive > .table-bordered {
2471 border: 0;
2472 }
2473 .table-responsive > .table-bordered > thead > tr > th:first-child,
2474 .table-responsive > .table-bordered > tbody > tr > th:first-child,
2475 .table-responsive > .table-bordered > tfoot > tr > th:first-child,
2476 .table-responsive > .table-bordered > thead > tr > td:first-child,
2477 .table-responsive > .table-bordered > tbody > tr > td:first-child,
2478 .table-responsive > .table-bordered > tfoot > tr > td:first-child {
2479 border-left: 0;
2480 }
2481 .table-responsive > .table-bordered > thead > tr > th:last-child,
2482 .table-responsive > .table-bordered > tbody > tr > th:last-child,
2483 .table-responsive > .table-bordered > tfoot > tr > th:last-child,
2484 .table-responsive > .table-bordered > thead > tr > td:last-child,
2485 .table-responsive > .table-bordered > tbody > tr > td:last-child,
2486 .table-responsive > .table-bordered > tfoot > tr > td:last-child {
2487 border-right: 0;
2488 }
2489 .table-responsive > .table-bordered > tbody > tr:last-child > th,
2490 .table-responsive > .table-bordered > tfoot > tr:last-child > th,
2491 .table-responsive > .table-bordered > tbody > tr:last-child > td,
2492 .table-responsive > .table-bordered > tfoot > tr:last-child > td {
2493 border-bottom: 0;
2494 }
2495 }
2496 fieldset {
2497 min-width: 0;
2498 padding: 0;
2499 margin: 0;
2500 border: 0;
2501 }
2502 legend {
2503 display: block;
2504 width: 100%;
2505 padding: 0;
2506 margin-bottom: 20px;
2507 font-size: 21px;
2508 line-height: inherit;
2509 color: #333;
2510 border: 0;
2511 border-bottom: 1px solid #e5e5e5;
2512 }
2513 label {
2514 display: inline-block;
2515 max-width: 100%;
2516 margin-bottom: 5px;
2517 font-weight: bold;
2518 }
2519 input[type="search"] {
2520 -webkit-box-sizing: border-box;
2521 -moz-box-sizing: border-box;
2522 box-sizing: border-box;
2523 }
2524 input[type="radio"],
2525 input[type="checkbox"] {
2526 margin: 4px 0 0;
2527 margin-top: 1px \9;
2528 line-height: normal;
2529 }
2530 input[type="file"] {
2531 display: block;
2532 }
2533 input[type="range"] {
2534 display: block;
2535 width: 100%;
2536 }
2537 select[multiple],
2538 select[size] {
2539 height: auto;
2540 }
2541 input[type="file"]:focus,
2542 input[type="radio"]:focus,
2543 input[type="checkbox"]:focus {
2544 outline: 5px auto -webkit-focus-ring-color;
2545 outline-offset: -2px;
2546 }
2547 output {
2548 display: block;
2549 padding-top: 7px;
2550 font-size: 14px;
2551 line-height: 1.42857143;
2552 color: #555;
2553 }
2554 .form-control {
2555 display: block;
2556 width: 100%;
2557 height: 34px;
2558 padding: 6px 12px;
2559 font-size: 14px;
2560 line-height: 1.42857143;
2561 color: #555;
2562 background-color: #fff;
2563 background-image: none;
2564 border: 1px solid #ccc;
2565 border-radius: 4px;
2566 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2567 box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2568 -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
2569 -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
2570 transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
2571 }
2572 .form-control:focus {
2573 border-color: #66afe9;
2574 outline: 0;
2575 -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
2576 box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
2577 }
2578 .form-control::-moz-placeholder {
2579 color: #999;
2580 opacity: 1;
2581 }
2582 .form-control:-ms-input-placeholder {
2583 color: #999;
2584 }
2585 .form-control::-webkit-input-placeholder {
2586 color: #999;
2587 }
2588 .form-control::-ms-expand {
2589 background-color: transparent;
2590 border: 0;
2591 }
2592 .form-control[disabled],
2593 .form-control[readonly],
2594 fieldset[disabled] .form-control {
2595 background-color: #eee;
2596 opacity: 1;
2597 }
2598 .form-control[disabled],
2599 fieldset[disabled] .form-control {
2600 cursor: not-allowed;
2601 }
2602 textarea.form-control {
2603 height: auto;
2604 }
2605 input[type="search"] {
2606 -webkit-appearance: none;
2607 }
2608 @media screen and (-webkit-min-device-pixel-ratio: 0) {
2609 input[type="date"].form-control,
2610 input[type="time"].form-control,
2611 input[type="datetime-local"].form-control,
2612 input[type="month"].form-control {
2613 line-height: 34px;
2614 }
2615 input[type="date"].input-sm,
2616 input[type="time"].input-sm,
2617 input[type="datetime-local"].input-sm,
2618 input[type="month"].input-sm,
2619 .input-group-sm input[type="date"],
2620 .input-group-sm input[type="time"],
2621 .input-group-sm input[type="datetime-local"],
2622 .input-group-sm input[type="month"] {
2623 line-height: 30px;
2624 }
2625 input[type="date"].input-lg,
2626 input[type="time"].input-lg,
2627 input[type="datetime-local"].input-lg,
2628 input[type="month"].input-lg,
2629 .input-group-lg input[type="date"],
2630 .input-group-lg input[type="time"],
2631 .input-group-lg input[type="datetime-local"],
2632 .input-group-lg input[type="month"] {
2633 line-height: 46px;
2634 }
2635 }
2636 .form-group {
2637 margin-bottom: 15px;
2638 }
2639 .radio,
2640 .checkbox {
2641 position: relative;
2642 display: block;
2643 margin-top: 10px;
2644 margin-bottom: 10px;
2645 }
2646 .radio label,
2647 .checkbox label {
2648 min-height: 20px;
2649 padding-left: 20px;
2650 margin-bottom: 0;
2651 font-weight: normal;
2652 cursor: pointer;
2653 }
2654 .radio input[type="radio"],
2655 .radio-inline input[type="radio"],
2656 .checkbox input[type="checkbox"],
2657 .checkbox-inline input[type="checkbox"] {
2658 position: absolute;
2659 margin-top: 4px \9;
2660 margin-left: -20px;
2661 }
2662 .radio + .radio,
2663 .checkbox + .checkbox {
2664 margin-top: -5px;
2665 }
2666 .radio-inline,
2667 .checkbox-inline {
2668 position: relative;
2669 display: inline-block;
2670 padding-left: 20px;
2671 margin-bottom: 0;
2672 font-weight: normal;
2673 vertical-align: middle;
2674 cursor: pointer;
2675 }
2676 .radio-inline + .radio-inline,
2677 .checkbox-inline + .checkbox-inline {
2678 margin-top: 0;
2679 margin-left: 10px;
2680 }
2681 input[type="radio"][disabled],
2682 input[type="checkbox"][disabled],
2683 input[type="radio"].disabled,
2684 input[type="checkbox"].disabled,
2685 fieldset[disabled] input[type="radio"],
2686 fieldset[disabled] input[type="checkbox"] {
2687 cursor: not-allowed;
2688 }
2689 .radio-inline.disabled,
2690 .checkbox-inline.disabled,
2691 fieldset[disabled] .radio-inline,
2692 fieldset[disabled] .checkbox-inline {
2693 cursor: not-allowed;
2694 }
2695 .radio.disabled label,
2696 .checkbox.disabled label,
2697 fieldset[disabled] .radio label,
2698 fieldset[disabled] .checkbox label {
2699 cursor: not-allowed;
2700 }
2701 .form-control-static {
2702 min-height: 34px;
2703 padding-top: 7px;
2704 padding-bottom: 7px;
2705 margin-bottom: 0;
2706 }
2707 .form-control-static.input-lg,
2708 .form-control-static.input-sm {
2709 padding-right: 0;
2710 padding-left: 0;
2711 }
2712 .input-sm {
2713 height: 30px;
2714 padding: 5px 10px;
2715 font-size: 12px;
2716 line-height: 1.5;
2717 border-radius: 3px;
2718 }
2719 select.input-sm {
2720 height: 30px;
2721 line-height: 30px;
2722 }
2723 textarea.input-sm,
2724 select[multiple].input-sm {
2725 height: auto;
2726 }
2727 .form-group-sm .form-control {
2728 height: 30px;
2729 padding: 5px 10px;
2730 font-size: 12px;
2731 line-height: 1.5;
2732 border-radius: 3px;
2733 }
2734 .form-group-sm select.form-control {
2735 height: 30px;
2736 line-height: 30px;
2737 }
2738 .form-group-sm textarea.form-control,
2739 .form-group-sm select[multiple].form-control {
2740 height: auto;
2741 }
2742 .form-group-sm .form-control-static {
2743 height: 30px;
2744 min-height: 32px;
2745 padding: 6px 10px;
2746 font-size: 12px;
2747 line-height: 1.5;
2748 }
2749 .input-lg {
2750 height: 46px;
2751 padding: 10px 16px;
2752 font-size: 18px;
2753 line-height: 1.3333333;
2754 border-radius: 6px;
2755 }
2756 select.input-lg {
2757 height: 46px;
2758 line-height: 46px;
2759 }
2760 textarea.input-lg,
2761 select[multiple].input-lg {
2762 height: auto;
2763 }
2764 .form-group-lg .form-control {
2765 height: 46px;
2766 padding: 10px 16px;
2767 font-size: 18px;
2768 line-height: 1.3333333;
2769 border-radius: 6px;
2770 }
2771 .form-group-lg select.form-control {
2772 height: 46px;
2773 line-height: 46px;
2774 }
2775 .form-group-lg textarea.form-control,
2776 .form-group-lg select[multiple].form-control {
2777 height: auto;
2778 }
2779 .form-group-lg .form-control-static {
2780 height: 46px;
2781 min-height: 38px;
2782 padding: 11px 16px;
2783 font-size: 18px;
2784 line-height: 1.3333333;
2785 }
2786 .has-feedback {
2787 position: relative;
2788 }
2789 .has-feedback .form-control {
2790 padding-right: 42.5px;
2791 }
2792 .form-control-feedback {
2793 position: absolute;
2794 top: 0;
2795 right: 0;
2796 z-index: 2;
2797 display: block;
2798 width: 34px;
2799 height: 34px;
2800 line-height: 34px;
2801 text-align: center;
2802 pointer-events: none;
2803 }
2804 .input-lg + .form-control-feedback,
2805 .input-group-lg + .form-control-feedback,
2806 .form-group-lg .form-control + .form-control-feedback {
2807 width: 46px;
2808 height: 46px;
2809 line-height: 46px;
2810 }
2811 .input-sm + .form-control-feedback,
2812 .input-group-sm + .form-control-feedback,
2813 .form-group-sm .form-control + .form-control-feedback {
2814 width: 30px;
2815 height: 30px;
2816 line-height: 30px;
2817 }
2818 .has-success .help-block,
2819 .has-success .control-label,
2820 .has-success .radio,
2821 .has-success .checkbox,
2822 .has-success .radio-inline,
2823 .has-success .checkbox-inline,
2824 .has-success.radio label,
2825 .has-success.checkbox label,
2826 .has-success.radio-inline label,
2827 .has-success.checkbox-inline label {
2828 color: #3c763d;
2829 }
2830 .has-success .form-control {
2831 border-color: #3c763d;
2832 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2833 box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2834 }
2835 .has-success .form-control:focus {
2836 border-color: #2b542c;
2837 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
2838 box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
2839 }
2840 .has-success .input-group-addon {
2841 color: #3c763d;
2842 background-color: #dff0d8;
2843 border-color: #3c763d;
2844 }
2845 .has-success .form-control-feedback {
2846 color: #3c763d;
2847 }
2848 .has-warning .help-block,
2849 .has-warning .control-label,
2850 .has-warning .radio,
2851 .has-warning .checkbox,
2852 .has-warning .radio-inline,
2853 .has-warning .checkbox-inline,
2854 .has-warning.radio label,
2855 .has-warning.checkbox label,
2856 .has-warning.radio-inline label,
2857 .has-warning.checkbox-inline label {
2858 color: #8a6d3b;
2859 }
2860 .has-warning .form-control {
2861 border-color: #8a6d3b;
2862 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2863 box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2864 }
2865 .has-warning .form-control:focus {
2866 border-color: #66512c;
2867 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
2868 box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
2869 }
2870 .has-warning .input-group-addon {
2871 color: #8a6d3b;
2872 background-color: #fcf8e3;
2873 border-color: #8a6d3b;
2874 }
2875 .has-warning .form-control-feedback {
2876 color: #8a6d3b;
2877 }
2878 .has-error .help-block,
2879 .has-error .control-label,
2880 .has-error .radio,
2881 .has-error .checkbox,
2882 .has-error .radio-inline,
2883 .has-error .checkbox-inline,
2884 .has-error.radio label,
2885 .has-error.checkbox label,
2886 .has-error.radio-inline label,
2887 .has-error.checkbox-inline label {
2888 color: #a94442;
2889 }
2890 .has-error .form-control {
2891 border-color: #a94442;
2892 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2893 box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2894 }
2895 .has-error .form-control:focus {
2896 border-color: #843534;
2897 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
2898 box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
2899 }
2900 .has-error .input-group-addon {
2901 color: #a94442;
2902 background-color: #f2dede;
2903 border-color: #a94442;
2904 }
2905 .has-error .form-control-feedback {
2906 color: #a94442;
2907 }
2908 .has-feedback label ~ .form-control-feedback {
2909 top: 25px;
2910 }
2911 .has-feedback label.sr-only ~ .form-control-feedback {
2912 top: 0;
2913 }
2914 .help-block {
2915 display: block;
2916 margin-top: 5px;
2917 margin-bottom: 10px;
2918 color: #737373;
2919 }
2920 @media (min-width: 768px) {
2921 .form-inline .form-group {
2922 display: inline-block;
2923 margin-bottom: 0;
2924 vertical-align: middle;
2925 }
2926 .form-inline .form-control {
2927 display: inline-block;
2928 width: auto;
2929 vertical-align: middle;
2930 }
2931 .form-inline .form-control-static {
2932 display: inline-block;
2933 }
2934 .form-inline .input-group {
2935 display: inline-table;
2936 vertical-align: middle;
2937 }
2938 .form-inline .input-group .input-group-addon,
2939 .form-inline .input-group .input-group-btn,
2940 .form-inline .input-group .form-control {
2941 width: auto;
2942 }
2943 .form-inline .input-group > .form-control {
2944 width: 100%;
2945 }
2946 .form-inline .control-label {
2947 margin-bottom: 0;
2948 vertical-align: middle;
2949 }
2950 .form-inline .radio,
2951 .form-inline .checkbox {
2952 display: inline-block;
2953 margin-top: 0;
2954 margin-bottom: 0;
2955 vertical-align: middle;
2956 }
2957 .form-inline .radio label,
2958 .form-inline .checkbox label {
2959 padding-left: 0;
2960 }
2961 .form-inline .radio input[type="radio"],
2962 .form-inline .checkbox input[type="checkbox"] {
2963 position: relative;
2964 margin-left: 0;
2965 }
2966 .form-inline .has-feedback .form-control-feedback {
2967 top: 0;
2968 }
2969 }
2970 .form-horizontal .radio,
2971 .form-horizontal .checkbox,
2972 .form-horizontal .radio-inline,
2973 .form-horizontal .checkbox-inline {
2974 padding-top: 7px;
2975 margin-top: 0;
2976 margin-bottom: 0;
2977 }
2978 .form-horizontal .radio,
2979 .form-horizontal .checkbox {
2980 min-height: 27px;
2981 }
2982 .form-horizontal .form-group {
2983 margin-right: -15px;
2984 margin-left: -15px;
2985 }
2986 @media (min-width: 768px) {
2987 .form-horizontal .control-label {
2988 padding-top: 7px;
2989 margin-bottom: 0;
2990 text-align: right;
2991 }
2992 }
2993 .form-horizontal .has-feedback .form-control-feedback {
2994 right: 15px;
2995 }
2996 @media (min-width: 768px) {
2997 .form-horizontal .form-group-lg .control-label {
2998 padding-top: 11px;
2999 font-size: 18px;
3000 }
3001 }
3002 @media (min-width: 768px) {
3003 .form-horizontal .form-group-sm .control-label {
3004 padding-top: 6px;
3005 font-size: 12px;
3006 }
3007 }
3008 .btn {
3009 display: inline-block;
3010 padding: 6px 12px;
3011 margin-bottom: 0;
3012 font-size: 14px;
3013 font-weight: normal;
3014 line-height: 1.42857143;
3015 text-align: center;
3016 white-space: nowrap;
3017 vertical-align: middle;
3018 -ms-touch-action: manipulation;
3019 touch-action: manipulation;
3020 cursor: pointer;
3021 -webkit-user-select: none;
3022 -moz-user-select: none;
3023 -ms-user-select: none;
3024 user-select: none;
3025 background-image: none;
3026 border: 1px solid transparent;
3027 border-radius: 4px;
3028 }
3029 .btn:focus,
3030 .btn:active:focus,
3031 .btn.active:focus,
3032 .btn.focus,
3033 .btn:active.focus,
3034 .btn.active.focus {
3035 outline: 5px auto -webkit-focus-ring-color;
3036 outline-offset: -2px;
3037 }
3038 .btn:hover,
3039 .btn:focus,
3040 .btn.focus {
3041 color: #333;
3042 text-decoration: none;
3043 }
3044 .btn:active,
3045 .btn.active {
3046 background-image: none;
3047 outline: 0;
3048 -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
3049 box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
3050 }
3051 .btn.disabled,
3052 .btn[disabled],
3053 fieldset[disabled] .btn {
3054 cursor: not-allowed;
3055 filter: alpha(opacity=65);
3056 -webkit-box-shadow: none;
3057 box-shadow: none;
3058 opacity: .65;
3059 }
3060 a.btn.disabled,
3061 fieldset[disabled] a.btn {
3062 pointer-events: none;
3063 }
3064 .btn-default {
3065 color: #333;
3066 background-color: #fff;
3067 border-color: #ccc;
3068 }
3069 .btn-default:focus,
3070 .btn-default.focus {
3071 color: #333;
3072 background-color: #e6e6e6;
3073 border-color: #8c8c8c;
3074 }
3075 .btn-default:hover {
3076 color: #333;
3077 background-color: #e6e6e6;
3078 border-color: #adadad;
3079 }
3080 .btn-default:active,
3081 .btn-default.active,
3082 .open > .dropdown-toggle.btn-default {
3083 color: #333;
3084 background-color: #e6e6e6;
3085 border-color: #adadad;
3086 }
3087 .btn-default:active:hover,
3088 .btn-default.active:hover,
3089 .open > .dropdown-toggle.btn-default:hover,
3090 .btn-default:active:focus,
3091 .btn-default.active:focus,
3092 .open > .dropdown-toggle.btn-default:focus,
3093 .btn-default:active.focus,
3094 .btn-default.active.focus,
3095 .open > .dropdown-toggle.btn-default.focus {
3096 color: #333;
3097 background-color: #d4d4d4;
3098 border-color: #8c8c8c;
3099 }
3100 .btn-default:active,
3101 .btn-default.active,
3102 .open > .dropdown-toggle.btn-default {
3103 background-image: none;
3104 }
3105 .btn-default.disabled:hover,
3106 .btn-default[disabled]:hover,
3107 fieldset[disabled] .btn-default:hover,
3108 .btn-default.disabled:focus,
3109 .btn-default[disabled]:focus,
3110 fieldset[disabled] .btn-default:focus,
3111 .btn-default.disabled.focus,
3112 .btn-default[disabled].focus,
3113 fieldset[disabled] .btn-default.focus {
3114 background-color: #fff;
3115 border-color: #ccc;
3116 }
3117 .btn-default .badge {
3118 color: #fff;
3119 background-color: #333;
3120 }
3121 .btn-primary {
3122 color: #fff;
3123 background-color: #337ab7;
3124 border-color: #2e6da4;
3125 }
3126 .btn-primary:focus,
3127 .btn-primary.focus {
3128 color: #fff;
3129 background-color: #286090;
3130 border-color: #122b40;
3131 }
3132 .btn-primary:hover {
3133 color: #fff;
3134 background-color: #286090;
3135 border-color: #204d74;
3136 }
3137 .btn-primary:active,
3138 .btn-primary.active,
3139 .open > .dropdown-toggle.btn-primary {
3140 color: #fff;
3141 background-color: #286090;
3142 border-color: #204d74;
3143 }
3144 .btn-primary:active:hover,
3145 .btn-primary.active:hover,
3146 .open > .dropdown-toggle.btn-primary:hover,
3147 .btn-primary:active:focus,
3148 .btn-primary.active:focus,
3149 .open > .dropdown-toggle.btn-primary:focus,
3150 .btn-primary:active.focus,
3151 .btn-primary.active.focus,
3152 .open > .dropdown-toggle.btn-primary.focus {
3153 color: #fff;
3154 background-color: #204d74;
3155 border-color: #122b40;
3156 }
3157 .btn-primary:active,
3158 .btn-primary.active,
3159 .open > .dropdown-toggle.btn-primary {
3160 background-image: none;
3161 }
3162 .btn-primary.disabled:hover,
3163 .btn-primary[disabled]:hover,
3164 fieldset[disabled] .btn-primary:hover,
3165 .btn-primary.disabled:focus,
3166 .btn-primary[disabled]:focus,
3167 fieldset[disabled] .btn-primary:focus,
3168 .btn-primary.disabled.focus,
3169 .btn-primary[disabled].focus,
3170 fieldset[disabled] .btn-primary.focus {
3171 background-color: #337ab7;
3172 border-color: #2e6da4;
3173 }
3174 .btn-primary .badge {
3175 color: #337ab7;
3176 background-color: #fff;
3177 }
3178 .btn-success {
3179 color: #fff;
3180 background-color: #5cb85c;
3181 border-color: #4cae4c;
3182 }
3183 .btn-success:focus,
3184 .btn-success.focus {
3185 color: #fff;
3186 background-color: #449d44;
3187 border-color: #255625;
3188 }
3189 .btn-success:hover {
3190 color: #fff;
3191 background-color: #449d44;
3192 border-color: #398439;
3193 }
3194 .btn-success:active,
3195 .btn-success.active,
3196 .open > .dropdown-toggle.btn-success {
3197 color: #fff;
3198 background-color: #449d44;
3199 border-color: #398439;
3200 }
3201 .btn-success:active:hover,
3202 .btn-success.active:hover,
3203 .open > .dropdown-toggle.btn-success:hover,
3204 .btn-success:active:focus,
3205 .btn-success.active:focus,
3206 .open > .dropdown-toggle.btn-success:focus,
3207 .btn-success:active.focus,
3208 .btn-success.active.focus,
3209 .open > .dropdown-toggle.btn-success.focus {
3210 color: #fff;
3211 background-color: #398439;
3212 border-color: #255625;
3213 }
3214 .btn-success:active,
3215 .btn-success.active,
3216 .open > .dropdown-toggle.btn-success {
3217 background-image: none;
3218 }
3219 .btn-success.disabled:hover,
3220 .btn-success[disabled]:hover,
3221 fieldset[disabled] .btn-success:hover,
3222 .btn-success.disabled:focus,
3223 .btn-success[disabled]:focus,
3224 fieldset[disabled] .btn-success:focus,
3225 .btn-success.disabled.focus,
3226 .btn-success[disabled].focus,
3227 fieldset[disabled] .btn-success.focus {
3228 background-color: #5cb85c;
3229 border-color: #4cae4c;
3230 }
3231 .btn-success .badge {
3232 color: #5cb85c;
3233 background-color: #fff;
3234 }
3235 .btn-info {
3236 color: #fff;
3237 background-color: #5bc0de;
3238 border-color: #46b8da;
3239 }
3240 .btn-info:focus,
3241 .btn-info.focus {
3242 color: #fff;
3243 background-color: #31b0d5;
3244 border-color: #1b6d85;
3245 }
3246 .btn-info:hover {
3247 color: #fff;
3248 background-color: #31b0d5;
3249 border-color: #269abc;
3250 }
3251 .btn-info:active,
3252 .btn-info.active,
3253 .open > .dropdown-toggle.btn-info {
3254 color: #fff;
3255 background-color: #31b0d5;
3256 border-color: #269abc;
3257 }
3258 .btn-info:active:hover,
3259 .btn-info.active:hover,
3260 .open > .dropdown-toggle.btn-info:hover,
3261 .btn-info:active:focus,
3262 .btn-info.active:focus,
3263 .open > .dropdown-toggle.btn-info:focus,
3264 .btn-info:active.focus,
3265 .btn-info.active.focus,
3266 .open > .dropdown-toggle.btn-info.focus {
3267 color: #fff;
3268 background-color: #269abc;
3269 border-color: #1b6d85;
3270 }
3271 .btn-info:active,
3272 .btn-info.active,
3273 .open > .dropdown-toggle.btn-info {
3274 background-image: none;
3275 }
3276 .btn-info.disabled:hover,
3277 .btn-info[disabled]:hover,
3278 fieldset[disabled] .btn-info:hover,
3279 .btn-info.disabled:focus,
3280 .btn-info[disabled]:focus,
3281 fieldset[disabled] .btn-info:focus,
3282 .btn-info.disabled.focus,
3283 .btn-info[disabled].focus,
3284 fieldset[disabled] .btn-info.focus {
3285 background-color: #5bc0de;
3286 border-color: #46b8da;
3287 }
3288 .btn-info .badge {
3289 color: #5bc0de;
3290 background-color: #fff;
3291 }
3292 .btn-warning {
3293 color: #fff;
3294 background-color: #f0ad4e;
3295 border-color: #eea236;
3296 }
3297 .btn-warning:focus,
3298 .btn-warning.focus {
3299 color: #fff;
3300 background-color: #ec971f;
3301 border-color: #985f0d;
3302 }
3303 .btn-warning:hover {
3304 color: #fff;
3305 background-color: #ec971f;
3306 border-color: #d58512;
3307 }
3308 .btn-warning:active,
3309 .btn-warning.active,
3310 .open > .dropdown-toggle.btn-warning {
3311 color: #fff;
3312 background-color: #ec971f;
3313 border-color: #d58512;
3314 }
3315 .btn-warning:active:hover,
3316 .btn-warning.active:hover,
3317 .open > .dropdown-toggle.btn-warning:hover,
3318 .btn-warning:active:focus,
3319 .btn-warning.active:focus,
3320 .open > .dropdown-toggle.btn-warning:focus,
3321 .btn-warning:active.focus,
3322 .btn-warning.active.focus,
3323 .open > .dropdown-toggle.btn-warning.focus {
3324 color: #fff;
3325 background-color: #d58512;
3326 border-color: #985f0d;
3327 }
3328 .btn-warning:active,
3329 .btn-warning.active,
3330 .open > .dropdown-toggle.btn-warning {
3331 background-image: none;
3332 }
3333 .btn-warning.disabled:hover,
3334 .btn-warning[disabled]:hover,
3335 fieldset[disabled] .btn-warning:hover,
3336 .btn-warning.disabled:focus,
3337 .btn-warning[disabled]:focus,
3338 fieldset[disabled] .btn-warning:focus,
3339 .btn-warning.disabled.focus,
3340 .btn-warning[disabled].focus,
3341 fieldset[disabled] .btn-warning.focus {
3342 background-color: #f0ad4e;
3343 border-color: #eea236;
3344 }
3345 .btn-warning .badge {
3346 color: #f0ad4e;
3347 background-color: #fff;
3348 }
3349 .btn-danger {
3350 color: #fff;
3351 background-color: #d9534f;
3352 border-color: #d43f3a;
3353 }
3354 .btn-danger:focus,
3355 .btn-danger.focus {
3356 color: #fff;
3357 background-color: #c9302c;
3358 border-color: #761c19;
3359 }
3360 .btn-danger:hover {
3361 color: #fff;
3362 background-color: #c9302c;
3363 border-color: #ac2925;
3364 }
3365 .btn-danger:active,
3366 .btn-danger.active,
3367 .open > .dropdown-toggle.btn-danger {
3368 color: #fff;
3369 background-color: #c9302c;
3370 border-color: #ac2925;
3371 }
3372 .btn-danger:active:hover,
3373 .btn-danger.active:hover,
3374 .open > .dropdown-toggle.btn-danger:hover,
3375 .btn-danger:active:focus,
3376 .btn-danger.active:focus,
3377 .open > .dropdown-toggle.btn-danger:focus,
3378 .btn-danger:active.focus,
3379 .btn-danger.active.focus,
3380 .open > .dropdown-toggle.btn-danger.focus {
3381 color: #fff;
3382 background-color: #ac2925;
3383 border-color: #761c19;
3384 }
3385 .btn-danger:active,
3386 .btn-danger.active,
3387 .open > .dropdown-toggle.btn-danger {
3388 background-image: none;
3389 }
3390 .btn-danger.disabled:hover,
3391 .btn-danger[disabled]:hover,
3392 fieldset[disabled] .btn-danger:hover,
3393 .btn-danger.disabled:focus,
3394 .btn-danger[disabled]:focus,
3395 fieldset[disabled] .btn-danger:focus,
3396 .btn-danger.disabled.focus,
3397 .btn-danger[disabled].focus,
3398 fieldset[disabled] .btn-danger.focus {
3399 background-color: #d9534f;
3400 border-color: #d43f3a;
3401 }
3402 .btn-danger .badge {
3403 color: #d9534f;
3404 background-color: #fff;
3405 }
3406 .btn-link {
3407 font-weight: normal;
3408 color: #337ab7;
3409 border-radius: 0;
3410 }
3411 .btn-link,
3412 .btn-link:active,
3413 .btn-link.active,
3414 .btn-link[disabled],
3415 fieldset[disabled] .btn-link {
3416 background-color: transparent;
3417 -webkit-box-shadow: none;
3418 box-shadow: none;
3419 }
3420 .btn-link,
3421 .btn-link:hover,
3422 .btn-link:focus,
3423 .btn-link:active {
3424 border-color: transparent;
3425 }
3426 .btn-link:hover,
3427 .btn-link:focus {
3428 color: #23527c;
3429 text-decoration: underline;
3430 background-color: transparent;
3431 }
3432 .btn-link[disabled]:hover,
3433 fieldset[disabled] .btn-link:hover,
3434 .btn-link[disabled]:focus,
3435 fieldset[disabled] .btn-link:focus {
3436 color: #777;
3437 text-decoration: none;
3438 }
3439 .btn-lg,
3440 .btn-group-lg > .btn {
3441 padding: 10px 16px;
3442 font-size: 18px;
3443 line-height: 1.3333333;
3444 border-radius: 6px;
3445 }
3446 .btn-sm,
3447 .btn-group-sm > .btn {
3448 padding: 5px 10px;
3449 font-size: 12px;
3450 line-height: 1.5;
3451 border-radius: 3px;
3452 }
3453 .btn-xs,
3454 .btn-group-xs > .btn {
3455 padding: 1px 5px;
3456 font-size: 12px;
3457 line-height: 1.5;
3458 border-radius: 3px;
3459 }
3460 .btn-block {
3461 display: block;
3462 width: 100%;
3463 }
3464 .btn-block + .btn-block {
3465 margin-top: 5px;
3466 }
3467 input[type="submit"].btn-block,
3468 input[type="reset"].btn-block,
3469 input[type="button"].btn-block {
3470 width: 100%;
3471 }
3472 .fade {
3473 opacity: 0;
3474 -webkit-transition: opacity .15s linear;
3475 -o-transition: opacity .15s linear;
3476 transition: opacity .15s linear;
3477 }
3478 .fade.in {
3479 opacity: 1;
3480 }
3481 .collapse {
3482 display: none;
3483 }
3484 .collapse.in {
3485 display: block;
3486 }
3487 tr.collapse.in {
3488 display: table-row;
3489 }
3490 tbody.collapse.in {
3491 display: table-row-group;
3492 }
3493 .collapsing {
3494 position: relative;
3495 height: 0;
3496 overflow: hidden;
3497 -webkit-transition-timing-function: ease;
3498 -o-transition-timing-function: ease;
3499 transition-timing-function: ease;
3500 -webkit-transition-duration: .35s;
3501 -o-transition-duration: .35s;
3502 transition-duration: .35s;
3503 -webkit-transition-property: height, visibility;
3504 -o-transition-property: height, visibility;
3505 transition-property: height, visibility;
3506 }
3507 .caret {
3508 display: inline-block;
3509 width: 0;
3510 height: 0;
3511 margin-left: 2px;
3512 vertical-align: middle;
3513 border-top: 4px dashed;
3514 border-top: 4px solid \9;
3515 border-right: 4px solid transparent;
3516 border-left: 4px solid transparent;
3517 }
3518 .dropup,
3519 .dropdown {
3520 position: relative;
3521 }
3522 .dropdown-toggle:focus {
3523 outline: 0;
3524 }
3525 .dropdown-menu {
3526 position: absolute;
3527 top: 100%;
3528 left: 0;
3529 z-index: 1000;
3530 display: none;
3531 float: left;
3532 min-width: 160px;
3533 padding: 5px 0;
3534 margin: 2px 0 0;
3535 font-size: 14px;
3536 text-align: left;
3537 list-style: none;
3538 background-color: #fff;
3539 -webkit-background-clip: padding-box;
3540 background-clip: padding-box;
3541 border: 1px solid #ccc;
3542 border: 1px solid rgba(0, 0, 0, .15);
3543 border-radius: 4px;
3544 -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
3545 box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
3546 }
3547 .dropdown-menu.pull-right {
3548 right: 0;
3549 left: auto;
3550 }
3551 .dropdown-menu .divider {
3552 height: 1px;
3553 margin: 9px 0;
3554 overflow: hidden;
3555 background-color: #e5e5e5;
3556 }
3557 .dropdown-menu > li > a {
3558 display: block;
3559 padding: 3px 20px;
3560 clear: both;
3561 font-weight: normal;
3562 line-height: 1.42857143;
3563 color: #333;
3564 white-space: nowrap;
3565 }
3566 .dropdown-menu > li > a:hover,
3567 .dropdown-menu > li > a:focus {
3568 color: #262626;
3569 text-decoration: none;
3570 background-color: #f5f5f5;
3571 }
3572 .dropdown-menu > .active > a,
3573 .dropdown-menu > .active > a:hover,
3574 .dropdown-menu > .active > a:focus {
3575 color: #fff;
3576 text-decoration: none;
3577 background-color: #337ab7;
3578 outline: 0;
3579 }
3580 .dropdown-menu > .disabled > a,
3581 .dropdown-menu > .disabled > a:hover,
3582 .dropdown-menu > .disabled > a:focus {
3583 color: #777;
3584 }
3585 .dropdown-menu > .disabled > a:hover,
3586 .dropdown-menu > .disabled > a:focus {
3587 text-decoration: none;
3588 cursor: not-allowed;
3589 background-color: transparent;
3590 background-image: none;
3591 filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
3592 }
3593 .open > .dropdown-menu {
3594 display: block;
3595 }
3596 .open > a {
3597 outline: 0;
3598 }
3599 .dropdown-menu-right {
3600 right: 0;
3601 left: auto;
3602 }
3603 .dropdown-menu-left {
3604 right: auto;
3605 left: 0;
3606 }
3607 .dropdown-header {
3608 display: block;
3609 padding: 3px 20px;
3610 font-size: 12px;
3611 line-height: 1.42857143;
3612 color: #777;
3613 white-space: nowrap;
3614 }
3615 .dropdown-backdrop {
3616 position: fixed;
3617 top: 0;
3618 right: 0;
3619 bottom: 0;
3620 left: 0;
3621 z-index: 990;
3622 }
3623 .pull-right > .dropdown-menu {
3624 right: 0;
3625 left: auto;
3626 }
3627 .dropup .caret,
3628 .navbar-fixed-bottom .dropdown .caret {
3629 content: "";
3630 border-top: 0;
3631 border-bottom: 4px dashed;
3632 border-bottom: 4px solid \9;
3633 }
3634 .dropup .dropdown-menu,
3635 .navbar-fixed-bottom .dropdown .dropdown-menu {
3636 top: auto;
3637 bottom: 100%;
3638 margin-bottom: 2px;
3639 }
3640 @media (min-width: 768px) {
3641 .navbar-right .dropdown-menu {
3642 right: 0;
3643 left: auto;
3644 }
3645 .navbar-right .dropdown-menu-left {
3646 right: auto;
3647 left: 0;
3648 }
3649 }
3650 .btn-group,
3651 .btn-group-vertical {
3652 position: relative;
3653 display: inline-block;
3654 vertical-align: middle;
3655 }
3656 .btn-group > .btn,
3657 .btn-group-vertical > .btn {
3658 position: relative;
3659 float: left;
3660 }
3661 .btn-group > .btn:hover,
3662 .btn-group-vertical > .btn:hover,
3663 .btn-group > .btn:focus,
3664 .btn-group-vertical > .btn:focus,
3665 .btn-group > .btn:active,
3666 .btn-group-vertical > .btn:active,
3667 .btn-group > .btn.active,
3668 .btn-group-vertical > .btn.active {
3669 z-index: 2;
3670 }
3671 .btn-group .btn + .btn,
3672 .btn-group .btn + .btn-group,
3673 .btn-group .btn-group + .btn,
3674 .btn-group .btn-group + .btn-group {
3675 margin-left: -1px;
3676 }
3677 .btn-toolbar {
3678 margin-left: -5px;
3679 }
3680 .btn-toolbar .btn,
3681 .btn-toolbar .btn-group,
3682 .btn-toolbar .input-group {
3683 float: left;
3684 }
3685 .btn-toolbar > .btn,
3686 .btn-toolbar > .btn-group,
3687 .btn-toolbar > .input-group {
3688 margin-left: 5px;
3689 }
3690 .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
3691 border-radius: 0;
3692 }
3693 .btn-group > .btn:first-child {
3694 margin-left: 0;
3695 }
3696 .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
3697 border-top-right-radius: 0;
3698 border-bottom-right-radius: 0;
3699 }
3700 .btn-group > .btn:last-child:not(:first-child),
3701 .btn-group > .dropdown-toggle:not(:first-child) {
3702 border-top-left-radius: 0;
3703 border-bottom-left-radius: 0;
3704 }
3705 .btn-group > .btn-group {
3706 float: left;
3707 }
3708 .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
3709 border-radius: 0;
3710 }
3711 .btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,
3712 .btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
3713 border-top-right-radius: 0;
3714 border-bottom-right-radius: 0;
3715 }
3716 .btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
3717 border-top-left-radius: 0;
3718 border-bottom-left-radius: 0;
3719 }
3720 .btn-group .dropdown-toggle:active,
3721 .btn-group.open .dropdown-toggle {
3722 outline: 0;
3723 }
3724 .btn-group > .btn + .dropdown-toggle {
3725 padding-right: 8px;
3726 padding-left: 8px;
3727 }
3728 .btn-group > .btn-lg + .dropdown-toggle {
3729 padding-right: 12px;
3730 padding-left: 12px;
3731 }
3732 .btn-group.open .dropdown-toggle {
3733 -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
3734 box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
3735 }
3736 .btn-group.open .dropdown-toggle.btn-link {
3737 -webkit-box-shadow: none;
3738 box-shadow: none;
3739 }
3740 .btn .caret {
3741 margin-left: 0;
3742 }
3743 .btn-lg .caret {
3744 border-width: 5px 5px 0;
3745 border-bottom-width: 0;
3746 }
3747 .dropup .btn-lg .caret {
3748 border-width: 0 5px 5px;
3749 }
3750 .btn-group-vertical > .btn,
3751 .btn-group-vertical > .btn-group,
3752 .btn-group-vertical > .btn-group > .btn {
3753 display: block;
3754 float: none;
3755 width: 100%;
3756 max-width: 100%;
3757 }
3758 .btn-group-vertical > .btn-group > .btn {
3759 float: none;
3760 }
3761 .btn-group-vertical > .btn + .btn,
3762 .btn-group-vertical > .btn + .btn-group,
3763 .btn-group-vertical > .btn-group + .btn,
3764 .btn-group-vertical > .btn-group + .btn-group {
3765 margin-top: -1px;
3766 margin-left: 0;
3767 }
3768 .btn-group-vertical > .btn:not(:first-child):not(:last-child) {
3769 border-radius: 0;
3770 }
3771 .btn-group-vertical > .btn:first-child:not(:last-child) {
3772 border-top-left-radius: 4px;
3773 border-top-right-radius: 4px;
3774 border-bottom-right-radius: 0;
3775 border-bottom-left-radius: 0;
3776 }
3777 .btn-group-vertical > .btn:last-child:not(:first-child) {
3778 border-top-left-radius: 0;
3779 border-top-right-radius: 0;
3780 border-bottom-right-radius: 4px;
3781 border-bottom-left-radius: 4px;
3782 }
3783 .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
3784 border-radius: 0;
3785 }
3786 .btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
3787 .btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
3788 border-bottom-right-radius: 0;
3789 border-bottom-left-radius: 0;
3790 }
3791 .btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
3792 border-top-left-radius: 0;
3793 border-top-right-radius: 0;
3794 }
3795 .btn-group-justified {
3796 display: table;
3797 width: 100%;
3798 table-layout: fixed;
3799 border-collapse: separate;
3800 }
3801 .btn-group-justified > .btn,
3802 .btn-group-justified > .btn-group {
3803 display: table-cell;
3804 float: none;
3805 width: 1%;
3806 }
3807 .btn-group-justified > .btn-group .btn {
3808 width: 100%;
3809 }
3810 .btn-group-justified > .btn-group .dropdown-menu {
3811 left: auto;
3812 }
3813 [data-toggle="buttons"] > .btn input[type="radio"],
3814 [data-toggle="buttons"] > .btn-group > .btn input[type="radio"],
3815 [data-toggle="buttons"] > .btn input[type="checkbox"],
3816 [data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] {
3817 position: absolute;
3818 clip: rect(0, 0, 0, 0);
3819 pointer-events: none;
3820 }
3821 .input-group {
3822 position: relative;
3823 display: table;
3824 border-collapse: separate;
3825 }
3826 .input-group[class*="col-"] {
3827 float: none;
3828 padding-right: 0;
3829 padding-left: 0;
3830 }
3831 .input-group .form-control {
3832 position: relative;
3833 z-index: 2;
3834 float: left;
3835 width: 100%;
3836 margin-bottom: 0;
3837 }
3838 .input-group .form-control:focus {
3839 z-index: 3;
3840 }
3841 .input-group-lg > .form-control,
3842 .input-group-lg > .input-group-addon,
3843 .input-group-lg > .input-group-btn > .btn {
3844 height: 46px;
3845 padding: 10px 16px;
3846 font-size: 18px;
3847 line-height: 1.3333333;
3848 border-radius: 6px;
3849 }
3850 select.input-group-lg > .form-control,
3851 select.input-group-lg > .input-group-addon,
3852 select.input-group-lg > .input-group-btn > .btn {
3853 height: 46px;
3854 line-height: 46px;
3855 }
3856 textarea.input-group-lg > .form-control,
3857 textarea.input-group-lg > .input-group-addon,
3858 textarea.input-group-lg > .input-group-btn > .btn,
3859 select[multiple].input-group-lg > .form-control,
3860 select[multiple].input-group-lg > .input-group-addon,
3861 select[multiple].input-group-lg > .input-group-btn > .btn {
3862 height: auto;
3863 }
3864 .input-group-sm > .form-control,
3865 .input-group-sm > .input-group-addon,
3866 .input-group-sm > .input-group-btn > .btn {
3867 height: 30px;
3868 padding: 5px 10px;
3869 font-size: 12px;
3870 line-height: 1.5;
3871 border-radius: 3px;
3872 }
3873 select.input-group-sm > .form-control,
3874 select.input-group-sm > .input-group-addon,
3875 select.input-group-sm > .input-group-btn > .btn {
3876 height: 30px;
3877 line-height: 30px;
3878 }
3879 textarea.input-group-sm > .form-control,
3880 textarea.input-group-sm > .input-group-addon,
3881 textarea.input-group-sm > .input-group-btn > .btn,
3882 select[multiple].input-group-sm > .form-control,
3883 select[multiple].input-group-sm > .input-group-addon,
3884 select[multiple].input-group-sm > .input-group-btn > .btn {
3885 height: auto;
3886 }
3887 .input-group-addon,
3888 .input-group-btn,
3889 .input-group .form-control {
3890 display: table-cell;
3891 }
3892 .input-group-addon:not(:first-child):not(:last-child),
3893 .input-group-btn:not(:first-child):not(:last-child),
3894 .input-group .form-control:not(:first-child):not(:last-child) {
3895 border-radius: 0;
3896 }
3897 .input-group-addon,
3898 .input-group-btn {
3899 width: 1%;
3900 white-space: nowrap;
3901 vertical-align: middle;
3902 }
3903 .input-group-addon {
3904 padding: 6px 12px;
3905 font-size: 14px;
3906 font-weight: normal;
3907 line-height: 1;
3908 color: #555;
3909 text-align: center;
3910 background-color: #eee;
3911 border: 1px solid #ccc;
3912 border-radius: 4px;
3913 }
3914 .input-group-addon.input-sm {
3915 padding: 5px 10px;
3916 font-size: 12px;
3917 border-radius: 3px;
3918 }
3919 .input-group-addon.input-lg {
3920 padding: 10px 16px;
3921 font-size: 18px;
3922 border-radius: 6px;
3923 }
3924 .input-group-addon input[type="radio"],
3925 .input-group-addon input[type="checkbox"] {
3926 margin-top: 0;
3927 }
3928 .input-group .form-control:first-child,
3929 .input-group-addon:first-child,
3930 .input-group-btn:first-child > .btn,
3931 .input-group-btn:first-child > .btn-group > .btn,
3932 .input-group-btn:first-child > .dropdown-toggle,
3933 .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
3934 .input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
3935 border-top-right-radius: 0;
3936 border-bottom-right-radius: 0;
3937 }
3938 .input-group-addon:first-child {
3939 border-right: 0;
3940 }
3941 .input-group .form-control:last-child,
3942 .input-group-addon:last-child,
3943 .input-group-btn:last-child > .btn,
3944 .input-group-btn:last-child > .btn-group > .btn,
3945 .input-group-btn:last-child > .dropdown-toggle,
3946 .input-group-btn:first-child > .btn:not(:first-child),
3947 .input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
3948 border-top-left-radius: 0;
3949 border-bottom-left-radius: 0;
3950 }
3951 .input-group-addon:last-child {
3952 border-left: 0;
3953 }
3954 .input-group-btn {
3955 position: relative;
3956 font-size: 0;
3957 white-space: nowrap;
3958 }
3959 .input-group-btn > .btn {
3960 position: relative;
3961 }
3962 .input-group-btn > .btn + .btn {
3963 margin-left: -1px;
3964 }
3965 .input-group-btn > .btn:hover,
3966 .input-group-btn > .btn:focus,
3967 .input-group-btn > .btn:active {
3968 z-index: 2;
3969 }
3970 .input-group-btn:first-child > .btn,
3971 .input-group-btn:first-child > .btn-group {
3972 margin-right: -1px;
3973 }
3974 .input-group-btn:last-child > .btn,
3975 .input-group-btn:last-child > .btn-group {
3976 z-index: 2;
3977 margin-left: -1px;
3978 }
3979 .nav {
3980 padding-left: 0;
3981 margin-bottom: 0;
3982 list-style: none;
3983 }
3984 .nav > li {
3985 position: relative;
3986 display: block;
3987 }
3988 .nav > li > a {
3989 position: relative;
3990 display: block;
3991 padding: 10px 15px;
3992 }
3993 .nav > li > a:hover,
3994 .nav > li > a:focus {
3995 text-decoration: none;
3996 background-color: #eee;
3997 }
3998 .nav > li.disabled > a {
3999 color: #777;
4000 }
4001 .nav > li.disabled > a:hover,
4002 .nav > li.disabled > a:focus {
4003 color: #777;
4004 text-decoration: none;
4005 cursor: not-allowed;
4006 background-color: transparent;
4007 }
4008 .nav .open > a,
4009 .nav .open > a:hover,
4010 .nav .open > a:focus {
4011 background-color: #eee;
4012 border-color: #337ab7;
4013 }
4014 .nav .nav-divider {
4015 height: 1px;
4016 margin: 9px 0;
4017 overflow: hidden;
4018 background-color: #e5e5e5;
4019 }
4020 .nav > li > a > img {
4021 max-width: none;
4022 }
4023 .nav-tabs {
4024 border-bottom: 1px solid #ddd;
4025 }
4026 .nav-tabs > li {
4027 float: left;
4028 margin-bottom: -1px;
4029 }
4030 .nav-tabs > li > a {
4031 margin-right: 2px;
4032 line-height: 1.42857143;
4033 border: 1px solid transparent;
4034 border-radius: 4px 4px 0 0;
4035 }
4036 .nav-tabs > li > a:hover {
4037 border-color: #eee #eee #ddd;
4038 }
4039 .nav-tabs > li.active > a,
4040 .nav-tabs > li.active > a:hover,
4041 .nav-tabs > li.active > a:focus {
4042 color: #555;
4043 cursor: default;
4044 background-color: #fff;
4045 border: 1px solid #ddd;
4046 border-bottom-color: transparent;
4047 }
4048 .nav-tabs.nav-justified {
4049 width: 100%;
4050 border-bottom: 0;
4051 }
4052 .nav-tabs.nav-justified > li {
4053 float: none;
4054 }
4055 .nav-tabs.nav-justified > li > a {
4056 margin-bottom: 5px;
4057 text-align: center;
4058 }
4059 .nav-tabs.nav-justified > .dropdown .dropdown-menu {
4060 top: auto;
4061 left: auto;
4062 }
4063 @media (min-width: 768px) {
4064 .nav-tabs.nav-justified > li {
4065 display: table-cell;
4066 width: 1%;
4067 }
4068 .nav-tabs.nav-justified > li > a {
4069 margin-bottom: 0;
4070 }
4071 }
4072 .nav-tabs.nav-justified > li > a {
4073 margin-right: 0;
4074 border-radius: 4px;
4075 }
4076 .nav-tabs.nav-justified > .active > a,
4077 .nav-tabs.nav-justified > .active > a:hover,
4078 .nav-tabs.nav-justified > .active > a:focus {
4079 border: 1px solid #ddd;
4080 }
4081 @media (min-width: 768px) {
4082 .nav-tabs.nav-justified > li > a {
4083 border-bottom: 1px solid #ddd;
4084 border-radius: 4px 4px 0 0;
4085 }
4086 .nav-tabs.nav-justified > .active > a,
4087 .nav-tabs.nav-justified > .active > a:hover,
4088 .nav-tabs.nav-justified > .active > a:focus {
4089 border-bottom-color: #fff;
4090 }
4091 }
4092 .nav-pills > li {
4093 float: left;
4094 }
4095 .nav-pills > li > a {
4096 border-radius: 4px;
4097 }
4098 .nav-pills > li + li {
4099 margin-left: 2px;
4100 }
4101 .nav-pills > li.active > a,
4102 .nav-pills > li.active > a:hover,
4103 .nav-pills > li.active > a:focus {
4104 color: #fff;
4105 background-color: #337ab7;
4106 }
4107 .nav-stacked > li {
4108 float: none;
4109 }
4110 .nav-stacked > li + li {
4111 margin-top: 2px;
4112 margin-left: 0;
4113 }
4114 .nav-justified {
4115 width: 100%;
4116 }
4117 .nav-justified > li {
4118 float: none;
4119 }
4120 .nav-justified > li > a {
4121 margin-bottom: 5px;
4122 text-align: center;
4123 }
4124 .nav-justified > .dropdown .dropdown-menu {
4125 top: auto;
4126 left: auto;
4127 }
4128 @media (min-width: 768px) {
4129 .nav-justified > li {
4130 display: table-cell;
4131 width: 1%;
4132 }
4133 .nav-justified > li > a {
4134 margin-bottom: 0;
4135 }
4136 }
4137 .nav-tabs-justified {
4138 border-bottom: 0;
4139 }
4140 .nav-tabs-justified > li > a {
4141 margin-right: 0;
4142 border-radius: 4px;
4143 }
4144 .nav-tabs-justified > .active > a,
4145 .nav-tabs-justified > .active > a:hover,
4146 .nav-tabs-justified > .active > a:focus {
4147 border: 1px solid #ddd;
4148 }
4149 @media (min-width: 768px) {
4150 .nav-tabs-justified > li > a {
4151 border-bottom: 1px solid #ddd;
4152 border-radius: 4px 4px 0 0;
4153 }
4154 .nav-tabs-justified > .active > a,
4155 .nav-tabs-justified > .active > a:hover,
4156 .nav-tabs-justified > .active > a:focus {
4157 border-bottom-color: #fff;
4158 }
4159 }
4160 .tab-content > .tab-pane {
4161 display: none;
4162 }
4163 .tab-content > .active {
4164 display: block;
4165 }
4166 .nav-tabs .dropdown-menu {
4167 margin-top: -1px;
4168 border-top-left-radius: 0;
4169 border-top-right-radius: 0;
4170 }
4171 .navbar {
4172 position: relative;
4173 min-height: 50px;
4174 margin-bottom: 20px;
4175 border: 1px solid transparent;
4176 }
4177 @media (min-width: 768px) {
4178 .navbar {
4179 border-radius: 4px;
4180 }
4181 }
4182 @media (min-width: 768px) {
4183 .navbar-header {
4184 float: left;
4185 }
4186 }
4187 .navbar-collapse {
4188 padding-right: 15px;
4189 padding-left: 15px;
4190 overflow-x: visible;
4191 -webkit-overflow-scrolling: touch;
4192 border-top: 1px solid transparent;
4193 -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
4194 box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
4195 }
4196 .navbar-collapse.in {
4197 overflow-y: auto;
4198 }
4199 @media (min-width: 768px) {
4200 .navbar-collapse {
4201 width: auto;
4202 border-top: 0;
4203 -webkit-box-shadow: none;
4204 box-shadow: none;
4205 }
4206 .navbar-collapse.collapse {
4207 display: block !important;
4208 height: auto !important;
4209 padding-bottom: 0;
4210 overflow: visible !important;
4211 }
4212 .navbar-collapse.in {
4213 overflow-y: visible;
4214 }
4215 .navbar-fixed-top .navbar-collapse,
4216 .navbar-static-top .navbar-collapse,
4217 .navbar-fixed-bottom .navbar-collapse {
4218 padding-right: 0;
4219 padding-left: 0;
4220 }
4221 }
4222 .navbar-fixed-top .navbar-collapse,
4223 .navbar-fixed-bottom .navbar-collapse {
4224 max-height: 340px;
4225 }
4226 @media (max-device-width: 480px) and (orientation: landscape) {
4227 .navbar-fixed-top .navbar-collapse,
4228 .navbar-fixed-bottom .navbar-collapse {
4229 max-height: 200px;
4230 }
4231 }
4232 .container > .navbar-header,
4233 .container-fluid > .navbar-header,
4234 .container > .navbar-collapse,
4235 .container-fluid > .navbar-collapse {
4236 margin-right: -15px;
4237 margin-left: -15px;
4238 }
4239 @media (min-width: 768px) {
4240 .container > .navbar-header,
4241 .container-fluid > .navbar-header,
4242 .container > .navbar-collapse,
4243 .container-fluid > .navbar-collapse {
4244 margin-right: 0;
4245 margin-left: 0;
4246 }
4247 }
4248 .navbar-static-top {
4249 z-index: 1000;
4250 border-width: 0 0 1px;
4251 }
4252 @media (min-width: 768px) {
4253 .navbar-static-top {
4254 border-radius: 0;
4255 }
4256 }
4257 .navbar-fixed-top,
4258 .navbar-fixed-bottom {
4259 position: fixed;
4260 right: 0;
4261 left: 0;
4262 z-index: 1030;
4263 }
4264 @media (min-width: 768px) {
4265 .navbar-fixed-top,
4266 .navbar-fixed-bottom {
4267 border-radius: 0;
4268 }
4269 }
4270 .navbar-fixed-top {
4271 top: 0;
4272 border-width: 0 0 1px;
4273 }
4274 .navbar-fixed-bottom {
4275 bottom: 0;
4276 margin-bottom: 0;
4277 border-width: 1px 0 0;
4278 }
4279 .navbar-brand {
4280 float: left;
4281 height: 50px;
4282 padding: 15px 15px;
4283 font-size: 18px;
4284 line-height: 20px;
4285 }
4286 .navbar-brand:hover,
4287 .navbar-brand:focus {
4288 text-decoration: none;
4289 }
4290 .navbar-brand > img {
4291 display: block;
4292 }
4293 @media (min-width: 768px) {
4294 .navbar > .container .navbar-brand,
4295 .navbar > .container-fluid .navbar-brand {
4296 margin-left: -15px;
4297 }
4298 }
4299 .navbar-toggle {
4300 position: relative;
4301 float: right;
4302 padding: 9px 10px;
4303 margin-top: 8px;
4304 margin-right: 15px;
4305 margin-bottom: 8px;
4306 background-color: transparent;
4307 background-image: none;
4308 border: 1px solid transparent;
4309 border-radius: 4px;
4310 }
4311 .navbar-toggle:focus {
4312 outline: 0;
4313 }
4314 .navbar-toggle .icon-bar {
4315 display: block;
4316 width: 22px;
4317 height: 2px;
4318 border-radius: 1px;
4319 }
4320 .navbar-toggle .icon-bar + .icon-bar {
4321 margin-top: 4px;
4322 }
4323 @media (min-width: 768px) {
4324 .navbar-toggle {
4325 display: none;
4326 }
4327 }
4328 .navbar-nav {
4329 margin: 7.5px -15px;
4330 }
4331 .navbar-nav > li > a {
4332 padding-top: 10px;
4333 padding-bottom: 10px;
4334 line-height: 20px;
4335 }
4336 @media (max-width: 767px) {
4337 .navbar-nav .open .dropdown-menu {
4338 position: static;
4339 float: none;
4340 width: auto;
4341 margin-top: 0;
4342 background-color: transparent;
4343 border: 0;
4344 -webkit-box-shadow: none;
4345 box-shadow: none;
4346 }
4347 .navbar-nav .open .dropdown-menu > li > a,
4348 .navbar-nav .open .dropdown-menu .dropdown-header {
4349 padding: 5px 15px 5px 25px;
4350 }
4351 .navbar-nav .open .dropdown-menu > li > a {
4352 line-height: 20px;
4353 }
4354 .navbar-nav .open .dropdown-menu > li > a:hover,
4355 .navbar-nav .open .dropdown-menu > li > a:focus {
4356 background-image: none;
4357 }
4358 }
4359 @media (min-width: 768px) {
4360 .navbar-nav {
4361 float: left;
4362 margin: 0;
4363 }
4364 .navbar-nav > li {
4365 float: left;
4366 }
4367 .navbar-nav > li > a {
4368 padding-top: 15px;
4369 padding-bottom: 15px;
4370 }
4371 }
4372 .navbar-form {
4373 padding: 10px 15px;
4374 margin-top: 8px;
4375 margin-right: -15px;
4376 margin-bottom: 8px;
4377 margin-left: -15px;
4378 border-top: 1px solid transparent;
4379 border-bottom: 1px solid transparent;
4380 -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
4381 box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
4382 }
4383 @media (min-width: 768px) {
4384 .navbar-form .form-group {
4385 display: inline-block;
4386 margin-bottom: 0;
4387 vertical-align: middle;
4388 }
4389 .navbar-form .form-control {
4390 display: inline-block;
4391 width: auto;
4392 vertical-align: middle;
4393 }
4394 .navbar-form .form-control-static {
4395 display: inline-block;
4396 }
4397 .navbar-form .input-group {
4398 display: inline-table;
4399 vertical-align: middle;
4400 }
4401 .navbar-form .input-group .input-group-addon,
4402 .navbar-form .input-group .input-group-btn,
4403 .navbar-form .input-group .form-control {
4404 width: auto;
4405 }
4406 .navbar-form .input-group > .form-control {
4407 width: 100%;
4408 }
4409 .navbar-form .control-label {
4410 margin-bottom: 0;
4411 vertical-align: middle;
4412 }
4413 .navbar-form .radio,
4414 .navbar-form .checkbox {
4415 display: inline-block;
4416 margin-top: 0;
4417 margin-bottom: 0;
4418 vertical-align: middle;
4419 }
4420 .navbar-form .radio label,
4421 .navbar-form .checkbox label {
4422 padding-left: 0;
4423 }
4424 .navbar-form .radio input[type="radio"],
4425 .navbar-form .checkbox input[type="checkbox"] {
4426 position: relative;
4427 margin-left: 0;
4428 }
4429 .navbar-form .has-feedback .form-control-feedback {
4430 top: 0;
4431 }
4432 }
4433 @media (max-width: 767px) {
4434 .navbar-form .form-group {
4435 margin-bottom: 5px;
4436 }
4437 .navbar-form .form-group:last-child {
4438 margin-bottom: 0;
4439 }
4440 }
4441 @media (min-width: 768px) {
4442 .navbar-form {
4443 width: auto;
4444 padding-top: 0;
4445 padding-bottom: 0;
4446 margin-right: 0;
4447 margin-left: 0;
4448 border: 0;
4449 -webkit-box-shadow: none;
4450 box-shadow: none;
4451 }
4452 }
4453 .navbar-nav > li > .dropdown-menu {
4454 margin-top: 0;
4455 border-top-left-radius: 0;
4456 border-top-right-radius: 0;
4457 }
4458 .navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
4459 margin-bottom: 0;
4460 border-top-left-radius: 4px;
4461 border-top-right-radius: 4px;
4462 border-bottom-right-radius: 0;
4463 border-bottom-left-radius: 0;
4464 }
4465 .navbar-btn {
4466 margin-top: 8px;
4467 margin-bottom: 8px;
4468 }
4469 .navbar-btn.btn-sm {
4470 margin-top: 10px;
4471 margin-bottom: 10px;
4472 }
4473 .navbar-btn.btn-xs {
4474 margin-top: 14px;
4475 margin-bottom: 14px;
4476 }
4477 .navbar-text {
4478 margin-top: 15px;
4479 margin-bottom: 15px;
4480 }
4481 @media (min-width: 768px) {
4482 .navbar-text {
4483 float: left;
4484 margin-right: 15px;
4485 margin-left: 15px;
4486 }
4487 }
4488 @media (min-width: 768px) {
4489 .navbar-left {
4490 float: left !important;
4491 }
4492 .navbar-right {
4493 float: right !important;
4494 margin-right: -15px;
4495 }
4496 .navbar-right ~ .navbar-right {
4497 margin-right: 0;
4498 }
4499 }
4500 .navbar-default {
4501 background-color: #f8f8f8;
4502 border-color: #e7e7e7;
4503 }
4504 .navbar-default .navbar-brand {
4505 color: #777;
4506 }
4507 .navbar-default .navbar-brand:hover,
4508 .navbar-default .navbar-brand:focus {
4509 color: #5e5e5e;
4510 background-color: transparent;
4511 }
4512 .navbar-default .navbar-text {
4513 color: #777;
4514 }
4515 .navbar-default .navbar-nav > li > a {
4516 color: #777;
4517 }
4518 .navbar-default .navbar-nav > li > a:hover,
4519 .navbar-default .navbar-nav > li > a:focus {
4520 color: #333;
4521 background-color: transparent;
4522 }
4523 .navbar-default .navbar-nav > .active > a,
4524 .navbar-default .navbar-nav > .active > a:hover,
4525 .navbar-default .navbar-nav > .active > a:focus {
4526 color: #555;
4527 background-color: #e7e7e7;
4528 }
4529 .navbar-default .navbar-nav > .disabled > a,
4530 .navbar-default .navbar-nav > .disabled > a:hover,
4531 .navbar-default .navbar-nav > .disabled > a:focus {
4532 color: #ccc;
4533 background-color: transparent;
4534 }
4535 .navbar-default .navbar-toggle {
4536 border-color: #ddd;
4537 }
4538 .navbar-default .navbar-toggle:hover,
4539 .navbar-default .navbar-toggle:focus {
4540 background-color: #ddd;
4541 }
4542 .navbar-default .navbar-toggle .icon-bar {
4543 background-color: #888;
4544 }
4545 .navbar-default .navbar-collapse,
4546 .navbar-default .navbar-form {
4547 border-color: #e7e7e7;
4548 }
4549 .navbar-default .navbar-nav > .open > a,
4550 .navbar-default .navbar-nav > .open > a:hover,
4551 .navbar-default .navbar-nav > .open > a:focus {
4552 color: #555;
4553 background-color: #e7e7e7;
4554 }
4555 @media (max-width: 767px) {
4556 .navbar-default .navbar-nav .open .dropdown-menu > li > a {
4557 color: #777;
4558 }
4559 .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
4560 .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
4561 color: #333;
4562 background-color: transparent;
4563 }
4564 .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
4565 .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
4566 .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
4567 color: #555;
4568 background-color: #e7e7e7;
4569 }
4570 .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
4571 .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
4572 .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
4573 color: #ccc;
4574 background-color: transparent;
4575 }
4576 }
4577 .navbar-default .navbar-link {
4578 color: #777;
4579 }
4580 .navbar-default .navbar-link:hover {
4581 color: #333;
4582 }
4583 .navbar-default .btn-link {
4584 color: #777;
4585 }
4586 .navbar-default .btn-link:hover,
4587 .navbar-default .btn-link:focus {
4588 color: #333;
4589 }
4590 .navbar-default .btn-link[disabled]:hover,
4591 fieldset[disabled] .navbar-default .btn-link:hover,
4592 .navbar-default .btn-link[disabled]:focus,
4593 fieldset[disabled] .navbar-default .btn-link:focus {
4594 color: #ccc;
4595 }
4596 .navbar-inverse {
4597 background-color: #222;
4598 border-color: #080808;
4599 }
4600 .navbar-inverse .navbar-brand {
4601 color: #9d9d9d;
4602 }
4603 .navbar-inverse .navbar-brand:hover,
4604 .navbar-inverse .navbar-brand:focus {
4605 color: #fff;
4606 background-color: transparent;
4607 }
4608 .navbar-inverse .navbar-text {
4609 color: #9d9d9d;
4610 }
4611 .navbar-inverse .navbar-nav > li > a {
4612 color: #9d9d9d;
4613 }
4614 .navbar-inverse .navbar-nav > li > a:hover,
4615 .navbar-inverse .navbar-nav > li > a:focus {
4616 color: #fff;
4617 background-color: transparent;
4618 }
4619 .navbar-inverse .navbar-nav > .active > a,
4620 .navbar-inverse .navbar-nav > .active > a:hover,
4621 .navbar-inverse .navbar-nav > .active > a:focus {
4622 color: #fff;
4623 background-color: #080808;
4624 }
4625 .navbar-inverse .navbar-nav > .disabled > a,
4626 .navbar-inverse .navbar-nav > .disabled > a:hover,
4627 .navbar-inverse .navbar-nav > .disabled > a:focus {
4628 color: #444;
4629 background-color: transparent;
4630 }
4631 .navbar-inverse .navbar-toggle {
4632 border-color: #333;
4633 }
4634 .navbar-inverse .navbar-toggle:hover,
4635 .navbar-inverse .navbar-toggle:focus {
4636 background-color: #333;
4637 }
4638 .navbar-inverse .navbar-toggle .icon-bar {
4639 background-color: #fff;
4640 }
4641 .navbar-inverse .navbar-collapse,
4642 .navbar-inverse .navbar-form {
4643 border-color: #101010;
4644 }
4645 .navbar-inverse .navbar-nav > .open > a,
4646 .navbar-inverse .navbar-nav > .open > a:hover,
4647 .navbar-inverse .navbar-nav > .open > a:focus {
4648 color: #fff;
4649 background-color: #080808;
4650 }
4651 @media (max-width: 767px) {
4652 .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
4653 border-color: #080808;
4654 }
4655 .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
4656 background-color: #080808;
4657 }
4658 .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
4659 color: #9d9d9d;
4660 }
4661 .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
4662 .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
4663 color: #fff;
4664 background-color: transparent;
4665 }
4666 .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
4667 .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
4668 .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
4669 color: #fff;
4670 background-color: #080808;
4671 }
4672 .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
4673 .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
4674 .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
4675 color: #444;
4676 background-color: transparent;
4677 }
4678 }
4679 .navbar-inverse .navbar-link {
4680 color: #9d9d9d;
4681 }
4682 .navbar-inverse .navbar-link:hover {
4683 color: #fff;
4684 }
4685 .navbar-inverse .btn-link {
4686 color: #9d9d9d;
4687 }
4688 .navbar-inverse .btn-link:hover,
4689 .navbar-inverse .btn-link:focus {
4690 color: #fff;
4691 }
4692 .navbar-inverse .btn-link[disabled]:hover,
4693 fieldset[disabled] .navbar-inverse .btn-link:hover,
4694 .navbar-inverse .btn-link[disabled]:focus,
4695 fieldset[disabled] .navbar-inverse .btn-link:focus {
4696 color: #444;
4697 }
4698 .breadcrumb {
4699 padding: 8px 15px;
4700 margin-bottom: 20px;
4701 list-style: none;
4702 background-color: #f5f5f5;
4703 border-radius: 4px;
4704 }
4705 .breadcrumb > li {
4706 display: inline-block;
4707 }
4708 .breadcrumb > li + li:before {
4709 padding: 0 5px;
4710 color: #ccc;
4711 content: "/\00a0";
4712 }
4713 .breadcrumb > .active {
4714 color: #777;
4715 }
4716 .pagination {
4717 display: inline-block;
4718 padding-left: 0;
4719 margin: 20px 0;
4720 border-radius: 4px;
4721 }
4722 .pagination > li {
4723 display: inline;
4724 }
4725 .pagination > li > a,
4726 .pagination > li > span {
4727 position: relative;
4728 float: left;
4729 padding: 6px 12px;
4730 margin-left: -1px;
4731 line-height: 1.42857143;
4732 color: #337ab7;
4733 text-decoration: none;
4734 background-color: #fff;
4735 border: 1px solid #ddd;
4736 }
4737 .pagination > li:first-child > a,
4738 .pagination > li:first-child > span {
4739 margin-left: 0;
4740 border-top-left-radius: 4px;
4741 border-bottom-left-radius: 4px;
4742 }
4743 .pagination > li:last-child > a,
4744 .pagination > li:last-child > span {
4745 border-top-right-radius: 4px;
4746 border-bottom-right-radius: 4px;
4747 }
4748 .pagination > li > a:hover,
4749 .pagination > li > span:hover,
4750 .pagination > li > a:focus,
4751 .pagination > li > span:focus {
4752 z-index: 2;
4753 color: #23527c;
4754 background-color: #eee;
4755 border-color: #ddd;
4756 }
4757 .pagination > .active > a,
4758 .pagination > .active > span,
4759 .pagination > .active > a:hover,
4760 .pagination > .active > span:hover,
4761 .pagination > .active > a:focus,
4762 .pagination > .active > span:focus {
4763 z-index: 3;
4764 color: #fff;
4765 cursor: default;
4766 background-color: #337ab7;
4767 border-color: #337ab7;
4768 }
4769 .pagination > .disabled > span,
4770 .pagination > .disabled > span:hover,
4771 .pagination > .disabled > span:focus,
4772 .pagination > .disabled > a,
4773 .pagination > .disabled > a:hover,
4774 .pagination > .disabled > a:focus {
4775 color: #777;
4776 cursor: not-allowed;
4777 background-color: #fff;
4778 border-color: #ddd;
4779 }
4780 .pagination-lg > li > a,
4781 .pagination-lg > li > span {
4782 padding: 10px 16px;
4783 font-size: 18px;
4784 line-height: 1.3333333;
4785 }
4786 .pagination-lg > li:first-child > a,
4787 .pagination-lg > li:first-child > span {
4788 border-top-left-radius: 6px;
4789 border-bottom-left-radius: 6px;
4790 }
4791 .pagination-lg > li:last-child > a,
4792 .pagination-lg > li:last-child > span {
4793 border-top-right-radius: 6px;
4794 border-bottom-right-radius: 6px;
4795 }
4796 .pagination-sm > li > a,
4797 .pagination-sm > li > span {
4798 padding: 5px 10px;
4799 font-size: 12px;
4800 line-height: 1.5;
4801 }
4802 .pagination-sm > li:first-child > a,
4803 .pagination-sm > li:first-child > span {
4804 border-top-left-radius: 3px;
4805 border-bottom-left-radius: 3px;
4806 }
4807 .pagination-sm > li:last-child > a,
4808 .pagination-sm > li:last-child > span {
4809 border-top-right-radius: 3px;
4810 border-bottom-right-radius: 3px;
4811 }
4812 .pager {
4813 padding-left: 0;
4814 margin: 20px 0;
4815 text-align: center;
4816 list-style: none;
4817 }
4818 .pager li {
4819 display: inline;
4820 }
4821 .pager li > a,
4822 .pager li > span {
4823 display: inline-block;
4824 padding: 5px 14px;
4825 background-color: #fff;
4826 border: 1px solid #ddd;
4827 border-radius: 15px;
4828 }
4829 .pager li > a:hover,
4830 .pager li > a:focus {
4831 text-decoration: none;
4832 background-color: #eee;
4833 }
4834 .pager .next > a,
4835 .pager .next > span {
4836 float: right;
4837 }
4838 .pager .previous > a,
4839 .pager .previous > span {
4840 float: left;
4841 }
4842 .pager .disabled > a,
4843 .pager .disabled > a:hover,
4844 .pager .disabled > a:focus,
4845 .pager .disabled > span {
4846 color: #777;
4847 cursor: not-allowed;
4848 background-color: #fff;
4849 }
4850 .label {
4851 display: inline;
4852 padding: .2em .6em .3em;
4853 font-size: 75%;
4854 font-weight: bold;
4855 line-height: 1;
4856 color: #fff;
4857 text-align: center;
4858 white-space: nowrap;
4859 vertical-align: baseline;
4860 border-radius: .25em;
4861 }
4862 a.label:hover,
4863 a.label:focus {
4864 color: #fff;
4865 text-decoration: none;
4866 cursor: pointer;
4867 }
4868 .label:empty {
4869 display: none;
4870 }
4871 .btn .label {
4872 position: relative;
4873 top: -1px;
4874 }
4875 .label-default {
4876 background-color: #777;
4877 }
4878 .label-default[href]:hover,
4879 .label-default[href]:focus {
4880 background-color: #5e5e5e;
4881 }
4882 .label-primary {
4883 background-color: #337ab7;
4884 }
4885 .label-primary[href]:hover,
4886 .label-primary[href]:focus {
4887 background-color: #286090;
4888 }
4889 .label-success {
4890 background-color: #5cb85c;
4891 }
4892 .label-success[href]:hover,
4893 .label-success[href]:focus {
4894 background-color: #449d44;
4895 }
4896 .label-info {
4897 background-color: #5bc0de;
4898 }
4899 .label-info[href]:hover,
4900 .label-info[href]:focus {
4901 background-color: #31b0d5;
4902 }
4903 .label-warning {
4904 background-color: #f0ad4e;
4905 }
4906 .label-warning[href]:hover,
4907 .label-warning[href]:focus {
4908 background-color: #ec971f;
4909 }
4910 .label-danger {
4911 background-color: #d9534f;
4912 }
4913 .label-danger[href]:hover,
4914 .label-danger[href]:focus {
4915 background-color: #c9302c;
4916 }
4917 .badge {
4918 display: inline-block;
4919 min-width: 10px;
4920 padding: 3px 7px;
4921 font-size: 12px;
4922 font-weight: bold;
4923 line-height: 1;
4924 color: #fff;
4925 text-align: center;
4926 white-space: nowrap;
4927 vertical-align: middle;
4928 background-color: #777;
4929 border-radius: 10px;
4930 }
4931 .badge:empty {
4932 display: none;
4933 }
4934 .btn .badge {
4935 position: relative;
4936 top: -1px;
4937 }
4938 .btn-xs .badge,
4939 .btn-group-xs > .btn .badge {
4940 top: 0;
4941 padding: 1px 5px;
4942 }
4943 a.badge:hover,
4944 a.badge:focus {
4945 color: #fff;
4946 text-decoration: none;
4947 cursor: pointer;
4948 }
4949 .list-group-item.active > .badge,
4950 .nav-pills > .active > a > .badge {
4951 color: #337ab7;
4952 background-color: #fff;
4953 }
4954 .list-group-item > .badge {
4955 float: right;
4956 }
4957 .list-group-item > .badge + .badge {
4958 margin-right: 5px;
4959 }
4960 .nav-pills > li > a > .badge {
4961 margin-left: 3px;
4962 }
4963 .jumbotron {
4964 padding-top: 30px;
4965 padding-bottom: 30px;
4966 margin-bottom: 30px;
4967 color: inherit;
4968 background-color: #eee;
4969 }
4970 .jumbotron h1,
4971 .jumbotron .h1 {
4972 color: inherit;
4973 }
4974 .jumbotron p {
4975 margin-bottom: 15px;
4976 font-size: 21px;
4977 font-weight: 200;
4978 }
4979 .jumbotron > hr {
4980 border-top-color: #d5d5d5;
4981 }
4982 .container .jumbotron,
4983 .container-fluid .jumbotron {
4984 padding-right: 15px;
4985 padding-left: 15px;
4986 border-radius: 6px;
4987 }
4988 .jumbotron .container {
4989 max-width: 100%;
4990 }
4991 @media screen and (min-width: 768px) {
4992 .jumbotron {
4993 padding-top: 48px;
4994 padding-bottom: 48px;
4995 }
4996 .container .jumbotron,
4997 .container-fluid .jumbotron {
4998 padding-right: 60px;
4999 padding-left: 60px;
5000 }
5001 .jumbotron h1,
5002 .jumbotron .h1 {
5003 font-size: 63px;
5004 }
5005 }
5006 .thumbnail {
5007 display: block;
5008 padding: 4px;
5009 margin-bottom: 20px;
5010 line-height: 1.42857143;
5011 background-color: #fff;
5012 border: 1px solid #ddd;
5013 border-radius: 4px;
5014 -webkit-transition: border .2s ease-in-out;
5015 -o-transition: border .2s ease-in-out;
5016 transition: border .2s ease-in-out;
5017 }
5018 .thumbnail > img,
5019 .thumbnail a > img {
5020 margin-right: auto;
5021 margin-left: auto;
5022 }
5023 a.thumbnail:hover,
5024 a.thumbnail:focus,
5025 a.thumbnail.active {
5026 border-color: #337ab7;
5027 }
5028 .thumbnail .caption {
5029 padding: 9px;
5030 color: #333;
5031 }
5032 .alert {
5033 padding: 15px;
5034 margin-bottom: 20px;
5035 border: 1px solid transparent;
5036 border-radius: 4px;
5037 }
5038 .alert h4 {
5039 margin-top: 0;
5040 color: inherit;
5041 }
5042 .alert .alert-link {
5043 font-weight: bold;
5044 }
5045 .alert > p,
5046 .alert > ul {
5047 margin-bottom: 0;
5048 }
5049 .alert > p + p {
5050 margin-top: 5px;
5051 }
5052 .alert-dismissable,
5053 .alert-dismissible {
5054 padding-right: 35px;
5055 }
5056 .alert-dismissable .close,
5057 .alert-dismissible .close {
5058 position: relative;
5059 top: -2px;
5060 right: -21px;
5061 color: inherit;
5062 }
5063 .alert-success {
5064 color: #3c763d;
5065 background-color: #dff0d8;
5066 border-color: #d6e9c6;
5067 }
5068 .alert-success hr {
5069 border-top-color: #c9e2b3;
5070 }
5071 .alert-success .alert-link {
5072 color: #2b542c;
5073 }
5074 .alert-info {
5075 color: #31708f;
5076 background-color: #d9edf7;
5077 border-color: #bce8f1;
5078 }
5079 .alert-info hr {
5080 border-top-color: #a6e1ec;
5081 }
5082 .alert-info .alert-link {
5083 color: #245269;
5084 }
5085 .alert-warning {
5086 color: #8a6d3b;
5087 background-color: #fcf8e3;
5088 border-color: #faebcc;
5089 }
5090 .alert-warning hr {
5091 border-top-color: #f7e1b5;
5092 }
5093 .alert-warning .alert-link {
5094 color: #66512c;
5095 }
5096 .alert-danger {
5097 color: #a94442;
5098 background-color: #f2dede;
5099 border-color: #ebccd1;
5100 }
5101 .alert-danger hr {
5102 border-top-color: #e4b9c0;
5103 }
5104 .alert-danger .alert-link {
5105 color: #843534;
5106 }
5107 @-webkit-keyframes progress-bar-stripes {
5108 from {
5109 background-position: 40px 0;
5110 }
5111 to {
5112 background-position: 0 0;
5113 }
5114 }
5115 @-o-keyframes progress-bar-stripes {
5116 from {
5117 background-position: 40px 0;
5118 }
5119 to {
5120 background-position: 0 0;
5121 }
5122 }
5123 @keyframes progress-bar-stripes {
5124 from {
5125 background-position: 40px 0;
5126 }
5127 to {
5128 background-position: 0 0;
5129 }
5130 }
5131 .progress {
5132 height: 20px;
5133 margin-bottom: 20px;
5134 overflow: hidden;
5135 background-color: #f5f5f5;
5136 border-radius: 4px;
5137 -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
5138 box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
5139 }
5140 .progress-bar {
5141 float: left;
5142 width: 0;
5143 height: 100%;
5144 font-size: 12px;
5145 line-height: 20px;
5146 color: #fff;
5147 text-align: center;
5148 background-color: #337ab7;
5149 -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
5150 box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
5151 -webkit-transition: width .6s ease;
5152 -o-transition: width .6s ease;
5153 transition: width .6s ease;
5154 }
5155 .progress-striped .progress-bar,
5156 .progress-bar-striped {
5157 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);
5158 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);
5159 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);
5160 -webkit-background-size: 40px 40px;
5161 background-size: 40px 40px;
5162 }
5163 .progress.active .progress-bar,
5164 .progress-bar.active {
5165 -webkit-animation: progress-bar-stripes 2s linear infinite;
5166 -o-animation: progress-bar-stripes 2s linear infinite;
5167 animation: progress-bar-stripes 2s linear infinite;
5168 }
5169 .progress-bar-success {
5170 background-color: #5cb85c;
5171 }
5172 .progress-striped .progress-bar-success {
5173 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);
5174 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);
5175 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);
5176 }
5177 .progress-bar-info {
5178 background-color: #5bc0de;
5179 }
5180 .progress-striped .progress-bar-info {
5181 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);
5182 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);
5183 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);
5184 }
5185 .progress-bar-warning {
5186 background-color: #f0ad4e;
5187 }
5188 .progress-striped .progress-bar-warning {
5189 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);
5190 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);
5191 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);
5192 }
5193 .progress-bar-danger {
5194 background-color: #d9534f;
5195 }
5196 .progress-striped .progress-bar-danger {
5197 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);
5198 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);
5199 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);
5200 }
5201 .media {
5202 margin-top: 15px;
5203 }
5204 .media:first-child {
5205 margin-top: 0;
5206 }
5207 .media,
5208 .media-body {
5209 overflow: hidden;
5210 zoom: 1;
5211 }
5212 .media-body {
5213 width: 10000px;
5214 }
5215 .media-object {
5216 display: block;
5217 }
5218 .media-object.img-thumbnail {
5219 max-width: none;
5220 }
5221 .media-right,
5222 .media > .pull-right {
5223 padding-left: 10px;
5224 }
5225 .media-left,
5226 .media > .pull-left {
5227 padding-right: 10px;
5228 }
5229 .media-left,
5230 .media-right,
5231 .media-body {
5232 display: table-cell;
5233 vertical-align: top;
5234 }
5235 .media-middle {
5236 vertical-align: middle;
5237 }
5238 .media-bottom {
5239 vertical-align: bottom;
5240 }
5241 .media-heading {
5242 margin-top: 0;
5243 margin-bottom: 5px;
5244 }
5245 .media-list {
5246 padding-left: 0;
5247 list-style: none;
5248 }
5249 .list-group {
5250 padding-left: 0;
5251 margin-bottom: 20px;
5252 }
5253 .list-group-item {
5254 position: relative;
5255 display: block;
5256 padding: 10px 15px;
5257 margin-bottom: -1px;
5258 background-color: #fff;
5259 border: 1px solid #ddd;
5260 }
5261 .list-group-item:first-child {
5262 border-top-left-radius: 4px;
5263 border-top-right-radius: 4px;
5264 }
5265 .list-group-item:last-child {
5266 margin-bottom: 0;
5267 border-bottom-right-radius: 4px;
5268 border-bottom-left-radius: 4px;
5269 }
5270 a.list-group-item,
5271 button.list-group-item {
5272 color: #555;
5273 }
5274 a.list-group-item .list-group-item-heading,
5275 button.list-group-item .list-group-item-heading {
5276 color: #333;
5277 }
5278 a.list-group-item:hover,
5279 button.list-group-item:hover,
5280 a.list-group-item:focus,
5281 button.list-group-item:focus {
5282 color: #555;
5283 text-decoration: none;
5284 background-color: #f5f5f5;
5285 }
5286 button.list-group-item {
5287 width: 100%;
5288 text-align: left;
5289 }
5290 .list-group-item.disabled,
5291 .list-group-item.disabled:hover,
5292 .list-group-item.disabled:focus {
5293 color: #777;
5294 cursor: not-allowed;
5295 background-color: #eee;
5296 }
5297 .list-group-item.disabled .list-group-item-heading,
5298 .list-group-item.disabled:hover .list-group-item-heading,
5299 .list-group-item.disabled:focus .list-group-item-heading {
5300 color: inherit;
5301 }
5302 .list-group-item.disabled .list-group-item-text,
5303 .list-group-item.disabled:hover .list-group-item-text,
5304 .list-group-item.disabled:focus .list-group-item-text {
5305 color: #777;
5306 }
5307 .list-group-item.active,
5308 .list-group-item.active:hover,
5309 .list-group-item.active:focus {
5310 z-index: 2;
5311 color: #fff;
5312 background-color: #337ab7;
5313 border-color: #337ab7;
5314 }
5315 .list-group-item.active .list-group-item-heading,
5316 .list-group-item.active:hover .list-group-item-heading,
5317 .list-group-item.active:focus .list-group-item-heading,
5318 .list-group-item.active .list-group-item-heading > small,
5319 .list-group-item.active:hover .list-group-item-heading > small,
5320 .list-group-item.active:focus .list-group-item-heading > small,
5321 .list-group-item.active .list-group-item-heading > .small,
5322 .list-group-item.active:hover .list-group-item-heading > .small,
5323 .list-group-item.active:focus .list-group-item-heading > .small {
5324 color: inherit;
5325 }
5326 .list-group-item.active .list-group-item-text,
5327 .list-group-item.active:hover .list-group-item-text,
5328 .list-group-item.active:focus .list-group-item-text {
5329 color: #c7ddef;
5330 }
5331 .list-group-item-success {
5332 color: #3c763d;
5333 background-color: #dff0d8;
5334 }
5335 a.list-group-item-success,
5336 button.list-group-item-success {
5337 color: #3c763d;
5338 }
5339 a.list-group-item-success .list-group-item-heading,
5340 button.list-group-item-success .list-group-item-heading {
5341 color: inherit;
5342 }
5343 a.list-group-item-success:hover,
5344 button.list-group-item-success:hover,
5345 a.list-group-item-success:focus,
5346 button.list-group-item-success:focus {
5347 color: #3c763d;
5348 background-color: #d0e9c6;
5349 }
5350 a.list-group-item-success.active,
5351 button.list-group-item-success.active,
5352 a.list-group-item-success.active:hover,
5353 button.list-group-item-success.active:hover,
5354 a.list-group-item-success.active:focus,
5355 button.list-group-item-success.active:focus {
5356 color: #fff;
5357 background-color: #3c763d;
5358 border-color: #3c763d;
5359 }
5360 .list-group-item-info {
5361 color: #31708f;
5362 background-color: #d9edf7;
5363 }
5364 a.list-group-item-info,
5365 button.list-group-item-info {
5366 color: #31708f;
5367 }
5368 a.list-group-item-info .list-group-item-heading,
5369 button.list-group-item-info .list-group-item-heading {
5370 color: inherit;
5371 }
5372 a.list-group-item-info:hover,
5373 button.list-group-item-info:hover,
5374 a.list-group-item-info:focus,
5375 button.list-group-item-info:focus {
5376 color: #31708f;
5377 background-color: #c4e3f3;
5378 }
5379 a.list-group-item-info.active,
5380 button.list-group-item-info.active,
5381 a.list-group-item-info.active:hover,
5382 button.list-group-item-info.active:hover,
5383 a.list-group-item-info.active:focus,
5384 button.list-group-item-info.active:focus {
5385 color: #fff;
5386 background-color: #31708f;
5387 border-color: #31708f;
5388 }
5389 .list-group-item-warning {
5390 color: #8a6d3b;
5391 background-color: #fcf8e3;
5392 }
5393 a.list-group-item-warning,
5394 button.list-group-item-warning {
5395 color: #8a6d3b;
5396 }
5397 a.list-group-item-warning .list-group-item-heading,
5398 button.list-group-item-warning .list-group-item-heading {
5399 color: inherit;
5400 }
5401 a.list-group-item-warning:hover,
5402 button.list-group-item-warning:hover,
5403 a.list-group-item-warning:focus,
5404 button.list-group-item-warning:focus {
5405 color: #8a6d3b;
5406 background-color: #faf2cc;
5407 }
5408 a.list-group-item-warning.active,
5409 button.list-group-item-warning.active,
5410 a.list-group-item-warning.active:hover,
5411 button.list-group-item-warning.active:hover,
5412 a.list-group-item-warning.active:focus,
5413 button.list-group-item-warning.active:focus {
5414 color: #fff;
5415 background-color: #8a6d3b;
5416 border-color: #8a6d3b;
5417 }
5418 .list-group-item-danger {
5419 color: #a94442;
5420 background-color: #f2dede;
5421 }
5422 a.list-group-item-danger,
5423 button.list-group-item-danger {
5424 color: #a94442;
5425 }
5426 a.list-group-item-danger .list-group-item-heading,
5427 button.list-group-item-danger .list-group-item-heading {
5428 color: inherit;
5429 }
5430 a.list-group-item-danger:hover,
5431 button.list-group-item-danger:hover,
5432 a.list-group-item-danger:focus,
5433 button.list-group-item-danger:focus {
5434 color: #a94442;
5435 background-color: #ebcccc;
5436 }
5437 a.list-group-item-danger.active,
5438 button.list-group-item-danger.active,
5439 a.list-group-item-danger.active:hover,
5440 button.list-group-item-danger.active:hover,
5441 a.list-group-item-danger.active:focus,
5442 button.list-group-item-danger.active:focus {
5443 color: #fff;
5444 background-color: #a94442;
5445 border-color: #a94442;
5446 }
5447 .list-group-item-heading {
5448 margin-top: 0;
5449 margin-bottom: 5px;
5450 }
5451 .list-group-item-text {
5452 margin-bottom: 0;
5453 line-height: 1.3;
5454 }
5455 .panel {
5456 margin-bottom: 20px;
5457 background-color: #fff;
5458 border: 1px solid transparent;
5459 border-radius: 4px;
5460 -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
5461 box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
5462 }
5463 .panel-body {
5464 padding: 15px;
5465 }
5466 .panel-heading {
5467 padding: 10px 15px;
5468 border-bottom: 1px solid transparent;
5469 border-top-left-radius: 3px;
5470 border-top-right-radius: 3px;
5471 }
5472 .panel-heading > .dropdown .dropdown-toggle {
5473 color: inherit;
5474 }
5475 .panel-title {
5476 margin-top: 0;
5477 margin-bottom: 0;
5478 font-size: 16px;
5479 color: inherit;
5480 }
5481 .panel-title > a,
5482 .panel-title > small,
5483 .panel-title > .small,
5484 .panel-title > small > a,
5485 .panel-title > .small > a {
5486 color: inherit;
5487 }
5488 .panel-footer {
5489 padding: 10px 15px;
5490 background-color: #f5f5f5;
5491 border-top: 1px solid #ddd;
5492 border-bottom-right-radius: 3px;
5493 border-bottom-left-radius: 3px;
5494 }
5495 .panel > .list-group,
5496 .panel > .panel-collapse > .list-group {
5497 margin-bottom: 0;
5498 }
5499 .panel > .list-group .list-group-item,
5500 .panel > .panel-collapse > .list-group .list-group-item {
5501 border-width: 1px 0;
5502 border-radius: 0;
5503 }
5504 .panel > .list-group:first-child .list-group-item:first-child,
5505 .panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {
5506 border-top: 0;
5507 border-top-left-radius: 3px;
5508 border-top-right-radius: 3px;
5509 }
5510 .panel > .list-group:last-child .list-group-item:last-child,
5511 .panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {
5512 border-bottom: 0;
5513 border-bottom-right-radius: 3px;
5514 border-bottom-left-radius: 3px;
5515 }
5516 .panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {
5517 border-top-left-radius: 0;
5518 border-top-right-radius: 0;
5519 }
5520 .panel-heading + .list-group .list-group-item:first-child {
5521 border-top-width: 0;
5522 }
5523 .list-group + .panel-footer {
5524 border-top-width: 0;
5525 }
5526 .panel > .table,
5527 .panel > .table-responsive > .table,
5528 .panel > .panel-collapse > .table {
5529 margin-bottom: 0;
5530 }
5531 .panel > .table caption,
5532 .panel > .table-responsive > .table caption,
5533 .panel > .panel-collapse > .table caption {
5534 padding-right: 15px;
5535 padding-left: 15px;
5536 }
5537 .panel > .table:first-child,
5538 .panel > .table-responsive:first-child > .table:first-child {
5539 border-top-left-radius: 3px;
5540 border-top-right-radius: 3px;
5541 }
5542 .panel > .table:first-child > thead:first-child > tr:first-child,
5543 .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,
5544 .panel > .table:first-child > tbody:first-child > tr:first-child,
5545 .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {
5546 border-top-left-radius: 3px;
5547 border-top-right-radius: 3px;
5548 }
5549 .panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
5550 .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
5551 .panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
5552 .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
5553 .panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
5554 .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
5555 .panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
5556 .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
5557 border-top-left-radius: 3px;
5558 }
5559 .panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
5560 .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
5561 .panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
5562 .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
5563 .panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
5564 .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
5565 .panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
5566 .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
5567 border-top-right-radius: 3px;
5568 }
5569 .panel > .table:last-child,
5570 .panel > .table-responsive:last-child > .table:last-child {
5571 border-bottom-right-radius: 3px;
5572 border-bottom-left-radius: 3px;
5573 }
5574 .panel > .table:last-child > tbody:last-child > tr:last-child,
5575 .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,
5576 .panel > .table:last-child > tfoot:last-child > tr:last-child,
5577 .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {
5578 border-bottom-right-radius: 3px;
5579 border-bottom-left-radius: 3px;
5580 }
5581 .panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
5582 .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
5583 .panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
5584 .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
5585 .panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
5586 .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
5587 .panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
5588 .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
5589 border-bottom-left-radius: 3px;
5590 }
5591 .panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
5592 .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
5593 .panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
5594 .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
5595 .panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
5596 .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
5597 .panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
5598 .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
5599 border-bottom-right-radius: 3px;
5600 }
5601 .panel > .panel-body + .table,
5602 .panel > .panel-body + .table-responsive,
5603 .panel > .table + .panel-body,
5604 .panel > .table-responsive + .panel-body {
5605 border-top: 1px solid #ddd;
5606 }
5607 .panel > .table > tbody:first-child > tr:first-child th,
5608 .panel > .table > tbody:first-child > tr:first-child td {
5609 border-top: 0;
5610 }
5611 .panel > .table-bordered,
5612 .panel > .table-responsive > .table-bordered {
5613 border: 0;
5614 }
5615 .panel > .table-bordered > thead > tr > th:first-child,
5616 .panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
5617 .panel > .table-bordered > tbody > tr > th:first-child,
5618 .panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
5619 .panel > .table-bordered > tfoot > tr > th:first-child,
5620 .panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
5621 .panel > .table-bordered > thead > tr > td:first-child,
5622 .panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
5623 .panel > .table-bordered > tbody > tr > td:first-child,
5624 .panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
5625 .panel > .table-bordered > tfoot > tr > td:first-child,
5626 .panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
5627 border-left: 0;
5628 }
5629 .panel > .table-bordered > thead > tr > th:last-child,
5630 .panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
5631 .panel > .table-bordered > tbody > tr > th:last-child,
5632 .panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
5633 .panel > .table-bordered > tfoot > tr > th:last-child,
5634 .panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
5635 .panel > .table-bordered > thead > tr > td:last-child,
5636 .panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
5637 .panel > .table-bordered > tbody > tr > td:last-child,
5638 .panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
5639 .panel > .table-bordered > tfoot > tr > td:last-child,
5640 .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
5641 border-right: 0;
5642 }
5643 .panel > .table-bordered > thead > tr:first-child > td,
5644 .panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
5645 .panel > .table-bordered > tbody > tr:first-child > td,
5646 .panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
5647 .panel > .table-bordered > thead > tr:first-child > th,
5648 .panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
5649 .panel > .table-bordered > tbody > tr:first-child > th,
5650 .panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
5651 border-bottom: 0;
5652 }
5653 .panel > .table-bordered > tbody > tr:last-child > td,
5654 .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
5655 .panel > .table-bordered > tfoot > tr:last-child > td,
5656 .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
5657 .panel > .table-bordered > tbody > tr:last-child > th,
5658 .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
5659 .panel > .table-bordered > tfoot > tr:last-child > th,
5660 .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
5661 border-bottom: 0;
5662 }
5663 .panel > .table-responsive {
5664 margin-bottom: 0;
5665 border: 0;
5666 }
5667 .panel-group {
5668 margin-bottom: 20px;
5669 }
5670 .panel-group .panel {
5671 margin-bottom: 0;
5672 border-radius: 4px;
5673 }
5674 .panel-group .panel + .panel {
5675 margin-top: 5px;
5676 }
5677 .panel-group .panel-heading {
5678 border-bottom: 0;
5679 }
5680 .panel-group .panel-heading + .panel-collapse > .panel-body,
5681 .panel-group .panel-heading + .panel-collapse > .list-group {
5682 border-top: 1px solid #ddd;
5683 }
5684 .panel-group .panel-footer {
5685 border-top: 0;
5686 }
5687 .panel-group .panel-footer + .panel-collapse .panel-body {
5688 border-bottom: 1px solid #ddd;
5689 }
5690 .panel-default {
5691 border-color: #ddd;
5692 }
5693 .panel-default > .panel-heading {
5694 color: #333;
5695 background-color: #f5f5f5;
5696 border-color: #ddd;
5697 }
5698 .panel-default > .panel-heading + .panel-collapse > .panel-body {
5699 border-top-color: #ddd;
5700 }
5701 .panel-default > .panel-heading .badge {
5702 color: #f5f5f5;
5703 background-color: #333;
5704 }
5705 .panel-default > .panel-footer + .panel-collapse > .panel-body {
5706 border-bottom-color: #ddd;
5707 }
5708 .panel-primary {
5709 border-color: #337ab7;
5710 }
5711 .panel-primary > .panel-heading {
5712 color: #fff;
5713 background-color: #337ab7;
5714 border-color: #337ab7;
5715 }
5716 .panel-primary > .panel-heading + .panel-collapse > .panel-body {
5717 border-top-color: #337ab7;
5718 }
5719 .panel-primary > .panel-heading .badge {
5720 color: #337ab7;
5721 background-color: #fff;
5722 }
5723 .panel-primary > .panel-footer + .panel-collapse > .panel-body {
5724 border-bottom-color: #337ab7;
5725 }
5726 .panel-success {
5727 border-color: #d6e9c6;
5728 }
5729 .panel-success > .panel-heading {
5730 color: #3c763d;
5731 background-color: #dff0d8;
5732 border-color: #d6e9c6;
5733 }
5734 .panel-success > .panel-heading + .panel-collapse > .panel-body {
5735 border-top-color: #d6e9c6;
5736 }
5737 .panel-success > .panel-heading .badge {
5738 color: #dff0d8;
5739 background-color: #3c763d;
5740 }
5741 .panel-success > .panel-footer + .panel-collapse > .panel-body {
5742 border-bottom-color: #d6e9c6;
5743 }
5744 .panel-info {
5745 border-color: #bce8f1;
5746 }
5747 .panel-info > .panel-heading {
5748 color: #31708f;
5749 background-color: #d9edf7;
5750 border-color: #bce8f1;
5751 }
5752 .panel-info > .panel-heading + .panel-collapse > .panel-body {
5753 border-top-color: #bce8f1;
5754 }
5755 .panel-info > .panel-heading .badge {
5756 color: #d9edf7;
5757 background-color: #31708f;
5758 }
5759 .panel-info > .panel-footer + .panel-collapse > .panel-body {
5760 border-bottom-color: #bce8f1;
5761 }
5762 .panel-warning {
5763 border-color: #faebcc;
5764 }
5765 .panel-warning > .panel-heading {
5766 color: #8a6d3b;
5767 background-color: #fcf8e3;
5768 border-color: #faebcc;
5769 }
5770 .panel-warning > .panel-heading + .panel-collapse > .panel-body {
5771 border-top-color: #faebcc;
5772 }
5773 .panel-warning > .panel-heading .badge {
5774 color: #fcf8e3;
5775 background-color: #8a6d3b;
5776 }
5777 .panel-warning > .panel-footer + .panel-collapse > .panel-body {
5778 border-bottom-color: #faebcc;
5779 }
5780 .panel-danger {
5781 border-color: #ebccd1;
5782 }
5783 .panel-danger > .panel-heading {
5784 color: #a94442;
5785 background-color: #f2dede;
5786 border-color: #ebccd1;
5787 }
5788 .panel-danger > .panel-heading + .panel-collapse > .panel-body {
5789 border-top-color: #ebccd1;
5790 }
5791 .panel-danger > .panel-heading .badge {
5792 color: #f2dede;
5793 background-color: #a94442;
5794 }
5795 .panel-danger > .panel-footer + .panel-collapse > .panel-body {
5796 border-bottom-color: #ebccd1;
5797 }
5798 .embed-responsive {
5799 position: relative;
5800 display: block;
5801 height: 0;
5802 padding: 0;
5803 overflow: hidden;
5804 }
5805 .embed-responsive .embed-responsive-item,
5806 .embed-responsive iframe,
5807 .embed-responsive embed,
5808 .embed-responsive object,
5809 .embed-responsive video {
5810 position: absolute;
5811 top: 0;
5812 bottom: 0;
5813 left: 0;
5814 width: 100%;
5815 height: 100%;
5816 border: 0;
5817 }
5818 .embed-responsive-16by9 {
5819 padding-bottom: 56.25%;
5820 }
5821 .embed-responsive-4by3 {
5822 padding-bottom: 75%;
5823 }
5824 .well {
5825 min-height: 20px;
5826 padding: 19px;
5827 margin-bottom: 20px;
5828 background-color: #f5f5f5;
5829 border: 1px solid #e3e3e3;
5830 border-radius: 4px;
5831 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
5832 box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
5833 }
5834 .well blockquote {
5835 border-color: #ddd;
5836 border-color: rgba(0, 0, 0, .15);
5837 }
5838 .well-lg {
5839 padding: 24px;
5840 border-radius: 6px;
5841 }
5842 .well-sm {
5843 padding: 9px;
5844 border-radius: 3px;
5845 }
5846 .close {
5847 float: right;
5848 font-size: 21px;
5849 font-weight: bold;
5850 line-height: 1;
5851 color: #000;
5852 text-shadow: 0 1px 0 #fff;
5853 filter: alpha(opacity=20);
5854 opacity: .2;
5855 }
5856 .close:hover,
5857 .close:focus {
5858 color: #000;
5859 text-decoration: none;
5860 cursor: pointer;
5861 filter: alpha(opacity=50);
5862 opacity: .5;
5863 }
5864 button.close {
5865 -webkit-appearance: none;
5866 padding: 0;
5867 cursor: pointer;
5868 background: transparent;
5869 border: 0;
5870 }
5871 .modal-open {
5872 overflow: hidden;
5873 }
5874 .modal {
5875 position: fixed;
5876 top: 0;
5877 right: 0;
5878 bottom: 0;
5879 left: 0;
5880 z-index: 1050;
5881 display: none;
5882 overflow: hidden;
5883 -webkit-overflow-scrolling: touch;
5884 outline: 0;
5885 }
5886 .modal.fade .modal-dialog {
5887 -webkit-transition: -webkit-transform .3s ease-out;
5888 -o-transition: -o-transform .3s ease-out;
5889 transition: transform .3s ease-out;
5890 -webkit-transform: translate(0, -25%);
5891 -ms-transform: translate(0, -25%);
5892 -o-transform: translate(0, -25%);
5893 transform: translate(0, -25%);
5894 }
5895 .modal.in .modal-dialog {
5896 -webkit-transform: translate(0, 0);
5897 -ms-transform: translate(0, 0);
5898 -o-transform: translate(0, 0);
5899 transform: translate(0, 0);
5900 }
5901 .modal-open .modal {
5902 overflow-x: hidden;
5903 overflow-y: auto;
5904 }
5905 .modal-dialog {
5906 position: relative;
5907 width: auto;
5908 margin: 10px;
5909 }
5910 .modal-content {
5911 position: relative;
5912 background-color: #fff;
5913 -webkit-background-clip: padding-box;
5914 background-clip: padding-box;
5915 border: 1px solid #999;
5916 border: 1px solid rgba(0, 0, 0, .2);
5917 border-radius: 6px;
5918 outline: 0;
5919 -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
5920 box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
5921 }
5922 .modal-backdrop {
5923 position: fixed;
5924 top: 0;
5925 right: 0;
5926 bottom: 0;
5927 left: 0;
5928 z-index: 1040;
5929 background-color: #000;
5930 }
5931 .modal-backdrop.fade {
5932 filter: alpha(opacity=0);
5933 opacity: 0;
5934 }
5935 .modal-backdrop.in {
5936 filter: alpha(opacity=50);
5937 opacity: .5;
5938 }
5939 .modal-header {
5940 padding: 15px;
5941 border-bottom: 1px solid #e5e5e5;
5942 }
5943 .modal-header .close {
5944 margin-top: -2px;
5945 }
5946 .modal-title {
5947 margin: 0;
5948 line-height: 1.42857143;
5949 }
5950 .modal-body {
5951 position: relative;
5952 padding: 15px;
5953 }
5954 .modal-footer {
5955 padding: 15px;
5956 text-align: right;
5957 border-top: 1px solid #e5e5e5;
5958 }
5959 .modal-footer .btn + .btn {
5960 margin-bottom: 0;
5961 margin-left: 5px;
5962 }
5963 .modal-footer .btn-group .btn + .btn {
5964 margin-left: -1px;
5965 }
5966 .modal-footer .btn-block + .btn-block {
5967 margin-left: 0;
5968 }
5969 .modal-scrollbar-measure {
5970 position: absolute;
5971 top: -9999px;
5972 width: 50px;
5973 height: 50px;
5974 overflow: scroll;
5975 }
5976 @media (min-width: 768px) {
5977 .modal-dialog {
5978 width: 600px;
5979 margin: 30px auto;
5980 }
5981 .modal-content {
5982 -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
5983 box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
5984 }
5985 .modal-sm {
5986 width: 300px;
5987 }
5988 }
5989 @media (min-width: 992px) {
5990 .modal-lg {
5991 width: 900px;
5992 }
5993 }
5994 .tooltip {
5995 position: absolute;
5996 z-index: 1070;
5997 display: block;
5998 font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
5999 font-size: 12px;
6000 font-style: normal;
6001 font-weight: normal;
6002 line-height: 1.42857143;
6003 text-align: left;
6004 text-align: start;
6005 text-decoration: none;
6006 text-shadow: none;
6007 text-transform: none;
6008 letter-spacing: normal;
6009 word-break: normal;
6010 word-spacing: normal;
6011 word-wrap: normal;
6012 white-space: normal;
6013 filter: alpha(opacity=0);
6014 opacity: 0;
6015
6016 line-break: auto;
6017 }
6018 .tooltip.in {
6019 filter: alpha(opacity=90);
6020 opacity: .9;
6021 }
6022 .tooltip.top {
6023 padding: 5px 0;
6024 margin-top: -3px;
6025 }
6026 .tooltip.right {
6027 padding: 0 5px;
6028 margin-left: 3px;
6029 }
6030 .tooltip.bottom {
6031 padding: 5px 0;
6032 margin-top: 3px;
6033 }
6034 .tooltip.left {
6035 padding: 0 5px;
6036 margin-left: -3px;
6037 }
6038 .tooltip-inner {
6039 max-width: 200px;
6040 padding: 3px 8px;
6041 color: #fff;
6042 text-align: center;
6043 background-color: #000;
6044 border-radius: 4px;
6045 }
6046 .tooltip-arrow {
6047 position: absolute;
6048 width: 0;
6049 height: 0;
6050 border-color: transparent;
6051 border-style: solid;
6052 }
6053 .tooltip.top .tooltip-arrow {
6054 bottom: 0;
6055 left: 50%;
6056 margin-left: -5px;
6057 border-width: 5px 5px 0;
6058 border-top-color: #000;
6059 }
6060 .tooltip.top-left .tooltip-arrow {
6061 right: 5px;
6062 bottom: 0;
6063 margin-bottom: -5px;
6064 border-width: 5px 5px 0;
6065 border-top-color: #000;
6066 }
6067 .tooltip.top-right .tooltip-arrow {
6068 bottom: 0;
6069 left: 5px;
6070 margin-bottom: -5px;
6071 border-width: 5px 5px 0;
6072 border-top-color: #000;
6073 }
6074 .tooltip.right .tooltip-arrow {
6075 top: 50%;
6076 left: 0;
6077 margin-top: -5px;
6078 border-width: 5px 5px 5px 0;
6079 border-right-color: #000;
6080 }
6081 .tooltip.left .tooltip-arrow {
6082 top: 50%;
6083 right: 0;
6084 margin-top: -5px;
6085 border-width: 5px 0 5px 5px;
6086 border-left-color: #000;
6087 }
6088 .tooltip.bottom .tooltip-arrow {
6089 top: 0;
6090 left: 50%;
6091 margin-left: -5px;
6092 border-width: 0 5px 5px;
6093 border-bottom-color: #000;
6094 }
6095 .tooltip.bottom-left .tooltip-arrow {
6096 top: 0;
6097 right: 5px;
6098 margin-top: -5px;
6099 border-width: 0 5px 5px;
6100 border-bottom-color: #000;
6101 }
6102 .tooltip.bottom-right .tooltip-arrow {
6103 top: 0;
6104 left: 5px;
6105 margin-top: -5px;
6106 border-width: 0 5px 5px;
6107 border-bottom-color: #000;
6108 }
6109 .popover {
6110 position: absolute;
6111 top: 0;
6112 left: 0;
6113 z-index: 1060;
6114 display: none;
6115 max-width: 276px;
6116 padding: 1px;
6117 font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
6118 font-size: 14px;
6119 font-style: normal;
6120 font-weight: normal;
6121 line-height: 1.42857143;
6122 text-align: left;
6123 text-align: start;
6124 text-decoration: none;
6125 text-shadow: none;
6126 text-transform: none;
6127 letter-spacing: normal;
6128 word-break: normal;
6129 word-spacing: normal;
6130 word-wrap: normal;
6131 white-space: normal;
6132 background-color: #fff;
6133 -webkit-background-clip: padding-box;
6134 background-clip: padding-box;
6135 border: 1px solid #ccc;
6136 border: 1px solid rgba(0, 0, 0, .2);
6137 border-radius: 6px;
6138 -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
6139 box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
6140
6141 line-break: auto;
6142 }
6143 .popover.top {
6144 margin-top: -10px;
6145 }
6146 .popover.right {
6147 margin-left: 10px;
6148 }
6149 .popover.bottom {
6150 margin-top: 10px;
6151 }
6152 .popover.left {
6153 margin-left: -10px;
6154 }
6155 .popover-title {
6156 padding: 8px 14px;
6157 margin: 0;
6158 font-size: 14px;
6159 background-color: #f7f7f7;
6160 border-bottom: 1px solid #ebebeb;
6161 border-radius: 5px 5px 0 0;
6162 }
6163 .popover-content {
6164 padding: 9px 14px;
6165 }
6166 .popover > .arrow,
6167 .popover > .arrow:after {
6168 position: absolute;
6169 display: block;
6170 width: 0;
6171 height: 0;
6172 border-color: transparent;
6173 border-style: solid;
6174 }
6175 .popover > .arrow {
6176 border-width: 11px;
6177 }
6178 .popover > .arrow:after {
6179 content: "";
6180 border-width: 10px;
6181 }
6182 .popover.top > .arrow {
6183 bottom: -11px;
6184 left: 50%;
6185 margin-left: -11px;
6186 border-top-color: #999;
6187 border-top-color: rgba(0, 0, 0, .25);
6188 border-bottom-width: 0;
6189 }
6190 .popover.top > .arrow:after {
6191 bottom: 1px;
6192 margin-left: -10px;
6193 content: " ";
6194 border-top-color: #fff;
6195 border-bottom-width: 0;
6196 }
6197 .popover.right > .arrow {
6198 top: 50%;
6199 left: -11px;
6200 margin-top: -11px;
6201 border-right-color: #999;
6202 border-right-color: rgba(0, 0, 0, .25);
6203 border-left-width: 0;
6204 }
6205 .popover.right > .arrow:after {
6206 bottom: -10px;
6207 left: 1px;
6208 content: " ";
6209 border-right-color: #fff;
6210 border-left-width: 0;
6211 }
6212 .popover.bottom > .arrow {
6213 top: -11px;
6214 left: 50%;
6215 margin-left: -11px;
6216 border-top-width: 0;
6217 border-bottom-color: #999;
6218 border-bottom-color: rgba(0, 0, 0, .25);
6219 }
6220 .popover.bottom > .arrow:after {
6221 top: 1px;
6222 margin-left: -10px;
6223 content: " ";
6224 border-top-width: 0;
6225 border-bottom-color: #fff;
6226 }
6227 .popover.left > .arrow {
6228 top: 50%;
6229 right: -11px;
6230 margin-top: -11px;
6231 border-right-width: 0;
6232 border-left-color: #999;
6233 border-left-color: rgba(0, 0, 0, .25);
6234 }
6235 .popover.left > .arrow:after {
6236 right: 1px;
6237 bottom: -10px;
6238 content: " ";
6239 border-right-width: 0;
6240 border-left-color: #fff;
6241 }
6242 .carousel {
6243 position: relative;
6244 }
6245 .carousel-inner {
6246 position: relative;
6247 width: 100%;
6248 overflow: hidden;
6249 }
6250 .carousel-inner > .item {
6251 position: relative;
6252 display: none;
6253 -webkit-transition: .6s ease-in-out left;
6254 -o-transition: .6s ease-in-out left;
6255 transition: .6s ease-in-out left;
6256 }
6257 .carousel-inner > .item > img,
6258 .carousel-inner > .item > a > img {
6259 line-height: 1;
6260 }
6261 @media all and (transform-3d), (-webkit-transform-3d) {
6262 .carousel-inner > .item {
6263 -webkit-transition: -webkit-transform .6s ease-in-out;
6264 -o-transition: -o-transform .6s ease-in-out;
6265 transition: transform .6s ease-in-out;
6266
6267 -webkit-backface-visibility: hidden;
6268 backface-visibility: hidden;
6269 -webkit-perspective: 1000px;
6270 perspective: 1000px;
6271 }
6272 .carousel-inner > .item.next,
6273 .carousel-inner > .item.active.right {
6274 left: 0;
6275 -webkit-transform: translate3d(100%, 0, 0);
6276 transform: translate3d(100%, 0, 0);
6277 }
6278 .carousel-inner > .item.prev,
6279 .carousel-inner > .item.active.left {
6280 left: 0;
6281 -webkit-transform: translate3d(-100%, 0, 0);
6282 transform: translate3d(-100%, 0, 0);
6283 }
6284 .carousel-inner > .item.next.left,
6285 .carousel-inner > .item.prev.right,
6286 .carousel-inner > .item.active {
6287 left: 0;
6288 -webkit-transform: translate3d(0, 0, 0);
6289 transform: translate3d(0, 0, 0);
6290 }
6291 }
6292 .carousel-inner > .active,
6293 .carousel-inner > .next,
6294 .carousel-inner > .prev {
6295 display: block;
6296 }
6297 .carousel-inner > .active {
6298 left: 0;
6299 }
6300 .carousel-inner > .next,
6301 .carousel-inner > .prev {
6302 position: absolute;
6303 top: 0;
6304 width: 100%;
6305 }
6306 .carousel-inner > .next {
6307 left: 100%;
6308 }
6309 .carousel-inner > .prev {
6310 left: -100%;
6311 }
6312 .carousel-inner > .next.left,
6313 .carousel-inner > .prev.right {
6314 left: 0;
6315 }
6316 .carousel-inner > .active.left {
6317 left: -100%;
6318 }
6319 .carousel-inner > .active.right {
6320 left: 100%;
6321 }
6322 .carousel-control {
6323 position: absolute;
6324 top: 0;
6325 bottom: 0;
6326 left: 0;
6327 width: 15%;
6328 font-size: 20px;
6329 color: #fff;
6330 text-align: center;
6331 text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
6332 background-color: rgba(0, 0, 0, 0);
6333 filter: alpha(opacity=50);
6334 opacity: .5;
6335 }
6336 .carousel-control.left {
6337 background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
6338 background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
6339 background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));
6340 background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
6341 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
6342 background-repeat: repeat-x;
6343 }
6344 .carousel-control.right {
6345 right: 0;
6346 left: auto;
6347 background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
6348 background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
6349 background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));
6350 background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
6351 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
6352 background-repeat: repeat-x;
6353 }
6354 .carousel-control:hover,
6355 .carousel-control:focus {
6356 color: #fff;
6357 text-decoration: none;
6358 filter: alpha(opacity=90);
6359 outline: 0;
6360 opacity: .9;
6361 }
6362 .carousel-control .icon-prev,
6363 .carousel-control .icon-next,
6364 .carousel-control .glyphicon-chevron-left,
6365 .carousel-control .glyphicon-chevron-right {
6366 position: absolute;
6367 top: 50%;
6368 z-index: 5;
6369 display: inline-block;
6370 margin-top: -10px;
6371 }
6372 .carousel-control .icon-prev,
6373 .carousel-control .glyphicon-chevron-left {
6374 left: 50%;
6375 margin-left: -10px;
6376 }
6377 .carousel-control .icon-next,
6378 .carousel-control .glyphicon-chevron-right {
6379 right: 50%;
6380 margin-right: -10px;
6381 }
6382 .carousel-control .icon-prev,
6383 .carousel-control .icon-next {
6384 width: 20px;
6385 height: 20px;
6386 font-family: serif;
6387 line-height: 1;
6388 }
6389 .carousel-control .icon-prev:before {
6390 content: '\2039';
6391 }
6392 .carousel-control .icon-next:before {
6393 content: '\203a';
6394 }
6395 .carousel-indicators {
6396 position: absolute;
6397 bottom: 10px;
6398 left: 50%;
6399 z-index: 15;
6400 width: 60%;
6401 padding-left: 0;
6402 margin-left: -30%;
6403 text-align: center;
6404 list-style: none;
6405 }
6406 .carousel-indicators li {
6407 display: inline-block;
6408 width: 10px;
6409 height: 10px;
6410 margin: 1px;
6411 text-indent: -999px;
6412 cursor: pointer;
6413 background-color: #000 \9;
6414 background-color: rgba(0, 0, 0, 0);
6415 border: 1px solid #fff;
6416 border-radius: 10px;
6417 }
6418 .carousel-indicators .active {
6419 width: 12px;
6420 height: 12px;
6421 margin: 0;
6422 background-color: #fff;
6423 }
6424 .carousel-caption {
6425 position: absolute;
6426 right: 15%;
6427 bottom: 20px;
6428 left: 15%;
6429 z-index: 10;
6430 padding-top: 20px;
6431 padding-bottom: 20px;
6432 color: #fff;
6433 text-align: center;
6434 text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
6435 }
6436 .carousel-caption .btn {
6437 text-shadow: none;
6438 }
6439 @media screen and (min-width: 768px) {
6440 .carousel-control .glyphicon-chevron-left,
6441 .carousel-control .glyphicon-chevron-right,
6442 .carousel-control .icon-prev,
6443 .carousel-control .icon-next {
6444 width: 30px;
6445 height: 30px;
6446 margin-top: -10px;
6447 font-size: 30px;
6448 }
6449 .carousel-control .glyphicon-chevron-left,
6450 .carousel-control .icon-prev {
6451 margin-left: -10px;
6452 }
6453 .carousel-control .glyphicon-chevron-right,
6454 .carousel-control .icon-next {
6455 margin-right: -10px;
6456 }
6457 .carousel-caption {
6458 right: 20%;
6459 left: 20%;
6460 padding-bottom: 30px;
6461 }
6462 .carousel-indicators {
6463 bottom: 20px;
6464 }
6465 }
6466 .clearfix:before,
6467 .clearfix:after,
6468 .dl-horizontal dd:before,
6469 .dl-horizontal dd:after,
6470 .container:before,
6471 .container:after,
6472 .container-fluid:before,
6473 .container-fluid:after,
6474 .row:before,
6475 .row:after,
6476 .form-horizontal .form-group:before,
6477 .form-horizontal .form-group:after,
6478 .btn-toolbar:before,
6479 .btn-toolbar:after,
6480 .btn-group-vertical > .btn-group:before,
6481 .btn-group-vertical > .btn-group:after,
6482 .nav:before,
6483 .nav:after,
6484 .navbar:before,
6485 .navbar:after,
6486 .navbar-header:before,
6487 .navbar-header:after,
6488 .navbar-collapse:before,
6489 .navbar-collapse:after,
6490 .pager:before,
6491 .pager:after,
6492 .panel-body:before,
6493 .panel-body:after,
6494 .modal-header:before,
6495 .modal-header:after,
6496 .modal-footer:before,
6497 .modal-footer:after {
6498 display: table;
6499 content: " ";
6500 }
6501 .clearfix:after,
6502 .dl-horizontal dd:after,
6503 .container:after,
6504 .container-fluid:after,
6505 .row:after,
6506 .form-horizontal .form-group:after,
6507 .btn-toolbar:after,
6508 .btn-group-vertical > .btn-group:after,
6509 .nav:after,
6510 .navbar:after,
6511 .navbar-header:after,
6512 .navbar-collapse:after,
6513 .pager:after,
6514 .panel-body:after,
6515 .modal-header:after,
6516 .modal-footer:after {
6517 clear: both;
6518 }
6519 .center-block {
6520 display: block;
6521 margin-right: auto;
6522 margin-left: auto;
6523 }
6524 .pull-right {
6525 float: right !important;
6526 }
6527 .pull-left {
6528 float: left !important;
6529 }
6530 .hide {
6531 display: none !important;
6532 }
6533 .show {
6534 display: block !important;
6535 }
6536 .invisible {
6537 visibility: hidden;
6538 }
6539 .text-hide {
6540 font: 0/0 a;
6541 color: transparent;
6542 text-shadow: none;
6543 background-color: transparent;
6544 border: 0;
6545 }
6546 .hidden {
6547 display: none !important;
6548 }
6549 .affix {
6550 position: fixed;
6551 }
6552 @-ms-viewport {
6553 width: device-width;
6554 }
6555 .visible-xs,
6556 .visible-sm,
6557 .visible-md,
6558 .visible-lg {
6559 display: none !important;
6560 }
6561 .visible-xs-block,
6562 .visible-xs-inline,
6563 .visible-xs-inline-block,
6564 .visible-sm-block,
6565 .visible-sm-inline,
6566 .visible-sm-inline-block,
6567 .visible-md-block,
6568 .visible-md-inline,
6569 .visible-md-inline-block,
6570 .visible-lg-block,
6571 .visible-lg-inline,
6572 .visible-lg-inline-block {
6573 display: none !important;
6574 }
6575 @media (max-width: 767px) {
6576 .visible-xs {
6577 display: block !important;
6578 }
6579 table.visible-xs {
6580 display: table !important;
6581 }
6582 tr.visible-xs {
6583 display: table-row !important;
6584 }
6585 th.visible-xs,
6586 td.visible-xs {
6587 display: table-cell !important;
6588 }
6589 }
6590 @media (max-width: 767px) {
6591 .visible-xs-block {
6592 display: block !important;
6593 }
6594 }
6595 @media (max-width: 767px) {
6596 .visible-xs-inline {
6597 display: inline !important;
6598 }
6599 }
6600 @media (max-width: 767px) {
6601 .visible-xs-inline-block {
6602 display: inline-block !important;
6603 }
6604 }
6605 @media (min-width: 768px) and (max-width: 991px) {
6606 .visible-sm {
6607 display: block !important;
6608 }
6609 table.visible-sm {
6610 display: table !important;
6611 }
6612 tr.visible-sm {
6613 display: table-row !important;
6614 }
6615 th.visible-sm,
6616 td.visible-sm {
6617 display: table-cell !important;
6618 }
6619 }
6620 @media (min-width: 768px) and (max-width: 991px) {
6621 .visible-sm-block {
6622 display: block !important;
6623 }
6624 }
6625 @media (min-width: 768px) and (max-width: 991px) {
6626 .visible-sm-inline {
6627 display: inline !important;
6628 }
6629 }
6630 @media (min-width: 768px) and (max-width: 991px) {
6631 .visible-sm-inline-block {
6632 display: inline-block !important;
6633 }
6634 }
6635 @media (min-width: 992px) and (max-width: 1199px) {
6636 .visible-md {
6637 display: block !important;
6638 }
6639 table.visible-md {
6640 display: table !important;
6641 }
6642 tr.visible-md {
6643 display: table-row !important;
6644 }
6645 th.visible-md,
6646 td.visible-md {
6647 display: table-cell !important;
6648 }
6649 }
6650 @media (min-width: 992px) and (max-width: 1199px) {
6651 .visible-md-block {
6652 display: block !important;
6653 }
6654 }
6655 @media (min-width: 992px) and (max-width: 1199px) {
6656 .visible-md-inline {
6657 display: inline !important;
6658 }
6659 }
6660 @media (min-width: 992px) and (max-width: 1199px) {
6661 .visible-md-inline-block {
6662 display: inline-block !important;
6663 }
6664 }
6665 @media (min-width: 1200px) {
6666 .visible-lg {
6667 display: block !important;
6668 }
6669 table.visible-lg {
6670 display: table !important;
6671 }
6672 tr.visible-lg {
6673 display: table-row !important;
6674 }
6675 th.visible-lg,
6676 td.visible-lg {
6677 display: table-cell !important;
6678 }
6679 }
6680 @media (min-width: 1200px) {
6681 .visible-lg-block {
6682 display: block !important;
6683 }
6684 }
6685 @media (min-width: 1200px) {
6686 .visible-lg-inline {
6687 display: inline !important;
6688 }
6689 }
6690 @media (min-width: 1200px) {
6691 .visible-lg-inline-block {
6692 display: inline-block !important;
6693 }
6694 }
6695 @media (max-width: 767px) {
6696 .hidden-xs {
6697 display: none !important;
6698 }
6699 }
6700 @media (min-width: 768px) and (max-width: 991px) {
6701 .hidden-sm {
6702 display: none !important;
6703 }
6704 }
6705 @media (min-width: 992px) and (max-width: 1199px) {
6706 .hidden-md {
6707 display: none !important;
6708 }
6709 }
6710 @media (min-width: 1200px) {
6711 .hidden-lg {
6712 display: none !important;
6713 }
6714 }
6715 .visible-print {
6716 display: none !important;
6717 }
6718 @media print {
6719 .visible-print {
6720 display: block !important;
6721 }
6722 table.visible-print {
6723 display: table !important;
6724 }
6725 tr.visible-print {
6726 display: table-row !important;
6727 }
6728 th.visible-print,
6729 td.visible-print {
6730 display: table-cell !important;
6731 }
6732 }
6733 .visible-print-block {
6734 display: none !important;
6735 }
6736 @media print {
6737 .visible-print-block {
6738 display: block !important;
6739 }
6740 }
6741 .visible-print-inline {
6742 display: none !important;
6743 }
6744 @media print {
6745 .visible-print-inline {
6746 display: inline !important;
6747 }
6748 }
6749 .visible-print-inline-block {
6750 display: none !important;
6751 }
6752 @media print {
6753 .visible-print-inline-block {
6754 display: inline-block !important;
6755 }
6756 }
6757 @media print {
6758 .hidden-print {
6759 display: none !important;
6760 }
6761 }
6762 /*# sourceMappingURL=bootstrap.css.map */
6763 </style>
6764 <style>body {
6765 padding-bottom: 32px;
6766 }
6767 .form-control[readonly] {
6768 cursor: text;
6769 }
6770 .feedback-container {
6771 position: fixed;
6772 top: 0;
6773 width: 100%;
6774 text-align: center;
6775 z-index: 4;
6776 }
6777 .feedback {
6778 display: table;
6779 padding: 0.5em 1em;
6780 background-color: orange;
6781 margin: 0 auto;
6782 font-size: 2em;
6783 color: #444;
6784 border: 2px solid #555;
6785 border-top: 0;
6786 border-bottom-left-radius: 20px 20px;
6787 border-bottom-right-radius: 20px 20px;
6788 }
6789 .no-border {
6790 border: 0;
6791 box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
6792 -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
6793 }
6794 .phrase {
6795 word-break: keep-all;
6796 }
6797 .generate-container .strength {
6798 /* override mobile width from bootstrap */
6799 width: auto!important;
6800 display: inline-block;
6801 }
6802 .languages a {
6803 padding-left: 10px;
6804 }
6805 .languages a:nth-of-type(1) {
6806 margin-left: -12px;
6807 padding-left: 0;
6808 }
6809 .monospace {
6810 font-family: monospace;
6811 }
6812 .entropy-container .filtered,
6813 .entropy-container .binary {
6814 word-wrap: break-word;
6815 }
6816 .entropy-container li {
6817 padding-bottom: 5px;
6818 }
6819 .card-suit {
6820 font-size: 19px;
6821 line-height: 0;
6822 }
6823 .card-suit.club {
6824 color: #009F00;
6825 }
6826 .card-suit.diamond {
6827 color: #3D5DC4;
6828 }
6829 .card-suit.heart {
6830 color: #F00;
6831 }
6832 .card-suit.spade {
6833 color: #000;
6834 }
6835 .qr-container {
6836 position: fixed;
6837 top: 0;
6838 right: 0;
6839 text-align: center;
6840 background-color: #FFF;
6841 border: 1px solid #CCC;
6842 }
6843 .qr-image {
6844 margin: 5px;
6845 }
6846 .qr-hint,
6847 .qr-warning {
6848 padding: 2px;
6849 max-width: 320px;
6850 }
6851 .more-info {
6852 cursor: help;
6853 border-bottom: 1px dashed #000;
6854 text-decoration: none;
6855 }
6856 .version {
6857 position: absolute;
6858 top: 5px;
6859 right: 5px;
6860 }
6861 .csv {
6862 margin-top: 20px;
6863 margin-bottom: 20px;
6864 white-space: pre;
6865 overflow-wrap: normal;
6866 overflow-x: scroll;
6867 font-family: monospace;
6868 }
6869 </style>
6870 <meta content="Mnemonic code for generating deterministic keys" name="description"/>
6871 <meta content="width=device-width, initial-scale=1.0" name="viewport" />
6872 <meta content="bitcoin mnemonic converter" name="description" />
6873 <meta content="Ian Coleman" name="author" />
6874 <link type="image/x-icon" rel="icon" href="data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAF0lEQVRIx2NgGAWjYBSMglEwCkbBSAcACBAAAeaR9cIAAAAASUVORK5CYII=" />
6875 </head>
6876 <body>
6877 <div class="container">
6878
6879 <h1 class="text-center">Mnemonic Code Converter</h1>
6880 <p class="version">v0.3.3</p>
6881 <hr>
6882 <div class="row">
6883 <div class="col-md-12">
6884 <h2>Mnemonic</h2>
6885 <form class="form-horizontal" role="form">
6886 <div class="form-group">
6887 <div class="col-sm-2"></div>
6888 <div class="col-sm-10">
6889 <p>You can enter an existing BIP39 mnemonic, or generate a new random one. Typing your own twelve words will probably not work how you expect, since the words require a particular structure (the last word is a checksum).</p>
6890 <p>
6891 For more info see the
6892 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target="_blank">BIP39 spec</a>.
6893 </p>
6894 </div>
6895 </div>
6896 <div class="form-group generate-container">
6897 <label class="col-sm-2 control-label"></label>
6898 <div class="col-sm-10">
6899 <div class="form-inline">
6900 <div class="input-group-inline">
6901 <span>Generate a random mnemonic, or enter your own below</span>:
6902 <button class="btn generate">Generate</button>
6903 <select id="strength" class="strength form-control">
6904 <option value="3">3</option>
6905 <option value="6">6</option>
6906 <option value="9">9</option>
6907 <option value="12">12</option>
6908 <option value="15" selected>15</option>
6909 <option value="18">18</option>
6910 <option value="21">21</option>
6911 <option value="24">24</option>
6912 </select>
6913 <span>words</span>
6914 </div>
6915 </div>
6916 </div>
6917 </div>
6918 <div class="entropy-container hidden">
6919 <div class="form-group text-danger">
6920 <label class="col-sm-2 control-label">Warning</label>
6921 <div class="col-sm-10 form-control-static">
6922 <span>Entropy is an advanced feature. Your mnemonic may be insecure if this feature is used incorrectly.</span>
6923 <a href="#entropy-notes">Read more</a>
6924 </div>
6925 </div>
6926 <div class="form-group">
6927 <label for="entropy" class="col-sm-2 control-label">Entropy</label>
6928 <div class="col-sm-7">
6929 <textarea id="entropy" rows="2" class="entropy form-control" placeholder="Accepts either binary, base 6, 6-sided dice, base 10, hexadecimal or cards"></textarea>
6930 <div class="row filter-warning text-danger hidden">
6931 <p class="col-sm-12">
6932 <strong>
6933 Some characters have been discarded
6934 </strong>
6935 </p>
6936 </div>
6937 <div class="row">
6938 <label class="col-sm-3 control-label"><span class="more-info" title="Based on estimates from zxcvbn using Filtered Entropy">Time To Crack</span></label>
6939 <div class="crack-time col-sm-3 form-control-static"></div>
6940 <label class="col-sm-3 control-label">Event Count</label>
6941 <div class="event-count col-sm-3 form-control-static"></div>
6942 </div>
6943 <div class="row">
6944 <label class="col-sm-3 control-label">Entropy Type</label>
6945 <div class="type col-sm-3 form-control-static"></div>
6946 <label class="col-sm-3 control-label">Bits Per Event</label>
6947 <div class="bits-per-event col-sm-3 form-control-static"></div>
6948 </div>
6949 <div class="row">
6950 <label class="col-sm-3 control-label">Raw Entropy Words</label>
6951 <div class="word-count col-sm-3 form-control-static"></div>
6952 <label class="col-sm-3 control-label"><span class="more-info" title="Total bits of entropy may be less than indicated if any entropy event uses a weak source.">Total Bits</span></label>
6953 <div class="bits col-sm-3 form-control-static"></div>
6954 </div>
6955 <label class="col-sm-3 control-label">Filtered Entropy</label>
6956 <div class="filtered col-sm-9 form-control-static"></div>
6957 <label class="col-sm-3 control-label">Raw Binary</label>
6958 <div class="binary col-sm-9 form-control-static"></div>
6959 <label class="col-sm-3 control-label">Word Indexes</label>
6960 <div class="word-indexes col-sm-9 form-control-static">&nbsp;</div>
6961 <label class="col-sm-3 control-label">Mnemonic Length</label>
6962 <div class="col-sm-9">
6963 <select class="mnemonic-length form-control">
6964 <option value="raw" selected>Use Raw Entropy (3 words per 32 bits)</option>
6965 <option value="12">12 <span>Words</span></option>
6966 <option value="15">15 <span>Words</option>
6967 <option value="18">18 <span>Words</span></option>
6968 <option value="21">21 <span>Words</span></option>
6969 <option value="24">24 <span>Words</span></option>
6970 </select>
6971 </div>
6972 </div>
6973 <div class="col-sm-3">
6974 <p>Valid entropy values include:</p>
6975 <ul>
6976 <li><strong>Binary</strong> [0-1]<br>101010011</li>
6977 <li><strong>Base 6</strong> [0-5]<br>123434014</li>
6978 <li><strong>Dice</strong> [1-6]<br>62535634</li>
6979 <li><strong>Base 10</strong> [0-9]<br>90834528</li>
6980 <li><strong>Hex</strong> [0-9A-F]<br>4187a8bfd9</li>
6981 <li><strong>Card</strong> [A2-9TJQK][CDHS]<br>ahqs9dtc</li>
6982 </ul>
6983 </div>
6984 </div>
6985 </div>
6986 <div class="form-group">
6987 <div class="col-sm-2"></div>
6988 <div class="col-sm-10 checkbox">
6989 <label>
6990 <input type="checkbox" class="use-entropy">
6991 <span>Show entropy details</span>
6992 </label>
6993 </div>
6994 </div>
6995 <div class="form-group">
6996 <label class="col-sm-2 control-label">Mnemonic Language</label>
6997 <div class="col-sm-10 languages">
6998 <div class="form-control no-border">
6999 <a href="#english">English</a>
7000 <a href="#japanese" title="Japanese">日本語</a>
7001 <a href="#spanish" title="Spanish">Español</a>
7002 <a href="#chinese_simplified" title="Chinese (Simplified)">中文(简体)</a>
7003 <a href="#chinese_traditional" title="Chinese (Traditional)">中文(繁體)</a>
7004 <a href="#french" title="French">Français</a>
7005 <a href="#italian" title="Italian">Italiano</a>
7006 </div>
7007 </div>
7008 </div>
7009 <div class="form-group">
7010 <label for="phrase" class="col-sm-2 control-label">BIP39 Mnemonic</label>
7011 <div class="col-sm-10">
7012 <textarea id="phrase" class="phrase form-control" data-show-qr></textarea>
7013 </div>
7014 </div>
7015 <div class="form-group">
7016 <label for="passphrase" class="col-sm-2 control-label">BIP39 Passphrase (optional)</label>
7017 <div class="col-sm-10">
7018 <textarea id="passphrase" class="passphrase form-control"></textarea>
7019 </div>
7020 </div>
7021 <div class="form-group">
7022 <label for="seed" class="col-sm-2 control-label">BIP39 Seed</label>
7023 <div class="col-sm-10">
7024 <textarea id="seed" class="seed form-control" readonly="readonly" data-show-qr></textarea>
7025 </div>
7026 </div>
7027 <div class="form-group">
7028 <label for="network-phrase" class="col-sm-2 control-label">Coin</label>
7029 <div class="col-sm-10">
7030 <select id="network-phrase" class="network form-control">
7031 <!-- populated by javascript -->
7032 </select>
7033 </div>
7034 </div>
7035 <div class="form-group">
7036 <label for="root-key" class="col-sm-2 control-label">BIP32 Root Key</label>
7037 <div class="col-sm-10">
7038 <textarea id="root-key" class="root-key form-control" data-show-qr></textarea>
7039 </div>
7040 </div>
7041 <div class="form-group litecoin-ltub-container hidden">
7042 <label for="litecoin-use-ltub" class="col-sm-2 control-label">Prefixes</label>
7043 <div class="col-sm-10 checkbox">
7044 <label>
7045 <input type="checkbox" id="litecoin-use-ltub" class="litecoin-use-ltub" checked="checked">
7046 Use <code>Ltpv / Ltub</code> instead of <code>xprv / xpub</code>
7047 </label>
7048 </div>
7049 </div>
7050 </form>
7051 </div>
7052 </div>
7053
7054 <hr>
7055
7056 <div class="row">
7057 <div class="col-md-12">
7058 <h2>Derivation Path</h2>
7059 <ul class="derivation-type nav nav-tabs" role="tablist">
7060 <li id="bip32-tab">
7061 <a href="#bip32" role="tab" data-toggle="tab">BIP32</a>
7062 </li>
7063 <li id="bip44-tab" class="active">
7064 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a>
7065 </li>
7066 <li id="bip49-tab">
7067 <a href="#bip49" role="tab" data-toggle="tab">BIP49</a>
7068 </li>
7069 <li id="bip84-tab">
7070 <a href="#bip84" role="tab" data-toggle="tab">BIP84</a>
7071 </li>
7072 <li id="bip141-tab">
7073 <a href="#bip141" role="tab" data-toggle="tab">BIP141</a>
7074 </li>
7075 </ul>
7076 <div class="derivation-type tab-content">
7077 <div id="bip44" class="tab-pane active">
7078 <form class="form-horizontal" role="form">
7079 <br>
7080 <div class="col-sm-2"></div>
7081 <div class="col-sm-10">
7082 <p>
7083 For more info see the
7084 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a>.
7085 </p>
7086 </div>
7087 <div class="form-group">
7088 <label for="purpose" class="col-sm-2 control-label">
7089 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
7090 </label>
7091 <div class="col-sm-10">
7092 <input id="purpose" type="text" class="purpose form-control" value="44" readonly>
7093 </div>
7094 </div>
7095 <div class="form-group">
7096 <label for="coin" class="col-sm-2 control-label">
7097 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
7098 </label>
7099 <div class="col-sm-10">
7100 <input id="coin" type="text" class="coin form-control" value="0" readonly>
7101 </div>
7102 </div>
7103 <div class="form-group">
7104 <label for="account" class="col-sm-2 control-label">
7105 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
7106 </label>
7107 <div class="col-sm-10">
7108 <input id="account" type="text" class="account form-control" value="0">
7109 </div>
7110 </div>
7111 <div class="form-group">
7112 <label for="change" class="col-sm-2 control-label">
7113 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
7114 </label>
7115 <div class="col-sm-10">
7116 <input id="change" type="text" class="change form-control" value="0">
7117 </div>
7118 </div>
7119 <div class="form-group">
7120 <label class="col-sm-2 control-label">
7121 </label>
7122 <div class="col-sm-10">
7123 <p>The account extended keys can be used for importing to most BIP44 compatible wallets, such as mycelium or electrum.</p>
7124 </div>
7125 </div>
7126 <div class="form-group">
7127 <label for="account-xprv" class="col-sm-2 control-label">
7128 <span>Account Extended Private Key</span>
7129 </label>
7130 <div class="col-sm-10">
7131 <textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
7132 </div>
7133 </div>
7134 <div class="form-group">
7135 <label for="account-xpub" class="col-sm-2 control-label">
7136 <span>Account Extended Public Key</span>
7137 </label>
7138 <div class="col-sm-10">
7139 <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
7140 </div>
7141 </div>
7142 <div class="form-group">
7143 <label class="col-sm-2 control-label">
7144 </label>
7145 <div class="col-sm-10">
7146 <p>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
7147 </div>
7148 </div>
7149 <div class="form-group">
7150 <label for="bip44-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
7151 <div class="col-sm-10">
7152 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
7153 </div>
7154 </div>
7155 </form>
7156 </div>
7157 <div id="bip32" class="tab-pane">
7158 <form class="form-horizontal" role="form">
7159 <br>
7160 <div class="col-sm-2"></div>
7161 <div class="col-sm-10">
7162 <p>
7163 For more info see the
7164 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a>
7165 </p>
7166 </div>
7167 <div class="form-group">
7168 <label for="bip32-client" class="col-sm-2 control-label">Client</label>
7169 <div class="col-sm-10">
7170 <select id="bip32-client" class="client form-control">
7171 <option value="custom">Custom derivation path</option>
7172 <!-- populated by javascript -->
7173 </select>
7174 </div>
7175 </div>
7176 <div class="form-group">
7177 <label for="bip32-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
7178 <div class="col-sm-10">
7179 <input id="bip32-path" type="text" class="path form-control" value="m/0">
7180 </div>
7181 </div>
7182 <div class="form-group">
7183 <div class="col-sm-2"></div>
7184 <label class="col-sm-10">
7185 <input class="hardened-addresses" type="checkbox">
7186 <span>Use hardened addresses</span>
7187 </label>
7188 </div>
7189 <div class="form-group">
7190 <label for="core-path" class="col-sm-2 control-label">Bitcoin Core</label>
7191 <div class="col-sm-10">
7192 <p class="form-control no-border">
7193 Use path <code>m/0'/0'</code> with hardened addresses.
7194 </p>
7195 <p class="form-control no-border">
7196 For more info see the
7197 <a href="https://github.com/bitcoin/bitcoin/pull/8035" target="_blank">Bitcoin Core BIP32 implementation</a>
7198 </p>
7199 </div>
7200 </div>
7201 <div class="form-group">
7202 <label for="core-path" class="col-sm-2 control-label">Multibit</label>
7203 <div class="col-sm-10">
7204 <p class="form-control no-border">
7205 <span>Use path <code>m/0'/0</code>.</span>
7206 </p>
7207 <p class="form-control no-border">
7208 <span>For more info see</span>
7209 <a href="https://multibit.org/" target="_blank">MultiBit HD</a>
7210 </p>
7211 </div>
7212 </div>
7213 <div class="form-group">
7214 <label class="col-sm-2 control-label">Block Explorers</label>
7215 <div class="col-sm-10">
7216 <p class="form-control no-border">
7217 <span>Use path <code>m/44'/0'/0'</code>.</span>
7218 <span>Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xprv</code> key.</span>
7219 </p>
7220 <p class="form-control no-border">
7221 <span>Can be used with</span>:
7222 <a href="https://blockchain.info/" target="_blank">blockchain.info</a>
7223 </p>
7224 </div>
7225 </div>
7226 </form>
7227 </div>
7228 <div id="bip49" class="tab-pane">
7229 <form class="form-horizontal" role="form">
7230 <br>
7231 <div class="unavailable hidden">
7232 <div class="form-group">
7233 <div class="col-sm-2"></div>
7234 <div class="col-sm-10">
7235 <p>BIP49 is unavailable for this coin.</p>
7236 </div>
7237 </div>
7238 </div>
7239 <div class="available">
7240 <div class="col-sm-2"></div>
7241 <div class="col-sm-10">
7242 <p>
7243 For more info see the
7244 <a href="https://github.com/bitcoin/bips/blob/master/bip-0049.mediawiki" target="_blank">BIP49 spec</a>.
7245 </p>
7246 </div>
7247 <div class="form-group">
7248 <label for="purpose" class="col-sm-2 control-label">
7249 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
7250 </label>
7251 <div class="col-sm-10">
7252 <input id="purpose" type="text" class="purpose form-control" value="49" readonly>
7253 </div>
7254 </div>
7255 <div class="form-group">
7256 <label for="coin" class="col-sm-2 control-label">
7257 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
7258 </label>
7259 <div class="col-sm-10">
7260 <input id="coin" type="text" class="coin form-control" value="0" readonly>
7261 </div>
7262 </div>
7263 <div class="form-group">
7264 <label for="account" class="col-sm-2 control-label">
7265 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
7266 </label>
7267 <div class="col-sm-10">
7268 <input id="account" type="text" class="account form-control" value="0">
7269 </div>
7270 </div>
7271 <div class="form-group">
7272 <label for="change" class="col-sm-2 control-label">
7273 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
7274 </label>
7275 <div class="col-sm-10">
7276 <input id="change" type="text" class="change form-control" value="0">
7277 </div>
7278 </div>
7279 <div class="form-group">
7280 <label class="col-sm-2 control-label">
7281 </label>
7282 <div class="col-sm-10">
7283 <p>The account extended keys can be used for importing to most BIP49 compatible wallets.</p>
7284 </div>
7285 </div>
7286 <div class="form-group">
7287 <label for="account-xprv" class="col-sm-2 control-label">
7288 <span>Account Extended Private Key</span>
7289 </label>
7290 <div class="col-sm-10">
7291 <textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
7292 </div>
7293 </div>
7294 <div class="form-group">
7295 <label for="account-xpub" class="col-sm-2 control-label">
7296 <span>Account Extended Public Key</span>
7297 </label>
7298 <div class="col-sm-10">
7299 <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
7300 </div>
7301 </div>
7302 <div class="form-group">
7303 <label class="col-sm-2 control-label">
7304 </label>
7305 <div class="col-sm-10">
7306 <p>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
7307 </div>
7308 </div>
7309 <div class="form-group">
7310 <label for="bip49-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
7311 <div class="col-sm-10">
7312 <input id="bip49-path" type="text" class="path form-control" value="m/49'/0'/0'/0" readonly="readonly">
7313 </div>
7314 </div>
7315 </div>
7316 </form>
7317 </div>
7318 <div id="bip141" class="tab-pane">
7319 <form class="form-horizontal" role="form">
7320 <br>
7321 <div class="unavailable hidden">
7322 <div class="form-group">
7323 <div class="col-sm-2"></div>
7324 <div class="col-sm-10">
7325 <p>BIP141 is unavailable for this coin.</p>
7326 </div>
7327 </div>
7328 </div>
7329 <div class="available">
7330 <div class="col-sm-2"></div>
7331 <div class="col-sm-10">
7332 <p>
7333 For more info see the
7334 <a href="https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki" target="_blank">BIP141 spec</a>
7335 </p>
7336 </div>
7337 <div class="form-group">
7338 <label for="bip141-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
7339 <div class="col-sm-10">
7340 <input id="bip141-path" type="text" class="bip141-path form-control" value="m/0">
7341 </div>
7342 </div>
7343 <div class="form-group">
7344 <label class="col-sm-2 control-label">Script Semantics</label>
7345 <div class="col-sm-10">
7346 <select class="form-control bip141-semantics">
7347 <option value="p2wpkh">P2WPKH</option>
7348 <option value="p2wpkh-p2sh" selected>P2WPKH nested in P2SH</option>
7349 </select>
7350 </div>
7351 </div>
7352 </div>
7353 </form>
7354 </div>
7355 <div id="bip84" class="tab-pane">
7356 <form class="form-horizontal" role="form">
7357 <br>
7358 <div class="col-sm-2"></div>
7359 <div class="col-sm-10">
7360 <p>
7361 For more info see the
7362 <a href="https://github.com/bitcoin/bips/blob/master/bip-0084.mediawiki" target="_blank">BIP84 spec</a>.
7363 </p>
7364 </div>
7365 <div class="form-group">
7366 <label for="purpose" class="col-sm-2 control-label">
7367 Purpose
7368 </label>
7369 <div class="col-sm-10">
7370 <input id="purpose" type="text" class="purpose form-control" value="84" readonly>
7371 </div>
7372 </div>
7373 <div class="form-group">
7374 <label for="coin" class="col-sm-2 control-label">
7375 Coin
7376 </label>
7377 <div class="col-sm-10">
7378 <input id="coin" type="text" class="coin form-control" value="0" readonly>
7379 </div>
7380 </div>
7381 <div class="form-group">
7382 <label for="account" class="col-sm-2 control-label">
7383 Account
7384 </label>
7385 <div class="col-sm-10">
7386 <input id="account" type="text" class="account form-control" value="0">
7387 </div>
7388 </div>
7389 <div class="form-group">
7390 <label for="change" class="col-sm-2 control-label">
7391 External / Internal
7392 </label>
7393 <div class="col-sm-10">
7394 <input id="change" type="text" class="change form-control" value="0">
7395 </div>
7396 </div>
7397 <div class="form-group">
7398 <label class="col-sm-2 control-label">
7399 </label>
7400 <div class="col-sm-10">
7401 <p>The account extended keys can be used for importing to most BIP84 compatible wallets.</p>
7402 </div>
7403 </div>
7404 <div class="form-group">
7405 <label for="account-xprv" class="col-sm-2 control-label">
7406 <span>Account Extended Private Key</span>
7407 </label>
7408 <div class="col-sm-10">
7409 <textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
7410 </div>
7411 </div>
7412 <div class="form-group">
7413 <label for="account-xpub" class="col-sm-2 control-label">
7414 <span>Account Extended Public Key</span>
7415 </label>
7416 <div class="col-sm-10">
7417 <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
7418 </div>
7419 </div>
7420 <div class="form-group">
7421 <label class="col-sm-2 control-label">
7422 </label>
7423 <div class="col-sm-10">
7424 <p>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
7425 </div>
7426 </div>
7427 <div class="form-group">
7428 <label for="bip84-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
7429 <div class="col-sm-10">
7430 <input id="bip84-path" type="text" class="path form-control" value="m/84'/0'/0'/0" readonly="readonly">
7431 </div>
7432 </div>
7433 </form>
7434 </div>
7435 </div>
7436 <form class="form-horizontal" role="form">
7437 <div class="form-group">
7438 <label for="extended-priv-key" class="col-sm-2 control-label">BIP32 Extended Private Key</label>
7439 <div class="col-sm-10">
7440 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly" data-show-qr></textarea>
7441 </div>
7442 </div>
7443 <div class="form-group">
7444 <label for="extended-pub-key" class="col-sm-2 control-label">BIP32 Extended Public Key</label>
7445 <div class="col-sm-10">
7446 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly" data-show-qr></textarea>
7447 </div>
7448 </div>
7449 </form>
7450 </div>
7451 </div>
7452
7453 <hr>
7454
7455 <div class="row">
7456 <div class="col-md-12">
7457 <h2>Derived Addresses</h2>
7458 <p>Note these addresses are derived from the BIP32 Extended Key</p>
7459 </div>
7460 <div class="col-md-12 use-bitpay-addresses-container hidden">
7461 <div class="checkbox">
7462 <label>
7463 <input type="checkbox" class="use-bitpay-addresses">
7464 <span>Use BitPay-style addresses for Bitcoin Cash (ie starting with 'C' instead of '1')</span>
7465 </label>
7466 </div>
7467 </div>
7468 <div class="col-md-12">
7469 <div class="checkbox">
7470 <label>
7471 <input type="checkbox" class="use-bip38">
7472 <span>Encrypt private keys using BIP38 and this password:</span>
7473 </label>
7474 <input class="bip38-password">
7475 <span>Enabling BIP38 means each key will take take several minutes to generate.</span>
7476 </div>
7477 </div>
7478 <ul class="addresses-type nav nav-tabs" role="tablist">
7479 <li id="table-tab" class="active">
7480 <a href="#table" role="tab" data-toggle="tab">Table</a>
7481 </li>
7482 <li id="csv-tab">
7483 <a href="#csv" role="tab" data-toggle="tab">CSV</a>
7484 </li>
7485 </ul>
7486 <div class="addresses-type tab-content">
7487 <div id="table" class="tab-pane active">
7488 <div class="col-md-12">
7489 <table class="table table-striped">
7490 <thead>
7491 <th>
7492 <div class="input-group">
7493 <span>Path</span>&nbsp;&nbsp;
7494 <button class="index-toggle">Toggle</button>
7495 </div>
7496 </th>
7497 <th>
7498 <div class="input-group">
7499 <span>Address</span>&nbsp;&nbsp;
7500 <button class="address-toggle">Toggle</button>
7501 </div>
7502 </th>
7503 <th>
7504 <div class="input-group">
7505 <span>Public Key</span>&nbsp;&nbsp;
7506 <button class="public-key-toggle">Toggle</button>
7507 </div>
7508 </th>
7509 <th>
7510 <div class="input-group">
7511 <span>Private Key</span>&nbsp;&nbsp;
7512 <button class="private-key-toggle">Toggle</button>
7513 </div>
7514 </th>
7515 </thead>
7516 <tbody class="addresses monospace">
7517 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
7518 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
7519 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
7520 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
7521 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
7522 </tbody>
7523 </table>
7524 </div>
7525 </div>
7526 <div id="csv" class="tab-pane">
7527 <div class="col-md-12">
7528 <textarea class="csv form-control" rows="25" readonly></textarea>
7529 </div>
7530 </div>
7531 </div>
7532 </div>
7533 <span>Show</span>
7534 <input type="number" class="rows-to-add" value="20">
7535 <button class="more">more rows</button>
7536 <span>starting from index</span>
7537 <input type="number" class="more-rows-start-index">
7538 <span>(leave blank to generate from next index)</span>
7539
7540 <hr>
7541
7542 <div class="row">
7543 <div class="col-md-12">
7544 <h2>More info</h2>
7545 <h3>BIP39 <span class="small">Mnemonic code for generating deterministic keys</span></h3>
7546 <p>
7547 Read more at the
7548 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
7549 </p>
7550 <h3>BIP32 <span class="small">Hierarchical Deterministic Wallets</span></h3>
7551 <p>
7552 Read more at the
7553 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
7554 </p>
7555 <p>
7556 See the demo at
7557 <a href="http://bip32.org/" target="_blank">bip32.org</a>
7558 </p>
7559 <h3>BIP44 <span class="small">Multi-Account Hierarchy for Deterministic Wallets</span></h3>
7560 <p>
7561 Read more at the
7562 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
7563 </p>
7564 <h3>BIP49 <span class="small">Derivation scheme for P2WPKH-nested-in-P2SH based accounts</span></h3>
7565 <p>
7566 Read more at the
7567 <a href="https://github.com/bitcoin/bips/blob/master/bip-0049.mediawiki" target="_blank">official BIP49 spec</a>
7568 </p>
7569 <h3>Private Keys</h3>
7570 <p>
7571 <span>
7572 Use private keys at
7573 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>.
7574 </span>
7575 <span>Be careful - it can be easy to make mistakes if you don't know what you're doing.</span>
7576 </p>
7577 <h3 id="entropy-notes">Entropy</h3>
7578 <p>
7579 <span>
7580 Entropy values must be sourced from a
7581 <a href="https://en.wikipedia.org/wiki/Random_number_generation" target="_blank">strong source of randomness</a>.
7582 </span>
7583 <span>This means flipping a fair coin, rolling a fair dice, noise measurements etc.</span>
7584 <span>
7585 Do <strong>NOT</strong> use phrases from books, lyrics from songs, your birthday or street address,
7586 keyboard mashing, or anything you <i>think</i> is random, because chances are overwhelming it isn't
7587 random enough for the needs of this tool.
7588 </span>
7589 </p>
7590 <p>
7591 <strong><span>Do not store entropy.</span></strong>
7592 </p>
7593 <p>
7594 <span>Storing entropy (such as keeping a deck of cards in a specific shuffled order) is unreliable compared to storing a mnemonic.</span>
7595 <span>Instead of storing entropy, store the mnemonic generated from the entropy.</span>
7596 <span><a href="https://en.wikipedia.org/wiki/Steganography#Physical" target="_blank">Steganography</a> may be beneficial when storing the mnemonic.</span>
7597 </p>
7598 <p>
7599 <span>
7600 The random mnemonic generator on this page uses a
7601 <a href="https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues" target="_blank">cryptographically secure random number generator</a>.
7602 </span>
7603 <span>The built in random generator can generally be trusted more than your own intuition about randomness.</span>
7604 <span>If cryptographic randomness isn't available in your browser, this page will show a warning and the generate button will not work.</span>
7605 <span>In that case you might choose to use your own source of entropy.</span>
7606 </p>
7607 <p>
7608 <a href="https://bitcointalk.org/index.php?topic=311000.msg3345309#msg3345309" target="_blank">You are not a good source of entropy.</a>
7609 </p>
7610 <h3>License</h3>
7611 <p>
7612 <span>Please refer to <a href="https://github.com/iancoleman/bip39/blob/master/LICENSE" target="_blank">the software license</a> for more detail.
7613 </span>
7614 </p>
7615 <p>The software is provided "as is", without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software.</p>
7616 </div>
7617 </div>
7618
7619 <hr>
7620
7621 <div class="row">
7622 <div class="col-md-12">
7623 <h2>Alternative Tools</h2>
7624 <p>This tool is interoperable with any BIP39 wallet.</p>
7625 <p>Some similar tools to this one (ie not consumer wallets) are</p>
7626 <p>
7627 <a href="https://bip32jp.github.io/english/">
7628 https://bip32jp.github.io/english/
7629 </a>
7630 </p>
7631 </div>
7632 </div>
7633
7634 <hr>
7635
7636 <div class="row">
7637 <div class="col-md-12">
7638
7639 <h2>Offline Usage</h2>
7640
7641 <p>
7642 You can use this tool without having to be online.
7643 </p>
7644 <p>
7645 In your browser, select file save-as, and save this page
7646 as a file.
7647 </p>
7648 <p>
7649 Double-click that file to open it in a browser
7650 on any offline computer.
7651 </p>
7652 <p>
7653 <span>Alternatively, download the file from the repository</span>
7654 -
7655 <a href="https://github.com/iancoleman/bip39">https://github.com/iancoleman/bip39</a>
7656 </p>
7657
7658 </div>
7659 </div>
7660
7661 <hr>
7662
7663 <div class="row">
7664 <div class="col-md-12">
7665
7666 <h2>This project is 100% open-source code</h2>
7667
7668 <p>
7669 <span>Get the source code from the repository</span>
7670 -
7671 <a href="https://github.com/iancoleman/bip39" target="_blank">
7672 https://github.com/iancoleman/bip39
7673 </a>
7674 </p>
7675
7676 <h3>Libraries</h3>
7677
7678 <p>
7679 <span>BitcoinJS - </span>
7680 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
7681 https://github.com/bitcoinjs/bitcoinjs-lib
7682 </a>
7683 </p>
7684
7685 <p>
7686 <span>jsBIP39 - </span>
7687 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
7688 https://github.com/iancoleman/jsbip39
7689 </a>
7690 </p>
7691
7692 <p>
7693 <span>sjcl - </span>
7694 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
7695 https://github.com/bitwiseshiftleft/sjcl
7696 </a>
7697 </p>
7698
7699 <p>
7700 <span>jQuery - </span>
7701 <a href="https://jquery.com/" target="_blank">
7702 https://jquery.com/
7703 </a>
7704 </p>
7705
7706 <p>
7707 <span>Twitter Bootstrap - </span>
7708 <a href="http://getbootstrap.com/" target="_blank">
7709 http://getbootstrap.com/
7710 </a>
7711 </p>
7712
7713 </div>
7714 </div>
7715
7716 </div>
7717
7718 <div class="qr-container hidden">
7719 <div class="qr-hint bg-primary hidden">Click field to hide QR</div>
7720 <div class="qr-hint bg-primary">Click field to show QR</div>
7721 <div class="qr-hider hidden">
7722 <div class="qr-image"></div>
7723 <div class="qr-warning bg-primary">Caution: Scanner may keep history</div>
7724 </div>
7725 </div>
7726
7727 <div class="feedback-container">
7728 <div class="feedback">Loading...</div>
7729 </div>
7730
7731 <script type="text/template" id="address-row-template">
7732 <tr>
7733 <td class="index"><span></span></td>
7734 <td class="address"><span data-show-qr></span></td>
7735 <td class="pubkey"><span data-show-qr></span></td>
7736 <td class="privkey"><span data-show-qr></span></td>
7737 </tr>
7738 </script>
7739 <script>// From
7740 // https://raw.githubusercontent.com/inexorabletash/polyfill/a6bc6ced78160c994f76a909b6ff6bbbab3d43de/es6.js
7741 // Required for ethereumjs-utils.js when run in phantomjs-2.1.1
7742 // but is not required in any modern browsers.
7743 // For more information, see
7744 // https://www.bountysource.com/issues/38485709-error-rendering-plot-with-phantomjs
7745
7746 //----------------------------------------------------------------------
7747 //
7748 // ECMAScript 2015 Polyfills
7749 //
7750 //----------------------------------------------------------------------
7751
7752 (function (global) {
7753 "use strict";
7754
7755 // Set this to always override native implementations, for testing
7756 // the polyfill in browsers with partial/full ES2015 support.
7757 var OVERRIDE_NATIVE_FOR_TESTING = false;
7758
7759 var undefined = (void 0); // Paranoia
7760
7761 // Helpers
7762
7763 function strict(o) {
7764 return o === global ? undefined : o;
7765 }
7766
7767 function hook(o, p, f) {
7768 var op = o[p];
7769 console.assert(typeof op === 'function', 'Hooking a non-function');
7770 o[p] = function() {
7771 var o = strict(this);
7772 var r = f.apply(o, arguments);
7773 return r !== undefined ? r : op.apply(o, arguments);
7774 };
7775 }
7776
7777 function isSymbol(s) {
7778 return (typeof s === 'symbol') || ('Symbol' in global && s instanceof global.Symbol);
7779 }
7780
7781 function getPropertyDescriptor(target, name) {
7782 var desc = Object.getOwnPropertyDescriptor(target, name);
7783 var proto = Object.getPrototypeOf(target);
7784 while (!desc && proto) {
7785 desc = Object.getOwnPropertyDescriptor(proto, name);
7786 proto = Object.getPrototypeOf(proto);
7787 }
7788 return desc;
7789 }
7790
7791 var enqueue = (function(nativePromise, nativeSetImmediate) {
7792 if (nativePromise)
7793 return function(job) { nativePromise.resolve().then(function() { job(); }); };
7794 if (nativeSetImmediate)
7795 return function(job) { nativeSetImmediate(job); };
7796 return function(job) { setTimeout(job, 0); };
7797 }(global['Promise'], global['setImmediate']));
7798
7799 function define(o, p, v, override) {
7800 if (p in o && !override && !OVERRIDE_NATIVE_FOR_TESTING)
7801 return;
7802
7803 if (typeof v === 'function') {
7804 // Sanity check that functions are appropriately named (where possible)
7805 console.assert(isSymbol(p) || !('name' in v) || v.name === p || v.name === p + '_', 'Expected function name "' + p.toString() + '", was "' + v.name + '"');
7806 Object.defineProperty(o, p, {
7807 value: v,
7808 configurable: true,
7809 enumerable: false,
7810 writable: true
7811 });
7812 } else {
7813 Object.defineProperty(o, p, {
7814 value: v,
7815 configurable: false,
7816 enumerable: false,
7817 writable: false
7818 });
7819 }
7820 }
7821
7822 function set_internal(o, p, v) {
7823 Object.defineProperty(o, p, {
7824 value: v,
7825 configurable: false,
7826 enumerable: false,
7827 writable: true
7828 });
7829 }
7830
7831 // Snapshot intrinsic functions
7832 var $isNaN = global.isNaN,
7833 $parseInt = global.parseInt,
7834 $parseFloat = global.parseFloat;
7835
7836 var E = Math.E,
7837 LOG10E = Math.LOG10E,
7838 LOG2E = Math.LOG2E,
7839 abs = Math.abs,
7840 ceil = Math.ceil,
7841 exp = Math.exp,
7842 floor = Math.floor,
7843 log = Math.log,
7844 max = Math.max,
7845 min = Math.min,
7846 pow = Math.pow,
7847 random = Math.random,
7848 sqrt = Math.sqrt;
7849
7850 var orig_match = String.prototype.match,
7851 orig_replace = String.prototype.replace,
7852 orig_search = String.prototype.search,
7853 orig_split = String.prototype.split;
7854
7855 // These are used for implementing the polyfills, but not exported.
7856
7857 // Inspired by https://gist.github.com/1638059
7858 /** @constructor */
7859 function EphemeronTable() {
7860 var secretKey = ObjectCreate(null);
7861
7862 function conceal(o) {
7863 var oValueOf = o.valueOf, secrets = ObjectCreate(null);
7864 Object.defineProperty(o, 'valueOf', {
7865 value: (function(secretKey) {
7866 return function (k) {
7867 return (k === secretKey) ? secrets : oValueOf.apply(o, arguments);
7868 };
7869 }(secretKey)),
7870 configurable: true,
7871 writeable: true,
7872 enumerable: false
7873 });
7874 return secrets;
7875 }
7876
7877 function reveal(o) {
7878 var v = typeof o.valueOf === 'function' && o.valueOf(secretKey);
7879 return v === o ? null : v;
7880 }
7881
7882 return {
7883 clear: function() {
7884 secretKey = ObjectCreate(null);
7885 },
7886 remove: function(key) {
7887 var secrets = reveal(key);
7888 if (secrets && HasOwnProperty(secrets, 'value')) {
7889 delete secrets.value;
7890 return true;
7891 }
7892 return false;
7893 },
7894 get: function(key, defaultValue) {
7895 var secrets = reveal(key);
7896 return (secrets && HasOwnProperty(secrets, 'value')) ? secrets.value : defaultValue;
7897 },
7898 has: function(key) {
7899 var secrets = reveal(key);
7900 return Boolean(secrets && HasOwnProperty(secrets, 'value'));
7901 },
7902 set: function(key, value) {
7903 var secrets = reveal(key) || conceal(key);
7904 secrets.value = value;
7905 }
7906 };
7907 }
7908
7909 var empty = Object.create(null);
7910
7911 //----------------------------------------------------------------------
7912 //
7913 // ECMAScript 2015
7914 // http://www.ecma-international.org/ecma-262/6.0/
7915 //
7916 //----------------------------------------------------------------------
7917
7918 // ---------------------------------------
7919 // 19.4 Symbol Objects
7920 // ---------------------------------------
7921
7922 // NOTE: Symbols are defined here - out of spec order - since we need the
7923 // properties and prototype to be populated for other polyfills.
7924
7925 // NOTE: Not secure, nor is obj[$$symbol] hidden from Object.keys()
7926
7927 var symbolForKey;
7928 (function() {
7929 var secret = Object.create(null);
7930 var symbolMap = {};
7931 symbolForKey = function(k) {
7932 return symbolMap[k];
7933 };
7934
7935 var GlobalSymbolRegistry = [];
7936
7937 function unique(bits) {
7938 return Array(bits + 1).join('x').replace(/x/g, function() {
7939 return random() < 0.5 ? '\u200C' : '\u200D'; // JWNJ / ZWJ
7940 });
7941 }
7942
7943 // 19.4.1 The Symbol Constructor
7944 // 19.4.1.1 Symbol ( description=undefined )
7945 function Symbol(description) {
7946 if (!(this instanceof Symbol)) return new Symbol(description, secret);
7947 if (this instanceof Symbol && arguments[1] !== secret) throw TypeError();
7948
7949 var descString = description === undefined ? undefined : String(description);
7950
7951 set_internal(this, '[[SymbolData]]', unique(128));
7952 set_internal(this, '[[Description]]', descString);
7953
7954 symbolMap[this] = this;
7955 return this;
7956 }
7957
7958 if (!('Symbol' in global) || OVERRIDE_NATIVE_FOR_TESTING)
7959 global.Symbol = Symbol;
7960
7961 // 19.4.2 Properties of the Symbol Constructor
7962
7963 // 19.4.2.1 Symbol.for (key)
7964 define(Symbol, 'for', function for_(key) {
7965 var stringKey = String(key);
7966 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
7967 var e = GlobalSymbolRegistry[i];
7968 if (SameValue(e['[[key]]'], stringKey)) return e['[[symbol]]'];
7969 }
7970 var newSymbol = Symbol(key);
7971 GlobalSymbolRegistry.push({'[[key]]': stringKey, '[[symbol]]': newSymbol});
7972 return newSymbol;
7973 });
7974
7975 // 19.4.2.2 Symbol.hasInstance
7976 // 19.4.2.3 Symbol.isConcatSpreadable
7977
7978 // 19.4.2.4 Symbol.iterator
7979 define(global.Symbol, 'iterator', global.Symbol('Symbol.iterator'));
7980
7981 // 19.4.2.5 Symbol.keyFor (sym)
7982 define(Symbol, 'keyFor', function keyFor(sym) {
7983 if (!(sym instanceof Symbol)) throw TypeError();
7984 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
7985 var e = GlobalSymbolRegistry[i];
7986 if (SameValue(e['[[symbol]]'], sym)) return e['[[key]]'];
7987 }
7988 return undefined;
7989 });
7990
7991 // 19.4.2.6 Symbol.match
7992 define(global.Symbol, 'match', global.Symbol('Symbol.match'));
7993
7994 // 19.4.2.7 Symbol.prototype
7995
7996 // 19.4.2.8 Symbol.replace
7997 define(global.Symbol, 'replace', global.Symbol('Symbol.replace'));
7998
7999 // 19.4.2.9 Symbol.search
8000 define(global.Symbol, 'search', global.Symbol('Symbol.search'));
8001
8002 // 19.4.2.10 Symbol.species
8003
8004 // 19.4.2.11 Symbol.search
8005 define(global.Symbol, 'split', global.Symbol('Symbol.split'));
8006
8007 // 19.4.2.12 Symbol.toPrimitive
8008
8009 // 19.4.2.13 Symbol.toStringTag
8010 define(global.Symbol, 'toStringTag', global.Symbol('Symbol.toStringTag'));
8011
8012 // 19.4.2.14 Symbol.unscopables
8013
8014 // 19.4.3 Properties of the Symbol Prototype Object
8015 // 19.4.3.1 Symbol.prototype.constructor
8016
8017 // 19.4.3.2 Symbol.prototype.toString ( )
8018 Object.defineProperty(Symbol.prototype, 'toString', {
8019 value: function toString() {
8020 var s = strict(this);
8021 var desc = s['[[Description]]'];
8022 return 'Symbol(' + (desc === undefined ? '' : desc) + s['[[SymbolData]]'] + ')';
8023 },
8024 configurable: true, writeable: true, enumerable: false });
8025
8026 // 19.4.3.3 Symbol.prototype.valueOf ( )
8027 Object.defineProperty(Symbol.prototype, 'valueOf', {
8028 value: function valueOf() {
8029 // To prevent automatic string conversion:
8030 throw TypeError();
8031
8032 // Spec has approximately the following:
8033 //var s = strict(this);
8034 //if (Type(s) === 'symbol') return s;
8035 //if (Type(s) !== 'object') throw TypeError();
8036 //if (!('[[SymbolData]]' in s)) throw TypeError();
8037 //return s['[[SymbolData]]'];
8038 },
8039 configurable: true, writeable: true, enumerable: false });
8040
8041 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
8042 // (Done later to polyfill partial implementations)
8043
8044 // 19.4.4 Properties of Symbol Instances
8045 }());
8046
8047 console.assert(typeof global.Symbol() === 'symbol' || symbolForKey(String(global.Symbol('x'))));
8048
8049 // Defined here so that other prototypes can reference it
8050 // 25.1.2 The %IteratorPrototype% Object
8051 var $IteratorPrototype$ = {};
8052
8053 //----------------------------------------
8054 // 6 ECMAScript Data Types and Values
8055 //----------------------------------------
8056
8057 // 6.1 ECMAScript Language Types
8058
8059 // "Type(x)" is used as shorthand for "the type of x"...
8060 function Type(v) {
8061 switch (typeof v) {
8062 case 'undefined': return 'undefined';
8063 case 'boolean': return 'boolean';
8064 case 'number': return 'number';
8065 case 'string': return 'string';
8066 case 'symbol': return 'symbol';
8067 default:
8068 if (v === null) return 'null';
8069 if (v instanceof global.Symbol) return 'symbol';
8070 return 'object';
8071 }
8072 }
8073
8074 // 6.1.5.1 Well-Known Symbols
8075 var $$iterator = global.Symbol.iterator,
8076 $$match = global.Symbol.match,
8077 $$replace = global.Symbol.replace,
8078 $$search = global.Symbol.search,
8079 $$split = global.Symbol.split,
8080 $$toStringTag = global.Symbol.toStringTag;
8081
8082 //----------------------------------------
8083 // 7 Abstract Operations
8084 //----------------------------------------
8085
8086 //----------------------------------------
8087 // 7.1 Type Conversion
8088 //----------------------------------------
8089
8090 // 7.1.1 ToPrimitive ( input [, PreferredType] )
8091 // just use valueOf()
8092
8093 // 7.1.2 ToBoolean ( argument )
8094 // just use Boolean()
8095
8096 // 7.1.3 ToNumber ( argument )
8097 // just use Number()
8098
8099 // 7.1.4 ToInteger ( argument )
8100 function ToInteger(n) {
8101 n = Number(n);
8102 if ($isNaN(n)) return 0;
8103 if (n === 0 || n === Infinity || n === -Infinity) return n;
8104 return ((n < 0) ? -1 : 1) * floor(abs(n));
8105 }
8106
8107 // 7.1.5 ToInt32 ( argument )
8108 function ToInt32(v) { return v >> 0; }
8109
8110 // 7.1.6 ToUint32 ( argument )
8111 function ToUint32(v) { return v >>> 0; }
8112
8113 // 7.1.7 ToInt16 ( argument )
8114 function ToInt16(v) { return (v << 16) >> 16; }
8115
8116 // 7.1.8 ToUint16 ( argument )
8117 function ToUint16(v) { return v & 0xFFFF; }
8118
8119 // 7.1.9 ToInt8 ( argument )
8120 function ToInt8(v) { return (v << 24) >> 24; }
8121
8122 // 7.1.10 ToUint8 ( argument )
8123 function ToUint8(v) { return v & 0xFF; }
8124
8125 // 7.1.11 ToUint8Clamp ( argument )
8126 function ToUint8Clamp(argument) {
8127 var number = Number(argument);
8128 if ($isNaN(number)) return 0;
8129 if (number <= 0) return 0;
8130 if (number >= 255) return 255;
8131 var f = floor(number);
8132 if ((f + 0.5) < number) return f + 1;
8133 if (number < (f + 0.5)) return f;
8134 if (f % 2) return f + 1;
8135 return f;
8136 }
8137
8138 // 7.1.12 ToString ( argument )
8139 // just use String()
8140
8141 // 7.1.13 ToObject ( argument )
8142 function ToObject(v) {
8143 if (v === null || v === undefined) throw TypeError();
8144 return Object(v);
8145 }
8146
8147 // 7.1.14 ToPropertyKey ( argument )
8148 function ToPropertyKey(v) {
8149 return String(v);
8150 }
8151
8152 // 7.1.15 ToLength ( argument )
8153 function ToLength(v) {
8154 var len = ToInteger(v);
8155 if (len <= 0) return 0;
8156 if (len === Infinity) return 0x20000000000000 - 1; // 2^53-1
8157 return min(len, 0x20000000000000 - 1); // 2^53-1
8158 }
8159
8160 // 7.1.16 CanonicalNumericIndexString ( argument )
8161
8162 //----------------------------------------
8163 // 7.2 Testing and Comparison Operations
8164 //----------------------------------------
8165
8166 // 7.2.1 RequireObjectCoercible ( argument )
8167 // 7.2.2 IsArray ( argument )
8168
8169 // 7.2.3 IsCallable ( argument )
8170 function IsCallable(o) { return typeof o === 'function'; }
8171
8172 // 7.2.4 IsConstructor ( argument )
8173 function IsConstructor(o) {
8174 // Hacks for Safari 7 TypedArray XXXConstructor objects
8175 if (/Constructor/.test(Object.prototype.toString.call(o))) return true;
8176 if (/Function/.test(Object.prototype.toString.call(o))) return true;
8177 // TODO: Can this be improved on?
8178 return typeof o === 'function';
8179 }
8180
8181 // 7.2.5 IsExtensible (O)
8182 // 7.2.6 IsInteger ( argument )
8183
8184 // 7.2.7 IsPropertyKey ( argument )
8185 function IsPropertyKey(argument) {
8186 if (Type(argument) === 'string') return true;
8187 if (Type(argument) === 'symbol') return true;
8188 return false;
8189 }
8190
8191 // 7.2.8 IsRegExp ( argument )
8192 // 7.2.5 IsConstructor ( argument )
8193
8194 // 7.2.9 SameValue(x, y)
8195 function SameValue(x, y) {
8196 if (typeof x !== typeof y) return false;
8197 switch (typeof x) {
8198 case 'undefined':
8199 return true;
8200 case 'number':
8201 if (x !== x && y !== y) return true;
8202 if (x === 0 && y === 0) return 1/x === 1/y;
8203 return x === y;
8204 case 'boolean':
8205 case 'string':
8206 case 'object':
8207 default:
8208 return x === y;
8209 }
8210 }
8211
8212 // 7.2.10 SameValueZero(x, y)
8213 function SameValueZero(x, y) {
8214 if (typeof x !== typeof y) return false;
8215 switch (typeof x) {
8216 case 'undefined':
8217 return true;
8218 case 'number':
8219 if (x !== x && y !== y) return true;
8220 return x === y;
8221 case 'boolean':
8222 case 'string':
8223 case 'object':
8224 default:
8225 return x === y;
8226 }
8227 }
8228
8229 //----------------------------------------
8230 // 7.3 Operations on Objects
8231 //----------------------------------------
8232
8233 // 7.3.1 Get (O, P)
8234 // - just use o.p or o[p]
8235
8236 // 7.3.2 GetV (V, P)
8237 function GetV(v, p) {
8238 var o = ToObject(v);
8239 return o[p];
8240 }
8241
8242 // 7.3.3 Set (O, P, V, Throw)
8243 // - just use o.p = v or o[p] = v
8244
8245
8246
8247
8248 // 7.3.9 GetMethod (O, P)
8249 function GetMethod(o, p) {
8250 var func = GetV(o, p);
8251 if (func === undefined || func === null) return undefined;
8252 if (!IsCallable(func)) throw TypeError();
8253 return func;
8254 }
8255
8256 // 7.3.10 HasProperty (O, P)
8257 function HasProperty(o, p) {
8258 while (o) {
8259 if (Object.prototype.hasOwnProperty.call(o, p)) return true;
8260 if (Type(o) !== 'object') return false;
8261 o = Object.getPrototypeOf(o);
8262 }
8263 return false;
8264 }
8265
8266 // 7.3.11 HasOwnProperty (O, P)
8267 function HasOwnProperty(o, p) {
8268 return Object.prototype.hasOwnProperty.call(o, p);
8269 }
8270
8271 //----------------------------------------
8272 // 7.4 Operations on Iterator Objects
8273 //----------------------------------------
8274
8275 // 7.4.1 GetIterator ( obj, method )
8276 function GetIterator(obj, method) {
8277 if (arguments.length < 2)
8278 method = GetMethod(obj, $$iterator);
8279 var iterator = method.call(obj);
8280 if (Type(iterator) !== 'object') throw TypeError();
8281 return iterator;
8282 }
8283
8284 // 7.4.2 IteratorNext ( iterator, value )
8285 function IteratorNext(iterator, value) {
8286 if (arguments.length < 2)
8287 var result = iterator.next();
8288 else
8289 result = iterator.next(value);
8290 if (Type(result) !== 'object') throw TypeError();
8291 return result;
8292 }
8293
8294 // 7.4.3 IteratorComplete ( iterResult )
8295 function IteratorComplete(iterResult) {
8296 console.assert(Type(iterResult) === 'object');
8297 return Boolean(iterResult.done);
8298 }
8299
8300 // 7.4.4 IteratorValue ( iterResult )
8301 function IteratorValue(iterResult) {
8302 console.assert(Type(iterResult) === 'object');
8303 return iterResult.value;
8304 }
8305
8306 // 7.4.5 IteratorStep ( iterator )
8307 function IteratorStep( iterator, value ) {
8308 var result = IteratorNext(iterator, value);
8309 var done = result['done'];
8310 if (Boolean(done) === true) return false;
8311 return result;
8312 }
8313
8314 // 7.4.6 IteratorClose( iterator, completion )
8315 function IteratorClose( iterator, completion ) {
8316 console.assert(Type(iterator) === 'object');
8317 var _return = GetMethod(iterator, 'return');
8318 if (_return === undefined) return completion;
8319 try {
8320 var innerResult = _return[iterator]();
8321 } catch (result) {
8322 // TODO: If completion.[[type]] is throw, return completion
8323 return result;
8324 }
8325 if (Type(innerResult) !== 'object') throw TypeError();
8326 return completion;
8327 }
8328
8329 // 7.4.7 CreateIterResultObject (value, done)
8330 function CreateIterResultObject(value, done) {
8331 console.assert(Type(done) === 'boolean');
8332 var obj = {};
8333 obj["value"] = value;
8334 obj["done"] = done;
8335 return obj;
8336 }
8337
8338 // 7.4.8 CreateListIterator (list)
8339 // 7.4.8.1 ListIterator next( )
8340 // 7.4.9 CreateCompoundIterator ( iterator1, iterator2 )
8341 // 7.4.9.1 CompoundIterator next( )
8342
8343 //----------------------------------------
8344 // 8 Executable Code and Execution Contexts
8345 //----------------------------------------
8346
8347 //----------------------------------------
8348 // 8.4 Jobs and Job Queues
8349 //----------------------------------------
8350
8351 // 8.4.1 EnqueueJob ( queueName, job, arguments)
8352 function EnqueueJob(queueName, job, args) {
8353 var fn = function() { job.apply(undefined, args); };
8354 enqueue(fn);
8355 }
8356
8357 // 8.4.2 NextJob result
8358 function NextJob(result) {
8359 // no-op
8360 }
8361
8362 //----------------------------------------
8363 // 9 Ordinary and Exotic Objects Behaviors
8364 //----------------------------------------
8365
8366 // 9.1.11 [[Enumerate]] ()
8367 function Enumerate(obj) {
8368 var e = [];
8369 if (Object(obj) !== obj) return e;
8370 var visited = new Set;
8371 while (obj !== null) {
8372 Object.getOwnPropertyNames(obj).forEach(function(name) {
8373 if (!visited.has(name)) {
8374 var desc = Object.getOwnPropertyDescriptor(obj, name);
8375 if (desc) {
8376 visited.add(name);
8377 if (desc.enumerable) e.push(name);
8378 }
8379 }
8380 });
8381 obj = Object.getPrototypeOf(obj);
8382 }
8383 return e[$$iterator]();
8384 }
8385
8386 // 9.1.12 [[OwnPropertyKeys]] ( )
8387 function OwnPropertyKeys(o) {
8388 return Object.getOwnPropertyNames(o);
8389 }
8390
8391 // 9.1.13 ObjectCreate(proto, internalSlotsList)
8392 function ObjectCreate(proto, internalSlotsList) {
8393 return Object.create(proto, internalSlotsList);
8394 }
8395
8396 // ---------------------------------------
8397 // 19 Fundamental Objects
8398 // ---------------------------------------
8399
8400 // ---------------------------------------
8401 // 19.1 Object Objects
8402 // ---------------------------------------
8403
8404 // 19.1.1 The Object Constructor
8405 // 19.1.1.1 Object ( [ value ] )
8406 // 19.1.2 Properties of the Object Constructor
8407 // 19.1.2.1 Object.assign ( target, ...sources )
8408 define(
8409 Object, 'assign',
8410 function assign(target, /*...*/sources) {
8411 var to = ToObject(target);
8412 if (arguments.length < 2) return to;
8413
8414 var sourcesIndex = 1;
8415 while (sourcesIndex < arguments.length) {
8416 var nextSource = arguments[sourcesIndex++];
8417 if (nextSource === undefined || nextSource === null) {
8418 var keys = [];
8419 } else {
8420 var from = ToObject(nextSource);
8421 keys = OwnPropertyKeys(from);
8422 }
8423 for (var keysIndex = 0; keysIndex < keys.length; ++keysIndex) {
8424 var nextKey = keys[keysIndex];
8425 var desc = Object.getOwnPropertyDescriptor(from, nextKey);
8426 if (desc !== undefined && desc.enumerable) {
8427 var propValue = from[nextKey];
8428 to[nextKey] = propValue;
8429 }
8430 }
8431 }
8432 return to;
8433 });
8434
8435 // 19.1.2.2 Object.create ( O [ , Properties ] )
8436 // 19.1.2.3 Object.defineProperties ( O, Properties )
8437 // 19.1.2.4 Object.defineProperty ( O, P, Attributes )
8438 // 19.1.2.5 Object.freeze ( O )
8439 // 19.1.2.6 Object.getOwnPropertyDescriptor ( O, P )
8440
8441 (function() {
8442 var nativeSymbols = (typeof global.Symbol() === 'symbol'),
8443 $getOwnPropertyNames = Object.getOwnPropertyNames,
8444 $keys = Object.keys,
8445 $window_names = (typeof window === 'object' ? $getOwnPropertyNames(window) : []);
8446
8447 function isStringKey(k) { return !symbolForKey(k); }
8448
8449 // 19.1.2.7 Object.getOwnPropertyNames ( O )
8450 define(
8451 Object, 'getOwnPropertyNames',
8452 function getOwnPropertyNames(o) {
8453 if (Object.prototype.toString.call(o) === '[object Window]') {
8454 // Workaround for cross-realm calling by IE itself.
8455 // https://github.com/inexorabletash/polyfill/issues/96
8456 try {
8457 return $getOwnPropertyNames(o).filter(isStringKey);
8458 } catch (_) {
8459 return $window_names.slice();
8460 }
8461 }
8462 return $getOwnPropertyNames(o).filter(isStringKey);
8463 }, !nativeSymbols);
8464
8465 // 19.1.2.8 Object.getOwnPropertySymbols ( O )
8466 define(
8467 Object, 'getOwnPropertySymbols',
8468 function getOwnPropertySymbols(o) {
8469 return $getOwnPropertyNames(o).filter(symbolForKey).map(symbolForKey);
8470 }, !nativeSymbols);
8471
8472 // 19.1.2.14 Object.keys ( O )
8473 define(
8474 Object, 'keys',
8475 function keys(o) {
8476 return $keys(o).filter(isStringKey);
8477 }, !nativeSymbols);
8478 }());
8479
8480 // 19.1.2.9 Object.getPrototypeOf ( O )
8481 // 19.1.2.10 Object.is ( value1, value2 )
8482 define(
8483 Object, 'is',
8484 function is(value1, value2) {
8485 return SameValue(value1, value2);
8486 });
8487
8488 // 19.1.2.11 Object.isExtensible ( O )
8489 // 19.1.2.12 Object.isFrozen ( O )
8490 // 19.1.2.13 Object.isSealed ( O )
8491
8492 // 19.1.2.14 Object.keys ( O )
8493 // see above
8494
8495 // 19.1.2.15 Object.preventExtensions ( O )
8496 // 19.1.2.16 Object.prototype
8497 // 19.1.2.17 Object.seal ( O )
8498
8499 // 19.1.2.18 Object.setPrototypeOf ( O, proto )
8500 define(
8501 Object, 'setPrototypeOf',
8502 function setPrototypeOf(o, proto) {
8503 if (Type(o) !== 'object') throw TypeError();
8504 if (Type(proto) !== 'object' && Type(proto) !== 'null') throw TypeError();
8505 o.__proto__ = proto;
8506 return o;
8507 }
8508 );
8509
8510 // 19.1.3 Properties of the Object Prototype Object
8511 // 19.1.3.1 Object.prototype.constructor
8512 // 19.1.3.2 Object.prototype.hasOwnProperty ( V )
8513 // 19.1.3.3 Object.prototype.isPrototypeOf ( V )
8514 // 19.1.3.4 Object.prototype.propertyIsEnumerable ( V )
8515 // 19.1.3.5 Object.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
8516 // 19.1.3.6 Object.prototype.toString ( )
8517 hook(Object.prototype, 'toString',
8518 function() {
8519 var o = strict(this);
8520 if (o === Object(o) && $$toStringTag in o) {
8521 return '[object ' + o[$$toStringTag] + ']';
8522 }
8523 return undefined;
8524 });
8525
8526 // 19.1.3.7 Object.prototype.valueOf ( )
8527 // 19.1.4 Properties of Object Instances
8528
8529 // ---------------------------------------
8530 // 19.2 Function Objects
8531 // ---------------------------------------
8532
8533 // 19.2.1 The Function Constructor
8534 // 19.2.1.1 Function ( p1, p2, … , pn, body )
8535 // 19.2.2 Properties of the Function Constructor
8536 // 19.2.2.1 Function.length
8537 // 19.2.2.2 Function.prototype
8538 // 19.2.3 Properties of the Function Prototype Object
8539 // 19.2.3.1 Function.prototype.apply ( thisArg, argArray )
8540 // 19.2.3.2 Function.prototype.bind ( thisArg , ...args)
8541 // 19.2.3.3 Function.prototype.call (thisArg , ...args)
8542 // 19.2.3.4 Function.prototype.constructor
8543 // 19.2.3.5 Function.prototype.toString ( )
8544 // 19.2.3.6 Function.prototype[@@hasInstance] ( V )
8545 // 19.2.4 Function Instances
8546 // 19.2.4.1 length
8547 // 19.2.4.2 name
8548 // 19.2.4.3 prototype
8549
8550 // (No polyfillable changes from ES5)
8551
8552 // ---------------------------------------
8553 // 19.3 Boolean Objects
8554 // ---------------------------------------
8555
8556 // 19.3.1 The Boolean Constructor
8557 // 19.3.1.1 Boolean ( value )
8558 // 19.3.2 Properties of the Boolean Constructor
8559 // 19.3.2.1 Boolean.prototype
8560 // 19.3.3 Properties of the Boolean Prototype Object
8561 // 19.3.3.1 Boolean.prototype.constructor
8562 // 19.3.3.2 Boolean.prototype.toString ( )
8563 // 19.3.3.3 Boolean.prototype.valueOf ( )
8564 // 19.3.4 Properties of Boolean Instances
8565
8566 // (No polyfillable changes from ES5)
8567
8568 // ---------------------------------------
8569 // 19.4 Symbol Objects
8570 // ---------------------------------------
8571
8572 // Moved earlier in this script, so that other polyfills can depend on them.
8573
8574 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
8575 define(global.Symbol.prototype, global.Symbol.toStringTag, 'Symbol');
8576
8577 // ---------------------------------------
8578 // 19.5 Error Objects
8579 // ---------------------------------------
8580
8581 // 19.5.1 The Error Constructor
8582 // 19.5.1.1 Error ( message )
8583 // 19.5.1.2 new Error( ...argumentsList )
8584 // 19.5.2 Properties of the Error Constructor
8585 // 19.5.2.1 Error.prototype
8586 // 19.5.3 Properties of the Error Prototype Object
8587 // 19.5.3.1 Error.prototype.constructor
8588 // 19.5.3.2 Error.prototype.message
8589 // 19.5.3.3 Error.prototype.name
8590 // 19.5.3.4 Error.prototype.toString ( )
8591 // 19.5.4 Properties of Error Instances
8592 // 19.5.5 Native Error Types Used in This Standard
8593 // 19.5.5.1 EvalError
8594 // 19.5.5.2 RangeError
8595 // 19.5.5.3 ReferenceError
8596 // 19.5.5.4 SyntaxError
8597 // 19.5.5.5 TypeError
8598 // 19.5.5.6 URIError
8599 // 19.5.6 NativeError Object Structure
8600 // 19.5.6.1 NativeError Constructors
8601 // 19.5.6.1.1 NativeError ( message )
8602 // 19.5.6.1.2 new NativeError ( ...argumentsList )
8603 // 19.5.6.2 Properties of the NativeError Constructors
8604 // 19.5.6.2.1 NativeError.prototype
8605 // 19.5.6.3 Properties of the NativeError Prototype Objects
8606 // 19.5.6.4 Properties of NativeError Instances
8607
8608 // (No polyfillable changes from ES5)
8609
8610 // ---------------------------------------
8611 // 20 Numbers and Dates
8612 // ---------------------------------------
8613
8614 // ---------------------------------------
8615 // 20.1 Number Objects
8616 // ---------------------------------------
8617
8618 // 20.1.1 The Number Constructor
8619 // 20.1.1.1 Number ( [ value ] )
8620 // 20.1.1.2 new Number ( ...argumentsList )
8621 // 20.1.2 Properties of the Number Constructor
8622
8623 // 20.1.2.1 Number.EPSILON
8624 define(
8625 Number, 'EPSILON',
8626 (function () {
8627 var next, result;
8628 for (next = 1; 1 + next !== 1; next = next / 2)
8629 result = next;
8630 return result;
8631 }()));
8632
8633 // 20.1.2.2 Number.isFinite ( number )
8634 define(
8635 Number, 'isFinite',
8636 function isFinite(number) {
8637 if (Type(number) !== 'number') return false;
8638 if (number !== number || number === +Infinity || number === -Infinity) return false;
8639 return true;
8640 });
8641
8642 // 20.1.2.3 Number.isInteger ( number )
8643 define(
8644 Number, 'isInteger',
8645 function isInteger(number) {
8646 if (Type(number) !== 'number') return false;
8647 if (number !== number || number === +Infinity || number === -Infinity) return false;
8648 var integer = ToInteger(number);
8649 if (integer !== number) return false;
8650 return true;
8651 });
8652
8653 // 20.1.2.4 Number.isNaN ( number )
8654 define(
8655 Number, 'isNaN',
8656 function isNaN(number) {
8657 if (Type(number) !== 'number') return false;
8658 if (number !== number) return true;
8659 return false;
8660 });
8661
8662 // 20.1.2.5 Number.isSafeInteger ( number )
8663 define(
8664 Number, 'isSafeInteger',
8665 function isSafeInteger(number) {
8666 if (Type(number) !== 'number') return false;
8667 if (number !== number || number === +Infinity || number === -Infinity) return false;
8668 var integer = ToInteger(number);
8669 if (integer !== number) return false;
8670 if (abs(integer) <= (0x20000000000000 - 1)) // 2^53-1
8671 return true;
8672 return false;
8673 });
8674
8675 // 20.1.2.6 Number.MAX_SAFE_INTEGER
8676 define(
8677 Number, 'MAX_SAFE_INTEGER',
8678 9007199254740991); // 2^53-1
8679
8680 // 20.1.2.7 Number.MAX_VALUE
8681
8682 // 20.1.2.8 Number.MIN_SAFE_INTEGER
8683 define(
8684 Number, 'MIN_SAFE_INTEGER',
8685 -9007199254740991); // -2^53+1
8686
8687 // 20.1.2.9 Number.MIN_VALUE
8688 // 20.1.2.10 Number.NaN
8689 // 20.1.2.11 Number.NEGATIVE_INFINITY
8690
8691 // 20.1.2.12 Number.parseFloat ( string )
8692 define(Number, 'parseFloat', $parseFloat);
8693
8694 // 20.1.2.13 Number.parseInt ( string, radix )
8695 define(Number, 'parseInt', $parseInt);
8696
8697 // 20.1.2.14 Number.POSITIVE_INFINITY
8698 // 20.1.2.15 Number.prototype
8699
8700 // 20.1.3 Properties of the Number Prototype Object
8701 // 20.1.3.1 Number.prototype.constructor
8702 // 20.1.3.2 Number.prototype.toExponential ( fractionDigits )
8703 // 20.1.3.3 Number.prototype.toFixed ( fractionDigits )
8704 // 20.1.3.4 Number.prototype.toLocaleString( [ reserved1 [ , reserved2 ] ])
8705 // 20.1.3.5 Number.prototype.toPrecision ( precision )
8706 // 20.1.3.6 Number.prototype.toString ( [ radix ] )
8707 // 20.1.3.7 Number.prototype.valueOf ( )
8708 // 20.1.4 Properties of Number Instances
8709
8710 // ---------------------------------------
8711 // 20.2 The Math Object
8712 // ---------------------------------------
8713
8714 // 20.2.1 Value Properties of the Math Object
8715 // 20.2.1.1 Math.E
8716 // 20.2.1.2 Math.LN10
8717 // 20.2.1.3 Math.LN2
8718 // 20.2.1.4 Math.LOG10E
8719 // 20.2.1.5 Math.LOG2E
8720 // 20.2.1.6 Math.PI
8721 // 20.2.1.7 Math.SQRT1_2
8722 // 20.2.1.8 Math.SQRT2
8723
8724 // 20.2.1.9 Math [ @@toStringTag ]
8725 define(Math, $$toStringTag, 'Math');
8726
8727 // 20.2.2 Function Properties of the Math Object
8728 // 20.2.2.1 Math.abs ( x )
8729 // 20.2.2.2 Math.acos ( x )
8730
8731 // 20.2.2.3 Math.acosh(x)
8732 define(
8733 Math, 'acosh',
8734 function acosh(x) {
8735 x = Number(x);
8736 return log(x + sqrt(x * x - 1));
8737 });
8738
8739 // 20.2.2.4 Math.asin ( x )
8740
8741 // 20.2.2.5 Math.asinh( x )
8742 define(
8743 Math, 'asinh',
8744 function asinh(x) {
8745 x = Number(x);
8746 if (SameValue(x, -0)) {
8747 return x;
8748 }
8749 var s = sqrt(x * x + 1);
8750 return (s === -x) ? log(0) : log(x + s);
8751 });
8752
8753 // 20.2.2.6 Math.atan ( x )
8754
8755 // 20.2.2.7 Math.atanh( x )
8756 define(
8757 Math, 'atanh',
8758 function atanh(x) {
8759 x = Number(x);
8760 return (x === 0) ? x : log((1 + x) / (1 - x)) / 2;
8761 });
8762
8763 // 20.2.2.8 Math.atan2 ( y, x )
8764
8765 // 20.2.2.9 Math.cbrt ( x )
8766 define(
8767 Math, 'cbrt',
8768 function cbrt(x) {
8769 x = Number(x);
8770 if ($isNaN(x/x)) {
8771 return x;
8772 }
8773 var r = pow(abs(x), 1/3);
8774 var t = x/r/r;
8775 return r + (r * (t-r) / (2*r + t));
8776 });
8777
8778 // 20.2.2.10 Math.ceil ( x )
8779
8780 // 20.2.2.11 Math.clz32 ( x )
8781 define(
8782 Math, 'clz32',
8783 function clz32(x) {
8784 function clz8(x) {
8785 return (x & 0xf0) ? (x & 0x80 ? 0 : x & 0x40 ? 1 : x & 0x20 ? 2 : 3) :
8786 (x & 0x08 ? 4 : x & 0x04 ? 5 : x & 0x02 ? 6 : x & 0x01 ? 7 : 8);
8787 }
8788 x = ToUint32(x);
8789 return x & 0xff000000 ? clz8(x >> 24) :
8790 x & 0xff0000 ? clz8(x >> 16) + 8 :
8791 x & 0xff00 ? clz8(x >> 8) + 16 : clz8(x) + 24;
8792 });
8793
8794
8795
8796 // 20.2.2.12 Math.cos ( x )
8797
8798 // 20.2.2.13 Math.cosh ( x )
8799 define(
8800 Math, 'cosh',
8801 function cosh(x) {
8802 x = Number(x);
8803 return (pow(E, x) + pow(E, -x)) / 2;
8804 });
8805
8806 // 20.2.2.14 Math.exp ( x )
8807
8808 // 20.2.2.15 Math.expm1 ( x )
8809 define(
8810 Math, 'expm1',
8811 function expm1(x) {
8812 x = Number(x);
8813 // from: http://www.johndcook.com/cpp_log1p.html
8814 if (SameValue(x, -0)) {
8815 return -0;
8816 } else if (abs(x) < 1e-5) {
8817 return x + 0.5 * x * x; // two terms of Taylor expansion
8818 } else {
8819 return exp(x) - 1;
8820 }
8821 });
8822
8823 // 20.2.2.16 Math.floor ( x )
8824
8825 // 20.2.2.17 Math.fround ( x )
8826 define(
8827 Math, 'fround',
8828 function fround(x) {
8829 if ($isNaN(x)) {
8830 return NaN;
8831 }
8832 if (1/x === +Infinity || 1/x === -Infinity || x === +Infinity || x === -Infinity) {
8833 return x;
8834 }
8835 return (new Float32Array([x]))[0];
8836 });
8837
8838 // 20.2.2.18 Math.hypot ( value1 [, value2 [ ... ] ] )
8839 define(
8840 Math, 'hypot',
8841 function hypot() {
8842 var values = [];
8843 var m = 0, sawNaN = false;
8844 for (var i = 0; i < arguments.length; ++i) {
8845 var n = abs(Number(arguments[i]));
8846 if (n === Infinity) return n;
8847 if (n !== n) sawNaN = true;
8848 if (n > m) m = n;
8849 values[i] = n;
8850 }
8851 if (sawNaN) return NaN;
8852 if (m === 0) return +0;
8853 var sum = +0;
8854 for (i = 0; i < values.length; ++i) {
8855 var r = values[i] / m;
8856 sum = sum + r * r;
8857 }
8858 return m * sqrt(sum);
8859 });
8860
8861 // 20.2.2.19 Math.imul ( x, y )
8862 define(
8863 Math, 'imul',
8864 function imul(x, y) {
8865 var a = ToUint32(x);
8866 var b = ToUint32(y);
8867 // (slow but accurate)
8868 var ah = (a >>> 16) & 0xffff;
8869 var al = a & 0xffff;
8870 var bh = (b >>> 16) & 0xffff;
8871 var bl = b & 0xffff;
8872 return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0)|0);
8873 }, ('imul' in Math && Math.imul(1, 0x80000000) === 0) // Safari 7 bug
8874 );
8875
8876 // 20.2.2.20 Math.log ( x )
8877
8878 // 20.2.2.21 Math.log1p ( x )
8879 define(
8880 Math, 'log1p',
8881 function log1p(x) {
8882 x = Number(x);
8883 // from: http://www.johndcook.com/cpp_expm1.html
8884 if (x < -1) {
8885 return NaN;
8886 } else if (SameValue(x, -0)) {
8887 return -0;
8888 } else if (abs(x) > 1e-4) {
8889 return log(1 + x);
8890 } else {
8891 return (-0.5 * x + 1) * x;
8892 }
8893 });
8894
8895 // 20.2.2.22 Math.log10 ( x )
8896 define(
8897 Math, 'log10',
8898 function log10(x) {
8899 x = Number(x);
8900 return log(x) * LOG10E;
8901 });
8902
8903 // 20.2.2.23 Math.log2 ( x )
8904 define(
8905 Math, 'log2',
8906 function log2(x) {
8907 x = Number(x);
8908 return log(x) * LOG2E;
8909 });
8910
8911 // 20.2.2.24 Math.max ( value1, value2 , ...values )
8912 // 20.2.2.25 Math.min ( value1, value2 , ...values )
8913 // 20.2.2.26 Math.pow ( x, y )
8914 // 20.2.2.27 Math.random ( )
8915 // 20.2.2.28 Math.round ( x )
8916
8917 // 20.2.2.29 Math.sign(x)
8918 define(
8919 Math, 'sign',
8920 function sign(x) {
8921 x = Number(x);
8922 return x < 0 ? -1 : x > 0 ? 1 : x;
8923 });
8924
8925 // 20.2.2.30 Math.sin ( x )
8926
8927 // 20.2.2.31 Math.sinh( x )
8928 define(
8929 Math, 'sinh',
8930 function sinh(x) {
8931 x = Number(x);
8932 return SameValue(x, -0) ? x : (pow(E, x) - pow(E, -x)) / 2;
8933 });
8934
8935 // 20.2.2.32 Math.sqrt ( x )
8936 // 20.2.2.33 Math.tan ( x )
8937
8938 // 20.2.2.34 Math.tanh ( x )
8939 define(
8940 Math, 'tanh',
8941 function tanh(x) {
8942 x = Number(x);
8943 var n = pow(E, 2 * x) - 1,
8944 d = pow(E, 2 * x) + 1;
8945 if (SameValue(x, -0))
8946 return x;
8947 return (n === d) ? 1 : n / d; // Handle Infinity/Infinity
8948 });
8949
8950 // 20.2.2.35 Math.trunc ( x )
8951 define(
8952 Math, 'trunc',
8953 function trunc(x) {
8954 x = Number(x);
8955 return $isNaN(x) ? NaN :
8956 x < 0 ? ceil(x) : floor(x);
8957 });
8958
8959 // ---------------------------------------
8960 // 20.3 Date Objects
8961 // ---------------------------------------
8962
8963 // 20.3.1 Overview of Date Objects and Definitions of Abstract Operations
8964 // 20.3.1.1 Time Values and Time Range
8965 // 20.3.1.2 Day Number and Time within Day
8966 // 20.3.1.3 Year Number
8967 // 20.3.1.4 Month Number
8968 // 20.3.1.5 Date Number
8969 // 20.3.1.6 Week Day
8970 // 20.3.1.7 Local Time Zone Adjustment
8971 // 20.3.1.8 Daylight Saving Time Adjustment
8972 // 20.3.1.9 Local Time
8973 // 20.3.1.10 Hours, Minutes, Second, and Milliseconds
8974 // 20.3.1.11 MakeTime (hour, min, sec, ms)
8975 // 20.3.1.12 MakeDay (year, month, date)
8976 // 20.3.1.13 MakeDate (day, time)
8977 // 20.3.1.14 TimeClip (time)
8978 // 20.3.1.15 Date Time String Format
8979 // 20.3.1.15.1 Extended years
8980 // 20.3.2 The Date Constructor
8981 // 20.3.2.1 Date ( year, month [, date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
8982 // 20.3.2.2 Date ( value )
8983 // 20.3.2.3 Date ( )
8984 // 20.3.3 Properties of the Date Constructor
8985 // 20.3.3.1 Date.now ( )
8986 // 20.3.3.2 Date.parse (string)
8987 // 20.3.3.3 Date.prototype
8988 // 20.3.3.4 Date.UTC ( year, month [ , date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
8989 // 20.3.4 Properties of the Date Prototype Object
8990 // 20.3.4.1 Date.prototype.constructor
8991 // 20.3.4.2 Date.prototype.getDate ( )
8992 // 20.3.4.3 Date.prototype.getDay ( )
8993 // 20.3.4.4 Date.prototype.getFullYear ( )
8994 // 20.3.4.5 Date.prototype.getHours ( )
8995 // 20.3.4.6 Date.prototype.getMilliseconds ( )
8996 // 20.3.4.7 Date.prototype.getMinutes ( )
8997 // 20.3.4.8 Date.prototype.getMonth ( )
8998 // 20.3.4.9 Date.prototype.getSeconds ( )
8999 // 20.3.4.10 Date.prototype.getTime ( )
9000 // 20.3.4.11 Date.prototype.getTimezoneOffset ( )
9001 // 20.3.4.12 Date.prototype.getUTCDate ( )
9002 // 20.3.4.13 Date.prototype.getUTCDay ( )
9003 // 20.3.4.14 Date.prototype.getUTCFullYear ( )
9004 // 20.3.4.15 Date.prototype.getUTCHours ( )
9005 // 20.3.4.16 Date.prototype.getUTCMilliseconds ( )
9006 // 20.3.4.17 Date.prototype.getUTCMinutes ( )
9007 // 20.3.4.18 Date.prototype.getUTCMonth ( )
9008 // 20.3.4.19 Date.prototype.getUTCSeconds ( )
9009 // 20.3.4.20 Date.prototype.setDate ( date )
9010 // 20.3.4.21 Date.prototype.setFullYear ( year [ , month [ , date ] ] )
9011 // 20.3.4.22 Date.prototype.setHours ( hour [ , min [ , sec [ , ms ] ] ] )
9012 // 20.3.4.23 Date.prototype.setMilliseconds ( ms )
9013 // 20.3.4.24 Date.prototype.setMinutes ( min [ , sec [ , ms ] ] )
9014 // 20.3.4.25 Date.prototype.setMonth ( month [ , date ] )
9015 // 20.3.4.26 Date.prototype.setSeconds ( sec [ , ms ] )
9016 // 20.3.4.27 Date.prototype.setTime ( time )
9017 // 20.3.4.28 Date.prototype.setUTCDate ( date )
9018 // 20.3.4.29 Date.prototype.setUTCFullYear ( year [ , month [ , date ] ] )
9019 // 20.3.4.30 Date.prototype.setUTCHours ( hour [ , min [ , sec [ , ms ] ] ] )
9020 // 20.3.4.31 Date.prototype.setUTCMilliseconds ( ms )
9021 // 20.3.4.32 Date.prototype.setUTCMinutes ( min [ , sec [, ms ] ] )
9022 // 20.3.4.33 Date.prototype.setUTCMonth ( month [ , date ] )
9023 // 20.3.4.34 Date.prototype.setUTCSeconds ( sec [ , ms ] )
9024 // 20.3.4.35 Date.prototype.toDateString ( )
9025 // 20.3.4.36 Date.prototype.toISOString ( )
9026 // 20.3.4.37 Date.prototype.toJSON ( key )
9027 // 20.3.4.38 Date.prototype.toLocaleDateString ( [ reserved1 [ , reserved2 ] ] )
9028 // 20.3.4.39 Date.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
9029 // 20.3.4.40 Date.prototype.toLocaleTimeString ( [ reserved1 [ , reserved2 ] ] )
9030 // 20.3.4.41 Date.prototype.toString ( )
9031 // 20.3.4.42 Date.prototype.toTimeString ( )
9032 // 20.3.4.43 Date.prototype.toUTCString ( )
9033 // 20.3.4.44 Date.prototype.valueOf ( )
9034 // 20.3.4.45 Date.prototype [ @@toPrimitive ] ( hint )
9035 // 20.3.5 Properties of Date Instances
9036
9037 // (No polyfillable changes from ES5)
9038
9039 // ---------------------------------------
9040 // 21 Text Processing
9041 // ---------------------------------------
9042
9043 var string_regexp_dispatch = (function() {
9044 var faux = {}, secret = Symbol();
9045 faux[Symbol.match] = function() { return secret; };
9046 return ("").match(faux) === secret;
9047 }());
9048
9049 // 21.1 String Objects
9050 // 21.1.1 The String Constructor
9051 // 21.1.1.1 String ( value )
9052 // 21.1.2 Properties of the String Constructor
9053 // 21.1.2.1 String.fromCharCode ( ...codeUnits )
9054
9055 // 21.1.2.2 String.fromCodePoint ( ...codePoints )
9056 define(
9057 String, 'fromCodePoint',
9058 function fromCodePoint(/*...codePoints*/) {
9059 var codePoints = arguments,
9060 length = codePoints.length,
9061 elements = [],
9062 nextIndex = 0;
9063 while (nextIndex < length) {
9064 var next = codePoints[nextIndex];
9065 var nextCP = Number(next);
9066 if (!SameValue(nextCP, ToInteger(nextCP)) ||
9067 nextCP < 0 || nextCP > 0x10FFFF) {
9068 throw RangeError('Invalid code point ' + nextCP);
9069 }
9070 if (nextCP < 0x10000) {
9071 elements.push(String.fromCharCode(nextCP));
9072 } else {
9073 nextCP -= 0x10000;
9074 elements.push(String.fromCharCode((nextCP >> 10) + 0xD800));
9075 elements.push(String.fromCharCode((nextCP % 0x400) + 0xDC00));
9076 }
9077 nextIndex += 1;
9078 }
9079 return elements.join('');
9080 });
9081
9082 // 21.1.2.3 String.prototype
9083
9084 // 21.1.2.4 String.raw ( template , ...substitutions )
9085 define(
9086 String, 'raw',
9087 function raw(template /*, ...substitutions*/) {
9088 var substitutions = [].slice.call(arguments, 1);
9089
9090 var cooked = Object(template);
9091 var rawValue = cooked['raw'];
9092 var raw = Object(rawValue);
9093 var len = raw['length'];
9094 var literalSegments = ToLength(len);
9095 if (literalSegments <= 0) return '';
9096 var stringElements = [];
9097 var nextIndex = 0;
9098 while (true) {
9099 var next = raw[nextIndex];
9100 var nextSeg = String(next);
9101 stringElements.push(nextSeg);
9102 if (nextIndex + 1 === literalSegments)
9103 return stringElements.join('');
9104 next = substitutions[nextIndex];
9105 var nextSub = String(next);
9106 stringElements.push(nextSub);
9107 nextIndex = nextIndex + 1;
9108 }
9109 });
9110
9111 // See https://githib.com/inexorabletash/uate for a more useful version.
9112
9113 // 21.1.3 Properties of the String Prototype Object
9114 // 21.1.3.1 String.prototype.charAt ( pos )
9115 // 21.1.3.2 String.prototype.charCodeAt ( pos )
9116
9117 // 21.1.3.3 String.prototype.codePointAt ( pos )
9118 define(
9119 String.prototype, 'codePointAt',
9120 function codePointAt(pos) {
9121 var o = strict(this);
9122 var s = String(o);
9123 var position = ToInteger(pos);
9124 var size = s.length;
9125 if (position < 0 || position >= size) return undefined;
9126 var first = s.charCodeAt(position);
9127 if (first < 0xD800 || first > 0xDBFF || position + 1 === size) return first;
9128 var second = s.charCodeAt(position + 1);
9129 if (second < 0xDC00 || second > 0xDFFF) return first;
9130 return ((first - 0xD800) * 1024) + (second - 0xDC00) + 0x10000;
9131 });
9132
9133 // 21.1.3.4 String.prototype.concat ( ...args )
9134 // 21.1.3.5 String.prototype.constructor
9135
9136 // 21.1.3.6 String.prototype.endsWith ( searchString [ , endPosition] )
9137 define(
9138 String.prototype, 'endsWith',
9139 function endsWith(searchString) {
9140 var endPosition = arguments[1];
9141
9142 var o = strict(this);
9143 var s = String(o);
9144 var searchStr = String(searchString);
9145 var len = s.length;
9146 var pos = (endPosition === undefined) ? len : ToInteger(endPosition);
9147 var end = min(max(pos, 0), len);
9148 var searchLength = searchStr.length;
9149 var start = end - searchLength;
9150 if (start < 0) return false;
9151 if (s.substring(start, start + searchLength) === searchStr) return true;
9152 return false;
9153 });
9154
9155 // 21.1.3.7 String.prototype.includes ( searchString [ , position ] )
9156 define(
9157 String.prototype, 'includes',
9158 function includes(searchString) {
9159 var position = arguments[1];
9160
9161 var o = strict(this);
9162 var s = String(o);
9163 var searchStr = String(searchString);
9164 var pos = ToInteger(position);
9165 var len = s.length;
9166 var start = min(max(pos, 0), len);
9167 return s.indexOf(searchStr, start) !== -1;
9168 });
9169
9170 // 21.1.3.8 String.prototype.indexOf ( searchString [ , position ] )
9171 // 21.1.3.9 String.prototype.lastIndexOf ( searchString [ , position ] )
9172 // 21.1.3.10 String.prototype.localeCompare ( that [, reserved1 [ , reserved2 ] ] )
9173 // 21.1.3.11 String.prototype.match ( regexp )
9174 define(
9175 String.prototype, 'match',
9176 function match(regexp) {
9177 var o = strict(this);
9178 var s = String(o);
9179 if (HasProperty(regexp, $$match)) var rx = regexp;
9180 else rx = new RegExp(regexp);
9181 return rx[$$match](s);
9182 }, !string_regexp_dispatch);
9183
9184 // 21.1.3.12 String.prototype.normalize ( [ form ] )
9185
9186 // Not practical due to table sizes; if needed, pull in:
9187 // https://github.com/walling/unorm/
9188
9189 // 21.1.3.13 String.prototype.repeat ( count )
9190 define(
9191 String.prototype, 'repeat',
9192 function repeat(count) {
9193 var o = strict(this);
9194 var s = String(o);
9195 var n = ToInteger(count);
9196 if (n < 0) throw RangeError();
9197 if (n === Infinity) throw RangeError();
9198 var t = new Array(n + 1).join(s);
9199 return t;
9200 });
9201
9202 // 21.1.3.14 String.prototype.replace (searchValue, replaceValue )
9203 define(
9204 String.prototype, 'replace',
9205 function replace(searchValue, replaceValue) {
9206 var o = strict(this);
9207 if (HasProperty(searchValue, $$replace))
9208 return searchValue[$$replace](o, replaceValue);
9209 return orig_replace.call(o, searchValue, replaceValue);
9210 }, !string_regexp_dispatch);
9211
9212 // 21.1.3.15 String.prototype.search ( regexp )
9213 define(
9214 String.prototype, 'search',
9215 function search(regexp) {
9216 var o = strict(this);
9217 var string = String(o);
9218 if (HasProperty(regexp, $$search)) var rx = regexp;
9219 else rx = new RegExp(regexp);
9220 return rx[$$search](string);
9221 }, !string_regexp_dispatch);
9222
9223 // 21.1.3.16 String.prototype.slice ( start, end )
9224 // 21.1.3.17 String.prototype.split ( separator, limit )
9225 define(
9226 String.prototype, 'split',
9227 function split(separator, limit) {
9228 var o = strict(this);
9229 if (HasProperty(separator, $$split))
9230 return separator[$$split](o, limit);
9231 return orig_split.call(o, separator, limit);
9232 }, !string_regexp_dispatch);
9233
9234 // 21.1.3.18 String.prototype.startsWith ( searchString [, position ] )
9235 define(
9236 String.prototype, 'startsWith',
9237 function startsWith(searchString) {
9238 var position = arguments[1];
9239
9240 var o = strict(this);
9241 var s = String(o);
9242 var searchStr = String(searchString);
9243 var pos = ToInteger(position);
9244 var len = s.length;
9245 var start = min(max(pos, 0), len);
9246 var searchLength = searchStr.length;
9247 if (searchLength + start > len) return false;
9248 if (s.substring(start, start + searchLength) === searchStr) return true;
9249 return false;
9250 });
9251
9252 // 21.1.3.19 String.prototype.substring ( start, end )
9253 // 21.1.3.20 String.prototype.toLocaleLowerCase ( [ reserved1 [ , reserved2 ] ] )
9254 // 21.1.3.21 String.prototype.toLocaleUpperCase ([ reserved1 [ , reserved2 ] ] )
9255 // 21.1.3.22 String.prototype.toLowerCase ( )
9256 // 21.1.3.23 String.prototype.toString ( )
9257 // 21.1.3.24 String.prototype.toUpperCase ( )
9258 // 21.1.3.25 String.prototype.trim ( )
9259 // 21.1.3.26 String.prototype.valueOf ( )
9260
9261 // 21.1.3.27 String.prototype [ @@iterator ]( )
9262 define(
9263 String.prototype, $$iterator,
9264 function entries() {
9265 return CreateStringIterator(this, 'value');
9266 });
9267
9268 // 21.1.4 Properties of String Instances
9269 // 21.1.4.1 length
9270
9271 // 21.1.5 String Iterator Objects
9272 /** @constructor */
9273 function StringIterator() {}
9274
9275 // 21.1.5.1 CreateStringIterator Abstract Operation
9276 function CreateStringIterator(string, kind) {
9277 var s = String(string);
9278 var iterator = new StringIterator;
9279 set_internal(iterator, '[[IteratedString]]', s);
9280 set_internal(iterator, '[[StringIteratorNextIndex]]', 0);
9281 set_internal(iterator, '[[StringIterationKind]]', kind);
9282 return iterator;
9283 }
9284
9285 // 21.1.5.2 The %StringIteratorPrototype% Object
9286 var $StringIteratorPrototype$ = Object.create($IteratorPrototype$);
9287 StringIterator.prototype = $StringIteratorPrototype$;
9288
9289 // 21.1.5.2.1 %StringIteratorPrototype%.next ( )
9290 define(
9291 $StringIteratorPrototype$, 'next',
9292 function next() {
9293 var o = ToObject(this);
9294 var s = String(o['[[IteratedString]]']),
9295 index = o['[[StringIteratorNextIndex]]'],
9296 len = s.length;
9297 if (index >= len) {
9298 set_internal(o, '[[StringIteratorNextIndex]]', Infinity);
9299 return CreateIterResultObject(undefined, true);
9300 }
9301 var cp = s.codePointAt(index);
9302 set_internal(o, '[[StringIteratorNextIndex]]', index + (cp > 0xFFFF ? 2 : 1));
9303 return CreateIterResultObject(String.fromCodePoint(cp), false);
9304 });
9305
9306 // 21.1.5.2.2 %StringIteratorPrototype% [ @@toStringTag ]
9307 define($StringIteratorPrototype$, $$toStringTag, 'String Iterator');
9308
9309 // 21.1.5.3 Properties of String Iterator Instances
9310
9311 // ---------------------------------------
9312 // 21.2 RegExp (Regular Expression) Objects
9313 // ---------------------------------------
9314
9315 // 21.2.1 Patterns
9316 // 21.2.2 Pattern Semantics
9317 // 21.2.2.1 Notation
9318 // 21.2.2.2 Pattern
9319 // 21.2.2.3 Disjunction
9320 // 21.2.2.4 Alternative
9321 // 21.2.2.5 Term
9322 // 21.2.2.6 Assertion
9323 // 21.2.2.7 Quantifier
9324 // 21.2.2.8 Atom
9325 // 21.2.2.9 AtomEscape
9326 // 21.2.2.10 CharacterEscape
9327 // 21.2.2.11 DecimalEscape
9328 // 21.2.2.12 CharacterClassEscape
9329 // 21.2.2.13 CharacterClass
9330 // 21.2.2.14 ClassRanges
9331 // 21.2.2.15 NonemptyClassRanges
9332 // 21.2.2.16 NonemptyClassRangesNoDash
9333 // 21.2.2.17 ClassAtom
9334 // 21.2.2.18 ClassAtomNoDash
9335 // 21.2.2.19 ClassEscape
9336 // 21.2.3 The RegExp Constructor
9337 // 21.2.3.1 RegExp ( pattern, flags )
9338 // 21.2.3.2 new RegExp( ...argumentsList )
9339 // 21.2.3.3 Abstract Operations for the RegExp Constructor
9340 // 21.2.4 Properties of the RegExp Constructor
9341 // 21.2.4.1 RegExp.prototype
9342 // 21.2.5 Properties of the RegExp Prototype Object
9343 // 21.2.5.1 RegExp.prototype.constructor
9344 // 21.2.5.2 RegExp.prototype.exec ( string )
9345
9346 // 21.2.5.3 get RegExp.prototype.flags
9347 if (!('flags' in RegExp.prototype)) {
9348 Object.defineProperty(
9349 RegExp.prototype, 'flags', {
9350 get: function() {
9351 var s = String(this);
9352 return s.substring(s.lastIndexOf('/') + 1);
9353 }
9354 });
9355 }
9356
9357 // 21.2.5.4 get RegExp.prototype.global
9358 // 21.2.5.5 get RegExp.prototype.ignoreCase
9359
9360 // 21.2.5.6 RegExp.prototype [ @@match ] ( string )
9361 define(RegExp.prototype, $$match, function(string) {
9362 var o = strict(this);
9363 return orig_match.call(string, o);
9364 });
9365
9366 // 21.2.5.7 get RegExp.prototype.multiline
9367
9368 // 21.2.5.8 RegExp.prototype [ @@replace ] ( string, replaceValue )
9369 define(RegExp.prototype, $$replace, function(string, replaceValue) {
9370 var o = strict(this);
9371 return orig_replace.call(string, o, replaceValue);
9372 });
9373
9374 // 21.2.5.9 RegExp.prototype [ @@search ] ( string )
9375 define(RegExp.prototype, $$search, function(string) {
9376 var o = strict(this);
9377 return orig_search.call(string, o);
9378 });
9379
9380 // 21.2.5.10 get RegExp.prototype.source
9381
9382 // 21.2.5.11 RegExp.prototype [ @@split ] ( string, limit )
9383 define(RegExp.prototype, $$split, function(string, limit) {
9384 var o = strict(this);
9385 return orig_split.call(string, o, limit);
9386 });
9387
9388 // 21.2.5.12 get RegExp.prototype.sticky
9389 // 21.2.5.13 RegExp.prototype.test( S )
9390 // 21.2.5.14 RegExp.prototype.toString ( )
9391 // 21.2.5.15 get RegExp.prototype.unicode
9392
9393 // 21.2.6 Properties of RegExp Instances
9394 // 21.2.6.1 lastIndex
9395
9396 // (No polyfillable changes from ES5)
9397
9398 // ---------------------------------------
9399 // 22 Indexed Collections
9400 // ---------------------------------------
9401
9402 // ---------------------------------------
9403 // 22.1 Array Objects
9404 // ---------------------------------------
9405
9406 // 22.1.1 The Array Constructor
9407 // 22.1.1.1 Array ( )
9408 // 22.1.1.2 Array (len)
9409 // 22.1.1.3 Array (...items )
9410
9411 // 22.1.2 Properties of the Array Constructor
9412
9413 // 22.1.2.1 Array.from ( items [ , mapfn [ , thisArg ] ] )
9414 define(
9415 Array, 'from',
9416 function from(items) {
9417 var mapfn = arguments[1];
9418 var thisArg = arguments[2];
9419
9420 var c = strict(this);
9421 if (mapfn === undefined) {
9422 var mapping = false;
9423 } else {
9424 if (!IsCallable(mapfn)) throw TypeError();
9425 var t = thisArg;
9426 mapping = true;
9427 }
9428 var usingIterator = GetMethod(items, $$iterator);
9429 if (usingIterator !== undefined) {
9430 if (IsConstructor(c)) {
9431 var a = new c();
9432 } else {
9433 a = new Array(0);
9434 }
9435 var iterator = GetIterator(items, usingIterator);
9436 var k = 0;
9437 while (true) {
9438 var next = IteratorStep(iterator);
9439 if (next === false) {
9440 a.length = k;
9441 return a;
9442 }
9443 var nextValue = IteratorValue(next);
9444 if (mapping)
9445 var mappedValue = mapfn.call(t, nextValue);
9446 else
9447 mappedValue = nextValue;
9448 a[k] = mappedValue;
9449 k += 1;
9450 }
9451 }
9452 var arrayLike = ToObject(items);
9453 var lenValue = arrayLike.length;
9454 var len = ToLength(lenValue);
9455 if (IsConstructor(c)) {
9456 a = new c(len);
9457 } else {
9458 a = new Array(len);
9459 }
9460 k = 0;
9461 while (k < len) {
9462 var kValue = arrayLike[k];
9463 if (mapping)
9464 mappedValue = mapfn.call(t, kValue, k);
9465 else
9466 mappedValue = kValue;
9467 a[k] = mappedValue;
9468 k += 1;
9469 }
9470 a.length = len;
9471 return a;
9472 });
9473
9474 // 22.1.2.2 Array.isArray ( arg )
9475
9476 // 22.1.2.3 Array.of ( ...items )
9477 define(
9478 Array, 'of',
9479 function of() {
9480 var items = arguments;
9481
9482 var lenValue = items.length;
9483 var len = ToUint32(lenValue);
9484 var c = strict(this), a;
9485 if (IsConstructor(c)) {
9486 a = new c(len);
9487 a = ToObject(a);
9488 } else {
9489 a = new Array(len);
9490 }
9491 var k = 0;
9492 while (k < len) {
9493 a[k] = items[k];
9494 k += 1;
9495 }
9496 a.length = len;
9497 return a;
9498 });
9499
9500 // 22.1.2.4 Array.prototype
9501 // 22.1.2.5 get Array [ @@species ]
9502 // 22.1.3 Properties of the Array Prototype Object
9503 // 22.1.3.1 Array.prototype.concat ( ...arguments )
9504 // 22.1.3.1.1 Runtime Semantics: IsConcatSpreadable ( O )
9505 // 22.1.3.2 Array.prototype.constructor
9506 // 22.1.3.3 Array.prototype.copyWithin (target, start [ , end ] )
9507 define(
9508 Array.prototype, 'copyWithin',
9509 function copyWithin(target, start/*, end*/) {
9510 var end = arguments[2];
9511
9512 var o = ToObject(this);
9513 var lenVal = o.length;
9514 var len = ToLength(lenVal);
9515 len = max(len, 0);
9516 var relativeTarget = ToInteger(target);
9517 var to;
9518 if (relativeTarget < 0)
9519 to = max(len + relativeTarget, 0);
9520 else
9521 to = min(relativeTarget, len);
9522 var relativeStart = ToInteger(start);
9523 var from;
9524 if (relativeStart < 0)
9525 from = max(len + relativeStart, 0);
9526 else
9527 from = min(relativeStart, len);
9528 var relativeEnd;
9529 if (end === undefined)
9530 relativeEnd = len;
9531 else
9532 relativeEnd = ToInteger(end);
9533 var final;
9534 if (relativeEnd < 0)
9535 final = max(len + relativeEnd, 0);
9536 else
9537 final = min(relativeEnd, len);
9538 var count = min(final - from, len - to);
9539 var direction;
9540 if (from < to && to < from + count) {
9541 direction = -1;
9542 from = from + count - 1;
9543 to = to + count - 1;
9544 } else {
9545 direction = 1;
9546 }
9547 while (count > 0) {
9548 var fromKey = String(from);
9549 var toKey = String(to);
9550 var fromPresent = HasProperty(o, fromKey);
9551 if (fromPresent) {
9552 var fromVal = o[fromKey];
9553 o[toKey] = fromVal;
9554 } else {
9555 delete o[toKey];
9556 }
9557 from = from + direction;
9558 to = to + direction;
9559 count = count - 1;
9560 }
9561 return o;
9562 });
9563
9564 // 22.1.3.4 Array.prototype.entries ( )
9565 var nativeArrayIteratorMethods =
9566 ('entries' in Array.prototype && 'next' in [].entries());
9567
9568 define(
9569 Array.prototype, 'entries',
9570 function entries() {
9571 return CreateArrayIterator(this, 'key+value');
9572 }, !nativeArrayIteratorMethods);
9573
9574 // 22.1.3.5 Array.prototype.every ( callbackfn [ , thisArg] )
9575
9576 // 22.1.3.6 Array.prototype.fill (value [ , start [ , end ] ] )
9577 define(
9578 Array.prototype, 'fill',
9579 function fill(value/*, start, end*/) {
9580 var start = arguments[1],
9581 end = arguments[2];
9582
9583 var o = ToObject(this);
9584 var lenVal = o.length;
9585 var len = ToLength(lenVal);
9586 len = max(len, 0);
9587 var relativeStart = ToInteger(start);
9588 var k;
9589 if (relativeStart < 0)
9590 k = max((len + relativeStart), 0);
9591 else
9592 k = min(relativeStart, len);
9593 var relativeEnd;
9594 if (end === undefined)
9595 relativeEnd = len;
9596 else
9597 relativeEnd = ToInteger(end);
9598 var final;
9599 if (relativeEnd < 0)
9600 final = max((len + relativeEnd), 0);
9601 else
9602 final = min(relativeEnd, len);
9603 while (k < final) {
9604 var pk = String(k);
9605 o[pk] = value;
9606 k += 1;
9607 }
9608 return o;
9609 });
9610
9611 // 22.1.3.7 Array.prototype.filter ( callbackfn [ , thisArg ] )
9612
9613 // 22.1.3.8 Array.prototype.find ( predicate [ , thisArg ] )
9614 define(
9615 Array.prototype, 'find',
9616 function find(predicate) {
9617 var o = ToObject(this);
9618 var lenValue = o.length;
9619 var len = ToInteger(lenValue);
9620 if (!IsCallable(predicate)) throw TypeError();
9621 var t = arguments.length > 1 ? arguments[1] : undefined;
9622 var k = 0;
9623 while (k < len) {
9624 var pk = String(k);
9625 var kPresent = HasProperty(o, pk);
9626 if (kPresent) {
9627 var kValue = o[pk];
9628 var testResult = predicate.call(t, kValue, k, o);
9629 if (Boolean(testResult)) {
9630 return kValue;
9631 }
9632 }
9633 ++k;
9634 }
9635 return undefined;
9636 });
9637
9638 // 22.1.3.9 Array.prototype.findIndex ( predicate [ , thisArg ] )
9639 define(
9640 Array.prototype, 'findIndex',
9641 function findIndex(predicate) {
9642 var o = ToObject(this);
9643 var lenValue = o.length;
9644 var len = ToLength(lenValue);
9645 if (!IsCallable(predicate)) throw TypeError();
9646 var t = arguments.length > 1 ? arguments[1] : undefined;
9647 var k = 0;
9648 while (k < len) {
9649 var pk = String(k);
9650 var kPresent = HasProperty(o, pk);
9651 if (kPresent) {
9652 var kValue = o[pk];
9653 var testResult = predicate.call(t, kValue, k, o);
9654 if (Boolean(testResult)) {
9655 return k;
9656 }
9657 }
9658 ++k;
9659 }
9660 return -1;
9661 });
9662
9663 // 22.1.3.10 Array.prototype.forEach ( callbackfn [ , thisArg ] )
9664 // 22.1.3.11 Array.prototype.indexOf ( searchElement [ , fromIndex ] )
9665 // 22.1.3.12 Array.prototype.join (separator)
9666
9667 // 22.1.3.13 Array.prototype.keys ( )
9668 define(
9669 Array.prototype, 'keys',
9670 function keys() {
9671 return CreateArrayIterator(this, 'key');
9672 }, !nativeArrayIteratorMethods);
9673
9674 // 22.1.3.14 Array.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
9675 // 22.1.3.15 Array.prototype.map ( callbackfn [ , thisArg ] )
9676 // 22.1.3.16 Array.prototype.pop ( )
9677 // 22.1.3.17 Array.prototype.push ( ...items )
9678 // 22.1.3.18 Array.prototype.reduce ( callbackfn [ , initialValue ] )
9679 // 22.1.3.19 Array.prototype.reduceRight ( callbackfn [ , initialValue ] )
9680 // 22.1.3.20 Array.prototype.reverse ( )
9681 // 22.1.3.21 Array.prototype.shift ( )
9682 // 22.1.3.22 Array.prototype.slice (start, end)
9683 // 22.1.3.23 Array.prototype.some ( callbackfn [ , thisArg ] )
9684 // 22.1.3.24 Array.prototype.sort (comparefn)
9685 // 22.1.3.25 Array.prototype.splice (start, deleteCount , ...items )
9686 // 22.1.3.26 Array.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
9687 // 22.1.3.27 Array.prototype.toString ( )
9688 // 22.1.3.28 Array.prototype.unshift ( ...items )
9689
9690 // 22.1.3.29 Array.prototype.values ( )
9691 define(
9692 Array.prototype, 'values',
9693 function values() {
9694 return CreateArrayIterator(this, 'value');
9695 }, !nativeArrayIteratorMethods);
9696
9697 // 22.1.3.30 Array.prototype [ @@iterator ] ( )
9698 define(
9699 Array.prototype, $$iterator,
9700 Array.prototype.values
9701 );
9702
9703 // 22.1.3.31 Array.prototype [ @@unscopables ]
9704 // 22.1.4 Properties of Array Instances
9705 // 22.1.4.1 length
9706
9707 // 22.1.5 Array Iterator Objects
9708 function ArrayIterator() {}
9709
9710 // 22.1.5.1 CreateArrayIterator Abstract Operation
9711 function CreateArrayIterator(array, kind) {
9712 var o = ToObject(array);
9713 var iterator = new ArrayIterator;
9714 set_internal(iterator, '[[IteratedObject]]', o);
9715 set_internal(iterator, '[[ArrayIteratorNextIndex]]', 0);
9716 set_internal(iterator, '[[ArrayIterationKind]]', kind);
9717 return iterator;
9718 }
9719
9720 // 22.1.5.2 The %ArrayIteratorPrototype% Object
9721 var $ArrayIteratorPrototype$ = Object.create($IteratorPrototype$);
9722 ArrayIterator.prototype = $ArrayIteratorPrototype$;
9723
9724 // 22.1.5.2.1 %ArrayIteratorPrototype%. next( )
9725 define(
9726 $ArrayIteratorPrototype$, 'next',
9727 function next() {
9728 var o = strict(this);
9729 if (Type(o) !== 'object') throw TypeError();
9730 var a = o['[[IteratedObject]]'],
9731 index = o['[[ArrayIteratorNextIndex]]'],
9732 itemKind = o['[[ArrayIterationKind]]'],
9733 lenValue = a.length,
9734 len = ToUint32(lenValue),
9735 elementKey,
9736 elementValue;
9737 if (itemKind.indexOf('sparse') !== -1) {
9738 var found = false;
9739 while (!found && index < len) {
9740 elementKey = String(index);
9741 found = HasProperty(a, elementKey);
9742 if (!found) {
9743 index += 1;
9744 }
9745 }
9746 }
9747 if (index >= len) {
9748 set_internal(o, '[[ArrayIteratorNextIndex]]', Infinity);
9749 return CreateIterResultObject(undefined, true);
9750 }
9751 elementKey = index;
9752 set_internal(o, '[[ArrayIteratorNextIndex]]', index + 1);
9753 if (itemKind.indexOf('value') !== -1)
9754 elementValue = a[elementKey];
9755 if (itemKind.indexOf('key+value') !== -1)
9756 return CreateIterResultObject([elementKey, elementValue], false);
9757 if (itemKind.indexOf('key') !== -1)
9758 return CreateIterResultObject(elementKey, false);
9759 if (itemKind === 'value')
9760 return CreateIterResultObject(elementValue, false);
9761 throw Error('Internal error');
9762 });
9763
9764 // 22.1.5.2.2 %ArrayIteratorPrototype% [ @@toStringTag ]
9765 define($ArrayIteratorPrototype$, $$toStringTag, 'Array Iterator');
9766
9767 // 22.1.5.3 Properties of Array Iterator Instances
9768
9769
9770 // ---------------------------------------
9771 // 22.2 TypedArray Objects
9772 // ---------------------------------------
9773
9774 // See typedarray.js for TypedArray polyfill
9775
9776 ['Int8Array', 'Uint8Array', 'Uint8ClampedArray',
9777 'Int16Array', 'Uint16Array',
9778 'Int32Array', 'Uint32Array',
9779 'Float32Array', 'Float64Array'].forEach(function ($TypedArrayName$) {
9780 if (!($TypedArrayName$ in global))
9781 return;
9782 var $TypedArray$ = global[$TypedArrayName$];
9783
9784 // 22.2.1 The %TypedArray% Intrinsic Object
9785 // 22.2.1.1 %TypedArray% ( length )
9786 // 22.2.1.2 %TypedArray% ( typedArray )
9787 // 22.2.1.3 %TypedArray% ( object )
9788 // 22.2.1.4 %TypedArray% ( buffer [ , byteOffset [ , length ] ] )
9789 // 22.2.1.5 %TypedArray% ( all other argument combinations )
9790 // 22.2.2 Properties of the %TypedArray% Intrinsic Object
9791
9792 // 22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
9793 define(
9794 $TypedArray$, 'from',
9795 function from(source) {
9796 var mapfn = arguments[1];
9797 var thisArg = arguments[2];
9798
9799 var c = strict(this);
9800 if (!IsConstructor(c)) throw TypeError();
9801 if (mapfn === undefined) {
9802 var mapping = false;
9803 } else {
9804 if (IsCallable(mapfn)) throw TypeError();
9805 var t = thisArg;
9806 mapping = true;
9807 }
9808 var usingIterator = GetMethod(source, $$iterator);
9809 if (usingIterator !== undefined) {
9810 var iterator = GetIterator(source, usingIterator);
9811 var values = [];
9812 var next = true;
9813 while (next !== false) {
9814 next = IteratorStep(iterator);
9815 if (next !== false) {
9816 var nextValue = IteratorValue(next);
9817 values.push(nextValue);
9818 }
9819 }
9820 var len = values.length;
9821 var newObj = new c(len);
9822 var k = 0;
9823 while (k < len) {
9824 var kValue = values.shift();
9825 if (mapping) {
9826 var mappedValue = mapfn.call(t, kValue);
9827 } else {
9828 mappedValue = kValue;
9829 }
9830 newObj[k] = mappedValue;
9831 ++k;
9832 }
9833 console.assert(values.length === 0);
9834 return newObj;
9835 }
9836 var arrayLike = ToObject(source);
9837 var lenValue = arrayLike.length;
9838 len = ToLength(lenValue);
9839 newObj = new c(len);
9840 k = 0;
9841 while (k < len) {
9842 kValue = arrayLike[k];
9843 if (mapping) {
9844 mappedValue = mapfn.call(t, kValue, k);
9845 } else {
9846 mappedValue = kValue;
9847 }
9848 newObj[k] = mappedValue;
9849 ++k;
9850 }
9851 return newObj;
9852 });
9853
9854 // 22.2.2.2 %TypedArray%.of ( ...items )
9855 define(
9856 $TypedArray$, 'of',
9857 function of() {
9858 var items = arguments;
9859
9860 var len = items.length;
9861 var c = strict(this);
9862 var newObj = new c(len);
9863 var k = 0;
9864 while (k < len) {
9865 newObj[k] = items[k];
9866 ++k;
9867 }
9868 return newObj;
9869 });
9870
9871 // 22.2.2.3 %TypedArray%.prototype
9872 // 22.2.2.4 get %TypedArray% [ @@species ]
9873 // 22.2.3 Properties of the %TypedArrayPrototype% Object
9874 // 22.2.3.1 get %TypedArray%.prototype.buffer
9875 // 22.2.3.2 get %TypedArray%.prototype.byteLength
9876 // 22.2.3.3 get %TypedArray%.prototype.byteOffset
9877 // 22.2.3.4 %TypedArray%.prototype.constructor
9878
9879 // 22.2.3.5 %TypedArray%.prototype.copyWithin (target, start [, end ] )
9880 define($TypedArray$.prototype, 'copyWithin', Array.prototype.copyWithin);
9881
9882 // 22.2.3.6 %TypedArray%.prototype.entries ( )
9883 define($TypedArray$.prototype, 'entries', Array.prototype.entries);
9884
9885 // 22.2.3.7 %TypedArray%.prototype.every ( callbackfn [ , thisArg ] )
9886 define($TypedArray$.prototype, 'every', Array.prototype.every);
9887
9888 // 22.2.3.8 %TypedArray%.prototype.fill (value [ , start [ , end ] ] )
9889 define(
9890 $TypedArray$.prototype, 'fill',
9891 //Array.prototype.fill // Doesn't work in Safari 7
9892 function fill(value/*, start, end*/) {
9893 var start = arguments[1],
9894 end = arguments[2];
9895
9896 var o = ToObject(this);
9897 var lenVal = o.length;
9898 var len = ToLength(lenVal);
9899 len = max(len, 0);
9900 var relativeStart = ToInteger(start);
9901 var k;
9902 if (relativeStart < 0) k = max((len + relativeStart), 0);
9903 else k = min(relativeStart, len);
9904 var relativeEnd;
9905 if (end === undefined) relativeEnd = len;
9906 else relativeEnd = ToInteger(end);
9907 var final;
9908 if (relativeEnd < 0) final = max((len + relativeEnd), 0);
9909 else final = min(relativeEnd, len);
9910 while (k < final) {
9911 var pk = String(k);
9912 o[pk] = value;
9913 k += 1;
9914 }
9915 return o;
9916 });
9917
9918 // 22.2.3.9 %TypedArray%.prototype.filter ( callbackfn [ , thisArg ] )
9919 define(
9920 $TypedArray$.prototype, 'filter',
9921 function filter(callbackfn) {
9922 var thisArg = arguments[1];
9923
9924 var o = ToObject(this);
9925 var lenVal = o.length;
9926 var len = ToLength(lenVal);
9927 if (!IsCallable(callbackfn)) throw TypeError();
9928 var t = thisArg;
9929 var c = o.constructor;
9930 var kept = [];
9931 var k = 0;
9932 var captured = 0;
9933 while (k < len) {
9934 var kValue = o[k];
9935 var selected = callbackfn.call(t, kValue, k, o);
9936 if (selected) {
9937 kept.push(kValue);
9938 ++captured;
9939 }
9940 ++k;
9941 }
9942 var a = new c(captured);
9943 var n = 0;
9944 for (var i = 0; i < kept.length; ++i) {
9945 var e = kept[i];
9946 a[n] = e;
9947 ++n;
9948 }
9949 return a;
9950 });
9951
9952 // 22.2.3.10 %TypedArray%.prototype.find (predicate [ , thisArg ] )
9953 define($TypedArray$.prototype, 'find', Array.prototype.find);
9954
9955 // 22.2.3.11 %TypedArray%.prototype.findIndex ( predicate [ , thisArg ] )
9956 define($TypedArray$.prototype, 'findIndex', Array.prototype.findIndex);
9957
9958 // 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
9959 define($TypedArray$.prototype, 'forEach', Array.prototype.forEach);
9960
9961 // 22.2.3.13 %TypedArray%.prototype.indexOf (searchElement [ , fromIndex ] )
9962 define($TypedArray$.prototype, 'indexOf', Array.prototype.indexOf);
9963
9964 // 22.2.3.14 %TypedArray%.prototype.join ( separator )
9965 define($TypedArray$.prototype, 'join', Array.prototype.join);
9966
9967 // 22.2.3.15 %TypedArray%.prototype.keys ( )
9968 define($TypedArray$.prototype, 'keys', Array.prototype.keys);
9969
9970 // 22.2.3.16 %TypedArray%.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
9971 define($TypedArray$.prototype, 'lastIndexOf', Array.prototype.lastIndexOf);
9972
9973 // 22.2.3.17 get %TypedArray%.prototype.length
9974
9975 // 22.2.3.18 %TypedArray%.prototype.map ( callbackfn [ , thisArg ] )
9976 define(
9977 $TypedArray$.prototype, 'map',
9978 function map(callbackfn) {
9979 var thisArg = arguments[1];
9980
9981 var o = ToObject(this);
9982 var lenValue = o.length;
9983 var len = ToLength(lenValue);
9984 if (!IsCallable(callbackfn)) throw TypeError();
9985 var t = thisArg;
9986 var a = undefined;
9987 var c = o.constructor;
9988 if (IsConstructor(c))
9989 a = new c(len);
9990 if (a === undefined)
9991 a = new Array(len);
9992 var k = 0;
9993 while (k < len) {
9994 var kPresent = HasProperty(o, k);
9995 if (kPresent) {
9996 var kValue = o[k];
9997 var mappedValue = callbackfn.call(t, kValue, k, o);
9998 a[k] = mappedValue;
9999 }
10000 ++k;
10001 }
10002 return a;
10003 });
10004
10005 // 22.2.3.19 %TypedArray%.prototype.reduce ( callbackfn [, initialValue] )
10006 define($TypedArray$.prototype, 'reduce', Array.prototype.reduce);
10007
10008 // 22.2.3.20 %TypedArray%.prototype.reduceRight ( callbackfn [, initialValue] )
10009 define($TypedArray$.prototype, 'reduceRight', Array.prototype.reduceRight);
10010
10011 // 22.2.3.21 %TypedArray%.prototype.reverse ( )
10012 define($TypedArray$.prototype, 'reverse', Array.prototype.reverse);
10013
10014 // 22.2.3.22 %TypedArray%.prototype.set ( overloaded [ , offset ])
10015 // 22.2.3.22.1 %TypedArray%.prototype.set (array [ , offset ] )
10016 // 22.2.3.22.2 %TypedArray%.prototype.set(typedArray [, offset ] )
10017
10018 // 22.2.3.23 %TypedArray%.prototype.slice ( start, end )
10019 define(
10020 $TypedArray$.prototype, 'slice',
10021 function slice(start, end) {
10022 var o = ToObject(this);
10023 var lenVal = o.length;
10024 var len = ToLength(lenVal);
10025 var relativeStart = ToInteger(start);
10026 var k = (relativeStart < 0) ? max(len + relativeStart, 0) : min(relativeStart, len);
10027 var relativeEnd = (end === undefined) ? len : ToInteger(end);
10028 var final = (relativeEnd < 0) ? max(len + relativeEnd, 0) : min(relativeEnd, len);
10029 var count = final - k;
10030 var c = o.constructor;
10031 if (IsConstructor(c)) {
10032 var a = new c(count);
10033 } else {
10034 throw TypeError();
10035 }
10036 var n = 0;
10037 while (k < final) {
10038 var kValue = o[k];
10039 a[n] = kValue;
10040 ++k;
10041 ++n;
10042 }
10043 return a;
10044 });
10045
10046 // 22.2.3.24 %TypedArray%.prototype.some ( callbackfn [ , thisArg ] )
10047 define($TypedArray$.prototype, 'some', Array.prototype.some);
10048
10049 // 22.2.3.25 %TypedArray%.prototype.sort ( comparefn )
10050 define(
10051 $TypedArray$.prototype, 'sort',
10052 function sort() {
10053 var comparefn = arguments[0];
10054
10055 function sortCompare(x, y) {
10056 console.assert(Type(x) === 'number' && Type(y) === 'number');
10057 if (x !== x && y !== y) return +0;
10058 if (x !== x) return 1;
10059 if (y !== y) return -1;
10060 if (comparefn !== undefined) {
10061 return comparefn(x, y);
10062 }
10063 if (x < y) return -1;
10064 if (x > y) return 1;
10065 return +0;
10066 }
10067 return Array.prototype.sort.call(this, sortCompare);
10068 });
10069
10070 // 22.2.3.26 %TypedArray%.prototype.subarray( [ begin [ , end ] ] )
10071 // 22.2.3.27 %TypedArray%.prototype.toLocaleString ([ reserved1 [ , reserved2 ] ])
10072 // 22.2.3.28 %TypedArray%.prototype.toString ( )
10073
10074 // 22.2.3.29 %TypedArray%.prototype.values ( )
10075 define($TypedArray$.prototype, 'values', Array.prototype.values);
10076
10077 // 22.2.3.30 %TypedArray%.prototype [ @@iterator ] ( )
10078 define(
10079 $TypedArray$.prototype, $$iterator,
10080 $TypedArray$.prototype.values
10081 );
10082
10083 // 22.2.3.31 get %TypedArray%.prototype [ @@toStringTag ]
10084 define($TypedArray$.prototype, $$toStringTag, $TypedArrayName$);
10085
10086 // 22.2.4 The TypedArray Constructors
10087 // 22.2.4.1TypedArray( ... argumentsList)
10088 // 22.2.5 Properties of the TypedArray Constructors
10089 // 22.2.5.1 TypedArray.BYTES_PER_ELEMENT
10090 // 22.2.5.2 TypedArray.prototype
10091 // 22.2.6 Properties of TypedArray Prototype Objects
10092 // 22.2.6.1 TypedArray.prototype.BYTES_PER_ELEMENT
10093 // 22.2.6.2 TypedArray.prototype.constructor
10094 // 22.2.7 Properties of TypedArray Instances
10095 });
10096
10097 // ---------------------------------------
10098 // 23 Keyed Collection
10099 // ---------------------------------------
10100
10101 // ---------------------------------------
10102 // 23.1 Map Objects
10103 // ---------------------------------------
10104
10105 (function() {
10106 // 23.1.1 The Map Constructor
10107
10108 // 23.1.1.1 Map ( [ iterable ] )
10109 /** @constructor */
10110 function Map(/*iterable*/) {
10111 var map = strict(this);
10112 var iterable = arguments[0];
10113
10114 if (Type(map) !== 'object') throw TypeError();
10115 if ('[[MapData]]' in map) throw TypeError();
10116
10117 if (iterable !== undefined) {
10118 var adder = map['set'];
10119 if (!IsCallable(adder)) throw TypeError();
10120 var iter = GetIterator(ToObject(iterable));
10121 }
10122 set_internal(map, '[[MapData]]', { keys: [], values: [] });
10123 if (iter === undefined) return map;
10124 while (true) {
10125 var next = IteratorStep(iter);
10126 if (next === false)
10127 return map;
10128 var nextItem = IteratorValue(next);
10129 if (Type(nextItem) !== 'object') throw TypeError();
10130 var k = nextItem[0];
10131 var v = nextItem[1];
10132 adder.call(map, k, v);
10133 }
10134
10135 return map;
10136 }
10137
10138 if (!('Map' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
10139 (function() { try { new global.Map([]); return false; } catch (_) { return true; } }()) ||
10140 (function() { try { return !new global.Map().entries().next; } catch (_) { return true; } }()) ||
10141 (new global.Map([['a', 1]]).size !== 1))
10142 global.Map = Map;
10143
10144
10145 function MapDataIndexOf(mapData, key) {
10146 var i;
10147 if (key === key) return mapData.keys.indexOf(key);
10148 // Slow case for NaN
10149 for (i = 0; i < mapData.keys.length; i += 1)
10150 if (SameValueZero(mapData.keys[i], key)) return i;
10151 return -1;
10152 }
10153
10154 // 23.1.1.2 new Map ( ... argumentsList )
10155 // 23.1.2 Properties of the Map Constructor
10156 // 23.1.2.1 Map.prototype
10157 var $MapPrototype$ = {};
10158 Map.prototype = $MapPrototype$;
10159
10160 // 23.1.2.2 get Map [ @@species ]
10161
10162 // 23.1.3 Properties of the Map Prototype Object
10163 // 23.1.3.1 Map.prototype.clear ()
10164 define(
10165 Map.prototype, 'clear',
10166 function clear() {
10167 var m = strict(this);
10168 if (Type(m) !== 'object') throw TypeError();
10169 if (!('[[MapData]]' in m)) throw TypeError();
10170 if (m['[[MapData]]'] === undefined) throw TypeError();
10171 var entries = m['[[MapData]]'];
10172 entries.keys.length = 0;
10173 entries.values.length = 0;
10174 return undefined;
10175 });
10176
10177 // 23.1.3.2 Map.prototype.constructor
10178
10179 // 23.1.3.3 Map.prototype.delete ( key )
10180 define(
10181 Map.prototype, 'delete',
10182 function delete_(key) {
10183 var m = strict(this);
10184 if (Type(m) !== 'object') throw TypeError();
10185 if (!('[[MapData]]' in m)) throw TypeError();
10186 if (m['[[MapData]]'] === undefined) throw TypeError();
10187 var entries = m['[[MapData]]'];
10188 var i = MapDataIndexOf(entries, key);
10189 if (i < 0) return false;
10190 entries.keys[i] = empty;
10191 entries.values[i] = empty;
10192 return true;
10193 });
10194
10195 // 23.1.3.4 Map.prototype.entries ( )
10196 define(
10197 Map.prototype, 'entries',
10198 function entries() {
10199 var m = strict(this);
10200 if (Type(m) !== 'object') throw TypeError();
10201 return CreateMapIterator(m, 'key+value');
10202 });
10203
10204 // 23.1.3.5 Map.prototype.forEach ( callbackfn [ , thisArg ] )
10205 define(
10206 Map.prototype, 'forEach',
10207 function forEach(callbackfn /*, thisArg*/) {
10208 var thisArg = arguments[1];
10209
10210 var m = strict(this);
10211 if (Type(m) !== 'object') throw TypeError();
10212 if (!('[[MapData]]' in m)) throw TypeError();
10213 if (m['[[MapData]]'] === undefined) throw TypeError();
10214 var entries = m['[[MapData]]'];
10215
10216 if (!IsCallable(callbackfn)) {
10217 throw TypeError('First argument to forEach is not callable.');
10218 }
10219 for (var i = 0; i < entries.keys.length; ++i) {
10220 if (entries.keys[i] !== empty) {
10221 callbackfn.call(thisArg, entries.values[i], entries.keys[i], m);
10222 }
10223 }
10224 return undefined;
10225 });
10226
10227 // 23.1.3.6 Map.prototype.get ( key )
10228 define(
10229 Map.prototype, 'get',
10230 function get(key) {
10231 var m = strict(this);
10232 if (Type(m) !== 'object') throw TypeError();
10233 if (!('[[MapData]]' in m)) throw TypeError();
10234 if (m['[[MapData]]'] === undefined) throw TypeError();
10235 var entries = m['[[MapData]]'];
10236 var i = MapDataIndexOf(entries, key);
10237 if (i >= 0) return entries.values[i];
10238 return undefined;
10239 });
10240
10241 // 23.1.3.7 Map.prototype.has ( key )
10242 define(
10243 Map.prototype, 'has',
10244 function has(key) {
10245 var m = strict(this);
10246 if (Type(m) !== 'object') throw TypeError();
10247 if (!('[[MapData]]' in m)) throw TypeError();
10248 if (m['[[MapData]]'] === undefined) throw TypeError();
10249 var entries = m['[[MapData]]'];
10250 if (MapDataIndexOf(entries, key) >= 0) return true;
10251 return false;
10252 });
10253
10254 // 23.1.3.8 Map.prototype.keys ( )
10255 define(
10256 Map.prototype, 'keys',
10257 function keys() {
10258 var m = strict(this);
10259 if (Type(m) !== 'object') throw TypeError();
10260 return CreateMapIterator(m, 'key');
10261 });
10262
10263 // 23.1.3.9 Map.prototype.set ( key , value )
10264 define(
10265 Map.prototype, 'set',
10266 function set(key, value) {
10267 var m = strict(this);
10268 if (Type(m) !== 'object') throw TypeError();
10269 if (!('[[MapData]]' in m)) throw TypeError();
10270 if (m['[[MapData]]'] === undefined) throw TypeError();
10271 var entries = m['[[MapData]]'];
10272 var i = MapDataIndexOf(entries, key);
10273 if (i < 0) i = entries.keys.length;
10274 if (SameValue(key, -0)) key = 0;
10275 entries.keys[i] = key;
10276 entries.values[i] = value;
10277 return m;
10278 });
10279
10280 // 23.1.3.10 get Map.prototype.size
10281 Object.defineProperty(
10282 Map.prototype, 'size', {
10283 get: function() {
10284 var m = strict(this);
10285 if (Type(m) !== 'object') throw TypeError();
10286 if (!('[[MapData]]' in m)) throw TypeError();
10287 if (m['[[MapData]]'] === undefined) throw TypeError();
10288 var entries = m['[[MapData]]'];
10289 var count = 0;
10290 for (var i = 0; i < entries.keys.length; ++i) {
10291 if (entries.keys[i] !== empty)
10292 count = count + 1;
10293 }
10294 return count;
10295 }
10296 });
10297
10298 // 23.1.3.11 Map.prototype.values ( )
10299 define(
10300 Map.prototype, 'values',
10301 function values() {
10302 var m = strict(this);
10303 if (Type(m) !== 'object') throw TypeError();
10304 return CreateMapIterator(m, 'value');
10305 });
10306
10307 // 23.1.3.12 Map.prototype [ @@iterator ]( )
10308 define(
10309 Map.prototype, $$iterator,
10310 function() {
10311 var m = strict(this);
10312 if (Type(m) !== 'object') throw TypeError();
10313 return CreateMapIterator(m, 'key+value');
10314 });
10315
10316 // 23.1.3.13 Map.prototype [ @@toStringTag ]
10317 define(global.Map.prototype, $$toStringTag, 'Map');
10318
10319 // 23.1.4 Properties of Map Instances
10320 // 23.1.5 Map Iterator Objects
10321
10322 /** @constructor */
10323 function MapIterator() {}
10324
10325 // 23.1.5.1 CreateMapIterator Abstract Operation
10326 function CreateMapIterator(map, kind) {
10327 if (Type(map) !== 'object') throw TypeError();
10328 if (!('[[MapData]]' in map)) throw TypeError();
10329 if (map['[[MapData]]'] === undefined) throw TypeError();
10330 var iterator = new MapIterator;
10331 set_internal(iterator, '[[Map]]', map);
10332 set_internal(iterator, '[[MapNextIndex]]', 0);
10333 set_internal(iterator, '[[MapIterationKind]]', kind);
10334 return iterator;
10335 }
10336
10337 // 23.1.5.2 The %MapIteratorPrototype% Object
10338 var $MapIteratorPrototype$ = Object.create($IteratorPrototype$);
10339 MapIterator.prototype = $MapIteratorPrototype$;
10340
10341 // 23.1.5.2.1 %MapIteratorPrototype%.next ( )
10342 define(
10343 $MapIteratorPrototype$, 'next',
10344 function next() {
10345 var o = strict(this);
10346 if (Type(o) !== 'object') throw TypeError();
10347 var m = o['[[Map]]'],
10348 index = o['[[MapNextIndex]]'],
10349 itemKind = o['[[MapIterationKind]]'],
10350 entries = m['[[MapData]]'];
10351 while (index < entries.keys.length) {
10352 var e = {key: entries.keys[index], value: entries.values[index]};
10353 index = index += 1;
10354 set_internal(o, '[[MapNextIndex]]', index);
10355 if (e.key !== empty) {
10356 if (itemKind === 'key') {
10357 return CreateIterResultObject(e.key, false);
10358 } else if (itemKind === 'value') {
10359 return CreateIterResultObject(e.value, false);
10360 } else {
10361 return CreateIterResultObject([e.key, e.value], false);
10362 }
10363 }
10364 }
10365 return CreateIterResultObject(undefined, true);
10366 });
10367
10368 // 23.1.5.2.2 %MapIteratorPrototype% [ @@toStringTag ]
10369 define($MapIteratorPrototype$, $$toStringTag, 'Map Iterator');
10370
10371 // 23.1.5.3 Properties of Map Iterator Instances
10372 }());
10373
10374 // ---------------------------------------
10375 // 23.2 Set Objects
10376 // ---------------------------------------
10377
10378 (function() {
10379 // 23.2.1 The Set Constructor
10380 // 23.2.1.1 Set ( [ iterable ] )
10381
10382 /** @constructor */
10383 function Set(/*iterable*/) {
10384 var set = strict(this);
10385 var iterable = arguments[0];
10386
10387 if (Type(set) !== 'object') throw TypeError();
10388 if ('[[SetData]]' in set) throw TypeError();
10389
10390 if (iterable !== undefined) {
10391 var adder = set['add'];
10392 if (!IsCallable(adder)) throw TypeError();
10393 var iter = GetIterator(ToObject(iterable));
10394 }
10395 set_internal(set, '[[SetData]]', []);
10396 if (iter === undefined) return set;
10397 while (true) {
10398 var next = IteratorStep(iter);
10399 if (next === false)
10400 return set;
10401 var nextValue = IteratorValue(next);
10402 adder.call(set, nextValue);
10403 }
10404
10405 return set;
10406 }
10407
10408 if (!('Set' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
10409 (function() { try { return !new global.Set().entries().next; } catch (_) { return true; } }()) ||
10410 (new global.Set([1]).size !== 1))
10411 global.Set = Set;
10412
10413 function SetDataIndexOf(setData, key) {
10414 var i;
10415 if (key === key)
10416 return setData.indexOf(key);
10417 // Slow case for NaN
10418 for (i = 0; i < setData.length; i += 1)
10419 if (SameValueZero(setData[i], key)) return i;
10420 return -1;
10421 }
10422
10423 // 23.2.1.2 new Set ( ...argumentsList )
10424 // 23.2.2 Properties of the Set Constructor
10425
10426 // 23.2.2.1 Set.prototype
10427 var $SetPrototype$ = {};
10428 Set.prototype = $SetPrototype$;
10429
10430 // 23.2.2.2 get Set [ @@species ]
10431 // 23.2.3 Properties of the Set Prototype Object
10432
10433 // 23.2.3.1 Set.prototype.add (value )
10434 define(
10435 Set.prototype, 'add',
10436 function add(value) {
10437 var s = strict(this);
10438 if (Type(s) !== 'object') throw TypeError();
10439 if (!('[[SetData]]' in s)) throw TypeError();
10440 if (s['[[SetData]]'] === undefined) throw TypeError();
10441 if (SameValue(value, -0)) value = 0;
10442 var entries = s['[[SetData]]'];
10443 var i = SetDataIndexOf(entries, value);
10444 if (i < 0) i = s['[[SetData]]'].length;
10445 s['[[SetData]]'][i] = value;
10446
10447 return s;
10448 });
10449
10450 // 23.2.3.2 Set.prototype.clear ()
10451 define(
10452 Set.prototype, 'clear',
10453 function clear() {
10454 var s = strict(this);
10455 if (Type(s) !== 'object') throw TypeError();
10456 if (!('[[SetData]]' in s)) throw TypeError();
10457 if (s['[[SetData]]'] === undefined) throw TypeError();
10458 var entries = s['[[SetData]]'];
10459 entries.length = 0;
10460 return undefined;
10461 });
10462
10463 // 23.2.3.3 Set.prototype.constructor
10464 // 23.2.3.4 Set.prototype.delete ( value )
10465 define(
10466 Set.prototype, 'delete',
10467 function delete_(value) {
10468 var s = strict(this);
10469 if (Type(s) !== 'object') throw TypeError();
10470 if (!('[[SetData]]' in s)) throw TypeError();
10471 if (s['[[SetData]]'] === undefined) throw TypeError();
10472 var entries = s['[[SetData]]'];
10473 var i = SetDataIndexOf(entries, value);
10474 if (i < 0) return false;
10475 entries[i] = empty;
10476 return true;
10477 });
10478
10479 // 23.2.3.5 Set.prototype.entries ( )
10480 define(
10481 Set.prototype, 'entries',
10482 function entries() {
10483 var s = strict(this);
10484 if (Type(s) !== 'object') throw TypeError();
10485 return CreateSetIterator(s, 'key+value');
10486 });
10487
10488 // 23.2.3.6 Set.prototype.forEach ( callbackfn [ , thisArg ] )
10489 define(
10490 Set.prototype, 'forEach',
10491 function forEach(callbackfn/*, thisArg*/) {
10492 var thisArg = arguments[1];
10493
10494 var s = strict(this);
10495 if (Type(s) !== 'object') throw TypeError();
10496 if (!('[[SetData]]' in s)) throw TypeError();
10497 if (s['[[SetData]]'] === undefined) throw TypeError();
10498 var entries = s['[[SetData]]'];
10499
10500 if (!IsCallable(callbackfn)) {
10501 throw TypeError('First argument to forEach is not callable.');
10502 }
10503 for (var i = 0; i < entries.length; ++i) {
10504 if (entries[i] !== empty) {
10505 callbackfn.call(thisArg, entries[i], entries[i], s);
10506 }
10507 }
10508 });
10509
10510 // 23.2.3.7 Set.prototype.has ( value )
10511 define(
10512 Set.prototype, 'has',
10513 function has(key) {
10514 var s = strict(this);
10515 if (Type(s) !== 'object') throw TypeError();
10516 if (!('[[SetData]]' in s)) throw TypeError();
10517 if (s['[[SetData]]'] === undefined) throw TypeError();
10518 var entries = s['[[SetData]]'];
10519 return SetDataIndexOf(entries, key) !== -1;
10520 });
10521
10522 // 23.2.3.8 Set.prototype.keys ( )
10523 // See Set.prototype.values
10524
10525 // 23.2.3.9 get Set.prototype.size
10526 Object.defineProperty(
10527 Set.prototype, 'size', {
10528 get: function() {
10529 var s = strict(this);
10530 if (Type(s) !== 'object') throw TypeError();
10531 if (!('[[SetData]]' in s)) throw TypeError();
10532 if (s['[[SetData]]'] === undefined) throw TypeError();
10533 var entries = s['[[SetData]]'];
10534 var count = 0;
10535 for (var i = 0; i < entries.length; ++i) {
10536 if (entries[i] !== empty)
10537 count = count + 1;
10538 }
10539 return count;
10540 }
10541 });
10542
10543 // 23.2.3.10 Set.prototype.values ( )
10544 define(
10545 Set.prototype, 'values',
10546 function values() {
10547 var s = strict(this);
10548 if (Type(s) !== 'object') throw TypeError();
10549 return CreateSetIterator(s, 'value');
10550 });
10551 // NOTE: function name is still 'values':
10552 Set.prototype.keys = Set.prototype.values;
10553
10554 // 23.2.3.11 Set.prototype [@@iterator ] ( )
10555 define(
10556 Set.prototype, $$iterator,
10557 function() {
10558 var s = strict(this);
10559 if (Type(s) !== 'object') throw TypeError();
10560 return CreateSetIterator(s);
10561 });
10562
10563 // 23.2.3.12 Set.prototype [ @@toStringTag ]
10564 define(global.Set.prototype, $$toStringTag, 'Set');
10565
10566 // 23.2.4 Properties of Set Instances
10567 // 23.2.5 Set Iterator Objects
10568 /** @constructor */
10569 function SetIterator() {}
10570
10571 // 23.2.5.1 CreateSetIterator Abstract Operation
10572 function CreateSetIterator(set, kind) {
10573 if (Type(set) !== 'object') throw TypeError();
10574 if (!('[[SetData]]' in set)) throw TypeError();
10575 if (set['[[SetData]]'] === undefined) throw TypeError();
10576 var iterator = new SetIterator;
10577 set_internal(iterator, '[[IteratedSet]]', set);
10578 set_internal(iterator, '[[SetNextIndex]]', 0);
10579 set_internal(iterator, '[[SetIterationKind]]', kind);
10580 return iterator;
10581 }
10582
10583 // 23.2.5.2 The %SetIteratorPrototype% Object
10584 var $SetIteratorPrototype$ = Object.create($IteratorPrototype$);
10585 SetIterator.prototype = $SetIteratorPrototype$;
10586
10587 // 23.2.5.2.1 %SetIteratorPrototype%.next( )
10588 define(
10589 $SetIteratorPrototype$, 'next',
10590 function next() {
10591 var o = strict(this);
10592 if (Type(o) !== 'object') throw TypeError();
10593 var s = o['[[IteratedSet]]'],
10594 index = o['[[SetNextIndex]]'],
10595 itemKind = o['[[SetIterationKind]]'],
10596 entries = s['[[SetData]]'];
10597 while (index < entries.length) {
10598 var e = entries[index];
10599 index = index += 1;
10600 set_internal(o, '[[SetNextIndex]]', index);
10601 if (e !== empty) {
10602 if (itemKind === 'key+value')
10603 return CreateIterResultObject([e, e], false);
10604 return CreateIterResultObject(e, false);
10605 }
10606 }
10607 return CreateIterResultObject(undefined, true);
10608 });
10609
10610 // 23.2.5.2.2 %SetIteratorPrototype% [ @@toStringTag ]
10611 define($SetIteratorPrototype$, $$toStringTag, 'Set Iterator');
10612
10613 // 23.2.5.3 Properties of Set Iterator Instances
10614
10615 }());
10616
10617 // ---------------------------------------
10618 // 23.3 WeakMap Objects
10619 // ---------------------------------------
10620
10621 (function() {
10622 // 23.3.1 The WeakMap Constructor
10623 // 23.3.1.1 WeakMap ( [ iterable ] )
10624 /** @constructor */
10625 function WeakMap(/*iterable*/) {
10626 var map = strict(this);
10627 var iterable = arguments[0];
10628
10629 if (Type(map) !== 'object') throw TypeError();
10630 if ('[[WeakMapData]]' in map) throw TypeError();
10631
10632 if (iterable !== undefined) {
10633 var adder = map['set'];
10634 if (!IsCallable(adder)) throw TypeError();
10635 var iter = GetIterator(ToObject(iterable));
10636 }
10637 set_internal(map, '[[WeakMapData]]', new EphemeronTable);
10638 if (iter === undefined) return map;
10639 while (true) {
10640 var next = IteratorStep(iter);
10641 if (next === false)
10642 return map;
10643 var nextValue = IteratorValue(next);
10644 if (Type(nextValue) !== 'object') throw TypeError();
10645 var k = nextValue[0];
10646 var v = nextValue[1];
10647 adder.call(map, k, v);
10648 }
10649
10650 return map;
10651 }
10652
10653 if (!('WeakMap' in global) || OVERRIDE_NATIVE_FOR_TESTING)
10654 global.WeakMap = WeakMap;
10655
10656 // 23.3.2 Properties of the WeakMap Constructor
10657 // 23.3.2.1 WeakMap.prototype
10658 var $WeakMapPrototype$ = {};
10659 WeakMap.prototype = $WeakMapPrototype$;
10660
10661
10662
10663 // 23.3.2.2 WeakMap[ @@create ] ( )
10664 // 23.3.3 Properties of the WeakMap Prototype Object
10665
10666 // 23.3.3.1 WeakMap.prototype.constructor
10667
10668 // 23.3.3.2 WeakMap.prototype.delete ( key )
10669 define(
10670 WeakMap.prototype, 'delete',
10671 function delete_(key) {
10672 var M = strict(this);
10673 if (Type(M) !== 'object') throw TypeError();
10674 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
10675 if (Type(key) !== 'object') throw TypeError('Expected object');
10676 return M['[[WeakMapData]]'].remove(key);
10677 });
10678
10679 // 23.3.3.3 WeakMap.prototype.get ( key )
10680 define(
10681 WeakMap.prototype, 'get',
10682 function get(key, defaultValue) {
10683 var M = strict(this);
10684 if (Type(M) !== 'object') throw TypeError();
10685 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
10686 if (Type(key) !== 'object') throw TypeError('Expected object');
10687 return M['[[WeakMapData]]'].get(key, defaultValue);
10688 });
10689
10690 // 23.3.3.4 WeakMap.prototype.has ( key )
10691 define(
10692 WeakMap.prototype, 'has',
10693 function has(key) {
10694 var M = strict(this);
10695 if (Type(M) !== 'object') throw TypeError();
10696 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
10697 if (Type(key) !== 'object') throw TypeError('Expected object');
10698 return M['[[WeakMapData]]'].has(key);
10699 });
10700
10701 // 23.3.3.5 WeakMap.prototype.set ( key , value )
10702 define(
10703 WeakMap.prototype, 'set',
10704 function set(key, value) {
10705 var M = strict(this);
10706 if (Type(M) !== 'object') throw TypeError();
10707 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
10708 if (Type(key) !== 'object') throw TypeError('Expected object');
10709 M['[[WeakMapData]]'].set(key, value);
10710 return M;
10711 });
10712
10713 // 23.3.3.6 WeakMap.prototype [ @@toStringTag ]
10714 define(global.WeakMap.prototype, $$toStringTag, 'WeakMap');
10715
10716 // 23.3.4 Properties of WeakMap Instances
10717
10718 // Polyfills for incomplete native implementations:
10719 (function() {
10720 var wm = new global.WeakMap();
10721 var orig = global.WeakMap.prototype.set;
10722 define(global.WeakMap.prototype, 'set', function set() {
10723 orig.apply(this, arguments);
10724 return this;
10725 }, wm.set({}, 0) !== wm);
10726 }());
10727 }());
10728
10729 // ---------------------------------------
10730 // 23.4 WeakSet Objects
10731 // ---------------------------------------
10732
10733 (function() {
10734 // 23.4.1 The WeakSet Constructor
10735 // 23.4.1.1 WeakSet ( [ iterable ] )
10736 /** @constructor */
10737 function WeakSet(/*iterable*/) {
10738 var set = strict(this);
10739 var iterable = arguments[0];
10740
10741 if (Type(set) !== 'object') throw TypeError();
10742 if ('[[WeakSetData]]' in set) throw TypeError();
10743
10744 if (iterable !== undefined) {
10745 var adder = set['add'];
10746 if (!IsCallable(adder)) throw TypeError();
10747 var iter = GetIterator(ToObject(iterable));
10748 }
10749 set_internal(set, '[[WeakSetData]]', new EphemeronTable);
10750 if (iter === undefined) return set;
10751 while (true) {
10752 var next = IteratorStep(iter);
10753 if (next === false)
10754 return set;
10755 var nextValue = IteratorValue(next);
10756 adder.call(set, nextValue);
10757 }
10758
10759 return set;
10760 }
10761
10762 if (!('WeakSet' in global) || OVERRIDE_NATIVE_FOR_TESTING)
10763 global.WeakSet = WeakSet;
10764
10765 // 23.4.2 Properties of the WeakSet Constructor
10766 // 23.4.2.1 WeakSet.prototype
10767 var $WeakSetPrototype$ = {};
10768 WeakSet.prototype = $WeakSetPrototype$;
10769
10770 // 23.4.3 Properties of the WeakSet Prototype Object
10771 // 23.4.3.1 WeakSet.prototype.add (value )
10772 define(
10773 WeakSet.prototype, 'add',
10774 function add(value) {
10775 var S = strict(this);
10776 if (Type(S) !== 'object') throw TypeError();
10777 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
10778 if (Type(value) !== 'object') throw TypeError('Expected object');
10779 S['[[WeakSetData]]'].set(value, true);
10780 return S;
10781 });
10782
10783 // 23.4.3.2 WeakSet.prototype.constructor
10784 // 23.4.3.3 WeakSet.prototype.delete ( value )
10785 define(
10786 WeakSet.prototype, 'delete',
10787 function delete_(value) {
10788 var S = strict(this);
10789 if (Type(S) !== 'object') throw TypeError();
10790 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
10791 if (Type(value) !== 'object') throw TypeError('Expected object');
10792 return S['[[WeakSetData]]'].remove(value);
10793 });
10794
10795 // 23.4.3.4 WeakSet.prototype.has ( value )
10796 define(
10797 WeakSet.prototype, 'has',
10798 function has(key) {
10799 var S = strict(this);
10800 if (Type(S) !== 'object') throw TypeError();
10801 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
10802 if (Type(key) !== 'object') throw TypeError('Expected object');
10803 return S['[[WeakSetData]]'].has(key);
10804 });
10805
10806 // 23.4.3.5 WeakSet.prototype [ @@toStringTag ]
10807 define(global.WeakSet.prototype, $$toStringTag, 'WeakSet');
10808
10809 // 23.4.4 Properties of WeakSet Instances
10810
10811 // Polyfills for incomplete native implementations:
10812 (function() {
10813 var ws = new global.WeakSet();
10814 var orig = global.WeakSet.prototype.add;
10815 define(global.WeakSet.prototype, 'add', function add() {
10816 orig.apply(this, arguments);
10817 return this;
10818 }, ws.add({}) !== ws);
10819 }());
10820 }());
10821
10822 // ---------------------------------------
10823 // 24 Structured Data
10824 // ---------------------------------------
10825
10826 // ---------------------------------------
10827 // 24.1 ArrayBuffer Objects
10828 // ---------------------------------------
10829
10830 // See typedarray.js for TypedArray polyfill
10831
10832 (function() {
10833 if (!('ArrayBuffer' in global))
10834 return;
10835
10836 // 24.1.1 Abstract Operations For ArrayBuffer Objects
10837 // 24.1.1.1 AllocateArrayBuffer( constructor, byteLength )
10838 // 24.1.1.2 IsDetachedBuffer( arrayBuffer )
10839 // 24.1.1.3 DetachArrayBuffer( arrayBuffer )
10840 // 24.1.1.4 CloneArrayBuffer( srcBuffer, srcByteOffset [, cloneConstructor] )
10841 // 24.1.1.5 GetValueFromBuffer ( arrayBuffer, byteIndex, type, isLittleEndian )
10842 // 24.1.1.6 SetValueInBuffer ( arrayBuffer, byteIndex, type, value, isLittleEndian )
10843 // 24.1.2 The ArrayBuffer Constructor
10844 // 24.1.2.1 ArrayBuffer( length )
10845 // 24.1.3 Properties of the ArrayBuffer Constructor
10846
10847 // 24.1.3.1 ArrayBuffer.isView ( arg )
10848 define(
10849 ArrayBuffer, 'isView',
10850 function isView(arg) {
10851 if (Type(arg) !== 'object') return false;
10852 if ('buffer' in arg && arg.buffer instanceof ArrayBuffer) return true;
10853 return false;
10854 });
10855
10856 // 24.1.3.2 ArrayBuffer.prototype
10857 // 24.1.3.3 get ArrayBuffer [ @@species ]
10858 // 24.1.4 Properties of the ArrayBuffer Prototype Object
10859 // 24.1.4.1 get ArrayBuffer.prototype.byteLength
10860 // 24.1.4.2 ArrayBuffer.prototype.constructor
10861 // 24.1.4.3 ArrayBuffer.prototype.slice ( start , end)
10862
10863 // 24.1.4.4 ArrayBuffer.prototype [ @@toStringTag ]
10864 define(ArrayBuffer.prototype, $$toStringTag, 'ArrayBuffer');
10865
10866 // 24.1.5 Properties of the ArrayBuffer Instances
10867 }());
10868
10869 // ---------------------------------------
10870 // 24.2 DataView Objects
10871 // ---------------------------------------
10872
10873 // See typedarray.js for TypedArray polyfill
10874
10875 (function() {
10876 if (!('DataView' in global))
10877 return;
10878
10879 // 24.2.1 Abstract Operations For DataView Objects
10880 // 24.2.1.1 GetViewValue(view, requestIndex, isLittleEndian, type)
10881 // 24.2.1.2 SetViewValue(view, requestIndex, isLittleEndian, type, value)
10882 // 24.2.2 The DataView Constructor
10883 // 24.2.2.1 DataView (buffer [ , byteOffset [ , byteLength ] ] )
10884 // 24.2.3 Properties of the DataView Constructor
10885 // 24.2.3.1 DataView.prototype
10886 // 24.2.4 Properties of the DataView Prototype Object
10887 // 24.2.4.1 get DataView.prototype.buffer
10888 // 24.2.4.2 get DataView.prototype.byteLength
10889 // 24.2.4.3 get DataView.prototype.byteOffset
10890 // 24.2.4.4 DataView.prototype.constructor
10891 // 24.2.4.5 DataView.prototype.getFloat32 ( byteOffset [ , littleEndian ] )
10892 // 24.2.4.6 DataView.prototype.getFloat64 ( byteOffset [ , littleEndian ] )
10893 // 24.2.4.7 DataView.prototype.getInt8 ( byteOffset )
10894 // 24.2.4.8 DataView.prototype.getInt16 ( byteOffset [ , littleEndian ] )
10895 // 24.2.4.9 DataView.prototype.getInt32 ( byteOffset [ , littleEndian ] )
10896 // 24.2.4.10 DataView.prototype.getUint8 ( byteOffset )
10897 // 24.2.4.11 DataView.prototype.getUint16 ( byteOffset [ , littleEndian ] )
10898 // 24.2.4.12 DataView.prototype.getUint32 ( byteOffset [ , littleEndian ] )
10899 // 24.2.4.13 DataView.prototype.setFloat32 ( byteOffset, value [ , littleEndian ] )
10900 // 24.2.4.14 DataView.prototype.setFloat64 ( byteOffset, value [ , littleEndian ] )
10901 // 24.2.4.15 DataView.prototype.setInt8 ( byteOffset, value )
10902 // 24.2.4.16 DataView.prototype.setInt16 ( byteOffset, value [ , littleEndian ] )
10903 // 24.2.4.17 DataView.prototype.setInt32 ( byteOffset, value [ , littleEndian ] )
10904 // 24.2.4.18 DataView.prototype.setUint8 ( byteOffset, value )
10905 // 24.2.4.19 DataView.prototype.setUint16 ( byteOffset, value [ , littleEndian ] )
10906 // 24.2.4.20 DataView.prototype.setUint32 ( byteOffset, value [ , littleEndian ] )
10907
10908 // 24.2.4.21 DataView.prototype[ @@toStringTag ]
10909 define(DataView.prototype, $$toStringTag, 'DataView');
10910
10911 // 24.2.5 Properties of DataView Instances
10912 }());
10913
10914 // ---------------------------------------
10915 // 24.3 The JSON Object
10916 // ---------------------------------------
10917
10918 // 24.3.1 JSON.parse ( text [ , reviver ] )
10919 // 24.3.2 JSON.stringify ( value [ , replacer [ , space ] ] )
10920 // 24.3.3 JSON [ @@toStringTag ]
10921 define(JSON, $$toStringTag, 'JSON');
10922
10923 // ---------------------------------------
10924 // 25.1 Iteration
10925 // ---------------------------------------
10926
10927 // 25.1.1 Common Iteration Interfaces
10928 // 25.1.1.1 The Iterable Interface
10929 // 25.1.1.2 The Iterator Interface
10930 // 25.1.1.3 The IteratorResult Interface
10931
10932 // 25.1.2 The %IteratorPrototype% Object
10933 // Defined earlier, so other prototypes can reference it.
10934 // 25.1.2.1 %IteratorPrototype% [ @@iterator ] ( )
10935 define($IteratorPrototype$, $$iterator, function() {
10936 return this;
10937 });
10938
10939
10940 // ---------------------------------------
10941 // 25.4 Promise Objects
10942 // ---------------------------------------
10943
10944 (function() {
10945 // 25.4 Promise Objects
10946
10947 // 25.4.1 Promise Abstract Operations
10948
10949 // 25.4.1.1 PromiseCapability Records
10950 // 25.4.1.1.1 IfAbruptRejectPromise ( value, capability )
10951
10952 function IfAbruptRejectPromise(value, capability) {
10953 var rejectResult = capability['[[Reject]]'].call(undefined, value);
10954 return capability['[[Promise]]'];
10955 }
10956
10957 // 25.4.1.2 PromiseReaction Records
10958
10959 // 25.4.1.3 CreateResolvingFunctions ( promise )
10960
10961 function CreateResolvingFunctions(promise) {
10962 var alreadyResolved = {'[[value]]': false};
10963 var resolve = PromiseResolveFunction();
10964 set_internal(resolve, '[[Promise]]', promise);
10965 set_internal(resolve, '[[AlreadyResolved]]', alreadyResolved);
10966 var reject = PromiseRejectFunction();
10967 set_internal(reject, '[[Promise]]', promise);
10968 set_internal(reject, '[[AlreadyResolved]]', alreadyResolved);
10969 return { '[[Resolve]]': resolve, '[[Reject]]': reject};
10970 }
10971
10972 // 25.4.1.3.1 Promise Reject Functions
10973
10974 function PromiseRejectFunction() {
10975 var F = function(reason) {
10976 console.assert(Type(F['[[Promise]]']) === 'object');
10977 var promise = F['[[Promise]]'];
10978 var alreadyResolved = F['[[AlreadyResolved]]'];
10979 if (alreadyResolved['[[value]]']) return undefined;
10980 set_internal(alreadyResolved, '[[value]]', true);
10981 return RejectPromise(promise, reason);
10982 };
10983 return F;
10984 }
10985
10986 // 25.4.1.3.2 Promise Resolve Functions
10987
10988 function PromiseResolveFunction() {
10989 var F = function(resolution) {
10990 console.assert(Type(F['[[Promise]]']) === 'object');
10991 var promise = F['[[Promise]]'];
10992 var alreadyResolved = F['[[AlreadyResolved]]'];
10993 if (alreadyResolved['[[value]]']) return undefined;
10994 set_internal(alreadyResolved, '[[value]]', true);
10995
10996 if (SameValue(resolution, promise)) {
10997 var selfResolutionError = TypeError();
10998 return RejectPromise(promise, selfResolutionError);
10999 }
11000 if (Type(resolution) !== 'object')
11001 return FulfillPromise(promise, resolution);
11002 try {
11003 var then = resolution['then'];
11004 } catch(then) {
11005 return RejectPromise(promise, then);
11006 }
11007 if (!IsCallable(then))
11008 return FulfillPromise(promise, resolution);
11009 EnqueueJob('PromiseJobs', PromiseResolveThenableJob, [promise, resolution, then]);
11010 return undefined;
11011 };
11012 return F;
11013 }
11014
11015 // 25.4.1.4 FulfillPromise ( promise, value )
11016
11017 function FulfillPromise(promise, value) {
11018 console.assert(promise['[[PromiseState]]'] === 'pending');
11019 var reactions = promise['[[PromiseFulfillReactions]]'];
11020 set_internal(promise, '[[PromiseResult]]', value);
11021 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
11022 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
11023 set_internal(promise, '[[PromiseState]]', 'fulfilled');
11024 return TriggerPromiseReactions(reactions, value);
11025 }
11026
11027 // 25.4.1.5 NewPromiseCapability ( C )
11028
11029 function NewPromiseCapability(c) {
11030 // To keep Promise hermetic, this doesn't look much like the spec.
11031 return CreatePromiseCapabilityRecord(undefined, c);
11032 }
11033
11034 // 25.4.1.5.1 CreatePromiseCapabilityRecord ( promise, constructor )
11035
11036 function CreatePromiseCapabilityRecord(promise, constructor) {
11037 // To keep Promise hermetic, this doesn't look much like the spec.
11038 console.assert(IsConstructor(constructor));
11039 var promiseCapability = {};
11040 set_internal(promiseCapability, '[[Promise]]', promise);
11041 set_internal(promiseCapability, '[[Resolve]]', undefined);
11042 set_internal(promiseCapability, '[[Reject]]', undefined);
11043 var executor = GetCapabilitiesExecutor();
11044 set_internal(executor, '[[Capability]]', promiseCapability);
11045
11046 // NOTE: Differs from spec; object is constructed here
11047 var constructorResult = promise = new constructor(executor);
11048 set_internal(promiseCapability, '[[Promise]]', promise);
11049
11050 if (!IsCallable(promiseCapability['[[Resolve]]'])) throw TypeError();
11051 if (!IsCallable(promiseCapability['[[Reject]]'])) throw TypeError();
11052 if (Type(constructorResult) === 'object' && !SameValue(promise, constructorResult)) throw TypeError();
11053 return promiseCapability;
11054 }
11055
11056 // 25.4.1.5.2 GetCapabilitiesExecutor Functions
11057
11058 function GetCapabilitiesExecutor() {
11059 var F = function(resolve, reject) {
11060 console.assert(F['[[Capability]]']);
11061 var promiseCapability = F['[[Capability]]'];
11062 if (promiseCapability['[[Resolve]]'] !== undefined) throw TypeError();
11063 if (promiseCapability['[[Reject]]'] !== undefined) throw TypeError();
11064 set_internal(promiseCapability, '[[Resolve]]', resolve);
11065 set_internal(promiseCapability, '[[Reject]]', reject);
11066 return undefined;
11067 };
11068 return F;
11069 }
11070
11071 // 25.4.1.6 IsPromise ( x )
11072
11073 function IsPromise(x) {
11074 if (Type(x) !== 'object') return false;
11075 if (!('[[PromiseState]]' in x)) return false;
11076 if (x['[[PromiseState]]'] === undefined) return false;
11077 return true;
11078 }
11079
11080 // 25.4.1.7 RejectPromise ( promise, reason )
11081
11082 function RejectPromise(promise, reason) {
11083 console.assert(promise['[[PromiseState]]'] === 'pending');
11084 var reactions = promise['[[PromiseRejectReactions]]'];
11085 set_internal(promise, '[[PromiseResult]]', reason);
11086 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
11087 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
11088 set_internal(promise, '[[PromiseState]]', 'rejected');
11089 return TriggerPromiseReactions(reactions, reason);
11090 }
11091
11092 // 25.4.1.8 TriggerPromiseReactions ( reactions, argument )
11093
11094 function TriggerPromiseReactions(reactions, argument) {
11095 for (var i = 0, len = reactions.length; i < len; ++i)
11096 EnqueueJob('PromiseJobs', PromiseReactionJob, [reactions[i], argument]);
11097 return undefined;
11098 }
11099
11100 // 25.4.2 Promise Jobs
11101
11102 // 25.4.2.1 PromiseReactionJob ( reaction, argument )
11103
11104 function PromiseReactionJob(reaction, argument) {
11105 var promiseCapability = reaction['[[Capabilities]]'];
11106 var handler = reaction['[[Handler]]'];
11107 var handlerResult, status;
11108 try {
11109 if (handler === 'Identity') handlerResult = argument;
11110 else if (handler === 'Thrower') throw argument;
11111 else handlerResult = handler.call(undefined, argument);
11112 } catch (handlerResult) {
11113 status = promiseCapability['[[Reject]]'].call(undefined, handlerResult);
11114 NextJob(status); return;
11115 }
11116 status = promiseCapability['[[Resolve]]'].call(undefined, handlerResult);
11117 NextJob(status);
11118 }
11119
11120 // 25.4.2.2 PromiseResolveThenableJob ( promiseToResolve, thenable, then)
11121
11122 function PromiseResolveThenableJob(promiseToResolve, thenable, then) {
11123 // SPEC BUG: promise vs. promiseToResolve
11124 var resolvingFunctions = CreateResolvingFunctions(promiseToResolve);
11125 try {
11126 var thenCallResult = then.call(thenable, resolvingFunctions['[[Resolve]]'],
11127 resolvingFunctions['[[Reject]]']);
11128 } catch (thenCallResult) {
11129 var status = resolvingFunctions['[[Reject]]'].call(undefined, thenCallResult);
11130 NextJob(status); return;
11131 }
11132 NextJob(thenCallResult);
11133 }
11134
11135 // 25.4.3 The Promise Constructor
11136
11137 // 25.4.3.1 Promise ( executor )
11138
11139 function Promise(executor) {
11140 var config = { configurable: false, enumerable: false, writable: true, value: undefined };
11141 Object.defineProperty(this, '[[PromiseState]]', config);
11142 Object.defineProperty(this, '[[PromiseConstructor]]', config);
11143 Object.defineProperty(this, '[[PromiseResult]]', config);
11144 Object.defineProperty(this, '[[PromiseFulfillReactions]]', config);
11145 Object.defineProperty(this, '[[PromiseRejectReactions]]', config);
11146
11147 var promise = this;
11148 if (Type(promise) !== 'object') throw new TypeError();
11149 if (!('[[PromiseState]]' in promise)) throw TypeError();
11150 if (promise['[[PromiseState]]'] !== undefined) throw TypeError();
11151 if (!IsCallable(executor)) throw TypeError();
11152
11153 set_internal(promise, '[[PromiseConstructor]]', Promise);
11154
11155 return InitializePromise(promise, executor);
11156 }
11157
11158 // 25.4.3.1.1 InitializePromise ( promise, executor )
11159
11160 function InitializePromise(promise, executor) {
11161 console.assert('[[PromiseState]]' in promise);
11162 console.assert(IsCallable(executor));
11163 set_internal(promise, '[[PromiseState]]', 'pending');
11164 set_internal(promise, '[[PromiseFulfillReactions]]', []);
11165 set_internal(promise, '[[PromiseRejectReactions]]', []);
11166 var resolvingFunctions = CreateResolvingFunctions(promise);
11167 try {
11168 var completion = executor.call(undefined, resolvingFunctions['[[Resolve]]'],
11169 resolvingFunctions['[[Reject]]']);
11170 } catch (completion) {
11171 var status = resolvingFunctions['[[Reject]]'].call(undefined, completion);
11172 }
11173 return promise;
11174 }
11175
11176 // 25.4.4 Properties of the Promise Constructor
11177 // 25.4.4.1 Promise.all ( iterable )
11178
11179 define(Promise, 'all', function all(iterable) {
11180 var c = strict(this);
11181 var promiseCapability = NewPromiseCapability(c);
11182 try {
11183 var iterator = GetIterator(iterable);
11184 } catch (value) {
11185 promiseCapability['[[Reject]]'].call(undefined, value);
11186 return promiseCapability['[[Promise]]'];
11187 }
11188 var values = [];
11189 var remainingElementsCount = { value: 1 };
11190 var index = 0;
11191 while (true) {
11192 try {
11193 var next = IteratorStep(iterator);
11194 } catch (value) {
11195 promiseCapability['[[Reject]]'].call(undefined, value);
11196 return promiseCapability['[[Promise]]'];
11197 }
11198 if (!next) {
11199 remainingElementsCount.value -= 1;
11200 if (remainingElementsCount.value === 0) {
11201 var resolveResult = promiseCapability['[[Resolve]]'].apply(undefined, values);
11202
11203
11204 }
11205 return promiseCapability['[[Promise]]'];
11206 }
11207 try {
11208 var nextValue = IteratorValue(next);
11209 } catch (value) {
11210 promiseCapability['[[Reject]]'].call(undefined, value);
11211 return promiseCapability['[[Promise]]'];
11212 }
11213 try {
11214 var nextPromise = c.resolve(nextValue);
11215 } catch (value) {
11216 promiseCapability['[[Reject]]'].call(undefined, value);
11217 return promiseCapability['[[Promise]]'];
11218 }
11219 var resolveElement = PromiseAllResolveElementFunction();
11220 set_internal(resolveElement, '[[AlreadyCalled]]', { value: false });
11221 set_internal(resolveElement, '[[Index]]', index);
11222 set_internal(resolveElement, '[[Values]]', values);
11223 set_internal(resolveElement, '[[Capabilities]]', promiseCapability);
11224 set_internal(resolveElement, '[[RemainingElements]]', remainingElementsCount);
11225 remainingElementsCount.value += 1;
11226 try {
11227 var result = nextPromise.then(resolveElement, promiseCapability['[[Reject]]']);
11228 } catch (value) {
11229 promiseCapability['[[Reject]]'].call(undefined, value);
11230 return promiseCapability['[[Promise]]'];
11231 }
11232 index += 1;
11233 }
11234 });
11235
11236 // 25.4.4.1.1 Promise.all Resolve Element Functions
11237
11238 function PromiseAllResolveElementFunction() {
11239 var F = function(x) {
11240 var alreadyCalled = F['[[AlreadyCalled]]'];
11241 if (alreadyCalled.value) return undefined;
11242 alreadyCalled.value = true;
11243 var index = F['[[Index]]'];
11244 var values = F['[[Values]]'];
11245 var promiseCapability = F['[[Capabilities]]'];
11246 var remainingElementsCount = F['[[RemainingElements]]'];
11247 try {
11248 values[index] = x;
11249 } catch (result) {
11250 promiseCapability['[[Reject]]'].call(undefined, result);
11251 return promiseCapability['[[Promise]]'];
11252 }
11253 remainingElementsCount.value -= 1;
11254 if (remainingElementsCount.value === 0)
11255 return promiseCapability['[[Resolve]]'].call(undefined, values);
11256 return undefined;
11257 };
11258 return F;
11259 }
11260
11261 // 25.4.4.2 Promise.prototype
11262
11263 Promise.prototype = {};
11264
11265 // 25.4.4.3 Promise.race ( iterable )
11266
11267 define(Promise, 'race', function race(iterable) {
11268 var c = strict(this);
11269 var promiseCapability = NewPromiseCapability(c);
11270 try {
11271 var iterator = GetIterator(iterable);
11272 } catch (value) {
11273 promiseCapability['[[Reject]]'].call(undefined, value);
11274 return promiseCapability['[[Promise]]'];
11275 }
11276 while (true) {
11277 try {
11278 var next = IteratorStep(iterator);
11279 } catch (value) {
11280 promiseCapability['[[Reject]]'].call(undefined, value);
11281 return promiseCapability['[[Promise]]'];
11282 }
11283 if (!next) return promiseCapability['[[Promise]]'];
11284 try {
11285 var nextValue = IteratorValue(next);
11286 } catch (value) {
11287 promiseCapability['[[Reject]]'].call(undefined, value);
11288 return promiseCapability['[[Promise]]'];
11289 }
11290 try {
11291 var nextPromise = c.resolve(nextValue);
11292 } catch (value) {
11293 promiseCapability['[[Reject]]'].call(undefined, value);
11294 return promiseCapability['[[Promise]]'];
11295 }
11296 try {
11297 nextPromise.then(promiseCapability['[[Resolve]]'], promiseCapability['[[Reject]]']);
11298 } catch (value) {
11299 promiseCapability['[[Reject]]'].call(undefined, value);
11300 return promiseCapability['[[Promise]]'];
11301 }
11302 }
11303 });
11304
11305 // 25.4.4.4 Promise.reject ( r )
11306
11307 define(Promise, 'reject', function reject(r) {
11308 var c = strict(this);
11309 var promiseCapability = NewPromiseCapability(c);
11310 var rejectResult = promiseCapability['[[Reject]]'].call(undefined, r);
11311 return promiseCapability['[[Promise]]'];
11312 });
11313
11314 // 25.4.4.5 Promise.resolve ( x )
11315
11316 define(Promise, 'resolve', function resolve(x) {
11317 var c = strict(this);
11318 if (IsPromise(x)) {
11319 var constructor = x['[[PromiseConstructor]]'];
11320 if (SameValue(constructor, c)) return x;
11321 }
11322 var promiseCapability = NewPromiseCapability(c);
11323 var resolveResult = promiseCapability['[[Resolve]]'].call(undefined, x);
11324 return promiseCapability['[[Promise]]'];
11325 });
11326
11327 // 25.4.4.6 Promise [ @@create ] ( )
11328 // 25.4.4.6.1 AllocatePromise ( constructor )
11329 // 25.4.5 Properties of the Promise Prototype Object
11330 // 25.4.5.1 Promise.prototype.catch ( onRejected )
11331
11332 define(Promise.prototype, 'catch', function catch_(onRejected) {
11333 var promise = this;
11334 return promise.then(undefined, onRejected);
11335 });
11336
11337 // 25.4.5.2 Promise.prototype.constructor
11338
11339 Promise.prototype.constructor = Promise;
11340
11341 // 25.4.5.3 Promise.prototype.then ( onFulfilled , onRejected )
11342
11343 define(Promise.prototype, 'then', function then(onFulfilled, onRejected) {
11344 var promise = this;
11345 if (!IsPromise(promise)) throw TypeError();
11346 if (!IsCallable(onFulfilled)) onFulfilled = 'Identity';
11347 if (!IsCallable(onRejected)) onRejected = 'Thrower';
11348 var c = promise.constructor;
11349 var promiseCapability = NewPromiseCapability(c);
11350 var fulfillReaction = { '[[Capabilities]]': promiseCapability,
11351 '[[Handler]]': onFulfilled };
11352 var rejectReaction = { '[[Capabilities]]': promiseCapability,
11353 '[[Handler]]': onRejected };
11354 if (promise['[[PromiseState]]'] === 'pending') {
11355 promise['[[PromiseFulfillReactions]]'].push(fulfillReaction);
11356 promise['[[PromiseRejectReactions]]'].push(rejectReaction);
11357 } else if (promise['[[PromiseState]]'] === 'fulfilled') {
11358 var value = promise['[[PromiseResult]]'];
11359 EnqueueJob('PromiseJobs', PromiseReactionJob, [fulfillReaction, value]);
11360 } else if (promise['[[PromiseState]]'] === 'rejected') {
11361 var reason = promise['[[PromiseResult]]'];
11362 EnqueueJob('PromiseJobs', PromiseReactionJob, [rejectReaction, reason]);
11363 }
11364 return promiseCapability['[[Promise]]'];
11365 });
11366
11367 // 25.4.6 Properties of Promise Instances
11368
11369 if (!('Promise' in global) || OVERRIDE_NATIVE_FOR_TESTING)
11370 global.Promise = Promise;
11371
11372 // Patch early Promise.cast vs. Promise.resolve implementations
11373 if ('cast' in global.Promise) global.Promise.resolve = global.Promise.cast;
11374 }());
11375
11376 // 25.4.5.1 Promise.prototype [ @@toStringTag ]
11377 define(Promise.prototype, $$toStringTag, 'Promise');
11378
11379 // ---------------------------------------
11380 // 26 Reflection
11381 // ---------------------------------------
11382
11383 (function() {
11384 // 26.1 The Reflect Object
11385 if (!('Reflect' in global) || OVERRIDE_NATIVE_FOR_TESTING)
11386 global.Reflect = {};
11387
11388 // 26.1.1 Reflect.apply ( target, thisArgument, argumentsList )
11389 define(
11390 Reflect, 'apply',
11391 function apply(target, thisArgument, argumentsList) {
11392 if (!IsCallable(target)) throw TypeError();
11393 return Function.prototype.apply.call(target, thisArgument, argumentsList);
11394 });
11395
11396 // 26.1.2 Reflect.construct ( target, argumentsList [, newTarget] )
11397 define(
11398 Reflect, 'construct',
11399 function construct(target, argumentsList) {
11400 return __cons(target, argumentsList);
11401 });
11402
11403 // 26.1.3 Reflect.defineProperty ( target, propertyKey, attributes )
11404 define(
11405 Reflect, 'defineProperty',
11406 function defineProperty(target, propertyKey, attributes) {
11407 try {
11408 Object.defineProperty(target, propertyKey, attributes);
11409 return true;
11410 } catch (_) {
11411 return false;
11412 }
11413 });
11414
11415 // 26.1.4 Reflect.deleteProperty ( target, propertyKey )
11416 define(
11417 Reflect, 'deleteProperty',
11418 function deleteProperty(target,name) {
11419 try {
11420 delete target[name];
11421 return !HasOwnProperty(target, name);
11422 } catch (_) {
11423 return false;
11424 }
11425 });
11426
11427 // 26.1.5 Reflect.enumerate ( target )
11428 define(
11429 Reflect, 'enumerate',
11430 function enumerate(target) {
11431 target = ToObject(target);
11432 var iterator = Enumerate(target);
11433 return iterator;
11434 });
11435
11436 // 26.1.6 Reflect.get ( target, propertyKey [ , receiver ])
11437 define(
11438 Reflect, 'get',
11439 function get(target, name, receiver) {
11440 target = ToObject(target);
11441 name = String(name);
11442 receiver = (receiver === undefined) ? target : ToObject(receiver);
11443 var desc = getPropertyDescriptor(target, name);
11444 if (desc && 'get' in desc)
11445 return Function.prototype.call.call(desc['get'], receiver);
11446 return target[name];
11447 });
11448
11449 // 26.1.7 Reflect.getOwnPropertyDescriptor ( target, propertyKey )
11450 define(
11451 Reflect, 'getOwnPropertyDescriptor',
11452 Object.getOwnPropertyDescriptor);
11453
11454 // 26.1.8 Reflect.getPrototypeOf ( target )
11455 define(
11456 Reflect, 'getPrototypeOf',
11457 Object.getPrototypeOf);
11458
11459 // 26.1.9 Reflect.has ( target, propertyKey )
11460 define(
11461 Reflect, 'has',
11462 function has(target,name) {
11463 return String(name) in ToObject(target);
11464 });
11465
11466 // 26.1.10 Reflect.isExtensible (target)
11467 define(
11468 Reflect, 'isExtensible',
11469 Object.isExtensible);
11470
11471 // 26.1.11 Reflect.ownKeys ( target )
11472 define(
11473 Reflect, 'ownKeys',
11474 function ownKeys(target) {
11475 var obj = ToObject(target);
11476 return Object.getOwnPropertyNames(obj);
11477 });
11478
11479 // 26.1.12 Reflect.preventExtensions ( target )
11480 define(
11481 Reflect, 'preventExtensions',
11482 function preventExtensions(target) {
11483 try { Object.preventExtensions(target); return true; } catch (_) { return false; }
11484 });
11485
11486 // 26.1.13 Reflect.set ( target, propertyKey, V [ , receiver ] )
11487 define(
11488 Reflect, 'set',
11489 function set(target, name, value, receiver) {
11490 target = ToObject(target);
11491 name = String(name);
11492 receiver = (receiver === undefined) ? target : ToObject(receiver);
11493 var desc = getPropertyDescriptor(target, name);
11494 try {
11495 if (desc && 'set' in desc)
11496 Function.prototype.call.call(desc['set'], receiver, value);
11497 else
11498 target[name] = value;
11499 return true;
11500 } catch (_) {
11501 return false;
11502 }
11503 });
11504
11505 // 26.1.14 Reflect.setPrototypeOf ( target, proto )
11506 define(
11507 Reflect, 'setPrototypeOf',
11508 function setPrototypeOf(target, proto) {
11509 try {
11510 target.__proto__ = proto;
11511 return Reflect.getPrototypeOf(target) === proto;
11512 } catch(_) {
11513 return false;
11514 }
11515 });
11516
11517 }());
11518
11519 // ---------------------------------------
11520 // 26.2 Proxy Objects
11521 // ---------------------------------------
11522
11523 // Not polyfillable.
11524
11525 }(self));
11526
11527 // This helper is defined outside the main scope so that the use of
11528 // 'eval' does not taint the scope for minifiers.
11529 function __cons(t, a) {
11530 return eval('new t(' + a.map(function(_, i) { return 'a[' + i + ']'; }).join(',') + ')');
11531 }
11532 </script>
11533 <script>(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.foo = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
11534 'use strict'
11535
11536 exports.byteLength = byteLength
11537 exports.toByteArray = toByteArray
11538 exports.fromByteArray = fromByteArray
11539
11540 var lookup = []
11541 var revLookup = []
11542 var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
11543
11544 var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
11545 for (var i = 0, len = code.length; i < len; ++i) {
11546 lookup[i] = code[i]
11547 revLookup[code.charCodeAt(i)] = i
11548 }
11549
11550 revLookup['-'.charCodeAt(0)] = 62
11551 revLookup['_'.charCodeAt(0)] = 63
11552
11553 function placeHoldersCount (b64) {
11554 var len = b64.length
11555 if (len % 4 > 0) {
11556 throw new Error('Invalid string. Length must be a multiple of 4')
11557 }
11558
11559 // the number of equal signs (place holders)
11560 // if there are two placeholders, than the two characters before it
11561 // represent one byte
11562 // if there is only one, then the three characters before it represent 2 bytes
11563 // this is just a cheap hack to not do indexOf twice
11564 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
11565 }
11566
11567 function byteLength (b64) {
11568 // base64 is 4/3 + up to two characters of the original data
11569 return b64.length * 3 / 4 - placeHoldersCount(b64)
11570 }
11571
11572 function toByteArray (b64) {
11573 var i, j, l, tmp, placeHolders, arr
11574 var len = b64.length
11575 placeHolders = placeHoldersCount(b64)
11576
11577 arr = new Arr(len * 3 / 4 - placeHolders)
11578
11579 // if there are placeholders, only get up to the last complete 4 chars
11580 l = placeHolders > 0 ? len - 4 : len
11581
11582 var L = 0
11583
11584 for (i = 0, j = 0; i < l; i += 4, j += 3) {
11585 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
11586 arr[L++] = (tmp >> 16) & 0xFF
11587 arr[L++] = (tmp >> 8) & 0xFF
11588 arr[L++] = tmp & 0xFF
11589 }
11590
11591 if (placeHolders === 2) {
11592 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
11593 arr[L++] = tmp & 0xFF
11594 } else if (placeHolders === 1) {
11595 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
11596 arr[L++] = (tmp >> 8) & 0xFF
11597 arr[L++] = tmp & 0xFF
11598 }
11599
11600 return arr
11601 }
11602
11603 function tripletToBase64 (num) {
11604 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
11605 }
11606
11607 function encodeChunk (uint8, start, end) {
11608 var tmp
11609 var output = []
11610 for (var i = start; i < end; i += 3) {
11611 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
11612 output.push(tripletToBase64(tmp))
11613 }
11614 return output.join('')
11615 }
11616
11617 function fromByteArray (uint8) {
11618 var tmp
11619 var len = uint8.length
11620 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
11621 var output = ''
11622 var parts = []
11623 var maxChunkLength = 16383 // must be multiple of 3
11624
11625 // go through the array every three bytes, we'll deal with trailing stuff later
11626 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
11627 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
11628 }
11629
11630 // pad the end with zeros, but make sure to not forget the extra bytes
11631 if (extraBytes === 1) {
11632 tmp = uint8[len - 1]
11633 output += lookup[tmp >> 2]
11634 output += lookup[(tmp << 4) & 0x3F]
11635 output += '=='
11636 } else if (extraBytes === 2) {
11637 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
11638 output += lookup[tmp >> 10]
11639 output += lookup[(tmp >> 4) & 0x3F]
11640 output += lookup[(tmp << 2) & 0x3F]
11641 output += '='
11642 }
11643
11644 parts.push(output)
11645
11646 return parts.join('')
11647 }
11648
11649 },{}],2:[function(require,module,exports){
11650 /*!
11651 * The buffer module from node.js, for the browser.
11652 *
11653 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
11654 * @license MIT
11655 */
11656 /* eslint-disable no-proto */
11657
11658 'use strict'
11659
11660 var base64 = require('base64-js')
11661 var ieee754 = require('ieee754')
11662
11663 exports.Buffer = Buffer
11664 exports.SlowBuffer = SlowBuffer
11665 exports.INSPECT_MAX_BYTES = 50
11666
11667 var K_MAX_LENGTH = 0x7fffffff
11668 exports.kMaxLength = K_MAX_LENGTH
11669
11670 /**
11671 * If `Buffer.TYPED_ARRAY_SUPPORT`:
11672 * === true Use Uint8Array implementation (fastest)
11673 * === false Print warning and recommend using `buffer` v4.x which has an Object
11674 * implementation (most compatible, even IE6)
11675 *
11676 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
11677 * Opera 11.6+, iOS 4.2+.
11678 *
11679 * We report that the browser does not support typed arrays if the are not subclassable
11680 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
11681 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
11682 * for __proto__ and has a buggy typed array implementation.
11683 */
11684 Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
11685
11686 if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
11687 typeof console.error === 'function') {
11688 console.error(
11689 'This browser lacks typed array (Uint8Array) support which is required by ' +
11690 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
11691 )
11692 }
11693
11694 function typedArraySupport () {
11695 // Can typed array instances can be augmented?
11696 try {
11697 var arr = new Uint8Array(1)
11698 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
11699 return arr.foo() === 42
11700 } catch (e) {
11701 return false
11702 }
11703 }
11704
11705 function createBuffer (length) {
11706 if (length > K_MAX_LENGTH) {
11707 throw new RangeError('Invalid typed array length')
11708 }
11709 // Return an augmented `Uint8Array` instance
11710 var buf = new Uint8Array(length)
11711 buf.__proto__ = Buffer.prototype
11712 return buf
11713 }
11714
11715 /**
11716 * The Buffer constructor returns instances of `Uint8Array` that have their
11717 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
11718 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
11719 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
11720 * returns a single octet.
11721 *
11722 * The `Uint8Array` prototype remains unmodified.
11723 */
11724
11725 function Buffer (arg, encodingOrOffset, length) {
11726 // Common case.
11727 if (typeof arg === 'number') {
11728 if (typeof encodingOrOffset === 'string') {
11729 throw new Error(
11730 'If encoding is specified then the first argument must be a string'
11731 )
11732 }
11733 return allocUnsafe(arg)
11734 }
11735 return from(arg, encodingOrOffset, length)
11736 }
11737
11738 // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
11739 if (typeof Symbol !== 'undefined' && Symbol.species &&
11740 Buffer[Symbol.species] === Buffer) {
11741 Object.defineProperty(Buffer, Symbol.species, {
11742 value: null,
11743 configurable: true,
11744 enumerable: false,
11745 writable: false
11746 })
11747 }
11748
11749 Buffer.poolSize = 8192 // not used by this implementation
11750
11751 function from (value, encodingOrOffset, length) {
11752 if (typeof value === 'number') {
11753 throw new TypeError('"value" argument must not be a number')
11754 }
11755
11756 if (value instanceof ArrayBuffer) {
11757 return fromArrayBuffer(value, encodingOrOffset, length)
11758 }
11759
11760 if (typeof value === 'string') {
11761 return fromString(value, encodingOrOffset)
11762 }
11763
11764 return fromObject(value)
11765 }
11766
11767 /**
11768 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
11769 * if value is a number.
11770 * Buffer.from(str[, encoding])
11771 * Buffer.from(array)
11772 * Buffer.from(buffer)
11773 * Buffer.from(arrayBuffer[, byteOffset[, length]])
11774 **/
11775 Buffer.from = function (value, encodingOrOffset, length) {
11776 return from(value, encodingOrOffset, length)
11777 }
11778
11779 // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
11780 // https://github.com/feross/buffer/pull/148
11781 Buffer.prototype.__proto__ = Uint8Array.prototype
11782 Buffer.__proto__ = Uint8Array
11783
11784 function assertSize (size) {
11785 if (typeof size !== 'number') {
11786 throw new TypeError('"size" argument must be a number')
11787 } else if (size < 0) {
11788 throw new RangeError('"size" argument must not be negative')
11789 }
11790 }
11791
11792 function alloc (size, fill, encoding) {
11793 assertSize(size)
11794 if (size <= 0) {
11795 return createBuffer(size)
11796 }
11797 if (fill !== undefined) {
11798 // Only pay attention to encoding if it's a string. This
11799 // prevents accidentally sending in a number that would
11800 // be interpretted as a start offset.
11801 return typeof encoding === 'string'
11802 ? createBuffer(size).fill(fill, encoding)
11803 : createBuffer(size).fill(fill)
11804 }
11805 return createBuffer(size)
11806 }
11807
11808 /**
11809 * Creates a new filled Buffer instance.
11810 * alloc(size[, fill[, encoding]])
11811 **/
11812 Buffer.alloc = function (size, fill, encoding) {
11813 return alloc(size, fill, encoding)
11814 }
11815
11816 function allocUnsafe (size) {
11817 assertSize(size)
11818 return createBuffer(size < 0 ? 0 : checked(size) | 0)
11819 }
11820
11821 /**
11822 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
11823 * */
11824 Buffer.allocUnsafe = function (size) {
11825 return allocUnsafe(size)
11826 }
11827 /**
11828 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
11829 */
11830 Buffer.allocUnsafeSlow = function (size) {
11831 return allocUnsafe(size)
11832 }
11833
11834 function fromString (string, encoding) {
11835 if (typeof encoding !== 'string' || encoding === '') {
11836 encoding = 'utf8'
11837 }
11838
11839 if (!Buffer.isEncoding(encoding)) {
11840 throw new TypeError('"encoding" must be a valid string encoding')
11841 }
11842
11843 var length = byteLength(string, encoding) | 0
11844 var buf = createBuffer(length)
11845
11846 var actual = buf.write(string, encoding)
11847
11848 if (actual !== length) {
11849 // Writing a hex string, for example, that contains invalid characters will
11850 // cause everything after the first invalid character to be ignored. (e.g.
11851 // 'abxxcd' will be treated as 'ab')
11852 buf = buf.slice(0, actual)
11853 }
11854
11855 return buf
11856 }
11857
11858 function fromArrayLike (array) {
11859 var length = array.length < 0 ? 0 : checked(array.length) | 0
11860 var buf = createBuffer(length)
11861 for (var i = 0; i < length; i += 1) {
11862 buf[i] = array[i] & 255
11863 }
11864 return buf
11865 }
11866
11867 function fromArrayBuffer (array, byteOffset, length) {
11868 if (byteOffset < 0 || array.byteLength < byteOffset) {
11869 throw new RangeError('\'offset\' is out of bounds')
11870 }
11871
11872 if (array.byteLength < byteOffset + (length || 0)) {
11873 throw new RangeError('\'length\' is out of bounds')
11874 }
11875
11876 var buf
11877 if (byteOffset === undefined && length === undefined) {
11878 buf = new Uint8Array(array)
11879 } else if (length === undefined) {
11880 buf = new Uint8Array(array, byteOffset)
11881 } else {
11882 buf = new Uint8Array(array, byteOffset, length)
11883 }
11884
11885 // Return an augmented `Uint8Array` instance
11886 buf.__proto__ = Buffer.prototype
11887 return buf
11888 }
11889
11890 function fromObject (obj) {
11891 if (Buffer.isBuffer(obj)) {
11892 var len = checked(obj.length) | 0
11893 var buf = createBuffer(len)
11894
11895 if (buf.length === 0) {
11896 return buf
11897 }
11898
11899 obj.copy(buf, 0, 0, len)
11900 return buf
11901 }
11902
11903 if (obj) {
11904 if (isArrayBufferView(obj) || 'length' in obj) {
11905 if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
11906 return createBuffer(0)
11907 }
11908 return fromArrayLike(obj)
11909 }
11910
11911 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
11912 return fromArrayLike(obj.data)
11913 }
11914 }
11915
11916 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
11917 }
11918
11919 function checked (length) {
11920 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
11921 // length is NaN (which is otherwise coerced to zero.)
11922 if (length >= K_MAX_LENGTH) {
11923 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
11924 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
11925 }
11926 return length | 0
11927 }
11928
11929 function SlowBuffer (length) {
11930 if (+length != length) { // eslint-disable-line eqeqeq
11931 length = 0
11932 }
11933 return Buffer.alloc(+length)
11934 }
11935
11936 Buffer.isBuffer = function isBuffer (b) {
11937 return b != null && b._isBuffer === true
11938 }
11939
11940 Buffer.compare = function compare (a, b) {
11941 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
11942 throw new TypeError('Arguments must be Buffers')
11943 }
11944
11945 if (a === b) return 0
11946
11947 var x = a.length
11948 var y = b.length
11949
11950 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
11951 if (a[i] !== b[i]) {
11952 x = a[i]
11953 y = b[i]
11954 break
11955 }
11956 }
11957
11958 if (x < y) return -1
11959 if (y < x) return 1
11960 return 0
11961 }
11962
11963 Buffer.isEncoding = function isEncoding (encoding) {
11964 switch (String(encoding).toLowerCase()) {
11965 case 'hex':
11966 case 'utf8':
11967 case 'utf-8':
11968 case 'ascii':
11969 case 'latin1':
11970 case 'binary':
11971 case 'base64':
11972 case 'ucs2':
11973 case 'ucs-2':
11974 case 'utf16le':
11975 case 'utf-16le':
11976 return true
11977 default:
11978 return false
11979 }
11980 }
11981
11982 Buffer.concat = function concat (list, length) {
11983 if (!Array.isArray(list)) {
11984 throw new TypeError('"list" argument must be an Array of Buffers')
11985 }
11986
11987 if (list.length === 0) {
11988 return Buffer.alloc(0)
11989 }
11990
11991 var i
11992 if (length === undefined) {
11993 length = 0
11994 for (i = 0; i < list.length; ++i) {
11995 length += list[i].length
11996 }
11997 }
11998
11999 var buffer = Buffer.allocUnsafe(length)
12000 var pos = 0
12001 for (i = 0; i < list.length; ++i) {
12002 var buf = list[i]
12003 if (!Buffer.isBuffer(buf)) {
12004 throw new TypeError('"list" argument must be an Array of Buffers')
12005 }
12006 buf.copy(buffer, pos)
12007 pos += buf.length
12008 }
12009 return buffer
12010 }
12011
12012 function byteLength (string, encoding) {
12013 if (Buffer.isBuffer(string)) {
12014 return string.length
12015 }
12016 if (isArrayBufferView(string) || string instanceof ArrayBuffer) {
12017 return string.byteLength
12018 }
12019 if (typeof string !== 'string') {
12020 string = '' + string
12021 }
12022
12023 var len = string.length
12024 if (len === 0) return 0
12025
12026 // Use a for loop to avoid recursion
12027 var loweredCase = false
12028 for (;;) {
12029 switch (encoding) {
12030 case 'ascii':
12031 case 'latin1':
12032 case 'binary':
12033 return len
12034 case 'utf8':
12035 case 'utf-8':
12036 case undefined:
12037 return utf8ToBytes(string).length
12038 case 'ucs2':
12039 case 'ucs-2':
12040 case 'utf16le':
12041 case 'utf-16le':
12042 return len * 2
12043 case 'hex':
12044 return len >>> 1
12045 case 'base64':
12046 return base64ToBytes(string).length
12047 default:
12048 if (loweredCase) return utf8ToBytes(string).length // assume utf8
12049 encoding = ('' + encoding).toLowerCase()
12050 loweredCase = true
12051 }
12052 }
12053 }
12054 Buffer.byteLength = byteLength
12055
12056 function slowToString (encoding, start, end) {
12057 var loweredCase = false
12058
12059 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
12060 // property of a typed array.
12061
12062 // This behaves neither like String nor Uint8Array in that we set start/end
12063 // to their upper/lower bounds if the value passed is out of range.
12064 // undefined is handled specially as per ECMA-262 6th Edition,
12065 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
12066 if (start === undefined || start < 0) {
12067 start = 0
12068 }
12069 // Return early if start > this.length. Done here to prevent potential uint32
12070 // coercion fail below.
12071 if (start > this.length) {
12072 return ''
12073 }
12074
12075 if (end === undefined || end > this.length) {
12076 end = this.length
12077 }
12078
12079 if (end <= 0) {
12080 return ''
12081 }
12082
12083 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
12084 end >>>= 0
12085 start >>>= 0
12086
12087 if (end <= start) {
12088 return ''
12089 }
12090
12091 if (!encoding) encoding = 'utf8'
12092
12093 while (true) {
12094 switch (encoding) {
12095 case 'hex':
12096 return hexSlice(this, start, end)
12097
12098 case 'utf8':
12099 case 'utf-8':
12100 return utf8Slice(this, start, end)
12101
12102 case 'ascii':
12103 return asciiSlice(this, start, end)
12104
12105 case 'latin1':
12106 case 'binary':
12107 return latin1Slice(this, start, end)
12108
12109 case 'base64':
12110 return base64Slice(this, start, end)
12111
12112 case 'ucs2':
12113 case 'ucs-2':
12114 case 'utf16le':
12115 case 'utf-16le':
12116 return utf16leSlice(this, start, end)
12117
12118 default:
12119 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
12120 encoding = (encoding + '').toLowerCase()
12121 loweredCase = true
12122 }
12123 }
12124 }
12125
12126 // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
12127 // to detect a Buffer instance. It's not possible to use `instanceof Buffer`
12128 // reliably in a browserify context because there could be multiple different
12129 // copies of the 'buffer' package in use. This method works even for Buffer
12130 // instances that were created from another copy of the `buffer` package.
12131 // See: https://github.com/feross/buffer/issues/154
12132 Buffer.prototype._isBuffer = true
12133
12134 function swap (b, n, m) {
12135 var i = b[n]
12136 b[n] = b[m]
12137 b[m] = i
12138 }
12139
12140 Buffer.prototype.swap16 = function swap16 () {
12141 var len = this.length
12142 if (len % 2 !== 0) {
12143 throw new RangeError('Buffer size must be a multiple of 16-bits')
12144 }
12145 for (var i = 0; i < len; i += 2) {
12146 swap(this, i, i + 1)
12147 }
12148 return this
12149 }
12150
12151 Buffer.prototype.swap32 = function swap32 () {
12152 var len = this.length
12153 if (len % 4 !== 0) {
12154 throw new RangeError('Buffer size must be a multiple of 32-bits')
12155 }
12156 for (var i = 0; i < len; i += 4) {
12157 swap(this, i, i + 3)
12158 swap(this, i + 1, i + 2)
12159 }
12160 return this
12161 }
12162
12163 Buffer.prototype.swap64 = function swap64 () {
12164 var len = this.length
12165 if (len % 8 !== 0) {
12166 throw new RangeError('Buffer size must be a multiple of 64-bits')
12167 }
12168 for (var i = 0; i < len; i += 8) {
12169 swap(this, i, i + 7)
12170 swap(this, i + 1, i + 6)
12171 swap(this, i + 2, i + 5)
12172 swap(this, i + 3, i + 4)
12173 }
12174 return this
12175 }
12176
12177 Buffer.prototype.toString = function toString () {
12178 var length = this.length
12179 if (length === 0) return ''
12180 if (arguments.length === 0) return utf8Slice(this, 0, length)
12181 return slowToString.apply(this, arguments)
12182 }
12183
12184 Buffer.prototype.equals = function equals (b) {
12185 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
12186 if (this === b) return true
12187 return Buffer.compare(this, b) === 0
12188 }
12189
12190 Buffer.prototype.inspect = function inspect () {
12191 var str = ''
12192 var max = exports.INSPECT_MAX_BYTES
12193 if (this.length > 0) {
12194 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
12195 if (this.length > max) str += ' ... '
12196 }
12197 return '<Buffer ' + str + '>'
12198 }
12199
12200 Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
12201 if (!Buffer.isBuffer(target)) {
12202 throw new TypeError('Argument must be a Buffer')
12203 }
12204
12205 if (start === undefined) {
12206 start = 0
12207 }
12208 if (end === undefined) {
12209 end = target ? target.length : 0
12210 }
12211 if (thisStart === undefined) {
12212 thisStart = 0
12213 }
12214 if (thisEnd === undefined) {
12215 thisEnd = this.length
12216 }
12217
12218 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
12219 throw new RangeError('out of range index')
12220 }
12221
12222 if (thisStart >= thisEnd && start >= end) {
12223 return 0
12224 }
12225 if (thisStart >= thisEnd) {
12226 return -1
12227 }
12228 if (start >= end) {
12229 return 1
12230 }
12231
12232 start >>>= 0
12233 end >>>= 0
12234 thisStart >>>= 0
12235 thisEnd >>>= 0
12236
12237 if (this === target) return 0
12238
12239 var x = thisEnd - thisStart
12240 var y = end - start
12241 var len = Math.min(x, y)
12242
12243 var thisCopy = this.slice(thisStart, thisEnd)
12244 var targetCopy = target.slice(start, end)
12245
12246 for (var i = 0; i < len; ++i) {
12247 if (thisCopy[i] !== targetCopy[i]) {
12248 x = thisCopy[i]
12249 y = targetCopy[i]
12250 break
12251 }
12252 }
12253
12254 if (x < y) return -1
12255 if (y < x) return 1
12256 return 0
12257 }
12258
12259 // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
12260 // OR the last index of `val` in `buffer` at offset <= `byteOffset`.
12261 //
12262 // Arguments:
12263 // - buffer - a Buffer to search
12264 // - val - a string, Buffer, or number
12265 // - byteOffset - an index into `buffer`; will be clamped to an int32
12266 // - encoding - an optional encoding, relevant is val is a string
12267 // - dir - true for indexOf, false for lastIndexOf
12268 function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
12269 // Empty buffer means no match
12270 if (buffer.length === 0) return -1
12271
12272 // Normalize byteOffset
12273 if (typeof byteOffset === 'string') {
12274 encoding = byteOffset
12275 byteOffset = 0
12276 } else if (byteOffset > 0x7fffffff) {
12277 byteOffset = 0x7fffffff
12278 } else if (byteOffset < -0x80000000) {
12279 byteOffset = -0x80000000
12280 }
12281 byteOffset = +byteOffset // Coerce to Number.
12282 if (numberIsNaN(byteOffset)) {
12283 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
12284 byteOffset = dir ? 0 : (buffer.length - 1)
12285 }
12286
12287 // Normalize byteOffset: negative offsets start from the end of the buffer
12288 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
12289 if (byteOffset >= buffer.length) {
12290 if (dir) return -1
12291 else byteOffset = buffer.length - 1
12292 } else if (byteOffset < 0) {
12293 if (dir) byteOffset = 0
12294 else return -1
12295 }
12296
12297 // Normalize val
12298 if (typeof val === 'string') {
12299 val = Buffer.from(val, encoding)
12300 }
12301
12302 // Finally, search either indexOf (if dir is true) or lastIndexOf
12303 if (Buffer.isBuffer(val)) {
12304 // Special case: looking for empty string/buffer always fails
12305 if (val.length === 0) {
12306 return -1
12307 }
12308 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
12309 } else if (typeof val === 'number') {
12310 val = val & 0xFF // Search for a byte value [0-255]
12311 if (typeof Uint8Array.prototype.indexOf === 'function') {
12312 if (dir) {
12313 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
12314 } else {
12315 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
12316 }
12317 }
12318 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
12319 }
12320
12321 throw new TypeError('val must be string, number or Buffer')
12322 }
12323
12324 function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
12325 var indexSize = 1
12326 var arrLength = arr.length
12327 var valLength = val.length
12328
12329 if (encoding !== undefined) {
12330 encoding = String(encoding).toLowerCase()
12331 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
12332 encoding === 'utf16le' || encoding === 'utf-16le') {
12333 if (arr.length < 2 || val.length < 2) {
12334 return -1
12335 }
12336 indexSize = 2
12337 arrLength /= 2
12338 valLength /= 2
12339 byteOffset /= 2
12340 }
12341 }
12342
12343 function read (buf, i) {
12344 if (indexSize === 1) {
12345 return buf[i]
12346 } else {
12347 return buf.readUInt16BE(i * indexSize)
12348 }
12349 }
12350
12351 var i
12352 if (dir) {
12353 var foundIndex = -1
12354 for (i = byteOffset; i < arrLength; i++) {
12355 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
12356 if (foundIndex === -1) foundIndex = i
12357 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
12358 } else {
12359 if (foundIndex !== -1) i -= i - foundIndex
12360 foundIndex = -1
12361 }
12362 }
12363 } else {
12364 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
12365 for (i = byteOffset; i >= 0; i--) {
12366 var found = true
12367 for (var j = 0; j < valLength; j++) {
12368 if (read(arr, i + j) !== read(val, j)) {
12369 found = false
12370 break
12371 }
12372 }
12373 if (found) return i
12374 }
12375 }
12376
12377 return -1
12378 }
12379
12380 Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
12381 return this.indexOf(val, byteOffset, encoding) !== -1
12382 }
12383
12384 Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
12385 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
12386 }
12387
12388 Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
12389 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
12390 }
12391
12392 function hexWrite (buf, string, offset, length) {
12393 offset = Number(offset) || 0
12394 var remaining = buf.length - offset
12395 if (!length) {
12396 length = remaining
12397 } else {
12398 length = Number(length)
12399 if (length > remaining) {
12400 length = remaining
12401 }
12402 }
12403
12404 // must be an even number of digits
12405 var strLen = string.length
12406 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
12407
12408 if (length > strLen / 2) {
12409 length = strLen / 2
12410 }
12411 for (var i = 0; i < length; ++i) {
12412 var parsed = parseInt(string.substr(i * 2, 2), 16)
12413 if (numberIsNaN(parsed)) return i
12414 buf[offset + i] = parsed
12415 }
12416 return i
12417 }
12418
12419 function utf8Write (buf, string, offset, length) {
12420 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
12421 }
12422
12423 function asciiWrite (buf, string, offset, length) {
12424 return blitBuffer(asciiToBytes(string), buf, offset, length)
12425 }
12426
12427 function latin1Write (buf, string, offset, length) {
12428 return asciiWrite(buf, string, offset, length)
12429 }
12430
12431 function base64Write (buf, string, offset, length) {
12432 return blitBuffer(base64ToBytes(string), buf, offset, length)
12433 }
12434
12435 function ucs2Write (buf, string, offset, length) {
12436 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
12437 }
12438
12439 Buffer.prototype.write = function write (string, offset, length, encoding) {
12440 // Buffer#write(string)
12441 if (offset === undefined) {
12442 encoding = 'utf8'
12443 length = this.length
12444 offset = 0
12445 // Buffer#write(string, encoding)
12446 } else if (length === undefined && typeof offset === 'string') {
12447 encoding = offset
12448 length = this.length
12449 offset = 0
12450 // Buffer#write(string, offset[, length][, encoding])
12451 } else if (isFinite(offset)) {
12452 offset = offset >>> 0
12453 if (isFinite(length)) {
12454 length = length >>> 0
12455 if (encoding === undefined) encoding = 'utf8'
12456 } else {
12457 encoding = length
12458 length = undefined
12459 }
12460 } else {
12461 throw new Error(
12462 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
12463 )
12464 }
12465
12466 var remaining = this.length - offset
12467 if (length === undefined || length > remaining) length = remaining
12468
12469 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
12470 throw new RangeError('Attempt to write outside buffer bounds')
12471 }
12472
12473 if (!encoding) encoding = 'utf8'
12474
12475 var loweredCase = false
12476 for (;;) {
12477 switch (encoding) {
12478 case 'hex':
12479 return hexWrite(this, string, offset, length)
12480
12481 case 'utf8':
12482 case 'utf-8':
12483 return utf8Write(this, string, offset, length)
12484
12485 case 'ascii':
12486 return asciiWrite(this, string, offset, length)
12487
12488 case 'latin1':
12489 case 'binary':
12490 return latin1Write(this, string, offset, length)
12491
12492 case 'base64':
12493 // Warning: maxLength not taken into account in base64Write
12494 return base64Write(this, string, offset, length)
12495
12496 case 'ucs2':
12497 case 'ucs-2':
12498 case 'utf16le':
12499 case 'utf-16le':
12500 return ucs2Write(this, string, offset, length)
12501
12502 default:
12503 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
12504 encoding = ('' + encoding).toLowerCase()
12505 loweredCase = true
12506 }
12507 }
12508 }
12509
12510 Buffer.prototype.toJSON = function toJSON () {
12511 return {
12512 type: 'Buffer',
12513 data: Array.prototype.slice.call(this._arr || this, 0)
12514 }
12515 }
12516
12517 function base64Slice (buf, start, end) {
12518 if (start === 0 && end === buf.length) {
12519 return base64.fromByteArray(buf)
12520 } else {
12521 return base64.fromByteArray(buf.slice(start, end))
12522 }
12523 }
12524
12525 function utf8Slice (buf, start, end) {
12526 end = Math.min(buf.length, end)
12527 var res = []
12528
12529 var i = start
12530 while (i < end) {
12531 var firstByte = buf[i]
12532 var codePoint = null
12533 var bytesPerSequence = (firstByte > 0xEF) ? 4
12534 : (firstByte > 0xDF) ? 3
12535 : (firstByte > 0xBF) ? 2
12536 : 1
12537
12538 if (i + bytesPerSequence <= end) {
12539 var secondByte, thirdByte, fourthByte, tempCodePoint
12540
12541 switch (bytesPerSequence) {
12542 case 1:
12543 if (firstByte < 0x80) {
12544 codePoint = firstByte
12545 }
12546 break
12547 case 2:
12548 secondByte = buf[i + 1]
12549 if ((secondByte & 0xC0) === 0x80) {
12550 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
12551 if (tempCodePoint > 0x7F) {
12552 codePoint = tempCodePoint
12553 }
12554 }
12555 break
12556 case 3:
12557 secondByte = buf[i + 1]
12558 thirdByte = buf[i + 2]
12559 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
12560 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
12561 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
12562 codePoint = tempCodePoint
12563 }
12564 }
12565 break
12566 case 4:
12567 secondByte = buf[i + 1]
12568 thirdByte = buf[i + 2]
12569 fourthByte = buf[i + 3]
12570 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
12571 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
12572 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
12573 codePoint = tempCodePoint
12574 }
12575 }
12576 }
12577 }
12578
12579 if (codePoint === null) {
12580 // we did not generate a valid codePoint so insert a
12581 // replacement char (U+FFFD) and advance only 1 byte
12582 codePoint = 0xFFFD
12583 bytesPerSequence = 1
12584 } else if (codePoint > 0xFFFF) {
12585 // encode to utf16 (surrogate pair dance)
12586 codePoint -= 0x10000
12587 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
12588 codePoint = 0xDC00 | codePoint & 0x3FF
12589 }
12590
12591 res.push(codePoint)
12592 i += bytesPerSequence
12593 }
12594
12595 return decodeCodePointsArray(res)
12596 }
12597
12598 // Based on http://stackoverflow.com/a/22747272/680742, the browser with
12599 // the lowest limit is Chrome, with 0x10000 args.
12600 // We go 1 magnitude less, for safety
12601 var MAX_ARGUMENTS_LENGTH = 0x1000
12602
12603 function decodeCodePointsArray (codePoints) {
12604 var len = codePoints.length
12605 if (len <= MAX_ARGUMENTS_LENGTH) {
12606 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
12607 }
12608
12609 // Decode in chunks to avoid "call stack size exceeded".
12610 var res = ''
12611 var i = 0
12612 while (i < len) {
12613 res += String.fromCharCode.apply(
12614 String,
12615 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
12616 )
12617 }
12618 return res
12619 }
12620
12621 function asciiSlice (buf, start, end) {
12622 var ret = ''
12623 end = Math.min(buf.length, end)
12624
12625 for (var i = start; i < end; ++i) {
12626 ret += String.fromCharCode(buf[i] & 0x7F)
12627 }
12628 return ret
12629 }
12630
12631 function latin1Slice (buf, start, end) {
12632 var ret = ''
12633 end = Math.min(buf.length, end)
12634
12635 for (var i = start; i < end; ++i) {
12636 ret += String.fromCharCode(buf[i])
12637 }
12638 return ret
12639 }
12640
12641 function hexSlice (buf, start, end) {
12642 var len = buf.length
12643
12644 if (!start || start < 0) start = 0
12645 if (!end || end < 0 || end > len) end = len
12646
12647 var out = ''
12648 for (var i = start; i < end; ++i) {
12649 out += toHex(buf[i])
12650 }
12651 return out
12652 }
12653
12654 function utf16leSlice (buf, start, end) {
12655 var bytes = buf.slice(start, end)
12656 var res = ''
12657 for (var i = 0; i < bytes.length; i += 2) {
12658 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
12659 }
12660 return res
12661 }
12662
12663 Buffer.prototype.slice = function slice (start, end) {
12664 var len = this.length
12665 start = ~~start
12666 end = end === undefined ? len : ~~end
12667
12668 if (start < 0) {
12669 start += len
12670 if (start < 0) start = 0
12671 } else if (start > len) {
12672 start = len
12673 }
12674
12675 if (end < 0) {
12676 end += len
12677 if (end < 0) end = 0
12678 } else if (end > len) {
12679 end = len
12680 }
12681
12682 if (end < start) end = start
12683
12684 var newBuf = this.subarray(start, end)
12685 // Return an augmented `Uint8Array` instance
12686 newBuf.__proto__ = Buffer.prototype
12687 return newBuf
12688 }
12689
12690 /*
12691 * Need to make sure that buffer isn't trying to write out of bounds.
12692 */
12693 function checkOffset (offset, ext, length) {
12694 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
12695 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
12696 }
12697
12698 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
12699 offset = offset >>> 0
12700 byteLength = byteLength >>> 0
12701 if (!noAssert) checkOffset(offset, byteLength, this.length)
12702
12703 var val = this[offset]
12704 var mul = 1
12705 var i = 0
12706 while (++i < byteLength && (mul *= 0x100)) {
12707 val += this[offset + i] * mul
12708 }
12709
12710 return val
12711 }
12712
12713 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
12714 offset = offset >>> 0
12715 byteLength = byteLength >>> 0
12716 if (!noAssert) {
12717 checkOffset(offset, byteLength, this.length)
12718 }
12719
12720 var val = this[offset + --byteLength]
12721 var mul = 1
12722 while (byteLength > 0 && (mul *= 0x100)) {
12723 val += this[offset + --byteLength] * mul
12724 }
12725
12726 return val
12727 }
12728
12729 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
12730 offset = offset >>> 0
12731 if (!noAssert) checkOffset(offset, 1, this.length)
12732 return this[offset]
12733 }
12734
12735 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
12736 offset = offset >>> 0
12737 if (!noAssert) checkOffset(offset, 2, this.length)
12738 return this[offset] | (this[offset + 1] << 8)
12739 }
12740
12741 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
12742 offset = offset >>> 0
12743 if (!noAssert) checkOffset(offset, 2, this.length)
12744 return (this[offset] << 8) | this[offset + 1]
12745 }
12746
12747 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
12748 offset = offset >>> 0
12749 if (!noAssert) checkOffset(offset, 4, this.length)
12750
12751 return ((this[offset]) |
12752 (this[offset + 1] << 8) |
12753 (this[offset + 2] << 16)) +
12754 (this[offset + 3] * 0x1000000)
12755 }
12756
12757 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
12758 offset = offset >>> 0
12759 if (!noAssert) checkOffset(offset, 4, this.length)
12760
12761 return (this[offset] * 0x1000000) +
12762 ((this[offset + 1] << 16) |
12763 (this[offset + 2] << 8) |
12764 this[offset + 3])
12765 }
12766
12767 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
12768 offset = offset >>> 0
12769 byteLength = byteLength >>> 0
12770 if (!noAssert) checkOffset(offset, byteLength, this.length)
12771
12772 var val = this[offset]
12773 var mul = 1
12774 var i = 0
12775 while (++i < byteLength && (mul *= 0x100)) {
12776 val += this[offset + i] * mul
12777 }
12778 mul *= 0x80
12779
12780 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
12781
12782 return val
12783 }
12784
12785 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
12786 offset = offset >>> 0
12787 byteLength = byteLength >>> 0
12788 if (!noAssert) checkOffset(offset, byteLength, this.length)
12789
12790 var i = byteLength
12791 var mul = 1
12792 var val = this[offset + --i]
12793 while (i > 0 && (mul *= 0x100)) {
12794 val += this[offset + --i] * mul
12795 }
12796 mul *= 0x80
12797
12798 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
12799
12800 return val
12801 }
12802
12803 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
12804 offset = offset >>> 0
12805 if (!noAssert) checkOffset(offset, 1, this.length)
12806 if (!(this[offset] & 0x80)) return (this[offset])
12807 return ((0xff - this[offset] + 1) * -1)
12808 }
12809
12810 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
12811 offset = offset >>> 0
12812 if (!noAssert) checkOffset(offset, 2, this.length)
12813 var val = this[offset] | (this[offset + 1] << 8)
12814 return (val & 0x8000) ? val | 0xFFFF0000 : val
12815 }
12816
12817 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
12818 offset = offset >>> 0
12819 if (!noAssert) checkOffset(offset, 2, this.length)
12820 var val = this[offset + 1] | (this[offset] << 8)
12821 return (val & 0x8000) ? val | 0xFFFF0000 : val
12822 }
12823
12824 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
12825 offset = offset >>> 0
12826 if (!noAssert) checkOffset(offset, 4, this.length)
12827
12828 return (this[offset]) |
12829 (this[offset + 1] << 8) |
12830 (this[offset + 2] << 16) |
12831 (this[offset + 3] << 24)
12832 }
12833
12834 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
12835 offset = offset >>> 0
12836 if (!noAssert) checkOffset(offset, 4, this.length)
12837
12838 return (this[offset] << 24) |
12839 (this[offset + 1] << 16) |
12840 (this[offset + 2] << 8) |
12841 (this[offset + 3])
12842 }
12843
12844 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
12845 offset = offset >>> 0
12846 if (!noAssert) checkOffset(offset, 4, this.length)
12847 return ieee754.read(this, offset, true, 23, 4)
12848 }
12849
12850 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
12851 offset = offset >>> 0
12852 if (!noAssert) checkOffset(offset, 4, this.length)
12853 return ieee754.read(this, offset, false, 23, 4)
12854 }
12855
12856 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
12857 offset = offset >>> 0
12858 if (!noAssert) checkOffset(offset, 8, this.length)
12859 return ieee754.read(this, offset, true, 52, 8)
12860 }
12861
12862 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
12863 offset = offset >>> 0
12864 if (!noAssert) checkOffset(offset, 8, this.length)
12865 return ieee754.read(this, offset, false, 52, 8)
12866 }
12867
12868 function checkInt (buf, value, offset, ext, max, min) {
12869 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
12870 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
12871 if (offset + ext > buf.length) throw new RangeError('Index out of range')
12872 }
12873
12874 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
12875 value = +value
12876 offset = offset >>> 0
12877 byteLength = byteLength >>> 0
12878 if (!noAssert) {
12879 var maxBytes = Math.pow(2, 8 * byteLength) - 1
12880 checkInt(this, value, offset, byteLength, maxBytes, 0)
12881 }
12882
12883 var mul = 1
12884 var i = 0
12885 this[offset] = value & 0xFF
12886 while (++i < byteLength && (mul *= 0x100)) {
12887 this[offset + i] = (value / mul) & 0xFF
12888 }
12889
12890 return offset + byteLength
12891 }
12892
12893 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
12894 value = +value
12895 offset = offset >>> 0
12896 byteLength = byteLength >>> 0
12897 if (!noAssert) {
12898 var maxBytes = Math.pow(2, 8 * byteLength) - 1
12899 checkInt(this, value, offset, byteLength, maxBytes, 0)
12900 }
12901
12902 var i = byteLength - 1
12903 var mul = 1
12904 this[offset + i] = value & 0xFF
12905 while (--i >= 0 && (mul *= 0x100)) {
12906 this[offset + i] = (value / mul) & 0xFF
12907 }
12908
12909 return offset + byteLength
12910 }
12911
12912 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
12913 value = +value
12914 offset = offset >>> 0
12915 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
12916 this[offset] = (value & 0xff)
12917 return offset + 1
12918 }
12919
12920 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
12921 value = +value
12922 offset = offset >>> 0
12923 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
12924 this[offset] = (value & 0xff)
12925 this[offset + 1] = (value >>> 8)
12926 return offset + 2
12927 }
12928
12929 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
12930 value = +value
12931 offset = offset >>> 0
12932 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
12933 this[offset] = (value >>> 8)
12934 this[offset + 1] = (value & 0xff)
12935 return offset + 2
12936 }
12937
12938 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
12939 value = +value
12940 offset = offset >>> 0
12941 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
12942 this[offset + 3] = (value >>> 24)
12943 this[offset + 2] = (value >>> 16)
12944 this[offset + 1] = (value >>> 8)
12945 this[offset] = (value & 0xff)
12946 return offset + 4
12947 }
12948
12949 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
12950 value = +value
12951 offset = offset >>> 0
12952 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
12953 this[offset] = (value >>> 24)
12954 this[offset + 1] = (value >>> 16)
12955 this[offset + 2] = (value >>> 8)
12956 this[offset + 3] = (value & 0xff)
12957 return offset + 4
12958 }
12959
12960 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
12961 value = +value
12962 offset = offset >>> 0
12963 if (!noAssert) {
12964 var limit = Math.pow(2, (8 * byteLength) - 1)
12965
12966 checkInt(this, value, offset, byteLength, limit - 1, -limit)
12967 }
12968
12969 var i = 0
12970 var mul = 1
12971 var sub = 0
12972 this[offset] = value & 0xFF
12973 while (++i < byteLength && (mul *= 0x100)) {
12974 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
12975 sub = 1
12976 }
12977 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
12978 }
12979
12980 return offset + byteLength
12981 }
12982
12983 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
12984 value = +value
12985 offset = offset >>> 0
12986 if (!noAssert) {
12987 var limit = Math.pow(2, (8 * byteLength) - 1)
12988
12989 checkInt(this, value, offset, byteLength, limit - 1, -limit)
12990 }
12991
12992 var i = byteLength - 1
12993 var mul = 1
12994 var sub = 0
12995 this[offset + i] = value & 0xFF
12996 while (--i >= 0 && (mul *= 0x100)) {
12997 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
12998 sub = 1
12999 }
13000 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
13001 }
13002
13003 return offset + byteLength
13004 }
13005
13006 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
13007 value = +value
13008 offset = offset >>> 0
13009 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
13010 if (value < 0) value = 0xff + value + 1
13011 this[offset] = (value & 0xff)
13012 return offset + 1
13013 }
13014
13015 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
13016 value = +value
13017 offset = offset >>> 0
13018 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
13019 this[offset] = (value & 0xff)
13020 this[offset + 1] = (value >>> 8)
13021 return offset + 2
13022 }
13023
13024 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
13025 value = +value
13026 offset = offset >>> 0
13027 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
13028 this[offset] = (value >>> 8)
13029 this[offset + 1] = (value & 0xff)
13030 return offset + 2
13031 }
13032
13033 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
13034 value = +value
13035 offset = offset >>> 0
13036 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
13037 this[offset] = (value & 0xff)
13038 this[offset + 1] = (value >>> 8)
13039 this[offset + 2] = (value >>> 16)
13040 this[offset + 3] = (value >>> 24)
13041 return offset + 4
13042 }
13043
13044 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
13045 value = +value
13046 offset = offset >>> 0
13047 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
13048 if (value < 0) value = 0xffffffff + value + 1
13049 this[offset] = (value >>> 24)
13050 this[offset + 1] = (value >>> 16)
13051 this[offset + 2] = (value >>> 8)
13052 this[offset + 3] = (value & 0xff)
13053 return offset + 4
13054 }
13055
13056 function checkIEEE754 (buf, value, offset, ext, max, min) {
13057 if (offset + ext > buf.length) throw new RangeError('Index out of range')
13058 if (offset < 0) throw new RangeError('Index out of range')
13059 }
13060
13061 function writeFloat (buf, value, offset, littleEndian, noAssert) {
13062 value = +value
13063 offset = offset >>> 0
13064 if (!noAssert) {
13065 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
13066 }
13067 ieee754.write(buf, value, offset, littleEndian, 23, 4)
13068 return offset + 4
13069 }
13070
13071 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
13072 return writeFloat(this, value, offset, true, noAssert)
13073 }
13074
13075 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
13076 return writeFloat(this, value, offset, false, noAssert)
13077 }
13078
13079 function writeDouble (buf, value, offset, littleEndian, noAssert) {
13080 value = +value
13081 offset = offset >>> 0
13082 if (!noAssert) {
13083 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
13084 }
13085 ieee754.write(buf, value, offset, littleEndian, 52, 8)
13086 return offset + 8
13087 }
13088
13089 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
13090 return writeDouble(this, value, offset, true, noAssert)
13091 }
13092
13093 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
13094 return writeDouble(this, value, offset, false, noAssert)
13095 }
13096
13097 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
13098 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
13099 if (!start) start = 0
13100 if (!end && end !== 0) end = this.length
13101 if (targetStart >= target.length) targetStart = target.length
13102 if (!targetStart) targetStart = 0
13103 if (end > 0 && end < start) end = start
13104
13105 // Copy 0 bytes; we're done
13106 if (end === start) return 0
13107 if (target.length === 0 || this.length === 0) return 0
13108
13109 // Fatal error conditions
13110 if (targetStart < 0) {
13111 throw new RangeError('targetStart out of bounds')
13112 }
13113 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
13114 if (end < 0) throw new RangeError('sourceEnd out of bounds')
13115
13116 // Are we oob?
13117 if (end > this.length) end = this.length
13118 if (target.length - targetStart < end - start) {
13119 end = target.length - targetStart + start
13120 }
13121
13122 var len = end - start
13123 var i
13124
13125 if (this === target && start < targetStart && targetStart < end) {
13126 // descending copy from end
13127 for (i = len - 1; i >= 0; --i) {
13128 target[i + targetStart] = this[i + start]
13129 }
13130 } else if (len < 1000) {
13131 // ascending copy from start
13132 for (i = 0; i < len; ++i) {
13133 target[i + targetStart] = this[i + start]
13134 }
13135 } else {
13136 Uint8Array.prototype.set.call(
13137 target,
13138 this.subarray(start, start + len),
13139 targetStart
13140 )
13141 }
13142
13143 return len
13144 }
13145
13146 // Usage:
13147 // buffer.fill(number[, offset[, end]])
13148 // buffer.fill(buffer[, offset[, end]])
13149 // buffer.fill(string[, offset[, end]][, encoding])
13150 Buffer.prototype.fill = function fill (val, start, end, encoding) {
13151 // Handle string cases:
13152 if (typeof val === 'string') {
13153 if (typeof start === 'string') {
13154 encoding = start
13155 start = 0
13156 end = this.length
13157 } else if (typeof end === 'string') {
13158 encoding = end
13159 end = this.length
13160 }
13161 if (val.length === 1) {
13162 var code = val.charCodeAt(0)
13163 if (code < 256) {
13164 val = code
13165 }
13166 }
13167 if (encoding !== undefined && typeof encoding !== 'string') {
13168 throw new TypeError('encoding must be a string')
13169 }
13170 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
13171 throw new TypeError('Unknown encoding: ' + encoding)
13172 }
13173 } else if (typeof val === 'number') {
13174 val = val & 255
13175 }
13176
13177 // Invalid ranges are not set to a default, so can range check early.
13178 if (start < 0 || this.length < start || this.length < end) {
13179 throw new RangeError('Out of range index')
13180 }
13181
13182 if (end <= start) {
13183 return this
13184 }
13185
13186 start = start >>> 0
13187 end = end === undefined ? this.length : end >>> 0
13188
13189 if (!val) val = 0
13190
13191 var i
13192 if (typeof val === 'number') {
13193 for (i = start; i < end; ++i) {
13194 this[i] = val
13195 }
13196 } else {
13197 var bytes = Buffer.isBuffer(val)
13198 ? val
13199 : new Buffer(val, encoding)
13200 var len = bytes.length
13201 for (i = 0; i < end - start; ++i) {
13202 this[i + start] = bytes[i % len]
13203 }
13204 }
13205
13206 return this
13207 }
13208
13209 // HELPER FUNCTIONS
13210 // ================
13211
13212 var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
13213
13214 function base64clean (str) {
13215 // Node strips out invalid characters like \n and \t from the string, base64-js does not
13216 str = str.trim().replace(INVALID_BASE64_RE, '')
13217 // Node converts strings with length < 2 to ''
13218 if (str.length < 2) return ''
13219 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
13220 while (str.length % 4 !== 0) {
13221 str = str + '='
13222 }
13223 return str
13224 }
13225
13226 function toHex (n) {
13227 if (n < 16) return '0' + n.toString(16)
13228 return n.toString(16)
13229 }
13230
13231 function utf8ToBytes (string, units) {
13232 units = units || Infinity
13233 var codePoint
13234 var length = string.length
13235 var leadSurrogate = null
13236 var bytes = []
13237
13238 for (var i = 0; i < length; ++i) {
13239 codePoint = string.charCodeAt(i)
13240
13241 // is surrogate component
13242 if (codePoint > 0xD7FF && codePoint < 0xE000) {
13243 // last char was a lead
13244 if (!leadSurrogate) {
13245 // no lead yet
13246 if (codePoint > 0xDBFF) {
13247 // unexpected trail
13248 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
13249 continue
13250 } else if (i + 1 === length) {
13251 // unpaired lead
13252 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
13253 continue
13254 }
13255
13256 // valid lead
13257 leadSurrogate = codePoint
13258
13259 continue
13260 }
13261
13262 // 2 leads in a row
13263 if (codePoint < 0xDC00) {
13264 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
13265 leadSurrogate = codePoint
13266 continue
13267 }
13268
13269 // valid surrogate pair
13270 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
13271 } else if (leadSurrogate) {
13272 // valid bmp char, but last char was a lead
13273 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
13274 }
13275
13276 leadSurrogate = null
13277
13278 // encode utf8
13279 if (codePoint < 0x80) {
13280 if ((units -= 1) < 0) break
13281 bytes.push(codePoint)
13282 } else if (codePoint < 0x800) {
13283 if ((units -= 2) < 0) break
13284 bytes.push(
13285 codePoint >> 0x6 | 0xC0,
13286 codePoint & 0x3F | 0x80
13287 )
13288 } else if (codePoint < 0x10000) {
13289 if ((units -= 3) < 0) break
13290 bytes.push(
13291 codePoint >> 0xC | 0xE0,
13292 codePoint >> 0x6 & 0x3F | 0x80,
13293 codePoint & 0x3F | 0x80
13294 )
13295 } else if (codePoint < 0x110000) {
13296 if ((units -= 4) < 0) break
13297 bytes.push(
13298 codePoint >> 0x12 | 0xF0,
13299 codePoint >> 0xC & 0x3F | 0x80,
13300 codePoint >> 0x6 & 0x3F | 0x80,
13301 codePoint & 0x3F | 0x80
13302 )
13303 } else {
13304 throw new Error('Invalid code point')
13305 }
13306 }
13307
13308 return bytes
13309 }
13310
13311 function asciiToBytes (str) {
13312 var byteArray = []
13313 for (var i = 0; i < str.length; ++i) {
13314 // Node's code seems to be doing this and not & 0x7F..
13315 byteArray.push(str.charCodeAt(i) & 0xFF)
13316 }
13317 return byteArray
13318 }
13319
13320 function utf16leToBytes (str, units) {
13321 var c, hi, lo
13322 var byteArray = []
13323 for (var i = 0; i < str.length; ++i) {
13324 if ((units -= 2) < 0) break
13325
13326 c = str.charCodeAt(i)
13327 hi = c >> 8
13328 lo = c % 256
13329 byteArray.push(lo)
13330 byteArray.push(hi)
13331 }
13332
13333 return byteArray
13334 }
13335
13336 function base64ToBytes (str) {
13337 return base64.toByteArray(base64clean(str))
13338 }
13339
13340 function blitBuffer (src, dst, offset, length) {
13341 for (var i = 0; i < length; ++i) {
13342 if ((i + offset >= dst.length) || (i >= src.length)) break
13343 dst[i + offset] = src[i]
13344 }
13345 return i
13346 }
13347
13348 // Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`
13349 function isArrayBufferView (obj) {
13350 return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)
13351 }
13352
13353 function numberIsNaN (obj) {
13354 return obj !== obj // eslint-disable-line no-self-compare
13355 }
13356
13357 },{"base64-js":1,"ieee754":3}],3:[function(require,module,exports){
13358 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
13359 var e, m
13360 var eLen = nBytes * 8 - mLen - 1
13361 var eMax = (1 << eLen) - 1
13362 var eBias = eMax >> 1
13363 var nBits = -7
13364 var i = isLE ? (nBytes - 1) : 0
13365 var d = isLE ? -1 : 1
13366 var s = buffer[offset + i]
13367
13368 i += d
13369
13370 e = s & ((1 << (-nBits)) - 1)
13371 s >>= (-nBits)
13372 nBits += eLen
13373 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
13374
13375 m = e & ((1 << (-nBits)) - 1)
13376 e >>= (-nBits)
13377 nBits += mLen
13378 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
13379
13380 if (e === 0) {
13381 e = 1 - eBias
13382 } else if (e === eMax) {
13383 return m ? NaN : ((s ? -1 : 1) * Infinity)
13384 } else {
13385 m = m + Math.pow(2, mLen)
13386 e = e - eBias
13387 }
13388 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
13389 }
13390
13391 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
13392 var e, m, c
13393 var eLen = nBytes * 8 - mLen - 1
13394 var eMax = (1 << eLen) - 1
13395 var eBias = eMax >> 1
13396 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
13397 var i = isLE ? 0 : (nBytes - 1)
13398 var d = isLE ? 1 : -1
13399 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
13400
13401 value = Math.abs(value)
13402
13403 if (isNaN(value) || value === Infinity) {
13404 m = isNaN(value) ? 1 : 0
13405 e = eMax
13406 } else {
13407 e = Math.floor(Math.log(value) / Math.LN2)
13408 if (value * (c = Math.pow(2, -e)) < 1) {
13409 e--
13410 c *= 2
13411 }
13412 if (e + eBias >= 1) {
13413 value += rt / c
13414 } else {
13415 value += rt * Math.pow(2, 1 - eBias)
13416 }
13417 if (value * c >= 2) {
13418 e++
13419 c /= 2
13420 }
13421
13422 if (e + eBias >= eMax) {
13423 m = 0
13424 e = eMax
13425 } else if (e + eBias >= 1) {
13426 m = (value * c - 1) * Math.pow(2, mLen)
13427 e = e + eBias
13428 } else {
13429 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
13430 e = 0
13431 }
13432 }
13433
13434 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
13435
13436 e = (e << mLen) | m
13437 eLen += mLen
13438 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
13439
13440 buffer[offset + i - d] |= s * 128
13441 }
13442
13443 },{}],4:[function(require,module,exports){
13444 window.basex = require('base-x')
13445 },{"base-x":5}],5:[function(require,module,exports){
13446 // base-x encoding
13447 // Forked from https://github.com/cryptocoinjs/bs58
13448 // Originally written by Mike Hearn for BitcoinJ
13449 // Copyright (c) 2011 Google Inc
13450 // Ported to JavaScript by Stefan Thomas
13451 // Merged Buffer refactorings from base58-native by Stephen Pair
13452 // Copyright (c) 2013 BitPay Inc
13453
13454 var Buffer = require('safe-buffer').Buffer
13455
13456 module.exports = function base (ALPHABET) {
13457 var ALPHABET_MAP = {}
13458 var BASE = ALPHABET.length
13459 var LEADER = ALPHABET.charAt(0)
13460
13461 // pre-compute lookup table
13462 for (var z = 0; z < ALPHABET.length; z++) {
13463 var x = ALPHABET.charAt(z)
13464
13465 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
13466 ALPHABET_MAP[x] = z
13467 }
13468
13469 function encode (source) {
13470 if (source.length === 0) return ''
13471
13472 var digits = [0]
13473 for (var i = 0; i < source.length; ++i) {
13474 for (var j = 0, carry = source[i]; j < digits.length; ++j) {
13475 carry += digits[j] << 8
13476 digits[j] = carry % BASE
13477 carry = (carry / BASE) | 0
13478 }
13479
13480 while (carry > 0) {
13481 digits.push(carry % BASE)
13482 carry = (carry / BASE) | 0
13483 }
13484 }
13485
13486 var string = ''
13487
13488 // deal with leading zeros
13489 for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += ALPHABET[0]
13490 // convert digits to a string
13491 for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]
13492
13493 return string
13494 }
13495
13496 function decodeUnsafe (string) {
13497 if (string.length === 0) return Buffer.allocUnsafe(0)
13498
13499 var bytes = [0]
13500 for (var i = 0; i < string.length; i++) {
13501 var value = ALPHABET_MAP[string[i]]
13502 if (value === undefined) return
13503
13504 for (var j = 0, carry = value; j < bytes.length; ++j) {
13505 carry += bytes[j] * BASE
13506 bytes[j] = carry & 0xff
13507 carry >>= 8
13508 }
13509
13510 while (carry > 0) {
13511 bytes.push(carry & 0xff)
13512 carry >>= 8
13513 }
13514 }
13515
13516 // deal with leading zeros
13517 for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {
13518 bytes.push(0)
13519 }
13520
13521 return Buffer.from(bytes.reverse())
13522 }
13523
13524 function decode (string) {
13525 var buffer = decodeUnsafe(string)
13526 if (buffer) return buffer
13527
13528 throw new Error('Non-base' + BASE + ' character')
13529 }
13530
13531 return {
13532 encode: encode,
13533 decodeUnsafe: decodeUnsafe,
13534 decode: decode
13535 }
13536 }
13537
13538 },{"safe-buffer":6}],6:[function(require,module,exports){
13539 module.exports = require('buffer')
13540
13541 },{"buffer":2}]},{},[4])(4)
13542 });</script>
13543 <script>(function (root) {
13544 "use strict";
13545
13546 /***** unorm.js *****/
13547
13548 /*
13549 * UnicodeNormalizer 1.0.0
13550 * Copyright (c) 2008 Matsuza
13551 * Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
13552 * $Date: 2008-06-05 16:44:17 +0200 (Thu, 05 Jun 2008) $
13553 * $Rev: 13309 $
13554 */
13555
13556 var DEFAULT_FEATURE = [null, 0, {}];
13557 var CACHE_THRESHOLD = 10;
13558 var SBase = 0xAC00, LBase = 0x1100, VBase = 0x1161, TBase = 0x11A7, LCount = 19, VCount = 21, TCount = 28;
13559 var NCount = VCount * TCount; // 588
13560 var SCount = LCount * NCount; // 11172
13561
13562 var UChar = function(cp, feature){
13563 this.codepoint = cp;
13564 this.feature = feature;
13565 };
13566
13567 // Strategies
13568 var cache = {};
13569 var cacheCounter = [];
13570 for (var i = 0; i <= 0xFF; ++i){
13571 cacheCounter[i] = 0;
13572 }
13573
13574 function fromCache(next, cp, needFeature){
13575 var ret = cache[cp];
13576 if(!ret){
13577 ret = next(cp, needFeature);
13578 if(!!ret.feature && ++cacheCounter[(cp >> 8) & 0xFF] > CACHE_THRESHOLD){
13579 cache[cp] = ret;
13580 }
13581 }
13582 return ret;
13583 }
13584
13585 function fromData(next, cp, needFeature){
13586 var hash = cp & 0xFF00;
13587 var dunit = UChar.udata[hash] || {};
13588 var f = dunit[cp];
13589 return f ? new UChar(cp, f) : new UChar(cp, DEFAULT_FEATURE);
13590 }
13591 function fromCpOnly(next, cp, needFeature){
13592 return !!needFeature ? next(cp, needFeature) : new UChar(cp, null);
13593 }
13594 function fromRuleBasedJamo(next, cp, needFeature){
13595 var j;
13596 if(cp < LBase || (LBase + LCount <= cp && cp < SBase) || (SBase + SCount < cp)){
13597 return next(cp, needFeature);
13598 }
13599 if(LBase <= cp && cp < LBase + LCount){
13600 var c = {};
13601 var base = (cp - LBase) * VCount;
13602 for (j = 0; j < VCount; ++j){
13603 c[VBase + j] = SBase + TCount * (j + base);
13604 }
13605 return new UChar(cp, [,,c]);
13606 }
13607
13608 var SIndex = cp - SBase;
13609 var TIndex = SIndex % TCount;
13610 var feature = [];
13611 if(TIndex !== 0){
13612 feature[0] = [SBase + SIndex - TIndex, TBase + TIndex];
13613 } else {
13614 feature[0] = [LBase + Math.floor(SIndex / NCount), VBase + Math.floor((SIndex % NCount) / TCount)];
13615 feature[2] = {};
13616 for (j = 1; j < TCount; ++j){
13617 feature[2][TBase + j] = cp + j;
13618 }
13619 }
13620 return new UChar(cp, feature);
13621 }
13622 function fromCpFilter(next, cp, needFeature){
13623 return cp < 60 || 13311 < cp && cp < 42607 ? new UChar(cp, DEFAULT_FEATURE) : next(cp, needFeature);
13624 }
13625
13626 var strategies = [fromCpFilter, fromCache, fromCpOnly, fromRuleBasedJamo, fromData];
13627
13628 UChar.fromCharCode = strategies.reduceRight(function (next, strategy) {
13629 return function (cp, needFeature) {
13630 return strategy(next, cp, needFeature);
13631 };
13632 }, null);
13633
13634 UChar.isHighSurrogate = function(cp){
13635 return cp >= 0xD800 && cp <= 0xDBFF;
13636 };
13637 UChar.isLowSurrogate = function(cp){
13638 return cp >= 0xDC00 && cp <= 0xDFFF;
13639 };
13640
13641 UChar.prototype.prepFeature = function(){
13642 if(!this.feature){
13643 this.feature = UChar.fromCharCode(this.codepoint, true).feature;
13644 }
13645 };
13646
13647 UChar.prototype.toString = function(){
13648 if(this.codepoint < 0x10000){
13649 return String.fromCharCode(this.codepoint);
13650 } else {
13651 var x = this.codepoint - 0x10000;
13652 return String.fromCharCode(Math.floor(x / 0x400) + 0xD800, x % 0x400 + 0xDC00);
13653 }
13654 };
13655
13656 UChar.prototype.getDecomp = function(){
13657 this.prepFeature();
13658 return this.feature[0] || null;
13659 };
13660
13661 UChar.prototype.isCompatibility = function(){
13662 this.prepFeature();
13663 return !!this.feature[1] && (this.feature[1] & (1 << 8));
13664 };
13665 UChar.prototype.isExclude = function(){
13666 this.prepFeature();
13667 return !!this.feature[1] && (this.feature[1] & (1 << 9));
13668 };
13669 UChar.prototype.getCanonicalClass = function(){
13670 this.prepFeature();
13671 return !!this.feature[1] ? (this.feature[1] & 0xff) : 0;
13672 };
13673 UChar.prototype.getComposite = function(following){
13674 this.prepFeature();
13675 if(!this.feature[2]){
13676 return null;
13677 }
13678 var cp = this.feature[2][following.codepoint];
13679 return cp ? UChar.fromCharCode(cp) : null;
13680 };
13681
13682 var UCharIterator = function(str){
13683 this.str = str;
13684 this.cursor = 0;
13685 };
13686 UCharIterator.prototype.next = function(){
13687 if(!!this.str && this.cursor < this.str.length){
13688 var cp = this.str.charCodeAt(this.cursor++);
13689 var d;
13690 if(UChar.isHighSurrogate(cp) && this.cursor < this.str.length && UChar.isLowSurrogate((d = this.str.charCodeAt(this.cursor)))){
13691 cp = (cp - 0xD800) * 0x400 + (d -0xDC00) + 0x10000;
13692 ++this.cursor;
13693 }
13694 return UChar.fromCharCode(cp);
13695 } else {
13696 this.str = null;
13697 return null;
13698 }
13699 };
13700
13701 var RecursDecompIterator = function(it, cano){
13702 this.it = it;
13703 this.canonical = cano;
13704 this.resBuf = [];
13705 };
13706
13707 RecursDecompIterator.prototype.next = function(){
13708 function recursiveDecomp(cano, uchar){
13709 var decomp = uchar.getDecomp();
13710 if(!!decomp && !(cano && uchar.isCompatibility())){
13711 var ret = [];
13712 for(var i = 0; i < decomp.length; ++i){
13713 var a = recursiveDecomp(cano, UChar.fromCharCode(decomp[i]));
13714 ret = ret.concat(a);
13715 }
13716 return ret;
13717 } else {
13718 return [uchar];
13719 }
13720 }
13721 if(this.resBuf.length === 0){
13722 var uchar = this.it.next();
13723 if(!uchar){
13724 return null;
13725 }
13726 this.resBuf = recursiveDecomp(this.canonical, uchar);
13727 }
13728 return this.resBuf.shift();
13729 };
13730
13731 var DecompIterator = function(it){
13732 this.it = it;
13733 this.resBuf = [];
13734 };
13735
13736 DecompIterator.prototype.next = function(){
13737 var cc;
13738 if(this.resBuf.length === 0){
13739 do{
13740 var uchar = this.it.next();
13741 if(!uchar){
13742 break;
13743 }
13744 cc = uchar.getCanonicalClass();
13745 var inspt = this.resBuf.length;
13746 if(cc !== 0){
13747 for(; inspt > 0; --inspt){
13748 var uchar2 = this.resBuf[inspt - 1];
13749 var cc2 = uchar2.getCanonicalClass();
13750 if(cc2 <= cc){
13751 break;
13752 }
13753 }
13754 }
13755 this.resBuf.splice(inspt, 0, uchar);
13756 } while(cc !== 0);
13757 }
13758 return this.resBuf.shift();
13759 };
13760
13761 var CompIterator = function(it){
13762 this.it = it;
13763 this.procBuf = [];
13764 this.resBuf = [];
13765 this.lastClass = null;
13766 };
13767
13768 CompIterator.prototype.next = function(){
13769 while(this.resBuf.length === 0){
13770 var uchar = this.it.next();
13771 if(!uchar){
13772 this.resBuf = this.procBuf;
13773 this.procBuf = [];
13774 break;
13775 }
13776 if(this.procBuf.length === 0){
13777 this.lastClass = uchar.getCanonicalClass();
13778 this.procBuf.push(uchar);
13779 } else {
13780 var starter = this.procBuf[0];
13781 var composite = starter.getComposite(uchar);
13782 var cc = uchar.getCanonicalClass();
13783 if(!!composite && (this.lastClass < cc || this.lastClass === 0)){
13784 this.procBuf[0] = composite;
13785 } else {
13786 if(cc === 0){
13787 this.resBuf = this.procBuf;
13788 this.procBuf = [];
13789 }
13790 this.lastClass = cc;
13791 this.procBuf.push(uchar);
13792 }
13793 }
13794 }
13795 return this.resBuf.shift();
13796 };
13797
13798 var createIterator = function(mode, str){
13799 switch(mode){
13800 case "NFD":
13801 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true));
13802 case "NFKD":
13803 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false));
13804 case "NFC":
13805 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true)));
13806 case "NFKC":
13807 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false)));
13808 }
13809 throw mode + " is invalid";
13810 };
13811 var normalize = function(mode, str){
13812 var it = createIterator(mode, str);
13813 var ret = "";
13814 var uchar;
13815 while(!!(uchar = it.next())){
13816 ret += uchar.toString();
13817 }
13818 return ret;
13819 };
13820
13821 /* API functions */
13822 function nfd(str){
13823 return normalize("NFD", str);
13824 }
13825
13826 function nfkd(str){
13827 return normalize("NFKD", str);
13828 }
13829
13830 function nfc(str){
13831 return normalize("NFC", str);
13832 }
13833
13834 function nfkc(str){
13835 return normalize("NFKC", str);
13836 }
13837
13838 /* Unicode data */
13839 UChar.udata={
13840 0:{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]]},
13841 256:{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]},
13842 512:{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]},
13843 768:{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]},
13844 1024:{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]]},
13845 1280:{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]},
13846 1536:{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]},
13847 1792:{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]},
13848 2048:{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]},
13849 2304:{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]},
13850 2560:{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]},
13851 2816:{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]},
13852 3072:{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]},
13853 3328:{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]]},
13854 3584:{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]},
13855 3840:{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]},
13856 4096:{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]},
13857 4352:{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]},
13858 4608:{70197:[,9],70198:[,7],70377:[,7],70378:[,9]},
13859 4864:{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]},
13860 5120:{70841:[,,{70832:70844,70842:70843,70845:70846}],70843:[[70841,70842]],70844:[[70841,70832]],70846:[[70841,70845]],70850:[,9],70851:[,7]},
13861 5376:{71096:[,,{71087:71098}],71097:[,,{71087:71099}],71098:[[71096,71087]],71099:[[71097,71087]],71103:[,9],71104:[,7]},
13862 5632:{71231:[,9],71350:[,9],71351:[,7]},
13863 5888:{5908:[,9],5940:[,9],6098:[,9],6109:[,230]},
13864 6144:{6313:[,228]},
13865 6400:{6457:[,222],6458:[,230],6459:[,220]},
13866 6656:{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]},
13867 6912:{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]},
13868 7168:{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]},
13869 7424:{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]},
13870 7680:{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]]},
13871 7936:{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}]},
13872 8192:{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]},
13873 8448:{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}]},
13874 8704:{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]]},
13875 8960:{9001:[[12296]],9002:[[12297]]},
13876 9216:{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]},
13877 10752:{10764:[[8747,8747,8747,8747],256],10868:[[58,58,61],256],10869:[[61,61],256],10870:[[61,61,61],256],10972:[[10973,824],512]},
13878 11264:{11388:[[106],256],11389:[[86],256],11503:[,230],11504:[,230],11505:[,230]},
13879 11520:{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]},
13880 11776:{11935:[[27597],256],12019:[[40863],256]},
13881 12032:{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]},
13882 12288:{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]},
13883 12544:{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]},
13884 12800:{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]},
13885 13056:{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]},
13886 27136:{92912:[,1],92913:[,1],92914:[,1],92915:[,1],92916:[,1]},
13887 27392:{92976:[,230],92977:[,230],92978:[,230],92979:[,230],92980:[,230],92981:[,230],92982:[,230]},
13888 42496:{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]},
13889 42752:{42864:[[42863],256],43000:[[294],256],43001:[[339],256]},
13890 43008:{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]},
13891 43264:{43307:[,220],43308:[,220],43309:[,220],43347:[,9],43443:[,7],43456:[,9]},
13892 43520:{43696:[,230],43698:[,230],43699:[,230],43700:[,220],43703:[,230],43704:[,230],43710:[,230],43711:[,230],43713:[,230],43766:[,9]},
13893 43776:{43868:[[42791],256],43869:[[43831],256],43870:[[619],256],43871:[[43858],256],44013:[,9]},
13894 48128:{113822:[,1]},
13895 53504:{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]},
13896 53760:{119362:[,230],119363:[,230],119364:[,230]},
13897 54272:{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]},
13898 54528:{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]},
13899 54784:{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]},
13900 55040:{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]},
13901 59392:{125136:[,220],125137:[,220],125138:[,220],125139:[,220],125140:[,220],125141:[,220],125142:[,220]},
13902 60928:{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]},
13903 61696:{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]},
13904 61952:{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]},
13905 63488:{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]]},
13906 63744:{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]]},
13907 64000:{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]]},
13908 64256:{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]},
13909 64512:{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]},
13910 64768:{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]},
13911 65024:{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]},
13912 65280:{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]}
13913
13914 };
13915
13916 /***** Module to export */
13917 var unorm = {
13918 nfc: nfc,
13919 nfd: nfd,
13920 nfkc: nfkc,
13921 nfkd: nfkd
13922 };
13923
13924 /*globals module:true,define:true*/
13925
13926 // CommonJS
13927 if (typeof module === "object") {
13928 module.exports = unorm;
13929
13930 // AMD
13931 } else if (typeof define === "function" && define.amd) {
13932 define("unorm", function () {
13933 return unorm;
13934 });
13935
13936 // Global
13937 } else {
13938 root.unorm = unorm;
13939 }
13940
13941 /***** Export as shim for String::normalize method *****/
13942 /*
13943 http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts#november_8_2013_draft_rev_21
13944
13945 21.1.3.12 String.prototype.normalize(form="NFC")
13946 When the normalize method is called with one argument form, the following steps are taken:
13947
13948 1. Let O be CheckObjectCoercible(this value).
13949 2. Let S be ToString(O).
13950 3. ReturnIfAbrupt(S).
13951 4. If form is not provided or undefined let form be "NFC".
13952 5. Let f be ToString(form).
13953 6. ReturnIfAbrupt(f).
13954 7. If f is not one of "NFC", "NFD", "NFKC", or "NFKD", then throw a RangeError Exception.
13955 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.
13956 9. Return ns.
13957
13958 The length property of the normalize method is 0.
13959
13960 *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.
13961 */
13962 unorm.shimApplied = false;
13963
13964 if (!String.prototype.normalize) {
13965 String.prototype.normalize = function(form) {
13966 var str = "" + this;
13967 form = form === undefined ? "NFC" : form;
13968
13969 if (form === "NFC") {
13970 return unorm.nfc(str);
13971 } else if (form === "NFD") {
13972 return unorm.nfd(str);
13973 } else if (form === "NFKC") {
13974 return unorm.nfkc(str);
13975 } else if (form === "NFKD") {
13976 return unorm.nfkd(str);
13977 } else {
13978 throw new RangeError("Invalid normalization form: " + form);
13979 }
13980 };
13981
13982 unorm.shimApplied = true;
13983 }
13984 }(this));
13985 </script>
13986 <script>/*!
13987 * jQuery JavaScript Library v3.2.1
13988 * https://jquery.com/
13989 *
13990 * Includes Sizzle.js
13991 * https://sizzlejs.com/
13992 *
13993 * Copyright JS Foundation and other contributors
13994 * Released under the MIT license
13995 * https://jquery.org/license
13996 *
13997 * Date: 2017-03-20T18:59Z
13998 */
13999 ( function( global, factory ) {
14000
14001 "use strict";
14002
14003 if ( typeof module === "object" && typeof module.exports === "object" ) {
14004
14005 // For CommonJS and CommonJS-like environments where a proper `window`
14006 // is present, execute the factory and get jQuery.
14007 // For environments that do not have a `window` with a `document`
14008 // (such as Node.js), expose a factory as module.exports.
14009 // This accentuates the need for the creation of a real `window`.
14010 // e.g. var jQuery = require("jquery")(window);
14011 // See ticket #14549 for more info.
14012 module.exports = global.document ?
14013 factory( global, true ) :
14014 function( w ) {
14015 if ( !w.document ) {
14016 throw new Error( "jQuery requires a window with a document" );
14017 }
14018 return factory( w );
14019 };
14020 } else {
14021 factory( global );
14022 }
14023
14024 // Pass this if window is not defined yet
14025 } )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
14026
14027 // Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
14028 // throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
14029 // arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
14030 // enough that all such attempts are guarded in a try block.
14031 "use strict";
14032
14033 var arr = [];
14034
14035 var document = window.document;
14036
14037 var getProto = Object.getPrototypeOf;
14038
14039 var slice = arr.slice;
14040
14041 var concat = arr.concat;
14042
14043 var push = arr.push;
14044
14045 var indexOf = arr.indexOf;
14046
14047 var class2type = {};
14048
14049 var toString = class2type.toString;
14050
14051 var hasOwn = class2type.hasOwnProperty;
14052
14053 var fnToString = hasOwn.toString;
14054
14055 var ObjectFunctionString = fnToString.call( Object );
14056
14057 var support = {};
14058
14059
14060
14061 function DOMEval( code, doc ) {
14062 doc = doc || document;
14063
14064 var script = doc.createElement( "script" );
14065
14066 script.text = code;
14067 doc.head.appendChild( script ).parentNode.removeChild( script );
14068 }
14069 /* global Symbol */
14070 // Defining this global in .eslintrc.json would create a danger of using the global
14071 // unguarded in another place, it seems safer to define global only for this module
14072
14073
14074
14075 var
14076 version = "3.2.1",
14077
14078 // Define a local copy of jQuery
14079 jQuery = function( selector, context ) {
14080
14081 // The jQuery object is actually just the init constructor 'enhanced'
14082 // Need init if jQuery is called (just allow error to be thrown if not included)
14083 return new jQuery.fn.init( selector, context );
14084 },
14085
14086 // Support: Android <=4.0 only
14087 // Make sure we trim BOM and NBSP
14088 rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
14089
14090 // Matches dashed string for camelizing
14091 rmsPrefix = /^-ms-/,
14092 rdashAlpha = /-([a-z])/g,
14093
14094 // Used by jQuery.camelCase as callback to replace()
14095 fcamelCase = function( all, letter ) {
14096 return letter.toUpperCase();
14097 };
14098
14099 jQuery.fn = jQuery.prototype = {
14100
14101 // The current version of jQuery being used
14102 jquery: version,
14103
14104 constructor: jQuery,
14105
14106 // The default length of a jQuery object is 0
14107 length: 0,
14108
14109 toArray: function() {
14110 return slice.call( this );
14111 },
14112
14113 // Get the Nth element in the matched element set OR
14114 // Get the whole matched element set as a clean array
14115 get: function( num ) {
14116
14117 // Return all the elements in a clean array
14118 if ( num == null ) {
14119 return slice.call( this );
14120 }
14121
14122 // Return just the one element from the set
14123 return num < 0 ? this[ num + this.length ] : this[ num ];
14124 },
14125
14126 // Take an array of elements and push it onto the stack
14127 // (returning the new matched element set)
14128 pushStack: function( elems ) {
14129
14130 // Build a new jQuery matched element set
14131 var ret = jQuery.merge( this.constructor(), elems );
14132
14133 // Add the old object onto the stack (as a reference)
14134 ret.prevObject = this;
14135
14136 // Return the newly-formed element set
14137 return ret;
14138 },
14139
14140 // Execute a callback for every element in the matched set.
14141 each: function( callback ) {
14142 return jQuery.each( this, callback );
14143 },
14144
14145 map: function( callback ) {
14146 return this.pushStack( jQuery.map( this, function( elem, i ) {
14147 return callback.call( elem, i, elem );
14148 } ) );
14149 },
14150
14151 slice: function() {
14152 return this.pushStack( slice.apply( this, arguments ) );
14153 },
14154
14155 first: function() {
14156 return this.eq( 0 );
14157 },
14158
14159 last: function() {
14160 return this.eq( -1 );
14161 },
14162
14163 eq: function( i ) {
14164 var len = this.length,
14165 j = +i + ( i < 0 ? len : 0 );
14166 return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
14167 },
14168
14169 end: function() {
14170 return this.prevObject || this.constructor();
14171 },
14172
14173 // For internal use only.
14174 // Behaves like an Array's method, not like a jQuery method.
14175 push: push,
14176 sort: arr.sort,
14177 splice: arr.splice
14178 };
14179
14180 jQuery.extend = jQuery.fn.extend = function() {
14181 var options, name, src, copy, copyIsArray, clone,
14182 target = arguments[ 0 ] || {},
14183 i = 1,
14184 length = arguments.length,
14185 deep = false;
14186
14187 // Handle a deep copy situation
14188 if ( typeof target === "boolean" ) {
14189 deep = target;
14190
14191 // Skip the boolean and the target
14192 target = arguments[ i ] || {};
14193 i++;
14194 }
14195
14196 // Handle case when target is a string or something (possible in deep copy)
14197 if ( typeof target !== "object" && !jQuery.isFunction( target ) ) {
14198 target = {};
14199 }
14200
14201 // Extend jQuery itself if only one argument is passed
14202 if ( i === length ) {
14203 target = this;
14204 i--;
14205 }
14206
14207 for ( ; i < length; i++ ) {
14208
14209 // Only deal with non-null/undefined values
14210 if ( ( options = arguments[ i ] ) != null ) {
14211
14212 // Extend the base object
14213 for ( name in options ) {
14214 src = target[ name ];
14215 copy = options[ name ];
14216
14217 // Prevent never-ending loop
14218 if ( target === copy ) {
14219 continue;
14220 }
14221
14222 // Recurse if we're merging plain objects or arrays
14223 if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
14224 ( copyIsArray = Array.isArray( copy ) ) ) ) {
14225
14226 if ( copyIsArray ) {
14227 copyIsArray = false;
14228 clone = src && Array.isArray( src ) ? src : [];
14229
14230 } else {
14231 clone = src && jQuery.isPlainObject( src ) ? src : {};
14232 }
14233
14234 // Never move original objects, clone them
14235 target[ name ] = jQuery.extend( deep, clone, copy );
14236
14237 // Don't bring in undefined values
14238 } else if ( copy !== undefined ) {
14239 target[ name ] = copy;
14240 }
14241 }
14242 }
14243 }
14244
14245 // Return the modified object
14246 return target;
14247 };
14248
14249 jQuery.extend( {
14250
14251 // Unique for each copy of jQuery on the page
14252 expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
14253
14254 // Assume jQuery is ready without the ready module
14255 isReady: true,
14256
14257 error: function( msg ) {
14258 throw new Error( msg );
14259 },
14260
14261 noop: function() {},
14262
14263 isFunction: function( obj ) {
14264 return jQuery.type( obj ) === "function";
14265 },
14266
14267 isWindow: function( obj ) {
14268 return obj != null && obj === obj.window;
14269 },
14270
14271 isNumeric: function( obj ) {
14272
14273 // As of jQuery 3.0, isNumeric is limited to
14274 // strings and numbers (primitives or objects)
14275 // that can be coerced to finite numbers (gh-2662)
14276 var type = jQuery.type( obj );
14277 return ( type === "number" || type === "string" ) &&
14278
14279 // parseFloat NaNs numeric-cast false positives ("")
14280 // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
14281 // subtraction forces infinities to NaN
14282 !isNaN( obj - parseFloat( obj ) );
14283 },
14284
14285 isPlainObject: function( obj ) {
14286 var proto, Ctor;
14287
14288 // Detect obvious negatives
14289 // Use toString instead of jQuery.type to catch host objects
14290 if ( !obj || toString.call( obj ) !== "[object Object]" ) {
14291 return false;
14292 }
14293
14294 proto = getProto( obj );
14295
14296 // Objects with no prototype (e.g., `Object.create( null )`) are plain
14297 if ( !proto ) {
14298 return true;
14299 }
14300
14301 // Objects with prototype are plain iff they were constructed by a global Object function
14302 Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
14303 return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
14304 },
14305
14306 isEmptyObject: function( obj ) {
14307
14308 /* eslint-disable no-unused-vars */
14309 // See https://github.com/eslint/eslint/issues/6125
14310 var name;
14311
14312 for ( name in obj ) {
14313 return false;
14314 }
14315 return true;
14316 },
14317
14318 type: function( obj ) {
14319 if ( obj == null ) {
14320 return obj + "";
14321 }
14322
14323 // Support: Android <=2.3 only (functionish RegExp)
14324 return typeof obj === "object" || typeof obj === "function" ?
14325 class2type[ toString.call( obj ) ] || "object" :
14326 typeof obj;
14327 },
14328
14329 // Evaluates a script in a global context
14330 globalEval: function( code ) {
14331 DOMEval( code );
14332 },
14333
14334 // Convert dashed to camelCase; used by the css and data modules
14335 // Support: IE <=9 - 11, Edge 12 - 13
14336 // Microsoft forgot to hump their vendor prefix (#9572)
14337 camelCase: function( string ) {
14338 return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
14339 },
14340
14341 each: function( obj, callback ) {
14342 var length, i = 0;
14343
14344 if ( isArrayLike( obj ) ) {
14345 length = obj.length;
14346 for ( ; i < length; i++ ) {
14347 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
14348 break;
14349 }
14350 }
14351 } else {
14352 for ( i in obj ) {
14353 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
14354 break;
14355 }
14356 }
14357 }
14358
14359 return obj;
14360 },
14361
14362 // Support: Android <=4.0 only
14363 trim: function( text ) {
14364 return text == null ?
14365 "" :
14366 ( text + "" ).replace( rtrim, "" );
14367 },
14368
14369 // results is for internal usage only
14370 makeArray: function( arr, results ) {
14371 var ret = results || [];
14372
14373 if ( arr != null ) {
14374 if ( isArrayLike( Object( arr ) ) ) {
14375 jQuery.merge( ret,
14376 typeof arr === "string" ?
14377 [ arr ] : arr
14378 );
14379 } else {
14380 push.call( ret, arr );
14381 }
14382 }
14383
14384 return ret;
14385 },
14386
14387 inArray: function( elem, arr, i ) {
14388 return arr == null ? -1 : indexOf.call( arr, elem, i );
14389 },
14390
14391 // Support: Android <=4.0 only, PhantomJS 1 only
14392 // push.apply(_, arraylike) throws on ancient WebKit
14393 merge: function( first, second ) {
14394 var len = +second.length,
14395 j = 0,
14396 i = first.length;
14397
14398 for ( ; j < len; j++ ) {
14399 first[ i++ ] = second[ j ];
14400 }
14401
14402 first.length = i;
14403
14404 return first;
14405 },
14406
14407 grep: function( elems, callback, invert ) {
14408 var callbackInverse,
14409 matches = [],
14410 i = 0,
14411 length = elems.length,
14412 callbackExpect = !invert;
14413
14414 // Go through the array, only saving the items
14415 // that pass the validator function
14416 for ( ; i < length; i++ ) {
14417 callbackInverse = !callback( elems[ i ], i );
14418 if ( callbackInverse !== callbackExpect ) {
14419 matches.push( elems[ i ] );
14420 }
14421 }
14422
14423 return matches;
14424 },
14425
14426 // arg is for internal usage only
14427 map: function( elems, callback, arg ) {
14428 var length, value,
14429 i = 0,
14430 ret = [];
14431
14432 // Go through the array, translating each of the items to their new values
14433 if ( isArrayLike( elems ) ) {
14434 length = elems.length;
14435 for ( ; i < length; i++ ) {
14436 value = callback( elems[ i ], i, arg );
14437
14438 if ( value != null ) {
14439 ret.push( value );
14440 }
14441 }
14442
14443 // Go through every key on the object,
14444 } else {
14445 for ( i in elems ) {
14446 value = callback( elems[ i ], i, arg );
14447
14448 if ( value != null ) {
14449 ret.push( value );
14450 }
14451 }
14452 }
14453
14454 // Flatten any nested arrays
14455 return concat.apply( [], ret );
14456 },
14457
14458 // A global GUID counter for objects
14459 guid: 1,
14460
14461 // Bind a function to a context, optionally partially applying any
14462 // arguments.
14463 proxy: function( fn, context ) {
14464 var tmp, args, proxy;
14465
14466 if ( typeof context === "string" ) {
14467 tmp = fn[ context ];
14468 context = fn;
14469 fn = tmp;
14470 }
14471
14472 // Quick check to determine if target is callable, in the spec
14473 // this throws a TypeError, but we will just return undefined.
14474 if ( !jQuery.isFunction( fn ) ) {
14475 return undefined;
14476 }
14477
14478 // Simulated bind
14479 args = slice.call( arguments, 2 );
14480 proxy = function() {
14481 return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
14482 };
14483
14484 // Set the guid of unique handler to the same of original handler, so it can be removed
14485 proxy.guid = fn.guid = fn.guid || jQuery.guid++;
14486
14487 return proxy;
14488 },
14489
14490 now: Date.now,
14491
14492 // jQuery.support is not used in Core but other projects attach their
14493 // properties to it so it needs to exist.
14494 support: support
14495 } );
14496
14497 if ( typeof Symbol === "function" ) {
14498 jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
14499 }
14500
14501 // Populate the class2type map
14502 jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
14503 function( i, name ) {
14504 class2type[ "[object " + name + "]" ] = name.toLowerCase();
14505 } );
14506
14507 function isArrayLike( obj ) {
14508
14509 // Support: real iOS 8.2 only (not reproducible in simulator)
14510 // `in` check used to prevent JIT error (gh-2145)
14511 // hasOwn isn't used here due to false negatives
14512 // regarding Nodelist length in IE
14513 var length = !!obj && "length" in obj && obj.length,
14514 type = jQuery.type( obj );
14515
14516 if ( type === "function" || jQuery.isWindow( obj ) ) {
14517 return false;
14518 }
14519
14520 return type === "array" || length === 0 ||
14521 typeof length === "number" && length > 0 && ( length - 1 ) in obj;
14522 }
14523 var Sizzle =
14524 /*!
14525 * Sizzle CSS Selector Engine v2.3.3
14526 * https://sizzlejs.com/
14527 *
14528 * Copyright jQuery Foundation and other contributors
14529 * Released under the MIT license
14530 * http://jquery.org/license
14531 *
14532 * Date: 2016-08-08
14533 */
14534 (function( window ) {
14535
14536 var i,
14537 support,
14538 Expr,
14539 getText,
14540 isXML,
14541 tokenize,
14542 compile,
14543 select,
14544 outermostContext,
14545 sortInput,
14546 hasDuplicate,
14547
14548 // Local document vars
14549 setDocument,
14550 document,
14551 docElem,
14552 documentIsHTML,
14553 rbuggyQSA,
14554 rbuggyMatches,
14555 matches,
14556 contains,
14557
14558 // Instance-specific data
14559 expando = "sizzle" + 1 * new Date(),
14560 preferredDoc = window.document,
14561 dirruns = 0,
14562 done = 0,
14563 classCache = createCache(),
14564 tokenCache = createCache(),
14565 compilerCache = createCache(),
14566 sortOrder = function( a, b ) {
14567 if ( a === b ) {
14568 hasDuplicate = true;
14569 }
14570 return 0;
14571 },
14572
14573 // Instance methods
14574 hasOwn = ({}).hasOwnProperty,
14575 arr = [],
14576 pop = arr.pop,
14577 push_native = arr.push,
14578 push = arr.push,
14579 slice = arr.slice,
14580 // Use a stripped-down indexOf as it's faster than native
14581 // https://jsperf.com/thor-indexof-vs-for/5
14582 indexOf = function( list, elem ) {
14583 var i = 0,
14584 len = list.length;
14585 for ( ; i < len; i++ ) {
14586 if ( list[i] === elem ) {
14587 return i;
14588 }
14589 }
14590 return -1;
14591 },
14592
14593 booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
14594
14595 // Regular expressions
14596
14597 // http://www.w3.org/TR/css3-selectors/#whitespace
14598 whitespace = "[\\x20\\t\\r\\n\\f]",
14599
14600 // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
14601 identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+",
14602
14603 // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
14604 attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
14605 // Operator (capture 2)
14606 "*([*^$|!~]?=)" + whitespace +
14607 // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
14608 "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
14609 "*\\]",
14610
14611 pseudos = ":(" + identifier + ")(?:\\((" +
14612 // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
14613 // 1. quoted (capture 3; capture 4 or capture 5)
14614 "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
14615 // 2. simple (capture 6)
14616 "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
14617 // 3. anything else (capture 2)
14618 ".*" +
14619 ")\\)|)",
14620
14621 // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
14622 rwhitespace = new RegExp( whitespace + "+", "g" ),
14623 rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
14624
14625 rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
14626 rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
14627
14628 rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
14629
14630 rpseudo = new RegExp( pseudos ),
14631 ridentifier = new RegExp( "^" + identifier + "$" ),
14632
14633 matchExpr = {
14634 "ID": new RegExp( "^#(" + identifier + ")" ),
14635 "CLASS": new RegExp( "^\\.(" + identifier + ")" ),
14636 "TAG": new RegExp( "^(" + identifier + "|[*])" ),
14637 "ATTR": new RegExp( "^" + attributes ),
14638 "PSEUDO": new RegExp( "^" + pseudos ),
14639 "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
14640 "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
14641 "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
14642 "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
14643 // For use in libraries implementing .is()
14644 // We use this for POS matching in `select`
14645 "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
14646 whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
14647 },
14648
14649 rinputs = /^(?:input|select|textarea|button)$/i,
14650 rheader = /^h\d$/i,
14651
14652 rnative = /^[^{]+\{\s*\[native \w/,
14653
14654 // Easily-parseable/retrievable ID or TAG or CLASS selectors
14655 rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
14656
14657 rsibling = /[+~]/,
14658
14659 // CSS escapes
14660 // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
14661 runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
14662 funescape = function( _, escaped, escapedWhitespace ) {
14663 var high = "0x" + escaped - 0x10000;
14664 // NaN means non-codepoint
14665 // Support: Firefox<24
14666 // Workaround erroneous numeric interpretation of +"0x"
14667 return high !== high || escapedWhitespace ?
14668 escaped :
14669 high < 0 ?
14670 // BMP codepoint
14671 String.fromCharCode( high + 0x10000 ) :
14672 // Supplemental Plane codepoint (surrogate pair)
14673 String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
14674 },
14675
14676 // CSS string/identifier serialization
14677 // https://drafts.csswg.org/cssom/#common-serializing-idioms
14678 rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
14679 fcssescape = function( ch, asCodePoint ) {
14680 if ( asCodePoint ) {
14681
14682 // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
14683 if ( ch === "\0" ) {
14684 return "\uFFFD";
14685 }
14686
14687 // Control characters and (dependent upon position) numbers get escaped as code points
14688 return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
14689 }
14690
14691 // Other potentially-special ASCII characters get backslash-escaped
14692 return "\\" + ch;
14693 },
14694
14695 // Used for iframes
14696 // See setDocument()
14697 // Removing the function wrapper causes a "Permission Denied"
14698 // error in IE
14699 unloadHandler = function() {
14700 setDocument();
14701 },
14702
14703 disabledAncestor = addCombinator(
14704 function( elem ) {
14705 return elem.disabled === true && ("form" in elem || "label" in elem);
14706 },
14707 { dir: "parentNode", next: "legend" }
14708 );
14709
14710 // Optimize for push.apply( _, NodeList )
14711 try {
14712 push.apply(
14713 (arr = slice.call( preferredDoc.childNodes )),
14714 preferredDoc.childNodes
14715 );
14716 // Support: Android<4.0
14717 // Detect silently failing push.apply
14718 arr[ preferredDoc.childNodes.length ].nodeType;
14719 } catch ( e ) {
14720 push = { apply: arr.length ?
14721
14722 // Leverage slice if possible
14723 function( target, els ) {
14724 push_native.apply( target, slice.call(els) );
14725 } :
14726
14727 // Support: IE<9
14728 // Otherwise append directly
14729 function( target, els ) {
14730 var j = target.length,
14731 i = 0;
14732 // Can't trust NodeList.length
14733 while ( (target[j++] = els[i++]) ) {}
14734 target.length = j - 1;
14735 }
14736 };
14737 }
14738
14739 function Sizzle( selector, context, results, seed ) {
14740 var m, i, elem, nid, match, groups, newSelector,
14741 newContext = context && context.ownerDocument,
14742
14743 // nodeType defaults to 9, since context defaults to document
14744 nodeType = context ? context.nodeType : 9;
14745
14746 results = results || [];
14747
14748 // Return early from calls with invalid selector or context
14749 if ( typeof selector !== "string" || !selector ||
14750 nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
14751
14752 return results;
14753 }
14754
14755 // Try to shortcut find operations (as opposed to filters) in HTML documents
14756 if ( !seed ) {
14757
14758 if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
14759 setDocument( context );
14760 }
14761 context = context || document;
14762
14763 if ( documentIsHTML ) {
14764
14765 // If the selector is sufficiently simple, try using a "get*By*" DOM method
14766 // (excepting DocumentFragment context, where the methods don't exist)
14767 if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
14768
14769 // ID selector
14770 if ( (m = match[1]) ) {
14771
14772 // Document context
14773 if ( nodeType === 9 ) {
14774 if ( (elem = context.getElementById( m )) ) {
14775
14776 // Support: IE, Opera, Webkit
14777 // TODO: identify versions
14778 // getElementById can match elements by name instead of ID
14779 if ( elem.id === m ) {
14780 results.push( elem );
14781 return results;
14782 }
14783 } else {
14784 return results;
14785 }
14786
14787 // Element context
14788 } else {
14789
14790 // Support: IE, Opera, Webkit
14791 // TODO: identify versions
14792 // getElementById can match elements by name instead of ID
14793 if ( newContext && (elem = newContext.getElementById( m )) &&
14794 contains( context, elem ) &&
14795 elem.id === m ) {
14796
14797 results.push( elem );
14798 return results;
14799 }
14800 }
14801
14802 // Type selector
14803 } else if ( match[2] ) {
14804 push.apply( results, context.getElementsByTagName( selector ) );
14805 return results;
14806
14807 // Class selector
14808 } else if ( (m = match[3]) && support.getElementsByClassName &&
14809 context.getElementsByClassName ) {
14810
14811 push.apply( results, context.getElementsByClassName( m ) );
14812 return results;
14813 }
14814 }
14815
14816 // Take advantage of querySelectorAll
14817 if ( support.qsa &&
14818 !compilerCache[ selector + " " ] &&
14819 (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
14820
14821 if ( nodeType !== 1 ) {
14822 newContext = context;
14823 newSelector = selector;
14824
14825 // qSA looks outside Element context, which is not what we want
14826 // Thanks to Andrew Dupont for this workaround technique
14827 // Support: IE <=8
14828 // Exclude object elements
14829 } else if ( context.nodeName.toLowerCase() !== "object" ) {
14830
14831 // Capture the context ID, setting it first if necessary
14832 if ( (nid = context.getAttribute( "id" )) ) {
14833 nid = nid.replace( rcssescape, fcssescape );
14834 } else {
14835 context.setAttribute( "id", (nid = expando) );
14836 }
14837
14838 // Prefix every selector in the list
14839 groups = tokenize( selector );
14840 i = groups.length;
14841 while ( i-- ) {
14842 groups[i] = "#" + nid + " " + toSelector( groups[i] );
14843 }
14844 newSelector = groups.join( "," );
14845
14846 // Expand context for sibling selectors
14847 newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
14848 context;
14849 }
14850
14851 if ( newSelector ) {
14852 try {
14853 push.apply( results,
14854 newContext.querySelectorAll( newSelector )
14855 );
14856 return results;
14857 } catch ( qsaError ) {
14858 } finally {
14859 if ( nid === expando ) {
14860 context.removeAttribute( "id" );
14861 }
14862 }
14863 }
14864 }
14865 }
14866 }
14867
14868 // All others
14869 return select( selector.replace( rtrim, "$1" ), context, results, seed );
14870 }
14871
14872 /**
14873 * Create key-value caches of limited size
14874 * @returns {function(string, object)} Returns the Object data after storing it on itself with
14875 * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
14876 * deleting the oldest entry
14877 */
14878 function createCache() {
14879 var keys = [];
14880
14881 function cache( key, value ) {
14882 // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
14883 if ( keys.push( key + " " ) > Expr.cacheLength ) {
14884 // Only keep the most recent entries
14885 delete cache[ keys.shift() ];
14886 }
14887 return (cache[ key + " " ] = value);
14888 }
14889 return cache;
14890 }
14891
14892 /**
14893 * Mark a function for special use by Sizzle
14894 * @param {Function} fn The function to mark
14895 */
14896 function markFunction( fn ) {
14897 fn[ expando ] = true;
14898 return fn;
14899 }
14900
14901 /**
14902 * Support testing using an element
14903 * @param {Function} fn Passed the created element and returns a boolean result
14904 */
14905 function assert( fn ) {
14906 var el = document.createElement("fieldset");
14907
14908 try {
14909 return !!fn( el );
14910 } catch (e) {
14911 return false;
14912 } finally {
14913 // Remove from its parent by default
14914 if ( el.parentNode ) {
14915 el.parentNode.removeChild( el );
14916 }
14917 // release memory in IE
14918 el = null;
14919 }
14920 }
14921
14922 /**
14923 * Adds the same handler for all of the specified attrs
14924 * @param {String} attrs Pipe-separated list of attributes
14925 * @param {Function} handler The method that will be applied
14926 */
14927 function addHandle( attrs, handler ) {
14928 var arr = attrs.split("|"),
14929 i = arr.length;
14930
14931 while ( i-- ) {
14932 Expr.attrHandle[ arr[i] ] = handler;
14933 }
14934 }
14935
14936 /**
14937 * Checks document order of two siblings
14938 * @param {Element} a
14939 * @param {Element} b
14940 * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
14941 */
14942 function siblingCheck( a, b ) {
14943 var cur = b && a,
14944 diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
14945 a.sourceIndex - b.sourceIndex;
14946
14947 // Use IE sourceIndex if available on both nodes
14948 if ( diff ) {
14949 return diff;
14950 }
14951
14952 // Check if b follows a
14953 if ( cur ) {
14954 while ( (cur = cur.nextSibling) ) {
14955 if ( cur === b ) {
14956 return -1;
14957 }
14958 }
14959 }
14960
14961 return a ? 1 : -1;
14962 }
14963
14964 /**
14965 * Returns a function to use in pseudos for input types
14966 * @param {String} type
14967 */
14968 function createInputPseudo( type ) {
14969 return function( elem ) {
14970 var name = elem.nodeName.toLowerCase();
14971 return name === "input" && elem.type === type;
14972 };
14973 }
14974
14975 /**
14976 * Returns a function to use in pseudos for buttons
14977 * @param {String} type
14978 */
14979 function createButtonPseudo( type ) {
14980 return function( elem ) {
14981 var name = elem.nodeName.toLowerCase();
14982 return (name === "input" || name === "button") && elem.type === type;
14983 };
14984 }
14985
14986 /**
14987 * Returns a function to use in pseudos for :enabled/:disabled
14988 * @param {Boolean} disabled true for :disabled; false for :enabled
14989 */
14990 function createDisabledPseudo( disabled ) {
14991
14992 // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
14993 return function( elem ) {
14994
14995 // Only certain elements can match :enabled or :disabled
14996 // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
14997 // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
14998 if ( "form" in elem ) {
14999
15000 // Check for inherited disabledness on relevant non-disabled elements:
15001 // * listed form-associated elements in a disabled fieldset
15002 // https://html.spec.whatwg.org/multipage/forms.html#category-listed
15003 // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
15004 // * option elements in a disabled optgroup
15005 // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
15006 // All such elements have a "form" property.
15007 if ( elem.parentNode && elem.disabled === false ) {
15008
15009 // Option elements defer to a parent optgroup if present
15010 if ( "label" in elem ) {
15011 if ( "label" in elem.parentNode ) {
15012 return elem.parentNode.disabled === disabled;
15013 } else {
15014 return elem.disabled === disabled;
15015 }
15016 }
15017
15018 // Support: IE 6 - 11
15019 // Use the isDisabled shortcut property to check for disabled fieldset ancestors
15020 return elem.isDisabled === disabled ||
15021
15022 // Where there is no isDisabled, check manually
15023 /* jshint -W018 */
15024 elem.isDisabled !== !disabled &&
15025 disabledAncestor( elem ) === disabled;
15026 }
15027
15028 return elem.disabled === disabled;
15029
15030 // Try to winnow out elements that can't be disabled before trusting the disabled property.
15031 // Some victims get caught in our net (label, legend, menu, track), but it shouldn't
15032 // even exist on them, let alone have a boolean value.
15033 } else if ( "label" in elem ) {
15034 return elem.disabled === disabled;
15035 }
15036
15037 // Remaining elements are neither :enabled nor :disabled
15038 return false;
15039 };
15040 }
15041
15042 /**
15043 * Returns a function to use in pseudos for positionals
15044 * @param {Function} fn
15045 */
15046 function createPositionalPseudo( fn ) {
15047 return markFunction(function( argument ) {
15048 argument = +argument;
15049 return markFunction(function( seed, matches ) {
15050 var j,
15051 matchIndexes = fn( [], seed.length, argument ),
15052 i = matchIndexes.length;
15053
15054 // Match elements found at the specified indexes
15055 while ( i-- ) {
15056 if ( seed[ (j = matchIndexes[i]) ] ) {
15057 seed[j] = !(matches[j] = seed[j]);
15058 }
15059 }
15060 });
15061 });
15062 }
15063
15064 /**
15065 * Checks a node for validity as a Sizzle context
15066 * @param {Element|Object=} context
15067 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
15068 */
15069 function testContext( context ) {
15070 return context && typeof context.getElementsByTagName !== "undefined" && context;
15071 }
15072
15073 // Expose support vars for convenience
15074 support = Sizzle.support = {};
15075
15076 /**
15077 * Detects XML nodes
15078 * @param {Element|Object} elem An element or a document
15079 * @returns {Boolean} True iff elem is a non-HTML XML node
15080 */
15081 isXML = Sizzle.isXML = function( elem ) {
15082 // documentElement is verified for cases where it doesn't yet exist
15083 // (such as loading iframes in IE - #4833)
15084 var documentElement = elem && (elem.ownerDocument || elem).documentElement;
15085 return documentElement ? documentElement.nodeName !== "HTML" : false;
15086 };
15087
15088 /**
15089 * Sets document-related variables once based on the current document
15090 * @param {Element|Object} [doc] An element or document object to use to set the document
15091 * @returns {Object} Returns the current document
15092 */
15093 setDocument = Sizzle.setDocument = function( node ) {
15094 var hasCompare, subWindow,
15095 doc = node ? node.ownerDocument || node : preferredDoc;
15096
15097 // Return early if doc is invalid or already selected
15098 if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
15099 return document;
15100 }
15101
15102 // Update global variables
15103 document = doc;
15104 docElem = document.documentElement;
15105 documentIsHTML = !isXML( document );
15106
15107 // Support: IE 9-11, Edge
15108 // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
15109 if ( preferredDoc !== document &&
15110 (subWindow = document.defaultView) && subWindow.top !== subWindow ) {
15111
15112 // Support: IE 11, Edge
15113 if ( subWindow.addEventListener ) {
15114 subWindow.addEventListener( "unload", unloadHandler, false );
15115
15116 // Support: IE 9 - 10 only
15117 } else if ( subWindow.attachEvent ) {
15118 subWindow.attachEvent( "onunload", unloadHandler );
15119 }
15120 }
15121
15122 /* Attributes
15123 ---------------------------------------------------------------------- */
15124
15125 // Support: IE<8
15126 // Verify that getAttribute really returns attributes and not properties
15127 // (excepting IE8 booleans)
15128 support.attributes = assert(function( el ) {
15129 el.className = "i";
15130 return !el.getAttribute("className");
15131 });
15132
15133 /* getElement(s)By*
15134 ---------------------------------------------------------------------- */
15135
15136 // Check if getElementsByTagName("*") returns only elements
15137 support.getElementsByTagName = assert(function( el ) {
15138 el.appendChild( document.createComment("") );
15139 return !el.getElementsByTagName("*").length;
15140 });
15141
15142 // Support: IE<9
15143 support.getElementsByClassName = rnative.test( document.getElementsByClassName );
15144
15145 // Support: IE<10
15146 // Check if getElementById returns elements by name
15147 // The broken getElementById methods don't pick up programmatically-set names,
15148 // so use a roundabout getElementsByName test
15149 support.getById = assert(function( el ) {
15150 docElem.appendChild( el ).id = expando;
15151 return !document.getElementsByName || !document.getElementsByName( expando ).length;
15152 });
15153
15154 // ID filter and find
15155 if ( support.getById ) {
15156 Expr.filter["ID"] = function( id ) {
15157 var attrId = id.replace( runescape, funescape );
15158 return function( elem ) {
15159 return elem.getAttribute("id") === attrId;
15160 };
15161 };
15162 Expr.find["ID"] = function( id, context ) {
15163 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
15164 var elem = context.getElementById( id );
15165 return elem ? [ elem ] : [];
15166 }
15167 };
15168 } else {
15169 Expr.filter["ID"] = function( id ) {
15170 var attrId = id.replace( runescape, funescape );
15171 return function( elem ) {
15172 var node = typeof elem.getAttributeNode !== "undefined" &&
15173 elem.getAttributeNode("id");
15174 return node && node.value === attrId;
15175 };
15176 };
15177
15178 // Support: IE 6 - 7 only
15179 // getElementById is not reliable as a find shortcut
15180 Expr.find["ID"] = function( id, context ) {
15181 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
15182 var node, i, elems,
15183 elem = context.getElementById( id );
15184
15185 if ( elem ) {
15186
15187 // Verify the id attribute
15188 node = elem.getAttributeNode("id");
15189 if ( node && node.value === id ) {
15190 return [ elem ];
15191 }
15192
15193 // Fall back on getElementsByName
15194 elems = context.getElementsByName( id );
15195 i = 0;
15196 while ( (elem = elems[i++]) ) {
15197 node = elem.getAttributeNode("id");
15198 if ( node && node.value === id ) {
15199 return [ elem ];
15200 }
15201 }
15202 }
15203
15204 return [];
15205 }
15206 };
15207 }
15208
15209 // Tag
15210 Expr.find["TAG"] = support.getElementsByTagName ?
15211 function( tag, context ) {
15212 if ( typeof context.getElementsByTagName !== "undefined" ) {
15213 return context.getElementsByTagName( tag );
15214
15215 // DocumentFragment nodes don't have gEBTN
15216 } else if ( support.qsa ) {
15217 return context.querySelectorAll( tag );
15218 }
15219 } :
15220
15221 function( tag, context ) {
15222 var elem,
15223 tmp = [],
15224 i = 0,
15225 // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
15226 results = context.getElementsByTagName( tag );
15227
15228 // Filter out possible comments
15229 if ( tag === "*" ) {
15230 while ( (elem = results[i++]) ) {
15231 if ( elem.nodeType === 1 ) {
15232 tmp.push( elem );
15233 }
15234 }
15235
15236 return tmp;
15237 }
15238 return results;
15239 };
15240
15241 // Class
15242 Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
15243 if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
15244 return context.getElementsByClassName( className );
15245 }
15246 };
15247
15248 /* QSA/matchesSelector
15249 ---------------------------------------------------------------------- */
15250
15251 // QSA and matchesSelector support
15252
15253 // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
15254 rbuggyMatches = [];
15255
15256 // qSa(:focus) reports false when true (Chrome 21)
15257 // We allow this because of a bug in IE8/9 that throws an error
15258 // whenever `document.activeElement` is accessed on an iframe
15259 // So, we allow :focus to pass through QSA all the time to avoid the IE error
15260 // See https://bugs.jquery.com/ticket/13378
15261 rbuggyQSA = [];
15262
15263 if ( (support.qsa = rnative.test( document.querySelectorAll )) ) {
15264 // Build QSA regex
15265 // Regex strategy adopted from Diego Perini
15266 assert(function( el ) {
15267 // Select is set to empty string on purpose
15268 // This is to test IE's treatment of not explicitly
15269 // setting a boolean content attribute,
15270 // since its presence should be enough
15271 // https://bugs.jquery.com/ticket/12359
15272 docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" +
15273 "<select id='" + expando + "-\r\\' msallowcapture=''>" +
15274 "<option selected=''></option></select>";
15275
15276 // Support: IE8, Opera 11-12.16
15277 // Nothing should be selected when empty strings follow ^= or $= or *=
15278 // The test attribute must be unknown in Opera but "safe" for WinRT
15279 // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
15280 if ( el.querySelectorAll("[msallowcapture^='']").length ) {
15281 rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
15282 }
15283
15284 // Support: IE8
15285 // Boolean attributes and "value" are not treated correctly
15286 if ( !el.querySelectorAll("[selected]").length ) {
15287 rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
15288 }
15289
15290 // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
15291 if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
15292 rbuggyQSA.push("~=");
15293 }
15294
15295 // Webkit/Opera - :checked should return selected option elements
15296 // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
15297 // IE8 throws error here and will not see later tests
15298 if ( !el.querySelectorAll(":checked").length ) {
15299 rbuggyQSA.push(":checked");
15300 }
15301
15302 // Support: Safari 8+, iOS 8+
15303 // https://bugs.webkit.org/show_bug.cgi?id=136851
15304 // In-page `selector#id sibling-combinator selector` fails
15305 if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
15306 rbuggyQSA.push(".#.+[+~]");
15307 }
15308 });
15309
15310 assert(function( el ) {
15311 el.innerHTML = "<a href='' disabled='disabled'></a>" +
15312 "<select disabled='disabled'><option/></select>";
15313
15314 // Support: Windows 8 Native Apps
15315 // The type and name attributes are restricted during .innerHTML assignment
15316 var input = document.createElement("input");
15317 input.setAttribute( "type", "hidden" );
15318 el.appendChild( input ).setAttribute( "name", "D" );
15319
15320 // Support: IE8
15321 // Enforce case-sensitivity of name attribute
15322 if ( el.querySelectorAll("[name=d]").length ) {
15323 rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
15324 }
15325
15326 // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
15327 // IE8 throws error here and will not see later tests
15328 if ( el.querySelectorAll(":enabled").length !== 2 ) {
15329 rbuggyQSA.push( ":enabled", ":disabled" );
15330 }
15331
15332 // Support: IE9-11+
15333 // IE's :disabled selector does not pick up the children of disabled fieldsets
15334 docElem.appendChild( el ).disabled = true;
15335 if ( el.querySelectorAll(":disabled").length !== 2 ) {
15336 rbuggyQSA.push( ":enabled", ":disabled" );
15337 }
15338
15339 // Opera 10-11 does not throw on post-comma invalid pseudos
15340 el.querySelectorAll("*,:x");
15341 rbuggyQSA.push(",.*:");
15342 });
15343 }
15344
15345 if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
15346 docElem.webkitMatchesSelector ||
15347 docElem.mozMatchesSelector ||
15348 docElem.oMatchesSelector ||
15349 docElem.msMatchesSelector) )) ) {
15350
15351 assert(function( el ) {
15352 // Check to see if it's possible to do matchesSelector
15353 // on a disconnected node (IE 9)
15354 support.disconnectedMatch = matches.call( el, "*" );
15355
15356 // This should fail with an exception
15357 // Gecko does not error, returns false instead
15358 matches.call( el, "[s!='']:x" );
15359 rbuggyMatches.push( "!=", pseudos );
15360 });
15361 }
15362
15363 rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
15364 rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
15365
15366 /* Contains
15367 ---------------------------------------------------------------------- */
15368 hasCompare = rnative.test( docElem.compareDocumentPosition );
15369
15370 // Element contains another
15371 // Purposefully self-exclusive
15372 // As in, an element does not contain itself
15373 contains = hasCompare || rnative.test( docElem.contains ) ?
15374 function( a, b ) {
15375 var adown = a.nodeType === 9 ? a.documentElement : a,
15376 bup = b && b.parentNode;
15377 return a === bup || !!( bup && bup.nodeType === 1 && (
15378 adown.contains ?
15379 adown.contains( bup ) :
15380 a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
15381 ));
15382 } :
15383 function( a, b ) {
15384 if ( b ) {
15385 while ( (b = b.parentNode) ) {
15386 if ( b === a ) {
15387 return true;
15388 }
15389 }
15390 }
15391 return false;
15392 };
15393
15394 /* Sorting
15395 ---------------------------------------------------------------------- */
15396
15397 // Document order sorting
15398 sortOrder = hasCompare ?
15399 function( a, b ) {
15400
15401 // Flag for duplicate removal
15402 if ( a === b ) {
15403 hasDuplicate = true;
15404 return 0;
15405 }
15406
15407 // Sort on method existence if only one input has compareDocumentPosition
15408 var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
15409 if ( compare ) {
15410 return compare;
15411 }
15412
15413 // Calculate position if both inputs belong to the same document
15414 compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
15415 a.compareDocumentPosition( b ) :
15416
15417 // Otherwise we know they are disconnected
15418 1;
15419
15420 // Disconnected nodes
15421 if ( compare & 1 ||
15422 (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
15423
15424 // Choose the first element that is related to our preferred document
15425 if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
15426 return -1;
15427 }
15428 if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
15429 return 1;
15430 }
15431
15432 // Maintain original order
15433 return sortInput ?
15434 ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
15435 0;
15436 }
15437
15438 return compare & 4 ? -1 : 1;
15439 } :
15440 function( a, b ) {
15441 // Exit early if the nodes are identical
15442 if ( a === b ) {
15443 hasDuplicate = true;
15444 return 0;
15445 }
15446
15447 var cur,
15448 i = 0,
15449 aup = a.parentNode,
15450 bup = b.parentNode,
15451 ap = [ a ],
15452 bp = [ b ];
15453
15454 // Parentless nodes are either documents or disconnected
15455 if ( !aup || !bup ) {
15456 return a === document ? -1 :
15457 b === document ? 1 :
15458 aup ? -1 :
15459 bup ? 1 :
15460 sortInput ?
15461 ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
15462 0;
15463
15464 // If the nodes are siblings, we can do a quick check
15465 } else if ( aup === bup ) {
15466 return siblingCheck( a, b );
15467 }
15468
15469 // Otherwise we need full lists of their ancestors for comparison
15470 cur = a;
15471 while ( (cur = cur.parentNode) ) {
15472 ap.unshift( cur );
15473 }
15474 cur = b;
15475 while ( (cur = cur.parentNode) ) {
15476 bp.unshift( cur );
15477 }
15478
15479 // Walk down the tree looking for a discrepancy
15480 while ( ap[i] === bp[i] ) {
15481 i++;
15482 }
15483
15484 return i ?
15485 // Do a sibling check if the nodes have a common ancestor
15486 siblingCheck( ap[i], bp[i] ) :
15487
15488 // Otherwise nodes in our document sort first
15489 ap[i] === preferredDoc ? -1 :
15490 bp[i] === preferredDoc ? 1 :
15491 0;
15492 };
15493
15494 return document;
15495 };
15496
15497 Sizzle.matches = function( expr, elements ) {
15498 return Sizzle( expr, null, null, elements );
15499 };
15500
15501 Sizzle.matchesSelector = function( elem, expr ) {
15502 // Set document vars if needed
15503 if ( ( elem.ownerDocument || elem ) !== document ) {
15504 setDocument( elem );
15505 }
15506
15507 // Make sure that attribute selectors are quoted
15508 expr = expr.replace( rattributeQuotes, "='$1']" );
15509
15510 if ( support.matchesSelector && documentIsHTML &&
15511 !compilerCache[ expr + " " ] &&
15512 ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
15513 ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
15514
15515 try {
15516 var ret = matches.call( elem, expr );
15517
15518 // IE 9's matchesSelector returns false on disconnected nodes
15519 if ( ret || support.disconnectedMatch ||
15520 // As well, disconnected nodes are said to be in a document
15521 // fragment in IE 9
15522 elem.document && elem.document.nodeType !== 11 ) {
15523 return ret;
15524 }
15525 } catch (e) {}
15526 }
15527
15528 return Sizzle( expr, document, null, [ elem ] ).length > 0;
15529 };
15530
15531 Sizzle.contains = function( context, elem ) {
15532 // Set document vars if needed
15533 if ( ( context.ownerDocument || context ) !== document ) {
15534 setDocument( context );
15535 }
15536 return contains( context, elem );
15537 };
15538
15539 Sizzle.attr = function( elem, name ) {
15540 // Set document vars if needed
15541 if ( ( elem.ownerDocument || elem ) !== document ) {
15542 setDocument( elem );
15543 }
15544
15545 var fn = Expr.attrHandle[ name.toLowerCase() ],
15546 // Don't get fooled by Object.prototype properties (jQuery #13807)
15547 val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
15548 fn( elem, name, !documentIsHTML ) :
15549 undefined;
15550
15551 return val !== undefined ?
15552 val :
15553 support.attributes || !documentIsHTML ?
15554 elem.getAttribute( name ) :
15555 (val = elem.getAttributeNode(name)) && val.specified ?
15556 val.value :
15557 null;
15558 };
15559
15560 Sizzle.escape = function( sel ) {
15561 return (sel + "").replace( rcssescape, fcssescape );
15562 };
15563
15564 Sizzle.error = function( msg ) {
15565 throw new Error( "Syntax error, unrecognized expression: " + msg );
15566 };
15567
15568 /**
15569 * Document sorting and removing duplicates
15570 * @param {ArrayLike} results
15571 */
15572 Sizzle.uniqueSort = function( results ) {
15573 var elem,
15574 duplicates = [],
15575 j = 0,
15576 i = 0;
15577
15578 // Unless we *know* we can detect duplicates, assume their presence
15579 hasDuplicate = !support.detectDuplicates;
15580 sortInput = !support.sortStable && results.slice( 0 );
15581 results.sort( sortOrder );
15582
15583 if ( hasDuplicate ) {
15584 while ( (elem = results[i++]) ) {
15585 if ( elem === results[ i ] ) {
15586 j = duplicates.push( i );
15587 }
15588 }
15589 while ( j-- ) {
15590 results.splice( duplicates[ j ], 1 );
15591 }
15592 }
15593
15594 // Clear input after sorting to release objects
15595 // See https://github.com/jquery/sizzle/pull/225
15596 sortInput = null;
15597
15598 return results;
15599 };
15600
15601 /**
15602 * Utility function for retrieving the text value of an array of DOM nodes
15603 * @param {Array|Element} elem
15604 */
15605 getText = Sizzle.getText = function( elem ) {
15606 var node,
15607 ret = "",
15608 i = 0,
15609 nodeType = elem.nodeType;
15610
15611 if ( !nodeType ) {
15612 // If no nodeType, this is expected to be an array
15613 while ( (node = elem[i++]) ) {
15614 // Do not traverse comment nodes
15615 ret += getText( node );
15616 }
15617 } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
15618 // Use textContent for elements
15619 // innerText usage removed for consistency of new lines (jQuery #11153)
15620 if ( typeof elem.textContent === "string" ) {
15621 return elem.textContent;
15622 } else {
15623 // Traverse its children
15624 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
15625 ret += getText( elem );
15626 }
15627 }
15628 } else if ( nodeType === 3 || nodeType === 4 ) {
15629 return elem.nodeValue;
15630 }
15631 // Do not include comment or processing instruction nodes
15632
15633 return ret;
15634 };
15635
15636 Expr = Sizzle.selectors = {
15637
15638 // Can be adjusted by the user
15639 cacheLength: 50,
15640
15641 createPseudo: markFunction,
15642
15643 match: matchExpr,
15644
15645 attrHandle: {},
15646
15647 find: {},
15648
15649 relative: {
15650 ">": { dir: "parentNode", first: true },
15651 " ": { dir: "parentNode" },
15652 "+": { dir: "previousSibling", first: true },
15653 "~": { dir: "previousSibling" }
15654 },
15655
15656 preFilter: {
15657 "ATTR": function( match ) {
15658 match[1] = match[1].replace( runescape, funescape );
15659
15660 // Move the given value to match[3] whether quoted or unquoted
15661 match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
15662
15663 if ( match[2] === "~=" ) {
15664 match[3] = " " + match[3] + " ";
15665 }
15666
15667 return match.slice( 0, 4 );
15668 },
15669
15670 "CHILD": function( match ) {
15671 /* matches from matchExpr["CHILD"]
15672 1 type (only|nth|...)
15673 2 what (child|of-type)
15674 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
15675 4 xn-component of xn+y argument ([+-]?\d*n|)
15676 5 sign of xn-component
15677 6 x of xn-component
15678 7 sign of y-component
15679 8 y of y-component
15680 */
15681 match[1] = match[1].toLowerCase();
15682
15683 if ( match[1].slice( 0, 3 ) === "nth" ) {
15684 // nth-* requires argument
15685 if ( !match[3] ) {
15686 Sizzle.error( match[0] );
15687 }
15688
15689 // numeric x and y parameters for Expr.filter.CHILD
15690 // remember that false/true cast respectively to 0/1
15691 match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
15692 match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
15693
15694 // other types prohibit arguments
15695 } else if ( match[3] ) {
15696 Sizzle.error( match[0] );
15697 }
15698
15699 return match;
15700 },
15701
15702 "PSEUDO": function( match ) {
15703 var excess,
15704 unquoted = !match[6] && match[2];
15705
15706 if ( matchExpr["CHILD"].test( match[0] ) ) {
15707 return null;
15708 }
15709
15710 // Accept quoted arguments as-is
15711 if ( match[3] ) {
15712 match[2] = match[4] || match[5] || "";
15713
15714 // Strip excess characters from unquoted arguments
15715 } else if ( unquoted && rpseudo.test( unquoted ) &&
15716 // Get excess from tokenize (recursively)
15717 (excess = tokenize( unquoted, true )) &&
15718 // advance to the next closing parenthesis
15719 (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
15720
15721 // excess is a negative index
15722 match[0] = match[0].slice( 0, excess );
15723 match[2] = unquoted.slice( 0, excess );
15724 }
15725
15726 // Return only captures needed by the pseudo filter method (type and argument)
15727 return match.slice( 0, 3 );
15728 }
15729 },
15730
15731 filter: {
15732
15733 "TAG": function( nodeNameSelector ) {
15734 var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
15735 return nodeNameSelector === "*" ?
15736 function() { return true; } :
15737 function( elem ) {
15738 return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
15739 };
15740 },
15741
15742 "CLASS": function( className ) {
15743 var pattern = classCache[ className + " " ];
15744
15745 return pattern ||
15746 (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
15747 classCache( className, function( elem ) {
15748 return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
15749 });
15750 },
15751
15752 "ATTR": function( name, operator, check ) {
15753 return function( elem ) {
15754 var result = Sizzle.attr( elem, name );
15755
15756 if ( result == null ) {
15757 return operator === "!=";
15758 }
15759 if ( !operator ) {
15760 return true;
15761 }
15762
15763 result += "";
15764
15765 return operator === "=" ? result === check :
15766 operator === "!=" ? result !== check :
15767 operator === "^=" ? check && result.indexOf( check ) === 0 :
15768 operator === "*=" ? check && result.indexOf( check ) > -1 :
15769 operator === "$=" ? check && result.slice( -check.length ) === check :
15770 operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
15771 operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
15772 false;
15773 };
15774 },
15775
15776 "CHILD": function( type, what, argument, first, last ) {
15777 var simple = type.slice( 0, 3 ) !== "nth",
15778 forward = type.slice( -4 ) !== "last",
15779 ofType = what === "of-type";
15780
15781 return first === 1 && last === 0 ?
15782
15783 // Shortcut for :nth-*(n)
15784 function( elem ) {
15785 return !!elem.parentNode;
15786 } :
15787
15788 function( elem, context, xml ) {
15789 var cache, uniqueCache, outerCache, node, nodeIndex, start,
15790 dir = simple !== forward ? "nextSibling" : "previousSibling",
15791 parent = elem.parentNode,
15792 name = ofType && elem.nodeName.toLowerCase(),
15793 useCache = !xml && !ofType,
15794 diff = false;
15795
15796 if ( parent ) {
15797
15798 // :(first|last|only)-(child|of-type)
15799 if ( simple ) {
15800 while ( dir ) {
15801 node = elem;
15802 while ( (node = node[ dir ]) ) {
15803 if ( ofType ?
15804 node.nodeName.toLowerCase() === name :
15805 node.nodeType === 1 ) {
15806
15807 return false;
15808 }
15809 }
15810 // Reverse direction for :only-* (if we haven't yet done so)
15811 start = dir = type === "only" && !start && "nextSibling";
15812 }
15813 return true;
15814 }
15815
15816 start = [ forward ? parent.firstChild : parent.lastChild ];
15817
15818 // non-xml :nth-child(...) stores cache data on `parent`
15819 if ( forward && useCache ) {
15820
15821 // Seek `elem` from a previously-cached index
15822
15823 // ...in a gzip-friendly way
15824 node = parent;
15825 outerCache = node[ expando ] || (node[ expando ] = {});
15826
15827 // Support: IE <9 only
15828 // Defend against cloned attroperties (jQuery gh-1709)
15829 uniqueCache = outerCache[ node.uniqueID ] ||
15830 (outerCache[ node.uniqueID ] = {});
15831
15832 cache = uniqueCache[ type ] || [];
15833 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
15834 diff = nodeIndex && cache[ 2 ];
15835 node = nodeIndex && parent.childNodes[ nodeIndex ];
15836
15837 while ( (node = ++nodeIndex && node && node[ dir ] ||
15838
15839 // Fallback to seeking `elem` from the start
15840 (diff = nodeIndex = 0) || start.pop()) ) {
15841
15842 // When found, cache indexes on `parent` and break
15843 if ( node.nodeType === 1 && ++diff && node === elem ) {
15844 uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
15845 break;
15846 }
15847 }
15848
15849 } else {
15850 // Use previously-cached element index if available
15851 if ( useCache ) {
15852 // ...in a gzip-friendly way
15853 node = elem;
15854 outerCache = node[ expando ] || (node[ expando ] = {});
15855
15856 // Support: IE <9 only
15857 // Defend against cloned attroperties (jQuery gh-1709)
15858 uniqueCache = outerCache[ node.uniqueID ] ||
15859 (outerCache[ node.uniqueID ] = {});
15860
15861 cache = uniqueCache[ type ] || [];
15862 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
15863 diff = nodeIndex;
15864 }
15865
15866 // xml :nth-child(...)
15867 // or :nth-last-child(...) or :nth(-last)?-of-type(...)
15868 if ( diff === false ) {
15869 // Use the same loop as above to seek `elem` from the start
15870 while ( (node = ++nodeIndex && node && node[ dir ] ||
15871 (diff = nodeIndex = 0) || start.pop()) ) {
15872
15873 if ( ( ofType ?
15874 node.nodeName.toLowerCase() === name :
15875 node.nodeType === 1 ) &&
15876 ++diff ) {
15877
15878 // Cache the index of each encountered element
15879 if ( useCache ) {
15880 outerCache = node[ expando ] || (node[ expando ] = {});
15881
15882 // Support: IE <9 only
15883 // Defend against cloned attroperties (jQuery gh-1709)
15884 uniqueCache = outerCache[ node.uniqueID ] ||
15885 (outerCache[ node.uniqueID ] = {});
15886
15887 uniqueCache[ type ] = [ dirruns, diff ];
15888 }
15889
15890 if ( node === elem ) {
15891 break;
15892 }
15893 }
15894 }
15895 }
15896 }
15897
15898 // Incorporate the offset, then check against cycle size
15899 diff -= last;
15900 return diff === first || ( diff % first === 0 && diff / first >= 0 );
15901 }
15902 };
15903 },
15904
15905 "PSEUDO": function( pseudo, argument ) {
15906 // pseudo-class names are case-insensitive
15907 // http://www.w3.org/TR/selectors/#pseudo-classes
15908 // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
15909 // Remember that setFilters inherits from pseudos
15910 var args,
15911 fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
15912 Sizzle.error( "unsupported pseudo: " + pseudo );
15913
15914 // The user may use createPseudo to indicate that
15915 // arguments are needed to create the filter function
15916 // just as Sizzle does
15917 if ( fn[ expando ] ) {
15918 return fn( argument );
15919 }
15920
15921 // But maintain support for old signatures
15922 if ( fn.length > 1 ) {
15923 args = [ pseudo, pseudo, "", argument ];
15924 return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
15925 markFunction(function( seed, matches ) {
15926 var idx,
15927 matched = fn( seed, argument ),
15928 i = matched.length;
15929 while ( i-- ) {
15930 idx = indexOf( seed, matched[i] );
15931 seed[ idx ] = !( matches[ idx ] = matched[i] );
15932 }
15933 }) :
15934 function( elem ) {
15935 return fn( elem, 0, args );
15936 };
15937 }
15938
15939 return fn;
15940 }
15941 },
15942
15943 pseudos: {
15944 // Potentially complex pseudos
15945 "not": markFunction(function( selector ) {
15946 // Trim the selector passed to compile
15947 // to avoid treating leading and trailing
15948 // spaces as combinators
15949 var input = [],
15950 results = [],
15951 matcher = compile( selector.replace( rtrim, "$1" ) );
15952
15953 return matcher[ expando ] ?
15954 markFunction(function( seed, matches, context, xml ) {
15955 var elem,
15956 unmatched = matcher( seed, null, xml, [] ),
15957 i = seed.length;
15958
15959 // Match elements unmatched by `matcher`
15960 while ( i-- ) {
15961 if ( (elem = unmatched[i]) ) {
15962 seed[i] = !(matches[i] = elem);
15963 }
15964 }
15965 }) :
15966 function( elem, context, xml ) {
15967 input[0] = elem;
15968 matcher( input, null, xml, results );
15969 // Don't keep the element (issue #299)
15970 input[0] = null;
15971 return !results.pop();
15972 };
15973 }),
15974
15975 "has": markFunction(function( selector ) {
15976 return function( elem ) {
15977 return Sizzle( selector, elem ).length > 0;
15978 };
15979 }),
15980
15981 "contains": markFunction(function( text ) {
15982 text = text.replace( runescape, funescape );
15983 return function( elem ) {
15984 return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
15985 };
15986 }),
15987
15988 // "Whether an element is represented by a :lang() selector
15989 // is based solely on the element's language value
15990 // being equal to the identifier C,
15991 // or beginning with the identifier C immediately followed by "-".
15992 // The matching of C against the element's language value is performed case-insensitively.
15993 // The identifier C does not have to be a valid language name."
15994 // http://www.w3.org/TR/selectors/#lang-pseudo
15995 "lang": markFunction( function( lang ) {
15996 // lang value must be a valid identifier
15997 if ( !ridentifier.test(lang || "") ) {
15998 Sizzle.error( "unsupported lang: " + lang );
15999 }
16000 lang = lang.replace( runescape, funescape ).toLowerCase();
16001 return function( elem ) {
16002 var elemLang;
16003 do {
16004 if ( (elemLang = documentIsHTML ?
16005 elem.lang :
16006 elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
16007
16008 elemLang = elemLang.toLowerCase();
16009 return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
16010 }
16011 } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
16012 return false;
16013 };
16014 }),
16015
16016 // Miscellaneous
16017 "target": function( elem ) {
16018 var hash = window.location && window.location.hash;
16019 return hash && hash.slice( 1 ) === elem.id;
16020 },
16021
16022 "root": function( elem ) {
16023 return elem === docElem;
16024 },
16025
16026 "focus": function( elem ) {
16027 return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
16028 },
16029
16030 // Boolean properties
16031 "enabled": createDisabledPseudo( false ),
16032 "disabled": createDisabledPseudo( true ),
16033
16034 "checked": function( elem ) {
16035 // In CSS3, :checked should return both checked and selected elements
16036 // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
16037 var nodeName = elem.nodeName.toLowerCase();
16038 return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
16039 },
16040
16041 "selected": function( elem ) {
16042 // Accessing this property makes selected-by-default
16043 // options in Safari work properly
16044 if ( elem.parentNode ) {
16045 elem.parentNode.selectedIndex;
16046 }
16047
16048 return elem.selected === true;
16049 },
16050
16051 // Contents
16052 "empty": function( elem ) {
16053 // http://www.w3.org/TR/selectors/#empty-pseudo
16054 // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
16055 // but not by others (comment: 8; processing instruction: 7; etc.)
16056 // nodeType < 6 works because attributes (2) do not appear as children
16057 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
16058 if ( elem.nodeType < 6 ) {
16059 return false;
16060 }
16061 }
16062 return true;
16063 },
16064
16065 "parent": function( elem ) {
16066 return !Expr.pseudos["empty"]( elem );
16067 },
16068
16069 // Element/input types
16070 "header": function( elem ) {
16071 return rheader.test( elem.nodeName );
16072 },
16073
16074 "input": function( elem ) {
16075 return rinputs.test( elem.nodeName );
16076 },
16077
16078 "button": function( elem ) {
16079 var name = elem.nodeName.toLowerCase();
16080 return name === "input" && elem.type === "button" || name === "button";
16081 },
16082
16083 "text": function( elem ) {
16084 var attr;
16085 return elem.nodeName.toLowerCase() === "input" &&
16086 elem.type === "text" &&
16087
16088 // Support: IE<8
16089 // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
16090 ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
16091 },
16092
16093 // Position-in-collection
16094 "first": createPositionalPseudo(function() {
16095 return [ 0 ];
16096 }),
16097
16098 "last": createPositionalPseudo(function( matchIndexes, length ) {
16099 return [ length - 1 ];
16100 }),
16101
16102 "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
16103 return [ argument < 0 ? argument + length : argument ];
16104 }),
16105
16106 "even": createPositionalPseudo(function( matchIndexes, length ) {
16107 var i = 0;
16108 for ( ; i < length; i += 2 ) {
16109 matchIndexes.push( i );
16110 }
16111 return matchIndexes;
16112 }),
16113
16114 "odd": createPositionalPseudo(function( matchIndexes, length ) {
16115 var i = 1;
16116 for ( ; i < length; i += 2 ) {
16117 matchIndexes.push( i );
16118 }
16119 return matchIndexes;
16120 }),
16121
16122 "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
16123 var i = argument < 0 ? argument + length : argument;
16124 for ( ; --i >= 0; ) {
16125 matchIndexes.push( i );
16126 }
16127 return matchIndexes;
16128 }),
16129
16130 "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
16131 var i = argument < 0 ? argument + length : argument;
16132 for ( ; ++i < length; ) {
16133 matchIndexes.push( i );
16134 }
16135 return matchIndexes;
16136 })
16137 }
16138 };
16139
16140 Expr.pseudos["nth"] = Expr.pseudos["eq"];
16141
16142 // Add button/input type pseudos
16143 for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
16144 Expr.pseudos[ i ] = createInputPseudo( i );
16145 }
16146 for ( i in { submit: true, reset: true } ) {
16147 Expr.pseudos[ i ] = createButtonPseudo( i );
16148 }
16149
16150 // Easy API for creating new setFilters
16151 function setFilters() {}
16152 setFilters.prototype = Expr.filters = Expr.pseudos;
16153 Expr.setFilters = new setFilters();
16154
16155 tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
16156 var matched, match, tokens, type,
16157 soFar, groups, preFilters,
16158 cached = tokenCache[ selector + " " ];
16159
16160 if ( cached ) {
16161 return parseOnly ? 0 : cached.slice( 0 );
16162 }
16163
16164 soFar = selector;
16165 groups = [];
16166 preFilters = Expr.preFilter;
16167
16168 while ( soFar ) {
16169
16170 // Comma and first run
16171 if ( !matched || (match = rcomma.exec( soFar )) ) {
16172 if ( match ) {
16173 // Don't consume trailing commas as valid
16174 soFar = soFar.slice( match[0].length ) || soFar;
16175 }
16176 groups.push( (tokens = []) );
16177 }
16178
16179 matched = false;
16180
16181 // Combinators
16182 if ( (match = rcombinators.exec( soFar )) ) {
16183 matched = match.shift();
16184 tokens.push({
16185 value: matched,
16186 // Cast descendant combinators to space
16187 type: match[0].replace( rtrim, " " )
16188 });
16189 soFar = soFar.slice( matched.length );
16190 }
16191
16192 // Filters
16193 for ( type in Expr.filter ) {
16194 if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
16195 (match = preFilters[ type ]( match ))) ) {
16196 matched = match.shift();
16197 tokens.push({
16198 value: matched,
16199 type: type,
16200 matches: match
16201 });
16202 soFar = soFar.slice( matched.length );
16203 }
16204 }
16205
16206 if ( !matched ) {
16207 break;
16208 }
16209 }
16210
16211 // Return the length of the invalid excess
16212 // if we're just parsing
16213 // Otherwise, throw an error or return tokens
16214 return parseOnly ?
16215 soFar.length :
16216 soFar ?
16217 Sizzle.error( selector ) :
16218 // Cache the tokens
16219 tokenCache( selector, groups ).slice( 0 );
16220 };
16221
16222 function toSelector( tokens ) {
16223 var i = 0,
16224 len = tokens.length,
16225 selector = "";
16226 for ( ; i < len; i++ ) {
16227 selector += tokens[i].value;
16228 }
16229 return selector;
16230 }
16231
16232 function addCombinator( matcher, combinator, base ) {
16233 var dir = combinator.dir,
16234 skip = combinator.next,
16235 key = skip || dir,
16236 checkNonElements = base && key === "parentNode",
16237 doneName = done++;
16238
16239 return combinator.first ?
16240 // Check against closest ancestor/preceding element
16241 function( elem, context, xml ) {
16242 while ( (elem = elem[ dir ]) ) {
16243 if ( elem.nodeType === 1 || checkNonElements ) {
16244 return matcher( elem, context, xml );
16245 }
16246 }
16247 return false;
16248 } :
16249
16250 // Check against all ancestor/preceding elements
16251 function( elem, context, xml ) {
16252 var oldCache, uniqueCache, outerCache,
16253 newCache = [ dirruns, doneName ];
16254
16255 // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
16256 if ( xml ) {
16257 while ( (elem = elem[ dir ]) ) {
16258 if ( elem.nodeType === 1 || checkNonElements ) {
16259 if ( matcher( elem, context, xml ) ) {
16260 return true;
16261 }
16262 }
16263 }
16264 } else {
16265 while ( (elem = elem[ dir ]) ) {
16266 if ( elem.nodeType === 1 || checkNonElements ) {
16267 outerCache = elem[ expando ] || (elem[ expando ] = {});
16268
16269 // Support: IE <9 only
16270 // Defend against cloned attroperties (jQuery gh-1709)
16271 uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
16272
16273 if ( skip && skip === elem.nodeName.toLowerCase() ) {
16274 elem = elem[ dir ] || elem;
16275 } else if ( (oldCache = uniqueCache[ key ]) &&
16276 oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
16277
16278 // Assign to newCache so results back-propagate to previous elements
16279 return (newCache[ 2 ] = oldCache[ 2 ]);
16280 } else {
16281 // Reuse newcache so results back-propagate to previous elements
16282 uniqueCache[ key ] = newCache;
16283
16284 // A match means we're done; a fail means we have to keep checking
16285 if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
16286 return true;
16287 }
16288 }
16289 }
16290 }
16291 }
16292 return false;
16293 };
16294 }
16295
16296 function elementMatcher( matchers ) {
16297 return matchers.length > 1 ?
16298 function( elem, context, xml ) {
16299 var i = matchers.length;
16300 while ( i-- ) {
16301 if ( !matchers[i]( elem, context, xml ) ) {
16302 return false;
16303 }
16304 }
16305 return true;
16306 } :
16307 matchers[0];
16308 }
16309
16310 function multipleContexts( selector, contexts, results ) {
16311 var i = 0,
16312 len = contexts.length;
16313 for ( ; i < len; i++ ) {
16314 Sizzle( selector, contexts[i], results );
16315 }
16316 return results;
16317 }
16318
16319 function condense( unmatched, map, filter, context, xml ) {
16320 var elem,
16321 newUnmatched = [],
16322 i = 0,
16323 len = unmatched.length,
16324 mapped = map != null;
16325
16326 for ( ; i < len; i++ ) {
16327 if ( (elem = unmatched[i]) ) {
16328 if ( !filter || filter( elem, context, xml ) ) {
16329 newUnmatched.push( elem );
16330 if ( mapped ) {
16331 map.push( i );
16332 }
16333 }
16334 }
16335 }
16336
16337 return newUnmatched;
16338 }
16339
16340 function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
16341 if ( postFilter && !postFilter[ expando ] ) {
16342 postFilter = setMatcher( postFilter );
16343 }
16344 if ( postFinder && !postFinder[ expando ] ) {
16345 postFinder = setMatcher( postFinder, postSelector );
16346 }
16347 return markFunction(function( seed, results, context, xml ) {
16348 var temp, i, elem,
16349 preMap = [],
16350 postMap = [],
16351 preexisting = results.length,
16352
16353 // Get initial elements from seed or context
16354 elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
16355
16356 // Prefilter to get matcher input, preserving a map for seed-results synchronization
16357 matcherIn = preFilter && ( seed || !selector ) ?
16358 condense( elems, preMap, preFilter, context, xml ) :
16359 elems,
16360
16361 matcherOut = matcher ?
16362 // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
16363 postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
16364
16365 // ...intermediate processing is necessary
16366 [] :
16367
16368 // ...otherwise use results directly
16369 results :
16370 matcherIn;
16371
16372 // Find primary matches
16373 if ( matcher ) {
16374 matcher( matcherIn, matcherOut, context, xml );
16375 }
16376
16377 // Apply postFilter
16378 if ( postFilter ) {
16379 temp = condense( matcherOut, postMap );
16380 postFilter( temp, [], context, xml );
16381
16382 // Un-match failing elements by moving them back to matcherIn
16383 i = temp.length;
16384 while ( i-- ) {
16385 if ( (elem = temp[i]) ) {
16386 matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
16387 }
16388 }
16389 }
16390
16391 if ( seed ) {
16392 if ( postFinder || preFilter ) {
16393 if ( postFinder ) {
16394 // Get the final matcherOut by condensing this intermediate into postFinder contexts
16395 temp = [];
16396 i = matcherOut.length;
16397 while ( i-- ) {
16398 if ( (elem = matcherOut[i]) ) {
16399 // Restore matcherIn since elem is not yet a final match
16400 temp.push( (matcherIn[i] = elem) );
16401 }
16402 }
16403 postFinder( null, (matcherOut = []), temp, xml );
16404 }
16405
16406 // Move matched elements from seed to results to keep them synchronized
16407 i = matcherOut.length;
16408 while ( i-- ) {
16409 if ( (elem = matcherOut[i]) &&
16410 (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
16411
16412 seed[temp] = !(results[temp] = elem);
16413 }
16414 }
16415 }
16416
16417 // Add elements to results, through postFinder if defined
16418 } else {
16419 matcherOut = condense(
16420 matcherOut === results ?
16421 matcherOut.splice( preexisting, matcherOut.length ) :
16422 matcherOut
16423 );
16424 if ( postFinder ) {
16425 postFinder( null, results, matcherOut, xml );
16426 } else {
16427 push.apply( results, matcherOut );
16428 }
16429 }
16430 });
16431 }
16432
16433 function matcherFromTokens( tokens ) {
16434 var checkContext, matcher, j,
16435 len = tokens.length,
16436 leadingRelative = Expr.relative[ tokens[0].type ],
16437 implicitRelative = leadingRelative || Expr.relative[" "],
16438 i = leadingRelative ? 1 : 0,
16439
16440 // The foundational matcher ensures that elements are reachable from top-level context(s)
16441 matchContext = addCombinator( function( elem ) {
16442 return elem === checkContext;
16443 }, implicitRelative, true ),
16444 matchAnyContext = addCombinator( function( elem ) {
16445 return indexOf( checkContext, elem ) > -1;
16446 }, implicitRelative, true ),
16447 matchers = [ function( elem, context, xml ) {
16448 var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
16449 (checkContext = context).nodeType ?
16450 matchContext( elem, context, xml ) :
16451 matchAnyContext( elem, context, xml ) );
16452 // Avoid hanging onto element (issue #299)
16453 checkContext = null;
16454 return ret;
16455 } ];
16456
16457 for ( ; i < len; i++ ) {
16458 if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
16459 matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
16460 } else {
16461 matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
16462
16463 // Return special upon seeing a positional matcher
16464 if ( matcher[ expando ] ) {
16465 // Find the next relative operator (if any) for proper handling
16466 j = ++i;
16467 for ( ; j < len; j++ ) {
16468 if ( Expr.relative[ tokens[j].type ] ) {
16469 break;
16470 }
16471 }
16472 return setMatcher(
16473 i > 1 && elementMatcher( matchers ),
16474 i > 1 && toSelector(
16475 // If the preceding token was a descendant combinator, insert an implicit any-element `*`
16476 tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
16477 ).replace( rtrim, "$1" ),
16478 matcher,
16479 i < j && matcherFromTokens( tokens.slice( i, j ) ),
16480 j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
16481 j < len && toSelector( tokens )
16482 );
16483 }
16484 matchers.push( matcher );
16485 }
16486 }
16487
16488 return elementMatcher( matchers );
16489 }
16490
16491 function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
16492 var bySet = setMatchers.length > 0,
16493 byElement = elementMatchers.length > 0,
16494 superMatcher = function( seed, context, xml, results, outermost ) {
16495 var elem, j, matcher,
16496 matchedCount = 0,
16497 i = "0",
16498 unmatched = seed && [],
16499 setMatched = [],
16500 contextBackup = outermostContext,
16501 // We must always have either seed elements or outermost context
16502 elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
16503 // Use integer dirruns iff this is the outermost matcher
16504 dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
16505 len = elems.length;
16506
16507 if ( outermost ) {
16508 outermostContext = context === document || context || outermost;
16509 }
16510
16511 // Add elements passing elementMatchers directly to results
16512 // Support: IE<9, Safari
16513 // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
16514 for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
16515 if ( byElement && elem ) {
16516 j = 0;
16517 if ( !context && elem.ownerDocument !== document ) {
16518 setDocument( elem );
16519 xml = !documentIsHTML;
16520 }
16521 while ( (matcher = elementMatchers[j++]) ) {
16522 if ( matcher( elem, context || document, xml) ) {
16523 results.push( elem );
16524 break;
16525 }
16526 }
16527 if ( outermost ) {
16528 dirruns = dirrunsUnique;
16529 }
16530 }
16531
16532 // Track unmatched elements for set filters
16533 if ( bySet ) {
16534 // They will have gone through all possible matchers
16535 if ( (elem = !matcher && elem) ) {
16536 matchedCount--;
16537 }
16538
16539 // Lengthen the array for every element, matched or not
16540 if ( seed ) {
16541 unmatched.push( elem );
16542 }
16543 }
16544 }
16545
16546 // `i` is now the count of elements visited above, and adding it to `matchedCount`
16547 // makes the latter nonnegative.
16548 matchedCount += i;
16549
16550 // Apply set filters to unmatched elements
16551 // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
16552 // equals `i`), unless we didn't visit _any_ elements in the above loop because we have
16553 // no element matchers and no seed.
16554 // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
16555 // case, which will result in a "00" `matchedCount` that differs from `i` but is also
16556 // numerically zero.
16557 if ( bySet && i !== matchedCount ) {
16558 j = 0;
16559 while ( (matcher = setMatchers[j++]) ) {
16560 matcher( unmatched, setMatched, context, xml );
16561 }
16562
16563 if ( seed ) {
16564 // Reintegrate element matches to eliminate the need for sorting
16565 if ( matchedCount > 0 ) {
16566 while ( i-- ) {
16567 if ( !(unmatched[i] || setMatched[i]) ) {
16568 setMatched[i] = pop.call( results );
16569 }
16570 }
16571 }
16572
16573 // Discard index placeholder values to get only actual matches
16574 setMatched = condense( setMatched );
16575 }
16576
16577 // Add matches to results
16578 push.apply( results, setMatched );
16579
16580 // Seedless set matches succeeding multiple successful matchers stipulate sorting
16581 if ( outermost && !seed && setMatched.length > 0 &&
16582 ( matchedCount + setMatchers.length ) > 1 ) {
16583
16584 Sizzle.uniqueSort( results );
16585 }
16586 }
16587
16588 // Override manipulation of globals by nested matchers
16589 if ( outermost ) {
16590 dirruns = dirrunsUnique;
16591 outermostContext = contextBackup;
16592 }
16593
16594 return unmatched;
16595 };
16596
16597 return bySet ?
16598 markFunction( superMatcher ) :
16599 superMatcher;
16600 }
16601
16602 compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
16603 var i,
16604 setMatchers = [],
16605 elementMatchers = [],
16606 cached = compilerCache[ selector + " " ];
16607
16608 if ( !cached ) {
16609 // Generate a function of recursive functions that can be used to check each element
16610 if ( !match ) {
16611 match = tokenize( selector );
16612 }
16613 i = match.length;
16614 while ( i-- ) {
16615 cached = matcherFromTokens( match[i] );
16616 if ( cached[ expando ] ) {
16617 setMatchers.push( cached );
16618 } else {
16619 elementMatchers.push( cached );
16620 }
16621 }
16622
16623 // Cache the compiled function
16624 cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
16625
16626 // Save selector and tokenization
16627 cached.selector = selector;
16628 }
16629 return cached;
16630 };
16631
16632 /**
16633 * A low-level selection function that works with Sizzle's compiled
16634 * selector functions
16635 * @param {String|Function} selector A selector or a pre-compiled
16636 * selector function built with Sizzle.compile
16637 * @param {Element} context
16638 * @param {Array} [results]
16639 * @param {Array} [seed] A set of elements to match against
16640 */
16641 select = Sizzle.select = function( selector, context, results, seed ) {
16642 var i, tokens, token, type, find,
16643 compiled = typeof selector === "function" && selector,
16644 match = !seed && tokenize( (selector = compiled.selector || selector) );
16645
16646 results = results || [];
16647
16648 // Try to minimize operations if there is only one selector in the list and no seed
16649 // (the latter of which guarantees us context)
16650 if ( match.length === 1 ) {
16651
16652 // Reduce context if the leading compound selector is an ID
16653 tokens = match[0] = match[0].slice( 0 );
16654 if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
16655 context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {
16656
16657 context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
16658 if ( !context ) {
16659 return results;
16660
16661 // Precompiled matchers will still verify ancestry, so step up a level
16662 } else if ( compiled ) {
16663 context = context.parentNode;
16664 }
16665
16666 selector = selector.slice( tokens.shift().value.length );
16667 }
16668
16669 // Fetch a seed set for right-to-left matching
16670 i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
16671 while ( i-- ) {
16672 token = tokens[i];
16673
16674 // Abort if we hit a combinator
16675 if ( Expr.relative[ (type = token.type) ] ) {
16676 break;
16677 }
16678 if ( (find = Expr.find[ type ]) ) {
16679 // Search, expanding context for leading sibling combinators
16680 if ( (seed = find(
16681 token.matches[0].replace( runescape, funescape ),
16682 rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
16683 )) ) {
16684
16685 // If seed is empty or no tokens remain, we can return early
16686 tokens.splice( i, 1 );
16687 selector = seed.length && toSelector( tokens );
16688 if ( !selector ) {
16689 push.apply( results, seed );
16690 return results;
16691 }
16692
16693 break;
16694 }
16695 }
16696 }
16697 }
16698
16699 // Compile and execute a filtering function if one is not provided
16700 // Provide `match` to avoid retokenization if we modified the selector above
16701 ( compiled || compile( selector, match ) )(
16702 seed,
16703 context,
16704 !documentIsHTML,
16705 results,
16706 !context || rsibling.test( selector ) && testContext( context.parentNode ) || context
16707 );
16708 return results;
16709 };
16710
16711 // One-time assignments
16712
16713 // Sort stability
16714 support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
16715
16716 // Support: Chrome 14-35+
16717 // Always assume duplicates if they aren't passed to the comparison function
16718 support.detectDuplicates = !!hasDuplicate;
16719
16720 // Initialize against the default document
16721 setDocument();
16722
16723 // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
16724 // Detached nodes confoundingly follow *each other*
16725 support.sortDetached = assert(function( el ) {
16726 // Should return 1, but returns 4 (following)
16727 return el.compareDocumentPosition( document.createElement("fieldset") ) & 1;
16728 });
16729
16730 // Support: IE<8
16731 // Prevent attribute/property "interpolation"
16732 // https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
16733 if ( !assert(function( el ) {
16734 el.innerHTML = "<a href='#'></a>";
16735 return el.firstChild.getAttribute("href") === "#" ;
16736 }) ) {
16737 addHandle( "type|href|height|width", function( elem, name, isXML ) {
16738 if ( !isXML ) {
16739 return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
16740 }
16741 });
16742 }
16743
16744 // Support: IE<9
16745 // Use defaultValue in place of getAttribute("value")
16746 if ( !support.attributes || !assert(function( el ) {
16747 el.innerHTML = "<input/>";
16748 el.firstChild.setAttribute( "value", "" );
16749 return el.firstChild.getAttribute( "value" ) === "";
16750 }) ) {
16751 addHandle( "value", function( elem, name, isXML ) {
16752 if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
16753 return elem.defaultValue;
16754 }
16755 });
16756 }
16757
16758 // Support: IE<9
16759 // Use getAttributeNode to fetch booleans when getAttribute lies
16760 if ( !assert(function( el ) {
16761 return el.getAttribute("disabled") == null;
16762 }) ) {
16763 addHandle( booleans, function( elem, name, isXML ) {
16764 var val;
16765 if ( !isXML ) {
16766 return elem[ name ] === true ? name.toLowerCase() :
16767 (val = elem.getAttributeNode( name )) && val.specified ?
16768 val.value :
16769 null;
16770 }
16771 });
16772 }
16773
16774 return Sizzle;
16775
16776 })( window );
16777
16778
16779
16780 jQuery.find = Sizzle;
16781 jQuery.expr = Sizzle.selectors;
16782
16783 // Deprecated
16784 jQuery.expr[ ":" ] = jQuery.expr.pseudos;
16785 jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
16786 jQuery.text = Sizzle.getText;
16787 jQuery.isXMLDoc = Sizzle.isXML;
16788 jQuery.contains = Sizzle.contains;
16789 jQuery.escapeSelector = Sizzle.escape;
16790
16791
16792
16793
16794 var dir = function( elem, dir, until ) {
16795 var matched = [],
16796 truncate = until !== undefined;
16797
16798 while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
16799 if ( elem.nodeType === 1 ) {
16800 if ( truncate && jQuery( elem ).is( until ) ) {
16801 break;
16802 }
16803 matched.push( elem );
16804 }
16805 }
16806 return matched;
16807 };
16808
16809
16810 var siblings = function( n, elem ) {
16811 var matched = [];
16812
16813 for ( ; n; n = n.nextSibling ) {
16814 if ( n.nodeType === 1 && n !== elem ) {
16815 matched.push( n );
16816 }
16817 }
16818
16819 return matched;
16820 };
16821
16822
16823 var rneedsContext = jQuery.expr.match.needsContext;
16824
16825
16826
16827 function nodeName( elem, name ) {
16828
16829 return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
16830
16831 };
16832 var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
16833
16834
16835
16836 var risSimple = /^.[^:#\[\.,]*$/;
16837
16838 // Implement the identical functionality for filter and not
16839 function winnow( elements, qualifier, not ) {
16840 if ( jQuery.isFunction( qualifier ) ) {
16841 return jQuery.grep( elements, function( elem, i ) {
16842 return !!qualifier.call( elem, i, elem ) !== not;
16843 } );
16844 }
16845
16846 // Single element
16847 if ( qualifier.nodeType ) {
16848 return jQuery.grep( elements, function( elem ) {
16849 return ( elem === qualifier ) !== not;
16850 } );
16851 }
16852
16853 // Arraylike of elements (jQuery, arguments, Array)
16854 if ( typeof qualifier !== "string" ) {
16855 return jQuery.grep( elements, function( elem ) {
16856 return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
16857 } );
16858 }
16859
16860 // Simple selector that can be filtered directly, removing non-Elements
16861 if ( risSimple.test( qualifier ) ) {
16862 return jQuery.filter( qualifier, elements, not );
16863 }
16864
16865 // Complex selector, compare the two sets, removing non-Elements
16866 qualifier = jQuery.filter( qualifier, elements );
16867 return jQuery.grep( elements, function( elem ) {
16868 return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1;
16869 } );
16870 }
16871
16872 jQuery.filter = function( expr, elems, not ) {
16873 var elem = elems[ 0 ];
16874
16875 if ( not ) {
16876 expr = ":not(" + expr + ")";
16877 }
16878
16879 if ( elems.length === 1 && elem.nodeType === 1 ) {
16880 return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
16881 }
16882
16883 return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
16884 return elem.nodeType === 1;
16885 } ) );
16886 };
16887
16888 jQuery.fn.extend( {
16889 find: function( selector ) {
16890 var i, ret,
16891 len = this.length,
16892 self = this;
16893
16894 if ( typeof selector !== "string" ) {
16895 return this.pushStack( jQuery( selector ).filter( function() {
16896 for ( i = 0; i < len; i++ ) {
16897 if ( jQuery.contains( self[ i ], this ) ) {
16898 return true;
16899 }
16900 }
16901 } ) );
16902 }
16903
16904 ret = this.pushStack( [] );
16905
16906 for ( i = 0; i < len; i++ ) {
16907 jQuery.find( selector, self[ i ], ret );
16908 }
16909
16910 return len > 1 ? jQuery.uniqueSort( ret ) : ret;
16911 },
16912 filter: function( selector ) {
16913 return this.pushStack( winnow( this, selector || [], false ) );
16914 },
16915 not: function( selector ) {
16916 return this.pushStack( winnow( this, selector || [], true ) );
16917 },
16918 is: function( selector ) {
16919 return !!winnow(
16920 this,
16921
16922 // If this is a positional/relative selector, check membership in the returned set
16923 // so $("p:first").is("p:last") won't return true for a doc with two "p".
16924 typeof selector === "string" && rneedsContext.test( selector ) ?
16925 jQuery( selector ) :
16926 selector || [],
16927 false
16928 ).length;
16929 }
16930 } );
16931
16932
16933 // Initialize a jQuery object
16934
16935
16936 // A central reference to the root jQuery(document)
16937 var rootjQuery,
16938
16939 // A simple way to check for HTML strings
16940 // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
16941 // Strict HTML recognition (#11290: must start with <)
16942 // Shortcut simple #id case for speed
16943 rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
16944
16945 init = jQuery.fn.init = function( selector, context, root ) {
16946 var match, elem;
16947
16948 // HANDLE: $(""), $(null), $(undefined), $(false)
16949 if ( !selector ) {
16950 return this;
16951 }
16952
16953 // Method init() accepts an alternate rootjQuery
16954 // so migrate can support jQuery.sub (gh-2101)
16955 root = root || rootjQuery;
16956
16957 // Handle HTML strings
16958 if ( typeof selector === "string" ) {
16959 if ( selector[ 0 ] === "<" &&
16960 selector[ selector.length - 1 ] === ">" &&
16961 selector.length >= 3 ) {
16962
16963 // Assume that strings that start and end with <> are HTML and skip the regex check
16964 match = [ null, selector, null ];
16965
16966 } else {
16967 match = rquickExpr.exec( selector );
16968 }
16969
16970 // Match html or make sure no context is specified for #id
16971 if ( match && ( match[ 1 ] || !context ) ) {
16972
16973 // HANDLE: $(html) -> $(array)
16974 if ( match[ 1 ] ) {
16975 context = context instanceof jQuery ? context[ 0 ] : context;
16976
16977 // Option to run scripts is true for back-compat
16978 // Intentionally let the error be thrown if parseHTML is not present
16979 jQuery.merge( this, jQuery.parseHTML(
16980 match[ 1 ],
16981 context && context.nodeType ? context.ownerDocument || context : document,
16982 true
16983 ) );
16984
16985 // HANDLE: $(html, props)
16986 if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
16987 for ( match in context ) {
16988
16989 // Properties of context are called as methods if possible
16990 if ( jQuery.isFunction( this[ match ] ) ) {
16991 this[ match ]( context[ match ] );
16992
16993 // ...and otherwise set as attributes
16994 } else {
16995 this.attr( match, context[ match ] );
16996 }
16997 }
16998 }
16999
17000 return this;
17001
17002 // HANDLE: $(#id)
17003 } else {
17004 elem = document.getElementById( match[ 2 ] );
17005
17006 if ( elem ) {
17007
17008 // Inject the element directly into the jQuery object
17009 this[ 0 ] = elem;
17010 this.length = 1;
17011 }
17012 return this;
17013 }
17014
17015 // HANDLE: $(expr, $(...))
17016 } else if ( !context || context.jquery ) {
17017 return ( context || root ).find( selector );
17018
17019 // HANDLE: $(expr, context)
17020 // (which is just equivalent to: $(context).find(expr)
17021 } else {
17022 return this.constructor( context ).find( selector );
17023 }
17024
17025 // HANDLE: $(DOMElement)
17026 } else if ( selector.nodeType ) {
17027 this[ 0 ] = selector;
17028 this.length = 1;
17029 return this;
17030
17031 // HANDLE: $(function)
17032 // Shortcut for document ready
17033 } else if ( jQuery.isFunction( selector ) ) {
17034 return root.ready !== undefined ?
17035 root.ready( selector ) :
17036
17037 // Execute immediately if ready is not present
17038 selector( jQuery );
17039 }
17040
17041 return jQuery.makeArray( selector, this );
17042 };
17043
17044 // Give the init function the jQuery prototype for later instantiation
17045 init.prototype = jQuery.fn;
17046
17047 // Initialize central reference
17048 rootjQuery = jQuery( document );
17049
17050
17051 var rparentsprev = /^(?:parents|prev(?:Until|All))/,
17052
17053 // Methods guaranteed to produce a unique set when starting from a unique set
17054 guaranteedUnique = {
17055 children: true,
17056 contents: true,
17057 next: true,
17058 prev: true
17059 };
17060
17061 jQuery.fn.extend( {
17062 has: function( target ) {
17063 var targets = jQuery( target, this ),
17064 l = targets.length;
17065
17066 return this.filter( function() {
17067 var i = 0;
17068 for ( ; i < l; i++ ) {
17069 if ( jQuery.contains( this, targets[ i ] ) ) {
17070 return true;
17071 }
17072 }
17073 } );
17074 },
17075
17076 closest: function( selectors, context ) {
17077 var cur,
17078 i = 0,
17079 l = this.length,
17080 matched = [],
17081 targets = typeof selectors !== "string" && jQuery( selectors );
17082
17083 // Positional selectors never match, since there's no _selection_ context
17084 if ( !rneedsContext.test( selectors ) ) {
17085 for ( ; i < l; i++ ) {
17086 for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
17087
17088 // Always skip document fragments
17089 if ( cur.nodeType < 11 && ( targets ?
17090 targets.index( cur ) > -1 :
17091
17092 // Don't pass non-elements to Sizzle
17093 cur.nodeType === 1 &&
17094 jQuery.find.matchesSelector( cur, selectors ) ) ) {
17095
17096 matched.push( cur );
17097 break;
17098 }
17099 }
17100 }
17101 }
17102
17103 return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
17104 },
17105
17106 // Determine the position of an element within the set
17107 index: function( elem ) {
17108
17109 // No argument, return index in parent
17110 if ( !elem ) {
17111 return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
17112 }
17113
17114 // Index in selector
17115 if ( typeof elem === "string" ) {
17116 return indexOf.call( jQuery( elem ), this[ 0 ] );
17117 }
17118
17119 // Locate the position of the desired element
17120 return indexOf.call( this,
17121
17122 // If it receives a jQuery object, the first element is used
17123 elem.jquery ? elem[ 0 ] : elem
17124 );
17125 },
17126
17127 add: function( selector, context ) {
17128 return this.pushStack(
17129 jQuery.uniqueSort(
17130 jQuery.merge( this.get(), jQuery( selector, context ) )
17131 )
17132 );
17133 },
17134
17135 addBack: function( selector ) {
17136 return this.add( selector == null ?
17137 this.prevObject : this.prevObject.filter( selector )
17138 );
17139 }
17140 } );
17141
17142 function sibling( cur, dir ) {
17143 while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
17144 return cur;
17145 }
17146
17147 jQuery.each( {
17148 parent: function( elem ) {
17149 var parent = elem.parentNode;
17150 return parent && parent.nodeType !== 11 ? parent : null;
17151 },
17152 parents: function( elem ) {
17153 return dir( elem, "parentNode" );
17154 },
17155 parentsUntil: function( elem, i, until ) {
17156 return dir( elem, "parentNode", until );
17157 },
17158 next: function( elem ) {
17159 return sibling( elem, "nextSibling" );
17160 },
17161 prev: function( elem ) {
17162 return sibling( elem, "previousSibling" );
17163 },
17164 nextAll: function( elem ) {
17165 return dir( elem, "nextSibling" );
17166 },
17167 prevAll: function( elem ) {
17168 return dir( elem, "previousSibling" );
17169 },
17170 nextUntil: function( elem, i, until ) {
17171 return dir( elem, "nextSibling", until );
17172 },
17173 prevUntil: function( elem, i, until ) {
17174 return dir( elem, "previousSibling", until );
17175 },
17176 siblings: function( elem ) {
17177 return siblings( ( elem.parentNode || {} ).firstChild, elem );
17178 },
17179 children: function( elem ) {
17180 return siblings( elem.firstChild );
17181 },
17182 contents: function( elem ) {
17183 if ( nodeName( elem, "iframe" ) ) {
17184 return elem.contentDocument;
17185 }
17186
17187 // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
17188 // Treat the template element as a regular one in browsers that
17189 // don't support it.
17190 if ( nodeName( elem, "template" ) ) {
17191 elem = elem.content || elem;
17192 }
17193
17194 return jQuery.merge( [], elem.childNodes );
17195 }
17196 }, function( name, fn ) {
17197 jQuery.fn[ name ] = function( until, selector ) {
17198 var matched = jQuery.map( this, fn, until );
17199
17200 if ( name.slice( -5 ) !== "Until" ) {
17201 selector = until;
17202 }
17203
17204 if ( selector && typeof selector === "string" ) {
17205 matched = jQuery.filter( selector, matched );
17206 }
17207
17208 if ( this.length > 1 ) {
17209
17210 // Remove duplicates
17211 if ( !guaranteedUnique[ name ] ) {
17212 jQuery.uniqueSort( matched );
17213 }
17214
17215 // Reverse order for parents* and prev-derivatives
17216 if ( rparentsprev.test( name ) ) {
17217 matched.reverse();
17218 }
17219 }
17220
17221 return this.pushStack( matched );
17222 };
17223 } );
17224 var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
17225
17226
17227
17228 // Convert String-formatted options into Object-formatted ones
17229 function createOptions( options ) {
17230 var object = {};
17231 jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
17232 object[ flag ] = true;
17233 } );
17234 return object;
17235 }
17236
17237 /*
17238 * Create a callback list using the following parameters:
17239 *
17240 * options: an optional list of space-separated options that will change how
17241 * the callback list behaves or a more traditional option object
17242 *
17243 * By default a callback list will act like an event callback list and can be
17244 * "fired" multiple times.
17245 *
17246 * Possible options:
17247 *
17248 * once: will ensure the callback list can only be fired once (like a Deferred)
17249 *
17250 * memory: will keep track of previous values and will call any callback added
17251 * after the list has been fired right away with the latest "memorized"
17252 * values (like a Deferred)
17253 *
17254 * unique: will ensure a callback can only be added once (no duplicate in the list)
17255 *
17256 * stopOnFalse: interrupt callings when a callback returns false
17257 *
17258 */
17259 jQuery.Callbacks = function( options ) {
17260
17261 // Convert options from String-formatted to Object-formatted if needed
17262 // (we check in cache first)
17263 options = typeof options === "string" ?
17264 createOptions( options ) :
17265 jQuery.extend( {}, options );
17266
17267 var // Flag to know if list is currently firing
17268 firing,
17269
17270 // Last fire value for non-forgettable lists
17271 memory,
17272
17273 // Flag to know if list was already fired
17274 fired,
17275
17276 // Flag to prevent firing
17277 locked,
17278
17279 // Actual callback list
17280 list = [],
17281
17282 // Queue of execution data for repeatable lists
17283 queue = [],
17284
17285 // Index of currently firing callback (modified by add/remove as needed)
17286 firingIndex = -1,
17287
17288 // Fire callbacks
17289 fire = function() {
17290
17291 // Enforce single-firing
17292 locked = locked || options.once;
17293
17294 // Execute callbacks for all pending executions,
17295 // respecting firingIndex overrides and runtime changes
17296 fired = firing = true;
17297 for ( ; queue.length; firingIndex = -1 ) {
17298 memory = queue.shift();
17299 while ( ++firingIndex < list.length ) {
17300
17301 // Run callback and check for early termination
17302 if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
17303 options.stopOnFalse ) {
17304
17305 // Jump to end and forget the data so .add doesn't re-fire
17306 firingIndex = list.length;
17307 memory = false;
17308 }
17309 }
17310 }
17311
17312 // Forget the data if we're done with it
17313 if ( !options.memory ) {
17314 memory = false;
17315 }
17316
17317 firing = false;
17318
17319 // Clean up if we're done firing for good
17320 if ( locked ) {
17321
17322 // Keep an empty list if we have data for future add calls
17323 if ( memory ) {
17324 list = [];
17325
17326 // Otherwise, this object is spent
17327 } else {
17328 list = "";
17329 }
17330 }
17331 },
17332
17333 // Actual Callbacks object
17334 self = {
17335
17336 // Add a callback or a collection of callbacks to the list
17337 add: function() {
17338 if ( list ) {
17339
17340 // If we have memory from a past run, we should fire after adding
17341 if ( memory && !firing ) {
17342 firingIndex = list.length - 1;
17343 queue.push( memory );
17344 }
17345
17346 ( function add( args ) {
17347 jQuery.each( args, function( _, arg ) {
17348 if ( jQuery.isFunction( arg ) ) {
17349 if ( !options.unique || !self.has( arg ) ) {
17350 list.push( arg );
17351 }
17352 } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) {
17353
17354 // Inspect recursively
17355 add( arg );
17356 }
17357 } );
17358 } )( arguments );
17359
17360 if ( memory && !firing ) {
17361 fire();
17362 }
17363 }
17364 return this;
17365 },
17366
17367 // Remove a callback from the list
17368 remove: function() {
17369 jQuery.each( arguments, function( _, arg ) {
17370 var index;
17371 while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
17372 list.splice( index, 1 );
17373
17374 // Handle firing indexes
17375 if ( index <= firingIndex ) {
17376 firingIndex--;
17377 }
17378 }
17379 } );
17380 return this;
17381 },
17382
17383 // Check if a given callback is in the list.
17384 // If no argument is given, return whether or not list has callbacks attached.
17385 has: function( fn ) {
17386 return fn ?
17387 jQuery.inArray( fn, list ) > -1 :
17388 list.length > 0;
17389 },
17390
17391 // Remove all callbacks from the list
17392 empty: function() {
17393 if ( list ) {
17394 list = [];
17395 }
17396 return this;
17397 },
17398
17399 // Disable .fire and .add
17400 // Abort any current/pending executions
17401 // Clear all callbacks and values
17402 disable: function() {
17403 locked = queue = [];
17404 list = memory = "";
17405 return this;
17406 },
17407 disabled: function() {
17408 return !list;
17409 },
17410
17411 // Disable .fire
17412 // Also disable .add unless we have memory (since it would have no effect)
17413 // Abort any pending executions
17414 lock: function() {
17415 locked = queue = [];
17416 if ( !memory && !firing ) {
17417 list = memory = "";
17418 }
17419 return this;
17420 },
17421 locked: function() {
17422 return !!locked;
17423 },
17424
17425 // Call all callbacks with the given context and arguments
17426 fireWith: function( context, args ) {
17427 if ( !locked ) {
17428 args = args || [];
17429 args = [ context, args.slice ? args.slice() : args ];
17430 queue.push( args );
17431 if ( !firing ) {
17432 fire();
17433 }
17434 }
17435 return this;
17436 },
17437
17438 // Call all the callbacks with the given arguments
17439 fire: function() {
17440 self.fireWith( this, arguments );
17441 return this;
17442 },
17443
17444 // To know if the callbacks have already been called at least once
17445 fired: function() {
17446 return !!fired;
17447 }
17448 };
17449
17450 return self;
17451 };
17452
17453
17454 function Identity( v ) {
17455 return v;
17456 }
17457 function Thrower( ex ) {
17458 throw ex;
17459 }
17460
17461 function adoptValue( value, resolve, reject, noValue ) {
17462 var method;
17463
17464 try {
17465
17466 // Check for promise aspect first to privilege synchronous behavior
17467 if ( value && jQuery.isFunction( ( method = value.promise ) ) ) {
17468 method.call( value ).done( resolve ).fail( reject );
17469
17470 // Other thenables
17471 } else if ( value && jQuery.isFunction( ( method = value.then ) ) ) {
17472 method.call( value, resolve, reject );
17473
17474 // Other non-thenables
17475 } else {
17476
17477 // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
17478 // * false: [ value ].slice( 0 ) => resolve( value )
17479 // * true: [ value ].slice( 1 ) => resolve()
17480 resolve.apply( undefined, [ value ].slice( noValue ) );
17481 }
17482
17483 // For Promises/A+, convert exceptions into rejections
17484 // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
17485 // Deferred#then to conditionally suppress rejection.
17486 } catch ( value ) {
17487
17488 // Support: Android 4.0 only
17489 // Strict mode functions invoked without .call/.apply get global-object context
17490 reject.apply( undefined, [ value ] );
17491 }
17492 }
17493
17494 jQuery.extend( {
17495
17496 Deferred: function( func ) {
17497 var tuples = [
17498
17499 // action, add listener, callbacks,
17500 // ... .then handlers, argument index, [final state]
17501 [ "notify", "progress", jQuery.Callbacks( "memory" ),
17502 jQuery.Callbacks( "memory" ), 2 ],
17503 [ "resolve", "done", jQuery.Callbacks( "once memory" ),
17504 jQuery.Callbacks( "once memory" ), 0, "resolved" ],
17505 [ "reject", "fail", jQuery.Callbacks( "once memory" ),
17506 jQuery.Callbacks( "once memory" ), 1, "rejected" ]
17507 ],
17508 state = "pending",
17509 promise = {
17510 state: function() {
17511 return state;
17512 },
17513 always: function() {
17514 deferred.done( arguments ).fail( arguments );
17515 return this;
17516 },
17517 "catch": function( fn ) {
17518 return promise.then( null, fn );
17519 },
17520
17521 // Keep pipe for back-compat
17522 pipe: function( /* fnDone, fnFail, fnProgress */ ) {
17523 var fns = arguments;
17524
17525 return jQuery.Deferred( function( newDefer ) {
17526 jQuery.each( tuples, function( i, tuple ) {
17527
17528 // Map tuples (progress, done, fail) to arguments (done, fail, progress)
17529 var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
17530
17531 // deferred.progress(function() { bind to newDefer or newDefer.notify })
17532 // deferred.done(function() { bind to newDefer or newDefer.resolve })
17533 // deferred.fail(function() { bind to newDefer or newDefer.reject })
17534 deferred[ tuple[ 1 ] ]( function() {
17535 var returned = fn && fn.apply( this, arguments );
17536 if ( returned && jQuery.isFunction( returned.promise ) ) {
17537 returned.promise()
17538 .progress( newDefer.notify )
17539 .done( newDefer.resolve )
17540 .fail( newDefer.reject );
17541 } else {
17542 newDefer[ tuple[ 0 ] + "With" ](
17543 this,
17544 fn ? [ returned ] : arguments
17545 );
17546 }
17547 } );
17548 } );
17549 fns = null;
17550 } ).promise();
17551 },
17552 then: function( onFulfilled, onRejected, onProgress ) {
17553 var maxDepth = 0;
17554 function resolve( depth, deferred, handler, special ) {
17555 return function() {
17556 var that = this,
17557 args = arguments,
17558 mightThrow = function() {
17559 var returned, then;
17560
17561 // Support: Promises/A+ section 2.3.3.3.3
17562 // https://promisesaplus.com/#point-59
17563 // Ignore double-resolution attempts
17564 if ( depth < maxDepth ) {
17565 return;
17566 }
17567
17568 returned = handler.apply( that, args );
17569
17570 // Support: Promises/A+ section 2.3.1
17571 // https://promisesaplus.com/#point-48
17572 if ( returned === deferred.promise() ) {
17573 throw new TypeError( "Thenable self-resolution" );
17574 }
17575
17576 // Support: Promises/A+ sections 2.3.3.1, 3.5
17577 // https://promisesaplus.com/#point-54
17578 // https://promisesaplus.com/#point-75
17579 // Retrieve `then` only once
17580 then = returned &&
17581
17582 // Support: Promises/A+ section 2.3.4
17583 // https://promisesaplus.com/#point-64
17584 // Only check objects and functions for thenability
17585 ( typeof returned === "object" ||
17586 typeof returned === "function" ) &&
17587 returned.then;
17588
17589 // Handle a returned thenable
17590 if ( jQuery.isFunction( then ) ) {
17591
17592 // Special processors (notify) just wait for resolution
17593 if ( special ) {
17594 then.call(
17595 returned,
17596 resolve( maxDepth, deferred, Identity, special ),
17597 resolve( maxDepth, deferred, Thrower, special )
17598 );
17599
17600 // Normal processors (resolve) also hook into progress
17601 } else {
17602
17603 // ...and disregard older resolution values
17604 maxDepth++;
17605
17606 then.call(
17607 returned,
17608 resolve( maxDepth, deferred, Identity, special ),
17609 resolve( maxDepth, deferred, Thrower, special ),
17610 resolve( maxDepth, deferred, Identity,
17611 deferred.notifyWith )
17612 );
17613 }
17614
17615 // Handle all other returned values
17616 } else {
17617
17618 // Only substitute handlers pass on context
17619 // and multiple values (non-spec behavior)
17620 if ( handler !== Identity ) {
17621 that = undefined;
17622 args = [ returned ];
17623 }
17624
17625 // Process the value(s)
17626 // Default process is resolve
17627 ( special || deferred.resolveWith )( that, args );
17628 }
17629 },
17630
17631 // Only normal processors (resolve) catch and reject exceptions
17632 process = special ?
17633 mightThrow :
17634 function() {
17635 try {
17636 mightThrow();
17637 } catch ( e ) {
17638
17639 if ( jQuery.Deferred.exceptionHook ) {
17640 jQuery.Deferred.exceptionHook( e,
17641 process.stackTrace );
17642 }
17643
17644 // Support: Promises/A+ section 2.3.3.3.4.1
17645 // https://promisesaplus.com/#point-61
17646 // Ignore post-resolution exceptions
17647 if ( depth + 1 >= maxDepth ) {
17648
17649 // Only substitute handlers pass on context
17650 // and multiple values (non-spec behavior)
17651 if ( handler !== Thrower ) {
17652 that = undefined;
17653 args = [ e ];
17654 }
17655
17656 deferred.rejectWith( that, args );
17657 }
17658 }
17659 };
17660
17661 // Support: Promises/A+ section 2.3.3.3.1
17662 // https://promisesaplus.com/#point-57
17663 // Re-resolve promises immediately to dodge false rejection from
17664 // subsequent errors
17665 if ( depth ) {
17666 process();
17667 } else {
17668
17669 // Call an optional hook to record the stack, in case of exception
17670 // since it's otherwise lost when execution goes async
17671 if ( jQuery.Deferred.getStackHook ) {
17672 process.stackTrace = jQuery.Deferred.getStackHook();
17673 }
17674 window.setTimeout( process );
17675 }
17676 };
17677 }
17678
17679 return jQuery.Deferred( function( newDefer ) {
17680
17681 // progress_handlers.add( ... )
17682 tuples[ 0 ][ 3 ].add(
17683 resolve(
17684 0,
17685 newDefer,
17686 jQuery.isFunction( onProgress ) ?
17687 onProgress :
17688 Identity,
17689 newDefer.notifyWith
17690 )
17691 );
17692
17693 // fulfilled_handlers.add( ... )
17694 tuples[ 1 ][ 3 ].add(
17695 resolve(
17696 0,
17697 newDefer,
17698 jQuery.isFunction( onFulfilled ) ?
17699 onFulfilled :
17700 Identity
17701 )
17702 );
17703
17704 // rejected_handlers.add( ... )
17705 tuples[ 2 ][ 3 ].add(
17706 resolve(
17707 0,
17708 newDefer,
17709 jQuery.isFunction( onRejected ) ?
17710 onRejected :
17711 Thrower
17712 )
17713 );
17714 } ).promise();
17715 },
17716
17717 // Get a promise for this deferred
17718 // If obj is provided, the promise aspect is added to the object
17719 promise: function( obj ) {
17720 return obj != null ? jQuery.extend( obj, promise ) : promise;
17721 }
17722 },
17723 deferred = {};
17724
17725 // Add list-specific methods
17726 jQuery.each( tuples, function( i, tuple ) {
17727 var list = tuple[ 2 ],
17728 stateString = tuple[ 5 ];
17729
17730 // promise.progress = list.add
17731 // promise.done = list.add
17732 // promise.fail = list.add
17733 promise[ tuple[ 1 ] ] = list.add;
17734
17735 // Handle state
17736 if ( stateString ) {
17737 list.add(
17738 function() {
17739
17740 // state = "resolved" (i.e., fulfilled)
17741 // state = "rejected"
17742 state = stateString;
17743 },
17744
17745 // rejected_callbacks.disable
17746 // fulfilled_callbacks.disable
17747 tuples[ 3 - i ][ 2 ].disable,
17748
17749 // progress_callbacks.lock
17750 tuples[ 0 ][ 2 ].lock
17751 );
17752 }
17753
17754 // progress_handlers.fire
17755 // fulfilled_handlers.fire
17756 // rejected_handlers.fire
17757 list.add( tuple[ 3 ].fire );
17758
17759 // deferred.notify = function() { deferred.notifyWith(...) }
17760 // deferred.resolve = function() { deferred.resolveWith(...) }
17761 // deferred.reject = function() { deferred.rejectWith(...) }
17762 deferred[ tuple[ 0 ] ] = function() {
17763 deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
17764 return this;
17765 };
17766
17767 // deferred.notifyWith = list.fireWith
17768 // deferred.resolveWith = list.fireWith
17769 // deferred.rejectWith = list.fireWith
17770 deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
17771 } );
17772
17773 // Make the deferred a promise
17774 promise.promise( deferred );
17775
17776 // Call given func if any
17777 if ( func ) {
17778 func.call( deferred, deferred );
17779 }
17780
17781 // All done!
17782 return deferred;
17783 },
17784
17785 // Deferred helper
17786 when: function( singleValue ) {
17787 var
17788
17789 // count of uncompleted subordinates
17790 remaining = arguments.length,
17791
17792 // count of unprocessed arguments
17793 i = remaining,
17794
17795 // subordinate fulfillment data
17796 resolveContexts = Array( i ),
17797 resolveValues = slice.call( arguments ),
17798
17799 // the master Deferred
17800 master = jQuery.Deferred(),
17801
17802 // subordinate callback factory
17803 updateFunc = function( i ) {
17804 return function( value ) {
17805 resolveContexts[ i ] = this;
17806 resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
17807 if ( !( --remaining ) ) {
17808 master.resolveWith( resolveContexts, resolveValues );
17809 }
17810 };
17811 };
17812
17813 // Single- and empty arguments are adopted like Promise.resolve
17814 if ( remaining <= 1 ) {
17815 adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,
17816 !remaining );
17817
17818 // Use .then() to unwrap secondary thenables (cf. gh-3000)
17819 if ( master.state() === "pending" ||
17820 jQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
17821
17822 return master.then();
17823 }
17824 }
17825
17826 // Multiple arguments are aggregated like Promise.all array elements
17827 while ( i-- ) {
17828 adoptValue( resolveValues[ i ], updateFunc( i ), master.reject );
17829 }
17830
17831 return master.promise();
17832 }
17833 } );
17834
17835
17836 // These usually indicate a programmer mistake during development,
17837 // warn about them ASAP rather than swallowing them by default.
17838 var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
17839
17840 jQuery.Deferred.exceptionHook = function( error, stack ) {
17841
17842 // Support: IE 8 - 9 only
17843 // Console exists when dev tools are open, which can happen at any time
17844 if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
17845 window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
17846 }
17847 };
17848
17849
17850
17851
17852 jQuery.readyException = function( error ) {
17853 window.setTimeout( function() {
17854 throw error;
17855 } );
17856 };
17857
17858
17859
17860
17861 // The deferred used on DOM ready
17862 var readyList = jQuery.Deferred();
17863
17864 jQuery.fn.ready = function( fn ) {
17865
17866 readyList
17867 .then( fn )
17868
17869 // Wrap jQuery.readyException in a function so that the lookup
17870 // happens at the time of error handling instead of callback
17871 // registration.
17872 .catch( function( error ) {
17873 jQuery.readyException( error );
17874 } );
17875
17876 return this;
17877 };
17878
17879 jQuery.extend( {
17880
17881 // Is the DOM ready to be used? Set to true once it occurs.
17882 isReady: false,
17883
17884 // A counter to track how many items to wait for before
17885 // the ready event fires. See #6781
17886 readyWait: 1,
17887
17888 // Handle when the DOM is ready
17889 ready: function( wait ) {
17890
17891 // Abort if there are pending holds or we're already ready
17892 if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
17893 return;
17894 }
17895
17896 // Remember that the DOM is ready
17897 jQuery.isReady = true;
17898
17899 // If a normal DOM Ready event fired, decrement, and wait if need be
17900 if ( wait !== true && --jQuery.readyWait > 0 ) {
17901 return;
17902 }
17903
17904 // If there are functions bound, to execute
17905 readyList.resolveWith( document, [ jQuery ] );
17906 }
17907 } );
17908
17909 jQuery.ready.then = readyList.then;
17910
17911 // The ready event handler and self cleanup method
17912 function completed() {
17913 document.removeEventListener( "DOMContentLoaded", completed );
17914 window.removeEventListener( "load", completed );
17915 jQuery.ready();
17916 }
17917
17918 // Catch cases where $(document).ready() is called
17919 // after the browser event has already occurred.
17920 // Support: IE <=9 - 10 only
17921 // Older IE sometimes signals "interactive" too soon
17922 if ( document.readyState === "complete" ||
17923 ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
17924
17925 // Handle it asynchronously to allow scripts the opportunity to delay ready
17926 window.setTimeout( jQuery.ready );
17927
17928 } else {
17929
17930 // Use the handy event callback
17931 document.addEventListener( "DOMContentLoaded", completed );
17932
17933 // A fallback to window.onload, that will always work
17934 window.addEventListener( "load", completed );
17935 }
17936
17937
17938
17939
17940 // Multifunctional method to get and set values of a collection
17941 // The value/s can optionally be executed if it's a function
17942 var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
17943 var i = 0,
17944 len = elems.length,
17945 bulk = key == null;
17946
17947 // Sets many values
17948 if ( jQuery.type( key ) === "object" ) {
17949 chainable = true;
17950 for ( i in key ) {
17951 access( elems, fn, i, key[ i ], true, emptyGet, raw );
17952 }
17953
17954 // Sets one value
17955 } else if ( value !== undefined ) {
17956 chainable = true;
17957
17958 if ( !jQuery.isFunction( value ) ) {
17959 raw = true;
17960 }
17961
17962 if ( bulk ) {
17963
17964 // Bulk operations run against the entire set
17965 if ( raw ) {
17966 fn.call( elems, value );
17967 fn = null;
17968
17969 // ...except when executing function values
17970 } else {
17971 bulk = fn;
17972 fn = function( elem, key, value ) {
17973 return bulk.call( jQuery( elem ), value );
17974 };
17975 }
17976 }
17977
17978 if ( fn ) {
17979 for ( ; i < len; i++ ) {
17980 fn(
17981 elems[ i ], key, raw ?
17982 value :
17983 value.call( elems[ i ], i, fn( elems[ i ], key ) )
17984 );
17985 }
17986 }
17987 }
17988
17989 if ( chainable ) {
17990 return elems;
17991 }
17992
17993 // Gets
17994 if ( bulk ) {
17995 return fn.call( elems );
17996 }
17997
17998 return len ? fn( elems[ 0 ], key ) : emptyGet;
17999 };
18000 var acceptData = function( owner ) {
18001
18002 // Accepts only:
18003 // - Node
18004 // - Node.ELEMENT_NODE
18005 // - Node.DOCUMENT_NODE
18006 // - Object
18007 // - Any
18008 return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
18009 };
18010
18011
18012
18013
18014 function Data() {
18015 this.expando = jQuery.expando + Data.uid++;
18016 }
18017
18018 Data.uid = 1;
18019
18020 Data.prototype = {
18021
18022 cache: function( owner ) {
18023
18024 // Check if the owner object already has a cache
18025 var value = owner[ this.expando ];
18026
18027 // If not, create one
18028 if ( !value ) {
18029 value = {};
18030
18031 // We can accept data for non-element nodes in modern browsers,
18032 // but we should not, see #8335.
18033 // Always return an empty object.
18034 if ( acceptData( owner ) ) {
18035
18036 // If it is a node unlikely to be stringify-ed or looped over
18037 // use plain assignment
18038 if ( owner.nodeType ) {
18039 owner[ this.expando ] = value;
18040
18041 // Otherwise secure it in a non-enumerable property
18042 // configurable must be true to allow the property to be
18043 // deleted when data is removed
18044 } else {
18045 Object.defineProperty( owner, this.expando, {
18046 value: value,
18047 configurable: true
18048 } );
18049 }
18050 }
18051 }
18052
18053 return value;
18054 },
18055 set: function( owner, data, value ) {
18056 var prop,
18057 cache = this.cache( owner );
18058
18059 // Handle: [ owner, key, value ] args
18060 // Always use camelCase key (gh-2257)
18061 if ( typeof data === "string" ) {
18062 cache[ jQuery.camelCase( data ) ] = value;
18063
18064 // Handle: [ owner, { properties } ] args
18065 } else {
18066
18067 // Copy the properties one-by-one to the cache object
18068 for ( prop in data ) {
18069 cache[ jQuery.camelCase( prop ) ] = data[ prop ];
18070 }
18071 }
18072 return cache;
18073 },
18074 get: function( owner, key ) {
18075 return key === undefined ?
18076 this.cache( owner ) :
18077
18078 // Always use camelCase key (gh-2257)
18079 owner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ];
18080 },
18081 access: function( owner, key, value ) {
18082
18083 // In cases where either:
18084 //
18085 // 1. No key was specified
18086 // 2. A string key was specified, but no value provided
18087 //
18088 // Take the "read" path and allow the get method to determine
18089 // which value to return, respectively either:
18090 //
18091 // 1. The entire cache object
18092 // 2. The data stored at the key
18093 //
18094 if ( key === undefined ||
18095 ( ( key && typeof key === "string" ) && value === undefined ) ) {
18096
18097 return this.get( owner, key );
18098 }
18099
18100 // When the key is not a string, or both a key and value
18101 // are specified, set or extend (existing objects) with either:
18102 //
18103 // 1. An object of properties
18104 // 2. A key and value
18105 //
18106 this.set( owner, key, value );
18107
18108 // Since the "set" path can have two possible entry points
18109 // return the expected data based on which path was taken[*]
18110 return value !== undefined ? value : key;
18111 },
18112 remove: function( owner, key ) {
18113 var i,
18114 cache = owner[ this.expando ];
18115
18116 if ( cache === undefined ) {
18117 return;
18118 }
18119
18120 if ( key !== undefined ) {
18121
18122 // Support array or space separated string of keys
18123 if ( Array.isArray( key ) ) {
18124
18125 // If key is an array of keys...
18126 // We always set camelCase keys, so remove that.
18127 key = key.map( jQuery.camelCase );
18128 } else {
18129 key = jQuery.camelCase( key );
18130
18131 // If a key with the spaces exists, use it.
18132 // Otherwise, create an array by matching non-whitespace
18133 key = key in cache ?
18134 [ key ] :
18135 ( key.match( rnothtmlwhite ) || [] );
18136 }
18137
18138 i = key.length;
18139
18140 while ( i-- ) {
18141 delete cache[ key[ i ] ];
18142 }
18143 }
18144
18145 // Remove the expando if there's no more data
18146 if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
18147
18148 // Support: Chrome <=35 - 45
18149 // Webkit & Blink performance suffers when deleting properties
18150 // from DOM nodes, so set to undefined instead
18151 // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
18152 if ( owner.nodeType ) {
18153 owner[ this.expando ] = undefined;
18154 } else {
18155 delete owner[ this.expando ];
18156 }
18157 }
18158 },
18159 hasData: function( owner ) {
18160 var cache = owner[ this.expando ];
18161 return cache !== undefined && !jQuery.isEmptyObject( cache );
18162 }
18163 };
18164 var dataPriv = new Data();
18165
18166 var dataUser = new Data();
18167
18168
18169
18170 // Implementation Summary
18171 //
18172 // 1. Enforce API surface and semantic compatibility with 1.9.x branch
18173 // 2. Improve the module's maintainability by reducing the storage
18174 // paths to a single mechanism.
18175 // 3. Use the same single mechanism to support "private" and "user" data.
18176 // 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
18177 // 5. Avoid exposing implementation details on user objects (eg. expando properties)
18178 // 6. Provide a clear path for implementation upgrade to WeakMap in 2014
18179
18180 var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
18181 rmultiDash = /[A-Z]/g;
18182
18183 function getData( data ) {
18184 if ( data === "true" ) {
18185 return true;
18186 }
18187
18188 if ( data === "false" ) {
18189 return false;
18190 }
18191
18192 if ( data === "null" ) {
18193 return null;
18194 }
18195
18196 // Only convert to a number if it doesn't change the string
18197 if ( data === +data + "" ) {
18198 return +data;
18199 }
18200
18201 if ( rbrace.test( data ) ) {
18202 return JSON.parse( data );
18203 }
18204
18205 return data;
18206 }
18207
18208 function dataAttr( elem, key, data ) {
18209 var name;
18210
18211 // If nothing was found internally, try to fetch any
18212 // data from the HTML5 data-* attribute
18213 if ( data === undefined && elem.nodeType === 1 ) {
18214 name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
18215 data = elem.getAttribute( name );
18216
18217 if ( typeof data === "string" ) {
18218 try {
18219 data = getData( data );
18220 } catch ( e ) {}
18221
18222 // Make sure we set the data so it isn't changed later
18223 dataUser.set( elem, key, data );
18224 } else {
18225 data = undefined;
18226 }
18227 }
18228 return data;
18229 }
18230
18231 jQuery.extend( {
18232 hasData: function( elem ) {
18233 return dataUser.hasData( elem ) || dataPriv.hasData( elem );
18234 },
18235
18236 data: function( elem, name, data ) {
18237 return dataUser.access( elem, name, data );
18238 },
18239
18240 removeData: function( elem, name ) {
18241 dataUser.remove( elem, name );
18242 },
18243
18244 // TODO: Now that all calls to _data and _removeData have been replaced
18245 // with direct calls to dataPriv methods, these can be deprecated.
18246 _data: function( elem, name, data ) {
18247 return dataPriv.access( elem, name, data );
18248 },
18249
18250 _removeData: function( elem, name ) {
18251 dataPriv.remove( elem, name );
18252 }
18253 } );
18254
18255 jQuery.fn.extend( {
18256 data: function( key, value ) {
18257 var i, name, data,
18258 elem = this[ 0 ],
18259 attrs = elem && elem.attributes;
18260
18261 // Gets all values
18262 if ( key === undefined ) {
18263 if ( this.length ) {
18264 data = dataUser.get( elem );
18265
18266 if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
18267 i = attrs.length;
18268 while ( i-- ) {
18269
18270 // Support: IE 11 only
18271 // The attrs elements can be null (#14894)
18272 if ( attrs[ i ] ) {
18273 name = attrs[ i ].name;
18274 if ( name.indexOf( "data-" ) === 0 ) {
18275 name = jQuery.camelCase( name.slice( 5 ) );
18276 dataAttr( elem, name, data[ name ] );
18277 }
18278 }
18279 }
18280 dataPriv.set( elem, "hasDataAttrs", true );
18281 }
18282 }
18283
18284 return data;
18285 }
18286
18287 // Sets multiple values
18288 if ( typeof key === "object" ) {
18289 return this.each( function() {
18290 dataUser.set( this, key );
18291 } );
18292 }
18293
18294 return access( this, function( value ) {
18295 var data;
18296
18297 // The calling jQuery object (element matches) is not empty
18298 // (and therefore has an element appears at this[ 0 ]) and the
18299 // `value` parameter was not undefined. An empty jQuery object
18300 // will result in `undefined` for elem = this[ 0 ] which will
18301 // throw an exception if an attempt to read a data cache is made.
18302 if ( elem && value === undefined ) {
18303
18304 // Attempt to get data from the cache
18305 // The key will always be camelCased in Data
18306 data = dataUser.get( elem, key );
18307 if ( data !== undefined ) {
18308 return data;
18309 }
18310
18311 // Attempt to "discover" the data in
18312 // HTML5 custom data-* attrs
18313 data = dataAttr( elem, key );
18314 if ( data !== undefined ) {
18315 return data;
18316 }
18317
18318 // We tried really hard, but the data doesn't exist.
18319 return;
18320 }
18321
18322 // Set the data...
18323 this.each( function() {
18324
18325 // We always store the camelCased key
18326 dataUser.set( this, key, value );
18327 } );
18328 }, null, value, arguments.length > 1, null, true );
18329 },
18330
18331 removeData: function( key ) {
18332 return this.each( function() {
18333 dataUser.remove( this, key );
18334 } );
18335 }
18336 } );
18337
18338
18339 jQuery.extend( {
18340 queue: function( elem, type, data ) {
18341 var queue;
18342
18343 if ( elem ) {
18344 type = ( type || "fx" ) + "queue";
18345 queue = dataPriv.get( elem, type );
18346
18347 // Speed up dequeue by getting out quickly if this is just a lookup
18348 if ( data ) {
18349 if ( !queue || Array.isArray( data ) ) {
18350 queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
18351 } else {
18352 queue.push( data );
18353 }
18354 }
18355 return queue || [];
18356 }
18357 },
18358
18359 dequeue: function( elem, type ) {
18360 type = type || "fx";
18361
18362 var queue = jQuery.queue( elem, type ),
18363 startLength = queue.length,
18364 fn = queue.shift(),
18365 hooks = jQuery._queueHooks( elem, type ),
18366 next = function() {
18367 jQuery.dequeue( elem, type );
18368 };
18369
18370 // If the fx queue is dequeued, always remove the progress sentinel
18371 if ( fn === "inprogress" ) {
18372 fn = queue.shift();
18373 startLength--;
18374 }
18375
18376 if ( fn ) {
18377
18378 // Add a progress sentinel to prevent the fx queue from being
18379 // automatically dequeued
18380 if ( type === "fx" ) {
18381 queue.unshift( "inprogress" );
18382 }
18383
18384 // Clear up the last queue stop function
18385 delete hooks.stop;
18386 fn.call( elem, next, hooks );
18387 }
18388
18389 if ( !startLength && hooks ) {
18390 hooks.empty.fire();
18391 }
18392 },
18393
18394 // Not public - generate a queueHooks object, or return the current one
18395 _queueHooks: function( elem, type ) {
18396 var key = type + "queueHooks";
18397 return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
18398 empty: jQuery.Callbacks( "once memory" ).add( function() {
18399 dataPriv.remove( elem, [ type + "queue", key ] );
18400 } )
18401 } );
18402 }
18403 } );
18404
18405 jQuery.fn.extend( {
18406 queue: function( type, data ) {
18407 var setter = 2;
18408
18409 if ( typeof type !== "string" ) {
18410 data = type;
18411 type = "fx";
18412 setter--;
18413 }
18414
18415 if ( arguments.length < setter ) {
18416 return jQuery.queue( this[ 0 ], type );
18417 }
18418
18419 return data === undefined ?
18420 this :
18421 this.each( function() {
18422 var queue = jQuery.queue( this, type, data );
18423
18424 // Ensure a hooks for this queue
18425 jQuery._queueHooks( this, type );
18426
18427 if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
18428 jQuery.dequeue( this, type );
18429 }
18430 } );
18431 },
18432 dequeue: function( type ) {
18433 return this.each( function() {
18434 jQuery.dequeue( this, type );
18435 } );
18436 },
18437 clearQueue: function( type ) {
18438 return this.queue( type || "fx", [] );
18439 },
18440
18441 // Get a promise resolved when queues of a certain type
18442 // are emptied (fx is the type by default)
18443 promise: function( type, obj ) {
18444 var tmp,
18445 count = 1,
18446 defer = jQuery.Deferred(),
18447 elements = this,
18448 i = this.length,
18449 resolve = function() {
18450 if ( !( --count ) ) {
18451 defer.resolveWith( elements, [ elements ] );
18452 }
18453 };
18454
18455 if ( typeof type !== "string" ) {
18456 obj = type;
18457 type = undefined;
18458 }
18459 type = type || "fx";
18460
18461 while ( i-- ) {
18462 tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
18463 if ( tmp && tmp.empty ) {
18464 count++;
18465 tmp.empty.add( resolve );
18466 }
18467 }
18468 resolve();
18469 return defer.promise( obj );
18470 }
18471 } );
18472 var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
18473
18474 var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
18475
18476
18477 var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
18478
18479 var isHiddenWithinTree = function( elem, el ) {
18480
18481 // isHiddenWithinTree might be called from jQuery#filter function;
18482 // in that case, element will be second argument
18483 elem = el || elem;
18484
18485 // Inline style trumps all
18486 return elem.style.display === "none" ||
18487 elem.style.display === "" &&
18488
18489 // Otherwise, check computed style
18490 // Support: Firefox <=43 - 45
18491 // Disconnected elements can have computed display: none, so first confirm that elem is
18492 // in the document.
18493 jQuery.contains( elem.ownerDocument, elem ) &&
18494
18495 jQuery.css( elem, "display" ) === "none";
18496 };
18497
18498 var swap = function( elem, options, callback, args ) {
18499 var ret, name,
18500 old = {};
18501
18502 // Remember the old values, and insert the new ones
18503 for ( name in options ) {
18504 old[ name ] = elem.style[ name ];
18505 elem.style[ name ] = options[ name ];
18506 }
18507
18508 ret = callback.apply( elem, args || [] );
18509
18510 // Revert the old values
18511 for ( name in options ) {
18512 elem.style[ name ] = old[ name ];
18513 }
18514
18515 return ret;
18516 };
18517
18518
18519
18520
18521 function adjustCSS( elem, prop, valueParts, tween ) {
18522 var adjusted,
18523 scale = 1,
18524 maxIterations = 20,
18525 currentValue = tween ?
18526 function() {
18527 return tween.cur();
18528 } :
18529 function() {
18530 return jQuery.css( elem, prop, "" );
18531 },
18532 initial = currentValue(),
18533 unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
18534
18535 // Starting value computation is required for potential unit mismatches
18536 initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
18537 rcssNum.exec( jQuery.css( elem, prop ) );
18538
18539 if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
18540
18541 // Trust units reported by jQuery.css
18542 unit = unit || initialInUnit[ 3 ];
18543
18544 // Make sure we update the tween properties later on
18545 valueParts = valueParts || [];
18546
18547 // Iteratively approximate from a nonzero starting point
18548 initialInUnit = +initial || 1;
18549
18550 do {
18551
18552 // If previous iteration zeroed out, double until we get *something*.
18553 // Use string for doubling so we don't accidentally see scale as unchanged below
18554 scale = scale || ".5";
18555
18556 // Adjust and apply
18557 initialInUnit = initialInUnit / scale;
18558 jQuery.style( elem, prop, initialInUnit + unit );
18559
18560 // Update scale, tolerating zero or NaN from tween.cur()
18561 // Break the loop if scale is unchanged or perfect, or if we've just had enough.
18562 } while (
18563 scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations
18564 );
18565 }
18566
18567 if ( valueParts ) {
18568 initialInUnit = +initialInUnit || +initial || 0;
18569
18570 // Apply relative offset (+=/-=) if specified
18571 adjusted = valueParts[ 1 ] ?
18572 initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
18573 +valueParts[ 2 ];
18574 if ( tween ) {
18575 tween.unit = unit;
18576 tween.start = initialInUnit;
18577 tween.end = adjusted;
18578 }
18579 }
18580 return adjusted;
18581 }
18582
18583
18584 var defaultDisplayMap = {};
18585
18586 function getDefaultDisplay( elem ) {
18587 var temp,
18588 doc = elem.ownerDocument,
18589 nodeName = elem.nodeName,
18590 display = defaultDisplayMap[ nodeName ];
18591
18592 if ( display ) {
18593 return display;
18594 }
18595
18596 temp = doc.body.appendChild( doc.createElement( nodeName ) );
18597 display = jQuery.css( temp, "display" );
18598
18599 temp.parentNode.removeChild( temp );
18600
18601 if ( display === "none" ) {
18602 display = "block";
18603 }
18604 defaultDisplayMap[ nodeName ] = display;
18605
18606 return display;
18607 }
18608
18609 function showHide( elements, show ) {
18610 var display, elem,
18611 values = [],
18612 index = 0,
18613 length = elements.length;
18614
18615 // Determine new display value for elements that need to change
18616 for ( ; index < length; index++ ) {
18617 elem = elements[ index ];
18618 if ( !elem.style ) {
18619 continue;
18620 }
18621
18622 display = elem.style.display;
18623 if ( show ) {
18624
18625 // Since we force visibility upon cascade-hidden elements, an immediate (and slow)
18626 // check is required in this first loop unless we have a nonempty display value (either
18627 // inline or about-to-be-restored)
18628 if ( display === "none" ) {
18629 values[ index ] = dataPriv.get( elem, "display" ) || null;
18630 if ( !values[ index ] ) {
18631 elem.style.display = "";
18632 }
18633 }
18634 if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
18635 values[ index ] = getDefaultDisplay( elem );
18636 }
18637 } else {
18638 if ( display !== "none" ) {
18639 values[ index ] = "none";
18640
18641 // Remember what we're overwriting
18642 dataPriv.set( elem, "display", display );
18643 }
18644 }
18645 }
18646
18647 // Set the display of the elements in a second loop to avoid constant reflow
18648 for ( index = 0; index < length; index++ ) {
18649 if ( values[ index ] != null ) {
18650 elements[ index ].style.display = values[ index ];
18651 }
18652 }
18653
18654 return elements;
18655 }
18656
18657 jQuery.fn.extend( {
18658 show: function() {
18659 return showHide( this, true );
18660 },
18661 hide: function() {
18662 return showHide( this );
18663 },
18664 toggle: function( state ) {
18665 if ( typeof state === "boolean" ) {
18666 return state ? this.show() : this.hide();
18667 }
18668
18669 return this.each( function() {
18670 if ( isHiddenWithinTree( this ) ) {
18671 jQuery( this ).show();
18672 } else {
18673 jQuery( this ).hide();
18674 }
18675 } );
18676 }
18677 } );
18678 var rcheckableType = ( /^(?:checkbox|radio)$/i );
18679
18680 var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i );
18681
18682 var rscriptType = ( /^$|\/(?:java|ecma)script/i );
18683
18684
18685
18686 // We have to close these tags to support XHTML (#13200)
18687 var wrapMap = {
18688
18689 // Support: IE <=9 only
18690 option: [ 1, "<select multiple='multiple'>", "</select>" ],
18691
18692 // XHTML parsers do not magically insert elements in the
18693 // same way that tag soup parsers do. So we cannot shorten
18694 // this by omitting <tbody> or other required elements.
18695 thead: [ 1, "<table>", "</table>" ],
18696 col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
18697 tr: [ 2, "<table><tbody>", "</tbody></table>" ],
18698 td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
18699
18700 _default: [ 0, "", "" ]
18701 };
18702
18703 // Support: IE <=9 only
18704 wrapMap.optgroup = wrapMap.option;
18705
18706 wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
18707 wrapMap.th = wrapMap.td;
18708
18709
18710 function getAll( context, tag ) {
18711
18712 // Support: IE <=9 - 11 only
18713 // Use typeof to avoid zero-argument method invocation on host objects (#15151)
18714 var ret;
18715
18716 if ( typeof context.getElementsByTagName !== "undefined" ) {
18717 ret = context.getElementsByTagName( tag || "*" );
18718
18719 } else if ( typeof context.querySelectorAll !== "undefined" ) {
18720 ret = context.querySelectorAll( tag || "*" );
18721
18722 } else {
18723 ret = [];
18724 }
18725
18726 if ( tag === undefined || tag && nodeName( context, tag ) ) {
18727 return jQuery.merge( [ context ], ret );
18728 }
18729
18730 return ret;
18731 }
18732
18733
18734 // Mark scripts as having already been evaluated
18735 function setGlobalEval( elems, refElements ) {
18736 var i = 0,
18737 l = elems.length;
18738
18739 for ( ; i < l; i++ ) {
18740 dataPriv.set(
18741 elems[ i ],
18742 "globalEval",
18743 !refElements || dataPriv.get( refElements[ i ], "globalEval" )
18744 );
18745 }
18746 }
18747
18748
18749 var rhtml = /<|&#?\w+;/;
18750
18751 function buildFragment( elems, context, scripts, selection, ignored ) {
18752 var elem, tmp, tag, wrap, contains, j,
18753 fragment = context.createDocumentFragment(),
18754 nodes = [],
18755 i = 0,
18756 l = elems.length;
18757
18758 for ( ; i < l; i++ ) {
18759 elem = elems[ i ];
18760
18761 if ( elem || elem === 0 ) {
18762
18763 // Add nodes directly
18764 if ( jQuery.type( elem ) === "object" ) {
18765
18766 // Support: Android <=4.0 only, PhantomJS 1 only
18767 // push.apply(_, arraylike) throws on ancient WebKit
18768 jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
18769
18770 // Convert non-html into a text node
18771 } else if ( !rhtml.test( elem ) ) {
18772 nodes.push( context.createTextNode( elem ) );
18773
18774 // Convert html into DOM nodes
18775 } else {
18776 tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
18777
18778 // Deserialize a standard representation
18779 tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
18780 wrap = wrapMap[ tag ] || wrapMap._default;
18781 tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
18782
18783 // Descend through wrappers to the right content
18784 j = wrap[ 0 ];
18785 while ( j-- ) {
18786 tmp = tmp.lastChild;
18787 }
18788
18789 // Support: Android <=4.0 only, PhantomJS 1 only
18790 // push.apply(_, arraylike) throws on ancient WebKit
18791 jQuery.merge( nodes, tmp.childNodes );
18792
18793 // Remember the top-level container
18794 tmp = fragment.firstChild;
18795
18796 // Ensure the created nodes are orphaned (#12392)
18797 tmp.textContent = "";
18798 }
18799 }
18800 }
18801
18802 // Remove wrapper from fragment
18803 fragment.textContent = "";
18804
18805 i = 0;
18806 while ( ( elem = nodes[ i++ ] ) ) {
18807
18808 // Skip elements already in the context collection (trac-4087)
18809 if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
18810 if ( ignored ) {
18811 ignored.push( elem );
18812 }
18813 continue;
18814 }
18815
18816 contains = jQuery.contains( elem.ownerDocument, elem );
18817
18818 // Append to fragment
18819 tmp = getAll( fragment.appendChild( elem ), "script" );
18820
18821 // Preserve script evaluation history
18822 if ( contains ) {
18823 setGlobalEval( tmp );
18824 }
18825
18826 // Capture executables
18827 if ( scripts ) {
18828 j = 0;
18829 while ( ( elem = tmp[ j++ ] ) ) {
18830 if ( rscriptType.test( elem.type || "" ) ) {
18831 scripts.push( elem );
18832 }
18833 }
18834 }
18835 }
18836
18837 return fragment;
18838 }
18839
18840
18841 ( function() {
18842 var fragment = document.createDocumentFragment(),
18843 div = fragment.appendChild( document.createElement( "div" ) ),
18844 input = document.createElement( "input" );
18845
18846 // Support: Android 4.0 - 4.3 only
18847 // Check state lost if the name is set (#11217)
18848 // Support: Windows Web Apps (WWA)
18849 // `name` and `type` must use .setAttribute for WWA (#14901)
18850 input.setAttribute( "type", "radio" );
18851 input.setAttribute( "checked", "checked" );
18852 input.setAttribute( "name", "t" );
18853
18854 div.appendChild( input );
18855
18856 // Support: Android <=4.1 only
18857 // Older WebKit doesn't clone checked state correctly in fragments
18858 support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
18859
18860 // Support: IE <=11 only
18861 // Make sure textarea (and checkbox) defaultValue is properly cloned
18862 div.innerHTML = "<textarea>x</textarea>";
18863 support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
18864 } )();
18865 var documentElement = document.documentElement;
18866
18867
18868
18869 var
18870 rkeyEvent = /^key/,
18871 rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
18872 rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
18873
18874 function returnTrue() {
18875 return true;
18876 }
18877
18878 function returnFalse() {
18879 return false;
18880 }
18881
18882 // Support: IE <=9 only
18883 // See #13393 for more info
18884 function safeActiveElement() {
18885 try {
18886 return document.activeElement;
18887 } catch ( err ) { }
18888 }
18889
18890 function on( elem, types, selector, data, fn, one ) {
18891 var origFn, type;
18892
18893 // Types can be a map of types/handlers
18894 if ( typeof types === "object" ) {
18895
18896 // ( types-Object, selector, data )
18897 if ( typeof selector !== "string" ) {
18898
18899 // ( types-Object, data )
18900 data = data || selector;
18901 selector = undefined;
18902 }
18903 for ( type in types ) {
18904 on( elem, type, selector, data, types[ type ], one );
18905 }
18906 return elem;
18907 }
18908
18909 if ( data == null && fn == null ) {
18910
18911 // ( types, fn )
18912 fn = selector;
18913 data = selector = undefined;
18914 } else if ( fn == null ) {
18915 if ( typeof selector === "string" ) {
18916
18917 // ( types, selector, fn )
18918 fn = data;
18919 data = undefined;
18920 } else {
18921
18922 // ( types, data, fn )
18923 fn = data;
18924 data = selector;
18925 selector = undefined;
18926 }
18927 }
18928 if ( fn === false ) {
18929 fn = returnFalse;
18930 } else if ( !fn ) {
18931 return elem;
18932 }
18933
18934 if ( one === 1 ) {
18935 origFn = fn;
18936 fn = function( event ) {
18937
18938 // Can use an empty set, since event contains the info
18939 jQuery().off( event );
18940 return origFn.apply( this, arguments );
18941 };
18942
18943 // Use same guid so caller can remove using origFn
18944 fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
18945 }
18946 return elem.each( function() {
18947 jQuery.event.add( this, types, fn, data, selector );
18948 } );
18949 }
18950
18951 /*
18952 * Helper functions for managing events -- not part of the public interface.
18953 * Props to Dean Edwards' addEvent library for many of the ideas.
18954 */
18955 jQuery.event = {
18956
18957 global: {},
18958
18959 add: function( elem, types, handler, data, selector ) {
18960
18961 var handleObjIn, eventHandle, tmp,
18962 events, t, handleObj,
18963 special, handlers, type, namespaces, origType,
18964 elemData = dataPriv.get( elem );
18965
18966 // Don't attach events to noData or text/comment nodes (but allow plain objects)
18967 if ( !elemData ) {
18968 return;
18969 }
18970
18971 // Caller can pass in an object of custom data in lieu of the handler
18972 if ( handler.handler ) {
18973 handleObjIn = handler;
18974 handler = handleObjIn.handler;
18975 selector = handleObjIn.selector;
18976 }
18977
18978 // Ensure that invalid selectors throw exceptions at attach time
18979 // Evaluate against documentElement in case elem is a non-element node (e.g., document)
18980 if ( selector ) {
18981 jQuery.find.matchesSelector( documentElement, selector );
18982 }
18983
18984 // Make sure that the handler has a unique ID, used to find/remove it later
18985 if ( !handler.guid ) {
18986 handler.guid = jQuery.guid++;
18987 }
18988
18989 // Init the element's event structure and main handler, if this is the first
18990 if ( !( events = elemData.events ) ) {
18991 events = elemData.events = {};
18992 }
18993 if ( !( eventHandle = elemData.handle ) ) {
18994 eventHandle = elemData.handle = function( e ) {
18995
18996 // Discard the second event of a jQuery.event.trigger() and
18997 // when an event is called after a page has unloaded
18998 return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
18999 jQuery.event.dispatch.apply( elem, arguments ) : undefined;
19000 };
19001 }
19002
19003 // Handle multiple events separated by a space
19004 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
19005 t = types.length;
19006 while ( t-- ) {
19007 tmp = rtypenamespace.exec( types[ t ] ) || [];
19008 type = origType = tmp[ 1 ];
19009 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
19010
19011 // There *must* be a type, no attaching namespace-only handlers
19012 if ( !type ) {
19013 continue;
19014 }
19015
19016 // If event changes its type, use the special event handlers for the changed type
19017 special = jQuery.event.special[ type ] || {};
19018
19019 // If selector defined, determine special event api type, otherwise given type
19020 type = ( selector ? special.delegateType : special.bindType ) || type;
19021
19022 // Update special based on newly reset type
19023 special = jQuery.event.special[ type ] || {};
19024
19025 // handleObj is passed to all event handlers
19026 handleObj = jQuery.extend( {
19027 type: type,
19028 origType: origType,
19029 data: data,
19030 handler: handler,
19031 guid: handler.guid,
19032 selector: selector,
19033 needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
19034 namespace: namespaces.join( "." )
19035 }, handleObjIn );
19036
19037 // Init the event handler queue if we're the first
19038 if ( !( handlers = events[ type ] ) ) {
19039 handlers = events[ type ] = [];
19040 handlers.delegateCount = 0;
19041
19042 // Only use addEventListener if the special events handler returns false
19043 if ( !special.setup ||
19044 special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
19045
19046 if ( elem.addEventListener ) {
19047 elem.addEventListener( type, eventHandle );
19048 }
19049 }
19050 }
19051
19052 if ( special.add ) {
19053 special.add.call( elem, handleObj );
19054
19055 if ( !handleObj.handler.guid ) {
19056 handleObj.handler.guid = handler.guid;
19057 }
19058 }
19059
19060 // Add to the element's handler list, delegates in front
19061 if ( selector ) {
19062 handlers.splice( handlers.delegateCount++, 0, handleObj );
19063 } else {
19064 handlers.push( handleObj );
19065 }
19066
19067 // Keep track of which events have ever been used, for event optimization
19068 jQuery.event.global[ type ] = true;
19069 }
19070
19071 },
19072
19073 // Detach an event or set of events from an element
19074 remove: function( elem, types, handler, selector, mappedTypes ) {
19075
19076 var j, origCount, tmp,
19077 events, t, handleObj,
19078 special, handlers, type, namespaces, origType,
19079 elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
19080
19081 if ( !elemData || !( events = elemData.events ) ) {
19082 return;
19083 }
19084
19085 // Once for each type.namespace in types; type may be omitted
19086 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
19087 t = types.length;
19088 while ( t-- ) {
19089 tmp = rtypenamespace.exec( types[ t ] ) || [];
19090 type = origType = tmp[ 1 ];
19091 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
19092
19093 // Unbind all events (on this namespace, if provided) for the element
19094 if ( !type ) {
19095 for ( type in events ) {
19096 jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
19097 }
19098 continue;
19099 }
19100
19101 special = jQuery.event.special[ type ] || {};
19102 type = ( selector ? special.delegateType : special.bindType ) || type;
19103 handlers = events[ type ] || [];
19104 tmp = tmp[ 2 ] &&
19105 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
19106
19107 // Remove matching events
19108 origCount = j = handlers.length;
19109 while ( j-- ) {
19110 handleObj = handlers[ j ];
19111
19112 if ( ( mappedTypes || origType === handleObj.origType ) &&
19113 ( !handler || handler.guid === handleObj.guid ) &&
19114 ( !tmp || tmp.test( handleObj.namespace ) ) &&
19115 ( !selector || selector === handleObj.selector ||
19116 selector === "**" && handleObj.selector ) ) {
19117 handlers.splice( j, 1 );
19118
19119 if ( handleObj.selector ) {
19120 handlers.delegateCount--;
19121 }
19122 if ( special.remove ) {
19123 special.remove.call( elem, handleObj );
19124 }
19125 }
19126 }
19127
19128 // Remove generic event handler if we removed something and no more handlers exist
19129 // (avoids potential for endless recursion during removal of special event handlers)
19130 if ( origCount && !handlers.length ) {
19131 if ( !special.teardown ||
19132 special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
19133
19134 jQuery.removeEvent( elem, type, elemData.handle );
19135 }
19136
19137 delete events[ type ];
19138 }
19139 }
19140
19141 // Remove data and the expando if it's no longer used
19142 if ( jQuery.isEmptyObject( events ) ) {
19143 dataPriv.remove( elem, "handle events" );
19144 }
19145 },
19146
19147 dispatch: function( nativeEvent ) {
19148
19149 // Make a writable jQuery.Event from the native event object
19150 var event = jQuery.event.fix( nativeEvent );
19151
19152 var i, j, ret, matched, handleObj, handlerQueue,
19153 args = new Array( arguments.length ),
19154 handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [],
19155 special = jQuery.event.special[ event.type ] || {};
19156
19157 // Use the fix-ed jQuery.Event rather than the (read-only) native event
19158 args[ 0 ] = event;
19159
19160 for ( i = 1; i < arguments.length; i++ ) {
19161 args[ i ] = arguments[ i ];
19162 }
19163
19164 event.delegateTarget = this;
19165
19166 // Call the preDispatch hook for the mapped type, and let it bail if desired
19167 if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
19168 return;
19169 }
19170
19171 // Determine handlers
19172 handlerQueue = jQuery.event.handlers.call( this, event, handlers );
19173
19174 // Run delegates first; they may want to stop propagation beneath us
19175 i = 0;
19176 while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
19177 event.currentTarget = matched.elem;
19178
19179 j = 0;
19180 while ( ( handleObj = matched.handlers[ j++ ] ) &&
19181 !event.isImmediatePropagationStopped() ) {
19182
19183 // Triggered event must either 1) have no namespace, or 2) have namespace(s)
19184 // a subset or equal to those in the bound event (both can have no namespace).
19185 if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {
19186
19187 event.handleObj = handleObj;
19188 event.data = handleObj.data;
19189
19190 ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
19191 handleObj.handler ).apply( matched.elem, args );
19192
19193 if ( ret !== undefined ) {
19194 if ( ( event.result = ret ) === false ) {
19195 event.preventDefault();
19196 event.stopPropagation();
19197 }
19198 }
19199 }
19200 }
19201 }
19202
19203 // Call the postDispatch hook for the mapped type
19204 if ( special.postDispatch ) {
19205 special.postDispatch.call( this, event );
19206 }
19207
19208 return event.result;
19209 },
19210
19211 handlers: function( event, handlers ) {
19212 var i, handleObj, sel, matchedHandlers, matchedSelectors,
19213 handlerQueue = [],
19214 delegateCount = handlers.delegateCount,
19215 cur = event.target;
19216
19217 // Find delegate handlers
19218 if ( delegateCount &&
19219
19220 // Support: IE <=9
19221 // Black-hole SVG <use> instance trees (trac-13180)
19222 cur.nodeType &&
19223
19224 // Support: Firefox <=42
19225 // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
19226 // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
19227 // Support: IE 11 only
19228 // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
19229 !( event.type === "click" && event.button >= 1 ) ) {
19230
19231 for ( ; cur !== this; cur = cur.parentNode || this ) {
19232
19233 // Don't check non-elements (#13208)
19234 // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
19235 if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
19236 matchedHandlers = [];
19237 matchedSelectors = {};
19238 for ( i = 0; i < delegateCount; i++ ) {
19239 handleObj = handlers[ i ];
19240
19241 // Don't conflict with Object.prototype properties (#13203)
19242 sel = handleObj.selector + " ";
19243
19244 if ( matchedSelectors[ sel ] === undefined ) {
19245 matchedSelectors[ sel ] = handleObj.needsContext ?
19246 jQuery( sel, this ).index( cur ) > -1 :
19247 jQuery.find( sel, this, null, [ cur ] ).length;
19248 }
19249 if ( matchedSelectors[ sel ] ) {
19250 matchedHandlers.push( handleObj );
19251 }
19252 }
19253 if ( matchedHandlers.length ) {
19254 handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
19255 }
19256 }
19257 }
19258 }
19259
19260 // Add the remaining (directly-bound) handlers
19261 cur = this;
19262 if ( delegateCount < handlers.length ) {
19263 handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
19264 }
19265
19266 return handlerQueue;
19267 },
19268
19269 addProp: function( name, hook ) {
19270 Object.defineProperty( jQuery.Event.prototype, name, {
19271 enumerable: true,
19272 configurable: true,
19273
19274 get: jQuery.isFunction( hook ) ?
19275 function() {
19276 if ( this.originalEvent ) {
19277 return hook( this.originalEvent );
19278 }
19279 } :
19280 function() {
19281 if ( this.originalEvent ) {
19282 return this.originalEvent[ name ];
19283 }
19284 },
19285
19286 set: function( value ) {
19287 Object.defineProperty( this, name, {
19288 enumerable: true,
19289 configurable: true,
19290 writable: true,
19291 value: value
19292 } );
19293 }
19294 } );
19295 },
19296
19297 fix: function( originalEvent ) {
19298 return originalEvent[ jQuery.expando ] ?
19299 originalEvent :
19300 new jQuery.Event( originalEvent );
19301 },
19302
19303 special: {
19304 load: {
19305
19306 // Prevent triggered image.load events from bubbling to window.load
19307 noBubble: true
19308 },
19309 focus: {
19310
19311 // Fire native event if possible so blur/focus sequence is correct
19312 trigger: function() {
19313 if ( this !== safeActiveElement() && this.focus ) {
19314 this.focus();
19315 return false;
19316 }
19317 },
19318 delegateType: "focusin"
19319 },
19320 blur: {
19321 trigger: function() {
19322 if ( this === safeActiveElement() && this.blur ) {
19323 this.blur();
19324 return false;
19325 }
19326 },
19327 delegateType: "focusout"
19328 },
19329 click: {
19330
19331 // For checkbox, fire native event so checked state will be right
19332 trigger: function() {
19333 if ( this.type === "checkbox" && this.click && nodeName( this, "input" ) ) {
19334 this.click();
19335 return false;
19336 }
19337 },
19338
19339 // For cross-browser consistency, don't fire native .click() on links
19340 _default: function( event ) {
19341 return nodeName( event.target, "a" );
19342 }
19343 },
19344
19345 beforeunload: {
19346 postDispatch: function( event ) {
19347
19348 // Support: Firefox 20+
19349 // Firefox doesn't alert if the returnValue field is not set.
19350 if ( event.result !== undefined && event.originalEvent ) {
19351 event.originalEvent.returnValue = event.result;
19352 }
19353 }
19354 }
19355 }
19356 };
19357
19358 jQuery.removeEvent = function( elem, type, handle ) {
19359
19360 // This "if" is needed for plain objects
19361 if ( elem.removeEventListener ) {
19362 elem.removeEventListener( type, handle );
19363 }
19364 };
19365
19366 jQuery.Event = function( src, props ) {
19367
19368 // Allow instantiation without the 'new' keyword
19369 if ( !( this instanceof jQuery.Event ) ) {
19370 return new jQuery.Event( src, props );
19371 }
19372
19373 // Event object
19374 if ( src && src.type ) {
19375 this.originalEvent = src;
19376 this.type = src.type;
19377
19378 // Events bubbling up the document may have been marked as prevented
19379 // by a handler lower down the tree; reflect the correct value.
19380 this.isDefaultPrevented = src.defaultPrevented ||
19381 src.defaultPrevented === undefined &&
19382
19383 // Support: Android <=2.3 only
19384 src.returnValue === false ?
19385 returnTrue :
19386 returnFalse;
19387
19388 // Create target properties
19389 // Support: Safari <=6 - 7 only
19390 // Target should not be a text node (#504, #13143)
19391 this.target = ( src.target && src.target.nodeType === 3 ) ?
19392 src.target.parentNode :
19393 src.target;
19394
19395 this.currentTarget = src.currentTarget;
19396 this.relatedTarget = src.relatedTarget;
19397
19398 // Event type
19399 } else {
19400 this.type = src;
19401 }
19402
19403 // Put explicitly provided properties onto the event object
19404 if ( props ) {
19405 jQuery.extend( this, props );
19406 }
19407
19408 // Create a timestamp if incoming event doesn't have one
19409 this.timeStamp = src && src.timeStamp || jQuery.now();
19410
19411 // Mark it as fixed
19412 this[ jQuery.expando ] = true;
19413 };
19414
19415 // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
19416 // https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
19417 jQuery.Event.prototype = {
19418 constructor: jQuery.Event,
19419 isDefaultPrevented: returnFalse,
19420 isPropagationStopped: returnFalse,
19421 isImmediatePropagationStopped: returnFalse,
19422 isSimulated: false,
19423
19424 preventDefault: function() {
19425 var e = this.originalEvent;
19426
19427 this.isDefaultPrevented = returnTrue;
19428
19429 if ( e && !this.isSimulated ) {
19430 e.preventDefault();
19431 }
19432 },
19433 stopPropagation: function() {
19434 var e = this.originalEvent;
19435
19436 this.isPropagationStopped = returnTrue;
19437
19438 if ( e && !this.isSimulated ) {
19439 e.stopPropagation();
19440 }
19441 },
19442 stopImmediatePropagation: function() {
19443 var e = this.originalEvent;
19444
19445 this.isImmediatePropagationStopped = returnTrue;
19446
19447 if ( e && !this.isSimulated ) {
19448 e.stopImmediatePropagation();
19449 }
19450
19451 this.stopPropagation();
19452 }
19453 };
19454
19455 // Includes all common event props including KeyEvent and MouseEvent specific props
19456 jQuery.each( {
19457 altKey: true,
19458 bubbles: true,
19459 cancelable: true,
19460 changedTouches: true,
19461 ctrlKey: true,
19462 detail: true,
19463 eventPhase: true,
19464 metaKey: true,
19465 pageX: true,
19466 pageY: true,
19467 shiftKey: true,
19468 view: true,
19469 "char": true,
19470 charCode: true,
19471 key: true,
19472 keyCode: true,
19473 button: true,
19474 buttons: true,
19475 clientX: true,
19476 clientY: true,
19477 offsetX: true,
19478 offsetY: true,
19479 pointerId: true,
19480 pointerType: true,
19481 screenX: true,
19482 screenY: true,
19483 targetTouches: true,
19484 toElement: true,
19485 touches: true,
19486
19487 which: function( event ) {
19488 var button = event.button;
19489
19490 // Add which for key events
19491 if ( event.which == null && rkeyEvent.test( event.type ) ) {
19492 return event.charCode != null ? event.charCode : event.keyCode;
19493 }
19494
19495 // Add which for click: 1 === left; 2 === middle; 3 === right
19496 if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
19497 if ( button & 1 ) {
19498 return 1;
19499 }
19500
19501 if ( button & 2 ) {
19502 return 3;
19503 }
19504
19505 if ( button & 4 ) {
19506 return 2;
19507 }
19508
19509 return 0;
19510 }
19511
19512 return event.which;
19513 }
19514 }, jQuery.event.addProp );
19515
19516 // Create mouseenter/leave events using mouseover/out and event-time checks
19517 // so that event delegation works in jQuery.
19518 // Do the same for pointerenter/pointerleave and pointerover/pointerout
19519 //
19520 // Support: Safari 7 only
19521 // Safari sends mouseenter too often; see:
19522 // https://bugs.chromium.org/p/chromium/issues/detail?id=470258
19523 // for the description of the bug (it existed in older Chrome versions as well).
19524 jQuery.each( {
19525 mouseenter: "mouseover",
19526 mouseleave: "mouseout",
19527 pointerenter: "pointerover",
19528 pointerleave: "pointerout"
19529 }, function( orig, fix ) {
19530 jQuery.event.special[ orig ] = {
19531 delegateType: fix,
19532 bindType: fix,
19533
19534 handle: function( event ) {
19535 var ret,
19536 target = this,
19537 related = event.relatedTarget,
19538 handleObj = event.handleObj;
19539
19540 // For mouseenter/leave call the handler if related is outside the target.
19541 // NB: No relatedTarget if the mouse left/entered the browser window
19542 if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
19543 event.type = handleObj.origType;
19544 ret = handleObj.handler.apply( this, arguments );
19545 event.type = fix;
19546 }
19547 return ret;
19548 }
19549 };
19550 } );
19551
19552 jQuery.fn.extend( {
19553
19554 on: function( types, selector, data, fn ) {
19555 return on( this, types, selector, data, fn );
19556 },
19557 one: function( types, selector, data, fn ) {
19558 return on( this, types, selector, data, fn, 1 );
19559 },
19560 off: function( types, selector, fn ) {
19561 var handleObj, type;
19562 if ( types && types.preventDefault && types.handleObj ) {
19563
19564 // ( event ) dispatched jQuery.Event
19565 handleObj = types.handleObj;
19566 jQuery( types.delegateTarget ).off(
19567 handleObj.namespace ?
19568 handleObj.origType + "." + handleObj.namespace :
19569 handleObj.origType,
19570 handleObj.selector,
19571 handleObj.handler
19572 );
19573 return this;
19574 }
19575 if ( typeof types === "object" ) {
19576
19577 // ( types-object [, selector] )
19578 for ( type in types ) {
19579 this.off( type, selector, types[ type ] );
19580 }
19581 return this;
19582 }
19583 if ( selector === false || typeof selector === "function" ) {
19584
19585 // ( types [, fn] )
19586 fn = selector;
19587 selector = undefined;
19588 }
19589 if ( fn === false ) {
19590 fn = returnFalse;
19591 }
19592 return this.each( function() {
19593 jQuery.event.remove( this, types, fn, selector );
19594 } );
19595 }
19596 } );
19597
19598
19599 var
19600
19601 /* eslint-disable max-len */
19602
19603 // See https://github.com/eslint/eslint/issues/3229
19604 rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
19605
19606 /* eslint-enable */
19607
19608 // Support: IE <=10 - 11, Edge 12 - 13
19609 // In IE/Edge using regex groups here causes severe slowdowns.
19610 // See https://connect.microsoft.com/IE/feedback/details/1736512/
19611 rnoInnerhtml = /<script|<style|<link/i,
19612
19613 // checked="checked" or checked
19614 rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
19615 rscriptTypeMasked = /^true\/(.*)/,
19616 rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
19617
19618 // Prefer a tbody over its parent table for containing new rows
19619 function manipulationTarget( elem, content ) {
19620 if ( nodeName( elem, "table" ) &&
19621 nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
19622
19623 return jQuery( ">tbody", elem )[ 0 ] || elem;
19624 }
19625
19626 return elem;
19627 }
19628
19629 // Replace/restore the type attribute of script elements for safe DOM manipulation
19630 function disableScript( elem ) {
19631 elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
19632 return elem;
19633 }
19634 function restoreScript( elem ) {
19635 var match = rscriptTypeMasked.exec( elem.type );
19636
19637 if ( match ) {
19638 elem.type = match[ 1 ];
19639 } else {
19640 elem.removeAttribute( "type" );
19641 }
19642
19643 return elem;
19644 }
19645
19646 function cloneCopyEvent( src, dest ) {
19647 var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
19648
19649 if ( dest.nodeType !== 1 ) {
19650 return;
19651 }
19652
19653 // 1. Copy private data: events, handlers, etc.
19654 if ( dataPriv.hasData( src ) ) {
19655 pdataOld = dataPriv.access( src );
19656 pdataCur = dataPriv.set( dest, pdataOld );
19657 events = pdataOld.events;
19658
19659 if ( events ) {
19660 delete pdataCur.handle;
19661 pdataCur.events = {};
19662
19663 for ( type in events ) {
19664 for ( i = 0, l = events[ type ].length; i < l; i++ ) {
19665 jQuery.event.add( dest, type, events[ type ][ i ] );
19666 }
19667 }
19668 }
19669 }
19670
19671 // 2. Copy user data
19672 if ( dataUser.hasData( src ) ) {
19673 udataOld = dataUser.access( src );
19674 udataCur = jQuery.extend( {}, udataOld );
19675
19676 dataUser.set( dest, udataCur );
19677 }
19678 }
19679
19680 // Fix IE bugs, see support tests
19681 function fixInput( src, dest ) {
19682 var nodeName = dest.nodeName.toLowerCase();
19683
19684 // Fails to persist the checked state of a cloned checkbox or radio button.
19685 if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
19686 dest.checked = src.checked;
19687
19688 // Fails to return the selected option to the default selected state when cloning options
19689 } else if ( nodeName === "input" || nodeName === "textarea" ) {
19690 dest.defaultValue = src.defaultValue;
19691 }
19692 }
19693
19694 function domManip( collection, args, callback, ignored ) {
19695
19696 // Flatten any nested arrays
19697 args = concat.apply( [], args );
19698
19699 var fragment, first, scripts, hasScripts, node, doc,
19700 i = 0,
19701 l = collection.length,
19702 iNoClone = l - 1,
19703 value = args[ 0 ],
19704 isFunction = jQuery.isFunction( value );
19705
19706 // We can't cloneNode fragments that contain checked, in WebKit
19707 if ( isFunction ||
19708 ( l > 1 && typeof value === "string" &&
19709 !support.checkClone && rchecked.test( value ) ) ) {
19710 return collection.each( function( index ) {
19711 var self = collection.eq( index );
19712 if ( isFunction ) {
19713 args[ 0 ] = value.call( this, index, self.html() );
19714 }
19715 domManip( self, args, callback, ignored );
19716 } );
19717 }
19718
19719 if ( l ) {
19720 fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
19721 first = fragment.firstChild;
19722
19723 if ( fragment.childNodes.length === 1 ) {
19724 fragment = first;
19725 }
19726
19727 // Require either new content or an interest in ignored elements to invoke the callback
19728 if ( first || ignored ) {
19729 scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
19730 hasScripts = scripts.length;
19731
19732 // Use the original fragment for the last item
19733 // instead of the first because it can end up
19734 // being emptied incorrectly in certain situations (#8070).
19735 for ( ; i < l; i++ ) {
19736 node = fragment;
19737
19738 if ( i !== iNoClone ) {
19739 node = jQuery.clone( node, true, true );
19740
19741 // Keep references to cloned scripts for later restoration
19742 if ( hasScripts ) {
19743
19744 // Support: Android <=4.0 only, PhantomJS 1 only
19745 // push.apply(_, arraylike) throws on ancient WebKit
19746 jQuery.merge( scripts, getAll( node, "script" ) );
19747 }
19748 }
19749
19750 callback.call( collection[ i ], node, i );
19751 }
19752
19753 if ( hasScripts ) {
19754 doc = scripts[ scripts.length - 1 ].ownerDocument;
19755
19756 // Reenable scripts
19757 jQuery.map( scripts, restoreScript );
19758
19759 // Evaluate executable scripts on first document insertion
19760 for ( i = 0; i < hasScripts; i++ ) {
19761 node = scripts[ i ];
19762 if ( rscriptType.test( node.type || "" ) &&
19763 !dataPriv.access( node, "globalEval" ) &&
19764 jQuery.contains( doc, node ) ) {
19765
19766 if ( node.src ) {
19767
19768 // Optional AJAX dependency, but won't run scripts if not present
19769 if ( jQuery._evalUrl ) {
19770 jQuery._evalUrl( node.src );
19771 }
19772 } else {
19773 DOMEval( node.textContent.replace( rcleanScript, "" ), doc );
19774 }
19775 }
19776 }
19777 }
19778 }
19779 }
19780
19781 return collection;
19782 }
19783
19784 function remove( elem, selector, keepData ) {
19785 var node,
19786 nodes = selector ? jQuery.filter( selector, elem ) : elem,
19787 i = 0;
19788
19789 for ( ; ( node = nodes[ i ] ) != null; i++ ) {
19790 if ( !keepData && node.nodeType === 1 ) {
19791 jQuery.cleanData( getAll( node ) );
19792 }
19793
19794 if ( node.parentNode ) {
19795 if ( keepData && jQuery.contains( node.ownerDocument, node ) ) {
19796 setGlobalEval( getAll( node, "script" ) );
19797 }
19798 node.parentNode.removeChild( node );
19799 }
19800 }
19801
19802 return elem;
19803 }
19804
19805 jQuery.extend( {
19806 htmlPrefilter: function( html ) {
19807 return html.replace( rxhtmlTag, "<$1></$2>" );
19808 },
19809
19810 clone: function( elem, dataAndEvents, deepDataAndEvents ) {
19811 var i, l, srcElements, destElements,
19812 clone = elem.cloneNode( true ),
19813 inPage = jQuery.contains( elem.ownerDocument, elem );
19814
19815 // Fix IE cloning issues
19816 if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
19817 !jQuery.isXMLDoc( elem ) ) {
19818
19819 // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
19820 destElements = getAll( clone );
19821 srcElements = getAll( elem );
19822
19823 for ( i = 0, l = srcElements.length; i < l; i++ ) {
19824 fixInput( srcElements[ i ], destElements[ i ] );
19825 }
19826 }
19827
19828 // Copy the events from the original to the clone
19829 if ( dataAndEvents ) {
19830 if ( deepDataAndEvents ) {
19831 srcElements = srcElements || getAll( elem );
19832 destElements = destElements || getAll( clone );
19833
19834 for ( i = 0, l = srcElements.length; i < l; i++ ) {
19835 cloneCopyEvent( srcElements[ i ], destElements[ i ] );
19836 }
19837 } else {
19838 cloneCopyEvent( elem, clone );
19839 }
19840 }
19841
19842 // Preserve script evaluation history
19843 destElements = getAll( clone, "script" );
19844 if ( destElements.length > 0 ) {
19845 setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
19846 }
19847
19848 // Return the cloned set
19849 return clone;
19850 },
19851
19852 cleanData: function( elems ) {
19853 var data, elem, type,
19854 special = jQuery.event.special,
19855 i = 0;
19856
19857 for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
19858 if ( acceptData( elem ) ) {
19859 if ( ( data = elem[ dataPriv.expando ] ) ) {
19860 if ( data.events ) {
19861 for ( type in data.events ) {
19862 if ( special[ type ] ) {
19863 jQuery.event.remove( elem, type );
19864
19865 // This is a shortcut to avoid jQuery.event.remove's overhead
19866 } else {
19867 jQuery.removeEvent( elem, type, data.handle );
19868 }
19869 }
19870 }
19871
19872 // Support: Chrome <=35 - 45+
19873 // Assign undefined instead of using delete, see Data#remove
19874 elem[ dataPriv.expando ] = undefined;
19875 }
19876 if ( elem[ dataUser.expando ] ) {
19877
19878 // Support: Chrome <=35 - 45+
19879 // Assign undefined instead of using delete, see Data#remove
19880 elem[ dataUser.expando ] = undefined;
19881 }
19882 }
19883 }
19884 }
19885 } );
19886
19887 jQuery.fn.extend( {
19888 detach: function( selector ) {
19889 return remove( this, selector, true );
19890 },
19891
19892 remove: function( selector ) {
19893 return remove( this, selector );
19894 },
19895
19896 text: function( value ) {
19897 return access( this, function( value ) {
19898 return value === undefined ?
19899 jQuery.text( this ) :
19900 this.empty().each( function() {
19901 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
19902 this.textContent = value;
19903 }
19904 } );
19905 }, null, value, arguments.length );
19906 },
19907
19908 append: function() {
19909 return domManip( this, arguments, function( elem ) {
19910 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
19911 var target = manipulationTarget( this, elem );
19912 target.appendChild( elem );
19913 }
19914 } );
19915 },
19916
19917 prepend: function() {
19918 return domManip( this, arguments, function( elem ) {
19919 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
19920 var target = manipulationTarget( this, elem );
19921 target.insertBefore( elem, target.firstChild );
19922 }
19923 } );
19924 },
19925
19926 before: function() {
19927 return domManip( this, arguments, function( elem ) {
19928 if ( this.parentNode ) {
19929 this.parentNode.insertBefore( elem, this );
19930 }
19931 } );
19932 },
19933
19934 after: function() {
19935 return domManip( this, arguments, function( elem ) {
19936 if ( this.parentNode ) {
19937 this.parentNode.insertBefore( elem, this.nextSibling );
19938 }
19939 } );
19940 },
19941
19942 empty: function() {
19943 var elem,
19944 i = 0;
19945
19946 for ( ; ( elem = this[ i ] ) != null; i++ ) {
19947 if ( elem.nodeType === 1 ) {
19948
19949 // Prevent memory leaks
19950 jQuery.cleanData( getAll( elem, false ) );
19951
19952 // Remove any remaining nodes
19953 elem.textContent = "";
19954 }
19955 }
19956
19957 return this;
19958 },
19959
19960 clone: function( dataAndEvents, deepDataAndEvents ) {
19961 dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
19962 deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
19963
19964 return this.map( function() {
19965 return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
19966 } );
19967 },
19968
19969 html: function( value ) {
19970 return access( this, function( value ) {
19971 var elem = this[ 0 ] || {},
19972 i = 0,
19973 l = this.length;
19974
19975 if ( value === undefined && elem.nodeType === 1 ) {
19976 return elem.innerHTML;
19977 }
19978
19979 // See if we can take a shortcut and just use innerHTML
19980 if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
19981 !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
19982
19983 value = jQuery.htmlPrefilter( value );
19984
19985 try {
19986 for ( ; i < l; i++ ) {
19987 elem = this[ i ] || {};
19988
19989 // Remove element nodes and prevent memory leaks
19990 if ( elem.nodeType === 1 ) {
19991 jQuery.cleanData( getAll( elem, false ) );
19992 elem.innerHTML = value;
19993 }
19994 }
19995
19996 elem = 0;
19997
19998 // If using innerHTML throws an exception, use the fallback method
19999 } catch ( e ) {}
20000 }
20001
20002 if ( elem ) {
20003 this.empty().append( value );
20004 }
20005 }, null, value, arguments.length );
20006 },
20007
20008 replaceWith: function() {
20009 var ignored = [];
20010
20011 // Make the changes, replacing each non-ignored context element with the new content
20012 return domManip( this, arguments, function( elem ) {
20013 var parent = this.parentNode;
20014
20015 if ( jQuery.inArray( this, ignored ) < 0 ) {
20016 jQuery.cleanData( getAll( this ) );
20017 if ( parent ) {
20018 parent.replaceChild( elem, this );
20019 }
20020 }
20021
20022 // Force callback invocation
20023 }, ignored );
20024 }
20025 } );
20026
20027 jQuery.each( {
20028 appendTo: "append",
20029 prependTo: "prepend",
20030 insertBefore: "before",
20031 insertAfter: "after",
20032 replaceAll: "replaceWith"
20033 }, function( name, original ) {
20034 jQuery.fn[ name ] = function( selector ) {
20035 var elems,
20036 ret = [],
20037 insert = jQuery( selector ),
20038 last = insert.length - 1,
20039 i = 0;
20040
20041 for ( ; i <= last; i++ ) {
20042 elems = i === last ? this : this.clone( true );
20043 jQuery( insert[ i ] )[ original ]( elems );
20044
20045 // Support: Android <=4.0 only, PhantomJS 1 only
20046 // .get() because push.apply(_, arraylike) throws on ancient WebKit
20047 push.apply( ret, elems.get() );
20048 }
20049
20050 return this.pushStack( ret );
20051 };
20052 } );
20053 var rmargin = ( /^margin/ );
20054
20055 var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
20056
20057 var getStyles = function( elem ) {
20058
20059 // Support: IE <=11 only, Firefox <=30 (#15098, #14150)
20060 // IE throws on elements created in popups
20061 // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
20062 var view = elem.ownerDocument.defaultView;
20063
20064 if ( !view || !view.opener ) {
20065 view = window;
20066 }
20067
20068 return view.getComputedStyle( elem );
20069 };
20070
20071
20072
20073 ( function() {
20074
20075 // Executing both pixelPosition & boxSizingReliable tests require only one layout
20076 // so they're executed at the same time to save the second computation.
20077 function computeStyleTests() {
20078
20079 // This is a singleton, we need to execute it only once
20080 if ( !div ) {
20081 return;
20082 }
20083
20084 div.style.cssText =
20085 "box-sizing:border-box;" +
20086 "position:relative;display:block;" +
20087 "margin:auto;border:1px;padding:1px;" +
20088 "top:1%;width:50%";
20089 div.innerHTML = "";
20090 documentElement.appendChild( container );
20091
20092 var divStyle = window.getComputedStyle( div );
20093 pixelPositionVal = divStyle.top !== "1%";
20094
20095 // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
20096 reliableMarginLeftVal = divStyle.marginLeft === "2px";
20097 boxSizingReliableVal = divStyle.width === "4px";
20098
20099 // Support: Android 4.0 - 4.3 only
20100 // Some styles come back with percentage values, even though they shouldn't
20101 div.style.marginRight = "50%";
20102 pixelMarginRightVal = divStyle.marginRight === "4px";
20103
20104 documentElement.removeChild( container );
20105
20106 // Nullify the div so it wouldn't be stored in the memory and
20107 // it will also be a sign that checks already performed
20108 div = null;
20109 }
20110
20111 var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,
20112 container = document.createElement( "div" ),
20113 div = document.createElement( "div" );
20114
20115 // Finish early in limited (non-browser) environments
20116 if ( !div.style ) {
20117 return;
20118 }
20119
20120 // Support: IE <=9 - 11 only
20121 // Style of cloned element affects source element cloned (#8908)
20122 div.style.backgroundClip = "content-box";
20123 div.cloneNode( true ).style.backgroundClip = "";
20124 support.clearCloneStyle = div.style.backgroundClip === "content-box";
20125
20126 container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" +
20127 "padding:0;margin-top:1px;position:absolute";
20128 container.appendChild( div );
20129
20130 jQuery.extend( support, {
20131 pixelPosition: function() {
20132 computeStyleTests();
20133 return pixelPositionVal;
20134 },
20135 boxSizingReliable: function() {
20136 computeStyleTests();
20137 return boxSizingReliableVal;
20138 },
20139 pixelMarginRight: function() {
20140 computeStyleTests();
20141 return pixelMarginRightVal;
20142 },
20143 reliableMarginLeft: function() {
20144 computeStyleTests();
20145 return reliableMarginLeftVal;
20146 }
20147 } );
20148 } )();
20149
20150
20151 function curCSS( elem, name, computed ) {
20152 var width, minWidth, maxWidth, ret,
20153
20154 // Support: Firefox 51+
20155 // Retrieving style before computed somehow
20156 // fixes an issue with getting wrong values
20157 // on detached elements
20158 style = elem.style;
20159
20160 computed = computed || getStyles( elem );
20161
20162 // getPropertyValue is needed for:
20163 // .css('filter') (IE 9 only, #12537)
20164 // .css('--customProperty) (#3144)
20165 if ( computed ) {
20166 ret = computed.getPropertyValue( name ) || computed[ name ];
20167
20168 if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
20169 ret = jQuery.style( elem, name );
20170 }
20171
20172 // A tribute to the "awesome hack by Dean Edwards"
20173 // Android Browser returns percentage for some values,
20174 // but width seems to be reliably pixels.
20175 // This is against the CSSOM draft spec:
20176 // https://drafts.csswg.org/cssom/#resolved-values
20177 if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {
20178
20179 // Remember the original values
20180 width = style.width;
20181 minWidth = style.minWidth;
20182 maxWidth = style.maxWidth;
20183
20184 // Put in the new values to get a computed value out
20185 style.minWidth = style.maxWidth = style.width = ret;
20186 ret = computed.width;
20187
20188 // Revert the changed values
20189 style.width = width;
20190 style.minWidth = minWidth;
20191 style.maxWidth = maxWidth;
20192 }
20193 }
20194
20195 return ret !== undefined ?
20196
20197 // Support: IE <=9 - 11 only
20198 // IE returns zIndex value as an integer.
20199 ret + "" :
20200 ret;
20201 }
20202
20203
20204 function addGetHookIf( conditionFn, hookFn ) {
20205
20206 // Define the hook, we'll check on the first run if it's really needed.
20207 return {
20208 get: function() {
20209 if ( conditionFn() ) {
20210
20211 // Hook not needed (or it's not possible to use it due
20212 // to missing dependency), remove it.
20213 delete this.get;
20214 return;
20215 }
20216
20217 // Hook needed; redefine it so that the support test is not executed again.
20218 return ( this.get = hookFn ).apply( this, arguments );
20219 }
20220 };
20221 }
20222
20223
20224 var
20225
20226 // Swappable if display is none or starts with table
20227 // except "table", "table-cell", or "table-caption"
20228 // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
20229 rdisplayswap = /^(none|table(?!-c[ea]).+)/,
20230 rcustomProp = /^--/,
20231 cssShow = { position: "absolute", visibility: "hidden", display: "block" },
20232 cssNormalTransform = {
20233 letterSpacing: "0",
20234 fontWeight: "400"
20235 },
20236
20237 cssPrefixes = [ "Webkit", "Moz", "ms" ],
20238 emptyStyle = document.createElement( "div" ).style;
20239
20240 // Return a css property mapped to a potentially vendor prefixed property
20241 function vendorPropName( name ) {
20242
20243 // Shortcut for names that are not vendor prefixed
20244 if ( name in emptyStyle ) {
20245 return name;
20246 }
20247
20248 // Check for vendor prefixed names
20249 var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
20250 i = cssPrefixes.length;
20251
20252 while ( i-- ) {
20253 name = cssPrefixes[ i ] + capName;
20254 if ( name in emptyStyle ) {
20255 return name;
20256 }
20257 }
20258 }
20259
20260 // Return a property mapped along what jQuery.cssProps suggests or to
20261 // a vendor prefixed property.
20262 function finalPropName( name ) {
20263 var ret = jQuery.cssProps[ name ];
20264 if ( !ret ) {
20265 ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name;
20266 }
20267 return ret;
20268 }
20269
20270 function setPositiveNumber( elem, value, subtract ) {
20271
20272 // Any relative (+/-) values have already been
20273 // normalized at this point
20274 var matches = rcssNum.exec( value );
20275 return matches ?
20276
20277 // Guard against undefined "subtract", e.g., when used as in cssHooks
20278 Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
20279 value;
20280 }
20281
20282 function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
20283 var i,
20284 val = 0;
20285
20286 // If we already have the right measurement, avoid augmentation
20287 if ( extra === ( isBorderBox ? "border" : "content" ) ) {
20288 i = 4;
20289
20290 // Otherwise initialize for horizontal or vertical properties
20291 } else {
20292 i = name === "width" ? 1 : 0;
20293 }
20294
20295 for ( ; i < 4; i += 2 ) {
20296
20297 // Both box models exclude margin, so add it if we want it
20298 if ( extra === "margin" ) {
20299 val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
20300 }
20301
20302 if ( isBorderBox ) {
20303
20304 // border-box includes padding, so remove it if we want content
20305 if ( extra === "content" ) {
20306 val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
20307 }
20308
20309 // At this point, extra isn't border nor margin, so remove border
20310 if ( extra !== "margin" ) {
20311 val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
20312 }
20313 } else {
20314
20315 // At this point, extra isn't content, so add padding
20316 val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
20317
20318 // At this point, extra isn't content nor padding, so add border
20319 if ( extra !== "padding" ) {
20320 val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
20321 }
20322 }
20323 }
20324
20325 return val;
20326 }
20327
20328 function getWidthOrHeight( elem, name, extra ) {
20329
20330 // Start with computed style
20331 var valueIsBorderBox,
20332 styles = getStyles( elem ),
20333 val = curCSS( elem, name, styles ),
20334 isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
20335
20336 // Computed unit is not pixels. Stop here and return.
20337 if ( rnumnonpx.test( val ) ) {
20338 return val;
20339 }
20340
20341 // Check for style in case a browser which returns unreliable values
20342 // for getComputedStyle silently falls back to the reliable elem.style
20343 valueIsBorderBox = isBorderBox &&
20344 ( support.boxSizingReliable() || val === elem.style[ name ] );
20345
20346 // Fall back to offsetWidth/Height when value is "auto"
20347 // This happens for inline elements with no explicit setting (gh-3571)
20348 if ( val === "auto" ) {
20349 val = elem[ "offset" + name[ 0 ].toUpperCase() + name.slice( 1 ) ];
20350 }
20351
20352 // Normalize "", auto, and prepare for extra
20353 val = parseFloat( val ) || 0;
20354
20355 // Use the active box-sizing model to add/subtract irrelevant styles
20356 return ( val +
20357 augmentWidthOrHeight(
20358 elem,
20359 name,
20360 extra || ( isBorderBox ? "border" : "content" ),
20361 valueIsBorderBox,
20362 styles
20363 )
20364 ) + "px";
20365 }
20366
20367 jQuery.extend( {
20368
20369 // Add in style property hooks for overriding the default
20370 // behavior of getting and setting a style property
20371 cssHooks: {
20372 opacity: {
20373 get: function( elem, computed ) {
20374 if ( computed ) {
20375
20376 // We should always get a number back from opacity
20377 var ret = curCSS( elem, "opacity" );
20378 return ret === "" ? "1" : ret;
20379 }
20380 }
20381 }
20382 },
20383
20384 // Don't automatically add "px" to these possibly-unitless properties
20385 cssNumber: {
20386 "animationIterationCount": true,
20387 "columnCount": true,
20388 "fillOpacity": true,
20389 "flexGrow": true,
20390 "flexShrink": true,
20391 "fontWeight": true,
20392 "lineHeight": true,
20393 "opacity": true,
20394 "order": true,
20395 "orphans": true,
20396 "widows": true,
20397 "zIndex": true,
20398 "zoom": true
20399 },
20400
20401 // Add in properties whose names you wish to fix before
20402 // setting or getting the value
20403 cssProps: {
20404 "float": "cssFloat"
20405 },
20406
20407 // Get and set the style property on a DOM Node
20408 style: function( elem, name, value, extra ) {
20409
20410 // Don't set styles on text and comment nodes
20411 if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
20412 return;
20413 }
20414
20415 // Make sure that we're working with the right name
20416 var ret, type, hooks,
20417 origName = jQuery.camelCase( name ),
20418 isCustomProp = rcustomProp.test( name ),
20419 style = elem.style;
20420
20421 // Make sure that we're working with the right name. We don't
20422 // want to query the value if it is a CSS custom property
20423 // since they are user-defined.
20424 if ( !isCustomProp ) {
20425 name = finalPropName( origName );
20426 }
20427
20428 // Gets hook for the prefixed version, then unprefixed version
20429 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
20430
20431 // Check if we're setting a value
20432 if ( value !== undefined ) {
20433 type = typeof value;
20434
20435 // Convert "+=" or "-=" to relative numbers (#7345)
20436 if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
20437 value = adjustCSS( elem, name, ret );
20438
20439 // Fixes bug #9237
20440 type = "number";
20441 }
20442
20443 // Make sure that null and NaN values aren't set (#7116)
20444 if ( value == null || value !== value ) {
20445 return;
20446 }
20447
20448 // If a number was passed in, add the unit (except for certain CSS properties)
20449 if ( type === "number" ) {
20450 value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
20451 }
20452
20453 // background-* props affect original clone's values
20454 if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
20455 style[ name ] = "inherit";
20456 }
20457
20458 // If a hook was provided, use that value, otherwise just set the specified value
20459 if ( !hooks || !( "set" in hooks ) ||
20460 ( value = hooks.set( elem, value, extra ) ) !== undefined ) {
20461
20462 if ( isCustomProp ) {
20463 style.setProperty( name, value );
20464 } else {
20465 style[ name ] = value;
20466 }
20467 }
20468
20469 } else {
20470
20471 // If a hook was provided get the non-computed value from there
20472 if ( hooks && "get" in hooks &&
20473 ( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
20474
20475 return ret;
20476 }
20477
20478 // Otherwise just get the value from the style object
20479 return style[ name ];
20480 }
20481 },
20482
20483 css: function( elem, name, extra, styles ) {
20484 var val, num, hooks,
20485 origName = jQuery.camelCase( name ),
20486 isCustomProp = rcustomProp.test( name );
20487
20488 // Make sure that we're working with the right name. We don't
20489 // want to modify the value if it is a CSS custom property
20490 // since they are user-defined.
20491 if ( !isCustomProp ) {
20492 name = finalPropName( origName );
20493 }
20494
20495 // Try prefixed name followed by the unprefixed name
20496 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
20497
20498 // If a hook was provided get the computed value from there
20499 if ( hooks && "get" in hooks ) {
20500 val = hooks.get( elem, true, extra );
20501 }
20502
20503 // Otherwise, if a way to get the computed value exists, use that
20504 if ( val === undefined ) {
20505 val = curCSS( elem, name, styles );
20506 }
20507
20508 // Convert "normal" to computed value
20509 if ( val === "normal" && name in cssNormalTransform ) {
20510 val = cssNormalTransform[ name ];
20511 }
20512
20513 // Make numeric if forced or a qualifier was provided and val looks numeric
20514 if ( extra === "" || extra ) {
20515 num = parseFloat( val );
20516 return extra === true || isFinite( num ) ? num || 0 : val;
20517 }
20518
20519 return val;
20520 }
20521 } );
20522
20523 jQuery.each( [ "height", "width" ], function( i, name ) {
20524 jQuery.cssHooks[ name ] = {
20525 get: function( elem, computed, extra ) {
20526 if ( computed ) {
20527
20528 // Certain elements can have dimension info if we invisibly show them
20529 // but it must have a current display style that would benefit
20530 return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
20531
20532 // Support: Safari 8+
20533 // Table columns in Safari have non-zero offsetWidth & zero
20534 // getBoundingClientRect().width unless display is changed.
20535 // Support: IE <=11 only
20536 // Running getBoundingClientRect on a disconnected node
20537 // in IE throws an error.
20538 ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
20539 swap( elem, cssShow, function() {
20540 return getWidthOrHeight( elem, name, extra );
20541 } ) :
20542 getWidthOrHeight( elem, name, extra );
20543 }
20544 },
20545
20546 set: function( elem, value, extra ) {
20547 var matches,
20548 styles = extra && getStyles( elem ),
20549 subtract = extra && augmentWidthOrHeight(
20550 elem,
20551 name,
20552 extra,
20553 jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
20554 styles
20555 );
20556
20557 // Convert to pixels if value adjustment is needed
20558 if ( subtract && ( matches = rcssNum.exec( value ) ) &&
20559 ( matches[ 3 ] || "px" ) !== "px" ) {
20560
20561 elem.style[ name ] = value;
20562 value = jQuery.css( elem, name );
20563 }
20564
20565 return setPositiveNumber( elem, value, subtract );
20566 }
20567 };
20568 } );
20569
20570 jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
20571 function( elem, computed ) {
20572 if ( computed ) {
20573 return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
20574 elem.getBoundingClientRect().left -
20575 swap( elem, { marginLeft: 0 }, function() {
20576 return elem.getBoundingClientRect().left;
20577 } )
20578 ) + "px";
20579 }
20580 }
20581 );
20582
20583 // These hooks are used by animate to expand properties
20584 jQuery.each( {
20585 margin: "",
20586 padding: "",
20587 border: "Width"
20588 }, function( prefix, suffix ) {
20589 jQuery.cssHooks[ prefix + suffix ] = {
20590 expand: function( value ) {
20591 var i = 0,
20592 expanded = {},
20593
20594 // Assumes a single number if not a string
20595 parts = typeof value === "string" ? value.split( " " ) : [ value ];
20596
20597 for ( ; i < 4; i++ ) {
20598 expanded[ prefix + cssExpand[ i ] + suffix ] =
20599 parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
20600 }
20601
20602 return expanded;
20603 }
20604 };
20605
20606 if ( !rmargin.test( prefix ) ) {
20607 jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
20608 }
20609 } );
20610
20611 jQuery.fn.extend( {
20612 css: function( name, value ) {
20613 return access( this, function( elem, name, value ) {
20614 var styles, len,
20615 map = {},
20616 i = 0;
20617
20618 if ( Array.isArray( name ) ) {
20619 styles = getStyles( elem );
20620 len = name.length;
20621
20622 for ( ; i < len; i++ ) {
20623 map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
20624 }
20625
20626 return map;
20627 }
20628
20629 return value !== undefined ?
20630 jQuery.style( elem, name, value ) :
20631 jQuery.css( elem, name );
20632 }, name, value, arguments.length > 1 );
20633 }
20634 } );
20635
20636
20637 function Tween( elem, options, prop, end, easing ) {
20638 return new Tween.prototype.init( elem, options, prop, end, easing );
20639 }
20640 jQuery.Tween = Tween;
20641
20642 Tween.prototype = {
20643 constructor: Tween,
20644 init: function( elem, options, prop, end, easing, unit ) {
20645 this.elem = elem;
20646 this.prop = prop;
20647 this.easing = easing || jQuery.easing._default;
20648 this.options = options;
20649 this.start = this.now = this.cur();
20650 this.end = end;
20651 this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
20652 },
20653 cur: function() {
20654 var hooks = Tween.propHooks[ this.prop ];
20655
20656 return hooks && hooks.get ?
20657 hooks.get( this ) :
20658 Tween.propHooks._default.get( this );
20659 },
20660 run: function( percent ) {
20661 var eased,
20662 hooks = Tween.propHooks[ this.prop ];
20663
20664 if ( this.options.duration ) {
20665 this.pos = eased = jQuery.easing[ this.easing ](
20666 percent, this.options.duration * percent, 0, 1, this.options.duration
20667 );
20668 } else {
20669 this.pos = eased = percent;
20670 }
20671 this.now = ( this.end - this.start ) * eased + this.start;
20672
20673 if ( this.options.step ) {
20674 this.options.step.call( this.elem, this.now, this );
20675 }
20676
20677 if ( hooks && hooks.set ) {
20678 hooks.set( this );
20679 } else {
20680 Tween.propHooks._default.set( this );
20681 }
20682 return this;
20683 }
20684 };
20685
20686 Tween.prototype.init.prototype = Tween.prototype;
20687
20688 Tween.propHooks = {
20689 _default: {
20690 get: function( tween ) {
20691 var result;
20692
20693 // Use a property on the element directly when it is not a DOM element,
20694 // or when there is no matching style property that exists.
20695 if ( tween.elem.nodeType !== 1 ||
20696 tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
20697 return tween.elem[ tween.prop ];
20698 }
20699
20700 // Passing an empty string as a 3rd parameter to .css will automatically
20701 // attempt a parseFloat and fallback to a string if the parse fails.
20702 // Simple values such as "10px" are parsed to Float;
20703 // complex values such as "rotate(1rad)" are returned as-is.
20704 result = jQuery.css( tween.elem, tween.prop, "" );
20705
20706 // Empty strings, null, undefined and "auto" are converted to 0.
20707 return !result || result === "auto" ? 0 : result;
20708 },
20709 set: function( tween ) {
20710
20711 // Use step hook for back compat.
20712 // Use cssHook if its there.
20713 // Use .style if available and use plain properties where available.
20714 if ( jQuery.fx.step[ tween.prop ] ) {
20715 jQuery.fx.step[ tween.prop ]( tween );
20716 } else if ( tween.elem.nodeType === 1 &&
20717 ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||
20718 jQuery.cssHooks[ tween.prop ] ) ) {
20719 jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
20720 } else {
20721 tween.elem[ tween.prop ] = tween.now;
20722 }
20723 }
20724 }
20725 };
20726
20727 // Support: IE <=9 only
20728 // Panic based approach to setting things on disconnected nodes
20729 Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
20730 set: function( tween ) {
20731 if ( tween.elem.nodeType && tween.elem.parentNode ) {
20732 tween.elem[ tween.prop ] = tween.now;
20733 }
20734 }
20735 };
20736
20737 jQuery.easing = {
20738 linear: function( p ) {
20739 return p;
20740 },
20741 swing: function( p ) {
20742 return 0.5 - Math.cos( p * Math.PI ) / 2;
20743 },
20744 _default: "swing"
20745 };
20746
20747 jQuery.fx = Tween.prototype.init;
20748
20749 // Back compat <1.8 extension point
20750 jQuery.fx.step = {};
20751
20752
20753
20754
20755 var
20756 fxNow, inProgress,
20757 rfxtypes = /^(?:toggle|show|hide)$/,
20758 rrun = /queueHooks$/;
20759
20760 function schedule() {
20761 if ( inProgress ) {
20762 if ( document.hidden === false && window.requestAnimationFrame ) {
20763 window.requestAnimationFrame( schedule );
20764 } else {
20765 window.setTimeout( schedule, jQuery.fx.interval );
20766 }
20767
20768 jQuery.fx.tick();
20769 }
20770 }
20771
20772 // Animations created synchronously will run synchronously
20773 function createFxNow() {
20774 window.setTimeout( function() {
20775 fxNow = undefined;
20776 } );
20777 return ( fxNow = jQuery.now() );
20778 }
20779
20780 // Generate parameters to create a standard animation
20781 function genFx( type, includeWidth ) {
20782 var which,
20783 i = 0,
20784 attrs = { height: type };
20785
20786 // If we include width, step value is 1 to do all cssExpand values,
20787 // otherwise step value is 2 to skip over Left and Right
20788 includeWidth = includeWidth ? 1 : 0;
20789 for ( ; i < 4; i += 2 - includeWidth ) {
20790 which = cssExpand[ i ];
20791 attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
20792 }
20793
20794 if ( includeWidth ) {
20795 attrs.opacity = attrs.width = type;
20796 }
20797
20798 return attrs;
20799 }
20800
20801 function createTween( value, prop, animation ) {
20802 var tween,
20803 collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
20804 index = 0,
20805 length = collection.length;
20806 for ( ; index < length; index++ ) {
20807 if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
20808
20809 // We're done with this property
20810 return tween;
20811 }
20812 }
20813 }
20814
20815 function defaultPrefilter( elem, props, opts ) {
20816 var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
20817 isBox = "width" in props || "height" in props,
20818 anim = this,
20819 orig = {},
20820 style = elem.style,
20821 hidden = elem.nodeType && isHiddenWithinTree( elem ),
20822 dataShow = dataPriv.get( elem, "fxshow" );
20823
20824 // Queue-skipping animations hijack the fx hooks
20825 if ( !opts.queue ) {
20826 hooks = jQuery._queueHooks( elem, "fx" );
20827 if ( hooks.unqueued == null ) {
20828 hooks.unqueued = 0;
20829 oldfire = hooks.empty.fire;
20830 hooks.empty.fire = function() {
20831 if ( !hooks.unqueued ) {
20832 oldfire();
20833 }
20834 };
20835 }
20836 hooks.unqueued++;
20837
20838 anim.always( function() {
20839
20840 // Ensure the complete handler is called before this completes
20841 anim.always( function() {
20842 hooks.unqueued--;
20843 if ( !jQuery.queue( elem, "fx" ).length ) {
20844 hooks.empty.fire();
20845 }
20846 } );
20847 } );
20848 }
20849
20850 // Detect show/hide animations
20851 for ( prop in props ) {
20852 value = props[ prop ];
20853 if ( rfxtypes.test( value ) ) {
20854 delete props[ prop ];
20855 toggle = toggle || value === "toggle";
20856 if ( value === ( hidden ? "hide" : "show" ) ) {
20857
20858 // Pretend to be hidden if this is a "show" and
20859 // there is still data from a stopped show/hide
20860 if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
20861 hidden = true;
20862
20863 // Ignore all other no-op show/hide data
20864 } else {
20865 continue;
20866 }
20867 }
20868 orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
20869 }
20870 }
20871
20872 // Bail out if this is a no-op like .hide().hide()
20873 propTween = !jQuery.isEmptyObject( props );
20874 if ( !propTween && jQuery.isEmptyObject( orig ) ) {
20875 return;
20876 }
20877
20878 // Restrict "overflow" and "display" styles during box animations
20879 if ( isBox && elem.nodeType === 1 ) {
20880
20881 // Support: IE <=9 - 11, Edge 12 - 13
20882 // Record all 3 overflow attributes because IE does not infer the shorthand
20883 // from identically-valued overflowX and overflowY
20884 opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
20885
20886 // Identify a display type, preferring old show/hide data over the CSS cascade
20887 restoreDisplay = dataShow && dataShow.display;
20888 if ( restoreDisplay == null ) {
20889 restoreDisplay = dataPriv.get( elem, "display" );
20890 }
20891 display = jQuery.css( elem, "display" );
20892 if ( display === "none" ) {
20893 if ( restoreDisplay ) {
20894 display = restoreDisplay;
20895 } else {
20896
20897 // Get nonempty value(s) by temporarily forcing visibility
20898 showHide( [ elem ], true );
20899 restoreDisplay = elem.style.display || restoreDisplay;
20900 display = jQuery.css( elem, "display" );
20901 showHide( [ elem ] );
20902 }
20903 }
20904
20905 // Animate inline elements as inline-block
20906 if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
20907 if ( jQuery.css( elem, "float" ) === "none" ) {
20908
20909 // Restore the original display value at the end of pure show/hide animations
20910 if ( !propTween ) {
20911 anim.done( function() {
20912 style.display = restoreDisplay;
20913 } );
20914 if ( restoreDisplay == null ) {
20915 display = style.display;
20916 restoreDisplay = display === "none" ? "" : display;
20917 }
20918 }
20919 style.display = "inline-block";
20920 }
20921 }
20922 }
20923
20924 if ( opts.overflow ) {
20925 style.overflow = "hidden";
20926 anim.always( function() {
20927 style.overflow = opts.overflow[ 0 ];
20928 style.overflowX = opts.overflow[ 1 ];
20929 style.overflowY = opts.overflow[ 2 ];
20930 } );
20931 }
20932
20933 // Implement show/hide animations
20934 propTween = false;
20935 for ( prop in orig ) {
20936
20937 // General show/hide setup for this element animation
20938 if ( !propTween ) {
20939 if ( dataShow ) {
20940 if ( "hidden" in dataShow ) {
20941 hidden = dataShow.hidden;
20942 }
20943 } else {
20944 dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
20945 }
20946
20947 // Store hidden/visible for toggle so `.stop().toggle()` "reverses"
20948 if ( toggle ) {
20949 dataShow.hidden = !hidden;
20950 }
20951
20952 // Show elements before animating them
20953 if ( hidden ) {
20954 showHide( [ elem ], true );
20955 }
20956
20957 /* eslint-disable no-loop-func */
20958
20959 anim.done( function() {
20960
20961 /* eslint-enable no-loop-func */
20962
20963 // The final step of a "hide" animation is actually hiding the element
20964 if ( !hidden ) {
20965 showHide( [ elem ] );
20966 }
20967 dataPriv.remove( elem, "fxshow" );
20968 for ( prop in orig ) {
20969 jQuery.style( elem, prop, orig[ prop ] );
20970 }
20971 } );
20972 }
20973
20974 // Per-property setup
20975 propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
20976 if ( !( prop in dataShow ) ) {
20977 dataShow[ prop ] = propTween.start;
20978 if ( hidden ) {
20979 propTween.end = propTween.start;
20980 propTween.start = 0;
20981 }
20982 }
20983 }
20984 }
20985
20986 function propFilter( props, specialEasing ) {
20987 var index, name, easing, value, hooks;
20988
20989 // camelCase, specialEasing and expand cssHook pass
20990 for ( index in props ) {
20991 name = jQuery.camelCase( index );
20992 easing = specialEasing[ name ];
20993 value = props[ index ];
20994 if ( Array.isArray( value ) ) {
20995 easing = value[ 1 ];
20996 value = props[ index ] = value[ 0 ];
20997 }
20998
20999 if ( index !== name ) {
21000 props[ name ] = value;
21001 delete props[ index ];
21002 }
21003
21004 hooks = jQuery.cssHooks[ name ];
21005 if ( hooks && "expand" in hooks ) {
21006 value = hooks.expand( value );
21007 delete props[ name ];
21008
21009 // Not quite $.extend, this won't overwrite existing keys.
21010 // Reusing 'index' because we have the correct "name"
21011 for ( index in value ) {
21012 if ( !( index in props ) ) {
21013 props[ index ] = value[ index ];
21014 specialEasing[ index ] = easing;
21015 }
21016 }
21017 } else {
21018 specialEasing[ name ] = easing;
21019 }
21020 }
21021 }
21022
21023 function Animation( elem, properties, options ) {
21024 var result,
21025 stopped,
21026 index = 0,
21027 length = Animation.prefilters.length,
21028 deferred = jQuery.Deferred().always( function() {
21029
21030 // Don't match elem in the :animated selector
21031 delete tick.elem;
21032 } ),
21033 tick = function() {
21034 if ( stopped ) {
21035 return false;
21036 }
21037 var currentTime = fxNow || createFxNow(),
21038 remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
21039
21040 // Support: Android 2.3 only
21041 // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
21042 temp = remaining / animation.duration || 0,
21043 percent = 1 - temp,
21044 index = 0,
21045 length = animation.tweens.length;
21046
21047 for ( ; index < length; index++ ) {
21048 animation.tweens[ index ].run( percent );
21049 }
21050
21051 deferred.notifyWith( elem, [ animation, percent, remaining ] );
21052
21053 // If there's more to do, yield
21054 if ( percent < 1 && length ) {
21055 return remaining;
21056 }
21057
21058 // If this was an empty animation, synthesize a final progress notification
21059 if ( !length ) {
21060 deferred.notifyWith( elem, [ animation, 1, 0 ] );
21061 }
21062
21063 // Resolve the animation and report its conclusion
21064 deferred.resolveWith( elem, [ animation ] );
21065 return false;
21066 },
21067 animation = deferred.promise( {
21068 elem: elem,
21069 props: jQuery.extend( {}, properties ),
21070 opts: jQuery.extend( true, {
21071 specialEasing: {},
21072 easing: jQuery.easing._default
21073 }, options ),
21074 originalProperties: properties,
21075 originalOptions: options,
21076 startTime: fxNow || createFxNow(),
21077 duration: options.duration,
21078 tweens: [],
21079 createTween: function( prop, end ) {
21080 var tween = jQuery.Tween( elem, animation.opts, prop, end,
21081 animation.opts.specialEasing[ prop ] || animation.opts.easing );
21082 animation.tweens.push( tween );
21083 return tween;
21084 },
21085 stop: function( gotoEnd ) {
21086 var index = 0,
21087
21088 // If we are going to the end, we want to run all the tweens
21089 // otherwise we skip this part
21090 length = gotoEnd ? animation.tweens.length : 0;
21091 if ( stopped ) {
21092 return this;
21093 }
21094 stopped = true;
21095 for ( ; index < length; index++ ) {
21096 animation.tweens[ index ].run( 1 );
21097 }
21098
21099 // Resolve when we played the last frame; otherwise, reject
21100 if ( gotoEnd ) {
21101 deferred.notifyWith( elem, [ animation, 1, 0 ] );
21102 deferred.resolveWith( elem, [ animation, gotoEnd ] );
21103 } else {
21104 deferred.rejectWith( elem, [ animation, gotoEnd ] );
21105 }
21106 return this;
21107 }
21108 } ),
21109 props = animation.props;
21110
21111 propFilter( props, animation.opts.specialEasing );
21112
21113 for ( ; index < length; index++ ) {
21114 result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
21115 if ( result ) {
21116 if ( jQuery.isFunction( result.stop ) ) {
21117 jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
21118 jQuery.proxy( result.stop, result );
21119 }
21120 return result;
21121 }
21122 }
21123
21124 jQuery.map( props, createTween, animation );
21125
21126 if ( jQuery.isFunction( animation.opts.start ) ) {
21127 animation.opts.start.call( elem, animation );
21128 }
21129
21130 // Attach callbacks from options
21131 animation
21132 .progress( animation.opts.progress )
21133 .done( animation.opts.done, animation.opts.complete )
21134 .fail( animation.opts.fail )
21135 .always( animation.opts.always );
21136
21137 jQuery.fx.timer(
21138 jQuery.extend( tick, {
21139 elem: elem,
21140 anim: animation,
21141 queue: animation.opts.queue
21142 } )
21143 );
21144
21145 return animation;
21146 }
21147
21148 jQuery.Animation = jQuery.extend( Animation, {
21149
21150 tweeners: {
21151 "*": [ function( prop, value ) {
21152 var tween = this.createTween( prop, value );
21153 adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
21154 return tween;
21155 } ]
21156 },
21157
21158 tweener: function( props, callback ) {
21159 if ( jQuery.isFunction( props ) ) {
21160 callback = props;
21161 props = [ "*" ];
21162 } else {
21163 props = props.match( rnothtmlwhite );
21164 }
21165
21166 var prop,
21167 index = 0,
21168 length = props.length;
21169
21170 for ( ; index < length; index++ ) {
21171 prop = props[ index ];
21172 Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
21173 Animation.tweeners[ prop ].unshift( callback );
21174 }
21175 },
21176
21177 prefilters: [ defaultPrefilter ],
21178
21179 prefilter: function( callback, prepend ) {
21180 if ( prepend ) {
21181 Animation.prefilters.unshift( callback );
21182 } else {
21183 Animation.prefilters.push( callback );
21184 }
21185 }
21186 } );
21187
21188 jQuery.speed = function( speed, easing, fn ) {
21189 var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
21190 complete: fn || !fn && easing ||
21191 jQuery.isFunction( speed ) && speed,
21192 duration: speed,
21193 easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
21194 };
21195
21196 // Go to the end state if fx are off
21197 if ( jQuery.fx.off ) {
21198 opt.duration = 0;
21199
21200 } else {
21201 if ( typeof opt.duration !== "number" ) {
21202 if ( opt.duration in jQuery.fx.speeds ) {
21203 opt.duration = jQuery.fx.speeds[ opt.duration ];
21204
21205 } else {
21206 opt.duration = jQuery.fx.speeds._default;
21207 }
21208 }
21209 }
21210
21211 // Normalize opt.queue - true/undefined/null -> "fx"
21212 if ( opt.queue == null || opt.queue === true ) {
21213 opt.queue = "fx";
21214 }
21215
21216 // Queueing
21217 opt.old = opt.complete;
21218
21219 opt.complete = function() {
21220 if ( jQuery.isFunction( opt.old ) ) {
21221 opt.old.call( this );
21222 }
21223
21224 if ( opt.queue ) {
21225 jQuery.dequeue( this, opt.queue );
21226 }
21227 };
21228
21229 return opt;
21230 };
21231
21232 jQuery.fn.extend( {
21233 fadeTo: function( speed, to, easing, callback ) {
21234
21235 // Show any hidden elements after setting opacity to 0
21236 return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
21237
21238 // Animate to the value specified
21239 .end().animate( { opacity: to }, speed, easing, callback );
21240 },
21241 animate: function( prop, speed, easing, callback ) {
21242 var empty = jQuery.isEmptyObject( prop ),
21243 optall = jQuery.speed( speed, easing, callback ),
21244 doAnimation = function() {
21245
21246 // Operate on a copy of prop so per-property easing won't be lost
21247 var anim = Animation( this, jQuery.extend( {}, prop ), optall );
21248
21249 // Empty animations, or finishing resolves immediately
21250 if ( empty || dataPriv.get( this, "finish" ) ) {
21251 anim.stop( true );
21252 }
21253 };
21254 doAnimation.finish = doAnimation;
21255
21256 return empty || optall.queue === false ?
21257 this.each( doAnimation ) :
21258 this.queue( optall.queue, doAnimation );
21259 },
21260 stop: function( type, clearQueue, gotoEnd ) {
21261 var stopQueue = function( hooks ) {
21262 var stop = hooks.stop;
21263 delete hooks.stop;
21264 stop( gotoEnd );
21265 };
21266
21267 if ( typeof type !== "string" ) {
21268 gotoEnd = clearQueue;
21269 clearQueue = type;
21270 type = undefined;
21271 }
21272 if ( clearQueue && type !== false ) {
21273 this.queue( type || "fx", [] );
21274 }
21275
21276 return this.each( function() {
21277 var dequeue = true,
21278 index = type != null && type + "queueHooks",
21279 timers = jQuery.timers,
21280 data = dataPriv.get( this );
21281
21282 if ( index ) {
21283 if ( data[ index ] && data[ index ].stop ) {
21284 stopQueue( data[ index ] );
21285 }
21286 } else {
21287 for ( index in data ) {
21288 if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
21289 stopQueue( data[ index ] );
21290 }
21291 }
21292 }
21293
21294 for ( index = timers.length; index--; ) {
21295 if ( timers[ index ].elem === this &&
21296 ( type == null || timers[ index ].queue === type ) ) {
21297
21298 timers[ index ].anim.stop( gotoEnd );
21299 dequeue = false;
21300 timers.splice( index, 1 );
21301 }
21302 }
21303
21304 // Start the next in the queue if the last step wasn't forced.
21305 // Timers currently will call their complete callbacks, which
21306 // will dequeue but only if they were gotoEnd.
21307 if ( dequeue || !gotoEnd ) {
21308 jQuery.dequeue( this, type );
21309 }
21310 } );
21311 },
21312 finish: function( type ) {
21313 if ( type !== false ) {
21314 type = type || "fx";
21315 }
21316 return this.each( function() {
21317 var index,
21318 data = dataPriv.get( this ),
21319 queue = data[ type + "queue" ],
21320 hooks = data[ type + "queueHooks" ],
21321 timers = jQuery.timers,
21322 length = queue ? queue.length : 0;
21323
21324 // Enable finishing flag on private data
21325 data.finish = true;
21326
21327 // Empty the queue first
21328 jQuery.queue( this, type, [] );
21329
21330 if ( hooks && hooks.stop ) {
21331 hooks.stop.call( this, true );
21332 }
21333
21334 // Look for any active animations, and finish them
21335 for ( index = timers.length; index--; ) {
21336 if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
21337 timers[ index ].anim.stop( true );
21338 timers.splice( index, 1 );
21339 }
21340 }
21341
21342 // Look for any animations in the old queue and finish them
21343 for ( index = 0; index < length; index++ ) {
21344 if ( queue[ index ] && queue[ index ].finish ) {
21345 queue[ index ].finish.call( this );
21346 }
21347 }
21348
21349 // Turn off finishing flag
21350 delete data.finish;
21351 } );
21352 }
21353 } );
21354
21355 jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) {
21356 var cssFn = jQuery.fn[ name ];
21357 jQuery.fn[ name ] = function( speed, easing, callback ) {
21358 return speed == null || typeof speed === "boolean" ?
21359 cssFn.apply( this, arguments ) :
21360 this.animate( genFx( name, true ), speed, easing, callback );
21361 };
21362 } );
21363
21364 // Generate shortcuts for custom animations
21365 jQuery.each( {
21366 slideDown: genFx( "show" ),
21367 slideUp: genFx( "hide" ),
21368 slideToggle: genFx( "toggle" ),
21369 fadeIn: { opacity: "show" },
21370 fadeOut: { opacity: "hide" },
21371 fadeToggle: { opacity: "toggle" }
21372 }, function( name, props ) {
21373 jQuery.fn[ name ] = function( speed, easing, callback ) {
21374 return this.animate( props, speed, easing, callback );
21375 };
21376 } );
21377
21378 jQuery.timers = [];
21379 jQuery.fx.tick = function() {
21380 var timer,
21381 i = 0,
21382 timers = jQuery.timers;
21383
21384 fxNow = jQuery.now();
21385
21386 for ( ; i < timers.length; i++ ) {
21387 timer = timers[ i ];
21388
21389 // Run the timer and safely remove it when done (allowing for external removal)
21390 if ( !timer() && timers[ i ] === timer ) {
21391 timers.splice( i--, 1 );
21392 }
21393 }
21394
21395 if ( !timers.length ) {
21396 jQuery.fx.stop();
21397 }
21398 fxNow = undefined;
21399 };
21400
21401 jQuery.fx.timer = function( timer ) {
21402 jQuery.timers.push( timer );
21403 jQuery.fx.start();
21404 };
21405
21406 jQuery.fx.interval = 13;
21407 jQuery.fx.start = function() {
21408 if ( inProgress ) {
21409 return;
21410 }
21411
21412 inProgress = true;
21413 schedule();
21414 };
21415
21416 jQuery.fx.stop = function() {
21417 inProgress = null;
21418 };
21419
21420 jQuery.fx.speeds = {
21421 slow: 600,
21422 fast: 200,
21423
21424 // Default speed
21425 _default: 400
21426 };
21427
21428
21429 // Based off of the plugin by Clint Helfers, with permission.
21430 // https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
21431 jQuery.fn.delay = function( time, type ) {
21432 time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
21433 type = type || "fx";
21434
21435 return this.queue( type, function( next, hooks ) {
21436 var timeout = window.setTimeout( next, time );
21437 hooks.stop = function() {
21438 window.clearTimeout( timeout );
21439 };
21440 } );
21441 };
21442
21443
21444 ( function() {
21445 var input = document.createElement( "input" ),
21446 select = document.createElement( "select" ),
21447 opt = select.appendChild( document.createElement( "option" ) );
21448
21449 input.type = "checkbox";
21450
21451 // Support: Android <=4.3 only
21452 // Default value for a checkbox should be "on"
21453 support.checkOn = input.value !== "";
21454
21455 // Support: IE <=11 only
21456 // Must access selectedIndex to make default options select
21457 support.optSelected = opt.selected;
21458
21459 // Support: IE <=11 only
21460 // An input loses its value after becoming a radio
21461 input = document.createElement( "input" );
21462 input.value = "t";
21463 input.type = "radio";
21464 support.radioValue = input.value === "t";
21465 } )();
21466
21467
21468 var boolHook,
21469 attrHandle = jQuery.expr.attrHandle;
21470
21471 jQuery.fn.extend( {
21472 attr: function( name, value ) {
21473 return access( this, jQuery.attr, name, value, arguments.length > 1 );
21474 },
21475
21476 removeAttr: function( name ) {
21477 return this.each( function() {
21478 jQuery.removeAttr( this, name );
21479 } );
21480 }
21481 } );
21482
21483 jQuery.extend( {
21484 attr: function( elem, name, value ) {
21485 var ret, hooks,
21486 nType = elem.nodeType;
21487
21488 // Don't get/set attributes on text, comment and attribute nodes
21489 if ( nType === 3 || nType === 8 || nType === 2 ) {
21490 return;
21491 }
21492
21493 // Fallback to prop when attributes are not supported
21494 if ( typeof elem.getAttribute === "undefined" ) {
21495 return jQuery.prop( elem, name, value );
21496 }
21497
21498 // Attribute hooks are determined by the lowercase version
21499 // Grab necessary hook if one is defined
21500 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
21501 hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
21502 ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
21503 }
21504
21505 if ( value !== undefined ) {
21506 if ( value === null ) {
21507 jQuery.removeAttr( elem, name );
21508 return;
21509 }
21510
21511 if ( hooks && "set" in hooks &&
21512 ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
21513 return ret;
21514 }
21515
21516 elem.setAttribute( name, value + "" );
21517 return value;
21518 }
21519
21520 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
21521 return ret;
21522 }
21523
21524 ret = jQuery.find.attr( elem, name );
21525
21526 // Non-existent attributes return null, we normalize to undefined
21527 return ret == null ? undefined : ret;
21528 },
21529
21530 attrHooks: {
21531 type: {
21532 set: function( elem, value ) {
21533 if ( !support.radioValue && value === "radio" &&
21534 nodeName( elem, "input" ) ) {
21535 var val = elem.value;
21536 elem.setAttribute( "type", value );
21537 if ( val ) {
21538 elem.value = val;
21539 }
21540 return value;
21541 }
21542 }
21543 }
21544 },
21545
21546 removeAttr: function( elem, value ) {
21547 var name,
21548 i = 0,
21549
21550 // Attribute names can contain non-HTML whitespace characters
21551 // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
21552 attrNames = value && value.match( rnothtmlwhite );
21553
21554 if ( attrNames && elem.nodeType === 1 ) {
21555 while ( ( name = attrNames[ i++ ] ) ) {
21556 elem.removeAttribute( name );
21557 }
21558 }
21559 }
21560 } );
21561
21562 // Hooks for boolean attributes
21563 boolHook = {
21564 set: function( elem, value, name ) {
21565 if ( value === false ) {
21566
21567 // Remove boolean attributes when set to false
21568 jQuery.removeAttr( elem, name );
21569 } else {
21570 elem.setAttribute( name, name );
21571 }
21572 return name;
21573 }
21574 };
21575
21576 jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
21577 var getter = attrHandle[ name ] || jQuery.find.attr;
21578
21579 attrHandle[ name ] = function( elem, name, isXML ) {
21580 var ret, handle,
21581 lowercaseName = name.toLowerCase();
21582
21583 if ( !isXML ) {
21584
21585 // Avoid an infinite loop by temporarily removing this function from the getter
21586 handle = attrHandle[ lowercaseName ];
21587 attrHandle[ lowercaseName ] = ret;
21588 ret = getter( elem, name, isXML ) != null ?
21589 lowercaseName :
21590 null;
21591 attrHandle[ lowercaseName ] = handle;
21592 }
21593 return ret;
21594 };
21595 } );
21596
21597
21598
21599
21600 var rfocusable = /^(?:input|select|textarea|button)$/i,
21601 rclickable = /^(?:a|area)$/i;
21602
21603 jQuery.fn.extend( {
21604 prop: function( name, value ) {
21605 return access( this, jQuery.prop, name, value, arguments.length > 1 );
21606 },
21607
21608 removeProp: function( name ) {
21609 return this.each( function() {
21610 delete this[ jQuery.propFix[ name ] || name ];
21611 } );
21612 }
21613 } );
21614
21615 jQuery.extend( {
21616 prop: function( elem, name, value ) {
21617 var ret, hooks,
21618 nType = elem.nodeType;
21619
21620 // Don't get/set properties on text, comment and attribute nodes
21621 if ( nType === 3 || nType === 8 || nType === 2 ) {
21622 return;
21623 }
21624
21625 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
21626
21627 // Fix name and attach hooks
21628 name = jQuery.propFix[ name ] || name;
21629 hooks = jQuery.propHooks[ name ];
21630 }
21631
21632 if ( value !== undefined ) {
21633 if ( hooks && "set" in hooks &&
21634 ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
21635 return ret;
21636 }
21637
21638 return ( elem[ name ] = value );
21639 }
21640
21641 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
21642 return ret;
21643 }
21644
21645 return elem[ name ];
21646 },
21647
21648 propHooks: {
21649 tabIndex: {
21650 get: function( elem ) {
21651
21652 // Support: IE <=9 - 11 only
21653 // elem.tabIndex doesn't always return the
21654 // correct value when it hasn't been explicitly set
21655 // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
21656 // Use proper attribute retrieval(#12072)
21657 var tabindex = jQuery.find.attr( elem, "tabindex" );
21658
21659 if ( tabindex ) {
21660 return parseInt( tabindex, 10 );
21661 }
21662
21663 if (
21664 rfocusable.test( elem.nodeName ) ||
21665 rclickable.test( elem.nodeName ) &&
21666 elem.href
21667 ) {
21668 return 0;
21669 }
21670
21671 return -1;
21672 }
21673 }
21674 },
21675
21676 propFix: {
21677 "for": "htmlFor",
21678 "class": "className"
21679 }
21680 } );
21681
21682 // Support: IE <=11 only
21683 // Accessing the selectedIndex property
21684 // forces the browser to respect setting selected
21685 // on the option
21686 // The getter ensures a default option is selected
21687 // when in an optgroup
21688 // eslint rule "no-unused-expressions" is disabled for this code
21689 // since it considers such accessions noop
21690 if ( !support.optSelected ) {
21691 jQuery.propHooks.selected = {
21692 get: function( elem ) {
21693
21694 /* eslint no-unused-expressions: "off" */
21695
21696 var parent = elem.parentNode;
21697 if ( parent && parent.parentNode ) {
21698 parent.parentNode.selectedIndex;
21699 }
21700 return null;
21701 },
21702 set: function( elem ) {
21703
21704 /* eslint no-unused-expressions: "off" */
21705
21706 var parent = elem.parentNode;
21707 if ( parent ) {
21708 parent.selectedIndex;
21709
21710 if ( parent.parentNode ) {
21711 parent.parentNode.selectedIndex;
21712 }
21713 }
21714 }
21715 };
21716 }
21717
21718 jQuery.each( [
21719 "tabIndex",
21720 "readOnly",
21721 "maxLength",
21722 "cellSpacing",
21723 "cellPadding",
21724 "rowSpan",
21725 "colSpan",
21726 "useMap",
21727 "frameBorder",
21728 "contentEditable"
21729 ], function() {
21730 jQuery.propFix[ this.toLowerCase() ] = this;
21731 } );
21732
21733
21734
21735
21736 // Strip and collapse whitespace according to HTML spec
21737 // https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace
21738 function stripAndCollapse( value ) {
21739 var tokens = value.match( rnothtmlwhite ) || [];
21740 return tokens.join( " " );
21741 }
21742
21743
21744 function getClass( elem ) {
21745 return elem.getAttribute && elem.getAttribute( "class" ) || "";
21746 }
21747
21748 jQuery.fn.extend( {
21749 addClass: function( value ) {
21750 var classes, elem, cur, curValue, clazz, j, finalValue,
21751 i = 0;
21752
21753 if ( jQuery.isFunction( value ) ) {
21754 return this.each( function( j ) {
21755 jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
21756 } );
21757 }
21758
21759 if ( typeof value === "string" && value ) {
21760 classes = value.match( rnothtmlwhite ) || [];
21761
21762 while ( ( elem = this[ i++ ] ) ) {
21763 curValue = getClass( elem );
21764 cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
21765
21766 if ( cur ) {
21767 j = 0;
21768 while ( ( clazz = classes[ j++ ] ) ) {
21769 if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
21770 cur += clazz + " ";
21771 }
21772 }
21773
21774 // Only assign if different to avoid unneeded rendering.
21775 finalValue = stripAndCollapse( cur );
21776 if ( curValue !== finalValue ) {
21777 elem.setAttribute( "class", finalValue );
21778 }
21779 }
21780 }
21781 }
21782
21783 return this;
21784 },
21785
21786 removeClass: function( value ) {
21787 var classes, elem, cur, curValue, clazz, j, finalValue,
21788 i = 0;
21789
21790 if ( jQuery.isFunction( value ) ) {
21791 return this.each( function( j ) {
21792 jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
21793 } );
21794 }
21795
21796 if ( !arguments.length ) {
21797 return this.attr( "class", "" );
21798 }
21799
21800 if ( typeof value === "string" && value ) {
21801 classes = value.match( rnothtmlwhite ) || [];
21802
21803 while ( ( elem = this[ i++ ] ) ) {
21804 curValue = getClass( elem );
21805
21806 // This expression is here for better compressibility (see addClass)
21807 cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
21808
21809 if ( cur ) {
21810 j = 0;
21811 while ( ( clazz = classes[ j++ ] ) ) {
21812
21813 // Remove *all* instances
21814 while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
21815 cur = cur.replace( " " + clazz + " ", " " );
21816 }
21817 }
21818
21819 // Only assign if different to avoid unneeded rendering.
21820 finalValue = stripAndCollapse( cur );
21821 if ( curValue !== finalValue ) {
21822 elem.setAttribute( "class", finalValue );
21823 }
21824 }
21825 }
21826 }
21827
21828 return this;
21829 },
21830
21831 toggleClass: function( value, stateVal ) {
21832 var type = typeof value;
21833
21834 if ( typeof stateVal === "boolean" && type === "string" ) {
21835 return stateVal ? this.addClass( value ) : this.removeClass( value );
21836 }
21837
21838 if ( jQuery.isFunction( value ) ) {
21839 return this.each( function( i ) {
21840 jQuery( this ).toggleClass(
21841 value.call( this, i, getClass( this ), stateVal ),
21842 stateVal
21843 );
21844 } );
21845 }
21846
21847 return this.each( function() {
21848 var className, i, self, classNames;
21849
21850 if ( type === "string" ) {
21851
21852 // Toggle individual class names
21853 i = 0;
21854 self = jQuery( this );
21855 classNames = value.match( rnothtmlwhite ) || [];
21856
21857 while ( ( className = classNames[ i++ ] ) ) {
21858
21859 // Check each className given, space separated list
21860 if ( self.hasClass( className ) ) {
21861 self.removeClass( className );
21862 } else {
21863 self.addClass( className );
21864 }
21865 }
21866
21867 // Toggle whole class name
21868 } else if ( value === undefined || type === "boolean" ) {
21869 className = getClass( this );
21870 if ( className ) {
21871
21872 // Store className if set
21873 dataPriv.set( this, "__className__", className );
21874 }
21875
21876 // If the element has a class name or if we're passed `false`,
21877 // then remove the whole classname (if there was one, the above saved it).
21878 // Otherwise bring back whatever was previously saved (if anything),
21879 // falling back to the empty string if nothing was stored.
21880 if ( this.setAttribute ) {
21881 this.setAttribute( "class",
21882 className || value === false ?
21883 "" :
21884 dataPriv.get( this, "__className__" ) || ""
21885 );
21886 }
21887 }
21888 } );
21889 },
21890
21891 hasClass: function( selector ) {
21892 var className, elem,
21893 i = 0;
21894
21895 className = " " + selector + " ";
21896 while ( ( elem = this[ i++ ] ) ) {
21897 if ( elem.nodeType === 1 &&
21898 ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
21899 return true;
21900 }
21901 }
21902
21903 return false;
21904 }
21905 } );
21906
21907
21908
21909
21910 var rreturn = /\r/g;
21911
21912 jQuery.fn.extend( {
21913 val: function( value ) {
21914 var hooks, ret, isFunction,
21915 elem = this[ 0 ];
21916
21917 if ( !arguments.length ) {
21918 if ( elem ) {
21919 hooks = jQuery.valHooks[ elem.type ] ||
21920 jQuery.valHooks[ elem.nodeName.toLowerCase() ];
21921
21922 if ( hooks &&
21923 "get" in hooks &&
21924 ( ret = hooks.get( elem, "value" ) ) !== undefined
21925 ) {
21926 return ret;
21927 }
21928
21929 ret = elem.value;
21930
21931 // Handle most common string cases
21932 if ( typeof ret === "string" ) {
21933 return ret.replace( rreturn, "" );
21934 }
21935
21936 // Handle cases where value is null/undef or number
21937 return ret == null ? "" : ret;
21938 }
21939
21940 return;
21941 }
21942
21943 isFunction = jQuery.isFunction( value );
21944
21945 return this.each( function( i ) {
21946 var val;
21947
21948 if ( this.nodeType !== 1 ) {
21949 return;
21950 }
21951
21952 if ( isFunction ) {
21953 val = value.call( this, i, jQuery( this ).val() );
21954 } else {
21955 val = value;
21956 }
21957
21958 // Treat null/undefined as ""; convert numbers to string
21959 if ( val == null ) {
21960 val = "";
21961
21962 } else if ( typeof val === "number" ) {
21963 val += "";
21964
21965 } else if ( Array.isArray( val ) ) {
21966 val = jQuery.map( val, function( value ) {
21967 return value == null ? "" : value + "";
21968 } );
21969 }
21970
21971 hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
21972
21973 // If set returns undefined, fall back to normal setting
21974 if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
21975 this.value = val;
21976 }
21977 } );
21978 }
21979 } );
21980
21981 jQuery.extend( {
21982 valHooks: {
21983 option: {
21984 get: function( elem ) {
21985
21986 var val = jQuery.find.attr( elem, "value" );
21987 return val != null ?
21988 val :
21989
21990 // Support: IE <=10 - 11 only
21991 // option.text throws exceptions (#14686, #14858)
21992 // Strip and collapse whitespace
21993 // https://html.spec.whatwg.org/#strip-and-collapse-whitespace
21994 stripAndCollapse( jQuery.text( elem ) );
21995 }
21996 },
21997 select: {
21998 get: function( elem ) {
21999 var value, option, i,
22000 options = elem.options,
22001 index = elem.selectedIndex,
22002 one = elem.type === "select-one",
22003 values = one ? null : [],
22004 max = one ? index + 1 : options.length;
22005
22006 if ( index < 0 ) {
22007 i = max;
22008
22009 } else {
22010 i = one ? index : 0;
22011 }
22012
22013 // Loop through all the selected options
22014 for ( ; i < max; i++ ) {
22015 option = options[ i ];
22016
22017 // Support: IE <=9 only
22018 // IE8-9 doesn't update selected after form reset (#2551)
22019 if ( ( option.selected || i === index ) &&
22020
22021 // Don't return options that are disabled or in a disabled optgroup
22022 !option.disabled &&
22023 ( !option.parentNode.disabled ||
22024 !nodeName( option.parentNode, "optgroup" ) ) ) {
22025
22026 // Get the specific value for the option
22027 value = jQuery( option ).val();
22028
22029 // We don't need an array for one selects
22030 if ( one ) {
22031 return value;
22032 }
22033
22034 // Multi-Selects return an array
22035 values.push( value );
22036 }
22037 }
22038
22039 return values;
22040 },
22041
22042 set: function( elem, value ) {
22043 var optionSet, option,
22044 options = elem.options,
22045 values = jQuery.makeArray( value ),
22046 i = options.length;
22047
22048 while ( i-- ) {
22049 option = options[ i ];
22050
22051 /* eslint-disable no-cond-assign */
22052
22053 if ( option.selected =
22054 jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
22055 ) {
22056 optionSet = true;
22057 }
22058
22059 /* eslint-enable no-cond-assign */
22060 }
22061
22062 // Force browsers to behave consistently when non-matching value is set
22063 if ( !optionSet ) {
22064 elem.selectedIndex = -1;
22065 }
22066 return values;
22067 }
22068 }
22069 }
22070 } );
22071
22072 // Radios and checkboxes getter/setter
22073 jQuery.each( [ "radio", "checkbox" ], function() {
22074 jQuery.valHooks[ this ] = {
22075 set: function( elem, value ) {
22076 if ( Array.isArray( value ) ) {
22077 return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
22078 }
22079 }
22080 };
22081 if ( !support.checkOn ) {
22082 jQuery.valHooks[ this ].get = function( elem ) {
22083 return elem.getAttribute( "value" ) === null ? "on" : elem.value;
22084 };
22085 }
22086 } );
22087
22088
22089
22090
22091 // Return jQuery for attributes-only inclusion
22092
22093
22094 var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;
22095
22096 jQuery.extend( jQuery.event, {
22097
22098 trigger: function( event, data, elem, onlyHandlers ) {
22099
22100 var i, cur, tmp, bubbleType, ontype, handle, special,
22101 eventPath = [ elem || document ],
22102 type = hasOwn.call( event, "type" ) ? event.type : event,
22103 namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
22104
22105 cur = tmp = elem = elem || document;
22106
22107 // Don't do events on text and comment nodes
22108 if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
22109 return;
22110 }
22111
22112 // focus/blur morphs to focusin/out; ensure we're not firing them right now
22113 if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
22114 return;
22115 }
22116
22117 if ( type.indexOf( "." ) > -1 ) {
22118
22119 // Namespaced trigger; create a regexp to match event type in handle()
22120 namespaces = type.split( "." );
22121 type = namespaces.shift();
22122 namespaces.sort();
22123 }
22124 ontype = type.indexOf( ":" ) < 0 && "on" + type;
22125
22126 // Caller can pass in a jQuery.Event object, Object, or just an event type string
22127 event = event[ jQuery.expando ] ?
22128 event :
22129 new jQuery.Event( type, typeof event === "object" && event );
22130
22131 // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
22132 event.isTrigger = onlyHandlers ? 2 : 3;
22133 event.namespace = namespaces.join( "." );
22134 event.rnamespace = event.namespace ?
22135 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
22136 null;
22137
22138 // Clean up the event in case it is being reused
22139 event.result = undefined;
22140 if ( !event.target ) {
22141 event.target = elem;
22142 }
22143
22144 // Clone any incoming data and prepend the event, creating the handler arg list
22145 data = data == null ?
22146 [ event ] :
22147 jQuery.makeArray( data, [ event ] );
22148
22149 // Allow special events to draw outside the lines
22150 special = jQuery.event.special[ type ] || {};
22151 if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
22152 return;
22153 }
22154
22155 // Determine event propagation path in advance, per W3C events spec (#9951)
22156 // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
22157 if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
22158
22159 bubbleType = special.delegateType || type;
22160 if ( !rfocusMorph.test( bubbleType + type ) ) {
22161 cur = cur.parentNode;
22162 }
22163 for ( ; cur; cur = cur.parentNode ) {
22164 eventPath.push( cur );
22165 tmp = cur;
22166 }
22167
22168 // Only add window if we got to document (e.g., not plain obj or detached DOM)
22169 if ( tmp === ( elem.ownerDocument || document ) ) {
22170 eventPath.push( tmp.defaultView || tmp.parentWindow || window );
22171 }
22172 }
22173
22174 // Fire handlers on the event path
22175 i = 0;
22176 while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
22177
22178 event.type = i > 1 ?
22179 bubbleType :
22180 special.bindType || type;
22181
22182 // jQuery handler
22183 handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] &&
22184 dataPriv.get( cur, "handle" );
22185 if ( handle ) {
22186 handle.apply( cur, data );
22187 }
22188
22189 // Native handler
22190 handle = ontype && cur[ ontype ];
22191 if ( handle && handle.apply && acceptData( cur ) ) {
22192 event.result = handle.apply( cur, data );
22193 if ( event.result === false ) {
22194 event.preventDefault();
22195 }
22196 }
22197 }
22198 event.type = type;
22199
22200 // If nobody prevented the default action, do it now
22201 if ( !onlyHandlers && !event.isDefaultPrevented() ) {
22202
22203 if ( ( !special._default ||
22204 special._default.apply( eventPath.pop(), data ) === false ) &&
22205 acceptData( elem ) ) {
22206
22207 // Call a native DOM method on the target with the same name as the event.
22208 // Don't do default actions on window, that's where global variables be (#6170)
22209 if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {
22210
22211 // Don't re-trigger an onFOO event when we call its FOO() method
22212 tmp = elem[ ontype ];
22213
22214 if ( tmp ) {
22215 elem[ ontype ] = null;
22216 }
22217
22218 // Prevent re-triggering of the same event, since we already bubbled it above
22219 jQuery.event.triggered = type;
22220 elem[ type ]();
22221 jQuery.event.triggered = undefined;
22222
22223 if ( tmp ) {
22224 elem[ ontype ] = tmp;
22225 }
22226 }
22227 }
22228 }
22229
22230 return event.result;
22231 },
22232
22233 // Piggyback on a donor event to simulate a different one
22234 // Used only for `focus(in | out)` events
22235 simulate: function( type, elem, event ) {
22236 var e = jQuery.extend(
22237 new jQuery.Event(),
22238 event,
22239 {
22240 type: type,
22241 isSimulated: true
22242 }
22243 );
22244
22245 jQuery.event.trigger( e, null, elem );
22246 }
22247
22248 } );
22249
22250 jQuery.fn.extend( {
22251
22252 trigger: function( type, data ) {
22253 return this.each( function() {
22254 jQuery.event.trigger( type, data, this );
22255 } );
22256 },
22257 triggerHandler: function( type, data ) {
22258 var elem = this[ 0 ];
22259 if ( elem ) {
22260 return jQuery.event.trigger( type, data, elem, true );
22261 }
22262 }
22263 } );
22264
22265
22266 jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
22267 "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
22268 "change select submit keydown keypress keyup contextmenu" ).split( " " ),
22269 function( i, name ) {
22270
22271 // Handle event binding
22272 jQuery.fn[ name ] = function( data, fn ) {
22273 return arguments.length > 0 ?
22274 this.on( name, null, data, fn ) :
22275 this.trigger( name );
22276 };
22277 } );
22278
22279 jQuery.fn.extend( {
22280 hover: function( fnOver, fnOut ) {
22281 return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
22282 }
22283 } );
22284
22285
22286
22287
22288 support.focusin = "onfocusin" in window;
22289
22290
22291 // Support: Firefox <=44
22292 // Firefox doesn't have focus(in | out) events
22293 // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
22294 //
22295 // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
22296 // focus(in | out) events fire after focus & blur events,
22297 // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
22298 // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
22299 if ( !support.focusin ) {
22300 jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
22301
22302 // Attach a single capturing handler on the document while someone wants focusin/focusout
22303 var handler = function( event ) {
22304 jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
22305 };
22306
22307 jQuery.event.special[ fix ] = {
22308 setup: function() {
22309 var doc = this.ownerDocument || this,
22310 attaches = dataPriv.access( doc, fix );
22311
22312 if ( !attaches ) {
22313 doc.addEventListener( orig, handler, true );
22314 }
22315 dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
22316 },
22317 teardown: function() {
22318 var doc = this.ownerDocument || this,
22319 attaches = dataPriv.access( doc, fix ) - 1;
22320
22321 if ( !attaches ) {
22322 doc.removeEventListener( orig, handler, true );
22323 dataPriv.remove( doc, fix );
22324
22325 } else {
22326 dataPriv.access( doc, fix, attaches );
22327 }
22328 }
22329 };
22330 } );
22331 }
22332 var location = window.location;
22333
22334 var nonce = jQuery.now();
22335
22336 var rquery = ( /\?/ );
22337
22338
22339
22340 // Cross-browser xml parsing
22341 jQuery.parseXML = function( data ) {
22342 var xml;
22343 if ( !data || typeof data !== "string" ) {
22344 return null;
22345 }
22346
22347 // Support: IE 9 - 11 only
22348 // IE throws on parseFromString with invalid input.
22349 try {
22350 xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
22351 } catch ( e ) {
22352 xml = undefined;
22353 }
22354
22355 if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
22356 jQuery.error( "Invalid XML: " + data );
22357 }
22358 return xml;
22359 };
22360
22361
22362 var
22363 rbracket = /\[\]$/,
22364 rCRLF = /\r?\n/g,
22365 rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
22366 rsubmittable = /^(?:input|select|textarea|keygen)/i;
22367
22368 function buildParams( prefix, obj, traditional, add ) {
22369 var name;
22370
22371 if ( Array.isArray( obj ) ) {
22372
22373 // Serialize array item.
22374 jQuery.each( obj, function( i, v ) {
22375 if ( traditional || rbracket.test( prefix ) ) {
22376
22377 // Treat each array item as a scalar.
22378 add( prefix, v );
22379
22380 } else {
22381
22382 // Item is non-scalar (array or object), encode its numeric index.
22383 buildParams(
22384 prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
22385 v,
22386 traditional,
22387 add
22388 );
22389 }
22390 } );
22391
22392 } else if ( !traditional && jQuery.type( obj ) === "object" ) {
22393
22394 // Serialize object item.
22395 for ( name in obj ) {
22396 buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
22397 }
22398
22399 } else {
22400
22401 // Serialize scalar item.
22402 add( prefix, obj );
22403 }
22404 }
22405
22406 // Serialize an array of form elements or a set of
22407 // key/values into a query string
22408 jQuery.param = function( a, traditional ) {
22409 var prefix,
22410 s = [],
22411 add = function( key, valueOrFunction ) {
22412
22413 // If value is a function, invoke it and use its return value
22414 var value = jQuery.isFunction( valueOrFunction ) ?
22415 valueOrFunction() :
22416 valueOrFunction;
22417
22418 s[ s.length ] = encodeURIComponent( key ) + "=" +
22419 encodeURIComponent( value == null ? "" : value );
22420 };
22421
22422 // If an array was passed in, assume that it is an array of form elements.
22423 if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
22424
22425 // Serialize the form elements
22426 jQuery.each( a, function() {
22427 add( this.name, this.value );
22428 } );
22429
22430 } else {
22431
22432 // If traditional, encode the "old" way (the way 1.3.2 or older
22433 // did it), otherwise encode params recursively.
22434 for ( prefix in a ) {
22435 buildParams( prefix, a[ prefix ], traditional, add );
22436 }
22437 }
22438
22439 // Return the resulting serialization
22440 return s.join( "&" );
22441 };
22442
22443 jQuery.fn.extend( {
22444 serialize: function() {
22445 return jQuery.param( this.serializeArray() );
22446 },
22447 serializeArray: function() {
22448 return this.map( function() {
22449
22450 // Can add propHook for "elements" to filter or add form elements
22451 var elements = jQuery.prop( this, "elements" );
22452 return elements ? jQuery.makeArray( elements ) : this;
22453 } )
22454 .filter( function() {
22455 var type = this.type;
22456
22457 // Use .is( ":disabled" ) so that fieldset[disabled] works
22458 return this.name && !jQuery( this ).is( ":disabled" ) &&
22459 rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
22460 ( this.checked || !rcheckableType.test( type ) );
22461 } )
22462 .map( function( i, elem ) {
22463 var val = jQuery( this ).val();
22464
22465 if ( val == null ) {
22466 return null;
22467 }
22468
22469 if ( Array.isArray( val ) ) {
22470 return jQuery.map( val, function( val ) {
22471 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
22472 } );
22473 }
22474
22475 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
22476 } ).get();
22477 }
22478 } );
22479
22480
22481 var
22482 r20 = /%20/g,
22483 rhash = /#.*$/,
22484 rantiCache = /([?&])_=[^&]*/,
22485 rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
22486
22487 // #7653, #8125, #8152: local protocol detection
22488 rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
22489 rnoContent = /^(?:GET|HEAD)$/,
22490 rprotocol = /^\/\//,
22491
22492 /* Prefilters
22493 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
22494 * 2) These are called:
22495 * - BEFORE asking for a transport
22496 * - AFTER param serialization (s.data is a string if s.processData is true)
22497 * 3) key is the dataType
22498 * 4) the catchall symbol "*" can be used
22499 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
22500 */
22501 prefilters = {},
22502
22503 /* Transports bindings
22504 * 1) key is the dataType
22505 * 2) the catchall symbol "*" can be used
22506 * 3) selection will start with transport dataType and THEN go to "*" if needed
22507 */
22508 transports = {},
22509
22510 // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
22511 allTypes = "*/".concat( "*" ),
22512
22513 // Anchor tag for parsing the document origin
22514 originAnchor = document.createElement( "a" );
22515 originAnchor.href = location.href;
22516
22517 // Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
22518 function addToPrefiltersOrTransports( structure ) {
22519
22520 // dataTypeExpression is optional and defaults to "*"
22521 return function( dataTypeExpression, func ) {
22522
22523 if ( typeof dataTypeExpression !== "string" ) {
22524 func = dataTypeExpression;
22525 dataTypeExpression = "*";
22526 }
22527
22528 var dataType,
22529 i = 0,
22530 dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];
22531
22532 if ( jQuery.isFunction( func ) ) {
22533
22534 // For each dataType in the dataTypeExpression
22535 while ( ( dataType = dataTypes[ i++ ] ) ) {
22536
22537 // Prepend if requested
22538 if ( dataType[ 0 ] === "+" ) {
22539 dataType = dataType.slice( 1 ) || "*";
22540 ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
22541
22542 // Otherwise append
22543 } else {
22544 ( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
22545 }
22546 }
22547 }
22548 };
22549 }
22550
22551 // Base inspection function for prefilters and transports
22552 function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
22553
22554 var inspected = {},
22555 seekingTransport = ( structure === transports );
22556
22557 function inspect( dataType ) {
22558 var selected;
22559 inspected[ dataType ] = true;
22560 jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
22561 var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
22562 if ( typeof dataTypeOrTransport === "string" &&
22563 !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
22564
22565 options.dataTypes.unshift( dataTypeOrTransport );
22566 inspect( dataTypeOrTransport );
22567 return false;
22568 } else if ( seekingTransport ) {
22569 return !( selected = dataTypeOrTransport );
22570 }
22571 } );
22572 return selected;
22573 }
22574
22575 return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
22576 }
22577
22578 // A special extend for ajax options
22579 // that takes "flat" options (not to be deep extended)
22580 // Fixes #9887
22581 function ajaxExtend( target, src ) {
22582 var key, deep,
22583 flatOptions = jQuery.ajaxSettings.flatOptions || {};
22584
22585 for ( key in src ) {
22586 if ( src[ key ] !== undefined ) {
22587 ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
22588 }
22589 }
22590 if ( deep ) {
22591 jQuery.extend( true, target, deep );
22592 }
22593
22594 return target;
22595 }
22596
22597 /* Handles responses to an ajax request:
22598 * - finds the right dataType (mediates between content-type and expected dataType)
22599 * - returns the corresponding response
22600 */
22601 function ajaxHandleResponses( s, jqXHR, responses ) {
22602
22603 var ct, type, finalDataType, firstDataType,
22604 contents = s.contents,
22605 dataTypes = s.dataTypes;
22606
22607 // Remove auto dataType and get content-type in the process
22608 while ( dataTypes[ 0 ] === "*" ) {
22609 dataTypes.shift();
22610 if ( ct === undefined ) {
22611 ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
22612 }
22613 }
22614
22615 // Check if we're dealing with a known content-type
22616 if ( ct ) {
22617 for ( type in contents ) {
22618 if ( contents[ type ] && contents[ type ].test( ct ) ) {
22619 dataTypes.unshift( type );
22620 break;
22621 }
22622 }
22623 }
22624
22625 // Check to see if we have a response for the expected dataType
22626 if ( dataTypes[ 0 ] in responses ) {
22627 finalDataType = dataTypes[ 0 ];
22628 } else {
22629
22630 // Try convertible dataTypes
22631 for ( type in responses ) {
22632 if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
22633 finalDataType = type;
22634 break;
22635 }
22636 if ( !firstDataType ) {
22637 firstDataType = type;
22638 }
22639 }
22640
22641 // Or just use first one
22642 finalDataType = finalDataType || firstDataType;
22643 }
22644
22645 // If we found a dataType
22646 // We add the dataType to the list if needed
22647 // and return the corresponding response
22648 if ( finalDataType ) {
22649 if ( finalDataType !== dataTypes[ 0 ] ) {
22650 dataTypes.unshift( finalDataType );
22651 }
22652 return responses[ finalDataType ];
22653 }
22654 }
22655
22656 /* Chain conversions given the request and the original response
22657 * Also sets the responseXXX fields on the jqXHR instance
22658 */
22659 function ajaxConvert( s, response, jqXHR, isSuccess ) {
22660 var conv2, current, conv, tmp, prev,
22661 converters = {},
22662
22663 // Work with a copy of dataTypes in case we need to modify it for conversion
22664 dataTypes = s.dataTypes.slice();
22665
22666 // Create converters map with lowercased keys
22667 if ( dataTypes[ 1 ] ) {
22668 for ( conv in s.converters ) {
22669 converters[ conv.toLowerCase() ] = s.converters[ conv ];
22670 }
22671 }
22672
22673 current = dataTypes.shift();
22674
22675 // Convert to each sequential dataType
22676 while ( current ) {
22677
22678 if ( s.responseFields[ current ] ) {
22679 jqXHR[ s.responseFields[ current ] ] = response;
22680 }
22681
22682 // Apply the dataFilter if provided
22683 if ( !prev && isSuccess && s.dataFilter ) {
22684 response = s.dataFilter( response, s.dataType );
22685 }
22686
22687 prev = current;
22688 current = dataTypes.shift();
22689
22690 if ( current ) {
22691
22692 // There's only work to do if current dataType is non-auto
22693 if ( current === "*" ) {
22694
22695 current = prev;
22696
22697 // Convert response if prev dataType is non-auto and differs from current
22698 } else if ( prev !== "*" && prev !== current ) {
22699
22700 // Seek a direct converter
22701 conv = converters[ prev + " " + current ] || converters[ "* " + current ];
22702
22703 // If none found, seek a pair
22704 if ( !conv ) {
22705 for ( conv2 in converters ) {
22706
22707 // If conv2 outputs current
22708 tmp = conv2.split( " " );
22709 if ( tmp[ 1 ] === current ) {
22710
22711 // If prev can be converted to accepted input
22712 conv = converters[ prev + " " + tmp[ 0 ] ] ||
22713 converters[ "* " + tmp[ 0 ] ];
22714 if ( conv ) {
22715
22716 // Condense equivalence converters
22717 if ( conv === true ) {
22718 conv = converters[ conv2 ];
22719
22720 // Otherwise, insert the intermediate dataType
22721 } else if ( converters[ conv2 ] !== true ) {
22722 current = tmp[ 0 ];
22723 dataTypes.unshift( tmp[ 1 ] );
22724 }
22725 break;
22726 }
22727 }
22728 }
22729 }
22730
22731 // Apply converter (if not an equivalence)
22732 if ( conv !== true ) {
22733
22734 // Unless errors are allowed to bubble, catch and return them
22735 if ( conv && s.throws ) {
22736 response = conv( response );
22737 } else {
22738 try {
22739 response = conv( response );
22740 } catch ( e ) {
22741 return {
22742 state: "parsererror",
22743 error: conv ? e : "No conversion from " + prev + " to " + current
22744 };
22745 }
22746 }
22747 }
22748 }
22749 }
22750 }
22751
22752 return { state: "success", data: response };
22753 }
22754
22755 jQuery.extend( {
22756
22757 // Counter for holding the number of active queries
22758 active: 0,
22759
22760 // Last-Modified header cache for next request
22761 lastModified: {},
22762 etag: {},
22763
22764 ajaxSettings: {
22765 url: location.href,
22766 type: "GET",
22767 isLocal: rlocalProtocol.test( location.protocol ),
22768 global: true,
22769 processData: true,
22770 async: true,
22771 contentType: "application/x-www-form-urlencoded; charset=UTF-8",
22772
22773 /*
22774 timeout: 0,
22775 data: null,
22776 dataType: null,
22777 username: null,
22778 password: null,
22779 cache: null,
22780 throws: false,
22781 traditional: false,
22782 headers: {},
22783 */
22784
22785 accepts: {
22786 "*": allTypes,
22787 text: "text/plain",
22788 html: "text/html",
22789 xml: "application/xml, text/xml",
22790 json: "application/json, text/javascript"
22791 },
22792
22793 contents: {
22794 xml: /\bxml\b/,
22795 html: /\bhtml/,
22796 json: /\bjson\b/
22797 },
22798
22799 responseFields: {
22800 xml: "responseXML",
22801 text: "responseText",
22802 json: "responseJSON"
22803 },
22804
22805 // Data converters
22806 // Keys separate source (or catchall "*") and destination types with a single space
22807 converters: {
22808
22809 // Convert anything to text
22810 "* text": String,
22811
22812 // Text to html (true = no transformation)
22813 "text html": true,
22814
22815 // Evaluate text as a json expression
22816 "text json": JSON.parse,
22817
22818 // Parse text as xml
22819 "text xml": jQuery.parseXML
22820 },
22821
22822 // For options that shouldn't be deep extended:
22823 // you can add your own custom options here if
22824 // and when you create one that shouldn't be
22825 // deep extended (see ajaxExtend)
22826 flatOptions: {
22827 url: true,
22828 context: true
22829 }
22830 },
22831
22832 // Creates a full fledged settings object into target
22833 // with both ajaxSettings and settings fields.
22834 // If target is omitted, writes into ajaxSettings.
22835 ajaxSetup: function( target, settings ) {
22836 return settings ?
22837
22838 // Building a settings object
22839 ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
22840
22841 // Extending ajaxSettings
22842 ajaxExtend( jQuery.ajaxSettings, target );
22843 },
22844
22845 ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
22846 ajaxTransport: addToPrefiltersOrTransports( transports ),
22847
22848 // Main method
22849 ajax: function( url, options ) {
22850
22851 // If url is an object, simulate pre-1.5 signature
22852 if ( typeof url === "object" ) {
22853 options = url;
22854 url = undefined;
22855 }
22856
22857 // Force options to be an object
22858 options = options || {};
22859
22860 var transport,
22861
22862 // URL without anti-cache param
22863 cacheURL,
22864
22865 // Response headers
22866 responseHeadersString,
22867 responseHeaders,
22868
22869 // timeout handle
22870 timeoutTimer,
22871
22872 // Url cleanup var
22873 urlAnchor,
22874
22875 // Request state (becomes false upon send and true upon completion)
22876 completed,
22877
22878 // To know if global events are to be dispatched
22879 fireGlobals,
22880
22881 // Loop variable
22882 i,
22883
22884 // uncached part of the url
22885 uncached,
22886
22887 // Create the final options object
22888 s = jQuery.ajaxSetup( {}, options ),
22889
22890 // Callbacks context
22891 callbackContext = s.context || s,
22892
22893 // Context for global events is callbackContext if it is a DOM node or jQuery collection
22894 globalEventContext = s.context &&
22895 ( callbackContext.nodeType || callbackContext.jquery ) ?
22896 jQuery( callbackContext ) :
22897 jQuery.event,
22898
22899 // Deferreds
22900 deferred = jQuery.Deferred(),
22901 completeDeferred = jQuery.Callbacks( "once memory" ),
22902
22903 // Status-dependent callbacks
22904 statusCode = s.statusCode || {},
22905
22906 // Headers (they are sent all at once)
22907 requestHeaders = {},
22908 requestHeadersNames = {},
22909
22910 // Default abort message
22911 strAbort = "canceled",
22912
22913 // Fake xhr
22914 jqXHR = {
22915 readyState: 0,
22916
22917 // Builds headers hashtable if needed
22918 getResponseHeader: function( key ) {
22919 var match;
22920 if ( completed ) {
22921 if ( !responseHeaders ) {
22922 responseHeaders = {};
22923 while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
22924 responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];
22925 }
22926 }
22927 match = responseHeaders[ key.toLowerCase() ];
22928 }
22929 return match == null ? null : match;
22930 },
22931
22932 // Raw string
22933 getAllResponseHeaders: function() {
22934 return completed ? responseHeadersString : null;
22935 },
22936
22937 // Caches the header
22938 setRequestHeader: function( name, value ) {
22939 if ( completed == null ) {
22940 name = requestHeadersNames[ name.toLowerCase() ] =
22941 requestHeadersNames[ name.toLowerCase() ] || name;
22942 requestHeaders[ name ] = value;
22943 }
22944 return this;
22945 },
22946
22947 // Overrides response content-type header
22948 overrideMimeType: function( type ) {
22949 if ( completed == null ) {
22950 s.mimeType = type;
22951 }
22952 return this;
22953 },
22954
22955 // Status-dependent callbacks
22956 statusCode: function( map ) {
22957 var code;
22958 if ( map ) {
22959 if ( completed ) {
22960
22961 // Execute the appropriate callbacks
22962 jqXHR.always( map[ jqXHR.status ] );
22963 } else {
22964
22965 // Lazy-add the new callbacks in a way that preserves old ones
22966 for ( code in map ) {
22967 statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
22968 }
22969 }
22970 }
22971 return this;
22972 },
22973
22974 // Cancel the request
22975 abort: function( statusText ) {
22976 var finalText = statusText || strAbort;
22977 if ( transport ) {
22978 transport.abort( finalText );
22979 }
22980 done( 0, finalText );
22981 return this;
22982 }
22983 };
22984
22985 // Attach deferreds
22986 deferred.promise( jqXHR );
22987
22988 // Add protocol if not provided (prefilters might expect it)
22989 // Handle falsy url in the settings object (#10093: consistency with old signature)
22990 // We also use the url parameter if available
22991 s.url = ( ( url || s.url || location.href ) + "" )
22992 .replace( rprotocol, location.protocol + "//" );
22993
22994 // Alias method option to type as per ticket #12004
22995 s.type = options.method || options.type || s.method || s.type;
22996
22997 // Extract dataTypes list
22998 s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];
22999
23000 // A cross-domain request is in order when the origin doesn't match the current origin.
23001 if ( s.crossDomain == null ) {
23002 urlAnchor = document.createElement( "a" );
23003
23004 // Support: IE <=8 - 11, Edge 12 - 13
23005 // IE throws exception on accessing the href property if url is malformed,
23006 // e.g. http://example.com:80x/
23007 try {
23008 urlAnchor.href = s.url;
23009
23010 // Support: IE <=8 - 11 only
23011 // Anchor's host property isn't correctly set when s.url is relative
23012 urlAnchor.href = urlAnchor.href;
23013 s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
23014 urlAnchor.protocol + "//" + urlAnchor.host;
23015 } catch ( e ) {
23016
23017 // If there is an error parsing the URL, assume it is crossDomain,
23018 // it can be rejected by the transport if it is invalid
23019 s.crossDomain = true;
23020 }
23021 }
23022
23023 // Convert data if not already a string
23024 if ( s.data && s.processData && typeof s.data !== "string" ) {
23025 s.data = jQuery.param( s.data, s.traditional );
23026 }
23027
23028 // Apply prefilters
23029 inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
23030
23031 // If request was aborted inside a prefilter, stop there
23032 if ( completed ) {
23033 return jqXHR;
23034 }
23035
23036 // We can fire global events as of now if asked to
23037 // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
23038 fireGlobals = jQuery.event && s.global;
23039
23040 // Watch for a new set of requests
23041 if ( fireGlobals && jQuery.active++ === 0 ) {
23042 jQuery.event.trigger( "ajaxStart" );
23043 }
23044
23045 // Uppercase the type
23046 s.type = s.type.toUpperCase();
23047
23048 // Determine if request has content
23049 s.hasContent = !rnoContent.test( s.type );
23050
23051 // Save the URL in case we're toying with the If-Modified-Since
23052 // and/or If-None-Match header later on
23053 // Remove hash to simplify url manipulation
23054 cacheURL = s.url.replace( rhash, "" );
23055
23056 // More options handling for requests with no content
23057 if ( !s.hasContent ) {
23058
23059 // Remember the hash so we can put it back
23060 uncached = s.url.slice( cacheURL.length );
23061
23062 // If data is available, append data to url
23063 if ( s.data ) {
23064 cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
23065
23066 // #9682: remove data so that it's not used in an eventual retry
23067 delete s.data;
23068 }
23069
23070 // Add or update anti-cache param if needed
23071 if ( s.cache === false ) {
23072 cacheURL = cacheURL.replace( rantiCache, "$1" );
23073 uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached;
23074 }
23075
23076 // Put hash and anti-cache on the URL that will be requested (gh-1732)
23077 s.url = cacheURL + uncached;
23078
23079 // Change '%20' to '+' if this is encoded form body content (gh-2658)
23080 } else if ( s.data && s.processData &&
23081 ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
23082 s.data = s.data.replace( r20, "+" );
23083 }
23084
23085 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
23086 if ( s.ifModified ) {
23087 if ( jQuery.lastModified[ cacheURL ] ) {
23088 jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
23089 }
23090 if ( jQuery.etag[ cacheURL ] ) {
23091 jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
23092 }
23093 }
23094
23095 // Set the correct header, if data is being sent
23096 if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
23097 jqXHR.setRequestHeader( "Content-Type", s.contentType );
23098 }
23099
23100 // Set the Accepts header for the server, depending on the dataType
23101 jqXHR.setRequestHeader(
23102 "Accept",
23103 s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
23104 s.accepts[ s.dataTypes[ 0 ] ] +
23105 ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
23106 s.accepts[ "*" ]
23107 );
23108
23109 // Check for headers option
23110 for ( i in s.headers ) {
23111 jqXHR.setRequestHeader( i, s.headers[ i ] );
23112 }
23113
23114 // Allow custom headers/mimetypes and early abort
23115 if ( s.beforeSend &&
23116 ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
23117
23118 // Abort if not done already and return
23119 return jqXHR.abort();
23120 }
23121
23122 // Aborting is no longer a cancellation
23123 strAbort = "abort";
23124
23125 // Install callbacks on deferreds
23126 completeDeferred.add( s.complete );
23127 jqXHR.done( s.success );
23128 jqXHR.fail( s.error );
23129
23130 // Get transport
23131 transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
23132
23133 // If no transport, we auto-abort
23134 if ( !transport ) {
23135 done( -1, "No Transport" );
23136 } else {
23137 jqXHR.readyState = 1;
23138
23139 // Send global event
23140 if ( fireGlobals ) {
23141 globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
23142 }
23143
23144 // If request was aborted inside ajaxSend, stop there
23145 if ( completed ) {
23146 return jqXHR;
23147 }
23148
23149 // Timeout
23150 if ( s.async && s.timeout > 0 ) {
23151 timeoutTimer = window.setTimeout( function() {
23152 jqXHR.abort( "timeout" );
23153 }, s.timeout );
23154 }
23155
23156 try {
23157 completed = false;
23158 transport.send( requestHeaders, done );
23159 } catch ( e ) {
23160
23161 // Rethrow post-completion exceptions
23162 if ( completed ) {
23163 throw e;
23164 }
23165
23166 // Propagate others as results
23167 done( -1, e );
23168 }
23169 }
23170
23171 // Callback for when everything is done
23172 function done( status, nativeStatusText, responses, headers ) {
23173 var isSuccess, success, error, response, modified,
23174 statusText = nativeStatusText;
23175
23176 // Ignore repeat invocations
23177 if ( completed ) {
23178 return;
23179 }
23180
23181 completed = true;
23182
23183 // Clear timeout if it exists
23184 if ( timeoutTimer ) {
23185 window.clearTimeout( timeoutTimer );
23186 }
23187
23188 // Dereference transport for early garbage collection
23189 // (no matter how long the jqXHR object will be used)
23190 transport = undefined;
23191
23192 // Cache response headers
23193 responseHeadersString = headers || "";
23194
23195 // Set readyState
23196 jqXHR.readyState = status > 0 ? 4 : 0;
23197
23198 // Determine if successful
23199 isSuccess = status >= 200 && status < 300 || status === 304;
23200
23201 // Get response data
23202 if ( responses ) {
23203 response = ajaxHandleResponses( s, jqXHR, responses );
23204 }
23205
23206 // Convert no matter what (that way responseXXX fields are always set)
23207 response = ajaxConvert( s, response, jqXHR, isSuccess );
23208
23209 // If successful, handle type chaining
23210 if ( isSuccess ) {
23211
23212 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
23213 if ( s.ifModified ) {
23214 modified = jqXHR.getResponseHeader( "Last-Modified" );
23215 if ( modified ) {
23216 jQuery.lastModified[ cacheURL ] = modified;
23217 }
23218 modified = jqXHR.getResponseHeader( "etag" );
23219 if ( modified ) {
23220 jQuery.etag[ cacheURL ] = modified;
23221 }
23222 }
23223
23224 // if no content
23225 if ( status === 204 || s.type === "HEAD" ) {
23226 statusText = "nocontent";
23227
23228 // if not modified
23229 } else if ( status === 304 ) {
23230 statusText = "notmodified";
23231
23232 // If we have data, let's convert it
23233 } else {
23234 statusText = response.state;
23235 success = response.data;
23236 error = response.error;
23237 isSuccess = !error;
23238 }
23239 } else {
23240
23241 // Extract error from statusText and normalize for non-aborts
23242 error = statusText;
23243 if ( status || !statusText ) {
23244 statusText = "error";
23245 if ( status < 0 ) {
23246 status = 0;
23247 }
23248 }
23249 }
23250
23251 // Set data for the fake xhr object
23252 jqXHR.status = status;
23253 jqXHR.statusText = ( nativeStatusText || statusText ) + "";
23254
23255 // Success/Error
23256 if ( isSuccess ) {
23257 deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
23258 } else {
23259 deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
23260 }
23261
23262 // Status-dependent callbacks
23263 jqXHR.statusCode( statusCode );
23264 statusCode = undefined;
23265
23266 if ( fireGlobals ) {
23267 globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
23268 [ jqXHR, s, isSuccess ? success : error ] );
23269 }
23270
23271 // Complete
23272 completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
23273
23274 if ( fireGlobals ) {
23275 globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
23276
23277 // Handle the global AJAX counter
23278 if ( !( --jQuery.active ) ) {
23279 jQuery.event.trigger( "ajaxStop" );
23280 }
23281 }
23282 }
23283
23284 return jqXHR;
23285 },
23286
23287 getJSON: function( url, data, callback ) {
23288 return jQuery.get( url, data, callback, "json" );
23289 },
23290
23291 getScript: function( url, callback ) {
23292 return jQuery.get( url, undefined, callback, "script" );
23293 }
23294 } );
23295
23296 jQuery.each( [ "get", "post" ], function( i, method ) {
23297 jQuery[ method ] = function( url, data, callback, type ) {
23298
23299 // Shift arguments if data argument was omitted
23300 if ( jQuery.isFunction( data ) ) {
23301 type = type || callback;
23302 callback = data;
23303 data = undefined;
23304 }
23305
23306 // The url can be an options object (which then must have .url)
23307 return jQuery.ajax( jQuery.extend( {
23308 url: url,
23309 type: method,
23310 dataType: type,
23311 data: data,
23312 success: callback
23313 }, jQuery.isPlainObject( url ) && url ) );
23314 };
23315 } );
23316
23317
23318 jQuery._evalUrl = function( url ) {
23319 return jQuery.ajax( {
23320 url: url,
23321
23322 // Make this explicit, since user can override this through ajaxSetup (#11264)
23323 type: "GET",
23324 dataType: "script",
23325 cache: true,
23326 async: false,
23327 global: false,
23328 "throws": true
23329 } );
23330 };
23331
23332
23333 jQuery.fn.extend( {
23334 wrapAll: function( html ) {
23335 var wrap;
23336
23337 if ( this[ 0 ] ) {
23338 if ( jQuery.isFunction( html ) ) {
23339 html = html.call( this[ 0 ] );
23340 }
23341
23342 // The elements to wrap the target around
23343 wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
23344
23345 if ( this[ 0 ].parentNode ) {
23346 wrap.insertBefore( this[ 0 ] );
23347 }
23348
23349 wrap.map( function() {
23350 var elem = this;
23351
23352 while ( elem.firstElementChild ) {
23353 elem = elem.firstElementChild;
23354 }
23355
23356 return elem;
23357 } ).append( this );
23358 }
23359
23360 return this;
23361 },
23362
23363 wrapInner: function( html ) {
23364 if ( jQuery.isFunction( html ) ) {
23365 return this.each( function( i ) {
23366 jQuery( this ).wrapInner( html.call( this, i ) );
23367 } );
23368 }
23369
23370 return this.each( function() {
23371 var self = jQuery( this ),
23372 contents = self.contents();
23373
23374 if ( contents.length ) {
23375 contents.wrapAll( html );
23376
23377 } else {
23378 self.append( html );
23379 }
23380 } );
23381 },
23382
23383 wrap: function( html ) {
23384 var isFunction = jQuery.isFunction( html );
23385
23386 return this.each( function( i ) {
23387 jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );
23388 } );
23389 },
23390
23391 unwrap: function( selector ) {
23392 this.parent( selector ).not( "body" ).each( function() {
23393 jQuery( this ).replaceWith( this.childNodes );
23394 } );
23395 return this;
23396 }
23397 } );
23398
23399
23400 jQuery.expr.pseudos.hidden = function( elem ) {
23401 return !jQuery.expr.pseudos.visible( elem );
23402 };
23403 jQuery.expr.pseudos.visible = function( elem ) {
23404 return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
23405 };
23406
23407
23408
23409
23410 jQuery.ajaxSettings.xhr = function() {
23411 try {
23412 return new window.XMLHttpRequest();
23413 } catch ( e ) {}
23414 };
23415
23416 var xhrSuccessStatus = {
23417
23418 // File protocol always yields status code 0, assume 200
23419 0: 200,
23420
23421 // Support: IE <=9 only
23422 // #1450: sometimes IE returns 1223 when it should be 204
23423 1223: 204
23424 },
23425 xhrSupported = jQuery.ajaxSettings.xhr();
23426
23427 support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
23428 support.ajax = xhrSupported = !!xhrSupported;
23429
23430 jQuery.ajaxTransport( function( options ) {
23431 var callback, errorCallback;
23432
23433 // Cross domain only allowed if supported through XMLHttpRequest
23434 if ( support.cors || xhrSupported && !options.crossDomain ) {
23435 return {
23436 send: function( headers, complete ) {
23437 var i,
23438 xhr = options.xhr();
23439
23440 xhr.open(
23441 options.type,
23442 options.url,
23443 options.async,
23444 options.username,
23445 options.password
23446 );
23447
23448 // Apply custom fields if provided
23449 if ( options.xhrFields ) {
23450 for ( i in options.xhrFields ) {
23451 xhr[ i ] = options.xhrFields[ i ];
23452 }
23453 }
23454
23455 // Override mime type if needed
23456 if ( options.mimeType && xhr.overrideMimeType ) {
23457 xhr.overrideMimeType( options.mimeType );
23458 }
23459
23460 // X-Requested-With header
23461 // For cross-domain requests, seeing as conditions for a preflight are
23462 // akin to a jigsaw puzzle, we simply never set it to be sure.
23463 // (it can always be set on a per-request basis or even using ajaxSetup)
23464 // For same-domain requests, won't change header if already provided.
23465 if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
23466 headers[ "X-Requested-With" ] = "XMLHttpRequest";
23467 }
23468
23469 // Set headers
23470 for ( i in headers ) {
23471 xhr.setRequestHeader( i, headers[ i ] );
23472 }
23473
23474 // Callback
23475 callback = function( type ) {
23476 return function() {
23477 if ( callback ) {
23478 callback = errorCallback = xhr.onload =
23479 xhr.onerror = xhr.onabort = xhr.onreadystatechange = null;
23480
23481 if ( type === "abort" ) {
23482 xhr.abort();
23483 } else if ( type === "error" ) {
23484
23485 // Support: IE <=9 only
23486 // On a manual native abort, IE9 throws
23487 // errors on any property access that is not readyState
23488 if ( typeof xhr.status !== "number" ) {
23489 complete( 0, "error" );
23490 } else {
23491 complete(
23492
23493 // File: protocol always yields status 0; see #8605, #14207
23494 xhr.status,
23495 xhr.statusText
23496 );
23497 }
23498 } else {
23499 complete(
23500 xhrSuccessStatus[ xhr.status ] || xhr.status,
23501 xhr.statusText,
23502
23503 // Support: IE <=9 only
23504 // IE9 has no XHR2 but throws on binary (trac-11426)
23505 // For XHR2 non-text, let the caller handle it (gh-2498)
23506 ( xhr.responseType || "text" ) !== "text" ||
23507 typeof xhr.responseText !== "string" ?
23508 { binary: xhr.response } :
23509 { text: xhr.responseText },
23510 xhr.getAllResponseHeaders()
23511 );
23512 }
23513 }
23514 };
23515 };
23516
23517 // Listen to events
23518 xhr.onload = callback();
23519 errorCallback = xhr.onerror = callback( "error" );
23520
23521 // Support: IE 9 only
23522 // Use onreadystatechange to replace onabort
23523 // to handle uncaught aborts
23524 if ( xhr.onabort !== undefined ) {
23525 xhr.onabort = errorCallback;
23526 } else {
23527 xhr.onreadystatechange = function() {
23528
23529 // Check readyState before timeout as it changes
23530 if ( xhr.readyState === 4 ) {
23531
23532 // Allow onerror to be called first,
23533 // but that will not handle a native abort
23534 // Also, save errorCallback to a variable
23535 // as xhr.onerror cannot be accessed
23536 window.setTimeout( function() {
23537 if ( callback ) {
23538 errorCallback();
23539 }
23540 } );
23541 }
23542 };
23543 }
23544
23545 // Create the abort callback
23546 callback = callback( "abort" );
23547
23548 try {
23549
23550 // Do send the request (this may raise an exception)
23551 xhr.send( options.hasContent && options.data || null );
23552 } catch ( e ) {
23553
23554 // #14683: Only rethrow if this hasn't been notified as an error yet
23555 if ( callback ) {
23556 throw e;
23557 }
23558 }
23559 },
23560
23561 abort: function() {
23562 if ( callback ) {
23563 callback();
23564 }
23565 }
23566 };
23567 }
23568 } );
23569
23570
23571
23572
23573 // Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
23574 jQuery.ajaxPrefilter( function( s ) {
23575 if ( s.crossDomain ) {
23576 s.contents.script = false;
23577 }
23578 } );
23579
23580 // Install script dataType
23581 jQuery.ajaxSetup( {
23582 accepts: {
23583 script: "text/javascript, application/javascript, " +
23584 "application/ecmascript, application/x-ecmascript"
23585 },
23586 contents: {
23587 script: /\b(?:java|ecma)script\b/
23588 },
23589 converters: {
23590 "text script": function( text ) {
23591 jQuery.globalEval( text );
23592 return text;
23593 }
23594 }
23595 } );
23596
23597 // Handle cache's special case and crossDomain
23598 jQuery.ajaxPrefilter( "script", function( s ) {
23599 if ( s.cache === undefined ) {
23600 s.cache = false;
23601 }
23602 if ( s.crossDomain ) {
23603 s.type = "GET";
23604 }
23605 } );
23606
23607 // Bind script tag hack transport
23608 jQuery.ajaxTransport( "script", function( s ) {
23609
23610 // This transport only deals with cross domain requests
23611 if ( s.crossDomain ) {
23612 var script, callback;
23613 return {
23614 send: function( _, complete ) {
23615 script = jQuery( "<script>" ).prop( {
23616 charset: s.scriptCharset,
23617 src: s.url
23618 } ).on(
23619 "load error",
23620 callback = function( evt ) {
23621 script.remove();
23622 callback = null;
23623 if ( evt ) {
23624 complete( evt.type === "error" ? 404 : 200, evt.type );
23625 }
23626 }
23627 );
23628
23629 // Use native DOM manipulation to avoid our domManip AJAX trickery
23630 document.head.appendChild( script[ 0 ] );
23631 },
23632 abort: function() {
23633 if ( callback ) {
23634 callback();
23635 }
23636 }
23637 };
23638 }
23639 } );
23640
23641
23642
23643
23644 var oldCallbacks = [],
23645 rjsonp = /(=)\?(?=&|$)|\?\?/;
23646
23647 // Default jsonp settings
23648 jQuery.ajaxSetup( {
23649 jsonp: "callback",
23650 jsonpCallback: function() {
23651 var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
23652 this[ callback ] = true;
23653 return callback;
23654 }
23655 } );
23656
23657 // Detect, normalize options and install callbacks for jsonp requests
23658 jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
23659
23660 var callbackName, overwritten, responseContainer,
23661 jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
23662 "url" :
23663 typeof s.data === "string" &&
23664 ( s.contentType || "" )
23665 .indexOf( "application/x-www-form-urlencoded" ) === 0 &&
23666 rjsonp.test( s.data ) && "data"
23667 );
23668
23669 // Handle iff the expected data type is "jsonp" or we have a parameter to set
23670 if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
23671
23672 // Get callback name, remembering preexisting value associated with it
23673 callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
23674 s.jsonpCallback() :
23675 s.jsonpCallback;
23676
23677 // Insert callback into url or form data
23678 if ( jsonProp ) {
23679 s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
23680 } else if ( s.jsonp !== false ) {
23681 s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
23682 }
23683
23684 // Use data converter to retrieve json after script execution
23685 s.converters[ "script json" ] = function() {
23686 if ( !responseContainer ) {
23687 jQuery.error( callbackName + " was not called" );
23688 }
23689 return responseContainer[ 0 ];
23690 };
23691
23692 // Force json dataType
23693 s.dataTypes[ 0 ] = "json";
23694
23695 // Install callback
23696 overwritten = window[ callbackName ];
23697 window[ callbackName ] = function() {
23698 responseContainer = arguments;
23699 };
23700
23701 // Clean-up function (fires after converters)
23702 jqXHR.always( function() {
23703
23704 // If previous value didn't exist - remove it
23705 if ( overwritten === undefined ) {
23706 jQuery( window ).removeProp( callbackName );
23707
23708 // Otherwise restore preexisting value
23709 } else {
23710 window[ callbackName ] = overwritten;
23711 }
23712
23713 // Save back as free
23714 if ( s[ callbackName ] ) {
23715
23716 // Make sure that re-using the options doesn't screw things around
23717 s.jsonpCallback = originalSettings.jsonpCallback;
23718
23719 // Save the callback name for future use
23720 oldCallbacks.push( callbackName );
23721 }
23722
23723 // Call if it was a function and we have a response
23724 if ( responseContainer && jQuery.isFunction( overwritten ) ) {
23725 overwritten( responseContainer[ 0 ] );
23726 }
23727
23728 responseContainer = overwritten = undefined;
23729 } );
23730
23731 // Delegate to script
23732 return "script";
23733 }
23734 } );
23735
23736
23737
23738
23739 // Support: Safari 8 only
23740 // In Safari 8 documents created via document.implementation.createHTMLDocument
23741 // collapse sibling forms: the second one becomes a child of the first one.
23742 // Because of that, this security measure has to be disabled in Safari 8.
23743 // https://bugs.webkit.org/show_bug.cgi?id=137337
23744 support.createHTMLDocument = ( function() {
23745 var body = document.implementation.createHTMLDocument( "" ).body;
23746 body.innerHTML = "<form></form><form></form>";
23747 return body.childNodes.length === 2;
23748 } )();
23749
23750
23751 // Argument "data" should be string of html
23752 // context (optional): If specified, the fragment will be created in this context,
23753 // defaults to document
23754 // keepScripts (optional): If true, will include scripts passed in the html string
23755 jQuery.parseHTML = function( data, context, keepScripts ) {
23756 if ( typeof data !== "string" ) {
23757 return [];
23758 }
23759 if ( typeof context === "boolean" ) {
23760 keepScripts = context;
23761 context = false;
23762 }
23763
23764 var base, parsed, scripts;
23765
23766 if ( !context ) {
23767
23768 // Stop scripts or inline event handlers from being executed immediately
23769 // by using document.implementation
23770 if ( support.createHTMLDocument ) {
23771 context = document.implementation.createHTMLDocument( "" );
23772
23773 // Set the base href for the created document
23774 // so any parsed elements with URLs
23775 // are based on the document's URL (gh-2965)
23776 base = context.createElement( "base" );
23777 base.href = document.location.href;
23778 context.head.appendChild( base );
23779 } else {
23780 context = document;
23781 }
23782 }
23783
23784 parsed = rsingleTag.exec( data );
23785 scripts = !keepScripts && [];
23786
23787 // Single tag
23788 if ( parsed ) {
23789 return [ context.createElement( parsed[ 1 ] ) ];
23790 }
23791
23792 parsed = buildFragment( [ data ], context, scripts );
23793
23794 if ( scripts && scripts.length ) {
23795 jQuery( scripts ).remove();
23796 }
23797
23798 return jQuery.merge( [], parsed.childNodes );
23799 };
23800
23801
23802 /**
23803 * Load a url into a page
23804 */
23805 jQuery.fn.load = function( url, params, callback ) {
23806 var selector, type, response,
23807 self = this,
23808 off = url.indexOf( " " );
23809
23810 if ( off > -1 ) {
23811 selector = stripAndCollapse( url.slice( off ) );
23812 url = url.slice( 0, off );
23813 }
23814
23815 // If it's a function
23816 if ( jQuery.isFunction( params ) ) {
23817
23818 // We assume that it's the callback
23819 callback = params;
23820 params = undefined;
23821
23822 // Otherwise, build a param string
23823 } else if ( params && typeof params === "object" ) {
23824 type = "POST";
23825 }
23826
23827 // If we have elements to modify, make the request
23828 if ( self.length > 0 ) {
23829 jQuery.ajax( {
23830 url: url,
23831
23832 // If "type" variable is undefined, then "GET" method will be used.
23833 // Make value of this field explicit since
23834 // user can override it through ajaxSetup method
23835 type: type || "GET",
23836 dataType: "html",
23837 data: params
23838 } ).done( function( responseText ) {
23839
23840 // Save response for use in complete callback
23841 response = arguments;
23842
23843 self.html( selector ?
23844
23845 // If a selector was specified, locate the right elements in a dummy div
23846 // Exclude scripts to avoid IE 'Permission Denied' errors
23847 jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
23848
23849 // Otherwise use the full result
23850 responseText );
23851
23852 // If the request succeeds, this function gets "data", "status", "jqXHR"
23853 // but they are ignored because response was set above.
23854 // If it fails, this function gets "jqXHR", "status", "error"
23855 } ).always( callback && function( jqXHR, status ) {
23856 self.each( function() {
23857 callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
23858 } );
23859 } );
23860 }
23861
23862 return this;
23863 };
23864
23865
23866
23867
23868 // Attach a bunch of functions for handling common AJAX events
23869 jQuery.each( [
23870 "ajaxStart",
23871 "ajaxStop",
23872 "ajaxComplete",
23873 "ajaxError",
23874 "ajaxSuccess",
23875 "ajaxSend"
23876 ], function( i, type ) {
23877 jQuery.fn[ type ] = function( fn ) {
23878 return this.on( type, fn );
23879 };
23880 } );
23881
23882
23883
23884
23885 jQuery.expr.pseudos.animated = function( elem ) {
23886 return jQuery.grep( jQuery.timers, function( fn ) {
23887 return elem === fn.elem;
23888 } ).length;
23889 };
23890
23891
23892
23893
23894 jQuery.offset = {
23895 setOffset: function( elem, options, i ) {
23896 var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
23897 position = jQuery.css( elem, "position" ),
23898 curElem = jQuery( elem ),
23899 props = {};
23900
23901 // Set position first, in-case top/left are set even on static elem
23902 if ( position === "static" ) {
23903 elem.style.position = "relative";
23904 }
23905
23906 curOffset = curElem.offset();
23907 curCSSTop = jQuery.css( elem, "top" );
23908 curCSSLeft = jQuery.css( elem, "left" );
23909 calculatePosition = ( position === "absolute" || position === "fixed" ) &&
23910 ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
23911
23912 // Need to be able to calculate position if either
23913 // top or left is auto and position is either absolute or fixed
23914 if ( calculatePosition ) {
23915 curPosition = curElem.position();
23916 curTop = curPosition.top;
23917 curLeft = curPosition.left;
23918
23919 } else {
23920 curTop = parseFloat( curCSSTop ) || 0;
23921 curLeft = parseFloat( curCSSLeft ) || 0;
23922 }
23923
23924 if ( jQuery.isFunction( options ) ) {
23925
23926 // Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
23927 options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
23928 }
23929
23930 if ( options.top != null ) {
23931 props.top = ( options.top - curOffset.top ) + curTop;
23932 }
23933 if ( options.left != null ) {
23934 props.left = ( options.left - curOffset.left ) + curLeft;
23935 }
23936
23937 if ( "using" in options ) {
23938 options.using.call( elem, props );
23939
23940 } else {
23941 curElem.css( props );
23942 }
23943 }
23944 };
23945
23946 jQuery.fn.extend( {
23947 offset: function( options ) {
23948
23949 // Preserve chaining for setter
23950 if ( arguments.length ) {
23951 return options === undefined ?
23952 this :
23953 this.each( function( i ) {
23954 jQuery.offset.setOffset( this, options, i );
23955 } );
23956 }
23957
23958 var doc, docElem, rect, win,
23959 elem = this[ 0 ];
23960
23961 if ( !elem ) {
23962 return;
23963 }
23964
23965 // Return zeros for disconnected and hidden (display: none) elements (gh-2310)
23966 // Support: IE <=11 only
23967 // Running getBoundingClientRect on a
23968 // disconnected node in IE throws an error
23969 if ( !elem.getClientRects().length ) {
23970 return { top: 0, left: 0 };
23971 }
23972
23973 rect = elem.getBoundingClientRect();
23974
23975 doc = elem.ownerDocument;
23976 docElem = doc.documentElement;
23977 win = doc.defaultView;
23978
23979 return {
23980 top: rect.top + win.pageYOffset - docElem.clientTop,
23981 left: rect.left + win.pageXOffset - docElem.clientLeft
23982 };
23983 },
23984
23985 position: function() {
23986 if ( !this[ 0 ] ) {
23987 return;
23988 }
23989
23990 var offsetParent, offset,
23991 elem = this[ 0 ],
23992 parentOffset = { top: 0, left: 0 };
23993
23994 // Fixed elements are offset from window (parentOffset = {top:0, left: 0},
23995 // because it is its only offset parent
23996 if ( jQuery.css( elem, "position" ) === "fixed" ) {
23997
23998 // Assume getBoundingClientRect is there when computed position is fixed
23999 offset = elem.getBoundingClientRect();
24000
24001 } else {
24002
24003 // Get *real* offsetParent
24004 offsetParent = this.offsetParent();
24005
24006 // Get correct offsets
24007 offset = this.offset();
24008 if ( !nodeName( offsetParent[ 0 ], "html" ) ) {
24009 parentOffset = offsetParent.offset();
24010 }
24011
24012 // Add offsetParent borders
24013 parentOffset = {
24014 top: parentOffset.top + jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ),
24015 left: parentOffset.left + jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true )
24016 };
24017 }
24018
24019 // Subtract parent offsets and element margins
24020 return {
24021 top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
24022 left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
24023 };
24024 },
24025
24026 // This method will return documentElement in the following cases:
24027 // 1) For the element inside the iframe without offsetParent, this method will return
24028 // documentElement of the parent window
24029 // 2) For the hidden or detached element
24030 // 3) For body or html element, i.e. in case of the html node - it will return itself
24031 //
24032 // but those exceptions were never presented as a real life use-cases
24033 // and might be considered as more preferable results.
24034 //
24035 // This logic, however, is not guaranteed and can change at any point in the future
24036 offsetParent: function() {
24037 return this.map( function() {
24038 var offsetParent = this.offsetParent;
24039
24040 while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
24041 offsetParent = offsetParent.offsetParent;
24042 }
24043
24044 return offsetParent || documentElement;
24045 } );
24046 }
24047 } );
24048
24049 // Create scrollLeft and scrollTop methods
24050 jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
24051 var top = "pageYOffset" === prop;
24052
24053 jQuery.fn[ method ] = function( val ) {
24054 return access( this, function( elem, method, val ) {
24055
24056 // Coalesce documents and windows
24057 var win;
24058 if ( jQuery.isWindow( elem ) ) {
24059 win = elem;
24060 } else if ( elem.nodeType === 9 ) {
24061 win = elem.defaultView;
24062 }
24063
24064 if ( val === undefined ) {
24065 return win ? win[ prop ] : elem[ method ];
24066 }
24067
24068 if ( win ) {
24069 win.scrollTo(
24070 !top ? val : win.pageXOffset,
24071 top ? val : win.pageYOffset
24072 );
24073
24074 } else {
24075 elem[ method ] = val;
24076 }
24077 }, method, val, arguments.length );
24078 };
24079 } );
24080
24081 // Support: Safari <=7 - 9.1, Chrome <=37 - 49
24082 // Add the top/left cssHooks using jQuery.fn.position
24083 // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
24084 // Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
24085 // getComputedStyle returns percent when specified for top/left/bottom/right;
24086 // rather than make the css module depend on the offset module, just check for it here
24087 jQuery.each( [ "top", "left" ], function( i, prop ) {
24088 jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
24089 function( elem, computed ) {
24090 if ( computed ) {
24091 computed = curCSS( elem, prop );
24092
24093 // If curCSS returns percentage, fallback to offset
24094 return rnumnonpx.test( computed ) ?
24095 jQuery( elem ).position()[ prop ] + "px" :
24096 computed;
24097 }
24098 }
24099 );
24100 } );
24101
24102
24103 // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
24104 jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
24105 jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
24106 function( defaultExtra, funcName ) {
24107
24108 // Margin is only for outerHeight, outerWidth
24109 jQuery.fn[ funcName ] = function( margin, value ) {
24110 var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
24111 extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
24112
24113 return access( this, function( elem, type, value ) {
24114 var doc;
24115
24116 if ( jQuery.isWindow( elem ) ) {
24117
24118 // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
24119 return funcName.indexOf( "outer" ) === 0 ?
24120 elem[ "inner" + name ] :
24121 elem.document.documentElement[ "client" + name ];
24122 }
24123
24124 // Get document width or height
24125 if ( elem.nodeType === 9 ) {
24126 doc = elem.documentElement;
24127
24128 // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
24129 // whichever is greatest
24130 return Math.max(
24131 elem.body[ "scroll" + name ], doc[ "scroll" + name ],
24132 elem.body[ "offset" + name ], doc[ "offset" + name ],
24133 doc[ "client" + name ]
24134 );
24135 }
24136
24137 return value === undefined ?
24138
24139 // Get width or height on the element, requesting but not forcing parseFloat
24140 jQuery.css( elem, type, extra ) :
24141
24142 // Set width or height on the element
24143 jQuery.style( elem, type, value, extra );
24144 }, type, chainable ? margin : undefined, chainable );
24145 };
24146 } );
24147 } );
24148
24149
24150 jQuery.fn.extend( {
24151
24152 bind: function( types, data, fn ) {
24153 return this.on( types, null, data, fn );
24154 },
24155 unbind: function( types, fn ) {
24156 return this.off( types, null, fn );
24157 },
24158
24159 delegate: function( selector, types, data, fn ) {
24160 return this.on( types, selector, data, fn );
24161 },
24162 undelegate: function( selector, types, fn ) {
24163
24164 // ( namespace ) or ( selector, types [, fn] )
24165 return arguments.length === 1 ?
24166 this.off( selector, "**" ) :
24167 this.off( types, selector || "**", fn );
24168 }
24169 } );
24170
24171 jQuery.holdReady = function( hold ) {
24172 if ( hold ) {
24173 jQuery.readyWait++;
24174 } else {
24175 jQuery.ready( true );
24176 }
24177 };
24178 jQuery.isArray = Array.isArray;
24179 jQuery.parseJSON = JSON.parse;
24180 jQuery.nodeName = nodeName;
24181
24182
24183
24184
24185 // Register as a named AMD module, since jQuery can be concatenated with other
24186 // files that may use define, but not via a proper concatenation script that
24187 // understands anonymous AMD modules. A named AMD is safest and most robust
24188 // way to register. Lowercase jquery is used because AMD module names are
24189 // derived from file names, and jQuery is normally delivered in a lowercase
24190 // file name. Do this after creating the global so that if an AMD module wants
24191 // to call noConflict to hide this version of jQuery, it will work.
24192
24193 // Note that for maximum portability, libraries that are not jQuery should
24194 // declare themselves as anonymous modules, and avoid setting a global if an
24195 // AMD loader is present. jQuery is a special case. For more information, see
24196 // https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
24197
24198 if ( typeof define === "function" && define.amd ) {
24199 define( "jquery", [], function() {
24200 return jQuery;
24201 } );
24202 }
24203
24204
24205
24206
24207 var
24208
24209 // Map over jQuery in case of overwrite
24210 _jQuery = window.jQuery,
24211
24212 // Map over the $ in case of overwrite
24213 _$ = window.$;
24214
24215 jQuery.noConflict = function( deep ) {
24216 if ( window.$ === jQuery ) {
24217 window.$ = _$;
24218 }
24219
24220 if ( deep && window.jQuery === jQuery ) {
24221 window.jQuery = _jQuery;
24222 }
24223
24224 return jQuery;
24225 };
24226
24227 // Expose jQuery and $ identifiers, even in AMD
24228 // (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
24229 // and CommonJS for browser emulators (#13566)
24230 if ( !noGlobal ) {
24231 window.jQuery = window.$ = jQuery;
24232 }
24233
24234
24235
24236
24237 return jQuery;
24238 } );
24239 </script>
24240 <script>/*!
24241 * Bootstrap v3.3.7 (http://getbootstrap.com)
24242 * Copyright 2011-2016 Twitter, Inc.
24243 * Licensed under the MIT license
24244 */
24245
24246 if (typeof jQuery === 'undefined') {
24247 throw new Error('Bootstrap\'s JavaScript requires jQuery')
24248 }
24249
24250 +function ($) {
24251 'use strict';
24252 var version = $.fn.jquery.split(' ')[0].split('.')
24253 if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {
24254 throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4')
24255 }
24256 }(jQuery);
24257
24258 /* ========================================================================
24259 * Bootstrap: transition.js v3.3.7
24260 * http://getbootstrap.com/javascript/#transitions
24261 * ========================================================================
24262 * Copyright 2011-2016 Twitter, Inc.
24263 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24264 * ======================================================================== */
24265
24266
24267 +function ($) {
24268 'use strict';
24269
24270 // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
24271 // ============================================================
24272
24273 function transitionEnd() {
24274 var el = document.createElement('bootstrap')
24275
24276 var transEndEventNames = {
24277 WebkitTransition : 'webkitTransitionEnd',
24278 MozTransition : 'transitionend',
24279 OTransition : 'oTransitionEnd otransitionend',
24280 transition : 'transitionend'
24281 }
24282
24283 for (var name in transEndEventNames) {
24284 if (el.style[name] !== undefined) {
24285 return { end: transEndEventNames[name] }
24286 }
24287 }
24288
24289 return false // explicit for ie8 ( ._.)
24290 }
24291
24292 // http://blog.alexmaccaw.com/css-transitions
24293 $.fn.emulateTransitionEnd = function (duration) {
24294 var called = false
24295 var $el = this
24296 $(this).one('bsTransitionEnd', function () { called = true })
24297 var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
24298 setTimeout(callback, duration)
24299 return this
24300 }
24301
24302 $(function () {
24303 $.support.transition = transitionEnd()
24304
24305 if (!$.support.transition) return
24306
24307 $.event.special.bsTransitionEnd = {
24308 bindType: $.support.transition.end,
24309 delegateType: $.support.transition.end,
24310 handle: function (e) {
24311 if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
24312 }
24313 }
24314 })
24315
24316 }(jQuery);
24317
24318 /* ========================================================================
24319 * Bootstrap: alert.js v3.3.7
24320 * http://getbootstrap.com/javascript/#alerts
24321 * ========================================================================
24322 * Copyright 2011-2016 Twitter, Inc.
24323 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24324 * ======================================================================== */
24325
24326
24327 +function ($) {
24328 'use strict';
24329
24330 // ALERT CLASS DEFINITION
24331 // ======================
24332
24333 var dismiss = '[data-dismiss="alert"]'
24334 var Alert = function (el) {
24335 $(el).on('click', dismiss, this.close)
24336 }
24337
24338 Alert.VERSION = '3.3.7'
24339
24340 Alert.TRANSITION_DURATION = 150
24341
24342 Alert.prototype.close = function (e) {
24343 var $this = $(this)
24344 var selector = $this.attr('data-target')
24345
24346 if (!selector) {
24347 selector = $this.attr('href')
24348 selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
24349 }
24350
24351 var $parent = $(selector === '#' ? [] : selector)
24352
24353 if (e) e.preventDefault()
24354
24355 if (!$parent.length) {
24356 $parent = $this.closest('.alert')
24357 }
24358
24359 $parent.trigger(e = $.Event('close.bs.alert'))
24360
24361 if (e.isDefaultPrevented()) return
24362
24363 $parent.removeClass('in')
24364
24365 function removeElement() {
24366 // detach from parent, fire event then clean up data
24367 $parent.detach().trigger('closed.bs.alert').remove()
24368 }
24369
24370 $.support.transition && $parent.hasClass('fade') ?
24371 $parent
24372 .one('bsTransitionEnd', removeElement)
24373 .emulateTransitionEnd(Alert.TRANSITION_DURATION) :
24374 removeElement()
24375 }
24376
24377
24378 // ALERT PLUGIN DEFINITION
24379 // =======================
24380
24381 function Plugin(option) {
24382 return this.each(function () {
24383 var $this = $(this)
24384 var data = $this.data('bs.alert')
24385
24386 if (!data) $this.data('bs.alert', (data = new Alert(this)))
24387 if (typeof option == 'string') data[option].call($this)
24388 })
24389 }
24390
24391 var old = $.fn.alert
24392
24393 $.fn.alert = Plugin
24394 $.fn.alert.Constructor = Alert
24395
24396
24397 // ALERT NO CONFLICT
24398 // =================
24399
24400 $.fn.alert.noConflict = function () {
24401 $.fn.alert = old
24402 return this
24403 }
24404
24405
24406 // ALERT DATA-API
24407 // ==============
24408
24409 $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
24410
24411 }(jQuery);
24412
24413 /* ========================================================================
24414 * Bootstrap: button.js v3.3.7
24415 * http://getbootstrap.com/javascript/#buttons
24416 * ========================================================================
24417 * Copyright 2011-2016 Twitter, Inc.
24418 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24419 * ======================================================================== */
24420
24421
24422 +function ($) {
24423 'use strict';
24424
24425 // BUTTON PUBLIC CLASS DEFINITION
24426 // ==============================
24427
24428 var Button = function (element, options) {
24429 this.$element = $(element)
24430 this.options = $.extend({}, Button.DEFAULTS, options)
24431 this.isLoading = false
24432 }
24433
24434 Button.VERSION = '3.3.7'
24435
24436 Button.DEFAULTS = {
24437 loadingText: 'loading...'
24438 }
24439
24440 Button.prototype.setState = function (state) {
24441 var d = 'disabled'
24442 var $el = this.$element
24443 var val = $el.is('input') ? 'val' : 'html'
24444 var data = $el.data()
24445
24446 state += 'Text'
24447
24448 if (data.resetText == null) $el.data('resetText', $el[val]())
24449
24450 // push to event loop to allow forms to submit
24451 setTimeout($.proxy(function () {
24452 $el[val](data[state] == null ? this.options[state] : data[state])
24453
24454 if (state == 'loadingText') {
24455 this.isLoading = true
24456 $el.addClass(d).attr(d, d).prop(d, true)
24457 } else if (this.isLoading) {
24458 this.isLoading = false
24459 $el.removeClass(d).removeAttr(d).prop(d, false)
24460 }
24461 }, this), 0)
24462 }
24463
24464 Button.prototype.toggle = function () {
24465 var changed = true
24466 var $parent = this.$element.closest('[data-toggle="buttons"]')
24467
24468 if ($parent.length) {
24469 var $input = this.$element.find('input')
24470 if ($input.prop('type') == 'radio') {
24471 if ($input.prop('checked')) changed = false
24472 $parent.find('.active').removeClass('active')
24473 this.$element.addClass('active')
24474 } else if ($input.prop('type') == 'checkbox') {
24475 if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false
24476 this.$element.toggleClass('active')
24477 }
24478 $input.prop('checked', this.$element.hasClass('active'))
24479 if (changed) $input.trigger('change')
24480 } else {
24481 this.$element.attr('aria-pressed', !this.$element.hasClass('active'))
24482 this.$element.toggleClass('active')
24483 }
24484 }
24485
24486
24487 // BUTTON PLUGIN DEFINITION
24488 // ========================
24489
24490 function Plugin(option) {
24491 return this.each(function () {
24492 var $this = $(this)
24493 var data = $this.data('bs.button')
24494 var options = typeof option == 'object' && option
24495
24496 if (!data) $this.data('bs.button', (data = new Button(this, options)))
24497
24498 if (option == 'toggle') data.toggle()
24499 else if (option) data.setState(option)
24500 })
24501 }
24502
24503 var old = $.fn.button
24504
24505 $.fn.button = Plugin
24506 $.fn.button.Constructor = Button
24507
24508
24509 // BUTTON NO CONFLICT
24510 // ==================
24511
24512 $.fn.button.noConflict = function () {
24513 $.fn.button = old
24514 return this
24515 }
24516
24517
24518 // BUTTON DATA-API
24519 // ===============
24520
24521 $(document)
24522 .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
24523 var $btn = $(e.target).closest('.btn')
24524 Plugin.call($btn, 'toggle')
24525 if (!($(e.target).is('input[type="radio"], input[type="checkbox"]'))) {
24526 // Prevent double click on radios, and the double selections (so cancellation) on checkboxes
24527 e.preventDefault()
24528 // The target component still receive the focus
24529 if ($btn.is('input,button')) $btn.trigger('focus')
24530 else $btn.find('input:visible,button:visible').first().trigger('focus')
24531 }
24532 })
24533 .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
24534 $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
24535 })
24536
24537 }(jQuery);
24538
24539 /* ========================================================================
24540 * Bootstrap: carousel.js v3.3.7
24541 * http://getbootstrap.com/javascript/#carousel
24542 * ========================================================================
24543 * Copyright 2011-2016 Twitter, Inc.
24544 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24545 * ======================================================================== */
24546
24547
24548 +function ($) {
24549 'use strict';
24550
24551 // CAROUSEL CLASS DEFINITION
24552 // =========================
24553
24554 var Carousel = function (element, options) {
24555 this.$element = $(element)
24556 this.$indicators = this.$element.find('.carousel-indicators')
24557 this.options = options
24558 this.paused = null
24559 this.sliding = null
24560 this.interval = null
24561 this.$active = null
24562 this.$items = null
24563
24564 this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))
24565
24566 this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element
24567 .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
24568 .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
24569 }
24570
24571 Carousel.VERSION = '3.3.7'
24572
24573 Carousel.TRANSITION_DURATION = 600
24574
24575 Carousel.DEFAULTS = {
24576 interval: 5000,
24577 pause: 'hover',
24578 wrap: true,
24579 keyboard: true
24580 }
24581
24582 Carousel.prototype.keydown = function (e) {
24583 if (/input|textarea/i.test(e.target.tagName)) return
24584 switch (e.which) {
24585 case 37: this.prev(); break
24586 case 39: this.next(); break
24587 default: return
24588 }
24589
24590 e.preventDefault()
24591 }
24592
24593 Carousel.prototype.cycle = function (e) {
24594 e || (this.paused = false)
24595
24596 this.interval && clearInterval(this.interval)
24597
24598 this.options.interval
24599 && !this.paused
24600 && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
24601
24602 return this
24603 }
24604
24605 Carousel.prototype.getItemIndex = function (item) {
24606 this.$items = item.parent().children('.item')
24607 return this.$items.index(item || this.$active)
24608 }
24609
24610 Carousel.prototype.getItemForDirection = function (direction, active) {
24611 var activeIndex = this.getItemIndex(active)
24612 var willWrap = (direction == 'prev' && activeIndex === 0)
24613 || (direction == 'next' && activeIndex == (this.$items.length - 1))
24614 if (willWrap && !this.options.wrap) return active
24615 var delta = direction == 'prev' ? -1 : 1
24616 var itemIndex = (activeIndex + delta) % this.$items.length
24617 return this.$items.eq(itemIndex)
24618 }
24619
24620 Carousel.prototype.to = function (pos) {
24621 var that = this
24622 var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
24623
24624 if (pos > (this.$items.length - 1) || pos < 0) return
24625
24626 if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
24627 if (activeIndex == pos) return this.pause().cycle()
24628
24629 return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
24630 }
24631
24632 Carousel.prototype.pause = function (e) {
24633 e || (this.paused = true)
24634
24635 if (this.$element.find('.next, .prev').length && $.support.transition) {
24636 this.$element.trigger($.support.transition.end)
24637 this.cycle(true)
24638 }
24639
24640 this.interval = clearInterval(this.interval)
24641
24642 return this
24643 }
24644
24645 Carousel.prototype.next = function () {
24646 if (this.sliding) return
24647 return this.slide('next')
24648 }
24649
24650 Carousel.prototype.prev = function () {
24651 if (this.sliding) return
24652 return this.slide('prev')
24653 }
24654
24655 Carousel.prototype.slide = function (type, next) {
24656 var $active = this.$element.find('.item.active')
24657 var $next = next || this.getItemForDirection(type, $active)
24658 var isCycling = this.interval
24659 var direction = type == 'next' ? 'left' : 'right'
24660 var that = this
24661
24662 if ($next.hasClass('active')) return (this.sliding = false)
24663
24664 var relatedTarget = $next[0]
24665 var slideEvent = $.Event('slide.bs.carousel', {
24666 relatedTarget: relatedTarget,
24667 direction: direction
24668 })
24669 this.$element.trigger(slideEvent)
24670 if (slideEvent.isDefaultPrevented()) return
24671
24672 this.sliding = true
24673
24674 isCycling && this.pause()
24675
24676 if (this.$indicators.length) {
24677 this.$indicators.find('.active').removeClass('active')
24678 var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
24679 $nextIndicator && $nextIndicator.addClass('active')
24680 }
24681
24682 var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
24683 if ($.support.transition && this.$element.hasClass('slide')) {
24684 $next.addClass(type)
24685 $next[0].offsetWidth // force reflow
24686 $active.addClass(direction)
24687 $next.addClass(direction)
24688 $active
24689 .one('bsTransitionEnd', function () {
24690 $next.removeClass([type, direction].join(' ')).addClass('active')
24691 $active.removeClass(['active', direction].join(' '))
24692 that.sliding = false
24693 setTimeout(function () {
24694 that.$element.trigger(slidEvent)
24695 }, 0)
24696 })
24697 .emulateTransitionEnd(Carousel.TRANSITION_DURATION)
24698 } else {
24699 $active.removeClass('active')
24700 $next.addClass('active')
24701 this.sliding = false
24702 this.$element.trigger(slidEvent)
24703 }
24704
24705 isCycling && this.cycle()
24706
24707 return this
24708 }
24709
24710
24711 // CAROUSEL PLUGIN DEFINITION
24712 // ==========================
24713
24714 function Plugin(option) {
24715 return this.each(function () {
24716 var $this = $(this)
24717 var data = $this.data('bs.carousel')
24718 var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
24719 var action = typeof option == 'string' ? option : options.slide
24720
24721 if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
24722 if (typeof option == 'number') data.to(option)
24723 else if (action) data[action]()
24724 else if (options.interval) data.pause().cycle()
24725 })
24726 }
24727
24728 var old = $.fn.carousel
24729
24730 $.fn.carousel = Plugin
24731 $.fn.carousel.Constructor = Carousel
24732
24733
24734 // CAROUSEL NO CONFLICT
24735 // ====================
24736
24737 $.fn.carousel.noConflict = function () {
24738 $.fn.carousel = old
24739 return this
24740 }
24741
24742
24743 // CAROUSEL DATA-API
24744 // =================
24745
24746 var clickHandler = function (e) {
24747 var href
24748 var $this = $(this)
24749 var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
24750 if (!$target.hasClass('carousel')) return
24751 var options = $.extend({}, $target.data(), $this.data())
24752 var slideIndex = $this.attr('data-slide-to')
24753 if (slideIndex) options.interval = false
24754
24755 Plugin.call($target, options)
24756
24757 if (slideIndex) {
24758 $target.data('bs.carousel').to(slideIndex)
24759 }
24760
24761 e.preventDefault()
24762 }
24763
24764 $(document)
24765 .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)
24766 .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)
24767
24768 $(window).on('load', function () {
24769 $('[data-ride="carousel"]').each(function () {
24770 var $carousel = $(this)
24771 Plugin.call($carousel, $carousel.data())
24772 })
24773 })
24774
24775 }(jQuery);
24776
24777 /* ========================================================================
24778 * Bootstrap: collapse.js v3.3.7
24779 * http://getbootstrap.com/javascript/#collapse
24780 * ========================================================================
24781 * Copyright 2011-2016 Twitter, Inc.
24782 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24783 * ======================================================================== */
24784
24785 /* jshint latedef: false */
24786
24787 +function ($) {
24788 'use strict';
24789
24790 // COLLAPSE PUBLIC CLASS DEFINITION
24791 // ================================
24792
24793 var Collapse = function (element, options) {
24794 this.$element = $(element)
24795 this.options = $.extend({}, Collapse.DEFAULTS, options)
24796 this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' +
24797 '[data-toggle="collapse"][data-target="#' + element.id + '"]')
24798 this.transitioning = null
24799
24800 if (this.options.parent) {
24801 this.$parent = this.getParent()
24802 } else {
24803 this.addAriaAndCollapsedClass(this.$element, this.$trigger)
24804 }
24805
24806 if (this.options.toggle) this.toggle()
24807 }
24808
24809 Collapse.VERSION = '3.3.7'
24810
24811 Collapse.TRANSITION_DURATION = 350
24812
24813 Collapse.DEFAULTS = {
24814 toggle: true
24815 }
24816
24817 Collapse.prototype.dimension = function () {
24818 var hasWidth = this.$element.hasClass('width')
24819 return hasWidth ? 'width' : 'height'
24820 }
24821
24822 Collapse.prototype.show = function () {
24823 if (this.transitioning || this.$element.hasClass('in')) return
24824
24825 var activesData
24826 var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')
24827
24828 if (actives && actives.length) {
24829 activesData = actives.data('bs.collapse')
24830 if (activesData && activesData.transitioning) return
24831 }
24832
24833 var startEvent = $.Event('show.bs.collapse')
24834 this.$element.trigger(startEvent)
24835 if (startEvent.isDefaultPrevented()) return
24836
24837 if (actives && actives.length) {
24838 Plugin.call(actives, 'hide')
24839 activesData || actives.data('bs.collapse', null)
24840 }
24841
24842 var dimension = this.dimension()
24843
24844 this.$element
24845 .removeClass('collapse')
24846 .addClass('collapsing')[dimension](0)
24847 .attr('aria-expanded', true)
24848
24849 this.$trigger
24850 .removeClass('collapsed')
24851 .attr('aria-expanded', true)
24852
24853 this.transitioning = 1
24854
24855 var complete = function () {
24856 this.$element
24857 .removeClass('collapsing')
24858 .addClass('collapse in')[dimension]('')
24859 this.transitioning = 0
24860 this.$element
24861 .trigger('shown.bs.collapse')
24862 }
24863
24864 if (!$.support.transition) return complete.call(this)
24865
24866 var scrollSize = $.camelCase(['scroll', dimension].join('-'))
24867
24868 this.$element
24869 .one('bsTransitionEnd', $.proxy(complete, this))
24870 .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])
24871 }
24872
24873 Collapse.prototype.hide = function () {
24874 if (this.transitioning || !this.$element.hasClass('in')) return
24875
24876 var startEvent = $.Event('hide.bs.collapse')
24877 this.$element.trigger(startEvent)
24878 if (startEvent.isDefaultPrevented()) return
24879
24880 var dimension = this.dimension()
24881
24882 this.$element[dimension](this.$element[dimension]())[0].offsetHeight
24883
24884 this.$element
24885 .addClass('collapsing')
24886 .removeClass('collapse in')
24887 .attr('aria-expanded', false)
24888
24889 this.$trigger
24890 .addClass('collapsed')
24891 .attr('aria-expanded', false)
24892
24893 this.transitioning = 1
24894
24895 var complete = function () {
24896 this.transitioning = 0
24897 this.$element
24898 .removeClass('collapsing')
24899 .addClass('collapse')
24900 .trigger('hidden.bs.collapse')
24901 }
24902
24903 if (!$.support.transition) return complete.call(this)
24904
24905 this.$element
24906 [dimension](0)
24907 .one('bsTransitionEnd', $.proxy(complete, this))
24908 .emulateTransitionEnd(Collapse.TRANSITION_DURATION)
24909 }
24910
24911 Collapse.prototype.toggle = function () {
24912 this[this.$element.hasClass('in') ? 'hide' : 'show']()
24913 }
24914
24915 Collapse.prototype.getParent = function () {
24916 return $(this.options.parent)
24917 .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
24918 .each($.proxy(function (i, element) {
24919 var $element = $(element)
24920 this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)
24921 }, this))
24922 .end()
24923 }
24924
24925 Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
24926 var isOpen = $element.hasClass('in')
24927
24928 $element.attr('aria-expanded', isOpen)
24929 $trigger
24930 .toggleClass('collapsed', !isOpen)
24931 .attr('aria-expanded', isOpen)
24932 }
24933
24934 function getTargetFromTrigger($trigger) {
24935 var href
24936 var target = $trigger.attr('data-target')
24937 || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
24938
24939 return $(target)
24940 }
24941
24942
24943 // COLLAPSE PLUGIN DEFINITION
24944 // ==========================
24945
24946 function Plugin(option) {
24947 return this.each(function () {
24948 var $this = $(this)
24949 var data = $this.data('bs.collapse')
24950 var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
24951
24952 if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false
24953 if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
24954 if (typeof option == 'string') data[option]()
24955 })
24956 }
24957
24958 var old = $.fn.collapse
24959
24960 $.fn.collapse = Plugin
24961 $.fn.collapse.Constructor = Collapse
24962
24963
24964 // COLLAPSE NO CONFLICT
24965 // ====================
24966
24967 $.fn.collapse.noConflict = function () {
24968 $.fn.collapse = old
24969 return this
24970 }
24971
24972
24973 // COLLAPSE DATA-API
24974 // =================
24975
24976 $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
24977 var $this = $(this)
24978
24979 if (!$this.attr('data-target')) e.preventDefault()
24980
24981 var $target = getTargetFromTrigger($this)
24982 var data = $target.data('bs.collapse')
24983 var option = data ? 'toggle' : $this.data()
24984
24985 Plugin.call($target, option)
24986 })
24987
24988 }(jQuery);
24989
24990 /* ========================================================================
24991 * Bootstrap: dropdown.js v3.3.7
24992 * http://getbootstrap.com/javascript/#dropdowns
24993 * ========================================================================
24994 * Copyright 2011-2016 Twitter, Inc.
24995 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24996 * ======================================================================== */
24997
24998
24999 +function ($) {
25000 'use strict';
25001
25002 // DROPDOWN CLASS DEFINITION
25003 // =========================
25004
25005 var backdrop = '.dropdown-backdrop'
25006 var toggle = '[data-toggle="dropdown"]'
25007 var Dropdown = function (element) {
25008 $(element).on('click.bs.dropdown', this.toggle)
25009 }
25010
25011 Dropdown.VERSION = '3.3.7'
25012
25013 function getParent($this) {
25014 var selector = $this.attr('data-target')
25015
25016 if (!selector) {
25017 selector = $this.attr('href')
25018 selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
25019 }
25020
25021 var $parent = selector && $(selector)
25022
25023 return $parent && $parent.length ? $parent : $this.parent()
25024 }
25025
25026 function clearMenus(e) {
25027 if (e && e.which === 3) return
25028 $(backdrop).remove()
25029 $(toggle).each(function () {
25030 var $this = $(this)
25031 var $parent = getParent($this)
25032 var relatedTarget = { relatedTarget: this }
25033
25034 if (!$parent.hasClass('open')) return
25035
25036 if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return
25037
25038 $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
25039
25040 if (e.isDefaultPrevented()) return
25041
25042 $this.attr('aria-expanded', 'false')
25043 $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))
25044 })
25045 }
25046
25047 Dropdown.prototype.toggle = function (e) {
25048 var $this = $(this)
25049
25050 if ($this.is('.disabled, :disabled')) return
25051
25052 var $parent = getParent($this)
25053 var isActive = $parent.hasClass('open')
25054
25055 clearMenus()
25056
25057 if (!isActive) {
25058 if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
25059 // if mobile we use a backdrop because click events don't delegate
25060 $(document.createElement('div'))
25061 .addClass('dropdown-backdrop')
25062 .insertAfter($(this))
25063 .on('click', clearMenus)
25064 }
25065
25066 var relatedTarget = { relatedTarget: this }
25067 $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
25068
25069 if (e.isDefaultPrevented()) return
25070
25071 $this
25072 .trigger('focus')
25073 .attr('aria-expanded', 'true')
25074
25075 $parent
25076 .toggleClass('open')
25077 .trigger($.Event('shown.bs.dropdown', relatedTarget))
25078 }
25079
25080 return false
25081 }
25082
25083 Dropdown.prototype.keydown = function (e) {
25084 if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return
25085
25086 var $this = $(this)
25087
25088 e.preventDefault()
25089 e.stopPropagation()
25090
25091 if ($this.is('.disabled, :disabled')) return
25092
25093 var $parent = getParent($this)
25094 var isActive = $parent.hasClass('open')
25095
25096 if (!isActive && e.which != 27 || isActive && e.which == 27) {
25097 if (e.which == 27) $parent.find(toggle).trigger('focus')
25098 return $this.trigger('click')
25099 }
25100
25101 var desc = ' li:not(.disabled):visible a'
25102 var $items = $parent.find('.dropdown-menu' + desc)
25103
25104 if (!$items.length) return
25105
25106 var index = $items.index(e.target)
25107
25108 if (e.which == 38 && index > 0) index-- // up
25109 if (e.which == 40 && index < $items.length - 1) index++ // down
25110 if (!~index) index = 0
25111
25112 $items.eq(index).trigger('focus')
25113 }
25114
25115
25116 // DROPDOWN PLUGIN DEFINITION
25117 // ==========================
25118
25119 function Plugin(option) {
25120 return this.each(function () {
25121 var $this = $(this)
25122 var data = $this.data('bs.dropdown')
25123
25124 if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
25125 if (typeof option == 'string') data[option].call($this)
25126 })
25127 }
25128
25129 var old = $.fn.dropdown
25130
25131 $.fn.dropdown = Plugin
25132 $.fn.dropdown.Constructor = Dropdown
25133
25134
25135 // DROPDOWN NO CONFLICT
25136 // ====================
25137
25138 $.fn.dropdown.noConflict = function () {
25139 $.fn.dropdown = old
25140 return this
25141 }
25142
25143
25144 // APPLY TO STANDARD DROPDOWN ELEMENTS
25145 // ===================================
25146
25147 $(document)
25148 .on('click.bs.dropdown.data-api', clearMenus)
25149 .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
25150 .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
25151 .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
25152 .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)
25153
25154 }(jQuery);
25155
25156 /* ========================================================================
25157 * Bootstrap: modal.js v3.3.7
25158 * http://getbootstrap.com/javascript/#modals
25159 * ========================================================================
25160 * Copyright 2011-2016 Twitter, Inc.
25161 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
25162 * ======================================================================== */
25163
25164
25165 +function ($) {
25166 'use strict';
25167
25168 // MODAL CLASS DEFINITION
25169 // ======================
25170
25171 var Modal = function (element, options) {
25172 this.options = options
25173 this.$body = $(document.body)
25174 this.$element = $(element)
25175 this.$dialog = this.$element.find('.modal-dialog')
25176 this.$backdrop = null
25177 this.isShown = null
25178 this.originalBodyPad = null
25179 this.scrollbarWidth = 0
25180 this.ignoreBackdropClick = false
25181
25182 if (this.options.remote) {
25183 this.$element
25184 .find('.modal-content')
25185 .load(this.options.remote, $.proxy(function () {
25186 this.$element.trigger('loaded.bs.modal')
25187 }, this))
25188 }
25189 }
25190
25191 Modal.VERSION = '3.3.7'
25192
25193 Modal.TRANSITION_DURATION = 300
25194 Modal.BACKDROP_TRANSITION_DURATION = 150
25195
25196 Modal.DEFAULTS = {
25197 backdrop: true,
25198 keyboard: true,
25199 show: true
25200 }
25201
25202 Modal.prototype.toggle = function (_relatedTarget) {
25203 return this.isShown ? this.hide() : this.show(_relatedTarget)
25204 }
25205
25206 Modal.prototype.show = function (_relatedTarget) {
25207 var that = this
25208 var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
25209
25210 this.$element.trigger(e)
25211
25212 if (this.isShown || e.isDefaultPrevented()) return
25213
25214 this.isShown = true
25215
25216 this.checkScrollbar()
25217 this.setScrollbar()
25218 this.$body.addClass('modal-open')
25219
25220 this.escape()
25221 this.resize()
25222
25223 this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
25224
25225 this.$dialog.on('mousedown.dismiss.bs.modal', function () {
25226 that.$element.one('mouseup.dismiss.bs.modal', function (e) {
25227 if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true
25228 })
25229 })
25230
25231 this.backdrop(function () {
25232 var transition = $.support.transition && that.$element.hasClass('fade')
25233
25234 if (!that.$element.parent().length) {
25235 that.$element.appendTo(that.$body) // don't move modals dom position
25236 }
25237
25238 that.$element
25239 .show()
25240 .scrollTop(0)
25241
25242 that.adjustDialog()
25243
25244 if (transition) {
25245 that.$element[0].offsetWidth // force reflow
25246 }
25247
25248 that.$element.addClass('in')
25249
25250 that.enforceFocus()
25251
25252 var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
25253
25254 transition ?
25255 that.$dialog // wait for modal to slide in
25256 .one('bsTransitionEnd', function () {
25257 that.$element.trigger('focus').trigger(e)
25258 })
25259 .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
25260 that.$element.trigger('focus').trigger(e)
25261 })
25262 }
25263
25264 Modal.prototype.hide = function (e) {
25265 if (e) e.preventDefault()
25266
25267 e = $.Event('hide.bs.modal')
25268
25269 this.$element.trigger(e)
25270
25271 if (!this.isShown || e.isDefaultPrevented()) return
25272
25273 this.isShown = false
25274
25275 this.escape()
25276 this.resize()
25277
25278 $(document).off('focusin.bs.modal')
25279
25280 this.$element
25281 .removeClass('in')
25282 .off('click.dismiss.bs.modal')
25283 .off('mouseup.dismiss.bs.modal')
25284
25285 this.$dialog.off('mousedown.dismiss.bs.modal')
25286
25287 $.support.transition && this.$element.hasClass('fade') ?
25288 this.$element
25289 .one('bsTransitionEnd', $.proxy(this.hideModal, this))
25290 .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
25291 this.hideModal()
25292 }
25293
25294 Modal.prototype.enforceFocus = function () {
25295 $(document)
25296 .off('focusin.bs.modal') // guard against infinite focus loop
25297 .on('focusin.bs.modal', $.proxy(function (e) {
25298 if (document !== e.target &&
25299 this.$element[0] !== e.target &&
25300 !this.$element.has(e.target).length) {
25301 this.$element.trigger('focus')
25302 }
25303 }, this))
25304 }
25305
25306 Modal.prototype.escape = function () {
25307 if (this.isShown && this.options.keyboard) {
25308 this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
25309 e.which == 27 && this.hide()
25310 }, this))
25311 } else if (!this.isShown) {
25312 this.$element.off('keydown.dismiss.bs.modal')
25313 }
25314 }
25315
25316 Modal.prototype.resize = function () {
25317 if (this.isShown) {
25318 $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
25319 } else {
25320 $(window).off('resize.bs.modal')
25321 }
25322 }
25323
25324 Modal.prototype.hideModal = function () {
25325 var that = this
25326 this.$element.hide()
25327 this.backdrop(function () {
25328 that.$body.removeClass('modal-open')
25329 that.resetAdjustments()
25330 that.resetScrollbar()
25331 that.$element.trigger('hidden.bs.modal')
25332 })
25333 }
25334
25335 Modal.prototype.removeBackdrop = function () {
25336 this.$backdrop && this.$backdrop.remove()
25337 this.$backdrop = null
25338 }
25339
25340 Modal.prototype.backdrop = function (callback) {
25341 var that = this
25342 var animate = this.$element.hasClass('fade') ? 'fade' : ''
25343
25344 if (this.isShown && this.options.backdrop) {
25345 var doAnimate = $.support.transition && animate
25346
25347 this.$backdrop = $(document.createElement('div'))
25348 .addClass('modal-backdrop ' + animate)
25349 .appendTo(this.$body)
25350
25351 this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
25352 if (this.ignoreBackdropClick) {
25353 this.ignoreBackdropClick = false
25354 return
25355 }
25356 if (e.target !== e.currentTarget) return
25357 this.options.backdrop == 'static'
25358 ? this.$element[0].focus()
25359 : this.hide()
25360 }, this))
25361
25362 if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
25363
25364 this.$backdrop.addClass('in')
25365
25366 if (!callback) return
25367
25368 doAnimate ?
25369 this.$backdrop
25370 .one('bsTransitionEnd', callback)
25371 .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
25372 callback()
25373
25374 } else if (!this.isShown && this.$backdrop) {
25375 this.$backdrop.removeClass('in')
25376
25377 var callbackRemove = function () {
25378 that.removeBackdrop()
25379 callback && callback()
25380 }
25381 $.support.transition && this.$element.hasClass('fade') ?
25382 this.$backdrop
25383 .one('bsTransitionEnd', callbackRemove)
25384 .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
25385 callbackRemove()
25386
25387 } else if (callback) {
25388 callback()
25389 }
25390 }
25391
25392 // these following methods are used to handle overflowing modals
25393
25394 Modal.prototype.handleUpdate = function () {
25395 this.adjustDialog()
25396 }
25397
25398 Modal.prototype.adjustDialog = function () {
25399 var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
25400
25401 this.$element.css({
25402 paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
25403 paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
25404 })
25405 }
25406
25407 Modal.prototype.resetAdjustments = function () {
25408 this.$element.css({
25409 paddingLeft: '',
25410 paddingRight: ''
25411 })
25412 }
25413
25414 Modal.prototype.checkScrollbar = function () {
25415 var fullWindowWidth = window.innerWidth
25416 if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
25417 var documentElementRect = document.documentElement.getBoundingClientRect()
25418 fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)
25419 }
25420 this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth
25421 this.scrollbarWidth = this.measureScrollbar()
25422 }
25423
25424 Modal.prototype.setScrollbar = function () {
25425 var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
25426 this.originalBodyPad = document.body.style.paddingRight || ''
25427 if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
25428 }
25429
25430 Modal.prototype.resetScrollbar = function () {
25431 this.$body.css('padding-right', this.originalBodyPad)
25432 }
25433
25434 Modal.prototype.measureScrollbar = function () { // thx walsh
25435 var scrollDiv = document.createElement('div')
25436 scrollDiv.className = 'modal-scrollbar-measure'
25437 this.$body.append(scrollDiv)
25438 var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
25439 this.$body[0].removeChild(scrollDiv)
25440 return scrollbarWidth
25441 }
25442
25443
25444 // MODAL PLUGIN DEFINITION
25445 // =======================
25446
25447 function Plugin(option, _relatedTarget) {
25448 return this.each(function () {
25449 var $this = $(this)
25450 var data = $this.data('bs.modal')
25451 var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
25452
25453 if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
25454 if (typeof option == 'string') data[option](_relatedTarget)
25455 else if (options.show) data.show(_relatedTarget)
25456 })
25457 }
25458
25459 var old = $.fn.modal
25460
25461 $.fn.modal = Plugin
25462 $.fn.modal.Constructor = Modal
25463
25464
25465 // MODAL NO CONFLICT
25466 // =================
25467
25468 $.fn.modal.noConflict = function () {
25469 $.fn.modal = old
25470 return this
25471 }
25472
25473
25474 // MODAL DATA-API
25475 // ==============
25476
25477 $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
25478 var $this = $(this)
25479 var href = $this.attr('href')
25480 var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
25481 var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
25482
25483 if ($this.is('a')) e.preventDefault()
25484
25485 $target.one('show.bs.modal', function (showEvent) {
25486 if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
25487 $target.one('hidden.bs.modal', function () {
25488 $this.is(':visible') && $this.trigger('focus')
25489 })
25490 })
25491 Plugin.call($target, option, this)
25492 })
25493
25494 }(jQuery);
25495
25496 /* ========================================================================
25497 * Bootstrap: tooltip.js v3.3.7
25498 * http://getbootstrap.com/javascript/#tooltip
25499 * Inspired by the original jQuery.tipsy by Jason Frame
25500 * ========================================================================
25501 * Copyright 2011-2016 Twitter, Inc.
25502 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
25503 * ======================================================================== */
25504
25505
25506 +function ($) {
25507 'use strict';
25508
25509 // TOOLTIP PUBLIC CLASS DEFINITION
25510 // ===============================
25511
25512 var Tooltip = function (element, options) {
25513 this.type = null
25514 this.options = null
25515 this.enabled = null
25516 this.timeout = null
25517 this.hoverState = null
25518 this.$element = null
25519 this.inState = null
25520
25521 this.init('tooltip', element, options)
25522 }
25523
25524 Tooltip.VERSION = '3.3.7'
25525
25526 Tooltip.TRANSITION_DURATION = 150
25527
25528 Tooltip.DEFAULTS = {
25529 animation: true,
25530 placement: 'top',
25531 selector: false,
25532 template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
25533 trigger: 'hover focus',
25534 title: '',
25535 delay: 0,
25536 html: false,
25537 container: false,
25538 viewport: {
25539 selector: 'body',
25540 padding: 0
25541 }
25542 }
25543
25544 Tooltip.prototype.init = function (type, element, options) {
25545 this.enabled = true
25546 this.type = type
25547 this.$element = $(element)
25548 this.options = this.getOptions(options)
25549 this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))
25550 this.inState = { click: false, hover: false, focus: false }
25551
25552 if (this.$element[0] instanceof document.constructor && !this.options.selector) {
25553 throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')
25554 }
25555
25556 var triggers = this.options.trigger.split(' ')
25557
25558 for (var i = triggers.length; i--;) {
25559 var trigger = triggers[i]
25560
25561 if (trigger == 'click') {
25562 this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
25563 } else if (trigger != 'manual') {
25564 var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
25565 var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
25566
25567 this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
25568 this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
25569 }
25570 }
25571
25572 this.options.selector ?
25573 (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
25574 this.fixTitle()
25575 }
25576
25577 Tooltip.prototype.getDefaults = function () {
25578 return Tooltip.DEFAULTS
25579 }
25580
25581 Tooltip.prototype.getOptions = function (options) {
25582 options = $.extend({}, this.getDefaults(), this.$element.data(), options)
25583
25584 if (options.delay && typeof options.delay == 'number') {
25585 options.delay = {
25586 show: options.delay,
25587 hide: options.delay
25588 }
25589 }
25590
25591 return options
25592 }
25593
25594 Tooltip.prototype.getDelegateOptions = function () {
25595 var options = {}
25596 var defaults = this.getDefaults()
25597
25598 this._options && $.each(this._options, function (key, value) {
25599 if (defaults[key] != value) options[key] = value
25600 })
25601
25602 return options
25603 }
25604
25605 Tooltip.prototype.enter = function (obj) {
25606 var self = obj instanceof this.constructor ?
25607 obj : $(obj.currentTarget).data('bs.' + this.type)
25608
25609 if (!self) {
25610 self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
25611 $(obj.currentTarget).data('bs.' + this.type, self)
25612 }
25613
25614 if (obj instanceof $.Event) {
25615 self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true
25616 }
25617
25618 if (self.tip().hasClass('in') || self.hoverState == 'in') {
25619 self.hoverState = 'in'
25620 return
25621 }
25622
25623 clearTimeout(self.timeout)
25624
25625 self.hoverState = 'in'
25626
25627 if (!self.options.delay || !self.options.delay.show) return self.show()
25628
25629 self.timeout = setTimeout(function () {
25630 if (self.hoverState == 'in') self.show()
25631 }, self.options.delay.show)
25632 }
25633
25634 Tooltip.prototype.isInStateTrue = function () {
25635 for (var key in this.inState) {
25636 if (this.inState[key]) return true
25637 }
25638
25639 return false
25640 }
25641
25642 Tooltip.prototype.leave = function (obj) {
25643 var self = obj instanceof this.constructor ?
25644 obj : $(obj.currentTarget).data('bs.' + this.type)
25645
25646 if (!self) {
25647 self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
25648 $(obj.currentTarget).data('bs.' + this.type, self)
25649 }
25650
25651 if (obj instanceof $.Event) {
25652 self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false
25653 }
25654
25655 if (self.isInStateTrue()) return
25656
25657 clearTimeout(self.timeout)
25658
25659 self.hoverState = 'out'
25660
25661 if (!self.options.delay || !self.options.delay.hide) return self.hide()
25662
25663 self.timeout = setTimeout(function () {
25664 if (self.hoverState == 'out') self.hide()
25665 }, self.options.delay.hide)
25666 }
25667
25668 Tooltip.prototype.show = function () {
25669 var e = $.Event('show.bs.' + this.type)
25670
25671 if (this.hasContent() && this.enabled) {
25672 this.$element.trigger(e)
25673
25674 var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])
25675 if (e.isDefaultPrevented() || !inDom) return
25676 var that = this
25677
25678 var $tip = this.tip()
25679
25680 var tipId = this.getUID(this.type)
25681
25682 this.setContent()
25683 $tip.attr('id', tipId)
25684 this.$element.attr('aria-describedby', tipId)
25685
25686 if (this.options.animation) $tip.addClass('fade')
25687
25688 var placement = typeof this.options.placement == 'function' ?
25689 this.options.placement.call(this, $tip[0], this.$element[0]) :
25690 this.options.placement
25691
25692 var autoToken = /\s?auto?\s?/i
25693 var autoPlace = autoToken.test(placement)
25694 if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
25695
25696 $tip
25697 .detach()
25698 .css({ top: 0, left: 0, display: 'block' })
25699 .addClass(placement)
25700 .data('bs.' + this.type, this)
25701
25702 this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
25703 this.$element.trigger('inserted.bs.' + this.type)
25704
25705 var pos = this.getPosition()
25706 var actualWidth = $tip[0].offsetWidth
25707 var actualHeight = $tip[0].offsetHeight
25708
25709 if (autoPlace) {
25710 var orgPlacement = placement
25711 var viewportDim = this.getPosition(this.$viewport)
25712
25713 placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' :
25714 placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' :
25715 placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' :
25716 placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' :
25717 placement
25718
25719 $tip
25720 .removeClass(orgPlacement)
25721 .addClass(placement)
25722 }
25723
25724 var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
25725
25726 this.applyPlacement(calculatedOffset, placement)
25727
25728 var complete = function () {
25729 var prevHoverState = that.hoverState
25730 that.$element.trigger('shown.bs.' + that.type)
25731 that.hoverState = null
25732
25733 if (prevHoverState == 'out') that.leave(that)
25734 }
25735
25736 $.support.transition && this.$tip.hasClass('fade') ?
25737 $tip
25738 .one('bsTransitionEnd', complete)
25739 .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
25740 complete()
25741 }
25742 }
25743
25744 Tooltip.prototype.applyPlacement = function (offset, placement) {
25745 var $tip = this.tip()
25746 var width = $tip[0].offsetWidth
25747 var height = $tip[0].offsetHeight
25748
25749 // manually read margins because getBoundingClientRect includes difference
25750 var marginTop = parseInt($tip.css('margin-top'), 10)
25751 var marginLeft = parseInt($tip.css('margin-left'), 10)
25752
25753 // we must check for NaN for ie 8/9
25754 if (isNaN(marginTop)) marginTop = 0
25755 if (isNaN(marginLeft)) marginLeft = 0
25756
25757 offset.top += marginTop
25758 offset.left += marginLeft
25759
25760 // $.fn.offset doesn't round pixel values
25761 // so we use setOffset directly with our own function B-0
25762 $.offset.setOffset($tip[0], $.extend({
25763 using: function (props) {
25764 $tip.css({
25765 top: Math.round(props.top),
25766 left: Math.round(props.left)
25767 })
25768 }
25769 }, offset), 0)
25770
25771 $tip.addClass('in')
25772
25773 // check to see if placing tip in new offset caused the tip to resize itself
25774 var actualWidth = $tip[0].offsetWidth
25775 var actualHeight = $tip[0].offsetHeight
25776
25777 if (placement == 'top' && actualHeight != height) {
25778 offset.top = offset.top + height - actualHeight
25779 }
25780
25781 var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
25782
25783 if (delta.left) offset.left += delta.left
25784 else offset.top += delta.top
25785
25786 var isVertical = /top|bottom/.test(placement)
25787 var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
25788 var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
25789
25790 $tip.offset(offset)
25791 this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
25792 }
25793
25794 Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {
25795 this.arrow()
25796 .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
25797 .css(isVertical ? 'top' : 'left', '')
25798 }
25799
25800 Tooltip.prototype.setContent = function () {
25801 var $tip = this.tip()
25802 var title = this.getTitle()
25803
25804 $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
25805 $tip.removeClass('fade in top bottom left right')
25806 }
25807
25808 Tooltip.prototype.hide = function (callback) {
25809 var that = this
25810 var $tip = $(this.$tip)
25811 var e = $.Event('hide.bs.' + this.type)
25812
25813 function complete() {
25814 if (that.hoverState != 'in') $tip.detach()
25815 if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.
25816 that.$element
25817 .removeAttr('aria-describedby')
25818 .trigger('hidden.bs.' + that.type)
25819 }
25820 callback && callback()
25821 }
25822
25823 this.$element.trigger(e)
25824
25825 if (e.isDefaultPrevented()) return
25826
25827 $tip.removeClass('in')
25828
25829 $.support.transition && $tip.hasClass('fade') ?
25830 $tip
25831 .one('bsTransitionEnd', complete)
25832 .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
25833 complete()
25834
25835 this.hoverState = null
25836
25837 return this
25838 }
25839
25840 Tooltip.prototype.fixTitle = function () {
25841 var $e = this.$element
25842 if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {
25843 $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
25844 }
25845 }
25846
25847 Tooltip.prototype.hasContent = function () {
25848 return this.getTitle()
25849 }
25850
25851 Tooltip.prototype.getPosition = function ($element) {
25852 $element = $element || this.$element
25853
25854 var el = $element[0]
25855 var isBody = el.tagName == 'BODY'
25856
25857 var elRect = el.getBoundingClientRect()
25858 if (elRect.width == null) {
25859 // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
25860 elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
25861 }
25862 var isSvg = window.SVGElement && el instanceof window.SVGElement
25863 // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.
25864 // See https://github.com/twbs/bootstrap/issues/20280
25865 var elOffset = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())
25866 var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
25867 var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
25868
25869 return $.extend({}, elRect, scroll, outerDims, elOffset)
25870 }
25871
25872 Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
25873 return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
25874 placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
25875 placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
25876 /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
25877
25878 }
25879
25880 Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
25881 var delta = { top: 0, left: 0 }
25882 if (!this.$viewport) return delta
25883
25884 var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
25885 var viewportDimensions = this.getPosition(this.$viewport)
25886
25887 if (/right|left/.test(placement)) {
25888 var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
25889 var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
25890 if (topEdgeOffset < viewportDimensions.top) { // top overflow
25891 delta.top = viewportDimensions.top - topEdgeOffset
25892 } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
25893 delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
25894 }
25895 } else {
25896 var leftEdgeOffset = pos.left - viewportPadding
25897 var rightEdgeOffset = pos.left + viewportPadding + actualWidth
25898 if (leftEdgeOffset < viewportDimensions.left) { // left overflow
25899 delta.left = viewportDimensions.left - leftEdgeOffset
25900 } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow
25901 delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
25902 }
25903 }
25904
25905 return delta
25906 }
25907
25908 Tooltip.prototype.getTitle = function () {
25909 var title
25910 var $e = this.$element
25911 var o = this.options
25912
25913 title = $e.attr('data-original-title')
25914 || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
25915
25916 return title
25917 }
25918
25919 Tooltip.prototype.getUID = function (prefix) {
25920 do prefix += ~~(Math.random() * 1000000)
25921 while (document.getElementById(prefix))
25922 return prefix
25923 }
25924
25925 Tooltip.prototype.tip = function () {
25926 if (!this.$tip) {
25927 this.$tip = $(this.options.template)
25928 if (this.$tip.length != 1) {
25929 throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')
25930 }
25931 }
25932 return this.$tip
25933 }
25934
25935 Tooltip.prototype.arrow = function () {
25936 return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
25937 }
25938
25939 Tooltip.prototype.enable = function () {
25940 this.enabled = true
25941 }
25942
25943 Tooltip.prototype.disable = function () {
25944 this.enabled = false
25945 }
25946
25947 Tooltip.prototype.toggleEnabled = function () {
25948 this.enabled = !this.enabled
25949 }
25950
25951 Tooltip.prototype.toggle = function (e) {
25952 var self = this
25953 if (e) {
25954 self = $(e.currentTarget).data('bs.' + this.type)
25955 if (!self) {
25956 self = new this.constructor(e.currentTarget, this.getDelegateOptions())
25957 $(e.currentTarget).data('bs.' + this.type, self)
25958 }
25959 }
25960
25961 if (e) {
25962 self.inState.click = !self.inState.click
25963 if (self.isInStateTrue()) self.enter(self)
25964 else self.leave(self)
25965 } else {
25966 self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
25967 }
25968 }
25969
25970 Tooltip.prototype.destroy = function () {
25971 var that = this
25972 clearTimeout(this.timeout)
25973 this.hide(function () {
25974 that.$element.off('.' + that.type).removeData('bs.' + that.type)
25975 if (that.$tip) {
25976 that.$tip.detach()
25977 }
25978 that.$tip = null
25979 that.$arrow = null
25980 that.$viewport = null
25981 that.$element = null
25982 })
25983 }
25984
25985
25986 // TOOLTIP PLUGIN DEFINITION
25987 // =========================
25988
25989 function Plugin(option) {
25990 return this.each(function () {
25991 var $this = $(this)
25992 var data = $this.data('bs.tooltip')
25993 var options = typeof option == 'object' && option
25994
25995 if (!data && /destroy|hide/.test(option)) return
25996 if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
25997 if (typeof option == 'string') data[option]()
25998 })
25999 }
26000
26001 var old = $.fn.tooltip
26002
26003 $.fn.tooltip = Plugin
26004 $.fn.tooltip.Constructor = Tooltip
26005
26006
26007 // TOOLTIP NO CONFLICT
26008 // ===================
26009
26010 $.fn.tooltip.noConflict = function () {
26011 $.fn.tooltip = old
26012 return this
26013 }
26014
26015 }(jQuery);
26016
26017 /* ========================================================================
26018 * Bootstrap: popover.js v3.3.7
26019 * http://getbootstrap.com/javascript/#popovers
26020 * ========================================================================
26021 * Copyright 2011-2016 Twitter, Inc.
26022 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
26023 * ======================================================================== */
26024
26025
26026 +function ($) {
26027 'use strict';
26028
26029 // POPOVER PUBLIC CLASS DEFINITION
26030 // ===============================
26031
26032 var Popover = function (element, options) {
26033 this.init('popover', element, options)
26034 }
26035
26036 if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
26037
26038 Popover.VERSION = '3.3.7'
26039
26040 Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
26041 placement: 'right',
26042 trigger: 'click',
26043 content: '',
26044 template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
26045 })
26046
26047
26048 // NOTE: POPOVER EXTENDS tooltip.js
26049 // ================================
26050
26051 Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
26052
26053 Popover.prototype.constructor = Popover
26054
26055 Popover.prototype.getDefaults = function () {
26056 return Popover.DEFAULTS
26057 }
26058
26059 Popover.prototype.setContent = function () {
26060 var $tip = this.tip()
26061 var title = this.getTitle()
26062 var content = this.getContent()
26063
26064 $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
26065 $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events
26066 this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
26067 ](content)
26068
26069 $tip.removeClass('fade top bottom left right in')
26070
26071 // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
26072 // this manually by checking the contents.
26073 if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
26074 }
26075
26076 Popover.prototype.hasContent = function () {
26077 return this.getTitle() || this.getContent()
26078 }
26079
26080 Popover.prototype.getContent = function () {
26081 var $e = this.$element
26082 var o = this.options
26083
26084 return $e.attr('data-content')
26085 || (typeof o.content == 'function' ?
26086 o.content.call($e[0]) :
26087 o.content)
26088 }
26089
26090 Popover.prototype.arrow = function () {
26091 return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
26092 }
26093
26094
26095 // POPOVER PLUGIN DEFINITION
26096 // =========================
26097
26098 function Plugin(option) {
26099 return this.each(function () {
26100 var $this = $(this)
26101 var data = $this.data('bs.popover')
26102 var options = typeof option == 'object' && option
26103
26104 if (!data && /destroy|hide/.test(option)) return
26105 if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
26106 if (typeof option == 'string') data[option]()
26107 })
26108 }
26109
26110 var old = $.fn.popover
26111
26112 $.fn.popover = Plugin
26113 $.fn.popover.Constructor = Popover
26114
26115
26116 // POPOVER NO CONFLICT
26117 // ===================
26118
26119 $.fn.popover.noConflict = function () {
26120 $.fn.popover = old
26121 return this
26122 }
26123
26124 }(jQuery);
26125
26126 /* ========================================================================
26127 * Bootstrap: scrollspy.js v3.3.7
26128 * http://getbootstrap.com/javascript/#scrollspy
26129 * ========================================================================
26130 * Copyright 2011-2016 Twitter, Inc.
26131 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
26132 * ======================================================================== */
26133
26134
26135 +function ($) {
26136 'use strict';
26137
26138 // SCROLLSPY CLASS DEFINITION
26139 // ==========================
26140
26141 function ScrollSpy(element, options) {
26142 this.$body = $(document.body)
26143 this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)
26144 this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
26145 this.selector = (this.options.target || '') + ' .nav li > a'
26146 this.offsets = []
26147 this.targets = []
26148 this.activeTarget = null
26149 this.scrollHeight = 0
26150
26151 this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))
26152 this.refresh()
26153 this.process()
26154 }
26155
26156 ScrollSpy.VERSION = '3.3.7'
26157
26158 ScrollSpy.DEFAULTS = {
26159 offset: 10
26160 }
26161
26162 ScrollSpy.prototype.getScrollHeight = function () {
26163 return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
26164 }
26165
26166 ScrollSpy.prototype.refresh = function () {
26167 var that = this
26168 var offsetMethod = 'offset'
26169 var offsetBase = 0
26170
26171 this.offsets = []
26172 this.targets = []
26173 this.scrollHeight = this.getScrollHeight()
26174
26175 if (!$.isWindow(this.$scrollElement[0])) {
26176 offsetMethod = 'position'
26177 offsetBase = this.$scrollElement.scrollTop()
26178 }
26179
26180 this.$body
26181 .find(this.selector)
26182 .map(function () {
26183 var $el = $(this)
26184 var href = $el.data('target') || $el.attr('href')
26185 var $href = /^#./.test(href) && $(href)
26186
26187 return ($href
26188 && $href.length
26189 && $href.is(':visible')
26190 && [[$href[offsetMethod]().top + offsetBase, href]]) || null
26191 })
26192 .sort(function (a, b) { return a[0] - b[0] })
26193 .each(function () {
26194 that.offsets.push(this[0])
26195 that.targets.push(this[1])
26196 })
26197 }
26198
26199 ScrollSpy.prototype.process = function () {
26200 var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
26201 var scrollHeight = this.getScrollHeight()
26202 var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()
26203 var offsets = this.offsets
26204 var targets = this.targets
26205 var activeTarget = this.activeTarget
26206 var i
26207
26208 if (this.scrollHeight != scrollHeight) {
26209 this.refresh()
26210 }
26211
26212 if (scrollTop >= maxScroll) {
26213 return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
26214 }
26215
26216 if (activeTarget && scrollTop < offsets[0]) {
26217 this.activeTarget = null
26218 return this.clear()
26219 }
26220
26221 for (i = offsets.length; i--;) {
26222 activeTarget != targets[i]
26223 && scrollTop >= offsets[i]
26224 && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])
26225 && this.activate(targets[i])
26226 }
26227 }
26228
26229 ScrollSpy.prototype.activate = function (target) {
26230 this.activeTarget = target
26231
26232 this.clear()
26233
26234 var selector = this.selector +
26235 '[data-target="' + target + '"],' +
26236 this.selector + '[href="' + target + '"]'
26237
26238 var active = $(selector)
26239 .parents('li')
26240 .addClass('active')
26241
26242 if (active.parent('.dropdown-menu').length) {
26243 active = active
26244 .closest('li.dropdown')
26245 .addClass('active')
26246 }
26247
26248 active.trigger('activate.bs.scrollspy')
26249 }
26250
26251 ScrollSpy.prototype.clear = function () {
26252 $(this.selector)
26253 .parentsUntil(this.options.target, '.active')
26254 .removeClass('active')
26255 }
26256
26257
26258 // SCROLLSPY PLUGIN DEFINITION
26259 // ===========================
26260
26261 function Plugin(option) {
26262 return this.each(function () {
26263 var $this = $(this)
26264 var data = $this.data('bs.scrollspy')
26265 var options = typeof option == 'object' && option
26266
26267 if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
26268 if (typeof option == 'string') data[option]()
26269 })
26270 }
26271
26272 var old = $.fn.scrollspy
26273
26274 $.fn.scrollspy = Plugin
26275 $.fn.scrollspy.Constructor = ScrollSpy
26276
26277
26278 // SCROLLSPY NO CONFLICT
26279 // =====================
26280
26281 $.fn.scrollspy.noConflict = function () {
26282 $.fn.scrollspy = old
26283 return this
26284 }
26285
26286
26287 // SCROLLSPY DATA-API
26288 // ==================
26289
26290 $(window).on('load.bs.scrollspy.data-api', function () {
26291 $('[data-spy="scroll"]').each(function () {
26292 var $spy = $(this)
26293 Plugin.call($spy, $spy.data())
26294 })
26295 })
26296
26297 }(jQuery);
26298
26299 /* ========================================================================
26300 * Bootstrap: tab.js v3.3.7
26301 * http://getbootstrap.com/javascript/#tabs
26302 * ========================================================================
26303 * Copyright 2011-2016 Twitter, Inc.
26304 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
26305 * ======================================================================== */
26306
26307
26308 +function ($) {
26309 'use strict';
26310
26311 // TAB CLASS DEFINITION
26312 // ====================
26313
26314 var Tab = function (element) {
26315 // jscs:disable requireDollarBeforejQueryAssignment
26316 this.element = $(element)
26317 // jscs:enable requireDollarBeforejQueryAssignment
26318 }
26319
26320 Tab.VERSION = '3.3.7'
26321
26322 Tab.TRANSITION_DURATION = 150
26323
26324 Tab.prototype.show = function () {
26325 var $this = this.element
26326 var $ul = $this.closest('ul:not(.dropdown-menu)')
26327 var selector = $this.data('target')
26328
26329 if (!selector) {
26330 selector = $this.attr('href')
26331 selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
26332 }
26333
26334 if ($this.parent('li').hasClass('active')) return
26335
26336 var $previous = $ul.find('.active:last a')
26337 var hideEvent = $.Event('hide.bs.tab', {
26338 relatedTarget: $this[0]
26339 })
26340 var showEvent = $.Event('show.bs.tab', {
26341 relatedTarget: $previous[0]
26342 })
26343
26344 $previous.trigger(hideEvent)
26345 $this.trigger(showEvent)
26346
26347 if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return
26348
26349 var $target = $(selector)
26350
26351 this.activate($this.closest('li'), $ul)
26352 this.activate($target, $target.parent(), function () {
26353 $previous.trigger({
26354 type: 'hidden.bs.tab',
26355 relatedTarget: $this[0]
26356 })
26357 $this.trigger({
26358 type: 'shown.bs.tab',
26359 relatedTarget: $previous[0]
26360 })
26361 })
26362 }
26363
26364 Tab.prototype.activate = function (element, container, callback) {
26365 var $active = container.find('> .active')
26366 var transition = callback
26367 && $.support.transition
26368 && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)
26369
26370 function next() {
26371 $active
26372 .removeClass('active')
26373 .find('> .dropdown-menu > .active')
26374 .removeClass('active')
26375 .end()
26376 .find('[data-toggle="tab"]')
26377 .attr('aria-expanded', false)
26378
26379 element
26380 .addClass('active')
26381 .find('[data-toggle="tab"]')
26382 .attr('aria-expanded', true)
26383
26384 if (transition) {
26385 element[0].offsetWidth // reflow for transition
26386 element.addClass('in')
26387 } else {
26388 element.removeClass('fade')
26389 }
26390
26391 if (element.parent('.dropdown-menu').length) {
26392 element
26393 .closest('li.dropdown')
26394 .addClass('active')
26395 .end()
26396 .find('[data-toggle="tab"]')
26397 .attr('aria-expanded', true)
26398 }
26399
26400 callback && callback()
26401 }
26402
26403 $active.length && transition ?
26404 $active
26405 .one('bsTransitionEnd', next)
26406 .emulateTransitionEnd(Tab.TRANSITION_DURATION) :
26407 next()
26408
26409 $active.removeClass('in')
26410 }
26411
26412
26413 // TAB PLUGIN DEFINITION
26414 // =====================
26415
26416 function Plugin(option) {
26417 return this.each(function () {
26418 var $this = $(this)
26419 var data = $this.data('bs.tab')
26420
26421 if (!data) $this.data('bs.tab', (data = new Tab(this)))
26422 if (typeof option == 'string') data[option]()
26423 })
26424 }
26425
26426 var old = $.fn.tab
26427
26428 $.fn.tab = Plugin
26429 $.fn.tab.Constructor = Tab
26430
26431
26432 // TAB NO CONFLICT
26433 // ===============
26434
26435 $.fn.tab.noConflict = function () {
26436 $.fn.tab = old
26437 return this
26438 }
26439
26440
26441 // TAB DATA-API
26442 // ============
26443
26444 var clickHandler = function (e) {
26445 e.preventDefault()
26446 Plugin.call($(this), 'show')
26447 }
26448
26449 $(document)
26450 .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler)
26451 .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler)
26452
26453 }(jQuery);
26454
26455 /* ========================================================================
26456 * Bootstrap: affix.js v3.3.7
26457 * http://getbootstrap.com/javascript/#affix
26458 * ========================================================================
26459 * Copyright 2011-2016 Twitter, Inc.
26460 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
26461 * ======================================================================== */
26462
26463
26464 +function ($) {
26465 'use strict';
26466
26467 // AFFIX CLASS DEFINITION
26468 // ======================
26469
26470 var Affix = function (element, options) {
26471 this.options = $.extend({}, Affix.DEFAULTS, options)
26472
26473 this.$target = $(this.options.target)
26474 .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
26475 .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
26476
26477 this.$element = $(element)
26478 this.affixed = null
26479 this.unpin = null
26480 this.pinnedOffset = null
26481
26482 this.checkPosition()
26483 }
26484
26485 Affix.VERSION = '3.3.7'
26486
26487 Affix.RESET = 'affix affix-top affix-bottom'
26488
26489 Affix.DEFAULTS = {
26490 offset: 0,
26491 target: window
26492 }
26493
26494 Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {
26495 var scrollTop = this.$target.scrollTop()
26496 var position = this.$element.offset()
26497 var targetHeight = this.$target.height()
26498
26499 if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false
26500
26501 if (this.affixed == 'bottom') {
26502 if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'
26503 return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'
26504 }
26505
26506 var initializing = this.affixed == null
26507 var colliderTop = initializing ? scrollTop : position.top
26508 var colliderHeight = initializing ? targetHeight : height
26509
26510 if (offsetTop != null && scrollTop <= offsetTop) return 'top'
26511 if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'
26512
26513 return false
26514 }
26515
26516 Affix.prototype.getPinnedOffset = function () {
26517 if (this.pinnedOffset) return this.pinnedOffset
26518 this.$element.removeClass(Affix.RESET).addClass('affix')
26519 var scrollTop = this.$target.scrollTop()
26520 var position = this.$element.offset()
26521 return (this.pinnedOffset = position.top - scrollTop)
26522 }
26523
26524 Affix.prototype.checkPositionWithEventLoop = function () {
26525 setTimeout($.proxy(this.checkPosition, this), 1)
26526 }
26527
26528 Affix.prototype.checkPosition = function () {
26529 if (!this.$element.is(':visible')) return
26530
26531 var height = this.$element.height()
26532 var offset = this.options.offset
26533 var offsetTop = offset.top
26534 var offsetBottom = offset.bottom
26535 var scrollHeight = Math.max($(document).height(), $(document.body).height())
26536
26537 if (typeof offset != 'object') offsetBottom = offsetTop = offset
26538 if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
26539 if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
26540
26541 var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)
26542
26543 if (this.affixed != affix) {
26544 if (this.unpin != null) this.$element.css('top', '')
26545
26546 var affixType = 'affix' + (affix ? '-' + affix : '')
26547 var e = $.Event(affixType + '.bs.affix')
26548
26549 this.$element.trigger(e)
26550
26551 if (e.isDefaultPrevented()) return
26552
26553 this.affixed = affix
26554 this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
26555
26556 this.$element
26557 .removeClass(Affix.RESET)
26558 .addClass(affixType)
26559 .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')
26560 }
26561
26562 if (affix == 'bottom') {
26563 this.$element.offset({
26564 top: scrollHeight - height - offsetBottom
26565 })
26566 }
26567 }
26568
26569
26570 // AFFIX PLUGIN DEFINITION
26571 // =======================
26572
26573 function Plugin(option) {
26574 return this.each(function () {
26575 var $this = $(this)
26576 var data = $this.data('bs.affix')
26577 var options = typeof option == 'object' && option
26578
26579 if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
26580 if (typeof option == 'string') data[option]()
26581 })
26582 }
26583
26584 var old = $.fn.affix
26585
26586 $.fn.affix = Plugin
26587 $.fn.affix.Constructor = Affix
26588
26589
26590 // AFFIX NO CONFLICT
26591 // =================
26592
26593 $.fn.affix.noConflict = function () {
26594 $.fn.affix = old
26595 return this
26596 }
26597
26598
26599 // AFFIX DATA-API
26600 // ==============
26601
26602 $(window).on('load', function () {
26603 $('[data-spy="affix"]').each(function () {
26604 var $spy = $(this)
26605 var data = $spy.data()
26606
26607 data.offset = data.offset || {}
26608
26609 if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom
26610 if (data.offsetTop != null) data.offset.top = data.offsetTop
26611
26612 Plugin.call($spy, data)
26613 })
26614 })
26615
26616 }(jQuery);
26617 </script>
26618 <script>(function() {
26619 'use strict';
26620
26621 /**
26622 * Extend an Object with another Object's properties.
26623 *
26624 * The source objects are specified as additional arguments.
26625 *
26626 * @param dst Object the object to extend.
26627 *
26628 * @return Object the final object.
26629 */
26630 var _extend = function(dst) {
26631 var sources = Array.prototype.slice.call(arguments, 1);
26632 for (var i=0; i<sources.length; ++i) {
26633 var src = sources[i];
26634 for (var p in src) {
26635 if (src.hasOwnProperty(p)) dst[p] = src[p];
26636 }
26637 }
26638 return dst;
26639 };
26640
26641
26642 /**
26643 * Defer execution of given function.
26644 * @param {Function} func
26645 */
26646 var _defer = function(func) {
26647 if (typeof setImmediate === 'function') {
26648 return setImmediate(func);
26649 } else {
26650 return setTimeout(func, 0);
26651 }
26652 };
26653
26654 /**
26655 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
26656 */
26657 var Levenshtein = {
26658 /**
26659 * Calculate levenshtein distance of the two strings.
26660 *
26661 * @param str1 String the first string.
26662 * @param str2 String the second string.
26663 * @return Integer the levenshtein distance (0 and above).
26664 */
26665 get: function(str1, str2) {
26666 // base cases
26667 if (str1 === str2) return 0;
26668 if (str1.length === 0) return str2.length;
26669 if (str2.length === 0) return str1.length;
26670
26671 // two rows
26672 var prevRow = new Array(str2.length + 1),
26673 curCol, nextCol, i, j, tmp;
26674
26675 // initialise previous row
26676 for (i=0; i<prevRow.length; ++i) {
26677 prevRow[i] = i;
26678 }
26679
26680 // calculate current row distance from previous row
26681 for (i=0; i<str1.length; ++i) {
26682 nextCol = i + 1;
26683
26684 for (j=0; j<str2.length; ++j) {
26685 curCol = nextCol;
26686
26687 // substution
26688 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
26689 // insertion
26690 tmp = curCol + 1;
26691 if (nextCol > tmp) {
26692 nextCol = tmp;
26693 }
26694 // deletion
26695 tmp = prevRow[j + 1] + 1;
26696 if (nextCol > tmp) {
26697 nextCol = tmp;
26698 }
26699
26700 // copy current col value into previous (in preparation for next iteration)
26701 prevRow[j] = curCol;
26702 }
26703
26704 // copy last col value into previous (in preparation for next iteration)
26705 prevRow[j] = nextCol;
26706 }
26707
26708 return nextCol;
26709 },
26710
26711 /**
26712 * Asynchronously calculate levenshtein distance of the two strings.
26713 *
26714 * @param str1 String the first string.
26715 * @param str2 String the second string.
26716 * @param cb Function callback function with signature: function(Error err, int distance)
26717 * @param [options] Object additional options.
26718 * @param [options.progress] Function progress callback with signature: function(percentComplete)
26719 */
26720 getAsync: function(str1, str2, cb, options) {
26721 options = _extend({}, {
26722 progress: null
26723 }, options);
26724
26725 // base cases
26726 if (str1 === str2) return cb(null, 0);
26727 if (str1.length === 0) return cb(null, str2.length);
26728 if (str2.length === 0) return cb(null, str1.length);
26729
26730 // two rows
26731 var prevRow = new Array(str2.length + 1),
26732 curCol, nextCol,
26733 i, j, tmp,
26734 startTime, currentTime;
26735
26736 // initialise previous row
26737 for (i=0; i<prevRow.length; ++i) {
26738 prevRow[i] = i;
26739 }
26740
26741 nextCol = 1;
26742 i = 0;
26743 j = -1;
26744
26745 var __calculate = function() {
26746 // reset timer
26747 startTime = new Date().valueOf();
26748 currentTime = startTime;
26749
26750 // keep going until one second has elapsed
26751 while (currentTime - startTime < 1000) {
26752 // reached end of current row?
26753 if (str2.length <= (++j)) {
26754 // copy current into previous (in preparation for next iteration)
26755 prevRow[j] = nextCol;
26756
26757 // if already done all chars
26758 if (str1.length <= (++i)) {
26759 return cb(null, nextCol);
26760 }
26761 // else if we have more left to do
26762 else {
26763 nextCol = i + 1;
26764 j = 0;
26765 }
26766 }
26767
26768 // calculation
26769 curCol = nextCol;
26770
26771 // substution
26772 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
26773 // insertion
26774 tmp = curCol + 1;
26775 if (nextCol > tmp) {
26776 nextCol = tmp;
26777 }
26778 // deletion
26779 tmp = prevRow[j + 1] + 1;
26780 if (nextCol > tmp) {
26781 nextCol = tmp;
26782 }
26783
26784 // copy current into previous (in preparation for next iteration)
26785 prevRow[j] = curCol;
26786
26787 // get current time
26788 currentTime = new Date().valueOf();
26789 }
26790
26791 // send a progress update?
26792 if (null !== options.progress) {
26793 try {
26794 options.progress.call(null, (i * 100.0/ str1.length));
26795 } catch (err) {
26796 return cb('Progress callback: ' + err.toString());
26797 }
26798 }
26799
26800 // next iteration
26801 _defer(__calculate);
26802 };
26803
26804 __calculate();
26805 }
26806
26807 };
26808
26809 // amd
26810 if (typeof define !== "undefined" && define !== null && define.amd) {
26811 define(function() {
26812 return Levenshtein;
26813 });
26814 }
26815 // commonjs
26816 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
26817 module.exports = Levenshtein;
26818 }
26819 // web worker
26820 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
26821 self.Levenshtein = Levenshtein;
26822 }
26823 // browser main thread
26824 else if (typeof window !== "undefined" && window !== null) {
26825 window.Levenshtein = Levenshtein;
26826 }
26827 }());
26828
26829 </script>
26830 <script>/*! kjua v0.1.1 - https://larsjung.de/kjua/ */
26831 !function(r,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.kjua=t():r.kjua=t()}(this,function(){return function(r){function t(n){if(e[n])return e[n].exports;var o=e[n]={exports:{},id:n,loaded:!1};return r[n].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var e={};return t.m=r,t.c=e,t.p="",t(0)}([function(r,t,e){"use strict";var n=e(1),o=n.createCanvas,i=n.canvasToImg,a=n.dpr,u=e(2),f=e(3),c=e(4);r.exports=function(r){var t=Object.assign({},u,r),e=f(t.text,t.ecLevel,t.minVersion,t.quiet),n=t.ratio||a,l=o(t.size,n),s=l.getContext("2d");return s.scale(n,n),c(e,s,t),"image"===t.render?i(l):l}},function(r,t){"use strict";var e=window,n=e.document,o=e.devicePixelRatio||1,i=function(r){return n.createElement(r)},a=function(r,t){return r.getAttribute(t)},u=function(r,t,e){return r.setAttribute(t,e)},f=function(r,t){var e=i("canvas");return u(e,"width",r*t),u(e,"height",r*t),e.style.width=r+"px",e.style.height=r+"px",e},c=function(r){var t=i("img");return u(t,"crossorigin","anonymous"),u(t,"src",r.toDataURL("image/png")),u(t,"width",a(r,"width")),u(t,"height",a(r,"height")),t.style.width=r.style.width,t.style.height=r.style.height,t};r.exports={createCanvas:f,canvasToImg:c,dpr:o}},function(r,t){"use strict";r.exports={render:"image",crisp:!0,minVersion:1,ecLevel:"L",size:200,ratio:null,fill:"#333",back:"#fff",text:"no text",rounded:0,quiet:0,mode:"plain",mSize:30,mPosX:50,mPosY:50,label:"no label",fontname:"sans",fontcolor:"#333",image:null}},function(r,t){"use strict";var e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(r){return typeof r}:function(r){return r&&"function"==typeof Symbol&&r.constructor===Symbol?"symbol":typeof r},n=/code length overflow/i,o=function(){var e=function(){function r(t,e){if("undefined"==typeof t.length)throw new Error(t.length+"/"+e);var n=function(){for(var r=0;r<t.length&&0==t[r];)r+=1;for(var n=new Array(t.length-r+e),o=0;o<t.length-r;o+=1)n[o]=t[o+r];return n}(),o={};return o.getAt=function(r){return n[r]},o.getLength=function(){return n.length},o.multiply=function(t){for(var e=new Array(o.getLength()+t.getLength()-1),n=0;n<o.getLength();n+=1)for(var i=0;i<t.getLength();i+=1)e[n+i]^=a.gexp(a.glog(o.getAt(n))+a.glog(t.getAt(i)));return r(e,0)},o.mod=function(t){if(o.getLength()-t.getLength()<0)return o;for(var e=a.glog(o.getAt(0))-a.glog(t.getAt(0)),n=new Array(o.getLength()),i=0;i<o.getLength();i+=1)n[i]=o.getAt(i);for(var i=0;i<t.getLength();i+=1)n[i]^=a.gexp(a.glog(t.getAt(i))+e);return r(n,0).mod(t)},o}var t=function(t,e){var o=236,a=17,l=t,s=n[e],g=null,h=0,d=null,w=new Array,y={},p=function(r,t){h=4*l+17,g=function(r){for(var t=new Array(r),e=0;r>e;e+=1){t[e]=new Array(r);for(var n=0;r>n;n+=1)t[e][n]=null}return t}(h),m(0,0),m(h-7,0),m(0,h-7),E(),B(),M(r,t),l>=7&&T(r),null==d&&(d=x(l,s,w)),k(d,t)},m=function(r,t){for(var e=-1;7>=e;e+=1)if(!(-1>=r+e||r+e>=h))for(var n=-1;7>=n;n+=1)-1>=t+n||t+n>=h||(e>=0&&6>=e&&(0==n||6==n)||n>=0&&6>=n&&(0==e||6==e)||e>=2&&4>=e&&n>=2&&4>=n?g[r+e][t+n]=!0:g[r+e][t+n]=!1)},A=function(){for(var r=0,t=0,e=0;8>e;e+=1){p(!0,e);var n=i.getLostPoint(y);(0==e||r>n)&&(r=n,t=e)}return t},B=function(){for(var r=8;h-8>r;r+=1)null==g[r][6]&&(g[r][6]=r%2==0);for(var t=8;h-8>t;t+=1)null==g[6][t]&&(g[6][t]=t%2==0)},E=function(){for(var r=i.getPatternPosition(l),t=0;t<r.length;t+=1)for(var e=0;e<r.length;e+=1){var n=r[t],o=r[e];if(null==g[n][o])for(var a=-2;2>=a;a+=1)for(var u=-2;2>=u;u+=1)-2==a||2==a||-2==u||2==u||0==a&&0==u?g[n+a][o+u]=!0:g[n+a][o+u]=!1}},T=function(r){for(var t=i.getBCHTypeNumber(l),e=0;18>e;e+=1){var n=!r&&1==(t>>e&1);g[Math.floor(e/3)][e%3+h-8-3]=n}for(var e=0;18>e;e+=1){var n=!r&&1==(t>>e&1);g[e%3+h-8-3][Math.floor(e/3)]=n}},M=function(r,t){for(var e=s<<3|t,n=i.getBCHTypeInfo(e),o=0;15>o;o+=1){var a=!r&&1==(n>>o&1);6>o?g[o][8]=a:8>o?g[o+1][8]=a:g[h-15+o][8]=a}for(var o=0;15>o;o+=1){var a=!r&&1==(n>>o&1);8>o?g[8][h-o-1]=a:9>o?g[8][15-o-1+1]=a:g[8][15-o-1]=a}g[h-8][8]=!r},k=function(r,t){for(var e=-1,n=h-1,o=7,a=0,u=i.getMaskFunction(t),f=h-1;f>0;f-=2)for(6==f&&(f-=1);;){for(var c=0;2>c;c+=1)if(null==g[n][f-c]){var l=!1;a<r.length&&(l=1==(r[a]>>>o&1));var s=u(n,f-c);s&&(l=!l),g[n][f-c]=l,o-=1,-1==o&&(a+=1,o=7)}if(n+=e,0>n||n>=h){n-=e,e=-e;break}}},b=function(t,e){for(var n=0,o=0,a=0,u=new Array(e.length),f=new Array(e.length),c=0;c<e.length;c+=1){var l=e[c].dataCount,s=e[c].totalCount-l;o=Math.max(o,l),a=Math.max(a,s),u[c]=new Array(l);for(var g=0;g<u[c].length;g+=1)u[c][g]=255&t.getBuffer()[g+n];n+=l;var h=i.getErrorCorrectPolynomial(s),v=r(u[c],h.getLength()-1),d=v.mod(h);f[c]=new Array(h.getLength()-1);for(var g=0;g<f[c].length;g+=1){var w=g+d.getLength()-f[c].length;f[c][g]=w>=0?d.getAt(w):0}}for(var y=0,g=0;g<e.length;g+=1)y+=e[g].totalCount;for(var p=new Array(y),m=0,g=0;o>g;g+=1)for(var c=0;c<e.length;c+=1)g<u[c].length&&(p[m]=u[c][g],m+=1);for(var g=0;a>g;g+=1)for(var c=0;c<e.length;c+=1)g<f[c].length&&(p[m]=f[c][g],m+=1);return p},x=function(r,t,e){for(var n=u.getRSBlocks(r,t),c=f(),l=0;l<e.length;l+=1){var s=e[l];c.put(s.getMode(),4),c.put(s.getLength(),i.getLengthInBits(s.getMode(),r)),s.write(c)}for(var g=0,l=0;l<n.length;l+=1)g+=n[l].dataCount;if(c.getLengthInBits()>8*g)throw new Error("code length overflow. ("+c.getLengthInBits()+">"+8*g+")");for(c.getLengthInBits()+4<=8*g&&c.put(0,4);c.getLengthInBits()%8!=0;)c.putBit(!1);for(;;){if(c.getLengthInBits()>=8*g)break;if(c.put(o,8),c.getLengthInBits()>=8*g)break;c.put(a,8)}return b(c,n)};return y.addData=function(r){var t=c(r);w.push(t),d=null},y.isDark=function(r,t){if(0>r||r>=h||0>t||t>=h)throw new Error(r+","+t);return g[r][t]},y.getModuleCount=function(){return h},y.make=function(){p(!1,A())},y.createTableTag=function(r,t){r=r||2,t="undefined"==typeof t?4*r:t;var e="";e+='<table style="',e+=" border-width: 0px; border-style: none;",e+=" border-collapse: collapse;",e+=" padding: 0px; margin: "+t+"px;",e+='">',e+="<tbody>";for(var n=0;n<y.getModuleCount();n+=1){e+="<tr>";for(var o=0;o<y.getModuleCount();o+=1)e+='<td style="',e+=" border-width: 0px; border-style: none;",e+=" border-collapse: collapse;",e+=" padding: 0px; margin: 0px;",e+=" width: "+r+"px;",e+=" height: "+r+"px;",e+=" background-color: ",e+=y.isDark(n,o)?"#000000":"#ffffff",e+=";",e+='"/>';e+="</tr>"}return e+="</tbody>",e+="</table>"},y.createImgTag=function(r,t){r=r||2,t="undefined"==typeof t?4*r:t;var e=y.getModuleCount()*r+2*t,n=t,o=e-t;return v(e,e,function(t,e){if(t>=n&&o>t&&e>=n&&o>e){var i=Math.floor((t-n)/r),a=Math.floor((e-n)/r);return y.isDark(a,i)?0:1}return 1})},y};t.stringToBytes=function(r){for(var t=new Array,e=0;e<r.length;e+=1){var n=r.charCodeAt(e);t.push(255&n)}return t},t.createStringToBytes=function(r,t){var e=function(){for(var e=g(r),n=function(){var r=e.read();if(-1==r)throw new Error;return r},o=0,i={};;){var a=e.read();if(-1==a)break;var u=n(),f=n(),c=n(),l=String.fromCharCode(a<<8|u),s=f<<8|c;i[l]=s,o+=1}if(o!=t)throw new Error(o+" != "+t);return i}(),n="?".charCodeAt(0);return function(r){for(var t=new Array,o=0;o<r.length;o+=1){var i=r.charCodeAt(o);if(128>i)t.push(i);else{var a=e[r.charAt(o)];"number"==typeof a?(255&a)==a?t.push(a):(t.push(a>>>8),t.push(255&a)):t.push(n)}}return t}};var e={MODE_NUMBER:1,MODE_ALPHA_NUM:2,MODE_8BIT_BYTE:4,MODE_KANJI:8},n={L:1,M:0,Q:3,H:2},o={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7},i=function(){var t=[[],[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,78,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]],n=1335,i=7973,u=21522,f={},c=function(r){for(var t=0;0!=r;)t+=1,r>>>=1;return t};return f.getBCHTypeInfo=function(r){for(var t=r<<10;c(t)-c(n)>=0;)t^=n<<c(t)-c(n);return(r<<10|t)^u},f.getBCHTypeNumber=function(r){for(var t=r<<12;c(t)-c(i)>=0;)t^=i<<c(t)-c(i);return r<<12|t},f.getPatternPosition=function(r){return t[r-1]},f.getMaskFunction=function(r){switch(r){case o.PATTERN000:return function(r,t){return(r+t)%2==0};case o.PATTERN001:return function(r,t){return r%2==0};case o.PATTERN010:return function(r,t){return t%3==0};case o.PATTERN011:return function(r,t){return(r+t)%3==0};case o.PATTERN100:return function(r,t){return(Math.floor(r/2)+Math.floor(t/3))%2==0};case o.PATTERN101:return function(r,t){return r*t%2+r*t%3==0};case o.PATTERN110:return function(r,t){return(r*t%2+r*t%3)%2==0};case o.PATTERN111:return function(r,t){return(r*t%3+(r+t)%2)%2==0};default:throw new Error("bad maskPattern:"+r)}},f.getErrorCorrectPolynomial=function(t){for(var e=r([1],0),n=0;t>n;n+=1)e=e.multiply(r([1,a.gexp(n)],0));return e},f.getLengthInBits=function(r,t){if(t>=1&&10>t)switch(r){case e.MODE_NUMBER:return 10;case e.MODE_ALPHA_NUM:return 9;case e.MODE_8BIT_BYTE:return 8;case e.MODE_KANJI:return 8;default:throw new Error("mode:"+r)}else if(27>t)switch(r){case e.MODE_NUMBER:return 12;case e.MODE_ALPHA_NUM:return 11;case e.MODE_8BIT_BYTE:return 16;case e.MODE_KANJI:return 10;default:throw new Error("mode:"+r)}else{if(!(41>t))throw new Error("type:"+t);switch(r){case e.MODE_NUMBER:return 14;case e.MODE_ALPHA_NUM:return 13;case e.MODE_8BIT_BYTE:return 16;case e.MODE_KANJI:return 12;default:throw new Error("mode:"+r)}}},f.getLostPoint=function(r){for(var t=r.getModuleCount(),e=0,n=0;t>n;n+=1)for(var o=0;t>o;o+=1){for(var i=0,a=r.isDark(n,o),u=-1;1>=u;u+=1)if(!(0>n+u||n+u>=t))for(var f=-1;1>=f;f+=1)0>o+f||o+f>=t||0==u&&0==f||a==r.isDark(n+u,o+f)&&(i+=1);i>5&&(e+=3+i-5)}for(var n=0;t-1>n;n+=1)for(var o=0;t-1>o;o+=1){var c=0;r.isDark(n,o)&&(c+=1),r.isDark(n+1,o)&&(c+=1),r.isDark(n,o+1)&&(c+=1),r.isDark(n+1,o+1)&&(c+=1),0!=c&&4!=c||(e+=3)}for(var n=0;t>n;n+=1)for(var o=0;t-6>o;o+=1)r.isDark(n,o)&&!r.isDark(n,o+1)&&r.isDark(n,o+2)&&r.isDark(n,o+3)&&r.isDark(n,o+4)&&!r.isDark(n,o+5)&&r.isDark(n,o+6)&&(e+=40);for(var o=0;t>o;o+=1)for(var n=0;t-6>n;n+=1)r.isDark(n,o)&&!r.isDark(n+1,o)&&r.isDark(n+2,o)&&r.isDark(n+3,o)&&r.isDark(n+4,o)&&!r.isDark(n+5,o)&&r.isDark(n+6,o)&&(e+=40);for(var l=0,o=0;t>o;o+=1)for(var n=0;t>n;n+=1)r.isDark(n,o)&&(l+=1);var s=Math.abs(100*l/t/t-50)/5;return e+=10*s},f}(),a=function(){for(var r=new Array(256),t=new Array(256),e=0;8>e;e+=1)r[e]=1<<e;for(var e=8;256>e;e+=1)r[e]=r[e-4]^r[e-5]^r[e-6]^r[e-8];for(var e=0;255>e;e+=1)t[r[e]]=e;var n={};return n.glog=function(r){if(1>r)throw new Error("glog("+r+")");return t[r]},n.gexp=function(t){for(;0>t;)t+=255;for(;t>=256;)t-=255;return r[t]},n}(),u=function(){var r=[[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],[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,116],[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,7,37,13],[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,43,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,3,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,55,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,45,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]],t=function(r,t){var e={};return e.totalCount=r,e.dataCount=t,e},e={},o=function(t,e){switch(e){case n.L:return r[4*(t-1)+0];case n.M:return r[4*(t-1)+1];case n.Q:return r[4*(t-1)+2];case n.H:return r[4*(t-1)+3];default:return}};return e.getRSBlocks=function(r,e){var n=o(r,e);if("undefined"==typeof n)throw new Error("bad rs block @ typeNumber:"+r+"/errorCorrectLevel:"+e);for(var i=n.length/3,a=new Array,u=0;i>u;u+=1)for(var f=n[3*u+0],c=n[3*u+1],l=n[3*u+2],s=0;f>s;s+=1)a.push(t(c,l));return a},e}(),f=function(){var r=new Array,t=0,e={};return e.getBuffer=function(){return r},e.getAt=function(t){var e=Math.floor(t/8);return 1==(r[e]>>>7-t%8&1)},e.put=function(r,t){for(var n=0;t>n;n+=1)e.putBit(1==(r>>>t-n-1&1))},e.getLengthInBits=function(){return t},e.putBit=function(e){var n=Math.floor(t/8);r.length<=n&&r.push(0),e&&(r[n]|=128>>>t%8),t+=1},e},c=function(r){var n=e.MODE_8BIT_BYTE,o=t.stringToBytes(r),i={};return i.getMode=function(){return n},i.getLength=function(r){return o.length},i.write=function(r){for(var t=0;t<o.length;t+=1)r.put(o[t],8)},i},l=function(){var r=new Array,t={};return t.writeByte=function(t){r.push(255&t)},t.writeShort=function(r){t.writeByte(r),t.writeByte(r>>>8)},t.writeBytes=function(r,e,n){e=e||0,n=n||r.length;for(var o=0;n>o;o+=1)t.writeByte(r[o+e])},t.writeString=function(r){for(var e=0;e<r.length;e+=1)t.writeByte(r.charCodeAt(e))},t.toByteArray=function(){return r},t.toString=function(){var t="";t+="[";for(var e=0;e<r.length;e+=1)e>0&&(t+=","),t+=r[e];return t+="]"},t},s=function(){var r=0,t=0,e=0,n="",o={},i=function(r){n+=String.fromCharCode(a(63&r))},a=function(r){if(0>r);else{if(26>r)return 65+r;if(52>r)return 97+(r-26);if(62>r)return 48+(r-52);if(62==r)return 43;if(63==r)return 47}throw new Error("n:"+r)};return o.writeByte=function(n){for(r=r<<8|255&n,t+=8,e+=1;t>=6;)i(r>>>t-6),t-=6},o.flush=function(){if(t>0&&(i(r<<6-t),r=0,t=0),e%3!=0)for(var o=3-e%3,a=0;o>a;a+=1)n+="="},o.toString=function(){return n},o},g=function(r){var t=r,e=0,n=0,o=0,i={};i.read=function(){for(;8>o;){if(e>=t.length){if(0==o)return-1;throw new Error("unexpected end of file./"+o)}var r=t.charAt(e);if(e+=1,"="==r)return o=0,-1;r.match(/^\s$/)||(n=n<<6|a(r.charCodeAt(0)),o+=6)}var i=n>>>o-8&255;return o-=8,i};var a=function(r){if(r>=65&&90>=r)return r-65;if(r>=97&&122>=r)return r-97+26;if(r>=48&&57>=r)return r-48+52;if(43==r)return 62;if(47==r)return 63;throw new Error("c:"+r)};return i},h=function(r,t){var e=r,n=t,o=new Array(r*t),i={};i.setPixel=function(r,t,n){o[t*e+r]=n},i.write=function(r){r.writeString("GIF87a"),r.writeShort(e),r.writeShort(n),r.writeByte(128),r.writeByte(0),r.writeByte(0),r.writeByte(0),r.writeByte(0),r.writeByte(0),r.writeByte(255),r.writeByte(255),r.writeByte(255),r.writeString(","),r.writeShort(0),r.writeShort(0),r.writeShort(e),r.writeShort(n),r.writeByte(0);var t=2,o=u(t);r.writeByte(t);for(var i=0;o.length-i>255;)r.writeByte(255),r.writeBytes(o,i,255),i+=255;r.writeByte(o.length-i),r.writeBytes(o,i,o.length-i),r.writeByte(0),r.writeString(";")};var a=function(r){var t=r,e=0,n=0,o={};return o.write=function(r,o){if(r>>>o!=0)throw new Error("length over");for(;e+o>=8;)t.writeByte(255&(r<<e|n)),o-=8-e,r>>>=8-e,n=0,e=0;n=r<<e|n,e+=o},o.flush=function(){e>0&&t.writeByte(n)},o},u=function(r){for(var t=1<<r,e=(1<<r)+1,n=r+1,i=f(),u=0;t>u;u+=1)i.add(String.fromCharCode(u));i.add(String.fromCharCode(t)),i.add(String.fromCharCode(e));var c=l(),s=a(c);s.write(t,n);var g=0,h=String.fromCharCode(o[g]);for(g+=1;g<o.length;){var v=String.fromCharCode(o[g]);g+=1,i.contains(h+v)?h+=v:(s.write(i.indexOf(h),n),i.size()<4095&&(i.size()==1<<n&&(n+=1),i.add(h+v)),h=v)}return s.write(i.indexOf(h),n),s.write(e,n),s.flush(),c.toByteArray()},f=function(){var r={},t=0,e={};return e.add=function(n){if(e.contains(n))throw new Error("dup key:"+n);r[n]=t,t+=1},e.size=function(){return t},e.indexOf=function(t){return r[t]},e.contains=function(t){return"undefined"!=typeof r[t]},e};return i},v=function(r,t,e,n){for(var o=h(r,t),i=0;t>i;i+=1)for(var a=0;r>a;a+=1)o.setPixel(a,i,e(a,i));var u=l();o.write(u);for(var f=s(),c=u.toByteArray(),g=0;g<c.length;g+=1)f.writeByte(c[g]);f.flush();var v="";return v+="<img",v+=' src="',v+="data:image/gif;base64,",v+=f,v+='"',v+=' width="',v+=r,v+='"',v+=' height="',v+=t,v+='"',n&&(v+=' alt="',v+=n,v+='"'),v+="/>"};return t}();return function(e){"function"==typeof define&&define.amd?define([],e):"object"==typeof t&&(r.exports=e())}(function(){return e}),!function(r){r.stringToBytes=function(r){function t(r){for(var t=[],e=0;e<r.length;e++){var n=r.charCodeAt(e);128>n?t.push(n):2048>n?t.push(192|n>>6,128|63&n):55296>n||n>=57344?t.push(224|n>>12,128|n>>6&63,128|63&n):(e++,n=65536+((1023&n)<<10|1023&r.charCodeAt(e)),t.push(240|n>>18,128|n>>12&63,128|n>>6&63,128|63&n))}return t}return t(r)}}(e),e}(),i=function(r,t){var i=arguments.length<=2||void 0===arguments[2]?1:arguments[2];i=Math.max(1,i);for(var a=i;40>=a;a+=1)try{var u=function(){var e=o(a,t);e.addData(r),e.make();var n=e.getModuleCount(),i=function(r,t){return r>=0&&n>r&&t>=0&&n>t&&e.isDark(r,t)};return{v:{text:r,level:t,version:a,moduleCount:n,isDark:i}}}();if("object"===("undefined"==typeof u?"undefined":e(u)))return u.v}catch(f){if(!n.test(f.message))throw f}return null},a=function(){var r=arguments.length<=0||void 0===arguments[0]?"":arguments[0],t=arguments.length<=1||void 0===arguments[1]?"L":arguments[1],e=arguments.length<=2||void 0===arguments[2]?1:arguments[2],n=arguments.length<=3||void 0===arguments[3]?0:arguments[3],o=i(r,t,e);return o&&!function(){var r=o.isDark;o.moduleCount+=2*n,o.isDark=function(t,e){return r(t-n,e-n)}}(),o};r.exports=a},function(r,t,e){"use strict";var n=e(5),o=e(6),i=function(r,t){r.fillStyle=t.back,r.fillRect(0,0,t.size,t.size)},a=function(r,t,e,n,o,i){r.isDark(o,i)&&t.rect(i*n,o*n,n,n)},u=function(r,t,e){if(r){var o=e.rounded>0&&e.rounded<=100?n:a,i=r.moduleCount,u=e.size/i,f=0;e.crisp&&(u=Math.floor(u),f=Math.floor((e.size-u*i)/2)),t.translate(f,f),t.beginPath();for(var c=0;i>c;c+=1)for(var l=0;i>l;l+=1)o(r,t,e,u,c,l);t.fillStyle=e.fill,t.fill(),t.translate(-f,-f)}},f=function(r,t,e){i(t,e),u(r,t,e),o(t,e)};r.exports=f},function(r,t){"use strict";var e=function(r){return{c:r,m:function(){var r;return(r=this.c).moveTo.apply(r,arguments),this},l:function(){var r;return(r=this.c).lineTo.apply(r,arguments),this},a:function(){var r;return(r=this.c).arcTo.apply(r,arguments),this}}},n=function(r,t,e,n,o,i,a,u,f,c){a?r.m(t+i,e):r.m(t,e),u?r.l(n-i,e).a(n,e,n,o,i):r.l(n,e),f?r.l(n,o-i).a(n,o,t,o,i):r.l(n,o),c?r.l(t+i,o).a(t,o,t,e,i):r.l(t,o),a?r.l(t,e+i).a(t,e,n,e,i):r.l(t,e)},o=function(r,t,e,n,o,i,a,u,f,c){a&&r.m(t+i,e).l(t,e).l(t,e+i).a(t,e,t+i,e,i),u&&r.m(n-i,e).l(n,e).l(n,e+i).a(n,e,n-i,e,i),f&&r.m(n-i,o).l(n,o).l(n,o-i).a(n,o,n-i,o,i),c&&r.m(t+i,o).l(t,o).l(t,o-i).a(t,o,t+i,o,i)},i=function(r,t,i,a,u,f){var c=f*a,l=u*a,s=c+a,g=l+a,h=.005*i.rounded*a,v=r.isDark,d=u-1,w=u+1,y=f-1,p=f+1,m=v(u,f),A=v(d,y),B=v(d,f),E=v(d,p),T=v(u,p),M=v(w,p),k=v(w,f),b=v(w,y),x=v(u,y),D=e(t);m?n(D,c,l,s,g,h,!B&&!x,!B&&!T,!k&&!T,!k&&!x):o(D,c,l,s,g,h,B&&x&&A,B&&T&&E,k&&T&&M,k&&x&&b)};r.exports=i},function(r,t){"use strict";var e=function(r,t){var e=t.size,n="bold "+.01*t.mSize*e+"px "+t.fontname;r.strokeStyle=t.back,r.lineWidth=.01*t.mSize*e*.1,r.fillStyle=t.fontcolor,r.font=n;var o=r.measureText(t.label).width,i=.01*t.mSize,a=o/e,u=(1-a)*t.mPosX*.01,f=(1-i)*t.mPosY*.01,c=u*e,l=f*e+.75*t.mSize*.01*e;r.strokeText(t.label,c,l),r.fillText(t.label,c,l)},n=function(r,t){var e=t.size,n=t.image.naturalWidth||1,o=t.image.naturalHeight||1,i=.01*t.mSize,a=i*n/o,u=(1-a)*t.mPosX*.01,f=(1-i)*t.mPosY*.01,c=u*e,l=f*e,s=a*e,g=i*e;r.drawImage(t.image,c,l,s,g)},o=function(r,t){var o=t.mode;"label"===o?e(r,t):"image"===o&&n(r,t)};r.exports=o}])});</script>
26832 <script>(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.bitcoinjs = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
26833 (function (global){
26834 'use strict';
26835
26836 // compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
26837 // original notice:
26838
26839 /*!
26840 * The buffer module from node.js, for the browser.
26841 *
26842 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
26843 * @license MIT
26844 */
26845 function compare(a, b) {
26846 if (a === b) {
26847 return 0;
26848 }
26849
26850 var x = a.length;
26851 var y = b.length;
26852
26853 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
26854 if (a[i] !== b[i]) {
26855 x = a[i];
26856 y = b[i];
26857 break;
26858 }
26859 }
26860
26861 if (x < y) {
26862 return -1;
26863 }
26864 if (y < x) {
26865 return 1;
26866 }
26867 return 0;
26868 }
26869 function isBuffer(b) {
26870 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
26871 return global.Buffer.isBuffer(b);
26872 }
26873 return !!(b != null && b._isBuffer);
26874 }
26875
26876 // based on node assert, original notice:
26877
26878 // http://wiki.commonjs.org/wiki/Unit_Testing/1.0
26879 //
26880 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
26881 //
26882 // Originally from narwhal.js (http://narwhaljs.org)
26883 // Copyright (c) 2009 Thomas Robinson <280north.com>
26884 //
26885 // Permission is hereby granted, free of charge, to any person obtaining a copy
26886 // of this software and associated documentation files (the 'Software'), to
26887 // deal in the Software without restriction, including without limitation the
26888 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
26889 // sell copies of the Software, and to permit persons to whom the Software is
26890 // furnished to do so, subject to the following conditions:
26891 //
26892 // The above copyright notice and this permission notice shall be included in
26893 // all copies or substantial portions of the Software.
26894 //
26895 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
26896 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
26897 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26898 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
26899 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26900 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26901
26902 var util = require('util/');
26903 var hasOwn = Object.prototype.hasOwnProperty;
26904 var pSlice = Array.prototype.slice;
26905 var functionsHaveNames = (function () {
26906 return function foo() {}.name === 'foo';
26907 }());
26908 function pToString (obj) {
26909 return Object.prototype.toString.call(obj);
26910 }
26911 function isView(arrbuf) {
26912 if (isBuffer(arrbuf)) {
26913 return false;
26914 }
26915 if (typeof global.ArrayBuffer !== 'function') {
26916 return false;
26917 }
26918 if (typeof ArrayBuffer.isView === 'function') {
26919 return ArrayBuffer.isView(arrbuf);
26920 }
26921 if (!arrbuf) {
26922 return false;
26923 }
26924 if (arrbuf instanceof DataView) {
26925 return true;
26926 }
26927 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
26928 return true;
26929 }
26930 return false;
26931 }
26932 // 1. The assert module provides functions that throw
26933 // AssertionError's when particular conditions are not met. The
26934 // assert module must conform to the following interface.
26935
26936 var assert = module.exports = ok;
26937
26938 // 2. The AssertionError is defined in assert.
26939 // new assert.AssertionError({ message: message,
26940 // actual: actual,
26941 // expected: expected })
26942
26943 var regex = /\s*function\s+([^\(\s]*)\s*/;
26944 // based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
26945 function getName(func) {
26946 if (!util.isFunction(func)) {
26947 return;
26948 }
26949 if (functionsHaveNames) {
26950 return func.name;
26951 }
26952 var str = func.toString();
26953 var match = str.match(regex);
26954 return match && match[1];
26955 }
26956 assert.AssertionError = function AssertionError(options) {
26957 this.name = 'AssertionError';
26958 this.actual = options.actual;
26959 this.expected = options.expected;
26960 this.operator = options.operator;
26961 if (options.message) {
26962 this.message = options.message;
26963 this.generatedMessage = false;
26964 } else {
26965 this.message = getMessage(this);
26966 this.generatedMessage = true;
26967 }
26968 var stackStartFunction = options.stackStartFunction || fail;
26969 if (Error.captureStackTrace) {
26970 Error.captureStackTrace(this, stackStartFunction);
26971 } else {
26972 // non v8 browsers so we can have a stacktrace
26973 var err = new Error();
26974 if (err.stack) {
26975 var out = err.stack;
26976
26977 // try to strip useless frames
26978 var fn_name = getName(stackStartFunction);
26979 var idx = out.indexOf('\n' + fn_name);
26980 if (idx >= 0) {
26981 // once we have located the function frame
26982 // we need to strip out everything before it (and its line)
26983 var next_line = out.indexOf('\n', idx + 1);
26984 out = out.substring(next_line + 1);
26985 }
26986
26987 this.stack = out;
26988 }
26989 }
26990 };
26991
26992 // assert.AssertionError instanceof Error
26993 util.inherits(assert.AssertionError, Error);
26994
26995 function truncate(s, n) {
26996 if (typeof s === 'string') {
26997 return s.length < n ? s : s.slice(0, n);
26998 } else {
26999 return s;
27000 }
27001 }
27002 function inspect(something) {
27003 if (functionsHaveNames || !util.isFunction(something)) {
27004 return util.inspect(something);
27005 }
27006 var rawname = getName(something);
27007 var name = rawname ? ': ' + rawname : '';
27008 return '[Function' + name + ']';
27009 }
27010 function getMessage(self) {
27011 return truncate(inspect(self.actual), 128) + ' ' +
27012 self.operator + ' ' +
27013 truncate(inspect(self.expected), 128);
27014 }
27015
27016 // At present only the three keys mentioned above are used and
27017 // understood by the spec. Implementations or sub modules can pass
27018 // other keys to the AssertionError's constructor - they will be
27019 // ignored.
27020
27021 // 3. All of the following functions must throw an AssertionError
27022 // when a corresponding condition is not met, with a message that
27023 // may be undefined if not provided. All assertion methods provide
27024 // both the actual and expected values to the assertion error for
27025 // display purposes.
27026
27027 function fail(actual, expected, message, operator, stackStartFunction) {
27028 throw new assert.AssertionError({
27029 message: message,
27030 actual: actual,
27031 expected: expected,
27032 operator: operator,
27033 stackStartFunction: stackStartFunction
27034 });
27035 }
27036
27037 // EXTENSION! allows for well behaved errors defined elsewhere.
27038 assert.fail = fail;
27039
27040 // 4. Pure assertion tests whether a value is truthy, as determined
27041 // by !!guard.
27042 // assert.ok(guard, message_opt);
27043 // This statement is equivalent to assert.equal(true, !!guard,
27044 // message_opt);. To test strictly for the value true, use
27045 // assert.strictEqual(true, guard, message_opt);.
27046
27047 function ok(value, message) {
27048 if (!value) fail(value, true, message, '==', assert.ok);
27049 }
27050 assert.ok = ok;
27051
27052 // 5. The equality assertion tests shallow, coercive equality with
27053 // ==.
27054 // assert.equal(actual, expected, message_opt);
27055
27056 assert.equal = function equal(actual, expected, message) {
27057 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
27058 };
27059
27060 // 6. The non-equality assertion tests for whether two objects are not equal
27061 // with != assert.notEqual(actual, expected, message_opt);
27062
27063 assert.notEqual = function notEqual(actual, expected, message) {
27064 if (actual == expected) {
27065 fail(actual, expected, message, '!=', assert.notEqual);
27066 }
27067 };
27068
27069 // 7. The equivalence assertion tests a deep equality relation.
27070 // assert.deepEqual(actual, expected, message_opt);
27071
27072 assert.deepEqual = function deepEqual(actual, expected, message) {
27073 if (!_deepEqual(actual, expected, false)) {
27074 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
27075 }
27076 };
27077
27078 assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
27079 if (!_deepEqual(actual, expected, true)) {
27080 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
27081 }
27082 };
27083
27084 function _deepEqual(actual, expected, strict, memos) {
27085 // 7.1. All identical values are equivalent, as determined by ===.
27086 if (actual === expected) {
27087 return true;
27088 } else if (isBuffer(actual) && isBuffer(expected)) {
27089 return compare(actual, expected) === 0;
27090
27091 // 7.2. If the expected value is a Date object, the actual value is
27092 // equivalent if it is also a Date object that refers to the same time.
27093 } else if (util.isDate(actual) && util.isDate(expected)) {
27094 return actual.getTime() === expected.getTime();
27095
27096 // 7.3 If the expected value is a RegExp object, the actual value is
27097 // equivalent if it is also a RegExp object with the same source and
27098 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
27099 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
27100 return actual.source === expected.source &&
27101 actual.global === expected.global &&
27102 actual.multiline === expected.multiline &&
27103 actual.lastIndex === expected.lastIndex &&
27104 actual.ignoreCase === expected.ignoreCase;
27105
27106 // 7.4. Other pairs that do not both pass typeof value == 'object',
27107 // equivalence is determined by ==.
27108 } else if ((actual === null || typeof actual !== 'object') &&
27109 (expected === null || typeof expected !== 'object')) {
27110 return strict ? actual === expected : actual == expected;
27111
27112 // If both values are instances of typed arrays, wrap their underlying
27113 // ArrayBuffers in a Buffer each to increase performance
27114 // This optimization requires the arrays to have the same type as checked by
27115 // Object.prototype.toString (aka pToString). Never perform binary
27116 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
27117 // bit patterns are not identical.
27118 } else if (isView(actual) && isView(expected) &&
27119 pToString(actual) === pToString(expected) &&
27120 !(actual instanceof Float32Array ||
27121 actual instanceof Float64Array)) {
27122 return compare(new Uint8Array(actual.buffer),
27123 new Uint8Array(expected.buffer)) === 0;
27124
27125 // 7.5 For all other Object pairs, including Array objects, equivalence is
27126 // determined by having the same number of owned properties (as verified
27127 // with Object.prototype.hasOwnProperty.call), the same set of keys
27128 // (although not necessarily the same order), equivalent values for every
27129 // corresponding key, and an identical 'prototype' property. Note: this
27130 // accounts for both named and indexed properties on Arrays.
27131 } else if (isBuffer(actual) !== isBuffer(expected)) {
27132 return false;
27133 } else {
27134 memos = memos || {actual: [], expected: []};
27135
27136 var actualIndex = memos.actual.indexOf(actual);
27137 if (actualIndex !== -1) {
27138 if (actualIndex === memos.expected.indexOf(expected)) {
27139 return true;
27140 }
27141 }
27142
27143 memos.actual.push(actual);
27144 memos.expected.push(expected);
27145
27146 return objEquiv(actual, expected, strict, memos);
27147 }
27148 }
27149
27150 function isArguments(object) {
27151 return Object.prototype.toString.call(object) == '[object Arguments]';
27152 }
27153
27154 function objEquiv(a, b, strict, actualVisitedObjects) {
27155 if (a === null || a === undefined || b === null || b === undefined)
27156 return false;
27157 // if one is a primitive, the other must be same
27158 if (util.isPrimitive(a) || util.isPrimitive(b))
27159 return a === b;
27160 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
27161 return false;
27162 var aIsArgs = isArguments(a);
27163 var bIsArgs = isArguments(b);
27164 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
27165 return false;
27166 if (aIsArgs) {
27167 a = pSlice.call(a);
27168 b = pSlice.call(b);
27169 return _deepEqual(a, b, strict);
27170 }
27171 var ka = objectKeys(a);
27172 var kb = objectKeys(b);
27173 var key, i;
27174 // having the same number of owned properties (keys incorporates
27175 // hasOwnProperty)
27176 if (ka.length !== kb.length)
27177 return false;
27178 //the same set of keys (although not necessarily the same order),
27179 ka.sort();
27180 kb.sort();
27181 //~~~cheap key test
27182 for (i = ka.length - 1; i >= 0; i--) {
27183 if (ka[i] !== kb[i])
27184 return false;
27185 }
27186 //equivalent values for every corresponding key, and
27187 //~~~possibly expensive deep test
27188 for (i = ka.length - 1; i >= 0; i--) {
27189 key = ka[i];
27190 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
27191 return false;
27192 }
27193 return true;
27194 }
27195
27196 // 8. The non-equivalence assertion tests for any deep inequality.
27197 // assert.notDeepEqual(actual, expected, message_opt);
27198
27199 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
27200 if (_deepEqual(actual, expected, false)) {
27201 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
27202 }
27203 };
27204
27205 assert.notDeepStrictEqual = notDeepStrictEqual;
27206 function notDeepStrictEqual(actual, expected, message) {
27207 if (_deepEqual(actual, expected, true)) {
27208 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
27209 }
27210 }
27211
27212
27213 // 9. The strict equality assertion tests strict equality, as determined by ===.
27214 // assert.strictEqual(actual, expected, message_opt);
27215
27216 assert.strictEqual = function strictEqual(actual, expected, message) {
27217 if (actual !== expected) {
27218 fail(actual, expected, message, '===', assert.strictEqual);
27219 }
27220 };
27221
27222 // 10. The strict non-equality assertion tests for strict inequality, as
27223 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
27224
27225 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
27226 if (actual === expected) {
27227 fail(actual, expected, message, '!==', assert.notStrictEqual);
27228 }
27229 };
27230
27231 function expectedException(actual, expected) {
27232 if (!actual || !expected) {
27233 return false;
27234 }
27235
27236 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
27237 return expected.test(actual);
27238 }
27239
27240 try {
27241 if (actual instanceof expected) {
27242 return true;
27243 }
27244 } catch (e) {
27245 // Ignore. The instanceof check doesn't work for arrow functions.
27246 }
27247
27248 if (Error.isPrototypeOf(expected)) {
27249 return false;
27250 }
27251
27252 return expected.call({}, actual) === true;
27253 }
27254
27255 function _tryBlock(block) {
27256 var error;
27257 try {
27258 block();
27259 } catch (e) {
27260 error = e;
27261 }
27262 return error;
27263 }
27264
27265 function _throws(shouldThrow, block, expected, message) {
27266 var actual;
27267
27268 if (typeof block !== 'function') {
27269 throw new TypeError('"block" argument must be a function');
27270 }
27271
27272 if (typeof expected === 'string') {
27273 message = expected;
27274 expected = null;
27275 }
27276
27277 actual = _tryBlock(block);
27278
27279 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
27280 (message ? ' ' + message : '.');
27281
27282 if (shouldThrow && !actual) {
27283 fail(actual, expected, 'Missing expected exception' + message);
27284 }
27285
27286 var userProvidedMessage = typeof message === 'string';
27287 var isUnwantedException = !shouldThrow && util.isError(actual);
27288 var isUnexpectedException = !shouldThrow && actual && !expected;
27289
27290 if ((isUnwantedException &&
27291 userProvidedMessage &&
27292 expectedException(actual, expected)) ||
27293 isUnexpectedException) {
27294 fail(actual, expected, 'Got unwanted exception' + message);
27295 }
27296
27297 if ((shouldThrow && actual && expected &&
27298 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
27299 throw actual;
27300 }
27301 }
27302
27303 // 11. Expected to throw an error:
27304 // assert.throws(block, Error_opt, message_opt);
27305
27306 assert.throws = function(block, /*optional*/error, /*optional*/message) {
27307 _throws(true, block, error, message);
27308 };
27309
27310 // EXTENSION! This is annoying to write outside this module.
27311 assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
27312 _throws(false, block, error, message);
27313 };
27314
27315 assert.ifError = function(err) { if (err) throw err; };
27316
27317 var objectKeys = Object.keys || function (obj) {
27318 var keys = [];
27319 for (var key in obj) {
27320 if (hasOwn.call(obj, key)) keys.push(key);
27321 }
27322 return keys;
27323 };
27324
27325 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
27326 },{"util/":33}],2:[function(require,module,exports){
27327 'use strict'
27328
27329 exports.byteLength = byteLength
27330 exports.toByteArray = toByteArray
27331 exports.fromByteArray = fromByteArray
27332
27333 var lookup = []
27334 var revLookup = []
27335 var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
27336
27337 var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
27338 for (var i = 0, len = code.length; i < len; ++i) {
27339 lookup[i] = code[i]
27340 revLookup[code.charCodeAt(i)] = i
27341 }
27342
27343 revLookup['-'.charCodeAt(0)] = 62
27344 revLookup['_'.charCodeAt(0)] = 63
27345
27346 function placeHoldersCount (b64) {
27347 var len = b64.length
27348 if (len % 4 > 0) {
27349 throw new Error('Invalid string. Length must be a multiple of 4')
27350 }
27351
27352 // the number of equal signs (place holders)
27353 // if there are two placeholders, than the two characters before it
27354 // represent one byte
27355 // if there is only one, then the three characters before it represent 2 bytes
27356 // this is just a cheap hack to not do indexOf twice
27357 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
27358 }
27359
27360 function byteLength (b64) {
27361 // base64 is 4/3 + up to two characters of the original data
27362 return b64.length * 3 / 4 - placeHoldersCount(b64)
27363 }
27364
27365 function toByteArray (b64) {
27366 var i, j, l, tmp, placeHolders, arr
27367 var len = b64.length
27368 placeHolders = placeHoldersCount(b64)
27369
27370 arr = new Arr(len * 3 / 4 - placeHolders)
27371
27372 // if there are placeholders, only get up to the last complete 4 chars
27373 l = placeHolders > 0 ? len - 4 : len
27374
27375 var L = 0
27376
27377 for (i = 0, j = 0; i < l; i += 4, j += 3) {
27378 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
27379 arr[L++] = (tmp >> 16) & 0xFF
27380 arr[L++] = (tmp >> 8) & 0xFF
27381 arr[L++] = tmp & 0xFF
27382 }
27383
27384 if (placeHolders === 2) {
27385 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
27386 arr[L++] = tmp & 0xFF
27387 } else if (placeHolders === 1) {
27388 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
27389 arr[L++] = (tmp >> 8) & 0xFF
27390 arr[L++] = tmp & 0xFF
27391 }
27392
27393 return arr
27394 }
27395
27396 function tripletToBase64 (num) {
27397 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
27398 }
27399
27400 function encodeChunk (uint8, start, end) {
27401 var tmp
27402 var output = []
27403 for (var i = start; i < end; i += 3) {
27404 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
27405 output.push(tripletToBase64(tmp))
27406 }
27407 return output.join('')
27408 }
27409
27410 function fromByteArray (uint8) {
27411 var tmp
27412 var len = uint8.length
27413 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
27414 var output = ''
27415 var parts = []
27416 var maxChunkLength = 16383 // must be multiple of 3
27417
27418 // go through the array every three bytes, we'll deal with trailing stuff later
27419 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
27420 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
27421 }
27422
27423 // pad the end with zeros, but make sure to not forget the extra bytes
27424 if (extraBytes === 1) {
27425 tmp = uint8[len - 1]
27426 output += lookup[tmp >> 2]
27427 output += lookup[(tmp << 4) & 0x3F]
27428 output += '=='
27429 } else if (extraBytes === 2) {
27430 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
27431 output += lookup[tmp >> 10]
27432 output += lookup[(tmp >> 4) & 0x3F]
27433 output += lookup[(tmp << 2) & 0x3F]
27434 output += '='
27435 }
27436
27437 parts.push(output)
27438
27439 return parts.join('')
27440 }
27441
27442 },{}],3:[function(require,module,exports){
27443
27444 },{}],4:[function(require,module,exports){
27445 (function (global){
27446 'use strict';
27447
27448 var buffer = require('buffer');
27449 var Buffer = buffer.Buffer;
27450 var SlowBuffer = buffer.SlowBuffer;
27451 var MAX_LEN = buffer.kMaxLength || 2147483647;
27452 exports.alloc = function alloc(size, fill, encoding) {
27453 if (typeof Buffer.alloc === 'function') {
27454 return Buffer.alloc(size, fill, encoding);
27455 }
27456 if (typeof encoding === 'number') {
27457 throw new TypeError('encoding must not be number');
27458 }
27459 if (typeof size !== 'number') {
27460 throw new TypeError('size must be a number');
27461 }
27462 if (size > MAX_LEN) {
27463 throw new RangeError('size is too large');
27464 }
27465 var enc = encoding;
27466 var _fill = fill;
27467 if (_fill === undefined) {
27468 enc = undefined;
27469 _fill = 0;
27470 }
27471 var buf = new Buffer(size);
27472 if (typeof _fill === 'string') {
27473 var fillBuf = new Buffer(_fill, enc);
27474 var flen = fillBuf.length;
27475 var i = -1;
27476 while (++i < size) {
27477 buf[i] = fillBuf[i % flen];
27478 }
27479 } else {
27480 buf.fill(_fill);
27481 }
27482 return buf;
27483 }
27484 exports.allocUnsafe = function allocUnsafe(size) {
27485 if (typeof Buffer.allocUnsafe === 'function') {
27486 return Buffer.allocUnsafe(size);
27487 }
27488 if (typeof size !== 'number') {
27489 throw new TypeError('size must be a number');
27490 }
27491 if (size > MAX_LEN) {
27492 throw new RangeError('size is too large');
27493 }
27494 return new Buffer(size);
27495 }
27496 exports.from = function from(value, encodingOrOffset, length) {
27497 if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
27498 return Buffer.from(value, encodingOrOffset, length);
27499 }
27500 if (typeof value === 'number') {
27501 throw new TypeError('"value" argument must not be a number');
27502 }
27503 if (typeof value === 'string') {
27504 return new Buffer(value, encodingOrOffset);
27505 }
27506 if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
27507 var offset = encodingOrOffset;
27508 if (arguments.length === 1) {
27509 return new Buffer(value);
27510 }
27511 if (typeof offset === 'undefined') {
27512 offset = 0;
27513 }
27514 var len = length;
27515 if (typeof len === 'undefined') {
27516 len = value.byteLength - offset;
27517 }
27518 if (offset >= value.byteLength) {
27519 throw new RangeError('\'offset\' is out of bounds');
27520 }
27521 if (len > value.byteLength - offset) {
27522 throw new RangeError('\'length\' is out of bounds');
27523 }
27524 return new Buffer(value.slice(offset, offset + len));
27525 }
27526 if (Buffer.isBuffer(value)) {
27527 var out = new Buffer(value.length);
27528 value.copy(out, 0, 0, value.length);
27529 return out;
27530 }
27531 if (value) {
27532 if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
27533 return new Buffer(value);
27534 }
27535 if (value.type === 'Buffer' && Array.isArray(value.data)) {
27536 return new Buffer(value.data);
27537 }
27538 }
27539
27540 throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
27541 }
27542 exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
27543 if (typeof Buffer.allocUnsafeSlow === 'function') {
27544 return Buffer.allocUnsafeSlow(size);
27545 }
27546 if (typeof size !== 'number') {
27547 throw new TypeError('size must be a number');
27548 }
27549 if (size >= MAX_LEN) {
27550 throw new RangeError('size is too large');
27551 }
27552 return new SlowBuffer(size);
27553 }
27554
27555 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
27556 },{"buffer":5}],5:[function(require,module,exports){
27557 /*!
27558 * The buffer module from node.js, for the browser.
27559 *
27560 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
27561 * @license MIT
27562 */
27563 /* eslint-disable no-proto */
27564
27565 'use strict'
27566
27567 var base64 = require('base64-js')
27568 var ieee754 = require('ieee754')
27569
27570 exports.Buffer = Buffer
27571 exports.SlowBuffer = SlowBuffer
27572 exports.INSPECT_MAX_BYTES = 50
27573
27574 var K_MAX_LENGTH = 0x7fffffff
27575 exports.kMaxLength = K_MAX_LENGTH
27576
27577 /**
27578 * If `Buffer.TYPED_ARRAY_SUPPORT`:
27579 * === true Use Uint8Array implementation (fastest)
27580 * === false Print warning and recommend using `buffer` v4.x which has an Object
27581 * implementation (most compatible, even IE6)
27582 *
27583 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
27584 * Opera 11.6+, iOS 4.2+.
27585 *
27586 * We report that the browser does not support typed arrays if the are not subclassable
27587 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
27588 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
27589 * for __proto__ and has a buggy typed array implementation.
27590 */
27591 Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
27592
27593 if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
27594 typeof console.error === 'function') {
27595 console.error(
27596 'This browser lacks typed array (Uint8Array) support which is required by ' +
27597 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
27598 )
27599 }
27600
27601 function typedArraySupport () {
27602 // Can typed array instances can be augmented?
27603 try {
27604 var arr = new Uint8Array(1)
27605 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
27606 return arr.foo() === 42
27607 } catch (e) {
27608 return false
27609 }
27610 }
27611
27612 function createBuffer (length) {
27613 if (length > K_MAX_LENGTH) {
27614 throw new RangeError('Invalid typed array length')
27615 }
27616 // Return an augmented `Uint8Array` instance
27617 var buf = new Uint8Array(length)
27618 buf.__proto__ = Buffer.prototype
27619 return buf
27620 }
27621
27622 /**
27623 * The Buffer constructor returns instances of `Uint8Array` that have their
27624 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
27625 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
27626 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
27627 * returns a single octet.
27628 *
27629 * The `Uint8Array` prototype remains unmodified.
27630 */
27631
27632 function Buffer (arg, encodingOrOffset, length) {
27633 // Common case.
27634 if (typeof arg === 'number') {
27635 if (typeof encodingOrOffset === 'string') {
27636 throw new Error(
27637 'If encoding is specified then the first argument must be a string'
27638 )
27639 }
27640 return allocUnsafe(arg)
27641 }
27642 return from(arg, encodingOrOffset, length)
27643 }
27644
27645 // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
27646 if (typeof Symbol !== 'undefined' && Symbol.species &&
27647 Buffer[Symbol.species] === Buffer) {
27648 Object.defineProperty(Buffer, Symbol.species, {
27649 value: null,
27650 configurable: true,
27651 enumerable: false,
27652 writable: false
27653 })
27654 }
27655
27656 Buffer.poolSize = 8192 // not used by this implementation
27657
27658 function from (value, encodingOrOffset, length) {
27659 if (typeof value === 'number') {
27660 throw new TypeError('"value" argument must not be a number')
27661 }
27662
27663 if (value instanceof ArrayBuffer) {
27664 return fromArrayBuffer(value, encodingOrOffset, length)
27665 }
27666
27667 if (typeof value === 'string') {
27668 return fromString(value, encodingOrOffset)
27669 }
27670
27671 return fromObject(value)
27672 }
27673
27674 /**
27675 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
27676 * if value is a number.
27677 * Buffer.from(str[, encoding])
27678 * Buffer.from(array)
27679 * Buffer.from(buffer)
27680 * Buffer.from(arrayBuffer[, byteOffset[, length]])
27681 **/
27682 Buffer.from = function (value, encodingOrOffset, length) {
27683 return from(value, encodingOrOffset, length)
27684 }
27685
27686 // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
27687 // https://github.com/feross/buffer/pull/148
27688 Buffer.prototype.__proto__ = Uint8Array.prototype
27689 Buffer.__proto__ = Uint8Array
27690
27691 function assertSize (size) {
27692 if (typeof size !== 'number') {
27693 throw new TypeError('"size" argument must be a number')
27694 } else if (size < 0) {
27695 throw new RangeError('"size" argument must not be negative')
27696 }
27697 }
27698
27699 function alloc (size, fill, encoding) {
27700 assertSize(size)
27701 if (size <= 0) {
27702 return createBuffer(size)
27703 }
27704 if (fill !== undefined) {
27705 // Only pay attention to encoding if it's a string. This
27706 // prevents accidentally sending in a number that would
27707 // be interpretted as a start offset.
27708 return typeof encoding === 'string'
27709 ? createBuffer(size).fill(fill, encoding)
27710 : createBuffer(size).fill(fill)
27711 }
27712 return createBuffer(size)
27713 }
27714
27715 /**
27716 * Creates a new filled Buffer instance.
27717 * alloc(size[, fill[, encoding]])
27718 **/
27719 Buffer.alloc = function (size, fill, encoding) {
27720 return alloc(size, fill, encoding)
27721 }
27722
27723 function allocUnsafe (size) {
27724 assertSize(size)
27725 return createBuffer(size < 0 ? 0 : checked(size) | 0)
27726 }
27727
27728 /**
27729 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
27730 * */
27731 Buffer.allocUnsafe = function (size) {
27732 return allocUnsafe(size)
27733 }
27734 /**
27735 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
27736 */
27737 Buffer.allocUnsafeSlow = function (size) {
27738 return allocUnsafe(size)
27739 }
27740
27741 function fromString (string, encoding) {
27742 if (typeof encoding !== 'string' || encoding === '') {
27743 encoding = 'utf8'
27744 }
27745
27746 if (!Buffer.isEncoding(encoding)) {
27747 throw new TypeError('"encoding" must be a valid string encoding')
27748 }
27749
27750 var length = byteLength(string, encoding) | 0
27751 var buf = createBuffer(length)
27752
27753 var actual = buf.write(string, encoding)
27754
27755 if (actual !== length) {
27756 // Writing a hex string, for example, that contains invalid characters will
27757 // cause everything after the first invalid character to be ignored. (e.g.
27758 // 'abxxcd' will be treated as 'ab')
27759 buf = buf.slice(0, actual)
27760 }
27761
27762 return buf
27763 }
27764
27765 function fromArrayLike (array) {
27766 var length = array.length < 0 ? 0 : checked(array.length) | 0
27767 var buf = createBuffer(length)
27768 for (var i = 0; i < length; i += 1) {
27769 buf[i] = array[i] & 255
27770 }
27771 return buf
27772 }
27773
27774 function fromArrayBuffer (array, byteOffset, length) {
27775 if (byteOffset < 0 || array.byteLength < byteOffset) {
27776 throw new RangeError('\'offset\' is out of bounds')
27777 }
27778
27779 if (array.byteLength < byteOffset + (length || 0)) {
27780 throw new RangeError('\'length\' is out of bounds')
27781 }
27782
27783 var buf
27784 if (byteOffset === undefined && length === undefined) {
27785 buf = new Uint8Array(array)
27786 } else if (length === undefined) {
27787 buf = new Uint8Array(array, byteOffset)
27788 } else {
27789 buf = new Uint8Array(array, byteOffset, length)
27790 }
27791
27792 // Return an augmented `Uint8Array` instance
27793 buf.__proto__ = Buffer.prototype
27794 return buf
27795 }
27796
27797 function fromObject (obj) {
27798 if (Buffer.isBuffer(obj)) {
27799 var len = checked(obj.length) | 0
27800 var buf = createBuffer(len)
27801
27802 if (buf.length === 0) {
27803 return buf
27804 }
27805
27806 obj.copy(buf, 0, 0, len)
27807 return buf
27808 }
27809
27810 if (obj) {
27811 if (isArrayBufferView(obj) || 'length' in obj) {
27812 if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
27813 return createBuffer(0)
27814 }
27815 return fromArrayLike(obj)
27816 }
27817
27818 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
27819 return fromArrayLike(obj.data)
27820 }
27821 }
27822
27823 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
27824 }
27825
27826 function checked (length) {
27827 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
27828 // length is NaN (which is otherwise coerced to zero.)
27829 if (length >= K_MAX_LENGTH) {
27830 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
27831 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
27832 }
27833 return length | 0
27834 }
27835
27836 function SlowBuffer (length) {
27837 if (+length != length) { // eslint-disable-line eqeqeq
27838 length = 0
27839 }
27840 return Buffer.alloc(+length)
27841 }
27842
27843 Buffer.isBuffer = function isBuffer (b) {
27844 return b != null && b._isBuffer === true
27845 }
27846
27847 Buffer.compare = function compare (a, b) {
27848 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
27849 throw new TypeError('Arguments must be Buffers')
27850 }
27851
27852 if (a === b) return 0
27853
27854 var x = a.length
27855 var y = b.length
27856
27857 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
27858 if (a[i] !== b[i]) {
27859 x = a[i]
27860 y = b[i]
27861 break
27862 }
27863 }
27864
27865 if (x < y) return -1
27866 if (y < x) return 1
27867 return 0
27868 }
27869
27870 Buffer.isEncoding = function isEncoding (encoding) {
27871 switch (String(encoding).toLowerCase()) {
27872 case 'hex':
27873 case 'utf8':
27874 case 'utf-8':
27875 case 'ascii':
27876 case 'latin1':
27877 case 'binary':
27878 case 'base64':
27879 case 'ucs2':
27880 case 'ucs-2':
27881 case 'utf16le':
27882 case 'utf-16le':
27883 return true
27884 default:
27885 return false
27886 }
27887 }
27888
27889 Buffer.concat = function concat (list, length) {
27890 if (!Array.isArray(list)) {
27891 throw new TypeError('"list" argument must be an Array of Buffers')
27892 }
27893
27894 if (list.length === 0) {
27895 return Buffer.alloc(0)
27896 }
27897
27898 var i
27899 if (length === undefined) {
27900 length = 0
27901 for (i = 0; i < list.length; ++i) {
27902 length += list[i].length
27903 }
27904 }
27905
27906 var buffer = Buffer.allocUnsafe(length)
27907 var pos = 0
27908 for (i = 0; i < list.length; ++i) {
27909 var buf = list[i]
27910 if (!Buffer.isBuffer(buf)) {
27911 throw new TypeError('"list" argument must be an Array of Buffers')
27912 }
27913 buf.copy(buffer, pos)
27914 pos += buf.length
27915 }
27916 return buffer
27917 }
27918
27919 function byteLength (string, encoding) {
27920 if (Buffer.isBuffer(string)) {
27921 return string.length
27922 }
27923 if (isArrayBufferView(string) || string instanceof ArrayBuffer) {
27924 return string.byteLength
27925 }
27926 if (typeof string !== 'string') {
27927 string = '' + string
27928 }
27929
27930 var len = string.length
27931 if (len === 0) return 0
27932
27933 // Use a for loop to avoid recursion
27934 var loweredCase = false
27935 for (;;) {
27936 switch (encoding) {
27937 case 'ascii':
27938 case 'latin1':
27939 case 'binary':
27940 return len
27941 case 'utf8':
27942 case 'utf-8':
27943 case undefined:
27944 return utf8ToBytes(string).length
27945 case 'ucs2':
27946 case 'ucs-2':
27947 case 'utf16le':
27948 case 'utf-16le':
27949 return len * 2
27950 case 'hex':
27951 return len >>> 1
27952 case 'base64':
27953 return base64ToBytes(string).length
27954 default:
27955 if (loweredCase) return utf8ToBytes(string).length // assume utf8
27956 encoding = ('' + encoding).toLowerCase()
27957 loweredCase = true
27958 }
27959 }
27960 }
27961 Buffer.byteLength = byteLength
27962
27963 function slowToString (encoding, start, end) {
27964 var loweredCase = false
27965
27966 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
27967 // property of a typed array.
27968
27969 // This behaves neither like String nor Uint8Array in that we set start/end
27970 // to their upper/lower bounds if the value passed is out of range.
27971 // undefined is handled specially as per ECMA-262 6th Edition,
27972 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
27973 if (start === undefined || start < 0) {
27974 start = 0
27975 }
27976 // Return early if start > this.length. Done here to prevent potential uint32
27977 // coercion fail below.
27978 if (start > this.length) {
27979 return ''
27980 }
27981
27982 if (end === undefined || end > this.length) {
27983 end = this.length
27984 }
27985
27986 if (end <= 0) {
27987 return ''
27988 }
27989
27990 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
27991 end >>>= 0
27992 start >>>= 0
27993
27994 if (end <= start) {
27995 return ''
27996 }
27997
27998 if (!encoding) encoding = 'utf8'
27999
28000 while (true) {
28001 switch (encoding) {
28002 case 'hex':
28003 return hexSlice(this, start, end)
28004
28005 case 'utf8':
28006 case 'utf-8':
28007 return utf8Slice(this, start, end)
28008
28009 case 'ascii':
28010 return asciiSlice(this, start, end)
28011
28012 case 'latin1':
28013 case 'binary':
28014 return latin1Slice(this, start, end)
28015
28016 case 'base64':
28017 return base64Slice(this, start, end)
28018
28019 case 'ucs2':
28020 case 'ucs-2':
28021 case 'utf16le':
28022 case 'utf-16le':
28023 return utf16leSlice(this, start, end)
28024
28025 default:
28026 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
28027 encoding = (encoding + '').toLowerCase()
28028 loweredCase = true
28029 }
28030 }
28031 }
28032
28033 // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
28034 // to detect a Buffer instance. It's not possible to use `instanceof Buffer`
28035 // reliably in a browserify context because there could be multiple different
28036 // copies of the 'buffer' package in use. This method works even for Buffer
28037 // instances that were created from another copy of the `buffer` package.
28038 // See: https://github.com/feross/buffer/issues/154
28039 Buffer.prototype._isBuffer = true
28040
28041 function swap (b, n, m) {
28042 var i = b[n]
28043 b[n] = b[m]
28044 b[m] = i
28045 }
28046
28047 Buffer.prototype.swap16 = function swap16 () {
28048 var len = this.length
28049 if (len % 2 !== 0) {
28050 throw new RangeError('Buffer size must be a multiple of 16-bits')
28051 }
28052 for (var i = 0; i < len; i += 2) {
28053 swap(this, i, i + 1)
28054 }
28055 return this
28056 }
28057
28058 Buffer.prototype.swap32 = function swap32 () {
28059 var len = this.length
28060 if (len % 4 !== 0) {
28061 throw new RangeError('Buffer size must be a multiple of 32-bits')
28062 }
28063 for (var i = 0; i < len; i += 4) {
28064 swap(this, i, i + 3)
28065 swap(this, i + 1, i + 2)
28066 }
28067 return this
28068 }
28069
28070 Buffer.prototype.swap64 = function swap64 () {
28071 var len = this.length
28072 if (len % 8 !== 0) {
28073 throw new RangeError('Buffer size must be a multiple of 64-bits')
28074 }
28075 for (var i = 0; i < len; i += 8) {
28076 swap(this, i, i + 7)
28077 swap(this, i + 1, i + 6)
28078 swap(this, i + 2, i + 5)
28079 swap(this, i + 3, i + 4)
28080 }
28081 return this
28082 }
28083
28084 Buffer.prototype.toString = function toString () {
28085 var length = this.length
28086 if (length === 0) return ''
28087 if (arguments.length === 0) return utf8Slice(this, 0, length)
28088 return slowToString.apply(this, arguments)
28089 }
28090
28091 Buffer.prototype.equals = function equals (b) {
28092 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
28093 if (this === b) return true
28094 return Buffer.compare(this, b) === 0
28095 }
28096
28097 Buffer.prototype.inspect = function inspect () {
28098 var str = ''
28099 var max = exports.INSPECT_MAX_BYTES
28100 if (this.length > 0) {
28101 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
28102 if (this.length > max) str += ' ... '
28103 }
28104 return '<Buffer ' + str + '>'
28105 }
28106
28107 Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
28108 if (!Buffer.isBuffer(target)) {
28109 throw new TypeError('Argument must be a Buffer')
28110 }
28111
28112 if (start === undefined) {
28113 start = 0
28114 }
28115 if (end === undefined) {
28116 end = target ? target.length : 0
28117 }
28118 if (thisStart === undefined) {
28119 thisStart = 0
28120 }
28121 if (thisEnd === undefined) {
28122 thisEnd = this.length
28123 }
28124
28125 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
28126 throw new RangeError('out of range index')
28127 }
28128
28129 if (thisStart >= thisEnd && start >= end) {
28130 return 0
28131 }
28132 if (thisStart >= thisEnd) {
28133 return -1
28134 }
28135 if (start >= end) {
28136 return 1
28137 }
28138
28139 start >>>= 0
28140 end >>>= 0
28141 thisStart >>>= 0
28142 thisEnd >>>= 0
28143
28144 if (this === target) return 0
28145
28146 var x = thisEnd - thisStart
28147 var y = end - start
28148 var len = Math.min(x, y)
28149
28150 var thisCopy = this.slice(thisStart, thisEnd)
28151 var targetCopy = target.slice(start, end)
28152
28153 for (var i = 0; i < len; ++i) {
28154 if (thisCopy[i] !== targetCopy[i]) {
28155 x = thisCopy[i]
28156 y = targetCopy[i]
28157 break
28158 }
28159 }
28160
28161 if (x < y) return -1
28162 if (y < x) return 1
28163 return 0
28164 }
28165
28166 // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
28167 // OR the last index of `val` in `buffer` at offset <= `byteOffset`.
28168 //
28169 // Arguments:
28170 // - buffer - a Buffer to search
28171 // - val - a string, Buffer, or number
28172 // - byteOffset - an index into `buffer`; will be clamped to an int32
28173 // - encoding - an optional encoding, relevant is val is a string
28174 // - dir - true for indexOf, false for lastIndexOf
28175 function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
28176 // Empty buffer means no match
28177 if (buffer.length === 0) return -1
28178
28179 // Normalize byteOffset
28180 if (typeof byteOffset === 'string') {
28181 encoding = byteOffset
28182 byteOffset = 0
28183 } else if (byteOffset > 0x7fffffff) {
28184 byteOffset = 0x7fffffff
28185 } else if (byteOffset < -0x80000000) {
28186 byteOffset = -0x80000000
28187 }
28188 byteOffset = +byteOffset // Coerce to Number.
28189 if (numberIsNaN(byteOffset)) {
28190 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
28191 byteOffset = dir ? 0 : (buffer.length - 1)
28192 }
28193
28194 // Normalize byteOffset: negative offsets start from the end of the buffer
28195 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
28196 if (byteOffset >= buffer.length) {
28197 if (dir) return -1
28198 else byteOffset = buffer.length - 1
28199 } else if (byteOffset < 0) {
28200 if (dir) byteOffset = 0
28201 else return -1
28202 }
28203
28204 // Normalize val
28205 if (typeof val === 'string') {
28206 val = Buffer.from(val, encoding)
28207 }
28208
28209 // Finally, search either indexOf (if dir is true) or lastIndexOf
28210 if (Buffer.isBuffer(val)) {
28211 // Special case: looking for empty string/buffer always fails
28212 if (val.length === 0) {
28213 return -1
28214 }
28215 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
28216 } else if (typeof val === 'number') {
28217 val = val & 0xFF // Search for a byte value [0-255]
28218 if (typeof Uint8Array.prototype.indexOf === 'function') {
28219 if (dir) {
28220 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
28221 } else {
28222 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
28223 }
28224 }
28225 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
28226 }
28227
28228 throw new TypeError('val must be string, number or Buffer')
28229 }
28230
28231 function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
28232 var indexSize = 1
28233 var arrLength = arr.length
28234 var valLength = val.length
28235
28236 if (encoding !== undefined) {
28237 encoding = String(encoding).toLowerCase()
28238 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
28239 encoding === 'utf16le' || encoding === 'utf-16le') {
28240 if (arr.length < 2 || val.length < 2) {
28241 return -1
28242 }
28243 indexSize = 2
28244 arrLength /= 2
28245 valLength /= 2
28246 byteOffset /= 2
28247 }
28248 }
28249
28250 function read (buf, i) {
28251 if (indexSize === 1) {
28252 return buf[i]
28253 } else {
28254 return buf.readUInt16BE(i * indexSize)
28255 }
28256 }
28257
28258 var i
28259 if (dir) {
28260 var foundIndex = -1
28261 for (i = byteOffset; i < arrLength; i++) {
28262 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
28263 if (foundIndex === -1) foundIndex = i
28264 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
28265 } else {
28266 if (foundIndex !== -1) i -= i - foundIndex
28267 foundIndex = -1
28268 }
28269 }
28270 } else {
28271 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
28272 for (i = byteOffset; i >= 0; i--) {
28273 var found = true
28274 for (var j = 0; j < valLength; j++) {
28275 if (read(arr, i + j) !== read(val, j)) {
28276 found = false
28277 break
28278 }
28279 }
28280 if (found) return i
28281 }
28282 }
28283
28284 return -1
28285 }
28286
28287 Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
28288 return this.indexOf(val, byteOffset, encoding) !== -1
28289 }
28290
28291 Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
28292 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
28293 }
28294
28295 Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
28296 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
28297 }
28298
28299 function hexWrite (buf, string, offset, length) {
28300 offset = Number(offset) || 0
28301 var remaining = buf.length - offset
28302 if (!length) {
28303 length = remaining
28304 } else {
28305 length = Number(length)
28306 if (length > remaining) {
28307 length = remaining
28308 }
28309 }
28310
28311 // must be an even number of digits
28312 var strLen = string.length
28313 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
28314
28315 if (length > strLen / 2) {
28316 length = strLen / 2
28317 }
28318 for (var i = 0; i < length; ++i) {
28319 var parsed = parseInt(string.substr(i * 2, 2), 16)
28320 if (numberIsNaN(parsed)) return i
28321 buf[offset + i] = parsed
28322 }
28323 return i
28324 }
28325
28326 function utf8Write (buf, string, offset, length) {
28327 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
28328 }
28329
28330 function asciiWrite (buf, string, offset, length) {
28331 return blitBuffer(asciiToBytes(string), buf, offset, length)
28332 }
28333
28334 function latin1Write (buf, string, offset, length) {
28335 return asciiWrite(buf, string, offset, length)
28336 }
28337
28338 function base64Write (buf, string, offset, length) {
28339 return blitBuffer(base64ToBytes(string), buf, offset, length)
28340 }
28341
28342 function ucs2Write (buf, string, offset, length) {
28343 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
28344 }
28345
28346 Buffer.prototype.write = function write (string, offset, length, encoding) {
28347 // Buffer#write(string)
28348 if (offset === undefined) {
28349 encoding = 'utf8'
28350 length = this.length
28351 offset = 0
28352 // Buffer#write(string, encoding)
28353 } else if (length === undefined && typeof offset === 'string') {
28354 encoding = offset
28355 length = this.length
28356 offset = 0
28357 // Buffer#write(string, offset[, length][, encoding])
28358 } else if (isFinite(offset)) {
28359 offset = offset >>> 0
28360 if (isFinite(length)) {
28361 length = length >>> 0
28362 if (encoding === undefined) encoding = 'utf8'
28363 } else {
28364 encoding = length
28365 length = undefined
28366 }
28367 } else {
28368 throw new Error(
28369 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
28370 )
28371 }
28372
28373 var remaining = this.length - offset
28374 if (length === undefined || length > remaining) length = remaining
28375
28376 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
28377 throw new RangeError('Attempt to write outside buffer bounds')
28378 }
28379
28380 if (!encoding) encoding = 'utf8'
28381
28382 var loweredCase = false
28383 for (;;) {
28384 switch (encoding) {
28385 case 'hex':
28386 return hexWrite(this, string, offset, length)
28387
28388 case 'utf8':
28389 case 'utf-8':
28390 return utf8Write(this, string, offset, length)
28391
28392 case 'ascii':
28393 return asciiWrite(this, string, offset, length)
28394
28395 case 'latin1':
28396 case 'binary':
28397 return latin1Write(this, string, offset, length)
28398
28399 case 'base64':
28400 // Warning: maxLength not taken into account in base64Write
28401 return base64Write(this, string, offset, length)
28402
28403 case 'ucs2':
28404 case 'ucs-2':
28405 case 'utf16le':
28406 case 'utf-16le':
28407 return ucs2Write(this, string, offset, length)
28408
28409 default:
28410 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
28411 encoding = ('' + encoding).toLowerCase()
28412 loweredCase = true
28413 }
28414 }
28415 }
28416
28417 Buffer.prototype.toJSON = function toJSON () {
28418 return {
28419 type: 'Buffer',
28420 data: Array.prototype.slice.call(this._arr || this, 0)
28421 }
28422 }
28423
28424 function base64Slice (buf, start, end) {
28425 if (start === 0 && end === buf.length) {
28426 return base64.fromByteArray(buf)
28427 } else {
28428 return base64.fromByteArray(buf.slice(start, end))
28429 }
28430 }
28431
28432 function utf8Slice (buf, start, end) {
28433 end = Math.min(buf.length, end)
28434 var res = []
28435
28436 var i = start
28437 while (i < end) {
28438 var firstByte = buf[i]
28439 var codePoint = null
28440 var bytesPerSequence = (firstByte > 0xEF) ? 4
28441 : (firstByte > 0xDF) ? 3
28442 : (firstByte > 0xBF) ? 2
28443 : 1
28444
28445 if (i + bytesPerSequence <= end) {
28446 var secondByte, thirdByte, fourthByte, tempCodePoint
28447
28448 switch (bytesPerSequence) {
28449 case 1:
28450 if (firstByte < 0x80) {
28451 codePoint = firstByte
28452 }
28453 break
28454 case 2:
28455 secondByte = buf[i + 1]
28456 if ((secondByte & 0xC0) === 0x80) {
28457 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
28458 if (tempCodePoint > 0x7F) {
28459 codePoint = tempCodePoint
28460 }
28461 }
28462 break
28463 case 3:
28464 secondByte = buf[i + 1]
28465 thirdByte = buf[i + 2]
28466 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
28467 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
28468 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
28469 codePoint = tempCodePoint
28470 }
28471 }
28472 break
28473 case 4:
28474 secondByte = buf[i + 1]
28475 thirdByte = buf[i + 2]
28476 fourthByte = buf[i + 3]
28477 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
28478 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
28479 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
28480 codePoint = tempCodePoint
28481 }
28482 }
28483 }
28484 }
28485
28486 if (codePoint === null) {
28487 // we did not generate a valid codePoint so insert a
28488 // replacement char (U+FFFD) and advance only 1 byte
28489 codePoint = 0xFFFD
28490 bytesPerSequence = 1
28491 } else if (codePoint > 0xFFFF) {
28492 // encode to utf16 (surrogate pair dance)
28493 codePoint -= 0x10000
28494 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
28495 codePoint = 0xDC00 | codePoint & 0x3FF
28496 }
28497
28498 res.push(codePoint)
28499 i += bytesPerSequence
28500 }
28501
28502 return decodeCodePointsArray(res)
28503 }
28504
28505 // Based on http://stackoverflow.com/a/22747272/680742, the browser with
28506 // the lowest limit is Chrome, with 0x10000 args.
28507 // We go 1 magnitude less, for safety
28508 var MAX_ARGUMENTS_LENGTH = 0x1000
28509
28510 function decodeCodePointsArray (codePoints) {
28511 var len = codePoints.length
28512 if (len <= MAX_ARGUMENTS_LENGTH) {
28513 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
28514 }
28515
28516 // Decode in chunks to avoid "call stack size exceeded".
28517 var res = ''
28518 var i = 0
28519 while (i < len) {
28520 res += String.fromCharCode.apply(
28521 String,
28522 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
28523 )
28524 }
28525 return res
28526 }
28527
28528 function asciiSlice (buf, start, end) {
28529 var ret = ''
28530 end = Math.min(buf.length, end)
28531
28532 for (var i = start; i < end; ++i) {
28533 ret += String.fromCharCode(buf[i] & 0x7F)
28534 }
28535 return ret
28536 }
28537
28538 function latin1Slice (buf, start, end) {
28539 var ret = ''
28540 end = Math.min(buf.length, end)
28541
28542 for (var i = start; i < end; ++i) {
28543 ret += String.fromCharCode(buf[i])
28544 }
28545 return ret
28546 }
28547
28548 function hexSlice (buf, start, end) {
28549 var len = buf.length
28550
28551 if (!start || start < 0) start = 0
28552 if (!end || end < 0 || end > len) end = len
28553
28554 var out = ''
28555 for (var i = start; i < end; ++i) {
28556 out += toHex(buf[i])
28557 }
28558 return out
28559 }
28560
28561 function utf16leSlice (buf, start, end) {
28562 var bytes = buf.slice(start, end)
28563 var res = ''
28564 for (var i = 0; i < bytes.length; i += 2) {
28565 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
28566 }
28567 return res
28568 }
28569
28570 Buffer.prototype.slice = function slice (start, end) {
28571 var len = this.length
28572 start = ~~start
28573 end = end === undefined ? len : ~~end
28574
28575 if (start < 0) {
28576 start += len
28577 if (start < 0) start = 0
28578 } else if (start > len) {
28579 start = len
28580 }
28581
28582 if (end < 0) {
28583 end += len
28584 if (end < 0) end = 0
28585 } else if (end > len) {
28586 end = len
28587 }
28588
28589 if (end < start) end = start
28590
28591 var newBuf = this.subarray(start, end)
28592 // Return an augmented `Uint8Array` instance
28593 newBuf.__proto__ = Buffer.prototype
28594 return newBuf
28595 }
28596
28597 /*
28598 * Need to make sure that buffer isn't trying to write out of bounds.
28599 */
28600 function checkOffset (offset, ext, length) {
28601 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
28602 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
28603 }
28604
28605 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
28606 offset = offset >>> 0
28607 byteLength = byteLength >>> 0
28608 if (!noAssert) checkOffset(offset, byteLength, this.length)
28609
28610 var val = this[offset]
28611 var mul = 1
28612 var i = 0
28613 while (++i < byteLength && (mul *= 0x100)) {
28614 val += this[offset + i] * mul
28615 }
28616
28617 return val
28618 }
28619
28620 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
28621 offset = offset >>> 0
28622 byteLength = byteLength >>> 0
28623 if (!noAssert) {
28624 checkOffset(offset, byteLength, this.length)
28625 }
28626
28627 var val = this[offset + --byteLength]
28628 var mul = 1
28629 while (byteLength > 0 && (mul *= 0x100)) {
28630 val += this[offset + --byteLength] * mul
28631 }
28632
28633 return val
28634 }
28635
28636 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
28637 offset = offset >>> 0
28638 if (!noAssert) checkOffset(offset, 1, this.length)
28639 return this[offset]
28640 }
28641
28642 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
28643 offset = offset >>> 0
28644 if (!noAssert) checkOffset(offset, 2, this.length)
28645 return this[offset] | (this[offset + 1] << 8)
28646 }
28647
28648 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
28649 offset = offset >>> 0
28650 if (!noAssert) checkOffset(offset, 2, this.length)
28651 return (this[offset] << 8) | this[offset + 1]
28652 }
28653
28654 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
28655 offset = offset >>> 0
28656 if (!noAssert) checkOffset(offset, 4, this.length)
28657
28658 return ((this[offset]) |
28659 (this[offset + 1] << 8) |
28660 (this[offset + 2] << 16)) +
28661 (this[offset + 3] * 0x1000000)
28662 }
28663
28664 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
28665 offset = offset >>> 0
28666 if (!noAssert) checkOffset(offset, 4, this.length)
28667
28668 return (this[offset] * 0x1000000) +
28669 ((this[offset + 1] << 16) |
28670 (this[offset + 2] << 8) |
28671 this[offset + 3])
28672 }
28673
28674 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
28675 offset = offset >>> 0
28676 byteLength = byteLength >>> 0
28677 if (!noAssert) checkOffset(offset, byteLength, this.length)
28678
28679 var val = this[offset]
28680 var mul = 1
28681 var i = 0
28682 while (++i < byteLength && (mul *= 0x100)) {
28683 val += this[offset + i] * mul
28684 }
28685 mul *= 0x80
28686
28687 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
28688
28689 return val
28690 }
28691
28692 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
28693 offset = offset >>> 0
28694 byteLength = byteLength >>> 0
28695 if (!noAssert) checkOffset(offset, byteLength, this.length)
28696
28697 var i = byteLength
28698 var mul = 1
28699 var val = this[offset + --i]
28700 while (i > 0 && (mul *= 0x100)) {
28701 val += this[offset + --i] * mul
28702 }
28703 mul *= 0x80
28704
28705 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
28706
28707 return val
28708 }
28709
28710 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
28711 offset = offset >>> 0
28712 if (!noAssert) checkOffset(offset, 1, this.length)
28713 if (!(this[offset] & 0x80)) return (this[offset])
28714 return ((0xff - this[offset] + 1) * -1)
28715 }
28716
28717 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
28718 offset = offset >>> 0
28719 if (!noAssert) checkOffset(offset, 2, this.length)
28720 var val = this[offset] | (this[offset + 1] << 8)
28721 return (val & 0x8000) ? val | 0xFFFF0000 : val
28722 }
28723
28724 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
28725 offset = offset >>> 0
28726 if (!noAssert) checkOffset(offset, 2, this.length)
28727 var val = this[offset + 1] | (this[offset] << 8)
28728 return (val & 0x8000) ? val | 0xFFFF0000 : val
28729 }
28730
28731 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
28732 offset = offset >>> 0
28733 if (!noAssert) checkOffset(offset, 4, this.length)
28734
28735 return (this[offset]) |
28736 (this[offset + 1] << 8) |
28737 (this[offset + 2] << 16) |
28738 (this[offset + 3] << 24)
28739 }
28740
28741 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
28742 offset = offset >>> 0
28743 if (!noAssert) checkOffset(offset, 4, this.length)
28744
28745 return (this[offset] << 24) |
28746 (this[offset + 1] << 16) |
28747 (this[offset + 2] << 8) |
28748 (this[offset + 3])
28749 }
28750
28751 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
28752 offset = offset >>> 0
28753 if (!noAssert) checkOffset(offset, 4, this.length)
28754 return ieee754.read(this, offset, true, 23, 4)
28755 }
28756
28757 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
28758 offset = offset >>> 0
28759 if (!noAssert) checkOffset(offset, 4, this.length)
28760 return ieee754.read(this, offset, false, 23, 4)
28761 }
28762
28763 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
28764 offset = offset >>> 0
28765 if (!noAssert) checkOffset(offset, 8, this.length)
28766 return ieee754.read(this, offset, true, 52, 8)
28767 }
28768
28769 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
28770 offset = offset >>> 0
28771 if (!noAssert) checkOffset(offset, 8, this.length)
28772 return ieee754.read(this, offset, false, 52, 8)
28773 }
28774
28775 function checkInt (buf, value, offset, ext, max, min) {
28776 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
28777 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
28778 if (offset + ext > buf.length) throw new RangeError('Index out of range')
28779 }
28780
28781 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
28782 value = +value
28783 offset = offset >>> 0
28784 byteLength = byteLength >>> 0
28785 if (!noAssert) {
28786 var maxBytes = Math.pow(2, 8 * byteLength) - 1
28787 checkInt(this, value, offset, byteLength, maxBytes, 0)
28788 }
28789
28790 var mul = 1
28791 var i = 0
28792 this[offset] = value & 0xFF
28793 while (++i < byteLength && (mul *= 0x100)) {
28794 this[offset + i] = (value / mul) & 0xFF
28795 }
28796
28797 return offset + byteLength
28798 }
28799
28800 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
28801 value = +value
28802 offset = offset >>> 0
28803 byteLength = byteLength >>> 0
28804 if (!noAssert) {
28805 var maxBytes = Math.pow(2, 8 * byteLength) - 1
28806 checkInt(this, value, offset, byteLength, maxBytes, 0)
28807 }
28808
28809 var i = byteLength - 1
28810 var mul = 1
28811 this[offset + i] = value & 0xFF
28812 while (--i >= 0 && (mul *= 0x100)) {
28813 this[offset + i] = (value / mul) & 0xFF
28814 }
28815
28816 return offset + byteLength
28817 }
28818
28819 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
28820 value = +value
28821 offset = offset >>> 0
28822 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
28823 this[offset] = (value & 0xff)
28824 return offset + 1
28825 }
28826
28827 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
28828 value = +value
28829 offset = offset >>> 0
28830 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
28831 this[offset] = (value & 0xff)
28832 this[offset + 1] = (value >>> 8)
28833 return offset + 2
28834 }
28835
28836 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
28837 value = +value
28838 offset = offset >>> 0
28839 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
28840 this[offset] = (value >>> 8)
28841 this[offset + 1] = (value & 0xff)
28842 return offset + 2
28843 }
28844
28845 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
28846 value = +value
28847 offset = offset >>> 0
28848 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
28849 this[offset + 3] = (value >>> 24)
28850 this[offset + 2] = (value >>> 16)
28851 this[offset + 1] = (value >>> 8)
28852 this[offset] = (value & 0xff)
28853 return offset + 4
28854 }
28855
28856 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
28857 value = +value
28858 offset = offset >>> 0
28859 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
28860 this[offset] = (value >>> 24)
28861 this[offset + 1] = (value >>> 16)
28862 this[offset + 2] = (value >>> 8)
28863 this[offset + 3] = (value & 0xff)
28864 return offset + 4
28865 }
28866
28867 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
28868 value = +value
28869 offset = offset >>> 0
28870 if (!noAssert) {
28871 var limit = Math.pow(2, (8 * byteLength) - 1)
28872
28873 checkInt(this, value, offset, byteLength, limit - 1, -limit)
28874 }
28875
28876 var i = 0
28877 var mul = 1
28878 var sub = 0
28879 this[offset] = value & 0xFF
28880 while (++i < byteLength && (mul *= 0x100)) {
28881 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
28882 sub = 1
28883 }
28884 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
28885 }
28886
28887 return offset + byteLength
28888 }
28889
28890 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
28891 value = +value
28892 offset = offset >>> 0
28893 if (!noAssert) {
28894 var limit = Math.pow(2, (8 * byteLength) - 1)
28895
28896 checkInt(this, value, offset, byteLength, limit - 1, -limit)
28897 }
28898
28899 var i = byteLength - 1
28900 var mul = 1
28901 var sub = 0
28902 this[offset + i] = value & 0xFF
28903 while (--i >= 0 && (mul *= 0x100)) {
28904 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
28905 sub = 1
28906 }
28907 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
28908 }
28909
28910 return offset + byteLength
28911 }
28912
28913 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
28914 value = +value
28915 offset = offset >>> 0
28916 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
28917 if (value < 0) value = 0xff + value + 1
28918 this[offset] = (value & 0xff)
28919 return offset + 1
28920 }
28921
28922 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
28923 value = +value
28924 offset = offset >>> 0
28925 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
28926 this[offset] = (value & 0xff)
28927 this[offset + 1] = (value >>> 8)
28928 return offset + 2
28929 }
28930
28931 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
28932 value = +value
28933 offset = offset >>> 0
28934 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
28935 this[offset] = (value >>> 8)
28936 this[offset + 1] = (value & 0xff)
28937 return offset + 2
28938 }
28939
28940 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
28941 value = +value
28942 offset = offset >>> 0
28943 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
28944 this[offset] = (value & 0xff)
28945 this[offset + 1] = (value >>> 8)
28946 this[offset + 2] = (value >>> 16)
28947 this[offset + 3] = (value >>> 24)
28948 return offset + 4
28949 }
28950
28951 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
28952 value = +value
28953 offset = offset >>> 0
28954 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
28955 if (value < 0) value = 0xffffffff + value + 1
28956 this[offset] = (value >>> 24)
28957 this[offset + 1] = (value >>> 16)
28958 this[offset + 2] = (value >>> 8)
28959 this[offset + 3] = (value & 0xff)
28960 return offset + 4
28961 }
28962
28963 function checkIEEE754 (buf, value, offset, ext, max, min) {
28964 if (offset + ext > buf.length) throw new RangeError('Index out of range')
28965 if (offset < 0) throw new RangeError('Index out of range')
28966 }
28967
28968 function writeFloat (buf, value, offset, littleEndian, noAssert) {
28969 value = +value
28970 offset = offset >>> 0
28971 if (!noAssert) {
28972 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
28973 }
28974 ieee754.write(buf, value, offset, littleEndian, 23, 4)
28975 return offset + 4
28976 }
28977
28978 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
28979 return writeFloat(this, value, offset, true, noAssert)
28980 }
28981
28982 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
28983 return writeFloat(this, value, offset, false, noAssert)
28984 }
28985
28986 function writeDouble (buf, value, offset, littleEndian, noAssert) {
28987 value = +value
28988 offset = offset >>> 0
28989 if (!noAssert) {
28990 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
28991 }
28992 ieee754.write(buf, value, offset, littleEndian, 52, 8)
28993 return offset + 8
28994 }
28995
28996 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
28997 return writeDouble(this, value, offset, true, noAssert)
28998 }
28999
29000 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
29001 return writeDouble(this, value, offset, false, noAssert)
29002 }
29003
29004 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
29005 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
29006 if (!start) start = 0
29007 if (!end && end !== 0) end = this.length
29008 if (targetStart >= target.length) targetStart = target.length
29009 if (!targetStart) targetStart = 0
29010 if (end > 0 && end < start) end = start
29011
29012 // Copy 0 bytes; we're done
29013 if (end === start) return 0
29014 if (target.length === 0 || this.length === 0) return 0
29015
29016 // Fatal error conditions
29017 if (targetStart < 0) {
29018 throw new RangeError('targetStart out of bounds')
29019 }
29020 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
29021 if (end < 0) throw new RangeError('sourceEnd out of bounds')
29022
29023 // Are we oob?
29024 if (end > this.length) end = this.length
29025 if (target.length - targetStart < end - start) {
29026 end = target.length - targetStart + start
29027 }
29028
29029 var len = end - start
29030 var i
29031
29032 if (this === target && start < targetStart && targetStart < end) {
29033 // descending copy from end
29034 for (i = len - 1; i >= 0; --i) {
29035 target[i + targetStart] = this[i + start]
29036 }
29037 } else if (len < 1000) {
29038 // ascending copy from start
29039 for (i = 0; i < len; ++i) {
29040 target[i + targetStart] = this[i + start]
29041 }
29042 } else {
29043 Uint8Array.prototype.set.call(
29044 target,
29045 this.subarray(start, start + len),
29046 targetStart
29047 )
29048 }
29049
29050 return len
29051 }
29052
29053 // Usage:
29054 // buffer.fill(number[, offset[, end]])
29055 // buffer.fill(buffer[, offset[, end]])
29056 // buffer.fill(string[, offset[, end]][, encoding])
29057 Buffer.prototype.fill = function fill (val, start, end, encoding) {
29058 // Handle string cases:
29059 if (typeof val === 'string') {
29060 if (typeof start === 'string') {
29061 encoding = start
29062 start = 0
29063 end = this.length
29064 } else if (typeof end === 'string') {
29065 encoding = end
29066 end = this.length
29067 }
29068 if (val.length === 1) {
29069 var code = val.charCodeAt(0)
29070 if (code < 256) {
29071 val = code
29072 }
29073 }
29074 if (encoding !== undefined && typeof encoding !== 'string') {
29075 throw new TypeError('encoding must be a string')
29076 }
29077 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
29078 throw new TypeError('Unknown encoding: ' + encoding)
29079 }
29080 } else if (typeof val === 'number') {
29081 val = val & 255
29082 }
29083
29084 // Invalid ranges are not set to a default, so can range check early.
29085 if (start < 0 || this.length < start || this.length < end) {
29086 throw new RangeError('Out of range index')
29087 }
29088
29089 if (end <= start) {
29090 return this
29091 }
29092
29093 start = start >>> 0
29094 end = end === undefined ? this.length : end >>> 0
29095
29096 if (!val) val = 0
29097
29098 var i
29099 if (typeof val === 'number') {
29100 for (i = start; i < end; ++i) {
29101 this[i] = val
29102 }
29103 } else {
29104 var bytes = Buffer.isBuffer(val)
29105 ? val
29106 : new Buffer(val, encoding)
29107 var len = bytes.length
29108 for (i = 0; i < end - start; ++i) {
29109 this[i + start] = bytes[i % len]
29110 }
29111 }
29112
29113 return this
29114 }
29115
29116 // HELPER FUNCTIONS
29117 // ================
29118
29119 var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
29120
29121 function base64clean (str) {
29122 // Node strips out invalid characters like \n and \t from the string, base64-js does not
29123 str = str.trim().replace(INVALID_BASE64_RE, '')
29124 // Node converts strings with length < 2 to ''
29125 if (str.length < 2) return ''
29126 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
29127 while (str.length % 4 !== 0) {
29128 str = str + '='
29129 }
29130 return str
29131 }
29132
29133 function toHex (n) {
29134 if (n < 16) return '0' + n.toString(16)
29135 return n.toString(16)
29136 }
29137
29138 function utf8ToBytes (string, units) {
29139 units = units || Infinity
29140 var codePoint
29141 var length = string.length
29142 var leadSurrogate = null
29143 var bytes = []
29144
29145 for (var i = 0; i < length; ++i) {
29146 codePoint = string.charCodeAt(i)
29147
29148 // is surrogate component
29149 if (codePoint > 0xD7FF && codePoint < 0xE000) {
29150 // last char was a lead
29151 if (!leadSurrogate) {
29152 // no lead yet
29153 if (codePoint > 0xDBFF) {
29154 // unexpected trail
29155 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
29156 continue
29157 } else if (i + 1 === length) {
29158 // unpaired lead
29159 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
29160 continue
29161 }
29162
29163 // valid lead
29164 leadSurrogate = codePoint
29165
29166 continue
29167 }
29168
29169 // 2 leads in a row
29170 if (codePoint < 0xDC00) {
29171 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
29172 leadSurrogate = codePoint
29173 continue
29174 }
29175
29176 // valid surrogate pair
29177 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
29178 } else if (leadSurrogate) {
29179 // valid bmp char, but last char was a lead
29180 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
29181 }
29182
29183 leadSurrogate = null
29184
29185 // encode utf8
29186 if (codePoint < 0x80) {
29187 if ((units -= 1) < 0) break
29188 bytes.push(codePoint)
29189 } else if (codePoint < 0x800) {
29190 if ((units -= 2) < 0) break
29191 bytes.push(
29192 codePoint >> 0x6 | 0xC0,
29193 codePoint & 0x3F | 0x80
29194 )
29195 } else if (codePoint < 0x10000) {
29196 if ((units -= 3) < 0) break
29197 bytes.push(
29198 codePoint >> 0xC | 0xE0,
29199 codePoint >> 0x6 & 0x3F | 0x80,
29200 codePoint & 0x3F | 0x80
29201 )
29202 } else if (codePoint < 0x110000) {
29203 if ((units -= 4) < 0) break
29204 bytes.push(
29205 codePoint >> 0x12 | 0xF0,
29206 codePoint >> 0xC & 0x3F | 0x80,
29207 codePoint >> 0x6 & 0x3F | 0x80,
29208 codePoint & 0x3F | 0x80
29209 )
29210 } else {
29211 throw new Error('Invalid code point')
29212 }
29213 }
29214
29215 return bytes
29216 }
29217
29218 function asciiToBytes (str) {
29219 var byteArray = []
29220 for (var i = 0; i < str.length; ++i) {
29221 // Node's code seems to be doing this and not & 0x7F..
29222 byteArray.push(str.charCodeAt(i) & 0xFF)
29223 }
29224 return byteArray
29225 }
29226
29227 function utf16leToBytes (str, units) {
29228 var c, hi, lo
29229 var byteArray = []
29230 for (var i = 0; i < str.length; ++i) {
29231 if ((units -= 2) < 0) break
29232
29233 c = str.charCodeAt(i)
29234 hi = c >> 8
29235 lo = c % 256
29236 byteArray.push(lo)
29237 byteArray.push(hi)
29238 }
29239
29240 return byteArray
29241 }
29242
29243 function base64ToBytes (str) {
29244 return base64.toByteArray(base64clean(str))
29245 }
29246
29247 function blitBuffer (src, dst, offset, length) {
29248 for (var i = 0; i < length; ++i) {
29249 if ((i + offset >= dst.length) || (i >= src.length)) break
29250 dst[i + offset] = src[i]
29251 }
29252 return i
29253 }
29254
29255 // Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`
29256 function isArrayBufferView (obj) {
29257 return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)
29258 }
29259
29260 function numberIsNaN (obj) {
29261 return obj !== obj // eslint-disable-line no-self-compare
29262 }
29263
29264 },{"base64-js":2,"ieee754":8}],6:[function(require,module,exports){
29265 (function (Buffer){
29266 // Copyright Joyent, Inc. and other Node contributors.
29267 //
29268 // Permission is hereby granted, free of charge, to any person obtaining a
29269 // copy of this software and associated documentation files (the
29270 // "Software"), to deal in the Software without restriction, including
29271 // without limitation the rights to use, copy, modify, merge, publish,
29272 // distribute, sublicense, and/or sell copies of the Software, and to permit
29273 // persons to whom the Software is furnished to do so, subject to the
29274 // following conditions:
29275 //
29276 // The above copyright notice and this permission notice shall be included
29277 // in all copies or substantial portions of the Software.
29278 //
29279 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
29280 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
29281 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
29282 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
29283 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
29284 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
29285 // USE OR OTHER DEALINGS IN THE SOFTWARE.
29286
29287 // NOTE: These type checking functions intentionally don't use `instanceof`
29288 // because it is fragile and can be easily faked with `Object.create()`.
29289
29290 function isArray(arg) {
29291 if (Array.isArray) {
29292 return Array.isArray(arg);
29293 }
29294 return objectToString(arg) === '[object Array]';
29295 }
29296 exports.isArray = isArray;
29297
29298 function isBoolean(arg) {
29299 return typeof arg === 'boolean';
29300 }
29301 exports.isBoolean = isBoolean;
29302
29303 function isNull(arg) {
29304 return arg === null;
29305 }
29306 exports.isNull = isNull;
29307
29308 function isNullOrUndefined(arg) {
29309 return arg == null;
29310 }
29311 exports.isNullOrUndefined = isNullOrUndefined;
29312
29313 function isNumber(arg) {
29314 return typeof arg === 'number';
29315 }
29316 exports.isNumber = isNumber;
29317
29318 function isString(arg) {
29319 return typeof arg === 'string';
29320 }
29321 exports.isString = isString;
29322
29323 function isSymbol(arg) {
29324 return typeof arg === 'symbol';
29325 }
29326 exports.isSymbol = isSymbol;
29327
29328 function isUndefined(arg) {
29329 return arg === void 0;
29330 }
29331 exports.isUndefined = isUndefined;
29332
29333 function isRegExp(re) {
29334 return objectToString(re) === '[object RegExp]';
29335 }
29336 exports.isRegExp = isRegExp;
29337
29338 function isObject(arg) {
29339 return typeof arg === 'object' && arg !== null;
29340 }
29341 exports.isObject = isObject;
29342
29343 function isDate(d) {
29344 return objectToString(d) === '[object Date]';
29345 }
29346 exports.isDate = isDate;
29347
29348 function isError(e) {
29349 return (objectToString(e) === '[object Error]' || e instanceof Error);
29350 }
29351 exports.isError = isError;
29352
29353 function isFunction(arg) {
29354 return typeof arg === 'function';
29355 }
29356 exports.isFunction = isFunction;
29357
29358 function isPrimitive(arg) {
29359 return arg === null ||
29360 typeof arg === 'boolean' ||
29361 typeof arg === 'number' ||
29362 typeof arg === 'string' ||
29363 typeof arg === 'symbol' || // ES6 symbol
29364 typeof arg === 'undefined';
29365 }
29366 exports.isPrimitive = isPrimitive;
29367
29368 exports.isBuffer = Buffer.isBuffer;
29369
29370 function objectToString(o) {
29371 return Object.prototype.toString.call(o);
29372 }
29373
29374 }).call(this,{"isBuffer":require("../../is-buffer/index.js")})
29375 },{"../../is-buffer/index.js":10}],7:[function(require,module,exports){
29376 // Copyright Joyent, Inc. and other Node contributors.
29377 //
29378 // Permission is hereby granted, free of charge, to any person obtaining a
29379 // copy of this software and associated documentation files (the
29380 // "Software"), to deal in the Software without restriction, including
29381 // without limitation the rights to use, copy, modify, merge, publish,
29382 // distribute, sublicense, and/or sell copies of the Software, and to permit
29383 // persons to whom the Software is furnished to do so, subject to the
29384 // following conditions:
29385 //
29386 // The above copyright notice and this permission notice shall be included
29387 // in all copies or substantial portions of the Software.
29388 //
29389 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
29390 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
29391 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
29392 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
29393 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
29394 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
29395 // USE OR OTHER DEALINGS IN THE SOFTWARE.
29396
29397 function EventEmitter() {
29398 this._events = this._events || {};
29399 this._maxListeners = this._maxListeners || undefined;
29400 }
29401 module.exports = EventEmitter;
29402
29403 // Backwards-compat with node 0.10.x
29404 EventEmitter.EventEmitter = EventEmitter;
29405
29406 EventEmitter.prototype._events = undefined;
29407 EventEmitter.prototype._maxListeners = undefined;
29408
29409 // By default EventEmitters will print a warning if more than 10 listeners are
29410 // added to it. This is a useful default which helps finding memory leaks.
29411 EventEmitter.defaultMaxListeners = 10;
29412
29413 // Obviously not all Emitters should be limited to 10. This function allows
29414 // that to be increased. Set to zero for unlimited.
29415 EventEmitter.prototype.setMaxListeners = function(n) {
29416 if (!isNumber(n) || n < 0 || isNaN(n))
29417 throw TypeError('n must be a positive number');
29418 this._maxListeners = n;
29419 return this;
29420 };
29421
29422 EventEmitter.prototype.emit = function(type) {
29423 var er, handler, len, args, i, listeners;
29424
29425 if (!this._events)
29426 this._events = {};
29427
29428 // If there is no 'error' event listener then throw.
29429 if (type === 'error') {
29430 if (!this._events.error ||
29431 (isObject(this._events.error) && !this._events.error.length)) {
29432 er = arguments[1];
29433 if (er instanceof Error) {
29434 throw er; // Unhandled 'error' event
29435 } else {
29436 // At least give some kind of context to the user
29437 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
29438 err.context = er;
29439 throw err;
29440 }
29441 }
29442 }
29443
29444 handler = this._events[type];
29445
29446 if (isUndefined(handler))
29447 return false;
29448
29449 if (isFunction(handler)) {
29450 switch (arguments.length) {
29451 // fast cases
29452 case 1:
29453 handler.call(this);
29454 break;
29455 case 2:
29456 handler.call(this, arguments[1]);
29457 break;
29458 case 3:
29459 handler.call(this, arguments[1], arguments[2]);
29460 break;
29461 // slower
29462 default:
29463 args = Array.prototype.slice.call(arguments, 1);
29464 handler.apply(this, args);
29465 }
29466 } else if (isObject(handler)) {
29467 args = Array.prototype.slice.call(arguments, 1);
29468 listeners = handler.slice();
29469 len = listeners.length;
29470 for (i = 0; i < len; i++)
29471 listeners[i].apply(this, args);
29472 }
29473
29474 return true;
29475 };
29476
29477 EventEmitter.prototype.addListener = function(type, listener) {
29478 var m;
29479
29480 if (!isFunction(listener))
29481 throw TypeError('listener must be a function');
29482
29483 if (!this._events)
29484 this._events = {};
29485
29486 // To avoid recursion in the case that type === "newListener"! Before
29487 // adding it to the listeners, first emit "newListener".
29488 if (this._events.newListener)
29489 this.emit('newListener', type,
29490 isFunction(listener.listener) ?
29491 listener.listener : listener);
29492
29493 if (!this._events[type])
29494 // Optimize the case of one listener. Don't need the extra array object.
29495 this._events[type] = listener;
29496 else if (isObject(this._events[type]))
29497 // If we've already got an array, just append.
29498 this._events[type].push(listener);
29499 else
29500 // Adding the second element, need to change to array.
29501 this._events[type] = [this._events[type], listener];
29502
29503 // Check for listener leak
29504 if (isObject(this._events[type]) && !this._events[type].warned) {
29505 if (!isUndefined(this._maxListeners)) {
29506 m = this._maxListeners;
29507 } else {
29508 m = EventEmitter.defaultMaxListeners;
29509 }
29510
29511 if (m && m > 0 && this._events[type].length > m) {
29512 this._events[type].warned = true;
29513 console.error('(node) warning: possible EventEmitter memory ' +
29514 'leak detected. %d listeners added. ' +
29515 'Use emitter.setMaxListeners() to increase limit.',
29516 this._events[type].length);
29517 if (typeof console.trace === 'function') {
29518 // not supported in IE 10
29519 console.trace();
29520 }
29521 }
29522 }
29523
29524 return this;
29525 };
29526
29527 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
29528
29529 EventEmitter.prototype.once = function(type, listener) {
29530 if (!isFunction(listener))
29531 throw TypeError('listener must be a function');
29532
29533 var fired = false;
29534
29535 function g() {
29536 this.removeListener(type, g);
29537
29538 if (!fired) {
29539 fired = true;
29540 listener.apply(this, arguments);
29541 }
29542 }
29543
29544 g.listener = listener;
29545 this.on(type, g);
29546
29547 return this;
29548 };
29549
29550 // emits a 'removeListener' event iff the listener was removed
29551 EventEmitter.prototype.removeListener = function(type, listener) {
29552 var list, position, length, i;
29553
29554 if (!isFunction(listener))
29555 throw TypeError('listener must be a function');
29556
29557 if (!this._events || !this._events[type])
29558 return this;
29559
29560 list = this._events[type];
29561 length = list.length;
29562 position = -1;
29563
29564 if (list === listener ||
29565 (isFunction(list.listener) && list.listener === listener)) {
29566 delete this._events[type];
29567 if (this._events.removeListener)
29568 this.emit('removeListener', type, listener);
29569
29570 } else if (isObject(list)) {
29571 for (i = length; i-- > 0;) {
29572 if (list[i] === listener ||
29573 (list[i].listener && list[i].listener === listener)) {
29574 position = i;
29575 break;
29576 }
29577 }
29578
29579 if (position < 0)
29580 return this;
29581
29582 if (list.length === 1) {
29583 list.length = 0;
29584 delete this._events[type];
29585 } else {
29586 list.splice(position, 1);
29587 }
29588
29589 if (this._events.removeListener)
29590 this.emit('removeListener', type, listener);
29591 }
29592
29593 return this;
29594 };
29595
29596 EventEmitter.prototype.removeAllListeners = function(type) {
29597 var key, listeners;
29598
29599 if (!this._events)
29600 return this;
29601
29602 // not listening for removeListener, no need to emit
29603 if (!this._events.removeListener) {
29604 if (arguments.length === 0)
29605 this._events = {};
29606 else if (this._events[type])
29607 delete this._events[type];
29608 return this;
29609 }
29610
29611 // emit removeListener for all listeners on all events
29612 if (arguments.length === 0) {
29613 for (key in this._events) {
29614 if (key === 'removeListener') continue;
29615 this.removeAllListeners(key);
29616 }
29617 this.removeAllListeners('removeListener');
29618 this._events = {};
29619 return this;
29620 }
29621
29622 listeners = this._events[type];
29623
29624 if (isFunction(listeners)) {
29625 this.removeListener(type, listeners);
29626 } else if (listeners) {
29627 // LIFO order
29628 while (listeners.length)
29629 this.removeListener(type, listeners[listeners.length - 1]);
29630 }
29631 delete this._events[type];
29632
29633 return this;
29634 };
29635
29636 EventEmitter.prototype.listeners = function(type) {
29637 var ret;
29638 if (!this._events || !this._events[type])
29639 ret = [];
29640 else if (isFunction(this._events[type]))
29641 ret = [this._events[type]];
29642 else
29643 ret = this._events[type].slice();
29644 return ret;
29645 };
29646
29647 EventEmitter.prototype.listenerCount = function(type) {
29648 if (this._events) {
29649 var evlistener = this._events[type];
29650
29651 if (isFunction(evlistener))
29652 return 1;
29653 else if (evlistener)
29654 return evlistener.length;
29655 }
29656 return 0;
29657 };
29658
29659 EventEmitter.listenerCount = function(emitter, type) {
29660 return emitter.listenerCount(type);
29661 };
29662
29663 function isFunction(arg) {
29664 return typeof arg === 'function';
29665 }
29666
29667 function isNumber(arg) {
29668 return typeof arg === 'number';
29669 }
29670
29671 function isObject(arg) {
29672 return typeof arg === 'object' && arg !== null;
29673 }
29674
29675 function isUndefined(arg) {
29676 return arg === void 0;
29677 }
29678
29679 },{}],8:[function(require,module,exports){
29680 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
29681 var e, m
29682 var eLen = nBytes * 8 - mLen - 1
29683 var eMax = (1 << eLen) - 1
29684 var eBias = eMax >> 1
29685 var nBits = -7
29686 var i = isLE ? (nBytes - 1) : 0
29687 var d = isLE ? -1 : 1
29688 var s = buffer[offset + i]
29689
29690 i += d
29691
29692 e = s & ((1 << (-nBits)) - 1)
29693 s >>= (-nBits)
29694 nBits += eLen
29695 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
29696
29697 m = e & ((1 << (-nBits)) - 1)
29698 e >>= (-nBits)
29699 nBits += mLen
29700 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
29701
29702 if (e === 0) {
29703 e = 1 - eBias
29704 } else if (e === eMax) {
29705 return m ? NaN : ((s ? -1 : 1) * Infinity)
29706 } else {
29707 m = m + Math.pow(2, mLen)
29708 e = e - eBias
29709 }
29710 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
29711 }
29712
29713 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
29714 var e, m, c
29715 var eLen = nBytes * 8 - mLen - 1
29716 var eMax = (1 << eLen) - 1
29717 var eBias = eMax >> 1
29718 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
29719 var i = isLE ? 0 : (nBytes - 1)
29720 var d = isLE ? 1 : -1
29721 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
29722
29723 value = Math.abs(value)
29724
29725 if (isNaN(value) || value === Infinity) {
29726 m = isNaN(value) ? 1 : 0
29727 e = eMax
29728 } else {
29729 e = Math.floor(Math.log(value) / Math.LN2)
29730 if (value * (c = Math.pow(2, -e)) < 1) {
29731 e--
29732 c *= 2
29733 }
29734 if (e + eBias >= 1) {
29735 value += rt / c
29736 } else {
29737 value += rt * Math.pow(2, 1 - eBias)
29738 }
29739 if (value * c >= 2) {
29740 e++
29741 c /= 2
29742 }
29743
29744 if (e + eBias >= eMax) {
29745 m = 0
29746 e = eMax
29747 } else if (e + eBias >= 1) {
29748 m = (value * c - 1) * Math.pow(2, mLen)
29749 e = e + eBias
29750 } else {
29751 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
29752 e = 0
29753 }
29754 }
29755
29756 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
29757
29758 e = (e << mLen) | m
29759 eLen += mLen
29760 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
29761
29762 buffer[offset + i - d] |= s * 128
29763 }
29764
29765 },{}],9:[function(require,module,exports){
29766 if (typeof Object.create === 'function') {
29767 // implementation from standard node.js 'util' module
29768 module.exports = function inherits(ctor, superCtor) {
29769 ctor.super_ = superCtor
29770 ctor.prototype = Object.create(superCtor.prototype, {
29771 constructor: {
29772 value: ctor,
29773 enumerable: false,
29774 writable: true,
29775 configurable: true
29776 }
29777 });
29778 };
29779 } else {
29780 // old school shim for old browsers
29781 module.exports = function inherits(ctor, superCtor) {
29782 ctor.super_ = superCtor
29783 var TempCtor = function () {}
29784 TempCtor.prototype = superCtor.prototype
29785 ctor.prototype = new TempCtor()
29786 ctor.prototype.constructor = ctor
29787 }
29788 }
29789
29790 },{}],10:[function(require,module,exports){
29791 /*!
29792 * Determine if an object is a Buffer
29793 *
29794 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
29795 * @license MIT
29796 */
29797
29798 // The _isBuffer check is for Safari 5-7 support, because it's missing
29799 // Object.prototype.constructor. Remove this eventually
29800 module.exports = function (obj) {
29801 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
29802 }
29803
29804 function isBuffer (obj) {
29805 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
29806 }
29807
29808 // For Node v0.10 support. Remove this eventually.
29809 function isSlowBuffer (obj) {
29810 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
29811 }
29812
29813 },{}],11:[function(require,module,exports){
29814 var toString = {}.toString;
29815
29816 module.exports = Array.isArray || function (arr) {
29817 return toString.call(arr) == '[object Array]';
29818 };
29819
29820 },{}],12:[function(require,module,exports){
29821 (function (process){
29822 'use strict';
29823
29824 if (!process.version ||
29825 process.version.indexOf('v0.') === 0 ||
29826 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
29827 module.exports = nextTick;
29828 } else {
29829 module.exports = process.nextTick;
29830 }
29831
29832 function nextTick(fn, arg1, arg2, arg3) {
29833 if (typeof fn !== 'function') {
29834 throw new TypeError('"callback" argument must be a function');
29835 }
29836 var len = arguments.length;
29837 var args, i;
29838 switch (len) {
29839 case 0:
29840 case 1:
29841 return process.nextTick(fn);
29842 case 2:
29843 return process.nextTick(function afterTickOne() {
29844 fn.call(null, arg1);
29845 });
29846 case 3:
29847 return process.nextTick(function afterTickTwo() {
29848 fn.call(null, arg1, arg2);
29849 });
29850 case 4:
29851 return process.nextTick(function afterTickThree() {
29852 fn.call(null, arg1, arg2, arg3);
29853 });
29854 default:
29855 args = new Array(len - 1);
29856 i = 0;
29857 while (i < args.length) {
29858 args[i++] = arguments[i];
29859 }
29860 return process.nextTick(function afterTick() {
29861 fn.apply(null, args);
29862 });
29863 }
29864 }
29865
29866 }).call(this,require('_process'))
29867 },{"_process":13}],13:[function(require,module,exports){
29868 // shim for using process in browser
29869 var process = module.exports = {};
29870
29871 // cached from whatever global is present so that test runners that stub it
29872 // don't break things. But we need to wrap it in a try catch in case it is
29873 // wrapped in strict mode code which doesn't define any globals. It's inside a
29874 // function because try/catches deoptimize in certain engines.
29875
29876 var cachedSetTimeout;
29877 var cachedClearTimeout;
29878
29879 function defaultSetTimout() {
29880 throw new Error('setTimeout has not been defined');
29881 }
29882 function defaultClearTimeout () {
29883 throw new Error('clearTimeout has not been defined');
29884 }
29885 (function () {
29886 try {
29887 if (typeof setTimeout === 'function') {
29888 cachedSetTimeout = setTimeout;
29889 } else {
29890 cachedSetTimeout = defaultSetTimout;
29891 }
29892 } catch (e) {
29893 cachedSetTimeout = defaultSetTimout;
29894 }
29895 try {
29896 if (typeof clearTimeout === 'function') {
29897 cachedClearTimeout = clearTimeout;
29898 } else {
29899 cachedClearTimeout = defaultClearTimeout;
29900 }
29901 } catch (e) {
29902 cachedClearTimeout = defaultClearTimeout;
29903 }
29904 } ())
29905 function runTimeout(fun) {
29906 if (cachedSetTimeout === setTimeout) {
29907 //normal enviroments in sane situations
29908 return setTimeout(fun, 0);
29909 }
29910 // if setTimeout wasn't available but was latter defined
29911 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
29912 cachedSetTimeout = setTimeout;
29913 return setTimeout(fun, 0);
29914 }
29915 try {
29916 // when when somebody has screwed with setTimeout but no I.E. maddness
29917 return cachedSetTimeout(fun, 0);
29918 } catch(e){
29919 try {
29920 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
29921 return cachedSetTimeout.call(null, fun, 0);
29922 } catch(e){
29923 // 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
29924 return cachedSetTimeout.call(this, fun, 0);
29925 }
29926 }
29927
29928
29929 }
29930 function runClearTimeout(marker) {
29931 if (cachedClearTimeout === clearTimeout) {
29932 //normal enviroments in sane situations
29933 return clearTimeout(marker);
29934 }
29935 // if clearTimeout wasn't available but was latter defined
29936 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
29937 cachedClearTimeout = clearTimeout;
29938 return clearTimeout(marker);
29939 }
29940 try {
29941 // when when somebody has screwed with setTimeout but no I.E. maddness
29942 return cachedClearTimeout(marker);
29943 } catch (e){
29944 try {
29945 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
29946 return cachedClearTimeout.call(null, marker);
29947 } catch (e){
29948 // 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.
29949 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
29950 return cachedClearTimeout.call(this, marker);
29951 }
29952 }
29953
29954
29955
29956 }
29957 var queue = [];
29958 var draining = false;
29959 var currentQueue;
29960 var queueIndex = -1;
29961
29962 function cleanUpNextTick() {
29963 if (!draining || !currentQueue) {
29964 return;
29965 }
29966 draining = false;
29967 if (currentQueue.length) {
29968 queue = currentQueue.concat(queue);
29969 } else {
29970 queueIndex = -1;
29971 }
29972 if (queue.length) {
29973 drainQueue();
29974 }
29975 }
29976
29977 function drainQueue() {
29978 if (draining) {
29979 return;
29980 }
29981 var timeout = runTimeout(cleanUpNextTick);
29982 draining = true;
29983
29984 var len = queue.length;
29985 while(len) {
29986 currentQueue = queue;
29987 queue = [];
29988 while (++queueIndex < len) {
29989 if (currentQueue) {
29990 currentQueue[queueIndex].run();
29991 }
29992 }
29993 queueIndex = -1;
29994 len = queue.length;
29995 }
29996 currentQueue = null;
29997 draining = false;
29998 runClearTimeout(timeout);
29999 }
30000
30001 process.nextTick = function (fun) {
30002 var args = new Array(arguments.length - 1);
30003 if (arguments.length > 1) {
30004 for (var i = 1; i < arguments.length; i++) {
30005 args[i - 1] = arguments[i];
30006 }
30007 }
30008 queue.push(new Item(fun, args));
30009 if (queue.length === 1 && !draining) {
30010 runTimeout(drainQueue);
30011 }
30012 };
30013
30014 // v8 likes predictible objects
30015 function Item(fun, array) {
30016 this.fun = fun;
30017 this.array = array;
30018 }
30019 Item.prototype.run = function () {
30020 this.fun.apply(null, this.array);
30021 };
30022 process.title = 'browser';
30023 process.browser = true;
30024 process.env = {};
30025 process.argv = [];
30026 process.version = ''; // empty string to avoid regexp issues
30027 process.versions = {};
30028
30029 function noop() {}
30030
30031 process.on = noop;
30032 process.addListener = noop;
30033 process.once = noop;
30034 process.off = noop;
30035 process.removeListener = noop;
30036 process.removeAllListeners = noop;
30037 process.emit = noop;
30038 process.prependListener = noop;
30039 process.prependOnceListener = noop;
30040
30041 process.listeners = function (name) { return [] }
30042
30043 process.binding = function (name) {
30044 throw new Error('process.binding is not supported');
30045 };
30046
30047 process.cwd = function () { return '/' };
30048 process.chdir = function (dir) {
30049 throw new Error('process.chdir is not supported');
30050 };
30051 process.umask = function() { return 0; };
30052
30053 },{}],14:[function(require,module,exports){
30054 module.exports = require('./lib/_stream_duplex.js');
30055
30056 },{"./lib/_stream_duplex.js":15}],15:[function(require,module,exports){
30057 // a duplex stream is just a stream that is both readable and writable.
30058 // Since JS doesn't have multiple prototypal inheritance, this class
30059 // prototypally inherits from Readable, and then parasitically from
30060 // Writable.
30061
30062 'use strict';
30063
30064 /*<replacement>*/
30065
30066 var objectKeys = Object.keys || function (obj) {
30067 var keys = [];
30068 for (var key in obj) {
30069 keys.push(key);
30070 }return keys;
30071 };
30072 /*</replacement>*/
30073
30074 module.exports = Duplex;
30075
30076 /*<replacement>*/
30077 var processNextTick = require('process-nextick-args');
30078 /*</replacement>*/
30079
30080 /*<replacement>*/
30081 var util = require('core-util-is');
30082 util.inherits = require('inherits');
30083 /*</replacement>*/
30084
30085 var Readable = require('./_stream_readable');
30086 var Writable = require('./_stream_writable');
30087
30088 util.inherits(Duplex, Readable);
30089
30090 var keys = objectKeys(Writable.prototype);
30091 for (var v = 0; v < keys.length; v++) {
30092 var method = keys[v];
30093 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
30094 }
30095
30096 function Duplex(options) {
30097 if (!(this instanceof Duplex)) return new Duplex(options);
30098
30099 Readable.call(this, options);
30100 Writable.call(this, options);
30101
30102 if (options && options.readable === false) this.readable = false;
30103
30104 if (options && options.writable === false) this.writable = false;
30105
30106 this.allowHalfOpen = true;
30107 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
30108
30109 this.once('end', onend);
30110 }
30111
30112 // the no-half-open enforcer
30113 function onend() {
30114 // if we allow half-open state, or if the writable side ended,
30115 // then we're ok.
30116 if (this.allowHalfOpen || this._writableState.ended) return;
30117
30118 // no more data can be written.
30119 // But allow more writes to happen in this tick.
30120 processNextTick(onEndNT, this);
30121 }
30122
30123 function onEndNT(self) {
30124 self.end();
30125 }
30126
30127 function forEach(xs, f) {
30128 for (var i = 0, l = xs.length; i < l; i++) {
30129 f(xs[i], i);
30130 }
30131 }
30132 },{"./_stream_readable":17,"./_stream_writable":19,"core-util-is":6,"inherits":9,"process-nextick-args":12}],16:[function(require,module,exports){
30133 // a passthrough stream.
30134 // basically just the most minimal sort of Transform stream.
30135 // Every written chunk gets output as-is.
30136
30137 'use strict';
30138
30139 module.exports = PassThrough;
30140
30141 var Transform = require('./_stream_transform');
30142
30143 /*<replacement>*/
30144 var util = require('core-util-is');
30145 util.inherits = require('inherits');
30146 /*</replacement>*/
30147
30148 util.inherits(PassThrough, Transform);
30149
30150 function PassThrough(options) {
30151 if (!(this instanceof PassThrough)) return new PassThrough(options);
30152
30153 Transform.call(this, options);
30154 }
30155
30156 PassThrough.prototype._transform = function (chunk, encoding, cb) {
30157 cb(null, chunk);
30158 };
30159 },{"./_stream_transform":18,"core-util-is":6,"inherits":9}],17:[function(require,module,exports){
30160 (function (process){
30161 'use strict';
30162
30163 module.exports = Readable;
30164
30165 /*<replacement>*/
30166 var processNextTick = require('process-nextick-args');
30167 /*</replacement>*/
30168
30169 /*<replacement>*/
30170 var isArray = require('isarray');
30171 /*</replacement>*/
30172
30173 /*<replacement>*/
30174 var Duplex;
30175 /*</replacement>*/
30176
30177 Readable.ReadableState = ReadableState;
30178
30179 /*<replacement>*/
30180 var EE = require('events').EventEmitter;
30181
30182 var EElistenerCount = function (emitter, type) {
30183 return emitter.listeners(type).length;
30184 };
30185 /*</replacement>*/
30186
30187 /*<replacement>*/
30188 var Stream = require('./internal/streams/stream');
30189 /*</replacement>*/
30190
30191 var Buffer = require('buffer').Buffer;
30192 /*<replacement>*/
30193 var bufferShim = require('buffer-shims');
30194 /*</replacement>*/
30195
30196 /*<replacement>*/
30197 var util = require('core-util-is');
30198 util.inherits = require('inherits');
30199 /*</replacement>*/
30200
30201 /*<replacement>*/
30202 var debugUtil = require('util');
30203 var debug = void 0;
30204 if (debugUtil && debugUtil.debuglog) {
30205 debug = debugUtil.debuglog('stream');
30206 } else {
30207 debug = function () {};
30208 }
30209 /*</replacement>*/
30210
30211 var BufferList = require('./internal/streams/BufferList');
30212 var StringDecoder;
30213
30214 util.inherits(Readable, Stream);
30215
30216 var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
30217
30218 function prependListener(emitter, event, fn) {
30219 // Sadly this is not cacheable as some libraries bundle their own
30220 // event emitter implementation with them.
30221 if (typeof emitter.prependListener === 'function') {
30222 return emitter.prependListener(event, fn);
30223 } else {
30224 // This is a hack to make sure that our error handler is attached before any
30225 // userland ones. NEVER DO THIS. This is here only because this code needs
30226 // to continue to work with older versions of Node.js that do not include
30227 // the prependListener() method. The goal is to eventually remove this hack.
30228 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]];
30229 }
30230 }
30231
30232 function ReadableState(options, stream) {
30233 Duplex = Duplex || require('./_stream_duplex');
30234
30235 options = options || {};
30236
30237 // object stream flag. Used to make read(n) ignore n and to
30238 // make all the buffer merging and length checks go away
30239 this.objectMode = !!options.objectMode;
30240
30241 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
30242
30243 // the point at which it stops calling _read() to fill the buffer
30244 // Note: 0 is a valid value, means "don't call _read preemptively ever"
30245 var hwm = options.highWaterMark;
30246 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
30247 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
30248
30249 // cast to ints.
30250 this.highWaterMark = ~~this.highWaterMark;
30251
30252 // A linked list is used to store data chunks instead of an array because the
30253 // linked list can remove elements from the beginning faster than
30254 // array.shift()
30255 this.buffer = new BufferList();
30256 this.length = 0;
30257 this.pipes = null;
30258 this.pipesCount = 0;
30259 this.flowing = null;
30260 this.ended = false;
30261 this.endEmitted = false;
30262 this.reading = false;
30263
30264 // a flag to be able to tell if the onwrite cb is called immediately,
30265 // or on a later tick. We set this to true at first, because any
30266 // actions that shouldn't happen until "later" should generally also
30267 // not happen before the first write call.
30268 this.sync = true;
30269
30270 // whenever we return null, then we set a flag to say
30271 // that we're awaiting a 'readable' event emission.
30272 this.needReadable = false;
30273 this.emittedReadable = false;
30274 this.readableListening = false;
30275 this.resumeScheduled = false;
30276
30277 // Crypto is kind of old and crusty. Historically, its default string
30278 // encoding is 'binary' so we have to make this configurable.
30279 // Everything else in the universe uses 'utf8', though.
30280 this.defaultEncoding = options.defaultEncoding || 'utf8';
30281
30282 // when piping, we only care about 'readable' events that happen
30283 // after read()ing all the bytes and not getting any pushback.
30284 this.ranOut = false;
30285
30286 // the number of writers that are awaiting a drain event in .pipe()s
30287 this.awaitDrain = 0;
30288
30289 // if true, a maybeReadMore has been scheduled
30290 this.readingMore = false;
30291
30292 this.decoder = null;
30293 this.encoding = null;
30294 if (options.encoding) {
30295 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
30296 this.decoder = new StringDecoder(options.encoding);
30297 this.encoding = options.encoding;
30298 }
30299 }
30300
30301 function Readable(options) {
30302 Duplex = Duplex || require('./_stream_duplex');
30303
30304 if (!(this instanceof Readable)) return new Readable(options);
30305
30306 this._readableState = new ReadableState(options, this);
30307
30308 // legacy
30309 this.readable = true;
30310
30311 if (options && typeof options.read === 'function') this._read = options.read;
30312
30313 Stream.call(this);
30314 }
30315
30316 // Manually shove something into the read() buffer.
30317 // This returns true if the highWaterMark has not been hit yet,
30318 // similar to how Writable.write() returns true if you should
30319 // write() some more.
30320 Readable.prototype.push = function (chunk, encoding) {
30321 var state = this._readableState;
30322
30323 if (!state.objectMode && typeof chunk === 'string') {
30324 encoding = encoding || state.defaultEncoding;
30325 if (encoding !== state.encoding) {
30326 chunk = bufferShim.from(chunk, encoding);
30327 encoding = '';
30328 }
30329 }
30330
30331 return readableAddChunk(this, state, chunk, encoding, false);
30332 };
30333
30334 // Unshift should *always* be something directly out of read()
30335 Readable.prototype.unshift = function (chunk) {
30336 var state = this._readableState;
30337 return readableAddChunk(this, state, chunk, '', true);
30338 };
30339
30340 Readable.prototype.isPaused = function () {
30341 return this._readableState.flowing === false;
30342 };
30343
30344 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
30345 var er = chunkInvalid(state, chunk);
30346 if (er) {
30347 stream.emit('error', er);
30348 } else if (chunk === null) {
30349 state.reading = false;
30350 onEofChunk(stream, state);
30351 } else if (state.objectMode || chunk && chunk.length > 0) {
30352 if (state.ended && !addToFront) {
30353 var e = new Error('stream.push() after EOF');
30354 stream.emit('error', e);
30355 } else if (state.endEmitted && addToFront) {
30356 var _e = new Error('stream.unshift() after end event');
30357 stream.emit('error', _e);
30358 } else {
30359 var skipAdd;
30360 if (state.decoder && !addToFront && !encoding) {
30361 chunk = state.decoder.write(chunk);
30362 skipAdd = !state.objectMode && chunk.length === 0;
30363 }
30364
30365 if (!addToFront) state.reading = false;
30366
30367 // Don't add to the buffer if we've decoded to an empty string chunk and
30368 // we're not in object mode
30369 if (!skipAdd) {
30370 // if we want the data now, just emit it.
30371 if (state.flowing && state.length === 0 && !state.sync) {
30372 stream.emit('data', chunk);
30373 stream.read(0);
30374 } else {
30375 // update the buffer info.
30376 state.length += state.objectMode ? 1 : chunk.length;
30377 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
30378
30379 if (state.needReadable) emitReadable(stream);
30380 }
30381 }
30382
30383 maybeReadMore(stream, state);
30384 }
30385 } else if (!addToFront) {
30386 state.reading = false;
30387 }
30388
30389 return needMoreData(state);
30390 }
30391
30392 // if it's past the high water mark, we can push in some more.
30393 // Also, if we have no data yet, we can stand some
30394 // more bytes. This is to work around cases where hwm=0,
30395 // such as the repl. Also, if the push() triggered a
30396 // readable event, and the user called read(largeNumber) such that
30397 // needReadable was set, then we ought to push more, so that another
30398 // 'readable' event will be triggered.
30399 function needMoreData(state) {
30400 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
30401 }
30402
30403 // backwards compatibility.
30404 Readable.prototype.setEncoding = function (enc) {
30405 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
30406 this._readableState.decoder = new StringDecoder(enc);
30407 this._readableState.encoding = enc;
30408 return this;
30409 };
30410
30411 // Don't raise the hwm > 8MB
30412 var MAX_HWM = 0x800000;
30413 function computeNewHighWaterMark(n) {
30414 if (n >= MAX_HWM) {
30415 n = MAX_HWM;
30416 } else {
30417 // Get the next highest power of 2 to prevent increasing hwm excessively in
30418 // tiny amounts
30419 n--;
30420 n |= n >>> 1;
30421 n |= n >>> 2;
30422 n |= n >>> 4;
30423 n |= n >>> 8;
30424 n |= n >>> 16;
30425 n++;
30426 }
30427 return n;
30428 }
30429
30430 // This function is designed to be inlinable, so please take care when making
30431 // changes to the function body.
30432 function howMuchToRead(n, state) {
30433 if (n <= 0 || state.length === 0 && state.ended) return 0;
30434 if (state.objectMode) return 1;
30435 if (n !== n) {
30436 // Only flow one buffer at a time
30437 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
30438 }
30439 // If we're asking for more than the current hwm, then raise the hwm.
30440 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
30441 if (n <= state.length) return n;
30442 // Don't have enough
30443 if (!state.ended) {
30444 state.needReadable = true;
30445 return 0;
30446 }
30447 return state.length;
30448 }
30449
30450 // you can override either this method, or the async _read(n) below.
30451 Readable.prototype.read = function (n) {
30452 debug('read', n);
30453 n = parseInt(n, 10);
30454 var state = this._readableState;
30455 var nOrig = n;
30456
30457 if (n !== 0) state.emittedReadable = false;
30458
30459 // if we're doing read(0) to trigger a readable event, but we
30460 // already have a bunch of data in the buffer, then just trigger
30461 // the 'readable' event and move on.
30462 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
30463 debug('read: emitReadable', state.length, state.ended);
30464 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
30465 return null;
30466 }
30467
30468 n = howMuchToRead(n, state);
30469
30470 // if we've ended, and we're now clear, then finish it up.
30471 if (n === 0 && state.ended) {
30472 if (state.length === 0) endReadable(this);
30473 return null;
30474 }
30475
30476 // All the actual chunk generation logic needs to be
30477 // *below* the call to _read. The reason is that in certain
30478 // synthetic stream cases, such as passthrough streams, _read
30479 // may be a completely synchronous operation which may change
30480 // the state of the read buffer, providing enough data when
30481 // before there was *not* enough.
30482 //
30483 // So, the steps are:
30484 // 1. Figure out what the state of things will be after we do
30485 // a read from the buffer.
30486 //
30487 // 2. If that resulting state will trigger a _read, then call _read.
30488 // Note that this may be asynchronous, or synchronous. Yes, it is
30489 // deeply ugly to write APIs this way, but that still doesn't mean
30490 // that the Readable class should behave improperly, as streams are
30491 // designed to be sync/async agnostic.
30492 // Take note if the _read call is sync or async (ie, if the read call
30493 // has returned yet), so that we know whether or not it's safe to emit
30494 // 'readable' etc.
30495 //
30496 // 3. Actually pull the requested chunks out of the buffer and return.
30497
30498 // if we need a readable event, then we need to do some reading.
30499 var doRead = state.needReadable;
30500 debug('need readable', doRead);
30501
30502 // if we currently have less than the highWaterMark, then also read some
30503 if (state.length === 0 || state.length - n < state.highWaterMark) {
30504 doRead = true;
30505 debug('length less than watermark', doRead);
30506 }
30507
30508 // however, if we've ended, then there's no point, and if we're already
30509 // reading, then it's unnecessary.
30510 if (state.ended || state.reading) {
30511 doRead = false;
30512 debug('reading or ended', doRead);
30513 } else if (doRead) {
30514 debug('do read');
30515 state.reading = true;
30516 state.sync = true;
30517 // if the length is currently zero, then we *need* a readable event.
30518 if (state.length === 0) state.needReadable = true;
30519 // call internal read method
30520 this._read(state.highWaterMark);
30521 state.sync = false;
30522 // If _read pushed data synchronously, then `reading` will be false,
30523 // and we need to re-evaluate how much data we can return to the user.
30524 if (!state.reading) n = howMuchToRead(nOrig, state);
30525 }
30526
30527 var ret;
30528 if (n > 0) ret = fromList(n, state);else ret = null;
30529
30530 if (ret === null) {
30531 state.needReadable = true;
30532 n = 0;
30533 } else {
30534 state.length -= n;
30535 }
30536
30537 if (state.length === 0) {
30538 // If we have nothing in the buffer, then we want to know
30539 // as soon as we *do* get something into the buffer.
30540 if (!state.ended) state.needReadable = true;
30541
30542 // If we tried to read() past the EOF, then emit end on the next tick.
30543 if (nOrig !== n && state.ended) endReadable(this);
30544 }
30545
30546 if (ret !== null) this.emit('data', ret);
30547
30548 return ret;
30549 };
30550
30551 function chunkInvalid(state, chunk) {
30552 var er = null;
30553 if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
30554 er = new TypeError('Invalid non-string/buffer chunk');
30555 }
30556 return er;
30557 }
30558
30559 function onEofChunk(stream, state) {
30560 if (state.ended) return;
30561 if (state.decoder) {
30562 var chunk = state.decoder.end();
30563 if (chunk && chunk.length) {
30564 state.buffer.push(chunk);
30565 state.length += state.objectMode ? 1 : chunk.length;
30566 }
30567 }
30568 state.ended = true;
30569
30570 // emit 'readable' now to make sure it gets picked up.
30571 emitReadable(stream);
30572 }
30573
30574 // Don't emit readable right away in sync mode, because this can trigger
30575 // another read() call => stack overflow. This way, it might trigger
30576 // a nextTick recursion warning, but that's not so bad.
30577 function emitReadable(stream) {
30578 var state = stream._readableState;
30579 state.needReadable = false;
30580 if (!state.emittedReadable) {
30581 debug('emitReadable', state.flowing);
30582 state.emittedReadable = true;
30583 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
30584 }
30585 }
30586
30587 function emitReadable_(stream) {
30588 debug('emit readable');
30589 stream.emit('readable');
30590 flow(stream);
30591 }
30592
30593 // at this point, the user has presumably seen the 'readable' event,
30594 // and called read() to consume some data. that may have triggered
30595 // in turn another _read(n) call, in which case reading = true if
30596 // it's in progress.
30597 // However, if we're not ended, or reading, and the length < hwm,
30598 // then go ahead and try to read some more preemptively.
30599 function maybeReadMore(stream, state) {
30600 if (!state.readingMore) {
30601 state.readingMore = true;
30602 processNextTick(maybeReadMore_, stream, state);
30603 }
30604 }
30605
30606 function maybeReadMore_(stream, state) {
30607 var len = state.length;
30608 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
30609 debug('maybeReadMore read 0');
30610 stream.read(0);
30611 if (len === state.length)
30612 // didn't get any data, stop spinning.
30613 break;else len = state.length;
30614 }
30615 state.readingMore = false;
30616 }
30617
30618 // abstract method. to be overridden in specific implementation classes.
30619 // call cb(er, data) where data is <= n in length.
30620 // for virtual (non-string, non-buffer) streams, "length" is somewhat
30621 // arbitrary, and perhaps not very meaningful.
30622 Readable.prototype._read = function (n) {
30623 this.emit('error', new Error('_read() is not implemented'));
30624 };
30625
30626 Readable.prototype.pipe = function (dest, pipeOpts) {
30627 var src = this;
30628 var state = this._readableState;
30629
30630 switch (state.pipesCount) {
30631 case 0:
30632 state.pipes = dest;
30633 break;
30634 case 1:
30635 state.pipes = [state.pipes, dest];
30636 break;
30637 default:
30638 state.pipes.push(dest);
30639 break;
30640 }
30641 state.pipesCount += 1;
30642 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
30643
30644 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
30645
30646 var endFn = doEnd ? onend : cleanup;
30647 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
30648
30649 dest.on('unpipe', onunpipe);
30650 function onunpipe(readable) {
30651 debug('onunpipe');
30652 if (readable === src) {
30653 cleanup();
30654 }
30655 }
30656
30657 function onend() {
30658 debug('onend');
30659 dest.end();
30660 }
30661
30662 // when the dest drains, it reduces the awaitDrain counter
30663 // on the source. This would be more elegant with a .once()
30664 // handler in flow(), but adding and removing repeatedly is
30665 // too slow.
30666 var ondrain = pipeOnDrain(src);
30667 dest.on('drain', ondrain);
30668
30669 var cleanedUp = false;
30670 function cleanup() {
30671 debug('cleanup');
30672 // cleanup event handlers once the pipe is broken
30673 dest.removeListener('close', onclose);
30674 dest.removeListener('finish', onfinish);
30675 dest.removeListener('drain', ondrain);
30676 dest.removeListener('error', onerror);
30677 dest.removeListener('unpipe', onunpipe);
30678 src.removeListener('end', onend);
30679 src.removeListener('end', cleanup);
30680 src.removeListener('data', ondata);
30681
30682 cleanedUp = true;
30683
30684 // if the reader is waiting for a drain event from this
30685 // specific writer, then it would cause it to never start
30686 // flowing again.
30687 // So, if this is awaiting a drain, then we just call it now.
30688 // If we don't know, then assume that we are waiting for one.
30689 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
30690 }
30691
30692 // If the user pushes more data while we're writing to dest then we'll end up
30693 // in ondata again. However, we only want to increase awaitDrain once because
30694 // dest will only emit one 'drain' event for the multiple writes.
30695 // => Introduce a guard on increasing awaitDrain.
30696 var increasedAwaitDrain = false;
30697 src.on('data', ondata);
30698 function ondata(chunk) {
30699 debug('ondata');
30700 increasedAwaitDrain = false;
30701 var ret = dest.write(chunk);
30702 if (false === ret && !increasedAwaitDrain) {
30703 // If the user unpiped during `dest.write()`, it is possible
30704 // to get stuck in a permanently paused state if that write
30705 // also returned false.
30706 // => Check whether `dest` is still a piping destination.
30707 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
30708 debug('false write response, pause', src._readableState.awaitDrain);
30709 src._readableState.awaitDrain++;
30710 increasedAwaitDrain = true;
30711 }
30712 src.pause();
30713 }
30714 }
30715
30716 // if the dest has an error, then stop piping into it.
30717 // however, don't suppress the throwing behavior for this.
30718 function onerror(er) {
30719 debug('onerror', er);
30720 unpipe();
30721 dest.removeListener('error', onerror);
30722 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
30723 }
30724
30725 // Make sure our error handler is attached before userland ones.
30726 prependListener(dest, 'error', onerror);
30727
30728 // Both close and finish should trigger unpipe, but only once.
30729 function onclose() {
30730 dest.removeListener('finish', onfinish);
30731 unpipe();
30732 }
30733 dest.once('close', onclose);
30734 function onfinish() {
30735 debug('onfinish');
30736 dest.removeListener('close', onclose);
30737 unpipe();
30738 }
30739 dest.once('finish', onfinish);
30740
30741 function unpipe() {
30742 debug('unpipe');
30743 src.unpipe(dest);
30744 }
30745
30746 // tell the dest that it's being piped to
30747 dest.emit('pipe', src);
30748
30749 // start the flow if it hasn't been started already.
30750 if (!state.flowing) {
30751 debug('pipe resume');
30752 src.resume();
30753 }
30754
30755 return dest;
30756 };
30757
30758 function pipeOnDrain(src) {
30759 return function () {
30760 var state = src._readableState;
30761 debug('pipeOnDrain', state.awaitDrain);
30762 if (state.awaitDrain) state.awaitDrain--;
30763 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
30764 state.flowing = true;
30765 flow(src);
30766 }
30767 };
30768 }
30769
30770 Readable.prototype.unpipe = function (dest) {
30771 var state = this._readableState;
30772
30773 // if we're not piping anywhere, then do nothing.
30774 if (state.pipesCount === 0) return this;
30775
30776 // just one destination. most common case.
30777 if (state.pipesCount === 1) {
30778 // passed in one, but it's not the right one.
30779 if (dest && dest !== state.pipes) return this;
30780
30781 if (!dest) dest = state.pipes;
30782
30783 // got a match.
30784 state.pipes = null;
30785 state.pipesCount = 0;
30786 state.flowing = false;
30787 if (dest) dest.emit('unpipe', this);
30788 return this;
30789 }
30790
30791 // slow case. multiple pipe destinations.
30792
30793 if (!dest) {
30794 // remove all.
30795 var dests = state.pipes;
30796 var len = state.pipesCount;
30797 state.pipes = null;
30798 state.pipesCount = 0;
30799 state.flowing = false;
30800
30801 for (var i = 0; i < len; i++) {
30802 dests[i].emit('unpipe', this);
30803 }return this;
30804 }
30805
30806 // try to find the right one.
30807 var index = indexOf(state.pipes, dest);
30808 if (index === -1) return this;
30809
30810 state.pipes.splice(index, 1);
30811 state.pipesCount -= 1;
30812 if (state.pipesCount === 1) state.pipes = state.pipes[0];
30813
30814 dest.emit('unpipe', this);
30815
30816 return this;
30817 };
30818
30819 // set up data events if they are asked for
30820 // Ensure readable listeners eventually get something
30821 Readable.prototype.on = function (ev, fn) {
30822 var res = Stream.prototype.on.call(this, ev, fn);
30823
30824 if (ev === 'data') {
30825 // Start flowing on next tick if stream isn't explicitly paused
30826 if (this._readableState.flowing !== false) this.resume();
30827 } else if (ev === 'readable') {
30828 var state = this._readableState;
30829 if (!state.endEmitted && !state.readableListening) {
30830 state.readableListening = state.needReadable = true;
30831 state.emittedReadable = false;
30832 if (!state.reading) {
30833 processNextTick(nReadingNextTick, this);
30834 } else if (state.length) {
30835 emitReadable(this, state);
30836 }
30837 }
30838 }
30839
30840 return res;
30841 };
30842 Readable.prototype.addListener = Readable.prototype.on;
30843
30844 function nReadingNextTick(self) {
30845 debug('readable nexttick read 0');
30846 self.read(0);
30847 }
30848
30849 // pause() and resume() are remnants of the legacy readable stream API
30850 // If the user uses them, then switch into old mode.
30851 Readable.prototype.resume = function () {
30852 var state = this._readableState;
30853 if (!state.flowing) {
30854 debug('resume');
30855 state.flowing = true;
30856 resume(this, state);
30857 }
30858 return this;
30859 };
30860
30861 function resume(stream, state) {
30862 if (!state.resumeScheduled) {
30863 state.resumeScheduled = true;
30864 processNextTick(resume_, stream, state);
30865 }
30866 }
30867
30868 function resume_(stream, state) {
30869 if (!state.reading) {
30870 debug('resume read 0');
30871 stream.read(0);
30872 }
30873
30874 state.resumeScheduled = false;
30875 state.awaitDrain = 0;
30876 stream.emit('resume');
30877 flow(stream);
30878 if (state.flowing && !state.reading) stream.read(0);
30879 }
30880
30881 Readable.prototype.pause = function () {
30882 debug('call pause flowing=%j', this._readableState.flowing);
30883 if (false !== this._readableState.flowing) {
30884 debug('pause');
30885 this._readableState.flowing = false;
30886 this.emit('pause');
30887 }
30888 return this;
30889 };
30890
30891 function flow(stream) {
30892 var state = stream._readableState;
30893 debug('flow', state.flowing);
30894 while (state.flowing && stream.read() !== null) {}
30895 }
30896
30897 // wrap an old-style stream as the async data source.
30898 // This is *not* part of the readable stream interface.
30899 // It is an ugly unfortunate mess of history.
30900 Readable.prototype.wrap = function (stream) {
30901 var state = this._readableState;
30902 var paused = false;
30903
30904 var self = this;
30905 stream.on('end', function () {
30906 debug('wrapped end');
30907 if (state.decoder && !state.ended) {
30908 var chunk = state.decoder.end();
30909 if (chunk && chunk.length) self.push(chunk);
30910 }
30911
30912 self.push(null);
30913 });
30914
30915 stream.on('data', function (chunk) {
30916 debug('wrapped data');
30917 if (state.decoder) chunk = state.decoder.write(chunk);
30918
30919 // don't skip over falsy values in objectMode
30920 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
30921
30922 var ret = self.push(chunk);
30923 if (!ret) {
30924 paused = true;
30925 stream.pause();
30926 }
30927 });
30928
30929 // proxy all the other methods.
30930 // important when wrapping filters and duplexes.
30931 for (var i in stream) {
30932 if (this[i] === undefined && typeof stream[i] === 'function') {
30933 this[i] = function (method) {
30934 return function () {
30935 return stream[method].apply(stream, arguments);
30936 };
30937 }(i);
30938 }
30939 }
30940
30941 // proxy certain important events.
30942 for (var n = 0; n < kProxyEvents.length; n++) {
30943 stream.on(kProxyEvents[n], self.emit.bind(self, kProxyEvents[n]));
30944 }
30945
30946 // when we try to consume some more bytes, simply unpause the
30947 // underlying stream.
30948 self._read = function (n) {
30949 debug('wrapped _read', n);
30950 if (paused) {
30951 paused = false;
30952 stream.resume();
30953 }
30954 };
30955
30956 return self;
30957 };
30958
30959 // exposed for testing purposes only.
30960 Readable._fromList = fromList;
30961
30962 // Pluck off n bytes from an array of buffers.
30963 // Length is the combined lengths of all the buffers in the list.
30964 // This function is designed to be inlinable, so please take care when making
30965 // changes to the function body.
30966 function fromList(n, state) {
30967 // nothing buffered
30968 if (state.length === 0) return null;
30969
30970 var ret;
30971 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
30972 // read it all, truncate the list
30973 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);
30974 state.buffer.clear();
30975 } else {
30976 // read part of list
30977 ret = fromListPartial(n, state.buffer, state.decoder);
30978 }
30979
30980 return ret;
30981 }
30982
30983 // Extracts only enough buffered data to satisfy the amount requested.
30984 // This function is designed to be inlinable, so please take care when making
30985 // changes to the function body.
30986 function fromListPartial(n, list, hasStrings) {
30987 var ret;
30988 if (n < list.head.data.length) {
30989 // slice is the same for buffers and strings
30990 ret = list.head.data.slice(0, n);
30991 list.head.data = list.head.data.slice(n);
30992 } else if (n === list.head.data.length) {
30993 // first chunk is a perfect match
30994 ret = list.shift();
30995 } else {
30996 // result spans more than one buffer
30997 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
30998 }
30999 return ret;
31000 }
31001
31002 // Copies a specified amount of characters from the list of buffered data
31003 // chunks.
31004 // This function is designed to be inlinable, so please take care when making
31005 // changes to the function body.
31006 function copyFromBufferString(n, list) {
31007 var p = list.head;
31008 var c = 1;
31009 var ret = p.data;
31010 n -= ret.length;
31011 while (p = p.next) {
31012 var str = p.data;
31013 var nb = n > str.length ? str.length : n;
31014 if (nb === str.length) ret += str;else ret += str.slice(0, n);
31015 n -= nb;
31016 if (n === 0) {
31017 if (nb === str.length) {
31018 ++c;
31019 if (p.next) list.head = p.next;else list.head = list.tail = null;
31020 } else {
31021 list.head = p;
31022 p.data = str.slice(nb);
31023 }
31024 break;
31025 }
31026 ++c;
31027 }
31028 list.length -= c;
31029 return ret;
31030 }
31031
31032 // Copies a specified amount of bytes from the list of buffered data chunks.
31033 // This function is designed to be inlinable, so please take care when making
31034 // changes to the function body.
31035 function copyFromBuffer(n, list) {
31036 var ret = bufferShim.allocUnsafe(n);
31037 var p = list.head;
31038 var c = 1;
31039 p.data.copy(ret);
31040 n -= p.data.length;
31041 while (p = p.next) {
31042 var buf = p.data;
31043 var nb = n > buf.length ? buf.length : n;
31044 buf.copy(ret, ret.length - n, 0, nb);
31045 n -= nb;
31046 if (n === 0) {
31047 if (nb === buf.length) {
31048 ++c;
31049 if (p.next) list.head = p.next;else list.head = list.tail = null;
31050 } else {
31051 list.head = p;
31052 p.data = buf.slice(nb);
31053 }
31054 break;
31055 }
31056 ++c;
31057 }
31058 list.length -= c;
31059 return ret;
31060 }
31061
31062 function endReadable(stream) {
31063 var state = stream._readableState;
31064
31065 // If we get here before consuming all the bytes, then that is a
31066 // bug in node. Should never happen.
31067 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
31068
31069 if (!state.endEmitted) {
31070 state.ended = true;
31071 processNextTick(endReadableNT, state, stream);
31072 }
31073 }
31074
31075 function endReadableNT(state, stream) {
31076 // Check that we didn't get one last unshift.
31077 if (!state.endEmitted && state.length === 0) {
31078 state.endEmitted = true;
31079 stream.readable = false;
31080 stream.emit('end');
31081 }
31082 }
31083
31084 function forEach(xs, f) {
31085 for (var i = 0, l = xs.length; i < l; i++) {
31086 f(xs[i], i);
31087 }
31088 }
31089
31090 function indexOf(xs, x) {
31091 for (var i = 0, l = xs.length; i < l; i++) {
31092 if (xs[i] === x) return i;
31093 }
31094 return -1;
31095 }
31096 }).call(this,require('_process'))
31097 },{"./_stream_duplex":15,"./internal/streams/BufferList":20,"./internal/streams/stream":21,"_process":13,"buffer":5,"buffer-shims":4,"core-util-is":6,"events":7,"inherits":9,"isarray":11,"process-nextick-args":12,"string_decoder/":22,"util":3}],18:[function(require,module,exports){
31098 // a transform stream is a readable/writable stream where you do
31099 // something with the data. Sometimes it's called a "filter",
31100 // but that's not a great name for it, since that implies a thing where
31101 // some bits pass through, and others are simply ignored. (That would
31102 // be a valid example of a transform, of course.)
31103 //
31104 // While the output is causally related to the input, it's not a
31105 // necessarily symmetric or synchronous transformation. For example,
31106 // a zlib stream might take multiple plain-text writes(), and then
31107 // emit a single compressed chunk some time in the future.
31108 //
31109 // Here's how this works:
31110 //
31111 // The Transform stream has all the aspects of the readable and writable
31112 // stream classes. When you write(chunk), that calls _write(chunk,cb)
31113 // internally, and returns false if there's a lot of pending writes
31114 // buffered up. When you call read(), that calls _read(n) until
31115 // there's enough pending readable data buffered up.
31116 //
31117 // In a transform stream, the written data is placed in a buffer. When
31118 // _read(n) is called, it transforms the queued up data, calling the
31119 // buffered _write cb's as it consumes chunks. If consuming a single
31120 // written chunk would result in multiple output chunks, then the first
31121 // outputted bit calls the readcb, and subsequent chunks just go into
31122 // the read buffer, and will cause it to emit 'readable' if necessary.
31123 //
31124 // This way, back-pressure is actually determined by the reading side,
31125 // since _read has to be called to start processing a new chunk. However,
31126 // a pathological inflate type of transform can cause excessive buffering
31127 // here. For example, imagine a stream where every byte of input is
31128 // interpreted as an integer from 0-255, and then results in that many
31129 // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
31130 // 1kb of data being output. In this case, you could write a very small
31131 // amount of input, and end up with a very large amount of output. In
31132 // such a pathological inflating mechanism, there'd be no way to tell
31133 // the system to stop doing the transform. A single 4MB write could
31134 // cause the system to run out of memory.
31135 //
31136 // However, even in such a pathological case, only a single written chunk
31137 // would be consumed, and then the rest would wait (un-transformed) until
31138 // the results of the previous transformed chunk were consumed.
31139
31140 'use strict';
31141
31142 module.exports = Transform;
31143
31144 var Duplex = require('./_stream_duplex');
31145
31146 /*<replacement>*/
31147 var util = require('core-util-is');
31148 util.inherits = require('inherits');
31149 /*</replacement>*/
31150
31151 util.inherits(Transform, Duplex);
31152
31153 function TransformState(stream) {
31154 this.afterTransform = function (er, data) {
31155 return afterTransform(stream, er, data);
31156 };
31157
31158 this.needTransform = false;
31159 this.transforming = false;
31160 this.writecb = null;
31161 this.writechunk = null;
31162 this.writeencoding = null;
31163 }
31164
31165 function afterTransform(stream, er, data) {
31166 var ts = stream._transformState;
31167 ts.transforming = false;
31168
31169 var cb = ts.writecb;
31170
31171 if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
31172
31173 ts.writechunk = null;
31174 ts.writecb = null;
31175
31176 if (data !== null && data !== undefined) stream.push(data);
31177
31178 cb(er);
31179
31180 var rs = stream._readableState;
31181 rs.reading = false;
31182 if (rs.needReadable || rs.length < rs.highWaterMark) {
31183 stream._read(rs.highWaterMark);
31184 }
31185 }
31186
31187 function Transform(options) {
31188 if (!(this instanceof Transform)) return new Transform(options);
31189
31190 Duplex.call(this, options);
31191
31192 this._transformState = new TransformState(this);
31193
31194 var stream = this;
31195
31196 // start out asking for a readable event once data is transformed.
31197 this._readableState.needReadable = true;
31198
31199 // we have implemented the _read method, and done the other things
31200 // that Readable wants before the first _read call, so unset the
31201 // sync guard flag.
31202 this._readableState.sync = false;
31203
31204 if (options) {
31205 if (typeof options.transform === 'function') this._transform = options.transform;
31206
31207 if (typeof options.flush === 'function') this._flush = options.flush;
31208 }
31209
31210 // When the writable side finishes, then flush out anything remaining.
31211 this.once('prefinish', function () {
31212 if (typeof this._flush === 'function') this._flush(function (er, data) {
31213 done(stream, er, data);
31214 });else done(stream);
31215 });
31216 }
31217
31218 Transform.prototype.push = function (chunk, encoding) {
31219 this._transformState.needTransform = false;
31220 return Duplex.prototype.push.call(this, chunk, encoding);
31221 };
31222
31223 // This is the part where you do stuff!
31224 // override this function in implementation classes.
31225 // 'chunk' is an input chunk.
31226 //
31227 // Call `push(newChunk)` to pass along transformed output
31228 // to the readable side. You may call 'push' zero or more times.
31229 //
31230 // Call `cb(err)` when you are done with this chunk. If you pass
31231 // an error, then that'll put the hurt on the whole operation. If you
31232 // never call cb(), then you'll never get another chunk.
31233 Transform.prototype._transform = function (chunk, encoding, cb) {
31234 throw new Error('_transform() is not implemented');
31235 };
31236
31237 Transform.prototype._write = function (chunk, encoding, cb) {
31238 var ts = this._transformState;
31239 ts.writecb = cb;
31240 ts.writechunk = chunk;
31241 ts.writeencoding = encoding;
31242 if (!ts.transforming) {
31243 var rs = this._readableState;
31244 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
31245 }
31246 };
31247
31248 // Doesn't matter what the args are here.
31249 // _transform does all the work.
31250 // That we got here means that the readable side wants more data.
31251 Transform.prototype._read = function (n) {
31252 var ts = this._transformState;
31253
31254 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
31255 ts.transforming = true;
31256 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
31257 } else {
31258 // mark that we need a transform, so that any data that comes in
31259 // will get processed, now that we've asked for it.
31260 ts.needTransform = true;
31261 }
31262 };
31263
31264 function done(stream, er, data) {
31265 if (er) return stream.emit('error', er);
31266
31267 if (data !== null && data !== undefined) stream.push(data);
31268
31269 // if there's nothing in the write buffer, then that means
31270 // that nothing more will ever be provided
31271 var ws = stream._writableState;
31272 var ts = stream._transformState;
31273
31274 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
31275
31276 if (ts.transforming) throw new Error('Calling transform done when still transforming');
31277
31278 return stream.push(null);
31279 }
31280 },{"./_stream_duplex":15,"core-util-is":6,"inherits":9}],19:[function(require,module,exports){
31281 (function (process){
31282 // A bit simpler than readable streams.
31283 // Implement an async ._write(chunk, encoding, cb), and it'll handle all
31284 // the drain event emission and buffering.
31285
31286 'use strict';
31287
31288 module.exports = Writable;
31289
31290 /*<replacement>*/
31291 var processNextTick = require('process-nextick-args');
31292 /*</replacement>*/
31293
31294 /*<replacement>*/
31295 var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
31296 /*</replacement>*/
31297
31298 /*<replacement>*/
31299 var Duplex;
31300 /*</replacement>*/
31301
31302 Writable.WritableState = WritableState;
31303
31304 /*<replacement>*/
31305 var util = require('core-util-is');
31306 util.inherits = require('inherits');
31307 /*</replacement>*/
31308
31309 /*<replacement>*/
31310 var internalUtil = {
31311 deprecate: require('util-deprecate')
31312 };
31313 /*</replacement>*/
31314
31315 /*<replacement>*/
31316 var Stream = require('./internal/streams/stream');
31317 /*</replacement>*/
31318
31319 var Buffer = require('buffer').Buffer;
31320 /*<replacement>*/
31321 var bufferShim = require('buffer-shims');
31322 /*</replacement>*/
31323
31324 util.inherits(Writable, Stream);
31325
31326 function nop() {}
31327
31328 function WriteReq(chunk, encoding, cb) {
31329 this.chunk = chunk;
31330 this.encoding = encoding;
31331 this.callback = cb;
31332 this.next = null;
31333 }
31334
31335 function WritableState(options, stream) {
31336 Duplex = Duplex || require('./_stream_duplex');
31337
31338 options = options || {};
31339
31340 // object stream flag to indicate whether or not this stream
31341 // contains buffers or objects.
31342 this.objectMode = !!options.objectMode;
31343
31344 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
31345
31346 // the point at which write() starts returning false
31347 // Note: 0 is a valid value, means that we always return false if
31348 // the entire buffer is not flushed immediately on write()
31349 var hwm = options.highWaterMark;
31350 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
31351 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
31352
31353 // cast to ints.
31354 this.highWaterMark = ~~this.highWaterMark;
31355
31356 // drain event flag.
31357 this.needDrain = false;
31358 // at the start of calling end()
31359 this.ending = false;
31360 // when end() has been called, and returned
31361 this.ended = false;
31362 // when 'finish' is emitted
31363 this.finished = false;
31364
31365 // should we decode strings into buffers before passing to _write?
31366 // this is here so that some node-core streams can optimize string
31367 // handling at a lower level.
31368 var noDecode = options.decodeStrings === false;
31369 this.decodeStrings = !noDecode;
31370
31371 // Crypto is kind of old and crusty. Historically, its default string
31372 // encoding is 'binary' so we have to make this configurable.
31373 // Everything else in the universe uses 'utf8', though.
31374 this.defaultEncoding = options.defaultEncoding || 'utf8';
31375
31376 // not an actual buffer we keep track of, but a measurement
31377 // of how much we're waiting to get pushed to some underlying
31378 // socket or file.
31379 this.length = 0;
31380
31381 // a flag to see when we're in the middle of a write.
31382 this.writing = false;
31383
31384 // when true all writes will be buffered until .uncork() call
31385 this.corked = 0;
31386
31387 // a flag to be able to tell if the onwrite cb is called immediately,
31388 // or on a later tick. We set this to true at first, because any
31389 // actions that shouldn't happen until "later" should generally also
31390 // not happen before the first write call.
31391 this.sync = true;
31392
31393 // a flag to know if we're processing previously buffered items, which
31394 // may call the _write() callback in the same tick, so that we don't
31395 // end up in an overlapped onwrite situation.
31396 this.bufferProcessing = false;
31397
31398 // the callback that's passed to _write(chunk,cb)
31399 this.onwrite = function (er) {
31400 onwrite(stream, er);
31401 };
31402
31403 // the callback that the user supplies to write(chunk,encoding,cb)
31404 this.writecb = null;
31405
31406 // the amount that is being written when _write is called.
31407 this.writelen = 0;
31408
31409 this.bufferedRequest = null;
31410 this.lastBufferedRequest = null;
31411
31412 // number of pending user-supplied write callbacks
31413 // this must be 0 before 'finish' can be emitted
31414 this.pendingcb = 0;
31415
31416 // emit prefinish if the only thing we're waiting for is _write cbs
31417 // This is relevant for synchronous Transform streams
31418 this.prefinished = false;
31419
31420 // True if the error was already emitted and should not be thrown again
31421 this.errorEmitted = false;
31422
31423 // count buffered requests
31424 this.bufferedRequestCount = 0;
31425
31426 // allocate the first CorkedRequest, there is always
31427 // one allocated and free to use, and we maintain at most two
31428 this.corkedRequestsFree = new CorkedRequest(this);
31429 }
31430
31431 WritableState.prototype.getBuffer = function getBuffer() {
31432 var current = this.bufferedRequest;
31433 var out = [];
31434 while (current) {
31435 out.push(current);
31436 current = current.next;
31437 }
31438 return out;
31439 };
31440
31441 (function () {
31442 try {
31443 Object.defineProperty(WritableState.prototype, 'buffer', {
31444 get: internalUtil.deprecate(function () {
31445 return this.getBuffer();
31446 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
31447 });
31448 } catch (_) {}
31449 })();
31450
31451 // Test _writableState for inheritance to account for Duplex streams,
31452 // whose prototype chain only points to Readable.
31453 var realHasInstance;
31454 if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
31455 realHasInstance = Function.prototype[Symbol.hasInstance];
31456 Object.defineProperty(Writable, Symbol.hasInstance, {
31457 value: function (object) {
31458 if (realHasInstance.call(this, object)) return true;
31459
31460 return object && object._writableState instanceof WritableState;
31461 }
31462 });
31463 } else {
31464 realHasInstance = function (object) {
31465 return object instanceof this;
31466 };
31467 }
31468
31469 function Writable(options) {
31470 Duplex = Duplex || require('./_stream_duplex');
31471
31472 // Writable ctor is applied to Duplexes, too.
31473 // `realHasInstance` is necessary because using plain `instanceof`
31474 // would return false, as no `_writableState` property is attached.
31475
31476 // Trying to use the custom `instanceof` for Writable here will also break the
31477 // Node.js LazyTransform implementation, which has a non-trivial getter for
31478 // `_writableState` that would lead to infinite recursion.
31479 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
31480 return new Writable(options);
31481 }
31482
31483 this._writableState = new WritableState(options, this);
31484
31485 // legacy.
31486 this.writable = true;
31487
31488 if (options) {
31489 if (typeof options.write === 'function') this._write = options.write;
31490
31491 if (typeof options.writev === 'function') this._writev = options.writev;
31492 }
31493
31494 Stream.call(this);
31495 }
31496
31497 // Otherwise people can pipe Writable streams, which is just wrong.
31498 Writable.prototype.pipe = function () {
31499 this.emit('error', new Error('Cannot pipe, not readable'));
31500 };
31501
31502 function writeAfterEnd(stream, cb) {
31503 var er = new Error('write after end');
31504 // TODO: defer error events consistently everywhere, not just the cb
31505 stream.emit('error', er);
31506 processNextTick(cb, er);
31507 }
31508
31509 // Checks that a user-supplied chunk is valid, especially for the particular
31510 // mode the stream is in. Currently this means that `null` is never accepted
31511 // and undefined/non-string values are only allowed in object mode.
31512 function validChunk(stream, state, chunk, cb) {
31513 var valid = true;
31514 var er = false;
31515
31516 if (chunk === null) {
31517 er = new TypeError('May not write null values to stream');
31518 } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
31519 er = new TypeError('Invalid non-string/buffer chunk');
31520 }
31521 if (er) {
31522 stream.emit('error', er);
31523 processNextTick(cb, er);
31524 valid = false;
31525 }
31526 return valid;
31527 }
31528
31529 Writable.prototype.write = function (chunk, encoding, cb) {
31530 var state = this._writableState;
31531 var ret = false;
31532 var isBuf = Buffer.isBuffer(chunk);
31533
31534 if (typeof encoding === 'function') {
31535 cb = encoding;
31536 encoding = null;
31537 }
31538
31539 if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
31540
31541 if (typeof cb !== 'function') cb = nop;
31542
31543 if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
31544 state.pendingcb++;
31545 ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
31546 }
31547
31548 return ret;
31549 };
31550
31551 Writable.prototype.cork = function () {
31552 var state = this._writableState;
31553
31554 state.corked++;
31555 };
31556
31557 Writable.prototype.uncork = function () {
31558 var state = this._writableState;
31559
31560 if (state.corked) {
31561 state.corked--;
31562
31563 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
31564 }
31565 };
31566
31567 Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
31568 // node::ParseEncoding() requires lower case.
31569 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
31570 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);
31571 this._writableState.defaultEncoding = encoding;
31572 return this;
31573 };
31574
31575 function decodeChunk(state, chunk, encoding) {
31576 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
31577 chunk = bufferShim.from(chunk, encoding);
31578 }
31579 return chunk;
31580 }
31581
31582 // if we're already writing something, then just put this
31583 // in the queue, and wait our turn. Otherwise, call _write
31584 // If we return false, then we need a drain event, so set that flag.
31585 function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
31586 if (!isBuf) {
31587 chunk = decodeChunk(state, chunk, encoding);
31588 if (Buffer.isBuffer(chunk)) encoding = 'buffer';
31589 }
31590 var len = state.objectMode ? 1 : chunk.length;
31591
31592 state.length += len;
31593
31594 var ret = state.length < state.highWaterMark;
31595 // we must ensure that previous needDrain will not be reset to false.
31596 if (!ret) state.needDrain = true;
31597
31598 if (state.writing || state.corked) {
31599 var last = state.lastBufferedRequest;
31600 state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
31601 if (last) {
31602 last.next = state.lastBufferedRequest;
31603 } else {
31604 state.bufferedRequest = state.lastBufferedRequest;
31605 }
31606 state.bufferedRequestCount += 1;
31607 } else {
31608 doWrite(stream, state, false, len, chunk, encoding, cb);
31609 }
31610
31611 return ret;
31612 }
31613
31614 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
31615 state.writelen = len;
31616 state.writecb = cb;
31617 state.writing = true;
31618 state.sync = true;
31619 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
31620 state.sync = false;
31621 }
31622
31623 function onwriteError(stream, state, sync, er, cb) {
31624 --state.pendingcb;
31625 if (sync) processNextTick(cb, er);else cb(er);
31626
31627 stream._writableState.errorEmitted = true;
31628 stream.emit('error', er);
31629 }
31630
31631 function onwriteStateUpdate(state) {
31632 state.writing = false;
31633 state.writecb = null;
31634 state.length -= state.writelen;
31635 state.writelen = 0;
31636 }
31637
31638 function onwrite(stream, er) {
31639 var state = stream._writableState;
31640 var sync = state.sync;
31641 var cb = state.writecb;
31642
31643 onwriteStateUpdate(state);
31644
31645 if (er) onwriteError(stream, state, sync, er, cb);else {
31646 // Check if we're actually ready to finish, but don't emit yet
31647 var finished = needFinish(state);
31648
31649 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
31650 clearBuffer(stream, state);
31651 }
31652
31653 if (sync) {
31654 /*<replacement>*/
31655 asyncWrite(afterWrite, stream, state, finished, cb);
31656 /*</replacement>*/
31657 } else {
31658 afterWrite(stream, state, finished, cb);
31659 }
31660 }
31661 }
31662
31663 function afterWrite(stream, state, finished, cb) {
31664 if (!finished) onwriteDrain(stream, state);
31665 state.pendingcb--;
31666 cb();
31667 finishMaybe(stream, state);
31668 }
31669
31670 // Must force callback to be called on nextTick, so that we don't
31671 // emit 'drain' before the write() consumer gets the 'false' return
31672 // value, and has a chance to attach a 'drain' listener.
31673 function onwriteDrain(stream, state) {
31674 if (state.length === 0 && state.needDrain) {
31675 state.needDrain = false;
31676 stream.emit('drain');
31677 }
31678 }
31679
31680 // if there's something in the buffer waiting, then process it
31681 function clearBuffer(stream, state) {
31682 state.bufferProcessing = true;
31683 var entry = state.bufferedRequest;
31684
31685 if (stream._writev && entry && entry.next) {
31686 // Fast case, write everything using _writev()
31687 var l = state.bufferedRequestCount;
31688 var buffer = new Array(l);
31689 var holder = state.corkedRequestsFree;
31690 holder.entry = entry;
31691
31692 var count = 0;
31693 while (entry) {
31694 buffer[count] = entry;
31695 entry = entry.next;
31696 count += 1;
31697 }
31698
31699 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
31700
31701 // doWrite is almost always async, defer these to save a bit of time
31702 // as the hot path ends with doWrite
31703 state.pendingcb++;
31704 state.lastBufferedRequest = null;
31705 if (holder.next) {
31706 state.corkedRequestsFree = holder.next;
31707 holder.next = null;
31708 } else {
31709 state.corkedRequestsFree = new CorkedRequest(state);
31710 }
31711 } else {
31712 // Slow case, write chunks one-by-one
31713 while (entry) {
31714 var chunk = entry.chunk;
31715 var encoding = entry.encoding;
31716 var cb = entry.callback;
31717 var len = state.objectMode ? 1 : chunk.length;
31718
31719 doWrite(stream, state, false, len, chunk, encoding, cb);
31720 entry = entry.next;
31721 // if we didn't call the onwrite immediately, then
31722 // it means that we need to wait until it does.
31723 // also, that means that the chunk and cb are currently
31724 // being processed, so move the buffer counter past them.
31725 if (state.writing) {
31726 break;
31727 }
31728 }
31729
31730 if (entry === null) state.lastBufferedRequest = null;
31731 }
31732
31733 state.bufferedRequestCount = 0;
31734 state.bufferedRequest = entry;
31735 state.bufferProcessing = false;
31736 }
31737
31738 Writable.prototype._write = function (chunk, encoding, cb) {
31739 cb(new Error('_write() is not implemented'));
31740 };
31741
31742 Writable.prototype._writev = null;
31743
31744 Writable.prototype.end = function (chunk, encoding, cb) {
31745 var state = this._writableState;
31746
31747 if (typeof chunk === 'function') {
31748 cb = chunk;
31749 chunk = null;
31750 encoding = null;
31751 } else if (typeof encoding === 'function') {
31752 cb = encoding;
31753 encoding = null;
31754 }
31755
31756 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
31757
31758 // .end() fully uncorks
31759 if (state.corked) {
31760 state.corked = 1;
31761 this.uncork();
31762 }
31763
31764 // ignore unnecessary end() calls.
31765 if (!state.ending && !state.finished) endWritable(this, state, cb);
31766 };
31767
31768 function needFinish(state) {
31769 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
31770 }
31771
31772 function prefinish(stream, state) {
31773 if (!state.prefinished) {
31774 state.prefinished = true;
31775 stream.emit('prefinish');
31776 }
31777 }
31778
31779 function finishMaybe(stream, state) {
31780 var need = needFinish(state);
31781 if (need) {
31782 if (state.pendingcb === 0) {
31783 prefinish(stream, state);
31784 state.finished = true;
31785 stream.emit('finish');
31786 } else {
31787 prefinish(stream, state);
31788 }
31789 }
31790 return need;
31791 }
31792
31793 function endWritable(stream, state, cb) {
31794 state.ending = true;
31795 finishMaybe(stream, state);
31796 if (cb) {
31797 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
31798 }
31799 state.ended = true;
31800 stream.writable = false;
31801 }
31802
31803 // It seems a linked list but it is not
31804 // there will be only 2 of these for each stream
31805 function CorkedRequest(state) {
31806 var _this = this;
31807
31808 this.next = null;
31809 this.entry = null;
31810 this.finish = function (err) {
31811 var entry = _this.entry;
31812 _this.entry = null;
31813 while (entry) {
31814 var cb = entry.callback;
31815 state.pendingcb--;
31816 cb(err);
31817 entry = entry.next;
31818 }
31819 if (state.corkedRequestsFree) {
31820 state.corkedRequestsFree.next = _this;
31821 } else {
31822 state.corkedRequestsFree = _this;
31823 }
31824 };
31825 }
31826 }).call(this,require('_process'))
31827 },{"./_stream_duplex":15,"./internal/streams/stream":21,"_process":13,"buffer":5,"buffer-shims":4,"core-util-is":6,"inherits":9,"process-nextick-args":12,"util-deprecate":30}],20:[function(require,module,exports){
31828 'use strict';
31829
31830 var Buffer = require('buffer').Buffer;
31831 /*<replacement>*/
31832 var bufferShim = require('buffer-shims');
31833 /*</replacement>*/
31834
31835 module.exports = BufferList;
31836
31837 function BufferList() {
31838 this.head = null;
31839 this.tail = null;
31840 this.length = 0;
31841 }
31842
31843 BufferList.prototype.push = function (v) {
31844 var entry = { data: v, next: null };
31845 if (this.length > 0) this.tail.next = entry;else this.head = entry;
31846 this.tail = entry;
31847 ++this.length;
31848 };
31849
31850 BufferList.prototype.unshift = function (v) {
31851 var entry = { data: v, next: this.head };
31852 if (this.length === 0) this.tail = entry;
31853 this.head = entry;
31854 ++this.length;
31855 };
31856
31857 BufferList.prototype.shift = function () {
31858 if (this.length === 0) return;
31859 var ret = this.head.data;
31860 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
31861 --this.length;
31862 return ret;
31863 };
31864
31865 BufferList.prototype.clear = function () {
31866 this.head = this.tail = null;
31867 this.length = 0;
31868 };
31869
31870 BufferList.prototype.join = function (s) {
31871 if (this.length === 0) return '';
31872 var p = this.head;
31873 var ret = '' + p.data;
31874 while (p = p.next) {
31875 ret += s + p.data;
31876 }return ret;
31877 };
31878
31879 BufferList.prototype.concat = function (n) {
31880 if (this.length === 0) return bufferShim.alloc(0);
31881 if (this.length === 1) return this.head.data;
31882 var ret = bufferShim.allocUnsafe(n >>> 0);
31883 var p = this.head;
31884 var i = 0;
31885 while (p) {
31886 p.data.copy(ret, i);
31887 i += p.data.length;
31888 p = p.next;
31889 }
31890 return ret;
31891 };
31892 },{"buffer":5,"buffer-shims":4}],21:[function(require,module,exports){
31893 module.exports = require('events').EventEmitter;
31894
31895 },{"events":7}],22:[function(require,module,exports){
31896 'use strict';
31897
31898 var Buffer = require('safe-buffer').Buffer;
31899
31900 var isEncoding = Buffer.isEncoding || function (encoding) {
31901 encoding = '' + encoding;
31902 switch (encoding && encoding.toLowerCase()) {
31903 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':
31904 return true;
31905 default:
31906 return false;
31907 }
31908 };
31909
31910 function _normalizeEncoding(enc) {
31911 if (!enc) return 'utf8';
31912 var retried;
31913 while (true) {
31914 switch (enc) {
31915 case 'utf8':
31916 case 'utf-8':
31917 return 'utf8';
31918 case 'ucs2':
31919 case 'ucs-2':
31920 case 'utf16le':
31921 case 'utf-16le':
31922 return 'utf16le';
31923 case 'latin1':
31924 case 'binary':
31925 return 'latin1';
31926 case 'base64':
31927 case 'ascii':
31928 case 'hex':
31929 return enc;
31930 default:
31931 if (retried) return; // undefined
31932 enc = ('' + enc).toLowerCase();
31933 retried = true;
31934 }
31935 }
31936 };
31937
31938 // Do not cache `Buffer.isEncoding` when checking encoding names as some
31939 // modules monkey-patch it to support additional encodings
31940 function normalizeEncoding(enc) {
31941 var nenc = _normalizeEncoding(enc);
31942 if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
31943 return nenc || enc;
31944 }
31945
31946 // StringDecoder provides an interface for efficiently splitting a series of
31947 // buffers into a series of JS strings without breaking apart multi-byte
31948 // characters.
31949 exports.StringDecoder = StringDecoder;
31950 function StringDecoder(encoding) {
31951 this.encoding = normalizeEncoding(encoding);
31952 var nb;
31953 switch (this.encoding) {
31954 case 'utf16le':
31955 this.text = utf16Text;
31956 this.end = utf16End;
31957 nb = 4;
31958 break;
31959 case 'utf8':
31960 this.fillLast = utf8FillLast;
31961 nb = 4;
31962 break;
31963 case 'base64':
31964 this.text = base64Text;
31965 this.end = base64End;
31966 nb = 3;
31967 break;
31968 default:
31969 this.write = simpleWrite;
31970 this.end = simpleEnd;
31971 return;
31972 }
31973 this.lastNeed = 0;
31974 this.lastTotal = 0;
31975 this.lastChar = Buffer.allocUnsafe(nb);
31976 }
31977
31978 StringDecoder.prototype.write = function (buf) {
31979 if (buf.length === 0) return '';
31980 var r;
31981 var i;
31982 if (this.lastNeed) {
31983 r = this.fillLast(buf);
31984 if (r === undefined) return '';
31985 i = this.lastNeed;
31986 this.lastNeed = 0;
31987 } else {
31988 i = 0;
31989 }
31990 if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
31991 return r || '';
31992 };
31993
31994 StringDecoder.prototype.end = utf8End;
31995
31996 // Returns only complete characters in a Buffer
31997 StringDecoder.prototype.text = utf8Text;
31998
31999 // Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
32000 StringDecoder.prototype.fillLast = function (buf) {
32001 if (this.lastNeed <= buf.length) {
32002 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
32003 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
32004 }
32005 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
32006 this.lastNeed -= buf.length;
32007 };
32008
32009 // Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
32010 // continuation byte.
32011 function utf8CheckByte(byte) {
32012 if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;
32013 return -1;
32014 }
32015
32016 // Checks at most 3 bytes at the end of a Buffer in order to detect an
32017 // incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
32018 // needed to complete the UTF-8 character (if applicable) are returned.
32019 function utf8CheckIncomplete(self, buf, i) {
32020 var j = buf.length - 1;
32021 if (j < i) return 0;
32022 var nb = utf8CheckByte(buf[j]);
32023 if (nb >= 0) {
32024 if (nb > 0) self.lastNeed = nb - 1;
32025 return nb;
32026 }
32027 if (--j < i) return 0;
32028 nb = utf8CheckByte(buf[j]);
32029 if (nb >= 0) {
32030 if (nb > 0) self.lastNeed = nb - 2;
32031 return nb;
32032 }
32033 if (--j < i) return 0;
32034 nb = utf8CheckByte(buf[j]);
32035 if (nb >= 0) {
32036 if (nb > 0) {
32037 if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
32038 }
32039 return nb;
32040 }
32041 return 0;
32042 }
32043
32044 // Validates as many continuation bytes for a multi-byte UTF-8 character as
32045 // needed or are available. If we see a non-continuation byte where we expect
32046 // one, we "replace" the validated continuation bytes we've seen so far with
32047 // UTF-8 replacement characters ('\ufffd'), to match v8's UTF-8 decoding
32048 // behavior. The continuation byte check is included three times in the case
32049 // where all of the continuation bytes for a character exist in the same buffer.
32050 // It is also done this way as a slight performance increase instead of using a
32051 // loop.
32052 function utf8CheckExtraBytes(self, buf, p) {
32053 if ((buf[0] & 0xC0) !== 0x80) {
32054 self.lastNeed = 0;
32055 return '\ufffd'.repeat(p);
32056 }
32057 if (self.lastNeed > 1 && buf.length > 1) {
32058 if ((buf[1] & 0xC0) !== 0x80) {
32059 self.lastNeed = 1;
32060 return '\ufffd'.repeat(p + 1);
32061 }
32062 if (self.lastNeed > 2 && buf.length > 2) {
32063 if ((buf[2] & 0xC0) !== 0x80) {
32064 self.lastNeed = 2;
32065 return '\ufffd'.repeat(p + 2);
32066 }
32067 }
32068 }
32069 }
32070
32071 // Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
32072 function utf8FillLast(buf) {
32073 var p = this.lastTotal - this.lastNeed;
32074 var r = utf8CheckExtraBytes(this, buf, p);
32075 if (r !== undefined) return r;
32076 if (this.lastNeed <= buf.length) {
32077 buf.copy(this.lastChar, p, 0, this.lastNeed);
32078 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
32079 }
32080 buf.copy(this.lastChar, p, 0, buf.length);
32081 this.lastNeed -= buf.length;
32082 }
32083
32084 // Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
32085 // partial character, the character's bytes are buffered until the required
32086 // number of bytes are available.
32087 function utf8Text(buf, i) {
32088 var total = utf8CheckIncomplete(this, buf, i);
32089 if (!this.lastNeed) return buf.toString('utf8', i);
32090 this.lastTotal = total;
32091 var end = buf.length - (total - this.lastNeed);
32092 buf.copy(this.lastChar, 0, end);
32093 return buf.toString('utf8', i, end);
32094 }
32095
32096 // For UTF-8, a replacement character for each buffered byte of a (partial)
32097 // character needs to be added to the output.
32098 function utf8End(buf) {
32099 var r = buf && buf.length ? this.write(buf) : '';
32100 if (this.lastNeed) return r + '\ufffd'.repeat(this.lastTotal - this.lastNeed);
32101 return r;
32102 }
32103
32104 // UTF-16LE typically needs two bytes per character, but even if we have an even
32105 // number of bytes available, we need to check if we end on a leading/high
32106 // surrogate. In that case, we need to wait for the next two bytes in order to
32107 // decode the last character properly.
32108 function utf16Text(buf, i) {
32109 if ((buf.length - i) % 2 === 0) {
32110 var r = buf.toString('utf16le', i);
32111 if (r) {
32112 var c = r.charCodeAt(r.length - 1);
32113 if (c >= 0xD800 && c <= 0xDBFF) {
32114 this.lastNeed = 2;
32115 this.lastTotal = 4;
32116 this.lastChar[0] = buf[buf.length - 2];
32117 this.lastChar[1] = buf[buf.length - 1];
32118 return r.slice(0, -1);
32119 }
32120 }
32121 return r;
32122 }
32123 this.lastNeed = 1;
32124 this.lastTotal = 2;
32125 this.lastChar[0] = buf[buf.length - 1];
32126 return buf.toString('utf16le', i, buf.length - 1);
32127 }
32128
32129 // For UTF-16LE we do not explicitly append special replacement characters if we
32130 // end on a partial character, we simply let v8 handle that.
32131 function utf16End(buf) {
32132 var r = buf && buf.length ? this.write(buf) : '';
32133 if (this.lastNeed) {
32134 var end = this.lastTotal - this.lastNeed;
32135 return r + this.lastChar.toString('utf16le', 0, end);
32136 }
32137 return r;
32138 }
32139
32140 function base64Text(buf, i) {
32141 var n = (buf.length - i) % 3;
32142 if (n === 0) return buf.toString('base64', i);
32143 this.lastNeed = 3 - n;
32144 this.lastTotal = 3;
32145 if (n === 1) {
32146 this.lastChar[0] = buf[buf.length - 1];
32147 } else {
32148 this.lastChar[0] = buf[buf.length - 2];
32149 this.lastChar[1] = buf[buf.length - 1];
32150 }
32151 return buf.toString('base64', i, buf.length - n);
32152 }
32153
32154 function base64End(buf) {
32155 var r = buf && buf.length ? this.write(buf) : '';
32156 if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
32157 return r;
32158 }
32159
32160 // Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
32161 function simpleWrite(buf) {
32162 return buf.toString(this.encoding);
32163 }
32164
32165 function simpleEnd(buf) {
32166 return buf && buf.length ? this.write(buf) : '';
32167 }
32168 },{"safe-buffer":27}],23:[function(require,module,exports){
32169 module.exports = require('./readable').PassThrough
32170
32171 },{"./readable":24}],24:[function(require,module,exports){
32172 exports = module.exports = require('./lib/_stream_readable.js');
32173 exports.Stream = exports;
32174 exports.Readable = exports;
32175 exports.Writable = require('./lib/_stream_writable.js');
32176 exports.Duplex = require('./lib/_stream_duplex.js');
32177 exports.Transform = require('./lib/_stream_transform.js');
32178 exports.PassThrough = require('./lib/_stream_passthrough.js');
32179
32180 },{"./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}],25:[function(require,module,exports){
32181 module.exports = require('./readable').Transform
32182
32183 },{"./readable":24}],26:[function(require,module,exports){
32184 module.exports = require('./lib/_stream_writable.js');
32185
32186 },{"./lib/_stream_writable.js":19}],27:[function(require,module,exports){
32187 module.exports = require('buffer')
32188
32189 },{"buffer":5}],28:[function(require,module,exports){
32190 // Copyright Joyent, Inc. and other Node contributors.
32191 //
32192 // Permission is hereby granted, free of charge, to any person obtaining a
32193 // copy of this software and associated documentation files (the
32194 // "Software"), to deal in the Software without restriction, including
32195 // without limitation the rights to use, copy, modify, merge, publish,
32196 // distribute, sublicense, and/or sell copies of the Software, and to permit
32197 // persons to whom the Software is furnished to do so, subject to the
32198 // following conditions:
32199 //
32200 // The above copyright notice and this permission notice shall be included
32201 // in all copies or substantial portions of the Software.
32202 //
32203 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
32204 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
32205 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
32206 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
32207 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
32208 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
32209 // USE OR OTHER DEALINGS IN THE SOFTWARE.
32210
32211 module.exports = Stream;
32212
32213 var EE = require('events').EventEmitter;
32214 var inherits = require('inherits');
32215
32216 inherits(Stream, EE);
32217 Stream.Readable = require('readable-stream/readable.js');
32218 Stream.Writable = require('readable-stream/writable.js');
32219 Stream.Duplex = require('readable-stream/duplex.js');
32220 Stream.Transform = require('readable-stream/transform.js');
32221 Stream.PassThrough = require('readable-stream/passthrough.js');
32222
32223 // Backwards-compat with node 0.4.x
32224 Stream.Stream = Stream;
32225
32226
32227
32228 // old-style streams. Note that the pipe method (the only relevant
32229 // part of this class) is overridden in the Readable class.
32230
32231 function Stream() {
32232 EE.call(this);
32233 }
32234
32235 Stream.prototype.pipe = function(dest, options) {
32236 var source = this;
32237
32238 function ondata(chunk) {
32239 if (dest.writable) {
32240 if (false === dest.write(chunk) && source.pause) {
32241 source.pause();
32242 }
32243 }
32244 }
32245
32246 source.on('data', ondata);
32247
32248 function ondrain() {
32249 if (source.readable && source.resume) {
32250 source.resume();
32251 }
32252 }
32253
32254 dest.on('drain', ondrain);
32255
32256 // If the 'end' option is not supplied, dest.end() will be called when
32257 // source gets the 'end' or 'close' events. Only dest.end() once.
32258 if (!dest._isStdio && (!options || options.end !== false)) {
32259 source.on('end', onend);
32260 source.on('close', onclose);
32261 }
32262
32263 var didOnEnd = false;
32264 function onend() {
32265 if (didOnEnd) return;
32266 didOnEnd = true;
32267
32268 dest.end();
32269 }
32270
32271
32272 function onclose() {
32273 if (didOnEnd) return;
32274 didOnEnd = true;
32275
32276 if (typeof dest.destroy === 'function') dest.destroy();
32277 }
32278
32279 // don't leave dangling pipes when there are errors.
32280 function onerror(er) {
32281 cleanup();
32282 if (EE.listenerCount(this, 'error') === 0) {
32283 throw er; // Unhandled stream error in pipe.
32284 }
32285 }
32286
32287 source.on('error', onerror);
32288 dest.on('error', onerror);
32289
32290 // remove all the event listeners that were added.
32291 function cleanup() {
32292 source.removeListener('data', ondata);
32293 dest.removeListener('drain', ondrain);
32294
32295 source.removeListener('end', onend);
32296 source.removeListener('close', onclose);
32297
32298 source.removeListener('error', onerror);
32299 dest.removeListener('error', onerror);
32300
32301 source.removeListener('end', cleanup);
32302 source.removeListener('close', cleanup);
32303
32304 dest.removeListener('close', cleanup);
32305 }
32306
32307 source.on('end', cleanup);
32308 source.on('close', cleanup);
32309
32310 dest.on('close', cleanup);
32311
32312 dest.emit('pipe', source);
32313
32314 // Allow for unix-like usage: A.pipe(B).pipe(C)
32315 return dest;
32316 };
32317
32318 },{"events":7,"inherits":9,"readable-stream/duplex.js":14,"readable-stream/passthrough.js":23,"readable-stream/readable.js":24,"readable-stream/transform.js":25,"readable-stream/writable.js":26}],29:[function(require,module,exports){
32319 // Copyright Joyent, Inc. and other Node contributors.
32320 //
32321 // Permission is hereby granted, free of charge, to any person obtaining a
32322 // copy of this software and associated documentation files (the
32323 // "Software"), to deal in the Software without restriction, including
32324 // without limitation the rights to use, copy, modify, merge, publish,
32325 // distribute, sublicense, and/or sell copies of the Software, and to permit
32326 // persons to whom the Software is furnished to do so, subject to the
32327 // following conditions:
32328 //
32329 // The above copyright notice and this permission notice shall be included
32330 // in all copies or substantial portions of the Software.
32331 //
32332 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
32333 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
32334 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
32335 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
32336 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
32337 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
32338 // USE OR OTHER DEALINGS IN THE SOFTWARE.
32339
32340 var Buffer = require('buffer').Buffer;
32341
32342 var isBufferEncoding = Buffer.isEncoding
32343 || function(encoding) {
32344 switch (encoding && encoding.toLowerCase()) {
32345 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;
32346 default: return false;
32347 }
32348 }
32349
32350
32351 function assertEncoding(encoding) {
32352 if (encoding && !isBufferEncoding(encoding)) {
32353 throw new Error('Unknown encoding: ' + encoding);
32354 }
32355 }
32356
32357 // StringDecoder provides an interface for efficiently splitting a series of
32358 // buffers into a series of JS strings without breaking apart multi-byte
32359 // characters. CESU-8 is handled as part of the UTF-8 encoding.
32360 //
32361 // @TODO Handling all encodings inside a single object makes it very difficult
32362 // to reason about this code, so it should be split up in the future.
32363 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
32364 // points as used by CESU-8.
32365 var StringDecoder = exports.StringDecoder = function(encoding) {
32366 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
32367 assertEncoding(encoding);
32368 switch (this.encoding) {
32369 case 'utf8':
32370 // CESU-8 represents each of Surrogate Pair by 3-bytes
32371 this.surrogateSize = 3;
32372 break;
32373 case 'ucs2':
32374 case 'utf16le':
32375 // UTF-16 represents each of Surrogate Pair by 2-bytes
32376 this.surrogateSize = 2;
32377 this.detectIncompleteChar = utf16DetectIncompleteChar;
32378 break;
32379 case 'base64':
32380 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
32381 this.surrogateSize = 3;
32382 this.detectIncompleteChar = base64DetectIncompleteChar;
32383 break;
32384 default:
32385 this.write = passThroughWrite;
32386 return;
32387 }
32388
32389 // Enough space to store all bytes of a single character. UTF-8 needs 4
32390 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
32391 this.charBuffer = new Buffer(6);
32392 // Number of bytes received for the current incomplete multi-byte character.
32393 this.charReceived = 0;
32394 // Number of bytes expected for the current incomplete multi-byte character.
32395 this.charLength = 0;
32396 };
32397
32398
32399 // write decodes the given buffer and returns it as JS string that is
32400 // guaranteed to not contain any partial multi-byte characters. Any partial
32401 // character found at the end of the buffer is buffered up, and will be
32402 // returned when calling write again with the remaining bytes.
32403 //
32404 // Note: Converting a Buffer containing an orphan surrogate to a String
32405 // currently works, but converting a String to a Buffer (via `new Buffer`, or
32406 // Buffer#write) will replace incomplete surrogates with the unicode
32407 // replacement character. See https://codereview.chromium.org/121173009/ .
32408 StringDecoder.prototype.write = function(buffer) {
32409 var charStr = '';
32410 // if our last write ended with an incomplete multibyte character
32411 while (this.charLength) {
32412 // determine how many remaining bytes this buffer has to offer for this char
32413 var available = (buffer.length >= this.charLength - this.charReceived) ?
32414 this.charLength - this.charReceived :
32415 buffer.length;
32416
32417 // add the new bytes to the char buffer
32418 buffer.copy(this.charBuffer, this.charReceived, 0, available);
32419 this.charReceived += available;
32420
32421 if (this.charReceived < this.charLength) {
32422 // still not enough chars in this buffer? wait for more ...
32423 return '';
32424 }
32425
32426 // remove bytes belonging to the current character from the buffer
32427 buffer = buffer.slice(available, buffer.length);
32428
32429 // get the character that was split
32430 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
32431
32432 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
32433 var charCode = charStr.charCodeAt(charStr.length - 1);
32434 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
32435 this.charLength += this.surrogateSize;
32436 charStr = '';
32437 continue;
32438 }
32439 this.charReceived = this.charLength = 0;
32440
32441 // if there are no more bytes in this buffer, just emit our char
32442 if (buffer.length === 0) {
32443 return charStr;
32444 }
32445 break;
32446 }
32447
32448 // determine and set charLength / charReceived
32449 this.detectIncompleteChar(buffer);
32450
32451 var end = buffer.length;
32452 if (this.charLength) {
32453 // buffer the incomplete character bytes we got
32454 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
32455 end -= this.charReceived;
32456 }
32457
32458 charStr += buffer.toString(this.encoding, 0, end);
32459
32460 var end = charStr.length - 1;
32461 var charCode = charStr.charCodeAt(end);
32462 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
32463 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
32464 var size = this.surrogateSize;
32465 this.charLength += size;
32466 this.charReceived += size;
32467 this.charBuffer.copy(this.charBuffer, size, 0, size);
32468 buffer.copy(this.charBuffer, 0, 0, size);
32469 return charStr.substring(0, end);
32470 }
32471
32472 // or just emit the charStr
32473 return charStr;
32474 };
32475
32476 // detectIncompleteChar determines if there is an incomplete UTF-8 character at
32477 // the end of the given buffer. If so, it sets this.charLength to the byte
32478 // length that character, and sets this.charReceived to the number of bytes
32479 // that are available for this character.
32480 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
32481 // determine how many bytes we have to check at the end of this buffer
32482 var i = (buffer.length >= 3) ? 3 : buffer.length;
32483
32484 // Figure out if one of the last i bytes of our buffer announces an
32485 // incomplete char.
32486 for (; i > 0; i--) {
32487 var c = buffer[buffer.length - i];
32488
32489 // See http://en.wikipedia.org/wiki/UTF-8#Description
32490
32491 // 110XXXXX
32492 if (i == 1 && c >> 5 == 0x06) {
32493 this.charLength = 2;
32494 break;
32495 }
32496
32497 // 1110XXXX
32498 if (i <= 2 && c >> 4 == 0x0E) {
32499 this.charLength = 3;
32500 break;
32501 }
32502
32503 // 11110XXX
32504 if (i <= 3 && c >> 3 == 0x1E) {
32505 this.charLength = 4;
32506 break;
32507 }
32508 }
32509 this.charReceived = i;
32510 };
32511
32512 StringDecoder.prototype.end = function(buffer) {
32513 var res = '';
32514 if (buffer && buffer.length)
32515 res = this.write(buffer);
32516
32517 if (this.charReceived) {
32518 var cr = this.charReceived;
32519 var buf = this.charBuffer;
32520 var enc = this.encoding;
32521 res += buf.slice(0, cr).toString(enc);
32522 }
32523
32524 return res;
32525 };
32526
32527 function passThroughWrite(buffer) {
32528 return buffer.toString(this.encoding);
32529 }
32530
32531 function utf16DetectIncompleteChar(buffer) {
32532 this.charReceived = buffer.length % 2;
32533 this.charLength = this.charReceived ? 2 : 0;
32534 }
32535
32536 function base64DetectIncompleteChar(buffer) {
32537 this.charReceived = buffer.length % 3;
32538 this.charLength = this.charReceived ? 3 : 0;
32539 }
32540
32541 },{"buffer":5}],30:[function(require,module,exports){
32542 (function (global){
32543
32544 /**
32545 * Module exports.
32546 */
32547
32548 module.exports = deprecate;
32549
32550 /**
32551 * Mark that a method should not be used.
32552 * Returns a modified function which warns once by default.
32553 *
32554 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
32555 *
32556 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
32557 * will throw an Error when invoked.
32558 *
32559 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
32560 * will invoke `console.trace()` instead of `console.error()`.
32561 *
32562 * @param {Function} fn - the function to deprecate
32563 * @param {String} msg - the string to print to the console when `fn` is invoked
32564 * @returns {Function} a new "deprecated" version of `fn`
32565 * @api public
32566 */
32567
32568 function deprecate (fn, msg) {
32569 if (config('noDeprecation')) {
32570 return fn;
32571 }
32572
32573 var warned = false;
32574 function deprecated() {
32575 if (!warned) {
32576 if (config('throwDeprecation')) {
32577 throw new Error(msg);
32578 } else if (config('traceDeprecation')) {
32579 console.trace(msg);
32580 } else {
32581 console.warn(msg);
32582 }
32583 warned = true;
32584 }
32585 return fn.apply(this, arguments);
32586 }
32587
32588 return deprecated;
32589 }
32590
32591 /**
32592 * Checks `localStorage` for boolean values for the given `name`.
32593 *
32594 * @param {String} name
32595 * @returns {Boolean}
32596 * @api private
32597 */
32598
32599 function config (name) {
32600 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
32601 try {
32602 if (!global.localStorage) return false;
32603 } catch (_) {
32604 return false;
32605 }
32606 var val = global.localStorage[name];
32607 if (null == val) return false;
32608 return String(val).toLowerCase() === 'true';
32609 }
32610
32611 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
32612 },{}],31:[function(require,module,exports){
32613 arguments[4][9][0].apply(exports,arguments)
32614 },{"dup":9}],32:[function(require,module,exports){
32615 module.exports = function isBuffer(arg) {
32616 return arg && typeof arg === 'object'
32617 && typeof arg.copy === 'function'
32618 && typeof arg.fill === 'function'
32619 && typeof arg.readUInt8 === 'function';
32620 }
32621 },{}],33:[function(require,module,exports){
32622 (function (process,global){
32623 // Copyright Joyent, Inc. and other Node contributors.
32624 //
32625 // Permission is hereby granted, free of charge, to any person obtaining a
32626 // copy of this software and associated documentation files (the
32627 // "Software"), to deal in the Software without restriction, including
32628 // without limitation the rights to use, copy, modify, merge, publish,
32629 // distribute, sublicense, and/or sell copies of the Software, and to permit
32630 // persons to whom the Software is furnished to do so, subject to the
32631 // following conditions:
32632 //
32633 // The above copyright notice and this permission notice shall be included
32634 // in all copies or substantial portions of the Software.
32635 //
32636 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
32637 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
32638 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
32639 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
32640 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
32641 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
32642 // USE OR OTHER DEALINGS IN THE SOFTWARE.
32643
32644 var formatRegExp = /%[sdj%]/g;
32645 exports.format = function(f) {
32646 if (!isString(f)) {
32647 var objects = [];
32648 for (var i = 0; i < arguments.length; i++) {
32649 objects.push(inspect(arguments[i]));
32650 }
32651 return objects.join(' ');
32652 }
32653
32654 var i = 1;
32655 var args = arguments;
32656 var len = args.length;
32657 var str = String(f).replace(formatRegExp, function(x) {
32658 if (x === '%%') return '%';
32659 if (i >= len) return x;
32660 switch (x) {
32661 case '%s': return String(args[i++]);
32662 case '%d': return Number(args[i++]);
32663 case '%j':
32664 try {
32665 return JSON.stringify(args[i++]);
32666 } catch (_) {
32667 return '[Circular]';
32668 }
32669 default:
32670 return x;
32671 }
32672 });
32673 for (var x = args[i]; i < len; x = args[++i]) {
32674 if (isNull(x) || !isObject(x)) {
32675 str += ' ' + x;
32676 } else {
32677 str += ' ' + inspect(x);
32678 }
32679 }
32680 return str;
32681 };
32682
32683
32684 // Mark that a method should not be used.
32685 // Returns a modified function which warns once by default.
32686 // If --no-deprecation is set, then it is a no-op.
32687 exports.deprecate = function(fn, msg) {
32688 // Allow for deprecating things in the process of starting up.
32689 if (isUndefined(global.process)) {
32690 return function() {
32691 return exports.deprecate(fn, msg).apply(this, arguments);
32692 };
32693 }
32694
32695 if (process.noDeprecation === true) {
32696 return fn;
32697 }
32698
32699 var warned = false;
32700 function deprecated() {
32701 if (!warned) {
32702 if (process.throwDeprecation) {
32703 throw new Error(msg);
32704 } else if (process.traceDeprecation) {
32705 console.trace(msg);
32706 } else {
32707 console.error(msg);
32708 }
32709 warned = true;
32710 }
32711 return fn.apply(this, arguments);
32712 }
32713
32714 return deprecated;
32715 };
32716
32717
32718 var debugs = {};
32719 var debugEnviron;
32720 exports.debuglog = function(set) {
32721 if (isUndefined(debugEnviron))
32722 debugEnviron = process.env.NODE_DEBUG || '';
32723 set = set.toUpperCase();
32724 if (!debugs[set]) {
32725 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
32726 var pid = process.pid;
32727 debugs[set] = function() {
32728 var msg = exports.format.apply(exports, arguments);
32729 console.error('%s %d: %s', set, pid, msg);
32730 };
32731 } else {
32732 debugs[set] = function() {};
32733 }
32734 }
32735 return debugs[set];
32736 };
32737
32738
32739 /**
32740 * Echos the value of a value. Trys to print the value out
32741 * in the best way possible given the different types.
32742 *
32743 * @param {Object} obj The object to print out.
32744 * @param {Object} opts Optional options object that alters the output.
32745 */
32746 /* legacy: obj, showHidden, depth, colors*/
32747 function inspect(obj, opts) {
32748 // default options
32749 var ctx = {
32750 seen: [],
32751 stylize: stylizeNoColor
32752 };
32753 // legacy...
32754 if (arguments.length >= 3) ctx.depth = arguments[2];
32755 if (arguments.length >= 4) ctx.colors = arguments[3];
32756 if (isBoolean(opts)) {
32757 // legacy...
32758 ctx.showHidden = opts;
32759 } else if (opts) {
32760 // got an "options" object
32761 exports._extend(ctx, opts);
32762 }
32763 // set default options
32764 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
32765 if (isUndefined(ctx.depth)) ctx.depth = 2;
32766 if (isUndefined(ctx.colors)) ctx.colors = false;
32767 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
32768 if (ctx.colors) ctx.stylize = stylizeWithColor;
32769 return formatValue(ctx, obj, ctx.depth);
32770 }
32771 exports.inspect = inspect;
32772
32773
32774 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
32775 inspect.colors = {
32776 'bold' : [1, 22],
32777 'italic' : [3, 23],
32778 'underline' : [4, 24],
32779 'inverse' : [7, 27],
32780 'white' : [37, 39],
32781 'grey' : [90, 39],
32782 'black' : [30, 39],
32783 'blue' : [34, 39],
32784 'cyan' : [36, 39],
32785 'green' : [32, 39],
32786 'magenta' : [35, 39],
32787 'red' : [31, 39],
32788 'yellow' : [33, 39]
32789 };
32790
32791 // Don't use 'blue' not visible on cmd.exe
32792 inspect.styles = {
32793 'special': 'cyan',
32794 'number': 'yellow',
32795 'boolean': 'yellow',
32796 'undefined': 'grey',
32797 'null': 'bold',
32798 'string': 'green',
32799 'date': 'magenta',
32800 // "name": intentionally not styling
32801 'regexp': 'red'
32802 };
32803
32804
32805 function stylizeWithColor(str, styleType) {
32806 var style = inspect.styles[styleType];
32807
32808 if (style) {
32809 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
32810 '\u001b[' + inspect.colors[style][1] + 'm';
32811 } else {
32812 return str;
32813 }
32814 }
32815
32816
32817 function stylizeNoColor(str, styleType) {
32818 return str;
32819 }
32820
32821
32822 function arrayToHash(array) {
32823 var hash = {};
32824
32825 array.forEach(function(val, idx) {
32826 hash[val] = true;
32827 });
32828
32829 return hash;
32830 }
32831
32832
32833 function formatValue(ctx, value, recurseTimes) {
32834 // Provide a hook for user-specified inspect functions.
32835 // Check that value is an object with an inspect function on it
32836 if (ctx.customInspect &&
32837 value &&
32838 isFunction(value.inspect) &&
32839 // Filter out the util module, it's inspect function is special
32840 value.inspect !== exports.inspect &&
32841 // Also filter out any prototype objects using the circular check.
32842 !(value.constructor && value.constructor.prototype === value)) {
32843 var ret = value.inspect(recurseTimes, ctx);
32844 if (!isString(ret)) {
32845 ret = formatValue(ctx, ret, recurseTimes);
32846 }
32847 return ret;
32848 }
32849
32850 // Primitive types cannot have properties
32851 var primitive = formatPrimitive(ctx, value);
32852 if (primitive) {
32853 return primitive;
32854 }
32855
32856 // Look up the keys of the object.
32857 var keys = Object.keys(value);
32858 var visibleKeys = arrayToHash(keys);
32859
32860 if (ctx.showHidden) {
32861 keys = Object.getOwnPropertyNames(value);
32862 }
32863
32864 // IE doesn't make error fields non-enumerable
32865 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
32866 if (isError(value)
32867 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
32868 return formatError(value);
32869 }
32870
32871 // Some type of object without properties can be shortcutted.
32872 if (keys.length === 0) {
32873 if (isFunction(value)) {
32874 var name = value.name ? ': ' + value.name : '';
32875 return ctx.stylize('[Function' + name + ']', 'special');
32876 }
32877 if (isRegExp(value)) {
32878 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
32879 }
32880 if (isDate(value)) {
32881 return ctx.stylize(Date.prototype.toString.call(value), 'date');
32882 }
32883 if (isError(value)) {
32884 return formatError(value);
32885 }
32886 }
32887
32888 var base = '', array = false, braces = ['{', '}'];
32889
32890 // Make Array say that they are Array
32891 if (isArray(value)) {
32892 array = true;
32893 braces = ['[', ']'];
32894 }
32895
32896 // Make functions say that they are functions
32897 if (isFunction(value)) {
32898 var n = value.name ? ': ' + value.name : '';
32899 base = ' [Function' + n + ']';
32900 }
32901
32902 // Make RegExps say that they are RegExps
32903 if (isRegExp(value)) {
32904 base = ' ' + RegExp.prototype.toString.call(value);
32905 }
32906
32907 // Make dates with properties first say the date
32908 if (isDate(value)) {
32909 base = ' ' + Date.prototype.toUTCString.call(value);
32910 }
32911
32912 // Make error with message first say the error
32913 if (isError(value)) {
32914 base = ' ' + formatError(value);
32915 }
32916
32917 if (keys.length === 0 && (!array || value.length == 0)) {
32918 return braces[0] + base + braces[1];
32919 }
32920
32921 if (recurseTimes < 0) {
32922 if (isRegExp(value)) {
32923 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
32924 } else {
32925 return ctx.stylize('[Object]', 'special');
32926 }
32927 }
32928
32929 ctx.seen.push(value);
32930
32931 var output;
32932 if (array) {
32933 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
32934 } else {
32935 output = keys.map(function(key) {
32936 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
32937 });
32938 }
32939
32940 ctx.seen.pop();
32941
32942 return reduceToSingleString(output, base, braces);
32943 }
32944
32945
32946 function formatPrimitive(ctx, value) {
32947 if (isUndefined(value))
32948 return ctx.stylize('undefined', 'undefined');
32949 if (isString(value)) {
32950 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
32951 .replace(/'/g, "\\'")
32952 .replace(/\\"/g, '"') + '\'';
32953 return ctx.stylize(simple, 'string');
32954 }
32955 if (isNumber(value))
32956 return ctx.stylize('' + value, 'number');
32957 if (isBoolean(value))
32958 return ctx.stylize('' + value, 'boolean');
32959 // For some reason typeof null is "object", so special case here.
32960 if (isNull(value))
32961 return ctx.stylize('null', 'null');
32962 }
32963
32964
32965 function formatError(value) {
32966 return '[' + Error.prototype.toString.call(value) + ']';
32967 }
32968
32969
32970 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
32971 var output = [];
32972 for (var i = 0, l = value.length; i < l; ++i) {
32973 if (hasOwnProperty(value, String(i))) {
32974 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
32975 String(i), true));
32976 } else {
32977 output.push('');
32978 }
32979 }
32980 keys.forEach(function(key) {
32981 if (!key.match(/^\d+$/)) {
32982 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
32983 key, true));
32984 }
32985 });
32986 return output;
32987 }
32988
32989
32990 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
32991 var name, str, desc;
32992 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
32993 if (desc.get) {
32994 if (desc.set) {
32995 str = ctx.stylize('[Getter/Setter]', 'special');
32996 } else {
32997 str = ctx.stylize('[Getter]', 'special');
32998 }
32999 } else {
33000 if (desc.set) {
33001 str = ctx.stylize('[Setter]', 'special');
33002 }
33003 }
33004 if (!hasOwnProperty(visibleKeys, key)) {
33005 name = '[' + key + ']';
33006 }
33007 if (!str) {
33008 if (ctx.seen.indexOf(desc.value) < 0) {
33009 if (isNull(recurseTimes)) {
33010 str = formatValue(ctx, desc.value, null);
33011 } else {
33012 str = formatValue(ctx, desc.value, recurseTimes - 1);
33013 }
33014 if (str.indexOf('\n') > -1) {
33015 if (array) {
33016 str = str.split('\n').map(function(line) {
33017 return ' ' + line;
33018 }).join('\n').substr(2);
33019 } else {
33020 str = '\n' + str.split('\n').map(function(line) {
33021 return ' ' + line;
33022 }).join('\n');
33023 }
33024 }
33025 } else {
33026 str = ctx.stylize('[Circular]', 'special');
33027 }
33028 }
33029 if (isUndefined(name)) {
33030 if (array && key.match(/^\d+$/)) {
33031 return str;
33032 }
33033 name = JSON.stringify('' + key);
33034 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
33035 name = name.substr(1, name.length - 2);
33036 name = ctx.stylize(name, 'name');
33037 } else {
33038 name = name.replace(/'/g, "\\'")
33039 .replace(/\\"/g, '"')
33040 .replace(/(^"|"$)/g, "'");
33041 name = ctx.stylize(name, 'string');
33042 }
33043 }
33044
33045 return name + ': ' + str;
33046 }
33047
33048
33049 function reduceToSingleString(output, base, braces) {
33050 var numLinesEst = 0;
33051 var length = output.reduce(function(prev, cur) {
33052 numLinesEst++;
33053 if (cur.indexOf('\n') >= 0) numLinesEst++;
33054 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
33055 }, 0);
33056
33057 if (length > 60) {
33058 return braces[0] +
33059 (base === '' ? '' : base + '\n ') +
33060 ' ' +
33061 output.join(',\n ') +
33062 ' ' +
33063 braces[1];
33064 }
33065
33066 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
33067 }
33068
33069
33070 // NOTE: These type checking functions intentionally don't use `instanceof`
33071 // because it is fragile and can be easily faked with `Object.create()`.
33072 function isArray(ar) {
33073 return Array.isArray(ar);
33074 }
33075 exports.isArray = isArray;
33076
33077 function isBoolean(arg) {
33078 return typeof arg === 'boolean';
33079 }
33080 exports.isBoolean = isBoolean;
33081
33082 function isNull(arg) {
33083 return arg === null;
33084 }
33085 exports.isNull = isNull;
33086
33087 function isNullOrUndefined(arg) {
33088 return arg == null;
33089 }
33090 exports.isNullOrUndefined = isNullOrUndefined;
33091
33092 function isNumber(arg) {
33093 return typeof arg === 'number';
33094 }
33095 exports.isNumber = isNumber;
33096
33097 function isString(arg) {
33098 return typeof arg === 'string';
33099 }
33100 exports.isString = isString;
33101
33102 function isSymbol(arg) {
33103 return typeof arg === 'symbol';
33104 }
33105 exports.isSymbol = isSymbol;
33106
33107 function isUndefined(arg) {
33108 return arg === void 0;
33109 }
33110 exports.isUndefined = isUndefined;
33111
33112 function isRegExp(re) {
33113 return isObject(re) && objectToString(re) === '[object RegExp]';
33114 }
33115 exports.isRegExp = isRegExp;
33116
33117 function isObject(arg) {
33118 return typeof arg === 'object' && arg !== null;
33119 }
33120 exports.isObject = isObject;
33121
33122 function isDate(d) {
33123 return isObject(d) && objectToString(d) === '[object Date]';
33124 }
33125 exports.isDate = isDate;
33126
33127 function isError(e) {
33128 return isObject(e) &&
33129 (objectToString(e) === '[object Error]' || e instanceof Error);
33130 }
33131 exports.isError = isError;
33132
33133 function isFunction(arg) {
33134 return typeof arg === 'function';
33135 }
33136 exports.isFunction = isFunction;
33137
33138 function isPrimitive(arg) {
33139 return arg === null ||
33140 typeof arg === 'boolean' ||
33141 typeof arg === 'number' ||
33142 typeof arg === 'string' ||
33143 typeof arg === 'symbol' || // ES6 symbol
33144 typeof arg === 'undefined';
33145 }
33146 exports.isPrimitive = isPrimitive;
33147
33148 exports.isBuffer = require('./support/isBuffer');
33149
33150 function objectToString(o) {
33151 return Object.prototype.toString.call(o);
33152 }
33153
33154
33155 function pad(n) {
33156 return n < 10 ? '0' + n.toString(10) : n.toString(10);
33157 }
33158
33159
33160 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
33161 'Oct', 'Nov', 'Dec'];
33162
33163 // 26 Feb 16:19:34
33164 function timestamp() {
33165 var d = new Date();
33166 var time = [pad(d.getHours()),
33167 pad(d.getMinutes()),
33168 pad(d.getSeconds())].join(':');
33169 return [d.getDate(), months[d.getMonth()], time].join(' ');
33170 }
33171
33172
33173 // log is just a thin wrapper to console.log that prepends a timestamp
33174 exports.log = function() {
33175 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
33176 };
33177
33178
33179 /**
33180 * Inherit the prototype methods from one constructor into another.
33181 *
33182 * The Function.prototype.inherits from lang.js rewritten as a standalone
33183 * function (not on Function.prototype). NOTE: If this file is to be loaded
33184 * during bootstrapping this function needs to be rewritten using some native
33185 * functions as prototype setup using normal JavaScript does not work as
33186 * expected during bootstrapping (see mirror.js in r114903).
33187 *
33188 * @param {function} ctor Constructor function which needs to inherit the
33189 * prototype.
33190 * @param {function} superCtor Constructor function to inherit prototype from.
33191 */
33192 exports.inherits = require('inherits');
33193
33194 exports._extend = function(origin, add) {
33195 // Don't do anything if add isn't an object
33196 if (!add || !isObject(add)) return origin;
33197
33198 var keys = Object.keys(add);
33199 var i = keys.length;
33200 while (i--) {
33201 origin[keys[i]] = add[keys[i]];
33202 }
33203 return origin;
33204 };
33205
33206 function hasOwnProperty(obj, prop) {
33207 return Object.prototype.hasOwnProperty.call(obj, prop);
33208 }
33209
33210 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
33211 },{"./support/isBuffer":32,"_process":13,"inherits":31}],34:[function(require,module,exports){
33212 bitcoin = {
33213 base58: require('bs58'),
33214 bitcoin: require('bitcoinjs-lib'),
33215 ecurve: require('ecurve'),
33216 BigInteger: require('bigi'),
33217 Buffer: require('buffer'),
33218 elliptic: require('elliptic'),
33219 bs58check: require('bs58check'),
33220 }
33221
33222 module.exports = bitcoin;
33223
33224 },{"bigi":39,"bitcoinjs-lib":52,"bs58":83,"bs58check":85,"buffer":5,"ecurve":94,"elliptic":97}],35:[function(require,module,exports){
33225 // base-x encoding
33226 // Forked from https://github.com/cryptocoinjs/bs58
33227 // Originally written by Mike Hearn for BitcoinJ
33228 // Copyright (c) 2011 Google Inc
33229 // Ported to JavaScript by Stefan Thomas
33230 // Merged Buffer refactorings from base58-native by Stephen Pair
33231 // Copyright (c) 2013 BitPay Inc
33232
33233 var Buffer = require('safe-buffer').Buffer
33234
33235 module.exports = function base (ALPHABET) {
33236 var ALPHABET_MAP = {}
33237 var BASE = ALPHABET.length
33238 var LEADER = ALPHABET.charAt(0)
33239
33240 // pre-compute lookup table
33241 for (var z = 0; z < ALPHABET.length; z++) {
33242 var x = ALPHABET.charAt(z)
33243
33244 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
33245 ALPHABET_MAP[x] = z
33246 }
33247
33248 function encode (source) {
33249 if (source.length === 0) return ''
33250
33251 var digits = [0]
33252 for (var i = 0; i < source.length; ++i) {
33253 for (var j = 0, carry = source[i]; j < digits.length; ++j) {
33254 carry += digits[j] << 8
33255 digits[j] = carry % BASE
33256 carry = (carry / BASE) | 0
33257 }
33258
33259 while (carry > 0) {
33260 digits.push(carry % BASE)
33261 carry = (carry / BASE) | 0
33262 }
33263 }
33264
33265 var string = ''
33266
33267 // deal with leading zeros
33268 for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += ALPHABET[0]
33269 // convert digits to a string
33270 for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]
33271
33272 return string
33273 }
33274
33275 function decodeUnsafe (string) {
33276 if (string.length === 0) return Buffer.allocUnsafe(0)
33277
33278 var bytes = [0]
33279 for (var i = 0; i < string.length; i++) {
33280 var value = ALPHABET_MAP[string[i]]
33281 if (value === undefined) return
33282
33283 for (var j = 0, carry = value; j < bytes.length; ++j) {
33284 carry += bytes[j] * BASE
33285 bytes[j] = carry & 0xff
33286 carry >>= 8
33287 }
33288
33289 while (carry > 0) {
33290 bytes.push(carry & 0xff)
33291 carry >>= 8
33292 }
33293 }
33294
33295 // deal with leading zeros
33296 for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {
33297 bytes.push(0)
33298 }
33299
33300 return Buffer.from(bytes.reverse())
33301 }
33302
33303 function decode (string) {
33304 var buffer = decodeUnsafe(string)
33305 if (buffer) return buffer
33306
33307 throw new Error('Non-base' + BASE + ' character')
33308 }
33309
33310 return {
33311 encode: encode,
33312 decodeUnsafe: decodeUnsafe,
33313 decode: decode
33314 }
33315 }
33316
33317 },{"safe-buffer":128}],36:[function(require,module,exports){
33318 'use strict'
33319 let ALPHABET = 'qpzry9x8gf2tvdw0s3jn54khce6mua7l'
33320
33321 // pre-compute lookup table
33322 let ALPHABET_MAP = {}
33323 for (let z = 0; z < ALPHABET.length; z++) {
33324 let x = ALPHABET.charAt(z)
33325
33326 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
33327 ALPHABET_MAP[x] = z
33328 }
33329
33330 function polymodStep (pre) {
33331 let b = pre >> 25
33332 return ((pre & 0x1FFFFFF) << 5) ^
33333 (-((b >> 0) & 1) & 0x3b6a57b2) ^
33334 (-((b >> 1) & 1) & 0x26508e6d) ^
33335 (-((b >> 2) & 1) & 0x1ea119fa) ^
33336 (-((b >> 3) & 1) & 0x3d4233dd) ^
33337 (-((b >> 4) & 1) & 0x2a1462b3)
33338 }
33339
33340 function prefixChk (prefix) {
33341 let chk = 1
33342 for (let i = 0; i < prefix.length; ++i) {
33343 let c = prefix.charCodeAt(i)
33344 if (c < 33 || c > 126) throw new Error('Invalid prefix (' + prefix + ')')
33345
33346 chk = polymodStep(chk) ^ (c >> 5)
33347 }
33348 chk = polymodStep(chk)
33349
33350 for (let i = 0; i < prefix.length; ++i) {
33351 let v = prefix.charCodeAt(i)
33352 chk = polymodStep(chk) ^ (v & 0x1f)
33353 }
33354 return chk
33355 }
33356
33357 function encode (prefix, words) {
33358 // too long?
33359 if ((prefix.length + 7 + words.length) > 90) throw new TypeError('Exceeds Bech32 maximum length')
33360 prefix = prefix.toLowerCase()
33361
33362 // determine chk mod
33363 let chk = prefixChk(prefix)
33364 let result = prefix + '1'
33365 for (let i = 0; i < words.length; ++i) {
33366 let x = words[i]
33367 if ((x >> 5) !== 0) throw new Error('Non 5-bit word')
33368
33369 chk = polymodStep(chk) ^ x
33370 result += ALPHABET.charAt(x)
33371 }
33372
33373 for (let i = 0; i < 6; ++i) {
33374 chk = polymodStep(chk)
33375 }
33376 chk ^= 1
33377
33378 for (let i = 0; i < 6; ++i) {
33379 let v = (chk >> ((5 - i) * 5)) & 0x1f
33380 result += ALPHABET.charAt(v)
33381 }
33382
33383 return result
33384 }
33385
33386 function decode (str) {
33387 if (str.length < 8) throw new TypeError(str + ' too short')
33388 if (str.length > 90) throw new TypeError(str + ' too long')
33389
33390 // don't allow mixed case
33391 let lowered = str.toLowerCase()
33392 let uppered = str.toUpperCase()
33393 if (str !== lowered && str !== uppered) throw new Error('Mixed-case string ' + str)
33394 str = lowered
33395
33396 let split = str.lastIndexOf('1')
33397 if (split === 0) throw new Error('Missing prefix for ' + str)
33398
33399 let prefix = str.slice(0, split)
33400 let wordChars = str.slice(split + 1)
33401 if (wordChars.length < 6) throw new Error('Data too short')
33402
33403 let chk = prefixChk(prefix)
33404 let words = []
33405 for (let i = 0; i < wordChars.length; ++i) {
33406 let c = wordChars.charAt(i)
33407 let v = ALPHABET_MAP[c]
33408 if (v === undefined) throw new Error('Unknown character ' + c)
33409 chk = polymodStep(chk) ^ v
33410
33411 // not in the checksum?
33412 if (i + 6 >= wordChars.length) continue
33413 words.push(v)
33414 }
33415
33416 if (chk !== 1) throw new Error('Invalid checksum for ' + str)
33417 return { prefix, words }
33418 }
33419
33420 function convert (data, inBits, outBits, pad) {
33421 let value = 0
33422 let bits = 0
33423 let maxV = (1 << outBits) - 1
33424
33425 let result = []
33426 for (let i = 0; i < data.length; ++i) {
33427 value = (value << inBits) | data[i]
33428 bits += inBits
33429
33430 while (bits >= outBits) {
33431 bits -= outBits
33432 result.push((value >> bits) & maxV)
33433 }
33434 }
33435
33436 if (pad) {
33437 if (bits > 0) {
33438 result.push((value << (outBits - bits)) & maxV)
33439 }
33440 } else {
33441 if (bits >= inBits) throw new Error('Excess padding')
33442 if ((value << (outBits - bits)) & maxV) throw new Error('Non-zero padding')
33443 }
33444
33445 return result
33446 }
33447
33448 function toWords (bytes) {
33449 return convert(bytes, 8, 5, true)
33450 }
33451
33452 function fromWords (words) {
33453 return convert(words, 5, 8, false)
33454 }
33455
33456 module.exports = { decode, encode, toWords, fromWords }
33457
33458 },{}],37:[function(require,module,exports){
33459 // (public) Constructor
33460 function BigInteger(a, b, c) {
33461 if (!(this instanceof BigInteger))
33462 return new BigInteger(a, b, c)
33463
33464 if (a != null) {
33465 if ("number" == typeof a) this.fromNumber(a, b, c)
33466 else if (b == null && "string" != typeof a) this.fromString(a, 256)
33467 else this.fromString(a, b)
33468 }
33469 }
33470
33471 var proto = BigInteger.prototype
33472
33473 // duck-typed isBigInteger
33474 proto.__bigi = require('../package.json').version
33475 BigInteger.isBigInteger = function (obj, check_ver) {
33476 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
33477 }
33478
33479 // Bits per digit
33480 var dbits
33481
33482 // am: Compute w_j += (x*this_i), propagate carries,
33483 // c is initial carry, returns final carry.
33484 // c < 3*dvalue, x < 2*dvalue, this_i < dvalue
33485 // We need to select the fastest one that works in this environment.
33486
33487 // am1: use a single mult and divide to get the high bits,
33488 // max digit bits should be 26 because
33489 // max internal value = 2*dvalue^2-2*dvalue (< 2^53)
33490 function am1(i, x, w, j, c, n) {
33491 while (--n >= 0) {
33492 var v = x * this[i++] + w[j] + c
33493 c = Math.floor(v / 0x4000000)
33494 w[j++] = v & 0x3ffffff
33495 }
33496 return c
33497 }
33498 // am2 avoids a big mult-and-extract completely.
33499 // Max digit bits should be <= 30 because we do bitwise ops
33500 // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
33501 function am2(i, x, w, j, c, n) {
33502 var xl = x & 0x7fff,
33503 xh = x >> 15
33504 while (--n >= 0) {
33505 var l = this[i] & 0x7fff
33506 var h = this[i++] >> 15
33507 var m = xh * l + h * xl
33508 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
33509 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
33510 w[j++] = l & 0x3fffffff
33511 }
33512 return c
33513 }
33514 // Alternately, set max digit bits to 28 since some
33515 // browsers slow down when dealing with 32-bit numbers.
33516 function am3(i, x, w, j, c, n) {
33517 var xl = x & 0x3fff,
33518 xh = x >> 14
33519 while (--n >= 0) {
33520 var l = this[i] & 0x3fff
33521 var h = this[i++] >> 14
33522 var m = xh * l + h * xl
33523 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
33524 c = (l >> 28) + (m >> 14) + xh * h
33525 w[j++] = l & 0xfffffff
33526 }
33527 return c
33528 }
33529
33530 // wtf?
33531 BigInteger.prototype.am = am1
33532 dbits = 26
33533
33534 BigInteger.prototype.DB = dbits
33535 BigInteger.prototype.DM = ((1 << dbits) - 1)
33536 var DV = BigInteger.prototype.DV = (1 << dbits)
33537
33538 var BI_FP = 52
33539 BigInteger.prototype.FV = Math.pow(2, BI_FP)
33540 BigInteger.prototype.F1 = BI_FP - dbits
33541 BigInteger.prototype.F2 = 2 * dbits - BI_FP
33542
33543 // Digit conversions
33544 var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
33545 var BI_RC = new Array()
33546 var rr, vv
33547 rr = "0".charCodeAt(0)
33548 for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
33549 rr = "a".charCodeAt(0)
33550 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
33551 rr = "A".charCodeAt(0)
33552 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
33553
33554 function int2char(n) {
33555 return BI_RM.charAt(n)
33556 }
33557
33558 function intAt(s, i) {
33559 var c = BI_RC[s.charCodeAt(i)]
33560 return (c == null) ? -1 : c
33561 }
33562
33563 // (protected) copy this to r
33564 function bnpCopyTo(r) {
33565 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
33566 r.t = this.t
33567 r.s = this.s
33568 }
33569
33570 // (protected) set from integer value x, -DV <= x < DV
33571 function bnpFromInt(x) {
33572 this.t = 1
33573 this.s = (x < 0) ? -1 : 0
33574 if (x > 0) this[0] = x
33575 else if (x < -1) this[0] = x + DV
33576 else this.t = 0
33577 }
33578
33579 // return bigint initialized to value
33580 function nbv(i) {
33581 var r = new BigInteger()
33582 r.fromInt(i)
33583 return r
33584 }
33585
33586 // (protected) set from string and radix
33587 function bnpFromString(s, b) {
33588 var self = this
33589
33590 var k
33591 if (b == 16) k = 4
33592 else if (b == 8) k = 3
33593 else if (b == 256) k = 8; // byte array
33594 else if (b == 2) k = 1
33595 else if (b == 32) k = 5
33596 else if (b == 4) k = 2
33597 else {
33598 self.fromRadix(s, b)
33599 return
33600 }
33601 self.t = 0
33602 self.s = 0
33603 var i = s.length,
33604 mi = false,
33605 sh = 0
33606 while (--i >= 0) {
33607 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
33608 if (x < 0) {
33609 if (s.charAt(i) == "-") mi = true
33610 continue
33611 }
33612 mi = false
33613 if (sh == 0)
33614 self[self.t++] = x
33615 else if (sh + k > self.DB) {
33616 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
33617 self[self.t++] = (x >> (self.DB - sh))
33618 } else
33619 self[self.t - 1] |= x << sh
33620 sh += k
33621 if (sh >= self.DB) sh -= self.DB
33622 }
33623 if (k == 8 && (s[0] & 0x80) != 0) {
33624 self.s = -1
33625 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
33626 }
33627 self.clamp()
33628 if (mi) BigInteger.ZERO.subTo(self, self)
33629 }
33630
33631 // (protected) clamp off excess high words
33632 function bnpClamp() {
33633 var c = this.s & this.DM
33634 while (this.t > 0 && this[this.t - 1] == c)--this.t
33635 }
33636
33637 // (public) return string representation in given radix
33638 function bnToString(b) {
33639 var self = this
33640 if (self.s < 0) return "-" + self.negate()
33641 .toString(b)
33642 var k
33643 if (b == 16) k = 4
33644 else if (b == 8) k = 3
33645 else if (b == 2) k = 1
33646 else if (b == 32) k = 5
33647 else if (b == 4) k = 2
33648 else return self.toRadix(b)
33649 var km = (1 << k) - 1,
33650 d, m = false,
33651 r = "",
33652 i = self.t
33653 var p = self.DB - (i * self.DB) % k
33654 if (i-- > 0) {
33655 if (p < self.DB && (d = self[i] >> p) > 0) {
33656 m = true
33657 r = int2char(d)
33658 }
33659 while (i >= 0) {
33660 if (p < k) {
33661 d = (self[i] & ((1 << p) - 1)) << (k - p)
33662 d |= self[--i] >> (p += self.DB - k)
33663 } else {
33664 d = (self[i] >> (p -= k)) & km
33665 if (p <= 0) {
33666 p += self.DB
33667 --i
33668 }
33669 }
33670 if (d > 0) m = true
33671 if (m) r += int2char(d)
33672 }
33673 }
33674 return m ? r : "0"
33675 }
33676
33677 // (public) -this
33678 function bnNegate() {
33679 var r = new BigInteger()
33680 BigInteger.ZERO.subTo(this, r)
33681 return r
33682 }
33683
33684 // (public) |this|
33685 function bnAbs() {
33686 return (this.s < 0) ? this.negate() : this
33687 }
33688
33689 // (public) return + if this > a, - if this < a, 0 if equal
33690 function bnCompareTo(a) {
33691 var r = this.s - a.s
33692 if (r != 0) return r
33693 var i = this.t
33694 r = i - a.t
33695 if (r != 0) return (this.s < 0) ? -r : r
33696 while (--i >= 0)
33697 if ((r = this[i] - a[i]) != 0) return r
33698 return 0
33699 }
33700
33701 // returns bit length of the integer x
33702 function nbits(x) {
33703 var r = 1,
33704 t
33705 if ((t = x >>> 16) != 0) {
33706 x = t
33707 r += 16
33708 }
33709 if ((t = x >> 8) != 0) {
33710 x = t
33711 r += 8
33712 }
33713 if ((t = x >> 4) != 0) {
33714 x = t
33715 r += 4
33716 }
33717 if ((t = x >> 2) != 0) {
33718 x = t
33719 r += 2
33720 }
33721 if ((t = x >> 1) != 0) {
33722 x = t
33723 r += 1
33724 }
33725 return r
33726 }
33727
33728 // (public) return the number of bits in "this"
33729 function bnBitLength() {
33730 if (this.t <= 0) return 0
33731 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
33732 }
33733
33734 // (public) return the number of bytes in "this"
33735 function bnByteLength() {
33736 return this.bitLength() >> 3
33737 }
33738
33739 // (protected) r = this << n*DB
33740 function bnpDLShiftTo(n, r) {
33741 var i
33742 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
33743 for (i = n - 1; i >= 0; --i) r[i] = 0
33744 r.t = this.t + n
33745 r.s = this.s
33746 }
33747
33748 // (protected) r = this >> n*DB
33749 function bnpDRShiftTo(n, r) {
33750 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
33751 r.t = Math.max(this.t - n, 0)
33752 r.s = this.s
33753 }
33754
33755 // (protected) r = this << n
33756 function bnpLShiftTo(n, r) {
33757 var self = this
33758 var bs = n % self.DB
33759 var cbs = self.DB - bs
33760 var bm = (1 << cbs) - 1
33761 var ds = Math.floor(n / self.DB),
33762 c = (self.s << bs) & self.DM,
33763 i
33764 for (i = self.t - 1; i >= 0; --i) {
33765 r[i + ds + 1] = (self[i] >> cbs) | c
33766 c = (self[i] & bm) << bs
33767 }
33768 for (i = ds - 1; i >= 0; --i) r[i] = 0
33769 r[ds] = c
33770 r.t = self.t + ds + 1
33771 r.s = self.s
33772 r.clamp()
33773 }
33774
33775 // (protected) r = this >> n
33776 function bnpRShiftTo(n, r) {
33777 var self = this
33778 r.s = self.s
33779 var ds = Math.floor(n / self.DB)
33780 if (ds >= self.t) {
33781 r.t = 0
33782 return
33783 }
33784 var bs = n % self.DB
33785 var cbs = self.DB - bs
33786 var bm = (1 << bs) - 1
33787 r[0] = self[ds] >> bs
33788 for (var i = ds + 1; i < self.t; ++i) {
33789 r[i - ds - 1] |= (self[i] & bm) << cbs
33790 r[i - ds] = self[i] >> bs
33791 }
33792 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
33793 r.t = self.t - ds
33794 r.clamp()
33795 }
33796
33797 // (protected) r = this - a
33798 function bnpSubTo(a, r) {
33799 var self = this
33800 var i = 0,
33801 c = 0,
33802 m = Math.min(a.t, self.t)
33803 while (i < m) {
33804 c += self[i] - a[i]
33805 r[i++] = c & self.DM
33806 c >>= self.DB
33807 }
33808 if (a.t < self.t) {
33809 c -= a.s
33810 while (i < self.t) {
33811 c += self[i]
33812 r[i++] = c & self.DM
33813 c >>= self.DB
33814 }
33815 c += self.s
33816 } else {
33817 c += self.s
33818 while (i < a.t) {
33819 c -= a[i]
33820 r[i++] = c & self.DM
33821 c >>= self.DB
33822 }
33823 c -= a.s
33824 }
33825 r.s = (c < 0) ? -1 : 0
33826 if (c < -1) r[i++] = self.DV + c
33827 else if (c > 0) r[i++] = c
33828 r.t = i
33829 r.clamp()
33830 }
33831
33832 // (protected) r = this * a, r != this,a (HAC 14.12)
33833 // "this" should be the larger one if appropriate.
33834 function bnpMultiplyTo(a, r) {
33835 var x = this.abs(),
33836 y = a.abs()
33837 var i = x.t
33838 r.t = i + y.t
33839 while (--i >= 0) r[i] = 0
33840 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
33841 r.s = 0
33842 r.clamp()
33843 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
33844 }
33845
33846 // (protected) r = this^2, r != this (HAC 14.16)
33847 function bnpSquareTo(r) {
33848 var x = this.abs()
33849 var i = r.t = 2 * x.t
33850 while (--i >= 0) r[i] = 0
33851 for (i = 0; i < x.t - 1; ++i) {
33852 var c = x.am(i, x[i], r, 2 * i, 0, 1)
33853 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
33854 r[i + x.t] -= x.DV
33855 r[i + x.t + 1] = 1
33856 }
33857 }
33858 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
33859 r.s = 0
33860 r.clamp()
33861 }
33862
33863 // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
33864 // r != q, this != m. q or r may be null.
33865 function bnpDivRemTo(m, q, r) {
33866 var self = this
33867 var pm = m.abs()
33868 if (pm.t <= 0) return
33869 var pt = self.abs()
33870 if (pt.t < pm.t) {
33871 if (q != null) q.fromInt(0)
33872 if (r != null) self.copyTo(r)
33873 return
33874 }
33875 if (r == null) r = new BigInteger()
33876 var y = new BigInteger(),
33877 ts = self.s,
33878 ms = m.s
33879 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
33880 if (nsh > 0) {
33881 pm.lShiftTo(nsh, y)
33882 pt.lShiftTo(nsh, r)
33883 } else {
33884 pm.copyTo(y)
33885 pt.copyTo(r)
33886 }
33887 var ys = y.t
33888 var y0 = y[ys - 1]
33889 if (y0 == 0) return
33890 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
33891 var d1 = self.FV / yt,
33892 d2 = (1 << self.F1) / yt,
33893 e = 1 << self.F2
33894 var i = r.t,
33895 j = i - ys,
33896 t = (q == null) ? new BigInteger() : q
33897 y.dlShiftTo(j, t)
33898 if (r.compareTo(t) >= 0) {
33899 r[r.t++] = 1
33900 r.subTo(t, r)
33901 }
33902 BigInteger.ONE.dlShiftTo(ys, t)
33903 t.subTo(y, y); // "negative" y so we can replace sub with am later
33904 while (y.t < ys) y[y.t++] = 0
33905 while (--j >= 0) {
33906 // Estimate quotient digit
33907 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
33908 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
33909 y.dlShiftTo(j, t)
33910 r.subTo(t, r)
33911 while (r[i] < --qd) r.subTo(t, r)
33912 }
33913 }
33914 if (q != null) {
33915 r.drShiftTo(ys, q)
33916 if (ts != ms) BigInteger.ZERO.subTo(q, q)
33917 }
33918 r.t = ys
33919 r.clamp()
33920 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
33921 if (ts < 0) BigInteger.ZERO.subTo(r, r)
33922 }
33923
33924 // (public) this mod a
33925 function bnMod(a) {
33926 var r = new BigInteger()
33927 this.abs()
33928 .divRemTo(a, null, r)
33929 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
33930 return r
33931 }
33932
33933 // Modular reduction using "classic" algorithm
33934 function Classic(m) {
33935 this.m = m
33936 }
33937
33938 function cConvert(x) {
33939 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
33940 else return x
33941 }
33942
33943 function cRevert(x) {
33944 return x
33945 }
33946
33947 function cReduce(x) {
33948 x.divRemTo(this.m, null, x)
33949 }
33950
33951 function cMulTo(x, y, r) {
33952 x.multiplyTo(y, r)
33953 this.reduce(r)
33954 }
33955
33956 function cSqrTo(x, r) {
33957 x.squareTo(r)
33958 this.reduce(r)
33959 }
33960
33961 Classic.prototype.convert = cConvert
33962 Classic.prototype.revert = cRevert
33963 Classic.prototype.reduce = cReduce
33964 Classic.prototype.mulTo = cMulTo
33965 Classic.prototype.sqrTo = cSqrTo
33966
33967 // (protected) return "-1/this % 2^DB"; useful for Mont. reduction
33968 // justification:
33969 // xy == 1 (mod m)
33970 // xy = 1+km
33971 // xy(2-xy) = (1+km)(1-km)
33972 // x[y(2-xy)] = 1-k^2m^2
33973 // x[y(2-xy)] == 1 (mod m^2)
33974 // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
33975 // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
33976 // JS multiply "overflows" differently from C/C++, so care is needed here.
33977 function bnpInvDigit() {
33978 if (this.t < 1) return 0
33979 var x = this[0]
33980 if ((x & 1) == 0) return 0
33981 var y = x & 3; // y == 1/x mod 2^2
33982 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
33983 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
33984 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
33985 // last step - calculate inverse mod DV directly
33986 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
33987 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
33988 // we really want the negative inverse, and -DV < y < DV
33989 return (y > 0) ? this.DV - y : -y
33990 }
33991
33992 // Montgomery reduction
33993 function Montgomery(m) {
33994 this.m = m
33995 this.mp = m.invDigit()
33996 this.mpl = this.mp & 0x7fff
33997 this.mph = this.mp >> 15
33998 this.um = (1 << (m.DB - 15)) - 1
33999 this.mt2 = 2 * m.t
34000 }
34001
34002 // xR mod m
34003 function montConvert(x) {
34004 var r = new BigInteger()
34005 x.abs()
34006 .dlShiftTo(this.m.t, r)
34007 r.divRemTo(this.m, null, r)
34008 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
34009 return r
34010 }
34011
34012 // x/R mod m
34013 function montRevert(x) {
34014 var r = new BigInteger()
34015 x.copyTo(r)
34016 this.reduce(r)
34017 return r
34018 }
34019
34020 // x = x/R mod m (HAC 14.32)
34021 function montReduce(x) {
34022 while (x.t <= this.mt2) // pad x so am has enough room later
34023 x[x.t++] = 0
34024 for (var i = 0; i < this.m.t; ++i) {
34025 // faster way of calculating u0 = x[i]*mp mod DV
34026 var j = x[i] & 0x7fff
34027 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
34028 // use am to combine the multiply-shift-add into one call
34029 j = i + this.m.t
34030 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
34031 // propagate carry
34032 while (x[j] >= x.DV) {
34033 x[j] -= x.DV
34034 x[++j]++
34035 }
34036 }
34037 x.clamp()
34038 x.drShiftTo(this.m.t, x)
34039 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
34040 }
34041
34042 // r = "x^2/R mod m"; x != r
34043 function montSqrTo(x, r) {
34044 x.squareTo(r)
34045 this.reduce(r)
34046 }
34047
34048 // r = "xy/R mod m"; x,y != r
34049 function montMulTo(x, y, r) {
34050 x.multiplyTo(y, r)
34051 this.reduce(r)
34052 }
34053
34054 Montgomery.prototype.convert = montConvert
34055 Montgomery.prototype.revert = montRevert
34056 Montgomery.prototype.reduce = montReduce
34057 Montgomery.prototype.mulTo = montMulTo
34058 Montgomery.prototype.sqrTo = montSqrTo
34059
34060 // (protected) true iff this is even
34061 function bnpIsEven() {
34062 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
34063 }
34064
34065 // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
34066 function bnpExp(e, z) {
34067 if (e > 0xffffffff || e < 1) return BigInteger.ONE
34068 var r = new BigInteger(),
34069 r2 = new BigInteger(),
34070 g = z.convert(this),
34071 i = nbits(e) - 1
34072 g.copyTo(r)
34073 while (--i >= 0) {
34074 z.sqrTo(r, r2)
34075 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
34076 else {
34077 var t = r
34078 r = r2
34079 r2 = t
34080 }
34081 }
34082 return z.revert(r)
34083 }
34084
34085 // (public) this^e % m, 0 <= e < 2^32
34086 function bnModPowInt(e, m) {
34087 var z
34088 if (e < 256 || m.isEven()) z = new Classic(m)
34089 else z = new Montgomery(m)
34090 return this.exp(e, z)
34091 }
34092
34093 // protected
34094 proto.copyTo = bnpCopyTo
34095 proto.fromInt = bnpFromInt
34096 proto.fromString = bnpFromString
34097 proto.clamp = bnpClamp
34098 proto.dlShiftTo = bnpDLShiftTo
34099 proto.drShiftTo = bnpDRShiftTo
34100 proto.lShiftTo = bnpLShiftTo
34101 proto.rShiftTo = bnpRShiftTo
34102 proto.subTo = bnpSubTo
34103 proto.multiplyTo = bnpMultiplyTo
34104 proto.squareTo = bnpSquareTo
34105 proto.divRemTo = bnpDivRemTo
34106 proto.invDigit = bnpInvDigit
34107 proto.isEven = bnpIsEven
34108 proto.exp = bnpExp
34109
34110 // public
34111 proto.toString = bnToString
34112 proto.negate = bnNegate
34113 proto.abs = bnAbs
34114 proto.compareTo = bnCompareTo
34115 proto.bitLength = bnBitLength
34116 proto.byteLength = bnByteLength
34117 proto.mod = bnMod
34118 proto.modPowInt = bnModPowInt
34119
34120 // (public)
34121 function bnClone() {
34122 var r = new BigInteger()
34123 this.copyTo(r)
34124 return r
34125 }
34126
34127 // (public) return value as integer
34128 function bnIntValue() {
34129 if (this.s < 0) {
34130 if (this.t == 1) return this[0] - this.DV
34131 else if (this.t == 0) return -1
34132 } else if (this.t == 1) return this[0]
34133 else if (this.t == 0) return 0
34134 // assumes 16 < DB < 32
34135 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
34136 }
34137
34138 // (public) return value as byte
34139 function bnByteValue() {
34140 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
34141 }
34142
34143 // (public) return value as short (assumes DB>=16)
34144 function bnShortValue() {
34145 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
34146 }
34147
34148 // (protected) return x s.t. r^x < DV
34149 function bnpChunkSize(r) {
34150 return Math.floor(Math.LN2 * this.DB / Math.log(r))
34151 }
34152
34153 // (public) 0 if this == 0, 1 if this > 0
34154 function bnSigNum() {
34155 if (this.s < 0) return -1
34156 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
34157 else return 1
34158 }
34159
34160 // (protected) convert to radix string
34161 function bnpToRadix(b) {
34162 if (b == null) b = 10
34163 if (this.signum() == 0 || b < 2 || b > 36) return "0"
34164 var cs = this.chunkSize(b)
34165 var a = Math.pow(b, cs)
34166 var d = nbv(a),
34167 y = new BigInteger(),
34168 z = new BigInteger(),
34169 r = ""
34170 this.divRemTo(d, y, z)
34171 while (y.signum() > 0) {
34172 r = (a + z.intValue())
34173 .toString(b)
34174 .substr(1) + r
34175 y.divRemTo(d, y, z)
34176 }
34177 return z.intValue()
34178 .toString(b) + r
34179 }
34180
34181 // (protected) convert from radix string
34182 function bnpFromRadix(s, b) {
34183 var self = this
34184 self.fromInt(0)
34185 if (b == null) b = 10
34186 var cs = self.chunkSize(b)
34187 var d = Math.pow(b, cs),
34188 mi = false,
34189 j = 0,
34190 w = 0
34191 for (var i = 0; i < s.length; ++i) {
34192 var x = intAt(s, i)
34193 if (x < 0) {
34194 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
34195 continue
34196 }
34197 w = b * w + x
34198 if (++j >= cs) {
34199 self.dMultiply(d)
34200 self.dAddOffset(w, 0)
34201 j = 0
34202 w = 0
34203 }
34204 }
34205 if (j > 0) {
34206 self.dMultiply(Math.pow(b, j))
34207 self.dAddOffset(w, 0)
34208 }
34209 if (mi) BigInteger.ZERO.subTo(self, self)
34210 }
34211
34212 // (protected) alternate constructor
34213 function bnpFromNumber(a, b, c) {
34214 var self = this
34215 if ("number" == typeof b) {
34216 // new BigInteger(int,int,RNG)
34217 if (a < 2) self.fromInt(1)
34218 else {
34219 self.fromNumber(a, c)
34220 if (!self.testBit(a - 1)) // force MSB set
34221 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
34222 if (self.isEven()) self.dAddOffset(1, 0); // force odd
34223 while (!self.isProbablePrime(b)) {
34224 self.dAddOffset(2, 0)
34225 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
34226 }
34227 }
34228 } else {
34229 // new BigInteger(int,RNG)
34230 var x = new Array(),
34231 t = a & 7
34232 x.length = (a >> 3) + 1
34233 b.nextBytes(x)
34234 if (t > 0) x[0] &= ((1 << t) - 1)
34235 else x[0] = 0
34236 self.fromString(x, 256)
34237 }
34238 }
34239
34240 // (public) convert to bigendian byte array
34241 function bnToByteArray() {
34242 var self = this
34243 var i = self.t,
34244 r = new Array()
34245 r[0] = self.s
34246 var p = self.DB - (i * self.DB) % 8,
34247 d, k = 0
34248 if (i-- > 0) {
34249 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
34250 r[k++] = d | (self.s << (self.DB - p))
34251 while (i >= 0) {
34252 if (p < 8) {
34253 d = (self[i] & ((1 << p) - 1)) << (8 - p)
34254 d |= self[--i] >> (p += self.DB - 8)
34255 } else {
34256 d = (self[i] >> (p -= 8)) & 0xff
34257 if (p <= 0) {
34258 p += self.DB
34259 --i
34260 }
34261 }
34262 if ((d & 0x80) != 0) d |= -256
34263 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
34264 if (k > 0 || d != self.s) r[k++] = d
34265 }
34266 }
34267 return r
34268 }
34269
34270 function bnEquals(a) {
34271 return (this.compareTo(a) == 0)
34272 }
34273
34274 function bnMin(a) {
34275 return (this.compareTo(a) < 0) ? this : a
34276 }
34277
34278 function bnMax(a) {
34279 return (this.compareTo(a) > 0) ? this : a
34280 }
34281
34282 // (protected) r = this op a (bitwise)
34283 function bnpBitwiseTo(a, op, r) {
34284 var self = this
34285 var i, f, m = Math.min(a.t, self.t)
34286 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
34287 if (a.t < self.t) {
34288 f = a.s & self.DM
34289 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
34290 r.t = self.t
34291 } else {
34292 f = self.s & self.DM
34293 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
34294 r.t = a.t
34295 }
34296 r.s = op(self.s, a.s)
34297 r.clamp()
34298 }
34299
34300 // (public) this & a
34301 function op_and(x, y) {
34302 return x & y
34303 }
34304
34305 function bnAnd(a) {
34306 var r = new BigInteger()
34307 this.bitwiseTo(a, op_and, r)
34308 return r
34309 }
34310
34311 // (public) this | a
34312 function op_or(x, y) {
34313 return x | y
34314 }
34315
34316 function bnOr(a) {
34317 var r = new BigInteger()
34318 this.bitwiseTo(a, op_or, r)
34319 return r
34320 }
34321
34322 // (public) this ^ a
34323 function op_xor(x, y) {
34324 return x ^ y
34325 }
34326
34327 function bnXor(a) {
34328 var r = new BigInteger()
34329 this.bitwiseTo(a, op_xor, r)
34330 return r
34331 }
34332
34333 // (public) this & ~a
34334 function op_andnot(x, y) {
34335 return x & ~y
34336 }
34337
34338 function bnAndNot(a) {
34339 var r = new BigInteger()
34340 this.bitwiseTo(a, op_andnot, r)
34341 return r
34342 }
34343
34344 // (public) ~this
34345 function bnNot() {
34346 var r = new BigInteger()
34347 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
34348 r.t = this.t
34349 r.s = ~this.s
34350 return r
34351 }
34352
34353 // (public) this << n
34354 function bnShiftLeft(n) {
34355 var r = new BigInteger()
34356 if (n < 0) this.rShiftTo(-n, r)
34357 else this.lShiftTo(n, r)
34358 return r
34359 }
34360
34361 // (public) this >> n
34362 function bnShiftRight(n) {
34363 var r = new BigInteger()
34364 if (n < 0) this.lShiftTo(-n, r)
34365 else this.rShiftTo(n, r)
34366 return r
34367 }
34368
34369 // return index of lowest 1-bit in x, x < 2^31
34370 function lbit(x) {
34371 if (x == 0) return -1
34372 var r = 0
34373 if ((x & 0xffff) == 0) {
34374 x >>= 16
34375 r += 16
34376 }
34377 if ((x & 0xff) == 0) {
34378 x >>= 8
34379 r += 8
34380 }
34381 if ((x & 0xf) == 0) {
34382 x >>= 4
34383 r += 4
34384 }
34385 if ((x & 3) == 0) {
34386 x >>= 2
34387 r += 2
34388 }
34389 if ((x & 1) == 0)++r
34390 return r
34391 }
34392
34393 // (public) returns index of lowest 1-bit (or -1 if none)
34394 function bnGetLowestSetBit() {
34395 for (var i = 0; i < this.t; ++i)
34396 if (this[i] != 0) return i * this.DB + lbit(this[i])
34397 if (this.s < 0) return this.t * this.DB
34398 return -1
34399 }
34400
34401 // return number of 1 bits in x
34402 function cbit(x) {
34403 var r = 0
34404 while (x != 0) {
34405 x &= x - 1
34406 ++r
34407 }
34408 return r
34409 }
34410
34411 // (public) return number of set bits
34412 function bnBitCount() {
34413 var r = 0,
34414 x = this.s & this.DM
34415 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
34416 return r
34417 }
34418
34419 // (public) true iff nth bit is set
34420 function bnTestBit(n) {
34421 var j = Math.floor(n / this.DB)
34422 if (j >= this.t) return (this.s != 0)
34423 return ((this[j] & (1 << (n % this.DB))) != 0)
34424 }
34425
34426 // (protected) this op (1<<n)
34427 function bnpChangeBit(n, op) {
34428 var r = BigInteger.ONE.shiftLeft(n)
34429 this.bitwiseTo(r, op, r)
34430 return r
34431 }
34432
34433 // (public) this | (1<<n)
34434 function bnSetBit(n) {
34435 return this.changeBit(n, op_or)
34436 }
34437
34438 // (public) this & ~(1<<n)
34439 function bnClearBit(n) {
34440 return this.changeBit(n, op_andnot)
34441 }
34442
34443 // (public) this ^ (1<<n)
34444 function bnFlipBit(n) {
34445 return this.changeBit(n, op_xor)
34446 }
34447
34448 // (protected) r = this + a
34449 function bnpAddTo(a, r) {
34450 var self = this
34451
34452 var i = 0,
34453 c = 0,
34454 m = Math.min(a.t, self.t)
34455 while (i < m) {
34456 c += self[i] + a[i]
34457 r[i++] = c & self.DM
34458 c >>= self.DB
34459 }
34460 if (a.t < self.t) {
34461 c += a.s
34462 while (i < self.t) {
34463 c += self[i]
34464 r[i++] = c & self.DM
34465 c >>= self.DB
34466 }
34467 c += self.s
34468 } else {
34469 c += self.s
34470 while (i < a.t) {
34471 c += a[i]
34472 r[i++] = c & self.DM
34473 c >>= self.DB
34474 }
34475 c += a.s
34476 }
34477 r.s = (c < 0) ? -1 : 0
34478 if (c > 0) r[i++] = c
34479 else if (c < -1) r[i++] = self.DV + c
34480 r.t = i
34481 r.clamp()
34482 }
34483
34484 // (public) this + a
34485 function bnAdd(a) {
34486 var r = new BigInteger()
34487 this.addTo(a, r)
34488 return r
34489 }
34490
34491 // (public) this - a
34492 function bnSubtract(a) {
34493 var r = new BigInteger()
34494 this.subTo(a, r)
34495 return r
34496 }
34497
34498 // (public) this * a
34499 function bnMultiply(a) {
34500 var r = new BigInteger()
34501 this.multiplyTo(a, r)
34502 return r
34503 }
34504
34505 // (public) this^2
34506 function bnSquare() {
34507 var r = new BigInteger()
34508 this.squareTo(r)
34509 return r
34510 }
34511
34512 // (public) this / a
34513 function bnDivide(a) {
34514 var r = new BigInteger()
34515 this.divRemTo(a, r, null)
34516 return r
34517 }
34518
34519 // (public) this % a
34520 function bnRemainder(a) {
34521 var r = new BigInteger()
34522 this.divRemTo(a, null, r)
34523 return r
34524 }
34525
34526 // (public) [this/a,this%a]
34527 function bnDivideAndRemainder(a) {
34528 var q = new BigInteger(),
34529 r = new BigInteger()
34530 this.divRemTo(a, q, r)
34531 return new Array(q, r)
34532 }
34533
34534 // (protected) this *= n, this >= 0, 1 < n < DV
34535 function bnpDMultiply(n) {
34536 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
34537 ++this.t
34538 this.clamp()
34539 }
34540
34541 // (protected) this += n << w words, this >= 0
34542 function bnpDAddOffset(n, w) {
34543 if (n == 0) return
34544 while (this.t <= w) this[this.t++] = 0
34545 this[w] += n
34546 while (this[w] >= this.DV) {
34547 this[w] -= this.DV
34548 if (++w >= this.t) this[this.t++] = 0
34549 ++this[w]
34550 }
34551 }
34552
34553 // A "null" reducer
34554 function NullExp() {}
34555
34556 function nNop(x) {
34557 return x
34558 }
34559
34560 function nMulTo(x, y, r) {
34561 x.multiplyTo(y, r)
34562 }
34563
34564 function nSqrTo(x, r) {
34565 x.squareTo(r)
34566 }
34567
34568 NullExp.prototype.convert = nNop
34569 NullExp.prototype.revert = nNop
34570 NullExp.prototype.mulTo = nMulTo
34571 NullExp.prototype.sqrTo = nSqrTo
34572
34573 // (public) this^e
34574 function bnPow(e) {
34575 return this.exp(e, new NullExp())
34576 }
34577
34578 // (protected) r = lower n words of "this * a", a.t <= n
34579 // "this" should be the larger one if appropriate.
34580 function bnpMultiplyLowerTo(a, n, r) {
34581 var i = Math.min(this.t + a.t, n)
34582 r.s = 0; // assumes a,this >= 0
34583 r.t = i
34584 while (i > 0) r[--i] = 0
34585 var j
34586 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
34587 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
34588 r.clamp()
34589 }
34590
34591 // (protected) r = "this * a" without lower n words, n > 0
34592 // "this" should be the larger one if appropriate.
34593 function bnpMultiplyUpperTo(a, n, r) {
34594 --n
34595 var i = r.t = this.t + a.t - n
34596 r.s = 0; // assumes a,this >= 0
34597 while (--i >= 0) r[i] = 0
34598 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
34599 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
34600 r.clamp()
34601 r.drShiftTo(1, r)
34602 }
34603
34604 // Barrett modular reduction
34605 function Barrett(m) {
34606 // setup Barrett
34607 this.r2 = new BigInteger()
34608 this.q3 = new BigInteger()
34609 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
34610 this.mu = this.r2.divide(m)
34611 this.m = m
34612 }
34613
34614 function barrettConvert(x) {
34615 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
34616 else if (x.compareTo(this.m) < 0) return x
34617 else {
34618 var r = new BigInteger()
34619 x.copyTo(r)
34620 this.reduce(r)
34621 return r
34622 }
34623 }
34624
34625 function barrettRevert(x) {
34626 return x
34627 }
34628
34629 // x = x mod m (HAC 14.42)
34630 function barrettReduce(x) {
34631 var self = this
34632 x.drShiftTo(self.m.t - 1, self.r2)
34633 if (x.t > self.m.t + 1) {
34634 x.t = self.m.t + 1
34635 x.clamp()
34636 }
34637 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
34638 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
34639 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
34640 x.subTo(self.r2, x)
34641 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
34642 }
34643
34644 // r = x^2 mod m; x != r
34645 function barrettSqrTo(x, r) {
34646 x.squareTo(r)
34647 this.reduce(r)
34648 }
34649
34650 // r = x*y mod m; x,y != r
34651 function barrettMulTo(x, y, r) {
34652 x.multiplyTo(y, r)
34653 this.reduce(r)
34654 }
34655
34656 Barrett.prototype.convert = barrettConvert
34657 Barrett.prototype.revert = barrettRevert
34658 Barrett.prototype.reduce = barrettReduce
34659 Barrett.prototype.mulTo = barrettMulTo
34660 Barrett.prototype.sqrTo = barrettSqrTo
34661
34662 // (public) this^e % m (HAC 14.85)
34663 function bnModPow(e, m) {
34664 var i = e.bitLength(),
34665 k, r = nbv(1),
34666 z
34667 if (i <= 0) return r
34668 else if (i < 18) k = 1
34669 else if (i < 48) k = 3
34670 else if (i < 144) k = 4
34671 else if (i < 768) k = 5
34672 else k = 6
34673 if (i < 8)
34674 z = new Classic(m)
34675 else if (m.isEven())
34676 z = new Barrett(m)
34677 else
34678 z = new Montgomery(m)
34679
34680 // precomputation
34681 var g = new Array(),
34682 n = 3,
34683 k1 = k - 1,
34684 km = (1 << k) - 1
34685 g[1] = z.convert(this)
34686 if (k > 1) {
34687 var g2 = new BigInteger()
34688 z.sqrTo(g[1], g2)
34689 while (n <= km) {
34690 g[n] = new BigInteger()
34691 z.mulTo(g2, g[n - 2], g[n])
34692 n += 2
34693 }
34694 }
34695
34696 var j = e.t - 1,
34697 w, is1 = true,
34698 r2 = new BigInteger(),
34699 t
34700 i = nbits(e[j]) - 1
34701 while (j >= 0) {
34702 if (i >= k1) w = (e[j] >> (i - k1)) & km
34703 else {
34704 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
34705 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
34706 }
34707
34708 n = k
34709 while ((w & 1) == 0) {
34710 w >>= 1
34711 --n
34712 }
34713 if ((i -= n) < 0) {
34714 i += this.DB
34715 --j
34716 }
34717 if (is1) { // ret == 1, don't bother squaring or multiplying it
34718 g[w].copyTo(r)
34719 is1 = false
34720 } else {
34721 while (n > 1) {
34722 z.sqrTo(r, r2)
34723 z.sqrTo(r2, r)
34724 n -= 2
34725 }
34726 if (n > 0) z.sqrTo(r, r2)
34727 else {
34728 t = r
34729 r = r2
34730 r2 = t
34731 }
34732 z.mulTo(r2, g[w], r)
34733 }
34734
34735 while (j >= 0 && (e[j] & (1 << i)) == 0) {
34736 z.sqrTo(r, r2)
34737 t = r
34738 r = r2
34739 r2 = t
34740 if (--i < 0) {
34741 i = this.DB - 1
34742 --j
34743 }
34744 }
34745 }
34746 return z.revert(r)
34747 }
34748
34749 // (public) gcd(this,a) (HAC 14.54)
34750 function bnGCD(a) {
34751 var x = (this.s < 0) ? this.negate() : this.clone()
34752 var y = (a.s < 0) ? a.negate() : a.clone()
34753 if (x.compareTo(y) < 0) {
34754 var t = x
34755 x = y
34756 y = t
34757 }
34758 var i = x.getLowestSetBit(),
34759 g = y.getLowestSetBit()
34760 if (g < 0) return x
34761 if (i < g) g = i
34762 if (g > 0) {
34763 x.rShiftTo(g, x)
34764 y.rShiftTo(g, y)
34765 }
34766 while (x.signum() > 0) {
34767 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
34768 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
34769 if (x.compareTo(y) >= 0) {
34770 x.subTo(y, x)
34771 x.rShiftTo(1, x)
34772 } else {
34773 y.subTo(x, y)
34774 y.rShiftTo(1, y)
34775 }
34776 }
34777 if (g > 0) y.lShiftTo(g, y)
34778 return y
34779 }
34780
34781 // (protected) this % n, n < 2^26
34782 function bnpModInt(n) {
34783 if (n <= 0) return 0
34784 var d = this.DV % n,
34785 r = (this.s < 0) ? n - 1 : 0
34786 if (this.t > 0)
34787 if (d == 0) r = this[0] % n
34788 else
34789 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
34790 return r
34791 }
34792
34793 // (public) 1/this % m (HAC 14.61)
34794 function bnModInverse(m) {
34795 var ac = m.isEven()
34796 if (this.signum() === 0) throw new Error('division by zero')
34797 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
34798 var u = m.clone(),
34799 v = this.clone()
34800 var a = nbv(1),
34801 b = nbv(0),
34802 c = nbv(0),
34803 d = nbv(1)
34804 while (u.signum() != 0) {
34805 while (u.isEven()) {
34806 u.rShiftTo(1, u)
34807 if (ac) {
34808 if (!a.isEven() || !b.isEven()) {
34809 a.addTo(this, a)
34810 b.subTo(m, b)
34811 }
34812 a.rShiftTo(1, a)
34813 } else if (!b.isEven()) b.subTo(m, b)
34814 b.rShiftTo(1, b)
34815 }
34816 while (v.isEven()) {
34817 v.rShiftTo(1, v)
34818 if (ac) {
34819 if (!c.isEven() || !d.isEven()) {
34820 c.addTo(this, c)
34821 d.subTo(m, d)
34822 }
34823 c.rShiftTo(1, c)
34824 } else if (!d.isEven()) d.subTo(m, d)
34825 d.rShiftTo(1, d)
34826 }
34827 if (u.compareTo(v) >= 0) {
34828 u.subTo(v, u)
34829 if (ac) a.subTo(c, a)
34830 b.subTo(d, b)
34831 } else {
34832 v.subTo(u, v)
34833 if (ac) c.subTo(a, c)
34834 d.subTo(b, d)
34835 }
34836 }
34837 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
34838 while (d.compareTo(m) >= 0) d.subTo(m, d)
34839 while (d.signum() < 0) d.addTo(m, d)
34840 return d
34841 }
34842
34843 var lowprimes = [
34844 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
34845 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
34846 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
34847 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
34848 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
34849 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
34850 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
34851 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
34852 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
34853 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
34854 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
34855 ]
34856
34857 var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
34858
34859 // (public) test primality with certainty >= 1-.5^t
34860 function bnIsProbablePrime(t) {
34861 var i, x = this.abs()
34862 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
34863 for (i = 0; i < lowprimes.length; ++i)
34864 if (x[0] == lowprimes[i]) return true
34865 return false
34866 }
34867 if (x.isEven()) return false
34868 i = 1
34869 while (i < lowprimes.length) {
34870 var m = lowprimes[i],
34871 j = i + 1
34872 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
34873 m = x.modInt(m)
34874 while (i < j) if (m % lowprimes[i++] == 0) return false
34875 }
34876 return x.millerRabin(t)
34877 }
34878
34879 // (protected) true if probably prime (HAC 4.24, Miller-Rabin)
34880 function bnpMillerRabin(t) {
34881 var n1 = this.subtract(BigInteger.ONE)
34882 var k = n1.getLowestSetBit()
34883 if (k <= 0) return false
34884 var r = n1.shiftRight(k)
34885 t = (t + 1) >> 1
34886 if (t > lowprimes.length) t = lowprimes.length
34887 var a = new BigInteger(null)
34888 var j, bases = []
34889 for (var i = 0; i < t; ++i) {
34890 for (;;) {
34891 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
34892 if (bases.indexOf(j) == -1) break
34893 }
34894 bases.push(j)
34895 a.fromInt(j)
34896 var y = a.modPow(r, this)
34897 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
34898 var j = 1
34899 while (j++ < k && y.compareTo(n1) != 0) {
34900 y = y.modPowInt(2, this)
34901 if (y.compareTo(BigInteger.ONE) == 0) return false
34902 }
34903 if (y.compareTo(n1) != 0) return false
34904 }
34905 }
34906 return true
34907 }
34908
34909 // protected
34910 proto.chunkSize = bnpChunkSize
34911 proto.toRadix = bnpToRadix
34912 proto.fromRadix = bnpFromRadix
34913 proto.fromNumber = bnpFromNumber
34914 proto.bitwiseTo = bnpBitwiseTo
34915 proto.changeBit = bnpChangeBit
34916 proto.addTo = bnpAddTo
34917 proto.dMultiply = bnpDMultiply
34918 proto.dAddOffset = bnpDAddOffset
34919 proto.multiplyLowerTo = bnpMultiplyLowerTo
34920 proto.multiplyUpperTo = bnpMultiplyUpperTo
34921 proto.modInt = bnpModInt
34922 proto.millerRabin = bnpMillerRabin
34923
34924 // public
34925 proto.clone = bnClone
34926 proto.intValue = bnIntValue
34927 proto.byteValue = bnByteValue
34928 proto.shortValue = bnShortValue
34929 proto.signum = bnSigNum
34930 proto.toByteArray = bnToByteArray
34931 proto.equals = bnEquals
34932 proto.min = bnMin
34933 proto.max = bnMax
34934 proto.and = bnAnd
34935 proto.or = bnOr
34936 proto.xor = bnXor
34937 proto.andNot = bnAndNot
34938 proto.not = bnNot
34939 proto.shiftLeft = bnShiftLeft
34940 proto.shiftRight = bnShiftRight
34941 proto.getLowestSetBit = bnGetLowestSetBit
34942 proto.bitCount = bnBitCount
34943 proto.testBit = bnTestBit
34944 proto.setBit = bnSetBit
34945 proto.clearBit = bnClearBit
34946 proto.flipBit = bnFlipBit
34947 proto.add = bnAdd
34948 proto.subtract = bnSubtract
34949 proto.multiply = bnMultiply
34950 proto.divide = bnDivide
34951 proto.remainder = bnRemainder
34952 proto.divideAndRemainder = bnDivideAndRemainder
34953 proto.modPow = bnModPow
34954 proto.modInverse = bnModInverse
34955 proto.pow = bnPow
34956 proto.gcd = bnGCD
34957 proto.isProbablePrime = bnIsProbablePrime
34958
34959 // JSBN-specific extension
34960 proto.square = bnSquare
34961
34962 // constants
34963 BigInteger.ZERO = nbv(0)
34964 BigInteger.ONE = nbv(1)
34965 BigInteger.valueOf = nbv
34966
34967 module.exports = BigInteger
34968
34969 },{"../package.json":40}],38:[function(require,module,exports){
34970 (function (Buffer){
34971 // FIXME: Kind of a weird way to throw exceptions, consider removing
34972 var assert = require('assert')
34973 var BigInteger = require('./bigi')
34974
34975 /**
34976 * Turns a byte array into a big integer.
34977 *
34978 * This function will interpret a byte array as a big integer in big
34979 * endian notation.
34980 */
34981 BigInteger.fromByteArrayUnsigned = function(byteArray) {
34982 // BigInteger expects a DER integer conformant byte array
34983 if (byteArray[0] & 0x80) {
34984 return new BigInteger([0].concat(byteArray))
34985 }
34986
34987 return new BigInteger(byteArray)
34988 }
34989
34990 /**
34991 * Returns a byte array representation of the big integer.
34992 *
34993 * This returns the absolute of the contained value in big endian
34994 * form. A value of zero results in an empty array.
34995 */
34996 BigInteger.prototype.toByteArrayUnsigned = function() {
34997 var byteArray = this.toByteArray()
34998 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
34999 }
35000
35001 BigInteger.fromDERInteger = function(byteArray) {
35002 return new BigInteger(byteArray)
35003 }
35004
35005 /*
35006 * Converts BigInteger to a DER integer representation.
35007 *
35008 * The format for this value uses the most significant bit as a sign
35009 * bit. If the most significant bit is already set and the integer is
35010 * positive, a 0x00 is prepended.
35011 *
35012 * Examples:
35013 *
35014 * 0 => 0x00
35015 * 1 => 0x01
35016 * -1 => 0xff
35017 * 127 => 0x7f
35018 * -127 => 0x81
35019 * 128 => 0x0080
35020 * -128 => 0x80
35021 * 255 => 0x00ff
35022 * -255 => 0xff01
35023 * 16300 => 0x3fac
35024 * -16300 => 0xc054
35025 * 62300 => 0x00f35c
35026 * -62300 => 0xff0ca4
35027 */
35028 BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
35029
35030 BigInteger.fromBuffer = function(buffer) {
35031 // BigInteger expects a DER integer conformant byte array
35032 if (buffer[0] & 0x80) {
35033 var byteArray = Array.prototype.slice.call(buffer)
35034
35035 return new BigInteger([0].concat(byteArray))
35036 }
35037
35038 return new BigInteger(buffer)
35039 }
35040
35041 BigInteger.fromHex = function(hex) {
35042 if (hex === '') return BigInteger.ZERO
35043
35044 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
35045 assert.equal(hex.length % 2, 0, 'Incomplete hex')
35046 return new BigInteger(hex, 16)
35047 }
35048
35049 BigInteger.prototype.toBuffer = function(size) {
35050 var byteArray = this.toByteArrayUnsigned()
35051 var zeros = []
35052
35053 var padding = size - byteArray.length
35054 while (zeros.length < padding) zeros.push(0)
35055
35056 return new Buffer(zeros.concat(byteArray))
35057 }
35058
35059 BigInteger.prototype.toHex = function(size) {
35060 return this.toBuffer(size).toString('hex')
35061 }
35062
35063 }).call(this,require("buffer").Buffer)
35064 },{"./bigi":37,"assert":1,"buffer":5}],39:[function(require,module,exports){
35065 var BigInteger = require('./bigi')
35066
35067 //addons
35068 require('./convert')
35069
35070 module.exports = BigInteger
35071 },{"./bigi":37,"./convert":38}],40:[function(require,module,exports){
35072 module.exports={
35073 "_args": [
35074 [
35075 "bigi",
35076 "/home/ian/git/bitcoin/bitcoinjs-lib-browser"
35077 ]
35078 ],
35079 "_from": "bigi@latest",
35080 "_id": "bigi@1.4.2",
35081 "_inCache": true,
35082 "_installable": true,
35083 "_location": "/bigi",
35084 "_nodeVersion": "6.1.0",
35085 "_npmOperationalInternal": {
35086 "host": "packages-12-west.internal.npmjs.com",
35087 "tmp": "tmp/bigi-1.4.2.tgz_1469584192413_0.6801238611806184"
35088 },
35089 "_npmUser": {
35090 "email": "jprichardson@gmail.com",
35091 "name": "jprichardson"
35092 },
35093 "_npmVersion": "3.8.6",
35094 "_phantomChildren": {},
35095 "_requested": {
35096 "name": "bigi",
35097 "raw": "bigi",
35098 "rawSpec": "",
35099 "scope": null,
35100 "spec": "latest",
35101 "type": "tag"
35102 },
35103 "_requiredBy": [
35104 "#USER",
35105 "/bitcoinjs-lib",
35106 "/ecurve"
35107 ],
35108 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz",
35109 "_shasum": "9c665a95f88b8b08fc05cfd731f561859d725825",
35110 "_shrinkwrap": null,
35111 "_spec": "bigi",
35112 "_where": "/home/ian/git/bitcoin/bitcoinjs-lib-browser",
35113 "bugs": {
35114 "url": "https://github.com/cryptocoinjs/bigi/issues"
35115 },
35116 "dependencies": {},
35117 "description": "Big integers.",
35118 "devDependencies": {
35119 "coveralls": "^2.11.2",
35120 "istanbul": "^0.3.5",
35121 "jshint": "^2.5.1",
35122 "mocha": "^2.1.0",
35123 "mochify": "^2.1.0"
35124 },
35125 "directories": {},
35126 "dist": {
35127 "shasum": "9c665a95f88b8b08fc05cfd731f561859d725825",
35128 "tarball": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz"
35129 },
35130 "gitHead": "c25308081c896ff84702303722bf5ecd8b3f78e3",
35131 "homepage": "https://github.com/cryptocoinjs/bigi#readme",
35132 "keywords": [
35133 "cryptography",
35134 "math",
35135 "bitcoin",
35136 "arbitrary",
35137 "precision",
35138 "arithmetic",
35139 "big",
35140 "integer",
35141 "int",
35142 "number",
35143 "biginteger",
35144 "bigint",
35145 "bignumber",
35146 "decimal",
35147 "float"
35148 ],
35149 "main": "./lib/index.js",
35150 "maintainers": [
35151 {
35152 "email": "boydb@midnightdesign.ws",
35153 "name": "midnightlightning"
35154 },
35155 {
35156 "email": "sidazhang89@gmail.com",
35157 "name": "sidazhang"
35158 },
35159 {
35160 "email": "npm@shesek.info",
35161 "name": "nadav"
35162 },
35163 {
35164 "email": "jprichardson@gmail.com",
35165 "name": "jprichardson"
35166 }
35167 ],
35168 "name": "bigi",
35169 "optionalDependencies": {},
35170 "readme": "ERROR: No README data found!",
35171 "repository": {
35172 "type": "git",
35173 "url": "git+https://github.com/cryptocoinjs/bigi.git"
35174 },
35175 "scripts": {
35176 "browser-test": "mochify --wd -R spec",
35177 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
35178 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info",
35179 "jshint": "jshint --config jshint.json lib/*.js ; true",
35180 "test": "_mocha -- test/*.js",
35181 "unit": "mocha"
35182 },
35183 "testling": {
35184 "browsers": [
35185 "ie/9..latest",
35186 "firefox/latest",
35187 "chrome/latest",
35188 "safari/6.0..latest",
35189 "iphone/6.0..latest",
35190 "android-browser/4.2..latest"
35191 ],
35192 "files": "test/*.js",
35193 "harness": "mocha"
35194 },
35195 "version": "1.4.2"
35196 }
35197
35198 },{}],41:[function(require,module,exports){
35199 // Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki
35200 // Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
35201 // NOTE: SIGHASH byte ignored AND restricted, truncate before use
35202
35203 var Buffer = require('safe-buffer').Buffer
35204
35205 function check (buffer) {
35206 if (buffer.length < 8) return false
35207 if (buffer.length > 72) return false
35208 if (buffer[0] !== 0x30) return false
35209 if (buffer[1] !== buffer.length - 2) return false
35210 if (buffer[2] !== 0x02) return false
35211
35212 var lenR = buffer[3]
35213 if (lenR === 0) return false
35214 if (5 + lenR >= buffer.length) return false
35215 if (buffer[4 + lenR] !== 0x02) return false
35216
35217 var lenS = buffer[5 + lenR]
35218 if (lenS === 0) return false
35219 if ((6 + lenR + lenS) !== buffer.length) return false
35220
35221 if (buffer[4] & 0x80) return false
35222 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false
35223
35224 if (buffer[lenR + 6] & 0x80) return false
35225 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false
35226 return true
35227 }
35228
35229 function decode (buffer) {
35230 if (buffer.length < 8) throw new Error('DER sequence length is too short')
35231 if (buffer.length > 72) throw new Error('DER sequence length is too long')
35232 if (buffer[0] !== 0x30) throw new Error('Expected DER sequence')
35233 if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid')
35234 if (buffer[2] !== 0x02) throw new Error('Expected DER integer')
35235
35236 var lenR = buffer[3]
35237 if (lenR === 0) throw new Error('R length is zero')
35238 if (5 + lenR >= buffer.length) throw new Error('R length is too long')
35239 if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)')
35240
35241 var lenS = buffer[5 + lenR]
35242 if (lenS === 0) throw new Error('S length is zero')
35243 if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid')
35244
35245 if (buffer[4] & 0x80) throw new Error('R value is negative')
35246 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded')
35247
35248 if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative')
35249 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded')
35250
35251 // non-BIP66 - extract R, S values
35252 return {
35253 r: buffer.slice(4, 4 + lenR),
35254 s: buffer.slice(6 + lenR)
35255 }
35256 }
35257
35258 /*
35259 * Expects r and s to be positive DER integers.
35260 *
35261 * The DER format uses the most significant bit as a sign bit (& 0x80).
35262 * If the significant bit is set AND the integer is positive, a 0x00 is prepended.
35263 *
35264 * Examples:
35265 *
35266 * 0 => 0x00
35267 * 1 => 0x01
35268 * -1 => 0xff
35269 * 127 => 0x7f
35270 * -127 => 0x81
35271 * 128 => 0x0080
35272 * -128 => 0x80
35273 * 255 => 0x00ff
35274 * -255 => 0xff01
35275 * 16300 => 0x3fac
35276 * -16300 => 0xc054
35277 * 62300 => 0x00f35c
35278 * -62300 => 0xff0ca4
35279 */
35280 function encode (r, s) {
35281 var lenR = r.length
35282 var lenS = s.length
35283 if (lenR === 0) throw new Error('R length is zero')
35284 if (lenS === 0) throw new Error('S length is zero')
35285 if (lenR > 33) throw new Error('R length is too long')
35286 if (lenS > 33) throw new Error('S length is too long')
35287 if (r[0] & 0x80) throw new Error('R value is negative')
35288 if (s[0] & 0x80) throw new Error('S value is negative')
35289 if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded')
35290 if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded')
35291
35292 var signature = Buffer.allocUnsafe(6 + lenR + lenS)
35293
35294 // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
35295 signature[0] = 0x30
35296 signature[1] = signature.length - 2
35297 signature[2] = 0x02
35298 signature[3] = r.length
35299 r.copy(signature, 4)
35300 signature[4 + lenR] = 0x02
35301 signature[5 + lenR] = s.length
35302 s.copy(signature, 6 + lenR)
35303
35304 return signature
35305 }
35306
35307 module.exports = {
35308 check: check,
35309 decode: decode,
35310 encode: encode
35311 }
35312
35313 },{"safe-buffer":128}],42:[function(require,module,exports){
35314 module.exports={
35315 "OP_FALSE": 0,
35316 "OP_0": 0,
35317 "OP_PUSHDATA1": 76,
35318 "OP_PUSHDATA2": 77,
35319 "OP_PUSHDATA4": 78,
35320 "OP_1NEGATE": 79,
35321 "OP_RESERVED": 80,
35322 "OP_1": 81,
35323 "OP_TRUE": 81,
35324 "OP_2": 82,
35325 "OP_3": 83,
35326 "OP_4": 84,
35327 "OP_5": 85,
35328 "OP_6": 86,
35329 "OP_7": 87,
35330 "OP_8": 88,
35331 "OP_9": 89,
35332 "OP_10": 90,
35333 "OP_11": 91,
35334 "OP_12": 92,
35335 "OP_13": 93,
35336 "OP_14": 94,
35337 "OP_15": 95,
35338 "OP_16": 96,
35339
35340 "OP_NOP": 97,
35341 "OP_VER": 98,
35342 "OP_IF": 99,
35343 "OP_NOTIF": 100,
35344 "OP_VERIF": 101,
35345 "OP_VERNOTIF": 102,
35346 "OP_ELSE": 103,
35347 "OP_ENDIF": 104,
35348 "OP_VERIFY": 105,
35349 "OP_RETURN": 106,
35350
35351 "OP_TOALTSTACK": 107,
35352 "OP_FROMALTSTACK": 108,
35353 "OP_2DROP": 109,
35354 "OP_2DUP": 110,
35355 "OP_3DUP": 111,
35356 "OP_2OVER": 112,
35357 "OP_2ROT": 113,
35358 "OP_2SWAP": 114,
35359 "OP_IFDUP": 115,
35360 "OP_DEPTH": 116,
35361 "OP_DROP": 117,
35362 "OP_DUP": 118,
35363 "OP_NIP": 119,
35364 "OP_OVER": 120,
35365 "OP_PICK": 121,
35366 "OP_ROLL": 122,
35367 "OP_ROT": 123,
35368 "OP_SWAP": 124,
35369 "OP_TUCK": 125,
35370
35371 "OP_CAT": 126,
35372 "OP_SUBSTR": 127,
35373 "OP_LEFT": 128,
35374 "OP_RIGHT": 129,
35375 "OP_SIZE": 130,
35376
35377 "OP_INVERT": 131,
35378 "OP_AND": 132,
35379 "OP_OR": 133,
35380 "OP_XOR": 134,
35381 "OP_EQUAL": 135,
35382 "OP_EQUALVERIFY": 136,
35383 "OP_RESERVED1": 137,
35384 "OP_RESERVED2": 138,
35385
35386 "OP_1ADD": 139,
35387 "OP_1SUB": 140,
35388 "OP_2MUL": 141,
35389 "OP_2DIV": 142,
35390 "OP_NEGATE": 143,
35391 "OP_ABS": 144,
35392 "OP_NOT": 145,
35393 "OP_0NOTEQUAL": 146,
35394 "OP_ADD": 147,
35395 "OP_SUB": 148,
35396 "OP_MUL": 149,
35397 "OP_DIV": 150,
35398 "OP_MOD": 151,
35399 "OP_LSHIFT": 152,
35400 "OP_RSHIFT": 153,
35401
35402 "OP_BOOLAND": 154,
35403 "OP_BOOLOR": 155,
35404 "OP_NUMEQUAL": 156,
35405 "OP_NUMEQUALVERIFY": 157,
35406 "OP_NUMNOTEQUAL": 158,
35407 "OP_LESSTHAN": 159,
35408 "OP_GREATERTHAN": 160,
35409 "OP_LESSTHANOREQUAL": 161,
35410 "OP_GREATERTHANOREQUAL": 162,
35411 "OP_MIN": 163,
35412 "OP_MAX": 164,
35413
35414 "OP_WITHIN": 165,
35415
35416 "OP_RIPEMD160": 166,
35417 "OP_SHA1": 167,
35418 "OP_SHA256": 168,
35419 "OP_HASH160": 169,
35420 "OP_HASH256": 170,
35421 "OP_CODESEPARATOR": 171,
35422 "OP_CHECKSIG": 172,
35423 "OP_CHECKSIGVERIFY": 173,
35424 "OP_CHECKMULTISIG": 174,
35425 "OP_CHECKMULTISIGVERIFY": 175,
35426
35427 "OP_NOP1": 176,
35428 "OP_NOP2": 177,
35429 "OP_CHECKLOCKTIMEVERIFY": 177,
35430
35431 "OP_NOP3": 178,
35432 "OP_NOP4": 179,
35433 "OP_NOP5": 180,
35434 "OP_NOP6": 181,
35435 "OP_NOP7": 182,
35436 "OP_NOP8": 183,
35437 "OP_NOP9": 184,
35438 "OP_NOP10": 185,
35439
35440 "OP_PUBKEYHASH": 253,
35441 "OP_PUBKEY": 254,
35442 "OP_INVALIDOPCODE": 255
35443 }
35444
35445 },{}],43:[function(require,module,exports){
35446 var OPS = require('./index.json')
35447
35448 var map = {}
35449 for (var op in OPS) {
35450 var code = OPS[op]
35451 map[code] = op
35452 }
35453
35454 module.exports = map
35455
35456 },{"./index.json":42}],44:[function(require,module,exports){
35457 var Buffer = require('safe-buffer').Buffer
35458 var bech32 = require('bech32')
35459 var bs58check = require('bs58check')
35460 var bscript = require('./script')
35461 var btemplates = require('./templates')
35462 var networks = require('./networks')
35463 var typeforce = require('typeforce')
35464 var types = require('./types')
35465
35466 function fromBase58Check (address) {
35467 var payload = bs58check.decode(address)
35468
35469 // TODO: 4.0.0, move to "toOutputScript"
35470 if (payload.length < 21) throw new TypeError(address + ' is too short')
35471 if (payload.length > 21) throw new TypeError(address + ' is too long')
35472
35473 var version = payload.readUInt8(0)
35474 var hash = payload.slice(1)
35475
35476 return { version: version, hash: hash }
35477 }
35478
35479 function fromBech32 (address) {
35480 var result = bech32.decode(address)
35481 var data = bech32.fromWords(result.words.slice(1))
35482
35483 return {
35484 version: result.words[0],
35485 prefix: result.prefix,
35486 data: Buffer.from(data)
35487 }
35488 }
35489
35490 function toBase58Check (hash, version) {
35491 typeforce(types.tuple(types.Hash160bit, types.UInt8), arguments)
35492
35493 var payload = Buffer.allocUnsafe(21)
35494 payload.writeUInt8(version, 0)
35495 hash.copy(payload, 1)
35496
35497 return bs58check.encode(payload)
35498 }
35499
35500 function toBech32 (data, version, prefix) {
35501 var words = bech32.toWords(data)
35502 words.unshift(version)
35503
35504 return bech32.encode(prefix, words)
35505 }
35506
35507 function fromOutputScript (outputScript, network) {
35508 network = network || networks.bitcoin
35509
35510 if (btemplates.pubKeyHash.output.check(outputScript)) return toBase58Check(bscript.compile(outputScript).slice(3, 23), network.pubKeyHash)
35511 if (btemplates.scriptHash.output.check(outputScript)) return toBase58Check(bscript.compile(outputScript).slice(2, 22), network.scriptHash)
35512 if (btemplates.witnessPubKeyHash.output.check(outputScript)) return toBech32(bscript.compile(outputScript).slice(2, 22), 0, network.bech32)
35513 if (btemplates.witnessScriptHash.output.check(outputScript)) return toBech32(bscript.compile(outputScript).slice(2, 34), 0, network.bech32)
35514
35515 throw new Error(bscript.toASM(outputScript) + ' has no matching Address')
35516 }
35517
35518 function toOutputScript (address, network) {
35519 network = network || networks.bitcoin
35520
35521 var decode
35522 try {
35523 decode = fromBase58Check(address)
35524 } catch (e) {}
35525
35526 if (decode) {
35527 if (decode.version === network.pubKeyHash) return btemplates.pubKeyHash.output.encode(decode.hash)
35528 if (decode.version === network.scriptHash) return btemplates.scriptHash.output.encode(decode.hash)
35529 } else {
35530 try {
35531 decode = fromBech32(address)
35532 } catch (e) {}
35533
35534 if (decode) {
35535 if (decode.prefix !== network.bech32) throw new Error(address + ' has an invalid prefix')
35536 if (decode.version === 0) {
35537 if (decode.data.length === 20) return btemplates.witnessPubKeyHash.output.encode(decode.data)
35538 if (decode.data.length === 32) return btemplates.witnessScriptHash.output.encode(decode.data)
35539 }
35540 }
35541 }
35542
35543 throw new Error(address + ' has no matching Script')
35544 }
35545
35546 module.exports = {
35547 fromBase58Check: fromBase58Check,
35548 fromBech32: fromBech32,
35549 fromOutputScript: fromOutputScript,
35550 toBase58Check: toBase58Check,
35551 toBech32: toBech32,
35552 toOutputScript: toOutputScript
35553 }
35554
35555 },{"./networks":53,"./script":54,"./templates":56,"./types":80,"bech32":36,"bs58check":85,"safe-buffer":128,"typeforce":139}],45:[function(require,module,exports){
35556 var Buffer = require('safe-buffer').Buffer
35557 var bcrypto = require('./crypto')
35558 var fastMerkleRoot = require('merkle-lib/fastRoot')
35559 var typeforce = require('typeforce')
35560 var types = require('./types')
35561 var varuint = require('varuint-bitcoin')
35562
35563 var Transaction = require('./transaction')
35564
35565 function Block () {
35566 this.version = 1
35567 this.prevHash = null
35568 this.merkleRoot = null
35569 this.timestamp = 0
35570 this.bits = 0
35571 this.nonce = 0
35572 }
35573
35574 Block.fromBuffer = function (buffer) {
35575 if (buffer.length < 80) throw new Error('Buffer too small (< 80 bytes)')
35576
35577 var offset = 0
35578 function readSlice (n) {
35579 offset += n
35580 return buffer.slice(offset - n, offset)
35581 }
35582
35583 function readUInt32 () {
35584 var i = buffer.readUInt32LE(offset)
35585 offset += 4
35586 return i
35587 }
35588
35589 function readInt32 () {
35590 var i = buffer.readInt32LE(offset)
35591 offset += 4
35592 return i
35593 }
35594
35595 var block = new Block()
35596 block.version = readInt32()
35597 block.prevHash = readSlice(32)
35598 block.merkleRoot = readSlice(32)
35599 block.timestamp = readUInt32()
35600 block.bits = readUInt32()
35601 block.nonce = readUInt32()
35602
35603 if (buffer.length === 80) return block
35604
35605 function readVarInt () {
35606 var vi = varuint.decode(buffer, offset)
35607 offset += varuint.decode.bytes
35608 return vi
35609 }
35610
35611 function readTransaction () {
35612 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
35613 offset += tx.byteLength()
35614 return tx
35615 }
35616
35617 var nTransactions = readVarInt()
35618 block.transactions = []
35619
35620 for (var i = 0; i < nTransactions; ++i) {
35621 var tx = readTransaction()
35622 block.transactions.push(tx)
35623 }
35624
35625 return block
35626 }
35627
35628 Block.prototype.byteLength = function (headersOnly) {
35629 if (headersOnly || !this.transactions) return 80
35630
35631 return 80 + varuint.encodingLength(this.transactions.length) + this.transactions.reduce(function (a, x) {
35632 return a + x.byteLength()
35633 }, 0)
35634 }
35635
35636 Block.fromHex = function (hex) {
35637 return Block.fromBuffer(Buffer.from(hex, 'hex'))
35638 }
35639
35640 Block.prototype.getHash = function () {
35641 return bcrypto.hash256(this.toBuffer(true))
35642 }
35643
35644 Block.prototype.getId = function () {
35645 return this.getHash().reverse().toString('hex')
35646 }
35647
35648 Block.prototype.getUTCDate = function () {
35649 var date = new Date(0) // epoch
35650 date.setUTCSeconds(this.timestamp)
35651
35652 return date
35653 }
35654
35655 // TODO: buffer, offset compatibility
35656 Block.prototype.toBuffer = function (headersOnly) {
35657 var buffer = Buffer.allocUnsafe(this.byteLength(headersOnly))
35658
35659 var offset = 0
35660 function writeSlice (slice) {
35661 slice.copy(buffer, offset)
35662 offset += slice.length
35663 }
35664
35665 function writeInt32 (i) {
35666 buffer.writeInt32LE(i, offset)
35667 offset += 4
35668 }
35669 function writeUInt32 (i) {
35670 buffer.writeUInt32LE(i, offset)
35671 offset += 4
35672 }
35673
35674 writeInt32(this.version)
35675 writeSlice(this.prevHash)
35676 writeSlice(this.merkleRoot)
35677 writeUInt32(this.timestamp)
35678 writeUInt32(this.bits)
35679 writeUInt32(this.nonce)
35680
35681 if (headersOnly || !this.transactions) return buffer
35682
35683 varuint.encode(this.transactions.length, buffer, offset)
35684 offset += varuint.encode.bytes
35685
35686 this.transactions.forEach(function (tx) {
35687 var txSize = tx.byteLength() // TODO: extract from toBuffer?
35688 tx.toBuffer(buffer, offset)
35689 offset += txSize
35690 })
35691
35692 return buffer
35693 }
35694
35695 Block.prototype.toHex = function (headersOnly) {
35696 return this.toBuffer(headersOnly).toString('hex')
35697 }
35698
35699 Block.calculateTarget = function (bits) {
35700 var exponent = ((bits & 0xff000000) >> 24) - 3
35701 var mantissa = bits & 0x007fffff
35702 var target = Buffer.alloc(32, 0)
35703 target.writeUInt32BE(mantissa, 28 - exponent)
35704 return target
35705 }
35706
35707 Block.calculateMerkleRoot = function (transactions) {
35708 typeforce([{ getHash: types.Function }], transactions)
35709 if (transactions.length === 0) throw TypeError('Cannot compute merkle root for zero transactions')
35710
35711 var hashes = transactions.map(function (transaction) {
35712 return transaction.getHash()
35713 })
35714
35715 return fastMerkleRoot(hashes, bcrypto.hash256)
35716 }
35717
35718 Block.prototype.checkMerkleRoot = function () {
35719 if (!this.transactions) return false
35720
35721 var actualMerkleRoot = Block.calculateMerkleRoot(this.transactions)
35722 return this.merkleRoot.compare(actualMerkleRoot) === 0
35723 }
35724
35725 Block.prototype.checkProofOfWork = function () {
35726 var hash = this.getHash().reverse()
35727 var target = Block.calculateTarget(this.bits)
35728
35729 return hash.compare(target) <= 0
35730 }
35731
35732 module.exports = Block
35733
35734 },{"./crypto":47,"./transaction":78,"./types":80,"merkle-lib/fastRoot":122,"safe-buffer":128,"typeforce":139,"varuint-bitcoin":141}],46:[function(require,module,exports){
35735 var pushdata = require('pushdata-bitcoin')
35736 var varuint = require('varuint-bitcoin')
35737
35738 // https://github.com/feross/buffer/blob/master/index.js#L1127
35739 function verifuint (value, max) {
35740 if (typeof value !== 'number') throw new Error('cannot write a non-number as a number')
35741 if (value < 0) throw new Error('specified a negative value for writing an unsigned value')
35742 if (value > max) throw new Error('RangeError: value out of range')
35743 if (Math.floor(value) !== value) throw new Error('value has a fractional component')
35744 }
35745
35746 function readUInt64LE (buffer, offset) {
35747 var a = buffer.readUInt32LE(offset)
35748 var b = buffer.readUInt32LE(offset + 4)
35749 b *= 0x100000000
35750
35751 verifuint(b + a, 0x001fffffffffffff)
35752
35753 return b + a
35754 }
35755
35756 function writeUInt64LE (buffer, value, offset) {
35757 verifuint(value, 0x001fffffffffffff)
35758
35759 buffer.writeInt32LE(value & -1, offset)
35760 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
35761 return offset + 8
35762 }
35763
35764 // TODO: remove in 4.0.0?
35765 function readVarInt (buffer, offset) {
35766 var result = varuint.decode(buffer, offset)
35767
35768 return {
35769 number: result,
35770 size: varuint.decode.bytes
35771 }
35772 }
35773
35774 // TODO: remove in 4.0.0?
35775 function writeVarInt (buffer, number, offset) {
35776 varuint.encode(number, buffer, offset)
35777 return varuint.encode.bytes
35778 }
35779
35780 module.exports = {
35781 pushDataSize: pushdata.encodingLength,
35782 readPushDataInt: pushdata.decode,
35783 readUInt64LE: readUInt64LE,
35784 readVarInt: readVarInt,
35785 varIntBuffer: varuint.encode,
35786 varIntSize: varuint.encodingLength,
35787 writePushDataInt: pushdata.encode,
35788 writeUInt64LE: writeUInt64LE,
35789 writeVarInt: writeVarInt
35790 }
35791
35792 },{"pushdata-bitcoin":125,"varuint-bitcoin":141}],47:[function(require,module,exports){
35793 var createHash = require('create-hash')
35794
35795 function ripemd160 (buffer) {
35796 return createHash('rmd160').update(buffer).digest()
35797 }
35798
35799 function sha1 (buffer) {
35800 return createHash('sha1').update(buffer).digest()
35801 }
35802
35803 function sha256 (buffer) {
35804 return createHash('sha256').update(buffer).digest()
35805 }
35806
35807 function hash160 (buffer) {
35808 return ripemd160(sha256(buffer))
35809 }
35810
35811 function hash256 (buffer) {
35812 return sha256(sha256(buffer))
35813 }
35814
35815 module.exports = {
35816 hash160: hash160,
35817 hash256: hash256,
35818 ripemd160: ripemd160,
35819 sha1: sha1,
35820 sha256: sha256
35821 }
35822
35823 },{"create-hash":87}],48:[function(require,module,exports){
35824 var Buffer = require('safe-buffer').Buffer
35825 var createHmac = require('create-hmac')
35826 var typeforce = require('typeforce')
35827 var types = require('./types')
35828
35829 var BigInteger = require('bigi')
35830 var ECSignature = require('./ecsignature')
35831
35832 var ZERO = Buffer.alloc(1, 0)
35833 var ONE = Buffer.alloc(1, 1)
35834
35835 var ecurve = require('ecurve')
35836 var secp256k1 = ecurve.getCurveByName('secp256k1')
35837
35838 // https://tools.ietf.org/html/rfc6979#section-3.2
35839 function deterministicGenerateK (hash, x, checkSig) {
35840 typeforce(types.tuple(
35841 types.Hash256bit,
35842 types.Buffer256bit,
35843 types.Function
35844 ), arguments)
35845
35846 // Step A, ignored as hash already provided
35847 // Step B
35848 // Step C
35849 var k = Buffer.alloc(32, 0)
35850 var v = Buffer.alloc(32, 1)
35851
35852 // Step D
35853 k = createHmac('sha256', k)
35854 .update(v)
35855 .update(ZERO)
35856 .update(x)
35857 .update(hash)
35858 .digest()
35859
35860 // Step E
35861 v = createHmac('sha256', k).update(v).digest()
35862
35863 // Step F
35864 k = createHmac('sha256', k)
35865 .update(v)
35866 .update(ONE)
35867 .update(x)
35868 .update(hash)
35869 .digest()
35870
35871 // Step G
35872 v = createHmac('sha256', k).update(v).digest()
35873
35874 // Step H1/H2a, ignored as tlen === qlen (256 bit)
35875 // Step H2b
35876 v = createHmac('sha256', k).update(v).digest()
35877
35878 var T = BigInteger.fromBuffer(v)
35879
35880 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
35881 while (T.signum() <= 0 || T.compareTo(secp256k1.n) >= 0 || !checkSig(T)) {
35882 k = createHmac('sha256', k)
35883 .update(v)
35884 .update(ZERO)
35885 .digest()
35886
35887 v = createHmac('sha256', k).update(v).digest()
35888
35889 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
35890 // Step H2b again
35891 v = createHmac('sha256', k).update(v).digest()
35892 T = BigInteger.fromBuffer(v)
35893 }
35894
35895 return T
35896 }
35897
35898 var N_OVER_TWO = secp256k1.n.shiftRight(1)
35899
35900 function sign (hash, d) {
35901 typeforce(types.tuple(types.Hash256bit, types.BigInt), arguments)
35902
35903 var x = d.toBuffer(32)
35904 var e = BigInteger.fromBuffer(hash)
35905 var n = secp256k1.n
35906 var G = secp256k1.G
35907
35908 var r, s
35909 deterministicGenerateK(hash, x, function (k) {
35910 var Q = G.multiply(k)
35911
35912 if (secp256k1.isInfinity(Q)) return false
35913
35914 r = Q.affineX.mod(n)
35915 if (r.signum() === 0) return false
35916
35917 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
35918 if (s.signum() === 0) return false
35919
35920 return true
35921 })
35922
35923 // enforce low S values, see bip62: 'low s values in signatures'
35924 if (s.compareTo(N_OVER_TWO) > 0) {
35925 s = n.subtract(s)
35926 }
35927
35928 return new ECSignature(r, s)
35929 }
35930
35931 function verify (hash, signature, Q) {
35932 typeforce(types.tuple(
35933 types.Hash256bit,
35934 types.ECSignature,
35935 types.ECPoint
35936 ), arguments)
35937
35938 var n = secp256k1.n
35939 var G = secp256k1.G
35940
35941 var r = signature.r
35942 var s = signature.s
35943
35944 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
35945 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
35946 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
35947
35948 // 1.4.2 H = Hash(M), already done by the user
35949 // 1.4.3 e = H
35950 var e = BigInteger.fromBuffer(hash)
35951
35952 // Compute s^-1
35953 var sInv = s.modInverse(n)
35954
35955 // 1.4.4 Compute u1 = es^−1 mod n
35956 // u2 = rs^−1 mod n
35957 var u1 = e.multiply(sInv).mod(n)
35958 var u2 = r.multiply(sInv).mod(n)
35959
35960 // 1.4.5 Compute R = (xR, yR)
35961 // R = u1G + u2Q
35962 var R = G.multiplyTwo(u1, Q, u2)
35963
35964 // 1.4.5 (cont.) Enforce R is not at infinity
35965 if (secp256k1.isInfinity(R)) return false
35966
35967 // 1.4.6 Convert the field element R.x to an integer
35968 var xR = R.affineX
35969
35970 // 1.4.7 Set v = xR mod n
35971 var v = xR.mod(n)
35972
35973 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
35974 return v.equals(r)
35975 }
35976
35977 module.exports = {
35978 deterministicGenerateK: deterministicGenerateK,
35979 sign: sign,
35980 verify: verify,
35981
35982 // TODO: remove
35983 __curve: secp256k1
35984 }
35985
35986 },{"./ecsignature":50,"./types":80,"bigi":39,"create-hmac":90,"ecurve":94,"safe-buffer":128,"typeforce":139}],49:[function(require,module,exports){
35987 var baddress = require('./address')
35988 var bcrypto = require('./crypto')
35989 var ecdsa = require('./ecdsa')
35990 var randomBytes = require('randombytes')
35991 var typeforce = require('typeforce')
35992 var types = require('./types')
35993 var wif = require('wif')
35994
35995 var NETWORKS = require('./networks')
35996 var BigInteger = require('bigi')
35997
35998 var ecurve = require('ecurve')
35999 var secp256k1 = ecdsa.__curve
36000
36001 function ECPair (d, Q, options) {
36002 if (options) {
36003 typeforce({
36004 compressed: types.maybe(types.Boolean),
36005 network: types.maybe(types.Network)
36006 }, options)
36007 }
36008
36009 options = options || {}
36010
36011 if (d) {
36012 if (d.signum() <= 0) throw new Error('Private key must be greater than 0')
36013 if (d.compareTo(secp256k1.n) >= 0) throw new Error('Private key must be less than the curve order')
36014 if (Q) throw new TypeError('Unexpected publicKey parameter')
36015
36016 this.d = d
36017 } else {
36018 typeforce(types.ECPoint, Q)
36019
36020 this.__Q = Q
36021 }
36022
36023 this.compressed = options.compressed === undefined ? true : options.compressed
36024 this.network = options.network || NETWORKS.bitcoin
36025 }
36026
36027 Object.defineProperty(ECPair.prototype, 'Q', {
36028 get: function () {
36029 if (!this.__Q && this.d) {
36030 this.__Q = secp256k1.G.multiply(this.d)
36031 }
36032
36033 return this.__Q
36034 }
36035 })
36036
36037 ECPair.fromPublicKeyBuffer = function (buffer, network) {
36038 var Q = ecurve.Point.decodeFrom(secp256k1, buffer)
36039
36040 return new ECPair(null, Q, {
36041 compressed: Q.compressed,
36042 network: network
36043 })
36044 }
36045
36046 ECPair.fromWIF = function (string, network) {
36047 var decoded = wif.decode(string)
36048 var version = decoded.version
36049
36050 // list of networks?
36051 if (types.Array(network)) {
36052 network = network.filter(function (x) {
36053 return version === x.wif
36054 }).pop()
36055
36056 if (!network) throw new Error('Unknown network version')
36057
36058 // otherwise, assume a network object (or default to bitcoin)
36059 } else {
36060 network = network || NETWORKS.bitcoin
36061
36062 if (version !== network.wif) throw new Error('Invalid network version')
36063 }
36064
36065 var d = BigInteger.fromBuffer(decoded.privateKey)
36066
36067 return new ECPair(d, null, {
36068 compressed: decoded.compressed,
36069 network: network
36070 })
36071 }
36072
36073 ECPair.makeRandom = function (options) {
36074 options = options || {}
36075
36076 var rng = options.rng || randomBytes
36077
36078 var d
36079 do {
36080 var buffer = rng(32)
36081 typeforce(types.Buffer256bit, buffer)
36082
36083 d = BigInteger.fromBuffer(buffer)
36084 } while (d.signum() <= 0 || d.compareTo(secp256k1.n) >= 0)
36085
36086 return new ECPair(d, null, options)
36087 }
36088
36089 ECPair.prototype.getAddress = function () {
36090 return baddress.toBase58Check(bcrypto.hash160(this.getPublicKeyBuffer()), this.getNetwork().pubKeyHash)
36091 }
36092
36093 ECPair.prototype.getNetwork = function () {
36094 return this.network
36095 }
36096
36097 ECPair.prototype.getPublicKeyBuffer = function () {
36098 return this.Q.getEncoded(this.compressed)
36099 }
36100
36101 ECPair.prototype.sign = function (hash) {
36102 if (!this.d) throw new Error('Missing private key')
36103
36104 return ecdsa.sign(hash, this.d)
36105 }
36106
36107 ECPair.prototype.toWIF = function () {
36108 if (!this.d) throw new Error('Missing private key')
36109
36110 return wif.encode(this.network.wif, this.d.toBuffer(32), this.compressed)
36111 }
36112
36113 ECPair.prototype.verify = function (hash, signature) {
36114 return ecdsa.verify(hash, signature, this.Q)
36115 }
36116
36117 module.exports = ECPair
36118
36119 },{"./address":44,"./crypto":47,"./ecdsa":48,"./networks":53,"./types":80,"bigi":39,"ecurve":94,"randombytes":126,"typeforce":139,"wif":142}],50:[function(require,module,exports){
36120 (function (Buffer){
36121 var bip66 = require('bip66')
36122 var typeforce = require('typeforce')
36123 var types = require('./types')
36124
36125 var BigInteger = require('bigi')
36126
36127 function ECSignature (r, s) {
36128 typeforce(types.tuple(types.BigInt, types.BigInt), arguments)
36129
36130 this.r = r
36131 this.s = s
36132 }
36133
36134 ECSignature.parseCompact = function (buffer) {
36135 typeforce(types.BufferN(65), buffer)
36136
36137 var flagByte = buffer.readUInt8(0) - 27
36138 if (flagByte !== (flagByte & 7)) throw new Error('Invalid signature parameter')
36139
36140 var compressed = !!(flagByte & 4)
36141 var recoveryParam = flagByte & 3
36142 var signature = ECSignature.fromRSBuffer(buffer.slice(1))
36143
36144 return {
36145 compressed: compressed,
36146 i: recoveryParam,
36147 signature: signature
36148 }
36149 }
36150
36151 ECSignature.fromRSBuffer = function (buffer) {
36152 typeforce(types.BufferN(64), buffer)
36153
36154 var r = BigInteger.fromBuffer(buffer.slice(0, 32))
36155 var s = BigInteger.fromBuffer(buffer.slice(32, 64))
36156 return new ECSignature(r, s)
36157 }
36158
36159 ECSignature.fromDER = function (buffer) {
36160 var decode = bip66.decode(buffer)
36161 var r = BigInteger.fromDERInteger(decode.r)
36162 var s = BigInteger.fromDERInteger(decode.s)
36163
36164 return new ECSignature(r, s)
36165 }
36166
36167 // BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
36168 ECSignature.parseScriptSignature = function (buffer) {
36169 var hashType = buffer.readUInt8(buffer.length - 1)
36170 var hashTypeMod = hashType & ~0x80
36171
36172 if (hashTypeMod <= 0x00 || hashTypeMod >= 0x04) throw new Error('Invalid hashType ' + hashType)
36173
36174 return {
36175 signature: ECSignature.fromDER(buffer.slice(0, -1)),
36176 hashType: hashType
36177 }
36178 }
36179
36180 ECSignature.prototype.toCompact = function (i, compressed) {
36181 if (compressed) {
36182 i += 4
36183 }
36184
36185 i += 27
36186
36187 var buffer = Buffer.alloc(65)
36188 buffer.writeUInt8(i, 0)
36189 this.toRSBuffer(buffer, 1)
36190 return buffer
36191 }
36192
36193 ECSignature.prototype.toDER = function () {
36194 var r = Buffer.from(this.r.toDERInteger())
36195 var s = Buffer.from(this.s.toDERInteger())
36196
36197 return bip66.encode(r, s)
36198 }
36199
36200 ECSignature.prototype.toRSBuffer = function (buffer, offset) {
36201 buffer = buffer || Buffer.alloc(64)
36202 this.r.toBuffer(32).copy(buffer, offset)
36203 this.s.toBuffer(32).copy(buffer, offset + 32)
36204 return buffer
36205 }
36206
36207 ECSignature.prototype.toScriptSignature = function (hashType) {
36208 var hashTypeMod = hashType & ~0x80
36209 if (hashTypeMod <= 0 || hashTypeMod >= 4) throw new Error('Invalid hashType ' + hashType)
36210
36211 var hashTypeBuffer = Buffer.alloc(1)
36212 hashTypeBuffer.writeUInt8(hashType, 0)
36213
36214 return Buffer.concat([this.toDER(), hashTypeBuffer])
36215 }
36216
36217 module.exports = ECSignature
36218
36219 }).call(this,require("buffer").Buffer)
36220 },{"./types":80,"bigi":39,"bip66":41,"buffer":5,"typeforce":139}],51:[function(require,module,exports){
36221 var Buffer = require('safe-buffer').Buffer
36222 var base58check = require('bs58check')
36223 var bcrypto = require('./crypto')
36224 var createHmac = require('create-hmac')
36225 var typeforce = require('typeforce')
36226 var types = require('./types')
36227 var NETWORKS = require('./networks')
36228
36229 var BigInteger = require('bigi')
36230 var ECPair = require('./ecpair')
36231
36232 var ecurve = require('ecurve')
36233 var curve = ecurve.getCurveByName('secp256k1')
36234
36235 function HDNode (keyPair, chainCode) {
36236 typeforce(types.tuple('ECPair', types.Buffer256bit), arguments)
36237
36238 if (!keyPair.compressed) throw new TypeError('BIP32 only allows compressed keyPairs')
36239
36240 this.keyPair = keyPair
36241 this.chainCode = chainCode
36242 this.depth = 0
36243 this.index = 0
36244 this.parentFingerprint = 0x00000000
36245 }
36246
36247 HDNode.HIGHEST_BIT = 0x80000000
36248 HDNode.LENGTH = 78
36249 HDNode.MASTER_SECRET = Buffer.from('Bitcoin seed', 'utf8')
36250
36251 HDNode.fromSeedBuffer = function (seed, network) {
36252 typeforce(types.tuple(types.Buffer, types.maybe(types.Network)), arguments)
36253
36254 if (seed.length < 16) throw new TypeError('Seed should be at least 128 bits')
36255 if (seed.length > 64) throw new TypeError('Seed should be at most 512 bits')
36256
36257 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
36258 var IL = I.slice(0, 32)
36259 var IR = I.slice(32)
36260
36261 // In case IL is 0 or >= n, the master key is invalid
36262 // This is handled by the ECPair constructor
36263 var pIL = BigInteger.fromBuffer(IL)
36264 var keyPair = new ECPair(pIL, null, {
36265 network: network
36266 })
36267
36268 return new HDNode(keyPair, IR)
36269 }
36270
36271 HDNode.fromSeedHex = function (hex, network) {
36272 return HDNode.fromSeedBuffer(Buffer.from(hex, 'hex'), network)
36273 }
36274
36275 HDNode.fromBase58 = function (string, networks) {
36276 var buffer = base58check.decode(string)
36277 if (buffer.length !== 78) throw new Error('Invalid buffer length')
36278
36279 // 4 bytes: version bytes
36280 var version = buffer.readUInt32BE(0)
36281 var network
36282
36283 // list of networks?
36284 if (Array.isArray(networks)) {
36285 network = networks.filter(function (x) {
36286 return version === x.bip32.private ||
36287 version === x.bip32.public
36288 }).pop()
36289
36290 if (!network) throw new Error('Unknown network version')
36291
36292 // otherwise, assume a network object (or default to bitcoin)
36293 } else {
36294 network = networks || NETWORKS.bitcoin
36295 }
36296
36297 if (version !== network.bip32.private &&
36298 version !== network.bip32.public) throw new Error('Invalid network version')
36299
36300 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
36301 var depth = buffer[4]
36302
36303 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
36304 var parentFingerprint = buffer.readUInt32BE(5)
36305 if (depth === 0) {
36306 if (parentFingerprint !== 0x00000000) throw new Error('Invalid parent fingerprint')
36307 }
36308
36309 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
36310 // This is encoded in MSB order. (0x00000000 if master key)
36311 var index = buffer.readUInt32BE(9)
36312 if (depth === 0 && index !== 0) throw new Error('Invalid index')
36313
36314 // 32 bytes: the chain code
36315 var chainCode = buffer.slice(13, 45)
36316 var keyPair
36317
36318 // 33 bytes: private key data (0x00 + k)
36319 if (version === network.bip32.private) {
36320 if (buffer.readUInt8(45) !== 0x00) throw new Error('Invalid private key')
36321
36322 var d = BigInteger.fromBuffer(buffer.slice(46, 78))
36323 keyPair = new ECPair(d, null, { network: network })
36324
36325 // 33 bytes: public key data (0x02 + X or 0x03 + X)
36326 } else {
36327 var Q = ecurve.Point.decodeFrom(curve, buffer.slice(45, 78))
36328 // Q.compressed is assumed, if somehow this assumption is broken, `new HDNode` will throw
36329
36330 // Verify that the X coordinate in the public point corresponds to a point on the curve.
36331 // If not, the extended public key is invalid.
36332 curve.validate(Q)
36333
36334 keyPair = new ECPair(null, Q, { network: network })
36335 }
36336
36337 var hd = new HDNode(keyPair, chainCode)
36338 hd.depth = depth
36339 hd.index = index
36340 hd.parentFingerprint = parentFingerprint
36341
36342 return hd
36343 }
36344
36345 HDNode.prototype.getAddress = function () {
36346 return this.keyPair.getAddress()
36347 }
36348
36349 HDNode.prototype.getIdentifier = function () {
36350 return bcrypto.hash160(this.keyPair.getPublicKeyBuffer())
36351 }
36352
36353 HDNode.prototype.getFingerprint = function () {
36354 return this.getIdentifier().slice(0, 4)
36355 }
36356
36357 HDNode.prototype.getNetwork = function () {
36358 return this.keyPair.getNetwork()
36359 }
36360
36361 HDNode.prototype.getPublicKeyBuffer = function () {
36362 return this.keyPair.getPublicKeyBuffer()
36363 }
36364
36365 HDNode.prototype.neutered = function () {
36366 var neuteredKeyPair = new ECPair(null, this.keyPair.Q, {
36367 network: this.keyPair.network
36368 })
36369
36370 var neutered = new HDNode(neuteredKeyPair, this.chainCode)
36371 neutered.depth = this.depth
36372 neutered.index = this.index
36373 neutered.parentFingerprint = this.parentFingerprint
36374
36375 return neutered
36376 }
36377
36378 HDNode.prototype.sign = function (hash) {
36379 return this.keyPair.sign(hash)
36380 }
36381
36382 HDNode.prototype.verify = function (hash, signature) {
36383 return this.keyPair.verify(hash, signature)
36384 }
36385
36386 HDNode.prototype.toBase58 = function (__isPrivate) {
36387 if (__isPrivate !== undefined) throw new TypeError('Unsupported argument in 2.0.0')
36388
36389 // Version
36390 var network = this.keyPair.network
36391 var version = (!this.isNeutered()) ? network.bip32.private : network.bip32.public
36392 var buffer = Buffer.allocUnsafe(78)
36393
36394 // 4 bytes: version bytes
36395 buffer.writeUInt32BE(version, 0)
36396
36397 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
36398 buffer.writeUInt8(this.depth, 4)
36399
36400 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
36401 buffer.writeUInt32BE(this.parentFingerprint, 5)
36402
36403 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
36404 // This is encoded in big endian. (0x00000000 if master key)
36405 buffer.writeUInt32BE(this.index, 9)
36406
36407 // 32 bytes: the chain code
36408 this.chainCode.copy(buffer, 13)
36409
36410 // 33 bytes: the public key or private key data
36411 if (!this.isNeutered()) {
36412 // 0x00 + k for private keys
36413 buffer.writeUInt8(0, 45)
36414 this.keyPair.d.toBuffer(32).copy(buffer, 46)
36415
36416 // 33 bytes: the public key
36417 } else {
36418 // X9.62 encoding for public keys
36419 this.keyPair.getPublicKeyBuffer().copy(buffer, 45)
36420 }
36421
36422 return base58check.encode(buffer)
36423 }
36424
36425 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
36426 HDNode.prototype.derive = function (index) {
36427 typeforce(types.UInt32, index)
36428
36429 var isHardened = index >= HDNode.HIGHEST_BIT
36430 var data = Buffer.allocUnsafe(37)
36431
36432 // Hardened child
36433 if (isHardened) {
36434 if (this.isNeutered()) throw new TypeError('Could not derive hardened child key')
36435
36436 // data = 0x00 || ser256(kpar) || ser32(index)
36437 data[0] = 0x00
36438 this.keyPair.d.toBuffer(32).copy(data, 1)
36439 data.writeUInt32BE(index, 33)
36440
36441 // Normal child
36442 } else {
36443 // data = serP(point(kpar)) || ser32(index)
36444 // = serP(Kpar) || ser32(index)
36445 this.keyPair.getPublicKeyBuffer().copy(data, 0)
36446 data.writeUInt32BE(index, 33)
36447 }
36448
36449 var I = createHmac('sha512', this.chainCode).update(data).digest()
36450 var IL = I.slice(0, 32)
36451 var IR = I.slice(32)
36452
36453 var pIL = BigInteger.fromBuffer(IL)
36454
36455 // In case parse256(IL) >= n, proceed with the next value for i
36456 if (pIL.compareTo(curve.n) >= 0) {
36457 return this.derive(index + 1)
36458 }
36459
36460 // Private parent key -> private child key
36461 var derivedKeyPair
36462 if (!this.isNeutered()) {
36463 // ki = parse256(IL) + kpar (mod n)
36464 var ki = pIL.add(this.keyPair.d).mod(curve.n)
36465
36466 // In case ki == 0, proceed with the next value for i
36467 if (ki.signum() === 0) {
36468 return this.derive(index + 1)
36469 }
36470
36471 derivedKeyPair = new ECPair(ki, null, {
36472 network: this.keyPair.network
36473 })
36474
36475 // Public parent key -> public child key
36476 } else {
36477 // Ki = point(parse256(IL)) + Kpar
36478 // = G*IL + Kpar
36479 var Ki = curve.G.multiply(pIL).add(this.keyPair.Q)
36480
36481 // In case Ki is the point at infinity, proceed with the next value for i
36482 if (curve.isInfinity(Ki)) {
36483 return this.derive(index + 1)
36484 }
36485
36486 derivedKeyPair = new ECPair(null, Ki, {
36487 network: this.keyPair.network
36488 })
36489 }
36490
36491 var hd = new HDNode(derivedKeyPair, IR)
36492 hd.depth = this.depth + 1
36493 hd.index = index
36494 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
36495
36496 return hd
36497 }
36498
36499 HDNode.prototype.deriveHardened = function (index) {
36500 typeforce(types.UInt31, index)
36501
36502 // Only derives hardened private keys by default
36503 return this.derive(index + HDNode.HIGHEST_BIT)
36504 }
36505
36506 // Private === not neutered
36507 // Public === neutered
36508 HDNode.prototype.isNeutered = function () {
36509 return !(this.keyPair.d)
36510 }
36511
36512 HDNode.prototype.derivePath = function (path) {
36513 typeforce(types.BIP32Path, path)
36514
36515 var splitPath = path.split('/')
36516 if (splitPath[0] === 'm') {
36517 if (this.parentFingerprint) {
36518 throw new Error('Not a master node')
36519 }
36520
36521 splitPath = splitPath.slice(1)
36522 }
36523
36524 return splitPath.reduce(function (prevHd, indexStr) {
36525 var index
36526 if (indexStr.slice(-1) === "'") {
36527 index = parseInt(indexStr.slice(0, -1), 10)
36528 return prevHd.deriveHardened(index)
36529 } else {
36530 index = parseInt(indexStr, 10)
36531 return prevHd.derive(index)
36532 }
36533 }, this)
36534 }
36535
36536 module.exports = HDNode
36537
36538 },{"./crypto":47,"./ecpair":49,"./networks":53,"./types":80,"bigi":39,"bs58check":85,"create-hmac":90,"ecurve":94,"safe-buffer":128,"typeforce":139}],52:[function(require,module,exports){
36539 var script = require('./script')
36540
36541 var templates = require('./templates')
36542 for (var key in templates) {
36543 script[key] = templates[key]
36544 }
36545
36546 module.exports = {
36547 bufferutils: require('./bufferutils'), // TODO: remove in 4.0.0
36548
36549 Block: require('./block'),
36550 ECPair: require('./ecpair'),
36551 ECSignature: require('./ecsignature'),
36552 HDNode: require('./hdnode'),
36553 Transaction: require('./transaction'),
36554 TransactionBuilder: require('./transaction_builder'),
36555
36556 address: require('./address'),
36557 crypto: require('./crypto'),
36558 networks: require('./networks'),
36559 opcodes: require('bitcoin-ops'),
36560 script: script
36561 }
36562
36563 },{"./address":44,"./block":45,"./bufferutils":46,"./crypto":47,"./ecpair":49,"./ecsignature":50,"./hdnode":51,"./networks":53,"./script":54,"./templates":56,"./transaction":78,"./transaction_builder":79,"bitcoin-ops":42}],53:[function(require,module,exports){
36564 // https://en.bitcoin.it/wiki/List_of_address_prefixes
36565 // Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
36566
36567 module.exports = {
36568 bitcoin: {
36569 messagePrefix: '\x18Bitcoin Signed Message:\n',
36570 bech32: 'bc',
36571 bip32: {
36572 public: 0x0488b21e,
36573 private: 0x0488ade4
36574 },
36575 pubKeyHash: 0x00,
36576 scriptHash: 0x05,
36577 wif: 0x80
36578 },
36579 testnet: {
36580 messagePrefix: '\x18Bitcoin Signed Message:\n',
36581 bech32: 'tb',
36582 bip32: {
36583 public: 0x043587cf,
36584 private: 0x04358394
36585 },
36586 pubKeyHash: 0x6f,
36587 scriptHash: 0xc4,
36588 wif: 0xef
36589 },
36590 litecoin: {
36591 messagePrefix: '\x19Litecoin Signed Message:\n',
36592 bip32: {
36593 public: 0x019da462,
36594 private: 0x019d9cfe
36595 },
36596 pubKeyHash: 0x30,
36597 scriptHash: 0x32,
36598 wif: 0xb0
36599 }
36600 }
36601
36602 },{}],54:[function(require,module,exports){
36603 var Buffer = require('safe-buffer').Buffer
36604 var bip66 = require('bip66')
36605 var pushdata = require('pushdata-bitcoin')
36606 var typeforce = require('typeforce')
36607 var types = require('./types')
36608 var scriptNumber = require('./script_number')
36609
36610 var OPS = require('bitcoin-ops')
36611 var REVERSE_OPS = require('bitcoin-ops/map')
36612 var OP_INT_BASE = OPS.OP_RESERVED // OP_1 - 1
36613
36614 function isOPInt (value) {
36615 return types.Number(value) &&
36616 ((value === OPS.OP_0) ||
36617 (value >= OPS.OP_1 && value <= OPS.OP_16) ||
36618 (value === OPS.OP_1NEGATE))
36619 }
36620
36621 function isPushOnlyChunk (value) {
36622 return types.Buffer(value) || isOPInt(value)
36623 }
36624
36625 function isPushOnly (value) {
36626 return types.Array(value) && value.every(isPushOnlyChunk)
36627 }
36628
36629 function asMinimalOP (buffer) {
36630 if (buffer.length === 0) return OPS.OP_0
36631 if (buffer.length !== 1) return
36632 if (buffer[0] >= 1 && buffer[0] <= 16) return OP_INT_BASE + buffer[0]
36633 if (buffer[0] === 0x81) return OPS.OP_1NEGATE
36634 }
36635
36636 function compile (chunks) {
36637 // TODO: remove me
36638 if (Buffer.isBuffer(chunks)) return chunks
36639
36640 typeforce(types.Array, chunks)
36641
36642 var bufferSize = chunks.reduce(function (accum, chunk) {
36643 // data chunk
36644 if (Buffer.isBuffer(chunk)) {
36645 // adhere to BIP62.3, minimal push policy
36646 if (chunk.length === 1 && asMinimalOP(chunk) !== undefined) {
36647 return accum + 1
36648 }
36649
36650 return accum + pushdata.encodingLength(chunk.length) + chunk.length
36651 }
36652
36653 // opcode
36654 return accum + 1
36655 }, 0.0)
36656
36657 var buffer = Buffer.allocUnsafe(bufferSize)
36658 var offset = 0
36659
36660 chunks.forEach(function (chunk) {
36661 // data chunk
36662 if (Buffer.isBuffer(chunk)) {
36663 // adhere to BIP62.3, minimal push policy
36664 var opcode = asMinimalOP(chunk)
36665 if (opcode !== undefined) {
36666 buffer.writeUInt8(opcode, offset)
36667 offset += 1
36668 return
36669 }
36670
36671 offset += pushdata.encode(buffer, chunk.length, offset)
36672 chunk.copy(buffer, offset)
36673 offset += chunk.length
36674
36675 // opcode
36676 } else {
36677 buffer.writeUInt8(chunk, offset)
36678 offset += 1
36679 }
36680 })
36681
36682 if (offset !== buffer.length) throw new Error('Could not decode chunks')
36683 return buffer
36684 }
36685
36686 function decompile (buffer) {
36687 // TODO: remove me
36688 if (types.Array(buffer)) return buffer
36689
36690 typeforce(types.Buffer, buffer)
36691
36692 var chunks = []
36693 var i = 0
36694
36695 while (i < buffer.length) {
36696 var opcode = buffer[i]
36697
36698 // data chunk
36699 if ((opcode > OPS.OP_0) && (opcode <= OPS.OP_PUSHDATA4)) {
36700 var d = pushdata.decode(buffer, i)
36701
36702 // did reading a pushDataInt fail? empty script
36703 if (d === null) return []
36704 i += d.size
36705
36706 // attempt to read too much data? empty script
36707 if (i + d.number > buffer.length) return []
36708
36709 var data = buffer.slice(i, i + d.number)
36710 i += d.number
36711
36712 // decompile minimally
36713 var op = asMinimalOP(data)
36714 if (op !== undefined) {
36715 chunks.push(op)
36716 } else {
36717 chunks.push(data)
36718 }
36719
36720 // opcode
36721 } else {
36722 chunks.push(opcode)
36723
36724 i += 1
36725 }
36726 }
36727
36728 return chunks
36729 }
36730
36731 function toASM (chunks) {
36732 if (Buffer.isBuffer(chunks)) {
36733 chunks = decompile(chunks)
36734 }
36735
36736 return chunks.map(function (chunk) {
36737 // data?
36738 if (Buffer.isBuffer(chunk)) {
36739 var op = asMinimalOP(chunk)
36740 if (op === undefined) return chunk.toString('hex')
36741 chunk = op
36742 }
36743
36744 // opcode!
36745 return REVERSE_OPS[chunk]
36746 }).join(' ')
36747 }
36748
36749 function fromASM (asm) {
36750 typeforce(types.String, asm)
36751
36752 return compile(asm.split(' ').map(function (chunkStr) {
36753 // opcode?
36754 if (OPS[chunkStr] !== undefined) return OPS[chunkStr]
36755 typeforce(types.Hex, chunkStr)
36756
36757 // data!
36758 return Buffer.from(chunkStr, 'hex')
36759 }))
36760 }
36761
36762 function toStack (chunks) {
36763 chunks = decompile(chunks)
36764 typeforce(isPushOnly, chunks)
36765
36766 return chunks.map(function (op) {
36767 if (Buffer.isBuffer(op)) return op
36768 if (op === OPS.OP_0) return Buffer.allocUnsafe(0)
36769
36770 return scriptNumber.encode(op - OP_INT_BASE)
36771 })
36772 }
36773
36774 function isCanonicalPubKey (buffer) {
36775 if (!Buffer.isBuffer(buffer)) return false
36776 if (buffer.length < 33) return false
36777
36778 switch (buffer[0]) {
36779 case 0x02:
36780 case 0x03:
36781 return buffer.length === 33
36782 case 0x04:
36783 return buffer.length === 65
36784 }
36785
36786 return false
36787 }
36788
36789 function isDefinedHashType (hashType) {
36790 var hashTypeMod = hashType & ~0x80
36791
36792 // return hashTypeMod > SIGHASH_ALL && hashTypeMod < SIGHASH_SINGLE
36793 return hashTypeMod > 0x00 && hashTypeMod < 0x04
36794 }
36795
36796 function isCanonicalSignature (buffer) {
36797 if (!Buffer.isBuffer(buffer)) return false
36798 if (!isDefinedHashType(buffer[buffer.length - 1])) return false
36799
36800 return bip66.check(buffer.slice(0, -1))
36801 }
36802
36803 module.exports = {
36804 compile: compile,
36805 decompile: decompile,
36806 fromASM: fromASM,
36807 toASM: toASM,
36808 toStack: toStack,
36809
36810 number: require('./script_number'),
36811
36812 isCanonicalPubKey: isCanonicalPubKey,
36813 isCanonicalSignature: isCanonicalSignature,
36814 isPushOnly: isPushOnly,
36815 isDefinedHashType: isDefinedHashType
36816 }
36817
36818 },{"./script_number":55,"./types":80,"bip66":41,"bitcoin-ops":42,"bitcoin-ops/map":43,"pushdata-bitcoin":125,"safe-buffer":128,"typeforce":139}],55:[function(require,module,exports){
36819 var Buffer = require('safe-buffer').Buffer
36820
36821 function decode (buffer, maxLength, minimal) {
36822 maxLength = maxLength || 4
36823 minimal = minimal === undefined ? true : minimal
36824
36825 var length = buffer.length
36826 if (length === 0) return 0
36827 if (length > maxLength) throw new TypeError('Script number overflow')
36828 if (minimal) {
36829 if ((buffer[length - 1] & 0x7f) === 0) {
36830 if (length <= 1 || (buffer[length - 2] & 0x80) === 0) throw new Error('Non-minimally encoded script number')
36831 }
36832 }
36833
36834 // 40-bit
36835 if (length === 5) {
36836 var a = buffer.readUInt32LE(0)
36837 var b = buffer.readUInt8(4)
36838
36839 if (b & 0x80) return -(((b & ~0x80) * 0x100000000) + a)
36840 return (b * 0x100000000) + a
36841 }
36842
36843 var result = 0
36844
36845 // 32-bit / 24-bit / 16-bit / 8-bit
36846 for (var i = 0; i < length; ++i) {
36847 result |= buffer[i] << (8 * i)
36848 }
36849
36850 if (buffer[length - 1] & 0x80) return -(result & ~(0x80 << (8 * (length - 1))))
36851 return result
36852 }
36853
36854 function scriptNumSize (i) {
36855 return i > 0x7fffffff ? 5
36856 : i > 0x7fffff ? 4
36857 : i > 0x7fff ? 3
36858 : i > 0x7f ? 2
36859 : i > 0x00 ? 1
36860 : 0
36861 }
36862
36863 function encode (number) {
36864 var value = Math.abs(number)
36865 var size = scriptNumSize(value)
36866 var buffer = Buffer.allocUnsafe(size)
36867 var negative = number < 0
36868
36869 for (var i = 0; i < size; ++i) {
36870 buffer.writeUInt8(value & 0xff, i)
36871 value >>= 8
36872 }
36873
36874 if (buffer[size - 1] & 0x80) {
36875 buffer.writeUInt8(negative ? 0x80 : 0x00, size - 1)
36876 } else if (negative) {
36877 buffer[size - 1] |= 0x80
36878 }
36879
36880 return buffer
36881 }
36882
36883 module.exports = {
36884 decode: decode,
36885 encode: encode
36886 }
36887
36888 },{"safe-buffer":128}],56:[function(require,module,exports){
36889 var decompile = require('../script').decompile
36890 var multisig = require('./multisig')
36891 var nullData = require('./nulldata')
36892 var pubKey = require('./pubkey')
36893 var pubKeyHash = require('./pubkeyhash')
36894 var scriptHash = require('./scripthash')
36895 var witnessPubKeyHash = require('./witnesspubkeyhash')
36896 var witnessScriptHash = require('./witnessscripthash')
36897 var witnessCommitment = require('./witnesscommitment')
36898
36899 var types = {
36900 MULTISIG: 'multisig',
36901 NONSTANDARD: 'nonstandard',
36902 NULLDATA: 'nulldata',
36903 P2PK: 'pubkey',
36904 P2PKH: 'pubkeyhash',
36905 P2SH: 'scripthash',
36906 P2WPKH: 'witnesspubkeyhash',
36907 P2WSH: 'witnessscripthash',
36908 WITNESS_COMMITMENT: 'witnesscommitment'
36909 }
36910
36911 function classifyOutput (script) {
36912 if (witnessPubKeyHash.output.check(script)) return types.P2WPKH
36913 if (witnessScriptHash.output.check(script)) return types.P2WSH
36914 if (pubKeyHash.output.check(script)) return types.P2PKH
36915 if (scriptHash.output.check(script)) return types.P2SH
36916
36917 // XXX: optimization, below functions .decompile before use
36918 var chunks = decompile(script)
36919 if (multisig.output.check(chunks)) return types.MULTISIG
36920 if (pubKey.output.check(chunks)) return types.P2PK
36921 if (witnessCommitment.output.check(chunks)) return types.WITNESS_COMMITMENT
36922 if (nullData.output.check(chunks)) return types.NULLDATA
36923
36924 return types.NONSTANDARD
36925 }
36926
36927 function classifyInput (script, allowIncomplete) {
36928 // XXX: optimization, below functions .decompile before use
36929 var chunks = decompile(script)
36930
36931 if (pubKeyHash.input.check(chunks)) return types.P2PKH
36932 if (scriptHash.input.check(chunks, allowIncomplete)) return types.P2SH
36933 if (multisig.input.check(chunks, allowIncomplete)) return types.MULTISIG
36934 if (pubKey.input.check(chunks)) return types.P2PK
36935
36936 return types.NONSTANDARD
36937 }
36938
36939 function classifyWitness (script, allowIncomplete) {
36940 // XXX: optimization, below functions .decompile before use
36941 var chunks = decompile(script)
36942
36943 if (witnessPubKeyHash.input.check(chunks)) return types.P2WPKH
36944 if (witnessScriptHash.input.check(chunks, allowIncomplete)) return types.P2WSH
36945
36946 return types.NONSTANDARD
36947 }
36948
36949 module.exports = {
36950 classifyInput: classifyInput,
36951 classifyOutput: classifyOutput,
36952 classifyWitness: classifyWitness,
36953 multisig: multisig,
36954 nullData: nullData,
36955 pubKey: pubKey,
36956 pubKeyHash: pubKeyHash,
36957 scriptHash: scriptHash,
36958 witnessPubKeyHash: witnessPubKeyHash,
36959 witnessScriptHash: witnessScriptHash,
36960 witnessCommitment: witnessCommitment,
36961 types: types
36962 }
36963
36964 },{"../script":54,"./multisig":57,"./nulldata":60,"./pubkey":61,"./pubkeyhash":64,"./scripthash":67,"./witnesscommitment":70,"./witnesspubkeyhash":72,"./witnessscripthash":75}],57:[function(require,module,exports){
36965 module.exports = {
36966 input: require('./input'),
36967 output: require('./output')
36968 }
36969
36970 },{"./input":58,"./output":59}],58:[function(require,module,exports){
36971 // OP_0 [signatures ...]
36972
36973 var Buffer = require('safe-buffer').Buffer
36974 var bscript = require('../../script')
36975 var p2mso = require('./output')
36976 var typeforce = require('typeforce')
36977 var OPS = require('bitcoin-ops')
36978
36979 function partialSignature (value) {
36980 return value === OPS.OP_0 || bscript.isCanonicalSignature(value)
36981 }
36982
36983 function check (script, allowIncomplete) {
36984 var chunks = bscript.decompile(script)
36985 if (chunks.length < 2) return false
36986 if (chunks[0] !== OPS.OP_0) return false
36987
36988 if (allowIncomplete) {
36989 return chunks.slice(1).every(partialSignature)
36990 }
36991
36992 return chunks.slice(1).every(bscript.isCanonicalSignature)
36993 }
36994 check.toJSON = function () { return 'multisig input' }
36995
36996 var EMPTY_BUFFER = Buffer.allocUnsafe(0)
36997
36998 function encodeStack (signatures, scriptPubKey) {
36999 typeforce([partialSignature], signatures)
37000
37001 if (scriptPubKey) {
37002 var scriptData = p2mso.decode(scriptPubKey)
37003
37004 if (signatures.length < scriptData.m) {
37005 throw new TypeError('Not enough signatures provided')
37006 }
37007
37008 if (signatures.length > scriptData.pubKeys.length) {
37009 throw new TypeError('Too many signatures provided')
37010 }
37011 }
37012
37013 return [].concat(EMPTY_BUFFER, signatures.map(function (sig) {
37014 if (sig === OPS.OP_0) {
37015 return EMPTY_BUFFER
37016 }
37017 return sig
37018 }))
37019 }
37020
37021 function encode (signatures, scriptPubKey) {
37022 return bscript.compile(encodeStack(signatures, scriptPubKey))
37023 }
37024
37025 function decodeStack (stack, allowIncomplete) {
37026 typeforce(check, stack, allowIncomplete)
37027 return stack.slice(1)
37028 }
37029
37030 function decode (buffer, allowIncomplete) {
37031 var stack = bscript.decompile(buffer)
37032 return decodeStack(stack, allowIncomplete)
37033 }
37034
37035 module.exports = {
37036 check: check,
37037 decode: decode,
37038 decodeStack: decodeStack,
37039 encode: encode,
37040 encodeStack: encodeStack
37041 }
37042
37043 },{"../../script":54,"./output":59,"bitcoin-ops":42,"safe-buffer":128,"typeforce":139}],59:[function(require,module,exports){
37044 // m [pubKeys ...] n OP_CHECKMULTISIG
37045
37046 var bscript = require('../../script')
37047 var types = require('../../types')
37048 var typeforce = require('typeforce')
37049 var OPS = require('bitcoin-ops')
37050 var OP_INT_BASE = OPS.OP_RESERVED // OP_1 - 1
37051
37052 function check (script, allowIncomplete) {
37053 var chunks = bscript.decompile(script)
37054
37055 if (chunks.length < 4) return false
37056 if (chunks[chunks.length - 1] !== OPS.OP_CHECKMULTISIG) return false
37057 if (!types.Number(chunks[0])) return false
37058 if (!types.Number(chunks[chunks.length - 2])) return false
37059 var m = chunks[0] - OP_INT_BASE
37060 var n = chunks[chunks.length - 2] - OP_INT_BASE
37061
37062 if (m <= 0) return false
37063 if (n > 16) return false
37064 if (m > n) return false
37065 if (n !== chunks.length - 3) return false
37066 if (allowIncomplete) return true
37067
37068 var keys = chunks.slice(1, -2)
37069 return keys.every(bscript.isCanonicalPubKey)
37070 }
37071 check.toJSON = function () { return 'multi-sig output' }
37072
37073 function encode (m, pubKeys) {
37074 typeforce({
37075 m: types.Number,
37076 pubKeys: [bscript.isCanonicalPubKey]
37077 }, {
37078 m: m,
37079 pubKeys: pubKeys
37080 })
37081
37082 var n = pubKeys.length
37083 if (n < m) throw new TypeError('Not enough pubKeys provided')
37084
37085 return bscript.compile([].concat(
37086 OP_INT_BASE + m,
37087 pubKeys,
37088 OP_INT_BASE + n,
37089 OPS.OP_CHECKMULTISIG
37090 ))
37091 }
37092
37093 function decode (buffer, allowIncomplete) {
37094 var chunks = bscript.decompile(buffer)
37095 typeforce(check, chunks, allowIncomplete)
37096
37097 return {
37098 m: chunks[0] - OP_INT_BASE,
37099 pubKeys: chunks.slice(1, -2)
37100 }
37101 }
37102
37103 module.exports = {
37104 check: check,
37105 decode: decode,
37106 encode: encode
37107 }
37108
37109 },{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":139}],60:[function(require,module,exports){
37110 // OP_RETURN {data}
37111
37112 var bscript = require('../script')
37113 var types = require('../types')
37114 var typeforce = require('typeforce')
37115 var OPS = require('bitcoin-ops')
37116
37117 function check (script) {
37118 var buffer = bscript.compile(script)
37119
37120 return buffer.length > 1 &&
37121 buffer[0] === OPS.OP_RETURN
37122 }
37123 check.toJSON = function () { return 'null data output' }
37124
37125 function encode (data) {
37126 typeforce(types.Buffer, data)
37127
37128 return bscript.compile([OPS.OP_RETURN, data])
37129 }
37130
37131 function decode (buffer) {
37132 typeforce(check, buffer)
37133
37134 return buffer.slice(2)
37135 }
37136
37137 module.exports = {
37138 output: {
37139 check: check,
37140 decode: decode,
37141 encode: encode
37142 }
37143 }
37144
37145 },{"../script":54,"../types":80,"bitcoin-ops":42,"typeforce":139}],61:[function(require,module,exports){
37146 arguments[4][57][0].apply(exports,arguments)
37147 },{"./input":62,"./output":63,"dup":57}],62:[function(require,module,exports){
37148 // {signature}
37149
37150 var bscript = require('../../script')
37151 var typeforce = require('typeforce')
37152
37153 function check (script) {
37154 var chunks = bscript.decompile(script)
37155
37156 return chunks.length === 1 &&
37157 bscript.isCanonicalSignature(chunks[0])
37158 }
37159 check.toJSON = function () { return 'pubKey input' }
37160
37161 function encodeStack (signature) {
37162 typeforce(bscript.isCanonicalSignature, signature)
37163 return [signature]
37164 }
37165
37166 function encode (signature) {
37167 return bscript.compile(encodeStack(signature))
37168 }
37169
37170 function decodeStack (stack) {
37171 typeforce(check, stack)
37172 return stack[0]
37173 }
37174
37175 function decode (buffer) {
37176 var stack = bscript.decompile(buffer)
37177 return decodeStack(stack)
37178 }
37179
37180 module.exports = {
37181 check: check,
37182 decode: decode,
37183 decodeStack: decodeStack,
37184 encode: encode,
37185 encodeStack: encodeStack
37186 }
37187
37188 },{"../../script":54,"typeforce":139}],63:[function(require,module,exports){
37189 // {pubKey} OP_CHECKSIG
37190
37191 var bscript = require('../../script')
37192 var typeforce = require('typeforce')
37193 var OPS = require('bitcoin-ops')
37194
37195 function check (script) {
37196 var chunks = bscript.decompile(script)
37197
37198 return chunks.length === 2 &&
37199 bscript.isCanonicalPubKey(chunks[0]) &&
37200 chunks[1] === OPS.OP_CHECKSIG
37201 }
37202 check.toJSON = function () { return 'pubKey output' }
37203
37204 function encode (pubKey) {
37205 typeforce(bscript.isCanonicalPubKey, pubKey)
37206
37207 return bscript.compile([pubKey, OPS.OP_CHECKSIG])
37208 }
37209
37210 function decode (buffer) {
37211 var chunks = bscript.decompile(buffer)
37212 typeforce(check, chunks)
37213
37214 return chunks[0]
37215 }
37216
37217 module.exports = {
37218 check: check,
37219 decode: decode,
37220 encode: encode
37221 }
37222
37223 },{"../../script":54,"bitcoin-ops":42,"typeforce":139}],64:[function(require,module,exports){
37224 arguments[4][57][0].apply(exports,arguments)
37225 },{"./input":65,"./output":66,"dup":57}],65:[function(require,module,exports){
37226 // {signature} {pubKey}
37227
37228 var bscript = require('../../script')
37229 var typeforce = require('typeforce')
37230
37231 function check (script) {
37232 var chunks = bscript.decompile(script)
37233
37234 return chunks.length === 2 &&
37235 bscript.isCanonicalSignature(chunks[0]) &&
37236 bscript.isCanonicalPubKey(chunks[1])
37237 }
37238 check.toJSON = function () { return 'pubKeyHash input' }
37239
37240 function encodeStack (signature, pubKey) {
37241 typeforce({
37242 signature: bscript.isCanonicalSignature,
37243 pubKey: bscript.isCanonicalPubKey
37244 }, {
37245 signature: signature,
37246 pubKey: pubKey
37247 })
37248
37249 return [signature, pubKey]
37250 }
37251
37252 function encode (signature, pubKey) {
37253 return bscript.compile(encodeStack(signature, pubKey))
37254 }
37255
37256 function decodeStack (stack) {
37257 typeforce(check, stack)
37258
37259 return {
37260 signature: stack[0],
37261 pubKey: stack[1]
37262 }
37263 }
37264
37265 function decode (buffer) {
37266 var stack = bscript.decompile(buffer)
37267 return decodeStack(stack)
37268 }
37269
37270 module.exports = {
37271 check: check,
37272 decode: decode,
37273 decodeStack: decodeStack,
37274 encode: encode,
37275 encodeStack: encodeStack
37276 }
37277
37278 },{"../../script":54,"typeforce":139}],66:[function(require,module,exports){
37279 // OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
37280
37281 var bscript = require('../../script')
37282 var types = require('../../types')
37283 var typeforce = require('typeforce')
37284 var OPS = require('bitcoin-ops')
37285
37286 function check (script) {
37287 var buffer = bscript.compile(script)
37288
37289 return buffer.length === 25 &&
37290 buffer[0] === OPS.OP_DUP &&
37291 buffer[1] === OPS.OP_HASH160 &&
37292 buffer[2] === 0x14 &&
37293 buffer[23] === OPS.OP_EQUALVERIFY &&
37294 buffer[24] === OPS.OP_CHECKSIG
37295 }
37296 check.toJSON = function () { return 'pubKeyHash output' }
37297
37298 function encode (pubKeyHash) {
37299 typeforce(types.Hash160bit, pubKeyHash)
37300
37301 return bscript.compile([
37302 OPS.OP_DUP,
37303 OPS.OP_HASH160,
37304 pubKeyHash,
37305 OPS.OP_EQUALVERIFY,
37306 OPS.OP_CHECKSIG
37307 ])
37308 }
37309
37310 function decode (buffer) {
37311 typeforce(check, buffer)
37312
37313 return buffer.slice(3, 23)
37314 }
37315
37316 module.exports = {
37317 check: check,
37318 decode: decode,
37319 encode: encode
37320 }
37321
37322 },{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":139}],67:[function(require,module,exports){
37323 arguments[4][57][0].apply(exports,arguments)
37324 },{"./input":68,"./output":69,"dup":57}],68:[function(require,module,exports){
37325 // <scriptSig> {serialized scriptPubKey script}
37326
37327 var Buffer = require('safe-buffer').Buffer
37328 var bscript = require('../../script')
37329 var typeforce = require('typeforce')
37330
37331 var p2ms = require('../multisig/')
37332 var p2pk = require('../pubkey/')
37333 var p2pkh = require('../pubkeyhash/')
37334 var p2wpkho = require('../witnesspubkeyhash/output')
37335 var p2wsho = require('../witnessscripthash/output')
37336
37337 function check (script, allowIncomplete) {
37338 var chunks = bscript.decompile(script)
37339 if (chunks.length < 1) return false
37340
37341 var lastChunk = chunks[chunks.length - 1]
37342 if (!Buffer.isBuffer(lastChunk)) return false
37343
37344 var scriptSigChunks = bscript.decompile(bscript.compile(chunks.slice(0, -1)))
37345 var redeemScriptChunks = bscript.decompile(lastChunk)
37346
37347 // is redeemScript a valid script?
37348 if (redeemScriptChunks.length === 0) return false
37349
37350 // is redeemScriptSig push only?
37351 if (!bscript.isPushOnly(scriptSigChunks)) return false
37352
37353 // is witness?
37354 if (chunks.length === 1) {
37355 return p2wsho.check(redeemScriptChunks) ||
37356 p2wpkho.check(redeemScriptChunks)
37357 }
37358
37359 // match types
37360 if (p2pkh.input.check(scriptSigChunks) &&
37361 p2pkh.output.check(redeemScriptChunks)) return true
37362
37363 if (p2ms.input.check(scriptSigChunks, allowIncomplete) &&
37364 p2ms.output.check(redeemScriptChunks)) return true
37365
37366 if (p2pk.input.check(scriptSigChunks) &&
37367 p2pk.output.check(redeemScriptChunks)) return true
37368
37369 return false
37370 }
37371 check.toJSON = function () { return 'scriptHash input' }
37372
37373 function encodeStack (redeemScriptStack, redeemScript) {
37374 var serializedScriptPubKey = bscript.compile(redeemScript)
37375
37376 return [].concat(redeemScriptStack, serializedScriptPubKey)
37377 }
37378
37379 function encode (redeemScriptSig, redeemScript) {
37380 var redeemScriptStack = bscript.decompile(redeemScriptSig)
37381
37382 return bscript.compile(encodeStack(redeemScriptStack, redeemScript))
37383 }
37384
37385 function decodeStack (stack) {
37386 typeforce(check, stack)
37387
37388 return {
37389 redeemScriptStack: stack.slice(0, -1),
37390 redeemScript: stack[stack.length - 1]
37391 }
37392 }
37393
37394 function decode (buffer) {
37395 var stack = bscript.decompile(buffer)
37396 var result = decodeStack(stack)
37397 result.redeemScriptSig = bscript.compile(result.redeemScriptStack)
37398 delete result.redeemScriptStack
37399 return result
37400 }
37401
37402 module.exports = {
37403 check: check,
37404 decode: decode,
37405 decodeStack: decodeStack,
37406 encode: encode,
37407 encodeStack: encodeStack
37408 }
37409
37410 },{"../../script":54,"../multisig/":57,"../pubkey/":61,"../pubkeyhash/":64,"../witnesspubkeyhash/output":74,"../witnessscripthash/output":77,"safe-buffer":128,"typeforce":139}],69:[function(require,module,exports){
37411 // OP_HASH160 {scriptHash} OP_EQUAL
37412
37413 var bscript = require('../../script')
37414 var types = require('../../types')
37415 var typeforce = require('typeforce')
37416 var OPS = require('bitcoin-ops')
37417
37418 function check (script) {
37419 var buffer = bscript.compile(script)
37420
37421 return buffer.length === 23 &&
37422 buffer[0] === OPS.OP_HASH160 &&
37423 buffer[1] === 0x14 &&
37424 buffer[22] === OPS.OP_EQUAL
37425 }
37426 check.toJSON = function () { return 'scriptHash output' }
37427
37428 function encode (scriptHash) {
37429 typeforce(types.Hash160bit, scriptHash)
37430
37431 return bscript.compile([OPS.OP_HASH160, scriptHash, OPS.OP_EQUAL])
37432 }
37433
37434 function decode (buffer) {
37435 typeforce(check, buffer)
37436
37437 return buffer.slice(2, 22)
37438 }
37439
37440 module.exports = {
37441 check: check,
37442 decode: decode,
37443 encode: encode
37444 }
37445
37446 },{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":139}],70:[function(require,module,exports){
37447 module.exports = {
37448 output: require('./output')
37449 }
37450
37451 },{"./output":71}],71:[function(require,module,exports){
37452 // OP_RETURN {aa21a9ed} {commitment}
37453
37454 var Buffer = require('safe-buffer').Buffer
37455 var bscript = require('../../script')
37456 var types = require('../../types')
37457 var typeforce = require('typeforce')
37458 var OPS = require('bitcoin-ops')
37459
37460 var HEADER = Buffer.from('aa21a9ed', 'hex')
37461
37462 function check (script) {
37463 var buffer = bscript.compile(script)
37464
37465 return buffer.length > 37 &&
37466 buffer[0] === OPS.OP_RETURN &&
37467 buffer[1] === 0x24 &&
37468 buffer.slice(2, 6).equals(HEADER)
37469 }
37470
37471 check.toJSON = function () { return 'Witness commitment output' }
37472
37473 function encode (commitment) {
37474 typeforce(types.Hash256bit, commitment)
37475
37476 var buffer = Buffer.allocUnsafe(36)
37477 HEADER.copy(buffer, 0)
37478 commitment.copy(buffer, 4)
37479
37480 return bscript.compile([OPS.OP_RETURN, buffer])
37481 }
37482
37483 function decode (buffer) {
37484 typeforce(check, buffer)
37485
37486 return bscript.decompile(buffer)[1].slice(4, 36)
37487 }
37488
37489 module.exports = {
37490 check: check,
37491 decode: decode,
37492 encode: encode
37493 }
37494
37495 },{"../../script":54,"../../types":80,"bitcoin-ops":42,"safe-buffer":128,"typeforce":139}],72:[function(require,module,exports){
37496 arguments[4][57][0].apply(exports,arguments)
37497 },{"./input":73,"./output":74,"dup":57}],73:[function(require,module,exports){
37498 // {signature} {pubKey}
37499
37500 var bscript = require('../../script')
37501 var typeforce = require('typeforce')
37502
37503 function isCompressedCanonicalPubKey (pubKey) {
37504 return bscript.isCanonicalPubKey(pubKey) && pubKey.length === 33
37505 }
37506
37507 function check (script) {
37508 var chunks = bscript.decompile(script)
37509
37510 return chunks.length === 2 &&
37511 bscript.isCanonicalSignature(chunks[0]) &&
37512 isCompressedCanonicalPubKey(chunks[1])
37513 }
37514 check.toJSON = function () { return 'witnessPubKeyHash input' }
37515
37516 function encodeStack (signature, pubKey) {
37517 typeforce({
37518 signature: bscript.isCanonicalSignature,
37519 pubKey: isCompressedCanonicalPubKey
37520 }, {
37521 signature: signature,
37522 pubKey: pubKey
37523 })
37524
37525 return [signature, pubKey]
37526 }
37527
37528 function decodeStack (stack) {
37529 typeforce(check, stack)
37530
37531 return {
37532 signature: stack[0],
37533 pubKey: stack[1]
37534 }
37535 }
37536
37537 module.exports = {
37538 check: check,
37539 decodeStack: decodeStack,
37540 encodeStack: encodeStack
37541 }
37542
37543 },{"../../script":54,"typeforce":139}],74:[function(require,module,exports){
37544 // OP_0 {pubKeyHash}
37545
37546 var bscript = require('../../script')
37547 var types = require('../../types')
37548 var typeforce = require('typeforce')
37549 var OPS = require('bitcoin-ops')
37550
37551 function check (script) {
37552 var buffer = bscript.compile(script)
37553
37554 return buffer.length === 22 &&
37555 buffer[0] === OPS.OP_0 &&
37556 buffer[1] === 0x14
37557 }
37558 check.toJSON = function () { return 'Witness pubKeyHash output' }
37559
37560 function encode (pubKeyHash) {
37561 typeforce(types.Hash160bit, pubKeyHash)
37562
37563 return bscript.compile([OPS.OP_0, pubKeyHash])
37564 }
37565
37566 function decode (buffer) {
37567 typeforce(check, buffer)
37568
37569 return buffer.slice(2)
37570 }
37571
37572 module.exports = {
37573 check: check,
37574 decode: decode,
37575 encode: encode
37576 }
37577
37578 },{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":139}],75:[function(require,module,exports){
37579 arguments[4][57][0].apply(exports,arguments)
37580 },{"./input":76,"./output":77,"dup":57}],76:[function(require,module,exports){
37581 (function (Buffer){
37582 // <scriptSig> {serialized scriptPubKey script}
37583
37584 var bscript = require('../../script')
37585 var types = require('../../types')
37586 var typeforce = require('typeforce')
37587
37588 var p2ms = require('../multisig/')
37589 var p2pk = require('../pubkey/')
37590 var p2pkh = require('../pubkeyhash/')
37591
37592 function check (chunks, allowIncomplete) {
37593 typeforce(types.Array, chunks)
37594 if (chunks.length < 1) return false
37595
37596 var witnessScript = chunks[chunks.length - 1]
37597 if (!Buffer.isBuffer(witnessScript)) return false
37598
37599 var witnessScriptChunks = bscript.decompile(witnessScript)
37600
37601 // is witnessScript a valid script?
37602 if (witnessScriptChunks.length === 0) return false
37603
37604 var witnessRawScriptSig = bscript.compile(chunks.slice(0, -1))
37605
37606 // match types
37607 if (p2pkh.input.check(witnessRawScriptSig) &&
37608 p2pkh.output.check(witnessScriptChunks)) return true
37609
37610 if (p2ms.input.check(witnessRawScriptSig, allowIncomplete) &&
37611 p2ms.output.check(witnessScriptChunks)) return true
37612
37613 if (p2pk.input.check(witnessRawScriptSig) &&
37614 p2pk.output.check(witnessScriptChunks)) return true
37615
37616 return false
37617 }
37618 check.toJSON = function () { return 'witnessScriptHash input' }
37619
37620 function encodeStack (witnessData, witnessScript) {
37621 typeforce({
37622 witnessData: [types.Buffer],
37623 witnessScript: types.Buffer
37624 }, {
37625 witnessData: witnessData,
37626 witnessScript: witnessScript
37627 })
37628
37629 return [].concat(witnessData, witnessScript)
37630 }
37631
37632 function decodeStack (chunks) {
37633 typeforce(check, chunks)
37634 return {
37635 witnessData: chunks.slice(0, -1),
37636 witnessScript: chunks[chunks.length - 1]
37637 }
37638 }
37639
37640 module.exports = {
37641 check: check,
37642 decodeStack: decodeStack,
37643 encodeStack: encodeStack
37644 }
37645
37646 }).call(this,{"isBuffer":require("../../../../../../../../.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
37647 },{"../../../../../../../../.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/is-buffer/index.js":10,"../../script":54,"../../types":80,"../multisig/":57,"../pubkey/":61,"../pubkeyhash/":64,"typeforce":139}],77:[function(require,module,exports){
37648 // OP_0 {scriptHash}
37649
37650 var bscript = require('../../script')
37651 var types = require('../../types')
37652 var typeforce = require('typeforce')
37653 var OPS = require('bitcoin-ops')
37654
37655 function check (script) {
37656 var buffer = bscript.compile(script)
37657
37658 return buffer.length === 34 &&
37659 buffer[0] === OPS.OP_0 &&
37660 buffer[1] === 0x20
37661 }
37662 check.toJSON = function () { return 'Witness scriptHash output' }
37663
37664 function encode (scriptHash) {
37665 typeforce(types.Hash256bit, scriptHash)
37666
37667 return bscript.compile([OPS.OP_0, scriptHash])
37668 }
37669
37670 function decode (buffer) {
37671 typeforce(check, buffer)
37672
37673 return buffer.slice(2)
37674 }
37675
37676 module.exports = {
37677 check: check,
37678 decode: decode,
37679 encode: encode
37680 }
37681
37682 },{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":139}],78:[function(require,module,exports){
37683 var Buffer = require('safe-buffer').Buffer
37684 var bcrypto = require('./crypto')
37685 var bscript = require('./script')
37686 var bufferutils = require('./bufferutils')
37687 var opcodes = require('bitcoin-ops')
37688 var typeforce = require('typeforce')
37689 var types = require('./types')
37690 var varuint = require('varuint-bitcoin')
37691
37692 function varSliceSize (someScript) {
37693 var length = someScript.length
37694
37695 return varuint.encodingLength(length) + length
37696 }
37697
37698 function vectorSize (someVector) {
37699 var length = someVector.length
37700
37701 return varuint.encodingLength(length) + someVector.reduce(function (sum, witness) {
37702 return sum + varSliceSize(witness)
37703 }, 0)
37704 }
37705
37706 function Transaction () {
37707 this.version = 1
37708 this.locktime = 0
37709 this.ins = []
37710 this.outs = []
37711 }
37712
37713 Transaction.DEFAULT_SEQUENCE = 0xffffffff
37714 Transaction.SIGHASH_ALL = 0x01
37715 Transaction.SIGHASH_NONE = 0x02
37716 Transaction.SIGHASH_SINGLE = 0x03
37717 Transaction.SIGHASH_ANYONECANPAY = 0x80
37718 Transaction.ADVANCED_TRANSACTION_MARKER = 0x00
37719 Transaction.ADVANCED_TRANSACTION_FLAG = 0x01
37720
37721 var EMPTY_SCRIPT = Buffer.allocUnsafe(0)
37722 var EMPTY_WITNESS = []
37723 var ZERO = Buffer.from('0000000000000000000000000000000000000000000000000000000000000000', 'hex')
37724 var ONE = Buffer.from('0000000000000000000000000000000000000000000000000000000000000001', 'hex')
37725 var VALUE_UINT64_MAX = Buffer.from('ffffffffffffffff', 'hex')
37726 var BLANK_OUTPUT = {
37727 script: EMPTY_SCRIPT,
37728 valueBuffer: VALUE_UINT64_MAX
37729 }
37730
37731 Transaction.fromBuffer = function (buffer, __noStrict) {
37732 var offset = 0
37733 function readSlice (n) {
37734 offset += n
37735 return buffer.slice(offset - n, offset)
37736 }
37737
37738 function readUInt32 () {
37739 var i = buffer.readUInt32LE(offset)
37740 offset += 4
37741 return i
37742 }
37743
37744 function readInt32 () {
37745 var i = buffer.readInt32LE(offset)
37746 offset += 4
37747 return i
37748 }
37749
37750 function readUInt64 () {
37751 var i = bufferutils.readUInt64LE(buffer, offset)
37752 offset += 8
37753 return i
37754 }
37755
37756 function readVarInt () {
37757 var vi = varuint.decode(buffer, offset)
37758 offset += varuint.decode.bytes
37759 return vi
37760 }
37761
37762 function readVarSlice () {
37763 return readSlice(readVarInt())
37764 }
37765
37766 function readVector () {
37767 var count = readVarInt()
37768 var vector = []
37769 for (var i = 0; i < count; i++) vector.push(readVarSlice())
37770 return vector
37771 }
37772
37773 var tx = new Transaction()
37774 tx.version = readInt32()
37775
37776 var marker = buffer.readUInt8(offset)
37777 var flag = buffer.readUInt8(offset + 1)
37778
37779 var hasWitnesses = false
37780 if (marker === Transaction.ADVANCED_TRANSACTION_MARKER &&
37781 flag === Transaction.ADVANCED_TRANSACTION_FLAG) {
37782 offset += 2
37783 hasWitnesses = true
37784 }
37785
37786 var vinLen = readVarInt()
37787 for (var i = 0; i < vinLen; ++i) {
37788 tx.ins.push({
37789 hash: readSlice(32),
37790 index: readUInt32(),
37791 script: readVarSlice(),
37792 sequence: readUInt32(),
37793 witness: EMPTY_WITNESS
37794 })
37795 }
37796
37797 var voutLen = readVarInt()
37798 for (i = 0; i < voutLen; ++i) {
37799 tx.outs.push({
37800 value: readUInt64(),
37801 script: readVarSlice()
37802 })
37803 }
37804
37805 if (hasWitnesses) {
37806 for (i = 0; i < vinLen; ++i) {
37807 tx.ins[i].witness = readVector()
37808 }
37809
37810 // was this pointless?
37811 if (!tx.hasWitnesses()) throw new Error('Transaction has superfluous witness data')
37812 }
37813
37814 tx.locktime = readUInt32()
37815
37816 if (__noStrict) return tx
37817 if (offset !== buffer.length) throw new Error('Transaction has unexpected data')
37818
37819 return tx
37820 }
37821
37822 Transaction.fromHex = function (hex) {
37823 return Transaction.fromBuffer(Buffer.from(hex, 'hex'))
37824 }
37825
37826 Transaction.isCoinbaseHash = function (buffer) {
37827 typeforce(types.Hash256bit, buffer)
37828 for (var i = 0; i < 32; ++i) {
37829 if (buffer[i] !== 0) return false
37830 }
37831 return true
37832 }
37833
37834 Transaction.prototype.isCoinbase = function () {
37835 return this.ins.length === 1 && Transaction.isCoinbaseHash(this.ins[0].hash)
37836 }
37837
37838 Transaction.prototype.addInput = function (hash, index, sequence, scriptSig) {
37839 typeforce(types.tuple(
37840 types.Hash256bit,
37841 types.UInt32,
37842 types.maybe(types.UInt32),
37843 types.maybe(types.Buffer)
37844 ), arguments)
37845
37846 if (types.Null(sequence)) {
37847 sequence = Transaction.DEFAULT_SEQUENCE
37848 }
37849
37850 // Add the input and return the input's index
37851 return (this.ins.push({
37852 hash: hash,
37853 index: index,
37854 script: scriptSig || EMPTY_SCRIPT,
37855 sequence: sequence,
37856 witness: EMPTY_WITNESS
37857 }) - 1)
37858 }
37859
37860 Transaction.prototype.addOutput = function (scriptPubKey, value) {
37861 typeforce(types.tuple(types.Buffer, types.Satoshi), arguments)
37862
37863 // Add the output and return the output's index
37864 return (this.outs.push({
37865 script: scriptPubKey,
37866 value: value
37867 }) - 1)
37868 }
37869
37870 Transaction.prototype.hasWitnesses = function () {
37871 return this.ins.some(function (x) {
37872 return x.witness.length !== 0
37873 })
37874 }
37875
37876 Transaction.prototype.weight = function () {
37877 var base = this.__byteLength(false)
37878 var total = this.__byteLength(true)
37879 return base * 3 + total
37880 }
37881
37882 Transaction.prototype.virtualSize = function () {
37883 return Math.ceil(this.weight() / 4)
37884 }
37885
37886 Transaction.prototype.byteLength = function () {
37887 return this.__byteLength(true)
37888 }
37889
37890 Transaction.prototype.__byteLength = function (__allowWitness) {
37891 var hasWitnesses = __allowWitness && this.hasWitnesses()
37892
37893 return (
37894 (hasWitnesses ? 10 : 8) +
37895 varuint.encodingLength(this.ins.length) +
37896 varuint.encodingLength(this.outs.length) +
37897 this.ins.reduce(function (sum, input) { return sum + 40 + varSliceSize(input.script) }, 0) +
37898 this.outs.reduce(function (sum, output) { return sum + 8 + varSliceSize(output.script) }, 0) +
37899 (hasWitnesses ? this.ins.reduce(function (sum, input) { return sum + vectorSize(input.witness) }, 0) : 0)
37900 )
37901 }
37902
37903 Transaction.prototype.clone = function () {
37904 var newTx = new Transaction()
37905 newTx.version = this.version
37906 newTx.locktime = this.locktime
37907
37908 newTx.ins = this.ins.map(function (txIn) {
37909 return {
37910 hash: txIn.hash,
37911 index: txIn.index,
37912 script: txIn.script,
37913 sequence: txIn.sequence,
37914 witness: txIn.witness
37915 }
37916 })
37917
37918 newTx.outs = this.outs.map(function (txOut) {
37919 return {
37920 script: txOut.script,
37921 value: txOut.value
37922 }
37923 })
37924
37925 return newTx
37926 }
37927
37928 /**
37929 * Hash transaction for signing a specific input.
37930 *
37931 * Bitcoin uses a different hash for each signed transaction input.
37932 * This method copies the transaction, makes the necessary changes based on the
37933 * hashType, and then hashes the result.
37934 * This hash can then be used to sign the provided transaction input.
37935 */
37936 Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
37937 typeforce(types.tuple(types.UInt32, types.Buffer, /* types.UInt8 */ types.Number), arguments)
37938
37939 // https://github.com/bitcoin/bitcoin/blob/master/src/test/sighash_tests.cpp#L29
37940 if (inIndex >= this.ins.length) return ONE
37941
37942 // ignore OP_CODESEPARATOR
37943 var ourScript = bscript.compile(bscript.decompile(prevOutScript).filter(function (x) {
37944 return x !== opcodes.OP_CODESEPARATOR
37945 }))
37946
37947 var txTmp = this.clone()
37948
37949 // SIGHASH_NONE: ignore all outputs? (wildcard payee)
37950 if ((hashType & 0x1f) === Transaction.SIGHASH_NONE) {
37951 txTmp.outs = []
37952
37953 // ignore sequence numbers (except at inIndex)
37954 txTmp.ins.forEach(function (input, i) {
37955 if (i === inIndex) return
37956
37957 input.sequence = 0
37958 })
37959
37960 // SIGHASH_SINGLE: ignore all outputs, except at the same index?
37961 } else if ((hashType & 0x1f) === Transaction.SIGHASH_SINGLE) {
37962 // https://github.com/bitcoin/bitcoin/blob/master/src/test/sighash_tests.cpp#L60
37963 if (inIndex >= this.outs.length) return ONE
37964
37965 // truncate outputs after
37966 txTmp.outs.length = inIndex + 1
37967
37968 // "blank" outputs before
37969 for (var i = 0; i < inIndex; i++) {
37970 txTmp.outs[i] = BLANK_OUTPUT
37971 }
37972
37973 // ignore sequence numbers (except at inIndex)
37974 txTmp.ins.forEach(function (input, y) {
37975 if (y === inIndex) return
37976
37977 input.sequence = 0
37978 })
37979 }
37980
37981 // SIGHASH_ANYONECANPAY: ignore inputs entirely?
37982 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
37983 txTmp.ins = [txTmp.ins[inIndex]]
37984 txTmp.ins[0].script = ourScript
37985
37986 // SIGHASH_ALL: only ignore input scripts
37987 } else {
37988 // "blank" others input scripts
37989 txTmp.ins.forEach(function (input) { input.script = EMPTY_SCRIPT })
37990 txTmp.ins[inIndex].script = ourScript
37991 }
37992
37993 // serialize and hash
37994 var buffer = Buffer.allocUnsafe(txTmp.__byteLength(false) + 4)
37995 buffer.writeInt32LE(hashType, buffer.length - 4)
37996 txTmp.__toBuffer(buffer, 0, false)
37997
37998 return bcrypto.hash256(buffer)
37999 }
38000
38001 Transaction.prototype.hashForWitnessV0 = function (inIndex, prevOutScript, value, hashType) {
38002 typeforce(types.tuple(types.UInt32, types.Buffer, types.Satoshi, types.UInt32), arguments)
38003
38004 var tbuffer, toffset
38005 function writeSlice (slice) { toffset += slice.copy(tbuffer, toffset) }
38006 function writeUInt32 (i) { toffset = tbuffer.writeUInt32LE(i, toffset) }
38007 function writeUInt64 (i) { toffset = bufferutils.writeUInt64LE(tbuffer, i, toffset) }
38008 function writeVarInt (i) {
38009 varuint.encode(i, tbuffer, toffset)
38010 toffset += varuint.encode.bytes
38011 }
38012 function writeVarSlice (slice) { writeVarInt(slice.length); writeSlice(slice) }
38013
38014 var hashOutputs = ZERO
38015 var hashPrevouts = ZERO
38016 var hashSequence = ZERO
38017
38018 if (!(hashType & Transaction.SIGHASH_ANYONECANPAY)) {
38019 tbuffer = Buffer.allocUnsafe(36 * this.ins.length)
38020 toffset = 0
38021
38022 this.ins.forEach(function (txIn) {
38023 writeSlice(txIn.hash)
38024 writeUInt32(txIn.index)
38025 })
38026
38027 hashPrevouts = bcrypto.hash256(tbuffer)
38028 }
38029
38030 if (!(hashType & Transaction.SIGHASH_ANYONECANPAY) &&
38031 (hashType & 0x1f) !== Transaction.SIGHASH_SINGLE &&
38032 (hashType & 0x1f) !== Transaction.SIGHASH_NONE) {
38033 tbuffer = Buffer.allocUnsafe(4 * this.ins.length)
38034 toffset = 0
38035
38036 this.ins.forEach(function (txIn) {
38037 writeUInt32(txIn.sequence)
38038 })
38039
38040 hashSequence = bcrypto.hash256(tbuffer)
38041 }
38042
38043 if ((hashType & 0x1f) !== Transaction.SIGHASH_SINGLE &&
38044 (hashType & 0x1f) !== Transaction.SIGHASH_NONE) {
38045 var txOutsSize = this.outs.reduce(function (sum, output) {
38046 return sum + 8 + varSliceSize(output.script)
38047 }, 0)
38048
38049 tbuffer = Buffer.allocUnsafe(txOutsSize)
38050 toffset = 0
38051
38052 this.outs.forEach(function (out) {
38053 writeUInt64(out.value)
38054 writeVarSlice(out.script)
38055 })
38056
38057 hashOutputs = bcrypto.hash256(tbuffer)
38058 } else if ((hashType & 0x1f) === Transaction.SIGHASH_SINGLE && inIndex < this.outs.length) {
38059 var output = this.outs[inIndex]
38060
38061 tbuffer = Buffer.allocUnsafe(8 + varSliceSize(output.script))
38062 toffset = 0
38063 writeUInt64(output.value)
38064 writeVarSlice(output.script)
38065
38066 hashOutputs = bcrypto.hash256(tbuffer)
38067 }
38068
38069 tbuffer = Buffer.allocUnsafe(156 + varSliceSize(prevOutScript))
38070 toffset = 0
38071
38072 var input = this.ins[inIndex]
38073 writeUInt32(this.version)
38074 writeSlice(hashPrevouts)
38075 writeSlice(hashSequence)
38076 writeSlice(input.hash)
38077 writeUInt32(input.index)
38078 writeVarSlice(prevOutScript)
38079 writeUInt64(value)
38080 writeUInt32(input.sequence)
38081 writeSlice(hashOutputs)
38082 writeUInt32(this.locktime)
38083 writeUInt32(hashType)
38084 return bcrypto.hash256(tbuffer)
38085 }
38086
38087 Transaction.prototype.getHash = function () {
38088 return bcrypto.hash256(this.__toBuffer(undefined, undefined, false))
38089 }
38090
38091 Transaction.prototype.getId = function () {
38092 // transaction hash's are displayed in reverse order
38093 return this.getHash().reverse().toString('hex')
38094 }
38095
38096 Transaction.prototype.toBuffer = function (buffer, initialOffset) {
38097 return this.__toBuffer(buffer, initialOffset, true)
38098 }
38099
38100 Transaction.prototype.__toBuffer = function (buffer, initialOffset, __allowWitness) {
38101 if (!buffer) buffer = Buffer.allocUnsafe(this.__byteLength(__allowWitness))
38102
38103 var offset = initialOffset || 0
38104 function writeSlice (slice) { offset += slice.copy(buffer, offset) }
38105 function writeUInt8 (i) { offset = buffer.writeUInt8(i, offset) }
38106 function writeUInt32 (i) { offset = buffer.writeUInt32LE(i, offset) }
38107 function writeInt32 (i) { offset = buffer.writeInt32LE(i, offset) }
38108 function writeUInt64 (i) { offset = bufferutils.writeUInt64LE(buffer, i, offset) }
38109 function writeVarInt (i) {
38110 varuint.encode(i, buffer, offset)
38111 offset += varuint.encode.bytes
38112 }
38113 function writeVarSlice (slice) { writeVarInt(slice.length); writeSlice(slice) }
38114 function writeVector (vector) { writeVarInt(vector.length); vector.forEach(writeVarSlice) }
38115
38116 writeInt32(this.version)
38117
38118 var hasWitnesses = __allowWitness && this.hasWitnesses()
38119
38120 if (hasWitnesses) {
38121 writeUInt8(Transaction.ADVANCED_TRANSACTION_MARKER)
38122 writeUInt8(Transaction.ADVANCED_TRANSACTION_FLAG)
38123 }
38124
38125 writeVarInt(this.ins.length)
38126
38127 this.ins.forEach(function (txIn) {
38128 writeSlice(txIn.hash)
38129 writeUInt32(txIn.index)
38130 writeVarSlice(txIn.script)
38131 writeUInt32(txIn.sequence)
38132 })
38133
38134 writeVarInt(this.outs.length)
38135 this.outs.forEach(function (txOut) {
38136 if (!txOut.valueBuffer) {
38137 writeUInt64(txOut.value)
38138 } else {
38139 writeSlice(txOut.valueBuffer)
38140 }
38141
38142 writeVarSlice(txOut.script)
38143 })
38144
38145 if (hasWitnesses) {
38146 this.ins.forEach(function (input) {
38147 writeVector(input.witness)
38148 })
38149 }
38150
38151 writeUInt32(this.locktime)
38152
38153 // avoid slicing unless necessary
38154 if (initialOffset !== undefined) return buffer.slice(initialOffset, offset)
38155 return buffer
38156 }
38157
38158 Transaction.prototype.toHex = function () {
38159 return this.toBuffer().toString('hex')
38160 }
38161
38162 Transaction.prototype.setInputScript = function (index, scriptSig) {
38163 typeforce(types.tuple(types.Number, types.Buffer), arguments)
38164
38165 this.ins[index].script = scriptSig
38166 }
38167
38168 Transaction.prototype.setWitness = function (index, witness) {
38169 typeforce(types.tuple(types.Number, [types.Buffer]), arguments)
38170
38171 this.ins[index].witness = witness
38172 }
38173
38174 module.exports = Transaction
38175
38176 },{"./bufferutils":46,"./crypto":47,"./script":54,"./types":80,"bitcoin-ops":42,"safe-buffer":128,"typeforce":139,"varuint-bitcoin":141}],79:[function(require,module,exports){
38177 var Buffer = require('safe-buffer').Buffer
38178 var baddress = require('./address')
38179 var bcrypto = require('./crypto')
38180 var bscript = require('./script')
38181 var btemplates = require('./templates')
38182 var networks = require('./networks')
38183 var ops = require('bitcoin-ops')
38184 var typeforce = require('typeforce')
38185 var types = require('./types')
38186 var scriptTypes = btemplates.types
38187 var SIGNABLE = [btemplates.types.P2PKH, btemplates.types.P2PK, btemplates.types.MULTISIG]
38188 var P2SH = SIGNABLE.concat([btemplates.types.P2WPKH, btemplates.types.P2WSH])
38189
38190 var ECPair = require('./ecpair')
38191 var ECSignature = require('./ecsignature')
38192 var Transaction = require('./transaction')
38193
38194 function supportedType (type) {
38195 return SIGNABLE.indexOf(type) !== -1
38196 }
38197
38198 function supportedP2SHType (type) {
38199 return P2SH.indexOf(type) !== -1
38200 }
38201
38202 function extractChunks (type, chunks, script) {
38203 var pubKeys = []
38204 var signatures = []
38205 switch (type) {
38206 case scriptTypes.P2PKH:
38207 // if (redeemScript) throw new Error('Nonstandard... P2SH(P2PKH)')
38208 pubKeys = chunks.slice(1)
38209 signatures = chunks.slice(0, 1)
38210 break
38211
38212 case scriptTypes.P2PK:
38213 pubKeys[0] = script ? btemplates.pubKey.output.decode(script) : undefined
38214 signatures = chunks.slice(0, 1)
38215 break
38216
38217 case scriptTypes.MULTISIG:
38218 if (script) {
38219 var multisig = btemplates.multisig.output.decode(script)
38220 pubKeys = multisig.pubKeys
38221 }
38222
38223 signatures = chunks.slice(1).map(function (chunk) {
38224 return chunk.length === 0 ? undefined : chunk
38225 })
38226 break
38227 }
38228
38229 return {
38230 pubKeys: pubKeys,
38231 signatures: signatures
38232 }
38233 }
38234 function expandInput (scriptSig, witnessStack) {
38235 if (scriptSig.length === 0 && witnessStack.length === 0) return {}
38236
38237 var prevOutScript
38238 var prevOutType
38239 var scriptType
38240 var script
38241 var redeemScript
38242 var witnessScript
38243 var witnessScriptType
38244 var redeemScriptType
38245 var witness = false
38246 var p2wsh = false
38247 var p2sh = false
38248 var witnessProgram
38249 var chunks
38250
38251 var scriptSigChunks = bscript.decompile(scriptSig)
38252 var sigType = btemplates.classifyInput(scriptSigChunks, true)
38253 if (sigType === scriptTypes.P2SH) {
38254 p2sh = true
38255 redeemScript = scriptSigChunks[scriptSigChunks.length - 1]
38256 redeemScriptType = btemplates.classifyOutput(redeemScript)
38257 prevOutScript = btemplates.scriptHash.output.encode(bcrypto.hash160(redeemScript))
38258 prevOutType = scriptTypes.P2SH
38259 script = redeemScript
38260 }
38261
38262 var classifyWitness = btemplates.classifyWitness(witnessStack, true)
38263 if (classifyWitness === scriptTypes.P2WSH) {
38264 witnessScript = witnessStack[witnessStack.length - 1]
38265 witnessScriptType = btemplates.classifyOutput(witnessScript)
38266 p2wsh = true
38267 witness = true
38268 if (scriptSig.length === 0) {
38269 prevOutScript = btemplates.witnessScriptHash.output.encode(bcrypto.sha256(witnessScript))
38270 prevOutType = scriptTypes.P2WSH
38271 if (redeemScript !== undefined) {
38272 throw new Error('Redeem script given when unnecessary')
38273 }
38274 // bare witness
38275 } else {
38276 if (!redeemScript) {
38277 throw new Error('No redeemScript provided for P2WSH, but scriptSig non-empty')
38278 }
38279 witnessProgram = btemplates.witnessScriptHash.output.encode(bcrypto.sha256(witnessScript))
38280 if (!redeemScript.equals(witnessProgram)) {
38281 throw new Error('Redeem script didn\'t match witnessScript')
38282 }
38283 }
38284
38285 if (!supportedType(btemplates.classifyOutput(witnessScript))) {
38286 throw new Error('unsupported witness script')
38287 }
38288
38289 script = witnessScript
38290 scriptType = witnessScriptType
38291 chunks = witnessStack.slice(0, -1)
38292 } else if (classifyWitness === scriptTypes.P2WPKH) {
38293 witness = true
38294 var key = witnessStack[witnessStack.length - 1]
38295 var keyHash = bcrypto.hash160(key)
38296 if (scriptSig.length === 0) {
38297 prevOutScript = btemplates.witnessPubKeyHash.output.encode(keyHash)
38298 prevOutType = scriptTypes.P2WPKH
38299 if (typeof redeemScript !== 'undefined') {
38300 throw new Error('Redeem script given when unnecessary')
38301 }
38302 } else {
38303 if (!redeemScript) {
38304 throw new Error('No redeemScript provided for P2WPKH, but scriptSig wasn\'t empty')
38305 }
38306 witnessProgram = btemplates.witnessPubKeyHash.output.encode(keyHash)
38307 if (!redeemScript.equals(witnessProgram)) {
38308 throw new Error('Redeem script did not have the right witness program')
38309 }
38310 }
38311
38312 scriptType = scriptTypes.P2PKH
38313 chunks = witnessStack
38314 } else if (redeemScript) {
38315 if (!supportedP2SHType(redeemScriptType)) {
38316 throw new Error('Bad redeemscript!')
38317 }
38318
38319 script = redeemScript
38320 scriptType = redeemScriptType
38321 chunks = scriptSigChunks.slice(0, -1)
38322 } else {
38323 prevOutType = scriptType = btemplates.classifyInput(scriptSig)
38324 chunks = scriptSigChunks
38325 }
38326
38327 var expanded = extractChunks(scriptType, chunks, script)
38328
38329 var result = {
38330 pubKeys: expanded.pubKeys,
38331 signatures: expanded.signatures,
38332 prevOutScript: prevOutScript,
38333 prevOutType: prevOutType,
38334 signType: scriptType,
38335 signScript: script,
38336 witness: Boolean(witness)
38337 }
38338
38339 if (p2sh) {
38340 result.redeemScript = redeemScript
38341 result.redeemScriptType = redeemScriptType
38342 }
38343
38344 if (p2wsh) {
38345 result.witnessScript = witnessScript
38346 result.witnessScriptType = witnessScriptType
38347 }
38348
38349 return result
38350 }
38351
38352 // could be done in expandInput, but requires the original Transaction for hashForSignature
38353 function fixMultisigOrder (input, transaction, vin) {
38354 if (input.redeemScriptType !== scriptTypes.MULTISIG || !input.redeemScript) return
38355 if (input.pubKeys.length === input.signatures.length) return
38356
38357 var unmatched = input.signatures.concat()
38358
38359 input.signatures = input.pubKeys.map(function (pubKey) {
38360 var keyPair = ECPair.fromPublicKeyBuffer(pubKey)
38361 var match
38362
38363 // check for a signature
38364 unmatched.some(function (signature, i) {
38365 // skip if undefined || OP_0
38366 if (!signature) return false
38367
38368 // TODO: avoid O(n) hashForSignature
38369 var parsed = ECSignature.parseScriptSignature(signature)
38370 var hash = transaction.hashForSignature(vin, input.redeemScript, parsed.hashType)
38371
38372 // skip if signature does not match pubKey
38373 if (!keyPair.verify(hash, parsed.signature)) return false
38374
38375 // remove matched signature from unmatched
38376 unmatched[i] = undefined
38377 match = signature
38378
38379 return true
38380 })
38381
38382 return match
38383 })
38384 }
38385
38386 function expandOutput (script, scriptType, ourPubKey) {
38387 typeforce(types.Buffer, script)
38388
38389 var scriptChunks = bscript.decompile(script)
38390 if (!scriptType) {
38391 scriptType = btemplates.classifyOutput(script)
38392 }
38393
38394 var pubKeys = []
38395
38396 switch (scriptType) {
38397 // does our hash160(pubKey) match the output scripts?
38398 case scriptTypes.P2PKH:
38399 if (!ourPubKey) break
38400
38401 var pkh1 = scriptChunks[2]
38402 var pkh2 = bcrypto.hash160(ourPubKey)
38403 if (pkh1.equals(pkh2)) pubKeys = [ourPubKey]
38404 break
38405
38406 // does our hash160(pubKey) match the output scripts?
38407 case scriptTypes.P2WPKH:
38408 if (!ourPubKey) break
38409
38410 var wpkh1 = scriptChunks[1]
38411 var wpkh2 = bcrypto.hash160(ourPubKey)
38412 if (wpkh1.equals(wpkh2)) pubKeys = [ourPubKey]
38413 break
38414
38415 case scriptTypes.P2PK:
38416 pubKeys = scriptChunks.slice(0, 1)
38417 break
38418
38419 case scriptTypes.MULTISIG:
38420 pubKeys = scriptChunks.slice(1, -2)
38421 break
38422
38423 default: return { scriptType: scriptType }
38424 }
38425
38426 return {
38427 pubKeys: pubKeys,
38428 scriptType: scriptType,
38429 signatures: pubKeys.map(function () { return undefined })
38430 }
38431 }
38432
38433 function checkP2SHInput (input, redeemScriptHash) {
38434 if (input.prevOutType) {
38435 if (input.prevOutType !== scriptTypes.P2SH) throw new Error('PrevOutScript must be P2SH')
38436
38437 var prevOutScriptScriptHash = bscript.decompile(input.prevOutScript)[1]
38438 if (!prevOutScriptScriptHash.equals(redeemScriptHash)) throw new Error('Inconsistent hash160(RedeemScript)')
38439 }
38440 }
38441
38442 function checkP2WSHInput (input, witnessScriptHash) {
38443 if (input.prevOutType) {
38444 if (input.prevOutType !== scriptTypes.P2WSH) throw new Error('PrevOutScript must be P2WSH')
38445
38446 var scriptHash = bscript.decompile(input.prevOutScript)[1]
38447 if (!scriptHash.equals(witnessScriptHash)) throw new Error('Inconsistent sha25(WitnessScript)')
38448 }
38449 }
38450
38451 function prepareInput (input, kpPubKey, redeemScript, witnessValue, witnessScript) {
38452 var expanded
38453 var prevOutType
38454 var prevOutScript
38455
38456 var p2sh = false
38457 var p2shType
38458 var redeemScriptHash
38459
38460 var witness = false
38461 var p2wsh = false
38462 var witnessType
38463 var witnessScriptHash
38464
38465 var signType
38466 var signScript
38467
38468 if (redeemScript && witnessScript) {
38469 redeemScriptHash = bcrypto.hash160(redeemScript)
38470 witnessScriptHash = bcrypto.sha256(witnessScript)
38471 checkP2SHInput(input, redeemScriptHash)
38472
38473 if (!redeemScript.equals(btemplates.witnessScriptHash.output.encode(witnessScriptHash))) throw new Error('Witness script inconsistent with redeem script')
38474
38475 expanded = expandOutput(witnessScript, undefined, kpPubKey)
38476 if (!expanded.pubKeys) throw new Error('WitnessScript not supported "' + bscript.toASM(redeemScript) + '"')
38477
38478 prevOutType = btemplates.types.P2SH
38479 prevOutScript = btemplates.scriptHash.output.encode(redeemScriptHash)
38480 p2sh = witness = p2wsh = true
38481 p2shType = btemplates.types.P2WSH
38482 signType = witnessType = expanded.scriptType
38483 signScript = witnessScript
38484 } else if (redeemScript) {
38485 redeemScriptHash = bcrypto.hash160(redeemScript)
38486 checkP2SHInput(input, redeemScriptHash)
38487
38488 expanded = expandOutput(redeemScript, undefined, kpPubKey)
38489 if (!expanded.pubKeys) throw new Error('RedeemScript not supported "' + bscript.toASM(redeemScript) + '"')
38490
38491 prevOutType = btemplates.types.P2SH
38492 prevOutScript = btemplates.scriptHash.output.encode(redeemScriptHash)
38493 p2sh = true
38494 signType = p2shType = expanded.scriptType
38495 signScript = redeemScript
38496 witness = signType === btemplates.types.P2WPKH
38497 } else if (witnessScript) {
38498 witnessScriptHash = bcrypto.sha256(witnessScript)
38499 checkP2WSHInput(input, witnessScriptHash)
38500
38501 expanded = expandOutput(witnessScript, undefined, kpPubKey)
38502 if (!expanded.pubKeys) throw new Error('WitnessScript not supported "' + bscript.toASM(redeemScript) + '"')
38503
38504 prevOutType = btemplates.types.P2WSH
38505 prevOutScript = btemplates.witnessScriptHash.output.encode(witnessScriptHash)
38506 witness = p2wsh = true
38507 signType = witnessType = expanded.scriptType
38508 signScript = witnessScript
38509 } else if (input.prevOutType) {
38510 // embedded scripts are not possible without a redeemScript
38511 if (input.prevOutType === scriptTypes.P2SH ||
38512 input.prevOutType === scriptTypes.P2WSH) {
38513 throw new Error('PrevOutScript is ' + input.prevOutType + ', requires redeemScript')
38514 }
38515
38516 prevOutType = input.prevOutType
38517 prevOutScript = input.prevOutScript
38518 expanded = expandOutput(input.prevOutScript, input.prevOutType, kpPubKey)
38519 if (!expanded.pubKeys) return
38520
38521 witness = (input.prevOutType === scriptTypes.P2WPKH)
38522 signType = prevOutType
38523 signScript = prevOutScript
38524 } else {
38525 prevOutScript = btemplates.pubKeyHash.output.encode(bcrypto.hash160(kpPubKey))
38526 expanded = expandOutput(prevOutScript, scriptTypes.P2PKH, kpPubKey)
38527
38528 prevOutType = scriptTypes.P2PKH
38529 witness = false
38530 signType = prevOutType
38531 signScript = prevOutScript
38532 }
38533
38534 if (signType === scriptTypes.P2WPKH) {
38535 signScript = btemplates.pubKeyHash.output.encode(btemplates.witnessPubKeyHash.output.decode(signScript))
38536 }
38537
38538 if (p2sh) {
38539 input.redeemScript = redeemScript
38540 input.redeemScriptType = p2shType
38541 }
38542
38543 if (p2wsh) {
38544 input.witnessScript = witnessScript
38545 input.witnessScriptType = witnessType
38546 }
38547
38548 input.pubKeys = expanded.pubKeys
38549 input.signatures = expanded.signatures
38550 input.signScript = signScript
38551 input.signType = signType
38552 input.prevOutScript = prevOutScript
38553 input.prevOutType = prevOutType
38554 input.witness = witness
38555 }
38556
38557 function buildStack (type, signatures, pubKeys, allowIncomplete) {
38558 if (type === scriptTypes.P2PKH) {
38559 if (signatures.length === 1 && Buffer.isBuffer(signatures[0]) && pubKeys.length === 1) return btemplates.pubKeyHash.input.encodeStack(signatures[0], pubKeys[0])
38560 } else if (type === scriptTypes.P2PK) {
38561 if (signatures.length === 1 && Buffer.isBuffer(signatures[0])) return btemplates.pubKey.input.encodeStack(signatures[0])
38562 } else if (type === scriptTypes.MULTISIG) {
38563 if (signatures.length > 0) {
38564 signatures = signatures.map(function (signature) {
38565 return signature || ops.OP_0
38566 })
38567 if (!allowIncomplete) {
38568 // remove blank signatures
38569 signatures = signatures.filter(function (x) { return x !== ops.OP_0 })
38570 }
38571
38572 return btemplates.multisig.input.encodeStack(signatures)
38573 }
38574 } else {
38575 throw new Error('Not yet supported')
38576 }
38577
38578 if (!allowIncomplete) throw new Error('Not enough signatures provided')
38579 return []
38580 }
38581
38582 function buildInput (input, allowIncomplete) {
38583 var scriptType = input.prevOutType
38584 var sig = []
38585 var witness = []
38586
38587 if (supportedType(scriptType)) {
38588 sig = buildStack(scriptType, input.signatures, input.pubKeys, allowIncomplete)
38589 }
38590
38591 var p2sh = false
38592 if (scriptType === btemplates.types.P2SH) {
38593 // We can remove this error later when we have a guarantee prepareInput
38594 // rejects unsignable scripts - it MUST be signable at this point.
38595 if (!allowIncomplete && !supportedP2SHType(input.redeemScriptType)) {
38596 throw new Error('Impossible to sign this type')
38597 }
38598
38599 if (supportedType(input.redeemScriptType)) {
38600 sig = buildStack(input.redeemScriptType, input.signatures, input.pubKeys, allowIncomplete)
38601 }
38602
38603 // If it wasn't SIGNABLE, it's witness, defer to that
38604 if (input.redeemScriptType) {
38605 p2sh = true
38606 scriptType = input.redeemScriptType
38607 }
38608 }
38609
38610 switch (scriptType) {
38611 // P2WPKH is a special case of P2PKH
38612 case btemplates.types.P2WPKH:
38613 witness = buildStack(btemplates.types.P2PKH, input.signatures, input.pubKeys, allowIncomplete)
38614 break
38615
38616 case btemplates.types.P2WSH:
38617 // We can remove this check later
38618 if (!allowIncomplete && !supportedType(input.witnessScriptType)) {
38619 throw new Error('Impossible to sign this type')
38620 }
38621
38622 if (supportedType(input.witnessScriptType)) {
38623 witness = buildStack(input.witnessScriptType, input.signatures, input.pubKeys, allowIncomplete)
38624 witness.push(input.witnessScript)
38625 scriptType = input.witnessScriptType
38626 }
38627
38628 break
38629 }
38630
38631 // append redeemScript if necessary
38632 if (p2sh) {
38633 sig.push(input.redeemScript)
38634 }
38635
38636 return {
38637 type: scriptType,
38638 script: bscript.compile(sig),
38639 witness: witness
38640 }
38641 }
38642
38643 function TransactionBuilder (network, maximumFeeRate) {
38644 this.prevTxMap = {}
38645 this.network = network || networks.bitcoin
38646
38647 // WARNING: This is __NOT__ to be relied on, its just another potential safety mechanism (safety in-depth)
38648 this.maximumFeeRate = maximumFeeRate || 1000
38649
38650 this.inputs = []
38651 this.tx = new Transaction()
38652 }
38653
38654 TransactionBuilder.prototype.setLockTime = function (locktime) {
38655 typeforce(types.UInt32, locktime)
38656
38657 // if any signatures exist, throw
38658 if (this.inputs.some(function (input) {
38659 if (!input.signatures) return false
38660
38661 return input.signatures.some(function (s) { return s })
38662 })) {
38663 throw new Error('No, this would invalidate signatures')
38664 }
38665
38666 this.tx.locktime = locktime
38667 }
38668
38669 TransactionBuilder.prototype.setVersion = function (version) {
38670 typeforce(types.UInt32, version)
38671
38672 // XXX: this might eventually become more complex depending on what the versions represent
38673 this.tx.version = version
38674 }
38675
38676 TransactionBuilder.fromTransaction = function (transaction, network) {
38677 var txb = new TransactionBuilder(network)
38678
38679 // Copy transaction fields
38680 txb.setVersion(transaction.version)
38681 txb.setLockTime(transaction.locktime)
38682
38683 // Copy outputs (done first to avoid signature invalidation)
38684 transaction.outs.forEach(function (txOut) {
38685 txb.addOutput(txOut.script, txOut.value)
38686 })
38687
38688 // Copy inputs
38689 transaction.ins.forEach(function (txIn) {
38690 txb.__addInputUnsafe(txIn.hash, txIn.index, {
38691 sequence: txIn.sequence,
38692 script: txIn.script,
38693 witness: txIn.witness
38694 })
38695 })
38696
38697 // fix some things not possible through the public API
38698 txb.inputs.forEach(function (input, i) {
38699 fixMultisigOrder(input, transaction, i)
38700 })
38701
38702 return txb
38703 }
38704
38705 TransactionBuilder.prototype.addInput = function (txHash, vout, sequence, prevOutScript) {
38706 if (!this.__canModifyInputs()) {
38707 throw new Error('No, this would invalidate signatures')
38708 }
38709
38710 var value
38711
38712 // is it a hex string?
38713 if (typeof txHash === 'string') {
38714 // transaction hashs's are displayed in reverse order, un-reverse it
38715 txHash = Buffer.from(txHash, 'hex').reverse()
38716
38717 // is it a Transaction object?
38718 } else if (txHash instanceof Transaction) {
38719 var txOut = txHash.outs[vout]
38720 prevOutScript = txOut.script
38721 value = txOut.value
38722
38723 txHash = txHash.getHash()
38724 }
38725
38726 return this.__addInputUnsafe(txHash, vout, {
38727 sequence: sequence,
38728 prevOutScript: prevOutScript,
38729 value: value
38730 })
38731 }
38732
38733 TransactionBuilder.prototype.__addInputUnsafe = function (txHash, vout, options) {
38734 if (Transaction.isCoinbaseHash(txHash)) {
38735 throw new Error('coinbase inputs not supported')
38736 }
38737
38738 var prevTxOut = txHash.toString('hex') + ':' + vout
38739 if (this.prevTxMap[prevTxOut] !== undefined) throw new Error('Duplicate TxOut: ' + prevTxOut)
38740
38741 var input = {}
38742
38743 // derive what we can from the scriptSig
38744 if (options.script !== undefined) {
38745 input = expandInput(options.script, options.witness || [])
38746 }
38747
38748 // if an input value was given, retain it
38749 if (options.value !== undefined) {
38750 input.value = options.value
38751 }
38752
38753 // derive what we can from the previous transactions output script
38754 if (!input.prevOutScript && options.prevOutScript) {
38755 var prevOutType
38756
38757 if (!input.pubKeys && !input.signatures) {
38758 var expanded = expandOutput(options.prevOutScript)
38759
38760 if (expanded.pubKeys) {
38761 input.pubKeys = expanded.pubKeys
38762 input.signatures = expanded.signatures
38763 }
38764
38765 prevOutType = expanded.scriptType
38766 }
38767
38768 input.prevOutScript = options.prevOutScript
38769 input.prevOutType = prevOutType || btemplates.classifyOutput(options.prevOutScript)
38770 }
38771
38772 var vin = this.tx.addInput(txHash, vout, options.sequence, options.scriptSig)
38773 this.inputs[vin] = input
38774 this.prevTxMap[prevTxOut] = vin
38775 return vin
38776 }
38777
38778 TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
38779 if (!this.__canModifyOutputs()) {
38780 throw new Error('No, this would invalidate signatures')
38781 }
38782
38783 // Attempt to get a script if it's a base58 address string
38784 if (typeof scriptPubKey === 'string') {
38785 scriptPubKey = baddress.toOutputScript(scriptPubKey, this.network)
38786 }
38787
38788 return this.tx.addOutput(scriptPubKey, value)
38789 }
38790
38791 TransactionBuilder.prototype.build = function () {
38792 return this.__build(false)
38793 }
38794 TransactionBuilder.prototype.buildIncomplete = function () {
38795 return this.__build(true)
38796 }
38797
38798 TransactionBuilder.prototype.__build = function (allowIncomplete) {
38799 if (!allowIncomplete) {
38800 if (!this.tx.ins.length) throw new Error('Transaction has no inputs')
38801 if (!this.tx.outs.length) throw new Error('Transaction has no outputs')
38802 }
38803
38804 var tx = this.tx.clone()
38805 // Create script signatures from inputs
38806 this.inputs.forEach(function (input, i) {
38807 var scriptType = input.witnessScriptType || input.redeemScriptType || input.prevOutType
38808 if (!scriptType && !allowIncomplete) throw new Error('Transaction is not complete')
38809 var result = buildInput(input, allowIncomplete)
38810
38811 // skip if no result
38812 if (!allowIncomplete) {
38813 if (!supportedType(result.type) && result.type !== btemplates.types.P2WPKH) {
38814 throw new Error(result.type + ' not supported')
38815 }
38816 }
38817
38818 tx.setInputScript(i, result.script)
38819 tx.setWitness(i, result.witness)
38820 })
38821
38822 if (!allowIncomplete) {
38823 // do not rely on this, its merely a last resort
38824 if (this.__overMaximumFees(tx.virtualSize())) {
38825 throw new Error('Transaction has absurd fees')
38826 }
38827 }
38828
38829 return tx
38830 }
38831
38832 function canSign (input) {
38833 return input.prevOutScript !== undefined &&
38834 input.signScript !== undefined &&
38835 input.pubKeys !== undefined &&
38836 input.signatures !== undefined &&
38837 input.signatures.length === input.pubKeys.length &&
38838 input.pubKeys.length > 0 &&
38839 (
38840 input.witness === false ||
38841 (input.witness === true && input.value !== undefined)
38842 )
38843 }
38844
38845 TransactionBuilder.prototype.sign = function (vin, keyPair, redeemScript, hashType, witnessValue, witnessScript) {
38846 // TODO: remove keyPair.network matching in 4.0.0
38847 if (keyPair.network && keyPair.network !== this.network) throw new TypeError('Inconsistent network')
38848 if (!this.inputs[vin]) throw new Error('No input at index: ' + vin)
38849 hashType = hashType || Transaction.SIGHASH_ALL
38850
38851 var input = this.inputs[vin]
38852
38853 // if redeemScript was previously provided, enforce consistency
38854 if (input.redeemScript !== undefined &&
38855 redeemScript &&
38856 !input.redeemScript.equals(redeemScript)) {
38857 throw new Error('Inconsistent redeemScript')
38858 }
38859
38860 var kpPubKey = keyPair.publicKey || keyPair.getPublicKeyBuffer()
38861 if (!canSign(input)) {
38862 if (witnessValue !== undefined) {
38863 if (input.value !== undefined && input.value !== witnessValue) throw new Error('Input didn\'t match witnessValue')
38864 typeforce(types.Satoshi, witnessValue)
38865 input.value = witnessValue
38866 }
38867
38868 if (!canSign(input)) prepareInput(input, kpPubKey, redeemScript, witnessValue, witnessScript)
38869 if (!canSign(input)) throw Error(input.prevOutType + ' not supported')
38870 }
38871
38872 // ready to sign
38873 var signatureHash
38874 if (input.witness) {
38875 signatureHash = this.tx.hashForWitnessV0(vin, input.signScript, input.value, hashType)
38876 } else {
38877 signatureHash = this.tx.hashForSignature(vin, input.signScript, hashType)
38878 }
38879
38880 // enforce in order signing of public keys
38881 var signed = input.pubKeys.some(function (pubKey, i) {
38882 if (!kpPubKey.equals(pubKey)) return false
38883 if (input.signatures[i]) throw new Error('Signature already exists')
38884 if (kpPubKey.length !== 33 &&
38885 input.signType === scriptTypes.P2WPKH) throw new Error('BIP143 rejects uncompressed public keys in P2WPKH or P2WSH')
38886
38887 var signature = keyPair.sign(signatureHash)
38888 if (Buffer.isBuffer(signature)) signature = ECSignature.fromRSBuffer(signature)
38889
38890 input.signatures[i] = signature.toScriptSignature(hashType)
38891 return true
38892 })
38893
38894 if (!signed) throw new Error('Key pair cannot sign for this input')
38895 }
38896
38897 function signatureHashType (buffer) {
38898 return buffer.readUInt8(buffer.length - 1)
38899 }
38900
38901 TransactionBuilder.prototype.__canModifyInputs = function () {
38902 return this.inputs.every(function (input) {
38903 // any signatures?
38904 if (input.signatures === undefined) return true
38905
38906 return input.signatures.every(function (signature) {
38907 if (!signature) return true
38908 var hashType = signatureHashType(signature)
38909
38910 // if SIGHASH_ANYONECANPAY is set, signatures would not
38911 // be invalidated by more inputs
38912 return hashType & Transaction.SIGHASH_ANYONECANPAY
38913 })
38914 })
38915 }
38916
38917 TransactionBuilder.prototype.__canModifyOutputs = function () {
38918 var nInputs = this.tx.ins.length
38919 var nOutputs = this.tx.outs.length
38920
38921 return this.inputs.every(function (input) {
38922 if (input.signatures === undefined) return true
38923
38924 return input.signatures.every(function (signature) {
38925 if (!signature) return true
38926 var hashType = signatureHashType(signature)
38927
38928 var hashTypeMod = hashType & 0x1f
38929 if (hashTypeMod === Transaction.SIGHASH_NONE) return true
38930 if (hashTypeMod === Transaction.SIGHASH_SINGLE) {
38931 // if SIGHASH_SINGLE is set, and nInputs > nOutputs
38932 // some signatures would be invalidated by the addition
38933 // of more outputs
38934 return nInputs <= nOutputs
38935 }
38936 })
38937 })
38938 }
38939
38940 TransactionBuilder.prototype.__overMaximumFees = function (bytes) {
38941 // not all inputs will have .value defined
38942 var incoming = this.inputs.reduce(function (a, x) { return a + (x.value >>> 0) }, 0)
38943
38944 // but all outputs do, and if we have any input value
38945 // we can immediately determine if the outputs are too small
38946 var outgoing = this.tx.outs.reduce(function (a, x) { return a + x.value }, 0)
38947 var fee = incoming - outgoing
38948 var feeRate = fee / bytes
38949
38950 return feeRate > this.maximumFeeRate
38951 }
38952
38953 module.exports = TransactionBuilder
38954
38955 },{"./address":44,"./crypto":47,"./ecpair":49,"./ecsignature":50,"./networks":53,"./script":54,"./templates":56,"./transaction":78,"./types":80,"bitcoin-ops":42,"safe-buffer":128,"typeforce":139}],80:[function(require,module,exports){
38956 var typeforce = require('typeforce')
38957
38958 var UINT31_MAX = Math.pow(2, 31) - 1
38959 function UInt31 (value) {
38960 return typeforce.UInt32(value) && value <= UINT31_MAX
38961 }
38962
38963 function BIP32Path (value) {
38964 return typeforce.String(value) && value.match(/^(m\/)?(\d+'?\/)*\d+'?$/)
38965 }
38966 BIP32Path.toJSON = function () { return 'BIP32 derivation path' }
38967
38968 var SATOSHI_MAX = 21 * 1e14
38969 function Satoshi (value) {
38970 return typeforce.UInt53(value) && value <= SATOSHI_MAX
38971 }
38972
38973 // external dependent types
38974 var BigInt = typeforce.quacksLike('BigInteger')
38975 var ECPoint = typeforce.quacksLike('Point')
38976
38977 // exposed, external API
38978 var ECSignature = typeforce.compile({ r: BigInt, s: BigInt })
38979 var Network = typeforce.compile({
38980 messagePrefix: typeforce.oneOf(typeforce.Buffer, typeforce.String),
38981 bip32: {
38982 public: typeforce.UInt32,
38983 private: typeforce.UInt32
38984 },
38985 pubKeyHash: typeforce.UInt8,
38986 scriptHash: typeforce.UInt8,
38987 wif: typeforce.UInt8
38988 })
38989
38990 // extend typeforce types with ours
38991 var types = {
38992 BigInt: BigInt,
38993 BIP32Path: BIP32Path,
38994 Buffer256bit: typeforce.BufferN(32),
38995 ECPoint: ECPoint,
38996 ECSignature: ECSignature,
38997 Hash160bit: typeforce.BufferN(20),
38998 Hash256bit: typeforce.BufferN(32),
38999 Network: Network,
39000 Satoshi: Satoshi,
39001 UInt31: UInt31
39002 }
39003
39004 for (var typeName in typeforce) {
39005 types[typeName] = typeforce[typeName]
39006 }
39007
39008 module.exports = types
39009
39010 },{"typeforce":139}],81:[function(require,module,exports){
39011 (function (module, exports) {
39012 'use strict';
39013
39014 // Utils
39015 function assert (val, msg) {
39016 if (!val) throw new Error(msg || 'Assertion failed');
39017 }
39018
39019 // Could use `inherits` module, but don't want to move from single file
39020 // architecture yet.
39021 function inherits (ctor, superCtor) {
39022 ctor.super_ = superCtor;
39023 var TempCtor = function () {};
39024 TempCtor.prototype = superCtor.prototype;
39025 ctor.prototype = new TempCtor();
39026 ctor.prototype.constructor = ctor;
39027 }
39028
39029 // BN
39030
39031 function BN (number, base, endian) {
39032 if (BN.isBN(number)) {
39033 return number;
39034 }
39035
39036 this.negative = 0;
39037 this.words = null;
39038 this.length = 0;
39039
39040 // Reduction context
39041 this.red = null;
39042
39043 if (number !== null) {
39044 if (base === 'le' || base === 'be') {
39045 endian = base;
39046 base = 10;
39047 }
39048
39049 this._init(number || 0, base || 10, endian || 'be');
39050 }
39051 }
39052 if (typeof module === 'object') {
39053 module.exports = BN;
39054 } else {
39055 exports.BN = BN;
39056 }
39057
39058 BN.BN = BN;
39059 BN.wordSize = 26;
39060
39061 var Buffer;
39062 try {
39063 Buffer = require('buf' + 'fer').Buffer;
39064 } catch (e) {
39065 }
39066
39067 BN.isBN = function isBN (num) {
39068 if (num instanceof BN) {
39069 return true;
39070 }
39071
39072 return num !== null && typeof num === 'object' &&
39073 num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
39074 };
39075
39076 BN.max = function max (left, right) {
39077 if (left.cmp(right) > 0) return left;
39078 return right;
39079 };
39080
39081 BN.min = function min (left, right) {
39082 if (left.cmp(right) < 0) return left;
39083 return right;
39084 };
39085
39086 BN.prototype._init = function init (number, base, endian) {
39087 if (typeof number === 'number') {
39088 return this._initNumber(number, base, endian);
39089 }
39090
39091 if (typeof number === 'object') {
39092 return this._initArray(number, base, endian);
39093 }
39094
39095 if (base === 'hex') {
39096 base = 16;
39097 }
39098 assert(base === (base | 0) && base >= 2 && base <= 36);
39099
39100 number = number.toString().replace(/\s+/g, '');
39101 var start = 0;
39102 if (number[0] === '-') {
39103 start++;
39104 }
39105
39106 if (base === 16) {
39107 this._parseHex(number, start);
39108 } else {
39109 this._parseBase(number, base, start);
39110 }
39111
39112 if (number[0] === '-') {
39113 this.negative = 1;
39114 }
39115
39116 this.strip();
39117
39118 if (endian !== 'le') return;
39119
39120 this._initArray(this.toArray(), base, endian);
39121 };
39122
39123 BN.prototype._initNumber = function _initNumber (number, base, endian) {
39124 if (number < 0) {
39125 this.negative = 1;
39126 number = -number;
39127 }
39128 if (number < 0x4000000) {
39129 this.words = [ number & 0x3ffffff ];
39130 this.length = 1;
39131 } else if (number < 0x10000000000000) {
39132 this.words = [
39133 number & 0x3ffffff,
39134 (number / 0x4000000) & 0x3ffffff
39135 ];
39136 this.length = 2;
39137 } else {
39138 assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
39139 this.words = [
39140 number & 0x3ffffff,
39141 (number / 0x4000000) & 0x3ffffff,
39142 1
39143 ];
39144 this.length = 3;
39145 }
39146
39147 if (endian !== 'le') return;
39148
39149 // Reverse the bytes
39150 this._initArray(this.toArray(), base, endian);
39151 };
39152
39153 BN.prototype._initArray = function _initArray (number, base, endian) {
39154 // Perhaps a Uint8Array
39155 assert(typeof number.length === 'number');
39156 if (number.length <= 0) {
39157 this.words = [ 0 ];
39158 this.length = 1;
39159 return this;
39160 }
39161
39162 this.length = Math.ceil(number.length / 3);
39163 this.words = new Array(this.length);
39164 for (var i = 0; i < this.length; i++) {
39165 this.words[i] = 0;
39166 }
39167
39168 var j, w;
39169 var off = 0;
39170 if (endian === 'be') {
39171 for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
39172 w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
39173 this.words[j] |= (w << off) & 0x3ffffff;
39174 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
39175 off += 24;
39176 if (off >= 26) {
39177 off -= 26;
39178 j++;
39179 }
39180 }
39181 } else if (endian === 'le') {
39182 for (i = 0, j = 0; i < number.length; i += 3) {
39183 w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
39184 this.words[j] |= (w << off) & 0x3ffffff;
39185 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
39186 off += 24;
39187 if (off >= 26) {
39188 off -= 26;
39189 j++;
39190 }
39191 }
39192 }
39193 return this.strip();
39194 };
39195
39196 function parseHex (str, start, end) {
39197 var r = 0;
39198 var len = Math.min(str.length, end);
39199 for (var i = start; i < len; i++) {
39200 var c = str.charCodeAt(i) - 48;
39201
39202 r <<= 4;
39203
39204 // 'a' - 'f'
39205 if (c >= 49 && c <= 54) {
39206 r |= c - 49 + 0xa;
39207
39208 // 'A' - 'F'
39209 } else if (c >= 17 && c <= 22) {
39210 r |= c - 17 + 0xa;
39211
39212 // '0' - '9'
39213 } else {
39214 r |= c & 0xf;
39215 }
39216 }
39217 return r;
39218 }
39219
39220 BN.prototype._parseHex = function _parseHex (number, start) {
39221 // Create possibly bigger array to ensure that it fits the number
39222 this.length = Math.ceil((number.length - start) / 6);
39223 this.words = new Array(this.length);
39224 for (var i = 0; i < this.length; i++) {
39225 this.words[i] = 0;
39226 }
39227
39228 var j, w;
39229 // Scan 24-bit chunks and add them to the number
39230 var off = 0;
39231 for (i = number.length - 6, j = 0; i >= start; i -= 6) {
39232 w = parseHex(number, i, i + 6);
39233 this.words[j] |= (w << off) & 0x3ffffff;
39234 // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb
39235 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
39236 off += 24;
39237 if (off >= 26) {
39238 off -= 26;
39239 j++;
39240 }
39241 }
39242 if (i + 6 !== start) {
39243 w = parseHex(number, start, i + 6);
39244 this.words[j] |= (w << off) & 0x3ffffff;
39245 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
39246 }
39247 this.strip();
39248 };
39249
39250 function parseBase (str, start, end, mul) {
39251 var r = 0;
39252 var len = Math.min(str.length, end);
39253 for (var i = start; i < len; i++) {
39254 var c = str.charCodeAt(i) - 48;
39255
39256 r *= mul;
39257
39258 // 'a'
39259 if (c >= 49) {
39260 r += c - 49 + 0xa;
39261
39262 // 'A'
39263 } else if (c >= 17) {
39264 r += c - 17 + 0xa;
39265
39266 // '0' - '9'
39267 } else {
39268 r += c;
39269 }
39270 }
39271 return r;
39272 }
39273
39274 BN.prototype._parseBase = function _parseBase (number, base, start) {
39275 // Initialize as zero
39276 this.words = [ 0 ];
39277 this.length = 1;
39278
39279 // Find length of limb in base
39280 for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
39281 limbLen++;
39282 }
39283 limbLen--;
39284 limbPow = (limbPow / base) | 0;
39285
39286 var total = number.length - start;
39287 var mod = total % limbLen;
39288 var end = Math.min(total, total - mod) + start;
39289
39290 var word = 0;
39291 for (var i = start; i < end; i += limbLen) {
39292 word = parseBase(number, i, i + limbLen, base);
39293
39294 this.imuln(limbPow);
39295 if (this.words[0] + word < 0x4000000) {
39296 this.words[0] += word;
39297 } else {
39298 this._iaddn(word);
39299 }
39300 }
39301
39302 if (mod !== 0) {
39303 var pow = 1;
39304 word = parseBase(number, i, number.length, base);
39305
39306 for (i = 0; i < mod; i++) {
39307 pow *= base;
39308 }
39309
39310 this.imuln(pow);
39311 if (this.words[0] + word < 0x4000000) {
39312 this.words[0] += word;
39313 } else {
39314 this._iaddn(word);
39315 }
39316 }
39317 };
39318
39319 BN.prototype.copy = function copy (dest) {
39320 dest.words = new Array(this.length);
39321 for (var i = 0; i < this.length; i++) {
39322 dest.words[i] = this.words[i];
39323 }
39324 dest.length = this.length;
39325 dest.negative = this.negative;
39326 dest.red = this.red;
39327 };
39328
39329 BN.prototype.clone = function clone () {
39330 var r = new BN(null);
39331 this.copy(r);
39332 return r;
39333 };
39334
39335 BN.prototype._expand = function _expand (size) {
39336 while (this.length < size) {
39337 this.words[this.length++] = 0;
39338 }
39339 return this;
39340 };
39341
39342 // Remove leading `0` from `this`
39343 BN.prototype.strip = function strip () {
39344 while (this.length > 1 && this.words[this.length - 1] === 0) {
39345 this.length--;
39346 }
39347 return this._normSign();
39348 };
39349
39350 BN.prototype._normSign = function _normSign () {
39351 // -0 = 0
39352 if (this.length === 1 && this.words[0] === 0) {
39353 this.negative = 0;
39354 }
39355 return this;
39356 };
39357
39358 BN.prototype.inspect = function inspect () {
39359 return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
39360 };
39361
39362 /*
39363
39364 var zeros = [];
39365 var groupSizes = [];
39366 var groupBases = [];
39367
39368 var s = '';
39369 var i = -1;
39370 while (++i < BN.wordSize) {
39371 zeros[i] = s;
39372 s += '0';
39373 }
39374 groupSizes[0] = 0;
39375 groupSizes[1] = 0;
39376 groupBases[0] = 0;
39377 groupBases[1] = 0;
39378 var base = 2 - 1;
39379 while (++base < 36 + 1) {
39380 var groupSize = 0;
39381 var groupBase = 1;
39382 while (groupBase < (1 << BN.wordSize) / base) {
39383 groupBase *= base;
39384 groupSize += 1;
39385 }
39386 groupSizes[base] = groupSize;
39387 groupBases[base] = groupBase;
39388 }
39389
39390 */
39391
39392 var zeros = [
39393 '',
39394 '0',
39395 '00',
39396 '000',
39397 '0000',
39398 '00000',
39399 '000000',
39400 '0000000',
39401 '00000000',
39402 '000000000',
39403 '0000000000',
39404 '00000000000',
39405 '000000000000',
39406 '0000000000000',
39407 '00000000000000',
39408 '000000000000000',
39409 '0000000000000000',
39410 '00000000000000000',
39411 '000000000000000000',
39412 '0000000000000000000',
39413 '00000000000000000000',
39414 '000000000000000000000',
39415 '0000000000000000000000',
39416 '00000000000000000000000',
39417 '000000000000000000000000',
39418 '0000000000000000000000000'
39419 ];
39420
39421 var groupSizes = [
39422 0, 0,
39423 25, 16, 12, 11, 10, 9, 8,
39424 8, 7, 7, 7, 7, 6, 6,
39425 6, 6, 6, 6, 6, 5, 5,
39426 5, 5, 5, 5, 5, 5, 5,
39427 5, 5, 5, 5, 5, 5, 5
39428 ];
39429
39430 var groupBases = [
39431 0, 0,
39432 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
39433 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
39434 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
39435 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
39436 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
39437 ];
39438
39439 BN.prototype.toString = function toString (base, padding) {
39440 base = base || 10;
39441 padding = padding | 0 || 1;
39442
39443 var out;
39444 if (base === 16 || base === 'hex') {
39445 out = '';
39446 var off = 0;
39447 var carry = 0;
39448 for (var i = 0; i < this.length; i++) {
39449 var w = this.words[i];
39450 var word = (((w << off) | carry) & 0xffffff).toString(16);
39451 carry = (w >>> (24 - off)) & 0xffffff;
39452 if (carry !== 0 || i !== this.length - 1) {
39453 out = zeros[6 - word.length] + word + out;
39454 } else {
39455 out = word + out;
39456 }
39457 off += 2;
39458 if (off >= 26) {
39459 off -= 26;
39460 i--;
39461 }
39462 }
39463 if (carry !== 0) {
39464 out = carry.toString(16) + out;
39465 }
39466 while (out.length % padding !== 0) {
39467 out = '0' + out;
39468 }
39469 if (this.negative !== 0) {
39470 out = '-' + out;
39471 }
39472 return out;
39473 }
39474
39475 if (base === (base | 0) && base >= 2 && base <= 36) {
39476 // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
39477 var groupSize = groupSizes[base];
39478 // var groupBase = Math.pow(base, groupSize);
39479 var groupBase = groupBases[base];
39480 out = '';
39481 var c = this.clone();
39482 c.negative = 0;
39483 while (!c.isZero()) {
39484 var r = c.modn(groupBase).toString(base);
39485 c = c.idivn(groupBase);
39486
39487 if (!c.isZero()) {
39488 out = zeros[groupSize - r.length] + r + out;
39489 } else {
39490 out = r + out;
39491 }
39492 }
39493 if (this.isZero()) {
39494 out = '0' + out;
39495 }
39496 while (out.length % padding !== 0) {
39497 out = '0' + out;
39498 }
39499 if (this.negative !== 0) {
39500 out = '-' + out;
39501 }
39502 return out;
39503 }
39504
39505 assert(false, 'Base should be between 2 and 36');
39506 };
39507
39508 BN.prototype.toNumber = function toNumber () {
39509 var ret = this.words[0];
39510 if (this.length === 2) {
39511 ret += this.words[1] * 0x4000000;
39512 } else if (this.length === 3 && this.words[2] === 0x01) {
39513 // NOTE: at this stage it is known that the top bit is set
39514 ret += 0x10000000000000 + (this.words[1] * 0x4000000);
39515 } else if (this.length > 2) {
39516 assert(false, 'Number can only safely store up to 53 bits');
39517 }
39518 return (this.negative !== 0) ? -ret : ret;
39519 };
39520
39521 BN.prototype.toJSON = function toJSON () {
39522 return this.toString(16);
39523 };
39524
39525 BN.prototype.toBuffer = function toBuffer (endian, length) {
39526 assert(typeof Buffer !== 'undefined');
39527 return this.toArrayLike(Buffer, endian, length);
39528 };
39529
39530 BN.prototype.toArray = function toArray (endian, length) {
39531 return this.toArrayLike(Array, endian, length);
39532 };
39533
39534 BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
39535 var byteLength = this.byteLength();
39536 var reqLength = length || Math.max(1, byteLength);
39537 assert(byteLength <= reqLength, 'byte array longer than desired length');
39538 assert(reqLength > 0, 'Requested array length <= 0');
39539
39540 this.strip();
39541 var littleEndian = endian === 'le';
39542 var res = new ArrayType(reqLength);
39543
39544 var b, i;
39545 var q = this.clone();
39546 if (!littleEndian) {
39547 // Assume big-endian
39548 for (i = 0; i < reqLength - byteLength; i++) {
39549 res[i] = 0;
39550 }
39551
39552 for (i = 0; !q.isZero(); i++) {
39553 b = q.andln(0xff);
39554 q.iushrn(8);
39555
39556 res[reqLength - i - 1] = b;
39557 }
39558 } else {
39559 for (i = 0; !q.isZero(); i++) {
39560 b = q.andln(0xff);
39561 q.iushrn(8);
39562
39563 res[i] = b;
39564 }
39565
39566 for (; i < reqLength; i++) {
39567 res[i] = 0;
39568 }
39569 }
39570
39571 return res;
39572 };
39573
39574 if (Math.clz32) {
39575 BN.prototype._countBits = function _countBits (w) {
39576 return 32 - Math.clz32(w);
39577 };
39578 } else {
39579 BN.prototype._countBits = function _countBits (w) {
39580 var t = w;
39581 var r = 0;
39582 if (t >= 0x1000) {
39583 r += 13;
39584 t >>>= 13;
39585 }
39586 if (t >= 0x40) {
39587 r += 7;
39588 t >>>= 7;
39589 }
39590 if (t >= 0x8) {
39591 r += 4;
39592 t >>>= 4;
39593 }
39594 if (t >= 0x02) {
39595 r += 2;
39596 t >>>= 2;
39597 }
39598 return r + t;
39599 };
39600 }
39601
39602 BN.prototype._zeroBits = function _zeroBits (w) {
39603 // Short-cut
39604 if (w === 0) return 26;
39605
39606 var t = w;
39607 var r = 0;
39608 if ((t & 0x1fff) === 0) {
39609 r += 13;
39610 t >>>= 13;
39611 }
39612 if ((t & 0x7f) === 0) {
39613 r += 7;
39614 t >>>= 7;
39615 }
39616 if ((t & 0xf) === 0) {
39617 r += 4;
39618 t >>>= 4;
39619 }
39620 if ((t & 0x3) === 0) {
39621 r += 2;
39622 t >>>= 2;
39623 }
39624 if ((t & 0x1) === 0) {
39625 r++;
39626 }
39627 return r;
39628 };
39629
39630 // Return number of used bits in a BN
39631 BN.prototype.bitLength = function bitLength () {
39632 var w = this.words[this.length - 1];
39633 var hi = this._countBits(w);
39634 return (this.length - 1) * 26 + hi;
39635 };
39636
39637 function toBitArray (num) {
39638 var w = new Array(num.bitLength());
39639
39640 for (var bit = 0; bit < w.length; bit++) {
39641 var off = (bit / 26) | 0;
39642 var wbit = bit % 26;
39643
39644 w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
39645 }
39646
39647 return w;
39648 }
39649
39650 // Number of trailing zero bits
39651 BN.prototype.zeroBits = function zeroBits () {
39652 if (this.isZero()) return 0;
39653
39654 var r = 0;
39655 for (var i = 0; i < this.length; i++) {
39656 var b = this._zeroBits(this.words[i]);
39657 r += b;
39658 if (b !== 26) break;
39659 }
39660 return r;
39661 };
39662
39663 BN.prototype.byteLength = function byteLength () {
39664 return Math.ceil(this.bitLength() / 8);
39665 };
39666
39667 BN.prototype.toTwos = function toTwos (width) {
39668 if (this.negative !== 0) {
39669 return this.abs().inotn(width).iaddn(1);
39670 }
39671 return this.clone();
39672 };
39673
39674 BN.prototype.fromTwos = function fromTwos (width) {
39675 if (this.testn(width - 1)) {
39676 return this.notn(width).iaddn(1).ineg();
39677 }
39678 return this.clone();
39679 };
39680
39681 BN.prototype.isNeg = function isNeg () {
39682 return this.negative !== 0;
39683 };
39684
39685 // Return negative clone of `this`
39686 BN.prototype.neg = function neg () {
39687 return this.clone().ineg();
39688 };
39689
39690 BN.prototype.ineg = function ineg () {
39691 if (!this.isZero()) {
39692 this.negative ^= 1;
39693 }
39694
39695 return this;
39696 };
39697
39698 // Or `num` with `this` in-place
39699 BN.prototype.iuor = function iuor (num) {
39700 while (this.length < num.length) {
39701 this.words[this.length++] = 0;
39702 }
39703
39704 for (var i = 0; i < num.length; i++) {
39705 this.words[i] = this.words[i] | num.words[i];
39706 }
39707
39708 return this.strip();
39709 };
39710
39711 BN.prototype.ior = function ior (num) {
39712 assert((this.negative | num.negative) === 0);
39713 return this.iuor(num);
39714 };
39715
39716 // Or `num` with `this`
39717 BN.prototype.or = function or (num) {
39718 if (this.length > num.length) return this.clone().ior(num);
39719 return num.clone().ior(this);
39720 };
39721
39722 BN.prototype.uor = function uor (num) {
39723 if (this.length > num.length) return this.clone().iuor(num);
39724 return num.clone().iuor(this);
39725 };
39726
39727 // And `num` with `this` in-place
39728 BN.prototype.iuand = function iuand (num) {
39729 // b = min-length(num, this)
39730 var b;
39731 if (this.length > num.length) {
39732 b = num;
39733 } else {
39734 b = this;
39735 }
39736
39737 for (var i = 0; i < b.length; i++) {
39738 this.words[i] = this.words[i] & num.words[i];
39739 }
39740
39741 this.length = b.length;
39742
39743 return this.strip();
39744 };
39745
39746 BN.prototype.iand = function iand (num) {
39747 assert((this.negative | num.negative) === 0);
39748 return this.iuand(num);
39749 };
39750
39751 // And `num` with `this`
39752 BN.prototype.and = function and (num) {
39753 if (this.length > num.length) return this.clone().iand(num);
39754 return num.clone().iand(this);
39755 };
39756
39757 BN.prototype.uand = function uand (num) {
39758 if (this.length > num.length) return this.clone().iuand(num);
39759 return num.clone().iuand(this);
39760 };
39761
39762 // Xor `num` with `this` in-place
39763 BN.prototype.iuxor = function iuxor (num) {
39764 // a.length > b.length
39765 var a;
39766 var b;
39767 if (this.length > num.length) {
39768 a = this;
39769 b = num;
39770 } else {
39771 a = num;
39772 b = this;
39773 }
39774
39775 for (var i = 0; i < b.length; i++) {
39776 this.words[i] = a.words[i] ^ b.words[i];
39777 }
39778
39779 if (this !== a) {
39780 for (; i < a.length; i++) {
39781 this.words[i] = a.words[i];
39782 }
39783 }
39784
39785 this.length = a.length;
39786
39787 return this.strip();
39788 };
39789
39790 BN.prototype.ixor = function ixor (num) {
39791 assert((this.negative | num.negative) === 0);
39792 return this.iuxor(num);
39793 };
39794
39795 // Xor `num` with `this`
39796 BN.prototype.xor = function xor (num) {
39797 if (this.length > num.length) return this.clone().ixor(num);
39798 return num.clone().ixor(this);
39799 };
39800
39801 BN.prototype.uxor = function uxor (num) {
39802 if (this.length > num.length) return this.clone().iuxor(num);
39803 return num.clone().iuxor(this);
39804 };
39805
39806 // Not ``this`` with ``width`` bitwidth
39807 BN.prototype.inotn = function inotn (width) {
39808 assert(typeof width === 'number' && width >= 0);
39809
39810 var bytesNeeded = Math.ceil(width / 26) | 0;
39811 var bitsLeft = width % 26;
39812
39813 // Extend the buffer with leading zeroes
39814 this._expand(bytesNeeded);
39815
39816 if (bitsLeft > 0) {
39817 bytesNeeded--;
39818 }
39819
39820 // Handle complete words
39821 for (var i = 0; i < bytesNeeded; i++) {
39822 this.words[i] = ~this.words[i] & 0x3ffffff;
39823 }
39824
39825 // Handle the residue
39826 if (bitsLeft > 0) {
39827 this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
39828 }
39829
39830 // And remove leading zeroes
39831 return this.strip();
39832 };
39833
39834 BN.prototype.notn = function notn (width) {
39835 return this.clone().inotn(width);
39836 };
39837
39838 // Set `bit` of `this`
39839 BN.prototype.setn = function setn (bit, val) {
39840 assert(typeof bit === 'number' && bit >= 0);
39841
39842 var off = (bit / 26) | 0;
39843 var wbit = bit % 26;
39844
39845 this._expand(off + 1);
39846
39847 if (val) {
39848 this.words[off] = this.words[off] | (1 << wbit);
39849 } else {
39850 this.words[off] = this.words[off] & ~(1 << wbit);
39851 }
39852
39853 return this.strip();
39854 };
39855
39856 // Add `num` to `this` in-place
39857 BN.prototype.iadd = function iadd (num) {
39858 var r;
39859
39860 // negative + positive
39861 if (this.negative !== 0 && num.negative === 0) {
39862 this.negative = 0;
39863 r = this.isub(num);
39864 this.negative ^= 1;
39865 return this._normSign();
39866
39867 // positive + negative
39868 } else if (this.negative === 0 && num.negative !== 0) {
39869 num.negative = 0;
39870 r = this.isub(num);
39871 num.negative = 1;
39872 return r._normSign();
39873 }
39874
39875 // a.length > b.length
39876 var a, b;
39877 if (this.length > num.length) {
39878 a = this;
39879 b = num;
39880 } else {
39881 a = num;
39882 b = this;
39883 }
39884
39885 var carry = 0;
39886 for (var i = 0; i < b.length; i++) {
39887 r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
39888 this.words[i] = r & 0x3ffffff;
39889 carry = r >>> 26;
39890 }
39891 for (; carry !== 0 && i < a.length; i++) {
39892 r = (a.words[i] | 0) + carry;
39893 this.words[i] = r & 0x3ffffff;
39894 carry = r >>> 26;
39895 }
39896
39897 this.length = a.length;
39898 if (carry !== 0) {
39899 this.words[this.length] = carry;
39900 this.length++;
39901 // Copy the rest of the words
39902 } else if (a !== this) {
39903 for (; i < a.length; i++) {
39904 this.words[i] = a.words[i];
39905 }
39906 }
39907
39908 return this;
39909 };
39910
39911 // Add `num` to `this`
39912 BN.prototype.add = function add (num) {
39913 var res;
39914 if (num.negative !== 0 && this.negative === 0) {
39915 num.negative = 0;
39916 res = this.sub(num);
39917 num.negative ^= 1;
39918 return res;
39919 } else if (num.negative === 0 && this.negative !== 0) {
39920 this.negative = 0;
39921 res = num.sub(this);
39922 this.negative = 1;
39923 return res;
39924 }
39925
39926 if (this.length > num.length) return this.clone().iadd(num);
39927
39928 return num.clone().iadd(this);
39929 };
39930
39931 // Subtract `num` from `this` in-place
39932 BN.prototype.isub = function isub (num) {
39933 // this - (-num) = this + num
39934 if (num.negative !== 0) {
39935 num.negative = 0;
39936 var r = this.iadd(num);
39937 num.negative = 1;
39938 return r._normSign();
39939
39940 // -this - num = -(this + num)
39941 } else if (this.negative !== 0) {
39942 this.negative = 0;
39943 this.iadd(num);
39944 this.negative = 1;
39945 return this._normSign();
39946 }
39947
39948 // At this point both numbers are positive
39949 var cmp = this.cmp(num);
39950
39951 // Optimization - zeroify
39952 if (cmp === 0) {
39953 this.negative = 0;
39954 this.length = 1;
39955 this.words[0] = 0;
39956 return this;
39957 }
39958
39959 // a > b
39960 var a, b;
39961 if (cmp > 0) {
39962 a = this;
39963 b = num;
39964 } else {
39965 a = num;
39966 b = this;
39967 }
39968
39969 var carry = 0;
39970 for (var i = 0; i < b.length; i++) {
39971 r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
39972 carry = r >> 26;
39973 this.words[i] = r & 0x3ffffff;
39974 }
39975 for (; carry !== 0 && i < a.length; i++) {
39976 r = (a.words[i] | 0) + carry;
39977 carry = r >> 26;
39978 this.words[i] = r & 0x3ffffff;
39979 }
39980
39981 // Copy rest of the words
39982 if (carry === 0 && i < a.length && a !== this) {
39983 for (; i < a.length; i++) {
39984 this.words[i] = a.words[i];
39985 }
39986 }
39987
39988 this.length = Math.max(this.length, i);
39989
39990 if (a !== this) {
39991 this.negative = 1;
39992 }
39993
39994 return this.strip();
39995 };
39996
39997 // Subtract `num` from `this`
39998 BN.prototype.sub = function sub (num) {
39999 return this.clone().isub(num);
40000 };
40001
40002 function smallMulTo (self, num, out) {
40003 out.negative = num.negative ^ self.negative;
40004 var len = (self.length + num.length) | 0;
40005 out.length = len;
40006 len = (len - 1) | 0;
40007
40008 // Peel one iteration (compiler can't do it, because of code complexity)
40009 var a = self.words[0] | 0;
40010 var b = num.words[0] | 0;
40011 var r = a * b;
40012
40013 var lo = r & 0x3ffffff;
40014 var carry = (r / 0x4000000) | 0;
40015 out.words[0] = lo;
40016
40017 for (var k = 1; k < len; k++) {
40018 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
40019 // note that ncarry could be >= 0x3ffffff
40020 var ncarry = carry >>> 26;
40021 var rword = carry & 0x3ffffff;
40022 var maxJ = Math.min(k, num.length - 1);
40023 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
40024 var i = (k - j) | 0;
40025 a = self.words[i] | 0;
40026 b = num.words[j] | 0;
40027 r = a * b + rword;
40028 ncarry += (r / 0x4000000) | 0;
40029 rword = r & 0x3ffffff;
40030 }
40031 out.words[k] = rword | 0;
40032 carry = ncarry | 0;
40033 }
40034 if (carry !== 0) {
40035 out.words[k] = carry | 0;
40036 } else {
40037 out.length--;
40038 }
40039
40040 return out.strip();
40041 }
40042
40043 // TODO(indutny): it may be reasonable to omit it for users who don't need
40044 // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
40045 // multiplication (like elliptic secp256k1).
40046 var comb10MulTo = function comb10MulTo (self, num, out) {
40047 var a = self.words;
40048 var b = num.words;
40049 var o = out.words;
40050 var c = 0;
40051 var lo;
40052 var mid;
40053 var hi;
40054 var a0 = a[0] | 0;
40055 var al0 = a0 & 0x1fff;
40056 var ah0 = a0 >>> 13;
40057 var a1 = a[1] | 0;
40058 var al1 = a1 & 0x1fff;
40059 var ah1 = a1 >>> 13;
40060 var a2 = a[2] | 0;
40061 var al2 = a2 & 0x1fff;
40062 var ah2 = a2 >>> 13;
40063 var a3 = a[3] | 0;
40064 var al3 = a3 & 0x1fff;
40065 var ah3 = a3 >>> 13;
40066 var a4 = a[4] | 0;
40067 var al4 = a4 & 0x1fff;
40068 var ah4 = a4 >>> 13;
40069 var a5 = a[5] | 0;
40070 var al5 = a5 & 0x1fff;
40071 var ah5 = a5 >>> 13;
40072 var a6 = a[6] | 0;
40073 var al6 = a6 & 0x1fff;
40074 var ah6 = a6 >>> 13;
40075 var a7 = a[7] | 0;
40076 var al7 = a7 & 0x1fff;
40077 var ah7 = a7 >>> 13;
40078 var a8 = a[8] | 0;
40079 var al8 = a8 & 0x1fff;
40080 var ah8 = a8 >>> 13;
40081 var a9 = a[9] | 0;
40082 var al9 = a9 & 0x1fff;
40083 var ah9 = a9 >>> 13;
40084 var b0 = b[0] | 0;
40085 var bl0 = b0 & 0x1fff;
40086 var bh0 = b0 >>> 13;
40087 var b1 = b[1] | 0;
40088 var bl1 = b1 & 0x1fff;
40089 var bh1 = b1 >>> 13;
40090 var b2 = b[2] | 0;
40091 var bl2 = b2 & 0x1fff;
40092 var bh2 = b2 >>> 13;
40093 var b3 = b[3] | 0;
40094 var bl3 = b3 & 0x1fff;
40095 var bh3 = b3 >>> 13;
40096 var b4 = b[4] | 0;
40097 var bl4 = b4 & 0x1fff;
40098 var bh4 = b4 >>> 13;
40099 var b5 = b[5] | 0;
40100 var bl5 = b5 & 0x1fff;
40101 var bh5 = b5 >>> 13;
40102 var b6 = b[6] | 0;
40103 var bl6 = b6 & 0x1fff;
40104 var bh6 = b6 >>> 13;
40105 var b7 = b[7] | 0;
40106 var bl7 = b7 & 0x1fff;
40107 var bh7 = b7 >>> 13;
40108 var b8 = b[8] | 0;
40109 var bl8 = b8 & 0x1fff;
40110 var bh8 = b8 >>> 13;
40111 var b9 = b[9] | 0;
40112 var bl9 = b9 & 0x1fff;
40113 var bh9 = b9 >>> 13;
40114
40115 out.negative = self.negative ^ num.negative;
40116 out.length = 19;
40117 /* k = 0 */
40118 lo = Math.imul(al0, bl0);
40119 mid = Math.imul(al0, bh0);
40120 mid = (mid + Math.imul(ah0, bl0)) | 0;
40121 hi = Math.imul(ah0, bh0);
40122 var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40123 c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
40124 w0 &= 0x3ffffff;
40125 /* k = 1 */
40126 lo = Math.imul(al1, bl0);
40127 mid = Math.imul(al1, bh0);
40128 mid = (mid + Math.imul(ah1, bl0)) | 0;
40129 hi = Math.imul(ah1, bh0);
40130 lo = (lo + Math.imul(al0, bl1)) | 0;
40131 mid = (mid + Math.imul(al0, bh1)) | 0;
40132 mid = (mid + Math.imul(ah0, bl1)) | 0;
40133 hi = (hi + Math.imul(ah0, bh1)) | 0;
40134 var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40135 c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
40136 w1 &= 0x3ffffff;
40137 /* k = 2 */
40138 lo = Math.imul(al2, bl0);
40139 mid = Math.imul(al2, bh0);
40140 mid = (mid + Math.imul(ah2, bl0)) | 0;
40141 hi = Math.imul(ah2, bh0);
40142 lo = (lo + Math.imul(al1, bl1)) | 0;
40143 mid = (mid + Math.imul(al1, bh1)) | 0;
40144 mid = (mid + Math.imul(ah1, bl1)) | 0;
40145 hi = (hi + Math.imul(ah1, bh1)) | 0;
40146 lo = (lo + Math.imul(al0, bl2)) | 0;
40147 mid = (mid + Math.imul(al0, bh2)) | 0;
40148 mid = (mid + Math.imul(ah0, bl2)) | 0;
40149 hi = (hi + Math.imul(ah0, bh2)) | 0;
40150 var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40151 c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
40152 w2 &= 0x3ffffff;
40153 /* k = 3 */
40154 lo = Math.imul(al3, bl0);
40155 mid = Math.imul(al3, bh0);
40156 mid = (mid + Math.imul(ah3, bl0)) | 0;
40157 hi = Math.imul(ah3, bh0);
40158 lo = (lo + Math.imul(al2, bl1)) | 0;
40159 mid = (mid + Math.imul(al2, bh1)) | 0;
40160 mid = (mid + Math.imul(ah2, bl1)) | 0;
40161 hi = (hi + Math.imul(ah2, bh1)) | 0;
40162 lo = (lo + Math.imul(al1, bl2)) | 0;
40163 mid = (mid + Math.imul(al1, bh2)) | 0;
40164 mid = (mid + Math.imul(ah1, bl2)) | 0;
40165 hi = (hi + Math.imul(ah1, bh2)) | 0;
40166 lo = (lo + Math.imul(al0, bl3)) | 0;
40167 mid = (mid + Math.imul(al0, bh3)) | 0;
40168 mid = (mid + Math.imul(ah0, bl3)) | 0;
40169 hi = (hi + Math.imul(ah0, bh3)) | 0;
40170 var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40171 c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
40172 w3 &= 0x3ffffff;
40173 /* k = 4 */
40174 lo = Math.imul(al4, bl0);
40175 mid = Math.imul(al4, bh0);
40176 mid = (mid + Math.imul(ah4, bl0)) | 0;
40177 hi = Math.imul(ah4, bh0);
40178 lo = (lo + Math.imul(al3, bl1)) | 0;
40179 mid = (mid + Math.imul(al3, bh1)) | 0;
40180 mid = (mid + Math.imul(ah3, bl1)) | 0;
40181 hi = (hi + Math.imul(ah3, bh1)) | 0;
40182 lo = (lo + Math.imul(al2, bl2)) | 0;
40183 mid = (mid + Math.imul(al2, bh2)) | 0;
40184 mid = (mid + Math.imul(ah2, bl2)) | 0;
40185 hi = (hi + Math.imul(ah2, bh2)) | 0;
40186 lo = (lo + Math.imul(al1, bl3)) | 0;
40187 mid = (mid + Math.imul(al1, bh3)) | 0;
40188 mid = (mid + Math.imul(ah1, bl3)) | 0;
40189 hi = (hi + Math.imul(ah1, bh3)) | 0;
40190 lo = (lo + Math.imul(al0, bl4)) | 0;
40191 mid = (mid + Math.imul(al0, bh4)) | 0;
40192 mid = (mid + Math.imul(ah0, bl4)) | 0;
40193 hi = (hi + Math.imul(ah0, bh4)) | 0;
40194 var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40195 c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
40196 w4 &= 0x3ffffff;
40197 /* k = 5 */
40198 lo = Math.imul(al5, bl0);
40199 mid = Math.imul(al5, bh0);
40200 mid = (mid + Math.imul(ah5, bl0)) | 0;
40201 hi = Math.imul(ah5, bh0);
40202 lo = (lo + Math.imul(al4, bl1)) | 0;
40203 mid = (mid + Math.imul(al4, bh1)) | 0;
40204 mid = (mid + Math.imul(ah4, bl1)) | 0;
40205 hi = (hi + Math.imul(ah4, bh1)) | 0;
40206 lo = (lo + Math.imul(al3, bl2)) | 0;
40207 mid = (mid + Math.imul(al3, bh2)) | 0;
40208 mid = (mid + Math.imul(ah3, bl2)) | 0;
40209 hi = (hi + Math.imul(ah3, bh2)) | 0;
40210 lo = (lo + Math.imul(al2, bl3)) | 0;
40211 mid = (mid + Math.imul(al2, bh3)) | 0;
40212 mid = (mid + Math.imul(ah2, bl3)) | 0;
40213 hi = (hi + Math.imul(ah2, bh3)) | 0;
40214 lo = (lo + Math.imul(al1, bl4)) | 0;
40215 mid = (mid + Math.imul(al1, bh4)) | 0;
40216 mid = (mid + Math.imul(ah1, bl4)) | 0;
40217 hi = (hi + Math.imul(ah1, bh4)) | 0;
40218 lo = (lo + Math.imul(al0, bl5)) | 0;
40219 mid = (mid + Math.imul(al0, bh5)) | 0;
40220 mid = (mid + Math.imul(ah0, bl5)) | 0;
40221 hi = (hi + Math.imul(ah0, bh5)) | 0;
40222 var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40223 c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
40224 w5 &= 0x3ffffff;
40225 /* k = 6 */
40226 lo = Math.imul(al6, bl0);
40227 mid = Math.imul(al6, bh0);
40228 mid = (mid + Math.imul(ah6, bl0)) | 0;
40229 hi = Math.imul(ah6, bh0);
40230 lo = (lo + Math.imul(al5, bl1)) | 0;
40231 mid = (mid + Math.imul(al5, bh1)) | 0;
40232 mid = (mid + Math.imul(ah5, bl1)) | 0;
40233 hi = (hi + Math.imul(ah5, bh1)) | 0;
40234 lo = (lo + Math.imul(al4, bl2)) | 0;
40235 mid = (mid + Math.imul(al4, bh2)) | 0;
40236 mid = (mid + Math.imul(ah4, bl2)) | 0;
40237 hi = (hi + Math.imul(ah4, bh2)) | 0;
40238 lo = (lo + Math.imul(al3, bl3)) | 0;
40239 mid = (mid + Math.imul(al3, bh3)) | 0;
40240 mid = (mid + Math.imul(ah3, bl3)) | 0;
40241 hi = (hi + Math.imul(ah3, bh3)) | 0;
40242 lo = (lo + Math.imul(al2, bl4)) | 0;
40243 mid = (mid + Math.imul(al2, bh4)) | 0;
40244 mid = (mid + Math.imul(ah2, bl4)) | 0;
40245 hi = (hi + Math.imul(ah2, bh4)) | 0;
40246 lo = (lo + Math.imul(al1, bl5)) | 0;
40247 mid = (mid + Math.imul(al1, bh5)) | 0;
40248 mid = (mid + Math.imul(ah1, bl5)) | 0;
40249 hi = (hi + Math.imul(ah1, bh5)) | 0;
40250 lo = (lo + Math.imul(al0, bl6)) | 0;
40251 mid = (mid + Math.imul(al0, bh6)) | 0;
40252 mid = (mid + Math.imul(ah0, bl6)) | 0;
40253 hi = (hi + Math.imul(ah0, bh6)) | 0;
40254 var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40255 c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
40256 w6 &= 0x3ffffff;
40257 /* k = 7 */
40258 lo = Math.imul(al7, bl0);
40259 mid = Math.imul(al7, bh0);
40260 mid = (mid + Math.imul(ah7, bl0)) | 0;
40261 hi = Math.imul(ah7, bh0);
40262 lo = (lo + Math.imul(al6, bl1)) | 0;
40263 mid = (mid + Math.imul(al6, bh1)) | 0;
40264 mid = (mid + Math.imul(ah6, bl1)) | 0;
40265 hi = (hi + Math.imul(ah6, bh1)) | 0;
40266 lo = (lo + Math.imul(al5, bl2)) | 0;
40267 mid = (mid + Math.imul(al5, bh2)) | 0;
40268 mid = (mid + Math.imul(ah5, bl2)) | 0;
40269 hi = (hi + Math.imul(ah5, bh2)) | 0;
40270 lo = (lo + Math.imul(al4, bl3)) | 0;
40271 mid = (mid + Math.imul(al4, bh3)) | 0;
40272 mid = (mid + Math.imul(ah4, bl3)) | 0;
40273 hi = (hi + Math.imul(ah4, bh3)) | 0;
40274 lo = (lo + Math.imul(al3, bl4)) | 0;
40275 mid = (mid + Math.imul(al3, bh4)) | 0;
40276 mid = (mid + Math.imul(ah3, bl4)) | 0;
40277 hi = (hi + Math.imul(ah3, bh4)) | 0;
40278 lo = (lo + Math.imul(al2, bl5)) | 0;
40279 mid = (mid + Math.imul(al2, bh5)) | 0;
40280 mid = (mid + Math.imul(ah2, bl5)) | 0;
40281 hi = (hi + Math.imul(ah2, bh5)) | 0;
40282 lo = (lo + Math.imul(al1, bl6)) | 0;
40283 mid = (mid + Math.imul(al1, bh6)) | 0;
40284 mid = (mid + Math.imul(ah1, bl6)) | 0;
40285 hi = (hi + Math.imul(ah1, bh6)) | 0;
40286 lo = (lo + Math.imul(al0, bl7)) | 0;
40287 mid = (mid + Math.imul(al0, bh7)) | 0;
40288 mid = (mid + Math.imul(ah0, bl7)) | 0;
40289 hi = (hi + Math.imul(ah0, bh7)) | 0;
40290 var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40291 c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
40292 w7 &= 0x3ffffff;
40293 /* k = 8 */
40294 lo = Math.imul(al8, bl0);
40295 mid = Math.imul(al8, bh0);
40296 mid = (mid + Math.imul(ah8, bl0)) | 0;
40297 hi = Math.imul(ah8, bh0);
40298 lo = (lo + Math.imul(al7, bl1)) | 0;
40299 mid = (mid + Math.imul(al7, bh1)) | 0;
40300 mid = (mid + Math.imul(ah7, bl1)) | 0;
40301 hi = (hi + Math.imul(ah7, bh1)) | 0;
40302 lo = (lo + Math.imul(al6, bl2)) | 0;
40303 mid = (mid + Math.imul(al6, bh2)) | 0;
40304 mid = (mid + Math.imul(ah6, bl2)) | 0;
40305 hi = (hi + Math.imul(ah6, bh2)) | 0;
40306 lo = (lo + Math.imul(al5, bl3)) | 0;
40307 mid = (mid + Math.imul(al5, bh3)) | 0;
40308 mid = (mid + Math.imul(ah5, bl3)) | 0;
40309 hi = (hi + Math.imul(ah5, bh3)) | 0;
40310 lo = (lo + Math.imul(al4, bl4)) | 0;
40311 mid = (mid + Math.imul(al4, bh4)) | 0;
40312 mid = (mid + Math.imul(ah4, bl4)) | 0;
40313 hi = (hi + Math.imul(ah4, bh4)) | 0;
40314 lo = (lo + Math.imul(al3, bl5)) | 0;
40315 mid = (mid + Math.imul(al3, bh5)) | 0;
40316 mid = (mid + Math.imul(ah3, bl5)) | 0;
40317 hi = (hi + Math.imul(ah3, bh5)) | 0;
40318 lo = (lo + Math.imul(al2, bl6)) | 0;
40319 mid = (mid + Math.imul(al2, bh6)) | 0;
40320 mid = (mid + Math.imul(ah2, bl6)) | 0;
40321 hi = (hi + Math.imul(ah2, bh6)) | 0;
40322 lo = (lo + Math.imul(al1, bl7)) | 0;
40323 mid = (mid + Math.imul(al1, bh7)) | 0;
40324 mid = (mid + Math.imul(ah1, bl7)) | 0;
40325 hi = (hi + Math.imul(ah1, bh7)) | 0;
40326 lo = (lo + Math.imul(al0, bl8)) | 0;
40327 mid = (mid + Math.imul(al0, bh8)) | 0;
40328 mid = (mid + Math.imul(ah0, bl8)) | 0;
40329 hi = (hi + Math.imul(ah0, bh8)) | 0;
40330 var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40331 c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
40332 w8 &= 0x3ffffff;
40333 /* k = 9 */
40334 lo = Math.imul(al9, bl0);
40335 mid = Math.imul(al9, bh0);
40336 mid = (mid + Math.imul(ah9, bl0)) | 0;
40337 hi = Math.imul(ah9, bh0);
40338 lo = (lo + Math.imul(al8, bl1)) | 0;
40339 mid = (mid + Math.imul(al8, bh1)) | 0;
40340 mid = (mid + Math.imul(ah8, bl1)) | 0;
40341 hi = (hi + Math.imul(ah8, bh1)) | 0;
40342 lo = (lo + Math.imul(al7, bl2)) | 0;
40343 mid = (mid + Math.imul(al7, bh2)) | 0;
40344 mid = (mid + Math.imul(ah7, bl2)) | 0;
40345 hi = (hi + Math.imul(ah7, bh2)) | 0;
40346 lo = (lo + Math.imul(al6, bl3)) | 0;
40347 mid = (mid + Math.imul(al6, bh3)) | 0;
40348 mid = (mid + Math.imul(ah6, bl3)) | 0;
40349 hi = (hi + Math.imul(ah6, bh3)) | 0;
40350 lo = (lo + Math.imul(al5, bl4)) | 0;
40351 mid = (mid + Math.imul(al5, bh4)) | 0;
40352 mid = (mid + Math.imul(ah5, bl4)) | 0;
40353 hi = (hi + Math.imul(ah5, bh4)) | 0;
40354 lo = (lo + Math.imul(al4, bl5)) | 0;
40355 mid = (mid + Math.imul(al4, bh5)) | 0;
40356 mid = (mid + Math.imul(ah4, bl5)) | 0;
40357 hi = (hi + Math.imul(ah4, bh5)) | 0;
40358 lo = (lo + Math.imul(al3, bl6)) | 0;
40359 mid = (mid + Math.imul(al3, bh6)) | 0;
40360 mid = (mid + Math.imul(ah3, bl6)) | 0;
40361 hi = (hi + Math.imul(ah3, bh6)) | 0;
40362 lo = (lo + Math.imul(al2, bl7)) | 0;
40363 mid = (mid + Math.imul(al2, bh7)) | 0;
40364 mid = (mid + Math.imul(ah2, bl7)) | 0;
40365 hi = (hi + Math.imul(ah2, bh7)) | 0;
40366 lo = (lo + Math.imul(al1, bl8)) | 0;
40367 mid = (mid + Math.imul(al1, bh8)) | 0;
40368 mid = (mid + Math.imul(ah1, bl8)) | 0;
40369 hi = (hi + Math.imul(ah1, bh8)) | 0;
40370 lo = (lo + Math.imul(al0, bl9)) | 0;
40371 mid = (mid + Math.imul(al0, bh9)) | 0;
40372 mid = (mid + Math.imul(ah0, bl9)) | 0;
40373 hi = (hi + Math.imul(ah0, bh9)) | 0;
40374 var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40375 c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
40376 w9 &= 0x3ffffff;
40377 /* k = 10 */
40378 lo = Math.imul(al9, bl1);
40379 mid = Math.imul(al9, bh1);
40380 mid = (mid + Math.imul(ah9, bl1)) | 0;
40381 hi = Math.imul(ah9, bh1);
40382 lo = (lo + Math.imul(al8, bl2)) | 0;
40383 mid = (mid + Math.imul(al8, bh2)) | 0;
40384 mid = (mid + Math.imul(ah8, bl2)) | 0;
40385 hi = (hi + Math.imul(ah8, bh2)) | 0;
40386 lo = (lo + Math.imul(al7, bl3)) | 0;
40387 mid = (mid + Math.imul(al7, bh3)) | 0;
40388 mid = (mid + Math.imul(ah7, bl3)) | 0;
40389 hi = (hi + Math.imul(ah7, bh3)) | 0;
40390 lo = (lo + Math.imul(al6, bl4)) | 0;
40391 mid = (mid + Math.imul(al6, bh4)) | 0;
40392 mid = (mid + Math.imul(ah6, bl4)) | 0;
40393 hi = (hi + Math.imul(ah6, bh4)) | 0;
40394 lo = (lo + Math.imul(al5, bl5)) | 0;
40395 mid = (mid + Math.imul(al5, bh5)) | 0;
40396 mid = (mid + Math.imul(ah5, bl5)) | 0;
40397 hi = (hi + Math.imul(ah5, bh5)) | 0;
40398 lo = (lo + Math.imul(al4, bl6)) | 0;
40399 mid = (mid + Math.imul(al4, bh6)) | 0;
40400 mid = (mid + Math.imul(ah4, bl6)) | 0;
40401 hi = (hi + Math.imul(ah4, bh6)) | 0;
40402 lo = (lo + Math.imul(al3, bl7)) | 0;
40403 mid = (mid + Math.imul(al3, bh7)) | 0;
40404 mid = (mid + Math.imul(ah3, bl7)) | 0;
40405 hi = (hi + Math.imul(ah3, bh7)) | 0;
40406 lo = (lo + Math.imul(al2, bl8)) | 0;
40407 mid = (mid + Math.imul(al2, bh8)) | 0;
40408 mid = (mid + Math.imul(ah2, bl8)) | 0;
40409 hi = (hi + Math.imul(ah2, bh8)) | 0;
40410 lo = (lo + Math.imul(al1, bl9)) | 0;
40411 mid = (mid + Math.imul(al1, bh9)) | 0;
40412 mid = (mid + Math.imul(ah1, bl9)) | 0;
40413 hi = (hi + Math.imul(ah1, bh9)) | 0;
40414 var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40415 c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
40416 w10 &= 0x3ffffff;
40417 /* k = 11 */
40418 lo = Math.imul(al9, bl2);
40419 mid = Math.imul(al9, bh2);
40420 mid = (mid + Math.imul(ah9, bl2)) | 0;
40421 hi = Math.imul(ah9, bh2);
40422 lo = (lo + Math.imul(al8, bl3)) | 0;
40423 mid = (mid + Math.imul(al8, bh3)) | 0;
40424 mid = (mid + Math.imul(ah8, bl3)) | 0;
40425 hi = (hi + Math.imul(ah8, bh3)) | 0;
40426 lo = (lo + Math.imul(al7, bl4)) | 0;
40427 mid = (mid + Math.imul(al7, bh4)) | 0;
40428 mid = (mid + Math.imul(ah7, bl4)) | 0;
40429 hi = (hi + Math.imul(ah7, bh4)) | 0;
40430 lo = (lo + Math.imul(al6, bl5)) | 0;
40431 mid = (mid + Math.imul(al6, bh5)) | 0;
40432 mid = (mid + Math.imul(ah6, bl5)) | 0;
40433 hi = (hi + Math.imul(ah6, bh5)) | 0;
40434 lo = (lo + Math.imul(al5, bl6)) | 0;
40435 mid = (mid + Math.imul(al5, bh6)) | 0;
40436 mid = (mid + Math.imul(ah5, bl6)) | 0;
40437 hi = (hi + Math.imul(ah5, bh6)) | 0;
40438 lo = (lo + Math.imul(al4, bl7)) | 0;
40439 mid = (mid + Math.imul(al4, bh7)) | 0;
40440 mid = (mid + Math.imul(ah4, bl7)) | 0;
40441 hi = (hi + Math.imul(ah4, bh7)) | 0;
40442 lo = (lo + Math.imul(al3, bl8)) | 0;
40443 mid = (mid + Math.imul(al3, bh8)) | 0;
40444 mid = (mid + Math.imul(ah3, bl8)) | 0;
40445 hi = (hi + Math.imul(ah3, bh8)) | 0;
40446 lo = (lo + Math.imul(al2, bl9)) | 0;
40447 mid = (mid + Math.imul(al2, bh9)) | 0;
40448 mid = (mid + Math.imul(ah2, bl9)) | 0;
40449 hi = (hi + Math.imul(ah2, bh9)) | 0;
40450 var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40451 c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
40452 w11 &= 0x3ffffff;
40453 /* k = 12 */
40454 lo = Math.imul(al9, bl3);
40455 mid = Math.imul(al9, bh3);
40456 mid = (mid + Math.imul(ah9, bl3)) | 0;
40457 hi = Math.imul(ah9, bh3);
40458 lo = (lo + Math.imul(al8, bl4)) | 0;
40459 mid = (mid + Math.imul(al8, bh4)) | 0;
40460 mid = (mid + Math.imul(ah8, bl4)) | 0;
40461 hi = (hi + Math.imul(ah8, bh4)) | 0;
40462 lo = (lo + Math.imul(al7, bl5)) | 0;
40463 mid = (mid + Math.imul(al7, bh5)) | 0;
40464 mid = (mid + Math.imul(ah7, bl5)) | 0;
40465 hi = (hi + Math.imul(ah7, bh5)) | 0;
40466 lo = (lo + Math.imul(al6, bl6)) | 0;
40467 mid = (mid + Math.imul(al6, bh6)) | 0;
40468 mid = (mid + Math.imul(ah6, bl6)) | 0;
40469 hi = (hi + Math.imul(ah6, bh6)) | 0;
40470 lo = (lo + Math.imul(al5, bl7)) | 0;
40471 mid = (mid + Math.imul(al5, bh7)) | 0;
40472 mid = (mid + Math.imul(ah5, bl7)) | 0;
40473 hi = (hi + Math.imul(ah5, bh7)) | 0;
40474 lo = (lo + Math.imul(al4, bl8)) | 0;
40475 mid = (mid + Math.imul(al4, bh8)) | 0;
40476 mid = (mid + Math.imul(ah4, bl8)) | 0;
40477 hi = (hi + Math.imul(ah4, bh8)) | 0;
40478 lo = (lo + Math.imul(al3, bl9)) | 0;
40479 mid = (mid + Math.imul(al3, bh9)) | 0;
40480 mid = (mid + Math.imul(ah3, bl9)) | 0;
40481 hi = (hi + Math.imul(ah3, bh9)) | 0;
40482 var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40483 c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
40484 w12 &= 0x3ffffff;
40485 /* k = 13 */
40486 lo = Math.imul(al9, bl4);
40487 mid = Math.imul(al9, bh4);
40488 mid = (mid + Math.imul(ah9, bl4)) | 0;
40489 hi = Math.imul(ah9, bh4);
40490 lo = (lo + Math.imul(al8, bl5)) | 0;
40491 mid = (mid + Math.imul(al8, bh5)) | 0;
40492 mid = (mid + Math.imul(ah8, bl5)) | 0;
40493 hi = (hi + Math.imul(ah8, bh5)) | 0;
40494 lo = (lo + Math.imul(al7, bl6)) | 0;
40495 mid = (mid + Math.imul(al7, bh6)) | 0;
40496 mid = (mid + Math.imul(ah7, bl6)) | 0;
40497 hi = (hi + Math.imul(ah7, bh6)) | 0;
40498 lo = (lo + Math.imul(al6, bl7)) | 0;
40499 mid = (mid + Math.imul(al6, bh7)) | 0;
40500 mid = (mid + Math.imul(ah6, bl7)) | 0;
40501 hi = (hi + Math.imul(ah6, bh7)) | 0;
40502 lo = (lo + Math.imul(al5, bl8)) | 0;
40503 mid = (mid + Math.imul(al5, bh8)) | 0;
40504 mid = (mid + Math.imul(ah5, bl8)) | 0;
40505 hi = (hi + Math.imul(ah5, bh8)) | 0;
40506 lo = (lo + Math.imul(al4, bl9)) | 0;
40507 mid = (mid + Math.imul(al4, bh9)) | 0;
40508 mid = (mid + Math.imul(ah4, bl9)) | 0;
40509 hi = (hi + Math.imul(ah4, bh9)) | 0;
40510 var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40511 c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
40512 w13 &= 0x3ffffff;
40513 /* k = 14 */
40514 lo = Math.imul(al9, bl5);
40515 mid = Math.imul(al9, bh5);
40516 mid = (mid + Math.imul(ah9, bl5)) | 0;
40517 hi = Math.imul(ah9, bh5);
40518 lo = (lo + Math.imul(al8, bl6)) | 0;
40519 mid = (mid + Math.imul(al8, bh6)) | 0;
40520 mid = (mid + Math.imul(ah8, bl6)) | 0;
40521 hi = (hi + Math.imul(ah8, bh6)) | 0;
40522 lo = (lo + Math.imul(al7, bl7)) | 0;
40523 mid = (mid + Math.imul(al7, bh7)) | 0;
40524 mid = (mid + Math.imul(ah7, bl7)) | 0;
40525 hi = (hi + Math.imul(ah7, bh7)) | 0;
40526 lo = (lo + Math.imul(al6, bl8)) | 0;
40527 mid = (mid + Math.imul(al6, bh8)) | 0;
40528 mid = (mid + Math.imul(ah6, bl8)) | 0;
40529 hi = (hi + Math.imul(ah6, bh8)) | 0;
40530 lo = (lo + Math.imul(al5, bl9)) | 0;
40531 mid = (mid + Math.imul(al5, bh9)) | 0;
40532 mid = (mid + Math.imul(ah5, bl9)) | 0;
40533 hi = (hi + Math.imul(ah5, bh9)) | 0;
40534 var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40535 c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
40536 w14 &= 0x3ffffff;
40537 /* k = 15 */
40538 lo = Math.imul(al9, bl6);
40539 mid = Math.imul(al9, bh6);
40540 mid = (mid + Math.imul(ah9, bl6)) | 0;
40541 hi = Math.imul(ah9, bh6);
40542 lo = (lo + Math.imul(al8, bl7)) | 0;
40543 mid = (mid + Math.imul(al8, bh7)) | 0;
40544 mid = (mid + Math.imul(ah8, bl7)) | 0;
40545 hi = (hi + Math.imul(ah8, bh7)) | 0;
40546 lo = (lo + Math.imul(al7, bl8)) | 0;
40547 mid = (mid + Math.imul(al7, bh8)) | 0;
40548 mid = (mid + Math.imul(ah7, bl8)) | 0;
40549 hi = (hi + Math.imul(ah7, bh8)) | 0;
40550 lo = (lo + Math.imul(al6, bl9)) | 0;
40551 mid = (mid + Math.imul(al6, bh9)) | 0;
40552 mid = (mid + Math.imul(ah6, bl9)) | 0;
40553 hi = (hi + Math.imul(ah6, bh9)) | 0;
40554 var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40555 c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
40556 w15 &= 0x3ffffff;
40557 /* k = 16 */
40558 lo = Math.imul(al9, bl7);
40559 mid = Math.imul(al9, bh7);
40560 mid = (mid + Math.imul(ah9, bl7)) | 0;
40561 hi = Math.imul(ah9, bh7);
40562 lo = (lo + Math.imul(al8, bl8)) | 0;
40563 mid = (mid + Math.imul(al8, bh8)) | 0;
40564 mid = (mid + Math.imul(ah8, bl8)) | 0;
40565 hi = (hi + Math.imul(ah8, bh8)) | 0;
40566 lo = (lo + Math.imul(al7, bl9)) | 0;
40567 mid = (mid + Math.imul(al7, bh9)) | 0;
40568 mid = (mid + Math.imul(ah7, bl9)) | 0;
40569 hi = (hi + Math.imul(ah7, bh9)) | 0;
40570 var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40571 c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
40572 w16 &= 0x3ffffff;
40573 /* k = 17 */
40574 lo = Math.imul(al9, bl8);
40575 mid = Math.imul(al9, bh8);
40576 mid = (mid + Math.imul(ah9, bl8)) | 0;
40577 hi = Math.imul(ah9, bh8);
40578 lo = (lo + Math.imul(al8, bl9)) | 0;
40579 mid = (mid + Math.imul(al8, bh9)) | 0;
40580 mid = (mid + Math.imul(ah8, bl9)) | 0;
40581 hi = (hi + Math.imul(ah8, bh9)) | 0;
40582 var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40583 c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
40584 w17 &= 0x3ffffff;
40585 /* k = 18 */
40586 lo = Math.imul(al9, bl9);
40587 mid = Math.imul(al9, bh9);
40588 mid = (mid + Math.imul(ah9, bl9)) | 0;
40589 hi = Math.imul(ah9, bh9);
40590 var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40591 c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
40592 w18 &= 0x3ffffff;
40593 o[0] = w0;
40594 o[1] = w1;
40595 o[2] = w2;
40596 o[3] = w3;
40597 o[4] = w4;
40598 o[5] = w5;
40599 o[6] = w6;
40600 o[7] = w7;
40601 o[8] = w8;
40602 o[9] = w9;
40603 o[10] = w10;
40604 o[11] = w11;
40605 o[12] = w12;
40606 o[13] = w13;
40607 o[14] = w14;
40608 o[15] = w15;
40609 o[16] = w16;
40610 o[17] = w17;
40611 o[18] = w18;
40612 if (c !== 0) {
40613 o[19] = c;
40614 out.length++;
40615 }
40616 return out;
40617 };
40618
40619 // Polyfill comb
40620 if (!Math.imul) {
40621 comb10MulTo = smallMulTo;
40622 }
40623
40624 function bigMulTo (self, num, out) {
40625 out.negative = num.negative ^ self.negative;
40626 out.length = self.length + num.length;
40627
40628 var carry = 0;
40629 var hncarry = 0;
40630 for (var k = 0; k < out.length - 1; k++) {
40631 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
40632 // note that ncarry could be >= 0x3ffffff
40633 var ncarry = hncarry;
40634 hncarry = 0;
40635 var rword = carry & 0x3ffffff;
40636 var maxJ = Math.min(k, num.length - 1);
40637 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
40638 var i = k - j;
40639 var a = self.words[i] | 0;
40640 var b = num.words[j] | 0;
40641 var r = a * b;
40642
40643 var lo = r & 0x3ffffff;
40644 ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
40645 lo = (lo + rword) | 0;
40646 rword = lo & 0x3ffffff;
40647 ncarry = (ncarry + (lo >>> 26)) | 0;
40648
40649 hncarry += ncarry >>> 26;
40650 ncarry &= 0x3ffffff;
40651 }
40652 out.words[k] = rword;
40653 carry = ncarry;
40654 ncarry = hncarry;
40655 }
40656 if (carry !== 0) {
40657 out.words[k] = carry;
40658 } else {
40659 out.length--;
40660 }
40661
40662 return out.strip();
40663 }
40664
40665 function jumboMulTo (self, num, out) {
40666 var fftm = new FFTM();
40667 return fftm.mulp(self, num, out);
40668 }
40669
40670 BN.prototype.mulTo = function mulTo (num, out) {
40671 var res;
40672 var len = this.length + num.length;
40673 if (this.length === 10 && num.length === 10) {
40674 res = comb10MulTo(this, num, out);
40675 } else if (len < 63) {
40676 res = smallMulTo(this, num, out);
40677 } else if (len < 1024) {
40678 res = bigMulTo(this, num, out);
40679 } else {
40680 res = jumboMulTo(this, num, out);
40681 }
40682
40683 return res;
40684 };
40685
40686 // Cooley-Tukey algorithm for FFT
40687 // slightly revisited to rely on looping instead of recursion
40688
40689 function FFTM (x, y) {
40690 this.x = x;
40691 this.y = y;
40692 }
40693
40694 FFTM.prototype.makeRBT = function makeRBT (N) {
40695 var t = new Array(N);
40696 var l = BN.prototype._countBits(N) - 1;
40697 for (var i = 0; i < N; i++) {
40698 t[i] = this.revBin(i, l, N);
40699 }
40700
40701 return t;
40702 };
40703
40704 // Returns binary-reversed representation of `x`
40705 FFTM.prototype.revBin = function revBin (x, l, N) {
40706 if (x === 0 || x === N - 1) return x;
40707
40708 var rb = 0;
40709 for (var i = 0; i < l; i++) {
40710 rb |= (x & 1) << (l - i - 1);
40711 x >>= 1;
40712 }
40713
40714 return rb;
40715 };
40716
40717 // Performs "tweedling" phase, therefore 'emulating'
40718 // behaviour of the recursive algorithm
40719 FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
40720 for (var i = 0; i < N; i++) {
40721 rtws[i] = rws[rbt[i]];
40722 itws[i] = iws[rbt[i]];
40723 }
40724 };
40725
40726 FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
40727 this.permute(rbt, rws, iws, rtws, itws, N);
40728
40729 for (var s = 1; s < N; s <<= 1) {
40730 var l = s << 1;
40731
40732 var rtwdf = Math.cos(2 * Math.PI / l);
40733 var itwdf = Math.sin(2 * Math.PI / l);
40734
40735 for (var p = 0; p < N; p += l) {
40736 var rtwdf_ = rtwdf;
40737 var itwdf_ = itwdf;
40738
40739 for (var j = 0; j < s; j++) {
40740 var re = rtws[p + j];
40741 var ie = itws[p + j];
40742
40743 var ro = rtws[p + j + s];
40744 var io = itws[p + j + s];
40745
40746 var rx = rtwdf_ * ro - itwdf_ * io;
40747
40748 io = rtwdf_ * io + itwdf_ * ro;
40749 ro = rx;
40750
40751 rtws[p + j] = re + ro;
40752 itws[p + j] = ie + io;
40753
40754 rtws[p + j + s] = re - ro;
40755 itws[p + j + s] = ie - io;
40756
40757 /* jshint maxdepth : false */
40758 if (j !== l) {
40759 rx = rtwdf * rtwdf_ - itwdf * itwdf_;
40760
40761 itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
40762 rtwdf_ = rx;
40763 }
40764 }
40765 }
40766 }
40767 };
40768
40769 FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
40770 var N = Math.max(m, n) | 1;
40771 var odd = N & 1;
40772 var i = 0;
40773 for (N = N / 2 | 0; N; N = N >>> 1) {
40774 i++;
40775 }
40776
40777 return 1 << i + 1 + odd;
40778 };
40779
40780 FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
40781 if (N <= 1) return;
40782
40783 for (var i = 0; i < N / 2; i++) {
40784 var t = rws[i];
40785
40786 rws[i] = rws[N - i - 1];
40787 rws[N - i - 1] = t;
40788
40789 t = iws[i];
40790
40791 iws[i] = -iws[N - i - 1];
40792 iws[N - i - 1] = -t;
40793 }
40794 };
40795
40796 FFTM.prototype.normalize13b = function normalize13b (ws, N) {
40797 var carry = 0;
40798 for (var i = 0; i < N / 2; i++) {
40799 var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
40800 Math.round(ws[2 * i] / N) +
40801 carry;
40802
40803 ws[i] = w & 0x3ffffff;
40804
40805 if (w < 0x4000000) {
40806 carry = 0;
40807 } else {
40808 carry = w / 0x4000000 | 0;
40809 }
40810 }
40811
40812 return ws;
40813 };
40814
40815 FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
40816 var carry = 0;
40817 for (var i = 0; i < len; i++) {
40818 carry = carry + (ws[i] | 0);
40819
40820 rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
40821 rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
40822 }
40823
40824 // Pad with zeroes
40825 for (i = 2 * len; i < N; ++i) {
40826 rws[i] = 0;
40827 }
40828
40829 assert(carry === 0);
40830 assert((carry & ~0x1fff) === 0);
40831 };
40832
40833 FFTM.prototype.stub = function stub (N) {
40834 var ph = new Array(N);
40835 for (var i = 0; i < N; i++) {
40836 ph[i] = 0;
40837 }
40838
40839 return ph;
40840 };
40841
40842 FFTM.prototype.mulp = function mulp (x, y, out) {
40843 var N = 2 * this.guessLen13b(x.length, y.length);
40844
40845 var rbt = this.makeRBT(N);
40846
40847 var _ = this.stub(N);
40848
40849 var rws = new Array(N);
40850 var rwst = new Array(N);
40851 var iwst = new Array(N);
40852
40853 var nrws = new Array(N);
40854 var nrwst = new Array(N);
40855 var niwst = new Array(N);
40856
40857 var rmws = out.words;
40858 rmws.length = N;
40859
40860 this.convert13b(x.words, x.length, rws, N);
40861 this.convert13b(y.words, y.length, nrws, N);
40862
40863 this.transform(rws, _, rwst, iwst, N, rbt);
40864 this.transform(nrws, _, nrwst, niwst, N, rbt);
40865
40866 for (var i = 0; i < N; i++) {
40867 var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
40868 iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
40869 rwst[i] = rx;
40870 }
40871
40872 this.conjugate(rwst, iwst, N);
40873 this.transform(rwst, iwst, rmws, _, N, rbt);
40874 this.conjugate(rmws, _, N);
40875 this.normalize13b(rmws, N);
40876
40877 out.negative = x.negative ^ y.negative;
40878 out.length = x.length + y.length;
40879 return out.strip();
40880 };
40881
40882 // Multiply `this` by `num`
40883 BN.prototype.mul = function mul (num) {
40884 var out = new BN(null);
40885 out.words = new Array(this.length + num.length);
40886 return this.mulTo(num, out);
40887 };
40888
40889 // Multiply employing FFT
40890 BN.prototype.mulf = function mulf (num) {
40891 var out = new BN(null);
40892 out.words = new Array(this.length + num.length);
40893 return jumboMulTo(this, num, out);
40894 };
40895
40896 // In-place Multiplication
40897 BN.prototype.imul = function imul (num) {
40898 return this.clone().mulTo(num, this);
40899 };
40900
40901 BN.prototype.imuln = function imuln (num) {
40902 assert(typeof num === 'number');
40903 assert(num < 0x4000000);
40904
40905 // Carry
40906 var carry = 0;
40907 for (var i = 0; i < this.length; i++) {
40908 var w = (this.words[i] | 0) * num;
40909 var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
40910 carry >>= 26;
40911 carry += (w / 0x4000000) | 0;
40912 // NOTE: lo is 27bit maximum
40913 carry += lo >>> 26;
40914 this.words[i] = lo & 0x3ffffff;
40915 }
40916
40917 if (carry !== 0) {
40918 this.words[i] = carry;
40919 this.length++;
40920 }
40921
40922 return this;
40923 };
40924
40925 BN.prototype.muln = function muln (num) {
40926 return this.clone().imuln(num);
40927 };
40928
40929 // `this` * `this`
40930 BN.prototype.sqr = function sqr () {
40931 return this.mul(this);
40932 };
40933
40934 // `this` * `this` in-place
40935 BN.prototype.isqr = function isqr () {
40936 return this.imul(this.clone());
40937 };
40938
40939 // Math.pow(`this`, `num`)
40940 BN.prototype.pow = function pow (num) {
40941 var w = toBitArray(num);
40942 if (w.length === 0) return new BN(1);
40943
40944 // Skip leading zeroes
40945 var res = this;
40946 for (var i = 0; i < w.length; i++, res = res.sqr()) {
40947 if (w[i] !== 0) break;
40948 }
40949
40950 if (++i < w.length) {
40951 for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
40952 if (w[i] === 0) continue;
40953
40954 res = res.mul(q);
40955 }
40956 }
40957
40958 return res;
40959 };
40960
40961 // Shift-left in-place
40962 BN.prototype.iushln = function iushln (bits) {
40963 assert(typeof bits === 'number' && bits >= 0);
40964 var r = bits % 26;
40965 var s = (bits - r) / 26;
40966 var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
40967 var i;
40968
40969 if (r !== 0) {
40970 var carry = 0;
40971
40972 for (i = 0; i < this.length; i++) {
40973 var newCarry = this.words[i] & carryMask;
40974 var c = ((this.words[i] | 0) - newCarry) << r;
40975 this.words[i] = c | carry;
40976 carry = newCarry >>> (26 - r);
40977 }
40978
40979 if (carry) {
40980 this.words[i] = carry;
40981 this.length++;
40982 }
40983 }
40984
40985 if (s !== 0) {
40986 for (i = this.length - 1; i >= 0; i--) {
40987 this.words[i + s] = this.words[i];
40988 }
40989
40990 for (i = 0; i < s; i++) {
40991 this.words[i] = 0;
40992 }
40993
40994 this.length += s;
40995 }
40996
40997 return this.strip();
40998 };
40999
41000 BN.prototype.ishln = function ishln (bits) {
41001 // TODO(indutny): implement me
41002 assert(this.negative === 0);
41003 return this.iushln(bits);
41004 };
41005
41006 // Shift-right in-place
41007 // NOTE: `hint` is a lowest bit before trailing zeroes
41008 // NOTE: if `extended` is present - it will be filled with destroyed bits
41009 BN.prototype.iushrn = function iushrn (bits, hint, extended) {
41010 assert(typeof bits === 'number' && bits >= 0);
41011 var h;
41012 if (hint) {
41013 h = (hint - (hint % 26)) / 26;
41014 } else {
41015 h = 0;
41016 }
41017
41018 var r = bits % 26;
41019 var s = Math.min((bits - r) / 26, this.length);
41020 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
41021 var maskedWords = extended;
41022
41023 h -= s;
41024 h = Math.max(0, h);
41025
41026 // Extended mode, copy masked part
41027 if (maskedWords) {
41028 for (var i = 0; i < s; i++) {
41029 maskedWords.words[i] = this.words[i];
41030 }
41031 maskedWords.length = s;
41032 }
41033
41034 if (s === 0) {
41035 // No-op, we should not move anything at all
41036 } else if (this.length > s) {
41037 this.length -= s;
41038 for (i = 0; i < this.length; i++) {
41039 this.words[i] = this.words[i + s];
41040 }
41041 } else {
41042 this.words[0] = 0;
41043 this.length = 1;
41044 }
41045
41046 var carry = 0;
41047 for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
41048 var word = this.words[i] | 0;
41049 this.words[i] = (carry << (26 - r)) | (word >>> r);
41050 carry = word & mask;
41051 }
41052
41053 // Push carried bits as a mask
41054 if (maskedWords && carry !== 0) {
41055 maskedWords.words[maskedWords.length++] = carry;
41056 }
41057
41058 if (this.length === 0) {
41059 this.words[0] = 0;
41060 this.length = 1;
41061 }
41062
41063 return this.strip();
41064 };
41065
41066 BN.prototype.ishrn = function ishrn (bits, hint, extended) {
41067 // TODO(indutny): implement me
41068 assert(this.negative === 0);
41069 return this.iushrn(bits, hint, extended);
41070 };
41071
41072 // Shift-left
41073 BN.prototype.shln = function shln (bits) {
41074 return this.clone().ishln(bits);
41075 };
41076
41077 BN.prototype.ushln = function ushln (bits) {
41078 return this.clone().iushln(bits);
41079 };
41080
41081 // Shift-right
41082 BN.prototype.shrn = function shrn (bits) {
41083 return this.clone().ishrn(bits);
41084 };
41085
41086 BN.prototype.ushrn = function ushrn (bits) {
41087 return this.clone().iushrn(bits);
41088 };
41089
41090 // Test if n bit is set
41091 BN.prototype.testn = function testn (bit) {
41092 assert(typeof bit === 'number' && bit >= 0);
41093 var r = bit % 26;
41094 var s = (bit - r) / 26;
41095 var q = 1 << r;
41096
41097 // Fast case: bit is much higher than all existing words
41098 if (this.length <= s) return false;
41099
41100 // Check bit and return
41101 var w = this.words[s];
41102
41103 return !!(w & q);
41104 };
41105
41106 // Return only lowers bits of number (in-place)
41107 BN.prototype.imaskn = function imaskn (bits) {
41108 assert(typeof bits === 'number' && bits >= 0);
41109 var r = bits % 26;
41110 var s = (bits - r) / 26;
41111
41112 assert(this.negative === 0, 'imaskn works only with positive numbers');
41113
41114 if (this.length <= s) {
41115 return this;
41116 }
41117
41118 if (r !== 0) {
41119 s++;
41120 }
41121 this.length = Math.min(s, this.length);
41122
41123 if (r !== 0) {
41124 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
41125 this.words[this.length - 1] &= mask;
41126 }
41127
41128 return this.strip();
41129 };
41130
41131 // Return only lowers bits of number
41132 BN.prototype.maskn = function maskn (bits) {
41133 return this.clone().imaskn(bits);
41134 };
41135
41136 // Add plain number `num` to `this`
41137 BN.prototype.iaddn = function iaddn (num) {
41138 assert(typeof num === 'number');
41139 assert(num < 0x4000000);
41140 if (num < 0) return this.isubn(-num);
41141
41142 // Possible sign change
41143 if (this.negative !== 0) {
41144 if (this.length === 1 && (this.words[0] | 0) < num) {
41145 this.words[0] = num - (this.words[0] | 0);
41146 this.negative = 0;
41147 return this;
41148 }
41149
41150 this.negative = 0;
41151 this.isubn(num);
41152 this.negative = 1;
41153 return this;
41154 }
41155
41156 // Add without checks
41157 return this._iaddn(num);
41158 };
41159
41160 BN.prototype._iaddn = function _iaddn (num) {
41161 this.words[0] += num;
41162
41163 // Carry
41164 for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
41165 this.words[i] -= 0x4000000;
41166 if (i === this.length - 1) {
41167 this.words[i + 1] = 1;
41168 } else {
41169 this.words[i + 1]++;
41170 }
41171 }
41172 this.length = Math.max(this.length, i + 1);
41173
41174 return this;
41175 };
41176
41177 // Subtract plain number `num` from `this`
41178 BN.prototype.isubn = function isubn (num) {
41179 assert(typeof num === 'number');
41180 assert(num < 0x4000000);
41181 if (num < 0) return this.iaddn(-num);
41182
41183 if (this.negative !== 0) {
41184 this.negative = 0;
41185 this.iaddn(num);
41186 this.negative = 1;
41187 return this;
41188 }
41189
41190 this.words[0] -= num;
41191
41192 if (this.length === 1 && this.words[0] < 0) {
41193 this.words[0] = -this.words[0];
41194 this.negative = 1;
41195 } else {
41196 // Carry
41197 for (var i = 0; i < this.length && this.words[i] < 0; i++) {
41198 this.words[i] += 0x4000000;
41199 this.words[i + 1] -= 1;
41200 }
41201 }
41202
41203 return this.strip();
41204 };
41205
41206 BN.prototype.addn = function addn (num) {
41207 return this.clone().iaddn(num);
41208 };
41209
41210 BN.prototype.subn = function subn (num) {
41211 return this.clone().isubn(num);
41212 };
41213
41214 BN.prototype.iabs = function iabs () {
41215 this.negative = 0;
41216
41217 return this;
41218 };
41219
41220 BN.prototype.abs = function abs () {
41221 return this.clone().iabs();
41222 };
41223
41224 BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
41225 var len = num.length + shift;
41226 var i;
41227
41228 this._expand(len);
41229
41230 var w;
41231 var carry = 0;
41232 for (i = 0; i < num.length; i++) {
41233 w = (this.words[i + shift] | 0) + carry;
41234 var right = (num.words[i] | 0) * mul;
41235 w -= right & 0x3ffffff;
41236 carry = (w >> 26) - ((right / 0x4000000) | 0);
41237 this.words[i + shift] = w & 0x3ffffff;
41238 }
41239 for (; i < this.length - shift; i++) {
41240 w = (this.words[i + shift] | 0) + carry;
41241 carry = w >> 26;
41242 this.words[i + shift] = w & 0x3ffffff;
41243 }
41244
41245 if (carry === 0) return this.strip();
41246
41247 // Subtraction overflow
41248 assert(carry === -1);
41249 carry = 0;
41250 for (i = 0; i < this.length; i++) {
41251 w = -(this.words[i] | 0) + carry;
41252 carry = w >> 26;
41253 this.words[i] = w & 0x3ffffff;
41254 }
41255 this.negative = 1;
41256
41257 return this.strip();
41258 };
41259
41260 BN.prototype._wordDiv = function _wordDiv (num, mode) {
41261 var shift = this.length - num.length;
41262
41263 var a = this.clone();
41264 var b = num;
41265
41266 // Normalize
41267 var bhi = b.words[b.length - 1] | 0;
41268 var bhiBits = this._countBits(bhi);
41269 shift = 26 - bhiBits;
41270 if (shift !== 0) {
41271 b = b.ushln(shift);
41272 a.iushln(shift);
41273 bhi = b.words[b.length - 1] | 0;
41274 }
41275
41276 // Initialize quotient
41277 var m = a.length - b.length;
41278 var q;
41279
41280 if (mode !== 'mod') {
41281 q = new BN(null);
41282 q.length = m + 1;
41283 q.words = new Array(q.length);
41284 for (var i = 0; i < q.length; i++) {
41285 q.words[i] = 0;
41286 }
41287 }
41288
41289 var diff = a.clone()._ishlnsubmul(b, 1, m);
41290 if (diff.negative === 0) {
41291 a = diff;
41292 if (q) {
41293 q.words[m] = 1;
41294 }
41295 }
41296
41297 for (var j = m - 1; j >= 0; j--) {
41298 var qj = (a.words[b.length + j] | 0) * 0x4000000 +
41299 (a.words[b.length + j - 1] | 0);
41300
41301 // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
41302 // (0x7ffffff)
41303 qj = Math.min((qj / bhi) | 0, 0x3ffffff);
41304
41305 a._ishlnsubmul(b, qj, j);
41306 while (a.negative !== 0) {
41307 qj--;
41308 a.negative = 0;
41309 a._ishlnsubmul(b, 1, j);
41310 if (!a.isZero()) {
41311 a.negative ^= 1;
41312 }
41313 }
41314 if (q) {
41315 q.words[j] = qj;
41316 }
41317 }
41318 if (q) {
41319 q.strip();
41320 }
41321 a.strip();
41322
41323 // Denormalize
41324 if (mode !== 'div' && shift !== 0) {
41325 a.iushrn(shift);
41326 }
41327
41328 return {
41329 div: q || null,
41330 mod: a
41331 };
41332 };
41333
41334 // NOTE: 1) `mode` can be set to `mod` to request mod only,
41335 // to `div` to request div only, or be absent to
41336 // request both div & mod
41337 // 2) `positive` is true if unsigned mod is requested
41338 BN.prototype.divmod = function divmod (num, mode, positive) {
41339 assert(!num.isZero());
41340
41341 if (this.isZero()) {
41342 return {
41343 div: new BN(0),
41344 mod: new BN(0)
41345 };
41346 }
41347
41348 var div, mod, res;
41349 if (this.negative !== 0 && num.negative === 0) {
41350 res = this.neg().divmod(num, mode);
41351
41352 if (mode !== 'mod') {
41353 div = res.div.neg();
41354 }
41355
41356 if (mode !== 'div') {
41357 mod = res.mod.neg();
41358 if (positive && mod.negative !== 0) {
41359 mod.iadd(num);
41360 }
41361 }
41362
41363 return {
41364 div: div,
41365 mod: mod
41366 };
41367 }
41368
41369 if (this.negative === 0 && num.negative !== 0) {
41370 res = this.divmod(num.neg(), mode);
41371
41372 if (mode !== 'mod') {
41373 div = res.div.neg();
41374 }
41375
41376 return {
41377 div: div,
41378 mod: res.mod
41379 };
41380 }
41381
41382 if ((this.negative & num.negative) !== 0) {
41383 res = this.neg().divmod(num.neg(), mode);
41384
41385 if (mode !== 'div') {
41386 mod = res.mod.neg();
41387 if (positive && mod.negative !== 0) {
41388 mod.isub(num);
41389 }
41390 }
41391
41392 return {
41393 div: res.div,
41394 mod: mod
41395 };
41396 }
41397
41398 // Both numbers are positive at this point
41399
41400 // Strip both numbers to approximate shift value
41401 if (num.length > this.length || this.cmp(num) < 0) {
41402 return {
41403 div: new BN(0),
41404 mod: this
41405 };
41406 }
41407
41408 // Very short reduction
41409 if (num.length === 1) {
41410 if (mode === 'div') {
41411 return {
41412 div: this.divn(num.words[0]),
41413 mod: null
41414 };
41415 }
41416
41417 if (mode === 'mod') {
41418 return {
41419 div: null,
41420 mod: new BN(this.modn(num.words[0]))
41421 };
41422 }
41423
41424 return {
41425 div: this.divn(num.words[0]),
41426 mod: new BN(this.modn(num.words[0]))
41427 };
41428 }
41429
41430 return this._wordDiv(num, mode);
41431 };
41432
41433 // Find `this` / `num`
41434 BN.prototype.div = function div (num) {
41435 return this.divmod(num, 'div', false).div;
41436 };
41437
41438 // Find `this` % `num`
41439 BN.prototype.mod = function mod (num) {
41440 return this.divmod(num, 'mod', false).mod;
41441 };
41442
41443 BN.prototype.umod = function umod (num) {
41444 return this.divmod(num, 'mod', true).mod;
41445 };
41446
41447 // Find Round(`this` / `num`)
41448 BN.prototype.divRound = function divRound (num) {
41449 var dm = this.divmod(num);
41450
41451 // Fast case - exact division
41452 if (dm.mod.isZero()) return dm.div;
41453
41454 var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
41455
41456 var half = num.ushrn(1);
41457 var r2 = num.andln(1);
41458 var cmp = mod.cmp(half);
41459
41460 // Round down
41461 if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
41462
41463 // Round up
41464 return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
41465 };
41466
41467 BN.prototype.modn = function modn (num) {
41468 assert(num <= 0x3ffffff);
41469 var p = (1 << 26) % num;
41470
41471 var acc = 0;
41472 for (var i = this.length - 1; i >= 0; i--) {
41473 acc = (p * acc + (this.words[i] | 0)) % num;
41474 }
41475
41476 return acc;
41477 };
41478
41479 // In-place division by number
41480 BN.prototype.idivn = function idivn (num) {
41481 assert(num <= 0x3ffffff);
41482
41483 var carry = 0;
41484 for (var i = this.length - 1; i >= 0; i--) {
41485 var w = (this.words[i] | 0) + carry * 0x4000000;
41486 this.words[i] = (w / num) | 0;
41487 carry = w % num;
41488 }
41489
41490 return this.strip();
41491 };
41492
41493 BN.prototype.divn = function divn (num) {
41494 return this.clone().idivn(num);
41495 };
41496
41497 BN.prototype.egcd = function egcd (p) {
41498 assert(p.negative === 0);
41499 assert(!p.isZero());
41500
41501 var x = this;
41502 var y = p.clone();
41503
41504 if (x.negative !== 0) {
41505 x = x.umod(p);
41506 } else {
41507 x = x.clone();
41508 }
41509
41510 // A * x + B * y = x
41511 var A = new BN(1);
41512 var B = new BN(0);
41513
41514 // C * x + D * y = y
41515 var C = new BN(0);
41516 var D = new BN(1);
41517
41518 var g = 0;
41519
41520 while (x.isEven() && y.isEven()) {
41521 x.iushrn(1);
41522 y.iushrn(1);
41523 ++g;
41524 }
41525
41526 var yp = y.clone();
41527 var xp = x.clone();
41528
41529 while (!x.isZero()) {
41530 for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
41531 if (i > 0) {
41532 x.iushrn(i);
41533 while (i-- > 0) {
41534 if (A.isOdd() || B.isOdd()) {
41535 A.iadd(yp);
41536 B.isub(xp);
41537 }
41538
41539 A.iushrn(1);
41540 B.iushrn(1);
41541 }
41542 }
41543
41544 for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
41545 if (j > 0) {
41546 y.iushrn(j);
41547 while (j-- > 0) {
41548 if (C.isOdd() || D.isOdd()) {
41549 C.iadd(yp);
41550 D.isub(xp);
41551 }
41552
41553 C.iushrn(1);
41554 D.iushrn(1);
41555 }
41556 }
41557
41558 if (x.cmp(y) >= 0) {
41559 x.isub(y);
41560 A.isub(C);
41561 B.isub(D);
41562 } else {
41563 y.isub(x);
41564 C.isub(A);
41565 D.isub(B);
41566 }
41567 }
41568
41569 return {
41570 a: C,
41571 b: D,
41572 gcd: y.iushln(g)
41573 };
41574 };
41575
41576 // This is reduced incarnation of the binary EEA
41577 // above, designated to invert members of the
41578 // _prime_ fields F(p) at a maximal speed
41579 BN.prototype._invmp = function _invmp (p) {
41580 assert(p.negative === 0);
41581 assert(!p.isZero());
41582
41583 var a = this;
41584 var b = p.clone();
41585
41586 if (a.negative !== 0) {
41587 a = a.umod(p);
41588 } else {
41589 a = a.clone();
41590 }
41591
41592 var x1 = new BN(1);
41593 var x2 = new BN(0);
41594
41595 var delta = b.clone();
41596
41597 while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
41598 for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
41599 if (i > 0) {
41600 a.iushrn(i);
41601 while (i-- > 0) {
41602 if (x1.isOdd()) {
41603 x1.iadd(delta);
41604 }
41605
41606 x1.iushrn(1);
41607 }
41608 }
41609
41610 for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
41611 if (j > 0) {
41612 b.iushrn(j);
41613 while (j-- > 0) {
41614 if (x2.isOdd()) {
41615 x2.iadd(delta);
41616 }
41617
41618 x2.iushrn(1);
41619 }
41620 }
41621
41622 if (a.cmp(b) >= 0) {
41623 a.isub(b);
41624 x1.isub(x2);
41625 } else {
41626 b.isub(a);
41627 x2.isub(x1);
41628 }
41629 }
41630
41631 var res;
41632 if (a.cmpn(1) === 0) {
41633 res = x1;
41634 } else {
41635 res = x2;
41636 }
41637
41638 if (res.cmpn(0) < 0) {
41639 res.iadd(p);
41640 }
41641
41642 return res;
41643 };
41644
41645 BN.prototype.gcd = function gcd (num) {
41646 if (this.isZero()) return num.abs();
41647 if (num.isZero()) return this.abs();
41648
41649 var a = this.clone();
41650 var b = num.clone();
41651 a.negative = 0;
41652 b.negative = 0;
41653
41654 // Remove common factor of two
41655 for (var shift = 0; a.isEven() && b.isEven(); shift++) {
41656 a.iushrn(1);
41657 b.iushrn(1);
41658 }
41659
41660 do {
41661 while (a.isEven()) {
41662 a.iushrn(1);
41663 }
41664 while (b.isEven()) {
41665 b.iushrn(1);
41666 }
41667
41668 var r = a.cmp(b);
41669 if (r < 0) {
41670 // Swap `a` and `b` to make `a` always bigger than `b`
41671 var t = a;
41672 a = b;
41673 b = t;
41674 } else if (r === 0 || b.cmpn(1) === 0) {
41675 break;
41676 }
41677
41678 a.isub(b);
41679 } while (true);
41680
41681 return b.iushln(shift);
41682 };
41683
41684 // Invert number in the field F(num)
41685 BN.prototype.invm = function invm (num) {
41686 return this.egcd(num).a.umod(num);
41687 };
41688
41689 BN.prototype.isEven = function isEven () {
41690 return (this.words[0] & 1) === 0;
41691 };
41692
41693 BN.prototype.isOdd = function isOdd () {
41694 return (this.words[0] & 1) === 1;
41695 };
41696
41697 // And first word and num
41698 BN.prototype.andln = function andln (num) {
41699 return this.words[0] & num;
41700 };
41701
41702 // Increment at the bit position in-line
41703 BN.prototype.bincn = function bincn (bit) {
41704 assert(typeof bit === 'number');
41705 var r = bit % 26;
41706 var s = (bit - r) / 26;
41707 var q = 1 << r;
41708
41709 // Fast case: bit is much higher than all existing words
41710 if (this.length <= s) {
41711 this._expand(s + 1);
41712 this.words[s] |= q;
41713 return this;
41714 }
41715
41716 // Add bit and propagate, if needed
41717 var carry = q;
41718 for (var i = s; carry !== 0 && i < this.length; i++) {
41719 var w = this.words[i] | 0;
41720 w += carry;
41721 carry = w >>> 26;
41722 w &= 0x3ffffff;
41723 this.words[i] = w;
41724 }
41725 if (carry !== 0) {
41726 this.words[i] = carry;
41727 this.length++;
41728 }
41729 return this;
41730 };
41731
41732 BN.prototype.isZero = function isZero () {
41733 return this.length === 1 && this.words[0] === 0;
41734 };
41735
41736 BN.prototype.cmpn = function cmpn (num) {
41737 var negative = num < 0;
41738
41739 if (this.negative !== 0 && !negative) return -1;
41740 if (this.negative === 0 && negative) return 1;
41741
41742 this.strip();
41743
41744 var res;
41745 if (this.length > 1) {
41746 res = 1;
41747 } else {
41748 if (negative) {
41749 num = -num;
41750 }
41751
41752 assert(num <= 0x3ffffff, 'Number is too big');
41753
41754 var w = this.words[0] | 0;
41755 res = w === num ? 0 : w < num ? -1 : 1;
41756 }
41757 if (this.negative !== 0) return -res | 0;
41758 return res;
41759 };
41760
41761 // Compare two numbers and return:
41762 // 1 - if `this` > `num`
41763 // 0 - if `this` == `num`
41764 // -1 - if `this` < `num`
41765 BN.prototype.cmp = function cmp (num) {
41766 if (this.negative !== 0 && num.negative === 0) return -1;
41767 if (this.negative === 0 && num.negative !== 0) return 1;
41768
41769 var res = this.ucmp(num);
41770 if (this.negative !== 0) return -res | 0;
41771 return res;
41772 };
41773
41774 // Unsigned comparison
41775 BN.prototype.ucmp = function ucmp (num) {
41776 // At this point both numbers have the same sign
41777 if (this.length > num.length) return 1;
41778 if (this.length < num.length) return -1;
41779
41780 var res = 0;
41781 for (var i = this.length - 1; i >= 0; i--) {
41782 var a = this.words[i] | 0;
41783 var b = num.words[i] | 0;
41784
41785 if (a === b) continue;
41786 if (a < b) {
41787 res = -1;
41788 } else if (a > b) {
41789 res = 1;
41790 }
41791 break;
41792 }
41793 return res;
41794 };
41795
41796 BN.prototype.gtn = function gtn (num) {
41797 return this.cmpn(num) === 1;
41798 };
41799
41800 BN.prototype.gt = function gt (num) {
41801 return this.cmp(num) === 1;
41802 };
41803
41804 BN.prototype.gten = function gten (num) {
41805 return this.cmpn(num) >= 0;
41806 };
41807
41808 BN.prototype.gte = function gte (num) {
41809 return this.cmp(num) >= 0;
41810 };
41811
41812 BN.prototype.ltn = function ltn (num) {
41813 return this.cmpn(num) === -1;
41814 };
41815
41816 BN.prototype.lt = function lt (num) {
41817 return this.cmp(num) === -1;
41818 };
41819
41820 BN.prototype.lten = function lten (num) {
41821 return this.cmpn(num) <= 0;
41822 };
41823
41824 BN.prototype.lte = function lte (num) {
41825 return this.cmp(num) <= 0;
41826 };
41827
41828 BN.prototype.eqn = function eqn (num) {
41829 return this.cmpn(num) === 0;
41830 };
41831
41832 BN.prototype.eq = function eq (num) {
41833 return this.cmp(num) === 0;
41834 };
41835
41836 //
41837 // A reduce context, could be using montgomery or something better, depending
41838 // on the `m` itself.
41839 //
41840 BN.red = function red (num) {
41841 return new Red(num);
41842 };
41843
41844 BN.prototype.toRed = function toRed (ctx) {
41845 assert(!this.red, 'Already a number in reduction context');
41846 assert(this.negative === 0, 'red works only with positives');
41847 return ctx.convertTo(this)._forceRed(ctx);
41848 };
41849
41850 BN.prototype.fromRed = function fromRed () {
41851 assert(this.red, 'fromRed works only with numbers in reduction context');
41852 return this.red.convertFrom(this);
41853 };
41854
41855 BN.prototype._forceRed = function _forceRed (ctx) {
41856 this.red = ctx;
41857 return this;
41858 };
41859
41860 BN.prototype.forceRed = function forceRed (ctx) {
41861 assert(!this.red, 'Already a number in reduction context');
41862 return this._forceRed(ctx);
41863 };
41864
41865 BN.prototype.redAdd = function redAdd (num) {
41866 assert(this.red, 'redAdd works only with red numbers');
41867 return this.red.add(this, num);
41868 };
41869
41870 BN.prototype.redIAdd = function redIAdd (num) {
41871 assert(this.red, 'redIAdd works only with red numbers');
41872 return this.red.iadd(this, num);
41873 };
41874
41875 BN.prototype.redSub = function redSub (num) {
41876 assert(this.red, 'redSub works only with red numbers');
41877 return this.red.sub(this, num);
41878 };
41879
41880 BN.prototype.redISub = function redISub (num) {
41881 assert(this.red, 'redISub works only with red numbers');
41882 return this.red.isub(this, num);
41883 };
41884
41885 BN.prototype.redShl = function redShl (num) {
41886 assert(this.red, 'redShl works only with red numbers');
41887 return this.red.shl(this, num);
41888 };
41889
41890 BN.prototype.redMul = function redMul (num) {
41891 assert(this.red, 'redMul works only with red numbers');
41892 this.red._verify2(this, num);
41893 return this.red.mul(this, num);
41894 };
41895
41896 BN.prototype.redIMul = function redIMul (num) {
41897 assert(this.red, 'redMul works only with red numbers');
41898 this.red._verify2(this, num);
41899 return this.red.imul(this, num);
41900 };
41901
41902 BN.prototype.redSqr = function redSqr () {
41903 assert(this.red, 'redSqr works only with red numbers');
41904 this.red._verify1(this);
41905 return this.red.sqr(this);
41906 };
41907
41908 BN.prototype.redISqr = function redISqr () {
41909 assert(this.red, 'redISqr works only with red numbers');
41910 this.red._verify1(this);
41911 return this.red.isqr(this);
41912 };
41913
41914 // Square root over p
41915 BN.prototype.redSqrt = function redSqrt () {
41916 assert(this.red, 'redSqrt works only with red numbers');
41917 this.red._verify1(this);
41918 return this.red.sqrt(this);
41919 };
41920
41921 BN.prototype.redInvm = function redInvm () {
41922 assert(this.red, 'redInvm works only with red numbers');
41923 this.red._verify1(this);
41924 return this.red.invm(this);
41925 };
41926
41927 // Return negative clone of `this` % `red modulo`
41928 BN.prototype.redNeg = function redNeg () {
41929 assert(this.red, 'redNeg works only with red numbers');
41930 this.red._verify1(this);
41931 return this.red.neg(this);
41932 };
41933
41934 BN.prototype.redPow = function redPow (num) {
41935 assert(this.red && !num.red, 'redPow(normalNum)');
41936 this.red._verify1(this);
41937 return this.red.pow(this, num);
41938 };
41939
41940 // Prime numbers with efficient reduction
41941 var primes = {
41942 k256: null,
41943 p224: null,
41944 p192: null,
41945 p25519: null
41946 };
41947
41948 // Pseudo-Mersenne prime
41949 function MPrime (name, p) {
41950 // P = 2 ^ N - K
41951 this.name = name;
41952 this.p = new BN(p, 16);
41953 this.n = this.p.bitLength();
41954 this.k = new BN(1).iushln(this.n).isub(this.p);
41955
41956 this.tmp = this._tmp();
41957 }
41958
41959 MPrime.prototype._tmp = function _tmp () {
41960 var tmp = new BN(null);
41961 tmp.words = new Array(Math.ceil(this.n / 13));
41962 return tmp;
41963 };
41964
41965 MPrime.prototype.ireduce = function ireduce (num) {
41966 // Assumes that `num` is less than `P^2`
41967 // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
41968 var r = num;
41969 var rlen;
41970
41971 do {
41972 this.split(r, this.tmp);
41973 r = this.imulK(r);
41974 r = r.iadd(this.tmp);
41975 rlen = r.bitLength();
41976 } while (rlen > this.n);
41977
41978 var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
41979 if (cmp === 0) {
41980 r.words[0] = 0;
41981 r.length = 1;
41982 } else if (cmp > 0) {
41983 r.isub(this.p);
41984 } else {
41985 r.strip();
41986 }
41987
41988 return r;
41989 };
41990
41991 MPrime.prototype.split = function split (input, out) {
41992 input.iushrn(this.n, 0, out);
41993 };
41994
41995 MPrime.prototype.imulK = function imulK (num) {
41996 return num.imul(this.k);
41997 };
41998
41999 function K256 () {
42000 MPrime.call(
42001 this,
42002 'k256',
42003 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
42004 }
42005 inherits(K256, MPrime);
42006
42007 K256.prototype.split = function split (input, output) {
42008 // 256 = 9 * 26 + 22
42009 var mask = 0x3fffff;
42010
42011 var outLen = Math.min(input.length, 9);
42012 for (var i = 0; i < outLen; i++) {
42013 output.words[i] = input.words[i];
42014 }
42015 output.length = outLen;
42016
42017 if (input.length <= 9) {
42018 input.words[0] = 0;
42019 input.length = 1;
42020 return;
42021 }
42022
42023 // Shift by 9 limbs
42024 var prev = input.words[9];
42025 output.words[output.length++] = prev & mask;
42026
42027 for (i = 10; i < input.length; i++) {
42028 var next = input.words[i] | 0;
42029 input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
42030 prev = next;
42031 }
42032 prev >>>= 22;
42033 input.words[i - 10] = prev;
42034 if (prev === 0 && input.length > 10) {
42035 input.length -= 10;
42036 } else {
42037 input.length -= 9;
42038 }
42039 };
42040
42041 K256.prototype.imulK = function imulK (num) {
42042 // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
42043 num.words[num.length] = 0;
42044 num.words[num.length + 1] = 0;
42045 num.length += 2;
42046
42047 // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
42048 var lo = 0;
42049 for (var i = 0; i < num.length; i++) {
42050 var w = num.words[i] | 0;
42051 lo += w * 0x3d1;
42052 num.words[i] = lo & 0x3ffffff;
42053 lo = w * 0x40 + ((lo / 0x4000000) | 0);
42054 }
42055
42056 // Fast length reduction
42057 if (num.words[num.length - 1] === 0) {
42058 num.length--;
42059 if (num.words[num.length - 1] === 0) {
42060 num.length--;
42061 }
42062 }
42063 return num;
42064 };
42065
42066 function P224 () {
42067 MPrime.call(
42068 this,
42069 'p224',
42070 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
42071 }
42072 inherits(P224, MPrime);
42073
42074 function P192 () {
42075 MPrime.call(
42076 this,
42077 'p192',
42078 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
42079 }
42080 inherits(P192, MPrime);
42081
42082 function P25519 () {
42083 // 2 ^ 255 - 19
42084 MPrime.call(
42085 this,
42086 '25519',
42087 '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
42088 }
42089 inherits(P25519, MPrime);
42090
42091 P25519.prototype.imulK = function imulK (num) {
42092 // K = 0x13
42093 var carry = 0;
42094 for (var i = 0; i < num.length; i++) {
42095 var hi = (num.words[i] | 0) * 0x13 + carry;
42096 var lo = hi & 0x3ffffff;
42097 hi >>>= 26;
42098
42099 num.words[i] = lo;
42100 carry = hi;
42101 }
42102 if (carry !== 0) {
42103 num.words[num.length++] = carry;
42104 }
42105 return num;
42106 };
42107
42108 // Exported mostly for testing purposes, use plain name instead
42109 BN._prime = function prime (name) {
42110 // Cached version of prime
42111 if (primes[name]) return primes[name];
42112
42113 var prime;
42114 if (name === 'k256') {
42115 prime = new K256();
42116 } else if (name === 'p224') {
42117 prime = new P224();
42118 } else if (name === 'p192') {
42119 prime = new P192();
42120 } else if (name === 'p25519') {
42121 prime = new P25519();
42122 } else {
42123 throw new Error('Unknown prime ' + name);
42124 }
42125 primes[name] = prime;
42126
42127 return prime;
42128 };
42129
42130 //
42131 // Base reduction engine
42132 //
42133 function Red (m) {
42134 if (typeof m === 'string') {
42135 var prime = BN._prime(m);
42136 this.m = prime.p;
42137 this.prime = prime;
42138 } else {
42139 assert(m.gtn(1), 'modulus must be greater than 1');
42140 this.m = m;
42141 this.prime = null;
42142 }
42143 }
42144
42145 Red.prototype._verify1 = function _verify1 (a) {
42146 assert(a.negative === 0, 'red works only with positives');
42147 assert(a.red, 'red works only with red numbers');
42148 };
42149
42150 Red.prototype._verify2 = function _verify2 (a, b) {
42151 assert((a.negative | b.negative) === 0, 'red works only with positives');
42152 assert(a.red && a.red === b.red,
42153 'red works only with red numbers');
42154 };
42155
42156 Red.prototype.imod = function imod (a) {
42157 if (this.prime) return this.prime.ireduce(a)._forceRed(this);
42158 return a.umod(this.m)._forceRed(this);
42159 };
42160
42161 Red.prototype.neg = function neg (a) {
42162 if (a.isZero()) {
42163 return a.clone();
42164 }
42165
42166 return this.m.sub(a)._forceRed(this);
42167 };
42168
42169 Red.prototype.add = function add (a, b) {
42170 this._verify2(a, b);
42171
42172 var res = a.add(b);
42173 if (res.cmp(this.m) >= 0) {
42174 res.isub(this.m);
42175 }
42176 return res._forceRed(this);
42177 };
42178
42179 Red.prototype.iadd = function iadd (a, b) {
42180 this._verify2(a, b);
42181
42182 var res = a.iadd(b);
42183 if (res.cmp(this.m) >= 0) {
42184 res.isub(this.m);
42185 }
42186 return res;
42187 };
42188
42189 Red.prototype.sub = function sub (a, b) {
42190 this._verify2(a, b);
42191
42192 var res = a.sub(b);
42193 if (res.cmpn(0) < 0) {
42194 res.iadd(this.m);
42195 }
42196 return res._forceRed(this);
42197 };
42198
42199 Red.prototype.isub = function isub (a, b) {
42200 this._verify2(a, b);
42201
42202 var res = a.isub(b);
42203 if (res.cmpn(0) < 0) {
42204 res.iadd(this.m);
42205 }
42206 return res;
42207 };
42208
42209 Red.prototype.shl = function shl (a, num) {
42210 this._verify1(a);
42211 return this.imod(a.ushln(num));
42212 };
42213
42214 Red.prototype.imul = function imul (a, b) {
42215 this._verify2(a, b);
42216 return this.imod(a.imul(b));
42217 };
42218
42219 Red.prototype.mul = function mul (a, b) {
42220 this._verify2(a, b);
42221 return this.imod(a.mul(b));
42222 };
42223
42224 Red.prototype.isqr = function isqr (a) {
42225 return this.imul(a, a.clone());
42226 };
42227
42228 Red.prototype.sqr = function sqr (a) {
42229 return this.mul(a, a);
42230 };
42231
42232 Red.prototype.sqrt = function sqrt (a) {
42233 if (a.isZero()) return a.clone();
42234
42235 var mod3 = this.m.andln(3);
42236 assert(mod3 % 2 === 1);
42237
42238 // Fast case
42239 if (mod3 === 3) {
42240 var pow = this.m.add(new BN(1)).iushrn(2);
42241 return this.pow(a, pow);
42242 }
42243
42244 // Tonelli-Shanks algorithm (Totally unoptimized and slow)
42245 //
42246 // Find Q and S, that Q * 2 ^ S = (P - 1)
42247 var q = this.m.subn(1);
42248 var s = 0;
42249 while (!q.isZero() && q.andln(1) === 0) {
42250 s++;
42251 q.iushrn(1);
42252 }
42253 assert(!q.isZero());
42254
42255 var one = new BN(1).toRed(this);
42256 var nOne = one.redNeg();
42257
42258 // Find quadratic non-residue
42259 // NOTE: Max is such because of generalized Riemann hypothesis.
42260 var lpow = this.m.subn(1).iushrn(1);
42261 var z = this.m.bitLength();
42262 z = new BN(2 * z * z).toRed(this);
42263
42264 while (this.pow(z, lpow).cmp(nOne) !== 0) {
42265 z.redIAdd(nOne);
42266 }
42267
42268 var c = this.pow(z, q);
42269 var r = this.pow(a, q.addn(1).iushrn(1));
42270 var t = this.pow(a, q);
42271 var m = s;
42272 while (t.cmp(one) !== 0) {
42273 var tmp = t;
42274 for (var i = 0; tmp.cmp(one) !== 0; i++) {
42275 tmp = tmp.redSqr();
42276 }
42277 assert(i < m);
42278 var b = this.pow(c, new BN(1).iushln(m - i - 1));
42279
42280 r = r.redMul(b);
42281 c = b.redSqr();
42282 t = t.redMul(c);
42283 m = i;
42284 }
42285
42286 return r;
42287 };
42288
42289 Red.prototype.invm = function invm (a) {
42290 var inv = a._invmp(this.m);
42291 if (inv.negative !== 0) {
42292 inv.negative = 0;
42293 return this.imod(inv).redNeg();
42294 } else {
42295 return this.imod(inv);
42296 }
42297 };
42298
42299 Red.prototype.pow = function pow (a, num) {
42300 if (num.isZero()) return new BN(1);
42301 if (num.cmpn(1) === 0) return a.clone();
42302
42303 var windowSize = 4;
42304 var wnd = new Array(1 << windowSize);
42305 wnd[0] = new BN(1).toRed(this);
42306 wnd[1] = a;
42307 for (var i = 2; i < wnd.length; i++) {
42308 wnd[i] = this.mul(wnd[i - 1], a);
42309 }
42310
42311 var res = wnd[0];
42312 var current = 0;
42313 var currentLen = 0;
42314 var start = num.bitLength() % 26;
42315 if (start === 0) {
42316 start = 26;
42317 }
42318
42319 for (i = num.length - 1; i >= 0; i--) {
42320 var word = num.words[i];
42321 for (var j = start - 1; j >= 0; j--) {
42322 var bit = (word >> j) & 1;
42323 if (res !== wnd[0]) {
42324 res = this.sqr(res);
42325 }
42326
42327 if (bit === 0 && current === 0) {
42328 currentLen = 0;
42329 continue;
42330 }
42331
42332 current <<= 1;
42333 current |= bit;
42334 currentLen++;
42335 if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
42336
42337 res = this.mul(res, wnd[current]);
42338 currentLen = 0;
42339 current = 0;
42340 }
42341 start = 26;
42342 }
42343
42344 return res;
42345 };
42346
42347 Red.prototype.convertTo = function convertTo (num) {
42348 var r = num.umod(this.m);
42349
42350 return r === num ? r.clone() : r;
42351 };
42352
42353 Red.prototype.convertFrom = function convertFrom (num) {
42354 var res = num.clone();
42355 res.red = null;
42356 return res;
42357 };
42358
42359 //
42360 // Montgomery method engine
42361 //
42362
42363 BN.mont = function mont (num) {
42364 return new Mont(num);
42365 };
42366
42367 function Mont (m) {
42368 Red.call(this, m);
42369
42370 this.shift = this.m.bitLength();
42371 if (this.shift % 26 !== 0) {
42372 this.shift += 26 - (this.shift % 26);
42373 }
42374
42375 this.r = new BN(1).iushln(this.shift);
42376 this.r2 = this.imod(this.r.sqr());
42377 this.rinv = this.r._invmp(this.m);
42378
42379 this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
42380 this.minv = this.minv.umod(this.r);
42381 this.minv = this.r.sub(this.minv);
42382 }
42383 inherits(Mont, Red);
42384
42385 Mont.prototype.convertTo = function convertTo (num) {
42386 return this.imod(num.ushln(this.shift));
42387 };
42388
42389 Mont.prototype.convertFrom = function convertFrom (num) {
42390 var r = this.imod(num.mul(this.rinv));
42391 r.red = null;
42392 return r;
42393 };
42394
42395 Mont.prototype.imul = function imul (a, b) {
42396 if (a.isZero() || b.isZero()) {
42397 a.words[0] = 0;
42398 a.length = 1;
42399 return a;
42400 }
42401
42402 var t = a.imul(b);
42403 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
42404 var u = t.isub(c).iushrn(this.shift);
42405 var res = u;
42406
42407 if (u.cmp(this.m) >= 0) {
42408 res = u.isub(this.m);
42409 } else if (u.cmpn(0) < 0) {
42410 res = u.iadd(this.m);
42411 }
42412
42413 return res._forceRed(this);
42414 };
42415
42416 Mont.prototype.mul = function mul (a, b) {
42417 if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
42418
42419 var t = a.mul(b);
42420 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
42421 var u = t.isub(c).iushrn(this.shift);
42422 var res = u;
42423 if (u.cmp(this.m) >= 0) {
42424 res = u.isub(this.m);
42425 } else if (u.cmpn(0) < 0) {
42426 res = u.iadd(this.m);
42427 }
42428
42429 return res._forceRed(this);
42430 };
42431
42432 Mont.prototype.invm = function invm (a) {
42433 // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
42434 var res = this.imod(a._invmp(this.m).mul(this.r2));
42435 return res._forceRed(this);
42436 };
42437 })(typeof module === 'undefined' || module, this);
42438
42439 },{}],82:[function(require,module,exports){
42440 var r;
42441
42442 module.exports = function rand(len) {
42443 if (!r)
42444 r = new Rand(null);
42445
42446 return r.generate(len);
42447 };
42448
42449 function Rand(rand) {
42450 this.rand = rand;
42451 }
42452 module.exports.Rand = Rand;
42453
42454 Rand.prototype.generate = function generate(len) {
42455 return this._rand(len);
42456 };
42457
42458 // Emulate crypto API using randy
42459 Rand.prototype._rand = function _rand(n) {
42460 if (this.rand.getBytes)
42461 return this.rand.getBytes(n);
42462
42463 var res = new Uint8Array(n);
42464 for (var i = 0; i < res.length; i++)
42465 res[i] = this.rand.getByte();
42466 return res;
42467 };
42468
42469 if (typeof self === 'object') {
42470 if (self.crypto && self.crypto.getRandomValues) {
42471 // Modern browsers
42472 Rand.prototype._rand = function _rand(n) {
42473 var arr = new Uint8Array(n);
42474 self.crypto.getRandomValues(arr);
42475 return arr;
42476 };
42477 } else if (self.msCrypto && self.msCrypto.getRandomValues) {
42478 // IE
42479 Rand.prototype._rand = function _rand(n) {
42480 var arr = new Uint8Array(n);
42481 self.msCrypto.getRandomValues(arr);
42482 return arr;
42483 };
42484
42485 // Safari's WebWorkers do not have `crypto`
42486 } else if (typeof window === 'object') {
42487 // Old junk
42488 Rand.prototype._rand = function() {
42489 throw new Error('Not implemented yet');
42490 };
42491 }
42492 } else {
42493 // Node.js or Web worker with no crypto support
42494 try {
42495 var crypto = require('crypto');
42496 if (typeof crypto.randomBytes !== 'function')
42497 throw new Error('Not supported');
42498
42499 Rand.prototype._rand = function _rand(n) {
42500 return crypto.randomBytes(n);
42501 };
42502 } catch (e) {
42503 }
42504 }
42505
42506 },{"crypto":3}],83:[function(require,module,exports){
42507 var basex = require('base-x')
42508 var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
42509
42510 module.exports = basex(ALPHABET)
42511
42512 },{"base-x":35}],84:[function(require,module,exports){
42513 (function (Buffer){
42514 'use strict'
42515
42516 var base58 = require('bs58')
42517
42518 module.exports = function (checksumFn) {
42519 // Encode a buffer as a base58-check encoded string
42520 function encode (payload) {
42521 var checksum = checksumFn(payload)
42522
42523 return base58.encode(Buffer.concat([
42524 payload,
42525 checksum
42526 ], payload.length + 4))
42527 }
42528
42529 function decodeRaw (buffer) {
42530 var payload = buffer.slice(0, -4)
42531 var checksum = buffer.slice(-4)
42532 var newChecksum = checksumFn(payload)
42533
42534 if (checksum[0] ^ newChecksum[0] |
42535 checksum[1] ^ newChecksum[1] |
42536 checksum[2] ^ newChecksum[2] |
42537 checksum[3] ^ newChecksum[3]) return
42538
42539 return payload
42540 }
42541
42542 // Decode a base58-check encoded string to a buffer, no result if checksum is wrong
42543 function decodeUnsafe (string) {
42544 var buffer = base58.decodeUnsafe(string)
42545 if (!buffer) return
42546
42547 return decodeRaw(buffer)
42548 }
42549
42550 function decode (string) {
42551 var buffer = base58.decode(string)
42552 var payload = decodeRaw(buffer, checksumFn)
42553 if (!payload) throw new Error('Invalid checksum')
42554 return payload
42555 }
42556
42557 return {
42558 encode: encode,
42559 decode: decode,
42560 decodeUnsafe: decodeUnsafe
42561 }
42562 }
42563
42564 }).call(this,require("buffer").Buffer)
42565 },{"bs58":83,"buffer":5}],85:[function(require,module,exports){
42566 'use strict'
42567
42568 var createHash = require('create-hash')
42569 var bs58checkBase = require('./base')
42570
42571 // SHA256(SHA256(buffer))
42572 function sha256x2 (buffer) {
42573 var tmp = createHash('sha256').update(buffer).digest()
42574 return createHash('sha256').update(tmp).digest()
42575 }
42576
42577 module.exports = bs58checkBase(sha256x2)
42578
42579 },{"./base":84,"create-hash":87}],86:[function(require,module,exports){
42580 var Buffer = require('safe-buffer').Buffer
42581 var Transform = require('stream').Transform
42582 var StringDecoder = require('string_decoder').StringDecoder
42583 var inherits = require('inherits')
42584
42585 function CipherBase (hashMode) {
42586 Transform.call(this)
42587 this.hashMode = typeof hashMode === 'string'
42588 if (this.hashMode) {
42589 this[hashMode] = this._finalOrDigest
42590 } else {
42591 this.final = this._finalOrDigest
42592 }
42593 if (this._final) {
42594 this.__final = this._final
42595 this._final = null
42596 }
42597 this._decoder = null
42598 this._encoding = null
42599 }
42600 inherits(CipherBase, Transform)
42601
42602 CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
42603 if (typeof data === 'string') {
42604 data = Buffer.from(data, inputEnc)
42605 }
42606
42607 var outData = this._update(data)
42608 if (this.hashMode) return this
42609
42610 if (outputEnc) {
42611 outData = this._toString(outData, outputEnc)
42612 }
42613
42614 return outData
42615 }
42616
42617 CipherBase.prototype.setAutoPadding = function () {}
42618 CipherBase.prototype.getAuthTag = function () {
42619 throw new Error('trying to get auth tag in unsupported state')
42620 }
42621
42622 CipherBase.prototype.setAuthTag = function () {
42623 throw new Error('trying to set auth tag in unsupported state')
42624 }
42625
42626 CipherBase.prototype.setAAD = function () {
42627 throw new Error('trying to set aad in unsupported state')
42628 }
42629
42630 CipherBase.prototype._transform = function (data, _, next) {
42631 var err
42632 try {
42633 if (this.hashMode) {
42634 this._update(data)
42635 } else {
42636 this.push(this._update(data))
42637 }
42638 } catch (e) {
42639 err = e
42640 } finally {
42641 next(err)
42642 }
42643 }
42644 CipherBase.prototype._flush = function (done) {
42645 var err
42646 try {
42647 this.push(this.__final())
42648 } catch (e) {
42649 err = e
42650 }
42651
42652 done(err)
42653 }
42654 CipherBase.prototype._finalOrDigest = function (outputEnc) {
42655 var outData = this.__final() || Buffer.alloc(0)
42656 if (outputEnc) {
42657 outData = this._toString(outData, outputEnc, true)
42658 }
42659 return outData
42660 }
42661
42662 CipherBase.prototype._toString = function (value, enc, fin) {
42663 if (!this._decoder) {
42664 this._decoder = new StringDecoder(enc)
42665 this._encoding = enc
42666 }
42667
42668 if (this._encoding !== enc) throw new Error('can\'t switch encodings')
42669
42670 var out = this._decoder.write(value)
42671 if (fin) {
42672 out += this._decoder.end()
42673 }
42674
42675 return out
42676 }
42677
42678 module.exports = CipherBase
42679
42680 },{"inherits":121,"safe-buffer":128,"stream":28,"string_decoder":29}],87:[function(require,module,exports){
42681 (function (Buffer){
42682 'use strict'
42683 var inherits = require('inherits')
42684 var md5 = require('./md5')
42685 var RIPEMD160 = require('ripemd160')
42686 var sha = require('sha.js')
42687
42688 var Base = require('cipher-base')
42689
42690 function HashNoConstructor (hash) {
42691 Base.call(this, 'digest')
42692
42693 this._hash = hash
42694 this.buffers = []
42695 }
42696
42697 inherits(HashNoConstructor, Base)
42698
42699 HashNoConstructor.prototype._update = function (data) {
42700 this.buffers.push(data)
42701 }
42702
42703 HashNoConstructor.prototype._final = function () {
42704 var buf = Buffer.concat(this.buffers)
42705 var r = this._hash(buf)
42706 this.buffers = null
42707
42708 return r
42709 }
42710
42711 function Hash (hash) {
42712 Base.call(this, 'digest')
42713
42714 this._hash = hash
42715 }
42716
42717 inherits(Hash, Base)
42718
42719 Hash.prototype._update = function (data) {
42720 this._hash.update(data)
42721 }
42722
42723 Hash.prototype._final = function () {
42724 return this._hash.digest()
42725 }
42726
42727 module.exports = function createHash (alg) {
42728 alg = alg.toLowerCase()
42729 if (alg === 'md5') return new HashNoConstructor(md5)
42730 if (alg === 'rmd160' || alg === 'ripemd160') return new Hash(new RIPEMD160())
42731
42732 return new Hash(sha(alg))
42733 }
42734
42735 }).call(this,require("buffer").Buffer)
42736 },{"./md5":89,"buffer":5,"cipher-base":86,"inherits":121,"ripemd160":127,"sha.js":130}],88:[function(require,module,exports){
42737 (function (Buffer){
42738 'use strict'
42739 var intSize = 4
42740 var zeroBuffer = new Buffer(intSize)
42741 zeroBuffer.fill(0)
42742
42743 var charSize = 8
42744 var hashSize = 16
42745
42746 function toArray (buf) {
42747 if ((buf.length % intSize) !== 0) {
42748 var len = buf.length + (intSize - (buf.length % intSize))
42749 buf = Buffer.concat([buf, zeroBuffer], len)
42750 }
42751
42752 var arr = new Array(buf.length >>> 2)
42753 for (var i = 0, j = 0; i < buf.length; i += intSize, j++) {
42754 arr[j] = buf.readInt32LE(i)
42755 }
42756
42757 return arr
42758 }
42759
42760 module.exports = function hash (buf, fn) {
42761 var arr = fn(toArray(buf), buf.length * charSize)
42762 buf = new Buffer(hashSize)
42763 for (var i = 0; i < arr.length; i++) {
42764 buf.writeInt32LE(arr[i], i << 2, true)
42765 }
42766 return buf
42767 }
42768
42769 }).call(this,require("buffer").Buffer)
42770 },{"buffer":5}],89:[function(require,module,exports){
42771 'use strict'
42772 /*
42773 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
42774 * Digest Algorithm, as defined in RFC 1321.
42775 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
42776 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
42777 * Distributed under the BSD License
42778 * See http://pajhome.org.uk/crypt/md5 for more info.
42779 */
42780
42781 var makeHash = require('./make-hash')
42782
42783 /*
42784 * Calculate the MD5 of an array of little-endian words, and a bit length
42785 */
42786 function core_md5 (x, len) {
42787 /* append padding */
42788 x[len >> 5] |= 0x80 << ((len) % 32)
42789 x[(((len + 64) >>> 9) << 4) + 14] = len
42790
42791 var a = 1732584193
42792 var b = -271733879
42793 var c = -1732584194
42794 var d = 271733878
42795
42796 for (var i = 0; i < x.length; i += 16) {
42797 var olda = a
42798 var oldb = b
42799 var oldc = c
42800 var oldd = d
42801
42802 a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936)
42803 d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586)
42804 c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819)
42805 b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330)
42806 a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897)
42807 d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426)
42808 c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341)
42809 b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983)
42810 a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416)
42811 d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417)
42812 c = md5_ff(c, d, a, b, x[i + 10], 17, -42063)
42813 b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162)
42814 a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682)
42815 d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101)
42816 c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290)
42817 b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329)
42818
42819 a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510)
42820 d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632)
42821 c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713)
42822 b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302)
42823 a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691)
42824 d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083)
42825 c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335)
42826 b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848)
42827 a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438)
42828 d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690)
42829 c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961)
42830 b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501)
42831 a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467)
42832 d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784)
42833 c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473)
42834 b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734)
42835
42836 a = md5_hh(a, b, c, d, x[i + 5], 4, -378558)
42837 d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463)
42838 c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562)
42839 b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556)
42840 a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060)
42841 d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353)
42842 c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632)
42843 b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640)
42844 a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174)
42845 d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222)
42846 c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979)
42847 b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189)
42848 a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487)
42849 d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835)
42850 c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520)
42851 b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651)
42852
42853 a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844)
42854 d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415)
42855 c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905)
42856 b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055)
42857 a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571)
42858 d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606)
42859 c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523)
42860 b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799)
42861 a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359)
42862 d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744)
42863 c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380)
42864 b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649)
42865 a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070)
42866 d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379)
42867 c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259)
42868 b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551)
42869
42870 a = safe_add(a, olda)
42871 b = safe_add(b, oldb)
42872 c = safe_add(c, oldc)
42873 d = safe_add(d, oldd)
42874 }
42875
42876 return [a, b, c, d]
42877 }
42878
42879 /*
42880 * These functions implement the four basic operations the algorithm uses.
42881 */
42882 function md5_cmn (q, a, b, x, s, t) {
42883 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
42884 }
42885
42886 function md5_ff (a, b, c, d, x, s, t) {
42887 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t)
42888 }
42889
42890 function md5_gg (a, b, c, d, x, s, t) {
42891 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t)
42892 }
42893
42894 function md5_hh (a, b, c, d, x, s, t) {
42895 return md5_cmn(b ^ c ^ d, a, b, x, s, t)
42896 }
42897
42898 function md5_ii (a, b, c, d, x, s, t) {
42899 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t)
42900 }
42901
42902 /*
42903 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
42904 * to work around bugs in some JS interpreters.
42905 */
42906 function safe_add (x, y) {
42907 var lsw = (x & 0xFFFF) + (y & 0xFFFF)
42908 var msw = (x >> 16) + (y >> 16) + (lsw >> 16)
42909 return (msw << 16) | (lsw & 0xFFFF)
42910 }
42911
42912 /*
42913 * Bitwise rotate a 32-bit number to the left.
42914 */
42915 function bit_rol (num, cnt) {
42916 return (num << cnt) | (num >>> (32 - cnt))
42917 }
42918
42919 module.exports = function md5 (buf) {
42920 return makeHash(buf, core_md5)
42921 }
42922
42923 },{"./make-hash":88}],90:[function(require,module,exports){
42924 'use strict'
42925 var inherits = require('inherits')
42926 var Legacy = require('./legacy')
42927 var Base = require('cipher-base')
42928 var Buffer = require('safe-buffer').Buffer
42929 var md5 = require('create-hash/md5')
42930 var RIPEMD160 = require('ripemd160')
42931
42932 var sha = require('sha.js')
42933
42934 var ZEROS = Buffer.alloc(128)
42935
42936 function Hmac (alg, key) {
42937 Base.call(this, 'digest')
42938 if (typeof key === 'string') {
42939 key = Buffer.from(key)
42940 }
42941
42942 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
42943
42944 this._alg = alg
42945 this._key = key
42946 if (key.length > blocksize) {
42947 var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
42948 key = hash.update(key).digest()
42949 } else if (key.length < blocksize) {
42950 key = Buffer.concat([key, ZEROS], blocksize)
42951 }
42952
42953 var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
42954 var opad = this._opad = Buffer.allocUnsafe(blocksize)
42955
42956 for (var i = 0; i < blocksize; i++) {
42957 ipad[i] = key[i] ^ 0x36
42958 opad[i] = key[i] ^ 0x5C
42959 }
42960 this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
42961 this._hash.update(ipad)
42962 }
42963
42964 inherits(Hmac, Base)
42965
42966 Hmac.prototype._update = function (data) {
42967 this._hash.update(data)
42968 }
42969
42970 Hmac.prototype._final = function () {
42971 var h = this._hash.digest()
42972 var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)
42973 return hash.update(this._opad).update(h).digest()
42974 }
42975
42976 module.exports = function createHmac (alg, key) {
42977 alg = alg.toLowerCase()
42978 if (alg === 'rmd160' || alg === 'ripemd160') {
42979 return new Hmac('rmd160', key)
42980 }
42981 if (alg === 'md5') {
42982 return new Legacy(md5, key)
42983 }
42984 return new Hmac(alg, key)
42985 }
42986
42987 },{"./legacy":91,"cipher-base":86,"create-hash/md5":89,"inherits":121,"ripemd160":127,"safe-buffer":128,"sha.js":130}],91:[function(require,module,exports){
42988 'use strict'
42989 var inherits = require('inherits')
42990 var Buffer = require('safe-buffer').Buffer
42991
42992 var Base = require('cipher-base')
42993
42994 var ZEROS = Buffer.alloc(128)
42995 var blocksize = 64
42996
42997 function Hmac (alg, key) {
42998 Base.call(this, 'digest')
42999 if (typeof key === 'string') {
43000 key = Buffer.from(key)
43001 }
43002
43003 this._alg = alg
43004 this._key = key
43005
43006 if (key.length > blocksize) {
43007 key = alg(key)
43008 } else if (key.length < blocksize) {
43009 key = Buffer.concat([key, ZEROS], blocksize)
43010 }
43011
43012 var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
43013 var opad = this._opad = Buffer.allocUnsafe(blocksize)
43014
43015 for (var i = 0; i < blocksize; i++) {
43016 ipad[i] = key[i] ^ 0x36
43017 opad[i] = key[i] ^ 0x5C
43018 }
43019
43020 this._hash = [ipad]
43021 }
43022
43023 inherits(Hmac, Base)
43024
43025 Hmac.prototype._update = function (data) {
43026 this._hash.push(data)
43027 }
43028
43029 Hmac.prototype._final = function () {
43030 var h = this._alg(Buffer.concat(this._hash))
43031 return this._alg(Buffer.concat([this._opad, h]))
43032 }
43033 module.exports = Hmac
43034
43035 },{"cipher-base":86,"inherits":121,"safe-buffer":128}],92:[function(require,module,exports){
43036 var assert = require('assert')
43037 var BigInteger = require('bigi')
43038
43039 var Point = require('./point')
43040
43041 function Curve (p, a, b, Gx, Gy, n, h) {
43042 this.p = p
43043 this.a = a
43044 this.b = b
43045 this.G = Point.fromAffine(this, Gx, Gy)
43046 this.n = n
43047 this.h = h
43048
43049 this.infinity = new Point(this, null, null, BigInteger.ZERO)
43050
43051 // result caching
43052 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
43053
43054 // determine size of p in bytes
43055 this.pLength = Math.floor((this.p.bitLength() + 7) / 8)
43056 }
43057
43058 Curve.prototype.pointFromX = function (isOdd, x) {
43059 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
43060 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
43061
43062 var y = beta
43063 if (beta.isEven() ^ !isOdd) {
43064 y = this.p.subtract(y) // -y % p
43065 }
43066
43067 return Point.fromAffine(this, x, y)
43068 }
43069
43070 Curve.prototype.isInfinity = function (Q) {
43071 if (Q === this.infinity) return true
43072
43073 return Q.z.signum() === 0 && Q.y.signum() !== 0
43074 }
43075
43076 Curve.prototype.isOnCurve = function (Q) {
43077 if (this.isInfinity(Q)) return true
43078
43079 var x = Q.affineX
43080 var y = Q.affineY
43081 var a = this.a
43082 var b = this.b
43083 var p = this.p
43084
43085 // Check that xQ and yQ are integers in the interval [0, p - 1]
43086 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
43087 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
43088
43089 // and check that y^2 = x^3 + ax + b (mod p)
43090 var lhs = y.square().mod(p)
43091 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
43092 return lhs.equals(rhs)
43093 }
43094
43095 /**
43096 * Validate an elliptic curve point.
43097 *
43098 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
43099 */
43100 Curve.prototype.validate = function (Q) {
43101 // Check Q != O
43102 assert(!this.isInfinity(Q), 'Point is at infinity')
43103 assert(this.isOnCurve(Q), 'Point is not on the curve')
43104
43105 // Check nQ = O (where Q is a scalar multiple of G)
43106 var nQ = Q.multiply(this.n)
43107 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
43108
43109 return true
43110 }
43111
43112 module.exports = Curve
43113
43114 },{"./point":96,"assert":1,"bigi":39}],93:[function(require,module,exports){
43115 module.exports={
43116 "secp128r1": {
43117 "p": "fffffffdffffffffffffffffffffffff",
43118 "a": "fffffffdfffffffffffffffffffffffc",
43119 "b": "e87579c11079f43dd824993c2cee5ed3",
43120 "n": "fffffffe0000000075a30d1b9038a115",
43121 "h": "01",
43122 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
43123 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
43124 },
43125 "secp160k1": {
43126 "p": "fffffffffffffffffffffffffffffffeffffac73",
43127 "a": "00",
43128 "b": "07",
43129 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
43130 "h": "01",
43131 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
43132 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
43133 },
43134 "secp160r1": {
43135 "p": "ffffffffffffffffffffffffffffffff7fffffff",
43136 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
43137 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
43138 "n": "0100000000000000000001f4c8f927aed3ca752257",
43139 "h": "01",
43140 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
43141 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
43142 },
43143 "secp192k1": {
43144 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
43145 "a": "00",
43146 "b": "03",
43147 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
43148 "h": "01",
43149 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
43150 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
43151 },
43152 "secp192r1": {
43153 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
43154 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
43155 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
43156 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
43157 "h": "01",
43158 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
43159 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
43160 },
43161 "secp256k1": {
43162 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
43163 "a": "00",
43164 "b": "07",
43165 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
43166 "h": "01",
43167 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
43168 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
43169 },
43170 "secp256r1": {
43171 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
43172 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
43173 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
43174 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
43175 "h": "01",
43176 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
43177 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
43178 }
43179 }
43180
43181 },{}],94:[function(require,module,exports){
43182 var Point = require('./point')
43183 var Curve = require('./curve')
43184
43185 var getCurveByName = require('./names')
43186
43187 module.exports = {
43188 Curve: Curve,
43189 Point: Point,
43190 getCurveByName: getCurveByName
43191 }
43192
43193 },{"./curve":92,"./names":95,"./point":96}],95:[function(require,module,exports){
43194 var BigInteger = require('bigi')
43195
43196 var curves = require('./curves.json')
43197 var Curve = require('./curve')
43198
43199 function getCurveByName (name) {
43200 var curve = curves[name]
43201 if (!curve) return null
43202
43203 var p = new BigInteger(curve.p, 16)
43204 var a = new BigInteger(curve.a, 16)
43205 var b = new BigInteger(curve.b, 16)
43206 var n = new BigInteger(curve.n, 16)
43207 var h = new BigInteger(curve.h, 16)
43208 var Gx = new BigInteger(curve.Gx, 16)
43209 var Gy = new BigInteger(curve.Gy, 16)
43210
43211 return new Curve(p, a, b, Gx, Gy, n, h)
43212 }
43213
43214 module.exports = getCurveByName
43215
43216 },{"./curve":92,"./curves.json":93,"bigi":39}],96:[function(require,module,exports){
43217 (function (Buffer){
43218 var assert = require('assert')
43219 var BigInteger = require('bigi')
43220
43221 var THREE = BigInteger.valueOf(3)
43222
43223 function Point (curve, x, y, z) {
43224 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
43225
43226 this.curve = curve
43227 this.x = x
43228 this.y = y
43229 this.z = z
43230 this._zInv = null
43231
43232 this.compressed = true
43233 }
43234
43235 Object.defineProperty(Point.prototype, 'zInv', {
43236 get: function () {
43237 if (this._zInv === null) {
43238 this._zInv = this.z.modInverse(this.curve.p)
43239 }
43240
43241 return this._zInv
43242 }
43243 })
43244
43245 Object.defineProperty(Point.prototype, 'affineX', {
43246 get: function () {
43247 return this.x.multiply(this.zInv).mod(this.curve.p)
43248 }
43249 })
43250
43251 Object.defineProperty(Point.prototype, 'affineY', {
43252 get: function () {
43253 return this.y.multiply(this.zInv).mod(this.curve.p)
43254 }
43255 })
43256
43257 Point.fromAffine = function (curve, x, y) {
43258 return new Point(curve, x, y, BigInteger.ONE)
43259 }
43260
43261 Point.prototype.equals = function (other) {
43262 if (other === this) return true
43263 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
43264 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
43265
43266 // u = Y2 * Z1 - Y1 * Z2
43267 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
43268
43269 if (u.signum() !== 0) return false
43270
43271 // v = X2 * Z1 - X1 * Z2
43272 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
43273
43274 return v.signum() === 0
43275 }
43276
43277 Point.prototype.negate = function () {
43278 var y = this.curve.p.subtract(this.y)
43279
43280 return new Point(this.curve, this.x, y, this.z)
43281 }
43282
43283 Point.prototype.add = function (b) {
43284 if (this.curve.isInfinity(this)) return b
43285 if (this.curve.isInfinity(b)) return this
43286
43287 var x1 = this.x
43288 var y1 = this.y
43289 var x2 = b.x
43290 var y2 = b.y
43291
43292 // u = Y2 * Z1 - Y1 * Z2
43293 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
43294 // v = X2 * Z1 - X1 * Z2
43295 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
43296
43297 if (v.signum() === 0) {
43298 if (u.signum() === 0) {
43299 return this.twice() // this == b, so double
43300 }
43301
43302 return this.curve.infinity // this = -b, so infinity
43303 }
43304
43305 var v2 = v.square()
43306 var v3 = v2.multiply(v)
43307 var x1v2 = x1.multiply(v2)
43308 var zu2 = u.square().multiply(this.z)
43309
43310 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
43311 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
43312 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
43313 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)
43314 // z3 = v^3 * z1 * z2
43315 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
43316
43317 return new Point(this.curve, x3, y3, z3)
43318 }
43319
43320 Point.prototype.twice = function () {
43321 if (this.curve.isInfinity(this)) return this
43322 if (this.y.signum() === 0) return this.curve.infinity
43323
43324 var x1 = this.x
43325 var y1 = this.y
43326
43327 var y1z1 = y1.multiply(this.z).mod(this.curve.p)
43328 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
43329 var a = this.curve.a
43330
43331 // w = 3 * x1^2 + a * z1^2
43332 var w = x1.square().multiply(THREE)
43333
43334 if (a.signum() !== 0) {
43335 w = w.add(this.z.square().multiply(a))
43336 }
43337
43338 w = w.mod(this.curve.p)
43339 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
43340 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
43341 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
43342 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
43343 // z3 = 8 * (y1 * z1)^3
43344 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
43345
43346 return new Point(this.curve, x3, y3, z3)
43347 }
43348
43349 // Simple NAF (Non-Adjacent Form) multiplication algorithm
43350 // TODO: modularize the multiplication algorithm
43351 Point.prototype.multiply = function (k) {
43352 if (this.curve.isInfinity(this)) return this
43353 if (k.signum() === 0) return this.curve.infinity
43354
43355 var e = k
43356 var h = e.multiply(THREE)
43357
43358 var neg = this.negate()
43359 var R = this
43360
43361 for (var i = h.bitLength() - 2; i > 0; --i) {
43362 var hBit = h.testBit(i)
43363 var eBit = e.testBit(i)
43364
43365 R = R.twice()
43366
43367 if (hBit !== eBit) {
43368 R = R.add(hBit ? this : neg)
43369 }
43370 }
43371
43372 return R
43373 }
43374
43375 // Compute this*j + x*k (simultaneous multiplication)
43376 Point.prototype.multiplyTwo = function (j, x, k) {
43377 var i = Math.max(j.bitLength(), k.bitLength()) - 1
43378 var R = this.curve.infinity
43379 var both = this.add(x)
43380
43381 while (i >= 0) {
43382 var jBit = j.testBit(i)
43383 var kBit = k.testBit(i)
43384
43385 R = R.twice()
43386
43387 if (jBit) {
43388 if (kBit) {
43389 R = R.add(both)
43390 } else {
43391 R = R.add(this)
43392 }
43393 } else if (kBit) {
43394 R = R.add(x)
43395 }
43396 --i
43397 }
43398
43399 return R
43400 }
43401
43402 Point.prototype.getEncoded = function (compressed) {
43403 if (compressed == null) compressed = this.compressed
43404 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
43405
43406 var x = this.affineX
43407 var y = this.affineY
43408 var byteLength = this.curve.pLength
43409 var buffer
43410
43411 // 0x02/0x03 | X
43412 if (compressed) {
43413 buffer = new Buffer(1 + byteLength)
43414 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
43415
43416 // 0x04 | X | Y
43417 } else {
43418 buffer = new Buffer(1 + byteLength + byteLength)
43419 buffer.writeUInt8(0x04, 0)
43420
43421 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
43422 }
43423
43424 x.toBuffer(byteLength).copy(buffer, 1)
43425
43426 return buffer
43427 }
43428
43429 Point.decodeFrom = function (curve, buffer) {
43430 var type = buffer.readUInt8(0)
43431 var compressed = (type !== 4)
43432
43433 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
43434 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
43435
43436 var Q
43437 if (compressed) {
43438 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
43439 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
43440
43441 var isOdd = (type === 0x03)
43442 Q = curve.pointFromX(isOdd, x)
43443 } else {
43444 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
43445
43446 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
43447 Q = Point.fromAffine(curve, x, y)
43448 }
43449
43450 Q.compressed = compressed
43451 return Q
43452 }
43453
43454 Point.prototype.toString = function () {
43455 if (this.curve.isInfinity(this)) return '(INFINITY)'
43456
43457 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
43458 }
43459
43460 module.exports = Point
43461
43462 }).call(this,require("buffer").Buffer)
43463 },{"assert":1,"bigi":39,"buffer":5}],97:[function(require,module,exports){
43464 'use strict';
43465
43466 var elliptic = exports;
43467
43468 elliptic.version = require('../package.json').version;
43469 elliptic.utils = require('./elliptic/utils');
43470 elliptic.rand = require('brorand');
43471 elliptic.curve = require('./elliptic/curve');
43472 elliptic.curves = require('./elliptic/curves');
43473
43474 // Protocols
43475 elliptic.ec = require('./elliptic/ec');
43476 elliptic.eddsa = require('./elliptic/eddsa');
43477
43478 },{"../package.json":112,"./elliptic/curve":100,"./elliptic/curves":103,"./elliptic/ec":104,"./elliptic/eddsa":107,"./elliptic/utils":111,"brorand":82}],98:[function(require,module,exports){
43479 'use strict';
43480
43481 var BN = require('bn.js');
43482 var elliptic = require('../../elliptic');
43483 var utils = elliptic.utils;
43484 var getNAF = utils.getNAF;
43485 var getJSF = utils.getJSF;
43486 var assert = utils.assert;
43487
43488 function BaseCurve(type, conf) {
43489 this.type = type;
43490 this.p = new BN(conf.p, 16);
43491
43492 // Use Montgomery, when there is no fast reduction for the prime
43493 this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
43494
43495 // Useful for many curves
43496 this.zero = new BN(0).toRed(this.red);
43497 this.one = new BN(1).toRed(this.red);
43498 this.two = new BN(2).toRed(this.red);
43499
43500 // Curve configuration, optional
43501 this.n = conf.n && new BN(conf.n, 16);
43502 this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
43503
43504 // Temporary arrays
43505 this._wnafT1 = new Array(4);
43506 this._wnafT2 = new Array(4);
43507 this._wnafT3 = new Array(4);
43508 this._wnafT4 = new Array(4);
43509
43510 // Generalized Greg Maxwell's trick
43511 var adjustCount = this.n && this.p.div(this.n);
43512 if (!adjustCount || adjustCount.cmpn(100) > 0) {
43513 this.redN = null;
43514 } else {
43515 this._maxwellTrick = true;
43516 this.redN = this.n.toRed(this.red);
43517 }
43518 }
43519 module.exports = BaseCurve;
43520
43521 BaseCurve.prototype.point = function point() {
43522 throw new Error('Not implemented');
43523 };
43524
43525 BaseCurve.prototype.validate = function validate() {
43526 throw new Error('Not implemented');
43527 };
43528
43529 BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
43530 assert(p.precomputed);
43531 var doubles = p._getDoubles();
43532
43533 var naf = getNAF(k, 1);
43534 var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);
43535 I /= 3;
43536
43537 // Translate into more windowed form
43538 var repr = [];
43539 for (var j = 0; j < naf.length; j += doubles.step) {
43540 var nafW = 0;
43541 for (var k = j + doubles.step - 1; k >= j; k--)
43542 nafW = (nafW << 1) + naf[k];
43543 repr.push(nafW);
43544 }
43545
43546 var a = this.jpoint(null, null, null);
43547 var b = this.jpoint(null, null, null);
43548 for (var i = I; i > 0; i--) {
43549 for (var j = 0; j < repr.length; j++) {
43550 var nafW = repr[j];
43551 if (nafW === i)
43552 b = b.mixedAdd(doubles.points[j]);
43553 else if (nafW === -i)
43554 b = b.mixedAdd(doubles.points[j].neg());
43555 }
43556 a = a.add(b);
43557 }
43558 return a.toP();
43559 };
43560
43561 BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
43562 var w = 4;
43563
43564 // Precompute window
43565 var nafPoints = p._getNAFPoints(w);
43566 w = nafPoints.wnd;
43567 var wnd = nafPoints.points;
43568
43569 // Get NAF form
43570 var naf = getNAF(k, w);
43571
43572 // Add `this`*(N+1) for every w-NAF index
43573 var acc = this.jpoint(null, null, null);
43574 for (var i = naf.length - 1; i >= 0; i--) {
43575 // Count zeroes
43576 for (var k = 0; i >= 0 && naf[i] === 0; i--)
43577 k++;
43578 if (i >= 0)
43579 k++;
43580 acc = acc.dblp(k);
43581
43582 if (i < 0)
43583 break;
43584 var z = naf[i];
43585 assert(z !== 0);
43586 if (p.type === 'affine') {
43587 // J +- P
43588 if (z > 0)
43589 acc = acc.mixedAdd(wnd[(z - 1) >> 1]);
43590 else
43591 acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());
43592 } else {
43593 // J +- J
43594 if (z > 0)
43595 acc = acc.add(wnd[(z - 1) >> 1]);
43596 else
43597 acc = acc.add(wnd[(-z - 1) >> 1].neg());
43598 }
43599 }
43600 return p.type === 'affine' ? acc.toP() : acc;
43601 };
43602
43603 BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,
43604 points,
43605 coeffs,
43606 len,
43607 jacobianResult) {
43608 var wndWidth = this._wnafT1;
43609 var wnd = this._wnafT2;
43610 var naf = this._wnafT3;
43611
43612 // Fill all arrays
43613 var max = 0;
43614 for (var i = 0; i < len; i++) {
43615 var p = points[i];
43616 var nafPoints = p._getNAFPoints(defW);
43617 wndWidth[i] = nafPoints.wnd;
43618 wnd[i] = nafPoints.points;
43619 }
43620
43621 // Comb small window NAFs
43622 for (var i = len - 1; i >= 1; i -= 2) {
43623 var a = i - 1;
43624 var b = i;
43625 if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
43626 naf[a] = getNAF(coeffs[a], wndWidth[a]);
43627 naf[b] = getNAF(coeffs[b], wndWidth[b]);
43628 max = Math.max(naf[a].length, max);
43629 max = Math.max(naf[b].length, max);
43630 continue;
43631 }
43632
43633 var comb = [
43634 points[a], /* 1 */
43635 null, /* 3 */
43636 null, /* 5 */
43637 points[b] /* 7 */
43638 ];
43639
43640 // Try to avoid Projective points, if possible
43641 if (points[a].y.cmp(points[b].y) === 0) {
43642 comb[1] = points[a].add(points[b]);
43643 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
43644 } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
43645 comb[1] = points[a].toJ().mixedAdd(points[b]);
43646 comb[2] = points[a].add(points[b].neg());
43647 } else {
43648 comb[1] = points[a].toJ().mixedAdd(points[b]);
43649 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
43650 }
43651
43652 var index = [
43653 -3, /* -1 -1 */
43654 -1, /* -1 0 */
43655 -5, /* -1 1 */
43656 -7, /* 0 -1 */
43657 0, /* 0 0 */
43658 7, /* 0 1 */
43659 5, /* 1 -1 */
43660 1, /* 1 0 */
43661 3 /* 1 1 */
43662 ];
43663
43664 var jsf = getJSF(coeffs[a], coeffs[b]);
43665 max = Math.max(jsf[0].length, max);
43666 naf[a] = new Array(max);
43667 naf[b] = new Array(max);
43668 for (var j = 0; j < max; j++) {
43669 var ja = jsf[0][j] | 0;
43670 var jb = jsf[1][j] | 0;
43671
43672 naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
43673 naf[b][j] = 0;
43674 wnd[a] = comb;
43675 }
43676 }
43677
43678 var acc = this.jpoint(null, null, null);
43679 var tmp = this._wnafT4;
43680 for (var i = max; i >= 0; i--) {
43681 var k = 0;
43682
43683 while (i >= 0) {
43684 var zero = true;
43685 for (var j = 0; j < len; j++) {
43686 tmp[j] = naf[j][i] | 0;
43687 if (tmp[j] !== 0)
43688 zero = false;
43689 }
43690 if (!zero)
43691 break;
43692 k++;
43693 i--;
43694 }
43695 if (i >= 0)
43696 k++;
43697 acc = acc.dblp(k);
43698 if (i < 0)
43699 break;
43700
43701 for (var j = 0; j < len; j++) {
43702 var z = tmp[j];
43703 var p;
43704 if (z === 0)
43705 continue;
43706 else if (z > 0)
43707 p = wnd[j][(z - 1) >> 1];
43708 else if (z < 0)
43709 p = wnd[j][(-z - 1) >> 1].neg();
43710
43711 if (p.type === 'affine')
43712 acc = acc.mixedAdd(p);
43713 else
43714 acc = acc.add(p);
43715 }
43716 }
43717 // Zeroify references
43718 for (var i = 0; i < len; i++)
43719 wnd[i] = null;
43720
43721 if (jacobianResult)
43722 return acc;
43723 else
43724 return acc.toP();
43725 };
43726
43727 function BasePoint(curve, type) {
43728 this.curve = curve;
43729 this.type = type;
43730 this.precomputed = null;
43731 }
43732 BaseCurve.BasePoint = BasePoint;
43733
43734 BasePoint.prototype.eq = function eq(/*other*/) {
43735 throw new Error('Not implemented');
43736 };
43737
43738 BasePoint.prototype.validate = function validate() {
43739 return this.curve.validate(this);
43740 };
43741
43742 BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
43743 bytes = utils.toArray(bytes, enc);
43744
43745 var len = this.p.byteLength();
43746
43747 // uncompressed, hybrid-odd, hybrid-even
43748 if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&
43749 bytes.length - 1 === 2 * len) {
43750 if (bytes[0] === 0x06)
43751 assert(bytes[bytes.length - 1] % 2 === 0);
43752 else if (bytes[0] === 0x07)
43753 assert(bytes[bytes.length - 1] % 2 === 1);
43754
43755 var res = this.point(bytes.slice(1, 1 + len),
43756 bytes.slice(1 + len, 1 + 2 * len));
43757
43758 return res;
43759 } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&
43760 bytes.length - 1 === len) {
43761 return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
43762 }
43763 throw new Error('Unknown point format');
43764 };
43765
43766 BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
43767 return this.encode(enc, true);
43768 };
43769
43770 BasePoint.prototype._encode = function _encode(compact) {
43771 var len = this.curve.p.byteLength();
43772 var x = this.getX().toArray('be', len);
43773
43774 if (compact)
43775 return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);
43776
43777 return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;
43778 };
43779
43780 BasePoint.prototype.encode = function encode(enc, compact) {
43781 return utils.encode(this._encode(compact), enc);
43782 };
43783
43784 BasePoint.prototype.precompute = function precompute(power) {
43785 if (this.precomputed)
43786 return this;
43787
43788 var precomputed = {
43789 doubles: null,
43790 naf: null,
43791 beta: null
43792 };
43793 precomputed.naf = this._getNAFPoints(8);
43794 precomputed.doubles = this._getDoubles(4, power);
43795 precomputed.beta = this._getBeta();
43796 this.precomputed = precomputed;
43797
43798 return this;
43799 };
43800
43801 BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
43802 if (!this.precomputed)
43803 return false;
43804
43805 var doubles = this.precomputed.doubles;
43806 if (!doubles)
43807 return false;
43808
43809 return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
43810 };
43811
43812 BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
43813 if (this.precomputed && this.precomputed.doubles)
43814 return this.precomputed.doubles;
43815
43816 var doubles = [ this ];
43817 var acc = this;
43818 for (var i = 0; i < power; i += step) {
43819 for (var j = 0; j < step; j++)
43820 acc = acc.dbl();
43821 doubles.push(acc);
43822 }
43823 return {
43824 step: step,
43825 points: doubles
43826 };
43827 };
43828
43829 BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
43830 if (this.precomputed && this.precomputed.naf)
43831 return this.precomputed.naf;
43832
43833 var res = [ this ];
43834 var max = (1 << wnd) - 1;
43835 var dbl = max === 1 ? null : this.dbl();
43836 for (var i = 1; i < max; i++)
43837 res[i] = res[i - 1].add(dbl);
43838 return {
43839 wnd: wnd,
43840 points: res
43841 };
43842 };
43843
43844 BasePoint.prototype._getBeta = function _getBeta() {
43845 return null;
43846 };
43847
43848 BasePoint.prototype.dblp = function dblp(k) {
43849 var r = this;
43850 for (var i = 0; i < k; i++)
43851 r = r.dbl();
43852 return r;
43853 };
43854
43855 },{"../../elliptic":97,"bn.js":81}],99:[function(require,module,exports){
43856 'use strict';
43857
43858 var curve = require('../curve');
43859 var elliptic = require('../../elliptic');
43860 var BN = require('bn.js');
43861 var inherits = require('inherits');
43862 var Base = curve.base;
43863
43864 var assert = elliptic.utils.assert;
43865
43866 function EdwardsCurve(conf) {
43867 // NOTE: Important as we are creating point in Base.call()
43868 this.twisted = (conf.a | 0) !== 1;
43869 this.mOneA = this.twisted && (conf.a | 0) === -1;
43870 this.extended = this.mOneA;
43871
43872 Base.call(this, 'edwards', conf);
43873
43874 this.a = new BN(conf.a, 16).umod(this.red.m);
43875 this.a = this.a.toRed(this.red);
43876 this.c = new BN(conf.c, 16).toRed(this.red);
43877 this.c2 = this.c.redSqr();
43878 this.d = new BN(conf.d, 16).toRed(this.red);
43879 this.dd = this.d.redAdd(this.d);
43880
43881 assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
43882 this.oneC = (conf.c | 0) === 1;
43883 }
43884 inherits(EdwardsCurve, Base);
43885 module.exports = EdwardsCurve;
43886
43887 EdwardsCurve.prototype._mulA = function _mulA(num) {
43888 if (this.mOneA)
43889 return num.redNeg();
43890 else
43891 return this.a.redMul(num);
43892 };
43893
43894 EdwardsCurve.prototype._mulC = function _mulC(num) {
43895 if (this.oneC)
43896 return num;
43897 else
43898 return this.c.redMul(num);
43899 };
43900
43901 // Just for compatibility with Short curve
43902 EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
43903 return this.point(x, y, z, t);
43904 };
43905
43906 EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
43907 x = new BN(x, 16);
43908 if (!x.red)
43909 x = x.toRed(this.red);
43910
43911 var x2 = x.redSqr();
43912 var rhs = this.c2.redSub(this.a.redMul(x2));
43913 var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
43914
43915 var y2 = rhs.redMul(lhs.redInvm());
43916 var y = y2.redSqrt();
43917 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
43918 throw new Error('invalid point');
43919
43920 var isOdd = y.fromRed().isOdd();
43921 if (odd && !isOdd || !odd && isOdd)
43922 y = y.redNeg();
43923
43924 return this.point(x, y);
43925 };
43926
43927 EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
43928 y = new BN(y, 16);
43929 if (!y.red)
43930 y = y.toRed(this.red);
43931
43932 // x^2 = (y^2 - 1) / (d y^2 + 1)
43933 var y2 = y.redSqr();
43934 var lhs = y2.redSub(this.one);
43935 var rhs = y2.redMul(this.d).redAdd(this.one);
43936 var x2 = lhs.redMul(rhs.redInvm());
43937
43938 if (x2.cmp(this.zero) === 0) {
43939 if (odd)
43940 throw new Error('invalid point');
43941 else
43942 return this.point(this.zero, y);
43943 }
43944
43945 var x = x2.redSqrt();
43946 if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
43947 throw new Error('invalid point');
43948
43949 if (x.isOdd() !== odd)
43950 x = x.redNeg();
43951
43952 return this.point(x, y);
43953 };
43954
43955 EdwardsCurve.prototype.validate = function validate(point) {
43956 if (point.isInfinity())
43957 return true;
43958
43959 // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)
43960 point.normalize();
43961
43962 var x2 = point.x.redSqr();
43963 var y2 = point.y.redSqr();
43964 var lhs = x2.redMul(this.a).redAdd(y2);
43965 var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
43966
43967 return lhs.cmp(rhs) === 0;
43968 };
43969
43970 function Point(curve, x, y, z, t) {
43971 Base.BasePoint.call(this, curve, 'projective');
43972 if (x === null && y === null && z === null) {
43973 this.x = this.curve.zero;
43974 this.y = this.curve.one;
43975 this.z = this.curve.one;
43976 this.t = this.curve.zero;
43977 this.zOne = true;
43978 } else {
43979 this.x = new BN(x, 16);
43980 this.y = new BN(y, 16);
43981 this.z = z ? new BN(z, 16) : this.curve.one;
43982 this.t = t && new BN(t, 16);
43983 if (!this.x.red)
43984 this.x = this.x.toRed(this.curve.red);
43985 if (!this.y.red)
43986 this.y = this.y.toRed(this.curve.red);
43987 if (!this.z.red)
43988 this.z = this.z.toRed(this.curve.red);
43989 if (this.t && !this.t.red)
43990 this.t = this.t.toRed(this.curve.red);
43991 this.zOne = this.z === this.curve.one;
43992
43993 // Use extended coordinates
43994 if (this.curve.extended && !this.t) {
43995 this.t = this.x.redMul(this.y);
43996 if (!this.zOne)
43997 this.t = this.t.redMul(this.z.redInvm());
43998 }
43999 }
44000 }
44001 inherits(Point, Base.BasePoint);
44002
44003 EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
44004 return Point.fromJSON(this, obj);
44005 };
44006
44007 EdwardsCurve.prototype.point = function point(x, y, z, t) {
44008 return new Point(this, x, y, z, t);
44009 };
44010
44011 Point.fromJSON = function fromJSON(curve, obj) {
44012 return new Point(curve, obj[0], obj[1], obj[2]);
44013 };
44014
44015 Point.prototype.inspect = function inspect() {
44016 if (this.isInfinity())
44017 return '<EC Point Infinity>';
44018 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
44019 ' y: ' + this.y.fromRed().toString(16, 2) +
44020 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
44021 };
44022
44023 Point.prototype.isInfinity = function isInfinity() {
44024 // XXX This code assumes that zero is always zero in red
44025 return this.x.cmpn(0) === 0 &&
44026 this.y.cmp(this.z) === 0;
44027 };
44028
44029 Point.prototype._extDbl = function _extDbl() {
44030 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
44031 // #doubling-dbl-2008-hwcd
44032 // 4M + 4S
44033
44034 // A = X1^2
44035 var a = this.x.redSqr();
44036 // B = Y1^2
44037 var b = this.y.redSqr();
44038 // C = 2 * Z1^2
44039 var c = this.z.redSqr();
44040 c = c.redIAdd(c);
44041 // D = a * A
44042 var d = this.curve._mulA(a);
44043 // E = (X1 + Y1)^2 - A - B
44044 var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
44045 // G = D + B
44046 var g = d.redAdd(b);
44047 // F = G - C
44048 var f = g.redSub(c);
44049 // H = D - B
44050 var h = d.redSub(b);
44051 // X3 = E * F
44052 var nx = e.redMul(f);
44053 // Y3 = G * H
44054 var ny = g.redMul(h);
44055 // T3 = E * H
44056 var nt = e.redMul(h);
44057 // Z3 = F * G
44058 var nz = f.redMul(g);
44059 return this.curve.point(nx, ny, nz, nt);
44060 };
44061
44062 Point.prototype._projDbl = function _projDbl() {
44063 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
44064 // #doubling-dbl-2008-bbjlp
44065 // #doubling-dbl-2007-bl
44066 // and others
44067 // Generally 3M + 4S or 2M + 4S
44068
44069 // B = (X1 + Y1)^2
44070 var b = this.x.redAdd(this.y).redSqr();
44071 // C = X1^2
44072 var c = this.x.redSqr();
44073 // D = Y1^2
44074 var d = this.y.redSqr();
44075
44076 var nx;
44077 var ny;
44078 var nz;
44079 if (this.curve.twisted) {
44080 // E = a * C
44081 var e = this.curve._mulA(c);
44082 // F = E + D
44083 var f = e.redAdd(d);
44084 if (this.zOne) {
44085 // X3 = (B - C - D) * (F - 2)
44086 nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
44087 // Y3 = F * (E - D)
44088 ny = f.redMul(e.redSub(d));
44089 // Z3 = F^2 - 2 * F
44090 nz = f.redSqr().redSub(f).redSub(f);
44091 } else {
44092 // H = Z1^2
44093 var h = this.z.redSqr();
44094 // J = F - 2 * H
44095 var j = f.redSub(h).redISub(h);
44096 // X3 = (B-C-D)*J
44097 nx = b.redSub(c).redISub(d).redMul(j);
44098 // Y3 = F * (E - D)
44099 ny = f.redMul(e.redSub(d));
44100 // Z3 = F * J
44101 nz = f.redMul(j);
44102 }
44103 } else {
44104 // E = C + D
44105 var e = c.redAdd(d);
44106 // H = (c * Z1)^2
44107 var h = this.curve._mulC(this.c.redMul(this.z)).redSqr();
44108 // J = E - 2 * H
44109 var j = e.redSub(h).redSub(h);
44110 // X3 = c * (B - E) * J
44111 nx = this.curve._mulC(b.redISub(e)).redMul(j);
44112 // Y3 = c * E * (C - D)
44113 ny = this.curve._mulC(e).redMul(c.redISub(d));
44114 // Z3 = E * J
44115 nz = e.redMul(j);
44116 }
44117 return this.curve.point(nx, ny, nz);
44118 };
44119
44120 Point.prototype.dbl = function dbl() {
44121 if (this.isInfinity())
44122 return this;
44123
44124 // Double in extended coordinates
44125 if (this.curve.extended)
44126 return this._extDbl();
44127 else
44128 return this._projDbl();
44129 };
44130
44131 Point.prototype._extAdd = function _extAdd(p) {
44132 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
44133 // #addition-add-2008-hwcd-3
44134 // 8M
44135
44136 // A = (Y1 - X1) * (Y2 - X2)
44137 var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
44138 // B = (Y1 + X1) * (Y2 + X2)
44139 var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
44140 // C = T1 * k * T2
44141 var c = this.t.redMul(this.curve.dd).redMul(p.t);
44142 // D = Z1 * 2 * Z2
44143 var d = this.z.redMul(p.z.redAdd(p.z));
44144 // E = B - A
44145 var e = b.redSub(a);
44146 // F = D - C
44147 var f = d.redSub(c);
44148 // G = D + C
44149 var g = d.redAdd(c);
44150 // H = B + A
44151 var h = b.redAdd(a);
44152 // X3 = E * F
44153 var nx = e.redMul(f);
44154 // Y3 = G * H
44155 var ny = g.redMul(h);
44156 // T3 = E * H
44157 var nt = e.redMul(h);
44158 // Z3 = F * G
44159 var nz = f.redMul(g);
44160 return this.curve.point(nx, ny, nz, nt);
44161 };
44162
44163 Point.prototype._projAdd = function _projAdd(p) {
44164 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
44165 // #addition-add-2008-bbjlp
44166 // #addition-add-2007-bl
44167 // 10M + 1S
44168
44169 // A = Z1 * Z2
44170 var a = this.z.redMul(p.z);
44171 // B = A^2
44172 var b = a.redSqr();
44173 // C = X1 * X2
44174 var c = this.x.redMul(p.x);
44175 // D = Y1 * Y2
44176 var d = this.y.redMul(p.y);
44177 // E = d * C * D
44178 var e = this.curve.d.redMul(c).redMul(d);
44179 // F = B - E
44180 var f = b.redSub(e);
44181 // G = B + E
44182 var g = b.redAdd(e);
44183 // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)
44184 var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
44185 var nx = a.redMul(f).redMul(tmp);
44186 var ny;
44187 var nz;
44188 if (this.curve.twisted) {
44189 // Y3 = A * G * (D - a * C)
44190 ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
44191 // Z3 = F * G
44192 nz = f.redMul(g);
44193 } else {
44194 // Y3 = A * G * (D - C)
44195 ny = a.redMul(g).redMul(d.redSub(c));
44196 // Z3 = c * F * G
44197 nz = this.curve._mulC(f).redMul(g);
44198 }
44199 return this.curve.point(nx, ny, nz);
44200 };
44201
44202 Point.prototype.add = function add(p) {
44203 if (this.isInfinity())
44204 return p;
44205 if (p.isInfinity())
44206 return this;
44207
44208 if (this.curve.extended)
44209 return this._extAdd(p);
44210 else
44211 return this._projAdd(p);
44212 };
44213
44214 Point.prototype.mul = function mul(k) {
44215 if (this._hasDoubles(k))
44216 return this.curve._fixedNafMul(this, k);
44217 else
44218 return this.curve._wnafMul(this, k);
44219 };
44220
44221 Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
44222 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);
44223 };
44224
44225 Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
44226 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);
44227 };
44228
44229 Point.prototype.normalize = function normalize() {
44230 if (this.zOne)
44231 return this;
44232
44233 // Normalize coordinates
44234 var zi = this.z.redInvm();
44235 this.x = this.x.redMul(zi);
44236 this.y = this.y.redMul(zi);
44237 if (this.t)
44238 this.t = this.t.redMul(zi);
44239 this.z = this.curve.one;
44240 this.zOne = true;
44241 return this;
44242 };
44243
44244 Point.prototype.neg = function neg() {
44245 return this.curve.point(this.x.redNeg(),
44246 this.y,
44247 this.z,
44248 this.t && this.t.redNeg());
44249 };
44250
44251 Point.prototype.getX = function getX() {
44252 this.normalize();
44253 return this.x.fromRed();
44254 };
44255
44256 Point.prototype.getY = function getY() {
44257 this.normalize();
44258 return this.y.fromRed();
44259 };
44260
44261 Point.prototype.eq = function eq(other) {
44262 return this === other ||
44263 this.getX().cmp(other.getX()) === 0 &&
44264 this.getY().cmp(other.getY()) === 0;
44265 };
44266
44267 Point.prototype.eqXToP = function eqXToP(x) {
44268 var rx = x.toRed(this.curve.red).redMul(this.z);
44269 if (this.x.cmp(rx) === 0)
44270 return true;
44271
44272 var xc = x.clone();
44273 var t = this.curve.redN.redMul(this.z);
44274 for (;;) {
44275 xc.iadd(this.curve.n);
44276 if (xc.cmp(this.curve.p) >= 0)
44277 return false;
44278
44279 rx.redIAdd(t);
44280 if (this.x.cmp(rx) === 0)
44281 return true;
44282 }
44283 return false;
44284 };
44285
44286 // Compatibility with BaseCurve
44287 Point.prototype.toP = Point.prototype.normalize;
44288 Point.prototype.mixedAdd = Point.prototype.add;
44289
44290 },{"../../elliptic":97,"../curve":100,"bn.js":81,"inherits":121}],100:[function(require,module,exports){
44291 'use strict';
44292
44293 var curve = exports;
44294
44295 curve.base = require('./base');
44296 curve.short = require('./short');
44297 curve.mont = require('./mont');
44298 curve.edwards = require('./edwards');
44299
44300 },{"./base":98,"./edwards":99,"./mont":101,"./short":102}],101:[function(require,module,exports){
44301 'use strict';
44302
44303 var curve = require('../curve');
44304 var BN = require('bn.js');
44305 var inherits = require('inherits');
44306 var Base = curve.base;
44307
44308 var elliptic = require('../../elliptic');
44309 var utils = elliptic.utils;
44310
44311 function MontCurve(conf) {
44312 Base.call(this, 'mont', conf);
44313
44314 this.a = new BN(conf.a, 16).toRed(this.red);
44315 this.b = new BN(conf.b, 16).toRed(this.red);
44316 this.i4 = new BN(4).toRed(this.red).redInvm();
44317 this.two = new BN(2).toRed(this.red);
44318 this.a24 = this.i4.redMul(this.a.redAdd(this.two));
44319 }
44320 inherits(MontCurve, Base);
44321 module.exports = MontCurve;
44322
44323 MontCurve.prototype.validate = function validate(point) {
44324 var x = point.normalize().x;
44325 var x2 = x.redSqr();
44326 var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
44327 var y = rhs.redSqrt();
44328
44329 return y.redSqr().cmp(rhs) === 0;
44330 };
44331
44332 function Point(curve, x, z) {
44333 Base.BasePoint.call(this, curve, 'projective');
44334 if (x === null && z === null) {
44335 this.x = this.curve.one;
44336 this.z = this.curve.zero;
44337 } else {
44338 this.x = new BN(x, 16);
44339 this.z = new BN(z, 16);
44340 if (!this.x.red)
44341 this.x = this.x.toRed(this.curve.red);
44342 if (!this.z.red)
44343 this.z = this.z.toRed(this.curve.red);
44344 }
44345 }
44346 inherits(Point, Base.BasePoint);
44347
44348 MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
44349 return this.point(utils.toArray(bytes, enc), 1);
44350 };
44351
44352 MontCurve.prototype.point = function point(x, z) {
44353 return new Point(this, x, z);
44354 };
44355
44356 MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
44357 return Point.fromJSON(this, obj);
44358 };
44359
44360 Point.prototype.precompute = function precompute() {
44361 // No-op
44362 };
44363
44364 Point.prototype._encode = function _encode() {
44365 return this.getX().toArray('be', this.curve.p.byteLength());
44366 };
44367
44368 Point.fromJSON = function fromJSON(curve, obj) {
44369 return new Point(curve, obj[0], obj[1] || curve.one);
44370 };
44371
44372 Point.prototype.inspect = function inspect() {
44373 if (this.isInfinity())
44374 return '<EC Point Infinity>';
44375 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
44376 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
44377 };
44378
44379 Point.prototype.isInfinity = function isInfinity() {
44380 // XXX This code assumes that zero is always zero in red
44381 return this.z.cmpn(0) === 0;
44382 };
44383
44384 Point.prototype.dbl = function dbl() {
44385 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3
44386 // 2M + 2S + 4A
44387
44388 // A = X1 + Z1
44389 var a = this.x.redAdd(this.z);
44390 // AA = A^2
44391 var aa = a.redSqr();
44392 // B = X1 - Z1
44393 var b = this.x.redSub(this.z);
44394 // BB = B^2
44395 var bb = b.redSqr();
44396 // C = AA - BB
44397 var c = aa.redSub(bb);
44398 // X3 = AA * BB
44399 var nx = aa.redMul(bb);
44400 // Z3 = C * (BB + A24 * C)
44401 var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
44402 return this.curve.point(nx, nz);
44403 };
44404
44405 Point.prototype.add = function add() {
44406 throw new Error('Not supported on Montgomery curve');
44407 };
44408
44409 Point.prototype.diffAdd = function diffAdd(p, diff) {
44410 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3
44411 // 4M + 2S + 6A
44412
44413 // A = X2 + Z2
44414 var a = this.x.redAdd(this.z);
44415 // B = X2 - Z2
44416 var b = this.x.redSub(this.z);
44417 // C = X3 + Z3
44418 var c = p.x.redAdd(p.z);
44419 // D = X3 - Z3
44420 var d = p.x.redSub(p.z);
44421 // DA = D * A
44422 var da = d.redMul(a);
44423 // CB = C * B
44424 var cb = c.redMul(b);
44425 // X5 = Z1 * (DA + CB)^2
44426 var nx = diff.z.redMul(da.redAdd(cb).redSqr());
44427 // Z5 = X1 * (DA - CB)^2
44428 var nz = diff.x.redMul(da.redISub(cb).redSqr());
44429 return this.curve.point(nx, nz);
44430 };
44431
44432 Point.prototype.mul = function mul(k) {
44433 var t = k.clone();
44434 var a = this; // (N / 2) * Q + Q
44435 var b = this.curve.point(null, null); // (N / 2) * Q
44436 var c = this; // Q
44437
44438 for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
44439 bits.push(t.andln(1));
44440
44441 for (var i = bits.length - 1; i >= 0; i--) {
44442 if (bits[i] === 0) {
44443 // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q
44444 a = a.diffAdd(b, c);
44445 // N * Q = 2 * ((N / 2) * Q + Q))
44446 b = b.dbl();
44447 } else {
44448 // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)
44449 b = a.diffAdd(b, c);
44450 // N * Q + Q = 2 * ((N / 2) * Q + Q)
44451 a = a.dbl();
44452 }
44453 }
44454 return b;
44455 };
44456
44457 Point.prototype.mulAdd = function mulAdd() {
44458 throw new Error('Not supported on Montgomery curve');
44459 };
44460
44461 Point.prototype.jumlAdd = function jumlAdd() {
44462 throw new Error('Not supported on Montgomery curve');
44463 };
44464
44465 Point.prototype.eq = function eq(other) {
44466 return this.getX().cmp(other.getX()) === 0;
44467 };
44468
44469 Point.prototype.normalize = function normalize() {
44470 this.x = this.x.redMul(this.z.redInvm());
44471 this.z = this.curve.one;
44472 return this;
44473 };
44474
44475 Point.prototype.getX = function getX() {
44476 // Normalize coordinates
44477 this.normalize();
44478
44479 return this.x.fromRed();
44480 };
44481
44482 },{"../../elliptic":97,"../curve":100,"bn.js":81,"inherits":121}],102:[function(require,module,exports){
44483 'use strict';
44484
44485 var curve = require('../curve');
44486 var elliptic = require('../../elliptic');
44487 var BN = require('bn.js');
44488 var inherits = require('inherits');
44489 var Base = curve.base;
44490
44491 var assert = elliptic.utils.assert;
44492
44493 function ShortCurve(conf) {
44494 Base.call(this, 'short', conf);
44495
44496 this.a = new BN(conf.a, 16).toRed(this.red);
44497 this.b = new BN(conf.b, 16).toRed(this.red);
44498 this.tinv = this.two.redInvm();
44499
44500 this.zeroA = this.a.fromRed().cmpn(0) === 0;
44501 this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
44502
44503 // If the curve is endomorphic, precalculate beta and lambda
44504 this.endo = this._getEndomorphism(conf);
44505 this._endoWnafT1 = new Array(4);
44506 this._endoWnafT2 = new Array(4);
44507 }
44508 inherits(ShortCurve, Base);
44509 module.exports = ShortCurve;
44510
44511 ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
44512 // No efficient endomorphism
44513 if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
44514 return;
44515
44516 // Compute beta and lambda, that lambda * P = (beta * Px; Py)
44517 var beta;
44518 var lambda;
44519 if (conf.beta) {
44520 beta = new BN(conf.beta, 16).toRed(this.red);
44521 } else {
44522 var betas = this._getEndoRoots(this.p);
44523 // Choose the smallest beta
44524 beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
44525 beta = beta.toRed(this.red);
44526 }
44527 if (conf.lambda) {
44528 lambda = new BN(conf.lambda, 16);
44529 } else {
44530 // Choose the lambda that is matching selected beta
44531 var lambdas = this._getEndoRoots(this.n);
44532 if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
44533 lambda = lambdas[0];
44534 } else {
44535 lambda = lambdas[1];
44536 assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
44537 }
44538 }
44539
44540 // Get basis vectors, used for balanced length-two representation
44541 var basis;
44542 if (conf.basis) {
44543 basis = conf.basis.map(function(vec) {
44544 return {
44545 a: new BN(vec.a, 16),
44546 b: new BN(vec.b, 16)
44547 };
44548 });
44549 } else {
44550 basis = this._getEndoBasis(lambda);
44551 }
44552
44553 return {
44554 beta: beta,
44555 lambda: lambda,
44556 basis: basis
44557 };
44558 };
44559
44560 ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
44561 // Find roots of for x^2 + x + 1 in F
44562 // Root = (-1 +- Sqrt(-3)) / 2
44563 //
44564 var red = num === this.p ? this.red : BN.mont(num);
44565 var tinv = new BN(2).toRed(red).redInvm();
44566 var ntinv = tinv.redNeg();
44567
44568 var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
44569
44570 var l1 = ntinv.redAdd(s).fromRed();
44571 var l2 = ntinv.redSub(s).fromRed();
44572 return [ l1, l2 ];
44573 };
44574
44575 ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
44576 // aprxSqrt >= sqrt(this.n)
44577 var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
44578
44579 // 3.74
44580 // Run EGCD, until r(L + 1) < aprxSqrt
44581 var u = lambda;
44582 var v = this.n.clone();
44583 var x1 = new BN(1);
44584 var y1 = new BN(0);
44585 var x2 = new BN(0);
44586 var y2 = new BN(1);
44587
44588 // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
44589 var a0;
44590 var b0;
44591 // First vector
44592 var a1;
44593 var b1;
44594 // Second vector
44595 var a2;
44596 var b2;
44597
44598 var prevR;
44599 var i = 0;
44600 var r;
44601 var x;
44602 while (u.cmpn(0) !== 0) {
44603 var q = v.div(u);
44604 r = v.sub(q.mul(u));
44605 x = x2.sub(q.mul(x1));
44606 var y = y2.sub(q.mul(y1));
44607
44608 if (!a1 && r.cmp(aprxSqrt) < 0) {
44609 a0 = prevR.neg();
44610 b0 = x1;
44611 a1 = r.neg();
44612 b1 = x;
44613 } else if (a1 && ++i === 2) {
44614 break;
44615 }
44616 prevR = r;
44617
44618 v = u;
44619 u = r;
44620 x2 = x1;
44621 x1 = x;
44622 y2 = y1;
44623 y1 = y;
44624 }
44625 a2 = r.neg();
44626 b2 = x;
44627
44628 var len1 = a1.sqr().add(b1.sqr());
44629 var len2 = a2.sqr().add(b2.sqr());
44630 if (len2.cmp(len1) >= 0) {
44631 a2 = a0;
44632 b2 = b0;
44633 }
44634
44635 // Normalize signs
44636 if (a1.negative) {
44637 a1 = a1.neg();
44638 b1 = b1.neg();
44639 }
44640 if (a2.negative) {
44641 a2 = a2.neg();
44642 b2 = b2.neg();
44643 }
44644
44645 return [
44646 { a: a1, b: b1 },
44647 { a: a2, b: b2 }
44648 ];
44649 };
44650
44651 ShortCurve.prototype._endoSplit = function _endoSplit(k) {
44652 var basis = this.endo.basis;
44653 var v1 = basis[0];
44654 var v2 = basis[1];
44655
44656 var c1 = v2.b.mul(k).divRound(this.n);
44657 var c2 = v1.b.neg().mul(k).divRound(this.n);
44658
44659 var p1 = c1.mul(v1.a);
44660 var p2 = c2.mul(v2.a);
44661 var q1 = c1.mul(v1.b);
44662 var q2 = c2.mul(v2.b);
44663
44664 // Calculate answer
44665 var k1 = k.sub(p1).sub(p2);
44666 var k2 = q1.add(q2).neg();
44667 return { k1: k1, k2: k2 };
44668 };
44669
44670 ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
44671 x = new BN(x, 16);
44672 if (!x.red)
44673 x = x.toRed(this.red);
44674
44675 var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
44676 var y = y2.redSqrt();
44677 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
44678 throw new Error('invalid point');
44679
44680 // XXX Is there any way to tell if the number is odd without converting it
44681 // to non-red form?
44682 var isOdd = y.fromRed().isOdd();
44683 if (odd && !isOdd || !odd && isOdd)
44684 y = y.redNeg();
44685
44686 return this.point(x, y);
44687 };
44688
44689 ShortCurve.prototype.validate = function validate(point) {
44690 if (point.inf)
44691 return true;
44692
44693 var x = point.x;
44694 var y = point.y;
44695
44696 var ax = this.a.redMul(x);
44697 var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
44698 return y.redSqr().redISub(rhs).cmpn(0) === 0;
44699 };
44700
44701 ShortCurve.prototype._endoWnafMulAdd =
44702 function _endoWnafMulAdd(points, coeffs, jacobianResult) {
44703 var npoints = this._endoWnafT1;
44704 var ncoeffs = this._endoWnafT2;
44705 for (var i = 0; i < points.length; i++) {
44706 var split = this._endoSplit(coeffs[i]);
44707 var p = points[i];
44708 var beta = p._getBeta();
44709
44710 if (split.k1.negative) {
44711 split.k1.ineg();
44712 p = p.neg(true);
44713 }
44714 if (split.k2.negative) {
44715 split.k2.ineg();
44716 beta = beta.neg(true);
44717 }
44718
44719 npoints[i * 2] = p;
44720 npoints[i * 2 + 1] = beta;
44721 ncoeffs[i * 2] = split.k1;
44722 ncoeffs[i * 2 + 1] = split.k2;
44723 }
44724 var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);
44725
44726 // Clean-up references to points and coefficients
44727 for (var j = 0; j < i * 2; j++) {
44728 npoints[j] = null;
44729 ncoeffs[j] = null;
44730 }
44731 return res;
44732 };
44733
44734 function Point(curve, x, y, isRed) {
44735 Base.BasePoint.call(this, curve, 'affine');
44736 if (x === null && y === null) {
44737 this.x = null;
44738 this.y = null;
44739 this.inf = true;
44740 } else {
44741 this.x = new BN(x, 16);
44742 this.y = new BN(y, 16);
44743 // Force redgomery representation when loading from JSON
44744 if (isRed) {
44745 this.x.forceRed(this.curve.red);
44746 this.y.forceRed(this.curve.red);
44747 }
44748 if (!this.x.red)
44749 this.x = this.x.toRed(this.curve.red);
44750 if (!this.y.red)
44751 this.y = this.y.toRed(this.curve.red);
44752 this.inf = false;
44753 }
44754 }
44755 inherits(Point, Base.BasePoint);
44756
44757 ShortCurve.prototype.point = function point(x, y, isRed) {
44758 return new Point(this, x, y, isRed);
44759 };
44760
44761 ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
44762 return Point.fromJSON(this, obj, red);
44763 };
44764
44765 Point.prototype._getBeta = function _getBeta() {
44766 if (!this.curve.endo)
44767 return;
44768
44769 var pre = this.precomputed;
44770 if (pre && pre.beta)
44771 return pre.beta;
44772
44773 var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
44774 if (pre) {
44775 var curve = this.curve;
44776 var endoMul = function(p) {
44777 return curve.point(p.x.redMul(curve.endo.beta), p.y);
44778 };
44779 pre.beta = beta;
44780 beta.precomputed = {
44781 beta: null,
44782 naf: pre.naf && {
44783 wnd: pre.naf.wnd,
44784 points: pre.naf.points.map(endoMul)
44785 },
44786 doubles: pre.doubles && {
44787 step: pre.doubles.step,
44788 points: pre.doubles.points.map(endoMul)
44789 }
44790 };
44791 }
44792 return beta;
44793 };
44794
44795 Point.prototype.toJSON = function toJSON() {
44796 if (!this.precomputed)
44797 return [ this.x, this.y ];
44798
44799 return [ this.x, this.y, this.precomputed && {
44800 doubles: this.precomputed.doubles && {
44801 step: this.precomputed.doubles.step,
44802 points: this.precomputed.doubles.points.slice(1)
44803 },
44804 naf: this.precomputed.naf && {
44805 wnd: this.precomputed.naf.wnd,
44806 points: this.precomputed.naf.points.slice(1)
44807 }
44808 } ];
44809 };
44810
44811 Point.fromJSON = function fromJSON(curve, obj, red) {
44812 if (typeof obj === 'string')
44813 obj = JSON.parse(obj);
44814 var res = curve.point(obj[0], obj[1], red);
44815 if (!obj[2])
44816 return res;
44817
44818 function obj2point(obj) {
44819 return curve.point(obj[0], obj[1], red);
44820 }
44821
44822 var pre = obj[2];
44823 res.precomputed = {
44824 beta: null,
44825 doubles: pre.doubles && {
44826 step: pre.doubles.step,
44827 points: [ res ].concat(pre.doubles.points.map(obj2point))
44828 },
44829 naf: pre.naf && {
44830 wnd: pre.naf.wnd,
44831 points: [ res ].concat(pre.naf.points.map(obj2point))
44832 }
44833 };
44834 return res;
44835 };
44836
44837 Point.prototype.inspect = function inspect() {
44838 if (this.isInfinity())
44839 return '<EC Point Infinity>';
44840 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
44841 ' y: ' + this.y.fromRed().toString(16, 2) + '>';
44842 };
44843
44844 Point.prototype.isInfinity = function isInfinity() {
44845 return this.inf;
44846 };
44847
44848 Point.prototype.add = function add(p) {
44849 // O + P = P
44850 if (this.inf)
44851 return p;
44852
44853 // P + O = P
44854 if (p.inf)
44855 return this;
44856
44857 // P + P = 2P
44858 if (this.eq(p))
44859 return this.dbl();
44860
44861 // P + (-P) = O
44862 if (this.neg().eq(p))
44863 return this.curve.point(null, null);
44864
44865 // P + Q = O
44866 if (this.x.cmp(p.x) === 0)
44867 return this.curve.point(null, null);
44868
44869 var c = this.y.redSub(p.y);
44870 if (c.cmpn(0) !== 0)
44871 c = c.redMul(this.x.redSub(p.x).redInvm());
44872 var nx = c.redSqr().redISub(this.x).redISub(p.x);
44873 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
44874 return this.curve.point(nx, ny);
44875 };
44876
44877 Point.prototype.dbl = function dbl() {
44878 if (this.inf)
44879 return this;
44880
44881 // 2P = O
44882 var ys1 = this.y.redAdd(this.y);
44883 if (ys1.cmpn(0) === 0)
44884 return this.curve.point(null, null);
44885
44886 var a = this.curve.a;
44887
44888 var x2 = this.x.redSqr();
44889 var dyinv = ys1.redInvm();
44890 var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
44891
44892 var nx = c.redSqr().redISub(this.x.redAdd(this.x));
44893 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
44894 return this.curve.point(nx, ny);
44895 };
44896
44897 Point.prototype.getX = function getX() {
44898 return this.x.fromRed();
44899 };
44900
44901 Point.prototype.getY = function getY() {
44902 return this.y.fromRed();
44903 };
44904
44905 Point.prototype.mul = function mul(k) {
44906 k = new BN(k, 16);
44907
44908 if (this._hasDoubles(k))
44909 return this.curve._fixedNafMul(this, k);
44910 else if (this.curve.endo)
44911 return this.curve._endoWnafMulAdd([ this ], [ k ]);
44912 else
44913 return this.curve._wnafMul(this, k);
44914 };
44915
44916 Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
44917 var points = [ this, p2 ];
44918 var coeffs = [ k1, k2 ];
44919 if (this.curve.endo)
44920 return this.curve._endoWnafMulAdd(points, coeffs);
44921 else
44922 return this.curve._wnafMulAdd(1, points, coeffs, 2);
44923 };
44924
44925 Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
44926 var points = [ this, p2 ];
44927 var coeffs = [ k1, k2 ];
44928 if (this.curve.endo)
44929 return this.curve._endoWnafMulAdd(points, coeffs, true);
44930 else
44931 return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
44932 };
44933
44934 Point.prototype.eq = function eq(p) {
44935 return this === p ||
44936 this.inf === p.inf &&
44937 (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
44938 };
44939
44940 Point.prototype.neg = function neg(_precompute) {
44941 if (this.inf)
44942 return this;
44943
44944 var res = this.curve.point(this.x, this.y.redNeg());
44945 if (_precompute && this.precomputed) {
44946 var pre = this.precomputed;
44947 var negate = function(p) {
44948 return p.neg();
44949 };
44950 res.precomputed = {
44951 naf: pre.naf && {
44952 wnd: pre.naf.wnd,
44953 points: pre.naf.points.map(negate)
44954 },
44955 doubles: pre.doubles && {
44956 step: pre.doubles.step,
44957 points: pre.doubles.points.map(negate)
44958 }
44959 };
44960 }
44961 return res;
44962 };
44963
44964 Point.prototype.toJ = function toJ() {
44965 if (this.inf)
44966 return this.curve.jpoint(null, null, null);
44967
44968 var res = this.curve.jpoint(this.x, this.y, this.curve.one);
44969 return res;
44970 };
44971
44972 function JPoint(curve, x, y, z) {
44973 Base.BasePoint.call(this, curve, 'jacobian');
44974 if (x === null && y === null && z === null) {
44975 this.x = this.curve.one;
44976 this.y = this.curve.one;
44977 this.z = new BN(0);
44978 } else {
44979 this.x = new BN(x, 16);
44980 this.y = new BN(y, 16);
44981 this.z = new BN(z, 16);
44982 }
44983 if (!this.x.red)
44984 this.x = this.x.toRed(this.curve.red);
44985 if (!this.y.red)
44986 this.y = this.y.toRed(this.curve.red);
44987 if (!this.z.red)
44988 this.z = this.z.toRed(this.curve.red);
44989
44990 this.zOne = this.z === this.curve.one;
44991 }
44992 inherits(JPoint, Base.BasePoint);
44993
44994 ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
44995 return new JPoint(this, x, y, z);
44996 };
44997
44998 JPoint.prototype.toP = function toP() {
44999 if (this.isInfinity())
45000 return this.curve.point(null, null);
45001
45002 var zinv = this.z.redInvm();
45003 var zinv2 = zinv.redSqr();
45004 var ax = this.x.redMul(zinv2);
45005 var ay = this.y.redMul(zinv2).redMul(zinv);
45006
45007 return this.curve.point(ax, ay);
45008 };
45009
45010 JPoint.prototype.neg = function neg() {
45011 return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
45012 };
45013
45014 JPoint.prototype.add = function add(p) {
45015 // O + P = P
45016 if (this.isInfinity())
45017 return p;
45018
45019 // P + O = P
45020 if (p.isInfinity())
45021 return this;
45022
45023 // 12M + 4S + 7A
45024 var pz2 = p.z.redSqr();
45025 var z2 = this.z.redSqr();
45026 var u1 = this.x.redMul(pz2);
45027 var u2 = p.x.redMul(z2);
45028 var s1 = this.y.redMul(pz2.redMul(p.z));
45029 var s2 = p.y.redMul(z2.redMul(this.z));
45030
45031 var h = u1.redSub(u2);
45032 var r = s1.redSub(s2);
45033 if (h.cmpn(0) === 0) {
45034 if (r.cmpn(0) !== 0)
45035 return this.curve.jpoint(null, null, null);
45036 else
45037 return this.dbl();
45038 }
45039
45040 var h2 = h.redSqr();
45041 var h3 = h2.redMul(h);
45042 var v = u1.redMul(h2);
45043
45044 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
45045 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
45046 var nz = this.z.redMul(p.z).redMul(h);
45047
45048 return this.curve.jpoint(nx, ny, nz);
45049 };
45050
45051 JPoint.prototype.mixedAdd = function mixedAdd(p) {
45052 // O + P = P
45053 if (this.isInfinity())
45054 return p.toJ();
45055
45056 // P + O = P
45057 if (p.isInfinity())
45058 return this;
45059
45060 // 8M + 3S + 7A
45061 var z2 = this.z.redSqr();
45062 var u1 = this.x;
45063 var u2 = p.x.redMul(z2);
45064 var s1 = this.y;
45065 var s2 = p.y.redMul(z2).redMul(this.z);
45066
45067 var h = u1.redSub(u2);
45068 var r = s1.redSub(s2);
45069 if (h.cmpn(0) === 0) {
45070 if (r.cmpn(0) !== 0)
45071 return this.curve.jpoint(null, null, null);
45072 else
45073 return this.dbl();
45074 }
45075
45076 var h2 = h.redSqr();
45077 var h3 = h2.redMul(h);
45078 var v = u1.redMul(h2);
45079
45080 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
45081 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
45082 var nz = this.z.redMul(h);
45083
45084 return this.curve.jpoint(nx, ny, nz);
45085 };
45086
45087 JPoint.prototype.dblp = function dblp(pow) {
45088 if (pow === 0)
45089 return this;
45090 if (this.isInfinity())
45091 return this;
45092 if (!pow)
45093 return this.dbl();
45094
45095 if (this.curve.zeroA || this.curve.threeA) {
45096 var r = this;
45097 for (var i = 0; i < pow; i++)
45098 r = r.dbl();
45099 return r;
45100 }
45101
45102 // 1M + 2S + 1A + N * (4S + 5M + 8A)
45103 // N = 1 => 6M + 6S + 9A
45104 var a = this.curve.a;
45105 var tinv = this.curve.tinv;
45106
45107 var jx = this.x;
45108 var jy = this.y;
45109 var jz = this.z;
45110 var jz4 = jz.redSqr().redSqr();
45111
45112 // Reuse results
45113 var jyd = jy.redAdd(jy);
45114 for (var i = 0; i < pow; i++) {
45115 var jx2 = jx.redSqr();
45116 var jyd2 = jyd.redSqr();
45117 var jyd4 = jyd2.redSqr();
45118 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
45119
45120 var t1 = jx.redMul(jyd2);
45121 var nx = c.redSqr().redISub(t1.redAdd(t1));
45122 var t2 = t1.redISub(nx);
45123 var dny = c.redMul(t2);
45124 dny = dny.redIAdd(dny).redISub(jyd4);
45125 var nz = jyd.redMul(jz);
45126 if (i + 1 < pow)
45127 jz4 = jz4.redMul(jyd4);
45128
45129 jx = nx;
45130 jz = nz;
45131 jyd = dny;
45132 }
45133
45134 return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
45135 };
45136
45137 JPoint.prototype.dbl = function dbl() {
45138 if (this.isInfinity())
45139 return this;
45140
45141 if (this.curve.zeroA)
45142 return this._zeroDbl();
45143 else if (this.curve.threeA)
45144 return this._threeDbl();
45145 else
45146 return this._dbl();
45147 };
45148
45149 JPoint.prototype._zeroDbl = function _zeroDbl() {
45150 var nx;
45151 var ny;
45152 var nz;
45153 // Z = 1
45154 if (this.zOne) {
45155 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
45156 // #doubling-mdbl-2007-bl
45157 // 1M + 5S + 14A
45158
45159 // XX = X1^2
45160 var xx = this.x.redSqr();
45161 // YY = Y1^2
45162 var yy = this.y.redSqr();
45163 // YYYY = YY^2
45164 var yyyy = yy.redSqr();
45165 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
45166 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
45167 s = s.redIAdd(s);
45168 // M = 3 * XX + a; a = 0
45169 var m = xx.redAdd(xx).redIAdd(xx);
45170 // T = M ^ 2 - 2*S
45171 var t = m.redSqr().redISub(s).redISub(s);
45172
45173 // 8 * YYYY
45174 var yyyy8 = yyyy.redIAdd(yyyy);
45175 yyyy8 = yyyy8.redIAdd(yyyy8);
45176 yyyy8 = yyyy8.redIAdd(yyyy8);
45177
45178 // X3 = T
45179 nx = t;
45180 // Y3 = M * (S - T) - 8 * YYYY
45181 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
45182 // Z3 = 2*Y1
45183 nz = this.y.redAdd(this.y);
45184 } else {
45185 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
45186 // #doubling-dbl-2009-l
45187 // 2M + 5S + 13A
45188
45189 // A = X1^2
45190 var a = this.x.redSqr();
45191 // B = Y1^2
45192 var b = this.y.redSqr();
45193 // C = B^2
45194 var c = b.redSqr();
45195 // D = 2 * ((X1 + B)^2 - A - C)
45196 var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
45197 d = d.redIAdd(d);
45198 // E = 3 * A
45199 var e = a.redAdd(a).redIAdd(a);
45200 // F = E^2
45201 var f = e.redSqr();
45202
45203 // 8 * C
45204 var c8 = c.redIAdd(c);
45205 c8 = c8.redIAdd(c8);
45206 c8 = c8.redIAdd(c8);
45207
45208 // X3 = F - 2 * D
45209 nx = f.redISub(d).redISub(d);
45210 // Y3 = E * (D - X3) - 8 * C
45211 ny = e.redMul(d.redISub(nx)).redISub(c8);
45212 // Z3 = 2 * Y1 * Z1
45213 nz = this.y.redMul(this.z);
45214 nz = nz.redIAdd(nz);
45215 }
45216
45217 return this.curve.jpoint(nx, ny, nz);
45218 };
45219
45220 JPoint.prototype._threeDbl = function _threeDbl() {
45221 var nx;
45222 var ny;
45223 var nz;
45224 // Z = 1
45225 if (this.zOne) {
45226 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html
45227 // #doubling-mdbl-2007-bl
45228 // 1M + 5S + 15A
45229
45230 // XX = X1^2
45231 var xx = this.x.redSqr();
45232 // YY = Y1^2
45233 var yy = this.y.redSqr();
45234 // YYYY = YY^2
45235 var yyyy = yy.redSqr();
45236 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
45237 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
45238 s = s.redIAdd(s);
45239 // M = 3 * XX + a
45240 var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
45241 // T = M^2 - 2 * S
45242 var t = m.redSqr().redISub(s).redISub(s);
45243 // X3 = T
45244 nx = t;
45245 // Y3 = M * (S - T) - 8 * YYYY
45246 var yyyy8 = yyyy.redIAdd(yyyy);
45247 yyyy8 = yyyy8.redIAdd(yyyy8);
45248 yyyy8 = yyyy8.redIAdd(yyyy8);
45249 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
45250 // Z3 = 2 * Y1
45251 nz = this.y.redAdd(this.y);
45252 } else {
45253 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
45254 // 3M + 5S
45255
45256 // delta = Z1^2
45257 var delta = this.z.redSqr();
45258 // gamma = Y1^2
45259 var gamma = this.y.redSqr();
45260 // beta = X1 * gamma
45261 var beta = this.x.redMul(gamma);
45262 // alpha = 3 * (X1 - delta) * (X1 + delta)
45263 var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
45264 alpha = alpha.redAdd(alpha).redIAdd(alpha);
45265 // X3 = alpha^2 - 8 * beta
45266 var beta4 = beta.redIAdd(beta);
45267 beta4 = beta4.redIAdd(beta4);
45268 var beta8 = beta4.redAdd(beta4);
45269 nx = alpha.redSqr().redISub(beta8);
45270 // Z3 = (Y1 + Z1)^2 - gamma - delta
45271 nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
45272 // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2
45273 var ggamma8 = gamma.redSqr();
45274 ggamma8 = ggamma8.redIAdd(ggamma8);
45275 ggamma8 = ggamma8.redIAdd(ggamma8);
45276 ggamma8 = ggamma8.redIAdd(ggamma8);
45277 ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
45278 }
45279
45280 return this.curve.jpoint(nx, ny, nz);
45281 };
45282
45283 JPoint.prototype._dbl = function _dbl() {
45284 var a = this.curve.a;
45285
45286 // 4M + 6S + 10A
45287 var jx = this.x;
45288 var jy = this.y;
45289 var jz = this.z;
45290 var jz4 = jz.redSqr().redSqr();
45291
45292 var jx2 = jx.redSqr();
45293 var jy2 = jy.redSqr();
45294
45295 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
45296
45297 var jxd4 = jx.redAdd(jx);
45298 jxd4 = jxd4.redIAdd(jxd4);
45299 var t1 = jxd4.redMul(jy2);
45300 var nx = c.redSqr().redISub(t1.redAdd(t1));
45301 var t2 = t1.redISub(nx);
45302
45303 var jyd8 = jy2.redSqr();
45304 jyd8 = jyd8.redIAdd(jyd8);
45305 jyd8 = jyd8.redIAdd(jyd8);
45306 jyd8 = jyd8.redIAdd(jyd8);
45307 var ny = c.redMul(t2).redISub(jyd8);
45308 var nz = jy.redAdd(jy).redMul(jz);
45309
45310 return this.curve.jpoint(nx, ny, nz);
45311 };
45312
45313 JPoint.prototype.trpl = function trpl() {
45314 if (!this.curve.zeroA)
45315 return this.dbl().add(this);
45316
45317 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl
45318 // 5M + 10S + ...
45319
45320 // XX = X1^2
45321 var xx = this.x.redSqr();
45322 // YY = Y1^2
45323 var yy = this.y.redSqr();
45324 // ZZ = Z1^2
45325 var zz = this.z.redSqr();
45326 // YYYY = YY^2
45327 var yyyy = yy.redSqr();
45328 // M = 3 * XX + a * ZZ2; a = 0
45329 var m = xx.redAdd(xx).redIAdd(xx);
45330 // MM = M^2
45331 var mm = m.redSqr();
45332 // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM
45333 var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
45334 e = e.redIAdd(e);
45335 e = e.redAdd(e).redIAdd(e);
45336 e = e.redISub(mm);
45337 // EE = E^2
45338 var ee = e.redSqr();
45339 // T = 16*YYYY
45340 var t = yyyy.redIAdd(yyyy);
45341 t = t.redIAdd(t);
45342 t = t.redIAdd(t);
45343 t = t.redIAdd(t);
45344 // U = (M + E)^2 - MM - EE - T
45345 var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
45346 // X3 = 4 * (X1 * EE - 4 * YY * U)
45347 var yyu4 = yy.redMul(u);
45348 yyu4 = yyu4.redIAdd(yyu4);
45349 yyu4 = yyu4.redIAdd(yyu4);
45350 var nx = this.x.redMul(ee).redISub(yyu4);
45351 nx = nx.redIAdd(nx);
45352 nx = nx.redIAdd(nx);
45353 // Y3 = 8 * Y1 * (U * (T - U) - E * EE)
45354 var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
45355 ny = ny.redIAdd(ny);
45356 ny = ny.redIAdd(ny);
45357 ny = ny.redIAdd(ny);
45358 // Z3 = (Z1 + E)^2 - ZZ - EE
45359 var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
45360
45361 return this.curve.jpoint(nx, ny, nz);
45362 };
45363
45364 JPoint.prototype.mul = function mul(k, kbase) {
45365 k = new BN(k, kbase);
45366
45367 return this.curve._wnafMul(this, k);
45368 };
45369
45370 JPoint.prototype.eq = function eq(p) {
45371 if (p.type === 'affine')
45372 return this.eq(p.toJ());
45373
45374 if (this === p)
45375 return true;
45376
45377 // x1 * z2^2 == x2 * z1^2
45378 var z2 = this.z.redSqr();
45379 var pz2 = p.z.redSqr();
45380 if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
45381 return false;
45382
45383 // y1 * z2^3 == y2 * z1^3
45384 var z3 = z2.redMul(this.z);
45385 var pz3 = pz2.redMul(p.z);
45386 return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
45387 };
45388
45389 JPoint.prototype.eqXToP = function eqXToP(x) {
45390 var zs = this.z.redSqr();
45391 var rx = x.toRed(this.curve.red).redMul(zs);
45392 if (this.x.cmp(rx) === 0)
45393 return true;
45394
45395 var xc = x.clone();
45396 var t = this.curve.redN.redMul(zs);
45397 for (;;) {
45398 xc.iadd(this.curve.n);
45399 if (xc.cmp(this.curve.p) >= 0)
45400 return false;
45401
45402 rx.redIAdd(t);
45403 if (this.x.cmp(rx) === 0)
45404 return true;
45405 }
45406 return false;
45407 };
45408
45409 JPoint.prototype.inspect = function inspect() {
45410 if (this.isInfinity())
45411 return '<EC JPoint Infinity>';
45412 return '<EC JPoint x: ' + this.x.toString(16, 2) +
45413 ' y: ' + this.y.toString(16, 2) +
45414 ' z: ' + this.z.toString(16, 2) + '>';
45415 };
45416
45417 JPoint.prototype.isInfinity = function isInfinity() {
45418 // XXX This code assumes that zero is always zero in red
45419 return this.z.cmpn(0) === 0;
45420 };
45421
45422 },{"../../elliptic":97,"../curve":100,"bn.js":81,"inherits":121}],103:[function(require,module,exports){
45423 'use strict';
45424
45425 var curves = exports;
45426
45427 var hash = require('hash.js');
45428 var elliptic = require('../elliptic');
45429
45430 var assert = elliptic.utils.assert;
45431
45432 function PresetCurve(options) {
45433 if (options.type === 'short')
45434 this.curve = new elliptic.curve.short(options);
45435 else if (options.type === 'edwards')
45436 this.curve = new elliptic.curve.edwards(options);
45437 else
45438 this.curve = new elliptic.curve.mont(options);
45439 this.g = this.curve.g;
45440 this.n = this.curve.n;
45441 this.hash = options.hash;
45442
45443 assert(this.g.validate(), 'Invalid curve');
45444 assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');
45445 }
45446 curves.PresetCurve = PresetCurve;
45447
45448 function defineCurve(name, options) {
45449 Object.defineProperty(curves, name, {
45450 configurable: true,
45451 enumerable: true,
45452 get: function() {
45453 var curve = new PresetCurve(options);
45454 Object.defineProperty(curves, name, {
45455 configurable: true,
45456 enumerable: true,
45457 value: curve
45458 });
45459 return curve;
45460 }
45461 });
45462 }
45463
45464 defineCurve('p192', {
45465 type: 'short',
45466 prime: 'p192',
45467 p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
45468 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
45469 b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
45470 n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
45471 hash: hash.sha256,
45472 gRed: false,
45473 g: [
45474 '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',
45475 '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'
45476 ]
45477 });
45478
45479 defineCurve('p224', {
45480 type: 'short',
45481 prime: 'p224',
45482 p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
45483 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
45484 b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
45485 n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
45486 hash: hash.sha256,
45487 gRed: false,
45488 g: [
45489 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',
45490 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'
45491 ]
45492 });
45493
45494 defineCurve('p256', {
45495 type: 'short',
45496 prime: null,
45497 p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
45498 a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
45499 b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
45500 n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
45501 hash: hash.sha256,
45502 gRed: false,
45503 g: [
45504 '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',
45505 '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'
45506 ]
45507 });
45508
45509 defineCurve('p384', {
45510 type: 'short',
45511 prime: null,
45512 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
45513 'fffffffe ffffffff 00000000 00000000 ffffffff',
45514 a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
45515 'fffffffe ffffffff 00000000 00000000 fffffffc',
45516 b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +
45517 '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
45518 n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +
45519 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
45520 hash: hash.sha384,
45521 gRed: false,
45522 g: [
45523 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +
45524 '5502f25d bf55296c 3a545e38 72760ab7',
45525 '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +
45526 '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'
45527 ]
45528 });
45529
45530 defineCurve('p521', {
45531 type: 'short',
45532 prime: null,
45533 p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
45534 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
45535 'ffffffff ffffffff ffffffff ffffffff ffffffff',
45536 a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
45537 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
45538 'ffffffff ffffffff ffffffff ffffffff fffffffc',
45539 b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +
45540 '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +
45541 '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
45542 n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
45543 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +
45544 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
45545 hash: hash.sha512,
45546 gRed: false,
45547 g: [
45548 '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +
45549 '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +
45550 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',
45551 '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +
45552 '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +
45553 '3fad0761 353c7086 a272c240 88be9476 9fd16650'
45554 ]
45555 });
45556
45557 defineCurve('curve25519', {
45558 type: 'mont',
45559 prime: 'p25519',
45560 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
45561 a: '76d06',
45562 b: '1',
45563 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
45564 hash: hash.sha256,
45565 gRed: false,
45566 g: [
45567 '9'
45568 ]
45569 });
45570
45571 defineCurve('ed25519', {
45572 type: 'edwards',
45573 prime: 'p25519',
45574 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
45575 a: '-1',
45576 c: '1',
45577 // -121665 * (121666^(-1)) (mod P)
45578 d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
45579 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
45580 hash: hash.sha256,
45581 gRed: false,
45582 g: [
45583 '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',
45584
45585 // 4/5
45586 '6666666666666666666666666666666666666666666666666666666666666658'
45587 ]
45588 });
45589
45590 var pre;
45591 try {
45592 pre = require('./precomputed/secp256k1');
45593 } catch (e) {
45594 pre = undefined;
45595 }
45596
45597 defineCurve('secp256k1', {
45598 type: 'short',
45599 prime: 'k256',
45600 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
45601 a: '0',
45602 b: '7',
45603 n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
45604 h: '1',
45605 hash: hash.sha256,
45606
45607 // Precomputed endomorphism
45608 beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
45609 lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
45610 basis: [
45611 {
45612 a: '3086d221a7d46bcde86c90e49284eb15',
45613 b: '-e4437ed6010e88286f547fa90abfe4c3'
45614 },
45615 {
45616 a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
45617 b: '3086d221a7d46bcde86c90e49284eb15'
45618 }
45619 ],
45620
45621 gRed: false,
45622 g: [
45623 '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
45624 '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
45625 pre
45626 ]
45627 });
45628
45629 },{"../elliptic":97,"./precomputed/secp256k1":110,"hash.js":114}],104:[function(require,module,exports){
45630 'use strict';
45631
45632 var BN = require('bn.js');
45633 var HmacDRBG = require('hmac-drbg');
45634 var elliptic = require('../../elliptic');
45635 var utils = elliptic.utils;
45636 var assert = utils.assert;
45637
45638 var KeyPair = require('./key');
45639 var Signature = require('./signature');
45640
45641 function EC(options) {
45642 if (!(this instanceof EC))
45643 return new EC(options);
45644
45645 // Shortcut `elliptic.ec(curve-name)`
45646 if (typeof options === 'string') {
45647 assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);
45648
45649 options = elliptic.curves[options];
45650 }
45651
45652 // Shortcut for `elliptic.ec(elliptic.curves.curveName)`
45653 if (options instanceof elliptic.curves.PresetCurve)
45654 options = { curve: options };
45655
45656 this.curve = options.curve.curve;
45657 this.n = this.curve.n;
45658 this.nh = this.n.ushrn(1);
45659 this.g = this.curve.g;
45660
45661 // Point on curve
45662 this.g = options.curve.g;
45663 this.g.precompute(options.curve.n.bitLength() + 1);
45664
45665 // Hash for function for DRBG
45666 this.hash = options.hash || options.curve.hash;
45667 }
45668 module.exports = EC;
45669
45670 EC.prototype.keyPair = function keyPair(options) {
45671 return new KeyPair(this, options);
45672 };
45673
45674 EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
45675 return KeyPair.fromPrivate(this, priv, enc);
45676 };
45677
45678 EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
45679 return KeyPair.fromPublic(this, pub, enc);
45680 };
45681
45682 EC.prototype.genKeyPair = function genKeyPair(options) {
45683 if (!options)
45684 options = {};
45685
45686 // Instantiate Hmac_DRBG
45687 var drbg = new HmacDRBG({
45688 hash: this.hash,
45689 pers: options.pers,
45690 persEnc: options.persEnc || 'utf8',
45691 entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),
45692 entropyEnc: options.entropy && options.entropyEnc || 'utf8',
45693 nonce: this.n.toArray()
45694 });
45695
45696 var bytes = this.n.byteLength();
45697 var ns2 = this.n.sub(new BN(2));
45698 do {
45699 var priv = new BN(drbg.generate(bytes));
45700 if (priv.cmp(ns2) > 0)
45701 continue;
45702
45703 priv.iaddn(1);
45704 return this.keyFromPrivate(priv);
45705 } while (true);
45706 };
45707
45708 EC.prototype._truncateToN = function truncateToN(msg, truncOnly) {
45709 var delta = msg.byteLength() * 8 - this.n.bitLength();
45710 if (delta > 0)
45711 msg = msg.ushrn(delta);
45712 if (!truncOnly && msg.cmp(this.n) >= 0)
45713 return msg.sub(this.n);
45714 else
45715 return msg;
45716 };
45717
45718 EC.prototype.sign = function sign(msg, key, enc, options) {
45719 if (typeof enc === 'object') {
45720 options = enc;
45721 enc = null;
45722 }
45723 if (!options)
45724 options = {};
45725
45726 key = this.keyFromPrivate(key, enc);
45727 msg = this._truncateToN(new BN(msg, 16));
45728
45729 // Zero-extend key to provide enough entropy
45730 var bytes = this.n.byteLength();
45731 var bkey = key.getPrivate().toArray('be', bytes);
45732
45733 // Zero-extend nonce to have the same byte size as N
45734 var nonce = msg.toArray('be', bytes);
45735
45736 // Instantiate Hmac_DRBG
45737 var drbg = new HmacDRBG({
45738 hash: this.hash,
45739 entropy: bkey,
45740 nonce: nonce,
45741 pers: options.pers,
45742 persEnc: options.persEnc || 'utf8'
45743 });
45744
45745 // Number of bytes to generate
45746 var ns1 = this.n.sub(new BN(1));
45747
45748 for (var iter = 0; true; iter++) {
45749 var k = options.k ?
45750 options.k(iter) :
45751 new BN(drbg.generate(this.n.byteLength()));
45752 k = this._truncateToN(k, true);
45753 if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
45754 continue;
45755
45756 var kp = this.g.mul(k);
45757 if (kp.isInfinity())
45758 continue;
45759
45760 var kpX = kp.getX();
45761 var r = kpX.umod(this.n);
45762 if (r.cmpn(0) === 0)
45763 continue;
45764
45765 var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
45766 s = s.umod(this.n);
45767 if (s.cmpn(0) === 0)
45768 continue;
45769
45770 var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |
45771 (kpX.cmp(r) !== 0 ? 2 : 0);
45772
45773 // Use complement of `s`, if it is > `n / 2`
45774 if (options.canonical && s.cmp(this.nh) > 0) {
45775 s = this.n.sub(s);
45776 recoveryParam ^= 1;
45777 }
45778
45779 return new Signature({ r: r, s: s, recoveryParam: recoveryParam });
45780 }
45781 };
45782
45783 EC.prototype.verify = function verify(msg, signature, key, enc) {
45784 msg = this._truncateToN(new BN(msg, 16));
45785 key = this.keyFromPublic(key, enc);
45786 signature = new Signature(signature, 'hex');
45787
45788 // Perform primitive values validation
45789 var r = signature.r;
45790 var s = signature.s;
45791 if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
45792 return false;
45793 if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
45794 return false;
45795
45796 // Validate signature
45797 var sinv = s.invm(this.n);
45798 var u1 = sinv.mul(msg).umod(this.n);
45799 var u2 = sinv.mul(r).umod(this.n);
45800
45801 if (!this.curve._maxwellTrick) {
45802 var p = this.g.mulAdd(u1, key.getPublic(), u2);
45803 if (p.isInfinity())
45804 return false;
45805
45806 return p.getX().umod(this.n).cmp(r) === 0;
45807 }
45808
45809 // NOTE: Greg Maxwell's trick, inspired by:
45810 // https://git.io/vad3K
45811
45812 var p = this.g.jmulAdd(u1, key.getPublic(), u2);
45813 if (p.isInfinity())
45814 return false;
45815
45816 // Compare `p.x` of Jacobian point with `r`,
45817 // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
45818 // inverse of `p.z^2`
45819 return p.eqXToP(r);
45820 };
45821
45822 EC.prototype.recoverPubKey = function(msg, signature, j, enc) {
45823 assert((3 & j) === j, 'The recovery param is more than two bits');
45824 signature = new Signature(signature, enc);
45825
45826 var n = this.n;
45827 var e = new BN(msg);
45828 var r = signature.r;
45829 var s = signature.s;
45830
45831 // A set LSB signifies that the y-coordinate is odd
45832 var isYOdd = j & 1;
45833 var isSecondKey = j >> 1;
45834 if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
45835 throw new Error('Unable to find sencond key candinate');
45836
45837 // 1.1. Let x = r + jn.
45838 if (isSecondKey)
45839 r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
45840 else
45841 r = this.curve.pointFromX(r, isYOdd);
45842
45843 var rInv = signature.r.invm(n);
45844 var s1 = n.sub(e).mul(rInv).umod(n);
45845 var s2 = s.mul(rInv).umod(n);
45846
45847 // 1.6.1 Compute Q = r^-1 (sR - eG)
45848 // Q = r^-1 (sR + -eG)
45849 return this.g.mulAdd(s1, r, s2);
45850 };
45851
45852 EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {
45853 signature = new Signature(signature, enc);
45854 if (signature.recoveryParam !== null)
45855 return signature.recoveryParam;
45856
45857 for (var i = 0; i < 4; i++) {
45858 var Qprime;
45859 try {
45860 Qprime = this.recoverPubKey(e, signature, i);
45861 } catch (e) {
45862 continue;
45863 }
45864
45865 if (Qprime.eq(Q))
45866 return i;
45867 }
45868 throw new Error('Unable to find valid recovery factor');
45869 };
45870
45871 },{"../../elliptic":97,"./key":105,"./signature":106,"bn.js":81,"hmac-drbg":120}],105:[function(require,module,exports){
45872 'use strict';
45873
45874 var BN = require('bn.js');
45875 var elliptic = require('../../elliptic');
45876 var utils = elliptic.utils;
45877 var assert = utils.assert;
45878
45879 function KeyPair(ec, options) {
45880 this.ec = ec;
45881 this.priv = null;
45882 this.pub = null;
45883
45884 // KeyPair(ec, { priv: ..., pub: ... })
45885 if (options.priv)
45886 this._importPrivate(options.priv, options.privEnc);
45887 if (options.pub)
45888 this._importPublic(options.pub, options.pubEnc);
45889 }
45890 module.exports = KeyPair;
45891
45892 KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
45893 if (pub instanceof KeyPair)
45894 return pub;
45895
45896 return new KeyPair(ec, {
45897 pub: pub,
45898 pubEnc: enc
45899 });
45900 };
45901
45902 KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
45903 if (priv instanceof KeyPair)
45904 return priv;
45905
45906 return new KeyPair(ec, {
45907 priv: priv,
45908 privEnc: enc
45909 });
45910 };
45911
45912 KeyPair.prototype.validate = function validate() {
45913 var pub = this.getPublic();
45914
45915 if (pub.isInfinity())
45916 return { result: false, reason: 'Invalid public key' };
45917 if (!pub.validate())
45918 return { result: false, reason: 'Public key is not a point' };
45919 if (!pub.mul(this.ec.curve.n).isInfinity())
45920 return { result: false, reason: 'Public key * N != O' };
45921
45922 return { result: true, reason: null };
45923 };
45924
45925 KeyPair.prototype.getPublic = function getPublic(compact, enc) {
45926 // compact is optional argument
45927 if (typeof compact === 'string') {
45928 enc = compact;
45929 compact = null;
45930 }
45931
45932 if (!this.pub)
45933 this.pub = this.ec.g.mul(this.priv);
45934
45935 if (!enc)
45936 return this.pub;
45937
45938 return this.pub.encode(enc, compact);
45939 };
45940
45941 KeyPair.prototype.getPrivate = function getPrivate(enc) {
45942 if (enc === 'hex')
45943 return this.priv.toString(16, 2);
45944 else
45945 return this.priv;
45946 };
45947
45948 KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
45949 this.priv = new BN(key, enc || 16);
45950
45951 // Ensure that the priv won't be bigger than n, otherwise we may fail
45952 // in fixed multiplication method
45953 this.priv = this.priv.umod(this.ec.curve.n);
45954 };
45955
45956 KeyPair.prototype._importPublic = function _importPublic(key, enc) {
45957 if (key.x || key.y) {
45958 // Montgomery points only have an `x` coordinate.
45959 // Weierstrass/Edwards points on the other hand have both `x` and
45960 // `y` coordinates.
45961 if (this.ec.curve.type === 'mont') {
45962 assert(key.x, 'Need x coordinate');
45963 } else if (this.ec.curve.type === 'short' ||
45964 this.ec.curve.type === 'edwards') {
45965 assert(key.x && key.y, 'Need both x and y coordinate');
45966 }
45967 this.pub = this.ec.curve.point(key.x, key.y);
45968 return;
45969 }
45970 this.pub = this.ec.curve.decodePoint(key, enc);
45971 };
45972
45973 // ECDH
45974 KeyPair.prototype.derive = function derive(pub) {
45975 return pub.mul(this.priv).getX();
45976 };
45977
45978 // ECDSA
45979 KeyPair.prototype.sign = function sign(msg, enc, options) {
45980 return this.ec.sign(msg, this, enc, options);
45981 };
45982
45983 KeyPair.prototype.verify = function verify(msg, signature) {
45984 return this.ec.verify(msg, signature, this);
45985 };
45986
45987 KeyPair.prototype.inspect = function inspect() {
45988 return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +
45989 ' pub: ' + (this.pub && this.pub.inspect()) + ' >';
45990 };
45991
45992 },{"../../elliptic":97,"bn.js":81}],106:[function(require,module,exports){
45993 'use strict';
45994
45995 var BN = require('bn.js');
45996
45997 var elliptic = require('../../elliptic');
45998 var utils = elliptic.utils;
45999 var assert = utils.assert;
46000
46001 function Signature(options, enc) {
46002 if (options instanceof Signature)
46003 return options;
46004
46005 if (this._importDER(options, enc))
46006 return;
46007
46008 assert(options.r && options.s, 'Signature without r or s');
46009 this.r = new BN(options.r, 16);
46010 this.s = new BN(options.s, 16);
46011 if (options.recoveryParam === undefined)
46012 this.recoveryParam = null;
46013 else
46014 this.recoveryParam = options.recoveryParam;
46015 }
46016 module.exports = Signature;
46017
46018 function Position() {
46019 this.place = 0;
46020 }
46021
46022 function getLength(buf, p) {
46023 var initial = buf[p.place++];
46024 if (!(initial & 0x80)) {
46025 return initial;
46026 }
46027 var octetLen = initial & 0xf;
46028 var val = 0;
46029 for (var i = 0, off = p.place; i < octetLen; i++, off++) {
46030 val <<= 8;
46031 val |= buf[off];
46032 }
46033 p.place = off;
46034 return val;
46035 }
46036
46037 function rmPadding(buf) {
46038 var i = 0;
46039 var len = buf.length - 1;
46040 while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {
46041 i++;
46042 }
46043 if (i === 0) {
46044 return buf;
46045 }
46046 return buf.slice(i);
46047 }
46048
46049 Signature.prototype._importDER = function _importDER(data, enc) {
46050 data = utils.toArray(data, enc);
46051 var p = new Position();
46052 if (data[p.place++] !== 0x30) {
46053 return false;
46054 }
46055 var len = getLength(data, p);
46056 if ((len + p.place) !== data.length) {
46057 return false;
46058 }
46059 if (data[p.place++] !== 0x02) {
46060 return false;
46061 }
46062 var rlen = getLength(data, p);
46063 var r = data.slice(p.place, rlen + p.place);
46064 p.place += rlen;
46065 if (data[p.place++] !== 0x02) {
46066 return false;
46067 }
46068 var slen = getLength(data, p);
46069 if (data.length !== slen + p.place) {
46070 return false;
46071 }
46072 var s = data.slice(p.place, slen + p.place);
46073 if (r[0] === 0 && (r[1] & 0x80)) {
46074 r = r.slice(1);
46075 }
46076 if (s[0] === 0 && (s[1] & 0x80)) {
46077 s = s.slice(1);
46078 }
46079
46080 this.r = new BN(r);
46081 this.s = new BN(s);
46082 this.recoveryParam = null;
46083
46084 return true;
46085 };
46086
46087 function constructLength(arr, len) {
46088 if (len < 0x80) {
46089 arr.push(len);
46090 return;
46091 }
46092 var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
46093 arr.push(octets | 0x80);
46094 while (--octets) {
46095 arr.push((len >>> (octets << 3)) & 0xff);
46096 }
46097 arr.push(len);
46098 }
46099
46100 Signature.prototype.toDER = function toDER(enc) {
46101 var r = this.r.toArray();
46102 var s = this.s.toArray();
46103
46104 // Pad values
46105 if (r[0] & 0x80)
46106 r = [ 0 ].concat(r);
46107 // Pad values
46108 if (s[0] & 0x80)
46109 s = [ 0 ].concat(s);
46110
46111 r = rmPadding(r);
46112 s = rmPadding(s);
46113
46114 while (!s[0] && !(s[1] & 0x80)) {
46115 s = s.slice(1);
46116 }
46117 var arr = [ 0x02 ];
46118 constructLength(arr, r.length);
46119 arr = arr.concat(r);
46120 arr.push(0x02);
46121 constructLength(arr, s.length);
46122 var backHalf = arr.concat(s);
46123 var res = [ 0x30 ];
46124 constructLength(res, backHalf.length);
46125 res = res.concat(backHalf);
46126 return utils.encode(res, enc);
46127 };
46128
46129 },{"../../elliptic":97,"bn.js":81}],107:[function(require,module,exports){
46130 'use strict';
46131
46132 var hash = require('hash.js');
46133 var elliptic = require('../../elliptic');
46134 var utils = elliptic.utils;
46135 var assert = utils.assert;
46136 var parseBytes = utils.parseBytes;
46137 var KeyPair = require('./key');
46138 var Signature = require('./signature');
46139
46140 function EDDSA(curve) {
46141 assert(curve === 'ed25519', 'only tested with ed25519 so far');
46142
46143 if (!(this instanceof EDDSA))
46144 return new EDDSA(curve);
46145
46146 var curve = elliptic.curves[curve].curve;
46147 this.curve = curve;
46148 this.g = curve.g;
46149 this.g.precompute(curve.n.bitLength() + 1);
46150
46151 this.pointClass = curve.point().constructor;
46152 this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
46153 this.hash = hash.sha512;
46154 }
46155
46156 module.exports = EDDSA;
46157
46158 /**
46159 * @param {Array|String} message - message bytes
46160 * @param {Array|String|KeyPair} secret - secret bytes or a keypair
46161 * @returns {Signature} - signature
46162 */
46163 EDDSA.prototype.sign = function sign(message, secret) {
46164 message = parseBytes(message);
46165 var key = this.keyFromSecret(secret);
46166 var r = this.hashInt(key.messagePrefix(), message);
46167 var R = this.g.mul(r);
46168 var Rencoded = this.encodePoint(R);
46169 var s_ = this.hashInt(Rencoded, key.pubBytes(), message)
46170 .mul(key.priv());
46171 var S = r.add(s_).umod(this.curve.n);
46172 return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });
46173 };
46174
46175 /**
46176 * @param {Array} message - message bytes
46177 * @param {Array|String|Signature} sig - sig bytes
46178 * @param {Array|String|Point|KeyPair} pub - public key
46179 * @returns {Boolean} - true if public key matches sig of message
46180 */
46181 EDDSA.prototype.verify = function verify(message, sig, pub) {
46182 message = parseBytes(message);
46183 sig = this.makeSignature(sig);
46184 var key = this.keyFromPublic(pub);
46185 var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
46186 var SG = this.g.mul(sig.S());
46187 var RplusAh = sig.R().add(key.pub().mul(h));
46188 return RplusAh.eq(SG);
46189 };
46190
46191 EDDSA.prototype.hashInt = function hashInt() {
46192 var hash = this.hash();
46193 for (var i = 0; i < arguments.length; i++)
46194 hash.update(arguments[i]);
46195 return utils.intFromLE(hash.digest()).umod(this.curve.n);
46196 };
46197
46198 EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
46199 return KeyPair.fromPublic(this, pub);
46200 };
46201
46202 EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
46203 return KeyPair.fromSecret(this, secret);
46204 };
46205
46206 EDDSA.prototype.makeSignature = function makeSignature(sig) {
46207 if (sig instanceof Signature)
46208 return sig;
46209 return new Signature(this, sig);
46210 };
46211
46212 /**
46213 * * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
46214 *
46215 * EDDSA defines methods for encoding and decoding points and integers. These are
46216 * helper convenience methods, that pass along to utility functions implied
46217 * parameters.
46218 *
46219 */
46220 EDDSA.prototype.encodePoint = function encodePoint(point) {
46221 var enc = point.getY().toArray('le', this.encodingLength);
46222 enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
46223 return enc;
46224 };
46225
46226 EDDSA.prototype.decodePoint = function decodePoint(bytes) {
46227 bytes = utils.parseBytes(bytes);
46228
46229 var lastIx = bytes.length - 1;
46230 var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
46231 var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
46232
46233 var y = utils.intFromLE(normed);
46234 return this.curve.pointFromY(y, xIsOdd);
46235 };
46236
46237 EDDSA.prototype.encodeInt = function encodeInt(num) {
46238 return num.toArray('le', this.encodingLength);
46239 };
46240
46241 EDDSA.prototype.decodeInt = function decodeInt(bytes) {
46242 return utils.intFromLE(bytes);
46243 };
46244
46245 EDDSA.prototype.isPoint = function isPoint(val) {
46246 return val instanceof this.pointClass;
46247 };
46248
46249 },{"../../elliptic":97,"./key":108,"./signature":109,"hash.js":114}],108:[function(require,module,exports){
46250 'use strict';
46251
46252 var elliptic = require('../../elliptic');
46253 var utils = elliptic.utils;
46254 var assert = utils.assert;
46255 var parseBytes = utils.parseBytes;
46256 var cachedProperty = utils.cachedProperty;
46257
46258 /**
46259 * @param {EDDSA} eddsa - instance
46260 * @param {Object} params - public/private key parameters
46261 *
46262 * @param {Array<Byte>} [params.secret] - secret seed bytes
46263 * @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
46264 * @param {Array<Byte>} [params.pub] - public key point encoded as bytes
46265 *
46266 */
46267 function KeyPair(eddsa, params) {
46268 this.eddsa = eddsa;
46269 this._secret = parseBytes(params.secret);
46270 if (eddsa.isPoint(params.pub))
46271 this._pub = params.pub;
46272 else
46273 this._pubBytes = parseBytes(params.pub);
46274 }
46275
46276 KeyPair.fromPublic = function fromPublic(eddsa, pub) {
46277 if (pub instanceof KeyPair)
46278 return pub;
46279 return new KeyPair(eddsa, { pub: pub });
46280 };
46281
46282 KeyPair.fromSecret = function fromSecret(eddsa, secret) {
46283 if (secret instanceof KeyPair)
46284 return secret;
46285 return new KeyPair(eddsa, { secret: secret });
46286 };
46287
46288 KeyPair.prototype.secret = function secret() {
46289 return this._secret;
46290 };
46291
46292 cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
46293 return this.eddsa.encodePoint(this.pub());
46294 });
46295
46296 cachedProperty(KeyPair, 'pub', function pub() {
46297 if (this._pubBytes)
46298 return this.eddsa.decodePoint(this._pubBytes);
46299 return this.eddsa.g.mul(this.priv());
46300 });
46301
46302 cachedProperty(KeyPair, 'privBytes', function privBytes() {
46303 var eddsa = this.eddsa;
46304 var hash = this.hash();
46305 var lastIx = eddsa.encodingLength - 1;
46306
46307 var a = hash.slice(0, eddsa.encodingLength);
46308 a[0] &= 248;
46309 a[lastIx] &= 127;
46310 a[lastIx] |= 64;
46311
46312 return a;
46313 });
46314
46315 cachedProperty(KeyPair, 'priv', function priv() {
46316 return this.eddsa.decodeInt(this.privBytes());
46317 });
46318
46319 cachedProperty(KeyPair, 'hash', function hash() {
46320 return this.eddsa.hash().update(this.secret()).digest();
46321 });
46322
46323 cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
46324 return this.hash().slice(this.eddsa.encodingLength);
46325 });
46326
46327 KeyPair.prototype.sign = function sign(message) {
46328 assert(this._secret, 'KeyPair can only verify');
46329 return this.eddsa.sign(message, this);
46330 };
46331
46332 KeyPair.prototype.verify = function verify(message, sig) {
46333 return this.eddsa.verify(message, sig, this);
46334 };
46335
46336 KeyPair.prototype.getSecret = function getSecret(enc) {
46337 assert(this._secret, 'KeyPair is public only');
46338 return utils.encode(this.secret(), enc);
46339 };
46340
46341 KeyPair.prototype.getPublic = function getPublic(enc) {
46342 return utils.encode(this.pubBytes(), enc);
46343 };
46344
46345 module.exports = KeyPair;
46346
46347 },{"../../elliptic":97}],109:[function(require,module,exports){
46348 'use strict';
46349
46350 var BN = require('bn.js');
46351 var elliptic = require('../../elliptic');
46352 var utils = elliptic.utils;
46353 var assert = utils.assert;
46354 var cachedProperty = utils.cachedProperty;
46355 var parseBytes = utils.parseBytes;
46356
46357 /**
46358 * @param {EDDSA} eddsa - eddsa instance
46359 * @param {Array<Bytes>|Object} sig -
46360 * @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
46361 * @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
46362 * @param {Array<Bytes>} [sig.Rencoded] - R point encoded
46363 * @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
46364 */
46365 function Signature(eddsa, sig) {
46366 this.eddsa = eddsa;
46367
46368 if (typeof sig !== 'object')
46369 sig = parseBytes(sig);
46370
46371 if (Array.isArray(sig)) {
46372 sig = {
46373 R: sig.slice(0, eddsa.encodingLength),
46374 S: sig.slice(eddsa.encodingLength)
46375 };
46376 }
46377
46378 assert(sig.R && sig.S, 'Signature without R or S');
46379
46380 if (eddsa.isPoint(sig.R))
46381 this._R = sig.R;
46382 if (sig.S instanceof BN)
46383 this._S = sig.S;
46384
46385 this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
46386 this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
46387 }
46388
46389 cachedProperty(Signature, 'S', function S() {
46390 return this.eddsa.decodeInt(this.Sencoded());
46391 });
46392
46393 cachedProperty(Signature, 'R', function R() {
46394 return this.eddsa.decodePoint(this.Rencoded());
46395 });
46396
46397 cachedProperty(Signature, 'Rencoded', function Rencoded() {
46398 return this.eddsa.encodePoint(this.R());
46399 });
46400
46401 cachedProperty(Signature, 'Sencoded', function Sencoded() {
46402 return this.eddsa.encodeInt(this.S());
46403 });
46404
46405 Signature.prototype.toBytes = function toBytes() {
46406 return this.Rencoded().concat(this.Sencoded());
46407 };
46408
46409 Signature.prototype.toHex = function toHex() {
46410 return utils.encode(this.toBytes(), 'hex').toUpperCase();
46411 };
46412
46413 module.exports = Signature;
46414
46415 },{"../../elliptic":97,"bn.js":81}],110:[function(require,module,exports){
46416 module.exports = {
46417 doubles: {
46418 step: 4,
46419 points: [
46420 [
46421 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',
46422 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'
46423 ],
46424 [
46425 '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',
46426 '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'
46427 ],
46428 [
46429 '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',
46430 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'
46431 ],
46432 [
46433 '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',
46434 '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'
46435 ],
46436 [
46437 '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',
46438 '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'
46439 ],
46440 [
46441 '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',
46442 '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'
46443 ],
46444 [
46445 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',
46446 '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'
46447 ],
46448 [
46449 '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',
46450 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'
46451 ],
46452 [
46453 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',
46454 '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'
46455 ],
46456 [
46457 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',
46458 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'
46459 ],
46460 [
46461 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',
46462 '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'
46463 ],
46464 [
46465 '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',
46466 '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'
46467 ],
46468 [
46469 '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',
46470 '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'
46471 ],
46472 [
46473 '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',
46474 '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'
46475 ],
46476 [
46477 '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',
46478 '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'
46479 ],
46480 [
46481 '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',
46482 '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'
46483 ],
46484 [
46485 '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',
46486 '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'
46487 ],
46488 [
46489 '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',
46490 '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'
46491 ],
46492 [
46493 '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',
46494 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'
46495 ],
46496 [
46497 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',
46498 '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'
46499 ],
46500 [
46501 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',
46502 '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'
46503 ],
46504 [
46505 '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',
46506 '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'
46507 ],
46508 [
46509 '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',
46510 '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'
46511 ],
46512 [
46513 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',
46514 '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'
46515 ],
46516 [
46517 '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',
46518 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'
46519 ],
46520 [
46521 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',
46522 '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'
46523 ],
46524 [
46525 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',
46526 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'
46527 ],
46528 [
46529 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',
46530 '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'
46531 ],
46532 [
46533 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',
46534 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'
46535 ],
46536 [
46537 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',
46538 '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'
46539 ],
46540 [
46541 '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',
46542 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'
46543 ],
46544 [
46545 '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',
46546 '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'
46547 ],
46548 [
46549 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',
46550 '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'
46551 ],
46552 [
46553 '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',
46554 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'
46555 ],
46556 [
46557 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',
46558 '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'
46559 ],
46560 [
46561 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',
46562 '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'
46563 ],
46564 [
46565 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',
46566 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'
46567 ],
46568 [
46569 '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',
46570 '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'
46571 ],
46572 [
46573 '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',
46574 '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'
46575 ],
46576 [
46577 '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',
46578 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'
46579 ],
46580 [
46581 '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',
46582 '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'
46583 ],
46584 [
46585 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',
46586 '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'
46587 ],
46588 [
46589 '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',
46590 '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'
46591 ],
46592 [
46593 '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',
46594 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'
46595 ],
46596 [
46597 '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',
46598 '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'
46599 ],
46600 [
46601 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',
46602 '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'
46603 ],
46604 [
46605 '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',
46606 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'
46607 ],
46608 [
46609 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',
46610 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'
46611 ],
46612 [
46613 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',
46614 '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'
46615 ],
46616 [
46617 '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',
46618 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'
46619 ],
46620 [
46621 '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',
46622 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'
46623 ],
46624 [
46625 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',
46626 '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'
46627 ],
46628 [
46629 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',
46630 '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'
46631 ],
46632 [
46633 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',
46634 '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'
46635 ],
46636 [
46637 '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',
46638 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'
46639 ],
46640 [
46641 '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',
46642 '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'
46643 ],
46644 [
46645 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',
46646 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'
46647 ],
46648 [
46649 '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',
46650 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'
46651 ],
46652 [
46653 '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',
46654 '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'
46655 ],
46656 [
46657 '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',
46658 '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'
46659 ],
46660 [
46661 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',
46662 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'
46663 ],
46664 [
46665 '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',
46666 '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'
46667 ],
46668 [
46669 '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',
46670 '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'
46671 ],
46672 [
46673 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',
46674 '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'
46675 ],
46676 [
46677 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',
46678 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'
46679 ]
46680 ]
46681 },
46682 naf: {
46683 wnd: 7,
46684 points: [
46685 [
46686 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
46687 '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'
46688 ],
46689 [
46690 '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',
46691 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'
46692 ],
46693 [
46694 '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',
46695 '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'
46696 ],
46697 [
46698 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',
46699 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'
46700 ],
46701 [
46702 '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',
46703 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'
46704 ],
46705 [
46706 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',
46707 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'
46708 ],
46709 [
46710 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',
46711 '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'
46712 ],
46713 [
46714 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',
46715 '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'
46716 ],
46717 [
46718 '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',
46719 '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'
46720 ],
46721 [
46722 '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',
46723 '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'
46724 ],
46725 [
46726 '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',
46727 '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'
46728 ],
46729 [
46730 '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',
46731 '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'
46732 ],
46733 [
46734 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',
46735 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'
46736 ],
46737 [
46738 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',
46739 '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'
46740 ],
46741 [
46742 '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',
46743 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'
46744 ],
46745 [
46746 '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',
46747 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'
46748 ],
46749 [
46750 '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',
46751 '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'
46752 ],
46753 [
46754 '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',
46755 '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'
46756 ],
46757 [
46758 '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',
46759 '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'
46760 ],
46761 [
46762 '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',
46763 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'
46764 ],
46765 [
46766 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',
46767 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'
46768 ],
46769 [
46770 '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',
46771 '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'
46772 ],
46773 [
46774 '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',
46775 '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'
46776 ],
46777 [
46778 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',
46779 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'
46780 ],
46781 [
46782 '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',
46783 '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'
46784 ],
46785 [
46786 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',
46787 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'
46788 ],
46789 [
46790 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',
46791 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'
46792 ],
46793 [
46794 '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',
46795 '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'
46796 ],
46797 [
46798 '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',
46799 '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'
46800 ],
46801 [
46802 '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',
46803 '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'
46804 ],
46805 [
46806 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',
46807 '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'
46808 ],
46809 [
46810 '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',
46811 '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'
46812 ],
46813 [
46814 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',
46815 '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'
46816 ],
46817 [
46818 '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',
46819 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'
46820 ],
46821 [
46822 '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',
46823 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'
46824 ],
46825 [
46826 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',
46827 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'
46828 ],
46829 [
46830 '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',
46831 '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'
46832 ],
46833 [
46834 '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',
46835 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'
46836 ],
46837 [
46838 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',
46839 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'
46840 ],
46841 [
46842 '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',
46843 '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'
46844 ],
46845 [
46846 '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',
46847 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'
46848 ],
46849 [
46850 '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',
46851 '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'
46852 ],
46853 [
46854 '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',
46855 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'
46856 ],
46857 [
46858 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',
46859 '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'
46860 ],
46861 [
46862 '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',
46863 '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'
46864 ],
46865 [
46866 '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',
46867 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'
46868 ],
46869 [
46870 '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',
46871 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'
46872 ],
46873 [
46874 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',
46875 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'
46876 ],
46877 [
46878 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',
46879 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'
46880 ],
46881 [
46882 '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',
46883 '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'
46884 ],
46885 [
46886 '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',
46887 '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'
46888 ],
46889 [
46890 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',
46891 '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'
46892 ],
46893 [
46894 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',
46895 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'
46896 ],
46897 [
46898 '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',
46899 '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'
46900 ],
46901 [
46902 '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',
46903 '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'
46904 ],
46905 [
46906 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',
46907 '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'
46908 ],
46909 [
46910 '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',
46911 '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'
46912 ],
46913 [
46914 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',
46915 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'
46916 ],
46917 [
46918 '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',
46919 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'
46920 ],
46921 [
46922 '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',
46923 '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'
46924 ],
46925 [
46926 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',
46927 '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'
46928 ],
46929 [
46930 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',
46931 '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'
46932 ],
46933 [
46934 '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',
46935 '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'
46936 ],
46937 [
46938 '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',
46939 '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'
46940 ],
46941 [
46942 '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',
46943 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'
46944 ],
46945 [
46946 '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',
46947 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'
46948 ],
46949 [
46950 '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',
46951 '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'
46952 ],
46953 [
46954 '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',
46955 '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'
46956 ],
46957 [
46958 '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',
46959 '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'
46960 ],
46961 [
46962 '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',
46963 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'
46964 ],
46965 [
46966 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',
46967 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'
46968 ],
46969 [
46970 '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',
46971 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'
46972 ],
46973 [
46974 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',
46975 '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'
46976 ],
46977 [
46978 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',
46979 '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'
46980 ],
46981 [
46982 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',
46983 '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'
46984 ],
46985 [
46986 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',
46987 '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'
46988 ],
46989 [
46990 '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',
46991 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'
46992 ],
46993 [
46994 '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',
46995 '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'
46996 ],
46997 [
46998 '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',
46999 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'
47000 ],
47001 [
47002 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',
47003 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'
47004 ],
47005 [
47006 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',
47007 '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'
47008 ],
47009 [
47010 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',
47011 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'
47012 ],
47013 [
47014 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',
47015 '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'
47016 ],
47017 [
47018 '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',
47019 '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'
47020 ],
47021 [
47022 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',
47023 '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'
47024 ],
47025 [
47026 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',
47027 '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'
47028 ],
47029 [
47030 '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',
47031 '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'
47032 ],
47033 [
47034 '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',
47035 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'
47036 ],
47037 [
47038 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',
47039 '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'
47040 ],
47041 [
47042 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',
47043 '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'
47044 ],
47045 [
47046 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',
47047 '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'
47048 ],
47049 [
47050 '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',
47051 '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'
47052 ],
47053 [
47054 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',
47055 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'
47056 ],
47057 [
47058 '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',
47059 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'
47060 ],
47061 [
47062 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',
47063 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'
47064 ],
47065 [
47066 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',
47067 '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'
47068 ],
47069 [
47070 '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',
47071 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'
47072 ],
47073 [
47074 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',
47075 '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'
47076 ],
47077 [
47078 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',
47079 '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'
47080 ],
47081 [
47082 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',
47083 '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'
47084 ],
47085 [
47086 '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',
47087 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'
47088 ],
47089 [
47090 '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',
47091 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'
47092 ],
47093 [
47094 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',
47095 '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'
47096 ],
47097 [
47098 '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',
47099 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'
47100 ],
47101 [
47102 '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',
47103 '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'
47104 ],
47105 [
47106 '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',
47107 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'
47108 ],
47109 [
47110 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',
47111 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'
47112 ],
47113 [
47114 '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',
47115 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'
47116 ],
47117 [
47118 '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',
47119 '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'
47120 ],
47121 [
47122 '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',
47123 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'
47124 ],
47125 [
47126 '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',
47127 '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'
47128 ],
47129 [
47130 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',
47131 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'
47132 ],
47133 [
47134 '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',
47135 '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'
47136 ],
47137 [
47138 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',
47139 '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'
47140 ],
47141 [
47142 '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',
47143 '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'
47144 ],
47145 [
47146 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',
47147 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'
47148 ],
47149 [
47150 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',
47151 '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'
47152 ],
47153 [
47154 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',
47155 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'
47156 ],
47157 [
47158 '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',
47159 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'
47160 ],
47161 [
47162 '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',
47163 '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'
47164 ],
47165 [
47166 '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',
47167 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'
47168 ],
47169 [
47170 '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',
47171 '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'
47172 ],
47173 [
47174 '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',
47175 '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'
47176 ],
47177 [
47178 '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',
47179 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'
47180 ],
47181 [
47182 '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',
47183 '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'
47184 ],
47185 [
47186 '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',
47187 '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'
47188 ],
47189 [
47190 '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',
47191 '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'
47192 ]
47193 ]
47194 }
47195 };
47196
47197 },{}],111:[function(require,module,exports){
47198 'use strict';
47199
47200 var utils = exports;
47201 var BN = require('bn.js');
47202 var minAssert = require('minimalistic-assert');
47203 var minUtils = require('minimalistic-crypto-utils');
47204
47205 utils.assert = minAssert;
47206 utils.toArray = minUtils.toArray;
47207 utils.zero2 = minUtils.zero2;
47208 utils.toHex = minUtils.toHex;
47209 utils.encode = minUtils.encode;
47210
47211 // Represent num in a w-NAF form
47212 function getNAF(num, w) {
47213 var naf = [];
47214 var ws = 1 << (w + 1);
47215 var k = num.clone();
47216 while (k.cmpn(1) >= 0) {
47217 var z;
47218 if (k.isOdd()) {
47219 var mod = k.andln(ws - 1);
47220 if (mod > (ws >> 1) - 1)
47221 z = (ws >> 1) - mod;
47222 else
47223 z = mod;
47224 k.isubn(z);
47225 } else {
47226 z = 0;
47227 }
47228 naf.push(z);
47229
47230 // Optimization, shift by word if possible
47231 var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;
47232 for (var i = 1; i < shift; i++)
47233 naf.push(0);
47234 k.iushrn(shift);
47235 }
47236
47237 return naf;
47238 }
47239 utils.getNAF = getNAF;
47240
47241 // Represent k1, k2 in a Joint Sparse Form
47242 function getJSF(k1, k2) {
47243 var jsf = [
47244 [],
47245 []
47246 ];
47247
47248 k1 = k1.clone();
47249 k2 = k2.clone();
47250 var d1 = 0;
47251 var d2 = 0;
47252 while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
47253
47254 // First phase
47255 var m14 = (k1.andln(3) + d1) & 3;
47256 var m24 = (k2.andln(3) + d2) & 3;
47257 if (m14 === 3)
47258 m14 = -1;
47259 if (m24 === 3)
47260 m24 = -1;
47261 var u1;
47262 if ((m14 & 1) === 0) {
47263 u1 = 0;
47264 } else {
47265 var m8 = (k1.andln(7) + d1) & 7;
47266 if ((m8 === 3 || m8 === 5) && m24 === 2)
47267 u1 = -m14;
47268 else
47269 u1 = m14;
47270 }
47271 jsf[0].push(u1);
47272
47273 var u2;
47274 if ((m24 & 1) === 0) {
47275 u2 = 0;
47276 } else {
47277 var m8 = (k2.andln(7) + d2) & 7;
47278 if ((m8 === 3 || m8 === 5) && m14 === 2)
47279 u2 = -m24;
47280 else
47281 u2 = m24;
47282 }
47283 jsf[1].push(u2);
47284
47285 // Second phase
47286 if (2 * d1 === u1 + 1)
47287 d1 = 1 - d1;
47288 if (2 * d2 === u2 + 1)
47289 d2 = 1 - d2;
47290 k1.iushrn(1);
47291 k2.iushrn(1);
47292 }
47293
47294 return jsf;
47295 }
47296 utils.getJSF = getJSF;
47297
47298 function cachedProperty(obj, name, computer) {
47299 var key = '_' + name;
47300 obj.prototype[name] = function cachedProperty() {
47301 return this[key] !== undefined ? this[key] :
47302 this[key] = computer.call(this);
47303 };
47304 }
47305 utils.cachedProperty = cachedProperty;
47306
47307 function parseBytes(bytes) {
47308 return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :
47309 bytes;
47310 }
47311 utils.parseBytes = parseBytes;
47312
47313 function intFromLE(bytes) {
47314 return new BN(bytes, 'hex', 'le');
47315 }
47316 utils.intFromLE = intFromLE;
47317
47318
47319 },{"bn.js":81,"minimalistic-assert":123,"minimalistic-crypto-utils":124}],112:[function(require,module,exports){
47320 module.exports={
47321 "_args": [
47322 [
47323 "elliptic",
47324 "/home/ian/git/bitcoin/bitcoinjs-lib-browser"
47325 ]
47326 ],
47327 "_from": "elliptic@latest",
47328 "_id": "elliptic@6.4.0",
47329 "_inCache": true,
47330 "_installable": true,
47331 "_location": "/elliptic",
47332 "_nodeVersion": "7.0.0",
47333 "_npmOperationalInternal": {
47334 "host": "packages-18-east.internal.npmjs.com",
47335 "tmp": "tmp/elliptic-6.4.0.tgz_1487798866428_0.30510620190761983"
47336 },
47337 "_npmUser": {
47338 "email": "fedor@indutny.com",
47339 "name": "indutny"
47340 },
47341 "_npmVersion": "3.10.8",
47342 "_phantomChildren": {},
47343 "_requested": {
47344 "name": "elliptic",
47345 "raw": "elliptic",
47346 "rawSpec": "",
47347 "scope": null,
47348 "spec": "latest",
47349 "type": "tag"
47350 },
47351 "_requiredBy": [
47352 "#USER"
47353 ],
47354 "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz",
47355 "_shasum": "cac9af8762c85836187003c8dfe193e5e2eae5df",
47356 "_shrinkwrap": null,
47357 "_spec": "elliptic",
47358 "_where": "/home/ian/git/bitcoin/bitcoinjs-lib-browser",
47359 "author": {
47360 "email": "fedor@indutny.com",
47361 "name": "Fedor Indutny"
47362 },
47363 "bugs": {
47364 "url": "https://github.com/indutny/elliptic/issues"
47365 },
47366 "dependencies": {
47367 "bn.js": "^4.4.0",
47368 "brorand": "^1.0.1",
47369 "hash.js": "^1.0.0",
47370 "hmac-drbg": "^1.0.0",
47371 "inherits": "^2.0.1",
47372 "minimalistic-assert": "^1.0.0",
47373 "minimalistic-crypto-utils": "^1.0.0"
47374 },
47375 "description": "EC cryptography",
47376 "devDependencies": {
47377 "brfs": "^1.4.3",
47378 "coveralls": "^2.11.3",
47379 "grunt": "^0.4.5",
47380 "grunt-browserify": "^5.0.0",
47381 "grunt-cli": "^1.2.0",
47382 "grunt-contrib-connect": "^1.0.0",
47383 "grunt-contrib-copy": "^1.0.0",
47384 "grunt-contrib-uglify": "^1.0.1",
47385 "grunt-mocha-istanbul": "^3.0.1",
47386 "grunt-saucelabs": "^8.6.2",
47387 "istanbul": "^0.4.2",
47388 "jscs": "^2.9.0",
47389 "jshint": "^2.6.0",
47390 "mocha": "^2.1.0"
47391 },
47392 "directories": {},
47393 "dist": {
47394 "shasum": "cac9af8762c85836187003c8dfe193e5e2eae5df",
47395 "tarball": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz"
47396 },
47397 "files": [
47398 "lib"
47399 ],
47400 "gitHead": "6b0d2b76caae91471649c8e21f0b1d3ba0f96090",
47401 "homepage": "https://github.com/indutny/elliptic",
47402 "keywords": [
47403 "EC",
47404 "Elliptic",
47405 "curve",
47406 "Cryptography"
47407 ],
47408 "license": "MIT",
47409 "main": "lib/elliptic.js",
47410 "maintainers": [
47411 {
47412 "email": "fedor@indutny.com",
47413 "name": "indutny"
47414 }
47415 ],
47416 "name": "elliptic",
47417 "optionalDependencies": {},
47418 "readme": "ERROR: No README data found!",
47419 "repository": {
47420 "type": "git",
47421 "url": "git+ssh://git@github.com/indutny/elliptic.git"
47422 },
47423 "scripts": {
47424 "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
47425 "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
47426 "lint": "npm run jscs && npm run jshint",
47427 "test": "npm run lint && npm run unit",
47428 "unit": "istanbul test _mocha --reporter=spec test/index.js",
47429 "version": "grunt dist && git add dist/"
47430 },
47431 "version": "6.4.0"
47432 }
47433
47434 },{}],113:[function(require,module,exports){
47435 (function (Buffer){
47436 'use strict'
47437 var Transform = require('stream').Transform
47438 var inherits = require('inherits')
47439
47440 function HashBase (blockSize) {
47441 Transform.call(this)
47442
47443 this._block = new Buffer(blockSize)
47444 this._blockSize = blockSize
47445 this._blockOffset = 0
47446 this._length = [0, 0, 0, 0]
47447
47448 this._finalized = false
47449 }
47450
47451 inherits(HashBase, Transform)
47452
47453 HashBase.prototype._transform = function (chunk, encoding, callback) {
47454 var error = null
47455 try {
47456 if (encoding !== 'buffer') chunk = new Buffer(chunk, encoding)
47457 this.update(chunk)
47458 } catch (err) {
47459 error = err
47460 }
47461
47462 callback(error)
47463 }
47464
47465 HashBase.prototype._flush = function (callback) {
47466 var error = null
47467 try {
47468 this.push(this._digest())
47469 } catch (err) {
47470 error = err
47471 }
47472
47473 callback(error)
47474 }
47475
47476 HashBase.prototype.update = function (data, encoding) {
47477 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
47478 if (this._finalized) throw new Error('Digest already called')
47479 if (!Buffer.isBuffer(data)) data = new Buffer(data, encoding || 'binary')
47480
47481 // consume data
47482 var block = this._block
47483 var offset = 0
47484 while (this._blockOffset + data.length - offset >= this._blockSize) {
47485 for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]
47486 this._update()
47487 this._blockOffset = 0
47488 }
47489 while (offset < data.length) block[this._blockOffset++] = data[offset++]
47490
47491 // update length
47492 for (var j = 0, carry = data.length * 8; carry > 0; ++j) {
47493 this._length[j] += carry
47494 carry = (this._length[j] / 0x0100000000) | 0
47495 if (carry > 0) this._length[j] -= 0x0100000000 * carry
47496 }
47497
47498 return this
47499 }
47500
47501 HashBase.prototype._update = function (data) {
47502 throw new Error('_update is not implemented')
47503 }
47504
47505 HashBase.prototype.digest = function (encoding) {
47506 if (this._finalized) throw new Error('Digest already called')
47507 this._finalized = true
47508
47509 var digest = this._digest()
47510 if (encoding !== undefined) digest = digest.toString(encoding)
47511 return digest
47512 }
47513
47514 HashBase.prototype._digest = function () {
47515 throw new Error('_digest is not implemented')
47516 }
47517
47518 module.exports = HashBase
47519
47520 }).call(this,require("buffer").Buffer)
47521 },{"buffer":5,"inherits":121,"stream":28}],114:[function(require,module,exports){
47522 var hash = exports;
47523
47524 hash.utils = require('./hash/utils');
47525 hash.common = require('./hash/common');
47526 hash.sha = require('./hash/sha');
47527 hash.ripemd = require('./hash/ripemd');
47528 hash.hmac = require('./hash/hmac');
47529
47530 // Proxy hash functions to the main object
47531 hash.sha1 = hash.sha.sha1;
47532 hash.sha256 = hash.sha.sha256;
47533 hash.sha224 = hash.sha.sha224;
47534 hash.sha384 = hash.sha.sha384;
47535 hash.sha512 = hash.sha.sha512;
47536 hash.ripemd160 = hash.ripemd.ripemd160;
47537
47538 },{"./hash/common":115,"./hash/hmac":116,"./hash/ripemd":117,"./hash/sha":118,"./hash/utils":119}],115:[function(require,module,exports){
47539 var hash = require('../hash');
47540 var utils = hash.utils;
47541 var assert = utils.assert;
47542
47543 function BlockHash() {
47544 this.pending = null;
47545 this.pendingTotal = 0;
47546 this.blockSize = this.constructor.blockSize;
47547 this.outSize = this.constructor.outSize;
47548 this.hmacStrength = this.constructor.hmacStrength;
47549 this.padLength = this.constructor.padLength / 8;
47550 this.endian = 'big';
47551
47552 this._delta8 = this.blockSize / 8;
47553 this._delta32 = this.blockSize / 32;
47554 }
47555 exports.BlockHash = BlockHash;
47556
47557 BlockHash.prototype.update = function update(msg, enc) {
47558 // Convert message to array, pad it, and join into 32bit blocks
47559 msg = utils.toArray(msg, enc);
47560 if (!this.pending)
47561 this.pending = msg;
47562 else
47563 this.pending = this.pending.concat(msg);
47564 this.pendingTotal += msg.length;
47565
47566 // Enough data, try updating
47567 if (this.pending.length >= this._delta8) {
47568 msg = this.pending;
47569
47570 // Process pending data in blocks
47571 var r = msg.length % this._delta8;
47572 this.pending = msg.slice(msg.length - r, msg.length);
47573 if (this.pending.length === 0)
47574 this.pending = null;
47575
47576 msg = utils.join32(msg, 0, msg.length - r, this.endian);
47577 for (var i = 0; i < msg.length; i += this._delta32)
47578 this._update(msg, i, i + this._delta32);
47579 }
47580
47581 return this;
47582 };
47583
47584 BlockHash.prototype.digest = function digest(enc) {
47585 this.update(this._pad());
47586 assert(this.pending === null);
47587
47588 return this._digest(enc);
47589 };
47590
47591 BlockHash.prototype._pad = function pad() {
47592 var len = this.pendingTotal;
47593 var bytes = this._delta8;
47594 var k = bytes - ((len + this.padLength) % bytes);
47595 var res = new Array(k + this.padLength);
47596 res[0] = 0x80;
47597 for (var i = 1; i < k; i++)
47598 res[i] = 0;
47599
47600 // Append length
47601 len <<= 3;
47602 if (this.endian === 'big') {
47603 for (var t = 8; t < this.padLength; t++)
47604 res[i++] = 0;
47605
47606 res[i++] = 0;
47607 res[i++] = 0;
47608 res[i++] = 0;
47609 res[i++] = 0;
47610 res[i++] = (len >>> 24) & 0xff;
47611 res[i++] = (len >>> 16) & 0xff;
47612 res[i++] = (len >>> 8) & 0xff;
47613 res[i++] = len & 0xff;
47614 } else {
47615 res[i++] = len & 0xff;
47616 res[i++] = (len >>> 8) & 0xff;
47617 res[i++] = (len >>> 16) & 0xff;
47618 res[i++] = (len >>> 24) & 0xff;
47619 res[i++] = 0;
47620 res[i++] = 0;
47621 res[i++] = 0;
47622 res[i++] = 0;
47623
47624 for (var t = 8; t < this.padLength; t++)
47625 res[i++] = 0;
47626 }
47627
47628 return res;
47629 };
47630
47631 },{"../hash":114}],116:[function(require,module,exports){
47632 var hmac = exports;
47633
47634 var hash = require('../hash');
47635 var utils = hash.utils;
47636 var assert = utils.assert;
47637
47638 function Hmac(hash, key, enc) {
47639 if (!(this instanceof Hmac))
47640 return new Hmac(hash, key, enc);
47641 this.Hash = hash;
47642 this.blockSize = hash.blockSize / 8;
47643 this.outSize = hash.outSize / 8;
47644 this.inner = null;
47645 this.outer = null;
47646
47647 this._init(utils.toArray(key, enc));
47648 }
47649 module.exports = Hmac;
47650
47651 Hmac.prototype._init = function init(key) {
47652 // Shorten key, if needed
47653 if (key.length > this.blockSize)
47654 key = new this.Hash().update(key).digest();
47655 assert(key.length <= this.blockSize);
47656
47657 // Add padding to key
47658 for (var i = key.length; i < this.blockSize; i++)
47659 key.push(0);
47660
47661 for (var i = 0; i < key.length; i++)
47662 key[i] ^= 0x36;
47663 this.inner = new this.Hash().update(key);
47664
47665 // 0x36 ^ 0x5c = 0x6a
47666 for (var i = 0; i < key.length; i++)
47667 key[i] ^= 0x6a;
47668 this.outer = new this.Hash().update(key);
47669 };
47670
47671 Hmac.prototype.update = function update(msg, enc) {
47672 this.inner.update(msg, enc);
47673 return this;
47674 };
47675
47676 Hmac.prototype.digest = function digest(enc) {
47677 this.outer.update(this.inner.digest());
47678 return this.outer.digest(enc);
47679 };
47680
47681 },{"../hash":114}],117:[function(require,module,exports){
47682 var hash = require('../hash');
47683 var utils = hash.utils;
47684
47685 var rotl32 = utils.rotl32;
47686 var sum32 = utils.sum32;
47687 var sum32_3 = utils.sum32_3;
47688 var sum32_4 = utils.sum32_4;
47689 var BlockHash = hash.common.BlockHash;
47690
47691 function RIPEMD160() {
47692 if (!(this instanceof RIPEMD160))
47693 return new RIPEMD160();
47694
47695 BlockHash.call(this);
47696
47697 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
47698 this.endian = 'little';
47699 }
47700 utils.inherits(RIPEMD160, BlockHash);
47701 exports.ripemd160 = RIPEMD160;
47702
47703 RIPEMD160.blockSize = 512;
47704 RIPEMD160.outSize = 160;
47705 RIPEMD160.hmacStrength = 192;
47706 RIPEMD160.padLength = 64;
47707
47708 RIPEMD160.prototype._update = function update(msg, start) {
47709 var A = this.h[0];
47710 var B = this.h[1];
47711 var C = this.h[2];
47712 var D = this.h[3];
47713 var E = this.h[4];
47714 var Ah = A;
47715 var Bh = B;
47716 var Ch = C;
47717 var Dh = D;
47718 var Eh = E;
47719 for (var j = 0; j < 80; j++) {
47720 var T = sum32(
47721 rotl32(
47722 sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
47723 s[j]),
47724 E);
47725 A = E;
47726 E = D;
47727 D = rotl32(C, 10);
47728 C = B;
47729 B = T;
47730 T = sum32(
47731 rotl32(
47732 sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
47733 sh[j]),
47734 Eh);
47735 Ah = Eh;
47736 Eh = Dh;
47737 Dh = rotl32(Ch, 10);
47738 Ch = Bh;
47739 Bh = T;
47740 }
47741 T = sum32_3(this.h[1], C, Dh);
47742 this.h[1] = sum32_3(this.h[2], D, Eh);
47743 this.h[2] = sum32_3(this.h[3], E, Ah);
47744 this.h[3] = sum32_3(this.h[4], A, Bh);
47745 this.h[4] = sum32_3(this.h[0], B, Ch);
47746 this.h[0] = T;
47747 };
47748
47749 RIPEMD160.prototype._digest = function digest(enc) {
47750 if (enc === 'hex')
47751 return utils.toHex32(this.h, 'little');
47752 else
47753 return utils.split32(this.h, 'little');
47754 };
47755
47756 function f(j, x, y, z) {
47757 if (j <= 15)
47758 return x ^ y ^ z;
47759 else if (j <= 31)
47760 return (x & y) | ((~x) & z);
47761 else if (j <= 47)
47762 return (x | (~y)) ^ z;
47763 else if (j <= 63)
47764 return (x & z) | (y & (~z));
47765 else
47766 return x ^ (y | (~z));
47767 }
47768
47769 function K(j) {
47770 if (j <= 15)
47771 return 0x00000000;
47772 else if (j <= 31)
47773 return 0x5a827999;
47774 else if (j <= 47)
47775 return 0x6ed9eba1;
47776 else if (j <= 63)
47777 return 0x8f1bbcdc;
47778 else
47779 return 0xa953fd4e;
47780 }
47781
47782 function Kh(j) {
47783 if (j <= 15)
47784 return 0x50a28be6;
47785 else if (j <= 31)
47786 return 0x5c4dd124;
47787 else if (j <= 47)
47788 return 0x6d703ef3;
47789 else if (j <= 63)
47790 return 0x7a6d76e9;
47791 else
47792 return 0x00000000;
47793 }
47794
47795 var r = [
47796 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
47797 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
47798 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
47799 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
47800 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
47801 ];
47802
47803 var rh = [
47804 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
47805 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
47806 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
47807 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
47808 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
47809 ];
47810
47811 var s = [
47812 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
47813 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
47814 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
47815 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
47816 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
47817 ];
47818
47819 var sh = [
47820 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
47821 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
47822 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
47823 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
47824 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
47825 ];
47826
47827 },{"../hash":114}],118:[function(require,module,exports){
47828 var hash = require('../hash');
47829 var utils = hash.utils;
47830 var assert = utils.assert;
47831
47832 var rotr32 = utils.rotr32;
47833 var rotl32 = utils.rotl32;
47834 var sum32 = utils.sum32;
47835 var sum32_4 = utils.sum32_4;
47836 var sum32_5 = utils.sum32_5;
47837 var rotr64_hi = utils.rotr64_hi;
47838 var rotr64_lo = utils.rotr64_lo;
47839 var shr64_hi = utils.shr64_hi;
47840 var shr64_lo = utils.shr64_lo;
47841 var sum64 = utils.sum64;
47842 var sum64_hi = utils.sum64_hi;
47843 var sum64_lo = utils.sum64_lo;
47844 var sum64_4_hi = utils.sum64_4_hi;
47845 var sum64_4_lo = utils.sum64_4_lo;
47846 var sum64_5_hi = utils.sum64_5_hi;
47847 var sum64_5_lo = utils.sum64_5_lo;
47848 var BlockHash = hash.common.BlockHash;
47849
47850 var sha256_K = [
47851 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
47852 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
47853 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
47854 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
47855 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
47856 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
47857 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
47858 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
47859 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
47860 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
47861 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
47862 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
47863 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
47864 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
47865 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
47866 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
47867 ];
47868
47869 var sha512_K = [
47870 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
47871 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
47872 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
47873 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
47874 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
47875 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
47876 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
47877 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
47878 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
47879 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
47880 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
47881 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
47882 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
47883 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
47884 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
47885 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
47886 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
47887 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
47888 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
47889 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
47890 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
47891 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
47892 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
47893 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
47894 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
47895 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
47896 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
47897 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
47898 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
47899 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
47900 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
47901 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
47902 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
47903 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
47904 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
47905 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
47906 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
47907 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
47908 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
47909 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
47910 ];
47911
47912 var sha1_K = [
47913 0x5A827999, 0x6ED9EBA1,
47914 0x8F1BBCDC, 0xCA62C1D6
47915 ];
47916
47917 function SHA256() {
47918 if (!(this instanceof SHA256))
47919 return new SHA256();
47920
47921 BlockHash.call(this);
47922 this.h = [ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
47923 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ];
47924 this.k = sha256_K;
47925 this.W = new Array(64);
47926 }
47927 utils.inherits(SHA256, BlockHash);
47928 exports.sha256 = SHA256;
47929
47930 SHA256.blockSize = 512;
47931 SHA256.outSize = 256;
47932 SHA256.hmacStrength = 192;
47933 SHA256.padLength = 64;
47934
47935 SHA256.prototype._update = function _update(msg, start) {
47936 var W = this.W;
47937
47938 for (var i = 0; i < 16; i++)
47939 W[i] = msg[start + i];
47940 for (; i < W.length; i++)
47941 W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
47942
47943 var a = this.h[0];
47944 var b = this.h[1];
47945 var c = this.h[2];
47946 var d = this.h[3];
47947 var e = this.h[4];
47948 var f = this.h[5];
47949 var g = this.h[6];
47950 var h = this.h[7];
47951
47952 assert(this.k.length === W.length);
47953 for (var i = 0; i < W.length; i++) {
47954 var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
47955 var T2 = sum32(s0_256(a), maj32(a, b, c));
47956 h = g;
47957 g = f;
47958 f = e;
47959 e = sum32(d, T1);
47960 d = c;
47961 c = b;
47962 b = a;
47963 a = sum32(T1, T2);
47964 }
47965
47966 this.h[0] = sum32(this.h[0], a);
47967 this.h[1] = sum32(this.h[1], b);
47968 this.h[2] = sum32(this.h[2], c);
47969 this.h[3] = sum32(this.h[3], d);
47970 this.h[4] = sum32(this.h[4], e);
47971 this.h[5] = sum32(this.h[5], f);
47972 this.h[6] = sum32(this.h[6], g);
47973 this.h[7] = sum32(this.h[7], h);
47974 };
47975
47976 SHA256.prototype._digest = function digest(enc) {
47977 if (enc === 'hex')
47978 return utils.toHex32(this.h, 'big');
47979 else
47980 return utils.split32(this.h, 'big');
47981 };
47982
47983 function SHA224() {
47984 if (!(this instanceof SHA224))
47985 return new SHA224();
47986
47987 SHA256.call(this);
47988 this.h = [ 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
47989 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];
47990 }
47991 utils.inherits(SHA224, SHA256);
47992 exports.sha224 = SHA224;
47993
47994 SHA224.blockSize = 512;
47995 SHA224.outSize = 224;
47996 SHA224.hmacStrength = 192;
47997 SHA224.padLength = 64;
47998
47999 SHA224.prototype._digest = function digest(enc) {
48000 // Just truncate output
48001 if (enc === 'hex')
48002 return utils.toHex32(this.h.slice(0, 7), 'big');
48003 else
48004 return utils.split32(this.h.slice(0, 7), 'big');
48005 };
48006
48007 function SHA512() {
48008 if (!(this instanceof SHA512))
48009 return new SHA512();
48010
48011 BlockHash.call(this);
48012 this.h = [ 0x6a09e667, 0xf3bcc908,
48013 0xbb67ae85, 0x84caa73b,
48014 0x3c6ef372, 0xfe94f82b,
48015 0xa54ff53a, 0x5f1d36f1,
48016 0x510e527f, 0xade682d1,
48017 0x9b05688c, 0x2b3e6c1f,
48018 0x1f83d9ab, 0xfb41bd6b,
48019 0x5be0cd19, 0x137e2179 ];
48020 this.k = sha512_K;
48021 this.W = new Array(160);
48022 }
48023 utils.inherits(SHA512, BlockHash);
48024 exports.sha512 = SHA512;
48025
48026 SHA512.blockSize = 1024;
48027 SHA512.outSize = 512;
48028 SHA512.hmacStrength = 192;
48029 SHA512.padLength = 128;
48030
48031 SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
48032 var W = this.W;
48033
48034 // 32 x 32bit words
48035 for (var i = 0; i < 32; i++)
48036 W[i] = msg[start + i];
48037 for (; i < W.length; i += 2) {
48038 var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2
48039 var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
48040 var c1_hi = W[i - 14]; // i - 7
48041 var c1_lo = W[i - 13];
48042 var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15
48043 var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
48044 var c3_hi = W[i - 32]; // i - 16
48045 var c3_lo = W[i - 31];
48046
48047 W[i] = sum64_4_hi(c0_hi, c0_lo,
48048 c1_hi, c1_lo,
48049 c2_hi, c2_lo,
48050 c3_hi, c3_lo);
48051 W[i + 1] = sum64_4_lo(c0_hi, c0_lo,
48052 c1_hi, c1_lo,
48053 c2_hi, c2_lo,
48054 c3_hi, c3_lo);
48055 }
48056 };
48057
48058 SHA512.prototype._update = function _update(msg, start) {
48059 this._prepareBlock(msg, start);
48060
48061 var W = this.W;
48062
48063 var ah = this.h[0];
48064 var al = this.h[1];
48065 var bh = this.h[2];
48066 var bl = this.h[3];
48067 var ch = this.h[4];
48068 var cl = this.h[5];
48069 var dh = this.h[6];
48070 var dl = this.h[7];
48071 var eh = this.h[8];
48072 var el = this.h[9];
48073 var fh = this.h[10];
48074 var fl = this.h[11];
48075 var gh = this.h[12];
48076 var gl = this.h[13];
48077 var hh = this.h[14];
48078 var hl = this.h[15];
48079
48080 assert(this.k.length === W.length);
48081 for (var i = 0; i < W.length; i += 2) {
48082 var c0_hi = hh;
48083 var c0_lo = hl;
48084 var c1_hi = s1_512_hi(eh, el);
48085 var c1_lo = s1_512_lo(eh, el);
48086 var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
48087 var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
48088 var c3_hi = this.k[i];
48089 var c3_lo = this.k[i + 1];
48090 var c4_hi = W[i];
48091 var c4_lo = W[i + 1];
48092
48093 var T1_hi = sum64_5_hi(c0_hi, c0_lo,
48094 c1_hi, c1_lo,
48095 c2_hi, c2_lo,
48096 c3_hi, c3_lo,
48097 c4_hi, c4_lo);
48098 var T1_lo = sum64_5_lo(c0_hi, c0_lo,
48099 c1_hi, c1_lo,
48100 c2_hi, c2_lo,
48101 c3_hi, c3_lo,
48102 c4_hi, c4_lo);
48103
48104 var c0_hi = s0_512_hi(ah, al);
48105 var c0_lo = s0_512_lo(ah, al);
48106 var c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
48107 var c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
48108
48109 var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
48110 var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
48111
48112 hh = gh;
48113 hl = gl;
48114
48115 gh = fh;
48116 gl = fl;
48117
48118 fh = eh;
48119 fl = el;
48120
48121 eh = sum64_hi(dh, dl, T1_hi, T1_lo);
48122 el = sum64_lo(dl, dl, T1_hi, T1_lo);
48123
48124 dh = ch;
48125 dl = cl;
48126
48127 ch = bh;
48128 cl = bl;
48129
48130 bh = ah;
48131 bl = al;
48132
48133 ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
48134 al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
48135 }
48136
48137 sum64(this.h, 0, ah, al);
48138 sum64(this.h, 2, bh, bl);
48139 sum64(this.h, 4, ch, cl);
48140 sum64(this.h, 6, dh, dl);
48141 sum64(this.h, 8, eh, el);
48142 sum64(this.h, 10, fh, fl);
48143 sum64(this.h, 12, gh, gl);
48144 sum64(this.h, 14, hh, hl);
48145 };
48146
48147 SHA512.prototype._digest = function digest(enc) {
48148 if (enc === 'hex')
48149 return utils.toHex32(this.h, 'big');
48150 else
48151 return utils.split32(this.h, 'big');
48152 };
48153
48154 function SHA384() {
48155 if (!(this instanceof SHA384))
48156 return new SHA384();
48157
48158 SHA512.call(this);
48159 this.h = [ 0xcbbb9d5d, 0xc1059ed8,
48160 0x629a292a, 0x367cd507,
48161 0x9159015a, 0x3070dd17,
48162 0x152fecd8, 0xf70e5939,
48163 0x67332667, 0xffc00b31,
48164 0x8eb44a87, 0x68581511,
48165 0xdb0c2e0d, 0x64f98fa7,
48166 0x47b5481d, 0xbefa4fa4 ];
48167 }
48168 utils.inherits(SHA384, SHA512);
48169 exports.sha384 = SHA384;
48170
48171 SHA384.blockSize = 1024;
48172 SHA384.outSize = 384;
48173 SHA384.hmacStrength = 192;
48174 SHA384.padLength = 128;
48175
48176 SHA384.prototype._digest = function digest(enc) {
48177 if (enc === 'hex')
48178 return utils.toHex32(this.h.slice(0, 12), 'big');
48179 else
48180 return utils.split32(this.h.slice(0, 12), 'big');
48181 };
48182
48183 function SHA1() {
48184 if (!(this instanceof SHA1))
48185 return new SHA1();
48186
48187 BlockHash.call(this);
48188 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe,
48189 0x10325476, 0xc3d2e1f0 ];
48190 this.W = new Array(80);
48191 }
48192
48193 utils.inherits(SHA1, BlockHash);
48194 exports.sha1 = SHA1;
48195
48196 SHA1.blockSize = 512;
48197 SHA1.outSize = 160;
48198 SHA1.hmacStrength = 80;
48199 SHA1.padLength = 64;
48200
48201 SHA1.prototype._update = function _update(msg, start) {
48202 var W = this.W;
48203
48204 for (var i = 0; i < 16; i++)
48205 W[i] = msg[start + i];
48206
48207 for(; i < W.length; i++)
48208 W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
48209
48210 var a = this.h[0];
48211 var b = this.h[1];
48212 var c = this.h[2];
48213 var d = this.h[3];
48214 var e = this.h[4];
48215
48216 for (var i = 0; i < W.length; i++) {
48217 var s = ~~(i / 20);
48218 var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
48219 e = d;
48220 d = c;
48221 c = rotl32(b, 30);
48222 b = a;
48223 a = t;
48224 }
48225
48226 this.h[0] = sum32(this.h[0], a);
48227 this.h[1] = sum32(this.h[1], b);
48228 this.h[2] = sum32(this.h[2], c);
48229 this.h[3] = sum32(this.h[3], d);
48230 this.h[4] = sum32(this.h[4], e);
48231 };
48232
48233 SHA1.prototype._digest = function digest(enc) {
48234 if (enc === 'hex')
48235 return utils.toHex32(this.h, 'big');
48236 else
48237 return utils.split32(this.h, 'big');
48238 };
48239
48240 function ch32(x, y, z) {
48241 return (x & y) ^ ((~x) & z);
48242 }
48243
48244 function maj32(x, y, z) {
48245 return (x & y) ^ (x & z) ^ (y & z);
48246 }
48247
48248 function p32(x, y, z) {
48249 return x ^ y ^ z;
48250 }
48251
48252 function s0_256(x) {
48253 return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
48254 }
48255
48256 function s1_256(x) {
48257 return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
48258 }
48259
48260 function g0_256(x) {
48261 return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);
48262 }
48263
48264 function g1_256(x) {
48265 return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
48266 }
48267
48268 function ft_1(s, x, y, z) {
48269 if (s === 0)
48270 return ch32(x, y, z);
48271 if (s === 1 || s === 3)
48272 return p32(x, y, z);
48273 if (s === 2)
48274 return maj32(x, y, z);
48275 }
48276
48277 function ch64_hi(xh, xl, yh, yl, zh, zl) {
48278 var r = (xh & yh) ^ ((~xh) & zh);
48279 if (r < 0)
48280 r += 0x100000000;
48281 return r;
48282 }
48283
48284 function ch64_lo(xh, xl, yh, yl, zh, zl) {
48285 var r = (xl & yl) ^ ((~xl) & zl);
48286 if (r < 0)
48287 r += 0x100000000;
48288 return r;
48289 }
48290
48291 function maj64_hi(xh, xl, yh, yl, zh, zl) {
48292 var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);
48293 if (r < 0)
48294 r += 0x100000000;
48295 return r;
48296 }
48297
48298 function maj64_lo(xh, xl, yh, yl, zh, zl) {
48299 var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);
48300 if (r < 0)
48301 r += 0x100000000;
48302 return r;
48303 }
48304
48305 function s0_512_hi(xh, xl) {
48306 var c0_hi = rotr64_hi(xh, xl, 28);
48307 var c1_hi = rotr64_hi(xl, xh, 2); // 34
48308 var c2_hi = rotr64_hi(xl, xh, 7); // 39
48309
48310 var r = c0_hi ^ c1_hi ^ c2_hi;
48311 if (r < 0)
48312 r += 0x100000000;
48313 return r;
48314 }
48315
48316 function s0_512_lo(xh, xl) {
48317 var c0_lo = rotr64_lo(xh, xl, 28);
48318 var c1_lo = rotr64_lo(xl, xh, 2); // 34
48319 var c2_lo = rotr64_lo(xl, xh, 7); // 39
48320
48321 var r = c0_lo ^ c1_lo ^ c2_lo;
48322 if (r < 0)
48323 r += 0x100000000;
48324 return r;
48325 }
48326
48327 function s1_512_hi(xh, xl) {
48328 var c0_hi = rotr64_hi(xh, xl, 14);
48329 var c1_hi = rotr64_hi(xh, xl, 18);
48330 var c2_hi = rotr64_hi(xl, xh, 9); // 41
48331
48332 var r = c0_hi ^ c1_hi ^ c2_hi;
48333 if (r < 0)
48334 r += 0x100000000;
48335 return r;
48336 }
48337
48338 function s1_512_lo(xh, xl) {
48339 var c0_lo = rotr64_lo(xh, xl, 14);
48340 var c1_lo = rotr64_lo(xh, xl, 18);
48341 var c2_lo = rotr64_lo(xl, xh, 9); // 41
48342
48343 var r = c0_lo ^ c1_lo ^ c2_lo;
48344 if (r < 0)
48345 r += 0x100000000;
48346 return r;
48347 }
48348
48349 function g0_512_hi(xh, xl) {
48350 var c0_hi = rotr64_hi(xh, xl, 1);
48351 var c1_hi = rotr64_hi(xh, xl, 8);
48352 var c2_hi = shr64_hi(xh, xl, 7);
48353
48354 var r = c0_hi ^ c1_hi ^ c2_hi;
48355 if (r < 0)
48356 r += 0x100000000;
48357 return r;
48358 }
48359
48360 function g0_512_lo(xh, xl) {
48361 var c0_lo = rotr64_lo(xh, xl, 1);
48362 var c1_lo = rotr64_lo(xh, xl, 8);
48363 var c2_lo = shr64_lo(xh, xl, 7);
48364
48365 var r = c0_lo ^ c1_lo ^ c2_lo;
48366 if (r < 0)
48367 r += 0x100000000;
48368 return r;
48369 }
48370
48371 function g1_512_hi(xh, xl) {
48372 var c0_hi = rotr64_hi(xh, xl, 19);
48373 var c1_hi = rotr64_hi(xl, xh, 29); // 61
48374 var c2_hi = shr64_hi(xh, xl, 6);
48375
48376 var r = c0_hi ^ c1_hi ^ c2_hi;
48377 if (r < 0)
48378 r += 0x100000000;
48379 return r;
48380 }
48381
48382 function g1_512_lo(xh, xl) {
48383 var c0_lo = rotr64_lo(xh, xl, 19);
48384 var c1_lo = rotr64_lo(xl, xh, 29); // 61
48385 var c2_lo = shr64_lo(xh, xl, 6);
48386
48387 var r = c0_lo ^ c1_lo ^ c2_lo;
48388 if (r < 0)
48389 r += 0x100000000;
48390 return r;
48391 }
48392
48393 },{"../hash":114}],119:[function(require,module,exports){
48394 var utils = exports;
48395 var inherits = require('inherits');
48396
48397 function toArray(msg, enc) {
48398 if (Array.isArray(msg))
48399 return msg.slice();
48400 if (!msg)
48401 return [];
48402 var res = [];
48403 if (typeof msg === 'string') {
48404 if (!enc) {
48405 for (var i = 0; i < msg.length; i++) {
48406 var c = msg.charCodeAt(i);
48407 var hi = c >> 8;
48408 var lo = c & 0xff;
48409 if (hi)
48410 res.push(hi, lo);
48411 else
48412 res.push(lo);
48413 }
48414 } else if (enc === 'hex') {
48415 msg = msg.replace(/[^a-z0-9]+/ig, '');
48416 if (msg.length % 2 !== 0)
48417 msg = '0' + msg;
48418 for (var i = 0; i < msg.length; i += 2)
48419 res.push(parseInt(msg[i] + msg[i + 1], 16));
48420 }
48421 } else {
48422 for (var i = 0; i < msg.length; i++)
48423 res[i] = msg[i] | 0;
48424 }
48425 return res;
48426 }
48427 utils.toArray = toArray;
48428
48429 function toHex(msg) {
48430 var res = '';
48431 for (var i = 0; i < msg.length; i++)
48432 res += zero2(msg[i].toString(16));
48433 return res;
48434 }
48435 utils.toHex = toHex;
48436
48437 function htonl(w) {
48438 var res = (w >>> 24) |
48439 ((w >>> 8) & 0xff00) |
48440 ((w << 8) & 0xff0000) |
48441 ((w & 0xff) << 24);
48442 return res >>> 0;
48443 }
48444 utils.htonl = htonl;
48445
48446 function toHex32(msg, endian) {
48447 var res = '';
48448 for (var i = 0; i < msg.length; i++) {
48449 var w = msg[i];
48450 if (endian === 'little')
48451 w = htonl(w);
48452 res += zero8(w.toString(16));
48453 }
48454 return res;
48455 }
48456 utils.toHex32 = toHex32;
48457
48458 function zero2(word) {
48459 if (word.length === 1)
48460 return '0' + word;
48461 else
48462 return word;
48463 }
48464 utils.zero2 = zero2;
48465
48466 function zero8(word) {
48467 if (word.length === 7)
48468 return '0' + word;
48469 else if (word.length === 6)
48470 return '00' + word;
48471 else if (word.length === 5)
48472 return '000' + word;
48473 else if (word.length === 4)
48474 return '0000' + word;
48475 else if (word.length === 3)
48476 return '00000' + word;
48477 else if (word.length === 2)
48478 return '000000' + word;
48479 else if (word.length === 1)
48480 return '0000000' + word;
48481 else
48482 return word;
48483 }
48484 utils.zero8 = zero8;
48485
48486 function join32(msg, start, end, endian) {
48487 var len = end - start;
48488 assert(len % 4 === 0);
48489 var res = new Array(len / 4);
48490 for (var i = 0, k = start; i < res.length; i++, k += 4) {
48491 var w;
48492 if (endian === 'big')
48493 w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
48494 else
48495 w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
48496 res[i] = w >>> 0;
48497 }
48498 return res;
48499 }
48500 utils.join32 = join32;
48501
48502 function split32(msg, endian) {
48503 var res = new Array(msg.length * 4);
48504 for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
48505 var m = msg[i];
48506 if (endian === 'big') {
48507 res[k] = m >>> 24;
48508 res[k + 1] = (m >>> 16) & 0xff;
48509 res[k + 2] = (m >>> 8) & 0xff;
48510 res[k + 3] = m & 0xff;
48511 } else {
48512 res[k + 3] = m >>> 24;
48513 res[k + 2] = (m >>> 16) & 0xff;
48514 res[k + 1] = (m >>> 8) & 0xff;
48515 res[k] = m & 0xff;
48516 }
48517 }
48518 return res;
48519 }
48520 utils.split32 = split32;
48521
48522 function rotr32(w, b) {
48523 return (w >>> b) | (w << (32 - b));
48524 }
48525 utils.rotr32 = rotr32;
48526
48527 function rotl32(w, b) {
48528 return (w << b) | (w >>> (32 - b));
48529 }
48530 utils.rotl32 = rotl32;
48531
48532 function sum32(a, b) {
48533 return (a + b) >>> 0;
48534 }
48535 utils.sum32 = sum32;
48536
48537 function sum32_3(a, b, c) {
48538 return (a + b + c) >>> 0;
48539 }
48540 utils.sum32_3 = sum32_3;
48541
48542 function sum32_4(a, b, c, d) {
48543 return (a + b + c + d) >>> 0;
48544 }
48545 utils.sum32_4 = sum32_4;
48546
48547 function sum32_5(a, b, c, d, e) {
48548 return (a + b + c + d + e) >>> 0;
48549 }
48550 utils.sum32_5 = sum32_5;
48551
48552 function assert(cond, msg) {
48553 if (!cond)
48554 throw new Error(msg || 'Assertion failed');
48555 }
48556 utils.assert = assert;
48557
48558 utils.inherits = inherits;
48559
48560 function sum64(buf, pos, ah, al) {
48561 var bh = buf[pos];
48562 var bl = buf[pos + 1];
48563
48564 var lo = (al + bl) >>> 0;
48565 var hi = (lo < al ? 1 : 0) + ah + bh;
48566 buf[pos] = hi >>> 0;
48567 buf[pos + 1] = lo;
48568 }
48569 exports.sum64 = sum64;
48570
48571 function sum64_hi(ah, al, bh, bl) {
48572 var lo = (al + bl) >>> 0;
48573 var hi = (lo < al ? 1 : 0) + ah + bh;
48574 return hi >>> 0;
48575 };
48576 exports.sum64_hi = sum64_hi;
48577
48578 function sum64_lo(ah, al, bh, bl) {
48579 var lo = al + bl;
48580 return lo >>> 0;
48581 };
48582 exports.sum64_lo = sum64_lo;
48583
48584 function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
48585 var carry = 0;
48586 var lo = al;
48587 lo = (lo + bl) >>> 0;
48588 carry += lo < al ? 1 : 0;
48589 lo = (lo + cl) >>> 0;
48590 carry += lo < cl ? 1 : 0;
48591 lo = (lo + dl) >>> 0;
48592 carry += lo < dl ? 1 : 0;
48593
48594 var hi = ah + bh + ch + dh + carry;
48595 return hi >>> 0;
48596 };
48597 exports.sum64_4_hi = sum64_4_hi;
48598
48599 function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
48600 var lo = al + bl + cl + dl;
48601 return lo >>> 0;
48602 };
48603 exports.sum64_4_lo = sum64_4_lo;
48604
48605 function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
48606 var carry = 0;
48607 var lo = al;
48608 lo = (lo + bl) >>> 0;
48609 carry += lo < al ? 1 : 0;
48610 lo = (lo + cl) >>> 0;
48611 carry += lo < cl ? 1 : 0;
48612 lo = (lo + dl) >>> 0;
48613 carry += lo < dl ? 1 : 0;
48614 lo = (lo + el) >>> 0;
48615 carry += lo < el ? 1 : 0;
48616
48617 var hi = ah + bh + ch + dh + eh + carry;
48618 return hi >>> 0;
48619 };
48620 exports.sum64_5_hi = sum64_5_hi;
48621
48622 function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
48623 var lo = al + bl + cl + dl + el;
48624
48625 return lo >>> 0;
48626 };
48627 exports.sum64_5_lo = sum64_5_lo;
48628
48629 function rotr64_hi(ah, al, num) {
48630 var r = (al << (32 - num)) | (ah >>> num);
48631 return r >>> 0;
48632 };
48633 exports.rotr64_hi = rotr64_hi;
48634
48635 function rotr64_lo(ah, al, num) {
48636 var r = (ah << (32 - num)) | (al >>> num);
48637 return r >>> 0;
48638 };
48639 exports.rotr64_lo = rotr64_lo;
48640
48641 function shr64_hi(ah, al, num) {
48642 return ah >>> num;
48643 };
48644 exports.shr64_hi = shr64_hi;
48645
48646 function shr64_lo(ah, al, num) {
48647 var r = (ah << (32 - num)) | (al >>> num);
48648 return r >>> 0;
48649 };
48650 exports.shr64_lo = shr64_lo;
48651
48652 },{"inherits":121}],120:[function(require,module,exports){
48653 'use strict';
48654
48655 var hash = require('hash.js');
48656 var utils = require('minimalistic-crypto-utils');
48657 var assert = require('minimalistic-assert');
48658
48659 function HmacDRBG(options) {
48660 if (!(this instanceof HmacDRBG))
48661 return new HmacDRBG(options);
48662 this.hash = options.hash;
48663 this.predResist = !!options.predResist;
48664
48665 this.outLen = this.hash.outSize;
48666 this.minEntropy = options.minEntropy || this.hash.hmacStrength;
48667
48668 this._reseed = null;
48669 this.reseedInterval = null;
48670 this.K = null;
48671 this.V = null;
48672
48673 var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');
48674 var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');
48675 var pers = utils.toArray(options.pers, options.persEnc || 'hex');
48676 assert(entropy.length >= (this.minEntropy / 8),
48677 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
48678 this._init(entropy, nonce, pers);
48679 }
48680 module.exports = HmacDRBG;
48681
48682 HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
48683 var seed = entropy.concat(nonce).concat(pers);
48684
48685 this.K = new Array(this.outLen / 8);
48686 this.V = new Array(this.outLen / 8);
48687 for (var i = 0; i < this.V.length; i++) {
48688 this.K[i] = 0x00;
48689 this.V[i] = 0x01;
48690 }
48691
48692 this._update(seed);
48693 this._reseed = 1;
48694 this.reseedInterval = 0x1000000000000; // 2^48
48695 };
48696
48697 HmacDRBG.prototype._hmac = function hmac() {
48698 return new hash.hmac(this.hash, this.K);
48699 };
48700
48701 HmacDRBG.prototype._update = function update(seed) {
48702 var kmac = this._hmac()
48703 .update(this.V)
48704 .update([ 0x00 ]);
48705 if (seed)
48706 kmac = kmac.update(seed);
48707 this.K = kmac.digest();
48708 this.V = this._hmac().update(this.V).digest();
48709 if (!seed)
48710 return;
48711
48712 this.K = this._hmac()
48713 .update(this.V)
48714 .update([ 0x01 ])
48715 .update(seed)
48716 .digest();
48717 this.V = this._hmac().update(this.V).digest();
48718 };
48719
48720 HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
48721 // Optional entropy enc
48722 if (typeof entropyEnc !== 'string') {
48723 addEnc = add;
48724 add = entropyEnc;
48725 entropyEnc = null;
48726 }
48727
48728 entropy = utils.toArray(entropy, entropyEnc);
48729 add = utils.toArray(add, addEnc);
48730
48731 assert(entropy.length >= (this.minEntropy / 8),
48732 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
48733
48734 this._update(entropy.concat(add || []));
48735 this._reseed = 1;
48736 };
48737
48738 HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
48739 if (this._reseed > this.reseedInterval)
48740 throw new Error('Reseed is required');
48741
48742 // Optional encoding
48743 if (typeof enc !== 'string') {
48744 addEnc = add;
48745 add = enc;
48746 enc = null;
48747 }
48748
48749 // Optional additional data
48750 if (add) {
48751 add = utils.toArray(add, addEnc || 'hex');
48752 this._update(add);
48753 }
48754
48755 var temp = [];
48756 while (temp.length < len) {
48757 this.V = this._hmac().update(this.V).digest();
48758 temp = temp.concat(this.V);
48759 }
48760
48761 var res = temp.slice(0, len);
48762 this._update(add);
48763 this._reseed++;
48764 return utils.encode(res, enc);
48765 };
48766
48767 },{"hash.js":114,"minimalistic-assert":123,"minimalistic-crypto-utils":124}],121:[function(require,module,exports){
48768 arguments[4][9][0].apply(exports,arguments)
48769 },{"dup":9}],122:[function(require,module,exports){
48770 (function (Buffer){
48771 // constant-space merkle root calculation algorithm
48772 module.exports = function fastRoot (values, digestFn) {
48773 if (!Array.isArray(values)) throw TypeError('Expected values Array')
48774 if (typeof digestFn !== 'function') throw TypeError('Expected digest Function')
48775
48776 var length = values.length
48777 var results = values.concat()
48778
48779 while (length > 1) {
48780 var j = 0
48781
48782 for (var i = 0; i < length; i += 2, ++j) {
48783 var left = results[i]
48784 var right = i + 1 === length ? left : results[i + 1]
48785 var data = Buffer.concat([left, right])
48786
48787 results[j] = digestFn(data)
48788 }
48789
48790 length = j
48791 }
48792
48793 return results[0]
48794 }
48795
48796 }).call(this,require("buffer").Buffer)
48797 },{"buffer":5}],123:[function(require,module,exports){
48798 module.exports = assert;
48799
48800 function assert(val, msg) {
48801 if (!val)
48802 throw new Error(msg || 'Assertion failed');
48803 }
48804
48805 assert.equal = function assertEqual(l, r, msg) {
48806 if (l != r)
48807 throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));
48808 };
48809
48810 },{}],124:[function(require,module,exports){
48811 'use strict';
48812
48813 var utils = exports;
48814
48815 function toArray(msg, enc) {
48816 if (Array.isArray(msg))
48817 return msg.slice();
48818 if (!msg)
48819 return [];
48820 var res = [];
48821 if (typeof msg !== 'string') {
48822 for (var i = 0; i < msg.length; i++)
48823 res[i] = msg[i] | 0;
48824 return res;
48825 }
48826 if (enc === 'hex') {
48827 msg = msg.replace(/[^a-z0-9]+/ig, '');
48828 if (msg.length % 2 !== 0)
48829 msg = '0' + msg;
48830 for (var i = 0; i < msg.length; i += 2)
48831 res.push(parseInt(msg[i] + msg[i + 1], 16));
48832 } else {
48833 for (var i = 0; i < msg.length; i++) {
48834 var c = msg.charCodeAt(i);
48835 var hi = c >> 8;
48836 var lo = c & 0xff;
48837 if (hi)
48838 res.push(hi, lo);
48839 else
48840 res.push(lo);
48841 }
48842 }
48843 return res;
48844 }
48845 utils.toArray = toArray;
48846
48847 function zero2(word) {
48848 if (word.length === 1)
48849 return '0' + word;
48850 else
48851 return word;
48852 }
48853 utils.zero2 = zero2;
48854
48855 function toHex(msg) {
48856 var res = '';
48857 for (var i = 0; i < msg.length; i++)
48858 res += zero2(msg[i].toString(16));
48859 return res;
48860 }
48861 utils.toHex = toHex;
48862
48863 utils.encode = function encode(arr, enc) {
48864 if (enc === 'hex')
48865 return toHex(arr);
48866 else
48867 return arr;
48868 };
48869
48870 },{}],125:[function(require,module,exports){
48871 var OPS = require('bitcoin-ops')
48872
48873 function encodingLength (i) {
48874 return i < OPS.OP_PUSHDATA1 ? 1
48875 : i <= 0xff ? 2
48876 : i <= 0xffff ? 3
48877 : 5
48878 }
48879
48880 function encode (buffer, number, offset) {
48881 var size = encodingLength(number)
48882
48883 // ~6 bit
48884 if (size === 1) {
48885 buffer.writeUInt8(number, offset)
48886
48887 // 8 bit
48888 } else if (size === 2) {
48889 buffer.writeUInt8(OPS.OP_PUSHDATA1, offset)
48890 buffer.writeUInt8(number, offset + 1)
48891
48892 // 16 bit
48893 } else if (size === 3) {
48894 buffer.writeUInt8(OPS.OP_PUSHDATA2, offset)
48895 buffer.writeUInt16LE(number, offset + 1)
48896
48897 // 32 bit
48898 } else {
48899 buffer.writeUInt8(OPS.OP_PUSHDATA4, offset)
48900 buffer.writeUInt32LE(number, offset + 1)
48901 }
48902
48903 return size
48904 }
48905
48906 function decode (buffer, offset) {
48907 var opcode = buffer.readUInt8(offset)
48908 var number, size
48909
48910 // ~6 bit
48911 if (opcode < OPS.OP_PUSHDATA1) {
48912 number = opcode
48913 size = 1
48914
48915 // 8 bit
48916 } else if (opcode === OPS.OP_PUSHDATA1) {
48917 if (offset + 2 > buffer.length) return null
48918 number = buffer.readUInt8(offset + 1)
48919 size = 2
48920
48921 // 16 bit
48922 } else if (opcode === OPS.OP_PUSHDATA2) {
48923 if (offset + 3 > buffer.length) return null
48924 number = buffer.readUInt16LE(offset + 1)
48925 size = 3
48926
48927 // 32 bit
48928 } else {
48929 if (offset + 5 > buffer.length) return null
48930 if (opcode !== OPS.OP_PUSHDATA4) throw new Error('Unexpected opcode')
48931
48932 number = buffer.readUInt32LE(offset + 1)
48933 size = 5
48934 }
48935
48936 return {
48937 opcode: opcode,
48938 number: number,
48939 size: size
48940 }
48941 }
48942
48943 module.exports = {
48944 encodingLength: encodingLength,
48945 encode: encode,
48946 decode: decode
48947 }
48948
48949 },{"bitcoin-ops":42}],126:[function(require,module,exports){
48950 (function (process,global){
48951 'use strict'
48952
48953 function oldBrowser () {
48954 throw new Error('secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11')
48955 }
48956
48957 var Buffer = require('safe-buffer').Buffer
48958 var crypto = global.crypto || global.msCrypto
48959
48960 if (crypto && crypto.getRandomValues) {
48961 module.exports = randomBytes
48962 } else {
48963 module.exports = oldBrowser
48964 }
48965
48966 function randomBytes (size, cb) {
48967 // phantomjs needs to throw
48968 if (size > 65536) throw new Error('requested too many random bytes')
48969 // in case browserify isn't using the Uint8Array version
48970 var rawBytes = new global.Uint8Array(size)
48971
48972 // This will not work in older browsers.
48973 // See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
48974 if (size > 0) { // getRandomValues fails on IE if size == 0
48975 crypto.getRandomValues(rawBytes)
48976 }
48977
48978 // XXX: phantomjs doesn't like a buffer being passed here
48979 var bytes = Buffer.from(rawBytes.buffer)
48980
48981 if (typeof cb === 'function') {
48982 return process.nextTick(function () {
48983 cb(null, bytes)
48984 })
48985 }
48986
48987 return bytes
48988 }
48989
48990 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
48991 },{"_process":13,"safe-buffer":128}],127:[function(require,module,exports){
48992 (function (Buffer){
48993 'use strict'
48994 var inherits = require('inherits')
48995 var HashBase = require('hash-base')
48996
48997 function RIPEMD160 () {
48998 HashBase.call(this, 64)
48999
49000 // state
49001 this._a = 0x67452301
49002 this._b = 0xefcdab89
49003 this._c = 0x98badcfe
49004 this._d = 0x10325476
49005 this._e = 0xc3d2e1f0
49006 }
49007
49008 inherits(RIPEMD160, HashBase)
49009
49010 RIPEMD160.prototype._update = function () {
49011 var m = new Array(16)
49012 for (var i = 0; i < 16; ++i) m[i] = this._block.readInt32LE(i * 4)
49013
49014 var al = this._a
49015 var bl = this._b
49016 var cl = this._c
49017 var dl = this._d
49018 var el = this._e
49019
49020 // Mj = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
49021 // K = 0x00000000
49022 // Sj = 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8
49023 al = fn1(al, bl, cl, dl, el, m[0], 0x00000000, 11); cl = rotl(cl, 10)
49024 el = fn1(el, al, bl, cl, dl, m[1], 0x00000000, 14); bl = rotl(bl, 10)
49025 dl = fn1(dl, el, al, bl, cl, m[2], 0x00000000, 15); al = rotl(al, 10)
49026 cl = fn1(cl, dl, el, al, bl, m[3], 0x00000000, 12); el = rotl(el, 10)
49027 bl = fn1(bl, cl, dl, el, al, m[4], 0x00000000, 5); dl = rotl(dl, 10)
49028 al = fn1(al, bl, cl, dl, el, m[5], 0x00000000, 8); cl = rotl(cl, 10)
49029 el = fn1(el, al, bl, cl, dl, m[6], 0x00000000, 7); bl = rotl(bl, 10)
49030 dl = fn1(dl, el, al, bl, cl, m[7], 0x00000000, 9); al = rotl(al, 10)
49031 cl = fn1(cl, dl, el, al, bl, m[8], 0x00000000, 11); el = rotl(el, 10)
49032 bl = fn1(bl, cl, dl, el, al, m[9], 0x00000000, 13); dl = rotl(dl, 10)
49033 al = fn1(al, bl, cl, dl, el, m[10], 0x00000000, 14); cl = rotl(cl, 10)
49034 el = fn1(el, al, bl, cl, dl, m[11], 0x00000000, 15); bl = rotl(bl, 10)
49035 dl = fn1(dl, el, al, bl, cl, m[12], 0x00000000, 6); al = rotl(al, 10)
49036 cl = fn1(cl, dl, el, al, bl, m[13], 0x00000000, 7); el = rotl(el, 10)
49037 bl = fn1(bl, cl, dl, el, al, m[14], 0x00000000, 9); dl = rotl(dl, 10)
49038 al = fn1(al, bl, cl, dl, el, m[15], 0x00000000, 8); cl = rotl(cl, 10)
49039
49040 // Mj = 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8
49041 // K = 0x5a827999
49042 // Sj = 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12
49043 el = fn2(el, al, bl, cl, dl, m[7], 0x5a827999, 7); bl = rotl(bl, 10)
49044 dl = fn2(dl, el, al, bl, cl, m[4], 0x5a827999, 6); al = rotl(al, 10)
49045 cl = fn2(cl, dl, el, al, bl, m[13], 0x5a827999, 8); el = rotl(el, 10)
49046 bl = fn2(bl, cl, dl, el, al, m[1], 0x5a827999, 13); dl = rotl(dl, 10)
49047 al = fn2(al, bl, cl, dl, el, m[10], 0x5a827999, 11); cl = rotl(cl, 10)
49048 el = fn2(el, al, bl, cl, dl, m[6], 0x5a827999, 9); bl = rotl(bl, 10)
49049 dl = fn2(dl, el, al, bl, cl, m[15], 0x5a827999, 7); al = rotl(al, 10)
49050 cl = fn2(cl, dl, el, al, bl, m[3], 0x5a827999, 15); el = rotl(el, 10)
49051 bl = fn2(bl, cl, dl, el, al, m[12], 0x5a827999, 7); dl = rotl(dl, 10)
49052 al = fn2(al, bl, cl, dl, el, m[0], 0x5a827999, 12); cl = rotl(cl, 10)
49053 el = fn2(el, al, bl, cl, dl, m[9], 0x5a827999, 15); bl = rotl(bl, 10)
49054 dl = fn2(dl, el, al, bl, cl, m[5], 0x5a827999, 9); al = rotl(al, 10)
49055 cl = fn2(cl, dl, el, al, bl, m[2], 0x5a827999, 11); el = rotl(el, 10)
49056 bl = fn2(bl, cl, dl, el, al, m[14], 0x5a827999, 7); dl = rotl(dl, 10)
49057 al = fn2(al, bl, cl, dl, el, m[11], 0x5a827999, 13); cl = rotl(cl, 10)
49058 el = fn2(el, al, bl, cl, dl, m[8], 0x5a827999, 12); bl = rotl(bl, 10)
49059
49060 // Mj = 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12
49061 // K = 0x6ed9eba1
49062 // Sj = 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5
49063 dl = fn3(dl, el, al, bl, cl, m[3], 0x6ed9eba1, 11); al = rotl(al, 10)
49064 cl = fn3(cl, dl, el, al, bl, m[10], 0x6ed9eba1, 13); el = rotl(el, 10)
49065 bl = fn3(bl, cl, dl, el, al, m[14], 0x6ed9eba1, 6); dl = rotl(dl, 10)
49066 al = fn3(al, bl, cl, dl, el, m[4], 0x6ed9eba1, 7); cl = rotl(cl, 10)
49067 el = fn3(el, al, bl, cl, dl, m[9], 0x6ed9eba1, 14); bl = rotl(bl, 10)
49068 dl = fn3(dl, el, al, bl, cl, m[15], 0x6ed9eba1, 9); al = rotl(al, 10)
49069 cl = fn3(cl, dl, el, al, bl, m[8], 0x6ed9eba1, 13); el = rotl(el, 10)
49070 bl = fn3(bl, cl, dl, el, al, m[1], 0x6ed9eba1, 15); dl = rotl(dl, 10)
49071 al = fn3(al, bl, cl, dl, el, m[2], 0x6ed9eba1, 14); cl = rotl(cl, 10)
49072 el = fn3(el, al, bl, cl, dl, m[7], 0x6ed9eba1, 8); bl = rotl(bl, 10)
49073 dl = fn3(dl, el, al, bl, cl, m[0], 0x6ed9eba1, 13); al = rotl(al, 10)
49074 cl = fn3(cl, dl, el, al, bl, m[6], 0x6ed9eba1, 6); el = rotl(el, 10)
49075 bl = fn3(bl, cl, dl, el, al, m[13], 0x6ed9eba1, 5); dl = rotl(dl, 10)
49076 al = fn3(al, bl, cl, dl, el, m[11], 0x6ed9eba1, 12); cl = rotl(cl, 10)
49077 el = fn3(el, al, bl, cl, dl, m[5], 0x6ed9eba1, 7); bl = rotl(bl, 10)
49078 dl = fn3(dl, el, al, bl, cl, m[12], 0x6ed9eba1, 5); al = rotl(al, 10)
49079
49080 // Mj = 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2
49081 // K = 0x8f1bbcdc
49082 // Sj = 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12
49083 cl = fn4(cl, dl, el, al, bl, m[1], 0x8f1bbcdc, 11); el = rotl(el, 10)
49084 bl = fn4(bl, cl, dl, el, al, m[9], 0x8f1bbcdc, 12); dl = rotl(dl, 10)
49085 al = fn4(al, bl, cl, dl, el, m[11], 0x8f1bbcdc, 14); cl = rotl(cl, 10)
49086 el = fn4(el, al, bl, cl, dl, m[10], 0x8f1bbcdc, 15); bl = rotl(bl, 10)
49087 dl = fn4(dl, el, al, bl, cl, m[0], 0x8f1bbcdc, 14); al = rotl(al, 10)
49088 cl = fn4(cl, dl, el, al, bl, m[8], 0x8f1bbcdc, 15); el = rotl(el, 10)
49089 bl = fn4(bl, cl, dl, el, al, m[12], 0x8f1bbcdc, 9); dl = rotl(dl, 10)
49090 al = fn4(al, bl, cl, dl, el, m[4], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
49091 el = fn4(el, al, bl, cl, dl, m[13], 0x8f1bbcdc, 9); bl = rotl(bl, 10)
49092 dl = fn4(dl, el, al, bl, cl, m[3], 0x8f1bbcdc, 14); al = rotl(al, 10)
49093 cl = fn4(cl, dl, el, al, bl, m[7], 0x8f1bbcdc, 5); el = rotl(el, 10)
49094 bl = fn4(bl, cl, dl, el, al, m[15], 0x8f1bbcdc, 6); dl = rotl(dl, 10)
49095 al = fn4(al, bl, cl, dl, el, m[14], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
49096 el = fn4(el, al, bl, cl, dl, m[5], 0x8f1bbcdc, 6); bl = rotl(bl, 10)
49097 dl = fn4(dl, el, al, bl, cl, m[6], 0x8f1bbcdc, 5); al = rotl(al, 10)
49098 cl = fn4(cl, dl, el, al, bl, m[2], 0x8f1bbcdc, 12); el = rotl(el, 10)
49099
49100 // Mj = 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
49101 // K = 0xa953fd4e
49102 // Sj = 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
49103 bl = fn5(bl, cl, dl, el, al, m[4], 0xa953fd4e, 9); dl = rotl(dl, 10)
49104 al = fn5(al, bl, cl, dl, el, m[0], 0xa953fd4e, 15); cl = rotl(cl, 10)
49105 el = fn5(el, al, bl, cl, dl, m[5], 0xa953fd4e, 5); bl = rotl(bl, 10)
49106 dl = fn5(dl, el, al, bl, cl, m[9], 0xa953fd4e, 11); al = rotl(al, 10)
49107 cl = fn5(cl, dl, el, al, bl, m[7], 0xa953fd4e, 6); el = rotl(el, 10)
49108 bl = fn5(bl, cl, dl, el, al, m[12], 0xa953fd4e, 8); dl = rotl(dl, 10)
49109 al = fn5(al, bl, cl, dl, el, m[2], 0xa953fd4e, 13); cl = rotl(cl, 10)
49110 el = fn5(el, al, bl, cl, dl, m[10], 0xa953fd4e, 12); bl = rotl(bl, 10)
49111 dl = fn5(dl, el, al, bl, cl, m[14], 0xa953fd4e, 5); al = rotl(al, 10)
49112 cl = fn5(cl, dl, el, al, bl, m[1], 0xa953fd4e, 12); el = rotl(el, 10)
49113 bl = fn5(bl, cl, dl, el, al, m[3], 0xa953fd4e, 13); dl = rotl(dl, 10)
49114 al = fn5(al, bl, cl, dl, el, m[8], 0xa953fd4e, 14); cl = rotl(cl, 10)
49115 el = fn5(el, al, bl, cl, dl, m[11], 0xa953fd4e, 11); bl = rotl(bl, 10)
49116 dl = fn5(dl, el, al, bl, cl, m[6], 0xa953fd4e, 8); al = rotl(al, 10)
49117 cl = fn5(cl, dl, el, al, bl, m[15], 0xa953fd4e, 5); el = rotl(el, 10)
49118 bl = fn5(bl, cl, dl, el, al, m[13], 0xa953fd4e, 6); dl = rotl(dl, 10)
49119
49120 var ar = this._a
49121 var br = this._b
49122 var cr = this._c
49123 var dr = this._d
49124 var er = this._e
49125
49126 // M'j = 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12
49127 // K' = 0x50a28be6
49128 // S'j = 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6
49129 ar = fn5(ar, br, cr, dr, er, m[5], 0x50a28be6, 8); cr = rotl(cr, 10)
49130 er = fn5(er, ar, br, cr, dr, m[14], 0x50a28be6, 9); br = rotl(br, 10)
49131 dr = fn5(dr, er, ar, br, cr, m[7], 0x50a28be6, 9); ar = rotl(ar, 10)
49132 cr = fn5(cr, dr, er, ar, br, m[0], 0x50a28be6, 11); er = rotl(er, 10)
49133 br = fn5(br, cr, dr, er, ar, m[9], 0x50a28be6, 13); dr = rotl(dr, 10)
49134 ar = fn5(ar, br, cr, dr, er, m[2], 0x50a28be6, 15); cr = rotl(cr, 10)
49135 er = fn5(er, ar, br, cr, dr, m[11], 0x50a28be6, 15); br = rotl(br, 10)
49136 dr = fn5(dr, er, ar, br, cr, m[4], 0x50a28be6, 5); ar = rotl(ar, 10)
49137 cr = fn5(cr, dr, er, ar, br, m[13], 0x50a28be6, 7); er = rotl(er, 10)
49138 br = fn5(br, cr, dr, er, ar, m[6], 0x50a28be6, 7); dr = rotl(dr, 10)
49139 ar = fn5(ar, br, cr, dr, er, m[15], 0x50a28be6, 8); cr = rotl(cr, 10)
49140 er = fn5(er, ar, br, cr, dr, m[8], 0x50a28be6, 11); br = rotl(br, 10)
49141 dr = fn5(dr, er, ar, br, cr, m[1], 0x50a28be6, 14); ar = rotl(ar, 10)
49142 cr = fn5(cr, dr, er, ar, br, m[10], 0x50a28be6, 14); er = rotl(er, 10)
49143 br = fn5(br, cr, dr, er, ar, m[3], 0x50a28be6, 12); dr = rotl(dr, 10)
49144 ar = fn5(ar, br, cr, dr, er, m[12], 0x50a28be6, 6); cr = rotl(cr, 10)
49145
49146 // M'j = 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2
49147 // K' = 0x5c4dd124
49148 // S'j = 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11
49149 er = fn4(er, ar, br, cr, dr, m[6], 0x5c4dd124, 9); br = rotl(br, 10)
49150 dr = fn4(dr, er, ar, br, cr, m[11], 0x5c4dd124, 13); ar = rotl(ar, 10)
49151 cr = fn4(cr, dr, er, ar, br, m[3], 0x5c4dd124, 15); er = rotl(er, 10)
49152 br = fn4(br, cr, dr, er, ar, m[7], 0x5c4dd124, 7); dr = rotl(dr, 10)
49153 ar = fn4(ar, br, cr, dr, er, m[0], 0x5c4dd124, 12); cr = rotl(cr, 10)
49154 er = fn4(er, ar, br, cr, dr, m[13], 0x5c4dd124, 8); br = rotl(br, 10)
49155 dr = fn4(dr, er, ar, br, cr, m[5], 0x5c4dd124, 9); ar = rotl(ar, 10)
49156 cr = fn4(cr, dr, er, ar, br, m[10], 0x5c4dd124, 11); er = rotl(er, 10)
49157 br = fn4(br, cr, dr, er, ar, m[14], 0x5c4dd124, 7); dr = rotl(dr, 10)
49158 ar = fn4(ar, br, cr, dr, er, m[15], 0x5c4dd124, 7); cr = rotl(cr, 10)
49159 er = fn4(er, ar, br, cr, dr, m[8], 0x5c4dd124, 12); br = rotl(br, 10)
49160 dr = fn4(dr, er, ar, br, cr, m[12], 0x5c4dd124, 7); ar = rotl(ar, 10)
49161 cr = fn4(cr, dr, er, ar, br, m[4], 0x5c4dd124, 6); er = rotl(er, 10)
49162 br = fn4(br, cr, dr, er, ar, m[9], 0x5c4dd124, 15); dr = rotl(dr, 10)
49163 ar = fn4(ar, br, cr, dr, er, m[1], 0x5c4dd124, 13); cr = rotl(cr, 10)
49164 er = fn4(er, ar, br, cr, dr, m[2], 0x5c4dd124, 11); br = rotl(br, 10)
49165
49166 // M'j = 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13
49167 // K' = 0x6d703ef3
49168 // S'j = 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5
49169 dr = fn3(dr, er, ar, br, cr, m[15], 0x6d703ef3, 9); ar = rotl(ar, 10)
49170 cr = fn3(cr, dr, er, ar, br, m[5], 0x6d703ef3, 7); er = rotl(er, 10)
49171 br = fn3(br, cr, dr, er, ar, m[1], 0x6d703ef3, 15); dr = rotl(dr, 10)
49172 ar = fn3(ar, br, cr, dr, er, m[3], 0x6d703ef3, 11); cr = rotl(cr, 10)
49173 er = fn3(er, ar, br, cr, dr, m[7], 0x6d703ef3, 8); br = rotl(br, 10)
49174 dr = fn3(dr, er, ar, br, cr, m[14], 0x6d703ef3, 6); ar = rotl(ar, 10)
49175 cr = fn3(cr, dr, er, ar, br, m[6], 0x6d703ef3, 6); er = rotl(er, 10)
49176 br = fn3(br, cr, dr, er, ar, m[9], 0x6d703ef3, 14); dr = rotl(dr, 10)
49177 ar = fn3(ar, br, cr, dr, er, m[11], 0x6d703ef3, 12); cr = rotl(cr, 10)
49178 er = fn3(er, ar, br, cr, dr, m[8], 0x6d703ef3, 13); br = rotl(br, 10)
49179 dr = fn3(dr, er, ar, br, cr, m[12], 0x6d703ef3, 5); ar = rotl(ar, 10)
49180 cr = fn3(cr, dr, er, ar, br, m[2], 0x6d703ef3, 14); er = rotl(er, 10)
49181 br = fn3(br, cr, dr, er, ar, m[10], 0x6d703ef3, 13); dr = rotl(dr, 10)
49182 ar = fn3(ar, br, cr, dr, er, m[0], 0x6d703ef3, 13); cr = rotl(cr, 10)
49183 er = fn3(er, ar, br, cr, dr, m[4], 0x6d703ef3, 7); br = rotl(br, 10)
49184 dr = fn3(dr, er, ar, br, cr, m[13], 0x6d703ef3, 5); ar = rotl(ar, 10)
49185
49186 // M'j = 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14
49187 // K' = 0x7a6d76e9
49188 // S'j = 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8
49189 cr = fn2(cr, dr, er, ar, br, m[8], 0x7a6d76e9, 15); er = rotl(er, 10)
49190 br = fn2(br, cr, dr, er, ar, m[6], 0x7a6d76e9, 5); dr = rotl(dr, 10)
49191 ar = fn2(ar, br, cr, dr, er, m[4], 0x7a6d76e9, 8); cr = rotl(cr, 10)
49192 er = fn2(er, ar, br, cr, dr, m[1], 0x7a6d76e9, 11); br = rotl(br, 10)
49193 dr = fn2(dr, er, ar, br, cr, m[3], 0x7a6d76e9, 14); ar = rotl(ar, 10)
49194 cr = fn2(cr, dr, er, ar, br, m[11], 0x7a6d76e9, 14); er = rotl(er, 10)
49195 br = fn2(br, cr, dr, er, ar, m[15], 0x7a6d76e9, 6); dr = rotl(dr, 10)
49196 ar = fn2(ar, br, cr, dr, er, m[0], 0x7a6d76e9, 14); cr = rotl(cr, 10)
49197 er = fn2(er, ar, br, cr, dr, m[5], 0x7a6d76e9, 6); br = rotl(br, 10)
49198 dr = fn2(dr, er, ar, br, cr, m[12], 0x7a6d76e9, 9); ar = rotl(ar, 10)
49199 cr = fn2(cr, dr, er, ar, br, m[2], 0x7a6d76e9, 12); er = rotl(er, 10)
49200 br = fn2(br, cr, dr, er, ar, m[13], 0x7a6d76e9, 9); dr = rotl(dr, 10)
49201 ar = fn2(ar, br, cr, dr, er, m[9], 0x7a6d76e9, 12); cr = rotl(cr, 10)
49202 er = fn2(er, ar, br, cr, dr, m[7], 0x7a6d76e9, 5); br = rotl(br, 10)
49203 dr = fn2(dr, er, ar, br, cr, m[10], 0x7a6d76e9, 15); ar = rotl(ar, 10)
49204 cr = fn2(cr, dr, er, ar, br, m[14], 0x7a6d76e9, 8); er = rotl(er, 10)
49205
49206 // M'j = 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
49207 // K' = 0x00000000
49208 // S'j = 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
49209 br = fn1(br, cr, dr, er, ar, m[12], 0x00000000, 8); dr = rotl(dr, 10)
49210 ar = fn1(ar, br, cr, dr, er, m[15], 0x00000000, 5); cr = rotl(cr, 10)
49211 er = fn1(er, ar, br, cr, dr, m[10], 0x00000000, 12); br = rotl(br, 10)
49212 dr = fn1(dr, er, ar, br, cr, m[4], 0x00000000, 9); ar = rotl(ar, 10)
49213 cr = fn1(cr, dr, er, ar, br, m[1], 0x00000000, 12); er = rotl(er, 10)
49214 br = fn1(br, cr, dr, er, ar, m[5], 0x00000000, 5); dr = rotl(dr, 10)
49215 ar = fn1(ar, br, cr, dr, er, m[8], 0x00000000, 14); cr = rotl(cr, 10)
49216 er = fn1(er, ar, br, cr, dr, m[7], 0x00000000, 6); br = rotl(br, 10)
49217 dr = fn1(dr, er, ar, br, cr, m[6], 0x00000000, 8); ar = rotl(ar, 10)
49218 cr = fn1(cr, dr, er, ar, br, m[2], 0x00000000, 13); er = rotl(er, 10)
49219 br = fn1(br, cr, dr, er, ar, m[13], 0x00000000, 6); dr = rotl(dr, 10)
49220 ar = fn1(ar, br, cr, dr, er, m[14], 0x00000000, 5); cr = rotl(cr, 10)
49221 er = fn1(er, ar, br, cr, dr, m[0], 0x00000000, 15); br = rotl(br, 10)
49222 dr = fn1(dr, er, ar, br, cr, m[3], 0x00000000, 13); ar = rotl(ar, 10)
49223 cr = fn1(cr, dr, er, ar, br, m[9], 0x00000000, 11); er = rotl(er, 10)
49224 br = fn1(br, cr, dr, er, ar, m[11], 0x00000000, 11); dr = rotl(dr, 10)
49225
49226 // change state
49227 var t = (this._b + cl + dr) | 0
49228 this._b = (this._c + dl + er) | 0
49229 this._c = (this._d + el + ar) | 0
49230 this._d = (this._e + al + br) | 0
49231 this._e = (this._a + bl + cr) | 0
49232 this._a = t
49233 }
49234
49235 RIPEMD160.prototype._digest = function () {
49236 // create padding and handle blocks
49237 this._block[this._blockOffset++] = 0x80
49238 if (this._blockOffset > 56) {
49239 this._block.fill(0, this._blockOffset, 64)
49240 this._update()
49241 this._blockOffset = 0
49242 }
49243
49244 this._block.fill(0, this._blockOffset, 56)
49245 this._block.writeUInt32LE(this._length[0], 56)
49246 this._block.writeUInt32LE(this._length[1], 60)
49247 this._update()
49248
49249 // produce result
49250 var buffer = new Buffer(20)
49251 buffer.writeInt32LE(this._a, 0)
49252 buffer.writeInt32LE(this._b, 4)
49253 buffer.writeInt32LE(this._c, 8)
49254 buffer.writeInt32LE(this._d, 12)
49255 buffer.writeInt32LE(this._e, 16)
49256 return buffer
49257 }
49258
49259 function rotl (x, n) {
49260 return (x << n) | (x >>> (32 - n))
49261 }
49262
49263 function fn1 (a, b, c, d, e, m, k, s) {
49264 return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0
49265 }
49266
49267 function fn2 (a, b, c, d, e, m, k, s) {
49268 return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0
49269 }
49270
49271 function fn3 (a, b, c, d, e, m, k, s) {
49272 return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0
49273 }
49274
49275 function fn4 (a, b, c, d, e, m, k, s) {
49276 return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0
49277 }
49278
49279 function fn5 (a, b, c, d, e, m, k, s) {
49280 return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0
49281 }
49282
49283 module.exports = RIPEMD160
49284
49285 }).call(this,require("buffer").Buffer)
49286 },{"buffer":5,"hash-base":113,"inherits":121}],128:[function(require,module,exports){
49287 /* eslint-disable node/no-deprecated-api */
49288 var buffer = require('buffer')
49289 var Buffer = buffer.Buffer
49290
49291 // alternative to using Object.keys for old browsers
49292 function copyProps (src, dst) {
49293 for (var key in src) {
49294 dst[key] = src[key]
49295 }
49296 }
49297 if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
49298 module.exports = buffer
49299 } else {
49300 // Copy properties from require('buffer')
49301 copyProps(buffer, exports)
49302 exports.Buffer = SafeBuffer
49303 }
49304
49305 function SafeBuffer (arg, encodingOrOffset, length) {
49306 return Buffer(arg, encodingOrOffset, length)
49307 }
49308
49309 // Copy static methods from Buffer
49310 copyProps(Buffer, SafeBuffer)
49311
49312 SafeBuffer.from = function (arg, encodingOrOffset, length) {
49313 if (typeof arg === 'number') {
49314 throw new TypeError('Argument must not be a number')
49315 }
49316 return Buffer(arg, encodingOrOffset, length)
49317 }
49318
49319 SafeBuffer.alloc = function (size, fill, encoding) {
49320 if (typeof size !== 'number') {
49321 throw new TypeError('Argument must be a number')
49322 }
49323 var buf = Buffer(size)
49324 if (fill !== undefined) {
49325 if (typeof encoding === 'string') {
49326 buf.fill(fill, encoding)
49327 } else {
49328 buf.fill(fill)
49329 }
49330 } else {
49331 buf.fill(0)
49332 }
49333 return buf
49334 }
49335
49336 SafeBuffer.allocUnsafe = function (size) {
49337 if (typeof size !== 'number') {
49338 throw new TypeError('Argument must be a number')
49339 }
49340 return Buffer(size)
49341 }
49342
49343 SafeBuffer.allocUnsafeSlow = function (size) {
49344 if (typeof size !== 'number') {
49345 throw new TypeError('Argument must be a number')
49346 }
49347 return buffer.SlowBuffer(size)
49348 }
49349
49350 },{"buffer":5}],129:[function(require,module,exports){
49351 var Buffer = require('safe-buffer').Buffer
49352
49353 // prototype class for hash functions
49354 function Hash (blockSize, finalSize) {
49355 this._block = Buffer.alloc(blockSize)
49356 this._finalSize = finalSize
49357 this._blockSize = blockSize
49358 this._len = 0
49359 }
49360
49361 Hash.prototype.update = function (data, enc) {
49362 if (typeof data === 'string') {
49363 enc = enc || 'utf8'
49364 data = Buffer.from(data, enc)
49365 }
49366
49367 var block = this._block
49368 var blockSize = this._blockSize
49369 var length = data.length
49370 var accum = this._len
49371
49372 for (var offset = 0; offset < length;) {
49373 var assigned = accum % blockSize
49374 var remainder = Math.min(length - offset, blockSize - assigned)
49375
49376 for (var i = 0; i < remainder; i++) {
49377 block[assigned + i] = data[offset + i]
49378 }
49379
49380 accum += remainder
49381 offset += remainder
49382
49383 if ((accum % blockSize) === 0) {
49384 this._update(block)
49385 }
49386 }
49387
49388 this._len += length
49389 return this
49390 }
49391
49392 Hash.prototype.digest = function (enc) {
49393 var rem = this._len % this._blockSize
49394
49395 this._block[rem] = 0x80
49396
49397 // zero (rem + 1) trailing bits, where (rem + 1) is the smallest
49398 // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize
49399 this._block.fill(0, rem + 1)
49400
49401 if (rem >= this._finalSize) {
49402 this._update(this._block)
49403 this._block.fill(0)
49404 }
49405
49406 var bits = this._len * 8
49407
49408 // uint32
49409 if (bits <= 0xffffffff) {
49410 this._block.writeUInt32BE(bits, this._blockSize - 4)
49411
49412 // uint64
49413 } else {
49414 var lowBits = bits & 0xffffffff
49415 var highBits = (bits - lowBits) / 0x100000000
49416
49417 this._block.writeUInt32BE(highBits, this._blockSize - 8)
49418 this._block.writeUInt32BE(lowBits, this._blockSize - 4)
49419 }
49420
49421 this._update(this._block)
49422 var hash = this._hash()
49423
49424 return enc ? hash.toString(enc) : hash
49425 }
49426
49427 Hash.prototype._update = function () {
49428 throw new Error('_update must be implemented by subclass')
49429 }
49430
49431 module.exports = Hash
49432
49433 },{"safe-buffer":128}],130:[function(require,module,exports){
49434 var exports = module.exports = function SHA (algorithm) {
49435 algorithm = algorithm.toLowerCase()
49436
49437 var Algorithm = exports[algorithm]
49438 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
49439
49440 return new Algorithm()
49441 }
49442
49443 exports.sha = require('./sha')
49444 exports.sha1 = require('./sha1')
49445 exports.sha224 = require('./sha224')
49446 exports.sha256 = require('./sha256')
49447 exports.sha384 = require('./sha384')
49448 exports.sha512 = require('./sha512')
49449
49450 },{"./sha":131,"./sha1":132,"./sha224":133,"./sha256":134,"./sha384":135,"./sha512":136}],131:[function(require,module,exports){
49451 /*
49452 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
49453 * in FIPS PUB 180-1
49454 * This source code is derived from sha1.js of the same repository.
49455 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
49456 * operation was added.
49457 */
49458
49459 var inherits = require('inherits')
49460 var Hash = require('./hash')
49461 var Buffer = require('safe-buffer').Buffer
49462
49463 var K = [
49464 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
49465 ]
49466
49467 var W = new Array(80)
49468
49469 function Sha () {
49470 this.init()
49471 this._w = W
49472
49473 Hash.call(this, 64, 56)
49474 }
49475
49476 inherits(Sha, Hash)
49477
49478 Sha.prototype.init = function () {
49479 this._a = 0x67452301
49480 this._b = 0xefcdab89
49481 this._c = 0x98badcfe
49482 this._d = 0x10325476
49483 this._e = 0xc3d2e1f0
49484
49485 return this
49486 }
49487
49488 function rotl5 (num) {
49489 return (num << 5) | (num >>> 27)
49490 }
49491
49492 function rotl30 (num) {
49493 return (num << 30) | (num >>> 2)
49494 }
49495
49496 function ft (s, b, c, d) {
49497 if (s === 0) return (b & c) | ((~b) & d)
49498 if (s === 2) return (b & c) | (b & d) | (c & d)
49499 return b ^ c ^ d
49500 }
49501
49502 Sha.prototype._update = function (M) {
49503 var W = this._w
49504
49505 var a = this._a | 0
49506 var b = this._b | 0
49507 var c = this._c | 0
49508 var d = this._d | 0
49509 var e = this._e | 0
49510
49511 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
49512 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
49513
49514 for (var j = 0; j < 80; ++j) {
49515 var s = ~~(j / 20)
49516 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
49517
49518 e = d
49519 d = c
49520 c = rotl30(b)
49521 b = a
49522 a = t
49523 }
49524
49525 this._a = (a + this._a) | 0
49526 this._b = (b + this._b) | 0
49527 this._c = (c + this._c) | 0
49528 this._d = (d + this._d) | 0
49529 this._e = (e + this._e) | 0
49530 }
49531
49532 Sha.prototype._hash = function () {
49533 var H = Buffer.allocUnsafe(20)
49534
49535 H.writeInt32BE(this._a | 0, 0)
49536 H.writeInt32BE(this._b | 0, 4)
49537 H.writeInt32BE(this._c | 0, 8)
49538 H.writeInt32BE(this._d | 0, 12)
49539 H.writeInt32BE(this._e | 0, 16)
49540
49541 return H
49542 }
49543
49544 module.exports = Sha
49545
49546 },{"./hash":129,"inherits":121,"safe-buffer":128}],132:[function(require,module,exports){
49547 /*
49548 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
49549 * in FIPS PUB 180-1
49550 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
49551 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
49552 * Distributed under the BSD License
49553 * See http://pajhome.org.uk/crypt/md5 for details.
49554 */
49555
49556 var inherits = require('inherits')
49557 var Hash = require('./hash')
49558 var Buffer = require('safe-buffer').Buffer
49559
49560 var K = [
49561 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
49562 ]
49563
49564 var W = new Array(80)
49565
49566 function Sha1 () {
49567 this.init()
49568 this._w = W
49569
49570 Hash.call(this, 64, 56)
49571 }
49572
49573 inherits(Sha1, Hash)
49574
49575 Sha1.prototype.init = function () {
49576 this._a = 0x67452301
49577 this._b = 0xefcdab89
49578 this._c = 0x98badcfe
49579 this._d = 0x10325476
49580 this._e = 0xc3d2e1f0
49581
49582 return this
49583 }
49584
49585 function rotl1 (num) {
49586 return (num << 1) | (num >>> 31)
49587 }
49588
49589 function rotl5 (num) {
49590 return (num << 5) | (num >>> 27)
49591 }
49592
49593 function rotl30 (num) {
49594 return (num << 30) | (num >>> 2)
49595 }
49596
49597 function ft (s, b, c, d) {
49598 if (s === 0) return (b & c) | ((~b) & d)
49599 if (s === 2) return (b & c) | (b & d) | (c & d)
49600 return b ^ c ^ d
49601 }
49602
49603 Sha1.prototype._update = function (M) {
49604 var W = this._w
49605
49606 var a = this._a | 0
49607 var b = this._b | 0
49608 var c = this._c | 0
49609 var d = this._d | 0
49610 var e = this._e | 0
49611
49612 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
49613 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
49614
49615 for (var j = 0; j < 80; ++j) {
49616 var s = ~~(j / 20)
49617 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
49618
49619 e = d
49620 d = c
49621 c = rotl30(b)
49622 b = a
49623 a = t
49624 }
49625
49626 this._a = (a + this._a) | 0
49627 this._b = (b + this._b) | 0
49628 this._c = (c + this._c) | 0
49629 this._d = (d + this._d) | 0
49630 this._e = (e + this._e) | 0
49631 }
49632
49633 Sha1.prototype._hash = function () {
49634 var H = Buffer.allocUnsafe(20)
49635
49636 H.writeInt32BE(this._a | 0, 0)
49637 H.writeInt32BE(this._b | 0, 4)
49638 H.writeInt32BE(this._c | 0, 8)
49639 H.writeInt32BE(this._d | 0, 12)
49640 H.writeInt32BE(this._e | 0, 16)
49641
49642 return H
49643 }
49644
49645 module.exports = Sha1
49646
49647 },{"./hash":129,"inherits":121,"safe-buffer":128}],133:[function(require,module,exports){
49648 /**
49649 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
49650 * in FIPS 180-2
49651 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
49652 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
49653 *
49654 */
49655
49656 var inherits = require('inherits')
49657 var Sha256 = require('./sha256')
49658 var Hash = require('./hash')
49659 var Buffer = require('safe-buffer').Buffer
49660
49661 var W = new Array(64)
49662
49663 function Sha224 () {
49664 this.init()
49665
49666 this._w = W // new Array(64)
49667
49668 Hash.call(this, 64, 56)
49669 }
49670
49671 inherits(Sha224, Sha256)
49672
49673 Sha224.prototype.init = function () {
49674 this._a = 0xc1059ed8
49675 this._b = 0x367cd507
49676 this._c = 0x3070dd17
49677 this._d = 0xf70e5939
49678 this._e = 0xffc00b31
49679 this._f = 0x68581511
49680 this._g = 0x64f98fa7
49681 this._h = 0xbefa4fa4
49682
49683 return this
49684 }
49685
49686 Sha224.prototype._hash = function () {
49687 var H = Buffer.allocUnsafe(28)
49688
49689 H.writeInt32BE(this._a, 0)
49690 H.writeInt32BE(this._b, 4)
49691 H.writeInt32BE(this._c, 8)
49692 H.writeInt32BE(this._d, 12)
49693 H.writeInt32BE(this._e, 16)
49694 H.writeInt32BE(this._f, 20)
49695 H.writeInt32BE(this._g, 24)
49696
49697 return H
49698 }
49699
49700 module.exports = Sha224
49701
49702 },{"./hash":129,"./sha256":134,"inherits":121,"safe-buffer":128}],134:[function(require,module,exports){
49703 /**
49704 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
49705 * in FIPS 180-2
49706 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
49707 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
49708 *
49709 */
49710
49711 var inherits = require('inherits')
49712 var Hash = require('./hash')
49713 var Buffer = require('safe-buffer').Buffer
49714
49715 var K = [
49716 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
49717 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
49718 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
49719 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
49720 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
49721 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
49722 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
49723 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
49724 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
49725 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
49726 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
49727 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
49728 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
49729 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
49730 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
49731 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
49732 ]
49733
49734 var W = new Array(64)
49735
49736 function Sha256 () {
49737 this.init()
49738
49739 this._w = W // new Array(64)
49740
49741 Hash.call(this, 64, 56)
49742 }
49743
49744 inherits(Sha256, Hash)
49745
49746 Sha256.prototype.init = function () {
49747 this._a = 0x6a09e667
49748 this._b = 0xbb67ae85
49749 this._c = 0x3c6ef372
49750 this._d = 0xa54ff53a
49751 this._e = 0x510e527f
49752 this._f = 0x9b05688c
49753 this._g = 0x1f83d9ab
49754 this._h = 0x5be0cd19
49755
49756 return this
49757 }
49758
49759 function ch (x, y, z) {
49760 return z ^ (x & (y ^ z))
49761 }
49762
49763 function maj (x, y, z) {
49764 return (x & y) | (z & (x | y))
49765 }
49766
49767 function sigma0 (x) {
49768 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
49769 }
49770
49771 function sigma1 (x) {
49772 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
49773 }
49774
49775 function gamma0 (x) {
49776 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
49777 }
49778
49779 function gamma1 (x) {
49780 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
49781 }
49782
49783 Sha256.prototype._update = function (M) {
49784 var W = this._w
49785
49786 var a = this._a | 0
49787 var b = this._b | 0
49788 var c = this._c | 0
49789 var d = this._d | 0
49790 var e = this._e | 0
49791 var f = this._f | 0
49792 var g = this._g | 0
49793 var h = this._h | 0
49794
49795 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
49796 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
49797
49798 for (var j = 0; j < 64; ++j) {
49799 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
49800 var T2 = (sigma0(a) + maj(a, b, c)) | 0
49801
49802 h = g
49803 g = f
49804 f = e
49805 e = (d + T1) | 0
49806 d = c
49807 c = b
49808 b = a
49809 a = (T1 + T2) | 0
49810 }
49811
49812 this._a = (a + this._a) | 0
49813 this._b = (b + this._b) | 0
49814 this._c = (c + this._c) | 0
49815 this._d = (d + this._d) | 0
49816 this._e = (e + this._e) | 0
49817 this._f = (f + this._f) | 0
49818 this._g = (g + this._g) | 0
49819 this._h = (h + this._h) | 0
49820 }
49821
49822 Sha256.prototype._hash = function () {
49823 var H = Buffer.allocUnsafe(32)
49824
49825 H.writeInt32BE(this._a, 0)
49826 H.writeInt32BE(this._b, 4)
49827 H.writeInt32BE(this._c, 8)
49828 H.writeInt32BE(this._d, 12)
49829 H.writeInt32BE(this._e, 16)
49830 H.writeInt32BE(this._f, 20)
49831 H.writeInt32BE(this._g, 24)
49832 H.writeInt32BE(this._h, 28)
49833
49834 return H
49835 }
49836
49837 module.exports = Sha256
49838
49839 },{"./hash":129,"inherits":121,"safe-buffer":128}],135:[function(require,module,exports){
49840 var inherits = require('inherits')
49841 var SHA512 = require('./sha512')
49842 var Hash = require('./hash')
49843 var Buffer = require('safe-buffer').Buffer
49844
49845 var W = new Array(160)
49846
49847 function Sha384 () {
49848 this.init()
49849 this._w = W
49850
49851 Hash.call(this, 128, 112)
49852 }
49853
49854 inherits(Sha384, SHA512)
49855
49856 Sha384.prototype.init = function () {
49857 this._ah = 0xcbbb9d5d
49858 this._bh = 0x629a292a
49859 this._ch = 0x9159015a
49860 this._dh = 0x152fecd8
49861 this._eh = 0x67332667
49862 this._fh = 0x8eb44a87
49863 this._gh = 0xdb0c2e0d
49864 this._hh = 0x47b5481d
49865
49866 this._al = 0xc1059ed8
49867 this._bl = 0x367cd507
49868 this._cl = 0x3070dd17
49869 this._dl = 0xf70e5939
49870 this._el = 0xffc00b31
49871 this._fl = 0x68581511
49872 this._gl = 0x64f98fa7
49873 this._hl = 0xbefa4fa4
49874
49875 return this
49876 }
49877
49878 Sha384.prototype._hash = function () {
49879 var H = Buffer.allocUnsafe(48)
49880
49881 function writeInt64BE (h, l, offset) {
49882 H.writeInt32BE(h, offset)
49883 H.writeInt32BE(l, offset + 4)
49884 }
49885
49886 writeInt64BE(this._ah, this._al, 0)
49887 writeInt64BE(this._bh, this._bl, 8)
49888 writeInt64BE(this._ch, this._cl, 16)
49889 writeInt64BE(this._dh, this._dl, 24)
49890 writeInt64BE(this._eh, this._el, 32)
49891 writeInt64BE(this._fh, this._fl, 40)
49892
49893 return H
49894 }
49895
49896 module.exports = Sha384
49897
49898 },{"./hash":129,"./sha512":136,"inherits":121,"safe-buffer":128}],136:[function(require,module,exports){
49899 var inherits = require('inherits')
49900 var Hash = require('./hash')
49901 var Buffer = require('safe-buffer').Buffer
49902
49903 var K = [
49904 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
49905 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
49906 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
49907 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
49908 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
49909 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
49910 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
49911 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
49912 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
49913 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
49914 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
49915 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
49916 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
49917 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
49918 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
49919 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
49920 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
49921 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
49922 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
49923 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
49924 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
49925 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
49926 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
49927 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
49928 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
49929 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
49930 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
49931 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
49932 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
49933 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
49934 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
49935 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
49936 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
49937 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
49938 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
49939 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
49940 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
49941 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
49942 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
49943 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
49944 ]
49945
49946 var W = new Array(160)
49947
49948 function Sha512 () {
49949 this.init()
49950 this._w = W
49951
49952 Hash.call(this, 128, 112)
49953 }
49954
49955 inherits(Sha512, Hash)
49956
49957 Sha512.prototype.init = function () {
49958 this._ah = 0x6a09e667
49959 this._bh = 0xbb67ae85
49960 this._ch = 0x3c6ef372
49961 this._dh = 0xa54ff53a
49962 this._eh = 0x510e527f
49963 this._fh = 0x9b05688c
49964 this._gh = 0x1f83d9ab
49965 this._hh = 0x5be0cd19
49966
49967 this._al = 0xf3bcc908
49968 this._bl = 0x84caa73b
49969 this._cl = 0xfe94f82b
49970 this._dl = 0x5f1d36f1
49971 this._el = 0xade682d1
49972 this._fl = 0x2b3e6c1f
49973 this._gl = 0xfb41bd6b
49974 this._hl = 0x137e2179
49975
49976 return this
49977 }
49978
49979 function Ch (x, y, z) {
49980 return z ^ (x & (y ^ z))
49981 }
49982
49983 function maj (x, y, z) {
49984 return (x & y) | (z & (x | y))
49985 }
49986
49987 function sigma0 (x, xl) {
49988 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
49989 }
49990
49991 function sigma1 (x, xl) {
49992 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
49993 }
49994
49995 function Gamma0 (x, xl) {
49996 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
49997 }
49998
49999 function Gamma0l (x, xl) {
50000 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
50001 }
50002
50003 function Gamma1 (x, xl) {
50004 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
50005 }
50006
50007 function Gamma1l (x, xl) {
50008 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
50009 }
50010
50011 function getCarry (a, b) {
50012 return (a >>> 0) < (b >>> 0) ? 1 : 0
50013 }
50014
50015 Sha512.prototype._update = function (M) {
50016 var W = this._w
50017
50018 var ah = this._ah | 0
50019 var bh = this._bh | 0
50020 var ch = this._ch | 0
50021 var dh = this._dh | 0
50022 var eh = this._eh | 0
50023 var fh = this._fh | 0
50024 var gh = this._gh | 0
50025 var hh = this._hh | 0
50026
50027 var al = this._al | 0
50028 var bl = this._bl | 0
50029 var cl = this._cl | 0
50030 var dl = this._dl | 0
50031 var el = this._el | 0
50032 var fl = this._fl | 0
50033 var gl = this._gl | 0
50034 var hl = this._hl | 0
50035
50036 for (var i = 0; i < 32; i += 2) {
50037 W[i] = M.readInt32BE(i * 4)
50038 W[i + 1] = M.readInt32BE(i * 4 + 4)
50039 }
50040 for (; i < 160; i += 2) {
50041 var xh = W[i - 15 * 2]
50042 var xl = W[i - 15 * 2 + 1]
50043 var gamma0 = Gamma0(xh, xl)
50044 var gamma0l = Gamma0l(xl, xh)
50045
50046 xh = W[i - 2 * 2]
50047 xl = W[i - 2 * 2 + 1]
50048 var gamma1 = Gamma1(xh, xl)
50049 var gamma1l = Gamma1l(xl, xh)
50050
50051 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
50052 var Wi7h = W[i - 7 * 2]
50053 var Wi7l = W[i - 7 * 2 + 1]
50054
50055 var Wi16h = W[i - 16 * 2]
50056 var Wi16l = W[i - 16 * 2 + 1]
50057
50058 var Wil = (gamma0l + Wi7l) | 0
50059 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
50060 Wil = (Wil + gamma1l) | 0
50061 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
50062 Wil = (Wil + Wi16l) | 0
50063 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
50064
50065 W[i] = Wih
50066 W[i + 1] = Wil
50067 }
50068
50069 for (var j = 0; j < 160; j += 2) {
50070 Wih = W[j]
50071 Wil = W[j + 1]
50072
50073 var majh = maj(ah, bh, ch)
50074 var majl = maj(al, bl, cl)
50075
50076 var sigma0h = sigma0(ah, al)
50077 var sigma0l = sigma0(al, ah)
50078 var sigma1h = sigma1(eh, el)
50079 var sigma1l = sigma1(el, eh)
50080
50081 // t1 = h + sigma1 + ch + K[j] + W[j]
50082 var Kih = K[j]
50083 var Kil = K[j + 1]
50084
50085 var chh = Ch(eh, fh, gh)
50086 var chl = Ch(el, fl, gl)
50087
50088 var t1l = (hl + sigma1l) | 0
50089 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
50090 t1l = (t1l + chl) | 0
50091 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
50092 t1l = (t1l + Kil) | 0
50093 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
50094 t1l = (t1l + Wil) | 0
50095 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
50096
50097 // t2 = sigma0 + maj
50098 var t2l = (sigma0l + majl) | 0
50099 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
50100
50101 hh = gh
50102 hl = gl
50103 gh = fh
50104 gl = fl
50105 fh = eh
50106 fl = el
50107 el = (dl + t1l) | 0
50108 eh = (dh + t1h + getCarry(el, dl)) | 0
50109 dh = ch
50110 dl = cl
50111 ch = bh
50112 cl = bl
50113 bh = ah
50114 bl = al
50115 al = (t1l + t2l) | 0
50116 ah = (t1h + t2h + getCarry(al, t1l)) | 0
50117 }
50118
50119 this._al = (this._al + al) | 0
50120 this._bl = (this._bl + bl) | 0
50121 this._cl = (this._cl + cl) | 0
50122 this._dl = (this._dl + dl) | 0
50123 this._el = (this._el + el) | 0
50124 this._fl = (this._fl + fl) | 0
50125 this._gl = (this._gl + gl) | 0
50126 this._hl = (this._hl + hl) | 0
50127
50128 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
50129 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
50130 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
50131 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
50132 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
50133 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
50134 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
50135 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
50136 }
50137
50138 Sha512.prototype._hash = function () {
50139 var H = Buffer.allocUnsafe(64)
50140
50141 function writeInt64BE (h, l, offset) {
50142 H.writeInt32BE(h, offset)
50143 H.writeInt32BE(l, offset + 4)
50144 }
50145
50146 writeInt64BE(this._ah, this._al, 0)
50147 writeInt64BE(this._bh, this._bl, 8)
50148 writeInt64BE(this._ch, this._cl, 16)
50149 writeInt64BE(this._dh, this._dl, 24)
50150 writeInt64BE(this._eh, this._el, 32)
50151 writeInt64BE(this._fh, this._fl, 40)
50152 writeInt64BE(this._gh, this._gl, 48)
50153 writeInt64BE(this._hh, this._hl, 56)
50154
50155 return H
50156 }
50157
50158 module.exports = Sha512
50159
50160 },{"./hash":129,"inherits":121,"safe-buffer":128}],137:[function(require,module,exports){
50161 var native = require('./native')
50162
50163 function getTypeName (fn) {
50164 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1]
50165 }
50166
50167 function getValueTypeName (value) {
50168 return native.Nil(value) ? '' : getTypeName(value.constructor)
50169 }
50170
50171 function getValue (value) {
50172 if (native.Function(value)) return ''
50173 if (native.String(value)) return JSON.stringify(value)
50174 if (value && native.Object(value)) return ''
50175 return value
50176 }
50177
50178 function tfJSON (type) {
50179 if (native.Function(type)) return type.toJSON ? type.toJSON() : getTypeName(type)
50180 if (native.Array(type)) return 'Array'
50181 if (type && native.Object(type)) return 'Object'
50182
50183 return type !== undefined ? type : ''
50184 }
50185
50186 function tfErrorString (type, value, valueTypeName) {
50187 var valueJson = getValue(value)
50188
50189 return 'Expected ' + tfJSON(type) + ', got' +
50190 (valueTypeName !== '' ? ' ' + valueTypeName : '') +
50191 (valueJson !== '' ? ' ' + valueJson : '')
50192 }
50193
50194 function TfTypeError (type, value, valueTypeName) {
50195 valueTypeName = valueTypeName || getValueTypeName(value)
50196 this.message = tfErrorString(type, value, valueTypeName)
50197
50198 Error.captureStackTrace(this, TfTypeError)
50199 this.__type = type
50200 this.__value = value
50201 this.__valueTypeName = valueTypeName
50202 }
50203
50204 TfTypeError.prototype = Object.create(Error.prototype)
50205 TfTypeError.prototype.constructor = TfTypeError
50206
50207 function tfPropertyErrorString (type, label, name, value, valueTypeName) {
50208 var description = '" of type '
50209 if (label === 'key') description = '" with key type '
50210
50211 return tfErrorString('property "' + tfJSON(name) + description + tfJSON(type), value, valueTypeName)
50212 }
50213
50214 function TfPropertyTypeError (type, property, label, value, valueTypeName) {
50215 if (type) {
50216 valueTypeName = valueTypeName || getValueTypeName(value)
50217 this.message = tfPropertyErrorString(type, label, property, value, valueTypeName)
50218 } else {
50219 this.message = 'Unexpected property "' + property + '"'
50220 }
50221
50222 Error.captureStackTrace(this, TfTypeError)
50223 this.__label = label
50224 this.__property = property
50225 this.__type = type
50226 this.__value = value
50227 this.__valueTypeName = valueTypeName
50228 }
50229
50230 TfPropertyTypeError.prototype = Object.create(Error.prototype)
50231 TfPropertyTypeError.prototype.constructor = TfTypeError
50232
50233 function tfCustomError (expected, actual) {
50234 return new TfTypeError(expected, {}, actual)
50235 }
50236
50237 function tfSubError (e, property, label) {
50238 // sub child?
50239 if (e instanceof TfPropertyTypeError) {
50240 property = property + '.' + e.__property
50241
50242 e = new TfPropertyTypeError(
50243 e.__type, property, e.__label, e.__value, e.__valueTypeName
50244 )
50245
50246 // child?
50247 } else if (e instanceof TfTypeError) {
50248 e = new TfPropertyTypeError(
50249 e.__type, property, label, e.__value, e.__valueTypeName
50250 )
50251 }
50252
50253 Error.captureStackTrace(e)
50254 return e
50255 }
50256
50257 module.exports = {
50258 TfTypeError: TfTypeError,
50259 TfPropertyTypeError: TfPropertyTypeError,
50260 tfCustomError: tfCustomError,
50261 tfSubError: tfSubError,
50262 tfJSON: tfJSON,
50263 getValueTypeName: getValueTypeName
50264 }
50265
50266 },{"./native":140}],138:[function(require,module,exports){
50267 (function (Buffer){
50268 var NATIVE = require('./native')
50269 var ERRORS = require('./errors')
50270
50271 function _Buffer (value) {
50272 return Buffer.isBuffer(value)
50273 }
50274
50275 function Hex (value) {
50276 return typeof value === 'string' && /^([0-9a-f]{2})+$/i.test(value)
50277 }
50278
50279 function _LengthN (type, length) {
50280 var name = type.toJSON()
50281
50282 function Length (value) {
50283 if (!type(value)) return false
50284 if (value.length === length) return true
50285
50286 throw ERRORS.tfCustomError(name + '(Length: ' + length + ')', name + '(Length: ' + value.length + ')')
50287 }
50288 Length.toJSON = function () { return name }
50289
50290 return Length
50291 }
50292
50293 var _ArrayN = _LengthN.bind(null, NATIVE.Array)
50294 var _BufferN = _LengthN.bind(null, _Buffer)
50295 var _HexN = _LengthN.bind(null, Hex)
50296 var _StringN = _LengthN.bind(null, NATIVE.String)
50297
50298 var UINT53_MAX = Math.pow(2, 53) - 1
50299
50300 function Finite (value) {
50301 return typeof value === 'number' && isFinite(value)
50302 }
50303 function Int8 (value) { return ((value << 24) >> 24) === value }
50304 function Int16 (value) { return ((value << 16) >> 16) === value }
50305 function Int32 (value) { return (value | 0) === value }
50306 function UInt8 (value) { return (value & 0xff) === value }
50307 function UInt16 (value) { return (value & 0xffff) === value }
50308 function UInt32 (value) { return (value >>> 0) === value }
50309 function UInt53 (value) {
50310 return typeof value === 'number' &&
50311 value >= 0 &&
50312 value <= UINT53_MAX &&
50313 Math.floor(value) === value
50314 }
50315
50316 var types = {
50317 ArrayN: _ArrayN,
50318 Buffer: _Buffer,
50319 BufferN: _BufferN,
50320 Finite: Finite,
50321 Hex: Hex,
50322 HexN: _HexN,
50323 Int8: Int8,
50324 Int16: Int16,
50325 Int32: Int32,
50326 StringN: _StringN,
50327 UInt8: UInt8,
50328 UInt16: UInt16,
50329 UInt32: UInt32,
50330 UInt53: UInt53
50331 }
50332
50333 for (var typeName in types) {
50334 types[typeName].toJSON = function (t) {
50335 return t
50336 }.bind(null, typeName)
50337 }
50338
50339 module.exports = types
50340
50341 }).call(this,{"isBuffer":require("../../../../../.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
50342 },{"../../../../../.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/is-buffer/index.js":10,"./errors":137,"./native":140}],139:[function(require,module,exports){
50343 var ERRORS = require('./errors')
50344 var NATIVE = require('./native')
50345
50346 // short-hand
50347 var tfJSON = ERRORS.tfJSON
50348 var TfTypeError = ERRORS.TfTypeError
50349 var TfPropertyTypeError = ERRORS.TfPropertyTypeError
50350 var tfSubError = ERRORS.tfSubError
50351 var getValueTypeName = ERRORS.getValueTypeName
50352
50353 var TYPES = {
50354 arrayOf: function arrayOf (type) {
50355 type = compile(type)
50356
50357 function _arrayOf (array, strict) {
50358 if (!NATIVE.Array(array)) return false
50359 if (NATIVE.Nil(array)) return false
50360
50361 return array.every(function (value, i) {
50362 try {
50363 return typeforce(type, value, strict)
50364 } catch (e) {
50365 throw tfSubError(e, i)
50366 }
50367 })
50368 }
50369 _arrayOf.toJSON = function () { return '[' + tfJSON(type) + ']' }
50370
50371 return _arrayOf
50372 },
50373
50374 maybe: function maybe (type) {
50375 type = compile(type)
50376
50377 function _maybe (value, strict) {
50378 return NATIVE.Nil(value) || type(value, strict, maybe)
50379 }
50380 _maybe.toJSON = function () { return '?' + tfJSON(type) }
50381
50382 return _maybe
50383 },
50384
50385 map: function map (propertyType, propertyKeyType) {
50386 propertyType = compile(propertyType)
50387 if (propertyKeyType) propertyKeyType = compile(propertyKeyType)
50388
50389 function _map (value, strict) {
50390 if (!NATIVE.Object(value)) return false
50391 if (NATIVE.Nil(value)) return false
50392
50393 for (var propertyName in value) {
50394 try {
50395 if (propertyKeyType) {
50396 typeforce(propertyKeyType, propertyName, strict)
50397 }
50398 } catch (e) {
50399 throw tfSubError(e, propertyName, 'key')
50400 }
50401
50402 try {
50403 var propertyValue = value[propertyName]
50404 typeforce(propertyType, propertyValue, strict)
50405 } catch (e) {
50406 throw tfSubError(e, propertyName)
50407 }
50408 }
50409
50410 return true
50411 }
50412
50413 if (propertyKeyType) {
50414 _map.toJSON = function () {
50415 return '{' + tfJSON(propertyKeyType) + ': ' + tfJSON(propertyType) + '}'
50416 }
50417 } else {
50418 _map.toJSON = function () { return '{' + tfJSON(propertyType) + '}' }
50419 }
50420
50421 return _map
50422 },
50423
50424 object: function object (uncompiled) {
50425 var type = {}
50426
50427 for (var typePropertyName in uncompiled) {
50428 type[typePropertyName] = compile(uncompiled[typePropertyName])
50429 }
50430
50431 function _object (value, strict) {
50432 if (!NATIVE.Object(value)) return false
50433 if (NATIVE.Nil(value)) return false
50434
50435 var propertyName
50436
50437 try {
50438 for (propertyName in type) {
50439 var propertyType = type[propertyName]
50440 var propertyValue = value[propertyName]
50441
50442 typeforce(propertyType, propertyValue, strict)
50443 }
50444 } catch (e) {
50445 throw tfSubError(e, propertyName)
50446 }
50447
50448 if (strict) {
50449 for (propertyName in value) {
50450 if (type[propertyName]) continue
50451
50452 throw new TfPropertyTypeError(undefined, propertyName)
50453 }
50454 }
50455
50456 return true
50457 }
50458 _object.toJSON = function () { return tfJSON(type) }
50459
50460 return _object
50461 },
50462
50463 oneOf: function oneOf () {
50464 var types = [].slice.call(arguments).map(compile)
50465
50466 function _oneOf (value, strict) {
50467 return types.some(function (type) {
50468 try {
50469 return typeforce(type, value, strict)
50470 } catch (e) {
50471 return false
50472 }
50473 })
50474 }
50475 _oneOf.toJSON = function () { return types.map(tfJSON).join('|') }
50476
50477 return _oneOf
50478 },
50479
50480 quacksLike: function quacksLike (type) {
50481 function _quacksLike (value) {
50482 return type === getValueTypeName(value)
50483 }
50484 _quacksLike.toJSON = function () { return type }
50485
50486 return _quacksLike
50487 },
50488
50489 tuple: function tuple () {
50490 var types = [].slice.call(arguments).map(compile)
50491
50492 function _tuple (values, strict) {
50493 if (NATIVE.Nil(values)) return false
50494 if (NATIVE.Nil(values.length)) return false
50495 if (strict && (values.length !== types.length)) return false
50496
50497 return types.every(function (type, i) {
50498 try {
50499 return typeforce(type, values[i], strict)
50500 } catch (e) {
50501 throw tfSubError(e, i)
50502 }
50503 })
50504 }
50505 _tuple.toJSON = function () { return '(' + types.map(tfJSON).join(', ') + ')' }
50506
50507 return _tuple
50508 },
50509
50510 value: function value (expected) {
50511 function _value (actual) {
50512 return actual === expected
50513 }
50514 _value.toJSON = function () { return expected }
50515
50516 return _value
50517 }
50518 }
50519
50520 function compile (type) {
50521 if (NATIVE.String(type)) {
50522 if (type[0] === '?') return TYPES.maybe(type.slice(1))
50523
50524 return NATIVE[type] || TYPES.quacksLike(type)
50525 } else if (type && NATIVE.Object(type)) {
50526 if (NATIVE.Array(type)) return TYPES.arrayOf(type[0])
50527
50528 return TYPES.object(type)
50529 } else if (NATIVE.Function(type)) {
50530 return type
50531 }
50532
50533 return TYPES.value(type)
50534 }
50535
50536 function typeforce (type, value, strict, surrogate) {
50537 if (NATIVE.Function(type)) {
50538 if (type(value, strict)) return true
50539
50540 throw new TfTypeError(surrogate || type, value)
50541 }
50542
50543 // JIT
50544 return typeforce(compile(type), value, strict)
50545 }
50546
50547 // assign types to typeforce function
50548 for (var typeName in NATIVE) {
50549 typeforce[typeName] = NATIVE[typeName]
50550 }
50551
50552 for (typeName in TYPES) {
50553 typeforce[typeName] = TYPES[typeName]
50554 }
50555
50556 var EXTRA = require('./extra')
50557 for (typeName in EXTRA) {
50558 typeforce[typeName] = EXTRA[typeName]
50559 }
50560
50561 // async wrapper
50562 function __async (type, value, strict, callback) {
50563 // default to falsy strict if using shorthand overload
50564 if (typeof strict === 'function') return __async(type, value, false, strict)
50565
50566 try {
50567 typeforce(type, value, strict)
50568 } catch (e) {
50569 return callback(e)
50570 }
50571
50572 callback()
50573 }
50574
50575 typeforce.async = __async
50576 typeforce.compile = compile
50577 typeforce.TfTypeError = TfTypeError
50578 typeforce.TfPropertyTypeError = TfPropertyTypeError
50579
50580 module.exports = typeforce
50581
50582 },{"./errors":137,"./extra":138,"./native":140}],140:[function(require,module,exports){
50583 var types = {
50584 Array: function (value) { return value !== null && value !== undefined && value.constructor === Array },
50585 Boolean: function (value) { return typeof value === 'boolean' },
50586 Function: function (value) { return typeof value === 'function' },
50587 Nil: function (value) { return value === undefined || value === null },
50588 Number: function (value) { return typeof value === 'number' },
50589 Object: function (value) { return typeof value === 'object' },
50590 String: function (value) { return typeof value === 'string' },
50591 '': function () { return true }
50592 }
50593
50594 // TODO: deprecate
50595 types.Null = types.Nil
50596
50597 for (var typeName in types) {
50598 types[typeName].toJSON = function (t) {
50599 return t
50600 }.bind(null, typeName)
50601 }
50602
50603 module.exports = types
50604
50605 },{}],141:[function(require,module,exports){
50606 (function (Buffer){
50607 'use strict'
50608
50609 // Number.MAX_SAFE_INTEGER
50610 var MAX_SAFE_INTEGER = 9007199254740991
50611
50612 function checkUInt53 (n) {
50613 if (n < 0 || n > MAX_SAFE_INTEGER || n % 1 !== 0) throw new RangeError('value out of range')
50614 }
50615
50616 function encode (number, buffer, offset) {
50617 checkUInt53(number)
50618
50619 if (!buffer) buffer = new Buffer(encodingLength(number))
50620 if (!Buffer.isBuffer(buffer)) throw new TypeError('buffer must be a Buffer instance')
50621 if (!offset) offset = 0
50622
50623 // 8 bit
50624 if (number < 0xfd) {
50625 buffer.writeUInt8(number, offset)
50626 encode.bytes = 1
50627
50628 // 16 bit
50629 } else if (number <= 0xffff) {
50630 buffer.writeUInt8(0xfd, offset)
50631 buffer.writeUInt16LE(number, offset + 1)
50632 encode.bytes = 3
50633
50634 // 32 bit
50635 } else if (number <= 0xffffffff) {
50636 buffer.writeUInt8(0xfe, offset)
50637 buffer.writeUInt32LE(number, offset + 1)
50638 encode.bytes = 5
50639
50640 // 64 bit
50641 } else {
50642 buffer.writeUInt8(0xff, offset)
50643 buffer.writeUInt32LE(number >>> 0, offset + 1)
50644 buffer.writeUInt32LE((number / 0x100000000) | 0, offset + 5)
50645 encode.bytes = 9
50646 }
50647
50648 return buffer
50649 }
50650
50651 function decode (buffer, offset) {
50652 if (!Buffer.isBuffer(buffer)) throw new TypeError('buffer must be a Buffer instance')
50653 if (!offset) offset = 0
50654
50655 var first = buffer.readUInt8(offset)
50656
50657 // 8 bit
50658 if (first < 0xfd) {
50659 decode.bytes = 1
50660 return first
50661
50662 // 16 bit
50663 } else if (first === 0xfd) {
50664 decode.bytes = 3
50665 return buffer.readUInt16LE(offset + 1)
50666
50667 // 32 bit
50668 } else if (first === 0xfe) {
50669 decode.bytes = 5
50670 return buffer.readUInt32LE(offset + 1)
50671
50672 // 64 bit
50673 } else {
50674 decode.bytes = 9
50675 var lo = buffer.readUInt32LE(offset + 1)
50676 var hi = buffer.readUInt32LE(offset + 5)
50677 var number = hi * 0x0100000000 + lo
50678 checkUInt53(number)
50679
50680 return number
50681 }
50682 }
50683
50684 function encodingLength (number) {
50685 checkUInt53(number)
50686
50687 return (
50688 number < 0xfd ? 1
50689 : number <= 0xffff ? 3
50690 : number <= 0xffffffff ? 5
50691 : 9
50692 )
50693 }
50694
50695 module.exports = { encode: encode, decode: decode, encodingLength: encodingLength }
50696
50697 }).call(this,require("buffer").Buffer)
50698 },{"buffer":5}],142:[function(require,module,exports){
50699 (function (Buffer){
50700 var bs58check = require('bs58check')
50701
50702 function decodeRaw (buffer, version) {
50703 // check version only if defined
50704 if (version !== undefined && buffer[0] !== version) throw new Error('Invalid network version')
50705
50706 // uncompressed
50707 if (buffer.length === 33) {
50708 return {
50709 version: buffer[0],
50710 privateKey: buffer.slice(1, 33),
50711 compressed: false
50712 }
50713 }
50714
50715 // invalid length
50716 if (buffer.length !== 34) throw new Error('Invalid WIF length')
50717
50718 // invalid compression flag
50719 if (buffer[33] !== 0x01) throw new Error('Invalid compression flag')
50720
50721 return {
50722 version: buffer[0],
50723 privateKey: buffer.slice(1, 33),
50724 compressed: true
50725 }
50726 }
50727
50728 function encodeRaw (version, privateKey, compressed) {
50729 var result = new Buffer(compressed ? 34 : 33)
50730
50731 result.writeUInt8(version, 0)
50732 privateKey.copy(result, 1)
50733
50734 if (compressed) {
50735 result[33] = 0x01
50736 }
50737
50738 return result
50739 }
50740
50741 function decode (string, version) {
50742 return decodeRaw(bs58check.decode(string), version)
50743 }
50744
50745 function encode (version, privateKey, compressed) {
50746 if (typeof version === 'number') return bs58check.encode(encodeRaw(version, privateKey, compressed))
50747
50748 return bs58check.encode(
50749 encodeRaw(
50750 version.version,
50751 version.privateKey,
50752 version.compressed
50753 )
50754 )
50755 }
50756
50757 module.exports = {
50758 decode: decode,
50759 decodeRaw: decodeRaw,
50760 encode: encode,
50761 encodeRaw: encodeRaw
50762 }
50763
50764 }).call(this,require("buffer").Buffer)
50765 },{"bs58check":85,"buffer":5}]},{},[34])(34)
50766 });</script>
50767 <script>bitcoinjs.bitcoin.networks.shadow = {
50768 messagePrefix: 'unused',
50769 bip32: {
50770 public: 0xEE80286A,
50771 private: 0xEE8031E8
50772 },
50773 pubKeyHash: 0x3f,
50774 scriptHash: 0x7d,
50775 wif: 0xbf
50776 };
50777
50778 bitcoinjs.bitcoin.networks.shadowtn = {
50779 messagePrefix: 'unused',
50780 bip32: {
50781 public: 0x76C0FDFB,
50782 private: 0x76C1077A
50783 },
50784 pubKeyHash: 0x7f,
50785 scriptHash: 0xc4,
50786 wif: 0xff
50787 };
50788
50789 bitcoinjs.bitcoin.networks.clam = {
50790 messagePrefix: 'unused',
50791 bip32: {
50792 public: 0xa8c26d64,
50793 private: 0xa8c17826
50794 },
50795 pubKeyHash: 0x89,
50796 scriptHash: 0x00, // TODO set this correctly
50797 wif: 0x85
50798 };
50799
50800 bitcoinjs.bitcoin.networks.crown = {
50801 messagePrefix: 'unused',
50802 bip32: {
50803 public: 0x0488b21e,
50804 private: 0x0488ade4
50805 },
50806 pubKeyHash: 0x00,
50807 scriptHash: 0x05,
50808 wif: 0x80
50809 };
50810
50811 bitcoinjs.bitcoin.networks.dash = {
50812 messagePrefix: 'unused',
50813 bip32: {
50814 public: 0x0488b21e,
50815 private: 0x0488ade4
50816 },
50817 pubKeyHash: 0x4c,
50818 scriptHash: 0x10,
50819 wif: 0xcc
50820 };
50821
50822 bitcoinjs.bitcoin.networks.maza = {
50823 messagePrefix: 'unused',
50824 bip32: {
50825 public: 0x0488b21e,
50826 private: 0x0488ade4
50827 },
50828 pubKeyHash: 0x32,
50829 scriptHash: 0x09,
50830 wif: 0xe0
50831 };
50832
50833 bitcoinjs.bitcoin.networks.dashtn = {
50834 messagePrefix: 'unused',
50835 bip32: {
50836 public: 0x043587cf,
50837 private: 0x04358394
50838 },
50839 pubKeyHash: 0x8c,
50840 scriptHash: 0x13,
50841 wif: 0xef
50842 };
50843
50844 bitcoinjs.bitcoin.networks.game = {
50845 messagePrefix: 'unused',
50846 bip32: {
50847 public: 0x0488b21e,
50848 private: 0x0488ade4
50849 },
50850 pubKeyHash: 0x26,
50851 scriptHash: 0x05,
50852 wif: 0xa6
50853 };
50854
50855 bitcoinjs.bitcoin.networks.namecoin = {
50856 messagePrefix: 'unused',
50857 bip32: {
50858 public: 0x0488b21e,
50859 private: 0x0488ade4
50860 },
50861 pubKeyHash: 0x34,
50862 scriptHash: 0x00, // TODO set this correctly
50863 wif: 0x80
50864 };
50865
50866 bitcoinjs.bitcoin.networks.peercoin = {
50867 messagePrefix: 'unused',
50868 bip32: {
50869 public: 0x0488b21e,
50870 private: 0x0488ade4
50871 },
50872 pubKeyHash: 0x37,
50873 scriptHash: 0x00, // TODO set this correctly
50874 wif: 0xb7
50875 };
50876
50877 bitcoinjs.bitcoin.networks.axe = {
50878 messagePrefix: 'unused',
50879 bip32: {
50880 public: 0x0488b21e,
50881 private: 0x0488ade4
50882 },
50883 pubKeyHash: 0x4B,
50884 scriptHash: 0xCB, // TODO set this correctly
50885 wif: 0xCB
50886 };
50887
50888 bitcoinjs.bitcoin.networks.slimcoin = {
50889 messagePrefix: 'unused',
50890 bip32: {
50891 public: 0xef6adf10,
50892 private: 0xef69ea80
50893 },
50894 pubKeyHash: 0x3f,
50895 scriptHash: 0x7d,
50896 wif: 0x46
50897 };
50898
50899 bitcoinjs.bitcoin.networks.slimcointn = {
50900 messagePrefix: 'unused',
50901 bip32: {
50902 public: 0x043587CF,
50903 private: 0x04358394
50904 },
50905 pubKeyHash: 0x6f,
50906 scriptHash: 0xc4,
50907 wif: 0x57
50908 };
50909
50910 bitcoinjs.bitcoin.networks.dogecoin = {
50911 messagePrefix: '\x19Dogecoin Signed Message:\n',
50912 bip32: {
50913 public: 0x02facafd,
50914 private: 0x02fac398
50915 },
50916 pubKeyHash: 0x1e,
50917 scriptHash: 0x16,
50918 wif: 0x9e
50919 };
50920
50921 bitcoinjs.bitcoin.networks.viacoin = {
50922 messagePrefix: '\x18Viacoin Signed Message:\n',
50923 bip32: {
50924 public: 0x0488b21e,
50925 private: 0x0488ade4
50926 },
50927 pubKeyHash: 0x47,
50928 scriptHash: 0x21,
50929 wif: 0xc7
50930 };
50931
50932 bitcoinjs.bitcoin.networks.viacointestnet = {
50933 messagePrefix: '\x18Viacoin Signed Message:\n',
50934 bip32: {
50935 public: 0x043587cf,
50936 private: 0x04358394
50937 },
50938 pubKeyHash: 0x7f,
50939 scriptHash: 0xc4,
50940 wif: 0xff
50941 };
50942
50943 bitcoinjs.bitcoin.networks.gamerscoin = {
50944 messagePrefix: '\x19Gamerscoin Signed Message:\n',
50945 bip32: {
50946 public: 0x019da462,
50947 private: 0x019d9cfe
50948 },
50949 pubKeyHash: 0x26,
50950 scriptHash: 0x05,
50951 wif: 0xA6
50952 };
50953
50954 bitcoinjs.bitcoin.networks.jumbucks = {
50955 messagePrefix: '\x19Jumbucks Signed Message:\n',
50956 bip32: {
50957 public: 0x037a689a,
50958 private: 0x037a6460
50959 },
50960 pubKeyHash: 0x2b,
50961 scriptHash: 0x05,
50962 wif: 0xab
50963 };
50964
50965 bitcoinjs.bitcoin.networks.zetacoin = {
50966 messagePrefix: '\x18Zetacoin Signed Message:\n',
50967 bip32: {
50968 public: 0x0488b21e,
50969 private: 0x0488ade4
50970 },
50971 pubKeyHash: 0x50,
50972 scriptHash: 0x09,
50973 wif: 0xe0
50974 };
50975
50976 bitcoinjs.bitcoin.networks.myriadcoin = {
50977 messagePrefix: 'unused',
50978 bip32: {
50979 public: 0x0488b21e,
50980 private: 0x0488ade4
50981 },
50982 pubKeyHash: 0x32,
50983 scriptHash: 0x00, // TODO set this correctly
50984 wif: 0xb2
50985 };
50986
50987
50988 bitcoinjs.bitcoin.networks.onixcoin = {
50989 messagePrefix: 'unused',
50990 bip32: {
50991 public: 0x049d7cb2,
50992 private: 0x049d7878
50993 },
50994 pubKeyHash: 0x4B,
50995 scriptHash: 0x05,
50996 wif: 0x80
50997 };
50998
50999 bitcoinjs.bitcoin.networks.pivx = {
51000 messagePrefix: 'unused',
51001 bip32: {
51002 public: 0x022d2533,
51003 private: 0x0221312b
51004 },
51005 pubKeyHash: 0x1e,
51006 scriptHash: 0x0d,
51007 wif: 0xd4
51008 };
51009
51010 bitcoinjs.bitcoin.networks.pivxtestnet = {
51011 messagePrefix: 'unused',
51012 bip32: {
51013 public: 0x3a8061a0,
51014 private: 0x3a805837
51015 },
51016 pubKeyHash: 0x8b,
51017 scriptHash: 0x13,
51018 wif: 0xef
51019 };
51020
51021 bitcoinjs.bitcoin.networks.fujicoin = {
51022 messagePrefix: '\x19FujiCoin Signed Message:\n',
51023 bip32: {
51024 public: 0x0488b21e,
51025 private: 0x0488ade4
51026 },
51027 pubKeyHash: 0x24,
51028 scriptHash: 0x10,
51029 wif: 0xa4
51030 };
51031
51032 bitcoinjs.bitcoin.networks.nubits = {
51033 messagePrefix: '\x18Nu Signed Message:\n',
51034 bip32: {
51035 public: 0x0488b21e,
51036 private: 0x0488ade4
51037 },
51038 pubKeyHash: 0x19,
51039 scriptHash: 0x1a,
51040 wif: 0x96,
51041 };
51042
51043 bitcoinjs.bitcoin.networks.bgold = {
51044 messagePrefix: 'unused',
51045 bip32: {
51046 public: 0x0488b21e,
51047 private: 0x0488ade4
51048 },
51049 pubKeyHash: 38,
51050 scriptHash: 23,
51051 wif: 128
51052 };
51053
51054 bitcoinjs.bitcoin.networks.bitcoinCashBitbpay = {
51055 messagePrefix: '\x18Bitcoin Signed Message:\n',
51056 bip32: {
51057 public: 0x0488b21e,
51058 private: 0x0488ade4
51059 },
51060 pubKeyHash: 0x1c,
51061 scriptHash: 0x28,
51062 wif: 0x80
51063 };
51064
51065 bitcoinjs.bitcoin.networks.monacoin = {
51066 messagePrefix: '\x18Monacoin Signed Message:\n',
51067 bip32: {
51068 public: 0x0488b21e,
51069 private: 0x0488ade4
51070 },
51071 pubKeyHash: 0x32,
51072 scriptHash: 0x37,
51073 wif: 0xb0
51074 };
51075
51076 bitcoinjs.bitcoin.networks.litecoinXprv = {
51077 messagePrefix: '\x19Litecoin Signed Message:\n',
51078 bip32: {
51079 public: 0x0488b21e,
51080 private: 0x0488ade4,
51081 },
51082 pubKeyHash: 0x30,
51083 scriptHash: 0x32,
51084 wif: 0xb0
51085 };
51086
51087 bitcoinjs.bitcoin.networks.komodo = {
51088 messagePrefix: '\x18Komodo Signed Message:\n',
51089 bip32: {
51090 public: 0x0488B21E,
51091 private: 0x0488ADE4
51092 },
51093 pubKeyHash: 0x3c,
51094 scriptHash: 0x55,
51095 wif: 0xbc
51096 };
51097 </script>
51098 <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.bitcoinjsBip38 = 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){
51099 var asn1 = exports;
51100
51101 asn1.bignum = require('bn.js');
51102
51103 asn1.define = require('./asn1/api').define;
51104 asn1.base = require('./asn1/base');
51105 asn1.constants = require('./asn1/constants');
51106 asn1.decoders = require('./asn1/decoders');
51107 asn1.encoders = require('./asn1/encoders');
51108
51109 },{"./asn1/api":2,"./asn1/base":4,"./asn1/constants":8,"./asn1/decoders":10,"./asn1/encoders":13,"bn.js":17}],2:[function(require,module,exports){
51110 var asn1 = require('../asn1');
51111 var inherits = require('inherits');
51112
51113 var api = exports;
51114
51115 api.define = function define(name, body) {
51116 return new Entity(name, body);
51117 };
51118
51119 function Entity(name, body) {
51120 this.name = name;
51121 this.body = body;
51122
51123 this.decoders = {};
51124 this.encoders = {};
51125 };
51126
51127 Entity.prototype._createNamed = function createNamed(base) {
51128 var named;
51129 try {
51130 named = require('vm').runInThisContext(
51131 '(function ' + this.name + '(entity) {\n' +
51132 ' this._initNamed(entity);\n' +
51133 '})'
51134 );
51135 } catch (e) {
51136 named = function (entity) {
51137 this._initNamed(entity);
51138 };
51139 }
51140 inherits(named, base);
51141 named.prototype._initNamed = function initnamed(entity) {
51142 base.call(this, entity);
51143 };
51144
51145 return new named(this);
51146 };
51147
51148 Entity.prototype._getDecoder = function _getDecoder(enc) {
51149 enc = enc || 'der';
51150 // Lazily create decoder
51151 if (!this.decoders.hasOwnProperty(enc))
51152 this.decoders[enc] = this._createNamed(asn1.decoders[enc]);
51153 return this.decoders[enc];
51154 };
51155
51156 Entity.prototype.decode = function decode(data, enc, options) {
51157 return this._getDecoder(enc).decode(data, options);
51158 };
51159
51160 Entity.prototype._getEncoder = function _getEncoder(enc) {
51161 enc = enc || 'der';
51162 // Lazily create encoder
51163 if (!this.encoders.hasOwnProperty(enc))
51164 this.encoders[enc] = this._createNamed(asn1.encoders[enc]);
51165 return this.encoders[enc];
51166 };
51167
51168 Entity.prototype.encode = function encode(data, enc, /* internal */ reporter) {
51169 return this._getEncoder(enc).encode(data, reporter);
51170 };
51171
51172 },{"../asn1":1,"inherits":95,"vm":149}],3:[function(require,module,exports){
51173 var inherits = require('inherits');
51174 var Reporter = require('../base').Reporter;
51175 var Buffer = require('buffer').Buffer;
51176
51177 function DecoderBuffer(base, options) {
51178 Reporter.call(this, options);
51179 if (!Buffer.isBuffer(base)) {
51180 this.error('Input not Buffer');
51181 return;
51182 }
51183
51184 this.base = base;
51185 this.offset = 0;
51186 this.length = base.length;
51187 }
51188 inherits(DecoderBuffer, Reporter);
51189 exports.DecoderBuffer = DecoderBuffer;
51190
51191 DecoderBuffer.prototype.save = function save() {
51192 return { offset: this.offset, reporter: Reporter.prototype.save.call(this) };
51193 };
51194
51195 DecoderBuffer.prototype.restore = function restore(save) {
51196 // Return skipped data
51197 var res = new DecoderBuffer(this.base);
51198 res.offset = save.offset;
51199 res.length = this.offset;
51200
51201 this.offset = save.offset;
51202 Reporter.prototype.restore.call(this, save.reporter);
51203
51204 return res;
51205 };
51206
51207 DecoderBuffer.prototype.isEmpty = function isEmpty() {
51208 return this.offset === this.length;
51209 };
51210
51211 DecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {
51212 if (this.offset + 1 <= this.length)
51213 return this.base.readUInt8(this.offset++, true);
51214 else
51215 return this.error(fail || 'DecoderBuffer overrun');
51216 }
51217
51218 DecoderBuffer.prototype.skip = function skip(bytes, fail) {
51219 if (!(this.offset + bytes <= this.length))
51220 return this.error(fail || 'DecoderBuffer overrun');
51221
51222 var res = new DecoderBuffer(this.base);
51223
51224 // Share reporter state
51225 res._reporterState = this._reporterState;
51226
51227 res.offset = this.offset;
51228 res.length = this.offset + bytes;
51229 this.offset += bytes;
51230 return res;
51231 }
51232
51233 DecoderBuffer.prototype.raw = function raw(save) {
51234 return this.base.slice(save ? save.offset : this.offset, this.length);
51235 }
51236
51237 function EncoderBuffer(value, reporter) {
51238 if (Array.isArray(value)) {
51239 this.length = 0;
51240 this.value = value.map(function(item) {
51241 if (!(item instanceof EncoderBuffer))
51242 item = new EncoderBuffer(item, reporter);
51243 this.length += item.length;
51244 return item;
51245 }, this);
51246 } else if (typeof value === 'number') {
51247 if (!(0 <= value && value <= 0xff))
51248 return reporter.error('non-byte EncoderBuffer value');
51249 this.value = value;
51250 this.length = 1;
51251 } else if (typeof value === 'string') {
51252 this.value = value;
51253 this.length = Buffer.byteLength(value);
51254 } else if (Buffer.isBuffer(value)) {
51255 this.value = value;
51256 this.length = value.length;
51257 } else {
51258 return reporter.error('Unsupported type: ' + typeof value);
51259 }
51260 }
51261 exports.EncoderBuffer = EncoderBuffer;
51262
51263 EncoderBuffer.prototype.join = function join(out, offset) {
51264 if (!out)
51265 out = new Buffer(this.length);
51266 if (!offset)
51267 offset = 0;
51268
51269 if (this.length === 0)
51270 return out;
51271
51272 if (Array.isArray(this.value)) {
51273 this.value.forEach(function(item) {
51274 item.join(out, offset);
51275 offset += item.length;
51276 });
51277 } else {
51278 if (typeof this.value === 'number')
51279 out[offset] = this.value;
51280 else if (typeof this.value === 'string')
51281 out.write(this.value, offset);
51282 else if (Buffer.isBuffer(this.value))
51283 this.value.copy(out, offset);
51284 offset += this.length;
51285 }
51286
51287 return out;
51288 };
51289
51290 },{"../base":4,"buffer":47,"inherits":95}],4:[function(require,module,exports){
51291 var base = exports;
51292
51293 base.Reporter = require('./reporter').Reporter;
51294 base.DecoderBuffer = require('./buffer').DecoderBuffer;
51295 base.EncoderBuffer = require('./buffer').EncoderBuffer;
51296 base.Node = require('./node');
51297
51298 },{"./buffer":3,"./node":5,"./reporter":6}],5:[function(require,module,exports){
51299 var Reporter = require('../base').Reporter;
51300 var EncoderBuffer = require('../base').EncoderBuffer;
51301 var DecoderBuffer = require('../base').DecoderBuffer;
51302 var assert = require('minimalistic-assert');
51303
51304 // Supported tags
51305 var tags = [
51306 'seq', 'seqof', 'set', 'setof', 'objid', 'bool',
51307 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc',
51308 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str',
51309 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr'
51310 ];
51311
51312 // Public methods list
51313 var methods = [
51314 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',
51315 'any', 'contains'
51316 ].concat(tags);
51317
51318 // Overrided methods list
51319 var overrided = [
51320 '_peekTag', '_decodeTag', '_use',
51321 '_decodeStr', '_decodeObjid', '_decodeTime',
51322 '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList',
51323
51324 '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime',
51325 '_encodeNull', '_encodeInt', '_encodeBool'
51326 ];
51327
51328 function Node(enc, parent) {
51329 var state = {};
51330 this._baseState = state;
51331
51332 state.enc = enc;
51333
51334 state.parent = parent || null;
51335 state.children = null;
51336
51337 // State
51338 state.tag = null;
51339 state.args = null;
51340 state.reverseArgs = null;
51341 state.choice = null;
51342 state.optional = false;
51343 state.any = false;
51344 state.obj = false;
51345 state.use = null;
51346 state.useDecoder = null;
51347 state.key = null;
51348 state['default'] = null;
51349 state.explicit = null;
51350 state.implicit = null;
51351 state.contains = null;
51352
51353 // Should create new instance on each method
51354 if (!state.parent) {
51355 state.children = [];
51356 this._wrap();
51357 }
51358 }
51359 module.exports = Node;
51360
51361 var stateProps = [
51362 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice',
51363 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit',
51364 'implicit', 'contains'
51365 ];
51366
51367 Node.prototype.clone = function clone() {
51368 var state = this._baseState;
51369 var cstate = {};
51370 stateProps.forEach(function(prop) {
51371 cstate[prop] = state[prop];
51372 });
51373 var res = new this.constructor(cstate.parent);
51374 res._baseState = cstate;
51375 return res;
51376 };
51377
51378 Node.prototype._wrap = function wrap() {
51379 var state = this._baseState;
51380 methods.forEach(function(method) {
51381 this[method] = function _wrappedMethod() {
51382 var clone = new this.constructor(this);
51383 state.children.push(clone);
51384 return clone[method].apply(clone, arguments);
51385 };
51386 }, this);
51387 };
51388
51389 Node.prototype._init = function init(body) {
51390 var state = this._baseState;
51391
51392 assert(state.parent === null);
51393 body.call(this);
51394
51395 // Filter children
51396 state.children = state.children.filter(function(child) {
51397 return child._baseState.parent === this;
51398 }, this);
51399 assert.equal(state.children.length, 1, 'Root node can have only one child');
51400 };
51401
51402 Node.prototype._useArgs = function useArgs(args) {
51403 var state = this._baseState;
51404
51405 // Filter children and args
51406 var children = args.filter(function(arg) {
51407 return arg instanceof this.constructor;
51408 }, this);
51409 args = args.filter(function(arg) {
51410 return !(arg instanceof this.constructor);
51411 }, this);
51412
51413 if (children.length !== 0) {
51414 assert(state.children === null);
51415 state.children = children;
51416
51417 // Replace parent to maintain backward link
51418 children.forEach(function(child) {
51419 child._baseState.parent = this;
51420 }, this);
51421 }
51422 if (args.length !== 0) {
51423 assert(state.args === null);
51424 state.args = args;
51425 state.reverseArgs = args.map(function(arg) {
51426 if (typeof arg !== 'object' || arg.constructor !== Object)
51427 return arg;
51428
51429 var res = {};
51430 Object.keys(arg).forEach(function(key) {
51431 if (key == (key | 0))
51432 key |= 0;
51433 var value = arg[key];
51434 res[value] = key;
51435 });
51436 return res;
51437 });
51438 }
51439 };
51440
51441 //
51442 // Overrided methods
51443 //
51444
51445 overrided.forEach(function(method) {
51446 Node.prototype[method] = function _overrided() {
51447 var state = this._baseState;
51448 throw new Error(method + ' not implemented for encoding: ' + state.enc);
51449 };
51450 });
51451
51452 //
51453 // Public methods
51454 //
51455
51456 tags.forEach(function(tag) {
51457 Node.prototype[tag] = function _tagMethod() {
51458 var state = this._baseState;
51459 var args = Array.prototype.slice.call(arguments);
51460
51461 assert(state.tag === null);
51462 state.tag = tag;
51463
51464 this._useArgs(args);
51465
51466 return this;
51467 };
51468 });
51469
51470 Node.prototype.use = function use(item) {
51471 assert(item);
51472 var state = this._baseState;
51473
51474 assert(state.use === null);
51475 state.use = item;
51476
51477 return this;
51478 };
51479
51480 Node.prototype.optional = function optional() {
51481 var state = this._baseState;
51482
51483 state.optional = true;
51484
51485 return this;
51486 };
51487
51488 Node.prototype.def = function def(val) {
51489 var state = this._baseState;
51490
51491 assert(state['default'] === null);
51492 state['default'] = val;
51493 state.optional = true;
51494
51495 return this;
51496 };
51497
51498 Node.prototype.explicit = function explicit(num) {
51499 var state = this._baseState;
51500
51501 assert(state.explicit === null && state.implicit === null);
51502 state.explicit = num;
51503
51504 return this;
51505 };
51506
51507 Node.prototype.implicit = function implicit(num) {
51508 var state = this._baseState;
51509
51510 assert(state.explicit === null && state.implicit === null);
51511 state.implicit = num;
51512
51513 return this;
51514 };
51515
51516 Node.prototype.obj = function obj() {
51517 var state = this._baseState;
51518 var args = Array.prototype.slice.call(arguments);
51519
51520 state.obj = true;
51521
51522 if (args.length !== 0)
51523 this._useArgs(args);
51524
51525 return this;
51526 };
51527
51528 Node.prototype.key = function key(newKey) {
51529 var state = this._baseState;
51530
51531 assert(state.key === null);
51532 state.key = newKey;
51533
51534 return this;
51535 };
51536
51537 Node.prototype.any = function any() {
51538 var state = this._baseState;
51539
51540 state.any = true;
51541
51542 return this;
51543 };
51544
51545 Node.prototype.choice = function choice(obj) {
51546 var state = this._baseState;
51547
51548 assert(state.choice === null);
51549 state.choice = obj;
51550 this._useArgs(Object.keys(obj).map(function(key) {
51551 return obj[key];
51552 }));
51553
51554 return this;
51555 };
51556
51557 Node.prototype.contains = function contains(item) {
51558 var state = this._baseState;
51559
51560 assert(state.use === null);
51561 state.contains = item;
51562
51563 return this;
51564 };
51565
51566 //
51567 // Decoding
51568 //
51569
51570 Node.prototype._decode = function decode(input, options) {
51571 var state = this._baseState;
51572
51573 // Decode root node
51574 if (state.parent === null)
51575 return input.wrapResult(state.children[0]._decode(input, options));
51576
51577 var result = state['default'];
51578 var present = true;
51579
51580 var prevKey = null;
51581 if (state.key !== null)
51582 prevKey = input.enterKey(state.key);
51583
51584 // Check if tag is there
51585 if (state.optional) {
51586 var tag = null;
51587 if (state.explicit !== null)
51588 tag = state.explicit;
51589 else if (state.implicit !== null)
51590 tag = state.implicit;
51591 else if (state.tag !== null)
51592 tag = state.tag;
51593
51594 if (tag === null && !state.any) {
51595 // Trial and Error
51596 var save = input.save();
51597 try {
51598 if (state.choice === null)
51599 this._decodeGeneric(state.tag, input, options);
51600 else
51601 this._decodeChoice(input, options);
51602 present = true;
51603 } catch (e) {
51604 present = false;
51605 }
51606 input.restore(save);
51607 } else {
51608 present = this._peekTag(input, tag, state.any);
51609
51610 if (input.isError(present))
51611 return present;
51612 }
51613 }
51614
51615 // Push object on stack
51616 var prevObj;
51617 if (state.obj && present)
51618 prevObj = input.enterObject();
51619
51620 if (present) {
51621 // Unwrap explicit values
51622 if (state.explicit !== null) {
51623 var explicit = this._decodeTag(input, state.explicit);
51624 if (input.isError(explicit))
51625 return explicit;
51626 input = explicit;
51627 }
51628
51629 var start = input.offset;
51630
51631 // Unwrap implicit and normal values
51632 if (state.use === null && state.choice === null) {
51633 if (state.any)
51634 var save = input.save();
51635 var body = this._decodeTag(
51636 input,
51637 state.implicit !== null ? state.implicit : state.tag,
51638 state.any
51639 );
51640 if (input.isError(body))
51641 return body;
51642
51643 if (state.any)
51644 result = input.raw(save);
51645 else
51646 input = body;
51647 }
51648
51649 if (options && options.track && state.tag !== null)
51650 options.track(input.path(), start, input.length, 'tagged');
51651
51652 if (options && options.track && state.tag !== null)
51653 options.track(input.path(), input.offset, input.length, 'content');
51654
51655 // Select proper method for tag
51656 if (state.any)
51657 result = result;
51658 else if (state.choice === null)
51659 result = this._decodeGeneric(state.tag, input, options);
51660 else
51661 result = this._decodeChoice(input, options);
51662
51663 if (input.isError(result))
51664 return result;
51665
51666 // Decode children
51667 if (!state.any && state.choice === null && state.children !== null) {
51668 state.children.forEach(function decodeChildren(child) {
51669 // NOTE: We are ignoring errors here, to let parser continue with other
51670 // parts of encoded data
51671 child._decode(input, options);
51672 });
51673 }
51674
51675 // Decode contained/encoded by schema, only in bit or octet strings
51676 if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {
51677 var data = new DecoderBuffer(result);
51678 result = this._getUse(state.contains, input._reporterState.obj)
51679 ._decode(data, options);
51680 }
51681 }
51682
51683 // Pop object
51684 if (state.obj && present)
51685 result = input.leaveObject(prevObj);
51686
51687 // Set key
51688 if (state.key !== null && (result !== null || present === true))
51689 input.leaveKey(prevKey, state.key, result);
51690 else if (prevKey !== null)
51691 input.exitKey(prevKey);
51692
51693 return result;
51694 };
51695
51696 Node.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {
51697 var state = this._baseState;
51698
51699 if (tag === 'seq' || tag === 'set')
51700 return null;
51701 if (tag === 'seqof' || tag === 'setof')
51702 return this._decodeList(input, tag, state.args[0], options);
51703 else if (/str$/.test(tag))
51704 return this._decodeStr(input, tag, options);
51705 else if (tag === 'objid' && state.args)
51706 return this._decodeObjid(input, state.args[0], state.args[1], options);
51707 else if (tag === 'objid')
51708 return this._decodeObjid(input, null, null, options);
51709 else if (tag === 'gentime' || tag === 'utctime')
51710 return this._decodeTime(input, tag, options);
51711 else if (tag === 'null_')
51712 return this._decodeNull(input, options);
51713 else if (tag === 'bool')
51714 return this._decodeBool(input, options);
51715 else if (tag === 'objDesc')
51716 return this._decodeStr(input, tag, options);
51717 else if (tag === 'int' || tag === 'enum')
51718 return this._decodeInt(input, state.args && state.args[0], options);
51719
51720 if (state.use !== null) {
51721 return this._getUse(state.use, input._reporterState.obj)
51722 ._decode(input, options);
51723 } else {
51724 return input.error('unknown tag: ' + tag);
51725 }
51726 };
51727
51728 Node.prototype._getUse = function _getUse(entity, obj) {
51729
51730 var state = this._baseState;
51731 // Create altered use decoder if implicit is set
51732 state.useDecoder = this._use(entity, obj);
51733 assert(state.useDecoder._baseState.parent === null);
51734 state.useDecoder = state.useDecoder._baseState.children[0];
51735 if (state.implicit !== state.useDecoder._baseState.implicit) {
51736 state.useDecoder = state.useDecoder.clone();
51737 state.useDecoder._baseState.implicit = state.implicit;
51738 }
51739 return state.useDecoder;
51740 };
51741
51742 Node.prototype._decodeChoice = function decodeChoice(input, options) {
51743 var state = this._baseState;
51744 var result = null;
51745 var match = false;
51746
51747 Object.keys(state.choice).some(function(key) {
51748 var save = input.save();
51749 var node = state.choice[key];
51750 try {
51751 var value = node._decode(input, options);
51752 if (input.isError(value))
51753 return false;
51754
51755 result = { type: key, value: value };
51756 match = true;
51757 } catch (e) {
51758 input.restore(save);
51759 return false;
51760 }
51761 return true;
51762 }, this);
51763
51764 if (!match)
51765 return input.error('Choice not matched');
51766
51767 return result;
51768 };
51769
51770 //
51771 // Encoding
51772 //
51773
51774 Node.prototype._createEncoderBuffer = function createEncoderBuffer(data) {
51775 return new EncoderBuffer(data, this.reporter);
51776 };
51777
51778 Node.prototype._encode = function encode(data, reporter, parent) {
51779 var state = this._baseState;
51780 if (state['default'] !== null && state['default'] === data)
51781 return;
51782
51783 var result = this._encodeValue(data, reporter, parent);
51784 if (result === undefined)
51785 return;
51786
51787 if (this._skipDefault(result, reporter, parent))
51788 return;
51789
51790 return result;
51791 };
51792
51793 Node.prototype._encodeValue = function encode(data, reporter, parent) {
51794 var state = this._baseState;
51795
51796 // Decode root node
51797 if (state.parent === null)
51798 return state.children[0]._encode(data, reporter || new Reporter());
51799
51800 var result = null;
51801
51802 // Set reporter to share it with a child class
51803 this.reporter = reporter;
51804
51805 // Check if data is there
51806 if (state.optional && data === undefined) {
51807 if (state['default'] !== null)
51808 data = state['default']
51809 else
51810 return;
51811 }
51812
51813 // Encode children first
51814 var content = null;
51815 var primitive = false;
51816 if (state.any) {
51817 // Anything that was given is translated to buffer
51818 result = this._createEncoderBuffer(data);
51819 } else if (state.choice) {
51820 result = this._encodeChoice(data, reporter);
51821 } else if (state.contains) {
51822 content = this._getUse(state.contains, parent)._encode(data, reporter);
51823 primitive = true;
51824 } else if (state.children) {
51825 content = state.children.map(function(child) {
51826 if (child._baseState.tag === 'null_')
51827 return child._encode(null, reporter, data);
51828
51829 if (child._baseState.key === null)
51830 return reporter.error('Child should have a key');
51831 var prevKey = reporter.enterKey(child._baseState.key);
51832
51833 if (typeof data !== 'object')
51834 return reporter.error('Child expected, but input is not object');
51835
51836 var res = child._encode(data[child._baseState.key], reporter, data);
51837 reporter.leaveKey(prevKey);
51838
51839 return res;
51840 }, this).filter(function(child) {
51841 return child;
51842 });
51843 content = this._createEncoderBuffer(content);
51844 } else {
51845 if (state.tag === 'seqof' || state.tag === 'setof') {
51846 // TODO(indutny): this should be thrown on DSL level
51847 if (!(state.args && state.args.length === 1))
51848 return reporter.error('Too many args for : ' + state.tag);
51849
51850 if (!Array.isArray(data))
51851 return reporter.error('seqof/setof, but data is not Array');
51852
51853 var child = this.clone();
51854 child._baseState.implicit = null;
51855 content = this._createEncoderBuffer(data.map(function(item) {
51856 var state = this._baseState;
51857
51858 return this._getUse(state.args[0], data)._encode(item, reporter);
51859 }, child));
51860 } else if (state.use !== null) {
51861 result = this._getUse(state.use, parent)._encode(data, reporter);
51862 } else {
51863 content = this._encodePrimitive(state.tag, data);
51864 primitive = true;
51865 }
51866 }
51867
51868 // Encode data itself
51869 var result;
51870 if (!state.any && state.choice === null) {
51871 var tag = state.implicit !== null ? state.implicit : state.tag;
51872 var cls = state.implicit === null ? 'universal' : 'context';
51873
51874 if (tag === null) {
51875 if (state.use === null)
51876 reporter.error('Tag could be ommited only for .use()');
51877 } else {
51878 if (state.use === null)
51879 result = this._encodeComposite(tag, primitive, cls, content);
51880 }
51881 }
51882
51883 // Wrap in explicit
51884 if (state.explicit !== null)
51885 result = this._encodeComposite(state.explicit, false, 'context', result);
51886
51887 return result;
51888 };
51889
51890 Node.prototype._encodeChoice = function encodeChoice(data, reporter) {
51891 var state = this._baseState;
51892
51893 var node = state.choice[data.type];
51894 if (!node) {
51895 assert(
51896 false,
51897 data.type + ' not found in ' +
51898 JSON.stringify(Object.keys(state.choice)));
51899 }
51900 return node._encode(data.value, reporter);
51901 };
51902
51903 Node.prototype._encodePrimitive = function encodePrimitive(tag, data) {
51904 var state = this._baseState;
51905
51906 if (/str$/.test(tag))
51907 return this._encodeStr(data, tag);
51908 else if (tag === 'objid' && state.args)
51909 return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);
51910 else if (tag === 'objid')
51911 return this._encodeObjid(data, null, null);
51912 else if (tag === 'gentime' || tag === 'utctime')
51913 return this._encodeTime(data, tag);
51914 else if (tag === 'null_')
51915 return this._encodeNull();
51916 else if (tag === 'int' || tag === 'enum')
51917 return this._encodeInt(data, state.args && state.reverseArgs[0]);
51918 else if (tag === 'bool')
51919 return this._encodeBool(data);
51920 else if (tag === 'objDesc')
51921 return this._encodeStr(data, tag);
51922 else
51923 throw new Error('Unsupported tag: ' + tag);
51924 };
51925
51926 Node.prototype._isNumstr = function isNumstr(str) {
51927 return /^[0-9 ]*$/.test(str);
51928 };
51929
51930 Node.prototype._isPrintstr = function isPrintstr(str) {
51931 return /^[A-Za-z0-9 '\(\)\+,\-\.\/:=\?]*$/.test(str);
51932 };
51933
51934 },{"../base":4,"minimalistic-assert":99}],6:[function(require,module,exports){
51935 var inherits = require('inherits');
51936
51937 function Reporter(options) {
51938 this._reporterState = {
51939 obj: null,
51940 path: [],
51941 options: options || {},
51942 errors: []
51943 };
51944 }
51945 exports.Reporter = Reporter;
51946
51947 Reporter.prototype.isError = function isError(obj) {
51948 return obj instanceof ReporterError;
51949 };
51950
51951 Reporter.prototype.save = function save() {
51952 var state = this._reporterState;
51953
51954 return { obj: state.obj, pathLen: state.path.length };
51955 };
51956
51957 Reporter.prototype.restore = function restore(data) {
51958 var state = this._reporterState;
51959
51960 state.obj = data.obj;
51961 state.path = state.path.slice(0, data.pathLen);
51962 };
51963
51964 Reporter.prototype.enterKey = function enterKey(key) {
51965 return this._reporterState.path.push(key);
51966 };
51967
51968 Reporter.prototype.exitKey = function exitKey(index) {
51969 var state = this._reporterState;
51970
51971 state.path = state.path.slice(0, index - 1);
51972 };
51973
51974 Reporter.prototype.leaveKey = function leaveKey(index, key, value) {
51975 var state = this._reporterState;
51976
51977 this.exitKey(index);
51978 if (state.obj !== null)
51979 state.obj[key] = value;
51980 };
51981
51982 Reporter.prototype.path = function path() {
51983 return this._reporterState.path.join('/');
51984 };
51985
51986 Reporter.prototype.enterObject = function enterObject() {
51987 var state = this._reporterState;
51988
51989 var prev = state.obj;
51990 state.obj = {};
51991 return prev;
51992 };
51993
51994 Reporter.prototype.leaveObject = function leaveObject(prev) {
51995 var state = this._reporterState;
51996
51997 var now = state.obj;
51998 state.obj = prev;
51999 return now;
52000 };
52001
52002 Reporter.prototype.error = function error(msg) {
52003 var err;
52004 var state = this._reporterState;
52005
52006 var inherited = msg instanceof ReporterError;
52007 if (inherited) {
52008 err = msg;
52009 } else {
52010 err = new ReporterError(state.path.map(function(elem) {
52011 return '[' + JSON.stringify(elem) + ']';
52012 }).join(''), msg.message || msg, msg.stack);
52013 }
52014
52015 if (!state.options.partial)
52016 throw err;
52017
52018 if (!inherited)
52019 state.errors.push(err);
52020
52021 return err;
52022 };
52023
52024 Reporter.prototype.wrapResult = function wrapResult(result) {
52025 var state = this._reporterState;
52026 if (!state.options.partial)
52027 return result;
52028
52029 return {
52030 result: this.isError(result) ? null : result,
52031 errors: state.errors
52032 };
52033 };
52034
52035 function ReporterError(path, msg) {
52036 this.path = path;
52037 this.rethrow(msg);
52038 };
52039 inherits(ReporterError, Error);
52040
52041 ReporterError.prototype.rethrow = function rethrow(msg) {
52042 this.message = msg + ' at: ' + (this.path || '(shallow)');
52043 if (Error.captureStackTrace)
52044 Error.captureStackTrace(this, ReporterError);
52045
52046 if (!this.stack) {
52047 try {
52048 // IE only adds stack when thrown
52049 throw new Error(this.message);
52050 } catch (e) {
52051 this.stack = e.stack;
52052 }
52053 }
52054 return this;
52055 };
52056
52057 },{"inherits":95}],7:[function(require,module,exports){
52058 var constants = require('../constants');
52059
52060 exports.tagClass = {
52061 0: 'universal',
52062 1: 'application',
52063 2: 'context',
52064 3: 'private'
52065 };
52066 exports.tagClassByName = constants._reverse(exports.tagClass);
52067
52068 exports.tag = {
52069 0x00: 'end',
52070 0x01: 'bool',
52071 0x02: 'int',
52072 0x03: 'bitstr',
52073 0x04: 'octstr',
52074 0x05: 'null_',
52075 0x06: 'objid',
52076 0x07: 'objDesc',
52077 0x08: 'external',
52078 0x09: 'real',
52079 0x0a: 'enum',
52080 0x0b: 'embed',
52081 0x0c: 'utf8str',
52082 0x0d: 'relativeOid',
52083 0x10: 'seq',
52084 0x11: 'set',
52085 0x12: 'numstr',
52086 0x13: 'printstr',
52087 0x14: 't61str',
52088 0x15: 'videostr',
52089 0x16: 'ia5str',
52090 0x17: 'utctime',
52091 0x18: 'gentime',
52092 0x19: 'graphstr',
52093 0x1a: 'iso646str',
52094 0x1b: 'genstr',
52095 0x1c: 'unistr',
52096 0x1d: 'charstr',
52097 0x1e: 'bmpstr'
52098 };
52099 exports.tagByName = constants._reverse(exports.tag);
52100
52101 },{"../constants":8}],8:[function(require,module,exports){
52102 var constants = exports;
52103
52104 // Helper
52105 constants._reverse = function reverse(map) {
52106 var res = {};
52107
52108 Object.keys(map).forEach(function(key) {
52109 // Convert key to integer if it is stringified
52110 if ((key | 0) == key)
52111 key = key | 0;
52112
52113 var value = map[key];
52114 res[value] = key;
52115 });
52116
52117 return res;
52118 };
52119
52120 constants.der = require('./der');
52121
52122 },{"./der":7}],9:[function(require,module,exports){
52123 var inherits = require('inherits');
52124
52125 var asn1 = require('../../asn1');
52126 var base = asn1.base;
52127 var bignum = asn1.bignum;
52128
52129 // Import DER constants
52130 var der = asn1.constants.der;
52131
52132 function DERDecoder(entity) {
52133 this.enc = 'der';
52134 this.name = entity.name;
52135 this.entity = entity;
52136
52137 // Construct base tree
52138 this.tree = new DERNode();
52139 this.tree._init(entity.body);
52140 };
52141 module.exports = DERDecoder;
52142
52143 DERDecoder.prototype.decode = function decode(data, options) {
52144 if (!(data instanceof base.DecoderBuffer))
52145 data = new base.DecoderBuffer(data, options);
52146
52147 return this.tree._decode(data, options);
52148 };
52149
52150 // Tree methods
52151
52152 function DERNode(parent) {
52153 base.Node.call(this, 'der', parent);
52154 }
52155 inherits(DERNode, base.Node);
52156
52157 DERNode.prototype._peekTag = function peekTag(buffer, tag, any) {
52158 if (buffer.isEmpty())
52159 return false;
52160
52161 var state = buffer.save();
52162 var decodedTag = derDecodeTag(buffer, 'Failed to peek tag: "' + tag + '"');
52163 if (buffer.isError(decodedTag))
52164 return decodedTag;
52165
52166 buffer.restore(state);
52167
52168 return decodedTag.tag === tag || decodedTag.tagStr === tag ||
52169 (decodedTag.tagStr + 'of') === tag || any;
52170 };
52171
52172 DERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {
52173 var decodedTag = derDecodeTag(buffer,
52174 'Failed to decode tag of "' + tag + '"');
52175 if (buffer.isError(decodedTag))
52176 return decodedTag;
52177
52178 var len = derDecodeLen(buffer,
52179 decodedTag.primitive,
52180 'Failed to get length of "' + tag + '"');
52181
52182 // Failure
52183 if (buffer.isError(len))
52184 return len;
52185
52186 if (!any &&
52187 decodedTag.tag !== tag &&
52188 decodedTag.tagStr !== tag &&
52189 decodedTag.tagStr + 'of' !== tag) {
52190 return buffer.error('Failed to match tag: "' + tag + '"');
52191 }
52192
52193 if (decodedTag.primitive || len !== null)
52194 return buffer.skip(len, 'Failed to match body of: "' + tag + '"');
52195
52196 // Indefinite length... find END tag
52197 var state = buffer.save();
52198 var res = this._skipUntilEnd(
52199 buffer,
52200 'Failed to skip indefinite length body: "' + this.tag + '"');
52201 if (buffer.isError(res))
52202 return res;
52203
52204 len = buffer.offset - state.offset;
52205 buffer.restore(state);
52206 return buffer.skip(len, 'Failed to match body of: "' + tag + '"');
52207 };
52208
52209 DERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {
52210 while (true) {
52211 var tag = derDecodeTag(buffer, fail);
52212 if (buffer.isError(tag))
52213 return tag;
52214 var len = derDecodeLen(buffer, tag.primitive, fail);
52215 if (buffer.isError(len))
52216 return len;
52217
52218 var res;
52219 if (tag.primitive || len !== null)
52220 res = buffer.skip(len)
52221 else
52222 res = this._skipUntilEnd(buffer, fail);
52223
52224 // Failure
52225 if (buffer.isError(res))
52226 return res;
52227
52228 if (tag.tagStr === 'end')
52229 break;
52230 }
52231 };
52232
52233 DERNode.prototype._decodeList = function decodeList(buffer, tag, decoder,
52234 options) {
52235 var result = [];
52236 while (!buffer.isEmpty()) {
52237 var possibleEnd = this._peekTag(buffer, 'end');
52238 if (buffer.isError(possibleEnd))
52239 return possibleEnd;
52240
52241 var res = decoder.decode(buffer, 'der', options);
52242 if (buffer.isError(res) && possibleEnd)
52243 break;
52244 result.push(res);
52245 }
52246 return result;
52247 };
52248
52249 DERNode.prototype._decodeStr = function decodeStr(buffer, tag) {
52250 if (tag === 'bitstr') {
52251 var unused = buffer.readUInt8();
52252 if (buffer.isError(unused))
52253 return unused;
52254 return { unused: unused, data: buffer.raw() };
52255 } else if (tag === 'bmpstr') {
52256 var raw = buffer.raw();
52257 if (raw.length % 2 === 1)
52258 return buffer.error('Decoding of string type: bmpstr length mismatch');
52259
52260 var str = '';
52261 for (var i = 0; i < raw.length / 2; i++) {
52262 str += String.fromCharCode(raw.readUInt16BE(i * 2));
52263 }
52264 return str;
52265 } else if (tag === 'numstr') {
52266 var numstr = buffer.raw().toString('ascii');
52267 if (!this._isNumstr(numstr)) {
52268 return buffer.error('Decoding of string type: ' +
52269 'numstr unsupported characters');
52270 }
52271 return numstr;
52272 } else if (tag === 'octstr') {
52273 return buffer.raw();
52274 } else if (tag === 'objDesc') {
52275 return buffer.raw();
52276 } else if (tag === 'printstr') {
52277 var printstr = buffer.raw().toString('ascii');
52278 if (!this._isPrintstr(printstr)) {
52279 return buffer.error('Decoding of string type: ' +
52280 'printstr unsupported characters');
52281 }
52282 return printstr;
52283 } else if (/str$/.test(tag)) {
52284 return buffer.raw().toString();
52285 } else {
52286 return buffer.error('Decoding of string type: ' + tag + ' unsupported');
52287 }
52288 };
52289
52290 DERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {
52291 var result;
52292 var identifiers = [];
52293 var ident = 0;
52294 while (!buffer.isEmpty()) {
52295 var subident = buffer.readUInt8();
52296 ident <<= 7;
52297 ident |= subident & 0x7f;
52298 if ((subident & 0x80) === 0) {
52299 identifiers.push(ident);
52300 ident = 0;
52301 }
52302 }
52303 if (subident & 0x80)
52304 identifiers.push(ident);
52305
52306 var first = (identifiers[0] / 40) | 0;
52307 var second = identifiers[0] % 40;
52308
52309 if (relative)
52310 result = identifiers;
52311 else
52312 result = [first, second].concat(identifiers.slice(1));
52313
52314 if (values) {
52315 var tmp = values[result.join(' ')];
52316 if (tmp === undefined)
52317 tmp = values[result.join('.')];
52318 if (tmp !== undefined)
52319 result = tmp;
52320 }
52321
52322 return result;
52323 };
52324
52325 DERNode.prototype._decodeTime = function decodeTime(buffer, tag) {
52326 var str = buffer.raw().toString();
52327 if (tag === 'gentime') {
52328 var year = str.slice(0, 4) | 0;
52329 var mon = str.slice(4, 6) | 0;
52330 var day = str.slice(6, 8) | 0;
52331 var hour = str.slice(8, 10) | 0;
52332 var min = str.slice(10, 12) | 0;
52333 var sec = str.slice(12, 14) | 0;
52334 } else if (tag === 'utctime') {
52335 var year = str.slice(0, 2) | 0;
52336 var mon = str.slice(2, 4) | 0;
52337 var day = str.slice(4, 6) | 0;
52338 var hour = str.slice(6, 8) | 0;
52339 var min = str.slice(8, 10) | 0;
52340 var sec = str.slice(10, 12) | 0;
52341 if (year < 70)
52342 year = 2000 + year;
52343 else
52344 year = 1900 + year;
52345 } else {
52346 return buffer.error('Decoding ' + tag + ' time is not supported yet');
52347 }
52348
52349 return Date.UTC(year, mon - 1, day, hour, min, sec, 0);
52350 };
52351
52352 DERNode.prototype._decodeNull = function decodeNull(buffer) {
52353 return null;
52354 };
52355
52356 DERNode.prototype._decodeBool = function decodeBool(buffer) {
52357 var res = buffer.readUInt8();
52358 if (buffer.isError(res))
52359 return res;
52360 else
52361 return res !== 0;
52362 };
52363
52364 DERNode.prototype._decodeInt = function decodeInt(buffer, values) {
52365 // Bigint, return as it is (assume big endian)
52366 var raw = buffer.raw();
52367 var res = new bignum(raw);
52368
52369 if (values)
52370 res = values[res.toString(10)] || res;
52371
52372 return res;
52373 };
52374
52375 DERNode.prototype._use = function use(entity, obj) {
52376 if (typeof entity === 'function')
52377 entity = entity(obj);
52378 return entity._getDecoder('der').tree;
52379 };
52380
52381 // Utility methods
52382
52383 function derDecodeTag(buf, fail) {
52384 var tag = buf.readUInt8(fail);
52385 if (buf.isError(tag))
52386 return tag;
52387
52388 var cls = der.tagClass[tag >> 6];
52389 var primitive = (tag & 0x20) === 0;
52390
52391 // Multi-octet tag - load
52392 if ((tag & 0x1f) === 0x1f) {
52393 var oct = tag;
52394 tag = 0;
52395 while ((oct & 0x80) === 0x80) {
52396 oct = buf.readUInt8(fail);
52397 if (buf.isError(oct))
52398 return oct;
52399
52400 tag <<= 7;
52401 tag |= oct & 0x7f;
52402 }
52403 } else {
52404 tag &= 0x1f;
52405 }
52406 var tagStr = der.tag[tag];
52407
52408 return {
52409 cls: cls,
52410 primitive: primitive,
52411 tag: tag,
52412 tagStr: tagStr
52413 };
52414 }
52415
52416 function derDecodeLen(buf, primitive, fail) {
52417 var len = buf.readUInt8(fail);
52418 if (buf.isError(len))
52419 return len;
52420
52421 // Indefinite form
52422 if (!primitive && len === 0x80)
52423 return null;
52424
52425 // Definite form
52426 if ((len & 0x80) === 0) {
52427 // Short form
52428 return len;
52429 }
52430
52431 // Long form
52432 var num = len & 0x7f;
52433 if (num > 4)
52434 return buf.error('length octect is too long');
52435
52436 len = 0;
52437 for (var i = 0; i < num; i++) {
52438 len <<= 8;
52439 var j = buf.readUInt8(fail);
52440 if (buf.isError(j))
52441 return j;
52442 len |= j;
52443 }
52444
52445 return len;
52446 }
52447
52448 },{"../../asn1":1,"inherits":95}],10:[function(require,module,exports){
52449 var decoders = exports;
52450
52451 decoders.der = require('./der');
52452 decoders.pem = require('./pem');
52453
52454 },{"./der":9,"./pem":11}],11:[function(require,module,exports){
52455 var inherits = require('inherits');
52456 var Buffer = require('buffer').Buffer;
52457
52458 var DERDecoder = require('./der');
52459
52460 function PEMDecoder(entity) {
52461 DERDecoder.call(this, entity);
52462 this.enc = 'pem';
52463 };
52464 inherits(PEMDecoder, DERDecoder);
52465 module.exports = PEMDecoder;
52466
52467 PEMDecoder.prototype.decode = function decode(data, options) {
52468 var lines = data.toString().split(/[\r\n]+/g);
52469
52470 var label = options.label.toUpperCase();
52471
52472 var re = /^-----(BEGIN|END) ([^-]+)-----$/;
52473 var start = -1;
52474 var end = -1;
52475 for (var i = 0; i < lines.length; i++) {
52476 var match = lines[i].match(re);
52477 if (match === null)
52478 continue;
52479
52480 if (match[2] !== label)
52481 continue;
52482
52483 if (start === -1) {
52484 if (match[1] !== 'BEGIN')
52485 break;
52486 start = i;
52487 } else {
52488 if (match[1] !== 'END')
52489 break;
52490 end = i;
52491 break;
52492 }
52493 }
52494 if (start === -1 || end === -1)
52495 throw new Error('PEM section not found for: ' + label);
52496
52497 var base64 = lines.slice(start + 1, end).join('');
52498 // Remove excessive symbols
52499 base64.replace(/[^a-z0-9\+\/=]+/gi, '');
52500
52501 var input = new Buffer(base64, 'base64');
52502 return DERDecoder.prototype.decode.call(this, input, options);
52503 };
52504
52505 },{"./der":9,"buffer":47,"inherits":95}],12:[function(require,module,exports){
52506 var inherits = require('inherits');
52507 var Buffer = require('buffer').Buffer;
52508
52509 var asn1 = require('../../asn1');
52510 var base = asn1.base;
52511
52512 // Import DER constants
52513 var der = asn1.constants.der;
52514
52515 function DEREncoder(entity) {
52516 this.enc = 'der';
52517 this.name = entity.name;
52518 this.entity = entity;
52519
52520 // Construct base tree
52521 this.tree = new DERNode();
52522 this.tree._init(entity.body);
52523 };
52524 module.exports = DEREncoder;
52525
52526 DEREncoder.prototype.encode = function encode(data, reporter) {
52527 return this.tree._encode(data, reporter).join();
52528 };
52529
52530 // Tree methods
52531
52532 function DERNode(parent) {
52533 base.Node.call(this, 'der', parent);
52534 }
52535 inherits(DERNode, base.Node);
52536
52537 DERNode.prototype._encodeComposite = function encodeComposite(tag,
52538 primitive,
52539 cls,
52540 content) {
52541 var encodedTag = encodeTag(tag, primitive, cls, this.reporter);
52542
52543 // Short form
52544 if (content.length < 0x80) {
52545 var header = new Buffer(2);
52546 header[0] = encodedTag;
52547 header[1] = content.length;
52548 return this._createEncoderBuffer([ header, content ]);
52549 }
52550
52551 // Long form
52552 // Count octets required to store length
52553 var lenOctets = 1;
52554 for (var i = content.length; i >= 0x100; i >>= 8)
52555 lenOctets++;
52556
52557 var header = new Buffer(1 + 1 + lenOctets);
52558 header[0] = encodedTag;
52559 header[1] = 0x80 | lenOctets;
52560
52561 for (var i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8)
52562 header[i] = j & 0xff;
52563
52564 return this._createEncoderBuffer([ header, content ]);
52565 };
52566
52567 DERNode.prototype._encodeStr = function encodeStr(str, tag) {
52568 if (tag === 'bitstr') {
52569 return this._createEncoderBuffer([ str.unused | 0, str.data ]);
52570 } else if (tag === 'bmpstr') {
52571 var buf = new Buffer(str.length * 2);
52572 for (var i = 0; i < str.length; i++) {
52573 buf.writeUInt16BE(str.charCodeAt(i), i * 2);
52574 }
52575 return this._createEncoderBuffer(buf);
52576 } else if (tag === 'numstr') {
52577 if (!this._isNumstr(str)) {
52578 return this.reporter.error('Encoding of string type: numstr supports ' +
52579 'only digits and space');
52580 }
52581 return this._createEncoderBuffer(str);
52582 } else if (tag === 'printstr') {
52583 if (!this._isPrintstr(str)) {
52584 return this.reporter.error('Encoding of string type: printstr supports ' +
52585 'only latin upper and lower case letters, ' +
52586 'digits, space, apostrophe, left and rigth ' +
52587 'parenthesis, plus sign, comma, hyphen, ' +
52588 'dot, slash, colon, equal sign, ' +
52589 'question mark');
52590 }
52591 return this._createEncoderBuffer(str);
52592 } else if (/str$/.test(tag)) {
52593 return this._createEncoderBuffer(str);
52594 } else if (tag === 'objDesc') {
52595 return this._createEncoderBuffer(str);
52596 } else {
52597 return this.reporter.error('Encoding of string type: ' + tag +
52598 ' unsupported');
52599 }
52600 };
52601
52602 DERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {
52603 if (typeof id === 'string') {
52604 if (!values)
52605 return this.reporter.error('string objid given, but no values map found');
52606 if (!values.hasOwnProperty(id))
52607 return this.reporter.error('objid not found in values map');
52608 id = values[id].split(/[\s\.]+/g);
52609 for (var i = 0; i < id.length; i++)
52610 id[i] |= 0;
52611 } else if (Array.isArray(id)) {
52612 id = id.slice();
52613 for (var i = 0; i < id.length; i++)
52614 id[i] |= 0;
52615 }
52616
52617 if (!Array.isArray(id)) {
52618 return this.reporter.error('objid() should be either array or string, ' +
52619 'got: ' + JSON.stringify(id));
52620 }
52621
52622 if (!relative) {
52623 if (id[1] >= 40)
52624 return this.reporter.error('Second objid identifier OOB');
52625 id.splice(0, 2, id[0] * 40 + id[1]);
52626 }
52627
52628 // Count number of octets
52629 var size = 0;
52630 for (var i = 0; i < id.length; i++) {
52631 var ident = id[i];
52632 for (size++; ident >= 0x80; ident >>= 7)
52633 size++;
52634 }
52635
52636 var objid = new Buffer(size);
52637 var offset = objid.length - 1;
52638 for (var i = id.length - 1; i >= 0; i--) {
52639 var ident = id[i];
52640 objid[offset--] = ident & 0x7f;
52641 while ((ident >>= 7) > 0)
52642 objid[offset--] = 0x80 | (ident & 0x7f);
52643 }
52644
52645 return this._createEncoderBuffer(objid);
52646 };
52647
52648 function two(num) {
52649 if (num < 10)
52650 return '0' + num;
52651 else
52652 return num;
52653 }
52654
52655 DERNode.prototype._encodeTime = function encodeTime(time, tag) {
52656 var str;
52657 var date = new Date(time);
52658
52659 if (tag === 'gentime') {
52660 str = [
52661 two(date.getFullYear()),
52662 two(date.getUTCMonth() + 1),
52663 two(date.getUTCDate()),
52664 two(date.getUTCHours()),
52665 two(date.getUTCMinutes()),
52666 two(date.getUTCSeconds()),
52667 'Z'
52668 ].join('');
52669 } else if (tag === 'utctime') {
52670 str = [
52671 two(date.getFullYear() % 100),
52672 two(date.getUTCMonth() + 1),
52673 two(date.getUTCDate()),
52674 two(date.getUTCHours()),
52675 two(date.getUTCMinutes()),
52676 two(date.getUTCSeconds()),
52677 'Z'
52678 ].join('');
52679 } else {
52680 this.reporter.error('Encoding ' + tag + ' time is not supported yet');
52681 }
52682
52683 return this._encodeStr(str, 'octstr');
52684 };
52685
52686 DERNode.prototype._encodeNull = function encodeNull() {
52687 return this._createEncoderBuffer('');
52688 };
52689
52690 DERNode.prototype._encodeInt = function encodeInt(num, values) {
52691 if (typeof num === 'string') {
52692 if (!values)
52693 return this.reporter.error('String int or enum given, but no values map');
52694 if (!values.hasOwnProperty(num)) {
52695 return this.reporter.error('Values map doesn\'t contain: ' +
52696 JSON.stringify(num));
52697 }
52698 num = values[num];
52699 }
52700
52701 // Bignum, assume big endian
52702 if (typeof num !== 'number' && !Buffer.isBuffer(num)) {
52703 var numArray = num.toArray();
52704 if (!num.sign && numArray[0] & 0x80) {
52705 numArray.unshift(0);
52706 }
52707 num = new Buffer(numArray);
52708 }
52709
52710 if (Buffer.isBuffer(num)) {
52711 var size = num.length;
52712 if (num.length === 0)
52713 size++;
52714
52715 var out = new Buffer(size);
52716 num.copy(out);
52717 if (num.length === 0)
52718 out[0] = 0
52719 return this._createEncoderBuffer(out);
52720 }
52721
52722 if (num < 0x80)
52723 return this._createEncoderBuffer(num);
52724
52725 if (num < 0x100)
52726 return this._createEncoderBuffer([0, num]);
52727
52728 var size = 1;
52729 for (var i = num; i >= 0x100; i >>= 8)
52730 size++;
52731
52732 var out = new Array(size);
52733 for (var i = out.length - 1; i >= 0; i--) {
52734 out[i] = num & 0xff;
52735 num >>= 8;
52736 }
52737 if(out[0] & 0x80) {
52738 out.unshift(0);
52739 }
52740
52741 return this._createEncoderBuffer(new Buffer(out));
52742 };
52743
52744 DERNode.prototype._encodeBool = function encodeBool(value) {
52745 return this._createEncoderBuffer(value ? 0xff : 0);
52746 };
52747
52748 DERNode.prototype._use = function use(entity, obj) {
52749 if (typeof entity === 'function')
52750 entity = entity(obj);
52751 return entity._getEncoder('der').tree;
52752 };
52753
52754 DERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {
52755 var state = this._baseState;
52756 var i;
52757 if (state['default'] === null)
52758 return false;
52759
52760 var data = dataBuffer.join();
52761 if (state.defaultBuffer === undefined)
52762 state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();
52763
52764 if (data.length !== state.defaultBuffer.length)
52765 return false;
52766
52767 for (i=0; i < data.length; i++)
52768 if (data[i] !== state.defaultBuffer[i])
52769 return false;
52770
52771 return true;
52772 };
52773
52774 // Utility methods
52775
52776 function encodeTag(tag, primitive, cls, reporter) {
52777 var res;
52778
52779 if (tag === 'seqof')
52780 tag = 'seq';
52781 else if (tag === 'setof')
52782 tag = 'set';
52783
52784 if (der.tagByName.hasOwnProperty(tag))
52785 res = der.tagByName[tag];
52786 else if (typeof tag === 'number' && (tag | 0) === tag)
52787 res = tag;
52788 else
52789 return reporter.error('Unknown tag: ' + tag);
52790
52791 if (res >= 0x1f)
52792 return reporter.error('Multi-octet tag encoding unsupported');
52793
52794 if (!primitive)
52795 res |= 0x20;
52796
52797 res |= (der.tagClassByName[cls || 'universal'] << 6);
52798
52799 return res;
52800 }
52801
52802 },{"../../asn1":1,"buffer":47,"inherits":95}],13:[function(require,module,exports){
52803 var encoders = exports;
52804
52805 encoders.der = require('./der');
52806 encoders.pem = require('./pem');
52807
52808 },{"./der":12,"./pem":14}],14:[function(require,module,exports){
52809 var inherits = require('inherits');
52810
52811 var DEREncoder = require('./der');
52812
52813 function PEMEncoder(entity) {
52814 DEREncoder.call(this, entity);
52815 this.enc = 'pem';
52816 };
52817 inherits(PEMEncoder, DEREncoder);
52818 module.exports = PEMEncoder;
52819
52820 PEMEncoder.prototype.encode = function encode(data, options) {
52821 var buf = DEREncoder.prototype.encode.call(this, data);
52822
52823 var p = buf.toString('base64');
52824 var out = [ '-----BEGIN ' + options.label + '-----' ];
52825 for (var i = 0; i < p.length; i += 64)
52826 out.push(p.slice(i, i + 64));
52827 out.push('-----END ' + options.label + '-----');
52828 return out.join('\n');
52829 };
52830
52831 },{"./der":12,"inherits":95}],15:[function(require,module,exports){
52832 (function (global){
52833 'use strict';
52834
52835 // compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
52836 // original notice:
52837
52838 /*!
52839 * The buffer module from node.js, for the browser.
52840 *
52841 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
52842 * @license MIT
52843 */
52844 function compare(a, b) {
52845 if (a === b) {
52846 return 0;
52847 }
52848
52849 var x = a.length;
52850 var y = b.length;
52851
52852 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
52853 if (a[i] !== b[i]) {
52854 x = a[i];
52855 y = b[i];
52856 break;
52857 }
52858 }
52859
52860 if (x < y) {
52861 return -1;
52862 }
52863 if (y < x) {
52864 return 1;
52865 }
52866 return 0;
52867 }
52868 function isBuffer(b) {
52869 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
52870 return global.Buffer.isBuffer(b);
52871 }
52872 return !!(b != null && b._isBuffer);
52873 }
52874
52875 // based on node assert, original notice:
52876
52877 // http://wiki.commonjs.org/wiki/Unit_Testing/1.0
52878 //
52879 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
52880 //
52881 // Originally from narwhal.js (http://narwhaljs.org)
52882 // Copyright (c) 2009 Thomas Robinson <280north.com>
52883 //
52884 // Permission is hereby granted, free of charge, to any person obtaining a copy
52885 // of this software and associated documentation files (the 'Software'), to
52886 // deal in the Software without restriction, including without limitation the
52887 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
52888 // sell copies of the Software, and to permit persons to whom the Software is
52889 // furnished to do so, subject to the following conditions:
52890 //
52891 // The above copyright notice and this permission notice shall be included in
52892 // all copies or substantial portions of the Software.
52893 //
52894 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
52895 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
52896 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
52897 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
52898 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
52899 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
52900
52901 var util = require('util/');
52902 var hasOwn = Object.prototype.hasOwnProperty;
52903 var pSlice = Array.prototype.slice;
52904 var functionsHaveNames = (function () {
52905 return function foo() {}.name === 'foo';
52906 }());
52907 function pToString (obj) {
52908 return Object.prototype.toString.call(obj);
52909 }
52910 function isView(arrbuf) {
52911 if (isBuffer(arrbuf)) {
52912 return false;
52913 }
52914 if (typeof global.ArrayBuffer !== 'function') {
52915 return false;
52916 }
52917 if (typeof ArrayBuffer.isView === 'function') {
52918 return ArrayBuffer.isView(arrbuf);
52919 }
52920 if (!arrbuf) {
52921 return false;
52922 }
52923 if (arrbuf instanceof DataView) {
52924 return true;
52925 }
52926 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
52927 return true;
52928 }
52929 return false;
52930 }
52931 // 1. The assert module provides functions that throw
52932 // AssertionError's when particular conditions are not met. The
52933 // assert module must conform to the following interface.
52934
52935 var assert = module.exports = ok;
52936
52937 // 2. The AssertionError is defined in assert.
52938 // new assert.AssertionError({ message: message,
52939 // actual: actual,
52940 // expected: expected })
52941
52942 var regex = /\s*function\s+([^\(\s]*)\s*/;
52943 // based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
52944 function getName(func) {
52945 if (!util.isFunction(func)) {
52946 return;
52947 }
52948 if (functionsHaveNames) {
52949 return func.name;
52950 }
52951 var str = func.toString();
52952 var match = str.match(regex);
52953 return match && match[1];
52954 }
52955 assert.AssertionError = function AssertionError(options) {
52956 this.name = 'AssertionError';
52957 this.actual = options.actual;
52958 this.expected = options.expected;
52959 this.operator = options.operator;
52960 if (options.message) {
52961 this.message = options.message;
52962 this.generatedMessage = false;
52963 } else {
52964 this.message = getMessage(this);
52965 this.generatedMessage = true;
52966 }
52967 var stackStartFunction = options.stackStartFunction || fail;
52968 if (Error.captureStackTrace) {
52969 Error.captureStackTrace(this, stackStartFunction);
52970 } else {
52971 // non v8 browsers so we can have a stacktrace
52972 var err = new Error();
52973 if (err.stack) {
52974 var out = err.stack;
52975
52976 // try to strip useless frames
52977 var fn_name = getName(stackStartFunction);
52978 var idx = out.indexOf('\n' + fn_name);
52979 if (idx >= 0) {
52980 // once we have located the function frame
52981 // we need to strip out everything before it (and its line)
52982 var next_line = out.indexOf('\n', idx + 1);
52983 out = out.substring(next_line + 1);
52984 }
52985
52986 this.stack = out;
52987 }
52988 }
52989 };
52990
52991 // assert.AssertionError instanceof Error
52992 util.inherits(assert.AssertionError, Error);
52993
52994 function truncate(s, n) {
52995 if (typeof s === 'string') {
52996 return s.length < n ? s : s.slice(0, n);
52997 } else {
52998 return s;
52999 }
53000 }
53001 function inspect(something) {
53002 if (functionsHaveNames || !util.isFunction(something)) {
53003 return util.inspect(something);
53004 }
53005 var rawname = getName(something);
53006 var name = rawname ? ': ' + rawname : '';
53007 return '[Function' + name + ']';
53008 }
53009 function getMessage(self) {
53010 return truncate(inspect(self.actual), 128) + ' ' +
53011 self.operator + ' ' +
53012 truncate(inspect(self.expected), 128);
53013 }
53014
53015 // At present only the three keys mentioned above are used and
53016 // understood by the spec. Implementations or sub modules can pass
53017 // other keys to the AssertionError's constructor - they will be
53018 // ignored.
53019
53020 // 3. All of the following functions must throw an AssertionError
53021 // when a corresponding condition is not met, with a message that
53022 // may be undefined if not provided. All assertion methods provide
53023 // both the actual and expected values to the assertion error for
53024 // display purposes.
53025
53026 function fail(actual, expected, message, operator, stackStartFunction) {
53027 throw new assert.AssertionError({
53028 message: message,
53029 actual: actual,
53030 expected: expected,
53031 operator: operator,
53032 stackStartFunction: stackStartFunction
53033 });
53034 }
53035
53036 // EXTENSION! allows for well behaved errors defined elsewhere.
53037 assert.fail = fail;
53038
53039 // 4. Pure assertion tests whether a value is truthy, as determined
53040 // by !!guard.
53041 // assert.ok(guard, message_opt);
53042 // This statement is equivalent to assert.equal(true, !!guard,
53043 // message_opt);. To test strictly for the value true, use
53044 // assert.strictEqual(true, guard, message_opt);.
53045
53046 function ok(value, message) {
53047 if (!value) fail(value, true, message, '==', assert.ok);
53048 }
53049 assert.ok = ok;
53050
53051 // 5. The equality assertion tests shallow, coercive equality with
53052 // ==.
53053 // assert.equal(actual, expected, message_opt);
53054
53055 assert.equal = function equal(actual, expected, message) {
53056 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
53057 };
53058
53059 // 6. The non-equality assertion tests for whether two objects are not equal
53060 // with != assert.notEqual(actual, expected, message_opt);
53061
53062 assert.notEqual = function notEqual(actual, expected, message) {
53063 if (actual == expected) {
53064 fail(actual, expected, message, '!=', assert.notEqual);
53065 }
53066 };
53067
53068 // 7. The equivalence assertion tests a deep equality relation.
53069 // assert.deepEqual(actual, expected, message_opt);
53070
53071 assert.deepEqual = function deepEqual(actual, expected, message) {
53072 if (!_deepEqual(actual, expected, false)) {
53073 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
53074 }
53075 };
53076
53077 assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
53078 if (!_deepEqual(actual, expected, true)) {
53079 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
53080 }
53081 };
53082
53083 function _deepEqual(actual, expected, strict, memos) {
53084 // 7.1. All identical values are equivalent, as determined by ===.
53085 if (actual === expected) {
53086 return true;
53087 } else if (isBuffer(actual) && isBuffer(expected)) {
53088 return compare(actual, expected) === 0;
53089
53090 // 7.2. If the expected value is a Date object, the actual value is
53091 // equivalent if it is also a Date object that refers to the same time.
53092 } else if (util.isDate(actual) && util.isDate(expected)) {
53093 return actual.getTime() === expected.getTime();
53094
53095 // 7.3 If the expected value is a RegExp object, the actual value is
53096 // equivalent if it is also a RegExp object with the same source and
53097 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
53098 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
53099 return actual.source === expected.source &&
53100 actual.global === expected.global &&
53101 actual.multiline === expected.multiline &&
53102 actual.lastIndex === expected.lastIndex &&
53103 actual.ignoreCase === expected.ignoreCase;
53104
53105 // 7.4. Other pairs that do not both pass typeof value == 'object',
53106 // equivalence is determined by ==.
53107 } else if ((actual === null || typeof actual !== 'object') &&
53108 (expected === null || typeof expected !== 'object')) {
53109 return strict ? actual === expected : actual == expected;
53110
53111 // If both values are instances of typed arrays, wrap their underlying
53112 // ArrayBuffers in a Buffer each to increase performance
53113 // This optimization requires the arrays to have the same type as checked by
53114 // Object.prototype.toString (aka pToString). Never perform binary
53115 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
53116 // bit patterns are not identical.
53117 } else if (isView(actual) && isView(expected) &&
53118 pToString(actual) === pToString(expected) &&
53119 !(actual instanceof Float32Array ||
53120 actual instanceof Float64Array)) {
53121 return compare(new Uint8Array(actual.buffer),
53122 new Uint8Array(expected.buffer)) === 0;
53123
53124 // 7.5 For all other Object pairs, including Array objects, equivalence is
53125 // determined by having the same number of owned properties (as verified
53126 // with Object.prototype.hasOwnProperty.call), the same set of keys
53127 // (although not necessarily the same order), equivalent values for every
53128 // corresponding key, and an identical 'prototype' property. Note: this
53129 // accounts for both named and indexed properties on Arrays.
53130 } else if (isBuffer(actual) !== isBuffer(expected)) {
53131 return false;
53132 } else {
53133 memos = memos || {actual: [], expected: []};
53134
53135 var actualIndex = memos.actual.indexOf(actual);
53136 if (actualIndex !== -1) {
53137 if (actualIndex === memos.expected.indexOf(expected)) {
53138 return true;
53139 }
53140 }
53141
53142 memos.actual.push(actual);
53143 memos.expected.push(expected);
53144
53145 return objEquiv(actual, expected, strict, memos);
53146 }
53147 }
53148
53149 function isArguments(object) {
53150 return Object.prototype.toString.call(object) == '[object Arguments]';
53151 }
53152
53153 function objEquiv(a, b, strict, actualVisitedObjects) {
53154 if (a === null || a === undefined || b === null || b === undefined)
53155 return false;
53156 // if one is a primitive, the other must be same
53157 if (util.isPrimitive(a) || util.isPrimitive(b))
53158 return a === b;
53159 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
53160 return false;
53161 var aIsArgs = isArguments(a);
53162 var bIsArgs = isArguments(b);
53163 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
53164 return false;
53165 if (aIsArgs) {
53166 a = pSlice.call(a);
53167 b = pSlice.call(b);
53168 return _deepEqual(a, b, strict);
53169 }
53170 var ka = objectKeys(a);
53171 var kb = objectKeys(b);
53172 var key, i;
53173 // having the same number of owned properties (keys incorporates
53174 // hasOwnProperty)
53175 if (ka.length !== kb.length)
53176 return false;
53177 //the same set of keys (although not necessarily the same order),
53178 ka.sort();
53179 kb.sort();
53180 //~~~cheap key test
53181 for (i = ka.length - 1; i >= 0; i--) {
53182 if (ka[i] !== kb[i])
53183 return false;
53184 }
53185 //equivalent values for every corresponding key, and
53186 //~~~possibly expensive deep test
53187 for (i = ka.length - 1; i >= 0; i--) {
53188 key = ka[i];
53189 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
53190 return false;
53191 }
53192 return true;
53193 }
53194
53195 // 8. The non-equivalence assertion tests for any deep inequality.
53196 // assert.notDeepEqual(actual, expected, message_opt);
53197
53198 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
53199 if (_deepEqual(actual, expected, false)) {
53200 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
53201 }
53202 };
53203
53204 assert.notDeepStrictEqual = notDeepStrictEqual;
53205 function notDeepStrictEqual(actual, expected, message) {
53206 if (_deepEqual(actual, expected, true)) {
53207 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
53208 }
53209 }
53210
53211
53212 // 9. The strict equality assertion tests strict equality, as determined by ===.
53213 // assert.strictEqual(actual, expected, message_opt);
53214
53215 assert.strictEqual = function strictEqual(actual, expected, message) {
53216 if (actual !== expected) {
53217 fail(actual, expected, message, '===', assert.strictEqual);
53218 }
53219 };
53220
53221 // 10. The strict non-equality assertion tests for strict inequality, as
53222 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
53223
53224 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
53225 if (actual === expected) {
53226 fail(actual, expected, message, '!==', assert.notStrictEqual);
53227 }
53228 };
53229
53230 function expectedException(actual, expected) {
53231 if (!actual || !expected) {
53232 return false;
53233 }
53234
53235 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
53236 return expected.test(actual);
53237 }
53238
53239 try {
53240 if (actual instanceof expected) {
53241 return true;
53242 }
53243 } catch (e) {
53244 // Ignore. The instanceof check doesn't work for arrow functions.
53245 }
53246
53247 if (Error.isPrototypeOf(expected)) {
53248 return false;
53249 }
53250
53251 return expected.call({}, actual) === true;
53252 }
53253
53254 function _tryBlock(block) {
53255 var error;
53256 try {
53257 block();
53258 } catch (e) {
53259 error = e;
53260 }
53261 return error;
53262 }
53263
53264 function _throws(shouldThrow, block, expected, message) {
53265 var actual;
53266
53267 if (typeof block !== 'function') {
53268 throw new TypeError('"block" argument must be a function');
53269 }
53270
53271 if (typeof expected === 'string') {
53272 message = expected;
53273 expected = null;
53274 }
53275
53276 actual = _tryBlock(block);
53277
53278 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
53279 (message ? ' ' + message : '.');
53280
53281 if (shouldThrow && !actual) {
53282 fail(actual, expected, 'Missing expected exception' + message);
53283 }
53284
53285 var userProvidedMessage = typeof message === 'string';
53286 var isUnwantedException = !shouldThrow && util.isError(actual);
53287 var isUnexpectedException = !shouldThrow && actual && !expected;
53288
53289 if ((isUnwantedException &&
53290 userProvidedMessage &&
53291 expectedException(actual, expected)) ||
53292 isUnexpectedException) {
53293 fail(actual, expected, 'Got unwanted exception' + message);
53294 }
53295
53296 if ((shouldThrow && actual && expected &&
53297 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
53298 throw actual;
53299 }
53300 }
53301
53302 // 11. Expected to throw an error:
53303 // assert.throws(block, Error_opt, message_opt);
53304
53305 assert.throws = function(block, /*optional*/error, /*optional*/message) {
53306 _throws(true, block, error, message);
53307 };
53308
53309 // EXTENSION! This is annoying to write outside this module.
53310 assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
53311 _throws(false, block, error, message);
53312 };
53313
53314 assert.ifError = function(err) { if (err) throw err; };
53315
53316 var objectKeys = Object.keys || function (obj) {
53317 var keys = [];
53318 for (var key in obj) {
53319 if (hasOwn.call(obj, key)) keys.push(key);
53320 }
53321 return keys;
53322 };
53323
53324 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
53325 },{"util/":148}],16:[function(require,module,exports){
53326 'use strict'
53327
53328 exports.byteLength = byteLength
53329 exports.toByteArray = toByteArray
53330 exports.fromByteArray = fromByteArray
53331
53332 var lookup = []
53333 var revLookup = []
53334 var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
53335
53336 var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
53337 for (var i = 0, len = code.length; i < len; ++i) {
53338 lookup[i] = code[i]
53339 revLookup[code.charCodeAt(i)] = i
53340 }
53341
53342 revLookup['-'.charCodeAt(0)] = 62
53343 revLookup['_'.charCodeAt(0)] = 63
53344
53345 function placeHoldersCount (b64) {
53346 var len = b64.length
53347 if (len % 4 > 0) {
53348 throw new Error('Invalid string. Length must be a multiple of 4')
53349 }
53350
53351 // the number of equal signs (place holders)
53352 // if there are two placeholders, than the two characters before it
53353 // represent one byte
53354 // if there is only one, then the three characters before it represent 2 bytes
53355 // this is just a cheap hack to not do indexOf twice
53356 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
53357 }
53358
53359 function byteLength (b64) {
53360 // base64 is 4/3 + up to two characters of the original data
53361 return b64.length * 3 / 4 - placeHoldersCount(b64)
53362 }
53363
53364 function toByteArray (b64) {
53365 var i, j, l, tmp, placeHolders, arr
53366 var len = b64.length
53367 placeHolders = placeHoldersCount(b64)
53368
53369 arr = new Arr(len * 3 / 4 - placeHolders)
53370
53371 // if there are placeholders, only get up to the last complete 4 chars
53372 l = placeHolders > 0 ? len - 4 : len
53373
53374 var L = 0
53375
53376 for (i = 0, j = 0; i < l; i += 4, j += 3) {
53377 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
53378 arr[L++] = (tmp >> 16) & 0xFF
53379 arr[L++] = (tmp >> 8) & 0xFF
53380 arr[L++] = tmp & 0xFF
53381 }
53382
53383 if (placeHolders === 2) {
53384 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
53385 arr[L++] = tmp & 0xFF
53386 } else if (placeHolders === 1) {
53387 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
53388 arr[L++] = (tmp >> 8) & 0xFF
53389 arr[L++] = tmp & 0xFF
53390 }
53391
53392 return arr
53393 }
53394
53395 function tripletToBase64 (num) {
53396 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
53397 }
53398
53399 function encodeChunk (uint8, start, end) {
53400 var tmp
53401 var output = []
53402 for (var i = start; i < end; i += 3) {
53403 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
53404 output.push(tripletToBase64(tmp))
53405 }
53406 return output.join('')
53407 }
53408
53409 function fromByteArray (uint8) {
53410 var tmp
53411 var len = uint8.length
53412 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
53413 var output = ''
53414 var parts = []
53415 var maxChunkLength = 16383 // must be multiple of 3
53416
53417 // go through the array every three bytes, we'll deal with trailing stuff later
53418 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
53419 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
53420 }
53421
53422 // pad the end with zeros, but make sure to not forget the extra bytes
53423 if (extraBytes === 1) {
53424 tmp = uint8[len - 1]
53425 output += lookup[tmp >> 2]
53426 output += lookup[(tmp << 4) & 0x3F]
53427 output += '=='
53428 } else if (extraBytes === 2) {
53429 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
53430 output += lookup[tmp >> 10]
53431 output += lookup[(tmp >> 4) & 0x3F]
53432 output += lookup[(tmp << 2) & 0x3F]
53433 output += '='
53434 }
53435
53436 parts.push(output)
53437
53438 return parts.join('')
53439 }
53440
53441 },{}],17:[function(require,module,exports){
53442 (function (module, exports) {
53443 'use strict';
53444
53445 // Utils
53446 function assert (val, msg) {
53447 if (!val) throw new Error(msg || 'Assertion failed');
53448 }
53449
53450 // Could use `inherits` module, but don't want to move from single file
53451 // architecture yet.
53452 function inherits (ctor, superCtor) {
53453 ctor.super_ = superCtor;
53454 var TempCtor = function () {};
53455 TempCtor.prototype = superCtor.prototype;
53456 ctor.prototype = new TempCtor();
53457 ctor.prototype.constructor = ctor;
53458 }
53459
53460 // BN
53461
53462 function BN (number, base, endian) {
53463 if (BN.isBN(number)) {
53464 return number;
53465 }
53466
53467 this.negative = 0;
53468 this.words = null;
53469 this.length = 0;
53470
53471 // Reduction context
53472 this.red = null;
53473
53474 if (number !== null) {
53475 if (base === 'le' || base === 'be') {
53476 endian = base;
53477 base = 10;
53478 }
53479
53480 this._init(number || 0, base || 10, endian || 'be');
53481 }
53482 }
53483 if (typeof module === 'object') {
53484 module.exports = BN;
53485 } else {
53486 exports.BN = BN;
53487 }
53488
53489 BN.BN = BN;
53490 BN.wordSize = 26;
53491
53492 var Buffer;
53493 try {
53494 Buffer = require('buf' + 'fer').Buffer;
53495 } catch (e) {
53496 }
53497
53498 BN.isBN = function isBN (num) {
53499 if (num instanceof BN) {
53500 return true;
53501 }
53502
53503 return num !== null && typeof num === 'object' &&
53504 num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
53505 };
53506
53507 BN.max = function max (left, right) {
53508 if (left.cmp(right) > 0) return left;
53509 return right;
53510 };
53511
53512 BN.min = function min (left, right) {
53513 if (left.cmp(right) < 0) return left;
53514 return right;
53515 };
53516
53517 BN.prototype._init = function init (number, base, endian) {
53518 if (typeof number === 'number') {
53519 return this._initNumber(number, base, endian);
53520 }
53521
53522 if (typeof number === 'object') {
53523 return this._initArray(number, base, endian);
53524 }
53525
53526 if (base === 'hex') {
53527 base = 16;
53528 }
53529 assert(base === (base | 0) && base >= 2 && base <= 36);
53530
53531 number = number.toString().replace(/\s+/g, '');
53532 var start = 0;
53533 if (number[0] === '-') {
53534 start++;
53535 }
53536
53537 if (base === 16) {
53538 this._parseHex(number, start);
53539 } else {
53540 this._parseBase(number, base, start);
53541 }
53542
53543 if (number[0] === '-') {
53544 this.negative = 1;
53545 }
53546
53547 this.strip();
53548
53549 if (endian !== 'le') return;
53550
53551 this._initArray(this.toArray(), base, endian);
53552 };
53553
53554 BN.prototype._initNumber = function _initNumber (number, base, endian) {
53555 if (number < 0) {
53556 this.negative = 1;
53557 number = -number;
53558 }
53559 if (number < 0x4000000) {
53560 this.words = [ number & 0x3ffffff ];
53561 this.length = 1;
53562 } else if (number < 0x10000000000000) {
53563 this.words = [
53564 number & 0x3ffffff,
53565 (number / 0x4000000) & 0x3ffffff
53566 ];
53567 this.length = 2;
53568 } else {
53569 assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
53570 this.words = [
53571 number & 0x3ffffff,
53572 (number / 0x4000000) & 0x3ffffff,
53573 1
53574 ];
53575 this.length = 3;
53576 }
53577
53578 if (endian !== 'le') return;
53579
53580 // Reverse the bytes
53581 this._initArray(this.toArray(), base, endian);
53582 };
53583
53584 BN.prototype._initArray = function _initArray (number, base, endian) {
53585 // Perhaps a Uint8Array
53586 assert(typeof number.length === 'number');
53587 if (number.length <= 0) {
53588 this.words = [ 0 ];
53589 this.length = 1;
53590 return this;
53591 }
53592
53593 this.length = Math.ceil(number.length / 3);
53594 this.words = new Array(this.length);
53595 for (var i = 0; i < this.length; i++) {
53596 this.words[i] = 0;
53597 }
53598
53599 var j, w;
53600 var off = 0;
53601 if (endian === 'be') {
53602 for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
53603 w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
53604 this.words[j] |= (w << off) & 0x3ffffff;
53605 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
53606 off += 24;
53607 if (off >= 26) {
53608 off -= 26;
53609 j++;
53610 }
53611 }
53612 } else if (endian === 'le') {
53613 for (i = 0, j = 0; i < number.length; i += 3) {
53614 w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
53615 this.words[j] |= (w << off) & 0x3ffffff;
53616 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
53617 off += 24;
53618 if (off >= 26) {
53619 off -= 26;
53620 j++;
53621 }
53622 }
53623 }
53624 return this.strip();
53625 };
53626
53627 function parseHex (str, start, end) {
53628 var r = 0;
53629 var len = Math.min(str.length, end);
53630 for (var i = start; i < len; i++) {
53631 var c = str.charCodeAt(i) - 48;
53632
53633 r <<= 4;
53634
53635 // 'a' - 'f'
53636 if (c >= 49 && c <= 54) {
53637 r |= c - 49 + 0xa;
53638
53639 // 'A' - 'F'
53640 } else if (c >= 17 && c <= 22) {
53641 r |= c - 17 + 0xa;
53642
53643 // '0' - '9'
53644 } else {
53645 r |= c & 0xf;
53646 }
53647 }
53648 return r;
53649 }
53650
53651 BN.prototype._parseHex = function _parseHex (number, start) {
53652 // Create possibly bigger array to ensure that it fits the number
53653 this.length = Math.ceil((number.length - start) / 6);
53654 this.words = new Array(this.length);
53655 for (var i = 0; i < this.length; i++) {
53656 this.words[i] = 0;
53657 }
53658
53659 var j, w;
53660 // Scan 24-bit chunks and add them to the number
53661 var off = 0;
53662 for (i = number.length - 6, j = 0; i >= start; i -= 6) {
53663 w = parseHex(number, i, i + 6);
53664 this.words[j] |= (w << off) & 0x3ffffff;
53665 // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb
53666 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
53667 off += 24;
53668 if (off >= 26) {
53669 off -= 26;
53670 j++;
53671 }
53672 }
53673 if (i + 6 !== start) {
53674 w = parseHex(number, start, i + 6);
53675 this.words[j] |= (w << off) & 0x3ffffff;
53676 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
53677 }
53678 this.strip();
53679 };
53680
53681 function parseBase (str, start, end, mul) {
53682 var r = 0;
53683 var len = Math.min(str.length, end);
53684 for (var i = start; i < len; i++) {
53685 var c = str.charCodeAt(i) - 48;
53686
53687 r *= mul;
53688
53689 // 'a'
53690 if (c >= 49) {
53691 r += c - 49 + 0xa;
53692
53693 // 'A'
53694 } else if (c >= 17) {
53695 r += c - 17 + 0xa;
53696
53697 // '0' - '9'
53698 } else {
53699 r += c;
53700 }
53701 }
53702 return r;
53703 }
53704
53705 BN.prototype._parseBase = function _parseBase (number, base, start) {
53706 // Initialize as zero
53707 this.words = [ 0 ];
53708 this.length = 1;
53709
53710 // Find length of limb in base
53711 for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
53712 limbLen++;
53713 }
53714 limbLen--;
53715 limbPow = (limbPow / base) | 0;
53716
53717 var total = number.length - start;
53718 var mod = total % limbLen;
53719 var end = Math.min(total, total - mod) + start;
53720
53721 var word = 0;
53722 for (var i = start; i < end; i += limbLen) {
53723 word = parseBase(number, i, i + limbLen, base);
53724
53725 this.imuln(limbPow);
53726 if (this.words[0] + word < 0x4000000) {
53727 this.words[0] += word;
53728 } else {
53729 this._iaddn(word);
53730 }
53731 }
53732
53733 if (mod !== 0) {
53734 var pow = 1;
53735 word = parseBase(number, i, number.length, base);
53736
53737 for (i = 0; i < mod; i++) {
53738 pow *= base;
53739 }
53740
53741 this.imuln(pow);
53742 if (this.words[0] + word < 0x4000000) {
53743 this.words[0] += word;
53744 } else {
53745 this._iaddn(word);
53746 }
53747 }
53748 };
53749
53750 BN.prototype.copy = function copy (dest) {
53751 dest.words = new Array(this.length);
53752 for (var i = 0; i < this.length; i++) {
53753 dest.words[i] = this.words[i];
53754 }
53755 dest.length = this.length;
53756 dest.negative = this.negative;
53757 dest.red = this.red;
53758 };
53759
53760 BN.prototype.clone = function clone () {
53761 var r = new BN(null);
53762 this.copy(r);
53763 return r;
53764 };
53765
53766 BN.prototype._expand = function _expand (size) {
53767 while (this.length < size) {
53768 this.words[this.length++] = 0;
53769 }
53770 return this;
53771 };
53772
53773 // Remove leading `0` from `this`
53774 BN.prototype.strip = function strip () {
53775 while (this.length > 1 && this.words[this.length - 1] === 0) {
53776 this.length--;
53777 }
53778 return this._normSign();
53779 };
53780
53781 BN.prototype._normSign = function _normSign () {
53782 // -0 = 0
53783 if (this.length === 1 && this.words[0] === 0) {
53784 this.negative = 0;
53785 }
53786 return this;
53787 };
53788
53789 BN.prototype.inspect = function inspect () {
53790 return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
53791 };
53792
53793 /*
53794
53795 var zeros = [];
53796 var groupSizes = [];
53797 var groupBases = [];
53798
53799 var s = '';
53800 var i = -1;
53801 while (++i < BN.wordSize) {
53802 zeros[i] = s;
53803 s += '0';
53804 }
53805 groupSizes[0] = 0;
53806 groupSizes[1] = 0;
53807 groupBases[0] = 0;
53808 groupBases[1] = 0;
53809 var base = 2 - 1;
53810 while (++base < 36 + 1) {
53811 var groupSize = 0;
53812 var groupBase = 1;
53813 while (groupBase < (1 << BN.wordSize) / base) {
53814 groupBase *= base;
53815 groupSize += 1;
53816 }
53817 groupSizes[base] = groupSize;
53818 groupBases[base] = groupBase;
53819 }
53820
53821 */
53822
53823 var zeros = [
53824 '',
53825 '0',
53826 '00',
53827 '000',
53828 '0000',
53829 '00000',
53830 '000000',
53831 '0000000',
53832 '00000000',
53833 '000000000',
53834 '0000000000',
53835 '00000000000',
53836 '000000000000',
53837 '0000000000000',
53838 '00000000000000',
53839 '000000000000000',
53840 '0000000000000000',
53841 '00000000000000000',
53842 '000000000000000000',
53843 '0000000000000000000',
53844 '00000000000000000000',
53845 '000000000000000000000',
53846 '0000000000000000000000',
53847 '00000000000000000000000',
53848 '000000000000000000000000',
53849 '0000000000000000000000000'
53850 ];
53851
53852 var groupSizes = [
53853 0, 0,
53854 25, 16, 12, 11, 10, 9, 8,
53855 8, 7, 7, 7, 7, 6, 6,
53856 6, 6, 6, 6, 6, 5, 5,
53857 5, 5, 5, 5, 5, 5, 5,
53858 5, 5, 5, 5, 5, 5, 5
53859 ];
53860
53861 var groupBases = [
53862 0, 0,
53863 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
53864 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
53865 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
53866 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
53867 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
53868 ];
53869
53870 BN.prototype.toString = function toString (base, padding) {
53871 base = base || 10;
53872 padding = padding | 0 || 1;
53873
53874 var out;
53875 if (base === 16 || base === 'hex') {
53876 out = '';
53877 var off = 0;
53878 var carry = 0;
53879 for (var i = 0; i < this.length; i++) {
53880 var w = this.words[i];
53881 var word = (((w << off) | carry) & 0xffffff).toString(16);
53882 carry = (w >>> (24 - off)) & 0xffffff;
53883 if (carry !== 0 || i !== this.length - 1) {
53884 out = zeros[6 - word.length] + word + out;
53885 } else {
53886 out = word + out;
53887 }
53888 off += 2;
53889 if (off >= 26) {
53890 off -= 26;
53891 i--;
53892 }
53893 }
53894 if (carry !== 0) {
53895 out = carry.toString(16) + out;
53896 }
53897 while (out.length % padding !== 0) {
53898 out = '0' + out;
53899 }
53900 if (this.negative !== 0) {
53901 out = '-' + out;
53902 }
53903 return out;
53904 }
53905
53906 if (base === (base | 0) && base >= 2 && base <= 36) {
53907 // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
53908 var groupSize = groupSizes[base];
53909 // var groupBase = Math.pow(base, groupSize);
53910 var groupBase = groupBases[base];
53911 out = '';
53912 var c = this.clone();
53913 c.negative = 0;
53914 while (!c.isZero()) {
53915 var r = c.modn(groupBase).toString(base);
53916 c = c.idivn(groupBase);
53917
53918 if (!c.isZero()) {
53919 out = zeros[groupSize - r.length] + r + out;
53920 } else {
53921 out = r + out;
53922 }
53923 }
53924 if (this.isZero()) {
53925 out = '0' + out;
53926 }
53927 while (out.length % padding !== 0) {
53928 out = '0' + out;
53929 }
53930 if (this.negative !== 0) {
53931 out = '-' + out;
53932 }
53933 return out;
53934 }
53935
53936 assert(false, 'Base should be between 2 and 36');
53937 };
53938
53939 BN.prototype.toNumber = function toNumber () {
53940 var ret = this.words[0];
53941 if (this.length === 2) {
53942 ret += this.words[1] * 0x4000000;
53943 } else if (this.length === 3 && this.words[2] === 0x01) {
53944 // NOTE: at this stage it is known that the top bit is set
53945 ret += 0x10000000000000 + (this.words[1] * 0x4000000);
53946 } else if (this.length > 2) {
53947 assert(false, 'Number can only safely store up to 53 bits');
53948 }
53949 return (this.negative !== 0) ? -ret : ret;
53950 };
53951
53952 BN.prototype.toJSON = function toJSON () {
53953 return this.toString(16);
53954 };
53955
53956 BN.prototype.toBuffer = function toBuffer (endian, length) {
53957 assert(typeof Buffer !== 'undefined');
53958 return this.toArrayLike(Buffer, endian, length);
53959 };
53960
53961 BN.prototype.toArray = function toArray (endian, length) {
53962 return this.toArrayLike(Array, endian, length);
53963 };
53964
53965 BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
53966 var byteLength = this.byteLength();
53967 var reqLength = length || Math.max(1, byteLength);
53968 assert(byteLength <= reqLength, 'byte array longer than desired length');
53969 assert(reqLength > 0, 'Requested array length <= 0');
53970
53971 this.strip();
53972 var littleEndian = endian === 'le';
53973 var res = new ArrayType(reqLength);
53974
53975 var b, i;
53976 var q = this.clone();
53977 if (!littleEndian) {
53978 // Assume big-endian
53979 for (i = 0; i < reqLength - byteLength; i++) {
53980 res[i] = 0;
53981 }
53982
53983 for (i = 0; !q.isZero(); i++) {
53984 b = q.andln(0xff);
53985 q.iushrn(8);
53986
53987 res[reqLength - i - 1] = b;
53988 }
53989 } else {
53990 for (i = 0; !q.isZero(); i++) {
53991 b = q.andln(0xff);
53992 q.iushrn(8);
53993
53994 res[i] = b;
53995 }
53996
53997 for (; i < reqLength; i++) {
53998 res[i] = 0;
53999 }
54000 }
54001
54002 return res;
54003 };
54004
54005 if (Math.clz32) {
54006 BN.prototype._countBits = function _countBits (w) {
54007 return 32 - Math.clz32(w);
54008 };
54009 } else {
54010 BN.prototype._countBits = function _countBits (w) {
54011 var t = w;
54012 var r = 0;
54013 if (t >= 0x1000) {
54014 r += 13;
54015 t >>>= 13;
54016 }
54017 if (t >= 0x40) {
54018 r += 7;
54019 t >>>= 7;
54020 }
54021 if (t >= 0x8) {
54022 r += 4;
54023 t >>>= 4;
54024 }
54025 if (t >= 0x02) {
54026 r += 2;
54027 t >>>= 2;
54028 }
54029 return r + t;
54030 };
54031 }
54032
54033 BN.prototype._zeroBits = function _zeroBits (w) {
54034 // Short-cut
54035 if (w === 0) return 26;
54036
54037 var t = w;
54038 var r = 0;
54039 if ((t & 0x1fff) === 0) {
54040 r += 13;
54041 t >>>= 13;
54042 }
54043 if ((t & 0x7f) === 0) {
54044 r += 7;
54045 t >>>= 7;
54046 }
54047 if ((t & 0xf) === 0) {
54048 r += 4;
54049 t >>>= 4;
54050 }
54051 if ((t & 0x3) === 0) {
54052 r += 2;
54053 t >>>= 2;
54054 }
54055 if ((t & 0x1) === 0) {
54056 r++;
54057 }
54058 return r;
54059 };
54060
54061 // Return number of used bits in a BN
54062 BN.prototype.bitLength = function bitLength () {
54063 var w = this.words[this.length - 1];
54064 var hi = this._countBits(w);
54065 return (this.length - 1) * 26 + hi;
54066 };
54067
54068 function toBitArray (num) {
54069 var w = new Array(num.bitLength());
54070
54071 for (var bit = 0; bit < w.length; bit++) {
54072 var off = (bit / 26) | 0;
54073 var wbit = bit % 26;
54074
54075 w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
54076 }
54077
54078 return w;
54079 }
54080
54081 // Number of trailing zero bits
54082 BN.prototype.zeroBits = function zeroBits () {
54083 if (this.isZero()) return 0;
54084
54085 var r = 0;
54086 for (var i = 0; i < this.length; i++) {
54087 var b = this._zeroBits(this.words[i]);
54088 r += b;
54089 if (b !== 26) break;
54090 }
54091 return r;
54092 };
54093
54094 BN.prototype.byteLength = function byteLength () {
54095 return Math.ceil(this.bitLength() / 8);
54096 };
54097
54098 BN.prototype.toTwos = function toTwos (width) {
54099 if (this.negative !== 0) {
54100 return this.abs().inotn(width).iaddn(1);
54101 }
54102 return this.clone();
54103 };
54104
54105 BN.prototype.fromTwos = function fromTwos (width) {
54106 if (this.testn(width - 1)) {
54107 return this.notn(width).iaddn(1).ineg();
54108 }
54109 return this.clone();
54110 };
54111
54112 BN.prototype.isNeg = function isNeg () {
54113 return this.negative !== 0;
54114 };
54115
54116 // Return negative clone of `this`
54117 BN.prototype.neg = function neg () {
54118 return this.clone().ineg();
54119 };
54120
54121 BN.prototype.ineg = function ineg () {
54122 if (!this.isZero()) {
54123 this.negative ^= 1;
54124 }
54125
54126 return this;
54127 };
54128
54129 // Or `num` with `this` in-place
54130 BN.prototype.iuor = function iuor (num) {
54131 while (this.length < num.length) {
54132 this.words[this.length++] = 0;
54133 }
54134
54135 for (var i = 0; i < num.length; i++) {
54136 this.words[i] = this.words[i] | num.words[i];
54137 }
54138
54139 return this.strip();
54140 };
54141
54142 BN.prototype.ior = function ior (num) {
54143 assert((this.negative | num.negative) === 0);
54144 return this.iuor(num);
54145 };
54146
54147 // Or `num` with `this`
54148 BN.prototype.or = function or (num) {
54149 if (this.length > num.length) return this.clone().ior(num);
54150 return num.clone().ior(this);
54151 };
54152
54153 BN.prototype.uor = function uor (num) {
54154 if (this.length > num.length) return this.clone().iuor(num);
54155 return num.clone().iuor(this);
54156 };
54157
54158 // And `num` with `this` in-place
54159 BN.prototype.iuand = function iuand (num) {
54160 // b = min-length(num, this)
54161 var b;
54162 if (this.length > num.length) {
54163 b = num;
54164 } else {
54165 b = this;
54166 }
54167
54168 for (var i = 0; i < b.length; i++) {
54169 this.words[i] = this.words[i] & num.words[i];
54170 }
54171
54172 this.length = b.length;
54173
54174 return this.strip();
54175 };
54176
54177 BN.prototype.iand = function iand (num) {
54178 assert((this.negative | num.negative) === 0);
54179 return this.iuand(num);
54180 };
54181
54182 // And `num` with `this`
54183 BN.prototype.and = function and (num) {
54184 if (this.length > num.length) return this.clone().iand(num);
54185 return num.clone().iand(this);
54186 };
54187
54188 BN.prototype.uand = function uand (num) {
54189 if (this.length > num.length) return this.clone().iuand(num);
54190 return num.clone().iuand(this);
54191 };
54192
54193 // Xor `num` with `this` in-place
54194 BN.prototype.iuxor = function iuxor (num) {
54195 // a.length > b.length
54196 var a;
54197 var b;
54198 if (this.length > num.length) {
54199 a = this;
54200 b = num;
54201 } else {
54202 a = num;
54203 b = this;
54204 }
54205
54206 for (var i = 0; i < b.length; i++) {
54207 this.words[i] = a.words[i] ^ b.words[i];
54208 }
54209
54210 if (this !== a) {
54211 for (; i < a.length; i++) {
54212 this.words[i] = a.words[i];
54213 }
54214 }
54215
54216 this.length = a.length;
54217
54218 return this.strip();
54219 };
54220
54221 BN.prototype.ixor = function ixor (num) {
54222 assert((this.negative | num.negative) === 0);
54223 return this.iuxor(num);
54224 };
54225
54226 // Xor `num` with `this`
54227 BN.prototype.xor = function xor (num) {
54228 if (this.length > num.length) return this.clone().ixor(num);
54229 return num.clone().ixor(this);
54230 };
54231
54232 BN.prototype.uxor = function uxor (num) {
54233 if (this.length > num.length) return this.clone().iuxor(num);
54234 return num.clone().iuxor(this);
54235 };
54236
54237 // Not ``this`` with ``width`` bitwidth
54238 BN.prototype.inotn = function inotn (width) {
54239 assert(typeof width === 'number' && width >= 0);
54240
54241 var bytesNeeded = Math.ceil(width / 26) | 0;
54242 var bitsLeft = width % 26;
54243
54244 // Extend the buffer with leading zeroes
54245 this._expand(bytesNeeded);
54246
54247 if (bitsLeft > 0) {
54248 bytesNeeded--;
54249 }
54250
54251 // Handle complete words
54252 for (var i = 0; i < bytesNeeded; i++) {
54253 this.words[i] = ~this.words[i] & 0x3ffffff;
54254 }
54255
54256 // Handle the residue
54257 if (bitsLeft > 0) {
54258 this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
54259 }
54260
54261 // And remove leading zeroes
54262 return this.strip();
54263 };
54264
54265 BN.prototype.notn = function notn (width) {
54266 return this.clone().inotn(width);
54267 };
54268
54269 // Set `bit` of `this`
54270 BN.prototype.setn = function setn (bit, val) {
54271 assert(typeof bit === 'number' && bit >= 0);
54272
54273 var off = (bit / 26) | 0;
54274 var wbit = bit % 26;
54275
54276 this._expand(off + 1);
54277
54278 if (val) {
54279 this.words[off] = this.words[off] | (1 << wbit);
54280 } else {
54281 this.words[off] = this.words[off] & ~(1 << wbit);
54282 }
54283
54284 return this.strip();
54285 };
54286
54287 // Add `num` to `this` in-place
54288 BN.prototype.iadd = function iadd (num) {
54289 var r;
54290
54291 // negative + positive
54292 if (this.negative !== 0 && num.negative === 0) {
54293 this.negative = 0;
54294 r = this.isub(num);
54295 this.negative ^= 1;
54296 return this._normSign();
54297
54298 // positive + negative
54299 } else if (this.negative === 0 && num.negative !== 0) {
54300 num.negative = 0;
54301 r = this.isub(num);
54302 num.negative = 1;
54303 return r._normSign();
54304 }
54305
54306 // a.length > b.length
54307 var a, b;
54308 if (this.length > num.length) {
54309 a = this;
54310 b = num;
54311 } else {
54312 a = num;
54313 b = this;
54314 }
54315
54316 var carry = 0;
54317 for (var i = 0; i < b.length; i++) {
54318 r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
54319 this.words[i] = r & 0x3ffffff;
54320 carry = r >>> 26;
54321 }
54322 for (; carry !== 0 && i < a.length; i++) {
54323 r = (a.words[i] | 0) + carry;
54324 this.words[i] = r & 0x3ffffff;
54325 carry = r >>> 26;
54326 }
54327
54328 this.length = a.length;
54329 if (carry !== 0) {
54330 this.words[this.length] = carry;
54331 this.length++;
54332 // Copy the rest of the words
54333 } else if (a !== this) {
54334 for (; i < a.length; i++) {
54335 this.words[i] = a.words[i];
54336 }
54337 }
54338
54339 return this;
54340 };
54341
54342 // Add `num` to `this`
54343 BN.prototype.add = function add (num) {
54344 var res;
54345 if (num.negative !== 0 && this.negative === 0) {
54346 num.negative = 0;
54347 res = this.sub(num);
54348 num.negative ^= 1;
54349 return res;
54350 } else if (num.negative === 0 && this.negative !== 0) {
54351 this.negative = 0;
54352 res = num.sub(this);
54353 this.negative = 1;
54354 return res;
54355 }
54356
54357 if (this.length > num.length) return this.clone().iadd(num);
54358
54359 return num.clone().iadd(this);
54360 };
54361
54362 // Subtract `num` from `this` in-place
54363 BN.prototype.isub = function isub (num) {
54364 // this - (-num) = this + num
54365 if (num.negative !== 0) {
54366 num.negative = 0;
54367 var r = this.iadd(num);
54368 num.negative = 1;
54369 return r._normSign();
54370
54371 // -this - num = -(this + num)
54372 } else if (this.negative !== 0) {
54373 this.negative = 0;
54374 this.iadd(num);
54375 this.negative = 1;
54376 return this._normSign();
54377 }
54378
54379 // At this point both numbers are positive
54380 var cmp = this.cmp(num);
54381
54382 // Optimization - zeroify
54383 if (cmp === 0) {
54384 this.negative = 0;
54385 this.length = 1;
54386 this.words[0] = 0;
54387 return this;
54388 }
54389
54390 // a > b
54391 var a, b;
54392 if (cmp > 0) {
54393 a = this;
54394 b = num;
54395 } else {
54396 a = num;
54397 b = this;
54398 }
54399
54400 var carry = 0;
54401 for (var i = 0; i < b.length; i++) {
54402 r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
54403 carry = r >> 26;
54404 this.words[i] = r & 0x3ffffff;
54405 }
54406 for (; carry !== 0 && i < a.length; i++) {
54407 r = (a.words[i] | 0) + carry;
54408 carry = r >> 26;
54409 this.words[i] = r & 0x3ffffff;
54410 }
54411
54412 // Copy rest of the words
54413 if (carry === 0 && i < a.length && a !== this) {
54414 for (; i < a.length; i++) {
54415 this.words[i] = a.words[i];
54416 }
54417 }
54418
54419 this.length = Math.max(this.length, i);
54420
54421 if (a !== this) {
54422 this.negative = 1;
54423 }
54424
54425 return this.strip();
54426 };
54427
54428 // Subtract `num` from `this`
54429 BN.prototype.sub = function sub (num) {
54430 return this.clone().isub(num);
54431 };
54432
54433 function smallMulTo (self, num, out) {
54434 out.negative = num.negative ^ self.negative;
54435 var len = (self.length + num.length) | 0;
54436 out.length = len;
54437 len = (len - 1) | 0;
54438
54439 // Peel one iteration (compiler can't do it, because of code complexity)
54440 var a = self.words[0] | 0;
54441 var b = num.words[0] | 0;
54442 var r = a * b;
54443
54444 var lo = r & 0x3ffffff;
54445 var carry = (r / 0x4000000) | 0;
54446 out.words[0] = lo;
54447
54448 for (var k = 1; k < len; k++) {
54449 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
54450 // note that ncarry could be >= 0x3ffffff
54451 var ncarry = carry >>> 26;
54452 var rword = carry & 0x3ffffff;
54453 var maxJ = Math.min(k, num.length - 1);
54454 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
54455 var i = (k - j) | 0;
54456 a = self.words[i] | 0;
54457 b = num.words[j] | 0;
54458 r = a * b + rword;
54459 ncarry += (r / 0x4000000) | 0;
54460 rword = r & 0x3ffffff;
54461 }
54462 out.words[k] = rword | 0;
54463 carry = ncarry | 0;
54464 }
54465 if (carry !== 0) {
54466 out.words[k] = carry | 0;
54467 } else {
54468 out.length--;
54469 }
54470
54471 return out.strip();
54472 }
54473
54474 // TODO(indutny): it may be reasonable to omit it for users who don't need
54475 // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
54476 // multiplication (like elliptic secp256k1).
54477 var comb10MulTo = function comb10MulTo (self, num, out) {
54478 var a = self.words;
54479 var b = num.words;
54480 var o = out.words;
54481 var c = 0;
54482 var lo;
54483 var mid;
54484 var hi;
54485 var a0 = a[0] | 0;
54486 var al0 = a0 & 0x1fff;
54487 var ah0 = a0 >>> 13;
54488 var a1 = a[1] | 0;
54489 var al1 = a1 & 0x1fff;
54490 var ah1 = a1 >>> 13;
54491 var a2 = a[2] | 0;
54492 var al2 = a2 & 0x1fff;
54493 var ah2 = a2 >>> 13;
54494 var a3 = a[3] | 0;
54495 var al3 = a3 & 0x1fff;
54496 var ah3 = a3 >>> 13;
54497 var a4 = a[4] | 0;
54498 var al4 = a4 & 0x1fff;
54499 var ah4 = a4 >>> 13;
54500 var a5 = a[5] | 0;
54501 var al5 = a5 & 0x1fff;
54502 var ah5 = a5 >>> 13;
54503 var a6 = a[6] | 0;
54504 var al6 = a6 & 0x1fff;
54505 var ah6 = a6 >>> 13;
54506 var a7 = a[7] | 0;
54507 var al7 = a7 & 0x1fff;
54508 var ah7 = a7 >>> 13;
54509 var a8 = a[8] | 0;
54510 var al8 = a8 & 0x1fff;
54511 var ah8 = a8 >>> 13;
54512 var a9 = a[9] | 0;
54513 var al9 = a9 & 0x1fff;
54514 var ah9 = a9 >>> 13;
54515 var b0 = b[0] | 0;
54516 var bl0 = b0 & 0x1fff;
54517 var bh0 = b0 >>> 13;
54518 var b1 = b[1] | 0;
54519 var bl1 = b1 & 0x1fff;
54520 var bh1 = b1 >>> 13;
54521 var b2 = b[2] | 0;
54522 var bl2 = b2 & 0x1fff;
54523 var bh2 = b2 >>> 13;
54524 var b3 = b[3] | 0;
54525 var bl3 = b3 & 0x1fff;
54526 var bh3 = b3 >>> 13;
54527 var b4 = b[4] | 0;
54528 var bl4 = b4 & 0x1fff;
54529 var bh4 = b4 >>> 13;
54530 var b5 = b[5] | 0;
54531 var bl5 = b5 & 0x1fff;
54532 var bh5 = b5 >>> 13;
54533 var b6 = b[6] | 0;
54534 var bl6 = b6 & 0x1fff;
54535 var bh6 = b6 >>> 13;
54536 var b7 = b[7] | 0;
54537 var bl7 = b7 & 0x1fff;
54538 var bh7 = b7 >>> 13;
54539 var b8 = b[8] | 0;
54540 var bl8 = b8 & 0x1fff;
54541 var bh8 = b8 >>> 13;
54542 var b9 = b[9] | 0;
54543 var bl9 = b9 & 0x1fff;
54544 var bh9 = b9 >>> 13;
54545
54546 out.negative = self.negative ^ num.negative;
54547 out.length = 19;
54548 /* k = 0 */
54549 lo = Math.imul(al0, bl0);
54550 mid = Math.imul(al0, bh0);
54551 mid = (mid + Math.imul(ah0, bl0)) | 0;
54552 hi = Math.imul(ah0, bh0);
54553 var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54554 c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
54555 w0 &= 0x3ffffff;
54556 /* k = 1 */
54557 lo = Math.imul(al1, bl0);
54558 mid = Math.imul(al1, bh0);
54559 mid = (mid + Math.imul(ah1, bl0)) | 0;
54560 hi = Math.imul(ah1, bh0);
54561 lo = (lo + Math.imul(al0, bl1)) | 0;
54562 mid = (mid + Math.imul(al0, bh1)) | 0;
54563 mid = (mid + Math.imul(ah0, bl1)) | 0;
54564 hi = (hi + Math.imul(ah0, bh1)) | 0;
54565 var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54566 c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
54567 w1 &= 0x3ffffff;
54568 /* k = 2 */
54569 lo = Math.imul(al2, bl0);
54570 mid = Math.imul(al2, bh0);
54571 mid = (mid + Math.imul(ah2, bl0)) | 0;
54572 hi = Math.imul(ah2, bh0);
54573 lo = (lo + Math.imul(al1, bl1)) | 0;
54574 mid = (mid + Math.imul(al1, bh1)) | 0;
54575 mid = (mid + Math.imul(ah1, bl1)) | 0;
54576 hi = (hi + Math.imul(ah1, bh1)) | 0;
54577 lo = (lo + Math.imul(al0, bl2)) | 0;
54578 mid = (mid + Math.imul(al0, bh2)) | 0;
54579 mid = (mid + Math.imul(ah0, bl2)) | 0;
54580 hi = (hi + Math.imul(ah0, bh2)) | 0;
54581 var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54582 c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
54583 w2 &= 0x3ffffff;
54584 /* k = 3 */
54585 lo = Math.imul(al3, bl0);
54586 mid = Math.imul(al3, bh0);
54587 mid = (mid + Math.imul(ah3, bl0)) | 0;
54588 hi = Math.imul(ah3, bh0);
54589 lo = (lo + Math.imul(al2, bl1)) | 0;
54590 mid = (mid + Math.imul(al2, bh1)) | 0;
54591 mid = (mid + Math.imul(ah2, bl1)) | 0;
54592 hi = (hi + Math.imul(ah2, bh1)) | 0;
54593 lo = (lo + Math.imul(al1, bl2)) | 0;
54594 mid = (mid + Math.imul(al1, bh2)) | 0;
54595 mid = (mid + Math.imul(ah1, bl2)) | 0;
54596 hi = (hi + Math.imul(ah1, bh2)) | 0;
54597 lo = (lo + Math.imul(al0, bl3)) | 0;
54598 mid = (mid + Math.imul(al0, bh3)) | 0;
54599 mid = (mid + Math.imul(ah0, bl3)) | 0;
54600 hi = (hi + Math.imul(ah0, bh3)) | 0;
54601 var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54602 c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
54603 w3 &= 0x3ffffff;
54604 /* k = 4 */
54605 lo = Math.imul(al4, bl0);
54606 mid = Math.imul(al4, bh0);
54607 mid = (mid + Math.imul(ah4, bl0)) | 0;
54608 hi = Math.imul(ah4, bh0);
54609 lo = (lo + Math.imul(al3, bl1)) | 0;
54610 mid = (mid + Math.imul(al3, bh1)) | 0;
54611 mid = (mid + Math.imul(ah3, bl1)) | 0;
54612 hi = (hi + Math.imul(ah3, bh1)) | 0;
54613 lo = (lo + Math.imul(al2, bl2)) | 0;
54614 mid = (mid + Math.imul(al2, bh2)) | 0;
54615 mid = (mid + Math.imul(ah2, bl2)) | 0;
54616 hi = (hi + Math.imul(ah2, bh2)) | 0;
54617 lo = (lo + Math.imul(al1, bl3)) | 0;
54618 mid = (mid + Math.imul(al1, bh3)) | 0;
54619 mid = (mid + Math.imul(ah1, bl3)) | 0;
54620 hi = (hi + Math.imul(ah1, bh3)) | 0;
54621 lo = (lo + Math.imul(al0, bl4)) | 0;
54622 mid = (mid + Math.imul(al0, bh4)) | 0;
54623 mid = (mid + Math.imul(ah0, bl4)) | 0;
54624 hi = (hi + Math.imul(ah0, bh4)) | 0;
54625 var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54626 c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
54627 w4 &= 0x3ffffff;
54628 /* k = 5 */
54629 lo = Math.imul(al5, bl0);
54630 mid = Math.imul(al5, bh0);
54631 mid = (mid + Math.imul(ah5, bl0)) | 0;
54632 hi = Math.imul(ah5, bh0);
54633 lo = (lo + Math.imul(al4, bl1)) | 0;
54634 mid = (mid + Math.imul(al4, bh1)) | 0;
54635 mid = (mid + Math.imul(ah4, bl1)) | 0;
54636 hi = (hi + Math.imul(ah4, bh1)) | 0;
54637 lo = (lo + Math.imul(al3, bl2)) | 0;
54638 mid = (mid + Math.imul(al3, bh2)) | 0;
54639 mid = (mid + Math.imul(ah3, bl2)) | 0;
54640 hi = (hi + Math.imul(ah3, bh2)) | 0;
54641 lo = (lo + Math.imul(al2, bl3)) | 0;
54642 mid = (mid + Math.imul(al2, bh3)) | 0;
54643 mid = (mid + Math.imul(ah2, bl3)) | 0;
54644 hi = (hi + Math.imul(ah2, bh3)) | 0;
54645 lo = (lo + Math.imul(al1, bl4)) | 0;
54646 mid = (mid + Math.imul(al1, bh4)) | 0;
54647 mid = (mid + Math.imul(ah1, bl4)) | 0;
54648 hi = (hi + Math.imul(ah1, bh4)) | 0;
54649 lo = (lo + Math.imul(al0, bl5)) | 0;
54650 mid = (mid + Math.imul(al0, bh5)) | 0;
54651 mid = (mid + Math.imul(ah0, bl5)) | 0;
54652 hi = (hi + Math.imul(ah0, bh5)) | 0;
54653 var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54654 c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
54655 w5 &= 0x3ffffff;
54656 /* k = 6 */
54657 lo = Math.imul(al6, bl0);
54658 mid = Math.imul(al6, bh0);
54659 mid = (mid + Math.imul(ah6, bl0)) | 0;
54660 hi = Math.imul(ah6, bh0);
54661 lo = (lo + Math.imul(al5, bl1)) | 0;
54662 mid = (mid + Math.imul(al5, bh1)) | 0;
54663 mid = (mid + Math.imul(ah5, bl1)) | 0;
54664 hi = (hi + Math.imul(ah5, bh1)) | 0;
54665 lo = (lo + Math.imul(al4, bl2)) | 0;
54666 mid = (mid + Math.imul(al4, bh2)) | 0;
54667 mid = (mid + Math.imul(ah4, bl2)) | 0;
54668 hi = (hi + Math.imul(ah4, bh2)) | 0;
54669 lo = (lo + Math.imul(al3, bl3)) | 0;
54670 mid = (mid + Math.imul(al3, bh3)) | 0;
54671 mid = (mid + Math.imul(ah3, bl3)) | 0;
54672 hi = (hi + Math.imul(ah3, bh3)) | 0;
54673 lo = (lo + Math.imul(al2, bl4)) | 0;
54674 mid = (mid + Math.imul(al2, bh4)) | 0;
54675 mid = (mid + Math.imul(ah2, bl4)) | 0;
54676 hi = (hi + Math.imul(ah2, bh4)) | 0;
54677 lo = (lo + Math.imul(al1, bl5)) | 0;
54678 mid = (mid + Math.imul(al1, bh5)) | 0;
54679 mid = (mid + Math.imul(ah1, bl5)) | 0;
54680 hi = (hi + Math.imul(ah1, bh5)) | 0;
54681 lo = (lo + Math.imul(al0, bl6)) | 0;
54682 mid = (mid + Math.imul(al0, bh6)) | 0;
54683 mid = (mid + Math.imul(ah0, bl6)) | 0;
54684 hi = (hi + Math.imul(ah0, bh6)) | 0;
54685 var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54686 c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
54687 w6 &= 0x3ffffff;
54688 /* k = 7 */
54689 lo = Math.imul(al7, bl0);
54690 mid = Math.imul(al7, bh0);
54691 mid = (mid + Math.imul(ah7, bl0)) | 0;
54692 hi = Math.imul(ah7, bh0);
54693 lo = (lo + Math.imul(al6, bl1)) | 0;
54694 mid = (mid + Math.imul(al6, bh1)) | 0;
54695 mid = (mid + Math.imul(ah6, bl1)) | 0;
54696 hi = (hi + Math.imul(ah6, bh1)) | 0;
54697 lo = (lo + Math.imul(al5, bl2)) | 0;
54698 mid = (mid + Math.imul(al5, bh2)) | 0;
54699 mid = (mid + Math.imul(ah5, bl2)) | 0;
54700 hi = (hi + Math.imul(ah5, bh2)) | 0;
54701 lo = (lo + Math.imul(al4, bl3)) | 0;
54702 mid = (mid + Math.imul(al4, bh3)) | 0;
54703 mid = (mid + Math.imul(ah4, bl3)) | 0;
54704 hi = (hi + Math.imul(ah4, bh3)) | 0;
54705 lo = (lo + Math.imul(al3, bl4)) | 0;
54706 mid = (mid + Math.imul(al3, bh4)) | 0;
54707 mid = (mid + Math.imul(ah3, bl4)) | 0;
54708 hi = (hi + Math.imul(ah3, bh4)) | 0;
54709 lo = (lo + Math.imul(al2, bl5)) | 0;
54710 mid = (mid + Math.imul(al2, bh5)) | 0;
54711 mid = (mid + Math.imul(ah2, bl5)) | 0;
54712 hi = (hi + Math.imul(ah2, bh5)) | 0;
54713 lo = (lo + Math.imul(al1, bl6)) | 0;
54714 mid = (mid + Math.imul(al1, bh6)) | 0;
54715 mid = (mid + Math.imul(ah1, bl6)) | 0;
54716 hi = (hi + Math.imul(ah1, bh6)) | 0;
54717 lo = (lo + Math.imul(al0, bl7)) | 0;
54718 mid = (mid + Math.imul(al0, bh7)) | 0;
54719 mid = (mid + Math.imul(ah0, bl7)) | 0;
54720 hi = (hi + Math.imul(ah0, bh7)) | 0;
54721 var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54722 c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
54723 w7 &= 0x3ffffff;
54724 /* k = 8 */
54725 lo = Math.imul(al8, bl0);
54726 mid = Math.imul(al8, bh0);
54727 mid = (mid + Math.imul(ah8, bl0)) | 0;
54728 hi = Math.imul(ah8, bh0);
54729 lo = (lo + Math.imul(al7, bl1)) | 0;
54730 mid = (mid + Math.imul(al7, bh1)) | 0;
54731 mid = (mid + Math.imul(ah7, bl1)) | 0;
54732 hi = (hi + Math.imul(ah7, bh1)) | 0;
54733 lo = (lo + Math.imul(al6, bl2)) | 0;
54734 mid = (mid + Math.imul(al6, bh2)) | 0;
54735 mid = (mid + Math.imul(ah6, bl2)) | 0;
54736 hi = (hi + Math.imul(ah6, bh2)) | 0;
54737 lo = (lo + Math.imul(al5, bl3)) | 0;
54738 mid = (mid + Math.imul(al5, bh3)) | 0;
54739 mid = (mid + Math.imul(ah5, bl3)) | 0;
54740 hi = (hi + Math.imul(ah5, bh3)) | 0;
54741 lo = (lo + Math.imul(al4, bl4)) | 0;
54742 mid = (mid + Math.imul(al4, bh4)) | 0;
54743 mid = (mid + Math.imul(ah4, bl4)) | 0;
54744 hi = (hi + Math.imul(ah4, bh4)) | 0;
54745 lo = (lo + Math.imul(al3, bl5)) | 0;
54746 mid = (mid + Math.imul(al3, bh5)) | 0;
54747 mid = (mid + Math.imul(ah3, bl5)) | 0;
54748 hi = (hi + Math.imul(ah3, bh5)) | 0;
54749 lo = (lo + Math.imul(al2, bl6)) | 0;
54750 mid = (mid + Math.imul(al2, bh6)) | 0;
54751 mid = (mid + Math.imul(ah2, bl6)) | 0;
54752 hi = (hi + Math.imul(ah2, bh6)) | 0;
54753 lo = (lo + Math.imul(al1, bl7)) | 0;
54754 mid = (mid + Math.imul(al1, bh7)) | 0;
54755 mid = (mid + Math.imul(ah1, bl7)) | 0;
54756 hi = (hi + Math.imul(ah1, bh7)) | 0;
54757 lo = (lo + Math.imul(al0, bl8)) | 0;
54758 mid = (mid + Math.imul(al0, bh8)) | 0;
54759 mid = (mid + Math.imul(ah0, bl8)) | 0;
54760 hi = (hi + Math.imul(ah0, bh8)) | 0;
54761 var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54762 c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
54763 w8 &= 0x3ffffff;
54764 /* k = 9 */
54765 lo = Math.imul(al9, bl0);
54766 mid = Math.imul(al9, bh0);
54767 mid = (mid + Math.imul(ah9, bl0)) | 0;
54768 hi = Math.imul(ah9, bh0);
54769 lo = (lo + Math.imul(al8, bl1)) | 0;
54770 mid = (mid + Math.imul(al8, bh1)) | 0;
54771 mid = (mid + Math.imul(ah8, bl1)) | 0;
54772 hi = (hi + Math.imul(ah8, bh1)) | 0;
54773 lo = (lo + Math.imul(al7, bl2)) | 0;
54774 mid = (mid + Math.imul(al7, bh2)) | 0;
54775 mid = (mid + Math.imul(ah7, bl2)) | 0;
54776 hi = (hi + Math.imul(ah7, bh2)) | 0;
54777 lo = (lo + Math.imul(al6, bl3)) | 0;
54778 mid = (mid + Math.imul(al6, bh3)) | 0;
54779 mid = (mid + Math.imul(ah6, bl3)) | 0;
54780 hi = (hi + Math.imul(ah6, bh3)) | 0;
54781 lo = (lo + Math.imul(al5, bl4)) | 0;
54782 mid = (mid + Math.imul(al5, bh4)) | 0;
54783 mid = (mid + Math.imul(ah5, bl4)) | 0;
54784 hi = (hi + Math.imul(ah5, bh4)) | 0;
54785 lo = (lo + Math.imul(al4, bl5)) | 0;
54786 mid = (mid + Math.imul(al4, bh5)) | 0;
54787 mid = (mid + Math.imul(ah4, bl5)) | 0;
54788 hi = (hi + Math.imul(ah4, bh5)) | 0;
54789 lo = (lo + Math.imul(al3, bl6)) | 0;
54790 mid = (mid + Math.imul(al3, bh6)) | 0;
54791 mid = (mid + Math.imul(ah3, bl6)) | 0;
54792 hi = (hi + Math.imul(ah3, bh6)) | 0;
54793 lo = (lo + Math.imul(al2, bl7)) | 0;
54794 mid = (mid + Math.imul(al2, bh7)) | 0;
54795 mid = (mid + Math.imul(ah2, bl7)) | 0;
54796 hi = (hi + Math.imul(ah2, bh7)) | 0;
54797 lo = (lo + Math.imul(al1, bl8)) | 0;
54798 mid = (mid + Math.imul(al1, bh8)) | 0;
54799 mid = (mid + Math.imul(ah1, bl8)) | 0;
54800 hi = (hi + Math.imul(ah1, bh8)) | 0;
54801 lo = (lo + Math.imul(al0, bl9)) | 0;
54802 mid = (mid + Math.imul(al0, bh9)) | 0;
54803 mid = (mid + Math.imul(ah0, bl9)) | 0;
54804 hi = (hi + Math.imul(ah0, bh9)) | 0;
54805 var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54806 c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
54807 w9 &= 0x3ffffff;
54808 /* k = 10 */
54809 lo = Math.imul(al9, bl1);
54810 mid = Math.imul(al9, bh1);
54811 mid = (mid + Math.imul(ah9, bl1)) | 0;
54812 hi = Math.imul(ah9, bh1);
54813 lo = (lo + Math.imul(al8, bl2)) | 0;
54814 mid = (mid + Math.imul(al8, bh2)) | 0;
54815 mid = (mid + Math.imul(ah8, bl2)) | 0;
54816 hi = (hi + Math.imul(ah8, bh2)) | 0;
54817 lo = (lo + Math.imul(al7, bl3)) | 0;
54818 mid = (mid + Math.imul(al7, bh3)) | 0;
54819 mid = (mid + Math.imul(ah7, bl3)) | 0;
54820 hi = (hi + Math.imul(ah7, bh3)) | 0;
54821 lo = (lo + Math.imul(al6, bl4)) | 0;
54822 mid = (mid + Math.imul(al6, bh4)) | 0;
54823 mid = (mid + Math.imul(ah6, bl4)) | 0;
54824 hi = (hi + Math.imul(ah6, bh4)) | 0;
54825 lo = (lo + Math.imul(al5, bl5)) | 0;
54826 mid = (mid + Math.imul(al5, bh5)) | 0;
54827 mid = (mid + Math.imul(ah5, bl5)) | 0;
54828 hi = (hi + Math.imul(ah5, bh5)) | 0;
54829 lo = (lo + Math.imul(al4, bl6)) | 0;
54830 mid = (mid + Math.imul(al4, bh6)) | 0;
54831 mid = (mid + Math.imul(ah4, bl6)) | 0;
54832 hi = (hi + Math.imul(ah4, bh6)) | 0;
54833 lo = (lo + Math.imul(al3, bl7)) | 0;
54834 mid = (mid + Math.imul(al3, bh7)) | 0;
54835 mid = (mid + Math.imul(ah3, bl7)) | 0;
54836 hi = (hi + Math.imul(ah3, bh7)) | 0;
54837 lo = (lo + Math.imul(al2, bl8)) | 0;
54838 mid = (mid + Math.imul(al2, bh8)) | 0;
54839 mid = (mid + Math.imul(ah2, bl8)) | 0;
54840 hi = (hi + Math.imul(ah2, bh8)) | 0;
54841 lo = (lo + Math.imul(al1, bl9)) | 0;
54842 mid = (mid + Math.imul(al1, bh9)) | 0;
54843 mid = (mid + Math.imul(ah1, bl9)) | 0;
54844 hi = (hi + Math.imul(ah1, bh9)) | 0;
54845 var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54846 c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
54847 w10 &= 0x3ffffff;
54848 /* k = 11 */
54849 lo = Math.imul(al9, bl2);
54850 mid = Math.imul(al9, bh2);
54851 mid = (mid + Math.imul(ah9, bl2)) | 0;
54852 hi = Math.imul(ah9, bh2);
54853 lo = (lo + Math.imul(al8, bl3)) | 0;
54854 mid = (mid + Math.imul(al8, bh3)) | 0;
54855 mid = (mid + Math.imul(ah8, bl3)) | 0;
54856 hi = (hi + Math.imul(ah8, bh3)) | 0;
54857 lo = (lo + Math.imul(al7, bl4)) | 0;
54858 mid = (mid + Math.imul(al7, bh4)) | 0;
54859 mid = (mid + Math.imul(ah7, bl4)) | 0;
54860 hi = (hi + Math.imul(ah7, bh4)) | 0;
54861 lo = (lo + Math.imul(al6, bl5)) | 0;
54862 mid = (mid + Math.imul(al6, bh5)) | 0;
54863 mid = (mid + Math.imul(ah6, bl5)) | 0;
54864 hi = (hi + Math.imul(ah6, bh5)) | 0;
54865 lo = (lo + Math.imul(al5, bl6)) | 0;
54866 mid = (mid + Math.imul(al5, bh6)) | 0;
54867 mid = (mid + Math.imul(ah5, bl6)) | 0;
54868 hi = (hi + Math.imul(ah5, bh6)) | 0;
54869 lo = (lo + Math.imul(al4, bl7)) | 0;
54870 mid = (mid + Math.imul(al4, bh7)) | 0;
54871 mid = (mid + Math.imul(ah4, bl7)) | 0;
54872 hi = (hi + Math.imul(ah4, bh7)) | 0;
54873 lo = (lo + Math.imul(al3, bl8)) | 0;
54874 mid = (mid + Math.imul(al3, bh8)) | 0;
54875 mid = (mid + Math.imul(ah3, bl8)) | 0;
54876 hi = (hi + Math.imul(ah3, bh8)) | 0;
54877 lo = (lo + Math.imul(al2, bl9)) | 0;
54878 mid = (mid + Math.imul(al2, bh9)) | 0;
54879 mid = (mid + Math.imul(ah2, bl9)) | 0;
54880 hi = (hi + Math.imul(ah2, bh9)) | 0;
54881 var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54882 c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
54883 w11 &= 0x3ffffff;
54884 /* k = 12 */
54885 lo = Math.imul(al9, bl3);
54886 mid = Math.imul(al9, bh3);
54887 mid = (mid + Math.imul(ah9, bl3)) | 0;
54888 hi = Math.imul(ah9, bh3);
54889 lo = (lo + Math.imul(al8, bl4)) | 0;
54890 mid = (mid + Math.imul(al8, bh4)) | 0;
54891 mid = (mid + Math.imul(ah8, bl4)) | 0;
54892 hi = (hi + Math.imul(ah8, bh4)) | 0;
54893 lo = (lo + Math.imul(al7, bl5)) | 0;
54894 mid = (mid + Math.imul(al7, bh5)) | 0;
54895 mid = (mid + Math.imul(ah7, bl5)) | 0;
54896 hi = (hi + Math.imul(ah7, bh5)) | 0;
54897 lo = (lo + Math.imul(al6, bl6)) | 0;
54898 mid = (mid + Math.imul(al6, bh6)) | 0;
54899 mid = (mid + Math.imul(ah6, bl6)) | 0;
54900 hi = (hi + Math.imul(ah6, bh6)) | 0;
54901 lo = (lo + Math.imul(al5, bl7)) | 0;
54902 mid = (mid + Math.imul(al5, bh7)) | 0;
54903 mid = (mid + Math.imul(ah5, bl7)) | 0;
54904 hi = (hi + Math.imul(ah5, bh7)) | 0;
54905 lo = (lo + Math.imul(al4, bl8)) | 0;
54906 mid = (mid + Math.imul(al4, bh8)) | 0;
54907 mid = (mid + Math.imul(ah4, bl8)) | 0;
54908 hi = (hi + Math.imul(ah4, bh8)) | 0;
54909 lo = (lo + Math.imul(al3, bl9)) | 0;
54910 mid = (mid + Math.imul(al3, bh9)) | 0;
54911 mid = (mid + Math.imul(ah3, bl9)) | 0;
54912 hi = (hi + Math.imul(ah3, bh9)) | 0;
54913 var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54914 c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
54915 w12 &= 0x3ffffff;
54916 /* k = 13 */
54917 lo = Math.imul(al9, bl4);
54918 mid = Math.imul(al9, bh4);
54919 mid = (mid + Math.imul(ah9, bl4)) | 0;
54920 hi = Math.imul(ah9, bh4);
54921 lo = (lo + Math.imul(al8, bl5)) | 0;
54922 mid = (mid + Math.imul(al8, bh5)) | 0;
54923 mid = (mid + Math.imul(ah8, bl5)) | 0;
54924 hi = (hi + Math.imul(ah8, bh5)) | 0;
54925 lo = (lo + Math.imul(al7, bl6)) | 0;
54926 mid = (mid + Math.imul(al7, bh6)) | 0;
54927 mid = (mid + Math.imul(ah7, bl6)) | 0;
54928 hi = (hi + Math.imul(ah7, bh6)) | 0;
54929 lo = (lo + Math.imul(al6, bl7)) | 0;
54930 mid = (mid + Math.imul(al6, bh7)) | 0;
54931 mid = (mid + Math.imul(ah6, bl7)) | 0;
54932 hi = (hi + Math.imul(ah6, bh7)) | 0;
54933 lo = (lo + Math.imul(al5, bl8)) | 0;
54934 mid = (mid + Math.imul(al5, bh8)) | 0;
54935 mid = (mid + Math.imul(ah5, bl8)) | 0;
54936 hi = (hi + Math.imul(ah5, bh8)) | 0;
54937 lo = (lo + Math.imul(al4, bl9)) | 0;
54938 mid = (mid + Math.imul(al4, bh9)) | 0;
54939 mid = (mid + Math.imul(ah4, bl9)) | 0;
54940 hi = (hi + Math.imul(ah4, bh9)) | 0;
54941 var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54942 c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
54943 w13 &= 0x3ffffff;
54944 /* k = 14 */
54945 lo = Math.imul(al9, bl5);
54946 mid = Math.imul(al9, bh5);
54947 mid = (mid + Math.imul(ah9, bl5)) | 0;
54948 hi = Math.imul(ah9, bh5);
54949 lo = (lo + Math.imul(al8, bl6)) | 0;
54950 mid = (mid + Math.imul(al8, bh6)) | 0;
54951 mid = (mid + Math.imul(ah8, bl6)) | 0;
54952 hi = (hi + Math.imul(ah8, bh6)) | 0;
54953 lo = (lo + Math.imul(al7, bl7)) | 0;
54954 mid = (mid + Math.imul(al7, bh7)) | 0;
54955 mid = (mid + Math.imul(ah7, bl7)) | 0;
54956 hi = (hi + Math.imul(ah7, bh7)) | 0;
54957 lo = (lo + Math.imul(al6, bl8)) | 0;
54958 mid = (mid + Math.imul(al6, bh8)) | 0;
54959 mid = (mid + Math.imul(ah6, bl8)) | 0;
54960 hi = (hi + Math.imul(ah6, bh8)) | 0;
54961 lo = (lo + Math.imul(al5, bl9)) | 0;
54962 mid = (mid + Math.imul(al5, bh9)) | 0;
54963 mid = (mid + Math.imul(ah5, bl9)) | 0;
54964 hi = (hi + Math.imul(ah5, bh9)) | 0;
54965 var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54966 c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
54967 w14 &= 0x3ffffff;
54968 /* k = 15 */
54969 lo = Math.imul(al9, bl6);
54970 mid = Math.imul(al9, bh6);
54971 mid = (mid + Math.imul(ah9, bl6)) | 0;
54972 hi = Math.imul(ah9, bh6);
54973 lo = (lo + Math.imul(al8, bl7)) | 0;
54974 mid = (mid + Math.imul(al8, bh7)) | 0;
54975 mid = (mid + Math.imul(ah8, bl7)) | 0;
54976 hi = (hi + Math.imul(ah8, bh7)) | 0;
54977 lo = (lo + Math.imul(al7, bl8)) | 0;
54978 mid = (mid + Math.imul(al7, bh8)) | 0;
54979 mid = (mid + Math.imul(ah7, bl8)) | 0;
54980 hi = (hi + Math.imul(ah7, bh8)) | 0;
54981 lo = (lo + Math.imul(al6, bl9)) | 0;
54982 mid = (mid + Math.imul(al6, bh9)) | 0;
54983 mid = (mid + Math.imul(ah6, bl9)) | 0;
54984 hi = (hi + Math.imul(ah6, bh9)) | 0;
54985 var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54986 c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
54987 w15 &= 0x3ffffff;
54988 /* k = 16 */
54989 lo = Math.imul(al9, bl7);
54990 mid = Math.imul(al9, bh7);
54991 mid = (mid + Math.imul(ah9, bl7)) | 0;
54992 hi = Math.imul(ah9, bh7);
54993 lo = (lo + Math.imul(al8, bl8)) | 0;
54994 mid = (mid + Math.imul(al8, bh8)) | 0;
54995 mid = (mid + Math.imul(ah8, bl8)) | 0;
54996 hi = (hi + Math.imul(ah8, bh8)) | 0;
54997 lo = (lo + Math.imul(al7, bl9)) | 0;
54998 mid = (mid + Math.imul(al7, bh9)) | 0;
54999 mid = (mid + Math.imul(ah7, bl9)) | 0;
55000 hi = (hi + Math.imul(ah7, bh9)) | 0;
55001 var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
55002 c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
55003 w16 &= 0x3ffffff;
55004 /* k = 17 */
55005 lo = Math.imul(al9, bl8);
55006 mid = Math.imul(al9, bh8);
55007 mid = (mid + Math.imul(ah9, bl8)) | 0;
55008 hi = Math.imul(ah9, bh8);
55009 lo = (lo + Math.imul(al8, bl9)) | 0;
55010 mid = (mid + Math.imul(al8, bh9)) | 0;
55011 mid = (mid + Math.imul(ah8, bl9)) | 0;
55012 hi = (hi + Math.imul(ah8, bh9)) | 0;
55013 var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
55014 c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
55015 w17 &= 0x3ffffff;
55016 /* k = 18 */
55017 lo = Math.imul(al9, bl9);
55018 mid = Math.imul(al9, bh9);
55019 mid = (mid + Math.imul(ah9, bl9)) | 0;
55020 hi = Math.imul(ah9, bh9);
55021 var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
55022 c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
55023 w18 &= 0x3ffffff;
55024 o[0] = w0;
55025 o[1] = w1;
55026 o[2] = w2;
55027 o[3] = w3;
55028 o[4] = w4;
55029 o[5] = w5;
55030 o[6] = w6;
55031 o[7] = w7;
55032 o[8] = w8;
55033 o[9] = w9;
55034 o[10] = w10;
55035 o[11] = w11;
55036 o[12] = w12;
55037 o[13] = w13;
55038 o[14] = w14;
55039 o[15] = w15;
55040 o[16] = w16;
55041 o[17] = w17;
55042 o[18] = w18;
55043 if (c !== 0) {
55044 o[19] = c;
55045 out.length++;
55046 }
55047 return out;
55048 };
55049
55050 // Polyfill comb
55051 if (!Math.imul) {
55052 comb10MulTo = smallMulTo;
55053 }
55054
55055 function bigMulTo (self, num, out) {
55056 out.negative = num.negative ^ self.negative;
55057 out.length = self.length + num.length;
55058
55059 var carry = 0;
55060 var hncarry = 0;
55061 for (var k = 0; k < out.length - 1; k++) {
55062 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
55063 // note that ncarry could be >= 0x3ffffff
55064 var ncarry = hncarry;
55065 hncarry = 0;
55066 var rword = carry & 0x3ffffff;
55067 var maxJ = Math.min(k, num.length - 1);
55068 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
55069 var i = k - j;
55070 var a = self.words[i] | 0;
55071 var b = num.words[j] | 0;
55072 var r = a * b;
55073
55074 var lo = r & 0x3ffffff;
55075 ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
55076 lo = (lo + rword) | 0;
55077 rword = lo & 0x3ffffff;
55078 ncarry = (ncarry + (lo >>> 26)) | 0;
55079
55080 hncarry += ncarry >>> 26;
55081 ncarry &= 0x3ffffff;
55082 }
55083 out.words[k] = rword;
55084 carry = ncarry;
55085 ncarry = hncarry;
55086 }
55087 if (carry !== 0) {
55088 out.words[k] = carry;
55089 } else {
55090 out.length--;
55091 }
55092
55093 return out.strip();
55094 }
55095
55096 function jumboMulTo (self, num, out) {
55097 var fftm = new FFTM();
55098 return fftm.mulp(self, num, out);
55099 }
55100
55101 BN.prototype.mulTo = function mulTo (num, out) {
55102 var res;
55103 var len = this.length + num.length;
55104 if (this.length === 10 && num.length === 10) {
55105 res = comb10MulTo(this, num, out);
55106 } else if (len < 63) {
55107 res = smallMulTo(this, num, out);
55108 } else if (len < 1024) {
55109 res = bigMulTo(this, num, out);
55110 } else {
55111 res = jumboMulTo(this, num, out);
55112 }
55113
55114 return res;
55115 };
55116
55117 // Cooley-Tukey algorithm for FFT
55118 // slightly revisited to rely on looping instead of recursion
55119
55120 function FFTM (x, y) {
55121 this.x = x;
55122 this.y = y;
55123 }
55124
55125 FFTM.prototype.makeRBT = function makeRBT (N) {
55126 var t = new Array(N);
55127 var l = BN.prototype._countBits(N) - 1;
55128 for (var i = 0; i < N; i++) {
55129 t[i] = this.revBin(i, l, N);
55130 }
55131
55132 return t;
55133 };
55134
55135 // Returns binary-reversed representation of `x`
55136 FFTM.prototype.revBin = function revBin (x, l, N) {
55137 if (x === 0 || x === N - 1) return x;
55138
55139 var rb = 0;
55140 for (var i = 0; i < l; i++) {
55141 rb |= (x & 1) << (l - i - 1);
55142 x >>= 1;
55143 }
55144
55145 return rb;
55146 };
55147
55148 // Performs "tweedling" phase, therefore 'emulating'
55149 // behaviour of the recursive algorithm
55150 FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
55151 for (var i = 0; i < N; i++) {
55152 rtws[i] = rws[rbt[i]];
55153 itws[i] = iws[rbt[i]];
55154 }
55155 };
55156
55157 FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
55158 this.permute(rbt, rws, iws, rtws, itws, N);
55159
55160 for (var s = 1; s < N; s <<= 1) {
55161 var l = s << 1;
55162
55163 var rtwdf = Math.cos(2 * Math.PI / l);
55164 var itwdf = Math.sin(2 * Math.PI / l);
55165
55166 for (var p = 0; p < N; p += l) {
55167 var rtwdf_ = rtwdf;
55168 var itwdf_ = itwdf;
55169
55170 for (var j = 0; j < s; j++) {
55171 var re = rtws[p + j];
55172 var ie = itws[p + j];
55173
55174 var ro = rtws[p + j + s];
55175 var io = itws[p + j + s];
55176
55177 var rx = rtwdf_ * ro - itwdf_ * io;
55178
55179 io = rtwdf_ * io + itwdf_ * ro;
55180 ro = rx;
55181
55182 rtws[p + j] = re + ro;
55183 itws[p + j] = ie + io;
55184
55185 rtws[p + j + s] = re - ro;
55186 itws[p + j + s] = ie - io;
55187
55188 /* jshint maxdepth : false */
55189 if (j !== l) {
55190 rx = rtwdf * rtwdf_ - itwdf * itwdf_;
55191
55192 itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
55193 rtwdf_ = rx;
55194 }
55195 }
55196 }
55197 }
55198 };
55199
55200 FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
55201 var N = Math.max(m, n) | 1;
55202 var odd = N & 1;
55203 var i = 0;
55204 for (N = N / 2 | 0; N; N = N >>> 1) {
55205 i++;
55206 }
55207
55208 return 1 << i + 1 + odd;
55209 };
55210
55211 FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
55212 if (N <= 1) return;
55213
55214 for (var i = 0; i < N / 2; i++) {
55215 var t = rws[i];
55216
55217 rws[i] = rws[N - i - 1];
55218 rws[N - i - 1] = t;
55219
55220 t = iws[i];
55221
55222 iws[i] = -iws[N - i - 1];
55223 iws[N - i - 1] = -t;
55224 }
55225 };
55226
55227 FFTM.prototype.normalize13b = function normalize13b (ws, N) {
55228 var carry = 0;
55229 for (var i = 0; i < N / 2; i++) {
55230 var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
55231 Math.round(ws[2 * i] / N) +
55232 carry;
55233
55234 ws[i] = w & 0x3ffffff;
55235
55236 if (w < 0x4000000) {
55237 carry = 0;
55238 } else {
55239 carry = w / 0x4000000 | 0;
55240 }
55241 }
55242
55243 return ws;
55244 };
55245
55246 FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
55247 var carry = 0;
55248 for (var i = 0; i < len; i++) {
55249 carry = carry + (ws[i] | 0);
55250
55251 rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
55252 rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
55253 }
55254
55255 // Pad with zeroes
55256 for (i = 2 * len; i < N; ++i) {
55257 rws[i] = 0;
55258 }
55259
55260 assert(carry === 0);
55261 assert((carry & ~0x1fff) === 0);
55262 };
55263
55264 FFTM.prototype.stub = function stub (N) {
55265 var ph = new Array(N);
55266 for (var i = 0; i < N; i++) {
55267 ph[i] = 0;
55268 }
55269
55270 return ph;
55271 };
55272
55273 FFTM.prototype.mulp = function mulp (x, y, out) {
55274 var N = 2 * this.guessLen13b(x.length, y.length);
55275
55276 var rbt = this.makeRBT(N);
55277
55278 var _ = this.stub(N);
55279
55280 var rws = new Array(N);
55281 var rwst = new Array(N);
55282 var iwst = new Array(N);
55283
55284 var nrws = new Array(N);
55285 var nrwst = new Array(N);
55286 var niwst = new Array(N);
55287
55288 var rmws = out.words;
55289 rmws.length = N;
55290
55291 this.convert13b(x.words, x.length, rws, N);
55292 this.convert13b(y.words, y.length, nrws, N);
55293
55294 this.transform(rws, _, rwst, iwst, N, rbt);
55295 this.transform(nrws, _, nrwst, niwst, N, rbt);
55296
55297 for (var i = 0; i < N; i++) {
55298 var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
55299 iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
55300 rwst[i] = rx;
55301 }
55302
55303 this.conjugate(rwst, iwst, N);
55304 this.transform(rwst, iwst, rmws, _, N, rbt);
55305 this.conjugate(rmws, _, N);
55306 this.normalize13b(rmws, N);
55307
55308 out.negative = x.negative ^ y.negative;
55309 out.length = x.length + y.length;
55310 return out.strip();
55311 };
55312
55313 // Multiply `this` by `num`
55314 BN.prototype.mul = function mul (num) {
55315 var out = new BN(null);
55316 out.words = new Array(this.length + num.length);
55317 return this.mulTo(num, out);
55318 };
55319
55320 // Multiply employing FFT
55321 BN.prototype.mulf = function mulf (num) {
55322 var out = new BN(null);
55323 out.words = new Array(this.length + num.length);
55324 return jumboMulTo(this, num, out);
55325 };
55326
55327 // In-place Multiplication
55328 BN.prototype.imul = function imul (num) {
55329 return this.clone().mulTo(num, this);
55330 };
55331
55332 BN.prototype.imuln = function imuln (num) {
55333 assert(typeof num === 'number');
55334 assert(num < 0x4000000);
55335
55336 // Carry
55337 var carry = 0;
55338 for (var i = 0; i < this.length; i++) {
55339 var w = (this.words[i] | 0) * num;
55340 var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
55341 carry >>= 26;
55342 carry += (w / 0x4000000) | 0;
55343 // NOTE: lo is 27bit maximum
55344 carry += lo >>> 26;
55345 this.words[i] = lo & 0x3ffffff;
55346 }
55347
55348 if (carry !== 0) {
55349 this.words[i] = carry;
55350 this.length++;
55351 }
55352
55353 return this;
55354 };
55355
55356 BN.prototype.muln = function muln (num) {
55357 return this.clone().imuln(num);
55358 };
55359
55360 // `this` * `this`
55361 BN.prototype.sqr = function sqr () {
55362 return this.mul(this);
55363 };
55364
55365 // `this` * `this` in-place
55366 BN.prototype.isqr = function isqr () {
55367 return this.imul(this.clone());
55368 };
55369
55370 // Math.pow(`this`, `num`)
55371 BN.prototype.pow = function pow (num) {
55372 var w = toBitArray(num);
55373 if (w.length === 0) return new BN(1);
55374
55375 // Skip leading zeroes
55376 var res = this;
55377 for (var i = 0; i < w.length; i++, res = res.sqr()) {
55378 if (w[i] !== 0) break;
55379 }
55380
55381 if (++i < w.length) {
55382 for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
55383 if (w[i] === 0) continue;
55384
55385 res = res.mul(q);
55386 }
55387 }
55388
55389 return res;
55390 };
55391
55392 // Shift-left in-place
55393 BN.prototype.iushln = function iushln (bits) {
55394 assert(typeof bits === 'number' && bits >= 0);
55395 var r = bits % 26;
55396 var s = (bits - r) / 26;
55397 var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
55398 var i;
55399
55400 if (r !== 0) {
55401 var carry = 0;
55402
55403 for (i = 0; i < this.length; i++) {
55404 var newCarry = this.words[i] & carryMask;
55405 var c = ((this.words[i] | 0) - newCarry) << r;
55406 this.words[i] = c | carry;
55407 carry = newCarry >>> (26 - r);
55408 }
55409
55410 if (carry) {
55411 this.words[i] = carry;
55412 this.length++;
55413 }
55414 }
55415
55416 if (s !== 0) {
55417 for (i = this.length - 1; i >= 0; i--) {
55418 this.words[i + s] = this.words[i];
55419 }
55420
55421 for (i = 0; i < s; i++) {
55422 this.words[i] = 0;
55423 }
55424
55425 this.length += s;
55426 }
55427
55428 return this.strip();
55429 };
55430
55431 BN.prototype.ishln = function ishln (bits) {
55432 // TODO(indutny): implement me
55433 assert(this.negative === 0);
55434 return this.iushln(bits);
55435 };
55436
55437 // Shift-right in-place
55438 // NOTE: `hint` is a lowest bit before trailing zeroes
55439 // NOTE: if `extended` is present - it will be filled with destroyed bits
55440 BN.prototype.iushrn = function iushrn (bits, hint, extended) {
55441 assert(typeof bits === 'number' && bits >= 0);
55442 var h;
55443 if (hint) {
55444 h = (hint - (hint % 26)) / 26;
55445 } else {
55446 h = 0;
55447 }
55448
55449 var r = bits % 26;
55450 var s = Math.min((bits - r) / 26, this.length);
55451 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
55452 var maskedWords = extended;
55453
55454 h -= s;
55455 h = Math.max(0, h);
55456
55457 // Extended mode, copy masked part
55458 if (maskedWords) {
55459 for (var i = 0; i < s; i++) {
55460 maskedWords.words[i] = this.words[i];
55461 }
55462 maskedWords.length = s;
55463 }
55464
55465 if (s === 0) {
55466 // No-op, we should not move anything at all
55467 } else if (this.length > s) {
55468 this.length -= s;
55469 for (i = 0; i < this.length; i++) {
55470 this.words[i] = this.words[i + s];
55471 }
55472 } else {
55473 this.words[0] = 0;
55474 this.length = 1;
55475 }
55476
55477 var carry = 0;
55478 for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
55479 var word = this.words[i] | 0;
55480 this.words[i] = (carry << (26 - r)) | (word >>> r);
55481 carry = word & mask;
55482 }
55483
55484 // Push carried bits as a mask
55485 if (maskedWords && carry !== 0) {
55486 maskedWords.words[maskedWords.length++] = carry;
55487 }
55488
55489 if (this.length === 0) {
55490 this.words[0] = 0;
55491 this.length = 1;
55492 }
55493
55494 return this.strip();
55495 };
55496
55497 BN.prototype.ishrn = function ishrn (bits, hint, extended) {
55498 // TODO(indutny): implement me
55499 assert(this.negative === 0);
55500 return this.iushrn(bits, hint, extended);
55501 };
55502
55503 // Shift-left
55504 BN.prototype.shln = function shln (bits) {
55505 return this.clone().ishln(bits);
55506 };
55507
55508 BN.prototype.ushln = function ushln (bits) {
55509 return this.clone().iushln(bits);
55510 };
55511
55512 // Shift-right
55513 BN.prototype.shrn = function shrn (bits) {
55514 return this.clone().ishrn(bits);
55515 };
55516
55517 BN.prototype.ushrn = function ushrn (bits) {
55518 return this.clone().iushrn(bits);
55519 };
55520
55521 // Test if n bit is set
55522 BN.prototype.testn = function testn (bit) {
55523 assert(typeof bit === 'number' && bit >= 0);
55524 var r = bit % 26;
55525 var s = (bit - r) / 26;
55526 var q = 1 << r;
55527
55528 // Fast case: bit is much higher than all existing words
55529 if (this.length <= s) return false;
55530
55531 // Check bit and return
55532 var w = this.words[s];
55533
55534 return !!(w & q);
55535 };
55536
55537 // Return only lowers bits of number (in-place)
55538 BN.prototype.imaskn = function imaskn (bits) {
55539 assert(typeof bits === 'number' && bits >= 0);
55540 var r = bits % 26;
55541 var s = (bits - r) / 26;
55542
55543 assert(this.negative === 0, 'imaskn works only with positive numbers');
55544
55545 if (this.length <= s) {
55546 return this;
55547 }
55548
55549 if (r !== 0) {
55550 s++;
55551 }
55552 this.length = Math.min(s, this.length);
55553
55554 if (r !== 0) {
55555 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
55556 this.words[this.length - 1] &= mask;
55557 }
55558
55559 return this.strip();
55560 };
55561
55562 // Return only lowers bits of number
55563 BN.prototype.maskn = function maskn (bits) {
55564 return this.clone().imaskn(bits);
55565 };
55566
55567 // Add plain number `num` to `this`
55568 BN.prototype.iaddn = function iaddn (num) {
55569 assert(typeof num === 'number');
55570 assert(num < 0x4000000);
55571 if (num < 0) return this.isubn(-num);
55572
55573 // Possible sign change
55574 if (this.negative !== 0) {
55575 if (this.length === 1 && (this.words[0] | 0) < num) {
55576 this.words[0] = num - (this.words[0] | 0);
55577 this.negative = 0;
55578 return this;
55579 }
55580
55581 this.negative = 0;
55582 this.isubn(num);
55583 this.negative = 1;
55584 return this;
55585 }
55586
55587 // Add without checks
55588 return this._iaddn(num);
55589 };
55590
55591 BN.prototype._iaddn = function _iaddn (num) {
55592 this.words[0] += num;
55593
55594 // Carry
55595 for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
55596 this.words[i] -= 0x4000000;
55597 if (i === this.length - 1) {
55598 this.words[i + 1] = 1;
55599 } else {
55600 this.words[i + 1]++;
55601 }
55602 }
55603 this.length = Math.max(this.length, i + 1);
55604
55605 return this;
55606 };
55607
55608 // Subtract plain number `num` from `this`
55609 BN.prototype.isubn = function isubn (num) {
55610 assert(typeof num === 'number');
55611 assert(num < 0x4000000);
55612 if (num < 0) return this.iaddn(-num);
55613
55614 if (this.negative !== 0) {
55615 this.negative = 0;
55616 this.iaddn(num);
55617 this.negative = 1;
55618 return this;
55619 }
55620
55621 this.words[0] -= num;
55622
55623 if (this.length === 1 && this.words[0] < 0) {
55624 this.words[0] = -this.words[0];
55625 this.negative = 1;
55626 } else {
55627 // Carry
55628 for (var i = 0; i < this.length && this.words[i] < 0; i++) {
55629 this.words[i] += 0x4000000;
55630 this.words[i + 1] -= 1;
55631 }
55632 }
55633
55634 return this.strip();
55635 };
55636
55637 BN.prototype.addn = function addn (num) {
55638 return this.clone().iaddn(num);
55639 };
55640
55641 BN.prototype.subn = function subn (num) {
55642 return this.clone().isubn(num);
55643 };
55644
55645 BN.prototype.iabs = function iabs () {
55646 this.negative = 0;
55647
55648 return this;
55649 };
55650
55651 BN.prototype.abs = function abs () {
55652 return this.clone().iabs();
55653 };
55654
55655 BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
55656 var len = num.length + shift;
55657 var i;
55658
55659 this._expand(len);
55660
55661 var w;
55662 var carry = 0;
55663 for (i = 0; i < num.length; i++) {
55664 w = (this.words[i + shift] | 0) + carry;
55665 var right = (num.words[i] | 0) * mul;
55666 w -= right & 0x3ffffff;
55667 carry = (w >> 26) - ((right / 0x4000000) | 0);
55668 this.words[i + shift] = w & 0x3ffffff;
55669 }
55670 for (; i < this.length - shift; i++) {
55671 w = (this.words[i + shift] | 0) + carry;
55672 carry = w >> 26;
55673 this.words[i + shift] = w & 0x3ffffff;
55674 }
55675
55676 if (carry === 0) return this.strip();
55677
55678 // Subtraction overflow
55679 assert(carry === -1);
55680 carry = 0;
55681 for (i = 0; i < this.length; i++) {
55682 w = -(this.words[i] | 0) + carry;
55683 carry = w >> 26;
55684 this.words[i] = w & 0x3ffffff;
55685 }
55686 this.negative = 1;
55687
55688 return this.strip();
55689 };
55690
55691 BN.prototype._wordDiv = function _wordDiv (num, mode) {
55692 var shift = this.length - num.length;
55693
55694 var a = this.clone();
55695 var b = num;
55696
55697 // Normalize
55698 var bhi = b.words[b.length - 1] | 0;
55699 var bhiBits = this._countBits(bhi);
55700 shift = 26 - bhiBits;
55701 if (shift !== 0) {
55702 b = b.ushln(shift);
55703 a.iushln(shift);
55704 bhi = b.words[b.length - 1] | 0;
55705 }
55706
55707 // Initialize quotient
55708 var m = a.length - b.length;
55709 var q;
55710
55711 if (mode !== 'mod') {
55712 q = new BN(null);
55713 q.length = m + 1;
55714 q.words = new Array(q.length);
55715 for (var i = 0; i < q.length; i++) {
55716 q.words[i] = 0;
55717 }
55718 }
55719
55720 var diff = a.clone()._ishlnsubmul(b, 1, m);
55721 if (diff.negative === 0) {
55722 a = diff;
55723 if (q) {
55724 q.words[m] = 1;
55725 }
55726 }
55727
55728 for (var j = m - 1; j >= 0; j--) {
55729 var qj = (a.words[b.length + j] | 0) * 0x4000000 +
55730 (a.words[b.length + j - 1] | 0);
55731
55732 // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
55733 // (0x7ffffff)
55734 qj = Math.min((qj / bhi) | 0, 0x3ffffff);
55735
55736 a._ishlnsubmul(b, qj, j);
55737 while (a.negative !== 0) {
55738 qj--;
55739 a.negative = 0;
55740 a._ishlnsubmul(b, 1, j);
55741 if (!a.isZero()) {
55742 a.negative ^= 1;
55743 }
55744 }
55745 if (q) {
55746 q.words[j] = qj;
55747 }
55748 }
55749 if (q) {
55750 q.strip();
55751 }
55752 a.strip();
55753
55754 // Denormalize
55755 if (mode !== 'div' && shift !== 0) {
55756 a.iushrn(shift);
55757 }
55758
55759 return {
55760 div: q || null,
55761 mod: a
55762 };
55763 };
55764
55765 // NOTE: 1) `mode` can be set to `mod` to request mod only,
55766 // to `div` to request div only, or be absent to
55767 // request both div & mod
55768 // 2) `positive` is true if unsigned mod is requested
55769 BN.prototype.divmod = function divmod (num, mode, positive) {
55770 assert(!num.isZero());
55771
55772 if (this.isZero()) {
55773 return {
55774 div: new BN(0),
55775 mod: new BN(0)
55776 };
55777 }
55778
55779 var div, mod, res;
55780 if (this.negative !== 0 && num.negative === 0) {
55781 res = this.neg().divmod(num, mode);
55782
55783 if (mode !== 'mod') {
55784 div = res.div.neg();
55785 }
55786
55787 if (mode !== 'div') {
55788 mod = res.mod.neg();
55789 if (positive && mod.negative !== 0) {
55790 mod.iadd(num);
55791 }
55792 }
55793
55794 return {
55795 div: div,
55796 mod: mod
55797 };
55798 }
55799
55800 if (this.negative === 0 && num.negative !== 0) {
55801 res = this.divmod(num.neg(), mode);
55802
55803 if (mode !== 'mod') {
55804 div = res.div.neg();
55805 }
55806
55807 return {
55808 div: div,
55809 mod: res.mod
55810 };
55811 }
55812
55813 if ((this.negative & num.negative) !== 0) {
55814 res = this.neg().divmod(num.neg(), mode);
55815
55816 if (mode !== 'div') {
55817 mod = res.mod.neg();
55818 if (positive && mod.negative !== 0) {
55819 mod.isub(num);
55820 }
55821 }
55822
55823 return {
55824 div: res.div,
55825 mod: mod
55826 };
55827 }
55828
55829 // Both numbers are positive at this point
55830
55831 // Strip both numbers to approximate shift value
55832 if (num.length > this.length || this.cmp(num) < 0) {
55833 return {
55834 div: new BN(0),
55835 mod: this
55836 };
55837 }
55838
55839 // Very short reduction
55840 if (num.length === 1) {
55841 if (mode === 'div') {
55842 return {
55843 div: this.divn(num.words[0]),
55844 mod: null
55845 };
55846 }
55847
55848 if (mode === 'mod') {
55849 return {
55850 div: null,
55851 mod: new BN(this.modn(num.words[0]))
55852 };
55853 }
55854
55855 return {
55856 div: this.divn(num.words[0]),
55857 mod: new BN(this.modn(num.words[0]))
55858 };
55859 }
55860
55861 return this._wordDiv(num, mode);
55862 };
55863
55864 // Find `this` / `num`
55865 BN.prototype.div = function div (num) {
55866 return this.divmod(num, 'div', false).div;
55867 };
55868
55869 // Find `this` % `num`
55870 BN.prototype.mod = function mod (num) {
55871 return this.divmod(num, 'mod', false).mod;
55872 };
55873
55874 BN.prototype.umod = function umod (num) {
55875 return this.divmod(num, 'mod', true).mod;
55876 };
55877
55878 // Find Round(`this` / `num`)
55879 BN.prototype.divRound = function divRound (num) {
55880 var dm = this.divmod(num);
55881
55882 // Fast case - exact division
55883 if (dm.mod.isZero()) return dm.div;
55884
55885 var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
55886
55887 var half = num.ushrn(1);
55888 var r2 = num.andln(1);
55889 var cmp = mod.cmp(half);
55890
55891 // Round down
55892 if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
55893
55894 // Round up
55895 return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
55896 };
55897
55898 BN.prototype.modn = function modn (num) {
55899 assert(num <= 0x3ffffff);
55900 var p = (1 << 26) % num;
55901
55902 var acc = 0;
55903 for (var i = this.length - 1; i >= 0; i--) {
55904 acc = (p * acc + (this.words[i] | 0)) % num;
55905 }
55906
55907 return acc;
55908 };
55909
55910 // In-place division by number
55911 BN.prototype.idivn = function idivn (num) {
55912 assert(num <= 0x3ffffff);
55913
55914 var carry = 0;
55915 for (var i = this.length - 1; i >= 0; i--) {
55916 var w = (this.words[i] | 0) + carry * 0x4000000;
55917 this.words[i] = (w / num) | 0;
55918 carry = w % num;
55919 }
55920
55921 return this.strip();
55922 };
55923
55924 BN.prototype.divn = function divn (num) {
55925 return this.clone().idivn(num);
55926 };
55927
55928 BN.prototype.egcd = function egcd (p) {
55929 assert(p.negative === 0);
55930 assert(!p.isZero());
55931
55932 var x = this;
55933 var y = p.clone();
55934
55935 if (x.negative !== 0) {
55936 x = x.umod(p);
55937 } else {
55938 x = x.clone();
55939 }
55940
55941 // A * x + B * y = x
55942 var A = new BN(1);
55943 var B = new BN(0);
55944
55945 // C * x + D * y = y
55946 var C = new BN(0);
55947 var D = new BN(1);
55948
55949 var g = 0;
55950
55951 while (x.isEven() && y.isEven()) {
55952 x.iushrn(1);
55953 y.iushrn(1);
55954 ++g;
55955 }
55956
55957 var yp = y.clone();
55958 var xp = x.clone();
55959
55960 while (!x.isZero()) {
55961 for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
55962 if (i > 0) {
55963 x.iushrn(i);
55964 while (i-- > 0) {
55965 if (A.isOdd() || B.isOdd()) {
55966 A.iadd(yp);
55967 B.isub(xp);
55968 }
55969
55970 A.iushrn(1);
55971 B.iushrn(1);
55972 }
55973 }
55974
55975 for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
55976 if (j > 0) {
55977 y.iushrn(j);
55978 while (j-- > 0) {
55979 if (C.isOdd() || D.isOdd()) {
55980 C.iadd(yp);
55981 D.isub(xp);
55982 }
55983
55984 C.iushrn(1);
55985 D.iushrn(1);
55986 }
55987 }
55988
55989 if (x.cmp(y) >= 0) {
55990 x.isub(y);
55991 A.isub(C);
55992 B.isub(D);
55993 } else {
55994 y.isub(x);
55995 C.isub(A);
55996 D.isub(B);
55997 }
55998 }
55999
56000 return {
56001 a: C,
56002 b: D,
56003 gcd: y.iushln(g)
56004 };
56005 };
56006
56007 // This is reduced incarnation of the binary EEA
56008 // above, designated to invert members of the
56009 // _prime_ fields F(p) at a maximal speed
56010 BN.prototype._invmp = function _invmp (p) {
56011 assert(p.negative === 0);
56012 assert(!p.isZero());
56013
56014 var a = this;
56015 var b = p.clone();
56016
56017 if (a.negative !== 0) {
56018 a = a.umod(p);
56019 } else {
56020 a = a.clone();
56021 }
56022
56023 var x1 = new BN(1);
56024 var x2 = new BN(0);
56025
56026 var delta = b.clone();
56027
56028 while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
56029 for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
56030 if (i > 0) {
56031 a.iushrn(i);
56032 while (i-- > 0) {
56033 if (x1.isOdd()) {
56034 x1.iadd(delta);
56035 }
56036
56037 x1.iushrn(1);
56038 }
56039 }
56040
56041 for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
56042 if (j > 0) {
56043 b.iushrn(j);
56044 while (j-- > 0) {
56045 if (x2.isOdd()) {
56046 x2.iadd(delta);
56047 }
56048
56049 x2.iushrn(1);
56050 }
56051 }
56052
56053 if (a.cmp(b) >= 0) {
56054 a.isub(b);
56055 x1.isub(x2);
56056 } else {
56057 b.isub(a);
56058 x2.isub(x1);
56059 }
56060 }
56061
56062 var res;
56063 if (a.cmpn(1) === 0) {
56064 res = x1;
56065 } else {
56066 res = x2;
56067 }
56068
56069 if (res.cmpn(0) < 0) {
56070 res.iadd(p);
56071 }
56072
56073 return res;
56074 };
56075
56076 BN.prototype.gcd = function gcd (num) {
56077 if (this.isZero()) return num.abs();
56078 if (num.isZero()) return this.abs();
56079
56080 var a = this.clone();
56081 var b = num.clone();
56082 a.negative = 0;
56083 b.negative = 0;
56084
56085 // Remove common factor of two
56086 for (var shift = 0; a.isEven() && b.isEven(); shift++) {
56087 a.iushrn(1);
56088 b.iushrn(1);
56089 }
56090
56091 do {
56092 while (a.isEven()) {
56093 a.iushrn(1);
56094 }
56095 while (b.isEven()) {
56096 b.iushrn(1);
56097 }
56098
56099 var r = a.cmp(b);
56100 if (r < 0) {
56101 // Swap `a` and `b` to make `a` always bigger than `b`
56102 var t = a;
56103 a = b;
56104 b = t;
56105 } else if (r === 0 || b.cmpn(1) === 0) {
56106 break;
56107 }
56108
56109 a.isub(b);
56110 } while (true);
56111
56112 return b.iushln(shift);
56113 };
56114
56115 // Invert number in the field F(num)
56116 BN.prototype.invm = function invm (num) {
56117 return this.egcd(num).a.umod(num);
56118 };
56119
56120 BN.prototype.isEven = function isEven () {
56121 return (this.words[0] & 1) === 0;
56122 };
56123
56124 BN.prototype.isOdd = function isOdd () {
56125 return (this.words[0] & 1) === 1;
56126 };
56127
56128 // And first word and num
56129 BN.prototype.andln = function andln (num) {
56130 return this.words[0] & num;
56131 };
56132
56133 // Increment at the bit position in-line
56134 BN.prototype.bincn = function bincn (bit) {
56135 assert(typeof bit === 'number');
56136 var r = bit % 26;
56137 var s = (bit - r) / 26;
56138 var q = 1 << r;
56139
56140 // Fast case: bit is much higher than all existing words
56141 if (this.length <= s) {
56142 this._expand(s + 1);
56143 this.words[s] |= q;
56144 return this;
56145 }
56146
56147 // Add bit and propagate, if needed
56148 var carry = q;
56149 for (var i = s; carry !== 0 && i < this.length; i++) {
56150 var w = this.words[i] | 0;
56151 w += carry;
56152 carry = w >>> 26;
56153 w &= 0x3ffffff;
56154 this.words[i] = w;
56155 }
56156 if (carry !== 0) {
56157 this.words[i] = carry;
56158 this.length++;
56159 }
56160 return this;
56161 };
56162
56163 BN.prototype.isZero = function isZero () {
56164 return this.length === 1 && this.words[0] === 0;
56165 };
56166
56167 BN.prototype.cmpn = function cmpn (num) {
56168 var negative = num < 0;
56169
56170 if (this.negative !== 0 && !negative) return -1;
56171 if (this.negative === 0 && negative) return 1;
56172
56173 this.strip();
56174
56175 var res;
56176 if (this.length > 1) {
56177 res = 1;
56178 } else {
56179 if (negative) {
56180 num = -num;
56181 }
56182
56183 assert(num <= 0x3ffffff, 'Number is too big');
56184
56185 var w = this.words[0] | 0;
56186 res = w === num ? 0 : w < num ? -1 : 1;
56187 }
56188 if (this.negative !== 0) return -res | 0;
56189 return res;
56190 };
56191
56192 // Compare two numbers and return:
56193 // 1 - if `this` > `num`
56194 // 0 - if `this` == `num`
56195 // -1 - if `this` < `num`
56196 BN.prototype.cmp = function cmp (num) {
56197 if (this.negative !== 0 && num.negative === 0) return -1;
56198 if (this.negative === 0 && num.negative !== 0) return 1;
56199
56200 var res = this.ucmp(num);
56201 if (this.negative !== 0) return -res | 0;
56202 return res;
56203 };
56204
56205 // Unsigned comparison
56206 BN.prototype.ucmp = function ucmp (num) {
56207 // At this point both numbers have the same sign
56208 if (this.length > num.length) return 1;
56209 if (this.length < num.length) return -1;
56210
56211 var res = 0;
56212 for (var i = this.length - 1; i >= 0; i--) {
56213 var a = this.words[i] | 0;
56214 var b = num.words[i] | 0;
56215
56216 if (a === b) continue;
56217 if (a < b) {
56218 res = -1;
56219 } else if (a > b) {
56220 res = 1;
56221 }
56222 break;
56223 }
56224 return res;
56225 };
56226
56227 BN.prototype.gtn = function gtn (num) {
56228 return this.cmpn(num) === 1;
56229 };
56230
56231 BN.prototype.gt = function gt (num) {
56232 return this.cmp(num) === 1;
56233 };
56234
56235 BN.prototype.gten = function gten (num) {
56236 return this.cmpn(num) >= 0;
56237 };
56238
56239 BN.prototype.gte = function gte (num) {
56240 return this.cmp(num) >= 0;
56241 };
56242
56243 BN.prototype.ltn = function ltn (num) {
56244 return this.cmpn(num) === -1;
56245 };
56246
56247 BN.prototype.lt = function lt (num) {
56248 return this.cmp(num) === -1;
56249 };
56250
56251 BN.prototype.lten = function lten (num) {
56252 return this.cmpn(num) <= 0;
56253 };
56254
56255 BN.prototype.lte = function lte (num) {
56256 return this.cmp(num) <= 0;
56257 };
56258
56259 BN.prototype.eqn = function eqn (num) {
56260 return this.cmpn(num) === 0;
56261 };
56262
56263 BN.prototype.eq = function eq (num) {
56264 return this.cmp(num) === 0;
56265 };
56266
56267 //
56268 // A reduce context, could be using montgomery or something better, depending
56269 // on the `m` itself.
56270 //
56271 BN.red = function red (num) {
56272 return new Red(num);
56273 };
56274
56275 BN.prototype.toRed = function toRed (ctx) {
56276 assert(!this.red, 'Already a number in reduction context');
56277 assert(this.negative === 0, 'red works only with positives');
56278 return ctx.convertTo(this)._forceRed(ctx);
56279 };
56280
56281 BN.prototype.fromRed = function fromRed () {
56282 assert(this.red, 'fromRed works only with numbers in reduction context');
56283 return this.red.convertFrom(this);
56284 };
56285
56286 BN.prototype._forceRed = function _forceRed (ctx) {
56287 this.red = ctx;
56288 return this;
56289 };
56290
56291 BN.prototype.forceRed = function forceRed (ctx) {
56292 assert(!this.red, 'Already a number in reduction context');
56293 return this._forceRed(ctx);
56294 };
56295
56296 BN.prototype.redAdd = function redAdd (num) {
56297 assert(this.red, 'redAdd works only with red numbers');
56298 return this.red.add(this, num);
56299 };
56300
56301 BN.prototype.redIAdd = function redIAdd (num) {
56302 assert(this.red, 'redIAdd works only with red numbers');
56303 return this.red.iadd(this, num);
56304 };
56305
56306 BN.prototype.redSub = function redSub (num) {
56307 assert(this.red, 'redSub works only with red numbers');
56308 return this.red.sub(this, num);
56309 };
56310
56311 BN.prototype.redISub = function redISub (num) {
56312 assert(this.red, 'redISub works only with red numbers');
56313 return this.red.isub(this, num);
56314 };
56315
56316 BN.prototype.redShl = function redShl (num) {
56317 assert(this.red, 'redShl works only with red numbers');
56318 return this.red.shl(this, num);
56319 };
56320
56321 BN.prototype.redMul = function redMul (num) {
56322 assert(this.red, 'redMul works only with red numbers');
56323 this.red._verify2(this, num);
56324 return this.red.mul(this, num);
56325 };
56326
56327 BN.prototype.redIMul = function redIMul (num) {
56328 assert(this.red, 'redMul works only with red numbers');
56329 this.red._verify2(this, num);
56330 return this.red.imul(this, num);
56331 };
56332
56333 BN.prototype.redSqr = function redSqr () {
56334 assert(this.red, 'redSqr works only with red numbers');
56335 this.red._verify1(this);
56336 return this.red.sqr(this);
56337 };
56338
56339 BN.prototype.redISqr = function redISqr () {
56340 assert(this.red, 'redISqr works only with red numbers');
56341 this.red._verify1(this);
56342 return this.red.isqr(this);
56343 };
56344
56345 // Square root over p
56346 BN.prototype.redSqrt = function redSqrt () {
56347 assert(this.red, 'redSqrt works only with red numbers');
56348 this.red._verify1(this);
56349 return this.red.sqrt(this);
56350 };
56351
56352 BN.prototype.redInvm = function redInvm () {
56353 assert(this.red, 'redInvm works only with red numbers');
56354 this.red._verify1(this);
56355 return this.red.invm(this);
56356 };
56357
56358 // Return negative clone of `this` % `red modulo`
56359 BN.prototype.redNeg = function redNeg () {
56360 assert(this.red, 'redNeg works only with red numbers');
56361 this.red._verify1(this);
56362 return this.red.neg(this);
56363 };
56364
56365 BN.prototype.redPow = function redPow (num) {
56366 assert(this.red && !num.red, 'redPow(normalNum)');
56367 this.red._verify1(this);
56368 return this.red.pow(this, num);
56369 };
56370
56371 // Prime numbers with efficient reduction
56372 var primes = {
56373 k256: null,
56374 p224: null,
56375 p192: null,
56376 p25519: null
56377 };
56378
56379 // Pseudo-Mersenne prime
56380 function MPrime (name, p) {
56381 // P = 2 ^ N - K
56382 this.name = name;
56383 this.p = new BN(p, 16);
56384 this.n = this.p.bitLength();
56385 this.k = new BN(1).iushln(this.n).isub(this.p);
56386
56387 this.tmp = this._tmp();
56388 }
56389
56390 MPrime.prototype._tmp = function _tmp () {
56391 var tmp = new BN(null);
56392 tmp.words = new Array(Math.ceil(this.n / 13));
56393 return tmp;
56394 };
56395
56396 MPrime.prototype.ireduce = function ireduce (num) {
56397 // Assumes that `num` is less than `P^2`
56398 // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
56399 var r = num;
56400 var rlen;
56401
56402 do {
56403 this.split(r, this.tmp);
56404 r = this.imulK(r);
56405 r = r.iadd(this.tmp);
56406 rlen = r.bitLength();
56407 } while (rlen > this.n);
56408
56409 var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
56410 if (cmp === 0) {
56411 r.words[0] = 0;
56412 r.length = 1;
56413 } else if (cmp > 0) {
56414 r.isub(this.p);
56415 } else {
56416 r.strip();
56417 }
56418
56419 return r;
56420 };
56421
56422 MPrime.prototype.split = function split (input, out) {
56423 input.iushrn(this.n, 0, out);
56424 };
56425
56426 MPrime.prototype.imulK = function imulK (num) {
56427 return num.imul(this.k);
56428 };
56429
56430 function K256 () {
56431 MPrime.call(
56432 this,
56433 'k256',
56434 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
56435 }
56436 inherits(K256, MPrime);
56437
56438 K256.prototype.split = function split (input, output) {
56439 // 256 = 9 * 26 + 22
56440 var mask = 0x3fffff;
56441
56442 var outLen = Math.min(input.length, 9);
56443 for (var i = 0; i < outLen; i++) {
56444 output.words[i] = input.words[i];
56445 }
56446 output.length = outLen;
56447
56448 if (input.length <= 9) {
56449 input.words[0] = 0;
56450 input.length = 1;
56451 return;
56452 }
56453
56454 // Shift by 9 limbs
56455 var prev = input.words[9];
56456 output.words[output.length++] = prev & mask;
56457
56458 for (i = 10; i < input.length; i++) {
56459 var next = input.words[i] | 0;
56460 input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
56461 prev = next;
56462 }
56463 prev >>>= 22;
56464 input.words[i - 10] = prev;
56465 if (prev === 0 && input.length > 10) {
56466 input.length -= 10;
56467 } else {
56468 input.length -= 9;
56469 }
56470 };
56471
56472 K256.prototype.imulK = function imulK (num) {
56473 // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
56474 num.words[num.length] = 0;
56475 num.words[num.length + 1] = 0;
56476 num.length += 2;
56477
56478 // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
56479 var lo = 0;
56480 for (var i = 0; i < num.length; i++) {
56481 var w = num.words[i] | 0;
56482 lo += w * 0x3d1;
56483 num.words[i] = lo & 0x3ffffff;
56484 lo = w * 0x40 + ((lo / 0x4000000) | 0);
56485 }
56486
56487 // Fast length reduction
56488 if (num.words[num.length - 1] === 0) {
56489 num.length--;
56490 if (num.words[num.length - 1] === 0) {
56491 num.length--;
56492 }
56493 }
56494 return num;
56495 };
56496
56497 function P224 () {
56498 MPrime.call(
56499 this,
56500 'p224',
56501 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
56502 }
56503 inherits(P224, MPrime);
56504
56505 function P192 () {
56506 MPrime.call(
56507 this,
56508 'p192',
56509 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
56510 }
56511 inherits(P192, MPrime);
56512
56513 function P25519 () {
56514 // 2 ^ 255 - 19
56515 MPrime.call(
56516 this,
56517 '25519',
56518 '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
56519 }
56520 inherits(P25519, MPrime);
56521
56522 P25519.prototype.imulK = function imulK (num) {
56523 // K = 0x13
56524 var carry = 0;
56525 for (var i = 0; i < num.length; i++) {
56526 var hi = (num.words[i] | 0) * 0x13 + carry;
56527 var lo = hi & 0x3ffffff;
56528 hi >>>= 26;
56529
56530 num.words[i] = lo;
56531 carry = hi;
56532 }
56533 if (carry !== 0) {
56534 num.words[num.length++] = carry;
56535 }
56536 return num;
56537 };
56538
56539 // Exported mostly for testing purposes, use plain name instead
56540 BN._prime = function prime (name) {
56541 // Cached version of prime
56542 if (primes[name]) return primes[name];
56543
56544 var prime;
56545 if (name === 'k256') {
56546 prime = new K256();
56547 } else if (name === 'p224') {
56548 prime = new P224();
56549 } else if (name === 'p192') {
56550 prime = new P192();
56551 } else if (name === 'p25519') {
56552 prime = new P25519();
56553 } else {
56554 throw new Error('Unknown prime ' + name);
56555 }
56556 primes[name] = prime;
56557
56558 return prime;
56559 };
56560
56561 //
56562 // Base reduction engine
56563 //
56564 function Red (m) {
56565 if (typeof m === 'string') {
56566 var prime = BN._prime(m);
56567 this.m = prime.p;
56568 this.prime = prime;
56569 } else {
56570 assert(m.gtn(1), 'modulus must be greater than 1');
56571 this.m = m;
56572 this.prime = null;
56573 }
56574 }
56575
56576 Red.prototype._verify1 = function _verify1 (a) {
56577 assert(a.negative === 0, 'red works only with positives');
56578 assert(a.red, 'red works only with red numbers');
56579 };
56580
56581 Red.prototype._verify2 = function _verify2 (a, b) {
56582 assert((a.negative | b.negative) === 0, 'red works only with positives');
56583 assert(a.red && a.red === b.red,
56584 'red works only with red numbers');
56585 };
56586
56587 Red.prototype.imod = function imod (a) {
56588 if (this.prime) return this.prime.ireduce(a)._forceRed(this);
56589 return a.umod(this.m)._forceRed(this);
56590 };
56591
56592 Red.prototype.neg = function neg (a) {
56593 if (a.isZero()) {
56594 return a.clone();
56595 }
56596
56597 return this.m.sub(a)._forceRed(this);
56598 };
56599
56600 Red.prototype.add = function add (a, b) {
56601 this._verify2(a, b);
56602
56603 var res = a.add(b);
56604 if (res.cmp(this.m) >= 0) {
56605 res.isub(this.m);
56606 }
56607 return res._forceRed(this);
56608 };
56609
56610 Red.prototype.iadd = function iadd (a, b) {
56611 this._verify2(a, b);
56612
56613 var res = a.iadd(b);
56614 if (res.cmp(this.m) >= 0) {
56615 res.isub(this.m);
56616 }
56617 return res;
56618 };
56619
56620 Red.prototype.sub = function sub (a, b) {
56621 this._verify2(a, b);
56622
56623 var res = a.sub(b);
56624 if (res.cmpn(0) < 0) {
56625 res.iadd(this.m);
56626 }
56627 return res._forceRed(this);
56628 };
56629
56630 Red.prototype.isub = function isub (a, b) {
56631 this._verify2(a, b);
56632
56633 var res = a.isub(b);
56634 if (res.cmpn(0) < 0) {
56635 res.iadd(this.m);
56636 }
56637 return res;
56638 };
56639
56640 Red.prototype.shl = function shl (a, num) {
56641 this._verify1(a);
56642 return this.imod(a.ushln(num));
56643 };
56644
56645 Red.prototype.imul = function imul (a, b) {
56646 this._verify2(a, b);
56647 return this.imod(a.imul(b));
56648 };
56649
56650 Red.prototype.mul = function mul (a, b) {
56651 this._verify2(a, b);
56652 return this.imod(a.mul(b));
56653 };
56654
56655 Red.prototype.isqr = function isqr (a) {
56656 return this.imul(a, a.clone());
56657 };
56658
56659 Red.prototype.sqr = function sqr (a) {
56660 return this.mul(a, a);
56661 };
56662
56663 Red.prototype.sqrt = function sqrt (a) {
56664 if (a.isZero()) return a.clone();
56665
56666 var mod3 = this.m.andln(3);
56667 assert(mod3 % 2 === 1);
56668
56669 // Fast case
56670 if (mod3 === 3) {
56671 var pow = this.m.add(new BN(1)).iushrn(2);
56672 return this.pow(a, pow);
56673 }
56674
56675 // Tonelli-Shanks algorithm (Totally unoptimized and slow)
56676 //
56677 // Find Q and S, that Q * 2 ^ S = (P - 1)
56678 var q = this.m.subn(1);
56679 var s = 0;
56680 while (!q.isZero() && q.andln(1) === 0) {
56681 s++;
56682 q.iushrn(1);
56683 }
56684 assert(!q.isZero());
56685
56686 var one = new BN(1).toRed(this);
56687 var nOne = one.redNeg();
56688
56689 // Find quadratic non-residue
56690 // NOTE: Max is such because of generalized Riemann hypothesis.
56691 var lpow = this.m.subn(1).iushrn(1);
56692 var z = this.m.bitLength();
56693 z = new BN(2 * z * z).toRed(this);
56694
56695 while (this.pow(z, lpow).cmp(nOne) !== 0) {
56696 z.redIAdd(nOne);
56697 }
56698
56699 var c = this.pow(z, q);
56700 var r = this.pow(a, q.addn(1).iushrn(1));
56701 var t = this.pow(a, q);
56702 var m = s;
56703 while (t.cmp(one) !== 0) {
56704 var tmp = t;
56705 for (var i = 0; tmp.cmp(one) !== 0; i++) {
56706 tmp = tmp.redSqr();
56707 }
56708 assert(i < m);
56709 var b = this.pow(c, new BN(1).iushln(m - i - 1));
56710
56711 r = r.redMul(b);
56712 c = b.redSqr();
56713 t = t.redMul(c);
56714 m = i;
56715 }
56716
56717 return r;
56718 };
56719
56720 Red.prototype.invm = function invm (a) {
56721 var inv = a._invmp(this.m);
56722 if (inv.negative !== 0) {
56723 inv.negative = 0;
56724 return this.imod(inv).redNeg();
56725 } else {
56726 return this.imod(inv);
56727 }
56728 };
56729
56730 Red.prototype.pow = function pow (a, num) {
56731 if (num.isZero()) return new BN(1);
56732 if (num.cmpn(1) === 0) return a.clone();
56733
56734 var windowSize = 4;
56735 var wnd = new Array(1 << windowSize);
56736 wnd[0] = new BN(1).toRed(this);
56737 wnd[1] = a;
56738 for (var i = 2; i < wnd.length; i++) {
56739 wnd[i] = this.mul(wnd[i - 1], a);
56740 }
56741
56742 var res = wnd[0];
56743 var current = 0;
56744 var currentLen = 0;
56745 var start = num.bitLength() % 26;
56746 if (start === 0) {
56747 start = 26;
56748 }
56749
56750 for (i = num.length - 1; i >= 0; i--) {
56751 var word = num.words[i];
56752 for (var j = start - 1; j >= 0; j--) {
56753 var bit = (word >> j) & 1;
56754 if (res !== wnd[0]) {
56755 res = this.sqr(res);
56756 }
56757
56758 if (bit === 0 && current === 0) {
56759 currentLen = 0;
56760 continue;
56761 }
56762
56763 current <<= 1;
56764 current |= bit;
56765 currentLen++;
56766 if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
56767
56768 res = this.mul(res, wnd[current]);
56769 currentLen = 0;
56770 current = 0;
56771 }
56772 start = 26;
56773 }
56774
56775 return res;
56776 };
56777
56778 Red.prototype.convertTo = function convertTo (num) {
56779 var r = num.umod(this.m);
56780
56781 return r === num ? r.clone() : r;
56782 };
56783
56784 Red.prototype.convertFrom = function convertFrom (num) {
56785 var res = num.clone();
56786 res.red = null;
56787 return res;
56788 };
56789
56790 //
56791 // Montgomery method engine
56792 //
56793
56794 BN.mont = function mont (num) {
56795 return new Mont(num);
56796 };
56797
56798 function Mont (m) {
56799 Red.call(this, m);
56800
56801 this.shift = this.m.bitLength();
56802 if (this.shift % 26 !== 0) {
56803 this.shift += 26 - (this.shift % 26);
56804 }
56805
56806 this.r = new BN(1).iushln(this.shift);
56807 this.r2 = this.imod(this.r.sqr());
56808 this.rinv = this.r._invmp(this.m);
56809
56810 this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
56811 this.minv = this.minv.umod(this.r);
56812 this.minv = this.r.sub(this.minv);
56813 }
56814 inherits(Mont, Red);
56815
56816 Mont.prototype.convertTo = function convertTo (num) {
56817 return this.imod(num.ushln(this.shift));
56818 };
56819
56820 Mont.prototype.convertFrom = function convertFrom (num) {
56821 var r = this.imod(num.mul(this.rinv));
56822 r.red = null;
56823 return r;
56824 };
56825
56826 Mont.prototype.imul = function imul (a, b) {
56827 if (a.isZero() || b.isZero()) {
56828 a.words[0] = 0;
56829 a.length = 1;
56830 return a;
56831 }
56832
56833 var t = a.imul(b);
56834 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
56835 var u = t.isub(c).iushrn(this.shift);
56836 var res = u;
56837
56838 if (u.cmp(this.m) >= 0) {
56839 res = u.isub(this.m);
56840 } else if (u.cmpn(0) < 0) {
56841 res = u.iadd(this.m);
56842 }
56843
56844 return res._forceRed(this);
56845 };
56846
56847 Mont.prototype.mul = function mul (a, b) {
56848 if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
56849
56850 var t = a.mul(b);
56851 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
56852 var u = t.isub(c).iushrn(this.shift);
56853 var res = u;
56854 if (u.cmp(this.m) >= 0) {
56855 res = u.isub(this.m);
56856 } else if (u.cmpn(0) < 0) {
56857 res = u.iadd(this.m);
56858 }
56859
56860 return res._forceRed(this);
56861 };
56862
56863 Mont.prototype.invm = function invm (a) {
56864 // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
56865 var res = this.imod(a._invmp(this.m).mul(this.r2));
56866 return res._forceRed(this);
56867 };
56868 })(typeof module === 'undefined' || module, this);
56869
56870 },{}],18:[function(require,module,exports){
56871 var r;
56872
56873 module.exports = function rand(len) {
56874 if (!r)
56875 r = new Rand(null);
56876
56877 return r.generate(len);
56878 };
56879
56880 function Rand(rand) {
56881 this.rand = rand;
56882 }
56883 module.exports.Rand = Rand;
56884
56885 Rand.prototype.generate = function generate(len) {
56886 return this._rand(len);
56887 };
56888
56889 // Emulate crypto API using randy
56890 Rand.prototype._rand = function _rand(n) {
56891 if (this.rand.getBytes)
56892 return this.rand.getBytes(n);
56893
56894 var res = new Uint8Array(n);
56895 for (var i = 0; i < res.length; i++)
56896 res[i] = this.rand.getByte();
56897 return res;
56898 };
56899
56900 if (typeof self === 'object') {
56901 if (self.crypto && self.crypto.getRandomValues) {
56902 // Modern browsers
56903 Rand.prototype._rand = function _rand(n) {
56904 var arr = new Uint8Array(n);
56905 self.crypto.getRandomValues(arr);
56906 return arr;
56907 };
56908 } else if (self.msCrypto && self.msCrypto.getRandomValues) {
56909 // IE
56910 Rand.prototype._rand = function _rand(n) {
56911 var arr = new Uint8Array(n);
56912 self.msCrypto.getRandomValues(arr);
56913 return arr;
56914 };
56915
56916 // Safari's WebWorkers do not have `crypto`
56917 } else if (typeof window === 'object') {
56918 // Old junk
56919 Rand.prototype._rand = function() {
56920 throw new Error('Not implemented yet');
56921 };
56922 }
56923 } else {
56924 // Node.js or Web worker with no crypto support
56925 try {
56926 var crypto = require('crypto');
56927 if (typeof crypto.randomBytes !== 'function')
56928 throw new Error('Not supported');
56929
56930 Rand.prototype._rand = function _rand(n) {
56931 return crypto.randomBytes(n);
56932 };
56933 } catch (e) {
56934 }
56935 }
56936
56937 },{"crypto":19}],19:[function(require,module,exports){
56938
56939 },{}],20:[function(require,module,exports){
56940 (function (Buffer){
56941 // based on the aes implimentation in triple sec
56942 // https://github.com/keybase/triplesec
56943
56944 // which is in turn based on the one from crypto-js
56945 // https://code.google.com/p/crypto-js/
56946
56947 var uint_max = Math.pow(2, 32)
56948 function fixup_uint32 (x) {
56949 var ret, x_pos
56950 ret = x > uint_max || x < 0 ? (x_pos = Math.abs(x) % uint_max, x < 0 ? uint_max - x_pos : x_pos) : x
56951 return ret
56952 }
56953 function scrub_vec (v) {
56954 for (var i = 0; i < v.length; v++) {
56955 v[i] = 0
56956 }
56957 return false
56958 }
56959
56960 function Global () {
56961 this.SBOX = []
56962 this.INV_SBOX = []
56963 this.SUB_MIX = [[], [], [], []]
56964 this.INV_SUB_MIX = [[], [], [], []]
56965 this.init()
56966 this.RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]
56967 }
56968
56969 Global.prototype.init = function () {
56970 var d, i, sx, t, x, x2, x4, x8, xi, _i
56971 d = (function () {
56972 var _i, _results
56973 _results = []
56974 for (i = _i = 0; _i < 256; i = ++_i) {
56975 if (i < 128) {
56976 _results.push(i << 1)
56977 } else {
56978 _results.push((i << 1) ^ 0x11b)
56979 }
56980 }
56981 return _results
56982 })()
56983 x = 0
56984 xi = 0
56985 for (i = _i = 0; _i < 256; i = ++_i) {
56986 sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)
56987 sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63
56988 this.SBOX[x] = sx
56989 this.INV_SBOX[sx] = x
56990 x2 = d[x]
56991 x4 = d[x2]
56992 x8 = d[x4]
56993 t = (d[sx] * 0x101) ^ (sx * 0x1010100)
56994 this.SUB_MIX[0][x] = (t << 24) | (t >>> 8)
56995 this.SUB_MIX[1][x] = (t << 16) | (t >>> 16)
56996 this.SUB_MIX[2][x] = (t << 8) | (t >>> 24)
56997 this.SUB_MIX[3][x] = t
56998 t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)
56999 this.INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)
57000 this.INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)
57001 this.INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)
57002 this.INV_SUB_MIX[3][sx] = t
57003 if (x === 0) {
57004 x = xi = 1
57005 } else {
57006 x = x2 ^ d[d[d[x8 ^ x2]]]
57007 xi ^= d[d[xi]]
57008 }
57009 }
57010 return true
57011 }
57012
57013 var G = new Global()
57014
57015 AES.blockSize = 4 * 4
57016
57017 AES.prototype.blockSize = AES.blockSize
57018
57019 AES.keySize = 256 / 8
57020
57021 AES.prototype.keySize = AES.keySize
57022
57023 function bufferToArray (buf) {
57024 var len = buf.length / 4
57025 var out = new Array(len)
57026 var i = -1
57027 while (++i < len) {
57028 out[i] = buf.readUInt32BE(i * 4)
57029 }
57030 return out
57031 }
57032 function AES (key) {
57033 this._key = bufferToArray(key)
57034 this._doReset()
57035 }
57036
57037 AES.prototype._doReset = function () {
57038 var invKsRow, keySize, keyWords, ksRow, ksRows, t
57039 keyWords = this._key
57040 keySize = keyWords.length
57041 this._nRounds = keySize + 6
57042 ksRows = (this._nRounds + 1) * 4
57043 this._keySchedule = []
57044 for (ksRow = 0; ksRow < ksRows; ksRow++) {
57045 this._keySchedule[ksRow] = ksRow < keySize ? keyWords[ksRow] : (t = this._keySchedule[ksRow - 1], (ksRow % keySize) === 0 ? (t = (t << 8) | (t >>> 24), t = (G.SBOX[t >>> 24] << 24) | (G.SBOX[(t >>> 16) & 0xff] << 16) | (G.SBOX[(t >>> 8) & 0xff] << 8) | G.SBOX[t & 0xff], t ^= G.RCON[(ksRow / keySize) | 0] << 24) : keySize > 6 && ksRow % keySize === 4 ? t = (G.SBOX[t >>> 24] << 24) | (G.SBOX[(t >>> 16) & 0xff] << 16) | (G.SBOX[(t >>> 8) & 0xff] << 8) | G.SBOX[t & 0xff] : void 0, this._keySchedule[ksRow - keySize] ^ t)
57046 }
57047 this._invKeySchedule = []
57048 for (invKsRow = 0; invKsRow < ksRows; invKsRow++) {
57049 ksRow = ksRows - invKsRow
57050 t = this._keySchedule[ksRow - (invKsRow % 4 ? 0 : 4)]
57051 this._invKeySchedule[invKsRow] = invKsRow < 4 || ksRow <= 4 ? t : G.INV_SUB_MIX[0][G.SBOX[t >>> 24]] ^ G.INV_SUB_MIX[1][G.SBOX[(t >>> 16) & 0xff]] ^ G.INV_SUB_MIX[2][G.SBOX[(t >>> 8) & 0xff]] ^ G.INV_SUB_MIX[3][G.SBOX[t & 0xff]]
57052 }
57053 return true
57054 }
57055
57056 AES.prototype.encryptBlock = function (M) {
57057 M = bufferToArray(new Buffer(M))
57058 var out = this._doCryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX)
57059 var buf = new Buffer(16)
57060 buf.writeUInt32BE(out[0], 0)
57061 buf.writeUInt32BE(out[1], 4)
57062 buf.writeUInt32BE(out[2], 8)
57063 buf.writeUInt32BE(out[3], 12)
57064 return buf
57065 }
57066
57067 AES.prototype.decryptBlock = function (M) {
57068 M = bufferToArray(new Buffer(M))
57069 var temp = [M[3], M[1]]
57070 M[1] = temp[0]
57071 M[3] = temp[1]
57072 var out = this._doCryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX)
57073 var buf = new Buffer(16)
57074 buf.writeUInt32BE(out[0], 0)
57075 buf.writeUInt32BE(out[3], 4)
57076 buf.writeUInt32BE(out[2], 8)
57077 buf.writeUInt32BE(out[1], 12)
57078 return buf
57079 }
57080
57081 AES.prototype.scrub = function () {
57082 scrub_vec(this._keySchedule)
57083 scrub_vec(this._invKeySchedule)
57084 scrub_vec(this._key)
57085 }
57086
57087 AES.prototype._doCryptBlock = function (M, keySchedule, SUB_MIX, SBOX) {
57088 var ksRow, s0, s1, s2, s3, t0, t1, t2, t3
57089
57090 s0 = M[0] ^ keySchedule[0]
57091 s1 = M[1] ^ keySchedule[1]
57092 s2 = M[2] ^ keySchedule[2]
57093 s3 = M[3] ^ keySchedule[3]
57094 ksRow = 4
57095 for (var round = 1; round < this._nRounds; round++) {
57096 t0 = SUB_MIX[0][s0 >>> 24] ^ SUB_MIX[1][(s1 >>> 16) & 0xff] ^ SUB_MIX[2][(s2 >>> 8) & 0xff] ^ SUB_MIX[3][s3 & 0xff] ^ keySchedule[ksRow++]
57097 t1 = SUB_MIX[0][s1 >>> 24] ^ SUB_MIX[1][(s2 >>> 16) & 0xff] ^ SUB_MIX[2][(s3 >>> 8) & 0xff] ^ SUB_MIX[3][s0 & 0xff] ^ keySchedule[ksRow++]
57098 t2 = SUB_MIX[0][s2 >>> 24] ^ SUB_MIX[1][(s3 >>> 16) & 0xff] ^ SUB_MIX[2][(s0 >>> 8) & 0xff] ^ SUB_MIX[3][s1 & 0xff] ^ keySchedule[ksRow++]
57099 t3 = SUB_MIX[0][s3 >>> 24] ^ SUB_MIX[1][(s0 >>> 16) & 0xff] ^ SUB_MIX[2][(s1 >>> 8) & 0xff] ^ SUB_MIX[3][s2 & 0xff] ^ keySchedule[ksRow++]
57100 s0 = t0
57101 s1 = t1
57102 s2 = t2
57103 s3 = t3
57104 }
57105 t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]
57106 t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]
57107 t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]
57108 t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]
57109 return [
57110 fixup_uint32(t0),
57111 fixup_uint32(t1),
57112 fixup_uint32(t2),
57113 fixup_uint32(t3)
57114 ]
57115 }
57116
57117 exports.AES = AES
57118
57119 }).call(this,require("buffer").Buffer)
57120 },{"buffer":47}],21:[function(require,module,exports){
57121 (function (Buffer){
57122 var aes = require('./aes')
57123 var Transform = require('cipher-base')
57124 var inherits = require('inherits')
57125 var GHASH = require('./ghash')
57126 var xor = require('buffer-xor')
57127 inherits(StreamCipher, Transform)
57128 module.exports = StreamCipher
57129
57130 function StreamCipher (mode, key, iv, decrypt) {
57131 if (!(this instanceof StreamCipher)) {
57132 return new StreamCipher(mode, key, iv)
57133 }
57134 Transform.call(this)
57135 this._finID = Buffer.concat([iv, new Buffer([0, 0, 0, 1])])
57136 iv = Buffer.concat([iv, new Buffer([0, 0, 0, 2])])
57137 this._cipher = new aes.AES(key)
57138 this._prev = new Buffer(iv.length)
57139 this._cache = new Buffer('')
57140 this._secCache = new Buffer('')
57141 this._decrypt = decrypt
57142 this._alen = 0
57143 this._len = 0
57144 iv.copy(this._prev)
57145 this._mode = mode
57146 var h = new Buffer(4)
57147 h.fill(0)
57148 this._ghash = new GHASH(this._cipher.encryptBlock(h))
57149 this._authTag = null
57150 this._called = false
57151 }
57152 StreamCipher.prototype._update = function (chunk) {
57153 if (!this._called && this._alen) {
57154 var rump = 16 - (this._alen % 16)
57155 if (rump < 16) {
57156 rump = new Buffer(rump)
57157 rump.fill(0)
57158 this._ghash.update(rump)
57159 }
57160 }
57161 this._called = true
57162 var out = this._mode.encrypt(this, chunk)
57163 if (this._decrypt) {
57164 this._ghash.update(chunk)
57165 } else {
57166 this._ghash.update(out)
57167 }
57168 this._len += chunk.length
57169 return out
57170 }
57171 StreamCipher.prototype._final = function () {
57172 if (this._decrypt && !this._authTag) {
57173 throw new Error('Unsupported state or unable to authenticate data')
57174 }
57175 var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))
57176 if (this._decrypt) {
57177 if (xorTest(tag, this._authTag)) {
57178 throw new Error('Unsupported state or unable to authenticate data')
57179 }
57180 } else {
57181 this._authTag = tag
57182 }
57183 this._cipher.scrub()
57184 }
57185 StreamCipher.prototype.getAuthTag = function getAuthTag () {
57186 if (!this._decrypt && Buffer.isBuffer(this._authTag)) {
57187 return this._authTag
57188 } else {
57189 throw new Error('Attempting to get auth tag in unsupported state')
57190 }
57191 }
57192 StreamCipher.prototype.setAuthTag = function setAuthTag (tag) {
57193 if (this._decrypt) {
57194 this._authTag = tag
57195 } else {
57196 throw new Error('Attempting to set auth tag in unsupported state')
57197 }
57198 }
57199 StreamCipher.prototype.setAAD = function setAAD (buf) {
57200 if (!this._called) {
57201 this._ghash.update(buf)
57202 this._alen += buf.length
57203 } else {
57204 throw new Error('Attempting to set AAD in unsupported state')
57205 }
57206 }
57207 function xorTest (a, b) {
57208 var out = 0
57209 if (a.length !== b.length) {
57210 out++
57211 }
57212 var len = Math.min(a.length, b.length)
57213 var i = -1
57214 while (++i < len) {
57215 out += (a[i] ^ b[i])
57216 }
57217 return out
57218 }
57219
57220 }).call(this,require("buffer").Buffer)
57221 },{"./aes":20,"./ghash":25,"buffer":47,"buffer-xor":46,"cipher-base":48,"inherits":95}],22:[function(require,module,exports){
57222 var ciphers = require('./encrypter')
57223 exports.createCipher = exports.Cipher = ciphers.createCipher
57224 exports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv
57225 var deciphers = require('./decrypter')
57226 exports.createDecipher = exports.Decipher = deciphers.createDecipher
57227 exports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv
57228 var modes = require('./modes')
57229 function getCiphers () {
57230 return Object.keys(modes)
57231 }
57232 exports.listCiphers = exports.getCiphers = getCiphers
57233
57234 },{"./decrypter":23,"./encrypter":24,"./modes":26}],23:[function(require,module,exports){
57235 (function (Buffer){
57236 var aes = require('./aes')
57237 var Transform = require('cipher-base')
57238 var inherits = require('inherits')
57239 var modes = require('./modes')
57240 var StreamCipher = require('./streamCipher')
57241 var AuthCipher = require('./authCipher')
57242 var ebtk = require('evp_bytestokey')
57243
57244 inherits(Decipher, Transform)
57245 function Decipher (mode, key, iv) {
57246 if (!(this instanceof Decipher)) {
57247 return new Decipher(mode, key, iv)
57248 }
57249 Transform.call(this)
57250 this._cache = new Splitter()
57251 this._last = void 0
57252 this._cipher = new aes.AES(key)
57253 this._prev = new Buffer(iv.length)
57254 iv.copy(this._prev)
57255 this._mode = mode
57256 this._autopadding = true
57257 }
57258 Decipher.prototype._update = function (data) {
57259 this._cache.add(data)
57260 var chunk
57261 var thing
57262 var out = []
57263 while ((chunk = this._cache.get(this._autopadding))) {
57264 thing = this._mode.decrypt(this, chunk)
57265 out.push(thing)
57266 }
57267 return Buffer.concat(out)
57268 }
57269 Decipher.prototype._final = function () {
57270 var chunk = this._cache.flush()
57271 if (this._autopadding) {
57272 return unpad(this._mode.decrypt(this, chunk))
57273 } else if (chunk) {
57274 throw new Error('data not multiple of block length')
57275 }
57276 }
57277 Decipher.prototype.setAutoPadding = function (setTo) {
57278 this._autopadding = !!setTo
57279 return this
57280 }
57281 function Splitter () {
57282 if (!(this instanceof Splitter)) {
57283 return new Splitter()
57284 }
57285 this.cache = new Buffer('')
57286 }
57287 Splitter.prototype.add = function (data) {
57288 this.cache = Buffer.concat([this.cache, data])
57289 }
57290
57291 Splitter.prototype.get = function (autoPadding) {
57292 var out
57293 if (autoPadding) {
57294 if (this.cache.length > 16) {
57295 out = this.cache.slice(0, 16)
57296 this.cache = this.cache.slice(16)
57297 return out
57298 }
57299 } else {
57300 if (this.cache.length >= 16) {
57301 out = this.cache.slice(0, 16)
57302 this.cache = this.cache.slice(16)
57303 return out
57304 }
57305 }
57306 return null
57307 }
57308 Splitter.prototype.flush = function () {
57309 if (this.cache.length) {
57310 return this.cache
57311 }
57312 }
57313 function unpad (last) {
57314 var padded = last[15]
57315 var i = -1
57316 while (++i < padded) {
57317 if (last[(i + (16 - padded))] !== padded) {
57318 throw new Error('unable to decrypt data')
57319 }
57320 }
57321 if (padded === 16) {
57322 return
57323 }
57324 return last.slice(0, 16 - padded)
57325 }
57326
57327 var modelist = {
57328 ECB: require('./modes/ecb'),
57329 CBC: require('./modes/cbc'),
57330 CFB: require('./modes/cfb'),
57331 CFB8: require('./modes/cfb8'),
57332 CFB1: require('./modes/cfb1'),
57333 OFB: require('./modes/ofb'),
57334 CTR: require('./modes/ctr'),
57335 GCM: require('./modes/ctr')
57336 }
57337
57338 function createDecipheriv (suite, password, iv) {
57339 var config = modes[suite.toLowerCase()]
57340 if (!config) {
57341 throw new TypeError('invalid suite type')
57342 }
57343 if (typeof iv === 'string') {
57344 iv = new Buffer(iv)
57345 }
57346 if (typeof password === 'string') {
57347 password = new Buffer(password)
57348 }
57349 if (password.length !== config.key / 8) {
57350 throw new TypeError('invalid key length ' + password.length)
57351 }
57352 if (iv.length !== config.iv) {
57353 throw new TypeError('invalid iv length ' + iv.length)
57354 }
57355 if (config.type === 'stream') {
57356 return new StreamCipher(modelist[config.mode], password, iv, true)
57357 } else if (config.type === 'auth') {
57358 return new AuthCipher(modelist[config.mode], password, iv, true)
57359 }
57360 return new Decipher(modelist[config.mode], password, iv)
57361 }
57362
57363 function createDecipher (suite, password) {
57364 var config = modes[suite.toLowerCase()]
57365 if (!config) {
57366 throw new TypeError('invalid suite type')
57367 }
57368 var keys = ebtk(password, false, config.key, config.iv)
57369 return createDecipheriv(suite, keys.key, keys.iv)
57370 }
57371 exports.createDecipher = createDecipher
57372 exports.createDecipheriv = createDecipheriv
57373
57374 }).call(this,require("buffer").Buffer)
57375 },{"./aes":20,"./authCipher":21,"./modes":26,"./modes/cbc":27,"./modes/cfb":28,"./modes/cfb1":29,"./modes/cfb8":30,"./modes/ctr":31,"./modes/ecb":32,"./modes/ofb":33,"./streamCipher":34,"buffer":47,"cipher-base":48,"evp_bytestokey":84,"inherits":95}],24:[function(require,module,exports){
57376 (function (Buffer){
57377 var aes = require('./aes')
57378 var Transform = require('cipher-base')
57379 var inherits = require('inherits')
57380 var modes = require('./modes')
57381 var ebtk = require('evp_bytestokey')
57382 var StreamCipher = require('./streamCipher')
57383 var AuthCipher = require('./authCipher')
57384 inherits(Cipher, Transform)
57385 function Cipher (mode, key, iv) {
57386 if (!(this instanceof Cipher)) {
57387 return new Cipher(mode, key, iv)
57388 }
57389 Transform.call(this)
57390 this._cache = new Splitter()
57391 this._cipher = new aes.AES(key)
57392 this._prev = new Buffer(iv.length)
57393 iv.copy(this._prev)
57394 this._mode = mode
57395 this._autopadding = true
57396 }
57397 Cipher.prototype._update = function (data) {
57398 this._cache.add(data)
57399 var chunk
57400 var thing
57401 var out = []
57402 while ((chunk = this._cache.get())) {
57403 thing = this._mode.encrypt(this, chunk)
57404 out.push(thing)
57405 }
57406 return Buffer.concat(out)
57407 }
57408 Cipher.prototype._final = function () {
57409 var chunk = this._cache.flush()
57410 if (this._autopadding) {
57411 chunk = this._mode.encrypt(this, chunk)
57412 this._cipher.scrub()
57413 return chunk
57414 } else if (chunk.toString('hex') !== '10101010101010101010101010101010') {
57415 this._cipher.scrub()
57416 throw new Error('data not multiple of block length')
57417 }
57418 }
57419 Cipher.prototype.setAutoPadding = function (setTo) {
57420 this._autopadding = !!setTo
57421 return this
57422 }
57423
57424 function Splitter () {
57425 if (!(this instanceof Splitter)) {
57426 return new Splitter()
57427 }
57428 this.cache = new Buffer('')
57429 }
57430 Splitter.prototype.add = function (data) {
57431 this.cache = Buffer.concat([this.cache, data])
57432 }
57433
57434 Splitter.prototype.get = function () {
57435 if (this.cache.length > 15) {
57436 var out = this.cache.slice(0, 16)
57437 this.cache = this.cache.slice(16)
57438 return out
57439 }
57440 return null
57441 }
57442 Splitter.prototype.flush = function () {
57443 var len = 16 - this.cache.length
57444 var padBuff = new Buffer(len)
57445
57446 var i = -1
57447 while (++i < len) {
57448 padBuff.writeUInt8(len, i)
57449 }
57450 var out = Buffer.concat([this.cache, padBuff])
57451 return out
57452 }
57453 var modelist = {
57454 ECB: require('./modes/ecb'),
57455 CBC: require('./modes/cbc'),
57456 CFB: require('./modes/cfb'),
57457 CFB8: require('./modes/cfb8'),
57458 CFB1: require('./modes/cfb1'),
57459 OFB: require('./modes/ofb'),
57460 CTR: require('./modes/ctr'),
57461 GCM: require('./modes/ctr')
57462 }
57463
57464 function createCipheriv (suite, password, iv) {
57465 var config = modes[suite.toLowerCase()]
57466 if (!config) {
57467 throw new TypeError('invalid suite type')
57468 }
57469 if (typeof iv === 'string') {
57470 iv = new Buffer(iv)
57471 }
57472 if (typeof password === 'string') {
57473 password = new Buffer(password)
57474 }
57475 if (password.length !== config.key / 8) {
57476 throw new TypeError('invalid key length ' + password.length)
57477 }
57478 if (iv.length !== config.iv) {
57479 throw new TypeError('invalid iv length ' + iv.length)
57480 }
57481 if (config.type === 'stream') {
57482 return new StreamCipher(modelist[config.mode], password, iv)
57483 } else if (config.type === 'auth') {
57484 return new AuthCipher(modelist[config.mode], password, iv)
57485 }
57486 return new Cipher(modelist[config.mode], password, iv)
57487 }
57488 function createCipher (suite, password) {
57489 var config = modes[suite.toLowerCase()]
57490 if (!config) {
57491 throw new TypeError('invalid suite type')
57492 }
57493 var keys = ebtk(password, false, config.key, config.iv)
57494 return createCipheriv(suite, keys.key, keys.iv)
57495 }
57496
57497 exports.createCipheriv = createCipheriv
57498 exports.createCipher = createCipher
57499
57500 }).call(this,require("buffer").Buffer)
57501 },{"./aes":20,"./authCipher":21,"./modes":26,"./modes/cbc":27,"./modes/cfb":28,"./modes/cfb1":29,"./modes/cfb8":30,"./modes/ctr":31,"./modes/ecb":32,"./modes/ofb":33,"./streamCipher":34,"buffer":47,"cipher-base":48,"evp_bytestokey":84,"inherits":95}],25:[function(require,module,exports){
57502 (function (Buffer){
57503 var zeros = new Buffer(16)
57504 zeros.fill(0)
57505 module.exports = GHASH
57506 function GHASH (key) {
57507 this.h = key
57508 this.state = new Buffer(16)
57509 this.state.fill(0)
57510 this.cache = new Buffer('')
57511 }
57512 // from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html
57513 // by Juho Vähä-Herttua
57514 GHASH.prototype.ghash = function (block) {
57515 var i = -1
57516 while (++i < block.length) {
57517 this.state[i] ^= block[i]
57518 }
57519 this._multiply()
57520 }
57521
57522 GHASH.prototype._multiply = function () {
57523 var Vi = toArray(this.h)
57524 var Zi = [0, 0, 0, 0]
57525 var j, xi, lsb_Vi
57526 var i = -1
57527 while (++i < 128) {
57528 xi = (this.state[~~(i / 8)] & (1 << (7 - i % 8))) !== 0
57529 if (xi) {
57530 // Z_i+1 = Z_i ^ V_i
57531 Zi = xor(Zi, Vi)
57532 }
57533
57534 // Store the value of LSB(V_i)
57535 lsb_Vi = (Vi[3] & 1) !== 0
57536
57537 // V_i+1 = V_i >> 1
57538 for (j = 3; j > 0; j--) {
57539 Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)
57540 }
57541 Vi[0] = Vi[0] >>> 1
57542
57543 // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R
57544 if (lsb_Vi) {
57545 Vi[0] = Vi[0] ^ (0xe1 << 24)
57546 }
57547 }
57548 this.state = fromArray(Zi)
57549 }
57550 GHASH.prototype.update = function (buf) {
57551 this.cache = Buffer.concat([this.cache, buf])
57552 var chunk
57553 while (this.cache.length >= 16) {
57554 chunk = this.cache.slice(0, 16)
57555 this.cache = this.cache.slice(16)
57556 this.ghash(chunk)
57557 }
57558 }
57559 GHASH.prototype.final = function (abl, bl) {
57560 if (this.cache.length) {
57561 this.ghash(Buffer.concat([this.cache, zeros], 16))
57562 }
57563 this.ghash(fromArray([
57564 0, abl,
57565 0, bl
57566 ]))
57567 return this.state
57568 }
57569
57570 function toArray (buf) {
57571 return [
57572 buf.readUInt32BE(0),
57573 buf.readUInt32BE(4),
57574 buf.readUInt32BE(8),
57575 buf.readUInt32BE(12)
57576 ]
57577 }
57578 function fromArray (out) {
57579 out = out.map(fixup_uint32)
57580 var buf = new Buffer(16)
57581 buf.writeUInt32BE(out[0], 0)
57582 buf.writeUInt32BE(out[1], 4)
57583 buf.writeUInt32BE(out[2], 8)
57584 buf.writeUInt32BE(out[3], 12)
57585 return buf
57586 }
57587 var uint_max = Math.pow(2, 32)
57588 function fixup_uint32 (x) {
57589 var ret, x_pos
57590 ret = x > uint_max || x < 0 ? (x_pos = Math.abs(x) % uint_max, x < 0 ? uint_max - x_pos : x_pos) : x
57591 return ret
57592 }
57593 function xor (a, b) {
57594 return [
57595 a[0] ^ b[0],
57596 a[1] ^ b[1],
57597 a[2] ^ b[2],
57598 a[3] ^ b[3]
57599 ]
57600 }
57601
57602 }).call(this,require("buffer").Buffer)
57603 },{"buffer":47}],26:[function(require,module,exports){
57604 exports['aes-128-ecb'] = {
57605 cipher: 'AES',
57606 key: 128,
57607 iv: 0,
57608 mode: 'ECB',
57609 type: 'block'
57610 }
57611 exports['aes-192-ecb'] = {
57612 cipher: 'AES',
57613 key: 192,
57614 iv: 0,
57615 mode: 'ECB',
57616 type: 'block'
57617 }
57618 exports['aes-256-ecb'] = {
57619 cipher: 'AES',
57620 key: 256,
57621 iv: 0,
57622 mode: 'ECB',
57623 type: 'block'
57624 }
57625 exports['aes-128-cbc'] = {
57626 cipher: 'AES',
57627 key: 128,
57628 iv: 16,
57629 mode: 'CBC',
57630 type: 'block'
57631 }
57632 exports['aes-192-cbc'] = {
57633 cipher: 'AES',
57634 key: 192,
57635 iv: 16,
57636 mode: 'CBC',
57637 type: 'block'
57638 }
57639 exports['aes-256-cbc'] = {
57640 cipher: 'AES',
57641 key: 256,
57642 iv: 16,
57643 mode: 'CBC',
57644 type: 'block'
57645 }
57646 exports['aes128'] = exports['aes-128-cbc']
57647 exports['aes192'] = exports['aes-192-cbc']
57648 exports['aes256'] = exports['aes-256-cbc']
57649 exports['aes-128-cfb'] = {
57650 cipher: 'AES',
57651 key: 128,
57652 iv: 16,
57653 mode: 'CFB',
57654 type: 'stream'
57655 }
57656 exports['aes-192-cfb'] = {
57657 cipher: 'AES',
57658 key: 192,
57659 iv: 16,
57660 mode: 'CFB',
57661 type: 'stream'
57662 }
57663 exports['aes-256-cfb'] = {
57664 cipher: 'AES',
57665 key: 256,
57666 iv: 16,
57667 mode: 'CFB',
57668 type: 'stream'
57669 }
57670 exports['aes-128-cfb8'] = {
57671 cipher: 'AES',
57672 key: 128,
57673 iv: 16,
57674 mode: 'CFB8',
57675 type: 'stream'
57676 }
57677 exports['aes-192-cfb8'] = {
57678 cipher: 'AES',
57679 key: 192,
57680 iv: 16,
57681 mode: 'CFB8',
57682 type: 'stream'
57683 }
57684 exports['aes-256-cfb8'] = {
57685 cipher: 'AES',
57686 key: 256,
57687 iv: 16,
57688 mode: 'CFB8',
57689 type: 'stream'
57690 }
57691 exports['aes-128-cfb1'] = {
57692 cipher: 'AES',
57693 key: 128,
57694 iv: 16,
57695 mode: 'CFB1',
57696 type: 'stream'
57697 }
57698 exports['aes-192-cfb1'] = {
57699 cipher: 'AES',
57700 key: 192,
57701 iv: 16,
57702 mode: 'CFB1',
57703 type: 'stream'
57704 }
57705 exports['aes-256-cfb1'] = {
57706 cipher: 'AES',
57707 key: 256,
57708 iv: 16,
57709 mode: 'CFB1',
57710 type: 'stream'
57711 }
57712 exports['aes-128-ofb'] = {
57713 cipher: 'AES',
57714 key: 128,
57715 iv: 16,
57716 mode: 'OFB',
57717 type: 'stream'
57718 }
57719 exports['aes-192-ofb'] = {
57720 cipher: 'AES',
57721 key: 192,
57722 iv: 16,
57723 mode: 'OFB',
57724 type: 'stream'
57725 }
57726 exports['aes-256-ofb'] = {
57727 cipher: 'AES',
57728 key: 256,
57729 iv: 16,
57730 mode: 'OFB',
57731 type: 'stream'
57732 }
57733 exports['aes-128-ctr'] = {
57734 cipher: 'AES',
57735 key: 128,
57736 iv: 16,
57737 mode: 'CTR',
57738 type: 'stream'
57739 }
57740 exports['aes-192-ctr'] = {
57741 cipher: 'AES',
57742 key: 192,
57743 iv: 16,
57744 mode: 'CTR',
57745 type: 'stream'
57746 }
57747 exports['aes-256-ctr'] = {
57748 cipher: 'AES',
57749 key: 256,
57750 iv: 16,
57751 mode: 'CTR',
57752 type: 'stream'
57753 }
57754 exports['aes-128-gcm'] = {
57755 cipher: 'AES',
57756 key: 128,
57757 iv: 12,
57758 mode: 'GCM',
57759 type: 'auth'
57760 }
57761 exports['aes-192-gcm'] = {
57762 cipher: 'AES',
57763 key: 192,
57764 iv: 12,
57765 mode: 'GCM',
57766 type: 'auth'
57767 }
57768 exports['aes-256-gcm'] = {
57769 cipher: 'AES',
57770 key: 256,
57771 iv: 12,
57772 mode: 'GCM',
57773 type: 'auth'
57774 }
57775
57776 },{}],27:[function(require,module,exports){
57777 var xor = require('buffer-xor')
57778
57779 exports.encrypt = function (self, block) {
57780 var data = xor(block, self._prev)
57781
57782 self._prev = self._cipher.encryptBlock(data)
57783 return self._prev
57784 }
57785
57786 exports.decrypt = function (self, block) {
57787 var pad = self._prev
57788
57789 self._prev = block
57790 var out = self._cipher.decryptBlock(block)
57791
57792 return xor(out, pad)
57793 }
57794
57795 },{"buffer-xor":46}],28:[function(require,module,exports){
57796 (function (Buffer){
57797 var xor = require('buffer-xor')
57798
57799 exports.encrypt = function (self, data, decrypt) {
57800 var out = new Buffer('')
57801 var len
57802
57803 while (data.length) {
57804 if (self._cache.length === 0) {
57805 self._cache = self._cipher.encryptBlock(self._prev)
57806 self._prev = new Buffer('')
57807 }
57808
57809 if (self._cache.length <= data.length) {
57810 len = self._cache.length
57811 out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])
57812 data = data.slice(len)
57813 } else {
57814 out = Buffer.concat([out, encryptStart(self, data, decrypt)])
57815 break
57816 }
57817 }
57818
57819 return out
57820 }
57821 function encryptStart (self, data, decrypt) {
57822 var len = data.length
57823 var out = xor(data, self._cache)
57824 self._cache = self._cache.slice(len)
57825 self._prev = Buffer.concat([self._prev, decrypt ? data : out])
57826 return out
57827 }
57828
57829 }).call(this,require("buffer").Buffer)
57830 },{"buffer":47,"buffer-xor":46}],29:[function(require,module,exports){
57831 (function (Buffer){
57832 function encryptByte (self, byteParam, decrypt) {
57833 var pad
57834 var i = -1
57835 var len = 8
57836 var out = 0
57837 var bit, value
57838 while (++i < len) {
57839 pad = self._cipher.encryptBlock(self._prev)
57840 bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0
57841 value = pad[0] ^ bit
57842 out += ((value & 0x80) >> (i % 8))
57843 self._prev = shiftIn(self._prev, decrypt ? bit : value)
57844 }
57845 return out
57846 }
57847 exports.encrypt = function (self, chunk, decrypt) {
57848 var len = chunk.length
57849 var out = new Buffer(len)
57850 var i = -1
57851 while (++i < len) {
57852 out[i] = encryptByte(self, chunk[i], decrypt)
57853 }
57854 return out
57855 }
57856 function shiftIn (buffer, value) {
57857 var len = buffer.length
57858 var i = -1
57859 var out = new Buffer(buffer.length)
57860 buffer = Buffer.concat([buffer, new Buffer([value])])
57861 while (++i < len) {
57862 out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)
57863 }
57864 return out
57865 }
57866
57867 }).call(this,require("buffer").Buffer)
57868 },{"buffer":47}],30:[function(require,module,exports){
57869 (function (Buffer){
57870 function encryptByte (self, byteParam, decrypt) {
57871 var pad = self._cipher.encryptBlock(self._prev)
57872 var out = pad[0] ^ byteParam
57873 self._prev = Buffer.concat([self._prev.slice(1), new Buffer([decrypt ? byteParam : out])])
57874 return out
57875 }
57876 exports.encrypt = function (self, chunk, decrypt) {
57877 var len = chunk.length
57878 var out = new Buffer(len)
57879 var i = -1
57880 while (++i < len) {
57881 out[i] = encryptByte(self, chunk[i], decrypt)
57882 }
57883 return out
57884 }
57885
57886 }).call(this,require("buffer").Buffer)
57887 },{"buffer":47}],31:[function(require,module,exports){
57888 (function (Buffer){
57889 var xor = require('buffer-xor')
57890
57891 function incr32 (iv) {
57892 var len = iv.length
57893 var item
57894 while (len--) {
57895 item = iv.readUInt8(len)
57896 if (item === 255) {
57897 iv.writeUInt8(0, len)
57898 } else {
57899 item++
57900 iv.writeUInt8(item, len)
57901 break
57902 }
57903 }
57904 }
57905
57906 function getBlock (self) {
57907 var out = self._cipher.encryptBlock(self._prev)
57908 incr32(self._prev)
57909 return out
57910 }
57911
57912 exports.encrypt = function (self, chunk) {
57913 while (self._cache.length < chunk.length) {
57914 self._cache = Buffer.concat([self._cache, getBlock(self)])
57915 }
57916 var pad = self._cache.slice(0, chunk.length)
57917 self._cache = self._cache.slice(chunk.length)
57918 return xor(chunk, pad)
57919 }
57920
57921 }).call(this,require("buffer").Buffer)
57922 },{"buffer":47,"buffer-xor":46}],32:[function(require,module,exports){
57923 exports.encrypt = function (self, block) {
57924 return self._cipher.encryptBlock(block)
57925 }
57926 exports.decrypt = function (self, block) {
57927 return self._cipher.decryptBlock(block)
57928 }
57929
57930 },{}],33:[function(require,module,exports){
57931 (function (Buffer){
57932 var xor = require('buffer-xor')
57933
57934 function getBlock (self) {
57935 self._prev = self._cipher.encryptBlock(self._prev)
57936 return self._prev
57937 }
57938
57939 exports.encrypt = function (self, chunk) {
57940 while (self._cache.length < chunk.length) {
57941 self._cache = Buffer.concat([self._cache, getBlock(self)])
57942 }
57943
57944 var pad = self._cache.slice(0, chunk.length)
57945 self._cache = self._cache.slice(chunk.length)
57946 return xor(chunk, pad)
57947 }
57948
57949 }).call(this,require("buffer").Buffer)
57950 },{"buffer":47,"buffer-xor":46}],34:[function(require,module,exports){
57951 (function (Buffer){
57952 var aes = require('./aes')
57953 var Transform = require('cipher-base')
57954 var inherits = require('inherits')
57955
57956 inherits(StreamCipher, Transform)
57957 module.exports = StreamCipher
57958 function StreamCipher (mode, key, iv, decrypt) {
57959 if (!(this instanceof StreamCipher)) {
57960 return new StreamCipher(mode, key, iv)
57961 }
57962 Transform.call(this)
57963 this._cipher = new aes.AES(key)
57964 this._prev = new Buffer(iv.length)
57965 this._cache = new Buffer('')
57966 this._secCache = new Buffer('')
57967 this._decrypt = decrypt
57968 iv.copy(this._prev)
57969 this._mode = mode
57970 }
57971 StreamCipher.prototype._update = function (chunk) {
57972 return this._mode.encrypt(this, chunk, this._decrypt)
57973 }
57974 StreamCipher.prototype._final = function () {
57975 this._cipher.scrub()
57976 }
57977
57978 }).call(this,require("buffer").Buffer)
57979 },{"./aes":20,"buffer":47,"cipher-base":48,"inherits":95}],35:[function(require,module,exports){
57980 var ebtk = require('evp_bytestokey')
57981 var aes = require('browserify-aes/browser')
57982 var DES = require('browserify-des')
57983 var desModes = require('browserify-des/modes')
57984 var aesModes = require('browserify-aes/modes')
57985 function createCipher (suite, password) {
57986 var keyLen, ivLen
57987 suite = suite.toLowerCase()
57988 if (aesModes[suite]) {
57989 keyLen = aesModes[suite].key
57990 ivLen = aesModes[suite].iv
57991 } else if (desModes[suite]) {
57992 keyLen = desModes[suite].key * 8
57993 ivLen = desModes[suite].iv
57994 } else {
57995 throw new TypeError('invalid suite type')
57996 }
57997 var keys = ebtk(password, false, keyLen, ivLen)
57998 return createCipheriv(suite, keys.key, keys.iv)
57999 }
58000 function createDecipher (suite, password) {
58001 var keyLen, ivLen
58002 suite = suite.toLowerCase()
58003 if (aesModes[suite]) {
58004 keyLen = aesModes[suite].key
58005 ivLen = aesModes[suite].iv
58006 } else if (desModes[suite]) {
58007 keyLen = desModes[suite].key * 8
58008 ivLen = desModes[suite].iv
58009 } else {
58010 throw new TypeError('invalid suite type')
58011 }
58012 var keys = ebtk(password, false, keyLen, ivLen)
58013 return createDecipheriv(suite, keys.key, keys.iv)
58014 }
58015
58016 function createCipheriv (suite, key, iv) {
58017 suite = suite.toLowerCase()
58018 if (aesModes[suite]) {
58019 return aes.createCipheriv(suite, key, iv)
58020 } else if (desModes[suite]) {
58021 return new DES({
58022 key: key,
58023 iv: iv,
58024 mode: suite
58025 })
58026 } else {
58027 throw new TypeError('invalid suite type')
58028 }
58029 }
58030 function createDecipheriv (suite, key, iv) {
58031 suite = suite.toLowerCase()
58032 if (aesModes[suite]) {
58033 return aes.createDecipheriv(suite, key, iv)
58034 } else if (desModes[suite]) {
58035 return new DES({
58036 key: key,
58037 iv: iv,
58038 mode: suite,
58039 decrypt: true
58040 })
58041 } else {
58042 throw new TypeError('invalid suite type')
58043 }
58044 }
58045 exports.createCipher = exports.Cipher = createCipher
58046 exports.createCipheriv = exports.Cipheriv = createCipheriv
58047 exports.createDecipher = exports.Decipher = createDecipher
58048 exports.createDecipheriv = exports.Decipheriv = createDecipheriv
58049 function getCiphers () {
58050 return Object.keys(desModes).concat(aes.getCiphers())
58051 }
58052 exports.listCiphers = exports.getCiphers = getCiphers
58053
58054 },{"browserify-aes/browser":22,"browserify-aes/modes":26,"browserify-des":36,"browserify-des/modes":37,"evp_bytestokey":84}],36:[function(require,module,exports){
58055 (function (Buffer){
58056 var CipherBase = require('cipher-base')
58057 var des = require('des.js')
58058 var inherits = require('inherits')
58059
58060 var modes = {
58061 'des-ede3-cbc': des.CBC.instantiate(des.EDE),
58062 'des-ede3': des.EDE,
58063 'des-ede-cbc': des.CBC.instantiate(des.EDE),
58064 'des-ede': des.EDE,
58065 'des-cbc': des.CBC.instantiate(des.DES),
58066 'des-ecb': des.DES
58067 }
58068 modes.des = modes['des-cbc']
58069 modes.des3 = modes['des-ede3-cbc']
58070 module.exports = DES
58071 inherits(DES, CipherBase)
58072 function DES (opts) {
58073 CipherBase.call(this)
58074 var modeName = opts.mode.toLowerCase()
58075 var mode = modes[modeName]
58076 var type
58077 if (opts.decrypt) {
58078 type = 'decrypt'
58079 } else {
58080 type = 'encrypt'
58081 }
58082 var key = opts.key
58083 if (modeName === 'des-ede' || modeName === 'des-ede-cbc') {
58084 key = Buffer.concat([key, key.slice(0, 8)])
58085 }
58086 var iv = opts.iv
58087 this._des = mode.create({
58088 key: key,
58089 iv: iv,
58090 type: type
58091 })
58092 }
58093 DES.prototype._update = function (data) {
58094 return new Buffer(this._des.update(data))
58095 }
58096 DES.prototype._final = function () {
58097 return new Buffer(this._des.final())
58098 }
58099
58100 }).call(this,require("buffer").Buffer)
58101 },{"buffer":47,"cipher-base":48,"des.js":57,"inherits":95}],37:[function(require,module,exports){
58102 exports['des-ecb'] = {
58103 key: 8,
58104 iv: 0
58105 }
58106 exports['des-cbc'] = exports.des = {
58107 key: 8,
58108 iv: 8
58109 }
58110 exports['des-ede3-cbc'] = exports.des3 = {
58111 key: 24,
58112 iv: 8
58113 }
58114 exports['des-ede3'] = {
58115 key: 24,
58116 iv: 0
58117 }
58118 exports['des-ede-cbc'] = {
58119 key: 16,
58120 iv: 8
58121 }
58122 exports['des-ede'] = {
58123 key: 16,
58124 iv: 0
58125 }
58126
58127 },{}],38:[function(require,module,exports){
58128 (function (Buffer){
58129 var bn = require('bn.js');
58130 var randomBytes = require('randombytes');
58131 module.exports = crt;
58132 function blind(priv) {
58133 var r = getr(priv);
58134 var blinder = r.toRed(bn.mont(priv.modulus))
58135 .redPow(new bn(priv.publicExponent)).fromRed();
58136 return {
58137 blinder: blinder,
58138 unblinder:r.invm(priv.modulus)
58139 };
58140 }
58141 function crt(msg, priv) {
58142 var blinds = blind(priv);
58143 var len = priv.modulus.byteLength();
58144 var mod = bn.mont(priv.modulus);
58145 var blinded = new bn(msg).mul(blinds.blinder).umod(priv.modulus);
58146 var c1 = blinded.toRed(bn.mont(priv.prime1));
58147 var c2 = blinded.toRed(bn.mont(priv.prime2));
58148 var qinv = priv.coefficient;
58149 var p = priv.prime1;
58150 var q = priv.prime2;
58151 var m1 = c1.redPow(priv.exponent1);
58152 var m2 = c2.redPow(priv.exponent2);
58153 m1 = m1.fromRed();
58154 m2 = m2.fromRed();
58155 var h = m1.isub(m2).imul(qinv).umod(p);
58156 h.imul(q);
58157 m2.iadd(h);
58158 return new Buffer(m2.imul(blinds.unblinder).umod(priv.modulus).toArray(false, len));
58159 }
58160 crt.getr = getr;
58161 function getr(priv) {
58162 var len = priv.modulus.byteLength();
58163 var r = new bn(randomBytes(len));
58164 while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2)) {
58165 r = new bn(randomBytes(len));
58166 }
58167 return r;
58168 }
58169
58170 }).call(this,require("buffer").Buffer)
58171 },{"bn.js":17,"buffer":47,"randombytes":119}],39:[function(require,module,exports){
58172 module.exports = require('./browser/algorithms.json')
58173
58174 },{"./browser/algorithms.json":40}],40:[function(require,module,exports){
58175 module.exports={
58176 "sha224WithRSAEncryption": {
58177 "sign": "rsa",
58178 "hash": "sha224",
58179 "id": "302d300d06096086480165030402040500041c"
58180 },
58181 "RSA-SHA224": {
58182 "sign": "ecdsa/rsa",
58183 "hash": "sha224",
58184 "id": "302d300d06096086480165030402040500041c"
58185 },
58186 "sha256WithRSAEncryption": {
58187 "sign": "rsa",
58188 "hash": "sha256",
58189 "id": "3031300d060960864801650304020105000420"
58190 },
58191 "RSA-SHA256": {
58192 "sign": "ecdsa/rsa",
58193 "hash": "sha256",
58194 "id": "3031300d060960864801650304020105000420"
58195 },
58196 "sha384WithRSAEncryption": {
58197 "sign": "rsa",
58198 "hash": "sha384",
58199 "id": "3041300d060960864801650304020205000430"
58200 },
58201 "RSA-SHA384": {
58202 "sign": "ecdsa/rsa",
58203 "hash": "sha384",
58204 "id": "3041300d060960864801650304020205000430"
58205 },
58206 "sha512WithRSAEncryption": {
58207 "sign": "rsa",
58208 "hash": "sha512",
58209 "id": "3051300d060960864801650304020305000440"
58210 },
58211 "RSA-SHA512": {
58212 "sign": "ecdsa/rsa",
58213 "hash": "sha512",
58214 "id": "3051300d060960864801650304020305000440"
58215 },
58216 "RSA-SHA1": {
58217 "sign": "rsa",
58218 "hash": "sha1",
58219 "id": "3021300906052b0e03021a05000414"
58220 },
58221 "ecdsa-with-SHA1": {
58222 "sign": "ecdsa",
58223 "hash": "sha1",
58224 "id": ""
58225 },
58226 "sha256": {
58227 "sign": "ecdsa",
58228 "hash": "sha256",
58229 "id": ""
58230 },
58231 "sha224": {
58232 "sign": "ecdsa",
58233 "hash": "sha224",
58234 "id": ""
58235 },
58236 "sha384": {
58237 "sign": "ecdsa",
58238 "hash": "sha384",
58239 "id": ""
58240 },
58241 "sha512": {
58242 "sign": "ecdsa",
58243 "hash": "sha512",
58244 "id": ""
58245 },
58246 "DSA-SHA": {
58247 "sign": "dsa",
58248 "hash": "sha1",
58249 "id": ""
58250 },
58251 "DSA-SHA1": {
58252 "sign": "dsa",
58253 "hash": "sha1",
58254 "id": ""
58255 },
58256 "DSA": {
58257 "sign": "dsa",
58258 "hash": "sha1",
58259 "id": ""
58260 },
58261 "DSA-WITH-SHA224": {
58262 "sign": "dsa",
58263 "hash": "sha224",
58264 "id": ""
58265 },
58266 "DSA-SHA224": {
58267 "sign": "dsa",
58268 "hash": "sha224",
58269 "id": ""
58270 },
58271 "DSA-WITH-SHA256": {
58272 "sign": "dsa",
58273 "hash": "sha256",
58274 "id": ""
58275 },
58276 "DSA-SHA256": {
58277 "sign": "dsa",
58278 "hash": "sha256",
58279 "id": ""
58280 },
58281 "DSA-WITH-SHA384": {
58282 "sign": "dsa",
58283 "hash": "sha384",
58284 "id": ""
58285 },
58286 "DSA-SHA384": {
58287 "sign": "dsa",
58288 "hash": "sha384",
58289 "id": ""
58290 },
58291 "DSA-WITH-SHA512": {
58292 "sign": "dsa",
58293 "hash": "sha512",
58294 "id": ""
58295 },
58296 "DSA-SHA512": {
58297 "sign": "dsa",
58298 "hash": "sha512",
58299 "id": ""
58300 },
58301 "DSA-RIPEMD160": {
58302 "sign": "dsa",
58303 "hash": "rmd160",
58304 "id": ""
58305 },
58306 "ripemd160WithRSA": {
58307 "sign": "rsa",
58308 "hash": "rmd160",
58309 "id": "3021300906052b2403020105000414"
58310 },
58311 "RSA-RIPEMD160": {
58312 "sign": "rsa",
58313 "hash": "rmd160",
58314 "id": "3021300906052b2403020105000414"
58315 },
58316 "md5WithRSAEncryption": {
58317 "sign": "rsa",
58318 "hash": "md5",
58319 "id": "3020300c06082a864886f70d020505000410"
58320 },
58321 "RSA-MD5": {
58322 "sign": "rsa",
58323 "hash": "md5",
58324 "id": "3020300c06082a864886f70d020505000410"
58325 }
58326 }
58327
58328 },{}],41:[function(require,module,exports){
58329 module.exports={
58330 "1.3.132.0.10": "secp256k1",
58331 "1.3.132.0.33": "p224",
58332 "1.2.840.10045.3.1.1": "p192",
58333 "1.2.840.10045.3.1.7": "p256",
58334 "1.3.132.0.34": "p384",
58335 "1.3.132.0.35": "p521"
58336 }
58337
58338 },{}],42:[function(require,module,exports){
58339 (function (Buffer){
58340 var createHash = require('create-hash')
58341 var stream = require('stream')
58342 var inherits = require('inherits')
58343 var sign = require('./sign')
58344 var verify = require('./verify')
58345
58346 var algorithms = require('./algorithms.json')
58347 Object.keys(algorithms).forEach(function (key) {
58348 algorithms[key].id = new Buffer(algorithms[key].id, 'hex')
58349 algorithms[key.toLowerCase()] = algorithms[key]
58350 })
58351
58352 function Sign (algorithm) {
58353 stream.Writable.call(this)
58354
58355 var data = algorithms[algorithm]
58356 if (!data) throw new Error('Unknown message digest')
58357
58358 this._hashType = data.hash
58359 this._hash = createHash(data.hash)
58360 this._tag = data.id
58361 this._signType = data.sign
58362 }
58363 inherits(Sign, stream.Writable)
58364
58365 Sign.prototype._write = function _write (data, _, done) {
58366 this._hash.update(data)
58367 done()
58368 }
58369
58370 Sign.prototype.update = function update (data, enc) {
58371 if (typeof data === 'string') data = new Buffer(data, enc)
58372
58373 this._hash.update(data)
58374 return this
58375 }
58376
58377 Sign.prototype.sign = function signMethod (key, enc) {
58378 this.end()
58379 var hash = this._hash.digest()
58380 var sig = sign(hash, key, this._hashType, this._signType, this._tag)
58381
58382 return enc ? sig.toString(enc) : sig
58383 }
58384
58385 function Verify (algorithm) {
58386 stream.Writable.call(this)
58387
58388 var data = algorithms[algorithm]
58389 if (!data) throw new Error('Unknown message digest')
58390
58391 this._hash = createHash(data.hash)
58392 this._tag = data.id
58393 this._signType = data.sign
58394 }
58395 inherits(Verify, stream.Writable)
58396
58397 Verify.prototype._write = function _write (data, _, done) {
58398 this._hash.update(data)
58399 done()
58400 }
58401
58402 Verify.prototype.update = function update (data, enc) {
58403 if (typeof data === 'string') data = new Buffer(data, enc)
58404
58405 this._hash.update(data)
58406 return this
58407 }
58408
58409 Verify.prototype.verify = function verifyMethod (key, sig, enc) {
58410 if (typeof sig === 'string') sig = new Buffer(sig, enc)
58411
58412 this.end()
58413 var hash = this._hash.digest()
58414 return verify(sig, hash, key, this._signType, this._tag)
58415 }
58416
58417 function createSign (algorithm) {
58418 return new Sign(algorithm)
58419 }
58420
58421 function createVerify (algorithm) {
58422 return new Verify(algorithm)
58423 }
58424
58425 module.exports = {
58426 Sign: createSign,
58427 Verify: createVerify,
58428 createSign: createSign,
58429 createVerify: createVerify
58430 }
58431
58432 }).call(this,require("buffer").Buffer)
58433 },{"./algorithms.json":40,"./sign":43,"./verify":44,"buffer":47,"create-hash":51,"inherits":95,"stream":143}],43:[function(require,module,exports){
58434 (function (Buffer){
58435 // much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js
58436 var createHmac = require('create-hmac')
58437 var crt = require('browserify-rsa')
58438 var EC = require('elliptic').ec
58439 var BN = require('bn.js')
58440 var parseKeys = require('parse-asn1')
58441 var curves = require('./curves.json')
58442
58443 function sign (hash, key, hashType, signType, tag) {
58444 var priv = parseKeys(key)
58445 if (priv.curve) {
58446 // rsa keys can be interpreted as ecdsa ones in openssl
58447 if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')
58448 return ecSign(hash, priv)
58449 } else if (priv.type === 'dsa') {
58450 if (signType !== 'dsa') throw new Error('wrong private key type')
58451 return dsaSign(hash, priv, hashType)
58452 } else {
58453 if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')
58454 }
58455 hash = Buffer.concat([tag, hash])
58456 var len = priv.modulus.byteLength()
58457 var pad = [ 0, 1 ]
58458 while (hash.length + pad.length + 1 < len) pad.push(0xff)
58459 pad.push(0x00)
58460 var i = -1
58461 while (++i < hash.length) pad.push(hash[i])
58462
58463 var out = crt(pad, priv)
58464 return out
58465 }
58466
58467 function ecSign (hash, priv) {
58468 var curveId = curves[priv.curve.join('.')]
58469 if (!curveId) throw new Error('unknown curve ' + priv.curve.join('.'))
58470
58471 var curve = new EC(curveId)
58472 var key = curve.keyFromPrivate(priv.privateKey)
58473 var out = key.sign(hash)
58474
58475 return new Buffer(out.toDER())
58476 }
58477
58478 function dsaSign (hash, priv, algo) {
58479 var x = priv.params.priv_key
58480 var p = priv.params.p
58481 var q = priv.params.q
58482 var g = priv.params.g
58483 var r = new BN(0)
58484 var k
58485 var H = bits2int(hash, q).mod(q)
58486 var s = false
58487 var kv = getKey(x, q, hash, algo)
58488 while (s === false) {
58489 k = makeKey(q, kv, algo)
58490 r = makeR(g, k, p, q)
58491 s = k.invm(q).imul(H.add(x.mul(r))).mod(q)
58492 if (s.cmpn(0) === 0) {
58493 s = false
58494 r = new BN(0)
58495 }
58496 }
58497 return toDER(r, s)
58498 }
58499
58500 function toDER (r, s) {
58501 r = r.toArray()
58502 s = s.toArray()
58503
58504 // Pad values
58505 if (r[0] & 0x80) r = [ 0 ].concat(r)
58506 if (s[0] & 0x80) s = [ 0 ].concat(s)
58507
58508 var total = r.length + s.length + 4
58509 var res = [ 0x30, total, 0x02, r.length ]
58510 res = res.concat(r, [ 0x02, s.length ], s)
58511 return new Buffer(res)
58512 }
58513
58514 function getKey (x, q, hash, algo) {
58515 x = new Buffer(x.toArray())
58516 if (x.length < q.byteLength()) {
58517 var zeros = new Buffer(q.byteLength() - x.length)
58518 zeros.fill(0)
58519 x = Buffer.concat([ zeros, x ])
58520 }
58521 var hlen = hash.length
58522 var hbits = bits2octets(hash, q)
58523 var v = new Buffer(hlen)
58524 v.fill(1)
58525 var k = new Buffer(hlen)
58526 k.fill(0)
58527 k = createHmac(algo, k).update(v).update(new Buffer([ 0 ])).update(x).update(hbits).digest()
58528 v = createHmac(algo, k).update(v).digest()
58529 k = createHmac(algo, k).update(v).update(new Buffer([ 1 ])).update(x).update(hbits).digest()
58530 v = createHmac(algo, k).update(v).digest()
58531 return { k: k, v: v }
58532 }
58533
58534 function bits2int (obits, q) {
58535 var bits = new BN(obits)
58536 var shift = (obits.length << 3) - q.bitLength()
58537 if (shift > 0) bits.ishrn(shift)
58538 return bits
58539 }
58540
58541 function bits2octets (bits, q) {
58542 bits = bits2int(bits, q)
58543 bits = bits.mod(q)
58544 var out = new Buffer(bits.toArray())
58545 if (out.length < q.byteLength()) {
58546 var zeros = new Buffer(q.byteLength() - out.length)
58547 zeros.fill(0)
58548 out = Buffer.concat([ zeros, out ])
58549 }
58550 return out
58551 }
58552
58553 function makeKey (q, kv, algo) {
58554 var t
58555 var k
58556
58557 do {
58558 t = new Buffer(0)
58559
58560 while (t.length * 8 < q.bitLength()) {
58561 kv.v = createHmac(algo, kv.k).update(kv.v).digest()
58562 t = Buffer.concat([ t, kv.v ])
58563 }
58564
58565 k = bits2int(t, q)
58566 kv.k = createHmac(algo, kv.k).update(kv.v).update(new Buffer([ 0 ])).digest()
58567 kv.v = createHmac(algo, kv.k).update(kv.v).digest()
58568 } while (k.cmp(q) !== -1)
58569
58570 return k
58571 }
58572
58573 function makeR (g, k, p, q) {
58574 return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q)
58575 }
58576
58577 module.exports = sign
58578 module.exports.getKey = getKey
58579 module.exports.makeKey = makeKey
58580
58581 }).call(this,require("buffer").Buffer)
58582 },{"./curves.json":41,"bn.js":17,"browserify-rsa":38,"buffer":47,"create-hmac":54,"elliptic":67,"parse-asn1":105}],44:[function(require,module,exports){
58583 (function (Buffer){
58584 // much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js
58585 var BN = require('bn.js')
58586 var EC = require('elliptic').ec
58587 var parseKeys = require('parse-asn1')
58588 var curves = require('./curves.json')
58589
58590 function verify (sig, hash, key, signType, tag) {
58591 var pub = parseKeys(key)
58592 if (pub.type === 'ec') {
58593 // rsa keys can be interpreted as ecdsa ones in openssl
58594 if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')
58595 return ecVerify(sig, hash, pub)
58596 } else if (pub.type === 'dsa') {
58597 if (signType !== 'dsa') throw new Error('wrong public key type')
58598 return dsaVerify(sig, hash, pub)
58599 } else {
58600 if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')
58601 }
58602 hash = Buffer.concat([tag, hash])
58603 var len = pub.modulus.byteLength()
58604 var pad = [ 1 ]
58605 var padNum = 0
58606 while (hash.length + pad.length + 2 < len) {
58607 pad.push(0xff)
58608 padNum++
58609 }
58610 pad.push(0x00)
58611 var i = -1
58612 while (++i < hash.length) {
58613 pad.push(hash[i])
58614 }
58615 pad = new Buffer(pad)
58616 var red = BN.mont(pub.modulus)
58617 sig = new BN(sig).toRed(red)
58618
58619 sig = sig.redPow(new BN(pub.publicExponent))
58620 sig = new Buffer(sig.fromRed().toArray())
58621 var out = padNum < 8 ? 1 : 0
58622 len = Math.min(sig.length, pad.length)
58623 if (sig.length !== pad.length) out = 1
58624
58625 i = -1
58626 while (++i < len) out |= sig[i] ^ pad[i]
58627 return out === 0
58628 }
58629
58630 function ecVerify (sig, hash, pub) {
58631 var curveId = curves[pub.data.algorithm.curve.join('.')]
58632 if (!curveId) throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.'))
58633
58634 var curve = new EC(curveId)
58635 var pubkey = pub.data.subjectPrivateKey.data
58636
58637 return curve.verify(hash, sig, pubkey)
58638 }
58639
58640 function dsaVerify (sig, hash, pub) {
58641 var p = pub.data.p
58642 var q = pub.data.q
58643 var g = pub.data.g
58644 var y = pub.data.pub_key
58645 var unpacked = parseKeys.signature.decode(sig, 'der')
58646 var s = unpacked.s
58647 var r = unpacked.r
58648 checkValue(s, q)
58649 checkValue(r, q)
58650 var montp = BN.mont(p)
58651 var w = s.invm(q)
58652 var v = g.toRed(montp)
58653 .redPow(new BN(hash).mul(w).mod(q))
58654 .fromRed()
58655 .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed())
58656 .mod(p)
58657 .mod(q)
58658 return v.cmp(r) === 0
58659 }
58660
58661 function checkValue (b, q) {
58662 if (b.cmpn(0) <= 0) throw new Error('invalid sig')
58663 if (b.cmp(q) >= q) throw new Error('invalid sig')
58664 }
58665
58666 module.exports = verify
58667
58668 }).call(this,require("buffer").Buffer)
58669 },{"./curves.json":41,"bn.js":17,"buffer":47,"elliptic":67,"parse-asn1":105}],45:[function(require,module,exports){
58670 (function (global){
58671 'use strict';
58672
58673 var buffer = require('buffer');
58674 var Buffer = buffer.Buffer;
58675 var SlowBuffer = buffer.SlowBuffer;
58676 var MAX_LEN = buffer.kMaxLength || 2147483647;
58677 exports.alloc = function alloc(size, fill, encoding) {
58678 if (typeof Buffer.alloc === 'function') {
58679 return Buffer.alloc(size, fill, encoding);
58680 }
58681 if (typeof encoding === 'number') {
58682 throw new TypeError('encoding must not be number');
58683 }
58684 if (typeof size !== 'number') {
58685 throw new TypeError('size must be a number');
58686 }
58687 if (size > MAX_LEN) {
58688 throw new RangeError('size is too large');
58689 }
58690 var enc = encoding;
58691 var _fill = fill;
58692 if (_fill === undefined) {
58693 enc = undefined;
58694 _fill = 0;
58695 }
58696 var buf = new Buffer(size);
58697 if (typeof _fill === 'string') {
58698 var fillBuf = new Buffer(_fill, enc);
58699 var flen = fillBuf.length;
58700 var i = -1;
58701 while (++i < size) {
58702 buf[i] = fillBuf[i % flen];
58703 }
58704 } else {
58705 buf.fill(_fill);
58706 }
58707 return buf;
58708 }
58709 exports.allocUnsafe = function allocUnsafe(size) {
58710 if (typeof Buffer.allocUnsafe === 'function') {
58711 return Buffer.allocUnsafe(size);
58712 }
58713 if (typeof size !== 'number') {
58714 throw new TypeError('size must be a number');
58715 }
58716 if (size > MAX_LEN) {
58717 throw new RangeError('size is too large');
58718 }
58719 return new Buffer(size);
58720 }
58721 exports.from = function from(value, encodingOrOffset, length) {
58722 if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
58723 return Buffer.from(value, encodingOrOffset, length);
58724 }
58725 if (typeof value === 'number') {
58726 throw new TypeError('"value" argument must not be a number');
58727 }
58728 if (typeof value === 'string') {
58729 return new Buffer(value, encodingOrOffset);
58730 }
58731 if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
58732 var offset = encodingOrOffset;
58733 if (arguments.length === 1) {
58734 return new Buffer(value);
58735 }
58736 if (typeof offset === 'undefined') {
58737 offset = 0;
58738 }
58739 var len = length;
58740 if (typeof len === 'undefined') {
58741 len = value.byteLength - offset;
58742 }
58743 if (offset >= value.byteLength) {
58744 throw new RangeError('\'offset\' is out of bounds');
58745 }
58746 if (len > value.byteLength - offset) {
58747 throw new RangeError('\'length\' is out of bounds');
58748 }
58749 return new Buffer(value.slice(offset, offset + len));
58750 }
58751 if (Buffer.isBuffer(value)) {
58752 var out = new Buffer(value.length);
58753 value.copy(out, 0, 0, value.length);
58754 return out;
58755 }
58756 if (value) {
58757 if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
58758 return new Buffer(value);
58759 }
58760 if (value.type === 'Buffer' && Array.isArray(value.data)) {
58761 return new Buffer(value.data);
58762 }
58763 }
58764
58765 throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
58766 }
58767 exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
58768 if (typeof Buffer.allocUnsafeSlow === 'function') {
58769 return Buffer.allocUnsafeSlow(size);
58770 }
58771 if (typeof size !== 'number') {
58772 throw new TypeError('size must be a number');
58773 }
58774 if (size >= MAX_LEN) {
58775 throw new RangeError('size is too large');
58776 }
58777 return new SlowBuffer(size);
58778 }
58779
58780 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
58781 },{"buffer":47}],46:[function(require,module,exports){
58782 (function (Buffer){
58783 module.exports = function xor (a, b) {
58784 var length = Math.min(a.length, b.length)
58785 var buffer = new Buffer(length)
58786
58787 for (var i = 0; i < length; ++i) {
58788 buffer[i] = a[i] ^ b[i]
58789 }
58790
58791 return buffer
58792 }
58793
58794 }).call(this,require("buffer").Buffer)
58795 },{"buffer":47}],47:[function(require,module,exports){
58796 /*!
58797 * The buffer module from node.js, for the browser.
58798 *
58799 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
58800 * @license MIT
58801 */
58802 /* eslint-disable no-proto */
58803
58804 'use strict'
58805
58806 var base64 = require('base64-js')
58807 var ieee754 = require('ieee754')
58808
58809 exports.Buffer = Buffer
58810 exports.SlowBuffer = SlowBuffer
58811 exports.INSPECT_MAX_BYTES = 50
58812
58813 var K_MAX_LENGTH = 0x7fffffff
58814 exports.kMaxLength = K_MAX_LENGTH
58815
58816 /**
58817 * If `Buffer.TYPED_ARRAY_SUPPORT`:
58818 * === true Use Uint8Array implementation (fastest)
58819 * === false Print warning and recommend using `buffer` v4.x which has an Object
58820 * implementation (most compatible, even IE6)
58821 *
58822 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
58823 * Opera 11.6+, iOS 4.2+.
58824 *
58825 * We report that the browser does not support typed arrays if the are not subclassable
58826 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
58827 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
58828 * for __proto__ and has a buggy typed array implementation.
58829 */
58830 Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
58831
58832 if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
58833 typeof console.error === 'function') {
58834 console.error(
58835 'This browser lacks typed array (Uint8Array) support which is required by ' +
58836 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
58837 )
58838 }
58839
58840 function typedArraySupport () {
58841 // Can typed array instances can be augmented?
58842 try {
58843 var arr = new Uint8Array(1)
58844 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
58845 return arr.foo() === 42
58846 } catch (e) {
58847 return false
58848 }
58849 }
58850
58851 function createBuffer (length) {
58852 if (length > K_MAX_LENGTH) {
58853 throw new RangeError('Invalid typed array length')
58854 }
58855 // Return an augmented `Uint8Array` instance
58856 var buf = new Uint8Array(length)
58857 buf.__proto__ = Buffer.prototype
58858 return buf
58859 }
58860
58861 /**
58862 * The Buffer constructor returns instances of `Uint8Array` that have their
58863 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
58864 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
58865 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
58866 * returns a single octet.
58867 *
58868 * The `Uint8Array` prototype remains unmodified.
58869 */
58870
58871 function Buffer (arg, encodingOrOffset, length) {
58872 // Common case.
58873 if (typeof arg === 'number') {
58874 if (typeof encodingOrOffset === 'string') {
58875 throw new Error(
58876 'If encoding is specified then the first argument must be a string'
58877 )
58878 }
58879 return allocUnsafe(arg)
58880 }
58881 return from(arg, encodingOrOffset, length)
58882 }
58883
58884 // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
58885 if (typeof Symbol !== 'undefined' && Symbol.species &&
58886 Buffer[Symbol.species] === Buffer) {
58887 Object.defineProperty(Buffer, Symbol.species, {
58888 value: null,
58889 configurable: true,
58890 enumerable: false,
58891 writable: false
58892 })
58893 }
58894
58895 Buffer.poolSize = 8192 // not used by this implementation
58896
58897 function from (value, encodingOrOffset, length) {
58898 if (typeof value === 'number') {
58899 throw new TypeError('"value" argument must not be a number')
58900 }
58901
58902 if (value instanceof ArrayBuffer) {
58903 return fromArrayBuffer(value, encodingOrOffset, length)
58904 }
58905
58906 if (typeof value === 'string') {
58907 return fromString(value, encodingOrOffset)
58908 }
58909
58910 return fromObject(value)
58911 }
58912
58913 /**
58914 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
58915 * if value is a number.
58916 * Buffer.from(str[, encoding])
58917 * Buffer.from(array)
58918 * Buffer.from(buffer)
58919 * Buffer.from(arrayBuffer[, byteOffset[, length]])
58920 **/
58921 Buffer.from = function (value, encodingOrOffset, length) {
58922 return from(value, encodingOrOffset, length)
58923 }
58924
58925 // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
58926 // https://github.com/feross/buffer/pull/148
58927 Buffer.prototype.__proto__ = Uint8Array.prototype
58928 Buffer.__proto__ = Uint8Array
58929
58930 function assertSize (size) {
58931 if (typeof size !== 'number') {
58932 throw new TypeError('"size" argument must be a number')
58933 } else if (size < 0) {
58934 throw new RangeError('"size" argument must not be negative')
58935 }
58936 }
58937
58938 function alloc (size, fill, encoding) {
58939 assertSize(size)
58940 if (size <= 0) {
58941 return createBuffer(size)
58942 }
58943 if (fill !== undefined) {
58944 // Only pay attention to encoding if it's a string. This
58945 // prevents accidentally sending in a number that would
58946 // be interpretted as a start offset.
58947 return typeof encoding === 'string'
58948 ? createBuffer(size).fill(fill, encoding)
58949 : createBuffer(size).fill(fill)
58950 }
58951 return createBuffer(size)
58952 }
58953
58954 /**
58955 * Creates a new filled Buffer instance.
58956 * alloc(size[, fill[, encoding]])
58957 **/
58958 Buffer.alloc = function (size, fill, encoding) {
58959 return alloc(size, fill, encoding)
58960 }
58961
58962 function allocUnsafe (size) {
58963 assertSize(size)
58964 return createBuffer(size < 0 ? 0 : checked(size) | 0)
58965 }
58966
58967 /**
58968 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
58969 * */
58970 Buffer.allocUnsafe = function (size) {
58971 return allocUnsafe(size)
58972 }
58973 /**
58974 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
58975 */
58976 Buffer.allocUnsafeSlow = function (size) {
58977 return allocUnsafe(size)
58978 }
58979
58980 function fromString (string, encoding) {
58981 if (typeof encoding !== 'string' || encoding === '') {
58982 encoding = 'utf8'
58983 }
58984
58985 if (!Buffer.isEncoding(encoding)) {
58986 throw new TypeError('"encoding" must be a valid string encoding')
58987 }
58988
58989 var length = byteLength(string, encoding) | 0
58990 var buf = createBuffer(length)
58991
58992 var actual = buf.write(string, encoding)
58993
58994 if (actual !== length) {
58995 // Writing a hex string, for example, that contains invalid characters will
58996 // cause everything after the first invalid character to be ignored. (e.g.
58997 // 'abxxcd' will be treated as 'ab')
58998 buf = buf.slice(0, actual)
58999 }
59000
59001 return buf
59002 }
59003
59004 function fromArrayLike (array) {
59005 var length = array.length < 0 ? 0 : checked(array.length) | 0
59006 var buf = createBuffer(length)
59007 for (var i = 0; i < length; i += 1) {
59008 buf[i] = array[i] & 255
59009 }
59010 return buf
59011 }
59012
59013 function fromArrayBuffer (array, byteOffset, length) {
59014 if (byteOffset < 0 || array.byteLength < byteOffset) {
59015 throw new RangeError('\'offset\' is out of bounds')
59016 }
59017
59018 if (array.byteLength < byteOffset + (length || 0)) {
59019 throw new RangeError('\'length\' is out of bounds')
59020 }
59021
59022 var buf
59023 if (byteOffset === undefined && length === undefined) {
59024 buf = new Uint8Array(array)
59025 } else if (length === undefined) {
59026 buf = new Uint8Array(array, byteOffset)
59027 } else {
59028 buf = new Uint8Array(array, byteOffset, length)
59029 }
59030
59031 // Return an augmented `Uint8Array` instance
59032 buf.__proto__ = Buffer.prototype
59033 return buf
59034 }
59035
59036 function fromObject (obj) {
59037 if (Buffer.isBuffer(obj)) {
59038 var len = checked(obj.length) | 0
59039 var buf = createBuffer(len)
59040
59041 if (buf.length === 0) {
59042 return buf
59043 }
59044
59045 obj.copy(buf, 0, 0, len)
59046 return buf
59047 }
59048
59049 if (obj) {
59050 if (isArrayBufferView(obj) || 'length' in obj) {
59051 if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
59052 return createBuffer(0)
59053 }
59054 return fromArrayLike(obj)
59055 }
59056
59057 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
59058 return fromArrayLike(obj.data)
59059 }
59060 }
59061
59062 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
59063 }
59064
59065 function checked (length) {
59066 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
59067 // length is NaN (which is otherwise coerced to zero.)
59068 if (length >= K_MAX_LENGTH) {
59069 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
59070 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
59071 }
59072 return length | 0
59073 }
59074
59075 function SlowBuffer (length) {
59076 if (+length != length) { // eslint-disable-line eqeqeq
59077 length = 0
59078 }
59079 return Buffer.alloc(+length)
59080 }
59081
59082 Buffer.isBuffer = function isBuffer (b) {
59083 return b != null && b._isBuffer === true
59084 }
59085
59086 Buffer.compare = function compare (a, b) {
59087 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
59088 throw new TypeError('Arguments must be Buffers')
59089 }
59090
59091 if (a === b) return 0
59092
59093 var x = a.length
59094 var y = b.length
59095
59096 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
59097 if (a[i] !== b[i]) {
59098 x = a[i]
59099 y = b[i]
59100 break
59101 }
59102 }
59103
59104 if (x < y) return -1
59105 if (y < x) return 1
59106 return 0
59107 }
59108
59109 Buffer.isEncoding = function isEncoding (encoding) {
59110 switch (String(encoding).toLowerCase()) {
59111 case 'hex':
59112 case 'utf8':
59113 case 'utf-8':
59114 case 'ascii':
59115 case 'latin1':
59116 case 'binary':
59117 case 'base64':
59118 case 'ucs2':
59119 case 'ucs-2':
59120 case 'utf16le':
59121 case 'utf-16le':
59122 return true
59123 default:
59124 return false
59125 }
59126 }
59127
59128 Buffer.concat = function concat (list, length) {
59129 if (!Array.isArray(list)) {
59130 throw new TypeError('"list" argument must be an Array of Buffers')
59131 }
59132
59133 if (list.length === 0) {
59134 return Buffer.alloc(0)
59135 }
59136
59137 var i
59138 if (length === undefined) {
59139 length = 0
59140 for (i = 0; i < list.length; ++i) {
59141 length += list[i].length
59142 }
59143 }
59144
59145 var buffer = Buffer.allocUnsafe(length)
59146 var pos = 0
59147 for (i = 0; i < list.length; ++i) {
59148 var buf = list[i]
59149 if (!Buffer.isBuffer(buf)) {
59150 throw new TypeError('"list" argument must be an Array of Buffers')
59151 }
59152 buf.copy(buffer, pos)
59153 pos += buf.length
59154 }
59155 return buffer
59156 }
59157
59158 function byteLength (string, encoding) {
59159 if (Buffer.isBuffer(string)) {
59160 return string.length
59161 }
59162 if (isArrayBufferView(string) || string instanceof ArrayBuffer) {
59163 return string.byteLength
59164 }
59165 if (typeof string !== 'string') {
59166 string = '' + string
59167 }
59168
59169 var len = string.length
59170 if (len === 0) return 0
59171
59172 // Use a for loop to avoid recursion
59173 var loweredCase = false
59174 for (;;) {
59175 switch (encoding) {
59176 case 'ascii':
59177 case 'latin1':
59178 case 'binary':
59179 return len
59180 case 'utf8':
59181 case 'utf-8':
59182 case undefined:
59183 return utf8ToBytes(string).length
59184 case 'ucs2':
59185 case 'ucs-2':
59186 case 'utf16le':
59187 case 'utf-16le':
59188 return len * 2
59189 case 'hex':
59190 return len >>> 1
59191 case 'base64':
59192 return base64ToBytes(string).length
59193 default:
59194 if (loweredCase) return utf8ToBytes(string).length // assume utf8
59195 encoding = ('' + encoding).toLowerCase()
59196 loweredCase = true
59197 }
59198 }
59199 }
59200 Buffer.byteLength = byteLength
59201
59202 function slowToString (encoding, start, end) {
59203 var loweredCase = false
59204
59205 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
59206 // property of a typed array.
59207
59208 // This behaves neither like String nor Uint8Array in that we set start/end
59209 // to their upper/lower bounds if the value passed is out of range.
59210 // undefined is handled specially as per ECMA-262 6th Edition,
59211 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
59212 if (start === undefined || start < 0) {
59213 start = 0
59214 }
59215 // Return early if start > this.length. Done here to prevent potential uint32
59216 // coercion fail below.
59217 if (start > this.length) {
59218 return ''
59219 }
59220
59221 if (end === undefined || end > this.length) {
59222 end = this.length
59223 }
59224
59225 if (end <= 0) {
59226 return ''
59227 }
59228
59229 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
59230 end >>>= 0
59231 start >>>= 0
59232
59233 if (end <= start) {
59234 return ''
59235 }
59236
59237 if (!encoding) encoding = 'utf8'
59238
59239 while (true) {
59240 switch (encoding) {
59241 case 'hex':
59242 return hexSlice(this, start, end)
59243
59244 case 'utf8':
59245 case 'utf-8':
59246 return utf8Slice(this, start, end)
59247
59248 case 'ascii':
59249 return asciiSlice(this, start, end)
59250
59251 case 'latin1':
59252 case 'binary':
59253 return latin1Slice(this, start, end)
59254
59255 case 'base64':
59256 return base64Slice(this, start, end)
59257
59258 case 'ucs2':
59259 case 'ucs-2':
59260 case 'utf16le':
59261 case 'utf-16le':
59262 return utf16leSlice(this, start, end)
59263
59264 default:
59265 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
59266 encoding = (encoding + '').toLowerCase()
59267 loweredCase = true
59268 }
59269 }
59270 }
59271
59272 // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
59273 // to detect a Buffer instance. It's not possible to use `instanceof Buffer`
59274 // reliably in a browserify context because there could be multiple different
59275 // copies of the 'buffer' package in use. This method works even for Buffer
59276 // instances that were created from another copy of the `buffer` package.
59277 // See: https://github.com/feross/buffer/issues/154
59278 Buffer.prototype._isBuffer = true
59279
59280 function swap (b, n, m) {
59281 var i = b[n]
59282 b[n] = b[m]
59283 b[m] = i
59284 }
59285
59286 Buffer.prototype.swap16 = function swap16 () {
59287 var len = this.length
59288 if (len % 2 !== 0) {
59289 throw new RangeError('Buffer size must be a multiple of 16-bits')
59290 }
59291 for (var i = 0; i < len; i += 2) {
59292 swap(this, i, i + 1)
59293 }
59294 return this
59295 }
59296
59297 Buffer.prototype.swap32 = function swap32 () {
59298 var len = this.length
59299 if (len % 4 !== 0) {
59300 throw new RangeError('Buffer size must be a multiple of 32-bits')
59301 }
59302 for (var i = 0; i < len; i += 4) {
59303 swap(this, i, i + 3)
59304 swap(this, i + 1, i + 2)
59305 }
59306 return this
59307 }
59308
59309 Buffer.prototype.swap64 = function swap64 () {
59310 var len = this.length
59311 if (len % 8 !== 0) {
59312 throw new RangeError('Buffer size must be a multiple of 64-bits')
59313 }
59314 for (var i = 0; i < len; i += 8) {
59315 swap(this, i, i + 7)
59316 swap(this, i + 1, i + 6)
59317 swap(this, i + 2, i + 5)
59318 swap(this, i + 3, i + 4)
59319 }
59320 return this
59321 }
59322
59323 Buffer.prototype.toString = function toString () {
59324 var length = this.length
59325 if (length === 0) return ''
59326 if (arguments.length === 0) return utf8Slice(this, 0, length)
59327 return slowToString.apply(this, arguments)
59328 }
59329
59330 Buffer.prototype.equals = function equals (b) {
59331 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
59332 if (this === b) return true
59333 return Buffer.compare(this, b) === 0
59334 }
59335
59336 Buffer.prototype.inspect = function inspect () {
59337 var str = ''
59338 var max = exports.INSPECT_MAX_BYTES
59339 if (this.length > 0) {
59340 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
59341 if (this.length > max) str += ' ... '
59342 }
59343 return '<Buffer ' + str + '>'
59344 }
59345
59346 Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
59347 if (!Buffer.isBuffer(target)) {
59348 throw new TypeError('Argument must be a Buffer')
59349 }
59350
59351 if (start === undefined) {
59352 start = 0
59353 }
59354 if (end === undefined) {
59355 end = target ? target.length : 0
59356 }
59357 if (thisStart === undefined) {
59358 thisStart = 0
59359 }
59360 if (thisEnd === undefined) {
59361 thisEnd = this.length
59362 }
59363
59364 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
59365 throw new RangeError('out of range index')
59366 }
59367
59368 if (thisStart >= thisEnd && start >= end) {
59369 return 0
59370 }
59371 if (thisStart >= thisEnd) {
59372 return -1
59373 }
59374 if (start >= end) {
59375 return 1
59376 }
59377
59378 start >>>= 0
59379 end >>>= 0
59380 thisStart >>>= 0
59381 thisEnd >>>= 0
59382
59383 if (this === target) return 0
59384
59385 var x = thisEnd - thisStart
59386 var y = end - start
59387 var len = Math.min(x, y)
59388
59389 var thisCopy = this.slice(thisStart, thisEnd)
59390 var targetCopy = target.slice(start, end)
59391
59392 for (var i = 0; i < len; ++i) {
59393 if (thisCopy[i] !== targetCopy[i]) {
59394 x = thisCopy[i]
59395 y = targetCopy[i]
59396 break
59397 }
59398 }
59399
59400 if (x < y) return -1
59401 if (y < x) return 1
59402 return 0
59403 }
59404
59405 // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
59406 // OR the last index of `val` in `buffer` at offset <= `byteOffset`.
59407 //
59408 // Arguments:
59409 // - buffer - a Buffer to search
59410 // - val - a string, Buffer, or number
59411 // - byteOffset - an index into `buffer`; will be clamped to an int32
59412 // - encoding - an optional encoding, relevant is val is a string
59413 // - dir - true for indexOf, false for lastIndexOf
59414 function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
59415 // Empty buffer means no match
59416 if (buffer.length === 0) return -1
59417
59418 // Normalize byteOffset
59419 if (typeof byteOffset === 'string') {
59420 encoding = byteOffset
59421 byteOffset = 0
59422 } else if (byteOffset > 0x7fffffff) {
59423 byteOffset = 0x7fffffff
59424 } else if (byteOffset < -0x80000000) {
59425 byteOffset = -0x80000000
59426 }
59427 byteOffset = +byteOffset // Coerce to Number.
59428 if (numberIsNaN(byteOffset)) {
59429 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
59430 byteOffset = dir ? 0 : (buffer.length - 1)
59431 }
59432
59433 // Normalize byteOffset: negative offsets start from the end of the buffer
59434 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
59435 if (byteOffset >= buffer.length) {
59436 if (dir) return -1
59437 else byteOffset = buffer.length - 1
59438 } else if (byteOffset < 0) {
59439 if (dir) byteOffset = 0
59440 else return -1
59441 }
59442
59443 // Normalize val
59444 if (typeof val === 'string') {
59445 val = Buffer.from(val, encoding)
59446 }
59447
59448 // Finally, search either indexOf (if dir is true) or lastIndexOf
59449 if (Buffer.isBuffer(val)) {
59450 // Special case: looking for empty string/buffer always fails
59451 if (val.length === 0) {
59452 return -1
59453 }
59454 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
59455 } else if (typeof val === 'number') {
59456 val = val & 0xFF // Search for a byte value [0-255]
59457 if (typeof Uint8Array.prototype.indexOf === 'function') {
59458 if (dir) {
59459 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
59460 } else {
59461 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
59462 }
59463 }
59464 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
59465 }
59466
59467 throw new TypeError('val must be string, number or Buffer')
59468 }
59469
59470 function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
59471 var indexSize = 1
59472 var arrLength = arr.length
59473 var valLength = val.length
59474
59475 if (encoding !== undefined) {
59476 encoding = String(encoding).toLowerCase()
59477 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
59478 encoding === 'utf16le' || encoding === 'utf-16le') {
59479 if (arr.length < 2 || val.length < 2) {
59480 return -1
59481 }
59482 indexSize = 2
59483 arrLength /= 2
59484 valLength /= 2
59485 byteOffset /= 2
59486 }
59487 }
59488
59489 function read (buf, i) {
59490 if (indexSize === 1) {
59491 return buf[i]
59492 } else {
59493 return buf.readUInt16BE(i * indexSize)
59494 }
59495 }
59496
59497 var i
59498 if (dir) {
59499 var foundIndex = -1
59500 for (i = byteOffset; i < arrLength; i++) {
59501 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
59502 if (foundIndex === -1) foundIndex = i
59503 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
59504 } else {
59505 if (foundIndex !== -1) i -= i - foundIndex
59506 foundIndex = -1
59507 }
59508 }
59509 } else {
59510 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
59511 for (i = byteOffset; i >= 0; i--) {
59512 var found = true
59513 for (var j = 0; j < valLength; j++) {
59514 if (read(arr, i + j) !== read(val, j)) {
59515 found = false
59516 break
59517 }
59518 }
59519 if (found) return i
59520 }
59521 }
59522
59523 return -1
59524 }
59525
59526 Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
59527 return this.indexOf(val, byteOffset, encoding) !== -1
59528 }
59529
59530 Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
59531 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
59532 }
59533
59534 Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
59535 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
59536 }
59537
59538 function hexWrite (buf, string, offset, length) {
59539 offset = Number(offset) || 0
59540 var remaining = buf.length - offset
59541 if (!length) {
59542 length = remaining
59543 } else {
59544 length = Number(length)
59545 if (length > remaining) {
59546 length = remaining
59547 }
59548 }
59549
59550 // must be an even number of digits
59551 var strLen = string.length
59552 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
59553
59554 if (length > strLen / 2) {
59555 length = strLen / 2
59556 }
59557 for (var i = 0; i < length; ++i) {
59558 var parsed = parseInt(string.substr(i * 2, 2), 16)
59559 if (numberIsNaN(parsed)) return i
59560 buf[offset + i] = parsed
59561 }
59562 return i
59563 }
59564
59565 function utf8Write (buf, string, offset, length) {
59566 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
59567 }
59568
59569 function asciiWrite (buf, string, offset, length) {
59570 return blitBuffer(asciiToBytes(string), buf, offset, length)
59571 }
59572
59573 function latin1Write (buf, string, offset, length) {
59574 return asciiWrite(buf, string, offset, length)
59575 }
59576
59577 function base64Write (buf, string, offset, length) {
59578 return blitBuffer(base64ToBytes(string), buf, offset, length)
59579 }
59580
59581 function ucs2Write (buf, string, offset, length) {
59582 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
59583 }
59584
59585 Buffer.prototype.write = function write (string, offset, length, encoding) {
59586 // Buffer#write(string)
59587 if (offset === undefined) {
59588 encoding = 'utf8'
59589 length = this.length
59590 offset = 0
59591 // Buffer#write(string, encoding)
59592 } else if (length === undefined && typeof offset === 'string') {
59593 encoding = offset
59594 length = this.length
59595 offset = 0
59596 // Buffer#write(string, offset[, length][, encoding])
59597 } else if (isFinite(offset)) {
59598 offset = offset >>> 0
59599 if (isFinite(length)) {
59600 length = length >>> 0
59601 if (encoding === undefined) encoding = 'utf8'
59602 } else {
59603 encoding = length
59604 length = undefined
59605 }
59606 } else {
59607 throw new Error(
59608 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
59609 )
59610 }
59611
59612 var remaining = this.length - offset
59613 if (length === undefined || length > remaining) length = remaining
59614
59615 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
59616 throw new RangeError('Attempt to write outside buffer bounds')
59617 }
59618
59619 if (!encoding) encoding = 'utf8'
59620
59621 var loweredCase = false
59622 for (;;) {
59623 switch (encoding) {
59624 case 'hex':
59625 return hexWrite(this, string, offset, length)
59626
59627 case 'utf8':
59628 case 'utf-8':
59629 return utf8Write(this, string, offset, length)
59630
59631 case 'ascii':
59632 return asciiWrite(this, string, offset, length)
59633
59634 case 'latin1':
59635 case 'binary':
59636 return latin1Write(this, string, offset, length)
59637
59638 case 'base64':
59639 // Warning: maxLength not taken into account in base64Write
59640 return base64Write(this, string, offset, length)
59641
59642 case 'ucs2':
59643 case 'ucs-2':
59644 case 'utf16le':
59645 case 'utf-16le':
59646 return ucs2Write(this, string, offset, length)
59647
59648 default:
59649 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
59650 encoding = ('' + encoding).toLowerCase()
59651 loweredCase = true
59652 }
59653 }
59654 }
59655
59656 Buffer.prototype.toJSON = function toJSON () {
59657 return {
59658 type: 'Buffer',
59659 data: Array.prototype.slice.call(this._arr || this, 0)
59660 }
59661 }
59662
59663 function base64Slice (buf, start, end) {
59664 if (start === 0 && end === buf.length) {
59665 return base64.fromByteArray(buf)
59666 } else {
59667 return base64.fromByteArray(buf.slice(start, end))
59668 }
59669 }
59670
59671 function utf8Slice (buf, start, end) {
59672 end = Math.min(buf.length, end)
59673 var res = []
59674
59675 var i = start
59676 while (i < end) {
59677 var firstByte = buf[i]
59678 var codePoint = null
59679 var bytesPerSequence = (firstByte > 0xEF) ? 4
59680 : (firstByte > 0xDF) ? 3
59681 : (firstByte > 0xBF) ? 2
59682 : 1
59683
59684 if (i + bytesPerSequence <= end) {
59685 var secondByte, thirdByte, fourthByte, tempCodePoint
59686
59687 switch (bytesPerSequence) {
59688 case 1:
59689 if (firstByte < 0x80) {
59690 codePoint = firstByte
59691 }
59692 break
59693 case 2:
59694 secondByte = buf[i + 1]
59695 if ((secondByte & 0xC0) === 0x80) {
59696 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
59697 if (tempCodePoint > 0x7F) {
59698 codePoint = tempCodePoint
59699 }
59700 }
59701 break
59702 case 3:
59703 secondByte = buf[i + 1]
59704 thirdByte = buf[i + 2]
59705 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
59706 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
59707 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
59708 codePoint = tempCodePoint
59709 }
59710 }
59711 break
59712 case 4:
59713 secondByte = buf[i + 1]
59714 thirdByte = buf[i + 2]
59715 fourthByte = buf[i + 3]
59716 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
59717 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
59718 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
59719 codePoint = tempCodePoint
59720 }
59721 }
59722 }
59723 }
59724
59725 if (codePoint === null) {
59726 // we did not generate a valid codePoint so insert a
59727 // replacement char (U+FFFD) and advance only 1 byte
59728 codePoint = 0xFFFD
59729 bytesPerSequence = 1
59730 } else if (codePoint > 0xFFFF) {
59731 // encode to utf16 (surrogate pair dance)
59732 codePoint -= 0x10000
59733 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
59734 codePoint = 0xDC00 | codePoint & 0x3FF
59735 }
59736
59737 res.push(codePoint)
59738 i += bytesPerSequence
59739 }
59740
59741 return decodeCodePointsArray(res)
59742 }
59743
59744 // Based on http://stackoverflow.com/a/22747272/680742, the browser with
59745 // the lowest limit is Chrome, with 0x10000 args.
59746 // We go 1 magnitude less, for safety
59747 var MAX_ARGUMENTS_LENGTH = 0x1000
59748
59749 function decodeCodePointsArray (codePoints) {
59750 var len = codePoints.length
59751 if (len <= MAX_ARGUMENTS_LENGTH) {
59752 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
59753 }
59754
59755 // Decode in chunks to avoid "call stack size exceeded".
59756 var res = ''
59757 var i = 0
59758 while (i < len) {
59759 res += String.fromCharCode.apply(
59760 String,
59761 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
59762 )
59763 }
59764 return res
59765 }
59766
59767 function asciiSlice (buf, start, end) {
59768 var ret = ''
59769 end = Math.min(buf.length, end)
59770
59771 for (var i = start; i < end; ++i) {
59772 ret += String.fromCharCode(buf[i] & 0x7F)
59773 }
59774 return ret
59775 }
59776
59777 function latin1Slice (buf, start, end) {
59778 var ret = ''
59779 end = Math.min(buf.length, end)
59780
59781 for (var i = start; i < end; ++i) {
59782 ret += String.fromCharCode(buf[i])
59783 }
59784 return ret
59785 }
59786
59787 function hexSlice (buf, start, end) {
59788 var len = buf.length
59789
59790 if (!start || start < 0) start = 0
59791 if (!end || end < 0 || end > len) end = len
59792
59793 var out = ''
59794 for (var i = start; i < end; ++i) {
59795 out += toHex(buf[i])
59796 }
59797 return out
59798 }
59799
59800 function utf16leSlice (buf, start, end) {
59801 var bytes = buf.slice(start, end)
59802 var res = ''
59803 for (var i = 0; i < bytes.length; i += 2) {
59804 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
59805 }
59806 return res
59807 }
59808
59809 Buffer.prototype.slice = function slice (start, end) {
59810 var len = this.length
59811 start = ~~start
59812 end = end === undefined ? len : ~~end
59813
59814 if (start < 0) {
59815 start += len
59816 if (start < 0) start = 0
59817 } else if (start > len) {
59818 start = len
59819 }
59820
59821 if (end < 0) {
59822 end += len
59823 if (end < 0) end = 0
59824 } else if (end > len) {
59825 end = len
59826 }
59827
59828 if (end < start) end = start
59829
59830 var newBuf = this.subarray(start, end)
59831 // Return an augmented `Uint8Array` instance
59832 newBuf.__proto__ = Buffer.prototype
59833 return newBuf
59834 }
59835
59836 /*
59837 * Need to make sure that buffer isn't trying to write out of bounds.
59838 */
59839 function checkOffset (offset, ext, length) {
59840 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
59841 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
59842 }
59843
59844 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
59845 offset = offset >>> 0
59846 byteLength = byteLength >>> 0
59847 if (!noAssert) checkOffset(offset, byteLength, this.length)
59848
59849 var val = this[offset]
59850 var mul = 1
59851 var i = 0
59852 while (++i < byteLength && (mul *= 0x100)) {
59853 val += this[offset + i] * mul
59854 }
59855
59856 return val
59857 }
59858
59859 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
59860 offset = offset >>> 0
59861 byteLength = byteLength >>> 0
59862 if (!noAssert) {
59863 checkOffset(offset, byteLength, this.length)
59864 }
59865
59866 var val = this[offset + --byteLength]
59867 var mul = 1
59868 while (byteLength > 0 && (mul *= 0x100)) {
59869 val += this[offset + --byteLength] * mul
59870 }
59871
59872 return val
59873 }
59874
59875 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
59876 offset = offset >>> 0
59877 if (!noAssert) checkOffset(offset, 1, this.length)
59878 return this[offset]
59879 }
59880
59881 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
59882 offset = offset >>> 0
59883 if (!noAssert) checkOffset(offset, 2, this.length)
59884 return this[offset] | (this[offset + 1] << 8)
59885 }
59886
59887 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
59888 offset = offset >>> 0
59889 if (!noAssert) checkOffset(offset, 2, this.length)
59890 return (this[offset] << 8) | this[offset + 1]
59891 }
59892
59893 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
59894 offset = offset >>> 0
59895 if (!noAssert) checkOffset(offset, 4, this.length)
59896
59897 return ((this[offset]) |
59898 (this[offset + 1] << 8) |
59899 (this[offset + 2] << 16)) +
59900 (this[offset + 3] * 0x1000000)
59901 }
59902
59903 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
59904 offset = offset >>> 0
59905 if (!noAssert) checkOffset(offset, 4, this.length)
59906
59907 return (this[offset] * 0x1000000) +
59908 ((this[offset + 1] << 16) |
59909 (this[offset + 2] << 8) |
59910 this[offset + 3])
59911 }
59912
59913 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
59914 offset = offset >>> 0
59915 byteLength = byteLength >>> 0
59916 if (!noAssert) checkOffset(offset, byteLength, this.length)
59917
59918 var val = this[offset]
59919 var mul = 1
59920 var i = 0
59921 while (++i < byteLength && (mul *= 0x100)) {
59922 val += this[offset + i] * mul
59923 }
59924 mul *= 0x80
59925
59926 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
59927
59928 return val
59929 }
59930
59931 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
59932 offset = offset >>> 0
59933 byteLength = byteLength >>> 0
59934 if (!noAssert) checkOffset(offset, byteLength, this.length)
59935
59936 var i = byteLength
59937 var mul = 1
59938 var val = this[offset + --i]
59939 while (i > 0 && (mul *= 0x100)) {
59940 val += this[offset + --i] * mul
59941 }
59942 mul *= 0x80
59943
59944 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
59945
59946 return val
59947 }
59948
59949 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
59950 offset = offset >>> 0
59951 if (!noAssert) checkOffset(offset, 1, this.length)
59952 if (!(this[offset] & 0x80)) return (this[offset])
59953 return ((0xff - this[offset] + 1) * -1)
59954 }
59955
59956 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
59957 offset = offset >>> 0
59958 if (!noAssert) checkOffset(offset, 2, this.length)
59959 var val = this[offset] | (this[offset + 1] << 8)
59960 return (val & 0x8000) ? val | 0xFFFF0000 : val
59961 }
59962
59963 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
59964 offset = offset >>> 0
59965 if (!noAssert) checkOffset(offset, 2, this.length)
59966 var val = this[offset + 1] | (this[offset] << 8)
59967 return (val & 0x8000) ? val | 0xFFFF0000 : val
59968 }
59969
59970 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
59971 offset = offset >>> 0
59972 if (!noAssert) checkOffset(offset, 4, this.length)
59973
59974 return (this[offset]) |
59975 (this[offset + 1] << 8) |
59976 (this[offset + 2] << 16) |
59977 (this[offset + 3] << 24)
59978 }
59979
59980 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
59981 offset = offset >>> 0
59982 if (!noAssert) checkOffset(offset, 4, this.length)
59983
59984 return (this[offset] << 24) |
59985 (this[offset + 1] << 16) |
59986 (this[offset + 2] << 8) |
59987 (this[offset + 3])
59988 }
59989
59990 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
59991 offset = offset >>> 0
59992 if (!noAssert) checkOffset(offset, 4, this.length)
59993 return ieee754.read(this, offset, true, 23, 4)
59994 }
59995
59996 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
59997 offset = offset >>> 0
59998 if (!noAssert) checkOffset(offset, 4, this.length)
59999 return ieee754.read(this, offset, false, 23, 4)
60000 }
60001
60002 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
60003 offset = offset >>> 0
60004 if (!noAssert) checkOffset(offset, 8, this.length)
60005 return ieee754.read(this, offset, true, 52, 8)
60006 }
60007
60008 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
60009 offset = offset >>> 0
60010 if (!noAssert) checkOffset(offset, 8, this.length)
60011 return ieee754.read(this, offset, false, 52, 8)
60012 }
60013
60014 function checkInt (buf, value, offset, ext, max, min) {
60015 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
60016 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
60017 if (offset + ext > buf.length) throw new RangeError('Index out of range')
60018 }
60019
60020 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
60021 value = +value
60022 offset = offset >>> 0
60023 byteLength = byteLength >>> 0
60024 if (!noAssert) {
60025 var maxBytes = Math.pow(2, 8 * byteLength) - 1
60026 checkInt(this, value, offset, byteLength, maxBytes, 0)
60027 }
60028
60029 var mul = 1
60030 var i = 0
60031 this[offset] = value & 0xFF
60032 while (++i < byteLength && (mul *= 0x100)) {
60033 this[offset + i] = (value / mul) & 0xFF
60034 }
60035
60036 return offset + byteLength
60037 }
60038
60039 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
60040 value = +value
60041 offset = offset >>> 0
60042 byteLength = byteLength >>> 0
60043 if (!noAssert) {
60044 var maxBytes = Math.pow(2, 8 * byteLength) - 1
60045 checkInt(this, value, offset, byteLength, maxBytes, 0)
60046 }
60047
60048 var i = byteLength - 1
60049 var mul = 1
60050 this[offset + i] = value & 0xFF
60051 while (--i >= 0 && (mul *= 0x100)) {
60052 this[offset + i] = (value / mul) & 0xFF
60053 }
60054
60055 return offset + byteLength
60056 }
60057
60058 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
60059 value = +value
60060 offset = offset >>> 0
60061 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
60062 this[offset] = (value & 0xff)
60063 return offset + 1
60064 }
60065
60066 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
60067 value = +value
60068 offset = offset >>> 0
60069 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
60070 this[offset] = (value & 0xff)
60071 this[offset + 1] = (value >>> 8)
60072 return offset + 2
60073 }
60074
60075 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
60076 value = +value
60077 offset = offset >>> 0
60078 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
60079 this[offset] = (value >>> 8)
60080 this[offset + 1] = (value & 0xff)
60081 return offset + 2
60082 }
60083
60084 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
60085 value = +value
60086 offset = offset >>> 0
60087 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
60088 this[offset + 3] = (value >>> 24)
60089 this[offset + 2] = (value >>> 16)
60090 this[offset + 1] = (value >>> 8)
60091 this[offset] = (value & 0xff)
60092 return offset + 4
60093 }
60094
60095 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
60096 value = +value
60097 offset = offset >>> 0
60098 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
60099 this[offset] = (value >>> 24)
60100 this[offset + 1] = (value >>> 16)
60101 this[offset + 2] = (value >>> 8)
60102 this[offset + 3] = (value & 0xff)
60103 return offset + 4
60104 }
60105
60106 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
60107 value = +value
60108 offset = offset >>> 0
60109 if (!noAssert) {
60110 var limit = Math.pow(2, (8 * byteLength) - 1)
60111
60112 checkInt(this, value, offset, byteLength, limit - 1, -limit)
60113 }
60114
60115 var i = 0
60116 var mul = 1
60117 var sub = 0
60118 this[offset] = value & 0xFF
60119 while (++i < byteLength && (mul *= 0x100)) {
60120 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
60121 sub = 1
60122 }
60123 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
60124 }
60125
60126 return offset + byteLength
60127 }
60128
60129 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
60130 value = +value
60131 offset = offset >>> 0
60132 if (!noAssert) {
60133 var limit = Math.pow(2, (8 * byteLength) - 1)
60134
60135 checkInt(this, value, offset, byteLength, limit - 1, -limit)
60136 }
60137
60138 var i = byteLength - 1
60139 var mul = 1
60140 var sub = 0
60141 this[offset + i] = value & 0xFF
60142 while (--i >= 0 && (mul *= 0x100)) {
60143 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
60144 sub = 1
60145 }
60146 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
60147 }
60148
60149 return offset + byteLength
60150 }
60151
60152 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
60153 value = +value
60154 offset = offset >>> 0
60155 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
60156 if (value < 0) value = 0xff + value + 1
60157 this[offset] = (value & 0xff)
60158 return offset + 1
60159 }
60160
60161 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
60162 value = +value
60163 offset = offset >>> 0
60164 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
60165 this[offset] = (value & 0xff)
60166 this[offset + 1] = (value >>> 8)
60167 return offset + 2
60168 }
60169
60170 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
60171 value = +value
60172 offset = offset >>> 0
60173 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
60174 this[offset] = (value >>> 8)
60175 this[offset + 1] = (value & 0xff)
60176 return offset + 2
60177 }
60178
60179 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
60180 value = +value
60181 offset = offset >>> 0
60182 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
60183 this[offset] = (value & 0xff)
60184 this[offset + 1] = (value >>> 8)
60185 this[offset + 2] = (value >>> 16)
60186 this[offset + 3] = (value >>> 24)
60187 return offset + 4
60188 }
60189
60190 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
60191 value = +value
60192 offset = offset >>> 0
60193 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
60194 if (value < 0) value = 0xffffffff + value + 1
60195 this[offset] = (value >>> 24)
60196 this[offset + 1] = (value >>> 16)
60197 this[offset + 2] = (value >>> 8)
60198 this[offset + 3] = (value & 0xff)
60199 return offset + 4
60200 }
60201
60202 function checkIEEE754 (buf, value, offset, ext, max, min) {
60203 if (offset + ext > buf.length) throw new RangeError('Index out of range')
60204 if (offset < 0) throw new RangeError('Index out of range')
60205 }
60206
60207 function writeFloat (buf, value, offset, littleEndian, noAssert) {
60208 value = +value
60209 offset = offset >>> 0
60210 if (!noAssert) {
60211 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
60212 }
60213 ieee754.write(buf, value, offset, littleEndian, 23, 4)
60214 return offset + 4
60215 }
60216
60217 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
60218 return writeFloat(this, value, offset, true, noAssert)
60219 }
60220
60221 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
60222 return writeFloat(this, value, offset, false, noAssert)
60223 }
60224
60225 function writeDouble (buf, value, offset, littleEndian, noAssert) {
60226 value = +value
60227 offset = offset >>> 0
60228 if (!noAssert) {
60229 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
60230 }
60231 ieee754.write(buf, value, offset, littleEndian, 52, 8)
60232 return offset + 8
60233 }
60234
60235 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
60236 return writeDouble(this, value, offset, true, noAssert)
60237 }
60238
60239 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
60240 return writeDouble(this, value, offset, false, noAssert)
60241 }
60242
60243 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
60244 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
60245 if (!start) start = 0
60246 if (!end && end !== 0) end = this.length
60247 if (targetStart >= target.length) targetStart = target.length
60248 if (!targetStart) targetStart = 0
60249 if (end > 0 && end < start) end = start
60250
60251 // Copy 0 bytes; we're done
60252 if (end === start) return 0
60253 if (target.length === 0 || this.length === 0) return 0
60254
60255 // Fatal error conditions
60256 if (targetStart < 0) {
60257 throw new RangeError('targetStart out of bounds')
60258 }
60259 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
60260 if (end < 0) throw new RangeError('sourceEnd out of bounds')
60261
60262 // Are we oob?
60263 if (end > this.length) end = this.length
60264 if (target.length - targetStart < end - start) {
60265 end = target.length - targetStart + start
60266 }
60267
60268 var len = end - start
60269 var i
60270
60271 if (this === target && start < targetStart && targetStart < end) {
60272 // descending copy from end
60273 for (i = len - 1; i >= 0; --i) {
60274 target[i + targetStart] = this[i + start]
60275 }
60276 } else if (len < 1000) {
60277 // ascending copy from start
60278 for (i = 0; i < len; ++i) {
60279 target[i + targetStart] = this[i + start]
60280 }
60281 } else {
60282 Uint8Array.prototype.set.call(
60283 target,
60284 this.subarray(start, start + len),
60285 targetStart
60286 )
60287 }
60288
60289 return len
60290 }
60291
60292 // Usage:
60293 // buffer.fill(number[, offset[, end]])
60294 // buffer.fill(buffer[, offset[, end]])
60295 // buffer.fill(string[, offset[, end]][, encoding])
60296 Buffer.prototype.fill = function fill (val, start, end, encoding) {
60297 // Handle string cases:
60298 if (typeof val === 'string') {
60299 if (typeof start === 'string') {
60300 encoding = start
60301 start = 0
60302 end = this.length
60303 } else if (typeof end === 'string') {
60304 encoding = end
60305 end = this.length
60306 }
60307 if (val.length === 1) {
60308 var code = val.charCodeAt(0)
60309 if (code < 256) {
60310 val = code
60311 }
60312 }
60313 if (encoding !== undefined && typeof encoding !== 'string') {
60314 throw new TypeError('encoding must be a string')
60315 }
60316 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
60317 throw new TypeError('Unknown encoding: ' + encoding)
60318 }
60319 } else if (typeof val === 'number') {
60320 val = val & 255
60321 }
60322
60323 // Invalid ranges are not set to a default, so can range check early.
60324 if (start < 0 || this.length < start || this.length < end) {
60325 throw new RangeError('Out of range index')
60326 }
60327
60328 if (end <= start) {
60329 return this
60330 }
60331
60332 start = start >>> 0
60333 end = end === undefined ? this.length : end >>> 0
60334
60335 if (!val) val = 0
60336
60337 var i
60338 if (typeof val === 'number') {
60339 for (i = start; i < end; ++i) {
60340 this[i] = val
60341 }
60342 } else {
60343 var bytes = Buffer.isBuffer(val)
60344 ? val
60345 : new Buffer(val, encoding)
60346 var len = bytes.length
60347 for (i = 0; i < end - start; ++i) {
60348 this[i + start] = bytes[i % len]
60349 }
60350 }
60351
60352 return this
60353 }
60354
60355 // HELPER FUNCTIONS
60356 // ================
60357
60358 var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
60359
60360 function base64clean (str) {
60361 // Node strips out invalid characters like \n and \t from the string, base64-js does not
60362 str = str.trim().replace(INVALID_BASE64_RE, '')
60363 // Node converts strings with length < 2 to ''
60364 if (str.length < 2) return ''
60365 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
60366 while (str.length % 4 !== 0) {
60367 str = str + '='
60368 }
60369 return str
60370 }
60371
60372 function toHex (n) {
60373 if (n < 16) return '0' + n.toString(16)
60374 return n.toString(16)
60375 }
60376
60377 function utf8ToBytes (string, units) {
60378 units = units || Infinity
60379 var codePoint
60380 var length = string.length
60381 var leadSurrogate = null
60382 var bytes = []
60383
60384 for (var i = 0; i < length; ++i) {
60385 codePoint = string.charCodeAt(i)
60386
60387 // is surrogate component
60388 if (codePoint > 0xD7FF && codePoint < 0xE000) {
60389 // last char was a lead
60390 if (!leadSurrogate) {
60391 // no lead yet
60392 if (codePoint > 0xDBFF) {
60393 // unexpected trail
60394 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
60395 continue
60396 } else if (i + 1 === length) {
60397 // unpaired lead
60398 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
60399 continue
60400 }
60401
60402 // valid lead
60403 leadSurrogate = codePoint
60404
60405 continue
60406 }
60407
60408 // 2 leads in a row
60409 if (codePoint < 0xDC00) {
60410 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
60411 leadSurrogate = codePoint
60412 continue
60413 }
60414
60415 // valid surrogate pair
60416 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
60417 } else if (leadSurrogate) {
60418 // valid bmp char, but last char was a lead
60419 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
60420 }
60421
60422 leadSurrogate = null
60423
60424 // encode utf8
60425 if (codePoint < 0x80) {
60426 if ((units -= 1) < 0) break
60427 bytes.push(codePoint)
60428 } else if (codePoint < 0x800) {
60429 if ((units -= 2) < 0) break
60430 bytes.push(
60431 codePoint >> 0x6 | 0xC0,
60432 codePoint & 0x3F | 0x80
60433 )
60434 } else if (codePoint < 0x10000) {
60435 if ((units -= 3) < 0) break
60436 bytes.push(
60437 codePoint >> 0xC | 0xE0,
60438 codePoint >> 0x6 & 0x3F | 0x80,
60439 codePoint & 0x3F | 0x80
60440 )
60441 } else if (codePoint < 0x110000) {
60442 if ((units -= 4) < 0) break
60443 bytes.push(
60444 codePoint >> 0x12 | 0xF0,
60445 codePoint >> 0xC & 0x3F | 0x80,
60446 codePoint >> 0x6 & 0x3F | 0x80,
60447 codePoint & 0x3F | 0x80
60448 )
60449 } else {
60450 throw new Error('Invalid code point')
60451 }
60452 }
60453
60454 return bytes
60455 }
60456
60457 function asciiToBytes (str) {
60458 var byteArray = []
60459 for (var i = 0; i < str.length; ++i) {
60460 // Node's code seems to be doing this and not & 0x7F..
60461 byteArray.push(str.charCodeAt(i) & 0xFF)
60462 }
60463 return byteArray
60464 }
60465
60466 function utf16leToBytes (str, units) {
60467 var c, hi, lo
60468 var byteArray = []
60469 for (var i = 0; i < str.length; ++i) {
60470 if ((units -= 2) < 0) break
60471
60472 c = str.charCodeAt(i)
60473 hi = c >> 8
60474 lo = c % 256
60475 byteArray.push(lo)
60476 byteArray.push(hi)
60477 }
60478
60479 return byteArray
60480 }
60481
60482 function base64ToBytes (str) {
60483 return base64.toByteArray(base64clean(str))
60484 }
60485
60486 function blitBuffer (src, dst, offset, length) {
60487 for (var i = 0; i < length; ++i) {
60488 if ((i + offset >= dst.length) || (i >= src.length)) break
60489 dst[i + offset] = src[i]
60490 }
60491 return i
60492 }
60493
60494 // Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`
60495 function isArrayBufferView (obj) {
60496 return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)
60497 }
60498
60499 function numberIsNaN (obj) {
60500 return obj !== obj // eslint-disable-line no-self-compare
60501 }
60502
60503 },{"base64-js":16,"ieee754":93}],48:[function(require,module,exports){
60504 (function (Buffer){
60505 var Transform = require('stream').Transform
60506 var inherits = require('inherits')
60507 var StringDecoder = require('string_decoder').StringDecoder
60508 module.exports = CipherBase
60509 inherits(CipherBase, Transform)
60510 function CipherBase (hashMode) {
60511 Transform.call(this)
60512 this.hashMode = typeof hashMode === 'string'
60513 if (this.hashMode) {
60514 this[hashMode] = this._finalOrDigest
60515 } else {
60516 this.final = this._finalOrDigest
60517 }
60518 this._decoder = null
60519 this._encoding = null
60520 }
60521 CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
60522 if (typeof data === 'string') {
60523 data = new Buffer(data, inputEnc)
60524 }
60525 var outData = this._update(data)
60526 if (this.hashMode) {
60527 return this
60528 }
60529 if (outputEnc) {
60530 outData = this._toString(outData, outputEnc)
60531 }
60532 return outData
60533 }
60534
60535 CipherBase.prototype.setAutoPadding = function () {}
60536
60537 CipherBase.prototype.getAuthTag = function () {
60538 throw new Error('trying to get auth tag in unsupported state')
60539 }
60540
60541 CipherBase.prototype.setAuthTag = function () {
60542 throw new Error('trying to set auth tag in unsupported state')
60543 }
60544
60545 CipherBase.prototype.setAAD = function () {
60546 throw new Error('trying to set aad in unsupported state')
60547 }
60548
60549 CipherBase.prototype._transform = function (data, _, next) {
60550 var err
60551 try {
60552 if (this.hashMode) {
60553 this._update(data)
60554 } else {
60555 this.push(this._update(data))
60556 }
60557 } catch (e) {
60558 err = e
60559 } finally {
60560 next(err)
60561 }
60562 }
60563 CipherBase.prototype._flush = function (done) {
60564 var err
60565 try {
60566 this.push(this._final())
60567 } catch (e) {
60568 err = e
60569 } finally {
60570 done(err)
60571 }
60572 }
60573 CipherBase.prototype._finalOrDigest = function (outputEnc) {
60574 var outData = this._final() || new Buffer('')
60575 if (outputEnc) {
60576 outData = this._toString(outData, outputEnc, true)
60577 }
60578 return outData
60579 }
60580
60581 CipherBase.prototype._toString = function (value, enc, fin) {
60582 if (!this._decoder) {
60583 this._decoder = new StringDecoder(enc)
60584 this._encoding = enc
60585 }
60586 if (this._encoding !== enc) {
60587 throw new Error('can\'t switch encodings')
60588 }
60589 var out = this._decoder.write(value)
60590 if (fin) {
60591 out += this._decoder.end()
60592 }
60593 return out
60594 }
60595
60596 }).call(this,require("buffer").Buffer)
60597 },{"buffer":47,"inherits":95,"stream":143,"string_decoder":144}],49:[function(require,module,exports){
60598 (function (Buffer){
60599 // Copyright Joyent, Inc. and other Node contributors.
60600 //
60601 // Permission is hereby granted, free of charge, to any person obtaining a
60602 // copy of this software and associated documentation files (the
60603 // "Software"), to deal in the Software without restriction, including
60604 // without limitation the rights to use, copy, modify, merge, publish,
60605 // distribute, sublicense, and/or sell copies of the Software, and to permit
60606 // persons to whom the Software is furnished to do so, subject to the
60607 // following conditions:
60608 //
60609 // The above copyright notice and this permission notice shall be included
60610 // in all copies or substantial portions of the Software.
60611 //
60612 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
60613 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
60614 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
60615 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
60616 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
60617 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
60618 // USE OR OTHER DEALINGS IN THE SOFTWARE.
60619
60620 // NOTE: These type checking functions intentionally don't use `instanceof`
60621 // because it is fragile and can be easily faked with `Object.create()`.
60622
60623 function isArray(arg) {
60624 if (Array.isArray) {
60625 return Array.isArray(arg);
60626 }
60627 return objectToString(arg) === '[object Array]';
60628 }
60629 exports.isArray = isArray;
60630
60631 function isBoolean(arg) {
60632 return typeof arg === 'boolean';
60633 }
60634 exports.isBoolean = isBoolean;
60635
60636 function isNull(arg) {
60637 return arg === null;
60638 }
60639 exports.isNull = isNull;
60640
60641 function isNullOrUndefined(arg) {
60642 return arg == null;
60643 }
60644 exports.isNullOrUndefined = isNullOrUndefined;
60645
60646 function isNumber(arg) {
60647 return typeof arg === 'number';
60648 }
60649 exports.isNumber = isNumber;
60650
60651 function isString(arg) {
60652 return typeof arg === 'string';
60653 }
60654 exports.isString = isString;
60655
60656 function isSymbol(arg) {
60657 return typeof arg === 'symbol';
60658 }
60659 exports.isSymbol = isSymbol;
60660
60661 function isUndefined(arg) {
60662 return arg === void 0;
60663 }
60664 exports.isUndefined = isUndefined;
60665
60666 function isRegExp(re) {
60667 return objectToString(re) === '[object RegExp]';
60668 }
60669 exports.isRegExp = isRegExp;
60670
60671 function isObject(arg) {
60672 return typeof arg === 'object' && arg !== null;
60673 }
60674 exports.isObject = isObject;
60675
60676 function isDate(d) {
60677 return objectToString(d) === '[object Date]';
60678 }
60679 exports.isDate = isDate;
60680
60681 function isError(e) {
60682 return (objectToString(e) === '[object Error]' || e instanceof Error);
60683 }
60684 exports.isError = isError;
60685
60686 function isFunction(arg) {
60687 return typeof arg === 'function';
60688 }
60689 exports.isFunction = isFunction;
60690
60691 function isPrimitive(arg) {
60692 return arg === null ||
60693 typeof arg === 'boolean' ||
60694 typeof arg === 'number' ||
60695 typeof arg === 'string' ||
60696 typeof arg === 'symbol' || // ES6 symbol
60697 typeof arg === 'undefined';
60698 }
60699 exports.isPrimitive = isPrimitive;
60700
60701 exports.isBuffer = Buffer.isBuffer;
60702
60703 function objectToString(o) {
60704 return Object.prototype.toString.call(o);
60705 }
60706
60707 }).call(this,{"isBuffer":require("../../is-buffer/index.js")})
60708 },{"../../is-buffer/index.js":96}],50:[function(require,module,exports){
60709 (function (Buffer){
60710 var elliptic = require('elliptic');
60711 var BN = require('bn.js');
60712
60713 module.exports = function createECDH(curve) {
60714 return new ECDH(curve);
60715 };
60716
60717 var aliases = {
60718 secp256k1: {
60719 name: 'secp256k1',
60720 byteLength: 32
60721 },
60722 secp224r1: {
60723 name: 'p224',
60724 byteLength: 28
60725 },
60726 prime256v1: {
60727 name: 'p256',
60728 byteLength: 32
60729 },
60730 prime192v1: {
60731 name: 'p192',
60732 byteLength: 24
60733 },
60734 ed25519: {
60735 name: 'ed25519',
60736 byteLength: 32
60737 },
60738 secp384r1: {
60739 name: 'p384',
60740 byteLength: 48
60741 },
60742 secp521r1: {
60743 name: 'p521',
60744 byteLength: 66
60745 }
60746 };
60747
60748 aliases.p224 = aliases.secp224r1;
60749 aliases.p256 = aliases.secp256r1 = aliases.prime256v1;
60750 aliases.p192 = aliases.secp192r1 = aliases.prime192v1;
60751 aliases.p384 = aliases.secp384r1;
60752 aliases.p521 = aliases.secp521r1;
60753
60754 function ECDH(curve) {
60755 this.curveType = aliases[curve];
60756 if (!this.curveType ) {
60757 this.curveType = {
60758 name: curve
60759 };
60760 }
60761 this.curve = new elliptic.ec(this.curveType.name);
60762 this.keys = void 0;
60763 }
60764
60765 ECDH.prototype.generateKeys = function (enc, format) {
60766 this.keys = this.curve.genKeyPair();
60767 return this.getPublicKey(enc, format);
60768 };
60769
60770 ECDH.prototype.computeSecret = function (other, inenc, enc) {
60771 inenc = inenc || 'utf8';
60772 if (!Buffer.isBuffer(other)) {
60773 other = new Buffer(other, inenc);
60774 }
60775 var otherPub = this.curve.keyFromPublic(other).getPublic();
60776 var out = otherPub.mul(this.keys.getPrivate()).getX();
60777 return formatReturnValue(out, enc, this.curveType.byteLength);
60778 };
60779
60780 ECDH.prototype.getPublicKey = function (enc, format) {
60781 var key = this.keys.getPublic(format === 'compressed', true);
60782 if (format === 'hybrid') {
60783 if (key[key.length - 1] % 2) {
60784 key[0] = 7;
60785 } else {
60786 key [0] = 6;
60787 }
60788 }
60789 return formatReturnValue(key, enc);
60790 };
60791
60792 ECDH.prototype.getPrivateKey = function (enc) {
60793 return formatReturnValue(this.keys.getPrivate(), enc);
60794 };
60795
60796 ECDH.prototype.setPublicKey = function (pub, enc) {
60797 enc = enc || 'utf8';
60798 if (!Buffer.isBuffer(pub)) {
60799 pub = new Buffer(pub, enc);
60800 }
60801 this.keys._importPublic(pub);
60802 return this;
60803 };
60804
60805 ECDH.prototype.setPrivateKey = function (priv, enc) {
60806 enc = enc || 'utf8';
60807 if (!Buffer.isBuffer(priv)) {
60808 priv = new Buffer(priv, enc);
60809 }
60810 var _priv = new BN(priv);
60811 _priv = _priv.toString(16);
60812 this.keys._importPrivate(_priv);
60813 return this;
60814 };
60815
60816 function formatReturnValue(bn, enc, len) {
60817 if (!Array.isArray(bn)) {
60818 bn = bn.toArray();
60819 }
60820 var buf = new Buffer(bn);
60821 if (len && buf.length < len) {
60822 var zeros = new Buffer(len - buf.length);
60823 zeros.fill(0);
60824 buf = Buffer.concat([zeros, buf]);
60825 }
60826 if (!enc) {
60827 return buf;
60828 } else {
60829 return buf.toString(enc);
60830 }
60831 }
60832
60833 }).call(this,require("buffer").Buffer)
60834 },{"bn.js":17,"buffer":47,"elliptic":67}],51:[function(require,module,exports){
60835 (function (Buffer){
60836 'use strict'
60837 var inherits = require('inherits')
60838 var md5 = require('./md5')
60839 var RIPEMD160 = require('ripemd160')
60840 var sha = require('sha.js')
60841
60842 var Base = require('cipher-base')
60843
60844 function HashNoConstructor (hash) {
60845 Base.call(this, 'digest')
60846
60847 this._hash = hash
60848 this.buffers = []
60849 }
60850
60851 inherits(HashNoConstructor, Base)
60852
60853 HashNoConstructor.prototype._update = function (data) {
60854 this.buffers.push(data)
60855 }
60856
60857 HashNoConstructor.prototype._final = function () {
60858 var buf = Buffer.concat(this.buffers)
60859 var r = this._hash(buf)
60860 this.buffers = null
60861
60862 return r
60863 }
60864
60865 function Hash (hash) {
60866 Base.call(this, 'digest')
60867
60868 this._hash = hash
60869 }
60870
60871 inherits(Hash, Base)
60872
60873 Hash.prototype._update = function (data) {
60874 this._hash.update(data)
60875 }
60876
60877 Hash.prototype._final = function () {
60878 return this._hash.digest()
60879 }
60880
60881 module.exports = function createHash (alg) {
60882 alg = alg.toLowerCase()
60883 if (alg === 'md5') return new HashNoConstructor(md5)
60884 if (alg === 'rmd160' || alg === 'ripemd160') return new Hash(new RIPEMD160())
60885
60886 return new Hash(sha(alg))
60887 }
60888
60889 }).call(this,require("buffer").Buffer)
60890 },{"./md5":53,"buffer":47,"cipher-base":48,"inherits":95,"ripemd160":133,"sha.js":136}],52:[function(require,module,exports){
60891 (function (Buffer){
60892 'use strict'
60893 var intSize = 4
60894 var zeroBuffer = new Buffer(intSize)
60895 zeroBuffer.fill(0)
60896
60897 var charSize = 8
60898 var hashSize = 16
60899
60900 function toArray (buf) {
60901 if ((buf.length % intSize) !== 0) {
60902 var len = buf.length + (intSize - (buf.length % intSize))
60903 buf = Buffer.concat([buf, zeroBuffer], len)
60904 }
60905
60906 var arr = new Array(buf.length >>> 2)
60907 for (var i = 0, j = 0; i < buf.length; i += intSize, j++) {
60908 arr[j] = buf.readInt32LE(i)
60909 }
60910
60911 return arr
60912 }
60913
60914 module.exports = function hash (buf, fn) {
60915 var arr = fn(toArray(buf), buf.length * charSize)
60916 buf = new Buffer(hashSize)
60917 for (var i = 0; i < arr.length; i++) {
60918 buf.writeInt32LE(arr[i], i << 2, true)
60919 }
60920 return buf
60921 }
60922
60923 }).call(this,require("buffer").Buffer)
60924 },{"buffer":47}],53:[function(require,module,exports){
60925 'use strict'
60926 /*
60927 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
60928 * Digest Algorithm, as defined in RFC 1321.
60929 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
60930 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
60931 * Distributed under the BSD License
60932 * See http://pajhome.org.uk/crypt/md5 for more info.
60933 */
60934
60935 var makeHash = require('./make-hash')
60936
60937 /*
60938 * Calculate the MD5 of an array of little-endian words, and a bit length
60939 */
60940 function core_md5 (x, len) {
60941 /* append padding */
60942 x[len >> 5] |= 0x80 << ((len) % 32)
60943 x[(((len + 64) >>> 9) << 4) + 14] = len
60944
60945 var a = 1732584193
60946 var b = -271733879
60947 var c = -1732584194
60948 var d = 271733878
60949
60950 for (var i = 0; i < x.length; i += 16) {
60951 var olda = a
60952 var oldb = b
60953 var oldc = c
60954 var oldd = d
60955
60956 a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936)
60957 d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586)
60958 c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819)
60959 b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330)
60960 a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897)
60961 d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426)
60962 c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341)
60963 b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983)
60964 a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416)
60965 d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417)
60966 c = md5_ff(c, d, a, b, x[i + 10], 17, -42063)
60967 b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162)
60968 a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682)
60969 d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101)
60970 c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290)
60971 b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329)
60972
60973 a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510)
60974 d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632)
60975 c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713)
60976 b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302)
60977 a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691)
60978 d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083)
60979 c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335)
60980 b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848)
60981 a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438)
60982 d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690)
60983 c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961)
60984 b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501)
60985 a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467)
60986 d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784)
60987 c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473)
60988 b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734)
60989
60990 a = md5_hh(a, b, c, d, x[i + 5], 4, -378558)
60991 d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463)
60992 c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562)
60993 b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556)
60994 a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060)
60995 d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353)
60996 c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632)
60997 b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640)
60998 a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174)
60999 d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222)
61000 c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979)
61001 b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189)
61002 a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487)
61003 d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835)
61004 c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520)
61005 b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651)
61006
61007 a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844)
61008 d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415)
61009 c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905)
61010 b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055)
61011 a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571)
61012 d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606)
61013 c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523)
61014 b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799)
61015 a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359)
61016 d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744)
61017 c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380)
61018 b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649)
61019 a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070)
61020 d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379)
61021 c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259)
61022 b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551)
61023
61024 a = safe_add(a, olda)
61025 b = safe_add(b, oldb)
61026 c = safe_add(c, oldc)
61027 d = safe_add(d, oldd)
61028 }
61029
61030 return [a, b, c, d]
61031 }
61032
61033 /*
61034 * These functions implement the four basic operations the algorithm uses.
61035 */
61036 function md5_cmn (q, a, b, x, s, t) {
61037 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
61038 }
61039
61040 function md5_ff (a, b, c, d, x, s, t) {
61041 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t)
61042 }
61043
61044 function md5_gg (a, b, c, d, x, s, t) {
61045 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t)
61046 }
61047
61048 function md5_hh (a, b, c, d, x, s, t) {
61049 return md5_cmn(b ^ c ^ d, a, b, x, s, t)
61050 }
61051
61052 function md5_ii (a, b, c, d, x, s, t) {
61053 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t)
61054 }
61055
61056 /*
61057 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
61058 * to work around bugs in some JS interpreters.
61059 */
61060 function safe_add (x, y) {
61061 var lsw = (x & 0xFFFF) + (y & 0xFFFF)
61062 var msw = (x >> 16) + (y >> 16) + (lsw >> 16)
61063 return (msw << 16) | (lsw & 0xFFFF)
61064 }
61065
61066 /*
61067 * Bitwise rotate a 32-bit number to the left.
61068 */
61069 function bit_rol (num, cnt) {
61070 return (num << cnt) | (num >>> (32 - cnt))
61071 }
61072
61073 module.exports = function md5 (buf) {
61074 return makeHash(buf, core_md5)
61075 }
61076
61077 },{"./make-hash":52}],54:[function(require,module,exports){
61078 'use strict'
61079 var inherits = require('inherits')
61080 var Legacy = require('./legacy')
61081 var Base = require('cipher-base')
61082 var Buffer = require('safe-buffer').Buffer
61083 var md5 = require('create-hash/md5')
61084 var RIPEMD160 = require('ripemd160')
61085
61086 var sha = require('sha.js')
61087
61088 var ZEROS = Buffer.alloc(128)
61089
61090 function Hmac (alg, key) {
61091 Base.call(this, 'digest')
61092 if (typeof key === 'string') {
61093 key = Buffer.from(key)
61094 }
61095
61096 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
61097
61098 this._alg = alg
61099 this._key = key
61100 if (key.length > blocksize) {
61101 var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
61102 key = hash.update(key).digest()
61103 } else if (key.length < blocksize) {
61104 key = Buffer.concat([key, ZEROS], blocksize)
61105 }
61106
61107 var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
61108 var opad = this._opad = Buffer.allocUnsafe(blocksize)
61109
61110 for (var i = 0; i < blocksize; i++) {
61111 ipad[i] = key[i] ^ 0x36
61112 opad[i] = key[i] ^ 0x5C
61113 }
61114 this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
61115 this._hash.update(ipad)
61116 }
61117
61118 inherits(Hmac, Base)
61119
61120 Hmac.prototype._update = function (data) {
61121 this._hash.update(data)
61122 }
61123
61124 Hmac.prototype._final = function () {
61125 var h = this._hash.digest()
61126 var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)
61127 return hash.update(this._opad).update(h).digest()
61128 }
61129
61130 module.exports = function createHmac (alg, key) {
61131 alg = alg.toLowerCase()
61132 if (alg === 'rmd160' || alg === 'ripemd160') {
61133 return new Hmac('rmd160', key)
61134 }
61135 if (alg === 'md5') {
61136 return new Legacy(md5, key)
61137 }
61138 return new Hmac(alg, key)
61139 }
61140
61141 },{"./legacy":55,"cipher-base":48,"create-hash/md5":53,"inherits":95,"ripemd160":133,"safe-buffer":134,"sha.js":136}],55:[function(require,module,exports){
61142 'use strict'
61143 var inherits = require('inherits')
61144 var Buffer = require('safe-buffer').Buffer
61145
61146 var Base = require('cipher-base')
61147
61148 var ZEROS = Buffer.alloc(128)
61149 var blocksize = 64
61150
61151 function Hmac (alg, key) {
61152 Base.call(this, 'digest')
61153 if (typeof key === 'string') {
61154 key = Buffer.from(key)
61155 }
61156
61157 this._alg = alg
61158 this._key = key
61159
61160 if (key.length > blocksize) {
61161 key = alg(key)
61162 } else if (key.length < blocksize) {
61163 key = Buffer.concat([key, ZEROS], blocksize)
61164 }
61165
61166 var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
61167 var opad = this._opad = Buffer.allocUnsafe(blocksize)
61168
61169 for (var i = 0; i < blocksize; i++) {
61170 ipad[i] = key[i] ^ 0x36
61171 opad[i] = key[i] ^ 0x5C
61172 }
61173
61174 this._hash = [ipad]
61175 }
61176
61177 inherits(Hmac, Base)
61178
61179 Hmac.prototype._update = function (data) {
61180 this._hash.push(data)
61181 }
61182
61183 Hmac.prototype._final = function () {
61184 var h = this._alg(Buffer.concat(this._hash))
61185 return this._alg(Buffer.concat([this._opad, h]))
61186 }
61187 module.exports = Hmac
61188
61189 },{"cipher-base":48,"inherits":95,"safe-buffer":134}],56:[function(require,module,exports){
61190 'use strict'
61191
61192 exports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes')
61193 exports.createHash = exports.Hash = require('create-hash')
61194 exports.createHmac = exports.Hmac = require('create-hmac')
61195
61196 var hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(Object.keys(require('browserify-sign/algos')))
61197 exports.getHashes = function () {
61198 return hashes
61199 }
61200
61201 var p = require('pbkdf2')
61202 exports.pbkdf2 = p.pbkdf2
61203 exports.pbkdf2Sync = p.pbkdf2Sync
61204
61205 var aes = require('browserify-cipher')
61206 ;[
61207 'Cipher',
61208 'createCipher',
61209 'Cipheriv',
61210 'createCipheriv',
61211 'Decipher',
61212 'createDecipher',
61213 'Decipheriv',
61214 'createDecipheriv',
61215 'getCiphers',
61216 'listCiphers'
61217 ].forEach(function (key) {
61218 exports[key] = aes[key]
61219 })
61220
61221 var dh = require('diffie-hellman')
61222 ;[
61223 'DiffieHellmanGroup',
61224 'createDiffieHellmanGroup',
61225 'getDiffieHellman',
61226 'createDiffieHellman',
61227 'DiffieHellman'
61228 ].forEach(function (key) {
61229 exports[key] = dh[key]
61230 })
61231
61232 var sign = require('browserify-sign')
61233 ;[
61234 'createSign',
61235 'Sign',
61236 'createVerify',
61237 'Verify'
61238 ].forEach(function (key) {
61239 exports[key] = sign[key]
61240 })
61241
61242 exports.createECDH = require('create-ecdh')
61243
61244 var publicEncrypt = require('public-encrypt')
61245
61246 ;[
61247 'publicEncrypt',
61248 'privateEncrypt',
61249 'publicDecrypt',
61250 'privateDecrypt'
61251 ].forEach(function (key) {
61252 exports[key] = publicEncrypt[key]
61253 })
61254
61255 // the least I can do is make error messages for the rest of the node.js/crypto api.
61256 ;[
61257 'createCredentials'
61258 ].forEach(function (name) {
61259 exports[name] = function () {
61260 throw new Error([
61261 'sorry, ' + name + ' is not implemented yet',
61262 'we accept pull requests',
61263 'https://github.com/crypto-browserify/crypto-browserify'
61264 ].join('\n'))
61265 }
61266 })
61267
61268 },{"browserify-cipher":35,"browserify-sign":42,"browserify-sign/algos":39,"create-ecdh":50,"create-hash":51,"create-hmac":54,"diffie-hellman":63,"pbkdf2":106,"public-encrypt":113,"randombytes":119}],57:[function(require,module,exports){
61269 'use strict';
61270
61271 exports.utils = require('./des/utils');
61272 exports.Cipher = require('./des/cipher');
61273 exports.DES = require('./des/des');
61274 exports.CBC = require('./des/cbc');
61275 exports.EDE = require('./des/ede');
61276
61277 },{"./des/cbc":58,"./des/cipher":59,"./des/des":60,"./des/ede":61,"./des/utils":62}],58:[function(require,module,exports){
61278 'use strict';
61279
61280 var assert = require('minimalistic-assert');
61281 var inherits = require('inherits');
61282
61283 var proto = {};
61284
61285 function CBCState(iv) {
61286 assert.equal(iv.length, 8, 'Invalid IV length');
61287
61288 this.iv = new Array(8);
61289 for (var i = 0; i < this.iv.length; i++)
61290 this.iv[i] = iv[i];
61291 }
61292
61293 function instantiate(Base) {
61294 function CBC(options) {
61295 Base.call(this, options);
61296 this._cbcInit();
61297 }
61298 inherits(CBC, Base);
61299
61300 var keys = Object.keys(proto);
61301 for (var i = 0; i < keys.length; i++) {
61302 var key = keys[i];
61303 CBC.prototype[key] = proto[key];
61304 }
61305
61306 CBC.create = function create(options) {
61307 return new CBC(options);
61308 };
61309
61310 return CBC;
61311 }
61312
61313 exports.instantiate = instantiate;
61314
61315 proto._cbcInit = function _cbcInit() {
61316 var state = new CBCState(this.options.iv);
61317 this._cbcState = state;
61318 };
61319
61320 proto._update = function _update(inp, inOff, out, outOff) {
61321 var state = this._cbcState;
61322 var superProto = this.constructor.super_.prototype;
61323
61324 var iv = state.iv;
61325 if (this.type === 'encrypt') {
61326 for (var i = 0; i < this.blockSize; i++)
61327 iv[i] ^= inp[inOff + i];
61328
61329 superProto._update.call(this, iv, 0, out, outOff);
61330
61331 for (var i = 0; i < this.blockSize; i++)
61332 iv[i] = out[outOff + i];
61333 } else {
61334 superProto._update.call(this, inp, inOff, out, outOff);
61335
61336 for (var i = 0; i < this.blockSize; i++)
61337 out[outOff + i] ^= iv[i];
61338
61339 for (var i = 0; i < this.blockSize; i++)
61340 iv[i] = inp[inOff + i];
61341 }
61342 };
61343
61344 },{"inherits":95,"minimalistic-assert":99}],59:[function(require,module,exports){
61345 'use strict';
61346
61347 var assert = require('minimalistic-assert');
61348
61349 function Cipher(options) {
61350 this.options = options;
61351
61352 this.type = this.options.type;
61353 this.blockSize = 8;
61354 this._init();
61355
61356 this.buffer = new Array(this.blockSize);
61357 this.bufferOff = 0;
61358 }
61359 module.exports = Cipher;
61360
61361 Cipher.prototype._init = function _init() {
61362 // Might be overrided
61363 };
61364
61365 Cipher.prototype.update = function update(data) {
61366 if (data.length === 0)
61367 return [];
61368
61369 if (this.type === 'decrypt')
61370 return this._updateDecrypt(data);
61371 else
61372 return this._updateEncrypt(data);
61373 };
61374
61375 Cipher.prototype._buffer = function _buffer(data, off) {
61376 // Append data to buffer
61377 var min = Math.min(this.buffer.length - this.bufferOff, data.length - off);
61378 for (var i = 0; i < min; i++)
61379 this.buffer[this.bufferOff + i] = data[off + i];
61380 this.bufferOff += min;
61381
61382 // Shift next
61383 return min;
61384 };
61385
61386 Cipher.prototype._flushBuffer = function _flushBuffer(out, off) {
61387 this._update(this.buffer, 0, out, off);
61388 this.bufferOff = 0;
61389 return this.blockSize;
61390 };
61391
61392 Cipher.prototype._updateEncrypt = function _updateEncrypt(data) {
61393 var inputOff = 0;
61394 var outputOff = 0;
61395
61396 var count = ((this.bufferOff + data.length) / this.blockSize) | 0;
61397 var out = new Array(count * this.blockSize);
61398
61399 if (this.bufferOff !== 0) {
61400 inputOff += this._buffer(data, inputOff);
61401
61402 if (this.bufferOff === this.buffer.length)
61403 outputOff += this._flushBuffer(out, outputOff);
61404 }
61405
61406 // Write blocks
61407 var max = data.length - ((data.length - inputOff) % this.blockSize);
61408 for (; inputOff < max; inputOff += this.blockSize) {
61409 this._update(data, inputOff, out, outputOff);
61410 outputOff += this.blockSize;
61411 }
61412
61413 // Queue rest
61414 for (; inputOff < data.length; inputOff++, this.bufferOff++)
61415 this.buffer[this.bufferOff] = data[inputOff];
61416
61417 return out;
61418 };
61419
61420 Cipher.prototype._updateDecrypt = function _updateDecrypt(data) {
61421 var inputOff = 0;
61422 var outputOff = 0;
61423
61424 var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1;
61425 var out = new Array(count * this.blockSize);
61426
61427 // TODO(indutny): optimize it, this is far from optimal
61428 for (; count > 0; count--) {
61429 inputOff += this._buffer(data, inputOff);
61430 outputOff += this._flushBuffer(out, outputOff);
61431 }
61432
61433 // Buffer rest of the input
61434 inputOff += this._buffer(data, inputOff);
61435
61436 return out;
61437 };
61438
61439 Cipher.prototype.final = function final(buffer) {
61440 var first;
61441 if (buffer)
61442 first = this.update(buffer);
61443
61444 var last;
61445 if (this.type === 'encrypt')
61446 last = this._finalEncrypt();
61447 else
61448 last = this._finalDecrypt();
61449
61450 if (first)
61451 return first.concat(last);
61452 else
61453 return last;
61454 };
61455
61456 Cipher.prototype._pad = function _pad(buffer, off) {
61457 if (off === 0)
61458 return false;
61459
61460 while (off < buffer.length)
61461 buffer[off++] = 0;
61462
61463 return true;
61464 };
61465
61466 Cipher.prototype._finalEncrypt = function _finalEncrypt() {
61467 if (!this._pad(this.buffer, this.bufferOff))
61468 return [];
61469
61470 var out = new Array(this.blockSize);
61471 this._update(this.buffer, 0, out, 0);
61472 return out;
61473 };
61474
61475 Cipher.prototype._unpad = function _unpad(buffer) {
61476 return buffer;
61477 };
61478
61479 Cipher.prototype._finalDecrypt = function _finalDecrypt() {
61480 assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt');
61481 var out = new Array(this.blockSize);
61482 this._flushBuffer(out, 0);
61483
61484 return this._unpad(out);
61485 };
61486
61487 },{"minimalistic-assert":99}],60:[function(require,module,exports){
61488 'use strict';
61489
61490 var assert = require('minimalistic-assert');
61491 var inherits = require('inherits');
61492
61493 var des = require('../des');
61494 var utils = des.utils;
61495 var Cipher = des.Cipher;
61496
61497 function DESState() {
61498 this.tmp = new Array(2);
61499 this.keys = null;
61500 }
61501
61502 function DES(options) {
61503 Cipher.call(this, options);
61504
61505 var state = new DESState();
61506 this._desState = state;
61507
61508 this.deriveKeys(state, options.key);
61509 }
61510 inherits(DES, Cipher);
61511 module.exports = DES;
61512
61513 DES.create = function create(options) {
61514 return new DES(options);
61515 };
61516
61517 var shiftTable = [
61518 1, 1, 2, 2, 2, 2, 2, 2,
61519 1, 2, 2, 2, 2, 2, 2, 1
61520 ];
61521
61522 DES.prototype.deriveKeys = function deriveKeys(state, key) {
61523 state.keys = new Array(16 * 2);
61524
61525 assert.equal(key.length, this.blockSize, 'Invalid key length');
61526
61527 var kL = utils.readUInt32BE(key, 0);
61528 var kR = utils.readUInt32BE(key, 4);
61529
61530 utils.pc1(kL, kR, state.tmp, 0);
61531 kL = state.tmp[0];
61532 kR = state.tmp[1];
61533 for (var i = 0; i < state.keys.length; i += 2) {
61534 var shift = shiftTable[i >>> 1];
61535 kL = utils.r28shl(kL, shift);
61536 kR = utils.r28shl(kR, shift);
61537 utils.pc2(kL, kR, state.keys, i);
61538 }
61539 };
61540
61541 DES.prototype._update = function _update(inp, inOff, out, outOff) {
61542 var state = this._desState;
61543
61544 var l = utils.readUInt32BE(inp, inOff);
61545 var r = utils.readUInt32BE(inp, inOff + 4);
61546
61547 // Initial Permutation
61548 utils.ip(l, r, state.tmp, 0);
61549 l = state.tmp[0];
61550 r = state.tmp[1];
61551
61552 if (this.type === 'encrypt')
61553 this._encrypt(state, l, r, state.tmp, 0);
61554 else
61555 this._decrypt(state, l, r, state.tmp, 0);
61556
61557 l = state.tmp[0];
61558 r = state.tmp[1];
61559
61560 utils.writeUInt32BE(out, l, outOff);
61561 utils.writeUInt32BE(out, r, outOff + 4);
61562 };
61563
61564 DES.prototype._pad = function _pad(buffer, off) {
61565 var value = buffer.length - off;
61566 for (var i = off; i < buffer.length; i++)
61567 buffer[i] = value;
61568
61569 return true;
61570 };
61571
61572 DES.prototype._unpad = function _unpad(buffer) {
61573 var pad = buffer[buffer.length - 1];
61574 for (var i = buffer.length - pad; i < buffer.length; i++)
61575 assert.equal(buffer[i], pad);
61576
61577 return buffer.slice(0, buffer.length - pad);
61578 };
61579
61580 DES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) {
61581 var l = lStart;
61582 var r = rStart;
61583
61584 // Apply f() x16 times
61585 for (var i = 0; i < state.keys.length; i += 2) {
61586 var keyL = state.keys[i];
61587 var keyR = state.keys[i + 1];
61588
61589 // f(r, k)
61590 utils.expand(r, state.tmp, 0);
61591
61592 keyL ^= state.tmp[0];
61593 keyR ^= state.tmp[1];
61594 var s = utils.substitute(keyL, keyR);
61595 var f = utils.permute(s);
61596
61597 var t = r;
61598 r = (l ^ f) >>> 0;
61599 l = t;
61600 }
61601
61602 // Reverse Initial Permutation
61603 utils.rip(r, l, out, off);
61604 };
61605
61606 DES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) {
61607 var l = rStart;
61608 var r = lStart;
61609
61610 // Apply f() x16 times
61611 for (var i = state.keys.length - 2; i >= 0; i -= 2) {
61612 var keyL = state.keys[i];
61613 var keyR = state.keys[i + 1];
61614
61615 // f(r, k)
61616 utils.expand(l, state.tmp, 0);
61617
61618 keyL ^= state.tmp[0];
61619 keyR ^= state.tmp[1];
61620 var s = utils.substitute(keyL, keyR);
61621 var f = utils.permute(s);
61622
61623 var t = l;
61624 l = (r ^ f) >>> 0;
61625 r = t;
61626 }
61627
61628 // Reverse Initial Permutation
61629 utils.rip(l, r, out, off);
61630 };
61631
61632 },{"../des":57,"inherits":95,"minimalistic-assert":99}],61:[function(require,module,exports){
61633 'use strict';
61634
61635 var assert = require('minimalistic-assert');
61636 var inherits = require('inherits');
61637
61638 var des = require('../des');
61639 var Cipher = des.Cipher;
61640 var DES = des.DES;
61641
61642 function EDEState(type, key) {
61643 assert.equal(key.length, 24, 'Invalid key length');
61644
61645 var k1 = key.slice(0, 8);
61646 var k2 = key.slice(8, 16);
61647 var k3 = key.slice(16, 24);
61648
61649 if (type === 'encrypt') {
61650 this.ciphers = [
61651 DES.create({ type: 'encrypt', key: k1 }),
61652 DES.create({ type: 'decrypt', key: k2 }),
61653 DES.create({ type: 'encrypt', key: k3 })
61654 ];
61655 } else {
61656 this.ciphers = [
61657 DES.create({ type: 'decrypt', key: k3 }),
61658 DES.create({ type: 'encrypt', key: k2 }),
61659 DES.create({ type: 'decrypt', key: k1 })
61660 ];
61661 }
61662 }
61663
61664 function EDE(options) {
61665 Cipher.call(this, options);
61666
61667 var state = new EDEState(this.type, this.options.key);
61668 this._edeState = state;
61669 }
61670 inherits(EDE, Cipher);
61671
61672 module.exports = EDE;
61673
61674 EDE.create = function create(options) {
61675 return new EDE(options);
61676 };
61677
61678 EDE.prototype._update = function _update(inp, inOff, out, outOff) {
61679 var state = this._edeState;
61680
61681 state.ciphers[0]._update(inp, inOff, out, outOff);
61682 state.ciphers[1]._update(out, outOff, out, outOff);
61683 state.ciphers[2]._update(out, outOff, out, outOff);
61684 };
61685
61686 EDE.prototype._pad = DES.prototype._pad;
61687 EDE.prototype._unpad = DES.prototype._unpad;
61688
61689 },{"../des":57,"inherits":95,"minimalistic-assert":99}],62:[function(require,module,exports){
61690 'use strict';
61691
61692 exports.readUInt32BE = function readUInt32BE(bytes, off) {
61693 var res = (bytes[0 + off] << 24) |
61694 (bytes[1 + off] << 16) |
61695 (bytes[2 + off] << 8) |
61696 bytes[3 + off];
61697 return res >>> 0;
61698 };
61699
61700 exports.writeUInt32BE = function writeUInt32BE(bytes, value, off) {
61701 bytes[0 + off] = value >>> 24;
61702 bytes[1 + off] = (value >>> 16) & 0xff;
61703 bytes[2 + off] = (value >>> 8) & 0xff;
61704 bytes[3 + off] = value & 0xff;
61705 };
61706
61707 exports.ip = function ip(inL, inR, out, off) {
61708 var outL = 0;
61709 var outR = 0;
61710
61711 for (var i = 6; i >= 0; i -= 2) {
61712 for (var j = 0; j <= 24; j += 8) {
61713 outL <<= 1;
61714 outL |= (inR >>> (j + i)) & 1;
61715 }
61716 for (var j = 0; j <= 24; j += 8) {
61717 outL <<= 1;
61718 outL |= (inL >>> (j + i)) & 1;
61719 }
61720 }
61721
61722 for (var i = 6; i >= 0; i -= 2) {
61723 for (var j = 1; j <= 25; j += 8) {
61724 outR <<= 1;
61725 outR |= (inR >>> (j + i)) & 1;
61726 }
61727 for (var j = 1; j <= 25; j += 8) {
61728 outR <<= 1;
61729 outR |= (inL >>> (j + i)) & 1;
61730 }
61731 }
61732
61733 out[off + 0] = outL >>> 0;
61734 out[off + 1] = outR >>> 0;
61735 };
61736
61737 exports.rip = function rip(inL, inR, out, off) {
61738 var outL = 0;
61739 var outR = 0;
61740
61741 for (var i = 0; i < 4; i++) {
61742 for (var j = 24; j >= 0; j -= 8) {
61743 outL <<= 1;
61744 outL |= (inR >>> (j + i)) & 1;
61745 outL <<= 1;
61746 outL |= (inL >>> (j + i)) & 1;
61747 }
61748 }
61749 for (var i = 4; i < 8; i++) {
61750 for (var j = 24; j >= 0; j -= 8) {
61751 outR <<= 1;
61752 outR |= (inR >>> (j + i)) & 1;
61753 outR <<= 1;
61754 outR |= (inL >>> (j + i)) & 1;
61755 }
61756 }
61757
61758 out[off + 0] = outL >>> 0;
61759 out[off + 1] = outR >>> 0;
61760 };
61761
61762 exports.pc1 = function pc1(inL, inR, out, off) {
61763 var outL = 0;
61764 var outR = 0;
61765
61766 // 7, 15, 23, 31, 39, 47, 55, 63
61767 // 6, 14, 22, 30, 39, 47, 55, 63
61768 // 5, 13, 21, 29, 39, 47, 55, 63
61769 // 4, 12, 20, 28
61770 for (var i = 7; i >= 5; i--) {
61771 for (var j = 0; j <= 24; j += 8) {
61772 outL <<= 1;
61773 outL |= (inR >> (j + i)) & 1;
61774 }
61775 for (var j = 0; j <= 24; j += 8) {
61776 outL <<= 1;
61777 outL |= (inL >> (j + i)) & 1;
61778 }
61779 }
61780 for (var j = 0; j <= 24; j += 8) {
61781 outL <<= 1;
61782 outL |= (inR >> (j + i)) & 1;
61783 }
61784
61785 // 1, 9, 17, 25, 33, 41, 49, 57
61786 // 2, 10, 18, 26, 34, 42, 50, 58
61787 // 3, 11, 19, 27, 35, 43, 51, 59
61788 // 36, 44, 52, 60
61789 for (var i = 1; i <= 3; i++) {
61790 for (var j = 0; j <= 24; j += 8) {
61791 outR <<= 1;
61792 outR |= (inR >> (j + i)) & 1;
61793 }
61794 for (var j = 0; j <= 24; j += 8) {
61795 outR <<= 1;
61796 outR |= (inL >> (j + i)) & 1;
61797 }
61798 }
61799 for (var j = 0; j <= 24; j += 8) {
61800 outR <<= 1;
61801 outR |= (inL >> (j + i)) & 1;
61802 }
61803
61804 out[off + 0] = outL >>> 0;
61805 out[off + 1] = outR >>> 0;
61806 };
61807
61808 exports.r28shl = function r28shl(num, shift) {
61809 return ((num << shift) & 0xfffffff) | (num >>> (28 - shift));
61810 };
61811
61812 var pc2table = [
61813 // inL => outL
61814 14, 11, 17, 4, 27, 23, 25, 0,
61815 13, 22, 7, 18, 5, 9, 16, 24,
61816 2, 20, 12, 21, 1, 8, 15, 26,
61817
61818 // inR => outR
61819 15, 4, 25, 19, 9, 1, 26, 16,
61820 5, 11, 23, 8, 12, 7, 17, 0,
61821 22, 3, 10, 14, 6, 20, 27, 24
61822 ];
61823
61824 exports.pc2 = function pc2(inL, inR, out, off) {
61825 var outL = 0;
61826 var outR = 0;
61827
61828 var len = pc2table.length >>> 1;
61829 for (var i = 0; i < len; i++) {
61830 outL <<= 1;
61831 outL |= (inL >>> pc2table[i]) & 0x1;
61832 }
61833 for (var i = len; i < pc2table.length; i++) {
61834 outR <<= 1;
61835 outR |= (inR >>> pc2table[i]) & 0x1;
61836 }
61837
61838 out[off + 0] = outL >>> 0;
61839 out[off + 1] = outR >>> 0;
61840 };
61841
61842 exports.expand = function expand(r, out, off) {
61843 var outL = 0;
61844 var outR = 0;
61845
61846 outL = ((r & 1) << 5) | (r >>> 27);
61847 for (var i = 23; i >= 15; i -= 4) {
61848 outL <<= 6;
61849 outL |= (r >>> i) & 0x3f;
61850 }
61851 for (var i = 11; i >= 3; i -= 4) {
61852 outR |= (r >>> i) & 0x3f;
61853 outR <<= 6;
61854 }
61855 outR |= ((r & 0x1f) << 1) | (r >>> 31);
61856
61857 out[off + 0] = outL >>> 0;
61858 out[off + 1] = outR >>> 0;
61859 };
61860
61861 var sTable = [
61862 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,
61863 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,
61864 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,
61865 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13,
61866
61867 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,
61868 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,
61869 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,
61870 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9,
61871
61872 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,
61873 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,
61874 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,
61875 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12,
61876
61877 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,
61878 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,
61879 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,
61880 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14,
61881
61882 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,
61883 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,
61884 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,
61885 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3,
61886
61887 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,
61888 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,
61889 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,
61890 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13,
61891
61892 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,
61893 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,
61894 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,
61895 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12,
61896
61897 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,
61898 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,
61899 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,
61900 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11
61901 ];
61902
61903 exports.substitute = function substitute(inL, inR) {
61904 var out = 0;
61905 for (var i = 0; i < 4; i++) {
61906 var b = (inL >>> (18 - i * 6)) & 0x3f;
61907 var sb = sTable[i * 0x40 + b];
61908
61909 out <<= 4;
61910 out |= sb;
61911 }
61912 for (var i = 0; i < 4; i++) {
61913 var b = (inR >>> (18 - i * 6)) & 0x3f;
61914 var sb = sTable[4 * 0x40 + i * 0x40 + b];
61915
61916 out <<= 4;
61917 out |= sb;
61918 }
61919 return out >>> 0;
61920 };
61921
61922 var permuteTable = [
61923 16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22,
61924 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7
61925 ];
61926
61927 exports.permute = function permute(num) {
61928 var out = 0;
61929 for (var i = 0; i < permuteTable.length; i++) {
61930 out <<= 1;
61931 out |= (num >>> permuteTable[i]) & 0x1;
61932 }
61933 return out >>> 0;
61934 };
61935
61936 exports.padSplit = function padSplit(num, size, group) {
61937 var str = num.toString(2);
61938 while (str.length < size)
61939 str = '0' + str;
61940
61941 var out = [];
61942 for (var i = 0; i < size; i += group)
61943 out.push(str.slice(i, i + group));
61944 return out.join(' ');
61945 };
61946
61947 },{}],63:[function(require,module,exports){
61948 (function (Buffer){
61949 var generatePrime = require('./lib/generatePrime')
61950 var primes = require('./lib/primes.json')
61951
61952 var DH = require('./lib/dh')
61953
61954 function getDiffieHellman (mod) {
61955 var prime = new Buffer(primes[mod].prime, 'hex')
61956 var gen = new Buffer(primes[mod].gen, 'hex')
61957
61958 return new DH(prime, gen)
61959 }
61960
61961 var ENCODINGS = {
61962 'binary': true, 'hex': true, 'base64': true
61963 }
61964
61965 function createDiffieHellman (prime, enc, generator, genc) {
61966 if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) {
61967 return createDiffieHellman(prime, 'binary', enc, generator)
61968 }
61969
61970 enc = enc || 'binary'
61971 genc = genc || 'binary'
61972 generator = generator || new Buffer([2])
61973
61974 if (!Buffer.isBuffer(generator)) {
61975 generator = new Buffer(generator, genc)
61976 }
61977
61978 if (typeof prime === 'number') {
61979 return new DH(generatePrime(prime, generator), generator, true)
61980 }
61981
61982 if (!Buffer.isBuffer(prime)) {
61983 prime = new Buffer(prime, enc)
61984 }
61985
61986 return new DH(prime, generator, true)
61987 }
61988
61989 exports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman
61990 exports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman
61991
61992 }).call(this,require("buffer").Buffer)
61993 },{"./lib/dh":64,"./lib/generatePrime":65,"./lib/primes.json":66,"buffer":47}],64:[function(require,module,exports){
61994 (function (Buffer){
61995 var BN = require('bn.js');
61996 var MillerRabin = require('miller-rabin');
61997 var millerRabin = new MillerRabin();
61998 var TWENTYFOUR = new BN(24);
61999 var ELEVEN = new BN(11);
62000 var TEN = new BN(10);
62001 var THREE = new BN(3);
62002 var SEVEN = new BN(7);
62003 var primes = require('./generatePrime');
62004 var randomBytes = require('randombytes');
62005 module.exports = DH;
62006
62007 function setPublicKey(pub, enc) {
62008 enc = enc || 'utf8';
62009 if (!Buffer.isBuffer(pub)) {
62010 pub = new Buffer(pub, enc);
62011 }
62012 this._pub = new BN(pub);
62013 return this;
62014 }
62015
62016 function setPrivateKey(priv, enc) {
62017 enc = enc || 'utf8';
62018 if (!Buffer.isBuffer(priv)) {
62019 priv = new Buffer(priv, enc);
62020 }
62021 this._priv = new BN(priv);
62022 return this;
62023 }
62024
62025 var primeCache = {};
62026 function checkPrime(prime, generator) {
62027 var gen = generator.toString('hex');
62028 var hex = [gen, prime.toString(16)].join('_');
62029 if (hex in primeCache) {
62030 return primeCache[hex];
62031 }
62032 var error = 0;
62033
62034 if (prime.isEven() ||
62035 !primes.simpleSieve ||
62036 !primes.fermatTest(prime) ||
62037 !millerRabin.test(prime)) {
62038 //not a prime so +1
62039 error += 1;
62040
62041 if (gen === '02' || gen === '05') {
62042 // we'd be able to check the generator
62043 // it would fail so +8
62044 error += 8;
62045 } else {
62046 //we wouldn't be able to test the generator
62047 // so +4
62048 error += 4;
62049 }
62050 primeCache[hex] = error;
62051 return error;
62052 }
62053 if (!millerRabin.test(prime.shrn(1))) {
62054 //not a safe prime
62055 error += 2;
62056 }
62057 var rem;
62058 switch (gen) {
62059 case '02':
62060 if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {
62061 // unsuidable generator
62062 error += 8;
62063 }
62064 break;
62065 case '05':
62066 rem = prime.mod(TEN);
62067 if (rem.cmp(THREE) && rem.cmp(SEVEN)) {
62068 // prime mod 10 needs to equal 3 or 7
62069 error += 8;
62070 }
62071 break;
62072 default:
62073 error += 4;
62074 }
62075 primeCache[hex] = error;
62076 return error;
62077 }
62078
62079 function DH(prime, generator, malleable) {
62080 this.setGenerator(generator);
62081 this.__prime = new BN(prime);
62082 this._prime = BN.mont(this.__prime);
62083 this._primeLen = prime.length;
62084 this._pub = undefined;
62085 this._priv = undefined;
62086 this._primeCode = undefined;
62087 if (malleable) {
62088 this.setPublicKey = setPublicKey;
62089 this.setPrivateKey = setPrivateKey;
62090 } else {
62091 this._primeCode = 8;
62092 }
62093 }
62094 Object.defineProperty(DH.prototype, 'verifyError', {
62095 enumerable: true,
62096 get: function () {
62097 if (typeof this._primeCode !== 'number') {
62098 this._primeCode = checkPrime(this.__prime, this.__gen);
62099 }
62100 return this._primeCode;
62101 }
62102 });
62103 DH.prototype.generateKeys = function () {
62104 if (!this._priv) {
62105 this._priv = new BN(randomBytes(this._primeLen));
62106 }
62107 this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();
62108 return this.getPublicKey();
62109 };
62110
62111 DH.prototype.computeSecret = function (other) {
62112 other = new BN(other);
62113 other = other.toRed(this._prime);
62114 var secret = other.redPow(this._priv).fromRed();
62115 var out = new Buffer(secret.toArray());
62116 var prime = this.getPrime();
62117 if (out.length < prime.length) {
62118 var front = new Buffer(prime.length - out.length);
62119 front.fill(0);
62120 out = Buffer.concat([front, out]);
62121 }
62122 return out;
62123 };
62124
62125 DH.prototype.getPublicKey = function getPublicKey(enc) {
62126 return formatReturnValue(this._pub, enc);
62127 };
62128
62129 DH.prototype.getPrivateKey = function getPrivateKey(enc) {
62130 return formatReturnValue(this._priv, enc);
62131 };
62132
62133 DH.prototype.getPrime = function (enc) {
62134 return formatReturnValue(this.__prime, enc);
62135 };
62136
62137 DH.prototype.getGenerator = function (enc) {
62138 return formatReturnValue(this._gen, enc);
62139 };
62140
62141 DH.prototype.setGenerator = function (gen, enc) {
62142 enc = enc || 'utf8';
62143 if (!Buffer.isBuffer(gen)) {
62144 gen = new Buffer(gen, enc);
62145 }
62146 this.__gen = gen;
62147 this._gen = new BN(gen);
62148 return this;
62149 };
62150
62151 function formatReturnValue(bn, enc) {
62152 var buf = new Buffer(bn.toArray());
62153 if (!enc) {
62154 return buf;
62155 } else {
62156 return buf.toString(enc);
62157 }
62158 }
62159
62160 }).call(this,require("buffer").Buffer)
62161 },{"./generatePrime":65,"bn.js":17,"buffer":47,"miller-rabin":98,"randombytes":119}],65:[function(require,module,exports){
62162 var randomBytes = require('randombytes');
62163 module.exports = findPrime;
62164 findPrime.simpleSieve = simpleSieve;
62165 findPrime.fermatTest = fermatTest;
62166 var BN = require('bn.js');
62167 var TWENTYFOUR = new BN(24);
62168 var MillerRabin = require('miller-rabin');
62169 var millerRabin = new MillerRabin();
62170 var ONE = new BN(1);
62171 var TWO = new BN(2);
62172 var FIVE = new BN(5);
62173 var SIXTEEN = new BN(16);
62174 var EIGHT = new BN(8);
62175 var TEN = new BN(10);
62176 var THREE = new BN(3);
62177 var SEVEN = new BN(7);
62178 var ELEVEN = new BN(11);
62179 var FOUR = new BN(4);
62180 var TWELVE = new BN(12);
62181 var primes = null;
62182
62183 function _getPrimes() {
62184 if (primes !== null)
62185 return primes;
62186
62187 var limit = 0x100000;
62188 var res = [];
62189 res[0] = 2;
62190 for (var i = 1, k = 3; k < limit; k += 2) {
62191 var sqrt = Math.ceil(Math.sqrt(k));
62192 for (var j = 0; j < i && res[j] <= sqrt; j++)
62193 if (k % res[j] === 0)
62194 break;
62195
62196 if (i !== j && res[j] <= sqrt)
62197 continue;
62198
62199 res[i++] = k;
62200 }
62201 primes = res;
62202 return res;
62203 }
62204
62205 function simpleSieve(p) {
62206 var primes = _getPrimes();
62207
62208 for (var i = 0; i < primes.length; i++)
62209 if (p.modn(primes[i]) === 0) {
62210 if (p.cmpn(primes[i]) === 0) {
62211 return true;
62212 } else {
62213 return false;
62214 }
62215 }
62216
62217 return true;
62218 }
62219
62220 function fermatTest(p) {
62221 var red = BN.mont(p);
62222 return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;
62223 }
62224
62225 function findPrime(bits, gen) {
62226 if (bits < 16) {
62227 // this is what openssl does
62228 if (gen === 2 || gen === 5) {
62229 return new BN([0x8c, 0x7b]);
62230 } else {
62231 return new BN([0x8c, 0x27]);
62232 }
62233 }
62234 gen = new BN(gen);
62235
62236 var num, n2;
62237
62238 while (true) {
62239 num = new BN(randomBytes(Math.ceil(bits / 8)));
62240 while (num.bitLength() > bits) {
62241 num.ishrn(1);
62242 }
62243 if (num.isEven()) {
62244 num.iadd(ONE);
62245 }
62246 if (!num.testn(1)) {
62247 num.iadd(TWO);
62248 }
62249 if (!gen.cmp(TWO)) {
62250 while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {
62251 num.iadd(FOUR);
62252 }
62253 } else if (!gen.cmp(FIVE)) {
62254 while (num.mod(TEN).cmp(THREE)) {
62255 num.iadd(FOUR);
62256 }
62257 }
62258 n2 = num.shrn(1);
62259 if (simpleSieve(n2) && simpleSieve(num) &&
62260 fermatTest(n2) && fermatTest(num) &&
62261 millerRabin.test(n2) && millerRabin.test(num)) {
62262 return num;
62263 }
62264 }
62265
62266 }
62267
62268 },{"bn.js":17,"miller-rabin":98,"randombytes":119}],66:[function(require,module,exports){
62269 module.exports={
62270 "modp1": {
62271 "gen": "02",
62272 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff"
62273 },
62274 "modp2": {
62275 "gen": "02",
62276 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff"
62277 },
62278 "modp5": {
62279 "gen": "02",
62280 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff"
62281 },
62282 "modp14": {
62283 "gen": "02",
62284 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"
62285 },
62286 "modp15": {
62287 "gen": "02",
62288 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff"
62289 },
62290 "modp16": {
62291 "gen": "02",
62292 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff"
62293 },
62294 "modp17": {
62295 "gen": "02",
62296 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff"
62297 },
62298 "modp18": {
62299 "gen": "02",
62300 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff"
62301 }
62302 }
62303 },{}],67:[function(require,module,exports){
62304 'use strict';
62305
62306 var elliptic = exports;
62307
62308 elliptic.version = require('../package.json').version;
62309 elliptic.utils = require('./elliptic/utils');
62310 elliptic.rand = require('brorand');
62311 elliptic.curve = require('./elliptic/curve');
62312 elliptic.curves = require('./elliptic/curves');
62313
62314 // Protocols
62315 elliptic.ec = require('./elliptic/ec');
62316 elliptic.eddsa = require('./elliptic/eddsa');
62317
62318 },{"../package.json":82,"./elliptic/curve":70,"./elliptic/curves":73,"./elliptic/ec":74,"./elliptic/eddsa":77,"./elliptic/utils":81,"brorand":18}],68:[function(require,module,exports){
62319 'use strict';
62320
62321 var BN = require('bn.js');
62322 var elliptic = require('../../elliptic');
62323 var utils = elliptic.utils;
62324 var getNAF = utils.getNAF;
62325 var getJSF = utils.getJSF;
62326 var assert = utils.assert;
62327
62328 function BaseCurve(type, conf) {
62329 this.type = type;
62330 this.p = new BN(conf.p, 16);
62331
62332 // Use Montgomery, when there is no fast reduction for the prime
62333 this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
62334
62335 // Useful for many curves
62336 this.zero = new BN(0).toRed(this.red);
62337 this.one = new BN(1).toRed(this.red);
62338 this.two = new BN(2).toRed(this.red);
62339
62340 // Curve configuration, optional
62341 this.n = conf.n && new BN(conf.n, 16);
62342 this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
62343
62344 // Temporary arrays
62345 this._wnafT1 = new Array(4);
62346 this._wnafT2 = new Array(4);
62347 this._wnafT3 = new Array(4);
62348 this._wnafT4 = new Array(4);
62349
62350 // Generalized Greg Maxwell's trick
62351 var adjustCount = this.n && this.p.div(this.n);
62352 if (!adjustCount || adjustCount.cmpn(100) > 0) {
62353 this.redN = null;
62354 } else {
62355 this._maxwellTrick = true;
62356 this.redN = this.n.toRed(this.red);
62357 }
62358 }
62359 module.exports = BaseCurve;
62360
62361 BaseCurve.prototype.point = function point() {
62362 throw new Error('Not implemented');
62363 };
62364
62365 BaseCurve.prototype.validate = function validate() {
62366 throw new Error('Not implemented');
62367 };
62368
62369 BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
62370 assert(p.precomputed);
62371 var doubles = p._getDoubles();
62372
62373 var naf = getNAF(k, 1);
62374 var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);
62375 I /= 3;
62376
62377 // Translate into more windowed form
62378 var repr = [];
62379 for (var j = 0; j < naf.length; j += doubles.step) {
62380 var nafW = 0;
62381 for (var k = j + doubles.step - 1; k >= j; k--)
62382 nafW = (nafW << 1) + naf[k];
62383 repr.push(nafW);
62384 }
62385
62386 var a = this.jpoint(null, null, null);
62387 var b = this.jpoint(null, null, null);
62388 for (var i = I; i > 0; i--) {
62389 for (var j = 0; j < repr.length; j++) {
62390 var nafW = repr[j];
62391 if (nafW === i)
62392 b = b.mixedAdd(doubles.points[j]);
62393 else if (nafW === -i)
62394 b = b.mixedAdd(doubles.points[j].neg());
62395 }
62396 a = a.add(b);
62397 }
62398 return a.toP();
62399 };
62400
62401 BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
62402 var w = 4;
62403
62404 // Precompute window
62405 var nafPoints = p._getNAFPoints(w);
62406 w = nafPoints.wnd;
62407 var wnd = nafPoints.points;
62408
62409 // Get NAF form
62410 var naf = getNAF(k, w);
62411
62412 // Add `this`*(N+1) for every w-NAF index
62413 var acc = this.jpoint(null, null, null);
62414 for (var i = naf.length - 1; i >= 0; i--) {
62415 // Count zeroes
62416 for (var k = 0; i >= 0 && naf[i] === 0; i--)
62417 k++;
62418 if (i >= 0)
62419 k++;
62420 acc = acc.dblp(k);
62421
62422 if (i < 0)
62423 break;
62424 var z = naf[i];
62425 assert(z !== 0);
62426 if (p.type === 'affine') {
62427 // J +- P
62428 if (z > 0)
62429 acc = acc.mixedAdd(wnd[(z - 1) >> 1]);
62430 else
62431 acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());
62432 } else {
62433 // J +- J
62434 if (z > 0)
62435 acc = acc.add(wnd[(z - 1) >> 1]);
62436 else
62437 acc = acc.add(wnd[(-z - 1) >> 1].neg());
62438 }
62439 }
62440 return p.type === 'affine' ? acc.toP() : acc;
62441 };
62442
62443 BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,
62444 points,
62445 coeffs,
62446 len,
62447 jacobianResult) {
62448 var wndWidth = this._wnafT1;
62449 var wnd = this._wnafT2;
62450 var naf = this._wnafT3;
62451
62452 // Fill all arrays
62453 var max = 0;
62454 for (var i = 0; i < len; i++) {
62455 var p = points[i];
62456 var nafPoints = p._getNAFPoints(defW);
62457 wndWidth[i] = nafPoints.wnd;
62458 wnd[i] = nafPoints.points;
62459 }
62460
62461 // Comb small window NAFs
62462 for (var i = len - 1; i >= 1; i -= 2) {
62463 var a = i - 1;
62464 var b = i;
62465 if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
62466 naf[a] = getNAF(coeffs[a], wndWidth[a]);
62467 naf[b] = getNAF(coeffs[b], wndWidth[b]);
62468 max = Math.max(naf[a].length, max);
62469 max = Math.max(naf[b].length, max);
62470 continue;
62471 }
62472
62473 var comb = [
62474 points[a], /* 1 */
62475 null, /* 3 */
62476 null, /* 5 */
62477 points[b] /* 7 */
62478 ];
62479
62480 // Try to avoid Projective points, if possible
62481 if (points[a].y.cmp(points[b].y) === 0) {
62482 comb[1] = points[a].add(points[b]);
62483 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
62484 } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
62485 comb[1] = points[a].toJ().mixedAdd(points[b]);
62486 comb[2] = points[a].add(points[b].neg());
62487 } else {
62488 comb[1] = points[a].toJ().mixedAdd(points[b]);
62489 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
62490 }
62491
62492 var index = [
62493 -3, /* -1 -1 */
62494 -1, /* -1 0 */
62495 -5, /* -1 1 */
62496 -7, /* 0 -1 */
62497 0, /* 0 0 */
62498 7, /* 0 1 */
62499 5, /* 1 -1 */
62500 1, /* 1 0 */
62501 3 /* 1 1 */
62502 ];
62503
62504 var jsf = getJSF(coeffs[a], coeffs[b]);
62505 max = Math.max(jsf[0].length, max);
62506 naf[a] = new Array(max);
62507 naf[b] = new Array(max);
62508 for (var j = 0; j < max; j++) {
62509 var ja = jsf[0][j] | 0;
62510 var jb = jsf[1][j] | 0;
62511
62512 naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
62513 naf[b][j] = 0;
62514 wnd[a] = comb;
62515 }
62516 }
62517
62518 var acc = this.jpoint(null, null, null);
62519 var tmp = this._wnafT4;
62520 for (var i = max; i >= 0; i--) {
62521 var k = 0;
62522
62523 while (i >= 0) {
62524 var zero = true;
62525 for (var j = 0; j < len; j++) {
62526 tmp[j] = naf[j][i] | 0;
62527 if (tmp[j] !== 0)
62528 zero = false;
62529 }
62530 if (!zero)
62531 break;
62532 k++;
62533 i--;
62534 }
62535 if (i >= 0)
62536 k++;
62537 acc = acc.dblp(k);
62538 if (i < 0)
62539 break;
62540
62541 for (var j = 0; j < len; j++) {
62542 var z = tmp[j];
62543 var p;
62544 if (z === 0)
62545 continue;
62546 else if (z > 0)
62547 p = wnd[j][(z - 1) >> 1];
62548 else if (z < 0)
62549 p = wnd[j][(-z - 1) >> 1].neg();
62550
62551 if (p.type === 'affine')
62552 acc = acc.mixedAdd(p);
62553 else
62554 acc = acc.add(p);
62555 }
62556 }
62557 // Zeroify references
62558 for (var i = 0; i < len; i++)
62559 wnd[i] = null;
62560
62561 if (jacobianResult)
62562 return acc;
62563 else
62564 return acc.toP();
62565 };
62566
62567 function BasePoint(curve, type) {
62568 this.curve = curve;
62569 this.type = type;
62570 this.precomputed = null;
62571 }
62572 BaseCurve.BasePoint = BasePoint;
62573
62574 BasePoint.prototype.eq = function eq(/*other*/) {
62575 throw new Error('Not implemented');
62576 };
62577
62578 BasePoint.prototype.validate = function validate() {
62579 return this.curve.validate(this);
62580 };
62581
62582 BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
62583 bytes = utils.toArray(bytes, enc);
62584
62585 var len = this.p.byteLength();
62586
62587 // uncompressed, hybrid-odd, hybrid-even
62588 if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&
62589 bytes.length - 1 === 2 * len) {
62590 if (bytes[0] === 0x06)
62591 assert(bytes[bytes.length - 1] % 2 === 0);
62592 else if (bytes[0] === 0x07)
62593 assert(bytes[bytes.length - 1] % 2 === 1);
62594
62595 var res = this.point(bytes.slice(1, 1 + len),
62596 bytes.slice(1 + len, 1 + 2 * len));
62597
62598 return res;
62599 } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&
62600 bytes.length - 1 === len) {
62601 return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
62602 }
62603 throw new Error('Unknown point format');
62604 };
62605
62606 BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
62607 return this.encode(enc, true);
62608 };
62609
62610 BasePoint.prototype._encode = function _encode(compact) {
62611 var len = this.curve.p.byteLength();
62612 var x = this.getX().toArray('be', len);
62613
62614 if (compact)
62615 return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);
62616
62617 return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;
62618 };
62619
62620 BasePoint.prototype.encode = function encode(enc, compact) {
62621 return utils.encode(this._encode(compact), enc);
62622 };
62623
62624 BasePoint.prototype.precompute = function precompute(power) {
62625 if (this.precomputed)
62626 return this;
62627
62628 var precomputed = {
62629 doubles: null,
62630 naf: null,
62631 beta: null
62632 };
62633 precomputed.naf = this._getNAFPoints(8);
62634 precomputed.doubles = this._getDoubles(4, power);
62635 precomputed.beta = this._getBeta();
62636 this.precomputed = precomputed;
62637
62638 return this;
62639 };
62640
62641 BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
62642 if (!this.precomputed)
62643 return false;
62644
62645 var doubles = this.precomputed.doubles;
62646 if (!doubles)
62647 return false;
62648
62649 return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
62650 };
62651
62652 BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
62653 if (this.precomputed && this.precomputed.doubles)
62654 return this.precomputed.doubles;
62655
62656 var doubles = [ this ];
62657 var acc = this;
62658 for (var i = 0; i < power; i += step) {
62659 for (var j = 0; j < step; j++)
62660 acc = acc.dbl();
62661 doubles.push(acc);
62662 }
62663 return {
62664 step: step,
62665 points: doubles
62666 };
62667 };
62668
62669 BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
62670 if (this.precomputed && this.precomputed.naf)
62671 return this.precomputed.naf;
62672
62673 var res = [ this ];
62674 var max = (1 << wnd) - 1;
62675 var dbl = max === 1 ? null : this.dbl();
62676 for (var i = 1; i < max; i++)
62677 res[i] = res[i - 1].add(dbl);
62678 return {
62679 wnd: wnd,
62680 points: res
62681 };
62682 };
62683
62684 BasePoint.prototype._getBeta = function _getBeta() {
62685 return null;
62686 };
62687
62688 BasePoint.prototype.dblp = function dblp(k) {
62689 var r = this;
62690 for (var i = 0; i < k; i++)
62691 r = r.dbl();
62692 return r;
62693 };
62694
62695 },{"../../elliptic":67,"bn.js":17}],69:[function(require,module,exports){
62696 'use strict';
62697
62698 var curve = require('../curve');
62699 var elliptic = require('../../elliptic');
62700 var BN = require('bn.js');
62701 var inherits = require('inherits');
62702 var Base = curve.base;
62703
62704 var assert = elliptic.utils.assert;
62705
62706 function EdwardsCurve(conf) {
62707 // NOTE: Important as we are creating point in Base.call()
62708 this.twisted = (conf.a | 0) !== 1;
62709 this.mOneA = this.twisted && (conf.a | 0) === -1;
62710 this.extended = this.mOneA;
62711
62712 Base.call(this, 'edwards', conf);
62713
62714 this.a = new BN(conf.a, 16).umod(this.red.m);
62715 this.a = this.a.toRed(this.red);
62716 this.c = new BN(conf.c, 16).toRed(this.red);
62717 this.c2 = this.c.redSqr();
62718 this.d = new BN(conf.d, 16).toRed(this.red);
62719 this.dd = this.d.redAdd(this.d);
62720
62721 assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
62722 this.oneC = (conf.c | 0) === 1;
62723 }
62724 inherits(EdwardsCurve, Base);
62725 module.exports = EdwardsCurve;
62726
62727 EdwardsCurve.prototype._mulA = function _mulA(num) {
62728 if (this.mOneA)
62729 return num.redNeg();
62730 else
62731 return this.a.redMul(num);
62732 };
62733
62734 EdwardsCurve.prototype._mulC = function _mulC(num) {
62735 if (this.oneC)
62736 return num;
62737 else
62738 return this.c.redMul(num);
62739 };
62740
62741 // Just for compatibility with Short curve
62742 EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
62743 return this.point(x, y, z, t);
62744 };
62745
62746 EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
62747 x = new BN(x, 16);
62748 if (!x.red)
62749 x = x.toRed(this.red);
62750
62751 var x2 = x.redSqr();
62752 var rhs = this.c2.redSub(this.a.redMul(x2));
62753 var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
62754
62755 var y2 = rhs.redMul(lhs.redInvm());
62756 var y = y2.redSqrt();
62757 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
62758 throw new Error('invalid point');
62759
62760 var isOdd = y.fromRed().isOdd();
62761 if (odd && !isOdd || !odd && isOdd)
62762 y = y.redNeg();
62763
62764 return this.point(x, y);
62765 };
62766
62767 EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
62768 y = new BN(y, 16);
62769 if (!y.red)
62770 y = y.toRed(this.red);
62771
62772 // x^2 = (y^2 - 1) / (d y^2 + 1)
62773 var y2 = y.redSqr();
62774 var lhs = y2.redSub(this.one);
62775 var rhs = y2.redMul(this.d).redAdd(this.one);
62776 var x2 = lhs.redMul(rhs.redInvm());
62777
62778 if (x2.cmp(this.zero) === 0) {
62779 if (odd)
62780 throw new Error('invalid point');
62781 else
62782 return this.point(this.zero, y);
62783 }
62784
62785 var x = x2.redSqrt();
62786 if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
62787 throw new Error('invalid point');
62788
62789 if (x.isOdd() !== odd)
62790 x = x.redNeg();
62791
62792 return this.point(x, y);
62793 };
62794
62795 EdwardsCurve.prototype.validate = function validate(point) {
62796 if (point.isInfinity())
62797 return true;
62798
62799 // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)
62800 point.normalize();
62801
62802 var x2 = point.x.redSqr();
62803 var y2 = point.y.redSqr();
62804 var lhs = x2.redMul(this.a).redAdd(y2);
62805 var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
62806
62807 return lhs.cmp(rhs) === 0;
62808 };
62809
62810 function Point(curve, x, y, z, t) {
62811 Base.BasePoint.call(this, curve, 'projective');
62812 if (x === null && y === null && z === null) {
62813 this.x = this.curve.zero;
62814 this.y = this.curve.one;
62815 this.z = this.curve.one;
62816 this.t = this.curve.zero;
62817 this.zOne = true;
62818 } else {
62819 this.x = new BN(x, 16);
62820 this.y = new BN(y, 16);
62821 this.z = z ? new BN(z, 16) : this.curve.one;
62822 this.t = t && new BN(t, 16);
62823 if (!this.x.red)
62824 this.x = this.x.toRed(this.curve.red);
62825 if (!this.y.red)
62826 this.y = this.y.toRed(this.curve.red);
62827 if (!this.z.red)
62828 this.z = this.z.toRed(this.curve.red);
62829 if (this.t && !this.t.red)
62830 this.t = this.t.toRed(this.curve.red);
62831 this.zOne = this.z === this.curve.one;
62832
62833 // Use extended coordinates
62834 if (this.curve.extended && !this.t) {
62835 this.t = this.x.redMul(this.y);
62836 if (!this.zOne)
62837 this.t = this.t.redMul(this.z.redInvm());
62838 }
62839 }
62840 }
62841 inherits(Point, Base.BasePoint);
62842
62843 EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
62844 return Point.fromJSON(this, obj);
62845 };
62846
62847 EdwardsCurve.prototype.point = function point(x, y, z, t) {
62848 return new Point(this, x, y, z, t);
62849 };
62850
62851 Point.fromJSON = function fromJSON(curve, obj) {
62852 return new Point(curve, obj[0], obj[1], obj[2]);
62853 };
62854
62855 Point.prototype.inspect = function inspect() {
62856 if (this.isInfinity())
62857 return '<EC Point Infinity>';
62858 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
62859 ' y: ' + this.y.fromRed().toString(16, 2) +
62860 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
62861 };
62862
62863 Point.prototype.isInfinity = function isInfinity() {
62864 // XXX This code assumes that zero is always zero in red
62865 return this.x.cmpn(0) === 0 &&
62866 this.y.cmp(this.z) === 0;
62867 };
62868
62869 Point.prototype._extDbl = function _extDbl() {
62870 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
62871 // #doubling-dbl-2008-hwcd
62872 // 4M + 4S
62873
62874 // A = X1^2
62875 var a = this.x.redSqr();
62876 // B = Y1^2
62877 var b = this.y.redSqr();
62878 // C = 2 * Z1^2
62879 var c = this.z.redSqr();
62880 c = c.redIAdd(c);
62881 // D = a * A
62882 var d = this.curve._mulA(a);
62883 // E = (X1 + Y1)^2 - A - B
62884 var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
62885 // G = D + B
62886 var g = d.redAdd(b);
62887 // F = G - C
62888 var f = g.redSub(c);
62889 // H = D - B
62890 var h = d.redSub(b);
62891 // X3 = E * F
62892 var nx = e.redMul(f);
62893 // Y3 = G * H
62894 var ny = g.redMul(h);
62895 // T3 = E * H
62896 var nt = e.redMul(h);
62897 // Z3 = F * G
62898 var nz = f.redMul(g);
62899 return this.curve.point(nx, ny, nz, nt);
62900 };
62901
62902 Point.prototype._projDbl = function _projDbl() {
62903 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
62904 // #doubling-dbl-2008-bbjlp
62905 // #doubling-dbl-2007-bl
62906 // and others
62907 // Generally 3M + 4S or 2M + 4S
62908
62909 // B = (X1 + Y1)^2
62910 var b = this.x.redAdd(this.y).redSqr();
62911 // C = X1^2
62912 var c = this.x.redSqr();
62913 // D = Y1^2
62914 var d = this.y.redSqr();
62915
62916 var nx;
62917 var ny;
62918 var nz;
62919 if (this.curve.twisted) {
62920 // E = a * C
62921 var e = this.curve._mulA(c);
62922 // F = E + D
62923 var f = e.redAdd(d);
62924 if (this.zOne) {
62925 // X3 = (B - C - D) * (F - 2)
62926 nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
62927 // Y3 = F * (E - D)
62928 ny = f.redMul(e.redSub(d));
62929 // Z3 = F^2 - 2 * F
62930 nz = f.redSqr().redSub(f).redSub(f);
62931 } else {
62932 // H = Z1^2
62933 var h = this.z.redSqr();
62934 // J = F - 2 * H
62935 var j = f.redSub(h).redISub(h);
62936 // X3 = (B-C-D)*J
62937 nx = b.redSub(c).redISub(d).redMul(j);
62938 // Y3 = F * (E - D)
62939 ny = f.redMul(e.redSub(d));
62940 // Z3 = F * J
62941 nz = f.redMul(j);
62942 }
62943 } else {
62944 // E = C + D
62945 var e = c.redAdd(d);
62946 // H = (c * Z1)^2
62947 var h = this.curve._mulC(this.c.redMul(this.z)).redSqr();
62948 // J = E - 2 * H
62949 var j = e.redSub(h).redSub(h);
62950 // X3 = c * (B - E) * J
62951 nx = this.curve._mulC(b.redISub(e)).redMul(j);
62952 // Y3 = c * E * (C - D)
62953 ny = this.curve._mulC(e).redMul(c.redISub(d));
62954 // Z3 = E * J
62955 nz = e.redMul(j);
62956 }
62957 return this.curve.point(nx, ny, nz);
62958 };
62959
62960 Point.prototype.dbl = function dbl() {
62961 if (this.isInfinity())
62962 return this;
62963
62964 // Double in extended coordinates
62965 if (this.curve.extended)
62966 return this._extDbl();
62967 else
62968 return this._projDbl();
62969 };
62970
62971 Point.prototype._extAdd = function _extAdd(p) {
62972 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
62973 // #addition-add-2008-hwcd-3
62974 // 8M
62975
62976 // A = (Y1 - X1) * (Y2 - X2)
62977 var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
62978 // B = (Y1 + X1) * (Y2 + X2)
62979 var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
62980 // C = T1 * k * T2
62981 var c = this.t.redMul(this.curve.dd).redMul(p.t);
62982 // D = Z1 * 2 * Z2
62983 var d = this.z.redMul(p.z.redAdd(p.z));
62984 // E = B - A
62985 var e = b.redSub(a);
62986 // F = D - C
62987 var f = d.redSub(c);
62988 // G = D + C
62989 var g = d.redAdd(c);
62990 // H = B + A
62991 var h = b.redAdd(a);
62992 // X3 = E * F
62993 var nx = e.redMul(f);
62994 // Y3 = G * H
62995 var ny = g.redMul(h);
62996 // T3 = E * H
62997 var nt = e.redMul(h);
62998 // Z3 = F * G
62999 var nz = f.redMul(g);
63000 return this.curve.point(nx, ny, nz, nt);
63001 };
63002
63003 Point.prototype._projAdd = function _projAdd(p) {
63004 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
63005 // #addition-add-2008-bbjlp
63006 // #addition-add-2007-bl
63007 // 10M + 1S
63008
63009 // A = Z1 * Z2
63010 var a = this.z.redMul(p.z);
63011 // B = A^2
63012 var b = a.redSqr();
63013 // C = X1 * X2
63014 var c = this.x.redMul(p.x);
63015 // D = Y1 * Y2
63016 var d = this.y.redMul(p.y);
63017 // E = d * C * D
63018 var e = this.curve.d.redMul(c).redMul(d);
63019 // F = B - E
63020 var f = b.redSub(e);
63021 // G = B + E
63022 var g = b.redAdd(e);
63023 // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)
63024 var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
63025 var nx = a.redMul(f).redMul(tmp);
63026 var ny;
63027 var nz;
63028 if (this.curve.twisted) {
63029 // Y3 = A * G * (D - a * C)
63030 ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
63031 // Z3 = F * G
63032 nz = f.redMul(g);
63033 } else {
63034 // Y3 = A * G * (D - C)
63035 ny = a.redMul(g).redMul(d.redSub(c));
63036 // Z3 = c * F * G
63037 nz = this.curve._mulC(f).redMul(g);
63038 }
63039 return this.curve.point(nx, ny, nz);
63040 };
63041
63042 Point.prototype.add = function add(p) {
63043 if (this.isInfinity())
63044 return p;
63045 if (p.isInfinity())
63046 return this;
63047
63048 if (this.curve.extended)
63049 return this._extAdd(p);
63050 else
63051 return this._projAdd(p);
63052 };
63053
63054 Point.prototype.mul = function mul(k) {
63055 if (this._hasDoubles(k))
63056 return this.curve._fixedNafMul(this, k);
63057 else
63058 return this.curve._wnafMul(this, k);
63059 };
63060
63061 Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
63062 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);
63063 };
63064
63065 Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
63066 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);
63067 };
63068
63069 Point.prototype.normalize = function normalize() {
63070 if (this.zOne)
63071 return this;
63072
63073 // Normalize coordinates
63074 var zi = this.z.redInvm();
63075 this.x = this.x.redMul(zi);
63076 this.y = this.y.redMul(zi);
63077 if (this.t)
63078 this.t = this.t.redMul(zi);
63079 this.z = this.curve.one;
63080 this.zOne = true;
63081 return this;
63082 };
63083
63084 Point.prototype.neg = function neg() {
63085 return this.curve.point(this.x.redNeg(),
63086 this.y,
63087 this.z,
63088 this.t && this.t.redNeg());
63089 };
63090
63091 Point.prototype.getX = function getX() {
63092 this.normalize();
63093 return this.x.fromRed();
63094 };
63095
63096 Point.prototype.getY = function getY() {
63097 this.normalize();
63098 return this.y.fromRed();
63099 };
63100
63101 Point.prototype.eq = function eq(other) {
63102 return this === other ||
63103 this.getX().cmp(other.getX()) === 0 &&
63104 this.getY().cmp(other.getY()) === 0;
63105 };
63106
63107 Point.prototype.eqXToP = function eqXToP(x) {
63108 var rx = x.toRed(this.curve.red).redMul(this.z);
63109 if (this.x.cmp(rx) === 0)
63110 return true;
63111
63112 var xc = x.clone();
63113 var t = this.curve.redN.redMul(this.z);
63114 for (;;) {
63115 xc.iadd(this.curve.n);
63116 if (xc.cmp(this.curve.p) >= 0)
63117 return false;
63118
63119 rx.redIAdd(t);
63120 if (this.x.cmp(rx) === 0)
63121 return true;
63122 }
63123 return false;
63124 };
63125
63126 // Compatibility with BaseCurve
63127 Point.prototype.toP = Point.prototype.normalize;
63128 Point.prototype.mixedAdd = Point.prototype.add;
63129
63130 },{"../../elliptic":67,"../curve":70,"bn.js":17,"inherits":95}],70:[function(require,module,exports){
63131 'use strict';
63132
63133 var curve = exports;
63134
63135 curve.base = require('./base');
63136 curve.short = require('./short');
63137 curve.mont = require('./mont');
63138 curve.edwards = require('./edwards');
63139
63140 },{"./base":68,"./edwards":69,"./mont":71,"./short":72}],71:[function(require,module,exports){
63141 'use strict';
63142
63143 var curve = require('../curve');
63144 var BN = require('bn.js');
63145 var inherits = require('inherits');
63146 var Base = curve.base;
63147
63148 var elliptic = require('../../elliptic');
63149 var utils = elliptic.utils;
63150
63151 function MontCurve(conf) {
63152 Base.call(this, 'mont', conf);
63153
63154 this.a = new BN(conf.a, 16).toRed(this.red);
63155 this.b = new BN(conf.b, 16).toRed(this.red);
63156 this.i4 = new BN(4).toRed(this.red).redInvm();
63157 this.two = new BN(2).toRed(this.red);
63158 this.a24 = this.i4.redMul(this.a.redAdd(this.two));
63159 }
63160 inherits(MontCurve, Base);
63161 module.exports = MontCurve;
63162
63163 MontCurve.prototype.validate = function validate(point) {
63164 var x = point.normalize().x;
63165 var x2 = x.redSqr();
63166 var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
63167 var y = rhs.redSqrt();
63168
63169 return y.redSqr().cmp(rhs) === 0;
63170 };
63171
63172 function Point(curve, x, z) {
63173 Base.BasePoint.call(this, curve, 'projective');
63174 if (x === null && z === null) {
63175 this.x = this.curve.one;
63176 this.z = this.curve.zero;
63177 } else {
63178 this.x = new BN(x, 16);
63179 this.z = new BN(z, 16);
63180 if (!this.x.red)
63181 this.x = this.x.toRed(this.curve.red);
63182 if (!this.z.red)
63183 this.z = this.z.toRed(this.curve.red);
63184 }
63185 }
63186 inherits(Point, Base.BasePoint);
63187
63188 MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
63189 return this.point(utils.toArray(bytes, enc), 1);
63190 };
63191
63192 MontCurve.prototype.point = function point(x, z) {
63193 return new Point(this, x, z);
63194 };
63195
63196 MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
63197 return Point.fromJSON(this, obj);
63198 };
63199
63200 Point.prototype.precompute = function precompute() {
63201 // No-op
63202 };
63203
63204 Point.prototype._encode = function _encode() {
63205 return this.getX().toArray('be', this.curve.p.byteLength());
63206 };
63207
63208 Point.fromJSON = function fromJSON(curve, obj) {
63209 return new Point(curve, obj[0], obj[1] || curve.one);
63210 };
63211
63212 Point.prototype.inspect = function inspect() {
63213 if (this.isInfinity())
63214 return '<EC Point Infinity>';
63215 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
63216 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
63217 };
63218
63219 Point.prototype.isInfinity = function isInfinity() {
63220 // XXX This code assumes that zero is always zero in red
63221 return this.z.cmpn(0) === 0;
63222 };
63223
63224 Point.prototype.dbl = function dbl() {
63225 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3
63226 // 2M + 2S + 4A
63227
63228 // A = X1 + Z1
63229 var a = this.x.redAdd(this.z);
63230 // AA = A^2
63231 var aa = a.redSqr();
63232 // B = X1 - Z1
63233 var b = this.x.redSub(this.z);
63234 // BB = B^2
63235 var bb = b.redSqr();
63236 // C = AA - BB
63237 var c = aa.redSub(bb);
63238 // X3 = AA * BB
63239 var nx = aa.redMul(bb);
63240 // Z3 = C * (BB + A24 * C)
63241 var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
63242 return this.curve.point(nx, nz);
63243 };
63244
63245 Point.prototype.add = function add() {
63246 throw new Error('Not supported on Montgomery curve');
63247 };
63248
63249 Point.prototype.diffAdd = function diffAdd(p, diff) {
63250 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3
63251 // 4M + 2S + 6A
63252
63253 // A = X2 + Z2
63254 var a = this.x.redAdd(this.z);
63255 // B = X2 - Z2
63256 var b = this.x.redSub(this.z);
63257 // C = X3 + Z3
63258 var c = p.x.redAdd(p.z);
63259 // D = X3 - Z3
63260 var d = p.x.redSub(p.z);
63261 // DA = D * A
63262 var da = d.redMul(a);
63263 // CB = C * B
63264 var cb = c.redMul(b);
63265 // X5 = Z1 * (DA + CB)^2
63266 var nx = diff.z.redMul(da.redAdd(cb).redSqr());
63267 // Z5 = X1 * (DA - CB)^2
63268 var nz = diff.x.redMul(da.redISub(cb).redSqr());
63269 return this.curve.point(nx, nz);
63270 };
63271
63272 Point.prototype.mul = function mul(k) {
63273 var t = k.clone();
63274 var a = this; // (N / 2) * Q + Q
63275 var b = this.curve.point(null, null); // (N / 2) * Q
63276 var c = this; // Q
63277
63278 for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
63279 bits.push(t.andln(1));
63280
63281 for (var i = bits.length - 1; i >= 0; i--) {
63282 if (bits[i] === 0) {
63283 // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q
63284 a = a.diffAdd(b, c);
63285 // N * Q = 2 * ((N / 2) * Q + Q))
63286 b = b.dbl();
63287 } else {
63288 // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)
63289 b = a.diffAdd(b, c);
63290 // N * Q + Q = 2 * ((N / 2) * Q + Q)
63291 a = a.dbl();
63292 }
63293 }
63294 return b;
63295 };
63296
63297 Point.prototype.mulAdd = function mulAdd() {
63298 throw new Error('Not supported on Montgomery curve');
63299 };
63300
63301 Point.prototype.jumlAdd = function jumlAdd() {
63302 throw new Error('Not supported on Montgomery curve');
63303 };
63304
63305 Point.prototype.eq = function eq(other) {
63306 return this.getX().cmp(other.getX()) === 0;
63307 };
63308
63309 Point.prototype.normalize = function normalize() {
63310 this.x = this.x.redMul(this.z.redInvm());
63311 this.z = this.curve.one;
63312 return this;
63313 };
63314
63315 Point.prototype.getX = function getX() {
63316 // Normalize coordinates
63317 this.normalize();
63318
63319 return this.x.fromRed();
63320 };
63321
63322 },{"../../elliptic":67,"../curve":70,"bn.js":17,"inherits":95}],72:[function(require,module,exports){
63323 'use strict';
63324
63325 var curve = require('../curve');
63326 var elliptic = require('../../elliptic');
63327 var BN = require('bn.js');
63328 var inherits = require('inherits');
63329 var Base = curve.base;
63330
63331 var assert = elliptic.utils.assert;
63332
63333 function ShortCurve(conf) {
63334 Base.call(this, 'short', conf);
63335
63336 this.a = new BN(conf.a, 16).toRed(this.red);
63337 this.b = new BN(conf.b, 16).toRed(this.red);
63338 this.tinv = this.two.redInvm();
63339
63340 this.zeroA = this.a.fromRed().cmpn(0) === 0;
63341 this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
63342
63343 // If the curve is endomorphic, precalculate beta and lambda
63344 this.endo = this._getEndomorphism(conf);
63345 this._endoWnafT1 = new Array(4);
63346 this._endoWnafT2 = new Array(4);
63347 }
63348 inherits(ShortCurve, Base);
63349 module.exports = ShortCurve;
63350
63351 ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
63352 // No efficient endomorphism
63353 if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
63354 return;
63355
63356 // Compute beta and lambda, that lambda * P = (beta * Px; Py)
63357 var beta;
63358 var lambda;
63359 if (conf.beta) {
63360 beta = new BN(conf.beta, 16).toRed(this.red);
63361 } else {
63362 var betas = this._getEndoRoots(this.p);
63363 // Choose the smallest beta
63364 beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
63365 beta = beta.toRed(this.red);
63366 }
63367 if (conf.lambda) {
63368 lambda = new BN(conf.lambda, 16);
63369 } else {
63370 // Choose the lambda that is matching selected beta
63371 var lambdas = this._getEndoRoots(this.n);
63372 if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
63373 lambda = lambdas[0];
63374 } else {
63375 lambda = lambdas[1];
63376 assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
63377 }
63378 }
63379
63380 // Get basis vectors, used for balanced length-two representation
63381 var basis;
63382 if (conf.basis) {
63383 basis = conf.basis.map(function(vec) {
63384 return {
63385 a: new BN(vec.a, 16),
63386 b: new BN(vec.b, 16)
63387 };
63388 });
63389 } else {
63390 basis = this._getEndoBasis(lambda);
63391 }
63392
63393 return {
63394 beta: beta,
63395 lambda: lambda,
63396 basis: basis
63397 };
63398 };
63399
63400 ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
63401 // Find roots of for x^2 + x + 1 in F
63402 // Root = (-1 +- Sqrt(-3)) / 2
63403 //
63404 var red = num === this.p ? this.red : BN.mont(num);
63405 var tinv = new BN(2).toRed(red).redInvm();
63406 var ntinv = tinv.redNeg();
63407
63408 var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
63409
63410 var l1 = ntinv.redAdd(s).fromRed();
63411 var l2 = ntinv.redSub(s).fromRed();
63412 return [ l1, l2 ];
63413 };
63414
63415 ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
63416 // aprxSqrt >= sqrt(this.n)
63417 var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
63418
63419 // 3.74
63420 // Run EGCD, until r(L + 1) < aprxSqrt
63421 var u = lambda;
63422 var v = this.n.clone();
63423 var x1 = new BN(1);
63424 var y1 = new BN(0);
63425 var x2 = new BN(0);
63426 var y2 = new BN(1);
63427
63428 // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
63429 var a0;
63430 var b0;
63431 // First vector
63432 var a1;
63433 var b1;
63434 // Second vector
63435 var a2;
63436 var b2;
63437
63438 var prevR;
63439 var i = 0;
63440 var r;
63441 var x;
63442 while (u.cmpn(0) !== 0) {
63443 var q = v.div(u);
63444 r = v.sub(q.mul(u));
63445 x = x2.sub(q.mul(x1));
63446 var y = y2.sub(q.mul(y1));
63447
63448 if (!a1 && r.cmp(aprxSqrt) < 0) {
63449 a0 = prevR.neg();
63450 b0 = x1;
63451 a1 = r.neg();
63452 b1 = x;
63453 } else if (a1 && ++i === 2) {
63454 break;
63455 }
63456 prevR = r;
63457
63458 v = u;
63459 u = r;
63460 x2 = x1;
63461 x1 = x;
63462 y2 = y1;
63463 y1 = y;
63464 }
63465 a2 = r.neg();
63466 b2 = x;
63467
63468 var len1 = a1.sqr().add(b1.sqr());
63469 var len2 = a2.sqr().add(b2.sqr());
63470 if (len2.cmp(len1) >= 0) {
63471 a2 = a0;
63472 b2 = b0;
63473 }
63474
63475 // Normalize signs
63476 if (a1.negative) {
63477 a1 = a1.neg();
63478 b1 = b1.neg();
63479 }
63480 if (a2.negative) {
63481 a2 = a2.neg();
63482 b2 = b2.neg();
63483 }
63484
63485 return [
63486 { a: a1, b: b1 },
63487 { a: a2, b: b2 }
63488 ];
63489 };
63490
63491 ShortCurve.prototype._endoSplit = function _endoSplit(k) {
63492 var basis = this.endo.basis;
63493 var v1 = basis[0];
63494 var v2 = basis[1];
63495
63496 var c1 = v2.b.mul(k).divRound(this.n);
63497 var c2 = v1.b.neg().mul(k).divRound(this.n);
63498
63499 var p1 = c1.mul(v1.a);
63500 var p2 = c2.mul(v2.a);
63501 var q1 = c1.mul(v1.b);
63502 var q2 = c2.mul(v2.b);
63503
63504 // Calculate answer
63505 var k1 = k.sub(p1).sub(p2);
63506 var k2 = q1.add(q2).neg();
63507 return { k1: k1, k2: k2 };
63508 };
63509
63510 ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
63511 x = new BN(x, 16);
63512 if (!x.red)
63513 x = x.toRed(this.red);
63514
63515 var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
63516 var y = y2.redSqrt();
63517 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
63518 throw new Error('invalid point');
63519
63520 // XXX Is there any way to tell if the number is odd without converting it
63521 // to non-red form?
63522 var isOdd = y.fromRed().isOdd();
63523 if (odd && !isOdd || !odd && isOdd)
63524 y = y.redNeg();
63525
63526 return this.point(x, y);
63527 };
63528
63529 ShortCurve.prototype.validate = function validate(point) {
63530 if (point.inf)
63531 return true;
63532
63533 var x = point.x;
63534 var y = point.y;
63535
63536 var ax = this.a.redMul(x);
63537 var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
63538 return y.redSqr().redISub(rhs).cmpn(0) === 0;
63539 };
63540
63541 ShortCurve.prototype._endoWnafMulAdd =
63542 function _endoWnafMulAdd(points, coeffs, jacobianResult) {
63543 var npoints = this._endoWnafT1;
63544 var ncoeffs = this._endoWnafT2;
63545 for (var i = 0; i < points.length; i++) {
63546 var split = this._endoSplit(coeffs[i]);
63547 var p = points[i];
63548 var beta = p._getBeta();
63549
63550 if (split.k1.negative) {
63551 split.k1.ineg();
63552 p = p.neg(true);
63553 }
63554 if (split.k2.negative) {
63555 split.k2.ineg();
63556 beta = beta.neg(true);
63557 }
63558
63559 npoints[i * 2] = p;
63560 npoints[i * 2 + 1] = beta;
63561 ncoeffs[i * 2] = split.k1;
63562 ncoeffs[i * 2 + 1] = split.k2;
63563 }
63564 var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);
63565
63566 // Clean-up references to points and coefficients
63567 for (var j = 0; j < i * 2; j++) {
63568 npoints[j] = null;
63569 ncoeffs[j] = null;
63570 }
63571 return res;
63572 };
63573
63574 function Point(curve, x, y, isRed) {
63575 Base.BasePoint.call(this, curve, 'affine');
63576 if (x === null && y === null) {
63577 this.x = null;
63578 this.y = null;
63579 this.inf = true;
63580 } else {
63581 this.x = new BN(x, 16);
63582 this.y = new BN(y, 16);
63583 // Force redgomery representation when loading from JSON
63584 if (isRed) {
63585 this.x.forceRed(this.curve.red);
63586 this.y.forceRed(this.curve.red);
63587 }
63588 if (!this.x.red)
63589 this.x = this.x.toRed(this.curve.red);
63590 if (!this.y.red)
63591 this.y = this.y.toRed(this.curve.red);
63592 this.inf = false;
63593 }
63594 }
63595 inherits(Point, Base.BasePoint);
63596
63597 ShortCurve.prototype.point = function point(x, y, isRed) {
63598 return new Point(this, x, y, isRed);
63599 };
63600
63601 ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
63602 return Point.fromJSON(this, obj, red);
63603 };
63604
63605 Point.prototype._getBeta = function _getBeta() {
63606 if (!this.curve.endo)
63607 return;
63608
63609 var pre = this.precomputed;
63610 if (pre && pre.beta)
63611 return pre.beta;
63612
63613 var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
63614 if (pre) {
63615 var curve = this.curve;
63616 var endoMul = function(p) {
63617 return curve.point(p.x.redMul(curve.endo.beta), p.y);
63618 };
63619 pre.beta = beta;
63620 beta.precomputed = {
63621 beta: null,
63622 naf: pre.naf && {
63623 wnd: pre.naf.wnd,
63624 points: pre.naf.points.map(endoMul)
63625 },
63626 doubles: pre.doubles && {
63627 step: pre.doubles.step,
63628 points: pre.doubles.points.map(endoMul)
63629 }
63630 };
63631 }
63632 return beta;
63633 };
63634
63635 Point.prototype.toJSON = function toJSON() {
63636 if (!this.precomputed)
63637 return [ this.x, this.y ];
63638
63639 return [ this.x, this.y, this.precomputed && {
63640 doubles: this.precomputed.doubles && {
63641 step: this.precomputed.doubles.step,
63642 points: this.precomputed.doubles.points.slice(1)
63643 },
63644 naf: this.precomputed.naf && {
63645 wnd: this.precomputed.naf.wnd,
63646 points: this.precomputed.naf.points.slice(1)
63647 }
63648 } ];
63649 };
63650
63651 Point.fromJSON = function fromJSON(curve, obj, red) {
63652 if (typeof obj === 'string')
63653 obj = JSON.parse(obj);
63654 var res = curve.point(obj[0], obj[1], red);
63655 if (!obj[2])
63656 return res;
63657
63658 function obj2point(obj) {
63659 return curve.point(obj[0], obj[1], red);
63660 }
63661
63662 var pre = obj[2];
63663 res.precomputed = {
63664 beta: null,
63665 doubles: pre.doubles && {
63666 step: pre.doubles.step,
63667 points: [ res ].concat(pre.doubles.points.map(obj2point))
63668 },
63669 naf: pre.naf && {
63670 wnd: pre.naf.wnd,
63671 points: [ res ].concat(pre.naf.points.map(obj2point))
63672 }
63673 };
63674 return res;
63675 };
63676
63677 Point.prototype.inspect = function inspect() {
63678 if (this.isInfinity())
63679 return '<EC Point Infinity>';
63680 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
63681 ' y: ' + this.y.fromRed().toString(16, 2) + '>';
63682 };
63683
63684 Point.prototype.isInfinity = function isInfinity() {
63685 return this.inf;
63686 };
63687
63688 Point.prototype.add = function add(p) {
63689 // O + P = P
63690 if (this.inf)
63691 return p;
63692
63693 // P + O = P
63694 if (p.inf)
63695 return this;
63696
63697 // P + P = 2P
63698 if (this.eq(p))
63699 return this.dbl();
63700
63701 // P + (-P) = O
63702 if (this.neg().eq(p))
63703 return this.curve.point(null, null);
63704
63705 // P + Q = O
63706 if (this.x.cmp(p.x) === 0)
63707 return this.curve.point(null, null);
63708
63709 var c = this.y.redSub(p.y);
63710 if (c.cmpn(0) !== 0)
63711 c = c.redMul(this.x.redSub(p.x).redInvm());
63712 var nx = c.redSqr().redISub(this.x).redISub(p.x);
63713 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
63714 return this.curve.point(nx, ny);
63715 };
63716
63717 Point.prototype.dbl = function dbl() {
63718 if (this.inf)
63719 return this;
63720
63721 // 2P = O
63722 var ys1 = this.y.redAdd(this.y);
63723 if (ys1.cmpn(0) === 0)
63724 return this.curve.point(null, null);
63725
63726 var a = this.curve.a;
63727
63728 var x2 = this.x.redSqr();
63729 var dyinv = ys1.redInvm();
63730 var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
63731
63732 var nx = c.redSqr().redISub(this.x.redAdd(this.x));
63733 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
63734 return this.curve.point(nx, ny);
63735 };
63736
63737 Point.prototype.getX = function getX() {
63738 return this.x.fromRed();
63739 };
63740
63741 Point.prototype.getY = function getY() {
63742 return this.y.fromRed();
63743 };
63744
63745 Point.prototype.mul = function mul(k) {
63746 k = new BN(k, 16);
63747
63748 if (this._hasDoubles(k))
63749 return this.curve._fixedNafMul(this, k);
63750 else if (this.curve.endo)
63751 return this.curve._endoWnafMulAdd([ this ], [ k ]);
63752 else
63753 return this.curve._wnafMul(this, k);
63754 };
63755
63756 Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
63757 var points = [ this, p2 ];
63758 var coeffs = [ k1, k2 ];
63759 if (this.curve.endo)
63760 return this.curve._endoWnafMulAdd(points, coeffs);
63761 else
63762 return this.curve._wnafMulAdd(1, points, coeffs, 2);
63763 };
63764
63765 Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
63766 var points = [ this, p2 ];
63767 var coeffs = [ k1, k2 ];
63768 if (this.curve.endo)
63769 return this.curve._endoWnafMulAdd(points, coeffs, true);
63770 else
63771 return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
63772 };
63773
63774 Point.prototype.eq = function eq(p) {
63775 return this === p ||
63776 this.inf === p.inf &&
63777 (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
63778 };
63779
63780 Point.prototype.neg = function neg(_precompute) {
63781 if (this.inf)
63782 return this;
63783
63784 var res = this.curve.point(this.x, this.y.redNeg());
63785 if (_precompute && this.precomputed) {
63786 var pre = this.precomputed;
63787 var negate = function(p) {
63788 return p.neg();
63789 };
63790 res.precomputed = {
63791 naf: pre.naf && {
63792 wnd: pre.naf.wnd,
63793 points: pre.naf.points.map(negate)
63794 },
63795 doubles: pre.doubles && {
63796 step: pre.doubles.step,
63797 points: pre.doubles.points.map(negate)
63798 }
63799 };
63800 }
63801 return res;
63802 };
63803
63804 Point.prototype.toJ = function toJ() {
63805 if (this.inf)
63806 return this.curve.jpoint(null, null, null);
63807
63808 var res = this.curve.jpoint(this.x, this.y, this.curve.one);
63809 return res;
63810 };
63811
63812 function JPoint(curve, x, y, z) {
63813 Base.BasePoint.call(this, curve, 'jacobian');
63814 if (x === null && y === null && z === null) {
63815 this.x = this.curve.one;
63816 this.y = this.curve.one;
63817 this.z = new BN(0);
63818 } else {
63819 this.x = new BN(x, 16);
63820 this.y = new BN(y, 16);
63821 this.z = new BN(z, 16);
63822 }
63823 if (!this.x.red)
63824 this.x = this.x.toRed(this.curve.red);
63825 if (!this.y.red)
63826 this.y = this.y.toRed(this.curve.red);
63827 if (!this.z.red)
63828 this.z = this.z.toRed(this.curve.red);
63829
63830 this.zOne = this.z === this.curve.one;
63831 }
63832 inherits(JPoint, Base.BasePoint);
63833
63834 ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
63835 return new JPoint(this, x, y, z);
63836 };
63837
63838 JPoint.prototype.toP = function toP() {
63839 if (this.isInfinity())
63840 return this.curve.point(null, null);
63841
63842 var zinv = this.z.redInvm();
63843 var zinv2 = zinv.redSqr();
63844 var ax = this.x.redMul(zinv2);
63845 var ay = this.y.redMul(zinv2).redMul(zinv);
63846
63847 return this.curve.point(ax, ay);
63848 };
63849
63850 JPoint.prototype.neg = function neg() {
63851 return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
63852 };
63853
63854 JPoint.prototype.add = function add(p) {
63855 // O + P = P
63856 if (this.isInfinity())
63857 return p;
63858
63859 // P + O = P
63860 if (p.isInfinity())
63861 return this;
63862
63863 // 12M + 4S + 7A
63864 var pz2 = p.z.redSqr();
63865 var z2 = this.z.redSqr();
63866 var u1 = this.x.redMul(pz2);
63867 var u2 = p.x.redMul(z2);
63868 var s1 = this.y.redMul(pz2.redMul(p.z));
63869 var s2 = p.y.redMul(z2.redMul(this.z));
63870
63871 var h = u1.redSub(u2);
63872 var r = s1.redSub(s2);
63873 if (h.cmpn(0) === 0) {
63874 if (r.cmpn(0) !== 0)
63875 return this.curve.jpoint(null, null, null);
63876 else
63877 return this.dbl();
63878 }
63879
63880 var h2 = h.redSqr();
63881 var h3 = h2.redMul(h);
63882 var v = u1.redMul(h2);
63883
63884 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
63885 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
63886 var nz = this.z.redMul(p.z).redMul(h);
63887
63888 return this.curve.jpoint(nx, ny, nz);
63889 };
63890
63891 JPoint.prototype.mixedAdd = function mixedAdd(p) {
63892 // O + P = P
63893 if (this.isInfinity())
63894 return p.toJ();
63895
63896 // P + O = P
63897 if (p.isInfinity())
63898 return this;
63899
63900 // 8M + 3S + 7A
63901 var z2 = this.z.redSqr();
63902 var u1 = this.x;
63903 var u2 = p.x.redMul(z2);
63904 var s1 = this.y;
63905 var s2 = p.y.redMul(z2).redMul(this.z);
63906
63907 var h = u1.redSub(u2);
63908 var r = s1.redSub(s2);
63909 if (h.cmpn(0) === 0) {
63910 if (r.cmpn(0) !== 0)
63911 return this.curve.jpoint(null, null, null);
63912 else
63913 return this.dbl();
63914 }
63915
63916 var h2 = h.redSqr();
63917 var h3 = h2.redMul(h);
63918 var v = u1.redMul(h2);
63919
63920 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
63921 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
63922 var nz = this.z.redMul(h);
63923
63924 return this.curve.jpoint(nx, ny, nz);
63925 };
63926
63927 JPoint.prototype.dblp = function dblp(pow) {
63928 if (pow === 0)
63929 return this;
63930 if (this.isInfinity())
63931 return this;
63932 if (!pow)
63933 return this.dbl();
63934
63935 if (this.curve.zeroA || this.curve.threeA) {
63936 var r = this;
63937 for (var i = 0; i < pow; i++)
63938 r = r.dbl();
63939 return r;
63940 }
63941
63942 // 1M + 2S + 1A + N * (4S + 5M + 8A)
63943 // N = 1 => 6M + 6S + 9A
63944 var a = this.curve.a;
63945 var tinv = this.curve.tinv;
63946
63947 var jx = this.x;
63948 var jy = this.y;
63949 var jz = this.z;
63950 var jz4 = jz.redSqr().redSqr();
63951
63952 // Reuse results
63953 var jyd = jy.redAdd(jy);
63954 for (var i = 0; i < pow; i++) {
63955 var jx2 = jx.redSqr();
63956 var jyd2 = jyd.redSqr();
63957 var jyd4 = jyd2.redSqr();
63958 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
63959
63960 var t1 = jx.redMul(jyd2);
63961 var nx = c.redSqr().redISub(t1.redAdd(t1));
63962 var t2 = t1.redISub(nx);
63963 var dny = c.redMul(t2);
63964 dny = dny.redIAdd(dny).redISub(jyd4);
63965 var nz = jyd.redMul(jz);
63966 if (i + 1 < pow)
63967 jz4 = jz4.redMul(jyd4);
63968
63969 jx = nx;
63970 jz = nz;
63971 jyd = dny;
63972 }
63973
63974 return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
63975 };
63976
63977 JPoint.prototype.dbl = function dbl() {
63978 if (this.isInfinity())
63979 return this;
63980
63981 if (this.curve.zeroA)
63982 return this._zeroDbl();
63983 else if (this.curve.threeA)
63984 return this._threeDbl();
63985 else
63986 return this._dbl();
63987 };
63988
63989 JPoint.prototype._zeroDbl = function _zeroDbl() {
63990 var nx;
63991 var ny;
63992 var nz;
63993 // Z = 1
63994 if (this.zOne) {
63995 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
63996 // #doubling-mdbl-2007-bl
63997 // 1M + 5S + 14A
63998
63999 // XX = X1^2
64000 var xx = this.x.redSqr();
64001 // YY = Y1^2
64002 var yy = this.y.redSqr();
64003 // YYYY = YY^2
64004 var yyyy = yy.redSqr();
64005 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
64006 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
64007 s = s.redIAdd(s);
64008 // M = 3 * XX + a; a = 0
64009 var m = xx.redAdd(xx).redIAdd(xx);
64010 // T = M ^ 2 - 2*S
64011 var t = m.redSqr().redISub(s).redISub(s);
64012
64013 // 8 * YYYY
64014 var yyyy8 = yyyy.redIAdd(yyyy);
64015 yyyy8 = yyyy8.redIAdd(yyyy8);
64016 yyyy8 = yyyy8.redIAdd(yyyy8);
64017
64018 // X3 = T
64019 nx = t;
64020 // Y3 = M * (S - T) - 8 * YYYY
64021 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
64022 // Z3 = 2*Y1
64023 nz = this.y.redAdd(this.y);
64024 } else {
64025 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
64026 // #doubling-dbl-2009-l
64027 // 2M + 5S + 13A
64028
64029 // A = X1^2
64030 var a = this.x.redSqr();
64031 // B = Y1^2
64032 var b = this.y.redSqr();
64033 // C = B^2
64034 var c = b.redSqr();
64035 // D = 2 * ((X1 + B)^2 - A - C)
64036 var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
64037 d = d.redIAdd(d);
64038 // E = 3 * A
64039 var e = a.redAdd(a).redIAdd(a);
64040 // F = E^2
64041 var f = e.redSqr();
64042
64043 // 8 * C
64044 var c8 = c.redIAdd(c);
64045 c8 = c8.redIAdd(c8);
64046 c8 = c8.redIAdd(c8);
64047
64048 // X3 = F - 2 * D
64049 nx = f.redISub(d).redISub(d);
64050 // Y3 = E * (D - X3) - 8 * C
64051 ny = e.redMul(d.redISub(nx)).redISub(c8);
64052 // Z3 = 2 * Y1 * Z1
64053 nz = this.y.redMul(this.z);
64054 nz = nz.redIAdd(nz);
64055 }
64056
64057 return this.curve.jpoint(nx, ny, nz);
64058 };
64059
64060 JPoint.prototype._threeDbl = function _threeDbl() {
64061 var nx;
64062 var ny;
64063 var nz;
64064 // Z = 1
64065 if (this.zOne) {
64066 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html
64067 // #doubling-mdbl-2007-bl
64068 // 1M + 5S + 15A
64069
64070 // XX = X1^2
64071 var xx = this.x.redSqr();
64072 // YY = Y1^2
64073 var yy = this.y.redSqr();
64074 // YYYY = YY^2
64075 var yyyy = yy.redSqr();
64076 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
64077 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
64078 s = s.redIAdd(s);
64079 // M = 3 * XX + a
64080 var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
64081 // T = M^2 - 2 * S
64082 var t = m.redSqr().redISub(s).redISub(s);
64083 // X3 = T
64084 nx = t;
64085 // Y3 = M * (S - T) - 8 * YYYY
64086 var yyyy8 = yyyy.redIAdd(yyyy);
64087 yyyy8 = yyyy8.redIAdd(yyyy8);
64088 yyyy8 = yyyy8.redIAdd(yyyy8);
64089 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
64090 // Z3 = 2 * Y1
64091 nz = this.y.redAdd(this.y);
64092 } else {
64093 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
64094 // 3M + 5S
64095
64096 // delta = Z1^2
64097 var delta = this.z.redSqr();
64098 // gamma = Y1^2
64099 var gamma = this.y.redSqr();
64100 // beta = X1 * gamma
64101 var beta = this.x.redMul(gamma);
64102 // alpha = 3 * (X1 - delta) * (X1 + delta)
64103 var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
64104 alpha = alpha.redAdd(alpha).redIAdd(alpha);
64105 // X3 = alpha^2 - 8 * beta
64106 var beta4 = beta.redIAdd(beta);
64107 beta4 = beta4.redIAdd(beta4);
64108 var beta8 = beta4.redAdd(beta4);
64109 nx = alpha.redSqr().redISub(beta8);
64110 // Z3 = (Y1 + Z1)^2 - gamma - delta
64111 nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
64112 // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2
64113 var ggamma8 = gamma.redSqr();
64114 ggamma8 = ggamma8.redIAdd(ggamma8);
64115 ggamma8 = ggamma8.redIAdd(ggamma8);
64116 ggamma8 = ggamma8.redIAdd(ggamma8);
64117 ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
64118 }
64119
64120 return this.curve.jpoint(nx, ny, nz);
64121 };
64122
64123 JPoint.prototype._dbl = function _dbl() {
64124 var a = this.curve.a;
64125
64126 // 4M + 6S + 10A
64127 var jx = this.x;
64128 var jy = this.y;
64129 var jz = this.z;
64130 var jz4 = jz.redSqr().redSqr();
64131
64132 var jx2 = jx.redSqr();
64133 var jy2 = jy.redSqr();
64134
64135 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
64136
64137 var jxd4 = jx.redAdd(jx);
64138 jxd4 = jxd4.redIAdd(jxd4);
64139 var t1 = jxd4.redMul(jy2);
64140 var nx = c.redSqr().redISub(t1.redAdd(t1));
64141 var t2 = t1.redISub(nx);
64142
64143 var jyd8 = jy2.redSqr();
64144 jyd8 = jyd8.redIAdd(jyd8);
64145 jyd8 = jyd8.redIAdd(jyd8);
64146 jyd8 = jyd8.redIAdd(jyd8);
64147 var ny = c.redMul(t2).redISub(jyd8);
64148 var nz = jy.redAdd(jy).redMul(jz);
64149
64150 return this.curve.jpoint(nx, ny, nz);
64151 };
64152
64153 JPoint.prototype.trpl = function trpl() {
64154 if (!this.curve.zeroA)
64155 return this.dbl().add(this);
64156
64157 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl
64158 // 5M + 10S + ...
64159
64160 // XX = X1^2
64161 var xx = this.x.redSqr();
64162 // YY = Y1^2
64163 var yy = this.y.redSqr();
64164 // ZZ = Z1^2
64165 var zz = this.z.redSqr();
64166 // YYYY = YY^2
64167 var yyyy = yy.redSqr();
64168 // M = 3 * XX + a * ZZ2; a = 0
64169 var m = xx.redAdd(xx).redIAdd(xx);
64170 // MM = M^2
64171 var mm = m.redSqr();
64172 // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM
64173 var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
64174 e = e.redIAdd(e);
64175 e = e.redAdd(e).redIAdd(e);
64176 e = e.redISub(mm);
64177 // EE = E^2
64178 var ee = e.redSqr();
64179 // T = 16*YYYY
64180 var t = yyyy.redIAdd(yyyy);
64181 t = t.redIAdd(t);
64182 t = t.redIAdd(t);
64183 t = t.redIAdd(t);
64184 // U = (M + E)^2 - MM - EE - T
64185 var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
64186 // X3 = 4 * (X1 * EE - 4 * YY * U)
64187 var yyu4 = yy.redMul(u);
64188 yyu4 = yyu4.redIAdd(yyu4);
64189 yyu4 = yyu4.redIAdd(yyu4);
64190 var nx = this.x.redMul(ee).redISub(yyu4);
64191 nx = nx.redIAdd(nx);
64192 nx = nx.redIAdd(nx);
64193 // Y3 = 8 * Y1 * (U * (T - U) - E * EE)
64194 var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
64195 ny = ny.redIAdd(ny);
64196 ny = ny.redIAdd(ny);
64197 ny = ny.redIAdd(ny);
64198 // Z3 = (Z1 + E)^2 - ZZ - EE
64199 var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
64200
64201 return this.curve.jpoint(nx, ny, nz);
64202 };
64203
64204 JPoint.prototype.mul = function mul(k, kbase) {
64205 k = new BN(k, kbase);
64206
64207 return this.curve._wnafMul(this, k);
64208 };
64209
64210 JPoint.prototype.eq = function eq(p) {
64211 if (p.type === 'affine')
64212 return this.eq(p.toJ());
64213
64214 if (this === p)
64215 return true;
64216
64217 // x1 * z2^2 == x2 * z1^2
64218 var z2 = this.z.redSqr();
64219 var pz2 = p.z.redSqr();
64220 if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
64221 return false;
64222
64223 // y1 * z2^3 == y2 * z1^3
64224 var z3 = z2.redMul(this.z);
64225 var pz3 = pz2.redMul(p.z);
64226 return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
64227 };
64228
64229 JPoint.prototype.eqXToP = function eqXToP(x) {
64230 var zs = this.z.redSqr();
64231 var rx = x.toRed(this.curve.red).redMul(zs);
64232 if (this.x.cmp(rx) === 0)
64233 return true;
64234
64235 var xc = x.clone();
64236 var t = this.curve.redN.redMul(zs);
64237 for (;;) {
64238 xc.iadd(this.curve.n);
64239 if (xc.cmp(this.curve.p) >= 0)
64240 return false;
64241
64242 rx.redIAdd(t);
64243 if (this.x.cmp(rx) === 0)
64244 return true;
64245 }
64246 return false;
64247 };
64248
64249 JPoint.prototype.inspect = function inspect() {
64250 if (this.isInfinity())
64251 return '<EC JPoint Infinity>';
64252 return '<EC JPoint x: ' + this.x.toString(16, 2) +
64253 ' y: ' + this.y.toString(16, 2) +
64254 ' z: ' + this.z.toString(16, 2) + '>';
64255 };
64256
64257 JPoint.prototype.isInfinity = function isInfinity() {
64258 // XXX This code assumes that zero is always zero in red
64259 return this.z.cmpn(0) === 0;
64260 };
64261
64262 },{"../../elliptic":67,"../curve":70,"bn.js":17,"inherits":95}],73:[function(require,module,exports){
64263 'use strict';
64264
64265 var curves = exports;
64266
64267 var hash = require('hash.js');
64268 var elliptic = require('../elliptic');
64269
64270 var assert = elliptic.utils.assert;
64271
64272 function PresetCurve(options) {
64273 if (options.type === 'short')
64274 this.curve = new elliptic.curve.short(options);
64275 else if (options.type === 'edwards')
64276 this.curve = new elliptic.curve.edwards(options);
64277 else
64278 this.curve = new elliptic.curve.mont(options);
64279 this.g = this.curve.g;
64280 this.n = this.curve.n;
64281 this.hash = options.hash;
64282
64283 assert(this.g.validate(), 'Invalid curve');
64284 assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');
64285 }
64286 curves.PresetCurve = PresetCurve;
64287
64288 function defineCurve(name, options) {
64289 Object.defineProperty(curves, name, {
64290 configurable: true,
64291 enumerable: true,
64292 get: function() {
64293 var curve = new PresetCurve(options);
64294 Object.defineProperty(curves, name, {
64295 configurable: true,
64296 enumerable: true,
64297 value: curve
64298 });
64299 return curve;
64300 }
64301 });
64302 }
64303
64304 defineCurve('p192', {
64305 type: 'short',
64306 prime: 'p192',
64307 p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
64308 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
64309 b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
64310 n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
64311 hash: hash.sha256,
64312 gRed: false,
64313 g: [
64314 '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',
64315 '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'
64316 ]
64317 });
64318
64319 defineCurve('p224', {
64320 type: 'short',
64321 prime: 'p224',
64322 p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
64323 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
64324 b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
64325 n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
64326 hash: hash.sha256,
64327 gRed: false,
64328 g: [
64329 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',
64330 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'
64331 ]
64332 });
64333
64334 defineCurve('p256', {
64335 type: 'short',
64336 prime: null,
64337 p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
64338 a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
64339 b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
64340 n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
64341 hash: hash.sha256,
64342 gRed: false,
64343 g: [
64344 '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',
64345 '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'
64346 ]
64347 });
64348
64349 defineCurve('p384', {
64350 type: 'short',
64351 prime: null,
64352 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
64353 'fffffffe ffffffff 00000000 00000000 ffffffff',
64354 a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
64355 'fffffffe ffffffff 00000000 00000000 fffffffc',
64356 b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +
64357 '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
64358 n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +
64359 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
64360 hash: hash.sha384,
64361 gRed: false,
64362 g: [
64363 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +
64364 '5502f25d bf55296c 3a545e38 72760ab7',
64365 '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +
64366 '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'
64367 ]
64368 });
64369
64370 defineCurve('p521', {
64371 type: 'short',
64372 prime: null,
64373 p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
64374 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
64375 'ffffffff ffffffff ffffffff ffffffff ffffffff',
64376 a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
64377 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
64378 'ffffffff ffffffff ffffffff ffffffff fffffffc',
64379 b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +
64380 '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +
64381 '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
64382 n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
64383 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +
64384 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
64385 hash: hash.sha512,
64386 gRed: false,
64387 g: [
64388 '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +
64389 '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +
64390 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',
64391 '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +
64392 '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +
64393 '3fad0761 353c7086 a272c240 88be9476 9fd16650'
64394 ]
64395 });
64396
64397 defineCurve('curve25519', {
64398 type: 'mont',
64399 prime: 'p25519',
64400 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
64401 a: '76d06',
64402 b: '1',
64403 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
64404 hash: hash.sha256,
64405 gRed: false,
64406 g: [
64407 '9'
64408 ]
64409 });
64410
64411 defineCurve('ed25519', {
64412 type: 'edwards',
64413 prime: 'p25519',
64414 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
64415 a: '-1',
64416 c: '1',
64417 // -121665 * (121666^(-1)) (mod P)
64418 d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
64419 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
64420 hash: hash.sha256,
64421 gRed: false,
64422 g: [
64423 '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',
64424
64425 // 4/5
64426 '6666666666666666666666666666666666666666666666666666666666666658'
64427 ]
64428 });
64429
64430 var pre;
64431 try {
64432 pre = require('./precomputed/secp256k1');
64433 } catch (e) {
64434 pre = undefined;
64435 }
64436
64437 defineCurve('secp256k1', {
64438 type: 'short',
64439 prime: 'k256',
64440 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
64441 a: '0',
64442 b: '7',
64443 n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
64444 h: '1',
64445 hash: hash.sha256,
64446
64447 // Precomputed endomorphism
64448 beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
64449 lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
64450 basis: [
64451 {
64452 a: '3086d221a7d46bcde86c90e49284eb15',
64453 b: '-e4437ed6010e88286f547fa90abfe4c3'
64454 },
64455 {
64456 a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
64457 b: '3086d221a7d46bcde86c90e49284eb15'
64458 }
64459 ],
64460
64461 gRed: false,
64462 g: [
64463 '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
64464 '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
64465 pre
64466 ]
64467 });
64468
64469 },{"../elliptic":67,"./precomputed/secp256k1":80,"hash.js":86}],74:[function(require,module,exports){
64470 'use strict';
64471
64472 var BN = require('bn.js');
64473 var HmacDRBG = require('hmac-drbg');
64474 var elliptic = require('../../elliptic');
64475 var utils = elliptic.utils;
64476 var assert = utils.assert;
64477
64478 var KeyPair = require('./key');
64479 var Signature = require('./signature');
64480
64481 function EC(options) {
64482 if (!(this instanceof EC))
64483 return new EC(options);
64484
64485 // Shortcut `elliptic.ec(curve-name)`
64486 if (typeof options === 'string') {
64487 assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);
64488
64489 options = elliptic.curves[options];
64490 }
64491
64492 // Shortcut for `elliptic.ec(elliptic.curves.curveName)`
64493 if (options instanceof elliptic.curves.PresetCurve)
64494 options = { curve: options };
64495
64496 this.curve = options.curve.curve;
64497 this.n = this.curve.n;
64498 this.nh = this.n.ushrn(1);
64499 this.g = this.curve.g;
64500
64501 // Point on curve
64502 this.g = options.curve.g;
64503 this.g.precompute(options.curve.n.bitLength() + 1);
64504
64505 // Hash for function for DRBG
64506 this.hash = options.hash || options.curve.hash;
64507 }
64508 module.exports = EC;
64509
64510 EC.prototype.keyPair = function keyPair(options) {
64511 return new KeyPair(this, options);
64512 };
64513
64514 EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
64515 return KeyPair.fromPrivate(this, priv, enc);
64516 };
64517
64518 EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
64519 return KeyPair.fromPublic(this, pub, enc);
64520 };
64521
64522 EC.prototype.genKeyPair = function genKeyPair(options) {
64523 if (!options)
64524 options = {};
64525
64526 // Instantiate Hmac_DRBG
64527 var drbg = new HmacDRBG({
64528 hash: this.hash,
64529 pers: options.pers,
64530 persEnc: options.persEnc || 'utf8',
64531 entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),
64532 entropyEnc: options.entropy && options.entropyEnc || 'utf8',
64533 nonce: this.n.toArray()
64534 });
64535
64536 var bytes = this.n.byteLength();
64537 var ns2 = this.n.sub(new BN(2));
64538 do {
64539 var priv = new BN(drbg.generate(bytes));
64540 if (priv.cmp(ns2) > 0)
64541 continue;
64542
64543 priv.iaddn(1);
64544 return this.keyFromPrivate(priv);
64545 } while (true);
64546 };
64547
64548 EC.prototype._truncateToN = function truncateToN(msg, truncOnly) {
64549 var delta = msg.byteLength() * 8 - this.n.bitLength();
64550 if (delta > 0)
64551 msg = msg.ushrn(delta);
64552 if (!truncOnly && msg.cmp(this.n) >= 0)
64553 return msg.sub(this.n);
64554 else
64555 return msg;
64556 };
64557
64558 EC.prototype.sign = function sign(msg, key, enc, options) {
64559 if (typeof enc === 'object') {
64560 options = enc;
64561 enc = null;
64562 }
64563 if (!options)
64564 options = {};
64565
64566 key = this.keyFromPrivate(key, enc);
64567 msg = this._truncateToN(new BN(msg, 16));
64568
64569 // Zero-extend key to provide enough entropy
64570 var bytes = this.n.byteLength();
64571 var bkey = key.getPrivate().toArray('be', bytes);
64572
64573 // Zero-extend nonce to have the same byte size as N
64574 var nonce = msg.toArray('be', bytes);
64575
64576 // Instantiate Hmac_DRBG
64577 var drbg = new HmacDRBG({
64578 hash: this.hash,
64579 entropy: bkey,
64580 nonce: nonce,
64581 pers: options.pers,
64582 persEnc: options.persEnc || 'utf8'
64583 });
64584
64585 // Number of bytes to generate
64586 var ns1 = this.n.sub(new BN(1));
64587
64588 for (var iter = 0; true; iter++) {
64589 var k = options.k ?
64590 options.k(iter) :
64591 new BN(drbg.generate(this.n.byteLength()));
64592 k = this._truncateToN(k, true);
64593 if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
64594 continue;
64595
64596 var kp = this.g.mul(k);
64597 if (kp.isInfinity())
64598 continue;
64599
64600 var kpX = kp.getX();
64601 var r = kpX.umod(this.n);
64602 if (r.cmpn(0) === 0)
64603 continue;
64604
64605 var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
64606 s = s.umod(this.n);
64607 if (s.cmpn(0) === 0)
64608 continue;
64609
64610 var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |
64611 (kpX.cmp(r) !== 0 ? 2 : 0);
64612
64613 // Use complement of `s`, if it is > `n / 2`
64614 if (options.canonical && s.cmp(this.nh) > 0) {
64615 s = this.n.sub(s);
64616 recoveryParam ^= 1;
64617 }
64618
64619 return new Signature({ r: r, s: s, recoveryParam: recoveryParam });
64620 }
64621 };
64622
64623 EC.prototype.verify = function verify(msg, signature, key, enc) {
64624 msg = this._truncateToN(new BN(msg, 16));
64625 key = this.keyFromPublic(key, enc);
64626 signature = new Signature(signature, 'hex');
64627
64628 // Perform primitive values validation
64629 var r = signature.r;
64630 var s = signature.s;
64631 if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
64632 return false;
64633 if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
64634 return false;
64635
64636 // Validate signature
64637 var sinv = s.invm(this.n);
64638 var u1 = sinv.mul(msg).umod(this.n);
64639 var u2 = sinv.mul(r).umod(this.n);
64640
64641 if (!this.curve._maxwellTrick) {
64642 var p = this.g.mulAdd(u1, key.getPublic(), u2);
64643 if (p.isInfinity())
64644 return false;
64645
64646 return p.getX().umod(this.n).cmp(r) === 0;
64647 }
64648
64649 // NOTE: Greg Maxwell's trick, inspired by:
64650 // https://git.io/vad3K
64651
64652 var p = this.g.jmulAdd(u1, key.getPublic(), u2);
64653 if (p.isInfinity())
64654 return false;
64655
64656 // Compare `p.x` of Jacobian point with `r`,
64657 // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
64658 // inverse of `p.z^2`
64659 return p.eqXToP(r);
64660 };
64661
64662 EC.prototype.recoverPubKey = function(msg, signature, j, enc) {
64663 assert((3 & j) === j, 'The recovery param is more than two bits');
64664 signature = new Signature(signature, enc);
64665
64666 var n = this.n;
64667 var e = new BN(msg);
64668 var r = signature.r;
64669 var s = signature.s;
64670
64671 // A set LSB signifies that the y-coordinate is odd
64672 var isYOdd = j & 1;
64673 var isSecondKey = j >> 1;
64674 if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
64675 throw new Error('Unable to find sencond key candinate');
64676
64677 // 1.1. Let x = r + jn.
64678 if (isSecondKey)
64679 r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
64680 else
64681 r = this.curve.pointFromX(r, isYOdd);
64682
64683 var rInv = signature.r.invm(n);
64684 var s1 = n.sub(e).mul(rInv).umod(n);
64685 var s2 = s.mul(rInv).umod(n);
64686
64687 // 1.6.1 Compute Q = r^-1 (sR - eG)
64688 // Q = r^-1 (sR + -eG)
64689 return this.g.mulAdd(s1, r, s2);
64690 };
64691
64692 EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {
64693 signature = new Signature(signature, enc);
64694 if (signature.recoveryParam !== null)
64695 return signature.recoveryParam;
64696
64697 for (var i = 0; i < 4; i++) {
64698 var Qprime;
64699 try {
64700 Qprime = this.recoverPubKey(e, signature, i);
64701 } catch (e) {
64702 continue;
64703 }
64704
64705 if (Qprime.eq(Q))
64706 return i;
64707 }
64708 throw new Error('Unable to find valid recovery factor');
64709 };
64710
64711 },{"../../elliptic":67,"./key":75,"./signature":76,"bn.js":17,"hmac-drbg":92}],75:[function(require,module,exports){
64712 'use strict';
64713
64714 var BN = require('bn.js');
64715 var elliptic = require('../../elliptic');
64716 var utils = elliptic.utils;
64717 var assert = utils.assert;
64718
64719 function KeyPair(ec, options) {
64720 this.ec = ec;
64721 this.priv = null;
64722 this.pub = null;
64723
64724 // KeyPair(ec, { priv: ..., pub: ... })
64725 if (options.priv)
64726 this._importPrivate(options.priv, options.privEnc);
64727 if (options.pub)
64728 this._importPublic(options.pub, options.pubEnc);
64729 }
64730 module.exports = KeyPair;
64731
64732 KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
64733 if (pub instanceof KeyPair)
64734 return pub;
64735
64736 return new KeyPair(ec, {
64737 pub: pub,
64738 pubEnc: enc
64739 });
64740 };
64741
64742 KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
64743 if (priv instanceof KeyPair)
64744 return priv;
64745
64746 return new KeyPair(ec, {
64747 priv: priv,
64748 privEnc: enc
64749 });
64750 };
64751
64752 KeyPair.prototype.validate = function validate() {
64753 var pub = this.getPublic();
64754
64755 if (pub.isInfinity())
64756 return { result: false, reason: 'Invalid public key' };
64757 if (!pub.validate())
64758 return { result: false, reason: 'Public key is not a point' };
64759 if (!pub.mul(this.ec.curve.n).isInfinity())
64760 return { result: false, reason: 'Public key * N != O' };
64761
64762 return { result: true, reason: null };
64763 };
64764
64765 KeyPair.prototype.getPublic = function getPublic(compact, enc) {
64766 // compact is optional argument
64767 if (typeof compact === 'string') {
64768 enc = compact;
64769 compact = null;
64770 }
64771
64772 if (!this.pub)
64773 this.pub = this.ec.g.mul(this.priv);
64774
64775 if (!enc)
64776 return this.pub;
64777
64778 return this.pub.encode(enc, compact);
64779 };
64780
64781 KeyPair.prototype.getPrivate = function getPrivate(enc) {
64782 if (enc === 'hex')
64783 return this.priv.toString(16, 2);
64784 else
64785 return this.priv;
64786 };
64787
64788 KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
64789 this.priv = new BN(key, enc || 16);
64790
64791 // Ensure that the priv won't be bigger than n, otherwise we may fail
64792 // in fixed multiplication method
64793 this.priv = this.priv.umod(this.ec.curve.n);
64794 };
64795
64796 KeyPair.prototype._importPublic = function _importPublic(key, enc) {
64797 if (key.x || key.y) {
64798 // Montgomery points only have an `x` coordinate.
64799 // Weierstrass/Edwards points on the other hand have both `x` and
64800 // `y` coordinates.
64801 if (this.ec.curve.type === 'mont') {
64802 assert(key.x, 'Need x coordinate');
64803 } else if (this.ec.curve.type === 'short' ||
64804 this.ec.curve.type === 'edwards') {
64805 assert(key.x && key.y, 'Need both x and y coordinate');
64806 }
64807 this.pub = this.ec.curve.point(key.x, key.y);
64808 return;
64809 }
64810 this.pub = this.ec.curve.decodePoint(key, enc);
64811 };
64812
64813 // ECDH
64814 KeyPair.prototype.derive = function derive(pub) {
64815 return pub.mul(this.priv).getX();
64816 };
64817
64818 // ECDSA
64819 KeyPair.prototype.sign = function sign(msg, enc, options) {
64820 return this.ec.sign(msg, this, enc, options);
64821 };
64822
64823 KeyPair.prototype.verify = function verify(msg, signature) {
64824 return this.ec.verify(msg, signature, this);
64825 };
64826
64827 KeyPair.prototype.inspect = function inspect() {
64828 return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +
64829 ' pub: ' + (this.pub && this.pub.inspect()) + ' >';
64830 };
64831
64832 },{"../../elliptic":67,"bn.js":17}],76:[function(require,module,exports){
64833 'use strict';
64834
64835 var BN = require('bn.js');
64836
64837 var elliptic = require('../../elliptic');
64838 var utils = elliptic.utils;
64839 var assert = utils.assert;
64840
64841 function Signature(options, enc) {
64842 if (options instanceof Signature)
64843 return options;
64844
64845 if (this._importDER(options, enc))
64846 return;
64847
64848 assert(options.r && options.s, 'Signature without r or s');
64849 this.r = new BN(options.r, 16);
64850 this.s = new BN(options.s, 16);
64851 if (options.recoveryParam === undefined)
64852 this.recoveryParam = null;
64853 else
64854 this.recoveryParam = options.recoveryParam;
64855 }
64856 module.exports = Signature;
64857
64858 function Position() {
64859 this.place = 0;
64860 }
64861
64862 function getLength(buf, p) {
64863 var initial = buf[p.place++];
64864 if (!(initial & 0x80)) {
64865 return initial;
64866 }
64867 var octetLen = initial & 0xf;
64868 var val = 0;
64869 for (var i = 0, off = p.place; i < octetLen; i++, off++) {
64870 val <<= 8;
64871 val |= buf[off];
64872 }
64873 p.place = off;
64874 return val;
64875 }
64876
64877 function rmPadding(buf) {
64878 var i = 0;
64879 var len = buf.length - 1;
64880 while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {
64881 i++;
64882 }
64883 if (i === 0) {
64884 return buf;
64885 }
64886 return buf.slice(i);
64887 }
64888
64889 Signature.prototype._importDER = function _importDER(data, enc) {
64890 data = utils.toArray(data, enc);
64891 var p = new Position();
64892 if (data[p.place++] !== 0x30) {
64893 return false;
64894 }
64895 var len = getLength(data, p);
64896 if ((len + p.place) !== data.length) {
64897 return false;
64898 }
64899 if (data[p.place++] !== 0x02) {
64900 return false;
64901 }
64902 var rlen = getLength(data, p);
64903 var r = data.slice(p.place, rlen + p.place);
64904 p.place += rlen;
64905 if (data[p.place++] !== 0x02) {
64906 return false;
64907 }
64908 var slen = getLength(data, p);
64909 if (data.length !== slen + p.place) {
64910 return false;
64911 }
64912 var s = data.slice(p.place, slen + p.place);
64913 if (r[0] === 0 && (r[1] & 0x80)) {
64914 r = r.slice(1);
64915 }
64916 if (s[0] === 0 && (s[1] & 0x80)) {
64917 s = s.slice(1);
64918 }
64919
64920 this.r = new BN(r);
64921 this.s = new BN(s);
64922 this.recoveryParam = null;
64923
64924 return true;
64925 };
64926
64927 function constructLength(arr, len) {
64928 if (len < 0x80) {
64929 arr.push(len);
64930 return;
64931 }
64932 var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
64933 arr.push(octets | 0x80);
64934 while (--octets) {
64935 arr.push((len >>> (octets << 3)) & 0xff);
64936 }
64937 arr.push(len);
64938 }
64939
64940 Signature.prototype.toDER = function toDER(enc) {
64941 var r = this.r.toArray();
64942 var s = this.s.toArray();
64943
64944 // Pad values
64945 if (r[0] & 0x80)
64946 r = [ 0 ].concat(r);
64947 // Pad values
64948 if (s[0] & 0x80)
64949 s = [ 0 ].concat(s);
64950
64951 r = rmPadding(r);
64952 s = rmPadding(s);
64953
64954 while (!s[0] && !(s[1] & 0x80)) {
64955 s = s.slice(1);
64956 }
64957 var arr = [ 0x02 ];
64958 constructLength(arr, r.length);
64959 arr = arr.concat(r);
64960 arr.push(0x02);
64961 constructLength(arr, s.length);
64962 var backHalf = arr.concat(s);
64963 var res = [ 0x30 ];
64964 constructLength(res, backHalf.length);
64965 res = res.concat(backHalf);
64966 return utils.encode(res, enc);
64967 };
64968
64969 },{"../../elliptic":67,"bn.js":17}],77:[function(require,module,exports){
64970 'use strict';
64971
64972 var hash = require('hash.js');
64973 var elliptic = require('../../elliptic');
64974 var utils = elliptic.utils;
64975 var assert = utils.assert;
64976 var parseBytes = utils.parseBytes;
64977 var KeyPair = require('./key');
64978 var Signature = require('./signature');
64979
64980 function EDDSA(curve) {
64981 assert(curve === 'ed25519', 'only tested with ed25519 so far');
64982
64983 if (!(this instanceof EDDSA))
64984 return new EDDSA(curve);
64985
64986 var curve = elliptic.curves[curve].curve;
64987 this.curve = curve;
64988 this.g = curve.g;
64989 this.g.precompute(curve.n.bitLength() + 1);
64990
64991 this.pointClass = curve.point().constructor;
64992 this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
64993 this.hash = hash.sha512;
64994 }
64995
64996 module.exports = EDDSA;
64997
64998 /**
64999 * @param {Array|String} message - message bytes
65000 * @param {Array|String|KeyPair} secret - secret bytes or a keypair
65001 * @returns {Signature} - signature
65002 */
65003 EDDSA.prototype.sign = function sign(message, secret) {
65004 message = parseBytes(message);
65005 var key = this.keyFromSecret(secret);
65006 var r = this.hashInt(key.messagePrefix(), message);
65007 var R = this.g.mul(r);
65008 var Rencoded = this.encodePoint(R);
65009 var s_ = this.hashInt(Rencoded, key.pubBytes(), message)
65010 .mul(key.priv());
65011 var S = r.add(s_).umod(this.curve.n);
65012 return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });
65013 };
65014
65015 /**
65016 * @param {Array} message - message bytes
65017 * @param {Array|String|Signature} sig - sig bytes
65018 * @param {Array|String|Point|KeyPair} pub - public key
65019 * @returns {Boolean} - true if public key matches sig of message
65020 */
65021 EDDSA.prototype.verify = function verify(message, sig, pub) {
65022 message = parseBytes(message);
65023 sig = this.makeSignature(sig);
65024 var key = this.keyFromPublic(pub);
65025 var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
65026 var SG = this.g.mul(sig.S());
65027 var RplusAh = sig.R().add(key.pub().mul(h));
65028 return RplusAh.eq(SG);
65029 };
65030
65031 EDDSA.prototype.hashInt = function hashInt() {
65032 var hash = this.hash();
65033 for (var i = 0; i < arguments.length; i++)
65034 hash.update(arguments[i]);
65035 return utils.intFromLE(hash.digest()).umod(this.curve.n);
65036 };
65037
65038 EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
65039 return KeyPair.fromPublic(this, pub);
65040 };
65041
65042 EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
65043 return KeyPair.fromSecret(this, secret);
65044 };
65045
65046 EDDSA.prototype.makeSignature = function makeSignature(sig) {
65047 if (sig instanceof Signature)
65048 return sig;
65049 return new Signature(this, sig);
65050 };
65051
65052 /**
65053 * * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
65054 *
65055 * EDDSA defines methods for encoding and decoding points and integers. These are
65056 * helper convenience methods, that pass along to utility functions implied
65057 * parameters.
65058 *
65059 */
65060 EDDSA.prototype.encodePoint = function encodePoint(point) {
65061 var enc = point.getY().toArray('le', this.encodingLength);
65062 enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
65063 return enc;
65064 };
65065
65066 EDDSA.prototype.decodePoint = function decodePoint(bytes) {
65067 bytes = utils.parseBytes(bytes);
65068
65069 var lastIx = bytes.length - 1;
65070 var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
65071 var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
65072
65073 var y = utils.intFromLE(normed);
65074 return this.curve.pointFromY(y, xIsOdd);
65075 };
65076
65077 EDDSA.prototype.encodeInt = function encodeInt(num) {
65078 return num.toArray('le', this.encodingLength);
65079 };
65080
65081 EDDSA.prototype.decodeInt = function decodeInt(bytes) {
65082 return utils.intFromLE(bytes);
65083 };
65084
65085 EDDSA.prototype.isPoint = function isPoint(val) {
65086 return val instanceof this.pointClass;
65087 };
65088
65089 },{"../../elliptic":67,"./key":78,"./signature":79,"hash.js":86}],78:[function(require,module,exports){
65090 'use strict';
65091
65092 var elliptic = require('../../elliptic');
65093 var utils = elliptic.utils;
65094 var assert = utils.assert;
65095 var parseBytes = utils.parseBytes;
65096 var cachedProperty = utils.cachedProperty;
65097
65098 /**
65099 * @param {EDDSA} eddsa - instance
65100 * @param {Object} params - public/private key parameters
65101 *
65102 * @param {Array<Byte>} [params.secret] - secret seed bytes
65103 * @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
65104 * @param {Array<Byte>} [params.pub] - public key point encoded as bytes
65105 *
65106 */
65107 function KeyPair(eddsa, params) {
65108 this.eddsa = eddsa;
65109 this._secret = parseBytes(params.secret);
65110 if (eddsa.isPoint(params.pub))
65111 this._pub = params.pub;
65112 else
65113 this._pubBytes = parseBytes(params.pub);
65114 }
65115
65116 KeyPair.fromPublic = function fromPublic(eddsa, pub) {
65117 if (pub instanceof KeyPair)
65118 return pub;
65119 return new KeyPair(eddsa, { pub: pub });
65120 };
65121
65122 KeyPair.fromSecret = function fromSecret(eddsa, secret) {
65123 if (secret instanceof KeyPair)
65124 return secret;
65125 return new KeyPair(eddsa, { secret: secret });
65126 };
65127
65128 KeyPair.prototype.secret = function secret() {
65129 return this._secret;
65130 };
65131
65132 cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
65133 return this.eddsa.encodePoint(this.pub());
65134 });
65135
65136 cachedProperty(KeyPair, 'pub', function pub() {
65137 if (this._pubBytes)
65138 return this.eddsa.decodePoint(this._pubBytes);
65139 return this.eddsa.g.mul(this.priv());
65140 });
65141
65142 cachedProperty(KeyPair, 'privBytes', function privBytes() {
65143 var eddsa = this.eddsa;
65144 var hash = this.hash();
65145 var lastIx = eddsa.encodingLength - 1;
65146
65147 var a = hash.slice(0, eddsa.encodingLength);
65148 a[0] &= 248;
65149 a[lastIx] &= 127;
65150 a[lastIx] |= 64;
65151
65152 return a;
65153 });
65154
65155 cachedProperty(KeyPair, 'priv', function priv() {
65156 return this.eddsa.decodeInt(this.privBytes());
65157 });
65158
65159 cachedProperty(KeyPair, 'hash', function hash() {
65160 return this.eddsa.hash().update(this.secret()).digest();
65161 });
65162
65163 cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
65164 return this.hash().slice(this.eddsa.encodingLength);
65165 });
65166
65167 KeyPair.prototype.sign = function sign(message) {
65168 assert(this._secret, 'KeyPair can only verify');
65169 return this.eddsa.sign(message, this);
65170 };
65171
65172 KeyPair.prototype.verify = function verify(message, sig) {
65173 return this.eddsa.verify(message, sig, this);
65174 };
65175
65176 KeyPair.prototype.getSecret = function getSecret(enc) {
65177 assert(this._secret, 'KeyPair is public only');
65178 return utils.encode(this.secret(), enc);
65179 };
65180
65181 KeyPair.prototype.getPublic = function getPublic(enc) {
65182 return utils.encode(this.pubBytes(), enc);
65183 };
65184
65185 module.exports = KeyPair;
65186
65187 },{"../../elliptic":67}],79:[function(require,module,exports){
65188 'use strict';
65189
65190 var BN = require('bn.js');
65191 var elliptic = require('../../elliptic');
65192 var utils = elliptic.utils;
65193 var assert = utils.assert;
65194 var cachedProperty = utils.cachedProperty;
65195 var parseBytes = utils.parseBytes;
65196
65197 /**
65198 * @param {EDDSA} eddsa - eddsa instance
65199 * @param {Array<Bytes>|Object} sig -
65200 * @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
65201 * @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
65202 * @param {Array<Bytes>} [sig.Rencoded] - R point encoded
65203 * @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
65204 */
65205 function Signature(eddsa, sig) {
65206 this.eddsa = eddsa;
65207
65208 if (typeof sig !== 'object')
65209 sig = parseBytes(sig);
65210
65211 if (Array.isArray(sig)) {
65212 sig = {
65213 R: sig.slice(0, eddsa.encodingLength),
65214 S: sig.slice(eddsa.encodingLength)
65215 };
65216 }
65217
65218 assert(sig.R && sig.S, 'Signature without R or S');
65219
65220 if (eddsa.isPoint(sig.R))
65221 this._R = sig.R;
65222 if (sig.S instanceof BN)
65223 this._S = sig.S;
65224
65225 this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
65226 this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
65227 }
65228
65229 cachedProperty(Signature, 'S', function S() {
65230 return this.eddsa.decodeInt(this.Sencoded());
65231 });
65232
65233 cachedProperty(Signature, 'R', function R() {
65234 return this.eddsa.decodePoint(this.Rencoded());
65235 });
65236
65237 cachedProperty(Signature, 'Rencoded', function Rencoded() {
65238 return this.eddsa.encodePoint(this.R());
65239 });
65240
65241 cachedProperty(Signature, 'Sencoded', function Sencoded() {
65242 return this.eddsa.encodeInt(this.S());
65243 });
65244
65245 Signature.prototype.toBytes = function toBytes() {
65246 return this.Rencoded().concat(this.Sencoded());
65247 };
65248
65249 Signature.prototype.toHex = function toHex() {
65250 return utils.encode(this.toBytes(), 'hex').toUpperCase();
65251 };
65252
65253 module.exports = Signature;
65254
65255 },{"../../elliptic":67,"bn.js":17}],80:[function(require,module,exports){
65256 module.exports = {
65257 doubles: {
65258 step: 4,
65259 points: [
65260 [
65261 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',
65262 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'
65263 ],
65264 [
65265 '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',
65266 '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'
65267 ],
65268 [
65269 '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',
65270 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'
65271 ],
65272 [
65273 '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',
65274 '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'
65275 ],
65276 [
65277 '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',
65278 '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'
65279 ],
65280 [
65281 '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',
65282 '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'
65283 ],
65284 [
65285 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',
65286 '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'
65287 ],
65288 [
65289 '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',
65290 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'
65291 ],
65292 [
65293 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',
65294 '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'
65295 ],
65296 [
65297 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',
65298 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'
65299 ],
65300 [
65301 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',
65302 '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'
65303 ],
65304 [
65305 '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',
65306 '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'
65307 ],
65308 [
65309 '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',
65310 '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'
65311 ],
65312 [
65313 '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',
65314 '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'
65315 ],
65316 [
65317 '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',
65318 '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'
65319 ],
65320 [
65321 '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',
65322 '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'
65323 ],
65324 [
65325 '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',
65326 '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'
65327 ],
65328 [
65329 '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',
65330 '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'
65331 ],
65332 [
65333 '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',
65334 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'
65335 ],
65336 [
65337 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',
65338 '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'
65339 ],
65340 [
65341 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',
65342 '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'
65343 ],
65344 [
65345 '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',
65346 '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'
65347 ],
65348 [
65349 '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',
65350 '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'
65351 ],
65352 [
65353 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',
65354 '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'
65355 ],
65356 [
65357 '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',
65358 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'
65359 ],
65360 [
65361 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',
65362 '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'
65363 ],
65364 [
65365 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',
65366 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'
65367 ],
65368 [
65369 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',
65370 '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'
65371 ],
65372 [
65373 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',
65374 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'
65375 ],
65376 [
65377 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',
65378 '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'
65379 ],
65380 [
65381 '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',
65382 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'
65383 ],
65384 [
65385 '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',
65386 '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'
65387 ],
65388 [
65389 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',
65390 '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'
65391 ],
65392 [
65393 '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',
65394 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'
65395 ],
65396 [
65397 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',
65398 '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'
65399 ],
65400 [
65401 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',
65402 '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'
65403 ],
65404 [
65405 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',
65406 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'
65407 ],
65408 [
65409 '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',
65410 '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'
65411 ],
65412 [
65413 '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',
65414 '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'
65415 ],
65416 [
65417 '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',
65418 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'
65419 ],
65420 [
65421 '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',
65422 '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'
65423 ],
65424 [
65425 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',
65426 '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'
65427 ],
65428 [
65429 '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',
65430 '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'
65431 ],
65432 [
65433 '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',
65434 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'
65435 ],
65436 [
65437 '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',
65438 '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'
65439 ],
65440 [
65441 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',
65442 '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'
65443 ],
65444 [
65445 '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',
65446 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'
65447 ],
65448 [
65449 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',
65450 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'
65451 ],
65452 [
65453 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',
65454 '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'
65455 ],
65456 [
65457 '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',
65458 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'
65459 ],
65460 [
65461 '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',
65462 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'
65463 ],
65464 [
65465 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',
65466 '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'
65467 ],
65468 [
65469 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',
65470 '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'
65471 ],
65472 [
65473 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',
65474 '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'
65475 ],
65476 [
65477 '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',
65478 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'
65479 ],
65480 [
65481 '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',
65482 '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'
65483 ],
65484 [
65485 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',
65486 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'
65487 ],
65488 [
65489 '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',
65490 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'
65491 ],
65492 [
65493 '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',
65494 '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'
65495 ],
65496 [
65497 '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',
65498 '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'
65499 ],
65500 [
65501 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',
65502 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'
65503 ],
65504 [
65505 '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',
65506 '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'
65507 ],
65508 [
65509 '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',
65510 '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'
65511 ],
65512 [
65513 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',
65514 '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'
65515 ],
65516 [
65517 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',
65518 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'
65519 ]
65520 ]
65521 },
65522 naf: {
65523 wnd: 7,
65524 points: [
65525 [
65526 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
65527 '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'
65528 ],
65529 [
65530 '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',
65531 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'
65532 ],
65533 [
65534 '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',
65535 '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'
65536 ],
65537 [
65538 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',
65539 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'
65540 ],
65541 [
65542 '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',
65543 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'
65544 ],
65545 [
65546 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',
65547 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'
65548 ],
65549 [
65550 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',
65551 '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'
65552 ],
65553 [
65554 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',
65555 '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'
65556 ],
65557 [
65558 '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',
65559 '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'
65560 ],
65561 [
65562 '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',
65563 '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'
65564 ],
65565 [
65566 '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',
65567 '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'
65568 ],
65569 [
65570 '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',
65571 '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'
65572 ],
65573 [
65574 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',
65575 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'
65576 ],
65577 [
65578 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',
65579 '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'
65580 ],
65581 [
65582 '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',
65583 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'
65584 ],
65585 [
65586 '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',
65587 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'
65588 ],
65589 [
65590 '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',
65591 '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'
65592 ],
65593 [
65594 '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',
65595 '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'
65596 ],
65597 [
65598 '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',
65599 '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'
65600 ],
65601 [
65602 '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',
65603 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'
65604 ],
65605 [
65606 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',
65607 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'
65608 ],
65609 [
65610 '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',
65611 '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'
65612 ],
65613 [
65614 '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',
65615 '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'
65616 ],
65617 [
65618 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',
65619 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'
65620 ],
65621 [
65622 '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',
65623 '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'
65624 ],
65625 [
65626 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',
65627 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'
65628 ],
65629 [
65630 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',
65631 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'
65632 ],
65633 [
65634 '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',
65635 '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'
65636 ],
65637 [
65638 '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',
65639 '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'
65640 ],
65641 [
65642 '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',
65643 '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'
65644 ],
65645 [
65646 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',
65647 '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'
65648 ],
65649 [
65650 '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',
65651 '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'
65652 ],
65653 [
65654 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',
65655 '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'
65656 ],
65657 [
65658 '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',
65659 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'
65660 ],
65661 [
65662 '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',
65663 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'
65664 ],
65665 [
65666 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',
65667 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'
65668 ],
65669 [
65670 '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',
65671 '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'
65672 ],
65673 [
65674 '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',
65675 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'
65676 ],
65677 [
65678 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',
65679 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'
65680 ],
65681 [
65682 '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',
65683 '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'
65684 ],
65685 [
65686 '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',
65687 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'
65688 ],
65689 [
65690 '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',
65691 '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'
65692 ],
65693 [
65694 '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',
65695 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'
65696 ],
65697 [
65698 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',
65699 '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'
65700 ],
65701 [
65702 '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',
65703 '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'
65704 ],
65705 [
65706 '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',
65707 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'
65708 ],
65709 [
65710 '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',
65711 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'
65712 ],
65713 [
65714 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',
65715 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'
65716 ],
65717 [
65718 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',
65719 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'
65720 ],
65721 [
65722 '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',
65723 '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'
65724 ],
65725 [
65726 '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',
65727 '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'
65728 ],
65729 [
65730 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',
65731 '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'
65732 ],
65733 [
65734 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',
65735 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'
65736 ],
65737 [
65738 '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',
65739 '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'
65740 ],
65741 [
65742 '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',
65743 '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'
65744 ],
65745 [
65746 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',
65747 '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'
65748 ],
65749 [
65750 '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',
65751 '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'
65752 ],
65753 [
65754 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',
65755 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'
65756 ],
65757 [
65758 '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',
65759 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'
65760 ],
65761 [
65762 '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',
65763 '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'
65764 ],
65765 [
65766 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',
65767 '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'
65768 ],
65769 [
65770 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',
65771 '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'
65772 ],
65773 [
65774 '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',
65775 '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'
65776 ],
65777 [
65778 '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',
65779 '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'
65780 ],
65781 [
65782 '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',
65783 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'
65784 ],
65785 [
65786 '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',
65787 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'
65788 ],
65789 [
65790 '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',
65791 '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'
65792 ],
65793 [
65794 '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',
65795 '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'
65796 ],
65797 [
65798 '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',
65799 '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'
65800 ],
65801 [
65802 '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',
65803 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'
65804 ],
65805 [
65806 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',
65807 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'
65808 ],
65809 [
65810 '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',
65811 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'
65812 ],
65813 [
65814 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',
65815 '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'
65816 ],
65817 [
65818 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',
65819 '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'
65820 ],
65821 [
65822 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',
65823 '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'
65824 ],
65825 [
65826 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',
65827 '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'
65828 ],
65829 [
65830 '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',
65831 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'
65832 ],
65833 [
65834 '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',
65835 '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'
65836 ],
65837 [
65838 '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',
65839 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'
65840 ],
65841 [
65842 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',
65843 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'
65844 ],
65845 [
65846 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',
65847 '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'
65848 ],
65849 [
65850 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',
65851 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'
65852 ],
65853 [
65854 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',
65855 '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'
65856 ],
65857 [
65858 '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',
65859 '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'
65860 ],
65861 [
65862 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',
65863 '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'
65864 ],
65865 [
65866 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',
65867 '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'
65868 ],
65869 [
65870 '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',
65871 '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'
65872 ],
65873 [
65874 '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',
65875 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'
65876 ],
65877 [
65878 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',
65879 '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'
65880 ],
65881 [
65882 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',
65883 '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'
65884 ],
65885 [
65886 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',
65887 '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'
65888 ],
65889 [
65890 '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',
65891 '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'
65892 ],
65893 [
65894 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',
65895 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'
65896 ],
65897 [
65898 '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',
65899 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'
65900 ],
65901 [
65902 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',
65903 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'
65904 ],
65905 [
65906 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',
65907 '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'
65908 ],
65909 [
65910 '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',
65911 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'
65912 ],
65913 [
65914 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',
65915 '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'
65916 ],
65917 [
65918 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',
65919 '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'
65920 ],
65921 [
65922 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',
65923 '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'
65924 ],
65925 [
65926 '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',
65927 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'
65928 ],
65929 [
65930 '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',
65931 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'
65932 ],
65933 [
65934 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',
65935 '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'
65936 ],
65937 [
65938 '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',
65939 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'
65940 ],
65941 [
65942 '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',
65943 '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'
65944 ],
65945 [
65946 '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',
65947 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'
65948 ],
65949 [
65950 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',
65951 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'
65952 ],
65953 [
65954 '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',
65955 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'
65956 ],
65957 [
65958 '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',
65959 '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'
65960 ],
65961 [
65962 '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',
65963 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'
65964 ],
65965 [
65966 '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',
65967 '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'
65968 ],
65969 [
65970 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',
65971 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'
65972 ],
65973 [
65974 '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',
65975 '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'
65976 ],
65977 [
65978 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',
65979 '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'
65980 ],
65981 [
65982 '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',
65983 '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'
65984 ],
65985 [
65986 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',
65987 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'
65988 ],
65989 [
65990 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',
65991 '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'
65992 ],
65993 [
65994 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',
65995 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'
65996 ],
65997 [
65998 '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',
65999 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'
66000 ],
66001 [
66002 '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',
66003 '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'
66004 ],
66005 [
66006 '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',
66007 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'
66008 ],
66009 [
66010 '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',
66011 '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'
66012 ],
66013 [
66014 '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',
66015 '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'
66016 ],
66017 [
66018 '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',
66019 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'
66020 ],
66021 [
66022 '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',
66023 '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'
66024 ],
66025 [
66026 '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',
66027 '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'
66028 ],
66029 [
66030 '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',
66031 '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'
66032 ]
66033 ]
66034 }
66035 };
66036
66037 },{}],81:[function(require,module,exports){
66038 'use strict';
66039
66040 var utils = exports;
66041 var BN = require('bn.js');
66042 var minAssert = require('minimalistic-assert');
66043 var minUtils = require('minimalistic-crypto-utils');
66044
66045 utils.assert = minAssert;
66046 utils.toArray = minUtils.toArray;
66047 utils.zero2 = minUtils.zero2;
66048 utils.toHex = minUtils.toHex;
66049 utils.encode = minUtils.encode;
66050
66051 // Represent num in a w-NAF form
66052 function getNAF(num, w) {
66053 var naf = [];
66054 var ws = 1 << (w + 1);
66055 var k = num.clone();
66056 while (k.cmpn(1) >= 0) {
66057 var z;
66058 if (k.isOdd()) {
66059 var mod = k.andln(ws - 1);
66060 if (mod > (ws >> 1) - 1)
66061 z = (ws >> 1) - mod;
66062 else
66063 z = mod;
66064 k.isubn(z);
66065 } else {
66066 z = 0;
66067 }
66068 naf.push(z);
66069
66070 // Optimization, shift by word if possible
66071 var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;
66072 for (var i = 1; i < shift; i++)
66073 naf.push(0);
66074 k.iushrn(shift);
66075 }
66076
66077 return naf;
66078 }
66079 utils.getNAF = getNAF;
66080
66081 // Represent k1, k2 in a Joint Sparse Form
66082 function getJSF(k1, k2) {
66083 var jsf = [
66084 [],
66085 []
66086 ];
66087
66088 k1 = k1.clone();
66089 k2 = k2.clone();
66090 var d1 = 0;
66091 var d2 = 0;
66092 while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
66093
66094 // First phase
66095 var m14 = (k1.andln(3) + d1) & 3;
66096 var m24 = (k2.andln(3) + d2) & 3;
66097 if (m14 === 3)
66098 m14 = -1;
66099 if (m24 === 3)
66100 m24 = -1;
66101 var u1;
66102 if ((m14 & 1) === 0) {
66103 u1 = 0;
66104 } else {
66105 var m8 = (k1.andln(7) + d1) & 7;
66106 if ((m8 === 3 || m8 === 5) && m24 === 2)
66107 u1 = -m14;
66108 else
66109 u1 = m14;
66110 }
66111 jsf[0].push(u1);
66112
66113 var u2;
66114 if ((m24 & 1) === 0) {
66115 u2 = 0;
66116 } else {
66117 var m8 = (k2.andln(7) + d2) & 7;
66118 if ((m8 === 3 || m8 === 5) && m14 === 2)
66119 u2 = -m24;
66120 else
66121 u2 = m24;
66122 }
66123 jsf[1].push(u2);
66124
66125 // Second phase
66126 if (2 * d1 === u1 + 1)
66127 d1 = 1 - d1;
66128 if (2 * d2 === u2 + 1)
66129 d2 = 1 - d2;
66130 k1.iushrn(1);
66131 k2.iushrn(1);
66132 }
66133
66134 return jsf;
66135 }
66136 utils.getJSF = getJSF;
66137
66138 function cachedProperty(obj, name, computer) {
66139 var key = '_' + name;
66140 obj.prototype[name] = function cachedProperty() {
66141 return this[key] !== undefined ? this[key] :
66142 this[key] = computer.call(this);
66143 };
66144 }
66145 utils.cachedProperty = cachedProperty;
66146
66147 function parseBytes(bytes) {
66148 return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :
66149 bytes;
66150 }
66151 utils.parseBytes = parseBytes;
66152
66153 function intFromLE(bytes) {
66154 return new BN(bytes, 'hex', 'le');
66155 }
66156 utils.intFromLE = intFromLE;
66157
66158
66159 },{"bn.js":17,"minimalistic-assert":99,"minimalistic-crypto-utils":100}],82:[function(require,module,exports){
66160 module.exports={
66161 "_args": [
66162 [
66163 "elliptic@^6.0.0",
66164 "/home/ian/.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/browserify-sign"
66165 ]
66166 ],
66167 "_from": "elliptic@>=6.0.0 <7.0.0",
66168 "_id": "elliptic@6.4.0",
66169 "_inCache": true,
66170 "_installable": true,
66171 "_location": "/browserify/elliptic",
66172 "_nodeVersion": "7.0.0",
66173 "_npmOperationalInternal": {
66174 "host": "packages-18-east.internal.npmjs.com",
66175 "tmp": "tmp/elliptic-6.4.0.tgz_1487798866428_0.30510620190761983"
66176 },
66177 "_npmUser": {
66178 "email": "fedor@indutny.com",
66179 "name": "indutny"
66180 },
66181 "_npmVersion": "3.10.8",
66182 "_phantomChildren": {},
66183 "_requested": {
66184 "name": "elliptic",
66185 "raw": "elliptic@^6.0.0",
66186 "rawSpec": "^6.0.0",
66187 "scope": null,
66188 "spec": ">=6.0.0 <7.0.0",
66189 "type": "range"
66190 },
66191 "_requiredBy": [
66192 "/browserify/browserify-sign",
66193 "/browserify/create-ecdh"
66194 ],
66195 "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz",
66196 "_shasum": "cac9af8762c85836187003c8dfe193e5e2eae5df",
66197 "_shrinkwrap": null,
66198 "_spec": "elliptic@^6.0.0",
66199 "_where": "/home/ian/.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/browserify-sign",
66200 "author": {
66201 "email": "fedor@indutny.com",
66202 "name": "Fedor Indutny"
66203 },
66204 "bugs": {
66205 "url": "https://github.com/indutny/elliptic/issues"
66206 },
66207 "dependencies": {
66208 "bn.js": "^4.4.0",
66209 "brorand": "^1.0.1",
66210 "hash.js": "^1.0.0",
66211 "hmac-drbg": "^1.0.0",
66212 "inherits": "^2.0.1",
66213 "minimalistic-assert": "^1.0.0",
66214 "minimalistic-crypto-utils": "^1.0.0"
66215 },
66216 "description": "EC cryptography",
66217 "devDependencies": {
66218 "brfs": "^1.4.3",
66219 "coveralls": "^2.11.3",
66220 "grunt": "^0.4.5",
66221 "grunt-browserify": "^5.0.0",
66222 "grunt-cli": "^1.2.0",
66223 "grunt-contrib-connect": "^1.0.0",
66224 "grunt-contrib-copy": "^1.0.0",
66225 "grunt-contrib-uglify": "^1.0.1",
66226 "grunt-mocha-istanbul": "^3.0.1",
66227 "grunt-saucelabs": "^8.6.2",
66228 "istanbul": "^0.4.2",
66229 "jscs": "^2.9.0",
66230 "jshint": "^2.6.0",
66231 "mocha": "^2.1.0"
66232 },
66233 "directories": {},
66234 "dist": {
66235 "shasum": "cac9af8762c85836187003c8dfe193e5e2eae5df",
66236 "tarball": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz"
66237 },
66238 "files": [
66239 "lib"
66240 ],
66241 "gitHead": "6b0d2b76caae91471649c8e21f0b1d3ba0f96090",
66242 "homepage": "https://github.com/indutny/elliptic",
66243 "keywords": [
66244 "EC",
66245 "Elliptic",
66246 "curve",
66247 "Cryptography"
66248 ],
66249 "license": "MIT",
66250 "main": "lib/elliptic.js",
66251 "maintainers": [
66252 {
66253 "email": "fedor@indutny.com",
66254 "name": "indutny"
66255 }
66256 ],
66257 "name": "elliptic",
66258 "optionalDependencies": {},
66259 "readme": "ERROR: No README data found!",
66260 "repository": {
66261 "type": "git",
66262 "url": "git+ssh://git@github.com/indutny/elliptic.git"
66263 },
66264 "scripts": {
66265 "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
66266 "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
66267 "lint": "npm run jscs && npm run jshint",
66268 "test": "npm run lint && npm run unit",
66269 "unit": "istanbul test _mocha --reporter=spec test/index.js",
66270 "version": "grunt dist && git add dist/"
66271 },
66272 "version": "6.4.0"
66273 }
66274
66275 },{}],83:[function(require,module,exports){
66276 // Copyright Joyent, Inc. and other Node contributors.
66277 //
66278 // Permission is hereby granted, free of charge, to any person obtaining a
66279 // copy of this software and associated documentation files (the
66280 // "Software"), to deal in the Software without restriction, including
66281 // without limitation the rights to use, copy, modify, merge, publish,
66282 // distribute, sublicense, and/or sell copies of the Software, and to permit
66283 // persons to whom the Software is furnished to do so, subject to the
66284 // following conditions:
66285 //
66286 // The above copyright notice and this permission notice shall be included
66287 // in all copies or substantial portions of the Software.
66288 //
66289 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
66290 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
66291 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
66292 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
66293 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
66294 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
66295 // USE OR OTHER DEALINGS IN THE SOFTWARE.
66296
66297 function EventEmitter() {
66298 this._events = this._events || {};
66299 this._maxListeners = this._maxListeners || undefined;
66300 }
66301 module.exports = EventEmitter;
66302
66303 // Backwards-compat with node 0.10.x
66304 EventEmitter.EventEmitter = EventEmitter;
66305
66306 EventEmitter.prototype._events = undefined;
66307 EventEmitter.prototype._maxListeners = undefined;
66308
66309 // By default EventEmitters will print a warning if more than 10 listeners are
66310 // added to it. This is a useful default which helps finding memory leaks.
66311 EventEmitter.defaultMaxListeners = 10;
66312
66313 // Obviously not all Emitters should be limited to 10. This function allows
66314 // that to be increased. Set to zero for unlimited.
66315 EventEmitter.prototype.setMaxListeners = function(n) {
66316 if (!isNumber(n) || n < 0 || isNaN(n))
66317 throw TypeError('n must be a positive number');
66318 this._maxListeners = n;
66319 return this;
66320 };
66321
66322 EventEmitter.prototype.emit = function(type) {
66323 var er, handler, len, args, i, listeners;
66324
66325 if (!this._events)
66326 this._events = {};
66327
66328 // If there is no 'error' event listener then throw.
66329 if (type === 'error') {
66330 if (!this._events.error ||
66331 (isObject(this._events.error) && !this._events.error.length)) {
66332 er = arguments[1];
66333 if (er instanceof Error) {
66334 throw er; // Unhandled 'error' event
66335 } else {
66336 // At least give some kind of context to the user
66337 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
66338 err.context = er;
66339 throw err;
66340 }
66341 }
66342 }
66343
66344 handler = this._events[type];
66345
66346 if (isUndefined(handler))
66347 return false;
66348
66349 if (isFunction(handler)) {
66350 switch (arguments.length) {
66351 // fast cases
66352 case 1:
66353 handler.call(this);
66354 break;
66355 case 2:
66356 handler.call(this, arguments[1]);
66357 break;
66358 case 3:
66359 handler.call(this, arguments[1], arguments[2]);
66360 break;
66361 // slower
66362 default:
66363 args = Array.prototype.slice.call(arguments, 1);
66364 handler.apply(this, args);
66365 }
66366 } else if (isObject(handler)) {
66367 args = Array.prototype.slice.call(arguments, 1);
66368 listeners = handler.slice();
66369 len = listeners.length;
66370 for (i = 0; i < len; i++)
66371 listeners[i].apply(this, args);
66372 }
66373
66374 return true;
66375 };
66376
66377 EventEmitter.prototype.addListener = function(type, listener) {
66378 var m;
66379
66380 if (!isFunction(listener))
66381 throw TypeError('listener must be a function');
66382
66383 if (!this._events)
66384 this._events = {};
66385
66386 // To avoid recursion in the case that type === "newListener"! Before
66387 // adding it to the listeners, first emit "newListener".
66388 if (this._events.newListener)
66389 this.emit('newListener', type,
66390 isFunction(listener.listener) ?
66391 listener.listener : listener);
66392
66393 if (!this._events[type])
66394 // Optimize the case of one listener. Don't need the extra array object.
66395 this._events[type] = listener;
66396 else if (isObject(this._events[type]))
66397 // If we've already got an array, just append.
66398 this._events[type].push(listener);
66399 else
66400 // Adding the second element, need to change to array.
66401 this._events[type] = [this._events[type], listener];
66402
66403 // Check for listener leak
66404 if (isObject(this._events[type]) && !this._events[type].warned) {
66405 if (!isUndefined(this._maxListeners)) {
66406 m = this._maxListeners;
66407 } else {
66408 m = EventEmitter.defaultMaxListeners;
66409 }
66410
66411 if (m && m > 0 && this._events[type].length > m) {
66412 this._events[type].warned = true;
66413 console.error('(node) warning: possible EventEmitter memory ' +
66414 'leak detected. %d listeners added. ' +
66415 'Use emitter.setMaxListeners() to increase limit.',
66416 this._events[type].length);
66417 if (typeof console.trace === 'function') {
66418 // not supported in IE 10
66419 console.trace();
66420 }
66421 }
66422 }
66423
66424 return this;
66425 };
66426
66427 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
66428
66429 EventEmitter.prototype.once = function(type, listener) {
66430 if (!isFunction(listener))
66431 throw TypeError('listener must be a function');
66432
66433 var fired = false;
66434
66435 function g() {
66436 this.removeListener(type, g);
66437
66438 if (!fired) {
66439 fired = true;
66440 listener.apply(this, arguments);
66441 }
66442 }
66443
66444 g.listener = listener;
66445 this.on(type, g);
66446
66447 return this;
66448 };
66449
66450 // emits a 'removeListener' event iff the listener was removed
66451 EventEmitter.prototype.removeListener = function(type, listener) {
66452 var list, position, length, i;
66453
66454 if (!isFunction(listener))
66455 throw TypeError('listener must be a function');
66456
66457 if (!this._events || !this._events[type])
66458 return this;
66459
66460 list = this._events[type];
66461 length = list.length;
66462 position = -1;
66463
66464 if (list === listener ||
66465 (isFunction(list.listener) && list.listener === listener)) {
66466 delete this._events[type];
66467 if (this._events.removeListener)
66468 this.emit('removeListener', type, listener);
66469
66470 } else if (isObject(list)) {
66471 for (i = length; i-- > 0;) {
66472 if (list[i] === listener ||
66473 (list[i].listener && list[i].listener === listener)) {
66474 position = i;
66475 break;
66476 }
66477 }
66478
66479 if (position < 0)
66480 return this;
66481
66482 if (list.length === 1) {
66483 list.length = 0;
66484 delete this._events[type];
66485 } else {
66486 list.splice(position, 1);
66487 }
66488
66489 if (this._events.removeListener)
66490 this.emit('removeListener', type, listener);
66491 }
66492
66493 return this;
66494 };
66495
66496 EventEmitter.prototype.removeAllListeners = function(type) {
66497 var key, listeners;
66498
66499 if (!this._events)
66500 return this;
66501
66502 // not listening for removeListener, no need to emit
66503 if (!this._events.removeListener) {
66504 if (arguments.length === 0)
66505 this._events = {};
66506 else if (this._events[type])
66507 delete this._events[type];
66508 return this;
66509 }
66510
66511 // emit removeListener for all listeners on all events
66512 if (arguments.length === 0) {
66513 for (key in this._events) {
66514 if (key === 'removeListener') continue;
66515 this.removeAllListeners(key);
66516 }
66517 this.removeAllListeners('removeListener');
66518 this._events = {};
66519 return this;
66520 }
66521
66522 listeners = this._events[type];
66523
66524 if (isFunction(listeners)) {
66525 this.removeListener(type, listeners);
66526 } else if (listeners) {
66527 // LIFO order
66528 while (listeners.length)
66529 this.removeListener(type, listeners[listeners.length - 1]);
66530 }
66531 delete this._events[type];
66532
66533 return this;
66534 };
66535
66536 EventEmitter.prototype.listeners = function(type) {
66537 var ret;
66538 if (!this._events || !this._events[type])
66539 ret = [];
66540 else if (isFunction(this._events[type]))
66541 ret = [this._events[type]];
66542 else
66543 ret = this._events[type].slice();
66544 return ret;
66545 };
66546
66547 EventEmitter.prototype.listenerCount = function(type) {
66548 if (this._events) {
66549 var evlistener = this._events[type];
66550
66551 if (isFunction(evlistener))
66552 return 1;
66553 else if (evlistener)
66554 return evlistener.length;
66555 }
66556 return 0;
66557 };
66558
66559 EventEmitter.listenerCount = function(emitter, type) {
66560 return emitter.listenerCount(type);
66561 };
66562
66563 function isFunction(arg) {
66564 return typeof arg === 'function';
66565 }
66566
66567 function isNumber(arg) {
66568 return typeof arg === 'number';
66569 }
66570
66571 function isObject(arg) {
66572 return typeof arg === 'object' && arg !== null;
66573 }
66574
66575 function isUndefined(arg) {
66576 return arg === void 0;
66577 }
66578
66579 },{}],84:[function(require,module,exports){
66580 (function (Buffer){
66581 var md5 = require('create-hash/md5')
66582 module.exports = EVP_BytesToKey
66583 function EVP_BytesToKey (password, salt, keyLen, ivLen) {
66584 if (!Buffer.isBuffer(password)) {
66585 password = new Buffer(password, 'binary')
66586 }
66587 if (salt && !Buffer.isBuffer(salt)) {
66588 salt = new Buffer(salt, 'binary')
66589 }
66590 keyLen = keyLen / 8
66591 ivLen = ivLen || 0
66592 var ki = 0
66593 var ii = 0
66594 var key = new Buffer(keyLen)
66595 var iv = new Buffer(ivLen)
66596 var addmd = 0
66597 var md_buf
66598 var i
66599 var bufs = []
66600 while (true) {
66601 if (addmd++ > 0) {
66602 bufs.push(md_buf)
66603 }
66604 bufs.push(password)
66605 if (salt) {
66606 bufs.push(salt)
66607 }
66608 md_buf = md5(Buffer.concat(bufs))
66609 bufs = []
66610 i = 0
66611 if (keyLen > 0) {
66612 while (true) {
66613 if (keyLen === 0) {
66614 break
66615 }
66616 if (i === md_buf.length) {
66617 break
66618 }
66619 key[ki++] = md_buf[i]
66620 keyLen--
66621 i++
66622 }
66623 }
66624 if (ivLen > 0 && i !== md_buf.length) {
66625 while (true) {
66626 if (ivLen === 0) {
66627 break
66628 }
66629 if (i === md_buf.length) {
66630 break
66631 }
66632 iv[ii++] = md_buf[i]
66633 ivLen--
66634 i++
66635 }
66636 }
66637 if (keyLen === 0 && ivLen === 0) {
66638 break
66639 }
66640 }
66641 for (i = 0; i < md_buf.length; i++) {
66642 md_buf[i] = 0
66643 }
66644 return {
66645 key: key,
66646 iv: iv
66647 }
66648 }
66649
66650 }).call(this,require("buffer").Buffer)
66651 },{"buffer":47,"create-hash/md5":53}],85:[function(require,module,exports){
66652 (function (Buffer){
66653 'use strict'
66654 var Transform = require('stream').Transform
66655 var inherits = require('inherits')
66656
66657 function HashBase (blockSize) {
66658 Transform.call(this)
66659
66660 this._block = new Buffer(blockSize)
66661 this._blockSize = blockSize
66662 this._blockOffset = 0
66663 this._length = [0, 0, 0, 0]
66664
66665 this._finalized = false
66666 }
66667
66668 inherits(HashBase, Transform)
66669
66670 HashBase.prototype._transform = function (chunk, encoding, callback) {
66671 var error = null
66672 try {
66673 if (encoding !== 'buffer') chunk = new Buffer(chunk, encoding)
66674 this.update(chunk)
66675 } catch (err) {
66676 error = err
66677 }
66678
66679 callback(error)
66680 }
66681
66682 HashBase.prototype._flush = function (callback) {
66683 var error = null
66684 try {
66685 this.push(this._digest())
66686 } catch (err) {
66687 error = err
66688 }
66689
66690 callback(error)
66691 }
66692
66693 HashBase.prototype.update = function (data, encoding) {
66694 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
66695 if (this._finalized) throw new Error('Digest already called')
66696 if (!Buffer.isBuffer(data)) data = new Buffer(data, encoding || 'binary')
66697
66698 // consume data
66699 var block = this._block
66700 var offset = 0
66701 while (this._blockOffset + data.length - offset >= this._blockSize) {
66702 for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]
66703 this._update()
66704 this._blockOffset = 0
66705 }
66706 while (offset < data.length) block[this._blockOffset++] = data[offset++]
66707
66708 // update length
66709 for (var j = 0, carry = data.length * 8; carry > 0; ++j) {
66710 this._length[j] += carry
66711 carry = (this._length[j] / 0x0100000000) | 0
66712 if (carry > 0) this._length[j] -= 0x0100000000 * carry
66713 }
66714
66715 return this
66716 }
66717
66718 HashBase.prototype._update = function (data) {
66719 throw new Error('_update is not implemented')
66720 }
66721
66722 HashBase.prototype.digest = function (encoding) {
66723 if (this._finalized) throw new Error('Digest already called')
66724 this._finalized = true
66725
66726 var digest = this._digest()
66727 if (encoding !== undefined) digest = digest.toString(encoding)
66728 return digest
66729 }
66730
66731 HashBase.prototype._digest = function () {
66732 throw new Error('_digest is not implemented')
66733 }
66734
66735 module.exports = HashBase
66736
66737 }).call(this,require("buffer").Buffer)
66738 },{"buffer":47,"inherits":95,"stream":143}],86:[function(require,module,exports){
66739 var hash = exports;
66740
66741 hash.utils = require('./hash/utils');
66742 hash.common = require('./hash/common');
66743 hash.sha = require('./hash/sha');
66744 hash.ripemd = require('./hash/ripemd');
66745 hash.hmac = require('./hash/hmac');
66746
66747 // Proxy hash functions to the main object
66748 hash.sha1 = hash.sha.sha1;
66749 hash.sha256 = hash.sha.sha256;
66750 hash.sha224 = hash.sha.sha224;
66751 hash.sha384 = hash.sha.sha384;
66752 hash.sha512 = hash.sha.sha512;
66753 hash.ripemd160 = hash.ripemd.ripemd160;
66754
66755 },{"./hash/common":87,"./hash/hmac":88,"./hash/ripemd":89,"./hash/sha":90,"./hash/utils":91}],87:[function(require,module,exports){
66756 var hash = require('../hash');
66757 var utils = hash.utils;
66758 var assert = utils.assert;
66759
66760 function BlockHash() {
66761 this.pending = null;
66762 this.pendingTotal = 0;
66763 this.blockSize = this.constructor.blockSize;
66764 this.outSize = this.constructor.outSize;
66765 this.hmacStrength = this.constructor.hmacStrength;
66766 this.padLength = this.constructor.padLength / 8;
66767 this.endian = 'big';
66768
66769 this._delta8 = this.blockSize / 8;
66770 this._delta32 = this.blockSize / 32;
66771 }
66772 exports.BlockHash = BlockHash;
66773
66774 BlockHash.prototype.update = function update(msg, enc) {
66775 // Convert message to array, pad it, and join into 32bit blocks
66776 msg = utils.toArray(msg, enc);
66777 if (!this.pending)
66778 this.pending = msg;
66779 else
66780 this.pending = this.pending.concat(msg);
66781 this.pendingTotal += msg.length;
66782
66783 // Enough data, try updating
66784 if (this.pending.length >= this._delta8) {
66785 msg = this.pending;
66786
66787 // Process pending data in blocks
66788 var r = msg.length % this._delta8;
66789 this.pending = msg.slice(msg.length - r, msg.length);
66790 if (this.pending.length === 0)
66791 this.pending = null;
66792
66793 msg = utils.join32(msg, 0, msg.length - r, this.endian);
66794 for (var i = 0; i < msg.length; i += this._delta32)
66795 this._update(msg, i, i + this._delta32);
66796 }
66797
66798 return this;
66799 };
66800
66801 BlockHash.prototype.digest = function digest(enc) {
66802 this.update(this._pad());
66803 assert(this.pending === null);
66804
66805 return this._digest(enc);
66806 };
66807
66808 BlockHash.prototype._pad = function pad() {
66809 var len = this.pendingTotal;
66810 var bytes = this._delta8;
66811 var k = bytes - ((len + this.padLength) % bytes);
66812 var res = new Array(k + this.padLength);
66813 res[0] = 0x80;
66814 for (var i = 1; i < k; i++)
66815 res[i] = 0;
66816
66817 // Append length
66818 len <<= 3;
66819 if (this.endian === 'big') {
66820 for (var t = 8; t < this.padLength; t++)
66821 res[i++] = 0;
66822
66823 res[i++] = 0;
66824 res[i++] = 0;
66825 res[i++] = 0;
66826 res[i++] = 0;
66827 res[i++] = (len >>> 24) & 0xff;
66828 res[i++] = (len >>> 16) & 0xff;
66829 res[i++] = (len >>> 8) & 0xff;
66830 res[i++] = len & 0xff;
66831 } else {
66832 res[i++] = len & 0xff;
66833 res[i++] = (len >>> 8) & 0xff;
66834 res[i++] = (len >>> 16) & 0xff;
66835 res[i++] = (len >>> 24) & 0xff;
66836 res[i++] = 0;
66837 res[i++] = 0;
66838 res[i++] = 0;
66839 res[i++] = 0;
66840
66841 for (var t = 8; t < this.padLength; t++)
66842 res[i++] = 0;
66843 }
66844
66845 return res;
66846 };
66847
66848 },{"../hash":86}],88:[function(require,module,exports){
66849 var hmac = exports;
66850
66851 var hash = require('../hash');
66852 var utils = hash.utils;
66853 var assert = utils.assert;
66854
66855 function Hmac(hash, key, enc) {
66856 if (!(this instanceof Hmac))
66857 return new Hmac(hash, key, enc);
66858 this.Hash = hash;
66859 this.blockSize = hash.blockSize / 8;
66860 this.outSize = hash.outSize / 8;
66861 this.inner = null;
66862 this.outer = null;
66863
66864 this._init(utils.toArray(key, enc));
66865 }
66866 module.exports = Hmac;
66867
66868 Hmac.prototype._init = function init(key) {
66869 // Shorten key, if needed
66870 if (key.length > this.blockSize)
66871 key = new this.Hash().update(key).digest();
66872 assert(key.length <= this.blockSize);
66873
66874 // Add padding to key
66875 for (var i = key.length; i < this.blockSize; i++)
66876 key.push(0);
66877
66878 for (var i = 0; i < key.length; i++)
66879 key[i] ^= 0x36;
66880 this.inner = new this.Hash().update(key);
66881
66882 // 0x36 ^ 0x5c = 0x6a
66883 for (var i = 0; i < key.length; i++)
66884 key[i] ^= 0x6a;
66885 this.outer = new this.Hash().update(key);
66886 };
66887
66888 Hmac.prototype.update = function update(msg, enc) {
66889 this.inner.update(msg, enc);
66890 return this;
66891 };
66892
66893 Hmac.prototype.digest = function digest(enc) {
66894 this.outer.update(this.inner.digest());
66895 return this.outer.digest(enc);
66896 };
66897
66898 },{"../hash":86}],89:[function(require,module,exports){
66899 var hash = require('../hash');
66900 var utils = hash.utils;
66901
66902 var rotl32 = utils.rotl32;
66903 var sum32 = utils.sum32;
66904 var sum32_3 = utils.sum32_3;
66905 var sum32_4 = utils.sum32_4;
66906 var BlockHash = hash.common.BlockHash;
66907
66908 function RIPEMD160() {
66909 if (!(this instanceof RIPEMD160))
66910 return new RIPEMD160();
66911
66912 BlockHash.call(this);
66913
66914 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
66915 this.endian = 'little';
66916 }
66917 utils.inherits(RIPEMD160, BlockHash);
66918 exports.ripemd160 = RIPEMD160;
66919
66920 RIPEMD160.blockSize = 512;
66921 RIPEMD160.outSize = 160;
66922 RIPEMD160.hmacStrength = 192;
66923 RIPEMD160.padLength = 64;
66924
66925 RIPEMD160.prototype._update = function update(msg, start) {
66926 var A = this.h[0];
66927 var B = this.h[1];
66928 var C = this.h[2];
66929 var D = this.h[3];
66930 var E = this.h[4];
66931 var Ah = A;
66932 var Bh = B;
66933 var Ch = C;
66934 var Dh = D;
66935 var Eh = E;
66936 for (var j = 0; j < 80; j++) {
66937 var T = sum32(
66938 rotl32(
66939 sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
66940 s[j]),
66941 E);
66942 A = E;
66943 E = D;
66944 D = rotl32(C, 10);
66945 C = B;
66946 B = T;
66947 T = sum32(
66948 rotl32(
66949 sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
66950 sh[j]),
66951 Eh);
66952 Ah = Eh;
66953 Eh = Dh;
66954 Dh = rotl32(Ch, 10);
66955 Ch = Bh;
66956 Bh = T;
66957 }
66958 T = sum32_3(this.h[1], C, Dh);
66959 this.h[1] = sum32_3(this.h[2], D, Eh);
66960 this.h[2] = sum32_3(this.h[3], E, Ah);
66961 this.h[3] = sum32_3(this.h[4], A, Bh);
66962 this.h[4] = sum32_3(this.h[0], B, Ch);
66963 this.h[0] = T;
66964 };
66965
66966 RIPEMD160.prototype._digest = function digest(enc) {
66967 if (enc === 'hex')
66968 return utils.toHex32(this.h, 'little');
66969 else
66970 return utils.split32(this.h, 'little');
66971 };
66972
66973 function f(j, x, y, z) {
66974 if (j <= 15)
66975 return x ^ y ^ z;
66976 else if (j <= 31)
66977 return (x & y) | ((~x) & z);
66978 else if (j <= 47)
66979 return (x | (~y)) ^ z;
66980 else if (j <= 63)
66981 return (x & z) | (y & (~z));
66982 else
66983 return x ^ (y | (~z));
66984 }
66985
66986 function K(j) {
66987 if (j <= 15)
66988 return 0x00000000;
66989 else if (j <= 31)
66990 return 0x5a827999;
66991 else if (j <= 47)
66992 return 0x6ed9eba1;
66993 else if (j <= 63)
66994 return 0x8f1bbcdc;
66995 else
66996 return 0xa953fd4e;
66997 }
66998
66999 function Kh(j) {
67000 if (j <= 15)
67001 return 0x50a28be6;
67002 else if (j <= 31)
67003 return 0x5c4dd124;
67004 else if (j <= 47)
67005 return 0x6d703ef3;
67006 else if (j <= 63)
67007 return 0x7a6d76e9;
67008 else
67009 return 0x00000000;
67010 }
67011
67012 var r = [
67013 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
67014 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
67015 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
67016 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
67017 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
67018 ];
67019
67020 var rh = [
67021 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
67022 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
67023 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
67024 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
67025 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
67026 ];
67027
67028 var s = [
67029 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
67030 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
67031 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
67032 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
67033 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
67034 ];
67035
67036 var sh = [
67037 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
67038 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
67039 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
67040 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
67041 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
67042 ];
67043
67044 },{"../hash":86}],90:[function(require,module,exports){
67045 var hash = require('../hash');
67046 var utils = hash.utils;
67047 var assert = utils.assert;
67048
67049 var rotr32 = utils.rotr32;
67050 var rotl32 = utils.rotl32;
67051 var sum32 = utils.sum32;
67052 var sum32_4 = utils.sum32_4;
67053 var sum32_5 = utils.sum32_5;
67054 var rotr64_hi = utils.rotr64_hi;
67055 var rotr64_lo = utils.rotr64_lo;
67056 var shr64_hi = utils.shr64_hi;
67057 var shr64_lo = utils.shr64_lo;
67058 var sum64 = utils.sum64;
67059 var sum64_hi = utils.sum64_hi;
67060 var sum64_lo = utils.sum64_lo;
67061 var sum64_4_hi = utils.sum64_4_hi;
67062 var sum64_4_lo = utils.sum64_4_lo;
67063 var sum64_5_hi = utils.sum64_5_hi;
67064 var sum64_5_lo = utils.sum64_5_lo;
67065 var BlockHash = hash.common.BlockHash;
67066
67067 var sha256_K = [
67068 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
67069 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
67070 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
67071 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
67072 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
67073 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
67074 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
67075 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
67076 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
67077 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
67078 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
67079 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
67080 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
67081 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
67082 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
67083 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
67084 ];
67085
67086 var sha512_K = [
67087 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
67088 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
67089 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
67090 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
67091 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
67092 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
67093 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
67094 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
67095 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
67096 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
67097 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
67098 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
67099 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
67100 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
67101 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
67102 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
67103 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
67104 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
67105 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
67106 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
67107 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
67108 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
67109 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
67110 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
67111 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
67112 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
67113 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
67114 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
67115 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
67116 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
67117 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
67118 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
67119 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
67120 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
67121 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
67122 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
67123 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
67124 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
67125 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
67126 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
67127 ];
67128
67129 var sha1_K = [
67130 0x5A827999, 0x6ED9EBA1,
67131 0x8F1BBCDC, 0xCA62C1D6
67132 ];
67133
67134 function SHA256() {
67135 if (!(this instanceof SHA256))
67136 return new SHA256();
67137
67138 BlockHash.call(this);
67139 this.h = [ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
67140 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ];
67141 this.k = sha256_K;
67142 this.W = new Array(64);
67143 }
67144 utils.inherits(SHA256, BlockHash);
67145 exports.sha256 = SHA256;
67146
67147 SHA256.blockSize = 512;
67148 SHA256.outSize = 256;
67149 SHA256.hmacStrength = 192;
67150 SHA256.padLength = 64;
67151
67152 SHA256.prototype._update = function _update(msg, start) {
67153 var W = this.W;
67154
67155 for (var i = 0; i < 16; i++)
67156 W[i] = msg[start + i];
67157 for (; i < W.length; i++)
67158 W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
67159
67160 var a = this.h[0];
67161 var b = this.h[1];
67162 var c = this.h[2];
67163 var d = this.h[3];
67164 var e = this.h[4];
67165 var f = this.h[5];
67166 var g = this.h[6];
67167 var h = this.h[7];
67168
67169 assert(this.k.length === W.length);
67170 for (var i = 0; i < W.length; i++) {
67171 var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
67172 var T2 = sum32(s0_256(a), maj32(a, b, c));
67173 h = g;
67174 g = f;
67175 f = e;
67176 e = sum32(d, T1);
67177 d = c;
67178 c = b;
67179 b = a;
67180 a = sum32(T1, T2);
67181 }
67182
67183 this.h[0] = sum32(this.h[0], a);
67184 this.h[1] = sum32(this.h[1], b);
67185 this.h[2] = sum32(this.h[2], c);
67186 this.h[3] = sum32(this.h[3], d);
67187 this.h[4] = sum32(this.h[4], e);
67188 this.h[5] = sum32(this.h[5], f);
67189 this.h[6] = sum32(this.h[6], g);
67190 this.h[7] = sum32(this.h[7], h);
67191 };
67192
67193 SHA256.prototype._digest = function digest(enc) {
67194 if (enc === 'hex')
67195 return utils.toHex32(this.h, 'big');
67196 else
67197 return utils.split32(this.h, 'big');
67198 };
67199
67200 function SHA224() {
67201 if (!(this instanceof SHA224))
67202 return new SHA224();
67203
67204 SHA256.call(this);
67205 this.h = [ 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
67206 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];
67207 }
67208 utils.inherits(SHA224, SHA256);
67209 exports.sha224 = SHA224;
67210
67211 SHA224.blockSize = 512;
67212 SHA224.outSize = 224;
67213 SHA224.hmacStrength = 192;
67214 SHA224.padLength = 64;
67215
67216 SHA224.prototype._digest = function digest(enc) {
67217 // Just truncate output
67218 if (enc === 'hex')
67219 return utils.toHex32(this.h.slice(0, 7), 'big');
67220 else
67221 return utils.split32(this.h.slice(0, 7), 'big');
67222 };
67223
67224 function SHA512() {
67225 if (!(this instanceof SHA512))
67226 return new SHA512();
67227
67228 BlockHash.call(this);
67229 this.h = [ 0x6a09e667, 0xf3bcc908,
67230 0xbb67ae85, 0x84caa73b,
67231 0x3c6ef372, 0xfe94f82b,
67232 0xa54ff53a, 0x5f1d36f1,
67233 0x510e527f, 0xade682d1,
67234 0x9b05688c, 0x2b3e6c1f,
67235 0x1f83d9ab, 0xfb41bd6b,
67236 0x5be0cd19, 0x137e2179 ];
67237 this.k = sha512_K;
67238 this.W = new Array(160);
67239 }
67240 utils.inherits(SHA512, BlockHash);
67241 exports.sha512 = SHA512;
67242
67243 SHA512.blockSize = 1024;
67244 SHA512.outSize = 512;
67245 SHA512.hmacStrength = 192;
67246 SHA512.padLength = 128;
67247
67248 SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
67249 var W = this.W;
67250
67251 // 32 x 32bit words
67252 for (var i = 0; i < 32; i++)
67253 W[i] = msg[start + i];
67254 for (; i < W.length; i += 2) {
67255 var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2
67256 var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
67257 var c1_hi = W[i - 14]; // i - 7
67258 var c1_lo = W[i - 13];
67259 var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15
67260 var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
67261 var c3_hi = W[i - 32]; // i - 16
67262 var c3_lo = W[i - 31];
67263
67264 W[i] = sum64_4_hi(c0_hi, c0_lo,
67265 c1_hi, c1_lo,
67266 c2_hi, c2_lo,
67267 c3_hi, c3_lo);
67268 W[i + 1] = sum64_4_lo(c0_hi, c0_lo,
67269 c1_hi, c1_lo,
67270 c2_hi, c2_lo,
67271 c3_hi, c3_lo);
67272 }
67273 };
67274
67275 SHA512.prototype._update = function _update(msg, start) {
67276 this._prepareBlock(msg, start);
67277
67278 var W = this.W;
67279
67280 var ah = this.h[0];
67281 var al = this.h[1];
67282 var bh = this.h[2];
67283 var bl = this.h[3];
67284 var ch = this.h[4];
67285 var cl = this.h[5];
67286 var dh = this.h[6];
67287 var dl = this.h[7];
67288 var eh = this.h[8];
67289 var el = this.h[9];
67290 var fh = this.h[10];
67291 var fl = this.h[11];
67292 var gh = this.h[12];
67293 var gl = this.h[13];
67294 var hh = this.h[14];
67295 var hl = this.h[15];
67296
67297 assert(this.k.length === W.length);
67298 for (var i = 0; i < W.length; i += 2) {
67299 var c0_hi = hh;
67300 var c0_lo = hl;
67301 var c1_hi = s1_512_hi(eh, el);
67302 var c1_lo = s1_512_lo(eh, el);
67303 var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
67304 var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
67305 var c3_hi = this.k[i];
67306 var c3_lo = this.k[i + 1];
67307 var c4_hi = W[i];
67308 var c4_lo = W[i + 1];
67309
67310 var T1_hi = sum64_5_hi(c0_hi, c0_lo,
67311 c1_hi, c1_lo,
67312 c2_hi, c2_lo,
67313 c3_hi, c3_lo,
67314 c4_hi, c4_lo);
67315 var T1_lo = sum64_5_lo(c0_hi, c0_lo,
67316 c1_hi, c1_lo,
67317 c2_hi, c2_lo,
67318 c3_hi, c3_lo,
67319 c4_hi, c4_lo);
67320
67321 var c0_hi = s0_512_hi(ah, al);
67322 var c0_lo = s0_512_lo(ah, al);
67323 var c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
67324 var c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
67325
67326 var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
67327 var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
67328
67329 hh = gh;
67330 hl = gl;
67331
67332 gh = fh;
67333 gl = fl;
67334
67335 fh = eh;
67336 fl = el;
67337
67338 eh = sum64_hi(dh, dl, T1_hi, T1_lo);
67339 el = sum64_lo(dl, dl, T1_hi, T1_lo);
67340
67341 dh = ch;
67342 dl = cl;
67343
67344 ch = bh;
67345 cl = bl;
67346
67347 bh = ah;
67348 bl = al;
67349
67350 ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
67351 al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
67352 }
67353
67354 sum64(this.h, 0, ah, al);
67355 sum64(this.h, 2, bh, bl);
67356 sum64(this.h, 4, ch, cl);
67357 sum64(this.h, 6, dh, dl);
67358 sum64(this.h, 8, eh, el);
67359 sum64(this.h, 10, fh, fl);
67360 sum64(this.h, 12, gh, gl);
67361 sum64(this.h, 14, hh, hl);
67362 };
67363
67364 SHA512.prototype._digest = function digest(enc) {
67365 if (enc === 'hex')
67366 return utils.toHex32(this.h, 'big');
67367 else
67368 return utils.split32(this.h, 'big');
67369 };
67370
67371 function SHA384() {
67372 if (!(this instanceof SHA384))
67373 return new SHA384();
67374
67375 SHA512.call(this);
67376 this.h = [ 0xcbbb9d5d, 0xc1059ed8,
67377 0x629a292a, 0x367cd507,
67378 0x9159015a, 0x3070dd17,
67379 0x152fecd8, 0xf70e5939,
67380 0x67332667, 0xffc00b31,
67381 0x8eb44a87, 0x68581511,
67382 0xdb0c2e0d, 0x64f98fa7,
67383 0x47b5481d, 0xbefa4fa4 ];
67384 }
67385 utils.inherits(SHA384, SHA512);
67386 exports.sha384 = SHA384;
67387
67388 SHA384.blockSize = 1024;
67389 SHA384.outSize = 384;
67390 SHA384.hmacStrength = 192;
67391 SHA384.padLength = 128;
67392
67393 SHA384.prototype._digest = function digest(enc) {
67394 if (enc === 'hex')
67395 return utils.toHex32(this.h.slice(0, 12), 'big');
67396 else
67397 return utils.split32(this.h.slice(0, 12), 'big');
67398 };
67399
67400 function SHA1() {
67401 if (!(this instanceof SHA1))
67402 return new SHA1();
67403
67404 BlockHash.call(this);
67405 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe,
67406 0x10325476, 0xc3d2e1f0 ];
67407 this.W = new Array(80);
67408 }
67409
67410 utils.inherits(SHA1, BlockHash);
67411 exports.sha1 = SHA1;
67412
67413 SHA1.blockSize = 512;
67414 SHA1.outSize = 160;
67415 SHA1.hmacStrength = 80;
67416 SHA1.padLength = 64;
67417
67418 SHA1.prototype._update = function _update(msg, start) {
67419 var W = this.W;
67420
67421 for (var i = 0; i < 16; i++)
67422 W[i] = msg[start + i];
67423
67424 for(; i < W.length; i++)
67425 W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
67426
67427 var a = this.h[0];
67428 var b = this.h[1];
67429 var c = this.h[2];
67430 var d = this.h[3];
67431 var e = this.h[4];
67432
67433 for (var i = 0; i < W.length; i++) {
67434 var s = ~~(i / 20);
67435 var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
67436 e = d;
67437 d = c;
67438 c = rotl32(b, 30);
67439 b = a;
67440 a = t;
67441 }
67442
67443 this.h[0] = sum32(this.h[0], a);
67444 this.h[1] = sum32(this.h[1], b);
67445 this.h[2] = sum32(this.h[2], c);
67446 this.h[3] = sum32(this.h[3], d);
67447 this.h[4] = sum32(this.h[4], e);
67448 };
67449
67450 SHA1.prototype._digest = function digest(enc) {
67451 if (enc === 'hex')
67452 return utils.toHex32(this.h, 'big');
67453 else
67454 return utils.split32(this.h, 'big');
67455 };
67456
67457 function ch32(x, y, z) {
67458 return (x & y) ^ ((~x) & z);
67459 }
67460
67461 function maj32(x, y, z) {
67462 return (x & y) ^ (x & z) ^ (y & z);
67463 }
67464
67465 function p32(x, y, z) {
67466 return x ^ y ^ z;
67467 }
67468
67469 function s0_256(x) {
67470 return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
67471 }
67472
67473 function s1_256(x) {
67474 return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
67475 }
67476
67477 function g0_256(x) {
67478 return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);
67479 }
67480
67481 function g1_256(x) {
67482 return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
67483 }
67484
67485 function ft_1(s, x, y, z) {
67486 if (s === 0)
67487 return ch32(x, y, z);
67488 if (s === 1 || s === 3)
67489 return p32(x, y, z);
67490 if (s === 2)
67491 return maj32(x, y, z);
67492 }
67493
67494 function ch64_hi(xh, xl, yh, yl, zh, zl) {
67495 var r = (xh & yh) ^ ((~xh) & zh);
67496 if (r < 0)
67497 r += 0x100000000;
67498 return r;
67499 }
67500
67501 function ch64_lo(xh, xl, yh, yl, zh, zl) {
67502 var r = (xl & yl) ^ ((~xl) & zl);
67503 if (r < 0)
67504 r += 0x100000000;
67505 return r;
67506 }
67507
67508 function maj64_hi(xh, xl, yh, yl, zh, zl) {
67509 var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);
67510 if (r < 0)
67511 r += 0x100000000;
67512 return r;
67513 }
67514
67515 function maj64_lo(xh, xl, yh, yl, zh, zl) {
67516 var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);
67517 if (r < 0)
67518 r += 0x100000000;
67519 return r;
67520 }
67521
67522 function s0_512_hi(xh, xl) {
67523 var c0_hi = rotr64_hi(xh, xl, 28);
67524 var c1_hi = rotr64_hi(xl, xh, 2); // 34
67525 var c2_hi = rotr64_hi(xl, xh, 7); // 39
67526
67527 var r = c0_hi ^ c1_hi ^ c2_hi;
67528 if (r < 0)
67529 r += 0x100000000;
67530 return r;
67531 }
67532
67533 function s0_512_lo(xh, xl) {
67534 var c0_lo = rotr64_lo(xh, xl, 28);
67535 var c1_lo = rotr64_lo(xl, xh, 2); // 34
67536 var c2_lo = rotr64_lo(xl, xh, 7); // 39
67537
67538 var r = c0_lo ^ c1_lo ^ c2_lo;
67539 if (r < 0)
67540 r += 0x100000000;
67541 return r;
67542 }
67543
67544 function s1_512_hi(xh, xl) {
67545 var c0_hi = rotr64_hi(xh, xl, 14);
67546 var c1_hi = rotr64_hi(xh, xl, 18);
67547 var c2_hi = rotr64_hi(xl, xh, 9); // 41
67548
67549 var r = c0_hi ^ c1_hi ^ c2_hi;
67550 if (r < 0)
67551 r += 0x100000000;
67552 return r;
67553 }
67554
67555 function s1_512_lo(xh, xl) {
67556 var c0_lo = rotr64_lo(xh, xl, 14);
67557 var c1_lo = rotr64_lo(xh, xl, 18);
67558 var c2_lo = rotr64_lo(xl, xh, 9); // 41
67559
67560 var r = c0_lo ^ c1_lo ^ c2_lo;
67561 if (r < 0)
67562 r += 0x100000000;
67563 return r;
67564 }
67565
67566 function g0_512_hi(xh, xl) {
67567 var c0_hi = rotr64_hi(xh, xl, 1);
67568 var c1_hi = rotr64_hi(xh, xl, 8);
67569 var c2_hi = shr64_hi(xh, xl, 7);
67570
67571 var r = c0_hi ^ c1_hi ^ c2_hi;
67572 if (r < 0)
67573 r += 0x100000000;
67574 return r;
67575 }
67576
67577 function g0_512_lo(xh, xl) {
67578 var c0_lo = rotr64_lo(xh, xl, 1);
67579 var c1_lo = rotr64_lo(xh, xl, 8);
67580 var c2_lo = shr64_lo(xh, xl, 7);
67581
67582 var r = c0_lo ^ c1_lo ^ c2_lo;
67583 if (r < 0)
67584 r += 0x100000000;
67585 return r;
67586 }
67587
67588 function g1_512_hi(xh, xl) {
67589 var c0_hi = rotr64_hi(xh, xl, 19);
67590 var c1_hi = rotr64_hi(xl, xh, 29); // 61
67591 var c2_hi = shr64_hi(xh, xl, 6);
67592
67593 var r = c0_hi ^ c1_hi ^ c2_hi;
67594 if (r < 0)
67595 r += 0x100000000;
67596 return r;
67597 }
67598
67599 function g1_512_lo(xh, xl) {
67600 var c0_lo = rotr64_lo(xh, xl, 19);
67601 var c1_lo = rotr64_lo(xl, xh, 29); // 61
67602 var c2_lo = shr64_lo(xh, xl, 6);
67603
67604 var r = c0_lo ^ c1_lo ^ c2_lo;
67605 if (r < 0)
67606 r += 0x100000000;
67607 return r;
67608 }
67609
67610 },{"../hash":86}],91:[function(require,module,exports){
67611 var utils = exports;
67612 var inherits = require('inherits');
67613
67614 function toArray(msg, enc) {
67615 if (Array.isArray(msg))
67616 return msg.slice();
67617 if (!msg)
67618 return [];
67619 var res = [];
67620 if (typeof msg === 'string') {
67621 if (!enc) {
67622 for (var i = 0; i < msg.length; i++) {
67623 var c = msg.charCodeAt(i);
67624 var hi = c >> 8;
67625 var lo = c & 0xff;
67626 if (hi)
67627 res.push(hi, lo);
67628 else
67629 res.push(lo);
67630 }
67631 } else if (enc === 'hex') {
67632 msg = msg.replace(/[^a-z0-9]+/ig, '');
67633 if (msg.length % 2 !== 0)
67634 msg = '0' + msg;
67635 for (var i = 0; i < msg.length; i += 2)
67636 res.push(parseInt(msg[i] + msg[i + 1], 16));
67637 }
67638 } else {
67639 for (var i = 0; i < msg.length; i++)
67640 res[i] = msg[i] | 0;
67641 }
67642 return res;
67643 }
67644 utils.toArray = toArray;
67645
67646 function toHex(msg) {
67647 var res = '';
67648 for (var i = 0; i < msg.length; i++)
67649 res += zero2(msg[i].toString(16));
67650 return res;
67651 }
67652 utils.toHex = toHex;
67653
67654 function htonl(w) {
67655 var res = (w >>> 24) |
67656 ((w >>> 8) & 0xff00) |
67657 ((w << 8) & 0xff0000) |
67658 ((w & 0xff) << 24);
67659 return res >>> 0;
67660 }
67661 utils.htonl = htonl;
67662
67663 function toHex32(msg, endian) {
67664 var res = '';
67665 for (var i = 0; i < msg.length; i++) {
67666 var w = msg[i];
67667 if (endian === 'little')
67668 w = htonl(w);
67669 res += zero8(w.toString(16));
67670 }
67671 return res;
67672 }
67673 utils.toHex32 = toHex32;
67674
67675 function zero2(word) {
67676 if (word.length === 1)
67677 return '0' + word;
67678 else
67679 return word;
67680 }
67681 utils.zero2 = zero2;
67682
67683 function zero8(word) {
67684 if (word.length === 7)
67685 return '0' + word;
67686 else if (word.length === 6)
67687 return '00' + word;
67688 else if (word.length === 5)
67689 return '000' + word;
67690 else if (word.length === 4)
67691 return '0000' + word;
67692 else if (word.length === 3)
67693 return '00000' + word;
67694 else if (word.length === 2)
67695 return '000000' + word;
67696 else if (word.length === 1)
67697 return '0000000' + word;
67698 else
67699 return word;
67700 }
67701 utils.zero8 = zero8;
67702
67703 function join32(msg, start, end, endian) {
67704 var len = end - start;
67705 assert(len % 4 === 0);
67706 var res = new Array(len / 4);
67707 for (var i = 0, k = start; i < res.length; i++, k += 4) {
67708 var w;
67709 if (endian === 'big')
67710 w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
67711 else
67712 w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
67713 res[i] = w >>> 0;
67714 }
67715 return res;
67716 }
67717 utils.join32 = join32;
67718
67719 function split32(msg, endian) {
67720 var res = new Array(msg.length * 4);
67721 for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
67722 var m = msg[i];
67723 if (endian === 'big') {
67724 res[k] = m >>> 24;
67725 res[k + 1] = (m >>> 16) & 0xff;
67726 res[k + 2] = (m >>> 8) & 0xff;
67727 res[k + 3] = m & 0xff;
67728 } else {
67729 res[k + 3] = m >>> 24;
67730 res[k + 2] = (m >>> 16) & 0xff;
67731 res[k + 1] = (m >>> 8) & 0xff;
67732 res[k] = m & 0xff;
67733 }
67734 }
67735 return res;
67736 }
67737 utils.split32 = split32;
67738
67739 function rotr32(w, b) {
67740 return (w >>> b) | (w << (32 - b));
67741 }
67742 utils.rotr32 = rotr32;
67743
67744 function rotl32(w, b) {
67745 return (w << b) | (w >>> (32 - b));
67746 }
67747 utils.rotl32 = rotl32;
67748
67749 function sum32(a, b) {
67750 return (a + b) >>> 0;
67751 }
67752 utils.sum32 = sum32;
67753
67754 function sum32_3(a, b, c) {
67755 return (a + b + c) >>> 0;
67756 }
67757 utils.sum32_3 = sum32_3;
67758
67759 function sum32_4(a, b, c, d) {
67760 return (a + b + c + d) >>> 0;
67761 }
67762 utils.sum32_4 = sum32_4;
67763
67764 function sum32_5(a, b, c, d, e) {
67765 return (a + b + c + d + e) >>> 0;
67766 }
67767 utils.sum32_5 = sum32_5;
67768
67769 function assert(cond, msg) {
67770 if (!cond)
67771 throw new Error(msg || 'Assertion failed');
67772 }
67773 utils.assert = assert;
67774
67775 utils.inherits = inherits;
67776
67777 function sum64(buf, pos, ah, al) {
67778 var bh = buf[pos];
67779 var bl = buf[pos + 1];
67780
67781 var lo = (al + bl) >>> 0;
67782 var hi = (lo < al ? 1 : 0) + ah + bh;
67783 buf[pos] = hi >>> 0;
67784 buf[pos + 1] = lo;
67785 }
67786 exports.sum64 = sum64;
67787
67788 function sum64_hi(ah, al, bh, bl) {
67789 var lo = (al + bl) >>> 0;
67790 var hi = (lo < al ? 1 : 0) + ah + bh;
67791 return hi >>> 0;
67792 };
67793 exports.sum64_hi = sum64_hi;
67794
67795 function sum64_lo(ah, al, bh, bl) {
67796 var lo = al + bl;
67797 return lo >>> 0;
67798 };
67799 exports.sum64_lo = sum64_lo;
67800
67801 function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
67802 var carry = 0;
67803 var lo = al;
67804 lo = (lo + bl) >>> 0;
67805 carry += lo < al ? 1 : 0;
67806 lo = (lo + cl) >>> 0;
67807 carry += lo < cl ? 1 : 0;
67808 lo = (lo + dl) >>> 0;
67809 carry += lo < dl ? 1 : 0;
67810
67811 var hi = ah + bh + ch + dh + carry;
67812 return hi >>> 0;
67813 };
67814 exports.sum64_4_hi = sum64_4_hi;
67815
67816 function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
67817 var lo = al + bl + cl + dl;
67818 return lo >>> 0;
67819 };
67820 exports.sum64_4_lo = sum64_4_lo;
67821
67822 function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
67823 var carry = 0;
67824 var lo = al;
67825 lo = (lo + bl) >>> 0;
67826 carry += lo < al ? 1 : 0;
67827 lo = (lo + cl) >>> 0;
67828 carry += lo < cl ? 1 : 0;
67829 lo = (lo + dl) >>> 0;
67830 carry += lo < dl ? 1 : 0;
67831 lo = (lo + el) >>> 0;
67832 carry += lo < el ? 1 : 0;
67833
67834 var hi = ah + bh + ch + dh + eh + carry;
67835 return hi >>> 0;
67836 };
67837 exports.sum64_5_hi = sum64_5_hi;
67838
67839 function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
67840 var lo = al + bl + cl + dl + el;
67841
67842 return lo >>> 0;
67843 };
67844 exports.sum64_5_lo = sum64_5_lo;
67845
67846 function rotr64_hi(ah, al, num) {
67847 var r = (al << (32 - num)) | (ah >>> num);
67848 return r >>> 0;
67849 };
67850 exports.rotr64_hi = rotr64_hi;
67851
67852 function rotr64_lo(ah, al, num) {
67853 var r = (ah << (32 - num)) | (al >>> num);
67854 return r >>> 0;
67855 };
67856 exports.rotr64_lo = rotr64_lo;
67857
67858 function shr64_hi(ah, al, num) {
67859 return ah >>> num;
67860 };
67861 exports.shr64_hi = shr64_hi;
67862
67863 function shr64_lo(ah, al, num) {
67864 var r = (ah << (32 - num)) | (al >>> num);
67865 return r >>> 0;
67866 };
67867 exports.shr64_lo = shr64_lo;
67868
67869 },{"inherits":95}],92:[function(require,module,exports){
67870 'use strict';
67871
67872 var hash = require('hash.js');
67873 var utils = require('minimalistic-crypto-utils');
67874 var assert = require('minimalistic-assert');
67875
67876 function HmacDRBG(options) {
67877 if (!(this instanceof HmacDRBG))
67878 return new HmacDRBG(options);
67879 this.hash = options.hash;
67880 this.predResist = !!options.predResist;
67881
67882 this.outLen = this.hash.outSize;
67883 this.minEntropy = options.minEntropy || this.hash.hmacStrength;
67884
67885 this._reseed = null;
67886 this.reseedInterval = null;
67887 this.K = null;
67888 this.V = null;
67889
67890 var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');
67891 var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');
67892 var pers = utils.toArray(options.pers, options.persEnc || 'hex');
67893 assert(entropy.length >= (this.minEntropy / 8),
67894 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
67895 this._init(entropy, nonce, pers);
67896 }
67897 module.exports = HmacDRBG;
67898
67899 HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
67900 var seed = entropy.concat(nonce).concat(pers);
67901
67902 this.K = new Array(this.outLen / 8);
67903 this.V = new Array(this.outLen / 8);
67904 for (var i = 0; i < this.V.length; i++) {
67905 this.K[i] = 0x00;
67906 this.V[i] = 0x01;
67907 }
67908
67909 this._update(seed);
67910 this._reseed = 1;
67911 this.reseedInterval = 0x1000000000000; // 2^48
67912 };
67913
67914 HmacDRBG.prototype._hmac = function hmac() {
67915 return new hash.hmac(this.hash, this.K);
67916 };
67917
67918 HmacDRBG.prototype._update = function update(seed) {
67919 var kmac = this._hmac()
67920 .update(this.V)
67921 .update([ 0x00 ]);
67922 if (seed)
67923 kmac = kmac.update(seed);
67924 this.K = kmac.digest();
67925 this.V = this._hmac().update(this.V).digest();
67926 if (!seed)
67927 return;
67928
67929 this.K = this._hmac()
67930 .update(this.V)
67931 .update([ 0x01 ])
67932 .update(seed)
67933 .digest();
67934 this.V = this._hmac().update(this.V).digest();
67935 };
67936
67937 HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
67938 // Optional entropy enc
67939 if (typeof entropyEnc !== 'string') {
67940 addEnc = add;
67941 add = entropyEnc;
67942 entropyEnc = null;
67943 }
67944
67945 entropy = utils.toArray(entropy, entropyEnc);
67946 add = utils.toArray(add, addEnc);
67947
67948 assert(entropy.length >= (this.minEntropy / 8),
67949 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
67950
67951 this._update(entropy.concat(add || []));
67952 this._reseed = 1;
67953 };
67954
67955 HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
67956 if (this._reseed > this.reseedInterval)
67957 throw new Error('Reseed is required');
67958
67959 // Optional encoding
67960 if (typeof enc !== 'string') {
67961 addEnc = add;
67962 add = enc;
67963 enc = null;
67964 }
67965
67966 // Optional additional data
67967 if (add) {
67968 add = utils.toArray(add, addEnc || 'hex');
67969 this._update(add);
67970 }
67971
67972 var temp = [];
67973 while (temp.length < len) {
67974 this.V = this._hmac().update(this.V).digest();
67975 temp = temp.concat(this.V);
67976 }
67977
67978 var res = temp.slice(0, len);
67979 this._update(add);
67980 this._reseed++;
67981 return utils.encode(res, enc);
67982 };
67983
67984 },{"hash.js":86,"minimalistic-assert":99,"minimalistic-crypto-utils":100}],93:[function(require,module,exports){
67985 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
67986 var e, m
67987 var eLen = nBytes * 8 - mLen - 1
67988 var eMax = (1 << eLen) - 1
67989 var eBias = eMax >> 1
67990 var nBits = -7
67991 var i = isLE ? (nBytes - 1) : 0
67992 var d = isLE ? -1 : 1
67993 var s = buffer[offset + i]
67994
67995 i += d
67996
67997 e = s & ((1 << (-nBits)) - 1)
67998 s >>= (-nBits)
67999 nBits += eLen
68000 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
68001
68002 m = e & ((1 << (-nBits)) - 1)
68003 e >>= (-nBits)
68004 nBits += mLen
68005 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
68006
68007 if (e === 0) {
68008 e = 1 - eBias
68009 } else if (e === eMax) {
68010 return m ? NaN : ((s ? -1 : 1) * Infinity)
68011 } else {
68012 m = m + Math.pow(2, mLen)
68013 e = e - eBias
68014 }
68015 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
68016 }
68017
68018 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
68019 var e, m, c
68020 var eLen = nBytes * 8 - mLen - 1
68021 var eMax = (1 << eLen) - 1
68022 var eBias = eMax >> 1
68023 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
68024 var i = isLE ? 0 : (nBytes - 1)
68025 var d = isLE ? 1 : -1
68026 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
68027
68028 value = Math.abs(value)
68029
68030 if (isNaN(value) || value === Infinity) {
68031 m = isNaN(value) ? 1 : 0
68032 e = eMax
68033 } else {
68034 e = Math.floor(Math.log(value) / Math.LN2)
68035 if (value * (c = Math.pow(2, -e)) < 1) {
68036 e--
68037 c *= 2
68038 }
68039 if (e + eBias >= 1) {
68040 value += rt / c
68041 } else {
68042 value += rt * Math.pow(2, 1 - eBias)
68043 }
68044 if (value * c >= 2) {
68045 e++
68046 c /= 2
68047 }
68048
68049 if (e + eBias >= eMax) {
68050 m = 0
68051 e = eMax
68052 } else if (e + eBias >= 1) {
68053 m = (value * c - 1) * Math.pow(2, mLen)
68054 e = e + eBias
68055 } else {
68056 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
68057 e = 0
68058 }
68059 }
68060
68061 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
68062
68063 e = (e << mLen) | m
68064 eLen += mLen
68065 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
68066
68067 buffer[offset + i - d] |= s * 128
68068 }
68069
68070 },{}],94:[function(require,module,exports){
68071
68072 var indexOf = [].indexOf;
68073
68074 module.exports = function(arr, obj){
68075 if (indexOf) return arr.indexOf(obj);
68076 for (var i = 0; i < arr.length; ++i) {
68077 if (arr[i] === obj) return i;
68078 }
68079 return -1;
68080 };
68081 },{}],95:[function(require,module,exports){
68082 if (typeof Object.create === 'function') {
68083 // implementation from standard node.js 'util' module
68084 module.exports = function inherits(ctor, superCtor) {
68085 ctor.super_ = superCtor
68086 ctor.prototype = Object.create(superCtor.prototype, {
68087 constructor: {
68088 value: ctor,
68089 enumerable: false,
68090 writable: true,
68091 configurable: true
68092 }
68093 });
68094 };
68095 } else {
68096 // old school shim for old browsers
68097 module.exports = function inherits(ctor, superCtor) {
68098 ctor.super_ = superCtor
68099 var TempCtor = function () {}
68100 TempCtor.prototype = superCtor.prototype
68101 ctor.prototype = new TempCtor()
68102 ctor.prototype.constructor = ctor
68103 }
68104 }
68105
68106 },{}],96:[function(require,module,exports){
68107 /*!
68108 * Determine if an object is a Buffer
68109 *
68110 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
68111 * @license MIT
68112 */
68113
68114 // The _isBuffer check is for Safari 5-7 support, because it's missing
68115 // Object.prototype.constructor. Remove this eventually
68116 module.exports = function (obj) {
68117 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
68118 }
68119
68120 function isBuffer (obj) {
68121 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
68122 }
68123
68124 // For Node v0.10 support. Remove this eventually.
68125 function isSlowBuffer (obj) {
68126 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
68127 }
68128
68129 },{}],97:[function(require,module,exports){
68130 var toString = {}.toString;
68131
68132 module.exports = Array.isArray || function (arr) {
68133 return toString.call(arr) == '[object Array]';
68134 };
68135
68136 },{}],98:[function(require,module,exports){
68137 var bn = require('bn.js');
68138 var brorand = require('brorand');
68139
68140 function MillerRabin(rand) {
68141 this.rand = rand || new brorand.Rand();
68142 }
68143 module.exports = MillerRabin;
68144
68145 MillerRabin.create = function create(rand) {
68146 return new MillerRabin(rand);
68147 };
68148
68149 MillerRabin.prototype._rand = function _rand(n) {
68150 var len = n.bitLength();
68151 var buf = this.rand.generate(Math.ceil(len / 8));
68152
68153 // Set low bits
68154 buf[0] |= 3;
68155
68156 // Mask high bits
68157 var mask = len & 0x7;
68158 if (mask !== 0)
68159 buf[buf.length - 1] >>= 7 - mask;
68160
68161 return new bn(buf);
68162 }
68163
68164 MillerRabin.prototype.test = function test(n, k, cb) {
68165 var len = n.bitLength();
68166 var red = bn.mont(n);
68167 var rone = new bn(1).toRed(red);
68168
68169 if (!k)
68170 k = Math.max(1, (len / 48) | 0);
68171
68172 // Find d and s, (n - 1) = (2 ^ s) * d;
68173 var n1 = n.subn(1);
68174 var n2 = n1.subn(1);
68175 for (var s = 0; !n1.testn(s); s++) {}
68176 var d = n.shrn(s);
68177
68178 var rn1 = n1.toRed(red);
68179
68180 var prime = true;
68181 for (; k > 0; k--) {
68182 var a = this._rand(n2);
68183 if (cb)
68184 cb(a);
68185
68186 var x = a.toRed(red).redPow(d);
68187 if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)
68188 continue;
68189
68190 for (var i = 1; i < s; i++) {
68191 x = x.redSqr();
68192
68193 if (x.cmp(rone) === 0)
68194 return false;
68195 if (x.cmp(rn1) === 0)
68196 break;
68197 }
68198
68199 if (i === s)
68200 return false;
68201 }
68202
68203 return prime;
68204 };
68205
68206 MillerRabin.prototype.getDivisor = function getDivisor(n, k) {
68207 var len = n.bitLength();
68208 var red = bn.mont(n);
68209 var rone = new bn(1).toRed(red);
68210
68211 if (!k)
68212 k = Math.max(1, (len / 48) | 0);
68213
68214 // Find d and s, (n - 1) = (2 ^ s) * d;
68215 var n1 = n.subn(1);
68216 var n2 = n1.subn(1);
68217 for (var s = 0; !n1.testn(s); s++) {}
68218 var d = n.shrn(s);
68219
68220 var rn1 = n1.toRed(red);
68221
68222 for (; k > 0; k--) {
68223 var a = this._rand(n2);
68224
68225 var g = n.gcd(a);
68226 if (g.cmpn(1) !== 0)
68227 return g;
68228
68229 var x = a.toRed(red).redPow(d);
68230 if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)
68231 continue;
68232
68233 for (var i = 1; i < s; i++) {
68234 x = x.redSqr();
68235
68236 if (x.cmp(rone) === 0)
68237 return x.fromRed().subn(1).gcd(n);
68238 if (x.cmp(rn1) === 0)
68239 break;
68240 }
68241
68242 if (i === s) {
68243 x = x.redSqr();
68244 return x.fromRed().subn(1).gcd(n);
68245 }
68246 }
68247
68248 return false;
68249 };
68250
68251 },{"bn.js":17,"brorand":18}],99:[function(require,module,exports){
68252 module.exports = assert;
68253
68254 function assert(val, msg) {
68255 if (!val)
68256 throw new Error(msg || 'Assertion failed');
68257 }
68258
68259 assert.equal = function assertEqual(l, r, msg) {
68260 if (l != r)
68261 throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));
68262 };
68263
68264 },{}],100:[function(require,module,exports){
68265 'use strict';
68266
68267 var utils = exports;
68268
68269 function toArray(msg, enc) {
68270 if (Array.isArray(msg))
68271 return msg.slice();
68272 if (!msg)
68273 return [];
68274 var res = [];
68275 if (typeof msg !== 'string') {
68276 for (var i = 0; i < msg.length; i++)
68277 res[i] = msg[i] | 0;
68278 return res;
68279 }
68280 if (enc === 'hex') {
68281 msg = msg.replace(/[^a-z0-9]+/ig, '');
68282 if (msg.length % 2 !== 0)
68283 msg = '0' + msg;
68284 for (var i = 0; i < msg.length; i += 2)
68285 res.push(parseInt(msg[i] + msg[i + 1], 16));
68286 } else {
68287 for (var i = 0; i < msg.length; i++) {
68288 var c = msg.charCodeAt(i);
68289 var hi = c >> 8;
68290 var lo = c & 0xff;
68291 if (hi)
68292 res.push(hi, lo);
68293 else
68294 res.push(lo);
68295 }
68296 }
68297 return res;
68298 }
68299 utils.toArray = toArray;
68300
68301 function zero2(word) {
68302 if (word.length === 1)
68303 return '0' + word;
68304 else
68305 return word;
68306 }
68307 utils.zero2 = zero2;
68308
68309 function toHex(msg) {
68310 var res = '';
68311 for (var i = 0; i < msg.length; i++)
68312 res += zero2(msg[i].toString(16));
68313 return res;
68314 }
68315 utils.toHex = toHex;
68316
68317 utils.encode = function encode(arr, enc) {
68318 if (enc === 'hex')
68319 return toHex(arr);
68320 else
68321 return arr;
68322 };
68323
68324 },{}],101:[function(require,module,exports){
68325 module.exports={"2.16.840.1.101.3.4.1.1": "aes-128-ecb",
68326 "2.16.840.1.101.3.4.1.2": "aes-128-cbc",
68327 "2.16.840.1.101.3.4.1.3": "aes-128-ofb",
68328 "2.16.840.1.101.3.4.1.4": "aes-128-cfb",
68329 "2.16.840.1.101.3.4.1.21": "aes-192-ecb",
68330 "2.16.840.1.101.3.4.1.22": "aes-192-cbc",
68331 "2.16.840.1.101.3.4.1.23": "aes-192-ofb",
68332 "2.16.840.1.101.3.4.1.24": "aes-192-cfb",
68333 "2.16.840.1.101.3.4.1.41": "aes-256-ecb",
68334 "2.16.840.1.101.3.4.1.42": "aes-256-cbc",
68335 "2.16.840.1.101.3.4.1.43": "aes-256-ofb",
68336 "2.16.840.1.101.3.4.1.44": "aes-256-cfb"
68337 }
68338 },{}],102:[function(require,module,exports){
68339 // from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js
68340 // Fedor, you are amazing.
68341 'use strict'
68342
68343 var asn1 = require('asn1.js')
68344
68345 exports.certificate = require('./certificate')
68346
68347 var RSAPrivateKey = asn1.define('RSAPrivateKey', function () {
68348 this.seq().obj(
68349 this.key('version').int(),
68350 this.key('modulus').int(),
68351 this.key('publicExponent').int(),
68352 this.key('privateExponent').int(),
68353 this.key('prime1').int(),
68354 this.key('prime2').int(),
68355 this.key('exponent1').int(),
68356 this.key('exponent2').int(),
68357 this.key('coefficient').int()
68358 )
68359 })
68360 exports.RSAPrivateKey = RSAPrivateKey
68361
68362 var RSAPublicKey = asn1.define('RSAPublicKey', function () {
68363 this.seq().obj(
68364 this.key('modulus').int(),
68365 this.key('publicExponent').int()
68366 )
68367 })
68368 exports.RSAPublicKey = RSAPublicKey
68369
68370 var PublicKey = asn1.define('SubjectPublicKeyInfo', function () {
68371 this.seq().obj(
68372 this.key('algorithm').use(AlgorithmIdentifier),
68373 this.key('subjectPublicKey').bitstr()
68374 )
68375 })
68376 exports.PublicKey = PublicKey
68377
68378 var AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () {
68379 this.seq().obj(
68380 this.key('algorithm').objid(),
68381 this.key('none').null_().optional(),
68382 this.key('curve').objid().optional(),
68383 this.key('params').seq().obj(
68384 this.key('p').int(),
68385 this.key('q').int(),
68386 this.key('g').int()
68387 ).optional()
68388 )
68389 })
68390
68391 var PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () {
68392 this.seq().obj(
68393 this.key('version').int(),
68394 this.key('algorithm').use(AlgorithmIdentifier),
68395 this.key('subjectPrivateKey').octstr()
68396 )
68397 })
68398 exports.PrivateKey = PrivateKeyInfo
68399 var EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () {
68400 this.seq().obj(
68401 this.key('algorithm').seq().obj(
68402 this.key('id').objid(),
68403 this.key('decrypt').seq().obj(
68404 this.key('kde').seq().obj(
68405 this.key('id').objid(),
68406 this.key('kdeparams').seq().obj(
68407 this.key('salt').octstr(),
68408 this.key('iters').int()
68409 )
68410 ),
68411 this.key('cipher').seq().obj(
68412 this.key('algo').objid(),
68413 this.key('iv').octstr()
68414 )
68415 )
68416 ),
68417 this.key('subjectPrivateKey').octstr()
68418 )
68419 })
68420
68421 exports.EncryptedPrivateKey = EncryptedPrivateKeyInfo
68422
68423 var DSAPrivateKey = asn1.define('DSAPrivateKey', function () {
68424 this.seq().obj(
68425 this.key('version').int(),
68426 this.key('p').int(),
68427 this.key('q').int(),
68428 this.key('g').int(),
68429 this.key('pub_key').int(),
68430 this.key('priv_key').int()
68431 )
68432 })
68433 exports.DSAPrivateKey = DSAPrivateKey
68434
68435 exports.DSAparam = asn1.define('DSAparam', function () {
68436 this.int()
68437 })
68438
68439 var ECPrivateKey = asn1.define('ECPrivateKey', function () {
68440 this.seq().obj(
68441 this.key('version').int(),
68442 this.key('privateKey').octstr(),
68443 this.key('parameters').optional().explicit(0).use(ECParameters),
68444 this.key('publicKey').optional().explicit(1).bitstr()
68445 )
68446 })
68447 exports.ECPrivateKey = ECPrivateKey
68448
68449 var ECParameters = asn1.define('ECParameters', function () {
68450 this.choice({
68451 namedCurve: this.objid()
68452 })
68453 })
68454
68455 exports.signature = asn1.define('signature', function () {
68456 this.seq().obj(
68457 this.key('r').int(),
68458 this.key('s').int()
68459 )
68460 })
68461
68462 },{"./certificate":103,"asn1.js":1}],103:[function(require,module,exports){
68463 // from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js
68464 // thanks to @Rantanen
68465
68466 'use strict'
68467
68468 var asn = require('asn1.js')
68469
68470 var Time = asn.define('Time', function () {
68471 this.choice({
68472 utcTime: this.utctime(),
68473 generalTime: this.gentime()
68474 })
68475 })
68476
68477 var AttributeTypeValue = asn.define('AttributeTypeValue', function () {
68478 this.seq().obj(
68479 this.key('type').objid(),
68480 this.key('value').any()
68481 )
68482 })
68483
68484 var AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () {
68485 this.seq().obj(
68486 this.key('algorithm').objid(),
68487 this.key('parameters').optional()
68488 )
68489 })
68490
68491 var SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () {
68492 this.seq().obj(
68493 this.key('algorithm').use(AlgorithmIdentifier),
68494 this.key('subjectPublicKey').bitstr()
68495 )
68496 })
68497
68498 var RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () {
68499 this.setof(AttributeTypeValue)
68500 })
68501
68502 var RDNSequence = asn.define('RDNSequence', function () {
68503 this.seqof(RelativeDistinguishedName)
68504 })
68505
68506 var Name = asn.define('Name', function () {
68507 this.choice({
68508 rdnSequence: this.use(RDNSequence)
68509 })
68510 })
68511
68512 var Validity = asn.define('Validity', function () {
68513 this.seq().obj(
68514 this.key('notBefore').use(Time),
68515 this.key('notAfter').use(Time)
68516 )
68517 })
68518
68519 var Extension = asn.define('Extension', function () {
68520 this.seq().obj(
68521 this.key('extnID').objid(),
68522 this.key('critical').bool().def(false),
68523 this.key('extnValue').octstr()
68524 )
68525 })
68526
68527 var TBSCertificate = asn.define('TBSCertificate', function () {
68528 this.seq().obj(
68529 this.key('version').explicit(0).int(),
68530 this.key('serialNumber').int(),
68531 this.key('signature').use(AlgorithmIdentifier),
68532 this.key('issuer').use(Name),
68533 this.key('validity').use(Validity),
68534 this.key('subject').use(Name),
68535 this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo),
68536 this.key('issuerUniqueID').implicit(1).bitstr().optional(),
68537 this.key('subjectUniqueID').implicit(2).bitstr().optional(),
68538 this.key('extensions').explicit(3).seqof(Extension).optional()
68539 )
68540 })
68541
68542 var X509Certificate = asn.define('X509Certificate', function () {
68543 this.seq().obj(
68544 this.key('tbsCertificate').use(TBSCertificate),
68545 this.key('signatureAlgorithm').use(AlgorithmIdentifier),
68546 this.key('signatureValue').bitstr()
68547 )
68548 })
68549
68550 module.exports = X509Certificate
68551
68552 },{"asn1.js":1}],104:[function(require,module,exports){
68553 (function (Buffer){
68554 // adapted from https://github.com/apatil/pemstrip
68555 var findProc = /Proc-Type: 4,ENCRYPTED\n\r?DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)\n\r?\n\r?([0-9A-z\n\r\+\/\=]+)\n\r?/m
68556 var startRegex = /^-----BEGIN ((?:.* KEY)|CERTIFICATE)-----\n/m
68557 var fullRegex = /^-----BEGIN ((?:.* KEY)|CERTIFICATE)-----\n\r?([0-9A-z\n\r\+\/\=]+)\n\r?-----END \1-----$/m
68558 var evp = require('evp_bytestokey')
68559 var ciphers = require('browserify-aes')
68560 module.exports = function (okey, password) {
68561 var key = okey.toString()
68562 var match = key.match(findProc)
68563 var decrypted
68564 if (!match) {
68565 var match2 = key.match(fullRegex)
68566 decrypted = new Buffer(match2[2].replace(/\r?\n/g, ''), 'base64')
68567 } else {
68568 var suite = 'aes' + match[1]
68569 var iv = new Buffer(match[2], 'hex')
68570 var cipherText = new Buffer(match[3].replace(/\r?\n/g, ''), 'base64')
68571 var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key
68572 var out = []
68573 var cipher = ciphers.createDecipheriv(suite, cipherKey, iv)
68574 out.push(cipher.update(cipherText))
68575 out.push(cipher.final())
68576 decrypted = Buffer.concat(out)
68577 }
68578 var tag = key.match(startRegex)[1]
68579 return {
68580 tag: tag,
68581 data: decrypted
68582 }
68583 }
68584
68585 }).call(this,require("buffer").Buffer)
68586 },{"browserify-aes":22,"buffer":47,"evp_bytestokey":84}],105:[function(require,module,exports){
68587 (function (Buffer){
68588 var asn1 = require('./asn1')
68589 var aesid = require('./aesid.json')
68590 var fixProc = require('./fixProc')
68591 var ciphers = require('browserify-aes')
68592 var compat = require('pbkdf2')
68593 module.exports = parseKeys
68594
68595 function parseKeys (buffer) {
68596 var password
68597 if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {
68598 password = buffer.passphrase
68599 buffer = buffer.key
68600 }
68601 if (typeof buffer === 'string') {
68602 buffer = new Buffer(buffer)
68603 }
68604
68605 var stripped = fixProc(buffer, password)
68606
68607 var type = stripped.tag
68608 var data = stripped.data
68609 var subtype, ndata
68610 switch (type) {
68611 case 'CERTIFICATE':
68612 ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo
68613 // falls through
68614 case 'PUBLIC KEY':
68615 if (!ndata) {
68616 ndata = asn1.PublicKey.decode(data, 'der')
68617 }
68618 subtype = ndata.algorithm.algorithm.join('.')
68619 switch (subtype) {
68620 case '1.2.840.113549.1.1.1':
68621 return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der')
68622 case '1.2.840.10045.2.1':
68623 ndata.subjectPrivateKey = ndata.subjectPublicKey
68624 return {
68625 type: 'ec',
68626 data: ndata
68627 }
68628 case '1.2.840.10040.4.1':
68629 ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der')
68630 return {
68631 type: 'dsa',
68632 data: ndata.algorithm.params
68633 }
68634 default: throw new Error('unknown key id ' + subtype)
68635 }
68636 throw new Error('unknown key type ' + type)
68637 case 'ENCRYPTED PRIVATE KEY':
68638 data = asn1.EncryptedPrivateKey.decode(data, 'der')
68639 data = decrypt(data, password)
68640 // falls through
68641 case 'PRIVATE KEY':
68642 ndata = asn1.PrivateKey.decode(data, 'der')
68643 subtype = ndata.algorithm.algorithm.join('.')
68644 switch (subtype) {
68645 case '1.2.840.113549.1.1.1':
68646 return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der')
68647 case '1.2.840.10045.2.1':
68648 return {
68649 curve: ndata.algorithm.curve,
68650 privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey
68651 }
68652 case '1.2.840.10040.4.1':
68653 ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der')
68654 return {
68655 type: 'dsa',
68656 params: ndata.algorithm.params
68657 }
68658 default: throw new Error('unknown key id ' + subtype)
68659 }
68660 throw new Error('unknown key type ' + type)
68661 case 'RSA PUBLIC KEY':
68662 return asn1.RSAPublicKey.decode(data, 'der')
68663 case 'RSA PRIVATE KEY':
68664 return asn1.RSAPrivateKey.decode(data, 'der')
68665 case 'DSA PRIVATE KEY':
68666 return {
68667 type: 'dsa',
68668 params: asn1.DSAPrivateKey.decode(data, 'der')
68669 }
68670 case 'EC PRIVATE KEY':
68671 data = asn1.ECPrivateKey.decode(data, 'der')
68672 return {
68673 curve: data.parameters.value,
68674 privateKey: data.privateKey
68675 }
68676 default: throw new Error('unknown key type ' + type)
68677 }
68678 }
68679 parseKeys.signature = asn1.signature
68680 function decrypt (data, password) {
68681 var salt = data.algorithm.decrypt.kde.kdeparams.salt
68682 var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10)
68683 var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')]
68684 var iv = data.algorithm.decrypt.cipher.iv
68685 var cipherText = data.subjectPrivateKey
68686 var keylen = parseInt(algo.split('-')[1], 10) / 8
68687 var key = compat.pbkdf2Sync(password, salt, iters, keylen)
68688 var cipher = ciphers.createDecipheriv(algo, key, iv)
68689 var out = []
68690 out.push(cipher.update(cipherText))
68691 out.push(cipher.final())
68692 return Buffer.concat(out)
68693 }
68694
68695 }).call(this,require("buffer").Buffer)
68696 },{"./aesid.json":101,"./asn1":102,"./fixProc":104,"browserify-aes":22,"buffer":47,"pbkdf2":106}],106:[function(require,module,exports){
68697
68698 exports.pbkdf2 = require('./lib/async')
68699
68700 exports.pbkdf2Sync = require('./lib/sync')
68701
68702 },{"./lib/async":107,"./lib/sync":110}],107:[function(require,module,exports){
68703 (function (process,global){
68704 var checkParameters = require('./precondition')
68705 var defaultEncoding = require('./default-encoding')
68706 var sync = require('./sync')
68707 var Buffer = require('safe-buffer').Buffer
68708
68709 var ZERO_BUF
68710 var subtle = global.crypto && global.crypto.subtle
68711 var toBrowser = {
68712 'sha': 'SHA-1',
68713 'sha-1': 'SHA-1',
68714 'sha1': 'SHA-1',
68715 'sha256': 'SHA-256',
68716 'sha-256': 'SHA-256',
68717 'sha384': 'SHA-384',
68718 'sha-384': 'SHA-384',
68719 'sha-512': 'SHA-512',
68720 'sha512': 'SHA-512'
68721 }
68722 var checks = []
68723 function checkNative (algo) {
68724 if (global.process && !global.process.browser) {
68725 return Promise.resolve(false)
68726 }
68727 if (!subtle || !subtle.importKey || !subtle.deriveBits) {
68728 return Promise.resolve(false)
68729 }
68730 if (checks[algo] !== undefined) {
68731 return checks[algo]
68732 }
68733 ZERO_BUF = ZERO_BUF || Buffer.alloc(8)
68734 var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo)
68735 .then(function () {
68736 return true
68737 }).catch(function () {
68738 return false
68739 })
68740 checks[algo] = prom
68741 return prom
68742 }
68743 function browserPbkdf2 (password, salt, iterations, length, algo) {
68744 return subtle.importKey(
68745 'raw', password, {name: 'PBKDF2'}, false, ['deriveBits']
68746 ).then(function (key) {
68747 return subtle.deriveBits({
68748 name: 'PBKDF2',
68749 salt: salt,
68750 iterations: iterations,
68751 hash: {
68752 name: algo
68753 }
68754 }, key, length << 3)
68755 }).then(function (res) {
68756 return Buffer.from(res)
68757 })
68758 }
68759 function resolvePromise (promise, callback) {
68760 promise.then(function (out) {
68761 process.nextTick(function () {
68762 callback(null, out)
68763 })
68764 }, function (e) {
68765 process.nextTick(function () {
68766 callback(e)
68767 })
68768 })
68769 }
68770 module.exports = function (password, salt, iterations, keylen, digest, callback) {
68771 if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding)
68772 if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding)
68773
68774 checkParameters(iterations, keylen)
68775 if (typeof digest === 'function') {
68776 callback = digest
68777 digest = undefined
68778 }
68779 if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2')
68780
68781 digest = digest || 'sha1'
68782 var algo = toBrowser[digest.toLowerCase()]
68783 if (!algo || typeof global.Promise !== 'function') {
68784 return process.nextTick(function () {
68785 var out
68786 try {
68787 out = sync(password, salt, iterations, keylen, digest)
68788 } catch (e) {
68789 return callback(e)
68790 }
68791 callback(null, out)
68792 })
68793 }
68794 resolvePromise(checkNative(algo).then(function (resp) {
68795 if (resp) {
68796 return browserPbkdf2(password, salt, iterations, keylen, algo)
68797 } else {
68798 return sync(password, salt, iterations, keylen, digest)
68799 }
68800 }), callback)
68801 }
68802
68803 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
68804 },{"./default-encoding":108,"./precondition":109,"./sync":110,"_process":112,"safe-buffer":134}],108:[function(require,module,exports){
68805 (function (process){
68806 var defaultEncoding
68807 /* istanbul ignore next */
68808 if (process.browser) {
68809 defaultEncoding = 'utf-8'
68810 } else {
68811 var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10)
68812
68813 defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'
68814 }
68815 module.exports = defaultEncoding
68816
68817 }).call(this,require('_process'))
68818 },{"_process":112}],109:[function(require,module,exports){
68819 var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs
68820 module.exports = function (iterations, keylen) {
68821 if (typeof iterations !== 'number') {
68822 throw new TypeError('Iterations not a number')
68823 }
68824
68825 if (iterations < 0) {
68826 throw new TypeError('Bad iterations')
68827 }
68828
68829 if (typeof keylen !== 'number') {
68830 throw new TypeError('Key length not a number')
68831 }
68832
68833 if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */
68834 throw new TypeError('Bad key length')
68835 }
68836 }
68837
68838 },{}],110:[function(require,module,exports){
68839 var md5 = require('create-hash/md5')
68840 var rmd160 = require('ripemd160')
68841 var sha = require('sha.js')
68842
68843 var checkParameters = require('./precondition')
68844 var defaultEncoding = require('./default-encoding')
68845 var Buffer = require('safe-buffer').Buffer
68846 var ZEROS = Buffer.alloc(128)
68847 var sizes = {
68848 md5: 16,
68849 sha1: 20,
68850 sha224: 28,
68851 sha256: 32,
68852 sha384: 48,
68853 sha512: 64,
68854 rmd160: 20,
68855 ripemd160: 20
68856 }
68857 function Hmac (alg, key, saltLen) {
68858 var hash = getDigest(alg)
68859 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
68860
68861 if (key.length > blocksize) {
68862 key = hash(key)
68863 } else if (key.length < blocksize) {
68864 key = Buffer.concat([key, ZEROS], blocksize)
68865 }
68866
68867 var ipad = Buffer.allocUnsafe(blocksize + sizes[alg])
68868 var opad = Buffer.allocUnsafe(blocksize + sizes[alg])
68869 for (var i = 0; i < blocksize; i++) {
68870 ipad[i] = key[i] ^ 0x36
68871 opad[i] = key[i] ^ 0x5C
68872 }
68873
68874 var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4)
68875 ipad.copy(ipad1, 0, 0, blocksize)
68876 this.ipad1 = ipad1
68877 this.ipad2 = ipad
68878 this.opad = opad
68879 this.alg = alg
68880 this.blocksize = blocksize
68881 this.hash = hash
68882 this.size = sizes[alg]
68883 }
68884
68885 Hmac.prototype.run = function (data, ipad) {
68886 data.copy(ipad, this.blocksize)
68887 var h = this.hash(ipad)
68888 h.copy(this.opad, this.blocksize)
68889 return this.hash(this.opad)
68890 }
68891
68892 function getDigest (alg) {
68893 if (alg === 'rmd160' || alg === 'ripemd160') return rmd160
68894 if (alg === 'md5') return md5
68895 return shaFunc
68896
68897 function shaFunc (data) {
68898 return sha(alg).update(data).digest()
68899 }
68900 }
68901
68902 module.exports = function (password, salt, iterations, keylen, digest) {
68903 if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding)
68904 if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding)
68905
68906 checkParameters(iterations, keylen)
68907
68908 digest = digest || 'sha1'
68909
68910 var hmac = new Hmac(digest, password, salt.length)
68911
68912 var DK = Buffer.allocUnsafe(keylen)
68913 var block1 = Buffer.allocUnsafe(salt.length + 4)
68914 salt.copy(block1, 0, 0, salt.length)
68915
68916 var U, j, destPos, len
68917
68918 var hLen = hmac.size
68919 var T = Buffer.allocUnsafe(hLen)
68920 var l = Math.ceil(keylen / hLen)
68921 var r = keylen - (l - 1) * hLen
68922
68923 for (var i = 1; i <= l; i++) {
68924 block1.writeUInt32BE(i, salt.length)
68925 U = hmac.run(block1, hmac.ipad1)
68926
68927 U.copy(T, 0, 0, hLen)
68928
68929 for (j = 1; j < iterations; j++) {
68930 U = hmac.run(U, hmac.ipad2)
68931 for (var k = 0; k < hLen; k++) T[k] ^= U[k]
68932 }
68933
68934 destPos = (i - 1) * hLen
68935 len = (i === l ? r : hLen)
68936 T.copy(DK, destPos, 0, len)
68937 }
68938
68939 return DK
68940 }
68941
68942 },{"./default-encoding":108,"./precondition":109,"create-hash/md5":53,"ripemd160":133,"safe-buffer":134,"sha.js":136}],111:[function(require,module,exports){
68943 (function (process){
68944 'use strict';
68945
68946 if (!process.version ||
68947 process.version.indexOf('v0.') === 0 ||
68948 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
68949 module.exports = nextTick;
68950 } else {
68951 module.exports = process.nextTick;
68952 }
68953
68954 function nextTick(fn, arg1, arg2, arg3) {
68955 if (typeof fn !== 'function') {
68956 throw new TypeError('"callback" argument must be a function');
68957 }
68958 var len = arguments.length;
68959 var args, i;
68960 switch (len) {
68961 case 0:
68962 case 1:
68963 return process.nextTick(fn);
68964 case 2:
68965 return process.nextTick(function afterTickOne() {
68966 fn.call(null, arg1);
68967 });
68968 case 3:
68969 return process.nextTick(function afterTickTwo() {
68970 fn.call(null, arg1, arg2);
68971 });
68972 case 4:
68973 return process.nextTick(function afterTickThree() {
68974 fn.call(null, arg1, arg2, arg3);
68975 });
68976 default:
68977 args = new Array(len - 1);
68978 i = 0;
68979 while (i < args.length) {
68980 args[i++] = arguments[i];
68981 }
68982 return process.nextTick(function afterTick() {
68983 fn.apply(null, args);
68984 });
68985 }
68986 }
68987
68988 }).call(this,require('_process'))
68989 },{"_process":112}],112:[function(require,module,exports){
68990 // shim for using process in browser
68991 var process = module.exports = {};
68992
68993 // cached from whatever global is present so that test runners that stub it
68994 // don't break things. But we need to wrap it in a try catch in case it is
68995 // wrapped in strict mode code which doesn't define any globals. It's inside a
68996 // function because try/catches deoptimize in certain engines.
68997
68998 var cachedSetTimeout;
68999 var cachedClearTimeout;
69000
69001 function defaultSetTimout() {
69002 throw new Error('setTimeout has not been defined');
69003 }
69004 function defaultClearTimeout () {
69005 throw new Error('clearTimeout has not been defined');
69006 }
69007 (function () {
69008 try {
69009 if (typeof setTimeout === 'function') {
69010 cachedSetTimeout = setTimeout;
69011 } else {
69012 cachedSetTimeout = defaultSetTimout;
69013 }
69014 } catch (e) {
69015 cachedSetTimeout = defaultSetTimout;
69016 }
69017 try {
69018 if (typeof clearTimeout === 'function') {
69019 cachedClearTimeout = clearTimeout;
69020 } else {
69021 cachedClearTimeout = defaultClearTimeout;
69022 }
69023 } catch (e) {
69024 cachedClearTimeout = defaultClearTimeout;
69025 }
69026 } ())
69027 function runTimeout(fun) {
69028 if (cachedSetTimeout === setTimeout) {
69029 //normal enviroments in sane situations
69030 return setTimeout(fun, 0);
69031 }
69032 // if setTimeout wasn't available but was latter defined
69033 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
69034 cachedSetTimeout = setTimeout;
69035 return setTimeout(fun, 0);
69036 }
69037 try {
69038 // when when somebody has screwed with setTimeout but no I.E. maddness
69039 return cachedSetTimeout(fun, 0);
69040 } catch(e){
69041 try {
69042 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
69043 return cachedSetTimeout.call(null, fun, 0);
69044 } catch(e){
69045 // 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
69046 return cachedSetTimeout.call(this, fun, 0);
69047 }
69048 }
69049
69050
69051 }
69052 function runClearTimeout(marker) {
69053 if (cachedClearTimeout === clearTimeout) {
69054 //normal enviroments in sane situations
69055 return clearTimeout(marker);
69056 }
69057 // if clearTimeout wasn't available but was latter defined
69058 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
69059 cachedClearTimeout = clearTimeout;
69060 return clearTimeout(marker);
69061 }
69062 try {
69063 // when when somebody has screwed with setTimeout but no I.E. maddness
69064 return cachedClearTimeout(marker);
69065 } catch (e){
69066 try {
69067 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
69068 return cachedClearTimeout.call(null, marker);
69069 } catch (e){
69070 // 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.
69071 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
69072 return cachedClearTimeout.call(this, marker);
69073 }
69074 }
69075
69076
69077
69078 }
69079 var queue = [];
69080 var draining = false;
69081 var currentQueue;
69082 var queueIndex = -1;
69083
69084 function cleanUpNextTick() {
69085 if (!draining || !currentQueue) {
69086 return;
69087 }
69088 draining = false;
69089 if (currentQueue.length) {
69090 queue = currentQueue.concat(queue);
69091 } else {
69092 queueIndex = -1;
69093 }
69094 if (queue.length) {
69095 drainQueue();
69096 }
69097 }
69098
69099 function drainQueue() {
69100 if (draining) {
69101 return;
69102 }
69103 var timeout = runTimeout(cleanUpNextTick);
69104 draining = true;
69105
69106 var len = queue.length;
69107 while(len) {
69108 currentQueue = queue;
69109 queue = [];
69110 while (++queueIndex < len) {
69111 if (currentQueue) {
69112 currentQueue[queueIndex].run();
69113 }
69114 }
69115 queueIndex = -1;
69116 len = queue.length;
69117 }
69118 currentQueue = null;
69119 draining = false;
69120 runClearTimeout(timeout);
69121 }
69122
69123 process.nextTick = function (fun) {
69124 var args = new Array(arguments.length - 1);
69125 if (arguments.length > 1) {
69126 for (var i = 1; i < arguments.length; i++) {
69127 args[i - 1] = arguments[i];
69128 }
69129 }
69130 queue.push(new Item(fun, args));
69131 if (queue.length === 1 && !draining) {
69132 runTimeout(drainQueue);
69133 }
69134 };
69135
69136 // v8 likes predictible objects
69137 function Item(fun, array) {
69138 this.fun = fun;
69139 this.array = array;
69140 }
69141 Item.prototype.run = function () {
69142 this.fun.apply(null, this.array);
69143 };
69144 process.title = 'browser';
69145 process.browser = true;
69146 process.env = {};
69147 process.argv = [];
69148 process.version = ''; // empty string to avoid regexp issues
69149 process.versions = {};
69150
69151 function noop() {}
69152
69153 process.on = noop;
69154 process.addListener = noop;
69155 process.once = noop;
69156 process.off = noop;
69157 process.removeListener = noop;
69158 process.removeAllListeners = noop;
69159 process.emit = noop;
69160 process.prependListener = noop;
69161 process.prependOnceListener = noop;
69162
69163 process.listeners = function (name) { return [] }
69164
69165 process.binding = function (name) {
69166 throw new Error('process.binding is not supported');
69167 };
69168
69169 process.cwd = function () { return '/' };
69170 process.chdir = function (dir) {
69171 throw new Error('process.chdir is not supported');
69172 };
69173 process.umask = function() { return 0; };
69174
69175 },{}],113:[function(require,module,exports){
69176 exports.publicEncrypt = require('./publicEncrypt');
69177 exports.privateDecrypt = require('./privateDecrypt');
69178
69179 exports.privateEncrypt = function privateEncrypt(key, buf) {
69180 return exports.publicEncrypt(key, buf, true);
69181 };
69182
69183 exports.publicDecrypt = function publicDecrypt(key, buf) {
69184 return exports.privateDecrypt(key, buf, true);
69185 };
69186 },{"./privateDecrypt":115,"./publicEncrypt":116}],114:[function(require,module,exports){
69187 (function (Buffer){
69188 var createHash = require('create-hash');
69189 module.exports = function (seed, len) {
69190 var t = new Buffer('');
69191 var i = 0, c;
69192 while (t.length < len) {
69193 c = i2ops(i++);
69194 t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()]);
69195 }
69196 return t.slice(0, len);
69197 };
69198
69199 function i2ops(c) {
69200 var out = new Buffer(4);
69201 out.writeUInt32BE(c,0);
69202 return out;
69203 }
69204 }).call(this,require("buffer").Buffer)
69205 },{"buffer":47,"create-hash":51}],115:[function(require,module,exports){
69206 (function (Buffer){
69207 var parseKeys = require('parse-asn1');
69208 var mgf = require('./mgf');
69209 var xor = require('./xor');
69210 var bn = require('bn.js');
69211 var crt = require('browserify-rsa');
69212 var createHash = require('create-hash');
69213 var withPublic = require('./withPublic');
69214 module.exports = function privateDecrypt(private_key, enc, reverse) {
69215 var padding;
69216 if (private_key.padding) {
69217 padding = private_key.padding;
69218 } else if (reverse) {
69219 padding = 1;
69220 } else {
69221 padding = 4;
69222 }
69223
69224 var key = parseKeys(private_key);
69225 var k = key.modulus.byteLength();
69226 if (enc.length > k || new bn(enc).cmp(key.modulus) >= 0) {
69227 throw new Error('decryption error');
69228 }
69229 var msg;
69230 if (reverse) {
69231 msg = withPublic(new bn(enc), key);
69232 } else {
69233 msg = crt(enc, key);
69234 }
69235 var zBuffer = new Buffer(k - msg.length);
69236 zBuffer.fill(0);
69237 msg = Buffer.concat([zBuffer, msg], k);
69238 if (padding === 4) {
69239 return oaep(key, msg);
69240 } else if (padding === 1) {
69241 return pkcs1(key, msg, reverse);
69242 } else if (padding === 3) {
69243 return msg;
69244 } else {
69245 throw new Error('unknown padding');
69246 }
69247 };
69248
69249 function oaep(key, msg){
69250 var n = key.modulus;
69251 var k = key.modulus.byteLength();
69252 var mLen = msg.length;
69253 var iHash = createHash('sha1').update(new Buffer('')).digest();
69254 var hLen = iHash.length;
69255 var hLen2 = 2 * hLen;
69256 if (msg[0] !== 0) {
69257 throw new Error('decryption error');
69258 }
69259 var maskedSeed = msg.slice(1, hLen + 1);
69260 var maskedDb = msg.slice(hLen + 1);
69261 var seed = xor(maskedSeed, mgf(maskedDb, hLen));
69262 var db = xor(maskedDb, mgf(seed, k - hLen - 1));
69263 if (compare(iHash, db.slice(0, hLen))) {
69264 throw new Error('decryption error');
69265 }
69266 var i = hLen;
69267 while (db[i] === 0) {
69268 i++;
69269 }
69270 if (db[i++] !== 1) {
69271 throw new Error('decryption error');
69272 }
69273 return db.slice(i);
69274 }
69275
69276 function pkcs1(key, msg, reverse){
69277 var p1 = msg.slice(0, 2);
69278 var i = 2;
69279 var status = 0;
69280 while (msg[i++] !== 0) {
69281 if (i >= msg.length) {
69282 status++;
69283 break;
69284 }
69285 }
69286 var ps = msg.slice(2, i - 1);
69287 var p2 = msg.slice(i - 1, i);
69288
69289 if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)){
69290 status++;
69291 }
69292 if (ps.length < 8) {
69293 status++;
69294 }
69295 if (status) {
69296 throw new Error('decryption error');
69297 }
69298 return msg.slice(i);
69299 }
69300 function compare(a, b){
69301 a = new Buffer(a);
69302 b = new Buffer(b);
69303 var dif = 0;
69304 var len = a.length;
69305 if (a.length !== b.length) {
69306 dif++;
69307 len = Math.min(a.length, b.length);
69308 }
69309 var i = -1;
69310 while (++i < len) {
69311 dif += (a[i] ^ b[i]);
69312 }
69313 return dif;
69314 }
69315 }).call(this,require("buffer").Buffer)
69316 },{"./mgf":114,"./withPublic":117,"./xor":118,"bn.js":17,"browserify-rsa":38,"buffer":47,"create-hash":51,"parse-asn1":105}],116:[function(require,module,exports){
69317 (function (Buffer){
69318 var parseKeys = require('parse-asn1');
69319 var randomBytes = require('randombytes');
69320 var createHash = require('create-hash');
69321 var mgf = require('./mgf');
69322 var xor = require('./xor');
69323 var bn = require('bn.js');
69324 var withPublic = require('./withPublic');
69325 var crt = require('browserify-rsa');
69326
69327 var constants = {
69328 RSA_PKCS1_OAEP_PADDING: 4,
69329 RSA_PKCS1_PADDIN: 1,
69330 RSA_NO_PADDING: 3
69331 };
69332
69333 module.exports = function publicEncrypt(public_key, msg, reverse) {
69334 var padding;
69335 if (public_key.padding) {
69336 padding = public_key.padding;
69337 } else if (reverse) {
69338 padding = 1;
69339 } else {
69340 padding = 4;
69341 }
69342 var key = parseKeys(public_key);
69343 var paddedMsg;
69344 if (padding === 4) {
69345 paddedMsg = oaep(key, msg);
69346 } else if (padding === 1) {
69347 paddedMsg = pkcs1(key, msg, reverse);
69348 } else if (padding === 3) {
69349 paddedMsg = new bn(msg);
69350 if (paddedMsg.cmp(key.modulus) >= 0) {
69351 throw new Error('data too long for modulus');
69352 }
69353 } else {
69354 throw new Error('unknown padding');
69355 }
69356 if (reverse) {
69357 return crt(paddedMsg, key);
69358 } else {
69359 return withPublic(paddedMsg, key);
69360 }
69361 };
69362
69363 function oaep(key, msg){
69364 var k = key.modulus.byteLength();
69365 var mLen = msg.length;
69366 var iHash = createHash('sha1').update(new Buffer('')).digest();
69367 var hLen = iHash.length;
69368 var hLen2 = 2 * hLen;
69369 if (mLen > k - hLen2 - 2) {
69370 throw new Error('message too long');
69371 }
69372 var ps = new Buffer(k - mLen - hLen2 - 2);
69373 ps.fill(0);
69374 var dblen = k - hLen - 1;
69375 var seed = randomBytes(hLen);
69376 var maskedDb = xor(Buffer.concat([iHash, ps, new Buffer([1]), msg], dblen), mgf(seed, dblen));
69377 var maskedSeed = xor(seed, mgf(maskedDb, hLen));
69378 return new bn(Buffer.concat([new Buffer([0]), maskedSeed, maskedDb], k));
69379 }
69380 function pkcs1(key, msg, reverse){
69381 var mLen = msg.length;
69382 var k = key.modulus.byteLength();
69383 if (mLen > k - 11) {
69384 throw new Error('message too long');
69385 }
69386 var ps;
69387 if (reverse) {
69388 ps = new Buffer(k - mLen - 3);
69389 ps.fill(0xff);
69390 } else {
69391 ps = nonZero(k - mLen - 3);
69392 }
69393 return new bn(Buffer.concat([new Buffer([0, reverse?1:2]), ps, new Buffer([0]), msg], k));
69394 }
69395 function nonZero(len, crypto) {
69396 var out = new Buffer(len);
69397 var i = 0;
69398 var cache = randomBytes(len*2);
69399 var cur = 0;
69400 var num;
69401 while (i < len) {
69402 if (cur === cache.length) {
69403 cache = randomBytes(len*2);
69404 cur = 0;
69405 }
69406 num = cache[cur++];
69407 if (num) {
69408 out[i++] = num;
69409 }
69410 }
69411 return out;
69412 }
69413 }).call(this,require("buffer").Buffer)
69414 },{"./mgf":114,"./withPublic":117,"./xor":118,"bn.js":17,"browserify-rsa":38,"buffer":47,"create-hash":51,"parse-asn1":105,"randombytes":119}],117:[function(require,module,exports){
69415 (function (Buffer){
69416 var bn = require('bn.js');
69417 function withPublic(paddedMsg, key) {
69418 return new Buffer(paddedMsg
69419 .toRed(bn.mont(key.modulus))
69420 .redPow(new bn(key.publicExponent))
69421 .fromRed()
69422 .toArray());
69423 }
69424
69425 module.exports = withPublic;
69426 }).call(this,require("buffer").Buffer)
69427 },{"bn.js":17,"buffer":47}],118:[function(require,module,exports){
69428 module.exports = function xor(a, b) {
69429 var len = a.length;
69430 var i = -1;
69431 while (++i < len) {
69432 a[i] ^= b[i];
69433 }
69434 return a
69435 };
69436 },{}],119:[function(require,module,exports){
69437 (function (process,global,Buffer){
69438 'use strict'
69439
69440 function oldBrowser () {
69441 throw new Error('secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11')
69442 }
69443
69444 var crypto = global.crypto || global.msCrypto
69445
69446 if (crypto && crypto.getRandomValues) {
69447 module.exports = randomBytes
69448 } else {
69449 module.exports = oldBrowser
69450 }
69451
69452 function randomBytes (size, cb) {
69453 // phantomjs needs to throw
69454 if (size > 65536) throw new Error('requested too many random bytes')
69455 // in case browserify isn't using the Uint8Array version
69456 var rawBytes = new global.Uint8Array(size)
69457
69458 // This will not work in older browsers.
69459 // See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
69460 if (size > 0) { // getRandomValues fails on IE if size == 0
69461 crypto.getRandomValues(rawBytes)
69462 }
69463 // phantomjs doesn't like a buffer being passed here
69464 var bytes = new Buffer(rawBytes.buffer)
69465
69466 if (typeof cb === 'function') {
69467 return process.nextTick(function () {
69468 cb(null, bytes)
69469 })
69470 }
69471
69472 return bytes
69473 }
69474
69475 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
69476 },{"_process":112,"buffer":47}],120:[function(require,module,exports){
69477 module.exports = require('./lib/_stream_duplex.js');
69478
69479 },{"./lib/_stream_duplex.js":121}],121:[function(require,module,exports){
69480 // a duplex stream is just a stream that is both readable and writable.
69481 // Since JS doesn't have multiple prototypal inheritance, this class
69482 // prototypally inherits from Readable, and then parasitically from
69483 // Writable.
69484
69485 'use strict';
69486
69487 /*<replacement>*/
69488
69489 var objectKeys = Object.keys || function (obj) {
69490 var keys = [];
69491 for (var key in obj) {
69492 keys.push(key);
69493 }return keys;
69494 };
69495 /*</replacement>*/
69496
69497 module.exports = Duplex;
69498
69499 /*<replacement>*/
69500 var processNextTick = require('process-nextick-args');
69501 /*</replacement>*/
69502
69503 /*<replacement>*/
69504 var util = require('core-util-is');
69505 util.inherits = require('inherits');
69506 /*</replacement>*/
69507
69508 var Readable = require('./_stream_readable');
69509 var Writable = require('./_stream_writable');
69510
69511 util.inherits(Duplex, Readable);
69512
69513 var keys = objectKeys(Writable.prototype);
69514 for (var v = 0; v < keys.length; v++) {
69515 var method = keys[v];
69516 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
69517 }
69518
69519 function Duplex(options) {
69520 if (!(this instanceof Duplex)) return new Duplex(options);
69521
69522 Readable.call(this, options);
69523 Writable.call(this, options);
69524
69525 if (options && options.readable === false) this.readable = false;
69526
69527 if (options && options.writable === false) this.writable = false;
69528
69529 this.allowHalfOpen = true;
69530 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
69531
69532 this.once('end', onend);
69533 }
69534
69535 // the no-half-open enforcer
69536 function onend() {
69537 // if we allow half-open state, or if the writable side ended,
69538 // then we're ok.
69539 if (this.allowHalfOpen || this._writableState.ended) return;
69540
69541 // no more data can be written.
69542 // But allow more writes to happen in this tick.
69543 processNextTick(onEndNT, this);
69544 }
69545
69546 function onEndNT(self) {
69547 self.end();
69548 }
69549
69550 function forEach(xs, f) {
69551 for (var i = 0, l = xs.length; i < l; i++) {
69552 f(xs[i], i);
69553 }
69554 }
69555 },{"./_stream_readable":123,"./_stream_writable":125,"core-util-is":49,"inherits":95,"process-nextick-args":111}],122:[function(require,module,exports){
69556 // a passthrough stream.
69557 // basically just the most minimal sort of Transform stream.
69558 // Every written chunk gets output as-is.
69559
69560 'use strict';
69561
69562 module.exports = PassThrough;
69563
69564 var Transform = require('./_stream_transform');
69565
69566 /*<replacement>*/
69567 var util = require('core-util-is');
69568 util.inherits = require('inherits');
69569 /*</replacement>*/
69570
69571 util.inherits(PassThrough, Transform);
69572
69573 function PassThrough(options) {
69574 if (!(this instanceof PassThrough)) return new PassThrough(options);
69575
69576 Transform.call(this, options);
69577 }
69578
69579 PassThrough.prototype._transform = function (chunk, encoding, cb) {
69580 cb(null, chunk);
69581 };
69582 },{"./_stream_transform":124,"core-util-is":49,"inherits":95}],123:[function(require,module,exports){
69583 (function (process){
69584 'use strict';
69585
69586 module.exports = Readable;
69587
69588 /*<replacement>*/
69589 var processNextTick = require('process-nextick-args');
69590 /*</replacement>*/
69591
69592 /*<replacement>*/
69593 var isArray = require('isarray');
69594 /*</replacement>*/
69595
69596 /*<replacement>*/
69597 var Duplex;
69598 /*</replacement>*/
69599
69600 Readable.ReadableState = ReadableState;
69601
69602 /*<replacement>*/
69603 var EE = require('events').EventEmitter;
69604
69605 var EElistenerCount = function (emitter, type) {
69606 return emitter.listeners(type).length;
69607 };
69608 /*</replacement>*/
69609
69610 /*<replacement>*/
69611 var Stream = require('./internal/streams/stream');
69612 /*</replacement>*/
69613
69614 var Buffer = require('buffer').Buffer;
69615 /*<replacement>*/
69616 var bufferShim = require('buffer-shims');
69617 /*</replacement>*/
69618
69619 /*<replacement>*/
69620 var util = require('core-util-is');
69621 util.inherits = require('inherits');
69622 /*</replacement>*/
69623
69624 /*<replacement>*/
69625 var debugUtil = require('util');
69626 var debug = void 0;
69627 if (debugUtil && debugUtil.debuglog) {
69628 debug = debugUtil.debuglog('stream');
69629 } else {
69630 debug = function () {};
69631 }
69632 /*</replacement>*/
69633
69634 var BufferList = require('./internal/streams/BufferList');
69635 var StringDecoder;
69636
69637 util.inherits(Readable, Stream);
69638
69639 var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
69640
69641 function prependListener(emitter, event, fn) {
69642 // Sadly this is not cacheable as some libraries bundle their own
69643 // event emitter implementation with them.
69644 if (typeof emitter.prependListener === 'function') {
69645 return emitter.prependListener(event, fn);
69646 } else {
69647 // This is a hack to make sure that our error handler is attached before any
69648 // userland ones. NEVER DO THIS. This is here only because this code needs
69649 // to continue to work with older versions of Node.js that do not include
69650 // the prependListener() method. The goal is to eventually remove this hack.
69651 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]];
69652 }
69653 }
69654
69655 function ReadableState(options, stream) {
69656 Duplex = Duplex || require('./_stream_duplex');
69657
69658 options = options || {};
69659
69660 // object stream flag. Used to make read(n) ignore n and to
69661 // make all the buffer merging and length checks go away
69662 this.objectMode = !!options.objectMode;
69663
69664 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
69665
69666 // the point at which it stops calling _read() to fill the buffer
69667 // Note: 0 is a valid value, means "don't call _read preemptively ever"
69668 var hwm = options.highWaterMark;
69669 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
69670 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
69671
69672 // cast to ints.
69673 this.highWaterMark = ~~this.highWaterMark;
69674
69675 // A linked list is used to store data chunks instead of an array because the
69676 // linked list can remove elements from the beginning faster than
69677 // array.shift()
69678 this.buffer = new BufferList();
69679 this.length = 0;
69680 this.pipes = null;
69681 this.pipesCount = 0;
69682 this.flowing = null;
69683 this.ended = false;
69684 this.endEmitted = false;
69685 this.reading = false;
69686
69687 // a flag to be able to tell if the onwrite cb is called immediately,
69688 // or on a later tick. We set this to true at first, because any
69689 // actions that shouldn't happen until "later" should generally also
69690 // not happen before the first write call.
69691 this.sync = true;
69692
69693 // whenever we return null, then we set a flag to say
69694 // that we're awaiting a 'readable' event emission.
69695 this.needReadable = false;
69696 this.emittedReadable = false;
69697 this.readableListening = false;
69698 this.resumeScheduled = false;
69699
69700 // Crypto is kind of old and crusty. Historically, its default string
69701 // encoding is 'binary' so we have to make this configurable.
69702 // Everything else in the universe uses 'utf8', though.
69703 this.defaultEncoding = options.defaultEncoding || 'utf8';
69704
69705 // when piping, we only care about 'readable' events that happen
69706 // after read()ing all the bytes and not getting any pushback.
69707 this.ranOut = false;
69708
69709 // the number of writers that are awaiting a drain event in .pipe()s
69710 this.awaitDrain = 0;
69711
69712 // if true, a maybeReadMore has been scheduled
69713 this.readingMore = false;
69714
69715 this.decoder = null;
69716 this.encoding = null;
69717 if (options.encoding) {
69718 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
69719 this.decoder = new StringDecoder(options.encoding);
69720 this.encoding = options.encoding;
69721 }
69722 }
69723
69724 function Readable(options) {
69725 Duplex = Duplex || require('./_stream_duplex');
69726
69727 if (!(this instanceof Readable)) return new Readable(options);
69728
69729 this._readableState = new ReadableState(options, this);
69730
69731 // legacy
69732 this.readable = true;
69733
69734 if (options && typeof options.read === 'function') this._read = options.read;
69735
69736 Stream.call(this);
69737 }
69738
69739 // Manually shove something into the read() buffer.
69740 // This returns true if the highWaterMark has not been hit yet,
69741 // similar to how Writable.write() returns true if you should
69742 // write() some more.
69743 Readable.prototype.push = function (chunk, encoding) {
69744 var state = this._readableState;
69745
69746 if (!state.objectMode && typeof chunk === 'string') {
69747 encoding = encoding || state.defaultEncoding;
69748 if (encoding !== state.encoding) {
69749 chunk = bufferShim.from(chunk, encoding);
69750 encoding = '';
69751 }
69752 }
69753
69754 return readableAddChunk(this, state, chunk, encoding, false);
69755 };
69756
69757 // Unshift should *always* be something directly out of read()
69758 Readable.prototype.unshift = function (chunk) {
69759 var state = this._readableState;
69760 return readableAddChunk(this, state, chunk, '', true);
69761 };
69762
69763 Readable.prototype.isPaused = function () {
69764 return this._readableState.flowing === false;
69765 };
69766
69767 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
69768 var er = chunkInvalid(state, chunk);
69769 if (er) {
69770 stream.emit('error', er);
69771 } else if (chunk === null) {
69772 state.reading = false;
69773 onEofChunk(stream, state);
69774 } else if (state.objectMode || chunk && chunk.length > 0) {
69775 if (state.ended && !addToFront) {
69776 var e = new Error('stream.push() after EOF');
69777 stream.emit('error', e);
69778 } else if (state.endEmitted && addToFront) {
69779 var _e = new Error('stream.unshift() after end event');
69780 stream.emit('error', _e);
69781 } else {
69782 var skipAdd;
69783 if (state.decoder && !addToFront && !encoding) {
69784 chunk = state.decoder.write(chunk);
69785 skipAdd = !state.objectMode && chunk.length === 0;
69786 }
69787
69788 if (!addToFront) state.reading = false;
69789
69790 // Don't add to the buffer if we've decoded to an empty string chunk and
69791 // we're not in object mode
69792 if (!skipAdd) {
69793 // if we want the data now, just emit it.
69794 if (state.flowing && state.length === 0 && !state.sync) {
69795 stream.emit('data', chunk);
69796 stream.read(0);
69797 } else {
69798 // update the buffer info.
69799 state.length += state.objectMode ? 1 : chunk.length;
69800 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
69801
69802 if (state.needReadable) emitReadable(stream);
69803 }
69804 }
69805
69806 maybeReadMore(stream, state);
69807 }
69808 } else if (!addToFront) {
69809 state.reading = false;
69810 }
69811
69812 return needMoreData(state);
69813 }
69814
69815 // if it's past the high water mark, we can push in some more.
69816 // Also, if we have no data yet, we can stand some
69817 // more bytes. This is to work around cases where hwm=0,
69818 // such as the repl. Also, if the push() triggered a
69819 // readable event, and the user called read(largeNumber) such that
69820 // needReadable was set, then we ought to push more, so that another
69821 // 'readable' event will be triggered.
69822 function needMoreData(state) {
69823 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
69824 }
69825
69826 // backwards compatibility.
69827 Readable.prototype.setEncoding = function (enc) {
69828 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
69829 this._readableState.decoder = new StringDecoder(enc);
69830 this._readableState.encoding = enc;
69831 return this;
69832 };
69833
69834 // Don't raise the hwm > 8MB
69835 var MAX_HWM = 0x800000;
69836 function computeNewHighWaterMark(n) {
69837 if (n >= MAX_HWM) {
69838 n = MAX_HWM;
69839 } else {
69840 // Get the next highest power of 2 to prevent increasing hwm excessively in
69841 // tiny amounts
69842 n--;
69843 n |= n >>> 1;
69844 n |= n >>> 2;
69845 n |= n >>> 4;
69846 n |= n >>> 8;
69847 n |= n >>> 16;
69848 n++;
69849 }
69850 return n;
69851 }
69852
69853 // This function is designed to be inlinable, so please take care when making
69854 // changes to the function body.
69855 function howMuchToRead(n, state) {
69856 if (n <= 0 || state.length === 0 && state.ended) return 0;
69857 if (state.objectMode) return 1;
69858 if (n !== n) {
69859 // Only flow one buffer at a time
69860 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
69861 }
69862 // If we're asking for more than the current hwm, then raise the hwm.
69863 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
69864 if (n <= state.length) return n;
69865 // Don't have enough
69866 if (!state.ended) {
69867 state.needReadable = true;
69868 return 0;
69869 }
69870 return state.length;
69871 }
69872
69873 // you can override either this method, or the async _read(n) below.
69874 Readable.prototype.read = function (n) {
69875 debug('read', n);
69876 n = parseInt(n, 10);
69877 var state = this._readableState;
69878 var nOrig = n;
69879
69880 if (n !== 0) state.emittedReadable = false;
69881
69882 // if we're doing read(0) to trigger a readable event, but we
69883 // already have a bunch of data in the buffer, then just trigger
69884 // the 'readable' event and move on.
69885 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
69886 debug('read: emitReadable', state.length, state.ended);
69887 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
69888 return null;
69889 }
69890
69891 n = howMuchToRead(n, state);
69892
69893 // if we've ended, and we're now clear, then finish it up.
69894 if (n === 0 && state.ended) {
69895 if (state.length === 0) endReadable(this);
69896 return null;
69897 }
69898
69899 // All the actual chunk generation logic needs to be
69900 // *below* the call to _read. The reason is that in certain
69901 // synthetic stream cases, such as passthrough streams, _read
69902 // may be a completely synchronous operation which may change
69903 // the state of the read buffer, providing enough data when
69904 // before there was *not* enough.
69905 //
69906 // So, the steps are:
69907 // 1. Figure out what the state of things will be after we do
69908 // a read from the buffer.
69909 //
69910 // 2. If that resulting state will trigger a _read, then call _read.
69911 // Note that this may be asynchronous, or synchronous. Yes, it is
69912 // deeply ugly to write APIs this way, but that still doesn't mean
69913 // that the Readable class should behave improperly, as streams are
69914 // designed to be sync/async agnostic.
69915 // Take note if the _read call is sync or async (ie, if the read call
69916 // has returned yet), so that we know whether or not it's safe to emit
69917 // 'readable' etc.
69918 //
69919 // 3. Actually pull the requested chunks out of the buffer and return.
69920
69921 // if we need a readable event, then we need to do some reading.
69922 var doRead = state.needReadable;
69923 debug('need readable', doRead);
69924
69925 // if we currently have less than the highWaterMark, then also read some
69926 if (state.length === 0 || state.length - n < state.highWaterMark) {
69927 doRead = true;
69928 debug('length less than watermark', doRead);
69929 }
69930
69931 // however, if we've ended, then there's no point, and if we're already
69932 // reading, then it's unnecessary.
69933 if (state.ended || state.reading) {
69934 doRead = false;
69935 debug('reading or ended', doRead);
69936 } else if (doRead) {
69937 debug('do read');
69938 state.reading = true;
69939 state.sync = true;
69940 // if the length is currently zero, then we *need* a readable event.
69941 if (state.length === 0) state.needReadable = true;
69942 // call internal read method
69943 this._read(state.highWaterMark);
69944 state.sync = false;
69945 // If _read pushed data synchronously, then `reading` will be false,
69946 // and we need to re-evaluate how much data we can return to the user.
69947 if (!state.reading) n = howMuchToRead(nOrig, state);
69948 }
69949
69950 var ret;
69951 if (n > 0) ret = fromList(n, state);else ret = null;
69952
69953 if (ret === null) {
69954 state.needReadable = true;
69955 n = 0;
69956 } else {
69957 state.length -= n;
69958 }
69959
69960 if (state.length === 0) {
69961 // If we have nothing in the buffer, then we want to know
69962 // as soon as we *do* get something into the buffer.
69963 if (!state.ended) state.needReadable = true;
69964
69965 // If we tried to read() past the EOF, then emit end on the next tick.
69966 if (nOrig !== n && state.ended) endReadable(this);
69967 }
69968
69969 if (ret !== null) this.emit('data', ret);
69970
69971 return ret;
69972 };
69973
69974 function chunkInvalid(state, chunk) {
69975 var er = null;
69976 if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
69977 er = new TypeError('Invalid non-string/buffer chunk');
69978 }
69979 return er;
69980 }
69981
69982 function onEofChunk(stream, state) {
69983 if (state.ended) return;
69984 if (state.decoder) {
69985 var chunk = state.decoder.end();
69986 if (chunk && chunk.length) {
69987 state.buffer.push(chunk);
69988 state.length += state.objectMode ? 1 : chunk.length;
69989 }
69990 }
69991 state.ended = true;
69992
69993 // emit 'readable' now to make sure it gets picked up.
69994 emitReadable(stream);
69995 }
69996
69997 // Don't emit readable right away in sync mode, because this can trigger
69998 // another read() call => stack overflow. This way, it might trigger
69999 // a nextTick recursion warning, but that's not so bad.
70000 function emitReadable(stream) {
70001 var state = stream._readableState;
70002 state.needReadable = false;
70003 if (!state.emittedReadable) {
70004 debug('emitReadable', state.flowing);
70005 state.emittedReadable = true;
70006 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
70007 }
70008 }
70009
70010 function emitReadable_(stream) {
70011 debug('emit readable');
70012 stream.emit('readable');
70013 flow(stream);
70014 }
70015
70016 // at this point, the user has presumably seen the 'readable' event,
70017 // and called read() to consume some data. that may have triggered
70018 // in turn another _read(n) call, in which case reading = true if
70019 // it's in progress.
70020 // However, if we're not ended, or reading, and the length < hwm,
70021 // then go ahead and try to read some more preemptively.
70022 function maybeReadMore(stream, state) {
70023 if (!state.readingMore) {
70024 state.readingMore = true;
70025 processNextTick(maybeReadMore_, stream, state);
70026 }
70027 }
70028
70029 function maybeReadMore_(stream, state) {
70030 var len = state.length;
70031 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
70032 debug('maybeReadMore read 0');
70033 stream.read(0);
70034 if (len === state.length)
70035 // didn't get any data, stop spinning.
70036 break;else len = state.length;
70037 }
70038 state.readingMore = false;
70039 }
70040
70041 // abstract method. to be overridden in specific implementation classes.
70042 // call cb(er, data) where data is <= n in length.
70043 // for virtual (non-string, non-buffer) streams, "length" is somewhat
70044 // arbitrary, and perhaps not very meaningful.
70045 Readable.prototype._read = function (n) {
70046 this.emit('error', new Error('_read() is not implemented'));
70047 };
70048
70049 Readable.prototype.pipe = function (dest, pipeOpts) {
70050 var src = this;
70051 var state = this._readableState;
70052
70053 switch (state.pipesCount) {
70054 case 0:
70055 state.pipes = dest;
70056 break;
70057 case 1:
70058 state.pipes = [state.pipes, dest];
70059 break;
70060 default:
70061 state.pipes.push(dest);
70062 break;
70063 }
70064 state.pipesCount += 1;
70065 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
70066
70067 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
70068
70069 var endFn = doEnd ? onend : cleanup;
70070 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
70071
70072 dest.on('unpipe', onunpipe);
70073 function onunpipe(readable) {
70074 debug('onunpipe');
70075 if (readable === src) {
70076 cleanup();
70077 }
70078 }
70079
70080 function onend() {
70081 debug('onend');
70082 dest.end();
70083 }
70084
70085 // when the dest drains, it reduces the awaitDrain counter
70086 // on the source. This would be more elegant with a .once()
70087 // handler in flow(), but adding and removing repeatedly is
70088 // too slow.
70089 var ondrain = pipeOnDrain(src);
70090 dest.on('drain', ondrain);
70091
70092 var cleanedUp = false;
70093 function cleanup() {
70094 debug('cleanup');
70095 // cleanup event handlers once the pipe is broken
70096 dest.removeListener('close', onclose);
70097 dest.removeListener('finish', onfinish);
70098 dest.removeListener('drain', ondrain);
70099 dest.removeListener('error', onerror);
70100 dest.removeListener('unpipe', onunpipe);
70101 src.removeListener('end', onend);
70102 src.removeListener('end', cleanup);
70103 src.removeListener('data', ondata);
70104
70105 cleanedUp = true;
70106
70107 // if the reader is waiting for a drain event from this
70108 // specific writer, then it would cause it to never start
70109 // flowing again.
70110 // So, if this is awaiting a drain, then we just call it now.
70111 // If we don't know, then assume that we are waiting for one.
70112 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
70113 }
70114
70115 // If the user pushes more data while we're writing to dest then we'll end up
70116 // in ondata again. However, we only want to increase awaitDrain once because
70117 // dest will only emit one 'drain' event for the multiple writes.
70118 // => Introduce a guard on increasing awaitDrain.
70119 var increasedAwaitDrain = false;
70120 src.on('data', ondata);
70121 function ondata(chunk) {
70122 debug('ondata');
70123 increasedAwaitDrain = false;
70124 var ret = dest.write(chunk);
70125 if (false === ret && !increasedAwaitDrain) {
70126 // If the user unpiped during `dest.write()`, it is possible
70127 // to get stuck in a permanently paused state if that write
70128 // also returned false.
70129 // => Check whether `dest` is still a piping destination.
70130 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
70131 debug('false write response, pause', src._readableState.awaitDrain);
70132 src._readableState.awaitDrain++;
70133 increasedAwaitDrain = true;
70134 }
70135 src.pause();
70136 }
70137 }
70138
70139 // if the dest has an error, then stop piping into it.
70140 // however, don't suppress the throwing behavior for this.
70141 function onerror(er) {
70142 debug('onerror', er);
70143 unpipe();
70144 dest.removeListener('error', onerror);
70145 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
70146 }
70147
70148 // Make sure our error handler is attached before userland ones.
70149 prependListener(dest, 'error', onerror);
70150
70151 // Both close and finish should trigger unpipe, but only once.
70152 function onclose() {
70153 dest.removeListener('finish', onfinish);
70154 unpipe();
70155 }
70156 dest.once('close', onclose);
70157 function onfinish() {
70158 debug('onfinish');
70159 dest.removeListener('close', onclose);
70160 unpipe();
70161 }
70162 dest.once('finish', onfinish);
70163
70164 function unpipe() {
70165 debug('unpipe');
70166 src.unpipe(dest);
70167 }
70168
70169 // tell the dest that it's being piped to
70170 dest.emit('pipe', src);
70171
70172 // start the flow if it hasn't been started already.
70173 if (!state.flowing) {
70174 debug('pipe resume');
70175 src.resume();
70176 }
70177
70178 return dest;
70179 };
70180
70181 function pipeOnDrain(src) {
70182 return function () {
70183 var state = src._readableState;
70184 debug('pipeOnDrain', state.awaitDrain);
70185 if (state.awaitDrain) state.awaitDrain--;
70186 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
70187 state.flowing = true;
70188 flow(src);
70189 }
70190 };
70191 }
70192
70193 Readable.prototype.unpipe = function (dest) {
70194 var state = this._readableState;
70195
70196 // if we're not piping anywhere, then do nothing.
70197 if (state.pipesCount === 0) return this;
70198
70199 // just one destination. most common case.
70200 if (state.pipesCount === 1) {
70201 // passed in one, but it's not the right one.
70202 if (dest && dest !== state.pipes) return this;
70203
70204 if (!dest) dest = state.pipes;
70205
70206 // got a match.
70207 state.pipes = null;
70208 state.pipesCount = 0;
70209 state.flowing = false;
70210 if (dest) dest.emit('unpipe', this);
70211 return this;
70212 }
70213
70214 // slow case. multiple pipe destinations.
70215
70216 if (!dest) {
70217 // remove all.
70218 var dests = state.pipes;
70219 var len = state.pipesCount;
70220 state.pipes = null;
70221 state.pipesCount = 0;
70222 state.flowing = false;
70223
70224 for (var i = 0; i < len; i++) {
70225 dests[i].emit('unpipe', this);
70226 }return this;
70227 }
70228
70229 // try to find the right one.
70230 var index = indexOf(state.pipes, dest);
70231 if (index === -1) return this;
70232
70233 state.pipes.splice(index, 1);
70234 state.pipesCount -= 1;
70235 if (state.pipesCount === 1) state.pipes = state.pipes[0];
70236
70237 dest.emit('unpipe', this);
70238
70239 return this;
70240 };
70241
70242 // set up data events if they are asked for
70243 // Ensure readable listeners eventually get something
70244 Readable.prototype.on = function (ev, fn) {
70245 var res = Stream.prototype.on.call(this, ev, fn);
70246
70247 if (ev === 'data') {
70248 // Start flowing on next tick if stream isn't explicitly paused
70249 if (this._readableState.flowing !== false) this.resume();
70250 } else if (ev === 'readable') {
70251 var state = this._readableState;
70252 if (!state.endEmitted && !state.readableListening) {
70253 state.readableListening = state.needReadable = true;
70254 state.emittedReadable = false;
70255 if (!state.reading) {
70256 processNextTick(nReadingNextTick, this);
70257 } else if (state.length) {
70258 emitReadable(this, state);
70259 }
70260 }
70261 }
70262
70263 return res;
70264 };
70265 Readable.prototype.addListener = Readable.prototype.on;
70266
70267 function nReadingNextTick(self) {
70268 debug('readable nexttick read 0');
70269 self.read(0);
70270 }
70271
70272 // pause() and resume() are remnants of the legacy readable stream API
70273 // If the user uses them, then switch into old mode.
70274 Readable.prototype.resume = function () {
70275 var state = this._readableState;
70276 if (!state.flowing) {
70277 debug('resume');
70278 state.flowing = true;
70279 resume(this, state);
70280 }
70281 return this;
70282 };
70283
70284 function resume(stream, state) {
70285 if (!state.resumeScheduled) {
70286 state.resumeScheduled = true;
70287 processNextTick(resume_, stream, state);
70288 }
70289 }
70290
70291 function resume_(stream, state) {
70292 if (!state.reading) {
70293 debug('resume read 0');
70294 stream.read(0);
70295 }
70296
70297 state.resumeScheduled = false;
70298 state.awaitDrain = 0;
70299 stream.emit('resume');
70300 flow(stream);
70301 if (state.flowing && !state.reading) stream.read(0);
70302 }
70303
70304 Readable.prototype.pause = function () {
70305 debug('call pause flowing=%j', this._readableState.flowing);
70306 if (false !== this._readableState.flowing) {
70307 debug('pause');
70308 this._readableState.flowing = false;
70309 this.emit('pause');
70310 }
70311 return this;
70312 };
70313
70314 function flow(stream) {
70315 var state = stream._readableState;
70316 debug('flow', state.flowing);
70317 while (state.flowing && stream.read() !== null) {}
70318 }
70319
70320 // wrap an old-style stream as the async data source.
70321 // This is *not* part of the readable stream interface.
70322 // It is an ugly unfortunate mess of history.
70323 Readable.prototype.wrap = function (stream) {
70324 var state = this._readableState;
70325 var paused = false;
70326
70327 var self = this;
70328 stream.on('end', function () {
70329 debug('wrapped end');
70330 if (state.decoder && !state.ended) {
70331 var chunk = state.decoder.end();
70332 if (chunk && chunk.length) self.push(chunk);
70333 }
70334
70335 self.push(null);
70336 });
70337
70338 stream.on('data', function (chunk) {
70339 debug('wrapped data');
70340 if (state.decoder) chunk = state.decoder.write(chunk);
70341
70342 // don't skip over falsy values in objectMode
70343 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
70344
70345 var ret = self.push(chunk);
70346 if (!ret) {
70347 paused = true;
70348 stream.pause();
70349 }
70350 });
70351
70352 // proxy all the other methods.
70353 // important when wrapping filters and duplexes.
70354 for (var i in stream) {
70355 if (this[i] === undefined && typeof stream[i] === 'function') {
70356 this[i] = function (method) {
70357 return function () {
70358 return stream[method].apply(stream, arguments);
70359 };
70360 }(i);
70361 }
70362 }
70363
70364 // proxy certain important events.
70365 for (var n = 0; n < kProxyEvents.length; n++) {
70366 stream.on(kProxyEvents[n], self.emit.bind(self, kProxyEvents[n]));
70367 }
70368
70369 // when we try to consume some more bytes, simply unpause the
70370 // underlying stream.
70371 self._read = function (n) {
70372 debug('wrapped _read', n);
70373 if (paused) {
70374 paused = false;
70375 stream.resume();
70376 }
70377 };
70378
70379 return self;
70380 };
70381
70382 // exposed for testing purposes only.
70383 Readable._fromList = fromList;
70384
70385 // Pluck off n bytes from an array of buffers.
70386 // Length is the combined lengths of all the buffers in the list.
70387 // This function is designed to be inlinable, so please take care when making
70388 // changes to the function body.
70389 function fromList(n, state) {
70390 // nothing buffered
70391 if (state.length === 0) return null;
70392
70393 var ret;
70394 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
70395 // read it all, truncate the list
70396 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);
70397 state.buffer.clear();
70398 } else {
70399 // read part of list
70400 ret = fromListPartial(n, state.buffer, state.decoder);
70401 }
70402
70403 return ret;
70404 }
70405
70406 // Extracts only enough buffered data to satisfy the amount requested.
70407 // This function is designed to be inlinable, so please take care when making
70408 // changes to the function body.
70409 function fromListPartial(n, list, hasStrings) {
70410 var ret;
70411 if (n < list.head.data.length) {
70412 // slice is the same for buffers and strings
70413 ret = list.head.data.slice(0, n);
70414 list.head.data = list.head.data.slice(n);
70415 } else if (n === list.head.data.length) {
70416 // first chunk is a perfect match
70417 ret = list.shift();
70418 } else {
70419 // result spans more than one buffer
70420 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
70421 }
70422 return ret;
70423 }
70424
70425 // Copies a specified amount of characters from the list of buffered data
70426 // chunks.
70427 // This function is designed to be inlinable, so please take care when making
70428 // changes to the function body.
70429 function copyFromBufferString(n, list) {
70430 var p = list.head;
70431 var c = 1;
70432 var ret = p.data;
70433 n -= ret.length;
70434 while (p = p.next) {
70435 var str = p.data;
70436 var nb = n > str.length ? str.length : n;
70437 if (nb === str.length) ret += str;else ret += str.slice(0, n);
70438 n -= nb;
70439 if (n === 0) {
70440 if (nb === str.length) {
70441 ++c;
70442 if (p.next) list.head = p.next;else list.head = list.tail = null;
70443 } else {
70444 list.head = p;
70445 p.data = str.slice(nb);
70446 }
70447 break;
70448 }
70449 ++c;
70450 }
70451 list.length -= c;
70452 return ret;
70453 }
70454
70455 // Copies a specified amount of bytes from the list of buffered data chunks.
70456 // This function is designed to be inlinable, so please take care when making
70457 // changes to the function body.
70458 function copyFromBuffer(n, list) {
70459 var ret = bufferShim.allocUnsafe(n);
70460 var p = list.head;
70461 var c = 1;
70462 p.data.copy(ret);
70463 n -= p.data.length;
70464 while (p = p.next) {
70465 var buf = p.data;
70466 var nb = n > buf.length ? buf.length : n;
70467 buf.copy(ret, ret.length - n, 0, nb);
70468 n -= nb;
70469 if (n === 0) {
70470 if (nb === buf.length) {
70471 ++c;
70472 if (p.next) list.head = p.next;else list.head = list.tail = null;
70473 } else {
70474 list.head = p;
70475 p.data = buf.slice(nb);
70476 }
70477 break;
70478 }
70479 ++c;
70480 }
70481 list.length -= c;
70482 return ret;
70483 }
70484
70485 function endReadable(stream) {
70486 var state = stream._readableState;
70487
70488 // If we get here before consuming all the bytes, then that is a
70489 // bug in node. Should never happen.
70490 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
70491
70492 if (!state.endEmitted) {
70493 state.ended = true;
70494 processNextTick(endReadableNT, state, stream);
70495 }
70496 }
70497
70498 function endReadableNT(state, stream) {
70499 // Check that we didn't get one last unshift.
70500 if (!state.endEmitted && state.length === 0) {
70501 state.endEmitted = true;
70502 stream.readable = false;
70503 stream.emit('end');
70504 }
70505 }
70506
70507 function forEach(xs, f) {
70508 for (var i = 0, l = xs.length; i < l; i++) {
70509 f(xs[i], i);
70510 }
70511 }
70512
70513 function indexOf(xs, x) {
70514 for (var i = 0, l = xs.length; i < l; i++) {
70515 if (xs[i] === x) return i;
70516 }
70517 return -1;
70518 }
70519 }).call(this,require('_process'))
70520 },{"./_stream_duplex":121,"./internal/streams/BufferList":126,"./internal/streams/stream":127,"_process":112,"buffer":47,"buffer-shims":45,"core-util-is":49,"events":83,"inherits":95,"isarray":97,"process-nextick-args":111,"string_decoder/":128,"util":19}],124:[function(require,module,exports){
70521 // a transform stream is a readable/writable stream where you do
70522 // something with the data. Sometimes it's called a "filter",
70523 // but that's not a great name for it, since that implies a thing where
70524 // some bits pass through, and others are simply ignored. (That would
70525 // be a valid example of a transform, of course.)
70526 //
70527 // While the output is causally related to the input, it's not a
70528 // necessarily symmetric or synchronous transformation. For example,
70529 // a zlib stream might take multiple plain-text writes(), and then
70530 // emit a single compressed chunk some time in the future.
70531 //
70532 // Here's how this works:
70533 //
70534 // The Transform stream has all the aspects of the readable and writable
70535 // stream classes. When you write(chunk), that calls _write(chunk,cb)
70536 // internally, and returns false if there's a lot of pending writes
70537 // buffered up. When you call read(), that calls _read(n) until
70538 // there's enough pending readable data buffered up.
70539 //
70540 // In a transform stream, the written data is placed in a buffer. When
70541 // _read(n) is called, it transforms the queued up data, calling the
70542 // buffered _write cb's as it consumes chunks. If consuming a single
70543 // written chunk would result in multiple output chunks, then the first
70544 // outputted bit calls the readcb, and subsequent chunks just go into
70545 // the read buffer, and will cause it to emit 'readable' if necessary.
70546 //
70547 // This way, back-pressure is actually determined by the reading side,
70548 // since _read has to be called to start processing a new chunk. However,
70549 // a pathological inflate type of transform can cause excessive buffering
70550 // here. For example, imagine a stream where every byte of input is
70551 // interpreted as an integer from 0-255, and then results in that many
70552 // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
70553 // 1kb of data being output. In this case, you could write a very small
70554 // amount of input, and end up with a very large amount of output. In
70555 // such a pathological inflating mechanism, there'd be no way to tell
70556 // the system to stop doing the transform. A single 4MB write could
70557 // cause the system to run out of memory.
70558 //
70559 // However, even in such a pathological case, only a single written chunk
70560 // would be consumed, and then the rest would wait (un-transformed) until
70561 // the results of the previous transformed chunk were consumed.
70562
70563 'use strict';
70564
70565 module.exports = Transform;
70566
70567 var Duplex = require('./_stream_duplex');
70568
70569 /*<replacement>*/
70570 var util = require('core-util-is');
70571 util.inherits = require('inherits');
70572 /*</replacement>*/
70573
70574 util.inherits(Transform, Duplex);
70575
70576 function TransformState(stream) {
70577 this.afterTransform = function (er, data) {
70578 return afterTransform(stream, er, data);
70579 };
70580
70581 this.needTransform = false;
70582 this.transforming = false;
70583 this.writecb = null;
70584 this.writechunk = null;
70585 this.writeencoding = null;
70586 }
70587
70588 function afterTransform(stream, er, data) {
70589 var ts = stream._transformState;
70590 ts.transforming = false;
70591
70592 var cb = ts.writecb;
70593
70594 if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
70595
70596 ts.writechunk = null;
70597 ts.writecb = null;
70598
70599 if (data !== null && data !== undefined) stream.push(data);
70600
70601 cb(er);
70602
70603 var rs = stream._readableState;
70604 rs.reading = false;
70605 if (rs.needReadable || rs.length < rs.highWaterMark) {
70606 stream._read(rs.highWaterMark);
70607 }
70608 }
70609
70610 function Transform(options) {
70611 if (!(this instanceof Transform)) return new Transform(options);
70612
70613 Duplex.call(this, options);
70614
70615 this._transformState = new TransformState(this);
70616
70617 var stream = this;
70618
70619 // start out asking for a readable event once data is transformed.
70620 this._readableState.needReadable = true;
70621
70622 // we have implemented the _read method, and done the other things
70623 // that Readable wants before the first _read call, so unset the
70624 // sync guard flag.
70625 this._readableState.sync = false;
70626
70627 if (options) {
70628 if (typeof options.transform === 'function') this._transform = options.transform;
70629
70630 if (typeof options.flush === 'function') this._flush = options.flush;
70631 }
70632
70633 // When the writable side finishes, then flush out anything remaining.
70634 this.once('prefinish', function () {
70635 if (typeof this._flush === 'function') this._flush(function (er, data) {
70636 done(stream, er, data);
70637 });else done(stream);
70638 });
70639 }
70640
70641 Transform.prototype.push = function (chunk, encoding) {
70642 this._transformState.needTransform = false;
70643 return Duplex.prototype.push.call(this, chunk, encoding);
70644 };
70645
70646 // This is the part where you do stuff!
70647 // override this function in implementation classes.
70648 // 'chunk' is an input chunk.
70649 //
70650 // Call `push(newChunk)` to pass along transformed output
70651 // to the readable side. You may call 'push' zero or more times.
70652 //
70653 // Call `cb(err)` when you are done with this chunk. If you pass
70654 // an error, then that'll put the hurt on the whole operation. If you
70655 // never call cb(), then you'll never get another chunk.
70656 Transform.prototype._transform = function (chunk, encoding, cb) {
70657 throw new Error('_transform() is not implemented');
70658 };
70659
70660 Transform.prototype._write = function (chunk, encoding, cb) {
70661 var ts = this._transformState;
70662 ts.writecb = cb;
70663 ts.writechunk = chunk;
70664 ts.writeencoding = encoding;
70665 if (!ts.transforming) {
70666 var rs = this._readableState;
70667 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
70668 }
70669 };
70670
70671 // Doesn't matter what the args are here.
70672 // _transform does all the work.
70673 // That we got here means that the readable side wants more data.
70674 Transform.prototype._read = function (n) {
70675 var ts = this._transformState;
70676
70677 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
70678 ts.transforming = true;
70679 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
70680 } else {
70681 // mark that we need a transform, so that any data that comes in
70682 // will get processed, now that we've asked for it.
70683 ts.needTransform = true;
70684 }
70685 };
70686
70687 function done(stream, er, data) {
70688 if (er) return stream.emit('error', er);
70689
70690 if (data !== null && data !== undefined) stream.push(data);
70691
70692 // if there's nothing in the write buffer, then that means
70693 // that nothing more will ever be provided
70694 var ws = stream._writableState;
70695 var ts = stream._transformState;
70696
70697 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
70698
70699 if (ts.transforming) throw new Error('Calling transform done when still transforming');
70700
70701 return stream.push(null);
70702 }
70703 },{"./_stream_duplex":121,"core-util-is":49,"inherits":95}],125:[function(require,module,exports){
70704 (function (process){
70705 // A bit simpler than readable streams.
70706 // Implement an async ._write(chunk, encoding, cb), and it'll handle all
70707 // the drain event emission and buffering.
70708
70709 'use strict';
70710
70711 module.exports = Writable;
70712
70713 /*<replacement>*/
70714 var processNextTick = require('process-nextick-args');
70715 /*</replacement>*/
70716
70717 /*<replacement>*/
70718 var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
70719 /*</replacement>*/
70720
70721 /*<replacement>*/
70722 var Duplex;
70723 /*</replacement>*/
70724
70725 Writable.WritableState = WritableState;
70726
70727 /*<replacement>*/
70728 var util = require('core-util-is');
70729 util.inherits = require('inherits');
70730 /*</replacement>*/
70731
70732 /*<replacement>*/
70733 var internalUtil = {
70734 deprecate: require('util-deprecate')
70735 };
70736 /*</replacement>*/
70737
70738 /*<replacement>*/
70739 var Stream = require('./internal/streams/stream');
70740 /*</replacement>*/
70741
70742 var Buffer = require('buffer').Buffer;
70743 /*<replacement>*/
70744 var bufferShim = require('buffer-shims');
70745 /*</replacement>*/
70746
70747 util.inherits(Writable, Stream);
70748
70749 function nop() {}
70750
70751 function WriteReq(chunk, encoding, cb) {
70752 this.chunk = chunk;
70753 this.encoding = encoding;
70754 this.callback = cb;
70755 this.next = null;
70756 }
70757
70758 function WritableState(options, stream) {
70759 Duplex = Duplex || require('./_stream_duplex');
70760
70761 options = options || {};
70762
70763 // object stream flag to indicate whether or not this stream
70764 // contains buffers or objects.
70765 this.objectMode = !!options.objectMode;
70766
70767 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
70768
70769 // the point at which write() starts returning false
70770 // Note: 0 is a valid value, means that we always return false if
70771 // the entire buffer is not flushed immediately on write()
70772 var hwm = options.highWaterMark;
70773 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
70774 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
70775
70776 // cast to ints.
70777 this.highWaterMark = ~~this.highWaterMark;
70778
70779 // drain event flag.
70780 this.needDrain = false;
70781 // at the start of calling end()
70782 this.ending = false;
70783 // when end() has been called, and returned
70784 this.ended = false;
70785 // when 'finish' is emitted
70786 this.finished = false;
70787
70788 // should we decode strings into buffers before passing to _write?
70789 // this is here so that some node-core streams can optimize string
70790 // handling at a lower level.
70791 var noDecode = options.decodeStrings === false;
70792 this.decodeStrings = !noDecode;
70793
70794 // Crypto is kind of old and crusty. Historically, its default string
70795 // encoding is 'binary' so we have to make this configurable.
70796 // Everything else in the universe uses 'utf8', though.
70797 this.defaultEncoding = options.defaultEncoding || 'utf8';
70798
70799 // not an actual buffer we keep track of, but a measurement
70800 // of how much we're waiting to get pushed to some underlying
70801 // socket or file.
70802 this.length = 0;
70803
70804 // a flag to see when we're in the middle of a write.
70805 this.writing = false;
70806
70807 // when true all writes will be buffered until .uncork() call
70808 this.corked = 0;
70809
70810 // a flag to be able to tell if the onwrite cb is called immediately,
70811 // or on a later tick. We set this to true at first, because any
70812 // actions that shouldn't happen until "later" should generally also
70813 // not happen before the first write call.
70814 this.sync = true;
70815
70816 // a flag to know if we're processing previously buffered items, which
70817 // may call the _write() callback in the same tick, so that we don't
70818 // end up in an overlapped onwrite situation.
70819 this.bufferProcessing = false;
70820
70821 // the callback that's passed to _write(chunk,cb)
70822 this.onwrite = function (er) {
70823 onwrite(stream, er);
70824 };
70825
70826 // the callback that the user supplies to write(chunk,encoding,cb)
70827 this.writecb = null;
70828
70829 // the amount that is being written when _write is called.
70830 this.writelen = 0;
70831
70832 this.bufferedRequest = null;
70833 this.lastBufferedRequest = null;
70834
70835 // number of pending user-supplied write callbacks
70836 // this must be 0 before 'finish' can be emitted
70837 this.pendingcb = 0;
70838
70839 // emit prefinish if the only thing we're waiting for is _write cbs
70840 // This is relevant for synchronous Transform streams
70841 this.prefinished = false;
70842
70843 // True if the error was already emitted and should not be thrown again
70844 this.errorEmitted = false;
70845
70846 // count buffered requests
70847 this.bufferedRequestCount = 0;
70848
70849 // allocate the first CorkedRequest, there is always
70850 // one allocated and free to use, and we maintain at most two
70851 this.corkedRequestsFree = new CorkedRequest(this);
70852 }
70853
70854 WritableState.prototype.getBuffer = function getBuffer() {
70855 var current = this.bufferedRequest;
70856 var out = [];
70857 while (current) {
70858 out.push(current);
70859 current = current.next;
70860 }
70861 return out;
70862 };
70863
70864 (function () {
70865 try {
70866 Object.defineProperty(WritableState.prototype, 'buffer', {
70867 get: internalUtil.deprecate(function () {
70868 return this.getBuffer();
70869 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
70870 });
70871 } catch (_) {}
70872 })();
70873
70874 // Test _writableState for inheritance to account for Duplex streams,
70875 // whose prototype chain only points to Readable.
70876 var realHasInstance;
70877 if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
70878 realHasInstance = Function.prototype[Symbol.hasInstance];
70879 Object.defineProperty(Writable, Symbol.hasInstance, {
70880 value: function (object) {
70881 if (realHasInstance.call(this, object)) return true;
70882
70883 return object && object._writableState instanceof WritableState;
70884 }
70885 });
70886 } else {
70887 realHasInstance = function (object) {
70888 return object instanceof this;
70889 };
70890 }
70891
70892 function Writable(options) {
70893 Duplex = Duplex || require('./_stream_duplex');
70894
70895 // Writable ctor is applied to Duplexes, too.
70896 // `realHasInstance` is necessary because using plain `instanceof`
70897 // would return false, as no `_writableState` property is attached.
70898
70899 // Trying to use the custom `instanceof` for Writable here will also break the
70900 // Node.js LazyTransform implementation, which has a non-trivial getter for
70901 // `_writableState` that would lead to infinite recursion.
70902 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
70903 return new Writable(options);
70904 }
70905
70906 this._writableState = new WritableState(options, this);
70907
70908 // legacy.
70909 this.writable = true;
70910
70911 if (options) {
70912 if (typeof options.write === 'function') this._write = options.write;
70913
70914 if (typeof options.writev === 'function') this._writev = options.writev;
70915 }
70916
70917 Stream.call(this);
70918 }
70919
70920 // Otherwise people can pipe Writable streams, which is just wrong.
70921 Writable.prototype.pipe = function () {
70922 this.emit('error', new Error('Cannot pipe, not readable'));
70923 };
70924
70925 function writeAfterEnd(stream, cb) {
70926 var er = new Error('write after end');
70927 // TODO: defer error events consistently everywhere, not just the cb
70928 stream.emit('error', er);
70929 processNextTick(cb, er);
70930 }
70931
70932 // Checks that a user-supplied chunk is valid, especially for the particular
70933 // mode the stream is in. Currently this means that `null` is never accepted
70934 // and undefined/non-string values are only allowed in object mode.
70935 function validChunk(stream, state, chunk, cb) {
70936 var valid = true;
70937 var er = false;
70938
70939 if (chunk === null) {
70940 er = new TypeError('May not write null values to stream');
70941 } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
70942 er = new TypeError('Invalid non-string/buffer chunk');
70943 }
70944 if (er) {
70945 stream.emit('error', er);
70946 processNextTick(cb, er);
70947 valid = false;
70948 }
70949 return valid;
70950 }
70951
70952 Writable.prototype.write = function (chunk, encoding, cb) {
70953 var state = this._writableState;
70954 var ret = false;
70955 var isBuf = Buffer.isBuffer(chunk);
70956
70957 if (typeof encoding === 'function') {
70958 cb = encoding;
70959 encoding = null;
70960 }
70961
70962 if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
70963
70964 if (typeof cb !== 'function') cb = nop;
70965
70966 if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
70967 state.pendingcb++;
70968 ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
70969 }
70970
70971 return ret;
70972 };
70973
70974 Writable.prototype.cork = function () {
70975 var state = this._writableState;
70976
70977 state.corked++;
70978 };
70979
70980 Writable.prototype.uncork = function () {
70981 var state = this._writableState;
70982
70983 if (state.corked) {
70984 state.corked--;
70985
70986 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
70987 }
70988 };
70989
70990 Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
70991 // node::ParseEncoding() requires lower case.
70992 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
70993 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);
70994 this._writableState.defaultEncoding = encoding;
70995 return this;
70996 };
70997
70998 function decodeChunk(state, chunk, encoding) {
70999 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
71000 chunk = bufferShim.from(chunk, encoding);
71001 }
71002 return chunk;
71003 }
71004
71005 // if we're already writing something, then just put this
71006 // in the queue, and wait our turn. Otherwise, call _write
71007 // If we return false, then we need a drain event, so set that flag.
71008 function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
71009 if (!isBuf) {
71010 chunk = decodeChunk(state, chunk, encoding);
71011 if (Buffer.isBuffer(chunk)) encoding = 'buffer';
71012 }
71013 var len = state.objectMode ? 1 : chunk.length;
71014
71015 state.length += len;
71016
71017 var ret = state.length < state.highWaterMark;
71018 // we must ensure that previous needDrain will not be reset to false.
71019 if (!ret) state.needDrain = true;
71020
71021 if (state.writing || state.corked) {
71022 var last = state.lastBufferedRequest;
71023 state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
71024 if (last) {
71025 last.next = state.lastBufferedRequest;
71026 } else {
71027 state.bufferedRequest = state.lastBufferedRequest;
71028 }
71029 state.bufferedRequestCount += 1;
71030 } else {
71031 doWrite(stream, state, false, len, chunk, encoding, cb);
71032 }
71033
71034 return ret;
71035 }
71036
71037 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
71038 state.writelen = len;
71039 state.writecb = cb;
71040 state.writing = true;
71041 state.sync = true;
71042 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
71043 state.sync = false;
71044 }
71045
71046 function onwriteError(stream, state, sync, er, cb) {
71047 --state.pendingcb;
71048 if (sync) processNextTick(cb, er);else cb(er);
71049
71050 stream._writableState.errorEmitted = true;
71051 stream.emit('error', er);
71052 }
71053
71054 function onwriteStateUpdate(state) {
71055 state.writing = false;
71056 state.writecb = null;
71057 state.length -= state.writelen;
71058 state.writelen = 0;
71059 }
71060
71061 function onwrite(stream, er) {
71062 var state = stream._writableState;
71063 var sync = state.sync;
71064 var cb = state.writecb;
71065
71066 onwriteStateUpdate(state);
71067
71068 if (er) onwriteError(stream, state, sync, er, cb);else {
71069 // Check if we're actually ready to finish, but don't emit yet
71070 var finished = needFinish(state);
71071
71072 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
71073 clearBuffer(stream, state);
71074 }
71075
71076 if (sync) {
71077 /*<replacement>*/
71078 asyncWrite(afterWrite, stream, state, finished, cb);
71079 /*</replacement>*/
71080 } else {
71081 afterWrite(stream, state, finished, cb);
71082 }
71083 }
71084 }
71085
71086 function afterWrite(stream, state, finished, cb) {
71087 if (!finished) onwriteDrain(stream, state);
71088 state.pendingcb--;
71089 cb();
71090 finishMaybe(stream, state);
71091 }
71092
71093 // Must force callback to be called on nextTick, so that we don't
71094 // emit 'drain' before the write() consumer gets the 'false' return
71095 // value, and has a chance to attach a 'drain' listener.
71096 function onwriteDrain(stream, state) {
71097 if (state.length === 0 && state.needDrain) {
71098 state.needDrain = false;
71099 stream.emit('drain');
71100 }
71101 }
71102
71103 // if there's something in the buffer waiting, then process it
71104 function clearBuffer(stream, state) {
71105 state.bufferProcessing = true;
71106 var entry = state.bufferedRequest;
71107
71108 if (stream._writev && entry && entry.next) {
71109 // Fast case, write everything using _writev()
71110 var l = state.bufferedRequestCount;
71111 var buffer = new Array(l);
71112 var holder = state.corkedRequestsFree;
71113 holder.entry = entry;
71114
71115 var count = 0;
71116 while (entry) {
71117 buffer[count] = entry;
71118 entry = entry.next;
71119 count += 1;
71120 }
71121
71122 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
71123
71124 // doWrite is almost always async, defer these to save a bit of time
71125 // as the hot path ends with doWrite
71126 state.pendingcb++;
71127 state.lastBufferedRequest = null;
71128 if (holder.next) {
71129 state.corkedRequestsFree = holder.next;
71130 holder.next = null;
71131 } else {
71132 state.corkedRequestsFree = new CorkedRequest(state);
71133 }
71134 } else {
71135 // Slow case, write chunks one-by-one
71136 while (entry) {
71137 var chunk = entry.chunk;
71138 var encoding = entry.encoding;
71139 var cb = entry.callback;
71140 var len = state.objectMode ? 1 : chunk.length;
71141
71142 doWrite(stream, state, false, len, chunk, encoding, cb);
71143 entry = entry.next;
71144 // if we didn't call the onwrite immediately, then
71145 // it means that we need to wait until it does.
71146 // also, that means that the chunk and cb are currently
71147 // being processed, so move the buffer counter past them.
71148 if (state.writing) {
71149 break;
71150 }
71151 }
71152
71153 if (entry === null) state.lastBufferedRequest = null;
71154 }
71155
71156 state.bufferedRequestCount = 0;
71157 state.bufferedRequest = entry;
71158 state.bufferProcessing = false;
71159 }
71160
71161 Writable.prototype._write = function (chunk, encoding, cb) {
71162 cb(new Error('_write() is not implemented'));
71163 };
71164
71165 Writable.prototype._writev = null;
71166
71167 Writable.prototype.end = function (chunk, encoding, cb) {
71168 var state = this._writableState;
71169
71170 if (typeof chunk === 'function') {
71171 cb = chunk;
71172 chunk = null;
71173 encoding = null;
71174 } else if (typeof encoding === 'function') {
71175 cb = encoding;
71176 encoding = null;
71177 }
71178
71179 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
71180
71181 // .end() fully uncorks
71182 if (state.corked) {
71183 state.corked = 1;
71184 this.uncork();
71185 }
71186
71187 // ignore unnecessary end() calls.
71188 if (!state.ending && !state.finished) endWritable(this, state, cb);
71189 };
71190
71191 function needFinish(state) {
71192 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
71193 }
71194
71195 function prefinish(stream, state) {
71196 if (!state.prefinished) {
71197 state.prefinished = true;
71198 stream.emit('prefinish');
71199 }
71200 }
71201
71202 function finishMaybe(stream, state) {
71203 var need = needFinish(state);
71204 if (need) {
71205 if (state.pendingcb === 0) {
71206 prefinish(stream, state);
71207 state.finished = true;
71208 stream.emit('finish');
71209 } else {
71210 prefinish(stream, state);
71211 }
71212 }
71213 return need;
71214 }
71215
71216 function endWritable(stream, state, cb) {
71217 state.ending = true;
71218 finishMaybe(stream, state);
71219 if (cb) {
71220 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
71221 }
71222 state.ended = true;
71223 stream.writable = false;
71224 }
71225
71226 // It seems a linked list but it is not
71227 // there will be only 2 of these for each stream
71228 function CorkedRequest(state) {
71229 var _this = this;
71230
71231 this.next = null;
71232 this.entry = null;
71233 this.finish = function (err) {
71234 var entry = _this.entry;
71235 _this.entry = null;
71236 while (entry) {
71237 var cb = entry.callback;
71238 state.pendingcb--;
71239 cb(err);
71240 entry = entry.next;
71241 }
71242 if (state.corkedRequestsFree) {
71243 state.corkedRequestsFree.next = _this;
71244 } else {
71245 state.corkedRequestsFree = _this;
71246 }
71247 };
71248 }
71249 }).call(this,require('_process'))
71250 },{"./_stream_duplex":121,"./internal/streams/stream":127,"_process":112,"buffer":47,"buffer-shims":45,"core-util-is":49,"inherits":95,"process-nextick-args":111,"util-deprecate":145}],126:[function(require,module,exports){
71251 'use strict';
71252
71253 var Buffer = require('buffer').Buffer;
71254 /*<replacement>*/
71255 var bufferShim = require('buffer-shims');
71256 /*</replacement>*/
71257
71258 module.exports = BufferList;
71259
71260 function BufferList() {
71261 this.head = null;
71262 this.tail = null;
71263 this.length = 0;
71264 }
71265
71266 BufferList.prototype.push = function (v) {
71267 var entry = { data: v, next: null };
71268 if (this.length > 0) this.tail.next = entry;else this.head = entry;
71269 this.tail = entry;
71270 ++this.length;
71271 };
71272
71273 BufferList.prototype.unshift = function (v) {
71274 var entry = { data: v, next: this.head };
71275 if (this.length === 0) this.tail = entry;
71276 this.head = entry;
71277 ++this.length;
71278 };
71279
71280 BufferList.prototype.shift = function () {
71281 if (this.length === 0) return;
71282 var ret = this.head.data;
71283 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
71284 --this.length;
71285 return ret;
71286 };
71287
71288 BufferList.prototype.clear = function () {
71289 this.head = this.tail = null;
71290 this.length = 0;
71291 };
71292
71293 BufferList.prototype.join = function (s) {
71294 if (this.length === 0) return '';
71295 var p = this.head;
71296 var ret = '' + p.data;
71297 while (p = p.next) {
71298 ret += s + p.data;
71299 }return ret;
71300 };
71301
71302 BufferList.prototype.concat = function (n) {
71303 if (this.length === 0) return bufferShim.alloc(0);
71304 if (this.length === 1) return this.head.data;
71305 var ret = bufferShim.allocUnsafe(n >>> 0);
71306 var p = this.head;
71307 var i = 0;
71308 while (p) {
71309 p.data.copy(ret, i);
71310 i += p.data.length;
71311 p = p.next;
71312 }
71313 return ret;
71314 };
71315 },{"buffer":47,"buffer-shims":45}],127:[function(require,module,exports){
71316 module.exports = require('events').EventEmitter;
71317
71318 },{"events":83}],128:[function(require,module,exports){
71319 'use strict';
71320
71321 var Buffer = require('safe-buffer').Buffer;
71322
71323 var isEncoding = Buffer.isEncoding || function (encoding) {
71324 encoding = '' + encoding;
71325 switch (encoding && encoding.toLowerCase()) {
71326 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':
71327 return true;
71328 default:
71329 return false;
71330 }
71331 };
71332
71333 function _normalizeEncoding(enc) {
71334 if (!enc) return 'utf8';
71335 var retried;
71336 while (true) {
71337 switch (enc) {
71338 case 'utf8':
71339 case 'utf-8':
71340 return 'utf8';
71341 case 'ucs2':
71342 case 'ucs-2':
71343 case 'utf16le':
71344 case 'utf-16le':
71345 return 'utf16le';
71346 case 'latin1':
71347 case 'binary':
71348 return 'latin1';
71349 case 'base64':
71350 case 'ascii':
71351 case 'hex':
71352 return enc;
71353 default:
71354 if (retried) return; // undefined
71355 enc = ('' + enc).toLowerCase();
71356 retried = true;
71357 }
71358 }
71359 };
71360
71361 // Do not cache `Buffer.isEncoding` when checking encoding names as some
71362 // modules monkey-patch it to support additional encodings
71363 function normalizeEncoding(enc) {
71364 var nenc = _normalizeEncoding(enc);
71365 if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
71366 return nenc || enc;
71367 }
71368
71369 // StringDecoder provides an interface for efficiently splitting a series of
71370 // buffers into a series of JS strings without breaking apart multi-byte
71371 // characters.
71372 exports.StringDecoder = StringDecoder;
71373 function StringDecoder(encoding) {
71374 this.encoding = normalizeEncoding(encoding);
71375 var nb;
71376 switch (this.encoding) {
71377 case 'utf16le':
71378 this.text = utf16Text;
71379 this.end = utf16End;
71380 nb = 4;
71381 break;
71382 case 'utf8':
71383 this.fillLast = utf8FillLast;
71384 nb = 4;
71385 break;
71386 case 'base64':
71387 this.text = base64Text;
71388 this.end = base64End;
71389 nb = 3;
71390 break;
71391 default:
71392 this.write = simpleWrite;
71393 this.end = simpleEnd;
71394 return;
71395 }
71396 this.lastNeed = 0;
71397 this.lastTotal = 0;
71398 this.lastChar = Buffer.allocUnsafe(nb);
71399 }
71400
71401 StringDecoder.prototype.write = function (buf) {
71402 if (buf.length === 0) return '';
71403 var r;
71404 var i;
71405 if (this.lastNeed) {
71406 r = this.fillLast(buf);
71407 if (r === undefined) return '';
71408 i = this.lastNeed;
71409 this.lastNeed = 0;
71410 } else {
71411 i = 0;
71412 }
71413 if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
71414 return r || '';
71415 };
71416
71417 StringDecoder.prototype.end = utf8End;
71418
71419 // Returns only complete characters in a Buffer
71420 StringDecoder.prototype.text = utf8Text;
71421
71422 // Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
71423 StringDecoder.prototype.fillLast = function (buf) {
71424 if (this.lastNeed <= buf.length) {
71425 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
71426 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
71427 }
71428 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
71429 this.lastNeed -= buf.length;
71430 };
71431
71432 // Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
71433 // continuation byte.
71434 function utf8CheckByte(byte) {
71435 if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;
71436 return -1;
71437 }
71438
71439 // Checks at most 3 bytes at the end of a Buffer in order to detect an
71440 // incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
71441 // needed to complete the UTF-8 character (if applicable) are returned.
71442 function utf8CheckIncomplete(self, buf, i) {
71443 var j = buf.length - 1;
71444 if (j < i) return 0;
71445 var nb = utf8CheckByte(buf[j]);
71446 if (nb >= 0) {
71447 if (nb > 0) self.lastNeed = nb - 1;
71448 return nb;
71449 }
71450 if (--j < i) return 0;
71451 nb = utf8CheckByte(buf[j]);
71452 if (nb >= 0) {
71453 if (nb > 0) self.lastNeed = nb - 2;
71454 return nb;
71455 }
71456 if (--j < i) return 0;
71457 nb = utf8CheckByte(buf[j]);
71458 if (nb >= 0) {
71459 if (nb > 0) {
71460 if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
71461 }
71462 return nb;
71463 }
71464 return 0;
71465 }
71466
71467 // Validates as many continuation bytes for a multi-byte UTF-8 character as
71468 // needed or are available. If we see a non-continuation byte where we expect
71469 // one, we "replace" the validated continuation bytes we've seen so far with
71470 // UTF-8 replacement characters ('\ufffd'), to match v8's UTF-8 decoding
71471 // behavior. The continuation byte check is included three times in the case
71472 // where all of the continuation bytes for a character exist in the same buffer.
71473 // It is also done this way as a slight performance increase instead of using a
71474 // loop.
71475 function utf8CheckExtraBytes(self, buf, p) {
71476 if ((buf[0] & 0xC0) !== 0x80) {
71477 self.lastNeed = 0;
71478 return '\ufffd'.repeat(p);
71479 }
71480 if (self.lastNeed > 1 && buf.length > 1) {
71481 if ((buf[1] & 0xC0) !== 0x80) {
71482 self.lastNeed = 1;
71483 return '\ufffd'.repeat(p + 1);
71484 }
71485 if (self.lastNeed > 2 && buf.length > 2) {
71486 if ((buf[2] & 0xC0) !== 0x80) {
71487 self.lastNeed = 2;
71488 return '\ufffd'.repeat(p + 2);
71489 }
71490 }
71491 }
71492 }
71493
71494 // Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
71495 function utf8FillLast(buf) {
71496 var p = this.lastTotal - this.lastNeed;
71497 var r = utf8CheckExtraBytes(this, buf, p);
71498 if (r !== undefined) return r;
71499 if (this.lastNeed <= buf.length) {
71500 buf.copy(this.lastChar, p, 0, this.lastNeed);
71501 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
71502 }
71503 buf.copy(this.lastChar, p, 0, buf.length);
71504 this.lastNeed -= buf.length;
71505 }
71506
71507 // Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
71508 // partial character, the character's bytes are buffered until the required
71509 // number of bytes are available.
71510 function utf8Text(buf, i) {
71511 var total = utf8CheckIncomplete(this, buf, i);
71512 if (!this.lastNeed) return buf.toString('utf8', i);
71513 this.lastTotal = total;
71514 var end = buf.length - (total - this.lastNeed);
71515 buf.copy(this.lastChar, 0, end);
71516 return buf.toString('utf8', i, end);
71517 }
71518
71519 // For UTF-8, a replacement character for each buffered byte of a (partial)
71520 // character needs to be added to the output.
71521 function utf8End(buf) {
71522 var r = buf && buf.length ? this.write(buf) : '';
71523 if (this.lastNeed) return r + '\ufffd'.repeat(this.lastTotal - this.lastNeed);
71524 return r;
71525 }
71526
71527 // UTF-16LE typically needs two bytes per character, but even if we have an even
71528 // number of bytes available, we need to check if we end on a leading/high
71529 // surrogate. In that case, we need to wait for the next two bytes in order to
71530 // decode the last character properly.
71531 function utf16Text(buf, i) {
71532 if ((buf.length - i) % 2 === 0) {
71533 var r = buf.toString('utf16le', i);
71534 if (r) {
71535 var c = r.charCodeAt(r.length - 1);
71536 if (c >= 0xD800 && c <= 0xDBFF) {
71537 this.lastNeed = 2;
71538 this.lastTotal = 4;
71539 this.lastChar[0] = buf[buf.length - 2];
71540 this.lastChar[1] = buf[buf.length - 1];
71541 return r.slice(0, -1);
71542 }
71543 }
71544 return r;
71545 }
71546 this.lastNeed = 1;
71547 this.lastTotal = 2;
71548 this.lastChar[0] = buf[buf.length - 1];
71549 return buf.toString('utf16le', i, buf.length - 1);
71550 }
71551
71552 // For UTF-16LE we do not explicitly append special replacement characters if we
71553 // end on a partial character, we simply let v8 handle that.
71554 function utf16End(buf) {
71555 var r = buf && buf.length ? this.write(buf) : '';
71556 if (this.lastNeed) {
71557 var end = this.lastTotal - this.lastNeed;
71558 return r + this.lastChar.toString('utf16le', 0, end);
71559 }
71560 return r;
71561 }
71562
71563 function base64Text(buf, i) {
71564 var n = (buf.length - i) % 3;
71565 if (n === 0) return buf.toString('base64', i);
71566 this.lastNeed = 3 - n;
71567 this.lastTotal = 3;
71568 if (n === 1) {
71569 this.lastChar[0] = buf[buf.length - 1];
71570 } else {
71571 this.lastChar[0] = buf[buf.length - 2];
71572 this.lastChar[1] = buf[buf.length - 1];
71573 }
71574 return buf.toString('base64', i, buf.length - n);
71575 }
71576
71577 function base64End(buf) {
71578 var r = buf && buf.length ? this.write(buf) : '';
71579 if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
71580 return r;
71581 }
71582
71583 // Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
71584 function simpleWrite(buf) {
71585 return buf.toString(this.encoding);
71586 }
71587
71588 function simpleEnd(buf) {
71589 return buf && buf.length ? this.write(buf) : '';
71590 }
71591 },{"safe-buffer":134}],129:[function(require,module,exports){
71592 module.exports = require('./readable').PassThrough
71593
71594 },{"./readable":130}],130:[function(require,module,exports){
71595 exports = module.exports = require('./lib/_stream_readable.js');
71596 exports.Stream = exports;
71597 exports.Readable = exports;
71598 exports.Writable = require('./lib/_stream_writable.js');
71599 exports.Duplex = require('./lib/_stream_duplex.js');
71600 exports.Transform = require('./lib/_stream_transform.js');
71601 exports.PassThrough = require('./lib/_stream_passthrough.js');
71602
71603 },{"./lib/_stream_duplex.js":121,"./lib/_stream_passthrough.js":122,"./lib/_stream_readable.js":123,"./lib/_stream_transform.js":124,"./lib/_stream_writable.js":125}],131:[function(require,module,exports){
71604 module.exports = require('./readable').Transform
71605
71606 },{"./readable":130}],132:[function(require,module,exports){
71607 module.exports = require('./lib/_stream_writable.js');
71608
71609 },{"./lib/_stream_writable.js":125}],133:[function(require,module,exports){
71610 (function (Buffer){
71611 'use strict'
71612 var inherits = require('inherits')
71613 var HashBase = require('hash-base')
71614
71615 function RIPEMD160 () {
71616 HashBase.call(this, 64)
71617
71618 // state
71619 this._a = 0x67452301
71620 this._b = 0xefcdab89
71621 this._c = 0x98badcfe
71622 this._d = 0x10325476
71623 this._e = 0xc3d2e1f0
71624 }
71625
71626 inherits(RIPEMD160, HashBase)
71627
71628 RIPEMD160.prototype._update = function () {
71629 var m = new Array(16)
71630 for (var i = 0; i < 16; ++i) m[i] = this._block.readInt32LE(i * 4)
71631
71632 var al = this._a
71633 var bl = this._b
71634 var cl = this._c
71635 var dl = this._d
71636 var el = this._e
71637
71638 // Mj = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
71639 // K = 0x00000000
71640 // Sj = 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8
71641 al = fn1(al, bl, cl, dl, el, m[0], 0x00000000, 11); cl = rotl(cl, 10)
71642 el = fn1(el, al, bl, cl, dl, m[1], 0x00000000, 14); bl = rotl(bl, 10)
71643 dl = fn1(dl, el, al, bl, cl, m[2], 0x00000000, 15); al = rotl(al, 10)
71644 cl = fn1(cl, dl, el, al, bl, m[3], 0x00000000, 12); el = rotl(el, 10)
71645 bl = fn1(bl, cl, dl, el, al, m[4], 0x00000000, 5); dl = rotl(dl, 10)
71646 al = fn1(al, bl, cl, dl, el, m[5], 0x00000000, 8); cl = rotl(cl, 10)
71647 el = fn1(el, al, bl, cl, dl, m[6], 0x00000000, 7); bl = rotl(bl, 10)
71648 dl = fn1(dl, el, al, bl, cl, m[7], 0x00000000, 9); al = rotl(al, 10)
71649 cl = fn1(cl, dl, el, al, bl, m[8], 0x00000000, 11); el = rotl(el, 10)
71650 bl = fn1(bl, cl, dl, el, al, m[9], 0x00000000, 13); dl = rotl(dl, 10)
71651 al = fn1(al, bl, cl, dl, el, m[10], 0x00000000, 14); cl = rotl(cl, 10)
71652 el = fn1(el, al, bl, cl, dl, m[11], 0x00000000, 15); bl = rotl(bl, 10)
71653 dl = fn1(dl, el, al, bl, cl, m[12], 0x00000000, 6); al = rotl(al, 10)
71654 cl = fn1(cl, dl, el, al, bl, m[13], 0x00000000, 7); el = rotl(el, 10)
71655 bl = fn1(bl, cl, dl, el, al, m[14], 0x00000000, 9); dl = rotl(dl, 10)
71656 al = fn1(al, bl, cl, dl, el, m[15], 0x00000000, 8); cl = rotl(cl, 10)
71657
71658 // Mj = 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8
71659 // K = 0x5a827999
71660 // Sj = 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12
71661 el = fn2(el, al, bl, cl, dl, m[7], 0x5a827999, 7); bl = rotl(bl, 10)
71662 dl = fn2(dl, el, al, bl, cl, m[4], 0x5a827999, 6); al = rotl(al, 10)
71663 cl = fn2(cl, dl, el, al, bl, m[13], 0x5a827999, 8); el = rotl(el, 10)
71664 bl = fn2(bl, cl, dl, el, al, m[1], 0x5a827999, 13); dl = rotl(dl, 10)
71665 al = fn2(al, bl, cl, dl, el, m[10], 0x5a827999, 11); cl = rotl(cl, 10)
71666 el = fn2(el, al, bl, cl, dl, m[6], 0x5a827999, 9); bl = rotl(bl, 10)
71667 dl = fn2(dl, el, al, bl, cl, m[15], 0x5a827999, 7); al = rotl(al, 10)
71668 cl = fn2(cl, dl, el, al, bl, m[3], 0x5a827999, 15); el = rotl(el, 10)
71669 bl = fn2(bl, cl, dl, el, al, m[12], 0x5a827999, 7); dl = rotl(dl, 10)
71670 al = fn2(al, bl, cl, dl, el, m[0], 0x5a827999, 12); cl = rotl(cl, 10)
71671 el = fn2(el, al, bl, cl, dl, m[9], 0x5a827999, 15); bl = rotl(bl, 10)
71672 dl = fn2(dl, el, al, bl, cl, m[5], 0x5a827999, 9); al = rotl(al, 10)
71673 cl = fn2(cl, dl, el, al, bl, m[2], 0x5a827999, 11); el = rotl(el, 10)
71674 bl = fn2(bl, cl, dl, el, al, m[14], 0x5a827999, 7); dl = rotl(dl, 10)
71675 al = fn2(al, bl, cl, dl, el, m[11], 0x5a827999, 13); cl = rotl(cl, 10)
71676 el = fn2(el, al, bl, cl, dl, m[8], 0x5a827999, 12); bl = rotl(bl, 10)
71677
71678 // Mj = 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12
71679 // K = 0x6ed9eba1
71680 // Sj = 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5
71681 dl = fn3(dl, el, al, bl, cl, m[3], 0x6ed9eba1, 11); al = rotl(al, 10)
71682 cl = fn3(cl, dl, el, al, bl, m[10], 0x6ed9eba1, 13); el = rotl(el, 10)
71683 bl = fn3(bl, cl, dl, el, al, m[14], 0x6ed9eba1, 6); dl = rotl(dl, 10)
71684 al = fn3(al, bl, cl, dl, el, m[4], 0x6ed9eba1, 7); cl = rotl(cl, 10)
71685 el = fn3(el, al, bl, cl, dl, m[9], 0x6ed9eba1, 14); bl = rotl(bl, 10)
71686 dl = fn3(dl, el, al, bl, cl, m[15], 0x6ed9eba1, 9); al = rotl(al, 10)
71687 cl = fn3(cl, dl, el, al, bl, m[8], 0x6ed9eba1, 13); el = rotl(el, 10)
71688 bl = fn3(bl, cl, dl, el, al, m[1], 0x6ed9eba1, 15); dl = rotl(dl, 10)
71689 al = fn3(al, bl, cl, dl, el, m[2], 0x6ed9eba1, 14); cl = rotl(cl, 10)
71690 el = fn3(el, al, bl, cl, dl, m[7], 0x6ed9eba1, 8); bl = rotl(bl, 10)
71691 dl = fn3(dl, el, al, bl, cl, m[0], 0x6ed9eba1, 13); al = rotl(al, 10)
71692 cl = fn3(cl, dl, el, al, bl, m[6], 0x6ed9eba1, 6); el = rotl(el, 10)
71693 bl = fn3(bl, cl, dl, el, al, m[13], 0x6ed9eba1, 5); dl = rotl(dl, 10)
71694 al = fn3(al, bl, cl, dl, el, m[11], 0x6ed9eba1, 12); cl = rotl(cl, 10)
71695 el = fn3(el, al, bl, cl, dl, m[5], 0x6ed9eba1, 7); bl = rotl(bl, 10)
71696 dl = fn3(dl, el, al, bl, cl, m[12], 0x6ed9eba1, 5); al = rotl(al, 10)
71697
71698 // Mj = 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2
71699 // K = 0x8f1bbcdc
71700 // Sj = 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12
71701 cl = fn4(cl, dl, el, al, bl, m[1], 0x8f1bbcdc, 11); el = rotl(el, 10)
71702 bl = fn4(bl, cl, dl, el, al, m[9], 0x8f1bbcdc, 12); dl = rotl(dl, 10)
71703 al = fn4(al, bl, cl, dl, el, m[11], 0x8f1bbcdc, 14); cl = rotl(cl, 10)
71704 el = fn4(el, al, bl, cl, dl, m[10], 0x8f1bbcdc, 15); bl = rotl(bl, 10)
71705 dl = fn4(dl, el, al, bl, cl, m[0], 0x8f1bbcdc, 14); al = rotl(al, 10)
71706 cl = fn4(cl, dl, el, al, bl, m[8], 0x8f1bbcdc, 15); el = rotl(el, 10)
71707 bl = fn4(bl, cl, dl, el, al, m[12], 0x8f1bbcdc, 9); dl = rotl(dl, 10)
71708 al = fn4(al, bl, cl, dl, el, m[4], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
71709 el = fn4(el, al, bl, cl, dl, m[13], 0x8f1bbcdc, 9); bl = rotl(bl, 10)
71710 dl = fn4(dl, el, al, bl, cl, m[3], 0x8f1bbcdc, 14); al = rotl(al, 10)
71711 cl = fn4(cl, dl, el, al, bl, m[7], 0x8f1bbcdc, 5); el = rotl(el, 10)
71712 bl = fn4(bl, cl, dl, el, al, m[15], 0x8f1bbcdc, 6); dl = rotl(dl, 10)
71713 al = fn4(al, bl, cl, dl, el, m[14], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
71714 el = fn4(el, al, bl, cl, dl, m[5], 0x8f1bbcdc, 6); bl = rotl(bl, 10)
71715 dl = fn4(dl, el, al, bl, cl, m[6], 0x8f1bbcdc, 5); al = rotl(al, 10)
71716 cl = fn4(cl, dl, el, al, bl, m[2], 0x8f1bbcdc, 12); el = rotl(el, 10)
71717
71718 // Mj = 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
71719 // K = 0xa953fd4e
71720 // Sj = 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
71721 bl = fn5(bl, cl, dl, el, al, m[4], 0xa953fd4e, 9); dl = rotl(dl, 10)
71722 al = fn5(al, bl, cl, dl, el, m[0], 0xa953fd4e, 15); cl = rotl(cl, 10)
71723 el = fn5(el, al, bl, cl, dl, m[5], 0xa953fd4e, 5); bl = rotl(bl, 10)
71724 dl = fn5(dl, el, al, bl, cl, m[9], 0xa953fd4e, 11); al = rotl(al, 10)
71725 cl = fn5(cl, dl, el, al, bl, m[7], 0xa953fd4e, 6); el = rotl(el, 10)
71726 bl = fn5(bl, cl, dl, el, al, m[12], 0xa953fd4e, 8); dl = rotl(dl, 10)
71727 al = fn5(al, bl, cl, dl, el, m[2], 0xa953fd4e, 13); cl = rotl(cl, 10)
71728 el = fn5(el, al, bl, cl, dl, m[10], 0xa953fd4e, 12); bl = rotl(bl, 10)
71729 dl = fn5(dl, el, al, bl, cl, m[14], 0xa953fd4e, 5); al = rotl(al, 10)
71730 cl = fn5(cl, dl, el, al, bl, m[1], 0xa953fd4e, 12); el = rotl(el, 10)
71731 bl = fn5(bl, cl, dl, el, al, m[3], 0xa953fd4e, 13); dl = rotl(dl, 10)
71732 al = fn5(al, bl, cl, dl, el, m[8], 0xa953fd4e, 14); cl = rotl(cl, 10)
71733 el = fn5(el, al, bl, cl, dl, m[11], 0xa953fd4e, 11); bl = rotl(bl, 10)
71734 dl = fn5(dl, el, al, bl, cl, m[6], 0xa953fd4e, 8); al = rotl(al, 10)
71735 cl = fn5(cl, dl, el, al, bl, m[15], 0xa953fd4e, 5); el = rotl(el, 10)
71736 bl = fn5(bl, cl, dl, el, al, m[13], 0xa953fd4e, 6); dl = rotl(dl, 10)
71737
71738 var ar = this._a
71739 var br = this._b
71740 var cr = this._c
71741 var dr = this._d
71742 var er = this._e
71743
71744 // M'j = 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12
71745 // K' = 0x50a28be6
71746 // S'j = 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6
71747 ar = fn5(ar, br, cr, dr, er, m[5], 0x50a28be6, 8); cr = rotl(cr, 10)
71748 er = fn5(er, ar, br, cr, dr, m[14], 0x50a28be6, 9); br = rotl(br, 10)
71749 dr = fn5(dr, er, ar, br, cr, m[7], 0x50a28be6, 9); ar = rotl(ar, 10)
71750 cr = fn5(cr, dr, er, ar, br, m[0], 0x50a28be6, 11); er = rotl(er, 10)
71751 br = fn5(br, cr, dr, er, ar, m[9], 0x50a28be6, 13); dr = rotl(dr, 10)
71752 ar = fn5(ar, br, cr, dr, er, m[2], 0x50a28be6, 15); cr = rotl(cr, 10)
71753 er = fn5(er, ar, br, cr, dr, m[11], 0x50a28be6, 15); br = rotl(br, 10)
71754 dr = fn5(dr, er, ar, br, cr, m[4], 0x50a28be6, 5); ar = rotl(ar, 10)
71755 cr = fn5(cr, dr, er, ar, br, m[13], 0x50a28be6, 7); er = rotl(er, 10)
71756 br = fn5(br, cr, dr, er, ar, m[6], 0x50a28be6, 7); dr = rotl(dr, 10)
71757 ar = fn5(ar, br, cr, dr, er, m[15], 0x50a28be6, 8); cr = rotl(cr, 10)
71758 er = fn5(er, ar, br, cr, dr, m[8], 0x50a28be6, 11); br = rotl(br, 10)
71759 dr = fn5(dr, er, ar, br, cr, m[1], 0x50a28be6, 14); ar = rotl(ar, 10)
71760 cr = fn5(cr, dr, er, ar, br, m[10], 0x50a28be6, 14); er = rotl(er, 10)
71761 br = fn5(br, cr, dr, er, ar, m[3], 0x50a28be6, 12); dr = rotl(dr, 10)
71762 ar = fn5(ar, br, cr, dr, er, m[12], 0x50a28be6, 6); cr = rotl(cr, 10)
71763
71764 // M'j = 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2
71765 // K' = 0x5c4dd124
71766 // S'j = 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11
71767 er = fn4(er, ar, br, cr, dr, m[6], 0x5c4dd124, 9); br = rotl(br, 10)
71768 dr = fn4(dr, er, ar, br, cr, m[11], 0x5c4dd124, 13); ar = rotl(ar, 10)
71769 cr = fn4(cr, dr, er, ar, br, m[3], 0x5c4dd124, 15); er = rotl(er, 10)
71770 br = fn4(br, cr, dr, er, ar, m[7], 0x5c4dd124, 7); dr = rotl(dr, 10)
71771 ar = fn4(ar, br, cr, dr, er, m[0], 0x5c4dd124, 12); cr = rotl(cr, 10)
71772 er = fn4(er, ar, br, cr, dr, m[13], 0x5c4dd124, 8); br = rotl(br, 10)
71773 dr = fn4(dr, er, ar, br, cr, m[5], 0x5c4dd124, 9); ar = rotl(ar, 10)
71774 cr = fn4(cr, dr, er, ar, br, m[10], 0x5c4dd124, 11); er = rotl(er, 10)
71775 br = fn4(br, cr, dr, er, ar, m[14], 0x5c4dd124, 7); dr = rotl(dr, 10)
71776 ar = fn4(ar, br, cr, dr, er, m[15], 0x5c4dd124, 7); cr = rotl(cr, 10)
71777 er = fn4(er, ar, br, cr, dr, m[8], 0x5c4dd124, 12); br = rotl(br, 10)
71778 dr = fn4(dr, er, ar, br, cr, m[12], 0x5c4dd124, 7); ar = rotl(ar, 10)
71779 cr = fn4(cr, dr, er, ar, br, m[4], 0x5c4dd124, 6); er = rotl(er, 10)
71780 br = fn4(br, cr, dr, er, ar, m[9], 0x5c4dd124, 15); dr = rotl(dr, 10)
71781 ar = fn4(ar, br, cr, dr, er, m[1], 0x5c4dd124, 13); cr = rotl(cr, 10)
71782 er = fn4(er, ar, br, cr, dr, m[2], 0x5c4dd124, 11); br = rotl(br, 10)
71783
71784 // M'j = 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13
71785 // K' = 0x6d703ef3
71786 // S'j = 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5
71787 dr = fn3(dr, er, ar, br, cr, m[15], 0x6d703ef3, 9); ar = rotl(ar, 10)
71788 cr = fn3(cr, dr, er, ar, br, m[5], 0x6d703ef3, 7); er = rotl(er, 10)
71789 br = fn3(br, cr, dr, er, ar, m[1], 0x6d703ef3, 15); dr = rotl(dr, 10)
71790 ar = fn3(ar, br, cr, dr, er, m[3], 0x6d703ef3, 11); cr = rotl(cr, 10)
71791 er = fn3(er, ar, br, cr, dr, m[7], 0x6d703ef3, 8); br = rotl(br, 10)
71792 dr = fn3(dr, er, ar, br, cr, m[14], 0x6d703ef3, 6); ar = rotl(ar, 10)
71793 cr = fn3(cr, dr, er, ar, br, m[6], 0x6d703ef3, 6); er = rotl(er, 10)
71794 br = fn3(br, cr, dr, er, ar, m[9], 0x6d703ef3, 14); dr = rotl(dr, 10)
71795 ar = fn3(ar, br, cr, dr, er, m[11], 0x6d703ef3, 12); cr = rotl(cr, 10)
71796 er = fn3(er, ar, br, cr, dr, m[8], 0x6d703ef3, 13); br = rotl(br, 10)
71797 dr = fn3(dr, er, ar, br, cr, m[12], 0x6d703ef3, 5); ar = rotl(ar, 10)
71798 cr = fn3(cr, dr, er, ar, br, m[2], 0x6d703ef3, 14); er = rotl(er, 10)
71799 br = fn3(br, cr, dr, er, ar, m[10], 0x6d703ef3, 13); dr = rotl(dr, 10)
71800 ar = fn3(ar, br, cr, dr, er, m[0], 0x6d703ef3, 13); cr = rotl(cr, 10)
71801 er = fn3(er, ar, br, cr, dr, m[4], 0x6d703ef3, 7); br = rotl(br, 10)
71802 dr = fn3(dr, er, ar, br, cr, m[13], 0x6d703ef3, 5); ar = rotl(ar, 10)
71803
71804 // M'j = 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14
71805 // K' = 0x7a6d76e9
71806 // S'j = 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8
71807 cr = fn2(cr, dr, er, ar, br, m[8], 0x7a6d76e9, 15); er = rotl(er, 10)
71808 br = fn2(br, cr, dr, er, ar, m[6], 0x7a6d76e9, 5); dr = rotl(dr, 10)
71809 ar = fn2(ar, br, cr, dr, er, m[4], 0x7a6d76e9, 8); cr = rotl(cr, 10)
71810 er = fn2(er, ar, br, cr, dr, m[1], 0x7a6d76e9, 11); br = rotl(br, 10)
71811 dr = fn2(dr, er, ar, br, cr, m[3], 0x7a6d76e9, 14); ar = rotl(ar, 10)
71812 cr = fn2(cr, dr, er, ar, br, m[11], 0x7a6d76e9, 14); er = rotl(er, 10)
71813 br = fn2(br, cr, dr, er, ar, m[15], 0x7a6d76e9, 6); dr = rotl(dr, 10)
71814 ar = fn2(ar, br, cr, dr, er, m[0], 0x7a6d76e9, 14); cr = rotl(cr, 10)
71815 er = fn2(er, ar, br, cr, dr, m[5], 0x7a6d76e9, 6); br = rotl(br, 10)
71816 dr = fn2(dr, er, ar, br, cr, m[12], 0x7a6d76e9, 9); ar = rotl(ar, 10)
71817 cr = fn2(cr, dr, er, ar, br, m[2], 0x7a6d76e9, 12); er = rotl(er, 10)
71818 br = fn2(br, cr, dr, er, ar, m[13], 0x7a6d76e9, 9); dr = rotl(dr, 10)
71819 ar = fn2(ar, br, cr, dr, er, m[9], 0x7a6d76e9, 12); cr = rotl(cr, 10)
71820 er = fn2(er, ar, br, cr, dr, m[7], 0x7a6d76e9, 5); br = rotl(br, 10)
71821 dr = fn2(dr, er, ar, br, cr, m[10], 0x7a6d76e9, 15); ar = rotl(ar, 10)
71822 cr = fn2(cr, dr, er, ar, br, m[14], 0x7a6d76e9, 8); er = rotl(er, 10)
71823
71824 // M'j = 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
71825 // K' = 0x00000000
71826 // S'j = 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
71827 br = fn1(br, cr, dr, er, ar, m[12], 0x00000000, 8); dr = rotl(dr, 10)
71828 ar = fn1(ar, br, cr, dr, er, m[15], 0x00000000, 5); cr = rotl(cr, 10)
71829 er = fn1(er, ar, br, cr, dr, m[10], 0x00000000, 12); br = rotl(br, 10)
71830 dr = fn1(dr, er, ar, br, cr, m[4], 0x00000000, 9); ar = rotl(ar, 10)
71831 cr = fn1(cr, dr, er, ar, br, m[1], 0x00000000, 12); er = rotl(er, 10)
71832 br = fn1(br, cr, dr, er, ar, m[5], 0x00000000, 5); dr = rotl(dr, 10)
71833 ar = fn1(ar, br, cr, dr, er, m[8], 0x00000000, 14); cr = rotl(cr, 10)
71834 er = fn1(er, ar, br, cr, dr, m[7], 0x00000000, 6); br = rotl(br, 10)
71835 dr = fn1(dr, er, ar, br, cr, m[6], 0x00000000, 8); ar = rotl(ar, 10)
71836 cr = fn1(cr, dr, er, ar, br, m[2], 0x00000000, 13); er = rotl(er, 10)
71837 br = fn1(br, cr, dr, er, ar, m[13], 0x00000000, 6); dr = rotl(dr, 10)
71838 ar = fn1(ar, br, cr, dr, er, m[14], 0x00000000, 5); cr = rotl(cr, 10)
71839 er = fn1(er, ar, br, cr, dr, m[0], 0x00000000, 15); br = rotl(br, 10)
71840 dr = fn1(dr, er, ar, br, cr, m[3], 0x00000000, 13); ar = rotl(ar, 10)
71841 cr = fn1(cr, dr, er, ar, br, m[9], 0x00000000, 11); er = rotl(er, 10)
71842 br = fn1(br, cr, dr, er, ar, m[11], 0x00000000, 11); dr = rotl(dr, 10)
71843
71844 // change state
71845 var t = (this._b + cl + dr) | 0
71846 this._b = (this._c + dl + er) | 0
71847 this._c = (this._d + el + ar) | 0
71848 this._d = (this._e + al + br) | 0
71849 this._e = (this._a + bl + cr) | 0
71850 this._a = t
71851 }
71852
71853 RIPEMD160.prototype._digest = function () {
71854 // create padding and handle blocks
71855 this._block[this._blockOffset++] = 0x80
71856 if (this._blockOffset > 56) {
71857 this._block.fill(0, this._blockOffset, 64)
71858 this._update()
71859 this._blockOffset = 0
71860 }
71861
71862 this._block.fill(0, this._blockOffset, 56)
71863 this._block.writeUInt32LE(this._length[0], 56)
71864 this._block.writeUInt32LE(this._length[1], 60)
71865 this._update()
71866
71867 // produce result
71868 var buffer = new Buffer(20)
71869 buffer.writeInt32LE(this._a, 0)
71870 buffer.writeInt32LE(this._b, 4)
71871 buffer.writeInt32LE(this._c, 8)
71872 buffer.writeInt32LE(this._d, 12)
71873 buffer.writeInt32LE(this._e, 16)
71874 return buffer
71875 }
71876
71877 function rotl (x, n) {
71878 return (x << n) | (x >>> (32 - n))
71879 }
71880
71881 function fn1 (a, b, c, d, e, m, k, s) {
71882 return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0
71883 }
71884
71885 function fn2 (a, b, c, d, e, m, k, s) {
71886 return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0
71887 }
71888
71889 function fn3 (a, b, c, d, e, m, k, s) {
71890 return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0
71891 }
71892
71893 function fn4 (a, b, c, d, e, m, k, s) {
71894 return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0
71895 }
71896
71897 function fn5 (a, b, c, d, e, m, k, s) {
71898 return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0
71899 }
71900
71901 module.exports = RIPEMD160
71902
71903 }).call(this,require("buffer").Buffer)
71904 },{"buffer":47,"hash-base":85,"inherits":95}],134:[function(require,module,exports){
71905 module.exports = require('buffer')
71906
71907 },{"buffer":47}],135:[function(require,module,exports){
71908 (function (Buffer){
71909 // prototype class for hash functions
71910 function Hash (blockSize, finalSize) {
71911 this._block = new Buffer(blockSize)
71912 this._finalSize = finalSize
71913 this._blockSize = blockSize
71914 this._len = 0
71915 this._s = 0
71916 }
71917
71918 Hash.prototype.update = function (data, enc) {
71919 if (typeof data === 'string') {
71920 enc = enc || 'utf8'
71921 data = new Buffer(data, enc)
71922 }
71923
71924 var l = this._len += data.length
71925 var s = this._s || 0
71926 var f = 0
71927 var buffer = this._block
71928
71929 while (s < l) {
71930 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
71931 var ch = (t - f)
71932
71933 for (var i = 0; i < ch; i++) {
71934 buffer[(s % this._blockSize) + i] = data[i + f]
71935 }
71936
71937 s += ch
71938 f += ch
71939
71940 if ((s % this._blockSize) === 0) {
71941 this._update(buffer)
71942 }
71943 }
71944 this._s = s
71945
71946 return this
71947 }
71948
71949 Hash.prototype.digest = function (enc) {
71950 // Suppose the length of the message M, in bits, is l
71951 var l = this._len * 8
71952
71953 // Append the bit 1 to the end of the message
71954 this._block[this._len % this._blockSize] = 0x80
71955
71956 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
71957 this._block.fill(0, this._len % this._blockSize + 1)
71958
71959 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
71960 this._update(this._block)
71961 this._block.fill(0)
71962 }
71963
71964 // to this append the block which is equal to the number l written in binary
71965 // TODO: handle case where l is > Math.pow(2, 29)
71966 this._block.writeInt32BE(l, this._blockSize - 4)
71967
71968 var hash = this._update(this._block) || this._hash()
71969
71970 return enc ? hash.toString(enc) : hash
71971 }
71972
71973 Hash.prototype._update = function () {
71974 throw new Error('_update must be implemented by subclass')
71975 }
71976
71977 module.exports = Hash
71978
71979 }).call(this,require("buffer").Buffer)
71980 },{"buffer":47}],136:[function(require,module,exports){
71981 var exports = module.exports = function SHA (algorithm) {
71982 algorithm = algorithm.toLowerCase()
71983
71984 var Algorithm = exports[algorithm]
71985 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
71986
71987 return new Algorithm()
71988 }
71989
71990 exports.sha = require('./sha')
71991 exports.sha1 = require('./sha1')
71992 exports.sha224 = require('./sha224')
71993 exports.sha256 = require('./sha256')
71994 exports.sha384 = require('./sha384')
71995 exports.sha512 = require('./sha512')
71996
71997 },{"./sha":137,"./sha1":138,"./sha224":139,"./sha256":140,"./sha384":141,"./sha512":142}],137:[function(require,module,exports){
71998 (function (Buffer){
71999 /*
72000 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
72001 * in FIPS PUB 180-1
72002 * This source code is derived from sha1.js of the same repository.
72003 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
72004 * operation was added.
72005 */
72006
72007 var inherits = require('inherits')
72008 var Hash = require('./hash')
72009
72010 var K = [
72011 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
72012 ]
72013
72014 var W = new Array(80)
72015
72016 function Sha () {
72017 this.init()
72018 this._w = W
72019
72020 Hash.call(this, 64, 56)
72021 }
72022
72023 inherits(Sha, Hash)
72024
72025 Sha.prototype.init = function () {
72026 this._a = 0x67452301
72027 this._b = 0xefcdab89
72028 this._c = 0x98badcfe
72029 this._d = 0x10325476
72030 this._e = 0xc3d2e1f0
72031
72032 return this
72033 }
72034
72035 function rotl5 (num) {
72036 return (num << 5) | (num >>> 27)
72037 }
72038
72039 function rotl30 (num) {
72040 return (num << 30) | (num >>> 2)
72041 }
72042
72043 function ft (s, b, c, d) {
72044 if (s === 0) return (b & c) | ((~b) & d)
72045 if (s === 2) return (b & c) | (b & d) | (c & d)
72046 return b ^ c ^ d
72047 }
72048
72049 Sha.prototype._update = function (M) {
72050 var W = this._w
72051
72052 var a = this._a | 0
72053 var b = this._b | 0
72054 var c = this._c | 0
72055 var d = this._d | 0
72056 var e = this._e | 0
72057
72058 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
72059 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
72060
72061 for (var j = 0; j < 80; ++j) {
72062 var s = ~~(j / 20)
72063 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
72064
72065 e = d
72066 d = c
72067 c = rotl30(b)
72068 b = a
72069 a = t
72070 }
72071
72072 this._a = (a + this._a) | 0
72073 this._b = (b + this._b) | 0
72074 this._c = (c + this._c) | 0
72075 this._d = (d + this._d) | 0
72076 this._e = (e + this._e) | 0
72077 }
72078
72079 Sha.prototype._hash = function () {
72080 var H = new Buffer(20)
72081
72082 H.writeInt32BE(this._a | 0, 0)
72083 H.writeInt32BE(this._b | 0, 4)
72084 H.writeInt32BE(this._c | 0, 8)
72085 H.writeInt32BE(this._d | 0, 12)
72086 H.writeInt32BE(this._e | 0, 16)
72087
72088 return H
72089 }
72090
72091 module.exports = Sha
72092
72093 }).call(this,require("buffer").Buffer)
72094 },{"./hash":135,"buffer":47,"inherits":95}],138:[function(require,module,exports){
72095 (function (Buffer){
72096 /*
72097 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
72098 * in FIPS PUB 180-1
72099 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
72100 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
72101 * Distributed under the BSD License
72102 * See http://pajhome.org.uk/crypt/md5 for details.
72103 */
72104
72105 var inherits = require('inherits')
72106 var Hash = require('./hash')
72107
72108 var K = [
72109 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
72110 ]
72111
72112 var W = new Array(80)
72113
72114 function Sha1 () {
72115 this.init()
72116 this._w = W
72117
72118 Hash.call(this, 64, 56)
72119 }
72120
72121 inherits(Sha1, Hash)
72122
72123 Sha1.prototype.init = function () {
72124 this._a = 0x67452301
72125 this._b = 0xefcdab89
72126 this._c = 0x98badcfe
72127 this._d = 0x10325476
72128 this._e = 0xc3d2e1f0
72129
72130 return this
72131 }
72132
72133 function rotl1 (num) {
72134 return (num << 1) | (num >>> 31)
72135 }
72136
72137 function rotl5 (num) {
72138 return (num << 5) | (num >>> 27)
72139 }
72140
72141 function rotl30 (num) {
72142 return (num << 30) | (num >>> 2)
72143 }
72144
72145 function ft (s, b, c, d) {
72146 if (s === 0) return (b & c) | ((~b) & d)
72147 if (s === 2) return (b & c) | (b & d) | (c & d)
72148 return b ^ c ^ d
72149 }
72150
72151 Sha1.prototype._update = function (M) {
72152 var W = this._w
72153
72154 var a = this._a | 0
72155 var b = this._b | 0
72156 var c = this._c | 0
72157 var d = this._d | 0
72158 var e = this._e | 0
72159
72160 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
72161 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
72162
72163 for (var j = 0; j < 80; ++j) {
72164 var s = ~~(j / 20)
72165 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
72166
72167 e = d
72168 d = c
72169 c = rotl30(b)
72170 b = a
72171 a = t
72172 }
72173
72174 this._a = (a + this._a) | 0
72175 this._b = (b + this._b) | 0
72176 this._c = (c + this._c) | 0
72177 this._d = (d + this._d) | 0
72178 this._e = (e + this._e) | 0
72179 }
72180
72181 Sha1.prototype._hash = function () {
72182 var H = new Buffer(20)
72183
72184 H.writeInt32BE(this._a | 0, 0)
72185 H.writeInt32BE(this._b | 0, 4)
72186 H.writeInt32BE(this._c | 0, 8)
72187 H.writeInt32BE(this._d | 0, 12)
72188 H.writeInt32BE(this._e | 0, 16)
72189
72190 return H
72191 }
72192
72193 module.exports = Sha1
72194
72195 }).call(this,require("buffer").Buffer)
72196 },{"./hash":135,"buffer":47,"inherits":95}],139:[function(require,module,exports){
72197 (function (Buffer){
72198 /**
72199 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
72200 * in FIPS 180-2
72201 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
72202 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
72203 *
72204 */
72205
72206 var inherits = require('inherits')
72207 var Sha256 = require('./sha256')
72208 var Hash = require('./hash')
72209
72210 var W = new Array(64)
72211
72212 function Sha224 () {
72213 this.init()
72214
72215 this._w = W // new Array(64)
72216
72217 Hash.call(this, 64, 56)
72218 }
72219
72220 inherits(Sha224, Sha256)
72221
72222 Sha224.prototype.init = function () {
72223 this._a = 0xc1059ed8
72224 this._b = 0x367cd507
72225 this._c = 0x3070dd17
72226 this._d = 0xf70e5939
72227 this._e = 0xffc00b31
72228 this._f = 0x68581511
72229 this._g = 0x64f98fa7
72230 this._h = 0xbefa4fa4
72231
72232 return this
72233 }
72234
72235 Sha224.prototype._hash = function () {
72236 var H = new Buffer(28)
72237
72238 H.writeInt32BE(this._a, 0)
72239 H.writeInt32BE(this._b, 4)
72240 H.writeInt32BE(this._c, 8)
72241 H.writeInt32BE(this._d, 12)
72242 H.writeInt32BE(this._e, 16)
72243 H.writeInt32BE(this._f, 20)
72244 H.writeInt32BE(this._g, 24)
72245
72246 return H
72247 }
72248
72249 module.exports = Sha224
72250
72251 }).call(this,require("buffer").Buffer)
72252 },{"./hash":135,"./sha256":140,"buffer":47,"inherits":95}],140:[function(require,module,exports){
72253 (function (Buffer){
72254 /**
72255 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
72256 * in FIPS 180-2
72257 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
72258 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
72259 *
72260 */
72261
72262 var inherits = require('inherits')
72263 var Hash = require('./hash')
72264
72265 var K = [
72266 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
72267 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
72268 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
72269 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
72270 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
72271 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
72272 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
72273 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
72274 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
72275 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
72276 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
72277 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
72278 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
72279 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
72280 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
72281 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
72282 ]
72283
72284 var W = new Array(64)
72285
72286 function Sha256 () {
72287 this.init()
72288
72289 this._w = W // new Array(64)
72290
72291 Hash.call(this, 64, 56)
72292 }
72293
72294 inherits(Sha256, Hash)
72295
72296 Sha256.prototype.init = function () {
72297 this._a = 0x6a09e667
72298 this._b = 0xbb67ae85
72299 this._c = 0x3c6ef372
72300 this._d = 0xa54ff53a
72301 this._e = 0x510e527f
72302 this._f = 0x9b05688c
72303 this._g = 0x1f83d9ab
72304 this._h = 0x5be0cd19
72305
72306 return this
72307 }
72308
72309 function ch (x, y, z) {
72310 return z ^ (x & (y ^ z))
72311 }
72312
72313 function maj (x, y, z) {
72314 return (x & y) | (z & (x | y))
72315 }
72316
72317 function sigma0 (x) {
72318 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
72319 }
72320
72321 function sigma1 (x) {
72322 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
72323 }
72324
72325 function gamma0 (x) {
72326 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
72327 }
72328
72329 function gamma1 (x) {
72330 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
72331 }
72332
72333 Sha256.prototype._update = function (M) {
72334 var W = this._w
72335
72336 var a = this._a | 0
72337 var b = this._b | 0
72338 var c = this._c | 0
72339 var d = this._d | 0
72340 var e = this._e | 0
72341 var f = this._f | 0
72342 var g = this._g | 0
72343 var h = this._h | 0
72344
72345 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
72346 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
72347
72348 for (var j = 0; j < 64; ++j) {
72349 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
72350 var T2 = (sigma0(a) + maj(a, b, c)) | 0
72351
72352 h = g
72353 g = f
72354 f = e
72355 e = (d + T1) | 0
72356 d = c
72357 c = b
72358 b = a
72359 a = (T1 + T2) | 0
72360 }
72361
72362 this._a = (a + this._a) | 0
72363 this._b = (b + this._b) | 0
72364 this._c = (c + this._c) | 0
72365 this._d = (d + this._d) | 0
72366 this._e = (e + this._e) | 0
72367 this._f = (f + this._f) | 0
72368 this._g = (g + this._g) | 0
72369 this._h = (h + this._h) | 0
72370 }
72371
72372 Sha256.prototype._hash = function () {
72373 var H = new Buffer(32)
72374
72375 H.writeInt32BE(this._a, 0)
72376 H.writeInt32BE(this._b, 4)
72377 H.writeInt32BE(this._c, 8)
72378 H.writeInt32BE(this._d, 12)
72379 H.writeInt32BE(this._e, 16)
72380 H.writeInt32BE(this._f, 20)
72381 H.writeInt32BE(this._g, 24)
72382 H.writeInt32BE(this._h, 28)
72383
72384 return H
72385 }
72386
72387 module.exports = Sha256
72388
72389 }).call(this,require("buffer").Buffer)
72390 },{"./hash":135,"buffer":47,"inherits":95}],141:[function(require,module,exports){
72391 (function (Buffer){
72392 var inherits = require('inherits')
72393 var SHA512 = require('./sha512')
72394 var Hash = require('./hash')
72395
72396 var W = new Array(160)
72397
72398 function Sha384 () {
72399 this.init()
72400 this._w = W
72401
72402 Hash.call(this, 128, 112)
72403 }
72404
72405 inherits(Sha384, SHA512)
72406
72407 Sha384.prototype.init = function () {
72408 this._ah = 0xcbbb9d5d
72409 this._bh = 0x629a292a
72410 this._ch = 0x9159015a
72411 this._dh = 0x152fecd8
72412 this._eh = 0x67332667
72413 this._fh = 0x8eb44a87
72414 this._gh = 0xdb0c2e0d
72415 this._hh = 0x47b5481d
72416
72417 this._al = 0xc1059ed8
72418 this._bl = 0x367cd507
72419 this._cl = 0x3070dd17
72420 this._dl = 0xf70e5939
72421 this._el = 0xffc00b31
72422 this._fl = 0x68581511
72423 this._gl = 0x64f98fa7
72424 this._hl = 0xbefa4fa4
72425
72426 return this
72427 }
72428
72429 Sha384.prototype._hash = function () {
72430 var H = new Buffer(48)
72431
72432 function writeInt64BE (h, l, offset) {
72433 H.writeInt32BE(h, offset)
72434 H.writeInt32BE(l, offset + 4)
72435 }
72436
72437 writeInt64BE(this._ah, this._al, 0)
72438 writeInt64BE(this._bh, this._bl, 8)
72439 writeInt64BE(this._ch, this._cl, 16)
72440 writeInt64BE(this._dh, this._dl, 24)
72441 writeInt64BE(this._eh, this._el, 32)
72442 writeInt64BE(this._fh, this._fl, 40)
72443
72444 return H
72445 }
72446
72447 module.exports = Sha384
72448
72449 }).call(this,require("buffer").Buffer)
72450 },{"./hash":135,"./sha512":142,"buffer":47,"inherits":95}],142:[function(require,module,exports){
72451 (function (Buffer){
72452 var inherits = require('inherits')
72453 var Hash = require('./hash')
72454
72455 var K = [
72456 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
72457 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
72458 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
72459 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
72460 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
72461 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
72462 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
72463 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
72464 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
72465 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
72466 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
72467 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
72468 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
72469 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
72470 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
72471 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
72472 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
72473 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
72474 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
72475 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
72476 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
72477 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
72478 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
72479 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
72480 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
72481 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
72482 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
72483 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
72484 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
72485 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
72486 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
72487 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
72488 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
72489 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
72490 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
72491 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
72492 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
72493 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
72494 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
72495 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
72496 ]
72497
72498 var W = new Array(160)
72499
72500 function Sha512 () {
72501 this.init()
72502 this._w = W
72503
72504 Hash.call(this, 128, 112)
72505 }
72506
72507 inherits(Sha512, Hash)
72508
72509 Sha512.prototype.init = function () {
72510 this._ah = 0x6a09e667
72511 this._bh = 0xbb67ae85
72512 this._ch = 0x3c6ef372
72513 this._dh = 0xa54ff53a
72514 this._eh = 0x510e527f
72515 this._fh = 0x9b05688c
72516 this._gh = 0x1f83d9ab
72517 this._hh = 0x5be0cd19
72518
72519 this._al = 0xf3bcc908
72520 this._bl = 0x84caa73b
72521 this._cl = 0xfe94f82b
72522 this._dl = 0x5f1d36f1
72523 this._el = 0xade682d1
72524 this._fl = 0x2b3e6c1f
72525 this._gl = 0xfb41bd6b
72526 this._hl = 0x137e2179
72527
72528 return this
72529 }
72530
72531 function Ch (x, y, z) {
72532 return z ^ (x & (y ^ z))
72533 }
72534
72535 function maj (x, y, z) {
72536 return (x & y) | (z & (x | y))
72537 }
72538
72539 function sigma0 (x, xl) {
72540 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
72541 }
72542
72543 function sigma1 (x, xl) {
72544 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
72545 }
72546
72547 function Gamma0 (x, xl) {
72548 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
72549 }
72550
72551 function Gamma0l (x, xl) {
72552 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
72553 }
72554
72555 function Gamma1 (x, xl) {
72556 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
72557 }
72558
72559 function Gamma1l (x, xl) {
72560 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
72561 }
72562
72563 function getCarry (a, b) {
72564 return (a >>> 0) < (b >>> 0) ? 1 : 0
72565 }
72566
72567 Sha512.prototype._update = function (M) {
72568 var W = this._w
72569
72570 var ah = this._ah | 0
72571 var bh = this._bh | 0
72572 var ch = this._ch | 0
72573 var dh = this._dh | 0
72574 var eh = this._eh | 0
72575 var fh = this._fh | 0
72576 var gh = this._gh | 0
72577 var hh = this._hh | 0
72578
72579 var al = this._al | 0
72580 var bl = this._bl | 0
72581 var cl = this._cl | 0
72582 var dl = this._dl | 0
72583 var el = this._el | 0
72584 var fl = this._fl | 0
72585 var gl = this._gl | 0
72586 var hl = this._hl | 0
72587
72588 for (var i = 0; i < 32; i += 2) {
72589 W[i] = M.readInt32BE(i * 4)
72590 W[i + 1] = M.readInt32BE(i * 4 + 4)
72591 }
72592 for (; i < 160; i += 2) {
72593 var xh = W[i - 15 * 2]
72594 var xl = W[i - 15 * 2 + 1]
72595 var gamma0 = Gamma0(xh, xl)
72596 var gamma0l = Gamma0l(xl, xh)
72597
72598 xh = W[i - 2 * 2]
72599 xl = W[i - 2 * 2 + 1]
72600 var gamma1 = Gamma1(xh, xl)
72601 var gamma1l = Gamma1l(xl, xh)
72602
72603 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
72604 var Wi7h = W[i - 7 * 2]
72605 var Wi7l = W[i - 7 * 2 + 1]
72606
72607 var Wi16h = W[i - 16 * 2]
72608 var Wi16l = W[i - 16 * 2 + 1]
72609
72610 var Wil = (gamma0l + Wi7l) | 0
72611 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
72612 Wil = (Wil + gamma1l) | 0
72613 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
72614 Wil = (Wil + Wi16l) | 0
72615 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
72616
72617 W[i] = Wih
72618 W[i + 1] = Wil
72619 }
72620
72621 for (var j = 0; j < 160; j += 2) {
72622 Wih = W[j]
72623 Wil = W[j + 1]
72624
72625 var majh = maj(ah, bh, ch)
72626 var majl = maj(al, bl, cl)
72627
72628 var sigma0h = sigma0(ah, al)
72629 var sigma0l = sigma0(al, ah)
72630 var sigma1h = sigma1(eh, el)
72631 var sigma1l = sigma1(el, eh)
72632
72633 // t1 = h + sigma1 + ch + K[j] + W[j]
72634 var Kih = K[j]
72635 var Kil = K[j + 1]
72636
72637 var chh = Ch(eh, fh, gh)
72638 var chl = Ch(el, fl, gl)
72639
72640 var t1l = (hl + sigma1l) | 0
72641 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
72642 t1l = (t1l + chl) | 0
72643 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
72644 t1l = (t1l + Kil) | 0
72645 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
72646 t1l = (t1l + Wil) | 0
72647 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
72648
72649 // t2 = sigma0 + maj
72650 var t2l = (sigma0l + majl) | 0
72651 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
72652
72653 hh = gh
72654 hl = gl
72655 gh = fh
72656 gl = fl
72657 fh = eh
72658 fl = el
72659 el = (dl + t1l) | 0
72660 eh = (dh + t1h + getCarry(el, dl)) | 0
72661 dh = ch
72662 dl = cl
72663 ch = bh
72664 cl = bl
72665 bh = ah
72666 bl = al
72667 al = (t1l + t2l) | 0
72668 ah = (t1h + t2h + getCarry(al, t1l)) | 0
72669 }
72670
72671 this._al = (this._al + al) | 0
72672 this._bl = (this._bl + bl) | 0
72673 this._cl = (this._cl + cl) | 0
72674 this._dl = (this._dl + dl) | 0
72675 this._el = (this._el + el) | 0
72676 this._fl = (this._fl + fl) | 0
72677 this._gl = (this._gl + gl) | 0
72678 this._hl = (this._hl + hl) | 0
72679
72680 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
72681 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
72682 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
72683 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
72684 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
72685 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
72686 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
72687 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
72688 }
72689
72690 Sha512.prototype._hash = function () {
72691 var H = new Buffer(64)
72692
72693 function writeInt64BE (h, l, offset) {
72694 H.writeInt32BE(h, offset)
72695 H.writeInt32BE(l, offset + 4)
72696 }
72697
72698 writeInt64BE(this._ah, this._al, 0)
72699 writeInt64BE(this._bh, this._bl, 8)
72700 writeInt64BE(this._ch, this._cl, 16)
72701 writeInt64BE(this._dh, this._dl, 24)
72702 writeInt64BE(this._eh, this._el, 32)
72703 writeInt64BE(this._fh, this._fl, 40)
72704 writeInt64BE(this._gh, this._gl, 48)
72705 writeInt64BE(this._hh, this._hl, 56)
72706
72707 return H
72708 }
72709
72710 module.exports = Sha512
72711
72712 }).call(this,require("buffer").Buffer)
72713 },{"./hash":135,"buffer":47,"inherits":95}],143:[function(require,module,exports){
72714 // Copyright Joyent, Inc. and other Node contributors.
72715 //
72716 // Permission is hereby granted, free of charge, to any person obtaining a
72717 // copy of this software and associated documentation files (the
72718 // "Software"), to deal in the Software without restriction, including
72719 // without limitation the rights to use, copy, modify, merge, publish,
72720 // distribute, sublicense, and/or sell copies of the Software, and to permit
72721 // persons to whom the Software is furnished to do so, subject to the
72722 // following conditions:
72723 //
72724 // The above copyright notice and this permission notice shall be included
72725 // in all copies or substantial portions of the Software.
72726 //
72727 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
72728 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
72729 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
72730 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
72731 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
72732 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
72733 // USE OR OTHER DEALINGS IN THE SOFTWARE.
72734
72735 module.exports = Stream;
72736
72737 var EE = require('events').EventEmitter;
72738 var inherits = require('inherits');
72739
72740 inherits(Stream, EE);
72741 Stream.Readable = require('readable-stream/readable.js');
72742 Stream.Writable = require('readable-stream/writable.js');
72743 Stream.Duplex = require('readable-stream/duplex.js');
72744 Stream.Transform = require('readable-stream/transform.js');
72745 Stream.PassThrough = require('readable-stream/passthrough.js');
72746
72747 // Backwards-compat with node 0.4.x
72748 Stream.Stream = Stream;
72749
72750
72751
72752 // old-style streams. Note that the pipe method (the only relevant
72753 // part of this class) is overridden in the Readable class.
72754
72755 function Stream() {
72756 EE.call(this);
72757 }
72758
72759 Stream.prototype.pipe = function(dest, options) {
72760 var source = this;
72761
72762 function ondata(chunk) {
72763 if (dest.writable) {
72764 if (false === dest.write(chunk) && source.pause) {
72765 source.pause();
72766 }
72767 }
72768 }
72769
72770 source.on('data', ondata);
72771
72772 function ondrain() {
72773 if (source.readable && source.resume) {
72774 source.resume();
72775 }
72776 }
72777
72778 dest.on('drain', ondrain);
72779
72780 // If the 'end' option is not supplied, dest.end() will be called when
72781 // source gets the 'end' or 'close' events. Only dest.end() once.
72782 if (!dest._isStdio && (!options || options.end !== false)) {
72783 source.on('end', onend);
72784 source.on('close', onclose);
72785 }
72786
72787 var didOnEnd = false;
72788 function onend() {
72789 if (didOnEnd) return;
72790 didOnEnd = true;
72791
72792 dest.end();
72793 }
72794
72795
72796 function onclose() {
72797 if (didOnEnd) return;
72798 didOnEnd = true;
72799
72800 if (typeof dest.destroy === 'function') dest.destroy();
72801 }
72802
72803 // don't leave dangling pipes when there are errors.
72804 function onerror(er) {
72805 cleanup();
72806 if (EE.listenerCount(this, 'error') === 0) {
72807 throw er; // Unhandled stream error in pipe.
72808 }
72809 }
72810
72811 source.on('error', onerror);
72812 dest.on('error', onerror);
72813
72814 // remove all the event listeners that were added.
72815 function cleanup() {
72816 source.removeListener('data', ondata);
72817 dest.removeListener('drain', ondrain);
72818
72819 source.removeListener('end', onend);
72820 source.removeListener('close', onclose);
72821
72822 source.removeListener('error', onerror);
72823 dest.removeListener('error', onerror);
72824
72825 source.removeListener('end', cleanup);
72826 source.removeListener('close', cleanup);
72827
72828 dest.removeListener('close', cleanup);
72829 }
72830
72831 source.on('end', cleanup);
72832 source.on('close', cleanup);
72833
72834 dest.on('close', cleanup);
72835
72836 dest.emit('pipe', source);
72837
72838 // Allow for unix-like usage: A.pipe(B).pipe(C)
72839 return dest;
72840 };
72841
72842 },{"events":83,"inherits":95,"readable-stream/duplex.js":120,"readable-stream/passthrough.js":129,"readable-stream/readable.js":130,"readable-stream/transform.js":131,"readable-stream/writable.js":132}],144:[function(require,module,exports){
72843 // Copyright Joyent, Inc. and other Node contributors.
72844 //
72845 // Permission is hereby granted, free of charge, to any person obtaining a
72846 // copy of this software and associated documentation files (the
72847 // "Software"), to deal in the Software without restriction, including
72848 // without limitation the rights to use, copy, modify, merge, publish,
72849 // distribute, sublicense, and/or sell copies of the Software, and to permit
72850 // persons to whom the Software is furnished to do so, subject to the
72851 // following conditions:
72852 //
72853 // The above copyright notice and this permission notice shall be included
72854 // in all copies or substantial portions of the Software.
72855 //
72856 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
72857 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
72858 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
72859 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
72860 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
72861 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
72862 // USE OR OTHER DEALINGS IN THE SOFTWARE.
72863
72864 var Buffer = require('buffer').Buffer;
72865
72866 var isBufferEncoding = Buffer.isEncoding
72867 || function(encoding) {
72868 switch (encoding && encoding.toLowerCase()) {
72869 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;
72870 default: return false;
72871 }
72872 }
72873
72874
72875 function assertEncoding(encoding) {
72876 if (encoding && !isBufferEncoding(encoding)) {
72877 throw new Error('Unknown encoding: ' + encoding);
72878 }
72879 }
72880
72881 // StringDecoder provides an interface for efficiently splitting a series of
72882 // buffers into a series of JS strings without breaking apart multi-byte
72883 // characters. CESU-8 is handled as part of the UTF-8 encoding.
72884 //
72885 // @TODO Handling all encodings inside a single object makes it very difficult
72886 // to reason about this code, so it should be split up in the future.
72887 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
72888 // points as used by CESU-8.
72889 var StringDecoder = exports.StringDecoder = function(encoding) {
72890 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
72891 assertEncoding(encoding);
72892 switch (this.encoding) {
72893 case 'utf8':
72894 // CESU-8 represents each of Surrogate Pair by 3-bytes
72895 this.surrogateSize = 3;
72896 break;
72897 case 'ucs2':
72898 case 'utf16le':
72899 // UTF-16 represents each of Surrogate Pair by 2-bytes
72900 this.surrogateSize = 2;
72901 this.detectIncompleteChar = utf16DetectIncompleteChar;
72902 break;
72903 case 'base64':
72904 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
72905 this.surrogateSize = 3;
72906 this.detectIncompleteChar = base64DetectIncompleteChar;
72907 break;
72908 default:
72909 this.write = passThroughWrite;
72910 return;
72911 }
72912
72913 // Enough space to store all bytes of a single character. UTF-8 needs 4
72914 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
72915 this.charBuffer = new Buffer(6);
72916 // Number of bytes received for the current incomplete multi-byte character.
72917 this.charReceived = 0;
72918 // Number of bytes expected for the current incomplete multi-byte character.
72919 this.charLength = 0;
72920 };
72921
72922
72923 // write decodes the given buffer and returns it as JS string that is
72924 // guaranteed to not contain any partial multi-byte characters. Any partial
72925 // character found at the end of the buffer is buffered up, and will be
72926 // returned when calling write again with the remaining bytes.
72927 //
72928 // Note: Converting a Buffer containing an orphan surrogate to a String
72929 // currently works, but converting a String to a Buffer (via `new Buffer`, or
72930 // Buffer#write) will replace incomplete surrogates with the unicode
72931 // replacement character. See https://codereview.chromium.org/121173009/ .
72932 StringDecoder.prototype.write = function(buffer) {
72933 var charStr = '';
72934 // if our last write ended with an incomplete multibyte character
72935 while (this.charLength) {
72936 // determine how many remaining bytes this buffer has to offer for this char
72937 var available = (buffer.length >= this.charLength - this.charReceived) ?
72938 this.charLength - this.charReceived :
72939 buffer.length;
72940
72941 // add the new bytes to the char buffer
72942 buffer.copy(this.charBuffer, this.charReceived, 0, available);
72943 this.charReceived += available;
72944
72945 if (this.charReceived < this.charLength) {
72946 // still not enough chars in this buffer? wait for more ...
72947 return '';
72948 }
72949
72950 // remove bytes belonging to the current character from the buffer
72951 buffer = buffer.slice(available, buffer.length);
72952
72953 // get the character that was split
72954 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
72955
72956 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
72957 var charCode = charStr.charCodeAt(charStr.length - 1);
72958 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
72959 this.charLength += this.surrogateSize;
72960 charStr = '';
72961 continue;
72962 }
72963 this.charReceived = this.charLength = 0;
72964
72965 // if there are no more bytes in this buffer, just emit our char
72966 if (buffer.length === 0) {
72967 return charStr;
72968 }
72969 break;
72970 }
72971
72972 // determine and set charLength / charReceived
72973 this.detectIncompleteChar(buffer);
72974
72975 var end = buffer.length;
72976 if (this.charLength) {
72977 // buffer the incomplete character bytes we got
72978 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
72979 end -= this.charReceived;
72980 }
72981
72982 charStr += buffer.toString(this.encoding, 0, end);
72983
72984 var end = charStr.length - 1;
72985 var charCode = charStr.charCodeAt(end);
72986 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
72987 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
72988 var size = this.surrogateSize;
72989 this.charLength += size;
72990 this.charReceived += size;
72991 this.charBuffer.copy(this.charBuffer, size, 0, size);
72992 buffer.copy(this.charBuffer, 0, 0, size);
72993 return charStr.substring(0, end);
72994 }
72995
72996 // or just emit the charStr
72997 return charStr;
72998 };
72999
73000 // detectIncompleteChar determines if there is an incomplete UTF-8 character at
73001 // the end of the given buffer. If so, it sets this.charLength to the byte
73002 // length that character, and sets this.charReceived to the number of bytes
73003 // that are available for this character.
73004 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
73005 // determine how many bytes we have to check at the end of this buffer
73006 var i = (buffer.length >= 3) ? 3 : buffer.length;
73007
73008 // Figure out if one of the last i bytes of our buffer announces an
73009 // incomplete char.
73010 for (; i > 0; i--) {
73011 var c = buffer[buffer.length - i];
73012
73013 // See http://en.wikipedia.org/wiki/UTF-8#Description
73014
73015 // 110XXXXX
73016 if (i == 1 && c >> 5 == 0x06) {
73017 this.charLength = 2;
73018 break;
73019 }
73020
73021 // 1110XXXX
73022 if (i <= 2 && c >> 4 == 0x0E) {
73023 this.charLength = 3;
73024 break;
73025 }
73026
73027 // 11110XXX
73028 if (i <= 3 && c >> 3 == 0x1E) {
73029 this.charLength = 4;
73030 break;
73031 }
73032 }
73033 this.charReceived = i;
73034 };
73035
73036 StringDecoder.prototype.end = function(buffer) {
73037 var res = '';
73038 if (buffer && buffer.length)
73039 res = this.write(buffer);
73040
73041 if (this.charReceived) {
73042 var cr = this.charReceived;
73043 var buf = this.charBuffer;
73044 var enc = this.encoding;
73045 res += buf.slice(0, cr).toString(enc);
73046 }
73047
73048 return res;
73049 };
73050
73051 function passThroughWrite(buffer) {
73052 return buffer.toString(this.encoding);
73053 }
73054
73055 function utf16DetectIncompleteChar(buffer) {
73056 this.charReceived = buffer.length % 2;
73057 this.charLength = this.charReceived ? 2 : 0;
73058 }
73059
73060 function base64DetectIncompleteChar(buffer) {
73061 this.charReceived = buffer.length % 3;
73062 this.charLength = this.charReceived ? 3 : 0;
73063 }
73064
73065 },{"buffer":47}],145:[function(require,module,exports){
73066 (function (global){
73067
73068 /**
73069 * Module exports.
73070 */
73071
73072 module.exports = deprecate;
73073
73074 /**
73075 * Mark that a method should not be used.
73076 * Returns a modified function which warns once by default.
73077 *
73078 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
73079 *
73080 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
73081 * will throw an Error when invoked.
73082 *
73083 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
73084 * will invoke `console.trace()` instead of `console.error()`.
73085 *
73086 * @param {Function} fn - the function to deprecate
73087 * @param {String} msg - the string to print to the console when `fn` is invoked
73088 * @returns {Function} a new "deprecated" version of `fn`
73089 * @api public
73090 */
73091
73092 function deprecate (fn, msg) {
73093 if (config('noDeprecation')) {
73094 return fn;
73095 }
73096
73097 var warned = false;
73098 function deprecated() {
73099 if (!warned) {
73100 if (config('throwDeprecation')) {
73101 throw new Error(msg);
73102 } else if (config('traceDeprecation')) {
73103 console.trace(msg);
73104 } else {
73105 console.warn(msg);
73106 }
73107 warned = true;
73108 }
73109 return fn.apply(this, arguments);
73110 }
73111
73112 return deprecated;
73113 }
73114
73115 /**
73116 * Checks `localStorage` for boolean values for the given `name`.
73117 *
73118 * @param {String} name
73119 * @returns {Boolean}
73120 * @api private
73121 */
73122
73123 function config (name) {
73124 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
73125 try {
73126 if (!global.localStorage) return false;
73127 } catch (_) {
73128 return false;
73129 }
73130 var val = global.localStorage[name];
73131 if (null == val) return false;
73132 return String(val).toLowerCase() === 'true';
73133 }
73134
73135 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
73136 },{}],146:[function(require,module,exports){
73137 arguments[4][95][0].apply(exports,arguments)
73138 },{"dup":95}],147:[function(require,module,exports){
73139 module.exports = function isBuffer(arg) {
73140 return arg && typeof arg === 'object'
73141 && typeof arg.copy === 'function'
73142 && typeof arg.fill === 'function'
73143 && typeof arg.readUInt8 === 'function';
73144 }
73145 },{}],148:[function(require,module,exports){
73146 (function (process,global){
73147 // Copyright Joyent, Inc. and other Node contributors.
73148 //
73149 // Permission is hereby granted, free of charge, to any person obtaining a
73150 // copy of this software and associated documentation files (the
73151 // "Software"), to deal in the Software without restriction, including
73152 // without limitation the rights to use, copy, modify, merge, publish,
73153 // distribute, sublicense, and/or sell copies of the Software, and to permit
73154 // persons to whom the Software is furnished to do so, subject to the
73155 // following conditions:
73156 //
73157 // The above copyright notice and this permission notice shall be included
73158 // in all copies or substantial portions of the Software.
73159 //
73160 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
73161 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
73162 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
73163 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
73164 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
73165 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
73166 // USE OR OTHER DEALINGS IN THE SOFTWARE.
73167
73168 var formatRegExp = /%[sdj%]/g;
73169 exports.format = function(f) {
73170 if (!isString(f)) {
73171 var objects = [];
73172 for (var i = 0; i < arguments.length; i++) {
73173 objects.push(inspect(arguments[i]));
73174 }
73175 return objects.join(' ');
73176 }
73177
73178 var i = 1;
73179 var args = arguments;
73180 var len = args.length;
73181 var str = String(f).replace(formatRegExp, function(x) {
73182 if (x === '%%') return '%';
73183 if (i >= len) return x;
73184 switch (x) {
73185 case '%s': return String(args[i++]);
73186 case '%d': return Number(args[i++]);
73187 case '%j':
73188 try {
73189 return JSON.stringify(args[i++]);
73190 } catch (_) {
73191 return '[Circular]';
73192 }
73193 default:
73194 return x;
73195 }
73196 });
73197 for (var x = args[i]; i < len; x = args[++i]) {
73198 if (isNull(x) || !isObject(x)) {
73199 str += ' ' + x;
73200 } else {
73201 str += ' ' + inspect(x);
73202 }
73203 }
73204 return str;
73205 };
73206
73207
73208 // Mark that a method should not be used.
73209 // Returns a modified function which warns once by default.
73210 // If --no-deprecation is set, then it is a no-op.
73211 exports.deprecate = function(fn, msg) {
73212 // Allow for deprecating things in the process of starting up.
73213 if (isUndefined(global.process)) {
73214 return function() {
73215 return exports.deprecate(fn, msg).apply(this, arguments);
73216 };
73217 }
73218
73219 if (process.noDeprecation === true) {
73220 return fn;
73221 }
73222
73223 var warned = false;
73224 function deprecated() {
73225 if (!warned) {
73226 if (process.throwDeprecation) {
73227 throw new Error(msg);
73228 } else if (process.traceDeprecation) {
73229 console.trace(msg);
73230 } else {
73231 console.error(msg);
73232 }
73233 warned = true;
73234 }
73235 return fn.apply(this, arguments);
73236 }
73237
73238 return deprecated;
73239 };
73240
73241
73242 var debugs = {};
73243 var debugEnviron;
73244 exports.debuglog = function(set) {
73245 if (isUndefined(debugEnviron))
73246 debugEnviron = process.env.NODE_DEBUG || '';
73247 set = set.toUpperCase();
73248 if (!debugs[set]) {
73249 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
73250 var pid = process.pid;
73251 debugs[set] = function() {
73252 var msg = exports.format.apply(exports, arguments);
73253 console.error('%s %d: %s', set, pid, msg);
73254 };
73255 } else {
73256 debugs[set] = function() {};
73257 }
73258 }
73259 return debugs[set];
73260 };
73261
73262
73263 /**
73264 * Echos the value of a value. Trys to print the value out
73265 * in the best way possible given the different types.
73266 *
73267 * @param {Object} obj The object to print out.
73268 * @param {Object} opts Optional options object that alters the output.
73269 */
73270 /* legacy: obj, showHidden, depth, colors*/
73271 function inspect(obj, opts) {
73272 // default options
73273 var ctx = {
73274 seen: [],
73275 stylize: stylizeNoColor
73276 };
73277 // legacy...
73278 if (arguments.length >= 3) ctx.depth = arguments[2];
73279 if (arguments.length >= 4) ctx.colors = arguments[3];
73280 if (isBoolean(opts)) {
73281 // legacy...
73282 ctx.showHidden = opts;
73283 } else if (opts) {
73284 // got an "options" object
73285 exports._extend(ctx, opts);
73286 }
73287 // set default options
73288 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
73289 if (isUndefined(ctx.depth)) ctx.depth = 2;
73290 if (isUndefined(ctx.colors)) ctx.colors = false;
73291 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
73292 if (ctx.colors) ctx.stylize = stylizeWithColor;
73293 return formatValue(ctx, obj, ctx.depth);
73294 }
73295 exports.inspect = inspect;
73296
73297
73298 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
73299 inspect.colors = {
73300 'bold' : [1, 22],
73301 'italic' : [3, 23],
73302 'underline' : [4, 24],
73303 'inverse' : [7, 27],
73304 'white' : [37, 39],
73305 'grey' : [90, 39],
73306 'black' : [30, 39],
73307 'blue' : [34, 39],
73308 'cyan' : [36, 39],
73309 'green' : [32, 39],
73310 'magenta' : [35, 39],
73311 'red' : [31, 39],
73312 'yellow' : [33, 39]
73313 };
73314
73315 // Don't use 'blue' not visible on cmd.exe
73316 inspect.styles = {
73317 'special': 'cyan',
73318 'number': 'yellow',
73319 'boolean': 'yellow',
73320 'undefined': 'grey',
73321 'null': 'bold',
73322 'string': 'green',
73323 'date': 'magenta',
73324 // "name": intentionally not styling
73325 'regexp': 'red'
73326 };
73327
73328
73329 function stylizeWithColor(str, styleType) {
73330 var style = inspect.styles[styleType];
73331
73332 if (style) {
73333 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
73334 '\u001b[' + inspect.colors[style][1] + 'm';
73335 } else {
73336 return str;
73337 }
73338 }
73339
73340
73341 function stylizeNoColor(str, styleType) {
73342 return str;
73343 }
73344
73345
73346 function arrayToHash(array) {
73347 var hash = {};
73348
73349 array.forEach(function(val, idx) {
73350 hash[val] = true;
73351 });
73352
73353 return hash;
73354 }
73355
73356
73357 function formatValue(ctx, value, recurseTimes) {
73358 // Provide a hook for user-specified inspect functions.
73359 // Check that value is an object with an inspect function on it
73360 if (ctx.customInspect &&
73361 value &&
73362 isFunction(value.inspect) &&
73363 // Filter out the util module, it's inspect function is special
73364 value.inspect !== exports.inspect &&
73365 // Also filter out any prototype objects using the circular check.
73366 !(value.constructor && value.constructor.prototype === value)) {
73367 var ret = value.inspect(recurseTimes, ctx);
73368 if (!isString(ret)) {
73369 ret = formatValue(ctx, ret, recurseTimes);
73370 }
73371 return ret;
73372 }
73373
73374 // Primitive types cannot have properties
73375 var primitive = formatPrimitive(ctx, value);
73376 if (primitive) {
73377 return primitive;
73378 }
73379
73380 // Look up the keys of the object.
73381 var keys = Object.keys(value);
73382 var visibleKeys = arrayToHash(keys);
73383
73384 if (ctx.showHidden) {
73385 keys = Object.getOwnPropertyNames(value);
73386 }
73387
73388 // IE doesn't make error fields non-enumerable
73389 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
73390 if (isError(value)
73391 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
73392 return formatError(value);
73393 }
73394
73395 // Some type of object without properties can be shortcutted.
73396 if (keys.length === 0) {
73397 if (isFunction(value)) {
73398 var name = value.name ? ': ' + value.name : '';
73399 return ctx.stylize('[Function' + name + ']', 'special');
73400 }
73401 if (isRegExp(value)) {
73402 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
73403 }
73404 if (isDate(value)) {
73405 return ctx.stylize(Date.prototype.toString.call(value), 'date');
73406 }
73407 if (isError(value)) {
73408 return formatError(value);
73409 }
73410 }
73411
73412 var base = '', array = false, braces = ['{', '}'];
73413
73414 // Make Array say that they are Array
73415 if (isArray(value)) {
73416 array = true;
73417 braces = ['[', ']'];
73418 }
73419
73420 // Make functions say that they are functions
73421 if (isFunction(value)) {
73422 var n = value.name ? ': ' + value.name : '';
73423 base = ' [Function' + n + ']';
73424 }
73425
73426 // Make RegExps say that they are RegExps
73427 if (isRegExp(value)) {
73428 base = ' ' + RegExp.prototype.toString.call(value);
73429 }
73430
73431 // Make dates with properties first say the date
73432 if (isDate(value)) {
73433 base = ' ' + Date.prototype.toUTCString.call(value);
73434 }
73435
73436 // Make error with message first say the error
73437 if (isError(value)) {
73438 base = ' ' + formatError(value);
73439 }
73440
73441 if (keys.length === 0 && (!array || value.length == 0)) {
73442 return braces[0] + base + braces[1];
73443 }
73444
73445 if (recurseTimes < 0) {
73446 if (isRegExp(value)) {
73447 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
73448 } else {
73449 return ctx.stylize('[Object]', 'special');
73450 }
73451 }
73452
73453 ctx.seen.push(value);
73454
73455 var output;
73456 if (array) {
73457 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
73458 } else {
73459 output = keys.map(function(key) {
73460 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
73461 });
73462 }
73463
73464 ctx.seen.pop();
73465
73466 return reduceToSingleString(output, base, braces);
73467 }
73468
73469
73470 function formatPrimitive(ctx, value) {
73471 if (isUndefined(value))
73472 return ctx.stylize('undefined', 'undefined');
73473 if (isString(value)) {
73474 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
73475 .replace(/'/g, "\\'")
73476 .replace(/\\"/g, '"') + '\'';
73477 return ctx.stylize(simple, 'string');
73478 }
73479 if (isNumber(value))
73480 return ctx.stylize('' + value, 'number');
73481 if (isBoolean(value))
73482 return ctx.stylize('' + value, 'boolean');
73483 // For some reason typeof null is "object", so special case here.
73484 if (isNull(value))
73485 return ctx.stylize('null', 'null');
73486 }
73487
73488
73489 function formatError(value) {
73490 return '[' + Error.prototype.toString.call(value) + ']';
73491 }
73492
73493
73494 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
73495 var output = [];
73496 for (var i = 0, l = value.length; i < l; ++i) {
73497 if (hasOwnProperty(value, String(i))) {
73498 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
73499 String(i), true));
73500 } else {
73501 output.push('');
73502 }
73503 }
73504 keys.forEach(function(key) {
73505 if (!key.match(/^\d+$/)) {
73506 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
73507 key, true));
73508 }
73509 });
73510 return output;
73511 }
73512
73513
73514 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
73515 var name, str, desc;
73516 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
73517 if (desc.get) {
73518 if (desc.set) {
73519 str = ctx.stylize('[Getter/Setter]', 'special');
73520 } else {
73521 str = ctx.stylize('[Getter]', 'special');
73522 }
73523 } else {
73524 if (desc.set) {
73525 str = ctx.stylize('[Setter]', 'special');
73526 }
73527 }
73528 if (!hasOwnProperty(visibleKeys, key)) {
73529 name = '[' + key + ']';
73530 }
73531 if (!str) {
73532 if (ctx.seen.indexOf(desc.value) < 0) {
73533 if (isNull(recurseTimes)) {
73534 str = formatValue(ctx, desc.value, null);
73535 } else {
73536 str = formatValue(ctx, desc.value, recurseTimes - 1);
73537 }
73538 if (str.indexOf('\n') > -1) {
73539 if (array) {
73540 str = str.split('\n').map(function(line) {
73541 return ' ' + line;
73542 }).join('\n').substr(2);
73543 } else {
73544 str = '\n' + str.split('\n').map(function(line) {
73545 return ' ' + line;
73546 }).join('\n');
73547 }
73548 }
73549 } else {
73550 str = ctx.stylize('[Circular]', 'special');
73551 }
73552 }
73553 if (isUndefined(name)) {
73554 if (array && key.match(/^\d+$/)) {
73555 return str;
73556 }
73557 name = JSON.stringify('' + key);
73558 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
73559 name = name.substr(1, name.length - 2);
73560 name = ctx.stylize(name, 'name');
73561 } else {
73562 name = name.replace(/'/g, "\\'")
73563 .replace(/\\"/g, '"')
73564 .replace(/(^"|"$)/g, "'");
73565 name = ctx.stylize(name, 'string');
73566 }
73567 }
73568
73569 return name + ': ' + str;
73570 }
73571
73572
73573 function reduceToSingleString(output, base, braces) {
73574 var numLinesEst = 0;
73575 var length = output.reduce(function(prev, cur) {
73576 numLinesEst++;
73577 if (cur.indexOf('\n') >= 0) numLinesEst++;
73578 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
73579 }, 0);
73580
73581 if (length > 60) {
73582 return braces[0] +
73583 (base === '' ? '' : base + '\n ') +
73584 ' ' +
73585 output.join(',\n ') +
73586 ' ' +
73587 braces[1];
73588 }
73589
73590 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
73591 }
73592
73593
73594 // NOTE: These type checking functions intentionally don't use `instanceof`
73595 // because it is fragile and can be easily faked with `Object.create()`.
73596 function isArray(ar) {
73597 return Array.isArray(ar);
73598 }
73599 exports.isArray = isArray;
73600
73601 function isBoolean(arg) {
73602 return typeof arg === 'boolean';
73603 }
73604 exports.isBoolean = isBoolean;
73605
73606 function isNull(arg) {
73607 return arg === null;
73608 }
73609 exports.isNull = isNull;
73610
73611 function isNullOrUndefined(arg) {
73612 return arg == null;
73613 }
73614 exports.isNullOrUndefined = isNullOrUndefined;
73615
73616 function isNumber(arg) {
73617 return typeof arg === 'number';
73618 }
73619 exports.isNumber = isNumber;
73620
73621 function isString(arg) {
73622 return typeof arg === 'string';
73623 }
73624 exports.isString = isString;
73625
73626 function isSymbol(arg) {
73627 return typeof arg === 'symbol';
73628 }
73629 exports.isSymbol = isSymbol;
73630
73631 function isUndefined(arg) {
73632 return arg === void 0;
73633 }
73634 exports.isUndefined = isUndefined;
73635
73636 function isRegExp(re) {
73637 return isObject(re) && objectToString(re) === '[object RegExp]';
73638 }
73639 exports.isRegExp = isRegExp;
73640
73641 function isObject(arg) {
73642 return typeof arg === 'object' && arg !== null;
73643 }
73644 exports.isObject = isObject;
73645
73646 function isDate(d) {
73647 return isObject(d) && objectToString(d) === '[object Date]';
73648 }
73649 exports.isDate = isDate;
73650
73651 function isError(e) {
73652 return isObject(e) &&
73653 (objectToString(e) === '[object Error]' || e instanceof Error);
73654 }
73655 exports.isError = isError;
73656
73657 function isFunction(arg) {
73658 return typeof arg === 'function';
73659 }
73660 exports.isFunction = isFunction;
73661
73662 function isPrimitive(arg) {
73663 return arg === null ||
73664 typeof arg === 'boolean' ||
73665 typeof arg === 'number' ||
73666 typeof arg === 'string' ||
73667 typeof arg === 'symbol' || // ES6 symbol
73668 typeof arg === 'undefined';
73669 }
73670 exports.isPrimitive = isPrimitive;
73671
73672 exports.isBuffer = require('./support/isBuffer');
73673
73674 function objectToString(o) {
73675 return Object.prototype.toString.call(o);
73676 }
73677
73678
73679 function pad(n) {
73680 return n < 10 ? '0' + n.toString(10) : n.toString(10);
73681 }
73682
73683
73684 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
73685 'Oct', 'Nov', 'Dec'];
73686
73687 // 26 Feb 16:19:34
73688 function timestamp() {
73689 var d = new Date();
73690 var time = [pad(d.getHours()),
73691 pad(d.getMinutes()),
73692 pad(d.getSeconds())].join(':');
73693 return [d.getDate(), months[d.getMonth()], time].join(' ');
73694 }
73695
73696
73697 // log is just a thin wrapper to console.log that prepends a timestamp
73698 exports.log = function() {
73699 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
73700 };
73701
73702
73703 /**
73704 * Inherit the prototype methods from one constructor into another.
73705 *
73706 * The Function.prototype.inherits from lang.js rewritten as a standalone
73707 * function (not on Function.prototype). NOTE: If this file is to be loaded
73708 * during bootstrapping this function needs to be rewritten using some native
73709 * functions as prototype setup using normal JavaScript does not work as
73710 * expected during bootstrapping (see mirror.js in r114903).
73711 *
73712 * @param {function} ctor Constructor function which needs to inherit the
73713 * prototype.
73714 * @param {function} superCtor Constructor function to inherit prototype from.
73715 */
73716 exports.inherits = require('inherits');
73717
73718 exports._extend = function(origin, add) {
73719 // Don't do anything if add isn't an object
73720 if (!add || !isObject(add)) return origin;
73721
73722 var keys = Object.keys(add);
73723 var i = keys.length;
73724 while (i--) {
73725 origin[keys[i]] = add[keys[i]];
73726 }
73727 return origin;
73728 };
73729
73730 function hasOwnProperty(obj, prop) {
73731 return Object.prototype.hasOwnProperty.call(obj, prop);
73732 }
73733
73734 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
73735 },{"./support/isBuffer":147,"_process":112,"inherits":146}],149:[function(require,module,exports){
73736 var indexOf = require('indexof');
73737
73738 var Object_keys = function (obj) {
73739 if (Object.keys) return Object.keys(obj)
73740 else {
73741 var res = [];
73742 for (var key in obj) res.push(key)
73743 return res;
73744 }
73745 };
73746
73747 var forEach = function (xs, fn) {
73748 if (xs.forEach) return xs.forEach(fn)
73749 else for (var i = 0; i < xs.length; i++) {
73750 fn(xs[i], i, xs);
73751 }
73752 };
73753
73754 var defineProp = (function() {
73755 try {
73756 Object.defineProperty({}, '_', {});
73757 return function(obj, name, value) {
73758 Object.defineProperty(obj, name, {
73759 writable: true,
73760 enumerable: false,
73761 configurable: true,
73762 value: value
73763 })
73764 };
73765 } catch(e) {
73766 return function(obj, name, value) {
73767 obj[name] = value;
73768 };
73769 }
73770 }());
73771
73772 var globals = ['Array', 'Boolean', 'Date', 'Error', 'EvalError', 'Function',
73773 'Infinity', 'JSON', 'Math', 'NaN', 'Number', 'Object', 'RangeError',
73774 'ReferenceError', 'RegExp', 'String', 'SyntaxError', 'TypeError', 'URIError',
73775 'decodeURI', 'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape',
73776 'eval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'undefined', 'unescape'];
73777
73778 function Context() {}
73779 Context.prototype = {};
73780
73781 var Script = exports.Script = function NodeScript (code) {
73782 if (!(this instanceof Script)) return new Script(code);
73783 this.code = code;
73784 };
73785
73786 Script.prototype.runInContext = function (context) {
73787 if (!(context instanceof Context)) {
73788 throw new TypeError("needs a 'context' argument.");
73789 }
73790
73791 var iframe = document.createElement('iframe');
73792 if (!iframe.style) iframe.style = {};
73793 iframe.style.display = 'none';
73794
73795 document.body.appendChild(iframe);
73796
73797 var win = iframe.contentWindow;
73798 var wEval = win.eval, wExecScript = win.execScript;
73799
73800 if (!wEval && wExecScript) {
73801 // win.eval() magically appears when this is called in IE:
73802 wExecScript.call(win, 'null');
73803 wEval = win.eval;
73804 }
73805
73806 forEach(Object_keys(context), function (key) {
73807 win[key] = context[key];
73808 });
73809 forEach(globals, function (key) {
73810 if (context[key]) {
73811 win[key] = context[key];
73812 }
73813 });
73814
73815 var winKeys = Object_keys(win);
73816
73817 var res = wEval.call(win, this.code);
73818
73819 forEach(Object_keys(win), function (key) {
73820 // Avoid copying circular objects like `top` and `window` by only
73821 // updating existing context properties or new properties in the `win`
73822 // that was only introduced after the eval.
73823 if (key in context || indexOf(winKeys, key) === -1) {
73824 context[key] = win[key];
73825 }
73826 });
73827
73828 forEach(globals, function (key) {
73829 if (!(key in context)) {
73830 defineProp(context, key, win[key]);
73831 }
73832 });
73833
73834 document.body.removeChild(iframe);
73835
73836 return res;
73837 };
73838
73839 Script.prototype.runInThisContext = function () {
73840 return eval(this.code); // maybe...
73841 };
73842
73843 Script.prototype.runInNewContext = function (context) {
73844 var ctx = Script.createContext(context);
73845 var res = this.runInContext(ctx);
73846
73847 forEach(Object_keys(ctx), function (key) {
73848 context[key] = ctx[key];
73849 });
73850
73851 return res;
73852 };
73853
73854 forEach(Object_keys(Script.prototype), function (name) {
73855 exports[name] = Script[name] = function (code) {
73856 var s = Script(code);
73857 return s[name].apply(s, [].slice.call(arguments, 1));
73858 };
73859 });
73860
73861 exports.createScript = function (code) {
73862 return exports.Script(code);
73863 };
73864
73865 exports.createContext = Script.createContext = function (context) {
73866 var copy = new Context();
73867 if(typeof context === 'object') {
73868 forEach(Object_keys(context), function (key) {
73869 copy[key] = context[key];
73870 });
73871 }
73872 return copy;
73873 };
73874
73875 },{"indexof":94}],150:[function(require,module,exports){
73876 var aes = require('browserify-aes')
73877 var assert = require('assert')
73878 var Buffer = require('safe-buffer').Buffer
73879 var bs58check = require('bs58check')
73880 var createHash = require('create-hash')
73881 var scrypt = require('scryptsy')
73882 var xor = require('buffer-xor/inplace')
73883
73884 var ecurve = require('ecurve')
73885 var curve = ecurve.getCurveByName('secp256k1')
73886
73887 var BigInteger = require('bigi')
73888
73889 // constants
73890 var SCRYPT_PARAMS = {
73891 N: 16384, // specified by BIP38
73892 r: 8,
73893 p: 8
73894 }
73895 var NULL = Buffer.alloc(0)
73896
73897 function hash160 (buffer) {
73898 return createHash('rmd160').update(
73899 createHash('sha256').update(buffer).digest()
73900 ).digest()
73901 }
73902
73903 function hash256 (buffer) {
73904 return createHash('sha256').update(
73905 createHash('sha256').update(buffer).digest()
73906 ).digest()
73907 }
73908
73909 function getAddress (d, compressed) {
73910 var Q = curve.G.multiply(d).getEncoded(compressed)
73911 var hash = hash160(Q)
73912 var payload = Buffer.allocUnsafe(21)
73913 payload.writeUInt8(0x00, 0) // XXX TODO FIXME bitcoin only??? damn you BIP38
73914 hash.copy(payload, 1)
73915
73916 return bs58check.encode(payload)
73917 }
73918
73919 function encryptRaw (buffer, compressed, passphrase, progressCallback, scryptParams) {
73920 if (buffer.length !== 32) throw new Error('Invalid private key length')
73921 scryptParams = scryptParams || SCRYPT_PARAMS
73922
73923 var d = BigInteger.fromBuffer(buffer)
73924 var address = getAddress(d, compressed)
73925 var secret = Buffer.from(passphrase, 'utf8')
73926 var salt = hash256(address).slice(0, 4)
73927
73928 var N = scryptParams.N
73929 var r = scryptParams.r
73930 var p = scryptParams.p
73931
73932 var scryptBuf = scrypt(secret, salt, N, r, p, 64, progressCallback)
73933 var derivedHalf1 = scryptBuf.slice(0, 32)
73934 var derivedHalf2 = scryptBuf.slice(32, 64)
73935
73936 var xorBuf = xor(derivedHalf1, buffer)
73937 var cipher = aes.createCipheriv('aes-256-ecb', derivedHalf2, NULL)
73938 cipher.setAutoPadding(false)
73939 cipher.end(xorBuf)
73940
73941 var cipherText = cipher.read()
73942
73943 // 0x01 | 0x42 | flagByte | salt (4) | cipherText (32)
73944 var result = Buffer.allocUnsafe(7 + 32)
73945 result.writeUInt8(0x01, 0)
73946 result.writeUInt8(0x42, 1)
73947 result.writeUInt8(compressed ? 0xe0 : 0xc0, 2)
73948 salt.copy(result, 3)
73949 cipherText.copy(result, 7)
73950
73951 return result
73952 }
73953
73954 function encrypt (buffer, compressed, passphrase, progressCallback, scryptParams) {
73955 return bs58check.encode(encryptRaw(buffer, compressed, passphrase, progressCallback, scryptParams))
73956 }
73957
73958 // some of the techniques borrowed from: https://github.com/pointbiz/bitaddress.org
73959 function decryptRaw (buffer, passphrase, progressCallback, scryptParams) {
73960 // 39 bytes: 2 bytes prefix, 37 bytes payload
73961 if (buffer.length !== 39) throw new Error('Invalid BIP38 data length')
73962 if (buffer.readUInt8(0) !== 0x01) throw new Error('Invalid BIP38 prefix')
73963 scryptParams = scryptParams || SCRYPT_PARAMS
73964
73965 // check if BIP38 EC multiply
73966 var type = buffer.readUInt8(1)
73967 if (type === 0x43) return decryptECMult(buffer, passphrase, progressCallback, scryptParams)
73968 if (type !== 0x42) throw new Error('Invalid BIP38 type')
73969
73970 passphrase = Buffer.from(passphrase, 'utf8')
73971
73972 var flagByte = buffer.readUInt8(2)
73973 var compressed = flagByte === 0xe0
73974 if (!compressed && flagByte !== 0xc0) throw new Error('Invalid BIP38 compression flag')
73975
73976 var N = scryptParams.N
73977 var r = scryptParams.r
73978 var p = scryptParams.p
73979
73980 var salt = buffer.slice(3, 7)
73981 var scryptBuf = scrypt(passphrase, salt, N, r, p, 64, progressCallback)
73982 var derivedHalf1 = scryptBuf.slice(0, 32)
73983 var derivedHalf2 = scryptBuf.slice(32, 64)
73984
73985 var privKeyBuf = buffer.slice(7, 7 + 32)
73986 var decipher = aes.createDecipheriv('aes-256-ecb', derivedHalf2, NULL)
73987 decipher.setAutoPadding(false)
73988 decipher.end(privKeyBuf)
73989
73990 var plainText = decipher.read()
73991 var privateKey = xor(derivedHalf1, plainText)
73992
73993 // verify salt matches address
73994 var d = BigInteger.fromBuffer(privateKey)
73995 var address = getAddress(d, compressed)
73996 var checksum = hash256(address).slice(0, 4)
73997 assert.deepEqual(salt, checksum)
73998
73999 return {
74000 privateKey: privateKey,
74001 compressed: compressed
74002 }
74003 }
74004
74005 function decrypt (string, passphrase, progressCallback, scryptParams) {
74006 return decryptRaw(bs58check.decode(string), passphrase, progressCallback, scryptParams)
74007 }
74008
74009 function decryptECMult (buffer, passphrase, progressCallback, scryptParams) {
74010 passphrase = Buffer.from(passphrase, 'utf8')
74011 buffer = buffer.slice(1) // FIXME: we can avoid this
74012 scryptParams = scryptParams || SCRYPT_PARAMS
74013
74014 var flag = buffer.readUInt8(1)
74015 var compressed = (flag & 0x20) !== 0
74016 var hasLotSeq = (flag & 0x04) !== 0
74017
74018 assert.equal((flag & 0x24), flag, 'Invalid private key.')
74019
74020 var addressHash = buffer.slice(2, 6)
74021 var ownerEntropy = buffer.slice(6, 14)
74022 var ownerSalt
74023
74024 // 4 bytes ownerSalt if 4 bytes lot/sequence
74025 if (hasLotSeq) {
74026 ownerSalt = ownerEntropy.slice(0, 4)
74027
74028 // else, 8 bytes ownerSalt
74029 } else {
74030 ownerSalt = ownerEntropy
74031 }
74032
74033 var encryptedPart1 = buffer.slice(14, 22) // First 8 bytes
74034 var encryptedPart2 = buffer.slice(22, 38) // 16 bytes
74035
74036 var N = scryptParams.N
74037 var r = scryptParams.r
74038 var p = scryptParams.p
74039 var preFactor = scrypt(passphrase, ownerSalt, N, r, p, 32, progressCallback)
74040
74041 var passFactor
74042 if (hasLotSeq) {
74043 var hashTarget = Buffer.concat([preFactor, ownerEntropy])
74044 passFactor = hash256(hashTarget)
74045 } else {
74046 passFactor = preFactor
74047 }
74048
74049 var passInt = BigInteger.fromBuffer(passFactor)
74050 var passPoint = curve.G.multiply(passInt).getEncoded(true)
74051
74052 var seedBPass = scrypt(passPoint, Buffer.concat([addressHash, ownerEntropy]), 1024, 1, 1, 64)
74053 var derivedHalf1 = seedBPass.slice(0, 32)
74054 var derivedHalf2 = seedBPass.slice(32, 64)
74055
74056 var decipher = aes.createDecipheriv('aes-256-ecb', derivedHalf2, Buffer.alloc(0))
74057 decipher.setAutoPadding(false)
74058 decipher.end(encryptedPart2)
74059
74060 var decryptedPart2 = decipher.read()
74061 var tmp = xor(decryptedPart2, derivedHalf1.slice(16, 32))
74062 var seedBPart2 = tmp.slice(8, 16)
74063
74064 var decipher2 = aes.createDecipheriv('aes-256-ecb', derivedHalf2, Buffer.alloc(0))
74065 decipher2.setAutoPadding(false)
74066 decipher2.write(encryptedPart1) // first 8 bytes
74067 decipher2.end(tmp.slice(0, 8)) // last 8 bytes
74068
74069 var seedBPart1 = xor(decipher2.read(), derivedHalf1.slice(0, 16))
74070 var seedB = Buffer.concat([seedBPart1, seedBPart2], 24)
74071 var factorB = BigInteger.fromBuffer(hash256(seedB))
74072
74073 // d = passFactor * factorB (mod n)
74074 var d = passInt.multiply(factorB).mod(curve.n)
74075
74076 return {
74077 privateKey: d.toBuffer(32),
74078 compressed: compressed
74079 }
74080 }
74081
74082 function verify (string) {
74083 var decoded = bs58check.decodeUnsafe(string)
74084 if (!decoded) return false
74085
74086 if (decoded.length !== 39) return false
74087 if (decoded.readUInt8(0) !== 0x01) return false
74088
74089 var type = decoded.readUInt8(1)
74090 var flag = decoded.readUInt8(2)
74091
74092 // encrypted WIF
74093 if (type === 0x42) {
74094 if (flag !== 0xc0 && flag !== 0xe0) return false
74095
74096 // EC mult
74097 } else if (type === 0x43) {
74098 if ((flag & ~0x24)) return false
74099 } else {
74100 return false
74101 }
74102
74103 return true
74104 }
74105
74106 module.exports = {
74107 decrypt: decrypt,
74108 decryptECMult: decryptECMult,
74109 decryptRaw: decryptRaw,
74110 encrypt: encrypt,
74111 encryptRaw: encryptRaw,
74112 verify: verify
74113 }
74114
74115 },{"assert":15,"bigi":154,"browserify-aes":158,"bs58check":175,"buffer-xor/inplace":177,"create-hash":179,"ecurve":184,"safe-buffer":193,"scryptsy":194}],151:[function(require,module,exports){
74116 // base-x encoding
74117 // Forked from https://github.com/cryptocoinjs/bs58
74118 // Originally written by Mike Hearn for BitcoinJ
74119 // Copyright (c) 2011 Google Inc
74120 // Ported to JavaScript by Stefan Thomas
74121 // Merged Buffer refactorings from base58-native by Stephen Pair
74122 // Copyright (c) 2013 BitPay Inc
74123
74124 var Buffer = require('safe-buffer').Buffer
74125
74126 module.exports = function base (ALPHABET) {
74127 var ALPHABET_MAP = {}
74128 var BASE = ALPHABET.length
74129 var LEADER = ALPHABET.charAt(0)
74130
74131 // pre-compute lookup table
74132 for (var z = 0; z < ALPHABET.length; z++) {
74133 var x = ALPHABET.charAt(z)
74134
74135 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
74136 ALPHABET_MAP[x] = z
74137 }
74138
74139 function encode (source) {
74140 if (source.length === 0) return ''
74141
74142 var digits = [0]
74143 for (var i = 0; i < source.length; ++i) {
74144 for (var j = 0, carry = source[i]; j < digits.length; ++j) {
74145 carry += digits[j] << 8
74146 digits[j] = carry % BASE
74147 carry = (carry / BASE) | 0
74148 }
74149
74150 while (carry > 0) {
74151 digits.push(carry % BASE)
74152 carry = (carry / BASE) | 0
74153 }
74154 }
74155
74156 var string = ''
74157
74158 // deal with leading zeros
74159 for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += LEADER
74160 // convert digits to a string
74161 for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]
74162
74163 return string
74164 }
74165
74166 function decodeUnsafe (string) {
74167 if (typeof string !== 'string') throw new TypeError('Expected String')
74168 if (string.length === 0) return Buffer.allocUnsafe(0)
74169
74170 var bytes = [0]
74171 for (var i = 0; i < string.length; i++) {
74172 var value = ALPHABET_MAP[string[i]]
74173 if (value === undefined) return
74174
74175 for (var j = 0, carry = value; j < bytes.length; ++j) {
74176 carry += bytes[j] * BASE
74177 bytes[j] = carry & 0xff
74178 carry >>= 8
74179 }
74180
74181 while (carry > 0) {
74182 bytes.push(carry & 0xff)
74183 carry >>= 8
74184 }
74185 }
74186
74187 // deal with leading zeros
74188 for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {
74189 bytes.push(0)
74190 }
74191
74192 return Buffer.from(bytes.reverse())
74193 }
74194
74195 function decode (string) {
74196 var buffer = decodeUnsafe(string)
74197 if (buffer) return buffer
74198
74199 throw new Error('Non-base' + BASE + ' character')
74200 }
74201
74202 return {
74203 encode: encode,
74204 decodeUnsafe: decodeUnsafe,
74205 decode: decode
74206 }
74207 }
74208
74209 },{"safe-buffer":193}],152:[function(require,module,exports){
74210 // (public) Constructor
74211 function BigInteger(a, b, c) {
74212 if (!(this instanceof BigInteger))
74213 return new BigInteger(a, b, c)
74214
74215 if (a != null) {
74216 if ("number" == typeof a) this.fromNumber(a, b, c)
74217 else if (b == null && "string" != typeof a) this.fromString(a, 256)
74218 else this.fromString(a, b)
74219 }
74220 }
74221
74222 var proto = BigInteger.prototype
74223
74224 // duck-typed isBigInteger
74225 proto.__bigi = require('../package.json').version
74226 BigInteger.isBigInteger = function (obj, check_ver) {
74227 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
74228 }
74229
74230 // Bits per digit
74231 var dbits
74232
74233 // am: Compute w_j += (x*this_i), propagate carries,
74234 // c is initial carry, returns final carry.
74235 // c < 3*dvalue, x < 2*dvalue, this_i < dvalue
74236 // We need to select the fastest one that works in this environment.
74237
74238 // am1: use a single mult and divide to get the high bits,
74239 // max digit bits should be 26 because
74240 // max internal value = 2*dvalue^2-2*dvalue (< 2^53)
74241 function am1(i, x, w, j, c, n) {
74242 while (--n >= 0) {
74243 var v = x * this[i++] + w[j] + c
74244 c = Math.floor(v / 0x4000000)
74245 w[j++] = v & 0x3ffffff
74246 }
74247 return c
74248 }
74249 // am2 avoids a big mult-and-extract completely.
74250 // Max digit bits should be <= 30 because we do bitwise ops
74251 // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
74252 function am2(i, x, w, j, c, n) {
74253 var xl = x & 0x7fff,
74254 xh = x >> 15
74255 while (--n >= 0) {
74256 var l = this[i] & 0x7fff
74257 var h = this[i++] >> 15
74258 var m = xh * l + h * xl
74259 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
74260 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
74261 w[j++] = l & 0x3fffffff
74262 }
74263 return c
74264 }
74265 // Alternately, set max digit bits to 28 since some
74266 // browsers slow down when dealing with 32-bit numbers.
74267 function am3(i, x, w, j, c, n) {
74268 var xl = x & 0x3fff,
74269 xh = x >> 14
74270 while (--n >= 0) {
74271 var l = this[i] & 0x3fff
74272 var h = this[i++] >> 14
74273 var m = xh * l + h * xl
74274 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
74275 c = (l >> 28) + (m >> 14) + xh * h
74276 w[j++] = l & 0xfffffff
74277 }
74278 return c
74279 }
74280
74281 // wtf?
74282 BigInteger.prototype.am = am1
74283 dbits = 26
74284
74285 BigInteger.prototype.DB = dbits
74286 BigInteger.prototype.DM = ((1 << dbits) - 1)
74287 var DV = BigInteger.prototype.DV = (1 << dbits)
74288
74289 var BI_FP = 52
74290 BigInteger.prototype.FV = Math.pow(2, BI_FP)
74291 BigInteger.prototype.F1 = BI_FP - dbits
74292 BigInteger.prototype.F2 = 2 * dbits - BI_FP
74293
74294 // Digit conversions
74295 var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
74296 var BI_RC = new Array()
74297 var rr, vv
74298 rr = "0".charCodeAt(0)
74299 for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
74300 rr = "a".charCodeAt(0)
74301 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
74302 rr = "A".charCodeAt(0)
74303 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
74304
74305 function int2char(n) {
74306 return BI_RM.charAt(n)
74307 }
74308
74309 function intAt(s, i) {
74310 var c = BI_RC[s.charCodeAt(i)]
74311 return (c == null) ? -1 : c
74312 }
74313
74314 // (protected) copy this to r
74315 function bnpCopyTo(r) {
74316 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
74317 r.t = this.t
74318 r.s = this.s
74319 }
74320
74321 // (protected) set from integer value x, -DV <= x < DV
74322 function bnpFromInt(x) {
74323 this.t = 1
74324 this.s = (x < 0) ? -1 : 0
74325 if (x > 0) this[0] = x
74326 else if (x < -1) this[0] = x + DV
74327 else this.t = 0
74328 }
74329
74330 // return bigint initialized to value
74331 function nbv(i) {
74332 var r = new BigInteger()
74333 r.fromInt(i)
74334 return r
74335 }
74336
74337 // (protected) set from string and radix
74338 function bnpFromString(s, b) {
74339 var self = this
74340
74341 var k
74342 if (b == 16) k = 4
74343 else if (b == 8) k = 3
74344 else if (b == 256) k = 8; // byte array
74345 else if (b == 2) k = 1
74346 else if (b == 32) k = 5
74347 else if (b == 4) k = 2
74348 else {
74349 self.fromRadix(s, b)
74350 return
74351 }
74352 self.t = 0
74353 self.s = 0
74354 var i = s.length,
74355 mi = false,
74356 sh = 0
74357 while (--i >= 0) {
74358 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
74359 if (x < 0) {
74360 if (s.charAt(i) == "-") mi = true
74361 continue
74362 }
74363 mi = false
74364 if (sh == 0)
74365 self[self.t++] = x
74366 else if (sh + k > self.DB) {
74367 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
74368 self[self.t++] = (x >> (self.DB - sh))
74369 } else
74370 self[self.t - 1] |= x << sh
74371 sh += k
74372 if (sh >= self.DB) sh -= self.DB
74373 }
74374 if (k == 8 && (s[0] & 0x80) != 0) {
74375 self.s = -1
74376 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
74377 }
74378 self.clamp()
74379 if (mi) BigInteger.ZERO.subTo(self, self)
74380 }
74381
74382 // (protected) clamp off excess high words
74383 function bnpClamp() {
74384 var c = this.s & this.DM
74385 while (this.t > 0 && this[this.t - 1] == c)--this.t
74386 }
74387
74388 // (public) return string representation in given radix
74389 function bnToString(b) {
74390 var self = this
74391 if (self.s < 0) return "-" + self.negate()
74392 .toString(b)
74393 var k
74394 if (b == 16) k = 4
74395 else if (b == 8) k = 3
74396 else if (b == 2) k = 1
74397 else if (b == 32) k = 5
74398 else if (b == 4) k = 2
74399 else return self.toRadix(b)
74400 var km = (1 << k) - 1,
74401 d, m = false,
74402 r = "",
74403 i = self.t
74404 var p = self.DB - (i * self.DB) % k
74405 if (i-- > 0) {
74406 if (p < self.DB && (d = self[i] >> p) > 0) {
74407 m = true
74408 r = int2char(d)
74409 }
74410 while (i >= 0) {
74411 if (p < k) {
74412 d = (self[i] & ((1 << p) - 1)) << (k - p)
74413 d |= self[--i] >> (p += self.DB - k)
74414 } else {
74415 d = (self[i] >> (p -= k)) & km
74416 if (p <= 0) {
74417 p += self.DB
74418 --i
74419 }
74420 }
74421 if (d > 0) m = true
74422 if (m) r += int2char(d)
74423 }
74424 }
74425 return m ? r : "0"
74426 }
74427
74428 // (public) -this
74429 function bnNegate() {
74430 var r = new BigInteger()
74431 BigInteger.ZERO.subTo(this, r)
74432 return r
74433 }
74434
74435 // (public) |this|
74436 function bnAbs() {
74437 return (this.s < 0) ? this.negate() : this
74438 }
74439
74440 // (public) return + if this > a, - if this < a, 0 if equal
74441 function bnCompareTo(a) {
74442 var r = this.s - a.s
74443 if (r != 0) return r
74444 var i = this.t
74445 r = i - a.t
74446 if (r != 0) return (this.s < 0) ? -r : r
74447 while (--i >= 0)
74448 if ((r = this[i] - a[i]) != 0) return r
74449 return 0
74450 }
74451
74452 // returns bit length of the integer x
74453 function nbits(x) {
74454 var r = 1,
74455 t
74456 if ((t = x >>> 16) != 0) {
74457 x = t
74458 r += 16
74459 }
74460 if ((t = x >> 8) != 0) {
74461 x = t
74462 r += 8
74463 }
74464 if ((t = x >> 4) != 0) {
74465 x = t
74466 r += 4
74467 }
74468 if ((t = x >> 2) != 0) {
74469 x = t
74470 r += 2
74471 }
74472 if ((t = x >> 1) != 0) {
74473 x = t
74474 r += 1
74475 }
74476 return r
74477 }
74478
74479 // (public) return the number of bits in "this"
74480 function bnBitLength() {
74481 if (this.t <= 0) return 0
74482 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
74483 }
74484
74485 // (public) return the number of bytes in "this"
74486 function bnByteLength() {
74487 return this.bitLength() >> 3
74488 }
74489
74490 // (protected) r = this << n*DB
74491 function bnpDLShiftTo(n, r) {
74492 var i
74493 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
74494 for (i = n - 1; i >= 0; --i) r[i] = 0
74495 r.t = this.t + n
74496 r.s = this.s
74497 }
74498
74499 // (protected) r = this >> n*DB
74500 function bnpDRShiftTo(n, r) {
74501 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
74502 r.t = Math.max(this.t - n, 0)
74503 r.s = this.s
74504 }
74505
74506 // (protected) r = this << n
74507 function bnpLShiftTo(n, r) {
74508 var self = this
74509 var bs = n % self.DB
74510 var cbs = self.DB - bs
74511 var bm = (1 << cbs) - 1
74512 var ds = Math.floor(n / self.DB),
74513 c = (self.s << bs) & self.DM,
74514 i
74515 for (i = self.t - 1; i >= 0; --i) {
74516 r[i + ds + 1] = (self[i] >> cbs) | c
74517 c = (self[i] & bm) << bs
74518 }
74519 for (i = ds - 1; i >= 0; --i) r[i] = 0
74520 r[ds] = c
74521 r.t = self.t + ds + 1
74522 r.s = self.s
74523 r.clamp()
74524 }
74525
74526 // (protected) r = this >> n
74527 function bnpRShiftTo(n, r) {
74528 var self = this
74529 r.s = self.s
74530 var ds = Math.floor(n / self.DB)
74531 if (ds >= self.t) {
74532 r.t = 0
74533 return
74534 }
74535 var bs = n % self.DB
74536 var cbs = self.DB - bs
74537 var bm = (1 << bs) - 1
74538 r[0] = self[ds] >> bs
74539 for (var i = ds + 1; i < self.t; ++i) {
74540 r[i - ds - 1] |= (self[i] & bm) << cbs
74541 r[i - ds] = self[i] >> bs
74542 }
74543 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
74544 r.t = self.t - ds
74545 r.clamp()
74546 }
74547
74548 // (protected) r = this - a
74549 function bnpSubTo(a, r) {
74550 var self = this
74551 var i = 0,
74552 c = 0,
74553 m = Math.min(a.t, self.t)
74554 while (i < m) {
74555 c += self[i] - a[i]
74556 r[i++] = c & self.DM
74557 c >>= self.DB
74558 }
74559 if (a.t < self.t) {
74560 c -= a.s
74561 while (i < self.t) {
74562 c += self[i]
74563 r[i++] = c & self.DM
74564 c >>= self.DB
74565 }
74566 c += self.s
74567 } else {
74568 c += self.s
74569 while (i < a.t) {
74570 c -= a[i]
74571 r[i++] = c & self.DM
74572 c >>= self.DB
74573 }
74574 c -= a.s
74575 }
74576 r.s = (c < 0) ? -1 : 0
74577 if (c < -1) r[i++] = self.DV + c
74578 else if (c > 0) r[i++] = c
74579 r.t = i
74580 r.clamp()
74581 }
74582
74583 // (protected) r = this * a, r != this,a (HAC 14.12)
74584 // "this" should be the larger one if appropriate.
74585 function bnpMultiplyTo(a, r) {
74586 var x = this.abs(),
74587 y = a.abs()
74588 var i = x.t
74589 r.t = i + y.t
74590 while (--i >= 0) r[i] = 0
74591 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
74592 r.s = 0
74593 r.clamp()
74594 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
74595 }
74596
74597 // (protected) r = this^2, r != this (HAC 14.16)
74598 function bnpSquareTo(r) {
74599 var x = this.abs()
74600 var i = r.t = 2 * x.t
74601 while (--i >= 0) r[i] = 0
74602 for (i = 0; i < x.t - 1; ++i) {
74603 var c = x.am(i, x[i], r, 2 * i, 0, 1)
74604 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
74605 r[i + x.t] -= x.DV
74606 r[i + x.t + 1] = 1
74607 }
74608 }
74609 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
74610 r.s = 0
74611 r.clamp()
74612 }
74613
74614 // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
74615 // r != q, this != m. q or r may be null.
74616 function bnpDivRemTo(m, q, r) {
74617 var self = this
74618 var pm = m.abs()
74619 if (pm.t <= 0) return
74620 var pt = self.abs()
74621 if (pt.t < pm.t) {
74622 if (q != null) q.fromInt(0)
74623 if (r != null) self.copyTo(r)
74624 return
74625 }
74626 if (r == null) r = new BigInteger()
74627 var y = new BigInteger(),
74628 ts = self.s,
74629 ms = m.s
74630 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
74631 if (nsh > 0) {
74632 pm.lShiftTo(nsh, y)
74633 pt.lShiftTo(nsh, r)
74634 } else {
74635 pm.copyTo(y)
74636 pt.copyTo(r)
74637 }
74638 var ys = y.t
74639 var y0 = y[ys - 1]
74640 if (y0 == 0) return
74641 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
74642 var d1 = self.FV / yt,
74643 d2 = (1 << self.F1) / yt,
74644 e = 1 << self.F2
74645 var i = r.t,
74646 j = i - ys,
74647 t = (q == null) ? new BigInteger() : q
74648 y.dlShiftTo(j, t)
74649 if (r.compareTo(t) >= 0) {
74650 r[r.t++] = 1
74651 r.subTo(t, r)
74652 }
74653 BigInteger.ONE.dlShiftTo(ys, t)
74654 t.subTo(y, y); // "negative" y so we can replace sub with am later
74655 while (y.t < ys) y[y.t++] = 0
74656 while (--j >= 0) {
74657 // Estimate quotient digit
74658 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
74659 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
74660 y.dlShiftTo(j, t)
74661 r.subTo(t, r)
74662 while (r[i] < --qd) r.subTo(t, r)
74663 }
74664 }
74665 if (q != null) {
74666 r.drShiftTo(ys, q)
74667 if (ts != ms) BigInteger.ZERO.subTo(q, q)
74668 }
74669 r.t = ys
74670 r.clamp()
74671 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
74672 if (ts < 0) BigInteger.ZERO.subTo(r, r)
74673 }
74674
74675 // (public) this mod a
74676 function bnMod(a) {
74677 var r = new BigInteger()
74678 this.abs()
74679 .divRemTo(a, null, r)
74680 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
74681 return r
74682 }
74683
74684 // Modular reduction using "classic" algorithm
74685 function Classic(m) {
74686 this.m = m
74687 }
74688
74689 function cConvert(x) {
74690 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
74691 else return x
74692 }
74693
74694 function cRevert(x) {
74695 return x
74696 }
74697
74698 function cReduce(x) {
74699 x.divRemTo(this.m, null, x)
74700 }
74701
74702 function cMulTo(x, y, r) {
74703 x.multiplyTo(y, r)
74704 this.reduce(r)
74705 }
74706
74707 function cSqrTo(x, r) {
74708 x.squareTo(r)
74709 this.reduce(r)
74710 }
74711
74712 Classic.prototype.convert = cConvert
74713 Classic.prototype.revert = cRevert
74714 Classic.prototype.reduce = cReduce
74715 Classic.prototype.mulTo = cMulTo
74716 Classic.prototype.sqrTo = cSqrTo
74717
74718 // (protected) return "-1/this % 2^DB"; useful for Mont. reduction
74719 // justification:
74720 // xy == 1 (mod m)
74721 // xy = 1+km
74722 // xy(2-xy) = (1+km)(1-km)
74723 // x[y(2-xy)] = 1-k^2m^2
74724 // x[y(2-xy)] == 1 (mod m^2)
74725 // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
74726 // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
74727 // JS multiply "overflows" differently from C/C++, so care is needed here.
74728 function bnpInvDigit() {
74729 if (this.t < 1) return 0
74730 var x = this[0]
74731 if ((x & 1) == 0) return 0
74732 var y = x & 3; // y == 1/x mod 2^2
74733 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
74734 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
74735 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
74736 // last step - calculate inverse mod DV directly
74737 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
74738 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
74739 // we really want the negative inverse, and -DV < y < DV
74740 return (y > 0) ? this.DV - y : -y
74741 }
74742
74743 // Montgomery reduction
74744 function Montgomery(m) {
74745 this.m = m
74746 this.mp = m.invDigit()
74747 this.mpl = this.mp & 0x7fff
74748 this.mph = this.mp >> 15
74749 this.um = (1 << (m.DB - 15)) - 1
74750 this.mt2 = 2 * m.t
74751 }
74752
74753 // xR mod m
74754 function montConvert(x) {
74755 var r = new BigInteger()
74756 x.abs()
74757 .dlShiftTo(this.m.t, r)
74758 r.divRemTo(this.m, null, r)
74759 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
74760 return r
74761 }
74762
74763 // x/R mod m
74764 function montRevert(x) {
74765 var r = new BigInteger()
74766 x.copyTo(r)
74767 this.reduce(r)
74768 return r
74769 }
74770
74771 // x = x/R mod m (HAC 14.32)
74772 function montReduce(x) {
74773 while (x.t <= this.mt2) // pad x so am has enough room later
74774 x[x.t++] = 0
74775 for (var i = 0; i < this.m.t; ++i) {
74776 // faster way of calculating u0 = x[i]*mp mod DV
74777 var j = x[i] & 0x7fff
74778 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
74779 // use am to combine the multiply-shift-add into one call
74780 j = i + this.m.t
74781 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
74782 // propagate carry
74783 while (x[j] >= x.DV) {
74784 x[j] -= x.DV
74785 x[++j]++
74786 }
74787 }
74788 x.clamp()
74789 x.drShiftTo(this.m.t, x)
74790 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
74791 }
74792
74793 // r = "x^2/R mod m"; x != r
74794 function montSqrTo(x, r) {
74795 x.squareTo(r)
74796 this.reduce(r)
74797 }
74798
74799 // r = "xy/R mod m"; x,y != r
74800 function montMulTo(x, y, r) {
74801 x.multiplyTo(y, r)
74802 this.reduce(r)
74803 }
74804
74805 Montgomery.prototype.convert = montConvert
74806 Montgomery.prototype.revert = montRevert
74807 Montgomery.prototype.reduce = montReduce
74808 Montgomery.prototype.mulTo = montMulTo
74809 Montgomery.prototype.sqrTo = montSqrTo
74810
74811 // (protected) true iff this is even
74812 function bnpIsEven() {
74813 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
74814 }
74815
74816 // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
74817 function bnpExp(e, z) {
74818 if (e > 0xffffffff || e < 1) return BigInteger.ONE
74819 var r = new BigInteger(),
74820 r2 = new BigInteger(),
74821 g = z.convert(this),
74822 i = nbits(e) - 1
74823 g.copyTo(r)
74824 while (--i >= 0) {
74825 z.sqrTo(r, r2)
74826 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
74827 else {
74828 var t = r
74829 r = r2
74830 r2 = t
74831 }
74832 }
74833 return z.revert(r)
74834 }
74835
74836 // (public) this^e % m, 0 <= e < 2^32
74837 function bnModPowInt(e, m) {
74838 var z
74839 if (e < 256 || m.isEven()) z = new Classic(m)
74840 else z = new Montgomery(m)
74841 return this.exp(e, z)
74842 }
74843
74844 // protected
74845 proto.copyTo = bnpCopyTo
74846 proto.fromInt = bnpFromInt
74847 proto.fromString = bnpFromString
74848 proto.clamp = bnpClamp
74849 proto.dlShiftTo = bnpDLShiftTo
74850 proto.drShiftTo = bnpDRShiftTo
74851 proto.lShiftTo = bnpLShiftTo
74852 proto.rShiftTo = bnpRShiftTo
74853 proto.subTo = bnpSubTo
74854 proto.multiplyTo = bnpMultiplyTo
74855 proto.squareTo = bnpSquareTo
74856 proto.divRemTo = bnpDivRemTo
74857 proto.invDigit = bnpInvDigit
74858 proto.isEven = bnpIsEven
74859 proto.exp = bnpExp
74860
74861 // public
74862 proto.toString = bnToString
74863 proto.negate = bnNegate
74864 proto.abs = bnAbs
74865 proto.compareTo = bnCompareTo
74866 proto.bitLength = bnBitLength
74867 proto.byteLength = bnByteLength
74868 proto.mod = bnMod
74869 proto.modPowInt = bnModPowInt
74870
74871 // (public)
74872 function bnClone() {
74873 var r = new BigInteger()
74874 this.copyTo(r)
74875 return r
74876 }
74877
74878 // (public) return value as integer
74879 function bnIntValue() {
74880 if (this.s < 0) {
74881 if (this.t == 1) return this[0] - this.DV
74882 else if (this.t == 0) return -1
74883 } else if (this.t == 1) return this[0]
74884 else if (this.t == 0) return 0
74885 // assumes 16 < DB < 32
74886 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
74887 }
74888
74889 // (public) return value as byte
74890 function bnByteValue() {
74891 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
74892 }
74893
74894 // (public) return value as short (assumes DB>=16)
74895 function bnShortValue() {
74896 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
74897 }
74898
74899 // (protected) return x s.t. r^x < DV
74900 function bnpChunkSize(r) {
74901 return Math.floor(Math.LN2 * this.DB / Math.log(r))
74902 }
74903
74904 // (public) 0 if this == 0, 1 if this > 0
74905 function bnSigNum() {
74906 if (this.s < 0) return -1
74907 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
74908 else return 1
74909 }
74910
74911 // (protected) convert to radix string
74912 function bnpToRadix(b) {
74913 if (b == null) b = 10
74914 if (this.signum() == 0 || b < 2 || b > 36) return "0"
74915 var cs = this.chunkSize(b)
74916 var a = Math.pow(b, cs)
74917 var d = nbv(a),
74918 y = new BigInteger(),
74919 z = new BigInteger(),
74920 r = ""
74921 this.divRemTo(d, y, z)
74922 while (y.signum() > 0) {
74923 r = (a + z.intValue())
74924 .toString(b)
74925 .substr(1) + r
74926 y.divRemTo(d, y, z)
74927 }
74928 return z.intValue()
74929 .toString(b) + r
74930 }
74931
74932 // (protected) convert from radix string
74933 function bnpFromRadix(s, b) {
74934 var self = this
74935 self.fromInt(0)
74936 if (b == null) b = 10
74937 var cs = self.chunkSize(b)
74938 var d = Math.pow(b, cs),
74939 mi = false,
74940 j = 0,
74941 w = 0
74942 for (var i = 0; i < s.length; ++i) {
74943 var x = intAt(s, i)
74944 if (x < 0) {
74945 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
74946 continue
74947 }
74948 w = b * w + x
74949 if (++j >= cs) {
74950 self.dMultiply(d)
74951 self.dAddOffset(w, 0)
74952 j = 0
74953 w = 0
74954 }
74955 }
74956 if (j > 0) {
74957 self.dMultiply(Math.pow(b, j))
74958 self.dAddOffset(w, 0)
74959 }
74960 if (mi) BigInteger.ZERO.subTo(self, self)
74961 }
74962
74963 // (protected) alternate constructor
74964 function bnpFromNumber(a, b, c) {
74965 var self = this
74966 if ("number" == typeof b) {
74967 // new BigInteger(int,int,RNG)
74968 if (a < 2) self.fromInt(1)
74969 else {
74970 self.fromNumber(a, c)
74971 if (!self.testBit(a - 1)) // force MSB set
74972 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
74973 if (self.isEven()) self.dAddOffset(1, 0); // force odd
74974 while (!self.isProbablePrime(b)) {
74975 self.dAddOffset(2, 0)
74976 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
74977 }
74978 }
74979 } else {
74980 // new BigInteger(int,RNG)
74981 var x = new Array(),
74982 t = a & 7
74983 x.length = (a >> 3) + 1
74984 b.nextBytes(x)
74985 if (t > 0) x[0] &= ((1 << t) - 1)
74986 else x[0] = 0
74987 self.fromString(x, 256)
74988 }
74989 }
74990
74991 // (public) convert to bigendian byte array
74992 function bnToByteArray() {
74993 var self = this
74994 var i = self.t,
74995 r = new Array()
74996 r[0] = self.s
74997 var p = self.DB - (i * self.DB) % 8,
74998 d, k = 0
74999 if (i-- > 0) {
75000 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
75001 r[k++] = d | (self.s << (self.DB - p))
75002 while (i >= 0) {
75003 if (p < 8) {
75004 d = (self[i] & ((1 << p) - 1)) << (8 - p)
75005 d |= self[--i] >> (p += self.DB - 8)
75006 } else {
75007 d = (self[i] >> (p -= 8)) & 0xff
75008 if (p <= 0) {
75009 p += self.DB
75010 --i
75011 }
75012 }
75013 if ((d & 0x80) != 0) d |= -256
75014 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
75015 if (k > 0 || d != self.s) r[k++] = d
75016 }
75017 }
75018 return r
75019 }
75020
75021 function bnEquals(a) {
75022 return (this.compareTo(a) == 0)
75023 }
75024
75025 function bnMin(a) {
75026 return (this.compareTo(a) < 0) ? this : a
75027 }
75028
75029 function bnMax(a) {
75030 return (this.compareTo(a) > 0) ? this : a
75031 }
75032
75033 // (protected) r = this op a (bitwise)
75034 function bnpBitwiseTo(a, op, r) {
75035 var self = this
75036 var i, f, m = Math.min(a.t, self.t)
75037 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
75038 if (a.t < self.t) {
75039 f = a.s & self.DM
75040 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
75041 r.t = self.t
75042 } else {
75043 f = self.s & self.DM
75044 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
75045 r.t = a.t
75046 }
75047 r.s = op(self.s, a.s)
75048 r.clamp()
75049 }
75050
75051 // (public) this & a
75052 function op_and(x, y) {
75053 return x & y
75054 }
75055
75056 function bnAnd(a) {
75057 var r = new BigInteger()
75058 this.bitwiseTo(a, op_and, r)
75059 return r
75060 }
75061
75062 // (public) this | a
75063 function op_or(x, y) {
75064 return x | y
75065 }
75066
75067 function bnOr(a) {
75068 var r = new BigInteger()
75069 this.bitwiseTo(a, op_or, r)
75070 return r
75071 }
75072
75073 // (public) this ^ a
75074 function op_xor(x, y) {
75075 return x ^ y
75076 }
75077
75078 function bnXor(a) {
75079 var r = new BigInteger()
75080 this.bitwiseTo(a, op_xor, r)
75081 return r
75082 }
75083
75084 // (public) this & ~a
75085 function op_andnot(x, y) {
75086 return x & ~y
75087 }
75088
75089 function bnAndNot(a) {
75090 var r = new BigInteger()
75091 this.bitwiseTo(a, op_andnot, r)
75092 return r
75093 }
75094
75095 // (public) ~this
75096 function bnNot() {
75097 var r = new BigInteger()
75098 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
75099 r.t = this.t
75100 r.s = ~this.s
75101 return r
75102 }
75103
75104 // (public) this << n
75105 function bnShiftLeft(n) {
75106 var r = new BigInteger()
75107 if (n < 0) this.rShiftTo(-n, r)
75108 else this.lShiftTo(n, r)
75109 return r
75110 }
75111
75112 // (public) this >> n
75113 function bnShiftRight(n) {
75114 var r = new BigInteger()
75115 if (n < 0) this.lShiftTo(-n, r)
75116 else this.rShiftTo(n, r)
75117 return r
75118 }
75119
75120 // return index of lowest 1-bit in x, x < 2^31
75121 function lbit(x) {
75122 if (x == 0) return -1
75123 var r = 0
75124 if ((x & 0xffff) == 0) {
75125 x >>= 16
75126 r += 16
75127 }
75128 if ((x & 0xff) == 0) {
75129 x >>= 8
75130 r += 8
75131 }
75132 if ((x & 0xf) == 0) {
75133 x >>= 4
75134 r += 4
75135 }
75136 if ((x & 3) == 0) {
75137 x >>= 2
75138 r += 2
75139 }
75140 if ((x & 1) == 0)++r
75141 return r
75142 }
75143
75144 // (public) returns index of lowest 1-bit (or -1 if none)
75145 function bnGetLowestSetBit() {
75146 for (var i = 0; i < this.t; ++i)
75147 if (this[i] != 0) return i * this.DB + lbit(this[i])
75148 if (this.s < 0) return this.t * this.DB
75149 return -1
75150 }
75151
75152 // return number of 1 bits in x
75153 function cbit(x) {
75154 var r = 0
75155 while (x != 0) {
75156 x &= x - 1
75157 ++r
75158 }
75159 return r
75160 }
75161
75162 // (public) return number of set bits
75163 function bnBitCount() {
75164 var r = 0,
75165 x = this.s & this.DM
75166 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
75167 return r
75168 }
75169
75170 // (public) true iff nth bit is set
75171 function bnTestBit(n) {
75172 var j = Math.floor(n / this.DB)
75173 if (j >= this.t) return (this.s != 0)
75174 return ((this[j] & (1 << (n % this.DB))) != 0)
75175 }
75176
75177 // (protected) this op (1<<n)
75178 function bnpChangeBit(n, op) {
75179 var r = BigInteger.ONE.shiftLeft(n)
75180 this.bitwiseTo(r, op, r)
75181 return r
75182 }
75183
75184 // (public) this | (1<<n)
75185 function bnSetBit(n) {
75186 return this.changeBit(n, op_or)
75187 }
75188
75189 // (public) this & ~(1<<n)
75190 function bnClearBit(n) {
75191 return this.changeBit(n, op_andnot)
75192 }
75193
75194 // (public) this ^ (1<<n)
75195 function bnFlipBit(n) {
75196 return this.changeBit(n, op_xor)
75197 }
75198
75199 // (protected) r = this + a
75200 function bnpAddTo(a, r) {
75201 var self = this
75202
75203 var i = 0,
75204 c = 0,
75205 m = Math.min(a.t, self.t)
75206 while (i < m) {
75207 c += self[i] + a[i]
75208 r[i++] = c & self.DM
75209 c >>= self.DB
75210 }
75211 if (a.t < self.t) {
75212 c += a.s
75213 while (i < self.t) {
75214 c += self[i]
75215 r[i++] = c & self.DM
75216 c >>= self.DB
75217 }
75218 c += self.s
75219 } else {
75220 c += self.s
75221 while (i < a.t) {
75222 c += a[i]
75223 r[i++] = c & self.DM
75224 c >>= self.DB
75225 }
75226 c += a.s
75227 }
75228 r.s = (c < 0) ? -1 : 0
75229 if (c > 0) r[i++] = c
75230 else if (c < -1) r[i++] = self.DV + c
75231 r.t = i
75232 r.clamp()
75233 }
75234
75235 // (public) this + a
75236 function bnAdd(a) {
75237 var r = new BigInteger()
75238 this.addTo(a, r)
75239 return r
75240 }
75241
75242 // (public) this - a
75243 function bnSubtract(a) {
75244 var r = new BigInteger()
75245 this.subTo(a, r)
75246 return r
75247 }
75248
75249 // (public) this * a
75250 function bnMultiply(a) {
75251 var r = new BigInteger()
75252 this.multiplyTo(a, r)
75253 return r
75254 }
75255
75256 // (public) this^2
75257 function bnSquare() {
75258 var r = new BigInteger()
75259 this.squareTo(r)
75260 return r
75261 }
75262
75263 // (public) this / a
75264 function bnDivide(a) {
75265 var r = new BigInteger()
75266 this.divRemTo(a, r, null)
75267 return r
75268 }
75269
75270 // (public) this % a
75271 function bnRemainder(a) {
75272 var r = new BigInteger()
75273 this.divRemTo(a, null, r)
75274 return r
75275 }
75276
75277 // (public) [this/a,this%a]
75278 function bnDivideAndRemainder(a) {
75279 var q = new BigInteger(),
75280 r = new BigInteger()
75281 this.divRemTo(a, q, r)
75282 return new Array(q, r)
75283 }
75284
75285 // (protected) this *= n, this >= 0, 1 < n < DV
75286 function bnpDMultiply(n) {
75287 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
75288 ++this.t
75289 this.clamp()
75290 }
75291
75292 // (protected) this += n << w words, this >= 0
75293 function bnpDAddOffset(n, w) {
75294 if (n == 0) return
75295 while (this.t <= w) this[this.t++] = 0
75296 this[w] += n
75297 while (this[w] >= this.DV) {
75298 this[w] -= this.DV
75299 if (++w >= this.t) this[this.t++] = 0
75300 ++this[w]
75301 }
75302 }
75303
75304 // A "null" reducer
75305 function NullExp() {}
75306
75307 function nNop(x) {
75308 return x
75309 }
75310
75311 function nMulTo(x, y, r) {
75312 x.multiplyTo(y, r)
75313 }
75314
75315 function nSqrTo(x, r) {
75316 x.squareTo(r)
75317 }
75318
75319 NullExp.prototype.convert = nNop
75320 NullExp.prototype.revert = nNop
75321 NullExp.prototype.mulTo = nMulTo
75322 NullExp.prototype.sqrTo = nSqrTo
75323
75324 // (public) this^e
75325 function bnPow(e) {
75326 return this.exp(e, new NullExp())
75327 }
75328
75329 // (protected) r = lower n words of "this * a", a.t <= n
75330 // "this" should be the larger one if appropriate.
75331 function bnpMultiplyLowerTo(a, n, r) {
75332 var i = Math.min(this.t + a.t, n)
75333 r.s = 0; // assumes a,this >= 0
75334 r.t = i
75335 while (i > 0) r[--i] = 0
75336 var j
75337 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
75338 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
75339 r.clamp()
75340 }
75341
75342 // (protected) r = "this * a" without lower n words, n > 0
75343 // "this" should be the larger one if appropriate.
75344 function bnpMultiplyUpperTo(a, n, r) {
75345 --n
75346 var i = r.t = this.t + a.t - n
75347 r.s = 0; // assumes a,this >= 0
75348 while (--i >= 0) r[i] = 0
75349 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
75350 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
75351 r.clamp()
75352 r.drShiftTo(1, r)
75353 }
75354
75355 // Barrett modular reduction
75356 function Barrett(m) {
75357 // setup Barrett
75358 this.r2 = new BigInteger()
75359 this.q3 = new BigInteger()
75360 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
75361 this.mu = this.r2.divide(m)
75362 this.m = m
75363 }
75364
75365 function barrettConvert(x) {
75366 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
75367 else if (x.compareTo(this.m) < 0) return x
75368 else {
75369 var r = new BigInteger()
75370 x.copyTo(r)
75371 this.reduce(r)
75372 return r
75373 }
75374 }
75375
75376 function barrettRevert(x) {
75377 return x
75378 }
75379
75380 // x = x mod m (HAC 14.42)
75381 function barrettReduce(x) {
75382 var self = this
75383 x.drShiftTo(self.m.t - 1, self.r2)
75384 if (x.t > self.m.t + 1) {
75385 x.t = self.m.t + 1
75386 x.clamp()
75387 }
75388 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
75389 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
75390 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
75391 x.subTo(self.r2, x)
75392 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
75393 }
75394
75395 // r = x^2 mod m; x != r
75396 function barrettSqrTo(x, r) {
75397 x.squareTo(r)
75398 this.reduce(r)
75399 }
75400
75401 // r = x*y mod m; x,y != r
75402 function barrettMulTo(x, y, r) {
75403 x.multiplyTo(y, r)
75404 this.reduce(r)
75405 }
75406
75407 Barrett.prototype.convert = barrettConvert
75408 Barrett.prototype.revert = barrettRevert
75409 Barrett.prototype.reduce = barrettReduce
75410 Barrett.prototype.mulTo = barrettMulTo
75411 Barrett.prototype.sqrTo = barrettSqrTo
75412
75413 // (public) this^e % m (HAC 14.85)
75414 function bnModPow(e, m) {
75415 var i = e.bitLength(),
75416 k, r = nbv(1),
75417 z
75418 if (i <= 0) return r
75419 else if (i < 18) k = 1
75420 else if (i < 48) k = 3
75421 else if (i < 144) k = 4
75422 else if (i < 768) k = 5
75423 else k = 6
75424 if (i < 8)
75425 z = new Classic(m)
75426 else if (m.isEven())
75427 z = new Barrett(m)
75428 else
75429 z = new Montgomery(m)
75430
75431 // precomputation
75432 var g = new Array(),
75433 n = 3,
75434 k1 = k - 1,
75435 km = (1 << k) - 1
75436 g[1] = z.convert(this)
75437 if (k > 1) {
75438 var g2 = new BigInteger()
75439 z.sqrTo(g[1], g2)
75440 while (n <= km) {
75441 g[n] = new BigInteger()
75442 z.mulTo(g2, g[n - 2], g[n])
75443 n += 2
75444 }
75445 }
75446
75447 var j = e.t - 1,
75448 w, is1 = true,
75449 r2 = new BigInteger(),
75450 t
75451 i = nbits(e[j]) - 1
75452 while (j >= 0) {
75453 if (i >= k1) w = (e[j] >> (i - k1)) & km
75454 else {
75455 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
75456 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
75457 }
75458
75459 n = k
75460 while ((w & 1) == 0) {
75461 w >>= 1
75462 --n
75463 }
75464 if ((i -= n) < 0) {
75465 i += this.DB
75466 --j
75467 }
75468 if (is1) { // ret == 1, don't bother squaring or multiplying it
75469 g[w].copyTo(r)
75470 is1 = false
75471 } else {
75472 while (n > 1) {
75473 z.sqrTo(r, r2)
75474 z.sqrTo(r2, r)
75475 n -= 2
75476 }
75477 if (n > 0) z.sqrTo(r, r2)
75478 else {
75479 t = r
75480 r = r2
75481 r2 = t
75482 }
75483 z.mulTo(r2, g[w], r)
75484 }
75485
75486 while (j >= 0 && (e[j] & (1 << i)) == 0) {
75487 z.sqrTo(r, r2)
75488 t = r
75489 r = r2
75490 r2 = t
75491 if (--i < 0) {
75492 i = this.DB - 1
75493 --j
75494 }
75495 }
75496 }
75497 return z.revert(r)
75498 }
75499
75500 // (public) gcd(this,a) (HAC 14.54)
75501 function bnGCD(a) {
75502 var x = (this.s < 0) ? this.negate() : this.clone()
75503 var y = (a.s < 0) ? a.negate() : a.clone()
75504 if (x.compareTo(y) < 0) {
75505 var t = x
75506 x = y
75507 y = t
75508 }
75509 var i = x.getLowestSetBit(),
75510 g = y.getLowestSetBit()
75511 if (g < 0) return x
75512 if (i < g) g = i
75513 if (g > 0) {
75514 x.rShiftTo(g, x)
75515 y.rShiftTo(g, y)
75516 }
75517 while (x.signum() > 0) {
75518 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
75519 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
75520 if (x.compareTo(y) >= 0) {
75521 x.subTo(y, x)
75522 x.rShiftTo(1, x)
75523 } else {
75524 y.subTo(x, y)
75525 y.rShiftTo(1, y)
75526 }
75527 }
75528 if (g > 0) y.lShiftTo(g, y)
75529 return y
75530 }
75531
75532 // (protected) this % n, n < 2^26
75533 function bnpModInt(n) {
75534 if (n <= 0) return 0
75535 var d = this.DV % n,
75536 r = (this.s < 0) ? n - 1 : 0
75537 if (this.t > 0)
75538 if (d == 0) r = this[0] % n
75539 else
75540 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
75541 return r
75542 }
75543
75544 // (public) 1/this % m (HAC 14.61)
75545 function bnModInverse(m) {
75546 var ac = m.isEven()
75547 if (this.signum() === 0) throw new Error('division by zero')
75548 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
75549 var u = m.clone(),
75550 v = this.clone()
75551 var a = nbv(1),
75552 b = nbv(0),
75553 c = nbv(0),
75554 d = nbv(1)
75555 while (u.signum() != 0) {
75556 while (u.isEven()) {
75557 u.rShiftTo(1, u)
75558 if (ac) {
75559 if (!a.isEven() || !b.isEven()) {
75560 a.addTo(this, a)
75561 b.subTo(m, b)
75562 }
75563 a.rShiftTo(1, a)
75564 } else if (!b.isEven()) b.subTo(m, b)
75565 b.rShiftTo(1, b)
75566 }
75567 while (v.isEven()) {
75568 v.rShiftTo(1, v)
75569 if (ac) {
75570 if (!c.isEven() || !d.isEven()) {
75571 c.addTo(this, c)
75572 d.subTo(m, d)
75573 }
75574 c.rShiftTo(1, c)
75575 } else if (!d.isEven()) d.subTo(m, d)
75576 d.rShiftTo(1, d)
75577 }
75578 if (u.compareTo(v) >= 0) {
75579 u.subTo(v, u)
75580 if (ac) a.subTo(c, a)
75581 b.subTo(d, b)
75582 } else {
75583 v.subTo(u, v)
75584 if (ac) c.subTo(a, c)
75585 d.subTo(b, d)
75586 }
75587 }
75588 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
75589 while (d.compareTo(m) >= 0) d.subTo(m, d)
75590 while (d.signum() < 0) d.addTo(m, d)
75591 return d
75592 }
75593
75594 var lowprimes = [
75595 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
75596 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
75597 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
75598 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
75599 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
75600 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
75601 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
75602 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
75603 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
75604 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
75605 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
75606 ]
75607
75608 var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
75609
75610 // (public) test primality with certainty >= 1-.5^t
75611 function bnIsProbablePrime(t) {
75612 var i, x = this.abs()
75613 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
75614 for (i = 0; i < lowprimes.length; ++i)
75615 if (x[0] == lowprimes[i]) return true
75616 return false
75617 }
75618 if (x.isEven()) return false
75619 i = 1
75620 while (i < lowprimes.length) {
75621 var m = lowprimes[i],
75622 j = i + 1
75623 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
75624 m = x.modInt(m)
75625 while (i < j) if (m % lowprimes[i++] == 0) return false
75626 }
75627 return x.millerRabin(t)
75628 }
75629
75630 // (protected) true if probably prime (HAC 4.24, Miller-Rabin)
75631 function bnpMillerRabin(t) {
75632 var n1 = this.subtract(BigInteger.ONE)
75633 var k = n1.getLowestSetBit()
75634 if (k <= 0) return false
75635 var r = n1.shiftRight(k)
75636 t = (t + 1) >> 1
75637 if (t > lowprimes.length) t = lowprimes.length
75638 var a = new BigInteger(null)
75639 var j, bases = []
75640 for (var i = 0; i < t; ++i) {
75641 for (;;) {
75642 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
75643 if (bases.indexOf(j) == -1) break
75644 }
75645 bases.push(j)
75646 a.fromInt(j)
75647 var y = a.modPow(r, this)
75648 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
75649 var j = 1
75650 while (j++ < k && y.compareTo(n1) != 0) {
75651 y = y.modPowInt(2, this)
75652 if (y.compareTo(BigInteger.ONE) == 0) return false
75653 }
75654 if (y.compareTo(n1) != 0) return false
75655 }
75656 }
75657 return true
75658 }
75659
75660 // protected
75661 proto.chunkSize = bnpChunkSize
75662 proto.toRadix = bnpToRadix
75663 proto.fromRadix = bnpFromRadix
75664 proto.fromNumber = bnpFromNumber
75665 proto.bitwiseTo = bnpBitwiseTo
75666 proto.changeBit = bnpChangeBit
75667 proto.addTo = bnpAddTo
75668 proto.dMultiply = bnpDMultiply
75669 proto.dAddOffset = bnpDAddOffset
75670 proto.multiplyLowerTo = bnpMultiplyLowerTo
75671 proto.multiplyUpperTo = bnpMultiplyUpperTo
75672 proto.modInt = bnpModInt
75673 proto.millerRabin = bnpMillerRabin
75674
75675 // public
75676 proto.clone = bnClone
75677 proto.intValue = bnIntValue
75678 proto.byteValue = bnByteValue
75679 proto.shortValue = bnShortValue
75680 proto.signum = bnSigNum
75681 proto.toByteArray = bnToByteArray
75682 proto.equals = bnEquals
75683 proto.min = bnMin
75684 proto.max = bnMax
75685 proto.and = bnAnd
75686 proto.or = bnOr
75687 proto.xor = bnXor
75688 proto.andNot = bnAndNot
75689 proto.not = bnNot
75690 proto.shiftLeft = bnShiftLeft
75691 proto.shiftRight = bnShiftRight
75692 proto.getLowestSetBit = bnGetLowestSetBit
75693 proto.bitCount = bnBitCount
75694 proto.testBit = bnTestBit
75695 proto.setBit = bnSetBit
75696 proto.clearBit = bnClearBit
75697 proto.flipBit = bnFlipBit
75698 proto.add = bnAdd
75699 proto.subtract = bnSubtract
75700 proto.multiply = bnMultiply
75701 proto.divide = bnDivide
75702 proto.remainder = bnRemainder
75703 proto.divideAndRemainder = bnDivideAndRemainder
75704 proto.modPow = bnModPow
75705 proto.modInverse = bnModInverse
75706 proto.pow = bnPow
75707 proto.gcd = bnGCD
75708 proto.isProbablePrime = bnIsProbablePrime
75709
75710 // JSBN-specific extension
75711 proto.square = bnSquare
75712
75713 // constants
75714 BigInteger.ZERO = nbv(0)
75715 BigInteger.ONE = nbv(1)
75716 BigInteger.valueOf = nbv
75717
75718 module.exports = BigInteger
75719
75720 },{"../package.json":155}],153:[function(require,module,exports){
75721 (function (Buffer){
75722 // FIXME: Kind of a weird way to throw exceptions, consider removing
75723 var assert = require('assert')
75724 var BigInteger = require('./bigi')
75725
75726 /**
75727 * Turns a byte array into a big integer.
75728 *
75729 * This function will interpret a byte array as a big integer in big
75730 * endian notation.
75731 */
75732 BigInteger.fromByteArrayUnsigned = function(byteArray) {
75733 // BigInteger expects a DER integer conformant byte array
75734 if (byteArray[0] & 0x80) {
75735 return new BigInteger([0].concat(byteArray))
75736 }
75737
75738 return new BigInteger(byteArray)
75739 }
75740
75741 /**
75742 * Returns a byte array representation of the big integer.
75743 *
75744 * This returns the absolute of the contained value in big endian
75745 * form. A value of zero results in an empty array.
75746 */
75747 BigInteger.prototype.toByteArrayUnsigned = function() {
75748 var byteArray = this.toByteArray()
75749 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
75750 }
75751
75752 BigInteger.fromDERInteger = function(byteArray) {
75753 return new BigInteger(byteArray)
75754 }
75755
75756 /*
75757 * Converts BigInteger to a DER integer representation.
75758 *
75759 * The format for this value uses the most significant bit as a sign
75760 * bit. If the most significant bit is already set and the integer is
75761 * positive, a 0x00 is prepended.
75762 *
75763 * Examples:
75764 *
75765 * 0 => 0x00
75766 * 1 => 0x01
75767 * -1 => 0xff
75768 * 127 => 0x7f
75769 * -127 => 0x81
75770 * 128 => 0x0080
75771 * -128 => 0x80
75772 * 255 => 0x00ff
75773 * -255 => 0xff01
75774 * 16300 => 0x3fac
75775 * -16300 => 0xc054
75776 * 62300 => 0x00f35c
75777 * -62300 => 0xff0ca4
75778 */
75779 BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
75780
75781 BigInteger.fromBuffer = function(buffer) {
75782 // BigInteger expects a DER integer conformant byte array
75783 if (buffer[0] & 0x80) {
75784 var byteArray = Array.prototype.slice.call(buffer)
75785
75786 return new BigInteger([0].concat(byteArray))
75787 }
75788
75789 return new BigInteger(buffer)
75790 }
75791
75792 BigInteger.fromHex = function(hex) {
75793 if (hex === '') return BigInteger.ZERO
75794
75795 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
75796 assert.equal(hex.length % 2, 0, 'Incomplete hex')
75797 return new BigInteger(hex, 16)
75798 }
75799
75800 BigInteger.prototype.toBuffer = function(size) {
75801 var byteArray = this.toByteArrayUnsigned()
75802 var zeros = []
75803
75804 var padding = size - byteArray.length
75805 while (zeros.length < padding) zeros.push(0)
75806
75807 return new Buffer(zeros.concat(byteArray))
75808 }
75809
75810 BigInteger.prototype.toHex = function(size) {
75811 return this.toBuffer(size).toString('hex')
75812 }
75813
75814 }).call(this,require("buffer").Buffer)
75815 },{"./bigi":152,"assert":15,"buffer":47}],154:[function(require,module,exports){
75816 var BigInteger = require('./bigi')
75817
75818 //addons
75819 require('./convert')
75820
75821 module.exports = BigInteger
75822 },{"./bigi":152,"./convert":153}],155:[function(require,module,exports){
75823 module.exports={
75824 "_args": [
75825 [
75826 "bigi@^1.2.0",
75827 "/home/ian/git/bitcoin/bitcoinjs-bip38"
75828 ]
75829 ],
75830 "_from": "bigi@>=1.2.0 <2.0.0",
75831 "_id": "bigi@1.4.2",
75832 "_inCache": true,
75833 "_installable": true,
75834 "_location": "/bigi",
75835 "_nodeVersion": "6.1.0",
75836 "_npmOperationalInternal": {
75837 "host": "packages-12-west.internal.npmjs.com",
75838 "tmp": "tmp/bigi-1.4.2.tgz_1469584192413_0.6801238611806184"
75839 },
75840 "_npmUser": {
75841 "email": "jprichardson@gmail.com",
75842 "name": "jprichardson"
75843 },
75844 "_npmVersion": "3.8.6",
75845 "_phantomChildren": {},
75846 "_requested": {
75847 "name": "bigi",
75848 "raw": "bigi@^1.2.0",
75849 "rawSpec": "^1.2.0",
75850 "scope": null,
75851 "spec": ">=1.2.0 <2.0.0",
75852 "type": "range"
75853 },
75854 "_requiredBy": [
75855 "/",
75856 "/ecurve"
75857 ],
75858 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz",
75859 "_shasum": "9c665a95f88b8b08fc05cfd731f561859d725825",
75860 "_shrinkwrap": null,
75861 "_spec": "bigi@^1.2.0",
75862 "_where": "/home/ian/git/bitcoin/bitcoinjs-bip38",
75863 "bugs": {
75864 "url": "https://github.com/cryptocoinjs/bigi/issues"
75865 },
75866 "dependencies": {},
75867 "description": "Big integers.",
75868 "devDependencies": {
75869 "coveralls": "^2.11.2",
75870 "istanbul": "^0.3.5",
75871 "jshint": "^2.5.1",
75872 "mocha": "^2.1.0",
75873 "mochify": "^2.1.0"
75874 },
75875 "directories": {},
75876 "dist": {
75877 "shasum": "9c665a95f88b8b08fc05cfd731f561859d725825",
75878 "tarball": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz"
75879 },
75880 "gitHead": "c25308081c896ff84702303722bf5ecd8b3f78e3",
75881 "homepage": "https://github.com/cryptocoinjs/bigi#readme",
75882 "keywords": [
75883 "cryptography",
75884 "math",
75885 "bitcoin",
75886 "arbitrary",
75887 "precision",
75888 "arithmetic",
75889 "big",
75890 "integer",
75891 "int",
75892 "number",
75893 "biginteger",
75894 "bigint",
75895 "bignumber",
75896 "decimal",
75897 "float"
75898 ],
75899 "main": "./lib/index.js",
75900 "maintainers": [
75901 {
75902 "email": "boydb@midnightdesign.ws",
75903 "name": "midnightlightning"
75904 },
75905 {
75906 "email": "sidazhang89@gmail.com",
75907 "name": "sidazhang"
75908 },
75909 {
75910 "email": "npm@shesek.info",
75911 "name": "nadav"
75912 },
75913 {
75914 "email": "jprichardson@gmail.com",
75915 "name": "jprichardson"
75916 }
75917 ],
75918 "name": "bigi",
75919 "optionalDependencies": {},
75920 "readme": "ERROR: No README data found!",
75921 "repository": {
75922 "type": "git",
75923 "url": "git+https://github.com/cryptocoinjs/bigi.git"
75924 },
75925 "scripts": {
75926 "browser-test": "mochify --wd -R spec",
75927 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
75928 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info",
75929 "jshint": "jshint --config jshint.json lib/*.js ; true",
75930 "test": "_mocha -- test/*.js",
75931 "unit": "mocha"
75932 },
75933 "testling": {
75934 "browsers": [
75935 "ie/9..latest",
75936 "firefox/latest",
75937 "chrome/latest",
75938 "safari/6.0..latest",
75939 "iphone/6.0..latest",
75940 "android-browser/4.2..latest"
75941 ],
75942 "files": "test/*.js",
75943 "harness": "mocha"
75944 },
75945 "version": "1.4.2"
75946 }
75947
75948 },{}],156:[function(require,module,exports){
75949 // based on the aes implimentation in triple sec
75950 // https://github.com/keybase/triplesec
75951 // which is in turn based on the one from crypto-js
75952 // https://code.google.com/p/crypto-js/
75953
75954 var Buffer = require('safe-buffer').Buffer
75955
75956 function asUInt32Array (buf) {
75957 if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)
75958
75959 var len = (buf.length / 4) | 0
75960 var out = new Array(len)
75961
75962 for (var i = 0; i < len; i++) {
75963 out[i] = buf.readUInt32BE(i * 4)
75964 }
75965
75966 return out
75967 }
75968
75969 function scrubVec (v) {
75970 for (var i = 0; i < v.length; v++) {
75971 v[i] = 0
75972 }
75973 }
75974
75975 function cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) {
75976 var SUB_MIX0 = SUB_MIX[0]
75977 var SUB_MIX1 = SUB_MIX[1]
75978 var SUB_MIX2 = SUB_MIX[2]
75979 var SUB_MIX3 = SUB_MIX[3]
75980
75981 var s0 = M[0] ^ keySchedule[0]
75982 var s1 = M[1] ^ keySchedule[1]
75983 var s2 = M[2] ^ keySchedule[2]
75984 var s3 = M[3] ^ keySchedule[3]
75985 var t0, t1, t2, t3
75986 var ksRow = 4
75987
75988 for (var round = 1; round < nRounds; round++) {
75989 t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]
75990 t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]
75991 t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]
75992 t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]
75993 s0 = t0
75994 s1 = t1
75995 s2 = t2
75996 s3 = t3
75997 }
75998
75999 t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]
76000 t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]
76001 t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]
76002 t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]
76003 t0 = t0 >>> 0
76004 t1 = t1 >>> 0
76005 t2 = t2 >>> 0
76006 t3 = t3 >>> 0
76007
76008 return [t0, t1, t2, t3]
76009 }
76010
76011 // AES constants
76012 var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]
76013 var G = (function () {
76014 // Compute double table
76015 var d = new Array(256)
76016 for (var j = 0; j < 256; j++) {
76017 if (j < 128) {
76018 d[j] = j << 1
76019 } else {
76020 d[j] = (j << 1) ^ 0x11b
76021 }
76022 }
76023
76024 var SBOX = []
76025 var INV_SBOX = []
76026 var SUB_MIX = [[], [], [], []]
76027 var INV_SUB_MIX = [[], [], [], []]
76028
76029 // Walk GF(2^8)
76030 var x = 0
76031 var xi = 0
76032 for (var i = 0; i < 256; ++i) {
76033 // Compute sbox
76034 var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)
76035 sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63
76036 SBOX[x] = sx
76037 INV_SBOX[sx] = x
76038
76039 // Compute multiplication
76040 var x2 = d[x]
76041 var x4 = d[x2]
76042 var x8 = d[x4]
76043
76044 // Compute sub bytes, mix columns tables
76045 var t = (d[sx] * 0x101) ^ (sx * 0x1010100)
76046 SUB_MIX[0][x] = (t << 24) | (t >>> 8)
76047 SUB_MIX[1][x] = (t << 16) | (t >>> 16)
76048 SUB_MIX[2][x] = (t << 8) | (t >>> 24)
76049 SUB_MIX[3][x] = t
76050
76051 // Compute inv sub bytes, inv mix columns tables
76052 t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)
76053 INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)
76054 INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)
76055 INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)
76056 INV_SUB_MIX[3][sx] = t
76057
76058 if (x === 0) {
76059 x = xi = 1
76060 } else {
76061 x = x2 ^ d[d[d[x8 ^ x2]]]
76062 xi ^= d[d[xi]]
76063 }
76064 }
76065
76066 return {
76067 SBOX: SBOX,
76068 INV_SBOX: INV_SBOX,
76069 SUB_MIX: SUB_MIX,
76070 INV_SUB_MIX: INV_SUB_MIX
76071 }
76072 })()
76073
76074 function AES (key) {
76075 this._key = asUInt32Array(key)
76076 this._reset()
76077 }
76078
76079 AES.blockSize = 4 * 4
76080 AES.keySize = 256 / 8
76081 AES.prototype.blockSize = AES.blockSize
76082 AES.prototype.keySize = AES.keySize
76083 AES.prototype._reset = function () {
76084 var keyWords = this._key
76085 var keySize = keyWords.length
76086 var nRounds = keySize + 6
76087 var ksRows = (nRounds + 1) * 4
76088
76089 var keySchedule = []
76090 for (var k = 0; k < keySize; k++) {
76091 keySchedule[k] = keyWords[k]
76092 }
76093
76094 for (k = keySize; k < ksRows; k++) {
76095 var t = keySchedule[k - 1]
76096
76097 if (k % keySize === 0) {
76098 t = (t << 8) | (t >>> 24)
76099 t =
76100 (G.SBOX[t >>> 24] << 24) |
76101 (G.SBOX[(t >>> 16) & 0xff] << 16) |
76102 (G.SBOX[(t >>> 8) & 0xff] << 8) |
76103 (G.SBOX[t & 0xff])
76104
76105 t ^= RCON[(k / keySize) | 0] << 24
76106 } else if (keySize > 6 && k % keySize === 4) {
76107 t =
76108 (G.SBOX[t >>> 24] << 24) |
76109 (G.SBOX[(t >>> 16) & 0xff] << 16) |
76110 (G.SBOX[(t >>> 8) & 0xff] << 8) |
76111 (G.SBOX[t & 0xff])
76112 }
76113
76114 keySchedule[k] = keySchedule[k - keySize] ^ t
76115 }
76116
76117 var invKeySchedule = []
76118 for (var ik = 0; ik < ksRows; ik++) {
76119 var ksR = ksRows - ik
76120 var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]
76121
76122 if (ik < 4 || ksR <= 4) {
76123 invKeySchedule[ik] = tt
76124 } else {
76125 invKeySchedule[ik] =
76126 G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^
76127 G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^
76128 G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^
76129 G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]
76130 }
76131 }
76132
76133 this._nRounds = nRounds
76134 this._keySchedule = keySchedule
76135 this._invKeySchedule = invKeySchedule
76136 }
76137
76138 AES.prototype.encryptBlockRaw = function (M) {
76139 M = asUInt32Array(M)
76140 return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds)
76141 }
76142
76143 AES.prototype.encryptBlock = function (M) {
76144 var out = this.encryptBlockRaw(M)
76145 var buf = Buffer.allocUnsafe(16)
76146 buf.writeUInt32BE(out[0], 0)
76147 buf.writeUInt32BE(out[1], 4)
76148 buf.writeUInt32BE(out[2], 8)
76149 buf.writeUInt32BE(out[3], 12)
76150 return buf
76151 }
76152
76153 AES.prototype.decryptBlock = function (M) {
76154 M = asUInt32Array(M)
76155
76156 // swap
76157 var m1 = M[1]
76158 M[1] = M[3]
76159 M[3] = m1
76160
76161 var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds)
76162 var buf = Buffer.allocUnsafe(16)
76163 buf.writeUInt32BE(out[0], 0)
76164 buf.writeUInt32BE(out[3], 4)
76165 buf.writeUInt32BE(out[2], 8)
76166 buf.writeUInt32BE(out[1], 12)
76167 return buf
76168 }
76169
76170 AES.prototype.scrub = function () {
76171 scrubVec(this._keySchedule)
76172 scrubVec(this._invKeySchedule)
76173 scrubVec(this._key)
76174 }
76175
76176 module.exports.AES = AES
76177
76178 },{"safe-buffer":193}],157:[function(require,module,exports){
76179 var aes = require('./aes')
76180 var Buffer = require('safe-buffer').Buffer
76181 var Transform = require('cipher-base')
76182 var inherits = require('inherits')
76183 var GHASH = require('./ghash')
76184 var xor = require('buffer-xor')
76185 var incr32 = require('./incr32')
76186
76187 function xorTest (a, b) {
76188 var out = 0
76189 if (a.length !== b.length) out++
76190
76191 var len = Math.min(a.length, b.length)
76192 for (var i = 0; i < len; ++i) {
76193 out += (a[i] ^ b[i])
76194 }
76195
76196 return out
76197 }
76198
76199 function calcIv (self, iv, ck) {
76200 if (iv.length === 12) {
76201 self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])])
76202 return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])])
76203 }
76204 var ghash = new GHASH(ck)
76205 var len = iv.length
76206 var toPad = len % 16
76207 ghash.update(iv)
76208 if (toPad) {
76209 toPad = 16 - toPad
76210 ghash.update(Buffer.alloc(toPad, 0))
76211 }
76212 ghash.update(Buffer.alloc(8, 0))
76213 var ivBits = len * 8
76214 var tail = Buffer.alloc(8)
76215 tail.writeUIntBE(ivBits, 0, 8)
76216 ghash.update(tail)
76217 self._finID = ghash.state
76218 var out = Buffer.from(self._finID)
76219 incr32(out)
76220 return out
76221 }
76222 function StreamCipher (mode, key, iv, decrypt) {
76223 Transform.call(this)
76224
76225 var h = Buffer.alloc(4, 0)
76226
76227 this._cipher = new aes.AES(key)
76228 var ck = this._cipher.encryptBlock(h)
76229 this._ghash = new GHASH(ck)
76230 iv = calcIv(this, iv, ck)
76231
76232 this._prev = Buffer.from(iv)
76233 this._cache = Buffer.allocUnsafe(0)
76234 this._secCache = Buffer.allocUnsafe(0)
76235 this._decrypt = decrypt
76236 this._alen = 0
76237 this._len = 0
76238 this._mode = mode
76239
76240 this._authTag = null
76241 this._called = false
76242 }
76243
76244 inherits(StreamCipher, Transform)
76245
76246 StreamCipher.prototype._update = function (chunk) {
76247 if (!this._called && this._alen) {
76248 var rump = 16 - (this._alen % 16)
76249 if (rump < 16) {
76250 rump = Buffer.alloc(rump, 0)
76251 this._ghash.update(rump)
76252 }
76253 }
76254
76255 this._called = true
76256 var out = this._mode.encrypt(this, chunk)
76257 if (this._decrypt) {
76258 this._ghash.update(chunk)
76259 } else {
76260 this._ghash.update(out)
76261 }
76262 this._len += chunk.length
76263 return out
76264 }
76265
76266 StreamCipher.prototype._final = function () {
76267 if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data')
76268
76269 var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))
76270 if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data')
76271
76272 this._authTag = tag
76273 this._cipher.scrub()
76274 }
76275
76276 StreamCipher.prototype.getAuthTag = function getAuthTag () {
76277 if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state')
76278
76279 return this._authTag
76280 }
76281
76282 StreamCipher.prototype.setAuthTag = function setAuthTag (tag) {
76283 if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state')
76284
76285 this._authTag = tag
76286 }
76287
76288 StreamCipher.prototype.setAAD = function setAAD (buf) {
76289 if (this._called) throw new Error('Attempting to set AAD in unsupported state')
76290
76291 this._ghash.update(buf)
76292 this._alen += buf.length
76293 }
76294
76295 module.exports = StreamCipher
76296
76297 },{"./aes":156,"./ghash":161,"./incr32":162,"buffer-xor":176,"cipher-base":178,"inherits":189,"safe-buffer":193}],158:[function(require,module,exports){
76298 var ciphers = require('./encrypter')
76299 var deciphers = require('./decrypter')
76300 var modes = require('./modes/list.json')
76301
76302 function getCiphers () {
76303 return Object.keys(modes)
76304 }
76305
76306 exports.createCipher = exports.Cipher = ciphers.createCipher
76307 exports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv
76308 exports.createDecipher = exports.Decipher = deciphers.createDecipher
76309 exports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv
76310 exports.listCiphers = exports.getCiphers = getCiphers
76311
76312 },{"./decrypter":159,"./encrypter":160,"./modes/list.json":170}],159:[function(require,module,exports){
76313 var AuthCipher = require('./authCipher')
76314 var Buffer = require('safe-buffer').Buffer
76315 var MODES = require('./modes')
76316 var StreamCipher = require('./streamCipher')
76317 var Transform = require('cipher-base')
76318 var aes = require('./aes')
76319 var ebtk = require('evp_bytestokey')
76320 var inherits = require('inherits')
76321
76322 function Decipher (mode, key, iv) {
76323 Transform.call(this)
76324
76325 this._cache = new Splitter()
76326 this._last = void 0
76327 this._cipher = new aes.AES(key)
76328 this._prev = Buffer.from(iv)
76329 this._mode = mode
76330 this._autopadding = true
76331 }
76332
76333 inherits(Decipher, Transform)
76334
76335 Decipher.prototype._update = function (data) {
76336 this._cache.add(data)
76337 var chunk
76338 var thing
76339 var out = []
76340 while ((chunk = this._cache.get(this._autopadding))) {
76341 thing = this._mode.decrypt(this, chunk)
76342 out.push(thing)
76343 }
76344 return Buffer.concat(out)
76345 }
76346
76347 Decipher.prototype._final = function () {
76348 var chunk = this._cache.flush()
76349 if (this._autopadding) {
76350 return unpad(this._mode.decrypt(this, chunk))
76351 } else if (chunk) {
76352 throw new Error('data not multiple of block length')
76353 }
76354 }
76355
76356 Decipher.prototype.setAutoPadding = function (setTo) {
76357 this._autopadding = !!setTo
76358 return this
76359 }
76360
76361 function Splitter () {
76362 this.cache = Buffer.allocUnsafe(0)
76363 }
76364
76365 Splitter.prototype.add = function (data) {
76366 this.cache = Buffer.concat([this.cache, data])
76367 }
76368
76369 Splitter.prototype.get = function (autoPadding) {
76370 var out
76371 if (autoPadding) {
76372 if (this.cache.length > 16) {
76373 out = this.cache.slice(0, 16)
76374 this.cache = this.cache.slice(16)
76375 return out
76376 }
76377 } else {
76378 if (this.cache.length >= 16) {
76379 out = this.cache.slice(0, 16)
76380 this.cache = this.cache.slice(16)
76381 return out
76382 }
76383 }
76384
76385 return null
76386 }
76387
76388 Splitter.prototype.flush = function () {
76389 if (this.cache.length) return this.cache
76390 }
76391
76392 function unpad (last) {
76393 var padded = last[15]
76394 var i = -1
76395 while (++i < padded) {
76396 if (last[(i + (16 - padded))] !== padded) {
76397 throw new Error('unable to decrypt data')
76398 }
76399 }
76400 if (padded === 16) return
76401
76402 return last.slice(0, 16 - padded)
76403 }
76404
76405 function createDecipheriv (suite, password, iv) {
76406 var config = MODES[suite.toLowerCase()]
76407 if (!config) throw new TypeError('invalid suite type')
76408
76409 if (typeof iv === 'string') iv = Buffer.from(iv)
76410 if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)
76411
76412 if (typeof password === 'string') password = Buffer.from(password)
76413 if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)
76414
76415 if (config.type === 'stream') {
76416 return new StreamCipher(config.module, password, iv, true)
76417 } else if (config.type === 'auth') {
76418 return new AuthCipher(config.module, password, iv, true)
76419 }
76420
76421 return new Decipher(config.module, password, iv)
76422 }
76423
76424 function createDecipher (suite, password) {
76425 var config = MODES[suite.toLowerCase()]
76426 if (!config) throw new TypeError('invalid suite type')
76427
76428 var keys = ebtk(password, false, config.key, config.iv)
76429 return createDecipheriv(suite, keys.key, keys.iv)
76430 }
76431
76432 exports.createDecipher = createDecipher
76433 exports.createDecipheriv = createDecipheriv
76434
76435 },{"./aes":156,"./authCipher":157,"./modes":169,"./streamCipher":172,"cipher-base":178,"evp_bytestokey":187,"inherits":189,"safe-buffer":193}],160:[function(require,module,exports){
76436 var MODES = require('./modes')
76437 var AuthCipher = require('./authCipher')
76438 var Buffer = require('safe-buffer').Buffer
76439 var StreamCipher = require('./streamCipher')
76440 var Transform = require('cipher-base')
76441 var aes = require('./aes')
76442 var ebtk = require('evp_bytestokey')
76443 var inherits = require('inherits')
76444
76445 function Cipher (mode, key, iv) {
76446 Transform.call(this)
76447
76448 this._cache = new Splitter()
76449 this._cipher = new aes.AES(key)
76450 this._prev = Buffer.from(iv)
76451 this._mode = mode
76452 this._autopadding = true
76453 }
76454
76455 inherits(Cipher, Transform)
76456
76457 Cipher.prototype._update = function (data) {
76458 this._cache.add(data)
76459 var chunk
76460 var thing
76461 var out = []
76462
76463 while ((chunk = this._cache.get())) {
76464 thing = this._mode.encrypt(this, chunk)
76465 out.push(thing)
76466 }
76467
76468 return Buffer.concat(out)
76469 }
76470
76471 var PADDING = Buffer.alloc(16, 0x10)
76472
76473 Cipher.prototype._final = function () {
76474 var chunk = this._cache.flush()
76475 if (this._autopadding) {
76476 chunk = this._mode.encrypt(this, chunk)
76477 this._cipher.scrub()
76478 return chunk
76479 }
76480
76481 if (!chunk.equals(PADDING)) {
76482 this._cipher.scrub()
76483 throw new Error('data not multiple of block length')
76484 }
76485 }
76486
76487 Cipher.prototype.setAutoPadding = function (setTo) {
76488 this._autopadding = !!setTo
76489 return this
76490 }
76491
76492 function Splitter () {
76493 this.cache = Buffer.allocUnsafe(0)
76494 }
76495
76496 Splitter.prototype.add = function (data) {
76497 this.cache = Buffer.concat([this.cache, data])
76498 }
76499
76500 Splitter.prototype.get = function () {
76501 if (this.cache.length > 15) {
76502 var out = this.cache.slice(0, 16)
76503 this.cache = this.cache.slice(16)
76504 return out
76505 }
76506 return null
76507 }
76508
76509 Splitter.prototype.flush = function () {
76510 var len = 16 - this.cache.length
76511 var padBuff = Buffer.allocUnsafe(len)
76512
76513 var i = -1
76514 while (++i < len) {
76515 padBuff.writeUInt8(len, i)
76516 }
76517
76518 return Buffer.concat([this.cache, padBuff])
76519 }
76520
76521 function createCipheriv (suite, password, iv) {
76522 var config = MODES[suite.toLowerCase()]
76523 if (!config) throw new TypeError('invalid suite type')
76524
76525 if (typeof password === 'string') password = Buffer.from(password)
76526 if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)
76527
76528 if (typeof iv === 'string') iv = Buffer.from(iv)
76529 if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)
76530
76531 if (config.type === 'stream') {
76532 return new StreamCipher(config.module, password, iv)
76533 } else if (config.type === 'auth') {
76534 return new AuthCipher(config.module, password, iv)
76535 }
76536
76537 return new Cipher(config.module, password, iv)
76538 }
76539
76540 function createCipher (suite, password) {
76541 var config = MODES[suite.toLowerCase()]
76542 if (!config) throw new TypeError('invalid suite type')
76543
76544 var keys = ebtk(password, false, config.key, config.iv)
76545 return createCipheriv(suite, keys.key, keys.iv)
76546 }
76547
76548 exports.createCipheriv = createCipheriv
76549 exports.createCipher = createCipher
76550
76551 },{"./aes":156,"./authCipher":157,"./modes":169,"./streamCipher":172,"cipher-base":178,"evp_bytestokey":187,"inherits":189,"safe-buffer":193}],161:[function(require,module,exports){
76552 var Buffer = require('safe-buffer').Buffer
76553 var ZEROES = Buffer.alloc(16, 0)
76554
76555 function toArray (buf) {
76556 return [
76557 buf.readUInt32BE(0),
76558 buf.readUInt32BE(4),
76559 buf.readUInt32BE(8),
76560 buf.readUInt32BE(12)
76561 ]
76562 }
76563
76564 function fromArray (out) {
76565 var buf = Buffer.allocUnsafe(16)
76566 buf.writeUInt32BE(out[0] >>> 0, 0)
76567 buf.writeUInt32BE(out[1] >>> 0, 4)
76568 buf.writeUInt32BE(out[2] >>> 0, 8)
76569 buf.writeUInt32BE(out[3] >>> 0, 12)
76570 return buf
76571 }
76572
76573 function GHASH (key) {
76574 this.h = key
76575 this.state = Buffer.alloc(16, 0)
76576 this.cache = Buffer.allocUnsafe(0)
76577 }
76578
76579 // from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html
76580 // by Juho Vähä-Herttua
76581 GHASH.prototype.ghash = function (block) {
76582 var i = -1
76583 while (++i < block.length) {
76584 this.state[i] ^= block[i]
76585 }
76586 this._multiply()
76587 }
76588
76589 GHASH.prototype._multiply = function () {
76590 var Vi = toArray(this.h)
76591 var Zi = [0, 0, 0, 0]
76592 var j, xi, lsbVi
76593 var i = -1
76594 while (++i < 128) {
76595 xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0
76596 if (xi) {
76597 // Z_i+1 = Z_i ^ V_i
76598 Zi[0] ^= Vi[0]
76599 Zi[1] ^= Vi[1]
76600 Zi[2] ^= Vi[2]
76601 Zi[3] ^= Vi[3]
76602 }
76603
76604 // Store the value of LSB(V_i)
76605 lsbVi = (Vi[3] & 1) !== 0
76606
76607 // V_i+1 = V_i >> 1
76608 for (j = 3; j > 0; j--) {
76609 Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)
76610 }
76611 Vi[0] = Vi[0] >>> 1
76612
76613 // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R
76614 if (lsbVi) {
76615 Vi[0] = Vi[0] ^ (0xe1 << 24)
76616 }
76617 }
76618 this.state = fromArray(Zi)
76619 }
76620
76621 GHASH.prototype.update = function (buf) {
76622 this.cache = Buffer.concat([this.cache, buf])
76623 var chunk
76624 while (this.cache.length >= 16) {
76625 chunk = this.cache.slice(0, 16)
76626 this.cache = this.cache.slice(16)
76627 this.ghash(chunk)
76628 }
76629 }
76630
76631 GHASH.prototype.final = function (abl, bl) {
76632 if (this.cache.length) {
76633 this.ghash(Buffer.concat([this.cache, ZEROES], 16))
76634 }
76635
76636 this.ghash(fromArray([0, abl, 0, bl]))
76637 return this.state
76638 }
76639
76640 module.exports = GHASH
76641
76642 },{"safe-buffer":193}],162:[function(require,module,exports){
76643 function incr32 (iv) {
76644 var len = iv.length
76645 var item
76646 while (len--) {
76647 item = iv.readUInt8(len)
76648 if (item === 255) {
76649 iv.writeUInt8(0, len)
76650 } else {
76651 item++
76652 iv.writeUInt8(item, len)
76653 break
76654 }
76655 }
76656 }
76657 module.exports = incr32
76658
76659 },{}],163:[function(require,module,exports){
76660 arguments[4][27][0].apply(exports,arguments)
76661 },{"buffer-xor":176,"dup":27}],164:[function(require,module,exports){
76662 var Buffer = require('safe-buffer').Buffer
76663 var xor = require('buffer-xor')
76664
76665 function encryptStart (self, data, decrypt) {
76666 var len = data.length
76667 var out = xor(data, self._cache)
76668 self._cache = self._cache.slice(len)
76669 self._prev = Buffer.concat([self._prev, decrypt ? data : out])
76670 return out
76671 }
76672
76673 exports.encrypt = function (self, data, decrypt) {
76674 var out = Buffer.allocUnsafe(0)
76675 var len
76676
76677 while (data.length) {
76678 if (self._cache.length === 0) {
76679 self._cache = self._cipher.encryptBlock(self._prev)
76680 self._prev = Buffer.allocUnsafe(0)
76681 }
76682
76683 if (self._cache.length <= data.length) {
76684 len = self._cache.length
76685 out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])
76686 data = data.slice(len)
76687 } else {
76688 out = Buffer.concat([out, encryptStart(self, data, decrypt)])
76689 break
76690 }
76691 }
76692
76693 return out
76694 }
76695
76696 },{"buffer-xor":176,"safe-buffer":193}],165:[function(require,module,exports){
76697 var Buffer = require('safe-buffer').Buffer
76698
76699 function encryptByte (self, byteParam, decrypt) {
76700 var pad
76701 var i = -1
76702 var len = 8
76703 var out = 0
76704 var bit, value
76705 while (++i < len) {
76706 pad = self._cipher.encryptBlock(self._prev)
76707 bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0
76708 value = pad[0] ^ bit
76709 out += ((value & 0x80) >> (i % 8))
76710 self._prev = shiftIn(self._prev, decrypt ? bit : value)
76711 }
76712 return out
76713 }
76714
76715 function shiftIn (buffer, value) {
76716 var len = buffer.length
76717 var i = -1
76718 var out = Buffer.allocUnsafe(buffer.length)
76719 buffer = Buffer.concat([buffer, Buffer.from([value])])
76720
76721 while (++i < len) {
76722 out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)
76723 }
76724
76725 return out
76726 }
76727
76728 exports.encrypt = function (self, chunk, decrypt) {
76729 var len = chunk.length
76730 var out = Buffer.allocUnsafe(len)
76731 var i = -1
76732
76733 while (++i < len) {
76734 out[i] = encryptByte(self, chunk[i], decrypt)
76735 }
76736
76737 return out
76738 }
76739
76740 },{"safe-buffer":193}],166:[function(require,module,exports){
76741 var Buffer = require('safe-buffer').Buffer
76742
76743 function encryptByte (self, byteParam, decrypt) {
76744 var pad = self._cipher.encryptBlock(self._prev)
76745 var out = pad[0] ^ byteParam
76746
76747 self._prev = Buffer.concat([
76748 self._prev.slice(1),
76749 Buffer.from([decrypt ? byteParam : out])
76750 ])
76751
76752 return out
76753 }
76754
76755 exports.encrypt = function (self, chunk, decrypt) {
76756 var len = chunk.length
76757 var out = Buffer.allocUnsafe(len)
76758 var i = -1
76759
76760 while (++i < len) {
76761 out[i] = encryptByte(self, chunk[i], decrypt)
76762 }
76763
76764 return out
76765 }
76766
76767 },{"safe-buffer":193}],167:[function(require,module,exports){
76768 var xor = require('buffer-xor')
76769 var Buffer = require('safe-buffer').Buffer
76770 var incr32 = require('../incr32')
76771
76772 function getBlock (self) {
76773 var out = self._cipher.encryptBlockRaw(self._prev)
76774 incr32(self._prev)
76775 return out
76776 }
76777
76778 var blockSize = 16
76779 exports.encrypt = function (self, chunk) {
76780 var chunkNum = Math.ceil(chunk.length / blockSize)
76781 var start = self._cache.length
76782 self._cache = Buffer.concat([
76783 self._cache,
76784 Buffer.allocUnsafe(chunkNum * blockSize)
76785 ])
76786 for (var i = 0; i < chunkNum; i++) {
76787 var out = getBlock(self)
76788 var offset = start + i * blockSize
76789 self._cache.writeUInt32BE(out[0], offset + 0)
76790 self._cache.writeUInt32BE(out[1], offset + 4)
76791 self._cache.writeUInt32BE(out[2], offset + 8)
76792 self._cache.writeUInt32BE(out[3], offset + 12)
76793 }
76794 var pad = self._cache.slice(0, chunk.length)
76795 self._cache = self._cache.slice(chunk.length)
76796 return xor(chunk, pad)
76797 }
76798
76799 },{"../incr32":162,"buffer-xor":176,"safe-buffer":193}],168:[function(require,module,exports){
76800 exports.encrypt = function (self, block) {
76801 return self._cipher.encryptBlock(block)
76802 }
76803
76804 exports.decrypt = function (self, block) {
76805 return self._cipher.decryptBlock(block)
76806 }
76807
76808 },{}],169:[function(require,module,exports){
76809 var modeModules = {
76810 ECB: require('./ecb'),
76811 CBC: require('./cbc'),
76812 CFB: require('./cfb'),
76813 CFB8: require('./cfb8'),
76814 CFB1: require('./cfb1'),
76815 OFB: require('./ofb'),
76816 CTR: require('./ctr'),
76817 GCM: require('./ctr')
76818 }
76819
76820 var modes = require('./list.json')
76821
76822 for (var key in modes) {
76823 modes[key].module = modeModules[modes[key].mode]
76824 }
76825
76826 module.exports = modes
76827
76828 },{"./cbc":163,"./cfb":164,"./cfb1":165,"./cfb8":166,"./ctr":167,"./ecb":168,"./list.json":170,"./ofb":171}],170:[function(require,module,exports){
76829 module.exports={
76830 "aes-128-ecb": {
76831 "cipher": "AES",
76832 "key": 128,
76833 "iv": 0,
76834 "mode": "ECB",
76835 "type": "block"
76836 },
76837 "aes-192-ecb": {
76838 "cipher": "AES",
76839 "key": 192,
76840 "iv": 0,
76841 "mode": "ECB",
76842 "type": "block"
76843 },
76844 "aes-256-ecb": {
76845 "cipher": "AES",
76846 "key": 256,
76847 "iv": 0,
76848 "mode": "ECB",
76849 "type": "block"
76850 },
76851 "aes-128-cbc": {
76852 "cipher": "AES",
76853 "key": 128,
76854 "iv": 16,
76855 "mode": "CBC",
76856 "type": "block"
76857 },
76858 "aes-192-cbc": {
76859 "cipher": "AES",
76860 "key": 192,
76861 "iv": 16,
76862 "mode": "CBC",
76863 "type": "block"
76864 },
76865 "aes-256-cbc": {
76866 "cipher": "AES",
76867 "key": 256,
76868 "iv": 16,
76869 "mode": "CBC",
76870 "type": "block"
76871 },
76872 "aes128": {
76873 "cipher": "AES",
76874 "key": 128,
76875 "iv": 16,
76876 "mode": "CBC",
76877 "type": "block"
76878 },
76879 "aes192": {
76880 "cipher": "AES",
76881 "key": 192,
76882 "iv": 16,
76883 "mode": "CBC",
76884 "type": "block"
76885 },
76886 "aes256": {
76887 "cipher": "AES",
76888 "key": 256,
76889 "iv": 16,
76890 "mode": "CBC",
76891 "type": "block"
76892 },
76893 "aes-128-cfb": {
76894 "cipher": "AES",
76895 "key": 128,
76896 "iv": 16,
76897 "mode": "CFB",
76898 "type": "stream"
76899 },
76900 "aes-192-cfb": {
76901 "cipher": "AES",
76902 "key": 192,
76903 "iv": 16,
76904 "mode": "CFB",
76905 "type": "stream"
76906 },
76907 "aes-256-cfb": {
76908 "cipher": "AES",
76909 "key": 256,
76910 "iv": 16,
76911 "mode": "CFB",
76912 "type": "stream"
76913 },
76914 "aes-128-cfb8": {
76915 "cipher": "AES",
76916 "key": 128,
76917 "iv": 16,
76918 "mode": "CFB8",
76919 "type": "stream"
76920 },
76921 "aes-192-cfb8": {
76922 "cipher": "AES",
76923 "key": 192,
76924 "iv": 16,
76925 "mode": "CFB8",
76926 "type": "stream"
76927 },
76928 "aes-256-cfb8": {
76929 "cipher": "AES",
76930 "key": 256,
76931 "iv": 16,
76932 "mode": "CFB8",
76933 "type": "stream"
76934 },
76935 "aes-128-cfb1": {
76936 "cipher": "AES",
76937 "key": 128,
76938 "iv": 16,
76939 "mode": "CFB1",
76940 "type": "stream"
76941 },
76942 "aes-192-cfb1": {
76943 "cipher": "AES",
76944 "key": 192,
76945 "iv": 16,
76946 "mode": "CFB1",
76947 "type": "stream"
76948 },
76949 "aes-256-cfb1": {
76950 "cipher": "AES",
76951 "key": 256,
76952 "iv": 16,
76953 "mode": "CFB1",
76954 "type": "stream"
76955 },
76956 "aes-128-ofb": {
76957 "cipher": "AES",
76958 "key": 128,
76959 "iv": 16,
76960 "mode": "OFB",
76961 "type": "stream"
76962 },
76963 "aes-192-ofb": {
76964 "cipher": "AES",
76965 "key": 192,
76966 "iv": 16,
76967 "mode": "OFB",
76968 "type": "stream"
76969 },
76970 "aes-256-ofb": {
76971 "cipher": "AES",
76972 "key": 256,
76973 "iv": 16,
76974 "mode": "OFB",
76975 "type": "stream"
76976 },
76977 "aes-128-ctr": {
76978 "cipher": "AES",
76979 "key": 128,
76980 "iv": 16,
76981 "mode": "CTR",
76982 "type": "stream"
76983 },
76984 "aes-192-ctr": {
76985 "cipher": "AES",
76986 "key": 192,
76987 "iv": 16,
76988 "mode": "CTR",
76989 "type": "stream"
76990 },
76991 "aes-256-ctr": {
76992 "cipher": "AES",
76993 "key": 256,
76994 "iv": 16,
76995 "mode": "CTR",
76996 "type": "stream"
76997 },
76998 "aes-128-gcm": {
76999 "cipher": "AES",
77000 "key": 128,
77001 "iv": 12,
77002 "mode": "GCM",
77003 "type": "auth"
77004 },
77005 "aes-192-gcm": {
77006 "cipher": "AES",
77007 "key": 192,
77008 "iv": 12,
77009 "mode": "GCM",
77010 "type": "auth"
77011 },
77012 "aes-256-gcm": {
77013 "cipher": "AES",
77014 "key": 256,
77015 "iv": 12,
77016 "mode": "GCM",
77017 "type": "auth"
77018 }
77019 }
77020
77021 },{}],171:[function(require,module,exports){
77022 arguments[4][33][0].apply(exports,arguments)
77023 },{"buffer":47,"buffer-xor":176,"dup":33}],172:[function(require,module,exports){
77024 var aes = require('./aes')
77025 var Buffer = require('safe-buffer').Buffer
77026 var Transform = require('cipher-base')
77027 var inherits = require('inherits')
77028
77029 function StreamCipher (mode, key, iv, decrypt) {
77030 Transform.call(this)
77031
77032 this._cipher = new aes.AES(key)
77033 this._prev = Buffer.from(iv)
77034 this._cache = Buffer.allocUnsafe(0)
77035 this._secCache = Buffer.allocUnsafe(0)
77036 this._decrypt = decrypt
77037 this._mode = mode
77038 }
77039
77040 inherits(StreamCipher, Transform)
77041
77042 StreamCipher.prototype._update = function (chunk) {
77043 return this._mode.encrypt(this, chunk, this._decrypt)
77044 }
77045
77046 StreamCipher.prototype._final = function () {
77047 this._cipher.scrub()
77048 }
77049
77050 module.exports = StreamCipher
77051
77052 },{"./aes":156,"cipher-base":178,"inherits":189,"safe-buffer":193}],173:[function(require,module,exports){
77053 var basex = require('base-x')
77054 var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
77055
77056 module.exports = basex(ALPHABET)
77057
77058 },{"base-x":151}],174:[function(require,module,exports){
77059 'use strict'
77060
77061 var base58 = require('bs58')
77062 var Buffer = require('safe-buffer').Buffer
77063
77064 module.exports = function (checksumFn) {
77065 // Encode a buffer as a base58-check encoded string
77066 function encode (payload) {
77067 var checksum = checksumFn(payload)
77068
77069 return base58.encode(Buffer.concat([
77070 payload,
77071 checksum
77072 ], payload.length + 4))
77073 }
77074
77075 function decodeRaw (buffer) {
77076 var payload = buffer.slice(0, -4)
77077 var checksum = buffer.slice(-4)
77078 var newChecksum = checksumFn(payload)
77079
77080 if (checksum[0] ^ newChecksum[0] |
77081 checksum[1] ^ newChecksum[1] |
77082 checksum[2] ^ newChecksum[2] |
77083 checksum[3] ^ newChecksum[3]) return
77084
77085 return payload
77086 }
77087
77088 // Decode a base58-check encoded string to a buffer, no result if checksum is wrong
77089 function decodeUnsafe (string) {
77090 var buffer = base58.decodeUnsafe(string)
77091 if (!buffer) return
77092
77093 return decodeRaw(buffer)
77094 }
77095
77096 function decode (string) {
77097 var buffer = base58.decode(string)
77098 var payload = decodeRaw(buffer, checksumFn)
77099 if (!payload) throw new Error('Invalid checksum')
77100 return payload
77101 }
77102
77103 return {
77104 encode: encode,
77105 decode: decode,
77106 decodeUnsafe: decodeUnsafe
77107 }
77108 }
77109
77110 },{"bs58":173,"safe-buffer":193}],175:[function(require,module,exports){
77111 'use strict'
77112
77113 var createHash = require('create-hash')
77114 var bs58checkBase = require('./base')
77115
77116 // SHA256(SHA256(buffer))
77117 function sha256x2 (buffer) {
77118 var tmp = createHash('sha256').update(buffer).digest()
77119 return createHash('sha256').update(tmp).digest()
77120 }
77121
77122 module.exports = bs58checkBase(sha256x2)
77123
77124 },{"./base":174,"create-hash":179}],176:[function(require,module,exports){
77125 arguments[4][46][0].apply(exports,arguments)
77126 },{"buffer":47,"dup":46}],177:[function(require,module,exports){
77127 module.exports = function xorInplace (a, b) {
77128 var length = Math.min(a.length, b.length)
77129
77130 for (var i = 0; i < length; ++i) {
77131 a[i] = a[i] ^ b[i]
77132 }
77133
77134 return a.slice(0, length)
77135 }
77136
77137 },{}],178:[function(require,module,exports){
77138 var Buffer = require('safe-buffer').Buffer
77139 var Transform = require('stream').Transform
77140 var StringDecoder = require('string_decoder').StringDecoder
77141 var inherits = require('inherits')
77142
77143 function CipherBase (hashMode) {
77144 Transform.call(this)
77145 this.hashMode = typeof hashMode === 'string'
77146 if (this.hashMode) {
77147 this[hashMode] = this._finalOrDigest
77148 } else {
77149 this.final = this._finalOrDigest
77150 }
77151 if (this._final) {
77152 this.__final = this._final
77153 this._final = null
77154 }
77155 this._decoder = null
77156 this._encoding = null
77157 }
77158 inherits(CipherBase, Transform)
77159
77160 CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
77161 if (typeof data === 'string') {
77162 data = Buffer.from(data, inputEnc)
77163 }
77164
77165 var outData = this._update(data)
77166 if (this.hashMode) return this
77167
77168 if (outputEnc) {
77169 outData = this._toString(outData, outputEnc)
77170 }
77171
77172 return outData
77173 }
77174
77175 CipherBase.prototype.setAutoPadding = function () {}
77176 CipherBase.prototype.getAuthTag = function () {
77177 throw new Error('trying to get auth tag in unsupported state')
77178 }
77179
77180 CipherBase.prototype.setAuthTag = function () {
77181 throw new Error('trying to set auth tag in unsupported state')
77182 }
77183
77184 CipherBase.prototype.setAAD = function () {
77185 throw new Error('trying to set aad in unsupported state')
77186 }
77187
77188 CipherBase.prototype._transform = function (data, _, next) {
77189 var err
77190 try {
77191 if (this.hashMode) {
77192 this._update(data)
77193 } else {
77194 this.push(this._update(data))
77195 }
77196 } catch (e) {
77197 err = e
77198 } finally {
77199 next(err)
77200 }
77201 }
77202 CipherBase.prototype._flush = function (done) {
77203 var err
77204 try {
77205 this.push(this.__final())
77206 } catch (e) {
77207 err = e
77208 }
77209
77210 done(err)
77211 }
77212 CipherBase.prototype._finalOrDigest = function (outputEnc) {
77213 var outData = this.__final() || Buffer.alloc(0)
77214 if (outputEnc) {
77215 outData = this._toString(outData, outputEnc, true)
77216 }
77217 return outData
77218 }
77219
77220 CipherBase.prototype._toString = function (value, enc, fin) {
77221 if (!this._decoder) {
77222 this._decoder = new StringDecoder(enc)
77223 this._encoding = enc
77224 }
77225
77226 if (this._encoding !== enc) throw new Error('can\'t switch encodings')
77227
77228 var out = this._decoder.write(value)
77229 if (fin) {
77230 out += this._decoder.end()
77231 }
77232
77233 return out
77234 }
77235
77236 module.exports = CipherBase
77237
77238 },{"inherits":189,"safe-buffer":193,"stream":143,"string_decoder":144}],179:[function(require,module,exports){
77239 arguments[4][51][0].apply(exports,arguments)
77240 },{"./md5":181,"buffer":47,"cipher-base":178,"dup":51,"inherits":189,"ripemd160":192,"sha.js":196}],180:[function(require,module,exports){
77241 arguments[4][52][0].apply(exports,arguments)
77242 },{"buffer":47,"dup":52}],181:[function(require,module,exports){
77243 arguments[4][53][0].apply(exports,arguments)
77244 },{"./make-hash":180,"dup":53}],182:[function(require,module,exports){
77245 var assert = require('assert')
77246 var BigInteger = require('bigi')
77247
77248 var Point = require('./point')
77249
77250 function Curve (p, a, b, Gx, Gy, n, h) {
77251 this.p = p
77252 this.a = a
77253 this.b = b
77254 this.G = Point.fromAffine(this, Gx, Gy)
77255 this.n = n
77256 this.h = h
77257
77258 this.infinity = new Point(this, null, null, BigInteger.ZERO)
77259
77260 // result caching
77261 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
77262
77263 // determine size of p in bytes
77264 this.pLength = Math.floor((this.p.bitLength() + 7) / 8)
77265 }
77266
77267 Curve.prototype.pointFromX = function (isOdd, x) {
77268 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
77269 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
77270
77271 var y = beta
77272 if (beta.isEven() ^ !isOdd) {
77273 y = this.p.subtract(y) // -y % p
77274 }
77275
77276 return Point.fromAffine(this, x, y)
77277 }
77278
77279 Curve.prototype.isInfinity = function (Q) {
77280 if (Q === this.infinity) return true
77281
77282 return Q.z.signum() === 0 && Q.y.signum() !== 0
77283 }
77284
77285 Curve.prototype.isOnCurve = function (Q) {
77286 if (this.isInfinity(Q)) return true
77287
77288 var x = Q.affineX
77289 var y = Q.affineY
77290 var a = this.a
77291 var b = this.b
77292 var p = this.p
77293
77294 // Check that xQ and yQ are integers in the interval [0, p - 1]
77295 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
77296 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
77297
77298 // and check that y^2 = x^3 + ax + b (mod p)
77299 var lhs = y.square().mod(p)
77300 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
77301 return lhs.equals(rhs)
77302 }
77303
77304 /**
77305 * Validate an elliptic curve point.
77306 *
77307 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
77308 */
77309 Curve.prototype.validate = function (Q) {
77310 // Check Q != O
77311 assert(!this.isInfinity(Q), 'Point is at infinity')
77312 assert(this.isOnCurve(Q), 'Point is not on the curve')
77313
77314 // Check nQ = O (where Q is a scalar multiple of G)
77315 var nQ = Q.multiply(this.n)
77316 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
77317
77318 return true
77319 }
77320
77321 module.exports = Curve
77322
77323 },{"./point":186,"assert":15,"bigi":154}],183:[function(require,module,exports){
77324 module.exports={
77325 "secp128r1": {
77326 "p": "fffffffdffffffffffffffffffffffff",
77327 "a": "fffffffdfffffffffffffffffffffffc",
77328 "b": "e87579c11079f43dd824993c2cee5ed3",
77329 "n": "fffffffe0000000075a30d1b9038a115",
77330 "h": "01",
77331 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
77332 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
77333 },
77334 "secp160k1": {
77335 "p": "fffffffffffffffffffffffffffffffeffffac73",
77336 "a": "00",
77337 "b": "07",
77338 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
77339 "h": "01",
77340 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
77341 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
77342 },
77343 "secp160r1": {
77344 "p": "ffffffffffffffffffffffffffffffff7fffffff",
77345 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
77346 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
77347 "n": "0100000000000000000001f4c8f927aed3ca752257",
77348 "h": "01",
77349 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
77350 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
77351 },
77352 "secp192k1": {
77353 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
77354 "a": "00",
77355 "b": "03",
77356 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
77357 "h": "01",
77358 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
77359 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
77360 },
77361 "secp192r1": {
77362 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
77363 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
77364 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
77365 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
77366 "h": "01",
77367 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
77368 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
77369 },
77370 "secp256k1": {
77371 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
77372 "a": "00",
77373 "b": "07",
77374 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
77375 "h": "01",
77376 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
77377 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
77378 },
77379 "secp256r1": {
77380 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
77381 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
77382 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
77383 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
77384 "h": "01",
77385 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
77386 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
77387 }
77388 }
77389
77390 },{}],184:[function(require,module,exports){
77391 var Point = require('./point')
77392 var Curve = require('./curve')
77393
77394 var getCurveByName = require('./names')
77395
77396 module.exports = {
77397 Curve: Curve,
77398 Point: Point,
77399 getCurveByName: getCurveByName
77400 }
77401
77402 },{"./curve":182,"./names":185,"./point":186}],185:[function(require,module,exports){
77403 var BigInteger = require('bigi')
77404
77405 var curves = require('./curves.json')
77406 var Curve = require('./curve')
77407
77408 function getCurveByName (name) {
77409 var curve = curves[name]
77410 if (!curve) return null
77411
77412 var p = new BigInteger(curve.p, 16)
77413 var a = new BigInteger(curve.a, 16)
77414 var b = new BigInteger(curve.b, 16)
77415 var n = new BigInteger(curve.n, 16)
77416 var h = new BigInteger(curve.h, 16)
77417 var Gx = new BigInteger(curve.Gx, 16)
77418 var Gy = new BigInteger(curve.Gy, 16)
77419
77420 return new Curve(p, a, b, Gx, Gy, n, h)
77421 }
77422
77423 module.exports = getCurveByName
77424
77425 },{"./curve":182,"./curves.json":183,"bigi":154}],186:[function(require,module,exports){
77426 var assert = require('assert')
77427 var Buffer = require('safe-buffer').Buffer
77428 var BigInteger = require('bigi')
77429
77430 var THREE = BigInteger.valueOf(3)
77431
77432 function Point (curve, x, y, z) {
77433 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
77434
77435 this.curve = curve
77436 this.x = x
77437 this.y = y
77438 this.z = z
77439 this._zInv = null
77440
77441 this.compressed = true
77442 }
77443
77444 Object.defineProperty(Point.prototype, 'zInv', {
77445 get: function () {
77446 if (this._zInv === null) {
77447 this._zInv = this.z.modInverse(this.curve.p)
77448 }
77449
77450 return this._zInv
77451 }
77452 })
77453
77454 Object.defineProperty(Point.prototype, 'affineX', {
77455 get: function () {
77456 return this.x.multiply(this.zInv).mod(this.curve.p)
77457 }
77458 })
77459
77460 Object.defineProperty(Point.prototype, 'affineY', {
77461 get: function () {
77462 return this.y.multiply(this.zInv).mod(this.curve.p)
77463 }
77464 })
77465
77466 Point.fromAffine = function (curve, x, y) {
77467 return new Point(curve, x, y, BigInteger.ONE)
77468 }
77469
77470 Point.prototype.equals = function (other) {
77471 if (other === this) return true
77472 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
77473 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
77474
77475 // u = Y2 * Z1 - Y1 * Z2
77476 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
77477
77478 if (u.signum() !== 0) return false
77479
77480 // v = X2 * Z1 - X1 * Z2
77481 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
77482
77483 return v.signum() === 0
77484 }
77485
77486 Point.prototype.negate = function () {
77487 var y = this.curve.p.subtract(this.y)
77488
77489 return new Point(this.curve, this.x, y, this.z)
77490 }
77491
77492 Point.prototype.add = function (b) {
77493 if (this.curve.isInfinity(this)) return b
77494 if (this.curve.isInfinity(b)) return this
77495
77496 var x1 = this.x
77497 var y1 = this.y
77498 var x2 = b.x
77499 var y2 = b.y
77500
77501 // u = Y2 * Z1 - Y1 * Z2
77502 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
77503 // v = X2 * Z1 - X1 * Z2
77504 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
77505
77506 if (v.signum() === 0) {
77507 if (u.signum() === 0) {
77508 return this.twice() // this == b, so double
77509 }
77510
77511 return this.curve.infinity // this = -b, so infinity
77512 }
77513
77514 var v2 = v.square()
77515 var v3 = v2.multiply(v)
77516 var x1v2 = x1.multiply(v2)
77517 var zu2 = u.square().multiply(this.z)
77518
77519 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
77520 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
77521 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
77522 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)
77523 // z3 = v^3 * z1 * z2
77524 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
77525
77526 return new Point(this.curve, x3, y3, z3)
77527 }
77528
77529 Point.prototype.twice = function () {
77530 if (this.curve.isInfinity(this)) return this
77531 if (this.y.signum() === 0) return this.curve.infinity
77532
77533 var x1 = this.x
77534 var y1 = this.y
77535
77536 var y1z1 = y1.multiply(this.z).mod(this.curve.p)
77537 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
77538 var a = this.curve.a
77539
77540 // w = 3 * x1^2 + a * z1^2
77541 var w = x1.square().multiply(THREE)
77542
77543 if (a.signum() !== 0) {
77544 w = w.add(this.z.square().multiply(a))
77545 }
77546
77547 w = w.mod(this.curve.p)
77548 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
77549 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
77550 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
77551 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
77552 // z3 = 8 * (y1 * z1)^3
77553 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
77554
77555 return new Point(this.curve, x3, y3, z3)
77556 }
77557
77558 // Simple NAF (Non-Adjacent Form) multiplication algorithm
77559 // TODO: modularize the multiplication algorithm
77560 Point.prototype.multiply = function (k) {
77561 if (this.curve.isInfinity(this)) return this
77562 if (k.signum() === 0) return this.curve.infinity
77563
77564 var e = k
77565 var h = e.multiply(THREE)
77566
77567 var neg = this.negate()
77568 var R = this
77569
77570 for (var i = h.bitLength() - 2; i > 0; --i) {
77571 var hBit = h.testBit(i)
77572 var eBit = e.testBit(i)
77573
77574 R = R.twice()
77575
77576 if (hBit !== eBit) {
77577 R = R.add(hBit ? this : neg)
77578 }
77579 }
77580
77581 return R
77582 }
77583
77584 // Compute this*j + x*k (simultaneous multiplication)
77585 Point.prototype.multiplyTwo = function (j, x, k) {
77586 var i = Math.max(j.bitLength(), k.bitLength()) - 1
77587 var R = this.curve.infinity
77588 var both = this.add(x)
77589
77590 while (i >= 0) {
77591 var jBit = j.testBit(i)
77592 var kBit = k.testBit(i)
77593
77594 R = R.twice()
77595
77596 if (jBit) {
77597 if (kBit) {
77598 R = R.add(both)
77599 } else {
77600 R = R.add(this)
77601 }
77602 } else if (kBit) {
77603 R = R.add(x)
77604 }
77605 --i
77606 }
77607
77608 return R
77609 }
77610
77611 Point.prototype.getEncoded = function (compressed) {
77612 if (compressed == null) compressed = this.compressed
77613 if (this.curve.isInfinity(this)) return Buffer.alloc(1, 0) // Infinity point encoded is simply '00'
77614
77615 var x = this.affineX
77616 var y = this.affineY
77617 var byteLength = this.curve.pLength
77618 var buffer
77619
77620 // 0x02/0x03 | X
77621 if (compressed) {
77622 buffer = Buffer.allocUnsafe(1 + byteLength)
77623 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
77624
77625 // 0x04 | X | Y
77626 } else {
77627 buffer = Buffer.allocUnsafe(1 + byteLength + byteLength)
77628 buffer.writeUInt8(0x04, 0)
77629
77630 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
77631 }
77632
77633 x.toBuffer(byteLength).copy(buffer, 1)
77634
77635 return buffer
77636 }
77637
77638 Point.decodeFrom = function (curve, buffer) {
77639 var type = buffer.readUInt8(0)
77640 var compressed = (type !== 4)
77641
77642 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
77643 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
77644
77645 var Q
77646 if (compressed) {
77647 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
77648 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
77649
77650 var isOdd = (type === 0x03)
77651 Q = curve.pointFromX(isOdd, x)
77652 } else {
77653 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
77654
77655 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
77656 Q = Point.fromAffine(curve, x, y)
77657 }
77658
77659 Q.compressed = compressed
77660 return Q
77661 }
77662
77663 Point.prototype.toString = function () {
77664 if (this.curve.isInfinity(this)) return '(INFINITY)'
77665
77666 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
77667 }
77668
77669 module.exports = Point
77670
77671 },{"assert":15,"bigi":154,"safe-buffer":193}],187:[function(require,module,exports){
77672 var Buffer = require('safe-buffer').Buffer
77673 var MD5 = require('md5.js')
77674
77675 /* eslint-disable camelcase */
77676 function EVP_BytesToKey (password, salt, keyBits, ivLen) {
77677 if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary')
77678 if (salt) {
77679 if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary')
77680 if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length')
77681 }
77682
77683 var keyLen = keyBits / 8
77684 var key = Buffer.alloc(keyLen)
77685 var iv = Buffer.alloc(ivLen || 0)
77686 var tmp = Buffer.alloc(0)
77687
77688 while (keyLen > 0 || ivLen > 0) {
77689 var hash = new MD5()
77690 hash.update(tmp)
77691 hash.update(password)
77692 if (salt) hash.update(salt)
77693 tmp = hash.digest()
77694
77695 var used = 0
77696
77697 if (keyLen > 0) {
77698 var keyStart = key.length - keyLen
77699 used = Math.min(keyLen, tmp.length)
77700 tmp.copy(key, keyStart, 0, used)
77701 keyLen -= used
77702 }
77703
77704 if (used < tmp.length && ivLen > 0) {
77705 var ivStart = iv.length - ivLen
77706 var length = Math.min(ivLen, tmp.length - used)
77707 tmp.copy(iv, ivStart, used, used + length)
77708 ivLen -= length
77709 }
77710 }
77711
77712 tmp.fill(0)
77713 return { key: key, iv: iv }
77714 }
77715
77716 module.exports = EVP_BytesToKey
77717
77718 },{"md5.js":190,"safe-buffer":193}],188:[function(require,module,exports){
77719 arguments[4][85][0].apply(exports,arguments)
77720 },{"buffer":47,"dup":85,"inherits":189,"stream":143}],189:[function(require,module,exports){
77721 arguments[4][95][0].apply(exports,arguments)
77722 },{"dup":95}],190:[function(require,module,exports){
77723 (function (Buffer){
77724 'use strict'
77725 var inherits = require('inherits')
77726 var HashBase = require('hash-base')
77727
77728 var ARRAY16 = new Array(16)
77729
77730 function MD5 () {
77731 HashBase.call(this, 64)
77732
77733 // state
77734 this._a = 0x67452301
77735 this._b = 0xefcdab89
77736 this._c = 0x98badcfe
77737 this._d = 0x10325476
77738 }
77739
77740 inherits(MD5, HashBase)
77741
77742 MD5.prototype._update = function () {
77743 var M = ARRAY16
77744 for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4)
77745
77746 var a = this._a
77747 var b = this._b
77748 var c = this._c
77749 var d = this._d
77750
77751 a = fnF(a, b, c, d, M[0], 0xd76aa478, 7)
77752 d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12)
77753 c = fnF(c, d, a, b, M[2], 0x242070db, 17)
77754 b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22)
77755 a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7)
77756 d = fnF(d, a, b, c, M[5], 0x4787c62a, 12)
77757 c = fnF(c, d, a, b, M[6], 0xa8304613, 17)
77758 b = fnF(b, c, d, a, M[7], 0xfd469501, 22)
77759 a = fnF(a, b, c, d, M[8], 0x698098d8, 7)
77760 d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12)
77761 c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17)
77762 b = fnF(b, c, d, a, M[11], 0x895cd7be, 22)
77763 a = fnF(a, b, c, d, M[12], 0x6b901122, 7)
77764 d = fnF(d, a, b, c, M[13], 0xfd987193, 12)
77765 c = fnF(c, d, a, b, M[14], 0xa679438e, 17)
77766 b = fnF(b, c, d, a, M[15], 0x49b40821, 22)
77767
77768 a = fnG(a, b, c, d, M[1], 0xf61e2562, 5)
77769 d = fnG(d, a, b, c, M[6], 0xc040b340, 9)
77770 c = fnG(c, d, a, b, M[11], 0x265e5a51, 14)
77771 b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20)
77772 a = fnG(a, b, c, d, M[5], 0xd62f105d, 5)
77773 d = fnG(d, a, b, c, M[10], 0x02441453, 9)
77774 c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14)
77775 b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20)
77776 a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5)
77777 d = fnG(d, a, b, c, M[14], 0xc33707d6, 9)
77778 c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14)
77779 b = fnG(b, c, d, a, M[8], 0x455a14ed, 20)
77780 a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5)
77781 d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9)
77782 c = fnG(c, d, a, b, M[7], 0x676f02d9, 14)
77783 b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20)
77784
77785 a = fnH(a, b, c, d, M[5], 0xfffa3942, 4)
77786 d = fnH(d, a, b, c, M[8], 0x8771f681, 11)
77787 c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16)
77788 b = fnH(b, c, d, a, M[14], 0xfde5380c, 23)
77789 a = fnH(a, b, c, d, M[1], 0xa4beea44, 4)
77790 d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11)
77791 c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16)
77792 b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23)
77793 a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4)
77794 d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11)
77795 c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16)
77796 b = fnH(b, c, d, a, M[6], 0x04881d05, 23)
77797 a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4)
77798 d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11)
77799 c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16)
77800 b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23)
77801
77802 a = fnI(a, b, c, d, M[0], 0xf4292244, 6)
77803 d = fnI(d, a, b, c, M[7], 0x432aff97, 10)
77804 c = fnI(c, d, a, b, M[14], 0xab9423a7, 15)
77805 b = fnI(b, c, d, a, M[5], 0xfc93a039, 21)
77806 a = fnI(a, b, c, d, M[12], 0x655b59c3, 6)
77807 d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10)
77808 c = fnI(c, d, a, b, M[10], 0xffeff47d, 15)
77809 b = fnI(b, c, d, a, M[1], 0x85845dd1, 21)
77810 a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6)
77811 d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10)
77812 c = fnI(c, d, a, b, M[6], 0xa3014314, 15)
77813 b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21)
77814 a = fnI(a, b, c, d, M[4], 0xf7537e82, 6)
77815 d = fnI(d, a, b, c, M[11], 0xbd3af235, 10)
77816 c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15)
77817 b = fnI(b, c, d, a, M[9], 0xeb86d391, 21)
77818
77819 this._a = (this._a + a) | 0
77820 this._b = (this._b + b) | 0
77821 this._c = (this._c + c) | 0
77822 this._d = (this._d + d) | 0
77823 }
77824
77825 MD5.prototype._digest = function () {
77826 // create padding and handle blocks
77827 this._block[this._blockOffset++] = 0x80
77828 if (this._blockOffset > 56) {
77829 this._block.fill(0, this._blockOffset, 64)
77830 this._update()
77831 this._blockOffset = 0
77832 }
77833
77834 this._block.fill(0, this._blockOffset, 56)
77835 this._block.writeUInt32LE(this._length[0], 56)
77836 this._block.writeUInt32LE(this._length[1], 60)
77837 this._update()
77838
77839 // produce result
77840 var buffer = new Buffer(16)
77841 buffer.writeInt32LE(this._a, 0)
77842 buffer.writeInt32LE(this._b, 4)
77843 buffer.writeInt32LE(this._c, 8)
77844 buffer.writeInt32LE(this._d, 12)
77845 return buffer
77846 }
77847
77848 function rotl (x, n) {
77849 return (x << n) | (x >>> (32 - n))
77850 }
77851
77852 function fnF (a, b, c, d, m, k, s) {
77853 return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0
77854 }
77855
77856 function fnG (a, b, c, d, m, k, s) {
77857 return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0
77858 }
77859
77860 function fnH (a, b, c, d, m, k, s) {
77861 return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0
77862 }
77863
77864 function fnI (a, b, c, d, m, k, s) {
77865 return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0
77866 }
77867
77868 module.exports = MD5
77869
77870 }).call(this,require("buffer").Buffer)
77871 },{"buffer":47,"hash-base":191,"inherits":189}],191:[function(require,module,exports){
77872 'use strict'
77873 var Buffer = require('safe-buffer').Buffer
77874 var Transform = require('stream').Transform
77875 var inherits = require('inherits')
77876
77877 function throwIfNotStringOrBuffer (val, prefix) {
77878 if (!Buffer.isBuffer(val) && typeof val !== 'string') {
77879 throw new TypeError(prefix + ' must be a string or a buffer')
77880 }
77881 }
77882
77883 function HashBase (blockSize) {
77884 Transform.call(this)
77885
77886 this._block = Buffer.allocUnsafe(blockSize)
77887 this._blockSize = blockSize
77888 this._blockOffset = 0
77889 this._length = [0, 0, 0, 0]
77890
77891 this._finalized = false
77892 }
77893
77894 inherits(HashBase, Transform)
77895
77896 HashBase.prototype._transform = function (chunk, encoding, callback) {
77897 var error = null
77898 try {
77899 this.update(chunk, encoding)
77900 } catch (err) {
77901 error = err
77902 }
77903
77904 callback(error)
77905 }
77906
77907 HashBase.prototype._flush = function (callback) {
77908 var error = null
77909 try {
77910 this.push(this.digest())
77911 } catch (err) {
77912 error = err
77913 }
77914
77915 callback(error)
77916 }
77917
77918 HashBase.prototype.update = function (data, encoding) {
77919 throwIfNotStringOrBuffer(data, 'Data')
77920 if (this._finalized) throw new Error('Digest already called')
77921 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
77922
77923 // consume data
77924 var block = this._block
77925 var offset = 0
77926 while (this._blockOffset + data.length - offset >= this._blockSize) {
77927 for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]
77928 this._update()
77929 this._blockOffset = 0
77930 }
77931 while (offset < data.length) block[this._blockOffset++] = data[offset++]
77932
77933 // update length
77934 for (var j = 0, carry = data.length * 8; carry > 0; ++j) {
77935 this._length[j] += carry
77936 carry = (this._length[j] / 0x0100000000) | 0
77937 if (carry > 0) this._length[j] -= 0x0100000000 * carry
77938 }
77939
77940 return this
77941 }
77942
77943 HashBase.prototype._update = function () {
77944 throw new Error('_update is not implemented')
77945 }
77946
77947 HashBase.prototype.digest = function (encoding) {
77948 if (this._finalized) throw new Error('Digest already called')
77949 this._finalized = true
77950
77951 var digest = this._digest()
77952 if (encoding !== undefined) digest = digest.toString(encoding)
77953
77954 // reset state
77955 this._block.fill(0)
77956 this._blockOffset = 0
77957 for (var i = 0; i < 4; ++i) this._length[i] = 0
77958
77959 return digest
77960 }
77961
77962 HashBase.prototype._digest = function () {
77963 throw new Error('_digest is not implemented')
77964 }
77965
77966 module.exports = HashBase
77967
77968 },{"inherits":189,"safe-buffer":193,"stream":143}],192:[function(require,module,exports){
77969 arguments[4][133][0].apply(exports,arguments)
77970 },{"buffer":47,"dup":133,"hash-base":188,"inherits":189}],193:[function(require,module,exports){
77971 /* eslint-disable node/no-deprecated-api */
77972 var buffer = require('buffer')
77973 var Buffer = buffer.Buffer
77974
77975 // alternative to using Object.keys for old browsers
77976 function copyProps (src, dst) {
77977 for (var key in src) {
77978 dst[key] = src[key]
77979 }
77980 }
77981 if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
77982 module.exports = buffer
77983 } else {
77984 // Copy properties from require('buffer')
77985 copyProps(buffer, exports)
77986 exports.Buffer = SafeBuffer
77987 }
77988
77989 function SafeBuffer (arg, encodingOrOffset, length) {
77990 return Buffer(arg, encodingOrOffset, length)
77991 }
77992
77993 // Copy static methods from Buffer
77994 copyProps(Buffer, SafeBuffer)
77995
77996 SafeBuffer.from = function (arg, encodingOrOffset, length) {
77997 if (typeof arg === 'number') {
77998 throw new TypeError('Argument must not be a number')
77999 }
78000 return Buffer(arg, encodingOrOffset, length)
78001 }
78002
78003 SafeBuffer.alloc = function (size, fill, encoding) {
78004 if (typeof size !== 'number') {
78005 throw new TypeError('Argument must be a number')
78006 }
78007 var buf = Buffer(size)
78008 if (fill !== undefined) {
78009 if (typeof encoding === 'string') {
78010 buf.fill(fill, encoding)
78011 } else {
78012 buf.fill(fill)
78013 }
78014 } else {
78015 buf.fill(0)
78016 }
78017 return buf
78018 }
78019
78020 SafeBuffer.allocUnsafe = function (size) {
78021 if (typeof size !== 'number') {
78022 throw new TypeError('Argument must be a number')
78023 }
78024 return Buffer(size)
78025 }
78026
78027 SafeBuffer.allocUnsafeSlow = function (size) {
78028 if (typeof size !== 'number') {
78029 throw new TypeError('Argument must be a number')
78030 }
78031 return buffer.SlowBuffer(size)
78032 }
78033
78034 },{"buffer":47}],194:[function(require,module,exports){
78035 (function (Buffer){
78036 var crypto = require('crypto')
78037 /* eslint-disable camelcase */
78038
78039 var MAX_VALUE = 0x7fffffff
78040
78041 // N = Cpu cost, r = Memory cost, p = parallelization cost
78042 function scrypt (key, salt, N, r, p, dkLen, progressCallback) {
78043 if (N === 0 || (N & (N - 1)) !== 0) throw Error('N must be > 0 and a power of 2')
78044
78045 if (N > MAX_VALUE / 128 / r) throw Error('Parameter N is too large')
78046 if (r > MAX_VALUE / 128 / p) throw Error('Parameter r is too large')
78047
78048 var XY = new Buffer(256 * r)
78049 var V = new Buffer(128 * r * N)
78050
78051 // pseudo global
78052 var B32 = new Int32Array(16) // salsa20_8
78053 var x = new Int32Array(16) // salsa20_8
78054 var _X = new Buffer(64) // blockmix_salsa8
78055
78056 // pseudo global
78057 var B = crypto.pbkdf2Sync(key, salt, 1, p * 128 * r, 'sha256')
78058
78059 var tickCallback
78060 if (progressCallback) {
78061 var totalOps = p * N * 2
78062 var currentOp = 0
78063
78064 tickCallback = function () {
78065 ++currentOp
78066
78067 // send progress notifications once every 1,000 ops
78068 if (currentOp % 1000 === 0) {
78069 progressCallback({
78070 current: currentOp,
78071 total: totalOps,
78072 percent: (currentOp / totalOps) * 100.0
78073 })
78074 }
78075 }
78076 }
78077
78078 for (var i = 0; i < p; i++) {
78079 smix(B, i * 128 * r, r, N, V, XY)
78080 }
78081
78082 return crypto.pbkdf2Sync(key, B, 1, dkLen, 'sha256')
78083
78084 // all of these functions are actually moved to the top
78085 // due to function hoisting
78086
78087 function smix (B, Bi, r, N, V, XY) {
78088 var Xi = 0
78089 var Yi = 128 * r
78090 var i
78091
78092 B.copy(XY, Xi, Bi, Bi + Yi)
78093
78094 for (i = 0; i < N; i++) {
78095 XY.copy(V, i * Yi, Xi, Xi + Yi)
78096 blockmix_salsa8(XY, Xi, Yi, r)
78097
78098 if (tickCallback) tickCallback()
78099 }
78100
78101 for (i = 0; i < N; i++) {
78102 var offset = Xi + (2 * r - 1) * 64
78103 var j = XY.readUInt32LE(offset) & (N - 1)
78104 blockxor(V, j * Yi, XY, Xi, Yi)
78105 blockmix_salsa8(XY, Xi, Yi, r)
78106
78107 if (tickCallback) tickCallback()
78108 }
78109
78110 XY.copy(B, Bi, Xi, Xi + Yi)
78111 }
78112
78113 function blockmix_salsa8 (BY, Bi, Yi, r) {
78114 var i
78115
78116 arraycopy(BY, Bi + (2 * r - 1) * 64, _X, 0, 64)
78117
78118 for (i = 0; i < 2 * r; i++) {
78119 blockxor(BY, i * 64, _X, 0, 64)
78120 salsa20_8(_X)
78121 arraycopy(_X, 0, BY, Yi + (i * 64), 64)
78122 }
78123
78124 for (i = 0; i < r; i++) {
78125 arraycopy(BY, Yi + (i * 2) * 64, BY, Bi + (i * 64), 64)
78126 }
78127
78128 for (i = 0; i < r; i++) {
78129 arraycopy(BY, Yi + (i * 2 + 1) * 64, BY, Bi + (i + r) * 64, 64)
78130 }
78131 }
78132
78133 function R (a, b) {
78134 return (a << b) | (a >>> (32 - b))
78135 }
78136
78137 function salsa20_8 (B) {
78138 var i
78139
78140 for (i = 0; i < 16; i++) {
78141 B32[i] = (B[i * 4 + 0] & 0xff) << 0
78142 B32[i] |= (B[i * 4 + 1] & 0xff) << 8
78143 B32[i] |= (B[i * 4 + 2] & 0xff) << 16
78144 B32[i] |= (B[i * 4 + 3] & 0xff) << 24
78145 // B32[i] = B.readUInt32LE(i*4) <--- this is signficantly slower even in Node.js
78146 }
78147
78148 arraycopy(B32, 0, x, 0, 16)
78149
78150 for (i = 8; i > 0; i -= 2) {
78151 x[4] ^= R(x[0] + x[12], 7)
78152 x[8] ^= R(x[4] + x[0], 9)
78153 x[12] ^= R(x[8] + x[4], 13)
78154 x[0] ^= R(x[12] + x[8], 18)
78155 x[9] ^= R(x[5] + x[1], 7)
78156 x[13] ^= R(x[9] + x[5], 9)
78157 x[1] ^= R(x[13] + x[9], 13)
78158 x[5] ^= R(x[1] + x[13], 18)
78159 x[14] ^= R(x[10] + x[6], 7)
78160 x[2] ^= R(x[14] + x[10], 9)
78161 x[6] ^= R(x[2] + x[14], 13)
78162 x[10] ^= R(x[6] + x[2], 18)
78163 x[3] ^= R(x[15] + x[11], 7)
78164 x[7] ^= R(x[3] + x[15], 9)
78165 x[11] ^= R(x[7] + x[3], 13)
78166 x[15] ^= R(x[11] + x[7], 18)
78167 x[1] ^= R(x[0] + x[3], 7)
78168 x[2] ^= R(x[1] + x[0], 9)
78169 x[3] ^= R(x[2] + x[1], 13)
78170 x[0] ^= R(x[3] + x[2], 18)
78171 x[6] ^= R(x[5] + x[4], 7)
78172 x[7] ^= R(x[6] + x[5], 9)
78173 x[4] ^= R(x[7] + x[6], 13)
78174 x[5] ^= R(x[4] + x[7], 18)
78175 x[11] ^= R(x[10] + x[9], 7)
78176 x[8] ^= R(x[11] + x[10], 9)
78177 x[9] ^= R(x[8] + x[11], 13)
78178 x[10] ^= R(x[9] + x[8], 18)
78179 x[12] ^= R(x[15] + x[14], 7)
78180 x[13] ^= R(x[12] + x[15], 9)
78181 x[14] ^= R(x[13] + x[12], 13)
78182 x[15] ^= R(x[14] + x[13], 18)
78183 }
78184
78185 for (i = 0; i < 16; ++i) B32[i] = x[i] + B32[i]
78186
78187 for (i = 0; i < 16; i++) {
78188 var bi = i * 4
78189 B[bi + 0] = (B32[i] >> 0 & 0xff)
78190 B[bi + 1] = (B32[i] >> 8 & 0xff)
78191 B[bi + 2] = (B32[i] >> 16 & 0xff)
78192 B[bi + 3] = (B32[i] >> 24 & 0xff)
78193 // B.writeInt32LE(B32[i], i*4) //<--- this is signficantly slower even in Node.js
78194 }
78195 }
78196
78197 // naive approach... going back to loop unrolling may yield additional performance
78198 function blockxor (S, Si, D, Di, len) {
78199 for (var i = 0; i < len; i++) {
78200 D[Di + i] ^= S[Si + i]
78201 }
78202 }
78203 }
78204
78205 function arraycopy (src, srcPos, dest, destPos, length) {
78206 if (Buffer.isBuffer(src) && Buffer.isBuffer(dest)) {
78207 src.copy(dest, destPos, srcPos, srcPos + length)
78208 } else {
78209 while (length--) {
78210 dest[destPos++] = src[srcPos++]
78211 }
78212 }
78213 }
78214
78215 module.exports = scrypt
78216
78217 }).call(this,require("buffer").Buffer)
78218 },{"buffer":47,"crypto":56}],195:[function(require,module,exports){
78219 var Buffer = require('safe-buffer').Buffer
78220
78221 // prototype class for hash functions
78222 function Hash (blockSize, finalSize) {
78223 this._block = Buffer.alloc(blockSize)
78224 this._finalSize = finalSize
78225 this._blockSize = blockSize
78226 this._len = 0
78227 }
78228
78229 Hash.prototype.update = function (data, enc) {
78230 if (typeof data === 'string') {
78231 enc = enc || 'utf8'
78232 data = Buffer.from(data, enc)
78233 }
78234
78235 var block = this._block
78236 var blockSize = this._blockSize
78237 var length = data.length
78238 var accum = this._len
78239
78240 for (var offset = 0; offset < length;) {
78241 var assigned = accum % blockSize
78242 var remainder = Math.min(length - offset, blockSize - assigned)
78243
78244 for (var i = 0; i < remainder; i++) {
78245 block[assigned + i] = data[offset + i]
78246 }
78247
78248 accum += remainder
78249 offset += remainder
78250
78251 if ((accum % blockSize) === 0) {
78252 this._update(block)
78253 }
78254 }
78255
78256 this._len += length
78257 return this
78258 }
78259
78260 Hash.prototype.digest = function (enc) {
78261 var rem = this._len % this._blockSize
78262
78263 this._block[rem] = 0x80
78264
78265 // zero (rem + 1) trailing bits, where (rem + 1) is the smallest
78266 // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize
78267 this._block.fill(0, rem + 1)
78268
78269 if (rem >= this._finalSize) {
78270 this._update(this._block)
78271 this._block.fill(0)
78272 }
78273
78274 var bits = this._len * 8
78275
78276 // uint32
78277 if (bits <= 0xffffffff) {
78278 this._block.writeUInt32BE(bits, this._blockSize - 4)
78279
78280 // uint64
78281 } else {
78282 var lowBits = (bits & 0xffffffff) >>> 0
78283 var highBits = (bits - lowBits) / 0x100000000
78284
78285 this._block.writeUInt32BE(highBits, this._blockSize - 8)
78286 this._block.writeUInt32BE(lowBits, this._blockSize - 4)
78287 }
78288
78289 this._update(this._block)
78290 var hash = this._hash()
78291
78292 return enc ? hash.toString(enc) : hash
78293 }
78294
78295 Hash.prototype._update = function () {
78296 throw new Error('_update must be implemented by subclass')
78297 }
78298
78299 module.exports = Hash
78300
78301 },{"safe-buffer":193}],196:[function(require,module,exports){
78302 arguments[4][136][0].apply(exports,arguments)
78303 },{"./sha":197,"./sha1":198,"./sha224":199,"./sha256":200,"./sha384":201,"./sha512":202,"dup":136}],197:[function(require,module,exports){
78304 /*
78305 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
78306 * in FIPS PUB 180-1
78307 * This source code is derived from sha1.js of the same repository.
78308 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
78309 * operation was added.
78310 */
78311
78312 var inherits = require('inherits')
78313 var Hash = require('./hash')
78314 var Buffer = require('safe-buffer').Buffer
78315
78316 var K = [
78317 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
78318 ]
78319
78320 var W = new Array(80)
78321
78322 function Sha () {
78323 this.init()
78324 this._w = W
78325
78326 Hash.call(this, 64, 56)
78327 }
78328
78329 inherits(Sha, Hash)
78330
78331 Sha.prototype.init = function () {
78332 this._a = 0x67452301
78333 this._b = 0xefcdab89
78334 this._c = 0x98badcfe
78335 this._d = 0x10325476
78336 this._e = 0xc3d2e1f0
78337
78338 return this
78339 }
78340
78341 function rotl5 (num) {
78342 return (num << 5) | (num >>> 27)
78343 }
78344
78345 function rotl30 (num) {
78346 return (num << 30) | (num >>> 2)
78347 }
78348
78349 function ft (s, b, c, d) {
78350 if (s === 0) return (b & c) | ((~b) & d)
78351 if (s === 2) return (b & c) | (b & d) | (c & d)
78352 return b ^ c ^ d
78353 }
78354
78355 Sha.prototype._update = function (M) {
78356 var W = this._w
78357
78358 var a = this._a | 0
78359 var b = this._b | 0
78360 var c = this._c | 0
78361 var d = this._d | 0
78362 var e = this._e | 0
78363
78364 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
78365 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
78366
78367 for (var j = 0; j < 80; ++j) {
78368 var s = ~~(j / 20)
78369 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
78370
78371 e = d
78372 d = c
78373 c = rotl30(b)
78374 b = a
78375 a = t
78376 }
78377
78378 this._a = (a + this._a) | 0
78379 this._b = (b + this._b) | 0
78380 this._c = (c + this._c) | 0
78381 this._d = (d + this._d) | 0
78382 this._e = (e + this._e) | 0
78383 }
78384
78385 Sha.prototype._hash = function () {
78386 var H = Buffer.allocUnsafe(20)
78387
78388 H.writeInt32BE(this._a | 0, 0)
78389 H.writeInt32BE(this._b | 0, 4)
78390 H.writeInt32BE(this._c | 0, 8)
78391 H.writeInt32BE(this._d | 0, 12)
78392 H.writeInt32BE(this._e | 0, 16)
78393
78394 return H
78395 }
78396
78397 module.exports = Sha
78398
78399 },{"./hash":195,"inherits":189,"safe-buffer":193}],198:[function(require,module,exports){
78400 /*
78401 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
78402 * in FIPS PUB 180-1
78403 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
78404 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
78405 * Distributed under the BSD License
78406 * See http://pajhome.org.uk/crypt/md5 for details.
78407 */
78408
78409 var inherits = require('inherits')
78410 var Hash = require('./hash')
78411 var Buffer = require('safe-buffer').Buffer
78412
78413 var K = [
78414 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
78415 ]
78416
78417 var W = new Array(80)
78418
78419 function Sha1 () {
78420 this.init()
78421 this._w = W
78422
78423 Hash.call(this, 64, 56)
78424 }
78425
78426 inherits(Sha1, Hash)
78427
78428 Sha1.prototype.init = function () {
78429 this._a = 0x67452301
78430 this._b = 0xefcdab89
78431 this._c = 0x98badcfe
78432 this._d = 0x10325476
78433 this._e = 0xc3d2e1f0
78434
78435 return this
78436 }
78437
78438 function rotl1 (num) {
78439 return (num << 1) | (num >>> 31)
78440 }
78441
78442 function rotl5 (num) {
78443 return (num << 5) | (num >>> 27)
78444 }
78445
78446 function rotl30 (num) {
78447 return (num << 30) | (num >>> 2)
78448 }
78449
78450 function ft (s, b, c, d) {
78451 if (s === 0) return (b & c) | ((~b) & d)
78452 if (s === 2) return (b & c) | (b & d) | (c & d)
78453 return b ^ c ^ d
78454 }
78455
78456 Sha1.prototype._update = function (M) {
78457 var W = this._w
78458
78459 var a = this._a | 0
78460 var b = this._b | 0
78461 var c = this._c | 0
78462 var d = this._d | 0
78463 var e = this._e | 0
78464
78465 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
78466 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
78467
78468 for (var j = 0; j < 80; ++j) {
78469 var s = ~~(j / 20)
78470 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
78471
78472 e = d
78473 d = c
78474 c = rotl30(b)
78475 b = a
78476 a = t
78477 }
78478
78479 this._a = (a + this._a) | 0
78480 this._b = (b + this._b) | 0
78481 this._c = (c + this._c) | 0
78482 this._d = (d + this._d) | 0
78483 this._e = (e + this._e) | 0
78484 }
78485
78486 Sha1.prototype._hash = function () {
78487 var H = Buffer.allocUnsafe(20)
78488
78489 H.writeInt32BE(this._a | 0, 0)
78490 H.writeInt32BE(this._b | 0, 4)
78491 H.writeInt32BE(this._c | 0, 8)
78492 H.writeInt32BE(this._d | 0, 12)
78493 H.writeInt32BE(this._e | 0, 16)
78494
78495 return H
78496 }
78497
78498 module.exports = Sha1
78499
78500 },{"./hash":195,"inherits":189,"safe-buffer":193}],199:[function(require,module,exports){
78501 /**
78502 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
78503 * in FIPS 180-2
78504 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
78505 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
78506 *
78507 */
78508
78509 var inherits = require('inherits')
78510 var Sha256 = require('./sha256')
78511 var Hash = require('./hash')
78512 var Buffer = require('safe-buffer').Buffer
78513
78514 var W = new Array(64)
78515
78516 function Sha224 () {
78517 this.init()
78518
78519 this._w = W // new Array(64)
78520
78521 Hash.call(this, 64, 56)
78522 }
78523
78524 inherits(Sha224, Sha256)
78525
78526 Sha224.prototype.init = function () {
78527 this._a = 0xc1059ed8
78528 this._b = 0x367cd507
78529 this._c = 0x3070dd17
78530 this._d = 0xf70e5939
78531 this._e = 0xffc00b31
78532 this._f = 0x68581511
78533 this._g = 0x64f98fa7
78534 this._h = 0xbefa4fa4
78535
78536 return this
78537 }
78538
78539 Sha224.prototype._hash = function () {
78540 var H = Buffer.allocUnsafe(28)
78541
78542 H.writeInt32BE(this._a, 0)
78543 H.writeInt32BE(this._b, 4)
78544 H.writeInt32BE(this._c, 8)
78545 H.writeInt32BE(this._d, 12)
78546 H.writeInt32BE(this._e, 16)
78547 H.writeInt32BE(this._f, 20)
78548 H.writeInt32BE(this._g, 24)
78549
78550 return H
78551 }
78552
78553 module.exports = Sha224
78554
78555 },{"./hash":195,"./sha256":200,"inherits":189,"safe-buffer":193}],200:[function(require,module,exports){
78556 /**
78557 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
78558 * in FIPS 180-2
78559 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
78560 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
78561 *
78562 */
78563
78564 var inherits = require('inherits')
78565 var Hash = require('./hash')
78566 var Buffer = require('safe-buffer').Buffer
78567
78568 var K = [
78569 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
78570 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
78571 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
78572 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
78573 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
78574 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
78575 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
78576 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
78577 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
78578 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
78579 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
78580 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
78581 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
78582 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
78583 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
78584 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
78585 ]
78586
78587 var W = new Array(64)
78588
78589 function Sha256 () {
78590 this.init()
78591
78592 this._w = W // new Array(64)
78593
78594 Hash.call(this, 64, 56)
78595 }
78596
78597 inherits(Sha256, Hash)
78598
78599 Sha256.prototype.init = function () {
78600 this._a = 0x6a09e667
78601 this._b = 0xbb67ae85
78602 this._c = 0x3c6ef372
78603 this._d = 0xa54ff53a
78604 this._e = 0x510e527f
78605 this._f = 0x9b05688c
78606 this._g = 0x1f83d9ab
78607 this._h = 0x5be0cd19
78608
78609 return this
78610 }
78611
78612 function ch (x, y, z) {
78613 return z ^ (x & (y ^ z))
78614 }
78615
78616 function maj (x, y, z) {
78617 return (x & y) | (z & (x | y))
78618 }
78619
78620 function sigma0 (x) {
78621 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
78622 }
78623
78624 function sigma1 (x) {
78625 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
78626 }
78627
78628 function gamma0 (x) {
78629 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
78630 }
78631
78632 function gamma1 (x) {
78633 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
78634 }
78635
78636 Sha256.prototype._update = function (M) {
78637 var W = this._w
78638
78639 var a = this._a | 0
78640 var b = this._b | 0
78641 var c = this._c | 0
78642 var d = this._d | 0
78643 var e = this._e | 0
78644 var f = this._f | 0
78645 var g = this._g | 0
78646 var h = this._h | 0
78647
78648 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
78649 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
78650
78651 for (var j = 0; j < 64; ++j) {
78652 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
78653 var T2 = (sigma0(a) + maj(a, b, c)) | 0
78654
78655 h = g
78656 g = f
78657 f = e
78658 e = (d + T1) | 0
78659 d = c
78660 c = b
78661 b = a
78662 a = (T1 + T2) | 0
78663 }
78664
78665 this._a = (a + this._a) | 0
78666 this._b = (b + this._b) | 0
78667 this._c = (c + this._c) | 0
78668 this._d = (d + this._d) | 0
78669 this._e = (e + this._e) | 0
78670 this._f = (f + this._f) | 0
78671 this._g = (g + this._g) | 0
78672 this._h = (h + this._h) | 0
78673 }
78674
78675 Sha256.prototype._hash = function () {
78676 var H = Buffer.allocUnsafe(32)
78677
78678 H.writeInt32BE(this._a, 0)
78679 H.writeInt32BE(this._b, 4)
78680 H.writeInt32BE(this._c, 8)
78681 H.writeInt32BE(this._d, 12)
78682 H.writeInt32BE(this._e, 16)
78683 H.writeInt32BE(this._f, 20)
78684 H.writeInt32BE(this._g, 24)
78685 H.writeInt32BE(this._h, 28)
78686
78687 return H
78688 }
78689
78690 module.exports = Sha256
78691
78692 },{"./hash":195,"inherits":189,"safe-buffer":193}],201:[function(require,module,exports){
78693 var inherits = require('inherits')
78694 var SHA512 = require('./sha512')
78695 var Hash = require('./hash')
78696 var Buffer = require('safe-buffer').Buffer
78697
78698 var W = new Array(160)
78699
78700 function Sha384 () {
78701 this.init()
78702 this._w = W
78703
78704 Hash.call(this, 128, 112)
78705 }
78706
78707 inherits(Sha384, SHA512)
78708
78709 Sha384.prototype.init = function () {
78710 this._ah = 0xcbbb9d5d
78711 this._bh = 0x629a292a
78712 this._ch = 0x9159015a
78713 this._dh = 0x152fecd8
78714 this._eh = 0x67332667
78715 this._fh = 0x8eb44a87
78716 this._gh = 0xdb0c2e0d
78717 this._hh = 0x47b5481d
78718
78719 this._al = 0xc1059ed8
78720 this._bl = 0x367cd507
78721 this._cl = 0x3070dd17
78722 this._dl = 0xf70e5939
78723 this._el = 0xffc00b31
78724 this._fl = 0x68581511
78725 this._gl = 0x64f98fa7
78726 this._hl = 0xbefa4fa4
78727
78728 return this
78729 }
78730
78731 Sha384.prototype._hash = function () {
78732 var H = Buffer.allocUnsafe(48)
78733
78734 function writeInt64BE (h, l, offset) {
78735 H.writeInt32BE(h, offset)
78736 H.writeInt32BE(l, offset + 4)
78737 }
78738
78739 writeInt64BE(this._ah, this._al, 0)
78740 writeInt64BE(this._bh, this._bl, 8)
78741 writeInt64BE(this._ch, this._cl, 16)
78742 writeInt64BE(this._dh, this._dl, 24)
78743 writeInt64BE(this._eh, this._el, 32)
78744 writeInt64BE(this._fh, this._fl, 40)
78745
78746 return H
78747 }
78748
78749 module.exports = Sha384
78750
78751 },{"./hash":195,"./sha512":202,"inherits":189,"safe-buffer":193}],202:[function(require,module,exports){
78752 var inherits = require('inherits')
78753 var Hash = require('./hash')
78754 var Buffer = require('safe-buffer').Buffer
78755
78756 var K = [
78757 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
78758 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
78759 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
78760 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
78761 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
78762 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
78763 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
78764 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
78765 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
78766 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
78767 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
78768 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
78769 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
78770 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
78771 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
78772 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
78773 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
78774 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
78775 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
78776 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
78777 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
78778 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
78779 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
78780 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
78781 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
78782 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
78783 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
78784 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
78785 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
78786 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
78787 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
78788 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
78789 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
78790 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
78791 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
78792 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
78793 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
78794 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
78795 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
78796 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
78797 ]
78798
78799 var W = new Array(160)
78800
78801 function Sha512 () {
78802 this.init()
78803 this._w = W
78804
78805 Hash.call(this, 128, 112)
78806 }
78807
78808 inherits(Sha512, Hash)
78809
78810 Sha512.prototype.init = function () {
78811 this._ah = 0x6a09e667
78812 this._bh = 0xbb67ae85
78813 this._ch = 0x3c6ef372
78814 this._dh = 0xa54ff53a
78815 this._eh = 0x510e527f
78816 this._fh = 0x9b05688c
78817 this._gh = 0x1f83d9ab
78818 this._hh = 0x5be0cd19
78819
78820 this._al = 0xf3bcc908
78821 this._bl = 0x84caa73b
78822 this._cl = 0xfe94f82b
78823 this._dl = 0x5f1d36f1
78824 this._el = 0xade682d1
78825 this._fl = 0x2b3e6c1f
78826 this._gl = 0xfb41bd6b
78827 this._hl = 0x137e2179
78828
78829 return this
78830 }
78831
78832 function Ch (x, y, z) {
78833 return z ^ (x & (y ^ z))
78834 }
78835
78836 function maj (x, y, z) {
78837 return (x & y) | (z & (x | y))
78838 }
78839
78840 function sigma0 (x, xl) {
78841 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
78842 }
78843
78844 function sigma1 (x, xl) {
78845 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
78846 }
78847
78848 function Gamma0 (x, xl) {
78849 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
78850 }
78851
78852 function Gamma0l (x, xl) {
78853 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
78854 }
78855
78856 function Gamma1 (x, xl) {
78857 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
78858 }
78859
78860 function Gamma1l (x, xl) {
78861 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
78862 }
78863
78864 function getCarry (a, b) {
78865 return (a >>> 0) < (b >>> 0) ? 1 : 0
78866 }
78867
78868 Sha512.prototype._update = function (M) {
78869 var W = this._w
78870
78871 var ah = this._ah | 0
78872 var bh = this._bh | 0
78873 var ch = this._ch | 0
78874 var dh = this._dh | 0
78875 var eh = this._eh | 0
78876 var fh = this._fh | 0
78877 var gh = this._gh | 0
78878 var hh = this._hh | 0
78879
78880 var al = this._al | 0
78881 var bl = this._bl | 0
78882 var cl = this._cl | 0
78883 var dl = this._dl | 0
78884 var el = this._el | 0
78885 var fl = this._fl | 0
78886 var gl = this._gl | 0
78887 var hl = this._hl | 0
78888
78889 for (var i = 0; i < 32; i += 2) {
78890 W[i] = M.readInt32BE(i * 4)
78891 W[i + 1] = M.readInt32BE(i * 4 + 4)
78892 }
78893 for (; i < 160; i += 2) {
78894 var xh = W[i - 15 * 2]
78895 var xl = W[i - 15 * 2 + 1]
78896 var gamma0 = Gamma0(xh, xl)
78897 var gamma0l = Gamma0l(xl, xh)
78898
78899 xh = W[i - 2 * 2]
78900 xl = W[i - 2 * 2 + 1]
78901 var gamma1 = Gamma1(xh, xl)
78902 var gamma1l = Gamma1l(xl, xh)
78903
78904 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
78905 var Wi7h = W[i - 7 * 2]
78906 var Wi7l = W[i - 7 * 2 + 1]
78907
78908 var Wi16h = W[i - 16 * 2]
78909 var Wi16l = W[i - 16 * 2 + 1]
78910
78911 var Wil = (gamma0l + Wi7l) | 0
78912 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
78913 Wil = (Wil + gamma1l) | 0
78914 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
78915 Wil = (Wil + Wi16l) | 0
78916 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
78917
78918 W[i] = Wih
78919 W[i + 1] = Wil
78920 }
78921
78922 for (var j = 0; j < 160; j += 2) {
78923 Wih = W[j]
78924 Wil = W[j + 1]
78925
78926 var majh = maj(ah, bh, ch)
78927 var majl = maj(al, bl, cl)
78928
78929 var sigma0h = sigma0(ah, al)
78930 var sigma0l = sigma0(al, ah)
78931 var sigma1h = sigma1(eh, el)
78932 var sigma1l = sigma1(el, eh)
78933
78934 // t1 = h + sigma1 + ch + K[j] + W[j]
78935 var Kih = K[j]
78936 var Kil = K[j + 1]
78937
78938 var chh = Ch(eh, fh, gh)
78939 var chl = Ch(el, fl, gl)
78940
78941 var t1l = (hl + sigma1l) | 0
78942 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
78943 t1l = (t1l + chl) | 0
78944 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
78945 t1l = (t1l + Kil) | 0
78946 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
78947 t1l = (t1l + Wil) | 0
78948 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
78949
78950 // t2 = sigma0 + maj
78951 var t2l = (sigma0l + majl) | 0
78952 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
78953
78954 hh = gh
78955 hl = gl
78956 gh = fh
78957 gl = fl
78958 fh = eh
78959 fl = el
78960 el = (dl + t1l) | 0
78961 eh = (dh + t1h + getCarry(el, dl)) | 0
78962 dh = ch
78963 dl = cl
78964 ch = bh
78965 cl = bl
78966 bh = ah
78967 bl = al
78968 al = (t1l + t2l) | 0
78969 ah = (t1h + t2h + getCarry(al, t1l)) | 0
78970 }
78971
78972 this._al = (this._al + al) | 0
78973 this._bl = (this._bl + bl) | 0
78974 this._cl = (this._cl + cl) | 0
78975 this._dl = (this._dl + dl) | 0
78976 this._el = (this._el + el) | 0
78977 this._fl = (this._fl + fl) | 0
78978 this._gl = (this._gl + gl) | 0
78979 this._hl = (this._hl + hl) | 0
78980
78981 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
78982 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
78983 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
78984 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
78985 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
78986 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
78987 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
78988 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
78989 }
78990
78991 Sha512.prototype._hash = function () {
78992 var H = Buffer.allocUnsafe(64)
78993
78994 function writeInt64BE (h, l, offset) {
78995 H.writeInt32BE(h, offset)
78996 H.writeInt32BE(l, offset + 4)
78997 }
78998
78999 writeInt64BE(this._ah, this._al, 0)
79000 writeInt64BE(this._bh, this._bl, 8)
79001 writeInt64BE(this._ch, this._cl, 16)
79002 writeInt64BE(this._dh, this._dl, 24)
79003 writeInt64BE(this._eh, this._el, 32)
79004 writeInt64BE(this._fh, this._fl, 40)
79005 writeInt64BE(this._gh, this._gl, 48)
79006 writeInt64BE(this._hh, this._hl, 56)
79007
79008 return H
79009 }
79010
79011 module.exports = Sha512
79012
79013 },{"./hash":195,"inherits":189,"safe-buffer":193}]},{},[150])(150)
79014 });</script>
79015 <script>(function() {
79016
79017 // p2wpkh
79018
79019 bitcoinjs.bitcoin.networks.bitcoin.p2wpkh = {
79020 baseNetwork: "bitcoin",
79021 messagePrefix: '\x18Bitcoin Signed Message:\n',
79022 bech32: 'bc',
79023 bip32: {
79024 public: 0x04b24746,
79025 private: 0x04b2430c
79026 },
79027 pubKeyHash: 0x00,
79028 scriptHash: 0x05,
79029 wif: 0x80
79030 };
79031
79032 // p2wpkh in p2sh
79033
79034 bitcoinjs.bitcoin.networks.bitcoin.p2wpkhInP2sh = {
79035 baseNetwork: "bitcoin",
79036 messagePrefix: '\x18Bitcoin Signed Message:\n',
79037 bech32: 'bc',
79038 bip32: {
79039 public: 0x049d7cb2,
79040 private: 0x049d7878
79041 },
79042 pubKeyHash: 0x00,
79043 scriptHash: 0x05,
79044 wif: 0x80
79045 };
79046
79047 bitcoinjs.bitcoin.networks.testnet.p2wpkhInP2sh = {
79048 baseNetwork: "testnet",
79049 messagePrefix: '\x18Bitcoin Signed Message:\n',
79050 bech32: 'tb',
79051 bip32: {
79052 public: 0x044a5262,
79053 private: 0x044a4e28
79054 },
79055 pubKeyHash: 0x6f,
79056 scriptHash: 0xc4,
79057 wif: 0xef
79058 };
79059
79060 bitcoinjs.bitcoin.networks.litecoin.p2wpkhInP2sh = {
79061 baseNetwork: "litecoin",
79062 messagePrefix: '\x19Litecoin Signed Message:\n',
79063 bip32: {
79064 public: 0x01b26ef6,
79065 private: 0x01b26792
79066 },
79067 pubKeyHash: 0x30,
79068 scriptHash: 0x32,
79069 wif: 0xb0
79070 };
79071
79072 })();
79073 </script>
79074 <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){
79075 (function (global){
79076 'use strict';
79077
79078 // compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
79079 // original notice:
79080
79081 /*!
79082 * The buffer module from node.js, for the browser.
79083 *
79084 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
79085 * @license MIT
79086 */
79087 function compare(a, b) {
79088 if (a === b) {
79089 return 0;
79090 }
79091
79092 var x = a.length;
79093 var y = b.length;
79094
79095 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
79096 if (a[i] !== b[i]) {
79097 x = a[i];
79098 y = b[i];
79099 break;
79100 }
79101 }
79102
79103 if (x < y) {
79104 return -1;
79105 }
79106 if (y < x) {
79107 return 1;
79108 }
79109 return 0;
79110 }
79111 function isBuffer(b) {
79112 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
79113 return global.Buffer.isBuffer(b);
79114 }
79115 return !!(b != null && b._isBuffer);
79116 }
79117
79118 // based on node assert, original notice:
79119
79120 // http://wiki.commonjs.org/wiki/Unit_Testing/1.0
79121 //
79122 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
79123 //
79124 // Originally from narwhal.js (http://narwhaljs.org)
79125 // Copyright (c) 2009 Thomas Robinson <280north.com>
79126 //
79127 // Permission is hereby granted, free of charge, to any person obtaining a copy
79128 // of this software and associated documentation files (the 'Software'), to
79129 // deal in the Software without restriction, including without limitation the
79130 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
79131 // sell copies of the Software, and to permit persons to whom the Software is
79132 // furnished to do so, subject to the following conditions:
79133 //
79134 // The above copyright notice and this permission notice shall be included in
79135 // all copies or substantial portions of the Software.
79136 //
79137 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
79138 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
79139 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
79140 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
79141 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
79142 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
79143
79144 var util = require('util/');
79145 var hasOwn = Object.prototype.hasOwnProperty;
79146 var pSlice = Array.prototype.slice;
79147 var functionsHaveNames = (function () {
79148 return function foo() {}.name === 'foo';
79149 }());
79150 function pToString (obj) {
79151 return Object.prototype.toString.call(obj);
79152 }
79153 function isView(arrbuf) {
79154 if (isBuffer(arrbuf)) {
79155 return false;
79156 }
79157 if (typeof global.ArrayBuffer !== 'function') {
79158 return false;
79159 }
79160 if (typeof ArrayBuffer.isView === 'function') {
79161 return ArrayBuffer.isView(arrbuf);
79162 }
79163 if (!arrbuf) {
79164 return false;
79165 }
79166 if (arrbuf instanceof DataView) {
79167 return true;
79168 }
79169 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
79170 return true;
79171 }
79172 return false;
79173 }
79174 // 1. The assert module provides functions that throw
79175 // AssertionError's when particular conditions are not met. The
79176 // assert module must conform to the following interface.
79177
79178 var assert = module.exports = ok;
79179
79180 // 2. The AssertionError is defined in assert.
79181 // new assert.AssertionError({ message: message,
79182 // actual: actual,
79183 // expected: expected })
79184
79185 var regex = /\s*function\s+([^\(\s]*)\s*/;
79186 // based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
79187 function getName(func) {
79188 if (!util.isFunction(func)) {
79189 return;
79190 }
79191 if (functionsHaveNames) {
79192 return func.name;
79193 }
79194 var str = func.toString();
79195 var match = str.match(regex);
79196 return match && match[1];
79197 }
79198 assert.AssertionError = function AssertionError(options) {
79199 this.name = 'AssertionError';
79200 this.actual = options.actual;
79201 this.expected = options.expected;
79202 this.operator = options.operator;
79203 if (options.message) {
79204 this.message = options.message;
79205 this.generatedMessage = false;
79206 } else {
79207 this.message = getMessage(this);
79208 this.generatedMessage = true;
79209 }
79210 var stackStartFunction = options.stackStartFunction || fail;
79211 if (Error.captureStackTrace) {
79212 Error.captureStackTrace(this, stackStartFunction);
79213 } else {
79214 // non v8 browsers so we can have a stacktrace
79215 var err = new Error();
79216 if (err.stack) {
79217 var out = err.stack;
79218
79219 // try to strip useless frames
79220 var fn_name = getName(stackStartFunction);
79221 var idx = out.indexOf('\n' + fn_name);
79222 if (idx >= 0) {
79223 // once we have located the function frame
79224 // we need to strip out everything before it (and its line)
79225 var next_line = out.indexOf('\n', idx + 1);
79226 out = out.substring(next_line + 1);
79227 }
79228
79229 this.stack = out;
79230 }
79231 }
79232 };
79233
79234 // assert.AssertionError instanceof Error
79235 util.inherits(assert.AssertionError, Error);
79236
79237 function truncate(s, n) {
79238 if (typeof s === 'string') {
79239 return s.length < n ? s : s.slice(0, n);
79240 } else {
79241 return s;
79242 }
79243 }
79244 function inspect(something) {
79245 if (functionsHaveNames || !util.isFunction(something)) {
79246 return util.inspect(something);
79247 }
79248 var rawname = getName(something);
79249 var name = rawname ? ': ' + rawname : '';
79250 return '[Function' + name + ']';
79251 }
79252 function getMessage(self) {
79253 return truncate(inspect(self.actual), 128) + ' ' +
79254 self.operator + ' ' +
79255 truncate(inspect(self.expected), 128);
79256 }
79257
79258 // At present only the three keys mentioned above are used and
79259 // understood by the spec. Implementations or sub modules can pass
79260 // other keys to the AssertionError's constructor - they will be
79261 // ignored.
79262
79263 // 3. All of the following functions must throw an AssertionError
79264 // when a corresponding condition is not met, with a message that
79265 // may be undefined if not provided. All assertion methods provide
79266 // both the actual and expected values to the assertion error for
79267 // display purposes.
79268
79269 function fail(actual, expected, message, operator, stackStartFunction) {
79270 throw new assert.AssertionError({
79271 message: message,
79272 actual: actual,
79273 expected: expected,
79274 operator: operator,
79275 stackStartFunction: stackStartFunction
79276 });
79277 }
79278
79279 // EXTENSION! allows for well behaved errors defined elsewhere.
79280 assert.fail = fail;
79281
79282 // 4. Pure assertion tests whether a value is truthy, as determined
79283 // by !!guard.
79284 // assert.ok(guard, message_opt);
79285 // This statement is equivalent to assert.equal(true, !!guard,
79286 // message_opt);. To test strictly for the value true, use
79287 // assert.strictEqual(true, guard, message_opt);.
79288
79289 function ok(value, message) {
79290 if (!value) fail(value, true, message, '==', assert.ok);
79291 }
79292 assert.ok = ok;
79293
79294 // 5. The equality assertion tests shallow, coercive equality with
79295 // ==.
79296 // assert.equal(actual, expected, message_opt);
79297
79298 assert.equal = function equal(actual, expected, message) {
79299 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
79300 };
79301
79302 // 6. The non-equality assertion tests for whether two objects are not equal
79303 // with != assert.notEqual(actual, expected, message_opt);
79304
79305 assert.notEqual = function notEqual(actual, expected, message) {
79306 if (actual == expected) {
79307 fail(actual, expected, message, '!=', assert.notEqual);
79308 }
79309 };
79310
79311 // 7. The equivalence assertion tests a deep equality relation.
79312 // assert.deepEqual(actual, expected, message_opt);
79313
79314 assert.deepEqual = function deepEqual(actual, expected, message) {
79315 if (!_deepEqual(actual, expected, false)) {
79316 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
79317 }
79318 };
79319
79320 assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
79321 if (!_deepEqual(actual, expected, true)) {
79322 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
79323 }
79324 };
79325
79326 function _deepEqual(actual, expected, strict, memos) {
79327 // 7.1. All identical values are equivalent, as determined by ===.
79328 if (actual === expected) {
79329 return true;
79330 } else if (isBuffer(actual) && isBuffer(expected)) {
79331 return compare(actual, expected) === 0;
79332
79333 // 7.2. If the expected value is a Date object, the actual value is
79334 // equivalent if it is also a Date object that refers to the same time.
79335 } else if (util.isDate(actual) && util.isDate(expected)) {
79336 return actual.getTime() === expected.getTime();
79337
79338 // 7.3 If the expected value is a RegExp object, the actual value is
79339 // equivalent if it is also a RegExp object with the same source and
79340 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
79341 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
79342 return actual.source === expected.source &&
79343 actual.global === expected.global &&
79344 actual.multiline === expected.multiline &&
79345 actual.lastIndex === expected.lastIndex &&
79346 actual.ignoreCase === expected.ignoreCase;
79347
79348 // 7.4. Other pairs that do not both pass typeof value == 'object',
79349 // equivalence is determined by ==.
79350 } else if ((actual === null || typeof actual !== 'object') &&
79351 (expected === null || typeof expected !== 'object')) {
79352 return strict ? actual === expected : actual == expected;
79353
79354 // If both values are instances of typed arrays, wrap their underlying
79355 // ArrayBuffers in a Buffer each to increase performance
79356 // This optimization requires the arrays to have the same type as checked by
79357 // Object.prototype.toString (aka pToString). Never perform binary
79358 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
79359 // bit patterns are not identical.
79360 } else if (isView(actual) && isView(expected) &&
79361 pToString(actual) === pToString(expected) &&
79362 !(actual instanceof Float32Array ||
79363 actual instanceof Float64Array)) {
79364 return compare(new Uint8Array(actual.buffer),
79365 new Uint8Array(expected.buffer)) === 0;
79366
79367 // 7.5 For all other Object pairs, including Array objects, equivalence is
79368 // determined by having the same number of owned properties (as verified
79369 // with Object.prototype.hasOwnProperty.call), the same set of keys
79370 // (although not necessarily the same order), equivalent values for every
79371 // corresponding key, and an identical 'prototype' property. Note: this
79372 // accounts for both named and indexed properties on Arrays.
79373 } else if (isBuffer(actual) !== isBuffer(expected)) {
79374 return false;
79375 } else {
79376 memos = memos || {actual: [], expected: []};
79377
79378 var actualIndex = memos.actual.indexOf(actual);
79379 if (actualIndex !== -1) {
79380 if (actualIndex === memos.expected.indexOf(expected)) {
79381 return true;
79382 }
79383 }
79384
79385 memos.actual.push(actual);
79386 memos.expected.push(expected);
79387
79388 return objEquiv(actual, expected, strict, memos);
79389 }
79390 }
79391
79392 function isArguments(object) {
79393 return Object.prototype.toString.call(object) == '[object Arguments]';
79394 }
79395
79396 function objEquiv(a, b, strict, actualVisitedObjects) {
79397 if (a === null || a === undefined || b === null || b === undefined)
79398 return false;
79399 // if one is a primitive, the other must be same
79400 if (util.isPrimitive(a) || util.isPrimitive(b))
79401 return a === b;
79402 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
79403 return false;
79404 var aIsArgs = isArguments(a);
79405 var bIsArgs = isArguments(b);
79406 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
79407 return false;
79408 if (aIsArgs) {
79409 a = pSlice.call(a);
79410 b = pSlice.call(b);
79411 return _deepEqual(a, b, strict);
79412 }
79413 var ka = objectKeys(a);
79414 var kb = objectKeys(b);
79415 var key, i;
79416 // having the same number of owned properties (keys incorporates
79417 // hasOwnProperty)
79418 if (ka.length !== kb.length)
79419 return false;
79420 //the same set of keys (although not necessarily the same order),
79421 ka.sort();
79422 kb.sort();
79423 //~~~cheap key test
79424 for (i = ka.length - 1; i >= 0; i--) {
79425 if (ka[i] !== kb[i])
79426 return false;
79427 }
79428 //equivalent values for every corresponding key, and
79429 //~~~possibly expensive deep test
79430 for (i = ka.length - 1; i >= 0; i--) {
79431 key = ka[i];
79432 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
79433 return false;
79434 }
79435 return true;
79436 }
79437
79438 // 8. The non-equivalence assertion tests for any deep inequality.
79439 // assert.notDeepEqual(actual, expected, message_opt);
79440
79441 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
79442 if (_deepEqual(actual, expected, false)) {
79443 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
79444 }
79445 };
79446
79447 assert.notDeepStrictEqual = notDeepStrictEqual;
79448 function notDeepStrictEqual(actual, expected, message) {
79449 if (_deepEqual(actual, expected, true)) {
79450 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
79451 }
79452 }
79453
79454
79455 // 9. The strict equality assertion tests strict equality, as determined by ===.
79456 // assert.strictEqual(actual, expected, message_opt);
79457
79458 assert.strictEqual = function strictEqual(actual, expected, message) {
79459 if (actual !== expected) {
79460 fail(actual, expected, message, '===', assert.strictEqual);
79461 }
79462 };
79463
79464 // 10. The strict non-equality assertion tests for strict inequality, as
79465 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
79466
79467 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
79468 if (actual === expected) {
79469 fail(actual, expected, message, '!==', assert.notStrictEqual);
79470 }
79471 };
79472
79473 function expectedException(actual, expected) {
79474 if (!actual || !expected) {
79475 return false;
79476 }
79477
79478 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
79479 return expected.test(actual);
79480 }
79481
79482 try {
79483 if (actual instanceof expected) {
79484 return true;
79485 }
79486 } catch (e) {
79487 // Ignore. The instanceof check doesn't work for arrow functions.
79488 }
79489
79490 if (Error.isPrototypeOf(expected)) {
79491 return false;
79492 }
79493
79494 return expected.call({}, actual) === true;
79495 }
79496
79497 function _tryBlock(block) {
79498 var error;
79499 try {
79500 block();
79501 } catch (e) {
79502 error = e;
79503 }
79504 return error;
79505 }
79506
79507 function _throws(shouldThrow, block, expected, message) {
79508 var actual;
79509
79510 if (typeof block !== 'function') {
79511 throw new TypeError('"block" argument must be a function');
79512 }
79513
79514 if (typeof expected === 'string') {
79515 message = expected;
79516 expected = null;
79517 }
79518
79519 actual = _tryBlock(block);
79520
79521 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
79522 (message ? ' ' + message : '.');
79523
79524 if (shouldThrow && !actual) {
79525 fail(actual, expected, 'Missing expected exception' + message);
79526 }
79527
79528 var userProvidedMessage = typeof message === 'string';
79529 var isUnwantedException = !shouldThrow && util.isError(actual);
79530 var isUnexpectedException = !shouldThrow && actual && !expected;
79531
79532 if ((isUnwantedException &&
79533 userProvidedMessage &&
79534 expectedException(actual, expected)) ||
79535 isUnexpectedException) {
79536 fail(actual, expected, 'Got unwanted exception' + message);
79537 }
79538
79539 if ((shouldThrow && actual && expected &&
79540 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
79541 throw actual;
79542 }
79543 }
79544
79545 // 11. Expected to throw an error:
79546 // assert.throws(block, Error_opt, message_opt);
79547
79548 assert.throws = function(block, /*optional*/error, /*optional*/message) {
79549 _throws(true, block, error, message);
79550 };
79551
79552 // EXTENSION! This is annoying to write outside this module.
79553 assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
79554 _throws(false, block, error, message);
79555 };
79556
79557 assert.ifError = function(err) { if (err) throw err; };
79558
79559 var objectKeys = Object.keys || function (obj) {
79560 var keys = [];
79561 for (var key in obj) {
79562 if (hasOwn.call(obj, key)) keys.push(key);
79563 }
79564 return keys;
79565 };
79566
79567 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
79568 },{"util/":30}],2:[function(require,module,exports){
79569 'use strict'
79570
79571 exports.byteLength = byteLength
79572 exports.toByteArray = toByteArray
79573 exports.fromByteArray = fromByteArray
79574
79575 var lookup = []
79576 var revLookup = []
79577 var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
79578
79579 var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
79580 for (var i = 0, len = code.length; i < len; ++i) {
79581 lookup[i] = code[i]
79582 revLookup[code.charCodeAt(i)] = i
79583 }
79584
79585 revLookup['-'.charCodeAt(0)] = 62
79586 revLookup['_'.charCodeAt(0)] = 63
79587
79588 function placeHoldersCount (b64) {
79589 var len = b64.length
79590 if (len % 4 > 0) {
79591 throw new Error('Invalid string. Length must be a multiple of 4')
79592 }
79593
79594 // the number of equal signs (place holders)
79595 // if there are two placeholders, than the two characters before it
79596 // represent one byte
79597 // if there is only one, then the three characters before it represent 2 bytes
79598 // this is just a cheap hack to not do indexOf twice
79599 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
79600 }
79601
79602 function byteLength (b64) {
79603 // base64 is 4/3 + up to two characters of the original data
79604 return b64.length * 3 / 4 - placeHoldersCount(b64)
79605 }
79606
79607 function toByteArray (b64) {
79608 var i, j, l, tmp, placeHolders, arr
79609 var len = b64.length
79610 placeHolders = placeHoldersCount(b64)
79611
79612 arr = new Arr(len * 3 / 4 - placeHolders)
79613
79614 // if there are placeholders, only get up to the last complete 4 chars
79615 l = placeHolders > 0 ? len - 4 : len
79616
79617 var L = 0
79618
79619 for (i = 0, j = 0; i < l; i += 4, j += 3) {
79620 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
79621 arr[L++] = (tmp >> 16) & 0xFF
79622 arr[L++] = (tmp >> 8) & 0xFF
79623 arr[L++] = tmp & 0xFF
79624 }
79625
79626 if (placeHolders === 2) {
79627 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
79628 arr[L++] = tmp & 0xFF
79629 } else if (placeHolders === 1) {
79630 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
79631 arr[L++] = (tmp >> 8) & 0xFF
79632 arr[L++] = tmp & 0xFF
79633 }
79634
79635 return arr
79636 }
79637
79638 function tripletToBase64 (num) {
79639 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
79640 }
79641
79642 function encodeChunk (uint8, start, end) {
79643 var tmp
79644 var output = []
79645 for (var i = start; i < end; i += 3) {
79646 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
79647 output.push(tripletToBase64(tmp))
79648 }
79649 return output.join('')
79650 }
79651
79652 function fromByteArray (uint8) {
79653 var tmp
79654 var len = uint8.length
79655 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
79656 var output = ''
79657 var parts = []
79658 var maxChunkLength = 16383 // must be multiple of 3
79659
79660 // go through the array every three bytes, we'll deal with trailing stuff later
79661 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
79662 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
79663 }
79664
79665 // pad the end with zeros, but make sure to not forget the extra bytes
79666 if (extraBytes === 1) {
79667 tmp = uint8[len - 1]
79668 output += lookup[tmp >> 2]
79669 output += lookup[(tmp << 4) & 0x3F]
79670 output += '=='
79671 } else if (extraBytes === 2) {
79672 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
79673 output += lookup[tmp >> 10]
79674 output += lookup[(tmp >> 4) & 0x3F]
79675 output += lookup[(tmp << 2) & 0x3F]
79676 output += '='
79677 }
79678
79679 parts.push(output)
79680
79681 return parts.join('')
79682 }
79683
79684 },{}],3:[function(require,module,exports){
79685
79686 },{}],4:[function(require,module,exports){
79687 (function (global){
79688 'use strict';
79689
79690 var buffer = require('buffer');
79691 var Buffer = buffer.Buffer;
79692 var SlowBuffer = buffer.SlowBuffer;
79693 var MAX_LEN = buffer.kMaxLength || 2147483647;
79694 exports.alloc = function alloc(size, fill, encoding) {
79695 if (typeof Buffer.alloc === 'function') {
79696 return Buffer.alloc(size, fill, encoding);
79697 }
79698 if (typeof encoding === 'number') {
79699 throw new TypeError('encoding must not be number');
79700 }
79701 if (typeof size !== 'number') {
79702 throw new TypeError('size must be a number');
79703 }
79704 if (size > MAX_LEN) {
79705 throw new RangeError('size is too large');
79706 }
79707 var enc = encoding;
79708 var _fill = fill;
79709 if (_fill === undefined) {
79710 enc = undefined;
79711 _fill = 0;
79712 }
79713 var buf = new Buffer(size);
79714 if (typeof _fill === 'string') {
79715 var fillBuf = new Buffer(_fill, enc);
79716 var flen = fillBuf.length;
79717 var i = -1;
79718 while (++i < size) {
79719 buf[i] = fillBuf[i % flen];
79720 }
79721 } else {
79722 buf.fill(_fill);
79723 }
79724 return buf;
79725 }
79726 exports.allocUnsafe = function allocUnsafe(size) {
79727 if (typeof Buffer.allocUnsafe === 'function') {
79728 return Buffer.allocUnsafe(size);
79729 }
79730 if (typeof size !== 'number') {
79731 throw new TypeError('size must be a number');
79732 }
79733 if (size > MAX_LEN) {
79734 throw new RangeError('size is too large');
79735 }
79736 return new Buffer(size);
79737 }
79738 exports.from = function from(value, encodingOrOffset, length) {
79739 if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
79740 return Buffer.from(value, encodingOrOffset, length);
79741 }
79742 if (typeof value === 'number') {
79743 throw new TypeError('"value" argument must not be a number');
79744 }
79745 if (typeof value === 'string') {
79746 return new Buffer(value, encodingOrOffset);
79747 }
79748 if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
79749 var offset = encodingOrOffset;
79750 if (arguments.length === 1) {
79751 return new Buffer(value);
79752 }
79753 if (typeof offset === 'undefined') {
79754 offset = 0;
79755 }
79756 var len = length;
79757 if (typeof len === 'undefined') {
79758 len = value.byteLength - offset;
79759 }
79760 if (offset >= value.byteLength) {
79761 throw new RangeError('\'offset\' is out of bounds');
79762 }
79763 if (len > value.byteLength - offset) {
79764 throw new RangeError('\'length\' is out of bounds');
79765 }
79766 return new Buffer(value.slice(offset, offset + len));
79767 }
79768 if (Buffer.isBuffer(value)) {
79769 var out = new Buffer(value.length);
79770 value.copy(out, 0, 0, value.length);
79771 return out;
79772 }
79773 if (value) {
79774 if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
79775 return new Buffer(value);
79776 }
79777 if (value.type === 'Buffer' && Array.isArray(value.data)) {
79778 return new Buffer(value.data);
79779 }
79780 }
79781
79782 throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
79783 }
79784 exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
79785 if (typeof Buffer.allocUnsafeSlow === 'function') {
79786 return Buffer.allocUnsafeSlow(size);
79787 }
79788 if (typeof size !== 'number') {
79789 throw new TypeError('size must be a number');
79790 }
79791 if (size >= MAX_LEN) {
79792 throw new RangeError('size is too large');
79793 }
79794 return new SlowBuffer(size);
79795 }
79796
79797 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
79798 },{"buffer":5}],5:[function(require,module,exports){
79799 /*!
79800 * The buffer module from node.js, for the browser.
79801 *
79802 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
79803 * @license MIT
79804 */
79805 /* eslint-disable no-proto */
79806
79807 'use strict'
79808
79809 var base64 = require('base64-js')
79810 var ieee754 = require('ieee754')
79811
79812 exports.Buffer = Buffer
79813 exports.SlowBuffer = SlowBuffer
79814 exports.INSPECT_MAX_BYTES = 50
79815
79816 var K_MAX_LENGTH = 0x7fffffff
79817 exports.kMaxLength = K_MAX_LENGTH
79818
79819 /**
79820 * If `Buffer.TYPED_ARRAY_SUPPORT`:
79821 * === true Use Uint8Array implementation (fastest)
79822 * === false Print warning and recommend using `buffer` v4.x which has an Object
79823 * implementation (most compatible, even IE6)
79824 *
79825 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
79826 * Opera 11.6+, iOS 4.2+.
79827 *
79828 * We report that the browser does not support typed arrays if the are not subclassable
79829 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
79830 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
79831 * for __proto__ and has a buggy typed array implementation.
79832 */
79833 Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
79834
79835 if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
79836 typeof console.error === 'function') {
79837 console.error(
79838 'This browser lacks typed array (Uint8Array) support which is required by ' +
79839 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
79840 )
79841 }
79842
79843 function typedArraySupport () {
79844 // Can typed array instances can be augmented?
79845 try {
79846 var arr = new Uint8Array(1)
79847 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
79848 return arr.foo() === 42
79849 } catch (e) {
79850 return false
79851 }
79852 }
79853
79854 function createBuffer (length) {
79855 if (length > K_MAX_LENGTH) {
79856 throw new RangeError('Invalid typed array length')
79857 }
79858 // Return an augmented `Uint8Array` instance
79859 var buf = new Uint8Array(length)
79860 buf.__proto__ = Buffer.prototype
79861 return buf
79862 }
79863
79864 /**
79865 * The Buffer constructor returns instances of `Uint8Array` that have their
79866 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
79867 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
79868 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
79869 * returns a single octet.
79870 *
79871 * The `Uint8Array` prototype remains unmodified.
79872 */
79873
79874 function Buffer (arg, encodingOrOffset, length) {
79875 // Common case.
79876 if (typeof arg === 'number') {
79877 if (typeof encodingOrOffset === 'string') {
79878 throw new Error(
79879 'If encoding is specified then the first argument must be a string'
79880 )
79881 }
79882 return allocUnsafe(arg)
79883 }
79884 return from(arg, encodingOrOffset, length)
79885 }
79886
79887 // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
79888 if (typeof Symbol !== 'undefined' && Symbol.species &&
79889 Buffer[Symbol.species] === Buffer) {
79890 Object.defineProperty(Buffer, Symbol.species, {
79891 value: null,
79892 configurable: true,
79893 enumerable: false,
79894 writable: false
79895 })
79896 }
79897
79898 Buffer.poolSize = 8192 // not used by this implementation
79899
79900 function from (value, encodingOrOffset, length) {
79901 if (typeof value === 'number') {
79902 throw new TypeError('"value" argument must not be a number')
79903 }
79904
79905 if (value instanceof ArrayBuffer) {
79906 return fromArrayBuffer(value, encodingOrOffset, length)
79907 }
79908
79909 if (typeof value === 'string') {
79910 return fromString(value, encodingOrOffset)
79911 }
79912
79913 return fromObject(value)
79914 }
79915
79916 /**
79917 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
79918 * if value is a number.
79919 * Buffer.from(str[, encoding])
79920 * Buffer.from(array)
79921 * Buffer.from(buffer)
79922 * Buffer.from(arrayBuffer[, byteOffset[, length]])
79923 **/
79924 Buffer.from = function (value, encodingOrOffset, length) {
79925 return from(value, encodingOrOffset, length)
79926 }
79927
79928 // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
79929 // https://github.com/feross/buffer/pull/148
79930 Buffer.prototype.__proto__ = Uint8Array.prototype
79931 Buffer.__proto__ = Uint8Array
79932
79933 function assertSize (size) {
79934 if (typeof size !== 'number') {
79935 throw new TypeError('"size" argument must be a number')
79936 } else if (size < 0) {
79937 throw new RangeError('"size" argument must not be negative')
79938 }
79939 }
79940
79941 function alloc (size, fill, encoding) {
79942 assertSize(size)
79943 if (size <= 0) {
79944 return createBuffer(size)
79945 }
79946 if (fill !== undefined) {
79947 // Only pay attention to encoding if it's a string. This
79948 // prevents accidentally sending in a number that would
79949 // be interpretted as a start offset.
79950 return typeof encoding === 'string'
79951 ? createBuffer(size).fill(fill, encoding)
79952 : createBuffer(size).fill(fill)
79953 }
79954 return createBuffer(size)
79955 }
79956
79957 /**
79958 * Creates a new filled Buffer instance.
79959 * alloc(size[, fill[, encoding]])
79960 **/
79961 Buffer.alloc = function (size, fill, encoding) {
79962 return alloc(size, fill, encoding)
79963 }
79964
79965 function allocUnsafe (size) {
79966 assertSize(size)
79967 return createBuffer(size < 0 ? 0 : checked(size) | 0)
79968 }
79969
79970 /**
79971 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
79972 * */
79973 Buffer.allocUnsafe = function (size) {
79974 return allocUnsafe(size)
79975 }
79976 /**
79977 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
79978 */
79979 Buffer.allocUnsafeSlow = function (size) {
79980 return allocUnsafe(size)
79981 }
79982
79983 function fromString (string, encoding) {
79984 if (typeof encoding !== 'string' || encoding === '') {
79985 encoding = 'utf8'
79986 }
79987
79988 if (!Buffer.isEncoding(encoding)) {
79989 throw new TypeError('"encoding" must be a valid string encoding')
79990 }
79991
79992 var length = byteLength(string, encoding) | 0
79993 var buf = createBuffer(length)
79994
79995 var actual = buf.write(string, encoding)
79996
79997 if (actual !== length) {
79998 // Writing a hex string, for example, that contains invalid characters will
79999 // cause everything after the first invalid character to be ignored. (e.g.
80000 // 'abxxcd' will be treated as 'ab')
80001 buf = buf.slice(0, actual)
80002 }
80003
80004 return buf
80005 }
80006
80007 function fromArrayLike (array) {
80008 var length = array.length < 0 ? 0 : checked(array.length) | 0
80009 var buf = createBuffer(length)
80010 for (var i = 0; i < length; i += 1) {
80011 buf[i] = array[i] & 255
80012 }
80013 return buf
80014 }
80015
80016 function fromArrayBuffer (array, byteOffset, length) {
80017 if (byteOffset < 0 || array.byteLength < byteOffset) {
80018 throw new RangeError('\'offset\' is out of bounds')
80019 }
80020
80021 if (array.byteLength < byteOffset + (length || 0)) {
80022 throw new RangeError('\'length\' is out of bounds')
80023 }
80024
80025 var buf
80026 if (byteOffset === undefined && length === undefined) {
80027 buf = new Uint8Array(array)
80028 } else if (length === undefined) {
80029 buf = new Uint8Array(array, byteOffset)
80030 } else {
80031 buf = new Uint8Array(array, byteOffset, length)
80032 }
80033
80034 // Return an augmented `Uint8Array` instance
80035 buf.__proto__ = Buffer.prototype
80036 return buf
80037 }
80038
80039 function fromObject (obj) {
80040 if (Buffer.isBuffer(obj)) {
80041 var len = checked(obj.length) | 0
80042 var buf = createBuffer(len)
80043
80044 if (buf.length === 0) {
80045 return buf
80046 }
80047
80048 obj.copy(buf, 0, 0, len)
80049 return buf
80050 }
80051
80052 if (obj) {
80053 if (ArrayBuffer.isView(obj) || 'length' in obj) {
80054 if (typeof obj.length !== 'number' || isnan(obj.length)) {
80055 return createBuffer(0)
80056 }
80057 return fromArrayLike(obj)
80058 }
80059
80060 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
80061 return fromArrayLike(obj.data)
80062 }
80063 }
80064
80065 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
80066 }
80067
80068 function checked (length) {
80069 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
80070 // length is NaN (which is otherwise coerced to zero.)
80071 if (length >= K_MAX_LENGTH) {
80072 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
80073 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
80074 }
80075 return length | 0
80076 }
80077
80078 function SlowBuffer (length) {
80079 if (+length != length) { // eslint-disable-line eqeqeq
80080 length = 0
80081 }
80082 return Buffer.alloc(+length)
80083 }
80084
80085 Buffer.isBuffer = function isBuffer (b) {
80086 return b != null && b._isBuffer === true
80087 }
80088
80089 Buffer.compare = function compare (a, b) {
80090 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
80091 throw new TypeError('Arguments must be Buffers')
80092 }
80093
80094 if (a === b) return 0
80095
80096 var x = a.length
80097 var y = b.length
80098
80099 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
80100 if (a[i] !== b[i]) {
80101 x = a[i]
80102 y = b[i]
80103 break
80104 }
80105 }
80106
80107 if (x < y) return -1
80108 if (y < x) return 1
80109 return 0
80110 }
80111
80112 Buffer.isEncoding = function isEncoding (encoding) {
80113 switch (String(encoding).toLowerCase()) {
80114 case 'hex':
80115 case 'utf8':
80116 case 'utf-8':
80117 case 'ascii':
80118 case 'latin1':
80119 case 'binary':
80120 case 'base64':
80121 case 'ucs2':
80122 case 'ucs-2':
80123 case 'utf16le':
80124 case 'utf-16le':
80125 return true
80126 default:
80127 return false
80128 }
80129 }
80130
80131 Buffer.concat = function concat (list, length) {
80132 if (!Array.isArray(list)) {
80133 throw new TypeError('"list" argument must be an Array of Buffers')
80134 }
80135
80136 if (list.length === 0) {
80137 return Buffer.alloc(0)
80138 }
80139
80140 var i
80141 if (length === undefined) {
80142 length = 0
80143 for (i = 0; i < list.length; ++i) {
80144 length += list[i].length
80145 }
80146 }
80147
80148 var buffer = Buffer.allocUnsafe(length)
80149 var pos = 0
80150 for (i = 0; i < list.length; ++i) {
80151 var buf = list[i]
80152 if (!Buffer.isBuffer(buf)) {
80153 throw new TypeError('"list" argument must be an Array of Buffers')
80154 }
80155 buf.copy(buffer, pos)
80156 pos += buf.length
80157 }
80158 return buffer
80159 }
80160
80161 function byteLength (string, encoding) {
80162 if (Buffer.isBuffer(string)) {
80163 return string.length
80164 }
80165 if (ArrayBuffer.isView(string) || string instanceof ArrayBuffer) {
80166 return string.byteLength
80167 }
80168 if (typeof string !== 'string') {
80169 string = '' + string
80170 }
80171
80172 var len = string.length
80173 if (len === 0) return 0
80174
80175 // Use a for loop to avoid recursion
80176 var loweredCase = false
80177 for (;;) {
80178 switch (encoding) {
80179 case 'ascii':
80180 case 'latin1':
80181 case 'binary':
80182 return len
80183 case 'utf8':
80184 case 'utf-8':
80185 case undefined:
80186 return utf8ToBytes(string).length
80187 case 'ucs2':
80188 case 'ucs-2':
80189 case 'utf16le':
80190 case 'utf-16le':
80191 return len * 2
80192 case 'hex':
80193 return len >>> 1
80194 case 'base64':
80195 return base64ToBytes(string).length
80196 default:
80197 if (loweredCase) return utf8ToBytes(string).length // assume utf8
80198 encoding = ('' + encoding).toLowerCase()
80199 loweredCase = true
80200 }
80201 }
80202 }
80203 Buffer.byteLength = byteLength
80204
80205 function slowToString (encoding, start, end) {
80206 var loweredCase = false
80207
80208 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
80209 // property of a typed array.
80210
80211 // This behaves neither like String nor Uint8Array in that we set start/end
80212 // to their upper/lower bounds if the value passed is out of range.
80213 // undefined is handled specially as per ECMA-262 6th Edition,
80214 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
80215 if (start === undefined || start < 0) {
80216 start = 0
80217 }
80218 // Return early if start > this.length. Done here to prevent potential uint32
80219 // coercion fail below.
80220 if (start > this.length) {
80221 return ''
80222 }
80223
80224 if (end === undefined || end > this.length) {
80225 end = this.length
80226 }
80227
80228 if (end <= 0) {
80229 return ''
80230 }
80231
80232 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
80233 end >>>= 0
80234 start >>>= 0
80235
80236 if (end <= start) {
80237 return ''
80238 }
80239
80240 if (!encoding) encoding = 'utf8'
80241
80242 while (true) {
80243 switch (encoding) {
80244 case 'hex':
80245 return hexSlice(this, start, end)
80246
80247 case 'utf8':
80248 case 'utf-8':
80249 return utf8Slice(this, start, end)
80250
80251 case 'ascii':
80252 return asciiSlice(this, start, end)
80253
80254 case 'latin1':
80255 case 'binary':
80256 return latin1Slice(this, start, end)
80257
80258 case 'base64':
80259 return base64Slice(this, start, end)
80260
80261 case 'ucs2':
80262 case 'ucs-2':
80263 case 'utf16le':
80264 case 'utf-16le':
80265 return utf16leSlice(this, start, end)
80266
80267 default:
80268 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
80269 encoding = (encoding + '').toLowerCase()
80270 loweredCase = true
80271 }
80272 }
80273 }
80274
80275 // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
80276 // to detect a Buffer instance. It's not possible to use `instanceof Buffer`
80277 // reliably in a browserify context because there could be multiple different
80278 // copies of the 'buffer' package in use. This method works even for Buffer
80279 // instances that were created from another copy of the `buffer` package.
80280 // See: https://github.com/feross/buffer/issues/154
80281 Buffer.prototype._isBuffer = true
80282
80283 function swap (b, n, m) {
80284 var i = b[n]
80285 b[n] = b[m]
80286 b[m] = i
80287 }
80288
80289 Buffer.prototype.swap16 = function swap16 () {
80290 var len = this.length
80291 if (len % 2 !== 0) {
80292 throw new RangeError('Buffer size must be a multiple of 16-bits')
80293 }
80294 for (var i = 0; i < len; i += 2) {
80295 swap(this, i, i + 1)
80296 }
80297 return this
80298 }
80299
80300 Buffer.prototype.swap32 = function swap32 () {
80301 var len = this.length
80302 if (len % 4 !== 0) {
80303 throw new RangeError('Buffer size must be a multiple of 32-bits')
80304 }
80305 for (var i = 0; i < len; i += 4) {
80306 swap(this, i, i + 3)
80307 swap(this, i + 1, i + 2)
80308 }
80309 return this
80310 }
80311
80312 Buffer.prototype.swap64 = function swap64 () {
80313 var len = this.length
80314 if (len % 8 !== 0) {
80315 throw new RangeError('Buffer size must be a multiple of 64-bits')
80316 }
80317 for (var i = 0; i < len; i += 8) {
80318 swap(this, i, i + 7)
80319 swap(this, i + 1, i + 6)
80320 swap(this, i + 2, i + 5)
80321 swap(this, i + 3, i + 4)
80322 }
80323 return this
80324 }
80325
80326 Buffer.prototype.toString = function toString () {
80327 var length = this.length
80328 if (length === 0) return ''
80329 if (arguments.length === 0) return utf8Slice(this, 0, length)
80330 return slowToString.apply(this, arguments)
80331 }
80332
80333 Buffer.prototype.equals = function equals (b) {
80334 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
80335 if (this === b) return true
80336 return Buffer.compare(this, b) === 0
80337 }
80338
80339 Buffer.prototype.inspect = function inspect () {
80340 var str = ''
80341 var max = exports.INSPECT_MAX_BYTES
80342 if (this.length > 0) {
80343 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
80344 if (this.length > max) str += ' ... '
80345 }
80346 return '<Buffer ' + str + '>'
80347 }
80348
80349 Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
80350 if (!Buffer.isBuffer(target)) {
80351 throw new TypeError('Argument must be a Buffer')
80352 }
80353
80354 if (start === undefined) {
80355 start = 0
80356 }
80357 if (end === undefined) {
80358 end = target ? target.length : 0
80359 }
80360 if (thisStart === undefined) {
80361 thisStart = 0
80362 }
80363 if (thisEnd === undefined) {
80364 thisEnd = this.length
80365 }
80366
80367 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
80368 throw new RangeError('out of range index')
80369 }
80370
80371 if (thisStart >= thisEnd && start >= end) {
80372 return 0
80373 }
80374 if (thisStart >= thisEnd) {
80375 return -1
80376 }
80377 if (start >= end) {
80378 return 1
80379 }
80380
80381 start >>>= 0
80382 end >>>= 0
80383 thisStart >>>= 0
80384 thisEnd >>>= 0
80385
80386 if (this === target) return 0
80387
80388 var x = thisEnd - thisStart
80389 var y = end - start
80390 var len = Math.min(x, y)
80391
80392 var thisCopy = this.slice(thisStart, thisEnd)
80393 var targetCopy = target.slice(start, end)
80394
80395 for (var i = 0; i < len; ++i) {
80396 if (thisCopy[i] !== targetCopy[i]) {
80397 x = thisCopy[i]
80398 y = targetCopy[i]
80399 break
80400 }
80401 }
80402
80403 if (x < y) return -1
80404 if (y < x) return 1
80405 return 0
80406 }
80407
80408 // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
80409 // OR the last index of `val` in `buffer` at offset <= `byteOffset`.
80410 //
80411 // Arguments:
80412 // - buffer - a Buffer to search
80413 // - val - a string, Buffer, or number
80414 // - byteOffset - an index into `buffer`; will be clamped to an int32
80415 // - encoding - an optional encoding, relevant is val is a string
80416 // - dir - true for indexOf, false for lastIndexOf
80417 function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
80418 // Empty buffer means no match
80419 if (buffer.length === 0) return -1
80420
80421 // Normalize byteOffset
80422 if (typeof byteOffset === 'string') {
80423 encoding = byteOffset
80424 byteOffset = 0
80425 } else if (byteOffset > 0x7fffffff) {
80426 byteOffset = 0x7fffffff
80427 } else if (byteOffset < -0x80000000) {
80428 byteOffset = -0x80000000
80429 }
80430 byteOffset = +byteOffset // Coerce to Number.
80431 if (isNaN(byteOffset)) {
80432 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
80433 byteOffset = dir ? 0 : (buffer.length - 1)
80434 }
80435
80436 // Normalize byteOffset: negative offsets start from the end of the buffer
80437 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
80438 if (byteOffset >= buffer.length) {
80439 if (dir) return -1
80440 else byteOffset = buffer.length - 1
80441 } else if (byteOffset < 0) {
80442 if (dir) byteOffset = 0
80443 else return -1
80444 }
80445
80446 // Normalize val
80447 if (typeof val === 'string') {
80448 val = Buffer.from(val, encoding)
80449 }
80450
80451 // Finally, search either indexOf (if dir is true) or lastIndexOf
80452 if (Buffer.isBuffer(val)) {
80453 // Special case: looking for empty string/buffer always fails
80454 if (val.length === 0) {
80455 return -1
80456 }
80457 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
80458 } else if (typeof val === 'number') {
80459 val = val & 0xFF // Search for a byte value [0-255]
80460 if (typeof Uint8Array.prototype.indexOf === 'function') {
80461 if (dir) {
80462 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
80463 } else {
80464 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
80465 }
80466 }
80467 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
80468 }
80469
80470 throw new TypeError('val must be string, number or Buffer')
80471 }
80472
80473 function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
80474 var indexSize = 1
80475 var arrLength = arr.length
80476 var valLength = val.length
80477
80478 if (encoding !== undefined) {
80479 encoding = String(encoding).toLowerCase()
80480 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
80481 encoding === 'utf16le' || encoding === 'utf-16le') {
80482 if (arr.length < 2 || val.length < 2) {
80483 return -1
80484 }
80485 indexSize = 2
80486 arrLength /= 2
80487 valLength /= 2
80488 byteOffset /= 2
80489 }
80490 }
80491
80492 function read (buf, i) {
80493 if (indexSize === 1) {
80494 return buf[i]
80495 } else {
80496 return buf.readUInt16BE(i * indexSize)
80497 }
80498 }
80499
80500 var i
80501 if (dir) {
80502 var foundIndex = -1
80503 for (i = byteOffset; i < arrLength; i++) {
80504 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
80505 if (foundIndex === -1) foundIndex = i
80506 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
80507 } else {
80508 if (foundIndex !== -1) i -= i - foundIndex
80509 foundIndex = -1
80510 }
80511 }
80512 } else {
80513 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
80514 for (i = byteOffset; i >= 0; i--) {
80515 var found = true
80516 for (var j = 0; j < valLength; j++) {
80517 if (read(arr, i + j) !== read(val, j)) {
80518 found = false
80519 break
80520 }
80521 }
80522 if (found) return i
80523 }
80524 }
80525
80526 return -1
80527 }
80528
80529 Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
80530 return this.indexOf(val, byteOffset, encoding) !== -1
80531 }
80532
80533 Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
80534 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
80535 }
80536
80537 Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
80538 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
80539 }
80540
80541 function hexWrite (buf, string, offset, length) {
80542 offset = Number(offset) || 0
80543 var remaining = buf.length - offset
80544 if (!length) {
80545 length = remaining
80546 } else {
80547 length = Number(length)
80548 if (length > remaining) {
80549 length = remaining
80550 }
80551 }
80552
80553 // must be an even number of digits
80554 var strLen = string.length
80555 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
80556
80557 if (length > strLen / 2) {
80558 length = strLen / 2
80559 }
80560 for (var i = 0; i < length; ++i) {
80561 var parsed = parseInt(string.substr(i * 2, 2), 16)
80562 if (isNaN(parsed)) return i
80563 buf[offset + i] = parsed
80564 }
80565 return i
80566 }
80567
80568 function utf8Write (buf, string, offset, length) {
80569 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
80570 }
80571
80572 function asciiWrite (buf, string, offset, length) {
80573 return blitBuffer(asciiToBytes(string), buf, offset, length)
80574 }
80575
80576 function latin1Write (buf, string, offset, length) {
80577 return asciiWrite(buf, string, offset, length)
80578 }
80579
80580 function base64Write (buf, string, offset, length) {
80581 return blitBuffer(base64ToBytes(string), buf, offset, length)
80582 }
80583
80584 function ucs2Write (buf, string, offset, length) {
80585 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
80586 }
80587
80588 Buffer.prototype.write = function write (string, offset, length, encoding) {
80589 // Buffer#write(string)
80590 if (offset === undefined) {
80591 encoding = 'utf8'
80592 length = this.length
80593 offset = 0
80594 // Buffer#write(string, encoding)
80595 } else if (length === undefined && typeof offset === 'string') {
80596 encoding = offset
80597 length = this.length
80598 offset = 0
80599 // Buffer#write(string, offset[, length][, encoding])
80600 } else if (isFinite(offset)) {
80601 offset = offset >>> 0
80602 if (isFinite(length)) {
80603 length = length >>> 0
80604 if (encoding === undefined) encoding = 'utf8'
80605 } else {
80606 encoding = length
80607 length = undefined
80608 }
80609 } else {
80610 throw new Error(
80611 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
80612 )
80613 }
80614
80615 var remaining = this.length - offset
80616 if (length === undefined || length > remaining) length = remaining
80617
80618 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
80619 throw new RangeError('Attempt to write outside buffer bounds')
80620 }
80621
80622 if (!encoding) encoding = 'utf8'
80623
80624 var loweredCase = false
80625 for (;;) {
80626 switch (encoding) {
80627 case 'hex':
80628 return hexWrite(this, string, offset, length)
80629
80630 case 'utf8':
80631 case 'utf-8':
80632 return utf8Write(this, string, offset, length)
80633
80634 case 'ascii':
80635 return asciiWrite(this, string, offset, length)
80636
80637 case 'latin1':
80638 case 'binary':
80639 return latin1Write(this, string, offset, length)
80640
80641 case 'base64':
80642 // Warning: maxLength not taken into account in base64Write
80643 return base64Write(this, string, offset, length)
80644
80645 case 'ucs2':
80646 case 'ucs-2':
80647 case 'utf16le':
80648 case 'utf-16le':
80649 return ucs2Write(this, string, offset, length)
80650
80651 default:
80652 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
80653 encoding = ('' + encoding).toLowerCase()
80654 loweredCase = true
80655 }
80656 }
80657 }
80658
80659 Buffer.prototype.toJSON = function toJSON () {
80660 return {
80661 type: 'Buffer',
80662 data: Array.prototype.slice.call(this._arr || this, 0)
80663 }
80664 }
80665
80666 function base64Slice (buf, start, end) {
80667 if (start === 0 && end === buf.length) {
80668 return base64.fromByteArray(buf)
80669 } else {
80670 return base64.fromByteArray(buf.slice(start, end))
80671 }
80672 }
80673
80674 function utf8Slice (buf, start, end) {
80675 end = Math.min(buf.length, end)
80676 var res = []
80677
80678 var i = start
80679 while (i < end) {
80680 var firstByte = buf[i]
80681 var codePoint = null
80682 var bytesPerSequence = (firstByte > 0xEF) ? 4
80683 : (firstByte > 0xDF) ? 3
80684 : (firstByte > 0xBF) ? 2
80685 : 1
80686
80687 if (i + bytesPerSequence <= end) {
80688 var secondByte, thirdByte, fourthByte, tempCodePoint
80689
80690 switch (bytesPerSequence) {
80691 case 1:
80692 if (firstByte < 0x80) {
80693 codePoint = firstByte
80694 }
80695 break
80696 case 2:
80697 secondByte = buf[i + 1]
80698 if ((secondByte & 0xC0) === 0x80) {
80699 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
80700 if (tempCodePoint > 0x7F) {
80701 codePoint = tempCodePoint
80702 }
80703 }
80704 break
80705 case 3:
80706 secondByte = buf[i + 1]
80707 thirdByte = buf[i + 2]
80708 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
80709 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
80710 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
80711 codePoint = tempCodePoint
80712 }
80713 }
80714 break
80715 case 4:
80716 secondByte = buf[i + 1]
80717 thirdByte = buf[i + 2]
80718 fourthByte = buf[i + 3]
80719 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
80720 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
80721 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
80722 codePoint = tempCodePoint
80723 }
80724 }
80725 }
80726 }
80727
80728 if (codePoint === null) {
80729 // we did not generate a valid codePoint so insert a
80730 // replacement char (U+FFFD) and advance only 1 byte
80731 codePoint = 0xFFFD
80732 bytesPerSequence = 1
80733 } else if (codePoint > 0xFFFF) {
80734 // encode to utf16 (surrogate pair dance)
80735 codePoint -= 0x10000
80736 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
80737 codePoint = 0xDC00 | codePoint & 0x3FF
80738 }
80739
80740 res.push(codePoint)
80741 i += bytesPerSequence
80742 }
80743
80744 return decodeCodePointsArray(res)
80745 }
80746
80747 // Based on http://stackoverflow.com/a/22747272/680742, the browser with
80748 // the lowest limit is Chrome, with 0x10000 args.
80749 // We go 1 magnitude less, for safety
80750 var MAX_ARGUMENTS_LENGTH = 0x1000
80751
80752 function decodeCodePointsArray (codePoints) {
80753 var len = codePoints.length
80754 if (len <= MAX_ARGUMENTS_LENGTH) {
80755 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
80756 }
80757
80758 // Decode in chunks to avoid "call stack size exceeded".
80759 var res = ''
80760 var i = 0
80761 while (i < len) {
80762 res += String.fromCharCode.apply(
80763 String,
80764 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
80765 )
80766 }
80767 return res
80768 }
80769
80770 function asciiSlice (buf, start, end) {
80771 var ret = ''
80772 end = Math.min(buf.length, end)
80773
80774 for (var i = start; i < end; ++i) {
80775 ret += String.fromCharCode(buf[i] & 0x7F)
80776 }
80777 return ret
80778 }
80779
80780 function latin1Slice (buf, start, end) {
80781 var ret = ''
80782 end = Math.min(buf.length, end)
80783
80784 for (var i = start; i < end; ++i) {
80785 ret += String.fromCharCode(buf[i])
80786 }
80787 return ret
80788 }
80789
80790 function hexSlice (buf, start, end) {
80791 var len = buf.length
80792
80793 if (!start || start < 0) start = 0
80794 if (!end || end < 0 || end > len) end = len
80795
80796 var out = ''
80797 for (var i = start; i < end; ++i) {
80798 out += toHex(buf[i])
80799 }
80800 return out
80801 }
80802
80803 function utf16leSlice (buf, start, end) {
80804 var bytes = buf.slice(start, end)
80805 var res = ''
80806 for (var i = 0; i < bytes.length; i += 2) {
80807 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
80808 }
80809 return res
80810 }
80811
80812 Buffer.prototype.slice = function slice (start, end) {
80813 var len = this.length
80814 start = ~~start
80815 end = end === undefined ? len : ~~end
80816
80817 if (start < 0) {
80818 start += len
80819 if (start < 0) start = 0
80820 } else if (start > len) {
80821 start = len
80822 }
80823
80824 if (end < 0) {
80825 end += len
80826 if (end < 0) end = 0
80827 } else if (end > len) {
80828 end = len
80829 }
80830
80831 if (end < start) end = start
80832
80833 var newBuf = this.subarray(start, end)
80834 // Return an augmented `Uint8Array` instance
80835 newBuf.__proto__ = Buffer.prototype
80836 return newBuf
80837 }
80838
80839 /*
80840 * Need to make sure that buffer isn't trying to write out of bounds.
80841 */
80842 function checkOffset (offset, ext, length) {
80843 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
80844 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
80845 }
80846
80847 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
80848 offset = offset >>> 0
80849 byteLength = byteLength >>> 0
80850 if (!noAssert) checkOffset(offset, byteLength, this.length)
80851
80852 var val = this[offset]
80853 var mul = 1
80854 var i = 0
80855 while (++i < byteLength && (mul *= 0x100)) {
80856 val += this[offset + i] * mul
80857 }
80858
80859 return val
80860 }
80861
80862 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
80863 offset = offset >>> 0
80864 byteLength = byteLength >>> 0
80865 if (!noAssert) {
80866 checkOffset(offset, byteLength, this.length)
80867 }
80868
80869 var val = this[offset + --byteLength]
80870 var mul = 1
80871 while (byteLength > 0 && (mul *= 0x100)) {
80872 val += this[offset + --byteLength] * mul
80873 }
80874
80875 return val
80876 }
80877
80878 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
80879 offset = offset >>> 0
80880 if (!noAssert) checkOffset(offset, 1, this.length)
80881 return this[offset]
80882 }
80883
80884 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
80885 offset = offset >>> 0
80886 if (!noAssert) checkOffset(offset, 2, this.length)
80887 return this[offset] | (this[offset + 1] << 8)
80888 }
80889
80890 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
80891 offset = offset >>> 0
80892 if (!noAssert) checkOffset(offset, 2, this.length)
80893 return (this[offset] << 8) | this[offset + 1]
80894 }
80895
80896 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
80897 offset = offset >>> 0
80898 if (!noAssert) checkOffset(offset, 4, this.length)
80899
80900 return ((this[offset]) |
80901 (this[offset + 1] << 8) |
80902 (this[offset + 2] << 16)) +
80903 (this[offset + 3] * 0x1000000)
80904 }
80905
80906 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
80907 offset = offset >>> 0
80908 if (!noAssert) checkOffset(offset, 4, this.length)
80909
80910 return (this[offset] * 0x1000000) +
80911 ((this[offset + 1] << 16) |
80912 (this[offset + 2] << 8) |
80913 this[offset + 3])
80914 }
80915
80916 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
80917 offset = offset >>> 0
80918 byteLength = byteLength >>> 0
80919 if (!noAssert) checkOffset(offset, byteLength, this.length)
80920
80921 var val = this[offset]
80922 var mul = 1
80923 var i = 0
80924 while (++i < byteLength && (mul *= 0x100)) {
80925 val += this[offset + i] * mul
80926 }
80927 mul *= 0x80
80928
80929 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
80930
80931 return val
80932 }
80933
80934 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
80935 offset = offset >>> 0
80936 byteLength = byteLength >>> 0
80937 if (!noAssert) checkOffset(offset, byteLength, this.length)
80938
80939 var i = byteLength
80940 var mul = 1
80941 var val = this[offset + --i]
80942 while (i > 0 && (mul *= 0x100)) {
80943 val += this[offset + --i] * mul
80944 }
80945 mul *= 0x80
80946
80947 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
80948
80949 return val
80950 }
80951
80952 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
80953 offset = offset >>> 0
80954 if (!noAssert) checkOffset(offset, 1, this.length)
80955 if (!(this[offset] & 0x80)) return (this[offset])
80956 return ((0xff - this[offset] + 1) * -1)
80957 }
80958
80959 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
80960 offset = offset >>> 0
80961 if (!noAssert) checkOffset(offset, 2, this.length)
80962 var val = this[offset] | (this[offset + 1] << 8)
80963 return (val & 0x8000) ? val | 0xFFFF0000 : val
80964 }
80965
80966 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
80967 offset = offset >>> 0
80968 if (!noAssert) checkOffset(offset, 2, this.length)
80969 var val = this[offset + 1] | (this[offset] << 8)
80970 return (val & 0x8000) ? val | 0xFFFF0000 : val
80971 }
80972
80973 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
80974 offset = offset >>> 0
80975 if (!noAssert) checkOffset(offset, 4, this.length)
80976
80977 return (this[offset]) |
80978 (this[offset + 1] << 8) |
80979 (this[offset + 2] << 16) |
80980 (this[offset + 3] << 24)
80981 }
80982
80983 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
80984 offset = offset >>> 0
80985 if (!noAssert) checkOffset(offset, 4, this.length)
80986
80987 return (this[offset] << 24) |
80988 (this[offset + 1] << 16) |
80989 (this[offset + 2] << 8) |
80990 (this[offset + 3])
80991 }
80992
80993 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
80994 offset = offset >>> 0
80995 if (!noAssert) checkOffset(offset, 4, this.length)
80996 return ieee754.read(this, offset, true, 23, 4)
80997 }
80998
80999 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
81000 offset = offset >>> 0
81001 if (!noAssert) checkOffset(offset, 4, this.length)
81002 return ieee754.read(this, offset, false, 23, 4)
81003 }
81004
81005 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
81006 offset = offset >>> 0
81007 if (!noAssert) checkOffset(offset, 8, this.length)
81008 return ieee754.read(this, offset, true, 52, 8)
81009 }
81010
81011 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
81012 offset = offset >>> 0
81013 if (!noAssert) checkOffset(offset, 8, this.length)
81014 return ieee754.read(this, offset, false, 52, 8)
81015 }
81016
81017 function checkInt (buf, value, offset, ext, max, min) {
81018 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
81019 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
81020 if (offset + ext > buf.length) throw new RangeError('Index out of range')
81021 }
81022
81023 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
81024 value = +value
81025 offset = offset >>> 0
81026 byteLength = byteLength >>> 0
81027 if (!noAssert) {
81028 var maxBytes = Math.pow(2, 8 * byteLength) - 1
81029 checkInt(this, value, offset, byteLength, maxBytes, 0)
81030 }
81031
81032 var mul = 1
81033 var i = 0
81034 this[offset] = value & 0xFF
81035 while (++i < byteLength && (mul *= 0x100)) {
81036 this[offset + i] = (value / mul) & 0xFF
81037 }
81038
81039 return offset + byteLength
81040 }
81041
81042 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
81043 value = +value
81044 offset = offset >>> 0
81045 byteLength = byteLength >>> 0
81046 if (!noAssert) {
81047 var maxBytes = Math.pow(2, 8 * byteLength) - 1
81048 checkInt(this, value, offset, byteLength, maxBytes, 0)
81049 }
81050
81051 var i = byteLength - 1
81052 var mul = 1
81053 this[offset + i] = value & 0xFF
81054 while (--i >= 0 && (mul *= 0x100)) {
81055 this[offset + i] = (value / mul) & 0xFF
81056 }
81057
81058 return offset + byteLength
81059 }
81060
81061 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
81062 value = +value
81063 offset = offset >>> 0
81064 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
81065 this[offset] = (value & 0xff)
81066 return offset + 1
81067 }
81068
81069 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
81070 value = +value
81071 offset = offset >>> 0
81072 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
81073 this[offset] = (value & 0xff)
81074 this[offset + 1] = (value >>> 8)
81075 return offset + 2
81076 }
81077
81078 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
81079 value = +value
81080 offset = offset >>> 0
81081 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
81082 this[offset] = (value >>> 8)
81083 this[offset + 1] = (value & 0xff)
81084 return offset + 2
81085 }
81086
81087 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
81088 value = +value
81089 offset = offset >>> 0
81090 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
81091 this[offset + 3] = (value >>> 24)
81092 this[offset + 2] = (value >>> 16)
81093 this[offset + 1] = (value >>> 8)
81094 this[offset] = (value & 0xff)
81095 return offset + 4
81096 }
81097
81098 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
81099 value = +value
81100 offset = offset >>> 0
81101 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
81102 this[offset] = (value >>> 24)
81103 this[offset + 1] = (value >>> 16)
81104 this[offset + 2] = (value >>> 8)
81105 this[offset + 3] = (value & 0xff)
81106 return offset + 4
81107 }
81108
81109 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
81110 value = +value
81111 offset = offset >>> 0
81112 if (!noAssert) {
81113 var limit = Math.pow(2, (8 * byteLength) - 1)
81114
81115 checkInt(this, value, offset, byteLength, limit - 1, -limit)
81116 }
81117
81118 var i = 0
81119 var mul = 1
81120 var sub = 0
81121 this[offset] = value & 0xFF
81122 while (++i < byteLength && (mul *= 0x100)) {
81123 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
81124 sub = 1
81125 }
81126 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
81127 }
81128
81129 return offset + byteLength
81130 }
81131
81132 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
81133 value = +value
81134 offset = offset >>> 0
81135 if (!noAssert) {
81136 var limit = Math.pow(2, (8 * byteLength) - 1)
81137
81138 checkInt(this, value, offset, byteLength, limit - 1, -limit)
81139 }
81140
81141 var i = byteLength - 1
81142 var mul = 1
81143 var sub = 0
81144 this[offset + i] = value & 0xFF
81145 while (--i >= 0 && (mul *= 0x100)) {
81146 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
81147 sub = 1
81148 }
81149 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
81150 }
81151
81152 return offset + byteLength
81153 }
81154
81155 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
81156 value = +value
81157 offset = offset >>> 0
81158 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
81159 if (value < 0) value = 0xff + value + 1
81160 this[offset] = (value & 0xff)
81161 return offset + 1
81162 }
81163
81164 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
81165 value = +value
81166 offset = offset >>> 0
81167 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
81168 this[offset] = (value & 0xff)
81169 this[offset + 1] = (value >>> 8)
81170 return offset + 2
81171 }
81172
81173 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
81174 value = +value
81175 offset = offset >>> 0
81176 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
81177 this[offset] = (value >>> 8)
81178 this[offset + 1] = (value & 0xff)
81179 return offset + 2
81180 }
81181
81182 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
81183 value = +value
81184 offset = offset >>> 0
81185 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
81186 this[offset] = (value & 0xff)
81187 this[offset + 1] = (value >>> 8)
81188 this[offset + 2] = (value >>> 16)
81189 this[offset + 3] = (value >>> 24)
81190 return offset + 4
81191 }
81192
81193 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
81194 value = +value
81195 offset = offset >>> 0
81196 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
81197 if (value < 0) value = 0xffffffff + value + 1
81198 this[offset] = (value >>> 24)
81199 this[offset + 1] = (value >>> 16)
81200 this[offset + 2] = (value >>> 8)
81201 this[offset + 3] = (value & 0xff)
81202 return offset + 4
81203 }
81204
81205 function checkIEEE754 (buf, value, offset, ext, max, min) {
81206 if (offset + ext > buf.length) throw new RangeError('Index out of range')
81207 if (offset < 0) throw new RangeError('Index out of range')
81208 }
81209
81210 function writeFloat (buf, value, offset, littleEndian, noAssert) {
81211 value = +value
81212 offset = offset >>> 0
81213 if (!noAssert) {
81214 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
81215 }
81216 ieee754.write(buf, value, offset, littleEndian, 23, 4)
81217 return offset + 4
81218 }
81219
81220 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
81221 return writeFloat(this, value, offset, true, noAssert)
81222 }
81223
81224 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
81225 return writeFloat(this, value, offset, false, noAssert)
81226 }
81227
81228 function writeDouble (buf, value, offset, littleEndian, noAssert) {
81229 value = +value
81230 offset = offset >>> 0
81231 if (!noAssert) {
81232 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
81233 }
81234 ieee754.write(buf, value, offset, littleEndian, 52, 8)
81235 return offset + 8
81236 }
81237
81238 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
81239 return writeDouble(this, value, offset, true, noAssert)
81240 }
81241
81242 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
81243 return writeDouble(this, value, offset, false, noAssert)
81244 }
81245
81246 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
81247 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
81248 if (!start) start = 0
81249 if (!end && end !== 0) end = this.length
81250 if (targetStart >= target.length) targetStart = target.length
81251 if (!targetStart) targetStart = 0
81252 if (end > 0 && end < start) end = start
81253
81254 // Copy 0 bytes; we're done
81255 if (end === start) return 0
81256 if (target.length === 0 || this.length === 0) return 0
81257
81258 // Fatal error conditions
81259 if (targetStart < 0) {
81260 throw new RangeError('targetStart out of bounds')
81261 }
81262 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
81263 if (end < 0) throw new RangeError('sourceEnd out of bounds')
81264
81265 // Are we oob?
81266 if (end > this.length) end = this.length
81267 if (target.length - targetStart < end - start) {
81268 end = target.length - targetStart + start
81269 }
81270
81271 var len = end - start
81272 var i
81273
81274 if (this === target && start < targetStart && targetStart < end) {
81275 // descending copy from end
81276 for (i = len - 1; i >= 0; --i) {
81277 target[i + targetStart] = this[i + start]
81278 }
81279 } else if (len < 1000) {
81280 // ascending copy from start
81281 for (i = 0; i < len; ++i) {
81282 target[i + targetStart] = this[i + start]
81283 }
81284 } else {
81285 Uint8Array.prototype.set.call(
81286 target,
81287 this.subarray(start, start + len),
81288 targetStart
81289 )
81290 }
81291
81292 return len
81293 }
81294
81295 // Usage:
81296 // buffer.fill(number[, offset[, end]])
81297 // buffer.fill(buffer[, offset[, end]])
81298 // buffer.fill(string[, offset[, end]][, encoding])
81299 Buffer.prototype.fill = function fill (val, start, end, encoding) {
81300 // Handle string cases:
81301 if (typeof val === 'string') {
81302 if (typeof start === 'string') {
81303 encoding = start
81304 start = 0
81305 end = this.length
81306 } else if (typeof end === 'string') {
81307 encoding = end
81308 end = this.length
81309 }
81310 if (val.length === 1) {
81311 var code = val.charCodeAt(0)
81312 if (code < 256) {
81313 val = code
81314 }
81315 }
81316 if (encoding !== undefined && typeof encoding !== 'string') {
81317 throw new TypeError('encoding must be a string')
81318 }
81319 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
81320 throw new TypeError('Unknown encoding: ' + encoding)
81321 }
81322 } else if (typeof val === 'number') {
81323 val = val & 255
81324 }
81325
81326 // Invalid ranges are not set to a default, so can range check early.
81327 if (start < 0 || this.length < start || this.length < end) {
81328 throw new RangeError('Out of range index')
81329 }
81330
81331 if (end <= start) {
81332 return this
81333 }
81334
81335 start = start >>> 0
81336 end = end === undefined ? this.length : end >>> 0
81337
81338 if (!val) val = 0
81339
81340 var i
81341 if (typeof val === 'number') {
81342 for (i = start; i < end; ++i) {
81343 this[i] = val
81344 }
81345 } else {
81346 var bytes = Buffer.isBuffer(val)
81347 ? val
81348 : new Buffer(val, encoding)
81349 var len = bytes.length
81350 for (i = 0; i < end - start; ++i) {
81351 this[i + start] = bytes[i % len]
81352 }
81353 }
81354
81355 return this
81356 }
81357
81358 // HELPER FUNCTIONS
81359 // ================
81360
81361 var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
81362
81363 function base64clean (str) {
81364 // Node strips out invalid characters like \n and \t from the string, base64-js does not
81365 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
81366 // Node converts strings with length < 2 to ''
81367 if (str.length < 2) return ''
81368 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
81369 while (str.length % 4 !== 0) {
81370 str = str + '='
81371 }
81372 return str
81373 }
81374
81375 function stringtrim (str) {
81376 if (str.trim) return str.trim()
81377 return str.replace(/^\s+|\s+$/g, '')
81378 }
81379
81380 function toHex (n) {
81381 if (n < 16) return '0' + n.toString(16)
81382 return n.toString(16)
81383 }
81384
81385 function utf8ToBytes (string, units) {
81386 units = units || Infinity
81387 var codePoint
81388 var length = string.length
81389 var leadSurrogate = null
81390 var bytes = []
81391
81392 for (var i = 0; i < length; ++i) {
81393 codePoint = string.charCodeAt(i)
81394
81395 // is surrogate component
81396 if (codePoint > 0xD7FF && codePoint < 0xE000) {
81397 // last char was a lead
81398 if (!leadSurrogate) {
81399 // no lead yet
81400 if (codePoint > 0xDBFF) {
81401 // unexpected trail
81402 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
81403 continue
81404 } else if (i + 1 === length) {
81405 // unpaired lead
81406 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
81407 continue
81408 }
81409
81410 // valid lead
81411 leadSurrogate = codePoint
81412
81413 continue
81414 }
81415
81416 // 2 leads in a row
81417 if (codePoint < 0xDC00) {
81418 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
81419 leadSurrogate = codePoint
81420 continue
81421 }
81422
81423 // valid surrogate pair
81424 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
81425 } else if (leadSurrogate) {
81426 // valid bmp char, but last char was a lead
81427 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
81428 }
81429
81430 leadSurrogate = null
81431
81432 // encode utf8
81433 if (codePoint < 0x80) {
81434 if ((units -= 1) < 0) break
81435 bytes.push(codePoint)
81436 } else if (codePoint < 0x800) {
81437 if ((units -= 2) < 0) break
81438 bytes.push(
81439 codePoint >> 0x6 | 0xC0,
81440 codePoint & 0x3F | 0x80
81441 )
81442 } else if (codePoint < 0x10000) {
81443 if ((units -= 3) < 0) break
81444 bytes.push(
81445 codePoint >> 0xC | 0xE0,
81446 codePoint >> 0x6 & 0x3F | 0x80,
81447 codePoint & 0x3F | 0x80
81448 )
81449 } else if (codePoint < 0x110000) {
81450 if ((units -= 4) < 0) break
81451 bytes.push(
81452 codePoint >> 0x12 | 0xF0,
81453 codePoint >> 0xC & 0x3F | 0x80,
81454 codePoint >> 0x6 & 0x3F | 0x80,
81455 codePoint & 0x3F | 0x80
81456 )
81457 } else {
81458 throw new Error('Invalid code point')
81459 }
81460 }
81461
81462 return bytes
81463 }
81464
81465 function asciiToBytes (str) {
81466 var byteArray = []
81467 for (var i = 0; i < str.length; ++i) {
81468 // Node's code seems to be doing this and not & 0x7F..
81469 byteArray.push(str.charCodeAt(i) & 0xFF)
81470 }
81471 return byteArray
81472 }
81473
81474 function utf16leToBytes (str, units) {
81475 var c, hi, lo
81476 var byteArray = []
81477 for (var i = 0; i < str.length; ++i) {
81478 if ((units -= 2) < 0) break
81479
81480 c = str.charCodeAt(i)
81481 hi = c >> 8
81482 lo = c % 256
81483 byteArray.push(lo)
81484 byteArray.push(hi)
81485 }
81486
81487 return byteArray
81488 }
81489
81490 function base64ToBytes (str) {
81491 return base64.toByteArray(base64clean(str))
81492 }
81493
81494 function blitBuffer (src, dst, offset, length) {
81495 for (var i = 0; i < length; ++i) {
81496 if ((i + offset >= dst.length) || (i >= src.length)) break
81497 dst[i + offset] = src[i]
81498 }
81499 return i
81500 }
81501
81502 function isnan (val) {
81503 return val !== val // eslint-disable-line no-self-compare
81504 }
81505
81506 },{"base64-js":2,"ieee754":8}],6:[function(require,module,exports){
81507 (function (Buffer){
81508 // Copyright Joyent, Inc. and other Node contributors.
81509 //
81510 // Permission is hereby granted, free of charge, to any person obtaining a
81511 // copy of this software and associated documentation files (the
81512 // "Software"), to deal in the Software without restriction, including
81513 // without limitation the rights to use, copy, modify, merge, publish,
81514 // distribute, sublicense, and/or sell copies of the Software, and to permit
81515 // persons to whom the Software is furnished to do so, subject to the
81516 // following conditions:
81517 //
81518 // The above copyright notice and this permission notice shall be included
81519 // in all copies or substantial portions of the Software.
81520 //
81521 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
81522 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
81523 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
81524 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
81525 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
81526 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
81527 // USE OR OTHER DEALINGS IN THE SOFTWARE.
81528
81529 // NOTE: These type checking functions intentionally don't use `instanceof`
81530 // because it is fragile and can be easily faked with `Object.create()`.
81531
81532 function isArray(arg) {
81533 if (Array.isArray) {
81534 return Array.isArray(arg);
81535 }
81536 return objectToString(arg) === '[object Array]';
81537 }
81538 exports.isArray = isArray;
81539
81540 function isBoolean(arg) {
81541 return typeof arg === 'boolean';
81542 }
81543 exports.isBoolean = isBoolean;
81544
81545 function isNull(arg) {
81546 return arg === null;
81547 }
81548 exports.isNull = isNull;
81549
81550 function isNullOrUndefined(arg) {
81551 return arg == null;
81552 }
81553 exports.isNullOrUndefined = isNullOrUndefined;
81554
81555 function isNumber(arg) {
81556 return typeof arg === 'number';
81557 }
81558 exports.isNumber = isNumber;
81559
81560 function isString(arg) {
81561 return typeof arg === 'string';
81562 }
81563 exports.isString = isString;
81564
81565 function isSymbol(arg) {
81566 return typeof arg === 'symbol';
81567 }
81568 exports.isSymbol = isSymbol;
81569
81570 function isUndefined(arg) {
81571 return arg === void 0;
81572 }
81573 exports.isUndefined = isUndefined;
81574
81575 function isRegExp(re) {
81576 return objectToString(re) === '[object RegExp]';
81577 }
81578 exports.isRegExp = isRegExp;
81579
81580 function isObject(arg) {
81581 return typeof arg === 'object' && arg !== null;
81582 }
81583 exports.isObject = isObject;
81584
81585 function isDate(d) {
81586 return objectToString(d) === '[object Date]';
81587 }
81588 exports.isDate = isDate;
81589
81590 function isError(e) {
81591 return (objectToString(e) === '[object Error]' || e instanceof Error);
81592 }
81593 exports.isError = isError;
81594
81595 function isFunction(arg) {
81596 return typeof arg === 'function';
81597 }
81598 exports.isFunction = isFunction;
81599
81600 function isPrimitive(arg) {
81601 return arg === null ||
81602 typeof arg === 'boolean' ||
81603 typeof arg === 'number' ||
81604 typeof arg === 'string' ||
81605 typeof arg === 'symbol' || // ES6 symbol
81606 typeof arg === 'undefined';
81607 }
81608 exports.isPrimitive = isPrimitive;
81609
81610 exports.isBuffer = Buffer.isBuffer;
81611
81612 function objectToString(o) {
81613 return Object.prototype.toString.call(o);
81614 }
81615
81616 }).call(this,{"isBuffer":require("../../is-buffer/index.js")})
81617 },{"../../is-buffer/index.js":10}],7:[function(require,module,exports){
81618 // Copyright Joyent, Inc. and other Node contributors.
81619 //
81620 // Permission is hereby granted, free of charge, to any person obtaining a
81621 // copy of this software and associated documentation files (the
81622 // "Software"), to deal in the Software without restriction, including
81623 // without limitation the rights to use, copy, modify, merge, publish,
81624 // distribute, sublicense, and/or sell copies of the Software, and to permit
81625 // persons to whom the Software is furnished to do so, subject to the
81626 // following conditions:
81627 //
81628 // The above copyright notice and this permission notice shall be included
81629 // in all copies or substantial portions of the Software.
81630 //
81631 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
81632 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
81633 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
81634 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
81635 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
81636 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
81637 // USE OR OTHER DEALINGS IN THE SOFTWARE.
81638
81639 function EventEmitter() {
81640 this._events = this._events || {};
81641 this._maxListeners = this._maxListeners || undefined;
81642 }
81643 module.exports = EventEmitter;
81644
81645 // Backwards-compat with node 0.10.x
81646 EventEmitter.EventEmitter = EventEmitter;
81647
81648 EventEmitter.prototype._events = undefined;
81649 EventEmitter.prototype._maxListeners = undefined;
81650
81651 // By default EventEmitters will print a warning if more than 10 listeners are
81652 // added to it. This is a useful default which helps finding memory leaks.
81653 EventEmitter.defaultMaxListeners = 10;
81654
81655 // Obviously not all Emitters should be limited to 10. This function allows
81656 // that to be increased. Set to zero for unlimited.
81657 EventEmitter.prototype.setMaxListeners = function(n) {
81658 if (!isNumber(n) || n < 0 || isNaN(n))
81659 throw TypeError('n must be a positive number');
81660 this._maxListeners = n;
81661 return this;
81662 };
81663
81664 EventEmitter.prototype.emit = function(type) {
81665 var er, handler, len, args, i, listeners;
81666
81667 if (!this._events)
81668 this._events = {};
81669
81670 // If there is no 'error' event listener then throw.
81671 if (type === 'error') {
81672 if (!this._events.error ||
81673 (isObject(this._events.error) && !this._events.error.length)) {
81674 er = arguments[1];
81675 if (er instanceof Error) {
81676 throw er; // Unhandled 'error' event
81677 } else {
81678 // At least give some kind of context to the user
81679 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
81680 err.context = er;
81681 throw err;
81682 }
81683 }
81684 }
81685
81686 handler = this._events[type];
81687
81688 if (isUndefined(handler))
81689 return false;
81690
81691 if (isFunction(handler)) {
81692 switch (arguments.length) {
81693 // fast cases
81694 case 1:
81695 handler.call(this);
81696 break;
81697 case 2:
81698 handler.call(this, arguments[1]);
81699 break;
81700 case 3:
81701 handler.call(this, arguments[1], arguments[2]);
81702 break;
81703 // slower
81704 default:
81705 args = Array.prototype.slice.call(arguments, 1);
81706 handler.apply(this, args);
81707 }
81708 } else if (isObject(handler)) {
81709 args = Array.prototype.slice.call(arguments, 1);
81710 listeners = handler.slice();
81711 len = listeners.length;
81712 for (i = 0; i < len; i++)
81713 listeners[i].apply(this, args);
81714 }
81715
81716 return true;
81717 };
81718
81719 EventEmitter.prototype.addListener = function(type, listener) {
81720 var m;
81721
81722 if (!isFunction(listener))
81723 throw TypeError('listener must be a function');
81724
81725 if (!this._events)
81726 this._events = {};
81727
81728 // To avoid recursion in the case that type === "newListener"! Before
81729 // adding it to the listeners, first emit "newListener".
81730 if (this._events.newListener)
81731 this.emit('newListener', type,
81732 isFunction(listener.listener) ?
81733 listener.listener : listener);
81734
81735 if (!this._events[type])
81736 // Optimize the case of one listener. Don't need the extra array object.
81737 this._events[type] = listener;
81738 else if (isObject(this._events[type]))
81739 // If we've already got an array, just append.
81740 this._events[type].push(listener);
81741 else
81742 // Adding the second element, need to change to array.
81743 this._events[type] = [this._events[type], listener];
81744
81745 // Check for listener leak
81746 if (isObject(this._events[type]) && !this._events[type].warned) {
81747 if (!isUndefined(this._maxListeners)) {
81748 m = this._maxListeners;
81749 } else {
81750 m = EventEmitter.defaultMaxListeners;
81751 }
81752
81753 if (m && m > 0 && this._events[type].length > m) {
81754 this._events[type].warned = true;
81755 console.error('(node) warning: possible EventEmitter memory ' +
81756 'leak detected. %d listeners added. ' +
81757 'Use emitter.setMaxListeners() to increase limit.',
81758 this._events[type].length);
81759 if (typeof console.trace === 'function') {
81760 // not supported in IE 10
81761 console.trace();
81762 }
81763 }
81764 }
81765
81766 return this;
81767 };
81768
81769 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
81770
81771 EventEmitter.prototype.once = function(type, listener) {
81772 if (!isFunction(listener))
81773 throw TypeError('listener must be a function');
81774
81775 var fired = false;
81776
81777 function g() {
81778 this.removeListener(type, g);
81779
81780 if (!fired) {
81781 fired = true;
81782 listener.apply(this, arguments);
81783 }
81784 }
81785
81786 g.listener = listener;
81787 this.on(type, g);
81788
81789 return this;
81790 };
81791
81792 // emits a 'removeListener' event iff the listener was removed
81793 EventEmitter.prototype.removeListener = function(type, listener) {
81794 var list, position, length, i;
81795
81796 if (!isFunction(listener))
81797 throw TypeError('listener must be a function');
81798
81799 if (!this._events || !this._events[type])
81800 return this;
81801
81802 list = this._events[type];
81803 length = list.length;
81804 position = -1;
81805
81806 if (list === listener ||
81807 (isFunction(list.listener) && list.listener === listener)) {
81808 delete this._events[type];
81809 if (this._events.removeListener)
81810 this.emit('removeListener', type, listener);
81811
81812 } else if (isObject(list)) {
81813 for (i = length; i-- > 0;) {
81814 if (list[i] === listener ||
81815 (list[i].listener && list[i].listener === listener)) {
81816 position = i;
81817 break;
81818 }
81819 }
81820
81821 if (position < 0)
81822 return this;
81823
81824 if (list.length === 1) {
81825 list.length = 0;
81826 delete this._events[type];
81827 } else {
81828 list.splice(position, 1);
81829 }
81830
81831 if (this._events.removeListener)
81832 this.emit('removeListener', type, listener);
81833 }
81834
81835 return this;
81836 };
81837
81838 EventEmitter.prototype.removeAllListeners = function(type) {
81839 var key, listeners;
81840
81841 if (!this._events)
81842 return this;
81843
81844 // not listening for removeListener, no need to emit
81845 if (!this._events.removeListener) {
81846 if (arguments.length === 0)
81847 this._events = {};
81848 else if (this._events[type])
81849 delete this._events[type];
81850 return this;
81851 }
81852
81853 // emit removeListener for all listeners on all events
81854 if (arguments.length === 0) {
81855 for (key in this._events) {
81856 if (key === 'removeListener') continue;
81857 this.removeAllListeners(key);
81858 }
81859 this.removeAllListeners('removeListener');
81860 this._events = {};
81861 return this;
81862 }
81863
81864 listeners = this._events[type];
81865
81866 if (isFunction(listeners)) {
81867 this.removeListener(type, listeners);
81868 } else if (listeners) {
81869 // LIFO order
81870 while (listeners.length)
81871 this.removeListener(type, listeners[listeners.length - 1]);
81872 }
81873 delete this._events[type];
81874
81875 return this;
81876 };
81877
81878 EventEmitter.prototype.listeners = function(type) {
81879 var ret;
81880 if (!this._events || !this._events[type])
81881 ret = [];
81882 else if (isFunction(this._events[type]))
81883 ret = [this._events[type]];
81884 else
81885 ret = this._events[type].slice();
81886 return ret;
81887 };
81888
81889 EventEmitter.prototype.listenerCount = function(type) {
81890 if (this._events) {
81891 var evlistener = this._events[type];
81892
81893 if (isFunction(evlistener))
81894 return 1;
81895 else if (evlistener)
81896 return evlistener.length;
81897 }
81898 return 0;
81899 };
81900
81901 EventEmitter.listenerCount = function(emitter, type) {
81902 return emitter.listenerCount(type);
81903 };
81904
81905 function isFunction(arg) {
81906 return typeof arg === 'function';
81907 }
81908
81909 function isNumber(arg) {
81910 return typeof arg === 'number';
81911 }
81912
81913 function isObject(arg) {
81914 return typeof arg === 'object' && arg !== null;
81915 }
81916
81917 function isUndefined(arg) {
81918 return arg === void 0;
81919 }
81920
81921 },{}],8:[function(require,module,exports){
81922 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
81923 var e, m
81924 var eLen = nBytes * 8 - mLen - 1
81925 var eMax = (1 << eLen) - 1
81926 var eBias = eMax >> 1
81927 var nBits = -7
81928 var i = isLE ? (nBytes - 1) : 0
81929 var d = isLE ? -1 : 1
81930 var s = buffer[offset + i]
81931
81932 i += d
81933
81934 e = s & ((1 << (-nBits)) - 1)
81935 s >>= (-nBits)
81936 nBits += eLen
81937 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
81938
81939 m = e & ((1 << (-nBits)) - 1)
81940 e >>= (-nBits)
81941 nBits += mLen
81942 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
81943
81944 if (e === 0) {
81945 e = 1 - eBias
81946 } else if (e === eMax) {
81947 return m ? NaN : ((s ? -1 : 1) * Infinity)
81948 } else {
81949 m = m + Math.pow(2, mLen)
81950 e = e - eBias
81951 }
81952 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
81953 }
81954
81955 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
81956 var e, m, c
81957 var eLen = nBytes * 8 - mLen - 1
81958 var eMax = (1 << eLen) - 1
81959 var eBias = eMax >> 1
81960 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
81961 var i = isLE ? 0 : (nBytes - 1)
81962 var d = isLE ? 1 : -1
81963 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
81964
81965 value = Math.abs(value)
81966
81967 if (isNaN(value) || value === Infinity) {
81968 m = isNaN(value) ? 1 : 0
81969 e = eMax
81970 } else {
81971 e = Math.floor(Math.log(value) / Math.LN2)
81972 if (value * (c = Math.pow(2, -e)) < 1) {
81973 e--
81974 c *= 2
81975 }
81976 if (e + eBias >= 1) {
81977 value += rt / c
81978 } else {
81979 value += rt * Math.pow(2, 1 - eBias)
81980 }
81981 if (value * c >= 2) {
81982 e++
81983 c /= 2
81984 }
81985
81986 if (e + eBias >= eMax) {
81987 m = 0
81988 e = eMax
81989 } else if (e + eBias >= 1) {
81990 m = (value * c - 1) * Math.pow(2, mLen)
81991 e = e + eBias
81992 } else {
81993 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
81994 e = 0
81995 }
81996 }
81997
81998 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
81999
82000 e = (e << mLen) | m
82001 eLen += mLen
82002 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
82003
82004 buffer[offset + i - d] |= s * 128
82005 }
82006
82007 },{}],9:[function(require,module,exports){
82008 if (typeof Object.create === 'function') {
82009 // implementation from standard node.js 'util' module
82010 module.exports = function inherits(ctor, superCtor) {
82011 ctor.super_ = superCtor
82012 ctor.prototype = Object.create(superCtor.prototype, {
82013 constructor: {
82014 value: ctor,
82015 enumerable: false,
82016 writable: true,
82017 configurable: true
82018 }
82019 });
82020 };
82021 } else {
82022 // old school shim for old browsers
82023 module.exports = function inherits(ctor, superCtor) {
82024 ctor.super_ = superCtor
82025 var TempCtor = function () {}
82026 TempCtor.prototype = superCtor.prototype
82027 ctor.prototype = new TempCtor()
82028 ctor.prototype.constructor = ctor
82029 }
82030 }
82031
82032 },{}],10:[function(require,module,exports){
82033 /*!
82034 * Determine if an object is a Buffer
82035 *
82036 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
82037 * @license MIT
82038 */
82039
82040 // The _isBuffer check is for Safari 5-7 support, because it's missing
82041 // Object.prototype.constructor. Remove this eventually
82042 module.exports = function (obj) {
82043 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
82044 }
82045
82046 function isBuffer (obj) {
82047 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
82048 }
82049
82050 // For Node v0.10 support. Remove this eventually.
82051 function isSlowBuffer (obj) {
82052 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
82053 }
82054
82055 },{}],11:[function(require,module,exports){
82056 var toString = {}.toString;
82057
82058 module.exports = Array.isArray || function (arr) {
82059 return toString.call(arr) == '[object Array]';
82060 };
82061
82062 },{}],12:[function(require,module,exports){
82063 (function (process){
82064 'use strict';
82065
82066 if (!process.version ||
82067 process.version.indexOf('v0.') === 0 ||
82068 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
82069 module.exports = nextTick;
82070 } else {
82071 module.exports = process.nextTick;
82072 }
82073
82074 function nextTick(fn, arg1, arg2, arg3) {
82075 if (typeof fn !== 'function') {
82076 throw new TypeError('"callback" argument must be a function');
82077 }
82078 var len = arguments.length;
82079 var args, i;
82080 switch (len) {
82081 case 0:
82082 case 1:
82083 return process.nextTick(fn);
82084 case 2:
82085 return process.nextTick(function afterTickOne() {
82086 fn.call(null, arg1);
82087 });
82088 case 3:
82089 return process.nextTick(function afterTickTwo() {
82090 fn.call(null, arg1, arg2);
82091 });
82092 case 4:
82093 return process.nextTick(function afterTickThree() {
82094 fn.call(null, arg1, arg2, arg3);
82095 });
82096 default:
82097 args = new Array(len - 1);
82098 i = 0;
82099 while (i < args.length) {
82100 args[i++] = arguments[i];
82101 }
82102 return process.nextTick(function afterTick() {
82103 fn.apply(null, args);
82104 });
82105 }
82106 }
82107
82108 }).call(this,require('_process'))
82109 },{"_process":13}],13:[function(require,module,exports){
82110 // shim for using process in browser
82111 var process = module.exports = {};
82112
82113 // cached from whatever global is present so that test runners that stub it
82114 // don't break things. But we need to wrap it in a try catch in case it is
82115 // wrapped in strict mode code which doesn't define any globals. It's inside a
82116 // function because try/catches deoptimize in certain engines.
82117
82118 var cachedSetTimeout;
82119 var cachedClearTimeout;
82120
82121 function defaultSetTimout() {
82122 throw new Error('setTimeout has not been defined');
82123 }
82124 function defaultClearTimeout () {
82125 throw new Error('clearTimeout has not been defined');
82126 }
82127 (function () {
82128 try {
82129 if (typeof setTimeout === 'function') {
82130 cachedSetTimeout = setTimeout;
82131 } else {
82132 cachedSetTimeout = defaultSetTimout;
82133 }
82134 } catch (e) {
82135 cachedSetTimeout = defaultSetTimout;
82136 }
82137 try {
82138 if (typeof clearTimeout === 'function') {
82139 cachedClearTimeout = clearTimeout;
82140 } else {
82141 cachedClearTimeout = defaultClearTimeout;
82142 }
82143 } catch (e) {
82144 cachedClearTimeout = defaultClearTimeout;
82145 }
82146 } ())
82147 function runTimeout(fun) {
82148 if (cachedSetTimeout === setTimeout) {
82149 //normal enviroments in sane situations
82150 return setTimeout(fun, 0);
82151 }
82152 // if setTimeout wasn't available but was latter defined
82153 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
82154 cachedSetTimeout = setTimeout;
82155 return setTimeout(fun, 0);
82156 }
82157 try {
82158 // when when somebody has screwed with setTimeout but no I.E. maddness
82159 return cachedSetTimeout(fun, 0);
82160 } catch(e){
82161 try {
82162 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
82163 return cachedSetTimeout.call(null, fun, 0);
82164 } catch(e){
82165 // 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
82166 return cachedSetTimeout.call(this, fun, 0);
82167 }
82168 }
82169
82170
82171 }
82172 function runClearTimeout(marker) {
82173 if (cachedClearTimeout === clearTimeout) {
82174 //normal enviroments in sane situations
82175 return clearTimeout(marker);
82176 }
82177 // if clearTimeout wasn't available but was latter defined
82178 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
82179 cachedClearTimeout = clearTimeout;
82180 return clearTimeout(marker);
82181 }
82182 try {
82183 // when when somebody has screwed with setTimeout but no I.E. maddness
82184 return cachedClearTimeout(marker);
82185 } catch (e){
82186 try {
82187 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
82188 return cachedClearTimeout.call(null, marker);
82189 } catch (e){
82190 // 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.
82191 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
82192 return cachedClearTimeout.call(this, marker);
82193 }
82194 }
82195
82196
82197
82198 }
82199 var queue = [];
82200 var draining = false;
82201 var currentQueue;
82202 var queueIndex = -1;
82203
82204 function cleanUpNextTick() {
82205 if (!draining || !currentQueue) {
82206 return;
82207 }
82208 draining = false;
82209 if (currentQueue.length) {
82210 queue = currentQueue.concat(queue);
82211 } else {
82212 queueIndex = -1;
82213 }
82214 if (queue.length) {
82215 drainQueue();
82216 }
82217 }
82218
82219 function drainQueue() {
82220 if (draining) {
82221 return;
82222 }
82223 var timeout = runTimeout(cleanUpNextTick);
82224 draining = true;
82225
82226 var len = queue.length;
82227 while(len) {
82228 currentQueue = queue;
82229 queue = [];
82230 while (++queueIndex < len) {
82231 if (currentQueue) {
82232 currentQueue[queueIndex].run();
82233 }
82234 }
82235 queueIndex = -1;
82236 len = queue.length;
82237 }
82238 currentQueue = null;
82239 draining = false;
82240 runClearTimeout(timeout);
82241 }
82242
82243 process.nextTick = function (fun) {
82244 var args = new Array(arguments.length - 1);
82245 if (arguments.length > 1) {
82246 for (var i = 1; i < arguments.length; i++) {
82247 args[i - 1] = arguments[i];
82248 }
82249 }
82250 queue.push(new Item(fun, args));
82251 if (queue.length === 1 && !draining) {
82252 runTimeout(drainQueue);
82253 }
82254 };
82255
82256 // v8 likes predictible objects
82257 function Item(fun, array) {
82258 this.fun = fun;
82259 this.array = array;
82260 }
82261 Item.prototype.run = function () {
82262 this.fun.apply(null, this.array);
82263 };
82264 process.title = 'browser';
82265 process.browser = true;
82266 process.env = {};
82267 process.argv = [];
82268 process.version = ''; // empty string to avoid regexp issues
82269 process.versions = {};
82270
82271 function noop() {}
82272
82273 process.on = noop;
82274 process.addListener = noop;
82275 process.once = noop;
82276 process.off = noop;
82277 process.removeListener = noop;
82278 process.removeAllListeners = noop;
82279 process.emit = noop;
82280
82281 process.binding = function (name) {
82282 throw new Error('process.binding is not supported');
82283 };
82284
82285 process.cwd = function () { return '/' };
82286 process.chdir = function (dir) {
82287 throw new Error('process.chdir is not supported');
82288 };
82289 process.umask = function() { return 0; };
82290
82291 },{}],14:[function(require,module,exports){
82292 module.exports = require("./lib/_stream_duplex.js")
82293
82294 },{"./lib/_stream_duplex.js":15}],15:[function(require,module,exports){
82295 // a duplex stream is just a stream that is both readable and writable.
82296 // Since JS doesn't have multiple prototypal inheritance, this class
82297 // prototypally inherits from Readable, and then parasitically from
82298 // Writable.
82299
82300 'use strict';
82301
82302 /*<replacement>*/
82303
82304 var objectKeys = Object.keys || function (obj) {
82305 var keys = [];
82306 for (var key in obj) {
82307 keys.push(key);
82308 }return keys;
82309 };
82310 /*</replacement>*/
82311
82312 module.exports = Duplex;
82313
82314 /*<replacement>*/
82315 var processNextTick = require('process-nextick-args');
82316 /*</replacement>*/
82317
82318 /*<replacement>*/
82319 var util = require('core-util-is');
82320 util.inherits = require('inherits');
82321 /*</replacement>*/
82322
82323 var Readable = require('./_stream_readable');
82324 var Writable = require('./_stream_writable');
82325
82326 util.inherits(Duplex, Readable);
82327
82328 var keys = objectKeys(Writable.prototype);
82329 for (var v = 0; v < keys.length; v++) {
82330 var method = keys[v];
82331 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
82332 }
82333
82334 function Duplex(options) {
82335 if (!(this instanceof Duplex)) return new Duplex(options);
82336
82337 Readable.call(this, options);
82338 Writable.call(this, options);
82339
82340 if (options && options.readable === false) this.readable = false;
82341
82342 if (options && options.writable === false) this.writable = false;
82343
82344 this.allowHalfOpen = true;
82345 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
82346
82347 this.once('end', onend);
82348 }
82349
82350 // the no-half-open enforcer
82351 function onend() {
82352 // if we allow half-open state, or if the writable side ended,
82353 // then we're ok.
82354 if (this.allowHalfOpen || this._writableState.ended) return;
82355
82356 // no more data can be written.
82357 // But allow more writes to happen in this tick.
82358 processNextTick(onEndNT, this);
82359 }
82360
82361 function onEndNT(self) {
82362 self.end();
82363 }
82364
82365 function forEach(xs, f) {
82366 for (var i = 0, l = xs.length; i < l; i++) {
82367 f(xs[i], i);
82368 }
82369 }
82370 },{"./_stream_readable":17,"./_stream_writable":19,"core-util-is":6,"inherits":9,"process-nextick-args":12}],16:[function(require,module,exports){
82371 // a passthrough stream.
82372 // basically just the most minimal sort of Transform stream.
82373 // Every written chunk gets output as-is.
82374
82375 'use strict';
82376
82377 module.exports = PassThrough;
82378
82379 var Transform = require('./_stream_transform');
82380
82381 /*<replacement>*/
82382 var util = require('core-util-is');
82383 util.inherits = require('inherits');
82384 /*</replacement>*/
82385
82386 util.inherits(PassThrough, Transform);
82387
82388 function PassThrough(options) {
82389 if (!(this instanceof PassThrough)) return new PassThrough(options);
82390
82391 Transform.call(this, options);
82392 }
82393
82394 PassThrough.prototype._transform = function (chunk, encoding, cb) {
82395 cb(null, chunk);
82396 };
82397 },{"./_stream_transform":18,"core-util-is":6,"inherits":9}],17:[function(require,module,exports){
82398 (function (process){
82399 'use strict';
82400
82401 module.exports = Readable;
82402
82403 /*<replacement>*/
82404 var processNextTick = require('process-nextick-args');
82405 /*</replacement>*/
82406
82407 /*<replacement>*/
82408 var isArray = require('isarray');
82409 /*</replacement>*/
82410
82411 /*<replacement>*/
82412 var Duplex;
82413 /*</replacement>*/
82414
82415 Readable.ReadableState = ReadableState;
82416
82417 /*<replacement>*/
82418 var EE = require('events').EventEmitter;
82419
82420 var EElistenerCount = function (emitter, type) {
82421 return emitter.listeners(type).length;
82422 };
82423 /*</replacement>*/
82424
82425 /*<replacement>*/
82426 var Stream;
82427 (function () {
82428 try {
82429 Stream = require('st' + 'ream');
82430 } catch (_) {} finally {
82431 if (!Stream) Stream = require('events').EventEmitter;
82432 }
82433 })();
82434 /*</replacement>*/
82435
82436 var Buffer = require('buffer').Buffer;
82437 /*<replacement>*/
82438 var bufferShim = require('buffer-shims');
82439 /*</replacement>*/
82440
82441 /*<replacement>*/
82442 var util = require('core-util-is');
82443 util.inherits = require('inherits');
82444 /*</replacement>*/
82445
82446 /*<replacement>*/
82447 var debugUtil = require('util');
82448 var debug = void 0;
82449 if (debugUtil && debugUtil.debuglog) {
82450 debug = debugUtil.debuglog('stream');
82451 } else {
82452 debug = function () {};
82453 }
82454 /*</replacement>*/
82455
82456 var BufferList = require('./internal/streams/BufferList');
82457 var StringDecoder;
82458
82459 util.inherits(Readable, Stream);
82460
82461 function prependListener(emitter, event, fn) {
82462 // Sadly this is not cacheable as some libraries bundle their own
82463 // event emitter implementation with them.
82464 if (typeof emitter.prependListener === 'function') {
82465 return emitter.prependListener(event, fn);
82466 } else {
82467 // This is a hack to make sure that our error handler is attached before any
82468 // userland ones. NEVER DO THIS. This is here only because this code needs
82469 // to continue to work with older versions of Node.js that do not include
82470 // the prependListener() method. The goal is to eventually remove this hack.
82471 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]];
82472 }
82473 }
82474
82475 function ReadableState(options, stream) {
82476 Duplex = Duplex || require('./_stream_duplex');
82477
82478 options = options || {};
82479
82480 // object stream flag. Used to make read(n) ignore n and to
82481 // make all the buffer merging and length checks go away
82482 this.objectMode = !!options.objectMode;
82483
82484 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
82485
82486 // the point at which it stops calling _read() to fill the buffer
82487 // Note: 0 is a valid value, means "don't call _read preemptively ever"
82488 var hwm = options.highWaterMark;
82489 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
82490 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
82491
82492 // cast to ints.
82493 this.highWaterMark = ~ ~this.highWaterMark;
82494
82495 // A linked list is used to store data chunks instead of an array because the
82496 // linked list can remove elements from the beginning faster than
82497 // array.shift()
82498 this.buffer = new BufferList();
82499 this.length = 0;
82500 this.pipes = null;
82501 this.pipesCount = 0;
82502 this.flowing = null;
82503 this.ended = false;
82504 this.endEmitted = false;
82505 this.reading = false;
82506
82507 // a flag to be able to tell if the onwrite cb is called immediately,
82508 // or on a later tick. We set this to true at first, because any
82509 // actions that shouldn't happen until "later" should generally also
82510 // not happen before the first write call.
82511 this.sync = true;
82512
82513 // whenever we return null, then we set a flag to say
82514 // that we're awaiting a 'readable' event emission.
82515 this.needReadable = false;
82516 this.emittedReadable = false;
82517 this.readableListening = false;
82518 this.resumeScheduled = false;
82519
82520 // Crypto is kind of old and crusty. Historically, its default string
82521 // encoding is 'binary' so we have to make this configurable.
82522 // Everything else in the universe uses 'utf8', though.
82523 this.defaultEncoding = options.defaultEncoding || 'utf8';
82524
82525 // when piping, we only care about 'readable' events that happen
82526 // after read()ing all the bytes and not getting any pushback.
82527 this.ranOut = false;
82528
82529 // the number of writers that are awaiting a drain event in .pipe()s
82530 this.awaitDrain = 0;
82531
82532 // if true, a maybeReadMore has been scheduled
82533 this.readingMore = false;
82534
82535 this.decoder = null;
82536 this.encoding = null;
82537 if (options.encoding) {
82538 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
82539 this.decoder = new StringDecoder(options.encoding);
82540 this.encoding = options.encoding;
82541 }
82542 }
82543
82544 function Readable(options) {
82545 Duplex = Duplex || require('./_stream_duplex');
82546
82547 if (!(this instanceof Readable)) return new Readable(options);
82548
82549 this._readableState = new ReadableState(options, this);
82550
82551 // legacy
82552 this.readable = true;
82553
82554 if (options && typeof options.read === 'function') this._read = options.read;
82555
82556 Stream.call(this);
82557 }
82558
82559 // Manually shove something into the read() buffer.
82560 // This returns true if the highWaterMark has not been hit yet,
82561 // similar to how Writable.write() returns true if you should
82562 // write() some more.
82563 Readable.prototype.push = function (chunk, encoding) {
82564 var state = this._readableState;
82565
82566 if (!state.objectMode && typeof chunk === 'string') {
82567 encoding = encoding || state.defaultEncoding;
82568 if (encoding !== state.encoding) {
82569 chunk = bufferShim.from(chunk, encoding);
82570 encoding = '';
82571 }
82572 }
82573
82574 return readableAddChunk(this, state, chunk, encoding, false);
82575 };
82576
82577 // Unshift should *always* be something directly out of read()
82578 Readable.prototype.unshift = function (chunk) {
82579 var state = this._readableState;
82580 return readableAddChunk(this, state, chunk, '', true);
82581 };
82582
82583 Readable.prototype.isPaused = function () {
82584 return this._readableState.flowing === false;
82585 };
82586
82587 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
82588 var er = chunkInvalid(state, chunk);
82589 if (er) {
82590 stream.emit('error', er);
82591 } else if (chunk === null) {
82592 state.reading = false;
82593 onEofChunk(stream, state);
82594 } else if (state.objectMode || chunk && chunk.length > 0) {
82595 if (state.ended && !addToFront) {
82596 var e = new Error('stream.push() after EOF');
82597 stream.emit('error', e);
82598 } else if (state.endEmitted && addToFront) {
82599 var _e = new Error('stream.unshift() after end event');
82600 stream.emit('error', _e);
82601 } else {
82602 var skipAdd;
82603 if (state.decoder && !addToFront && !encoding) {
82604 chunk = state.decoder.write(chunk);
82605 skipAdd = !state.objectMode && chunk.length === 0;
82606 }
82607
82608 if (!addToFront) state.reading = false;
82609
82610 // Don't add to the buffer if we've decoded to an empty string chunk and
82611 // we're not in object mode
82612 if (!skipAdd) {
82613 // if we want the data now, just emit it.
82614 if (state.flowing && state.length === 0 && !state.sync) {
82615 stream.emit('data', chunk);
82616 stream.read(0);
82617 } else {
82618 // update the buffer info.
82619 state.length += state.objectMode ? 1 : chunk.length;
82620 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
82621
82622 if (state.needReadable) emitReadable(stream);
82623 }
82624 }
82625
82626 maybeReadMore(stream, state);
82627 }
82628 } else if (!addToFront) {
82629 state.reading = false;
82630 }
82631
82632 return needMoreData(state);
82633 }
82634
82635 // if it's past the high water mark, we can push in some more.
82636 // Also, if we have no data yet, we can stand some
82637 // more bytes. This is to work around cases where hwm=0,
82638 // such as the repl. Also, if the push() triggered a
82639 // readable event, and the user called read(largeNumber) such that
82640 // needReadable was set, then we ought to push more, so that another
82641 // 'readable' event will be triggered.
82642 function needMoreData(state) {
82643 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
82644 }
82645
82646 // backwards compatibility.
82647 Readable.prototype.setEncoding = function (enc) {
82648 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
82649 this._readableState.decoder = new StringDecoder(enc);
82650 this._readableState.encoding = enc;
82651 return this;
82652 };
82653
82654 // Don't raise the hwm > 8MB
82655 var MAX_HWM = 0x800000;
82656 function computeNewHighWaterMark(n) {
82657 if (n >= MAX_HWM) {
82658 n = MAX_HWM;
82659 } else {
82660 // Get the next highest power of 2 to prevent increasing hwm excessively in
82661 // tiny amounts
82662 n--;
82663 n |= n >>> 1;
82664 n |= n >>> 2;
82665 n |= n >>> 4;
82666 n |= n >>> 8;
82667 n |= n >>> 16;
82668 n++;
82669 }
82670 return n;
82671 }
82672
82673 // This function is designed to be inlinable, so please take care when making
82674 // changes to the function body.
82675 function howMuchToRead(n, state) {
82676 if (n <= 0 || state.length === 0 && state.ended) return 0;
82677 if (state.objectMode) return 1;
82678 if (n !== n) {
82679 // Only flow one buffer at a time
82680 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
82681 }
82682 // If we're asking for more than the current hwm, then raise the hwm.
82683 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
82684 if (n <= state.length) return n;
82685 // Don't have enough
82686 if (!state.ended) {
82687 state.needReadable = true;
82688 return 0;
82689 }
82690 return state.length;
82691 }
82692
82693 // you can override either this method, or the async _read(n) below.
82694 Readable.prototype.read = function (n) {
82695 debug('read', n);
82696 n = parseInt(n, 10);
82697 var state = this._readableState;
82698 var nOrig = n;
82699
82700 if (n !== 0) state.emittedReadable = false;
82701
82702 // if we're doing read(0) to trigger a readable event, but we
82703 // already have a bunch of data in the buffer, then just trigger
82704 // the 'readable' event and move on.
82705 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
82706 debug('read: emitReadable', state.length, state.ended);
82707 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
82708 return null;
82709 }
82710
82711 n = howMuchToRead(n, state);
82712
82713 // if we've ended, and we're now clear, then finish it up.
82714 if (n === 0 && state.ended) {
82715 if (state.length === 0) endReadable(this);
82716 return null;
82717 }
82718
82719 // All the actual chunk generation logic needs to be
82720 // *below* the call to _read. The reason is that in certain
82721 // synthetic stream cases, such as passthrough streams, _read
82722 // may be a completely synchronous operation which may change
82723 // the state of the read buffer, providing enough data when
82724 // before there was *not* enough.
82725 //
82726 // So, the steps are:
82727 // 1. Figure out what the state of things will be after we do
82728 // a read from the buffer.
82729 //
82730 // 2. If that resulting state will trigger a _read, then call _read.
82731 // Note that this may be asynchronous, or synchronous. Yes, it is
82732 // deeply ugly to write APIs this way, but that still doesn't mean
82733 // that the Readable class should behave improperly, as streams are
82734 // designed to be sync/async agnostic.
82735 // Take note if the _read call is sync or async (ie, if the read call
82736 // has returned yet), so that we know whether or not it's safe to emit
82737 // 'readable' etc.
82738 //
82739 // 3. Actually pull the requested chunks out of the buffer and return.
82740
82741 // if we need a readable event, then we need to do some reading.
82742 var doRead = state.needReadable;
82743 debug('need readable', doRead);
82744
82745 // if we currently have less than the highWaterMark, then also read some
82746 if (state.length === 0 || state.length - n < state.highWaterMark) {
82747 doRead = true;
82748 debug('length less than watermark', doRead);
82749 }
82750
82751 // however, if we've ended, then there's no point, and if we're already
82752 // reading, then it's unnecessary.
82753 if (state.ended || state.reading) {
82754 doRead = false;
82755 debug('reading or ended', doRead);
82756 } else if (doRead) {
82757 debug('do read');
82758 state.reading = true;
82759 state.sync = true;
82760 // if the length is currently zero, then we *need* a readable event.
82761 if (state.length === 0) state.needReadable = true;
82762 // call internal read method
82763 this._read(state.highWaterMark);
82764 state.sync = false;
82765 // If _read pushed data synchronously, then `reading` will be false,
82766 // and we need to re-evaluate how much data we can return to the user.
82767 if (!state.reading) n = howMuchToRead(nOrig, state);
82768 }
82769
82770 var ret;
82771 if (n > 0) ret = fromList(n, state);else ret = null;
82772
82773 if (ret === null) {
82774 state.needReadable = true;
82775 n = 0;
82776 } else {
82777 state.length -= n;
82778 }
82779
82780 if (state.length === 0) {
82781 // If we have nothing in the buffer, then we want to know
82782 // as soon as we *do* get something into the buffer.
82783 if (!state.ended) state.needReadable = true;
82784
82785 // If we tried to read() past the EOF, then emit end on the next tick.
82786 if (nOrig !== n && state.ended) endReadable(this);
82787 }
82788
82789 if (ret !== null) this.emit('data', ret);
82790
82791 return ret;
82792 };
82793
82794 function chunkInvalid(state, chunk) {
82795 var er = null;
82796 if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
82797 er = new TypeError('Invalid non-string/buffer chunk');
82798 }
82799 return er;
82800 }
82801
82802 function onEofChunk(stream, state) {
82803 if (state.ended) return;
82804 if (state.decoder) {
82805 var chunk = state.decoder.end();
82806 if (chunk && chunk.length) {
82807 state.buffer.push(chunk);
82808 state.length += state.objectMode ? 1 : chunk.length;
82809 }
82810 }
82811 state.ended = true;
82812
82813 // emit 'readable' now to make sure it gets picked up.
82814 emitReadable(stream);
82815 }
82816
82817 // Don't emit readable right away in sync mode, because this can trigger
82818 // another read() call => stack overflow. This way, it might trigger
82819 // a nextTick recursion warning, but that's not so bad.
82820 function emitReadable(stream) {
82821 var state = stream._readableState;
82822 state.needReadable = false;
82823 if (!state.emittedReadable) {
82824 debug('emitReadable', state.flowing);
82825 state.emittedReadable = true;
82826 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
82827 }
82828 }
82829
82830 function emitReadable_(stream) {
82831 debug('emit readable');
82832 stream.emit('readable');
82833 flow(stream);
82834 }
82835
82836 // at this point, the user has presumably seen the 'readable' event,
82837 // and called read() to consume some data. that may have triggered
82838 // in turn another _read(n) call, in which case reading = true if
82839 // it's in progress.
82840 // However, if we're not ended, or reading, and the length < hwm,
82841 // then go ahead and try to read some more preemptively.
82842 function maybeReadMore(stream, state) {
82843 if (!state.readingMore) {
82844 state.readingMore = true;
82845 processNextTick(maybeReadMore_, stream, state);
82846 }
82847 }
82848
82849 function maybeReadMore_(stream, state) {
82850 var len = state.length;
82851 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
82852 debug('maybeReadMore read 0');
82853 stream.read(0);
82854 if (len === state.length)
82855 // didn't get any data, stop spinning.
82856 break;else len = state.length;
82857 }
82858 state.readingMore = false;
82859 }
82860
82861 // abstract method. to be overridden in specific implementation classes.
82862 // call cb(er, data) where data is <= n in length.
82863 // for virtual (non-string, non-buffer) streams, "length" is somewhat
82864 // arbitrary, and perhaps not very meaningful.
82865 Readable.prototype._read = function (n) {
82866 this.emit('error', new Error('_read() is not implemented'));
82867 };
82868
82869 Readable.prototype.pipe = function (dest, pipeOpts) {
82870 var src = this;
82871 var state = this._readableState;
82872
82873 switch (state.pipesCount) {
82874 case 0:
82875 state.pipes = dest;
82876 break;
82877 case 1:
82878 state.pipes = [state.pipes, dest];
82879 break;
82880 default:
82881 state.pipes.push(dest);
82882 break;
82883 }
82884 state.pipesCount += 1;
82885 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
82886
82887 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
82888
82889 var endFn = doEnd ? onend : cleanup;
82890 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
82891
82892 dest.on('unpipe', onunpipe);
82893 function onunpipe(readable) {
82894 debug('onunpipe');
82895 if (readable === src) {
82896 cleanup();
82897 }
82898 }
82899
82900 function onend() {
82901 debug('onend');
82902 dest.end();
82903 }
82904
82905 // when the dest drains, it reduces the awaitDrain counter
82906 // on the source. This would be more elegant with a .once()
82907 // handler in flow(), but adding and removing repeatedly is
82908 // too slow.
82909 var ondrain = pipeOnDrain(src);
82910 dest.on('drain', ondrain);
82911
82912 var cleanedUp = false;
82913 function cleanup() {
82914 debug('cleanup');
82915 // cleanup event handlers once the pipe is broken
82916 dest.removeListener('close', onclose);
82917 dest.removeListener('finish', onfinish);
82918 dest.removeListener('drain', ondrain);
82919 dest.removeListener('error', onerror);
82920 dest.removeListener('unpipe', onunpipe);
82921 src.removeListener('end', onend);
82922 src.removeListener('end', cleanup);
82923 src.removeListener('data', ondata);
82924
82925 cleanedUp = true;
82926
82927 // if the reader is waiting for a drain event from this
82928 // specific writer, then it would cause it to never start
82929 // flowing again.
82930 // So, if this is awaiting a drain, then we just call it now.
82931 // If we don't know, then assume that we are waiting for one.
82932 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
82933 }
82934
82935 // If the user pushes more data while we're writing to dest then we'll end up
82936 // in ondata again. However, we only want to increase awaitDrain once because
82937 // dest will only emit one 'drain' event for the multiple writes.
82938 // => Introduce a guard on increasing awaitDrain.
82939 var increasedAwaitDrain = false;
82940 src.on('data', ondata);
82941 function ondata(chunk) {
82942 debug('ondata');
82943 increasedAwaitDrain = false;
82944 var ret = dest.write(chunk);
82945 if (false === ret && !increasedAwaitDrain) {
82946 // If the user unpiped during `dest.write()`, it is possible
82947 // to get stuck in a permanently paused state if that write
82948 // also returned false.
82949 // => Check whether `dest` is still a piping destination.
82950 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
82951 debug('false write response, pause', src._readableState.awaitDrain);
82952 src._readableState.awaitDrain++;
82953 increasedAwaitDrain = true;
82954 }
82955 src.pause();
82956 }
82957 }
82958
82959 // if the dest has an error, then stop piping into it.
82960 // however, don't suppress the throwing behavior for this.
82961 function onerror(er) {
82962 debug('onerror', er);
82963 unpipe();
82964 dest.removeListener('error', onerror);
82965 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
82966 }
82967
82968 // Make sure our error handler is attached before userland ones.
82969 prependListener(dest, 'error', onerror);
82970
82971 // Both close and finish should trigger unpipe, but only once.
82972 function onclose() {
82973 dest.removeListener('finish', onfinish);
82974 unpipe();
82975 }
82976 dest.once('close', onclose);
82977 function onfinish() {
82978 debug('onfinish');
82979 dest.removeListener('close', onclose);
82980 unpipe();
82981 }
82982 dest.once('finish', onfinish);
82983
82984 function unpipe() {
82985 debug('unpipe');
82986 src.unpipe(dest);
82987 }
82988
82989 // tell the dest that it's being piped to
82990 dest.emit('pipe', src);
82991
82992 // start the flow if it hasn't been started already.
82993 if (!state.flowing) {
82994 debug('pipe resume');
82995 src.resume();
82996 }
82997
82998 return dest;
82999 };
83000
83001 function pipeOnDrain(src) {
83002 return function () {
83003 var state = src._readableState;
83004 debug('pipeOnDrain', state.awaitDrain);
83005 if (state.awaitDrain) state.awaitDrain--;
83006 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
83007 state.flowing = true;
83008 flow(src);
83009 }
83010 };
83011 }
83012
83013 Readable.prototype.unpipe = function (dest) {
83014 var state = this._readableState;
83015
83016 // if we're not piping anywhere, then do nothing.
83017 if (state.pipesCount === 0) return this;
83018
83019 // just one destination. most common case.
83020 if (state.pipesCount === 1) {
83021 // passed in one, but it's not the right one.
83022 if (dest && dest !== state.pipes) return this;
83023
83024 if (!dest) dest = state.pipes;
83025
83026 // got a match.
83027 state.pipes = null;
83028 state.pipesCount = 0;
83029 state.flowing = false;
83030 if (dest) dest.emit('unpipe', this);
83031 return this;
83032 }
83033
83034 // slow case. multiple pipe destinations.
83035
83036 if (!dest) {
83037 // remove all.
83038 var dests = state.pipes;
83039 var len = state.pipesCount;
83040 state.pipes = null;
83041 state.pipesCount = 0;
83042 state.flowing = false;
83043
83044 for (var i = 0; i < len; i++) {
83045 dests[i].emit('unpipe', this);
83046 }return this;
83047 }
83048
83049 // try to find the right one.
83050 var index = indexOf(state.pipes, dest);
83051 if (index === -1) return this;
83052
83053 state.pipes.splice(index, 1);
83054 state.pipesCount -= 1;
83055 if (state.pipesCount === 1) state.pipes = state.pipes[0];
83056
83057 dest.emit('unpipe', this);
83058
83059 return this;
83060 };
83061
83062 // set up data events if they are asked for
83063 // Ensure readable listeners eventually get something
83064 Readable.prototype.on = function (ev, fn) {
83065 var res = Stream.prototype.on.call(this, ev, fn);
83066
83067 if (ev === 'data') {
83068 // Start flowing on next tick if stream isn't explicitly paused
83069 if (this._readableState.flowing !== false) this.resume();
83070 } else if (ev === 'readable') {
83071 var state = this._readableState;
83072 if (!state.endEmitted && !state.readableListening) {
83073 state.readableListening = state.needReadable = true;
83074 state.emittedReadable = false;
83075 if (!state.reading) {
83076 processNextTick(nReadingNextTick, this);
83077 } else if (state.length) {
83078 emitReadable(this, state);
83079 }
83080 }
83081 }
83082
83083 return res;
83084 };
83085 Readable.prototype.addListener = Readable.prototype.on;
83086
83087 function nReadingNextTick(self) {
83088 debug('readable nexttick read 0');
83089 self.read(0);
83090 }
83091
83092 // pause() and resume() are remnants of the legacy readable stream API
83093 // If the user uses them, then switch into old mode.
83094 Readable.prototype.resume = function () {
83095 var state = this._readableState;
83096 if (!state.flowing) {
83097 debug('resume');
83098 state.flowing = true;
83099 resume(this, state);
83100 }
83101 return this;
83102 };
83103
83104 function resume(stream, state) {
83105 if (!state.resumeScheduled) {
83106 state.resumeScheduled = true;
83107 processNextTick(resume_, stream, state);
83108 }
83109 }
83110
83111 function resume_(stream, state) {
83112 if (!state.reading) {
83113 debug('resume read 0');
83114 stream.read(0);
83115 }
83116
83117 state.resumeScheduled = false;
83118 state.awaitDrain = 0;
83119 stream.emit('resume');
83120 flow(stream);
83121 if (state.flowing && !state.reading) stream.read(0);
83122 }
83123
83124 Readable.prototype.pause = function () {
83125 debug('call pause flowing=%j', this._readableState.flowing);
83126 if (false !== this._readableState.flowing) {
83127 debug('pause');
83128 this._readableState.flowing = false;
83129 this.emit('pause');
83130 }
83131 return this;
83132 };
83133
83134 function flow(stream) {
83135 var state = stream._readableState;
83136 debug('flow', state.flowing);
83137 while (state.flowing && stream.read() !== null) {}
83138 }
83139
83140 // wrap an old-style stream as the async data source.
83141 // This is *not* part of the readable stream interface.
83142 // It is an ugly unfortunate mess of history.
83143 Readable.prototype.wrap = function (stream) {
83144 var state = this._readableState;
83145 var paused = false;
83146
83147 var self = this;
83148 stream.on('end', function () {
83149 debug('wrapped end');
83150 if (state.decoder && !state.ended) {
83151 var chunk = state.decoder.end();
83152 if (chunk && chunk.length) self.push(chunk);
83153 }
83154
83155 self.push(null);
83156 });
83157
83158 stream.on('data', function (chunk) {
83159 debug('wrapped data');
83160 if (state.decoder) chunk = state.decoder.write(chunk);
83161
83162 // don't skip over falsy values in objectMode
83163 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
83164
83165 var ret = self.push(chunk);
83166 if (!ret) {
83167 paused = true;
83168 stream.pause();
83169 }
83170 });
83171
83172 // proxy all the other methods.
83173 // important when wrapping filters and duplexes.
83174 for (var i in stream) {
83175 if (this[i] === undefined && typeof stream[i] === 'function') {
83176 this[i] = function (method) {
83177 return function () {
83178 return stream[method].apply(stream, arguments);
83179 };
83180 }(i);
83181 }
83182 }
83183
83184 // proxy certain important events.
83185 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
83186 forEach(events, function (ev) {
83187 stream.on(ev, self.emit.bind(self, ev));
83188 });
83189
83190 // when we try to consume some more bytes, simply unpause the
83191 // underlying stream.
83192 self._read = function (n) {
83193 debug('wrapped _read', n);
83194 if (paused) {
83195 paused = false;
83196 stream.resume();
83197 }
83198 };
83199
83200 return self;
83201 };
83202
83203 // exposed for testing purposes only.
83204 Readable._fromList = fromList;
83205
83206 // Pluck off n bytes from an array of buffers.
83207 // Length is the combined lengths of all the buffers in the list.
83208 // This function is designed to be inlinable, so please take care when making
83209 // changes to the function body.
83210 function fromList(n, state) {
83211 // nothing buffered
83212 if (state.length === 0) return null;
83213
83214 var ret;
83215 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
83216 // read it all, truncate the list
83217 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);
83218 state.buffer.clear();
83219 } else {
83220 // read part of list
83221 ret = fromListPartial(n, state.buffer, state.decoder);
83222 }
83223
83224 return ret;
83225 }
83226
83227 // Extracts only enough buffered data to satisfy the amount requested.
83228 // This function is designed to be inlinable, so please take care when making
83229 // changes to the function body.
83230 function fromListPartial(n, list, hasStrings) {
83231 var ret;
83232 if (n < list.head.data.length) {
83233 // slice is the same for buffers and strings
83234 ret = list.head.data.slice(0, n);
83235 list.head.data = list.head.data.slice(n);
83236 } else if (n === list.head.data.length) {
83237 // first chunk is a perfect match
83238 ret = list.shift();
83239 } else {
83240 // result spans more than one buffer
83241 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
83242 }
83243 return ret;
83244 }
83245
83246 // Copies a specified amount of characters from the list of buffered data
83247 // chunks.
83248 // This function is designed to be inlinable, so please take care when making
83249 // changes to the function body.
83250 function copyFromBufferString(n, list) {
83251 var p = list.head;
83252 var c = 1;
83253 var ret = p.data;
83254 n -= ret.length;
83255 while (p = p.next) {
83256 var str = p.data;
83257 var nb = n > str.length ? str.length : n;
83258 if (nb === str.length) ret += str;else ret += str.slice(0, n);
83259 n -= nb;
83260 if (n === 0) {
83261 if (nb === str.length) {
83262 ++c;
83263 if (p.next) list.head = p.next;else list.head = list.tail = null;
83264 } else {
83265 list.head = p;
83266 p.data = str.slice(nb);
83267 }
83268 break;
83269 }
83270 ++c;
83271 }
83272 list.length -= c;
83273 return ret;
83274 }
83275
83276 // Copies a specified amount of bytes from the list of buffered data chunks.
83277 // This function is designed to be inlinable, so please take care when making
83278 // changes to the function body.
83279 function copyFromBuffer(n, list) {
83280 var ret = bufferShim.allocUnsafe(n);
83281 var p = list.head;
83282 var c = 1;
83283 p.data.copy(ret);
83284 n -= p.data.length;
83285 while (p = p.next) {
83286 var buf = p.data;
83287 var nb = n > buf.length ? buf.length : n;
83288 buf.copy(ret, ret.length - n, 0, nb);
83289 n -= nb;
83290 if (n === 0) {
83291 if (nb === buf.length) {
83292 ++c;
83293 if (p.next) list.head = p.next;else list.head = list.tail = null;
83294 } else {
83295 list.head = p;
83296 p.data = buf.slice(nb);
83297 }
83298 break;
83299 }
83300 ++c;
83301 }
83302 list.length -= c;
83303 return ret;
83304 }
83305
83306 function endReadable(stream) {
83307 var state = stream._readableState;
83308
83309 // If we get here before consuming all the bytes, then that is a
83310 // bug in node. Should never happen.
83311 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
83312
83313 if (!state.endEmitted) {
83314 state.ended = true;
83315 processNextTick(endReadableNT, state, stream);
83316 }
83317 }
83318
83319 function endReadableNT(state, stream) {
83320 // Check that we didn't get one last unshift.
83321 if (!state.endEmitted && state.length === 0) {
83322 state.endEmitted = true;
83323 stream.readable = false;
83324 stream.emit('end');
83325 }
83326 }
83327
83328 function forEach(xs, f) {
83329 for (var i = 0, l = xs.length; i < l; i++) {
83330 f(xs[i], i);
83331 }
83332 }
83333
83334 function indexOf(xs, x) {
83335 for (var i = 0, l = xs.length; i < l; i++) {
83336 if (xs[i] === x) return i;
83337 }
83338 return -1;
83339 }
83340 }).call(this,require('_process'))
83341 },{"./_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){
83342 // a transform stream is a readable/writable stream where you do
83343 // something with the data. Sometimes it's called a "filter",
83344 // but that's not a great name for it, since that implies a thing where
83345 // some bits pass through, and others are simply ignored. (That would
83346 // be a valid example of a transform, of course.)
83347 //
83348 // While the output is causally related to the input, it's not a
83349 // necessarily symmetric or synchronous transformation. For example,
83350 // a zlib stream might take multiple plain-text writes(), and then
83351 // emit a single compressed chunk some time in the future.
83352 //
83353 // Here's how this works:
83354 //
83355 // The Transform stream has all the aspects of the readable and writable
83356 // stream classes. When you write(chunk), that calls _write(chunk,cb)
83357 // internally, and returns false if there's a lot of pending writes
83358 // buffered up. When you call read(), that calls _read(n) until
83359 // there's enough pending readable data buffered up.
83360 //
83361 // In a transform stream, the written data is placed in a buffer. When
83362 // _read(n) is called, it transforms the queued up data, calling the
83363 // buffered _write cb's as it consumes chunks. If consuming a single
83364 // written chunk would result in multiple output chunks, then the first
83365 // outputted bit calls the readcb, and subsequent chunks just go into
83366 // the read buffer, and will cause it to emit 'readable' if necessary.
83367 //
83368 // This way, back-pressure is actually determined by the reading side,
83369 // since _read has to be called to start processing a new chunk. However,
83370 // a pathological inflate type of transform can cause excessive buffering
83371 // here. For example, imagine a stream where every byte of input is
83372 // interpreted as an integer from 0-255, and then results in that many
83373 // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
83374 // 1kb of data being output. In this case, you could write a very small
83375 // amount of input, and end up with a very large amount of output. In
83376 // such a pathological inflating mechanism, there'd be no way to tell
83377 // the system to stop doing the transform. A single 4MB write could
83378 // cause the system to run out of memory.
83379 //
83380 // However, even in such a pathological case, only a single written chunk
83381 // would be consumed, and then the rest would wait (un-transformed) until
83382 // the results of the previous transformed chunk were consumed.
83383
83384 'use strict';
83385
83386 module.exports = Transform;
83387
83388 var Duplex = require('./_stream_duplex');
83389
83390 /*<replacement>*/
83391 var util = require('core-util-is');
83392 util.inherits = require('inherits');
83393 /*</replacement>*/
83394
83395 util.inherits(Transform, Duplex);
83396
83397 function TransformState(stream) {
83398 this.afterTransform = function (er, data) {
83399 return afterTransform(stream, er, data);
83400 };
83401
83402 this.needTransform = false;
83403 this.transforming = false;
83404 this.writecb = null;
83405 this.writechunk = null;
83406 this.writeencoding = null;
83407 }
83408
83409 function afterTransform(stream, er, data) {
83410 var ts = stream._transformState;
83411 ts.transforming = false;
83412
83413 var cb = ts.writecb;
83414
83415 if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
83416
83417 ts.writechunk = null;
83418 ts.writecb = null;
83419
83420 if (data !== null && data !== undefined) stream.push(data);
83421
83422 cb(er);
83423
83424 var rs = stream._readableState;
83425 rs.reading = false;
83426 if (rs.needReadable || rs.length < rs.highWaterMark) {
83427 stream._read(rs.highWaterMark);
83428 }
83429 }
83430
83431 function Transform(options) {
83432 if (!(this instanceof Transform)) return new Transform(options);
83433
83434 Duplex.call(this, options);
83435
83436 this._transformState = new TransformState(this);
83437
83438 var stream = this;
83439
83440 // start out asking for a readable event once data is transformed.
83441 this._readableState.needReadable = true;
83442
83443 // we have implemented the _read method, and done the other things
83444 // that Readable wants before the first _read call, so unset the
83445 // sync guard flag.
83446 this._readableState.sync = false;
83447
83448 if (options) {
83449 if (typeof options.transform === 'function') this._transform = options.transform;
83450
83451 if (typeof options.flush === 'function') this._flush = options.flush;
83452 }
83453
83454 // When the writable side finishes, then flush out anything remaining.
83455 this.once('prefinish', function () {
83456 if (typeof this._flush === 'function') this._flush(function (er, data) {
83457 done(stream, er, data);
83458 });else done(stream);
83459 });
83460 }
83461
83462 Transform.prototype.push = function (chunk, encoding) {
83463 this._transformState.needTransform = false;
83464 return Duplex.prototype.push.call(this, chunk, encoding);
83465 };
83466
83467 // This is the part where you do stuff!
83468 // override this function in implementation classes.
83469 // 'chunk' is an input chunk.
83470 //
83471 // Call `push(newChunk)` to pass along transformed output
83472 // to the readable side. You may call 'push' zero or more times.
83473 //
83474 // Call `cb(err)` when you are done with this chunk. If you pass
83475 // an error, then that'll put the hurt on the whole operation. If you
83476 // never call cb(), then you'll never get another chunk.
83477 Transform.prototype._transform = function (chunk, encoding, cb) {
83478 throw new Error('_transform() is not implemented');
83479 };
83480
83481 Transform.prototype._write = function (chunk, encoding, cb) {
83482 var ts = this._transformState;
83483 ts.writecb = cb;
83484 ts.writechunk = chunk;
83485 ts.writeencoding = encoding;
83486 if (!ts.transforming) {
83487 var rs = this._readableState;
83488 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
83489 }
83490 };
83491
83492 // Doesn't matter what the args are here.
83493 // _transform does all the work.
83494 // That we got here means that the readable side wants more data.
83495 Transform.prototype._read = function (n) {
83496 var ts = this._transformState;
83497
83498 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
83499 ts.transforming = true;
83500 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
83501 } else {
83502 // mark that we need a transform, so that any data that comes in
83503 // will get processed, now that we've asked for it.
83504 ts.needTransform = true;
83505 }
83506 };
83507
83508 function done(stream, er, data) {
83509 if (er) return stream.emit('error', er);
83510
83511 if (data !== null && data !== undefined) stream.push(data);
83512
83513 // if there's nothing in the write buffer, then that means
83514 // that nothing more will ever be provided
83515 var ws = stream._writableState;
83516 var ts = stream._transformState;
83517
83518 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
83519
83520 if (ts.transforming) throw new Error('Calling transform done when still transforming');
83521
83522 return stream.push(null);
83523 }
83524 },{"./_stream_duplex":15,"core-util-is":6,"inherits":9}],19:[function(require,module,exports){
83525 (function (process){
83526 // A bit simpler than readable streams.
83527 // Implement an async ._write(chunk, encoding, cb), and it'll handle all
83528 // the drain event emission and buffering.
83529
83530 'use strict';
83531
83532 module.exports = Writable;
83533
83534 /*<replacement>*/
83535 var processNextTick = require('process-nextick-args');
83536 /*</replacement>*/
83537
83538 /*<replacement>*/
83539 var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
83540 /*</replacement>*/
83541
83542 /*<replacement>*/
83543 var Duplex;
83544 /*</replacement>*/
83545
83546 Writable.WritableState = WritableState;
83547
83548 /*<replacement>*/
83549 var util = require('core-util-is');
83550 util.inherits = require('inherits');
83551 /*</replacement>*/
83552
83553 /*<replacement>*/
83554 var internalUtil = {
83555 deprecate: require('util-deprecate')
83556 };
83557 /*</replacement>*/
83558
83559 /*<replacement>*/
83560 var Stream;
83561 (function () {
83562 try {
83563 Stream = require('st' + 'ream');
83564 } catch (_) {} finally {
83565 if (!Stream) Stream = require('events').EventEmitter;
83566 }
83567 })();
83568 /*</replacement>*/
83569
83570 var Buffer = require('buffer').Buffer;
83571 /*<replacement>*/
83572 var bufferShim = require('buffer-shims');
83573 /*</replacement>*/
83574
83575 util.inherits(Writable, Stream);
83576
83577 function nop() {}
83578
83579 function WriteReq(chunk, encoding, cb) {
83580 this.chunk = chunk;
83581 this.encoding = encoding;
83582 this.callback = cb;
83583 this.next = null;
83584 }
83585
83586 function WritableState(options, stream) {
83587 Duplex = Duplex || require('./_stream_duplex');
83588
83589 options = options || {};
83590
83591 // object stream flag to indicate whether or not this stream
83592 // contains buffers or objects.
83593 this.objectMode = !!options.objectMode;
83594
83595 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
83596
83597 // the point at which write() starts returning false
83598 // Note: 0 is a valid value, means that we always return false if
83599 // the entire buffer is not flushed immediately on write()
83600 var hwm = options.highWaterMark;
83601 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
83602 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
83603
83604 // cast to ints.
83605 this.highWaterMark = ~ ~this.highWaterMark;
83606
83607 // drain event flag.
83608 this.needDrain = false;
83609 // at the start of calling end()
83610 this.ending = false;
83611 // when end() has been called, and returned
83612 this.ended = false;
83613 // when 'finish' is emitted
83614 this.finished = false;
83615
83616 // should we decode strings into buffers before passing to _write?
83617 // this is here so that some node-core streams can optimize string
83618 // handling at a lower level.
83619 var noDecode = options.decodeStrings === false;
83620 this.decodeStrings = !noDecode;
83621
83622 // Crypto is kind of old and crusty. Historically, its default string
83623 // encoding is 'binary' so we have to make this configurable.
83624 // Everything else in the universe uses 'utf8', though.
83625 this.defaultEncoding = options.defaultEncoding || 'utf8';
83626
83627 // not an actual buffer we keep track of, but a measurement
83628 // of how much we're waiting to get pushed to some underlying
83629 // socket or file.
83630 this.length = 0;
83631
83632 // a flag to see when we're in the middle of a write.
83633 this.writing = false;
83634
83635 // when true all writes will be buffered until .uncork() call
83636 this.corked = 0;
83637
83638 // a flag to be able to tell if the onwrite cb is called immediately,
83639 // or on a later tick. We set this to true at first, because any
83640 // actions that shouldn't happen until "later" should generally also
83641 // not happen before the first write call.
83642 this.sync = true;
83643
83644 // a flag to know if we're processing previously buffered items, which
83645 // may call the _write() callback in the same tick, so that we don't
83646 // end up in an overlapped onwrite situation.
83647 this.bufferProcessing = false;
83648
83649 // the callback that's passed to _write(chunk,cb)
83650 this.onwrite = function (er) {
83651 onwrite(stream, er);
83652 };
83653
83654 // the callback that the user supplies to write(chunk,encoding,cb)
83655 this.writecb = null;
83656
83657 // the amount that is being written when _write is called.
83658 this.writelen = 0;
83659
83660 this.bufferedRequest = null;
83661 this.lastBufferedRequest = null;
83662
83663 // number of pending user-supplied write callbacks
83664 // this must be 0 before 'finish' can be emitted
83665 this.pendingcb = 0;
83666
83667 // emit prefinish if the only thing we're waiting for is _write cbs
83668 // This is relevant for synchronous Transform streams
83669 this.prefinished = false;
83670
83671 // True if the error was already emitted and should not be thrown again
83672 this.errorEmitted = false;
83673
83674 // count buffered requests
83675 this.bufferedRequestCount = 0;
83676
83677 // allocate the first CorkedRequest, there is always
83678 // one allocated and free to use, and we maintain at most two
83679 this.corkedRequestsFree = new CorkedRequest(this);
83680 }
83681
83682 WritableState.prototype.getBuffer = function getBuffer() {
83683 var current = this.bufferedRequest;
83684 var out = [];
83685 while (current) {
83686 out.push(current);
83687 current = current.next;
83688 }
83689 return out;
83690 };
83691
83692 (function () {
83693 try {
83694 Object.defineProperty(WritableState.prototype, 'buffer', {
83695 get: internalUtil.deprecate(function () {
83696 return this.getBuffer();
83697 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
83698 });
83699 } catch (_) {}
83700 })();
83701
83702 // Test _writableState for inheritance to account for Duplex streams,
83703 // whose prototype chain only points to Readable.
83704 var realHasInstance;
83705 if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
83706 realHasInstance = Function.prototype[Symbol.hasInstance];
83707 Object.defineProperty(Writable, Symbol.hasInstance, {
83708 value: function (object) {
83709 if (realHasInstance.call(this, object)) return true;
83710
83711 return object && object._writableState instanceof WritableState;
83712 }
83713 });
83714 } else {
83715 realHasInstance = function (object) {
83716 return object instanceof this;
83717 };
83718 }
83719
83720 function Writable(options) {
83721 Duplex = Duplex || require('./_stream_duplex');
83722
83723 // Writable ctor is applied to Duplexes, too.
83724 // `realHasInstance` is necessary because using plain `instanceof`
83725 // would return false, as no `_writableState` property is attached.
83726
83727 // Trying to use the custom `instanceof` for Writable here will also break the
83728 // Node.js LazyTransform implementation, which has a non-trivial getter for
83729 // `_writableState` that would lead to infinite recursion.
83730 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
83731 return new Writable(options);
83732 }
83733
83734 this._writableState = new WritableState(options, this);
83735
83736 // legacy.
83737 this.writable = true;
83738
83739 if (options) {
83740 if (typeof options.write === 'function') this._write = options.write;
83741
83742 if (typeof options.writev === 'function') this._writev = options.writev;
83743 }
83744
83745 Stream.call(this);
83746 }
83747
83748 // Otherwise people can pipe Writable streams, which is just wrong.
83749 Writable.prototype.pipe = function () {
83750 this.emit('error', new Error('Cannot pipe, not readable'));
83751 };
83752
83753 function writeAfterEnd(stream, cb) {
83754 var er = new Error('write after end');
83755 // TODO: defer error events consistently everywhere, not just the cb
83756 stream.emit('error', er);
83757 processNextTick(cb, er);
83758 }
83759
83760 // If we get something that is not a buffer, string, null, or undefined,
83761 // and we're not in objectMode, then that's an error.
83762 // Otherwise stream chunks are all considered to be of length=1, and the
83763 // watermarks determine how many objects to keep in the buffer, rather than
83764 // how many bytes or characters.
83765 function validChunk(stream, state, chunk, cb) {
83766 var valid = true;
83767 var er = false;
83768 // Always throw error if a null is written
83769 // if we are not in object mode then throw
83770 // if it is not a buffer, string, or undefined.
83771 if (chunk === null) {
83772 er = new TypeError('May not write null values to stream');
83773 } else if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
83774 er = new TypeError('Invalid non-string/buffer chunk');
83775 }
83776 if (er) {
83777 stream.emit('error', er);
83778 processNextTick(cb, er);
83779 valid = false;
83780 }
83781 return valid;
83782 }
83783
83784 Writable.prototype.write = function (chunk, encoding, cb) {
83785 var state = this._writableState;
83786 var ret = false;
83787
83788 if (typeof encoding === 'function') {
83789 cb = encoding;
83790 encoding = null;
83791 }
83792
83793 if (Buffer.isBuffer(chunk)) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
83794
83795 if (typeof cb !== 'function') cb = nop;
83796
83797 if (state.ended) writeAfterEnd(this, cb);else if (validChunk(this, state, chunk, cb)) {
83798 state.pendingcb++;
83799 ret = writeOrBuffer(this, state, chunk, encoding, cb);
83800 }
83801
83802 return ret;
83803 };
83804
83805 Writable.prototype.cork = function () {
83806 var state = this._writableState;
83807
83808 state.corked++;
83809 };
83810
83811 Writable.prototype.uncork = function () {
83812 var state = this._writableState;
83813
83814 if (state.corked) {
83815 state.corked--;
83816
83817 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
83818 }
83819 };
83820
83821 Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
83822 // node::ParseEncoding() requires lower case.
83823 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
83824 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);
83825 this._writableState.defaultEncoding = encoding;
83826 return this;
83827 };
83828
83829 function decodeChunk(state, chunk, encoding) {
83830 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
83831 chunk = bufferShim.from(chunk, encoding);
83832 }
83833 return chunk;
83834 }
83835
83836 // if we're already writing something, then just put this
83837 // in the queue, and wait our turn. Otherwise, call _write
83838 // If we return false, then we need a drain event, so set that flag.
83839 function writeOrBuffer(stream, state, chunk, encoding, cb) {
83840 chunk = decodeChunk(state, chunk, encoding);
83841
83842 if (Buffer.isBuffer(chunk)) encoding = 'buffer';
83843 var len = state.objectMode ? 1 : chunk.length;
83844
83845 state.length += len;
83846
83847 var ret = state.length < state.highWaterMark;
83848 // we must ensure that previous needDrain will not be reset to false.
83849 if (!ret) state.needDrain = true;
83850
83851 if (state.writing || state.corked) {
83852 var last = state.lastBufferedRequest;
83853 state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
83854 if (last) {
83855 last.next = state.lastBufferedRequest;
83856 } else {
83857 state.bufferedRequest = state.lastBufferedRequest;
83858 }
83859 state.bufferedRequestCount += 1;
83860 } else {
83861 doWrite(stream, state, false, len, chunk, encoding, cb);
83862 }
83863
83864 return ret;
83865 }
83866
83867 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
83868 state.writelen = len;
83869 state.writecb = cb;
83870 state.writing = true;
83871 state.sync = true;
83872 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
83873 state.sync = false;
83874 }
83875
83876 function onwriteError(stream, state, sync, er, cb) {
83877 --state.pendingcb;
83878 if (sync) processNextTick(cb, er);else cb(er);
83879
83880 stream._writableState.errorEmitted = true;
83881 stream.emit('error', er);
83882 }
83883
83884 function onwriteStateUpdate(state) {
83885 state.writing = false;
83886 state.writecb = null;
83887 state.length -= state.writelen;
83888 state.writelen = 0;
83889 }
83890
83891 function onwrite(stream, er) {
83892 var state = stream._writableState;
83893 var sync = state.sync;
83894 var cb = state.writecb;
83895
83896 onwriteStateUpdate(state);
83897
83898 if (er) onwriteError(stream, state, sync, er, cb);else {
83899 // Check if we're actually ready to finish, but don't emit yet
83900 var finished = needFinish(state);
83901
83902 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
83903 clearBuffer(stream, state);
83904 }
83905
83906 if (sync) {
83907 /*<replacement>*/
83908 asyncWrite(afterWrite, stream, state, finished, cb);
83909 /*</replacement>*/
83910 } else {
83911 afterWrite(stream, state, finished, cb);
83912 }
83913 }
83914 }
83915
83916 function afterWrite(stream, state, finished, cb) {
83917 if (!finished) onwriteDrain(stream, state);
83918 state.pendingcb--;
83919 cb();
83920 finishMaybe(stream, state);
83921 }
83922
83923 // Must force callback to be called on nextTick, so that we don't
83924 // emit 'drain' before the write() consumer gets the 'false' return
83925 // value, and has a chance to attach a 'drain' listener.
83926 function onwriteDrain(stream, state) {
83927 if (state.length === 0 && state.needDrain) {
83928 state.needDrain = false;
83929 stream.emit('drain');
83930 }
83931 }
83932
83933 // if there's something in the buffer waiting, then process it
83934 function clearBuffer(stream, state) {
83935 state.bufferProcessing = true;
83936 var entry = state.bufferedRequest;
83937
83938 if (stream._writev && entry && entry.next) {
83939 // Fast case, write everything using _writev()
83940 var l = state.bufferedRequestCount;
83941 var buffer = new Array(l);
83942 var holder = state.corkedRequestsFree;
83943 holder.entry = entry;
83944
83945 var count = 0;
83946 while (entry) {
83947 buffer[count] = entry;
83948 entry = entry.next;
83949 count += 1;
83950 }
83951
83952 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
83953
83954 // doWrite is almost always async, defer these to save a bit of time
83955 // as the hot path ends with doWrite
83956 state.pendingcb++;
83957 state.lastBufferedRequest = null;
83958 if (holder.next) {
83959 state.corkedRequestsFree = holder.next;
83960 holder.next = null;
83961 } else {
83962 state.corkedRequestsFree = new CorkedRequest(state);
83963 }
83964 } else {
83965 // Slow case, write chunks one-by-one
83966 while (entry) {
83967 var chunk = entry.chunk;
83968 var encoding = entry.encoding;
83969 var cb = entry.callback;
83970 var len = state.objectMode ? 1 : chunk.length;
83971
83972 doWrite(stream, state, false, len, chunk, encoding, cb);
83973 entry = entry.next;
83974 // if we didn't call the onwrite immediately, then
83975 // it means that we need to wait until it does.
83976 // also, that means that the chunk and cb are currently
83977 // being processed, so move the buffer counter past them.
83978 if (state.writing) {
83979 break;
83980 }
83981 }
83982
83983 if (entry === null) state.lastBufferedRequest = null;
83984 }
83985
83986 state.bufferedRequestCount = 0;
83987 state.bufferedRequest = entry;
83988 state.bufferProcessing = false;
83989 }
83990
83991 Writable.prototype._write = function (chunk, encoding, cb) {
83992 cb(new Error('_write() is not implemented'));
83993 };
83994
83995 Writable.prototype._writev = null;
83996
83997 Writable.prototype.end = function (chunk, encoding, cb) {
83998 var state = this._writableState;
83999
84000 if (typeof chunk === 'function') {
84001 cb = chunk;
84002 chunk = null;
84003 encoding = null;
84004 } else if (typeof encoding === 'function') {
84005 cb = encoding;
84006 encoding = null;
84007 }
84008
84009 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
84010
84011 // .end() fully uncorks
84012 if (state.corked) {
84013 state.corked = 1;
84014 this.uncork();
84015 }
84016
84017 // ignore unnecessary end() calls.
84018 if (!state.ending && !state.finished) endWritable(this, state, cb);
84019 };
84020
84021 function needFinish(state) {
84022 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
84023 }
84024
84025 function prefinish(stream, state) {
84026 if (!state.prefinished) {
84027 state.prefinished = true;
84028 stream.emit('prefinish');
84029 }
84030 }
84031
84032 function finishMaybe(stream, state) {
84033 var need = needFinish(state);
84034 if (need) {
84035 if (state.pendingcb === 0) {
84036 prefinish(stream, state);
84037 state.finished = true;
84038 stream.emit('finish');
84039 } else {
84040 prefinish(stream, state);
84041 }
84042 }
84043 return need;
84044 }
84045
84046 function endWritable(stream, state, cb) {
84047 state.ending = true;
84048 finishMaybe(stream, state);
84049 if (cb) {
84050 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
84051 }
84052 state.ended = true;
84053 stream.writable = false;
84054 }
84055
84056 // It seems a linked list but it is not
84057 // there will be only 2 of these for each stream
84058 function CorkedRequest(state) {
84059 var _this = this;
84060
84061 this.next = null;
84062 this.entry = null;
84063
84064 this.finish = function (err) {
84065 var entry = _this.entry;
84066 _this.entry = null;
84067 while (entry) {
84068 var cb = entry.callback;
84069 state.pendingcb--;
84070 cb(err);
84071 entry = entry.next;
84072 }
84073 if (state.corkedRequestsFree) {
84074 state.corkedRequestsFree.next = _this;
84075 } else {
84076 state.corkedRequestsFree = _this;
84077 }
84078 };
84079 }
84080 }).call(this,require('_process'))
84081 },{"./_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){
84082 'use strict';
84083
84084 var Buffer = require('buffer').Buffer;
84085 /*<replacement>*/
84086 var bufferShim = require('buffer-shims');
84087 /*</replacement>*/
84088
84089 module.exports = BufferList;
84090
84091 function BufferList() {
84092 this.head = null;
84093 this.tail = null;
84094 this.length = 0;
84095 }
84096
84097 BufferList.prototype.push = function (v) {
84098 var entry = { data: v, next: null };
84099 if (this.length > 0) this.tail.next = entry;else this.head = entry;
84100 this.tail = entry;
84101 ++this.length;
84102 };
84103
84104 BufferList.prototype.unshift = function (v) {
84105 var entry = { data: v, next: this.head };
84106 if (this.length === 0) this.tail = entry;
84107 this.head = entry;
84108 ++this.length;
84109 };
84110
84111 BufferList.prototype.shift = function () {
84112 if (this.length === 0) return;
84113 var ret = this.head.data;
84114 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
84115 --this.length;
84116 return ret;
84117 };
84118
84119 BufferList.prototype.clear = function () {
84120 this.head = this.tail = null;
84121 this.length = 0;
84122 };
84123
84124 BufferList.prototype.join = function (s) {
84125 if (this.length === 0) return '';
84126 var p = this.head;
84127 var ret = '' + p.data;
84128 while (p = p.next) {
84129 ret += s + p.data;
84130 }return ret;
84131 };
84132
84133 BufferList.prototype.concat = function (n) {
84134 if (this.length === 0) return bufferShim.alloc(0);
84135 if (this.length === 1) return this.head.data;
84136 var ret = bufferShim.allocUnsafe(n >>> 0);
84137 var p = this.head;
84138 var i = 0;
84139 while (p) {
84140 p.data.copy(ret, i);
84141 i += p.data.length;
84142 p = p.next;
84143 }
84144 return ret;
84145 };
84146 },{"buffer":5,"buffer-shims":4}],21:[function(require,module,exports){
84147 module.exports = require("./lib/_stream_passthrough.js")
84148
84149 },{"./lib/_stream_passthrough.js":16}],22:[function(require,module,exports){
84150 (function (process){
84151 var Stream = (function (){
84152 try {
84153 return require('st' + 'ream'); // hack to fix a circular dependency issue when used with browserify
84154 } catch(_){}
84155 }());
84156 exports = module.exports = require('./lib/_stream_readable.js');
84157 exports.Stream = Stream || exports;
84158 exports.Readable = exports;
84159 exports.Writable = require('./lib/_stream_writable.js');
84160 exports.Duplex = require('./lib/_stream_duplex.js');
84161 exports.Transform = require('./lib/_stream_transform.js');
84162 exports.PassThrough = require('./lib/_stream_passthrough.js');
84163
84164 if (!process.browser && process.env.READABLE_STREAM === 'disable' && Stream) {
84165 module.exports = Stream;
84166 }
84167
84168 }).call(this,require('_process'))
84169 },{"./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){
84170 module.exports = require("./lib/_stream_transform.js")
84171
84172 },{"./lib/_stream_transform.js":18}],24:[function(require,module,exports){
84173 module.exports = require("./lib/_stream_writable.js")
84174
84175 },{"./lib/_stream_writable.js":19}],25:[function(require,module,exports){
84176 // Copyright Joyent, Inc. and other Node contributors.
84177 //
84178 // Permission is hereby granted, free of charge, to any person obtaining a
84179 // copy of this software and associated documentation files (the
84180 // "Software"), to deal in the Software without restriction, including
84181 // without limitation the rights to use, copy, modify, merge, publish,
84182 // distribute, sublicense, and/or sell copies of the Software, and to permit
84183 // persons to whom the Software is furnished to do so, subject to the
84184 // following conditions:
84185 //
84186 // The above copyright notice and this permission notice shall be included
84187 // in all copies or substantial portions of the Software.
84188 //
84189 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
84190 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
84191 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
84192 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
84193 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
84194 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
84195 // USE OR OTHER DEALINGS IN THE SOFTWARE.
84196
84197 module.exports = Stream;
84198
84199 var EE = require('events').EventEmitter;
84200 var inherits = require('inherits');
84201
84202 inherits(Stream, EE);
84203 Stream.Readable = require('readable-stream/readable.js');
84204 Stream.Writable = require('readable-stream/writable.js');
84205 Stream.Duplex = require('readable-stream/duplex.js');
84206 Stream.Transform = require('readable-stream/transform.js');
84207 Stream.PassThrough = require('readable-stream/passthrough.js');
84208
84209 // Backwards-compat with node 0.4.x
84210 Stream.Stream = Stream;
84211
84212
84213
84214 // old-style streams. Note that the pipe method (the only relevant
84215 // part of this class) is overridden in the Readable class.
84216
84217 function Stream() {
84218 EE.call(this);
84219 }
84220
84221 Stream.prototype.pipe = function(dest, options) {
84222 var source = this;
84223
84224 function ondata(chunk) {
84225 if (dest.writable) {
84226 if (false === dest.write(chunk) && source.pause) {
84227 source.pause();
84228 }
84229 }
84230 }
84231
84232 source.on('data', ondata);
84233
84234 function ondrain() {
84235 if (source.readable && source.resume) {
84236 source.resume();
84237 }
84238 }
84239
84240 dest.on('drain', ondrain);
84241
84242 // If the 'end' option is not supplied, dest.end() will be called when
84243 // source gets the 'end' or 'close' events. Only dest.end() once.
84244 if (!dest._isStdio && (!options || options.end !== false)) {
84245 source.on('end', onend);
84246 source.on('close', onclose);
84247 }
84248
84249 var didOnEnd = false;
84250 function onend() {
84251 if (didOnEnd) return;
84252 didOnEnd = true;
84253
84254 dest.end();
84255 }
84256
84257
84258 function onclose() {
84259 if (didOnEnd) return;
84260 didOnEnd = true;
84261
84262 if (typeof dest.destroy === 'function') dest.destroy();
84263 }
84264
84265 // don't leave dangling pipes when there are errors.
84266 function onerror(er) {
84267 cleanup();
84268 if (EE.listenerCount(this, 'error') === 0) {
84269 throw er; // Unhandled stream error in pipe.
84270 }
84271 }
84272
84273 source.on('error', onerror);
84274 dest.on('error', onerror);
84275
84276 // remove all the event listeners that were added.
84277 function cleanup() {
84278 source.removeListener('data', ondata);
84279 dest.removeListener('drain', ondrain);
84280
84281 source.removeListener('end', onend);
84282 source.removeListener('close', onclose);
84283
84284 source.removeListener('error', onerror);
84285 dest.removeListener('error', onerror);
84286
84287 source.removeListener('end', cleanup);
84288 source.removeListener('close', cleanup);
84289
84290 dest.removeListener('close', cleanup);
84291 }
84292
84293 source.on('end', cleanup);
84294 source.on('close', cleanup);
84295
84296 dest.on('close', cleanup);
84297
84298 dest.emit('pipe', source);
84299
84300 // Allow for unix-like usage: A.pipe(B).pipe(C)
84301 return dest;
84302 };
84303
84304 },{"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){
84305 // Copyright Joyent, Inc. and other Node contributors.
84306 //
84307 // Permission is hereby granted, free of charge, to any person obtaining a
84308 // copy of this software and associated documentation files (the
84309 // "Software"), to deal in the Software without restriction, including
84310 // without limitation the rights to use, copy, modify, merge, publish,
84311 // distribute, sublicense, and/or sell copies of the Software, and to permit
84312 // persons to whom the Software is furnished to do so, subject to the
84313 // following conditions:
84314 //
84315 // The above copyright notice and this permission notice shall be included
84316 // in all copies or substantial portions of the Software.
84317 //
84318 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
84319 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
84320 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
84321 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
84322 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
84323 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
84324 // USE OR OTHER DEALINGS IN THE SOFTWARE.
84325
84326 var Buffer = require('buffer').Buffer;
84327
84328 var isBufferEncoding = Buffer.isEncoding
84329 || function(encoding) {
84330 switch (encoding && encoding.toLowerCase()) {
84331 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;
84332 default: return false;
84333 }
84334 }
84335
84336
84337 function assertEncoding(encoding) {
84338 if (encoding && !isBufferEncoding(encoding)) {
84339 throw new Error('Unknown encoding: ' + encoding);
84340 }
84341 }
84342
84343 // StringDecoder provides an interface for efficiently splitting a series of
84344 // buffers into a series of JS strings without breaking apart multi-byte
84345 // characters. CESU-8 is handled as part of the UTF-8 encoding.
84346 //
84347 // @TODO Handling all encodings inside a single object makes it very difficult
84348 // to reason about this code, so it should be split up in the future.
84349 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
84350 // points as used by CESU-8.
84351 var StringDecoder = exports.StringDecoder = function(encoding) {
84352 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
84353 assertEncoding(encoding);
84354 switch (this.encoding) {
84355 case 'utf8':
84356 // CESU-8 represents each of Surrogate Pair by 3-bytes
84357 this.surrogateSize = 3;
84358 break;
84359 case 'ucs2':
84360 case 'utf16le':
84361 // UTF-16 represents each of Surrogate Pair by 2-bytes
84362 this.surrogateSize = 2;
84363 this.detectIncompleteChar = utf16DetectIncompleteChar;
84364 break;
84365 case 'base64':
84366 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
84367 this.surrogateSize = 3;
84368 this.detectIncompleteChar = base64DetectIncompleteChar;
84369 break;
84370 default:
84371 this.write = passThroughWrite;
84372 return;
84373 }
84374
84375 // Enough space to store all bytes of a single character. UTF-8 needs 4
84376 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
84377 this.charBuffer = new Buffer(6);
84378 // Number of bytes received for the current incomplete multi-byte character.
84379 this.charReceived = 0;
84380 // Number of bytes expected for the current incomplete multi-byte character.
84381 this.charLength = 0;
84382 };
84383
84384
84385 // write decodes the given buffer and returns it as JS string that is
84386 // guaranteed to not contain any partial multi-byte characters. Any partial
84387 // character found at the end of the buffer is buffered up, and will be
84388 // returned when calling write again with the remaining bytes.
84389 //
84390 // Note: Converting a Buffer containing an orphan surrogate to a String
84391 // currently works, but converting a String to a Buffer (via `new Buffer`, or
84392 // Buffer#write) will replace incomplete surrogates with the unicode
84393 // replacement character. See https://codereview.chromium.org/121173009/ .
84394 StringDecoder.prototype.write = function(buffer) {
84395 var charStr = '';
84396 // if our last write ended with an incomplete multibyte character
84397 while (this.charLength) {
84398 // determine how many remaining bytes this buffer has to offer for this char
84399 var available = (buffer.length >= this.charLength - this.charReceived) ?
84400 this.charLength - this.charReceived :
84401 buffer.length;
84402
84403 // add the new bytes to the char buffer
84404 buffer.copy(this.charBuffer, this.charReceived, 0, available);
84405 this.charReceived += available;
84406
84407 if (this.charReceived < this.charLength) {
84408 // still not enough chars in this buffer? wait for more ...
84409 return '';
84410 }
84411
84412 // remove bytes belonging to the current character from the buffer
84413 buffer = buffer.slice(available, buffer.length);
84414
84415 // get the character that was split
84416 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
84417
84418 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
84419 var charCode = charStr.charCodeAt(charStr.length - 1);
84420 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
84421 this.charLength += this.surrogateSize;
84422 charStr = '';
84423 continue;
84424 }
84425 this.charReceived = this.charLength = 0;
84426
84427 // if there are no more bytes in this buffer, just emit our char
84428 if (buffer.length === 0) {
84429 return charStr;
84430 }
84431 break;
84432 }
84433
84434 // determine and set charLength / charReceived
84435 this.detectIncompleteChar(buffer);
84436
84437 var end = buffer.length;
84438 if (this.charLength) {
84439 // buffer the incomplete character bytes we got
84440 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
84441 end -= this.charReceived;
84442 }
84443
84444 charStr += buffer.toString(this.encoding, 0, end);
84445
84446 var end = charStr.length - 1;
84447 var charCode = charStr.charCodeAt(end);
84448 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
84449 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
84450 var size = this.surrogateSize;
84451 this.charLength += size;
84452 this.charReceived += size;
84453 this.charBuffer.copy(this.charBuffer, size, 0, size);
84454 buffer.copy(this.charBuffer, 0, 0, size);
84455 return charStr.substring(0, end);
84456 }
84457
84458 // or just emit the charStr
84459 return charStr;
84460 };
84461
84462 // detectIncompleteChar determines if there is an incomplete UTF-8 character at
84463 // the end of the given buffer. If so, it sets this.charLength to the byte
84464 // length that character, and sets this.charReceived to the number of bytes
84465 // that are available for this character.
84466 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
84467 // determine how many bytes we have to check at the end of this buffer
84468 var i = (buffer.length >= 3) ? 3 : buffer.length;
84469
84470 // Figure out if one of the last i bytes of our buffer announces an
84471 // incomplete char.
84472 for (; i > 0; i--) {
84473 var c = buffer[buffer.length - i];
84474
84475 // See http://en.wikipedia.org/wiki/UTF-8#Description
84476
84477 // 110XXXXX
84478 if (i == 1 && c >> 5 == 0x06) {
84479 this.charLength = 2;
84480 break;
84481 }
84482
84483 // 1110XXXX
84484 if (i <= 2 && c >> 4 == 0x0E) {
84485 this.charLength = 3;
84486 break;
84487 }
84488
84489 // 11110XXX
84490 if (i <= 3 && c >> 3 == 0x1E) {
84491 this.charLength = 4;
84492 break;
84493 }
84494 }
84495 this.charReceived = i;
84496 };
84497
84498 StringDecoder.prototype.end = function(buffer) {
84499 var res = '';
84500 if (buffer && buffer.length)
84501 res = this.write(buffer);
84502
84503 if (this.charReceived) {
84504 var cr = this.charReceived;
84505 var buf = this.charBuffer;
84506 var enc = this.encoding;
84507 res += buf.slice(0, cr).toString(enc);
84508 }
84509
84510 return res;
84511 };
84512
84513 function passThroughWrite(buffer) {
84514 return buffer.toString(this.encoding);
84515 }
84516
84517 function utf16DetectIncompleteChar(buffer) {
84518 this.charReceived = buffer.length % 2;
84519 this.charLength = this.charReceived ? 2 : 0;
84520 }
84521
84522 function base64DetectIncompleteChar(buffer) {
84523 this.charReceived = buffer.length % 3;
84524 this.charLength = this.charReceived ? 3 : 0;
84525 }
84526
84527 },{"buffer":5}],27:[function(require,module,exports){
84528 (function (global){
84529
84530 /**
84531 * Module exports.
84532 */
84533
84534 module.exports = deprecate;
84535
84536 /**
84537 * Mark that a method should not be used.
84538 * Returns a modified function which warns once by default.
84539 *
84540 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
84541 *
84542 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
84543 * will throw an Error when invoked.
84544 *
84545 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
84546 * will invoke `console.trace()` instead of `console.error()`.
84547 *
84548 * @param {Function} fn - the function to deprecate
84549 * @param {String} msg - the string to print to the console when `fn` is invoked
84550 * @returns {Function} a new "deprecated" version of `fn`
84551 * @api public
84552 */
84553
84554 function deprecate (fn, msg) {
84555 if (config('noDeprecation')) {
84556 return fn;
84557 }
84558
84559 var warned = false;
84560 function deprecated() {
84561 if (!warned) {
84562 if (config('throwDeprecation')) {
84563 throw new Error(msg);
84564 } else if (config('traceDeprecation')) {
84565 console.trace(msg);
84566 } else {
84567 console.warn(msg);
84568 }
84569 warned = true;
84570 }
84571 return fn.apply(this, arguments);
84572 }
84573
84574 return deprecated;
84575 }
84576
84577 /**
84578 * Checks `localStorage` for boolean values for the given `name`.
84579 *
84580 * @param {String} name
84581 * @returns {Boolean}
84582 * @api private
84583 */
84584
84585 function config (name) {
84586 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
84587 try {
84588 if (!global.localStorage) return false;
84589 } catch (_) {
84590 return false;
84591 }
84592 var val = global.localStorage[name];
84593 if (null == val) return false;
84594 return String(val).toLowerCase() === 'true';
84595 }
84596
84597 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
84598 },{}],28:[function(require,module,exports){
84599 arguments[4][9][0].apply(exports,arguments)
84600 },{"dup":9}],29:[function(require,module,exports){
84601 module.exports = function isBuffer(arg) {
84602 return arg && typeof arg === 'object'
84603 && typeof arg.copy === 'function'
84604 && typeof arg.fill === 'function'
84605 && typeof arg.readUInt8 === 'function';
84606 }
84607 },{}],30:[function(require,module,exports){
84608 (function (process,global){
84609 // Copyright Joyent, Inc. and other Node contributors.
84610 //
84611 // Permission is hereby granted, free of charge, to any person obtaining a
84612 // copy of this software and associated documentation files (the
84613 // "Software"), to deal in the Software without restriction, including
84614 // without limitation the rights to use, copy, modify, merge, publish,
84615 // distribute, sublicense, and/or sell copies of the Software, and to permit
84616 // persons to whom the Software is furnished to do so, subject to the
84617 // following conditions:
84618 //
84619 // The above copyright notice and this permission notice shall be included
84620 // in all copies or substantial portions of the Software.
84621 //
84622 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
84623 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
84624 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
84625 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
84626 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
84627 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
84628 // USE OR OTHER DEALINGS IN THE SOFTWARE.
84629
84630 var formatRegExp = /%[sdj%]/g;
84631 exports.format = function(f) {
84632 if (!isString(f)) {
84633 var objects = [];
84634 for (var i = 0; i < arguments.length; i++) {
84635 objects.push(inspect(arguments[i]));
84636 }
84637 return objects.join(' ');
84638 }
84639
84640 var i = 1;
84641 var args = arguments;
84642 var len = args.length;
84643 var str = String(f).replace(formatRegExp, function(x) {
84644 if (x === '%%') return '%';
84645 if (i >= len) return x;
84646 switch (x) {
84647 case '%s': return String(args[i++]);
84648 case '%d': return Number(args[i++]);
84649 case '%j':
84650 try {
84651 return JSON.stringify(args[i++]);
84652 } catch (_) {
84653 return '[Circular]';
84654 }
84655 default:
84656 return x;
84657 }
84658 });
84659 for (var x = args[i]; i < len; x = args[++i]) {
84660 if (isNull(x) || !isObject(x)) {
84661 str += ' ' + x;
84662 } else {
84663 str += ' ' + inspect(x);
84664 }
84665 }
84666 return str;
84667 };
84668
84669
84670 // Mark that a method should not be used.
84671 // Returns a modified function which warns once by default.
84672 // If --no-deprecation is set, then it is a no-op.
84673 exports.deprecate = function(fn, msg) {
84674 // Allow for deprecating things in the process of starting up.
84675 if (isUndefined(global.process)) {
84676 return function() {
84677 return exports.deprecate(fn, msg).apply(this, arguments);
84678 };
84679 }
84680
84681 if (process.noDeprecation === true) {
84682 return fn;
84683 }
84684
84685 var warned = false;
84686 function deprecated() {
84687 if (!warned) {
84688 if (process.throwDeprecation) {
84689 throw new Error(msg);
84690 } else if (process.traceDeprecation) {
84691 console.trace(msg);
84692 } else {
84693 console.error(msg);
84694 }
84695 warned = true;
84696 }
84697 return fn.apply(this, arguments);
84698 }
84699
84700 return deprecated;
84701 };
84702
84703
84704 var debugs = {};
84705 var debugEnviron;
84706 exports.debuglog = function(set) {
84707 if (isUndefined(debugEnviron))
84708 debugEnviron = process.env.NODE_DEBUG || '';
84709 set = set.toUpperCase();
84710 if (!debugs[set]) {
84711 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
84712 var pid = process.pid;
84713 debugs[set] = function() {
84714 var msg = exports.format.apply(exports, arguments);
84715 console.error('%s %d: %s', set, pid, msg);
84716 };
84717 } else {
84718 debugs[set] = function() {};
84719 }
84720 }
84721 return debugs[set];
84722 };
84723
84724
84725 /**
84726 * Echos the value of a value. Trys to print the value out
84727 * in the best way possible given the different types.
84728 *
84729 * @param {Object} obj The object to print out.
84730 * @param {Object} opts Optional options object that alters the output.
84731 */
84732 /* legacy: obj, showHidden, depth, colors*/
84733 function inspect(obj, opts) {
84734 // default options
84735 var ctx = {
84736 seen: [],
84737 stylize: stylizeNoColor
84738 };
84739 // legacy...
84740 if (arguments.length >= 3) ctx.depth = arguments[2];
84741 if (arguments.length >= 4) ctx.colors = arguments[3];
84742 if (isBoolean(opts)) {
84743 // legacy...
84744 ctx.showHidden = opts;
84745 } else if (opts) {
84746 // got an "options" object
84747 exports._extend(ctx, opts);
84748 }
84749 // set default options
84750 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
84751 if (isUndefined(ctx.depth)) ctx.depth = 2;
84752 if (isUndefined(ctx.colors)) ctx.colors = false;
84753 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
84754 if (ctx.colors) ctx.stylize = stylizeWithColor;
84755 return formatValue(ctx, obj, ctx.depth);
84756 }
84757 exports.inspect = inspect;
84758
84759
84760 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
84761 inspect.colors = {
84762 'bold' : [1, 22],
84763 'italic' : [3, 23],
84764 'underline' : [4, 24],
84765 'inverse' : [7, 27],
84766 'white' : [37, 39],
84767 'grey' : [90, 39],
84768 'black' : [30, 39],
84769 'blue' : [34, 39],
84770 'cyan' : [36, 39],
84771 'green' : [32, 39],
84772 'magenta' : [35, 39],
84773 'red' : [31, 39],
84774 'yellow' : [33, 39]
84775 };
84776
84777 // Don't use 'blue' not visible on cmd.exe
84778 inspect.styles = {
84779 'special': 'cyan',
84780 'number': 'yellow',
84781 'boolean': 'yellow',
84782 'undefined': 'grey',
84783 'null': 'bold',
84784 'string': 'green',
84785 'date': 'magenta',
84786 // "name": intentionally not styling
84787 'regexp': 'red'
84788 };
84789
84790
84791 function stylizeWithColor(str, styleType) {
84792 var style = inspect.styles[styleType];
84793
84794 if (style) {
84795 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
84796 '\u001b[' + inspect.colors[style][1] + 'm';
84797 } else {
84798 return str;
84799 }
84800 }
84801
84802
84803 function stylizeNoColor(str, styleType) {
84804 return str;
84805 }
84806
84807
84808 function arrayToHash(array) {
84809 var hash = {};
84810
84811 array.forEach(function(val, idx) {
84812 hash[val] = true;
84813 });
84814
84815 return hash;
84816 }
84817
84818
84819 function formatValue(ctx, value, recurseTimes) {
84820 // Provide a hook for user-specified inspect functions.
84821 // Check that value is an object with an inspect function on it
84822 if (ctx.customInspect &&
84823 value &&
84824 isFunction(value.inspect) &&
84825 // Filter out the util module, it's inspect function is special
84826 value.inspect !== exports.inspect &&
84827 // Also filter out any prototype objects using the circular check.
84828 !(value.constructor && value.constructor.prototype === value)) {
84829 var ret = value.inspect(recurseTimes, ctx);
84830 if (!isString(ret)) {
84831 ret = formatValue(ctx, ret, recurseTimes);
84832 }
84833 return ret;
84834 }
84835
84836 // Primitive types cannot have properties
84837 var primitive = formatPrimitive(ctx, value);
84838 if (primitive) {
84839 return primitive;
84840 }
84841
84842 // Look up the keys of the object.
84843 var keys = Object.keys(value);
84844 var visibleKeys = arrayToHash(keys);
84845
84846 if (ctx.showHidden) {
84847 keys = Object.getOwnPropertyNames(value);
84848 }
84849
84850 // IE doesn't make error fields non-enumerable
84851 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
84852 if (isError(value)
84853 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
84854 return formatError(value);
84855 }
84856
84857 // Some type of object without properties can be shortcutted.
84858 if (keys.length === 0) {
84859 if (isFunction(value)) {
84860 var name = value.name ? ': ' + value.name : '';
84861 return ctx.stylize('[Function' + name + ']', 'special');
84862 }
84863 if (isRegExp(value)) {
84864 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
84865 }
84866 if (isDate(value)) {
84867 return ctx.stylize(Date.prototype.toString.call(value), 'date');
84868 }
84869 if (isError(value)) {
84870 return formatError(value);
84871 }
84872 }
84873
84874 var base = '', array = false, braces = ['{', '}'];
84875
84876 // Make Array say that they are Array
84877 if (isArray(value)) {
84878 array = true;
84879 braces = ['[', ']'];
84880 }
84881
84882 // Make functions say that they are functions
84883 if (isFunction(value)) {
84884 var n = value.name ? ': ' + value.name : '';
84885 base = ' [Function' + n + ']';
84886 }
84887
84888 // Make RegExps say that they are RegExps
84889 if (isRegExp(value)) {
84890 base = ' ' + RegExp.prototype.toString.call(value);
84891 }
84892
84893 // Make dates with properties first say the date
84894 if (isDate(value)) {
84895 base = ' ' + Date.prototype.toUTCString.call(value);
84896 }
84897
84898 // Make error with message first say the error
84899 if (isError(value)) {
84900 base = ' ' + formatError(value);
84901 }
84902
84903 if (keys.length === 0 && (!array || value.length == 0)) {
84904 return braces[0] + base + braces[1];
84905 }
84906
84907 if (recurseTimes < 0) {
84908 if (isRegExp(value)) {
84909 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
84910 } else {
84911 return ctx.stylize('[Object]', 'special');
84912 }
84913 }
84914
84915 ctx.seen.push(value);
84916
84917 var output;
84918 if (array) {
84919 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
84920 } else {
84921 output = keys.map(function(key) {
84922 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
84923 });
84924 }
84925
84926 ctx.seen.pop();
84927
84928 return reduceToSingleString(output, base, braces);
84929 }
84930
84931
84932 function formatPrimitive(ctx, value) {
84933 if (isUndefined(value))
84934 return ctx.stylize('undefined', 'undefined');
84935 if (isString(value)) {
84936 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
84937 .replace(/'/g, "\\'")
84938 .replace(/\\"/g, '"') + '\'';
84939 return ctx.stylize(simple, 'string');
84940 }
84941 if (isNumber(value))
84942 return ctx.stylize('' + value, 'number');
84943 if (isBoolean(value))
84944 return ctx.stylize('' + value, 'boolean');
84945 // For some reason typeof null is "object", so special case here.
84946 if (isNull(value))
84947 return ctx.stylize('null', 'null');
84948 }
84949
84950
84951 function formatError(value) {
84952 return '[' + Error.prototype.toString.call(value) + ']';
84953 }
84954
84955
84956 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
84957 var output = [];
84958 for (var i = 0, l = value.length; i < l; ++i) {
84959 if (hasOwnProperty(value, String(i))) {
84960 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
84961 String(i), true));
84962 } else {
84963 output.push('');
84964 }
84965 }
84966 keys.forEach(function(key) {
84967 if (!key.match(/^\d+$/)) {
84968 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
84969 key, true));
84970 }
84971 });
84972 return output;
84973 }
84974
84975
84976 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
84977 var name, str, desc;
84978 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
84979 if (desc.get) {
84980 if (desc.set) {
84981 str = ctx.stylize('[Getter/Setter]', 'special');
84982 } else {
84983 str = ctx.stylize('[Getter]', 'special');
84984 }
84985 } else {
84986 if (desc.set) {
84987 str = ctx.stylize('[Setter]', 'special');
84988 }
84989 }
84990 if (!hasOwnProperty(visibleKeys, key)) {
84991 name = '[' + key + ']';
84992 }
84993 if (!str) {
84994 if (ctx.seen.indexOf(desc.value) < 0) {
84995 if (isNull(recurseTimes)) {
84996 str = formatValue(ctx, desc.value, null);
84997 } else {
84998 str = formatValue(ctx, desc.value, recurseTimes - 1);
84999 }
85000 if (str.indexOf('\n') > -1) {
85001 if (array) {
85002 str = str.split('\n').map(function(line) {
85003 return ' ' + line;
85004 }).join('\n').substr(2);
85005 } else {
85006 str = '\n' + str.split('\n').map(function(line) {
85007 return ' ' + line;
85008 }).join('\n');
85009 }
85010 }
85011 } else {
85012 str = ctx.stylize('[Circular]', 'special');
85013 }
85014 }
85015 if (isUndefined(name)) {
85016 if (array && key.match(/^\d+$/)) {
85017 return str;
85018 }
85019 name = JSON.stringify('' + key);
85020 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
85021 name = name.substr(1, name.length - 2);
85022 name = ctx.stylize(name, 'name');
85023 } else {
85024 name = name.replace(/'/g, "\\'")
85025 .replace(/\\"/g, '"')
85026 .replace(/(^"|"$)/g, "'");
85027 name = ctx.stylize(name, 'string');
85028 }
85029 }
85030
85031 return name + ': ' + str;
85032 }
85033
85034
85035 function reduceToSingleString(output, base, braces) {
85036 var numLinesEst = 0;
85037 var length = output.reduce(function(prev, cur) {
85038 numLinesEst++;
85039 if (cur.indexOf('\n') >= 0) numLinesEst++;
85040 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
85041 }, 0);
85042
85043 if (length > 60) {
85044 return braces[0] +
85045 (base === '' ? '' : base + '\n ') +
85046 ' ' +
85047 output.join(',\n ') +
85048 ' ' +
85049 braces[1];
85050 }
85051
85052 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
85053 }
85054
85055
85056 // NOTE: These type checking functions intentionally don't use `instanceof`
85057 // because it is fragile and can be easily faked with `Object.create()`.
85058 function isArray(ar) {
85059 return Array.isArray(ar);
85060 }
85061 exports.isArray = isArray;
85062
85063 function isBoolean(arg) {
85064 return typeof arg === 'boolean';
85065 }
85066 exports.isBoolean = isBoolean;
85067
85068 function isNull(arg) {
85069 return arg === null;
85070 }
85071 exports.isNull = isNull;
85072
85073 function isNullOrUndefined(arg) {
85074 return arg == null;
85075 }
85076 exports.isNullOrUndefined = isNullOrUndefined;
85077
85078 function isNumber(arg) {
85079 return typeof arg === 'number';
85080 }
85081 exports.isNumber = isNumber;
85082
85083 function isString(arg) {
85084 return typeof arg === 'string';
85085 }
85086 exports.isString = isString;
85087
85088 function isSymbol(arg) {
85089 return typeof arg === 'symbol';
85090 }
85091 exports.isSymbol = isSymbol;
85092
85093 function isUndefined(arg) {
85094 return arg === void 0;
85095 }
85096 exports.isUndefined = isUndefined;
85097
85098 function isRegExp(re) {
85099 return isObject(re) && objectToString(re) === '[object RegExp]';
85100 }
85101 exports.isRegExp = isRegExp;
85102
85103 function isObject(arg) {
85104 return typeof arg === 'object' && arg !== null;
85105 }
85106 exports.isObject = isObject;
85107
85108 function isDate(d) {
85109 return isObject(d) && objectToString(d) === '[object Date]';
85110 }
85111 exports.isDate = isDate;
85112
85113 function isError(e) {
85114 return isObject(e) &&
85115 (objectToString(e) === '[object Error]' || e instanceof Error);
85116 }
85117 exports.isError = isError;
85118
85119 function isFunction(arg) {
85120 return typeof arg === 'function';
85121 }
85122 exports.isFunction = isFunction;
85123
85124 function isPrimitive(arg) {
85125 return arg === null ||
85126 typeof arg === 'boolean' ||
85127 typeof arg === 'number' ||
85128 typeof arg === 'string' ||
85129 typeof arg === 'symbol' || // ES6 symbol
85130 typeof arg === 'undefined';
85131 }
85132 exports.isPrimitive = isPrimitive;
85133
85134 exports.isBuffer = require('./support/isBuffer');
85135
85136 function objectToString(o) {
85137 return Object.prototype.toString.call(o);
85138 }
85139
85140
85141 function pad(n) {
85142 return n < 10 ? '0' + n.toString(10) : n.toString(10);
85143 }
85144
85145
85146 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
85147 'Oct', 'Nov', 'Dec'];
85148
85149 // 26 Feb 16:19:34
85150 function timestamp() {
85151 var d = new Date();
85152 var time = [pad(d.getHours()),
85153 pad(d.getMinutes()),
85154 pad(d.getSeconds())].join(':');
85155 return [d.getDate(), months[d.getMonth()], time].join(' ');
85156 }
85157
85158
85159 // log is just a thin wrapper to console.log that prepends a timestamp
85160 exports.log = function() {
85161 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
85162 };
85163
85164
85165 /**
85166 * Inherit the prototype methods from one constructor into another.
85167 *
85168 * The Function.prototype.inherits from lang.js rewritten as a standalone
85169 * function (not on Function.prototype). NOTE: If this file is to be loaded
85170 * during bootstrapping this function needs to be rewritten using some native
85171 * functions as prototype setup using normal JavaScript does not work as
85172 * expected during bootstrapping (see mirror.js in r114903).
85173 *
85174 * @param {function} ctor Constructor function which needs to inherit the
85175 * prototype.
85176 * @param {function} superCtor Constructor function to inherit prototype from.
85177 */
85178 exports.inherits = require('inherits');
85179
85180 exports._extend = function(origin, add) {
85181 // Don't do anything if add isn't an object
85182 if (!add || !isObject(add)) return origin;
85183
85184 var keys = Object.keys(add);
85185 var i = keys.length;
85186 while (i--) {
85187 origin[keys[i]] = add[keys[i]];
85188 }
85189 return origin;
85190 };
85191
85192 function hasOwnProperty(obj, prop) {
85193 return Object.prototype.hasOwnProperty.call(obj, prop);
85194 }
85195
85196 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
85197 },{"./support/isBuffer":29,"_process":13,"inherits":28}],31:[function(require,module,exports){
85198 (function (Buffer){
85199 const createKeccakHash = require('keccak')
85200 const secp256k1 = require('secp256k1')
85201 const assert = require('assert')
85202 const rlp = require('rlp')
85203 const BN = require('bn.js')
85204 const createHash = require('create-hash')
85205 Object.assign(exports, require('ethjs-util'))
85206
85207 /**
85208 * the max integer that this VM can handle (a ```BN```)
85209 * @var {BN} MAX_INTEGER
85210 */
85211 exports.MAX_INTEGER = new BN('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)
85212
85213 /**
85214 * 2^256 (a ```BN```)
85215 * @var {BN} TWO_POW256
85216 */
85217 exports.TWO_POW256 = new BN('10000000000000000000000000000000000000000000000000000000000000000', 16)
85218
85219 /**
85220 * SHA3-256 hash of null (a ```String```)
85221 * @var {String} SHA3_NULL_S
85222 */
85223 exports.SHA3_NULL_S = 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'
85224
85225 /**
85226 * SHA3-256 hash of null (a ```Buffer```)
85227 * @var {Buffer} SHA3_NULL
85228 */
85229 exports.SHA3_NULL = Buffer.from(exports.SHA3_NULL_S, 'hex')
85230
85231 /**
85232 * SHA3-256 of an RLP of an empty array (a ```String```)
85233 * @var {String} SHA3_RLP_ARRAY_S
85234 */
85235 exports.SHA3_RLP_ARRAY_S = '1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347'
85236
85237 /**
85238 * SHA3-256 of an RLP of an empty array (a ```Buffer```)
85239 * @var {Buffer} SHA3_RLP_ARRAY
85240 */
85241 exports.SHA3_RLP_ARRAY = Buffer.from(exports.SHA3_RLP_ARRAY_S, 'hex')
85242
85243 /**
85244 * SHA3-256 hash of the RLP of null (a ```String```)
85245 * @var {String} SHA3_RLP_S
85246 */
85247 exports.SHA3_RLP_S = '56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421'
85248
85249 /**
85250 * SHA3-256 hash of the RLP of null (a ```Buffer```)
85251 * @var {Buffer} SHA3_RLP
85252 */
85253 exports.SHA3_RLP = Buffer.from(exports.SHA3_RLP_S, 'hex')
85254
85255 /**
85256 * [`BN`](https://github.com/indutny/bn.js)
85257 * @var {Function}
85258 */
85259 exports.BN = BN
85260
85261 /**
85262 * [`rlp`](https://github.com/ethereumjs/rlp)
85263 * @var {Function}
85264 */
85265 exports.rlp = rlp
85266
85267 /**
85268 * [`secp256k1`](https://github.com/cryptocoinjs/secp256k1-node/)
85269 * @var {Object}
85270 */
85271 exports.secp256k1 = secp256k1
85272
85273 /**
85274 * Returns a buffer filled with 0s
85275 * @method zeros
85276 * @param {Number} bytes the number of bytes the buffer should be
85277 * @return {Buffer}
85278 */
85279 exports.zeros = function (bytes) {
85280 return Buffer.allocUnsafe(bytes).fill(0)
85281 }
85282
85283 /**
85284 * Left Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
85285 * Or it truncates the beginning if it exceeds.
85286 * @method lsetLength
85287 * @param {Buffer|Array} msg the value to pad
85288 * @param {Number} length the number of bytes the output should be
85289 * @param {Boolean} [right=false] whether to start padding form the left or right
85290 * @return {Buffer|Array}
85291 */
85292 exports.setLengthLeft = exports.setLength = function (msg, length, right) {
85293 var buf = exports.zeros(length)
85294 msg = exports.toBuffer(msg)
85295 if (right) {
85296 if (msg.length < length) {
85297 msg.copy(buf)
85298 return buf
85299 }
85300 return msg.slice(0, length)
85301 } else {
85302 if (msg.length < length) {
85303 msg.copy(buf, length - msg.length)
85304 return buf
85305 }
85306 return msg.slice(-length)
85307 }
85308 }
85309
85310 /**
85311 * Right Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
85312 * Or it truncates the beginning if it exceeds.
85313 * @param {Buffer|Array} msg the value to pad
85314 * @param {Number} length the number of bytes the output should be
85315 * @return {Buffer|Array}
85316 */
85317 exports.setLengthRight = function (msg, length) {
85318 return exports.setLength(msg, length, true)
85319 }
85320
85321 /**
85322 * Trims leading zeros from a `Buffer` or an `Array`
85323 * @param {Buffer|Array|String} a
85324 * @return {Buffer|Array|String}
85325 */
85326 exports.unpad = exports.stripZeros = function (a) {
85327 a = exports.stripHexPrefix(a)
85328 var first = a[0]
85329 while (a.length > 0 && first.toString() === '0') {
85330 a = a.slice(1)
85331 first = a[0]
85332 }
85333 return a
85334 }
85335 /**
85336 * 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.
85337 * @param {*} v the value
85338 */
85339 exports.toBuffer = function (v) {
85340 if (!Buffer.isBuffer(v)) {
85341 if (Array.isArray(v)) {
85342 v = Buffer.from(v)
85343 } else if (typeof v === 'string') {
85344 if (exports.isHexPrefixed(v)) {
85345 v = Buffer.from(exports.padToEven(exports.stripHexPrefix(v)), 'hex')
85346 } else {
85347 v = Buffer.from(v)
85348 }
85349 } else if (typeof v === 'number') {
85350 v = exports.intToBuffer(v)
85351 } else if (v === null || v === undefined) {
85352 v = Buffer.allocUnsafe(0)
85353 } else if (v.toArray) {
85354 // converts a BN to a Buffer
85355 v = Buffer.from(v.toArray())
85356 } else {
85357 throw new Error('invalid type')
85358 }
85359 }
85360 return v
85361 }
85362
85363 /**
85364 * Converts a `Buffer` to a `Number`
85365 * @param {Buffer} buf
85366 * @return {Number}
85367 * @throws If the input number exceeds 53 bits.
85368 */
85369 exports.bufferToInt = function (buf) {
85370 return new BN(exports.toBuffer(buf)).toNumber()
85371 }
85372
85373 /**
85374 * Converts a `Buffer` into a hex `String`
85375 * @param {Buffer} buf
85376 * @return {String}
85377 */
85378 exports.bufferToHex = function (buf) {
85379 buf = exports.toBuffer(buf)
85380 return '0x' + buf.toString('hex')
85381 }
85382
85383 /**
85384 * Interprets a `Buffer` as a signed integer and returns a `BN`. Assumes 256-bit numbers.
85385 * @param {Buffer} num
85386 * @return {BN}
85387 */
85388 exports.fromSigned = function (num) {
85389 return new BN(num).fromTwos(256)
85390 }
85391
85392 /**
85393 * Converts a `BN` to an unsigned integer and returns it as a `Buffer`. Assumes 256-bit numbers.
85394 * @param {BN} num
85395 * @return {Buffer}
85396 */
85397 exports.toUnsigned = function (num) {
85398 return Buffer.from(num.toTwos(256).toArray())
85399 }
85400
85401 /**
85402 * Creates SHA-3 hash of the input
85403 * @param {Buffer|Array|String|Number} a the input data
85404 * @param {Number} [bits=256] the SHA width
85405 * @return {Buffer}
85406 */
85407 exports.sha3 = function (a, bits) {
85408 a = exports.toBuffer(a)
85409 if (!bits) bits = 256
85410
85411 return createKeccakHash('keccak' + bits).update(a).digest()
85412 }
85413
85414 /**
85415 * Creates SHA256 hash of the input
85416 * @param {Buffer|Array|String|Number} a the input data
85417 * @return {Buffer}
85418 */
85419 exports.sha256 = function (a) {
85420 a = exports.toBuffer(a)
85421 return createHash('sha256').update(a).digest()
85422 }
85423
85424 /**
85425 * Creates RIPEMD160 hash of the input
85426 * @param {Buffer|Array|String|Number} a the input data
85427 * @param {Boolean} padded whether it should be padded to 256 bits or not
85428 * @return {Buffer}
85429 */
85430 exports.ripemd160 = function (a, padded) {
85431 a = exports.toBuffer(a)
85432 var hash = createHash('rmd160').update(a).digest()
85433 if (padded === true) {
85434 return exports.setLength(hash, 32)
85435 } else {
85436 return hash
85437 }
85438 }
85439
85440 /**
85441 * Creates SHA-3 hash of the RLP encoded version of the input
85442 * @param {Buffer|Array|String|Number} a the input data
85443 * @return {Buffer}
85444 */
85445 exports.rlphash = function (a) {
85446 return exports.sha3(rlp.encode(a))
85447 }
85448
85449 /**
85450 * Checks if the private key satisfies the rules of the curve secp256k1.
85451 * @param {Buffer} privateKey
85452 * @return {Boolean}
85453 */
85454 exports.isValidPrivate = function (privateKey) {
85455 return secp256k1.privateKeyVerify(privateKey)
85456 }
85457
85458 /**
85459 * Checks if the public key satisfies the rules of the curve secp256k1
85460 * and the requirements of Ethereum.
85461 * @param {Buffer} publicKey The two points of an uncompressed key, unless sanitize is enabled
85462 * @param {Boolean} [sanitize=false] Accept public keys in other formats
85463 * @return {Boolean}
85464 */
85465 exports.isValidPublic = function (publicKey, sanitize) {
85466 if (publicKey.length === 64) {
85467 // Convert to SEC1 for secp256k1
85468 return secp256k1.publicKeyVerify(Buffer.concat([ Buffer.from([4]), publicKey ]))
85469 }
85470
85471 if (!sanitize) {
85472 return false
85473 }
85474
85475 return secp256k1.publicKeyVerify(publicKey)
85476 }
85477
85478 /**
85479 * Returns the ethereum address of a given public key.
85480 * Accepts "Ethereum public keys" and SEC1 encoded keys.
85481 * @param {Buffer} pubKey The two points of an uncompressed key, unless sanitize is enabled
85482 * @param {Boolean} [sanitize=false] Accept public keys in other formats
85483 * @return {Buffer}
85484 */
85485 exports.pubToAddress = exports.publicToAddress = function (pubKey, sanitize) {
85486 pubKey = exports.toBuffer(pubKey)
85487 if (sanitize && (pubKey.length !== 64)) {
85488 pubKey = secp256k1.publicKeyConvert(pubKey, false).slice(1)
85489 }
85490 assert(pubKey.length === 64)
85491 // Only take the lower 160bits of the hash
85492 return exports.sha3(pubKey).slice(-20)
85493 }
85494
85495 /**
85496 * Returns the ethereum public key of a given private key
85497 * @param {Buffer} privateKey A private key must be 256 bits wide
85498 * @return {Buffer}
85499 */
85500 var privateToPublic = exports.privateToPublic = function (privateKey) {
85501 privateKey = exports.toBuffer(privateKey)
85502 // skip the type flag and use the X, Y points
85503 return secp256k1.publicKeyCreate(privateKey, false).slice(1)
85504 }
85505
85506 /**
85507 * Converts a public key to the Ethereum format.
85508 * @param {Buffer} publicKey
85509 * @return {Buffer}
85510 */
85511 exports.importPublic = function (publicKey) {
85512 publicKey = exports.toBuffer(publicKey)
85513 if (publicKey.length !== 64) {
85514 publicKey = secp256k1.publicKeyConvert(publicKey, false).slice(1)
85515 }
85516 return publicKey
85517 }
85518
85519 /**
85520 * ECDSA sign
85521 * @param {Buffer} msgHash
85522 * @param {Buffer} privateKey
85523 * @return {Object}
85524 */
85525 exports.ecsign = function (msgHash, privateKey) {
85526 var sig = secp256k1.sign(msgHash, privateKey)
85527
85528 var ret = {}
85529 ret.r = sig.signature.slice(0, 32)
85530 ret.s = sig.signature.slice(32, 64)
85531 ret.v = sig.recovery + 27
85532 return ret
85533 }
85534
85535 /**
85536 * Returns the keccak-256 hash of `message`, prefixed with the header used by the `eth_sign` RPC call.
85537 * The output of this function can be fed into `ecsign` to produce the same signature as the `eth_sign`
85538 * call for a given `message`, or fed to `ecrecover` along with a signature to recover the public key
85539 * used to produce the signature.
85540 * @param message
85541 * @returns {Buffer} hash
85542 */
85543 exports.hashPersonalMessage = function (message) {
85544 var prefix = exports.toBuffer('\u0019Ethereum Signed Message:\n' + message.length.toString())
85545 return exports.sha3(Buffer.concat([prefix, message]))
85546 }
85547
85548 /**
85549 * ECDSA public key recovery from signature
85550 * @param {Buffer} msgHash
85551 * @param {Number} v
85552 * @param {Buffer} r
85553 * @param {Buffer} s
85554 * @return {Buffer} publicKey
85555 */
85556 exports.ecrecover = function (msgHash, v, r, s) {
85557 var signature = Buffer.concat([exports.setLength(r, 32), exports.setLength(s, 32)], 64)
85558 var recovery = v - 27
85559 if (recovery !== 0 && recovery !== 1) {
85560 throw new Error('Invalid signature v value')
85561 }
85562 var senderPubKey = secp256k1.recover(msgHash, signature, recovery)
85563 return secp256k1.publicKeyConvert(senderPubKey, false).slice(1)
85564 }
85565
85566 /**
85567 * Convert signature parameters into the format of `eth_sign` RPC method
85568 * @param {Number} v
85569 * @param {Buffer} r
85570 * @param {Buffer} s
85571 * @return {String} sig
85572 */
85573 exports.toRpcSig = function (v, r, s) {
85574 // NOTE: with potential introduction of chainId this might need to be updated
85575 if (v !== 27 && v !== 28) {
85576 throw new Error('Invalid recovery id')
85577 }
85578
85579 // geth (and the RPC eth_sign method) uses the 65 byte format used by Bitcoin
85580 // FIXME: this might change in the future - https://github.com/ethereum/go-ethereum/issues/2053
85581 return exports.bufferToHex(Buffer.concat([
85582 exports.setLengthLeft(r, 32),
85583 exports.setLengthLeft(s, 32),
85584 exports.toBuffer(v - 27)
85585 ]))
85586 }
85587
85588 /**
85589 * Convert signature format of the `eth_sign` RPC method to signature parameters
85590 * NOTE: all because of a bug in geth: https://github.com/ethereum/go-ethereum/issues/2053
85591 * @param {String} sig
85592 * @return {Object}
85593 */
85594 exports.fromRpcSig = function (sig) {
85595 sig = exports.toBuffer(sig)
85596
85597 // NOTE: with potential introduction of chainId this might need to be updated
85598 if (sig.length !== 65) {
85599 throw new Error('Invalid signature length')
85600 }
85601
85602 var v = sig[64]
85603 // support both versions of `eth_sign` responses
85604 if (v < 27) {
85605 v += 27
85606 }
85607
85608 return {
85609 v: v,
85610 r: sig.slice(0, 32),
85611 s: sig.slice(32, 64)
85612 }
85613 }
85614
85615 /**
85616 * Returns the ethereum address of a given private key
85617 * @param {Buffer} privateKey A private key must be 256 bits wide
85618 * @return {Buffer}
85619 */
85620 exports.privateToAddress = function (privateKey) {
85621 return exports.publicToAddress(privateToPublic(privateKey))
85622 }
85623
85624 /**
85625 * Checks if the address is a valid. Accepts checksummed addresses too
85626 * @param {String} address
85627 * @return {Boolean}
85628 */
85629 exports.isValidAddress = function (address) {
85630 return /^0x[0-9a-fA-F]{40}$/i.test(address)
85631 }
85632
85633 /**
85634 * Returns a checksummed address
85635 * @param {String} address
85636 * @return {String}
85637 */
85638 exports.toChecksumAddress = function (address) {
85639 address = exports.stripHexPrefix(address).toLowerCase()
85640 var hash = exports.sha3(address).toString('hex')
85641 var ret = '0x'
85642
85643 for (var i = 0; i < address.length; i++) {
85644 if (parseInt(hash[i], 16) >= 8) {
85645 ret += address[i].toUpperCase()
85646 } else {
85647 ret += address[i]
85648 }
85649 }
85650
85651 return ret
85652 }
85653
85654 /**
85655 * Checks if the address is a valid checksummed address
85656 * @param {Buffer} address
85657 * @return {Boolean}
85658 */
85659 exports.isValidChecksumAddress = function (address) {
85660 return exports.isValidAddress(address) && (exports.toChecksumAddress(address) === address)
85661 }
85662
85663 /**
85664 * Generates an address of a newly created contract
85665 * @param {Buffer} from the address which is creating this new address
85666 * @param {Buffer} nonce the nonce of the from account
85667 * @return {Buffer}
85668 */
85669 exports.generateAddress = function (from, nonce) {
85670 from = exports.toBuffer(from)
85671 nonce = new BN(nonce)
85672
85673 if (nonce.isZero()) {
85674 // in RLP we want to encode null in the case of zero nonce
85675 // read the RLP documentation for an answer if you dare
85676 nonce = null
85677 } else {
85678 nonce = Buffer.from(nonce.toArray())
85679 }
85680
85681 // Only take the lower 160bits of the hash
85682 return exports.rlphash([from, nonce]).slice(-20)
85683 }
85684
85685 /**
85686 * Returns true if the supplied address belongs to a precompiled account
85687 * @param {Buffer|String} address
85688 * @return {Boolean}
85689 */
85690 exports.isPrecompiled = function (address) {
85691 var a = exports.unpad(address)
85692 return a.length === 1 && a[0] > 0 && a[0] < 5
85693 }
85694
85695 /**
85696 * Adds "0x" to a given `String` if it does not already start with "0x"
85697 * @param {String} str
85698 * @return {String}
85699 */
85700 exports.addHexPrefix = function (str) {
85701 if (typeof str !== 'string') {
85702 return str
85703 }
85704
85705 return exports.isHexPrefixed(str) ? str : '0x' + str
85706 }
85707
85708 /**
85709 * Validate ECDSA signature
85710 * @method isValidSignature
85711 * @param {Buffer} v
85712 * @param {Buffer} r
85713 * @param {Buffer} s
85714 * @param {Boolean} [homestead=true]
85715 * @return {Boolean}
85716 */
85717
85718 exports.isValidSignature = function (v, r, s, homestead) {
85719 const SECP256K1_N_DIV_2 = new BN('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0', 16)
85720 const SECP256K1_N = new BN('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141', 16)
85721
85722 if (r.length !== 32 || s.length !== 32) {
85723 return false
85724 }
85725
85726 if (v !== 27 && v !== 28) {
85727 return false
85728 }
85729
85730 r = new BN(r)
85731 s = new BN(s)
85732
85733 if (r.isZero() || r.gt(SECP256K1_N) || s.isZero() || s.gt(SECP256K1_N)) {
85734 return false
85735 }
85736
85737 if ((homestead === false) && (new BN(s).cmp(SECP256K1_N_DIV_2) === 1)) {
85738 return false
85739 }
85740
85741 return true
85742 }
85743
85744 /**
85745 * Converts a `Buffer` or `Array` to JSON
85746 * @param {Buffer|Array} ba
85747 * @return {Array|String|null}
85748 */
85749 exports.baToJSON = function (ba) {
85750 if (Buffer.isBuffer(ba)) {
85751 return '0x' + ba.toString('hex')
85752 } else if (ba instanceof Array) {
85753 var array = []
85754 for (var i = 0; i < ba.length; i++) {
85755 array.push(exports.baToJSON(ba[i]))
85756 }
85757 return array
85758 }
85759 }
85760
85761 /**
85762 * Defines properties on a `Object`. It make the assumption that underlying data is binary.
85763 * @param {Object} self the `Object` to define properties on
85764 * @param {Array} fields an array fields to define. Fields can contain:
85765 * * `name` - the name of the properties
85766 * * `length` - the number of bytes the field can have
85767 * * `allowLess` - if the field can be less than the length
85768 * * `allowEmpty`
85769 * @param {*} data data to be validated against the definitions
85770 */
85771 exports.defineProperties = function (self, fields, data) {
85772 self.raw = []
85773 self._fields = []
85774
85775 // attach the `toJSON`
85776 self.toJSON = function (label) {
85777 if (label) {
85778 var obj = {}
85779 self._fields.forEach(function (field) {
85780 obj[field] = '0x' + self[field].toString('hex')
85781 })
85782 return obj
85783 }
85784 return exports.baToJSON(this.raw)
85785 }
85786
85787 self.serialize = function serialize () {
85788 return rlp.encode(self.raw)
85789 }
85790
85791 fields.forEach(function (field, i) {
85792 self._fields.push(field.name)
85793 function getter () {
85794 return self.raw[i]
85795 }
85796 function setter (v) {
85797 v = exports.toBuffer(v)
85798
85799 if (v.toString('hex') === '00' && !field.allowZero) {
85800 v = Buffer.allocUnsafe(0)
85801 }
85802
85803 if (field.allowLess && field.length) {
85804 v = exports.stripZeros(v)
85805 assert(field.length >= v.length, 'The field ' + field.name + ' must not have more ' + field.length + ' bytes')
85806 } else if (!(field.allowZero && v.length === 0) && field.length) {
85807 assert(field.length === v.length, 'The field ' + field.name + ' must have byte length of ' + field.length)
85808 }
85809
85810 self.raw[i] = v
85811 }
85812
85813 Object.defineProperty(self, field.name, {
85814 enumerable: true,
85815 configurable: true,
85816 get: getter,
85817 set: setter
85818 })
85819
85820 if (field.default) {
85821 self[field.name] = field.default
85822 }
85823
85824 // attach alias
85825 if (field.alias) {
85826 Object.defineProperty(self, field.alias, {
85827 enumerable: false,
85828 configurable: true,
85829 set: setter,
85830 get: getter
85831 })
85832 }
85833 })
85834
85835 // if the constuctor is passed data
85836 if (data) {
85837 if (typeof data === 'string') {
85838 data = Buffer.from(exports.stripHexPrefix(data), 'hex')
85839 }
85840
85841 if (Buffer.isBuffer(data)) {
85842 data = rlp.decode(data)
85843 }
85844
85845 if (Array.isArray(data)) {
85846 if (data.length > self._fields.length) {
85847 throw (new Error('wrong number of fields in data'))
85848 }
85849
85850 // make sure all the items are buffers
85851 data.forEach(function (d, i) {
85852 self[self._fields[i]] = exports.toBuffer(d)
85853 })
85854 } else if (typeof data === 'object') {
85855 const keys = Object.keys(data)
85856 fields.forEach(function (field) {
85857 if (keys.indexOf(field.name) !== -1) self[field.name] = data[field.name]
85858 if (keys.indexOf(field.alias) !== -1) self[field.alias] = data[field.alias]
85859 })
85860 } else {
85861 throw new Error('invalid data')
85862 }
85863 }
85864 }
85865
85866 }).call(this,require("buffer").Buffer)
85867 },{"assert":1,"bn.js":33,"buffer":5,"create-hash":36,"ethjs-util":56,"keccak":65,"rlp":72,"secp256k1":73}],32:[function(require,module,exports){
85868 (function (Buffer){
85869 // Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki
85870 // Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
85871 // NOTE: SIGHASH byte ignored AND restricted, truncate before use
85872
85873 function check (buffer) {
85874 if (buffer.length < 8) return false
85875 if (buffer.length > 72) return false
85876 if (buffer[0] !== 0x30) return false
85877 if (buffer[1] !== buffer.length - 2) return false
85878 if (buffer[2] !== 0x02) return false
85879
85880 var lenR = buffer[3]
85881 if (lenR === 0) return false
85882 if (5 + lenR >= buffer.length) return false
85883 if (buffer[4 + lenR] !== 0x02) return false
85884
85885 var lenS = buffer[5 + lenR]
85886 if (lenS === 0) return false
85887 if ((6 + lenR + lenS) !== buffer.length) return false
85888
85889 if (buffer[4] & 0x80) return false
85890 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false
85891
85892 if (buffer[lenR + 6] & 0x80) return false
85893 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false
85894 return true
85895 }
85896
85897 function decode (buffer) {
85898 if (buffer.length < 8) throw new Error('DER sequence length is too short')
85899 if (buffer.length > 72) throw new Error('DER sequence length is too long')
85900 if (buffer[0] !== 0x30) throw new Error('Expected DER sequence')
85901 if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid')
85902 if (buffer[2] !== 0x02) throw new Error('Expected DER integer')
85903
85904 var lenR = buffer[3]
85905 if (lenR === 0) throw new Error('R length is zero')
85906 if (5 + lenR >= buffer.length) throw new Error('R length is too long')
85907 if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)')
85908
85909 var lenS = buffer[5 + lenR]
85910 if (lenS === 0) throw new Error('S length is zero')
85911 if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid')
85912
85913 if (buffer[4] & 0x80) throw new Error('R value is negative')
85914 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded')
85915
85916 if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative')
85917 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded')
85918
85919 // non-BIP66 - extract R, S values
85920 return {
85921 r: buffer.slice(4, 4 + lenR),
85922 s: buffer.slice(6 + lenR)
85923 }
85924 }
85925
85926 /*
85927 * Expects r and s to be positive DER integers.
85928 *
85929 * The DER format uses the most significant bit as a sign bit (& 0x80).
85930 * If the significant bit is set AND the integer is positive, a 0x00 is prepended.
85931 *
85932 * Examples:
85933 *
85934 * 0 => 0x00
85935 * 1 => 0x01
85936 * -1 => 0xff
85937 * 127 => 0x7f
85938 * -127 => 0x81
85939 * 128 => 0x0080
85940 * -128 => 0x80
85941 * 255 => 0x00ff
85942 * -255 => 0xff01
85943 * 16300 => 0x3fac
85944 * -16300 => 0xc054
85945 * 62300 => 0x00f35c
85946 * -62300 => 0xff0ca4
85947 */
85948 function encode (r, s) {
85949 var lenR = r.length
85950 var lenS = s.length
85951 if (lenR === 0) throw new Error('R length is zero')
85952 if (lenS === 0) throw new Error('S length is zero')
85953 if (lenR > 33) throw new Error('R length is too long')
85954 if (lenS > 33) throw new Error('S length is too long')
85955 if (r[0] & 0x80) throw new Error('R value is negative')
85956 if (s[0] & 0x80) throw new Error('S value is negative')
85957 if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded')
85958 if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded')
85959
85960 var signature = new Buffer(6 + lenR + lenS)
85961
85962 // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
85963 signature[0] = 0x30
85964 signature[1] = signature.length - 2
85965 signature[2] = 0x02
85966 signature[3] = r.length
85967 r.copy(signature, 4)
85968 signature[4 + lenR] = 0x02
85969 signature[5 + lenR] = s.length
85970 s.copy(signature, 6 + lenR)
85971
85972 return signature
85973 }
85974
85975 module.exports = {
85976 check: check,
85977 decode: decode,
85978 encode: encode
85979 }
85980
85981 }).call(this,require("buffer").Buffer)
85982 },{"buffer":5}],33:[function(require,module,exports){
85983 (function (module, exports) {
85984 'use strict';
85985
85986 // Utils
85987 function assert (val, msg) {
85988 if (!val) throw new Error(msg || 'Assertion failed');
85989 }
85990
85991 // Could use `inherits` module, but don't want to move from single file
85992 // architecture yet.
85993 function inherits (ctor, superCtor) {
85994 ctor.super_ = superCtor;
85995 var TempCtor = function () {};
85996 TempCtor.prototype = superCtor.prototype;
85997 ctor.prototype = new TempCtor();
85998 ctor.prototype.constructor = ctor;
85999 }
86000
86001 // BN
86002
86003 function BN (number, base, endian) {
86004 if (BN.isBN(number)) {
86005 return number;
86006 }
86007
86008 this.negative = 0;
86009 this.words = null;
86010 this.length = 0;
86011
86012 // Reduction context
86013 this.red = null;
86014
86015 if (number !== null) {
86016 if (base === 'le' || base === 'be') {
86017 endian = base;
86018 base = 10;
86019 }
86020
86021 this._init(number || 0, base || 10, endian || 'be');
86022 }
86023 }
86024 if (typeof module === 'object') {
86025 module.exports = BN;
86026 } else {
86027 exports.BN = BN;
86028 }
86029
86030 BN.BN = BN;
86031 BN.wordSize = 26;
86032
86033 var Buffer;
86034 try {
86035 Buffer = require('buf' + 'fer').Buffer;
86036 } catch (e) {
86037 }
86038
86039 BN.isBN = function isBN (num) {
86040 if (num instanceof BN) {
86041 return true;
86042 }
86043
86044 return num !== null && typeof num === 'object' &&
86045 num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
86046 };
86047
86048 BN.max = function max (left, right) {
86049 if (left.cmp(right) > 0) return left;
86050 return right;
86051 };
86052
86053 BN.min = function min (left, right) {
86054 if (left.cmp(right) < 0) return left;
86055 return right;
86056 };
86057
86058 BN.prototype._init = function init (number, base, endian) {
86059 if (typeof number === 'number') {
86060 return this._initNumber(number, base, endian);
86061 }
86062
86063 if (typeof number === 'object') {
86064 return this._initArray(number, base, endian);
86065 }
86066
86067 if (base === 'hex') {
86068 base = 16;
86069 }
86070 assert(base === (base | 0) && base >= 2 && base <= 36);
86071
86072 number = number.toString().replace(/\s+/g, '');
86073 var start = 0;
86074 if (number[0] === '-') {
86075 start++;
86076 }
86077
86078 if (base === 16) {
86079 this._parseHex(number, start);
86080 } else {
86081 this._parseBase(number, base, start);
86082 }
86083
86084 if (number[0] === '-') {
86085 this.negative = 1;
86086 }
86087
86088 this.strip();
86089
86090 if (endian !== 'le') return;
86091
86092 this._initArray(this.toArray(), base, endian);
86093 };
86094
86095 BN.prototype._initNumber = function _initNumber (number, base, endian) {
86096 if (number < 0) {
86097 this.negative = 1;
86098 number = -number;
86099 }
86100 if (number < 0x4000000) {
86101 this.words = [ number & 0x3ffffff ];
86102 this.length = 1;
86103 } else if (number < 0x10000000000000) {
86104 this.words = [
86105 number & 0x3ffffff,
86106 (number / 0x4000000) & 0x3ffffff
86107 ];
86108 this.length = 2;
86109 } else {
86110 assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
86111 this.words = [
86112 number & 0x3ffffff,
86113 (number / 0x4000000) & 0x3ffffff,
86114 1
86115 ];
86116 this.length = 3;
86117 }
86118
86119 if (endian !== 'le') return;
86120
86121 // Reverse the bytes
86122 this._initArray(this.toArray(), base, endian);
86123 };
86124
86125 BN.prototype._initArray = function _initArray (number, base, endian) {
86126 // Perhaps a Uint8Array
86127 assert(typeof number.length === 'number');
86128 if (number.length <= 0) {
86129 this.words = [ 0 ];
86130 this.length = 1;
86131 return this;
86132 }
86133
86134 this.length = Math.ceil(number.length / 3);
86135 this.words = new Array(this.length);
86136 for (var i = 0; i < this.length; i++) {
86137 this.words[i] = 0;
86138 }
86139
86140 var j, w;
86141 var off = 0;
86142 if (endian === 'be') {
86143 for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
86144 w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
86145 this.words[j] |= (w << off) & 0x3ffffff;
86146 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
86147 off += 24;
86148 if (off >= 26) {
86149 off -= 26;
86150 j++;
86151 }
86152 }
86153 } else if (endian === 'le') {
86154 for (i = 0, j = 0; i < number.length; i += 3) {
86155 w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
86156 this.words[j] |= (w << off) & 0x3ffffff;
86157 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
86158 off += 24;
86159 if (off >= 26) {
86160 off -= 26;
86161 j++;
86162 }
86163 }
86164 }
86165 return this.strip();
86166 };
86167
86168 function parseHex (str, start, end) {
86169 var r = 0;
86170 var len = Math.min(str.length, end);
86171 for (var i = start; i < len; i++) {
86172 var c = str.charCodeAt(i) - 48;
86173
86174 r <<= 4;
86175
86176 // 'a' - 'f'
86177 if (c >= 49 && c <= 54) {
86178 r |= c - 49 + 0xa;
86179
86180 // 'A' - 'F'
86181 } else if (c >= 17 && c <= 22) {
86182 r |= c - 17 + 0xa;
86183
86184 // '0' - '9'
86185 } else {
86186 r |= c & 0xf;
86187 }
86188 }
86189 return r;
86190 }
86191
86192 BN.prototype._parseHex = function _parseHex (number, start) {
86193 // Create possibly bigger array to ensure that it fits the number
86194 this.length = Math.ceil((number.length - start) / 6);
86195 this.words = new Array(this.length);
86196 for (var i = 0; i < this.length; i++) {
86197 this.words[i] = 0;
86198 }
86199
86200 var j, w;
86201 // Scan 24-bit chunks and add them to the number
86202 var off = 0;
86203 for (i = number.length - 6, j = 0; i >= start; i -= 6) {
86204 w = parseHex(number, i, i + 6);
86205 this.words[j] |= (w << off) & 0x3ffffff;
86206 // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb
86207 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
86208 off += 24;
86209 if (off >= 26) {
86210 off -= 26;
86211 j++;
86212 }
86213 }
86214 if (i + 6 !== start) {
86215 w = parseHex(number, start, i + 6);
86216 this.words[j] |= (w << off) & 0x3ffffff;
86217 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
86218 }
86219 this.strip();
86220 };
86221
86222 function parseBase (str, start, end, mul) {
86223 var r = 0;
86224 var len = Math.min(str.length, end);
86225 for (var i = start; i < len; i++) {
86226 var c = str.charCodeAt(i) - 48;
86227
86228 r *= mul;
86229
86230 // 'a'
86231 if (c >= 49) {
86232 r += c - 49 + 0xa;
86233
86234 // 'A'
86235 } else if (c >= 17) {
86236 r += c - 17 + 0xa;
86237
86238 // '0' - '9'
86239 } else {
86240 r += c;
86241 }
86242 }
86243 return r;
86244 }
86245
86246 BN.prototype._parseBase = function _parseBase (number, base, start) {
86247 // Initialize as zero
86248 this.words = [ 0 ];
86249 this.length = 1;
86250
86251 // Find length of limb in base
86252 for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
86253 limbLen++;
86254 }
86255 limbLen--;
86256 limbPow = (limbPow / base) | 0;
86257
86258 var total = number.length - start;
86259 var mod = total % limbLen;
86260 var end = Math.min(total, total - mod) + start;
86261
86262 var word = 0;
86263 for (var i = start; i < end; i += limbLen) {
86264 word = parseBase(number, i, i + limbLen, base);
86265
86266 this.imuln(limbPow);
86267 if (this.words[0] + word < 0x4000000) {
86268 this.words[0] += word;
86269 } else {
86270 this._iaddn(word);
86271 }
86272 }
86273
86274 if (mod !== 0) {
86275 var pow = 1;
86276 word = parseBase(number, i, number.length, base);
86277
86278 for (i = 0; i < mod; i++) {
86279 pow *= base;
86280 }
86281
86282 this.imuln(pow);
86283 if (this.words[0] + word < 0x4000000) {
86284 this.words[0] += word;
86285 } else {
86286 this._iaddn(word);
86287 }
86288 }
86289 };
86290
86291 BN.prototype.copy = function copy (dest) {
86292 dest.words = new Array(this.length);
86293 for (var i = 0; i < this.length; i++) {
86294 dest.words[i] = this.words[i];
86295 }
86296 dest.length = this.length;
86297 dest.negative = this.negative;
86298 dest.red = this.red;
86299 };
86300
86301 BN.prototype.clone = function clone () {
86302 var r = new BN(null);
86303 this.copy(r);
86304 return r;
86305 };
86306
86307 BN.prototype._expand = function _expand (size) {
86308 while (this.length < size) {
86309 this.words[this.length++] = 0;
86310 }
86311 return this;
86312 };
86313
86314 // Remove leading `0` from `this`
86315 BN.prototype.strip = function strip () {
86316 while (this.length > 1 && this.words[this.length - 1] === 0) {
86317 this.length--;
86318 }
86319 return this._normSign();
86320 };
86321
86322 BN.prototype._normSign = function _normSign () {
86323 // -0 = 0
86324 if (this.length === 1 && this.words[0] === 0) {
86325 this.negative = 0;
86326 }
86327 return this;
86328 };
86329
86330 BN.prototype.inspect = function inspect () {
86331 return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
86332 };
86333
86334 /*
86335
86336 var zeros = [];
86337 var groupSizes = [];
86338 var groupBases = [];
86339
86340 var s = '';
86341 var i = -1;
86342 while (++i < BN.wordSize) {
86343 zeros[i] = s;
86344 s += '0';
86345 }
86346 groupSizes[0] = 0;
86347 groupSizes[1] = 0;
86348 groupBases[0] = 0;
86349 groupBases[1] = 0;
86350 var base = 2 - 1;
86351 while (++base < 36 + 1) {
86352 var groupSize = 0;
86353 var groupBase = 1;
86354 while (groupBase < (1 << BN.wordSize) / base) {
86355 groupBase *= base;
86356 groupSize += 1;
86357 }
86358 groupSizes[base] = groupSize;
86359 groupBases[base] = groupBase;
86360 }
86361
86362 */
86363
86364 var zeros = [
86365 '',
86366 '0',
86367 '00',
86368 '000',
86369 '0000',
86370 '00000',
86371 '000000',
86372 '0000000',
86373 '00000000',
86374 '000000000',
86375 '0000000000',
86376 '00000000000',
86377 '000000000000',
86378 '0000000000000',
86379 '00000000000000',
86380 '000000000000000',
86381 '0000000000000000',
86382 '00000000000000000',
86383 '000000000000000000',
86384 '0000000000000000000',
86385 '00000000000000000000',
86386 '000000000000000000000',
86387 '0000000000000000000000',
86388 '00000000000000000000000',
86389 '000000000000000000000000',
86390 '0000000000000000000000000'
86391 ];
86392
86393 var groupSizes = [
86394 0, 0,
86395 25, 16, 12, 11, 10, 9, 8,
86396 8, 7, 7, 7, 7, 6, 6,
86397 6, 6, 6, 6, 6, 5, 5,
86398 5, 5, 5, 5, 5, 5, 5,
86399 5, 5, 5, 5, 5, 5, 5
86400 ];
86401
86402 var groupBases = [
86403 0, 0,
86404 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
86405 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
86406 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
86407 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
86408 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
86409 ];
86410
86411 BN.prototype.toString = function toString (base, padding) {
86412 base = base || 10;
86413 padding = padding | 0 || 1;
86414
86415 var out;
86416 if (base === 16 || base === 'hex') {
86417 out = '';
86418 var off = 0;
86419 var carry = 0;
86420 for (var i = 0; i < this.length; i++) {
86421 var w = this.words[i];
86422 var word = (((w << off) | carry) & 0xffffff).toString(16);
86423 carry = (w >>> (24 - off)) & 0xffffff;
86424 if (carry !== 0 || i !== this.length - 1) {
86425 out = zeros[6 - word.length] + word + out;
86426 } else {
86427 out = word + out;
86428 }
86429 off += 2;
86430 if (off >= 26) {
86431 off -= 26;
86432 i--;
86433 }
86434 }
86435 if (carry !== 0) {
86436 out = carry.toString(16) + out;
86437 }
86438 while (out.length % padding !== 0) {
86439 out = '0' + out;
86440 }
86441 if (this.negative !== 0) {
86442 out = '-' + out;
86443 }
86444 return out;
86445 }
86446
86447 if (base === (base | 0) && base >= 2 && base <= 36) {
86448 // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
86449 var groupSize = groupSizes[base];
86450 // var groupBase = Math.pow(base, groupSize);
86451 var groupBase = groupBases[base];
86452 out = '';
86453 var c = this.clone();
86454 c.negative = 0;
86455 while (!c.isZero()) {
86456 var r = c.modn(groupBase).toString(base);
86457 c = c.idivn(groupBase);
86458
86459 if (!c.isZero()) {
86460 out = zeros[groupSize - r.length] + r + out;
86461 } else {
86462 out = r + out;
86463 }
86464 }
86465 if (this.isZero()) {
86466 out = '0' + out;
86467 }
86468 while (out.length % padding !== 0) {
86469 out = '0' + out;
86470 }
86471 if (this.negative !== 0) {
86472 out = '-' + out;
86473 }
86474 return out;
86475 }
86476
86477 assert(false, 'Base should be between 2 and 36');
86478 };
86479
86480 BN.prototype.toNumber = function toNumber () {
86481 var ret = this.words[0];
86482 if (this.length === 2) {
86483 ret += this.words[1] * 0x4000000;
86484 } else if (this.length === 3 && this.words[2] === 0x01) {
86485 // NOTE: at this stage it is known that the top bit is set
86486 ret += 0x10000000000000 + (this.words[1] * 0x4000000);
86487 } else if (this.length > 2) {
86488 assert(false, 'Number can only safely store up to 53 bits');
86489 }
86490 return (this.negative !== 0) ? -ret : ret;
86491 };
86492
86493 BN.prototype.toJSON = function toJSON () {
86494 return this.toString(16);
86495 };
86496
86497 BN.prototype.toBuffer = function toBuffer (endian, length) {
86498 assert(typeof Buffer !== 'undefined');
86499 return this.toArrayLike(Buffer, endian, length);
86500 };
86501
86502 BN.prototype.toArray = function toArray (endian, length) {
86503 return this.toArrayLike(Array, endian, length);
86504 };
86505
86506 BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
86507 var byteLength = this.byteLength();
86508 var reqLength = length || Math.max(1, byteLength);
86509 assert(byteLength <= reqLength, 'byte array longer than desired length');
86510 assert(reqLength > 0, 'Requested array length <= 0');
86511
86512 this.strip();
86513 var littleEndian = endian === 'le';
86514 var res = new ArrayType(reqLength);
86515
86516 var b, i;
86517 var q = this.clone();
86518 if (!littleEndian) {
86519 // Assume big-endian
86520 for (i = 0; i < reqLength - byteLength; i++) {
86521 res[i] = 0;
86522 }
86523
86524 for (i = 0; !q.isZero(); i++) {
86525 b = q.andln(0xff);
86526 q.iushrn(8);
86527
86528 res[reqLength - i - 1] = b;
86529 }
86530 } else {
86531 for (i = 0; !q.isZero(); i++) {
86532 b = q.andln(0xff);
86533 q.iushrn(8);
86534
86535 res[i] = b;
86536 }
86537
86538 for (; i < reqLength; i++) {
86539 res[i] = 0;
86540 }
86541 }
86542
86543 return res;
86544 };
86545
86546 if (Math.clz32) {
86547 BN.prototype._countBits = function _countBits (w) {
86548 return 32 - Math.clz32(w);
86549 };
86550 } else {
86551 BN.prototype._countBits = function _countBits (w) {
86552 var t = w;
86553 var r = 0;
86554 if (t >= 0x1000) {
86555 r += 13;
86556 t >>>= 13;
86557 }
86558 if (t >= 0x40) {
86559 r += 7;
86560 t >>>= 7;
86561 }
86562 if (t >= 0x8) {
86563 r += 4;
86564 t >>>= 4;
86565 }
86566 if (t >= 0x02) {
86567 r += 2;
86568 t >>>= 2;
86569 }
86570 return r + t;
86571 };
86572 }
86573
86574 BN.prototype._zeroBits = function _zeroBits (w) {
86575 // Short-cut
86576 if (w === 0) return 26;
86577
86578 var t = w;
86579 var r = 0;
86580 if ((t & 0x1fff) === 0) {
86581 r += 13;
86582 t >>>= 13;
86583 }
86584 if ((t & 0x7f) === 0) {
86585 r += 7;
86586 t >>>= 7;
86587 }
86588 if ((t & 0xf) === 0) {
86589 r += 4;
86590 t >>>= 4;
86591 }
86592 if ((t & 0x3) === 0) {
86593 r += 2;
86594 t >>>= 2;
86595 }
86596 if ((t & 0x1) === 0) {
86597 r++;
86598 }
86599 return r;
86600 };
86601
86602 // Return number of used bits in a BN
86603 BN.prototype.bitLength = function bitLength () {
86604 var w = this.words[this.length - 1];
86605 var hi = this._countBits(w);
86606 return (this.length - 1) * 26 + hi;
86607 };
86608
86609 function toBitArray (num) {
86610 var w = new Array(num.bitLength());
86611
86612 for (var bit = 0; bit < w.length; bit++) {
86613 var off = (bit / 26) | 0;
86614 var wbit = bit % 26;
86615
86616 w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
86617 }
86618
86619 return w;
86620 }
86621
86622 // Number of trailing zero bits
86623 BN.prototype.zeroBits = function zeroBits () {
86624 if (this.isZero()) return 0;
86625
86626 var r = 0;
86627 for (var i = 0; i < this.length; i++) {
86628 var b = this._zeroBits(this.words[i]);
86629 r += b;
86630 if (b !== 26) break;
86631 }
86632 return r;
86633 };
86634
86635 BN.prototype.byteLength = function byteLength () {
86636 return Math.ceil(this.bitLength() / 8);
86637 };
86638
86639 BN.prototype.toTwos = function toTwos (width) {
86640 if (this.negative !== 0) {
86641 return this.abs().inotn(width).iaddn(1);
86642 }
86643 return this.clone();
86644 };
86645
86646 BN.prototype.fromTwos = function fromTwos (width) {
86647 if (this.testn(width - 1)) {
86648 return this.notn(width).iaddn(1).ineg();
86649 }
86650 return this.clone();
86651 };
86652
86653 BN.prototype.isNeg = function isNeg () {
86654 return this.negative !== 0;
86655 };
86656
86657 // Return negative clone of `this`
86658 BN.prototype.neg = function neg () {
86659 return this.clone().ineg();
86660 };
86661
86662 BN.prototype.ineg = function ineg () {
86663 if (!this.isZero()) {
86664 this.negative ^= 1;
86665 }
86666
86667 return this;
86668 };
86669
86670 // Or `num` with `this` in-place
86671 BN.prototype.iuor = function iuor (num) {
86672 while (this.length < num.length) {
86673 this.words[this.length++] = 0;
86674 }
86675
86676 for (var i = 0; i < num.length; i++) {
86677 this.words[i] = this.words[i] | num.words[i];
86678 }
86679
86680 return this.strip();
86681 };
86682
86683 BN.prototype.ior = function ior (num) {
86684 assert((this.negative | num.negative) === 0);
86685 return this.iuor(num);
86686 };
86687
86688 // Or `num` with `this`
86689 BN.prototype.or = function or (num) {
86690 if (this.length > num.length) return this.clone().ior(num);
86691 return num.clone().ior(this);
86692 };
86693
86694 BN.prototype.uor = function uor (num) {
86695 if (this.length > num.length) return this.clone().iuor(num);
86696 return num.clone().iuor(this);
86697 };
86698
86699 // And `num` with `this` in-place
86700 BN.prototype.iuand = function iuand (num) {
86701 // b = min-length(num, this)
86702 var b;
86703 if (this.length > num.length) {
86704 b = num;
86705 } else {
86706 b = this;
86707 }
86708
86709 for (var i = 0; i < b.length; i++) {
86710 this.words[i] = this.words[i] & num.words[i];
86711 }
86712
86713 this.length = b.length;
86714
86715 return this.strip();
86716 };
86717
86718 BN.prototype.iand = function iand (num) {
86719 assert((this.negative | num.negative) === 0);
86720 return this.iuand(num);
86721 };
86722
86723 // And `num` with `this`
86724 BN.prototype.and = function and (num) {
86725 if (this.length > num.length) return this.clone().iand(num);
86726 return num.clone().iand(this);
86727 };
86728
86729 BN.prototype.uand = function uand (num) {
86730 if (this.length > num.length) return this.clone().iuand(num);
86731 return num.clone().iuand(this);
86732 };
86733
86734 // Xor `num` with `this` in-place
86735 BN.prototype.iuxor = function iuxor (num) {
86736 // a.length > b.length
86737 var a;
86738 var b;
86739 if (this.length > num.length) {
86740 a = this;
86741 b = num;
86742 } else {
86743 a = num;
86744 b = this;
86745 }
86746
86747 for (var i = 0; i < b.length; i++) {
86748 this.words[i] = a.words[i] ^ b.words[i];
86749 }
86750
86751 if (this !== a) {
86752 for (; i < a.length; i++) {
86753 this.words[i] = a.words[i];
86754 }
86755 }
86756
86757 this.length = a.length;
86758
86759 return this.strip();
86760 };
86761
86762 BN.prototype.ixor = function ixor (num) {
86763 assert((this.negative | num.negative) === 0);
86764 return this.iuxor(num);
86765 };
86766
86767 // Xor `num` with `this`
86768 BN.prototype.xor = function xor (num) {
86769 if (this.length > num.length) return this.clone().ixor(num);
86770 return num.clone().ixor(this);
86771 };
86772
86773 BN.prototype.uxor = function uxor (num) {
86774 if (this.length > num.length) return this.clone().iuxor(num);
86775 return num.clone().iuxor(this);
86776 };
86777
86778 // Not ``this`` with ``width`` bitwidth
86779 BN.prototype.inotn = function inotn (width) {
86780 assert(typeof width === 'number' && width >= 0);
86781
86782 var bytesNeeded = Math.ceil(width / 26) | 0;
86783 var bitsLeft = width % 26;
86784
86785 // Extend the buffer with leading zeroes
86786 this._expand(bytesNeeded);
86787
86788 if (bitsLeft > 0) {
86789 bytesNeeded--;
86790 }
86791
86792 // Handle complete words
86793 for (var i = 0; i < bytesNeeded; i++) {
86794 this.words[i] = ~this.words[i] & 0x3ffffff;
86795 }
86796
86797 // Handle the residue
86798 if (bitsLeft > 0) {
86799 this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
86800 }
86801
86802 // And remove leading zeroes
86803 return this.strip();
86804 };
86805
86806 BN.prototype.notn = function notn (width) {
86807 return this.clone().inotn(width);
86808 };
86809
86810 // Set `bit` of `this`
86811 BN.prototype.setn = function setn (bit, val) {
86812 assert(typeof bit === 'number' && bit >= 0);
86813
86814 var off = (bit / 26) | 0;
86815 var wbit = bit % 26;
86816
86817 this._expand(off + 1);
86818
86819 if (val) {
86820 this.words[off] = this.words[off] | (1 << wbit);
86821 } else {
86822 this.words[off] = this.words[off] & ~(1 << wbit);
86823 }
86824
86825 return this.strip();
86826 };
86827
86828 // Add `num` to `this` in-place
86829 BN.prototype.iadd = function iadd (num) {
86830 var r;
86831
86832 // negative + positive
86833 if (this.negative !== 0 && num.negative === 0) {
86834 this.negative = 0;
86835 r = this.isub(num);
86836 this.negative ^= 1;
86837 return this._normSign();
86838
86839 // positive + negative
86840 } else if (this.negative === 0 && num.negative !== 0) {
86841 num.negative = 0;
86842 r = this.isub(num);
86843 num.negative = 1;
86844 return r._normSign();
86845 }
86846
86847 // a.length > b.length
86848 var a, b;
86849 if (this.length > num.length) {
86850 a = this;
86851 b = num;
86852 } else {
86853 a = num;
86854 b = this;
86855 }
86856
86857 var carry = 0;
86858 for (var i = 0; i < b.length; i++) {
86859 r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
86860 this.words[i] = r & 0x3ffffff;
86861 carry = r >>> 26;
86862 }
86863 for (; carry !== 0 && i < a.length; i++) {
86864 r = (a.words[i] | 0) + carry;
86865 this.words[i] = r & 0x3ffffff;
86866 carry = r >>> 26;
86867 }
86868
86869 this.length = a.length;
86870 if (carry !== 0) {
86871 this.words[this.length] = carry;
86872 this.length++;
86873 // Copy the rest of the words
86874 } else if (a !== this) {
86875 for (; i < a.length; i++) {
86876 this.words[i] = a.words[i];
86877 }
86878 }
86879
86880 return this;
86881 };
86882
86883 // Add `num` to `this`
86884 BN.prototype.add = function add (num) {
86885 var res;
86886 if (num.negative !== 0 && this.negative === 0) {
86887 num.negative = 0;
86888 res = this.sub(num);
86889 num.negative ^= 1;
86890 return res;
86891 } else if (num.negative === 0 && this.negative !== 0) {
86892 this.negative = 0;
86893 res = num.sub(this);
86894 this.negative = 1;
86895 return res;
86896 }
86897
86898 if (this.length > num.length) return this.clone().iadd(num);
86899
86900 return num.clone().iadd(this);
86901 };
86902
86903 // Subtract `num` from `this` in-place
86904 BN.prototype.isub = function isub (num) {
86905 // this - (-num) = this + num
86906 if (num.negative !== 0) {
86907 num.negative = 0;
86908 var r = this.iadd(num);
86909 num.negative = 1;
86910 return r._normSign();
86911
86912 // -this - num = -(this + num)
86913 } else if (this.negative !== 0) {
86914 this.negative = 0;
86915 this.iadd(num);
86916 this.negative = 1;
86917 return this._normSign();
86918 }
86919
86920 // At this point both numbers are positive
86921 var cmp = this.cmp(num);
86922
86923 // Optimization - zeroify
86924 if (cmp === 0) {
86925 this.negative = 0;
86926 this.length = 1;
86927 this.words[0] = 0;
86928 return this;
86929 }
86930
86931 // a > b
86932 var a, b;
86933 if (cmp > 0) {
86934 a = this;
86935 b = num;
86936 } else {
86937 a = num;
86938 b = this;
86939 }
86940
86941 var carry = 0;
86942 for (var i = 0; i < b.length; i++) {
86943 r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
86944 carry = r >> 26;
86945 this.words[i] = r & 0x3ffffff;
86946 }
86947 for (; carry !== 0 && i < a.length; i++) {
86948 r = (a.words[i] | 0) + carry;
86949 carry = r >> 26;
86950 this.words[i] = r & 0x3ffffff;
86951 }
86952
86953 // Copy rest of the words
86954 if (carry === 0 && i < a.length && a !== this) {
86955 for (; i < a.length; i++) {
86956 this.words[i] = a.words[i];
86957 }
86958 }
86959
86960 this.length = Math.max(this.length, i);
86961
86962 if (a !== this) {
86963 this.negative = 1;
86964 }
86965
86966 return this.strip();
86967 };
86968
86969 // Subtract `num` from `this`
86970 BN.prototype.sub = function sub (num) {
86971 return this.clone().isub(num);
86972 };
86973
86974 function smallMulTo (self, num, out) {
86975 out.negative = num.negative ^ self.negative;
86976 var len = (self.length + num.length) | 0;
86977 out.length = len;
86978 len = (len - 1) | 0;
86979
86980 // Peel one iteration (compiler can't do it, because of code complexity)
86981 var a = self.words[0] | 0;
86982 var b = num.words[0] | 0;
86983 var r = a * b;
86984
86985 var lo = r & 0x3ffffff;
86986 var carry = (r / 0x4000000) | 0;
86987 out.words[0] = lo;
86988
86989 for (var k = 1; k < len; k++) {
86990 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
86991 // note that ncarry could be >= 0x3ffffff
86992 var ncarry = carry >>> 26;
86993 var rword = carry & 0x3ffffff;
86994 var maxJ = Math.min(k, num.length - 1);
86995 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
86996 var i = (k - j) | 0;
86997 a = self.words[i] | 0;
86998 b = num.words[j] | 0;
86999 r = a * b + rword;
87000 ncarry += (r / 0x4000000) | 0;
87001 rword = r & 0x3ffffff;
87002 }
87003 out.words[k] = rword | 0;
87004 carry = ncarry | 0;
87005 }
87006 if (carry !== 0) {
87007 out.words[k] = carry | 0;
87008 } else {
87009 out.length--;
87010 }
87011
87012 return out.strip();
87013 }
87014
87015 // TODO(indutny): it may be reasonable to omit it for users who don't need
87016 // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
87017 // multiplication (like elliptic secp256k1).
87018 var comb10MulTo = function comb10MulTo (self, num, out) {
87019 var a = self.words;
87020 var b = num.words;
87021 var o = out.words;
87022 var c = 0;
87023 var lo;
87024 var mid;
87025 var hi;
87026 var a0 = a[0] | 0;
87027 var al0 = a0 & 0x1fff;
87028 var ah0 = a0 >>> 13;
87029 var a1 = a[1] | 0;
87030 var al1 = a1 & 0x1fff;
87031 var ah1 = a1 >>> 13;
87032 var a2 = a[2] | 0;
87033 var al2 = a2 & 0x1fff;
87034 var ah2 = a2 >>> 13;
87035 var a3 = a[3] | 0;
87036 var al3 = a3 & 0x1fff;
87037 var ah3 = a3 >>> 13;
87038 var a4 = a[4] | 0;
87039 var al4 = a4 & 0x1fff;
87040 var ah4 = a4 >>> 13;
87041 var a5 = a[5] | 0;
87042 var al5 = a5 & 0x1fff;
87043 var ah5 = a5 >>> 13;
87044 var a6 = a[6] | 0;
87045 var al6 = a6 & 0x1fff;
87046 var ah6 = a6 >>> 13;
87047 var a7 = a[7] | 0;
87048 var al7 = a7 & 0x1fff;
87049 var ah7 = a7 >>> 13;
87050 var a8 = a[8] | 0;
87051 var al8 = a8 & 0x1fff;
87052 var ah8 = a8 >>> 13;
87053 var a9 = a[9] | 0;
87054 var al9 = a9 & 0x1fff;
87055 var ah9 = a9 >>> 13;
87056 var b0 = b[0] | 0;
87057 var bl0 = b0 & 0x1fff;
87058 var bh0 = b0 >>> 13;
87059 var b1 = b[1] | 0;
87060 var bl1 = b1 & 0x1fff;
87061 var bh1 = b1 >>> 13;
87062 var b2 = b[2] | 0;
87063 var bl2 = b2 & 0x1fff;
87064 var bh2 = b2 >>> 13;
87065 var b3 = b[3] | 0;
87066 var bl3 = b3 & 0x1fff;
87067 var bh3 = b3 >>> 13;
87068 var b4 = b[4] | 0;
87069 var bl4 = b4 & 0x1fff;
87070 var bh4 = b4 >>> 13;
87071 var b5 = b[5] | 0;
87072 var bl5 = b5 & 0x1fff;
87073 var bh5 = b5 >>> 13;
87074 var b6 = b[6] | 0;
87075 var bl6 = b6 & 0x1fff;
87076 var bh6 = b6 >>> 13;
87077 var b7 = b[7] | 0;
87078 var bl7 = b7 & 0x1fff;
87079 var bh7 = b7 >>> 13;
87080 var b8 = b[8] | 0;
87081 var bl8 = b8 & 0x1fff;
87082 var bh8 = b8 >>> 13;
87083 var b9 = b[9] | 0;
87084 var bl9 = b9 & 0x1fff;
87085 var bh9 = b9 >>> 13;
87086
87087 out.negative = self.negative ^ num.negative;
87088 out.length = 19;
87089 /* k = 0 */
87090 lo = Math.imul(al0, bl0);
87091 mid = Math.imul(al0, bh0);
87092 mid = (mid + Math.imul(ah0, bl0)) | 0;
87093 hi = Math.imul(ah0, bh0);
87094 var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87095 c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
87096 w0 &= 0x3ffffff;
87097 /* k = 1 */
87098 lo = Math.imul(al1, bl0);
87099 mid = Math.imul(al1, bh0);
87100 mid = (mid + Math.imul(ah1, bl0)) | 0;
87101 hi = Math.imul(ah1, bh0);
87102 lo = (lo + Math.imul(al0, bl1)) | 0;
87103 mid = (mid + Math.imul(al0, bh1)) | 0;
87104 mid = (mid + Math.imul(ah0, bl1)) | 0;
87105 hi = (hi + Math.imul(ah0, bh1)) | 0;
87106 var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87107 c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
87108 w1 &= 0x3ffffff;
87109 /* k = 2 */
87110 lo = Math.imul(al2, bl0);
87111 mid = Math.imul(al2, bh0);
87112 mid = (mid + Math.imul(ah2, bl0)) | 0;
87113 hi = Math.imul(ah2, bh0);
87114 lo = (lo + Math.imul(al1, bl1)) | 0;
87115 mid = (mid + Math.imul(al1, bh1)) | 0;
87116 mid = (mid + Math.imul(ah1, bl1)) | 0;
87117 hi = (hi + Math.imul(ah1, bh1)) | 0;
87118 lo = (lo + Math.imul(al0, bl2)) | 0;
87119 mid = (mid + Math.imul(al0, bh2)) | 0;
87120 mid = (mid + Math.imul(ah0, bl2)) | 0;
87121 hi = (hi + Math.imul(ah0, bh2)) | 0;
87122 var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87123 c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
87124 w2 &= 0x3ffffff;
87125 /* k = 3 */
87126 lo = Math.imul(al3, bl0);
87127 mid = Math.imul(al3, bh0);
87128 mid = (mid + Math.imul(ah3, bl0)) | 0;
87129 hi = Math.imul(ah3, bh0);
87130 lo = (lo + Math.imul(al2, bl1)) | 0;
87131 mid = (mid + Math.imul(al2, bh1)) | 0;
87132 mid = (mid + Math.imul(ah2, bl1)) | 0;
87133 hi = (hi + Math.imul(ah2, bh1)) | 0;
87134 lo = (lo + Math.imul(al1, bl2)) | 0;
87135 mid = (mid + Math.imul(al1, bh2)) | 0;
87136 mid = (mid + Math.imul(ah1, bl2)) | 0;
87137 hi = (hi + Math.imul(ah1, bh2)) | 0;
87138 lo = (lo + Math.imul(al0, bl3)) | 0;
87139 mid = (mid + Math.imul(al0, bh3)) | 0;
87140 mid = (mid + Math.imul(ah0, bl3)) | 0;
87141 hi = (hi + Math.imul(ah0, bh3)) | 0;
87142 var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87143 c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
87144 w3 &= 0x3ffffff;
87145 /* k = 4 */
87146 lo = Math.imul(al4, bl0);
87147 mid = Math.imul(al4, bh0);
87148 mid = (mid + Math.imul(ah4, bl0)) | 0;
87149 hi = Math.imul(ah4, bh0);
87150 lo = (lo + Math.imul(al3, bl1)) | 0;
87151 mid = (mid + Math.imul(al3, bh1)) | 0;
87152 mid = (mid + Math.imul(ah3, bl1)) | 0;
87153 hi = (hi + Math.imul(ah3, bh1)) | 0;
87154 lo = (lo + Math.imul(al2, bl2)) | 0;
87155 mid = (mid + Math.imul(al2, bh2)) | 0;
87156 mid = (mid + Math.imul(ah2, bl2)) | 0;
87157 hi = (hi + Math.imul(ah2, bh2)) | 0;
87158 lo = (lo + Math.imul(al1, bl3)) | 0;
87159 mid = (mid + Math.imul(al1, bh3)) | 0;
87160 mid = (mid + Math.imul(ah1, bl3)) | 0;
87161 hi = (hi + Math.imul(ah1, bh3)) | 0;
87162 lo = (lo + Math.imul(al0, bl4)) | 0;
87163 mid = (mid + Math.imul(al0, bh4)) | 0;
87164 mid = (mid + Math.imul(ah0, bl4)) | 0;
87165 hi = (hi + Math.imul(ah0, bh4)) | 0;
87166 var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87167 c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
87168 w4 &= 0x3ffffff;
87169 /* k = 5 */
87170 lo = Math.imul(al5, bl0);
87171 mid = Math.imul(al5, bh0);
87172 mid = (mid + Math.imul(ah5, bl0)) | 0;
87173 hi = Math.imul(ah5, bh0);
87174 lo = (lo + Math.imul(al4, bl1)) | 0;
87175 mid = (mid + Math.imul(al4, bh1)) | 0;
87176 mid = (mid + Math.imul(ah4, bl1)) | 0;
87177 hi = (hi + Math.imul(ah4, bh1)) | 0;
87178 lo = (lo + Math.imul(al3, bl2)) | 0;
87179 mid = (mid + Math.imul(al3, bh2)) | 0;
87180 mid = (mid + Math.imul(ah3, bl2)) | 0;
87181 hi = (hi + Math.imul(ah3, bh2)) | 0;
87182 lo = (lo + Math.imul(al2, bl3)) | 0;
87183 mid = (mid + Math.imul(al2, bh3)) | 0;
87184 mid = (mid + Math.imul(ah2, bl3)) | 0;
87185 hi = (hi + Math.imul(ah2, bh3)) | 0;
87186 lo = (lo + Math.imul(al1, bl4)) | 0;
87187 mid = (mid + Math.imul(al1, bh4)) | 0;
87188 mid = (mid + Math.imul(ah1, bl4)) | 0;
87189 hi = (hi + Math.imul(ah1, bh4)) | 0;
87190 lo = (lo + Math.imul(al0, bl5)) | 0;
87191 mid = (mid + Math.imul(al0, bh5)) | 0;
87192 mid = (mid + Math.imul(ah0, bl5)) | 0;
87193 hi = (hi + Math.imul(ah0, bh5)) | 0;
87194 var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87195 c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
87196 w5 &= 0x3ffffff;
87197 /* k = 6 */
87198 lo = Math.imul(al6, bl0);
87199 mid = Math.imul(al6, bh0);
87200 mid = (mid + Math.imul(ah6, bl0)) | 0;
87201 hi = Math.imul(ah6, bh0);
87202 lo = (lo + Math.imul(al5, bl1)) | 0;
87203 mid = (mid + Math.imul(al5, bh1)) | 0;
87204 mid = (mid + Math.imul(ah5, bl1)) | 0;
87205 hi = (hi + Math.imul(ah5, bh1)) | 0;
87206 lo = (lo + Math.imul(al4, bl2)) | 0;
87207 mid = (mid + Math.imul(al4, bh2)) | 0;
87208 mid = (mid + Math.imul(ah4, bl2)) | 0;
87209 hi = (hi + Math.imul(ah4, bh2)) | 0;
87210 lo = (lo + Math.imul(al3, bl3)) | 0;
87211 mid = (mid + Math.imul(al3, bh3)) | 0;
87212 mid = (mid + Math.imul(ah3, bl3)) | 0;
87213 hi = (hi + Math.imul(ah3, bh3)) | 0;
87214 lo = (lo + Math.imul(al2, bl4)) | 0;
87215 mid = (mid + Math.imul(al2, bh4)) | 0;
87216 mid = (mid + Math.imul(ah2, bl4)) | 0;
87217 hi = (hi + Math.imul(ah2, bh4)) | 0;
87218 lo = (lo + Math.imul(al1, bl5)) | 0;
87219 mid = (mid + Math.imul(al1, bh5)) | 0;
87220 mid = (mid + Math.imul(ah1, bl5)) | 0;
87221 hi = (hi + Math.imul(ah1, bh5)) | 0;
87222 lo = (lo + Math.imul(al0, bl6)) | 0;
87223 mid = (mid + Math.imul(al0, bh6)) | 0;
87224 mid = (mid + Math.imul(ah0, bl6)) | 0;
87225 hi = (hi + Math.imul(ah0, bh6)) | 0;
87226 var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87227 c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
87228 w6 &= 0x3ffffff;
87229 /* k = 7 */
87230 lo = Math.imul(al7, bl0);
87231 mid = Math.imul(al7, bh0);
87232 mid = (mid + Math.imul(ah7, bl0)) | 0;
87233 hi = Math.imul(ah7, bh0);
87234 lo = (lo + Math.imul(al6, bl1)) | 0;
87235 mid = (mid + Math.imul(al6, bh1)) | 0;
87236 mid = (mid + Math.imul(ah6, bl1)) | 0;
87237 hi = (hi + Math.imul(ah6, bh1)) | 0;
87238 lo = (lo + Math.imul(al5, bl2)) | 0;
87239 mid = (mid + Math.imul(al5, bh2)) | 0;
87240 mid = (mid + Math.imul(ah5, bl2)) | 0;
87241 hi = (hi + Math.imul(ah5, bh2)) | 0;
87242 lo = (lo + Math.imul(al4, bl3)) | 0;
87243 mid = (mid + Math.imul(al4, bh3)) | 0;
87244 mid = (mid + Math.imul(ah4, bl3)) | 0;
87245 hi = (hi + Math.imul(ah4, bh3)) | 0;
87246 lo = (lo + Math.imul(al3, bl4)) | 0;
87247 mid = (mid + Math.imul(al3, bh4)) | 0;
87248 mid = (mid + Math.imul(ah3, bl4)) | 0;
87249 hi = (hi + Math.imul(ah3, bh4)) | 0;
87250 lo = (lo + Math.imul(al2, bl5)) | 0;
87251 mid = (mid + Math.imul(al2, bh5)) | 0;
87252 mid = (mid + Math.imul(ah2, bl5)) | 0;
87253 hi = (hi + Math.imul(ah2, bh5)) | 0;
87254 lo = (lo + Math.imul(al1, bl6)) | 0;
87255 mid = (mid + Math.imul(al1, bh6)) | 0;
87256 mid = (mid + Math.imul(ah1, bl6)) | 0;
87257 hi = (hi + Math.imul(ah1, bh6)) | 0;
87258 lo = (lo + Math.imul(al0, bl7)) | 0;
87259 mid = (mid + Math.imul(al0, bh7)) | 0;
87260 mid = (mid + Math.imul(ah0, bl7)) | 0;
87261 hi = (hi + Math.imul(ah0, bh7)) | 0;
87262 var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87263 c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
87264 w7 &= 0x3ffffff;
87265 /* k = 8 */
87266 lo = Math.imul(al8, bl0);
87267 mid = Math.imul(al8, bh0);
87268 mid = (mid + Math.imul(ah8, bl0)) | 0;
87269 hi = Math.imul(ah8, bh0);
87270 lo = (lo + Math.imul(al7, bl1)) | 0;
87271 mid = (mid + Math.imul(al7, bh1)) | 0;
87272 mid = (mid + Math.imul(ah7, bl1)) | 0;
87273 hi = (hi + Math.imul(ah7, bh1)) | 0;
87274 lo = (lo + Math.imul(al6, bl2)) | 0;
87275 mid = (mid + Math.imul(al6, bh2)) | 0;
87276 mid = (mid + Math.imul(ah6, bl2)) | 0;
87277 hi = (hi + Math.imul(ah6, bh2)) | 0;
87278 lo = (lo + Math.imul(al5, bl3)) | 0;
87279 mid = (mid + Math.imul(al5, bh3)) | 0;
87280 mid = (mid + Math.imul(ah5, bl3)) | 0;
87281 hi = (hi + Math.imul(ah5, bh3)) | 0;
87282 lo = (lo + Math.imul(al4, bl4)) | 0;
87283 mid = (mid + Math.imul(al4, bh4)) | 0;
87284 mid = (mid + Math.imul(ah4, bl4)) | 0;
87285 hi = (hi + Math.imul(ah4, bh4)) | 0;
87286 lo = (lo + Math.imul(al3, bl5)) | 0;
87287 mid = (mid + Math.imul(al3, bh5)) | 0;
87288 mid = (mid + Math.imul(ah3, bl5)) | 0;
87289 hi = (hi + Math.imul(ah3, bh5)) | 0;
87290 lo = (lo + Math.imul(al2, bl6)) | 0;
87291 mid = (mid + Math.imul(al2, bh6)) | 0;
87292 mid = (mid + Math.imul(ah2, bl6)) | 0;
87293 hi = (hi + Math.imul(ah2, bh6)) | 0;
87294 lo = (lo + Math.imul(al1, bl7)) | 0;
87295 mid = (mid + Math.imul(al1, bh7)) | 0;
87296 mid = (mid + Math.imul(ah1, bl7)) | 0;
87297 hi = (hi + Math.imul(ah1, bh7)) | 0;
87298 lo = (lo + Math.imul(al0, bl8)) | 0;
87299 mid = (mid + Math.imul(al0, bh8)) | 0;
87300 mid = (mid + Math.imul(ah0, bl8)) | 0;
87301 hi = (hi + Math.imul(ah0, bh8)) | 0;
87302 var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87303 c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
87304 w8 &= 0x3ffffff;
87305 /* k = 9 */
87306 lo = Math.imul(al9, bl0);
87307 mid = Math.imul(al9, bh0);
87308 mid = (mid + Math.imul(ah9, bl0)) | 0;
87309 hi = Math.imul(ah9, bh0);
87310 lo = (lo + Math.imul(al8, bl1)) | 0;
87311 mid = (mid + Math.imul(al8, bh1)) | 0;
87312 mid = (mid + Math.imul(ah8, bl1)) | 0;
87313 hi = (hi + Math.imul(ah8, bh1)) | 0;
87314 lo = (lo + Math.imul(al7, bl2)) | 0;
87315 mid = (mid + Math.imul(al7, bh2)) | 0;
87316 mid = (mid + Math.imul(ah7, bl2)) | 0;
87317 hi = (hi + Math.imul(ah7, bh2)) | 0;
87318 lo = (lo + Math.imul(al6, bl3)) | 0;
87319 mid = (mid + Math.imul(al6, bh3)) | 0;
87320 mid = (mid + Math.imul(ah6, bl3)) | 0;
87321 hi = (hi + Math.imul(ah6, bh3)) | 0;
87322 lo = (lo + Math.imul(al5, bl4)) | 0;
87323 mid = (mid + Math.imul(al5, bh4)) | 0;
87324 mid = (mid + Math.imul(ah5, bl4)) | 0;
87325 hi = (hi + Math.imul(ah5, bh4)) | 0;
87326 lo = (lo + Math.imul(al4, bl5)) | 0;
87327 mid = (mid + Math.imul(al4, bh5)) | 0;
87328 mid = (mid + Math.imul(ah4, bl5)) | 0;
87329 hi = (hi + Math.imul(ah4, bh5)) | 0;
87330 lo = (lo + Math.imul(al3, bl6)) | 0;
87331 mid = (mid + Math.imul(al3, bh6)) | 0;
87332 mid = (mid + Math.imul(ah3, bl6)) | 0;
87333 hi = (hi + Math.imul(ah3, bh6)) | 0;
87334 lo = (lo + Math.imul(al2, bl7)) | 0;
87335 mid = (mid + Math.imul(al2, bh7)) | 0;
87336 mid = (mid + Math.imul(ah2, bl7)) | 0;
87337 hi = (hi + Math.imul(ah2, bh7)) | 0;
87338 lo = (lo + Math.imul(al1, bl8)) | 0;
87339 mid = (mid + Math.imul(al1, bh8)) | 0;
87340 mid = (mid + Math.imul(ah1, bl8)) | 0;
87341 hi = (hi + Math.imul(ah1, bh8)) | 0;
87342 lo = (lo + Math.imul(al0, bl9)) | 0;
87343 mid = (mid + Math.imul(al0, bh9)) | 0;
87344 mid = (mid + Math.imul(ah0, bl9)) | 0;
87345 hi = (hi + Math.imul(ah0, bh9)) | 0;
87346 var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87347 c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
87348 w9 &= 0x3ffffff;
87349 /* k = 10 */
87350 lo = Math.imul(al9, bl1);
87351 mid = Math.imul(al9, bh1);
87352 mid = (mid + Math.imul(ah9, bl1)) | 0;
87353 hi = Math.imul(ah9, bh1);
87354 lo = (lo + Math.imul(al8, bl2)) | 0;
87355 mid = (mid + Math.imul(al8, bh2)) | 0;
87356 mid = (mid + Math.imul(ah8, bl2)) | 0;
87357 hi = (hi + Math.imul(ah8, bh2)) | 0;
87358 lo = (lo + Math.imul(al7, bl3)) | 0;
87359 mid = (mid + Math.imul(al7, bh3)) | 0;
87360 mid = (mid + Math.imul(ah7, bl3)) | 0;
87361 hi = (hi + Math.imul(ah7, bh3)) | 0;
87362 lo = (lo + Math.imul(al6, bl4)) | 0;
87363 mid = (mid + Math.imul(al6, bh4)) | 0;
87364 mid = (mid + Math.imul(ah6, bl4)) | 0;
87365 hi = (hi + Math.imul(ah6, bh4)) | 0;
87366 lo = (lo + Math.imul(al5, bl5)) | 0;
87367 mid = (mid + Math.imul(al5, bh5)) | 0;
87368 mid = (mid + Math.imul(ah5, bl5)) | 0;
87369 hi = (hi + Math.imul(ah5, bh5)) | 0;
87370 lo = (lo + Math.imul(al4, bl6)) | 0;
87371 mid = (mid + Math.imul(al4, bh6)) | 0;
87372 mid = (mid + Math.imul(ah4, bl6)) | 0;
87373 hi = (hi + Math.imul(ah4, bh6)) | 0;
87374 lo = (lo + Math.imul(al3, bl7)) | 0;
87375 mid = (mid + Math.imul(al3, bh7)) | 0;
87376 mid = (mid + Math.imul(ah3, bl7)) | 0;
87377 hi = (hi + Math.imul(ah3, bh7)) | 0;
87378 lo = (lo + Math.imul(al2, bl8)) | 0;
87379 mid = (mid + Math.imul(al2, bh8)) | 0;
87380 mid = (mid + Math.imul(ah2, bl8)) | 0;
87381 hi = (hi + Math.imul(ah2, bh8)) | 0;
87382 lo = (lo + Math.imul(al1, bl9)) | 0;
87383 mid = (mid + Math.imul(al1, bh9)) | 0;
87384 mid = (mid + Math.imul(ah1, bl9)) | 0;
87385 hi = (hi + Math.imul(ah1, bh9)) | 0;
87386 var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87387 c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
87388 w10 &= 0x3ffffff;
87389 /* k = 11 */
87390 lo = Math.imul(al9, bl2);
87391 mid = Math.imul(al9, bh2);
87392 mid = (mid + Math.imul(ah9, bl2)) | 0;
87393 hi = Math.imul(ah9, bh2);
87394 lo = (lo + Math.imul(al8, bl3)) | 0;
87395 mid = (mid + Math.imul(al8, bh3)) | 0;
87396 mid = (mid + Math.imul(ah8, bl3)) | 0;
87397 hi = (hi + Math.imul(ah8, bh3)) | 0;
87398 lo = (lo + Math.imul(al7, bl4)) | 0;
87399 mid = (mid + Math.imul(al7, bh4)) | 0;
87400 mid = (mid + Math.imul(ah7, bl4)) | 0;
87401 hi = (hi + Math.imul(ah7, bh4)) | 0;
87402 lo = (lo + Math.imul(al6, bl5)) | 0;
87403 mid = (mid + Math.imul(al6, bh5)) | 0;
87404 mid = (mid + Math.imul(ah6, bl5)) | 0;
87405 hi = (hi + Math.imul(ah6, bh5)) | 0;
87406 lo = (lo + Math.imul(al5, bl6)) | 0;
87407 mid = (mid + Math.imul(al5, bh6)) | 0;
87408 mid = (mid + Math.imul(ah5, bl6)) | 0;
87409 hi = (hi + Math.imul(ah5, bh6)) | 0;
87410 lo = (lo + Math.imul(al4, bl7)) | 0;
87411 mid = (mid + Math.imul(al4, bh7)) | 0;
87412 mid = (mid + Math.imul(ah4, bl7)) | 0;
87413 hi = (hi + Math.imul(ah4, bh7)) | 0;
87414 lo = (lo + Math.imul(al3, bl8)) | 0;
87415 mid = (mid + Math.imul(al3, bh8)) | 0;
87416 mid = (mid + Math.imul(ah3, bl8)) | 0;
87417 hi = (hi + Math.imul(ah3, bh8)) | 0;
87418 lo = (lo + Math.imul(al2, bl9)) | 0;
87419 mid = (mid + Math.imul(al2, bh9)) | 0;
87420 mid = (mid + Math.imul(ah2, bl9)) | 0;
87421 hi = (hi + Math.imul(ah2, bh9)) | 0;
87422 var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87423 c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
87424 w11 &= 0x3ffffff;
87425 /* k = 12 */
87426 lo = Math.imul(al9, bl3);
87427 mid = Math.imul(al9, bh3);
87428 mid = (mid + Math.imul(ah9, bl3)) | 0;
87429 hi = Math.imul(ah9, bh3);
87430 lo = (lo + Math.imul(al8, bl4)) | 0;
87431 mid = (mid + Math.imul(al8, bh4)) | 0;
87432 mid = (mid + Math.imul(ah8, bl4)) | 0;
87433 hi = (hi + Math.imul(ah8, bh4)) | 0;
87434 lo = (lo + Math.imul(al7, bl5)) | 0;
87435 mid = (mid + Math.imul(al7, bh5)) | 0;
87436 mid = (mid + Math.imul(ah7, bl5)) | 0;
87437 hi = (hi + Math.imul(ah7, bh5)) | 0;
87438 lo = (lo + Math.imul(al6, bl6)) | 0;
87439 mid = (mid + Math.imul(al6, bh6)) | 0;
87440 mid = (mid + Math.imul(ah6, bl6)) | 0;
87441 hi = (hi + Math.imul(ah6, bh6)) | 0;
87442 lo = (lo + Math.imul(al5, bl7)) | 0;
87443 mid = (mid + Math.imul(al5, bh7)) | 0;
87444 mid = (mid + Math.imul(ah5, bl7)) | 0;
87445 hi = (hi + Math.imul(ah5, bh7)) | 0;
87446 lo = (lo + Math.imul(al4, bl8)) | 0;
87447 mid = (mid + Math.imul(al4, bh8)) | 0;
87448 mid = (mid + Math.imul(ah4, bl8)) | 0;
87449 hi = (hi + Math.imul(ah4, bh8)) | 0;
87450 lo = (lo + Math.imul(al3, bl9)) | 0;
87451 mid = (mid + Math.imul(al3, bh9)) | 0;
87452 mid = (mid + Math.imul(ah3, bl9)) | 0;
87453 hi = (hi + Math.imul(ah3, bh9)) | 0;
87454 var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87455 c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
87456 w12 &= 0x3ffffff;
87457 /* k = 13 */
87458 lo = Math.imul(al9, bl4);
87459 mid = Math.imul(al9, bh4);
87460 mid = (mid + Math.imul(ah9, bl4)) | 0;
87461 hi = Math.imul(ah9, bh4);
87462 lo = (lo + Math.imul(al8, bl5)) | 0;
87463 mid = (mid + Math.imul(al8, bh5)) | 0;
87464 mid = (mid + Math.imul(ah8, bl5)) | 0;
87465 hi = (hi + Math.imul(ah8, bh5)) | 0;
87466 lo = (lo + Math.imul(al7, bl6)) | 0;
87467 mid = (mid + Math.imul(al7, bh6)) | 0;
87468 mid = (mid + Math.imul(ah7, bl6)) | 0;
87469 hi = (hi + Math.imul(ah7, bh6)) | 0;
87470 lo = (lo + Math.imul(al6, bl7)) | 0;
87471 mid = (mid + Math.imul(al6, bh7)) | 0;
87472 mid = (mid + Math.imul(ah6, bl7)) | 0;
87473 hi = (hi + Math.imul(ah6, bh7)) | 0;
87474 lo = (lo + Math.imul(al5, bl8)) | 0;
87475 mid = (mid + Math.imul(al5, bh8)) | 0;
87476 mid = (mid + Math.imul(ah5, bl8)) | 0;
87477 hi = (hi + Math.imul(ah5, bh8)) | 0;
87478 lo = (lo + Math.imul(al4, bl9)) | 0;
87479 mid = (mid + Math.imul(al4, bh9)) | 0;
87480 mid = (mid + Math.imul(ah4, bl9)) | 0;
87481 hi = (hi + Math.imul(ah4, bh9)) | 0;
87482 var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87483 c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
87484 w13 &= 0x3ffffff;
87485 /* k = 14 */
87486 lo = Math.imul(al9, bl5);
87487 mid = Math.imul(al9, bh5);
87488 mid = (mid + Math.imul(ah9, bl5)) | 0;
87489 hi = Math.imul(ah9, bh5);
87490 lo = (lo + Math.imul(al8, bl6)) | 0;
87491 mid = (mid + Math.imul(al8, bh6)) | 0;
87492 mid = (mid + Math.imul(ah8, bl6)) | 0;
87493 hi = (hi + Math.imul(ah8, bh6)) | 0;
87494 lo = (lo + Math.imul(al7, bl7)) | 0;
87495 mid = (mid + Math.imul(al7, bh7)) | 0;
87496 mid = (mid + Math.imul(ah7, bl7)) | 0;
87497 hi = (hi + Math.imul(ah7, bh7)) | 0;
87498 lo = (lo + Math.imul(al6, bl8)) | 0;
87499 mid = (mid + Math.imul(al6, bh8)) | 0;
87500 mid = (mid + Math.imul(ah6, bl8)) | 0;
87501 hi = (hi + Math.imul(ah6, bh8)) | 0;
87502 lo = (lo + Math.imul(al5, bl9)) | 0;
87503 mid = (mid + Math.imul(al5, bh9)) | 0;
87504 mid = (mid + Math.imul(ah5, bl9)) | 0;
87505 hi = (hi + Math.imul(ah5, bh9)) | 0;
87506 var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87507 c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
87508 w14 &= 0x3ffffff;
87509 /* k = 15 */
87510 lo = Math.imul(al9, bl6);
87511 mid = Math.imul(al9, bh6);
87512 mid = (mid + Math.imul(ah9, bl6)) | 0;
87513 hi = Math.imul(ah9, bh6);
87514 lo = (lo + Math.imul(al8, bl7)) | 0;
87515 mid = (mid + Math.imul(al8, bh7)) | 0;
87516 mid = (mid + Math.imul(ah8, bl7)) | 0;
87517 hi = (hi + Math.imul(ah8, bh7)) | 0;
87518 lo = (lo + Math.imul(al7, bl8)) | 0;
87519 mid = (mid + Math.imul(al7, bh8)) | 0;
87520 mid = (mid + Math.imul(ah7, bl8)) | 0;
87521 hi = (hi + Math.imul(ah7, bh8)) | 0;
87522 lo = (lo + Math.imul(al6, bl9)) | 0;
87523 mid = (mid + Math.imul(al6, bh9)) | 0;
87524 mid = (mid + Math.imul(ah6, bl9)) | 0;
87525 hi = (hi + Math.imul(ah6, bh9)) | 0;
87526 var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87527 c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
87528 w15 &= 0x3ffffff;
87529 /* k = 16 */
87530 lo = Math.imul(al9, bl7);
87531 mid = Math.imul(al9, bh7);
87532 mid = (mid + Math.imul(ah9, bl7)) | 0;
87533 hi = Math.imul(ah9, bh7);
87534 lo = (lo + Math.imul(al8, bl8)) | 0;
87535 mid = (mid + Math.imul(al8, bh8)) | 0;
87536 mid = (mid + Math.imul(ah8, bl8)) | 0;
87537 hi = (hi + Math.imul(ah8, bh8)) | 0;
87538 lo = (lo + Math.imul(al7, bl9)) | 0;
87539 mid = (mid + Math.imul(al7, bh9)) | 0;
87540 mid = (mid + Math.imul(ah7, bl9)) | 0;
87541 hi = (hi + Math.imul(ah7, bh9)) | 0;
87542 var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87543 c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
87544 w16 &= 0x3ffffff;
87545 /* k = 17 */
87546 lo = Math.imul(al9, bl8);
87547 mid = Math.imul(al9, bh8);
87548 mid = (mid + Math.imul(ah9, bl8)) | 0;
87549 hi = Math.imul(ah9, bh8);
87550 lo = (lo + Math.imul(al8, bl9)) | 0;
87551 mid = (mid + Math.imul(al8, bh9)) | 0;
87552 mid = (mid + Math.imul(ah8, bl9)) | 0;
87553 hi = (hi + Math.imul(ah8, bh9)) | 0;
87554 var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87555 c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
87556 w17 &= 0x3ffffff;
87557 /* k = 18 */
87558 lo = Math.imul(al9, bl9);
87559 mid = Math.imul(al9, bh9);
87560 mid = (mid + Math.imul(ah9, bl9)) | 0;
87561 hi = Math.imul(ah9, bh9);
87562 var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87563 c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
87564 w18 &= 0x3ffffff;
87565 o[0] = w0;
87566 o[1] = w1;
87567 o[2] = w2;
87568 o[3] = w3;
87569 o[4] = w4;
87570 o[5] = w5;
87571 o[6] = w6;
87572 o[7] = w7;
87573 o[8] = w8;
87574 o[9] = w9;
87575 o[10] = w10;
87576 o[11] = w11;
87577 o[12] = w12;
87578 o[13] = w13;
87579 o[14] = w14;
87580 o[15] = w15;
87581 o[16] = w16;
87582 o[17] = w17;
87583 o[18] = w18;
87584 if (c !== 0) {
87585 o[19] = c;
87586 out.length++;
87587 }
87588 return out;
87589 };
87590
87591 // Polyfill comb
87592 if (!Math.imul) {
87593 comb10MulTo = smallMulTo;
87594 }
87595
87596 function bigMulTo (self, num, out) {
87597 out.negative = num.negative ^ self.negative;
87598 out.length = self.length + num.length;
87599
87600 var carry = 0;
87601 var hncarry = 0;
87602 for (var k = 0; k < out.length - 1; k++) {
87603 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
87604 // note that ncarry could be >= 0x3ffffff
87605 var ncarry = hncarry;
87606 hncarry = 0;
87607 var rword = carry & 0x3ffffff;
87608 var maxJ = Math.min(k, num.length - 1);
87609 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
87610 var i = k - j;
87611 var a = self.words[i] | 0;
87612 var b = num.words[j] | 0;
87613 var r = a * b;
87614
87615 var lo = r & 0x3ffffff;
87616 ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
87617 lo = (lo + rword) | 0;
87618 rword = lo & 0x3ffffff;
87619 ncarry = (ncarry + (lo >>> 26)) | 0;
87620
87621 hncarry += ncarry >>> 26;
87622 ncarry &= 0x3ffffff;
87623 }
87624 out.words[k] = rword;
87625 carry = ncarry;
87626 ncarry = hncarry;
87627 }
87628 if (carry !== 0) {
87629 out.words[k] = carry;
87630 } else {
87631 out.length--;
87632 }
87633
87634 return out.strip();
87635 }
87636
87637 function jumboMulTo (self, num, out) {
87638 var fftm = new FFTM();
87639 return fftm.mulp(self, num, out);
87640 }
87641
87642 BN.prototype.mulTo = function mulTo (num, out) {
87643 var res;
87644 var len = this.length + num.length;
87645 if (this.length === 10 && num.length === 10) {
87646 res = comb10MulTo(this, num, out);
87647 } else if (len < 63) {
87648 res = smallMulTo(this, num, out);
87649 } else if (len < 1024) {
87650 res = bigMulTo(this, num, out);
87651 } else {
87652 res = jumboMulTo(this, num, out);
87653 }
87654
87655 return res;
87656 };
87657
87658 // Cooley-Tukey algorithm for FFT
87659 // slightly revisited to rely on looping instead of recursion
87660
87661 function FFTM (x, y) {
87662 this.x = x;
87663 this.y = y;
87664 }
87665
87666 FFTM.prototype.makeRBT = function makeRBT (N) {
87667 var t = new Array(N);
87668 var l = BN.prototype._countBits(N) - 1;
87669 for (var i = 0; i < N; i++) {
87670 t[i] = this.revBin(i, l, N);
87671 }
87672
87673 return t;
87674 };
87675
87676 // Returns binary-reversed representation of `x`
87677 FFTM.prototype.revBin = function revBin (x, l, N) {
87678 if (x === 0 || x === N - 1) return x;
87679
87680 var rb = 0;
87681 for (var i = 0; i < l; i++) {
87682 rb |= (x & 1) << (l - i - 1);
87683 x >>= 1;
87684 }
87685
87686 return rb;
87687 };
87688
87689 // Performs "tweedling" phase, therefore 'emulating'
87690 // behaviour of the recursive algorithm
87691 FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
87692 for (var i = 0; i < N; i++) {
87693 rtws[i] = rws[rbt[i]];
87694 itws[i] = iws[rbt[i]];
87695 }
87696 };
87697
87698 FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
87699 this.permute(rbt, rws, iws, rtws, itws, N);
87700
87701 for (var s = 1; s < N; s <<= 1) {
87702 var l = s << 1;
87703
87704 var rtwdf = Math.cos(2 * Math.PI / l);
87705 var itwdf = Math.sin(2 * Math.PI / l);
87706
87707 for (var p = 0; p < N; p += l) {
87708 var rtwdf_ = rtwdf;
87709 var itwdf_ = itwdf;
87710
87711 for (var j = 0; j < s; j++) {
87712 var re = rtws[p + j];
87713 var ie = itws[p + j];
87714
87715 var ro = rtws[p + j + s];
87716 var io = itws[p + j + s];
87717
87718 var rx = rtwdf_ * ro - itwdf_ * io;
87719
87720 io = rtwdf_ * io + itwdf_ * ro;
87721 ro = rx;
87722
87723 rtws[p + j] = re + ro;
87724 itws[p + j] = ie + io;
87725
87726 rtws[p + j + s] = re - ro;
87727 itws[p + j + s] = ie - io;
87728
87729 /* jshint maxdepth : false */
87730 if (j !== l) {
87731 rx = rtwdf * rtwdf_ - itwdf * itwdf_;
87732
87733 itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
87734 rtwdf_ = rx;
87735 }
87736 }
87737 }
87738 }
87739 };
87740
87741 FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
87742 var N = Math.max(m, n) | 1;
87743 var odd = N & 1;
87744 var i = 0;
87745 for (N = N / 2 | 0; N; N = N >>> 1) {
87746 i++;
87747 }
87748
87749 return 1 << i + 1 + odd;
87750 };
87751
87752 FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
87753 if (N <= 1) return;
87754
87755 for (var i = 0; i < N / 2; i++) {
87756 var t = rws[i];
87757
87758 rws[i] = rws[N - i - 1];
87759 rws[N - i - 1] = t;
87760
87761 t = iws[i];
87762
87763 iws[i] = -iws[N - i - 1];
87764 iws[N - i - 1] = -t;
87765 }
87766 };
87767
87768 FFTM.prototype.normalize13b = function normalize13b (ws, N) {
87769 var carry = 0;
87770 for (var i = 0; i < N / 2; i++) {
87771 var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
87772 Math.round(ws[2 * i] / N) +
87773 carry;
87774
87775 ws[i] = w & 0x3ffffff;
87776
87777 if (w < 0x4000000) {
87778 carry = 0;
87779 } else {
87780 carry = w / 0x4000000 | 0;
87781 }
87782 }
87783
87784 return ws;
87785 };
87786
87787 FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
87788 var carry = 0;
87789 for (var i = 0; i < len; i++) {
87790 carry = carry + (ws[i] | 0);
87791
87792 rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
87793 rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
87794 }
87795
87796 // Pad with zeroes
87797 for (i = 2 * len; i < N; ++i) {
87798 rws[i] = 0;
87799 }
87800
87801 assert(carry === 0);
87802 assert((carry & ~0x1fff) === 0);
87803 };
87804
87805 FFTM.prototype.stub = function stub (N) {
87806 var ph = new Array(N);
87807 for (var i = 0; i < N; i++) {
87808 ph[i] = 0;
87809 }
87810
87811 return ph;
87812 };
87813
87814 FFTM.prototype.mulp = function mulp (x, y, out) {
87815 var N = 2 * this.guessLen13b(x.length, y.length);
87816
87817 var rbt = this.makeRBT(N);
87818
87819 var _ = this.stub(N);
87820
87821 var rws = new Array(N);
87822 var rwst = new Array(N);
87823 var iwst = new Array(N);
87824
87825 var nrws = new Array(N);
87826 var nrwst = new Array(N);
87827 var niwst = new Array(N);
87828
87829 var rmws = out.words;
87830 rmws.length = N;
87831
87832 this.convert13b(x.words, x.length, rws, N);
87833 this.convert13b(y.words, y.length, nrws, N);
87834
87835 this.transform(rws, _, rwst, iwst, N, rbt);
87836 this.transform(nrws, _, nrwst, niwst, N, rbt);
87837
87838 for (var i = 0; i < N; i++) {
87839 var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
87840 iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
87841 rwst[i] = rx;
87842 }
87843
87844 this.conjugate(rwst, iwst, N);
87845 this.transform(rwst, iwst, rmws, _, N, rbt);
87846 this.conjugate(rmws, _, N);
87847 this.normalize13b(rmws, N);
87848
87849 out.negative = x.negative ^ y.negative;
87850 out.length = x.length + y.length;
87851 return out.strip();
87852 };
87853
87854 // Multiply `this` by `num`
87855 BN.prototype.mul = function mul (num) {
87856 var out = new BN(null);
87857 out.words = new Array(this.length + num.length);
87858 return this.mulTo(num, out);
87859 };
87860
87861 // Multiply employing FFT
87862 BN.prototype.mulf = function mulf (num) {
87863 var out = new BN(null);
87864 out.words = new Array(this.length + num.length);
87865 return jumboMulTo(this, num, out);
87866 };
87867
87868 // In-place Multiplication
87869 BN.prototype.imul = function imul (num) {
87870 return this.clone().mulTo(num, this);
87871 };
87872
87873 BN.prototype.imuln = function imuln (num) {
87874 assert(typeof num === 'number');
87875 assert(num < 0x4000000);
87876
87877 // Carry
87878 var carry = 0;
87879 for (var i = 0; i < this.length; i++) {
87880 var w = (this.words[i] | 0) * num;
87881 var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
87882 carry >>= 26;
87883 carry += (w / 0x4000000) | 0;
87884 // NOTE: lo is 27bit maximum
87885 carry += lo >>> 26;
87886 this.words[i] = lo & 0x3ffffff;
87887 }
87888
87889 if (carry !== 0) {
87890 this.words[i] = carry;
87891 this.length++;
87892 }
87893
87894 return this;
87895 };
87896
87897 BN.prototype.muln = function muln (num) {
87898 return this.clone().imuln(num);
87899 };
87900
87901 // `this` * `this`
87902 BN.prototype.sqr = function sqr () {
87903 return this.mul(this);
87904 };
87905
87906 // `this` * `this` in-place
87907 BN.prototype.isqr = function isqr () {
87908 return this.imul(this.clone());
87909 };
87910
87911 // Math.pow(`this`, `num`)
87912 BN.prototype.pow = function pow (num) {
87913 var w = toBitArray(num);
87914 if (w.length === 0) return new BN(1);
87915
87916 // Skip leading zeroes
87917 var res = this;
87918 for (var i = 0; i < w.length; i++, res = res.sqr()) {
87919 if (w[i] !== 0) break;
87920 }
87921
87922 if (++i < w.length) {
87923 for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
87924 if (w[i] === 0) continue;
87925
87926 res = res.mul(q);
87927 }
87928 }
87929
87930 return res;
87931 };
87932
87933 // Shift-left in-place
87934 BN.prototype.iushln = function iushln (bits) {
87935 assert(typeof bits === 'number' && bits >= 0);
87936 var r = bits % 26;
87937 var s = (bits - r) / 26;
87938 var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
87939 var i;
87940
87941 if (r !== 0) {
87942 var carry = 0;
87943
87944 for (i = 0; i < this.length; i++) {
87945 var newCarry = this.words[i] & carryMask;
87946 var c = ((this.words[i] | 0) - newCarry) << r;
87947 this.words[i] = c | carry;
87948 carry = newCarry >>> (26 - r);
87949 }
87950
87951 if (carry) {
87952 this.words[i] = carry;
87953 this.length++;
87954 }
87955 }
87956
87957 if (s !== 0) {
87958 for (i = this.length - 1; i >= 0; i--) {
87959 this.words[i + s] = this.words[i];
87960 }
87961
87962 for (i = 0; i < s; i++) {
87963 this.words[i] = 0;
87964 }
87965
87966 this.length += s;
87967 }
87968
87969 return this.strip();
87970 };
87971
87972 BN.prototype.ishln = function ishln (bits) {
87973 // TODO(indutny): implement me
87974 assert(this.negative === 0);
87975 return this.iushln(bits);
87976 };
87977
87978 // Shift-right in-place
87979 // NOTE: `hint` is a lowest bit before trailing zeroes
87980 // NOTE: if `extended` is present - it will be filled with destroyed bits
87981 BN.prototype.iushrn = function iushrn (bits, hint, extended) {
87982 assert(typeof bits === 'number' && bits >= 0);
87983 var h;
87984 if (hint) {
87985 h = (hint - (hint % 26)) / 26;
87986 } else {
87987 h = 0;
87988 }
87989
87990 var r = bits % 26;
87991 var s = Math.min((bits - r) / 26, this.length);
87992 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
87993 var maskedWords = extended;
87994
87995 h -= s;
87996 h = Math.max(0, h);
87997
87998 // Extended mode, copy masked part
87999 if (maskedWords) {
88000 for (var i = 0; i < s; i++) {
88001 maskedWords.words[i] = this.words[i];
88002 }
88003 maskedWords.length = s;
88004 }
88005
88006 if (s === 0) {
88007 // No-op, we should not move anything at all
88008 } else if (this.length > s) {
88009 this.length -= s;
88010 for (i = 0; i < this.length; i++) {
88011 this.words[i] = this.words[i + s];
88012 }
88013 } else {
88014 this.words[0] = 0;
88015 this.length = 1;
88016 }
88017
88018 var carry = 0;
88019 for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
88020 var word = this.words[i] | 0;
88021 this.words[i] = (carry << (26 - r)) | (word >>> r);
88022 carry = word & mask;
88023 }
88024
88025 // Push carried bits as a mask
88026 if (maskedWords && carry !== 0) {
88027 maskedWords.words[maskedWords.length++] = carry;
88028 }
88029
88030 if (this.length === 0) {
88031 this.words[0] = 0;
88032 this.length = 1;
88033 }
88034
88035 return this.strip();
88036 };
88037
88038 BN.prototype.ishrn = function ishrn (bits, hint, extended) {
88039 // TODO(indutny): implement me
88040 assert(this.negative === 0);
88041 return this.iushrn(bits, hint, extended);
88042 };
88043
88044 // Shift-left
88045 BN.prototype.shln = function shln (bits) {
88046 return this.clone().ishln(bits);
88047 };
88048
88049 BN.prototype.ushln = function ushln (bits) {
88050 return this.clone().iushln(bits);
88051 };
88052
88053 // Shift-right
88054 BN.prototype.shrn = function shrn (bits) {
88055 return this.clone().ishrn(bits);
88056 };
88057
88058 BN.prototype.ushrn = function ushrn (bits) {
88059 return this.clone().iushrn(bits);
88060 };
88061
88062 // Test if n bit is set
88063 BN.prototype.testn = function testn (bit) {
88064 assert(typeof bit === 'number' && bit >= 0);
88065 var r = bit % 26;
88066 var s = (bit - r) / 26;
88067 var q = 1 << r;
88068
88069 // Fast case: bit is much higher than all existing words
88070 if (this.length <= s) return false;
88071
88072 // Check bit and return
88073 var w = this.words[s];
88074
88075 return !!(w & q);
88076 };
88077
88078 // Return only lowers bits of number (in-place)
88079 BN.prototype.imaskn = function imaskn (bits) {
88080 assert(typeof bits === 'number' && bits >= 0);
88081 var r = bits % 26;
88082 var s = (bits - r) / 26;
88083
88084 assert(this.negative === 0, 'imaskn works only with positive numbers');
88085
88086 if (this.length <= s) {
88087 return this;
88088 }
88089
88090 if (r !== 0) {
88091 s++;
88092 }
88093 this.length = Math.min(s, this.length);
88094
88095 if (r !== 0) {
88096 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
88097 this.words[this.length - 1] &= mask;
88098 }
88099
88100 return this.strip();
88101 };
88102
88103 // Return only lowers bits of number
88104 BN.prototype.maskn = function maskn (bits) {
88105 return this.clone().imaskn(bits);
88106 };
88107
88108 // Add plain number `num` to `this`
88109 BN.prototype.iaddn = function iaddn (num) {
88110 assert(typeof num === 'number');
88111 assert(num < 0x4000000);
88112 if (num < 0) return this.isubn(-num);
88113
88114 // Possible sign change
88115 if (this.negative !== 0) {
88116 if (this.length === 1 && (this.words[0] | 0) < num) {
88117 this.words[0] = num - (this.words[0] | 0);
88118 this.negative = 0;
88119 return this;
88120 }
88121
88122 this.negative = 0;
88123 this.isubn(num);
88124 this.negative = 1;
88125 return this;
88126 }
88127
88128 // Add without checks
88129 return this._iaddn(num);
88130 };
88131
88132 BN.prototype._iaddn = function _iaddn (num) {
88133 this.words[0] += num;
88134
88135 // Carry
88136 for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
88137 this.words[i] -= 0x4000000;
88138 if (i === this.length - 1) {
88139 this.words[i + 1] = 1;
88140 } else {
88141 this.words[i + 1]++;
88142 }
88143 }
88144 this.length = Math.max(this.length, i + 1);
88145
88146 return this;
88147 };
88148
88149 // Subtract plain number `num` from `this`
88150 BN.prototype.isubn = function isubn (num) {
88151 assert(typeof num === 'number');
88152 assert(num < 0x4000000);
88153 if (num < 0) return this.iaddn(-num);
88154
88155 if (this.negative !== 0) {
88156 this.negative = 0;
88157 this.iaddn(num);
88158 this.negative = 1;
88159 return this;
88160 }
88161
88162 this.words[0] -= num;
88163
88164 if (this.length === 1 && this.words[0] < 0) {
88165 this.words[0] = -this.words[0];
88166 this.negative = 1;
88167 } else {
88168 // Carry
88169 for (var i = 0; i < this.length && this.words[i] < 0; i++) {
88170 this.words[i] += 0x4000000;
88171 this.words[i + 1] -= 1;
88172 }
88173 }
88174
88175 return this.strip();
88176 };
88177
88178 BN.prototype.addn = function addn (num) {
88179 return this.clone().iaddn(num);
88180 };
88181
88182 BN.prototype.subn = function subn (num) {
88183 return this.clone().isubn(num);
88184 };
88185
88186 BN.prototype.iabs = function iabs () {
88187 this.negative = 0;
88188
88189 return this;
88190 };
88191
88192 BN.prototype.abs = function abs () {
88193 return this.clone().iabs();
88194 };
88195
88196 BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
88197 var len = num.length + shift;
88198 var i;
88199
88200 this._expand(len);
88201
88202 var w;
88203 var carry = 0;
88204 for (i = 0; i < num.length; i++) {
88205 w = (this.words[i + shift] | 0) + carry;
88206 var right = (num.words[i] | 0) * mul;
88207 w -= right & 0x3ffffff;
88208 carry = (w >> 26) - ((right / 0x4000000) | 0);
88209 this.words[i + shift] = w & 0x3ffffff;
88210 }
88211 for (; i < this.length - shift; i++) {
88212 w = (this.words[i + shift] | 0) + carry;
88213 carry = w >> 26;
88214 this.words[i + shift] = w & 0x3ffffff;
88215 }
88216
88217 if (carry === 0) return this.strip();
88218
88219 // Subtraction overflow
88220 assert(carry === -1);
88221 carry = 0;
88222 for (i = 0; i < this.length; i++) {
88223 w = -(this.words[i] | 0) + carry;
88224 carry = w >> 26;
88225 this.words[i] = w & 0x3ffffff;
88226 }
88227 this.negative = 1;
88228
88229 return this.strip();
88230 };
88231
88232 BN.prototype._wordDiv = function _wordDiv (num, mode) {
88233 var shift = this.length - num.length;
88234
88235 var a = this.clone();
88236 var b = num;
88237
88238 // Normalize
88239 var bhi = b.words[b.length - 1] | 0;
88240 var bhiBits = this._countBits(bhi);
88241 shift = 26 - bhiBits;
88242 if (shift !== 0) {
88243 b = b.ushln(shift);
88244 a.iushln(shift);
88245 bhi = b.words[b.length - 1] | 0;
88246 }
88247
88248 // Initialize quotient
88249 var m = a.length - b.length;
88250 var q;
88251
88252 if (mode !== 'mod') {
88253 q = new BN(null);
88254 q.length = m + 1;
88255 q.words = new Array(q.length);
88256 for (var i = 0; i < q.length; i++) {
88257 q.words[i] = 0;
88258 }
88259 }
88260
88261 var diff = a.clone()._ishlnsubmul(b, 1, m);
88262 if (diff.negative === 0) {
88263 a = diff;
88264 if (q) {
88265 q.words[m] = 1;
88266 }
88267 }
88268
88269 for (var j = m - 1; j >= 0; j--) {
88270 var qj = (a.words[b.length + j] | 0) * 0x4000000 +
88271 (a.words[b.length + j - 1] | 0);
88272
88273 // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
88274 // (0x7ffffff)
88275 qj = Math.min((qj / bhi) | 0, 0x3ffffff);
88276
88277 a._ishlnsubmul(b, qj, j);
88278 while (a.negative !== 0) {
88279 qj--;
88280 a.negative = 0;
88281 a._ishlnsubmul(b, 1, j);
88282 if (!a.isZero()) {
88283 a.negative ^= 1;
88284 }
88285 }
88286 if (q) {
88287 q.words[j] = qj;
88288 }
88289 }
88290 if (q) {
88291 q.strip();
88292 }
88293 a.strip();
88294
88295 // Denormalize
88296 if (mode !== 'div' && shift !== 0) {
88297 a.iushrn(shift);
88298 }
88299
88300 return {
88301 div: q || null,
88302 mod: a
88303 };
88304 };
88305
88306 // NOTE: 1) `mode` can be set to `mod` to request mod only,
88307 // to `div` to request div only, or be absent to
88308 // request both div & mod
88309 // 2) `positive` is true if unsigned mod is requested
88310 BN.prototype.divmod = function divmod (num, mode, positive) {
88311 assert(!num.isZero());
88312
88313 if (this.isZero()) {
88314 return {
88315 div: new BN(0),
88316 mod: new BN(0)
88317 };
88318 }
88319
88320 var div, mod, res;
88321 if (this.negative !== 0 && num.negative === 0) {
88322 res = this.neg().divmod(num, mode);
88323
88324 if (mode !== 'mod') {
88325 div = res.div.neg();
88326 }
88327
88328 if (mode !== 'div') {
88329 mod = res.mod.neg();
88330 if (positive && mod.negative !== 0) {
88331 mod.iadd(num);
88332 }
88333 }
88334
88335 return {
88336 div: div,
88337 mod: mod
88338 };
88339 }
88340
88341 if (this.negative === 0 && num.negative !== 0) {
88342 res = this.divmod(num.neg(), mode);
88343
88344 if (mode !== 'mod') {
88345 div = res.div.neg();
88346 }
88347
88348 return {
88349 div: div,
88350 mod: res.mod
88351 };
88352 }
88353
88354 if ((this.negative & num.negative) !== 0) {
88355 res = this.neg().divmod(num.neg(), mode);
88356
88357 if (mode !== 'div') {
88358 mod = res.mod.neg();
88359 if (positive && mod.negative !== 0) {
88360 mod.isub(num);
88361 }
88362 }
88363
88364 return {
88365 div: res.div,
88366 mod: mod
88367 };
88368 }
88369
88370 // Both numbers are positive at this point
88371
88372 // Strip both numbers to approximate shift value
88373 if (num.length > this.length || this.cmp(num) < 0) {
88374 return {
88375 div: new BN(0),
88376 mod: this
88377 };
88378 }
88379
88380 // Very short reduction
88381 if (num.length === 1) {
88382 if (mode === 'div') {
88383 return {
88384 div: this.divn(num.words[0]),
88385 mod: null
88386 };
88387 }
88388
88389 if (mode === 'mod') {
88390 return {
88391 div: null,
88392 mod: new BN(this.modn(num.words[0]))
88393 };
88394 }
88395
88396 return {
88397 div: this.divn(num.words[0]),
88398 mod: new BN(this.modn(num.words[0]))
88399 };
88400 }
88401
88402 return this._wordDiv(num, mode);
88403 };
88404
88405 // Find `this` / `num`
88406 BN.prototype.div = function div (num) {
88407 return this.divmod(num, 'div', false).div;
88408 };
88409
88410 // Find `this` % `num`
88411 BN.prototype.mod = function mod (num) {
88412 return this.divmod(num, 'mod', false).mod;
88413 };
88414
88415 BN.prototype.umod = function umod (num) {
88416 return this.divmod(num, 'mod', true).mod;
88417 };
88418
88419 // Find Round(`this` / `num`)
88420 BN.prototype.divRound = function divRound (num) {
88421 var dm = this.divmod(num);
88422
88423 // Fast case - exact division
88424 if (dm.mod.isZero()) return dm.div;
88425
88426 var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
88427
88428 var half = num.ushrn(1);
88429 var r2 = num.andln(1);
88430 var cmp = mod.cmp(half);
88431
88432 // Round down
88433 if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
88434
88435 // Round up
88436 return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
88437 };
88438
88439 BN.prototype.modn = function modn (num) {
88440 assert(num <= 0x3ffffff);
88441 var p = (1 << 26) % num;
88442
88443 var acc = 0;
88444 for (var i = this.length - 1; i >= 0; i--) {
88445 acc = (p * acc + (this.words[i] | 0)) % num;
88446 }
88447
88448 return acc;
88449 };
88450
88451 // In-place division by number
88452 BN.prototype.idivn = function idivn (num) {
88453 assert(num <= 0x3ffffff);
88454
88455 var carry = 0;
88456 for (var i = this.length - 1; i >= 0; i--) {
88457 var w = (this.words[i] | 0) + carry * 0x4000000;
88458 this.words[i] = (w / num) | 0;
88459 carry = w % num;
88460 }
88461
88462 return this.strip();
88463 };
88464
88465 BN.prototype.divn = function divn (num) {
88466 return this.clone().idivn(num);
88467 };
88468
88469 BN.prototype.egcd = function egcd (p) {
88470 assert(p.negative === 0);
88471 assert(!p.isZero());
88472
88473 var x = this;
88474 var y = p.clone();
88475
88476 if (x.negative !== 0) {
88477 x = x.umod(p);
88478 } else {
88479 x = x.clone();
88480 }
88481
88482 // A * x + B * y = x
88483 var A = new BN(1);
88484 var B = new BN(0);
88485
88486 // C * x + D * y = y
88487 var C = new BN(0);
88488 var D = new BN(1);
88489
88490 var g = 0;
88491
88492 while (x.isEven() && y.isEven()) {
88493 x.iushrn(1);
88494 y.iushrn(1);
88495 ++g;
88496 }
88497
88498 var yp = y.clone();
88499 var xp = x.clone();
88500
88501 while (!x.isZero()) {
88502 for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
88503 if (i > 0) {
88504 x.iushrn(i);
88505 while (i-- > 0) {
88506 if (A.isOdd() || B.isOdd()) {
88507 A.iadd(yp);
88508 B.isub(xp);
88509 }
88510
88511 A.iushrn(1);
88512 B.iushrn(1);
88513 }
88514 }
88515
88516 for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
88517 if (j > 0) {
88518 y.iushrn(j);
88519 while (j-- > 0) {
88520 if (C.isOdd() || D.isOdd()) {
88521 C.iadd(yp);
88522 D.isub(xp);
88523 }
88524
88525 C.iushrn(1);
88526 D.iushrn(1);
88527 }
88528 }
88529
88530 if (x.cmp(y) >= 0) {
88531 x.isub(y);
88532 A.isub(C);
88533 B.isub(D);
88534 } else {
88535 y.isub(x);
88536 C.isub(A);
88537 D.isub(B);
88538 }
88539 }
88540
88541 return {
88542 a: C,
88543 b: D,
88544 gcd: y.iushln(g)
88545 };
88546 };
88547
88548 // This is reduced incarnation of the binary EEA
88549 // above, designated to invert members of the
88550 // _prime_ fields F(p) at a maximal speed
88551 BN.prototype._invmp = function _invmp (p) {
88552 assert(p.negative === 0);
88553 assert(!p.isZero());
88554
88555 var a = this;
88556 var b = p.clone();
88557
88558 if (a.negative !== 0) {
88559 a = a.umod(p);
88560 } else {
88561 a = a.clone();
88562 }
88563
88564 var x1 = new BN(1);
88565 var x2 = new BN(0);
88566
88567 var delta = b.clone();
88568
88569 while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
88570 for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
88571 if (i > 0) {
88572 a.iushrn(i);
88573 while (i-- > 0) {
88574 if (x1.isOdd()) {
88575 x1.iadd(delta);
88576 }
88577
88578 x1.iushrn(1);
88579 }
88580 }
88581
88582 for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
88583 if (j > 0) {
88584 b.iushrn(j);
88585 while (j-- > 0) {
88586 if (x2.isOdd()) {
88587 x2.iadd(delta);
88588 }
88589
88590 x2.iushrn(1);
88591 }
88592 }
88593
88594 if (a.cmp(b) >= 0) {
88595 a.isub(b);
88596 x1.isub(x2);
88597 } else {
88598 b.isub(a);
88599 x2.isub(x1);
88600 }
88601 }
88602
88603 var res;
88604 if (a.cmpn(1) === 0) {
88605 res = x1;
88606 } else {
88607 res = x2;
88608 }
88609
88610 if (res.cmpn(0) < 0) {
88611 res.iadd(p);
88612 }
88613
88614 return res;
88615 };
88616
88617 BN.prototype.gcd = function gcd (num) {
88618 if (this.isZero()) return num.abs();
88619 if (num.isZero()) return this.abs();
88620
88621 var a = this.clone();
88622 var b = num.clone();
88623 a.negative = 0;
88624 b.negative = 0;
88625
88626 // Remove common factor of two
88627 for (var shift = 0; a.isEven() && b.isEven(); shift++) {
88628 a.iushrn(1);
88629 b.iushrn(1);
88630 }
88631
88632 do {
88633 while (a.isEven()) {
88634 a.iushrn(1);
88635 }
88636 while (b.isEven()) {
88637 b.iushrn(1);
88638 }
88639
88640 var r = a.cmp(b);
88641 if (r < 0) {
88642 // Swap `a` and `b` to make `a` always bigger than `b`
88643 var t = a;
88644 a = b;
88645 b = t;
88646 } else if (r === 0 || b.cmpn(1) === 0) {
88647 break;
88648 }
88649
88650 a.isub(b);
88651 } while (true);
88652
88653 return b.iushln(shift);
88654 };
88655
88656 // Invert number in the field F(num)
88657 BN.prototype.invm = function invm (num) {
88658 return this.egcd(num).a.umod(num);
88659 };
88660
88661 BN.prototype.isEven = function isEven () {
88662 return (this.words[0] & 1) === 0;
88663 };
88664
88665 BN.prototype.isOdd = function isOdd () {
88666 return (this.words[0] & 1) === 1;
88667 };
88668
88669 // And first word and num
88670 BN.prototype.andln = function andln (num) {
88671 return this.words[0] & num;
88672 };
88673
88674 // Increment at the bit position in-line
88675 BN.prototype.bincn = function bincn (bit) {
88676 assert(typeof bit === 'number');
88677 var r = bit % 26;
88678 var s = (bit - r) / 26;
88679 var q = 1 << r;
88680
88681 // Fast case: bit is much higher than all existing words
88682 if (this.length <= s) {
88683 this._expand(s + 1);
88684 this.words[s] |= q;
88685 return this;
88686 }
88687
88688 // Add bit and propagate, if needed
88689 var carry = q;
88690 for (var i = s; carry !== 0 && i < this.length; i++) {
88691 var w = this.words[i] | 0;
88692 w += carry;
88693 carry = w >>> 26;
88694 w &= 0x3ffffff;
88695 this.words[i] = w;
88696 }
88697 if (carry !== 0) {
88698 this.words[i] = carry;
88699 this.length++;
88700 }
88701 return this;
88702 };
88703
88704 BN.prototype.isZero = function isZero () {
88705 return this.length === 1 && this.words[0] === 0;
88706 };
88707
88708 BN.prototype.cmpn = function cmpn (num) {
88709 var negative = num < 0;
88710
88711 if (this.negative !== 0 && !negative) return -1;
88712 if (this.negative === 0 && negative) return 1;
88713
88714 this.strip();
88715
88716 var res;
88717 if (this.length > 1) {
88718 res = 1;
88719 } else {
88720 if (negative) {
88721 num = -num;
88722 }
88723
88724 assert(num <= 0x3ffffff, 'Number is too big');
88725
88726 var w = this.words[0] | 0;
88727 res = w === num ? 0 : w < num ? -1 : 1;
88728 }
88729 if (this.negative !== 0) return -res | 0;
88730 return res;
88731 };
88732
88733 // Compare two numbers and return:
88734 // 1 - if `this` > `num`
88735 // 0 - if `this` == `num`
88736 // -1 - if `this` < `num`
88737 BN.prototype.cmp = function cmp (num) {
88738 if (this.negative !== 0 && num.negative === 0) return -1;
88739 if (this.negative === 0 && num.negative !== 0) return 1;
88740
88741 var res = this.ucmp(num);
88742 if (this.negative !== 0) return -res | 0;
88743 return res;
88744 };
88745
88746 // Unsigned comparison
88747 BN.prototype.ucmp = function ucmp (num) {
88748 // At this point both numbers have the same sign
88749 if (this.length > num.length) return 1;
88750 if (this.length < num.length) return -1;
88751
88752 var res = 0;
88753 for (var i = this.length - 1; i >= 0; i--) {
88754 var a = this.words[i] | 0;
88755 var b = num.words[i] | 0;
88756
88757 if (a === b) continue;
88758 if (a < b) {
88759 res = -1;
88760 } else if (a > b) {
88761 res = 1;
88762 }
88763 break;
88764 }
88765 return res;
88766 };
88767
88768 BN.prototype.gtn = function gtn (num) {
88769 return this.cmpn(num) === 1;
88770 };
88771
88772 BN.prototype.gt = function gt (num) {
88773 return this.cmp(num) === 1;
88774 };
88775
88776 BN.prototype.gten = function gten (num) {
88777 return this.cmpn(num) >= 0;
88778 };
88779
88780 BN.prototype.gte = function gte (num) {
88781 return this.cmp(num) >= 0;
88782 };
88783
88784 BN.prototype.ltn = function ltn (num) {
88785 return this.cmpn(num) === -1;
88786 };
88787
88788 BN.prototype.lt = function lt (num) {
88789 return this.cmp(num) === -1;
88790 };
88791
88792 BN.prototype.lten = function lten (num) {
88793 return this.cmpn(num) <= 0;
88794 };
88795
88796 BN.prototype.lte = function lte (num) {
88797 return this.cmp(num) <= 0;
88798 };
88799
88800 BN.prototype.eqn = function eqn (num) {
88801 return this.cmpn(num) === 0;
88802 };
88803
88804 BN.prototype.eq = function eq (num) {
88805 return this.cmp(num) === 0;
88806 };
88807
88808 //
88809 // A reduce context, could be using montgomery or something better, depending
88810 // on the `m` itself.
88811 //
88812 BN.red = function red (num) {
88813 return new Red(num);
88814 };
88815
88816 BN.prototype.toRed = function toRed (ctx) {
88817 assert(!this.red, 'Already a number in reduction context');
88818 assert(this.negative === 0, 'red works only with positives');
88819 return ctx.convertTo(this)._forceRed(ctx);
88820 };
88821
88822 BN.prototype.fromRed = function fromRed () {
88823 assert(this.red, 'fromRed works only with numbers in reduction context');
88824 return this.red.convertFrom(this);
88825 };
88826
88827 BN.prototype._forceRed = function _forceRed (ctx) {
88828 this.red = ctx;
88829 return this;
88830 };
88831
88832 BN.prototype.forceRed = function forceRed (ctx) {
88833 assert(!this.red, 'Already a number in reduction context');
88834 return this._forceRed(ctx);
88835 };
88836
88837 BN.prototype.redAdd = function redAdd (num) {
88838 assert(this.red, 'redAdd works only with red numbers');
88839 return this.red.add(this, num);
88840 };
88841
88842 BN.prototype.redIAdd = function redIAdd (num) {
88843 assert(this.red, 'redIAdd works only with red numbers');
88844 return this.red.iadd(this, num);
88845 };
88846
88847 BN.prototype.redSub = function redSub (num) {
88848 assert(this.red, 'redSub works only with red numbers');
88849 return this.red.sub(this, num);
88850 };
88851
88852 BN.prototype.redISub = function redISub (num) {
88853 assert(this.red, 'redISub works only with red numbers');
88854 return this.red.isub(this, num);
88855 };
88856
88857 BN.prototype.redShl = function redShl (num) {
88858 assert(this.red, 'redShl works only with red numbers');
88859 return this.red.shl(this, num);
88860 };
88861
88862 BN.prototype.redMul = function redMul (num) {
88863 assert(this.red, 'redMul works only with red numbers');
88864 this.red._verify2(this, num);
88865 return this.red.mul(this, num);
88866 };
88867
88868 BN.prototype.redIMul = function redIMul (num) {
88869 assert(this.red, 'redMul works only with red numbers');
88870 this.red._verify2(this, num);
88871 return this.red.imul(this, num);
88872 };
88873
88874 BN.prototype.redSqr = function redSqr () {
88875 assert(this.red, 'redSqr works only with red numbers');
88876 this.red._verify1(this);
88877 return this.red.sqr(this);
88878 };
88879
88880 BN.prototype.redISqr = function redISqr () {
88881 assert(this.red, 'redISqr works only with red numbers');
88882 this.red._verify1(this);
88883 return this.red.isqr(this);
88884 };
88885
88886 // Square root over p
88887 BN.prototype.redSqrt = function redSqrt () {
88888 assert(this.red, 'redSqrt works only with red numbers');
88889 this.red._verify1(this);
88890 return this.red.sqrt(this);
88891 };
88892
88893 BN.prototype.redInvm = function redInvm () {
88894 assert(this.red, 'redInvm works only with red numbers');
88895 this.red._verify1(this);
88896 return this.red.invm(this);
88897 };
88898
88899 // Return negative clone of `this` % `red modulo`
88900 BN.prototype.redNeg = function redNeg () {
88901 assert(this.red, 'redNeg works only with red numbers');
88902 this.red._verify1(this);
88903 return this.red.neg(this);
88904 };
88905
88906 BN.prototype.redPow = function redPow (num) {
88907 assert(this.red && !num.red, 'redPow(normalNum)');
88908 this.red._verify1(this);
88909 return this.red.pow(this, num);
88910 };
88911
88912 // Prime numbers with efficient reduction
88913 var primes = {
88914 k256: null,
88915 p224: null,
88916 p192: null,
88917 p25519: null
88918 };
88919
88920 // Pseudo-Mersenne prime
88921 function MPrime (name, p) {
88922 // P = 2 ^ N - K
88923 this.name = name;
88924 this.p = new BN(p, 16);
88925 this.n = this.p.bitLength();
88926 this.k = new BN(1).iushln(this.n).isub(this.p);
88927
88928 this.tmp = this._tmp();
88929 }
88930
88931 MPrime.prototype._tmp = function _tmp () {
88932 var tmp = new BN(null);
88933 tmp.words = new Array(Math.ceil(this.n / 13));
88934 return tmp;
88935 };
88936
88937 MPrime.prototype.ireduce = function ireduce (num) {
88938 // Assumes that `num` is less than `P^2`
88939 // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
88940 var r = num;
88941 var rlen;
88942
88943 do {
88944 this.split(r, this.tmp);
88945 r = this.imulK(r);
88946 r = r.iadd(this.tmp);
88947 rlen = r.bitLength();
88948 } while (rlen > this.n);
88949
88950 var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
88951 if (cmp === 0) {
88952 r.words[0] = 0;
88953 r.length = 1;
88954 } else if (cmp > 0) {
88955 r.isub(this.p);
88956 } else {
88957 r.strip();
88958 }
88959
88960 return r;
88961 };
88962
88963 MPrime.prototype.split = function split (input, out) {
88964 input.iushrn(this.n, 0, out);
88965 };
88966
88967 MPrime.prototype.imulK = function imulK (num) {
88968 return num.imul(this.k);
88969 };
88970
88971 function K256 () {
88972 MPrime.call(
88973 this,
88974 'k256',
88975 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
88976 }
88977 inherits(K256, MPrime);
88978
88979 K256.prototype.split = function split (input, output) {
88980 // 256 = 9 * 26 + 22
88981 var mask = 0x3fffff;
88982
88983 var outLen = Math.min(input.length, 9);
88984 for (var i = 0; i < outLen; i++) {
88985 output.words[i] = input.words[i];
88986 }
88987 output.length = outLen;
88988
88989 if (input.length <= 9) {
88990 input.words[0] = 0;
88991 input.length = 1;
88992 return;
88993 }
88994
88995 // Shift by 9 limbs
88996 var prev = input.words[9];
88997 output.words[output.length++] = prev & mask;
88998
88999 for (i = 10; i < input.length; i++) {
89000 var next = input.words[i] | 0;
89001 input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
89002 prev = next;
89003 }
89004 prev >>>= 22;
89005 input.words[i - 10] = prev;
89006 if (prev === 0 && input.length > 10) {
89007 input.length -= 10;
89008 } else {
89009 input.length -= 9;
89010 }
89011 };
89012
89013 K256.prototype.imulK = function imulK (num) {
89014 // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
89015 num.words[num.length] = 0;
89016 num.words[num.length + 1] = 0;
89017 num.length += 2;
89018
89019 // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
89020 var lo = 0;
89021 for (var i = 0; i < num.length; i++) {
89022 var w = num.words[i] | 0;
89023 lo += w * 0x3d1;
89024 num.words[i] = lo & 0x3ffffff;
89025 lo = w * 0x40 + ((lo / 0x4000000) | 0);
89026 }
89027
89028 // Fast length reduction
89029 if (num.words[num.length - 1] === 0) {
89030 num.length--;
89031 if (num.words[num.length - 1] === 0) {
89032 num.length--;
89033 }
89034 }
89035 return num;
89036 };
89037
89038 function P224 () {
89039 MPrime.call(
89040 this,
89041 'p224',
89042 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
89043 }
89044 inherits(P224, MPrime);
89045
89046 function P192 () {
89047 MPrime.call(
89048 this,
89049 'p192',
89050 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
89051 }
89052 inherits(P192, MPrime);
89053
89054 function P25519 () {
89055 // 2 ^ 255 - 19
89056 MPrime.call(
89057 this,
89058 '25519',
89059 '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
89060 }
89061 inherits(P25519, MPrime);
89062
89063 P25519.prototype.imulK = function imulK (num) {
89064 // K = 0x13
89065 var carry = 0;
89066 for (var i = 0; i < num.length; i++) {
89067 var hi = (num.words[i] | 0) * 0x13 + carry;
89068 var lo = hi & 0x3ffffff;
89069 hi >>>= 26;
89070
89071 num.words[i] = lo;
89072 carry = hi;
89073 }
89074 if (carry !== 0) {
89075 num.words[num.length++] = carry;
89076 }
89077 return num;
89078 };
89079
89080 // Exported mostly for testing purposes, use plain name instead
89081 BN._prime = function prime (name) {
89082 // Cached version of prime
89083 if (primes[name]) return primes[name];
89084
89085 var prime;
89086 if (name === 'k256') {
89087 prime = new K256();
89088 } else if (name === 'p224') {
89089 prime = new P224();
89090 } else if (name === 'p192') {
89091 prime = new P192();
89092 } else if (name === 'p25519') {
89093 prime = new P25519();
89094 } else {
89095 throw new Error('Unknown prime ' + name);
89096 }
89097 primes[name] = prime;
89098
89099 return prime;
89100 };
89101
89102 //
89103 // Base reduction engine
89104 //
89105 function Red (m) {
89106 if (typeof m === 'string') {
89107 var prime = BN._prime(m);
89108 this.m = prime.p;
89109 this.prime = prime;
89110 } else {
89111 assert(m.gtn(1), 'modulus must be greater than 1');
89112 this.m = m;
89113 this.prime = null;
89114 }
89115 }
89116
89117 Red.prototype._verify1 = function _verify1 (a) {
89118 assert(a.negative === 0, 'red works only with positives');
89119 assert(a.red, 'red works only with red numbers');
89120 };
89121
89122 Red.prototype._verify2 = function _verify2 (a, b) {
89123 assert((a.negative | b.negative) === 0, 'red works only with positives');
89124 assert(a.red && a.red === b.red,
89125 'red works only with red numbers');
89126 };
89127
89128 Red.prototype.imod = function imod (a) {
89129 if (this.prime) return this.prime.ireduce(a)._forceRed(this);
89130 return a.umod(this.m)._forceRed(this);
89131 };
89132
89133 Red.prototype.neg = function neg (a) {
89134 if (a.isZero()) {
89135 return a.clone();
89136 }
89137
89138 return this.m.sub(a)._forceRed(this);
89139 };
89140
89141 Red.prototype.add = function add (a, b) {
89142 this._verify2(a, b);
89143
89144 var res = a.add(b);
89145 if (res.cmp(this.m) >= 0) {
89146 res.isub(this.m);
89147 }
89148 return res._forceRed(this);
89149 };
89150
89151 Red.prototype.iadd = function iadd (a, b) {
89152 this._verify2(a, b);
89153
89154 var res = a.iadd(b);
89155 if (res.cmp(this.m) >= 0) {
89156 res.isub(this.m);
89157 }
89158 return res;
89159 };
89160
89161 Red.prototype.sub = function sub (a, b) {
89162 this._verify2(a, b);
89163
89164 var res = a.sub(b);
89165 if (res.cmpn(0) < 0) {
89166 res.iadd(this.m);
89167 }
89168 return res._forceRed(this);
89169 };
89170
89171 Red.prototype.isub = function isub (a, b) {
89172 this._verify2(a, b);
89173
89174 var res = a.isub(b);
89175 if (res.cmpn(0) < 0) {
89176 res.iadd(this.m);
89177 }
89178 return res;
89179 };
89180
89181 Red.prototype.shl = function shl (a, num) {
89182 this._verify1(a);
89183 return this.imod(a.ushln(num));
89184 };
89185
89186 Red.prototype.imul = function imul (a, b) {
89187 this._verify2(a, b);
89188 return this.imod(a.imul(b));
89189 };
89190
89191 Red.prototype.mul = function mul (a, b) {
89192 this._verify2(a, b);
89193 return this.imod(a.mul(b));
89194 };
89195
89196 Red.prototype.isqr = function isqr (a) {
89197 return this.imul(a, a.clone());
89198 };
89199
89200 Red.prototype.sqr = function sqr (a) {
89201 return this.mul(a, a);
89202 };
89203
89204 Red.prototype.sqrt = function sqrt (a) {
89205 if (a.isZero()) return a.clone();
89206
89207 var mod3 = this.m.andln(3);
89208 assert(mod3 % 2 === 1);
89209
89210 // Fast case
89211 if (mod3 === 3) {
89212 var pow = this.m.add(new BN(1)).iushrn(2);
89213 return this.pow(a, pow);
89214 }
89215
89216 // Tonelli-Shanks algorithm (Totally unoptimized and slow)
89217 //
89218 // Find Q and S, that Q * 2 ^ S = (P - 1)
89219 var q = this.m.subn(1);
89220 var s = 0;
89221 while (!q.isZero() && q.andln(1) === 0) {
89222 s++;
89223 q.iushrn(1);
89224 }
89225 assert(!q.isZero());
89226
89227 var one = new BN(1).toRed(this);
89228 var nOne = one.redNeg();
89229
89230 // Find quadratic non-residue
89231 // NOTE: Max is such because of generalized Riemann hypothesis.
89232 var lpow = this.m.subn(1).iushrn(1);
89233 var z = this.m.bitLength();
89234 z = new BN(2 * z * z).toRed(this);
89235
89236 while (this.pow(z, lpow).cmp(nOne) !== 0) {
89237 z.redIAdd(nOne);
89238 }
89239
89240 var c = this.pow(z, q);
89241 var r = this.pow(a, q.addn(1).iushrn(1));
89242 var t = this.pow(a, q);
89243 var m = s;
89244 while (t.cmp(one) !== 0) {
89245 var tmp = t;
89246 for (var i = 0; tmp.cmp(one) !== 0; i++) {
89247 tmp = tmp.redSqr();
89248 }
89249 assert(i < m);
89250 var b = this.pow(c, new BN(1).iushln(m - i - 1));
89251
89252 r = r.redMul(b);
89253 c = b.redSqr();
89254 t = t.redMul(c);
89255 m = i;
89256 }
89257
89258 return r;
89259 };
89260
89261 Red.prototype.invm = function invm (a) {
89262 var inv = a._invmp(this.m);
89263 if (inv.negative !== 0) {
89264 inv.negative = 0;
89265 return this.imod(inv).redNeg();
89266 } else {
89267 return this.imod(inv);
89268 }
89269 };
89270
89271 Red.prototype.pow = function pow (a, num) {
89272 if (num.isZero()) return new BN(1);
89273 if (num.cmpn(1) === 0) return a.clone();
89274
89275 var windowSize = 4;
89276 var wnd = new Array(1 << windowSize);
89277 wnd[0] = new BN(1).toRed(this);
89278 wnd[1] = a;
89279 for (var i = 2; i < wnd.length; i++) {
89280 wnd[i] = this.mul(wnd[i - 1], a);
89281 }
89282
89283 var res = wnd[0];
89284 var current = 0;
89285 var currentLen = 0;
89286 var start = num.bitLength() % 26;
89287 if (start === 0) {
89288 start = 26;
89289 }
89290
89291 for (i = num.length - 1; i >= 0; i--) {
89292 var word = num.words[i];
89293 for (var j = start - 1; j >= 0; j--) {
89294 var bit = (word >> j) & 1;
89295 if (res !== wnd[0]) {
89296 res = this.sqr(res);
89297 }
89298
89299 if (bit === 0 && current === 0) {
89300 currentLen = 0;
89301 continue;
89302 }
89303
89304 current <<= 1;
89305 current |= bit;
89306 currentLen++;
89307 if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
89308
89309 res = this.mul(res, wnd[current]);
89310 currentLen = 0;
89311 current = 0;
89312 }
89313 start = 26;
89314 }
89315
89316 return res;
89317 };
89318
89319 Red.prototype.convertTo = function convertTo (num) {
89320 var r = num.umod(this.m);
89321
89322 return r === num ? r.clone() : r;
89323 };
89324
89325 Red.prototype.convertFrom = function convertFrom (num) {
89326 var res = num.clone();
89327 res.red = null;
89328 return res;
89329 };
89330
89331 //
89332 // Montgomery method engine
89333 //
89334
89335 BN.mont = function mont (num) {
89336 return new Mont(num);
89337 };
89338
89339 function Mont (m) {
89340 Red.call(this, m);
89341
89342 this.shift = this.m.bitLength();
89343 if (this.shift % 26 !== 0) {
89344 this.shift += 26 - (this.shift % 26);
89345 }
89346
89347 this.r = new BN(1).iushln(this.shift);
89348 this.r2 = this.imod(this.r.sqr());
89349 this.rinv = this.r._invmp(this.m);
89350
89351 this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
89352 this.minv = this.minv.umod(this.r);
89353 this.minv = this.r.sub(this.minv);
89354 }
89355 inherits(Mont, Red);
89356
89357 Mont.prototype.convertTo = function convertTo (num) {
89358 return this.imod(num.ushln(this.shift));
89359 };
89360
89361 Mont.prototype.convertFrom = function convertFrom (num) {
89362 var r = this.imod(num.mul(this.rinv));
89363 r.red = null;
89364 return r;
89365 };
89366
89367 Mont.prototype.imul = function imul (a, b) {
89368 if (a.isZero() || b.isZero()) {
89369 a.words[0] = 0;
89370 a.length = 1;
89371 return a;
89372 }
89373
89374 var t = a.imul(b);
89375 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
89376 var u = t.isub(c).iushrn(this.shift);
89377 var res = u;
89378
89379 if (u.cmp(this.m) >= 0) {
89380 res = u.isub(this.m);
89381 } else if (u.cmpn(0) < 0) {
89382 res = u.iadd(this.m);
89383 }
89384
89385 return res._forceRed(this);
89386 };
89387
89388 Mont.prototype.mul = function mul (a, b) {
89389 if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
89390
89391 var t = a.mul(b);
89392 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
89393 var u = t.isub(c).iushrn(this.shift);
89394 var res = u;
89395 if (u.cmp(this.m) >= 0) {
89396 res = u.isub(this.m);
89397 } else if (u.cmpn(0) < 0) {
89398 res = u.iadd(this.m);
89399 }
89400
89401 return res._forceRed(this);
89402 };
89403
89404 Mont.prototype.invm = function invm (a) {
89405 // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
89406 var res = this.imod(a._invmp(this.m).mul(this.r2));
89407 return res._forceRed(this);
89408 };
89409 })(typeof module === 'undefined' || module, this);
89410
89411 },{}],34:[function(require,module,exports){
89412 var r;
89413
89414 module.exports = function rand(len) {
89415 if (!r)
89416 r = new Rand(null);
89417
89418 return r.generate(len);
89419 };
89420
89421 function Rand(rand) {
89422 this.rand = rand;
89423 }
89424 module.exports.Rand = Rand;
89425
89426 Rand.prototype.generate = function generate(len) {
89427 return this._rand(len);
89428 };
89429
89430 if (typeof self === 'object') {
89431 if (self.crypto && self.crypto.getRandomValues) {
89432 // Modern browsers
89433 Rand.prototype._rand = function _rand(n) {
89434 var arr = new Uint8Array(n);
89435 self.crypto.getRandomValues(arr);
89436 return arr;
89437 };
89438 } else if (self.msCrypto && self.msCrypto.getRandomValues) {
89439 // IE
89440 Rand.prototype._rand = function _rand(n) {
89441 var arr = new Uint8Array(n);
89442 self.msCrypto.getRandomValues(arr);
89443 return arr;
89444 };
89445 } else {
89446 // Old junk
89447 Rand.prototype._rand = function() {
89448 throw new Error('Not implemented yet');
89449 };
89450 }
89451 } else {
89452 // Node.js or Web worker with no crypto support
89453 try {
89454 var crypto = require('crypto');
89455
89456 Rand.prototype._rand = function _rand(n) {
89457 return crypto.randomBytes(n);
89458 };
89459 } catch (e) {
89460 // Emulate crypto API using randy
89461 Rand.prototype._rand = function _rand(n) {
89462 var res = new Uint8Array(n);
89463 for (var i = 0; i < res.length; i++)
89464 res[i] = this.rand.getByte();
89465 return res;
89466 };
89467 }
89468 }
89469
89470 },{"crypto":3}],35:[function(require,module,exports){
89471 (function (Buffer){
89472 var Transform = require('stream').Transform
89473 var inherits = require('inherits')
89474 var StringDecoder = require('string_decoder').StringDecoder
89475 module.exports = CipherBase
89476 inherits(CipherBase, Transform)
89477 function CipherBase (hashMode) {
89478 Transform.call(this)
89479 this.hashMode = typeof hashMode === 'string'
89480 if (this.hashMode) {
89481 this[hashMode] = this._finalOrDigest
89482 } else {
89483 this.final = this._finalOrDigest
89484 }
89485 this._decoder = null
89486 this._encoding = null
89487 }
89488 CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
89489 if (typeof data === 'string') {
89490 data = new Buffer(data, inputEnc)
89491 }
89492 var outData = this._update(data)
89493 if (this.hashMode) {
89494 return this
89495 }
89496 if (outputEnc) {
89497 outData = this._toString(outData, outputEnc)
89498 }
89499 return outData
89500 }
89501
89502 CipherBase.prototype.setAutoPadding = function () {}
89503
89504 CipherBase.prototype.getAuthTag = function () {
89505 throw new Error('trying to get auth tag in unsupported state')
89506 }
89507
89508 CipherBase.prototype.setAuthTag = function () {
89509 throw new Error('trying to set auth tag in unsupported state')
89510 }
89511
89512 CipherBase.prototype.setAAD = function () {
89513 throw new Error('trying to set aad in unsupported state')
89514 }
89515
89516 CipherBase.prototype._transform = function (data, _, next) {
89517 var err
89518 try {
89519 if (this.hashMode) {
89520 this._update(data)
89521 } else {
89522 this.push(this._update(data))
89523 }
89524 } catch (e) {
89525 err = e
89526 } finally {
89527 next(err)
89528 }
89529 }
89530 CipherBase.prototype._flush = function (done) {
89531 var err
89532 try {
89533 this.push(this._final())
89534 } catch (e) {
89535 err = e
89536 } finally {
89537 done(err)
89538 }
89539 }
89540 CipherBase.prototype._finalOrDigest = function (outputEnc) {
89541 var outData = this._final() || new Buffer('')
89542 if (outputEnc) {
89543 outData = this._toString(outData, outputEnc, true)
89544 }
89545 return outData
89546 }
89547
89548 CipherBase.prototype._toString = function (value, enc, fin) {
89549 if (!this._decoder) {
89550 this._decoder = new StringDecoder(enc)
89551 this._encoding = enc
89552 }
89553 if (this._encoding !== enc) {
89554 throw new Error('can\'t switch encodings')
89555 }
89556 var out = this._decoder.write(value)
89557 if (fin) {
89558 out += this._decoder.end()
89559 }
89560 return out
89561 }
89562
89563 }).call(this,require("buffer").Buffer)
89564 },{"buffer":5,"inherits":63,"stream":25,"string_decoder":26}],36:[function(require,module,exports){
89565 (function (Buffer){
89566 'use strict';
89567 var inherits = require('inherits')
89568 var md5 = require('./md5')
89569 var rmd160 = require('ripemd160')
89570 var sha = require('sha.js')
89571
89572 var Base = require('cipher-base')
89573
89574 function HashNoConstructor(hash) {
89575 Base.call(this, 'digest')
89576
89577 this._hash = hash
89578 this.buffers = []
89579 }
89580
89581 inherits(HashNoConstructor, Base)
89582
89583 HashNoConstructor.prototype._update = function (data) {
89584 this.buffers.push(data)
89585 }
89586
89587 HashNoConstructor.prototype._final = function () {
89588 var buf = Buffer.concat(this.buffers)
89589 var r = this._hash(buf)
89590 this.buffers = null
89591
89592 return r
89593 }
89594
89595 function Hash(hash) {
89596 Base.call(this, 'digest')
89597
89598 this._hash = hash
89599 }
89600
89601 inherits(Hash, Base)
89602
89603 Hash.prototype._update = function (data) {
89604 this._hash.update(data)
89605 }
89606
89607 Hash.prototype._final = function () {
89608 return this._hash.digest()
89609 }
89610
89611 module.exports = function createHash (alg) {
89612 alg = alg.toLowerCase()
89613 if ('md5' === alg) return new HashNoConstructor(md5)
89614 if ('rmd160' === alg || 'ripemd160' === alg) return new HashNoConstructor(rmd160)
89615
89616 return new Hash(sha(alg))
89617 }
89618
89619 }).call(this,require("buffer").Buffer)
89620 },{"./md5":38,"buffer":5,"cipher-base":35,"inherits":63,"ripemd160":71,"sha.js":80}],37:[function(require,module,exports){
89621 (function (Buffer){
89622 'use strict';
89623 var intSize = 4;
89624 var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
89625 var chrsz = 8;
89626
89627 function toArray(buf, bigEndian) {
89628 if ((buf.length % intSize) !== 0) {
89629 var len = buf.length + (intSize - (buf.length % intSize));
89630 buf = Buffer.concat([buf, zeroBuffer], len);
89631 }
89632
89633 var arr = [];
89634 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
89635 for (var i = 0; i < buf.length; i += intSize) {
89636 arr.push(fn.call(buf, i));
89637 }
89638 return arr;
89639 }
89640
89641 function toBuffer(arr, size, bigEndian) {
89642 var buf = new Buffer(size);
89643 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
89644 for (var i = 0; i < arr.length; i++) {
89645 fn.call(buf, arr[i], i * 4, true);
89646 }
89647 return buf;
89648 }
89649
89650 function hash(buf, fn, hashSize, bigEndian) {
89651 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
89652 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
89653 return toBuffer(arr, hashSize, bigEndian);
89654 }
89655 exports.hash = hash;
89656 }).call(this,require("buffer").Buffer)
89657 },{"buffer":5}],38:[function(require,module,exports){
89658 'use strict';
89659 /*
89660 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
89661 * Digest Algorithm, as defined in RFC 1321.
89662 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
89663 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
89664 * Distributed under the BSD License
89665 * See http://pajhome.org.uk/crypt/md5 for more info.
89666 */
89667
89668 var helpers = require('./helpers');
89669
89670 /*
89671 * Calculate the MD5 of an array of little-endian words, and a bit length
89672 */
89673 function core_md5(x, len)
89674 {
89675 /* append padding */
89676 x[len >> 5] |= 0x80 << ((len) % 32);
89677 x[(((len + 64) >>> 9) << 4) + 14] = len;
89678
89679 var a = 1732584193;
89680 var b = -271733879;
89681 var c = -1732584194;
89682 var d = 271733878;
89683
89684 for(var i = 0; i < x.length; i += 16)
89685 {
89686 var olda = a;
89687 var oldb = b;
89688 var oldc = c;
89689 var oldd = d;
89690
89691 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
89692 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
89693 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
89694 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
89695 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
89696 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
89697 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
89698 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
89699 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
89700 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
89701 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
89702 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
89703 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
89704 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
89705 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
89706 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
89707
89708 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
89709 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
89710 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
89711 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
89712 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
89713 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
89714 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
89715 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
89716 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
89717 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
89718 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
89719 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
89720 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
89721 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
89722 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
89723 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
89724
89725 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
89726 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
89727 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
89728 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
89729 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
89730 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
89731 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
89732 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
89733 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
89734 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
89735 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
89736 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
89737 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
89738 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
89739 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
89740 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
89741
89742 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
89743 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
89744 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
89745 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
89746 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
89747 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
89748 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
89749 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
89750 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
89751 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
89752 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
89753 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
89754 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
89755 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
89756 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
89757 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
89758
89759 a = safe_add(a, olda);
89760 b = safe_add(b, oldb);
89761 c = safe_add(c, oldc);
89762 d = safe_add(d, oldd);
89763 }
89764 return Array(a, b, c, d);
89765
89766 }
89767
89768 /*
89769 * These functions implement the four basic operations the algorithm uses.
89770 */
89771 function md5_cmn(q, a, b, x, s, t)
89772 {
89773 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
89774 }
89775 function md5_ff(a, b, c, d, x, s, t)
89776 {
89777 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
89778 }
89779 function md5_gg(a, b, c, d, x, s, t)
89780 {
89781 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
89782 }
89783 function md5_hh(a, b, c, d, x, s, t)
89784 {
89785 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
89786 }
89787 function md5_ii(a, b, c, d, x, s, t)
89788 {
89789 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
89790 }
89791
89792 /*
89793 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
89794 * to work around bugs in some JS interpreters.
89795 */
89796 function safe_add(x, y)
89797 {
89798 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
89799 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
89800 return (msw << 16) | (lsw & 0xFFFF);
89801 }
89802
89803 /*
89804 * Bitwise rotate a 32-bit number to the left.
89805 */
89806 function bit_rol(num, cnt)
89807 {
89808 return (num << cnt) | (num >>> (32 - cnt));
89809 }
89810
89811 module.exports = function md5(buf) {
89812 return helpers.hash(buf, core_md5, 16);
89813 };
89814 },{"./helpers":37}],39:[function(require,module,exports){
89815 'use strict';
89816
89817 var elliptic = exports;
89818
89819 elliptic.version = require('../package.json').version;
89820 elliptic.utils = require('./elliptic/utils');
89821 elliptic.rand = require('brorand');
89822 elliptic.hmacDRBG = require('./elliptic/hmac-drbg');
89823 elliptic.curve = require('./elliptic/curve');
89824 elliptic.curves = require('./elliptic/curves');
89825
89826 // Protocols
89827 elliptic.ec = require('./elliptic/ec');
89828 elliptic.eddsa = require('./elliptic/eddsa');
89829
89830 },{"../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){
89831 'use strict';
89832
89833 var BN = require('bn.js');
89834 var elliptic = require('../../elliptic');
89835 var utils = elliptic.utils;
89836 var getNAF = utils.getNAF;
89837 var getJSF = utils.getJSF;
89838 var assert = utils.assert;
89839
89840 function BaseCurve(type, conf) {
89841 this.type = type;
89842 this.p = new BN(conf.p, 16);
89843
89844 // Use Montgomery, when there is no fast reduction for the prime
89845 this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
89846
89847 // Useful for many curves
89848 this.zero = new BN(0).toRed(this.red);
89849 this.one = new BN(1).toRed(this.red);
89850 this.two = new BN(2).toRed(this.red);
89851
89852 // Curve configuration, optional
89853 this.n = conf.n && new BN(conf.n, 16);
89854 this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
89855
89856 // Temporary arrays
89857 this._wnafT1 = new Array(4);
89858 this._wnafT2 = new Array(4);
89859 this._wnafT3 = new Array(4);
89860 this._wnafT4 = new Array(4);
89861
89862 // Generalized Greg Maxwell's trick
89863 var adjustCount = this.n && this.p.div(this.n);
89864 if (!adjustCount || adjustCount.cmpn(100) > 0) {
89865 this.redN = null;
89866 } else {
89867 this._maxwellTrick = true;
89868 this.redN = this.n.toRed(this.red);
89869 }
89870 }
89871 module.exports = BaseCurve;
89872
89873 BaseCurve.prototype.point = function point() {
89874 throw new Error('Not implemented');
89875 };
89876
89877 BaseCurve.prototype.validate = function validate() {
89878 throw new Error('Not implemented');
89879 };
89880
89881 BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
89882 assert(p.precomputed);
89883 var doubles = p._getDoubles();
89884
89885 var naf = getNAF(k, 1);
89886 var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);
89887 I /= 3;
89888
89889 // Translate into more windowed form
89890 var repr = [];
89891 for (var j = 0; j < naf.length; j += doubles.step) {
89892 var nafW = 0;
89893 for (var k = j + doubles.step - 1; k >= j; k--)
89894 nafW = (nafW << 1) + naf[k];
89895 repr.push(nafW);
89896 }
89897
89898 var a = this.jpoint(null, null, null);
89899 var b = this.jpoint(null, null, null);
89900 for (var i = I; i > 0; i--) {
89901 for (var j = 0; j < repr.length; j++) {
89902 var nafW = repr[j];
89903 if (nafW === i)
89904 b = b.mixedAdd(doubles.points[j]);
89905 else if (nafW === -i)
89906 b = b.mixedAdd(doubles.points[j].neg());
89907 }
89908 a = a.add(b);
89909 }
89910 return a.toP();
89911 };
89912
89913 BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
89914 var w = 4;
89915
89916 // Precompute window
89917 var nafPoints = p._getNAFPoints(w);
89918 w = nafPoints.wnd;
89919 var wnd = nafPoints.points;
89920
89921 // Get NAF form
89922 var naf = getNAF(k, w);
89923
89924 // Add `this`*(N+1) for every w-NAF index
89925 var acc = this.jpoint(null, null, null);
89926 for (var i = naf.length - 1; i >= 0; i--) {
89927 // Count zeroes
89928 for (var k = 0; i >= 0 && naf[i] === 0; i--)
89929 k++;
89930 if (i >= 0)
89931 k++;
89932 acc = acc.dblp(k);
89933
89934 if (i < 0)
89935 break;
89936 var z = naf[i];
89937 assert(z !== 0);
89938 if (p.type === 'affine') {
89939 // J +- P
89940 if (z > 0)
89941 acc = acc.mixedAdd(wnd[(z - 1) >> 1]);
89942 else
89943 acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());
89944 } else {
89945 // J +- J
89946 if (z > 0)
89947 acc = acc.add(wnd[(z - 1) >> 1]);
89948 else
89949 acc = acc.add(wnd[(-z - 1) >> 1].neg());
89950 }
89951 }
89952 return p.type === 'affine' ? acc.toP() : acc;
89953 };
89954
89955 BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,
89956 points,
89957 coeffs,
89958 len,
89959 jacobianResult) {
89960 var wndWidth = this._wnafT1;
89961 var wnd = this._wnafT2;
89962 var naf = this._wnafT3;
89963
89964 // Fill all arrays
89965 var max = 0;
89966 for (var i = 0; i < len; i++) {
89967 var p = points[i];
89968 var nafPoints = p._getNAFPoints(defW);
89969 wndWidth[i] = nafPoints.wnd;
89970 wnd[i] = nafPoints.points;
89971 }
89972
89973 // Comb small window NAFs
89974 for (var i = len - 1; i >= 1; i -= 2) {
89975 var a = i - 1;
89976 var b = i;
89977 if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
89978 naf[a] = getNAF(coeffs[a], wndWidth[a]);
89979 naf[b] = getNAF(coeffs[b], wndWidth[b]);
89980 max = Math.max(naf[a].length, max);
89981 max = Math.max(naf[b].length, max);
89982 continue;
89983 }
89984
89985 var comb = [
89986 points[a], /* 1 */
89987 null, /* 3 */
89988 null, /* 5 */
89989 points[b] /* 7 */
89990 ];
89991
89992 // Try to avoid Projective points, if possible
89993 if (points[a].y.cmp(points[b].y) === 0) {
89994 comb[1] = points[a].add(points[b]);
89995 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
89996 } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
89997 comb[1] = points[a].toJ().mixedAdd(points[b]);
89998 comb[2] = points[a].add(points[b].neg());
89999 } else {
90000 comb[1] = points[a].toJ().mixedAdd(points[b]);
90001 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
90002 }
90003
90004 var index = [
90005 -3, /* -1 -1 */
90006 -1, /* -1 0 */
90007 -5, /* -1 1 */
90008 -7, /* 0 -1 */
90009 0, /* 0 0 */
90010 7, /* 0 1 */
90011 5, /* 1 -1 */
90012 1, /* 1 0 */
90013 3 /* 1 1 */
90014 ];
90015
90016 var jsf = getJSF(coeffs[a], coeffs[b]);
90017 max = Math.max(jsf[0].length, max);
90018 naf[a] = new Array(max);
90019 naf[b] = new Array(max);
90020 for (var j = 0; j < max; j++) {
90021 var ja = jsf[0][j] | 0;
90022 var jb = jsf[1][j] | 0;
90023
90024 naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
90025 naf[b][j] = 0;
90026 wnd[a] = comb;
90027 }
90028 }
90029
90030 var acc = this.jpoint(null, null, null);
90031 var tmp = this._wnafT4;
90032 for (var i = max; i >= 0; i--) {
90033 var k = 0;
90034
90035 while (i >= 0) {
90036 var zero = true;
90037 for (var j = 0; j < len; j++) {
90038 tmp[j] = naf[j][i] | 0;
90039 if (tmp[j] !== 0)
90040 zero = false;
90041 }
90042 if (!zero)
90043 break;
90044 k++;
90045 i--;
90046 }
90047 if (i >= 0)
90048 k++;
90049 acc = acc.dblp(k);
90050 if (i < 0)
90051 break;
90052
90053 for (var j = 0; j < len; j++) {
90054 var z = tmp[j];
90055 var p;
90056 if (z === 0)
90057 continue;
90058 else if (z > 0)
90059 p = wnd[j][(z - 1) >> 1];
90060 else if (z < 0)
90061 p = wnd[j][(-z - 1) >> 1].neg();
90062
90063 if (p.type === 'affine')
90064 acc = acc.mixedAdd(p);
90065 else
90066 acc = acc.add(p);
90067 }
90068 }
90069 // Zeroify references
90070 for (var i = 0; i < len; i++)
90071 wnd[i] = null;
90072
90073 if (jacobianResult)
90074 return acc;
90075 else
90076 return acc.toP();
90077 };
90078
90079 function BasePoint(curve, type) {
90080 this.curve = curve;
90081 this.type = type;
90082 this.precomputed = null;
90083 }
90084 BaseCurve.BasePoint = BasePoint;
90085
90086 BasePoint.prototype.eq = function eq(/*other*/) {
90087 throw new Error('Not implemented');
90088 };
90089
90090 BasePoint.prototype.validate = function validate() {
90091 return this.curve.validate(this);
90092 };
90093
90094 BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
90095 bytes = utils.toArray(bytes, enc);
90096
90097 var len = this.p.byteLength();
90098
90099 // uncompressed, hybrid-odd, hybrid-even
90100 if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&
90101 bytes.length - 1 === 2 * len) {
90102 if (bytes[0] === 0x06)
90103 assert(bytes[bytes.length - 1] % 2 === 0);
90104 else if (bytes[0] === 0x07)
90105 assert(bytes[bytes.length - 1] % 2 === 1);
90106
90107 var res = this.point(bytes.slice(1, 1 + len),
90108 bytes.slice(1 + len, 1 + 2 * len));
90109
90110 return res;
90111 } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&
90112 bytes.length - 1 === len) {
90113 return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
90114 }
90115 throw new Error('Unknown point format');
90116 };
90117
90118 BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
90119 return this.encode(enc, true);
90120 };
90121
90122 BasePoint.prototype._encode = function _encode(compact) {
90123 var len = this.curve.p.byteLength();
90124 var x = this.getX().toArray('be', len);
90125
90126 if (compact)
90127 return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);
90128
90129 return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;
90130 };
90131
90132 BasePoint.prototype.encode = function encode(enc, compact) {
90133 return utils.encode(this._encode(compact), enc);
90134 };
90135
90136 BasePoint.prototype.precompute = function precompute(power) {
90137 if (this.precomputed)
90138 return this;
90139
90140 var precomputed = {
90141 doubles: null,
90142 naf: null,
90143 beta: null
90144 };
90145 precomputed.naf = this._getNAFPoints(8);
90146 precomputed.doubles = this._getDoubles(4, power);
90147 precomputed.beta = this._getBeta();
90148 this.precomputed = precomputed;
90149
90150 return this;
90151 };
90152
90153 BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
90154 if (!this.precomputed)
90155 return false;
90156
90157 var doubles = this.precomputed.doubles;
90158 if (!doubles)
90159 return false;
90160
90161 return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
90162 };
90163
90164 BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
90165 if (this.precomputed && this.precomputed.doubles)
90166 return this.precomputed.doubles;
90167
90168 var doubles = [ this ];
90169 var acc = this;
90170 for (var i = 0; i < power; i += step) {
90171 for (var j = 0; j < step; j++)
90172 acc = acc.dbl();
90173 doubles.push(acc);
90174 }
90175 return {
90176 step: step,
90177 points: doubles
90178 };
90179 };
90180
90181 BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
90182 if (this.precomputed && this.precomputed.naf)
90183 return this.precomputed.naf;
90184
90185 var res = [ this ];
90186 var max = (1 << wnd) - 1;
90187 var dbl = max === 1 ? null : this.dbl();
90188 for (var i = 1; i < max; i++)
90189 res[i] = res[i - 1].add(dbl);
90190 return {
90191 wnd: wnd,
90192 points: res
90193 };
90194 };
90195
90196 BasePoint.prototype._getBeta = function _getBeta() {
90197 return null;
90198 };
90199
90200 BasePoint.prototype.dblp = function dblp(k) {
90201 var r = this;
90202 for (var i = 0; i < k; i++)
90203 r = r.dbl();
90204 return r;
90205 };
90206
90207 },{"../../elliptic":39,"bn.js":33}],41:[function(require,module,exports){
90208 'use strict';
90209
90210 var curve = require('../curve');
90211 var elliptic = require('../../elliptic');
90212 var BN = require('bn.js');
90213 var inherits = require('inherits');
90214 var Base = curve.base;
90215
90216 var assert = elliptic.utils.assert;
90217
90218 function EdwardsCurve(conf) {
90219 // NOTE: Important as we are creating point in Base.call()
90220 this.twisted = (conf.a | 0) !== 1;
90221 this.mOneA = this.twisted && (conf.a | 0) === -1;
90222 this.extended = this.mOneA;
90223
90224 Base.call(this, 'edwards', conf);
90225
90226 this.a = new BN(conf.a, 16).umod(this.red.m);
90227 this.a = this.a.toRed(this.red);
90228 this.c = new BN(conf.c, 16).toRed(this.red);
90229 this.c2 = this.c.redSqr();
90230 this.d = new BN(conf.d, 16).toRed(this.red);
90231 this.dd = this.d.redAdd(this.d);
90232
90233 assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
90234 this.oneC = (conf.c | 0) === 1;
90235 }
90236 inherits(EdwardsCurve, Base);
90237 module.exports = EdwardsCurve;
90238
90239 EdwardsCurve.prototype._mulA = function _mulA(num) {
90240 if (this.mOneA)
90241 return num.redNeg();
90242 else
90243 return this.a.redMul(num);
90244 };
90245
90246 EdwardsCurve.prototype._mulC = function _mulC(num) {
90247 if (this.oneC)
90248 return num;
90249 else
90250 return this.c.redMul(num);
90251 };
90252
90253 // Just for compatibility with Short curve
90254 EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
90255 return this.point(x, y, z, t);
90256 };
90257
90258 EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
90259 x = new BN(x, 16);
90260 if (!x.red)
90261 x = x.toRed(this.red);
90262
90263 var x2 = x.redSqr();
90264 var rhs = this.c2.redSub(this.a.redMul(x2));
90265 var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
90266
90267 var y2 = rhs.redMul(lhs.redInvm());
90268 var y = y2.redSqrt();
90269 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
90270 throw new Error('invalid point');
90271
90272 var isOdd = y.fromRed().isOdd();
90273 if (odd && !isOdd || !odd && isOdd)
90274 y = y.redNeg();
90275
90276 return this.point(x, y);
90277 };
90278
90279 EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
90280 y = new BN(y, 16);
90281 if (!y.red)
90282 y = y.toRed(this.red);
90283
90284 // x^2 = (y^2 - 1) / (d y^2 + 1)
90285 var y2 = y.redSqr();
90286 var lhs = y2.redSub(this.one);
90287 var rhs = y2.redMul(this.d).redAdd(this.one);
90288 var x2 = lhs.redMul(rhs.redInvm());
90289
90290 if (x2.cmp(this.zero) === 0) {
90291 if (odd)
90292 throw new Error('invalid point');
90293 else
90294 return this.point(this.zero, y);
90295 }
90296
90297 var x = x2.redSqrt();
90298 if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
90299 throw new Error('invalid point');
90300
90301 if (x.isOdd() !== odd)
90302 x = x.redNeg();
90303
90304 return this.point(x, y);
90305 };
90306
90307 EdwardsCurve.prototype.validate = function validate(point) {
90308 if (point.isInfinity())
90309 return true;
90310
90311 // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)
90312 point.normalize();
90313
90314 var x2 = point.x.redSqr();
90315 var y2 = point.y.redSqr();
90316 var lhs = x2.redMul(this.a).redAdd(y2);
90317 var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
90318
90319 return lhs.cmp(rhs) === 0;
90320 };
90321
90322 function Point(curve, x, y, z, t) {
90323 Base.BasePoint.call(this, curve, 'projective');
90324 if (x === null && y === null && z === null) {
90325 this.x = this.curve.zero;
90326 this.y = this.curve.one;
90327 this.z = this.curve.one;
90328 this.t = this.curve.zero;
90329 this.zOne = true;
90330 } else {
90331 this.x = new BN(x, 16);
90332 this.y = new BN(y, 16);
90333 this.z = z ? new BN(z, 16) : this.curve.one;
90334 this.t = t && new BN(t, 16);
90335 if (!this.x.red)
90336 this.x = this.x.toRed(this.curve.red);
90337 if (!this.y.red)
90338 this.y = this.y.toRed(this.curve.red);
90339 if (!this.z.red)
90340 this.z = this.z.toRed(this.curve.red);
90341 if (this.t && !this.t.red)
90342 this.t = this.t.toRed(this.curve.red);
90343 this.zOne = this.z === this.curve.one;
90344
90345 // Use extended coordinates
90346 if (this.curve.extended && !this.t) {
90347 this.t = this.x.redMul(this.y);
90348 if (!this.zOne)
90349 this.t = this.t.redMul(this.z.redInvm());
90350 }
90351 }
90352 }
90353 inherits(Point, Base.BasePoint);
90354
90355 EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
90356 return Point.fromJSON(this, obj);
90357 };
90358
90359 EdwardsCurve.prototype.point = function point(x, y, z, t) {
90360 return new Point(this, x, y, z, t);
90361 };
90362
90363 Point.fromJSON = function fromJSON(curve, obj) {
90364 return new Point(curve, obj[0], obj[1], obj[2]);
90365 };
90366
90367 Point.prototype.inspect = function inspect() {
90368 if (this.isInfinity())
90369 return '<EC Point Infinity>';
90370 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
90371 ' y: ' + this.y.fromRed().toString(16, 2) +
90372 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
90373 };
90374
90375 Point.prototype.isInfinity = function isInfinity() {
90376 // XXX This code assumes that zero is always zero in red
90377 return this.x.cmpn(0) === 0 &&
90378 this.y.cmp(this.z) === 0;
90379 };
90380
90381 Point.prototype._extDbl = function _extDbl() {
90382 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
90383 // #doubling-dbl-2008-hwcd
90384 // 4M + 4S
90385
90386 // A = X1^2
90387 var a = this.x.redSqr();
90388 // B = Y1^2
90389 var b = this.y.redSqr();
90390 // C = 2 * Z1^2
90391 var c = this.z.redSqr();
90392 c = c.redIAdd(c);
90393 // D = a * A
90394 var d = this.curve._mulA(a);
90395 // E = (X1 + Y1)^2 - A - B
90396 var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
90397 // G = D + B
90398 var g = d.redAdd(b);
90399 // F = G - C
90400 var f = g.redSub(c);
90401 // H = D - B
90402 var h = d.redSub(b);
90403 // X3 = E * F
90404 var nx = e.redMul(f);
90405 // Y3 = G * H
90406 var ny = g.redMul(h);
90407 // T3 = E * H
90408 var nt = e.redMul(h);
90409 // Z3 = F * G
90410 var nz = f.redMul(g);
90411 return this.curve.point(nx, ny, nz, nt);
90412 };
90413
90414 Point.prototype._projDbl = function _projDbl() {
90415 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
90416 // #doubling-dbl-2008-bbjlp
90417 // #doubling-dbl-2007-bl
90418 // and others
90419 // Generally 3M + 4S or 2M + 4S
90420
90421 // B = (X1 + Y1)^2
90422 var b = this.x.redAdd(this.y).redSqr();
90423 // C = X1^2
90424 var c = this.x.redSqr();
90425 // D = Y1^2
90426 var d = this.y.redSqr();
90427
90428 var nx;
90429 var ny;
90430 var nz;
90431 if (this.curve.twisted) {
90432 // E = a * C
90433 var e = this.curve._mulA(c);
90434 // F = E + D
90435 var f = e.redAdd(d);
90436 if (this.zOne) {
90437 // X3 = (B - C - D) * (F - 2)
90438 nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
90439 // Y3 = F * (E - D)
90440 ny = f.redMul(e.redSub(d));
90441 // Z3 = F^2 - 2 * F
90442 nz = f.redSqr().redSub(f).redSub(f);
90443 } else {
90444 // H = Z1^2
90445 var h = this.z.redSqr();
90446 // J = F - 2 * H
90447 var j = f.redSub(h).redISub(h);
90448 // X3 = (B-C-D)*J
90449 nx = b.redSub(c).redISub(d).redMul(j);
90450 // Y3 = F * (E - D)
90451 ny = f.redMul(e.redSub(d));
90452 // Z3 = F * J
90453 nz = f.redMul(j);
90454 }
90455 } else {
90456 // E = C + D
90457 var e = c.redAdd(d);
90458 // H = (c * Z1)^2
90459 var h = this.curve._mulC(this.c.redMul(this.z)).redSqr();
90460 // J = E - 2 * H
90461 var j = e.redSub(h).redSub(h);
90462 // X3 = c * (B - E) * J
90463 nx = this.curve._mulC(b.redISub(e)).redMul(j);
90464 // Y3 = c * E * (C - D)
90465 ny = this.curve._mulC(e).redMul(c.redISub(d));
90466 // Z3 = E * J
90467 nz = e.redMul(j);
90468 }
90469 return this.curve.point(nx, ny, nz);
90470 };
90471
90472 Point.prototype.dbl = function dbl() {
90473 if (this.isInfinity())
90474 return this;
90475
90476 // Double in extended coordinates
90477 if (this.curve.extended)
90478 return this._extDbl();
90479 else
90480 return this._projDbl();
90481 };
90482
90483 Point.prototype._extAdd = function _extAdd(p) {
90484 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
90485 // #addition-add-2008-hwcd-3
90486 // 8M
90487
90488 // A = (Y1 - X1) * (Y2 - X2)
90489 var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
90490 // B = (Y1 + X1) * (Y2 + X2)
90491 var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
90492 // C = T1 * k * T2
90493 var c = this.t.redMul(this.curve.dd).redMul(p.t);
90494 // D = Z1 * 2 * Z2
90495 var d = this.z.redMul(p.z.redAdd(p.z));
90496 // E = B - A
90497 var e = b.redSub(a);
90498 // F = D - C
90499 var f = d.redSub(c);
90500 // G = D + C
90501 var g = d.redAdd(c);
90502 // H = B + A
90503 var h = b.redAdd(a);
90504 // X3 = E * F
90505 var nx = e.redMul(f);
90506 // Y3 = G * H
90507 var ny = g.redMul(h);
90508 // T3 = E * H
90509 var nt = e.redMul(h);
90510 // Z3 = F * G
90511 var nz = f.redMul(g);
90512 return this.curve.point(nx, ny, nz, nt);
90513 };
90514
90515 Point.prototype._projAdd = function _projAdd(p) {
90516 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
90517 // #addition-add-2008-bbjlp
90518 // #addition-add-2007-bl
90519 // 10M + 1S
90520
90521 // A = Z1 * Z2
90522 var a = this.z.redMul(p.z);
90523 // B = A^2
90524 var b = a.redSqr();
90525 // C = X1 * X2
90526 var c = this.x.redMul(p.x);
90527 // D = Y1 * Y2
90528 var d = this.y.redMul(p.y);
90529 // E = d * C * D
90530 var e = this.curve.d.redMul(c).redMul(d);
90531 // F = B - E
90532 var f = b.redSub(e);
90533 // G = B + E
90534 var g = b.redAdd(e);
90535 // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)
90536 var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
90537 var nx = a.redMul(f).redMul(tmp);
90538 var ny;
90539 var nz;
90540 if (this.curve.twisted) {
90541 // Y3 = A * G * (D - a * C)
90542 ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
90543 // Z3 = F * G
90544 nz = f.redMul(g);
90545 } else {
90546 // Y3 = A * G * (D - C)
90547 ny = a.redMul(g).redMul(d.redSub(c));
90548 // Z3 = c * F * G
90549 nz = this.curve._mulC(f).redMul(g);
90550 }
90551 return this.curve.point(nx, ny, nz);
90552 };
90553
90554 Point.prototype.add = function add(p) {
90555 if (this.isInfinity())
90556 return p;
90557 if (p.isInfinity())
90558 return this;
90559
90560 if (this.curve.extended)
90561 return this._extAdd(p);
90562 else
90563 return this._projAdd(p);
90564 };
90565
90566 Point.prototype.mul = function mul(k) {
90567 if (this._hasDoubles(k))
90568 return this.curve._fixedNafMul(this, k);
90569 else
90570 return this.curve._wnafMul(this, k);
90571 };
90572
90573 Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
90574 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);
90575 };
90576
90577 Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
90578 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);
90579 };
90580
90581 Point.prototype.normalize = function normalize() {
90582 if (this.zOne)
90583 return this;
90584
90585 // Normalize coordinates
90586 var zi = this.z.redInvm();
90587 this.x = this.x.redMul(zi);
90588 this.y = this.y.redMul(zi);
90589 if (this.t)
90590 this.t = this.t.redMul(zi);
90591 this.z = this.curve.one;
90592 this.zOne = true;
90593 return this;
90594 };
90595
90596 Point.prototype.neg = function neg() {
90597 return this.curve.point(this.x.redNeg(),
90598 this.y,
90599 this.z,
90600 this.t && this.t.redNeg());
90601 };
90602
90603 Point.prototype.getX = function getX() {
90604 this.normalize();
90605 return this.x.fromRed();
90606 };
90607
90608 Point.prototype.getY = function getY() {
90609 this.normalize();
90610 return this.y.fromRed();
90611 };
90612
90613 Point.prototype.eq = function eq(other) {
90614 return this === other ||
90615 this.getX().cmp(other.getX()) === 0 &&
90616 this.getY().cmp(other.getY()) === 0;
90617 };
90618
90619 Point.prototype.eqXToP = function eqXToP(x) {
90620 var rx = x.toRed(this.curve.red).redMul(this.z);
90621 if (this.x.cmp(rx) === 0)
90622 return true;
90623
90624 var xc = x.clone();
90625 var t = this.curve.redN.redMul(this.z);
90626 for (;;) {
90627 xc.iadd(this.curve.n);
90628 if (xc.cmp(this.curve.p) >= 0)
90629 return false;
90630
90631 rx.redIAdd(t);
90632 if (this.x.cmp(rx) === 0)
90633 return true;
90634 }
90635 return false;
90636 };
90637
90638 // Compatibility with BaseCurve
90639 Point.prototype.toP = Point.prototype.normalize;
90640 Point.prototype.mixedAdd = Point.prototype.add;
90641
90642 },{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],42:[function(require,module,exports){
90643 'use strict';
90644
90645 var curve = exports;
90646
90647 curve.base = require('./base');
90648 curve.short = require('./short');
90649 curve.mont = require('./mont');
90650 curve.edwards = require('./edwards');
90651
90652 },{"./base":40,"./edwards":41,"./mont":43,"./short":44}],43:[function(require,module,exports){
90653 'use strict';
90654
90655 var curve = require('../curve');
90656 var BN = require('bn.js');
90657 var inherits = require('inherits');
90658 var Base = curve.base;
90659
90660 var elliptic = require('../../elliptic');
90661 var utils = elliptic.utils;
90662
90663 function MontCurve(conf) {
90664 Base.call(this, 'mont', conf);
90665
90666 this.a = new BN(conf.a, 16).toRed(this.red);
90667 this.b = new BN(conf.b, 16).toRed(this.red);
90668 this.i4 = new BN(4).toRed(this.red).redInvm();
90669 this.two = new BN(2).toRed(this.red);
90670 this.a24 = this.i4.redMul(this.a.redAdd(this.two));
90671 }
90672 inherits(MontCurve, Base);
90673 module.exports = MontCurve;
90674
90675 MontCurve.prototype.validate = function validate(point) {
90676 var x = point.normalize().x;
90677 var x2 = x.redSqr();
90678 var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
90679 var y = rhs.redSqrt();
90680
90681 return y.redSqr().cmp(rhs) === 0;
90682 };
90683
90684 function Point(curve, x, z) {
90685 Base.BasePoint.call(this, curve, 'projective');
90686 if (x === null && z === null) {
90687 this.x = this.curve.one;
90688 this.z = this.curve.zero;
90689 } else {
90690 this.x = new BN(x, 16);
90691 this.z = new BN(z, 16);
90692 if (!this.x.red)
90693 this.x = this.x.toRed(this.curve.red);
90694 if (!this.z.red)
90695 this.z = this.z.toRed(this.curve.red);
90696 }
90697 }
90698 inherits(Point, Base.BasePoint);
90699
90700 MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
90701 return this.point(utils.toArray(bytes, enc), 1);
90702 };
90703
90704 MontCurve.prototype.point = function point(x, z) {
90705 return new Point(this, x, z);
90706 };
90707
90708 MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
90709 return Point.fromJSON(this, obj);
90710 };
90711
90712 Point.prototype.precompute = function precompute() {
90713 // No-op
90714 };
90715
90716 Point.prototype._encode = function _encode() {
90717 return this.getX().toArray('be', this.curve.p.byteLength());
90718 };
90719
90720 Point.fromJSON = function fromJSON(curve, obj) {
90721 return new Point(curve, obj[0], obj[1] || curve.one);
90722 };
90723
90724 Point.prototype.inspect = function inspect() {
90725 if (this.isInfinity())
90726 return '<EC Point Infinity>';
90727 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
90728 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
90729 };
90730
90731 Point.prototype.isInfinity = function isInfinity() {
90732 // XXX This code assumes that zero is always zero in red
90733 return this.z.cmpn(0) === 0;
90734 };
90735
90736 Point.prototype.dbl = function dbl() {
90737 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3
90738 // 2M + 2S + 4A
90739
90740 // A = X1 + Z1
90741 var a = this.x.redAdd(this.z);
90742 // AA = A^2
90743 var aa = a.redSqr();
90744 // B = X1 - Z1
90745 var b = this.x.redSub(this.z);
90746 // BB = B^2
90747 var bb = b.redSqr();
90748 // C = AA - BB
90749 var c = aa.redSub(bb);
90750 // X3 = AA * BB
90751 var nx = aa.redMul(bb);
90752 // Z3 = C * (BB + A24 * C)
90753 var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
90754 return this.curve.point(nx, nz);
90755 };
90756
90757 Point.prototype.add = function add() {
90758 throw new Error('Not supported on Montgomery curve');
90759 };
90760
90761 Point.prototype.diffAdd = function diffAdd(p, diff) {
90762 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3
90763 // 4M + 2S + 6A
90764
90765 // A = X2 + Z2
90766 var a = this.x.redAdd(this.z);
90767 // B = X2 - Z2
90768 var b = this.x.redSub(this.z);
90769 // C = X3 + Z3
90770 var c = p.x.redAdd(p.z);
90771 // D = X3 - Z3
90772 var d = p.x.redSub(p.z);
90773 // DA = D * A
90774 var da = d.redMul(a);
90775 // CB = C * B
90776 var cb = c.redMul(b);
90777 // X5 = Z1 * (DA + CB)^2
90778 var nx = diff.z.redMul(da.redAdd(cb).redSqr());
90779 // Z5 = X1 * (DA - CB)^2
90780 var nz = diff.x.redMul(da.redISub(cb).redSqr());
90781 return this.curve.point(nx, nz);
90782 };
90783
90784 Point.prototype.mul = function mul(k) {
90785 var t = k.clone();
90786 var a = this; // (N / 2) * Q + Q
90787 var b = this.curve.point(null, null); // (N / 2) * Q
90788 var c = this; // Q
90789
90790 for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
90791 bits.push(t.andln(1));
90792
90793 for (var i = bits.length - 1; i >= 0; i--) {
90794 if (bits[i] === 0) {
90795 // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q
90796 a = a.diffAdd(b, c);
90797 // N * Q = 2 * ((N / 2) * Q + Q))
90798 b = b.dbl();
90799 } else {
90800 // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)
90801 b = a.diffAdd(b, c);
90802 // N * Q + Q = 2 * ((N / 2) * Q + Q)
90803 a = a.dbl();
90804 }
90805 }
90806 return b;
90807 };
90808
90809 Point.prototype.mulAdd = function mulAdd() {
90810 throw new Error('Not supported on Montgomery curve');
90811 };
90812
90813 Point.prototype.jumlAdd = function jumlAdd() {
90814 throw new Error('Not supported on Montgomery curve');
90815 };
90816
90817 Point.prototype.eq = function eq(other) {
90818 return this.getX().cmp(other.getX()) === 0;
90819 };
90820
90821 Point.prototype.normalize = function normalize() {
90822 this.x = this.x.redMul(this.z.redInvm());
90823 this.z = this.curve.one;
90824 return this;
90825 };
90826
90827 Point.prototype.getX = function getX() {
90828 // Normalize coordinates
90829 this.normalize();
90830
90831 return this.x.fromRed();
90832 };
90833
90834 },{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],44:[function(require,module,exports){
90835 'use strict';
90836
90837 var curve = require('../curve');
90838 var elliptic = require('../../elliptic');
90839 var BN = require('bn.js');
90840 var inherits = require('inherits');
90841 var Base = curve.base;
90842
90843 var assert = elliptic.utils.assert;
90844
90845 function ShortCurve(conf) {
90846 Base.call(this, 'short', conf);
90847
90848 this.a = new BN(conf.a, 16).toRed(this.red);
90849 this.b = new BN(conf.b, 16).toRed(this.red);
90850 this.tinv = this.two.redInvm();
90851
90852 this.zeroA = this.a.fromRed().cmpn(0) === 0;
90853 this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
90854
90855 // If the curve is endomorphic, precalculate beta and lambda
90856 this.endo = this._getEndomorphism(conf);
90857 this._endoWnafT1 = new Array(4);
90858 this._endoWnafT2 = new Array(4);
90859 }
90860 inherits(ShortCurve, Base);
90861 module.exports = ShortCurve;
90862
90863 ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
90864 // No efficient endomorphism
90865 if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
90866 return;
90867
90868 // Compute beta and lambda, that lambda * P = (beta * Px; Py)
90869 var beta;
90870 var lambda;
90871 if (conf.beta) {
90872 beta = new BN(conf.beta, 16).toRed(this.red);
90873 } else {
90874 var betas = this._getEndoRoots(this.p);
90875 // Choose the smallest beta
90876 beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
90877 beta = beta.toRed(this.red);
90878 }
90879 if (conf.lambda) {
90880 lambda = new BN(conf.lambda, 16);
90881 } else {
90882 // Choose the lambda that is matching selected beta
90883 var lambdas = this._getEndoRoots(this.n);
90884 if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
90885 lambda = lambdas[0];
90886 } else {
90887 lambda = lambdas[1];
90888 assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
90889 }
90890 }
90891
90892 // Get basis vectors, used for balanced length-two representation
90893 var basis;
90894 if (conf.basis) {
90895 basis = conf.basis.map(function(vec) {
90896 return {
90897 a: new BN(vec.a, 16),
90898 b: new BN(vec.b, 16)
90899 };
90900 });
90901 } else {
90902 basis = this._getEndoBasis(lambda);
90903 }
90904
90905 return {
90906 beta: beta,
90907 lambda: lambda,
90908 basis: basis
90909 };
90910 };
90911
90912 ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
90913 // Find roots of for x^2 + x + 1 in F
90914 // Root = (-1 +- Sqrt(-3)) / 2
90915 //
90916 var red = num === this.p ? this.red : BN.mont(num);
90917 var tinv = new BN(2).toRed(red).redInvm();
90918 var ntinv = tinv.redNeg();
90919
90920 var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
90921
90922 var l1 = ntinv.redAdd(s).fromRed();
90923 var l2 = ntinv.redSub(s).fromRed();
90924 return [ l1, l2 ];
90925 };
90926
90927 ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
90928 // aprxSqrt >= sqrt(this.n)
90929 var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
90930
90931 // 3.74
90932 // Run EGCD, until r(L + 1) < aprxSqrt
90933 var u = lambda;
90934 var v = this.n.clone();
90935 var x1 = new BN(1);
90936 var y1 = new BN(0);
90937 var x2 = new BN(0);
90938 var y2 = new BN(1);
90939
90940 // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
90941 var a0;
90942 var b0;
90943 // First vector
90944 var a1;
90945 var b1;
90946 // Second vector
90947 var a2;
90948 var b2;
90949
90950 var prevR;
90951 var i = 0;
90952 var r;
90953 var x;
90954 while (u.cmpn(0) !== 0) {
90955 var q = v.div(u);
90956 r = v.sub(q.mul(u));
90957 x = x2.sub(q.mul(x1));
90958 var y = y2.sub(q.mul(y1));
90959
90960 if (!a1 && r.cmp(aprxSqrt) < 0) {
90961 a0 = prevR.neg();
90962 b0 = x1;
90963 a1 = r.neg();
90964 b1 = x;
90965 } else if (a1 && ++i === 2) {
90966 break;
90967 }
90968 prevR = r;
90969
90970 v = u;
90971 u = r;
90972 x2 = x1;
90973 x1 = x;
90974 y2 = y1;
90975 y1 = y;
90976 }
90977 a2 = r.neg();
90978 b2 = x;
90979
90980 var len1 = a1.sqr().add(b1.sqr());
90981 var len2 = a2.sqr().add(b2.sqr());
90982 if (len2.cmp(len1) >= 0) {
90983 a2 = a0;
90984 b2 = b0;
90985 }
90986
90987 // Normalize signs
90988 if (a1.negative) {
90989 a1 = a1.neg();
90990 b1 = b1.neg();
90991 }
90992 if (a2.negative) {
90993 a2 = a2.neg();
90994 b2 = b2.neg();
90995 }
90996
90997 return [
90998 { a: a1, b: b1 },
90999 { a: a2, b: b2 }
91000 ];
91001 };
91002
91003 ShortCurve.prototype._endoSplit = function _endoSplit(k) {
91004 var basis = this.endo.basis;
91005 var v1 = basis[0];
91006 var v2 = basis[1];
91007
91008 var c1 = v2.b.mul(k).divRound(this.n);
91009 var c2 = v1.b.neg().mul(k).divRound(this.n);
91010
91011 var p1 = c1.mul(v1.a);
91012 var p2 = c2.mul(v2.a);
91013 var q1 = c1.mul(v1.b);
91014 var q2 = c2.mul(v2.b);
91015
91016 // Calculate answer
91017 var k1 = k.sub(p1).sub(p2);
91018 var k2 = q1.add(q2).neg();
91019 return { k1: k1, k2: k2 };
91020 };
91021
91022 ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
91023 x = new BN(x, 16);
91024 if (!x.red)
91025 x = x.toRed(this.red);
91026
91027 var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
91028 var y = y2.redSqrt();
91029 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
91030 throw new Error('invalid point');
91031
91032 // XXX Is there any way to tell if the number is odd without converting it
91033 // to non-red form?
91034 var isOdd = y.fromRed().isOdd();
91035 if (odd && !isOdd || !odd && isOdd)
91036 y = y.redNeg();
91037
91038 return this.point(x, y);
91039 };
91040
91041 ShortCurve.prototype.validate = function validate(point) {
91042 if (point.inf)
91043 return true;
91044
91045 var x = point.x;
91046 var y = point.y;
91047
91048 var ax = this.a.redMul(x);
91049 var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
91050 return y.redSqr().redISub(rhs).cmpn(0) === 0;
91051 };
91052
91053 ShortCurve.prototype._endoWnafMulAdd =
91054 function _endoWnafMulAdd(points, coeffs, jacobianResult) {
91055 var npoints = this._endoWnafT1;
91056 var ncoeffs = this._endoWnafT2;
91057 for (var i = 0; i < points.length; i++) {
91058 var split = this._endoSplit(coeffs[i]);
91059 var p = points[i];
91060 var beta = p._getBeta();
91061
91062 if (split.k1.negative) {
91063 split.k1.ineg();
91064 p = p.neg(true);
91065 }
91066 if (split.k2.negative) {
91067 split.k2.ineg();
91068 beta = beta.neg(true);
91069 }
91070
91071 npoints[i * 2] = p;
91072 npoints[i * 2 + 1] = beta;
91073 ncoeffs[i * 2] = split.k1;
91074 ncoeffs[i * 2 + 1] = split.k2;
91075 }
91076 var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);
91077
91078 // Clean-up references to points and coefficients
91079 for (var j = 0; j < i * 2; j++) {
91080 npoints[j] = null;
91081 ncoeffs[j] = null;
91082 }
91083 return res;
91084 };
91085
91086 function Point(curve, x, y, isRed) {
91087 Base.BasePoint.call(this, curve, 'affine');
91088 if (x === null && y === null) {
91089 this.x = null;
91090 this.y = null;
91091 this.inf = true;
91092 } else {
91093 this.x = new BN(x, 16);
91094 this.y = new BN(y, 16);
91095 // Force redgomery representation when loading from JSON
91096 if (isRed) {
91097 this.x.forceRed(this.curve.red);
91098 this.y.forceRed(this.curve.red);
91099 }
91100 if (!this.x.red)
91101 this.x = this.x.toRed(this.curve.red);
91102 if (!this.y.red)
91103 this.y = this.y.toRed(this.curve.red);
91104 this.inf = false;
91105 }
91106 }
91107 inherits(Point, Base.BasePoint);
91108
91109 ShortCurve.prototype.point = function point(x, y, isRed) {
91110 return new Point(this, x, y, isRed);
91111 };
91112
91113 ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
91114 return Point.fromJSON(this, obj, red);
91115 };
91116
91117 Point.prototype._getBeta = function _getBeta() {
91118 if (!this.curve.endo)
91119 return;
91120
91121 var pre = this.precomputed;
91122 if (pre && pre.beta)
91123 return pre.beta;
91124
91125 var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
91126 if (pre) {
91127 var curve = this.curve;
91128 var endoMul = function(p) {
91129 return curve.point(p.x.redMul(curve.endo.beta), p.y);
91130 };
91131 pre.beta = beta;
91132 beta.precomputed = {
91133 beta: null,
91134 naf: pre.naf && {
91135 wnd: pre.naf.wnd,
91136 points: pre.naf.points.map(endoMul)
91137 },
91138 doubles: pre.doubles && {
91139 step: pre.doubles.step,
91140 points: pre.doubles.points.map(endoMul)
91141 }
91142 };
91143 }
91144 return beta;
91145 };
91146
91147 Point.prototype.toJSON = function toJSON() {
91148 if (!this.precomputed)
91149 return [ this.x, this.y ];
91150
91151 return [ this.x, this.y, this.precomputed && {
91152 doubles: this.precomputed.doubles && {
91153 step: this.precomputed.doubles.step,
91154 points: this.precomputed.doubles.points.slice(1)
91155 },
91156 naf: this.precomputed.naf && {
91157 wnd: this.precomputed.naf.wnd,
91158 points: this.precomputed.naf.points.slice(1)
91159 }
91160 } ];
91161 };
91162
91163 Point.fromJSON = function fromJSON(curve, obj, red) {
91164 if (typeof obj === 'string')
91165 obj = JSON.parse(obj);
91166 var res = curve.point(obj[0], obj[1], red);
91167 if (!obj[2])
91168 return res;
91169
91170 function obj2point(obj) {
91171 return curve.point(obj[0], obj[1], red);
91172 }
91173
91174 var pre = obj[2];
91175 res.precomputed = {
91176 beta: null,
91177 doubles: pre.doubles && {
91178 step: pre.doubles.step,
91179 points: [ res ].concat(pre.doubles.points.map(obj2point))
91180 },
91181 naf: pre.naf && {
91182 wnd: pre.naf.wnd,
91183 points: [ res ].concat(pre.naf.points.map(obj2point))
91184 }
91185 };
91186 return res;
91187 };
91188
91189 Point.prototype.inspect = function inspect() {
91190 if (this.isInfinity())
91191 return '<EC Point Infinity>';
91192 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
91193 ' y: ' + this.y.fromRed().toString(16, 2) + '>';
91194 };
91195
91196 Point.prototype.isInfinity = function isInfinity() {
91197 return this.inf;
91198 };
91199
91200 Point.prototype.add = function add(p) {
91201 // O + P = P
91202 if (this.inf)
91203 return p;
91204
91205 // P + O = P
91206 if (p.inf)
91207 return this;
91208
91209 // P + P = 2P
91210 if (this.eq(p))
91211 return this.dbl();
91212
91213 // P + (-P) = O
91214 if (this.neg().eq(p))
91215 return this.curve.point(null, null);
91216
91217 // P + Q = O
91218 if (this.x.cmp(p.x) === 0)
91219 return this.curve.point(null, null);
91220
91221 var c = this.y.redSub(p.y);
91222 if (c.cmpn(0) !== 0)
91223 c = c.redMul(this.x.redSub(p.x).redInvm());
91224 var nx = c.redSqr().redISub(this.x).redISub(p.x);
91225 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
91226 return this.curve.point(nx, ny);
91227 };
91228
91229 Point.prototype.dbl = function dbl() {
91230 if (this.inf)
91231 return this;
91232
91233 // 2P = O
91234 var ys1 = this.y.redAdd(this.y);
91235 if (ys1.cmpn(0) === 0)
91236 return this.curve.point(null, null);
91237
91238 var a = this.curve.a;
91239
91240 var x2 = this.x.redSqr();
91241 var dyinv = ys1.redInvm();
91242 var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
91243
91244 var nx = c.redSqr().redISub(this.x.redAdd(this.x));
91245 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
91246 return this.curve.point(nx, ny);
91247 };
91248
91249 Point.prototype.getX = function getX() {
91250 return this.x.fromRed();
91251 };
91252
91253 Point.prototype.getY = function getY() {
91254 return this.y.fromRed();
91255 };
91256
91257 Point.prototype.mul = function mul(k) {
91258 k = new BN(k, 16);
91259
91260 if (this._hasDoubles(k))
91261 return this.curve._fixedNafMul(this, k);
91262 else if (this.curve.endo)
91263 return this.curve._endoWnafMulAdd([ this ], [ k ]);
91264 else
91265 return this.curve._wnafMul(this, k);
91266 };
91267
91268 Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
91269 var points = [ this, p2 ];
91270 var coeffs = [ k1, k2 ];
91271 if (this.curve.endo)
91272 return this.curve._endoWnafMulAdd(points, coeffs);
91273 else
91274 return this.curve._wnafMulAdd(1, points, coeffs, 2);
91275 };
91276
91277 Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
91278 var points = [ this, p2 ];
91279 var coeffs = [ k1, k2 ];
91280 if (this.curve.endo)
91281 return this.curve._endoWnafMulAdd(points, coeffs, true);
91282 else
91283 return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
91284 };
91285
91286 Point.prototype.eq = function eq(p) {
91287 return this === p ||
91288 this.inf === p.inf &&
91289 (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
91290 };
91291
91292 Point.prototype.neg = function neg(_precompute) {
91293 if (this.inf)
91294 return this;
91295
91296 var res = this.curve.point(this.x, this.y.redNeg());
91297 if (_precompute && this.precomputed) {
91298 var pre = this.precomputed;
91299 var negate = function(p) {
91300 return p.neg();
91301 };
91302 res.precomputed = {
91303 naf: pre.naf && {
91304 wnd: pre.naf.wnd,
91305 points: pre.naf.points.map(negate)
91306 },
91307 doubles: pre.doubles && {
91308 step: pre.doubles.step,
91309 points: pre.doubles.points.map(negate)
91310 }
91311 };
91312 }
91313 return res;
91314 };
91315
91316 Point.prototype.toJ = function toJ() {
91317 if (this.inf)
91318 return this.curve.jpoint(null, null, null);
91319
91320 var res = this.curve.jpoint(this.x, this.y, this.curve.one);
91321 return res;
91322 };
91323
91324 function JPoint(curve, x, y, z) {
91325 Base.BasePoint.call(this, curve, 'jacobian');
91326 if (x === null && y === null && z === null) {
91327 this.x = this.curve.one;
91328 this.y = this.curve.one;
91329 this.z = new BN(0);
91330 } else {
91331 this.x = new BN(x, 16);
91332 this.y = new BN(y, 16);
91333 this.z = new BN(z, 16);
91334 }
91335 if (!this.x.red)
91336 this.x = this.x.toRed(this.curve.red);
91337 if (!this.y.red)
91338 this.y = this.y.toRed(this.curve.red);
91339 if (!this.z.red)
91340 this.z = this.z.toRed(this.curve.red);
91341
91342 this.zOne = this.z === this.curve.one;
91343 }
91344 inherits(JPoint, Base.BasePoint);
91345
91346 ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
91347 return new JPoint(this, x, y, z);
91348 };
91349
91350 JPoint.prototype.toP = function toP() {
91351 if (this.isInfinity())
91352 return this.curve.point(null, null);
91353
91354 var zinv = this.z.redInvm();
91355 var zinv2 = zinv.redSqr();
91356 var ax = this.x.redMul(zinv2);
91357 var ay = this.y.redMul(zinv2).redMul(zinv);
91358
91359 return this.curve.point(ax, ay);
91360 };
91361
91362 JPoint.prototype.neg = function neg() {
91363 return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
91364 };
91365
91366 JPoint.prototype.add = function add(p) {
91367 // O + P = P
91368 if (this.isInfinity())
91369 return p;
91370
91371 // P + O = P
91372 if (p.isInfinity())
91373 return this;
91374
91375 // 12M + 4S + 7A
91376 var pz2 = p.z.redSqr();
91377 var z2 = this.z.redSqr();
91378 var u1 = this.x.redMul(pz2);
91379 var u2 = p.x.redMul(z2);
91380 var s1 = this.y.redMul(pz2.redMul(p.z));
91381 var s2 = p.y.redMul(z2.redMul(this.z));
91382
91383 var h = u1.redSub(u2);
91384 var r = s1.redSub(s2);
91385 if (h.cmpn(0) === 0) {
91386 if (r.cmpn(0) !== 0)
91387 return this.curve.jpoint(null, null, null);
91388 else
91389 return this.dbl();
91390 }
91391
91392 var h2 = h.redSqr();
91393 var h3 = h2.redMul(h);
91394 var v = u1.redMul(h2);
91395
91396 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
91397 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
91398 var nz = this.z.redMul(p.z).redMul(h);
91399
91400 return this.curve.jpoint(nx, ny, nz);
91401 };
91402
91403 JPoint.prototype.mixedAdd = function mixedAdd(p) {
91404 // O + P = P
91405 if (this.isInfinity())
91406 return p.toJ();
91407
91408 // P + O = P
91409 if (p.isInfinity())
91410 return this;
91411
91412 // 8M + 3S + 7A
91413 var z2 = this.z.redSqr();
91414 var u1 = this.x;
91415 var u2 = p.x.redMul(z2);
91416 var s1 = this.y;
91417 var s2 = p.y.redMul(z2).redMul(this.z);
91418
91419 var h = u1.redSub(u2);
91420 var r = s1.redSub(s2);
91421 if (h.cmpn(0) === 0) {
91422 if (r.cmpn(0) !== 0)
91423 return this.curve.jpoint(null, null, null);
91424 else
91425 return this.dbl();
91426 }
91427
91428 var h2 = h.redSqr();
91429 var h3 = h2.redMul(h);
91430 var v = u1.redMul(h2);
91431
91432 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
91433 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
91434 var nz = this.z.redMul(h);
91435
91436 return this.curve.jpoint(nx, ny, nz);
91437 };
91438
91439 JPoint.prototype.dblp = function dblp(pow) {
91440 if (pow === 0)
91441 return this;
91442 if (this.isInfinity())
91443 return this;
91444 if (!pow)
91445 return this.dbl();
91446
91447 if (this.curve.zeroA || this.curve.threeA) {
91448 var r = this;
91449 for (var i = 0; i < pow; i++)
91450 r = r.dbl();
91451 return r;
91452 }
91453
91454 // 1M + 2S + 1A + N * (4S + 5M + 8A)
91455 // N = 1 => 6M + 6S + 9A
91456 var a = this.curve.a;
91457 var tinv = this.curve.tinv;
91458
91459 var jx = this.x;
91460 var jy = this.y;
91461 var jz = this.z;
91462 var jz4 = jz.redSqr().redSqr();
91463
91464 // Reuse results
91465 var jyd = jy.redAdd(jy);
91466 for (var i = 0; i < pow; i++) {
91467 var jx2 = jx.redSqr();
91468 var jyd2 = jyd.redSqr();
91469 var jyd4 = jyd2.redSqr();
91470 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
91471
91472 var t1 = jx.redMul(jyd2);
91473 var nx = c.redSqr().redISub(t1.redAdd(t1));
91474 var t2 = t1.redISub(nx);
91475 var dny = c.redMul(t2);
91476 dny = dny.redIAdd(dny).redISub(jyd4);
91477 var nz = jyd.redMul(jz);
91478 if (i + 1 < pow)
91479 jz4 = jz4.redMul(jyd4);
91480
91481 jx = nx;
91482 jz = nz;
91483 jyd = dny;
91484 }
91485
91486 return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
91487 };
91488
91489 JPoint.prototype.dbl = function dbl() {
91490 if (this.isInfinity())
91491 return this;
91492
91493 if (this.curve.zeroA)
91494 return this._zeroDbl();
91495 else if (this.curve.threeA)
91496 return this._threeDbl();
91497 else
91498 return this._dbl();
91499 };
91500
91501 JPoint.prototype._zeroDbl = function _zeroDbl() {
91502 var nx;
91503 var ny;
91504 var nz;
91505 // Z = 1
91506 if (this.zOne) {
91507 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
91508 // #doubling-mdbl-2007-bl
91509 // 1M + 5S + 14A
91510
91511 // XX = X1^2
91512 var xx = this.x.redSqr();
91513 // YY = Y1^2
91514 var yy = this.y.redSqr();
91515 // YYYY = YY^2
91516 var yyyy = yy.redSqr();
91517 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
91518 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
91519 s = s.redIAdd(s);
91520 // M = 3 * XX + a; a = 0
91521 var m = xx.redAdd(xx).redIAdd(xx);
91522 // T = M ^ 2 - 2*S
91523 var t = m.redSqr().redISub(s).redISub(s);
91524
91525 // 8 * YYYY
91526 var yyyy8 = yyyy.redIAdd(yyyy);
91527 yyyy8 = yyyy8.redIAdd(yyyy8);
91528 yyyy8 = yyyy8.redIAdd(yyyy8);
91529
91530 // X3 = T
91531 nx = t;
91532 // Y3 = M * (S - T) - 8 * YYYY
91533 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
91534 // Z3 = 2*Y1
91535 nz = this.y.redAdd(this.y);
91536 } else {
91537 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
91538 // #doubling-dbl-2009-l
91539 // 2M + 5S + 13A
91540
91541 // A = X1^2
91542 var a = this.x.redSqr();
91543 // B = Y1^2
91544 var b = this.y.redSqr();
91545 // C = B^2
91546 var c = b.redSqr();
91547 // D = 2 * ((X1 + B)^2 - A - C)
91548 var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
91549 d = d.redIAdd(d);
91550 // E = 3 * A
91551 var e = a.redAdd(a).redIAdd(a);
91552 // F = E^2
91553 var f = e.redSqr();
91554
91555 // 8 * C
91556 var c8 = c.redIAdd(c);
91557 c8 = c8.redIAdd(c8);
91558 c8 = c8.redIAdd(c8);
91559
91560 // X3 = F - 2 * D
91561 nx = f.redISub(d).redISub(d);
91562 // Y3 = E * (D - X3) - 8 * C
91563 ny = e.redMul(d.redISub(nx)).redISub(c8);
91564 // Z3 = 2 * Y1 * Z1
91565 nz = this.y.redMul(this.z);
91566 nz = nz.redIAdd(nz);
91567 }
91568
91569 return this.curve.jpoint(nx, ny, nz);
91570 };
91571
91572 JPoint.prototype._threeDbl = function _threeDbl() {
91573 var nx;
91574 var ny;
91575 var nz;
91576 // Z = 1
91577 if (this.zOne) {
91578 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html
91579 // #doubling-mdbl-2007-bl
91580 // 1M + 5S + 15A
91581
91582 // XX = X1^2
91583 var xx = this.x.redSqr();
91584 // YY = Y1^2
91585 var yy = this.y.redSqr();
91586 // YYYY = YY^2
91587 var yyyy = yy.redSqr();
91588 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
91589 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
91590 s = s.redIAdd(s);
91591 // M = 3 * XX + a
91592 var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
91593 // T = M^2 - 2 * S
91594 var t = m.redSqr().redISub(s).redISub(s);
91595 // X3 = T
91596 nx = t;
91597 // Y3 = M * (S - T) - 8 * YYYY
91598 var yyyy8 = yyyy.redIAdd(yyyy);
91599 yyyy8 = yyyy8.redIAdd(yyyy8);
91600 yyyy8 = yyyy8.redIAdd(yyyy8);
91601 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
91602 // Z3 = 2 * Y1
91603 nz = this.y.redAdd(this.y);
91604 } else {
91605 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
91606 // 3M + 5S
91607
91608 // delta = Z1^2
91609 var delta = this.z.redSqr();
91610 // gamma = Y1^2
91611 var gamma = this.y.redSqr();
91612 // beta = X1 * gamma
91613 var beta = this.x.redMul(gamma);
91614 // alpha = 3 * (X1 - delta) * (X1 + delta)
91615 var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
91616 alpha = alpha.redAdd(alpha).redIAdd(alpha);
91617 // X3 = alpha^2 - 8 * beta
91618 var beta4 = beta.redIAdd(beta);
91619 beta4 = beta4.redIAdd(beta4);
91620 var beta8 = beta4.redAdd(beta4);
91621 nx = alpha.redSqr().redISub(beta8);
91622 // Z3 = (Y1 + Z1)^2 - gamma - delta
91623 nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
91624 // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2
91625 var ggamma8 = gamma.redSqr();
91626 ggamma8 = ggamma8.redIAdd(ggamma8);
91627 ggamma8 = ggamma8.redIAdd(ggamma8);
91628 ggamma8 = ggamma8.redIAdd(ggamma8);
91629 ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
91630 }
91631
91632 return this.curve.jpoint(nx, ny, nz);
91633 };
91634
91635 JPoint.prototype._dbl = function _dbl() {
91636 var a = this.curve.a;
91637
91638 // 4M + 6S + 10A
91639 var jx = this.x;
91640 var jy = this.y;
91641 var jz = this.z;
91642 var jz4 = jz.redSqr().redSqr();
91643
91644 var jx2 = jx.redSqr();
91645 var jy2 = jy.redSqr();
91646
91647 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
91648
91649 var jxd4 = jx.redAdd(jx);
91650 jxd4 = jxd4.redIAdd(jxd4);
91651 var t1 = jxd4.redMul(jy2);
91652 var nx = c.redSqr().redISub(t1.redAdd(t1));
91653 var t2 = t1.redISub(nx);
91654
91655 var jyd8 = jy2.redSqr();
91656 jyd8 = jyd8.redIAdd(jyd8);
91657 jyd8 = jyd8.redIAdd(jyd8);
91658 jyd8 = jyd8.redIAdd(jyd8);
91659 var ny = c.redMul(t2).redISub(jyd8);
91660 var nz = jy.redAdd(jy).redMul(jz);
91661
91662 return this.curve.jpoint(nx, ny, nz);
91663 };
91664
91665 JPoint.prototype.trpl = function trpl() {
91666 if (!this.curve.zeroA)
91667 return this.dbl().add(this);
91668
91669 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl
91670 // 5M + 10S + ...
91671
91672 // XX = X1^2
91673 var xx = this.x.redSqr();
91674 // YY = Y1^2
91675 var yy = this.y.redSqr();
91676 // ZZ = Z1^2
91677 var zz = this.z.redSqr();
91678 // YYYY = YY^2
91679 var yyyy = yy.redSqr();
91680 // M = 3 * XX + a * ZZ2; a = 0
91681 var m = xx.redAdd(xx).redIAdd(xx);
91682 // MM = M^2
91683 var mm = m.redSqr();
91684 // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM
91685 var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
91686 e = e.redIAdd(e);
91687 e = e.redAdd(e).redIAdd(e);
91688 e = e.redISub(mm);
91689 // EE = E^2
91690 var ee = e.redSqr();
91691 // T = 16*YYYY
91692 var t = yyyy.redIAdd(yyyy);
91693 t = t.redIAdd(t);
91694 t = t.redIAdd(t);
91695 t = t.redIAdd(t);
91696 // U = (M + E)^2 - MM - EE - T
91697 var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
91698 // X3 = 4 * (X1 * EE - 4 * YY * U)
91699 var yyu4 = yy.redMul(u);
91700 yyu4 = yyu4.redIAdd(yyu4);
91701 yyu4 = yyu4.redIAdd(yyu4);
91702 var nx = this.x.redMul(ee).redISub(yyu4);
91703 nx = nx.redIAdd(nx);
91704 nx = nx.redIAdd(nx);
91705 // Y3 = 8 * Y1 * (U * (T - U) - E * EE)
91706 var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
91707 ny = ny.redIAdd(ny);
91708 ny = ny.redIAdd(ny);
91709 ny = ny.redIAdd(ny);
91710 // Z3 = (Z1 + E)^2 - ZZ - EE
91711 var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
91712
91713 return this.curve.jpoint(nx, ny, nz);
91714 };
91715
91716 JPoint.prototype.mul = function mul(k, kbase) {
91717 k = new BN(k, kbase);
91718
91719 return this.curve._wnafMul(this, k);
91720 };
91721
91722 JPoint.prototype.eq = function eq(p) {
91723 if (p.type === 'affine')
91724 return this.eq(p.toJ());
91725
91726 if (this === p)
91727 return true;
91728
91729 // x1 * z2^2 == x2 * z1^2
91730 var z2 = this.z.redSqr();
91731 var pz2 = p.z.redSqr();
91732 if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
91733 return false;
91734
91735 // y1 * z2^3 == y2 * z1^3
91736 var z3 = z2.redMul(this.z);
91737 var pz3 = pz2.redMul(p.z);
91738 return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
91739 };
91740
91741 JPoint.prototype.eqXToP = function eqXToP(x) {
91742 var zs = this.z.redSqr();
91743 var rx = x.toRed(this.curve.red).redMul(zs);
91744 if (this.x.cmp(rx) === 0)
91745 return true;
91746
91747 var xc = x.clone();
91748 var t = this.curve.redN.redMul(zs);
91749 for (;;) {
91750 xc.iadd(this.curve.n);
91751 if (xc.cmp(this.curve.p) >= 0)
91752 return false;
91753
91754 rx.redIAdd(t);
91755 if (this.x.cmp(rx) === 0)
91756 return true;
91757 }
91758 return false;
91759 };
91760
91761 JPoint.prototype.inspect = function inspect() {
91762 if (this.isInfinity())
91763 return '<EC JPoint Infinity>';
91764 return '<EC JPoint x: ' + this.x.toString(16, 2) +
91765 ' y: ' + this.y.toString(16, 2) +
91766 ' z: ' + this.z.toString(16, 2) + '>';
91767 };
91768
91769 JPoint.prototype.isInfinity = function isInfinity() {
91770 // XXX This code assumes that zero is always zero in red
91771 return this.z.cmpn(0) === 0;
91772 };
91773
91774 },{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],45:[function(require,module,exports){
91775 'use strict';
91776
91777 var curves = exports;
91778
91779 var hash = require('hash.js');
91780 var elliptic = require('../elliptic');
91781
91782 var assert = elliptic.utils.assert;
91783
91784 function PresetCurve(options) {
91785 if (options.type === 'short')
91786 this.curve = new elliptic.curve.short(options);
91787 else if (options.type === 'edwards')
91788 this.curve = new elliptic.curve.edwards(options);
91789 else
91790 this.curve = new elliptic.curve.mont(options);
91791 this.g = this.curve.g;
91792 this.n = this.curve.n;
91793 this.hash = options.hash;
91794
91795 assert(this.g.validate(), 'Invalid curve');
91796 assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');
91797 }
91798 curves.PresetCurve = PresetCurve;
91799
91800 function defineCurve(name, options) {
91801 Object.defineProperty(curves, name, {
91802 configurable: true,
91803 enumerable: true,
91804 get: function() {
91805 var curve = new PresetCurve(options);
91806 Object.defineProperty(curves, name, {
91807 configurable: true,
91808 enumerable: true,
91809 value: curve
91810 });
91811 return curve;
91812 }
91813 });
91814 }
91815
91816 defineCurve('p192', {
91817 type: 'short',
91818 prime: 'p192',
91819 p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
91820 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
91821 b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
91822 n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
91823 hash: hash.sha256,
91824 gRed: false,
91825 g: [
91826 '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',
91827 '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'
91828 ]
91829 });
91830
91831 defineCurve('p224', {
91832 type: 'short',
91833 prime: 'p224',
91834 p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
91835 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
91836 b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
91837 n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
91838 hash: hash.sha256,
91839 gRed: false,
91840 g: [
91841 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',
91842 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'
91843 ]
91844 });
91845
91846 defineCurve('p256', {
91847 type: 'short',
91848 prime: null,
91849 p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
91850 a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
91851 b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
91852 n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
91853 hash: hash.sha256,
91854 gRed: false,
91855 g: [
91856 '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',
91857 '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'
91858 ]
91859 });
91860
91861 defineCurve('p384', {
91862 type: 'short',
91863 prime: null,
91864 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
91865 'fffffffe ffffffff 00000000 00000000 ffffffff',
91866 a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
91867 'fffffffe ffffffff 00000000 00000000 fffffffc',
91868 b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +
91869 '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
91870 n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +
91871 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
91872 hash: hash.sha384,
91873 gRed: false,
91874 g: [
91875 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +
91876 '5502f25d bf55296c 3a545e38 72760ab7',
91877 '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +
91878 '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'
91879 ]
91880 });
91881
91882 defineCurve('p521', {
91883 type: 'short',
91884 prime: null,
91885 p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
91886 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
91887 'ffffffff ffffffff ffffffff ffffffff ffffffff',
91888 a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
91889 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
91890 'ffffffff ffffffff ffffffff ffffffff fffffffc',
91891 b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +
91892 '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +
91893 '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
91894 n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
91895 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +
91896 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
91897 hash: hash.sha512,
91898 gRed: false,
91899 g: [
91900 '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +
91901 '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +
91902 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',
91903 '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +
91904 '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +
91905 '3fad0761 353c7086 a272c240 88be9476 9fd16650'
91906 ]
91907 });
91908
91909 defineCurve('curve25519', {
91910 type: 'mont',
91911 prime: 'p25519',
91912 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
91913 a: '76d06',
91914 b: '1',
91915 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
91916 hash: hash.sha256,
91917 gRed: false,
91918 g: [
91919 '9'
91920 ]
91921 });
91922
91923 defineCurve('ed25519', {
91924 type: 'edwards',
91925 prime: 'p25519',
91926 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
91927 a: '-1',
91928 c: '1',
91929 // -121665 * (121666^(-1)) (mod P)
91930 d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
91931 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
91932 hash: hash.sha256,
91933 gRed: false,
91934 g: [
91935 '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',
91936
91937 // 4/5
91938 '6666666666666666666666666666666666666666666666666666666666666658'
91939 ]
91940 });
91941
91942 var pre;
91943 try {
91944 pre = require('./precomputed/secp256k1');
91945 } catch (e) {
91946 pre = undefined;
91947 }
91948
91949 defineCurve('secp256k1', {
91950 type: 'short',
91951 prime: 'k256',
91952 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
91953 a: '0',
91954 b: '7',
91955 n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
91956 h: '1',
91957 hash: hash.sha256,
91958
91959 // Precomputed endomorphism
91960 beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
91961 lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
91962 basis: [
91963 {
91964 a: '3086d221a7d46bcde86c90e49284eb15',
91965 b: '-e4437ed6010e88286f547fa90abfe4c3'
91966 },
91967 {
91968 a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
91969 b: '3086d221a7d46bcde86c90e49284eb15'
91970 }
91971 ],
91972
91973 gRed: false,
91974 g: [
91975 '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
91976 '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
91977 pre
91978 ]
91979 });
91980
91981 },{"../elliptic":39,"./precomputed/secp256k1":53,"hash.js":57}],46:[function(require,module,exports){
91982 'use strict';
91983
91984 var BN = require('bn.js');
91985 var elliptic = require('../../elliptic');
91986 var utils = elliptic.utils;
91987 var assert = utils.assert;
91988
91989 var KeyPair = require('./key');
91990 var Signature = require('./signature');
91991
91992 function EC(options) {
91993 if (!(this instanceof EC))
91994 return new EC(options);
91995
91996 // Shortcut `elliptic.ec(curve-name)`
91997 if (typeof options === 'string') {
91998 assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);
91999
92000 options = elliptic.curves[options];
92001 }
92002
92003 // Shortcut for `elliptic.ec(elliptic.curves.curveName)`
92004 if (options instanceof elliptic.curves.PresetCurve)
92005 options = { curve: options };
92006
92007 this.curve = options.curve.curve;
92008 this.n = this.curve.n;
92009 this.nh = this.n.ushrn(1);
92010 this.g = this.curve.g;
92011
92012 // Point on curve
92013 this.g = options.curve.g;
92014 this.g.precompute(options.curve.n.bitLength() + 1);
92015
92016 // Hash for function for DRBG
92017 this.hash = options.hash || options.curve.hash;
92018 }
92019 module.exports = EC;
92020
92021 EC.prototype.keyPair = function keyPair(options) {
92022 return new KeyPair(this, options);
92023 };
92024
92025 EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
92026 return KeyPair.fromPrivate(this, priv, enc);
92027 };
92028
92029 EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
92030 return KeyPair.fromPublic(this, pub, enc);
92031 };
92032
92033 EC.prototype.genKeyPair = function genKeyPair(options) {
92034 if (!options)
92035 options = {};
92036
92037 // Instantiate Hmac_DRBG
92038 var drbg = new elliptic.hmacDRBG({
92039 hash: this.hash,
92040 pers: options.pers,
92041 entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),
92042 nonce: this.n.toArray()
92043 });
92044
92045 var bytes = this.n.byteLength();
92046 var ns2 = this.n.sub(new BN(2));
92047 do {
92048 var priv = new BN(drbg.generate(bytes));
92049 if (priv.cmp(ns2) > 0)
92050 continue;
92051
92052 priv.iaddn(1);
92053 return this.keyFromPrivate(priv);
92054 } while (true);
92055 };
92056
92057 EC.prototype._truncateToN = function truncateToN(msg, truncOnly) {
92058 var delta = msg.byteLength() * 8 - this.n.bitLength();
92059 if (delta > 0)
92060 msg = msg.ushrn(delta);
92061 if (!truncOnly && msg.cmp(this.n) >= 0)
92062 return msg.sub(this.n);
92063 else
92064 return msg;
92065 };
92066
92067 EC.prototype.sign = function sign(msg, key, enc, options) {
92068 if (typeof enc === 'object') {
92069 options = enc;
92070 enc = null;
92071 }
92072 if (!options)
92073 options = {};
92074
92075 key = this.keyFromPrivate(key, enc);
92076 msg = this._truncateToN(new BN(msg, 16));
92077
92078 // Zero-extend key to provide enough entropy
92079 var bytes = this.n.byteLength();
92080 var bkey = key.getPrivate().toArray('be', bytes);
92081
92082 // Zero-extend nonce to have the same byte size as N
92083 var nonce = msg.toArray('be', bytes);
92084
92085 // Instantiate Hmac_DRBG
92086 var drbg = new elliptic.hmacDRBG({
92087 hash: this.hash,
92088 entropy: bkey,
92089 nonce: nonce,
92090 pers: options.pers,
92091 persEnc: options.persEnc
92092 });
92093
92094 // Number of bytes to generate
92095 var ns1 = this.n.sub(new BN(1));
92096
92097 for (var iter = 0; true; iter++) {
92098 var k = options.k ?
92099 options.k(iter) :
92100 new BN(drbg.generate(this.n.byteLength()));
92101 k = this._truncateToN(k, true);
92102 if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
92103 continue;
92104
92105 var kp = this.g.mul(k);
92106 if (kp.isInfinity())
92107 continue;
92108
92109 var kpX = kp.getX();
92110 var r = kpX.umod(this.n);
92111 if (r.cmpn(0) === 0)
92112 continue;
92113
92114 var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
92115 s = s.umod(this.n);
92116 if (s.cmpn(0) === 0)
92117 continue;
92118
92119 var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |
92120 (kpX.cmp(r) !== 0 ? 2 : 0);
92121
92122 // Use complement of `s`, if it is > `n / 2`
92123 if (options.canonical && s.cmp(this.nh) > 0) {
92124 s = this.n.sub(s);
92125 recoveryParam ^= 1;
92126 }
92127
92128 return new Signature({ r: r, s: s, recoveryParam: recoveryParam });
92129 }
92130 };
92131
92132 EC.prototype.verify = function verify(msg, signature, key, enc) {
92133 msg = this._truncateToN(new BN(msg, 16));
92134 key = this.keyFromPublic(key, enc);
92135 signature = new Signature(signature, 'hex');
92136
92137 // Perform primitive values validation
92138 var r = signature.r;
92139 var s = signature.s;
92140 if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
92141 return false;
92142 if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
92143 return false;
92144
92145 // Validate signature
92146 var sinv = s.invm(this.n);
92147 var u1 = sinv.mul(msg).umod(this.n);
92148 var u2 = sinv.mul(r).umod(this.n);
92149
92150 if (!this.curve._maxwellTrick) {
92151 var p = this.g.mulAdd(u1, key.getPublic(), u2);
92152 if (p.isInfinity())
92153 return false;
92154
92155 return p.getX().umod(this.n).cmp(r) === 0;
92156 }
92157
92158 // NOTE: Greg Maxwell's trick, inspired by:
92159 // https://git.io/vad3K
92160
92161 var p = this.g.jmulAdd(u1, key.getPublic(), u2);
92162 if (p.isInfinity())
92163 return false;
92164
92165 // Compare `p.x` of Jacobian point with `r`,
92166 // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
92167 // inverse of `p.z^2`
92168 return p.eqXToP(r);
92169 };
92170
92171 EC.prototype.recoverPubKey = function(msg, signature, j, enc) {
92172 assert((3 & j) === j, 'The recovery param is more than two bits');
92173 signature = new Signature(signature, enc);
92174
92175 var n = this.n;
92176 var e = new BN(msg);
92177 var r = signature.r;
92178 var s = signature.s;
92179
92180 // A set LSB signifies that the y-coordinate is odd
92181 var isYOdd = j & 1;
92182 var isSecondKey = j >> 1;
92183 if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
92184 throw new Error('Unable to find sencond key candinate');
92185
92186 // 1.1. Let x = r + jn.
92187 if (isSecondKey)
92188 r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
92189 else
92190 r = this.curve.pointFromX(r, isYOdd);
92191
92192 var rInv = signature.r.invm(n);
92193 var s1 = n.sub(e).mul(rInv).umod(n);
92194 var s2 = s.mul(rInv).umod(n);
92195
92196 // 1.6.1 Compute Q = r^-1 (sR - eG)
92197 // Q = r^-1 (sR + -eG)
92198 return this.g.mulAdd(s1, r, s2);
92199 };
92200
92201 EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {
92202 signature = new Signature(signature, enc);
92203 if (signature.recoveryParam !== null)
92204 return signature.recoveryParam;
92205
92206 for (var i = 0; i < 4; i++) {
92207 var Qprime;
92208 try {
92209 Qprime = this.recoverPubKey(e, signature, i);
92210 } catch (e) {
92211 continue;
92212 }
92213
92214 if (Qprime.eq(Q))
92215 return i;
92216 }
92217 throw new Error('Unable to find valid recovery factor');
92218 };
92219
92220 },{"../../elliptic":39,"./key":47,"./signature":48,"bn.js":33}],47:[function(require,module,exports){
92221 'use strict';
92222
92223 var BN = require('bn.js');
92224 var elliptic = require('../../elliptic');
92225 var utils = elliptic.utils;
92226 var assert = utils.assert;
92227
92228 function KeyPair(ec, options) {
92229 this.ec = ec;
92230 this.priv = null;
92231 this.pub = null;
92232
92233 // KeyPair(ec, { priv: ..., pub: ... })
92234 if (options.priv)
92235 this._importPrivate(options.priv, options.privEnc);
92236 if (options.pub)
92237 this._importPublic(options.pub, options.pubEnc);
92238 }
92239 module.exports = KeyPair;
92240
92241 KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
92242 if (pub instanceof KeyPair)
92243 return pub;
92244
92245 return new KeyPair(ec, {
92246 pub: pub,
92247 pubEnc: enc
92248 });
92249 };
92250
92251 KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
92252 if (priv instanceof KeyPair)
92253 return priv;
92254
92255 return new KeyPair(ec, {
92256 priv: priv,
92257 privEnc: enc
92258 });
92259 };
92260
92261 KeyPair.prototype.validate = function validate() {
92262 var pub = this.getPublic();
92263
92264 if (pub.isInfinity())
92265 return { result: false, reason: 'Invalid public key' };
92266 if (!pub.validate())
92267 return { result: false, reason: 'Public key is not a point' };
92268 if (!pub.mul(this.ec.curve.n).isInfinity())
92269 return { result: false, reason: 'Public key * N != O' };
92270
92271 return { result: true, reason: null };
92272 };
92273
92274 KeyPair.prototype.getPublic = function getPublic(compact, enc) {
92275 // compact is optional argument
92276 if (typeof compact === 'string') {
92277 enc = compact;
92278 compact = null;
92279 }
92280
92281 if (!this.pub)
92282 this.pub = this.ec.g.mul(this.priv);
92283
92284 if (!enc)
92285 return this.pub;
92286
92287 return this.pub.encode(enc, compact);
92288 };
92289
92290 KeyPair.prototype.getPrivate = function getPrivate(enc) {
92291 if (enc === 'hex')
92292 return this.priv.toString(16, 2);
92293 else
92294 return this.priv;
92295 };
92296
92297 KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
92298 this.priv = new BN(key, enc || 16);
92299
92300 // Ensure that the priv won't be bigger than n, otherwise we may fail
92301 // in fixed multiplication method
92302 this.priv = this.priv.umod(this.ec.curve.n);
92303 };
92304
92305 KeyPair.prototype._importPublic = function _importPublic(key, enc) {
92306 if (key.x || key.y) {
92307 // Montgomery points only have an `x` coordinate.
92308 // Weierstrass/Edwards points on the other hand have both `x` and
92309 // `y` coordinates.
92310 if (this.ec.curve.type === 'mont') {
92311 assert(key.x, 'Need x coordinate');
92312 } else if (this.ec.curve.type === 'short' ||
92313 this.ec.curve.type === 'edwards') {
92314 assert(key.x && key.y, 'Need both x and y coordinate');
92315 }
92316 this.pub = this.ec.curve.point(key.x, key.y);
92317 return;
92318 }
92319 this.pub = this.ec.curve.decodePoint(key, enc);
92320 };
92321
92322 // ECDH
92323 KeyPair.prototype.derive = function derive(pub) {
92324 return pub.mul(this.priv).getX();
92325 };
92326
92327 // ECDSA
92328 KeyPair.prototype.sign = function sign(msg, enc, options) {
92329 return this.ec.sign(msg, this, enc, options);
92330 };
92331
92332 KeyPair.prototype.verify = function verify(msg, signature) {
92333 return this.ec.verify(msg, signature, this);
92334 };
92335
92336 KeyPair.prototype.inspect = function inspect() {
92337 return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +
92338 ' pub: ' + (this.pub && this.pub.inspect()) + ' >';
92339 };
92340
92341 },{"../../elliptic":39,"bn.js":33}],48:[function(require,module,exports){
92342 'use strict';
92343
92344 var BN = require('bn.js');
92345
92346 var elliptic = require('../../elliptic');
92347 var utils = elliptic.utils;
92348 var assert = utils.assert;
92349
92350 function Signature(options, enc) {
92351 if (options instanceof Signature)
92352 return options;
92353
92354 if (this._importDER(options, enc))
92355 return;
92356
92357 assert(options.r && options.s, 'Signature without r or s');
92358 this.r = new BN(options.r, 16);
92359 this.s = new BN(options.s, 16);
92360 if (options.recoveryParam === undefined)
92361 this.recoveryParam = null;
92362 else
92363 this.recoveryParam = options.recoveryParam;
92364 }
92365 module.exports = Signature;
92366
92367 function Position() {
92368 this.place = 0;
92369 }
92370
92371 function getLength(buf, p) {
92372 var initial = buf[p.place++];
92373 if (!(initial & 0x80)) {
92374 return initial;
92375 }
92376 var octetLen = initial & 0xf;
92377 var val = 0;
92378 for (var i = 0, off = p.place; i < octetLen; i++, off++) {
92379 val <<= 8;
92380 val |= buf[off];
92381 }
92382 p.place = off;
92383 return val;
92384 }
92385
92386 function rmPadding(buf) {
92387 var i = 0;
92388 var len = buf.length - 1;
92389 while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {
92390 i++;
92391 }
92392 if (i === 0) {
92393 return buf;
92394 }
92395 return buf.slice(i);
92396 }
92397
92398 Signature.prototype._importDER = function _importDER(data, enc) {
92399 data = utils.toArray(data, enc);
92400 var p = new Position();
92401 if (data[p.place++] !== 0x30) {
92402 return false;
92403 }
92404 var len = getLength(data, p);
92405 if ((len + p.place) !== data.length) {
92406 return false;
92407 }
92408 if (data[p.place++] !== 0x02) {
92409 return false;
92410 }
92411 var rlen = getLength(data, p);
92412 var r = data.slice(p.place, rlen + p.place);
92413 p.place += rlen;
92414 if (data[p.place++] !== 0x02) {
92415 return false;
92416 }
92417 var slen = getLength(data, p);
92418 if (data.length !== slen + p.place) {
92419 return false;
92420 }
92421 var s = data.slice(p.place, slen + p.place);
92422 if (r[0] === 0 && (r[1] & 0x80)) {
92423 r = r.slice(1);
92424 }
92425 if (s[0] === 0 && (s[1] & 0x80)) {
92426 s = s.slice(1);
92427 }
92428
92429 this.r = new BN(r);
92430 this.s = new BN(s);
92431 this.recoveryParam = null;
92432
92433 return true;
92434 };
92435
92436 function constructLength(arr, len) {
92437 if (len < 0x80) {
92438 arr.push(len);
92439 return;
92440 }
92441 var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
92442 arr.push(octets | 0x80);
92443 while (--octets) {
92444 arr.push((len >>> (octets << 3)) & 0xff);
92445 }
92446 arr.push(len);
92447 }
92448
92449 Signature.prototype.toDER = function toDER(enc) {
92450 var r = this.r.toArray();
92451 var s = this.s.toArray();
92452
92453 // Pad values
92454 if (r[0] & 0x80)
92455 r = [ 0 ].concat(r);
92456 // Pad values
92457 if (s[0] & 0x80)
92458 s = [ 0 ].concat(s);
92459
92460 r = rmPadding(r);
92461 s = rmPadding(s);
92462
92463 while (!s[0] && !(s[1] & 0x80)) {
92464 s = s.slice(1);
92465 }
92466 var arr = [ 0x02 ];
92467 constructLength(arr, r.length);
92468 arr = arr.concat(r);
92469 arr.push(0x02);
92470 constructLength(arr, s.length);
92471 var backHalf = arr.concat(s);
92472 var res = [ 0x30 ];
92473 constructLength(res, backHalf.length);
92474 res = res.concat(backHalf);
92475 return utils.encode(res, enc);
92476 };
92477
92478 },{"../../elliptic":39,"bn.js":33}],49:[function(require,module,exports){
92479 'use strict';
92480
92481 var hash = require('hash.js');
92482 var elliptic = require('../../elliptic');
92483 var utils = elliptic.utils;
92484 var assert = utils.assert;
92485 var parseBytes = utils.parseBytes;
92486 var KeyPair = require('./key');
92487 var Signature = require('./signature');
92488
92489 function EDDSA(curve) {
92490 assert(curve === 'ed25519', 'only tested with ed25519 so far');
92491
92492 if (!(this instanceof EDDSA))
92493 return new EDDSA(curve);
92494
92495 var curve = elliptic.curves[curve].curve;
92496 this.curve = curve;
92497 this.g = curve.g;
92498 this.g.precompute(curve.n.bitLength() + 1);
92499
92500 this.pointClass = curve.point().constructor;
92501 this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
92502 this.hash = hash.sha512;
92503 }
92504
92505 module.exports = EDDSA;
92506
92507 /**
92508 * @param {Array|String} message - message bytes
92509 * @param {Array|String|KeyPair} secret - secret bytes or a keypair
92510 * @returns {Signature} - signature
92511 */
92512 EDDSA.prototype.sign = function sign(message, secret) {
92513 message = parseBytes(message);
92514 var key = this.keyFromSecret(secret);
92515 var r = this.hashInt(key.messagePrefix(), message);
92516 var R = this.g.mul(r);
92517 var Rencoded = this.encodePoint(R);
92518 var s_ = this.hashInt(Rencoded, key.pubBytes(), message)
92519 .mul(key.priv());
92520 var S = r.add(s_).umod(this.curve.n);
92521 return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });
92522 };
92523
92524 /**
92525 * @param {Array} message - message bytes
92526 * @param {Array|String|Signature} sig - sig bytes
92527 * @param {Array|String|Point|KeyPair} pub - public key
92528 * @returns {Boolean} - true if public key matches sig of message
92529 */
92530 EDDSA.prototype.verify = function verify(message, sig, pub) {
92531 message = parseBytes(message);
92532 sig = this.makeSignature(sig);
92533 var key = this.keyFromPublic(pub);
92534 var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
92535 var SG = this.g.mul(sig.S());
92536 var RplusAh = sig.R().add(key.pub().mul(h));
92537 return RplusAh.eq(SG);
92538 };
92539
92540 EDDSA.prototype.hashInt = function hashInt() {
92541 var hash = this.hash();
92542 for (var i = 0; i < arguments.length; i++)
92543 hash.update(arguments[i]);
92544 return utils.intFromLE(hash.digest()).umod(this.curve.n);
92545 };
92546
92547 EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
92548 return KeyPair.fromPublic(this, pub);
92549 };
92550
92551 EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
92552 return KeyPair.fromSecret(this, secret);
92553 };
92554
92555 EDDSA.prototype.makeSignature = function makeSignature(sig) {
92556 if (sig instanceof Signature)
92557 return sig;
92558 return new Signature(this, sig);
92559 };
92560
92561 /**
92562 * * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
92563 *
92564 * EDDSA defines methods for encoding and decoding points and integers. These are
92565 * helper convenience methods, that pass along to utility functions implied
92566 * parameters.
92567 *
92568 */
92569 EDDSA.prototype.encodePoint = function encodePoint(point) {
92570 var enc = point.getY().toArray('le', this.encodingLength);
92571 enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
92572 return enc;
92573 };
92574
92575 EDDSA.prototype.decodePoint = function decodePoint(bytes) {
92576 bytes = utils.parseBytes(bytes);
92577
92578 var lastIx = bytes.length - 1;
92579 var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
92580 var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
92581
92582 var y = utils.intFromLE(normed);
92583 return this.curve.pointFromY(y, xIsOdd);
92584 };
92585
92586 EDDSA.prototype.encodeInt = function encodeInt(num) {
92587 return num.toArray('le', this.encodingLength);
92588 };
92589
92590 EDDSA.prototype.decodeInt = function decodeInt(bytes) {
92591 return utils.intFromLE(bytes);
92592 };
92593
92594 EDDSA.prototype.isPoint = function isPoint(val) {
92595 return val instanceof this.pointClass;
92596 };
92597
92598 },{"../../elliptic":39,"./key":50,"./signature":51,"hash.js":57}],50:[function(require,module,exports){
92599 'use strict';
92600
92601 var elliptic = require('../../elliptic');
92602 var utils = elliptic.utils;
92603 var assert = utils.assert;
92604 var parseBytes = utils.parseBytes;
92605 var cachedProperty = utils.cachedProperty;
92606
92607 /**
92608 * @param {EDDSA} eddsa - instance
92609 * @param {Object} params - public/private key parameters
92610 *
92611 * @param {Array<Byte>} [params.secret] - secret seed bytes
92612 * @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
92613 * @param {Array<Byte>} [params.pub] - public key point encoded as bytes
92614 *
92615 */
92616 function KeyPair(eddsa, params) {
92617 this.eddsa = eddsa;
92618 this._secret = parseBytes(params.secret);
92619 if (eddsa.isPoint(params.pub))
92620 this._pub = params.pub;
92621 else
92622 this._pubBytes = parseBytes(params.pub);
92623 }
92624
92625 KeyPair.fromPublic = function fromPublic(eddsa, pub) {
92626 if (pub instanceof KeyPair)
92627 return pub;
92628 return new KeyPair(eddsa, { pub: pub });
92629 };
92630
92631 KeyPair.fromSecret = function fromSecret(eddsa, secret) {
92632 if (secret instanceof KeyPair)
92633 return secret;
92634 return new KeyPair(eddsa, { secret: secret });
92635 };
92636
92637 KeyPair.prototype.secret = function secret() {
92638 return this._secret;
92639 };
92640
92641 cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
92642 return this.eddsa.encodePoint(this.pub());
92643 });
92644
92645 cachedProperty(KeyPair, 'pub', function pub() {
92646 if (this._pubBytes)
92647 return this.eddsa.decodePoint(this._pubBytes);
92648 return this.eddsa.g.mul(this.priv());
92649 });
92650
92651 cachedProperty(KeyPair, 'privBytes', function privBytes() {
92652 var eddsa = this.eddsa;
92653 var hash = this.hash();
92654 var lastIx = eddsa.encodingLength - 1;
92655
92656 var a = hash.slice(0, eddsa.encodingLength);
92657 a[0] &= 248;
92658 a[lastIx] &= 127;
92659 a[lastIx] |= 64;
92660
92661 return a;
92662 });
92663
92664 cachedProperty(KeyPair, 'priv', function priv() {
92665 return this.eddsa.decodeInt(this.privBytes());
92666 });
92667
92668 cachedProperty(KeyPair, 'hash', function hash() {
92669 return this.eddsa.hash().update(this.secret()).digest();
92670 });
92671
92672 cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
92673 return this.hash().slice(this.eddsa.encodingLength);
92674 });
92675
92676 KeyPair.prototype.sign = function sign(message) {
92677 assert(this._secret, 'KeyPair can only verify');
92678 return this.eddsa.sign(message, this);
92679 };
92680
92681 KeyPair.prototype.verify = function verify(message, sig) {
92682 return this.eddsa.verify(message, sig, this);
92683 };
92684
92685 KeyPair.prototype.getSecret = function getSecret(enc) {
92686 assert(this._secret, 'KeyPair is public only');
92687 return utils.encode(this.secret(), enc);
92688 };
92689
92690 KeyPair.prototype.getPublic = function getPublic(enc) {
92691 return utils.encode(this.pubBytes(), enc);
92692 };
92693
92694 module.exports = KeyPair;
92695
92696 },{"../../elliptic":39}],51:[function(require,module,exports){
92697 'use strict';
92698
92699 var BN = require('bn.js');
92700 var elliptic = require('../../elliptic');
92701 var utils = elliptic.utils;
92702 var assert = utils.assert;
92703 var cachedProperty = utils.cachedProperty;
92704 var parseBytes = utils.parseBytes;
92705
92706 /**
92707 * @param {EDDSA} eddsa - eddsa instance
92708 * @param {Array<Bytes>|Object} sig -
92709 * @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
92710 * @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
92711 * @param {Array<Bytes>} [sig.Rencoded] - R point encoded
92712 * @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
92713 */
92714 function Signature(eddsa, sig) {
92715 this.eddsa = eddsa;
92716
92717 if (typeof sig !== 'object')
92718 sig = parseBytes(sig);
92719
92720 if (Array.isArray(sig)) {
92721 sig = {
92722 R: sig.slice(0, eddsa.encodingLength),
92723 S: sig.slice(eddsa.encodingLength)
92724 };
92725 }
92726
92727 assert(sig.R && sig.S, 'Signature without R or S');
92728
92729 if (eddsa.isPoint(sig.R))
92730 this._R = sig.R;
92731 if (sig.S instanceof BN)
92732 this._S = sig.S;
92733
92734 this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
92735 this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
92736 }
92737
92738 cachedProperty(Signature, 'S', function S() {
92739 return this.eddsa.decodeInt(this.Sencoded());
92740 });
92741
92742 cachedProperty(Signature, 'R', function R() {
92743 return this.eddsa.decodePoint(this.Rencoded());
92744 });
92745
92746 cachedProperty(Signature, 'Rencoded', function Rencoded() {
92747 return this.eddsa.encodePoint(this.R());
92748 });
92749
92750 cachedProperty(Signature, 'Sencoded', function Sencoded() {
92751 return this.eddsa.encodeInt(this.S());
92752 });
92753
92754 Signature.prototype.toBytes = function toBytes() {
92755 return this.Rencoded().concat(this.Sencoded());
92756 };
92757
92758 Signature.prototype.toHex = function toHex() {
92759 return utils.encode(this.toBytes(), 'hex').toUpperCase();
92760 };
92761
92762 module.exports = Signature;
92763
92764 },{"../../elliptic":39,"bn.js":33}],52:[function(require,module,exports){
92765 'use strict';
92766
92767 var hash = require('hash.js');
92768 var elliptic = require('../elliptic');
92769 var utils = elliptic.utils;
92770 var assert = utils.assert;
92771
92772 function HmacDRBG(options) {
92773 if (!(this instanceof HmacDRBG))
92774 return new HmacDRBG(options);
92775 this.hash = options.hash;
92776 this.predResist = !!options.predResist;
92777
92778 this.outLen = this.hash.outSize;
92779 this.minEntropy = options.minEntropy || this.hash.hmacStrength;
92780
92781 this.reseed = null;
92782 this.reseedInterval = null;
92783 this.K = null;
92784 this.V = null;
92785
92786 var entropy = utils.toArray(options.entropy, options.entropyEnc);
92787 var nonce = utils.toArray(options.nonce, options.nonceEnc);
92788 var pers = utils.toArray(options.pers, options.persEnc);
92789 assert(entropy.length >= (this.minEntropy / 8),
92790 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
92791 this._init(entropy, nonce, pers);
92792 }
92793 module.exports = HmacDRBG;
92794
92795 HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
92796 var seed = entropy.concat(nonce).concat(pers);
92797
92798 this.K = new Array(this.outLen / 8);
92799 this.V = new Array(this.outLen / 8);
92800 for (var i = 0; i < this.V.length; i++) {
92801 this.K[i] = 0x00;
92802 this.V[i] = 0x01;
92803 }
92804
92805 this._update(seed);
92806 this.reseed = 1;
92807 this.reseedInterval = 0x1000000000000; // 2^48
92808 };
92809
92810 HmacDRBG.prototype._hmac = function hmac() {
92811 return new hash.hmac(this.hash, this.K);
92812 };
92813
92814 HmacDRBG.prototype._update = function update(seed) {
92815 var kmac = this._hmac()
92816 .update(this.V)
92817 .update([ 0x00 ]);
92818 if (seed)
92819 kmac = kmac.update(seed);
92820 this.K = kmac.digest();
92821 this.V = this._hmac().update(this.V).digest();
92822 if (!seed)
92823 return;
92824
92825 this.K = this._hmac()
92826 .update(this.V)
92827 .update([ 0x01 ])
92828 .update(seed)
92829 .digest();
92830 this.V = this._hmac().update(this.V).digest();
92831 };
92832
92833 HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
92834 // Optional entropy enc
92835 if (typeof entropyEnc !== 'string') {
92836 addEnc = add;
92837 add = entropyEnc;
92838 entropyEnc = null;
92839 }
92840
92841 entropy = utils.toBuffer(entropy, entropyEnc);
92842 add = utils.toBuffer(add, addEnc);
92843
92844 assert(entropy.length >= (this.minEntropy / 8),
92845 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
92846
92847 this._update(entropy.concat(add || []));
92848 this.reseed = 1;
92849 };
92850
92851 HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
92852 if (this.reseed > this.reseedInterval)
92853 throw new Error('Reseed is required');
92854
92855 // Optional encoding
92856 if (typeof enc !== 'string') {
92857 addEnc = add;
92858 add = enc;
92859 enc = null;
92860 }
92861
92862 // Optional additional data
92863 if (add) {
92864 add = utils.toArray(add, addEnc);
92865 this._update(add);
92866 }
92867
92868 var temp = [];
92869 while (temp.length < len) {
92870 this.V = this._hmac().update(this.V).digest();
92871 temp = temp.concat(this.V);
92872 }
92873
92874 var res = temp.slice(0, len);
92875 this._update(add);
92876 this.reseed++;
92877 return utils.encode(res, enc);
92878 };
92879
92880 },{"../elliptic":39,"hash.js":57}],53:[function(require,module,exports){
92881 module.exports = {
92882 doubles: {
92883 step: 4,
92884 points: [
92885 [
92886 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',
92887 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'
92888 ],
92889 [
92890 '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',
92891 '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'
92892 ],
92893 [
92894 '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',
92895 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'
92896 ],
92897 [
92898 '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',
92899 '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'
92900 ],
92901 [
92902 '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',
92903 '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'
92904 ],
92905 [
92906 '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',
92907 '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'
92908 ],
92909 [
92910 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',
92911 '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'
92912 ],
92913 [
92914 '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',
92915 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'
92916 ],
92917 [
92918 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',
92919 '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'
92920 ],
92921 [
92922 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',
92923 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'
92924 ],
92925 [
92926 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',
92927 '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'
92928 ],
92929 [
92930 '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',
92931 '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'
92932 ],
92933 [
92934 '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',
92935 '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'
92936 ],
92937 [
92938 '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',
92939 '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'
92940 ],
92941 [
92942 '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',
92943 '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'
92944 ],
92945 [
92946 '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',
92947 '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'
92948 ],
92949 [
92950 '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',
92951 '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'
92952 ],
92953 [
92954 '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',
92955 '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'
92956 ],
92957 [
92958 '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',
92959 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'
92960 ],
92961 [
92962 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',
92963 '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'
92964 ],
92965 [
92966 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',
92967 '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'
92968 ],
92969 [
92970 '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',
92971 '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'
92972 ],
92973 [
92974 '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',
92975 '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'
92976 ],
92977 [
92978 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',
92979 '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'
92980 ],
92981 [
92982 '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',
92983 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'
92984 ],
92985 [
92986 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',
92987 '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'
92988 ],
92989 [
92990 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',
92991 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'
92992 ],
92993 [
92994 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',
92995 '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'
92996 ],
92997 [
92998 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',
92999 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'
93000 ],
93001 [
93002 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',
93003 '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'
93004 ],
93005 [
93006 '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',
93007 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'
93008 ],
93009 [
93010 '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',
93011 '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'
93012 ],
93013 [
93014 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',
93015 '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'
93016 ],
93017 [
93018 '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',
93019 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'
93020 ],
93021 [
93022 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',
93023 '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'
93024 ],
93025 [
93026 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',
93027 '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'
93028 ],
93029 [
93030 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',
93031 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'
93032 ],
93033 [
93034 '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',
93035 '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'
93036 ],
93037 [
93038 '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',
93039 '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'
93040 ],
93041 [
93042 '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',
93043 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'
93044 ],
93045 [
93046 '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',
93047 '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'
93048 ],
93049 [
93050 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',
93051 '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'
93052 ],
93053 [
93054 '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',
93055 '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'
93056 ],
93057 [
93058 '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',
93059 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'
93060 ],
93061 [
93062 '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',
93063 '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'
93064 ],
93065 [
93066 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',
93067 '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'
93068 ],
93069 [
93070 '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',
93071 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'
93072 ],
93073 [
93074 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',
93075 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'
93076 ],
93077 [
93078 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',
93079 '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'
93080 ],
93081 [
93082 '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',
93083 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'
93084 ],
93085 [
93086 '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',
93087 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'
93088 ],
93089 [
93090 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',
93091 '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'
93092 ],
93093 [
93094 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',
93095 '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'
93096 ],
93097 [
93098 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',
93099 '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'
93100 ],
93101 [
93102 '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',
93103 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'
93104 ],
93105 [
93106 '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',
93107 '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'
93108 ],
93109 [
93110 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',
93111 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'
93112 ],
93113 [
93114 '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',
93115 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'
93116 ],
93117 [
93118 '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',
93119 '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'
93120 ],
93121 [
93122 '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',
93123 '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'
93124 ],
93125 [
93126 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',
93127 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'
93128 ],
93129 [
93130 '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',
93131 '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'
93132 ],
93133 [
93134 '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',
93135 '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'
93136 ],
93137 [
93138 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',
93139 '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'
93140 ],
93141 [
93142 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',
93143 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'
93144 ]
93145 ]
93146 },
93147 naf: {
93148 wnd: 7,
93149 points: [
93150 [
93151 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
93152 '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'
93153 ],
93154 [
93155 '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',
93156 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'
93157 ],
93158 [
93159 '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',
93160 '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'
93161 ],
93162 [
93163 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',
93164 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'
93165 ],
93166 [
93167 '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',
93168 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'
93169 ],
93170 [
93171 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',
93172 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'
93173 ],
93174 [
93175 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',
93176 '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'
93177 ],
93178 [
93179 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',
93180 '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'
93181 ],
93182 [
93183 '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',
93184 '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'
93185 ],
93186 [
93187 '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',
93188 '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'
93189 ],
93190 [
93191 '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',
93192 '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'
93193 ],
93194 [
93195 '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',
93196 '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'
93197 ],
93198 [
93199 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',
93200 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'
93201 ],
93202 [
93203 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',
93204 '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'
93205 ],
93206 [
93207 '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',
93208 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'
93209 ],
93210 [
93211 '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',
93212 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'
93213 ],
93214 [
93215 '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',
93216 '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'
93217 ],
93218 [
93219 '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',
93220 '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'
93221 ],
93222 [
93223 '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',
93224 '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'
93225 ],
93226 [
93227 '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',
93228 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'
93229 ],
93230 [
93231 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',
93232 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'
93233 ],
93234 [
93235 '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',
93236 '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'
93237 ],
93238 [
93239 '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',
93240 '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'
93241 ],
93242 [
93243 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',
93244 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'
93245 ],
93246 [
93247 '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',
93248 '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'
93249 ],
93250 [
93251 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',
93252 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'
93253 ],
93254 [
93255 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',
93256 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'
93257 ],
93258 [
93259 '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',
93260 '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'
93261 ],
93262 [
93263 '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',
93264 '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'
93265 ],
93266 [
93267 '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',
93268 '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'
93269 ],
93270 [
93271 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',
93272 '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'
93273 ],
93274 [
93275 '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',
93276 '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'
93277 ],
93278 [
93279 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',
93280 '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'
93281 ],
93282 [
93283 '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',
93284 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'
93285 ],
93286 [
93287 '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',
93288 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'
93289 ],
93290 [
93291 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',
93292 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'
93293 ],
93294 [
93295 '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',
93296 '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'
93297 ],
93298 [
93299 '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',
93300 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'
93301 ],
93302 [
93303 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',
93304 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'
93305 ],
93306 [
93307 '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',
93308 '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'
93309 ],
93310 [
93311 '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',
93312 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'
93313 ],
93314 [
93315 '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',
93316 '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'
93317 ],
93318 [
93319 '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',
93320 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'
93321 ],
93322 [
93323 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',
93324 '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'
93325 ],
93326 [
93327 '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',
93328 '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'
93329 ],
93330 [
93331 '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',
93332 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'
93333 ],
93334 [
93335 '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',
93336 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'
93337 ],
93338 [
93339 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',
93340 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'
93341 ],
93342 [
93343 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',
93344 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'
93345 ],
93346 [
93347 '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',
93348 '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'
93349 ],
93350 [
93351 '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',
93352 '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'
93353 ],
93354 [
93355 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',
93356 '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'
93357 ],
93358 [
93359 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',
93360 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'
93361 ],
93362 [
93363 '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',
93364 '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'
93365 ],
93366 [
93367 '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',
93368 '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'
93369 ],
93370 [
93371 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',
93372 '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'
93373 ],
93374 [
93375 '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',
93376 '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'
93377 ],
93378 [
93379 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',
93380 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'
93381 ],
93382 [
93383 '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',
93384 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'
93385 ],
93386 [
93387 '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',
93388 '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'
93389 ],
93390 [
93391 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',
93392 '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'
93393 ],
93394 [
93395 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',
93396 '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'
93397 ],
93398 [
93399 '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',
93400 '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'
93401 ],
93402 [
93403 '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',
93404 '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'
93405 ],
93406 [
93407 '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',
93408 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'
93409 ],
93410 [
93411 '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',
93412 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'
93413 ],
93414 [
93415 '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',
93416 '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'
93417 ],
93418 [
93419 '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',
93420 '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'
93421 ],
93422 [
93423 '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',
93424 '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'
93425 ],
93426 [
93427 '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',
93428 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'
93429 ],
93430 [
93431 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',
93432 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'
93433 ],
93434 [
93435 '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',
93436 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'
93437 ],
93438 [
93439 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',
93440 '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'
93441 ],
93442 [
93443 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',
93444 '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'
93445 ],
93446 [
93447 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',
93448 '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'
93449 ],
93450 [
93451 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',
93452 '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'
93453 ],
93454 [
93455 '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',
93456 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'
93457 ],
93458 [
93459 '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',
93460 '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'
93461 ],
93462 [
93463 '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',
93464 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'
93465 ],
93466 [
93467 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',
93468 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'
93469 ],
93470 [
93471 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',
93472 '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'
93473 ],
93474 [
93475 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',
93476 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'
93477 ],
93478 [
93479 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',
93480 '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'
93481 ],
93482 [
93483 '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',
93484 '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'
93485 ],
93486 [
93487 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',
93488 '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'
93489 ],
93490 [
93491 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',
93492 '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'
93493 ],
93494 [
93495 '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',
93496 '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'
93497 ],
93498 [
93499 '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',
93500 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'
93501 ],
93502 [
93503 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',
93504 '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'
93505 ],
93506 [
93507 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',
93508 '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'
93509 ],
93510 [
93511 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',
93512 '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'
93513 ],
93514 [
93515 '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',
93516 '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'
93517 ],
93518 [
93519 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',
93520 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'
93521 ],
93522 [
93523 '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',
93524 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'
93525 ],
93526 [
93527 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',
93528 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'
93529 ],
93530 [
93531 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',
93532 '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'
93533 ],
93534 [
93535 '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',
93536 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'
93537 ],
93538 [
93539 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',
93540 '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'
93541 ],
93542 [
93543 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',
93544 '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'
93545 ],
93546 [
93547 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',
93548 '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'
93549 ],
93550 [
93551 '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',
93552 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'
93553 ],
93554 [
93555 '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',
93556 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'
93557 ],
93558 [
93559 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',
93560 '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'
93561 ],
93562 [
93563 '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',
93564 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'
93565 ],
93566 [
93567 '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',
93568 '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'
93569 ],
93570 [
93571 '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',
93572 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'
93573 ],
93574 [
93575 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',
93576 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'
93577 ],
93578 [
93579 '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',
93580 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'
93581 ],
93582 [
93583 '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',
93584 '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'
93585 ],
93586 [
93587 '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',
93588 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'
93589 ],
93590 [
93591 '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',
93592 '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'
93593 ],
93594 [
93595 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',
93596 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'
93597 ],
93598 [
93599 '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',
93600 '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'
93601 ],
93602 [
93603 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',
93604 '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'
93605 ],
93606 [
93607 '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',
93608 '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'
93609 ],
93610 [
93611 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',
93612 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'
93613 ],
93614 [
93615 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',
93616 '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'
93617 ],
93618 [
93619 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',
93620 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'
93621 ],
93622 [
93623 '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',
93624 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'
93625 ],
93626 [
93627 '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',
93628 '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'
93629 ],
93630 [
93631 '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',
93632 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'
93633 ],
93634 [
93635 '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',
93636 '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'
93637 ],
93638 [
93639 '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',
93640 '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'
93641 ],
93642 [
93643 '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',
93644 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'
93645 ],
93646 [
93647 '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',
93648 '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'
93649 ],
93650 [
93651 '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',
93652 '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'
93653 ],
93654 [
93655 '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',
93656 '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'
93657 ]
93658 ]
93659 }
93660 };
93661
93662 },{}],54:[function(require,module,exports){
93663 'use strict';
93664
93665 var utils = exports;
93666 var BN = require('bn.js');
93667
93668 utils.assert = function assert(val, msg) {
93669 if (!val)
93670 throw new Error(msg || 'Assertion failed');
93671 };
93672
93673 function toArray(msg, enc) {
93674 if (Array.isArray(msg))
93675 return msg.slice();
93676 if (!msg)
93677 return [];
93678 var res = [];
93679 if (typeof msg !== 'string') {
93680 for (var i = 0; i < msg.length; i++)
93681 res[i] = msg[i] | 0;
93682 return res;
93683 }
93684 if (!enc) {
93685 for (var i = 0; i < msg.length; i++) {
93686 var c = msg.charCodeAt(i);
93687 var hi = c >> 8;
93688 var lo = c & 0xff;
93689 if (hi)
93690 res.push(hi, lo);
93691 else
93692 res.push(lo);
93693 }
93694 } else if (enc === 'hex') {
93695 msg = msg.replace(/[^a-z0-9]+/ig, '');
93696 if (msg.length % 2 !== 0)
93697 msg = '0' + msg;
93698 for (var i = 0; i < msg.length; i += 2)
93699 res.push(parseInt(msg[i] + msg[i + 1], 16));
93700 }
93701 return res;
93702 }
93703 utils.toArray = toArray;
93704
93705 function zero2(word) {
93706 if (word.length === 1)
93707 return '0' + word;
93708 else
93709 return word;
93710 }
93711 utils.zero2 = zero2;
93712
93713 function toHex(msg) {
93714 var res = '';
93715 for (var i = 0; i < msg.length; i++)
93716 res += zero2(msg[i].toString(16));
93717 return res;
93718 }
93719 utils.toHex = toHex;
93720
93721 utils.encode = function encode(arr, enc) {
93722 if (enc === 'hex')
93723 return toHex(arr);
93724 else
93725 return arr;
93726 };
93727
93728 // Represent num in a w-NAF form
93729 function getNAF(num, w) {
93730 var naf = [];
93731 var ws = 1 << (w + 1);
93732 var k = num.clone();
93733 while (k.cmpn(1) >= 0) {
93734 var z;
93735 if (k.isOdd()) {
93736 var mod = k.andln(ws - 1);
93737 if (mod > (ws >> 1) - 1)
93738 z = (ws >> 1) - mod;
93739 else
93740 z = mod;
93741 k.isubn(z);
93742 } else {
93743 z = 0;
93744 }
93745 naf.push(z);
93746
93747 // Optimization, shift by word if possible
93748 var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;
93749 for (var i = 1; i < shift; i++)
93750 naf.push(0);
93751 k.iushrn(shift);
93752 }
93753
93754 return naf;
93755 }
93756 utils.getNAF = getNAF;
93757
93758 // Represent k1, k2 in a Joint Sparse Form
93759 function getJSF(k1, k2) {
93760 var jsf = [
93761 [],
93762 []
93763 ];
93764
93765 k1 = k1.clone();
93766 k2 = k2.clone();
93767 var d1 = 0;
93768 var d2 = 0;
93769 while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
93770
93771 // First phase
93772 var m14 = (k1.andln(3) + d1) & 3;
93773 var m24 = (k2.andln(3) + d2) & 3;
93774 if (m14 === 3)
93775 m14 = -1;
93776 if (m24 === 3)
93777 m24 = -1;
93778 var u1;
93779 if ((m14 & 1) === 0) {
93780 u1 = 0;
93781 } else {
93782 var m8 = (k1.andln(7) + d1) & 7;
93783 if ((m8 === 3 || m8 === 5) && m24 === 2)
93784 u1 = -m14;
93785 else
93786 u1 = m14;
93787 }
93788 jsf[0].push(u1);
93789
93790 var u2;
93791 if ((m24 & 1) === 0) {
93792 u2 = 0;
93793 } else {
93794 var m8 = (k2.andln(7) + d2) & 7;
93795 if ((m8 === 3 || m8 === 5) && m14 === 2)
93796 u2 = -m24;
93797 else
93798 u2 = m24;
93799 }
93800 jsf[1].push(u2);
93801
93802 // Second phase
93803 if (2 * d1 === u1 + 1)
93804 d1 = 1 - d1;
93805 if (2 * d2 === u2 + 1)
93806 d2 = 1 - d2;
93807 k1.iushrn(1);
93808 k2.iushrn(1);
93809 }
93810
93811 return jsf;
93812 }
93813 utils.getJSF = getJSF;
93814
93815 function cachedProperty(obj, name, computer) {
93816 var key = '_' + name;
93817 obj.prototype[name] = function cachedProperty() {
93818 return this[key] !== undefined ? this[key] :
93819 this[key] = computer.call(this);
93820 };
93821 }
93822 utils.cachedProperty = cachedProperty;
93823
93824 function parseBytes(bytes) {
93825 return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :
93826 bytes;
93827 }
93828 utils.parseBytes = parseBytes;
93829
93830 function intFromLE(bytes) {
93831 return new BN(bytes, 'hex', 'le');
93832 }
93833 utils.intFromLE = intFromLE;
93834
93835
93836 },{"bn.js":33}],55:[function(require,module,exports){
93837 module.exports={
93838 "_args": [
93839 [
93840 {
93841 "raw": "elliptic@^6.2.3",
93842 "scope": null,
93843 "escapedName": "elliptic",
93844 "name": "elliptic",
93845 "rawSpec": "^6.2.3",
93846 "spec": ">=6.2.3 <7.0.0",
93847 "type": "range"
93848 },
93849 "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1"
93850 ]
93851 ],
93852 "_from": "elliptic@>=6.2.3 <7.0.0",
93853 "_id": "elliptic@6.3.3",
93854 "_inCache": true,
93855 "_location": "/elliptic",
93856 "_nodeVersion": "7.0.0",
93857 "_npmOperationalInternal": {
93858 "host": "packages-18-east.internal.npmjs.com",
93859 "tmp": "tmp/elliptic-6.3.3.tgz_1486422837740_0.10658654430881143"
93860 },
93861 "_npmUser": {
93862 "name": "indutny",
93863 "email": "fedor@indutny.com"
93864 },
93865 "_npmVersion": "3.10.8",
93866 "_phantomChildren": {},
93867 "_requested": {
93868 "raw": "elliptic@^6.2.3",
93869 "scope": null,
93870 "escapedName": "elliptic",
93871 "name": "elliptic",
93872 "rawSpec": "^6.2.3",
93873 "spec": ">=6.2.3 <7.0.0",
93874 "type": "range"
93875 },
93876 "_requiredBy": [
93877 "/browserify-sign",
93878 "/create-ecdh",
93879 "/secp256k1"
93880 ],
93881 "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz",
93882 "_shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
93883 "_shrinkwrap": null,
93884 "_spec": "elliptic@^6.2.3",
93885 "_where": "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1",
93886 "author": {
93887 "name": "Fedor Indutny",
93888 "email": "fedor@indutny.com"
93889 },
93890 "bugs": {
93891 "url": "https://github.com/indutny/elliptic/issues"
93892 },
93893 "dependencies": {
93894 "bn.js": "^4.4.0",
93895 "brorand": "^1.0.1",
93896 "hash.js": "^1.0.0",
93897 "inherits": "^2.0.1"
93898 },
93899 "description": "EC cryptography",
93900 "devDependencies": {
93901 "brfs": "^1.4.3",
93902 "coveralls": "^2.11.3",
93903 "grunt": "^0.4.5",
93904 "grunt-browserify": "^5.0.0",
93905 "grunt-cli": "^1.2.0",
93906 "grunt-contrib-connect": "^1.0.0",
93907 "grunt-contrib-copy": "^1.0.0",
93908 "grunt-contrib-uglify": "^1.0.1",
93909 "grunt-mocha-istanbul": "^3.0.1",
93910 "grunt-saucelabs": "^8.6.2",
93911 "istanbul": "^0.4.2",
93912 "jscs": "^2.9.0",
93913 "jshint": "^2.6.0",
93914 "mocha": "^2.1.0"
93915 },
93916 "directories": {},
93917 "dist": {
93918 "shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
93919 "tarball": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz"
93920 },
93921 "files": [
93922 "lib"
93923 ],
93924 "gitHead": "63aee8d697e9b7fac37ece24222029117a890a7e",
93925 "homepage": "https://github.com/indutny/elliptic",
93926 "keywords": [
93927 "EC",
93928 "Elliptic",
93929 "curve",
93930 "Cryptography"
93931 ],
93932 "license": "MIT",
93933 "main": "lib/elliptic.js",
93934 "maintainers": [
93935 {
93936 "name": "indutny",
93937 "email": "fedor@indutny.com"
93938 }
93939 ],
93940 "name": "elliptic",
93941 "optionalDependencies": {},
93942 "readme": "ERROR: No README data found!",
93943 "repository": {
93944 "type": "git",
93945 "url": "git+ssh://git@github.com/indutny/elliptic.git"
93946 },
93947 "scripts": {
93948 "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
93949 "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
93950 "lint": "npm run jscs && npm run jshint",
93951 "test": "npm run lint && npm run unit",
93952 "unit": "istanbul test _mocha --reporter=spec test/index.js",
93953 "version": "grunt dist && git add dist/"
93954 },
93955 "version": "6.3.3"
93956 }
93957
93958 },{}],56:[function(require,module,exports){
93959 (function (Buffer){
93960 'use strict';
93961
93962 var isHexPrefixed = require('is-hex-prefixed');
93963 var stripHexPrefix = require('strip-hex-prefix');
93964
93965 /**
93966 * Pads a `String` to have an even length
93967 * @param {String} value
93968 * @return {String} output
93969 */
93970 function padToEven(value) {
93971 var a = value; // eslint-disable-line
93972
93973 if (typeof a !== 'string') {
93974 throw new Error('[ethjs-util] while padding to even, value must be string, is currently ' + typeof a + ', while padToEven.');
93975 }
93976
93977 if (a.length % 2) {
93978 a = '0' + a;
93979 }
93980
93981 return a;
93982 }
93983
93984 /**
93985 * Converts a `Number` into a hex `String`
93986 * @param {Number} i
93987 * @return {String}
93988 */
93989 function intToHex(i) {
93990 var hex = i.toString(16); // eslint-disable-line
93991
93992 return '0x' + padToEven(hex);
93993 }
93994
93995 /**
93996 * Converts an `Number` to a `Buffer`
93997 * @param {Number} i
93998 * @return {Buffer}
93999 */
94000 function intToBuffer(i) {
94001 var hex = intToHex(i);
94002
94003 return new Buffer(hex.slice(2), 'hex');
94004 }
94005
94006 /**
94007 * Get the binary size of a string
94008 * @param {String} str
94009 * @return {Number}
94010 */
94011 function getBinarySize(str) {
94012 if (typeof str !== 'string') {
94013 throw new Error('[ethjs-util] while getting binary size, method getBinarySize requires input \'str\' to be type String, got \'' + typeof str + '\'.');
94014 }
94015
94016 return Buffer.byteLength(str, 'utf8');
94017 }
94018
94019 /**
94020 * Returns TRUE if the first specified array contains all elements
94021 * from the second one. FALSE otherwise.
94022 *
94023 * @param {array} superset
94024 * @param {array} subset
94025 *
94026 * @returns {boolean}
94027 */
94028 function arrayContainsArray(superset, subset, some) {
94029 if (Array.isArray(superset) !== true) {
94030 throw new Error('[ethjs-util] method arrayContainsArray requires input \'superset\' to be an array got type \'' + typeof superset + '\'');
94031 }
94032 if (Array.isArray(subset) !== true) {
94033 throw new Error('[ethjs-util] method arrayContainsArray requires input \'subset\' to be an array got type \'' + typeof subset + '\'');
94034 }
94035
94036 return subset[Boolean(some) && 'some' || 'every'](function (value) {
94037 return superset.indexOf(value) >= 0;
94038 });
94039 }
94040
94041 /**
94042 * Should be called to get utf8 from it's hex representation
94043 *
94044 * @method toUtf8
94045 * @param {String} string in hex
94046 * @returns {String} ascii string representation of hex value
94047 */
94048 function toUtf8(hex) {
94049 var bufferValue = new Buffer(padToEven(stripHexPrefix(hex).replace(/^0+|0+$/g, '')), 'hex');
94050
94051 return bufferValue.toString('utf8');
94052 }
94053
94054 /**
94055 * Should be called to get ascii from it's hex representation
94056 *
94057 * @method toAscii
94058 * @param {String} string in hex
94059 * @returns {String} ascii string representation of hex value
94060 */
94061 function toAscii(hex) {
94062 var str = ''; // eslint-disable-line
94063 var i = 0,
94064 l = hex.length; // eslint-disable-line
94065
94066 if (hex.substring(0, 2) === '0x') {
94067 i = 2;
94068 }
94069
94070 for (; i < l; i += 2) {
94071 var code = parseInt(hex.substr(i, 2), 16);
94072 str += String.fromCharCode(code);
94073 }
94074
94075 return str;
94076 }
94077
94078 /**
94079 * Should be called to get hex representation (prefixed by 0x) of utf8 string
94080 *
94081 * @method fromUtf8
94082 * @param {String} string
94083 * @param {Number} optional padding
94084 * @returns {String} hex representation of input string
94085 */
94086 function fromUtf8(stringValue) {
94087 var str = new Buffer(stringValue, 'utf8');
94088
94089 return '0x' + padToEven(str.toString('hex')).replace(/^0+|0+$/g, '');
94090 }
94091
94092 /**
94093 * Should be called to get hex representation (prefixed by 0x) of ascii string
94094 *
94095 * @method fromAscii
94096 * @param {String} string
94097 * @param {Number} optional padding
94098 * @returns {String} hex representation of input string
94099 */
94100 function fromAscii(stringValue) {
94101 var hex = ''; // eslint-disable-line
94102 for (var i = 0; i < stringValue.length; i++) {
94103 // eslint-disable-line
94104 var code = stringValue.charCodeAt(i);
94105 var n = code.toString(16);
94106 hex += n.length < 2 ? '0' + n : n;
94107 }
94108
94109 return '0x' + hex;
94110 }
94111
94112 /**
94113 * getKeys([{a: 1, b: 2}, {a: 3, b: 4}], 'a') => [1, 3]
94114 *
94115 * @method getKeys get specific key from inner object array of objects
94116 * @param {String} params
94117 * @param {String} key
94118 * @param {Boolean} allowEmpty
94119 * @returns {Array} output just a simple array of output keys
94120 */
94121 function getKeys(params, key, allowEmpty) {
94122 if (!Array.isArray(params)) {
94123 throw new Error('[ethjs-util] method getKeys expecting type Array as \'params\' input, got \'' + typeof params + '\'');
94124 }
94125 if (typeof key !== 'string') {
94126 throw new Error('[ethjs-util] method getKeys expecting type String for input \'key\' got \'' + typeof key + '\'.');
94127 }
94128
94129 var result = []; // eslint-disable-line
94130
94131 for (var i = 0; i < params.length; i++) {
94132 // eslint-disable-line
94133 var value = params[i][key]; // eslint-disable-line
94134 if (allowEmpty && !value) {
94135 value = '';
94136 } else if (typeof value !== 'string') {
94137 throw new Error('invalid abi');
94138 }
94139 result.push(value);
94140 }
94141
94142 return result;
94143 }
94144
94145 /**
94146 * Is the string a hex string.
94147 *
94148 * @method check if string is hex string of specific length
94149 * @param {String} value
94150 * @param {Number} length
94151 * @returns {Boolean} output the string is a hex string
94152 */
94153 function isHexString(value, length) {
94154 if (typeof value !== 'string' || !value.match(/^0x[0-9A-Fa-f]*$/)) {
94155 return false;
94156 }
94157
94158 if (length && value.length !== 2 + 2 * length) {
94159 return false;
94160 }
94161
94162 return true;
94163 }
94164
94165 module.exports = {
94166 arrayContainsArray: arrayContainsArray,
94167 intToBuffer: intToBuffer,
94168 getBinarySize: getBinarySize,
94169 isHexPrefixed: isHexPrefixed,
94170 stripHexPrefix: stripHexPrefix,
94171 padToEven: padToEven,
94172 intToHex: intToHex,
94173 fromAscii: fromAscii,
94174 fromUtf8: fromUtf8,
94175 toAscii: toAscii,
94176 toUtf8: toUtf8,
94177 getKeys: getKeys,
94178 isHexString: isHexString
94179 };
94180 }).call(this,require("buffer").Buffer)
94181 },{"buffer":5,"is-hex-prefixed":64,"strip-hex-prefix":87}],57:[function(require,module,exports){
94182 var hash = exports;
94183
94184 hash.utils = require('./hash/utils');
94185 hash.common = require('./hash/common');
94186 hash.sha = require('./hash/sha');
94187 hash.ripemd = require('./hash/ripemd');
94188 hash.hmac = require('./hash/hmac');
94189
94190 // Proxy hash functions to the main object
94191 hash.sha1 = hash.sha.sha1;
94192 hash.sha256 = hash.sha.sha256;
94193 hash.sha224 = hash.sha.sha224;
94194 hash.sha384 = hash.sha.sha384;
94195 hash.sha512 = hash.sha.sha512;
94196 hash.ripemd160 = hash.ripemd.ripemd160;
94197
94198 },{"./hash/common":58,"./hash/hmac":59,"./hash/ripemd":60,"./hash/sha":61,"./hash/utils":62}],58:[function(require,module,exports){
94199 var hash = require('../hash');
94200 var utils = hash.utils;
94201 var assert = utils.assert;
94202
94203 function BlockHash() {
94204 this.pending = null;
94205 this.pendingTotal = 0;
94206 this.blockSize = this.constructor.blockSize;
94207 this.outSize = this.constructor.outSize;
94208 this.hmacStrength = this.constructor.hmacStrength;
94209 this.padLength = this.constructor.padLength / 8;
94210 this.endian = 'big';
94211
94212 this._delta8 = this.blockSize / 8;
94213 this._delta32 = this.blockSize / 32;
94214 }
94215 exports.BlockHash = BlockHash;
94216
94217 BlockHash.prototype.update = function update(msg, enc) {
94218 // Convert message to array, pad it, and join into 32bit blocks
94219 msg = utils.toArray(msg, enc);
94220 if (!this.pending)
94221 this.pending = msg;
94222 else
94223 this.pending = this.pending.concat(msg);
94224 this.pendingTotal += msg.length;
94225
94226 // Enough data, try updating
94227 if (this.pending.length >= this._delta8) {
94228 msg = this.pending;
94229
94230 // Process pending data in blocks
94231 var r = msg.length % this._delta8;
94232 this.pending = msg.slice(msg.length - r, msg.length);
94233 if (this.pending.length === 0)
94234 this.pending = null;
94235
94236 msg = utils.join32(msg, 0, msg.length - r, this.endian);
94237 for (var i = 0; i < msg.length; i += this._delta32)
94238 this._update(msg, i, i + this._delta32);
94239 }
94240
94241 return this;
94242 };
94243
94244 BlockHash.prototype.digest = function digest(enc) {
94245 this.update(this._pad());
94246 assert(this.pending === null);
94247
94248 return this._digest(enc);
94249 };
94250
94251 BlockHash.prototype._pad = function pad() {
94252 var len = this.pendingTotal;
94253 var bytes = this._delta8;
94254 var k = bytes - ((len + this.padLength) % bytes);
94255 var res = new Array(k + this.padLength);
94256 res[0] = 0x80;
94257 for (var i = 1; i < k; i++)
94258 res[i] = 0;
94259
94260 // Append length
94261 len <<= 3;
94262 if (this.endian === 'big') {
94263 for (var t = 8; t < this.padLength; t++)
94264 res[i++] = 0;
94265
94266 res[i++] = 0;
94267 res[i++] = 0;
94268 res[i++] = 0;
94269 res[i++] = 0;
94270 res[i++] = (len >>> 24) & 0xff;
94271 res[i++] = (len >>> 16) & 0xff;
94272 res[i++] = (len >>> 8) & 0xff;
94273 res[i++] = len & 0xff;
94274 } else {
94275 res[i++] = len & 0xff;
94276 res[i++] = (len >>> 8) & 0xff;
94277 res[i++] = (len >>> 16) & 0xff;
94278 res[i++] = (len >>> 24) & 0xff;
94279 res[i++] = 0;
94280 res[i++] = 0;
94281 res[i++] = 0;
94282 res[i++] = 0;
94283
94284 for (var t = 8; t < this.padLength; t++)
94285 res[i++] = 0;
94286 }
94287
94288 return res;
94289 };
94290
94291 },{"../hash":57}],59:[function(require,module,exports){
94292 var hmac = exports;
94293
94294 var hash = require('../hash');
94295 var utils = hash.utils;
94296 var assert = utils.assert;
94297
94298 function Hmac(hash, key, enc) {
94299 if (!(this instanceof Hmac))
94300 return new Hmac(hash, key, enc);
94301 this.Hash = hash;
94302 this.blockSize = hash.blockSize / 8;
94303 this.outSize = hash.outSize / 8;
94304 this.inner = null;
94305 this.outer = null;
94306
94307 this._init(utils.toArray(key, enc));
94308 }
94309 module.exports = Hmac;
94310
94311 Hmac.prototype._init = function init(key) {
94312 // Shorten key, if needed
94313 if (key.length > this.blockSize)
94314 key = new this.Hash().update(key).digest();
94315 assert(key.length <= this.blockSize);
94316
94317 // Add padding to key
94318 for (var i = key.length; i < this.blockSize; i++)
94319 key.push(0);
94320
94321 for (var i = 0; i < key.length; i++)
94322 key[i] ^= 0x36;
94323 this.inner = new this.Hash().update(key);
94324
94325 // 0x36 ^ 0x5c = 0x6a
94326 for (var i = 0; i < key.length; i++)
94327 key[i] ^= 0x6a;
94328 this.outer = new this.Hash().update(key);
94329 };
94330
94331 Hmac.prototype.update = function update(msg, enc) {
94332 this.inner.update(msg, enc);
94333 return this;
94334 };
94335
94336 Hmac.prototype.digest = function digest(enc) {
94337 this.outer.update(this.inner.digest());
94338 return this.outer.digest(enc);
94339 };
94340
94341 },{"../hash":57}],60:[function(require,module,exports){
94342 var hash = require('../hash');
94343 var utils = hash.utils;
94344
94345 var rotl32 = utils.rotl32;
94346 var sum32 = utils.sum32;
94347 var sum32_3 = utils.sum32_3;
94348 var sum32_4 = utils.sum32_4;
94349 var BlockHash = hash.common.BlockHash;
94350
94351 function RIPEMD160() {
94352 if (!(this instanceof RIPEMD160))
94353 return new RIPEMD160();
94354
94355 BlockHash.call(this);
94356
94357 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
94358 this.endian = 'little';
94359 }
94360 utils.inherits(RIPEMD160, BlockHash);
94361 exports.ripemd160 = RIPEMD160;
94362
94363 RIPEMD160.blockSize = 512;
94364 RIPEMD160.outSize = 160;
94365 RIPEMD160.hmacStrength = 192;
94366 RIPEMD160.padLength = 64;
94367
94368 RIPEMD160.prototype._update = function update(msg, start) {
94369 var A = this.h[0];
94370 var B = this.h[1];
94371 var C = this.h[2];
94372 var D = this.h[3];
94373 var E = this.h[4];
94374 var Ah = A;
94375 var Bh = B;
94376 var Ch = C;
94377 var Dh = D;
94378 var Eh = E;
94379 for (var j = 0; j < 80; j++) {
94380 var T = sum32(
94381 rotl32(
94382 sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
94383 s[j]),
94384 E);
94385 A = E;
94386 E = D;
94387 D = rotl32(C, 10);
94388 C = B;
94389 B = T;
94390 T = sum32(
94391 rotl32(
94392 sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
94393 sh[j]),
94394 Eh);
94395 Ah = Eh;
94396 Eh = Dh;
94397 Dh = rotl32(Ch, 10);
94398 Ch = Bh;
94399 Bh = T;
94400 }
94401 T = sum32_3(this.h[1], C, Dh);
94402 this.h[1] = sum32_3(this.h[2], D, Eh);
94403 this.h[2] = sum32_3(this.h[3], E, Ah);
94404 this.h[3] = sum32_3(this.h[4], A, Bh);
94405 this.h[4] = sum32_3(this.h[0], B, Ch);
94406 this.h[0] = T;
94407 };
94408
94409 RIPEMD160.prototype._digest = function digest(enc) {
94410 if (enc === 'hex')
94411 return utils.toHex32(this.h, 'little');
94412 else
94413 return utils.split32(this.h, 'little');
94414 };
94415
94416 function f(j, x, y, z) {
94417 if (j <= 15)
94418 return x ^ y ^ z;
94419 else if (j <= 31)
94420 return (x & y) | ((~x) & z);
94421 else if (j <= 47)
94422 return (x | (~y)) ^ z;
94423 else if (j <= 63)
94424 return (x & z) | (y & (~z));
94425 else
94426 return x ^ (y | (~z));
94427 }
94428
94429 function K(j) {
94430 if (j <= 15)
94431 return 0x00000000;
94432 else if (j <= 31)
94433 return 0x5a827999;
94434 else if (j <= 47)
94435 return 0x6ed9eba1;
94436 else if (j <= 63)
94437 return 0x8f1bbcdc;
94438 else
94439 return 0xa953fd4e;
94440 }
94441
94442 function Kh(j) {
94443 if (j <= 15)
94444 return 0x50a28be6;
94445 else if (j <= 31)
94446 return 0x5c4dd124;
94447 else if (j <= 47)
94448 return 0x6d703ef3;
94449 else if (j <= 63)
94450 return 0x7a6d76e9;
94451 else
94452 return 0x00000000;
94453 }
94454
94455 var r = [
94456 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
94457 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
94458 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
94459 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
94460 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
94461 ];
94462
94463 var rh = [
94464 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
94465 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
94466 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
94467 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
94468 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
94469 ];
94470
94471 var s = [
94472 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
94473 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
94474 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
94475 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
94476 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
94477 ];
94478
94479 var sh = [
94480 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
94481 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
94482 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
94483 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
94484 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
94485 ];
94486
94487 },{"../hash":57}],61:[function(require,module,exports){
94488 var hash = require('../hash');
94489 var utils = hash.utils;
94490 var assert = utils.assert;
94491
94492 var rotr32 = utils.rotr32;
94493 var rotl32 = utils.rotl32;
94494 var sum32 = utils.sum32;
94495 var sum32_4 = utils.sum32_4;
94496 var sum32_5 = utils.sum32_5;
94497 var rotr64_hi = utils.rotr64_hi;
94498 var rotr64_lo = utils.rotr64_lo;
94499 var shr64_hi = utils.shr64_hi;
94500 var shr64_lo = utils.shr64_lo;
94501 var sum64 = utils.sum64;
94502 var sum64_hi = utils.sum64_hi;
94503 var sum64_lo = utils.sum64_lo;
94504 var sum64_4_hi = utils.sum64_4_hi;
94505 var sum64_4_lo = utils.sum64_4_lo;
94506 var sum64_5_hi = utils.sum64_5_hi;
94507 var sum64_5_lo = utils.sum64_5_lo;
94508 var BlockHash = hash.common.BlockHash;
94509
94510 var sha256_K = [
94511 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
94512 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
94513 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
94514 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
94515 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
94516 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
94517 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
94518 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
94519 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
94520 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
94521 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
94522 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
94523 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
94524 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
94525 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
94526 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
94527 ];
94528
94529 var sha512_K = [
94530 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
94531 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
94532 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
94533 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
94534 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
94535 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
94536 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
94537 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
94538 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
94539 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
94540 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
94541 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
94542 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
94543 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
94544 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
94545 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
94546 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
94547 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
94548 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
94549 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
94550 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
94551 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
94552 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
94553 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
94554 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
94555 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
94556 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
94557 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
94558 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
94559 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
94560 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
94561 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
94562 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
94563 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
94564 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
94565 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
94566 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
94567 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
94568 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
94569 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
94570 ];
94571
94572 var sha1_K = [
94573 0x5A827999, 0x6ED9EBA1,
94574 0x8F1BBCDC, 0xCA62C1D6
94575 ];
94576
94577 function SHA256() {
94578 if (!(this instanceof SHA256))
94579 return new SHA256();
94580
94581 BlockHash.call(this);
94582 this.h = [ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
94583 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ];
94584 this.k = sha256_K;
94585 this.W = new Array(64);
94586 }
94587 utils.inherits(SHA256, BlockHash);
94588 exports.sha256 = SHA256;
94589
94590 SHA256.blockSize = 512;
94591 SHA256.outSize = 256;
94592 SHA256.hmacStrength = 192;
94593 SHA256.padLength = 64;
94594
94595 SHA256.prototype._update = function _update(msg, start) {
94596 var W = this.W;
94597
94598 for (var i = 0; i < 16; i++)
94599 W[i] = msg[start + i];
94600 for (; i < W.length; i++)
94601 W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
94602
94603 var a = this.h[0];
94604 var b = this.h[1];
94605 var c = this.h[2];
94606 var d = this.h[3];
94607 var e = this.h[4];
94608 var f = this.h[5];
94609 var g = this.h[6];
94610 var h = this.h[7];
94611
94612 assert(this.k.length === W.length);
94613 for (var i = 0; i < W.length; i++) {
94614 var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
94615 var T2 = sum32(s0_256(a), maj32(a, b, c));
94616 h = g;
94617 g = f;
94618 f = e;
94619 e = sum32(d, T1);
94620 d = c;
94621 c = b;
94622 b = a;
94623 a = sum32(T1, T2);
94624 }
94625
94626 this.h[0] = sum32(this.h[0], a);
94627 this.h[1] = sum32(this.h[1], b);
94628 this.h[2] = sum32(this.h[2], c);
94629 this.h[3] = sum32(this.h[3], d);
94630 this.h[4] = sum32(this.h[4], e);
94631 this.h[5] = sum32(this.h[5], f);
94632 this.h[6] = sum32(this.h[6], g);
94633 this.h[7] = sum32(this.h[7], h);
94634 };
94635
94636 SHA256.prototype._digest = function digest(enc) {
94637 if (enc === 'hex')
94638 return utils.toHex32(this.h, 'big');
94639 else
94640 return utils.split32(this.h, 'big');
94641 };
94642
94643 function SHA224() {
94644 if (!(this instanceof SHA224))
94645 return new SHA224();
94646
94647 SHA256.call(this);
94648 this.h = [ 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
94649 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];
94650 }
94651 utils.inherits(SHA224, SHA256);
94652 exports.sha224 = SHA224;
94653
94654 SHA224.blockSize = 512;
94655 SHA224.outSize = 224;
94656 SHA224.hmacStrength = 192;
94657 SHA224.padLength = 64;
94658
94659 SHA224.prototype._digest = function digest(enc) {
94660 // Just truncate output
94661 if (enc === 'hex')
94662 return utils.toHex32(this.h.slice(0, 7), 'big');
94663 else
94664 return utils.split32(this.h.slice(0, 7), 'big');
94665 };
94666
94667 function SHA512() {
94668 if (!(this instanceof SHA512))
94669 return new SHA512();
94670
94671 BlockHash.call(this);
94672 this.h = [ 0x6a09e667, 0xf3bcc908,
94673 0xbb67ae85, 0x84caa73b,
94674 0x3c6ef372, 0xfe94f82b,
94675 0xa54ff53a, 0x5f1d36f1,
94676 0x510e527f, 0xade682d1,
94677 0x9b05688c, 0x2b3e6c1f,
94678 0x1f83d9ab, 0xfb41bd6b,
94679 0x5be0cd19, 0x137e2179 ];
94680 this.k = sha512_K;
94681 this.W = new Array(160);
94682 }
94683 utils.inherits(SHA512, BlockHash);
94684 exports.sha512 = SHA512;
94685
94686 SHA512.blockSize = 1024;
94687 SHA512.outSize = 512;
94688 SHA512.hmacStrength = 192;
94689 SHA512.padLength = 128;
94690
94691 SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
94692 var W = this.W;
94693
94694 // 32 x 32bit words
94695 for (var i = 0; i < 32; i++)
94696 W[i] = msg[start + i];
94697 for (; i < W.length; i += 2) {
94698 var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2
94699 var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
94700 var c1_hi = W[i - 14]; // i - 7
94701 var c1_lo = W[i - 13];
94702 var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15
94703 var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
94704 var c3_hi = W[i - 32]; // i - 16
94705 var c3_lo = W[i - 31];
94706
94707 W[i] = sum64_4_hi(c0_hi, c0_lo,
94708 c1_hi, c1_lo,
94709 c2_hi, c2_lo,
94710 c3_hi, c3_lo);
94711 W[i + 1] = sum64_4_lo(c0_hi, c0_lo,
94712 c1_hi, c1_lo,
94713 c2_hi, c2_lo,
94714 c3_hi, c3_lo);
94715 }
94716 };
94717
94718 SHA512.prototype._update = function _update(msg, start) {
94719 this._prepareBlock(msg, start);
94720
94721 var W = this.W;
94722
94723 var ah = this.h[0];
94724 var al = this.h[1];
94725 var bh = this.h[2];
94726 var bl = this.h[3];
94727 var ch = this.h[4];
94728 var cl = this.h[5];
94729 var dh = this.h[6];
94730 var dl = this.h[7];
94731 var eh = this.h[8];
94732 var el = this.h[9];
94733 var fh = this.h[10];
94734 var fl = this.h[11];
94735 var gh = this.h[12];
94736 var gl = this.h[13];
94737 var hh = this.h[14];
94738 var hl = this.h[15];
94739
94740 assert(this.k.length === W.length);
94741 for (var i = 0; i < W.length; i += 2) {
94742 var c0_hi = hh;
94743 var c0_lo = hl;
94744 var c1_hi = s1_512_hi(eh, el);
94745 var c1_lo = s1_512_lo(eh, el);
94746 var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
94747 var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
94748 var c3_hi = this.k[i];
94749 var c3_lo = this.k[i + 1];
94750 var c4_hi = W[i];
94751 var c4_lo = W[i + 1];
94752
94753 var T1_hi = sum64_5_hi(c0_hi, c0_lo,
94754 c1_hi, c1_lo,
94755 c2_hi, c2_lo,
94756 c3_hi, c3_lo,
94757 c4_hi, c4_lo);
94758 var T1_lo = sum64_5_lo(c0_hi, c0_lo,
94759 c1_hi, c1_lo,
94760 c2_hi, c2_lo,
94761 c3_hi, c3_lo,
94762 c4_hi, c4_lo);
94763
94764 var c0_hi = s0_512_hi(ah, al);
94765 var c0_lo = s0_512_lo(ah, al);
94766 var c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
94767 var c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
94768
94769 var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
94770 var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
94771
94772 hh = gh;
94773 hl = gl;
94774
94775 gh = fh;
94776 gl = fl;
94777
94778 fh = eh;
94779 fl = el;
94780
94781 eh = sum64_hi(dh, dl, T1_hi, T1_lo);
94782 el = sum64_lo(dl, dl, T1_hi, T1_lo);
94783
94784 dh = ch;
94785 dl = cl;
94786
94787 ch = bh;
94788 cl = bl;
94789
94790 bh = ah;
94791 bl = al;
94792
94793 ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
94794 al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
94795 }
94796
94797 sum64(this.h, 0, ah, al);
94798 sum64(this.h, 2, bh, bl);
94799 sum64(this.h, 4, ch, cl);
94800 sum64(this.h, 6, dh, dl);
94801 sum64(this.h, 8, eh, el);
94802 sum64(this.h, 10, fh, fl);
94803 sum64(this.h, 12, gh, gl);
94804 sum64(this.h, 14, hh, hl);
94805 };
94806
94807 SHA512.prototype._digest = function digest(enc) {
94808 if (enc === 'hex')
94809 return utils.toHex32(this.h, 'big');
94810 else
94811 return utils.split32(this.h, 'big');
94812 };
94813
94814 function SHA384() {
94815 if (!(this instanceof SHA384))
94816 return new SHA384();
94817
94818 SHA512.call(this);
94819 this.h = [ 0xcbbb9d5d, 0xc1059ed8,
94820 0x629a292a, 0x367cd507,
94821 0x9159015a, 0x3070dd17,
94822 0x152fecd8, 0xf70e5939,
94823 0x67332667, 0xffc00b31,
94824 0x8eb44a87, 0x68581511,
94825 0xdb0c2e0d, 0x64f98fa7,
94826 0x47b5481d, 0xbefa4fa4 ];
94827 }
94828 utils.inherits(SHA384, SHA512);
94829 exports.sha384 = SHA384;
94830
94831 SHA384.blockSize = 1024;
94832 SHA384.outSize = 384;
94833 SHA384.hmacStrength = 192;
94834 SHA384.padLength = 128;
94835
94836 SHA384.prototype._digest = function digest(enc) {
94837 if (enc === 'hex')
94838 return utils.toHex32(this.h.slice(0, 12), 'big');
94839 else
94840 return utils.split32(this.h.slice(0, 12), 'big');
94841 };
94842
94843 function SHA1() {
94844 if (!(this instanceof SHA1))
94845 return new SHA1();
94846
94847 BlockHash.call(this);
94848 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe,
94849 0x10325476, 0xc3d2e1f0 ];
94850 this.W = new Array(80);
94851 }
94852
94853 utils.inherits(SHA1, BlockHash);
94854 exports.sha1 = SHA1;
94855
94856 SHA1.blockSize = 512;
94857 SHA1.outSize = 160;
94858 SHA1.hmacStrength = 80;
94859 SHA1.padLength = 64;
94860
94861 SHA1.prototype._update = function _update(msg, start) {
94862 var W = this.W;
94863
94864 for (var i = 0; i < 16; i++)
94865 W[i] = msg[start + i];
94866
94867 for(; i < W.length; i++)
94868 W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
94869
94870 var a = this.h[0];
94871 var b = this.h[1];
94872 var c = this.h[2];
94873 var d = this.h[3];
94874 var e = this.h[4];
94875
94876 for (var i = 0; i < W.length; i++) {
94877 var s = ~~(i / 20);
94878 var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
94879 e = d;
94880 d = c;
94881 c = rotl32(b, 30);
94882 b = a;
94883 a = t;
94884 }
94885
94886 this.h[0] = sum32(this.h[0], a);
94887 this.h[1] = sum32(this.h[1], b);
94888 this.h[2] = sum32(this.h[2], c);
94889 this.h[3] = sum32(this.h[3], d);
94890 this.h[4] = sum32(this.h[4], e);
94891 };
94892
94893 SHA1.prototype._digest = function digest(enc) {
94894 if (enc === 'hex')
94895 return utils.toHex32(this.h, 'big');
94896 else
94897 return utils.split32(this.h, 'big');
94898 };
94899
94900 function ch32(x, y, z) {
94901 return (x & y) ^ ((~x) & z);
94902 }
94903
94904 function maj32(x, y, z) {
94905 return (x & y) ^ (x & z) ^ (y & z);
94906 }
94907
94908 function p32(x, y, z) {
94909 return x ^ y ^ z;
94910 }
94911
94912 function s0_256(x) {
94913 return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
94914 }
94915
94916 function s1_256(x) {
94917 return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
94918 }
94919
94920 function g0_256(x) {
94921 return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);
94922 }
94923
94924 function g1_256(x) {
94925 return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
94926 }
94927
94928 function ft_1(s, x, y, z) {
94929 if (s === 0)
94930 return ch32(x, y, z);
94931 if (s === 1 || s === 3)
94932 return p32(x, y, z);
94933 if (s === 2)
94934 return maj32(x, y, z);
94935 }
94936
94937 function ch64_hi(xh, xl, yh, yl, zh, zl) {
94938 var r = (xh & yh) ^ ((~xh) & zh);
94939 if (r < 0)
94940 r += 0x100000000;
94941 return r;
94942 }
94943
94944 function ch64_lo(xh, xl, yh, yl, zh, zl) {
94945 var r = (xl & yl) ^ ((~xl) & zl);
94946 if (r < 0)
94947 r += 0x100000000;
94948 return r;
94949 }
94950
94951 function maj64_hi(xh, xl, yh, yl, zh, zl) {
94952 var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);
94953 if (r < 0)
94954 r += 0x100000000;
94955 return r;
94956 }
94957
94958 function maj64_lo(xh, xl, yh, yl, zh, zl) {
94959 var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);
94960 if (r < 0)
94961 r += 0x100000000;
94962 return r;
94963 }
94964
94965 function s0_512_hi(xh, xl) {
94966 var c0_hi = rotr64_hi(xh, xl, 28);
94967 var c1_hi = rotr64_hi(xl, xh, 2); // 34
94968 var c2_hi = rotr64_hi(xl, xh, 7); // 39
94969
94970 var r = c0_hi ^ c1_hi ^ c2_hi;
94971 if (r < 0)
94972 r += 0x100000000;
94973 return r;
94974 }
94975
94976 function s0_512_lo(xh, xl) {
94977 var c0_lo = rotr64_lo(xh, xl, 28);
94978 var c1_lo = rotr64_lo(xl, xh, 2); // 34
94979 var c2_lo = rotr64_lo(xl, xh, 7); // 39
94980
94981 var r = c0_lo ^ c1_lo ^ c2_lo;
94982 if (r < 0)
94983 r += 0x100000000;
94984 return r;
94985 }
94986
94987 function s1_512_hi(xh, xl) {
94988 var c0_hi = rotr64_hi(xh, xl, 14);
94989 var c1_hi = rotr64_hi(xh, xl, 18);
94990 var c2_hi = rotr64_hi(xl, xh, 9); // 41
94991
94992 var r = c0_hi ^ c1_hi ^ c2_hi;
94993 if (r < 0)
94994 r += 0x100000000;
94995 return r;
94996 }
94997
94998 function s1_512_lo(xh, xl) {
94999 var c0_lo = rotr64_lo(xh, xl, 14);
95000 var c1_lo = rotr64_lo(xh, xl, 18);
95001 var c2_lo = rotr64_lo(xl, xh, 9); // 41
95002
95003 var r = c0_lo ^ c1_lo ^ c2_lo;
95004 if (r < 0)
95005 r += 0x100000000;
95006 return r;
95007 }
95008
95009 function g0_512_hi(xh, xl) {
95010 var c0_hi = rotr64_hi(xh, xl, 1);
95011 var c1_hi = rotr64_hi(xh, xl, 8);
95012 var c2_hi = shr64_hi(xh, xl, 7);
95013
95014 var r = c0_hi ^ c1_hi ^ c2_hi;
95015 if (r < 0)
95016 r += 0x100000000;
95017 return r;
95018 }
95019
95020 function g0_512_lo(xh, xl) {
95021 var c0_lo = rotr64_lo(xh, xl, 1);
95022 var c1_lo = rotr64_lo(xh, xl, 8);
95023 var c2_lo = shr64_lo(xh, xl, 7);
95024
95025 var r = c0_lo ^ c1_lo ^ c2_lo;
95026 if (r < 0)
95027 r += 0x100000000;
95028 return r;
95029 }
95030
95031 function g1_512_hi(xh, xl) {
95032 var c0_hi = rotr64_hi(xh, xl, 19);
95033 var c1_hi = rotr64_hi(xl, xh, 29); // 61
95034 var c2_hi = shr64_hi(xh, xl, 6);
95035
95036 var r = c0_hi ^ c1_hi ^ c2_hi;
95037 if (r < 0)
95038 r += 0x100000000;
95039 return r;
95040 }
95041
95042 function g1_512_lo(xh, xl) {
95043 var c0_lo = rotr64_lo(xh, xl, 19);
95044 var c1_lo = rotr64_lo(xl, xh, 29); // 61
95045 var c2_lo = shr64_lo(xh, xl, 6);
95046
95047 var r = c0_lo ^ c1_lo ^ c2_lo;
95048 if (r < 0)
95049 r += 0x100000000;
95050 return r;
95051 }
95052
95053 },{"../hash":57}],62:[function(require,module,exports){
95054 var utils = exports;
95055 var inherits = require('inherits');
95056
95057 function toArray(msg, enc) {
95058 if (Array.isArray(msg))
95059 return msg.slice();
95060 if (!msg)
95061 return [];
95062 var res = [];
95063 if (typeof msg === 'string') {
95064 if (!enc) {
95065 for (var i = 0; i < msg.length; i++) {
95066 var c = msg.charCodeAt(i);
95067 var hi = c >> 8;
95068 var lo = c & 0xff;
95069 if (hi)
95070 res.push(hi, lo);
95071 else
95072 res.push(lo);
95073 }
95074 } else if (enc === 'hex') {
95075 msg = msg.replace(/[^a-z0-9]+/ig, '');
95076 if (msg.length % 2 !== 0)
95077 msg = '0' + msg;
95078 for (var i = 0; i < msg.length; i += 2)
95079 res.push(parseInt(msg[i] + msg[i + 1], 16));
95080 }
95081 } else {
95082 for (var i = 0; i < msg.length; i++)
95083 res[i] = msg[i] | 0;
95084 }
95085 return res;
95086 }
95087 utils.toArray = toArray;
95088
95089 function toHex(msg) {
95090 var res = '';
95091 for (var i = 0; i < msg.length; i++)
95092 res += zero2(msg[i].toString(16));
95093 return res;
95094 }
95095 utils.toHex = toHex;
95096
95097 function htonl(w) {
95098 var res = (w >>> 24) |
95099 ((w >>> 8) & 0xff00) |
95100 ((w << 8) & 0xff0000) |
95101 ((w & 0xff) << 24);
95102 return res >>> 0;
95103 }
95104 utils.htonl = htonl;
95105
95106 function toHex32(msg, endian) {
95107 var res = '';
95108 for (var i = 0; i < msg.length; i++) {
95109 var w = msg[i];
95110 if (endian === 'little')
95111 w = htonl(w);
95112 res += zero8(w.toString(16));
95113 }
95114 return res;
95115 }
95116 utils.toHex32 = toHex32;
95117
95118 function zero2(word) {
95119 if (word.length === 1)
95120 return '0' + word;
95121 else
95122 return word;
95123 }
95124 utils.zero2 = zero2;
95125
95126 function zero8(word) {
95127 if (word.length === 7)
95128 return '0' + word;
95129 else if (word.length === 6)
95130 return '00' + word;
95131 else if (word.length === 5)
95132 return '000' + word;
95133 else if (word.length === 4)
95134 return '0000' + word;
95135 else if (word.length === 3)
95136 return '00000' + word;
95137 else if (word.length === 2)
95138 return '000000' + word;
95139 else if (word.length === 1)
95140 return '0000000' + word;
95141 else
95142 return word;
95143 }
95144 utils.zero8 = zero8;
95145
95146 function join32(msg, start, end, endian) {
95147 var len = end - start;
95148 assert(len % 4 === 0);
95149 var res = new Array(len / 4);
95150 for (var i = 0, k = start; i < res.length; i++, k += 4) {
95151 var w;
95152 if (endian === 'big')
95153 w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
95154 else
95155 w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
95156 res[i] = w >>> 0;
95157 }
95158 return res;
95159 }
95160 utils.join32 = join32;
95161
95162 function split32(msg, endian) {
95163 var res = new Array(msg.length * 4);
95164 for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
95165 var m = msg[i];
95166 if (endian === 'big') {
95167 res[k] = m >>> 24;
95168 res[k + 1] = (m >>> 16) & 0xff;
95169 res[k + 2] = (m >>> 8) & 0xff;
95170 res[k + 3] = m & 0xff;
95171 } else {
95172 res[k + 3] = m >>> 24;
95173 res[k + 2] = (m >>> 16) & 0xff;
95174 res[k + 1] = (m >>> 8) & 0xff;
95175 res[k] = m & 0xff;
95176 }
95177 }
95178 return res;
95179 }
95180 utils.split32 = split32;
95181
95182 function rotr32(w, b) {
95183 return (w >>> b) | (w << (32 - b));
95184 }
95185 utils.rotr32 = rotr32;
95186
95187 function rotl32(w, b) {
95188 return (w << b) | (w >>> (32 - b));
95189 }
95190 utils.rotl32 = rotl32;
95191
95192 function sum32(a, b) {
95193 return (a + b) >>> 0;
95194 }
95195 utils.sum32 = sum32;
95196
95197 function sum32_3(a, b, c) {
95198 return (a + b + c) >>> 0;
95199 }
95200 utils.sum32_3 = sum32_3;
95201
95202 function sum32_4(a, b, c, d) {
95203 return (a + b + c + d) >>> 0;
95204 }
95205 utils.sum32_4 = sum32_4;
95206
95207 function sum32_5(a, b, c, d, e) {
95208 return (a + b + c + d + e) >>> 0;
95209 }
95210 utils.sum32_5 = sum32_5;
95211
95212 function assert(cond, msg) {
95213 if (!cond)
95214 throw new Error(msg || 'Assertion failed');
95215 }
95216 utils.assert = assert;
95217
95218 utils.inherits = inherits;
95219
95220 function sum64(buf, pos, ah, al) {
95221 var bh = buf[pos];
95222 var bl = buf[pos + 1];
95223
95224 var lo = (al + bl) >>> 0;
95225 var hi = (lo < al ? 1 : 0) + ah + bh;
95226 buf[pos] = hi >>> 0;
95227 buf[pos + 1] = lo;
95228 }
95229 exports.sum64 = sum64;
95230
95231 function sum64_hi(ah, al, bh, bl) {
95232 var lo = (al + bl) >>> 0;
95233 var hi = (lo < al ? 1 : 0) + ah + bh;
95234 return hi >>> 0;
95235 };
95236 exports.sum64_hi = sum64_hi;
95237
95238 function sum64_lo(ah, al, bh, bl) {
95239 var lo = al + bl;
95240 return lo >>> 0;
95241 };
95242 exports.sum64_lo = sum64_lo;
95243
95244 function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
95245 var carry = 0;
95246 var lo = al;
95247 lo = (lo + bl) >>> 0;
95248 carry += lo < al ? 1 : 0;
95249 lo = (lo + cl) >>> 0;
95250 carry += lo < cl ? 1 : 0;
95251 lo = (lo + dl) >>> 0;
95252 carry += lo < dl ? 1 : 0;
95253
95254 var hi = ah + bh + ch + dh + carry;
95255 return hi >>> 0;
95256 };
95257 exports.sum64_4_hi = sum64_4_hi;
95258
95259 function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
95260 var lo = al + bl + cl + dl;
95261 return lo >>> 0;
95262 };
95263 exports.sum64_4_lo = sum64_4_lo;
95264
95265 function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
95266 var carry = 0;
95267 var lo = al;
95268 lo = (lo + bl) >>> 0;
95269 carry += lo < al ? 1 : 0;
95270 lo = (lo + cl) >>> 0;
95271 carry += lo < cl ? 1 : 0;
95272 lo = (lo + dl) >>> 0;
95273 carry += lo < dl ? 1 : 0;
95274 lo = (lo + el) >>> 0;
95275 carry += lo < el ? 1 : 0;
95276
95277 var hi = ah + bh + ch + dh + eh + carry;
95278 return hi >>> 0;
95279 };
95280 exports.sum64_5_hi = sum64_5_hi;
95281
95282 function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
95283 var lo = al + bl + cl + dl + el;
95284
95285 return lo >>> 0;
95286 };
95287 exports.sum64_5_lo = sum64_5_lo;
95288
95289 function rotr64_hi(ah, al, num) {
95290 var r = (al << (32 - num)) | (ah >>> num);
95291 return r >>> 0;
95292 };
95293 exports.rotr64_hi = rotr64_hi;
95294
95295 function rotr64_lo(ah, al, num) {
95296 var r = (ah << (32 - num)) | (al >>> num);
95297 return r >>> 0;
95298 };
95299 exports.rotr64_lo = rotr64_lo;
95300
95301 function shr64_hi(ah, al, num) {
95302 return ah >>> num;
95303 };
95304 exports.shr64_hi = shr64_hi;
95305
95306 function shr64_lo(ah, al, num) {
95307 var r = (ah << (32 - num)) | (al >>> num);
95308 return r >>> 0;
95309 };
95310 exports.shr64_lo = shr64_lo;
95311
95312 },{"inherits":63}],63:[function(require,module,exports){
95313 arguments[4][9][0].apply(exports,arguments)
95314 },{"dup":9}],64:[function(require,module,exports){
95315 /**
95316 * Returns a `Boolean` on whether or not the a `String` starts with '0x'
95317 * @param {String} str the string input value
95318 * @return {Boolean} a boolean if it is or is not hex prefixed
95319 * @throws if the str input is not a string
95320 */
95321 module.exports = function isHexPrefixed(str) {
95322 if (typeof str !== 'string') {
95323 throw new Error("[is-hex-prefixed] value must be type 'string', is currently type " + (typeof str) + ", while checking isHexPrefixed.");
95324 }
95325
95326 return str.slice(0, 2) === '0x';
95327 }
95328
95329 },{}],65:[function(require,module,exports){
95330 'use strict'
95331 module.exports = require('./lib/api')(require('./lib/keccak'))
95332
95333 },{"./lib/api":66,"./lib/keccak":70}],66:[function(require,module,exports){
95334 'use strict'
95335 var createKeccak = require('./keccak')
95336 var createShake = require('./shake')
95337
95338 module.exports = function (KeccakState) {
95339 var Keccak = createKeccak(KeccakState)
95340 var Shake = createShake(KeccakState)
95341
95342 return function (algorithm, options) {
95343 var hash = typeof algorithm === 'string' ? algorithm.toLowerCase() : algorithm
95344 switch (hash) {
95345 case 'keccak224': return new Keccak(1152, 448, null, 224, options)
95346 case 'keccak256': return new Keccak(1088, 512, null, 256, options)
95347 case 'keccak384': return new Keccak(832, 768, null, 384, options)
95348 case 'keccak512': return new Keccak(576, 1024, null, 512, options)
95349
95350 case 'sha3-224': return new Keccak(1152, 448, 0x06, 224, options)
95351 case 'sha3-256': return new Keccak(1088, 512, 0x06, 256, options)
95352 case 'sha3-384': return new Keccak(832, 768, 0x06, 384, options)
95353 case 'sha3-512': return new Keccak(576, 1024, 0x06, 512, options)
95354
95355 case 'shake128': return new Shake(1344, 256, 0x1f, options)
95356 case 'shake256': return new Shake(1088, 512, 0x1f, options)
95357
95358 default: throw new Error('Invald algorithm: ' + algorithm)
95359 }
95360 }
95361 }
95362
95363 },{"./keccak":67,"./shake":68}],67:[function(require,module,exports){
95364 (function (Buffer){
95365 'use strict'
95366 var Transform = require('stream').Transform
95367 var inherits = require('inherits')
95368
95369 module.exports = function (KeccakState) {
95370 function Keccak (rate, capacity, delimitedSuffix, hashBitLength, options) {
95371 Transform.call(this, options)
95372
95373 this._rate = rate
95374 this._capacity = capacity
95375 this._delimitedSuffix = delimitedSuffix
95376 this._hashBitLength = hashBitLength
95377 this._options = options
95378
95379 this._state = new KeccakState()
95380 this._state.initialize(rate, capacity)
95381 this._finalized = false
95382 }
95383
95384 inherits(Keccak, Transform)
95385
95386 Keccak.prototype._transform = function (chunk, encoding, callback) {
95387 var error = null
95388 try {
95389 this.update(chunk, encoding)
95390 } catch (err) {
95391 error = err
95392 }
95393
95394 callback(error)
95395 }
95396
95397 Keccak.prototype._flush = function (callback) {
95398 var error = null
95399 try {
95400 this.push(this.digest())
95401 } catch (err) {
95402 error = err
95403 }
95404
95405 callback(error)
95406 }
95407
95408 Keccak.prototype.update = function (data, encoding) {
95409 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
95410 if (this._finalized) throw new Error('Digest already called')
95411 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
95412
95413 this._state.absorb(data)
95414
95415 return this
95416 }
95417
95418 Keccak.prototype.digest = function (encoding) {
95419 if (this._finalized) throw new Error('Digest already called')
95420 this._finalized = true
95421
95422 if (this._delimitedSuffix) this._state.absorbLastFewBits(this._delimitedSuffix)
95423 var digest = this._state.squeeze(this._hashBitLength / 8)
95424 if (encoding !== undefined) digest = digest.toString(encoding)
95425
95426 this._resetState()
95427
95428 return digest
95429 }
95430
95431 // remove result from memory
95432 Keccak.prototype._resetState = function () {
95433 this._state.initialize(this._rate, this._capacity)
95434 return this
95435 }
95436
95437 // because sometimes we need hash right now and little later
95438 Keccak.prototype._clone = function () {
95439 var clone = new Keccak(this._rate, this._capacity, this._delimitedSuffix, this._hashBitLength, this._options)
95440 this._state.copy(clone._state)
95441 clone._finalized = this._finalized
95442
95443 return clone
95444 }
95445
95446 return Keccak
95447 }
95448
95449 }).call(this,require("buffer").Buffer)
95450 },{"buffer":5,"inherits":63,"stream":25}],68:[function(require,module,exports){
95451 (function (Buffer){
95452 'use strict'
95453 var Transform = require('stream').Transform
95454 var inherits = require('inherits')
95455
95456 module.exports = function (KeccakState) {
95457 function Shake (rate, capacity, delimitedSuffix, options) {
95458 Transform.call(this, options)
95459
95460 this._rate = rate
95461 this._capacity = capacity
95462 this._delimitedSuffix = delimitedSuffix
95463 this._options = options
95464
95465 this._state = new KeccakState()
95466 this._state.initialize(rate, capacity)
95467 this._finalized = false
95468 }
95469
95470 inherits(Shake, Transform)
95471
95472 Shake.prototype._transform = function (chunk, encoding, callback) {
95473 var error = null
95474 try {
95475 this.update(chunk, encoding)
95476 } catch (err) {
95477 error = err
95478 }
95479
95480 callback(error)
95481 }
95482
95483 Shake.prototype._flush = function () {}
95484
95485 Shake.prototype._read = function (size) {
95486 this.push(this.squeeze(size))
95487 }
95488
95489 Shake.prototype.update = function (data, encoding) {
95490 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
95491 if (this._finalized) throw new Error('Squeeze already called')
95492 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
95493
95494 this._state.absorb(data)
95495
95496 return this
95497 }
95498
95499 Shake.prototype.squeeze = function (dataByteLength, encoding) {
95500 if (!this._finalized) {
95501 this._finalized = true
95502 this._state.absorbLastFewBits(this._delimitedSuffix)
95503 }
95504
95505 var data = this._state.squeeze(dataByteLength)
95506 if (encoding !== undefined) data = data.toString(encoding)
95507
95508 return data
95509 }
95510
95511 Shake.prototype._resetState = function () {
95512 this._state.initialize(this._rate, this._capacity)
95513 return this
95514 }
95515
95516 Shake.prototype._clone = function () {
95517 var clone = new Shake(this._rate, this._capacity, this._delimitedSuffix, this._options)
95518 this._state.copy(clone._state)
95519 clone._finalized = this._finalized
95520
95521 return clone
95522 }
95523
95524 return Shake
95525 }
95526
95527 }).call(this,require("buffer").Buffer)
95528 },{"buffer":5,"inherits":63,"stream":25}],69:[function(require,module,exports){
95529 'use strict'
95530 var 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]
95531
95532 exports.p1600 = function (s) {
95533 for (var round = 0; round < 24; ++round) {
95534 // theta
95535 var lo0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]
95536 var hi0 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]
95537 var lo1 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]
95538 var hi1 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]
95539 var lo2 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]
95540 var hi2 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]
95541 var lo3 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]
95542 var hi3 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]
95543 var lo4 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]
95544 var hi4 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]
95545
95546 var lo = lo4 ^ (lo1 << 1 | hi1 >>> 31)
95547 var hi = hi4 ^ (hi1 << 1 | lo1 >>> 31)
95548 var t1slo0 = s[0] ^ lo
95549 var t1shi0 = s[1] ^ hi
95550 var t1slo5 = s[10] ^ lo
95551 var t1shi5 = s[11] ^ hi
95552 var t1slo10 = s[20] ^ lo
95553 var t1shi10 = s[21] ^ hi
95554 var t1slo15 = s[30] ^ lo
95555 var t1shi15 = s[31] ^ hi
95556 var t1slo20 = s[40] ^ lo
95557 var t1shi20 = s[41] ^ hi
95558 lo = lo0 ^ (lo2 << 1 | hi2 >>> 31)
95559 hi = hi0 ^ (hi2 << 1 | lo2 >>> 31)
95560 var t1slo1 = s[2] ^ lo
95561 var t1shi1 = s[3] ^ hi
95562 var t1slo6 = s[12] ^ lo
95563 var t1shi6 = s[13] ^ hi
95564 var t1slo11 = s[22] ^ lo
95565 var t1shi11 = s[23] ^ hi
95566 var t1slo16 = s[32] ^ lo
95567 var t1shi16 = s[33] ^ hi
95568 var t1slo21 = s[42] ^ lo
95569 var t1shi21 = s[43] ^ hi
95570 lo = lo1 ^ (lo3 << 1 | hi3 >>> 31)
95571 hi = hi1 ^ (hi3 << 1 | lo3 >>> 31)
95572 var t1slo2 = s[4] ^ lo
95573 var t1shi2 = s[5] ^ hi
95574 var t1slo7 = s[14] ^ lo
95575 var t1shi7 = s[15] ^ hi
95576 var t1slo12 = s[24] ^ lo
95577 var t1shi12 = s[25] ^ hi
95578 var t1slo17 = s[34] ^ lo
95579 var t1shi17 = s[35] ^ hi
95580 var t1slo22 = s[44] ^ lo
95581 var t1shi22 = s[45] ^ hi
95582 lo = lo2 ^ (lo4 << 1 | hi4 >>> 31)
95583 hi = hi2 ^ (hi4 << 1 | lo4 >>> 31)
95584 var t1slo3 = s[6] ^ lo
95585 var t1shi3 = s[7] ^ hi
95586 var t1slo8 = s[16] ^ lo
95587 var t1shi8 = s[17] ^ hi
95588 var t1slo13 = s[26] ^ lo
95589 var t1shi13 = s[27] ^ hi
95590 var t1slo18 = s[36] ^ lo
95591 var t1shi18 = s[37] ^ hi
95592 var t1slo23 = s[46] ^ lo
95593 var t1shi23 = s[47] ^ hi
95594 lo = lo3 ^ (lo0 << 1 | hi0 >>> 31)
95595 hi = hi3 ^ (hi0 << 1 | lo0 >>> 31)
95596 var t1slo4 = s[8] ^ lo
95597 var t1shi4 = s[9] ^ hi
95598 var t1slo9 = s[18] ^ lo
95599 var t1shi9 = s[19] ^ hi
95600 var t1slo14 = s[28] ^ lo
95601 var t1shi14 = s[29] ^ hi
95602 var t1slo19 = s[38] ^ lo
95603 var t1shi19 = s[39] ^ hi
95604 var t1slo24 = s[48] ^ lo
95605 var t1shi24 = s[49] ^ hi
95606
95607 // rho & pi
95608 var t2slo0 = t1slo0
95609 var t2shi0 = t1shi0
95610 var t2slo16 = (t1shi5 << 4 | t1slo5 >>> 28)
95611 var t2shi16 = (t1slo5 << 4 | t1shi5 >>> 28)
95612 var t2slo7 = (t1slo10 << 3 | t1shi10 >>> 29)
95613 var t2shi7 = (t1shi10 << 3 | t1slo10 >>> 29)
95614 var t2slo23 = (t1shi15 << 9 | t1slo15 >>> 23)
95615 var t2shi23 = (t1slo15 << 9 | t1shi15 >>> 23)
95616 var t2slo14 = (t1slo20 << 18 | t1shi20 >>> 14)
95617 var t2shi14 = (t1shi20 << 18 | t1slo20 >>> 14)
95618 var t2slo10 = (t1slo1 << 1 | t1shi1 >>> 31)
95619 var t2shi10 = (t1shi1 << 1 | t1slo1 >>> 31)
95620 var t2slo1 = (t1shi6 << 12 | t1slo6 >>> 20)
95621 var t2shi1 = (t1slo6 << 12 | t1shi6 >>> 20)
95622 var t2slo17 = (t1slo11 << 10 | t1shi11 >>> 22)
95623 var t2shi17 = (t1shi11 << 10 | t1slo11 >>> 22)
95624 var t2slo8 = (t1shi16 << 13 | t1slo16 >>> 19)
95625 var t2shi8 = (t1slo16 << 13 | t1shi16 >>> 19)
95626 var t2slo24 = (t1slo21 << 2 | t1shi21 >>> 30)
95627 var t2shi24 = (t1shi21 << 2 | t1slo21 >>> 30)
95628 var t2slo20 = (t1shi2 << 30 | t1slo2 >>> 2)
95629 var t2shi20 = (t1slo2 << 30 | t1shi2 >>> 2)
95630 var t2slo11 = (t1slo7 << 6 | t1shi7 >>> 26)
95631 var t2shi11 = (t1shi7 << 6 | t1slo7 >>> 26)
95632 var t2slo2 = (t1shi12 << 11 | t1slo12 >>> 21)
95633 var t2shi2 = (t1slo12 << 11 | t1shi12 >>> 21)
95634 var t2slo18 = (t1slo17 << 15 | t1shi17 >>> 17)
95635 var t2shi18 = (t1shi17 << 15 | t1slo17 >>> 17)
95636 var t2slo9 = (t1shi22 << 29 | t1slo22 >>> 3)
95637 var t2shi9 = (t1slo22 << 29 | t1shi22 >>> 3)
95638 var t2slo5 = (t1slo3 << 28 | t1shi3 >>> 4)
95639 var t2shi5 = (t1shi3 << 28 | t1slo3 >>> 4)
95640 var t2slo21 = (t1shi8 << 23 | t1slo8 >>> 9)
95641 var t2shi21 = (t1slo8 << 23 | t1shi8 >>> 9)
95642 var t2slo12 = (t1slo13 << 25 | t1shi13 >>> 7)
95643 var t2shi12 = (t1shi13 << 25 | t1slo13 >>> 7)
95644 var t2slo3 = (t1slo18 << 21 | t1shi18 >>> 11)
95645 var t2shi3 = (t1shi18 << 21 | t1slo18 >>> 11)
95646 var t2slo19 = (t1shi23 << 24 | t1slo23 >>> 8)
95647 var t2shi19 = (t1slo23 << 24 | t1shi23 >>> 8)
95648 var t2slo15 = (t1slo4 << 27 | t1shi4 >>> 5)
95649 var t2shi15 = (t1shi4 << 27 | t1slo4 >>> 5)
95650 var t2slo6 = (t1slo9 << 20 | t1shi9 >>> 12)
95651 var t2shi6 = (t1shi9 << 20 | t1slo9 >>> 12)
95652 var t2slo22 = (t1shi14 << 7 | t1slo14 >>> 25)
95653 var t2shi22 = (t1slo14 << 7 | t1shi14 >>> 25)
95654 var t2slo13 = (t1slo19 << 8 | t1shi19 >>> 24)
95655 var t2shi13 = (t1shi19 << 8 | t1slo19 >>> 24)
95656 var t2slo4 = (t1slo24 << 14 | t1shi24 >>> 18)
95657 var t2shi4 = (t1shi24 << 14 | t1slo24 >>> 18)
95658
95659 // chi
95660 s[0] = t2slo0 ^ (~t2slo1 & t2slo2)
95661 s[1] = t2shi0 ^ (~t2shi1 & t2shi2)
95662 s[10] = t2slo5 ^ (~t2slo6 & t2slo7)
95663 s[11] = t2shi5 ^ (~t2shi6 & t2shi7)
95664 s[20] = t2slo10 ^ (~t2slo11 & t2slo12)
95665 s[21] = t2shi10 ^ (~t2shi11 & t2shi12)
95666 s[30] = t2slo15 ^ (~t2slo16 & t2slo17)
95667 s[31] = t2shi15 ^ (~t2shi16 & t2shi17)
95668 s[40] = t2slo20 ^ (~t2slo21 & t2slo22)
95669 s[41] = t2shi20 ^ (~t2shi21 & t2shi22)
95670 s[2] = t2slo1 ^ (~t2slo2 & t2slo3)
95671 s[3] = t2shi1 ^ (~t2shi2 & t2shi3)
95672 s[12] = t2slo6 ^ (~t2slo7 & t2slo8)
95673 s[13] = t2shi6 ^ (~t2shi7 & t2shi8)
95674 s[22] = t2slo11 ^ (~t2slo12 & t2slo13)
95675 s[23] = t2shi11 ^ (~t2shi12 & t2shi13)
95676 s[32] = t2slo16 ^ (~t2slo17 & t2slo18)
95677 s[33] = t2shi16 ^ (~t2shi17 & t2shi18)
95678 s[42] = t2slo21 ^ (~t2slo22 & t2slo23)
95679 s[43] = t2shi21 ^ (~t2shi22 & t2shi23)
95680 s[4] = t2slo2 ^ (~t2slo3 & t2slo4)
95681 s[5] = t2shi2 ^ (~t2shi3 & t2shi4)
95682 s[14] = t2slo7 ^ (~t2slo8 & t2slo9)
95683 s[15] = t2shi7 ^ (~t2shi8 & t2shi9)
95684 s[24] = t2slo12 ^ (~t2slo13 & t2slo14)
95685 s[25] = t2shi12 ^ (~t2shi13 & t2shi14)
95686 s[34] = t2slo17 ^ (~t2slo18 & t2slo19)
95687 s[35] = t2shi17 ^ (~t2shi18 & t2shi19)
95688 s[44] = t2slo22 ^ (~t2slo23 & t2slo24)
95689 s[45] = t2shi22 ^ (~t2shi23 & t2shi24)
95690 s[6] = t2slo3 ^ (~t2slo4 & t2slo0)
95691 s[7] = t2shi3 ^ (~t2shi4 & t2shi0)
95692 s[16] = t2slo8 ^ (~t2slo9 & t2slo5)
95693 s[17] = t2shi8 ^ (~t2shi9 & t2shi5)
95694 s[26] = t2slo13 ^ (~t2slo14 & t2slo10)
95695 s[27] = t2shi13 ^ (~t2shi14 & t2shi10)
95696 s[36] = t2slo18 ^ (~t2slo19 & t2slo15)
95697 s[37] = t2shi18 ^ (~t2shi19 & t2shi15)
95698 s[46] = t2slo23 ^ (~t2slo24 & t2slo20)
95699 s[47] = t2shi23 ^ (~t2shi24 & t2shi20)
95700 s[8] = t2slo4 ^ (~t2slo0 & t2slo1)
95701 s[9] = t2shi4 ^ (~t2shi0 & t2shi1)
95702 s[18] = t2slo9 ^ (~t2slo5 & t2slo6)
95703 s[19] = t2shi9 ^ (~t2shi5 & t2shi6)
95704 s[28] = t2slo14 ^ (~t2slo10 & t2slo11)
95705 s[29] = t2shi14 ^ (~t2shi10 & t2shi11)
95706 s[38] = t2slo19 ^ (~t2slo15 & t2slo16)
95707 s[39] = t2shi19 ^ (~t2shi15 & t2shi16)
95708 s[48] = t2slo24 ^ (~t2slo20 & t2slo21)
95709 s[49] = t2shi24 ^ (~t2shi20 & t2shi21)
95710
95711 // iota
95712 s[0] ^= P1600_ROUND_CONSTANTS[round * 2]
95713 s[1] ^= P1600_ROUND_CONSTANTS[round * 2 + 1]
95714 }
95715 }
95716
95717 },{}],70:[function(require,module,exports){
95718 (function (Buffer){
95719 'use strict'
95720 var keccakState = require('./keccak-state-unroll')
95721
95722 function Keccak () {
95723 // much faster than `new Array(50)`
95724 this.state = [
95725 0, 0, 0, 0, 0,
95726 0, 0, 0, 0, 0,
95727 0, 0, 0, 0, 0,
95728 0, 0, 0, 0, 0,
95729 0, 0, 0, 0, 0
95730 ]
95731
95732 this.blockSize = null
95733 this.count = 0
95734 this.squeezing = false
95735 }
95736
95737 Keccak.prototype.initialize = function (rate, capacity) {
95738 for (var i = 0; i < 50; ++i) this.state[i] = 0
95739 this.blockSize = rate / 8
95740 this.count = 0
95741 this.squeezing = false
95742 }
95743
95744 Keccak.prototype.absorb = function (data) {
95745 for (var i = 0; i < data.length; ++i) {
95746 this.state[~~(this.count / 4)] ^= data[i] << (8 * (this.count % 4))
95747 this.count += 1
95748 if (this.count === this.blockSize) {
95749 keccakState.p1600(this.state)
95750 this.count = 0
95751 }
95752 }
95753 }
95754
95755 Keccak.prototype.absorbLastFewBits = function (bits) {
95756 this.state[~~(this.count / 4)] ^= bits << (8 * (this.count % 4))
95757 if ((bits & 0x80) !== 0 && this.count === (this.blockSize - 1)) keccakState.p1600(this.state)
95758 this.state[~~((this.blockSize - 1) / 4)] ^= 0x80 << (8 * ((this.blockSize - 1) % 4))
95759 keccakState.p1600(this.state)
95760 this.count = 0
95761 this.squeezing = true
95762 }
95763
95764 Keccak.prototype.squeeze = function (length) {
95765 if (!this.squeezing) this.absorbLastFewBits(0x01)
95766
95767 var output = Buffer.allocUnsafe(length)
95768 for (var i = 0; i < length; ++i) {
95769 output[i] = (this.state[~~(this.count / 4)] >>> (8 * (this.count % 4))) & 0xff
95770 this.count += 1
95771 if (this.count === this.blockSize) {
95772 keccakState.p1600(this.state)
95773 this.count = 0
95774 }
95775 }
95776
95777 return output
95778 }
95779
95780 Keccak.prototype.copy = function (dest) {
95781 for (var i = 0; i < 50; ++i) dest.state[i] = this.state[i]
95782 dest.blockSize = this.blockSize
95783 dest.count = this.count
95784 dest.squeezing = this.squeezing
95785 }
95786
95787 module.exports = Keccak
95788
95789 }).call(this,require("buffer").Buffer)
95790 },{"./keccak-state-unroll":69,"buffer":5}],71:[function(require,module,exports){
95791 (function (Buffer){
95792 /*
95793 CryptoJS v3.1.2
95794 code.google.com/p/crypto-js
95795 (c) 2009-2013 by Jeff Mott. All rights reserved.
95796 code.google.com/p/crypto-js/wiki/License
95797 */
95798 /** @preserve
95799 (c) 2012 by Cédric Mesnil. All rights reserved.
95800
95801 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
95802
95803 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
95804 - 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.
95805
95806 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
95807 */
95808
95809 // constants table
95810 var zl = [
95811 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
95812 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
95813 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
95814 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
95815 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
95816 ]
95817
95818 var zr = [
95819 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
95820 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
95821 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
95822 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
95823 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
95824 ]
95825
95826 var sl = [
95827 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
95828 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
95829 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
95830 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
95831 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
95832 ]
95833
95834 var sr = [
95835 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
95836 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
95837 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
95838 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
95839 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
95840 ]
95841
95842 var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
95843 var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
95844
95845 function bytesToWords (bytes) {
95846 var words = []
95847 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
95848 words[b >>> 5] |= bytes[i] << (24 - b % 32)
95849 }
95850 return words
95851 }
95852
95853 function wordsToBytes (words) {
95854 var bytes = []
95855 for (var b = 0; b < words.length * 32; b += 8) {
95856 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
95857 }
95858 return bytes
95859 }
95860
95861 function processBlock (H, M, offset) {
95862 // swap endian
95863 for (var i = 0; i < 16; i++) {
95864 var offset_i = offset + i
95865 var M_offset_i = M[offset_i]
95866
95867 // Swap
95868 M[offset_i] = (
95869 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
95870 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
95871 )
95872 }
95873
95874 // Working variables
95875 var al, bl, cl, dl, el
95876 var ar, br, cr, dr, er
95877
95878 ar = al = H[0]
95879 br = bl = H[1]
95880 cr = cl = H[2]
95881 dr = dl = H[3]
95882 er = el = H[4]
95883
95884 // computation
95885 var t
95886 for (i = 0; i < 80; i += 1) {
95887 t = (al + M[offset + zl[i]]) | 0
95888 if (i < 16) {
95889 t += f1(bl, cl, dl) + hl[0]
95890 } else if (i < 32) {
95891 t += f2(bl, cl, dl) + hl[1]
95892 } else if (i < 48) {
95893 t += f3(bl, cl, dl) + hl[2]
95894 } else if (i < 64) {
95895 t += f4(bl, cl, dl) + hl[3]
95896 } else {// if (i<80) {
95897 t += f5(bl, cl, dl) + hl[4]
95898 }
95899 t = t | 0
95900 t = rotl(t, sl[i])
95901 t = (t + el) | 0
95902 al = el
95903 el = dl
95904 dl = rotl(cl, 10)
95905 cl = bl
95906 bl = t
95907
95908 t = (ar + M[offset + zr[i]]) | 0
95909 if (i < 16) {
95910 t += f5(br, cr, dr) + hr[0]
95911 } else if (i < 32) {
95912 t += f4(br, cr, dr) + hr[1]
95913 } else if (i < 48) {
95914 t += f3(br, cr, dr) + hr[2]
95915 } else if (i < 64) {
95916 t += f2(br, cr, dr) + hr[3]
95917 } else {// if (i<80) {
95918 t += f1(br, cr, dr) + hr[4]
95919 }
95920
95921 t = t | 0
95922 t = rotl(t, sr[i])
95923 t = (t + er) | 0
95924 ar = er
95925 er = dr
95926 dr = rotl(cr, 10)
95927 cr = br
95928 br = t
95929 }
95930
95931 // intermediate hash value
95932 t = (H[1] + cl + dr) | 0
95933 H[1] = (H[2] + dl + er) | 0
95934 H[2] = (H[3] + el + ar) | 0
95935 H[3] = (H[4] + al + br) | 0
95936 H[4] = (H[0] + bl + cr) | 0
95937 H[0] = t
95938 }
95939
95940 function f1 (x, y, z) {
95941 return ((x) ^ (y) ^ (z))
95942 }
95943
95944 function f2 (x, y, z) {
95945 return (((x) & (y)) | ((~x) & (z)))
95946 }
95947
95948 function f3 (x, y, z) {
95949 return (((x) | (~(y))) ^ (z))
95950 }
95951
95952 function f4 (x, y, z) {
95953 return (((x) & (z)) | ((y) & (~(z))))
95954 }
95955
95956 function f5 (x, y, z) {
95957 return ((x) ^ ((y) | (~(z))))
95958 }
95959
95960 function rotl (x, n) {
95961 return (x << n) | (x >>> (32 - n))
95962 }
95963
95964 function ripemd160 (message) {
95965 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
95966
95967 if (typeof message === 'string') {
95968 message = new Buffer(message, 'utf8')
95969 }
95970
95971 var m = bytesToWords(message)
95972
95973 var nBitsLeft = message.length * 8
95974 var nBitsTotal = message.length * 8
95975
95976 // Add padding
95977 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
95978 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
95979 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
95980 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
95981 )
95982
95983 for (var i = 0; i < m.length; i += 16) {
95984 processBlock(H, m, i)
95985 }
95986
95987 // swap endian
95988 for (i = 0; i < 5; i++) {
95989 // shortcut
95990 var H_i = H[i]
95991
95992 // Swap
95993 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
95994 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
95995 }
95996
95997 var digestbytes = wordsToBytes(H)
95998 return new Buffer(digestbytes)
95999 }
96000
96001 module.exports = ripemd160
96002
96003 }).call(this,require("buffer").Buffer)
96004 },{"buffer":5}],72:[function(require,module,exports){
96005 (function (Buffer){
96006 const assert = require('assert')
96007 /**
96008 * RLP Encoding based on: https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP
96009 * This function takes in a data, convert it to buffer if not, and a length for recursion
96010 *
96011 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
96012 * @returns {Buffer} - returns buffer of encoded data
96013 **/
96014 exports.encode = function (input) {
96015 if (input instanceof Array) {
96016 var output = []
96017 for (var i = 0; i < input.length; i++) {
96018 output.push(exports.encode(input[i]))
96019 }
96020 var buf = Buffer.concat(output)
96021 return Buffer.concat([encodeLength(buf.length, 192), buf])
96022 } else {
96023 input = toBuffer(input)
96024 if (input.length === 1 && input[0] < 128) {
96025 return input
96026 } else {
96027 return Buffer.concat([encodeLength(input.length, 128), input])
96028 }
96029 }
96030 }
96031
96032 function safeParseInt (v, base) {
96033 if (v.slice(0, 2) === '00') {
96034 throw (new Error('invalid RLP: extra zeros'))
96035 }
96036
96037 return parseInt(v, base)
96038 }
96039
96040 function encodeLength (len, offset) {
96041 if (len < 56) {
96042 return new Buffer([len + offset])
96043 } else {
96044 var hexLength = intToHex(len)
96045 var lLength = hexLength.length / 2
96046 var firstByte = intToHex(offset + 55 + lLength)
96047 return new Buffer(firstByte + hexLength, 'hex')
96048 }
96049 }
96050
96051 /**
96052 * RLP Decoding based on: {@link https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP|RLP}
96053 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
96054 * @returns {Array} - returns decode Array of Buffers containg the original message
96055 **/
96056 exports.decode = function (input, stream) {
96057 if (!input || input.length === 0) {
96058 return new Buffer([])
96059 }
96060
96061 input = toBuffer(input)
96062 var decoded = _decode(input)
96063
96064 if (stream) {
96065 return decoded
96066 }
96067
96068 assert.equal(decoded.remainder.length, 0, 'invalid remainder')
96069 return decoded.data
96070 }
96071
96072 exports.getLength = function (input) {
96073 if (!input || input.length === 0) {
96074 return new Buffer([])
96075 }
96076
96077 input = toBuffer(input)
96078 var firstByte = input[0]
96079 if (firstByte <= 0x7f) {
96080 return input.length
96081 } else if (firstByte <= 0xb7) {
96082 return firstByte - 0x7f
96083 } else if (firstByte <= 0xbf) {
96084 return firstByte - 0xb6
96085 } else if (firstByte <= 0xf7) {
96086 // a list between 0-55 bytes long
96087 return firstByte - 0xbf
96088 } else {
96089 // a list over 55 bytes long
96090 var llength = firstByte - 0xf6
96091 var length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
96092 return llength + length
96093 }
96094 }
96095
96096 function _decode (input) {
96097 var length, llength, data, innerRemainder, d
96098 var decoded = []
96099 var firstByte = input[0]
96100
96101 if (firstByte <= 0x7f) {
96102 // a single byte whose value is in the [0x00, 0x7f] range, that byte is its own RLP encoding.
96103 return {
96104 data: input.slice(0, 1),
96105 remainder: input.slice(1)
96106 }
96107 } else if (firstByte <= 0xb7) {
96108 // string is 0-55 bytes long. A single byte with value 0x80 plus the length of the string followed by the string
96109 // The range of the first byte is [0x80, 0xb7]
96110 length = firstByte - 0x7f
96111
96112 // set 0x80 null to 0
96113 if (firstByte === 0x80) {
96114 data = new Buffer([])
96115 } else {
96116 data = input.slice(1, length)
96117 }
96118
96119 if (length === 2 && data[0] < 0x80) {
96120 throw new Error('invalid rlp encoding: byte must be less 0x80')
96121 }
96122
96123 return {
96124 data: data,
96125 remainder: input.slice(length)
96126 }
96127 } else if (firstByte <= 0xbf) {
96128 llength = firstByte - 0xb6
96129 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
96130 data = input.slice(llength, length + llength)
96131 if (data.length < length) {
96132 throw (new Error('invalid RLP'))
96133 }
96134
96135 return {
96136 data: data,
96137 remainder: input.slice(length + llength)
96138 }
96139 } else if (firstByte <= 0xf7) {
96140 // a list between 0-55 bytes long
96141 length = firstByte - 0xbf
96142 innerRemainder = input.slice(1, length)
96143 while (innerRemainder.length) {
96144 d = _decode(innerRemainder)
96145 decoded.push(d.data)
96146 innerRemainder = d.remainder
96147 }
96148
96149 return {
96150 data: decoded,
96151 remainder: input.slice(length)
96152 }
96153 } else {
96154 // a list over 55 bytes long
96155 llength = firstByte - 0xf6
96156 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
96157 var totalLength = llength + length
96158 if (totalLength > input.length) {
96159 throw new Error('invalid rlp: total length is larger than the data')
96160 }
96161
96162 innerRemainder = input.slice(llength, totalLength)
96163 if (innerRemainder.length === 0) {
96164 throw new Error('invalid rlp, List has a invalid length')
96165 }
96166
96167 while (innerRemainder.length) {
96168 d = _decode(innerRemainder)
96169 decoded.push(d.data)
96170 innerRemainder = d.remainder
96171 }
96172 return {
96173 data: decoded,
96174 remainder: input.slice(totalLength)
96175 }
96176 }
96177 }
96178
96179 function isHexPrefixed (str) {
96180 return str.slice(0, 2) === '0x'
96181 }
96182
96183 // Removes 0x from a given String
96184 function stripHexPrefix (str) {
96185 if (typeof str !== 'string') {
96186 return str
96187 }
96188 return isHexPrefixed(str) ? str.slice(2) : str
96189 }
96190
96191 function intToHex (i) {
96192 var hex = i.toString(16)
96193 if (hex.length % 2) {
96194 hex = '0' + hex
96195 }
96196
96197 return hex
96198 }
96199
96200 function padToEven (a) {
96201 if (a.length % 2) a = '0' + a
96202 return a
96203 }
96204
96205 function intToBuffer (i) {
96206 var hex = intToHex(i)
96207 return new Buffer(hex, 'hex')
96208 }
96209
96210 function toBuffer (v) {
96211 if (!Buffer.isBuffer(v)) {
96212 if (typeof v === 'string') {
96213 if (isHexPrefixed(v)) {
96214 v = new Buffer(padToEven(stripHexPrefix(v)), 'hex')
96215 } else {
96216 v = new Buffer(v)
96217 }
96218 } else if (typeof v === 'number') {
96219 if (!v) {
96220 v = new Buffer([])
96221 } else {
96222 v = intToBuffer(v)
96223 }
96224 } else if (v === null || v === undefined) {
96225 v = new Buffer([])
96226 } else if (v.toArray) {
96227 // converts a BN to a Buffer
96228 v = new Buffer(v.toArray())
96229 } else {
96230 throw new Error('invalid type')
96231 }
96232 }
96233 return v
96234 }
96235
96236 }).call(this,require("buffer").Buffer)
96237 },{"assert":1,"buffer":5}],73:[function(require,module,exports){
96238 'use strict'
96239 module.exports = require('./lib')(require('./lib/elliptic'))
96240
96241 },{"./lib":77,"./lib/elliptic":76}],74:[function(require,module,exports){
96242 (function (Buffer){
96243 'use strict'
96244 var toString = Object.prototype.toString
96245
96246 // TypeError
96247 exports.isArray = function (value, message) {
96248 if (!Array.isArray(value)) throw TypeError(message)
96249 }
96250
96251 exports.isBoolean = function (value, message) {
96252 if (toString.call(value) !== '[object Boolean]') throw TypeError(message)
96253 }
96254
96255 exports.isBuffer = function (value, message) {
96256 if (!Buffer.isBuffer(value)) throw TypeError(message)
96257 }
96258
96259 exports.isFunction = function (value, message) {
96260 if (toString.call(value) !== '[object Function]') throw TypeError(message)
96261 }
96262
96263 exports.isNumber = function (value, message) {
96264 if (toString.call(value) !== '[object Number]') throw TypeError(message)
96265 }
96266
96267 exports.isObject = function (value, message) {
96268 if (toString.call(value) !== '[object Object]') throw TypeError(message)
96269 }
96270
96271 // RangeError
96272 exports.isBufferLength = function (buffer, length, message) {
96273 if (buffer.length !== length) throw RangeError(message)
96274 }
96275
96276 exports.isBufferLength2 = function (buffer, length1, length2, message) {
96277 if (buffer.length !== length1 && buffer.length !== length2) throw RangeError(message)
96278 }
96279
96280 exports.isLengthGTZero = function (value, message) {
96281 if (value.length === 0) throw RangeError(message)
96282 }
96283
96284 exports.isNumberInInterval = function (number, x, y, message) {
96285 if (number <= x || number >= y) throw RangeError(message)
96286 }
96287
96288 }).call(this,{"isBuffer":require("../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
96289 },{"../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js":10}],75:[function(require,module,exports){
96290 (function (Buffer){
96291 'use strict'
96292 var bip66 = require('bip66')
96293
96294 var EC_PRIVKEY_EXPORT_DER_COMPRESSED = new Buffer([
96295 // begin
96296 0x30, 0x81, 0xd3, 0x02, 0x01, 0x01, 0x04, 0x20,
96297 // private key
96298 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96299 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96300 // middle
96301 0xa0, 0x81, 0x85, 0x30, 0x81, 0x82, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
96302 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
96303 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
96304 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
96305 0x21, 0x02, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
96306 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
96307 0x17, 0x98, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
96308 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
96309 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x24, 0x03, 0x22, 0x00,
96310 // public key
96311 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96312 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96313 0x00
96314 ])
96315
96316 var EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED = new Buffer([
96317 // begin
96318 0x30, 0x82, 0x01, 0x13, 0x02, 0x01, 0x01, 0x04, 0x20,
96319 // private key
96320 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96321 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96322 // middle
96323 0xa0, 0x81, 0xa5, 0x30, 0x81, 0xa2, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
96324 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
96325 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
96326 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
96327 0x41, 0x04, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
96328 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
96329 0x17, 0x98, 0x48, 0x3a, 0xda, 0x77, 0x26, 0xa3, 0xc4, 0x65, 0x5d, 0xa4, 0xfb, 0xfc, 0x0E, 0x11,
96330 0x08, 0xa8, 0xfd, 0x17, 0xb4, 0x48, 0xa6, 0x85, 0x54, 0x19, 0x9c, 0x47, 0xd0, 0x8f, 0xfb, 0x10,
96331 0xd4, 0xb8, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
96332 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
96333 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x44, 0x03, 0x42, 0x00,
96334 // public key
96335 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96336 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96337 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96338 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96339 0x00
96340 ])
96341
96342 var ZERO_BUFFER_32 = new Buffer([
96343 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96344 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
96345 ])
96346
96347 exports.privateKeyExport = function (privateKey, publicKey, compressed) {
96348 var result = new Buffer(compressed ? EC_PRIVKEY_EXPORT_DER_COMPRESSED : EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED)
96349 privateKey.copy(result, compressed ? 8 : 9)
96350 publicKey.copy(result, compressed ? 181 : 214)
96351 return result
96352 }
96353
96354 exports.privateKeyImport = function (privateKey) {
96355 var length = privateKey.length
96356
96357 // sequence header
96358 var index = 0
96359 if (length < index + 1 || privateKey[index] !== 0x30) return
96360 index += 1
96361
96362 // sequence length constructor
96363 if (length < index + 1 || !(privateKey[index] & 0x80)) return
96364
96365 var lenb = privateKey[index] & 0x7f
96366 index += 1
96367 if (lenb < 1 || lenb > 2) return
96368 if (length < index + lenb) return
96369
96370 // sequence length
96371 var len = privateKey[index + lenb - 1] | (lenb > 1 ? privateKey[index + lenb - 2] << 8 : 0)
96372 index += lenb
96373 if (length < index + len) return
96374
96375 // sequence element 0: version number (=1)
96376 if (length < index + 3 ||
96377 privateKey[index] !== 0x02 ||
96378 privateKey[index + 1] !== 0x01 ||
96379 privateKey[index + 2] !== 0x01) {
96380 return
96381 }
96382 index += 3
96383
96384 // sequence element 1: octet string, up to 32 bytes
96385 if (length < index + 2 ||
96386 privateKey[index] !== 0x04 ||
96387 privateKey[index + 1] > 0x20 ||
96388 length < index + 2 + privateKey[index + 1]) {
96389 return
96390 }
96391
96392 return privateKey.slice(index + 2, index + 2 + privateKey[index + 1])
96393 }
96394
96395 exports.signatureExport = function (sigObj) {
96396 var r = Buffer.concat([new Buffer([0]), sigObj.r])
96397 for (var lenR = 33, posR = 0; lenR > 1 && r[posR] === 0x00 && !(r[posR + 1] & 0x80); --lenR, ++posR);
96398
96399 var s = Buffer.concat([new Buffer([0]), sigObj.s])
96400 for (var lenS = 33, posS = 0; lenS > 1 && s[posS] === 0x00 && !(s[posS + 1] & 0x80); --lenS, ++posS);
96401
96402 return bip66.encode(r.slice(posR), s.slice(posS))
96403 }
96404
96405 exports.signatureImport = function (sig) {
96406 var r = new Buffer(ZERO_BUFFER_32)
96407 var s = new Buffer(ZERO_BUFFER_32)
96408
96409 try {
96410 var sigObj = bip66.decode(sig)
96411 if (sigObj.r.length === 33 && sigObj.r[0] === 0x00) sigObj.r = sigObj.r.slice(1)
96412 if (sigObj.r.length > 32) throw new Error('R length is too long')
96413 if (sigObj.s.length === 33 && sigObj.s[0] === 0x00) sigObj.s = sigObj.s.slice(1)
96414 if (sigObj.s.length > 32) throw new Error('S length is too long')
96415 } catch (err) {
96416 return
96417 }
96418
96419 sigObj.r.copy(r, 32 - sigObj.r.length)
96420 sigObj.s.copy(s, 32 - sigObj.s.length)
96421
96422 return { r: r, s: s }
96423 }
96424
96425 exports.signatureImportLax = function (sig) {
96426 var r = new Buffer(ZERO_BUFFER_32)
96427 var s = new Buffer(ZERO_BUFFER_32)
96428
96429 var length = sig.length
96430 var index = 0
96431
96432 // sequence tag byte
96433 if (sig[index++] !== 0x30) return
96434
96435 // sequence length byte
96436 var lenbyte = sig[index++]
96437 if (lenbyte & 0x80) {
96438 index += lenbyte - 0x80
96439 if (index > length) return
96440 }
96441
96442 // sequence tag byte for r
96443 if (sig[index++] !== 0x02) return
96444
96445 // length for r
96446 var rlen = sig[index++]
96447 if (rlen & 0x80) {
96448 lenbyte = rlen - 0x80
96449 if (index + lenbyte > length) return
96450 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
96451 for (rlen = 0; lenbyte > 0; index += 1, lenbyte -= 1) rlen = (rlen << 8) + sig[index]
96452 }
96453 if (rlen > length - index) return
96454 var rindex = index
96455 index += rlen
96456
96457 // sequence tag byte for s
96458 if (sig[index++] !== 0x02) return
96459
96460 // length for s
96461 var slen = sig[index++]
96462 if (slen & 0x80) {
96463 lenbyte = slen - 0x80
96464 if (index + lenbyte > length) return
96465 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
96466 for (slen = 0; lenbyte > 0; index += 1, lenbyte -= 1) slen = (slen << 8) + sig[index]
96467 }
96468 if (slen > length - index) return
96469 var sindex = index
96470 index += slen
96471
96472 // ignore leading zeros in r
96473 for (; rlen > 0 && sig[rindex] === 0x00; rlen -= 1, rindex += 1);
96474 // copy r value
96475 if (rlen > 32) return
96476 var rvalue = sig.slice(rindex, rindex + rlen)
96477 rvalue.copy(r, 32 - rvalue.length)
96478
96479 // ignore leading zeros in s
96480 for (; slen > 0 && sig[sindex] === 0x00; slen -= 1, sindex += 1);
96481 // copy s value
96482 if (slen > 32) return
96483 var svalue = sig.slice(sindex, sindex + slen)
96484 svalue.copy(s, 32 - svalue.length)
96485
96486 return { r: r, s: s }
96487 }
96488
96489 }).call(this,require("buffer").Buffer)
96490 },{"bip66":32,"buffer":5}],76:[function(require,module,exports){
96491 (function (Buffer){
96492 'use strict'
96493 var createHash = require('create-hash')
96494 var BN = require('bn.js')
96495 var EC = require('elliptic').ec
96496
96497 var messages = require('../messages.json')
96498
96499 var ec = new EC('secp256k1')
96500 var ecparams = ec.curve
96501
96502 function loadCompressedPublicKey (first, xBuffer) {
96503 var x = new BN(xBuffer)
96504
96505 // overflow
96506 if (x.cmp(ecparams.p) >= 0) return null
96507 x = x.toRed(ecparams.red)
96508
96509 // compute corresponding Y
96510 var y = x.redSqr().redIMul(x).redIAdd(ecparams.b).redSqrt()
96511 if ((first === 0x03) !== y.isOdd()) y = y.redNeg()
96512
96513 return ec.keyPair({ pub: { x: x, y: y } })
96514 }
96515
96516 function loadUncompressedPublicKey (first, xBuffer, yBuffer) {
96517 var x = new BN(xBuffer)
96518 var y = new BN(yBuffer)
96519
96520 // overflow
96521 if (x.cmp(ecparams.p) >= 0 || y.cmp(ecparams.p) >= 0) return null
96522
96523 x = x.toRed(ecparams.red)
96524 y = y.toRed(ecparams.red)
96525
96526 // is odd flag
96527 if ((first === 0x06 || first === 0x07) && y.isOdd() !== (first === 0x07)) return null
96528
96529 // x*x*x + b = y*y
96530 var x3 = x.redSqr().redIMul(x)
96531 if (!y.redSqr().redISub(x3.redIAdd(ecparams.b)).isZero()) return null
96532
96533 return ec.keyPair({ pub: { x: x, y: y } })
96534 }
96535
96536 function loadPublicKey (publicKey) {
96537 var first = publicKey[0]
96538 switch (first) {
96539 case 0x02:
96540 case 0x03:
96541 if (publicKey.length !== 33) return null
96542 return loadCompressedPublicKey(first, publicKey.slice(1, 33))
96543 case 0x04:
96544 case 0x06:
96545 case 0x07:
96546 if (publicKey.length !== 65) return null
96547 return loadUncompressedPublicKey(first, publicKey.slice(1, 33), publicKey.slice(33, 65))
96548 default:
96549 return null
96550 }
96551 }
96552
96553 exports.privateKeyVerify = function (privateKey) {
96554 var bn = new BN(privateKey)
96555 return bn.cmp(ecparams.n) < 0 && !bn.isZero()
96556 }
96557
96558 exports.privateKeyExport = function (privateKey, compressed) {
96559 var d = new BN(privateKey)
96560 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PRIVATE_KEY_EXPORT_DER_FAIL)
96561
96562 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
96563 }
96564
96565 exports.privateKeyTweakAdd = function (privateKey, tweak) {
96566 var bn = new BN(tweak)
96567 if (bn.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
96568
96569 bn.iadd(new BN(privateKey))
96570 if (bn.cmp(ecparams.n) >= 0) bn.isub(ecparams.n)
96571 if (bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
96572
96573 return bn.toArrayLike(Buffer, 'be', 32)
96574 }
96575
96576 exports.privateKeyTweakMul = function (privateKey, tweak) {
96577 var bn = new BN(tweak)
96578 if (bn.cmp(ecparams.n) >= 0 || bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_MUL_FAIL)
96579
96580 bn.imul(new BN(privateKey))
96581 if (bn.cmp(ecparams.n)) bn = bn.umod(ecparams.n)
96582
96583 return bn.toArrayLike(Buffer, 'be', 32)
96584 }
96585
96586 exports.publicKeyCreate = function (privateKey, compressed) {
96587 var d = new BN(privateKey)
96588 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PUBLIC_KEY_CREATE_FAIL)
96589
96590 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
96591 }
96592
96593 exports.publicKeyConvert = function (publicKey, compressed) {
96594 var pair = loadPublicKey(publicKey)
96595 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
96596
96597 return new Buffer(pair.getPublic(compressed, true))
96598 }
96599
96600 exports.publicKeyVerify = function (publicKey) {
96601 return loadPublicKey(publicKey) !== null
96602 }
96603
96604 exports.publicKeyTweakAdd = function (publicKey, tweak, compressed) {
96605 var pair = loadPublicKey(publicKey)
96606 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
96607
96608 tweak = new BN(tweak)
96609 if (tweak.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_ADD_FAIL)
96610
96611 return new Buffer(ecparams.g.mul(tweak).add(pair.pub).encode(true, compressed))
96612 }
96613
96614 exports.publicKeyTweakMul = function (publicKey, tweak, compressed) {
96615 var pair = loadPublicKey(publicKey)
96616 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
96617
96618 tweak = new BN(tweak)
96619 if (tweak.cmp(ecparams.n) >= 0 || tweak.isZero()) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_MUL_FAIL)
96620
96621 return new Buffer(pair.pub.mul(tweak).encode(true, compressed))
96622 }
96623
96624 exports.publicKeyCombine = function (publicKeys, compressed) {
96625 var pairs = new Array(publicKeys.length)
96626 for (var i = 0; i < publicKeys.length; ++i) {
96627 pairs[i] = loadPublicKey(publicKeys[i])
96628 if (pairs[i] === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
96629 }
96630
96631 var point = pairs[0].pub
96632 for (var j = 1; j < pairs.length; ++j) point = point.add(pairs[j].pub)
96633 if (point.isInfinity()) throw new Error(messages.EC_PUBLIC_KEY_COMBINE_FAIL)
96634
96635 return new Buffer(point.encode(true, compressed))
96636 }
96637
96638 exports.signatureNormalize = function (signature) {
96639 var r = new BN(signature.slice(0, 32))
96640 var s = new BN(signature.slice(32, 64))
96641 if (r.cmp(ecparams.n) >= 0 || s.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
96642
96643 var result = new Buffer(signature)
96644 if (s.cmp(ec.nh) === 1) ecparams.n.sub(s).toArrayLike(Buffer, 'be', 32).copy(result, 32)
96645
96646 return result
96647 }
96648
96649 exports.signatureExport = function (signature) {
96650 var r = signature.slice(0, 32)
96651 var s = signature.slice(32, 64)
96652 if (new BN(r).cmp(ecparams.n) >= 0 || new BN(s).cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
96653
96654 return { r: r, s: s }
96655 }
96656
96657 exports.signatureImport = function (sigObj) {
96658 var r = new BN(sigObj.r)
96659 if (r.cmp(ecparams.n) >= 0) r = new BN(0)
96660
96661 var s = new BN(sigObj.s)
96662 if (s.cmp(ecparams.n) >= 0) s = new BN(0)
96663
96664 return Buffer.concat([
96665 r.toArrayLike(Buffer, 'be', 32),
96666 s.toArrayLike(Buffer, 'be', 32)
96667 ])
96668 }
96669
96670 exports.sign = function (message, privateKey, noncefn, data) {
96671 if (typeof noncefn === 'function') {
96672 var getNonce = noncefn
96673 noncefn = function (counter) {
96674 var nonce = getNonce(message, privateKey, null, data, counter)
96675 if (!Buffer.isBuffer(nonce) || nonce.length !== 32) throw new Error(messages.ECDSA_SIGN_FAIL)
96676
96677 return new BN(nonce)
96678 }
96679 }
96680
96681 var d = new BN(privateKey)
96682 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.ECDSA_SIGN_FAIL)
96683
96684 var result = ec.sign(message, privateKey, { canonical: true, k: noncefn, pers: data })
96685 return {
96686 signature: Buffer.concat([
96687 result.r.toArrayLike(Buffer, 'be', 32),
96688 result.s.toArrayLike(Buffer, 'be', 32)
96689 ]),
96690 recovery: result.recoveryParam
96691 }
96692 }
96693
96694 exports.verify = function (message, signature, publicKey) {
96695 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
96696
96697 var sigr = new BN(sigObj.r)
96698 var sigs = new BN(sigObj.s)
96699 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
96700 if (sigs.cmp(ec.nh) === 1 || sigr.isZero() || sigs.isZero()) return false
96701
96702 var pair = loadPublicKey(publicKey)
96703 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
96704
96705 return ec.verify(message, sigObj, {x: pair.pub.x, y: pair.pub.y})
96706 }
96707
96708 exports.recover = function (message, signature, recovery, compressed) {
96709 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
96710
96711 var sigr = new BN(sigObj.r)
96712 var sigs = new BN(sigObj.s)
96713 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
96714
96715 try {
96716 if (sigr.isZero() || sigs.isZero()) throw new Error()
96717
96718 var point = ec.recoverPubKey(message, sigObj, recovery)
96719 return new Buffer(point.encode(true, compressed))
96720 } catch (err) {
96721 throw new Error(messages.ECDSA_RECOVER_FAIL)
96722 }
96723 }
96724
96725 exports.ecdh = function (publicKey, privateKey) {
96726 var shared = exports.ecdhUnsafe(publicKey, privateKey, true)
96727 return createHash('sha256').update(shared).digest()
96728 }
96729
96730 exports.ecdhUnsafe = function (publicKey, privateKey, compressed) {
96731 var pair = loadPublicKey(publicKey)
96732 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
96733
96734 var scalar = new BN(privateKey)
96735 if (scalar.cmp(ecparams.n) >= 0 || scalar.isZero()) throw new Error(messages.ECDH_FAIL)
96736
96737 return new Buffer(pair.pub.mul(scalar).encode(true, compressed))
96738 }
96739
96740 }).call(this,require("buffer").Buffer)
96741 },{"../messages.json":78,"bn.js":33,"buffer":5,"create-hash":36,"elliptic":39}],77:[function(require,module,exports){
96742 'use strict'
96743 var assert = require('./assert')
96744 var der = require('./der')
96745 var messages = require('./messages.json')
96746
96747 function initCompressedValue (value, defaultValue) {
96748 if (value === undefined) return defaultValue
96749
96750 assert.isBoolean(value, messages.COMPRESSED_TYPE_INVALID)
96751 return value
96752 }
96753
96754 module.exports = function (secp256k1) {
96755 return {
96756 privateKeyVerify: function (privateKey) {
96757 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
96758 return privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)
96759 },
96760
96761 privateKeyExport: function (privateKey, compressed) {
96762 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
96763 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
96764
96765 compressed = initCompressedValue(compressed, true)
96766 var publicKey = secp256k1.privateKeyExport(privateKey, compressed)
96767
96768 return der.privateKeyExport(privateKey, publicKey, compressed)
96769 },
96770
96771 privateKeyImport: function (privateKey) {
96772 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
96773
96774 privateKey = der.privateKeyImport(privateKey)
96775 if (privateKey && privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)) return privateKey
96776
96777 throw new Error(messages.EC_PRIVATE_KEY_IMPORT_DER_FAIL)
96778 },
96779
96780 privateKeyTweakAdd: function (privateKey, tweak) {
96781 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
96782 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
96783
96784 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
96785 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
96786
96787 return secp256k1.privateKeyTweakAdd(privateKey, tweak)
96788 },
96789
96790 privateKeyTweakMul: function (privateKey, tweak) {
96791 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
96792 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
96793
96794 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
96795 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
96796
96797 return secp256k1.privateKeyTweakMul(privateKey, tweak)
96798 },
96799
96800 publicKeyCreate: function (privateKey, compressed) {
96801 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
96802 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
96803
96804 compressed = initCompressedValue(compressed, true)
96805
96806 return secp256k1.publicKeyCreate(privateKey, compressed)
96807 },
96808
96809 publicKeyConvert: function (publicKey, compressed) {
96810 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
96811 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
96812
96813 compressed = initCompressedValue(compressed, true)
96814
96815 return secp256k1.publicKeyConvert(publicKey, compressed)
96816 },
96817
96818 publicKeyVerify: function (publicKey) {
96819 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
96820 return secp256k1.publicKeyVerify(publicKey)
96821 },
96822
96823 publicKeyTweakAdd: function (publicKey, tweak, compressed) {
96824 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
96825 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
96826
96827 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
96828 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
96829
96830 compressed = initCompressedValue(compressed, true)
96831
96832 return secp256k1.publicKeyTweakAdd(publicKey, tweak, compressed)
96833 },
96834
96835 publicKeyTweakMul: function (publicKey, tweak, compressed) {
96836 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
96837 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
96838
96839 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
96840 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
96841
96842 compressed = initCompressedValue(compressed, true)
96843
96844 return secp256k1.publicKeyTweakMul(publicKey, tweak, compressed)
96845 },
96846
96847 publicKeyCombine: function (publicKeys, compressed) {
96848 assert.isArray(publicKeys, messages.EC_PUBLIC_KEYS_TYPE_INVALID)
96849 assert.isLengthGTZero(publicKeys, messages.EC_PUBLIC_KEYS_LENGTH_INVALID)
96850 for (var i = 0; i < publicKeys.length; ++i) {
96851 assert.isBuffer(publicKeys[i], messages.EC_PUBLIC_KEY_TYPE_INVALID)
96852 assert.isBufferLength2(publicKeys[i], 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
96853 }
96854
96855 compressed = initCompressedValue(compressed, true)
96856
96857 return secp256k1.publicKeyCombine(publicKeys, compressed)
96858 },
96859
96860 signatureNormalize: function (signature) {
96861 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
96862 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
96863
96864 return secp256k1.signatureNormalize(signature)
96865 },
96866
96867 signatureExport: function (signature) {
96868 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
96869 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
96870
96871 var sigObj = secp256k1.signatureExport(signature)
96872 return der.signatureExport(sigObj)
96873 },
96874
96875 signatureImport: function (sig) {
96876 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
96877 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
96878
96879 var sigObj = der.signatureImport(sig)
96880 if (sigObj) return secp256k1.signatureImport(sigObj)
96881
96882 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
96883 },
96884
96885 signatureImportLax: function (sig) {
96886 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
96887 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
96888
96889 var sigObj = der.signatureImportLax(sig)
96890 if (sigObj) return secp256k1.signatureImport(sigObj)
96891
96892 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
96893 },
96894
96895 sign: function (message, privateKey, options) {
96896 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
96897 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
96898
96899 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
96900 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
96901
96902 var data = null
96903 var noncefn = null
96904 if (options !== undefined) {
96905 assert.isObject(options, messages.OPTIONS_TYPE_INVALID)
96906
96907 if (options.data !== undefined) {
96908 assert.isBuffer(options.data, messages.OPTIONS_DATA_TYPE_INVALID)
96909 assert.isBufferLength(options.data, 32, messages.OPTIONS_DATA_LENGTH_INVALID)
96910 data = options.data
96911 }
96912
96913 if (options.noncefn !== undefined) {
96914 assert.isFunction(options.noncefn, messages.OPTIONS_NONCEFN_TYPE_INVALID)
96915 noncefn = options.noncefn
96916 }
96917 }
96918
96919 return secp256k1.sign(message, privateKey, noncefn, data)
96920 },
96921
96922 verify: function (message, signature, publicKey) {
96923 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
96924 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
96925
96926 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
96927 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
96928
96929 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
96930 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
96931
96932 return secp256k1.verify(message, signature, publicKey)
96933 },
96934
96935 recover: function (message, signature, recovery, compressed) {
96936 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
96937 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
96938
96939 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
96940 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
96941
96942 assert.isNumber(recovery, messages.RECOVERY_ID_TYPE_INVALID)
96943 assert.isNumberInInterval(recovery, -1, 4, messages.RECOVERY_ID_VALUE_INVALID)
96944
96945 compressed = initCompressedValue(compressed, true)
96946
96947 return secp256k1.recover(message, signature, recovery, compressed)
96948 },
96949
96950 ecdh: function (publicKey, privateKey) {
96951 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
96952 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
96953
96954 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
96955 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
96956
96957 return secp256k1.ecdh(publicKey, privateKey)
96958 },
96959
96960 ecdhUnsafe: function (publicKey, privateKey, compressed) {
96961 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
96962 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
96963
96964 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
96965 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
96966
96967 compressed = initCompressedValue(compressed, true)
96968
96969 return secp256k1.ecdhUnsafe(publicKey, privateKey, compressed)
96970 }
96971 }
96972 }
96973
96974 },{"./assert":74,"./der":75,"./messages.json":78}],78:[function(require,module,exports){
96975 module.exports={
96976 "COMPRESSED_TYPE_INVALID": "compressed should be a boolean",
96977 "EC_PRIVATE_KEY_TYPE_INVALID": "private key should be a Buffer",
96978 "EC_PRIVATE_KEY_LENGTH_INVALID": "private key length is invalid",
96979 "EC_PRIVATE_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting private key is invalid",
96980 "EC_PRIVATE_KEY_TWEAK_MUL_FAIL": "tweak out of range",
96981 "EC_PRIVATE_KEY_EXPORT_DER_FAIL": "couldn't export to DER format",
96982 "EC_PRIVATE_KEY_IMPORT_DER_FAIL": "couldn't import from DER format",
96983 "EC_PUBLIC_KEYS_TYPE_INVALID": "public keys should be an Array",
96984 "EC_PUBLIC_KEYS_LENGTH_INVALID": "public keys Array should have at least 1 element",
96985 "EC_PUBLIC_KEY_TYPE_INVALID": "public key should be a Buffer",
96986 "EC_PUBLIC_KEY_LENGTH_INVALID": "public key length is invalid",
96987 "EC_PUBLIC_KEY_PARSE_FAIL": "the public key could not be parsed or is invalid",
96988 "EC_PUBLIC_KEY_CREATE_FAIL": "private was invalid, try again",
96989 "EC_PUBLIC_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting public key is invalid",
96990 "EC_PUBLIC_KEY_TWEAK_MUL_FAIL": "tweak out of range",
96991 "EC_PUBLIC_KEY_COMBINE_FAIL": "the sum of the public keys is not valid",
96992 "ECDH_FAIL": "scalar was invalid (zero or overflow)",
96993 "ECDSA_SIGNATURE_TYPE_INVALID": "signature should be a Buffer",
96994 "ECDSA_SIGNATURE_LENGTH_INVALID": "signature length is invalid",
96995 "ECDSA_SIGNATURE_PARSE_FAIL": "couldn't parse signature",
96996 "ECDSA_SIGNATURE_PARSE_DER_FAIL": "couldn't parse DER signature",
96997 "ECDSA_SIGNATURE_SERIALIZE_DER_FAIL": "couldn't serialize signature to DER format",
96998 "ECDSA_SIGN_FAIL": "nonce generation function failed or private key is invalid",
96999 "ECDSA_RECOVER_FAIL": "couldn't recover public key from signature",
97000 "MSG32_TYPE_INVALID": "message should be a Buffer",
97001 "MSG32_LENGTH_INVALID": "message length is invalid",
97002 "OPTIONS_TYPE_INVALID": "options should be an Object",
97003 "OPTIONS_DATA_TYPE_INVALID": "options.data should be a Buffer",
97004 "OPTIONS_DATA_LENGTH_INVALID": "options.data length is invalid",
97005 "OPTIONS_NONCEFN_TYPE_INVALID": "options.noncefn should be a Function",
97006 "RECOVERY_ID_TYPE_INVALID": "recovery should be a Number",
97007 "RECOVERY_ID_VALUE_INVALID": "recovery should have value between -1 and 4",
97008 "TWEAK_TYPE_INVALID": "tweak should be a Buffer",
97009 "TWEAK_LENGTH_INVALID": "tweak length is invalid"
97010 }
97011
97012 },{}],79:[function(require,module,exports){
97013 (function (Buffer){
97014 // prototype class for hash functions
97015 function Hash (blockSize, finalSize) {
97016 this._block = new Buffer(blockSize)
97017 this._finalSize = finalSize
97018 this._blockSize = blockSize
97019 this._len = 0
97020 this._s = 0
97021 }
97022
97023 Hash.prototype.update = function (data, enc) {
97024 if (typeof data === 'string') {
97025 enc = enc || 'utf8'
97026 data = new Buffer(data, enc)
97027 }
97028
97029 var l = this._len += data.length
97030 var s = this._s || 0
97031 var f = 0
97032 var buffer = this._block
97033
97034 while (s < l) {
97035 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
97036 var ch = (t - f)
97037
97038 for (var i = 0; i < ch; i++) {
97039 buffer[(s % this._blockSize) + i] = data[i + f]
97040 }
97041
97042 s += ch
97043 f += ch
97044
97045 if ((s % this._blockSize) === 0) {
97046 this._update(buffer)
97047 }
97048 }
97049 this._s = s
97050
97051 return this
97052 }
97053
97054 Hash.prototype.digest = function (enc) {
97055 // Suppose the length of the message M, in bits, is l
97056 var l = this._len * 8
97057
97058 // Append the bit 1 to the end of the message
97059 this._block[this._len % this._blockSize] = 0x80
97060
97061 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
97062 this._block.fill(0, this._len % this._blockSize + 1)
97063
97064 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
97065 this._update(this._block)
97066 this._block.fill(0)
97067 }
97068
97069 // to this append the block which is equal to the number l written in binary
97070 // TODO: handle case where l is > Math.pow(2, 29)
97071 this._block.writeInt32BE(l, this._blockSize - 4)
97072
97073 var hash = this._update(this._block) || this._hash()
97074
97075 return enc ? hash.toString(enc) : hash
97076 }
97077
97078 Hash.prototype._update = function () {
97079 throw new Error('_update must be implemented by subclass')
97080 }
97081
97082 module.exports = Hash
97083
97084 }).call(this,require("buffer").Buffer)
97085 },{"buffer":5}],80:[function(require,module,exports){
97086 var exports = module.exports = function SHA (algorithm) {
97087 algorithm = algorithm.toLowerCase()
97088
97089 var Algorithm = exports[algorithm]
97090 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
97091
97092 return new Algorithm()
97093 }
97094
97095 exports.sha = require('./sha')
97096 exports.sha1 = require('./sha1')
97097 exports.sha224 = require('./sha224')
97098 exports.sha256 = require('./sha256')
97099 exports.sha384 = require('./sha384')
97100 exports.sha512 = require('./sha512')
97101
97102 },{"./sha":81,"./sha1":82,"./sha224":83,"./sha256":84,"./sha384":85,"./sha512":86}],81:[function(require,module,exports){
97103 (function (Buffer){
97104 /*
97105 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
97106 * in FIPS PUB 180-1
97107 * This source code is derived from sha1.js of the same repository.
97108 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
97109 * operation was added.
97110 */
97111
97112 var inherits = require('inherits')
97113 var Hash = require('./hash')
97114
97115 var K = [
97116 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
97117 ]
97118
97119 var W = new Array(80)
97120
97121 function Sha () {
97122 this.init()
97123 this._w = W
97124
97125 Hash.call(this, 64, 56)
97126 }
97127
97128 inherits(Sha, Hash)
97129
97130 Sha.prototype.init = function () {
97131 this._a = 0x67452301
97132 this._b = 0xefcdab89
97133 this._c = 0x98badcfe
97134 this._d = 0x10325476
97135 this._e = 0xc3d2e1f0
97136
97137 return this
97138 }
97139
97140 function rotl5 (num) {
97141 return (num << 5) | (num >>> 27)
97142 }
97143
97144 function rotl30 (num) {
97145 return (num << 30) | (num >>> 2)
97146 }
97147
97148 function ft (s, b, c, d) {
97149 if (s === 0) return (b & c) | ((~b) & d)
97150 if (s === 2) return (b & c) | (b & d) | (c & d)
97151 return b ^ c ^ d
97152 }
97153
97154 Sha.prototype._update = function (M) {
97155 var W = this._w
97156
97157 var a = this._a | 0
97158 var b = this._b | 0
97159 var c = this._c | 0
97160 var d = this._d | 0
97161 var e = this._e | 0
97162
97163 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
97164 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
97165
97166 for (var j = 0; j < 80; ++j) {
97167 var s = ~~(j / 20)
97168 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
97169
97170 e = d
97171 d = c
97172 c = rotl30(b)
97173 b = a
97174 a = t
97175 }
97176
97177 this._a = (a + this._a) | 0
97178 this._b = (b + this._b) | 0
97179 this._c = (c + this._c) | 0
97180 this._d = (d + this._d) | 0
97181 this._e = (e + this._e) | 0
97182 }
97183
97184 Sha.prototype._hash = function () {
97185 var H = new Buffer(20)
97186
97187 H.writeInt32BE(this._a | 0, 0)
97188 H.writeInt32BE(this._b | 0, 4)
97189 H.writeInt32BE(this._c | 0, 8)
97190 H.writeInt32BE(this._d | 0, 12)
97191 H.writeInt32BE(this._e | 0, 16)
97192
97193 return H
97194 }
97195
97196 module.exports = Sha
97197
97198 }).call(this,require("buffer").Buffer)
97199 },{"./hash":79,"buffer":5,"inherits":63}],82:[function(require,module,exports){
97200 (function (Buffer){
97201 /*
97202 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
97203 * in FIPS PUB 180-1
97204 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
97205 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
97206 * Distributed under the BSD License
97207 * See http://pajhome.org.uk/crypt/md5 for details.
97208 */
97209
97210 var inherits = require('inherits')
97211 var Hash = require('./hash')
97212
97213 var K = [
97214 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
97215 ]
97216
97217 var W = new Array(80)
97218
97219 function Sha1 () {
97220 this.init()
97221 this._w = W
97222
97223 Hash.call(this, 64, 56)
97224 }
97225
97226 inherits(Sha1, Hash)
97227
97228 Sha1.prototype.init = function () {
97229 this._a = 0x67452301
97230 this._b = 0xefcdab89
97231 this._c = 0x98badcfe
97232 this._d = 0x10325476
97233 this._e = 0xc3d2e1f0
97234
97235 return this
97236 }
97237
97238 function rotl1 (num) {
97239 return (num << 1) | (num >>> 31)
97240 }
97241
97242 function rotl5 (num) {
97243 return (num << 5) | (num >>> 27)
97244 }
97245
97246 function rotl30 (num) {
97247 return (num << 30) | (num >>> 2)
97248 }
97249
97250 function ft (s, b, c, d) {
97251 if (s === 0) return (b & c) | ((~b) & d)
97252 if (s === 2) return (b & c) | (b & d) | (c & d)
97253 return b ^ c ^ d
97254 }
97255
97256 Sha1.prototype._update = function (M) {
97257 var W = this._w
97258
97259 var a = this._a | 0
97260 var b = this._b | 0
97261 var c = this._c | 0
97262 var d = this._d | 0
97263 var e = this._e | 0
97264
97265 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
97266 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
97267
97268 for (var j = 0; j < 80; ++j) {
97269 var s = ~~(j / 20)
97270 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
97271
97272 e = d
97273 d = c
97274 c = rotl30(b)
97275 b = a
97276 a = t
97277 }
97278
97279 this._a = (a + this._a) | 0
97280 this._b = (b + this._b) | 0
97281 this._c = (c + this._c) | 0
97282 this._d = (d + this._d) | 0
97283 this._e = (e + this._e) | 0
97284 }
97285
97286 Sha1.prototype._hash = function () {
97287 var H = new Buffer(20)
97288
97289 H.writeInt32BE(this._a | 0, 0)
97290 H.writeInt32BE(this._b | 0, 4)
97291 H.writeInt32BE(this._c | 0, 8)
97292 H.writeInt32BE(this._d | 0, 12)
97293 H.writeInt32BE(this._e | 0, 16)
97294
97295 return H
97296 }
97297
97298 module.exports = Sha1
97299
97300 }).call(this,require("buffer").Buffer)
97301 },{"./hash":79,"buffer":5,"inherits":63}],83:[function(require,module,exports){
97302 (function (Buffer){
97303 /**
97304 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
97305 * in FIPS 180-2
97306 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
97307 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
97308 *
97309 */
97310
97311 var inherits = require('inherits')
97312 var Sha256 = require('./sha256')
97313 var Hash = require('./hash')
97314
97315 var W = new Array(64)
97316
97317 function Sha224 () {
97318 this.init()
97319
97320 this._w = W // new Array(64)
97321
97322 Hash.call(this, 64, 56)
97323 }
97324
97325 inherits(Sha224, Sha256)
97326
97327 Sha224.prototype.init = function () {
97328 this._a = 0xc1059ed8
97329 this._b = 0x367cd507
97330 this._c = 0x3070dd17
97331 this._d = 0xf70e5939
97332 this._e = 0xffc00b31
97333 this._f = 0x68581511
97334 this._g = 0x64f98fa7
97335 this._h = 0xbefa4fa4
97336
97337 return this
97338 }
97339
97340 Sha224.prototype._hash = function () {
97341 var H = new Buffer(28)
97342
97343 H.writeInt32BE(this._a, 0)
97344 H.writeInt32BE(this._b, 4)
97345 H.writeInt32BE(this._c, 8)
97346 H.writeInt32BE(this._d, 12)
97347 H.writeInt32BE(this._e, 16)
97348 H.writeInt32BE(this._f, 20)
97349 H.writeInt32BE(this._g, 24)
97350
97351 return H
97352 }
97353
97354 module.exports = Sha224
97355
97356 }).call(this,require("buffer").Buffer)
97357 },{"./hash":79,"./sha256":84,"buffer":5,"inherits":63}],84:[function(require,module,exports){
97358 (function (Buffer){
97359 /**
97360 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
97361 * in FIPS 180-2
97362 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
97363 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
97364 *
97365 */
97366
97367 var inherits = require('inherits')
97368 var Hash = require('./hash')
97369
97370 var K = [
97371 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
97372 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
97373 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
97374 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
97375 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
97376 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
97377 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
97378 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
97379 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
97380 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
97381 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
97382 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
97383 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
97384 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
97385 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
97386 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
97387 ]
97388
97389 var W = new Array(64)
97390
97391 function Sha256 () {
97392 this.init()
97393
97394 this._w = W // new Array(64)
97395
97396 Hash.call(this, 64, 56)
97397 }
97398
97399 inherits(Sha256, Hash)
97400
97401 Sha256.prototype.init = function () {
97402 this._a = 0x6a09e667
97403 this._b = 0xbb67ae85
97404 this._c = 0x3c6ef372
97405 this._d = 0xa54ff53a
97406 this._e = 0x510e527f
97407 this._f = 0x9b05688c
97408 this._g = 0x1f83d9ab
97409 this._h = 0x5be0cd19
97410
97411 return this
97412 }
97413
97414 function ch (x, y, z) {
97415 return z ^ (x & (y ^ z))
97416 }
97417
97418 function maj (x, y, z) {
97419 return (x & y) | (z & (x | y))
97420 }
97421
97422 function sigma0 (x) {
97423 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
97424 }
97425
97426 function sigma1 (x) {
97427 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
97428 }
97429
97430 function gamma0 (x) {
97431 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
97432 }
97433
97434 function gamma1 (x) {
97435 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
97436 }
97437
97438 Sha256.prototype._update = function (M) {
97439 var W = this._w
97440
97441 var a = this._a | 0
97442 var b = this._b | 0
97443 var c = this._c | 0
97444 var d = this._d | 0
97445 var e = this._e | 0
97446 var f = this._f | 0
97447 var g = this._g | 0
97448 var h = this._h | 0
97449
97450 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
97451 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
97452
97453 for (var j = 0; j < 64; ++j) {
97454 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
97455 var T2 = (sigma0(a) + maj(a, b, c)) | 0
97456
97457 h = g
97458 g = f
97459 f = e
97460 e = (d + T1) | 0
97461 d = c
97462 c = b
97463 b = a
97464 a = (T1 + T2) | 0
97465 }
97466
97467 this._a = (a + this._a) | 0
97468 this._b = (b + this._b) | 0
97469 this._c = (c + this._c) | 0
97470 this._d = (d + this._d) | 0
97471 this._e = (e + this._e) | 0
97472 this._f = (f + this._f) | 0
97473 this._g = (g + this._g) | 0
97474 this._h = (h + this._h) | 0
97475 }
97476
97477 Sha256.prototype._hash = function () {
97478 var H = new Buffer(32)
97479
97480 H.writeInt32BE(this._a, 0)
97481 H.writeInt32BE(this._b, 4)
97482 H.writeInt32BE(this._c, 8)
97483 H.writeInt32BE(this._d, 12)
97484 H.writeInt32BE(this._e, 16)
97485 H.writeInt32BE(this._f, 20)
97486 H.writeInt32BE(this._g, 24)
97487 H.writeInt32BE(this._h, 28)
97488
97489 return H
97490 }
97491
97492 module.exports = Sha256
97493
97494 }).call(this,require("buffer").Buffer)
97495 },{"./hash":79,"buffer":5,"inherits":63}],85:[function(require,module,exports){
97496 (function (Buffer){
97497 var inherits = require('inherits')
97498 var SHA512 = require('./sha512')
97499 var Hash = require('./hash')
97500
97501 var W = new Array(160)
97502
97503 function Sha384 () {
97504 this.init()
97505 this._w = W
97506
97507 Hash.call(this, 128, 112)
97508 }
97509
97510 inherits(Sha384, SHA512)
97511
97512 Sha384.prototype.init = function () {
97513 this._ah = 0xcbbb9d5d
97514 this._bh = 0x629a292a
97515 this._ch = 0x9159015a
97516 this._dh = 0x152fecd8
97517 this._eh = 0x67332667
97518 this._fh = 0x8eb44a87
97519 this._gh = 0xdb0c2e0d
97520 this._hh = 0x47b5481d
97521
97522 this._al = 0xc1059ed8
97523 this._bl = 0x367cd507
97524 this._cl = 0x3070dd17
97525 this._dl = 0xf70e5939
97526 this._el = 0xffc00b31
97527 this._fl = 0x68581511
97528 this._gl = 0x64f98fa7
97529 this._hl = 0xbefa4fa4
97530
97531 return this
97532 }
97533
97534 Sha384.prototype._hash = function () {
97535 var H = new Buffer(48)
97536
97537 function writeInt64BE (h, l, offset) {
97538 H.writeInt32BE(h, offset)
97539 H.writeInt32BE(l, offset + 4)
97540 }
97541
97542 writeInt64BE(this._ah, this._al, 0)
97543 writeInt64BE(this._bh, this._bl, 8)
97544 writeInt64BE(this._ch, this._cl, 16)
97545 writeInt64BE(this._dh, this._dl, 24)
97546 writeInt64BE(this._eh, this._el, 32)
97547 writeInt64BE(this._fh, this._fl, 40)
97548
97549 return H
97550 }
97551
97552 module.exports = Sha384
97553
97554 }).call(this,require("buffer").Buffer)
97555 },{"./hash":79,"./sha512":86,"buffer":5,"inherits":63}],86:[function(require,module,exports){
97556 (function (Buffer){
97557 var inherits = require('inherits')
97558 var Hash = require('./hash')
97559
97560 var K = [
97561 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
97562 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
97563 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
97564 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
97565 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
97566 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
97567 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
97568 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
97569 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
97570 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
97571 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
97572 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
97573 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
97574 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
97575 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
97576 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
97577 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
97578 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
97579 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
97580 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
97581 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
97582 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
97583 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
97584 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
97585 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
97586 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
97587 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
97588 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
97589 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
97590 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
97591 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
97592 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
97593 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
97594 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
97595 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
97596 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
97597 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
97598 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
97599 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
97600 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
97601 ]
97602
97603 var W = new Array(160)
97604
97605 function Sha512 () {
97606 this.init()
97607 this._w = W
97608
97609 Hash.call(this, 128, 112)
97610 }
97611
97612 inherits(Sha512, Hash)
97613
97614 Sha512.prototype.init = function () {
97615 this._ah = 0x6a09e667
97616 this._bh = 0xbb67ae85
97617 this._ch = 0x3c6ef372
97618 this._dh = 0xa54ff53a
97619 this._eh = 0x510e527f
97620 this._fh = 0x9b05688c
97621 this._gh = 0x1f83d9ab
97622 this._hh = 0x5be0cd19
97623
97624 this._al = 0xf3bcc908
97625 this._bl = 0x84caa73b
97626 this._cl = 0xfe94f82b
97627 this._dl = 0x5f1d36f1
97628 this._el = 0xade682d1
97629 this._fl = 0x2b3e6c1f
97630 this._gl = 0xfb41bd6b
97631 this._hl = 0x137e2179
97632
97633 return this
97634 }
97635
97636 function Ch (x, y, z) {
97637 return z ^ (x & (y ^ z))
97638 }
97639
97640 function maj (x, y, z) {
97641 return (x & y) | (z & (x | y))
97642 }
97643
97644 function sigma0 (x, xl) {
97645 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
97646 }
97647
97648 function sigma1 (x, xl) {
97649 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
97650 }
97651
97652 function Gamma0 (x, xl) {
97653 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
97654 }
97655
97656 function Gamma0l (x, xl) {
97657 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
97658 }
97659
97660 function Gamma1 (x, xl) {
97661 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
97662 }
97663
97664 function Gamma1l (x, xl) {
97665 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
97666 }
97667
97668 function getCarry (a, b) {
97669 return (a >>> 0) < (b >>> 0) ? 1 : 0
97670 }
97671
97672 Sha512.prototype._update = function (M) {
97673 var W = this._w
97674
97675 var ah = this._ah | 0
97676 var bh = this._bh | 0
97677 var ch = this._ch | 0
97678 var dh = this._dh | 0
97679 var eh = this._eh | 0
97680 var fh = this._fh | 0
97681 var gh = this._gh | 0
97682 var hh = this._hh | 0
97683
97684 var al = this._al | 0
97685 var bl = this._bl | 0
97686 var cl = this._cl | 0
97687 var dl = this._dl | 0
97688 var el = this._el | 0
97689 var fl = this._fl | 0
97690 var gl = this._gl | 0
97691 var hl = this._hl | 0
97692
97693 for (var i = 0; i < 32; i += 2) {
97694 W[i] = M.readInt32BE(i * 4)
97695 W[i + 1] = M.readInt32BE(i * 4 + 4)
97696 }
97697 for (; i < 160; i += 2) {
97698 var xh = W[i - 15 * 2]
97699 var xl = W[i - 15 * 2 + 1]
97700 var gamma0 = Gamma0(xh, xl)
97701 var gamma0l = Gamma0l(xl, xh)
97702
97703 xh = W[i - 2 * 2]
97704 xl = W[i - 2 * 2 + 1]
97705 var gamma1 = Gamma1(xh, xl)
97706 var gamma1l = Gamma1l(xl, xh)
97707
97708 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
97709 var Wi7h = W[i - 7 * 2]
97710 var Wi7l = W[i - 7 * 2 + 1]
97711
97712 var Wi16h = W[i - 16 * 2]
97713 var Wi16l = W[i - 16 * 2 + 1]
97714
97715 var Wil = (gamma0l + Wi7l) | 0
97716 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
97717 Wil = (Wil + gamma1l) | 0
97718 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
97719 Wil = (Wil + Wi16l) | 0
97720 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
97721
97722 W[i] = Wih
97723 W[i + 1] = Wil
97724 }
97725
97726 for (var j = 0; j < 160; j += 2) {
97727 Wih = W[j]
97728 Wil = W[j + 1]
97729
97730 var majh = maj(ah, bh, ch)
97731 var majl = maj(al, bl, cl)
97732
97733 var sigma0h = sigma0(ah, al)
97734 var sigma0l = sigma0(al, ah)
97735 var sigma1h = sigma1(eh, el)
97736 var sigma1l = sigma1(el, eh)
97737
97738 // t1 = h + sigma1 + ch + K[j] + W[j]
97739 var Kih = K[j]
97740 var Kil = K[j + 1]
97741
97742 var chh = Ch(eh, fh, gh)
97743 var chl = Ch(el, fl, gl)
97744
97745 var t1l = (hl + sigma1l) | 0
97746 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
97747 t1l = (t1l + chl) | 0
97748 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
97749 t1l = (t1l + Kil) | 0
97750 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
97751 t1l = (t1l + Wil) | 0
97752 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
97753
97754 // t2 = sigma0 + maj
97755 var t2l = (sigma0l + majl) | 0
97756 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
97757
97758 hh = gh
97759 hl = gl
97760 gh = fh
97761 gl = fl
97762 fh = eh
97763 fl = el
97764 el = (dl + t1l) | 0
97765 eh = (dh + t1h + getCarry(el, dl)) | 0
97766 dh = ch
97767 dl = cl
97768 ch = bh
97769 cl = bl
97770 bh = ah
97771 bl = al
97772 al = (t1l + t2l) | 0
97773 ah = (t1h + t2h + getCarry(al, t1l)) | 0
97774 }
97775
97776 this._al = (this._al + al) | 0
97777 this._bl = (this._bl + bl) | 0
97778 this._cl = (this._cl + cl) | 0
97779 this._dl = (this._dl + dl) | 0
97780 this._el = (this._el + el) | 0
97781 this._fl = (this._fl + fl) | 0
97782 this._gl = (this._gl + gl) | 0
97783 this._hl = (this._hl + hl) | 0
97784
97785 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
97786 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
97787 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
97788 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
97789 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
97790 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
97791 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
97792 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
97793 }
97794
97795 Sha512.prototype._hash = function () {
97796 var H = new Buffer(64)
97797
97798 function writeInt64BE (h, l, offset) {
97799 H.writeInt32BE(h, offset)
97800 H.writeInt32BE(l, offset + 4)
97801 }
97802
97803 writeInt64BE(this._ah, this._al, 0)
97804 writeInt64BE(this._bh, this._bl, 8)
97805 writeInt64BE(this._ch, this._cl, 16)
97806 writeInt64BE(this._dh, this._dl, 24)
97807 writeInt64BE(this._eh, this._el, 32)
97808 writeInt64BE(this._fh, this._fl, 40)
97809 writeInt64BE(this._gh, this._gl, 48)
97810 writeInt64BE(this._hh, this._hl, 56)
97811
97812 return H
97813 }
97814
97815 module.exports = Sha512
97816
97817 }).call(this,require("buffer").Buffer)
97818 },{"./hash":79,"buffer":5,"inherits":63}],87:[function(require,module,exports){
97819 var isHexPrefixed = require('is-hex-prefixed');
97820
97821 /**
97822 * Removes '0x' from a given `String` is present
97823 * @param {String} str the string value
97824 * @return {String|Optional} a string by pass if necessary
97825 */
97826 module.exports = function stripHexPrefix(str) {
97827 if (typeof str !== 'string') {
97828 return str;
97829 }
97830
97831 return isHexPrefixed(str) ? str.slice(2) : str;
97832 }
97833
97834 },{"is-hex-prefixed":64}]},{},[31])(31)
97835 });</script>
97836 <script>function convertRippleAdrr(address) {
97837 return window.basex('rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz').encode(
97838 window.basex('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz').decode(address)
97839 )
97840 }
97841
97842 function convertRipplePriv(priv) {
97843 return window.basex('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz').decode(priv).toString("hex").slice(2,66)
97844 }
97845
97846 </script>
97847 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
97848
97849 //// base.js
97850
97851 /** @fileOverview Javascript cryptography implementation.
97852 *
97853 * Crush to remove comments, shorten variable names and
97854 * generally reduce transmission size.
97855 *
97856 * @author Emily Stark
97857 * @author Mike Hamburg
97858 * @author Dan Boneh
97859 */
97860
97861 "use strict";
97862 /*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
97863 /*global document, window, escape, unescape, module, require, Uint32Array */
97864
97865 /** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
97866 var sjcl = {
97867 /** @namespace Symmetric ciphers. */
97868 cipher: {},
97869
97870 /** @namespace Hash functions. Right now only SHA256 is implemented. */
97871 hash: {},
97872
97873 /** @namespace Key exchange functions. Right now only SRP is implemented. */
97874 keyexchange: {},
97875
97876 /** @namespace Block cipher modes of operation. */
97877 mode: {},
97878
97879 /** @namespace Miscellaneous. HMAC and PBKDF2. */
97880 misc: {},
97881
97882 /**
97883 * @namespace Bit array encoders and decoders.
97884 *
97885 * @description
97886 * The members of this namespace are functions which translate between
97887 * SJCL's bitArrays and other objects (usually strings). Because it
97888 * isn't always clear which direction is encoding and which is decoding,
97889 * the method names are "fromBits" and "toBits".
97890 */
97891 codec: {},
97892
97893 /** @namespace Exceptions. */
97894 exception: {
97895 /** @constructor Ciphertext is corrupt. */
97896 corrupt: function(message) {
97897 this.toString = function() { return "CORRUPT: "+this.message; };
97898 this.message = message;
97899 },
97900
97901 /** @constructor Invalid parameter. */
97902 invalid: function(message) {
97903 this.toString = function() { return "INVALID: "+this.message; };
97904 this.message = message;
97905 },
97906
97907 /** @constructor Bug or missing feature in SJCL. @constructor */
97908 bug: function(message) {
97909 this.toString = function() { return "BUG: "+this.message; };
97910 this.message = message;
97911 },
97912
97913 /** @constructor Something isn't ready. */
97914 notReady: function(message) {
97915 this.toString = function() { return "NOT READY: "+this.message; };
97916 this.message = message;
97917 }
97918 }
97919 };
97920
97921 if(typeof module !== 'undefined' && module.exports){
97922 module.exports = sjcl;
97923 }
97924 if (typeof define === "function") {
97925 define([], function () {
97926 return sjcl;
97927 });
97928 }
97929
97930
97931 //// bitArray.js
97932
97933 /** @fileOverview Arrays of bits, encoded as arrays of Numbers.
97934 *
97935 * @author Emily Stark
97936 * @author Mike Hamburg
97937 * @author Dan Boneh
97938 */
97939
97940 /** @namespace Arrays of bits, encoded as arrays of Numbers.
97941 *
97942 * @description
97943 * <p>
97944 * These objects are the currency accepted by SJCL's crypto functions.
97945 * </p>
97946 *
97947 * <p>
97948 * Most of our crypto primitives operate on arrays of 4-byte words internally,
97949 * but many of them can take arguments that are not a multiple of 4 bytes.
97950 * This library encodes arrays of bits (whose size need not be a multiple of 8
97951 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
97952 * array of words, 32 bits at a time. Since the words are double-precision
97953 * floating point numbers, they fit some extra data. We use this (in a private,
97954 * possibly-changing manner) to encode the number of bits actually present
97955 * in the last word of the array.
97956 * </p>
97957 *
97958 * <p>
97959 * Because bitwise ops clear this out-of-band data, these arrays can be passed
97960 * to ciphers like AES which want arrays of words.
97961 * </p>
97962 */
97963 sjcl.bitArray = {
97964 /**
97965 * Array slices in units of bits.
97966 * @param {bitArray} a The array to slice.
97967 * @param {Number} bstart The offset to the start of the slice, in bits.
97968 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
97969 * slice until the end of the array.
97970 * @return {bitArray} The requested slice.
97971 */
97972 bitSlice: function (a, bstart, bend) {
97973 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
97974 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
97975 },
97976
97977 /**
97978 * Extract a number packed into a bit array.
97979 * @param {bitArray} a The array to slice.
97980 * @param {Number} bstart The offset to the start of the slice, in bits.
97981 * @param {Number} length The length of the number to extract.
97982 * @return {Number} The requested slice.
97983 */
97984 extract: function(a, bstart, blength) {
97985 // FIXME: this Math.floor is not necessary at all, but for some reason
97986 // seems to suppress a bug in the Chromium JIT.
97987 var x, sh = Math.floor((-bstart-blength) & 31);
97988 if ((bstart + blength - 1 ^ bstart) & -32) {
97989 // it crosses a boundary
97990 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
97991 } else {
97992 // within a single word
97993 x = a[bstart/32|0] >>> sh;
97994 }
97995 return x & ((1<<blength) - 1);
97996 },
97997
97998 /**
97999 * Concatenate two bit arrays.
98000 * @param {bitArray} a1 The first array.
98001 * @param {bitArray} a2 The second array.
98002 * @return {bitArray} The concatenation of a1 and a2.
98003 */
98004 concat: function (a1, a2) {
98005 if (a1.length === 0 || a2.length === 0) {
98006 return a1.concat(a2);
98007 }
98008
98009 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
98010 if (shift === 32) {
98011 return a1.concat(a2);
98012 } else {
98013 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
98014 }
98015 },
98016
98017 /**
98018 * Find the length of an array of bits.
98019 * @param {bitArray} a The array.
98020 * @return {Number} The length of a, in bits.
98021 */
98022 bitLength: function (a) {
98023 var l = a.length, x;
98024 if (l === 0) { return 0; }
98025 x = a[l - 1];
98026 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
98027 },
98028
98029 /**
98030 * Truncate an array.
98031 * @param {bitArray} a The array.
98032 * @param {Number} len The length to truncate to, in bits.
98033 * @return {bitArray} A new array, truncated to len bits.
98034 */
98035 clamp: function (a, len) {
98036 if (a.length * 32 < len) { return a; }
98037 a = a.slice(0, Math.ceil(len / 32));
98038 var l = a.length;
98039 len = len & 31;
98040 if (l > 0 && len) {
98041 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
98042 }
98043 return a;
98044 },
98045
98046 /**
98047 * Make a partial word for a bit array.
98048 * @param {Number} len The number of bits in the word.
98049 * @param {Number} x The bits.
98050 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
98051 * @return {Number} The partial word.
98052 */
98053 partial: function (len, x, _end) {
98054 if (len === 32) { return x; }
98055 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
98056 },
98057
98058 /**
98059 * Get the number of bits used by a partial word.
98060 * @param {Number} x The partial word.
98061 * @return {Number} The number of bits used by the partial word.
98062 */
98063 getPartial: function (x) {
98064 return Math.round(x/0x10000000000) || 32;
98065 },
98066
98067 /**
98068 * Compare two arrays for equality in a predictable amount of time.
98069 * @param {bitArray} a The first array.
98070 * @param {bitArray} b The second array.
98071 * @return {boolean} true if a == b; false otherwise.
98072 */
98073 equal: function (a, b) {
98074 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
98075 return false;
98076 }
98077 var x = 0, i;
98078 for (i=0; i<a.length; i++) {
98079 x |= a[i]^b[i];
98080 }
98081 return (x === 0);
98082 },
98083
98084 /** Shift an array right.
98085 * @param {bitArray} a The array to shift.
98086 * @param {Number} shift The number of bits to shift.
98087 * @param {Number} [carry=0] A byte to carry in
98088 * @param {bitArray} [out=[]] An array to prepend to the output.
98089 * @private
98090 */
98091 _shiftRight: function (a, shift, carry, out) {
98092 var i, last2=0, shift2;
98093 if (out === undefined) { out = []; }
98094
98095 for (; shift >= 32; shift -= 32) {
98096 out.push(carry);
98097 carry = 0;
98098 }
98099 if (shift === 0) {
98100 return out.concat(a);
98101 }
98102
98103 for (i=0; i<a.length; i++) {
98104 out.push(carry | a[i]>>>shift);
98105 carry = a[i] << (32-shift);
98106 }
98107 last2 = a.length ? a[a.length-1] : 0;
98108 shift2 = sjcl.bitArray.getPartial(last2);
98109 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
98110 return out;
98111 },
98112
98113 /** xor a block of 4 words together.
98114 * @private
98115 */
98116 _xor4: function(x,y) {
98117 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
98118 },
98119
98120 /** byteswap a word array inplace.
98121 * (does not handle partial words)
98122 * @param {sjcl.bitArray} a word array
98123 * @return {sjcl.bitArray} byteswapped array
98124 */
98125 byteswapM: function(a) {
98126 var i, v, m = 0xff00;
98127 for (i = 0; i < a.length; ++i) {
98128 v = a[i];
98129 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
98130 }
98131 return a;
98132 }
98133 };
98134
98135
98136 //// codecString.js
98137
98138 /** @fileOverview Bit array codec implementations.
98139 *
98140 * @author Emily Stark
98141 * @author Mike Hamburg
98142 * @author Dan Boneh
98143 */
98144
98145 /** @namespace UTF-8 strings */
98146 sjcl.codec.utf8String = {
98147 /** Convert from a bitArray to a UTF-8 string. */
98148 fromBits: function (arr) {
98149 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
98150 for (i=0; i<bl/8; i++) {
98151 if ((i&3) === 0) {
98152 tmp = arr[i/4];
98153 }
98154 out += String.fromCharCode(tmp >>> 24);
98155 tmp <<= 8;
98156 }
98157 return decodeURIComponent(escape(out));
98158 },
98159
98160 /** Convert from a UTF-8 string to a bitArray. */
98161 toBits: function (str) {
98162 str = unescape(encodeURIComponent(str));
98163 var out = [], i, tmp=0;
98164 for (i=0; i<str.length; i++) {
98165 tmp = tmp << 8 | str.charCodeAt(i);
98166 if ((i&3) === 3) {
98167 out.push(tmp);
98168 tmp = 0;
98169 }
98170 }
98171 if (i&3) {
98172 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
98173 }
98174 return out;
98175 }
98176 };
98177
98178
98179 //// codecHex.js
98180
98181 /** @fileOverview Bit array codec implementations.
98182 *
98183 * @author Emily Stark
98184 * @author Mike Hamburg
98185 * @author Dan Boneh
98186 */
98187
98188 /** @namespace Hexadecimal */
98189 sjcl.codec.hex = {
98190 /** Convert from a bitArray to a hex string. */
98191 fromBits: function (arr) {
98192 var out = "", i;
98193 for (i=0; i<arr.length; i++) {
98194 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
98195 }
98196 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
98197 },
98198 /** Convert from a hex string to a bitArray. */
98199 toBits: function (str) {
98200 var i, out=[], len;
98201 str = str.replace(/\s|0x/g, "");
98202 len = str.length;
98203 str = str + "00000000";
98204 for (i=0; i<str.length; i+=8) {
98205 out.push(parseInt(str.substr(i,8),16)^0);
98206 }
98207 return sjcl.bitArray.clamp(out, len*4);
98208 }
98209 };
98210
98211
98212 //// sha512.js
98213
98214 /** @fileOverview Javascript SHA-512 implementation.
98215 *
98216 * This implementation was written for CryptoJS by Jeff Mott and adapted for
98217 * SJCL by Stefan Thomas.
98218 *
98219 * CryptoJS (c) 20092012 by Jeff Mott. All rights reserved.
98220 * Released with New BSD License
98221 *
98222 * @author Emily Stark
98223 * @author Mike Hamburg
98224 * @author Dan Boneh
98225 * @author Jeff Mott
98226 * @author Stefan Thomas
98227 */
98228
98229 /**
98230 * Context for a SHA-512 operation in progress.
98231 * @constructor
98232 * @class Secure Hash Algorithm, 512 bits.
98233 */
98234 sjcl.hash.sha512 = function (hash) {
98235 if (!this._key[0]) { this._precompute(); }
98236 if (hash) {
98237 this._h = hash._h.slice(0);
98238 this._buffer = hash._buffer.slice(0);
98239 this._length = hash._length;
98240 } else {
98241 this.reset();
98242 }
98243 };
98244
98245 /**
98246 * Hash a string or an array of words.
98247 * @static
98248 * @param {bitArray|String} data the data to hash.
98249 * @return {bitArray} The hash value, an array of 16 big-endian words.
98250 */
98251 sjcl.hash.sha512.hash = function (data) {
98252 return (new sjcl.hash.sha512()).update(data).finalize();
98253 };
98254
98255 sjcl.hash.sha512.prototype = {
98256 /**
98257 * The hash's block size, in bits.
98258 * @constant
98259 */
98260 blockSize: 1024,
98261
98262 /**
98263 * Reset the hash state.
98264 * @return this
98265 */
98266 reset:function () {
98267 this._h = this._init.slice(0);
98268 this._buffer = [];
98269 this._length = 0;
98270 return this;
98271 },
98272
98273 /**
98274 * Input several words to the hash.
98275 * @param {bitArray|String} data the data to hash.
98276 * @return this
98277 */
98278 update: function (data) {
98279 if (typeof data === "string") {
98280 data = sjcl.codec.utf8String.toBits(data);
98281 }
98282 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
98283 ol = this._length,
98284 nl = this._length = ol + sjcl.bitArray.bitLength(data);
98285 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
98286 this._block(b.splice(0,32));
98287 }
98288 return this;
98289 },
98290
98291 /**
98292 * Complete hashing and output the hash value.
98293 * @return {bitArray} The hash value, an array of 16 big-endian words.
98294 */
98295 finalize:function () {
98296 var i, b = this._buffer, h = this._h;
98297
98298 // Round out and push the buffer
98299 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
98300
98301 // Round out the buffer to a multiple of 32 words, less the 4 length words.
98302 for (i = b.length + 4; i & 31; i++) {
98303 b.push(0);
98304 }
98305
98306 // append the length
98307 b.push(0);
98308 b.push(0);
98309 b.push(Math.floor(this._length / 0x100000000));
98310 b.push(this._length | 0);
98311
98312 while (b.length) {
98313 this._block(b.splice(0,32));
98314 }
98315
98316 this.reset();
98317 return h;
98318 },
98319
98320 /**
98321 * The SHA-512 initialization vector, to be precomputed.
98322 * @private
98323 */
98324 _init:[],
98325
98326 /**
98327 * Least significant 24 bits of SHA512 initialization values.
98328 *
98329 * Javascript only has 53 bits of precision, so we compute the 40 most
98330 * significant bits and add the remaining 24 bits as constants.
98331 *
98332 * @private
98333 */
98334 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
98335
98336 /*
98337 _init:
98338 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
98339 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
98340 */
98341
98342 /**
98343 * The SHA-512 hash key, to be precomputed.
98344 * @private
98345 */
98346 _key:[],
98347
98348 /**
98349 * Least significant 24 bits of SHA512 key values.
98350 * @private
98351 */
98352 _keyr:
98353 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
98354 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
98355 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
98356 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
98357 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
98358 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
98359 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
98360 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
98361 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
98362 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
98363
98364 /*
98365 _key:
98366 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
98367 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
98368 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
98369 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
98370 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
98371 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
98372 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
98373 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
98374 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
98375 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
98376 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
98377 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
98378 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
98379 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
98380 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
98381 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
98382 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
98383 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
98384 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
98385 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
98386 */
98387
98388 /**
98389 * Function to precompute _init and _key.
98390 * @private
98391 */
98392 _precompute: function () {
98393 // XXX: This code is for precomputing the SHA256 constants, change for
98394 // SHA512 and re-enable.
98395 var i = 0, prime = 2, factor;
98396
98397 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
98398 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
98399
98400 outer: for (; i<80; prime++) {
98401 for (factor=2; factor*factor <= prime; factor++) {
98402 if (prime % factor === 0) {
98403 // not a prime
98404 continue outer;
98405 }
98406 }
98407
98408 if (i<8) {
98409 this._init[i*2] = frac(Math.pow(prime, 1/2));
98410 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
98411 }
98412 this._key[i*2] = frac(Math.pow(prime, 1/3));
98413 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
98414 i++;
98415 }
98416 },
98417
98418 /**
98419 * Perform one cycle of SHA-512.
98420 * @param {bitArray} words one block of words.
98421 * @private
98422 */
98423 _block:function (words) {
98424 var i, wrh, wrl,
98425 w = words.slice(0),
98426 h = this._h,
98427 k = this._key,
98428 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
98429 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
98430 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
98431 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
98432
98433 // Working variables
98434 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
98435 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
98436 eh = h4h, el = h4l, fh = h5h, fl = h5l,
98437 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
98438
98439 for (i=0; i<80; i++) {
98440 // load up the input word for this round
98441 if (i<16) {
98442 wrh = w[i * 2];
98443 wrl = w[i * 2 + 1];
98444 } else {
98445 // Gamma0
98446 var gamma0xh = w[(i-15) * 2];
98447 var gamma0xl = w[(i-15) * 2 + 1];
98448 var gamma0h =
98449 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
98450 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
98451 (gamma0xh >>> 7);
98452 var gamma0l =
98453 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
98454 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
98455 ((gamma0xh << 25) | (gamma0xl >>> 7));
98456
98457 // Gamma1
98458 var gamma1xh = w[(i-2) * 2];
98459 var gamma1xl = w[(i-2) * 2 + 1];
98460 var gamma1h =
98461 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
98462 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
98463 (gamma1xh >>> 6);
98464 var gamma1l =
98465 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
98466 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
98467 ((gamma1xh << 26) | (gamma1xl >>> 6));
98468
98469 // Shortcuts
98470 var wr7h = w[(i-7) * 2];
98471 var wr7l = w[(i-7) * 2 + 1];
98472
98473 var wr16h = w[(i-16) * 2];
98474 var wr16l = w[(i-16) * 2 + 1];
98475
98476 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
98477 wrl = gamma0l + wr7l;
98478 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
98479 wrl += gamma1l;
98480 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
98481 wrl += wr16l;
98482 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
98483 }
98484
98485 w[i*2] = wrh |= 0;
98486 w[i*2 + 1] = wrl |= 0;
98487
98488 // Ch
98489 var chh = (eh & fh) ^ (~eh & gh);
98490 var chl = (el & fl) ^ (~el & gl);
98491
98492 // Maj
98493 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
98494 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
98495
98496 // Sigma0
98497 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
98498 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
98499
98500 // Sigma1
98501 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
98502 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
98503
98504 // K(round)
98505 var krh = k[i*2];
98506 var krl = k[i*2+1];
98507
98508 // t1 = h + sigma1 + ch + K(round) + W(round)
98509 var t1l = hl + sigma1l;
98510 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
98511 t1l += chl;
98512 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
98513 t1l += krl;
98514 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
98515 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
98516 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
98517
98518 // t2 = sigma0 + maj
98519 var t2l = sigma0l + majl;
98520 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
98521
98522 // Update working variables
98523 hh = gh;
98524 hl = gl;
98525 gh = fh;
98526 gl = fl;
98527 fh = eh;
98528 fl = el;
98529 el = (dl + t1l) | 0;
98530 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
98531 dh = ch;
98532 dl = cl;
98533 ch = bh;
98534 cl = bl;
98535 bh = ah;
98536 bl = al;
98537 al = (t1l + t2l) | 0;
98538 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
98539 }
98540
98541 // Intermediate hash
98542 h0l = h[1] = (h0l + al) | 0;
98543 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
98544 h1l = h[3] = (h1l + bl) | 0;
98545 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
98546 h2l = h[5] = (h2l + cl) | 0;
98547 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
98548 h3l = h[7] = (h3l + dl) | 0;
98549 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
98550 h4l = h[9] = (h4l + el) | 0;
98551 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
98552 h5l = h[11] = (h5l + fl) | 0;
98553 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
98554 h6l = h[13] = (h6l + gl) | 0;
98555 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
98556 h7l = h[15] = (h7l + hl) | 0;
98557 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
98558 }
98559 };
98560
98561
98562 //// hmac.js
98563
98564 /** @fileOverview HMAC implementation.
98565 *
98566 * @author Emily Stark
98567 * @author Mike Hamburg
98568 * @author Dan Boneh
98569 */
98570
98571 /** HMAC with the specified hash function.
98572 * @constructor
98573 * @param {bitArray} key the key for HMAC.
98574 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
98575 */
98576 sjcl.misc.hmac = function (key, Hash) {
98577 this._hash = Hash = Hash || sjcl.hash.sha256;
98578 var exKey = [[],[]], i,
98579 bs = Hash.prototype.blockSize / 32;
98580 this._baseHash = [new Hash(), new Hash()];
98581
98582 if (key.length > bs) {
98583 key = Hash.hash(key);
98584 }
98585
98586 for (i=0; i<bs; i++) {
98587 exKey[0][i] = key[i]^0x36363636;
98588 exKey[1][i] = key[i]^0x5C5C5C5C;
98589 }
98590
98591 this._baseHash[0].update(exKey[0]);
98592 this._baseHash[1].update(exKey[1]);
98593 this._resultHash = new Hash(this._baseHash[0]);
98594 };
98595
98596 /** HMAC with the specified hash function. Also called encrypt since it's a prf.
98597 * @param {bitArray|String} data The data to mac.
98598 */
98599 sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
98600 if (!this._updated) {
98601 this.update(data);
98602 return this.digest(data);
98603 } else {
98604 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
98605 }
98606 };
98607
98608 sjcl.misc.hmac.prototype.reset = function () {
98609 this._resultHash = new this._hash(this._baseHash[0]);
98610 this._updated = false;
98611 };
98612
98613 sjcl.misc.hmac.prototype.update = function (data) {
98614 this._updated = true;
98615 this._resultHash.update(data);
98616 };
98617
98618 sjcl.misc.hmac.prototype.digest = function () {
98619 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
98620
98621 this.reset();
98622
98623 return result;
98624 };
98625
98626
98627 //// pbkdf2.js
98628
98629
98630 /** @fileOverview Password-based key-derivation function, version 2.0.
98631 *
98632 * @author Emily Stark
98633 * @author Mike Hamburg
98634 * @author Dan Boneh
98635 */
98636
98637 /** Password-Based Key-Derivation Function, version 2.0.
98638 *
98639 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
98640 *
98641 * This is the method specified by RSA's PKCS #5 standard.
98642 *
98643 * @param {bitArray|String} password The password.
98644 * @param {bitArray|String} salt The salt. Should have lots of entropy.
98645 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
98646 * @param {Number} [length] The length of the derived key. Defaults to the
98647 output size of the hash function.
98648 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
98649 * @return {bitArray} the derived key.
98650 */
98651 sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
98652 count = count || 1000;
98653
98654 if (length < 0 || count < 0) {
98655 throw sjcl.exception.invalid("invalid params to pbkdf2");
98656 }
98657
98658 if (typeof password === "string") {
98659 password = sjcl.codec.utf8String.toBits(password);
98660 }
98661
98662 if (typeof salt === "string") {
98663 salt = sjcl.codec.utf8String.toBits(salt);
98664 }
98665
98666 Prff = Prff || sjcl.misc.hmac;
98667
98668 var prf = new Prff(password),
98669 u, ui, i, j, k, out = [], b = sjcl.bitArray;
98670
98671 for (k = 1; 32 * out.length < (length || 1); k++) {
98672 u = ui = prf.encrypt(b.concat(salt,[k]));
98673
98674 for (i=1; i<count; i++) {
98675 ui = prf.encrypt(ui);
98676 for (j=0; j<ui.length; j++) {
98677 u[j] ^= ui[j];
98678 }
98679 }
98680
98681 out = out.concat(u);
98682 }
98683
98684 if (length) { out = b.clamp(out, length); }
98685
98686 return out;
98687 };
98688
98689
98690 //// sha256.js
98691
98692 /** @fileOverview Javascript SHA-256 implementation.
98693 *
98694 * An older version of this implementation is available in the public
98695 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
98696 * Stanford University 2008-2010 and BSD-licensed for liability
98697 * reasons.
98698 *
98699 * Special thanks to Aldo Cortesi for pointing out several bugs in
98700 * this code.
98701 *
98702 * @author Emily Stark
98703 * @author Mike Hamburg
98704 * @author Dan Boneh
98705 */
98706
98707 /**
98708 * Context for a SHA-256 operation in progress.
98709 * @constructor
98710 * @class Secure Hash Algorithm, 256 bits.
98711 */
98712 sjcl.hash.sha256 = function (hash) {
98713 if (!this._key[0]) { this._precompute(); }
98714 if (hash) {
98715 this._h = hash._h.slice(0);
98716 this._buffer = hash._buffer.slice(0);
98717 this._length = hash._length;
98718 } else {
98719 this.reset();
98720 }
98721 };
98722
98723 /**
98724 * Hash a string or an array of words.
98725 * @static
98726 * @param {bitArray|String} data the data to hash.
98727 * @return {bitArray} The hash value, an array of 16 big-endian words.
98728 */
98729 sjcl.hash.sha256.hash = function (data) {
98730 return (new sjcl.hash.sha256()).update(data).finalize();
98731 };
98732
98733 sjcl.hash.sha256.prototype = {
98734 /**
98735 * The hash's block size, in bits.
98736 * @constant
98737 */
98738 blockSize: 512,
98739
98740 /**
98741 * Reset the hash state.
98742 * @return this
98743 */
98744 reset:function () {
98745 this._h = this._init.slice(0);
98746 this._buffer = [];
98747 this._length = 0;
98748 return this;
98749 },
98750
98751 /**
98752 * Input several words to the hash.
98753 * @param {bitArray|String} data the data to hash.
98754 * @return this
98755 */
98756 update: function (data) {
98757 if (typeof data === "string") {
98758 data = sjcl.codec.utf8String.toBits(data);
98759 }
98760 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
98761 ol = this._length,
98762 nl = this._length = ol + sjcl.bitArray.bitLength(data);
98763 for (i = 512+ol & -512; i <= nl; i+= 512) {
98764 this._block(b.splice(0,16));
98765 }
98766 return this;
98767 },
98768
98769 /**
98770 * Complete hashing and output the hash value.
98771 * @return {bitArray} The hash value, an array of 8 big-endian words.
98772 */
98773 finalize:function () {
98774 var i, b = this._buffer, h = this._h;
98775
98776 // Round out and push the buffer
98777 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
98778
98779 // Round out the buffer to a multiple of 16 words, less the 2 length words.
98780 for (i = b.length + 2; i & 15; i++) {
98781 b.push(0);
98782 }
98783
98784 // append the length
98785 b.push(Math.floor(this._length / 0x100000000));
98786 b.push(this._length | 0);
98787
98788 while (b.length) {
98789 this._block(b.splice(0,16));
98790 }
98791
98792 this.reset();
98793 return h;
98794 },
98795
98796 /**
98797 * The SHA-256 initialization vector, to be precomputed.
98798 * @private
98799 */
98800 _init:[],
98801 /*
98802 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
98803 */
98804
98805 /**
98806 * The SHA-256 hash key, to be precomputed.
98807 * @private
98808 */
98809 _key:[],
98810 /*
98811 _key:
98812 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
98813 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
98814 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
98815 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
98816 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
98817 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
98818 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
98819 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
98820 */
98821
98822
98823 /**
98824 * Function to precompute _init and _key.
98825 * @private
98826 */
98827 _precompute: function () {
98828 var i = 0, prime = 2, factor;
98829
98830 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
98831
98832 outer: for (; i<64; prime++) {
98833 for (factor=2; factor*factor <= prime; factor++) {
98834 if (prime % factor === 0) {
98835 // not a prime
98836 continue outer;
98837 }
98838 }
98839
98840 if (i<8) {
98841 this._init[i] = frac(Math.pow(prime, 1/2));
98842 }
98843 this._key[i] = frac(Math.pow(prime, 1/3));
98844 i++;
98845 }
98846 },
98847
98848 /**
98849 * Perform one cycle of SHA-256.
98850 * @param {bitArray} words one block of words.
98851 * @private
98852 */
98853 _block:function (words) {
98854 var i, tmp, a, b,
98855 w = words.slice(0),
98856 h = this._h,
98857 k = this._key,
98858 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
98859 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
98860
98861 /* Rationale for placement of |0 :
98862 * If a value can overflow is original 32 bits by a factor of more than a few
98863 * million (2^23 ish), there is a possibility that it might overflow the
98864 * 53-bit mantissa and lose precision.
98865 *
98866 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
98867 * propagates around the loop, and on the hash state h[]. I don't believe
98868 * that the clamps on h4 and on h0 are strictly necessary, but it's close
98869 * (for h4 anyway), and better safe than sorry.
98870 *
98871 * The clamps on h[] are necessary for the output to be correct even in the
98872 * common case and for short inputs.
98873 */
98874 for (i=0; i<64; i++) {
98875 // load up the input word for this round
98876 if (i<16) {
98877 tmp = w[i];
98878 } else {
98879 a = w[(i+1 ) & 15];
98880 b = w[(i+14) & 15];
98881 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
98882 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
98883 w[i&15] + w[(i+9) & 15]) | 0;
98884 }
98885
98886 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
98887
98888 // shift register
98889 h7 = h6; h6 = h5; h5 = h4;
98890 h4 = h3 + tmp | 0;
98891 h3 = h2; h2 = h1; h1 = h0;
98892
98893 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
98894 }
98895
98896 h[0] = h[0]+h0 | 0;
98897 h[1] = h[1]+h1 | 0;
98898 h[2] = h[2]+h2 | 0;
98899 h[3] = h[3]+h3 | 0;
98900 h[4] = h[4]+h4 | 0;
98901 h[5] = h[5]+h5 | 0;
98902 h[6] = h[6]+h6 | 0;
98903 h[7] = h[7]+h7 | 0;
98904 }
98905 };
98906 </script>
98907 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
98908 WORDLISTS["english"] = [
98909 "abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
98910 "access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
98911 "action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
98912 "adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
98913 "agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
98914 "alien","all","alley","allow","almost","alone","alpha","already","also","alter",
98915 "always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
98916 "angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
98917 "anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
98918 "area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
98919 "arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
98920 "assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
98921 "audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
98922 "aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
98923 "bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
98924 "barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
98925 "beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
98926 "best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
98927 "bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
98928 "blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
98929 "boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
98930 "bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
98931 "breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
98932 "broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
98933 "bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
98934 "butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
98935 "calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
98936 "canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
98937 "cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
98938 "cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
98939 "cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
98940 "chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
98941 "chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
98942 "citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
98943 "clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
98944 "cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
98945 "code","coffee","coil","coin","collect","color","column","combine","come","comfort",
98946 "comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
98947 "convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
98948 "cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
98949 "craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
98950 "crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
98951 "cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
98952 "cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
98953 "damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
98954 "debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
98955 "define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
98956 "depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
98957 "despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
98958 "diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
98959 "direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
98960 "divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
98961 "donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
98962 "drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
98963 "drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
98964 "dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
98965 "ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
98966 "elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
98967 "embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
98968 "endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
98969 "enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
98970 "era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
98971 "eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
98972 "excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
98973 "exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
98974 "eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
98975 "family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
98976 "fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
98977 "fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
98978 "film","filter","final","find","fine","finger","finish","fire","firm","first",
98979 "fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
98980 "flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
98981 "foam","focus","fog","foil","fold","follow","food","foot","force","forest",
98982 "forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
98983 "frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
98984 "fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
98985 "gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
98986 "gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
98987 "ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
98988 "glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
98989 "goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
98990 "grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
98991 "grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
98992 "guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
98993 "harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
98994 "heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
98995 "high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
98996 "holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
98997 "host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
98998 "hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
98999 "identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
99000 "impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
99001 "indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
99002 "inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
99003 "intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
99004 "item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
99005 "job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
99006 "junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
99007 "kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
99008 "knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
99009 "laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
99010 "layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
99011 "legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
99012 "liar","liberty","library","license","life","lift","light","like","limb","limit",
99013 "link","lion","liquid","list","little","live","lizard","load","loan","lobster",
99014 "local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
99015 "loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
99016 "magic","magnet","maid","mail","main","major","make","mammal","man","manage",
99017 "mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
99018 "marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
99019 "maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
99020 "member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
99021 "metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
99022 "minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
99023 "model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
99024 "more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
99025 "much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
99026 "myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
99027 "near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
99028 "network","neutral","never","news","next","nice","night","noble","noise","nominee",
99029 "noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
99030 "nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
99031 "obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
99032 "oil","okay","old","olive","olympic","omit","once","one","onion","online",
99033 "only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
99034 "ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
99035 "outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
99036 "paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
99037 "parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
99038 "pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
99039 "penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
99040 "phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
99041 "pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
99042 "play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
99043 "pole","police","pond","pony","pool","popular","portion","position","possible","post",
99044 "potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
99045 "present","pretty","prevent","price","pride","primary","print","priority","prison","private",
99046 "prize","problem","process","produce","profit","program","project","promote","proof","property",
99047 "prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
99048 "punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
99049 "pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
99050 "raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
99051 "ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
99052 "ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
99053 "reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
99054 "relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
99055 "repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
99056 "result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
99057 "ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
99058 "ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
99059 "romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
99060 "rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
99061 "safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
99062 "satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
99063 "scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
99064 "scrub","sea","search","season","seat","second","secret","section","security","seed",
99065 "seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
99066 "session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
99067 "sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
99068 "short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
99069 "siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
99070 "sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
99071 "skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
99072 "slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
99073 "snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
99074 "soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
99075 "sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
99076 "speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
99077 "spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
99078 "spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
99079 "stand","start","state","stay","steak","steel","stem","step","stereo","stick",
99080 "still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
99081 "strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
99082 "success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
99083 "sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
99084 "suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
99085 "swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
99086 "tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
99087 "teach","team","tell","ten","tenant","tennis","tent","term","test","text",
99088 "thank","that","theme","then","theory","there","they","thing","this","thought",
99089 "three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
99090 "time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
99091 "toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
99092 "tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
99093 "toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
99094 "trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
99095 "trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
99096 "truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
99097 "twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
99098 "unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
99099 "unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
99100 "uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
99101 "useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
99102 "vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
99103 "verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
99104 "video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
99105 "vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
99106 "wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
99107 "wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
99108 "web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
99109 "wheel","when","where","whip","whisper","wide","width","wife","wild","will",
99110 "win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
99111 "wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
99112 "worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
99113 "yellow","you","young","youth","zebra","zero","zone","zoo"]
99114 </script>
99115 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
99116 WORDLISTS["japanese"] = [
99117 "あいこくしん", "あいさつ", "あいだ", "あおぞら", "あかちゃん", "あきる", "あけがた", "あける", "あこがれる", "あさい",
99118 "あさひ", "あしあと", "あじわう", "あずかる", "あずき", "あそぶ", "あたえる", "あたためる", "あたりまえ", "あたる",
99119 "あつい", "あつかう", "あっしゅく", "あつまり", "あつめる", "あてな", "あてはまる", "あひる", "あぶら", "あぶる",
99120 "あふれる", "あまい", "あまど", "あまやかす", "あまり", "あみもの", "あめりか", "あやまる", "あゆむ", "あらいぐま",
99121 "あらし", "あらすじ", "あらためる", "あらゆる", "あらわす", "ありがとう", "あわせる", "あわてる", "あんい", "あんがい",
99122 "あんこ", "あんぜん", "あんてい", "あんない", "あんまり", "いいだす", "いおん", "いがい", "いがく", "いきおい",
99123 "いきなり", "いきもの", "いきる", "いくじ", "いくぶん", "いけばな", "いけん", "いこう", "いこく", "いこつ",
99124 "いさましい", "いさん", "いしき", "いじゅう", "いじょう", "いじわる", "いずみ", "いずれ", "いせい", "いせえび",
99125 "いせかい", "いせき", "いぜん", "いそうろう", "いそがしい", "いだい", "いだく", "いたずら", "いたみ", "いたりあ",
99126 "いちおう", "いちじ", "いちど", "いちば", "いちぶ", "いちりゅう", "いつか", "いっしゅん", "いっせい", "いっそう",
99127 "いったん", "いっち", "いってい", "いっぽう", "いてざ", "いてん", "いどう", "いとこ", "いない", "いなか",
99128 "いねむり", "いのち", "いのる", "いはつ", "いばる", "いはん", "いびき", "いひん", "いふく", "いへん",
99129 "いほう", "いみん", "いもうと", "いもたれ", "いもり", "いやがる", "いやす", "いよかん", "いよく", "いらい",
99130 "いらすと", "いりぐち", "いりょう", "いれい", "いれもの", "いれる", "いろえんぴつ", "いわい", "いわう", "いわかん",
99131 "いわば", "いわゆる", "いんげんまめ", "いんさつ", "いんしょう", "いんよう", "うえき", "うえる", "うおざ", "うがい",
99132 "うかぶ", "うかべる", "うきわ", "うくらいな", "うくれれ", "うけたまわる", "うけつけ", "うけとる", "うけもつ", "うける",
99133 "うごかす", "うごく", "うこん", "うさぎ", "うしなう", "うしろがみ", "うすい", "うすぎ", "うすぐらい", "うすめる",
99134 "うせつ", "うちあわせ", "うちがわ", "うちき", "うちゅう", "うっかり", "うつくしい", "うったえる", "うつる", "うどん",
99135 "うなぎ", "うなじ", "うなずく", "うなる", "うねる", "うのう", "うぶげ", "うぶごえ", "うまれる", "うめる",
99136 "うもう", "うやまう", "うよく", "うらがえす", "うらぐち", "うらない", "うりあげ", "うりきれ", "うるさい", "うれしい",
99137 "うれゆき", "うれる", "うろこ", "うわき", "うわさ", "うんこう", "うんちん", "うんてん", "うんどう", "えいえん",
99138 "えいが", "えいきょう", "えいご", "えいせい", "えいぶん", "えいよう", "えいわ", "えおり", "えがお", "えがく",
99139 "えきたい", "えくせる", "えしゃく", "えすて", "えつらん", "えのぐ", "えほうまき", "えほん", "えまき", "えもじ",
99140 "えもの", "えらい", "えらぶ", "えりあ", "えんえん", "えんかい", "えんぎ", "えんげき", "えんしゅう", "えんぜつ",
99141 "えんそく", "えんちょう", "えんとつ", "おいかける", "おいこす", "おいしい", "おいつく", "おうえん", "おうさま", "おうじ",
99142 "おうせつ", "おうたい", "おうふく", "おうべい", "おうよう", "おえる", "おおい", "おおう", "おおどおり", "おおや",
99143 "おおよそ", "おかえり", "おかず", "おがむ", "おかわり", "おぎなう", "おきる", "おくさま", "おくじょう", "おくりがな",
99144 "おくる", "おくれる", "おこす", "おこなう", "おこる", "おさえる", "おさない", "おさめる", "おしいれ", "おしえる",
99145 "おじぎ", "おじさん", "おしゃれ", "おそらく", "おそわる", "おたがい", "おたく", "おだやか", "おちつく", "おっと",
99146 "おつり", "おでかけ", "おとしもの", "おとなしい", "おどり", "おどろかす", "おばさん", "おまいり", "おめでとう", "おもいで",
99147 "おもう", "おもたい", "おもちゃ", "おやつ", "おやゆび", "およぼす", "おらんだ", "おろす", "おんがく", "おんけい",
99148 "おんしゃ", "おんせん", "おんだん", "おんちゅう", "おんどけい", "かあつ", "かいが", "がいき", "がいけん", "がいこう",
99149 "かいさつ", "かいしゃ", "かいすいよく", "かいぜん", "かいぞうど", "かいつう", "かいてん", "かいとう", "かいふく", "がいへき",
99150 "かいほう", "かいよう", "がいらい", "かいわ", "かえる", "かおり", "かかえる", "かがく", "かがし", "かがみ",
99151 "かくご", "かくとく", "かざる", "がぞう", "かたい", "かたち", "がちょう", "がっきゅう", "がっこう", "がっさん",
99152 "がっしょう", "かなざわし", "かのう", "がはく", "かぶか", "かほう", "かほご", "かまう", "かまぼこ", "かめれおん",
99153 "かゆい", "かようび", "からい", "かるい", "かろう", "かわく", "かわら", "がんか", "かんけい", "かんこう",
99154 "かんしゃ", "かんそう", "かんたん", "かんち", "がんばる", "きあい", "きあつ", "きいろ", "ぎいん", "きうい",
99155 "きうん", "きえる", "きおう", "きおく", "きおち", "きおん", "きかい", "きかく", "きかんしゃ", "ききて",
99156 "きくばり", "きくらげ", "きけんせい", "きこう", "きこえる", "きこく", "きさい", "きさく", "きさま", "きさらぎ",
99157 "ぎじかがく", "ぎしき", "ぎじたいけん", "ぎじにってい", "ぎじゅつしゃ", "きすう", "きせい", "きせき", "きせつ", "きそう",
99158 "きぞく", "きぞん", "きたえる", "きちょう", "きつえん", "ぎっちり", "きつつき", "きつね", "きてい", "きどう",
99159 "きどく", "きない", "きなが", "きなこ", "きぬごし", "きねん", "きのう", "きのした", "きはく", "きびしい",
99160 "きひん", "きふく", "きぶん", "きぼう", "きほん", "きまる", "きみつ", "きむずかしい", "きめる", "きもだめし",
99161 "きもち", "きもの", "きゃく", "きやく", "ぎゅうにく", "きよう", "きょうりゅう", "きらい", "きらく", "きりん",
99162 "きれい", "きれつ", "きろく", "ぎろん", "きわめる", "ぎんいろ", "きんかくじ", "きんじょ", "きんようび", "ぐあい",
99163 "くいず", "くうかん", "くうき", "くうぐん", "くうこう", "ぐうせい", "くうそう", "ぐうたら", "くうふく", "くうぼ",
99164 "くかん", "くきょう", "くげん", "ぐこう", "くさい", "くさき", "くさばな", "くさる", "くしゃみ", "くしょう",
99165 "くすのき", "くすりゆび", "くせげ", "くせん", "ぐたいてき", "くださる", "くたびれる", "くちこみ", "くちさき", "くつした",
99166 "ぐっすり", "くつろぐ", "くとうてん", "くどく", "くなん", "くねくね", "くのう", "くふう", "くみあわせ", "くみたてる",
99167 "くめる", "くやくしょ", "くらす", "くらべる", "くるま", "くれる", "くろう", "くわしい", "ぐんかん", "ぐんしょく",
99168 "ぐんたい", "ぐんて", "けあな", "けいかく", "けいけん", "けいこ", "けいさつ", "げいじゅつ", "けいたい", "げいのうじん",
99169 "けいれき", "けいろ", "けおとす", "けおりもの", "げきか", "げきげん", "げきだん", "げきちん", "げきとつ", "げきは",
99170 "げきやく", "げこう", "げこくじょう", "げざい", "けさき", "げざん", "けしき", "けしごむ", "けしょう", "げすと",
99171 "けたば", "けちゃっぷ", "けちらす", "けつあつ", "けつい", "けつえき", "けっこん", "けつじょ", "けっせき", "けってい",
99172 "けつまつ", "げつようび", "げつれい", "けつろん", "げどく", "けとばす", "けとる", "けなげ", "けなす", "けなみ",
99173 "けぬき", "げねつ", "けねん", "けはい", "げひん", "けぶかい", "げぼく", "けまり", "けみかる", "けむし",
99174 "けむり", "けもの", "けらい", "けろけろ", "けわしい", "けんい", "けんえつ", "けんお", "けんか", "げんき",
99175 "けんげん", "けんこう", "けんさく", "けんしゅう", "けんすう", "げんそう", "けんちく", "けんてい", "けんとう", "けんない",
99176 "けんにん", "げんぶつ", "けんま", "けんみん", "けんめい", "けんらん", "けんり", "こあくま", "こいぬ", "こいびと",
99177 "ごうい", "こうえん", "こうおん", "こうかん", "ごうきゅう", "ごうけい", "こうこう", "こうさい", "こうじ", "こうすい",
99178 "ごうせい", "こうそく", "こうたい", "こうちゃ", "こうつう", "こうてい", "こうどう", "こうない", "こうはい", "ごうほう",
99179 "ごうまん", "こうもく", "こうりつ", "こえる", "こおり", "ごかい", "ごがつ", "ごかん", "こくご", "こくさい",
99180 "こくとう", "こくない", "こくはく", "こぐま", "こけい", "こける", "ここのか", "こころ", "こさめ", "こしつ",
99181 "こすう", "こせい", "こせき", "こぜん", "こそだて", "こたい", "こたえる", "こたつ", "こちょう", "こっか",
99182 "こつこつ", "こつばん", "こつぶ", "こてい", "こてん", "ことがら", "ことし", "ことば", "ことり", "こなごな",
99183 "こねこね", "このまま", "このみ", "このよ", "ごはん", "こひつじ", "こふう", "こふん", "こぼれる", "ごまあぶら",
99184 "こまかい", "ごますり", "こまつな", "こまる", "こむぎこ", "こもじ", "こもち", "こもの", "こもん", "こやく",
99185 "こやま", "こゆう", "こゆび", "こよい", "こよう", "こりる", "これくしょん", "ころっけ", "こわもて", "こわれる",
99186 "こんいん", "こんかい", "こんき", "こんしゅう", "こんすい", "こんだて", "こんとん", "こんなん", "こんびに", "こんぽん",
99187 "こんまけ", "こんや", "こんれい", "こんわく", "ざいえき", "さいかい", "さいきん", "ざいげん", "ざいこ", "さいしょ",
99188 "さいせい", "ざいたく", "ざいちゅう", "さいてき", "ざいりょう", "さうな", "さかいし", "さがす", "さかな", "さかみち",
99189 "さがる", "さぎょう", "さくし", "さくひん", "さくら", "さこく", "さこつ", "さずかる", "ざせき", "さたん",
99190 "さつえい", "ざつおん", "ざっか", "ざつがく", "さっきょく", "ざっし", "さつじん", "ざっそう", "さつたば", "さつまいも",
99191 "さてい", "さといも", "さとう", "さとおや", "さとし", "さとる", "さのう", "さばく", "さびしい", "さべつ",
99192 "さほう", "さほど", "さます", "さみしい", "さみだれ", "さむけ", "さめる", "さやえんどう", "さゆう", "さよう",
99193 "さよく", "さらだ", "ざるそば", "さわやか", "さわる", "さんいん", "さんか", "さんきゃく", "さんこう", "さんさい",
99194 "ざんしょ", "さんすう", "さんせい", "さんそ", "さんち", "さんま", "さんみ", "さんらん", "しあい", "しあげ",
99195 "しあさって", "しあわせ", "しいく", "しいん", "しうち", "しえい", "しおけ", "しかい", "しかく", "じかん",
99196 "しごと", "しすう", "じだい", "したうけ", "したぎ", "したて", "したみ", "しちょう", "しちりん", "しっかり",
99197 "しつじ", "しつもん", "してい", "してき", "してつ", "じてん", "じどう", "しなぎれ", "しなもの", "しなん",
99198 "しねま", "しねん", "しのぐ", "しのぶ", "しはい", "しばかり", "しはつ", "しはらい", "しはん", "しひょう",
99199 "しふく", "じぶん", "しへい", "しほう", "しほん", "しまう", "しまる", "しみん", "しむける", "じむしょ",
99200 "しめい", "しめる", "しもん", "しゃいん", "しゃうん", "しゃおん", "じゃがいも", "しやくしょ", "しゃくほう", "しゃけん",
99201 "しゃこ", "しゃざい", "しゃしん", "しゃせん", "しゃそう", "しゃたい", "しゃちょう", "しゃっきん", "じゃま", "しゃりん",
99202 "しゃれい", "じゆう", "じゅうしょ", "しゅくはく", "じゅしん", "しゅっせき", "しゅみ", "しゅらば", "じゅんばん", "しょうかい",
99203 "しょくたく", "しょっけん", "しょどう", "しょもつ", "しらせる", "しらべる", "しんか", "しんこう", "じんじゃ", "しんせいじ",
99204 "しんちく", "しんりん", "すあげ", "すあし", "すあな", "ずあん", "すいえい", "すいか", "すいとう", "ずいぶん",
99205 "すいようび", "すうがく", "すうじつ", "すうせん", "すおどり", "すきま", "すくう", "すくない", "すける", "すごい",
99206 "すこし", "ずさん", "すずしい", "すすむ", "すすめる", "すっかり", "ずっしり", "ずっと", "すてき", "すてる",
99207 "すねる", "すのこ", "すはだ", "すばらしい", "ずひょう", "ずぶぬれ", "すぶり", "すふれ", "すべて", "すべる",
99208 "ずほう", "すぼん", "すまい", "すめし", "すもう", "すやき", "すらすら", "するめ", "すれちがう", "すろっと",
99209 "すわる", "すんぜん", "すんぽう", "せあぶら", "せいかつ", "せいげん", "せいじ", "せいよう", "せおう", "せかいかん",
99210 "せきにん", "せきむ", "せきゆ", "せきらんうん", "せけん", "せこう", "せすじ", "せたい", "せたけ", "せっかく",
99211 "せっきゃく", "ぜっく", "せっけん", "せっこつ", "せっさたくま", "せつぞく", "せつだん", "せつでん", "せっぱん", "せつび",
99212 "せつぶん", "せつめい", "せつりつ", "せなか", "せのび", "せはば", "せびろ", "せぼね", "せまい", "せまる",
99213 "せめる", "せもたれ", "せりふ", "ぜんあく", "せんい", "せんえい", "せんか", "せんきょ", "せんく", "せんげん",
99214 "ぜんご", "せんさい", "せんしゅ", "せんすい", "せんせい", "せんぞ", "せんたく", "せんちょう", "せんてい", "せんとう",
99215 "せんぬき", "せんねん", "せんぱい", "ぜんぶ", "ぜんぽう", "せんむ", "せんめんじょ", "せんもん", "せんやく", "せんゆう",
99216 "せんよう", "ぜんら", "ぜんりゃく", "せんれい", "せんろ", "そあく", "そいとげる", "そいね", "そうがんきょう", "そうき",
99217 "そうご", "そうしん", "そうだん", "そうなん", "そうび", "そうめん", "そうり", "そえもの", "そえん", "そがい",
99218 "そげき", "そこう", "そこそこ", "そざい", "そしな", "そせい", "そせん", "そそぐ", "そだてる", "そつう",
99219 "そつえん", "そっかん", "そつぎょう", "そっけつ", "そっこう", "そっせん", "そっと", "そとがわ", "そとづら", "そなえる",
99220 "そなた", "そふぼ", "そぼく", "そぼろ", "そまつ", "そまる", "そむく", "そむりえ", "そめる", "そもそも",
99221 "そよかぜ", "そらまめ", "そろう", "そんかい", "そんけい", "そんざい", "そんしつ", "そんぞく", "そんちょう", "ぞんび",
99222 "ぞんぶん", "そんみん", "たあい", "たいいん", "たいうん", "たいえき", "たいおう", "だいがく", "たいき", "たいぐう",
99223 "たいけん", "たいこ", "たいざい", "だいじょうぶ", "だいすき", "たいせつ", "たいそう", "だいたい", "たいちょう", "たいてい",
99224 "だいどころ", "たいない", "たいねつ", "たいのう", "たいはん", "だいひょう", "たいふう", "たいへん", "たいほ", "たいまつばな",
99225 "たいみんぐ", "たいむ", "たいめん", "たいやき", "たいよう", "たいら", "たいりょく", "たいる", "たいわん", "たうえ",
99226 "たえる", "たおす", "たおる", "たおれる", "たかい", "たかね", "たきび", "たくさん", "たこく", "たこやき",
99227 "たさい", "たしざん", "だじゃれ", "たすける", "たずさわる", "たそがれ", "たたかう", "たたく", "ただしい", "たたみ",
99228 "たちばな", "だっかい", "だっきゃく", "だっこ", "だっしゅつ", "だったい", "たてる", "たとえる", "たなばた", "たにん",
99229 "たぬき", "たのしみ", "たはつ", "たぶん", "たべる", "たぼう", "たまご", "たまる", "だむる", "ためいき",
99230 "ためす", "ためる", "たもつ", "たやすい", "たよる", "たらす", "たりきほんがん", "たりょう", "たりる", "たると",
99231 "たれる", "たれんと", "たろっと", "たわむれる", "だんあつ", "たんい", "たんおん", "たんか", "たんき", "たんけん",
99232 "たんご", "たんさん", "たんじょうび", "だんせい", "たんそく", "たんたい", "だんち", "たんてい", "たんとう", "だんな",
99233 "たんにん", "だんねつ", "たんのう", "たんぴん", "だんぼう", "たんまつ", "たんめい", "だんれつ", "だんろ", "だんわ",
99234 "ちあい", "ちあん", "ちいき", "ちいさい", "ちえん", "ちかい", "ちから", "ちきゅう", "ちきん", "ちけいず",
99235 "ちけん", "ちこく", "ちさい", "ちしき", "ちしりょう", "ちせい", "ちそう", "ちたい", "ちたん", "ちちおや",
99236 "ちつじょ", "ちてき", "ちてん", "ちぬき", "ちぬり", "ちのう", "ちひょう", "ちへいせん", "ちほう", "ちまた",
99237 "ちみつ", "ちみどろ", "ちめいど", "ちゃんこなべ", "ちゅうい", "ちゆりょく", "ちょうし", "ちょさくけん", "ちらし", "ちらみ",
99238 "ちりがみ", "ちりょう", "ちるど", "ちわわ", "ちんたい", "ちんもく", "ついか", "ついたち", "つうか", "つうじょう",
99239 "つうはん", "つうわ", "つかう", "つかれる", "つくね", "つくる", "つけね", "つける", "つごう", "つたえる",
99240 "つづく", "つつじ", "つつむ", "つとめる", "つながる", "つなみ", "つねづね", "つのる", "つぶす", "つまらない",
99241 "つまる", "つみき", "つめたい", "つもり", "つもる", "つよい", "つるぼ", "つるみく", "つわもの", "つわり",
99242 "てあし", "てあて", "てあみ", "ていおん", "ていか", "ていき", "ていけい", "ていこく", "ていさつ", "ていし",
99243 "ていせい", "ていたい", "ていど", "ていねい", "ていひょう", "ていへん", "ていぼう", "てうち", "ておくれ", "てきとう",
99244 "てくび", "でこぼこ", "てさぎょう", "てさげ", "てすり", "てそう", "てちがい", "てちょう", "てつがく", "てつづき",
99245 "でっぱ", "てつぼう", "てつや", "でぬかえ", "てぬき", "てぬぐい", "てのひら", "てはい", "てぶくろ", "てふだ",
99246 "てほどき", "てほん", "てまえ", "てまきずし", "てみじか", "てみやげ", "てらす", "てれび", "てわけ", "てわたし",
99247 "でんあつ", "てんいん", "てんかい", "てんき", "てんぐ", "てんけん", "てんごく", "てんさい", "てんし", "てんすう",
99248 "でんち", "てんてき", "てんとう", "てんない", "てんぷら", "てんぼうだい", "てんめつ", "てんらんかい", "でんりょく", "でんわ",
99249 "どあい", "といれ", "どうかん", "とうきゅう", "どうぐ", "とうし", "とうむぎ", "とおい", "とおか", "とおく",
99250 "とおす", "とおる", "とかい", "とかす", "ときおり", "ときどき", "とくい", "とくしゅう", "とくてん", "とくに",
99251 "とくべつ", "とけい", "とける", "とこや", "とさか", "としょかん", "とそう", "とたん", "とちゅう", "とっきゅう",
99252 "とっくん", "とつぜん", "とつにゅう", "とどける", "ととのえる", "とない", "となえる", "となり", "とのさま", "とばす",
99253 "どぶがわ", "とほう", "とまる", "とめる", "ともだち", "ともる", "どようび", "とらえる", "とんかつ", "どんぶり",
99254 "ないかく", "ないこう", "ないしょ", "ないす", "ないせん", "ないそう", "なおす", "ながい", "なくす", "なげる",
99255 "なこうど", "なさけ", "なたでここ", "なっとう", "なつやすみ", "ななおし", "なにごと", "なにもの", "なにわ", "なのか",
99256 "なふだ", "なまいき", "なまえ", "なまみ", "なみだ", "なめらか", "なめる", "なやむ", "ならう", "ならび",
99257 "ならぶ", "なれる", "なわとび", "なわばり", "にあう", "にいがた", "にうけ", "におい", "にかい", "にがて",
99258 "にきび", "にくしみ", "にくまん", "にげる", "にさんかたんそ", "にしき", "にせもの", "にちじょう", "にちようび", "にっか",
99259 "にっき", "にっけい", "にっこう", "にっさん", "にっしょく", "にっすう", "にっせき", "にってい", "になう", "にほん",
99260 "にまめ", "にもつ", "にやり", "にゅういん", "にりんしゃ", "にわとり", "にんい", "にんか", "にんき", "にんげん",
99261 "にんしき", "にんずう", "にんそう", "にんたい", "にんち", "にんてい", "にんにく", "にんぷ", "にんまり", "にんむ",
99262 "にんめい", "にんよう", "ぬいくぎ", "ぬかす", "ぬぐいとる", "ぬぐう", "ぬくもり", "ぬすむ", "ぬまえび", "ぬめり",
99263 "ぬらす", "ぬんちゃく", "ねあげ", "ねいき", "ねいる", "ねいろ", "ねぐせ", "ねくたい", "ねくら", "ねこぜ",
99264 "ねこむ", "ねさげ", "ねすごす", "ねそべる", "ねだん", "ねつい", "ねっしん", "ねつぞう", "ねったいぎょ", "ねぶそく",
99265 "ねふだ", "ねぼう", "ねほりはほり", "ねまき", "ねまわし", "ねみみ", "ねむい", "ねむたい", "ねもと", "ねらう",
99266 "ねわざ", "ねんいり", "ねんおし", "ねんかん", "ねんきん", "ねんぐ", "ねんざ", "ねんし", "ねんちゃく", "ねんど",
99267 "ねんぴ", "ねんぶつ", "ねんまつ", "ねんりょう", "ねんれい", "のいず", "のおづま", "のがす", "のきなみ", "のこぎり",
99268 "のこす", "のこる", "のせる", "のぞく", "のぞむ", "のたまう", "のちほど", "のっく", "のばす", "のはら",
99269 "のべる", "のぼる", "のみもの", "のやま", "のらいぬ", "のらねこ", "のりもの", "のりゆき", "のれん", "のんき",
99270 "ばあい", "はあく", "ばあさん", "ばいか", "ばいく", "はいけん", "はいご", "はいしん", "はいすい", "はいせん",
99271 "はいそう", "はいち", "ばいばい", "はいれつ", "はえる", "はおる", "はかい", "ばかり", "はかる", "はくしゅ",
99272 "はけん", "はこぶ", "はさみ", "はさん", "はしご", "ばしょ", "はしる", "はせる", "ぱそこん", "はそん",
99273 "はたん", "はちみつ", "はつおん", "はっかく", "はづき", "はっきり", "はっくつ", "はっけん", "はっこう", "はっさん",
99274 "はっしん", "はったつ", "はっちゅう", "はってん", "はっぴょう", "はっぽう", "はなす", "はなび", "はにかむ", "はぶらし",
99275 "はみがき", "はむかう", "はめつ", "はやい", "はやし", "はらう", "はろうぃん", "はわい", "はんい", "はんえい",
99276 "はんおん", "はんかく", "はんきょう", "ばんぐみ", "はんこ", "はんしゃ", "はんすう", "はんだん", "ぱんち", "ぱんつ",
99277 "はんてい", "はんとし", "はんのう", "はんぱ", "はんぶん", "はんぺん", "はんぼうき", "はんめい", "はんらん", "はんろん",
99278 "ひいき", "ひうん", "ひえる", "ひかく", "ひかり", "ひかる", "ひかん", "ひくい", "ひけつ", "ひこうき",
99279 "ひこく", "ひさい", "ひさしぶり", "ひさん", "びじゅつかん", "ひしょ", "ひそか", "ひそむ", "ひたむき", "ひだり",
99280 "ひたる", "ひつぎ", "ひっこし", "ひっし", "ひつじゅひん", "ひっす", "ひつぜん", "ぴったり", "ぴっちり", "ひつよう",
99281 "ひてい", "ひとごみ", "ひなまつり", "ひなん", "ひねる", "ひはん", "ひびく", "ひひょう", "ひほう", "ひまわり",
99282 "ひまん", "ひみつ", "ひめい", "ひめじし", "ひやけ", "ひやす", "ひよう", "びょうき", "ひらがな", "ひらく",
99283 "ひりつ", "ひりょう", "ひるま", "ひるやすみ", "ひれい", "ひろい", "ひろう", "ひろき", "ひろゆき", "ひんかく",
99284 "ひんけつ", "ひんこん", "ひんしゅ", "ひんそう", "ぴんち", "ひんぱん", "びんぼう", "ふあん", "ふいうち", "ふうけい",
99285 "ふうせん", "ぷうたろう", "ふうとう", "ふうふ", "ふえる", "ふおん", "ふかい", "ふきん", "ふくざつ", "ふくぶくろ",
99286 "ふこう", "ふさい", "ふしぎ", "ふじみ", "ふすま", "ふせい", "ふせぐ", "ふそく", "ぶたにく", "ふたん",
99287 "ふちょう", "ふつう", "ふつか", "ふっかつ", "ふっき", "ふっこく", "ぶどう", "ふとる", "ふとん", "ふのう",
99288 "ふはい", "ふひょう", "ふへん", "ふまん", "ふみん", "ふめつ", "ふめん", "ふよう", "ふりこ", "ふりる",
99289 "ふるい", "ふんいき", "ぶんがく", "ぶんぐ", "ふんしつ", "ぶんせき", "ふんそう", "ぶんぽう", "へいあん", "へいおん",
99290 "へいがい", "へいき", "へいげん", "へいこう", "へいさ", "へいしゃ", "へいせつ", "へいそ", "へいたく", "へいてん",
99291 "へいねつ", "へいわ", "へきが", "へこむ", "べにいろ", "べにしょうが", "へらす", "へんかん", "べんきょう", "べんごし",
99292 "へんさい", "へんたい", "べんり", "ほあん", "ほいく", "ぼうぎょ", "ほうこく", "ほうそう", "ほうほう", "ほうもん",
99293 "ほうりつ", "ほえる", "ほおん", "ほかん", "ほきょう", "ぼきん", "ほくろ", "ほけつ", "ほけん", "ほこう",
99294 "ほこる", "ほしい", "ほしつ", "ほしゅ", "ほしょう", "ほせい", "ほそい", "ほそく", "ほたて", "ほたる",
99295 "ぽちぶくろ", "ほっきょく", "ほっさ", "ほったん", "ほとんど", "ほめる", "ほんい", "ほんき", "ほんけ", "ほんしつ",
99296 "ほんやく", "まいにち", "まかい", "まかせる", "まがる", "まける", "まこと", "まさつ", "まじめ", "ますく",
99297 "まぜる", "まつり", "まとめ", "まなぶ", "まぬけ", "まねく", "まほう", "まもる", "まゆげ", "まよう",
99298 "まろやか", "まわす", "まわり", "まわる", "まんが", "まんきつ", "まんぞく", "まんなか", "みいら", "みうち",
99299 "みえる", "みがく", "みかた", "みかん", "みけん", "みこん", "みじかい", "みすい", "みすえる", "みせる",
99300 "みっか", "みつかる", "みつける", "みてい", "みとめる", "みなと", "みなみかさい", "みねらる", "みのう", "みのがす",
99301 "みほん", "みもと", "みやげ", "みらい", "みりょく", "みわく", "みんか", "みんぞく", "むいか", "むえき",
99302 "むえん", "むかい", "むかう", "むかえ", "むかし", "むぎちゃ", "むける", "むげん", "むさぼる", "むしあつい",
99303 "むしば", "むじゅん", "むしろ", "むすう", "むすこ", "むすぶ", "むすめ", "むせる", "むせん", "むちゅう",
99304 "むなしい", "むのう", "むやみ", "むよう", "むらさき", "むりょう", "むろん", "めいあん", "めいうん", "めいえん",
99305 "めいかく", "めいきょく", "めいさい", "めいし", "めいそう", "めいぶつ", "めいれい", "めいわく", "めぐまれる", "めざす",
99306 "めした", "めずらしい", "めだつ", "めまい", "めやす", "めんきょ", "めんせき", "めんどう", "もうしあげる", "もうどうけん",
99307 "もえる", "もくし", "もくてき", "もくようび", "もちろん", "もどる", "もらう", "もんく", "もんだい", "やおや",
99308 "やける", "やさい", "やさしい", "やすい", "やすたろう", "やすみ", "やせる", "やそう", "やたい", "やちん",
99309 "やっと", "やっぱり", "やぶる", "やめる", "ややこしい", "やよい", "やわらかい", "ゆうき", "ゆうびんきょく", "ゆうべ",
99310 "ゆうめい", "ゆけつ", "ゆしゅつ", "ゆせん", "ゆそう", "ゆたか", "ゆちゃく", "ゆでる", "ゆにゅう", "ゆびわ",
99311 "ゆらい", "ゆれる", "ようい", "ようか", "ようきゅう", "ようじ", "ようす", "ようちえん", "よかぜ", "よかん",
99312 "よきん", "よくせい", "よくぼう", "よけい", "よごれる", "よさん", "よしゅう", "よそう", "よそく", "よっか",
99313 "よてい", "よどがわく", "よねつ", "よやく", "よゆう", "よろこぶ", "よろしい", "らいう", "らくがき", "らくご",
99314 "らくさつ", "らくだ", "らしんばん", "らせん", "らぞく", "らたい", "らっか", "られつ", "りえき", "りかい",
99315 "りきさく", "りきせつ", "りくぐん", "りくつ", "りけん", "りこう", "りせい", "りそう", "りそく", "りてん",
99316 "りねん", "りゆう", "りゅうがく", "りよう", "りょうり", "りょかん", "りょくちゃ", "りょこう", "りりく", "りれき",
99317 "りろん", "りんご", "るいけい", "るいさい", "るいじ", "るいせき", "るすばん", "るりがわら", "れいかん", "れいぎ",
99318 "れいせい", "れいぞうこ", "れいとう", "れいぼう", "れきし", "れきだい", "れんあい", "れんけい", "れんこん", "れんさい",
99319 "れんしゅう", "れんぞく", "れんらく", "ろうか", "ろうご", "ろうじん", "ろうそく", "ろくが", "ろこつ", "ろじうら",
99320 "ろしゅつ", "ろせん", "ろてん", "ろめん", "ろれつ", "ろんぎ", "ろんぱ", "ろんぶん", "ろんり", "わかす",
99321 "わかめ", "わかやま", "わかれる", "わしつ", "わじまし", "わすれもの", "わらう", "われる"]
99322 </script>
99323 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
99324 WORDLISTS["spanish"] = [
99325 "ábaco", "abdomen", "abeja", "abierto", "abogado", "abono", "aborto", "abrazo", "abrir", "abuelo",
99326 "abuso", "acabar", "academia", "acceso", "acción", "aceite", "acelga", "acento", "aceptar", "ácido",
99327 "aclarar", "acné", "acoger", "acoso", "activo", "acto", "actriz", "actuar", "acudir", "acuerdo",
99328 "acusar", "adicto", "admitir", "adoptar", "adorno", "aduana", "adulto", "aéreo", "afectar", "afición",
99329 "afinar", "afirmar", "ágil", "agitar", "agonía", "agosto", "agotar", "agregar", "agrio", "agua",
99330 "agudo", "águila", "aguja", "ahogo", "ahorro", "aire", "aislar", "ajedrez", "ajeno", "ajuste",
99331 "alacrán", "alambre", "alarma", "alba", "álbum", "alcalde", "aldea", "alegre", "alejar", "alerta",
99332 "aleta", "alfiler", "alga", "algodón", "aliado", "aliento", "alivio", "alma", "almeja", "almíbar",
99333 "altar", "alteza", "altivo", "alto", "altura", "alumno", "alzar", "amable", "amante", "amapola",
99334 "amargo", "amasar", "ámbar", "ámbito", "ameno", "amigo", "amistad", "amor", "amparo", "amplio",
99335 "ancho", "anciano", "ancla", "andar", "andén", "anemia", "ángulo", "anillo", "ánimo", "anís",
99336 "anotar", "antena", "antiguo", "antojo", "anual", "anular", "anuncio", "añadir", "añejo", "año",
99337 "apagar", "aparato", "apetito", "apio", "aplicar", "apodo", "aporte", "apoyo", "aprender", "aprobar",
99338 "apuesta", "apuro", "arado", "araña", "arar", "árbitro", "árbol", "arbusto", "archivo", "arco",
99339 "arder", "ardilla", "arduo", "área", "árido", "aries", "armonía", "arnés", "aroma", "arpa",
99340 "arpón", "arreglo", "arroz", "arruga", "arte", "artista", "asa", "asado", "asalto", "ascenso",
99341 "asegurar", "aseo", "asesor", "asiento", "asilo", "asistir", "asno", "asombro", "áspero", "astilla",
99342 "astro", "astuto", "asumir", "asunto", "atajo", "ataque", "atar", "atento", "ateo", "ático",
99343 "atleta", "átomo", "atraer", "atroz", "atún", "audaz", "audio", "auge", "aula", "aumento",
99344 "ausente", "autor", "aval", "avance", "avaro", "ave", "avellana", "avena", "avestruz", "avión",
99345 "aviso", "ayer", "ayuda", "ayuno", "azafrán", "azar", "azote", "azúcar", "azufre", "azul",
99346 "baba", "babor", "bache", "bahía", "baile", "bajar", "balanza", "balcón", "balde", "bambú",
99347 "banco", "banda", "baño", "barba", "barco", "barniz", "barro", "báscula", "bastón", "basura",
99348 "batalla", "batería", "batir", "batuta", "baúl", "bazar", "bebé", "bebida", "bello", "besar",
99349 "beso", "bestia", "bicho", "bien", "bingo", "blanco", "bloque", "blusa", "boa", "bobina",
99350 "bobo", "boca", "bocina", "boda", "bodega", "boina", "bola", "bolero", "bolsa", "bomba",
99351 "bondad", "bonito", "bono", "bonsái", "borde", "borrar", "bosque", "bote", "botín", "bóveda",
99352 "bozal", "bravo", "brazo", "brecha", "breve", "brillo", "brinco", "brisa", "broca", "broma",
99353 "bronce", "brote", "bruja", "brusco", "bruto", "buceo", "bucle", "bueno", "buey", "bufanda",
99354 "bufón", "búho", "buitre", "bulto", "burbuja", "burla", "burro", "buscar", "butaca", "buzón",
99355 "caballo", "cabeza", "cabina", "cabra", "cacao", "cadáver", "cadena", "caer", "café", "caída",
99356 "caimán", "caja", "cajón", "cal", "calamar", "calcio", "caldo", "calidad", "calle", "calma",
99357 "calor", "calvo", "cama", "cambio", "camello", "camino", "campo", "cáncer", "candil", "canela",
99358 "canguro", "canica", "canto", "caña", "cañón", "caoba", "caos", "capaz", "capitán", "capote",
99359 "captar", "capucha", "cara", "carbón", "cárcel", "careta", "carga", "cariño", "carne", "carpeta",
99360 "carro", "carta", "casa", "casco", "casero", "caspa", "castor", "catorce", "catre", "caudal",
99361 "causa", "cazo", "cebolla", "ceder", "cedro", "celda", "célebre", "celoso", "célula", "cemento",
99362 "ceniza", "centro", "cerca", "cerdo", "cereza", "cero", "cerrar", "certeza", "césped", "cetro",
99363 "chacal", "chaleco", "champú", "chancla", "chapa", "charla", "chico", "chiste", "chivo", "choque",
99364 "choza", "chuleta", "chupar", "ciclón", "ciego", "cielo", "cien", "cierto", "cifra", "cigarro",
99365 "cima", "cinco", "cine", "cinta", "ciprés", "circo", "ciruela", "cisne", "cita", "ciudad",
99366 "clamor", "clan", "claro", "clase", "clave", "cliente", "clima", "clínica", "cobre", "cocción",
99367 "cochino", "cocina", "coco", "código", "codo", "cofre", "coger", "cohete", "cojín", "cojo",
99368 "cola", "colcha", "colegio", "colgar", "colina", "collar", "colmo", "columna", "combate", "comer",
99369 "comida", "cómodo", "compra", "conde", "conejo", "conga", "conocer", "consejo", "contar", "copa",
99370 "copia", "corazón", "corbata", "corcho", "cordón", "corona", "correr", "coser", "cosmos", "costa",
99371 "cráneo", "cráter", "crear", "crecer", "creído", "crema", "cría", "crimen", "cripta", "crisis",
99372 "cromo", "crónica", "croqueta", "crudo", "cruz", "cuadro", "cuarto", "cuatro", "cubo", "cubrir",
99373 "cuchara", "cuello", "cuento", "cuerda", "cuesta", "cueva", "cuidar", "culebra", "culpa", "culto",
99374 "cumbre", "cumplir", "cuna", "cuneta", "cuota", "cupón", "cúpula", "curar", "curioso", "curso",
99375 "curva", "cutis", "dama", "danza", "dar", "dardo", "dátil", "deber", "débil", "década",
99376 "decir", "dedo", "defensa", "definir", "dejar", "delfín", "delgado", "delito", "demora", "denso",
99377 "dental", "deporte", "derecho", "derrota", "desayuno", "deseo", "desfile", "desnudo", "destino", "desvío",
99378 "detalle", "detener", "deuda", "día", "diablo", "diadema", "diamante", "diana", "diario", "dibujo",
99379 "dictar", "diente", "dieta", "diez", "difícil", "digno", "dilema", "diluir", "dinero", "directo",
99380 "dirigir", "disco", "diseño", "disfraz", "diva", "divino", "doble", "doce", "dolor", "domingo",
99381 "don", "donar", "dorado", "dormir", "dorso", "dos", "dosis", "dragón", "droga", "ducha",
99382 "duda", "duelo", "dueño", "dulce", "dúo", "duque", "durar", "dureza", "duro", "ébano",
99383 "ebrio", "echar", "eco", "ecuador", "edad", "edición", "edificio", "editor", "educar", "efecto",
99384 "eficaz", "eje", "ejemplo", "elefante", "elegir", "elemento", "elevar", "elipse", "élite", "elixir",
99385 "elogio", "eludir", "embudo", "emitir", "emoción", "empate", "empeño", "empleo", "empresa", "enano",
99386 "encargo", "enchufe", "encía", "enemigo", "enero", "enfado", "enfermo", "engaño", "enigma", "enlace",
99387 "enorme", "enredo", "ensayo", "enseñar", "entero", "entrar", "envase", "envío", "época", "equipo",
99388 "erizo", "escala", "escena", "escolar", "escribir", "escudo", "esencia", "esfera", "esfuerzo", "espada",
99389 "espejo", "espía", "esposa", "espuma", "esquí", "estar", "este", "estilo", "estufa", "etapa",
99390 "eterno", "ética", "etnia", "evadir", "evaluar", "evento", "evitar", "exacto", "examen", "exceso",
99391 "excusa", "exento", "exigir", "exilio", "existir", "éxito", "experto", "explicar", "exponer", "extremo",
99392 "fábrica", "fábula", "fachada", "fácil", "factor", "faena", "faja", "falda", "fallo", "falso",
99393 "faltar", "fama", "familia", "famoso", "faraón", "farmacia", "farol", "farsa", "fase", "fatiga",
99394 "fauna", "favor", "fax", "febrero", "fecha", "feliz", "feo", "feria", "feroz", "fértil",
99395 "fervor", "festín", "fiable", "fianza", "fiar", "fibra", "ficción", "ficha", "fideo", "fiebre",
99396 "fiel", "fiera", "fiesta", "figura", "fijar", "fijo", "fila", "filete", "filial", "filtro",
99397 "fin", "finca", "fingir", "finito", "firma", "flaco", "flauta", "flecha", "flor", "flota",
99398 "fluir", "flujo", "flúor", "fobia", "foca", "fogata", "fogón", "folio", "folleto", "fondo",
99399 "forma", "forro", "fortuna", "forzar", "fosa", "foto", "fracaso", "frágil", "franja", "frase",
99400 "fraude", "freír", "freno", "fresa", "frío", "frito", "fruta", "fuego", "fuente", "fuerza",
99401 "fuga", "fumar", "función", "funda", "furgón", "furia", "fusil", "fútbol", "futuro", "gacela",
99402 "gafas", "gaita", "gajo", "gala", "galería", "gallo", "gamba", "ganar", "gancho", "ganga",
99403 "ganso", "garaje", "garza", "gasolina", "gastar", "gato", "gavilán", "gemelo", "gemir", "gen",
99404 "género", "genio", "gente", "geranio", "gerente", "germen", "gesto", "gigante", "gimnasio", "girar",
99405 "giro", "glaciar", "globo", "gloria", "gol", "golfo", "goloso", "golpe", "goma", "gordo",
99406 "gorila", "gorra", "gota", "goteo", "gozar", "grada", "gráfico", "grano", "grasa", "gratis",
99407 "grave", "grieta", "grillo", "gripe", "gris", "grito", "grosor", "grúa", "grueso", "grumo",
99408 "grupo", "guante", "guapo", "guardia", "guerra", "guía", "guiño", "guion", "guiso", "guitarra",
99409 "gusano", "gustar", "haber", "hábil", "hablar", "hacer", "hacha", "hada", "hallar", "hamaca",
99410 "harina", "haz", "hazaña", "hebilla", "hebra", "hecho", "helado", "helio", "hembra", "herir",
99411 "hermano", "héroe", "hervir", "hielo", "hierro", "hígado", "higiene", "hijo", "himno", "historia",
99412 "hocico", "hogar", "hoguera", "hoja", "hombre", "hongo", "honor", "honra", "hora", "hormiga",
99413 "horno", "hostil", "hoyo", "hueco", "huelga", "huerta", "hueso", "huevo", "huida", "huir",
99414 "humano", "húmedo", "humilde", "humo", "hundir", "huracán", "hurto", "icono", "ideal", "idioma",
99415 "ídolo", "iglesia", "iglú", "igual", "ilegal", "ilusión", "imagen", "imán", "imitar", "impar",
99416 "imperio", "imponer", "impulso", "incapaz", "índice", "inerte", "infiel", "informe", "ingenio", "inicio",
99417 "inmenso", "inmune", "innato", "insecto", "instante", "interés", "íntimo", "intuir", "inútil", "invierno",
99418 "ira", "iris", "ironía", "isla", "islote", "jabalí", "jabón", "jamón", "jarabe", "jardín",
99419 "jarra", "jaula", "jazmín", "jefe", "jeringa", "jinete", "jornada", "joroba", "joven", "joya",
99420 "juerga", "jueves", "juez", "jugador", "jugo", "juguete", "juicio", "junco", "jungla", "junio",
99421 "juntar", "júpiter", "jurar", "justo", "juvenil", "juzgar", "kilo", "koala", "labio", "lacio",
99422 "lacra", "lado", "ladrón", "lagarto", "lágrima", "laguna", "laico", "lamer", "lámina", "lámpara",
99423 "lana", "lancha", "langosta", "lanza", "lápiz", "largo", "larva", "lástima", "lata", "látex",
99424 "latir", "laurel", "lavar", "lazo", "leal", "lección", "leche", "lector", "leer", "legión",
99425 "legumbre", "lejano", "lengua", "lento", "leña", "león", "leopardo", "lesión", "letal", "letra",
99426 "leve", "leyenda", "libertad", "libro", "licor", "líder", "lidiar", "lienzo", "liga", "ligero",
99427 "lima", "límite", "limón", "limpio", "lince", "lindo", "línea", "lingote", "lino", "linterna",
99428 "líquido", "liso", "lista", "litera", "litio", "litro", "llaga", "llama", "llanto", "llave",
99429 "llegar", "llenar", "llevar", "llorar", "llover", "lluvia", "lobo", "loción", "loco", "locura",
99430 "lógica", "logro", "lombriz", "lomo", "lonja", "lote", "lucha", "lucir", "lugar", "lujo",
99431 "luna", "lunes", "lupa", "lustro", "luto", "luz", "maceta", "macho", "madera", "madre",
99432 "maduro", "maestro", "mafia", "magia", "mago", "maíz", "maldad", "maleta", "malla", "malo",
99433 "mamá", "mambo", "mamut", "manco", "mando", "manejar", "manga", "maniquí", "manjar", "mano",
99434 "manso", "manta", "mañana", "mapa", "máquina", "mar", "marco", "marea", "marfil", "margen",
99435 "marido", "mármol", "marrón", "martes", "marzo", "masa", "máscara", "masivo", "matar", "materia",
99436 "matiz", "matriz", "máximo", "mayor", "mazorca", "mecha", "medalla", "medio", "médula", "mejilla",
99437 "mejor", "melena", "melón", "memoria", "menor", "mensaje", "mente", "menú", "mercado", "merengue",
99438 "mérito", "mes", "mesón", "meta", "meter", "método", "metro", "mezcla", "miedo", "miel",
99439 "miembro", "miga", "mil", "milagro", "militar", "millón", "mimo", "mina", "minero", "mínimo",
99440 "minuto", "miope", "mirar", "misa", "miseria", "misil", "mismo", "mitad", "mito", "mochila",
99441 "moción", "moda", "modelo", "moho", "mojar", "molde", "moler", "molino", "momento", "momia",
99442 "monarca", "moneda", "monja", "monto", "moño", "morada", "morder", "moreno", "morir", "morro",
99443 "morsa", "mortal", "mosca", "mostrar", "motivo", "mover", "móvil", "mozo", "mucho", "mudar",
99444 "mueble", "muela", "muerte", "muestra", "mugre", "mujer", "mula", "muleta", "multa", "mundo",
99445 "muñeca", "mural", "muro", "músculo", "museo", "musgo", "música", "muslo", "nácar", "nación",
99446 "nadar", "naipe", "naranja", "nariz", "narrar", "nasal", "natal", "nativo", "natural", "náusea",
99447 "naval", "nave", "navidad", "necio", "néctar", "negar", "negocio", "negro", "neón", "nervio",
99448 "neto", "neutro", "nevar", "nevera", "nicho", "nido", "niebla", "nieto", "niñez", "niño",
99449 "nítido", "nivel", "nobleza", "noche", "nómina", "noria", "norma", "norte", "nota", "noticia",
99450 "novato", "novela", "novio", "nube", "nuca", "núcleo", "nudillo", "nudo", "nuera", "nueve",
99451 "nuez", "nulo", "número", "nutria", "oasis", "obeso", "obispo", "objeto", "obra", "obrero",
99452 "observar", "obtener", "obvio", "oca", "ocaso", "océano", "ochenta", "ocho", "ocio", "ocre",
99453 "octavo", "octubre", "oculto", "ocupar", "ocurrir", "odiar", "odio", "odisea", "oeste", "ofensa",
99454 "oferta", "oficio", "ofrecer", "ogro", "oído", "oír", "ojo", "ola", "oleada", "olfato",
99455 "olivo", "olla", "olmo", "olor", "olvido", "ombligo", "onda", "onza", "opaco", "opción",
99456 "ópera", "opinar", "oponer", "optar", "óptica", "opuesto", "oración", "orador", "oral", "órbita",
99457 "orca", "orden", "oreja", "órgano", "orgía", "orgullo", "oriente", "origen", "orilla", "oro",
99458 "orquesta", "oruga", "osadía", "oscuro", "osezno", "oso", "ostra", "otoño", "otro", "oveja",
99459 "óvulo", "óxido", "oxígeno", "oyente", "ozono", "pacto", "padre", "paella", "página", "pago",
99460 "país", "pájaro", "palabra", "palco", "paleta", "pálido", "palma", "paloma", "palpar", "pan",
99461 "panal", "pánico", "pantera", "pañuelo", "papá", "papel", "papilla", "paquete", "parar", "parcela",
99462 "pared", "parir", "paro", "párpado", "parque", "párrafo", "parte", "pasar", "paseo", "pasión",
99463 "paso", "pasta", "pata", "patio", "patria", "pausa", "pauta", "pavo", "payaso", "peatón",
99464 "pecado", "pecera", "pecho", "pedal", "pedir", "pegar", "peine", "pelar", "peldaño", "pelea",
99465 "peligro", "pellejo", "pelo", "peluca", "pena", "pensar", "peñón", "peón", "peor", "pepino",
99466 "pequeño", "pera", "percha", "perder", "pereza", "perfil", "perico", "perla", "permiso", "perro",
99467 "persona", "pesa", "pesca", "pésimo", "pestaña", "pétalo", "petróleo", "pez", "pezuña", "picar",
99468 "pichón", "pie", "piedra", "pierna", "pieza", "pijama", "pilar", "piloto", "pimienta", "pino",
99469 "pintor", "pinza", "piña", "piojo", "pipa", "pirata", "pisar", "piscina", "piso", "pista",
99470 "pitón", "pizca", "placa", "plan", "plata", "playa", "plaza", "pleito", "pleno", "plomo",
99471 "pluma", "plural", "pobre", "poco", "poder", "podio", "poema", "poesía", "poeta", "polen",
99472 "policía", "pollo", "polvo", "pomada", "pomelo", "pomo", "pompa", "poner", "porción", "portal",
99473 "posada", "poseer", "posible", "poste", "potencia", "potro", "pozo", "prado", "precoz", "pregunta",
99474 "premio", "prensa", "preso", "previo", "primo", "príncipe", "prisión", "privar", "proa", "probar",
99475 "proceso", "producto", "proeza", "profesor", "programa", "prole", "promesa", "pronto", "propio", "próximo",
99476 "prueba", "público", "puchero", "pudor", "pueblo", "puerta", "puesto", "pulga", "pulir", "pulmón",
99477 "pulpo", "pulso", "puma", "punto", "puñal", "puño", "pupa", "pupila", "puré", "quedar",
99478 "queja", "quemar", "querer", "queso", "quieto", "química", "quince", "quitar", "rábano", "rabia",
99479 "rabo", "ración", "radical", "raíz", "rama", "rampa", "rancho", "rango", "rapaz", "rápido",
99480 "rapto", "rasgo", "raspa", "rato", "rayo", "raza", "razón", "reacción", "realidad", "rebaño",
99481 "rebote", "recaer", "receta", "rechazo", "recoger", "recreo", "recto", "recurso", "red", "redondo",
99482 "reducir", "reflejo", "reforma", "refrán", "refugio", "regalo", "regir", "regla", "regreso", "rehén",
99483 "reino", "reír", "reja", "relato", "relevo", "relieve", "relleno", "reloj", "remar", "remedio",
99484 "remo", "rencor", "rendir", "renta", "reparto", "repetir", "reposo", "reptil", "res", "rescate",
99485 "resina", "respeto", "resto", "resumen", "retiro", "retorno", "retrato", "reunir", "revés", "revista",
99486 "rey", "rezar", "rico", "riego", "rienda", "riesgo", "rifa", "rígido", "rigor", "rincón",
99487 "riñón", "río", "riqueza", "risa", "ritmo", "rito", "rizo", "roble", "roce", "rociar",
99488 "rodar", "rodeo", "rodilla", "roer", "rojizo", "rojo", "romero", "romper", "ron", "ronco",
99489 "ronda", "ropa", "ropero", "rosa", "rosca", "rostro", "rotar", "rubí", "rubor", "rudo",
99490 "rueda", "rugir", "ruido", "ruina", "ruleta", "rulo", "rumbo", "rumor", "ruptura", "ruta",
99491 "rutina", "sábado", "saber", "sabio", "sable", "sacar", "sagaz", "sagrado", "sala", "saldo",
99492 "salero", "salir", "salmón", "salón", "salsa", "salto", "salud", "salvar", "samba", "sanción",
99493 "sandía", "sanear", "sangre", "sanidad", "sano", "santo", "sapo", "saque", "sardina", "sartén",
99494 "sastre", "satán", "sauna", "saxofón", "sección", "seco", "secreto", "secta", "sed", "seguir",
99495 "seis", "sello", "selva", "semana", "semilla", "senda", "sensor", "señal", "señor", "separar",
99496 "sepia", "sequía", "ser", "serie", "sermón", "servir", "sesenta", "sesión", "seta", "setenta",
99497 "severo", "sexo", "sexto", "sidra", "siesta", "siete", "siglo", "signo", "sílaba", "silbar",
99498 "silencio", "silla", "símbolo", "simio", "sirena", "sistema", "sitio", "situar", "sobre", "socio",
99499 "sodio", "sol", "solapa", "soldado", "soledad", "sólido", "soltar", "solución", "sombra", "sondeo",
99500 "sonido", "sonoro", "sonrisa", "sopa", "soplar", "soporte", "sordo", "sorpresa", "sorteo", "sostén",
99501 "sótano", "suave", "subir", "suceso", "sudor", "suegra", "suelo", "sueño", "suerte", "sufrir",
99502 "sujeto", "sultán", "sumar", "superar", "suplir", "suponer", "supremo", "sur", "surco", "sureño",
99503 "surgir", "susto", "sutil", "tabaco", "tabique", "tabla", "tabú", "taco", "tacto", "tajo",
99504 "talar", "talco", "talento", "talla", "talón", "tamaño", "tambor", "tango", "tanque", "tapa",
99505 "tapete", "tapia", "tapón", "taquilla", "tarde", "tarea", "tarifa", "tarjeta", "tarot", "tarro",
99506 "tarta", "tatuaje", "tauro", "taza", "tazón", "teatro", "techo", "tecla", "técnica", "tejado",
99507 "tejer", "tejido", "tela", "teléfono", "tema", "temor", "templo", "tenaz", "tender", "tener",
99508 "tenis", "tenso", "teoría", "terapia", "terco", "término", "ternura", "terror", "tesis", "tesoro",
99509 "testigo", "tetera", "texto", "tez", "tibio", "tiburón", "tiempo", "tienda", "tierra", "tieso",
99510 "tigre", "tijera", "tilde", "timbre", "tímido", "timo", "tinta", "tío", "típico", "tipo",
99511 "tira", "tirón", "titán", "títere", "título", "tiza", "toalla", "tobillo", "tocar", "tocino",
99512 "todo", "toga", "toldo", "tomar", "tono", "tonto", "topar", "tope", "toque", "tórax",
99513 "torero", "tormenta", "torneo", "toro", "torpedo", "torre", "torso", "tortuga", "tos", "tosco",
99514 "toser", "tóxico", "trabajo", "tractor", "traer", "tráfico", "trago", "traje", "tramo", "trance",
99515 "trato", "trauma", "trazar", "trébol", "tregua", "treinta", "tren", "trepar", "tres", "tribu",
99516 "trigo", "tripa", "triste", "triunfo", "trofeo", "trompa", "tronco", "tropa", "trote", "trozo",
99517 "truco", "trueno", "trufa", "tubería", "tubo", "tuerto", "tumba", "tumor", "túnel", "túnica",
99518 "turbina", "turismo", "turno", "tutor", "ubicar", "úlcera", "umbral", "unidad", "unir", "universo",
99519 "uno", "untar", "uña", "urbano", "urbe", "urgente", "urna", "usar", "usuario", "útil",
99520 "utopía", "uva", "vaca", "vacío", "vacuna", "vagar", "vago", "vaina", "vajilla", "vale",
99521 "válido", "valle", "valor", "válvula", "vampiro", "vara", "variar", "varón", "vaso", "vecino",
99522 "vector", "vehículo", "veinte", "vejez", "vela", "velero", "veloz", "vena", "vencer", "venda",
99523 "veneno", "vengar", "venir", "venta", "venus", "ver", "verano", "verbo", "verde", "vereda",
99524 "verja", "verso", "verter", "vía", "viaje", "vibrar", "vicio", "víctima", "vida", "vídeo",
99525 "vidrio", "viejo", "viernes", "vigor", "vil", "villa", "vinagre", "vino", "viñedo", "violín",
99526 "viral", "virgo", "virtud", "visor", "víspera", "vista", "vitamina", "viudo", "vivaz", "vivero",
99527 "vivir", "vivo", "volcán", "volumen", "volver", "voraz", "votar", "voto", "voz", "vuelo",
99528 "vulgar", "yacer", "yate", "yegua", "yema", "yerno", "yeso", "yodo", "yoga", "yogur",
99529 "zafiro", "zanja", "zapato", "zarza", "zona", "zorro", "zumo", "zurdo"]
99530 </script>
99531 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
99532 WORDLISTS["chinese_simplified"] = [
99533 "的", "一", "是", "在", "不", "了", "有", "和", "人", "这",
99534 "中", "大", "为", "上", "个", "国", "我", "以", "要", "他",
99535 "时", "来", "用", "们", "生", "到", "作", "地", "于", "出",
99536 "就", "分", "对", "成", "会", "可", "主", "发", "年", "动",
99537 "同", "工", "也", "能", "下", "过", "子", "说", "产", "种",
99538 "面", "而", "方", "后", "多", "定", "行", "学", "法", "所",
99539 "民", "得", "经", "十", "三", "之", "进", "着", "等", "部",
99540 "度", "家", "电", "力", "里", "如", "水", "化", "高", "自",
99541 "二", "理", "起", "小", "物", "现", "实", "加", "量", "都",
99542 "两", "体", "制", "机", "当", "使", "点", "从", "业", "本",
99543 "去", "把", "性", "好", "应", "开", "它", "合", "还", "因",
99544 "由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
99545 "那", "社", "义", "事", "平", "形", "相", "全", "表", "间",
99546 "样", "与", "关", "各", "重", "新", "线", "内", "数", "正",
99547 "心", "反", "你", "明", "看", "原", "又", "么", "利", "比",
99548 "或", "但", "质", "气", "第", "向", "道", "命", "此", "变",
99549 "条", "只", "没", "结", "解", "问", "意", "建", "月", "公",
99550 "无", "系", "军", "很", "情", "者", "最", "立", "代", "想",
99551 "已", "通", "并", "提", "直", "题", "党", "程", "展", "五",
99552 "果", "料", "象", "员", "革", "位", "入", "常", "文", "总",
99553 "次", "品", "式", "活", "设", "及", "管", "特", "件", "长",
99554 "求", "老", "头", "基", "资", "边", "流", "路", "级", "少",
99555 "图", "山", "统", "接", "知", "较", "将", "组", "见", "计",
99556 "别", "她", "手", "角", "期", "根", "论", "运", "农", "指",
99557 "几", "九", "区", "强", "放", "决", "西", "被", "干", "做",
99558 "必", "战", "先", "回", "则", "任", "取", "据", "处", "队",
99559 "南", "给", "色", "光", "门", "即", "保", "治", "北", "造",
99560 "百", "规", "热", "领", "七", "海", "口", "东", "导", "器",
99561 "压", "志", "世", "金", "增", "争", "济", "阶", "油", "思",
99562 "术", "极", "交", "受", "联", "什", "认", "六", "共", "权",
99563 "收", "证", "改", "清", "美", "再", "采", "转", "更", "单",
99564 "风", "切", "打", "白", "教", "速", "花", "带", "安", "场",
99565 "身", "车", "例", "真", "务", "具", "万", "每", "目", "至",
99566 "达", "走", "积", "示", "议", "声", "报", "斗", "完", "类",
99567 "八", "离", "华", "名", "确", "才", "科", "张", "信", "马",
99568 "节", "话", "米", "整", "空", "元", "况", "今", "集", "温",
99569 "传", "土", "许", "步", "群", "广", "石", "记", "需", "段",
99570 "研", "界", "拉", "林", "律", "叫", "且", "究", "观", "越",
99571 "织", "装", "影", "算", "低", "持", "音", "众", "书", "布",
99572 "复", "容", "儿", "须", "际", "商", "非", "验", "连", "断",
99573 "深", "难", "近", "矿", "千", "周", "委", "素", "技", "备",
99574 "半", "办", "青", "省", "列", "习", "响", "约", "支", "般",
99575 "史", "感", "劳", "便", "团", "往", "酸", "历", "市", "克",
99576 "何", "除", "消", "构", "府", "称", "太", "准", "精", "值",
99577 "号", "率", "族", "维", "划", "选", "标", "写", "存", "候",
99578 "毛", "亲", "快", "效", "斯", "院", "查", "江", "型", "眼",
99579 "王", "按", "格", "养", "易", "置", "派", "层", "片", "始",
99580 "却", "专", "状", "育", "厂", "京", "识", "适", "属", "圆",
99581 "包", "火", "住", "调", "满", "县", "局", "照", "参", "红",
99582 "细", "引", "听", "该", "铁", "价", "严", "首", "底", "液",
99583 "官", "德", "随", "病", "苏", "失", "尔", "死", "讲", "配",
99584 "女", "黄", "推", "显", "谈", "罪", "神", "艺", "呢", "席",
99585 "含", "企", "望", "密", "批", "营", "项", "防", "举", "球",
99586 "英", "氧", "势", "告", "李", "台", "落", "木", "帮", "轮",
99587 "破", "亚", "师", "围", "注", "远", "字", "材", "排", "供",
99588 "河", "态", "封", "另", "施", "减", "树", "溶", "怎", "止",
99589 "案", "言", "士", "均", "武", "固", "叶", "鱼", "波", "视",
99590 "仅", "费", "紧", "爱", "左", "章", "早", "朝", "害", "续",
99591 "轻", "服", "试", "食", "充", "兵", "源", "判", "护", "司",
99592 "足", "某", "练", "差", "致", "板", "田", "降", "黑", "犯",
99593 "负", "击", "范", "继", "兴", "似", "余", "坚", "曲", "输",
99594 "修", "故", "城", "夫", "够", "送", "笔", "船", "占", "右",
99595 "财", "吃", "富", "春", "职", "觉", "汉", "画", "功", "巴",
99596 "跟", "虽", "杂", "飞", "检", "吸", "助", "升", "阳", "互",
99597 "初", "创", "抗", "考", "投", "坏", "策", "古", "径", "换",
99598 "未", "跑", "留", "钢", "曾", "端", "责", "站", "简", "述",
99599 "钱", "副", "尽", "帝", "射", "草", "冲", "承", "独", "令",
99600 "限", "阿", "宣", "环", "双", "请", "超", "微", "让", "控",
99601 "州", "良", "轴", "找", "否", "纪", "益", "依", "优", "顶",
99602 "础", "载", "倒", "房", "突", "坐", "粉", "敌", "略", "客",
99603 "袁", "冷", "胜", "绝", "析", "块", "剂", "测", "丝", "协",
99604 "诉", "念", "陈", "仍", "罗", "盐", "友", "洋", "错", "苦",
99605 "夜", "刑", "移", "频", "逐", "靠", "混", "母", "短", "皮",
99606 "终", "聚", "汽", "村", "云", "哪", "既", "距", "卫", "停",
99607 "烈", "央", "察", "烧", "迅", "境", "若", "印", "洲", "刻",
99608 "括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
99609 "侵", "吧", "甲", "游", "久", "菜", "味", "旧", "模", "湖",
99610 "货", "损", "预", "阻", "毫", "普", "稳", "乙", "妈", "植",
99611 "息", "扩", "银", "语", "挥", "酒", "守", "拿", "序", "纸",
99612 "医", "缺", "雨", "吗", "针", "刘", "啊", "急", "唱", "误",
99613 "训", "愿", "审", "附", "获", "茶", "鲜", "粮", "斤", "孩",
99614 "脱", "硫", "肥", "善", "龙", "演", "父", "渐", "血", "欢",
99615 "械", "掌", "歌", "沙", "刚", "攻", "谓", "盾", "讨", "晚",
99616 "粒", "乱", "燃", "矛", "乎", "杀", "药", "宁", "鲁", "贵",
99617 "钟", "煤", "读", "班", "伯", "香", "介", "迫", "句", "丰",
99618 "培", "握", "兰", "担", "弦", "蛋", "沉", "假", "穿", "执",
99619 "答", "乐", "谁", "顺", "烟", "缩", "征", "脸", "喜", "松",
99620 "脚", "困", "异", "免", "背", "星", "福", "买", "染", "井",
99621 "概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "静", "补",
99622 "评", "翻", "肉", "践", "尼", "衣", "宽", "扬", "棉", "希",
99623 "伤", "操", "垂", "秋", "宜", "氢", "套", "督", "振", "架",
99624 "亮", "末", "宪", "庆", "编", "牛", "触", "映", "雷", "销",
99625 "诗", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
99626 "绿", "晶", "厚", "盟", "衡", "鸡", "孙", "延", "危", "胶",
99627 "屋", "乡", "临", "陆", "顾", "掉", "呀", "灯", "岁", "措",
99628 "束", "耐", "剧", "玉", "赵", "跳", "哥", "季", "课", "凯",
99629 "胡", "额", "款", "绍", "卷", "齐", "伟", "蒸", "殖", "永",
99630 "宗", "苗", "川", "炉", "岩", "弱", "零", "杨", "奏", "沿",
99631 "露", "杆", "探", "滑", "镇", "饭", "浓", "航", "怀", "赶",
99632 "库", "夺", "伊", "灵", "税", "途", "灭", "赛", "归", "召",
99633 "鼓", "播", "盘", "裁", "险", "康", "唯", "录", "菌", "纯",
99634 "借", "糖", "盖", "横", "符", "私", "努", "堂", "域", "枪",
99635 "润", "幅", "哈", "竟", "熟", "虫", "泽", "脑", "壤", "碳",
99636 "欧", "遍", "侧", "寨", "敢", "彻", "虑", "斜", "薄", "庭",
99637 "纳", "弹", "饲", "伸", "折", "麦", "湿", "暗", "荷", "瓦",
99638 "塞", "床", "筑", "恶", "户", "访", "塔", "奇", "透", "梁",
99639 "刀", "旋", "迹", "卡", "氯", "遇", "份", "毒", "泥", "退",
99640 "洗", "摆", "灰", "彩", "卖", "耗", "夏", "择", "忙", "铜",
99641 "献", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
99642 "阵", "阴", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
99643 "楼", "避", "谋", "吨", "野", "猪", "旗", "累", "偏", "典",
99644 "馆", "索", "秦", "脂", "潮", "爷", "豆", "忽", "托", "惊",
99645 "塑", "遗", "愈", "朱", "替", "纤", "粗", "倾", "尚", "痛",
99646 "楚", "谢", "奋", "购", "磨", "君", "池", "旁", "碎", "骨",
99647 "监", "捕", "弟", "暴", "割", "贯", "殊", "释", "词", "亡",
99648 "壁", "顿", "宝", "午", "尘", "闻", "揭", "炮", "残", "冬",
99649 "桥", "妇", "警", "综", "招", "吴", "付", "浮", "遭", "徐",
99650 "您", "摇", "谷", "赞", "箱", "隔", "订", "男", "吹", "园",
99651 "纷", "唐", "败", "宋", "玻", "巨", "耕", "坦", "荣", "闭",
99652 "湾", "键", "凡", "驻", "锅", "救", "恩", "剥", "凝", "碱",
99653 "齿", "截", "炼", "麻", "纺", "禁", "废", "盛", "版", "缓",
99654 "净", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
99655 "庄", "街", "藏", "姑", "贸", "腐", "奴", "啦", "惯", "乘",
99656 "伙", "恢", "匀", "纱", "扎", "辩", "耳", "彪", "臣", "亿",
99657 "璃", "抵", "脉", "秀", "萨", "俄", "网", "舞", "店", "喷",
99658 "纵", "寸", "汗", "挂", "洪", "贺", "闪", "柬", "爆", "烯",
99659 "津", "稻", "墙", "软", "勇", "像", "滚", "厘", "蒙", "芳",
99660 "肯", "坡", "柱", "荡", "腿", "仪", "旅", "尾", "轧", "冰",
99661 "贡", "登", "黎", "削", "钻", "勒", "逃", "障", "氨", "郭",
99662 "峰", "币", "港", "伏", "轨", "亩", "毕", "擦", "莫", "刺",
99663 "浪", "秘", "援", "株", "健", "售", "股", "岛", "甘", "泡",
99664 "睡", "童", "铸", "汤", "阀", "休", "汇", "舍", "牧", "绕",
99665 "炸", "哲", "磷", "绩", "朋", "淡", "尖", "启", "陷", "柴",
99666 "呈", "徒", "颜", "泪", "稍", "忘", "泵", "蓝", "拖", "洞",
99667 "授", "镜", "辛", "壮", "锋", "贫", "虚", "弯", "摩", "泰",
99668 "幼", "廷", "尊", "窗", "纲", "弄", "隶", "疑", "氏", "宫",
99669 "姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "违",
99670 "夹", "腰", "缘", "珠", "穷", "森", "枝", "竹", "沟", "催",
99671 "绳", "忆", "邦", "剩", "幸", "浆", "栏", "拥", "牙", "贮",
99672 "礼", "滤", "钠", "纹", "罢", "拍", "咱", "喊", "袖", "埃",
99673 "勤", "罚", "焦", "潜", "伍", "墨", "欲", "缝", "姓", "刊",
99674 "饱", "仿", "奖", "铝", "鬼", "丽", "跨", "默", "挖", "链",
99675 "扫", "喝", "袋", "炭", "污", "幕", "诸", "弧", "励", "梅",
99676 "奶", "洁", "灾", "舟", "鉴", "苯", "讼", "抱", "毁", "懂",
99677 "寒", "智", "埔", "寄", "届", "跃", "渡", "挑", "丹", "艰",
99678 "贝", "碰", "拔", "爹", "戴", "码", "梦", "芽", "熔", "赤",
99679 "渔", "哭", "敬", "颗", "奔", "铅", "仲", "虎", "稀", "妹",
99680 "乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "仓", "魏",
99681 "锐", "晓", "氮", "兼", "隐", "碍", "赫", "拨", "忠", "肃",
99682 "缸", "牵", "抢", "博", "巧", "壳", "兄", "杜", "讯", "诚",
99683 "碧", "祥", "柯", "页", "巡", "矩", "悲", "灌", "龄", "伦",
99684 "票", "寻", "桂", "铺", "圣", "恐", "恰", "郑", "趣", "抬",
99685 "荒", "腾", "贴", "柔", "滴", "猛", "阔", "辆", "妻", "填",
99686 "撤", "储", "签", "闹", "扰", "紫", "砂", "递", "戏", "吊",
99687 "陶", "伐", "喂", "疗", "瓶", "婆", "抚", "臂", "摸", "忍",
99688 "虾", "蜡", "邻", "胸", "巩", "挤", "偶", "弃", "槽", "劲",
99689 "乳", "邓", "吉", "仁", "烂", "砖", "租", "乌", "舰", "伴",
99690 "瓜", "浅", "丙", "暂", "燥", "橡", "柳", "迷", "暖", "牌",
99691 "秧", "胆", "详", "簧", "踏", "瓷", "谱", "呆", "宾", "糊",
99692 "洛", "辉", "愤", "竞", "隙", "怒", "粘", "乃", "绪", "肩",
99693 "籍", "敏", "涂", "熙", "皆", "侦", "悬", "掘", "享", "纠",
99694 "醒", "狂", "锁", "淀", "恨", "牲", "霸", "爬", "赏", "逆",
99695 "玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鸭",
99696 "趋", "凤", "晨", "畜", "辈", "秩", "卵", "署", "梯", "炎",
99697 "滩", "棋", "驱", "筛", "峡", "冒", "啥", "寿", "译", "浸",
99698 "泉", "帽", "迟", "硅", "疆", "贷", "漏", "稿", "冠", "嫩",
99699 "胁", "芯", "牢", "叛", "蚀", "奥", "鸣", "岭", "羊", "凭",
99700 "串", "塘", "绘", "酵", "融", "盆", "锡", "庙", "筹", "冻",
99701 "辅", "摄", "袭", "筋", "拒", "僚", "旱", "钾", "鸟", "漆",
99702 "沈", "眉", "疏", "添", "棒", "穗", "硝", "韩", "逼", "扭",
99703 "侨", "凉", "挺", "碗", "栽", "炒", "杯", "患", "馏", "劝",
99704 "豪", "辽", "勃", "鸿", "旦", "吏", "拜", "狗", "埋", "辊",
99705 "掩", "饮", "搬", "骂", "辞", "勾", "扣", "估", "蒋", "绒",
99706 "雾", "丈", "朵", "姆", "拟", "宇", "辑", "陕", "雕", "偿",
99707 "蓄", "崇", "剪", "倡", "厅", "咬", "驶", "薯", "刷", "斥",
99708 "番", "赋", "奉", "佛", "浇", "漫", "曼", "扇", "钙", "桃",
99709 "扶", "仔", "返", "俗", "亏", "腔", "鞋", "棱", "覆", "框",
99710 "悄", "叔", "撞", "骗", "勘", "旺", "沸", "孤", "吐", "孟",
99711 "渠", "屈", "疾", "妙", "惜", "仰", "狠", "胀", "谐", "抛",
99712 "霉", "桑", "岗", "嘛", "衰", "盗", "渗", "脏", "赖", "涌",
99713 "甜", "曹", "阅", "肌", "哩", "厉", "烃", "纬", "毅", "昨",
99714 "伪", "症", "煮", "叹", "钉", "搭", "茎", "笼", "酷", "偷",
99715 "弓", "锥", "恒", "杰", "坑", "鼻", "翼", "纶", "叙", "狱",
99716 "逮", "罐", "络", "棚", "抑", "膨", "蔬", "寺", "骤", "穆",
99717 "冶", "枯", "册", "尸", "凸", "绅", "坯", "牺", "焰", "轰",
99718 "欣", "晋", "瘦", "御", "锭", "锦", "丧", "旬", "锻", "垄",
99719 "搜", "扑", "邀", "亭", "酯", "迈", "舒", "脆", "酶", "闲",
99720 "忧", "酚", "顽", "羽", "涨", "卸", "仗", "陪", "辟", "惩",
99721 "杭", "姚", "肚", "捉", "飘", "漂", "昆", "欺", "吾", "郎",
99722 "烷", "汁", "呵", "饰", "萧", "雅", "邮", "迁", "燕", "撒",
99723 "姻", "赴", "宴", "烦", "债", "帐", "斑", "铃", "旨", "醇",
99724 "董", "饼", "雏", "姿", "拌", "傅", "腹", "妥", "揉", "贤",
99725 "拆", "歪", "葡", "胺", "丢", "浩", "徽", "昂", "垫", "挡",
99726 "览", "贪", "慰", "缴", "汪", "慌", "冯", "诺", "姜", "谊",
99727 "凶", "劣", "诬", "耀", "昏", "躺", "盈", "骑", "乔", "溪",
99728 "丛", "卢", "抹", "闷", "咨", "刮", "驾", "缆", "悟", "摘",
99729 "铒", "掷", "颇", "幻", "柄", "惠", "惨", "佳", "仇", "腊",
99730 "窝", "涤", "剑", "瞧", "堡", "泼", "葱", "罩", "霍", "捞",
99731 "胎", "苍", "滨", "俩", "捅", "湘", "砍", "霞", "邵", "萄",
99732 "疯", "淮", "遂", "熊", "粪", "烘", "宿", "档", "戈", "驳",
99733 "嫂", "裕", "徙", "箭", "捐", "肠", "撑", "晒", "辨", "殿",
99734 "莲", "摊", "搅", "酱", "屏", "疫", "哀", "蔡", "堵", "沫",
99735 "皱", "畅", "叠", "阁", "莱", "敲", "辖", "钩", "痕", "坝",
99736 "巷", "饿", "祸", "丘", "玄", "溜", "曰", "逻", "彭", "尝",
99737 "卿", "妨", "艇", "吞", "韦", "怨", "矮", "歇" ]
99738 </script>
99739 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
99740 WORDLISTS["chinese_traditional"] = [
99741 "的", "一", "是", "在", "不", "了", "有", "和", "人", "這",
99742 "中", "大", "為", "上", "個", "國", "我", "以", "要", "他",
99743 "時", "來", "用", "們", "生", "到", "作", "地", "於", "出",
99744 "就", "分", "對", "成", "會", "可", "主", "發", "年", "動",
99745 "同", "工", "也", "能", "下", "過", "子", "說", "產", "種",
99746 "面", "而", "方", "後", "多", "定", "行", "學", "法", "所",
99747 "民", "得", "經", "十", "三", "之", "進", "著", "等", "部",
99748 "度", "家", "電", "力", "裡", "如", "水", "化", "高", "自",
99749 "二", "理", "起", "小", "物", "現", "實", "加", "量", "都",
99750 "兩", "體", "制", "機", "當", "使", "點", "從", "業", "本",
99751 "去", "把", "性", "好", "應", "開", "它", "合", "還", "因",
99752 "由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
99753 "那", "社", "義", "事", "平", "形", "相", "全", "表", "間",
99754 "樣", "與", "關", "各", "重", "新", "線", "內", "數", "正",
99755 "心", "反", "你", "明", "看", "原", "又", "麼", "利", "比",
99756 "或", "但", "質", "氣", "第", "向", "道", "命", "此", "變",
99757 "條", "只", "沒", "結", "解", "問", "意", "建", "月", "公",
99758 "無", "系", "軍", "很", "情", "者", "最", "立", "代", "想",
99759 "已", "通", "並", "提", "直", "題", "黨", "程", "展", "五",
99760 "果", "料", "象", "員", "革", "位", "入", "常", "文", "總",
99761 "次", "品", "式", "活", "設", "及", "管", "特", "件", "長",
99762 "求", "老", "頭", "基", "資", "邊", "流", "路", "級", "少",
99763 "圖", "山", "統", "接", "知", "較", "將", "組", "見", "計",
99764 "別", "她", "手", "角", "期", "根", "論", "運", "農", "指",
99765 "幾", "九", "區", "強", "放", "決", "西", "被", "幹", "做",
99766 "必", "戰", "先", "回", "則", "任", "取", "據", "處", "隊",
99767 "南", "給", "色", "光", "門", "即", "保", "治", "北", "造",
99768 "百", "規", "熱", "領", "七", "海", "口", "東", "導", "器",
99769 "壓", "志", "世", "金", "增", "爭", "濟", "階", "油", "思",
99770 "術", "極", "交", "受", "聯", "什", "認", "六", "共", "權",
99771 "收", "證", "改", "清", "美", "再", "採", "轉", "更", "單",
99772 "風", "切", "打", "白", "教", "速", "花", "帶", "安", "場",
99773 "身", "車", "例", "真", "務", "具", "萬", "每", "目", "至",
99774 "達", "走", "積", "示", "議", "聲", "報", "鬥", "完", "類",
99775 "八", "離", "華", "名", "確", "才", "科", "張", "信", "馬",
99776 "節", "話", "米", "整", "空", "元", "況", "今", "集", "溫",
99777 "傳", "土", "許", "步", "群", "廣", "石", "記", "需", "段",
99778 "研", "界", "拉", "林", "律", "叫", "且", "究", "觀", "越",
99779 "織", "裝", "影", "算", "低", "持", "音", "眾", "書", "布",
99780 "复", "容", "兒", "須", "際", "商", "非", "驗", "連", "斷",
99781 "深", "難", "近", "礦", "千", "週", "委", "素", "技", "備",
99782 "半", "辦", "青", "省", "列", "習", "響", "約", "支", "般",
99783 "史", "感", "勞", "便", "團", "往", "酸", "歷", "市", "克",
99784 "何", "除", "消", "構", "府", "稱", "太", "準", "精", "值",
99785 "號", "率", "族", "維", "劃", "選", "標", "寫", "存", "候",
99786 "毛", "親", "快", "效", "斯", "院", "查", "江", "型", "眼",
99787 "王", "按", "格", "養", "易", "置", "派", "層", "片", "始",
99788 "卻", "專", "狀", "育", "廠", "京", "識", "適", "屬", "圓",
99789 "包", "火", "住", "調", "滿", "縣", "局", "照", "參", "紅",
99790 "細", "引", "聽", "該", "鐵", "價", "嚴", "首", "底", "液",
99791 "官", "德", "隨", "病", "蘇", "失", "爾", "死", "講", "配",
99792 "女", "黃", "推", "顯", "談", "罪", "神", "藝", "呢", "席",
99793 "含", "企", "望", "密", "批", "營", "項", "防", "舉", "球",
99794 "英", "氧", "勢", "告", "李", "台", "落", "木", "幫", "輪",
99795 "破", "亞", "師", "圍", "注", "遠", "字", "材", "排", "供",
99796 "河", "態", "封", "另", "施", "減", "樹", "溶", "怎", "止",
99797 "案", "言", "士", "均", "武", "固", "葉", "魚", "波", "視",
99798 "僅", "費", "緊", "愛", "左", "章", "早", "朝", "害", "續",
99799 "輕", "服", "試", "食", "充", "兵", "源", "判", "護", "司",
99800 "足", "某", "練", "差", "致", "板", "田", "降", "黑", "犯",
99801 "負", "擊", "范", "繼", "興", "似", "餘", "堅", "曲", "輸",
99802 "修", "故", "城", "夫", "夠", "送", "筆", "船", "佔", "右",
99803 "財", "吃", "富", "春", "職", "覺", "漢", "畫", "功", "巴",
99804 "跟", "雖", "雜", "飛", "檢", "吸", "助", "昇", "陽", "互",
99805 "初", "創", "抗", "考", "投", "壞", "策", "古", "徑", "換",
99806 "未", "跑", "留", "鋼", "曾", "端", "責", "站", "簡", "述",
99807 "錢", "副", "盡", "帝", "射", "草", "衝", "承", "獨", "令",
99808 "限", "阿", "宣", "環", "雙", "請", "超", "微", "讓", "控",
99809 "州", "良", "軸", "找", "否", "紀", "益", "依", "優", "頂",
99810 "礎", "載", "倒", "房", "突", "坐", "粉", "敵", "略", "客",
99811 "袁", "冷", "勝", "絕", "析", "塊", "劑", "測", "絲", "協",
99812 "訴", "念", "陳", "仍", "羅", "鹽", "友", "洋", "錯", "苦",
99813 "夜", "刑", "移", "頻", "逐", "靠", "混", "母", "短", "皮",
99814 "終", "聚", "汽", "村", "雲", "哪", "既", "距", "衛", "停",
99815 "烈", "央", "察", "燒", "迅", "境", "若", "印", "洲", "刻",
99816 "括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
99817 "侵", "吧", "甲", "遊", "久", "菜", "味", "舊", "模", "湖",
99818 "貨", "損", "預", "阻", "毫", "普", "穩", "乙", "媽", "植",
99819 "息", "擴", "銀", "語", "揮", "酒", "守", "拿", "序", "紙",
99820 "醫", "缺", "雨", "嗎", "針", "劉", "啊", "急", "唱", "誤",
99821 "訓", "願", "審", "附", "獲", "茶", "鮮", "糧", "斤", "孩",
99822 "脫", "硫", "肥", "善", "龍", "演", "父", "漸", "血", "歡",
99823 "械", "掌", "歌", "沙", "剛", "攻", "謂", "盾", "討", "晚",
99824 "粒", "亂", "燃", "矛", "乎", "殺", "藥", "寧", "魯", "貴",
99825 "鐘", "煤", "讀", "班", "伯", "香", "介", "迫", "句", "豐",
99826 "培", "握", "蘭", "擔", "弦", "蛋", "沉", "假", "穿", "執",
99827 "答", "樂", "誰", "順", "煙", "縮", "徵", "臉", "喜", "松",
99828 "腳", "困", "異", "免", "背", "星", "福", "買", "染", "井",
99829 "概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "靜", "補",
99830 "評", "翻", "肉", "踐", "尼", "衣", "寬", "揚", "棉", "希",
99831 "傷", "操", "垂", "秋", "宜", "氫", "套", "督", "振", "架",
99832 "亮", "末", "憲", "慶", "編", "牛", "觸", "映", "雷", "銷",
99833 "詩", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
99834 "綠", "晶", "厚", "盟", "衡", "雞", "孫", "延", "危", "膠",
99835 "屋", "鄉", "臨", "陸", "顧", "掉", "呀", "燈", "歲", "措",
99836 "束", "耐", "劇", "玉", "趙", "跳", "哥", "季", "課", "凱",
99837 "胡", "額", "款", "紹", "卷", "齊", "偉", "蒸", "殖", "永",
99838 "宗", "苗", "川", "爐", "岩", "弱", "零", "楊", "奏", "沿",
99839 "露", "桿", "探", "滑", "鎮", "飯", "濃", "航", "懷", "趕",
99840 "庫", "奪", "伊", "靈", "稅", "途", "滅", "賽", "歸", "召",
99841 "鼓", "播", "盤", "裁", "險", "康", "唯", "錄", "菌", "純",
99842 "借", "糖", "蓋", "橫", "符", "私", "努", "堂", "域", "槍",
99843 "潤", "幅", "哈", "竟", "熟", "蟲", "澤", "腦", "壤", "碳",
99844 "歐", "遍", "側", "寨", "敢", "徹", "慮", "斜", "薄", "庭",
99845 "納", "彈", "飼", "伸", "折", "麥", "濕", "暗", "荷", "瓦",
99846 "塞", "床", "築", "惡", "戶", "訪", "塔", "奇", "透", "梁",
99847 "刀", "旋", "跡", "卡", "氯", "遇", "份", "毒", "泥", "退",
99848 "洗", "擺", "灰", "彩", "賣", "耗", "夏", "擇", "忙", "銅",
99849 "獻", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
99850 "陣", "陰", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
99851 "樓", "避", "謀", "噸", "野", "豬", "旗", "累", "偏", "典",
99852 "館", "索", "秦", "脂", "潮", "爺", "豆", "忽", "托", "驚",
99853 "塑", "遺", "愈", "朱", "替", "纖", "粗", "傾", "尚", "痛",
99854 "楚", "謝", "奮", "購", "磨", "君", "池", "旁", "碎", "骨",
99855 "監", "捕", "弟", "暴", "割", "貫", "殊", "釋", "詞", "亡",
99856 "壁", "頓", "寶", "午", "塵", "聞", "揭", "炮", "殘", "冬",
99857 "橋", "婦", "警", "綜", "招", "吳", "付", "浮", "遭", "徐",
99858 "您", "搖", "谷", "贊", "箱", "隔", "訂", "男", "吹", "園",
99859 "紛", "唐", "敗", "宋", "玻", "巨", "耕", "坦", "榮", "閉",
99860 "灣", "鍵", "凡", "駐", "鍋", "救", "恩", "剝", "凝", "鹼",
99861 "齒", "截", "煉", "麻", "紡", "禁", "廢", "盛", "版", "緩",
99862 "淨", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
99863 "莊", "街", "藏", "姑", "貿", "腐", "奴", "啦", "慣", "乘",
99864 "夥", "恢", "勻", "紗", "扎", "辯", "耳", "彪", "臣", "億",
99865 "璃", "抵", "脈", "秀", "薩", "俄", "網", "舞", "店", "噴",
99866 "縱", "寸", "汗", "掛", "洪", "賀", "閃", "柬", "爆", "烯",
99867 "津", "稻", "牆", "軟", "勇", "像", "滾", "厘", "蒙", "芳",
99868 "肯", "坡", "柱", "盪", "腿", "儀", "旅", "尾", "軋", "冰",
99869 "貢", "登", "黎", "削", "鑽", "勒", "逃", "障", "氨", "郭",
99870 "峰", "幣", "港", "伏", "軌", "畝", "畢", "擦", "莫", "刺",
99871 "浪", "秘", "援", "株", "健", "售", "股", "島", "甘", "泡",
99872 "睡", "童", "鑄", "湯", "閥", "休", "匯", "舍", "牧", "繞",
99873 "炸", "哲", "磷", "績", "朋", "淡", "尖", "啟", "陷", "柴",
99874 "呈", "徒", "顏", "淚", "稍", "忘", "泵", "藍", "拖", "洞",
99875 "授", "鏡", "辛", "壯", "鋒", "貧", "虛", "彎", "摩", "泰",
99876 "幼", "廷", "尊", "窗", "綱", "弄", "隸", "疑", "氏", "宮",
99877 "姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "違",
99878 "夾", "腰", "緣", "珠", "窮", "森", "枝", "竹", "溝", "催",
99879 "繩", "憶", "邦", "剩", "幸", "漿", "欄", "擁", "牙", "貯",
99880 "禮", "濾", "鈉", "紋", "罷", "拍", "咱", "喊", "袖", "埃",
99881 "勤", "罰", "焦", "潛", "伍", "墨", "欲", "縫", "姓", "刊",
99882 "飽", "仿", "獎", "鋁", "鬼", "麗", "跨", "默", "挖", "鏈",
99883 "掃", "喝", "袋", "炭", "污", "幕", "諸", "弧", "勵", "梅",
99884 "奶", "潔", "災", "舟", "鑑", "苯", "訟", "抱", "毀", "懂",
99885 "寒", "智", "埔", "寄", "屆", "躍", "渡", "挑", "丹", "艱",
99886 "貝", "碰", "拔", "爹", "戴", "碼", "夢", "芽", "熔", "赤",
99887 "漁", "哭", "敬", "顆", "奔", "鉛", "仲", "虎", "稀", "妹",
99888 "乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "倉", "魏",
99889 "銳", "曉", "氮", "兼", "隱", "礙", "赫", "撥", "忠", "肅",
99890 "缸", "牽", "搶", "博", "巧", "殼", "兄", "杜", "訊", "誠",
99891 "碧", "祥", "柯", "頁", "巡", "矩", "悲", "灌", "齡", "倫",
99892 "票", "尋", "桂", "鋪", "聖", "恐", "恰", "鄭", "趣", "抬",
99893 "荒", "騰", "貼", "柔", "滴", "猛", "闊", "輛", "妻", "填",
99894 "撤", "儲", "簽", "鬧", "擾", "紫", "砂", "遞", "戲", "吊",
99895 "陶", "伐", "餵", "療", "瓶", "婆", "撫", "臂", "摸", "忍",
99896 "蝦", "蠟", "鄰", "胸", "鞏", "擠", "偶", "棄", "槽", "勁",
99897 "乳", "鄧", "吉", "仁", "爛", "磚", "租", "烏", "艦", "伴",
99898 "瓜", "淺", "丙", "暫", "燥", "橡", "柳", "迷", "暖", "牌",
99899 "秧", "膽", "詳", "簧", "踏", "瓷", "譜", "呆", "賓", "糊",
99900 "洛", "輝", "憤", "競", "隙", "怒", "粘", "乃", "緒", "肩",
99901 "籍", "敏", "塗", "熙", "皆", "偵", "懸", "掘", "享", "糾",
99902 "醒", "狂", "鎖", "淀", "恨", "牲", "霸", "爬", "賞", "逆",
99903 "玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鴨",
99904 "趨", "鳳", "晨", "畜", "輩", "秩", "卵", "署", "梯", "炎",
99905 "灘", "棋", "驅", "篩", "峽", "冒", "啥", "壽", "譯", "浸",
99906 "泉", "帽", "遲", "矽", "疆", "貸", "漏", "稿", "冠", "嫩",
99907 "脅", "芯", "牢", "叛", "蝕", "奧", "鳴", "嶺", "羊", "憑",
99908 "串", "塘", "繪", "酵", "融", "盆", "錫", "廟", "籌", "凍",
99909 "輔", "攝", "襲", "筋", "拒", "僚", "旱", "鉀", "鳥", "漆",
99910 "沈", "眉", "疏", "添", "棒", "穗", "硝", "韓", "逼", "扭",
99911 "僑", "涼", "挺", "碗", "栽", "炒", "杯", "患", "餾", "勸",
99912 "豪", "遼", "勃", "鴻", "旦", "吏", "拜", "狗", "埋", "輥",
99913 "掩", "飲", "搬", "罵", "辭", "勾", "扣", "估", "蔣", "絨",
99914 "霧", "丈", "朵", "姆", "擬", "宇", "輯", "陝", "雕", "償",
99915 "蓄", "崇", "剪", "倡", "廳", "咬", "駛", "薯", "刷", "斥",
99916 "番", "賦", "奉", "佛", "澆", "漫", "曼", "扇", "鈣", "桃",
99917 "扶", "仔", "返", "俗", "虧", "腔", "鞋", "棱", "覆", "框",
99918 "悄", "叔", "撞", "騙", "勘", "旺", "沸", "孤", "吐", "孟",
99919 "渠", "屈", "疾", "妙", "惜", "仰", "狠", "脹", "諧", "拋",
99920 "黴", "桑", "崗", "嘛", "衰", "盜", "滲", "臟", "賴", "湧",
99921 "甜", "曹", "閱", "肌", "哩", "厲", "烴", "緯", "毅", "昨",
99922 "偽", "症", "煮", "嘆", "釘", "搭", "莖", "籠", "酷", "偷",
99923 "弓", "錐", "恆", "傑", "坑", "鼻", "翼", "綸", "敘", "獄",
99924 "逮", "罐", "絡", "棚", "抑", "膨", "蔬", "寺", "驟", "穆",
99925 "冶", "枯", "冊", "屍", "凸", "紳", "坯", "犧", "焰", "轟",
99926 "欣", "晉", "瘦", "禦", "錠", "錦", "喪", "旬", "鍛", "壟",
99927 "搜", "撲", "邀", "亭", "酯", "邁", "舒", "脆", "酶", "閒",
99928 "憂", "酚", "頑", "羽", "漲", "卸", "仗", "陪", "闢", "懲",
99929 "杭", "姚", "肚", "捉", "飄", "漂", "昆", "欺", "吾", "郎",
99930 "烷", "汁", "呵", "飾", "蕭", "雅", "郵", "遷", "燕", "撒",
99931 "姻", "赴", "宴", "煩", "債", "帳", "斑", "鈴", "旨", "醇",
99932 "董", "餅", "雛", "姿", "拌", "傅", "腹", "妥", "揉", "賢",
99933 "拆", "歪", "葡", "胺", "丟", "浩", "徽", "昂", "墊", "擋",
99934 "覽", "貪", "慰", "繳", "汪", "慌", "馮", "諾", "姜", "誼",
99935 "兇", "劣", "誣", "耀", "昏", "躺", "盈", "騎", "喬", "溪",
99936 "叢", "盧", "抹", "悶", "諮", "刮", "駕", "纜", "悟", "摘",
99937 "鉺", "擲", "頗", "幻", "柄", "惠", "慘", "佳", "仇", "臘",
99938 "窩", "滌", "劍", "瞧", "堡", "潑", "蔥", "罩", "霍", "撈",
99939 "胎", "蒼", "濱", "倆", "捅", "湘", "砍", "霞", "邵", "萄",
99940 "瘋", "淮", "遂", "熊", "糞", "烘", "宿", "檔", "戈", "駁",
99941 "嫂", "裕", "徙", "箭", "捐", "腸", "撐", "曬", "辨", "殿",
99942 "蓮", "攤", "攪", "醬", "屏", "疫", "哀", "蔡", "堵", "沫",
99943 "皺", "暢", "疊", "閣", "萊", "敲", "轄", "鉤", "痕", "壩",
99944 "巷", "餓", "禍", "丘", "玄", "溜", "曰", "邏", "彭", "嘗",
99945 "卿", "妨", "艇", "吞", "韋", "怨", "矮", "歇" ]
99946 </script>
99947 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
99948 WORDLISTS["french"] = [
99949 "abaisser", "abandon", "abdiquer", "abeille", "abolir", "aborder", "aboutir", "aboyer", "abrasif", "abreuver",
99950 "abriter", "abroger", "abrupt", "absence", "absolu", "absurde", "abusif", "abyssal", "académie", "acajou",
99951 "acarien", "accabler", "accepter", "acclamer", "accolade", "accroche", "accuser", "acerbe", "achat", "acheter",
99952 "aciduler", "acier", "acompte", "acquérir", "acronyme", "acteur", "actif", "actuel", "adepte", "adéquat",
99953 "adhésif", "adjectif", "adjuger", "admettre", "admirer", "adopter", "adorer", "adoucir", "adresse", "adroit",
99954 "adulte", "adverbe", "aérer", "aéronef", "affaire", "affecter", "affiche", "affreux", "affubler", "agacer",
99955 "agencer", "agile", "agiter", "agrafer", "agréable", "agrume", "aider", "aiguille", "ailier", "aimable",
99956 "aisance", "ajouter", "ajuster", "alarmer", "alchimie", "alerte", "algèbre", "algue", "aliéner", "aliment",
99957 "alléger", "alliage", "allouer", "allumer", "alourdir", "alpaga", "altesse", "alvéole", "amateur", "ambigu",
99958 "ambre", "aménager", "amertume", "amidon", "amiral", "amorcer", "amour", "amovible", "amphibie", "ampleur",
99959 "amusant", "analyse", "anaphore", "anarchie", "anatomie", "ancien", "anéantir", "angle", "angoisse", "anguleux",
99960 "animal", "annexer", "annonce", "annuel", "anodin", "anomalie", "anonyme", "anormal", "antenne", "antidote",
99961 "anxieux", "apaiser", "apéritif", "aplanir", "apologie", "appareil", "appeler", "apporter", "appuyer", "aquarium",
99962 "aqueduc", "arbitre", "arbuste", "ardeur", "ardoise", "argent", "arlequin", "armature", "armement", "armoire",
99963 "armure", "arpenter", "arracher", "arriver", "arroser", "arsenic", "artériel", "article", "aspect", "asphalte",
99964 "aspirer", "assaut", "asservir", "assiette", "associer", "assurer", "asticot", "astre", "astuce", "atelier",
99965 "atome", "atrium", "atroce", "attaque", "attentif", "attirer", "attraper", "aubaine", "auberge", "audace",
99966 "audible", "augurer", "aurore", "automne", "autruche", "avaler", "avancer", "avarice", "avenir", "averse",
99967 "aveugle", "aviateur", "avide", "avion", "aviser", "avoine", "avouer", "avril", "axial", "axiome",
99968 "badge", "bafouer", "bagage", "baguette", "baignade", "balancer", "balcon", "baleine", "balisage", "bambin",
99969 "bancaire", "bandage", "banlieue", "bannière", "banquier", "barbier", "baril", "baron", "barque", "barrage",
99970 "bassin", "bastion", "bataille", "bateau", "batterie", "baudrier", "bavarder", "belette", "bélier", "belote",
99971 "bénéfice", "berceau", "berger", "berline", "bermuda", "besace", "besogne", "bétail", "beurre", "biberon",
99972 "bicycle", "bidule", "bijou", "bilan", "bilingue", "billard", "binaire", "biologie", "biopsie", "biotype",
99973 "biscuit", "bison", "bistouri", "bitume", "bizarre", "blafard", "blague", "blanchir", "blessant", "blinder",
99974 "blond", "bloquer", "blouson", "bobard", "bobine", "boire", "boiser", "bolide", "bonbon", "bondir",
99975 "bonheur", "bonifier", "bonus", "bordure", "borne", "botte", "boucle", "boueux", "bougie", "boulon",
99976 "bouquin", "bourse", "boussole", "boutique", "boxeur", "branche", "brasier", "brave", "brebis", "brèche",
99977 "breuvage", "bricoler", "brigade", "brillant", "brioche", "brique", "brochure", "broder", "bronzer", "brousse",
99978 "broyeur", "brume", "brusque", "brutal", "bruyant", "buffle", "buisson", "bulletin", "bureau", "burin",
99979 "bustier", "butiner", "butoir", "buvable", "buvette", "cabanon", "cabine", "cachette", "cadeau", "cadre",
99980 "caféine", "caillou", "caisson", "calculer", "calepin", "calibre", "calmer", "calomnie", "calvaire", "camarade",
99981 "caméra", "camion", "campagne", "canal", "caneton", "canon", "cantine", "canular", "capable", "caporal",
99982 "caprice", "capsule", "capter", "capuche", "carabine", "carbone", "caresser", "caribou", "carnage", "carotte",
99983 "carreau", "carton", "cascade", "casier", "casque", "cassure", "causer", "caution", "cavalier", "caverne",
99984 "caviar", "cédille", "ceinture", "céleste", "cellule", "cendrier", "censurer", "central", "cercle", "cérébral",
99985 "cerise", "cerner", "cerveau", "cesser", "chagrin", "chaise", "chaleur", "chambre", "chance", "chapitre",
99986 "charbon", "chasseur", "chaton", "chausson", "chavirer", "chemise", "chenille", "chéquier", "chercher", "cheval",
99987 "chien", "chiffre", "chignon", "chimère", "chiot", "chlorure", "chocolat", "choisir", "chose", "chouette",
99988 "chrome", "chute", "cigare", "cigogne", "cimenter", "cinéma", "cintrer", "circuler", "cirer", "cirque",
99989 "citerne", "citoyen", "citron", "civil", "clairon", "clameur", "claquer", "classe", "clavier", "client",
99990 "cligner", "climat", "clivage", "cloche", "clonage", "cloporte", "cobalt", "cobra", "cocasse", "cocotier",
99991 "coder", "codifier", "coffre", "cogner", "cohésion", "coiffer", "coincer", "colère", "colibri", "colline",
99992 "colmater", "colonel", "combat", "comédie", "commande", "compact", "concert", "conduire", "confier", "congeler",
99993 "connoter", "consonne", "contact", "convexe", "copain", "copie", "corail", "corbeau", "cordage", "corniche",
99994 "corpus", "correct", "cortège", "cosmique", "costume", "coton", "coude", "coupure", "courage", "couteau",
99995 "couvrir", "coyote", "crabe", "crainte", "cravate", "crayon", "créature", "créditer", "crémeux", "creuser",
99996 "crevette", "cribler", "crier", "cristal", "critère", "croire", "croquer", "crotale", "crucial", "cruel",
99997 "crypter", "cubique", "cueillir", "cuillère", "cuisine", "cuivre", "culminer", "cultiver", "cumuler", "cupide",
99998 "curatif", "curseur", "cyanure", "cycle", "cylindre", "cynique", "daigner", "damier", "danger", "danseur",
99999 "dauphin", "débattre", "débiter", "déborder", "débrider", "débutant", "décaler", "décembre", "déchirer", "décider",
100000 "déclarer", "décorer", "décrire", "décupler", "dédale", "déductif", "déesse", "défensif", "défiler", "défrayer",
100001 "dégager", "dégivrer", "déglutir", "dégrafer", "déjeuner", "délice", "déloger", "demander", "demeurer", "démolir",
100002 "dénicher", "dénouer", "dentelle", "dénuder", "départ", "dépenser", "déphaser", "déplacer", "déposer", "déranger",
100003 "dérober", "désastre", "descente", "désert", "désigner", "désobéir", "dessiner", "destrier", "détacher", "détester",
100004 "détourer", "détresse", "devancer", "devenir", "deviner", "devoir", "diable", "dialogue", "diamant", "dicter",
100005 "différer", "digérer", "digital", "digne", "diluer", "dimanche", "diminuer", "dioxyde", "directif", "diriger",
100006 "discuter", "disposer", "dissiper", "distance", "divertir", "diviser", "docile", "docteur", "dogme", "doigt",
100007 "domaine", "domicile", "dompter", "donateur", "donjon", "donner", "dopamine", "dortoir", "dorure", "dosage",
100008 "doseur", "dossier", "dotation", "douanier", "double", "douceur", "douter", "doyen", "dragon", "draper",
100009 "dresser", "dribbler", "droiture", "duperie", "duplexe", "durable", "durcir", "dynastie", "éblouir", "écarter",
100010 "écharpe", "échelle", "éclairer", "éclipse", "éclore", "écluse", "école", "économie", "écorce", "écouter",
100011 "écraser", "écrémer", "écrivain", "écrou", "écume", "écureuil", "édifier", "éduquer", "effacer", "effectif",
100012 "effigie", "effort", "effrayer", "effusion", "égaliser", "égarer", "éjecter", "élaborer", "élargir", "électron",
100013 "élégant", "éléphant", "élève", "éligible", "élitisme", "éloge", "élucider", "éluder", "emballer", "embellir",
100014 "embryon", "émeraude", "émission", "emmener", "émotion", "émouvoir", "empereur", "employer", "emporter", "emprise",
100015 "émulsion", "encadrer", "enchère", "enclave", "encoche", "endiguer", "endosser", "endroit", "enduire", "énergie",
100016 "enfance", "enfermer", "enfouir", "engager", "engin", "englober", "énigme", "enjamber", "enjeu", "enlever",
100017 "ennemi", "ennuyeux", "enrichir", "enrobage", "enseigne", "entasser", "entendre", "entier", "entourer", "entraver",
100018 "énumérer", "envahir", "enviable", "envoyer", "enzyme", "éolien", "épaissir", "épargne", "épatant", "épaule",
100019 "épicerie", "épidémie", "épier", "épilogue", "épine", "épisode", "épitaphe", "époque", "épreuve", "éprouver",
100020 "épuisant", "équerre", "équipe", "ériger", "érosion", "erreur", "éruption", "escalier", "espadon", "espèce",
100021 "espiègle", "espoir", "esprit", "esquiver", "essayer", "essence", "essieu", "essorer", "estime", "estomac",
100022 "estrade", "étagère", "étaler", "étanche", "étatique", "éteindre", "étendoir", "éternel", "éthanol", "éthique",
100023 "ethnie", "étirer", "étoffer", "étoile", "étonnant", "étourdir", "étrange", "étroit", "étude", "euphorie",
100024 "évaluer", "évasion", "éventail", "évidence", "éviter", "évolutif", "évoquer", "exact", "exagérer", "exaucer",
100025 "exceller", "excitant", "exclusif", "excuse", "exécuter", "exemple", "exercer", "exhaler", "exhorter", "exigence",
100026 "exiler", "exister", "exotique", "expédier", "explorer", "exposer", "exprimer", "exquis", "extensif", "extraire",
100027 "exulter", "fable", "fabuleux", "facette", "facile", "facture", "faiblir", "falaise", "fameux", "famille",
100028 "farceur", "farfelu", "farine", "farouche", "fasciner", "fatal", "fatigue", "faucon", "fautif", "faveur",
100029 "favori", "fébrile", "féconder", "fédérer", "félin", "femme", "fémur", "fendoir", "féodal", "fermer",
100030 "féroce", "ferveur", "festival", "feuille", "feutre", "février", "fiasco", "ficeler", "fictif", "fidèle",
100031 "figure", "filature", "filetage", "filière", "filleul", "filmer", "filou", "filtrer", "financer", "finir",
100032 "fiole", "firme", "fissure", "fixer", "flairer", "flamme", "flasque", "flatteur", "fléau", "flèche",
100033 "fleur", "flexion", "flocon", "flore", "fluctuer", "fluide", "fluvial", "folie", "fonderie", "fongible",
100034 "fontaine", "forcer", "forgeron", "formuler", "fortune", "fossile", "foudre", "fougère", "fouiller", "foulure",
100035 "fourmi", "fragile", "fraise", "franchir", "frapper", "frayeur", "frégate", "freiner", "frelon", "frémir",
100036 "frénésie", "frère", "friable", "friction", "frisson", "frivole", "froid", "fromage", "frontal", "frotter",
100037 "fruit", "fugitif", "fuite", "fureur", "furieux", "furtif", "fusion", "futur", "gagner", "galaxie",
100038 "galerie", "gambader", "garantir", "gardien", "garnir", "garrigue", "gazelle", "gazon", "géant", "gélatine",
100039 "gélule", "gendarme", "général", "génie", "genou", "gentil", "géologie", "géomètre", "géranium", "germe",
100040 "gestuel", "geyser", "gibier", "gicler", "girafe", "givre", "glace", "glaive", "glisser", "globe",
100041 "gloire", "glorieux", "golfeur", "gomme", "gonfler", "gorge", "gorille", "goudron", "gouffre", "goulot",
100042 "goupille", "gourmand", "goutte", "graduel", "graffiti", "graine", "grand", "grappin", "gratuit", "gravir",
100043 "grenat", "griffure", "griller", "grimper", "grogner", "gronder", "grotte", "groupe", "gruger", "grutier",
100044 "gruyère", "guépard", "guerrier", "guide", "guimauve", "guitare", "gustatif", "gymnaste", "gyrostat", "habitude",
100045 "hachoir", "halte", "hameau", "hangar", "hanneton", "haricot", "harmonie", "harpon", "hasard", "hélium",
100046 "hématome", "herbe", "hérisson", "hermine", "héron", "hésiter", "heureux", "hiberner", "hibou", "hilarant",
100047 "histoire", "hiver", "homard", "hommage", "homogène", "honneur", "honorer", "honteux", "horde", "horizon",
100048 "horloge", "hormone", "horrible", "houleux", "housse", "hublot", "huileux", "humain", "humble", "humide",
100049 "humour", "hurler", "hydromel", "hygiène", "hymne", "hypnose", "idylle", "ignorer", "iguane", "illicite",
100050 "illusion", "image", "imbiber", "imiter", "immense", "immobile", "immuable", "impact", "impérial", "implorer",
100051 "imposer", "imprimer", "imputer", "incarner", "incendie", "incident", "incliner", "incolore", "indexer", "indice",
100052 "inductif", "inédit", "ineptie", "inexact", "infini", "infliger", "informer", "infusion", "ingérer", "inhaler",
100053 "inhiber", "injecter", "injure", "innocent", "inoculer", "inonder", "inscrire", "insecte", "insigne", "insolite",
100054 "inspirer", "instinct", "insulter", "intact", "intense", "intime", "intrigue", "intuitif", "inutile", "invasion",
100055 "inventer", "inviter", "invoquer", "ironique", "irradier", "irréel", "irriter", "isoler", "ivoire", "ivresse",
100056 "jaguar", "jaillir", "jambe", "janvier", "jardin", "jauger", "jaune", "javelot", "jetable", "jeton",
100057 "jeudi", "jeunesse", "joindre", "joncher", "jongler", "joueur", "jouissif", "journal", "jovial", "joyau",
100058 "joyeux", "jubiler", "jugement", "junior", "jupon", "juriste", "justice", "juteux", "juvénile", "kayak",
100059 "kimono", "kiosque", "label", "labial", "labourer", "lacérer", "lactose", "lagune", "laine", "laisser",
100060 "laitier", "lambeau", "lamelle", "lampe", "lanceur", "langage", "lanterne", "lapin", "largeur", "larme",
100061 "laurier", "lavabo", "lavoir", "lecture", "légal", "léger", "légume", "lessive", "lettre", "levier",
100062 "lexique", "lézard", "liasse", "libérer", "libre", "licence", "licorne", "liège", "lièvre", "ligature",
100063 "ligoter", "ligue", "limer", "limite", "limonade", "limpide", "linéaire", "lingot", "lionceau", "liquide",
100064 "lisière", "lister", "lithium", "litige", "littoral", "livreur", "logique", "lointain", "loisir", "lombric",
100065 "loterie", "louer", "lourd", "loutre", "louve", "loyal", "lubie", "lucide", "lucratif", "lueur",
100066 "lugubre", "luisant", "lumière", "lunaire", "lundi", "luron", "lutter", "luxueux", "machine", "magasin",
100067 "magenta", "magique", "maigre", "maillon", "maintien", "mairie", "maison", "majorer", "malaxer", "maléfice",
100068 "malheur", "malice", "mallette", "mammouth", "mandater", "maniable", "manquant", "manteau", "manuel", "marathon",
100069 "marbre", "marchand", "mardi", "maritime", "marqueur", "marron", "marteler", "mascotte", "massif", "matériel",
100070 "matière", "matraque", "maudire", "maussade", "mauve", "maximal", "méchant", "méconnu", "médaille", "médecin",
100071 "méditer", "méduse", "meilleur", "mélange", "mélodie", "membre", "mémoire", "menacer", "mener", "menhir",
100072 "mensonge", "mentor", "mercredi", "mérite", "merle", "messager", "mesure", "métal", "météore", "méthode",
100073 "métier", "meuble", "miauler", "microbe", "miette", "mignon", "migrer", "milieu", "million", "mimique",
100074 "mince", "minéral", "minimal", "minorer", "minute", "miracle", "miroiter", "missile", "mixte", "mobile",
100075 "moderne", "moelleux", "mondial", "moniteur", "monnaie", "monotone", "monstre", "montagne", "monument", "moqueur",
100076 "morceau", "morsure", "mortier", "moteur", "motif", "mouche", "moufle", "moulin", "mousson", "mouton",
100077 "mouvant", "multiple", "munition", "muraille", "murène", "murmure", "muscle", "muséum", "musicien", "mutation",
100078 "muter", "mutuel", "myriade", "myrtille", "mystère", "mythique", "nageur", "nappe", "narquois", "narrer",
100079 "natation", "nation", "nature", "naufrage", "nautique", "navire", "nébuleux", "nectar", "néfaste", "négation",
100080 "négliger", "négocier", "neige", "nerveux", "nettoyer", "neurone", "neutron", "neveu", "niche", "nickel",
100081 "nitrate", "niveau", "noble", "nocif", "nocturne", "noirceur", "noisette", "nomade", "nombreux", "nommer",
100082 "normatif", "notable", "notifier", "notoire", "nourrir", "nouveau", "novateur", "novembre", "novice", "nuage",
100083 "nuancer", "nuire", "nuisible", "numéro", "nuptial", "nuque", "nutritif", "obéir", "objectif", "obliger",
100084 "obscur", "observer", "obstacle", "obtenir", "obturer", "occasion", "occuper", "océan", "octobre", "octroyer",
100085 "octupler", "oculaire", "odeur", "odorant", "offenser", "officier", "offrir", "ogive", "oiseau", "oisillon",
100086 "olfactif", "olivier", "ombrage", "omettre", "onctueux", "onduler", "onéreux", "onirique", "opale", "opaque",
100087 "opérer", "opinion", "opportun", "opprimer", "opter", "optique", "orageux", "orange", "orbite", "ordonner",
100088 "oreille", "organe", "orgueil", "orifice", "ornement", "orque", "ortie", "osciller", "osmose", "ossature",
100089 "otarie", "ouragan", "ourson", "outil", "outrager", "ouvrage", "ovation", "oxyde", "oxygène", "ozone",
100090 "paisible", "palace", "palmarès", "palourde", "palper", "panache", "panda", "pangolin", "paniquer", "panneau",
100091 "panorama", "pantalon", "papaye", "papier", "papoter", "papyrus", "paradoxe", "parcelle", "paresse", "parfumer",
100092 "parler", "parole", "parrain", "parsemer", "partager", "parure", "parvenir", "passion", "pastèque", "paternel",
100093 "patience", "patron", "pavillon", "pavoiser", "payer", "paysage", "peigne", "peintre", "pelage", "pélican",
100094 "pelle", "pelouse", "peluche", "pendule", "pénétrer", "pénible", "pensif", "pénurie", "pépite", "péplum",
100095 "perdrix", "perforer", "période", "permuter", "perplexe", "persil", "perte", "peser", "pétale", "petit",
100096 "pétrir", "peuple", "pharaon", "phobie", "phoque", "photon", "phrase", "physique", "piano", "pictural",
100097 "pièce", "pierre", "pieuvre", "pilote", "pinceau", "pipette", "piquer", "pirogue", "piscine", "piston",
100098 "pivoter", "pixel", "pizza", "placard", "plafond", "plaisir", "planer", "plaque", "plastron", "plateau",
100099 "pleurer", "plexus", "pliage", "plomb", "plonger", "pluie", "plumage", "pochette", "poésie", "poète",
100100 "pointe", "poirier", "poisson", "poivre", "polaire", "policier", "pollen", "polygone", "pommade", "pompier",
100101 "ponctuel", "pondérer", "poney", "portique", "position", "posséder", "posture", "potager", "poteau", "potion",
100102 "pouce", "poulain", "poumon", "pourpre", "poussin", "pouvoir", "prairie", "pratique", "précieux", "prédire",
100103 "préfixe", "prélude", "prénom", "présence", "prétexte", "prévoir", "primitif", "prince", "prison", "priver",
100104 "problème", "procéder", "prodige", "profond", "progrès", "proie", "projeter", "prologue", "promener", "propre",
100105 "prospère", "protéger", "prouesse", "proverbe", "prudence", "pruneau", "psychose", "public", "puceron", "puiser",
100106 "pulpe", "pulsar", "punaise", "punitif", "pupitre", "purifier", "puzzle", "pyramide", "quasar", "querelle",
100107 "question", "quiétude", "quitter", "quotient", "racine", "raconter", "radieux", "ragondin", "raideur", "raisin",
100108 "ralentir", "rallonge", "ramasser", "rapide", "rasage", "ratisser", "ravager", "ravin", "rayonner", "réactif",
100109 "réagir", "réaliser", "réanimer", "recevoir", "réciter", "réclamer", "récolter", "recruter", "reculer", "recycler",
100110 "rédiger", "redouter", "refaire", "réflexe", "réformer", "refrain", "refuge", "régalien", "région", "réglage",
100111 "régulier", "réitérer", "rejeter", "rejouer", "relatif", "relever", "relief", "remarque", "remède", "remise",
100112 "remonter", "remplir", "remuer", "renard", "renfort", "renifler", "renoncer", "rentrer", "renvoi", "replier",
100113 "reporter", "reprise", "reptile", "requin", "réserve", "résineux", "résoudre", "respect", "rester", "résultat",
100114 "rétablir", "retenir", "réticule", "retomber", "retracer", "réunion", "réussir", "revanche", "revivre", "révolte",
100115 "révulsif", "richesse", "rideau", "rieur", "rigide", "rigoler", "rincer", "riposter", "risible", "risque",
100116 "rituel", "rival", "rivière", "rocheux", "romance", "rompre", "ronce", "rondin", "roseau", "rosier",
100117 "rotatif", "rotor", "rotule", "rouge", "rouille", "rouleau", "routine", "royaume", "ruban", "rubis",
100118 "ruche", "ruelle", "rugueux", "ruiner", "ruisseau", "ruser", "rustique", "rythme", "sabler", "saboter",
100119 "sabre", "sacoche", "safari", "sagesse", "saisir", "salade", "salive", "salon", "saluer", "samedi",
100120 "sanction", "sanglier", "sarcasme", "sardine", "saturer", "saugrenu", "saumon", "sauter", "sauvage", "savant",
100121 "savonner", "scalpel", "scandale", "scélérat", "scénario", "sceptre", "schéma", "science", "scinder", "score",
100122 "scrutin", "sculpter", "séance", "sécable", "sécher", "secouer", "sécréter", "sédatif", "séduire", "seigneur",
100123 "séjour", "sélectif", "semaine", "sembler", "semence", "séminal", "sénateur", "sensible", "sentence", "séparer",
100124 "séquence", "serein", "sergent", "sérieux", "serrure", "sérum", "service", "sésame", "sévir", "sevrage",
100125 "sextuple", "sidéral", "siècle", "siéger", "siffler", "sigle", "signal", "silence", "silicium", "simple",
100126 "sincère", "sinistre", "siphon", "sirop", "sismique", "situer", "skier", "social", "socle", "sodium",
100127 "soigneux", "soldat", "soleil", "solitude", "soluble", "sombre", "sommeil", "somnoler", "sonde", "songeur",
100128 "sonnette", "sonore", "sorcier", "sortir", "sosie", "sottise", "soucieux", "soudure", "souffle", "soulever",
100129 "soupape", "source", "soutirer", "souvenir", "spacieux", "spatial", "spécial", "sphère", "spiral", "stable",
100130 "station", "sternum", "stimulus", "stipuler", "strict", "studieux", "stupeur", "styliste", "sublime", "substrat",
100131 "subtil", "subvenir", "succès", "sucre", "suffixe", "suggérer", "suiveur", "sulfate", "superbe", "supplier",
100132 "surface", "suricate", "surmener", "surprise", "sursaut", "survie", "suspect", "syllabe", "symbole", "symétrie",
100133 "synapse", "syntaxe", "système", "tabac", "tablier", "tactile", "tailler", "talent", "talisman", "talonner",
100134 "tambour", "tamiser", "tangible", "tapis", "taquiner", "tarder", "tarif", "tartine", "tasse", "tatami",
100135 "tatouage", "taupe", "taureau", "taxer", "témoin", "temporel", "tenaille", "tendre", "teneur", "tenir",
100136 "tension", "terminer", "terne", "terrible", "tétine", "texte", "thème", "théorie", "thérapie", "thorax",
100137 "tibia", "tiède", "timide", "tirelire", "tiroir", "tissu", "titane", "titre", "tituber", "toboggan",
100138 "tolérant", "tomate", "tonique", "tonneau", "toponyme", "torche", "tordre", "tornade", "torpille", "torrent",
100139 "torse", "tortue", "totem", "toucher", "tournage", "tousser", "toxine", "traction", "trafic", "tragique",
100140 "trahir", "train", "trancher", "travail", "trèfle", "tremper", "trésor", "treuil", "triage", "tribunal",
100141 "tricoter", "trilogie", "triomphe", "tripler", "triturer", "trivial", "trombone", "tronc", "tropical", "troupeau",
100142 "tuile", "tulipe", "tumulte", "tunnel", "turbine", "tuteur", "tutoyer", "tuyau", "tympan", "typhon",
100143 "typique", "tyran", "ubuesque", "ultime", "ultrason", "unanime", "unifier", "union", "unique", "unitaire",
100144 "univers", "uranium", "urbain", "urticant", "usage", "usine", "usuel", "usure", "utile", "utopie",
100145 "vacarme", "vaccin", "vagabond", "vague", "vaillant", "vaincre", "vaisseau", "valable", "valise", "vallon",
100146 "valve", "vampire", "vanille", "vapeur", "varier", "vaseux", "vassal", "vaste", "vecteur", "vedette",
100147 "végétal", "véhicule", "veinard", "véloce", "vendredi", "vénérer", "venger", "venimeux", "ventouse", "verdure",
100148 "vérin", "vernir", "verrou", "verser", "vertu", "veston", "vétéran", "vétuste", "vexant", "vexer",
100149 "viaduc", "viande", "victoire", "vidange", "vidéo", "vignette", "vigueur", "vilain", "village", "vinaigre",
100150 "violon", "vipère", "virement", "virtuose", "virus", "visage", "viseur", "vision", "visqueux", "visuel",
100151 "vital", "vitesse", "viticole", "vitrine", "vivace", "vivipare", "vocation", "voguer", "voile", "voisin",
100152 "voiture", "volaille", "volcan", "voltiger", "volume", "vorace", "vortex", "voter", "vouloir", "voyage",
100153 "voyelle", "wagon", "xénon", "yacht", "zèbre", "zénith", "zeste", "zoologie"]
100154 </script>
100155 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
100156 WORDLISTS["italian"] = [
100157 "abaco", "abbaglio", "abbinato", "abete", "abisso", "abolire", "abrasivo", "abrogato", "accadere", "accenno",
100158 "accusato", "acetone", "achille", "acido", "acqua", "acre", "acrilico", "acrobata", "acuto", "adagio",
100159 "addebito", "addome", "adeguato", "aderire", "adipe", "adottare", "adulare", "affabile", "affetto", "affisso",
100160 "affranto", "aforisma", "afoso", "africano", "agave", "agente", "agevole", "aggancio", "agire", "agitare",
100161 "agonismo", "agricolo", "agrumeto", "aguzzo", "alabarda", "alato", "albatro", "alberato", "albo", "albume",
100162 "alce", "alcolico", "alettone", "alfa", "algebra", "aliante", "alibi", "alimento", "allagato", "allegro",
100163 "allievo", "allodola", "allusivo", "almeno", "alogeno", "alpaca", "alpestre", "altalena", "alterno", "alticcio",
100164 "altrove", "alunno", "alveolo", "alzare", "amalgama", "amanita", "amarena", "ambito", "ambrato", "ameba",
100165 "america", "ametista", "amico", "ammasso", "ammenda", "ammirare", "ammonito", "amore", "ampio", "ampliare",
100166 "amuleto", "anacardo", "anagrafe", "analista", "anarchia", "anatra", "anca", "ancella", "ancora", "andare",
100167 "andrea", "anello", "angelo", "angolare", "angusto", "anima", "annegare", "annidato", "anno", "annuncio",
100168 "anonimo", "anticipo", "anzi", "apatico", "apertura", "apode", "apparire", "appetito", "appoggio", "approdo",
100169 "appunto", "aprile", "arabica", "arachide", "aragosta", "araldica", "arancio", "aratura", "arazzo", "arbitro",
100170 "archivio", "ardito", "arenile", "argento", "argine", "arguto", "aria", "armonia", "arnese", "arredato",
100171 "arringa", "arrosto", "arsenico", "arso", "artefice", "arzillo", "asciutto", "ascolto", "asepsi", "asettico",
100172 "asfalto", "asino", "asola", "aspirato", "aspro", "assaggio", "asse", "assoluto", "assurdo", "asta",
100173 "astenuto", "astice", "astratto", "atavico", "ateismo", "atomico", "atono", "attesa", "attivare", "attorno",
100174 "attrito", "attuale", "ausilio", "austria", "autista", "autonomo", "autunno", "avanzato", "avere", "avvenire",
100175 "avviso", "avvolgere", "azione", "azoto", "azzimo", "azzurro", "babele", "baccano", "bacino", "baco",
100176 "badessa", "badilata", "bagnato", "baita", "balcone", "baldo", "balena", "ballata", "balzano", "bambino",
100177 "bandire", "baraonda", "barbaro", "barca", "baritono", "barlume", "barocco", "basilico", "basso", "batosta",
100178 "battuto", "baule", "bava", "bavosa", "becco", "beffa", "belgio", "belva", "benda", "benevole",
100179 "benigno", "benzina", "bere", "berlina", "beta", "bibita", "bici", "bidone", "bifido", "biga",
100180 "bilancia", "bimbo", "binocolo", "biologo", "bipede", "bipolare", "birbante", "birra", "biscotto", "bisesto",
100181 "bisnonno", "bisonte", "bisturi", "bizzarro", "blando", "blatta", "bollito", "bonifico", "bordo", "bosco",
100182 "botanico", "bottino", "bozzolo", "braccio", "bradipo", "brama", "branca", "bravura", "bretella", "brevetto",
100183 "brezza", "briglia", "brillante", "brindare", "broccolo", "brodo", "bronzina", "brullo", "bruno", "bubbone",
100184 "buca", "budino", "buffone", "buio", "bulbo", "buono", "burlone", "burrasca", "bussola", "busta",
100185 "cadetto", "caduco", "calamaro", "calcolo", "calesse", "calibro", "calmo", "caloria", "cambusa", "camerata",
100186 "camicia", "cammino", "camola", "campale", "canapa", "candela", "cane", "canino", "canotto", "cantina",
100187 "capace", "capello", "capitolo", "capogiro", "cappero", "capra", "capsula", "carapace", "carcassa", "cardo",
100188 "carisma", "carovana", "carretto", "cartolina", "casaccio", "cascata", "caserma", "caso", "cassone", "castello",
100189 "casuale", "catasta", "catena", "catrame", "cauto", "cavillo", "cedibile", "cedrata", "cefalo", "celebre",
100190 "cellulare", "cena", "cenone", "centesimo", "ceramica", "cercare", "certo", "cerume", "cervello", "cesoia",
100191 "cespo", "ceto", "chela", "chiaro", "chicca", "chiedere", "chimera", "china", "chirurgo", "chitarra",
100192 "ciao", "ciclismo", "cifrare", "cigno", "cilindro", "ciottolo", "circa", "cirrosi", "citrico", "cittadino",
100193 "ciuffo", "civetta", "civile", "classico", "clinica", "cloro", "cocco", "codardo", "codice", "coerente",
100194 "cognome", "collare", "colmato", "colore", "colposo", "coltivato", "colza", "coma", "cometa", "commando",
100195 "comodo", "computer", "comune", "conciso", "condurre", "conferma", "congelare", "coniuge", "connesso", "conoscere",
100196 "consumo", "continuo", "convegno", "coperto", "copione", "coppia", "copricapo", "corazza", "cordata", "coricato",
100197 "cornice", "corolla", "corpo", "corredo", "corsia", "cortese", "cosmico", "costante", "cottura", "covato",
100198 "cratere", "cravatta", "creato", "credere", "cremoso", "crescita", "creta", "criceto", "crinale", "crisi",
100199 "critico", "croce", "cronaca", "crostata", "cruciale", "crusca", "cucire", "cuculo", "cugino", "cullato",
100200 "cupola", "curatore", "cursore", "curvo", "cuscino", "custode", "dado", "daino", "dalmata", "damerino",
100201 "daniela", "dannoso", "danzare", "datato", "davanti", "davvero", "debutto", "decennio", "deciso", "declino",
100202 "decollo", "decreto", "dedicato", "definito", "deforme", "degno", "delegare", "delfino", "delirio", "delta",
100203 "demenza", "denotato", "dentro", "deposito", "derapata", "derivare", "deroga", "descritto", "deserto", "desiderio",
100204 "desumere", "detersivo", "devoto", "diametro", "dicembre", "diedro", "difeso", "diffuso", "digerire", "digitale",
100205 "diluvio", "dinamico", "dinnanzi", "dipinto", "diploma", "dipolo", "diradare", "dire", "dirotto", "dirupo",
100206 "disagio", "discreto", "disfare", "disgelo", "disposto", "distanza", "disumano", "dito", "divano", "divelto",
100207 "dividere", "divorato", "doblone", "docente", "doganale", "dogma", "dolce", "domato", "domenica", "dominare",
100208 "dondolo", "dono", "dormire", "dote", "dottore", "dovuto", "dozzina", "drago", "druido", "dubbio",
100209 "dubitare", "ducale", "duna", "duomo", "duplice", "duraturo", "ebano", "eccesso", "ecco", "eclissi",
100210 "economia", "edera", "edicola", "edile", "editoria", "educare", "egemonia", "egli", "egoismo", "egregio",
100211 "elaborato", "elargire", "elegante", "elencato", "eletto", "elevare", "elfico", "elica", "elmo", "elsa",
100212 "eluso", "emanato", "emblema", "emesso", "emiro", "emotivo", "emozione", "empirico", "emulo", "endemico",
100213 "enduro", "energia", "enfasi", "enoteca", "entrare", "enzima", "epatite", "epilogo", "episodio", "epocale",
100214 "eppure", "equatore", "erario", "erba", "erboso", "erede", "eremita", "erigere", "ermetico", "eroe",
100215 "erosivo", "errante", "esagono", "esame", "esanime", "esaudire", "esca", "esempio", "esercito", "esibito",
100216 "esigente", "esistere", "esito", "esofago", "esortato", "esoso", "espanso", "espresso", "essenza", "esso",
100217 "esteso", "estimare", "estonia", "estroso", "esultare", "etilico", "etnico", "etrusco", "etto", "euclideo",
100218 "europa", "evaso", "evidenza", "evitato", "evoluto", "evviva", "fabbrica", "faccenda", "fachiro", "falco",
100219 "famiglia", "fanale", "fanfara", "fango", "fantasma", "fare", "farfalla", "farinoso", "farmaco", "fascia",
100220 "fastoso", "fasullo", "faticare", "fato", "favoloso", "febbre", "fecola", "fede", "fegato", "felpa",
100221 "feltro", "femmina", "fendere", "fenomeno", "fermento", "ferro", "fertile", "fessura", "festivo", "fetta",
100222 "feudo", "fiaba", "fiducia", "fifa", "figurato", "filo", "finanza", "finestra", "finire", "fiore",
100223 "fiscale", "fisico", "fiume", "flacone", "flamenco", "flebo", "flemma", "florido", "fluente", "fluoro",
100224 "fobico", "focaccia", "focoso", "foderato", "foglio", "folata", "folclore", "folgore", "fondente", "fonetico",
100225 "fonia", "fontana", "forbito", "forchetta", "foresta", "formica", "fornaio", "foro", "fortezza", "forzare",
100226 "fosfato", "fosso", "fracasso", "frana", "frassino", "fratello", "freccetta", "frenata", "fresco", "frigo",
100227 "frollino", "fronde", "frugale", "frutta", "fucilata", "fucsia", "fuggente", "fulmine", "fulvo", "fumante",
100228 "fumetto", "fumoso", "fune", "funzione", "fuoco", "furbo", "furgone", "furore", "fuso", "futile",
100229 "gabbiano", "gaffe", "galateo", "gallina", "galoppo", "gambero", "gamma", "garanzia", "garbo", "garofano",
100230 "garzone", "gasdotto", "gasolio", "gastrico", "gatto", "gaudio", "gazebo", "gazzella", "geco", "gelatina",
100231 "gelso", "gemello", "gemmato", "gene", "genitore", "gennaio", "genotipo", "gergo", "ghepardo", "ghiaccio",
100232 "ghisa", "giallo", "gilda", "ginepro", "giocare", "gioiello", "giorno", "giove", "girato", "girone",
100233 "gittata", "giudizio", "giurato", "giusto", "globulo", "glutine", "gnomo", "gobba", "golf", "gomito",
100234 "gommone", "gonfio", "gonna", "governo", "gracile", "grado", "grafico", "grammo", "grande", "grattare",
100235 "gravoso", "grazia", "greca", "gregge", "grifone", "grigio", "grinza", "grotta", "gruppo", "guadagno",
100236 "guaio", "guanto", "guardare", "gufo", "guidare", "ibernato", "icona", "identico", "idillio", "idolo",
100237 "idra", "idrico", "idrogeno", "igiene", "ignaro", "ignorato", "ilare", "illeso", "illogico", "illudere",
100238 "imballo", "imbevuto", "imbocco", "imbuto", "immane", "immerso", "immolato", "impacco", "impeto", "impiego",
100239 "importo", "impronta", "inalare", "inarcare", "inattivo", "incanto", "incendio", "inchino", "incisivo", "incluso",
100240 "incontro", "incrocio", "incubo", "indagine", "india", "indole", "inedito", "infatti", "infilare", "inflitto",
100241 "ingaggio", "ingegno", "inglese", "ingordo", "ingrosso", "innesco", "inodore", "inoltrare", "inondato", "insano",
100242 "insetto", "insieme", "insonnia", "insulina", "intasato", "intero", "intonaco", "intuito", "inumidire", "invalido",
100243 "invece", "invito", "iperbole", "ipnotico", "ipotesi", "ippica", "iride", "irlanda", "ironico", "irrigato",
100244 "irrorare", "isolato", "isotopo", "isterico", "istituto", "istrice", "italia", "iterare", "labbro", "labirinto",
100245 "lacca", "lacerato", "lacrima", "lacuna", "laddove", "lago", "lampo", "lancetta", "lanterna", "lardoso",
100246 "larga", "laringe", "lastra", "latenza", "latino", "lattuga", "lavagna", "lavoro", "legale", "leggero",
100247 "lembo", "lentezza", "lenza", "leone", "lepre", "lesivo", "lessato", "lesto", "letterale", "leva",
100248 "levigato", "libero", "lido", "lievito", "lilla", "limatura", "limitare", "limpido", "lineare", "lingua",
100249 "liquido", "lira", "lirica", "lisca", "lite", "litigio", "livrea", "locanda", "lode", "logica",
100250 "lombare", "londra", "longevo", "loquace", "lorenzo", "loto", "lotteria", "luce", "lucidato", "lumaca",
100251 "luminoso", "lungo", "lupo", "luppolo", "lusinga", "lusso", "lutto", "macabro", "macchina", "macero",
100252 "macinato", "madama", "magico", "maglia", "magnete", "magro", "maiolica", "malafede", "malgrado", "malinteso",
100253 "malsano", "malto", "malumore", "mana", "mancia", "mandorla", "mangiare", "manifesto", "mannaro", "manovra",
100254 "mansarda", "mantide", "manubrio", "mappa", "maratona", "marcire", "maretta", "marmo", "marsupio", "maschera",
100255 "massaia", "mastino", "materasso", "matricola", "mattone", "maturo", "mazurca", "meandro", "meccanico", "mecenate",
100256 "medesimo", "meditare", "mega", "melassa", "melis", "melodia", "meninge", "meno", "mensola", "mercurio",
100257 "merenda", "merlo", "meschino", "mese", "messere", "mestolo", "metallo", "metodo", "mettere", "miagolare",
100258 "mica", "micelio", "michele", "microbo", "midollo", "miele", "migliore", "milano", "milite", "mimosa",
100259 "minerale", "mini", "minore", "mirino", "mirtillo", "miscela", "missiva", "misto", "misurare", "mitezza",
100260 "mitigare", "mitra", "mittente", "mnemonico", "modello", "modifica", "modulo", "mogano", "mogio", "mole",
100261 "molosso", "monastero", "monco", "mondina", "monetario", "monile", "monotono", "monsone", "montato", "monviso",
100262 "mora", "mordere", "morsicato", "mostro", "motivato", "motosega", "motto", "movenza", "movimento", "mozzo",
100263 "mucca", "mucosa", "muffa", "mughetto", "mugnaio", "mulatto", "mulinello", "multiplo", "mummia", "munto",
100264 "muovere", "murale", "musa", "muscolo", "musica", "mutevole", "muto", "nababbo", "nafta", "nanometro",
100265 "narciso", "narice", "narrato", "nascere", "nastrare", "naturale", "nautica", "naviglio", "nebulosa", "necrosi",
100266 "negativo", "negozio", "nemmeno", "neofita", "neretto", "nervo", "nessuno", "nettuno", "neutrale", "neve",
100267 "nevrotico", "nicchia", "ninfa", "nitido", "nobile", "nocivo", "nodo", "nome", "nomina", "nordico",
100268 "normale", "norvegese", "nostrano", "notare", "notizia", "notturno", "novella", "nucleo", "nulla", "numero",
100269 "nuovo", "nutrire", "nuvola", "nuziale", "oasi", "obbedire", "obbligo", "obelisco", "oblio", "obolo",
100270 "obsoleto", "occasione", "occhio", "occidente", "occorrere", "occultare", "ocra", "oculato", "odierno", "odorare",
100271 "offerta", "offrire", "offuscato", "oggetto", "oggi", "ognuno", "olandese", "olfatto", "oliato", "oliva",
100272 "ologramma", "oltre", "omaggio", "ombelico", "ombra", "omega", "omissione", "ondoso", "onere", "onice",
100273 "onnivoro", "onorevole", "onta", "operato", "opinione", "opposto", "oracolo", "orafo", "ordine", "orecchino",
100274 "orefice", "orfano", "organico", "origine", "orizzonte", "orma", "ormeggio", "ornativo", "orologio", "orrendo",
100275 "orribile", "ortensia", "ortica", "orzata", "orzo", "osare", "oscurare", "osmosi", "ospedale", "ospite",
100276 "ossa", "ossidare", "ostacolo", "oste", "otite", "otre", "ottagono", "ottimo", "ottobre", "ovale",
100277 "ovest", "ovino", "oviparo", "ovocito", "ovunque", "ovviare", "ozio", "pacchetto", "pace", "pacifico",
100278 "padella", "padrone", "paese", "paga", "pagina", "palazzina", "palesare", "pallido", "palo", "palude",
100279 "pandoro", "pannello", "paolo", "paonazzo", "paprica", "parabola", "parcella", "parere", "pargolo", "pari",
100280 "parlato", "parola", "partire", "parvenza", "parziale", "passivo", "pasticca", "patacca", "patologia", "pattume",
100281 "pavone", "peccato", "pedalare", "pedonale", "peggio", "peloso", "penare", "pendice", "penisola", "pennuto",
100282 "penombra", "pensare", "pentola", "pepe", "pepita", "perbene", "percorso", "perdonato", "perforare", "pergamena",
100283 "periodo", "permesso", "perno", "perplesso", "persuaso", "pertugio", "pervaso", "pesatore", "pesista", "peso",
100284 "pestifero", "petalo", "pettine", "petulante", "pezzo", "piacere", "pianta", "piattino", "piccino", "picozza",
100285 "piega", "pietra", "piffero", "pigiama", "pigolio", "pigro", "pila", "pilifero", "pillola", "pilota",
100286 "pimpante", "pineta", "pinna", "pinolo", "pioggia", "piombo", "piramide", "piretico", "pirite", "pirolisi",
100287 "pitone", "pizzico", "placebo", "planare", "plasma", "platano", "plenario", "pochezza", "poderoso", "podismo",
100288 "poesia", "poggiare", "polenta", "poligono", "pollice", "polmonite", "polpetta", "polso", "poltrona", "polvere",
100289 "pomice", "pomodoro", "ponte", "popoloso", "porfido", "poroso", "porpora", "porre", "portata", "posa",
100290 "positivo", "possesso", "postulato", "potassio", "potere", "pranzo", "prassi", "pratica", "precluso", "predica",
100291 "prefisso", "pregiato", "prelievo", "premere", "prenotare", "preparato", "presenza", "pretesto", "prevalso", "prima",
100292 "principe", "privato", "problema", "procura", "produrre", "profumo", "progetto", "prolunga", "promessa", "pronome",
100293 "proposta", "proroga", "proteso", "prova", "prudente", "prugna", "prurito", "psiche", "pubblico", "pudica",
100294 "pugilato", "pugno", "pulce", "pulito", "pulsante", "puntare", "pupazzo", "pupilla", "puro", "quadro",
100295 "qualcosa", "quasi", "querela", "quota", "raccolto", "raddoppio", "radicale", "radunato", "raffica", "ragazzo",
100296 "ragione", "ragno", "ramarro", "ramingo", "ramo", "randagio", "rantolare", "rapato", "rapina", "rappreso",
100297 "rasatura", "raschiato", "rasente", "rassegna", "rastrello", "rata", "ravveduto", "reale", "recepire", "recinto",
100298 "recluta", "recondito", "recupero", "reddito", "redimere", "regalato", "registro", "regola", "regresso", "relazione",
100299 "remare", "remoto", "renna", "replica", "reprimere", "reputare", "resa", "residente", "responso", "restauro",
100300 "rete", "retina", "retorica", "rettifica", "revocato", "riassunto", "ribadire", "ribelle", "ribrezzo", "ricarica",
100301 "ricco", "ricevere", "riciclato", "ricordo", "ricreduto", "ridicolo", "ridurre", "rifasare", "riflesso", "riforma",
100302 "rifugio", "rigare", "rigettato", "righello", "rilassato", "rilevato", "rimanere", "rimbalzo", "rimedio", "rimorchio",
100303 "rinascita", "rincaro", "rinforzo", "rinnovo", "rinomato", "rinsavito", "rintocco", "rinuncia", "rinvenire", "riparato",
100304 "ripetuto", "ripieno", "riportare", "ripresa", "ripulire", "risata", "rischio", "riserva", "risibile", "riso",
100305 "rispetto", "ristoro", "risultato", "risvolto", "ritardo", "ritegno", "ritmico", "ritrovo", "riunione", "riva",
100306 "riverso", "rivincita", "rivolto", "rizoma", "roba", "robotico", "robusto", "roccia", "roco", "rodaggio",
100307 "rodere", "roditore", "rogito", "rollio", "romantico", "rompere", "ronzio", "rosolare", "rospo", "rotante",
100308 "rotondo", "rotula", "rovescio", "rubizzo", "rubrica", "ruga", "rullino", "rumine", "rumoroso", "ruolo",
100309 "rupe", "russare", "rustico", "sabato", "sabbiare", "sabotato", "sagoma", "salasso", "saldatura", "salgemma",
100310 "salivare", "salmone", "salone", "saltare", "saluto", "salvo", "sapere", "sapido", "saporito", "saraceno",
100311 "sarcasmo", "sarto", "sassoso", "satellite", "satira", "satollo", "saturno", "savana", "savio", "saziato",
100312 "sbadiglio", "sbalzo", "sbancato", "sbarra", "sbattere", "sbavare", "sbendare", "sbirciare", "sbloccato", "sbocciato",
100313 "sbrinare", "sbruffone", "sbuffare", "scabroso", "scadenza", "scala", "scambiare", "scandalo", "scapola", "scarso",
100314 "scatenare", "scavato", "scelto", "scenico", "scettro", "scheda", "schiena", "sciarpa", "scienza", "scindere",
100315 "scippo", "sciroppo", "scivolo", "sclerare", "scodella", "scolpito", "scomparto", "sconforto", "scoprire", "scorta",
100316 "scossone", "scozzese", "scriba", "scrollare", "scrutinio", "scuderia", "scultore", "scuola", "scuro", "scusare",
100317 "sdebitare", "sdoganare", "seccatura", "secondo", "sedano", "seggiola", "segnalato", "segregato", "seguito", "selciato",
100318 "selettivo", "sella", "selvaggio", "semaforo", "sembrare", "seme", "seminato", "sempre", "senso", "sentire",
100319 "sepolto", "sequenza", "serata", "serbato", "sereno", "serio", "serpente", "serraglio", "servire", "sestina",
100320 "setola", "settimana", "sfacelo", "sfaldare", "sfamato", "sfarzoso", "sfaticato", "sfera", "sfida", "sfilato",
100321 "sfinge", "sfocato", "sfoderare", "sfogo", "sfoltire", "sforzato", "sfratto", "sfruttato", "sfuggito", "sfumare",
100322 "sfuso", "sgabello", "sgarbato", "sgonfiare", "sgorbio", "sgrassato", "sguardo", "sibilo", "siccome", "sierra",
100323 "sigla", "signore", "silenzio", "sillaba", "simbolo", "simpatico", "simulato", "sinfonia", "singolo", "sinistro",
100324 "sino", "sintesi", "sinusoide", "sipario", "sisma", "sistole", "situato", "slitta", "slogatura", "sloveno",
100325 "smarrito", "smemorato", "smentito", "smeraldo", "smilzo", "smontare", "smottato", "smussato", "snellire", "snervato",
100326 "snodo", "sobbalzo", "sobrio", "soccorso", "sociale", "sodale", "soffitto", "sogno", "soldato", "solenne",
100327 "solido", "sollazzo", "solo", "solubile", "solvente", "somatico", "somma", "sonda", "sonetto", "sonnifero",
100328 "sopire", "soppeso", "sopra", "sorgere", "sorpasso", "sorriso", "sorso", "sorteggio", "sorvolato", "sospiro",
100329 "sosta", "sottile", "spada", "spalla", "spargere", "spatola", "spavento", "spazzola", "specie", "spedire",
100330 "spegnere", "spelatura", "speranza", "spessore", "spettrale", "spezzato", "spia", "spigoloso", "spillato", "spinoso",
100331 "spirale", "splendido", "sportivo", "sposo", "spranga", "sprecare", "spronato", "spruzzo", "spuntino", "squillo",
100332 "sradicare", "srotolato", "stabile", "stacco", "staffa", "stagnare", "stampato", "stantio", "starnuto", "stasera",
100333 "statuto", "stelo", "steppa", "sterzo", "stiletto", "stima", "stirpe", "stivale", "stizzoso", "stonato",
100334 "storico", "strappo", "stregato", "stridulo", "strozzare", "strutto", "stuccare", "stufo", "stupendo", "subentro",
100335 "succoso", "sudore", "suggerito", "sugo", "sultano", "suonare", "superbo", "supporto", "surgelato", "surrogato",
100336 "sussurro", "sutura", "svagare", "svedese", "sveglio", "svelare", "svenuto", "svezia", "sviluppo", "svista",
100337 "svizzera", "svolta", "svuotare", "tabacco", "tabulato", "tacciare", "taciturno", "tale", "talismano", "tampone",
100338 "tannino", "tara", "tardivo", "targato", "tariffa", "tarpare", "tartaruga", "tasto", "tattico", "taverna",
100339 "tavolata", "tazza", "teca", "tecnico", "telefono", "temerario", "tempo", "temuto", "tendone", "tenero",
100340 "tensione", "tentacolo", "teorema", "terme", "terrazzo", "terzetto", "tesi", "tesserato", "testato", "tetro",
100341 "tettoia", "tifare", "tigella", "timbro", "tinto", "tipico", "tipografo", "tiraggio", "tiro", "titanio",
100342 "titolo", "titubante", "tizio", "tizzone", "toccare", "tollerare", "tolto", "tombola", "tomo", "tonfo",
100343 "tonsilla", "topazio", "topologia", "toppa", "torba", "tornare", "torrone", "tortora", "toscano", "tossire",
100344 "tostatura", "totano", "trabocco", "trachea", "trafila", "tragedia", "tralcio", "tramonto", "transito", "trapano",
100345 "trarre", "trasloco", "trattato", "trave", "treccia", "tremolio", "trespolo", "tributo", "tricheco", "trifoglio",
100346 "trillo", "trincea", "trio", "tristezza", "triturato", "trivella", "tromba", "trono", "troppo", "trottola",
100347 "trovare", "truccato", "tubatura", "tuffato", "tulipano", "tumulto", "tunisia", "turbare", "turchino", "tuta",
100348 "tutela", "ubicato", "uccello", "uccisore", "udire", "uditivo", "uffa", "ufficio", "uguale", "ulisse",
100349 "ultimato", "umano", "umile", "umorismo", "uncinetto", "ungere", "ungherese", "unicorno", "unificato", "unisono",
100350 "unitario", "unte", "uovo", "upupa", "uragano", "urgenza", "urlo", "usanza", "usato", "uscito",
100351 "usignolo", "usuraio", "utensile", "utilizzo", "utopia", "vacante", "vaccinato", "vagabondo", "vagliato", "valanga",
100352 "valgo", "valico", "valletta", "valoroso", "valutare", "valvola", "vampata", "vangare", "vanitoso", "vano",
100353 "vantaggio", "vanvera", "vapore", "varano", "varcato", "variante", "vasca", "vedetta", "vedova", "veduto",
100354 "vegetale", "veicolo", "velcro", "velina", "velluto", "veloce", "venato", "vendemmia", "vento", "verace",
100355 "verbale", "vergogna", "verifica", "vero", "verruca", "verticale", "vescica", "vessillo", "vestale", "veterano",
100356 "vetrina", "vetusto", "viandante", "vibrante", "vicenda", "vichingo", "vicinanza", "vidimare", "vigilia", "vigneto",
100357 "vigore", "vile", "villano", "vimini", "vincitore", "viola", "vipera", "virgola", "virologo", "virulento",
100358 "viscoso", "visione", "vispo", "vissuto", "visura", "vita", "vitello", "vittima", "vivanda", "vivido",
100359 "viziare", "voce", "voga", "volatile", "volere", "volpe", "voragine", "vulcano", "zampogna", "zanna",
100360 "zappato", "zattera", "zavorra", "zefiro", "zelante", "zelo", "zenzero", "zerbino", "zibetto", "zinco",
100361 "zircone", "zitto", "zolla", "zotico", "zucchero", "zufolo", "zulu", "zuppa"]
100362 </script>
100363 <script>/*
100364 * Copyright (c) 2013 Pavol Rusnak
100365 *
100366 * Permission is hereby granted, free of charge, to any person obtaining a copy of
100367 * this software and associated documentation files (the "Software"), to deal in
100368 * the Software without restriction, including without limitation the rights to
100369 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
100370 * of the Software, and to permit persons to whom the Software is furnished to do
100371 * so, subject to the following conditions:
100372 *
100373 * The above copyright notice and this permission notice shall be included in all
100374 * copies or substantial portions of the Software.
100375 *
100376 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
100377 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
100378 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
100379 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
100380 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
100381 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
100382 */
100383
100384 /*
100385 * Javascript port from python by Ian Coleman
100386 *
100387 * Requires code from sjcl
100388 * https://github.com/bitwiseshiftleft/sjcl
100389 */
100390
100391 var Mnemonic = function(language) {
100392
100393 var PBKDF2_ROUNDS = 2048;
100394 var RADIX = 2048;
100395
100396 var self = this;
100397 var wordlist = [];
100398
100399 var hmacSHA512 = function(key) {
100400 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
100401 this.encrypt = function() {
100402 return hasher.encrypt.apply(hasher, arguments);
100403 };
100404 };
100405
100406 function init() {
100407 wordlist = WORDLISTS[language];
100408 if (wordlist.length != RADIX) {
100409 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
100410 throw err;
100411 }
100412 }
100413
100414 self.generate = function(strength) {
100415 strength = strength || 128;
100416 var r = strength % 32;
100417 if (r > 0) {
100418 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
100419 }
100420 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
100421 if (!hasStrongCrypto) {
100422 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
100423 }
100424 var buffer = new Uint8Array(strength / 8);
100425 var data = crypto.getRandomValues(buffer);
100426 return self.toMnemonic(data);
100427 }
100428
100429 self.toMnemonic = function(byteArray) {
100430 if (byteArray.length % 4 > 0) {
100431 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
100432 }
100433
100434 //h = hashlib.sha256(data).hexdigest()
100435 var data = byteArrayToWordArray(byteArray);
100436 var hash = sjcl.hash.sha256.hash(data);
100437 var h = sjcl.codec.hex.fromBits(hash);
100438
100439 // b is a binary string, eg '00111010101100...'
100440 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
100441 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
100442 //
100443 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
100444 // c = bin(int(h, 16))[2:].zfill(256)
100445 // d = c[:len(data) * 8 / 32]
100446 var a = byteArrayToBinaryString(byteArray);
100447 var c = zfill(hexStringToBinaryString(h), 256);
100448 var d = c.substring(0, byteArray.length * 8 / 32);
100449 // b = line1 + line2
100450 var b = a + d;
100451
100452 var result = [];
100453 var blen = b.length / 11;
100454 for (var i=0; i<blen; i++) {
100455 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
100456 result.push(wordlist[idx]);
100457 }
100458 return self.joinWords(result);
100459 }
100460
100461 self.check = function(mnemonic) {
100462 var mnemonic = self.splitWords(mnemonic);
100463 if (mnemonic.length == 0 || mnemonic.length % 3 > 0) {
100464 return false
100465 }
100466 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
100467 var idx = [];
100468 for (var i=0; i<mnemonic.length; i++) {
100469 var word = mnemonic[i];
100470 var wordIndex = wordlist.indexOf(word);
100471 if (wordIndex == -1) {
100472 return false;
100473 }
100474 var binaryIndex = zfill(wordIndex.toString(2), 11);
100475 idx.push(binaryIndex);
100476 }
100477 var b = idx.join('');
100478 var l = b.length;
100479 //d = b[:l / 33 * 32]
100480 //h = b[-l / 33:]
100481 var d = b.substring(0, l / 33 * 32);
100482 var h = b.substring(l - l / 33, l);
100483 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
100484 var nd = binaryStringToWordArray(d);
100485 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
100486 var ndHash = sjcl.hash.sha256.hash(nd);
100487 var ndHex = sjcl.codec.hex.fromBits(ndHash);
100488 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
100489 var nh = ndBstr.substring(0,l/33);
100490 return h == nh;
100491 }
100492
100493 self.toSeed = function(mnemonic, passphrase) {
100494 passphrase = passphrase || '';
100495 mnemonic = self.joinWords(self.splitWords(mnemonic)); // removes duplicate blanks
100496 var mnemonicNormalized = self.normalizeString(mnemonic);
100497 passphrase = self.normalizeString(passphrase)
100498 passphrase = "mnemonic" + passphrase;
100499 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonicNormalized);
100500 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
100501 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
100502 var hashHex = sjcl.codec.hex.fromBits(result);
100503 return hashHex;
100504 }
100505
100506 self.splitWords = function(mnemonic) {
100507 return mnemonic.split(/\s/g).filter(function(x) { return x.length; });
100508 }
100509
100510 self.joinWords = function(words) {
100511 // Set space correctly depending on the language
100512 // see https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md#japanese
100513 var space = " ";
100514 if (language == "japanese") {
100515 space = "\u3000"; // ideographic space
100516 }
100517 return words.join(space);
100518 }
100519
100520 self.normalizeString = function(str) {
100521 if (typeof str.normalize == "function") {
100522 return str.normalize("NFKD");
100523 }
100524 else {
100525 // TODO decide how to handle this in the future.
100526 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
100527 return str;
100528 }
100529 }
100530
100531 function byteArrayToWordArray(data) {
100532 var a = [];
100533 for (var i=0; i<data.length/4; i++) {
100534 v = 0;
100535 v += data[i*4 + 0] << 8 * 3;
100536 v += data[i*4 + 1] << 8 * 2;
100537 v += data[i*4 + 2] << 8 * 1;
100538 v += data[i*4 + 3] << 8 * 0;
100539 a.push(v);
100540 }
100541 return a;
100542 }
100543
100544 function byteArrayToBinaryString(data) {
100545 var bin = "";
100546 for (var i=0; i<data.length; i++) {
100547 bin += zfill(data[i].toString(2), 8);
100548 }
100549 return bin;
100550 }
100551
100552 function hexStringToBinaryString(hexString) {
100553 binaryString = "";
100554 for (var i=0; i<hexString.length; i++) {
100555 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
100556 }
100557 return binaryString;
100558 }
100559
100560 function binaryStringToWordArray(binary) {
100561 var aLen = binary.length / 32;
100562 var a = [];
100563 for (var i=0; i<aLen; i++) {
100564 var valueStr = binary.substring(0,32);
100565 var value = parseInt(valueStr, 2);
100566 a.push(value);
100567 binary = binary.slice(32);
100568 }
100569 return a;
100570 }
100571
100572 // Pad a numeric string on the left with zero digits until the given width
100573 // is reached.
100574 // Note this differs to the python implementation because it does not
100575 // handle numbers starting with a sign.
100576 function zfill(source, length) {
100577 source = source.toString();
100578 while (source.length < length) {
100579 source = '0' + source;
100580 }
100581 return source;
100582 }
100583
100584 init();
100585
100586 }
100587 </script>
100588 <script>/*
100589 JavaScript BigInteger library version 0.9.1
100590 http://silentmatt.com/biginteger/
100591
100592 Copyright (c) 2009 Matthew Crumley <email@matthewcrumley.com>
100593 Copyright (c) 2010,2011 by John Tobey <John.Tobey@gmail.com>
100594 Licensed under the MIT license.
100595
100596 Support for arbitrary internal representation base was added by
100597 Vitaly Magerya.
100598 */
100599
100600 /*
100601 File: biginteger.js
100602
100603 Exports:
100604
100605 <BigInteger>
100606 */
100607 (function(exports) {
100608 "use strict";
100609 /*
100610 Class: BigInteger
100611 An arbitrarily-large integer.
100612
100613 <BigInteger> objects should be considered immutable. None of the "built-in"
100614 methods modify *this* or their arguments. All properties should be
100615 considered private.
100616
100617 All the methods of <BigInteger> instances can be called "statically". The
100618 static versions are convenient if you don't already have a <BigInteger>
100619 object.
100620
100621 As an example, these calls are equivalent.
100622
100623 > BigInteger(4).multiply(5); // returns BigInteger(20);
100624 > BigInteger.multiply(4, 5); // returns BigInteger(20);
100625
100626 > var a = 42;
100627 > var a = BigInteger.toJSValue("0b101010"); // Not completely useless...
100628 */
100629
100630 var CONSTRUCT = {}; // Unique token to call "private" version of constructor
100631
100632 /*
100633 Constructor: BigInteger()
100634 Convert a value to a <BigInteger>.
100635
100636 Although <BigInteger()> is the constructor for <BigInteger> objects, it is
100637 best not to call it as a constructor. If *n* is a <BigInteger> object, it is
100638 simply returned as-is. Otherwise, <BigInteger()> is equivalent to <parse>
100639 without a radix argument.
100640
100641 > var n0 = BigInteger(); // Same as <BigInteger.ZERO>
100642 > var n1 = BigInteger("123"); // Create a new <BigInteger> with value 123
100643 > var n2 = BigInteger(123); // Create a new <BigInteger> with value 123
100644 > var n3 = BigInteger(n2); // Return n2, unchanged
100645
100646 The constructor form only takes an array and a sign. *n* must be an
100647 array of numbers in little-endian order, where each digit is between 0
100648 and BigInteger.base. The second parameter sets the sign: -1 for
100649 negative, +1 for positive, or 0 for zero. The array is *not copied and
100650 may be modified*. If the array contains only zeros, the sign parameter
100651 is ignored and is forced to zero.
100652
100653 > new BigInteger([5], -1): create a new BigInteger with value -5
100654
100655 Parameters:
100656
100657 n - Value to convert to a <BigInteger>.
100658
100659 Returns:
100660
100661 A <BigInteger> value.
100662
100663 See Also:
100664
100665 <parse>, <BigInteger>
100666 */
100667 function BigInteger(n, s, token) {
100668 if (token !== CONSTRUCT) {
100669 if (n instanceof BigInteger) {
100670 return n;
100671 }
100672 else if (typeof n === "undefined") {
100673 return ZERO;
100674 }
100675 return BigInteger.parse(n);
100676 }
100677
100678 n = n || []; // Provide the nullary constructor for subclasses.
100679 while (n.length && !n[n.length - 1]) {
100680 --n.length;
100681 }
100682 this._d = n;
100683 this._s = n.length ? (s || 1) : 0;
100684 }
100685
100686 BigInteger._construct = function(n, s) {
100687 return new BigInteger(n, s, CONSTRUCT);
100688 };
100689
100690 // Base-10 speedup hacks in parse, toString, exp10 and log functions
100691 // require base to be a power of 10. 10^7 is the largest such power
100692 // that won't cause a precision loss when digits are multiplied.
100693 var BigInteger_base = 10000000;
100694 var BigInteger_base_log10 = 7;
100695
100696 BigInteger.base = BigInteger_base;
100697 BigInteger.base_log10 = BigInteger_base_log10;
100698
100699 var ZERO = new BigInteger([], 0, CONSTRUCT);
100700 // Constant: ZERO
100701 // <BigInteger> 0.
100702 BigInteger.ZERO = ZERO;
100703
100704 var ONE = new BigInteger([1], 1, CONSTRUCT);
100705 // Constant: ONE
100706 // <BigInteger> 1.
100707 BigInteger.ONE = ONE;
100708
100709 var M_ONE = new BigInteger(ONE._d, -1, CONSTRUCT);
100710 // Constant: M_ONE
100711 // <BigInteger> -1.
100712 BigInteger.M_ONE = M_ONE;
100713
100714 // Constant: _0
100715 // Shortcut for <ZERO>.
100716 BigInteger._0 = ZERO;
100717
100718 // Constant: _1
100719 // Shortcut for <ONE>.
100720 BigInteger._1 = ONE;
100721
100722 /*
100723 Constant: small
100724 Array of <BigIntegers> from 0 to 36.
100725
100726 These are used internally for parsing, but useful when you need a "small"
100727 <BigInteger>.
100728
100729 See Also:
100730
100731 <ZERO>, <ONE>, <_0>, <_1>
100732 */
100733 BigInteger.small = [
100734 ZERO,
100735 ONE,
100736 /* Assuming BigInteger_base > 36 */
100737 new BigInteger( [2], 1, CONSTRUCT),
100738 new BigInteger( [3], 1, CONSTRUCT),
100739 new BigInteger( [4], 1, CONSTRUCT),
100740 new BigInteger( [5], 1, CONSTRUCT),
100741 new BigInteger( [6], 1, CONSTRUCT),
100742 new BigInteger( [7], 1, CONSTRUCT),
100743 new BigInteger( [8], 1, CONSTRUCT),
100744 new BigInteger( [9], 1, CONSTRUCT),
100745 new BigInteger([10], 1, CONSTRUCT),
100746 new BigInteger([11], 1, CONSTRUCT),
100747 new BigInteger([12], 1, CONSTRUCT),
100748 new BigInteger([13], 1, CONSTRUCT),
100749 new BigInteger([14], 1, CONSTRUCT),
100750 new BigInteger([15], 1, CONSTRUCT),
100751 new BigInteger([16], 1, CONSTRUCT),
100752 new BigInteger([17], 1, CONSTRUCT),
100753 new BigInteger([18], 1, CONSTRUCT),
100754 new BigInteger([19], 1, CONSTRUCT),
100755 new BigInteger([20], 1, CONSTRUCT),
100756 new BigInteger([21], 1, CONSTRUCT),
100757 new BigInteger([22], 1, CONSTRUCT),
100758 new BigInteger([23], 1, CONSTRUCT),
100759 new BigInteger([24], 1, CONSTRUCT),
100760 new BigInteger([25], 1, CONSTRUCT),
100761 new BigInteger([26], 1, CONSTRUCT),
100762 new BigInteger([27], 1, CONSTRUCT),
100763 new BigInteger([28], 1, CONSTRUCT),
100764 new BigInteger([29], 1, CONSTRUCT),
100765 new BigInteger([30], 1, CONSTRUCT),
100766 new BigInteger([31], 1, CONSTRUCT),
100767 new BigInteger([32], 1, CONSTRUCT),
100768 new BigInteger([33], 1, CONSTRUCT),
100769 new BigInteger([34], 1, CONSTRUCT),
100770 new BigInteger([35], 1, CONSTRUCT),
100771 new BigInteger([36], 1, CONSTRUCT)
100772 ];
100773
100774 // Used for parsing/radix conversion
100775 BigInteger.digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
100776
100777 /*
100778 Method: toString
100779 Convert a <BigInteger> to a string.
100780
100781 When *base* is greater than 10, letters are upper case.
100782
100783 Parameters:
100784
100785 base - Optional base to represent the number in (default is base 10).
100786 Must be between 2 and 36 inclusive, or an Error will be thrown.
100787
100788 Returns:
100789
100790 The string representation of the <BigInteger>.
100791 */
100792 BigInteger.prototype.toString = function(base) {
100793 base = +base || 10;
100794 if (base < 2 || base > 36) {
100795 throw new Error("illegal radix " + base + ".");
100796 }
100797 if (this._s === 0) {
100798 return "0";
100799 }
100800 if (base === 10) {
100801 var str = this._s < 0 ? "-" : "";
100802 str += this._d[this._d.length - 1].toString();
100803 for (var i = this._d.length - 2; i >= 0; i--) {
100804 var group = this._d[i].toString();
100805 while (group.length < BigInteger_base_log10) group = '0' + group;
100806 str += group;
100807 }
100808 return str;
100809 }
100810 else {
100811 var numerals = BigInteger.digits;
100812 base = BigInteger.small[base];
100813 var sign = this._s;
100814
100815 var n = this.abs();
100816 var digits = [];
100817 var digit;
100818
100819 while (n._s !== 0) {
100820 var divmod = n.divRem(base);
100821 n = divmod[0];
100822 digit = divmod[1];
100823 // TODO: This could be changed to unshift instead of reversing at the end.
100824 // Benchmark both to compare speeds.
100825 digits.push(numerals[digit.valueOf()]);
100826 }
100827 return (sign < 0 ? "-" : "") + digits.reverse().join("");
100828 }
100829 };
100830
100831 // Verify strings for parsing
100832 BigInteger.radixRegex = [
100833 /^$/,
100834 /^$/,
100835 /^[01]*$/,
100836 /^[012]*$/,
100837 /^[0-3]*$/,
100838 /^[0-4]*$/,
100839 /^[0-5]*$/,
100840 /^[0-6]*$/,
100841 /^[0-7]*$/,
100842 /^[0-8]*$/,
100843 /^[0-9]*$/,
100844 /^[0-9aA]*$/,
100845 /^[0-9abAB]*$/,
100846 /^[0-9abcABC]*$/,
100847 /^[0-9a-dA-D]*$/,
100848 /^[0-9a-eA-E]*$/,
100849 /^[0-9a-fA-F]*$/,
100850 /^[0-9a-gA-G]*$/,
100851 /^[0-9a-hA-H]*$/,
100852 /^[0-9a-iA-I]*$/,
100853 /^[0-9a-jA-J]*$/,
100854 /^[0-9a-kA-K]*$/,
100855 /^[0-9a-lA-L]*$/,
100856 /^[0-9a-mA-M]*$/,
100857 /^[0-9a-nA-N]*$/,
100858 /^[0-9a-oA-O]*$/,
100859 /^[0-9a-pA-P]*$/,
100860 /^[0-9a-qA-Q]*$/,
100861 /^[0-9a-rA-R]*$/,
100862 /^[0-9a-sA-S]*$/,
100863 /^[0-9a-tA-T]*$/,
100864 /^[0-9a-uA-U]*$/,
100865 /^[0-9a-vA-V]*$/,
100866 /^[0-9a-wA-W]*$/,
100867 /^[0-9a-xA-X]*$/,
100868 /^[0-9a-yA-Y]*$/,
100869 /^[0-9a-zA-Z]*$/
100870 ];
100871
100872 /*
100873 Function: parse
100874 Parse a string into a <BigInteger>.
100875
100876 *base* is optional but, if provided, must be from 2 to 36 inclusive. If
100877 *base* is not provided, it will be guessed based on the leading characters
100878 of *s* as follows:
100879
100880 - "0x" or "0X": *base* = 16
100881 - "0c" or "0C": *base* = 8
100882 - "0b" or "0B": *base* = 2
100883 - else: *base* = 10
100884
100885 If no base is provided, or *base* is 10, the number can be in exponential
100886 form. For example, these are all valid:
100887
100888 > BigInteger.parse("1e9"); // Same as "1000000000"
100889 > BigInteger.parse("1.234*10^3"); // Same as 1234
100890 > BigInteger.parse("56789 * 10 ** -2"); // Same as 567
100891
100892 If any characters fall outside the range defined by the radix, an exception
100893 will be thrown.
100894
100895 Parameters:
100896
100897 s - The string to parse.
100898 base - Optional radix (default is to guess based on *s*).
100899
100900 Returns:
100901
100902 a <BigInteger> instance.
100903 */
100904 BigInteger.parse = function(s, base) {
100905 // Expands a number in exponential form to decimal form.
100906 // expandExponential("-13.441*10^5") === "1344100";
100907 // expandExponential("1.12300e-1") === "0.112300";
100908 // expandExponential(1000000000000000000000000000000) === "1000000000000000000000000000000";
100909 function expandExponential(str) {
100910 str = str.replace(/\s*[*xX]\s*10\s*(\^|\*\*)\s*/, "e");
100911
100912 return str.replace(/^([+\-])?(\d+)\.?(\d*)[eE]([+\-]?\d+)$/, function(x, s, n, f, c) {
100913 c = +c;
100914 var l = c < 0;
100915 var i = n.length + c;
100916 x = (l ? n : f).length;
100917 c = ((c = Math.abs(c)) >= x ? c - x + l : 0);
100918 var z = (new Array(c + 1)).join("0");
100919 var r = n + f;
100920 return (s || "") + (l ? r = z + r : r += z).substr(0, i += l ? z.length : 0) + (i < r.length ? "." + r.substr(i) : "");
100921 });
100922 }
100923
100924 s = s.toString();
100925 if (typeof base === "undefined" || +base === 10) {
100926 s = expandExponential(s);
100927 }
100928
100929 var prefixRE;
100930 if (typeof base === "undefined") {
100931 prefixRE = '0[xcb]';
100932 }
100933 else if (base == 16) {
100934 prefixRE = '0x';
100935 }
100936 else if (base == 8) {
100937 prefixRE = '0c';
100938 }
100939 else if (base == 2) {
100940 prefixRE = '0b';
100941 }
100942 else {
100943 prefixRE = '';
100944 }
100945 var parts = new RegExp('^([+\\-]?)(' + prefixRE + ')?([0-9a-z]*)(?:\\.\\d*)?$', 'i').exec(s);
100946 if (parts) {
100947 var sign = parts[1] || "+";
100948 var baseSection = parts[2] || "";
100949 var digits = parts[3] || "";
100950
100951 if (typeof base === "undefined") {
100952 // Guess base
100953 if (baseSection === "0x" || baseSection === "0X") { // Hex
100954 base = 16;
100955 }
100956 else if (baseSection === "0c" || baseSection === "0C") { // Octal
100957 base = 8;
100958 }
100959 else if (baseSection === "0b" || baseSection === "0B") { // Binary
100960 base = 2;
100961 }
100962 else {
100963 base = 10;
100964 }
100965 }
100966 else if (base < 2 || base > 36) {
100967 throw new Error("Illegal radix " + base + ".");
100968 }
100969
100970 base = +base;
100971
100972 // Check for digits outside the range
100973 if (!(BigInteger.radixRegex[base].test(digits))) {
100974 throw new Error("Bad digit for radix " + base);
100975 }
100976
100977 // Strip leading zeros, and convert to array
100978 digits = digits.replace(/^0+/, "").split("");
100979 if (digits.length === 0) {
100980 return ZERO;
100981 }
100982
100983 // Get the sign (we know it's not zero)
100984 sign = (sign === "-") ? -1 : 1;
100985
100986 // Optimize 10
100987 if (base == 10) {
100988 var d = [];
100989 while (digits.length >= BigInteger_base_log10) {
100990 d.push(parseInt(digits.splice(digits.length-BigInteger.base_log10, BigInteger.base_log10).join(''), 10));
100991 }
100992 d.push(parseInt(digits.join(''), 10));
100993 return new BigInteger(d, sign, CONSTRUCT);
100994 }
100995
100996 // Do the conversion
100997 var d = ZERO;
100998 base = BigInteger.small[base];
100999 var small = BigInteger.small;
101000 for (var i = 0; i < digits.length; i++) {
101001 d = d.multiply(base).add(small[parseInt(digits[i], 36)]);
101002 }
101003 return new BigInteger(d._d, sign, CONSTRUCT);
101004 }
101005 else {
101006 throw new Error("Invalid BigInteger format: " + s);
101007 }
101008 };
101009
101010 /*
101011 Function: add
101012 Add two <BigIntegers>.
101013
101014 Parameters:
101015
101016 n - The number to add to *this*. Will be converted to a <BigInteger>.
101017
101018 Returns:
101019
101020 The numbers added together.
101021
101022 See Also:
101023
101024 <subtract>, <multiply>, <quotient>, <next>
101025 */
101026 BigInteger.prototype.add = function(n) {
101027 if (this._s === 0) {
101028 return BigInteger(n);
101029 }
101030
101031 n = BigInteger(n);
101032 if (n._s === 0) {
101033 return this;
101034 }
101035 if (this._s !== n._s) {
101036 n = n.negate();
101037 return this.subtract(n);
101038 }
101039
101040 var a = this._d;
101041 var b = n._d;
101042 var al = a.length;
101043 var bl = b.length;
101044 var sum = new Array(Math.max(al, bl) + 1);
101045 var size = Math.min(al, bl);
101046 var carry = 0;
101047 var digit;
101048
101049 for (var i = 0; i < size; i++) {
101050 digit = a[i] + b[i] + carry;
101051 sum[i] = digit % BigInteger_base;
101052 carry = (digit / BigInteger_base) | 0;
101053 }
101054 if (bl > al) {
101055 a = b;
101056 al = bl;
101057 }
101058 for (i = size; carry && i < al; i++) {
101059 digit = a[i] + carry;
101060 sum[i] = digit % BigInteger_base;
101061 carry = (digit / BigInteger_base) | 0;
101062 }
101063 if (carry) {
101064 sum[i] = carry;
101065 }
101066
101067 for ( ; i < al; i++) {
101068 sum[i] = a[i];
101069 }
101070
101071 return new BigInteger(sum, this._s, CONSTRUCT);
101072 };
101073
101074 /*
101075 Function: negate
101076 Get the additive inverse of a <BigInteger>.
101077
101078 Returns:
101079
101080 A <BigInteger> with the same magnatude, but with the opposite sign.
101081
101082 See Also:
101083
101084 <abs>
101085 */
101086 BigInteger.prototype.negate = function() {
101087 return new BigInteger(this._d, (-this._s) | 0, CONSTRUCT);
101088 };
101089
101090 /*
101091 Function: abs
101092 Get the absolute value of a <BigInteger>.
101093
101094 Returns:
101095
101096 A <BigInteger> with the same magnatude, but always positive (or zero).
101097
101098 See Also:
101099
101100 <negate>
101101 */
101102 BigInteger.prototype.abs = function() {
101103 return (this._s < 0) ? this.negate() : this;
101104 };
101105
101106 /*
101107 Function: subtract
101108 Subtract two <BigIntegers>.
101109
101110 Parameters:
101111
101112 n - The number to subtract from *this*. Will be converted to a <BigInteger>.
101113
101114 Returns:
101115
101116 The *n* subtracted from *this*.
101117
101118 See Also:
101119
101120 <add>, <multiply>, <quotient>, <prev>
101121 */
101122 BigInteger.prototype.subtract = function(n) {
101123 if (this._s === 0) {
101124 return BigInteger(n).negate();
101125 }
101126
101127 n = BigInteger(n);
101128 if (n._s === 0) {
101129 return this;
101130 }
101131 if (this._s !== n._s) {
101132 n = n.negate();
101133 return this.add(n);
101134 }
101135
101136 var m = this;
101137 // negative - negative => -|a| - -|b| => -|a| + |b| => |b| - |a|
101138 if (this._s < 0) {
101139 m = new BigInteger(n._d, 1, CONSTRUCT);
101140 n = new BigInteger(this._d, 1, CONSTRUCT);
101141 }
101142
101143 // Both are positive => a - b
101144 var sign = m.compareAbs(n);
101145 if (sign === 0) {
101146 return ZERO;
101147 }
101148 else if (sign < 0) {
101149 // swap m and n
101150 var t = n;
101151 n = m;
101152 m = t;
101153 }
101154
101155 // a > b
101156 var a = m._d;
101157 var b = n._d;
101158 var al = a.length;
101159 var bl = b.length;
101160 var diff = new Array(al); // al >= bl since a > b
101161 var borrow = 0;
101162 var i;
101163 var digit;
101164
101165 for (i = 0; i < bl; i++) {
101166 digit = a[i] - borrow - b[i];
101167 if (digit < 0) {
101168 digit += BigInteger_base;
101169 borrow = 1;
101170 }
101171 else {
101172 borrow = 0;
101173 }
101174 diff[i] = digit;
101175 }
101176 for (i = bl; i < al; i++) {
101177 digit = a[i] - borrow;
101178 if (digit < 0) {
101179 digit += BigInteger_base;
101180 }
101181 else {
101182 diff[i++] = digit;
101183 break;
101184 }
101185 diff[i] = digit;
101186 }
101187 for ( ; i < al; i++) {
101188 diff[i] = a[i];
101189 }
101190
101191 return new BigInteger(diff, sign, CONSTRUCT);
101192 };
101193
101194 (function() {
101195 function addOne(n, sign) {
101196 var a = n._d;
101197 var sum = a.slice();
101198 var carry = true;
101199 var i = 0;
101200
101201 while (true) {
101202 var digit = (a[i] || 0) + 1;
101203 sum[i] = digit % BigInteger_base;
101204 if (digit <= BigInteger_base - 1) {
101205 break;
101206 }
101207 ++i;
101208 }
101209
101210 return new BigInteger(sum, sign, CONSTRUCT);
101211 }
101212
101213 function subtractOne(n, sign) {
101214 var a = n._d;
101215 var sum = a.slice();
101216 var borrow = true;
101217 var i = 0;
101218
101219 while (true) {
101220 var digit = (a[i] || 0) - 1;
101221 if (digit < 0) {
101222 sum[i] = digit + BigInteger_base;
101223 }
101224 else {
101225 sum[i] = digit;
101226 break;
101227 }
101228 ++i;
101229 }
101230
101231 return new BigInteger(sum, sign, CONSTRUCT);
101232 }
101233
101234 /*
101235 Function: next
101236 Get the next <BigInteger> (add one).
101237
101238 Returns:
101239
101240 *this* + 1.
101241
101242 See Also:
101243
101244 <add>, <prev>
101245 */
101246 BigInteger.prototype.next = function() {
101247 switch (this._s) {
101248 case 0:
101249 return ONE;
101250 case -1:
101251 return subtractOne(this, -1);
101252 // case 1:
101253 default:
101254 return addOne(this, 1);
101255 }
101256 };
101257
101258 /*
101259 Function: prev
101260 Get the previous <BigInteger> (subtract one).
101261
101262 Returns:
101263
101264 *this* - 1.
101265
101266 See Also:
101267
101268 <next>, <subtract>
101269 */
101270 BigInteger.prototype.prev = function() {
101271 switch (this._s) {
101272 case 0:
101273 return M_ONE;
101274 case -1:
101275 return addOne(this, -1);
101276 // case 1:
101277 default:
101278 return subtractOne(this, 1);
101279 }
101280 };
101281 })();
101282
101283 /*
101284 Function: compareAbs
101285 Compare the absolute value of two <BigIntegers>.
101286
101287 Calling <compareAbs> is faster than calling <abs> twice, then <compare>.
101288
101289 Parameters:
101290
101291 n - The number to compare to *this*. Will be converted to a <BigInteger>.
101292
101293 Returns:
101294
101295 -1, 0, or +1 if *|this|* is less than, equal to, or greater than *|n|*.
101296
101297 See Also:
101298
101299 <compare>, <abs>
101300 */
101301 BigInteger.prototype.compareAbs = function(n) {
101302 if (this === n) {
101303 return 0;
101304 }
101305
101306 if (!(n instanceof BigInteger)) {
101307 if (!isFinite(n)) {
101308 return(isNaN(n) ? n : -1);
101309 }
101310 n = BigInteger(n);
101311 }
101312
101313 if (this._s === 0) {
101314 return (n._s !== 0) ? -1 : 0;
101315 }
101316 if (n._s === 0) {
101317 return 1;
101318 }
101319
101320 var l = this._d.length;
101321 var nl = n._d.length;
101322 if (l < nl) {
101323 return -1;
101324 }
101325 else if (l > nl) {
101326 return 1;
101327 }
101328
101329 var a = this._d;
101330 var b = n._d;
101331 for (var i = l-1; i >= 0; i--) {
101332 if (a[i] !== b[i]) {
101333 return a[i] < b[i] ? -1 : 1;
101334 }
101335 }
101336
101337 return 0;
101338 };
101339
101340 /*
101341 Function: compare
101342 Compare two <BigIntegers>.
101343
101344 Parameters:
101345
101346 n - The number to compare to *this*. Will be converted to a <BigInteger>.
101347
101348 Returns:
101349
101350 -1, 0, or +1 if *this* is less than, equal to, or greater than *n*.
101351
101352 See Also:
101353
101354 <compareAbs>, <isPositive>, <isNegative>, <isUnit>
101355 */
101356 BigInteger.prototype.compare = function(n) {
101357 if (this === n) {
101358 return 0;
101359 }
101360
101361 n = BigInteger(n);
101362
101363 if (this._s === 0) {
101364 return -n._s;
101365 }
101366
101367 if (this._s === n._s) { // both positive or both negative
101368 var cmp = this.compareAbs(n);
101369 return cmp * this._s;
101370 }
101371 else {
101372 return this._s;
101373 }
101374 };
101375
101376 /*
101377 Function: isUnit
101378 Return true iff *this* is either 1 or -1.
101379
101380 Returns:
101381
101382 true if *this* compares equal to <BigInteger.ONE> or <BigInteger.M_ONE>.
101383
101384 See Also:
101385
101386 <isZero>, <isNegative>, <isPositive>, <compareAbs>, <compare>,
101387 <BigInteger.ONE>, <BigInteger.M_ONE>
101388 */
101389 BigInteger.prototype.isUnit = function() {
101390 return this === ONE ||
101391 this === M_ONE ||
101392 (this._d.length === 1 && this._d[0] === 1);
101393 };
101394
101395 /*
101396 Function: multiply
101397 Multiply two <BigIntegers>.
101398
101399 Parameters:
101400
101401 n - The number to multiply *this* by. Will be converted to a
101402 <BigInteger>.
101403
101404 Returns:
101405
101406 The numbers multiplied together.
101407
101408 See Also:
101409
101410 <add>, <subtract>, <quotient>, <square>
101411 */
101412 BigInteger.prototype.multiply = function(n) {
101413 // TODO: Consider adding Karatsuba multiplication for large numbers
101414 if (this._s === 0) {
101415 return ZERO;
101416 }
101417
101418 n = BigInteger(n);
101419 if (n._s === 0) {
101420 return ZERO;
101421 }
101422 if (this.isUnit()) {
101423 if (this._s < 0) {
101424 return n.negate();
101425 }
101426 return n;
101427 }
101428 if (n.isUnit()) {
101429 if (n._s < 0) {
101430 return this.negate();
101431 }
101432 return this;
101433 }
101434 if (this === n) {
101435 return this.square();
101436 }
101437
101438 var r = (this._d.length >= n._d.length);
101439 var a = (r ? this : n)._d; // a will be longer than b
101440 var b = (r ? n : this)._d;
101441 var al = a.length;
101442 var bl = b.length;
101443
101444 var pl = al + bl;
101445 var partial = new Array(pl);
101446 var i;
101447 for (i = 0; i < pl; i++) {
101448 partial[i] = 0;
101449 }
101450
101451 for (i = 0; i < bl; i++) {
101452 var carry = 0;
101453 var bi = b[i];
101454 var jlimit = al + i;
101455 var digit;
101456 for (var j = i; j < jlimit; j++) {
101457 digit = partial[j] + bi * a[j - i] + carry;
101458 carry = (digit / BigInteger_base) | 0;
101459 partial[j] = (digit % BigInteger_base) | 0;
101460 }
101461 if (carry) {
101462 digit = partial[j] + carry;
101463 carry = (digit / BigInteger_base) | 0;
101464 partial[j] = digit % BigInteger_base;
101465 }
101466 }
101467 return new BigInteger(partial, this._s * n._s, CONSTRUCT);
101468 };
101469
101470 // Multiply a BigInteger by a single-digit native number
101471 // Assumes that this and n are >= 0
101472 // This is not really intended to be used outside the library itself
101473 BigInteger.prototype.multiplySingleDigit = function(n) {
101474 if (n === 0 || this._s === 0) {
101475 return ZERO;
101476 }
101477 if (n === 1) {
101478 return this;
101479 }
101480
101481 var digit;
101482 if (this._d.length === 1) {
101483 digit = this._d[0] * n;
101484 if (digit >= BigInteger_base) {
101485 return new BigInteger([(digit % BigInteger_base)|0,
101486 (digit / BigInteger_base)|0], 1, CONSTRUCT);
101487 }
101488 return new BigInteger([digit], 1, CONSTRUCT);
101489 }
101490
101491 if (n === 2) {
101492 return this.add(this);
101493 }
101494 if (this.isUnit()) {
101495 return new BigInteger([n], 1, CONSTRUCT);
101496 }
101497
101498 var a = this._d;
101499 var al = a.length;
101500
101501 var pl = al + 1;
101502 var partial = new Array(pl);
101503 for (var i = 0; i < pl; i++) {
101504 partial[i] = 0;
101505 }
101506
101507 var carry = 0;
101508 for (var j = 0; j < al; j++) {
101509 digit = n * a[j] + carry;
101510 carry = (digit / BigInteger_base) | 0;
101511 partial[j] = (digit % BigInteger_base) | 0;
101512 }
101513 if (carry) {
101514 partial[j] = carry;
101515 }
101516
101517 return new BigInteger(partial, 1, CONSTRUCT);
101518 };
101519
101520 /*
101521 Function: square
101522 Multiply a <BigInteger> by itself.
101523
101524 This is slightly faster than regular multiplication, since it removes the
101525 duplicated multiplcations.
101526
101527 Returns:
101528
101529 > this.multiply(this)
101530
101531 See Also:
101532 <multiply>
101533 */
101534 BigInteger.prototype.square = function() {
101535 // Normally, squaring a 10-digit number would take 100 multiplications.
101536 // Of these 10 are unique diagonals, of the remaining 90 (100-10), 45 are repeated.
101537 // This procedure saves (N*(N-1))/2 multiplications, (e.g., 45 of 100 multiplies).
101538 // Based on code by Gary Darby, Intellitech Systems Inc., www.DelphiForFun.org
101539
101540 if (this._s === 0) {
101541 return ZERO;
101542 }
101543 if (this.isUnit()) {
101544 return ONE;
101545 }
101546
101547 var digits = this._d;
101548 var length = digits.length;
101549 var imult1 = new Array(length + length + 1);
101550 var product, carry, k;
101551 var i;
101552
101553 // Calculate diagonal
101554 for (i = 0; i < length; i++) {
101555 k = i * 2;
101556 product = digits[i] * digits[i];
101557 carry = (product / BigInteger_base) | 0;
101558 imult1[k] = product % BigInteger_base;
101559 imult1[k + 1] = carry;
101560 }
101561
101562 // Calculate repeating part
101563 for (i = 0; i < length; i++) {
101564 carry = 0;
101565 k = i * 2 + 1;
101566 for (var j = i + 1; j < length; j++, k++) {
101567 product = digits[j] * digits[i] * 2 + imult1[k] + carry;
101568 carry = (product / BigInteger_base) | 0;
101569 imult1[k] = product % BigInteger_base;
101570 }
101571 k = length + i;
101572 var digit = carry + imult1[k];
101573 carry = (digit / BigInteger_base) | 0;
101574 imult1[k] = digit % BigInteger_base;
101575 imult1[k + 1] += carry;
101576 }
101577
101578 return new BigInteger(imult1, 1, CONSTRUCT);
101579 };
101580
101581 /*
101582 Function: quotient
101583 Divide two <BigIntegers> and truncate towards zero.
101584
101585 <quotient> throws an exception if *n* is zero.
101586
101587 Parameters:
101588
101589 n - The number to divide *this* by. Will be converted to a <BigInteger>.
101590
101591 Returns:
101592
101593 The *this* / *n*, truncated to an integer.
101594
101595 See Also:
101596
101597 <add>, <subtract>, <multiply>, <divRem>, <remainder>
101598 */
101599 BigInteger.prototype.quotient = function(n) {
101600 return this.divRem(n)[0];
101601 };
101602
101603 /*
101604 Function: divide
101605 Deprecated synonym for <quotient>.
101606 */
101607 BigInteger.prototype.divide = BigInteger.prototype.quotient;
101608
101609 /*
101610 Function: remainder
101611 Calculate the remainder of two <BigIntegers>.
101612
101613 <remainder> throws an exception if *n* is zero.
101614
101615 Parameters:
101616
101617 n - The remainder after *this* is divided *this* by *n*. Will be
101618 converted to a <BigInteger>.
101619
101620 Returns:
101621
101622 *this* % *n*.
101623
101624 See Also:
101625
101626 <divRem>, <quotient>
101627 */
101628 BigInteger.prototype.remainder = function(n) {
101629 return this.divRem(n)[1];
101630 };
101631
101632 /*
101633 Function: divRem
101634 Calculate the integer quotient and remainder of two <BigIntegers>.
101635
101636 <divRem> throws an exception if *n* is zero.
101637
101638 Parameters:
101639
101640 n - The number to divide *this* by. Will be converted to a <BigInteger>.
101641
101642 Returns:
101643
101644 A two-element array containing the quotient and the remainder.
101645
101646 > a.divRem(b)
101647
101648 is exactly equivalent to
101649
101650 > [a.quotient(b), a.remainder(b)]
101651
101652 except it is faster, because they are calculated at the same time.
101653
101654 See Also:
101655
101656 <quotient>, <remainder>
101657 */
101658 BigInteger.prototype.divRem = function(n) {
101659 n = BigInteger(n);
101660 if (n._s === 0) {
101661 throw new Error("Divide by zero");
101662 }
101663 if (this._s === 0) {
101664 return [ZERO, ZERO];
101665 }
101666 if (n._d.length === 1) {
101667 return this.divRemSmall(n._s * n._d[0]);
101668 }
101669
101670 // Test for easy cases -- |n1| <= |n2|
101671 switch (this.compareAbs(n)) {
101672 case 0: // n1 == n2
101673 return [this._s === n._s ? ONE : M_ONE, ZERO];
101674 case -1: // |n1| < |n2|
101675 return [ZERO, this];
101676 }
101677
101678 var sign = this._s * n._s;
101679 var a = n.abs();
101680 var b_digits = this._d;
101681 var b_index = b_digits.length;
101682 var digits = n._d.length;
101683 var quot = [];
101684 var guess;
101685
101686 var part = new BigInteger([], 0, CONSTRUCT);
101687
101688 while (b_index) {
101689 part._d.unshift(b_digits[--b_index]);
101690 part = new BigInteger(part._d, 1, CONSTRUCT);
101691
101692 if (part.compareAbs(n) < 0) {
101693 quot.push(0);
101694 continue;
101695 }
101696 if (part._s === 0) {
101697 guess = 0;
101698 }
101699 else {
101700 var xlen = part._d.length, ylen = a._d.length;
101701 var highx = part._d[xlen-1]*BigInteger_base + part._d[xlen-2];
101702 var highy = a._d[ylen-1]*BigInteger_base + a._d[ylen-2];
101703 if (part._d.length > a._d.length) {
101704 // The length of part._d can either match a._d length,
101705 // or exceed it by one.
101706 highx = (highx+1)*BigInteger_base;
101707 }
101708 guess = Math.ceil(highx/highy);
101709 }
101710 do {
101711 var check = a.multiplySingleDigit(guess);
101712 if (check.compareAbs(part) <= 0) {
101713 break;
101714 }
101715 guess--;
101716 } while (guess);
101717
101718 quot.push(guess);
101719 if (!guess) {
101720 continue;
101721 }
101722 var diff = part.subtract(check);
101723 part._d = diff._d.slice();
101724 }
101725
101726 return [new BigInteger(quot.reverse(), sign, CONSTRUCT),
101727 new BigInteger(part._d, this._s, CONSTRUCT)];
101728 };
101729
101730 // Throws an exception if n is outside of (-BigInteger.base, -1] or
101731 // [1, BigInteger.base). It's not necessary to call this, since the
101732 // other division functions will call it if they are able to.
101733 BigInteger.prototype.divRemSmall = function(n) {
101734 var r;
101735 n = +n;
101736 if (n === 0) {
101737 throw new Error("Divide by zero");
101738 }
101739
101740 var n_s = n < 0 ? -1 : 1;
101741 var sign = this._s * n_s;
101742 n = Math.abs(n);
101743
101744 if (n < 1 || n >= BigInteger_base) {
101745 throw new Error("Argument out of range");
101746 }
101747
101748 if (this._s === 0) {
101749 return [ZERO, ZERO];
101750 }
101751
101752 if (n === 1 || n === -1) {
101753 return [(sign === 1) ? this.abs() : new BigInteger(this._d, sign, CONSTRUCT), ZERO];
101754 }
101755
101756 // 2 <= n < BigInteger_base
101757
101758 // divide a single digit by a single digit
101759 if (this._d.length === 1) {
101760 var q = new BigInteger([(this._d[0] / n) | 0], 1, CONSTRUCT);
101761 r = new BigInteger([(this._d[0] % n) | 0], 1, CONSTRUCT);
101762 if (sign < 0) {
101763 q = q.negate();
101764 }
101765 if (this._s < 0) {
101766 r = r.negate();
101767 }
101768 return [q, r];
101769 }
101770
101771 var digits = this._d.slice();
101772 var quot = new Array(digits.length);
101773 var part = 0;
101774 var diff = 0;
101775 var i = 0;
101776 var guess;
101777
101778 while (digits.length) {
101779 part = part * BigInteger_base + digits[digits.length - 1];
101780 if (part < n) {
101781 quot[i++] = 0;
101782 digits.pop();
101783 diff = BigInteger_base * diff + part;
101784 continue;
101785 }
101786 if (part === 0) {
101787 guess = 0;
101788 }
101789 else {
101790 guess = (part / n) | 0;
101791 }
101792
101793 var check = n * guess;
101794 diff = part - check;
101795 quot[i++] = guess;
101796 if (!guess) {
101797 digits.pop();
101798 continue;
101799 }
101800
101801 digits.pop();
101802 part = diff;
101803 }
101804
101805 r = new BigInteger([diff], 1, CONSTRUCT);
101806 if (this._s < 0) {
101807 r = r.negate();
101808 }
101809 return [new BigInteger(quot.reverse(), sign, CONSTRUCT), r];
101810 };
101811
101812 /*
101813 Function: isEven
101814 Return true iff *this* is divisible by two.
101815
101816 Note that <BigInteger.ZERO> is even.
101817
101818 Returns:
101819
101820 true if *this* is even, false otherwise.
101821
101822 See Also:
101823
101824 <isOdd>
101825 */
101826 BigInteger.prototype.isEven = function() {
101827 var digits = this._d;
101828 return this._s === 0 || digits.length === 0 || (digits[0] % 2) === 0;
101829 };
101830
101831 /*
101832 Function: isOdd
101833 Return true iff *this* is not divisible by two.
101834
101835 Returns:
101836
101837 true if *this* is odd, false otherwise.
101838
101839 See Also:
101840
101841 <isEven>
101842 */
101843 BigInteger.prototype.isOdd = function() {
101844 return !this.isEven();
101845 };
101846
101847 /*
101848 Function: sign
101849 Get the sign of a <BigInteger>.
101850
101851 Returns:
101852
101853 * -1 if *this* < 0
101854 * 0 if *this* == 0
101855 * +1 if *this* > 0
101856
101857 See Also:
101858
101859 <isZero>, <isPositive>, <isNegative>, <compare>, <BigInteger.ZERO>
101860 */
101861 BigInteger.prototype.sign = function() {
101862 return this._s;
101863 };
101864
101865 /*
101866 Function: isPositive
101867 Return true iff *this* > 0.
101868
101869 Returns:
101870
101871 true if *this*.compare(<BigInteger.ZERO>) == 1.
101872
101873 See Also:
101874
101875 <sign>, <isZero>, <isNegative>, <isUnit>, <compare>, <BigInteger.ZERO>
101876 */
101877 BigInteger.prototype.isPositive = function() {
101878 return this._s > 0;
101879 };
101880
101881 /*
101882 Function: isNegative
101883 Return true iff *this* < 0.
101884
101885 Returns:
101886
101887 true if *this*.compare(<BigInteger.ZERO>) == -1.
101888
101889 See Also:
101890
101891 <sign>, <isPositive>, <isZero>, <isUnit>, <compare>, <BigInteger.ZERO>
101892 */
101893 BigInteger.prototype.isNegative = function() {
101894 return this._s < 0;
101895 };
101896
101897 /*
101898 Function: isZero
101899 Return true iff *this* == 0.
101900
101901 Returns:
101902
101903 true if *this*.compare(<BigInteger.ZERO>) == 0.
101904
101905 See Also:
101906
101907 <sign>, <isPositive>, <isNegative>, <isUnit>, <BigInteger.ZERO>
101908 */
101909 BigInteger.prototype.isZero = function() {
101910 return this._s === 0;
101911 };
101912
101913 /*
101914 Function: exp10
101915 Multiply a <BigInteger> by a power of 10.
101916
101917 This is equivalent to, but faster than
101918
101919 > if (n >= 0) {
101920 > return this.multiply(BigInteger("1e" + n));
101921 > }
101922 > else { // n <= 0
101923 > return this.quotient(BigInteger("1e" + -n));
101924 > }
101925
101926 Parameters:
101927
101928 n - The power of 10 to multiply *this* by. *n* is converted to a
101929 javascipt number and must be no greater than <BigInteger.MAX_EXP>
101930 (0x7FFFFFFF), or an exception will be thrown.
101931
101932 Returns:
101933
101934 *this* * (10 ** *n*), truncated to an integer if necessary.
101935
101936 See Also:
101937
101938 <pow>, <multiply>
101939 */
101940 BigInteger.prototype.exp10 = function(n) {
101941 n = +n;
101942 if (n === 0) {
101943 return this;
101944 }
101945 if (Math.abs(n) > Number(MAX_EXP)) {
101946 throw new Error("exponent too large in BigInteger.exp10");
101947 }
101948 // Optimization for this == 0. This also keeps us from having to trim zeros in the positive n case
101949 if (this._s === 0) {
101950 return ZERO;
101951 }
101952 if (n > 0) {
101953 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
101954
101955 for (; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
101956 k._d.unshift(0);
101957 }
101958 if (n == 0)
101959 return k;
101960 k._s = 1;
101961 k = k.multiplySingleDigit(Math.pow(10, n));
101962 return (this._s < 0 ? k.negate() : k);
101963 } else if (-n >= this._d.length*BigInteger_base_log10) {
101964 return ZERO;
101965 } else {
101966 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
101967
101968 for (n = -n; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
101969 k._d.shift();
101970 }
101971 return (n == 0) ? k : k.divRemSmall(Math.pow(10, n))[0];
101972 }
101973 };
101974
101975 /*
101976 Function: pow
101977 Raise a <BigInteger> to a power.
101978
101979 In this implementation, 0**0 is 1.
101980
101981 Parameters:
101982
101983 n - The exponent to raise *this* by. *n* must be no greater than
101984 <BigInteger.MAX_EXP> (0x7FFFFFFF), or an exception will be thrown.
101985
101986 Returns:
101987
101988 *this* raised to the *nth* power.
101989
101990 See Also:
101991
101992 <modPow>
101993 */
101994 BigInteger.prototype.pow = function(n) {
101995 if (this.isUnit()) {
101996 if (this._s > 0) {
101997 return this;
101998 }
101999 else {
102000 return BigInteger(n).isOdd() ? this : this.negate();
102001 }
102002 }
102003
102004 n = BigInteger(n);
102005 if (n._s === 0) {
102006 return ONE;
102007 }
102008 else if (n._s < 0) {
102009 if (this._s === 0) {
102010 throw new Error("Divide by zero");
102011 }
102012 else {
102013 return ZERO;
102014 }
102015 }
102016 if (this._s === 0) {
102017 return ZERO;
102018 }
102019 if (n.isUnit()) {
102020 return this;
102021 }
102022
102023 if (n.compareAbs(MAX_EXP) > 0) {
102024 throw new Error("exponent too large in BigInteger.pow");
102025 }
102026 var x = this;
102027 var aux = ONE;
102028 var two = BigInteger.small[2];
102029
102030 while (n.isPositive()) {
102031 if (n.isOdd()) {
102032 aux = aux.multiply(x);
102033 if (n.isUnit()) {
102034 return aux;
102035 }
102036 }
102037 x = x.square();
102038 n = n.quotient(two);
102039 }
102040
102041 return aux;
102042 };
102043
102044 /*
102045 Function: modPow
102046 Raise a <BigInteger> to a power (mod m).
102047
102048 Because it is reduced by a modulus, <modPow> is not limited by
102049 <BigInteger.MAX_EXP> like <pow>.
102050
102051 Parameters:
102052
102053 exponent - The exponent to raise *this* by. Must be positive.
102054 modulus - The modulus.
102055
102056 Returns:
102057
102058 *this* ^ *exponent* (mod *modulus*).
102059
102060 See Also:
102061
102062 <pow>, <mod>
102063 */
102064 BigInteger.prototype.modPow = function(exponent, modulus) {
102065 var result = ONE;
102066 var base = this;
102067
102068 while (exponent.isPositive()) {
102069 if (exponent.isOdd()) {
102070 result = result.multiply(base).remainder(modulus);
102071 }
102072
102073 exponent = exponent.quotient(BigInteger.small[2]);
102074 if (exponent.isPositive()) {
102075 base = base.square().remainder(modulus);
102076 }
102077 }
102078
102079 return result;
102080 };
102081
102082 /*
102083 Function: log
102084 Get the natural logarithm of a <BigInteger> as a native JavaScript number.
102085
102086 This is equivalent to
102087
102088 > Math.log(this.toJSValue())
102089
102090 but handles values outside of the native number range.
102091
102092 Returns:
102093
102094 log( *this* )
102095
102096 See Also:
102097
102098 <toJSValue>
102099 */
102100 BigInteger.prototype.log = function() {
102101 switch (this._s) {
102102 case 0: return -Infinity;
102103 case -1: return NaN;
102104 default: // Fall through.
102105 }
102106
102107 var l = this._d.length;
102108
102109 if (l*BigInteger_base_log10 < 30) {
102110 return Math.log(this.valueOf());
102111 }
102112
102113 var N = Math.ceil(30/BigInteger_base_log10);
102114 var firstNdigits = this._d.slice(l - N);
102115 return Math.log((new BigInteger(firstNdigits, 1, CONSTRUCT)).valueOf()) + (l - N) * Math.log(BigInteger_base);
102116 };
102117
102118 /*
102119 Function: valueOf
102120 Convert a <BigInteger> to a native JavaScript integer.
102121
102122 This is called automatically by JavaScipt to convert a <BigInteger> to a
102123 native value.
102124
102125 Returns:
102126
102127 > parseInt(this.toString(), 10)
102128
102129 See Also:
102130
102131 <toString>, <toJSValue>
102132 */
102133 BigInteger.prototype.valueOf = function() {
102134 return parseInt(this.toString(), 10);
102135 };
102136
102137 /*
102138 Function: toJSValue
102139 Convert a <BigInteger> to a native JavaScript integer.
102140
102141 This is the same as valueOf, but more explicitly named.
102142
102143 Returns:
102144
102145 > parseInt(this.toString(), 10)
102146
102147 See Also:
102148
102149 <toString>, <valueOf>
102150 */
102151 BigInteger.prototype.toJSValue = function() {
102152 return parseInt(this.toString(), 10);
102153 };
102154
102155 var MAX_EXP = BigInteger(0x7FFFFFFF);
102156 // Constant: MAX_EXP
102157 // The largest exponent allowed in <pow> and <exp10> (0x7FFFFFFF or 2147483647).
102158 BigInteger.MAX_EXP = MAX_EXP;
102159
102160 (function() {
102161 function makeUnary(fn) {
102162 return function(a) {
102163 return fn.call(BigInteger(a));
102164 };
102165 }
102166
102167 function makeBinary(fn) {
102168 return function(a, b) {
102169 return fn.call(BigInteger(a), BigInteger(b));
102170 };
102171 }
102172
102173 function makeTrinary(fn) {
102174 return function(a, b, c) {
102175 return fn.call(BigInteger(a), BigInteger(b), BigInteger(c));
102176 };
102177 }
102178
102179 (function() {
102180 var i, fn;
102181 var unary = "toJSValue,isEven,isOdd,sign,isZero,isNegative,abs,isUnit,square,negate,isPositive,toString,next,prev,log".split(",");
102182 var binary = "compare,remainder,divRem,subtract,add,quotient,divide,multiply,pow,compareAbs".split(",");
102183 var trinary = ["modPow"];
102184
102185 for (i = 0; i < unary.length; i++) {
102186 fn = unary[i];
102187 BigInteger[fn] = makeUnary(BigInteger.prototype[fn]);
102188 }
102189
102190 for (i = 0; i < binary.length; i++) {
102191 fn = binary[i];
102192 BigInteger[fn] = makeBinary(BigInteger.prototype[fn]);
102193 }
102194
102195 for (i = 0; i < trinary.length; i++) {
102196 fn = trinary[i];
102197 BigInteger[fn] = makeTrinary(BigInteger.prototype[fn]);
102198 }
102199
102200 BigInteger.exp10 = function(x, n) {
102201 return BigInteger(x).exp10(n);
102202 };
102203 })();
102204 })();
102205
102206 exports.BigInteger = BigInteger;
102207 })(typeof exports !== 'undefined' ? exports : this);
102208 </script>
102209 <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){
102210 var 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;
102211
102212 },{}],2:[function(require,module,exports){
102213 var 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;
102214
102215 },{"./scoring":6}],3:[function(require,module,exports){
102216 var 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(","),
102217 english_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(","),
102218 female_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(","),
102219 us_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(","),
102220 male_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;
102221
102222 },{}],4:[function(require,module,exports){
102223 var 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;
102224
102225 },{"./feedback":2,"./matching":5,"./scoring":6,"./time_estimates":7}],5:[function(require,module,exports){
102226 var 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;
102227
102228 },{"./adjacency_graphs":1,"./frequency_lists":3,"./scoring":6}],6:[function(require,module,exports){
102229 var 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;
102230
102231 },{"./adjacency_graphs":1}],7:[function(require,module,exports){
102232 var 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;
102233
102234 },{}]},{},[4])(4)
102235 });
102236
102237 </script>
102238 <script>/*
102239 * Detects entropy from a string.
102240 *
102241 * Formats include:
102242 * binary [0-1]
102243 * base 6 [0-5]
102244 * dice 6 [1-6]
102245 * decimal [0-9]
102246 * hexadecimal [0-9A-F]
102247 * card [A2-9TJQK][CDHS]
102248 *
102249 * Automatically uses lowest entropy to avoid issues such as interpretting 0101
102250 * as hexadecimal which would be 16 bits when really it's only 4 bits of binary
102251 * entropy.
102252 */
102253
102254 window.Entropy = new (function() {
102255
102256 var TWO = new BigInteger(2);
102257
102258 // matchers returns an array of the matched events for each type of entropy.
102259 // eg
102260 // matchers.binary("010") returns ["0", "1", "0"]
102261 // matchers.binary("a10") returns ["1", "0"]
102262 // matchers.hex("a10") returns ["a", "1", "0"]
102263 var matchers = {
102264 binary: function(str) {
102265 return str.match(/[0-1]/gi) || [];
102266 },
102267 base6: function(str) {
102268 return str.match(/[0-5]/gi) || [];
102269 },
102270 dice: function(str) {
102271 return str.match(/[1-6]/gi) || []; // ie dice numbers
102272 },
102273 base10: function(str) {
102274 return str.match(/[0-9]/gi) || [];
102275 },
102276 hex: function(str) {
102277 return str.match(/[0-9A-F]/gi) || [];
102278 },
102279 card: function(str) {
102280 // Format is NumberSuit, eg
102281 // AH ace of hearts
102282 // 8C eight of clubs
102283 // TD ten of diamonds
102284 // JS jack of spades
102285 // QH queen of hearts
102286 // KC king of clubs
102287 return str.match(/([A2-9TJQK][CDHS])/gi) || [];
102288 }
102289 }
102290
102291 // Convert array of cards from ["ac", "4d", "ks"]
102292 // to numbers between 0 and 51 [0, 16, 51]
102293 function convertCardsToInts(cards) {
102294 var ints = [];
102295 var values = "a23456789tjqk";
102296 var suits = "cdhs";
102297 for (var i=0; i<cards.length; i++) {
102298 var card = cards[i].toLowerCase();
102299 var value = card[0];
102300 var suit = card[1];
102301 var asInt = 13 * suits.indexOf(suit) + values.indexOf(value);
102302 ints.push(asInt);
102303 }
102304 return ints;
102305 }
102306
102307 this.fromString = function(rawEntropyStr) {
102308 // Find type of entropy being used (binary, hex, dice etc)
102309 var base = getBase(rawEntropyStr);
102310 // Convert dice to base6 entropy (ie 1-6 to 0-5)
102311 // This is done by changing all 6s to 0s
102312 if (base.str == "dice") {
102313 var newParts = [];
102314 var newInts = [];
102315 for (var i=0; i<base.parts.length; i++) {
102316 var c = base.parts[i];
102317 if ("12345".indexOf(c) > -1) {
102318 newParts[i] = base.parts[i];
102319 newInts[i] = base.ints[i];
102320 }
102321 else {
102322 newParts[i] = "0";
102323 newInts[i] = 0;
102324 }
102325 }
102326 base.str = "base 6 (dice)";
102327 base.ints = newInts;
102328 base.parts = newParts;
102329 base.matcher = matchers.base6;
102330 }
102331 // Detect empty entropy
102332 if (base.parts.length == 0) {
102333 return {
102334 binaryStr: "",
102335 cleanStr: "",
102336 cleanHtml: "",
102337 base: base,
102338 };
102339 }
102340 // Convert base.ints to BigInteger.
102341 // Due to using unusual bases, eg cards of base52, this is not as simple as
102342 // using BigInteger.parse()
102343 var entropyInt = BigInteger.ZERO;
102344 for (var i=base.ints.length-1; i>=0; i--) {
102345 var thisInt = BigInteger.parse(base.ints[i]);
102346 var power = (base.ints.length - 1) - i;
102347 var additionalEntropy = BigInteger.parse(base.asInt).pow(power).multiply(thisInt);
102348 entropyInt = entropyInt.add(additionalEntropy);
102349 }
102350 // Convert entropy to binary
102351 var entropyBin = entropyInt.toString(2);
102352 // If the first integer is small, it must be padded with zeros.
102353 // Otherwise the chance of the first bit being 1 is 100%, which is
102354 // obviously incorrect.
102355 // This is not perfect for non-2^n bases.
102356 var expectedBits = Math.floor(base.parts.length * Math.log2(base.asInt));
102357 while (entropyBin.length < expectedBits) {
102358 entropyBin = "0" + entropyBin;
102359 }
102360 // Calculate the number of bits per event
102361 var bitsPerEvent = Math.log2(base.asInt);
102362 // Cards binary must be handled differently, since they're not replaced
102363 if (base.asInt == 52) {
102364 var cardEntropy = processCardEntropy(base.parts);
102365 entropyBin = cardEntropy.binaryStr;
102366 bitsPerEvent = cardEntropy.bitsPerEvent;
102367 }
102368 // Supply a 'filtered' entropy string for display purposes
102369 var entropyClean = base.parts.join("");
102370 var entropyHtml = base.parts.join("");
102371 if (base.asInt == 52) {
102372 entropyClean = base.parts.join(" ").toUpperCase();
102373 entropyClean = entropyClean.replace(/C/g, "\u2663");
102374 entropyClean = entropyClean.replace(/D/g, "\u2666");
102375 entropyClean = entropyClean.replace(/H/g, "\u2665");
102376 entropyClean = entropyClean.replace(/S/g, "\u2660");
102377 entropyHtml = base.parts.join(" ").toUpperCase();
102378 entropyHtml = entropyHtml.replace(/C/g, "<span class='card-suit club'>\u2663</span>");
102379 entropyHtml = entropyHtml.replace(/D/g, "<span class='card-suit diamond'>\u2666</span>");
102380 entropyHtml = entropyHtml.replace(/H/g, "<span class='card-suit heart'>\u2665</span>");
102381 entropyHtml = entropyHtml.replace(/S/g, "<span class='card-suit spade'>\u2660</span>");
102382 }
102383 // Return the result
102384 var e = {
102385 binaryStr: entropyBin,
102386 cleanStr: entropyClean,
102387 cleanHtml: entropyHtml,
102388 bitsPerEvent: bitsPerEvent,
102389 base: base,
102390 }
102391 return e;
102392 }
102393
102394 function getSortedDeck() {
102395 var s = [];
102396 var suits = "CDHS";
102397 var values = "A23456789TJQK";
102398 for (var i=0; i<suits.length; i++) {
102399 for (var j=0; j<values.length; j++) {
102400 s.push(values[j]+suits[i]);
102401 }
102402 }
102403 return s;
102404 }
102405
102406 function getBase(str) {
102407 // Need to get the lowest base for the supplied entropy.
102408 // This prevents interpreting, say, dice rolls as hexadecimal.
102409 var binaryMatches = matchers.binary(str);
102410 var hexMatches = matchers.hex(str);
102411 // Find the lowest base that can be used, whilst ignoring any irrelevant chars
102412 if (binaryMatches.length == hexMatches.length && hexMatches.length > 0) {
102413 var ints = binaryMatches.map(function(i) { return parseInt(i, 2) });
102414 return {
102415 ints: ints,
102416 parts: binaryMatches,
102417 matcher: matchers.binary,
102418 asInt: 2,
102419 str: "binary",
102420 }
102421 }
102422 var cardMatches = matchers.card(str);
102423 if (cardMatches.length >= hexMatches.length / 2) {
102424 var ints = convertCardsToInts(cardMatches);
102425 return {
102426 ints: ints,
102427 parts: cardMatches,
102428 matcher: matchers.card,
102429 asInt: 52,
102430 str: "card",
102431 }
102432 }
102433 var diceMatches = matchers.dice(str);
102434 if (diceMatches.length == hexMatches.length && hexMatches.length > 0) {
102435 var ints = diceMatches.map(function(i) { return parseInt(i) });
102436 return {
102437 ints: ints,
102438 parts: diceMatches,
102439 matcher: matchers.dice,
102440 asInt: 6,
102441 str: "dice",
102442 }
102443 }
102444 var base6Matches = matchers.base6(str);
102445 if (base6Matches.length == hexMatches.length && hexMatches.length > 0) {
102446 var ints = base6Matches.map(function(i) { return parseInt(i) });
102447 return {
102448 ints: ints,
102449 parts: base6Matches,
102450 matcher: matchers.base6,
102451 asInt: 6,
102452 str: "base 6",
102453 }
102454 }
102455 var base10Matches = matchers.base10(str);
102456 if (base10Matches.length == hexMatches.length && hexMatches.length > 0) {
102457 var ints = base10Matches.map(function(i) { return parseInt(i) });
102458 return {
102459 ints: ints,
102460 parts: base10Matches,
102461 matcher: matchers.base10,
102462 asInt: 10,
102463 str: "base 10",
102464 }
102465 }
102466 var ints = hexMatches.map(function(i) { return parseInt(i, 16) });
102467 return {
102468 ints: ints,
102469 parts: hexMatches,
102470 matcher: matchers.hex,
102471 asInt: 16,
102472 str: "hexadecimal",
102473 }
102474 }
102475
102476 // Assume cards are NOT replaced.
102477 // Additional entropy decreases as more cards are used. This means
102478 // total possible entropy is measured using n!, not base^n.
102479 // eg the second last card can be only one of two, not one of fifty two
102480 // so the added entropy for that card is only one bit at most
102481 function processCardEntropy(cards) {
102482 // Track how many instances of each card have been used, and thus
102483 // how many decks are in use.
102484 var cardCounts = {};
102485 var numberOfDecks = 0;
102486 // Work out number of decks by max(duplicates)
102487 for (var i=0; i<cards.length; i++) {
102488 // Get the card that was drawn
102489 var cardLower = cards[i];
102490 var card = cardLower.toUpperCase();
102491 // Initialize the count for this card if needed
102492 if (!(card in cardCounts)) {
102493 cardCounts[card] = 0;
102494 }
102495 cardCounts[card] += 1;
102496 // See if this is max(duplicates)
102497 if (cardCounts[card] > numberOfDecks) {
102498 numberOfDecks = cardCounts[card];
102499 }
102500 }
102501 // Work out the total number of bits for this many decks
102502 // See http://crypto.stackexchange.com/q/41886
102503 var gainedBits = 0;
102504 // Equivalent of Math.log2(factorial(52*numberOfDecks))
102505 // which becomes infinity for numberOfDecks > 4
102506 for (var i=1; i<=52*numberOfDecks; i++) {
102507 gainedBits = gainedBits + Math.log2(i);
102508 }
102509 var lostBits = 52 * Math.log2(factorial(numberOfDecks));
102510 var maxBits = gainedBits - lostBits;
102511 // Convert the drawn cards to a binary representation.
102512 // The exact technique for doing this is unclear.
102513 // See
102514 // http://crypto.stackexchange.com/a/41896
102515 // "I even doubt that this is well defined (only the average entropy
102516 // is, I believe)."
102517 // See
102518 // https://github.com/iancoleman/bip39/issues/33#issuecomment-263021856
102519 // "The binary representation can be the first log(permutations,2) bits
102520 // of the sha-2 hash of the normalized deck string."
102521 //
102522 // In this specific implementation, the first N bits of the hash of the
102523 // normalized cards string is being used. Uppercase, no spaces; eg
102524 // sha256("AH8DQSTC2H")
102525 var totalCards = numberOfDecks * 52;
102526 var percentUsed = cards.length / totalCards;
102527 // Calculate the average number of bits of entropy for the number of
102528 // cards drawn.
102529 var numberOfBits = Math.floor(maxBits * percentUsed);
102530 // Create a normalized string of the selected cards
102531 var normalizedCards = cards.join("").toUpperCase();
102532 // Convert to binary using the SHA256 hash of the normalized cards.
102533 // If the number of bits is more than 256, multiple hashes
102534 // are used until the required number of bits is reached.
102535 var entropyBin = "";
102536 var iterations = 0;
102537 while (entropyBin.length < numberOfBits) {
102538 var hashedCards = sjcl.hash.sha256.hash(normalizedCards + ":" + iterations);
102539 var hashHex = sjcl.codec.hex.fromBits(hashedCards);
102540 for (var i=0; i<hashHex.length; i++) {
102541 var decimal = parseInt(hashHex[i], 16);
102542 var binary = decimal.toString(2);
102543 while (binary.length < 4) {
102544 binary = "0" + binary;
102545 }
102546 entropyBin = entropyBin + binary;
102547 }
102548 iterations = iterations + 1;
102549 }
102550 // Truncate to the appropriate number of bits.
102551 entropyBin = entropyBin.substring(0, numberOfBits);
102552 // Get the number of bits per event
102553 bitsPerEvent = maxBits / totalCards;
102554 return {
102555 binaryStr: entropyBin,
102556 bitsPerEvent: bitsPerEvent,
102557 }
102558 }
102559
102560 // Polyfill for Math.log2
102561 // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log2#Polyfill
102562 Math.log2 = Math.log2 || function(x) {
102563 // The polyfill isn't good enough because of the poor accuracy of
102564 // Math.LOG2E
102565 // log2(8) gave 2.9999999999999996 which when floored causes issues.
102566 // So instead use the BigInteger library to get it right.
102567 return BigInteger.log(x) / BigInteger.log(2);
102568 };
102569
102570 // Depends on BigInteger
102571 function factorial(n) {
102572 if (n == 0) {
102573 return 1;
102574 }
102575 f = BigInteger.ONE;
102576 for (var i=1; i<=n; i++) {
102577 f = f.multiply(new BigInteger(i));
102578 }
102579 return f;
102580 }
102581
102582 })();
102583 </script>
102584 <script>(function() {
102585
102586 // mnemonics is populated as required by getLanguage
102587 var mnemonics = { "english": new Mnemonic("english") };
102588 var mnemonic = mnemonics["english"];
102589 var seed = null;
102590 var bip32RootKey = null;
102591 var bip32ExtendedKey = null;
102592 var network = bitcoinjs.bitcoin.networks.bitcoin;
102593 var addressRowTemplate = $("#address-row-template");
102594
102595 var showIndex = true;
102596 var showAddress = true;
102597 var showPubKey = true;
102598 var showPrivKey = true;
102599 var showQr = false;
102600 var litecoinUseLtub = true;
102601
102602 var entropyChangeTimeoutEvent = null;
102603 var phraseChangeTimeoutEvent = null;
102604 var rootKeyChangedTimeoutEvent = null;
102605
102606 var generationProcesses = [];
102607
102608 var DOM = {};
102609 DOM.network = $(".network");
102610 DOM.bip32Client = $("#bip32-client");
102611 DOM.phraseNetwork = $("#network-phrase");
102612 DOM.useEntropy = $(".use-entropy");
102613 DOM.entropyContainer = $(".entropy-container");
102614 DOM.entropy = $(".entropy");
102615 DOM.entropyFiltered = DOM.entropyContainer.find(".filtered");
102616 DOM.entropyType = DOM.entropyContainer.find(".type");
102617 DOM.entropyCrackTime = DOM.entropyContainer.find(".crack-time");
102618 DOM.entropyEventCount = DOM.entropyContainer.find(".event-count");
102619 DOM.entropyBits = DOM.entropyContainer.find(".bits");
102620 DOM.entropyBitsPerEvent = DOM.entropyContainer.find(".bits-per-event");
102621 DOM.entropyWordCount = DOM.entropyContainer.find(".word-count");
102622 DOM.entropyBinary = DOM.entropyContainer.find(".binary");
102623 DOM.entropyWordIndexes = DOM.entropyContainer.find(".word-indexes");
102624 DOM.entropyMnemonicLength = DOM.entropyContainer.find(".mnemonic-length");
102625 DOM.entropyFilterWarning = DOM.entropyContainer.find(".filter-warning");
102626 DOM.phrase = $(".phrase");
102627 DOM.passphrase = $(".passphrase");
102628 DOM.generateContainer = $(".generate-container");
102629 DOM.generate = $(".generate");
102630 DOM.seed = $(".seed");
102631 DOM.rootKey = $(".root-key");
102632 DOM.litecoinLtubContainer = $(".litecoin-ltub-container");
102633 DOM.litecoinUseLtub = $(".litecoin-use-ltub");
102634 DOM.extendedPrivKey = $(".extended-priv-key");
102635 DOM.extendedPubKey = $(".extended-pub-key");
102636 DOM.bip32tab = $("#bip32-tab");
102637 DOM.bip44tab = $("#bip44-tab");
102638 DOM.bip49tab = $("#bip49-tab");
102639 DOM.bip84tab = $("#bip84-tab");
102640 DOM.bip141tab = $("#bip141-tab");
102641 DOM.bip32panel = $("#bip32");
102642 DOM.bip44panel = $("#bip44");
102643 DOM.bip49panel = $("#bip49");
102644 DOM.bip32path = $("#bip32-path");
102645 DOM.bip44path = $("#bip44-path");
102646 DOM.bip44purpose = $("#bip44 .purpose");
102647 DOM.bip44coin = $("#bip44 .coin");
102648 DOM.bip44account = $("#bip44 .account");
102649 DOM.bip44accountXprv = $("#bip44 .account-xprv");
102650 DOM.bip44accountXpub = $("#bip44 .account-xpub");
102651 DOM.bip44change = $("#bip44 .change");
102652 DOM.bip49unavailable = $("#bip49 .unavailable");
102653 DOM.bip49available = $("#bip49 .available");
102654 DOM.bip49path = $("#bip49-path");
102655 DOM.bip49purpose = $("#bip49 .purpose");
102656 DOM.bip49coin = $("#bip49 .coin");
102657 DOM.bip49account = $("#bip49 .account");
102658 DOM.bip49accountXprv = $("#bip49 .account-xprv");
102659 DOM.bip49accountXpub = $("#bip49 .account-xpub");
102660 DOM.bip49change = $("#bip49 .change");
102661 DOM.bip84path = $("#bip84-path");
102662 DOM.bip84purpose = $("#bip84 .purpose");
102663 DOM.bip84coin = $("#bip84 .coin");
102664 DOM.bip84account = $("#bip84 .account");
102665 DOM.bip84accountXprv = $("#bip84 .account-xprv");
102666 DOM.bip84accountXpub = $("#bip84 .account-xpub");
102667 DOM.bip84change = $("#bip84 .change");
102668 DOM.bip141unavailable = $("#bip141 .unavailable");
102669 DOM.bip141available = $("#bip141 .available");
102670 DOM.bip141path = $("#bip141-path");
102671 DOM.bip141semantics = $(".bip141-semantics");
102672 DOM.generatedStrength = $(".generate-container .strength");
102673 DOM.hardenedAddresses = $(".hardened-addresses");
102674 DOM.useBitpayAddressesContainer = $(".use-bitpay-addresses-container");
102675 DOM.useBitpayAddresses = $(".use-bitpay-addresses");
102676 DOM.useBip38 = $(".use-bip38");
102677 DOM.bip38Password = $(".bip38-password");
102678 DOM.addresses = $(".addresses");
102679 DOM.csvTab = $("#csv-tab a");
102680 DOM.csv = $(".csv");
102681 DOM.rowsToAdd = $(".rows-to-add");
102682 DOM.more = $(".more");
102683 DOM.moreRowsStartIndex = $(".more-rows-start-index");
102684 DOM.feedback = $(".feedback");
102685 DOM.tab = $(".derivation-type a");
102686 DOM.indexToggle = $(".index-toggle");
102687 DOM.addressToggle = $(".address-toggle");
102688 DOM.publicKeyToggle = $(".public-key-toggle");
102689 DOM.privateKeyToggle = $(".private-key-toggle");
102690 DOM.languages = $(".languages a");
102691 DOM.qrContainer = $(".qr-container");
102692 DOM.qrHider = DOM.qrContainer.find(".qr-hider");
102693 DOM.qrImage = DOM.qrContainer.find(".qr-image");
102694 DOM.qrHint = DOM.qrContainer.find(".qr-hint");
102695 DOM.showQrEls = $("[data-show-qr]");
102696
102697 function init() {
102698 // Events
102699 DOM.network.on("change", networkChanged);
102700 DOM.bip32Client.on("change", bip32ClientChanged);
102701 DOM.useEntropy.on("change", setEntropyVisibility);
102702 DOM.entropy.on("input", delayedEntropyChanged);
102703 DOM.entropyMnemonicLength.on("change", entropyChanged);
102704 DOM.phrase.on("input", delayedPhraseChanged);
102705 DOM.passphrase.on("input", delayedPhraseChanged);
102706 DOM.generate.on("click", generateClicked);
102707 DOM.more.on("click", showMore);
102708 DOM.rootKey.on("input", delayedRootKeyChanged);
102709 DOM.litecoinUseLtub.on("change", litecoinUseLtubChanged);
102710 DOM.bip32path.on("input", calcForDerivationPath);
102711 DOM.bip44account.on("input", calcForDerivationPath);
102712 DOM.bip44change.on("input", calcForDerivationPath);
102713 DOM.bip49account.on("input", calcForDerivationPath);
102714 DOM.bip49change.on("input", calcForDerivationPath);
102715 DOM.bip84account.on("input", calcForDerivationPath);
102716 DOM.bip84change.on("input", calcForDerivationPath);
102717 DOM.bip141path.on("input", calcForDerivationPath);
102718 DOM.bip141semantics.on("change", tabChanged);
102719 DOM.tab.on("shown.bs.tab", tabChanged);
102720 DOM.hardenedAddresses.on("change", calcForDerivationPath);
102721 DOM.useBip38.on("change", calcForDerivationPath);
102722 DOM.bip38Password.on("change", calcForDerivationPath);
102723 DOM.indexToggle.on("click", toggleIndexes);
102724 DOM.addressToggle.on("click", toggleAddresses);
102725 DOM.publicKeyToggle.on("click", togglePublicKeys);
102726 DOM.privateKeyToggle.on("click", togglePrivateKeys);
102727 DOM.csvTab.on("click", updateCsv);
102728 DOM.languages.on("click", languageChanged);
102729 DOM.useBitpayAddresses.on("change", useBitpayAddressesChange);
102730 setQrEvents(DOM.showQrEls);
102731 disableForms();
102732 hidePending();
102733 hideValidationError();
102734 populateNetworkSelect();
102735 populateClientSelect();
102736 }
102737
102738 // Event handlers
102739
102740 function networkChanged(e) {
102741 clearDerivedKeys();
102742 clearAddressesList();
102743 DOM.litecoinLtubContainer.addClass("hidden");
102744 DOM.useBitpayAddressesContainer.addClass("hidden");
102745 var networkIndex = e.target.value;
102746 var network = networks[networkIndex];
102747 network.onSelect();
102748 if (network.segwitAvailable) {
102749 adjustNetworkForSegwit();
102750 showSegwitAvailable();
102751 }
102752 else {
102753 showSegwitUnavailable();
102754 }
102755 if (seed != null) {
102756 phraseChanged();
102757 }
102758 else {
102759 rootKeyChanged();
102760 }
102761 }
102762
102763 function bip32ClientChanged(e) {
102764 var clientIndex = DOM.bip32Client.val();
102765 if (clientIndex == "custom") {
102766 DOM.bip32path.prop("readonly", false);
102767 }
102768 else {
102769 DOM.bip32path.prop("readonly", true);
102770 clients[clientIndex].onSelect();
102771 if (seed != null) {
102772 phraseChanged();
102773 }
102774 else {
102775 rootKeyChanged();
102776 }
102777 }
102778 }
102779
102780 function setEntropyVisibility() {
102781 if (isUsingOwnEntropy()) {
102782 DOM.entropyContainer.removeClass("hidden");
102783 DOM.generateContainer.addClass("hidden");
102784 DOM.phrase.prop("readonly", true);
102785 DOM.entropy.focus();
102786 entropyChanged();
102787 }
102788 else {
102789 DOM.entropyContainer.addClass("hidden");
102790 DOM.generateContainer.removeClass("hidden");
102791 DOM.phrase.prop("readonly", false);
102792 hidePending();
102793 }
102794 }
102795
102796 function delayedPhraseChanged() {
102797 hideValidationError();
102798 seed = null;
102799 bip32RootKey = null;
102800 bip32ExtendedKey = null;
102801 clearAddressesList();
102802 showPending();
102803 if (phraseChangeTimeoutEvent != null) {
102804 clearTimeout(phraseChangeTimeoutEvent);
102805 }
102806 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
102807 }
102808
102809 function phraseChanged() {
102810 showPending();
102811 setMnemonicLanguage();
102812 // Get the mnemonic phrase
102813 var phrase = DOM.phrase.val();
102814 var errorText = findPhraseErrors(phrase);
102815 if (errorText) {
102816 showValidationError(errorText);
102817 return;
102818 }
102819 // Calculate and display
102820 var passphrase = DOM.passphrase.val();
102821 calcBip32RootKeyFromSeed(phrase, passphrase);
102822 calcForDerivationPath();
102823 // Show the word indexes
102824 showWordIndexes();
102825 }
102826
102827 function tabChanged() {
102828 showPending();
102829 adjustNetworkForSegwit();
102830 var phrase = DOM.phrase.val();
102831 if (phrase != "") {
102832 // Calculate and display for mnemonic
102833 var errorText = findPhraseErrors(phrase);
102834 if (errorText) {
102835 showValidationError(errorText);
102836 return;
102837 }
102838 // Calculate and display
102839 var passphrase = DOM.passphrase.val();
102840 calcBip32RootKeyFromSeed(phrase, passphrase);
102841 }
102842 else {
102843 // Calculate and display for root key
102844 var rootKeyBase58 = DOM.rootKey.val();
102845 var errorText = validateRootKey(rootKeyBase58);
102846 if (errorText) {
102847 showValidationError(errorText);
102848 return;
102849 }
102850 // Calculate and display
102851 calcBip32RootKeyFromBase58(rootKeyBase58);
102852 }
102853 calcForDerivationPath();
102854 }
102855
102856 function delayedEntropyChanged() {
102857 hideValidationError();
102858 showPending();
102859 if (entropyChangeTimeoutEvent != null) {
102860 clearTimeout(entropyChangeTimeoutEvent);
102861 }
102862 entropyChangeTimeoutEvent = setTimeout(entropyChanged, 400);
102863 }
102864
102865 function entropyChanged() {
102866 // If blank entropy, clear mnemonic, addresses, errors
102867 if (DOM.entropy.val().trim().length == 0) {
102868 clearDisplay();
102869 clearEntropyFeedback();
102870 DOM.phrase.val("");
102871 showValidationError("Blank entropy");
102872 return;
102873 }
102874 // Get the current phrase to detect changes
102875 var phrase = DOM.phrase.val();
102876 // Set the phrase from the entropy
102877 setMnemonicFromEntropy();
102878 // Recalc addresses if the phrase has changed
102879 var newPhrase = DOM.phrase.val();
102880 if (newPhrase != phrase) {
102881 if (newPhrase.length == 0) {
102882 clearDisplay();
102883 }
102884 else {
102885 phraseChanged();
102886 }
102887 }
102888 else {
102889 hidePending();
102890 }
102891 }
102892
102893 function delayedRootKeyChanged() {
102894 // Warn if there is an existing mnemonic or passphrase.
102895 if (DOM.phrase.val().length > 0 || DOM.passphrase.val().length > 0) {
102896 if (!confirm("This will clear existing mnemonic and passphrase")) {
102897 DOM.rootKey.val(bip32RootKey);
102898 return
102899 }
102900 }
102901 hideValidationError();
102902 showPending();
102903 // Clear existing mnemonic and passphrase
102904 DOM.phrase.val("");
102905 DOM.passphrase.val("");
102906 seed = null;
102907 if (rootKeyChangedTimeoutEvent != null) {
102908 clearTimeout(rootKeyChangedTimeoutEvent);
102909 }
102910 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged, 400);
102911 }
102912
102913 function rootKeyChanged() {
102914 showPending();
102915 hideValidationError();
102916 var rootKeyBase58 = DOM.rootKey.val();
102917 var errorText = validateRootKey(rootKeyBase58);
102918 if (errorText) {
102919 showValidationError(errorText);
102920 return;
102921 }
102922 // Calculate and display
102923 calcBip32RootKeyFromBase58(rootKeyBase58);
102924 calcForDerivationPath();
102925 }
102926
102927 function litecoinUseLtubChanged() {
102928 litecoinUseLtub = DOM.litecoinUseLtub.prop("checked");
102929 if (litecoinUseLtub) {
102930 network = bitcoinjs.bitcoin.networks.litecoin;
102931 }
102932 else {
102933 network = bitcoinjs.bitcoin.networks.litecoinXprv;
102934 }
102935 phraseChanged();
102936 }
102937
102938 function calcForDerivationPath() {
102939 clearDerivedKeys();
102940 clearAddressesList();
102941 showPending();
102942 // Don't show segwit if it's selected but network doesn't support it
102943 if (segwitSelected() && !networkHasSegwit()) {
102944 return;
102945 }
102946 // Get the derivation path
102947 var derivationPath = getDerivationPath();
102948 var errorText = findDerivationPathErrors(derivationPath);
102949 if (errorText) {
102950 showValidationError(errorText);
102951 return;
102952 }
102953 bip32ExtendedKey = calcBip32ExtendedKey(derivationPath);
102954 if (bip44TabSelected()) {
102955 displayBip44Info();
102956 }
102957 else if (bip49TabSelected()) {
102958 displayBip49Info();
102959 }
102960 else if (bip84TabSelected()) {
102961 displayBip84Info();
102962 }
102963 displayBip32Info();
102964 }
102965
102966 function generateClicked() {
102967 if (isUsingOwnEntropy()) {
102968 return;
102969 }
102970 clearDisplay();
102971 showPending();
102972 setTimeout(function() {
102973 setMnemonicLanguage();
102974 var phrase = generateRandomPhrase();
102975 if (!phrase) {
102976 return;
102977 }
102978 phraseChanged();
102979 }, 50);
102980 }
102981
102982 function languageChanged() {
102983 setTimeout(function() {
102984 setMnemonicLanguage();
102985 if (DOM.phrase.val().length > 0) {
102986 var newPhrase = convertPhraseToNewLanguage();
102987 DOM.phrase.val(newPhrase);
102988 phraseChanged();
102989 }
102990 else {
102991 DOM.generate.trigger("click");
102992 }
102993 }, 50);
102994 }
102995
102996 function useBitpayAddressesChange() {
102997 setBitcoinCashNetworkValues();
102998 phraseChanged();
102999 }
103000
103001 function toggleIndexes() {
103002 showIndex = !showIndex;
103003 $("td.index span").toggleClass("invisible");
103004 }
103005
103006 function toggleAddresses() {
103007 showAddress = !showAddress;
103008 $("td.address span").toggleClass("invisible");
103009 }
103010
103011 function togglePublicKeys() {
103012 showPubKey = !showPubKey;
103013 $("td.pubkey span").toggleClass("invisible");
103014 }
103015
103016 function togglePrivateKeys() {
103017 showPrivKey = !showPrivKey;
103018 $("td.privkey span").toggleClass("invisible");
103019 }
103020
103021 // Private methods
103022
103023 function generateRandomPhrase() {
103024 if (!hasStrongRandom()) {
103025 var errorText = "This browser does not support strong randomness";
103026 showValidationError(errorText);
103027 return;
103028 }
103029 // get the amount of entropy to use
103030 var numWords = parseInt(DOM.generatedStrength.val());
103031 var strength = numWords / 3 * 32;
103032 var buffer = new Uint8Array(strength / 8);
103033 // create secure entropy
103034 var data = crypto.getRandomValues(buffer);
103035 // show the words
103036 var words = mnemonic.toMnemonic(data);
103037 DOM.phrase.val(words);
103038 // show the entropy
103039 var entropyHex = uint8ArrayToHex(data);
103040 DOM.entropy.val(entropyHex);
103041 // ensure entropy fields are consistent with what is being displayed
103042 DOM.entropyMnemonicLength.val("raw");
103043 return words;
103044 }
103045
103046 function calcBip32RootKeyFromSeed(phrase, passphrase) {
103047 seed = mnemonic.toSeed(phrase, passphrase);
103048 bip32RootKey = bitcoinjs.bitcoin.HDNode.fromSeedHex(seed, network);
103049 }
103050
103051 function calcBip32RootKeyFromBase58(rootKeyBase58) {
103052 bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network);
103053 }
103054
103055 function calcBip32ExtendedKey(path) {
103056 // Check there's a root key to derive from
103057 if (!bip32RootKey) {
103058 return bip32RootKey;
103059 }
103060 var extendedKey = bip32RootKey;
103061 // Derive the key from the path
103062 var pathBits = path.split("/");
103063 for (var i=0; i<pathBits.length; i++) {
103064 var bit = pathBits[i];
103065 var index = parseInt(bit);
103066 if (isNaN(index)) {
103067 continue;
103068 }
103069 var hardened = bit[bit.length-1] == "'";
103070 var isPriv = !(extendedKey.isNeutered());
103071 var invalidDerivationPath = hardened && !isPriv;
103072 if (invalidDerivationPath) {
103073 extendedKey = null;
103074 }
103075 else if (hardened) {
103076 extendedKey = extendedKey.deriveHardened(index);
103077 }
103078 else {
103079 extendedKey = extendedKey.derive(index);
103080 }
103081 }
103082 return extendedKey
103083 }
103084
103085 function showValidationError(errorText) {
103086 DOM.feedback
103087 .text(errorText)
103088 .show();
103089 }
103090
103091 function hideValidationError() {
103092 DOM.feedback
103093 .text("")
103094 .hide();
103095 }
103096
103097 function findPhraseErrors(phrase) {
103098 // Preprocess the words
103099 phrase = mnemonic.normalizeString(phrase);
103100 var words = phraseToWordArray(phrase);
103101 // Detect blank phrase
103102 if (words.length == 0) {
103103 return "Blank mnemonic";
103104 }
103105 // Check each word
103106 for (var i=0; i<words.length; i++) {
103107 var word = words[i];
103108 var language = getLanguage();
103109 if (WORDLISTS[language].indexOf(word) == -1) {
103110 console.log("Finding closest match to " + word);
103111 var nearestWord = findNearestWord(word);
103112 return word + " not in wordlist, did you mean " + nearestWord + "?";
103113 }
103114 }
103115 // Check the words are valid
103116 var properPhrase = wordArrayToPhrase(words);
103117 var isValid = mnemonic.check(properPhrase);
103118 if (!isValid) {
103119 return "Invalid mnemonic";
103120 }
103121 return false;
103122 }
103123
103124 function validateRootKey(rootKeyBase58) {
103125 try {
103126 bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network);
103127 }
103128 catch (e) {
103129 return "Invalid root key";
103130 }
103131 return "";
103132 }
103133
103134 function getDerivationPath() {
103135 if (bip44TabSelected()) {
103136 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
103137 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
103138 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
103139 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
103140 var path = "m/";
103141 path += purpose + "'/";
103142 path += coin + "'/";
103143 path += account + "'/";
103144 path += change;
103145 DOM.bip44path.val(path);
103146 var derivationPath = DOM.bip44path.val();
103147 console.log("Using derivation path from BIP44 tab: " + derivationPath);
103148 return derivationPath;
103149 }
103150 else if (bip49TabSelected()) {
103151 var purpose = parseIntNoNaN(DOM.bip49purpose.val(), 49);
103152 var coin = parseIntNoNaN(DOM.bip49coin.val(), 0);
103153 var account = parseIntNoNaN(DOM.bip49account.val(), 0);
103154 var change = parseIntNoNaN(DOM.bip49change.val(), 0);
103155 var path = "m/";
103156 path += purpose + "'/";
103157 path += coin + "'/";
103158 path += account + "'/";
103159 path += change;
103160 DOM.bip49path.val(path);
103161 var derivationPath = DOM.bip49path.val();
103162 console.log("Using derivation path from BIP49 tab: " + derivationPath);
103163 return derivationPath;
103164 }
103165 else if (bip84TabSelected()) {
103166 var purpose = parseIntNoNaN(DOM.bip84purpose.val(), 84);
103167 var coin = parseIntNoNaN(DOM.bip84coin.val(), 0);
103168 var account = parseIntNoNaN(DOM.bip84account.val(), 0);
103169 var change = parseIntNoNaN(DOM.bip84change.val(), 0);
103170 var path = "m/";
103171 path += purpose + "'/";
103172 path += coin + "'/";
103173 path += account + "'/";
103174 path += change;
103175 DOM.bip84path.val(path);
103176 var derivationPath = DOM.bip84path.val();
103177 console.log("Using derivation path from BIP84 tab: " + derivationPath);
103178 return derivationPath;
103179 }
103180 else if (bip32TabSelected()) {
103181 var derivationPath = DOM.bip32path.val();
103182 console.log("Using derivation path from BIP32 tab: " + derivationPath);
103183 return derivationPath;
103184 }
103185 else if (bip141TabSelected()) {
103186 var derivationPath = DOM.bip141path.val();
103187 console.log("Using derivation path from BIP141 tab: " + derivationPath);
103188 return derivationPath;
103189 }
103190 else {
103191 console.log("Unknown derivation path");
103192 }
103193 }
103194
103195 function findDerivationPathErrors(path) {
103196 // TODO is not perfect but is better than nothing
103197 // Inspired by
103198 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#test-vectors
103199 // and
103200 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keys
103201 var maxDepth = 255; // TODO verify this!!
103202 var maxIndexValue = Math.pow(2, 31); // TODO verify this!!
103203 if (path[0] != "m") {
103204 return "First character must be 'm'";
103205 }
103206 if (path.length > 1) {
103207 if (path[1] != "/") {
103208 return "Separator must be '/'";
103209 }
103210 var indexes = path.split("/");
103211 if (indexes.length > maxDepth) {
103212 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
103213 }
103214 for (var depth = 1; depth<indexes.length; depth++) {
103215 var index = indexes[depth];
103216 var invalidChars = index.replace(/^[0-9]+'?$/g, "")
103217 if (invalidChars.length > 0) {
103218 return "Invalid characters " + invalidChars + " found at depth " + depth;
103219 }
103220 var indexValue = parseInt(index.replace("'", ""));
103221 if (isNaN(depth)) {
103222 return "Invalid number at depth " + depth;
103223 }
103224 if (indexValue > maxIndexValue) {
103225 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
103226 }
103227 }
103228 }
103229 // Check root key exists or else derivation path is useless!
103230 if (!bip32RootKey) {
103231 return "No root key";
103232 }
103233 // Check no hardened derivation path when using xpub keys
103234 var hardenedPath = path.indexOf("'") > -1;
103235 var hardenedAddresses = bip32TabSelected() && DOM.hardenedAddresses.prop("checked");
103236 var hardened = hardenedPath || hardenedAddresses;
103237 var isXpubkey = bip32RootKey.isNeutered();
103238 if (hardened && isXpubkey) {
103239 return "Hardened derivation path is invalid with xpub key";
103240 }
103241 return false;
103242 }
103243
103244 function displayBip44Info() {
103245 // Get the derivation path for the account
103246 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
103247 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
103248 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
103249 var path = "m/";
103250 path += purpose + "'/";
103251 path += coin + "'/";
103252 path += account + "'/";
103253 // Calculate the account extended keys
103254 var accountExtendedKey = calcBip32ExtendedKey(path);
103255 var accountXprv = accountExtendedKey.toBase58();
103256 var accountXpub = accountExtendedKey.neutered().toBase58();
103257 // Display the extended keys
103258 DOM.bip44accountXprv.val(accountXprv);
103259 DOM.bip44accountXpub.val(accountXpub);
103260 }
103261
103262 function displayBip49Info() {
103263 // Get the derivation path for the account
103264 var purpose = parseIntNoNaN(DOM.bip49purpose.val(), 49);
103265 var coin = parseIntNoNaN(DOM.bip49coin.val(), 0);
103266 var account = parseIntNoNaN(DOM.bip49account.val(), 0);
103267 var path = "m/";
103268 path += purpose + "'/";
103269 path += coin + "'/";
103270 path += account + "'/";
103271 // Calculate the account extended keys
103272 var accountExtendedKey = calcBip32ExtendedKey(path);
103273 var accountXprv = accountExtendedKey.toBase58();
103274 var accountXpub = accountExtendedKey.neutered().toBase58();
103275 // Display the extended keys
103276 DOM.bip49accountXprv.val(accountXprv);
103277 DOM.bip49accountXpub.val(accountXpub);
103278 }
103279
103280 function displayBip84Info() {
103281 // Get the derivation path for the account
103282 var purpose = parseIntNoNaN(DOM.bip84purpose.val(), 84);
103283 var coin = parseIntNoNaN(DOM.bip84coin.val(), 0);
103284 var account = parseIntNoNaN(DOM.bip84account.val(), 0);
103285 var path = "m/";
103286 path += purpose + "'/";
103287 path += coin + "'/";
103288 path += account + "'/";
103289 // Calculate the account extended keys
103290 var accountExtendedKey = calcBip32ExtendedKey(path);
103291 var accountXprv = accountExtendedKey.toBase58();
103292 var accountXpub = accountExtendedKey.neutered().toBase58();
103293 // Display the extended keys
103294 DOM.bip84accountXprv.val(accountXprv);
103295 DOM.bip84accountXpub.val(accountXpub);
103296 }
103297
103298 function displayBip32Info() {
103299 // Display the key
103300 DOM.seed.val(seed);
103301 var rootKey = bip32RootKey.toBase58();
103302 DOM.rootKey.val(rootKey);
103303 var xprvkeyB58 = "NA";
103304 if (!bip32ExtendedKey.isNeutered()) {
103305 xprvkeyB58 = bip32ExtendedKey.toBase58();
103306 }
103307 var extendedPrivKey = xprvkeyB58;
103308 DOM.extendedPrivKey.val(extendedPrivKey);
103309 var extendedPubKey = bip32ExtendedKey.neutered().toBase58();
103310 DOM.extendedPubKey.val(extendedPubKey);
103311 // Display the addresses and privkeys
103312 clearAddressesList();
103313 var initialAddressCount = parseInt(DOM.rowsToAdd.val());
103314 displayAddresses(0, initialAddressCount);
103315 }
103316
103317 function displayAddresses(start, total) {
103318 generationProcesses.push(new (function() {
103319
103320 var rows = [];
103321
103322 this.stop = function() {
103323 for (var i=0; i<rows.length; i++) {
103324 rows[i].shouldGenerate = false;
103325 }
103326 hidePending();
103327 }
103328
103329 for (var i=0; i<total; i++) {
103330 var index = i + start;
103331 var isLast = i == total - 1;
103332 rows.push(new TableRow(index, isLast));
103333 }
103334
103335 })());
103336 }
103337
103338 function segwitSelected() {
103339 return bip49TabSelected() || bip84TabSelected() || bip141TabSelected();
103340 }
103341
103342 function p2wpkhSelected() {
103343 return bip84TabSelected() ||
103344 bip141TabSelected() && DOM.bip141semantics.val() == "p2wpkh";
103345 }
103346
103347 function p2wpkhInP2shSelected() {
103348 return bip49TabSelected() ||
103349 (bip141TabSelected() && DOM.bip141semantics.val() == "p2wpkh-p2sh");
103350 }
103351
103352 function TableRow(index, isLast) {
103353
103354 var self = this;
103355 this.shouldGenerate = true;
103356 var useHardenedAddresses = DOM.hardenedAddresses.prop("checked");
103357 var useBip38 = DOM.useBip38.prop("checked");
103358 var bip38password = DOM.bip38Password.val();
103359 var isSegwit = segwitSelected();
103360 var segwitAvailable = networkHasSegwit();
103361 var isP2wpkh = p2wpkhSelected();
103362 var isP2wpkhInP2sh = p2wpkhInP2shSelected();
103363
103364 function init() {
103365 calculateValues();
103366 }
103367
103368 function calculateValues() {
103369 setTimeout(function() {
103370 if (!self.shouldGenerate) {
103371 return;
103372 }
103373 // derive HDkey for this row of the table
103374 var key = "NA";
103375 if (useHardenedAddresses) {
103376 key = bip32ExtendedKey.deriveHardened(index);
103377 }
103378 else {
103379 key = bip32ExtendedKey.derive(index);
103380 }
103381 // bip38 requires uncompressed keys
103382 // see https://github.com/iancoleman/bip39/issues/140#issuecomment-352164035
103383 var keyPair = key.keyPair;
103384 var useUncompressed = useBip38;
103385 if (useUncompressed) {
103386 keyPair = new bitcoinjs.bitcoin.ECPair(keyPair.d, null, { compressed: false });
103387 }
103388 // get address
103389 var address = keyPair.getAddress().toString();
103390 // get privkey
103391 var hasPrivkey = !key.isNeutered();
103392 var privkey = "NA";
103393 if (hasPrivkey) {
103394 privkey = keyPair.toWIF(network);
103395 // BIP38 encode private key if required
103396 if (useBip38) {
103397 privkey = bitcoinjsBip38.encrypt(keyPair.d.toBuffer(), false, bip38password, function(p) {
103398 console.log("Progressed " + p.percent.toFixed(1) + "% for index " + index);
103399 });
103400 }
103401 }
103402 // get pubkey
103403 var pubkey = keyPair.getPublicKeyBuffer().toString('hex');
103404 var indexText = getDerivationPath() + "/" + index;
103405 if (useHardenedAddresses) {
103406 indexText = indexText + "'";
103407 }
103408 // Ethereum values are different
103409 if (networks[DOM.network.val()].name == "ETH - Ethereum") {
103410 var privKeyBuffer = keyPair.d.toBuffer(32);
103411 privkey = privKeyBuffer.toString('hex');
103412 var addressBuffer = ethUtil.privateToAddress(privKeyBuffer);
103413 var hexAddress = addressBuffer.toString('hex');
103414 var checksumAddress = ethUtil.toChecksumAddress(hexAddress);
103415 address = ethUtil.addHexPrefix(checksumAddress);
103416 privkey = ethUtil.addHexPrefix(privkey);
103417 pubkey = ethUtil.addHexPrefix(pubkey);
103418 }
103419 // Ripple values are different
103420 if (networks[DOM.network.val()].name == "XRP - Ripple") {
103421 privkey = convertRipplePriv(privkey);
103422 address = convertRippleAdrr(address);
103423 }
103424 // Segwit addresses are different
103425 if (isSegwit) {
103426 if (!segwitAvailable) {
103427 return;
103428 }
103429 if (isP2wpkh) {
103430 var keyhash = bitcoinjs.bitcoin.crypto.hash160(key.getPublicKeyBuffer());
103431 var scriptpubkey = bitcoinjs.bitcoin.script.witnessPubKeyHash.output.encode(keyhash);
103432 address = bitcoinjs.bitcoin.address.fromOutputScript(scriptpubkey, network)
103433 }
103434 else if (isP2wpkhInP2sh) {
103435 var keyhash = bitcoinjs.bitcoin.crypto.hash160(key.getPublicKeyBuffer());
103436 var scriptsig = bitcoinjs.bitcoin.script.witnessPubKeyHash.output.encode(keyhash);
103437 var addressbytes = bitcoinjs.bitcoin.crypto.hash160(scriptsig);
103438 var scriptpubkey = bitcoinjs.bitcoin.script.scriptHash.output.encode(addressbytes);
103439 address = bitcoinjs.bitcoin.address.fromOutputScript(scriptpubkey, network)
103440 }
103441 }
103442 addAddressToList(indexText, address, pubkey, privkey);
103443 if (isLast) {
103444 hidePending();
103445 updateCsv();
103446 }
103447 }, 50)
103448 }
103449
103450 init();
103451
103452 }
103453
103454 function showMore() {
103455 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
103456 if (isNaN(rowsToAdd)) {
103457 rowsToAdd = 20;
103458 DOM.rowsToAdd.val("20");
103459 }
103460 var start = parseInt(DOM.moreRowsStartIndex.val())
103461 if (isNaN(start)) {
103462 start = lastIndexInTable() + 1;
103463 }
103464 else {
103465 var newStart = start + rowsToAdd;
103466 DOM.moreRowsStartIndex.val(newStart);
103467 }
103468 if (rowsToAdd > 200) {
103469 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
103470 msg += "Do you want to continue?";
103471 if (!confirm(msg)) {
103472 return;
103473 }
103474 }
103475 displayAddresses(start, rowsToAdd);
103476 }
103477
103478 function clearDisplay() {
103479 clearAddressesList();
103480 clearKeys();
103481 hideValidationError();
103482 }
103483
103484 function clearAddressesList() {
103485 DOM.addresses.empty();
103486 DOM.csv.val("");
103487 stopGenerating();
103488 }
103489
103490 function stopGenerating() {
103491 while (generationProcesses.length > 0) {
103492 var generation = generationProcesses.shift();
103493 generation.stop();
103494 }
103495 }
103496
103497 function clearKeys() {
103498 clearRootKey();
103499 clearDerivedKeys();
103500 }
103501
103502 function clearRootKey() {
103503 DOM.rootKey.val("");
103504 }
103505
103506 function clearDerivedKeys() {
103507 DOM.extendedPrivKey.val("");
103508 DOM.extendedPubKey.val("");
103509 DOM.bip44accountXprv.val("");
103510 DOM.bip44accountXpub.val("");
103511 }
103512
103513 function addAddressToList(indexText, address, pubkey, privkey) {
103514 var row = $(addressRowTemplate.html());
103515 // Elements
103516 var indexCell = row.find(".index span");
103517 var addressCell = row.find(".address span");
103518 var pubkeyCell = row.find(".pubkey span");
103519 var privkeyCell = row.find(".privkey span");
103520 // Content
103521 indexCell.text(indexText);
103522 addressCell.text(address);
103523 pubkeyCell.text(pubkey);
103524 privkeyCell.text(privkey);
103525 // Visibility
103526 if (!showIndex) {
103527 indexCell.addClass("invisible");
103528 }
103529 if (!showAddress) {
103530 addressCell.addClass("invisible");
103531 }
103532 if (!showPubKey) {
103533 pubkeyCell.addClass("invisible");
103534 }
103535 if (!showPrivKey) {
103536 privkeyCell.addClass("invisible");
103537 }
103538 DOM.addresses.append(row);
103539 var rowShowQrEls = row.find("[data-show-qr]");
103540 setQrEvents(rowShowQrEls);
103541 }
103542
103543 function hasStrongRandom() {
103544 return 'crypto' in window && window['crypto'] !== null;
103545 }
103546
103547 function disableForms() {
103548 $("form").on("submit", function(e) {
103549 e.preventDefault();
103550 });
103551 }
103552
103553 function parseIntNoNaN(val, defaultVal) {
103554 var v = parseInt(val);
103555 if (isNaN(v)) {
103556 return defaultVal;
103557 }
103558 return v;
103559 }
103560
103561 function showPending() {
103562 DOM.feedback
103563 .text("Calculating...")
103564 .show();
103565 }
103566
103567 function findNearestWord(word) {
103568 var language = getLanguage();
103569 var words = WORDLISTS[language];
103570 var minDistance = 99;
103571 var closestWord = words[0];
103572 for (var i=0; i<words.length; i++) {
103573 var comparedTo = words[i];
103574 if (comparedTo.indexOf(word) == 0) {
103575 return comparedTo;
103576 }
103577 var distance = Levenshtein.get(word, comparedTo);
103578 if (distance < minDistance) {
103579 closestWord = comparedTo;
103580 minDistance = distance;
103581 }
103582 }
103583 return closestWord;
103584 }
103585
103586 function hidePending() {
103587 DOM.feedback
103588 .text("")
103589 .hide();
103590 }
103591
103592 function populateNetworkSelect() {
103593 for (var i=0; i<networks.length; i++) {
103594 var network = networks[i];
103595 var option = $("<option>");
103596 option.attr("value", i);
103597 option.text(network.name);
103598 if (network.name == "BTC - Bitcoin") {
103599 option.prop("selected", true);
103600 }
103601 DOM.phraseNetwork.append(option);
103602 }
103603 }
103604
103605 function populateClientSelect() {
103606 for (var i=0; i<clients.length; i++) {
103607 var client = clients[i];
103608 var option = $("<option>");
103609 option.attr("value", i);
103610 option.text(client.name);
103611 DOM.bip32Client.append(option);
103612 }
103613 }
103614
103615 function getLanguage() {
103616 var defaultLanguage = "english";
103617 // Try to get from existing phrase
103618 var language = getLanguageFromPhrase();
103619 // Try to get from url if not from phrase
103620 if (language.length == 0) {
103621 language = getLanguageFromUrl();
103622 }
103623 // Default to English if no other option
103624 if (language.length == 0) {
103625 language = defaultLanguage;
103626 }
103627 return language;
103628 }
103629
103630 function getLanguageFromPhrase(phrase) {
103631 // Check if how many words from existing phrase match a language.
103632 var language = "";
103633 if (!phrase) {
103634 phrase = DOM.phrase.val();
103635 }
103636 if (phrase.length > 0) {
103637 var words = phraseToWordArray(phrase);
103638 var languageMatches = {};
103639 for (l in WORDLISTS) {
103640 // Track how many words match in this language
103641 languageMatches[l] = 0;
103642 for (var i=0; i<words.length; i++) {
103643 var wordInLanguage = WORDLISTS[l].indexOf(words[i]) > -1;
103644 if (wordInLanguage) {
103645 languageMatches[l]++;
103646 }
103647 }
103648 // Find languages with most word matches.
103649 // This is made difficult due to commonalities between Chinese
103650 // simplified vs traditional.
103651 var mostMatches = 0;
103652 var mostMatchedLanguages = [];
103653 for (var l in languageMatches) {
103654 var numMatches = languageMatches[l];
103655 if (numMatches > mostMatches) {
103656 mostMatches = numMatches;
103657 mostMatchedLanguages = [l];
103658 }
103659 else if (numMatches == mostMatches) {
103660 mostMatchedLanguages.push(l);
103661 }
103662 }
103663 }
103664 if (mostMatchedLanguages.length > 0) {
103665 // Use first language and warn if multiple detected
103666 language = mostMatchedLanguages[0];
103667 if (mostMatchedLanguages.length > 1) {
103668 console.warn("Multiple possible languages");
103669 console.warn(mostMatchedLanguages);
103670 }
103671 }
103672 }
103673 return language;
103674 }
103675
103676 function getLanguageFromUrl() {
103677 for (var language in WORDLISTS) {
103678 if (window.location.hash.indexOf(language) > -1) {
103679 return language;
103680 }
103681 }
103682 return "";
103683 }
103684
103685 function setMnemonicLanguage() {
103686 var language = getLanguage();
103687 // Load the bip39 mnemonic generator for this language if required
103688 if (!(language in mnemonics)) {
103689 mnemonics[language] = new Mnemonic(language);
103690 }
103691 mnemonic = mnemonics[language];
103692 }
103693
103694 function convertPhraseToNewLanguage() {
103695 var oldLanguage = getLanguageFromPhrase();
103696 var newLanguage = getLanguageFromUrl();
103697 var oldPhrase = DOM.phrase.val();
103698 var oldWords = phraseToWordArray(oldPhrase);
103699 var newWords = [];
103700 for (var i=0; i<oldWords.length; i++) {
103701 var oldWord = oldWords[i];
103702 var index = WORDLISTS[oldLanguage].indexOf(oldWord);
103703 var newWord = WORDLISTS[newLanguage][index];
103704 newWords.push(newWord);
103705 }
103706 newPhrase = wordArrayToPhrase(newWords);
103707 return newPhrase;
103708 }
103709
103710 // TODO look at jsbip39 - mnemonic.splitWords
103711 function phraseToWordArray(phrase) {
103712 var words = phrase.split(/\s/g);
103713 var noBlanks = [];
103714 for (var i=0; i<words.length; i++) {
103715 var word = words[i];
103716 if (word.length > 0) {
103717 noBlanks.push(word);
103718 }
103719 }
103720 return noBlanks;
103721 }
103722
103723 // TODO look at jsbip39 - mnemonic.joinWords
103724 function wordArrayToPhrase(words) {
103725 var phrase = words.join(" ");
103726 var language = getLanguageFromPhrase(phrase);
103727 if (language == "japanese") {
103728 phrase = words.join("\u3000");
103729 }
103730 return phrase;
103731 }
103732
103733 function isUsingOwnEntropy() {
103734 return DOM.useEntropy.prop("checked");
103735 }
103736
103737 function setMnemonicFromEntropy() {
103738 clearEntropyFeedback();
103739 // Get entropy value
103740 var entropyStr = DOM.entropy.val();
103741 // Work out minimum base for entropy
103742 var entropy = Entropy.fromString(entropyStr);
103743 if (entropy.binaryStr.length == 0) {
103744 return;
103745 }
103746 // Show entropy details
103747 showEntropyFeedback(entropy);
103748 // Use entropy hash if not using raw entropy
103749 var bits = entropy.binaryStr;
103750 var mnemonicLength = DOM.entropyMnemonicLength.val();
103751 if (mnemonicLength != "raw") {
103752 // Get bits by hashing entropy with SHA256
103753 var hash = sjcl.hash.sha256.hash(entropy.cleanStr);
103754 var hex = sjcl.codec.hex.fromBits(hash);
103755 bits = BigInteger.parse(hex, 16).toString(2);
103756 while (bits.length % 256 != 0) {
103757 bits = "0" + bits;
103758 }
103759 // Truncate hash to suit number of words
103760 mnemonicLength = parseInt(mnemonicLength);
103761 var numberOfBits = 32 * mnemonicLength / 3;
103762 bits = bits.substring(0, numberOfBits);
103763 }
103764 // Discard trailing entropy
103765 var bitsToUse = Math.floor(bits.length / 32) * 32;
103766 var start = bits.length - bitsToUse;
103767 var binaryStr = bits.substring(start);
103768 // Convert entropy string to numeric array
103769 var entropyArr = [];
103770 for (var i=0; i<binaryStr.length / 8; i++) {
103771 var byteAsBits = binaryStr.substring(i*8, i*8+8);
103772 var entropyByte = parseInt(byteAsBits, 2);
103773 entropyArr.push(entropyByte)
103774 }
103775 // Convert entropy array to mnemonic
103776 var phrase = mnemonic.toMnemonic(entropyArr);
103777 // Set the mnemonic in the UI
103778 DOM.phrase.val(phrase);
103779 // Show the word indexes
103780 showWordIndexes();
103781 }
103782
103783 function clearEntropyFeedback() {
103784 DOM.entropyCrackTime.text("...");
103785 DOM.entropyType.text("");
103786 DOM.entropyWordCount.text("0");
103787 DOM.entropyEventCount.text("0");
103788 DOM.entropyBitsPerEvent.text("0");
103789 DOM.entropyBits.text("0");
103790 DOM.entropyFiltered.html("&nbsp;");
103791 DOM.entropyBinary.html("&nbsp;");
103792 }
103793
103794 function showEntropyFeedback(entropy) {
103795 var numberOfBits = entropy.binaryStr.length;
103796 var timeToCrack = "unknown";
103797 try {
103798 var z = zxcvbn(entropy.base.parts.join(""));
103799 timeToCrack = z.crack_times_display.offline_fast_hashing_1e10_per_second;
103800 if (z.feedback.warning != "") {
103801 timeToCrack = timeToCrack + " - " + z.feedback.warning;
103802 };
103803 }
103804 catch (e) {
103805 console.log("Error detecting entropy strength with zxcvbn:");
103806 console.log(e);
103807 }
103808 var entropyTypeStr = getEntropyTypeStr(entropy);
103809 var wordCount = Math.floor(numberOfBits / 32) * 3;
103810 var bitsPerEvent = entropy.bitsPerEvent.toFixed(2);
103811 DOM.entropyFiltered.html(entropy.cleanHtml);
103812 DOM.entropyType.text(entropyTypeStr);
103813 DOM.entropyCrackTime.text(timeToCrack);
103814 DOM.entropyEventCount.text(entropy.base.ints.length);
103815 DOM.entropyBits.text(numberOfBits);
103816 DOM.entropyWordCount.text(wordCount);
103817 DOM.entropyBinary.text(entropy.binaryStr);
103818 DOM.entropyBitsPerEvent.text(bitsPerEvent);
103819 // detect and warn of filtering
103820 var rawNoSpaces = DOM.entropy.val().replace(/\s/g, "");
103821 var cleanNoSpaces = entropy.cleanStr.replace(/\s/g, "");
103822 var isFiltered = rawNoSpaces.length != cleanNoSpaces.length;
103823 if (isFiltered) {
103824 DOM.entropyFilterWarning.removeClass('hidden');
103825 }
103826 else {
103827 DOM.entropyFilterWarning.addClass('hidden');
103828 }
103829 }
103830
103831 function getEntropyTypeStr(entropy) {
103832 var typeStr = entropy.base.str;
103833 // Add some detail if these are cards
103834 if (entropy.base.asInt == 52) {
103835 var cardDetail = []; // array of message strings
103836 // Detect duplicates
103837 var dupes = [];
103838 var dupeTracker = {};
103839 for (var i=0; i<entropy.base.parts.length; i++) {
103840 var card = entropy.base.parts[i];
103841 var cardUpper = card.toUpperCase();
103842 if (cardUpper in dupeTracker) {
103843 dupes.push(card);
103844 }
103845 dupeTracker[cardUpper] = true;
103846 }
103847 if (dupes.length > 0) {
103848 var dupeWord = "duplicates";
103849 if (dupes.length == 1) {
103850 dupeWord = "duplicate";
103851 }
103852 var msg = dupes.length + " " + dupeWord + ": " + dupes.slice(0,3).join(" ");
103853 if (dupes.length > 3) {
103854 msg += "...";
103855 }
103856 cardDetail.push(msg);
103857 }
103858 // Detect full deck
103859 var uniqueCards = [];
103860 for (var uniqueCard in dupeTracker) {
103861 uniqueCards.push(uniqueCard);
103862 }
103863 if (uniqueCards.length == 52) {
103864 cardDetail.unshift("full deck");
103865 }
103866 // Detect missing cards
103867 var values = "A23456789TJQK";
103868 var suits = "CDHS";
103869 var missingCards = [];
103870 for (var i=0; i<suits.length; i++) {
103871 for (var j=0; j<values.length; j++) {
103872 var card = values[j] + suits[i];
103873 if (!(card in dupeTracker)) {
103874 missingCards.push(card);
103875 }
103876 }
103877 }
103878 // Display missing cards if six or less, ie clearly going for full deck
103879 if (missingCards.length > 0 && missingCards.length <= 6) {
103880 var msg = missingCards.length + " missing: " + missingCards.slice(0,3).join(" ");
103881 if (missingCards.length > 3) {
103882 msg += "...";
103883 }
103884 cardDetail.push(msg);
103885 }
103886 // Add card details to typeStr
103887 if (cardDetail.length > 0) {
103888 typeStr += " (" + cardDetail.join(", ") + ")";
103889 }
103890 }
103891 return typeStr;
103892 }
103893
103894 function setQrEvents(els) {
103895 els.on("mouseenter", createQr);
103896 els.on("mouseleave", destroyQr);
103897 els.on("click", toggleQr);
103898 }
103899
103900 function createQr(e) {
103901 var content = e.target.textContent || e.target.value;
103902 if (content) {
103903 var qrEl = kjua({
103904 text: content,
103905 render: "canvas",
103906 size: 310,
103907 ecLevel: 'H',
103908 });
103909 DOM.qrImage.append(qrEl);
103910 if (!showQr) {
103911 DOM.qrHider.addClass("hidden");
103912 }
103913 else {
103914 DOM.qrHider.removeClass("hidden");
103915 }
103916 DOM.qrContainer.removeClass("hidden");
103917 }
103918 }
103919
103920 function destroyQr() {
103921 DOM.qrImage.text("");
103922 DOM.qrContainer.addClass("hidden");
103923 }
103924
103925 function toggleQr() {
103926 showQr = !showQr;
103927 DOM.qrHider.toggleClass("hidden");
103928 DOM.qrHint.toggleClass("hidden");
103929 }
103930
103931 function bip44TabSelected() {
103932 return DOM.bip44tab.hasClass("active");
103933 }
103934
103935 function bip32TabSelected() {
103936 return DOM.bip32tab.hasClass("active");
103937 }
103938
103939 function networkHasSegwit() {
103940 return networks[DOM.network.val()].segwitAvailable;
103941 }
103942
103943 function bip49TabSelected() {
103944 return DOM.bip49tab.hasClass("active");
103945 }
103946
103947 function bip84TabSelected() {
103948 return DOM.bip84tab.hasClass("active");
103949 }
103950
103951 function bip141TabSelected() {
103952 return DOM.bip141tab.hasClass("active");
103953 }
103954
103955 function setHdCoin(coinValue) {
103956 DOM.bip44coin.val(coinValue);
103957 DOM.bip49coin.val(coinValue);
103958 DOM.bip84coin.val(coinValue);
103959 }
103960
103961 function showSegwitAvailable() {
103962 DOM.bip49unavailable.addClass("hidden");
103963 DOM.bip49available.removeClass("hidden");
103964 DOM.bip141unavailable.addClass("hidden");
103965 DOM.bip141available.removeClass("hidden");
103966 }
103967
103968 function showSegwitUnavailable() {
103969 DOM.bip49available.addClass("hidden");
103970 DOM.bip49unavailable.removeClass("hidden");
103971 DOM.bip141available.addClass("hidden");
103972 DOM.bip141unavailable.removeClass("hidden");
103973 }
103974
103975 function useBitpayAddresses() {
103976 return !(DOM.useBitpayAddresses.prop("checked"));
103977 }
103978
103979 function setBitcoinCashNetworkValues() {
103980 if (useBitpayAddresses()) {
103981 network = bitcoinjs.bitcoin.networks.bitcoin;
103982 }
103983 else {
103984 network = bitcoinjs.bitcoin.networks.bitcoinCashBitbpay;
103985 }
103986 }
103987
103988 function adjustNetworkForSegwit() {
103989 // If segwit is selected the xpub/xprv prefixes need to be adjusted
103990 // to avoid accidentally importing BIP49 xpub to BIP44 watch only
103991 // wallet.
103992 // See https://github.com/iancoleman/bip39/issues/125
103993 var segwitNetworks = null;
103994 // if a segwit network is alread selected, need to use base network to
103995 // look up new parameters
103996 if ("baseNetwork" in network) {
103997 network = bitcoinjs.bitcoin.networks[network.baseNetwork];
103998 }
103999 // choose the right segwit params
104000 if (p2wpkhSelected() && "p2wpkh" in network) {
104001 network = network.p2wpkh;
104002 }
104003 else if (p2wpkhInP2shSelected() && "p2wpkhInP2sh" in network) {
104004 network = network.p2wpkhInP2sh;
104005 }
104006 }
104007
104008 function lastIndexInTable() {
104009 var pathText = DOM.addresses.find(".index").last().text();
104010 var pathBits = pathText.split("/");
104011 var lastBit = pathBits[pathBits.length-1];
104012 var lastBitClean = lastBit.replace("'", "");
104013 return parseInt(lastBitClean);
104014 }
104015
104016 function uint8ArrayToHex(a) {
104017 var s = ""
104018 for (var i=0; i<a.length; i++) {
104019 var h = a[i].toString(16);
104020 while (h.length < 2) {
104021 h = "0" + h;
104022 }
104023 s = s + h;
104024 }
104025 return s;
104026 }
104027
104028 function showWordIndexes() {
104029 var phrase = DOM.phrase.val();
104030 var words = phraseToWordArray(phrase);
104031 var wordIndexes = [];
104032 var language = getLanguage();
104033 for (var i=0; i<words.length; i++) {
104034 var word = words[i];
104035 var wordIndex = WORDLISTS[language].indexOf(word);
104036 wordIndexes.push(wordIndex);
104037 }
104038 var wordIndexesStr = wordIndexes.join(", ");
104039 DOM.entropyWordIndexes.text(wordIndexesStr);
104040 }
104041
104042 function updateCsv() {
104043 var tableCsv = "path,address,public key,private key\n";
104044 var rows = DOM.addresses.find("tr");
104045 for (var i=0; i<rows.length; i++) {
104046 var row = $(rows[i]);
104047 var cells = row.find("td");
104048 for (var j=0; j<cells.length; j++) {
104049 var cell = $(cells[j]);
104050 if (!cell.children().hasClass("invisible")) {
104051 tableCsv = tableCsv + cell.text();
104052 }
104053 if (j != cells.length - 1) {
104054 tableCsv = tableCsv + ",";
104055 }
104056 }
104057 tableCsv = tableCsv + "\n";
104058 }
104059 DOM.csv.val(tableCsv);
104060 }
104061
104062 var networks = [
104063 {
104064 name: "AXE - Axe",
104065 segwitAvailable: false,
104066 onSelect: function() {
104067 network = bitcoinjs.bitcoin.networks.axe;
104068 setHdCoin(0);
104069 },
104070 },
104071 {
104072 name: "BCH - Bitcoin Cash",
104073 segwitAvailable: false,
104074 onSelect: function() {
104075 DOM.useBitpayAddressesContainer.removeClass("hidden");
104076 setBitcoinCashNetworkValues();
104077 setHdCoin(145);
104078 },
104079 },
104080 {
104081 name: "BTC - Bitcoin",
104082 segwitAvailable: true,
104083 onSelect: function() {
104084 network = bitcoinjs.bitcoin.networks.bitcoin;
104085 setHdCoin(0);
104086 },
104087 },
104088 {
104089 name: "BTC - Bitcoin Testnet",
104090 segwitAvailable: true,
104091 onSelect: function() {
104092 network = bitcoinjs.bitcoin.networks.testnet;
104093 setHdCoin(1);
104094 },
104095 },
104096 {
104097 name: "BTG - Bitcoin Gold",
104098 segwitAvailable: true,
104099 onSelect: function() {
104100 network = bitcoinjs.bitcoin.networks.bgold;
104101 setHdCoin(0);
104102 },
104103 },
104104 {
104105 name: "CLAM - Clams",
104106 segwitAvailable: false,
104107 onSelect: function() {
104108 network = bitcoinjs.bitcoin.networks.clam;
104109 setHdCoin(23);
104110 },
104111 },
104112 {
104113 name: "CRW - Crown",
104114 segwitAvailable: false,
104115 onSelect: function() {
104116 network = bitcoinjs.bitcoin.networks.crown;
104117 setHdCoin(72);
104118 },
104119 },
104120 {
104121 name: "DASH - Dash",
104122 segwitAvailable: false,
104123 onSelect: function() {
104124 network = bitcoinjs.bitcoin.networks.dash;
104125 setHdCoin(5);
104126 },
104127 },
104128 {
104129 name: "DASH - Dash Testnet",
104130 segwitAvailable: false,
104131 onSelect: function() {
104132 network = bitcoinjs.bitcoin.networks.dashtn;
104133 setHdCoin(1);
104134 },
104135 },
104136 {
104137 name: "DOGE - Dogecoin",
104138 segwitAvailable: false,
104139 onSelect: function() {
104140 network = bitcoinjs.bitcoin.networks.dogecoin;
104141 setHdCoin(3);
104142 },
104143 },
104144 {
104145 name: "ETH - Ethereum",
104146 segwitAvailable: false,
104147 onSelect: function() {
104148 network = bitcoinjs.bitcoin.networks.bitcoin;
104149 setHdCoin(60);
104150 },
104151 },
104152 {
104153 name: "FJC - Fujicoin",
104154 segwitAvailable: false,
104155 onSelect: function() {
104156 network = bitcoinjs.bitcoin.networks.fujicoin;
104157 setHdCoin(75);
104158 },
104159 },
104160 {
104161 name: "GAME - GameCredits",
104162 segwitAvailable: false,
104163 onSelect: function() {
104164 network = bitcoinjs.bitcoin.networks.game;
104165 setHdCoin(101);
104166 },
104167 },
104168 {
104169 name: "JBS - Jumbucks",
104170 segwitAvailable: false,
104171 onSelect: function() {
104172 network = bitcoinjs.bitcoin.networks.jumbucks;
104173 setHdCoin(26);
104174 },
104175 },
104176 {
104177 name: "KMD - Komodo",
104178 bip49available: false,
104179 onSelect: function() {
104180 network = bitcoinjs.bitcoin.networks.komodo;
104181 setHdCoin(141);
104182 },
104183 },
104184 {
104185 name: "LTC - Litecoin",
104186 segwitAvailable: true,
104187 onSelect: function() {
104188 network = bitcoinjs.bitcoin.networks.litecoin;
104189 setHdCoin(2);
104190 DOM.litecoinLtubContainer.removeClass("hidden");
104191 },
104192 },
104193 {
104194 name: "MAZA - Maza",
104195 segwitAvailable: false,
104196 onSelect: function() {
104197 network = bitcoinjs.bitcoin.networks.maza;
104198 setHdCoin(13);
104199 },
104200 },
104201 {
104202 name: "MONA - Monacoin",
104203 segwitAvailable: true,
104204 onSelect: function() {
104205 network = bitcoinjs.bitcoin.networks.monacoin,
104206 setHdCoin(22);
104207 },
104208 },
104209 {
104210 name: "NMC - Namecoin",
104211 segwitAvailable: false,
104212 onSelect: function() {
104213 network = bitcoinjs.bitcoin.networks.namecoin;
104214 setHdCoin(7);
104215 },
104216 },
104217 {
104218 name: "ONX - Onixcoin",
104219 segwitAvailable: false,
104220 onSelect: function() {
104221 network = bitcoinjs.bitcoin.networks.onixcoin;
104222 setHdCoin(174);
104223 },
104224 },
104225 {
104226 name: "PIVX - PIVX",
104227 segwitAvailable: false,
104228 onSelect: function() {
104229 network = bitcoinjs.bitcoin.networks.pivx;
104230 setHdCoin(119);
104231 },
104232 },
104233 {
104234 name: "PIVX - PIVX Testnet",
104235 segwitAvailable: false,
104236 onSelect: function() {
104237 network = bitcoinjs.bitcoin.networks.pivxtestnet;
104238 setHdCoin(1);
104239 },
104240 },
104241 {
104242 name: "PPC - Peercoin",
104243 segwitAvailable: false,
104244 onSelect: function() {
104245 network = bitcoinjs.bitcoin.networks.peercoin;
104246 setHdCoin(6);
104247 },
104248 },
104249 {
104250 name: "SDC - ShadowCash",
104251 segwitAvailable: false,
104252 onSelect: function() {
104253 network = bitcoinjs.bitcoin.networks.shadow;
104254 setHdCoin(35);
104255 },
104256 },
104257 {
104258 name: "SDC - ShadowCash Testnet",
104259 segwitAvailable: false,
104260 onSelect: function() {
104261 network = bitcoinjs.bitcoin.networks.shadowtn;
104262 setHdCoin(1);
104263 },
104264 },
104265 {
104266 name: "SLM - Slimcoin",
104267 segwitAvailable: false,
104268 onSelect: function() {
104269 network = bitcoinjs.bitcoin.networks.slimcoin;
104270 setHdCoin(63);
104271 },
104272 },
104273 {
104274 name: "SLM - Slimcoin Testnet",
104275 segwitAvailable: false,
104276 onSelect: function() {
104277 network = bitcoinjs.bitcoin.networks.slimcointn;
104278 setHdCoin(111);
104279 },
104280 },
104281 {
104282 name: "USNBT - NuBits",
104283 segwitAvailable: false,
104284 onSelect: function() {
104285 network = bitcoinjs.bitcoin.networks.nubits;
104286 setHdCoin(12);
104287 },
104288 },
104289 {
104290 name: "VIA - Viacoin",
104291 segwitAvailable: false,
104292 onSelect: function() {
104293 network = bitcoinjs.bitcoin.networks.viacoin;
104294 setHdCoin(14);
104295 },
104296 },
104297 {
104298 name: "VIA - Viacoin Testnet",
104299 segwitAvailable: false,
104300 onSelect: function() {
104301 network = bitcoinjs.bitcoin.networks.viacointestnet;
104302 setHdCoin(1);
104303 },
104304 },
104305 {
104306 name: "XMY - Myriadcoin",
104307 segwitAvailable: false,
104308 onSelect: function() {
104309 network = bitcoinjs.bitcoin.networks.myriadcoin;
104310 setHdCoin(90);
104311 },
104312 },
104313 {
104314 name: "XRP - Ripple",
104315 segwitAvailable: false,
104316 onSelect: function() {
104317 network = bitcoinjs.bitcoin.networks.bitcoin;
104318 setHdCoin(144);
104319 },
104320 }
104321 ]
104322
104323 var clients = [
104324 {
104325 name: "Bitcoin Core",
104326 onSelect: function() {
104327 DOM.bip32path.val("m/0'/0'");
104328 DOM.hardenedAddresses.prop('checked', true);
104329 },
104330 },
104331 {
104332 name: "blockchain.info",
104333 onSelect: function() {
104334 DOM.bip32path.val("m/44'/0'/0'");
104335 DOM.hardenedAddresses.prop('checked', false);
104336 },
104337 },
104338 {
104339 name: "MultiBit HD",
104340 onSelect: function() {
104341 DOM.bip32path.val("m/0'/0");
104342 DOM.hardenedAddresses.prop('checked', false);
104343 },
104344 }
104345 ]
104346
104347 init();
104348
104349 })();
104350 </script>
104351 </body>
104352 </html>