UNPKG

354 kBJavaScriptView Raw
1// Chance.js 1.0.17
2// http://chancejs.com
3// (c) 2013 Victor Quinn
4// Chance may be freely distributed or modified under the MIT license.
5
6(function () {
7
8 // Constants
9 var MAX_INT = 9007199254740992;
10 var MIN_INT = -MAX_INT;
11 var NUMBERS = '0123456789';
12 var CHARS_LOWER = 'abcdefghijklmnopqrstuvwxyz';
13 var CHARS_UPPER = CHARS_LOWER.toUpperCase();
14 var HEX_POOL = NUMBERS + "abcdef";
15
16 // Errors
17 function UnsupportedError(message) {
18 this.name = 'UnsupportedError';
19 this.message = message || 'This feature is not supported on this platform';
20 }
21
22 UnsupportedError.prototype = new Error();
23 UnsupportedError.prototype.constructor = UnsupportedError;
24
25 // Cached array helpers
26 var slice = Array.prototype.slice;
27
28 // Constructor
29 function Chance (seed) {
30 if (!(this instanceof Chance)) {
31 if (!seed) { seed = null; } // handle other non-truthy seeds, as described in issue #322
32 return seed === null ? new Chance() : new Chance(seed);
33 }
34
35 // if user has provided a function, use that as the generator
36 if (typeof seed === 'function') {
37 this.random = seed;
38 return this;
39 }
40
41 if (arguments.length) {
42 // set a starting value of zero so we can add to it
43 this.seed = 0;
44 }
45
46 // otherwise, leave this.seed blank so that MT will receive a blank
47
48 for (var i = 0; i < arguments.length; i++) {
49 var seedling = 0;
50 if (Object.prototype.toString.call(arguments[i]) === '[object String]') {
51 for (var j = 0; j < arguments[i].length; j++) {
52 // create a numeric hash for each argument, add to seedling
53 var hash = 0;
54 for (var k = 0; k < arguments[i].length; k++) {
55 hash = arguments[i].charCodeAt(k) + (hash << 6) + (hash << 16) - hash;
56 }
57 seedling += hash;
58 }
59 } else {
60 seedling = arguments[i];
61 }
62 this.seed += (arguments.length - i) * seedling;
63 }
64
65 // If no generator function was provided, use our MT
66 this.mt = this.mersenne_twister(this.seed);
67 this.bimd5 = this.blueimp_md5();
68 this.random = function () {
69 return this.mt.random(this.seed);
70 };
71
72 return this;
73 }
74
75 Chance.prototype.VERSION = "1.0.17";
76
77 // Random helper functions
78 function initOptions(options, defaults) {
79 options = options || {};
80
81 if (defaults) {
82 for (var i in defaults) {
83 if (typeof options[i] === 'undefined') {
84 options[i] = defaults[i];
85 }
86 }
87 }
88
89 return options;
90 }
91
92 function range(size) {
93 return Array.apply(null, Array(size)).map(function (_, i) {return i;});
94 }
95
96 function testRange(test, errorMessage) {
97 if (test) {
98 throw new RangeError(errorMessage);
99 }
100 }
101
102 /**
103 * Encode the input string with Base64.
104 */
105 var base64 = function() {
106 throw new Error('No Base64 encoder available.');
107 };
108
109 // Select proper Base64 encoder.
110 (function determineBase64Encoder() {
111 if (typeof btoa === 'function') {
112 base64 = btoa;
113 } else if (typeof Buffer === 'function') {
114 base64 = function(input) {
115 return new Buffer(input).toString('base64');
116 };
117 }
118 })();
119
120 // -- Basics --
121
122 /**
123 * Return a random bool, either true or false
124 *
125 * @param {Object} [options={ likelihood: 50 }] alter the likelihood of
126 * receiving a true or false value back.
127 * @throws {RangeError} if the likelihood is out of bounds
128 * @returns {Bool} either true or false
129 */
130 Chance.prototype.bool = function (options) {
131 // likelihood of success (true)
132 options = initOptions(options, {likelihood : 50});
133
134 // Note, we could get some minor perf optimizations by checking range
135 // prior to initializing defaults, but that makes code a bit messier
136 // and the check more complicated as we have to check existence of
137 // the object then existence of the key before checking constraints.
138 // Since the options initialization should be minor computationally,
139 // decision made for code cleanliness intentionally. This is mentioned
140 // here as it's the first occurrence, will not be mentioned again.
141 testRange(
142 options.likelihood < 0 || options.likelihood > 100,
143 "Chance: Likelihood accepts values from 0 to 100."
144 );
145
146 return this.random() * 100 < options.likelihood;
147 };
148
149 Chance.prototype.animal = function (options){
150 //returns a random animal
151 options = initOptions(options);
152
153 if(typeof options.type !== 'undefined'){
154 //if user does not put in a valid animal type, user will get an error
155 testRange(
156 !this.get("animals")[options.type.toLowerCase()],
157 "Please pick from desert, ocean, grassland, forest, zoo, pets, farm."
158 );
159 //if user does put in valid animal type, will return a random animal of that type
160 return this.pick(this.get("animals")[options.type.toLowerCase()]);
161 }
162 //if user does not put in any animal type, will return a random animal regardless
163 animalTypeArray = ["desert","forest","ocean","zoo","farm","pet","grassland"];
164 return this.pick(this.get("animals")[this.pick(animalTypeArray)]);
165 };
166
167 /**
168 * Return a random character.
169 *
170 * @param {Object} [options={}] can specify a character pool or alpha,
171 * numeric, symbols and casing (lower or upper)
172 * @returns {String} a single random character
173 */
174 Chance.prototype.character = function (options) {
175 options = initOptions(options);
176
177 var symbols = "!@#$%^&*()[]",
178 letters, pool;
179
180 if (options.casing === 'lower') {
181 letters = CHARS_LOWER;
182 } else if (options.casing === 'upper') {
183 letters = CHARS_UPPER;
184 } else {
185 letters = CHARS_LOWER + CHARS_UPPER;
186 }
187
188 if (options.pool) {
189 pool = options.pool;
190 } else {
191 pool = '';
192 if (options.alpha) {
193 pool += letters;
194 }
195 if (options.numeric) {
196 pool += NUMBERS;
197 }
198 if (options.symbols) {
199 pool += symbols;
200 }
201 if (!pool) {
202 pool = letters + NUMBERS + symbols;
203 }
204 }
205
206 return pool.charAt(this.natural({max: (pool.length - 1)}));
207 };
208
209 // Note, wanted to use "float" or "double" but those are both JS reserved words.
210
211 // Note, fixed means N OR LESS digits after the decimal. This because
212 // It could be 14.9000 but in JavaScript, when this is cast as a number,
213 // the trailing zeroes are dropped. Left to the consumer if trailing zeroes are
214 // needed
215 /**
216 * Return a random floating point number
217 *
218 * @param {Object} [options={}] can specify a fixed precision, min, max
219 * @returns {Number} a single floating point number
220 * @throws {RangeError} Can only specify fixed or precision, not both. Also
221 * min cannot be greater than max
222 */
223 Chance.prototype.floating = function (options) {
224 options = initOptions(options, {fixed : 4});
225 testRange(
226 options.fixed && options.precision,
227 "Chance: Cannot specify both fixed and precision."
228 );
229
230 var num;
231 var fixed = Math.pow(10, options.fixed);
232
233 var max = MAX_INT / fixed;
234 var min = -max;
235
236 testRange(
237 options.min && options.fixed && options.min < min,
238 "Chance: Min specified is out of range with fixed. Min should be, at least, " + min
239 );
240 testRange(
241 options.max && options.fixed && options.max > max,
242 "Chance: Max specified is out of range with fixed. Max should be, at most, " + max
243 );
244
245 options = initOptions(options, { min : min, max : max });
246
247 // Todo - Make this work!
248 // options.precision = (typeof options.precision !== "undefined") ? options.precision : false;
249
250 num = this.integer({min: options.min * fixed, max: options.max * fixed});
251 var num_fixed = (num / fixed).toFixed(options.fixed);
252
253 return parseFloat(num_fixed);
254 };
255
256 /**
257 * Return a random integer
258 *
259 * NOTE the max and min are INCLUDED in the range. So:
260 * chance.integer({min: 1, max: 3});
261 * would return either 1, 2, or 3.
262 *
263 * @param {Object} [options={}] can specify a min and/or max
264 * @returns {Number} a single random integer number
265 * @throws {RangeError} min cannot be greater than max
266 */
267 Chance.prototype.integer = function (options) {
268 // 9007199254740992 (2^53) is the max integer number in JavaScript
269 // See: http://vq.io/132sa2j
270 options = initOptions(options, {min: MIN_INT, max: MAX_INT});
271 testRange(options.min > options.max, "Chance: Min cannot be greater than Max.");
272
273 return Math.floor(this.random() * (options.max - options.min + 1) + options.min);
274 };
275
276 /**
277 * Return a random natural
278 *
279 * NOTE the max and min are INCLUDED in the range. So:
280 * chance.natural({min: 1, max: 3});
281 * would return either 1, 2, or 3.
282 *
283 * @param {Object} [options={}] can specify a min and/or max or a numerals count.
284 * @returns {Number} a single random integer number
285 * @throws {RangeError} min cannot be greater than max
286 */
287 Chance.prototype.natural = function (options) {
288 options = initOptions(options, {min: 0, max: MAX_INT});
289 if (typeof options.numerals === 'number'){
290 testRange(options.numerals < 1, "Chance: Numerals cannot be less than one.");
291 options.min = Math.pow(10, options.numerals - 1);
292 options.max = Math.pow(10, options.numerals) - 1;
293 }
294 testRange(options.min < 0, "Chance: Min cannot be less than zero.");
295 return this.integer(options);
296 };
297
298 /**
299 * Return a random prime number
300 *
301 * NOTE the max and min are INCLUDED in the range.
302 *
303 * @param {Object} [options={}] can specify a min and/or max
304 * @returns {Number} a single random prime number
305 * @throws {RangeError} min cannot be greater than max nor negative
306 */
307 Chance.prototype.prime = function (options) {
308 options = initOptions(options, {min: 0, max: 10000});
309 testRange(options.min < 0, "Chance: Min cannot be less than zero.");
310 testRange(options.min > options.max, "Chance: Min cannot be greater than Max.");
311
312 var lastPrime = data.primes[data.primes.length - 1];
313 if (options.max > lastPrime) {
314 for (var i = lastPrime + 2; i <= options.max; ++i) {
315 if (this.is_prime(i)) {
316 data.primes.push(i);
317 }
318 }
319 }
320 var targetPrimes = data.primes.filter(function (prime) {
321 return prime >= options.min && prime <= options.max;
322 });
323 return this.pick(targetPrimes);
324 };
325
326 /**
327 * Determine whether a given number is prime or not.
328 */
329 Chance.prototype.is_prime = function (n) {
330 if (n % 1 || n < 2) {
331 return false;
332 }
333 if (n % 2 === 0) {
334 return n === 2;
335 }
336 if (n % 3 === 0) {
337 return n === 3;
338 }
339 var m = Math.sqrt(n);
340 for (var i = 5; i <= m; i += 6) {
341 if (n % i === 0 || n % (i + 2) === 0) {
342 return false;
343 }
344 }
345 return true;
346 };
347
348 /**
349 * Return a random hex number as string
350 *
351 * NOTE the max and min are INCLUDED in the range. So:
352 * chance.hex({min: '9', max: 'B'});
353 * would return either '9', 'A' or 'B'.
354 *
355 * @param {Object} [options={}] can specify a min and/or max and/or casing
356 * @returns {String} a single random string hex number
357 * @throws {RangeError} min cannot be greater than max
358 */
359 Chance.prototype.hex = function (options) {
360 options = initOptions(options, {min: 0, max: MAX_INT, casing: 'lower'});
361 testRange(options.min < 0, "Chance: Min cannot be less than zero.");
362 var integer = this.natural({min: options.min, max: options.max});
363 if (options.casing === 'upper') {
364 return integer.toString(16).toUpperCase();
365 }
366 return integer.toString(16);
367 };
368
369 Chance.prototype.letter = function(options) {
370 options = initOptions(options, {casing: 'lower'});
371 var pool = "abcdefghijklmnopqrstuvwxyz";
372 var letter = this.character({pool: pool});
373 if (options.casing === 'upper') {
374 letter = letter.toUpperCase();
375 }
376 return letter;
377 }
378
379 /**
380 * Return a random string
381 *
382 * @param {Object} [options={}] can specify a length
383 * @returns {String} a string of random length
384 * @throws {RangeError} length cannot be less than zero
385 */
386 Chance.prototype.string = function (options) {
387 options = initOptions(options, { length: this.natural({min: 5, max: 20}) });
388 testRange(options.length < 0, "Chance: Length cannot be less than zero.");
389 var length = options.length,
390 text = this.n(this.character, length, options);
391
392 return text.join("");
393 };
394
395 /**
396 * Return a random buffer
397 *
398 * @param {Object} [options={}] can specify a length
399 * @returns {Buffer} a buffer of random length
400 * @throws {RangeError} length cannot be less than zero
401 */
402 Chance.prototype.buffer = function (options) {
403 if (typeof Buffer === 'undefined') {
404 throw new UnsupportedError('Sorry, the buffer() function is not supported on your platform');
405 }
406 options = initOptions(options, { length: this.natural({min: 5, max: 20}) });
407 testRange(options.length < 0, "Chance: Length cannot be less than zero.");
408 var length = options.length;
409 var content = this.n(this.character, length, options);
410
411 return Buffer.from(content);
412 };
413
414 // -- End Basics --
415
416 // -- Helpers --
417
418 Chance.prototype.capitalize = function (word) {
419 return word.charAt(0).toUpperCase() + word.substr(1);
420 };
421
422 Chance.prototype.mixin = function (obj) {
423 for (var func_name in obj) {
424 Chance.prototype[func_name] = obj[func_name];
425 }
426 return this;
427 };
428
429 /**
430 * Given a function that generates something random and a number of items to generate,
431 * return an array of items where none repeat.
432 *
433 * @param {Function} fn the function that generates something random
434 * @param {Number} num number of terms to generate
435 * @param {Object} options any options to pass on to the generator function
436 * @returns {Array} an array of length `num` with every item generated by `fn` and unique
437 *
438 * There can be more parameters after these. All additional parameters are provided to the given function
439 */
440 Chance.prototype.unique = function(fn, num, options) {
441 testRange(
442 typeof fn !== "function",
443 "Chance: The first argument must be a function."
444 );
445
446 var comparator = function(arr, val) { return arr.indexOf(val) !== -1; };
447
448 if (options) {
449 comparator = options.comparator || comparator;
450 }
451
452 var arr = [], count = 0, result, MAX_DUPLICATES = num * 50, params = slice.call(arguments, 2);
453
454 while (arr.length < num) {
455 var clonedParams = JSON.parse(JSON.stringify(params));
456 result = fn.apply(this, clonedParams);
457 if (!comparator(arr, result)) {
458 arr.push(result);
459 // reset count when unique found
460 count = 0;
461 }
462
463 if (++count > MAX_DUPLICATES) {
464 throw new RangeError("Chance: num is likely too large for sample set");
465 }
466 }
467 return arr;
468 };
469
470 /**
471 * Gives an array of n random terms
472 *
473 * @param {Function} fn the function that generates something random
474 * @param {Number} n number of terms to generate
475 * @returns {Array} an array of length `n` with items generated by `fn`
476 *
477 * There can be more parameters after these. All additional parameters are provided to the given function
478 */
479 Chance.prototype.n = function(fn, n) {
480 testRange(
481 typeof fn !== "function",
482 "Chance: The first argument must be a function."
483 );
484
485 if (typeof n === 'undefined') {
486 n = 1;
487 }
488 var i = n, arr = [], params = slice.call(arguments, 2);
489
490 // Providing a negative count should result in a noop.
491 i = Math.max( 0, i );
492
493 for (null; i--; null) {
494 arr.push(fn.apply(this, params));
495 }
496
497 return arr;
498 };
499
500 // H/T to SO for this one: http://vq.io/OtUrZ5
501 Chance.prototype.pad = function (number, width, pad) {
502 // Default pad to 0 if none provided
503 pad = pad || '0';
504 // Convert number to a string
505 number = number + '';
506 return number.length >= width ? number : new Array(width - number.length + 1).join(pad) + number;
507 };
508
509 // DEPRECATED on 2015-10-01
510 Chance.prototype.pick = function (arr, count) {
511 if (arr.length === 0) {
512 throw new RangeError("Chance: Cannot pick() from an empty array");
513 }
514 if (!count || count === 1) {
515 return arr[this.natural({max: arr.length - 1})];
516 } else {
517 return this.shuffle(arr).slice(0, count);
518 }
519 };
520
521 // Given an array, returns a single random element
522 Chance.prototype.pickone = function (arr) {
523 if (arr.length === 0) {
524 throw new RangeError("Chance: Cannot pickone() from an empty array");
525 }
526 return arr[this.natural({max: arr.length - 1})];
527 };
528
529 // Given an array, returns a random set with 'count' elements
530 Chance.prototype.pickset = function (arr, count) {
531 if (count === 0) {
532 return [];
533 }
534 if (arr.length === 0) {
535 throw new RangeError("Chance: Cannot pickset() from an empty array");
536 }
537 if (count < 0) {
538 throw new RangeError("Chance: Count must be a positive number");
539 }
540 if (!count || count === 1) {
541 return [ this.pickone(arr) ];
542 } else {
543 var array = arr.slice(0);
544 var end = array.length;
545
546 return this.n(() => {
547 var index = this.natural({max: --end});
548 var value = array[index];
549 array[index] = array[end];
550 return value;
551 }, Math.min(end, count));
552 }
553 };
554
555 Chance.prototype.shuffle = function (arr) {
556 var new_array = [],
557 j = 0,
558 length = Number(arr.length),
559 source_indexes = range(length),
560 last_source_index = length - 1,
561 selected_source_index;
562
563 for (var i = 0; i < length; i++) {
564 // Pick a random index from the array
565 selected_source_index = this.natural({max: last_source_index});
566 j = source_indexes[selected_source_index];
567
568 // Add it to the new array
569 new_array[i] = arr[j];
570
571 // Mark the source index as used
572 source_indexes[selected_source_index] = source_indexes[last_source_index];
573 last_source_index -= 1;
574 }
575
576 return new_array;
577 };
578
579 // Returns a single item from an array with relative weighting of odds
580 Chance.prototype.weighted = function (arr, weights, trim) {
581 if (arr.length !== weights.length) {
582 throw new RangeError("Chance: Length of array and weights must match");
583 }
584
585 // scan weights array and sum valid entries
586 var sum = 0;
587 var val;
588 for (var weightIndex = 0; weightIndex < weights.length; ++weightIndex) {
589 val = weights[weightIndex];
590 if (isNaN(val)) {
591 throw new RangeError("Chance: All weights must be numbers");
592 }
593
594 if (val > 0) {
595 sum += val;
596 }
597 }
598
599 if (sum === 0) {
600 throw new RangeError("Chance: No valid entries in array weights");
601 }
602
603 // select a value within range
604 var selected = this.random() * sum;
605
606 // find array entry corresponding to selected value
607 var total = 0;
608 var lastGoodIdx = -1;
609 var chosenIdx;
610 for (weightIndex = 0; weightIndex < weights.length; ++weightIndex) {
611 val = weights[weightIndex];
612 total += val;
613 if (val > 0) {
614 if (selected <= total) {
615 chosenIdx = weightIndex;
616 break;
617 }
618 lastGoodIdx = weightIndex;
619 }
620
621 // handle any possible rounding error comparison to ensure something is picked
622 if (weightIndex === (weights.length - 1)) {
623 chosenIdx = lastGoodIdx;
624 }
625 }
626
627 var chosen = arr[chosenIdx];
628 trim = (typeof trim === 'undefined') ? false : trim;
629 if (trim) {
630 arr.splice(chosenIdx, 1);
631 weights.splice(chosenIdx, 1);
632 }
633
634 return chosen;
635 };
636
637 // -- End Helpers --
638
639 // -- Text --
640
641 Chance.prototype.paragraph = function (options) {
642 options = initOptions(options);
643
644 var sentences = options.sentences || this.natural({min: 3, max: 7}),
645 sentence_array = this.n(this.sentence, sentences);
646
647 return sentence_array.join(' ');
648 };
649
650 // Could get smarter about this than generating random words and
651 // chaining them together. Such as: http://vq.io/1a5ceOh
652 Chance.prototype.sentence = function (options) {
653 options = initOptions(options);
654
655 var words = options.words || this.natural({min: 12, max: 18}),
656 punctuation = options.punctuation,
657 text, word_array = this.n(this.word, words);
658
659 text = word_array.join(' ');
660
661 // Capitalize first letter of sentence
662 text = this.capitalize(text);
663
664 // Make sure punctuation has a usable value
665 if (punctuation !== false && !/^[\.\?;!:]$/.test(punctuation)) {
666 punctuation = '.';
667 }
668
669 // Add punctuation mark
670 if (punctuation) {
671 text += punctuation;
672 }
673
674 return text;
675 };
676
677 Chance.prototype.syllable = function (options) {
678 options = initOptions(options);
679
680 var length = options.length || this.natural({min: 2, max: 3}),
681 consonants = 'bcdfghjklmnprstvwz', // consonants except hard to speak ones
682 vowels = 'aeiou', // vowels
683 all = consonants + vowels, // all
684 text = '',
685 chr;
686
687 // I'm sure there's a more elegant way to do this, but this works
688 // decently well.
689 for (var i = 0; i < length; i++) {
690 if (i === 0) {
691 // First character can be anything
692 chr = this.character({pool: all});
693 } else if (consonants.indexOf(chr) === -1) {
694 // Last character was a vowel, now we want a consonant
695 chr = this.character({pool: consonants});
696 } else {
697 // Last character was a consonant, now we want a vowel
698 chr = this.character({pool: vowels});
699 }
700
701 text += chr;
702 }
703
704 if (options.capitalize) {
705 text = this.capitalize(text);
706 }
707
708 return text;
709 };
710
711 Chance.prototype.word = function (options) {
712 options = initOptions(options);
713
714 testRange(
715 options.syllables && options.length,
716 "Chance: Cannot specify both syllables AND length."
717 );
718
719 var syllables = options.syllables || this.natural({min: 1, max: 3}),
720 text = '';
721
722 if (options.length) {
723 // Either bound word by length
724 do {
725 text += this.syllable();
726 } while (text.length < options.length);
727 text = text.substring(0, options.length);
728 } else {
729 // Or by number of syllables
730 for (var i = 0; i < syllables; i++) {
731 text += this.syllable();
732 }
733 }
734
735 if (options.capitalize) {
736 text = this.capitalize(text);
737 }
738
739 return text;
740 };
741
742 // -- End Text --
743
744 // -- Person --
745
746 Chance.prototype.age = function (options) {
747 options = initOptions(options);
748 var ageRange;
749
750 switch (options.type) {
751 case 'child':
752 ageRange = {min: 0, max: 12};
753 break;
754 case 'teen':
755 ageRange = {min: 13, max: 19};
756 break;
757 case 'adult':
758 ageRange = {min: 18, max: 65};
759 break;
760 case 'senior':
761 ageRange = {min: 65, max: 100};
762 break;
763 case 'all':
764 ageRange = {min: 0, max: 100};
765 break;
766 default:
767 ageRange = {min: 18, max: 65};
768 break;
769 }
770
771 return this.natural(ageRange);
772 };
773
774 Chance.prototype.birthday = function (options) {
775 var age = this.age(options);
776 var currentYear = new Date().getFullYear();
777
778 if (options && options.type) {
779 var min = new Date();
780 var max = new Date();
781 min.setFullYear(currentYear - age - 1);
782 max.setFullYear(currentYear - age);
783
784 options = initOptions(options, {
785 min: min,
786 max: max
787 });
788 } else {
789 options = initOptions(options, {
790 year: currentYear - age
791 });
792 }
793
794 return this.date(options);
795 };
796
797 // CPF; ID to identify taxpayers in Brazil
798 Chance.prototype.cpf = function (options) {
799 options = initOptions(options, {
800 formatted: true
801 });
802
803 var n = this.n(this.natural, 9, { max: 9 });
804 var d1 = n[8]*2+n[7]*3+n[6]*4+n[5]*5+n[4]*6+n[3]*7+n[2]*8+n[1]*9+n[0]*10;
805 d1 = 11 - (d1 % 11);
806 if (d1>=10) {
807 d1 = 0;
808 }
809 var d2 = d1*2+n[8]*3+n[7]*4+n[6]*5+n[5]*6+n[4]*7+n[3]*8+n[2]*9+n[1]*10+n[0]*11;
810 d2 = 11 - (d2 % 11);
811 if (d2>=10) {
812 d2 = 0;
813 }
814 var cpf = ''+n[0]+n[1]+n[2]+'.'+n[3]+n[4]+n[5]+'.'+n[6]+n[7]+n[8]+'-'+d1+d2;
815 return options.formatted ? cpf : cpf.replace(/\D/g,'');
816 };
817
818 // CNPJ: ID to identify companies in Brazil
819 Chance.prototype.cnpj = function (options) {
820 options = initOptions(options, {
821 formatted: true
822 });
823
824 var n = this.n(this.natural, 12, { max: 12 });
825 var d1 = n[11]*2+n[10]*3+n[9]*4+n[8]*5+n[7]*6+n[6]*7+n[5]*8+n[4]*9+n[3]*2+n[2]*3+n[1]*4+n[0]*5;
826 d1 = 11 - (d1 % 11);
827 if (d1<2) {
828 d1 = 0;
829 }
830 var d2 = d1*2+n[11]*3+n[10]*4+n[9]*5+n[8]*6+n[7]*7+n[6]*8+n[5]*9+n[4]*2+n[3]*3+n[2]*4+n[1]*5+n[0]*6;
831 d2 = 11 - (d2 % 11);
832 if (d2<2) {
833 d2 = 0;
834 }
835 var cnpj = ''+n[0]+n[1]+'.'+n[2]+n[3]+n[4]+'.'+n[5]+n[6]+n[7]+'/'+n[8]+n[9]+n[10]+n[11]+'-'+d1+d2;
836 return options.formatted ? cnpj : cnpj.replace(/\D/g,'');
837 };
838
839 Chance.prototype.first = function (options) {
840 options = initOptions(options, {gender: this.gender(), nationality: 'en'});
841 return this.pick(this.get("firstNames")[options.gender.toLowerCase()][options.nationality.toLowerCase()]);
842 };
843
844 Chance.prototype.profession = function (options) {
845 options = initOptions(options);
846 if(options.rank){
847 return this.pick(['Apprentice ', 'Junior ', 'Senior ', 'Lead ']) + this.pick(this.get("profession"));
848 } else{
849 return this.pick(this.get("profession"));
850 }
851 };
852
853 Chance.prototype.company = function (){
854 return this.pick(this.get("company"));
855 };
856
857 Chance.prototype.gender = function (options) {
858 options = initOptions(options, {extraGenders: []});
859 return this.pick(['Male', 'Female'].concat(options.extraGenders));
860 };
861
862 Chance.prototype.last = function (options) {
863 options = initOptions(options, {nationality: '*'});
864 if (options.nationality === "*") {
865 var allLastNames = []
866 var lastNames = this.get("lastNames")
867 Object.keys(lastNames).forEach(function(key, i){
868 allLastNames = allLastNames.concat(lastNames[key])
869 })
870 return this.pick(allLastNames)
871 }
872 else {
873 return this.pick(this.get("lastNames")[options.nationality.toLowerCase()]);
874 }
875
876 };
877
878 Chance.prototype.israelId=function(){
879 var x=this.string({pool: '0123456789',length:8});
880 var y=0;
881 for (var i=0;i<x.length;i++){
882 var thisDigit= x[i] * (i/2===parseInt(i/2) ? 1 : 2);
883 thisDigit=this.pad(thisDigit,2).toString();
884 thisDigit=parseInt(thisDigit[0]) + parseInt(thisDigit[1]);
885 y=y+thisDigit;
886 }
887 x=x+(10-parseInt(y.toString().slice(-1))).toString().slice(-1);
888 return x;
889 };
890
891 Chance.prototype.mrz = function (options) {
892 var checkDigit = function (input) {
893 var alpha = "<ABCDEFGHIJKLMNOPQRSTUVWXYXZ".split(''),
894 multipliers = [ 7, 3, 1 ],
895 runningTotal = 0;
896
897 if (typeof input !== 'string') {
898 input = input.toString();
899 }
900
901 input.split('').forEach(function(character, idx) {
902 var pos = alpha.indexOf(character);
903
904 if(pos !== -1) {
905 character = pos === 0 ? 0 : pos + 9;
906 } else {
907 character = parseInt(character, 10);
908 }
909 character *= multipliers[idx % multipliers.length];
910 runningTotal += character;
911 });
912 return runningTotal % 10;
913 };
914 var generate = function (opts) {
915 var pad = function (length) {
916 return new Array(length + 1).join('<');
917 };
918 var number = [ 'P<',
919 opts.issuer,
920 opts.last.toUpperCase(),
921 '<<',
922 opts.first.toUpperCase(),
923 pad(39 - (opts.last.length + opts.first.length + 2)),
924 opts.passportNumber,
925 checkDigit(opts.passportNumber),
926 opts.nationality,
927 opts.dob,
928 checkDigit(opts.dob),
929 opts.gender,
930 opts.expiry,
931 checkDigit(opts.expiry),
932 pad(14),
933 checkDigit(pad(14)) ].join('');
934
935 return number +
936 (checkDigit(number.substr(44, 10) +
937 number.substr(57, 7) +
938 number.substr(65, 7)));
939 };
940
941 var that = this;
942
943 options = initOptions(options, {
944 first: this.first(),
945 last: this.last(),
946 passportNumber: this.integer({min: 100000000, max: 999999999}),
947 dob: (function () {
948 var date = that.birthday({type: 'adult'});
949 return [date.getFullYear().toString().substr(2),
950 that.pad(date.getMonth() + 1, 2),
951 that.pad(date.getDate(), 2)].join('');
952 }()),
953 expiry: (function () {
954 var date = new Date();
955 return [(date.getFullYear() + 5).toString().substr(2),
956 that.pad(date.getMonth() + 1, 2),
957 that.pad(date.getDate(), 2)].join('');
958 }()),
959 gender: this.gender() === 'Female' ? 'F': 'M',
960 issuer: 'GBR',
961 nationality: 'GBR'
962 });
963 return generate (options);
964 };
965
966 Chance.prototype.name = function (options) {
967 options = initOptions(options);
968
969 var first = this.first(options),
970 last = this.last(options),
971 name;
972
973 if (options.middle) {
974 name = first + ' ' + this.first(options) + ' ' + last;
975 } else if (options.middle_initial) {
976 name = first + ' ' + this.character({alpha: true, casing: 'upper'}) + '. ' + last;
977 } else {
978 name = first + ' ' + last;
979 }
980
981 if (options.prefix) {
982 name = this.prefix(options) + ' ' + name;
983 }
984
985 if (options.suffix) {
986 name = name + ' ' + this.suffix(options);
987 }
988
989 return name;
990 };
991
992 // Return the list of available name prefixes based on supplied gender.
993 // @todo introduce internationalization
994 Chance.prototype.name_prefixes = function (gender) {
995 gender = gender || "all";
996 gender = gender.toLowerCase();
997
998 var prefixes = [
999 { name: 'Doctor', abbreviation: 'Dr.' }
1000 ];
1001
1002 if (gender === "male" || gender === "all") {
1003 prefixes.push({ name: 'Mister', abbreviation: 'Mr.' });
1004 }
1005
1006 if (gender === "female" || gender === "all") {
1007 prefixes.push({ name: 'Miss', abbreviation: 'Miss' });
1008 prefixes.push({ name: 'Misses', abbreviation: 'Mrs.' });
1009 }
1010
1011 return prefixes;
1012 };
1013
1014 // Alias for name_prefix
1015 Chance.prototype.prefix = function (options) {
1016 return this.name_prefix(options);
1017 };
1018
1019 Chance.prototype.name_prefix = function (options) {
1020 options = initOptions(options, { gender: "all" });
1021 return options.full ?
1022 this.pick(this.name_prefixes(options.gender)).name :
1023 this.pick(this.name_prefixes(options.gender)).abbreviation;
1024 };
1025 //Hungarian ID number
1026 Chance.prototype.HIDN= function(){
1027 //Hungarian ID nuber structure: XXXXXXYY (X=number,Y=Capital Latin letter)
1028 var idn_pool="0123456789";
1029 var idn_chrs="ABCDEFGHIJKLMNOPQRSTUVWXYXZ";
1030 var idn="";
1031 idn+=this.string({pool:idn_pool,length:6});
1032 idn+=this.string({pool:idn_chrs,length:2});
1033 return idn;
1034 };
1035
1036
1037 Chance.prototype.ssn = function (options) {
1038 options = initOptions(options, {ssnFour: false, dashes: true});
1039 var ssn_pool = "1234567890",
1040 ssn,
1041 dash = options.dashes ? '-' : '';
1042
1043 if(!options.ssnFour) {
1044 ssn = this.string({pool: ssn_pool, length: 3}) + dash +
1045 this.string({pool: ssn_pool, length: 2}) + dash +
1046 this.string({pool: ssn_pool, length: 4});
1047 } else {
1048 ssn = this.string({pool: ssn_pool, length: 4});
1049 }
1050 return ssn;
1051 };
1052
1053 // Aadhar is similar to ssn, used in India to uniquely identify a person
1054 Chance.prototype.aadhar = function (options) {
1055 options = initOptions(options, {onlyLastFour: false, separatedByWhiteSpace: true});
1056 var aadhar_pool = "1234567890",
1057 aadhar,
1058 whiteSpace = options.separatedByWhiteSpace ? ' ' : '';
1059
1060 if(!options.onlyLastFour) {
1061 aadhar = this.string({pool: aadhar_pool, length: 4}) + whiteSpace +
1062 this.string({pool: aadhar_pool, length: 4}) + whiteSpace +
1063 this.string({pool: aadhar_pool, length: 4});
1064 } else {
1065 aadhar = this.string({pool: aadhar_pool, length: 4});
1066 }
1067 return aadhar;
1068 };
1069
1070 // Return the list of available name suffixes
1071 // @todo introduce internationalization
1072 Chance.prototype.name_suffixes = function () {
1073 var suffixes = [
1074 { name: 'Doctor of Osteopathic Medicine', abbreviation: 'D.O.' },
1075 { name: 'Doctor of Philosophy', abbreviation: 'Ph.D.' },
1076 { name: 'Esquire', abbreviation: 'Esq.' },
1077 { name: 'Junior', abbreviation: 'Jr.' },
1078 { name: 'Juris Doctor', abbreviation: 'J.D.' },
1079 { name: 'Master of Arts', abbreviation: 'M.A.' },
1080 { name: 'Master of Business Administration', abbreviation: 'M.B.A.' },
1081 { name: 'Master of Science', abbreviation: 'M.S.' },
1082 { name: 'Medical Doctor', abbreviation: 'M.D.' },
1083 { name: 'Senior', abbreviation: 'Sr.' },
1084 { name: 'The Third', abbreviation: 'III' },
1085 { name: 'The Fourth', abbreviation: 'IV' },
1086 { name: 'Bachelor of Engineering', abbreviation: 'B.E' },
1087 { name: 'Bachelor of Technology', abbreviation: 'B.TECH' }
1088 ];
1089 return suffixes;
1090 };
1091
1092 // Alias for name_suffix
1093 Chance.prototype.suffix = function (options) {
1094 return this.name_suffix(options);
1095 };
1096
1097 Chance.prototype.name_suffix = function (options) {
1098 options = initOptions(options);
1099 return options.full ?
1100 this.pick(this.name_suffixes()).name :
1101 this.pick(this.name_suffixes()).abbreviation;
1102 };
1103
1104 Chance.prototype.nationalities = function () {
1105 return this.get("nationalities");
1106 };
1107
1108 // Generate random nationality based on json list
1109 Chance.prototype.nationality = function () {
1110 var nationality = this.pick(this.nationalities());
1111 return nationality.name;
1112 };
1113
1114 // -- End Person --
1115
1116 // -- Mobile --
1117 // Android GCM Registration ID
1118 Chance.prototype.android_id = function () {
1119 return "APA91" + this.string({ pool: "0123456789abcefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_", length: 178 });
1120 };
1121
1122 // Apple Push Token
1123 Chance.prototype.apple_token = function () {
1124 return this.string({ pool: "abcdef1234567890", length: 64 });
1125 };
1126
1127 // Windows Phone 8 ANID2
1128 Chance.prototype.wp8_anid2 = function () {
1129 return base64( this.hash( { length : 32 } ) );
1130 };
1131
1132 // Windows Phone 7 ANID
1133 Chance.prototype.wp7_anid = function () {
1134 return 'A=' + this.guid().replace(/-/g, '').toUpperCase() + '&E=' + this.hash({ length:3 }) + '&W=' + this.integer({ min:0, max:9 });
1135 };
1136
1137 // BlackBerry Device PIN
1138 Chance.prototype.bb_pin = function () {
1139 return this.hash({ length: 8 });
1140 };
1141
1142 // -- End Mobile --
1143
1144 // -- Web --
1145 Chance.prototype.avatar = function (options) {
1146 var url = null;
1147 var URL_BASE = '//www.gravatar.com/avatar/';
1148 var PROTOCOLS = {
1149 http: 'http',
1150 https: 'https'
1151 };
1152 var FILE_TYPES = {
1153 bmp: 'bmp',
1154 gif: 'gif',
1155 jpg: 'jpg',
1156 png: 'png'
1157 };
1158 var FALLBACKS = {
1159 '404': '404', // Return 404 if not found
1160 mm: 'mm', // Mystery man
1161 identicon: 'identicon', // Geometric pattern based on hash
1162 monsterid: 'monsterid', // A generated monster icon
1163 wavatar: 'wavatar', // A generated face
1164 retro: 'retro', // 8-bit icon
1165 blank: 'blank' // A transparent png
1166 };
1167 var RATINGS = {
1168 g: 'g',
1169 pg: 'pg',
1170 r: 'r',
1171 x: 'x'
1172 };
1173 var opts = {
1174 protocol: null,
1175 email: null,
1176 fileExtension: null,
1177 size: null,
1178 fallback: null,
1179 rating: null
1180 };
1181
1182 if (!options) {
1183 // Set to a random email
1184 opts.email = this.email();
1185 options = {};
1186 }
1187 else if (typeof options === 'string') {
1188 opts.email = options;
1189 options = {};
1190 }
1191 else if (typeof options !== 'object') {
1192 return null;
1193 }
1194 else if (options.constructor === 'Array') {
1195 return null;
1196 }
1197
1198 opts = initOptions(options, opts);
1199
1200 if (!opts.email) {
1201 // Set to a random email
1202 opts.email = this.email();
1203 }
1204
1205 // Safe checking for params
1206 opts.protocol = PROTOCOLS[opts.protocol] ? opts.protocol + ':' : '';
1207 opts.size = parseInt(opts.size, 0) ? opts.size : '';
1208 opts.rating = RATINGS[opts.rating] ? opts.rating : '';
1209 opts.fallback = FALLBACKS[opts.fallback] ? opts.fallback : '';
1210 opts.fileExtension = FILE_TYPES[opts.fileExtension] ? opts.fileExtension : '';
1211
1212 url =
1213 opts.protocol +
1214 URL_BASE +
1215 this.bimd5.md5(opts.email) +
1216 (opts.fileExtension ? '.' + opts.fileExtension : '') +
1217 (opts.size || opts.rating || opts.fallback ? '?' : '') +
1218 (opts.size ? '&s=' + opts.size.toString() : '') +
1219 (opts.rating ? '&r=' + opts.rating : '') +
1220 (opts.fallback ? '&d=' + opts.fallback : '')
1221 ;
1222
1223 return url;
1224 };
1225
1226 /**
1227 * #Description:
1228 * ===============================================
1229 * Generate random color value base on color type:
1230 * -> hex
1231 * -> rgb
1232 * -> rgba
1233 * -> 0x
1234 * -> named color
1235 *
1236 * #Examples:
1237 * ===============================================
1238 * * Geerate random hex color
1239 * chance.color() => '#79c157' / 'rgb(110,52,164)' / '0x67ae0b' / '#e2e2e2' / '#29CFA7'
1240 *
1241 * * Generate Hex based color value
1242 * chance.color({format: 'hex'}) => '#d67118'
1243 *
1244 * * Generate simple rgb value
1245 * chance.color({format: 'rgb'}) => 'rgb(110,52,164)'
1246 *
1247 * * Generate Ox based color value
1248 * chance.color({format: '0x'}) => '0x67ae0b'
1249 *
1250 * * Generate graiscale based value
1251 * chance.color({grayscale: true}) => '#e2e2e2'
1252 *
1253 * * Return valide color name
1254 * chance.color({format: 'name'}) => 'red'
1255 *
1256 * * Make color uppercase
1257 * chance.color({casing: 'upper'}) => '#29CFA7'
1258 *
1259 * * Min Max values for RGBA
1260 * var light_red = chance.color({format: 'hex', min_red: 200, max_red: 255, max_green: 0, max_blue: 0, min_alpha: .2, max_alpha: .3});
1261 *
1262 * @param [object] options
1263 * @return [string] color value
1264 */
1265 Chance.prototype.color = function (options) {
1266 function gray(value, delimiter) {
1267 return [value, value, value].join(delimiter || '');
1268 }
1269
1270 function rgb(hasAlpha) {
1271 var rgbValue = (hasAlpha) ? 'rgba' : 'rgb';
1272 var alphaChannel = (hasAlpha) ? (',' + this.floating({min:min_alpha, max:max_alpha})) : "";
1273 var colorValue = (isGrayscale) ? (gray(this.natural({min: min_rgb, max: max_rgb}), ',')) : (this.natural({min: min_green, max: max_green}) + ',' + this.natural({min: min_blue, max: max_blue}) + ',' + this.natural({max: 255}));
1274 return rgbValue + '(' + colorValue + alphaChannel + ')';
1275 }
1276
1277 function hex(start, end, withHash) {
1278 var symbol = (withHash) ? "#" : "";
1279 var hexstring = "";
1280
1281 if (isGrayscale) {
1282 hexstring = gray(this.pad(this.hex({min: min_rgb, max: max_rgb}), 2));
1283 if (options.format === "shorthex") {
1284 hexstring = gray(this.hex({min: 0, max: 15}));
1285 }
1286 }
1287 else {
1288 if (options.format === "shorthex") {
1289 hexstring = this.pad(this.hex({min: Math.floor(min_red / 16), max: Math.floor(max_red / 16)}), 1) + this.pad(this.hex({min: Math.floor(min_green / 16), max: Math.floor(max_green / 16)}), 1) + this.pad(this.hex({min: Math.floor(min_blue / 16), max: Math.floor(max_blue / 16)}), 1);
1290 }
1291 else if (min_red !== undefined || max_red !== undefined || min_green !== undefined || max_green !== undefined || min_blue !== undefined || max_blue !== undefined) {
1292 hexstring = this.pad(this.hex({min: min_red, max: max_red}), 2) + this.pad(this.hex({min: min_green, max: max_green}), 2) + this.pad(this.hex({min: min_blue, max: max_blue}), 2);
1293 }
1294 else {
1295 hexstring = this.pad(this.hex({min: min_rgb, max: max_rgb}), 2) + this.pad(this.hex({min: min_rgb, max: max_rgb}), 2) + this.pad(this.hex({min: min_rgb, max: max_rgb}), 2);
1296 }
1297 }
1298
1299 return symbol + hexstring;
1300 }
1301
1302 options = initOptions(options, {
1303 format: this.pick(['hex', 'shorthex', 'rgb', 'rgba', '0x', 'name']),
1304 grayscale: false,
1305 casing: 'lower',
1306 min: 0,
1307 max: 255,
1308 min_red: undefined,
1309 max_red: undefined,
1310 min_green: undefined,
1311 max_green: undefined,
1312 min_blue: undefined,
1313 max_blue: undefined,
1314 min_alpha: 0,
1315 max_alpha: 1
1316 });
1317
1318 var isGrayscale = options.grayscale;
1319 var min_rgb = options.min;
1320 var max_rgb = options.max;
1321 var min_red = options.min_red;
1322 var max_red = options.max_red;
1323 var min_green = options.min_green;
1324 var max_green = options.max_green;
1325 var min_blue = options.min_blue;
1326 var max_blue = options.max_blue;
1327 var min_alpha = options.min_alpha;
1328 var max_alpha = options.max_alpha;
1329 if (options.min_red === undefined) { min_red = min_rgb; }
1330 if (options.max_red === undefined) { max_red = max_rgb; }
1331 if (options.min_green === undefined) { min_green = min_rgb; }
1332 if (options.max_green === undefined) { max_green = max_rgb; }
1333 if (options.min_blue === undefined) { min_blue = min_rgb; }
1334 if (options.max_blue === undefined) { max_blue = max_rgb; }
1335 if (options.min_alpha === undefined) { min_alpha = 0; }
1336 if (options.max_alpha === undefined) { max_alpha = 1; }
1337 if (isGrayscale && min_rgb === 0 && max_rgb === 255 && min_red !== undefined && max_red !== undefined) {
1338 min_rgb = ((min_red + min_green + min_blue) / 3);
1339 max_rgb = ((max_red + max_green + max_blue) / 3);
1340 }
1341 var colorValue;
1342
1343 if (options.format === 'hex') {
1344 colorValue = hex.call(this, 2, 6, true);
1345 }
1346 else if (options.format === 'shorthex') {
1347 colorValue = hex.call(this, 1, 3, true);
1348 }
1349 else if (options.format === 'rgb') {
1350 colorValue = rgb.call(this, false);
1351 }
1352 else if (options.format === 'rgba') {
1353 colorValue = rgb.call(this, true);
1354 }
1355 else if (options.format === '0x') {
1356 colorValue = '0x' + hex.call(this, 2, 6);
1357 }
1358 else if(options.format === 'name') {
1359 return this.pick(this.get("colorNames"));
1360 }
1361 else {
1362 throw new RangeError('Invalid format provided. Please provide one of "hex", "shorthex", "rgb", "rgba", "0x" or "name".');
1363 }
1364
1365 if (options.casing === 'upper' ) {
1366 colorValue = colorValue.toUpperCase();
1367 }
1368
1369 return colorValue;
1370 };
1371
1372 Chance.prototype.domain = function (options) {
1373 options = initOptions(options);
1374 return this.word() + '.' + (options.tld || this.tld());
1375 };
1376
1377 Chance.prototype.email = function (options) {
1378 options = initOptions(options);
1379 return this.word({length: options.length}) + '@' + (options.domain || this.domain());
1380 };
1381
1382 /**
1383 * #Description:
1384 * ===============================================
1385 * Generate a random Facebook id, aka fbid.
1386 *
1387 * NOTE: At the moment (Sep 2017), Facebook ids are
1388 * "numeric strings" of length 16.
1389 * However, Facebook Graph API documentation states that
1390 * "it is extremely likely to change over time".
1391 * @see https://developers.facebook.com/docs/graph-api/overview/
1392 *
1393 * #Examples:
1394 * ===============================================
1395 * chance.fbid() => '1000035231661304'
1396 *
1397 * @return [string] facebook id
1398 */
1399 Chance.prototype.fbid = function () {
1400 return '10000' + this.string({pool: "1234567890", length: 11});
1401 };
1402
1403 Chance.prototype.google_analytics = function () {
1404 var account = this.pad(this.natural({max: 999999}), 6);
1405 var property = this.pad(this.natural({max: 99}), 2);
1406
1407 return 'UA-' + account + '-' + property;
1408 };
1409
1410 Chance.prototype.hashtag = function () {
1411 return '#' + this.word();
1412 };
1413
1414 Chance.prototype.ip = function () {
1415 // Todo: This could return some reserved IPs. See http://vq.io/137dgYy
1416 // this should probably be updated to account for that rare as it may be
1417 return this.natural({min: 1, max: 254}) + '.' +
1418 this.natural({max: 255}) + '.' +
1419 this.natural({max: 255}) + '.' +
1420 this.natural({min: 1, max: 254});
1421 };
1422
1423 Chance.prototype.ipv6 = function () {
1424 var ip_addr = this.n(this.hash, 8, {length: 4});
1425
1426 return ip_addr.join(":");
1427 };
1428
1429 Chance.prototype.klout = function () {
1430 return this.natural({min: 1, max: 99});
1431 };
1432
1433 Chance.prototype.semver = function (options) {
1434 options = initOptions(options, { include_prerelease: true });
1435
1436 var range = this.pickone(["^", "~", "<", ">", "<=", ">=", "="]);
1437 if (options.range) {
1438 range = options.range;
1439 }
1440
1441 var prerelease = "";
1442 if (options.include_prerelease) {
1443 prerelease = this.weighted(["", "-dev", "-beta", "-alpha"], [50, 10, 5, 1]);
1444 }
1445 return range + this.rpg('3d10').join('.') + prerelease;
1446 };
1447
1448 Chance.prototype.tlds = function () {
1449 return ['com', 'org', 'edu', 'gov', 'co.uk', 'net', 'io', 'ac', 'ad', 'ae', 'af', 'ag', 'ai', 'al', 'am', 'an', 'ao', 'aq', 'ar', 'as', 'at', 'au', 'aw', 'ax', 'az', 'ba', 'bb', 'bd', 'be', 'bf', 'bg', 'bh', 'bi', 'bj', 'bm', 'bn', 'bo', 'bq', 'br', 'bs', 'bt', 'bv', 'bw', 'by', 'bz', 'ca', 'cc', 'cd', 'cf', 'cg', 'ch', 'ci', 'ck', 'cl', 'cm', 'cn', 'co', 'cr', 'cu', 'cv', 'cw', 'cx', 'cy', 'cz', 'de', 'dj', 'dk', 'dm', 'do', 'dz', 'ec', 'ee', 'eg', 'eh', 'er', 'es', 'et', 'eu', 'fi', 'fj', 'fk', 'fm', 'fo', 'fr', 'ga', 'gb', 'gd', 'ge', 'gf', 'gg', 'gh', 'gi', 'gl', 'gm', 'gn', 'gp', 'gq', 'gr', 'gs', 'gt', 'gu', 'gw', 'gy', 'hk', 'hm', 'hn', 'hr', 'ht', 'hu', 'id', 'ie', 'il', 'im', 'in', 'io', 'iq', 'ir', 'is', 'it', 'je', 'jm', 'jo', 'jp', 'ke', 'kg', 'kh', 'ki', 'km', 'kn', 'kp', 'kr', 'kw', 'ky', 'kz', 'la', 'lb', 'lc', 'li', 'lk', 'lr', 'ls', 'lt', 'lu', 'lv', 'ly', 'ma', 'mc', 'md', 'me', 'mg', 'mh', 'mk', 'ml', 'mm', 'mn', 'mo', 'mp', 'mq', 'mr', 'ms', 'mt', 'mu', 'mv', 'mw', 'mx', 'my', 'mz', 'na', 'nc', 'ne', 'nf', 'ng', 'ni', 'nl', 'no', 'np', 'nr', 'nu', 'nz', 'om', 'pa', 'pe', 'pf', 'pg', 'ph', 'pk', 'pl', 'pm', 'pn', 'pr', 'ps', 'pt', 'pw', 'py', 'qa', 're', 'ro', 'rs', 'ru', 'rw', 'sa', 'sb', 'sc', 'sd', 'se', 'sg', 'sh', 'si', 'sj', 'sk', 'sl', 'sm', 'sn', 'so', 'sr', 'ss', 'st', 'su', 'sv', 'sx', 'sy', 'sz', 'tc', 'td', 'tf', 'tg', 'th', 'tj', 'tk', 'tl', 'tm', 'tn', 'to', 'tp', 'tr', 'tt', 'tv', 'tw', 'tz', 'ua', 'ug', 'uk', 'us', 'uy', 'uz', 'va', 'vc', 've', 'vg', 'vi', 'vn', 'vu', 'wf', 'ws', 'ye', 'yt', 'za', 'zm', 'zw'];
1450 };
1451
1452 Chance.prototype.tld = function () {
1453 return this.pick(this.tlds());
1454 };
1455
1456 Chance.prototype.twitter = function () {
1457 return '@' + this.word();
1458 };
1459
1460 Chance.prototype.url = function (options) {
1461 options = initOptions(options, { protocol: "http", domain: this.domain(options), domain_prefix: "", path: this.word(), extensions: []});
1462
1463 var extension = options.extensions.length > 0 ? "." + this.pick(options.extensions) : "";
1464 var domain = options.domain_prefix ? options.domain_prefix + "." + options.domain : options.domain;
1465
1466 return options.protocol + "://" + domain + "/" + options.path + extension;
1467 };
1468
1469 Chance.prototype.port = function() {
1470 return this.integer({min: 0, max: 65535});
1471 };
1472
1473 Chance.prototype.locale = function (options) {
1474 options = initOptions(options);
1475 if (options.region){
1476 return this.pick(this.get("locale_regions"));
1477 } else {
1478 return this.pick(this.get("locale_languages"));
1479 }
1480 };
1481
1482 Chance.prototype.locales = function (options) {
1483 options = initOptions(options);
1484 if (options.region){
1485 return this.get("locale_regions");
1486 } else {
1487 return this.get("locale_languages");
1488 }
1489 };
1490
1491 Chance.prototype.loremPicsum = function (options) {
1492 options = initOptions(options, { width: 500, height: 500, greyscale: false, blurred: false });
1493
1494 var greyscale = options.greyscale ? 'g/' : '';
1495 var query = options.blurred ? '/?blur' : '/?random';
1496
1497 return 'https://picsum.photos/' + greyscale + options.width + '/' + options.height + query;
1498 }
1499
1500 // -- End Web --
1501
1502 // -- Location --
1503
1504 Chance.prototype.address = function (options) {
1505 options = initOptions(options);
1506 return this.natural({min: 5, max: 2000}) + ' ' + this.street(options);
1507 };
1508
1509 Chance.prototype.altitude = function (options) {
1510 options = initOptions(options, {fixed: 5, min: 0, max: 8848});
1511 return this.floating({
1512 min: options.min,
1513 max: options.max,
1514 fixed: options.fixed
1515 });
1516 };
1517
1518 Chance.prototype.areacode = function (options) {
1519 options = initOptions(options, {parens : true});
1520 // Don't want area codes to start with 1, or have a 9 as the second digit
1521 var areacode = this.natural({min: 2, max: 9}).toString() +
1522 this.natural({min: 0, max: 8}).toString() +
1523 this.natural({min: 0, max: 9}).toString();
1524
1525 return options.parens ? '(' + areacode + ')' : areacode;
1526 };
1527
1528 Chance.prototype.city = function () {
1529 return this.capitalize(this.word({syllables: 3}));
1530 };
1531
1532 Chance.prototype.coordinates = function (options) {
1533 return this.latitude(options) + ', ' + this.longitude(options);
1534 };
1535
1536 Chance.prototype.countries = function () {
1537 return this.get("countries");
1538 };
1539
1540 Chance.prototype.country = function (options) {
1541 options = initOptions(options);
1542 var country = this.pick(this.countries());
1543 return options.raw ? country : options.full ? country.name : country.abbreviation;
1544 };
1545
1546 Chance.prototype.depth = function (options) {
1547 options = initOptions(options, {fixed: 5, min: -10994, max: 0});
1548 return this.floating({
1549 min: options.min,
1550 max: options.max,
1551 fixed: options.fixed
1552 });
1553 };
1554
1555 Chance.prototype.geohash = function (options) {
1556 options = initOptions(options, { length: 7 });
1557 return this.string({ length: options.length, pool: '0123456789bcdefghjkmnpqrstuvwxyz' });
1558 };
1559
1560 Chance.prototype.geojson = function (options) {
1561 return this.latitude(options) + ', ' + this.longitude(options) + ', ' + this.altitude(options);
1562 };
1563
1564 Chance.prototype.latitude = function (options) {
1565 options = initOptions(options, {fixed: 5, min: -90, max: 90});
1566 return this.floating({min: options.min, max: options.max, fixed: options.fixed});
1567 };
1568
1569 Chance.prototype.longitude = function (options) {
1570 options = initOptions(options, {fixed: 5, min: -180, max: 180});
1571 return this.floating({min: options.min, max: options.max, fixed: options.fixed});
1572 };
1573
1574 Chance.prototype.phone = function (options) {
1575 var self = this,
1576 numPick,
1577 ukNum = function (parts) {
1578 var section = [];
1579 //fills the section part of the phone number with random numbers.
1580 parts.sections.forEach(function(n) {
1581 section.push(self.string({ pool: '0123456789', length: n}));
1582 });
1583 return parts.area + section.join(' ');
1584 };
1585 options = initOptions(options, {
1586 formatted: true,
1587 country: 'us',
1588 mobile: false
1589 });
1590 if (!options.formatted) {
1591 options.parens = false;
1592 }
1593 var phone;
1594 switch (options.country) {
1595 case 'fr':
1596 if (!options.mobile) {
1597 numPick = this.pick([
1598 // Valid zone and département codes.
1599 '01' + this.pick(['30', '34', '39', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '53', '55', '56', '58', '60', '64', '69', '70', '72', '73', '74', '75', '76', '77', '78', '79', '80', '81', '82', '83']) + self.string({ pool: '0123456789', length: 6}),
1600 '02' + this.pick(['14', '18', '22', '23', '28', '29', '30', '31', '32', '33', '34', '35', '36', '37', '38', '40', '41', '43', '44', '45', '46', '47', '48', '49', '50', '51', '52', '53', '54', '56', '57', '61', '62', '69', '72', '76', '77', '78', '85', '90', '96', '97', '98', '99']) + self.string({ pool: '0123456789', length: 6}),
1601 '03' + this.pick(['10', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '39', '44', '45', '51', '52', '54', '55', '57', '58', '59', '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '70', '71', '72', '73', '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '90']) + self.string({ pool: '0123456789', length: 6}),
1602 '04' + this.pick(['11', '13', '15', '20', '22', '26', '27', '30', '32', '34', '37', '42', '43', '44', '50', '56', '57', '63', '66', '67', '68', '69', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '80', '81', '82', '83', '84', '85', '86', '88', '89', '90', '91', '92', '93', '94', '95', '97', '98']) + self.string({ pool: '0123456789', length: 6}),
1603 '05' + this.pick(['08', '16', '17', '19', '24', '31', '32', '33', '34', '35', '40', '45', '46', '47', '49', '53', '55', '56', '57', '58', '59', '61', '62', '63', '64', '65', '67', '79', '81', '82', '86', '87', '90', '94']) + self.string({ pool: '0123456789', length: 6}),
1604 '09' + self.string({ pool: '0123456789', length: 8}),
1605 ]);
1606 phone = options.formatted ? numPick.match(/../g).join(' ') : numPick;
1607 } else {
1608 numPick = this.pick(['06', '07']) + self.string({ pool: '0123456789', length: 8});
1609 phone = options.formatted ? numPick.match(/../g).join(' ') : numPick;
1610 }
1611 break;
1612 case 'uk':
1613 if (!options.mobile) {
1614 numPick = this.pick([
1615 //valid area codes of major cities/counties followed by random numbers in required format.
1616
1617 { area: '01' + this.character({ pool: '234569' }) + '1 ', sections: [3,4] },
1618 { area: '020 ' + this.character({ pool: '378' }), sections: [3,4] },
1619 { area: '023 ' + this.character({ pool: '89' }), sections: [3,4] },
1620 { area: '024 7', sections: [3,4] },
1621 { area: '028 ' + this.pick(['25','28','37','71','82','90','92','95']), sections: [2,4] },
1622 { area: '012' + this.pick(['04','08','54','76','97','98']) + ' ', sections: [6] },
1623 { area: '013' + this.pick(['63','64','84','86']) + ' ', sections: [6] },
1624 { area: '014' + this.pick(['04','20','60','61','80','88']) + ' ', sections: [6] },
1625 { area: '015' + this.pick(['24','27','62','66']) + ' ', sections: [6] },
1626 { area: '016' + this.pick(['06','29','35','47','59','95']) + ' ', sections: [6] },
1627 { area: '017' + this.pick(['26','44','50','68']) + ' ', sections: [6] },
1628 { area: '018' + this.pick(['27','37','84','97']) + ' ', sections: [6] },
1629 { area: '019' + this.pick(['00','05','35','46','49','63','95']) + ' ', sections: [6] }
1630 ]);
1631 phone = options.formatted ? ukNum(numPick) : ukNum(numPick).replace(' ', '', 'g');
1632 } else {
1633 numPick = this.pick([
1634 { area: '07' + this.pick(['4','5','7','8','9']), sections: [2,6] },
1635 { area: '07624 ', sections: [6] }
1636 ]);
1637 phone = options.formatted ? ukNum(numPick) : ukNum(numPick).replace(' ', '');
1638 }
1639 break;
1640 case 'za':
1641 if (!options.mobile) {
1642 numPick = this.pick([
1643 '01' + this.pick(['0', '1', '2', '3', '4', '5', '6', '7', '8']) + self.string({ pool: '0123456789', length: 7}),
1644 '02' + this.pick(['1', '2', '3', '4', '7', '8']) + self.string({ pool: '0123456789', length: 7}),
1645 '03' + this.pick(['1', '2', '3', '5', '6', '9']) + self.string({ pool: '0123456789', length: 7}),
1646 '04' + this.pick(['1', '2', '3', '4', '5','6','7', '8','9']) + self.string({ pool: '0123456789', length: 7}),
1647 '05' + this.pick(['1', '3', '4', '6', '7', '8']) + self.string({ pool: '0123456789', length: 7}),
1648 ]);
1649 phone = options.formatted || numPick;
1650 } else {
1651 numPick = this.pick([
1652 '060' + this.pick(['3','4','5','6','7','8','9']) + self.string({ pool: '0123456789', length: 6}),
1653 '061' + this.pick(['0','1','2','3','4','5','8']) + self.string({ pool: '0123456789', length: 6}),
1654 '06' + self.string({ pool: '0123456789', length: 7}),
1655 '071' + this.pick(['0','1','2','3','4','5','6','7','8','9']) + self.string({ pool: '0123456789', length: 6}),
1656 '07' + this.pick(['2','3','4','6','7','8','9']) + self.string({ pool: '0123456789', length: 7}),
1657 '08' + this.pick(['0','1','2','3','4','5']) + self.string({ pool: '0123456789', length: 7}),
1658 ]);
1659 phone = options.formatted || numPick;
1660 }
1661 break;
1662 case 'us':
1663 var areacode = this.areacode(options).toString();
1664 var exchange = this.natural({ min: 2, max: 9 }).toString() +
1665 this.natural({ min: 0, max: 9 }).toString() +
1666 this.natural({ min: 0, max: 9 }).toString();
1667 var subscriber = this.natural({ min: 1000, max: 9999 }).toString(); // this could be random [0-9]{4}
1668 phone = options.formatted ? areacode + ' ' + exchange + '-' + subscriber : areacode + exchange + subscriber;
1669 break;
1670 case 'br':
1671 var areaCode = this.pick(["11", "12", "13", "14", "15", "16", "17", "18", "19", "21", "22", "24", "27", "28", "31", "32", "33", "34", "35", "37", "38", "41", "42", "43", "44", "45", "46", "47", "48", "49", "51", "53", "54", "55", "61", "62", "63", "64", "65", "66", "67", "68", "69", "71", "73", "74", "75", "77", "79", "81", "82", "83", "84", "85", "86", "87", "88", "89", "91", "92", "93", "94", "95", "96", "97", "98", "99"]);
1672 var prefix;
1673 if (options.mobile) {
1674 // Brasilian official reference (mobile): http://www.anatel.gov.br/setorregulado/plano-de-numeracao-brasileiro?id=330
1675 prefix = '9' + self.string({ pool: '0123456789', length: 4});
1676 } else {
1677 // Brasilian official reference: http://www.anatel.gov.br/setorregulado/plano-de-numeracao-brasileiro?id=331
1678 prefix = this.natural({ min: 2000, max: 5999 }).toString();
1679 }
1680 var mcdu = self.string({ pool: '0123456789', length: 4});
1681 phone = options.formatted ? '(' + areaCode + ') ' + prefix + '-' + mcdu : areaCode + prefix + mcdu;
1682 break;
1683 }
1684 return phone;
1685 };
1686
1687 Chance.prototype.postal = function () {
1688 // Postal District
1689 var pd = this.character({pool: "XVTSRPNKLMHJGECBA"});
1690 // Forward Sortation Area (FSA)
1691 var fsa = pd + this.natural({max: 9}) + this.character({alpha: true, casing: "upper"});
1692 // Local Delivery Unut (LDU)
1693 var ldu = this.natural({max: 9}) + this.character({alpha: true, casing: "upper"}) + this.natural({max: 9});
1694
1695 return fsa + " " + ldu;
1696 };
1697
1698 Chance.prototype.postcode = function () {
1699 // Area
1700 var area = this.pick(this.get("postcodeAreas")).code;
1701 // District
1702 var district = this.natural({max: 9});
1703 // Sub-District
1704 var subDistrict = this.bool() ? this.character({alpha: true, casing: "upper"}) : "";
1705 // Outward Code
1706 var outward = area + district + subDistrict;
1707 // Sector
1708 var sector = this.natural({max: 9});
1709 // Unit
1710 var unit = this.character({alpha: true, casing: "upper"}) + this.character({alpha: true, casing: "upper"});
1711 // Inward Code
1712 var inward = sector + unit;
1713
1714 return outward + " " + inward;
1715 };
1716
1717 Chance.prototype.counties = function (options) {
1718 options = initOptions(options, { country: 'uk' });
1719 return this.get("counties")[options.country.toLowerCase()];
1720 };
1721
1722 Chance.prototype.county = function (options) {
1723 return this.pick(this.counties(options)).name;
1724 };
1725
1726 Chance.prototype.provinces = function (options) {
1727 options = initOptions(options, { country: 'ca' });
1728 return this.get("provinces")[options.country.toLowerCase()];
1729 };
1730
1731 Chance.prototype.province = function (options) {
1732 return (options && options.full) ?
1733 this.pick(this.provinces(options)).name :
1734 this.pick(this.provinces(options)).abbreviation;
1735 };
1736
1737 Chance.prototype.state = function (options) {
1738 return (options && options.full) ?
1739 this.pick(this.states(options)).name :
1740 this.pick(this.states(options)).abbreviation;
1741 };
1742
1743 Chance.prototype.states = function (options) {
1744 options = initOptions(options, { country: 'us', us_states_and_dc: true } );
1745
1746 var states;
1747
1748 switch (options.country.toLowerCase()) {
1749 case 'us':
1750 var us_states_and_dc = this.get("us_states_and_dc"),
1751 territories = this.get("territories"),
1752 armed_forces = this.get("armed_forces");
1753
1754 states = [];
1755
1756 if (options.us_states_and_dc) {
1757 states = states.concat(us_states_and_dc);
1758 }
1759 if (options.territories) {
1760 states = states.concat(territories);
1761 }
1762 if (options.armed_forces) {
1763 states = states.concat(armed_forces);
1764 }
1765 break;
1766 case 'it':
1767 states = this.get("country_regions")[options.country.toLowerCase()];
1768 break;
1769 case 'uk':
1770 states = this.get("counties")[options.country.toLowerCase()];
1771 break;
1772 }
1773
1774 return states;
1775 };
1776
1777 Chance.prototype.street = function (options) {
1778 options = initOptions(options, { country: 'us', syllables: 2 });
1779 var street;
1780
1781 switch (options.country.toLowerCase()) {
1782 case 'us':
1783 street = this.word({ syllables: options.syllables });
1784 street = this.capitalize(street);
1785 street += ' ';
1786 street += options.short_suffix ?
1787 this.street_suffix(options).abbreviation :
1788 this.street_suffix(options).name;
1789 break;
1790 case 'it':
1791 street = this.word({ syllables: options.syllables });
1792 street = this.capitalize(street);
1793 street = (options.short_suffix ?
1794 this.street_suffix(options).abbreviation :
1795 this.street_suffix(options).name) + " " + street;
1796 break;
1797 }
1798 return street;
1799 };
1800
1801 Chance.prototype.street_suffix = function (options) {
1802 options = initOptions(options, { country: 'us' });
1803 return this.pick(this.street_suffixes(options));
1804 };
1805
1806 Chance.prototype.street_suffixes = function (options) {
1807 options = initOptions(options, { country: 'us' });
1808 // These are the most common suffixes.
1809 return this.get("street_suffixes")[options.country.toLowerCase()];
1810 };
1811
1812 // Note: only returning US zip codes, internationalization will be a whole
1813 // other beast to tackle at some point.
1814 Chance.prototype.zip = function (options) {
1815 var zip = this.n(this.natural, 5, {max: 9});
1816
1817 if (options && options.plusfour === true) {
1818 zip.push('-');
1819 zip = zip.concat(this.n(this.natural, 4, {max: 9}));
1820 }
1821
1822 return zip.join("");
1823 };
1824
1825 // -- End Location --
1826
1827 // -- Time
1828
1829 Chance.prototype.ampm = function () {
1830 return this.bool() ? 'am' : 'pm';
1831 };
1832
1833 Chance.prototype.date = function (options) {
1834 var date_string, date;
1835
1836 // If interval is specified we ignore preset
1837 if(options && (options.min || options.max)) {
1838 options = initOptions(options, {
1839 american: true,
1840 string: false
1841 });
1842 var min = typeof options.min !== "undefined" ? options.min.getTime() : 1;
1843 // 100,000,000 days measured relative to midnight at the beginning of 01 January, 1970 UTC. http://es5.github.io/#x15.9.1.1
1844 var max = typeof options.max !== "undefined" ? options.max.getTime() : 8640000000000000;
1845
1846 date = new Date(this.integer({min: min, max: max}));
1847 } else {
1848 var m = this.month({raw: true});
1849 var daysInMonth = m.days;
1850
1851 if(options && options.month) {
1852 // Mod 12 to allow months outside range of 0-11 (not encouraged, but also not prevented).
1853 daysInMonth = this.get('months')[((options.month % 12) + 12) % 12].days;
1854 }
1855
1856 options = initOptions(options, {
1857 year: parseInt(this.year(), 10),
1858 // Necessary to subtract 1 because Date() 0-indexes month but not day or year
1859 // for some reason.
1860 month: m.numeric - 1,
1861 day: this.natural({min: 1, max: daysInMonth}),
1862 hour: this.hour({twentyfour: true}),
1863 minute: this.minute(),
1864 second: this.second(),
1865 millisecond: this.millisecond(),
1866 american: true,
1867 string: false
1868 });
1869
1870 date = new Date(options.year, options.month, options.day, options.hour, options.minute, options.second, options.millisecond);
1871 }
1872
1873 if (options.american) {
1874 // Adding 1 to the month is necessary because Date() 0-indexes
1875 // months but not day for some odd reason.
1876 date_string = (date.getMonth() + 1) + '/' + date.getDate() + '/' + date.getFullYear();
1877 } else {
1878 date_string = date.getDate() + '/' + (date.getMonth() + 1) + '/' + date.getFullYear();
1879 }
1880
1881 return options.string ? date_string : date;
1882 };
1883
1884 Chance.prototype.hammertime = function (options) {
1885 return this.date(options).getTime();
1886 };
1887
1888 Chance.prototype.hour = function (options) {
1889 options = initOptions(options, {
1890 min: options && options.twentyfour ? 0 : 1,
1891 max: options && options.twentyfour ? 23 : 12
1892 });
1893
1894 testRange(options.min < 0, "Chance: Min cannot be less than 0.");
1895 testRange(options.twentyfour && options.max > 23, "Chance: Max cannot be greater than 23 for twentyfour option.");
1896 testRange(!options.twentyfour && options.max > 12, "Chance: Max cannot be greater than 12.");
1897 testRange(options.min > options.max, "Chance: Min cannot be greater than Max.");
1898
1899 return this.natural({min: options.min, max: options.max});
1900 };
1901
1902 Chance.prototype.millisecond = function () {
1903 return this.natural({max: 999});
1904 };
1905
1906 Chance.prototype.minute = Chance.prototype.second = function (options) {
1907 options = initOptions(options, {min: 0, max: 59});
1908
1909 testRange(options.min < 0, "Chance: Min cannot be less than 0.");
1910 testRange(options.max > 59, "Chance: Max cannot be greater than 59.");
1911 testRange(options.min > options.max, "Chance: Min cannot be greater than Max.");
1912
1913 return this.natural({min: options.min, max: options.max});
1914 };
1915
1916 Chance.prototype.month = function (options) {
1917 options = initOptions(options, {min: 1, max: 12});
1918
1919 testRange(options.min < 1, "Chance: Min cannot be less than 1.");
1920 testRange(options.max > 12, "Chance: Max cannot be greater than 12.");
1921 testRange(options.min > options.max, "Chance: Min cannot be greater than Max.");
1922
1923 var month = this.pick(this.months().slice(options.min - 1, options.max));
1924 return options.raw ? month : month.name;
1925 };
1926
1927 Chance.prototype.months = function () {
1928 return this.get("months");
1929 };
1930
1931 Chance.prototype.second = function () {
1932 return this.natural({max: 59});
1933 };
1934
1935 Chance.prototype.timestamp = function () {
1936 return this.natural({min: 1, max: parseInt(new Date().getTime() / 1000, 10)});
1937 };
1938
1939 Chance.prototype.weekday = function (options) {
1940 options = initOptions(options, {weekday_only: false});
1941 var weekdays = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"];
1942 if (!options.weekday_only) {
1943 weekdays.push("Saturday");
1944 weekdays.push("Sunday");
1945 }
1946 return this.pickone(weekdays);
1947 };
1948
1949 Chance.prototype.year = function (options) {
1950 // Default to current year as min if none specified
1951 options = initOptions(options, {min: new Date().getFullYear()});
1952
1953 // Default to one century after current year as max if none specified
1954 options.max = (typeof options.max !== "undefined") ? options.max : options.min + 100;
1955
1956 return this.natural(options).toString();
1957 };
1958
1959 // -- End Time
1960
1961 // -- Finance --
1962
1963 Chance.prototype.cc = function (options) {
1964 options = initOptions(options);
1965
1966 var type, number, to_generate;
1967
1968 type = (options.type) ?
1969 this.cc_type({ name: options.type, raw: true }) :
1970 this.cc_type({ raw: true });
1971
1972 number = type.prefix.split("");
1973 to_generate = type.length - type.prefix.length - 1;
1974
1975 // Generates n - 1 digits
1976 number = number.concat(this.n(this.integer, to_generate, {min: 0, max: 9}));
1977
1978 // Generates the last digit according to Luhn algorithm
1979 number.push(this.luhn_calculate(number.join("")));
1980
1981 return number.join("");
1982 };
1983
1984 Chance.prototype.cc_types = function () {
1985 // http://en.wikipedia.org/wiki/Bank_card_number#Issuer_identification_number_.28IIN.29
1986 return this.get("cc_types");
1987 };
1988
1989 Chance.prototype.cc_type = function (options) {
1990 options = initOptions(options);
1991 var types = this.cc_types(),
1992 type = null;
1993
1994 if (options.name) {
1995 for (var i = 0; i < types.length; i++) {
1996 // Accept either name or short_name to specify card type
1997 if (types[i].name === options.name || types[i].short_name === options.name) {
1998 type = types[i];
1999 break;
2000 }
2001 }
2002 if (type === null) {
2003 throw new RangeError("Chance: Credit card type '" + options.name + "' is not supported");
2004 }
2005 } else {
2006 type = this.pick(types);
2007 }
2008
2009 return options.raw ? type : type.name;
2010 };
2011
2012 // return all world currency by ISO 4217
2013 Chance.prototype.currency_types = function () {
2014 return this.get("currency_types");
2015 };
2016
2017 // return random world currency by ISO 4217
2018 Chance.prototype.currency = function () {
2019 return this.pick(this.currency_types());
2020 };
2021
2022 // return all timezones available
2023 Chance.prototype.timezones = function () {
2024 return this.get("timezones");
2025 };
2026
2027 // return random timezone
2028 Chance.prototype.timezone = function () {
2029 return this.pick(this.timezones());
2030 };
2031
2032 //Return random correct currency exchange pair (e.g. EUR/USD) or array of currency code
2033 Chance.prototype.currency_pair = function (returnAsString) {
2034 var currencies = this.unique(this.currency, 2, {
2035 comparator: function(arr, val) {
2036
2037 return arr.reduce(function(acc, item) {
2038 // If a match has been found, short circuit check and just return
2039 return acc || (item.code === val.code);
2040 }, false);
2041 }
2042 });
2043
2044 if (returnAsString) {
2045 return currencies[0].code + '/' + currencies[1].code;
2046 } else {
2047 return currencies;
2048 }
2049 };
2050
2051 Chance.prototype.dollar = function (options) {
2052 // By default, a somewhat more sane max for dollar than all available numbers
2053 options = initOptions(options, {max : 10000, min : 0});
2054
2055 var dollar = this.floating({min: options.min, max: options.max, fixed: 2}).toString(),
2056 cents = dollar.split('.')[1];
2057
2058 if (cents === undefined) {
2059 dollar += '.00';
2060 } else if (cents.length < 2) {
2061 dollar = dollar + '0';
2062 }
2063
2064 if (dollar < 0) {
2065 return '-$' + dollar.replace('-', '');
2066 } else {
2067 return '$' + dollar;
2068 }
2069 };
2070
2071 Chance.prototype.euro = function (options) {
2072 return Number(this.dollar(options).replace("$", "")).toLocaleString() + "€";
2073 };
2074
2075 Chance.prototype.exp = function (options) {
2076 options = initOptions(options);
2077 var exp = {};
2078
2079 exp.year = this.exp_year();
2080
2081 // If the year is this year, need to ensure month is greater than the
2082 // current month or this expiration will not be valid
2083 if (exp.year === (new Date().getFullYear()).toString()) {
2084 exp.month = this.exp_month({future: true});
2085 } else {
2086 exp.month = this.exp_month();
2087 }
2088
2089 return options.raw ? exp : exp.month + '/' + exp.year;
2090 };
2091
2092 Chance.prototype.exp_month = function (options) {
2093 options = initOptions(options);
2094 var month, month_int,
2095 // Date object months are 0 indexed
2096 curMonth = new Date().getMonth() + 1;
2097
2098 if (options.future && (curMonth !== 12)) {
2099 do {
2100 month = this.month({raw: true}).numeric;
2101 month_int = parseInt(month, 10);
2102 } while (month_int <= curMonth);
2103 } else {
2104 month = this.month({raw: true}).numeric;
2105 }
2106
2107 return month;
2108 };
2109
2110 Chance.prototype.exp_year = function () {
2111 var curMonth = new Date().getMonth() + 1,
2112 curYear = new Date().getFullYear();
2113
2114 return this.year({min: ((curMonth === 12) ? (curYear + 1) : curYear), max: (curYear + 10)});
2115 };
2116
2117 Chance.prototype.vat = function (options) {
2118 options = initOptions(options, { country: 'it' });
2119 switch (options.country.toLowerCase()) {
2120 case 'it':
2121 return this.it_vat();
2122 }
2123 };
2124
2125 /**
2126 * Generate a string matching IBAN pattern (https://en.wikipedia.org/wiki/International_Bank_Account_Number).
2127 * No country-specific formats support (yet)
2128 */
2129 Chance.prototype.iban = function () {
2130 var alpha = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
2131 var alphanum = alpha + '0123456789';
2132 var iban =
2133 this.string({ length: 2, pool: alpha }) +
2134 this.pad(this.integer({ min: 0, max: 99 }), 2) +
2135 this.string({ length: 4, pool: alphanum }) +
2136 this.pad(this.natural(), this.natural({ min: 6, max: 26 }));
2137 return iban;
2138 };
2139
2140 // -- End Finance
2141
2142 // -- Regional
2143
2144 Chance.prototype.it_vat = function () {
2145 var it_vat = this.natural({min: 1, max: 1800000});
2146
2147 it_vat = this.pad(it_vat, 7) + this.pad(this.pick(this.provinces({ country: 'it' })).code, 3);
2148 return it_vat + this.luhn_calculate(it_vat);
2149 };
2150
2151 /*
2152 * this generator is written following the official algorithm
2153 * all data can be passed explicitely or randomized by calling chance.cf() without options
2154 * the code does not check that the input data is valid (it goes beyond the scope of the generator)
2155 *
2156 * @param [Object] options = { first: first name,
2157 * last: last name,
2158 * gender: female|male,
2159 birthday: JavaScript date object,
2160 city: string(4), 1 letter + 3 numbers
2161 }
2162 * @return [string] codice fiscale
2163 *
2164 */
2165 Chance.prototype.cf = function (options) {
2166 options = options || {};
2167 var gender = !!options.gender ? options.gender : this.gender(),
2168 first = !!options.first ? options.first : this.first( { gender: gender, nationality: 'it'} ),
2169 last = !!options.last ? options.last : this.last( { nationality: 'it'} ),
2170 birthday = !!options.birthday ? options.birthday : this.birthday(),
2171 city = !!options.city ? options.city : this.pickone(['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'L', 'M', 'Z']) + this.pad(this.natural({max:999}), 3),
2172 cf = [],
2173 name_generator = function(name, isLast) {
2174 var temp,
2175 return_value = [];
2176
2177 if (name.length < 3) {
2178 return_value = name.split("").concat("XXX".split("")).splice(0,3);
2179 }
2180 else {
2181 temp = name.toUpperCase().split('').map(function(c){
2182 return ("BCDFGHJKLMNPRSTVWZ".indexOf(c) !== -1) ? c : undefined;
2183 }).join('');
2184 if (temp.length > 3) {
2185 if (isLast) {
2186 temp = temp.substr(0,3);
2187 } else {
2188 temp = temp[0] + temp.substr(2,2);
2189 }
2190 }
2191 if (temp.length < 3) {
2192 return_value = temp;
2193 temp = name.toUpperCase().split('').map(function(c){
2194 return ("AEIOU".indexOf(c) !== -1) ? c : undefined;
2195 }).join('').substr(0, 3 - return_value.length);
2196 }
2197 return_value = return_value + temp;
2198 }
2199
2200 return return_value;
2201 },
2202 date_generator = function(birthday, gender, that) {
2203 var lettermonths = ['A', 'B', 'C', 'D', 'E', 'H', 'L', 'M', 'P', 'R', 'S', 'T'];
2204
2205 return birthday.getFullYear().toString().substr(2) +
2206 lettermonths[birthday.getMonth()] +
2207 that.pad(birthday.getDate() + ((gender.toLowerCase() === "female") ? 40 : 0), 2);
2208 },
2209 checkdigit_generator = function(cf) {
2210 var range1 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",
2211 range2 = "ABCDEFGHIJABCDEFGHIJKLMNOPQRSTUVWXYZ",
2212 evens = "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
2213 odds = "BAKPLCQDREVOSFTGUHMINJWZYX",
2214 digit = 0;
2215
2216
2217 for(var i = 0; i < 15; i++) {
2218 if (i % 2 !== 0) {
2219 digit += evens.indexOf(range2[range1.indexOf(cf[i])]);
2220 }
2221 else {
2222 digit += odds.indexOf(range2[range1.indexOf(cf[i])]);
2223 }
2224 }
2225 return evens[digit % 26];
2226 };
2227
2228 cf = cf.concat(name_generator(last, true), name_generator(first), date_generator(birthday, gender, this), city.toUpperCase().split("")).join("");
2229 cf += checkdigit_generator(cf.toUpperCase(), this);
2230
2231 return cf.toUpperCase();
2232 };
2233
2234 Chance.prototype.pl_pesel = function () {
2235 var number = this.natural({min: 1, max: 9999999999});
2236 var arr = this.pad(number, 10).split('');
2237 for (var i = 0; i < arr.length; i++) {
2238 arr[i] = parseInt(arr[i]);
2239 }
2240
2241 var controlNumber = (1 * arr[0] + 3 * arr[1] + 7 * arr[2] + 9 * arr[3] + 1 * arr[4] + 3 * arr[5] + 7 * arr[6] + 9 * arr[7] + 1 * arr[8] + 3 * arr[9]) % 10;
2242 if(controlNumber !== 0) {
2243 controlNumber = 10 - controlNumber;
2244 }
2245
2246 return arr.join('') + controlNumber;
2247 };
2248
2249 Chance.prototype.pl_nip = function () {
2250 var number = this.natural({min: 1, max: 999999999});
2251 var arr = this.pad(number, 9).split('');
2252 for (var i = 0; i < arr.length; i++) {
2253 arr[i] = parseInt(arr[i]);
2254 }
2255
2256 var controlNumber = (6 * arr[0] + 5 * arr[1] + 7 * arr[2] + 2 * arr[3] + 3 * arr[4] + 4 * arr[5] + 5 * arr[6] + 6 * arr[7] + 7 * arr[8]) % 11;
2257 if(controlNumber === 10) {
2258 return this.pl_nip();
2259 }
2260
2261 return arr.join('') + controlNumber;
2262 };
2263
2264 Chance.prototype.pl_regon = function () {
2265 var number = this.natural({min: 1, max: 99999999});
2266 var arr = this.pad(number, 8).split('');
2267 for (var i = 0; i < arr.length; i++) {
2268 arr[i] = parseInt(arr[i]);
2269 }
2270
2271 var controlNumber = (8 * arr[0] + 9 * arr[1] + 2 * arr[2] + 3 * arr[3] + 4 * arr[4] + 5 * arr[5] + 6 * arr[6] + 7 * arr[7]) % 11;
2272 if(controlNumber === 10) {
2273 controlNumber = 0;
2274 }
2275
2276 return arr.join('') + controlNumber;
2277 };
2278
2279 // -- End Regional
2280
2281 // -- Music --
2282
2283 Chance.prototype.note = function(options) {
2284 // choices for 'notes' option:
2285 // flatKey - chromatic scale with flat notes (default)
2286 // sharpKey - chromatic scale with sharp notes
2287 // flats - just flat notes
2288 // sharps - just sharp notes
2289 // naturals - just natural notes
2290 // all - naturals, sharps and flats
2291 options = initOptions(options, { notes : 'flatKey'});
2292 var scales = {
2293 naturals: ['C', 'D', 'E', 'F', 'G', 'A', 'B'],
2294 flats: ['D♭', 'E♭', 'G♭', 'A♭', 'B♭'],
2295 sharps: ['C♯', 'D♯', 'F♯', 'G♯', 'A♯']
2296 };
2297 scales.all = scales.naturals.concat(scales.flats.concat(scales.sharps))
2298 scales.flatKey = scales.naturals.concat(scales.flats)
2299 scales.sharpKey = scales.naturals.concat(scales.sharps)
2300 return this.pickone(scales[options.notes]);
2301 }
2302
2303 Chance.prototype.midi_note = function(options) {
2304 var min = 0;
2305 var max = 127;
2306 options = initOptions(options, { min : min, max : max });
2307 return this.integer({min: options.min, max: options.max});
2308 }
2309
2310 Chance.prototype.chord_quality = function(options) {
2311 options = initOptions(options, { jazz: true });
2312 var chord_qualities = ['maj', 'min', 'aug', 'dim'];
2313 if (options.jazz){
2314 chord_qualities = [
2315 'maj7',
2316 'min7',
2317 '7',
2318 'sus',
2319 'dim',
2320 'ø'
2321 ];
2322 }
2323 return this.pickone(chord_qualities);
2324 }
2325
2326 Chance.prototype.chord = function (options) {
2327 options = initOptions(options);
2328 return this.note(options) + this.chord_quality(options);
2329 }
2330
2331 Chance.prototype.tempo = function (options) {
2332 var min = 40;
2333 var max = 320;
2334 options = initOptions(options, {min: min, max: max});
2335 return this.integer({min: options.min, max: options.max});
2336 }
2337
2338 // -- End Music
2339
2340 // -- Miscellaneous --
2341
2342 // Coin - Flip, flip, flipadelphia
2343 Chance.prototype.coin = function(options) {
2344 return this.bool() ? "heads" : "tails";
2345 }
2346
2347 // Dice - For all the board game geeks out there, myself included ;)
2348 function diceFn (range) {
2349 return function () {
2350 return this.natural(range);
2351 };
2352 }
2353 Chance.prototype.d4 = diceFn({min: 1, max: 4});
2354 Chance.prototype.d6 = diceFn({min: 1, max: 6});
2355 Chance.prototype.d8 = diceFn({min: 1, max: 8});
2356 Chance.prototype.d10 = diceFn({min: 1, max: 10});
2357 Chance.prototype.d12 = diceFn({min: 1, max: 12});
2358 Chance.prototype.d20 = diceFn({min: 1, max: 20});
2359 Chance.prototype.d30 = diceFn({min: 1, max: 30});
2360 Chance.prototype.d100 = diceFn({min: 1, max: 100});
2361
2362 Chance.prototype.rpg = function (thrown, options) {
2363 options = initOptions(options);
2364 if (!thrown) {
2365 throw new RangeError("Chance: A type of die roll must be included");
2366 } else {
2367 var bits = thrown.toLowerCase().split("d"),
2368 rolls = [];
2369
2370 if (bits.length !== 2 || !parseInt(bits[0], 10) || !parseInt(bits[1], 10)) {
2371 throw new Error("Chance: Invalid format provided. Please provide #d# where the first # is the number of dice to roll, the second # is the max of each die");
2372 }
2373 for (var i = bits[0]; i > 0; i--) {
2374 rolls[i - 1] = this.natural({min: 1, max: bits[1]});
2375 }
2376 return (typeof options.sum !== 'undefined' && options.sum) ? rolls.reduce(function (p, c) { return p + c; }) : rolls;
2377 }
2378 };
2379
2380 // Guid
2381 Chance.prototype.guid = function (options) {
2382 options = initOptions(options, { version: 5 });
2383
2384 var guid_pool = "abcdef1234567890",
2385 variant_pool = "ab89",
2386 guid = this.string({ pool: guid_pool, length: 8 }) + '-' +
2387 this.string({ pool: guid_pool, length: 4 }) + '-' +
2388 // The Version
2389 options.version +
2390 this.string({ pool: guid_pool, length: 3 }) + '-' +
2391 // The Variant
2392 this.string({ pool: variant_pool, length: 1 }) +
2393 this.string({ pool: guid_pool, length: 3 }) + '-' +
2394 this.string({ pool: guid_pool, length: 12 });
2395 return guid;
2396 };
2397
2398 // Hash
2399 Chance.prototype.hash = function (options) {
2400 options = initOptions(options, {length : 40, casing: 'lower'});
2401 var pool = options.casing === 'upper' ? HEX_POOL.toUpperCase() : HEX_POOL;
2402 return this.string({pool: pool, length: options.length});
2403 };
2404
2405 Chance.prototype.luhn_check = function (num) {
2406 var str = num.toString();
2407 var checkDigit = +str.substring(str.length - 1);
2408 return checkDigit === this.luhn_calculate(+str.substring(0, str.length - 1));
2409 };
2410
2411 Chance.prototype.luhn_calculate = function (num) {
2412 var digits = num.toString().split("").reverse();
2413 var sum = 0;
2414 var digit;
2415
2416 for (var i = 0, l = digits.length; l > i; ++i) {
2417 digit = +digits[i];
2418 if (i % 2 === 0) {
2419 digit *= 2;
2420 if (digit > 9) {
2421 digit -= 9;
2422 }
2423 }
2424 sum += digit;
2425 }
2426 return (sum * 9) % 10;
2427 };
2428
2429 // MD5 Hash
2430 Chance.prototype.md5 = function(options) {
2431 var opts = { str: '', key: null, raw: false };
2432
2433 if (!options) {
2434 opts.str = this.string();
2435 options = {};
2436 }
2437 else if (typeof options === 'string') {
2438 opts.str = options;
2439 options = {};
2440 }
2441 else if (typeof options !== 'object') {
2442 return null;
2443 }
2444 else if(options.constructor === 'Array') {
2445 return null;
2446 }
2447
2448 opts = initOptions(options, opts);
2449
2450 if(!opts.str){
2451 throw new Error('A parameter is required to return an md5 hash.');
2452 }
2453
2454 return this.bimd5.md5(opts.str, opts.key, opts.raw);
2455 };
2456
2457 /**
2458 * #Description:
2459 * =====================================================
2460 * Generate random file name with extension
2461 *
2462 * The argument provide extension type
2463 * -> raster
2464 * -> vector
2465 * -> 3d
2466 * -> document
2467 *
2468 * If nothing is provided the function return random file name with random
2469 * extension type of any kind
2470 *
2471 * The user can validate the file name length range
2472 * If nothing provided the generated file name is random
2473 *
2474 * #Extension Pool :
2475 * * Currently the supported extensions are
2476 * -> some of the most popular raster image extensions
2477 * -> some of the most popular vector image extensions
2478 * -> some of the most popular 3d image extensions
2479 * -> some of the most popular document extensions
2480 *
2481 * #Examples :
2482 * =====================================================
2483 *
2484 * Return random file name with random extension. The file extension
2485 * is provided by a predefined collection of extensions. More about the extension
2486 * pool can be found in #Extension Pool section
2487 *
2488 * chance.file()
2489 * => dsfsdhjf.xml
2490 *
2491 * In order to generate a file name with specific length, specify the
2492 * length property and integer value. The extension is going to be random
2493 *
2494 * chance.file({length : 10})
2495 * => asrtineqos.pdf
2496 *
2497 * In order to generate file with extension from some of the predefined groups
2498 * of the extension pool just specify the extension pool category in fileType property
2499 *
2500 * chance.file({fileType : 'raster'})
2501 * => dshgssds.psd
2502 *
2503 * You can provide specific extension for your files
2504 * chance.file({extension : 'html'})
2505 * => djfsd.html
2506 *
2507 * Or you could pass custom collection of extensions by array or by object
2508 * chance.file({extensions : [...]})
2509 * => dhgsdsd.psd
2510 *
2511 * chance.file({extensions : { key : [...], key : [...]}})
2512 * => djsfksdjsd.xml
2513 *
2514 * @param [collection] options
2515 * @return [string]
2516 *
2517 */
2518 Chance.prototype.file = function(options) {
2519
2520 var fileOptions = options || {};
2521 var poolCollectionKey = "fileExtension";
2522 var typeRange = Object.keys(this.get("fileExtension"));//['raster', 'vector', '3d', 'document'];
2523 var fileName;
2524 var fileExtension;
2525
2526 // Generate random file name
2527 fileName = this.word({length : fileOptions.length});
2528
2529 // Generate file by specific extension provided by the user
2530 if(fileOptions.extension) {
2531
2532 fileExtension = fileOptions.extension;
2533 return (fileName + '.' + fileExtension);
2534 }
2535
2536 // Generate file by specific extension collection
2537 if(fileOptions.extensions) {
2538
2539 if(Array.isArray(fileOptions.extensions)) {
2540
2541 fileExtension = this.pickone(fileOptions.extensions);
2542 return (fileName + '.' + fileExtension);
2543 }
2544 else if(fileOptions.extensions.constructor === Object) {
2545
2546 var extensionObjectCollection = fileOptions.extensions;
2547 var keys = Object.keys(extensionObjectCollection);
2548
2549 fileExtension = this.pickone(extensionObjectCollection[this.pickone(keys)]);
2550 return (fileName + '.' + fileExtension);
2551 }
2552
2553 throw new Error("Chance: Extensions must be an Array or Object");
2554 }
2555
2556 // Generate file extension based on specific file type
2557 if(fileOptions.fileType) {
2558
2559 var fileType = fileOptions.fileType;
2560 if(typeRange.indexOf(fileType) !== -1) {
2561
2562 fileExtension = this.pickone(this.get(poolCollectionKey)[fileType]);
2563 return (fileName + '.' + fileExtension);
2564 }
2565
2566 throw new RangeError("Chance: Expect file type value to be 'raster', 'vector', '3d' or 'document'");
2567 }
2568
2569 // Generate random file name if no extension options are passed
2570 fileExtension = this.pickone(this.get(poolCollectionKey)[this.pickone(typeRange)]);
2571 return (fileName + '.' + fileExtension);
2572 };
2573
2574 var data = {
2575
2576 firstNames: {
2577 "male": {
2578 "en": ["James", "John", "Robert", "Michael", "William", "David", "Richard", "Joseph", "Charles", "Thomas", "Christopher", "Daniel", "Matthew", "George", "Donald", "Anthony", "Paul", "Mark", "Edward", "Steven", "Kenneth", "Andrew", "Brian", "Joshua", "Kevin", "Ronald", "Timothy", "Jason", "Jeffrey", "Frank", "Gary", "Ryan", "Nicholas", "Eric", "Stephen", "Jacob", "Larry", "Jonathan", "Scott", "Raymond", "Justin", "Brandon", "Gregory", "Samuel", "Benjamin", "Patrick", "Jack", "Henry", "Walter", "Dennis", "Jerry", "Alexander", "Peter", "Tyler", "Douglas", "Harold", "Aaron", "Jose", "Adam", "Arthur", "Zachary", "Carl", "Nathan", "Albert", "Kyle", "Lawrence", "Joe", "Willie", "Gerald", "Roger", "Keith", "Jeremy", "Terry", "Harry", "Ralph", "Sean", "Jesse", "Roy", "Louis", "Billy", "Austin", "Bruce", "Eugene", "Christian", "Bryan", "Wayne", "Russell", "Howard", "Fred", "Ethan", "Jordan", "Philip", "Alan", "Juan", "Randy", "Vincent", "Bobby", "Dylan", "Johnny", "Phillip", "Victor", "Clarence", "Ernest", "Martin", "Craig", "Stanley", "Shawn", "Travis", "Bradley", "Leonard", "Earl", "Gabriel", "Jimmy", "Francis", "Todd", "Noah", "Danny", "Dale", "Cody", "Carlos", "Allen", "Frederick", "Logan", "Curtis", "Alex", "Joel", "Luis", "Norman", "Marvin", "Glenn", "Tony", "Nathaniel", "Rodney", "Melvin", "Alfred", "Steve", "Cameron", "Chad", "Edwin", "Caleb", "Evan", "Antonio", "Lee", "Herbert", "Jeffery", "Isaac", "Derek", "Ricky", "Marcus", "Theodore", "Elijah", "Luke", "Jesus", "Eddie", "Troy", "Mike", "Dustin", "Ray", "Adrian", "Bernard", "Leroy", "Angel", "Randall", "Wesley", "Ian", "Jared", "Mason", "Hunter", "Calvin", "Oscar", "Clifford", "Jay", "Shane", "Ronnie", "Barry", "Lucas", "Corey", "Manuel", "Leo", "Tommy", "Warren", "Jackson", "Isaiah", "Connor", "Don", "Dean", "Jon", "Julian", "Miguel", "Bill", "Lloyd", "Charlie", "Mitchell", "Leon", "Jerome", "Darrell", "Jeremiah", "Alvin", "Brett", "Seth", "Floyd", "Jim", "Blake", "Micheal", "Gordon", "Trevor", "Lewis", "Erik", "Edgar", "Vernon", "Devin", "Gavin", "Jayden", "Chris", "Clyde", "Tom", "Derrick", "Mario", "Brent", "Marc", "Herman", "Chase", "Dominic", "Ricardo", "Franklin", "Maurice", "Max", "Aiden", "Owen", "Lester", "Gilbert", "Elmer", "Gene", "Francisco", "Glen", "Cory", "Garrett", "Clayton", "Sam", "Jorge", "Chester", "Alejandro", "Jeff", "Harvey", "Milton", "Cole", "Ivan", "Andre", "Duane", "Landon"],
2579 // Data taken from http://www.dati.gov.it/dataset/comune-di-firenze_0163
2580 "it": ["Adolfo", "Alberto", "Aldo", "Alessandro", "Alessio", "Alfredo", "Alvaro", "Andrea", "Angelo", "Angiolo", "Antonino", "Antonio", "Attilio", "Benito", "Bernardo", "Bruno", "Carlo", "Cesare", "Christian", "Claudio", "Corrado", "Cosimo", "Cristian", "Cristiano", "Daniele", "Dario", "David", "Davide", "Diego", "Dino", "Domenico", "Duccio", "Edoardo", "Elia", "Elio", "Emanuele", "Emiliano", "Emilio", "Enrico", "Enzo", "Ettore", "Fabio", "Fabrizio", "Federico", "Ferdinando", "Fernando", "Filippo", "Francesco", "Franco", "Gabriele", "Giacomo", "Giampaolo", "Giampiero", "Giancarlo", "Gianfranco", "Gianluca", "Gianmarco", "Gianni", "Gino", "Giorgio", "Giovanni", "Giuliano", "Giulio", "Giuseppe", "Graziano", "Gregorio", "Guido", "Iacopo", "Jacopo", "Lapo", "Leonardo", "Lorenzo", "Luca", "Luciano", "Luigi", "Manuel", "Marcello", "Marco", "Marino", "Mario", "Massimiliano", "Massimo", "Matteo", "Mattia", "Maurizio", "Mauro", "Michele", "Mirko", "Mohamed", "Nello", "Neri", "Niccolò", "Nicola", "Osvaldo", "Otello", "Paolo", "Pier Luigi", "Piero", "Pietro", "Raffaele", "Remo", "Renato", "Renzo", "Riccardo", "Roberto", "Rolando", "Romano", "Salvatore", "Samuele", "Sandro", "Sergio", "Silvano", "Simone", "Stefano", "Thomas", "Tommaso", "Ubaldo", "Ugo", "Umberto", "Valerio", "Valter", "Vasco", "Vincenzo", "Vittorio"],
2581 // Data taken from http://www.svbkindernamen.nl/int/nl/kindernamen/index.html
2582 "nl": ["Aaron","Abel","Adam","Adriaan","Albert","Alexander","Ali","Arjen","Arno","Bart","Bas","Bastiaan","Benjamin","Bob", "Boris","Bram","Brent","Cas","Casper","Chris","Christiaan","Cornelis","Daan","Daley","Damian","Dani","Daniel","Daniël","David","Dean","Dirk","Dylan","Egbert","Elijah","Erik","Erwin","Evert","Ezra","Fabian","Fedde","Finn","Florian","Floris","Frank","Frans","Frederik","Freek","Geert","Gerard","Gerben","Gerrit","Gijs","Guus","Hans","Hendrik","Henk","Herman","Hidde","Hugo","Jaap","Jan Jaap","Jan-Willem","Jack","Jacob","Jan","Jason","Jasper","Jayden","Jelle","Jelte","Jens","Jeroen","Jesse","Jim","Job","Joep","Johannes","John","Jonathan","Joris","Joshua","Joël","Julian","Kees","Kevin","Koen","Lars","Laurens","Leendert","Lennard","Lodewijk","Luc","Luca","Lucas","Lukas","Luuk","Maarten","Marcus","Martijn","Martin","Matthijs","Maurits","Max","Mees","Melle","Mick","Mika","Milan","Mohamed","Mohammed","Morris","Muhammed","Nathan","Nick","Nico","Niek","Niels","Noah","Noud","Olivier","Oscar","Owen","Paul","Pepijn","Peter","Pieter","Pim","Quinten","Reinier","Rens","Robin","Ruben","Sam","Samuel","Sander","Sebastiaan","Sem","Sep","Sepp","Siem","Simon","Stan","Stef","Steven","Stijn","Sven","Teun","Thijmen","Thijs","Thomas","Tijn","Tim","Timo","Tobias","Tom","Victor","Vince","Willem","Wim","Wouter","Yusuf"],
2583 // Data taken from https://fr.wikipedia.org/wiki/Liste_de_pr%C3%A9noms_fran%C3%A7ais_et_de_la_francophonie
2584 "fr": ["Aaron","Abdon","Abel","Abélard","Abelin","Abondance","Abraham","Absalon","Acace","Achaire","Achille","Adalard","Adalbald","Adalbéron","Adalbert","Adalric","Adam","Adegrin","Adel","Adelin","Andelin","Adelphe","Adam","Adéodat","Adhémar","Adjutor","Adolphe","Adonis","Adon","Adrien","Agapet","Agathange","Agathon","Agilbert","Agénor","Agnan","Aignan","Agrippin","Aimable","Aimé","Alain","Alban","Albin","Aubin","Albéric","Albert","Albertet","Alcibiade","Alcide","Alcée","Alcime","Aldonce","Aldric","Aldéric","Aleaume","Alexandre","Alexis","Alix","Alliaume","Aleaume","Almine","Almire","Aloïs","Alphée","Alphonse","Alpinien","Alverède","Amalric","Amaury","Amandin","Amant","Ambroise","Amédée","Amélien","Amiel","Amour","Anaël","Anastase","Anatole","Ancelin","Andéol","Andoche","André","Andoche","Ange","Angelin","Angilbe","Anglebert","Angoustan","Anicet","Anne","Annibal","Ansbert","Anselme","Anthelme","Antheaume","Anthime","Antide","Antoine","Antonius","Antonin","Apollinaire","Apollon","Aquilin","Arcade","Archambaud","Archambeau","Archange","Archibald","Arian","Ariel","Ariste","Aristide","Armand","Armel","Armin","Arnould","Arnaud","Arolde","Arsène","Arsinoé","Arthaud","Arthème","Arthur","Ascelin","Athanase","Aubry","Audebert","Audouin","Audran","Audric","Auguste","Augustin","Aurèle","Aurélien","Aurian","Auxence","Axel","Aymard","Aymeric","Aymon","Aymond","Balthazar","Baptiste","Barnabé","Barthélemy","Bartimée","Basile","Bastien","Baudouin","Bénigne","Benjamin","Benoît","Bérenger","Bérard","Bernard","Bertrand","Blaise","Bon","Boniface","Bouchard","Brice","Brieuc","Bruno","Brunon","Calixte","Calliste","Camélien","Camille","Camillien","Candide","Caribert","Carloman","Cassandre","Cassien","Cédric","Céleste","Célestin","Célien","Césaire","César","Charles","Charlemagne","Childebert","Chilpéric","Chrétien","Christian","Christodule","Christophe","Chrysostome","Clarence","Claude","Claudien","Cléandre","Clément","Clotaire","Côme","Constance","Constant","Constantin","Corentin","Cyprien","Cyriaque","Cyrille","Cyril","Damien","Daniel","David","Delphin","Denis","Désiré","Didier","Dieudonné","Dimitri","Dominique","Dorian","Dorothée","Edgard","Edmond","Édouard","Éleuthère","Élie","Élisée","Émeric","Émile","Émilien","Emmanuel","Enguerrand","Épiphane","Éric","Esprit","Ernest","Étienne","Eubert","Eudes","Eudoxe","Eugène","Eusèbe","Eustache","Évariste","Évrard","Fabien","Fabrice","Falba","Félicité","Félix","Ferdinand","Fiacre","Fidèle","Firmin","Flavien","Flodoard","Florent","Florentin","Florestan","Florian","Fortuné","Foulques","Francisque","François","Français","Franciscus","Francs","Frédéric","Fulbert","Fulcran","Fulgence","Gabin","Gabriel","Gaël","Garnier","Gaston","Gaspard","Gatien","Gaud","Gautier","Gédéon","Geoffroy","Georges","Géraud","Gérard","Gerbert","Germain","Gervais","Ghislain","Gilbert","Gilles","Girart","Gislebert","Gondebaud","Gonthier","Gontran","Gonzague","Grégoire","Guérin","Gui","Guillaume","Gustave","Guy","Guyot","Hardouin","Hector","Hédelin","Hélier","Henri","Herbert","Herluin","Hervé","Hilaire","Hildebert","Hincmar","Hippolyte","Honoré","Hubert","Hugues","Innocent","Isabeau","Isidore","Jacques","Japhet","Jason","Jean","Jeannel","Jeannot","Jérémie","Jérôme","Joachim","Joanny","Job","Jocelyn","Joël","Johan","Jonas","Jonathan","Joseph","Josse","Josselin","Jourdain","Jude","Judicaël","Jules","Julien","Juste","Justin","Lambert","Landry","Laurent","Lazare","Léandre","Léon","Léonard","Léopold","Leu","Loup","Leufroy","Libère","Liétald","Lionel","Loïc","Longin","Lorrain","Lorraine","Lothaire","Louis","Loup","Luc","Lucas","Lucien","Ludolphe","Ludovic","Macaire","Malo","Mamert","Manassé","Marc","Marceau","Marcel","Marcelin","Marius","Marseille","Martial","Martin","Mathurin","Matthias","Mathias","Matthieu","Maugis","Maurice","Mauricet","Maxence","Maxime","Maximilien","Mayeul","Médéric","Melchior","Mence","Merlin","Mérovée","Michaël","Michel","Moïse","Morgan","Nathan","Nathanaël","Narcisse","Néhémie","Nestor","Nestor","Nicéphore","Nicolas","Noé","Noël","Norbert","Normand","Normands","Octave","Odilon","Odon","Oger","Olivier","Oury","Pacôme","Palémon","Parfait","Pascal","Paterne","Patrice","Paul","Pépin","Perceval","Philémon","Philibert","Philippe","Philothée","Pie","Pierre","Pierrick","Prosper","Quentin","Raoul","Raphaël","Raymond","Régis","Réjean","Rémi","Renaud","René","Reybaud","Richard","Robert","Roch","Rodolphe","Rodrigue","Roger","Roland","Romain","Romuald","Roméo","Rome","Ronan","Roselin","Salomon","Samuel","Savin","Savinien","Scholastique","Sébastien","Séraphin","Serge","Séverin","Sidoine","Sigebert","Sigismond","Silvère","Simon","Siméon","Sixte","Stanislas","Stéphane","Stephan","Sylvain","Sylvestre","Tancrède","Tanguy","Taurin","Théodore","Théodose","Théophile","Théophraste","Thibault","Thibert","Thierry","Thomas","Timoléon","Timothée","Titien","Tonnin","Toussaint","Trajan","Tristan","Turold","Tim","Ulysse","Urbain","Valentin","Valère","Valéry","Venance","Venant","Venceslas","Vianney","Victor","Victorien","Victorin","Vigile","Vincent","Vital","Vitalien","Vivien","Waleran","Wandrille","Xavier","Xénophon","Yves","Zacharie","Zaché","Zéphirin"]
2585 },
2586
2587 "female": {
2588 "en": ["Mary", "Emma", "Elizabeth", "Minnie", "Margaret", "Ida", "Alice", "Bertha", "Sarah", "Annie", "Clara", "Ella", "Florence", "Cora", "Martha", "Laura", "Nellie", "Grace", "Carrie", "Maude", "Mabel", "Bessie", "Jennie", "Gertrude", "Julia", "Hattie", "Edith", "Mattie", "Rose", "Catherine", "Lillian", "Ada", "Lillie", "Helen", "Jessie", "Louise", "Ethel", "Lula", "Myrtle", "Eva", "Frances", "Lena", "Lucy", "Edna", "Maggie", "Pearl", "Daisy", "Fannie", "Josephine", "Dora", "Rosa", "Katherine", "Agnes", "Marie", "Nora", "May", "Mamie", "Blanche", "Stella", "Ellen", "Nancy", "Effie", "Sallie", "Nettie", "Della", "Lizzie", "Flora", "Susie", "Maud", "Mae", "Etta", "Harriet", "Sadie", "Caroline", "Katie", "Lydia", "Elsie", "Kate", "Susan", "Mollie", "Alma", "Addie", "Georgia", "Eliza", "Lulu", "Nannie", "Lottie", "Amanda", "Belle", "Charlotte", "Rebecca", "Ruth", "Viola", "Olive", "Amelia", "Hannah", "Jane", "Virginia", "Emily", "Matilda", "Irene", "Kathryn", "Esther", "Willie", "Henrietta", "Ollie", "Amy", "Rachel", "Sara", "Estella", "Theresa", "Augusta", "Ora", "Pauline", "Josie", "Lola", "Sophia", "Leona", "Anne", "Mildred", "Ann", "Beulah", "Callie", "Lou", "Delia", "Eleanor", "Barbara", "Iva", "Louisa", "Maria", "Mayme", "Evelyn", "Estelle", "Nina", "Betty", "Marion", "Bettie", "Dorothy", "Luella", "Inez", "Lela", "Rosie", "Allie", "Millie", "Janie", "Cornelia", "Victoria", "Ruby", "Winifred", "Alta", "Celia", "Christine", "Beatrice", "Birdie", "Harriett", "Mable", "Myra", "Sophie", "Tillie", "Isabel", "Sylvia", "Carolyn", "Isabelle", "Leila", "Sally", "Ina", "Essie", "Bertie", "Nell", "Alberta", "Katharine", "Lora", "Rena", "Mina", "Rhoda", "Mathilda", "Abbie", "Eula", "Dollie", "Hettie", "Eunice", "Fanny", "Ola", "Lenora", "Adelaide", "Christina", "Lelia", "Nelle", "Sue", "Johanna", "Lilly", "Lucinda", "Minerva", "Lettie", "Roxie", "Cynthia", "Helena", "Hilda", "Hulda", "Bernice", "Genevieve", "Jean", "Cordelia", "Marian", "Francis", "Jeanette", "Adeline", "Gussie", "Leah", "Lois", "Lura", "Mittie", "Hallie", "Isabella", "Olga", "Phoebe", "Teresa", "Hester", "Lida", "Lina", "Winnie", "Claudia", "Marguerite", "Vera", "Cecelia", "Bess", "Emilie", "Rosetta", "Verna", "Myrtie", "Cecilia", "Elva", "Olivia", "Ophelia", "Georgie", "Elnora", "Violet", "Adele", "Lily", "Linnie", "Loretta", "Madge", "Polly", "Virgie", "Eugenia", "Lucile", "Lucille", "Mabelle", "Rosalie"],
2589 // Data taken from http://www.dati.gov.it/dataset/comune-di-firenze_0162
2590 "it": ["Ada", "Adriana", "Alessandra", "Alessia", "Alice", "Angela", "Anna", "Anna Maria", "Annalisa", "Annita", "Annunziata", "Antonella", "Arianna", "Asia", "Assunta", "Aurora", "Barbara", "Beatrice", "Benedetta", "Bianca", "Bruna", "Camilla", "Carla", "Carlotta", "Carmela", "Carolina", "Caterina", "Catia", "Cecilia", "Chiara", "Cinzia", "Clara", "Claudia", "Costanza", "Cristina", "Daniela", "Debora", "Diletta", "Dina", "Donatella", "Elena", "Eleonora", "Elisa", "Elisabetta", "Emanuela", "Emma", "Eva", "Federica", "Fernanda", "Fiorella", "Fiorenza", "Flora", "Franca", "Francesca", "Gabriella", "Gaia", "Gemma", "Giada", "Gianna", "Gina", "Ginevra", "Giorgia", "Giovanna", "Giulia", "Giuliana", "Giuseppa", "Giuseppina", "Grazia", "Graziella", "Greta", "Ida", "Ilaria", "Ines", "Iolanda", "Irene", "Irma", "Isabella", "Jessica", "Laura", "Lea", "Letizia", "Licia", "Lidia", "Liliana", "Lina", "Linda", "Lisa", "Livia", "Loretta", "Luana", "Lucia", "Luciana", "Lucrezia", "Luisa", "Manuela", "Mara", "Marcella", "Margherita", "Maria", "Maria Cristina", "Maria Grazia", "Maria Luisa", "Maria Pia", "Maria Teresa", "Marina", "Marisa", "Marta", "Martina", "Marzia", "Matilde", "Melissa", "Michela", "Milena", "Mirella", "Monica", "Natalina", "Nella", "Nicoletta", "Noemi", "Olga", "Paola", "Patrizia", "Piera", "Pierina", "Raffaella", "Rebecca", "Renata", "Rina", "Rita", "Roberta", "Rosa", "Rosanna", "Rossana", "Rossella", "Sabrina", "Sandra", "Sara", "Serena", "Silvana", "Silvia", "Simona", "Simonetta", "Sofia", "Sonia", "Stefania", "Susanna", "Teresa", "Tina", "Tiziana", "Tosca", "Valentina", "Valeria", "Vanda", "Vanessa", "Vanna", "Vera", "Veronica", "Vilma", "Viola", "Virginia", "Vittoria"],
2591 // Data taken from http://www.svbkindernamen.nl/int/nl/kindernamen/index.html
2592 "nl": ["Ada", "Arianne", "Afke", "Amanda", "Amber", "Amy", "Aniek", "Anita", "Anja", "Anna", "Anne", "Annelies", "Annemarie", "Annette", "Anouk", "Astrid", "Aukje", "Barbara", "Bianca", "Carla", "Carlijn", "Carolien", "Chantal", "Charlotte", "Claudia", "Daniëlle", "Debora", "Diane", "Dora", "Eline", "Elise", "Ella", "Ellen", "Emma", "Esmee", "Evelien", "Esther", "Erica", "Eva", "Femke", "Fleur", "Floor", "Froukje", "Gea", "Gerda", "Hanna", "Hanneke", "Heleen", "Hilde", "Ilona", "Ina", "Inge", "Ingrid", "Iris", "Isabel", "Isabelle", "Janneke", "Jasmijn", "Jeanine", "Jennifer", "Jessica", "Johanna", "Joke", "Julia", "Julie", "Karen", "Karin", "Katja", "Kim", "Lara", "Laura", "Lena", "Lianne", "Lieke", "Lilian", "Linda", "Lisa", "Lisanne", "Lotte", "Louise", "Maaike", "Manon", "Marga", "Maria", "Marissa", "Marit", "Marjolein", "Martine", "Marleen", "Melissa", "Merel", "Miranda", "Michelle", "Mirjam", "Mirthe", "Naomi", "Natalie", 'Nienke', "Nina", "Noortje", "Olivia", "Patricia", "Paula", "Paulien", "Ramona", "Ria", "Rianne", "Roos", "Rosanne", "Ruth", "Sabrina", "Sandra", "Sanne", "Sara", "Saskia", "Silvia", "Sofia", "Sophie", "Sonja", "Suzanne", "Tamara", "Tess", "Tessa", "Tineke", "Valerie", "Vanessa", "Veerle", "Vera", "Victoria", "Wendy", "Willeke", "Yvonne", "Zoë"],
2593 // Data taken from https://fr.wikipedia.org/wiki/Liste_de_pr%C3%A9noms_fran%C3%A7ais_et_de_la_francophonie
2594 "fr": ["Abdon","Abel","Abigaëlle","Abigaïl","Acacius","Acanthe","Adalbert","Adalsinde","Adegrine","Adélaïde","Adèle","Adélie","Adeline","Adeltrude","Adolphe","Adonis","Adrastée","Adrehilde","Adrienne","Agathe","Agilbert","Aglaé","Aignan","Agneflète","Agnès","Agrippine","Aimé","Alaine","Alaïs","Albane","Albérade","Alberte","Alcide","Alcine","Alcyone","Aldegonde","Aleth","Alexandrine","Alexine","Alice","Aliénor","Aliette","Aline","Alix","Alizé","Aloïse","Aloyse","Alphonsine","Althée","Amaliane","Amalthée","Amande","Amandine","Amant","Amarande","Amaranthe","Amaryllis","Ambre","Ambroisie","Amélie","Améthyste","Aminte","Anaël","Anaïs","Anastasie","Anatole","Ancelin","Andrée","Anémone","Angadrême","Angèle","Angeline","Angélique","Angilbert","Anicet","Annabelle","Anne","Annette","Annick","Annie","Annonciade","Ansbert","Anstrudie","Anthelme","Antigone","Antoinette","Antonine","Aphélie","Apolline","Apollonie","Aquiline","Arabelle","Arcadie","Archange","Argine","Ariane","Aricie","Ariel","Arielle","Arlette","Armance","Armande","Armandine","Armelle","Armide","Armelle","Armin","Arnaud","Arsène","Arsinoé","Artémis","Arthur","Ascelin","Ascension","Assomption","Astarté","Astérie","Astrée","Astrid","Athalie","Athanasie","Athina","Aube","Albert","Aude","Audrey","Augustine","Aure","Aurélie","Aurélien","Aurèle","Aurore","Auxence","Aveline","Abigaëlle","Avoye","Axelle","Aymard","Azalée","Adèle","Adeline","Barbe","Basilisse","Bathilde","Béatrice","Béatrix","Bénédicte","Bérengère","Bernadette","Berthe","Bertille","Beuve","Blanche","Blanc","Blandine","Brigitte","Brune","Brunehilde","Callista","Camille","Capucine","Carine","Caroline","Cassandre","Catherine","Cécile","Céleste","Célestine","Céline","Chantal","Charlène","Charline","Charlotte","Chloé","Christelle","Christiane","Christine","Claire","Clara","Claude","Claudine","Clarisse","Clémence","Clémentine","Cléo","Clio","Clotilde","Coline","Conception","Constance","Coralie","Coraline","Corentine","Corinne","Cyrielle","Daniel","Daniel","Daphné","Débora","Delphine","Denise","Diane","Dieudonné","Dominique","Doriane","Dorothée","Douce","Édith","Edmée","Éléonore","Éliane","Élia","Éliette","Élisabeth","Élise","Ella","Élodie","Éloïse","Elsa","Émeline","Émérance","Émérentienne","Émérencie","Émilie","Emma","Emmanuelle","Emmelie","Ernestine","Esther","Estelle","Eudoxie","Eugénie","Eulalie","Euphrasie","Eusébie","Évangéline","Eva","Ève","Évelyne","Fanny","Fantine","Faustine","Félicie","Fernande","Flavie","Fleur","Flore","Florence","Florie","Fortuné","France","Francia","Françoise","Francine","Gabrielle","Gaëlle","Garance","Geneviève","Georgette","Gerberge","Germaine","Gertrude","Gisèle","Guenièvre","Guilhemine","Guillemette","Gustave","Gwenael","Hélène","Héloïse","Henriette","Hermine","Hermione","Hippolyte","Honorine","Hortense","Huguette","Ines","Irène","Irina","Iris","Isabeau","Isabelle","Iseult","Isolde","Ismérie","Jacinthe","Jacqueline","Jade","Janine","Jeanne","Jocelyne","Joëlle","Joséphine","Judith","Julia","Julie","Jules","Juliette","Justine","Katy","Kathy","Katie","Laura","Laure","Laureline","Laurence","Laurene","Lauriane","Laurianne","Laurine","Léa","Léna","Léonie","Léon","Léontine","Lorraine","Lucie","Lucienne","Lucille","Ludivine","Lydie","Lydie","Megane","Madeleine","Magali","Maguelone","Mallaury","Manon","Marceline","Margot","Marguerite","Marianne","Marie","Myriam","Marie","Marine","Marion","Marlène","Marthe","Martine","Mathilde","Maud","Maureen","Mauricette","Maxime","Mélanie","Melissa","Mélissandre","Mélisande","Mélodie","Michel","Micheline","Mireille","Miriam","Moïse","Monique","Morgane","Muriel","Mylène","Nadège","Nadine","Nathalie","Nicole","Nicolette","Nine","Noël","Noémie","Océane","Odette","Odile","Olive","Olivia","Olympe","Ombline","Ombeline","Ophélie","Oriande","Oriane","Ozanne","Pascale","Pascaline","Paule","Paulette","Pauline","Priscille","Prisca","Prisque","Pécine","Pélagie","Pénélope","Perrine","Pétronille","Philippine","Philomène","Philothée","Primerose","Prudence","Pulchérie","Quentine","Quiéta","Quintia","Quintilla","Rachel","Raphaëlle","Raymonde","Rebecca","Régine","Réjeanne","René","Rita","Rita","Rolande","Romane","Rosalie","Rose","Roseline","Sabine","Salomé","Sandra","Sandrine","Sarah","Ségolène","Séverine","Sibylle","Simone","Sixt","Solange","Soline","Solène","Sophie","Stéphanie","Suzanne","Sylvain","Sylvie","Tatiana","Thaïs","Théodora","Thérèse","Tiphaine","Ursule","Valentine","Valérie","Véronique","Victoire","Victorine","Vinciane","Violette","Virginie","Viviane","Xavière","Yolande","Ysaline","Yvette","Yvonne","Zélie","Zita","Zoé"]
2595 }
2596 },
2597
2598 lastNames: {
2599 "en": ['Smith', 'Johnson', 'Williams', 'Jones', 'Brown', 'Davis', 'Miller', 'Wilson', 'Moore', 'Taylor', 'Anderson', 'Thomas', 'Jackson', 'White', 'Harris', 'Martin', 'Thompson', 'Garcia', 'Martinez', 'Robinson', 'Clark', 'Rodriguez', 'Lewis', 'Lee', 'Walker', 'Hall', 'Allen', 'Young', 'Hernandez', 'King', 'Wright', 'Lopez', 'Hill', 'Scott', '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', 'James', 'Watson', 'Brooks', 'Kelly', 'Sanders', 'Price', 'Bennett', 'Wood', 'Barnes', 'Ross', 'Henderson', 'Coleman', 'Jenkins', 'Perry', 'Powell', 'Long', 'Patterson', 'Hughes', 'Flores', 'Washington', 'Butler', 'Simmons', 'Foster', 'Gonzales', 'Bryant', 'Alexander', 'Russell', 'Griffin', 'Diaz', 'Hayes', 'Myers', 'Ford', 'Hamilton', 'Graham', 'Sullivan', 'Wallace', 'Woods', 'Cole', 'West', 'Jordan', 'Owens', 'Reynolds', 'Fisher', 'Ellis', 'Harrison', 'Gibson', 'McDonald', 'Cruz', 'Marshall', 'Ortiz', 'Gomez', 'Murray', 'Freeman', 'Wells', 'Webb', 'Simpson', 'Stevens', 'Tucker', 'Porter', 'Hunter', 'Hicks', 'Crawford', 'Henry', 'Boyd', 'Mason', 'Morales', 'Kennedy', 'Warren', 'Dixon', 'Ramos', 'Reyes', 'Burns', 'Gordon', 'Shaw', 'Holmes', 'Rice', 'Robertson', 'Hunt', 'Black', 'Daniels', 'Palmer', 'Mills', 'Nichols', 'Grant', 'Knight', 'Ferguson', 'Rose', 'Stone', 'Hawkins', 'Dunn', 'Perkins', 'Hudson', 'Spencer', 'Gardner', 'Stephens', 'Payne', 'Pierce', 'Berry', 'Matthews', 'Arnold', 'Wagner', 'Willis', 'Ray', 'Watkins', 'Olson', 'Carroll', 'Duncan', 'Snyder', 'Hart', 'Cunningham', 'Bradley', 'Lane', 'Andrews', 'Ruiz', 'Harper', 'Fox', 'Riley', 'Armstrong', 'Carpenter', 'Weaver', 'Greene', 'Lawrence', 'Elliott', 'Chavez', 'Sims', 'Austin', 'Peters', 'Kelley', 'Franklin', 'Lawson', 'Fields', 'Gutierrez', 'Ryan', 'Schmidt', 'Carr', 'Vasquez', 'Castillo', 'Wheeler', 'Chapman', 'Oliver', 'Montgomery', 'Richards', 'Williamson', 'Johnston', 'Banks', 'Meyer', 'Bishop', 'McCoy', 'Howell', 'Alvarez', 'Morrison', 'Hansen', 'Fernandez', 'Garza', 'Harvey', 'Little', 'Burton', 'Stanley', 'Nguyen', 'George', 'Jacobs', 'Reid', 'Kim', 'Fuller', 'Lynch', 'Dean', 'Gilbert', 'Garrett', 'Romero', 'Welch', 'Larson', 'Frazier', 'Burke', 'Hanson', 'Day', 'Mendoza', 'Moreno', 'Bowman', 'Medina', 'Fowler', 'Brewer', 'Hoffman', 'Carlson', 'Silva', 'Pearson', 'Holland', 'Douglas', 'Fleming', 'Jensen', 'Vargas', 'Byrd', 'Davidson', 'Hopkins', 'May', 'Terry', 'Herrera', 'Wade', 'Soto', 'Walters', 'Curtis', 'Neal', 'Caldwell', 'Lowe', 'Jennings', 'Barnett', 'Graves', 'Jimenez', 'Horton', 'Shelton', 'Barrett', 'Obrien', 'Castro', 'Sutton', 'Gregory', 'McKinney', 'Lucas', 'Miles', 'Craig', 'Rodriquez', 'Chambers', 'Holt', 'Lambert', 'Fletcher', 'Watts', 'Bates', 'Hale', 'Rhodes', 'Pena', 'Beck', 'Newman', 'Haynes', 'McDaniel', 'Mendez', 'Bush', 'Vaughn', 'Parks', 'Dawson', 'Santiago', 'Norris', 'Hardy', 'Love', 'Steele', 'Curry', 'Powers', 'Schultz', 'Barker', 'Guzman', 'Page', 'Munoz', 'Ball', 'Keller', 'Chandler', 'Weber', 'Leonard', 'Walsh', 'Lyons', 'Ramsey', 'Wolfe', 'Schneider', 'Mullins', 'Benson', 'Sharp', 'Bowen', 'Daniel', 'Barber', 'Cummings', 'Hines', 'Baldwin', 'Griffith', 'Valdez', 'Hubbard', 'Salazar', 'Reeves', 'Warner', 'Stevenson', 'Burgess', 'Santos', 'Tate', 'Cross', 'Garner', 'Mann', 'Mack', 'Moss', 'Thornton', 'Dennis', 'McGee', 'Farmer', 'Delgado', 'Aguilar', 'Vega', 'Glover', 'Manning', 'Cohen', 'Harmon', 'Rodgers', 'Robbins', 'Newton', 'Todd', 'Blair', 'Higgins', 'Ingram', 'Reese', 'Cannon', 'Strickland', 'Townsend', 'Potter', 'Goodwin', 'Walton', 'Rowe', 'Hampton', 'Ortega', 'Patton', 'Swanson', 'Joseph', 'Francis', 'Goodman', 'Maldonado', 'Yates', 'Becker', 'Erickson', 'Hodges', 'Rios', 'Conner', 'Adkins', 'Webster', 'Norman', 'Malone', 'Hammond', 'Flowers', 'Cobb', 'Moody', 'Quinn', 'Blake', 'Maxwell', 'Pope', 'Floyd', 'Osborne', 'Paul', 'McCarthy', 'Guerrero', 'Lindsey', 'Estrada', 'Sandoval', 'Gibbs', 'Tyler', 'Gross', 'Fitzgerald', 'Stokes', 'Doyle', 'Sherman', 'Saunders', 'Wise', 'Colon', 'Gill', 'Alvarado', 'Greer', 'Padilla', 'Simon', 'Waters', 'Nunez', 'Ballard', 'Schwartz', 'McBride', 'Houston', 'Christensen', 'Klein', 'Pratt', 'Briggs', 'Parsons', 'McLaughlin', 'Zimmerman', 'French', 'Buchanan', 'Moran', 'Copeland', 'Roy', 'Pittman', 'Brady', 'McCormick', 'Holloway', 'Brock', 'Poole', 'Frank', 'Logan', 'Owen', 'Bass', 'Marsh', 'Drake', 'Wong', 'Jefferson', 'Park', 'Morton', 'Abbott', 'Sparks', 'Patrick', 'Norton', 'Huff', 'Clayton', 'Massey', 'Lloyd', 'Figueroa', 'Carson', 'Bowers', 'Roberson', 'Barton', 'Tran', 'Lamb', 'Harrington', 'Casey', 'Boone', 'Cortez', 'Clarke', 'Mathis', 'Singleton', 'Wilkins', 'Cain', 'Bryan', 'Underwood', 'Hogan', 'McKenzie', 'Collier', 'Luna', 'Phelps', 'McGuire', 'Allison', 'Bridges', 'Wilkerson', 'Nash', 'Summers', 'Atkins'],
2600 // Data taken from http://www.dati.gov.it/dataset/comune-di-firenze_0164 (first 1000)
2601 "it": ["Acciai", "Aglietti", "Agostini", "Agresti", "Ahmed", "Aiazzi", "Albanese", "Alberti", "Alessi", "Alfani", "Alinari", "Alterini", "Amato", "Ammannati", "Ancillotti", "Andrei", "Andreini", "Andreoni", "Angeli", "Anichini", "Antonelli", "Antonini", "Arena", "Ariani", "Arnetoli", "Arrighi", "Baccani", "Baccetti", "Bacci", "Bacherini", "Badii", "Baggiani", "Baglioni", "Bagni", "Bagnoli", "Baldassini", "Baldi", "Baldini", "Ballerini", "Balli", "Ballini", "Balloni", "Bambi", "Banchi", "Bandinelli", "Bandini", "Bani", "Barbetti", "Barbieri", "Barchielli", "Bardazzi", "Bardelli", "Bardi", "Barducci", "Bargellini", "Bargiacchi", "Barni", "Baroncelli", "Baroncini", "Barone", "Baroni", "Baronti", "Bartalesi", "Bartoletti", "Bartoli", "Bartolini", "Bartoloni", "Bartolozzi", "Basagni", "Basile", "Bassi", "Batacchi", "Battaglia", "Battaglini", "Bausi", "Becagli", "Becattini", "Becchi", "Becucci", "Bellandi", "Bellesi", "Belli", "Bellini", "Bellucci", "Bencini", "Benedetti", "Benelli", "Beni", "Benini", "Bensi", "Benucci", "Benvenuti", "Berlincioni", "Bernacchioni", "Bernardi", "Bernardini", "Berni", "Bernini", "Bertelli", "Berti", "Bertini", "Bessi", "Betti", "Bettini", "Biagi", "Biagini", "Biagioni", "Biagiotti", "Biancalani", "Bianchi", "Bianchini", "Bianco", "Biffoli", "Bigazzi", "Bigi", "Biliotti", "Billi", "Binazzi", "Bindi", "Bini", "Biondi", "Bizzarri", "Bocci", "Bogani", "Bolognesi", "Bonaiuti", "Bonanni", "Bonciani", "Boncinelli", "Bondi", "Bonechi", "Bongini", "Boni", "Bonini", "Borchi", "Boretti", "Borghi", "Borghini", "Borgioli", "Borri", "Borselli", "Boschi", "Bottai", "Bracci", "Braccini", "Brandi", "Braschi", "Bravi", "Brazzini", "Breschi", "Brilli", "Brizzi", "Brogelli", "Brogi", "Brogioni", "Brunelli", "Brunetti", "Bruni", "Bruno", "Brunori", "Bruschi", "Bucci", "Bucciarelli", "Buccioni", "Bucelli", "Bulli", "Burberi", "Burchi", "Burgassi", "Burroni", "Bussotti", "Buti", "Caciolli", "Caiani", "Calabrese", "Calamai", "Calamandrei", "Caldini", "Calo'", "Calonaci", "Calosi", "Calvelli", "Cambi", "Camiciottoli", "Cammelli", "Cammilli", "Campolmi", "Cantini", "Capanni", "Capecchi", "Caponi", "Cappelletti", "Cappelli", "Cappellini", "Cappugi", "Capretti", "Caputo", "Carbone", "Carboni", "Cardini", "Carlesi", "Carletti", "Carli", "Caroti", "Carotti", "Carrai", "Carraresi", "Carta", "Caruso", "Casalini", "Casati", "Caselli", "Casini", "Castagnoli", "Castellani", "Castelli", "Castellucci", "Catalano", "Catarzi", "Catelani", "Cavaciocchi", "Cavallaro", "Cavallini", "Cavicchi", "Cavini", "Ceccarelli", "Ceccatelli", "Ceccherelli", "Ceccherini", "Cecchi", "Cecchini", "Cecconi", "Cei", "Cellai", "Celli", "Cellini", "Cencetti", "Ceni", "Cenni", "Cerbai", "Cesari", "Ceseri", "Checcacci", "Checchi", "Checcucci", "Cheli", "Chellini", "Chen", "Cheng", "Cherici", "Cherubini", "Chiaramonti", "Chiarantini", "Chiarelli", "Chiari", "Chiarini", "Chiarugi", "Chiavacci", "Chiesi", "Chimenti", "Chini", "Chirici", "Chiti", "Ciabatti", "Ciampi", "Cianchi", "Cianfanelli", "Cianferoni", "Ciani", "Ciapetti", "Ciappi", "Ciardi", "Ciatti", "Cicali", "Ciccone", "Cinelli", "Cini", "Ciobanu", "Ciolli", "Cioni", "Cipriani", "Cirillo", "Cirri", "Ciucchi", "Ciuffi", "Ciulli", "Ciullini", "Clemente", "Cocchi", "Cognome", "Coli", "Collini", "Colombo", "Colzi", "Comparini", "Conforti", "Consigli", "Conte", "Conti", "Contini", "Coppini", "Coppola", "Corsi", "Corsini", "Corti", "Cortini", "Cosi", "Costa", "Costantini", "Costantino", "Cozzi", "Cresci", "Crescioli", "Cresti", "Crini", "Curradi", "D'Agostino", "D'Alessandro", "D'Amico", "D'Angelo", "Daddi", "Dainelli", "Dallai", "Danti", "Davitti", "De Angelis", "De Luca", "De Marco", "De Rosa", "De Santis", "De Simone", "De Vita", "Degl'Innocenti", "Degli Innocenti", "Dei", "Del Lungo", "Del Re", "Di Marco", "Di Stefano", "Dini", "Diop", "Dobre", "Dolfi", "Donati", "Dondoli", "Dong", "Donnini", "Ducci", "Dumitru", "Ermini", "Esposito", "Evangelisti", "Fabbri", "Fabbrini", "Fabbrizzi", "Fabbroni", "Fabbrucci", "Fabiani", "Facchini", "Faggi", "Fagioli", "Failli", "Faini", "Falciani", "Falcini", "Falcone", "Fallani", "Falorni", "Falsini", "Falugiani", "Fancelli", "Fanelli", "Fanetti", "Fanfani", "Fani", "Fantappie'", "Fantechi", "Fanti", "Fantini", "Fantoni", "Farina", "Fattori", "Favilli", "Fedi", "Fei", "Ferrante", "Ferrara", "Ferrari", "Ferraro", "Ferretti", "Ferri", "Ferrini", "Ferroni", "Fiaschi", "Fibbi", "Fiesoli", "Filippi", "Filippini", "Fini", "Fioravanti", "Fiore", "Fiorentini", "Fiorini", "Fissi", "Focardi", "Foggi", "Fontana", "Fontanelli", "Fontani", "Forconi", "Formigli", "Forte", "Forti", "Fortini", "Fossati", "Fossi", "Francalanci", "Franceschi", "Franceschini", "Franchi", "Franchini", "Franci", "Francini", "Francioni", "Franco", "Frassineti", "Frati", "Fratini", "Frilli", "Frizzi", "Frosali", "Frosini", "Frullini", "Fusco", "Fusi", "Gabbrielli", "Gabellini", "Gagliardi", "Galanti", "Galardi", "Galeotti", "Galletti", "Galli", "Gallo", "Gallori", "Gambacciani", "Gargani", "Garofalo", "Garuglieri", "Gashi", "Gasperini", "Gatti", "Gelli", "Gensini", "Gentile", "Gentili", "Geri", "Gerini", "Gheri", "Ghini", "Giachetti", "Giachi", "Giacomelli", "Gianassi", "Giani", "Giannelli", "Giannetti", "Gianni", "Giannini", "Giannoni", "Giannotti", "Giannozzi", "Gigli", "Giordano", "Giorgetti", "Giorgi", "Giovacchini", "Giovannelli", "Giovannetti", "Giovannini", "Giovannoni", "Giuliani", "Giunti", "Giuntini", "Giusti", "Gonnelli", "Goretti", "Gori", "Gradi", "Gramigni", "Grassi", "Grasso", "Graziani", "Grazzini", "Greco", "Grifoni", "Grillo", "Grimaldi", "Grossi", "Gualtieri", "Guarducci", "Guarino", "Guarnieri", "Guasti", "Guerra", "Guerri", "Guerrini", "Guidi", "Guidotti", "He", "Hoxha", "Hu", "Huang", "Iandelli", "Ignesti", "Innocenti", "Jin", "La Rosa", "Lai", "Landi", "Landini", "Lanini", "Lapi", "Lapini", "Lari", "Lascialfari", "Lastrucci", "Latini", "Lazzeri", "Lazzerini", "Lelli", "Lenzi", "Leonardi", "Leoncini", "Leone", "Leoni", "Lepri", "Li", "Liao", "Lin", "Linari", "Lippi", "Lisi", "Livi", "Lombardi", "Lombardini", "Lombardo", "Longo", "Lopez", "Lorenzi", "Lorenzini", "Lorini", "Lotti", "Lu", "Lucchesi", "Lucherini", "Lunghi", "Lupi", "Madiai", "Maestrini", "Maffei", "Maggi", "Maggini", "Magherini", "Magini", "Magnani", "Magnelli", "Magni", "Magnolfi", "Magrini", "Malavolti", "Malevolti", "Manca", "Mancini", "Manetti", "Manfredi", "Mangani", "Mannelli", "Manni", "Mannini", "Mannucci", "Manuelli", "Manzini", "Marcelli", "Marchese", "Marchetti", "Marchi", "Marchiani", "Marchionni", "Marconi", "Marcucci", "Margheri", "Mari", "Mariani", "Marilli", "Marinai", "Marinari", "Marinelli", "Marini", "Marino", "Mariotti", "Marsili", "Martelli", "Martinelli", "Martini", "Martino", "Marzi", "Masi", "Masini", "Masoni", "Massai", "Materassi", "Mattei", "Matteini", "Matteucci", "Matteuzzi", "Mattioli", "Mattolini", "Matucci", "Mauro", "Mazzanti", "Mazzei", "Mazzetti", "Mazzi", "Mazzini", "Mazzocchi", "Mazzoli", "Mazzoni", "Mazzuoli", "Meacci", "Mecocci", "Meini", "Melani", "Mele", "Meli", "Mengoni", "Menichetti", "Meoni", "Merlini", "Messeri", "Messina", "Meucci", "Miccinesi", "Miceli", "Micheli", "Michelini", "Michelozzi", "Migliori", "Migliorini", "Milani", "Miniati", "Misuri", "Monaco", "Montagnani", "Montagni", "Montanari", "Montelatici", "Monti", "Montigiani", "Montini", "Morandi", "Morandini", "Morelli", "Moretti", "Morganti", "Mori", "Morini", "Moroni", "Morozzi", "Mugnai", "Mugnaini", "Mustafa", "Naldi", "Naldini", "Nannelli", "Nanni", "Nannini", "Nannucci", "Nardi", "Nardini", "Nardoni", "Natali", "Ndiaye", "Nencetti", "Nencini", "Nencioni", "Neri", "Nesi", "Nesti", "Niccolai", "Niccoli", "Niccolini", "Nigi", "Nistri", "Nocentini", "Noferini", "Novelli", "Nucci", "Nuti", "Nutini", "Oliva", "Olivieri", "Olmi", "Orlandi", "Orlandini", "Orlando", "Orsini", "Ortolani", "Ottanelli", "Pacciani", "Pace", "Paci", "Pacini", "Pagani", "Pagano", "Paggetti", "Pagliai", "Pagni", "Pagnini", "Paladini", "Palagi", "Palchetti", "Palloni", "Palmieri", "Palumbo", "Pampaloni", "Pancani", "Pandolfi", "Pandolfini", "Panerai", "Panichi", "Paoletti", "Paoli", "Paolini", "Papi", "Papini", "Papucci", "Parenti", "Parigi", "Parisi", "Parri", "Parrini", "Pasquini", "Passeri", "Pecchioli", "Pecorini", "Pellegrini", "Pepi", "Perini", "Perrone", "Peruzzi", "Pesci", "Pestelli", "Petri", "Petrini", "Petrucci", "Pettini", "Pezzati", "Pezzatini", "Piani", "Piazza", "Piazzesi", "Piazzini", "Piccardi", "Picchi", "Piccini", "Piccioli", "Pieraccini", "Pieraccioni", "Pieralli", "Pierattini", "Pieri", "Pierini", "Pieroni", "Pietrini", "Pini", "Pinna", "Pinto", "Pinzani", "Pinzauti", "Piras", "Pisani", "Pistolesi", "Poggesi", "Poggi", "Poggiali", "Poggiolini", "Poli", "Pollastri", "Porciani", "Pozzi", "Pratellesi", "Pratesi", "Prosperi", "Pruneti", "Pucci", "Puccini", "Puccioni", "Pugi", "Pugliese", "Puliti", "Querci", "Quercioli", "Raddi", "Radu", "Raffaelli", "Ragazzini", "Ranfagni", "Ranieri", "Rastrelli", "Raugei", "Raveggi", "Renai", "Renzi", "Rettori", "Ricci", "Ricciardi", "Ridi", "Ridolfi", "Rigacci", "Righi", "Righini", "Rinaldi", "Risaliti", "Ristori", "Rizzo", "Rocchi", "Rocchini", "Rogai", "Romagnoli", "Romanelli", "Romani", "Romano", "Romei", "Romeo", "Romiti", "Romoli", "Romolini", "Rontini", "Rosati", "Roselli", "Rosi", "Rossetti", "Rossi", "Rossini", "Rovai", "Ruggeri", "Ruggiero", "Russo", "Sabatini", "Saccardi", "Sacchetti", "Sacchi", "Sacco", "Salerno", "Salimbeni", "Salucci", "Salvadori", "Salvestrini", "Salvi", "Salvini", "Sanesi", "Sani", "Sanna", "Santi", "Santini", "Santoni", "Santoro", "Santucci", "Sardi", "Sarri", "Sarti", "Sassi", "Sbolci", "Scali", "Scarpelli", "Scarselli", "Scopetani", "Secci", "Selvi", "Senatori", "Senesi", "Serafini", "Sereni", "Serra", "Sestini", "Sguanci", "Sieni", "Signorini", "Silvestri", "Simoncini", "Simonetti", "Simoni", "Singh", "Sodi", "Soldi", "Somigli", "Sorbi", "Sorelli", "Sorrentino", "Sottili", "Spina", "Spinelli", "Staccioli", "Staderini", "Stefanelli", "Stefani", "Stefanini", "Stella", "Susini", "Tacchi", "Tacconi", "Taddei", "Tagliaferri", "Tamburini", "Tanganelli", "Tani", "Tanini", "Tapinassi", "Tarchi", "Tarchiani", "Targioni", "Tassi", "Tassini", "Tempesti", "Terzani", "Tesi", "Testa", "Testi", "Tilli", "Tinti", "Tirinnanzi", "Toccafondi", "Tofanari", "Tofani", "Tognaccini", "Tonelli", "Tonini", "Torelli", "Torrini", "Tosi", "Toti", "Tozzi", "Trambusti", "Trapani", "Tucci", "Turchi", "Ugolini", "Ulivi", "Valente", "Valenti", "Valentini", "Vangelisti", "Vanni", "Vannini", "Vannoni", "Vannozzi", "Vannucchi", "Vannucci", "Ventura", "Venturi", "Venturini", "Vestri", "Vettori", "Vichi", "Viciani", "Vieri", "Vigiani", "Vignoli", "Vignolini", "Vignozzi", "Villani", "Vinci", "Visani", "Vitale", "Vitali", "Viti", "Viviani", "Vivoli", "Volpe", "Volpi", "Wang", "Wu", "Xu", "Yang", "Ye", "Zagli", "Zani", "Zanieri", "Zanobini", "Zecchi", "Zetti", "Zhang", "Zheng", "Zhou", "Zhu", "Zingoni", "Zini", "Zoppi"],
2602 // http://www.voornamelijk.nl/meest-voorkomende-achternamen-in-nederland-en-amsterdam/
2603 "nl":["Albers", "Alblas", "Appelman", "Baars", "Baas", "Bakker", "Blank", "Bleeker", "Blok", "Blom", "Boer", "Boers", "Boldewijn", "Boon", "Boot", "Bos", "Bosch", "Bosma", "Bosman", "Bouma", "Bouman", "Bouwman", "Brands", "Brouwer", "Burger", "Buijs", "Buitenhuis", "Ceder", "Cohen", "Dekker", "Dekkers", "Dijkman", "Dijkstra", "Driessen", "Drost", "Engel", "Evers", "Faber", "Franke", "Gerritsen", "Goedhart", "Goossens", "Groen", "Groenenberg", "Groot", "Haan", "Hart", "Heemskerk", "Hendriks", "Hermans", "Hoekstra", "Hofman", "Hopman", "Huisman", "Jacobs", "Jansen", "Janssen", "Jonker", "Jaspers", "Keijzer", "Klaassen", "Klein", "Koek", "Koenders", "Kok", "Kool", "Koopman", "Koopmans", "Koning", "Koster", "Kramer", "Kroon", "Kuijpers", "Kuiper", "Kuipers", "Kurt", "Koster", "Kwakman", "Los", "Lubbers", "Maas", "Markus", "Martens", "Meijer", "Mol", "Molenaar", "Mulder", "Nieuwenhuis", "Peeters", "Peters", "Pengel", "Pieters", "Pool", "Post", "Postma", "Prins", "Pronk", "Reijnders", "Rietveld", "Roest", "Roos", "Sanders", "Schaap", "Scheffer", "Schenk", "Schilder", "Schipper", "Schmidt", "Scholten", "Schouten", "Schut", "Schutte", "Schuurman", "Simons", "Smeets", "Smit", "Smits", "Snel", "Swinkels", "Tas", "Terpstra", "Timmermans", "Tol", "Tromp", "Troost", "Valk", "Veenstra", "Veldkamp", "Verbeek", "Verheul", "Verhoeven", "Vermeer", "Vermeulen", "Verweij", "Vink", "Visser", "Voorn", "Vos", "Wagenaar", "Wiersema", "Willems", "Willemsen", "Witteveen", "Wolff", "Wolters", "Zijlstra", "Zwart", "de Beer", "de Boer", "de Bruijn", "de Bruin", "de Graaf", "de Groot", "de Haan", "de Haas", "de Jager", "de Jong", "de Jonge", "de Koning", "de Lange", "de Leeuw", "de Ridder", "de Rooij", "de Ruiter", "de Vos", "de Vries", "de Waal", "de Wit", "de Zwart", "van Beek", "van Boven", "van Dam", "van Dijk", "van Dongen", "van Doorn", "van Egmond", "van Eijk", "van Es", "van Gelder", "van Gelderen", "van Houten", "van Hulst", "van Kempen", "van Kesteren", "van Leeuwen", "van Loon", "van Mill", "van Noord", "van Ommen", "van Ommeren", "van Oosten", "van Oostveen", "van Rijn", "van Schaik", "van Veen", "van Vliet", "van Wijk", "van Wijngaarden", "van den Poel", "van de Pol", "van den Ploeg", "van de Ven", "van den Berg", "van den Bosch", "van den Brink", "van den Broek", "van den Heuvel", "van der Heijden", "van der Horst", "van der Hulst", "van der Kroon", "van der Laan", "van der Linden", "van der Meer", "van der Meij", "van der Meulen", "van der Molen", "van der Sluis", "van der Spek", "van der Veen", "van der Velde", "van der Velden", "van der Vliet", "van der Wal"],
2604 // https://surnames.behindthename.com/top/lists/england-wales/1991
2605 "uk":["Smith","Jones","Williams","Taylor","Brown","Davies","Evans","Wilson","Thomas","Johnson","Roberts","Robinson","Thompson","Wright","Walker","White","Edwards","Hughes","Green","Hall","Lewis","Harris","Clarke","Patel","Jackson","Wood","Turner","Martin","Cooper","Hill","Ward","Morris","Moore","Clark","Lee","King","Baker","Harrison","Morgan","Allen","James","Scott","Phillips","Watson","Davis","Parker","Price","Bennett","Young","Griffiths","Mitchell","Kelly","Cook","Carter","Richardson","Bailey","Collins","Bell","Shaw","Murphy","Miller","Cox","Richards","Khan","Marshall","Anderson","Simpson","Ellis","Adams","Singh","Begum","Wilkinson","Foster","Chapman","Powell","Webb","Rogers","Gray","Mason","Ali","Hunt","Hussain","Campbell","Matthews","Owen","Palmer","Holmes","Mills","Barnes","Knight","Lloyd","Butler","Russell","Barker","Fisher","Stevens","Jenkins","Murray","Dixon","Harvey","Graham","Pearson","Ahmed","Fletcher","Walsh","Kaur","Gibson","Howard","Andrews","Stewart","Elliott","Reynolds","Saunders","Payne","Fox","Ford","Pearce","Day","Brooks","West","Lawrence","Cole","Atkinson","Bradley","Spencer","Gill","Dawson","Ball","Burton","O'brien","Watts","Rose","Booth","Perry","Ryan","Grant","Wells","Armstrong","Francis","Rees","Hayes","Hart","Hudson","Newman","Barrett","Webster","Hunter","Gregory","Carr","Lowe","Page","Marsh","Riley","Dunn","Woods","Parsons","Berry","Stone","Reid","Holland","Hawkins","Harding","Porter","Robertson","Newton","Oliver","Reed","Kennedy","Williamson","Bird","Gardner","Shah","Dean","Lane","Cooke","Bates","Henderson","Parry","Burgess","Bishop","Walton","Burns","Nicholson","Shepherd","Ross","Cross","Long","Freeman","Warren","Nicholls","Hamilton","Byrne","Sutton","Mcdonald","Yates","Hodgson","Robson","Curtis","Hopkins","O'connor","Harper","Coleman","Watkins","Moss","Mccarthy","Chambers","O'neill","Griffin","Sharp","Hardy","Wheeler","Potter","Osborne","Johnston","Gordon","Doyle","Wallace","George","Jordan","Hutchinson","Rowe","Burke","May","Pritchard","Gilbert","Willis","Higgins","Read","Miles","Stevenson","Stephenson","Hammond","Arnold","Buckley","Walters","Hewitt","Barber","Nelson","Slater","Austin","Sullivan","Whitehead","Mann","Frost","Lambert","Stephens","Blake","Akhtar","Lynch","Goodwin","Barton","Woodward","Thomson","Cunningham","Quinn","Barnett","Baxter","Bibi","Clayton","Nash","Greenwood","Jennings","Holt","Kemp","Poole","Gallagher","Bond","Stokes","Tucker","Davidson","Fowler","Heath","Norman","Middleton","Lawson","Banks","French","Stanley","Jarvis","Gibbs","Ferguson","Hayward","Carroll","Douglas","Dickinson","Todd","Barlow","Peters","Lucas","Knowles","Hartley","Miah","Simmons","Morton","Alexander","Field","Morrison","Norris","Townsend","Preston","Hancock","Thornton","Baldwin","Burrows","Briggs","Parkinson","Reeves","Macdonald","Lamb","Black","Abbott","Sanders","Thorpe","Holden","Tomlinson","Perkins","Ashton","Rhodes","Fuller","Howe","Bryant","Vaughan","Dale","Davey","Weston","Bartlett","Whittaker","Davison","Kent","Skinner","Birch","Morley","Daniels","Glover","Howell","Cartwright","Pugh","Humphreys","Goddard","Brennan","Wall","Kirby","Bowen","Savage","Bull","Wong","Dobson","Smart","Wilkins","Kirk","Fraser","Duffy","Hicks","Patterson","Bradshaw","Little","Archer","Warner","Waters","O'sullivan","Farrell","Brookes","Atkins","Kay","Dodd","Bentley","Flynn","John","Schofield","Short","Haynes","Wade","Butcher","Henry","Sanderson","Crawford","Sheppard","Bolton","Coates","Giles","Gould","Houghton","Gibbons","Pratt","Manning","Law","Hooper","Noble","Dyer","Rahman","Clements","Moran","Sykes","Chan","Doherty","Connolly","Joyce","Franklin","Hobbs","Coles","Herbert","Steele","Kerr","Leach","Winter","Owens","Duncan","Naylor","Fleming","Horton","Finch","Fitzgerald","Randall","Carpenter","Marsden","Browne","Garner","Pickering","Hale","Dennis","Vincent","Chadwick","Chandler","Sharpe","Nolan","Lyons","Hurst","Collier","Peacock","Howarth","Faulkner","Rice","Pollard","Welch","Norton","Gough","Sinclair","Blackburn","Bryan","Conway","Power","Cameron","Daly","Allan","Hanson","Gardiner","Boyle","Myers","Turnbull","Wallis","Mahmood","Sims","Swift","Iqbal","Pope","Brady","Chamberlain","Rowley","Tyler","Farmer","Metcalfe","Hilton","Godfrey","Holloway","Parkin","Bray","Talbot","Donnelly","Nixon","Charlton","Benson","Whitehouse","Barry","Hope","Lord","North","Storey","Connor","Potts","Bevan","Hargreaves","Mclean","Mistry","Bruce","Howells","Hyde","Parkes","Wyatt","Fry","Lees","O'donnell","Craig","Forster","Mckenzie","Humphries","Mellor","Carey","Ingram","Summers","Leonard"],
2606 // https://surnames.behindthename.com/top/lists/germany/2017
2607 "de": ["Müller","Schmidt","Schneider","Fischer","Weber","Meyer","Wagner","Becker","Schulz","Hoffmann","Schäfer","Koch","Bauer","Richter","Klein","Wolf","Schröder","Neumann","Schwarz","Zimmermann","Braun","Krüger","Hofmann","Hartmann","Lange","Schmitt","Werner","Schmitz","Krause","Meier","Lehmann","Schmid","Schulze","Maier","Köhler","Herrmann","König","Walter","Mayer","Huber","Kaiser","Fuchs","Peters","Lang","Scholz","Möller","Weiß","Jung","Hahn","Schubert","Vogel","Friedrich","Keller","Günther","Frank","Berger","Winkler","Roth","Beck","Lorenz","Baumann","Franke","Albrecht","Schuster","Simon","Ludwig","Böhm","Winter","Kraus","Martin","Schumacher","Krämer","Vogt","Stein","Jäger","Otto","Sommer","Groß","Seidel","Heinrich","Brandt","Haas","Schreiber","Graf","Schulte","Dietrich","Ziegler","Kuhn","Kühn","Pohl","Engel","Horn","Busch","Bergmann","Thomas","Voigt","Sauer","Arnold","Wolff","Pfeiffer"],
2608 // http://www.japantimes.co.jp/life/2009/10/11/lifestyle/japans-top-100-most-common-family-names/
2609 "jp": ["Sato","Suzuki","Takahashi","Tanaka","Watanabe","Ito","Yamamoto","Nakamura","Kobayashi","Kato","Yoshida","Yamada","Sasaki","Yamaguchi","Saito","Matsumoto","Inoue","Kimura","Hayashi","Shimizu","Yamazaki","Mori","Abe","Ikeda","Hashimoto","Yamashita","Ishikawa","Nakajima","Maeda","Fujita","Ogawa","Goto","Okada","Hasegawa","Murakami","Kondo","Ishii","Saito","Sakamoto","Endo","Aoki","Fujii","Nishimura","Fukuda","Ota","Miura","Fujiwara","Okamoto","Matsuda","Nakagawa","Nakano","Harada","Ono","Tamura","Takeuchi","Kaneko","Wada","Nakayama","Ishida","Ueda","Morita","Hara","Shibata","Sakai","Kudo","Yokoyama","Miyazaki","Miyamoto","Uchida","Takagi","Ando","Taniguchi","Ohno","Maruyama","Imai","Takada","Fujimoto","Takeda","Murata","Ueno","Sugiyama","Masuda","Sugawara","Hirano","Kojima","Otsuka","Chiba","Kubo","Matsui","Iwasaki","Sakurai","Kinoshita","Noguchi","Matsuo","Nomura","Kikuchi","Sano","Onishi","Sugimoto","Arai"],
2610 // http://www.lowchensaustralia.com/names/popular-spanish-names.htm
2611 "es": ["Garcia","Fernandez","Lopez","Martinez","Gonzalez","Rodriguez","Sanchez","Perez","Martin","Gomez","Ruiz","Diaz","Hernandez","Alvarez","Jimenez","Moreno","Munoz","Alonso","Romero","Navarro","Gutierrez","Torres","Dominguez","Gil","Vazquez","Blanco","Serrano","Ramos","Castro","Suarez","Sanz","Rubio","Ortega","Molina","Delgado","Ortiz","Morales","Ramirez","Marin","Iglesias","Santos","Castillo","Garrido","Calvo","Pena","Cruz","Cano","Nunez","Prieto","Diez","Lozano","Vidal","Pascual","Ferrer","Medina","Vega","Leon","Herrero","Vicente","Mendez","Guerrero","Fuentes","Campos","Nieto","Cortes","Caballero","Ibanez","Lorenzo","Pastor","Gimenez","Saez","Soler","Marquez","Carrasco","Herrera","Montero","Arias","Crespo","Flores","Andres","Aguilar","Hidalgo","Cabrera","Mora","Duran","Velasco","Rey","Pardo","Roman","Vila","Bravo","Merino","Moya","Soto","Izquierdo","Reyes","Redondo","Marcos","Carmona","Menendez"],
2612 // Data taken from https://fr.wikipedia.org/wiki/Liste_des_noms_de_famille_les_plus_courants_en_France
2613 "fr": ["Martin","Bernard","Thomas","Petit","Robert","Richard","Durand","Dubois","Moreau","Laurent","Simon","Michel","Lefèvre","Leroy","Roux","David","Bertrand","Morel","Fournier","Girard","Bonnet","Dupont","Lambert","Fontaine","Rousseau","Vincent","Müller","Lefèvre","Faure","André","Mercier","Blanc","Guérin","Boyer","Garnier","Chevalier","François","Legrand","Gauthier","Garcia","Perrin","Robin","Clément","Morin","Nicolas","Henry","Roussel","Matthieu","Gautier","Masson","Marchand","Duval","Denis","Dumont","Marie","Lemaire","Noël","Meyer","Dufour","Meunier","Brun","Blanchard","Giraud","Joly","Rivière","Lucas","Brunet","Gaillard","Barbier","Arnaud","Martínez","Gérard","Roche","Renard","Schmitt","Roy","Leroux","Colin","Vidal","Caron","Picard","Roger","Fabre","Aubert","Lemoine","Renaud","Dumas","Lacroix","Olivier","Philippe","Bourgeois","Pierre","Benoît","Rey","Leclerc","Payet","Rolland","Leclercq","Guillaume","Lecomte","López","Jean","Dupuy","Guillot","Hubert","Berger","Carpentier","Sánchez","Dupuis","Moulin","Louis","Deschamps","Huet","Vasseur","Perez","Boucher","Fleury","Royer","Klein","Jacquet","Adam","Paris","Poirier","Marty","Aubry","Guyot","Carré","Charles","Renault","Charpentier","Ménard","Maillard","Baron","Bertin","Bailly","Hervé","Schneider","Fernández","Le GallGall","Collet","Léger","Bouvier","Julien","Prévost","Millet","Perrot","Daniel","Le RouxRoux","Cousin","Germain","Breton","Besson","Langlois","Rémi","Le GoffGoff","Pelletier","Lévêque","Perrier","Leblanc","Barré","Lebrun","Marchal","Weber","Mallet","Hamon","Boulanger","Jacob","Monnier","Michaud","Rodríguez","Guichard","Gillet","Étienne","Grondin","Poulain","Tessier","Chevallier","Collin","Chauvin","Da SilvaSilva","Bouchet","Gay","Lemaître","Bénard","Maréchal","Humbert","Reynaud","Antoine","Hoarau","Perret","Barthélemy","Cordier","Pichon","Lejeune","Gilbert","Lamy","Delaunay","Pasquier","Carlier","LaporteLaporte"]
2614 },
2615
2616 // Data taken from http://geoportal.statistics.gov.uk/datasets/ons-postcode-directory-latest-centroids
2617 postcodeAreas: [{code: 'AB'}, {code: 'AL'}, {code: 'B'}, {code: 'BA'}, {code: 'BB'}, {code: 'BD'}, {code: 'BH'}, {code: 'BL'}, {code: 'BN'}, {code: 'BR'}, {code: 'BS'}, {code: 'BT'}, {code: 'CA'}, {code: 'CB'}, {code: 'CF'}, {code: 'CH'}, {code: 'CM'}, {code: 'CO'}, {code: 'CR'}, {code: 'CT'}, {code: 'CV'}, {code: 'CW'}, {code: 'DA'}, {code: 'DD'}, {code: 'DE'}, {code: 'DG'}, {code: 'DH'}, {code: 'DL'}, {code: 'DN'}, {code: 'DT'}, {code: 'DY'}, {code: 'E'}, {code: 'EC'}, {code: 'EH'}, {code: 'EN'}, {code: 'EX'}, {code: 'FK'}, {code: 'FY'}, {code: 'G'}, {code: 'GL'}, {code: 'GU'}, {code: 'GY'}, {code: 'HA'}, {code: 'HD'}, {code: 'HG'}, {code: 'HP'}, {code: 'HR'}, {code: 'HS'}, {code: 'HU'}, {code: 'HX'}, {code: 'IG'}, {code: 'IM'}, {code: 'IP'}, {code: 'IV'}, {code: 'JE'}, {code: 'KA'}, {code: 'KT'}, {code: 'KW'}, {code: 'KY'}, {code: 'L'}, {code: 'LA'}, {code: 'LD'}, {code: 'LE'}, {code: 'LL'}, {code: 'LN'}, {code: 'LS'}, {code: 'LU'}, {code: 'M'}, {code: 'ME'}, {code: 'MK'}, {code: 'ML'}, {code: 'N'}, {code: 'NE'}, {code: 'NG'}, {code: 'NN'}, {code: 'NP'}, {code: 'NR'}, {code: 'NW'}, {code: 'OL'}, {code: 'OX'}, {code: 'PA'}, {code: 'PE'}, {code: 'PH'}, {code: 'PL'}, {code: 'PO'}, {code: 'PR'}, {code: 'RG'}, {code: 'RH'}, {code: 'RM'}, {code: 'S'}, {code: 'SA'}, {code: 'SE'}, {code: 'SG'}, {code: 'SK'}, {code: 'SL'}, {code: 'SM'}, {code: 'SN'}, {code: 'SO'}, {code: 'SP'}, {code: 'SR'}, {code: 'SS'}, {code: 'ST'}, {code: 'SW'}, {code: 'SY'}, {code: 'TA'}, {code: 'TD'}, {code: 'TF'}, {code: 'TN'}, {code: 'TQ'}, {code: 'TR'}, {code: 'TS'}, {code: 'TW'}, {code: 'UB'}, {code: 'W'}, {code: 'WA'}, {code: 'WC'}, {code: 'WD'}, {code: 'WF'}, {code: 'WN'}, {code: 'WR'}, {code: 'WS'}, {code: 'WV'}, {code: 'YO'}, {code: 'ZE'}],
2618
2619 // Data taken from https://github.com/umpirsky/country-list/blob/master/data/en_US/country.json
2620 countries: [{"name":"Afghanistan","abbreviation":"AF"},{"name":"Åland Islands","abbreviation":"AX"},{"name":"Albania","abbreviation":"AL"},{"name":"Algeria","abbreviation":"DZ"},{"name":"American Samoa","abbreviation":"AS"},{"name":"Andorra","abbreviation":"AD"},{"name":"Angola","abbreviation":"AO"},{"name":"Anguilla","abbreviation":"AI"},{"name":"Antarctica","abbreviation":"AQ"},{"name":"Antigua & Barbuda","abbreviation":"AG"},{"name":"Argentina","abbreviation":"AR"},{"name":"Armenia","abbreviation":"AM"},{"name":"Aruba","abbreviation":"AW"},{"name":"Ascension Island","abbreviation":"AC"},{"name":"Australia","abbreviation":"AU"},{"name":"Austria","abbreviation":"AT"},{"name":"Azerbaijan","abbreviation":"AZ"},{"name":"Bahamas","abbreviation":"BS"},{"name":"Bahrain","abbreviation":"BH"},{"name":"Bangladesh","abbreviation":"BD"},{"name":"Barbados","abbreviation":"BB"},{"name":"Belarus","abbreviation":"BY"},{"name":"Belgium","abbreviation":"BE"},{"name":"Belize","abbreviation":"BZ"},{"name":"Benin","abbreviation":"BJ"},{"name":"Bermuda","abbreviation":"BM"},{"name":"Bhutan","abbreviation":"BT"},{"name":"Bolivia","abbreviation":"BO"},{"name":"Bosnia & Herzegovina","abbreviation":"BA"},{"name":"Botswana","abbreviation":"BW"},{"name":"Brazil","abbreviation":"BR"},{"name":"British Indian Ocean Territory","abbreviation":"IO"},{"name":"British Virgin Islands","abbreviation":"VG"},{"name":"Brunei","abbreviation":"BN"},{"name":"Bulgaria","abbreviation":"BG"},{"name":"Burkina Faso","abbreviation":"BF"},{"name":"Burundi","abbreviation":"BI"},{"name":"Cambodia","abbreviation":"KH"},{"name":"Cameroon","abbreviation":"CM"},{"name":"Canada","abbreviation":"CA"},{"name":"Canary Islands","abbreviation":"IC"},{"name":"Cape Verde","abbreviation":"CV"},{"name":"Caribbean Netherlands","abbreviation":"BQ"},{"name":"Cayman Islands","abbreviation":"KY"},{"name":"Central African Republic","abbreviation":"CF"},{"name":"Ceuta & Melilla","abbreviation":"EA"},{"name":"Chad","abbreviation":"TD"},{"name":"Chile","abbreviation":"CL"},{"name":"China","abbreviation":"CN"},{"name":"Christmas Island","abbreviation":"CX"},{"name":"Cocos (Keeling) Islands","abbreviation":"CC"},{"name":"Colombia","abbreviation":"CO"},{"name":"Comoros","abbreviation":"KM"},{"name":"Congo - Brazzaville","abbreviation":"CG"},{"name":"Congo - Kinshasa","abbreviation":"CD"},{"name":"Cook Islands","abbreviation":"CK"},{"name":"Costa Rica","abbreviation":"CR"},{"name":"Côte d'Ivoire","abbreviation":"CI"},{"name":"Croatia","abbreviation":"HR"},{"name":"Cuba","abbreviation":"CU"},{"name":"Curaçao","abbreviation":"CW"},{"name":"Cyprus","abbreviation":"CY"},{"name":"Czech Republic","abbreviation":"CZ"},{"name":"Denmark","abbreviation":"DK"},{"name":"Diego Garcia","abbreviation":"DG"},{"name":"Djibouti","abbreviation":"DJ"},{"name":"Dominica","abbreviation":"DM"},{"name":"Dominican Republic","abbreviation":"DO"},{"name":"Ecuador","abbreviation":"EC"},{"name":"Egypt","abbreviation":"EG"},{"name":"El Salvador","abbreviation":"SV"},{"name":"Equatorial Guinea","abbreviation":"GQ"},{"name":"Eritrea","abbreviation":"ER"},{"name":"Estonia","abbreviation":"EE"},{"name":"Ethiopia","abbreviation":"ET"},{"name":"Falkland Islands","abbreviation":"FK"},{"name":"Faroe Islands","abbreviation":"FO"},{"name":"Fiji","abbreviation":"FJ"},{"name":"Finland","abbreviation":"FI"},{"name":"France","abbreviation":"FR"},{"name":"French Guiana","abbreviation":"GF"},{"name":"French Polynesia","abbreviation":"PF"},{"name":"French Southern Territories","abbreviation":"TF"},{"name":"Gabon","abbreviation":"GA"},{"name":"Gambia","abbreviation":"GM"},{"name":"Georgia","abbreviation":"GE"},{"name":"Germany","abbreviation":"DE"},{"name":"Ghana","abbreviation":"GH"},{"name":"Gibraltar","abbreviation":"GI"},{"name":"Greece","abbreviation":"GR"},{"name":"Greenland","abbreviation":"GL"},{"name":"Grenada","abbreviation":"GD"},{"name":"Guadeloupe","abbreviation":"GP"},{"name":"Guam","abbreviation":"GU"},{"name":"Guatemala","abbreviation":"GT"},{"name":"Guernsey","abbreviation":"GG"},{"name":"Guinea","abbreviation":"GN"},{"name":"Guinea-Bissau","abbreviation":"GW"},{"name":"Guyana","abbreviation":"GY"},{"name":"Haiti","abbreviation":"HT"},{"name":"Honduras","abbreviation":"HN"},{"name":"Hong Kong SAR China","abbreviation":"HK"},{"name":"Hungary","abbreviation":"HU"},{"name":"Iceland","abbreviation":"IS"},{"name":"India","abbreviation":"IN"},{"name":"Indonesia","abbreviation":"ID"},{"name":"Iran","abbreviation":"IR"},{"name":"Iraq","abbreviation":"IQ"},{"name":"Ireland","abbreviation":"IE"},{"name":"Isle of Man","abbreviation":"IM"},{"name":"Israel","abbreviation":"IL"},{"name":"Italy","abbreviation":"IT"},{"name":"Jamaica","abbreviation":"JM"},{"name":"Japan","abbreviation":"JP"},{"name":"Jersey","abbreviation":"JE"},{"name":"Jordan","abbreviation":"JO"},{"name":"Kazakhstan","abbreviation":"KZ"},{"name":"Kenya","abbreviation":"KE"},{"name":"Kiribati","abbreviation":"KI"},{"name":"Kosovo","abbreviation":"XK"},{"name":"Kuwait","abbreviation":"KW"},{"name":"Kyrgyzstan","abbreviation":"KG"},{"name":"Laos","abbreviation":"LA"},{"name":"Latvia","abbreviation":"LV"},{"name":"Lebanon","abbreviation":"LB"},{"name":"Lesotho","abbreviation":"LS"},{"name":"Liberia","abbreviation":"LR"},{"name":"Libya","abbreviation":"LY"},{"name":"Liechtenstein","abbreviation":"LI"},{"name":"Lithuania","abbreviation":"LT"},{"name":"Luxembourg","abbreviation":"LU"},{"name":"Macau SAR China","abbreviation":"MO"},{"name":"Macedonia","abbreviation":"MK"},{"name":"Madagascar","abbreviation":"MG"},{"name":"Malawi","abbreviation":"MW"},{"name":"Malaysia","abbreviation":"MY"},{"name":"Maldives","abbreviation":"MV"},{"name":"Mali","abbreviation":"ML"},{"name":"Malta","abbreviation":"MT"},{"name":"Marshall Islands","abbreviation":"MH"},{"name":"Martinique","abbreviation":"MQ"},{"name":"Mauritania","abbreviation":"MR"},{"name":"Mauritius","abbreviation":"MU"},{"name":"Mayotte","abbreviation":"YT"},{"name":"Mexico","abbreviation":"MX"},{"name":"Micronesia","abbreviation":"FM"},{"name":"Moldova","abbreviation":"MD"},{"name":"Monaco","abbreviation":"MC"},{"name":"Mongolia","abbreviation":"MN"},{"name":"Montenegro","abbreviation":"ME"},{"name":"Montserrat","abbreviation":"MS"},{"name":"Morocco","abbreviation":"MA"},{"name":"Mozambique","abbreviation":"MZ"},{"name":"Myanmar (Burma)","abbreviation":"MM"},{"name":"Namibia","abbreviation":"NA"},{"name":"Nauru","abbreviation":"NR"},{"name":"Nepal","abbreviation":"NP"},{"name":"Netherlands","abbreviation":"NL"},{"name":"New Caledonia","abbreviation":"NC"},{"name":"New Zealand","abbreviation":"NZ"},{"name":"Nicaragua","abbreviation":"NI"},{"name":"Niger","abbreviation":"NE"},{"name":"Nigeria","abbreviation":"NG"},{"name":"Niue","abbreviation":"NU"},{"name":"Norfolk Island","abbreviation":"NF"},{"name":"North Korea","abbreviation":"KP"},{"name":"Northern Mariana Islands","abbreviation":"MP"},{"name":"Norway","abbreviation":"NO"},{"name":"Oman","abbreviation":"OM"},{"name":"Pakistan","abbreviation":"PK"},{"name":"Palau","abbreviation":"PW"},{"name":"Palestinian Territories","abbreviation":"PS"},{"name":"Panama","abbreviation":"PA"},{"name":"Papua New Guinea","abbreviation":"PG"},{"name":"Paraguay","abbreviation":"PY"},{"name":"Peru","abbreviation":"PE"},{"name":"Philippines","abbreviation":"PH"},{"name":"Pitcairn Islands","abbreviation":"PN"},{"name":"Poland","abbreviation":"PL"},{"name":"Portugal","abbreviation":"PT"},{"name":"Puerto Rico","abbreviation":"PR"},{"name":"Qatar","abbreviation":"QA"},{"name":"Réunion","abbreviation":"RE"},{"name":"Romania","abbreviation":"RO"},{"name":"Russia","abbreviation":"RU"},{"name":"Rwanda","abbreviation":"RW"},{"name":"Samoa","abbreviation":"WS"},{"name":"San Marino","abbreviation":"SM"},{"name":"São Tomé and Príncipe","abbreviation":"ST"},{"name":"Saudi Arabia","abbreviation":"SA"},{"name":"Senegal","abbreviation":"SN"},{"name":"Serbia","abbreviation":"RS"},{"name":"Seychelles","abbreviation":"SC"},{"name":"Sierra Leone","abbreviation":"SL"},{"name":"Singapore","abbreviation":"SG"},{"name":"Sint Maarten","abbreviation":"SX"},{"name":"Slovakia","abbreviation":"SK"},{"name":"Slovenia","abbreviation":"SI"},{"name":"Solomon Islands","abbreviation":"SB"},{"name":"Somalia","abbreviation":"SO"},{"name":"South Africa","abbreviation":"ZA"},{"name":"South Georgia & South Sandwich Islands","abbreviation":"GS"},{"name":"South Korea","abbreviation":"KR"},{"name":"South Sudan","abbreviation":"SS"},{"name":"Spain","abbreviation":"ES"},{"name":"Sri Lanka","abbreviation":"LK"},{"name":"St. Barthélemy","abbreviation":"BL"},{"name":"St. Helena","abbreviation":"SH"},{"name":"St. Kitts & Nevis","abbreviation":"KN"},{"name":"St. Lucia","abbreviation":"LC"},{"name":"St. Martin","abbreviation":"MF"},{"name":"St. Pierre & Miquelon","abbreviation":"PM"},{"name":"St. Vincent & Grenadines","abbreviation":"VC"},{"name":"Sudan","abbreviation":"SD"},{"name":"Suriname","abbreviation":"SR"},{"name":"Svalbard & Jan Mayen","abbreviation":"SJ"},{"name":"Swaziland","abbreviation":"SZ"},{"name":"Sweden","abbreviation":"SE"},{"name":"Switzerland","abbreviation":"CH"},{"name":"Syria","abbreviation":"SY"},{"name":"Taiwan","abbreviation":"TW"},{"name":"Tajikistan","abbreviation":"TJ"},{"name":"Tanzania","abbreviation":"TZ"},{"name":"Thailand","abbreviation":"TH"},{"name":"Timor-Leste","abbreviation":"TL"},{"name":"Togo","abbreviation":"TG"},{"name":"Tokelau","abbreviation":"TK"},{"name":"Tonga","abbreviation":"TO"},{"name":"Trinidad & Tobago","abbreviation":"TT"},{"name":"Tristan da Cunha","abbreviation":"TA"},{"name":"Tunisia","abbreviation":"TN"},{"name":"Turkey","abbreviation":"TR"},{"name":"Turkmenistan","abbreviation":"TM"},{"name":"Turks & Caicos Islands","abbreviation":"TC"},{"name":"Tuvalu","abbreviation":"TV"},{"name":"U.S. Outlying Islands","abbreviation":"UM"},{"name":"U.S. Virgin Islands","abbreviation":"VI"},{"name":"Uganda","abbreviation":"UG"},{"name":"Ukraine","abbreviation":"UA"},{"name":"United Arab Emirates","abbreviation":"AE"},{"name":"United Kingdom","abbreviation":"GB"},{"name":"United States","abbreviation":"US"},{"name":"Uruguay","abbreviation":"UY"},{"name":"Uzbekistan","abbreviation":"UZ"},{"name":"Vanuatu","abbreviation":"VU"},{"name":"Vatican City","abbreviation":"VA"},{"name":"Venezuela","abbreviation":"VE"},{"name":"Vietnam","abbreviation":"VN"},{"name":"Wallis & Futuna","abbreviation":"WF"},{"name":"Western Sahara","abbreviation":"EH"},{"name":"Yemen","abbreviation":"YE"},{"name":"Zambia","abbreviation":"ZM"},{"name":"Zimbabwe","abbreviation":"ZW"}],
2621
2622 counties: {
2623 // Data taken from http://www.downloadexcelfiles.com/gb_en/download-excel-file-list-counties-uk
2624 "uk": [
2625 {name: 'Bath and North East Somerset'},
2626 {name: 'Aberdeenshire'},
2627 {name: 'Anglesey'},
2628 {name: 'Angus'},
2629 {name: 'Bedford'},
2630 {name: 'Blackburn with Darwen'},
2631 {name: 'Blackpool'},
2632 {name: 'Bournemouth'},
2633 {name: 'Bracknell Forest'},
2634 {name: 'Brighton & Hove'},
2635 {name: 'Bristol'},
2636 {name: 'Buckinghamshire'},
2637 {name: 'Cambridgeshire'},
2638 {name: 'Carmarthenshire'},
2639 {name: 'Central Bedfordshire'},
2640 {name: 'Ceredigion'},
2641 {name: 'Cheshire East'},
2642 {name: 'Cheshire West and Chester'},
2643 {name: 'Clackmannanshire'},
2644 {name: 'Conwy'},
2645 {name: 'Cornwall'},
2646 {name: 'County Antrim'},
2647 {name: 'County Armagh'},
2648 {name: 'County Down'},
2649 {name: 'County Durham'},
2650 {name: 'County Fermanagh'},
2651 {name: 'County Londonderry'},
2652 {name: 'County Tyrone'},
2653 {name: 'Cumbria'},
2654 {name: 'Darlington'},
2655 {name: 'Denbighshire'},
2656 {name: 'Derby'},
2657 {name: 'Derbyshire'},
2658 {name: 'Devon'},
2659 {name: 'Dorset'},
2660 {name: 'Dumfries and Galloway'},
2661 {name: 'Dundee'},
2662 {name: 'East Lothian'},
2663 {name: 'East Riding of Yorkshire'},
2664 {name: 'East Sussex'},
2665 {name: 'Edinburgh?'},
2666 {name: 'Essex'},
2667 {name: 'Falkirk'},
2668 {name: 'Fife'},
2669 {name: 'Flintshire'},
2670 {name: 'Gloucestershire'},
2671 {name: 'Greater London'},
2672 {name: 'Greater Manchester'},
2673 {name: 'Gwent'},
2674 {name: 'Gwynedd'},
2675 {name: 'Halton'},
2676 {name: 'Hampshire'},
2677 {name: 'Hartlepool'},
2678 {name: 'Herefordshire'},
2679 {name: 'Hertfordshire'},
2680 {name: 'Highlands'},
2681 {name: 'Hull'},
2682 {name: 'Isle of Wight'},
2683 {name: 'Isles of Scilly'},
2684 {name: 'Kent'},
2685 {name: 'Lancashire'},
2686 {name: 'Leicester'},
2687 {name: 'Leicestershire'},
2688 {name: 'Lincolnshire'},
2689 {name: 'Lothian'},
2690 {name: 'Luton'},
2691 {name: 'Medway'},
2692 {name: 'Merseyside'},
2693 {name: 'Mid Glamorgan'},
2694 {name: 'Middlesbrough'},
2695 {name: 'Milton Keynes'},
2696 {name: 'Monmouthshire'},
2697 {name: 'Moray'},
2698 {name: 'Norfolk'},
2699 {name: 'North East Lincolnshire'},
2700 {name: 'North Lincolnshire'},
2701 {name: 'North Somerset'},
2702 {name: 'North Yorkshire'},
2703 {name: 'Northamptonshire'},
2704 {name: 'Northumberland'},
2705 {name: 'Nottingham'},
2706 {name: 'Nottinghamshire'},
2707 {name: 'Oxfordshire'},
2708 {name: 'Pembrokeshire'},
2709 {name: 'Perth and Kinross'},
2710 {name: 'Peterborough'},
2711 {name: 'Plymouth'},
2712 {name: 'Poole'},
2713 {name: 'Portsmouth'},
2714 {name: 'Powys'},
2715 {name: 'Reading'},
2716 {name: 'Redcar and Cleveland'},
2717 {name: 'Rutland'},
2718 {name: 'Scottish Borders'},
2719 {name: 'Shropshire'},
2720 {name: 'Slough'},
2721 {name: 'Somerset'},
2722 {name: 'South Glamorgan'},
2723 {name: 'South Gloucestershire'},
2724 {name: 'South Yorkshire'},
2725 {name: 'Southampton'},
2726 {name: 'Southend-on-Sea'},
2727 {name: 'Staffordshire'},
2728 {name: 'Stirlingshire'},
2729 {name: 'Stockton-on-Tees'},
2730 {name: 'Stoke-on-Trent'},
2731 {name: 'Strathclyde'},
2732 {name: 'Suffolk'},
2733 {name: 'Surrey'},
2734 {name: 'Swindon'},
2735 {name: 'Telford and Wrekin'},
2736 {name: 'Thurrock'},
2737 {name: 'Torbay'},
2738 {name: 'Tyne and Wear'},
2739 {name: 'Warrington'},
2740 {name: 'Warwickshire'},
2741 {name: 'West Berkshire'},
2742 {name: 'West Glamorgan'},
2743 {name: 'West Lothian'},
2744 {name: 'West Midlands'},
2745 {name: 'West Sussex'},
2746 {name: 'West Yorkshire'},
2747 {name: 'Western Isles'},
2748 {name: 'Wiltshire'},
2749 {name: 'Windsor and Maidenhead'},
2750 {name: 'Wokingham'},
2751 {name: 'Worcestershire'},
2752 {name: 'Wrexham'},
2753 {name: 'York'}]
2754 },
2755 provinces: {
2756 "ca": [
2757 {name: 'Alberta', abbreviation: 'AB'},
2758 {name: 'British Columbia', abbreviation: 'BC'},
2759 {name: 'Manitoba', abbreviation: 'MB'},
2760 {name: 'New Brunswick', abbreviation: 'NB'},
2761 {name: 'Newfoundland and Labrador', abbreviation: 'NL'},
2762 {name: 'Nova Scotia', abbreviation: 'NS'},
2763 {name: 'Ontario', abbreviation: 'ON'},
2764 {name: 'Prince Edward Island', abbreviation: 'PE'},
2765 {name: 'Quebec', abbreviation: 'QC'},
2766 {name: 'Saskatchewan', abbreviation: 'SK'},
2767
2768 // The case could be made that the following are not actually provinces
2769 // since they are technically considered "territories" however they all
2770 // look the same on an envelope!
2771 {name: 'Northwest Territories', abbreviation: 'NT'},
2772 {name: 'Nunavut', abbreviation: 'NU'},
2773 {name: 'Yukon', abbreviation: 'YT'}
2774 ],
2775 "it": [
2776 { name: "Agrigento", abbreviation: "AG", code: 84 },
2777 { name: "Alessandria", abbreviation: "AL", code: 6 },
2778 { name: "Ancona", abbreviation: "AN", code: 42 },
2779 { name: "Aosta", abbreviation: "AO", code: 7 },
2780 { name: "L'Aquila", abbreviation: "AQ", code: 66 },
2781 { name: "Arezzo", abbreviation: "AR", code: 51 },
2782 { name: "Ascoli-Piceno", abbreviation: "AP", code: 44 },
2783 { name: "Asti", abbreviation: "AT", code: 5 },
2784 { name: "Avellino", abbreviation: "AV", code: 64 },
2785 { name: "Bari", abbreviation: "BA", code: 72 },
2786 { name: "Barletta-Andria-Trani", abbreviation: "BT", code: 72 },
2787 { name: "Belluno", abbreviation: "BL", code: 25 },
2788 { name: "Benevento", abbreviation: "BN", code: 62 },
2789 { name: "Bergamo", abbreviation: "BG", code: 16 },
2790 { name: "Biella", abbreviation: "BI", code: 96 },
2791 { name: "Bologna", abbreviation: "BO", code: 37 },
2792 { name: "Bolzano", abbreviation: "BZ", code: 21 },
2793 { name: "Brescia", abbreviation: "BS", code: 17 },
2794 { name: "Brindisi", abbreviation: "BR", code: 74 },
2795 { name: "Cagliari", abbreviation: "CA", code: 92 },
2796 { name: "Caltanissetta", abbreviation: "CL", code: 85 },
2797 { name: "Campobasso", abbreviation: "CB", code: 70 },
2798 { name: "Carbonia Iglesias", abbreviation: "CI", code: 70 },
2799 { name: "Caserta", abbreviation: "CE", code: 61 },
2800 { name: "Catania", abbreviation: "CT", code: 87 },
2801 { name: "Catanzaro", abbreviation: "CZ", code: 79 },
2802 { name: "Chieti", abbreviation: "CH", code: 69 },
2803 { name: "Como", abbreviation: "CO", code: 13 },
2804 { name: "Cosenza", abbreviation: "CS", code: 78 },
2805 { name: "Cremona", abbreviation: "CR", code: 19 },
2806 { name: "Crotone", abbreviation: "KR", code: 101 },
2807 { name: "Cuneo", abbreviation: "CN", code: 4 },
2808 { name: "Enna", abbreviation: "EN", code: 86 },
2809 { name: "Fermo", abbreviation: "FM", code: 86 },
2810 { name: "Ferrara", abbreviation: "FE", code: 38 },
2811 { name: "Firenze", abbreviation: "FI", code: 48 },
2812 { name: "Foggia", abbreviation: "FG", code: 71 },
2813 { name: "Forli-Cesena", abbreviation: "FC", code: 71 },
2814 { name: "Frosinone", abbreviation: "FR", code: 60 },
2815 { name: "Genova", abbreviation: "GE", code: 10 },
2816 { name: "Gorizia", abbreviation: "GO", code: 31 },
2817 { name: "Grosseto", abbreviation: "GR", code: 53 },
2818 { name: "Imperia", abbreviation: "IM", code: 8 },
2819 { name: "Isernia", abbreviation: "IS", code: 94 },
2820 { name: "La-Spezia", abbreviation: "SP", code: 66 },
2821 { name: "Latina", abbreviation: "LT", code: 59 },
2822 { name: "Lecce", abbreviation: "LE", code: 75 },
2823 { name: "Lecco", abbreviation: "LC", code: 97 },
2824 { name: "Livorno", abbreviation: "LI", code: 49 },
2825 { name: "Lodi", abbreviation: "LO", code: 98 },
2826 { name: "Lucca", abbreviation: "LU", code: 46 },
2827 { name: "Macerata", abbreviation: "MC", code: 43 },
2828 { name: "Mantova", abbreviation: "MN", code: 20 },
2829 { name: "Massa-Carrara", abbreviation: "MS", code: 45 },
2830 { name: "Matera", abbreviation: "MT", code: 77 },
2831 { name: "Medio Campidano", abbreviation: "VS", code: 77 },
2832 { name: "Messina", abbreviation: "ME", code: 83 },
2833 { name: "Milano", abbreviation: "MI", code: 15 },
2834 { name: "Modena", abbreviation: "MO", code: 36 },
2835 { name: "Monza-Brianza", abbreviation: "MB", code: 36 },
2836 { name: "Napoli", abbreviation: "NA", code: 63 },
2837 { name: "Novara", abbreviation: "NO", code: 3 },
2838 { name: "Nuoro", abbreviation: "NU", code: 91 },
2839 { name: "Ogliastra", abbreviation: "OG", code: 91 },
2840 { name: "Olbia Tempio", abbreviation: "OT", code: 91 },
2841 { name: "Oristano", abbreviation: "OR", code: 95 },
2842 { name: "Padova", abbreviation: "PD", code: 28 },
2843 { name: "Palermo", abbreviation: "PA", code: 82 },
2844 { name: "Parma", abbreviation: "PR", code: 34 },
2845 { name: "Pavia", abbreviation: "PV", code: 18 },
2846 { name: "Perugia", abbreviation: "PG", code: 54 },
2847 { name: "Pesaro-Urbino", abbreviation: "PU", code: 41 },
2848 { name: "Pescara", abbreviation: "PE", code: 68 },
2849 { name: "Piacenza", abbreviation: "PC", code: 33 },
2850 { name: "Pisa", abbreviation: "PI", code: 50 },
2851 { name: "Pistoia", abbreviation: "PT", code: 47 },
2852 { name: "Pordenone", abbreviation: "PN", code: 93 },
2853 { name: "Potenza", abbreviation: "PZ", code: 76 },
2854 { name: "Prato", abbreviation: "PO", code: 100 },
2855 { name: "Ragusa", abbreviation: "RG", code: 88 },
2856 { name: "Ravenna", abbreviation: "RA", code: 39 },
2857 { name: "Reggio-Calabria", abbreviation: "RC", code: 35 },
2858 { name: "Reggio-Emilia", abbreviation: "RE", code: 35 },
2859 { name: "Rieti", abbreviation: "RI", code: 57 },
2860 { name: "Rimini", abbreviation: "RN", code: 99 },
2861 { name: "Roma", abbreviation: "Roma", code: 58 },
2862 { name: "Rovigo", abbreviation: "RO", code: 29 },
2863 { name: "Salerno", abbreviation: "SA", code: 65 },
2864 { name: "Sassari", abbreviation: "SS", code: 90 },
2865 { name: "Savona", abbreviation: "SV", code: 9 },
2866 { name: "Siena", abbreviation: "SI", code: 52 },
2867 { name: "Siracusa", abbreviation: "SR", code: 89 },
2868 { name: "Sondrio", abbreviation: "SO", code: 14 },
2869 { name: "Taranto", abbreviation: "TA", code: 73 },
2870 { name: "Teramo", abbreviation: "TE", code: 67 },
2871 { name: "Terni", abbreviation: "TR", code: 55 },
2872 { name: "Torino", abbreviation: "TO", code: 1 },
2873 { name: "Trapani", abbreviation: "TP", code: 81 },
2874 { name: "Trento", abbreviation: "TN", code: 22 },
2875 { name: "Treviso", abbreviation: "TV", code: 26 },
2876 { name: "Trieste", abbreviation: "TS", code: 32 },
2877 { name: "Udine", abbreviation: "UD", code: 30 },
2878 { name: "Varese", abbreviation: "VA", code: 12 },
2879 { name: "Venezia", abbreviation: "VE", code: 27 },
2880 { name: "Verbania", abbreviation: "VB", code: 27 },
2881 { name: "Vercelli", abbreviation: "VC", code: 2 },
2882 { name: "Verona", abbreviation: "VR", code: 23 },
2883 { name: "Vibo-Valentia", abbreviation: "VV", code: 102 },
2884 { name: "Vicenza", abbreviation: "VI", code: 24 },
2885 { name: "Viterbo", abbreviation: "VT", code: 56 }
2886 ]
2887 },
2888
2889 // from: https://github.com/samsargent/Useful-Autocomplete-Data/blob/master/data/nationalities.json
2890 nationalities: [
2891 {name: 'Afghan'},
2892 {name: 'Albanian'},
2893 {name: 'Algerian'},
2894 {name: 'American'},
2895 {name: 'Andorran'},
2896 {name: 'Angolan'},
2897 {name: 'Antiguans'},
2898 {name: 'Argentinean'},
2899 {name: 'Armenian'},
2900 {name: 'Australian'},
2901 {name: 'Austrian'},
2902 {name: 'Azerbaijani'},
2903 {name: 'Bahami'},
2904 {name: 'Bahraini'},
2905 {name: 'Bangladeshi'},
2906 {name: 'Barbadian'},
2907 {name: 'Barbudans'},
2908 {name: 'Batswana'},
2909 {name: 'Belarusian'},
2910 {name: 'Belgian'},
2911 {name: 'Belizean'},
2912 {name: 'Beninese'},
2913 {name: 'Bhutanese'},
2914 {name: 'Bolivian'},
2915 {name: 'Bosnian'},
2916 {name: 'Brazilian'},
2917 {name: 'British'},
2918 {name: 'Bruneian'},
2919 {name: 'Bulgarian'},
2920 {name: 'Burkinabe'},
2921 {name: 'Burmese'},
2922 {name: 'Burundian'},
2923 {name: 'Cambodian'},
2924 {name: 'Cameroonian'},
2925 {name: 'Canadian'},
2926 {name: 'Cape Verdean'},
2927 {name: 'Central African'},
2928 {name: 'Chadian'},
2929 {name: 'Chilean'},
2930 {name: 'Chinese'},
2931 {name: 'Colombian'},
2932 {name: 'Comoran'},
2933 {name: 'Congolese'},
2934 {name: 'Costa Rican'},
2935 {name: 'Croatian'},
2936 {name: 'Cuban'},
2937 {name: 'Cypriot'},
2938 {name: 'Czech'},
2939 {name: 'Danish'},
2940 {name: 'Djibouti'},
2941 {name: 'Dominican'},
2942 {name: 'Dutch'},
2943 {name: 'East Timorese'},
2944 {name: 'Ecuadorean'},
2945 {name: 'Egyptian'},
2946 {name: 'Emirian'},
2947 {name: 'Equatorial Guinean'},
2948 {name: 'Eritrean'},
2949 {name: 'Estonian'},
2950 {name: 'Ethiopian'},
2951 {name: 'Fijian'},
2952 {name: 'Filipino'},
2953 {name: 'Finnish'},
2954 {name: 'French'},
2955 {name: 'Gabonese'},
2956 {name: 'Gambian'},
2957 {name: 'Georgian'},
2958 {name: 'German'},
2959 {name: 'Ghanaian'},
2960 {name: 'Greek'},
2961 {name: 'Grenadian'},
2962 {name: 'Guatemalan'},
2963 {name: 'Guinea-Bissauan'},
2964 {name: 'Guinean'},
2965 {name: 'Guyanese'},
2966 {name: 'Haitian'},
2967 {name: 'Herzegovinian'},
2968 {name: 'Honduran'},
2969 {name: 'Hungarian'},
2970 {name: 'I-Kiribati'},
2971 {name: 'Icelander'},
2972 {name: 'Indian'},
2973 {name: 'Indonesian'},
2974 {name: 'Iranian'},
2975 {name: 'Iraqi'},
2976 {name: 'Irish'},
2977 {name: 'Israeli'},
2978 {name: 'Italian'},
2979 {name: 'Ivorian'},
2980 {name: 'Jamaican'},
2981 {name: 'Japanese'},
2982 {name: 'Jordanian'},
2983 {name: 'Kazakhstani'},
2984 {name: 'Kenyan'},
2985 {name: 'Kittian and Nevisian'},
2986 {name: 'Kuwaiti'},
2987 {name: 'Kyrgyz'},
2988 {name: 'Laotian'},
2989 {name: 'Latvian'},
2990 {name: 'Lebanese'},
2991 {name: 'Liberian'},
2992 {name: 'Libyan'},
2993 {name: 'Liechtensteiner'},
2994 {name: 'Lithuanian'},
2995 {name: 'Luxembourger'},
2996 {name: 'Macedonian'},
2997 {name: 'Malagasy'},
2998 {name: 'Malawian'},
2999 {name: 'Malaysian'},
3000 {name: 'Maldivan'},
3001 {name: 'Malian'},
3002 {name: 'Maltese'},
3003 {name: 'Marshallese'},
3004 {name: 'Mauritanian'},
3005 {name: 'Mauritian'},
3006 {name: 'Mexican'},
3007 {name: 'Micronesian'},
3008 {name: 'Moldovan'},
3009 {name: 'Monacan'},
3010 {name: 'Mongolian'},
3011 {name: 'Moroccan'},
3012 {name: 'Mosotho'},
3013 {name: 'Motswana'},
3014 {name: 'Mozambican'},
3015 {name: 'Namibian'},
3016 {name: 'Nauruan'},
3017 {name: 'Nepalese'},
3018 {name: 'New Zealander'},
3019 {name: 'Nicaraguan'},
3020 {name: 'Nigerian'},
3021 {name: 'Nigerien'},
3022 {name: 'North Korean'},
3023 {name: 'Northern Irish'},
3024 {name: 'Norwegian'},
3025 {name: 'Omani'},
3026 {name: 'Pakistani'},
3027 {name: 'Palauan'},
3028 {name: 'Panamanian'},
3029 {name: 'Papua New Guinean'},
3030 {name: 'Paraguayan'},
3031 {name: 'Peruvian'},
3032 {name: 'Polish'},
3033 {name: 'Portuguese'},
3034 {name: 'Qatari'},
3035 {name: 'Romani'},
3036 {name: 'Russian'},
3037 {name: 'Rwandan'},
3038 {name: 'Saint Lucian'},
3039 {name: 'Salvadoran'},
3040 {name: 'Samoan'},
3041 {name: 'San Marinese'},
3042 {name: 'Sao Tomean'},
3043 {name: 'Saudi'},
3044 {name: 'Scottish'},
3045 {name: 'Senegalese'},
3046 {name: 'Serbian'},
3047 {name: 'Seychellois'},
3048 {name: 'Sierra Leonean'},
3049 {name: 'Singaporean'},
3050 {name: 'Slovakian'},
3051 {name: 'Slovenian'},
3052 {name: 'Solomon Islander'},
3053 {name: 'Somali'},
3054 {name: 'South African'},
3055 {name: 'South Korean'},
3056 {name: 'Spanish'},
3057 {name: 'Sri Lankan'},
3058 {name: 'Sudanese'},
3059 {name: 'Surinamer'},
3060 {name: 'Swazi'},
3061 {name: 'Swedish'},
3062 {name: 'Swiss'},
3063 {name: 'Syrian'},
3064 {name: 'Taiwanese'},
3065 {name: 'Tajik'},
3066 {name: 'Tanzanian'},
3067 {name: 'Thai'},
3068 {name: 'Togolese'},
3069 {name: 'Tongan'},
3070 {name: 'Trinidadian or Tobagonian'},
3071 {name: 'Tunisian'},
3072 {name: 'Turkish'},
3073 {name: 'Tuvaluan'},
3074 {name: 'Ugandan'},
3075 {name: 'Ukrainian'},
3076 {name: 'Uruguaya'},
3077 {name: 'Uzbekistani'},
3078 {name: 'Venezuela'},
3079 {name: 'Vietnamese'},
3080 {name: 'Wels'},
3081 {name: 'Yemenit'},
3082 {name: 'Zambia'},
3083 {name: 'Zimbabwe'},
3084 ],
3085 // http://www.loc.gov/standards/iso639-2/php/code_list.php (ISO-639-1 codes)
3086 locale_languages: [
3087 "aa",
3088 "ab",
3089 "ae",
3090 "af",
3091 "ak",
3092 "am",
3093 "an",
3094 "ar",
3095 "as",
3096 "av",
3097 "ay",
3098 "az",
3099 "ba",
3100 "be",
3101 "bg",
3102 "bh",
3103 "bi",
3104 "bm",
3105 "bn",
3106 "bo",
3107 "br",
3108 "bs",
3109 "ca",
3110 "ce",
3111 "ch",
3112 "co",
3113 "cr",
3114 "cs",
3115 "cu",
3116 "cv",
3117 "cy",
3118 "da",
3119 "de",
3120 "dv",
3121 "dz",
3122 "ee",
3123 "el",
3124 "en",
3125 "eo",
3126 "es",
3127 "et",
3128 "eu",
3129 "fa",
3130 "ff",
3131 "fi",
3132 "fj",
3133 "fo",
3134 "fr",
3135 "fy",
3136 "ga",
3137 "gd",
3138 "gl",
3139 "gn",
3140 "gu",
3141 "gv",
3142 "ha",
3143 "he",
3144 "hi",
3145 "ho",
3146 "hr",
3147 "ht",
3148 "hu",
3149 "hy",
3150 "hz",
3151 "ia",
3152 "id",
3153 "ie",
3154 "ig",
3155 "ii",
3156 "ik",
3157 "io",
3158 "is",
3159 "it",
3160 "iu",
3161 "ja",
3162 "jv",
3163 "ka",
3164 "kg",
3165 "ki",
3166 "kj",
3167 "kk",
3168 "kl",
3169 "km",
3170 "kn",
3171 "ko",
3172 "kr",
3173 "ks",
3174 "ku",
3175 "kv",
3176 "kw",
3177 "ky",
3178 "la",
3179 "lb",
3180 "lg",
3181 "li",
3182 "ln",
3183 "lo",
3184 "lt",
3185 "lu",
3186 "lv",
3187 "mg",
3188 "mh",
3189 "mi",
3190 "mk",
3191 "ml",
3192 "mn",
3193 "mr",
3194 "ms",
3195 "mt",
3196 "my",
3197 "na",
3198 "nb",
3199 "nd",
3200 "ne",
3201 "ng",
3202 "nl",
3203 "nn",
3204 "no",
3205 "nr",
3206 "nv",
3207 "ny",
3208 "oc",
3209 "oj",
3210 "om",
3211 "or",
3212 "os",
3213 "pa",
3214 "pi",
3215 "pl",
3216 "ps",
3217 "pt",
3218 "qu",
3219 "rm",
3220 "rn",
3221 "ro",
3222 "ru",
3223 "rw",
3224 "sa",
3225 "sc",
3226 "sd",
3227 "se",
3228 "sg",
3229 "si",
3230 "sk",
3231 "sl",
3232 "sm",
3233 "sn",
3234 "so",
3235 "sq",
3236 "sr",
3237 "ss",
3238 "st",
3239 "su",
3240 "sv",
3241 "sw",
3242 "ta",
3243 "te",
3244 "tg",
3245 "th",
3246 "ti",
3247 "tk",
3248 "tl",
3249 "tn",
3250 "to",
3251 "tr",
3252 "ts",
3253 "tt",
3254 "tw",
3255 "ty",
3256 "ug",
3257 "uk",
3258 "ur",
3259 "uz",
3260 "ve",
3261 "vi",
3262 "vo",
3263 "wa",
3264 "wo",
3265 "xh",
3266 "yi",
3267 "yo",
3268 "za",
3269 "zh",
3270 "zu"
3271 ],
3272
3273 // From http://data.okfn.org/data/core/language-codes#resource-language-codes-full (IETF language tags)
3274 locale_regions: [
3275 "agq-CM",
3276 "asa-TZ",
3277 "ast-ES",
3278 "bas-CM",
3279 "bem-ZM",
3280 "bez-TZ",
3281 "brx-IN",
3282 "cgg-UG",
3283 "chr-US",
3284 "dav-KE",
3285 "dje-NE",
3286 "dsb-DE",
3287 "dua-CM",
3288 "dyo-SN",
3289 "ebu-KE",
3290 "ewo-CM",
3291 "fil-PH",
3292 "fur-IT",
3293 "gsw-CH",
3294 "gsw-FR",
3295 "gsw-LI",
3296 "guz-KE",
3297 "haw-US",
3298 "hsb-DE",
3299 "jgo-CM",
3300 "jmc-TZ",
3301 "kab-DZ",
3302 "kam-KE",
3303 "kde-TZ",
3304 "kea-CV",
3305 "khq-ML",
3306 "kkj-CM",
3307 "kln-KE",
3308 "kok-IN",
3309 "ksb-TZ",
3310 "ksf-CM",
3311 "ksh-DE",
3312 "lag-TZ",
3313 "lkt-US",
3314 "luo-KE",
3315 "luy-KE",
3316 "mas-KE",
3317 "mas-TZ",
3318 "mer-KE",
3319 "mfe-MU",
3320 "mgh-MZ",
3321 "mgo-CM",
3322 "mua-CM",
3323 "naq-NA",
3324 "nmg-CM",
3325 "nnh-CM",
3326 "nus-SD",
3327 "nyn-UG",
3328 "rof-TZ",
3329 "rwk-TZ",
3330 "sah-RU",
3331 "saq-KE",
3332 "sbp-TZ",
3333 "seh-MZ",
3334 "ses-ML",
3335 "shi-Latn",
3336 "shi-Latn-MA",
3337 "shi-Tfng",
3338 "shi-Tfng-MA",
3339 "smn-FI",
3340 "teo-KE",
3341 "teo-UG",
3342 "twq-NE",
3343 "tzm-Latn",
3344 "tzm-Latn-MA",
3345 "vai-Latn",
3346 "vai-Latn-LR",
3347 "vai-Vaii",
3348 "vai-Vaii-LR",
3349 "vun-TZ",
3350 "wae-CH",
3351 "xog-UG",
3352 "yav-CM",
3353 "zgh-MA",
3354 "af-NA",
3355 "af-ZA",
3356 "ak-GH",
3357 "am-ET",
3358 "ar-001",
3359 "ar-AE",
3360 "ar-BH",
3361 "ar-DJ",
3362 "ar-DZ",
3363 "ar-EG",
3364 "ar-EH",
3365 "ar-ER",
3366 "ar-IL",
3367 "ar-IQ",
3368 "ar-JO",
3369 "ar-KM",
3370 "ar-KW",
3371 "ar-LB",
3372 "ar-LY",
3373 "ar-MA",
3374 "ar-MR",
3375 "ar-OM",
3376 "ar-PS",
3377 "ar-QA",
3378 "ar-SA",
3379 "ar-SD",
3380 "ar-SO",
3381 "ar-SS",
3382 "ar-SY",
3383 "ar-TD",
3384 "ar-TN",
3385 "ar-YE",
3386 "as-IN",
3387 "az-Cyrl",
3388 "az-Cyrl-AZ",
3389 "az-Latn",
3390 "az-Latn-AZ",
3391 "be-BY",
3392 "bg-BG",
3393 "bm-Latn",
3394 "bm-Latn-ML",
3395 "bn-BD",
3396 "bn-IN",
3397 "bo-CN",
3398 "bo-IN",
3399 "br-FR",
3400 "bs-Cyrl",
3401 "bs-Cyrl-BA",
3402 "bs-Latn",
3403 "bs-Latn-BA",
3404 "ca-AD",
3405 "ca-ES",
3406 "ca-ES-VALENCIA",
3407 "ca-FR",
3408 "ca-IT",
3409 "cs-CZ",
3410 "cy-GB",
3411 "da-DK",
3412 "da-GL",
3413 "de-AT",
3414 "de-BE",
3415 "de-CH",
3416 "de-DE",
3417 "de-LI",
3418 "de-LU",
3419 "dz-BT",
3420 "ee-GH",
3421 "ee-TG",
3422 "el-CY",
3423 "el-GR",
3424 "en-001",
3425 "en-150",
3426 "en-AG",
3427 "en-AI",
3428 "en-AS",
3429 "en-AU",
3430 "en-BB",
3431 "en-BE",
3432 "en-BM",
3433 "en-BS",
3434 "en-BW",
3435 "en-BZ",
3436 "en-CA",
3437 "en-CC",
3438 "en-CK",
3439 "en-CM",
3440 "en-CX",
3441 "en-DG",
3442 "en-DM",
3443 "en-ER",
3444 "en-FJ",
3445 "en-FK",
3446 "en-FM",
3447 "en-GB",
3448 "en-GD",
3449 "en-GG",
3450 "en-GH",
3451 "en-GI",
3452 "en-GM",
3453 "en-GU",
3454 "en-GY",
3455 "en-HK",
3456 "en-IE",
3457 "en-IM",
3458 "en-IN",
3459 "en-IO",
3460 "en-JE",
3461 "en-JM",
3462 "en-KE",
3463 "en-KI",
3464 "en-KN",
3465 "en-KY",
3466 "en-LC",
3467 "en-LR",
3468 "en-LS",
3469 "en-MG",
3470 "en-MH",
3471 "en-MO",
3472 "en-MP",
3473 "en-MS",
3474 "en-MT",
3475 "en-MU",
3476 "en-MW",
3477 "en-MY",
3478 "en-NA",
3479 "en-NF",
3480 "en-NG",
3481 "en-NR",
3482 "en-NU",
3483 "en-NZ",
3484 "en-PG",
3485 "en-PH",
3486 "en-PK",
3487 "en-PN",
3488 "en-PR",
3489 "en-PW",
3490 "en-RW",
3491 "en-SB",
3492 "en-SC",
3493 "en-SD",
3494 "en-SG",
3495 "en-SH",
3496 "en-SL",
3497 "en-SS",
3498 "en-SX",
3499 "en-SZ",
3500 "en-TC",
3501 "en-TK",
3502 "en-TO",
3503 "en-TT",
3504 "en-TV",
3505 "en-TZ",
3506 "en-UG",
3507 "en-UM",
3508 "en-US",
3509 "en-US-POSIX",
3510 "en-VC",
3511 "en-VG",
3512 "en-VI",
3513 "en-VU",
3514 "en-WS",
3515 "en-ZA",
3516 "en-ZM",
3517 "en-ZW",
3518 "eo-001",
3519 "es-419",
3520 "es-AR",
3521 "es-BO",
3522 "es-CL",
3523 "es-CO",
3524 "es-CR",
3525 "es-CU",
3526 "es-DO",
3527 "es-EA",
3528 "es-EC",
3529 "es-ES",
3530 "es-GQ",
3531 "es-GT",
3532 "es-HN",
3533 "es-IC",
3534 "es-MX",
3535 "es-NI",
3536 "es-PA",
3537 "es-PE",
3538 "es-PH",
3539 "es-PR",
3540 "es-PY",
3541 "es-SV",
3542 "es-US",
3543 "es-UY",
3544 "es-VE",
3545 "et-EE",
3546 "eu-ES",
3547 "fa-AF",
3548 "fa-IR",
3549 "ff-CM",
3550 "ff-GN",
3551 "ff-MR",
3552 "ff-SN",
3553 "fi-FI",
3554 "fo-FO",
3555 "fr-BE",
3556 "fr-BF",
3557 "fr-BI",
3558 "fr-BJ",
3559 "fr-BL",
3560 "fr-CA",
3561 "fr-CD",
3562 "fr-CF",
3563 "fr-CG",
3564 "fr-CH",
3565 "fr-CI",
3566 "fr-CM",
3567 "fr-DJ",
3568 "fr-DZ",
3569 "fr-FR",
3570 "fr-GA",
3571 "fr-GF",
3572 "fr-GN",
3573 "fr-GP",
3574 "fr-GQ",
3575 "fr-HT",
3576 "fr-KM",
3577 "fr-LU",
3578 "fr-MA",
3579 "fr-MC",
3580 "fr-MF",
3581 "fr-MG",
3582 "fr-ML",
3583 "fr-MQ",
3584 "fr-MR",
3585 "fr-MU",
3586 "fr-NC",
3587 "fr-NE",
3588 "fr-PF",
3589 "fr-PM",
3590 "fr-RE",
3591 "fr-RW",
3592 "fr-SC",
3593 "fr-SN",
3594 "fr-SY",
3595 "fr-TD",
3596 "fr-TG",
3597 "fr-TN",
3598 "fr-VU",
3599 "fr-WF",
3600 "fr-YT",
3601 "fy-NL",
3602 "ga-IE",
3603 "gd-GB",
3604 "gl-ES",
3605 "gu-IN",
3606 "gv-IM",
3607 "ha-Latn",
3608 "ha-Latn-GH",
3609 "ha-Latn-NE",
3610 "ha-Latn-NG",
3611 "he-IL",
3612 "hi-IN",
3613 "hr-BA",
3614 "hr-HR",
3615 "hu-HU",
3616 "hy-AM",
3617 "id-ID",
3618 "ig-NG",
3619 "ii-CN",
3620 "is-IS",
3621 "it-CH",
3622 "it-IT",
3623 "it-SM",
3624 "ja-JP",
3625 "ka-GE",
3626 "ki-KE",
3627 "kk-Cyrl",
3628 "kk-Cyrl-KZ",
3629 "kl-GL",
3630 "km-KH",
3631 "kn-IN",
3632 "ko-KP",
3633 "ko-KR",
3634 "ks-Arab",
3635 "ks-Arab-IN",
3636 "kw-GB",
3637 "ky-Cyrl",
3638 "ky-Cyrl-KG",
3639 "lb-LU",
3640 "lg-UG",
3641 "ln-AO",
3642 "ln-CD",
3643 "ln-CF",
3644 "ln-CG",
3645 "lo-LA",
3646 "lt-LT",
3647 "lu-CD",
3648 "lv-LV",
3649 "mg-MG",
3650 "mk-MK",
3651 "ml-IN",
3652 "mn-Cyrl",
3653 "mn-Cyrl-MN",
3654 "mr-IN",
3655 "ms-Latn",
3656 "ms-Latn-BN",
3657 "ms-Latn-MY",
3658 "ms-Latn-SG",
3659 "mt-MT",
3660 "my-MM",
3661 "nb-NO",
3662 "nb-SJ",
3663 "nd-ZW",
3664 "ne-IN",
3665 "ne-NP",
3666 "nl-AW",
3667 "nl-BE",
3668 "nl-BQ",
3669 "nl-CW",
3670 "nl-NL",
3671 "nl-SR",
3672 "nl-SX",
3673 "nn-NO",
3674 "om-ET",
3675 "om-KE",
3676 "or-IN",
3677 "os-GE",
3678 "os-RU",
3679 "pa-Arab",
3680 "pa-Arab-PK",
3681 "pa-Guru",
3682 "pa-Guru-IN",
3683 "pl-PL",
3684 "ps-AF",
3685 "pt-AO",
3686 "pt-BR",
3687 "pt-CV",
3688 "pt-GW",
3689 "pt-MO",
3690 "pt-MZ",
3691 "pt-PT",
3692 "pt-ST",
3693 "pt-TL",
3694 "qu-BO",
3695 "qu-EC",
3696 "qu-PE",
3697 "rm-CH",
3698 "rn-BI",
3699 "ro-MD",
3700 "ro-RO",
3701 "ru-BY",
3702 "ru-KG",
3703 "ru-KZ",
3704 "ru-MD",
3705 "ru-RU",
3706 "ru-UA",
3707 "rw-RW",
3708 "se-FI",
3709 "se-NO",
3710 "se-SE",
3711 "sg-CF",
3712 "si-LK",
3713 "sk-SK",
3714 "sl-SI",
3715 "sn-ZW",
3716 "so-DJ",
3717 "so-ET",
3718 "so-KE",
3719 "so-SO",
3720 "sq-AL",
3721 "sq-MK",
3722 "sq-XK",
3723 "sr-Cyrl",
3724 "sr-Cyrl-BA",
3725 "sr-Cyrl-ME",
3726 "sr-Cyrl-RS",
3727 "sr-Cyrl-XK",
3728 "sr-Latn",
3729 "sr-Latn-BA",
3730 "sr-Latn-ME",
3731 "sr-Latn-RS",
3732 "sr-Latn-XK",
3733 "sv-AX",
3734 "sv-FI",
3735 "sv-SE",
3736 "sw-CD",
3737 "sw-KE",
3738 "sw-TZ",
3739 "sw-UG",
3740 "ta-IN",
3741 "ta-LK",
3742 "ta-MY",
3743 "ta-SG",
3744 "te-IN",
3745 "th-TH",
3746 "ti-ER",
3747 "ti-ET",
3748 "to-TO",
3749 "tr-CY",
3750 "tr-TR",
3751 "ug-Arab",
3752 "ug-Arab-CN",
3753 "uk-UA",
3754 "ur-IN",
3755 "ur-PK",
3756 "uz-Arab",
3757 "uz-Arab-AF",
3758 "uz-Cyrl",
3759 "uz-Cyrl-UZ",
3760 "uz-Latn",
3761 "uz-Latn-UZ",
3762 "vi-VN",
3763 "yi-001",
3764 "yo-BJ",
3765 "yo-NG",
3766 "zh-Hans",
3767 "zh-Hans-CN",
3768 "zh-Hans-HK",
3769 "zh-Hans-MO",
3770 "zh-Hans-SG",
3771 "zh-Hant",
3772 "zh-Hant-HK",
3773 "zh-Hant-MO",
3774 "zh-Hant-TW",
3775 "zu-ZA"
3776 ],
3777
3778 us_states_and_dc: [
3779 {name: 'Alabama', abbreviation: 'AL'},
3780 {name: 'Alaska', abbreviation: 'AK'},
3781 {name: 'Arizona', abbreviation: 'AZ'},
3782 {name: 'Arkansas', abbreviation: 'AR'},
3783 {name: 'California', abbreviation: 'CA'},
3784 {name: 'Colorado', abbreviation: 'CO'},
3785 {name: 'Connecticut', abbreviation: 'CT'},
3786 {name: 'Delaware', abbreviation: 'DE'},
3787 {name: 'District of Columbia', abbreviation: 'DC'},
3788 {name: 'Florida', abbreviation: 'FL'},
3789 {name: 'Georgia', abbreviation: 'GA'},
3790 {name: 'Hawaii', abbreviation: 'HI'},
3791 {name: 'Idaho', abbreviation: 'ID'},
3792 {name: 'Illinois', abbreviation: 'IL'},
3793 {name: 'Indiana', abbreviation: 'IN'},
3794 {name: 'Iowa', abbreviation: 'IA'},
3795 {name: 'Kansas', abbreviation: 'KS'},
3796 {name: 'Kentucky', abbreviation: 'KY'},
3797 {name: 'Louisiana', abbreviation: 'LA'},
3798 {name: 'Maine', abbreviation: 'ME'},
3799 {name: 'Maryland', abbreviation: 'MD'},
3800 {name: 'Massachusetts', abbreviation: 'MA'},
3801 {name: 'Michigan', abbreviation: 'MI'},
3802 {name: 'Minnesota', abbreviation: 'MN'},
3803 {name: 'Mississippi', abbreviation: 'MS'},
3804 {name: 'Missouri', abbreviation: 'MO'},
3805 {name: 'Montana', abbreviation: 'MT'},
3806 {name: 'Nebraska', abbreviation: 'NE'},
3807 {name: 'Nevada', abbreviation: 'NV'},
3808 {name: 'New Hampshire', abbreviation: 'NH'},
3809 {name: 'New Jersey', abbreviation: 'NJ'},
3810 {name: 'New Mexico', abbreviation: 'NM'},
3811 {name: 'New York', abbreviation: 'NY'},
3812 {name: 'North Carolina', abbreviation: 'NC'},
3813 {name: 'North Dakota', abbreviation: 'ND'},
3814 {name: 'Ohio', abbreviation: 'OH'},
3815 {name: 'Oklahoma', abbreviation: 'OK'},
3816 {name: 'Oregon', abbreviation: 'OR'},
3817 {name: 'Pennsylvania', abbreviation: 'PA'},
3818 {name: 'Rhode Island', abbreviation: 'RI'},
3819 {name: 'South Carolina', abbreviation: 'SC'},
3820 {name: 'South Dakota', abbreviation: 'SD'},
3821 {name: 'Tennessee', abbreviation: 'TN'},
3822 {name: 'Texas', abbreviation: 'TX'},
3823 {name: 'Utah', abbreviation: 'UT'},
3824 {name: 'Vermont', abbreviation: 'VT'},
3825 {name: 'Virginia', abbreviation: 'VA'},
3826 {name: 'Washington', abbreviation: 'WA'},
3827 {name: 'West Virginia', abbreviation: 'WV'},
3828 {name: 'Wisconsin', abbreviation: 'WI'},
3829 {name: 'Wyoming', abbreviation: 'WY'}
3830 ],
3831
3832 territories: [
3833 {name: 'American Samoa', abbreviation: 'AS'},
3834 {name: 'Federated States of Micronesia', abbreviation: 'FM'},
3835 {name: 'Guam', abbreviation: 'GU'},
3836 {name: 'Marshall Islands', abbreviation: 'MH'},
3837 {name: 'Northern Mariana Islands', abbreviation: 'MP'},
3838 {name: 'Puerto Rico', abbreviation: 'PR'},
3839 {name: 'Virgin Islands, U.S.', abbreviation: 'VI'}
3840 ],
3841
3842 armed_forces: [
3843 {name: 'Armed Forces Europe', abbreviation: 'AE'},
3844 {name: 'Armed Forces Pacific', abbreviation: 'AP'},
3845 {name: 'Armed Forces the Americas', abbreviation: 'AA'}
3846 ],
3847
3848 country_regions: {
3849 it: [
3850 { name: "Valle d'Aosta", abbreviation: "VDA" },
3851 { name: "Piemonte", abbreviation: "PIE" },
3852 { name: "Lombardia", abbreviation: "LOM" },
3853 { name: "Veneto", abbreviation: "VEN" },
3854 { name: "Trentino Alto Adige", abbreviation: "TAA" },
3855 { name: "Friuli Venezia Giulia", abbreviation: "FVG" },
3856 { name: "Liguria", abbreviation: "LIG" },
3857 { name: "Emilia Romagna", abbreviation: "EMR" },
3858 { name: "Toscana", abbreviation: "TOS" },
3859 { name: "Umbria", abbreviation: "UMB" },
3860 { name: "Marche", abbreviation: "MAR" },
3861 { name: "Abruzzo", abbreviation: "ABR" },
3862 { name: "Lazio", abbreviation: "LAZ" },
3863 { name: "Campania", abbreviation: "CAM" },
3864 { name: "Puglia", abbreviation: "PUG" },
3865 { name: "Basilicata", abbreviation: "BAS" },
3866 { name: "Molise", abbreviation: "MOL" },
3867 { name: "Calabria", abbreviation: "CAL" },
3868 { name: "Sicilia", abbreviation: "SIC" },
3869 { name: "Sardegna", abbreviation: "SAR" }
3870 ]
3871 },
3872
3873 street_suffixes: {
3874 'us': [
3875 {name: 'Avenue', abbreviation: 'Ave'},
3876 {name: 'Boulevard', abbreviation: 'Blvd'},
3877 {name: 'Center', abbreviation: 'Ctr'},
3878 {name: 'Circle', abbreviation: 'Cir'},
3879 {name: 'Court', abbreviation: 'Ct'},
3880 {name: 'Drive', abbreviation: 'Dr'},
3881 {name: 'Extension', abbreviation: 'Ext'},
3882 {name: 'Glen', abbreviation: 'Gln'},
3883 {name: 'Grove', abbreviation: 'Grv'},
3884 {name: 'Heights', abbreviation: 'Hts'},
3885 {name: 'Highway', abbreviation: 'Hwy'},
3886 {name: 'Junction', abbreviation: 'Jct'},
3887 {name: 'Key', abbreviation: 'Key'},
3888 {name: 'Lane', abbreviation: 'Ln'},
3889 {name: 'Loop', abbreviation: 'Loop'},
3890 {name: 'Manor', abbreviation: 'Mnr'},
3891 {name: 'Mill', abbreviation: 'Mill'},
3892 {name: 'Park', abbreviation: 'Park'},
3893 {name: 'Parkway', abbreviation: 'Pkwy'},
3894 {name: 'Pass', abbreviation: 'Pass'},
3895 {name: 'Path', abbreviation: 'Path'},
3896 {name: 'Pike', abbreviation: 'Pike'},
3897 {name: 'Place', abbreviation: 'Pl'},
3898 {name: 'Plaza', abbreviation: 'Plz'},
3899 {name: 'Point', abbreviation: 'Pt'},
3900 {name: 'Ridge', abbreviation: 'Rdg'},
3901 {name: 'River', abbreviation: 'Riv'},
3902 {name: 'Road', abbreviation: 'Rd'},
3903 {name: 'Square', abbreviation: 'Sq'},
3904 {name: 'Street', abbreviation: 'St'},
3905 {name: 'Terrace', abbreviation: 'Ter'},
3906 {name: 'Trail', abbreviation: 'Trl'},
3907 {name: 'Turnpike', abbreviation: 'Tpke'},
3908 {name: 'View', abbreviation: 'Vw'},
3909 {name: 'Way', abbreviation: 'Way'}
3910 ],
3911 'it': [
3912 { name: 'Accesso', abbreviation: 'Acc.' },
3913 { name: 'Alzaia', abbreviation: 'Alz.' },
3914 { name: 'Arco', abbreviation: 'Arco' },
3915 { name: 'Archivolto', abbreviation: 'Acv.' },
3916 { name: 'Arena', abbreviation: 'Arena' },
3917 { name: 'Argine', abbreviation: 'Argine' },
3918 { name: 'Bacino', abbreviation: 'Bacino' },
3919 { name: 'Banchi', abbreviation: 'Banchi' },
3920 { name: 'Banchina', abbreviation: 'Ban.' },
3921 { name: 'Bastioni', abbreviation: 'Bas.' },
3922 { name: 'Belvedere', abbreviation: 'Belv.' },
3923 { name: 'Borgata', abbreviation: 'B.ta' },
3924 { name: 'Borgo', abbreviation: 'B.go' },
3925 { name: 'Calata', abbreviation: 'Cal.' },
3926 { name: 'Calle', abbreviation: 'Calle' },
3927 { name: 'Campiello', abbreviation: 'Cam.' },
3928 { name: 'Campo', abbreviation: 'Cam.' },
3929 { name: 'Canale', abbreviation: 'Can.' },
3930 { name: 'Carraia', abbreviation: 'Carr.' },
3931 { name: 'Cascina', abbreviation: 'Cascina' },
3932 { name: 'Case sparse', abbreviation: 'c.s.' },
3933 { name: 'Cavalcavia', abbreviation: 'Cv.' },
3934 { name: 'Circonvallazione', abbreviation: 'Cv.' },
3935 { name: 'Complanare', abbreviation: 'C.re' },
3936 { name: 'Contrada', abbreviation: 'C.da' },
3937 { name: 'Corso', abbreviation: 'C.so' },
3938 { name: 'Corte', abbreviation: 'C.te' },
3939 { name: 'Cortile', abbreviation: 'C.le' },
3940 { name: 'Diramazione', abbreviation: 'Dir.' },
3941 { name: 'Fondaco', abbreviation: 'F.co' },
3942 { name: 'Fondamenta', abbreviation: 'F.ta' },
3943 { name: 'Fondo', abbreviation: 'F.do' },
3944 { name: 'Frazione', abbreviation: 'Fr.' },
3945 { name: 'Isola', abbreviation: 'Is.' },
3946 { name: 'Largo', abbreviation: 'L.go' },
3947 { name: 'Litoranea', abbreviation: 'Lit.' },
3948 { name: 'Lungolago', abbreviation: 'L.go lago' },
3949 { name: 'Lungo Po', abbreviation: 'l.go Po' },
3950 { name: 'Molo', abbreviation: 'Molo' },
3951 { name: 'Mura', abbreviation: 'Mura' },
3952 { name: 'Passaggio privato', abbreviation: 'pass. priv.' },
3953 { name: 'Passeggiata', abbreviation: 'Pass.' },
3954 { name: 'Piazza', abbreviation: 'P.zza' },
3955 { name: 'Piazzale', abbreviation: 'P.le' },
3956 { name: 'Ponte', abbreviation: 'P.te' },
3957 { name: 'Portico', abbreviation: 'P.co' },
3958 { name: 'Rampa', abbreviation: 'Rampa' },
3959 { name: 'Regione', abbreviation: 'Reg.' },
3960 { name: 'Rione', abbreviation: 'R.ne' },
3961 { name: 'Rio', abbreviation: 'Rio' },
3962 { name: 'Ripa', abbreviation: 'Ripa' },
3963 { name: 'Riva', abbreviation: 'Riva' },
3964 { name: 'Rondò', abbreviation: 'Rondò' },
3965 { name: 'Rotonda', abbreviation: 'Rot.' },
3966 { name: 'Sagrato', abbreviation: 'Sagr.' },
3967 { name: 'Salita', abbreviation: 'Sal.' },
3968 { name: 'Scalinata', abbreviation: 'Scal.' },
3969 { name: 'Scalone', abbreviation: 'Scal.' },
3970 { name: 'Slargo', abbreviation: 'Sl.' },
3971 { name: 'Sottoportico', abbreviation: 'Sott.' },
3972 { name: 'Strada', abbreviation: 'Str.' },
3973 { name: 'Stradale', abbreviation: 'Str.le' },
3974 { name: 'Strettoia', abbreviation: 'Strett.' },
3975 { name: 'Traversa', abbreviation: 'Trav.' },
3976 { name: 'Via', abbreviation: 'V.' },
3977 { name: 'Viale', abbreviation: 'V.le' },
3978 { name: 'Vicinale', abbreviation: 'Vic.le' },
3979 { name: 'Vicolo', abbreviation: 'Vic.' }
3980 ],
3981 'uk' : [
3982 {name: 'Avenue', abbreviation: 'Ave'},
3983 {name: 'Close', abbreviation: 'Cl'},
3984 {name: 'Court', abbreviation: 'Ct'},
3985 {name: 'Crescent', abbreviation: 'Cr'},
3986 {name: 'Drive', abbreviation: 'Dr'},
3987 {name: 'Garden', abbreviation: 'Gdn'},
3988 {name: 'Gardens', abbreviation: 'Gdns'},
3989 {name: 'Green', abbreviation: 'Gn'},
3990 {name: 'Grove', abbreviation: 'Gr'},
3991 {name: 'Lane', abbreviation: 'Ln'},
3992 {name: 'Mount', abbreviation: 'Mt'},
3993 {name: 'Place', abbreviation: 'Pl'},
3994 {name: 'Park', abbreviation: 'Pk'},
3995 {name: 'Ridge', abbreviation: 'Rdg'},
3996 {name: 'Road', abbreviation: 'Rd'},
3997 {name: 'Square', abbreviation: 'Sq'},
3998 {name: 'Street', abbreviation: 'St'},
3999 {name: 'Terrace', abbreviation: 'Ter'},
4000 {name: 'Valley', abbreviation: 'Val'}
4001 ]
4002 },
4003
4004 months: [
4005 {name: 'January', short_name: 'Jan', numeric: '01', days: 31},
4006 // Not messing with leap years...
4007 {name: 'February', short_name: 'Feb', numeric: '02', days: 28},
4008 {name: 'March', short_name: 'Mar', numeric: '03', days: 31},
4009 {name: 'April', short_name: 'Apr', numeric: '04', days: 30},
4010 {name: 'May', short_name: 'May', numeric: '05', days: 31},
4011 {name: 'June', short_name: 'Jun', numeric: '06', days: 30},
4012 {name: 'July', short_name: 'Jul', numeric: '07', days: 31},
4013 {name: 'August', short_name: 'Aug', numeric: '08', days: 31},
4014 {name: 'September', short_name: 'Sep', numeric: '09', days: 30},
4015 {name: 'October', short_name: 'Oct', numeric: '10', days: 31},
4016 {name: 'November', short_name: 'Nov', numeric: '11', days: 30},
4017 {name: 'December', short_name: 'Dec', numeric: '12', days: 31}
4018 ],
4019
4020 // http://en.wikipedia.org/wiki/Bank_card_number#Issuer_identification_number_.28IIN.29
4021 cc_types: [
4022 {name: "American Express", short_name: 'amex', prefix: '34', length: 15},
4023 {name: "Bankcard", short_name: 'bankcard', prefix: '5610', length: 16},
4024 {name: "China UnionPay", short_name: 'chinaunion', prefix: '62', length: 16},
4025 {name: "Diners Club Carte Blanche", short_name: 'dccarte', prefix: '300', length: 14},
4026 {name: "Diners Club enRoute", short_name: 'dcenroute', prefix: '2014', length: 15},
4027 {name: "Diners Club International", short_name: 'dcintl', prefix: '36', length: 14},
4028 {name: "Diners Club United States & Canada", short_name: 'dcusc', prefix: '54', length: 16},
4029 {name: "Discover Card", short_name: 'discover', prefix: '6011', length: 16},
4030 {name: "InstaPayment", short_name: 'instapay', prefix: '637', length: 16},
4031 {name: "JCB", short_name: 'jcb', prefix: '3528', length: 16},
4032 {name: "Laser", short_name: 'laser', prefix: '6304', length: 16},
4033 {name: "Maestro", short_name: 'maestro', prefix: '5018', length: 16},
4034 {name: "Mastercard", short_name: 'mc', prefix: '51', length: 16},
4035 {name: "Solo", short_name: 'solo', prefix: '6334', length: 16},
4036 {name: "Switch", short_name: 'switch', prefix: '4903', length: 16},
4037 {name: "Visa", short_name: 'visa', prefix: '4', length: 16},
4038 {name: "Visa Electron", short_name: 'electron', prefix: '4026', length: 16}
4039 ],
4040
4041 //return all world currency by ISO 4217
4042 currency_types: [
4043 {'code' : 'AED', 'name' : 'United Arab Emirates Dirham'},
4044 {'code' : 'AFN', 'name' : 'Afghanistan Afghani'},
4045 {'code' : 'ALL', 'name' : 'Albania Lek'},
4046 {'code' : 'AMD', 'name' : 'Armenia Dram'},
4047 {'code' : 'ANG', 'name' : 'Netherlands Antilles Guilder'},
4048 {'code' : 'AOA', 'name' : 'Angola Kwanza'},
4049 {'code' : 'ARS', 'name' : 'Argentina Peso'},
4050 {'code' : 'AUD', 'name' : 'Australia Dollar'},
4051 {'code' : 'AWG', 'name' : 'Aruba Guilder'},
4052 {'code' : 'AZN', 'name' : 'Azerbaijan New Manat'},
4053 {'code' : 'BAM', 'name' : 'Bosnia and Herzegovina Convertible Marka'},
4054 {'code' : 'BBD', 'name' : 'Barbados Dollar'},
4055 {'code' : 'BDT', 'name' : 'Bangladesh Taka'},
4056 {'code' : 'BGN', 'name' : 'Bulgaria Lev'},
4057 {'code' : 'BHD', 'name' : 'Bahrain Dinar'},
4058 {'code' : 'BIF', 'name' : 'Burundi Franc'},
4059 {'code' : 'BMD', 'name' : 'Bermuda Dollar'},
4060 {'code' : 'BND', 'name' : 'Brunei Darussalam Dollar'},
4061 {'code' : 'BOB', 'name' : 'Bolivia Boliviano'},
4062 {'code' : 'BRL', 'name' : 'Brazil Real'},
4063 {'code' : 'BSD', 'name' : 'Bahamas Dollar'},
4064 {'code' : 'BTN', 'name' : 'Bhutan Ngultrum'},
4065 {'code' : 'BWP', 'name' : 'Botswana Pula'},
4066 {'code' : 'BYR', 'name' : 'Belarus Ruble'},
4067 {'code' : 'BZD', 'name' : 'Belize Dollar'},
4068 {'code' : 'CAD', 'name' : 'Canada Dollar'},
4069 {'code' : 'CDF', 'name' : 'Congo/Kinshasa Franc'},
4070 {'code' : 'CHF', 'name' : 'Switzerland Franc'},
4071 {'code' : 'CLP', 'name' : 'Chile Peso'},
4072 {'code' : 'CNY', 'name' : 'China Yuan Renminbi'},
4073 {'code' : 'COP', 'name' : 'Colombia Peso'},
4074 {'code' : 'CRC', 'name' : 'Costa Rica Colon'},
4075 {'code' : 'CUC', 'name' : 'Cuba Convertible Peso'},
4076 {'code' : 'CUP', 'name' : 'Cuba Peso'},
4077 {'code' : 'CVE', 'name' : 'Cape Verde Escudo'},
4078 {'code' : 'CZK', 'name' : 'Czech Republic Koruna'},
4079 {'code' : 'DJF', 'name' : 'Djibouti Franc'},
4080 {'code' : 'DKK', 'name' : 'Denmark Krone'},
4081 {'code' : 'DOP', 'name' : 'Dominican Republic Peso'},
4082 {'code' : 'DZD', 'name' : 'Algeria Dinar'},
4083 {'code' : 'EGP', 'name' : 'Egypt Pound'},
4084 {'code' : 'ERN', 'name' : 'Eritrea Nakfa'},
4085 {'code' : 'ETB', 'name' : 'Ethiopia Birr'},
4086 {'code' : 'EUR', 'name' : 'Euro Member Countries'},
4087 {'code' : 'FJD', 'name' : 'Fiji Dollar'},
4088 {'code' : 'FKP', 'name' : 'Falkland Islands (Malvinas) Pound'},
4089 {'code' : 'GBP', 'name' : 'United Kingdom Pound'},
4090 {'code' : 'GEL', 'name' : 'Georgia Lari'},
4091 {'code' : 'GGP', 'name' : 'Guernsey Pound'},
4092 {'code' : 'GHS', 'name' : 'Ghana Cedi'},
4093 {'code' : 'GIP', 'name' : 'Gibraltar Pound'},
4094 {'code' : 'GMD', 'name' : 'Gambia Dalasi'},
4095 {'code' : 'GNF', 'name' : 'Guinea Franc'},
4096 {'code' : 'GTQ', 'name' : 'Guatemala Quetzal'},
4097 {'code' : 'GYD', 'name' : 'Guyana Dollar'},
4098 {'code' : 'HKD', 'name' : 'Hong Kong Dollar'},
4099 {'code' : 'HNL', 'name' : 'Honduras Lempira'},
4100 {'code' : 'HRK', 'name' : 'Croatia Kuna'},
4101 {'code' : 'HTG', 'name' : 'Haiti Gourde'},
4102 {'code' : 'HUF', 'name' : 'Hungary Forint'},
4103 {'code' : 'IDR', 'name' : 'Indonesia Rupiah'},
4104 {'code' : 'ILS', 'name' : 'Israel Shekel'},
4105 {'code' : 'IMP', 'name' : 'Isle of Man Pound'},
4106 {'code' : 'INR', 'name' : 'India Rupee'},
4107 {'code' : 'IQD', 'name' : 'Iraq Dinar'},
4108 {'code' : 'IRR', 'name' : 'Iran Rial'},
4109 {'code' : 'ISK', 'name' : 'Iceland Krona'},
4110 {'code' : 'JEP', 'name' : 'Jersey Pound'},
4111 {'code' : 'JMD', 'name' : 'Jamaica Dollar'},
4112 {'code' : 'JOD', 'name' : 'Jordan Dinar'},
4113 {'code' : 'JPY', 'name' : 'Japan Yen'},
4114 {'code' : 'KES', 'name' : 'Kenya Shilling'},
4115 {'code' : 'KGS', 'name' : 'Kyrgyzstan Som'},
4116 {'code' : 'KHR', 'name' : 'Cambodia Riel'},
4117 {'code' : 'KMF', 'name' : 'Comoros Franc'},
4118 {'code' : 'KPW', 'name' : 'Korea (North) Won'},
4119 {'code' : 'KRW', 'name' : 'Korea (South) Won'},
4120 {'code' : 'KWD', 'name' : 'Kuwait Dinar'},
4121 {'code' : 'KYD', 'name' : 'Cayman Islands Dollar'},
4122 {'code' : 'KZT', 'name' : 'Kazakhstan Tenge'},
4123 {'code' : 'LAK', 'name' : 'Laos Kip'},
4124 {'code' : 'LBP', 'name' : 'Lebanon Pound'},
4125 {'code' : 'LKR', 'name' : 'Sri Lanka Rupee'},
4126 {'code' : 'LRD', 'name' : 'Liberia Dollar'},
4127 {'code' : 'LSL', 'name' : 'Lesotho Loti'},
4128 {'code' : 'LTL', 'name' : 'Lithuania Litas'},
4129 {'code' : 'LYD', 'name' : 'Libya Dinar'},
4130 {'code' : 'MAD', 'name' : 'Morocco Dirham'},
4131 {'code' : 'MDL', 'name' : 'Moldova Leu'},
4132 {'code' : 'MGA', 'name' : 'Madagascar Ariary'},
4133 {'code' : 'MKD', 'name' : 'Macedonia Denar'},
4134 {'code' : 'MMK', 'name' : 'Myanmar (Burma) Kyat'},
4135 {'code' : 'MNT', 'name' : 'Mongolia Tughrik'},
4136 {'code' : 'MOP', 'name' : 'Macau Pataca'},
4137 {'code' : 'MRO', 'name' : 'Mauritania Ouguiya'},
4138 {'code' : 'MUR', 'name' : 'Mauritius Rupee'},
4139 {'code' : 'MVR', 'name' : 'Maldives (Maldive Islands) Rufiyaa'},
4140 {'code' : 'MWK', 'name' : 'Malawi Kwacha'},
4141 {'code' : 'MXN', 'name' : 'Mexico Peso'},
4142 {'code' : 'MYR', 'name' : 'Malaysia Ringgit'},
4143 {'code' : 'MZN', 'name' : 'Mozambique Metical'},
4144 {'code' : 'NAD', 'name' : 'Namibia Dollar'},
4145 {'code' : 'NGN', 'name' : 'Nigeria Naira'},
4146 {'code' : 'NIO', 'name' : 'Nicaragua Cordoba'},
4147 {'code' : 'NOK', 'name' : 'Norway Krone'},
4148 {'code' : 'NPR', 'name' : 'Nepal Rupee'},
4149 {'code' : 'NZD', 'name' : 'New Zealand Dollar'},
4150 {'code' : 'OMR', 'name' : 'Oman Rial'},
4151 {'code' : 'PAB', 'name' : 'Panama Balboa'},
4152 {'code' : 'PEN', 'name' : 'Peru Nuevo Sol'},
4153 {'code' : 'PGK', 'name' : 'Papua New Guinea Kina'},
4154 {'code' : 'PHP', 'name' : 'Philippines Peso'},
4155 {'code' : 'PKR', 'name' : 'Pakistan Rupee'},
4156 {'code' : 'PLN', 'name' : 'Poland Zloty'},
4157 {'code' : 'PYG', 'name' : 'Paraguay Guarani'},
4158 {'code' : 'QAR', 'name' : 'Qatar Riyal'},
4159 {'code' : 'RON', 'name' : 'Romania New Leu'},
4160 {'code' : 'RSD', 'name' : 'Serbia Dinar'},
4161 {'code' : 'RUB', 'name' : 'Russia Ruble'},
4162 {'code' : 'RWF', 'name' : 'Rwanda Franc'},
4163 {'code' : 'SAR', 'name' : 'Saudi Arabia Riyal'},
4164 {'code' : 'SBD', 'name' : 'Solomon Islands Dollar'},
4165 {'code' : 'SCR', 'name' : 'Seychelles Rupee'},
4166 {'code' : 'SDG', 'name' : 'Sudan Pound'},
4167 {'code' : 'SEK', 'name' : 'Sweden Krona'},
4168 {'code' : 'SGD', 'name' : 'Singapore Dollar'},
4169 {'code' : 'SHP', 'name' : 'Saint Helena Pound'},
4170 {'code' : 'SLL', 'name' : 'Sierra Leone Leone'},
4171 {'code' : 'SOS', 'name' : 'Somalia Shilling'},
4172 {'code' : 'SPL', 'name' : 'Seborga Luigino'},
4173 {'code' : 'SRD', 'name' : 'Suriname Dollar'},
4174 {'code' : 'STD', 'name' : 'São Tomé and Príncipe Dobra'},
4175 {'code' : 'SVC', 'name' : 'El Salvador Colon'},
4176 {'code' : 'SYP', 'name' : 'Syria Pound'},
4177 {'code' : 'SZL', 'name' : 'Swaziland Lilangeni'},
4178 {'code' : 'THB', 'name' : 'Thailand Baht'},
4179 {'code' : 'TJS', 'name' : 'Tajikistan Somoni'},
4180 {'code' : 'TMT', 'name' : 'Turkmenistan Manat'},
4181 {'code' : 'TND', 'name' : 'Tunisia Dinar'},
4182 {'code' : 'TOP', 'name' : 'Tonga Pa\'anga'},
4183 {'code' : 'TRY', 'name' : 'Turkey Lira'},
4184 {'code' : 'TTD', 'name' : 'Trinidad and Tobago Dollar'},
4185 {'code' : 'TVD', 'name' : 'Tuvalu Dollar'},
4186 {'code' : 'TWD', 'name' : 'Taiwan New Dollar'},
4187 {'code' : 'TZS', 'name' : 'Tanzania Shilling'},
4188 {'code' : 'UAH', 'name' : 'Ukraine Hryvnia'},
4189 {'code' : 'UGX', 'name' : 'Uganda Shilling'},
4190 {'code' : 'USD', 'name' : 'United States Dollar'},
4191 {'code' : 'UYU', 'name' : 'Uruguay Peso'},
4192 {'code' : 'UZS', 'name' : 'Uzbekistan Som'},
4193 {'code' : 'VEF', 'name' : 'Venezuela Bolivar'},
4194 {'code' : 'VND', 'name' : 'Viet Nam Dong'},
4195 {'code' : 'VUV', 'name' : 'Vanuatu Vatu'},
4196 {'code' : 'WST', 'name' : 'Samoa Tala'},
4197 {'code' : 'XAF', 'name' : 'Communauté Financière Africaine (BEAC) CFA Franc BEAC'},
4198 {'code' : 'XCD', 'name' : 'East Caribbean Dollar'},
4199 {'code' : 'XDR', 'name' : 'International Monetary Fund (IMF) Special Drawing Rights'},
4200 {'code' : 'XOF', 'name' : 'Communauté Financière Africaine (BCEAO) Franc'},
4201 {'code' : 'XPF', 'name' : 'Comptoirs Français du Pacifique (CFP) Franc'},
4202 {'code' : 'YER', 'name' : 'Yemen Rial'},
4203 {'code' : 'ZAR', 'name' : 'South Africa Rand'},
4204 {'code' : 'ZMW', 'name' : 'Zambia Kwacha'},
4205 {'code' : 'ZWD', 'name' : 'Zimbabwe Dollar'}
4206 ],
4207
4208 // return the names of all valide colors
4209 colorNames : [ "AliceBlue", "Black", "Navy", "DarkBlue", "MediumBlue", "Blue", "DarkGreen", "Green", "Teal", "DarkCyan", "DeepSkyBlue", "DarkTurquoise", "MediumSpringGreen", "Lime", "SpringGreen",
4210 "Aqua", "Cyan", "MidnightBlue", "DodgerBlue", "LightSeaGreen", "ForestGreen", "SeaGreen", "DarkSlateGray", "LimeGreen", "MediumSeaGreen", "Turquoise", "RoyalBlue", "SteelBlue", "DarkSlateBlue", "MediumTurquoise",
4211 "Indigo", "DarkOliveGreen", "CadetBlue", "CornflowerBlue", "RebeccaPurple", "MediumAquaMarine", "DimGray", "SlateBlue", "OliveDrab", "SlateGray", "LightSlateGray", "MediumSlateBlue", "LawnGreen", "Chartreuse",
4212 "Aquamarine", "Maroon", "Purple", "Olive", "Gray", "SkyBlue", "LightSkyBlue", "BlueViolet", "DarkRed", "DarkMagenta", "SaddleBrown", "Ivory", "White",
4213 "DarkSeaGreen", "LightGreen", "MediumPurple", "DarkViolet", "PaleGreen", "DarkOrchid", "YellowGreen", "Sienna", "Brown", "DarkGray", "LightBlue", "GreenYellow", "PaleTurquoise", "LightSteelBlue", "PowderBlue",
4214 "FireBrick", "DarkGoldenRod", "MediumOrchid", "RosyBrown", "DarkKhaki", "Silver", "MediumVioletRed", "IndianRed", "Peru", "Chocolate", "Tan", "LightGray", "Thistle", "Orchid", "GoldenRod", "PaleVioletRed",
4215 "Crimson", "Gainsboro", "Plum", "BurlyWood", "LightCyan", "Lavender", "DarkSalmon", "Violet", "PaleGoldenRod", "LightCoral", "Khaki", "AliceBlue", "HoneyDew", "Azure", "SandyBrown", "Wheat", "Beige", "WhiteSmoke",
4216 "MintCream", "GhostWhite", "Salmon", "AntiqueWhite", "Linen", "LightGoldenRodYellow", "OldLace", "Red", "Fuchsia", "Magenta", "DeepPink", "OrangeRed", "Tomato", "HotPink", "Coral", "DarkOrange", "LightSalmon", "Orange",
4217 "LightPink", "Pink", "Gold", "PeachPuff", "NavajoWhite", "Moccasin", "Bisque", "MistyRose", "BlanchedAlmond", "PapayaWhip", "LavenderBlush", "SeaShell", "Cornsilk", "LemonChiffon", "FloralWhite", "Snow", "Yellow", "LightYellow"
4218 ],
4219
4220 // Data taken from https://www.sec.gov/rules/other/4-460list.htm
4221 company: [ "3Com Corp",
4222 "3M Company",
4223 "A.G. Edwards Inc.",
4224 "Abbott Laboratories",
4225 "Abercrombie & Fitch Co.",
4226 "ABM Industries Incorporated",
4227 "Ace Hardware Corporation",
4228 "ACT Manufacturing Inc.",
4229 "Acterna Corp.",
4230 "Adams Resources & Energy, Inc.",
4231 "ADC Telecommunications, Inc.",
4232 "Adelphia Communications Corporation",
4233 "Administaff, Inc.",
4234 "Adobe Systems Incorporated",
4235 "Adolph Coors Company",
4236 "Advance Auto Parts, Inc.",
4237 "Advanced Micro Devices, Inc.",
4238 "AdvancePCS, Inc.",
4239 "Advantica Restaurant Group, Inc.",
4240 "The AES Corporation",
4241 "Aetna Inc.",
4242 "Affiliated Computer Services, Inc.",
4243 "AFLAC Incorporated",
4244 "AGCO Corporation",
4245 "Agilent Technologies, Inc.",
4246 "Agway Inc.",
4247 "Apartment Investment and Management Company",
4248 "Air Products and Chemicals, Inc.",
4249 "Airborne, Inc.",
4250 "Airgas, Inc.",
4251 "AK Steel Holding Corporation",
4252 "Alaska Air Group, Inc.",
4253 "Alberto-Culver Company",
4254 "Albertson's, Inc.",
4255 "Alcoa Inc.",
4256 "Alleghany Corporation",
4257 "Allegheny Energy, Inc.",
4258 "Allegheny Technologies Incorporated",
4259 "Allergan, Inc.",
4260 "ALLETE, Inc.",
4261 "Alliant Energy Corporation",
4262 "Allied Waste Industries, Inc.",
4263 "Allmerica Financial Corporation",
4264 "The Allstate Corporation",
4265 "ALLTEL Corporation",
4266 "The Alpine Group, Inc.",
4267 "Amazon.com, Inc.",
4268 "AMC Entertainment Inc.",
4269 "American Power Conversion Corporation",
4270 "Amerada Hess Corporation",
4271 "AMERCO",
4272 "Ameren Corporation",
4273 "America West Holdings Corporation",
4274 "American Axle & Manufacturing Holdings, Inc.",
4275 "American Eagle Outfitters, Inc.",
4276 "American Electric Power Company, Inc.",
4277 "American Express Company",
4278 "American Financial Group, Inc.",
4279 "American Greetings Corporation",
4280 "American International Group, Inc.",
4281 "American Standard Companies Inc.",
4282 "American Water Works Company, Inc.",
4283 "AmerisourceBergen Corporation",
4284 "Ames Department Stores, Inc.",
4285 "Amgen Inc.",
4286 "Amkor Technology, Inc.",
4287 "AMR Corporation",
4288 "AmSouth Bancorp.",
4289 "Amtran, Inc.",
4290 "Anadarko Petroleum Corporation",
4291 "Analog Devices, Inc.",
4292 "Anheuser-Busch Companies, Inc.",
4293 "Anixter International Inc.",
4294 "AnnTaylor Inc.",
4295 "Anthem, Inc.",
4296 "AOL Time Warner Inc.",
4297 "Aon Corporation",
4298 "Apache Corporation",
4299 "Apple Computer, Inc.",
4300 "Applera Corporation",
4301 "Applied Industrial Technologies, Inc.",
4302 "Applied Materials, Inc.",
4303 "Aquila, Inc.",
4304 "ARAMARK Corporation",
4305 "Arch Coal, Inc.",
4306 "Archer Daniels Midland Company",
4307 "Arkansas Best Corporation",
4308 "Armstrong Holdings, Inc.",
4309 "Arrow Electronics, Inc.",
4310 "ArvinMeritor, Inc.",
4311 "Ashland Inc.",
4312 "Astoria Financial Corporation",
4313 "AT&T Corp.",
4314 "Atmel Corporation",
4315 "Atmos Energy Corporation",
4316 "Audiovox Corporation",
4317 "Autoliv, Inc.",
4318 "Automatic Data Processing, Inc.",
4319 "AutoNation, Inc.",
4320 "AutoZone, Inc.",
4321 "Avaya Inc.",
4322 "Avery Dennison Corporation",
4323 "Avista Corporation",
4324 "Avnet, Inc.",
4325 "Avon Products, Inc.",
4326 "Baker Hughes Incorporated",
4327 "Ball Corporation",
4328 "Bank of America Corporation",
4329 "The Bank of New York Company, Inc.",
4330 "Bank One Corporation",
4331 "Banknorth Group, Inc.",
4332 "Banta Corporation",
4333 "Barnes & Noble, Inc.",
4334 "Bausch & Lomb Incorporated",
4335 "Baxter International Inc.",
4336 "BB&T Corporation",
4337 "The Bear Stearns Companies Inc.",
4338 "Beazer Homes USA, Inc.",
4339 "Beckman Coulter, Inc.",
4340 "Becton, Dickinson and Company",
4341 "Bed Bath & Beyond Inc.",
4342 "Belk, Inc.",
4343 "Bell Microproducts Inc.",
4344 "BellSouth Corporation",
4345 "Belo Corp.",
4346 "Bemis Company, Inc.",
4347 "Benchmark Electronics, Inc.",
4348 "Berkshire Hathaway Inc.",
4349 "Best Buy Co., Inc.",
4350 "Bethlehem Steel Corporation",
4351 "Beverly Enterprises, Inc.",
4352 "Big Lots, Inc.",
4353 "BJ Services Company",
4354 "BJ's Wholesale Club, Inc.",
4355 "The Black & Decker Corporation",
4356 "Black Hills Corporation",
4357 "BMC Software, Inc.",
4358 "The Boeing Company",
4359 "Boise Cascade Corporation",
4360 "Borders Group, Inc.",
4361 "BorgWarner Inc.",
4362 "Boston Scientific Corporation",
4363 "Bowater Incorporated",
4364 "Briggs & Stratton Corporation",
4365 "Brightpoint, Inc.",
4366 "Brinker International, Inc.",
4367 "Bristol-Myers Squibb Company",
4368 "Broadwing, Inc.",
4369 "Brown Shoe Company, Inc.",
4370 "Brown-Forman Corporation",
4371 "Brunswick Corporation",
4372 "Budget Group, Inc.",
4373 "Burlington Coat Factory Warehouse Corporation",
4374 "Burlington Industries, Inc.",
4375 "Burlington Northern Santa Fe Corporation",
4376 "Burlington Resources Inc.",
4377 "C. H. Robinson Worldwide Inc.",
4378 "Cablevision Systems Corp",
4379 "Cabot Corp",
4380 "Cadence Design Systems, Inc.",
4381 "Calpine Corp.",
4382 "Campbell Soup Co.",
4383 "Capital One Financial Corp.",
4384 "Cardinal Health Inc.",
4385 "Caremark Rx Inc.",
4386 "Carlisle Cos. Inc.",
4387 "Carpenter Technology Corp.",
4388 "Casey's General Stores Inc.",
4389 "Caterpillar Inc.",
4390 "CBRL Group Inc.",
4391 "CDI Corp.",
4392 "CDW Computer Centers Inc.",
4393 "CellStar Corp.",
4394 "Cendant Corp",
4395 "Cenex Harvest States Cooperatives",
4396 "Centex Corp.",
4397 "CenturyTel Inc.",
4398 "Ceridian Corp.",
4399 "CH2M Hill Cos. Ltd.",
4400 "Champion Enterprises Inc.",
4401 "Charles Schwab Corp.",
4402 "Charming Shoppes Inc.",
4403 "Charter Communications Inc.",
4404 "Charter One Financial Inc.",
4405 "ChevronTexaco Corp.",
4406 "Chiquita Brands International Inc.",
4407 "Chubb Corp",
4408 "Ciena Corp.",
4409 "Cigna Corp",
4410 "Cincinnati Financial Corp.",
4411 "Cinergy Corp.",
4412 "Cintas Corp.",
4413 "Circuit City Stores Inc.",
4414 "Cisco Systems Inc.",
4415 "Citigroup, Inc",
4416 "Citizens Communications Co.",
4417 "CKE Restaurants Inc.",
4418 "Clear Channel Communications Inc.",
4419 "The Clorox Co.",
4420 "CMGI Inc.",
4421 "CMS Energy Corp.",
4422 "CNF Inc.",
4423 "Coca-Cola Co.",
4424 "Coca-Cola Enterprises Inc.",
4425 "Colgate-Palmolive Co.",
4426 "Collins & Aikman Corp.",
4427 "Comcast Corp.",
4428 "Comdisco Inc.",
4429 "Comerica Inc.",
4430 "Comfort Systems USA Inc.",
4431 "Commercial Metals Co.",
4432 "Community Health Systems Inc.",
4433 "Compass Bancshares Inc",
4434 "Computer Associates International Inc.",
4435 "Computer Sciences Corp.",
4436 "Compuware Corp.",
4437 "Comverse Technology Inc.",
4438 "ConAgra Foods Inc.",
4439 "Concord EFS Inc.",
4440 "Conectiv, Inc",
4441 "Conoco Inc",
4442 "Conseco Inc.",
4443 "Consolidated Freightways Corp.",
4444 "Consolidated Edison Inc.",
4445 "Constellation Brands Inc.",
4446 "Constellation Emergy Group Inc.",
4447 "Continental Airlines Inc.",
4448 "Convergys Corp.",
4449 "Cooper Cameron Corp.",
4450 "Cooper Industries Ltd.",
4451 "Cooper Tire & Rubber Co.",
4452 "Corn Products International Inc.",
4453 "Corning Inc.",
4454 "Costco Wholesale Corp.",
4455 "Countrywide Credit Industries Inc.",
4456 "Coventry Health Care Inc.",
4457 "Cox Communications Inc.",
4458 "Crane Co.",
4459 "Crompton Corp.",
4460 "Crown Cork & Seal Co. Inc.",
4461 "CSK Auto Corp.",
4462 "CSX Corp.",
4463 "Cummins Inc.",
4464 "CVS Corp.",
4465 "Cytec Industries Inc.",
4466 "D&K Healthcare Resources, Inc.",
4467 "D.R. Horton Inc.",
4468 "Dana Corporation",
4469 "Danaher Corporation",
4470 "Darden Restaurants Inc.",
4471 "DaVita Inc.",
4472 "Dean Foods Company",
4473 "Deere & Company",
4474 "Del Monte Foods Co",
4475 "Dell Computer Corporation",
4476 "Delphi Corp.",
4477 "Delta Air Lines Inc.",
4478 "Deluxe Corporation",
4479 "Devon Energy Corporation",
4480 "Di Giorgio Corporation",
4481 "Dial Corporation",
4482 "Diebold Incorporated",
4483 "Dillard's Inc.",
4484 "DIMON Incorporated",
4485 "Dole Food Company, Inc.",
4486 "Dollar General Corporation",
4487 "Dollar Tree Stores, Inc.",
4488 "Dominion Resources, Inc.",
4489 "Domino's Pizza LLC",
4490 "Dover Corporation, Inc.",
4491 "Dow Chemical Company",
4492 "Dow Jones & Company, Inc.",
4493 "DPL Inc.",
4494 "DQE Inc.",
4495 "Dreyer's Grand Ice Cream, Inc.",
4496 "DST Systems, Inc.",
4497 "DTE Energy Co.",
4498 "E.I. Du Pont de Nemours and Company",
4499 "Duke Energy Corp",
4500 "Dun & Bradstreet Inc.",
4501 "DURA Automotive Systems Inc.",
4502 "DynCorp",
4503 "Dynegy Inc.",
4504 "E*Trade Group, Inc.",
4505 "E.W. Scripps Company",
4506 "Earthlink, Inc.",
4507 "Eastman Chemical Company",
4508 "Eastman Kodak Company",
4509 "Eaton Corporation",
4510 "Echostar Communications Corporation",
4511 "Ecolab Inc.",
4512 "Edison International",
4513 "EGL Inc.",
4514 "El Paso Corporation",
4515 "Electronic Arts Inc.",
4516 "Electronic Data Systems Corp.",
4517 "Eli Lilly and Company",
4518 "EMC Corporation",
4519 "Emcor Group Inc.",
4520 "Emerson Electric Co.",
4521 "Encompass Services Corporation",
4522 "Energizer Holdings Inc.",
4523 "Energy East Corporation",
4524 "Engelhard Corporation",
4525 "Enron Corp.",
4526 "Entergy Corporation",
4527 "Enterprise Products Partners L.P.",
4528 "EOG Resources, Inc.",
4529 "Equifax Inc.",
4530 "Equitable Resources Inc.",
4531 "Equity Office Properties Trust",
4532 "Equity Residential Properties Trust",
4533 "Estee Lauder Companies Inc.",
4534 "Exelon Corporation",
4535 "Exide Technologies",
4536 "Expeditors International of Washington Inc.",
4537 "Express Scripts Inc.",
4538 "ExxonMobil Corporation",
4539 "Fairchild Semiconductor International Inc.",
4540 "Family Dollar Stores Inc.",
4541 "Farmland Industries Inc.",
4542 "Federal Mogul Corp.",
4543 "Federated Department Stores Inc.",
4544 "Federal Express Corp.",
4545 "Felcor Lodging Trust Inc.",
4546 "Ferro Corp.",
4547 "Fidelity National Financial Inc.",
4548 "Fifth Third Bancorp",
4549 "First American Financial Corp.",
4550 "First Data Corp.",
4551 "First National of Nebraska Inc.",
4552 "First Tennessee National Corp.",
4553 "FirstEnergy Corp.",
4554 "Fiserv Inc.",
4555 "Fisher Scientific International Inc.",
4556 "FleetBoston Financial Co.",
4557 "Fleetwood Enterprises Inc.",
4558 "Fleming Companies Inc.",
4559 "Flowers Foods Inc.",
4560 "Flowserv Corp",
4561 "Fluor Corp",
4562 "FMC Corp",
4563 "Foamex International Inc",
4564 "Foot Locker Inc",
4565 "Footstar Inc.",
4566 "Ford Motor Co",
4567 "Forest Laboratories Inc.",
4568 "Fortune Brands Inc.",
4569 "Foster Wheeler Ltd.",
4570 "FPL Group Inc.",
4571 "Franklin Resources Inc.",
4572 "Freeport McMoran Copper & Gold Inc.",
4573 "Frontier Oil Corp",
4574 "Furniture Brands International Inc.",
4575 "Gannett Co., Inc.",
4576 "Gap Inc.",
4577 "Gateway Inc.",
4578 "GATX Corporation",
4579 "Gemstar-TV Guide International Inc.",
4580 "GenCorp Inc.",
4581 "General Cable Corporation",
4582 "General Dynamics Corporation",
4583 "General Electric Company",
4584 "General Mills Inc",
4585 "General Motors Corporation",
4586 "Genesis Health Ventures Inc.",
4587 "Gentek Inc.",
4588 "Gentiva Health Services Inc.",
4589 "Genuine Parts Company",
4590 "Genuity Inc.",
4591 "Genzyme Corporation",
4592 "Georgia Gulf Corporation",
4593 "Georgia-Pacific Corporation",
4594 "Gillette Company",
4595 "Gold Kist Inc.",
4596 "Golden State Bancorp Inc.",
4597 "Golden West Financial Corporation",
4598 "Goldman Sachs Group Inc.",
4599 "Goodrich Corporation",
4600 "The Goodyear Tire & Rubber Company",
4601 "Granite Construction Incorporated",
4602 "Graybar Electric Company Inc.",
4603 "Great Lakes Chemical Corporation",
4604 "Great Plains Energy Inc.",
4605 "GreenPoint Financial Corp.",
4606 "Greif Bros. Corporation",
4607 "Grey Global Group Inc.",
4608 "Group 1 Automotive Inc.",
4609 "Guidant Corporation",
4610 "H&R Block Inc.",
4611 "H.B. Fuller Company",
4612 "H.J. Heinz Company",
4613 "Halliburton Co.",
4614 "Harley-Davidson Inc.",
4615 "Harman International Industries Inc.",
4616 "Harrah's Entertainment Inc.",
4617 "Harris Corp.",
4618 "Harsco Corp.",
4619 "Hartford Financial Services Group Inc.",
4620 "Hasbro Inc.",
4621 "Hawaiian Electric Industries Inc.",
4622 "HCA Inc.",
4623 "Health Management Associates Inc.",
4624 "Health Net Inc.",
4625 "Healthsouth Corp",
4626 "Henry Schein Inc.",
4627 "Hercules Inc.",
4628 "Herman Miller Inc.",
4629 "Hershey Foods Corp.",
4630 "Hewlett-Packard Company",
4631 "Hibernia Corp.",
4632 "Hillenbrand Industries Inc.",
4633 "Hilton Hotels Corp.",
4634 "Hollywood Entertainment Corp.",
4635 "Home Depot Inc.",
4636 "Hon Industries Inc.",
4637 "Honeywell International Inc.",
4638 "Hormel Foods Corp.",
4639 "Host Marriott Corp.",
4640 "Household International Corp.",
4641 "Hovnanian Enterprises Inc.",
4642 "Hub Group Inc.",
4643 "Hubbell Inc.",
4644 "Hughes Supply Inc.",
4645 "Humana Inc.",
4646 "Huntington Bancshares Inc.",
4647 "Idacorp Inc.",
4648 "IDT Corporation",
4649 "IKON Office Solutions Inc.",
4650 "Illinois Tool Works Inc.",
4651 "IMC Global Inc.",
4652 "Imperial Sugar Company",
4653 "IMS Health Inc.",
4654 "Ingles Market Inc",
4655 "Ingram Micro Inc.",
4656 "Insight Enterprises Inc.",
4657 "Integrated Electrical Services Inc.",
4658 "Intel Corporation",
4659 "International Paper Co.",
4660 "Interpublic Group of Companies Inc.",
4661 "Interstate Bakeries Corporation",
4662 "International Business Machines Corp.",
4663 "International Flavors & Fragrances Inc.",
4664 "International Multifoods Corporation",
4665 "Intuit Inc.",
4666 "IT Group Inc.",
4667 "ITT Industries Inc.",
4668 "Ivax Corp.",
4669 "J.B. Hunt Transport Services Inc.",
4670 "J.C. Penny Co.",
4671 "J.P. Morgan Chase & Co.",
4672 "Jabil Circuit Inc.",
4673 "Jack In The Box Inc.",
4674 "Jacobs Engineering Group Inc.",
4675 "JDS Uniphase Corp.",
4676 "Jefferson-Pilot Co.",
4677 "John Hancock Financial Services Inc.",
4678 "Johnson & Johnson",
4679 "Johnson Controls Inc.",
4680 "Jones Apparel Group Inc.",
4681 "KB Home",
4682 "Kellogg Company",
4683 "Kellwood Company",
4684 "Kelly Services Inc.",
4685 "Kemet Corp.",
4686 "Kennametal Inc.",
4687 "Kerr-McGee Corporation",
4688 "KeyCorp",
4689 "KeySpan Corp.",
4690 "Kimball International Inc.",
4691 "Kimberly-Clark Corporation",
4692 "Kindred Healthcare Inc.",
4693 "KLA-Tencor Corporation",
4694 "K-Mart Corp.",
4695 "Knight-Ridder Inc.",
4696 "Kohl's Corp.",
4697 "KPMG Consulting Inc.",
4698 "Kroger Co.",
4699 "L-3 Communications Holdings Inc.",
4700 "Laboratory Corporation of America Holdings",
4701 "Lam Research Corporation",
4702 "LandAmerica Financial Group Inc.",
4703 "Lands' End Inc.",
4704 "Landstar System Inc.",
4705 "La-Z-Boy Inc.",
4706 "Lear Corporation",
4707 "Legg Mason Inc.",
4708 "Leggett & Platt Inc.",
4709 "Lehman Brothers Holdings Inc.",
4710 "Lennar Corporation",
4711 "Lennox International Inc.",
4712 "Level 3 Communications Inc.",
4713 "Levi Strauss & Co.",
4714 "Lexmark International Inc.",
4715 "Limited Inc.",
4716 "Lincoln National Corporation",
4717 "Linens 'n Things Inc.",
4718 "Lithia Motors Inc.",
4719 "Liz Claiborne Inc.",
4720 "Lockheed Martin Corporation",
4721 "Loews Corporation",
4722 "Longs Drug Stores Corporation",
4723 "Louisiana-Pacific Corporation",
4724 "Lowe's Companies Inc.",
4725 "LSI Logic Corporation",
4726 "The LTV Corporation",
4727 "The Lubrizol Corporation",
4728 "Lucent Technologies Inc.",
4729 "Lyondell Chemical Company",
4730 "M & T Bank Corporation",
4731 "Magellan Health Services Inc.",
4732 "Mail-Well Inc.",
4733 "Mandalay Resort Group",
4734 "Manor Care Inc.",
4735 "Manpower Inc.",
4736 "Marathon Oil Corporation",
4737 "Mariner Health Care Inc.",
4738 "Markel Corporation",
4739 "Marriott International Inc.",
4740 "Marsh & McLennan Companies Inc.",
4741 "Marsh Supermarkets Inc.",
4742 "Marshall & Ilsley Corporation",
4743 "Martin Marietta Materials Inc.",
4744 "Masco Corporation",
4745 "Massey Energy Company",
4746 "MasTec Inc.",
4747 "Mattel Inc.",
4748 "Maxim Integrated Products Inc.",
4749 "Maxtor Corporation",
4750 "Maxxam Inc.",
4751 "The May Department Stores Company",
4752 "Maytag Corporation",
4753 "MBNA Corporation",
4754 "McCormick & Company Incorporated",
4755 "McDonald's Corporation",
4756 "The McGraw-Hill Companies Inc.",
4757 "McKesson Corporation",
4758 "McLeodUSA Incorporated",
4759 "M.D.C. Holdings Inc.",
4760 "MDU Resources Group Inc.",
4761 "MeadWestvaco Corporation",
4762 "Medtronic Inc.",
4763 "Mellon Financial Corporation",
4764 "The Men's Wearhouse Inc.",
4765 "Merck & Co., Inc.",
4766 "Mercury General Corporation",
4767 "Merrill Lynch & Co. Inc.",
4768 "Metaldyne Corporation",
4769 "Metals USA Inc.",
4770 "MetLife Inc.",
4771 "Metris Companies Inc",
4772 "MGIC Investment Corporation",
4773 "MGM Mirage",
4774 "Michaels Stores Inc.",
4775 "Micron Technology Inc.",
4776 "Microsoft Corporation",
4777 "Milacron Inc.",
4778 "Millennium Chemicals Inc.",
4779 "Mirant Corporation",
4780 "Mohawk Industries Inc.",
4781 "Molex Incorporated",
4782 "The MONY Group Inc.",
4783 "Morgan Stanley Dean Witter & Co.",
4784 "Motorola Inc.",
4785 "MPS Group Inc.",
4786 "Murphy Oil Corporation",
4787 "Nabors Industries Inc",
4788 "Nacco Industries Inc",
4789 "Nash Finch Company",
4790 "National City Corp.",
4791 "National Commerce Financial Corporation",
4792 "National Fuel Gas Company",
4793 "National Oilwell Inc",
4794 "National Rural Utilities Cooperative Finance Corporation",
4795 "National Semiconductor Corporation",
4796 "National Service Industries Inc",
4797 "Navistar International Corporation",
4798 "NCR Corporation",
4799 "The Neiman Marcus Group Inc.",
4800 "New Jersey Resources Corporation",
4801 "New York Times Company",
4802 "Newell Rubbermaid Inc",
4803 "Newmont Mining Corporation",
4804 "Nextel Communications Inc",
4805 "Nicor Inc",
4806 "Nike Inc",
4807 "NiSource Inc",
4808 "Noble Energy Inc",
4809 "Nordstrom Inc",
4810 "Norfolk Southern Corporation",
4811 "Nortek Inc",
4812 "North Fork Bancorporation Inc",
4813 "Northeast Utilities System",
4814 "Northern Trust Corporation",
4815 "Northrop Grumman Corporation",
4816 "NorthWestern Corporation",
4817 "Novellus Systems Inc",
4818 "NSTAR",
4819 "NTL Incorporated",
4820 "Nucor Corp",
4821 "Nvidia Corp",
4822 "NVR Inc",
4823 "Northwest Airlines Corp",
4824 "Occidental Petroleum Corp",
4825 "Ocean Energy Inc",
4826 "Office Depot Inc.",
4827 "OfficeMax Inc",
4828 "OGE Energy Corp",
4829 "Oglethorpe Power Corp.",
4830 "Ohio Casualty Corp.",
4831 "Old Republic International Corp.",
4832 "Olin Corp.",
4833 "OM Group Inc",
4834 "Omnicare Inc",
4835 "Omnicom Group",
4836 "On Semiconductor Corp",
4837 "ONEOK Inc",
4838 "Oracle Corp",
4839 "Oshkosh Truck Corp",
4840 "Outback Steakhouse Inc.",
4841 "Owens & Minor Inc.",
4842 "Owens Corning",
4843 "Owens-Illinois Inc",
4844 "Oxford Health Plans Inc",
4845 "Paccar Inc",
4846 "PacifiCare Health Systems Inc",
4847 "Packaging Corp. of America",
4848 "Pactiv Corp",
4849 "Pall Corp",
4850 "Pantry Inc",
4851 "Park Place Entertainment Corp",
4852 "Parker Hannifin Corp.",
4853 "Pathmark Stores Inc.",
4854 "Paychex Inc",
4855 "Payless Shoesource Inc",
4856 "Penn Traffic Co.",
4857 "Pennzoil-Quaker State Company",
4858 "Pentair Inc",
4859 "Peoples Energy Corp.",
4860 "PeopleSoft Inc",
4861 "Pep Boys Manny, Moe & Jack",
4862 "Potomac Electric Power Co.",
4863 "Pepsi Bottling Group Inc.",
4864 "PepsiAmericas Inc.",
4865 "PepsiCo Inc.",
4866 "Performance Food Group Co.",
4867 "Perini Corp",
4868 "PerkinElmer Inc",
4869 "Perot Systems Corp",
4870 "Petco Animal Supplies Inc.",
4871 "Peter Kiewit Sons', Inc.",
4872 "PETsMART Inc",
4873 "Pfizer Inc",
4874 "Pacific Gas & Electric Corp.",
4875 "Pharmacia Corp",
4876 "Phar Mor Inc.",
4877 "Phelps Dodge Corp.",
4878 "Philip Morris Companies Inc.",
4879 "Phillips Petroleum Co",
4880 "Phillips Van Heusen Corp.",
4881 "Phoenix Companies Inc",
4882 "Pier 1 Imports Inc.",
4883 "Pilgrim's Pride Corporation",
4884 "Pinnacle West Capital Corp",
4885 "Pioneer-Standard Electronics Inc.",
4886 "Pitney Bowes Inc.",
4887 "Pittston Brinks Group",
4888 "Plains All American Pipeline LP",
4889 "PNC Financial Services Group Inc.",
4890 "PNM Resources Inc",
4891 "Polaris Industries Inc.",
4892 "Polo Ralph Lauren Corp",
4893 "PolyOne Corp",
4894 "Popular Inc",
4895 "Potlatch Corp",
4896 "PPG Industries Inc",
4897 "PPL Corp",
4898 "Praxair Inc",
4899 "Precision Castparts Corp",
4900 "Premcor Inc.",
4901 "Pride International Inc",
4902 "Primedia Inc",
4903 "Principal Financial Group Inc.",
4904 "Procter & Gamble Co.",
4905 "Pro-Fac Cooperative Inc.",
4906 "Progress Energy Inc",
4907 "Progressive Corporation",
4908 "Protective Life Corp",
4909 "Provident Financial Group",
4910 "Providian Financial Corp.",
4911 "Prudential Financial Inc.",
4912 "PSS World Medical Inc",
4913 "Public Service Enterprise Group Inc.",
4914 "Publix Super Markets Inc.",
4915 "Puget Energy Inc.",
4916 "Pulte Homes Inc",
4917 "Qualcomm Inc",
4918 "Quanta Services Inc.",
4919 "Quantum Corp",
4920 "Quest Diagnostics Inc.",
4921 "Questar Corp",
4922 "Quintiles Transnational",
4923 "Qwest Communications Intl Inc",
4924 "R.J. Reynolds Tobacco Company",
4925 "R.R. Donnelley & Sons Company",
4926 "Radio Shack Corporation",
4927 "Raymond James Financial Inc.",
4928 "Raytheon Company",
4929 "Reader's Digest Association Inc.",
4930 "Reebok International Ltd.",
4931 "Regions Financial Corp.",
4932 "Regis Corporation",
4933 "Reliance Steel & Aluminum Co.",
4934 "Reliant Energy Inc.",
4935 "Rent A Center Inc",
4936 "Republic Services Inc",
4937 "Revlon Inc",
4938 "RGS Energy Group Inc",
4939 "Rite Aid Corp",
4940 "Riverwood Holding Inc.",
4941 "RoadwayCorp",
4942 "Robert Half International Inc.",
4943 "Rock-Tenn Co",
4944 "Rockwell Automation Inc",
4945 "Rockwell Collins Inc",
4946 "Rohm & Haas Co.",
4947 "Ross Stores Inc",
4948 "RPM Inc.",
4949 "Ruddick Corp",
4950 "Ryder System Inc",
4951 "Ryerson Tull Inc",
4952 "Ryland Group Inc.",
4953 "Sabre Holdings Corp",
4954 "Safeco Corp",
4955 "Safeguard Scientifics Inc.",
4956 "Safeway Inc",
4957 "Saks Inc",
4958 "Sanmina-SCI Inc",
4959 "Sara Lee Corp",
4960 "SBC Communications Inc",
4961 "Scana Corp.",
4962 "Schering-Plough Corp",
4963 "Scholastic Corp",
4964 "SCI Systems Onc.",
4965 "Science Applications Intl. Inc.",
4966 "Scientific-Atlanta Inc",
4967 "Scotts Company",
4968 "Seaboard Corp",
4969 "Sealed Air Corp",
4970 "Sears Roebuck & Co",
4971 "Sempra Energy",
4972 "Sequa Corp",
4973 "Service Corp. International",
4974 "ServiceMaster Co",
4975 "Shaw Group Inc",
4976 "Sherwin-Williams Company",
4977 "Shopko Stores Inc",
4978 "Siebel Systems Inc",
4979 "Sierra Health Services Inc",
4980 "Sierra Pacific Resources",
4981 "Silgan Holdings Inc.",
4982 "Silicon Graphics Inc",
4983 "Simon Property Group Inc",
4984 "SLM Corporation",
4985 "Smith International Inc",
4986 "Smithfield Foods Inc",
4987 "Smurfit-Stone Container Corp",
4988 "Snap-On Inc",
4989 "Solectron Corp",
4990 "Solutia Inc",
4991 "Sonic Automotive Inc.",
4992 "Sonoco Products Co.",
4993 "Southern Company",
4994 "Southern Union Company",
4995 "SouthTrust Corp.",
4996 "Southwest Airlines Co",
4997 "Southwest Gas Corp",
4998 "Sovereign Bancorp Inc.",
4999 "Spartan Stores Inc",
5000 "Spherion Corp",
5001 "Sports Authority Inc",
5002 "Sprint Corp.",
5003 "SPX Corp",
5004 "St. Jude Medical Inc",
5005 "St. Paul Cos.",
5006 "Staff Leasing Inc.",
5007 "StanCorp Financial Group Inc",
5008 "Standard Pacific Corp.",
5009 "Stanley Works",
5010 "Staples Inc",
5011 "Starbucks Corp",
5012 "Starwood Hotels & Resorts Worldwide Inc",
5013 "State Street Corp.",
5014 "Stater Bros. Holdings Inc.",
5015 "Steelcase Inc",
5016 "Stein Mart Inc",
5017 "Stewart & Stevenson Services Inc",
5018 "Stewart Information Services Corp",
5019 "Stilwell Financial Inc",
5020 "Storage Technology Corporation",
5021 "Stryker Corp",
5022 "Sun Healthcare Group Inc.",
5023 "Sun Microsystems Inc.",
5024 "SunGard Data Systems Inc.",
5025 "Sunoco Inc.",
5026 "SunTrust Banks Inc",
5027 "Supervalu Inc",
5028 "Swift Transportation, Co., Inc",
5029 "Symbol Technologies Inc",
5030 "Synovus Financial Corp.",
5031 "Sysco Corp",
5032 "Systemax Inc.",
5033 "Target Corp.",
5034 "Tech Data Corporation",
5035 "TECO Energy Inc",
5036 "Tecumseh Products Company",
5037 "Tektronix Inc",
5038 "Teleflex Incorporated",
5039 "Telephone & Data Systems Inc",
5040 "Tellabs Inc.",
5041 "Temple-Inland Inc",
5042 "Tenet Healthcare Corporation",
5043 "Tenneco Automotive Inc.",
5044 "Teradyne Inc",
5045 "Terex Corp",
5046 "Tesoro Petroleum Corp.",
5047 "Texas Industries Inc.",
5048 "Texas Instruments Incorporated",
5049 "Textron Inc",
5050 "Thermo Electron Corporation",
5051 "Thomas & Betts Corporation",
5052 "Tiffany & Co",
5053 "Timken Company",
5054 "TJX Companies Inc",
5055 "TMP Worldwide Inc",
5056 "Toll Brothers Inc",
5057 "Torchmark Corporation",
5058 "Toro Company",
5059 "Tower Automotive Inc.",
5060 "Toys 'R' Us Inc",
5061 "Trans World Entertainment Corp.",
5062 "TransMontaigne Inc",
5063 "Transocean Inc",
5064 "TravelCenters of America Inc.",
5065 "Triad Hospitals Inc",
5066 "Tribune Company",
5067 "Trigon Healthcare Inc.",
5068 "Trinity Industries Inc",
5069 "Trump Hotels & Casino Resorts Inc.",
5070 "TruServ Corporation",
5071 "TRW Inc",
5072 "TXU Corp",
5073 "Tyson Foods Inc",
5074 "U.S. Bancorp",
5075 "U.S. Industries Inc.",
5076 "UAL Corporation",
5077 "UGI Corporation",
5078 "Unified Western Grocers Inc",
5079 "Union Pacific Corporation",
5080 "Union Planters Corp",
5081 "Unisource Energy Corp",
5082 "Unisys Corporation",
5083 "United Auto Group Inc",
5084 "United Defense Industries Inc.",
5085 "United Parcel Service Inc",
5086 "United Rentals Inc",
5087 "United Stationers Inc",
5088 "United Technologies Corporation",
5089 "UnitedHealth Group Incorporated",
5090 "Unitrin Inc",
5091 "Universal Corporation",
5092 "Universal Forest Products Inc",
5093 "Universal Health Services Inc",
5094 "Unocal Corporation",
5095 "Unova Inc",
5096 "UnumProvident Corporation",
5097 "URS Corporation",
5098 "US Airways Group Inc",
5099 "US Oncology Inc",
5100 "USA Interactive",
5101 "USFreighways Corporation",
5102 "USG Corporation",
5103 "UST Inc",
5104 "Valero Energy Corporation",
5105 "Valspar Corporation",
5106 "Value City Department Stores Inc",
5107 "Varco International Inc",
5108 "Vectren Corporation",
5109 "Veritas Software Corporation",
5110 "Verizon Communications Inc",
5111 "VF Corporation",
5112 "Viacom Inc",
5113 "Viad Corp",
5114 "Viasystems Group Inc",
5115 "Vishay Intertechnology Inc",
5116 "Visteon Corporation",
5117 "Volt Information Sciences Inc",
5118 "Vulcan Materials Company",
5119 "W.R. Berkley Corporation",
5120 "W.R. Grace & Co",
5121 "W.W. Grainger Inc",
5122 "Wachovia Corporation",
5123 "Wakenhut Corporation",
5124 "Walgreen Co",
5125 "Wallace Computer Services Inc",
5126 "Wal-Mart Stores Inc",
5127 "Walt Disney Co",
5128 "Walter Industries Inc",
5129 "Washington Mutual Inc",
5130 "Washington Post Co.",
5131 "Waste Management Inc",
5132 "Watsco Inc",
5133 "Weatherford International Inc",
5134 "Weis Markets Inc.",
5135 "Wellpoint Health Networks Inc",
5136 "Wells Fargo & Company",
5137 "Wendy's International Inc",
5138 "Werner Enterprises Inc",
5139 "WESCO International Inc",
5140 "Western Digital Inc",
5141 "Western Gas Resources Inc",
5142 "WestPoint Stevens Inc",
5143 "Weyerhauser Company",
5144 "WGL Holdings Inc",
5145 "Whirlpool Corporation",
5146 "Whole Foods Market Inc",
5147 "Willamette Industries Inc.",
5148 "Williams Companies Inc",
5149 "Williams Sonoma Inc",
5150 "Winn Dixie Stores Inc",
5151 "Wisconsin Energy Corporation",
5152 "Wm Wrigley Jr Company",
5153 "World Fuel Services Corporation",
5154 "WorldCom Inc",
5155 "Worthington Industries Inc",
5156 "WPS Resources Corporation",
5157 "Wyeth",
5158 "Wyndham International Inc",
5159 "Xcel Energy Inc",
5160 "Xerox Corp",
5161 "Xilinx Inc",
5162 "XO Communications Inc",
5163 "Yellow Corporation",
5164 "York International Corp",
5165 "Yum Brands Inc.",
5166 "Zale Corporation",
5167 "Zions Bancorporation"
5168 ],
5169
5170 fileExtension : {
5171 "raster" : ["bmp", "gif", "gpl", "ico", "jpeg", "psd", "png", "psp", "raw", "tiff"],
5172 "vector" : ["3dv", "amf", "awg", "ai", "cgm", "cdr", "cmx", "dxf", "e2d", "egt", "eps", "fs", "odg", "svg", "xar"],
5173 "3d" : ["3dmf", "3dm", "3mf", "3ds", "an8", "aoi", "blend", "cal3d", "cob", "ctm", "iob", "jas", "max", "mb", "mdx", "obj", "x", "x3d"],
5174 "document" : ["doc", "docx", "dot", "html", "xml", "odt", "odm", "ott", "csv", "rtf", "tex", "xhtml", "xps"]
5175 },
5176
5177 // Data taken from https://github.com/dmfilipenko/timezones.json/blob/master/timezones.json
5178 timezones: [
5179 {
5180 "name": "Dateline Standard Time",
5181 "abbr": "DST",
5182 "offset": -12,
5183 "isdst": false,
5184 "text": "(UTC-12:00) International Date Line West",
5185 "utc": [
5186 "Etc/GMT+12"
5187 ]
5188 },
5189 {
5190 "name": "UTC-11",
5191 "abbr": "U",
5192 "offset": -11,
5193 "isdst": false,
5194 "text": "(UTC-11:00) Coordinated Universal Time-11",
5195 "utc": [
5196 "Etc/GMT+11",
5197 "Pacific/Midway",
5198 "Pacific/Niue",
5199 "Pacific/Pago_Pago"
5200 ]
5201 },
5202 {
5203 "name": "Hawaiian Standard Time",
5204 "abbr": "HST",
5205 "offset": -10,
5206 "isdst": false,
5207 "text": "(UTC-10:00) Hawaii",
5208 "utc": [
5209 "Etc/GMT+10",
5210 "Pacific/Honolulu",
5211 "Pacific/Johnston",
5212 "Pacific/Rarotonga",
5213 "Pacific/Tahiti"
5214 ]
5215 },
5216 {
5217 "name": "Alaskan Standard Time",
5218 "abbr": "AKDT",
5219 "offset": -8,
5220 "isdst": true,
5221 "text": "(UTC-09:00) Alaska",
5222 "utc": [
5223 "America/Anchorage",
5224 "America/Juneau",
5225 "America/Nome",
5226 "America/Sitka",
5227 "America/Yakutat"
5228 ]
5229 },
5230 {
5231 "name": "Pacific Standard Time (Mexico)",
5232 "abbr": "PDT",
5233 "offset": -7,
5234 "isdst": true,
5235 "text": "(UTC-08:00) Baja California",
5236 "utc": [
5237 "America/Santa_Isabel"
5238 ]
5239 },
5240 {
5241 "name": "Pacific Standard Time",
5242 "abbr": "PDT",
5243 "offset": -7,
5244 "isdst": true,
5245 "text": "(UTC-08:00) Pacific Time (US & Canada)",
5246 "utc": [
5247 "America/Dawson",
5248 "America/Los_Angeles",
5249 "America/Tijuana",
5250 "America/Vancouver",
5251 "America/Whitehorse",
5252 "PST8PDT"
5253 ]
5254 },
5255 {
5256 "name": "US Mountain Standard Time",
5257 "abbr": "UMST",
5258 "offset": -7,
5259 "isdst": false,
5260 "text": "(UTC-07:00) Arizona",
5261 "utc": [
5262 "America/Creston",
5263 "America/Dawson_Creek",
5264 "America/Hermosillo",
5265 "America/Phoenix",
5266 "Etc/GMT+7"
5267 ]
5268 },
5269 {
5270 "name": "Mountain Standard Time (Mexico)",
5271 "abbr": "MDT",
5272 "offset": -6,
5273 "isdst": true,
5274 "text": "(UTC-07:00) Chihuahua, La Paz, Mazatlan",
5275 "utc": [
5276 "America/Chihuahua",
5277 "America/Mazatlan"
5278 ]
5279 },
5280 {
5281 "name": "Mountain Standard Time",
5282 "abbr": "MDT",
5283 "offset": -6,
5284 "isdst": true,
5285 "text": "(UTC-07:00) Mountain Time (US & Canada)",
5286 "utc": [
5287 "America/Boise",
5288 "America/Cambridge_Bay",
5289 "America/Denver",
5290 "America/Edmonton",
5291 "America/Inuvik",
5292 "America/Ojinaga",
5293 "America/Yellowknife",
5294 "MST7MDT"
5295 ]
5296 },
5297 {
5298 "name": "Central America Standard Time",
5299 "abbr": "CAST",
5300 "offset": -6,
5301 "isdst": false,
5302 "text": "(UTC-06:00) Central America",
5303 "utc": [
5304 "America/Belize",
5305 "America/Costa_Rica",
5306 "America/El_Salvador",
5307 "America/Guatemala",
5308 "America/Managua",
5309 "America/Tegucigalpa",
5310 "Etc/GMT+6",
5311 "Pacific/Galapagos"
5312 ]
5313 },
5314 {
5315 "name": "Central Standard Time",
5316 "abbr": "CDT",
5317 "offset": -5,
5318 "isdst": true,
5319 "text": "(UTC-06:00) Central Time (US & Canada)",
5320 "utc": [
5321 "America/Chicago",
5322 "America/Indiana/Knox",
5323 "America/Indiana/Tell_City",
5324 "America/Matamoros",
5325 "America/Menominee",
5326 "America/North_Dakota/Beulah",
5327 "America/North_Dakota/Center",
5328 "America/North_Dakota/New_Salem",
5329 "America/Rainy_River",
5330 "America/Rankin_Inlet",
5331 "America/Resolute",
5332 "America/Winnipeg",
5333 "CST6CDT"
5334 ]
5335 },
5336 {
5337 "name": "Central Standard Time (Mexico)",
5338 "abbr": "CDT",
5339 "offset": -5,
5340 "isdst": true,
5341 "text": "(UTC-06:00) Guadalajara, Mexico City, Monterrey",
5342 "utc": [
5343 "America/Bahia_Banderas",
5344 "America/Cancun",
5345 "America/Merida",
5346 "America/Mexico_City",
5347 "America/Monterrey"
5348 ]
5349 },
5350 {
5351 "name": "Canada Central Standard Time",
5352 "abbr": "CCST",
5353 "offset": -6,
5354 "isdst": false,
5355 "text": "(UTC-06:00) Saskatchewan",
5356 "utc": [
5357 "America/Regina",
5358 "America/Swift_Current"
5359 ]
5360 },
5361 {
5362 "name": "SA Pacific Standard Time",
5363 "abbr": "SPST",
5364 "offset": -5,
5365 "isdst": false,
5366 "text": "(UTC-05:00) Bogota, Lima, Quito",
5367 "utc": [
5368 "America/Bogota",
5369 "America/Cayman",
5370 "America/Coral_Harbour",
5371 "America/Eirunepe",
5372 "America/Guayaquil",
5373 "America/Jamaica",
5374 "America/Lima",
5375 "America/Panama",
5376 "America/Rio_Branco",
5377 "Etc/GMT+5"
5378 ]
5379 },
5380 {
5381 "name": "Eastern Standard Time",
5382 "abbr": "EDT",
5383 "offset": -4,
5384 "isdst": true,
5385 "text": "(UTC-05:00) Eastern Time (US & Canada)",
5386 "utc": [
5387 "America/Detroit",
5388 "America/Havana",
5389 "America/Indiana/Petersburg",
5390 "America/Indiana/Vincennes",
5391 "America/Indiana/Winamac",
5392 "America/Iqaluit",
5393 "America/Kentucky/Monticello",
5394 "America/Louisville",
5395 "America/Montreal",
5396 "America/Nassau",
5397 "America/New_York",
5398 "America/Nipigon",
5399 "America/Pangnirtung",
5400 "America/Port-au-Prince",
5401 "America/Thunder_Bay",
5402 "America/Toronto",
5403 "EST5EDT"
5404 ]
5405 },
5406 {
5407 "name": "US Eastern Standard Time",
5408 "abbr": "UEDT",
5409 "offset": -4,
5410 "isdst": true,
5411 "text": "(UTC-05:00) Indiana (East)",
5412 "utc": [
5413 "America/Indiana/Marengo",
5414 "America/Indiana/Vevay",
5415 "America/Indianapolis"
5416 ]
5417 },
5418 {
5419 "name": "Venezuela Standard Time",
5420 "abbr": "VST",
5421 "offset": -4.5,
5422 "isdst": false,
5423 "text": "(UTC-04:30) Caracas",
5424 "utc": [
5425 "America/Caracas"
5426 ]
5427 },
5428 {
5429 "name": "Paraguay Standard Time",
5430 "abbr": "PST",
5431 "offset": -4,
5432 "isdst": false,
5433 "text": "(UTC-04:00) Asuncion",
5434 "utc": [
5435 "America/Asuncion"
5436 ]
5437 },
5438 {
5439 "name": "Atlantic Standard Time",
5440 "abbr": "ADT",
5441 "offset": -3,
5442 "isdst": true,
5443 "text": "(UTC-04:00) Atlantic Time (Canada)",
5444 "utc": [
5445 "America/Glace_Bay",
5446 "America/Goose_Bay",
5447 "America/Halifax",
5448 "America/Moncton",
5449 "America/Thule",
5450 "Atlantic/Bermuda"
5451 ]
5452 },
5453 {
5454 "name": "Central Brazilian Standard Time",
5455 "abbr": "CBST",
5456 "offset": -4,
5457 "isdst": false,
5458 "text": "(UTC-04:00) Cuiaba",
5459 "utc": [
5460 "America/Campo_Grande",
5461 "America/Cuiaba"
5462 ]
5463 },
5464 {
5465 "name": "SA Western Standard Time",
5466 "abbr": "SWST",
5467 "offset": -4,
5468 "isdst": false,
5469 "text": "(UTC-04:00) Georgetown, La Paz, Manaus, San Juan",
5470 "utc": [
5471 "America/Anguilla",
5472 "America/Antigua",
5473 "America/Aruba",
5474 "America/Barbados",
5475 "America/Blanc-Sablon",
5476 "America/Boa_Vista",
5477 "America/Curacao",
5478 "America/Dominica",
5479 "America/Grand_Turk",
5480 "America/Grenada",
5481 "America/Guadeloupe",
5482 "America/Guyana",
5483 "America/Kralendijk",
5484 "America/La_Paz",
5485 "America/Lower_Princes",
5486 "America/Manaus",
5487 "America/Marigot",
5488 "America/Martinique",
5489 "America/Montserrat",
5490 "America/Port_of_Spain",
5491 "America/Porto_Velho",
5492 "America/Puerto_Rico",
5493 "America/Santo_Domingo",
5494 "America/St_Barthelemy",
5495 "America/St_Kitts",
5496 "America/St_Lucia",
5497 "America/St_Thomas",
5498 "America/St_Vincent",
5499 "America/Tortola",
5500 "Etc/GMT+4"
5501 ]
5502 },
5503 {
5504 "name": "Pacific SA Standard Time",
5505 "abbr": "PSST",
5506 "offset": -4,
5507 "isdst": false,
5508 "text": "(UTC-04:00) Santiago",
5509 "utc": [
5510 "America/Santiago",
5511 "Antarctica/Palmer"
5512 ]
5513 },
5514 {
5515 "name": "Newfoundland Standard Time",
5516 "abbr": "NDT",
5517 "offset": -2.5,
5518 "isdst": true,
5519 "text": "(UTC-03:30) Newfoundland",
5520 "utc": [
5521 "America/St_Johns"
5522 ]
5523 },
5524 {
5525 "name": "E. South America Standard Time",
5526 "abbr": "ESAST",
5527 "offset": -3,
5528 "isdst": false,
5529 "text": "(UTC-03:00) Brasilia",
5530 "utc": [
5531 "America/Sao_Paulo"
5532 ]
5533 },
5534 {
5535 "name": "Argentina Standard Time",
5536 "abbr": "AST",
5537 "offset": -3,
5538 "isdst": false,
5539 "text": "(UTC-03:00) Buenos Aires",
5540 "utc": [
5541 "America/Argentina/La_Rioja",
5542 "America/Argentina/Rio_Gallegos",
5543 "America/Argentina/Salta",
5544 "America/Argentina/San_Juan",
5545 "America/Argentina/San_Luis",
5546 "America/Argentina/Tucuman",
5547 "America/Argentina/Ushuaia",
5548 "America/Buenos_Aires",
5549 "America/Catamarca",
5550 "America/Cordoba",
5551 "America/Jujuy",
5552 "America/Mendoza"
5553 ]
5554 },
5555 {
5556 "name": "SA Eastern Standard Time",
5557 "abbr": "SEST",
5558 "offset": -3,
5559 "isdst": false,
5560 "text": "(UTC-03:00) Cayenne, Fortaleza",
5561 "utc": [
5562 "America/Araguaina",
5563 "America/Belem",
5564 "America/Cayenne",
5565 "America/Fortaleza",
5566 "America/Maceio",
5567 "America/Paramaribo",
5568 "America/Recife",
5569 "America/Santarem",
5570 "Antarctica/Rothera",
5571 "Atlantic/Stanley",
5572 "Etc/GMT+3"
5573 ]
5574 },
5575 {
5576 "name": "Greenland Standard Time",
5577 "abbr": "GDT",
5578 "offset": -2,
5579 "isdst": true,
5580 "text": "(UTC-03:00) Greenland",
5581 "utc": [
5582 "America/Godthab"
5583 ]
5584 },
5585 {
5586 "name": "Montevideo Standard Time",
5587 "abbr": "MST",
5588 "offset": -3,
5589 "isdst": false,
5590 "text": "(UTC-03:00) Montevideo",
5591 "utc": [
5592 "America/Montevideo"
5593 ]
5594 },
5595 {
5596 "name": "Bahia Standard Time",
5597 "abbr": "BST",
5598 "offset": -3,
5599 "isdst": false,
5600 "text": "(UTC-03:00) Salvador",
5601 "utc": [
5602 "America/Bahia"
5603 ]
5604 },
5605 {
5606 "name": "UTC-02",
5607 "abbr": "U",
5608 "offset": -2,
5609 "isdst": false,
5610 "text": "(UTC-02:00) Coordinated Universal Time-02",
5611 "utc": [
5612 "America/Noronha",
5613 "Atlantic/South_Georgia",
5614 "Etc/GMT+2"
5615 ]
5616 },
5617 {
5618 "name": "Mid-Atlantic Standard Time",
5619 "abbr": "MDT",
5620 "offset": -1,
5621 "isdst": true,
5622 "text": "(UTC-02:00) Mid-Atlantic - Old"
5623 },
5624 {
5625 "name": "Azores Standard Time",
5626 "abbr": "ADT",
5627 "offset": 0,
5628 "isdst": true,
5629 "text": "(UTC-01:00) Azores",
5630 "utc": [
5631 "America/Scoresbysund",
5632 "Atlantic/Azores"
5633 ]
5634 },
5635 {
5636 "name": "Cape Verde Standard Time",
5637 "abbr": "CVST",
5638 "offset": -1,
5639 "isdst": false,
5640 "text": "(UTC-01:00) Cape Verde Is.",
5641 "utc": [
5642 "Atlantic/Cape_Verde",
5643 "Etc/GMT+1"
5644 ]
5645 },
5646 {
5647 "name": "Morocco Standard Time",
5648 "abbr": "MDT",
5649 "offset": 1,
5650 "isdst": true,
5651 "text": "(UTC) Casablanca",
5652 "utc": [
5653 "Africa/Casablanca",
5654 "Africa/El_Aaiun"
5655 ]
5656 },
5657 {
5658 "name": "UTC",
5659 "abbr": "CUT",
5660 "offset": 0,
5661 "isdst": false,
5662 "text": "(UTC) Coordinated Universal Time",
5663 "utc": [
5664 "America/Danmarkshavn",
5665 "Etc/GMT"
5666 ]
5667 },
5668 {
5669 "name": "GMT Standard Time",
5670 "abbr": "GDT",
5671 "offset": 1,
5672 "isdst": true,
5673 "text": "(UTC) Dublin, Edinburgh, Lisbon, London",
5674 "utc": [
5675 "Atlantic/Canary",
5676 "Atlantic/Faeroe",
5677 "Atlantic/Madeira",
5678 "Europe/Dublin",
5679 "Europe/Guernsey",
5680 "Europe/Isle_of_Man",
5681 "Europe/Jersey",
5682 "Europe/Lisbon",
5683 "Europe/London"
5684 ]
5685 },
5686 {
5687 "name": "Greenwich Standard Time",
5688 "abbr": "GST",
5689 "offset": 0,
5690 "isdst": false,
5691 "text": "(UTC) Monrovia, Reykjavik",
5692 "utc": [
5693 "Africa/Abidjan",
5694 "Africa/Accra",
5695 "Africa/Bamako",
5696 "Africa/Banjul",
5697 "Africa/Bissau",
5698 "Africa/Conakry",
5699 "Africa/Dakar",
5700 "Africa/Freetown",
5701 "Africa/Lome",
5702 "Africa/Monrovia",
5703 "Africa/Nouakchott",
5704 "Africa/Ouagadougou",
5705 "Africa/Sao_Tome",
5706 "Atlantic/Reykjavik",
5707 "Atlantic/St_Helena"
5708 ]
5709 },
5710 {
5711 "name": "W. Europe Standard Time",
5712 "abbr": "WEDT",
5713 "offset": 2,
5714 "isdst": true,
5715 "text": "(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna",
5716 "utc": [
5717 "Arctic/Longyearbyen",
5718 "Europe/Amsterdam",
5719 "Europe/Andorra",
5720 "Europe/Berlin",
5721 "Europe/Busingen",
5722 "Europe/Gibraltar",
5723 "Europe/Luxembourg",
5724 "Europe/Malta",
5725 "Europe/Monaco",
5726 "Europe/Oslo",
5727 "Europe/Rome",
5728 "Europe/San_Marino",
5729 "Europe/Stockholm",
5730 "Europe/Vaduz",
5731 "Europe/Vatican",
5732 "Europe/Vienna",
5733 "Europe/Zurich"
5734 ]
5735 },
5736 {
5737 "name": "Central Europe Standard Time",
5738 "abbr": "CEDT",
5739 "offset": 2,
5740 "isdst": true,
5741 "text": "(UTC+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague",
5742 "utc": [
5743 "Europe/Belgrade",
5744 "Europe/Bratislava",
5745 "Europe/Budapest",
5746 "Europe/Ljubljana",
5747 "Europe/Podgorica",
5748 "Europe/Prague",
5749 "Europe/Tirane"
5750 ]
5751 },
5752 {
5753 "name": "Romance Standard Time",
5754 "abbr": "RDT",
5755 "offset": 2,
5756 "isdst": true,
5757 "text": "(UTC+01:00) Brussels, Copenhagen, Madrid, Paris",
5758 "utc": [
5759 "Africa/Ceuta",
5760 "Europe/Brussels",
5761 "Europe/Copenhagen",
5762 "Europe/Madrid",
5763 "Europe/Paris"
5764 ]
5765 },
5766 {
5767 "name": "Central European Standard Time",
5768 "abbr": "CEDT",
5769 "offset": 2,
5770 "isdst": true,
5771 "text": "(UTC+01:00) Sarajevo, Skopje, Warsaw, Zagreb",
5772 "utc": [
5773 "Europe/Sarajevo",
5774 "Europe/Skopje",
5775 "Europe/Warsaw",
5776 "Europe/Zagreb"
5777 ]
5778 },
5779 {
5780 "name": "W. Central Africa Standard Time",
5781 "abbr": "WCAST",
5782 "offset": 1,
5783 "isdst": false,
5784 "text": "(UTC+01:00) West Central Africa",
5785 "utc": [
5786 "Africa/Algiers",
5787 "Africa/Bangui",
5788 "Africa/Brazzaville",
5789 "Africa/Douala",
5790 "Africa/Kinshasa",
5791 "Africa/Lagos",
5792 "Africa/Libreville",
5793 "Africa/Luanda",
5794 "Africa/Malabo",
5795 "Africa/Ndjamena",
5796 "Africa/Niamey",
5797 "Africa/Porto-Novo",
5798 "Africa/Tunis",
5799 "Etc/GMT-1"
5800 ]
5801 },
5802 {
5803 "name": "Namibia Standard Time",
5804 "abbr": "NST",
5805 "offset": 1,
5806 "isdst": false,
5807 "text": "(UTC+01:00) Windhoek",
5808 "utc": [
5809 "Africa/Windhoek"
5810 ]
5811 },
5812 {
5813 "name": "GTB Standard Time",
5814 "abbr": "GDT",
5815 "offset": 3,
5816 "isdst": true,
5817 "text": "(UTC+02:00) Athens, Bucharest",
5818 "utc": [
5819 "Asia/Nicosia",
5820 "Europe/Athens",
5821 "Europe/Bucharest",
5822 "Europe/Chisinau"
5823 ]
5824 },
5825 {
5826 "name": "Middle East Standard Time",
5827 "abbr": "MEDT",
5828 "offset": 3,
5829 "isdst": true,
5830 "text": "(UTC+02:00) Beirut",
5831 "utc": [
5832 "Asia/Beirut"
5833 ]
5834 },
5835 {
5836 "name": "Egypt Standard Time",
5837 "abbr": "EST",
5838 "offset": 2,
5839 "isdst": false,
5840 "text": "(UTC+02:00) Cairo",
5841 "utc": [
5842 "Africa/Cairo"
5843 ]
5844 },
5845 {
5846 "name": "Syria Standard Time",
5847 "abbr": "SDT",
5848 "offset": 3,
5849 "isdst": true,
5850 "text": "(UTC+02:00) Damascus",
5851 "utc": [
5852 "Asia/Damascus"
5853 ]
5854 },
5855 {
5856 "name": "E. Europe Standard Time",
5857 "abbr": "EEDT",
5858 "offset": 3,
5859 "isdst": true,
5860 "text": "(UTC+02:00) E. Europe"
5861 },
5862 {
5863 "name": "South Africa Standard Time",
5864 "abbr": "SAST",
5865 "offset": 2,
5866 "isdst": false,
5867 "text": "(UTC+02:00) Harare, Pretoria",
5868 "utc": [
5869 "Africa/Blantyre",
5870 "Africa/Bujumbura",
5871 "Africa/Gaborone",
5872 "Africa/Harare",
5873 "Africa/Johannesburg",
5874 "Africa/Kigali",
5875 "Africa/Lubumbashi",
5876 "Africa/Lusaka",
5877 "Africa/Maputo",
5878 "Africa/Maseru",
5879 "Africa/Mbabane",
5880 "Etc/GMT-2"
5881 ]
5882 },
5883 {
5884 "name": "FLE Standard Time",
5885 "abbr": "FDT",
5886 "offset": 3,
5887 "isdst": true,
5888 "text": "(UTC+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius",
5889 "utc": [
5890 "Europe/Helsinki",
5891 "Europe/Kiev",
5892 "Europe/Mariehamn",
5893 "Europe/Riga",
5894 "Europe/Sofia",
5895 "Europe/Tallinn",
5896 "Europe/Uzhgorod",
5897 "Europe/Vilnius",
5898 "Europe/Zaporozhye"
5899 ]
5900 },
5901 {
5902 "name": "Turkey Standard Time",
5903 "abbr": "TDT",
5904 "offset": 3,
5905 "isdst": true,
5906 "text": "(UTC+02:00) Istanbul",
5907 "utc": [
5908 "Europe/Istanbul"
5909 ]
5910 },
5911 {
5912 "name": "Israel Standard Time",
5913 "abbr": "JDT",
5914 "offset": 3,
5915 "isdst": true,
5916 "text": "(UTC+02:00) Jerusalem",
5917 "utc": [
5918 "Asia/Jerusalem"
5919 ]
5920 },
5921 {
5922 "name": "Libya Standard Time",
5923 "abbr": "LST",
5924 "offset": 2,
5925 "isdst": false,
5926 "text": "(UTC+02:00) Tripoli",
5927 "utc": [
5928 "Africa/Tripoli"
5929 ]
5930 },
5931 {
5932 "name": "Jordan Standard Time",
5933 "abbr": "JST",
5934 "offset": 3,
5935 "isdst": false,
5936 "text": "(UTC+03:00) Amman",
5937 "utc": [
5938 "Asia/Amman"
5939 ]
5940 },
5941 {
5942 "name": "Arabic Standard Time",
5943 "abbr": "AST",
5944 "offset": 3,
5945 "isdst": false,
5946 "text": "(UTC+03:00) Baghdad",
5947 "utc": [
5948 "Asia/Baghdad"
5949 ]
5950 },
5951 {
5952 "name": "Kaliningrad Standard Time",
5953 "abbr": "KST",
5954 "offset": 3,
5955 "isdst": false,
5956 "text": "(UTC+03:00) Kaliningrad, Minsk",
5957 "utc": [
5958 "Europe/Kaliningrad",
5959 "Europe/Minsk"
5960 ]
5961 },
5962 {
5963 "name": "Arab Standard Time",
5964 "abbr": "AST",
5965 "offset": 3,
5966 "isdst": false,
5967 "text": "(UTC+03:00) Kuwait, Riyadh",
5968 "utc": [
5969 "Asia/Aden",
5970 "Asia/Bahrain",
5971 "Asia/Kuwait",
5972 "Asia/Qatar",
5973 "Asia/Riyadh"
5974 ]
5975 },
5976 {
5977 "name": "E. Africa Standard Time",
5978 "abbr": "EAST",
5979 "offset": 3,
5980 "isdst": false,
5981 "text": "(UTC+03:00) Nairobi",
5982 "utc": [
5983 "Africa/Addis_Ababa",
5984 "Africa/Asmera",
5985 "Africa/Dar_es_Salaam",
5986 "Africa/Djibouti",
5987 "Africa/Juba",
5988 "Africa/Kampala",
5989 "Africa/Khartoum",
5990 "Africa/Mogadishu",
5991 "Africa/Nairobi",
5992 "Antarctica/Syowa",
5993 "Etc/GMT-3",
5994 "Indian/Antananarivo",
5995 "Indian/Comoro",
5996 "Indian/Mayotte"
5997 ]
5998 },
5999 {
6000 "name": "Iran Standard Time",
6001 "abbr": "IDT",
6002 "offset": 4.5,
6003 "isdst": true,
6004 "text": "(UTC+03:30) Tehran",
6005 "utc": [
6006 "Asia/Tehran"
6007 ]
6008 },
6009 {
6010 "name": "Arabian Standard Time",
6011 "abbr": "AST",
6012 "offset": 4,
6013 "isdst": false,
6014 "text": "(UTC+04:00) Abu Dhabi, Muscat",
6015 "utc": [
6016 "Asia/Dubai",
6017 "Asia/Muscat",
6018 "Etc/GMT-4"
6019 ]
6020 },
6021 {
6022 "name": "Azerbaijan Standard Time",
6023 "abbr": "ADT",
6024 "offset": 5,
6025 "isdst": true,
6026 "text": "(UTC+04:00) Baku",
6027 "utc": [
6028 "Asia/Baku"
6029 ]
6030 },
6031 {
6032 "name": "Russian Standard Time",
6033 "abbr": "RST",
6034 "offset": 4,
6035 "isdst": false,
6036 "text": "(UTC+04:00) Moscow, St. Petersburg, Volgograd",
6037 "utc": [
6038 "Europe/Moscow",
6039 "Europe/Samara",
6040 "Europe/Simferopol",
6041 "Europe/Volgograd"
6042 ]
6043 },
6044 {
6045 "name": "Mauritius Standard Time",
6046 "abbr": "MST",
6047 "offset": 4,
6048 "isdst": false,
6049 "text": "(UTC+04:00) Port Louis",
6050 "utc": [
6051 "Indian/Mahe",
6052 "Indian/Mauritius",
6053 "Indian/Reunion"
6054 ]
6055 },
6056 {
6057 "name": "Georgian Standard Time",
6058 "abbr": "GST",
6059 "offset": 4,
6060 "isdst": false,
6061 "text": "(UTC+04:00) Tbilisi",
6062 "utc": [
6063 "Asia/Tbilisi"
6064 ]
6065 },
6066 {
6067 "name": "Caucasus Standard Time",
6068 "abbr": "CST",
6069 "offset": 4,
6070 "isdst": false,
6071 "text": "(UTC+04:00) Yerevan",
6072 "utc": [
6073 "Asia/Yerevan"
6074 ]
6075 },
6076 {
6077 "name": "Afghanistan Standard Time",
6078 "abbr": "AST",
6079 "offset": 4.5,
6080 "isdst": false,
6081 "text": "(UTC+04:30) Kabul",
6082 "utc": [
6083 "Asia/Kabul"
6084 ]
6085 },
6086 {
6087 "name": "West Asia Standard Time",
6088 "abbr": "WAST",
6089 "offset": 5,
6090 "isdst": false,
6091 "text": "(UTC+05:00) Ashgabat, Tashkent",
6092 "utc": [
6093 "Antarctica/Mawson",
6094 "Asia/Aqtau",
6095 "Asia/Aqtobe",
6096 "Asia/Ashgabat",
6097 "Asia/Dushanbe",
6098 "Asia/Oral",
6099 "Asia/Samarkand",
6100 "Asia/Tashkent",
6101 "Etc/GMT-5",
6102 "Indian/Kerguelen",
6103 "Indian/Maldives"
6104 ]
6105 },
6106 {
6107 "name": "Pakistan Standard Time",
6108 "abbr": "PST",
6109 "offset": 5,
6110 "isdst": false,
6111 "text": "(UTC+05:00) Islamabad, Karachi",
6112 "utc": [
6113 "Asia/Karachi"
6114 ]
6115 },
6116 {
6117 "name": "India Standard Time",
6118 "abbr": "IST",
6119 "offset": 5.5,
6120 "isdst": false,
6121 "text": "(UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi",
6122 "utc": [
6123 "Asia/Calcutta"
6124 ]
6125 },
6126 {
6127 "name": "Sri Lanka Standard Time",
6128 "abbr": "SLST",
6129 "offset": 5.5,
6130 "isdst": false,
6131 "text": "(UTC+05:30) Sri Jayawardenepura",
6132 "utc": [
6133 "Asia/Colombo"
6134 ]
6135 },
6136 {
6137 "name": "Nepal Standard Time",
6138 "abbr": "NST",
6139 "offset": 5.75,
6140 "isdst": false,
6141 "text": "(UTC+05:45) Kathmandu",
6142 "utc": [
6143 "Asia/Katmandu"
6144 ]
6145 },
6146 {
6147 "name": "Central Asia Standard Time",
6148 "abbr": "CAST",
6149 "offset": 6,
6150 "isdst": false,
6151 "text": "(UTC+06:00) Astana",
6152 "utc": [
6153 "Antarctica/Vostok",
6154 "Asia/Almaty",
6155 "Asia/Bishkek",
6156 "Asia/Qyzylorda",
6157 "Asia/Urumqi",
6158 "Etc/GMT-6",
6159 "Indian/Chagos"
6160 ]
6161 },
6162 {
6163 "name": "Bangladesh Standard Time",
6164 "abbr": "BST",
6165 "offset": 6,
6166 "isdst": false,
6167 "text": "(UTC+06:00) Dhaka",
6168 "utc": [
6169 "Asia/Dhaka",
6170 "Asia/Thimphu"
6171 ]
6172 },
6173 {
6174 "name": "Ekaterinburg Standard Time",
6175 "abbr": "EST",
6176 "offset": 6,
6177 "isdst": false,
6178 "text": "(UTC+06:00) Ekaterinburg",
6179 "utc": [
6180 "Asia/Yekaterinburg"
6181 ]
6182 },
6183 {
6184 "name": "Myanmar Standard Time",
6185 "abbr": "MST",
6186 "offset": 6.5,
6187 "isdst": false,
6188 "text": "(UTC+06:30) Yangon (Rangoon)",
6189 "utc": [
6190 "Asia/Rangoon",
6191 "Indian/Cocos"
6192 ]
6193 },
6194 {
6195 "name": "SE Asia Standard Time",
6196 "abbr": "SAST",
6197 "offset": 7,
6198 "isdst": false,
6199 "text": "(UTC+07:00) Bangkok, Hanoi, Jakarta",
6200 "utc": [
6201 "Antarctica/Davis",
6202 "Asia/Bangkok",
6203 "Asia/Hovd",
6204 "Asia/Jakarta",
6205 "Asia/Phnom_Penh",
6206 "Asia/Pontianak",
6207 "Asia/Saigon",
6208 "Asia/Vientiane",
6209 "Etc/GMT-7",
6210 "Indian/Christmas"
6211 ]
6212 },
6213 {
6214 "name": "N. Central Asia Standard Time",
6215 "abbr": "NCAST",
6216 "offset": 7,
6217 "isdst": false,
6218 "text": "(UTC+07:00) Novosibirsk",
6219 "utc": [
6220 "Asia/Novokuznetsk",
6221 "Asia/Novosibirsk",
6222 "Asia/Omsk"
6223 ]
6224 },
6225 {
6226 "name": "China Standard Time",
6227 "abbr": "CST",
6228 "offset": 8,
6229 "isdst": false,
6230 "text": "(UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi",
6231 "utc": [
6232 "Asia/Hong_Kong",
6233 "Asia/Macau",
6234 "Asia/Shanghai"
6235 ]
6236 },
6237 {
6238 "name": "North Asia Standard Time",
6239 "abbr": "NAST",
6240 "offset": 8,
6241 "isdst": false,
6242 "text": "(UTC+08:00) Krasnoyarsk",
6243 "utc": [
6244 "Asia/Krasnoyarsk"
6245 ]
6246 },
6247 {
6248 "name": "Singapore Standard Time",
6249 "abbr": "MPST",
6250 "offset": 8,
6251 "isdst": false,
6252 "text": "(UTC+08:00) Kuala Lumpur, Singapore",
6253 "utc": [
6254 "Asia/Brunei",
6255 "Asia/Kuala_Lumpur",
6256 "Asia/Kuching",
6257 "Asia/Makassar",
6258 "Asia/Manila",
6259 "Asia/Singapore",
6260 "Etc/GMT-8"
6261 ]
6262 },
6263 {
6264 "name": "W. Australia Standard Time",
6265 "abbr": "WAST",
6266 "offset": 8,
6267 "isdst": false,
6268 "text": "(UTC+08:00) Perth",
6269 "utc": [
6270 "Antarctica/Casey",
6271 "Australia/Perth"
6272 ]
6273 },
6274 {
6275 "name": "Taipei Standard Time",
6276 "abbr": "TST",
6277 "offset": 8,
6278 "isdst": false,
6279 "text": "(UTC+08:00) Taipei",
6280 "utc": [
6281 "Asia/Taipei"
6282 ]
6283 },
6284 {
6285 "name": "Ulaanbaatar Standard Time",
6286 "abbr": "UST",
6287 "offset": 8,
6288 "isdst": false,
6289 "text": "(UTC+08:00) Ulaanbaatar",
6290 "utc": [
6291 "Asia/Choibalsan",
6292 "Asia/Ulaanbaatar"
6293 ]
6294 },
6295 {
6296 "name": "North Asia East Standard Time",
6297 "abbr": "NAEST",
6298 "offset": 9,
6299 "isdst": false,
6300 "text": "(UTC+09:00) Irkutsk",
6301 "utc": [
6302 "Asia/Irkutsk"
6303 ]
6304 },
6305 {
6306 "name": "Tokyo Standard Time",
6307 "abbr": "TST",
6308 "offset": 9,
6309 "isdst": false,
6310 "text": "(UTC+09:00) Osaka, Sapporo, Tokyo",
6311 "utc": [
6312 "Asia/Dili",
6313 "Asia/Jayapura",
6314 "Asia/Tokyo",
6315 "Etc/GMT-9",
6316 "Pacific/Palau"
6317 ]
6318 },
6319 {
6320 "name": "Korea Standard Time",
6321 "abbr": "KST",
6322 "offset": 9,
6323 "isdst": false,
6324 "text": "(UTC+09:00) Seoul",
6325 "utc": [
6326 "Asia/Pyongyang",
6327 "Asia/Seoul"
6328 ]
6329 },
6330 {
6331 "name": "Cen. Australia Standard Time",
6332 "abbr": "CAST",
6333 "offset": 9.5,
6334 "isdst": false,
6335 "text": "(UTC+09:30) Adelaide",
6336 "utc": [
6337 "Australia/Adelaide",
6338 "Australia/Broken_Hill"
6339 ]
6340 },
6341 {
6342 "name": "AUS Central Standard Time",
6343 "abbr": "ACST",
6344 "offset": 9.5,
6345 "isdst": false,
6346 "text": "(UTC+09:30) Darwin",
6347 "utc": [
6348 "Australia/Darwin"
6349 ]
6350 },
6351 {
6352 "name": "E. Australia Standard Time",
6353 "abbr": "EAST",
6354 "offset": 10,
6355 "isdst": false,
6356 "text": "(UTC+10:00) Brisbane",
6357 "utc": [
6358 "Australia/Brisbane",
6359 "Australia/Lindeman"
6360 ]
6361 },
6362 {
6363 "name": "AUS Eastern Standard Time",
6364 "abbr": "AEST",
6365 "offset": 10,
6366 "isdst": false,
6367 "text": "(UTC+10:00) Canberra, Melbourne, Sydney",
6368 "utc": [
6369 "Australia/Melbourne",
6370 "Australia/Sydney"
6371 ]
6372 },
6373 {
6374 "name": "West Pacific Standard Time",
6375 "abbr": "WPST",
6376 "offset": 10,
6377 "isdst": false,
6378 "text": "(UTC+10:00) Guam, Port Moresby",
6379 "utc": [
6380 "Antarctica/DumontDUrville",
6381 "Etc/GMT-10",
6382 "Pacific/Guam",
6383 "Pacific/Port_Moresby",
6384 "Pacific/Saipan",
6385 "Pacific/Truk"
6386 ]
6387 },
6388 {
6389 "name": "Tasmania Standard Time",
6390 "abbr": "TST",
6391 "offset": 10,
6392 "isdst": false,
6393 "text": "(UTC+10:00) Hobart",
6394 "utc": [
6395 "Australia/Currie",
6396 "Australia/Hobart"
6397 ]
6398 },
6399 {
6400 "name": "Yakutsk Standard Time",
6401 "abbr": "YST",
6402 "offset": 10,
6403 "isdst": false,
6404 "text": "(UTC+10:00) Yakutsk",
6405 "utc": [
6406 "Asia/Chita",
6407 "Asia/Khandyga",
6408 "Asia/Yakutsk"
6409 ]
6410 },
6411 {
6412 "name": "Central Pacific Standard Time",
6413 "abbr": "CPST",
6414 "offset": 11,
6415 "isdst": false,
6416 "text": "(UTC+11:00) Solomon Is., New Caledonia",
6417 "utc": [
6418 "Antarctica/Macquarie",
6419 "Etc/GMT-11",
6420 "Pacific/Efate",
6421 "Pacific/Guadalcanal",
6422 "Pacific/Kosrae",
6423 "Pacific/Noumea",
6424 "Pacific/Ponape"
6425 ]
6426 },
6427 {
6428 "name": "Vladivostok Standard Time",
6429 "abbr": "VST",
6430 "offset": 11,
6431 "isdst": false,
6432 "text": "(UTC+11:00) Vladivostok",
6433 "utc": [
6434 "Asia/Sakhalin",
6435 "Asia/Ust-Nera",
6436 "Asia/Vladivostok"
6437 ]
6438 },
6439 {
6440 "name": "New Zealand Standard Time",
6441 "abbr": "NZST",
6442 "offset": 12,
6443 "isdst": false,
6444 "text": "(UTC+12:00) Auckland, Wellington",
6445 "utc": [
6446 "Antarctica/McMurdo",
6447 "Pacific/Auckland"
6448 ]
6449 },
6450 {
6451 "name": "UTC+12",
6452 "abbr": "U",
6453 "offset": 12,
6454 "isdst": false,
6455 "text": "(UTC+12:00) Coordinated Universal Time+12",
6456 "utc": [
6457 "Etc/GMT-12",
6458 "Pacific/Funafuti",
6459 "Pacific/Kwajalein",
6460 "Pacific/Majuro",
6461 "Pacific/Nauru",
6462 "Pacific/Tarawa",
6463 "Pacific/Wake",
6464 "Pacific/Wallis"
6465 ]
6466 },
6467 {
6468 "name": "Fiji Standard Time",
6469 "abbr": "FST",
6470 "offset": 12,
6471 "isdst": false,
6472 "text": "(UTC+12:00) Fiji",
6473 "utc": [
6474 "Pacific/Fiji"
6475 ]
6476 },
6477 {
6478 "name": "Magadan Standard Time",
6479 "abbr": "MST",
6480 "offset": 12,
6481 "isdst": false,
6482 "text": "(UTC+12:00) Magadan",
6483 "utc": [
6484 "Asia/Anadyr",
6485 "Asia/Kamchatka",
6486 "Asia/Magadan",
6487 "Asia/Srednekolymsk"
6488 ]
6489 },
6490 {
6491 "name": "Kamchatka Standard Time",
6492 "abbr": "KDT",
6493 "offset": 13,
6494 "isdst": true,
6495 "text": "(UTC+12:00) Petropavlovsk-Kamchatsky - Old"
6496 },
6497 {
6498 "name": "Tonga Standard Time",
6499 "abbr": "TST",
6500 "offset": 13,
6501 "isdst": false,
6502 "text": "(UTC+13:00) Nuku'alofa",
6503 "utc": [
6504 "Etc/GMT-13",
6505 "Pacific/Enderbury",
6506 "Pacific/Fakaofo",
6507 "Pacific/Tongatapu"
6508 ]
6509 },
6510 {
6511 "name": "Samoa Standard Time",
6512 "abbr": "SST",
6513 "offset": 13,
6514 "isdst": false,
6515 "text": "(UTC+13:00) Samoa",
6516 "utc": [
6517 "Pacific/Apia"
6518 ]
6519 }
6520 ],
6521 //List source: http://answers.google.com/answers/threadview/id/589312.html
6522 profession: [
6523 "Airline Pilot",
6524 "Academic Team",
6525 "Accountant",
6526 "Account Executive",
6527 "Actor",
6528 "Actuary",
6529 "Acquisition Analyst",
6530 "Administrative Asst.",
6531 "Administrative Analyst",
6532 "Administrator",
6533 "Advertising Director",
6534 "Aerospace Engineer",
6535 "Agent",
6536 "Agricultural Inspector",
6537 "Agricultural Scientist",
6538 "Air Traffic Controller",
6539 "Animal Trainer",
6540 "Anthropologist",
6541 "Appraiser",
6542 "Architect",
6543 "Art Director",
6544 "Artist",
6545 "Astronomer",
6546 "Athletic Coach",
6547 "Auditor",
6548 "Author",
6549 "Baker",
6550 "Banker",
6551 "Bankruptcy Attorney",
6552 "Benefits Manager",
6553 "Biologist",
6554 "Bio-feedback Specialist",
6555 "Biomedical Engineer",
6556 "Biotechnical Researcher",
6557 "Broadcaster",
6558 "Broker",
6559 "Building Manager",
6560 "Building Contractor",
6561 "Building Inspector",
6562 "Business Analyst",
6563 "Business Planner",
6564 "Business Manager",
6565 "Buyer",
6566 "Call Center Manager",
6567 "Career Counselor",
6568 "Cash Manager",
6569 "Ceramic Engineer",
6570 "Chief Executive Officer",
6571 "Chief Operation Officer",
6572 "Chef",
6573 "Chemical Engineer",
6574 "Chemist",
6575 "Child Care Manager",
6576 "Chief Medical Officer",
6577 "Chiropractor",
6578 "Cinematographer",
6579 "City Housing Manager",
6580 "City Manager",
6581 "Civil Engineer",
6582 "Claims Manager",
6583 "Clinical Research Assistant",
6584 "Collections Manager.",
6585 "Compliance Manager",
6586 "Comptroller",
6587 "Computer Manager",
6588 "Commercial Artist",
6589 "Communications Affairs Director",
6590 "Communications Director",
6591 "Communications Engineer",
6592 "Compensation Analyst",
6593 "Computer Programmer",
6594 "Computer Ops. Manager",
6595 "Computer Engineer",
6596 "Computer Operator",
6597 "Computer Graphics Specialist",
6598 "Construction Engineer",
6599 "Construction Manager",
6600 "Consultant",
6601 "Consumer Relations Manager",
6602 "Contract Administrator",
6603 "Copyright Attorney",
6604 "Copywriter",
6605 "Corporate Planner",
6606 "Corrections Officer",
6607 "Cosmetologist",
6608 "Credit Analyst",
6609 "Cruise Director",
6610 "Chief Information Officer",
6611 "Chief Technology Officer",
6612 "Customer Service Manager",
6613 "Cryptologist",
6614 "Dancer",
6615 "Data Security Manager",
6616 "Database Manager",
6617 "Day Care Instructor",
6618 "Dentist",
6619 "Designer",
6620 "Design Engineer",
6621 "Desktop Publisher",
6622 "Developer",
6623 "Development Officer",
6624 "Diamond Merchant",
6625 "Dietitian",
6626 "Direct Marketer",
6627 "Director",
6628 "Distribution Manager",
6629 "Diversity Manager",
6630 "Economist",
6631 "EEO Compliance Manager",
6632 "Editor",
6633 "Education Adminator",
6634 "Electrical Engineer",
6635 "Electro Optical Engineer",
6636 "Electronics Engineer",
6637 "Embassy Management",
6638 "Employment Agent",
6639 "Engineer Technician",
6640 "Entrepreneur",
6641 "Environmental Analyst",
6642 "Environmental Attorney",
6643 "Environmental Engineer",
6644 "Environmental Specialist",
6645 "Escrow Officer",
6646 "Estimator",
6647 "Executive Assistant",
6648 "Executive Director",
6649 "Executive Recruiter",
6650 "Facilities Manager",
6651 "Family Counselor",
6652 "Fashion Events Manager",
6653 "Fashion Merchandiser",
6654 "Fast Food Manager",
6655 "Film Producer",
6656 "Film Production Assistant",
6657 "Financial Analyst",
6658 "Financial Planner",
6659 "Financier",
6660 "Fine Artist",
6661 "Wildlife Specialist",
6662 "Fitness Consultant",
6663 "Flight Attendant",
6664 "Flight Engineer",
6665 "Floral Designer",
6666 "Food & Beverage Director",
6667 "Food Service Manager",
6668 "Forestry Technician",
6669 "Franchise Management",
6670 "Franchise Sales",
6671 "Fraud Investigator",
6672 "Freelance Writer",
6673 "Fund Raiser",
6674 "General Manager",
6675 "Geologist",
6676 "General Counsel",
6677 "Geriatric Specialist",
6678 "Gerontologist",
6679 "Glamour Photographer",
6680 "Golf Club Manager",
6681 "Gourmet Chef",
6682 "Graphic Designer",
6683 "Grounds Keeper",
6684 "Hazardous Waste Manager",
6685 "Health Care Manager",
6686 "Health Therapist",
6687 "Health Service Administrator",
6688 "Hearing Officer",
6689 "Home Economist",
6690 "Horticulturist",
6691 "Hospital Administrator",
6692 "Hotel Manager",
6693 "Human Resources Manager",
6694 "Importer",
6695 "Industrial Designer",
6696 "Industrial Engineer",
6697 "Information Director",
6698 "Inside Sales",
6699 "Insurance Adjuster",
6700 "Interior Decorator",
6701 "Internal Controls Director",
6702 "International Acct.",
6703 "International Courier",
6704 "International Lawyer",
6705 "Interpreter",
6706 "Investigator",
6707 "Investment Banker",
6708 "Investment Manager",
6709 "IT Architect",
6710 "IT Project Manager",
6711 "IT Systems Analyst",
6712 "Jeweler",
6713 "Joint Venture Manager",
6714 "Journalist",
6715 "Labor Negotiator",
6716 "Labor Organizer",
6717 "Labor Relations Manager",
6718 "Lab Services Director",
6719 "Lab Technician",
6720 "Land Developer",
6721 "Landscape Architect",
6722 "Law Enforcement Officer",
6723 "Lawyer",
6724 "Lead Software Engineer",
6725 "Lead Software Test Engineer",
6726 "Leasing Manager",
6727 "Legal Secretary",
6728 "Library Manager",
6729 "Litigation Attorney",
6730 "Loan Officer",
6731 "Lobbyist",
6732 "Logistics Manager",
6733 "Maintenance Manager",
6734 "Management Consultant",
6735 "Managed Care Director",
6736 "Managing Partner",
6737 "Manufacturing Director",
6738 "Manpower Planner",
6739 "Marine Biologist",
6740 "Market Res. Analyst",
6741 "Marketing Director",
6742 "Materials Manager",
6743 "Mathematician",
6744 "Membership Chairman",
6745 "Mechanic",
6746 "Mechanical Engineer",
6747 "Media Buyer",
6748 "Medical Investor",
6749 "Medical Secretary",
6750 "Medical Technician",
6751 "Mental Health Counselor",
6752 "Merchandiser",
6753 "Metallurgical Engineering",
6754 "Meteorologist",
6755 "Microbiologist",
6756 "MIS Manager",
6757 "Motion Picture Director",
6758 "Multimedia Director",
6759 "Musician",
6760 "Network Administrator",
6761 "Network Specialist",
6762 "Network Operator",
6763 "New Product Manager",
6764 "Novelist",
6765 "Nuclear Engineer",
6766 "Nuclear Specialist",
6767 "Nutritionist",
6768 "Nursing Administrator",
6769 "Occupational Therapist",
6770 "Oceanographer",
6771 "Office Manager",
6772 "Operations Manager",
6773 "Operations Research Director",
6774 "Optical Technician",
6775 "Optometrist",
6776 "Organizational Development Manager",
6777 "Outplacement Specialist",
6778 "Paralegal",
6779 "Park Ranger",
6780 "Patent Attorney",
6781 "Payroll Specialist",
6782 "Personnel Specialist",
6783 "Petroleum Engineer",
6784 "Pharmacist",
6785 "Photographer",
6786 "Physical Therapist",
6787 "Physician",
6788 "Physician Assistant",
6789 "Physicist",
6790 "Planning Director",
6791 "Podiatrist",
6792 "Political Analyst",
6793 "Political Scientist",
6794 "Politician",
6795 "Portfolio Manager",
6796 "Preschool Management",
6797 "Preschool Teacher",
6798 "Principal",
6799 "Private Banker",
6800 "Private Investigator",
6801 "Probation Officer",
6802 "Process Engineer",
6803 "Producer",
6804 "Product Manager",
6805 "Product Engineer",
6806 "Production Engineer",
6807 "Production Planner",
6808 "Professional Athlete",
6809 "Professional Coach",
6810 "Professor",
6811 "Project Engineer",
6812 "Project Manager",
6813 "Program Manager",
6814 "Property Manager",
6815 "Public Administrator",
6816 "Public Safety Director",
6817 "PR Specialist",
6818 "Publisher",
6819 "Purchasing Agent",
6820 "Publishing Director",
6821 "Quality Assurance Specialist",
6822 "Quality Control Engineer",
6823 "Quality Control Inspector",
6824 "Radiology Manager",
6825 "Railroad Engineer",
6826 "Real Estate Broker",
6827 "Recreational Director",
6828 "Recruiter",
6829 "Redevelopment Specialist",
6830 "Regulatory Affairs Manager",
6831 "Registered Nurse",
6832 "Rehabilitation Counselor",
6833 "Relocation Manager",
6834 "Reporter",
6835 "Research Specialist",
6836 "Restaurant Manager",
6837 "Retail Store Manager",
6838 "Risk Analyst",
6839 "Safety Engineer",
6840 "Sales Engineer",
6841 "Sales Trainer",
6842 "Sales Promotion Manager",
6843 "Sales Representative",
6844 "Sales Manager",
6845 "Service Manager",
6846 "Sanitation Engineer",
6847 "Scientific Programmer",
6848 "Scientific Writer",
6849 "Securities Analyst",
6850 "Security Consultant",
6851 "Security Director",
6852 "Seminar Presenter",
6853 "Ship's Officer",
6854 "Singer",
6855 "Social Director",
6856 "Social Program Planner",
6857 "Social Research",
6858 "Social Scientist",
6859 "Social Worker",
6860 "Sociologist",
6861 "Software Developer",
6862 "Software Engineer",
6863 "Software Test Engineer",
6864 "Soil Scientist",
6865 "Special Events Manager",
6866 "Special Education Teacher",
6867 "Special Projects Director",
6868 "Speech Pathologist",
6869 "Speech Writer",
6870 "Sports Event Manager",
6871 "Statistician",
6872 "Store Manager",
6873 "Strategic Alliance Director",
6874 "Strategic Planning Director",
6875 "Stress Reduction Specialist",
6876 "Stockbroker",
6877 "Surveyor",
6878 "Structural Engineer",
6879 "Superintendent",
6880 "Supply Chain Director",
6881 "System Engineer",
6882 "Systems Analyst",
6883 "Systems Programmer",
6884 "System Administrator",
6885 "Tax Specialist",
6886 "Teacher",
6887 "Technical Support Specialist",
6888 "Technical Illustrator",
6889 "Technical Writer",
6890 "Technology Director",
6891 "Telecom Analyst",
6892 "Telemarketer",
6893 "Theatrical Director",
6894 "Title Examiner",
6895 "Tour Escort",
6896 "Tour Guide Director",
6897 "Traffic Manager",
6898 "Trainer Translator",
6899 "Transportation Manager",
6900 "Travel Agent",
6901 "Treasurer",
6902 "TV Programmer",
6903 "Underwriter",
6904 "Union Representative",
6905 "University Administrator",
6906 "University Dean",
6907 "Urban Planner",
6908 "Veterinarian",
6909 "Vendor Relations Director",
6910 "Viticulturist",
6911 "Warehouse Manager"
6912 ],
6913 animals : {
6914 //list of ocean animals comes from https://owlcation.com/stem/list-of-ocean-animals
6915 "ocean" : ["Acantharea","Anemone","Angelfish King","Ahi Tuna","Albacore","American Oyster","Anchovy","Armored Snail","Arctic Char","Atlantic Bluefin Tuna","Atlantic Cod","Atlantic Goliath Grouper","Atlantic Trumpetfish","Atlantic Wolffish","Baleen Whale","Banded Butterflyfish","Banded Coral Shrimp","Banded Sea Krait","Barnacle","Barndoor Skate","Barracuda","Basking Shark","Bass","Beluga Whale","Bluebanded Goby","Bluehead Wrasse","Bluefish","Bluestreak Cleaner-Wrasse","Blue Marlin","Blue Shark","Blue Spiny Lobster","Blue Tang","Blue Whale","Broadclub Cuttlefish","Bull Shark","Chambered Nautilus","Chilean Basket Star","Chilean Jack Mackerel","Chinook Salmon","Christmas Tree Worm","Clam","Clown Anemonefish","Clown Triggerfish","Cod","Coelacanth","Cockscomb Cup Coral","Common Fangtooth","Conch","Cookiecutter Shark","Copepod","Coral","Corydoras","Cownose Ray","Crab","Crown-of-Thorns Starfish","Cushion Star","Cuttlefish","California Sea Otters","Dolphin","Dolphinfish","Dory","Devil Fish","Dugong","Dumbo Octopus","Dungeness Crab","Eccentric Sand Dollar","Edible Sea Cucumber","Eel","Elephant Seal","Elkhorn Coral","Emperor Shrimp","Estuarine Crocodile","Fathead Sculpin","Fiddler Crab","Fin Whale","Flameback","Flamingo Tongue Snail","Flashlight Fish","Flatback Turtle","Flatfish","Flying Fish","Flounder","Fluke","French Angelfish","Frilled Shark","Fugu (also called Pufferfish)","Gar","Geoduck","Giant Barrel Sponge","Giant Caribbean Sea Anemone","Giant Clam","Giant Isopod","Giant Kingfish","Giant Oarfish","Giant Pacific Octopus","Giant Pyrosome","Giant Sea Star","Giant Squid","Glowing Sucker Octopus","Giant Tube Worm","Goblin Shark","Goosefish","Great White Shark","Greenland Shark","Grey Atlantic Seal","Grouper","Grunion","Guineafowl Puffer","Haddock","Hake","Halibut","Hammerhead Shark","Hapuka","Harbor Porpoise","Harbor Seal","Hatchetfish","Hawaiian Monk Seal","Hawksbill Turtle","Hector's Dolphin","Hermit Crab","Herring","Hoki","Horn Shark","Horseshoe Crab","Humpback Anglerfish","Humpback Whale","Icefish","Imperator Angelfish","Irukandji Jellyfish","Isopod","Ivory Bush Coral","Japanese Spider Crab","Jellyfish","John Dory","Juan Fernandez Fur Seal","Killer Whale","Kiwa Hirsuta","Krill","Lagoon Triggerfish","Lamprey","Leafy Seadragon","Leopard Seal","Limpet","Ling","Lionfish","Lions Mane Jellyfish","Lobe Coral","Lobster","Loggerhead Turtle","Longnose Sawshark","Longsnout Seahorse","Lophelia Coral","Marrus Orthocanna","Manatee","Manta Ray","Marlin","Megamouth Shark","Mexican Lookdown","Mimic Octopus","Moon Jelly","Mollusk","Monkfish","Moray Eel","Mullet","Mussel","Megaladon","Napoleon Wrasse","Nassau Grouper","Narwhal","Nautilus","Needlefish","Northern Seahorse","North Atlantic Right Whale","Northern Red Snapper","Norway Lobster","Nudibranch","Nurse Shark","Oarfish","Ocean Sunfish","Oceanic Whitetip Shark","Octopus","Olive Sea Snake","Orange Roughy","Ostracod","Otter","Oyster","Pacific Angelshark","Pacific Blackdragon","Pacific Halibut","Pacific Sardine","Pacific Sea Nettle Jellyfish","Pacific White Sided Dolphin","Pantropical Spotted Dolphin","Patagonian Toothfish","Peacock Mantis Shrimp","Pelagic Thresher Shark","Penguin","Peruvian Anchoveta","Pilchard","Pink Salmon","Pinniped","Plankton","Porpoise","Polar Bear","Portuguese Man o' War","Pycnogonid Sea Spider","Quahog","Queen Angelfish","Queen Conch","Queen Parrotfish","Queensland Grouper","Ragfish","Ratfish","Rattail Fish","Ray","Red Drum","Red King Crab","Ringed Seal","Risso's Dolphin","Ross Seals","Sablefish","Salmon","Sand Dollar","Sandbar Shark","Sawfish","Sarcastic Fringehead","Scalloped Hammerhead Shark","Seahorse","Sea Cucumber","Sea Lion","Sea Urchin","Seal","Shark","Shortfin Mako Shark","Shovelnose Guitarfish","Shrimp","Silverside Fish","Skipjack Tuna","Slender Snipe Eel","Smalltooth Sawfish","Smelts","Sockeye Salmon","Southern Stingray","Sponge","Spotted Porcupinefish","Spotted Dolphin","Spotted Eagle Ray","Spotted Moray","Squid","Squidworm","Starfish","Stickleback","Stonefish","Stoplight Loosejaw","Sturgeon","Swordfish","Tan Bristlemouth","Tasseled Wobbegong","Terrible Claw Lobster","Threespot Damselfish","Tiger Prawn","Tiger Shark","Tilefish","Toadfish","Tropical Two-Wing Flyfish","Tuna","Umbrella Squid","Velvet Crab","Venus Flytrap Sea Anemone","Vigtorniella Worm","Viperfish","Vampire Squid","Vaquita","Wahoo","Walrus","West Indian Manatee","Whale","Whale Shark","Whiptail Gulper","White-Beaked Dolphin","White-Ring Garden Eel","White Shrimp","Wobbegong","Wrasse","Wreckfish","Xiphosura","Yellowtail Damselfish","Yelloweye Rockfish","Yellow Cup Black Coral","Yellow Tube Sponge","Yellowfin Tuna","Zebrashark","Zooplankton"],
6916 //list of desert, grassland, and forest animals comes from http://www.skyenimals.com/
6917 "desert" : ["Aardwolf","Addax","African Wild Ass","Ant","Antelope","Armadillo","Baboon","Badger","Bat","Bearded Dragon","Beetle","Bird","Black-footed Cat","Boa","Brown Bear","Bustard","Butterfly","Camel","Caracal","Caracara","Caterpillar","Centipede","Cheetah","Chipmunk","Chuckwalla","Climbing Mouse","Coati","Cobra","Cotton Rat","Cougar","Courser","Crane Fly","Crow","Dassie Rat","Dove","Dunnart","Eagle","Echidna","Elephant","Emu","Falcon","Fly","Fox","Frogmouth","Gecko","Geoffroy's Cat","Gerbil","Grasshopper","Guanaco","Gundi","Hamster","Hawk","Hedgehog","Hyena","Hyrax","Jackal","Kangaroo","Kangaroo Rat","Kestrel","Kowari","Kultarr","Leopard","Lion","Macaw","Meerkat","Mouse","Oryx","Ostrich","Owl","Pronghorn","Python","Rabbit","Raccoon","Rattlesnake","Rhinoceros","Sand Cat","Spectacled Bear","Spiny Mouse","Starling","Stick Bug","Tarantula","Tit","Toad","Tortoise","Tyrant Flycatcher","Viper","Vulture","Waxwing","Xerus","Zebra"],
6918 "grassland" : ["Aardvark","Aardwolf","Accentor","African Buffalo","African Wild Dog","Alpaca","Anaconda","Ant","Anteater","Antelope","Armadillo","Baboon","Badger","Bandicoot","Barbet","Bat","Bee","Bee-eater","Beetle","Bird","Bison","Black-footed Cat","Black-footed Ferret","Bluebird","Boa","Bowerbird","Brown Bear","Bush Dog","Bushshrike","Bustard","Butterfly","Buzzard","Caracal","Caracara","Cardinal","Caterpillar","Cheetah","Chipmunk","Civet","Climbing Mouse","Clouded Leopard","Coati","Cobra","Cockatoo","Cockroach","Common Genet","Cotton Rat","Cougar","Courser","Coyote","Crane","Crane Fly","Cricket","Crow","Culpeo","Death Adder","Deer","Deer Mouse","Dingo","Dinosaur","Dove","Drongo","Duck","Duiker","Dunnart","Eagle","Echidna","Elephant","Elk","Emu","Falcon","Finch","Flea","Fly","Flying Frog","Fox","Frog","Frogmouth","Garter Snake","Gazelle","Gecko","Geoffroy's Cat","Gerbil","Giant Tortoise","Giraffe","Grasshopper","Grison","Groundhog","Grouse","Guanaco","Guinea Pig","Hamster","Harrier","Hartebeest","Hawk","Hedgehog","Helmetshrike","Hippopotamus","Hornbill","Hyena","Hyrax","Impala","Jackal","Jaguar","Jaguarundi","Kangaroo","Kangaroo Rat","Kestrel","Kultarr","Ladybug","Leopard","Lion","Macaw","Meerkat","Mouse","Newt","Oryx","Ostrich","Owl","Pangolin","Pheasant","Prairie Dog","Pronghorn","Przewalski's Horse","Python","Quoll","Rabbit","Raven","Rhinoceros","Shelduck","Sloth Bear","Spectacled Bear","Squirrel","Starling","Stick Bug","Tamandua","Tasmanian Devil","Thornbill","Thrush","Toad","Tortoise"],
6919 "forest" : ["Agouti","Anaconda","Anoa","Ant","Anteater","Antelope","Armadillo","Asian Black Bear","Aye-aye","Babirusa","Baboon","Badger","Bandicoot","Banteng","Barbet","Basilisk","Bat","Bearded Dragon","Bee","Bee-eater","Beetle","Bettong","Binturong","Bird-of-paradise","Bongo","Bowerbird","Bulbul","Bush Dog","Bushbaby","Bushshrike","Butterfly","Buzzard","Caecilian","Cardinal","Cassowary","Caterpillar","Centipede","Chameleon","Chimpanzee","Cicada","Civet","Clouded Leopard","Coati","Cobra","Cockatoo","Cockroach","Colugo","Cotinga","Cotton Rat","Cougar","Crane Fly","Cricket","Crocodile","Crow","Cuckoo","Cuscus","Death Adder","Deer","Dhole","Dingo","Dinosaur","Drongo","Duck","Duiker","Eagle","Echidna","Elephant","Finch","Flat-headed Cat","Flea","Flowerpecker","Fly","Flying Frog","Fossa","Frog","Frogmouth","Gaur","Gecko","Gorilla","Grison","Hawaiian Honeycreeper","Hawk","Hedgehog","Helmetshrike","Hornbill","Hyrax","Iguana","Jackal","Jaguar","Jaguarundi","Kestrel","Ladybug","Lemur","Leopard","Lion","Macaw","Mandrill","Margay","Monkey","Mouse","Mouse Deer","Newt","Okapi","Old World Flycatcher","Orangutan","Owl","Pangolin","Peafowl","Pheasant","Possum","Python","Quokka","Rabbit","Raccoon","Red Panda","Red River Hog","Rhinoceros","Sloth Bear","Spectacled Bear","Squirrel","Starling","Stick Bug","Sun Bear","Tamandua","Tamarin","Tapir","Tarantula","Thrush","Tiger","Tit","Toad","Tortoise","Toucan","Trogon","Trumpeter","Turaco","Turtle","Tyrant Flycatcher","Viper","Vulture","Wallaby","Warbler","Wasp","Waxwing","Weaver","Weaver-finch","Whistler","White-eye","Whydah","Woodswallow","Worm","Wren","Xenops","Yellowjacket","Accentor","African Buffalo","American Black Bear","Anole","Bird","Bison","Boa","Brown Bear","Chipmunk","Common Genet","Copperhead","Coyote","Deer Mouse","Dormouse","Elk","Emu","Fisher","Fox","Garter Snake","Giant Panda","Giant Tortoise","Groundhog","Grouse","Guanaco","Himalayan Tahr","Kangaroo","Koala","Numbat","Quoll","Raccoon dog","Tasmanian Devil","Thornbill","Turkey","Vole","Weasel","Wildcat","Wolf","Wombat","Woodchuck","Woodpecker"],
6920 //list of farm animals comes from https://www.buzzle.com/articles/farm-animals-list.html
6921 "farm" : ["Alpaca","Buffalo","Banteng","Cow","Cat","Chicken","Carp","Camel","Donkey","Dog","Duck","Emu","Goat","Gayal","Guinea","Goose","Horse","Honey","Llama","Pig","Pigeon","Rhea","Rabbit","Sheep","Silkworm","Turkey","Yak","Zebu"],
6922 //list of pet animals comes from https://www.dogbreedinfo.com/pets/pet.htm
6923 "pet" : ["Bearded Dragon","Birds","Burro","Cats","Chameleons","Chickens","Chinchillas","Chinese Water Dragon","Cows","Dogs","Donkey","Ducks","Ferrets","Fish","Geckos","Geese","Gerbils","Goats","Guinea Fowl","Guinea Pigs","Hamsters","Hedgehogs","Horses","Iguanas","Llamas","Lizards","Mice","Mule","Peafowl","Pigs and Hogs","Pigeons","Ponies","Pot Bellied Pig","Rabbits","Rats","Sheep","Skinks","Snakes","Stick Insects","Sugar Gliders","Tarantula","Turkeys","Turtles"],
6924 //list of zoo animals comes from https://bronxzoo.com/animals
6925 "zoo" : ["Aardvark","African Wild Dog","Aldabra Tortoise","American Alligator","American Bison","Amur Tiger","Anaconda","Andean Condor","Asian Elephant","Baby Doll Sheep","Bald Eagle","Barred Owl","Blue Iguana","Boer Goat","California Sea Lion","Caribbean Flamingo","Chinchilla","Collared Lemur","Coquerel's Sifaka","Cuban Amazon Parrot","Ebony Langur","Fennec Fox","Fossa","Gelada","Giant Anteater","Giraffe","Gorilla","Grizzly Bear","Henkel's Leaf-tailed Gecko","Indian Gharial","Indian Rhinoceros","King Cobra","King Vulture","Komodo Dragon","Linne's Two-toed Sloth","Lion","Little Penguin","Madagascar Tree Boa","Magellanic Penguin","Malayan Tapir","Malayan Tiger","Matschies Tree Kangaroo","Mini Donkey","Monarch Butterfly","Nile crocodile","North American Porcupine","Nubian Ibex","Okapi","Poison Dart Frog","Polar Bear","Pygmy Marmoset","Radiated Tortoise","Red Panda","Red Ruffed Lemur","Ring-tailed Lemur","Ring-tailed Mongoose","Rock Hyrax","Small Clawed Asian Otter","Snow Leopard","Snowy Owl","Southern White-faced Owl","Southern White Rhinocerous","Squirrel Monkey","Tufted Puffin","White Cheeked Gibbon","White-throated Bee Eater","Zebra"]
6926 },
6927 primes: [
6928 // 1230 first primes, i.e. all primes up to the first one greater than 10000, inclusive.
6929 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997,1009,1013,1019,1021,1031,1033,1039,1049,1051,1061,1063,1069,1087,1091,1093,1097,1103,1109,1117,1123,1129,1151,1153,1163,1171,1181,1187,1193,1201,1213,1217,1223,1229,1231,1237,1249,1259,1277,1279,1283,1289,1291,1297,1301,1303,1307,1319,1321,1327,1361,1367,1373,1381,1399,1409,1423,1427,1429,1433,1439,1447,1451,1453,1459,1471,1481,1483,1487,1489,1493,1499,1511,1523,1531,1543,1549,1553,1559,1567,1571,1579,1583,1597,1601,1607,1609,1613,1619,1621,1627,1637,1657,1663,1667,1669,1693,1697,1699,1709,1721,1723,1733,1741,1747,1753,1759,1777,1783,1787,1789,1801,1811,1823,1831,1847,1861,1867,1871,1873,1877,1879,1889,1901,1907,1913,1931,1933,1949,1951,1973,1979,1987,1993,1997,1999,2003,2011,2017,2027,2029,2039,2053,2063,2069,2081,2083,2087,2089,2099,2111,2113,2129,2131,2137,2141,2143,2153,2161,2179,2203,2207,2213,2221,2237,2239,2243,2251,2267,2269,2273,2281,2287,2293,2297,2309,2311,2333,2339,2341,2347,2351,2357,2371,2377,2381,2383,2389,2393,2399,2411,2417,2423,2437,2441,2447,2459,2467,2473,2477,2503,2521,2531,2539,2543,2549,2551,2557,2579,2591,2593,2609,2617,2621,2633,2647,2657,2659,2663,2671,2677,2683,2687,2689,2693,2699,2707,2711,2713,2719,2729,2731,2741,2749,2753,2767,2777,2789,2791,2797,2801,2803,2819,2833,2837,2843,2851,2857,2861,2879,2887,2897,2903,2909,2917,2927,2939,2953,2957,2963,2969,2971,2999,3001,3011,3019,3023,3037,3041,3049,3061,3067,3079,3083,3089,3109,3119,3121,3137,3163,3167,3169,3181,3187,3191,3203,3209,3217,3221,3229,3251,3253,3257,3259,3271,3299,3301,3307,3313,3319,3323,3329,3331,3343,3347,3359,3361,3371,3373,3389,3391,3407,3413,3433,3449,3457,3461,3463,3467,3469,3491,3499,3511,3517,3527,3529,3533,3539,3541,3547,3557,3559,3571,3581,3583,3593,3607,3613,3617,3623,3631,3637,3643,3659,3671,3673,3677,3691,3697,3701,3709,3719,3727,3733,3739,3761,3767,3769,3779,3793,3797,3803,3821,3823,3833,3847,3851,3853,3863,3877,3881,3889,3907,3911,3917,3919,3923,3929,3931,3943,3947,3967,3989,4001,4003,4007,4013,4019,4021,4027,4049,4051,4057,4073,4079,4091,4093,4099,4111,4127,4129,4133,4139,4153,4157,4159,4177,4201,4211,4217,4219,4229,4231,4241,4243,4253,4259,4261,4271,4273,4283,4289,4297,4327,4337,4339,4349,4357,4363,4373,4391,4397,4409,4421,4423,4441,4447,4451,4457,4463,4481,4483,4493,4507,4513,4517,4519,4523,4547,4549,4561,4567,4583,4591,4597,4603,4621,4637,4639,4643,4649,4651,4657,4663,4673,4679,4691,4703,4721,4723,4729,4733,4751,4759,4783,4787,4789,4793,4799,4801,4813,4817,4831,4861,4871,4877,4889,4903,4909,4919,4931,4933,4937,4943,4951,4957,4967,4969,4973,4987,4993,4999,5003,5009,5011,5021,5023,5039,5051,5059,5077,5081,5087,5099,5101,5107,5113,5119,5147,5153,5167,5171,5179,5189,5197,5209,5227,5231,5233,5237,5261,5273,5279,5281,5297,5303,5309,5323,5333,5347,5351,5381,5387,5393,5399,5407,5413,5417,5419,5431,5437,5441,5443,5449,5471,5477,5479,5483,5501,5503,5507,5519,5521,5527,5531,5557,5563,5569,5573,5581,5591,5623,5639,5641,5647,5651,5653,5657,5659,5669,5683,5689,5693,5701,5711,5717,5737,5741,5743,5749,5779,5783,5791,5801,5807,5813,5821,5827,5839,5843,5849,5851,5857,5861,5867,5869,5879,5881,5897,5903,5923,5927,5939,5953,5981,5987,6007,6011,6029,6037,6043,6047,6053,6067,6073,6079,6089,6091,6101,6113,6121,6131,6133,6143,6151,6163,6173,6197,6199,6203,6211,6217,6221,6229,6247,6257,6263,6269,6271,6277,6287,6299,6301,6311,6317,6323,6329,6337,6343,6353,6359,6361,6367,6373,6379,6389,6397,6421,6427,6449,6451,6469,6473,6481,6491,6521,6529,6547,6551,6553,6563,6569,6571,6577,6581,6599,6607,6619,6637,6653,6659,6661,6673,6679,6689,6691,6701,6703,6709,6719,6733,6737,6761,6763,6779,6781,6791,6793,6803,6823,6827,6829,6833,6841,6857,6863,6869,6871,6883,6899,6907,6911,6917,6947,6949,6959,6961,6967,6971,6977,6983,6991,6997,7001,7013,7019,7027,7039,7043,7057,7069,7079,7103,7109,7121,7127,7129,7151,7159,7177,7187,7193,7207,7211,7213,7219,7229,7237,7243,7247,7253,7283,7297,7307,7309,7321,7331,7333,7349,7351,7369,7393,7411,7417,7433,7451,7457,7459,7477,7481,7487,7489,7499,7507,7517,7523,7529,7537,7541,7547,7549,7559,7561,7573,7577,7583,7589,7591,7603,7607,7621,7639,7643,7649,7669,7673,7681,7687,7691,7699,7703,7717,7723,7727,7741,7753,7757,7759,7789,7793,7817,7823,7829,7841,7853,7867,7873,7877,7879,7883,7901,7907,7919,7927,7933,7937,7949,7951,7963,7993,8009,8011,8017,8039,8053,8059,8069,8081,8087,8089,8093,8101,8111,8117,8123,8147,8161,8167,8171,8179,8191,8209,8219,8221,8231,8233,8237,8243,8263,8269,8273,8287,8291,8293,8297,8311,8317,8329,8353,8363,8369,8377,8387,8389,8419,8423,8429,8431,8443,8447,8461,8467,8501,8513,8521,8527,8537,8539,8543,8563,8573,8581,8597,8599,8609,8623,8627,8629,8641,8647,8663,8669,8677,8681,8689,8693,8699,8707,8713,8719,8731,8737,8741,8747,8753,8761,8779,8783,8803,8807,8819,8821,8831,8837,8839,8849,8861,8863,8867,8887,8893,8923,8929,8933,8941,8951,8963,8969,8971,8999,9001,9007,9011,9013,9029,9041,9043,9049,9059,9067,9091,9103,9109,9127,9133,9137,9151,9157,9161,9173,9181,9187,9199,9203,9209,9221,9227,9239,9241,9257,9277,9281,9283,9293,9311,9319,9323,9337,9341,9343,9349,9371,9377,9391,9397,9403,9413,9419,9421,9431,9433,9437,9439,9461,9463,9467,9473,9479,9491,9497,9511,9521,9533,9539,9547,9551,9587,9601,9613,9619,9623,9629,9631,9643,9649,9661,9677,9679,9689,9697,9719,9721,9733,9739,9743,9749,9767,9769,9781,9787,9791,9803,9811,9817,9829,9833,9839,9851,9857,9859,9871,9883,9887,9901,9907,9923,9929,9931,9941,9949,9967,9973,10007
6930 ]
6931 };
6932
6933 var o_hasOwnProperty = Object.prototype.hasOwnProperty;
6934 var o_keys = (Object.keys || function(obj) {
6935 var result = [];
6936 for (var key in obj) {
6937 if (o_hasOwnProperty.call(obj, key)) {
6938 result.push(key);
6939 }
6940 }
6941
6942 return result;
6943 });
6944
6945
6946 function _copyObject(source, target) {
6947 var keys = o_keys(source);
6948 var key;
6949
6950 for (var i = 0, l = keys.length; i < l; i++) {
6951 key = keys[i];
6952 target[key] = source[key] || target[key];
6953 }
6954 }
6955
6956 function _copyArray(source, target) {
6957 for (var i = 0, l = source.length; i < l; i++) {
6958 target[i] = source[i];
6959 }
6960 }
6961
6962 function copyObject(source, _target) {
6963 var isArray = Array.isArray(source);
6964 var target = _target || (isArray ? new Array(source.length) : {});
6965
6966 if (isArray) {
6967 _copyArray(source, target);
6968 } else {
6969 _copyObject(source, target);
6970 }
6971
6972 return target;
6973 }
6974
6975 /** Get the data based on key**/
6976 Chance.prototype.get = function (name) {
6977 return copyObject(data[name]);
6978 };
6979
6980 // Mac Address
6981 Chance.prototype.mac_address = function(options){
6982 // typically mac addresses are separated by ":"
6983 // however they can also be separated by "-"
6984 // the network variant uses a dot every fourth byte
6985
6986 options = initOptions(options);
6987 if(!options.separator) {
6988 options.separator = options.networkVersion ? "." : ":";
6989 }
6990
6991 var mac_pool="ABCDEF1234567890",
6992 mac = "";
6993 if(!options.networkVersion) {
6994 mac = this.n(this.string, 6, { pool: mac_pool, length:2 }).join(options.separator);
6995 } else {
6996 mac = this.n(this.string, 3, { pool: mac_pool, length:4 }).join(options.separator);
6997 }
6998
6999 return mac;
7000 };
7001
7002 Chance.prototype.normal = function (options) {
7003 options = initOptions(options, {mean : 0, dev : 1, pool : []});
7004
7005 testRange(
7006 options.pool.constructor !== Array,
7007 "Chance: The pool option must be a valid array."
7008 );
7009 testRange(
7010 typeof options.mean !== 'number',
7011 "Chance: Mean (mean) must be a number"
7012 );
7013 testRange(
7014 typeof options.dev !== 'number',
7015 "Chance: Standard deviation (dev) must be a number"
7016 );
7017
7018 // If a pool has been passed, then we are returning an item from that pool,
7019 // using the normal distribution settings that were passed in
7020 if (options.pool.length > 0) {
7021 return this.normal_pool(options);
7022 }
7023
7024 // The Marsaglia Polar method
7025 var s, u, v, norm,
7026 mean = options.mean,
7027 dev = options.dev;
7028
7029 do {
7030 // U and V are from the uniform distribution on (-1, 1)
7031 u = this.random() * 2 - 1;
7032 v = this.random() * 2 - 1;
7033
7034 s = u * u + v * v;
7035 } while (s >= 1);
7036
7037 // Compute the standard normal variate
7038 norm = u * Math.sqrt(-2 * Math.log(s) / s);
7039
7040 // Shape and scale
7041 return dev * norm + mean;
7042 };
7043
7044 Chance.prototype.normal_pool = function(options) {
7045 var performanceCounter = 0;
7046 do {
7047 var idx = Math.round(this.normal({ mean: options.mean, dev: options.dev }));
7048 if (idx < options.pool.length && idx >= 0) {
7049 return options.pool[idx];
7050 } else {
7051 performanceCounter++;
7052 }
7053 } while(performanceCounter < 100);
7054
7055 throw new RangeError("Chance: Your pool is too small for the given mean and standard deviation. Please adjust.");
7056 };
7057
7058 Chance.prototype.radio = function (options) {
7059 // Initial Letter (Typically Designated by Side of Mississippi River)
7060 options = initOptions(options, {side : "?"});
7061 var fl = "";
7062 switch (options.side.toLowerCase()) {
7063 case "east":
7064 case "e":
7065 fl = "W";
7066 break;
7067 case "west":
7068 case "w":
7069 fl = "K";
7070 break;
7071 default:
7072 fl = this.character({pool: "KW"});
7073 break;
7074 }
7075
7076 return fl + this.character({alpha: true, casing: "upper"}) +
7077 this.character({alpha: true, casing: "upper"}) +
7078 this.character({alpha: true, casing: "upper"});
7079 };
7080
7081 // Set the data as key and data or the data map
7082 Chance.prototype.set = function (name, values) {
7083 if (typeof name === "string") {
7084 data[name] = values;
7085 } else {
7086 data = copyObject(name, data);
7087 }
7088 };
7089
7090 Chance.prototype.tv = function (options) {
7091 return this.radio(options);
7092 };
7093
7094 // ID number for Brazil companies
7095 Chance.prototype.cnpj = function () {
7096 var n = this.n(this.natural, 8, { max: 9 });
7097 var d1 = 2+n[7]*6+n[6]*7+n[5]*8+n[4]*9+n[3]*2+n[2]*3+n[1]*4+n[0]*5;
7098 d1 = 11 - (d1 % 11);
7099 if (d1>=10){
7100 d1 = 0;
7101 }
7102 var d2 = d1*2+3+n[7]*7+n[6]*8+n[5]*9+n[4]*2+n[3]*3+n[2]*4+n[1]*5+n[0]*6;
7103 d2 = 11 - (d2 % 11);
7104 if (d2>=10){
7105 d2 = 0;
7106 }
7107 return ''+n[0]+n[1]+'.'+n[2]+n[3]+n[4]+'.'+n[5]+n[6]+n[7]+'/0001-'+d1+d2;
7108 };
7109
7110 // -- End Miscellaneous --
7111
7112 Chance.prototype.mersenne_twister = function (seed) {
7113 return new MersenneTwister(seed);
7114 };
7115
7116 Chance.prototype.blueimp_md5 = function () {
7117 return new BlueImpMD5();
7118 };
7119
7120 // Mersenne Twister from https://gist.github.com/banksean/300494
7121 /*
7122 A C-program for MT19937, with initialization improved 2002/1/26.
7123 Coded by Takuji Nishimura and Makoto Matsumoto.
7124
7125 Before using, initialize the state by using init_genrand(seed)
7126 or init_by_array(init_key, key_length).
7127
7128 Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,
7129 All rights reserved.
7130
7131 Redistribution and use in source and binary forms, with or without
7132 modification, are permitted provided that the following conditions
7133 are met:
7134
7135 1. Redistributions of source code must retain the above copyright
7136 notice, this list of conditions and the following disclaimer.
7137
7138 2. Redistributions in binary form must reproduce the above copyright
7139 notice, this list of conditions and the following disclaimer in the
7140 documentation and/or other materials provided with the distribution.
7141
7142 3. The names of its contributors may not be used to endorse or promote
7143 products derived from this software without specific prior written
7144 permission.
7145
7146 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
7147 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
7148 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
7149 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
7150 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
7151 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
7152 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
7153 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
7154 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
7155 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
7156 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
7157
7158
7159 Any feedback is very welcome.
7160 http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html
7161 email: m-mat @ math.sci.hiroshima-u.ac.jp (remove space)
7162 */
7163 var MersenneTwister = function (seed) {
7164 if (seed === undefined) {
7165 // kept random number same size as time used previously to ensure no unexpected results downstream
7166 seed = Math.floor(Math.random()*Math.pow(10,13));
7167 }
7168 /* Period parameters */
7169 this.N = 624;
7170 this.M = 397;
7171 this.MATRIX_A = 0x9908b0df; /* constant vector a */
7172 this.UPPER_MASK = 0x80000000; /* most significant w-r bits */
7173 this.LOWER_MASK = 0x7fffffff; /* least significant r bits */
7174
7175 this.mt = new Array(this.N); /* the array for the state vector */
7176 this.mti = this.N + 1; /* mti==N + 1 means mt[N] is not initialized */
7177
7178 this.init_genrand(seed);
7179 };
7180
7181 /* initializes mt[N] with a seed */
7182 MersenneTwister.prototype.init_genrand = function (s) {
7183 this.mt[0] = s >>> 0;
7184 for (this.mti = 1; this.mti < this.N; this.mti++) {
7185 s = this.mt[this.mti - 1] ^ (this.mt[this.mti - 1] >>> 30);
7186 this.mt[this.mti] = (((((s & 0xffff0000) >>> 16) * 1812433253) << 16) + (s & 0x0000ffff) * 1812433253) + this.mti;
7187 /* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */
7188 /* In the previous versions, MSBs of the seed affect */
7189 /* only MSBs of the array mt[]. */
7190 /* 2002/01/09 modified by Makoto Matsumoto */
7191 this.mt[this.mti] >>>= 0;
7192 /* for >32 bit machines */
7193 }
7194 };
7195
7196 /* initialize by an array with array-length */
7197 /* init_key is the array for initializing keys */
7198 /* key_length is its length */
7199 /* slight change for C++, 2004/2/26 */
7200 MersenneTwister.prototype.init_by_array = function (init_key, key_length) {
7201 var i = 1, j = 0, k, s;
7202 this.init_genrand(19650218);
7203 k = (this.N > key_length ? this.N : key_length);
7204 for (; k; k--) {
7205 s = this.mt[i - 1] ^ (this.mt[i - 1] >>> 30);
7206 this.mt[i] = (this.mt[i] ^ (((((s & 0xffff0000) >>> 16) * 1664525) << 16) + ((s & 0x0000ffff) * 1664525))) + init_key[j] + j; /* non linear */
7207 this.mt[i] >>>= 0; /* for WORDSIZE > 32 machines */
7208 i++;
7209 j++;
7210 if (i >= this.N) { this.mt[0] = this.mt[this.N - 1]; i = 1; }
7211 if (j >= key_length) { j = 0; }
7212 }
7213 for (k = this.N - 1; k; k--) {
7214 s = this.mt[i - 1] ^ (this.mt[i - 1] >>> 30);
7215 this.mt[i] = (this.mt[i] ^ (((((s & 0xffff0000) >>> 16) * 1566083941) << 16) + (s & 0x0000ffff) * 1566083941)) - i; /* non linear */
7216 this.mt[i] >>>= 0; /* for WORDSIZE > 32 machines */
7217 i++;
7218 if (i >= this.N) { this.mt[0] = this.mt[this.N - 1]; i = 1; }
7219 }
7220
7221 this.mt[0] = 0x80000000; /* MSB is 1; assuring non-zero initial array */
7222 };
7223
7224 /* generates a random number on [0,0xffffffff]-interval */
7225 MersenneTwister.prototype.genrand_int32 = function () {
7226 var y;
7227 var mag01 = new Array(0x0, this.MATRIX_A);
7228 /* mag01[x] = x * MATRIX_A for x=0,1 */
7229
7230 if (this.mti >= this.N) { /* generate N words at one time */
7231 var kk;
7232
7233 if (this.mti === this.N + 1) { /* if init_genrand() has not been called, */
7234 this.init_genrand(5489); /* a default initial seed is used */
7235 }
7236 for (kk = 0; kk < this.N - this.M; kk++) {
7237 y = (this.mt[kk]&this.UPPER_MASK)|(this.mt[kk + 1]&this.LOWER_MASK);
7238 this.mt[kk] = this.mt[kk + this.M] ^ (y >>> 1) ^ mag01[y & 0x1];
7239 }
7240 for (;kk < this.N - 1; kk++) {
7241 y = (this.mt[kk]&this.UPPER_MASK)|(this.mt[kk + 1]&this.LOWER_MASK);
7242 this.mt[kk] = this.mt[kk + (this.M - this.N)] ^ (y >>> 1) ^ mag01[y & 0x1];
7243 }
7244 y = (this.mt[this.N - 1]&this.UPPER_MASK)|(this.mt[0]&this.LOWER_MASK);
7245 this.mt[this.N - 1] = this.mt[this.M - 1] ^ (y >>> 1) ^ mag01[y & 0x1];
7246
7247 this.mti = 0;
7248 }
7249
7250 y = this.mt[this.mti++];
7251
7252 /* Tempering */
7253 y ^= (y >>> 11);
7254 y ^= (y << 7) & 0x9d2c5680;
7255 y ^= (y << 15) & 0xefc60000;
7256 y ^= (y >>> 18);
7257
7258 return y >>> 0;
7259 };
7260
7261 /* generates a random number on [0,0x7fffffff]-interval */
7262 MersenneTwister.prototype.genrand_int31 = function () {
7263 return (this.genrand_int32() >>> 1);
7264 };
7265
7266 /* generates a random number on [0,1]-real-interval */
7267 MersenneTwister.prototype.genrand_real1 = function () {
7268 return this.genrand_int32() * (1.0 / 4294967295.0);
7269 /* divided by 2^32-1 */
7270 };
7271
7272 /* generates a random number on [0,1)-real-interval */
7273 MersenneTwister.prototype.random = function () {
7274 return this.genrand_int32() * (1.0 / 4294967296.0);
7275 /* divided by 2^32 */
7276 };
7277
7278 /* generates a random number on (0,1)-real-interval */
7279 MersenneTwister.prototype.genrand_real3 = function () {
7280 return (this.genrand_int32() + 0.5) * (1.0 / 4294967296.0);
7281 /* divided by 2^32 */
7282 };
7283
7284 /* generates a random number on [0,1) with 53-bit resolution*/
7285 MersenneTwister.prototype.genrand_res53 = function () {
7286 var a = this.genrand_int32()>>>5, b = this.genrand_int32()>>>6;
7287 return (a * 67108864.0 + b) * (1.0 / 9007199254740992.0);
7288 };
7289
7290 // BlueImp MD5 hashing algorithm from https://github.com/blueimp/JavaScript-MD5
7291 var BlueImpMD5 = function () {};
7292
7293 BlueImpMD5.prototype.VERSION = '1.0.1';
7294
7295 /*
7296 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
7297 * to work around bugs in some JS interpreters.
7298 */
7299 BlueImpMD5.prototype.safe_add = function safe_add(x, y) {
7300 var lsw = (x & 0xFFFF) + (y & 0xFFFF),
7301 msw = (x >> 16) + (y >> 16) + (lsw >> 16);
7302 return (msw << 16) | (lsw & 0xFFFF);
7303 };
7304
7305 /*
7306 * Bitwise rotate a 32-bit number to the left.
7307 */
7308 BlueImpMD5.prototype.bit_roll = function (num, cnt) {
7309 return (num << cnt) | (num >>> (32 - cnt));
7310 };
7311
7312 /*
7313 * These functions implement the five basic operations the algorithm uses.
7314 */
7315 BlueImpMD5.prototype.md5_cmn = function (q, a, b, x, s, t) {
7316 return this.safe_add(this.bit_roll(this.safe_add(this.safe_add(a, q), this.safe_add(x, t)), s), b);
7317 };
7318 BlueImpMD5.prototype.md5_ff = function (a, b, c, d, x, s, t) {
7319 return this.md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
7320 };
7321 BlueImpMD5.prototype.md5_gg = function (a, b, c, d, x, s, t) {
7322 return this.md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
7323 };
7324 BlueImpMD5.prototype.md5_hh = function (a, b, c, d, x, s, t) {
7325 return this.md5_cmn(b ^ c ^ d, a, b, x, s, t);
7326 };
7327 BlueImpMD5.prototype.md5_ii = function (a, b, c, d, x, s, t) {
7328 return this.md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
7329 };
7330
7331 /*
7332 * Calculate the MD5 of an array of little-endian words, and a bit length.
7333 */
7334 BlueImpMD5.prototype.binl_md5 = function (x, len) {
7335 /* append padding */
7336 x[len >> 5] |= 0x80 << (len % 32);
7337 x[(((len + 64) >>> 9) << 4) + 14] = len;
7338
7339 var i, olda, oldb, oldc, oldd,
7340 a = 1732584193,
7341 b = -271733879,
7342 c = -1732584194,
7343 d = 271733878;
7344
7345 for (i = 0; i < x.length; i += 16) {
7346 olda = a;
7347 oldb = b;
7348 oldc = c;
7349 oldd = d;
7350
7351 a = this.md5_ff(a, b, c, d, x[i], 7, -680876936);
7352 d = this.md5_ff(d, a, b, c, x[i + 1], 12, -389564586);
7353 c = this.md5_ff(c, d, a, b, x[i + 2], 17, 606105819);
7354 b = this.md5_ff(b, c, d, a, x[i + 3], 22, -1044525330);
7355 a = this.md5_ff(a, b, c, d, x[i + 4], 7, -176418897);
7356 d = this.md5_ff(d, a, b, c, x[i + 5], 12, 1200080426);
7357 c = this.md5_ff(c, d, a, b, x[i + 6], 17, -1473231341);
7358 b = this.md5_ff(b, c, d, a, x[i + 7], 22, -45705983);
7359 a = this.md5_ff(a, b, c, d, x[i + 8], 7, 1770035416);
7360 d = this.md5_ff(d, a, b, c, x[i + 9], 12, -1958414417);
7361 c = this.md5_ff(c, d, a, b, x[i + 10], 17, -42063);
7362 b = this.md5_ff(b, c, d, a, x[i + 11], 22, -1990404162);
7363 a = this.md5_ff(a, b, c, d, x[i + 12], 7, 1804603682);
7364 d = this.md5_ff(d, a, b, c, x[i + 13], 12, -40341101);
7365 c = this.md5_ff(c, d, a, b, x[i + 14], 17, -1502002290);
7366 b = this.md5_ff(b, c, d, a, x[i + 15], 22, 1236535329);
7367
7368 a = this.md5_gg(a, b, c, d, x[i + 1], 5, -165796510);
7369 d = this.md5_gg(d, a, b, c, x[i + 6], 9, -1069501632);
7370 c = this.md5_gg(c, d, a, b, x[i + 11], 14, 643717713);
7371 b = this.md5_gg(b, c, d, a, x[i], 20, -373897302);
7372 a = this.md5_gg(a, b, c, d, x[i + 5], 5, -701558691);
7373 d = this.md5_gg(d, a, b, c, x[i + 10], 9, 38016083);
7374 c = this.md5_gg(c, d, a, b, x[i + 15], 14, -660478335);
7375 b = this.md5_gg(b, c, d, a, x[i + 4], 20, -405537848);
7376 a = this.md5_gg(a, b, c, d, x[i + 9], 5, 568446438);
7377 d = this.md5_gg(d, a, b, c, x[i + 14], 9, -1019803690);
7378 c = this.md5_gg(c, d, a, b, x[i + 3], 14, -187363961);
7379 b = this.md5_gg(b, c, d, a, x[i + 8], 20, 1163531501);
7380 a = this.md5_gg(a, b, c, d, x[i + 13], 5, -1444681467);
7381 d = this.md5_gg(d, a, b, c, x[i + 2], 9, -51403784);
7382 c = this.md5_gg(c, d, a, b, x[i + 7], 14, 1735328473);
7383 b = this.md5_gg(b, c, d, a, x[i + 12], 20, -1926607734);
7384
7385 a = this.md5_hh(a, b, c, d, x[i + 5], 4, -378558);
7386 d = this.md5_hh(d, a, b, c, x[i + 8], 11, -2022574463);
7387 c = this.md5_hh(c, d, a, b, x[i + 11], 16, 1839030562);
7388 b = this.md5_hh(b, c, d, a, x[i + 14], 23, -35309556);
7389 a = this.md5_hh(a, b, c, d, x[i + 1], 4, -1530992060);
7390 d = this.md5_hh(d, a, b, c, x[i + 4], 11, 1272893353);
7391 c = this.md5_hh(c, d, a, b, x[i + 7], 16, -155497632);
7392 b = this.md5_hh(b, c, d, a, x[i + 10], 23, -1094730640);
7393 a = this.md5_hh(a, b, c, d, x[i + 13], 4, 681279174);
7394 d = this.md5_hh(d, a, b, c, x[i], 11, -358537222);
7395 c = this.md5_hh(c, d, a, b, x[i + 3], 16, -722521979);
7396 b = this.md5_hh(b, c, d, a, x[i + 6], 23, 76029189);
7397 a = this.md5_hh(a, b, c, d, x[i + 9], 4, -640364487);
7398 d = this.md5_hh(d, a, b, c, x[i + 12], 11, -421815835);
7399 c = this.md5_hh(c, d, a, b, x[i + 15], 16, 530742520);
7400 b = this.md5_hh(b, c, d, a, x[i + 2], 23, -995338651);
7401
7402 a = this.md5_ii(a, b, c, d, x[i], 6, -198630844);
7403 d = this.md5_ii(d, a, b, c, x[i + 7], 10, 1126891415);
7404 c = this.md5_ii(c, d, a, b, x[i + 14], 15, -1416354905);
7405 b = this.md5_ii(b, c, d, a, x[i + 5], 21, -57434055);
7406 a = this.md5_ii(a, b, c, d, x[i + 12], 6, 1700485571);
7407 d = this.md5_ii(d, a, b, c, x[i + 3], 10, -1894986606);
7408 c = this.md5_ii(c, d, a, b, x[i + 10], 15, -1051523);
7409 b = this.md5_ii(b, c, d, a, x[i + 1], 21, -2054922799);
7410 a = this.md5_ii(a, b, c, d, x[i + 8], 6, 1873313359);
7411 d = this.md5_ii(d, a, b, c, x[i + 15], 10, -30611744);
7412 c = this.md5_ii(c, d, a, b, x[i + 6], 15, -1560198380);
7413 b = this.md5_ii(b, c, d, a, x[i + 13], 21, 1309151649);
7414 a = this.md5_ii(a, b, c, d, x[i + 4], 6, -145523070);
7415 d = this.md5_ii(d, a, b, c, x[i + 11], 10, -1120210379);
7416 c = this.md5_ii(c, d, a, b, x[i + 2], 15, 718787259);
7417 b = this.md5_ii(b, c, d, a, x[i + 9], 21, -343485551);
7418
7419 a = this.safe_add(a, olda);
7420 b = this.safe_add(b, oldb);
7421 c = this.safe_add(c, oldc);
7422 d = this.safe_add(d, oldd);
7423 }
7424 return [a, b, c, d];
7425 };
7426
7427 /*
7428 * Convert an array of little-endian words to a string
7429 */
7430 BlueImpMD5.prototype.binl2rstr = function (input) {
7431 var i,
7432 output = '';
7433 for (i = 0; i < input.length * 32; i += 8) {
7434 output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xFF);
7435 }
7436 return output;
7437 };
7438
7439 /*
7440 * Convert a raw string to an array of little-endian words
7441 * Characters >255 have their high-byte silently ignored.
7442 */
7443 BlueImpMD5.prototype.rstr2binl = function (input) {
7444 var i,
7445 output = [];
7446 output[(input.length >> 2) - 1] = undefined;
7447 for (i = 0; i < output.length; i += 1) {
7448 output[i] = 0;
7449 }
7450 for (i = 0; i < input.length * 8; i += 8) {
7451 output[i >> 5] |= (input.charCodeAt(i / 8) & 0xFF) << (i % 32);
7452 }
7453 return output;
7454 };
7455
7456 /*
7457 * Calculate the MD5 of a raw string
7458 */
7459 BlueImpMD5.prototype.rstr_md5 = function (s) {
7460 return this.binl2rstr(this.binl_md5(this.rstr2binl(s), s.length * 8));
7461 };
7462
7463 /*
7464 * Calculate the HMAC-MD5, of a key and some data (raw strings)
7465 */
7466 BlueImpMD5.prototype.rstr_hmac_md5 = function (key, data) {
7467 var i,
7468 bkey = this.rstr2binl(key),
7469 ipad = [],
7470 opad = [],
7471 hash;
7472 ipad[15] = opad[15] = undefined;
7473 if (bkey.length > 16) {
7474 bkey = this.binl_md5(bkey, key.length * 8);
7475 }
7476 for (i = 0; i < 16; i += 1) {
7477 ipad[i] = bkey[i] ^ 0x36363636;
7478 opad[i] = bkey[i] ^ 0x5C5C5C5C;
7479 }
7480 hash = this.binl_md5(ipad.concat(this.rstr2binl(data)), 512 + data.length * 8);
7481 return this.binl2rstr(this.binl_md5(opad.concat(hash), 512 + 128));
7482 };
7483
7484 /*
7485 * Convert a raw string to a hex string
7486 */
7487 BlueImpMD5.prototype.rstr2hex = function (input) {
7488 var hex_tab = '0123456789abcdef',
7489 output = '',
7490 x,
7491 i;
7492 for (i = 0; i < input.length; i += 1) {
7493 x = input.charCodeAt(i);
7494 output += hex_tab.charAt((x >>> 4) & 0x0F) +
7495 hex_tab.charAt(x & 0x0F);
7496 }
7497 return output;
7498 };
7499
7500 /*
7501 * Encode a string as utf-8
7502 */
7503 BlueImpMD5.prototype.str2rstr_utf8 = function (input) {
7504 return unescape(encodeURIComponent(input));
7505 };
7506
7507 /*
7508 * Take string arguments and return either raw or hex encoded strings
7509 */
7510 BlueImpMD5.prototype.raw_md5 = function (s) {
7511 return this.rstr_md5(this.str2rstr_utf8(s));
7512 };
7513 BlueImpMD5.prototype.hex_md5 = function (s) {
7514 return this.rstr2hex(this.raw_md5(s));
7515 };
7516 BlueImpMD5.prototype.raw_hmac_md5 = function (k, d) {
7517 return this.rstr_hmac_md5(this.str2rstr_utf8(k), this.str2rstr_utf8(d));
7518 };
7519 BlueImpMD5.prototype.hex_hmac_md5 = function (k, d) {
7520 return this.rstr2hex(this.raw_hmac_md5(k, d));
7521 };
7522
7523 BlueImpMD5.prototype.md5 = function (string, key, raw) {
7524 if (!key) {
7525 if (!raw) {
7526 return this.hex_md5(string);
7527 }
7528
7529 return this.raw_md5(string);
7530 }
7531
7532 if (!raw) {
7533 return this.hex_hmac_md5(key, string);
7534 }
7535
7536 return this.raw_hmac_md5(key, string);
7537 };
7538
7539 // CommonJS module
7540 if (typeof exports !== 'undefined') {
7541 if (typeof module !== 'undefined' && module.exports) {
7542 exports = module.exports = Chance;
7543 }
7544 exports.Chance = Chance;
7545 }
7546
7547 // Register as an anonymous AMD module
7548 if (typeof define === 'function' && define.amd) {
7549 define([], function () {
7550 return Chance;
7551 });
7552 }
7553
7554 // if there is a importsScrips object define chance for worker
7555 // allows worker to use full Chance functionality with seed
7556 if (typeof importScripts !== 'undefined') {
7557 chance = new Chance();
7558 self.Chance = Chance;
7559 }
7560
7561 // If there is a window object, that at least has a document property,
7562 // instantiate and define chance on the window
7563 if (typeof window === "object" && typeof window.document === "object") {
7564 window.Chance = Chance;
7565 window.chance = new Chance();
7566 }
7567})();